ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvaW1hX3BvbGljeSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvaW1hX3BvbGljeQppbmRleCA2NDM0ZjBkLi42Y2Q2ZGFlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2ltYV9wb2xpY3kKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9pbWFfcG9saWN5CkBAIC0yMCw3ICsyMCw3IEBACiAJCQlsc206CVtbc3Vial91c2VyPV0gW3N1Ympfcm9sZT1dIFtzdWJqX3R5cGU9XQogCQkJCSBbb2JqX3VzZXI9XSBbb2JqX3JvbGU9XSBbb2JqX3R5cGU9XV0KIAotCQliYXNlOiAJZnVuYzo9IFtCUFJNX0NIRUNLXVtGSUxFX01NQVBdW0lOT0RFX1BFUk1JU1NJT05dCisJCWJhc2U6IAlmdW5jOj0gW0JQUk1fQ0hFQ0tdW0ZJTEVfTU1BUF1bRklMRV9DSEVDS10KIAkJCW1hc2s6PSBbTUFZX1JFQURdIFtNQVlfV1JJVEVdIFtNQVlfQVBQRU5EXSBbTUFZX0VYRUNdCiAJCQlmc21hZ2ljOj0gaGV4IHZhbHVlCiAJCQl1aWQ6PSBkZWNpbWFsIHZhbHVlCkBAIC00MCwxMSArNDAsMTEgQEAKIAogCQkJbWVhc3VyZSBmdW5jPUJQUk1fQ0hFQ0sKIAkJCW1lYXN1cmUgZnVuYz1GSUxFX01NQVAgbWFzaz1NQVlfRVhFQwotCQkJbWVhc3VyZSBmdW5jPUlOT0RFX1BFUk0gbWFzaz1NQVlfUkVBRCB1aWQ9MAorCQkJbWVhc3VyZSBmdW5jPUZJTEVfQ0hFQ0sgbWFzaz1NQVlfUkVBRCB1aWQ9MAogCiAJCVRoZSBkZWZhdWx0IHBvbGljeSBtZWFzdXJlcyBhbGwgZXhlY3V0YWJsZXMgaW4gYnBybV9jaGVjaywKIAkJYWxsIGZpbGVzIG1tYXBwZWQgZXhlY3V0YWJsZSBpbiBmaWxlX21tYXAsIGFuZCBhbGwgZmlsZXMKLQkJb3BlbiBmb3IgcmVhZCBieSByb290IGluIGlub2RlX3Blcm1pc3Npb24uCisJCW9wZW4gZm9yIHJlYWQgYnkgcm9vdCBpbiBkb19maWxwX29wZW4uCiAKIAkJRXhhbXBsZXMgb2YgTFNNIHNwZWNpZmljIGRlZmluaXRpb25zOgogCkBAIC01NCw4ICs1NCw4IEBACiAKIAkJCWRvbnRfbWVhc3VyZSBvYmpfdHlwZT12YXJfbG9nX3QKIAkJCWRvbnRfbWVhc3VyZSBvYmpfdHlwZT1hdWRpdGRfbG9nX3QKLQkJCW1lYXN1cmUgc3Vial91c2VyPXN5c3RlbV91IGZ1bmM9SU5PREVfUEVSTSBtYXNrPU1BWV9SRUFECi0JCQltZWFzdXJlIHN1Ympfcm9sZT1zeXN0ZW1fciBmdW5jPUlOT0RFX1BFUk0gbWFzaz1NQVlfUkVBRAorCQkJbWVhc3VyZSBzdWJqX3VzZXI9c3lzdGVtX3UgZnVuYz1GSUxFX0NIRUNLIG1hc2s9TUFZX1JFQUQKKwkJCW1lYXN1cmUgc3Vial9yb2xlPXN5c3RlbV9yIGZ1bmM9RklMRV9DSEVDSyBtYXNrPU1BWV9SRUFECiAKIAkJU21hY2s6Ci0JCQltZWFzdXJlIHN1YmpfdXNlcj1fIGZ1bmM9SU5PREVfUEVSTSBtYXNrPU1BWV9SRUFECisJCQltZWFzdXJlIHN1YmpfdXNlcj1fIGZ1bmM9RklMRV9DSEVDSyBtYXNrPU1BWV9SRUFECmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJsb2NrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1ibG9jawppbmRleCBkMmY5MDMzLi40ODczYzc1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJsb2NrCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYmxvY2sKQEAgLTEyOCwzICsxMjgsMTcgQEAKIAkJcHJlZmVycmVkIHJlcXVlc3Qgc2l6ZSBmb3Igd29ya2xvYWRzIHdoZXJlIHN1c3RhaW5lZAogCQl0aHJvdWdocHV0IGlzIGRlc2lyZWQuICBJZiBubyBvcHRpbWFsIEkvTyBzaXplIGlzCiAJCXJlcG9ydGVkIHRoaXMgZmlsZSBjb250YWlucyAwLgorCitXaGF0OgkJL3N5cy9ibG9jay88ZGlzaz4vcXVldWUvbm9tZXJnZXMKK0RhdGU6CQlKYW51YXJ5IDIwMTAKK0NvbnRhY3Q6CitEZXNjcmlwdGlvbjoKKwkJU3RhbmRhcmQgSS9PIGVsZXZhdG9yIG9wZXJhdGlvbnMgaW5jbHVkZSBhdHRlbXB0cyB0bworCQltZXJnZSBjb250aWd1b3VzIEkvT3MuIEZvciBrbm93biByYW5kb20gSS9PIGxvYWRzIHRoZXNlCisJCWF0dGVtcHRzIHdpbGwgYWx3YXlzIGZhaWwgYW5kIHJlc3VsdCBpbiBleHRyYSBjeWNsZXMKKwkJYmVpbmcgc3BlbnQgaW4gdGhlIGtlcm5lbC4gVGhpcyBhbGxvd3Mgb25lIHRvIHR1cm4gb2ZmCisJCXRoaXMgYmVoYXZpb3Igb24gb25lIG9mIHR3byB3YXlzOiBXaGVuIHNldCB0byAxLCBjb21wbGV4CisJCW1lcmdlIGNoZWNrcyBhcmUgZGlzYWJsZWQsIGJ1dCB0aGUgc2ltcGxlIG9uZS1zaG90IG1lcmdlcworCQl3aXRoIHRoZSBwcmV2aW91cyBJL08gcmVxdWVzdCBhcmUgZW5hYmxlZC4gV2hlbiBzZXQgdG8gMiwKKwkJYWxsIG1lcmdlIHRyaWVzIGFyZSBkaXNhYmxlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMCAtCisJCXdoaWNoIGVuYWJsZXMgYWxsIHR5cGVzIG9mIG1lcmdlIHRyaWVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXBvd2VyIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXBvd2VyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMjNjNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtcG93ZXIKQEAgLTAsMCArMSw3OSBAQAorV2hhdDoJCS9zeXMvZGV2aWNlcy8uLi4vcG93ZXIvCitEYXRlOgkJSmFudWFyeSAyMDA5CitDb250YWN0OglSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+CitEZXNjcmlwdGlvbjoKKwkJVGhlIC9zeXMvZGV2aWNlcy8uLi4vcG93ZXIgZGlyZWN0b3J5IGNvbnRhaW5zIGF0dHJpYnV0ZXMKKwkJYWxsb3dpbmcgdGhlIHVzZXIgc3BhY2UgdG8gY2hlY2sgYW5kIG1vZGlmeSBzb21lIHBvd2VyCisJCW1hbmFnZW1lbnQgcmVsYXRlZCBwcm9wZXJ0aWVzIG9mIGdpdmVuIGRldmljZS4KKworV2hhdDoJCS9zeXMvZGV2aWNlcy8uLi4vcG93ZXIvd2FrZXVwCitEYXRlOgkJSmFudWFyeSAyMDA5CitDb250YWN0OglSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+CitEZXNjcmlwdGlvbjoKKwkJVGhlIC9zeXMvZGV2aWNlcy8uLi4vcG93ZXIvd2FrZXVwIGF0dHJpYnV0ZSBhbGxvd3MgdGhlIHVzZXIKKwkJc3BhY2UgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBpcyBlbmFibGVkIHRvIHdha2UgdXAgdGhlIHN5c3RlbQorCQlmcm9tIHNsZWVwIHN0YXRlcywgc3VjaCBhcyB0aGUgbWVtb3J5IHNsZWVwIHN0YXRlIChzdXNwZW5kIHRvCisJCVJBTSkgYW5kIGhpYmVybmF0aW9uIChzdXNwZW5kIHRvIGRpc2spLCBhbmQgdG8gZW5hYmxlIG9yIGRpc2FibGUKKwkJaXQgdG8gZG8gdGhhdCBhcyBkZXNpcmVkLgorCisJCVNvbWUgZGV2aWNlcyBzdXBwb3J0ICJ3YWtldXAiIGV2ZW50cywgd2hpY2ggYXJlIGhhcmR3YXJlIHNpZ25hbHMKKwkJdXNlZCB0byBhY3RpdmF0ZSB0aGUgc3lzdGVtIGZyb20gYSBzbGVlcCBzdGF0ZS4gIFN1Y2ggZGV2aWNlcworCQloYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHR3byB2YWx1ZXMgZm9yIHRoZSBzeXNmcyBwb3dlci93YWtldXAKKwkJZmlsZToKKworCQkrICJlbmFibGVkXG4iIHRvIGlzc3VlIHRoZSBldmVudHM7CisJCSsgImRpc2FibGVkXG4iIG5vdCB0byBkbyBzbzsKKworCQlJbiB0aGF0IGNhc2VzIHRoZSB1c2VyIHNwYWNlIGNhbiBjaGFuZ2UgdGhlIHNldHRpbmcgcmVwcmVzZW50ZWQKKwkJYnkgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBieSB3cml0aW5nIGVpdGhlciAiZW5hYmxlZCIsIG9yCisJCSJkaXNhYmxlZCIgdG8gaXQuCisKKwkJRm9yIHRoZSBkZXZpY2VzIHRoYXQgYXJlIG5vdCBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgc3lzdGVtIHdha2V1cAorCQlldmVudHMgdGhpcyBmaWxlIGNvbnRhaW5zICJcbiIuICBJbiB0aGF0IGNhc2VzIHRoZSB1c2VyIHNwYWNlCisJCWNhbm5vdCBtb2RpZnkgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhbmQgdGhlIGRldmljZSBjYW5ub3QgYmUKKwkJZW5hYmxlZCB0byB3YWtlIHVwIHRoZSBzeXN0ZW0uCisKK1doYXQ6CQkvc3lzL2RldmljZXMvLi4uL3Bvd2VyL2NvbnRyb2wKK0RhdGU6CQlKYW51YXJ5IDIwMDkKK0NvbnRhY3Q6CVJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4KK0Rlc2NyaXB0aW9uOgorCQlUaGUgL3N5cy9kZXZpY2VzLy4uLi9wb3dlci9jb250cm9sIGF0dHJpYnV0ZSBhbGxvd3MgdGhlIHVzZXIKKwkJc3BhY2UgdG8gY29udHJvbCB0aGUgcnVuLXRpbWUgcG93ZXIgbWFuYWdlbWVudCBvZiB0aGUgZGV2aWNlLgorCisJCUFsbCBkZXZpY2VzIGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHdvIHZhbHVlcyBmb3IgdGhlCisJCXBvd2VyL2NvbnRyb2wgZmlsZToKKworCQkrICJhdXRvXG4iIHRvIGFsbG93IHRoZSBkZXZpY2UgdG8gYmUgcG93ZXIgbWFuYWdlZCBhdCBydW4gdGltZTsKKwkJKyAib25cbiIgdG8gcHJldmVudCB0aGUgZGV2aWNlIGZyb20gYmVpbmcgcG93ZXIgbWFuYWdlZDsKKworCQlUaGUgZGVmYXVsdCBmb3IgYWxsIGRldmljZXMgaXMgImF1dG8iLCB3aGljaCBtZWFucyB0aGF0IHRoZXkgbWF5CisJCWJlIHN1YmplY3QgdG8gYXV0b21hdGljIHBvd2VyIG1hbmFnZW1lbnQsIGRlcGVuZGluZyBvbiB0aGVpcgorCQlkcml2ZXJzLiAgQ2hhbmdpbmcgdGhpcyBhdHRyaWJ1dGUgdG8gIm9uIiBwcmV2ZW50cyB0aGUgZHJpdmVyCisJCWZyb20gcG93ZXIgbWFuYWdpbmcgdGhlIGRldmljZSBhdCBydW4gdGltZS4gIERvaW5nIHRoYXQgd2hpbGUKKwkJdGhlIGRldmljZSBpcyBzdXNwZW5kZWQgY2F1c2VzIGl0IHRvIGJlIHdva2VuIHVwLgorCitXaGF0OgkJL3N5cy9kZXZpY2VzLy4uLi9wb3dlci9hc3luYworRGF0ZToJCUphbnVhcnkgMjAwOQorQ29udGFjdDoJUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgorRGVzY3JpcHRpb246CisJCVRoZSAvc3lzL2RldmljZXMvLi4uL2FzeW5jIGF0dHJpYnV0ZSBhbGxvd3MgdGhlIHVzZXIgc3BhY2UgdG8KKwkJZW5hYmxlIG9yIGRpYXNibGUgdGhlIGRldmljZSdzIHN1c3BlbmQgYW5kIHJlc3VtZSBjYWxsYmFja3MgdG8KKwkJYmUgZXhlY3V0ZWQgYXN5bmNocm9ub3VzbHkgKGllLiBpbiBzZXBhcmF0ZSB0aHJlYWRzLCBpbiBwYXJhbGxlbAorCQl3aXRoIHRoZSBtYWluIHN1c3BlbmQvcmVzdW1lIHRocmVhZCkgZHVyaW5nIHN5c3RlbS13aWRlIHBvd2VyCisJCXRyYW5zaXRpb25zIChlZy4gc3VzcGVuZCB0byBSQU0sIGhpYmVybmF0aW9uKS4KKworCQlBbGwgZGV2aWNlcyBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHR3byB2YWx1ZXMgZm9yIHRoZQorCQlwb3dlci9hc3luYyBmaWxlOgorCisJCSsgImVuYWJsZWRcbiIgdG8gcGVybWl0IHRoZSBhc3luY2hyb25vdXMgc3VzcGVuZC9yZXN1bWU7CisJCSsgImRpc2FibGVkXG4iIHRvIGZvcmJpZCBpdDsKKworCQlUaGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgbWF5IGJlIGNoYW5nZWQgYnkgd3JpdGluZyBlaXRoZXIKKwkJImVuYWJsZWQiLCBvciAiZGlzYWJsZWQiIHRvIGl0LgorCisJCUl0IGdlbmVyYWxseSBpcyB1bnNhZmUgdG8gcGVybWl0IHRoZSBhc3luY2hyb25vdXMgc3VzcGVuZC9yZXN1bWUKKwkJb2YgYSBkZXZpY2UgdW5sZXNzIGl0IGlzIGNlcnRhaW4gdGhhdCBhbGwgb2YgdGhlIFBNIGRlcGVuZGVuY2llcworCQlvZiB0aGUgZGV2aWNlIGFyZSBrbm93biB0byB0aGUgUE0gY29yZS4gIEhvd2V2ZXIsIGZvciBzb21lCisJCWRldmljZXMgdGhpcyBhdHRyaWJ1dGUgaXMgc2V0IHRvICJlbmFibGVkIiBieSBidXMgdHlwZSBjb2RlIG9yCisJCWRldmljZSBkcml2ZXJzIGFuZCBpbiB0aGF0IGNhc2VzIGl0IHNob3VsZCBiZSBzYWZlIHRvIGxlYXZlIHRoZQorCQlkZWZhdWx0IHZhbHVlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wb3dlciBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcG93ZXIKaW5kZXggZGNmZjRkMC4uZDZhODAxZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wb3dlcgorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBvd2VyCkBAIC0xMDEsMyArMTAxLDE2IEBACiAKIAkJQ0FVVElPTjogVXNpbmcgaXQgd2lsbCBjYXVzZSB5b3VyIG1hY2hpbmUncyByZWFsLXRpbWUgKENNT1MpCiAJCWNsb2NrIHRvIGJlIHNldCB0byBhIHJhbmRvbSBpbnZhbGlkIHRpbWUgYWZ0ZXIgYSByZXN1bWUuCisKK1doYXQ6CQkvc3lzL3Bvd2VyL3BtX2FzeW5jCitEYXRlOgkJSmFudWFyeSAyMDA5CitDb250YWN0OglSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+CitEZXNjcmlwdGlvbjoKKwkJVGhlIC9zeXMvcG93ZXIvcG1fYXN5bmMgZmlsZSBjb250cm9scyB0aGUgc3dpdGNoIGFsbG93aW5nIHRoZQorCQl1c2VyIHNwYWNlIHRvIGVuYWJsZSBvciBkaXNhYmxlIGFzeW5jaHJvbm91cyBzdXNwZW5kIGFuZCByZXN1bWUKKwkJb2YgZGV2aWNlcy4gIElmIGVuYWJsZWQsIHRoaXMgZmVhdHVyZSB3aWxsIGNhdXNlIHNvbWUgZGV2aWNlCisJCWRyaXZlcnMnIHN1c3BlbmQgYW5kIHJlc3VtZSBjYWxsYmFja3MgdG8gYmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWwKKwkJd2l0aCBlYWNoIG90aGVyIGFuZCB3aXRoIHRoZSBtYWluIHN1c3BlbmQgdGhyZWFkLiAgSXQgaXMgZW5hYmxlZAorCQlpZiB0aGlzIGZpbGUgY29udGFpbnMgIjEiLCB3aGljaCBpcyB0aGUgZGVmYXVsdC4gIEl0IG1heSBiZQorCQlkaXNhYmxlZCBieSB3cml0aW5nICIwIiB0byB0aGlzIGZpbGUsIGluIHdoaWNoIGNhc2UgYWxsIGRldmljZXMKKwkJd2lsbCBiZSBzdXNwZW5kZWQgYW5kIHJlc3VtZWQgc3luY2hyb25vdXNseS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvaW8ueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9pby54bWwKaW5kZXggZjkyZjI0My4uZTg3MDMzMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9pby54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9pby54bWwKQEAgLTU4OSw3ICs1ODksOCBAQAogCSAgICA8ZW50cnk+PC9lbnRyeT4KIAkgICAgPGVudHJ5PkEgcGxhY2UgaG9sZGVyIGZvciBmdXR1cmUgZXh0ZW5zaW9ucyBhbmQgY3VzdG9tCiAoZHJpdmVyIGRlZmluZWQpIGJ1ZmZlciB0eXBlcwotPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfUFJJVkFURTwvY29uc3RhbnQ+IGFuZCBoaWdoZXIuPC9lbnRyeT4KKzxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1BSSVZBVEU8L2NvbnN0YW50PiBhbmQgaGlnaGVyLiBBcHBsaWNhdGlvbnMKK3Nob3VsZCBzZXQgdGhpcyB0byAwLjwvZW50cnk+CiAJICA8L3Jvdz4KIAk8L3Rib2R5PgogICAgICAgPC90Z3JvdXA+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xYnVmLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXFidWYueG1sCmluZGV4IDE4NzA4MTcuLmI4NDNiZDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXFidWYueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXFidWYueG1sCkBAIC01NCwxMiArNTQsMTAgQEAKIGRyaXZlcidzIGluY29taW5nIHF1ZXVlLiBUaGUgc2VtYW50aWNzIGRlcGVuZCBvbiB0aGUgc2VsZWN0ZWQgSS9PCiBtZXRob2QuPC9wYXJhPgogCi0gICAgPHBhcmE+VG8gZW5xdWV1ZSBhIDxsaW5rIGxpbmtlbmQ9Im1tYXAiPm1lbW9yeSBtYXBwZWQ8L2xpbms+Ci1idWZmZXIgYXBwbGljYXRpb25zIHNldCB0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhCi0mdjRsMi1idWZmZXI7IHRvIHRoZSBzYW1lIGJ1ZmZlciB0eXBlIGFzIHByZXZpb3VzbHkgJnY0bDItZm9ybWF0OwotPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBhbmQgJnY0bDItcmVxdWVzdGJ1ZmZlcnM7Ci08c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+LCB0aGUgPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+Ci1maWVsZCB0byA8Y29uc3RhbnQ+VjRMMl9NRU1PUllfTU1BUDwvY29uc3RhbnQ+IGFuZCB0aGUKKyAgICA8cGFyYT5UbyBlbnF1ZXVlIGEgYnVmZmVyIGFwcGxpY2F0aW9ucyBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIG9mIGEgJnY0bDItYnVmZmVyOyB0byB0aGUgc2FtZSBidWZmZXIgdHlwZSBhcyB3YXMgcHJldmlvdXNseSB1c2VkCit3aXRoICZ2NGwyLWZvcm1hdDsgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBhbmQgJnY0bDItcmVxdWVzdGJ1ZmZlcnM7Cis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+LiBBcHBsaWNhdGlvbnMgbXVzdCBhbHNvIHNldCB0aGUKIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkLiBWYWxpZCBpbmRleCBudW1iZXJzIHJhbmdlIGZyb20KIHplcm8gdG8gdGhlIG51bWJlciBvZiBidWZmZXJzIGFsbG9jYXRlZCB3aXRoICZWSURJT0MtUkVRQlVGUzsKICgmdjRsMi1yZXF1ZXN0YnVmZmVyczsgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4pIG1pbnVzIG9uZS4gVGhlCkBAIC03MCw4ICs2OCwxOSBAQAogPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVDwvY29uc3RhbnQ+KSBhcHBsaWNhdGlvbnMgbXVzdCBhbHNvCiBpbml0aWFsaXplIHRoZSA8c3RydWN0ZmllbGQ+Ynl0ZXN1c2VkPC9zdHJ1Y3RmaWVsZD4sCiA8c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPiBhbmQKLTxzdHJ1Y3RmaWVsZD50aW1lc3RhbXA8L3N0cnVjdGZpZWxkPiBmaWVsZHMuIFNlZSA8eHJlZgotCWxpbmtlbmQ9ImJ1ZmZlciIgLz4gZm9yIGRldGFpbHMuIFdoZW4KKzxzdHJ1Y3RmaWVsZD50aW1lc3RhbXA8L3N0cnVjdGZpZWxkPiBmaWVsZHMsIHNlZSA8eHJlZgorbGlua2VuZD0iYnVmZmVyIiAvPiBmb3IgZGV0YWlscy4KK0FwcGxpY2F0aW9ucyBtdXN0IGFsc28gc2V0IDxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IHRvIDAuIElmIGEgZHJpdmVyCitzdXBwb3J0cyBjYXB0dXJpbmcgZnJvbSBzcGVjaWZpYyB2aWRlbyBpbnB1dHMgYW5kIHlvdSB3YW50IHRvIHNwZWNpZnkgYSB2aWRlbworaW5wdXQsIHRoZW4gPHN0cnVjdGZpZWxkPmZsYWdzPC9zdHJ1Y3RmaWVsZD4gc2hvdWxkIGJlIHNldCB0bworPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfSU5QVVQ8L2NvbnN0YW50PiBhbmQgdGhlIGZpZWxkCis8c3RydWN0ZmllbGQ+aW5wdXQ8L3N0cnVjdGZpZWxkPiBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHRoZSBkZXNpcmVkIGlucHV0LgorVGhlIDxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGZpZWxkIG11c3QgYmUgc2V0IHRvIDAuCis8L3BhcmE+CisKKyAgICA8cGFyYT5UbyBlbnF1ZXVlIGEgPGxpbmsgbGlua2VuZD0ibW1hcCI+bWVtb3J5IG1hcHBlZDwvbGluaz4KK2J1ZmZlciBhcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIHRvIDxjb25zdGFudD5WNEwyX01FTU9SWV9NTUFQPC9jb25zdGFudD4uIFdoZW4KIDxjb25zdGFudD5WSURJT0NfUUJVRjwvY29uc3RhbnQ+IGlzIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzCiBzdHJ1Y3R1cmUgdGhlIGRyaXZlciBzZXRzIHRoZQogPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfTUFQUEVEPC9jb25zdGFudD4gYW5kCkBAIC04MSwxNCArOTAsMTAgQEAKICZFSU5WQUw7LjwvcGFyYT4KIAogICAgIDxwYXJhPlRvIGVucXVldWUgYSA8bGluayBsaW5rZW5kPSJ1c2VycCI+dXNlciBwb2ludGVyPC9saW5rPgotYnVmZmVyIGFwcGxpY2F0aW9ucyBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgYQotJnY0bDItYnVmZmVyOyB0byB0aGUgc2FtZSBidWZmZXIgdHlwZSBhcyBwcmV2aW91c2x5ICZ2NGwyLWZvcm1hdDsKLTxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gYW5kICZ2NGwyLXJlcXVlc3RidWZmZXJzOwotPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiwgdGhlIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPgotZmllbGQgdG8gPGNvbnN0YW50PlY0TDJfTUVNT1JZX1VTRVJQVFI8L2NvbnN0YW50PiBhbmQgdGhlCitidWZmZXIgYXBwbGljYXRpb25zIHNldCB0aGUgPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+CitmaWVsZCB0byA8Y29uc3RhbnQ+VjRMMl9NRU1PUllfVVNFUlBUUjwvY29uc3RhbnQ+LCB0aGUKIDxzdHJ1Y3RmaWVsZD5tLnVzZXJwdHI8L3N0cnVjdGZpZWxkPiBmaWVsZCB0byB0aGUgYWRkcmVzcyBvZiB0aGUKLWJ1ZmZlciBhbmQgPHN0cnVjdGZpZWxkPmxlbmd0aDwvc3RydWN0ZmllbGQ+IHRvIGl0cyBzaXplLiBXaGVuIHRoZQotYnVmZmVyIGlzIGludGVuZGVkIGZvciBvdXRwdXQgYWRkaXRpb25hbCBmaWVsZHMgbXVzdCBiZSBzZXQgYXMgYWJvdmUuCitidWZmZXIgYW5kIDxzdHJ1Y3RmaWVsZD5sZW5ndGg8L3N0cnVjdGZpZWxkPiB0byBpdHMgc2l6ZS4KIFdoZW4gPGNvbnN0YW50PlZJRElPQ19RQlVGPC9jb25zdGFudD4gaXMgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIHRoaXMKIHN0cnVjdHVyZSB0aGUgZHJpdmVyIHNldHMgdGhlIDxjb25zdGFudD5WNEwyX0JVRl9GTEFHX1FVRVVFRDwvY29uc3RhbnQ+CiBmbGFnIGFuZCBjbGVhcnMgdGhlIDxjb25zdGFudD5WNEwyX0JVRl9GTEFHX01BUFBFRDwvY29uc3RhbnQ+IGFuZApAQCAtOTYsMTMgKzEwMSwxNCBAQAogPHN0cnVjdGZpZWxkPmZsYWdzPC9zdHJ1Y3RmaWVsZD4gZmllbGQsIG9yIGl0IHJldHVybnMgYW4gZXJyb3IgY29kZS4KIFRoaXMgaW9jdGwgbG9ja3MgdGhlIG1lbW9yeSBwYWdlcyBvZiB0aGUgYnVmZmVyIGluIHBoeXNpY2FsIG1lbW9yeSwKIHRoZXkgY2Fubm90IGJlIHN3YXBwZWQgb3V0IHRvIGRpc2suIEJ1ZmZlcnMgcmVtYWluIGxvY2tlZCB1bnRpbAotZGVxdWV1ZWQsIHVudGlsIHRoZSAmVklESU9DLVNUUkVBTU9GRjsgb3IgJlZJRElPQy1SRVFCVUZTOyBpb2N0bCBhcmUKK2RlcXVldWVkLCB1bnRpbCB0aGUgJlZJRElPQy1TVFJFQU1PRkY7IG9yICZWSURJT0MtUkVRQlVGUzsgaW9jdGwgaXMKIGNhbGxlZCwgb3IgdW50aWwgdGhlIGRldmljZSBpcyBjbG9zZWQuPC9wYXJhPgogCiAgICAgPHBhcmE+QXBwbGljYXRpb25zIGNhbGwgdGhlIDxjb25zdGFudD5WSURJT0NfRFFCVUY8L2NvbnN0YW50PgogaW9jdGwgdG8gZGVxdWV1ZSBhIGZpbGxlZCAoY2FwdHVyaW5nKSBvciBkaXNwbGF5ZWQgKG91dHB1dCkgYnVmZmVyCiBmcm9tIHRoZSBkcml2ZXIncyBvdXRnb2luZyBxdWV1ZS4gVGhleSBqdXN0IHNldCB0aGUKLTxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gYW5kIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPgorPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiwgPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+CithbmQgPHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD4KIGZpZWxkcyBvZiBhICZ2NGwyLWJ1ZmZlcjsgYXMgYWJvdmUsIHdoZW4gPGNvbnN0YW50PlZJRElPQ19EUUJVRjwvY29uc3RhbnQ+CiBpcyBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUgdGhlIGRyaXZlciBmaWxscyB0aGUKIHJlbWFpbmluZyBmaWVsZHMgb3IgcmV0dXJucyBhbiBlcnJvciBjb2RlLjwvcGFyYT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5YnVmLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5YnVmLnhtbAppbmRleCBkODM0OTkzLi5lNjQ5ODA1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWJ1Zi54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnlidWYueG1sCkBAIC01NCwxMiArNTQsMTMgQEAKICZWSURJT0MtUkVRQlVGUzsgaW9jdGwuPC9wYXJhPgogCiAgICAgPHBhcmE+QXBwbGljYXRpb25zIHNldCB0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZAotICAgIG9mIGEgJnY0bDItYnVmZmVyOyB0byB0aGUgc2FtZSBidWZmZXIgdHlwZSBhcyBwcmV2aW91c2x5CisgICAgb2YgYSAmdjRsMi1idWZmZXI7IHRvIHRoZSBzYW1lIGJ1ZmZlciB0eXBlIGFzIHdhcyBwcmV2aW91c2x5IHVzZWQgd2l0aAogJnY0bDItZm9ybWF0OyA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCAmdjRsMi1yZXF1ZXN0YnVmZmVyczsKIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4sIGFuZCB0aGUgPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4KICAgICBmaWVsZC4gVmFsaWQgaW5kZXggbnVtYmVycyByYW5nZSBmcm9tIHplcm8KIHRvIHRoZSBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQgd2l0aCAmVklESU9DLVJFUUJVRlM7CiAgICAgKCZ2NGwyLXJlcXVlc3RidWZmZXJzOyA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPikgbWludXMgb25lLgorVGhlIDxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+IGZpZWxkIHNob3VsZCB0byBzZXQgdG8gMC4KIEFmdGVyIGNhbGxpbmcgPGNvbnN0YW50PlZJRElPQ19RVUVSWUJVRjwvY29uc3RhbnQ+IHdpdGggYSBwb2ludGVyIHRvCiAgICAgdGhpcyBzdHJ1Y3R1cmUgZHJpdmVycyByZXR1cm4gYW4gZXJyb3IgY29kZSBvciBmaWxsIHRoZSByZXN0IG9mCiB0aGUgc3RydWN0dXJlLjwvcGFyYT4KQEAgLTY4LDggKzY5LDggQEAKIDxjb25zdGFudD5WNEwyX0JVRl9GTEFHX01BUFBFRDwvY29uc3RhbnQ+LAogPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfUVVFVUVEPC9jb25zdGFudD4gYW5kCiA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19ET05FPC9jb25zdGFudD4gZmxhZ3Mgd2lsbCBiZSB2YWxpZC4gVGhlCi08c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2lsbCBiZSBzZXQgdG8KLTxjb25zdGFudD5WNEwyX01FTU9SWV9NTUFQPC9jb25zdGFudD4sIHRoZSA8c3RydWN0ZmllbGQ+bS5vZmZzZXQ8L3N0cnVjdGZpZWxkPgorPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+IGZpZWxkIHdpbGwgYmUgc2V0IHRvIHRoZSBjdXJyZW50CitJL08gbWV0aG9kLCB0aGUgPHN0cnVjdGZpZWxkPm0ub2Zmc2V0PC9zdHJ1Y3RmaWVsZD4KIGNvbnRhaW5zIHRoZSBvZmZzZXQgb2YgdGhlIGJ1ZmZlciBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZGV2aWNlIG1lbW9yeSwKIHRoZSA8c3RydWN0ZmllbGQ+bGVuZ3RoPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXRzIHNpemUuIFRoZSBkcml2ZXIgbWF5CiBvciBtYXkgbm90IHNldCB0aGUgcmVtYWluaW5nIGZpZWxkcyBhbmQgZmxhZ3MsIHRoZXkgYXJlIG1lYW5pbmdsZXNzIGluCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1yZXFidWZzLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXJlcWJ1ZnMueG1sCmluZGV4IGJhYjM4MDguLjFjMDgxNjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXJlcWJ1ZnMueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXJlcWJ1ZnMueG1sCkBAIC01NCwyMyArNTQsMjMgQEAKIGFsbG9jYXRlZCB3aXRoIHRoaXMgaW9jdGwgYmVmb3JlIHRoZXkgY2FuIGJlIG1hcHBlZCBpbnRvIHRoZQogYXBwbGljYXRpb24ncyBhZGRyZXNzIHNwYWNlLiBVc2VyIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBieQogYXBwbGljYXRpb25zIHRoZW1zZWx2ZXMsIGFuZCB0aGlzIGlvY3RsIGlzIG1lcmVseSB1c2VkIHRvIHN3aXRjaCB0aGUKLWRyaXZlciBpbnRvIHVzZXIgcG9pbnRlciBJL08gbW9kZS48L3BhcmE+Citkcml2ZXIgaW50byB1c2VyIHBvaW50ZXIgSS9PIG1vZGUgYW5kIHRvIHNldHVwIHNvbWUgaW50ZXJuYWwgc3RydWN0dXJlcy48L3BhcmE+CiAKLSAgICA8cGFyYT5UbyBhbGxvY2F0ZSBkZXZpY2UgYnVmZmVycyBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZSB0aHJlZQotZmllbGRzIG9mIGEgPHN0cnVjdG5hbWU+djRsMl9yZXF1ZXN0YnVmZmVyczwvc3RydWN0bmFtZT4gc3RydWN0dXJlLgorICAgIDxwYXJhPlRvIGFsbG9jYXRlIGRldmljZSBidWZmZXJzIGFwcGxpY2F0aW9ucyBpbml0aWFsaXplIGFsbAorZmllbGRzIG9mIHRoZSA8c3RydWN0bmFtZT52NGwyX3JlcXVlc3RidWZmZXJzPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUuCiBUaGV5IHNldCB0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCB0byB0aGUgcmVzcGVjdGl2ZQogc3RyZWFtIG9yIGJ1ZmZlciB0eXBlLCB0aGUgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8KLXRoZSBkZXNpcmVkIG51bWJlciBvZiBidWZmZXJzLCBhbmQgPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+Ci1tdXN0IGJlIHNldCB0byA8Y29uc3RhbnQ+VjRMMl9NRU1PUllfTU1BUDwvY29uc3RhbnQ+LiBXaGVuIHRoZSBpb2N0bAotaXMgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlIHRoZSBkcml2ZXIgYXR0ZW1wdHMgdG8KLWFsbG9jYXRlIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ1ZmZlcnMgYW5kIHN0b3JlcyB0aGUgYWN0dWFsIG51bWJlcgordGhlIGRlc2lyZWQgbnVtYmVyIG9mIGJ1ZmZlcnMsIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPgorbXVzdCBiZSBzZXQgdG8gdGhlIHJlcXVlc3RlZCBJL08gbWV0aG9kIGFuZCB0aGUgcmVzZXJ2ZWQgYXJyYXkKK211c3QgYmUgemVyb2VkLiBXaGVuIHRoZSBpb2N0bAoraXMgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlIHRoZSBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIGFsbG9jYXRlCit0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBidWZmZXJzIGFuZCBpdCBzdG9yZXMgdGhlIGFjdHVhbCBudW1iZXIKIGFsbG9jYXRlZCBpbiB0aGUgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4gZmllbGQuIEl0IGNhbiBiZQogc21hbGxlciB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkLCBldmVuIHplcm8sIHdoZW4gdGhlIGRyaXZlciBydW5zIG91dAotb2YgZnJlZSBtZW1vcnkuIEEgbGFyZ2VyIG51bWJlciBpcyBwb3NzaWJsZSB3aGVuIHRoZSBkcml2ZXIgcmVxdWlyZXMKLW1vcmUgYnVmZmVycyB0byBmdW5jdGlvbiBjb3JyZWN0bHkuPGZvb3Rub3RlPgotCTxwYXJhPkZvciBleGFtcGxlIHZpZGVvIG91dHB1dCByZXF1aXJlcyBhdCBsZWFzdCB0d28gYnVmZmVycywKK29mIGZyZWUgbWVtb3J5LiBBIGxhcmdlciBudW1iZXIgaXMgYWxzbyBwb3NzaWJsZSB3aGVuIHRoZSBkcml2ZXIgcmVxdWlyZXMKK21vcmUgYnVmZmVycyB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEZvciBleGFtcGxlIHZpZGVvIG91dHB1dCByZXF1aXJlcyBhdCBsZWFzdCB0d28gYnVmZmVycywKIG9uZSBkaXNwbGF5ZWQgYW5kIG9uZSBmaWxsZWQgYnkgdGhlIGFwcGxpY2F0aW9uLjwvcGFyYT4KLQk8L2Zvb3Rub3RlPiBXaGVuIG1lbW9yeSBtYXBwaW5nIEkvTyBpcyBub3Qgc3VwcG9ydGVkIHRoZSBpb2N0bAorICAgIDxwYXJhPldoZW4gdGhlIEkvTyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCB0aGUgaW9jdGwKIHJldHVybnMgYW4gJkVJTlZBTDsuPC9wYXJhPgogCiAgICAgPHBhcmE+QXBwbGljYXRpb25zIGNhbiBjYWxsIDxjb25zdGFudD5WSURJT0NfUkVRQlVGUzwvY29uc3RhbnQ+CkBAIC04MSwxNCArODEsNiBAQAogcmVhc29uIHdoeSBtdW5tYXAoKXBpbmcgb25lIG9yIGV2ZW4gYWxsIGJ1ZmZlcnMgbXVzdCBpbXBseQogc3RyZWFtb2ZmLi0tPjwvcGFyYT4KIAotICAgIDxwYXJhPlRvIG5lZ290aWF0ZSB1c2VyIHBvaW50ZXIgSS9PLCBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZSBvbmx5Ci10aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBhbmQgc2V0Ci08c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4gdG8KLTxjb25zdGFudD5WNEwyX01FTU9SWV9VU0VSUFRSPC9jb25zdGFudD4uIFdoZW4gdGhlIGlvY3RsIGlzIGNhbGxlZAotd2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUgdGhlIGRyaXZlciBwcmVwYXJlcyBmb3IgdXNlciBwb2ludGVyCi1JL08sIHdoZW4gdGhpcyBJL08gbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgdGhlIGlvY3RsIHJldHVybnMgYW4KLSZFSU5WQUw7LjwvcGFyYT4KLQogICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1yZXF1ZXN0YnVmZmVycyI+CiAgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfcmVxdWVzdGJ1ZmZlcnM8L3N0cnVjdG5hbWU+PC90aXRsZT4KICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CkBAIC05Nyw5ICs4OSw3IEBACiAJICA8cm93PgogCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgogCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgotCSAgICA8ZW50cnk+VGhlIG51bWJlciBvZiBidWZmZXJzIHJlcXVlc3RlZCBvciBncmFudGVkLiBUaGlzCi1maWVsZCBpcyBvbmx5IHVzZWQgd2hlbiA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4gaXMgc2V0IHRvCi08Y29uc3RhbnQ+VjRMMl9NRU1PUllfTU1BUDwvY29uc3RhbnQ+LjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgcmVxdWVzdGVkIG9yIGdyYW50ZWQuPC9lbnRyeT4KIAkgIDwvcm93PgogCSAgPHJvdz4KIAkgICAgPGVudHJ5PiZ2NGwyLWJ1Zi10eXBlOzwvZW50cnk+CkBAIC0xMjAsNyArMTEwLDcgQEAKIAkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzJdPC9lbnRyeT4KIAkgICAgPGVudHJ5PkEgcGxhY2UgaG9sZGVyIGZvciBmdXR1cmUgZXh0ZW5zaW9ucyBhbmQgY3VzdG9tCiAoZHJpdmVyIGRlZmluZWQpIGJ1ZmZlciB0eXBlcyA8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9QUklWQVRFPC9jb25zdGFudD4gYW5kCi1oaWdoZXIuPC9lbnRyeT4KK2hpZ2hlci4gVGhpcyBhcnJheSBzaG91bGQgYmUgemVyb2VkIGJ5IGFwcGxpY2F0aW9ucy48L2VudHJ5PgogCSAgPC9yb3c+CiAJPC90Ym9keT4KICAgICAgIDwvdGdyb3VwPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL1JDVS8wMC1JTkRFWAppbmRleCA5YmI2MmY3Li43MWI2ZjUwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS8wMC1JTkRFWApAQCAtNiwxNiArNiwyMiBAQAogCS0gUmV2aWV3IENoZWNrbGlzdCBmb3IgUkNVIFBhdGNoZXMKIGxpc3RSQ1UudHh0CiAJLSBVc2luZyBSQ1UgdG8gUHJvdGVjdCBSZWFkLU1vc3RseSBMaW5rZWQgTGlzdHMKK2xvY2tkZXAudHh0CisJLSBSQ1UgYW5kIGxvY2tkZXAgY2hlY2tpbmcKIE5NSS1SQ1UudHh0CiAJLSBVc2luZyBSQ1UgdG8gUHJvdGVjdCBEeW5hbWljIE5NSSBIYW5kbGVycworcmN1YmFycmllci50eHQKKwktIFJDVSBhbmQgVW5sb2FkYWJsZSBNb2R1bGVzCityY3VsaXN0X251bGxzLnR4dAorCS0gUkNVIGxpc3QgcHJpbWl0aXZlcyBmb3IgdXNlIHdpdGggU0xBQl9ERVNUUk9ZX0JZX1JDVQogcmN1cmVmLnR4dAogCS0gUmVmZXJlbmNlLWNvdW50IGRlc2lnbiBmb3IgZWxlbWVudHMgb2YgbGlzdHMvYXJyYXlzIHByb3RlY3RlZCBieSBSQ1UKIHJjdS50eHQKIAktIFJDVSBDb25jZXB0cwotcmN1YmFycmllci50eHQKLQktIFVubG9hZGluZyBtb2R1bGVzIHRoYXQgdXNlIFJDVSBjYWxsYmFja3MKIFJURlAudHh0CiAJLSBMaXN0IG9mIFJDVSBwYXBlcnMgKGJpYmxpb2dyYXBoeSkgZ29pbmcgYmFjayB0byAxOTgwLgorc3RhbGx3YXJuLnR4dAorCS0gUkNVIENQVSBzdGFsbCB3YXJuaW5ncyAoQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IpCiB0b3J0dXJlLnR4dAogCS0gUkNVIFRvcnR1cmUgVGVzdCBPcGVyYXRpb24gKENPTkZJR19SQ1VfVE9SVFVSRV9URVNUKQogdHJhY2UudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9SVEZQLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL1JURlAudHh0CmluZGV4IGQyYjg1MjMuLjVhZWE0NTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL1JURlAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL1JURlAudHh0CkBAIC0yNSwxMCArMjUsMTAgQEAKIG9wdGltaXplZCBmb3IgbW9kZXJuIGNvbXB1dGVyIHN5c3RlbXMsIHdoaWNoIGlzIG5vdCBzdXJwcmlzaW5nIGdpdmVuCiB0aGF0IHRoZXNlIG92ZXJoZWFkcyB3ZXJlIG5vdCBzbyBleHBlbnNpdmUgaW4gdGhlIG1pZC04MHMuICBOb25ldGhlbGVzcywKIHBhc3NpdmUgc2VyaWFsaXphdGlvbiBhcHBlYXJzIHRvIGJlIHRoZSBmaXJzdCBkZWZlcnJlZC1kZXN0cnVjdGlvbgotbWVjaGFuaXNtIHRvIGJlIHVzZWQgaW4gcHJvZHVjdGlvbi4gIEZ1cnRoZXJtb3JlLCB0aGUgcmVsZXZhbnQgcGF0ZW50IGhhcwotbGFwc2VkLCBzbyB0aGlzIGFwcHJvYWNoIG1heSBiZSB1c2VkIGluIG5vbi1HUEwgc29mdHdhcmUsIGlmIGRlc2lyZWQuCi0oSW4gY29udHJhc3QsIHVzZSBvZiBSQ1UgaXMgcGVybWl0dGVkIG9ubHkgaW4gc29mdHdhcmUgbGljZW5zZWQgdW5kZXIKLUdQTC4gIFNvcnJ5ISEhKQorbWVjaGFuaXNtIHRvIGJlIHVzZWQgaW4gcHJvZHVjdGlvbi4gIEZ1cnRoZXJtb3JlLCB0aGUgcmVsZXZhbnQgcGF0ZW50CitoYXMgbGFwc2VkLCBzbyB0aGlzIGFwcHJvYWNoIG1heSBiZSB1c2VkIGluIG5vbi1HUEwgc29mdHdhcmUsIGlmIGRlc2lyZWQuCisoSW4gY29udHJhc3QsIGltcGxlbWVudGF0aW9uIG9mIFJDVSBpcyBwZXJtaXR0ZWQgb25seSBpbiBzb2Z0d2FyZSBsaWNlbnNlZAordW5kZXIgZWl0aGVyIEdQTCBvciBMR1BMLiAgU29ycnkhISEpCiAKIEluIDE5OTAsIFB1Z2ggW1B1Z2g5MF0gbm90ZWQgdGhhdCBleHBsaWNpdGx5IHRyYWNraW5nIHdoaWNoIHRocmVhZHMKIHdlcmUgcmVhZGluZyBhIGdpdmVuIGRhdGEgc3RydWN0dXJlIHBlcm1pdHRlZCBkZWZlcnJlZCBmcmVlIHRvIG9wZXJhdGUKQEAgLTE1MCw2ICsxNTAsMTggQEAKIExXTiAiV2hhdCBpcyBSQ1U/IiBzZXJpZXMgW1BhdWxFTWNLZW5uZXkyMDA3V2hhdElzUkNVRnVuZGFtZW50YWxseSwKIFBhdWxFTWNLZW5uZXkyMDA4V2hhdElzUkNVVXNhZ2UsIGFuZCBQYXVsRU1jS2VubmV5MjAwOFdoYXRJc1JDVUFQSV0uCiAKKzIwMDggc2F3IGEgam91cm5hbCBwYXBlciBvbiByZWFsLXRpbWUgUkNVIFtEaW5ha2FyR3VuaWd1bnRhbGEyMDA4SUJNU3lzSl0sCithIGhpc3Rvcnkgb2YgaG93IExpbnV4IGNoYW5nZWQgUkNVIG1vcmUgdGhhbiBSQ1UgY2hhbmdlZCBMaW51eAorW1BhdWxFTWNLZW5uZXkyMDA4UkNVT1NSXSwgYW5kIGEgZGVzaWduIG92ZXJ2aWV3IG9mIGhpZXJhcmNoaWNhbCBSQ1UKK1tQYXVsRU1jS2VubmV5MjAwOEhpZXJhcmNoaWNhbFJDVV0uCisKKzIwMDkgaW50cm9kdWNlZCB1c2VyLWxldmVsIFJDVSBhbGdvcml0aG1zIFtQYXVsRU1jS2VubmV5MjAwOU1hbGljaW91c1VSQ1VdLAord2hpY2ggTWF0aGlldSBEZXNub3llcnMgaXMgbm93IG1haW50YWluaW5nIFtNYXRoaWV1RGVzbm95ZXJzMjAwOVVSQ1VdCitbTWF0aGlldURlc25veWVyc1BoRF0uICBUSU5ZX1JDVSBbUGF1bEVNY0tlbm5leTIwMDlCbG9hdFdhdGNoUkNVXSBtYWRlCitpdHMgYXBwZWFyYW5jZSwgYXMgZGlkIGV4cGVkaXRlZCBSQ1UgW1BhdWxFTWNLZW5uZXkyMDA5ZXhwZWRpdGVkUkNVXS4KK1RoZSBwcm9ibGVtIG9mIHJlc2l6ZWFibGUgUkNVLXByb3RlY3RlZCBoYXNoIHRhYmxlcyBtYXkgbm93IGJlIG9uIGEgcGF0aAordG8gYSBzb2x1dGlvbiBbSm9zaFRyaXBsZXR0MjAwOVJQSGFzaF0uCisKIEJpYnRleCBFbnRyaWVzCiAKIEBhcnRpY2xle0t1bmc4MApAQCAtNzMwLDYgKzc0MiwxMSBAQAogIgogfQogCisjCisjCSJXaGF0IGlzIFJDVT8iIExXTiBzZXJpZXMuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwogQGFydGljbGV7RGluYWthckd1bmlndW50YWxhMjAwOElCTVN5c0oKICxhdXRob3I9IkQuIEd1bmlndW50YWxhIGFuZCBQLiBFLiBNY0tlbm5leSBhbmQgSi4gVHJpcGxldHQgYW5kIEouIFdhbHBvbGUiCiAsdGl0bGU9IlRoZSByZWFkLWNvcHktdXBkYXRlIG1lY2hhbmlzbSBmb3Igc3VwcG9ydGluZyByZWFsLXRpbWUgYXBwbGljYXRpb25zIG9uIHNoYXJlZC1tZW1vcnkgbXVsdGlwcm9jZXNzb3Igc3lzdGVtcyB3aXRoIHtMaW51eH0iCkBAIC04MjAsMyArODM3LDM5IEBACiAJVW5pcHJvY2Vzc29yIGFzc3VtcHRpb25zIGFsbG93IHNpbXBsaWZpZWQgUkNVIGltcGxlbWVudGF0aW9uLgogIgogfQorCitAdW5wdWJsaXNoZWR7UGF1bEVNY0tlbm5leTIwMDlleHBlZGl0ZWRSQ1UKKyxBdXRob3I9IlBhdWwgRS4gTWNLZW5uZXkiCissVGl0bGU9Ilt7UEFUQ0h9IC10aXAgMC8zXSBleHBlZGl0ZWQgJ2JpZyBoYW1tZXInIHtSQ1V9IGdyYWNlIHBlcmlvZHMiCissbW9udGg9Ikp1bmUiCissZGF5PSIyNSIKKyx5ZWFyPSIyMDA5IgorLG5vdGU9IkF2YWlsYWJsZToKK1x1cmx7aHR0cDovL2xrbWwub3JnL2xrbWwvMjAwOS82LzI1LzMwNn0KK1tWaWV3ZWQgQXVndXN0IDE2LCAyMDA5XSIKKyxhbm5vdGF0aW9uPSIKKwlGaXJzdCBwb3N0aW5nIG9mIGV4cGVkaXRlZCBSQ1UgdG8gYmUgYWNjZXB0ZWQgaW50byAtdGlwLgorIgorfQorCitAdW5wdWJsaXNoZWR7Sm9zaFRyaXBsZXR0MjAwOVJQSGFzaAorLEF1dGhvcj0iSm9zaCBUcmlwbGV0dCIKKyxUaXRsZT0iU2NhbGFibGUgY29uY3VycmVudCBoYXNoIHRhYmxlcyB2aWEgcmVsYXRpdmlzdGljIHByb2dyYW1taW5nIgorLG1vbnRoPSJTZXB0ZW1iZXIiCisseWVhcj0iMjAwOSIKKyxub3RlPSJMaW51eCBQbHVtYmVycyBDb25mZXJlbmNlIHByZXNlbnRhdGlvbiIKKyxhbm5vdGF0aW9uPSIKKwlSUCBmdW4gd2l0aCBoYXNoIHRhYmxlcy4KKyIKK30KKworQHBoZHRoZXNpc3tNYXRoaWV1RGVzbm95ZXJzUGhECissIHRpdGxlICA9ICJMb3ctSW1wYWN0IE9wZXJhdGluZyBTeXN0ZW0gVHJhY2luZyIKKywgYXV0aG9yID0gIk1hdGhpZXUgRGVzbm95ZXJzIgorLCBzY2hvb2wgPSAiRWNvbGUgUG9seXRlY2huaXF1ZSBkZSBNb250clwne2V9YWwiCissIG1vbnRoICA9ICJEZWNlbWJlciIKKywgeWVhciAgID0gMjAwOQorLG5vdGU9IkF2YWlsYWJsZToKK1x1cmx7aHR0cDovL3d3dy5sdHRuZy5vcmcvcHViL3RoZXNpcy9kZXNub3llcnMtZGlzc2VydGF0aW9uLTIwMDktMTIucGRmfQorW1ZpZXdlZCBEZWNlbWJlciA5LCAyMDA5XSIKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL2NoZWNrbGlzdC50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0CmluZGV4IDUxNTI1YTMuLmNiYzE4MGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL2NoZWNrbGlzdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvY2hlY2tsaXN0LnR4dApAQCAtOCwxMyArOCwxMiBAQAogb3ZlciBhIHJhdGhlciBsb25nIHBlcmlvZCBvZiB0aW1lLCBidXQgaW1wcm92ZW1lbnRzIGFyZSBhbHdheXMgd2VsY29tZSEKIAogMC4JSXMgUkNVIGJlaW5nIGFwcGxpZWQgdG8gYSByZWFkLW1vc3RseSBzaXR1YXRpb24/ICBJZiB0aGUgZGF0YQotCXN0cnVjdHVyZSBpcyB1cGRhdGVkIG1vcmUgdGhhbiBhYm91dCAxMCUgb2YgdGhlIHRpbWUsIHRoZW4KLQl5b3Ugc2hvdWxkIHN0cm9uZ2x5IGNvbnNpZGVyIHNvbWUgb3RoZXIgYXBwcm9hY2gsIHVubGVzcwotCWRldGFpbGVkIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cyBzaG93IHRoYXQgUkNVIGlzIG5vbmV0aGVsZXNzCi0JdGhlIHJpZ2h0IHRvb2wgZm9yIHRoZSBqb2IuICBZZXMsIHlvdSBtaWdodCB0aGluayBvZiBSQ1UKLQlhcyBzaW1wbHkgY3V0dGluZyBvdmVyaGVhZCBvZmYgb2YgdGhlIHJlYWRlcnMgYW5kIGltcG9zaW5nIGl0Ci0Jb24gdGhlIHdyaXRlcnMuICBUaGF0IGlzIGV4YWN0bHkgd2h5IG5vcm1hbCB1c2VzIG9mIFJDVSB3aWxsCi0JZG8gbXVjaCBtb3JlIHJlYWRpbmcgdGhhbiB1cGRhdGluZy4KKwlzdHJ1Y3R1cmUgaXMgdXBkYXRlZCBtb3JlIHRoYW4gYWJvdXQgMTAlIG9mIHRoZSB0aW1lLCB0aGVuIHlvdQorCXNob3VsZCBzdHJvbmdseSBjb25zaWRlciBzb21lIG90aGVyIGFwcHJvYWNoLCB1bmxlc3MgZGV0YWlsZWQKKwlwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMgc2hvdyB0aGF0IFJDVSBpcyBub25ldGhlbGVzcyB0aGUgcmlnaHQKKwl0b29sIGZvciB0aGUgam9iLiAgWWVzLCBSQ1UgZG9lcyByZWR1Y2UgcmVhZC1zaWRlIG92ZXJoZWFkIGJ5CisJaW5jcmVhc2luZyB3cml0ZS1zaWRlIG92ZXJoZWFkLCB3aGljaCBpcyBleGFjdGx5IHdoeSBub3JtYWwgdXNlcworCW9mIFJDVSB3aWxsIGRvIG11Y2ggbW9yZSByZWFkaW5nIHRoYW4gdXBkYXRpbmcuCiAKIAlBbm90aGVyIGV4Y2VwdGlvbiBpcyB3aGVyZSBwZXJmb3JtYW5jZSBpcyBub3QgYW4gaXNzdWUsIGFuZCBSQ1UKIAlwcm92aWRlcyBhIHNpbXBsZXIgaW1wbGVtZW50YXRpb24uICBBbiBleGFtcGxlIG9mIHRoaXMgc2l0dWF0aW9uCkBAIC0zNSwxMyArMzQsMTMgQEAKIAogCUlmIHlvdSBjaG9vc2UgI2IsIGJlIHByZXBhcmVkIHRvIGRlc2NyaWJlIGhvdyB5b3UgaGF2ZSBoYW5kbGVkCiAJbWVtb3J5IGJhcnJpZXJzIG9uIHdlYWtseSBvcmRlcmVkIG1hY2hpbmVzIChwcmV0dHkgbXVjaCBhbGwgb2YKLQl0aGVtIC0tIGV2ZW4geDg2IGFsbG93cyByZWFkcyB0byBiZSByZW9yZGVyZWQpLCBhbmQgYmUgcHJlcGFyZWQKLQl0byBleHBsYWluIHdoeSB0aGlzIGFkZGVkIGNvbXBsZXhpdHkgaXMgd29ydGh3aGlsZS4gIElmIHlvdQotCWNob29zZSAjYywgYmUgcHJlcGFyZWQgdG8gZXhwbGFpbiBob3cgdGhpcyBzaW5nbGUgdGFzayBkb2VzIG5vdAotCWJlY29tZSBhIG1ham9yIGJvdHRsZW5lY2sgb24gYmlnIG11bHRpcHJvY2Vzc29yIG1hY2hpbmVzIChmb3IKLQlleGFtcGxlLCBpZiB0aGUgdGFzayBpcyB1cGRhdGluZyBpbmZvcm1hdGlvbiByZWxhdGluZyB0byBpdHNlbGYKLQl0aGF0IG90aGVyIHRhc2tzIGNhbiByZWFkLCB0aGVyZSBieSBkZWZpbml0aW9uIGNhbiBiZSBubwotCWJvdHRsZW5lY2spLgorCXRoZW0gLS0gZXZlbiB4ODYgYWxsb3dzIGxhdGVyIGxvYWRzIHRvIGJlIHJlb3JkZXJlZCB0byBwcmVjZWRlCisJZWFybGllciBzdG9yZXMpLCBhbmQgYmUgcHJlcGFyZWQgdG8gZXhwbGFpbiB3aHkgdGhpcyBhZGRlZAorCWNvbXBsZXhpdHkgaXMgd29ydGh3aGlsZS4gIElmIHlvdSBjaG9vc2UgI2MsIGJlIHByZXBhcmVkIHRvCisJZXhwbGFpbiBob3cgdGhpcyBzaW5nbGUgdGFzayBkb2VzIG5vdCBiZWNvbWUgYSBtYWpvciBib3R0bGVuZWNrIG9uCisJYmlnIG11bHRpcHJvY2Vzc29yIG1hY2hpbmVzIChmb3IgZXhhbXBsZSwgaWYgdGhlIHRhc2sgaXMgdXBkYXRpbmcKKwlpbmZvcm1hdGlvbiByZWxhdGluZyB0byBpdHNlbGYgdGhhdCBvdGhlciB0YXNrcyBjYW4gcmVhZCwgdGhlcmUKKwlieSBkZWZpbml0aW9uIGNhbiBiZSBubyBib3R0bGVuZWNrKS4KIAogMi4JRG8gdGhlIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgbWFrZSBwcm9wZXIgdXNlIG9mCiAJcmN1X3JlYWRfbG9jaygpIGFuZCBmcmllbmRzPyAgVGhlc2UgcHJpbWl0aXZlcyBhcmUgbmVlZGVkCkBAIC01MSw4ICs1MCwxMCBAQAogCWFjdHVhcmlhbCByaXNrIG9mIHlvdXIga2VybmVsLgogCiAJQXMgYSByb3VnaCBydWxlIG9mIHRodW1iLCBhbnkgZGVyZWZlcmVuY2Ugb2YgYW4gUkNVLXByb3RlY3RlZAotCXBvaW50ZXIgbXVzdCBiZSBjb3ZlcmVkIGJ5IHJjdV9yZWFkX2xvY2soKSBvciByY3VfcmVhZF9sb2NrX2JoKCkKLQlvciBieSB0aGUgYXBwcm9wcmlhdGUgdXBkYXRlLXNpZGUgbG9jay4KKwlwb2ludGVyIG11c3QgYmUgY292ZXJlZCBieSByY3VfcmVhZF9sb2NrKCksIHJjdV9yZWFkX2xvY2tfYmgoKSwKKwlyY3VfcmVhZF9sb2NrX3NjaGVkKCksIG9yIGJ5IHRoZSBhcHByb3ByaWF0ZSB1cGRhdGUtc2lkZSBsb2NrLgorCURpc2FibGluZyBvZiBwcmVlbXB0aW9uIGNhbiBzZXJ2ZSBhcyByY3VfcmVhZF9sb2NrX3NjaGVkKCksIGJ1dAorCWlzIGxlc3MgcmVhZGFibGUuCiAKIDMuCURvZXMgdGhlIHVwZGF0ZSBjb2RlIHRvbGVyYXRlIGNvbmN1cnJlbnQgYWNjZXNzZXM/CiAKQEAgLTYyLDI1ICs2MywyNyBAQAogCW9mIHdheXMgdG8gaGFuZGxlIHRoaXMgY29uY3VycmVuY3ksIGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uOgogCiAJYS4JVXNlIHRoZSBSQ1UgdmFyaWFudHMgb2YgdGhlIGxpc3QgYW5kIGhsaXN0IHVwZGF0ZQotCQlwcmltaXRpdmVzIHRvIGFkZCwgcmVtb3ZlLCBhbmQgcmVwbGFjZSBlbGVtZW50cyBvbiBhbgotCQlSQ1UtcHJvdGVjdGVkIGxpc3QuICBBbHRlcm5hdGl2ZWx5LCB1c2UgdGhlIFJDVS1wcm90ZWN0ZWQKLQkJdHJlZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIExpbnV4IGtlcm5lbC4KKwkJcHJpbWl0aXZlcyB0byBhZGQsIHJlbW92ZSwgYW5kIHJlcGxhY2UgZWxlbWVudHMgb24KKwkJYW4gUkNVLXByb3RlY3RlZCBsaXN0LglBbHRlcm5hdGl2ZWx5LCB1c2UgdGhlIG90aGVyCisJCVJDVS1wcm90ZWN0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHRvCisJCXRoZSBMaW51eCBrZXJuZWwuCiAKIAkJVGhpcyBpcyBhbG1vc3QgYWx3YXlzIHRoZSBiZXN0IGFwcHJvYWNoLgogCiAJYi4JUHJvY2VlZCBhcyBpbiAoYSkgYWJvdmUsIGJ1dCBhbHNvIG1haW50YWluIHBlci1lbGVtZW50CiAJCWxvY2tzICh0aGF0IGFyZSBhY3F1aXJlZCBieSBib3RoIHJlYWRlcnMgYW5kIHdyaXRlcnMpCiAJCXRoYXQgZ3VhcmQgcGVyLWVsZW1lbnQgc3RhdGUuICBPZiBjb3Vyc2UsIGZpZWxkcyB0aGF0Ci0JCXRoZSByZWFkZXJzIHJlZnJhaW4gZnJvbSBhY2Nlc3NpbmcgY2FuIGJlIGd1YXJkZWQgYnkgdGhlCi0JCXVwZGF0ZS1zaWRlIGxvY2suCisJCXRoZSByZWFkZXJzIHJlZnJhaW4gZnJvbSBhY2Nlc3NpbmcgY2FuIGJlIGd1YXJkZWQgYnkKKwkJc29tZSBvdGhlciBsb2NrIGFjcXVpcmVkIG9ubHkgYnkgdXBkYXRlcnMsIGlmIGRlc2lyZWQuCiAKIAkJVGhpcyB3b3JrcyBxdWl0ZSB3ZWxsLCBhbHNvLgogCiAJYy4JTWFrZSB1cGRhdGVzIGFwcGVhciBhdG9taWMgdG8gcmVhZGVycy4gIEZvciBleGFtcGxlLAotCQlwb2ludGVyIHVwZGF0ZXMgdG8gcHJvcGVybHkgYWxpZ25lZCBmaWVsZHMgd2lsbCBhcHBlYXIKLQkJYXRvbWljLCBhcyB3aWxsIGluZGl2aWR1YWwgYXRvbWljIHByaW1pdGl2ZXMuICBPcGVyYXRpb25zCi0JCXBlcmZvcm1lZCB1bmRlciBhIGxvY2sgYW5kIHNlcXVlbmNlcyBvZiBtdWx0aXBsZSBhdG9taWMKLQkJcHJpbWl0aXZlcyB3aWxsIC1ub3QtIGFwcGVhciB0byBiZSBhdG9taWMuCisJCXBvaW50ZXIgdXBkYXRlcyB0byBwcm9wZXJseSBhbGlnbmVkIGZpZWxkcyB3aWxsCisJCWFwcGVhciBhdG9taWMsIGFzIHdpbGwgaW5kaXZpZHVhbCBhdG9taWMgcHJpbWl0aXZlcy4KKwkJU2VxdWVuY2VzIG9mIHBlcmF0aW9ucyBwZXJmb3JtZWQgdW5kZXIgYSBsb2NrIHdpbGwgLW5vdC0KKwkJYXBwZWFyIHRvIGJlIGF0b21pYyB0byBSQ1UgcmVhZGVycywgbm9yIHdpbGwgc2VxdWVuY2VzCisJCW9mIG11bHRpcGxlIGF0b21pYyBwcmltaXRpdmVzLgogCiAJCVRoaXMgY2FuIHdvcmssIGJ1dCBpcyBzdGFydGluZyB0byBnZXQgYSBiaXQgdHJpY2t5LgogCkBAIC05OCw5ICsxMDEsOSBAQAogCQlhIG5ldyBzdHJ1Y3R1cmUgY29udGFpbmluZyB1cGRhdGVkIHZhbHVlcy4KIAogNC4JV2Vha2x5IG9yZGVyZWQgQ1BVcyBwb3NlIHNwZWNpYWwgY2hhbGxlbmdlcy4gIEFsbW9zdCBhbGwgQ1BVcwotCWFyZSB3ZWFrbHkgb3JkZXJlZCAtLSBldmVuIGkzODYgQ1BVcyBhbGxvdyByZWFkcyB0byBiZSByZW9yZGVyZWQuCi0JUkNVIGNvZGUgbXVzdCB0YWtlIGFsbCBvZiB0aGUgZm9sbG93aW5nIG1lYXN1cmVzIHRvIHByZXZlbnQKLQltZW1vcnktY29ycnVwdGlvbiBwcm9ibGVtczoKKwlhcmUgd2Vha2x5IG9yZGVyZWQgLS0gZXZlbiB4ODYgQ1BVcyBhbGxvdyBsYXRlciBsb2FkcyB0byBiZQorCXJlb3JkZXJlZCB0byBwcmVjZWRlIGVhcmxpZXIgc3RvcmVzLiAgUkNVIGNvZGUgbXVzdCB0YWtlIGFsbCBvZgorCXRoZSBmb2xsb3dpbmcgbWVhc3VyZXMgdG8gcHJldmVudCBtZW1vcnktY29ycnVwdGlvbiBwcm9ibGVtczoKIAogCWEuCVJlYWRlcnMgbXVzdCBtYWludGFpbiBwcm9wZXIgb3JkZXJpbmcgb2YgdGhlaXIgbWVtb3J5CiAJCWFjY2Vzc2VzLiAgVGhlIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZSBlbnN1cmVzIHRoYXQKQEAgLTExMywxNCArMTE2LDI1IEBACiAJCVRoZSByY3VfZGVyZWZlcmVuY2UoKSBwcmltaXRpdmUgaXMgYWxzbyBhbiBleGNlbGxlbnQKIAkJZG9jdW1lbnRhdGlvbiBhaWQsIGxldHRpbmcgdGhlIHBlcnNvbiByZWFkaW5nIHRoZSBjb2RlCiAJCWtub3cgZXhhY3RseSB3aGljaCBwb2ludGVycyBhcmUgcHJvdGVjdGVkIGJ5IFJDVS4KKwkJUGxlYXNlIG5vdGUgdGhhdCBjb21waWxlcnMgY2FuIGFsc28gcmVvcmRlciBjb2RlLCBhbmQKKwkJdGhleSBhcmUgYmVjb21pbmcgaW5jcmVhc2luZ2x5IGFnZ3Jlc3NpdmUgYWJvdXQgZG9pbmcKKwkJanVzdCB0aGF0LiAgVGhlIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZSB0aGVyZWZvcmUKKwkJYWxzbyBwcmV2ZW50cyBkZXN0cnVjdGl2ZSBjb21waWxlciBvcHRpbWl6YXRpb25zLgogCi0JCVRoZSByY3VfZGVyZWZlcmVuY2UoKSBwcmltaXRpdmUgaXMgdXNlZCBieSB0aGUgdmFyaW91cwotCQkiX3JjdSgpIiBsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmVzLCBzdWNoIGFzIHRoZQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSgpLiAgTm90ZSB0aGF0IGl0IGlzIHBlcmZlY3RseQotCQlsZWdhbCAoaWYgcmVkdW5kYW50KSBmb3IgdXBkYXRlLXNpZGUgY29kZSB0byB1c2UKLQkJcmN1X2RlcmVmZXJlbmNlKCkgYW5kIHRoZSAiX3JjdSgpIiBsaXN0LXRyYXZlcnNhbAotCQlwcmltaXRpdmVzLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGluIGNvZGUKLQkJdGhhdCBpcyBjb21tb24gdG8gcmVhZGVycyBhbmQgdXBkYXRlcnMuCisJCVRoZSByY3VfZGVyZWZlcmVuY2UoKSBwcmltaXRpdmUgaXMgdXNlZCBieSB0aGUKKwkJdmFyaW91cyAiX3JjdSgpIiBsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmVzLCBzdWNoCisJCWFzIHRoZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSgpLiAgTm90ZSB0aGF0IGl0IGlzCisJCXBlcmZlY3RseSBsZWdhbCAoaWYgcmVkdW5kYW50KSBmb3IgdXBkYXRlLXNpZGUgY29kZSB0bworCQl1c2UgcmN1X2RlcmVmZXJlbmNlKCkgYW5kIHRoZSAiX3JjdSgpIiBsaXN0LXRyYXZlcnNhbAorCQlwcmltaXRpdmVzLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGluIGNvZGUgdGhhdAorCQlpcyBjb21tb24gdG8gcmVhZGVycyBhbmQgdXBkYXRlcnMuICBIb3dldmVyLCBsb2NrZGVwCisJCXdpbGwgY29tcGxhaW4gaWYgeW91IGFjY2VzcyByY3VfZGVyZWZlcmVuY2UoKSBvdXRzaWRlCisJCW9mIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIFNlZSBsb2NrZGVwLnR4dAorCQl0byBsZWFybiB3aGF0IHRvIGRvIGFib3V0IHRoaXMuCisKKwkJT2YgY291cnNlLCBuZWl0aGVyIHJjdV9kZXJlZmVyZW5jZSgpIG5vciB0aGUgIl9yY3UoKSIKKwkJbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlcyBjYW4gc3Vic3RpdHV0ZSBmb3IgYSBnb29kCisJCWNvbmN1cnJlbmN5IGRlc2lnbiBjb29yZGluYXRpbmcgYW1vbmcgbXVsdGlwbGUgdXBkYXRlcnMuCiAKIAliLglJZiB0aGUgbGlzdCBtYWNyb3MgYXJlIGJlaW5nIHVzZWQsIHRoZSBsaXN0X2FkZF90YWlsX3JjdSgpCiAJCWFuZCBsaXN0X2FkZF9yY3UoKSBwcmltaXRpdmVzIG11c3QgYmUgdXNlZCBpbiBvcmRlcgpAQCAtMTM1LDExICsxNDksMTQgQEAKIAkJcmVhZGVycy4gIFNpbWlsYXJseSwgaWYgdGhlIGhsaXN0IG1hY3JvcyBhcmUgYmVpbmcgdXNlZCwKIAkJdGhlIGhsaXN0X2RlbF9yY3UoKSBwcmltaXRpdmUgaXMgcmVxdWlyZWQuCiAKLQkJVGhlIGxpc3RfcmVwbGFjZV9yY3UoKSBwcmltaXRpdmUgbWF5IGJlIHVzZWQgdG8KLQkJcmVwbGFjZSBhbiBvbGQgc3RydWN0dXJlIHdpdGggYSBuZXcgb25lIGluIGFuCi0JCVJDVS1wcm90ZWN0ZWQgbGlzdC4KKwkJVGhlIGxpc3RfcmVwbGFjZV9yY3UoKSBhbmQgaGxpc3RfcmVwbGFjZV9yY3UoKSBwcmltaXRpdmVzCisJCW1heSBiZSB1c2VkIHRvIHJlcGxhY2UgYW4gb2xkIHN0cnVjdHVyZSB3aXRoIGEgbmV3IG9uZQorCQlpbiB0aGVpciByZXNwZWN0aXZlIHR5cGVzIG9mIFJDVS1wcm90ZWN0ZWQgbGlzdHMuCiAKLQlkLglVcGRhdGVzIG11c3QgZW5zdXJlIHRoYXQgaW5pdGlhbGl6YXRpb24gb2YgYSBnaXZlbgorCWQuCVJ1bGVzIHNpbWlsYXIgdG8gKDRiKSBhbmQgKDRjKSBhcHBseSB0byB0aGUgImhsaXN0X251bGxzIgorCQl0eXBlIG9mIFJDVS1wcm90ZWN0ZWQgbGlua2VkIGxpc3RzLgorCisJZS4JVXBkYXRlcyBtdXN0IGVuc3VyZSB0aGF0IGluaXRpYWxpemF0aW9uIG9mIGEgZ2l2ZW4KIAkJc3RydWN0dXJlIGhhcHBlbnMgYmVmb3JlIHBvaW50ZXJzIHRvIHRoYXQgc3RydWN0dXJlIGFyZQogCQlwdWJsaWNpemVkLiAgVXNlIHRoZSByY3VfYXNzaWduX3BvaW50ZXIoKSBwcmltaXRpdmUKIAkJd2hlbiBwdWJsaWNpemluZyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgdGhhdCBjYW4KQEAgLTE1MSwxNiArMTY4LDMxIEBACiAJaXQgY2Fubm90IGJsb2NrLgogCiA2LglTaW5jZSBzeW5jaHJvbml6ZV9yY3UoKSBjYW4gYmxvY2ssIGl0IGNhbm5vdCBiZSBjYWxsZWQgZnJvbQotCWFueSBzb3J0IG9mIGlycSBjb250ZXh0LiAgRGl0dG8gZm9yIHN5bmNocm9uaXplX3NjaGVkKCkgYW5kCi0Jc3luY2hyb25pemVfc3JjdSgpLgorCWFueSBzb3J0IG9mIGlycSBjb250ZXh0LiAgVGhlIHNhbWUgcnVsZSBhcHBsaWVzIGZvcgorCXN5bmNocm9uaXplX3JjdV9iaCgpLCBzeW5jaHJvbml6ZV9zY2hlZCgpLCBzeW5jaHJvbml6ZV9zcmN1KCksCisJc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCgpLCBzeW5jaHJvbml6ZV9yY3VfYmhfZXhwZWRpdGVkKCksCisJc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGUoKSwgYW5kIHN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKCkuCiAKLTcuCUlmIHRoZSB1cGRhdGVyIHVzZXMgY2FsbF9yY3UoKSwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyByZWFkZXJzCi0JbXVzdCB1c2UgcmN1X3JlYWRfbG9jaygpIGFuZCByY3VfcmVhZF91bmxvY2soKS4gIElmIHRoZSB1cGRhdGVyCi0JdXNlcyBjYWxsX3JjdV9iaCgpLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIHJlYWRlcnMgbXVzdCB1c2UKLQlyY3VfcmVhZF9sb2NrX2JoKCkgYW5kIHJjdV9yZWFkX3VubG9ja19iaCgpLiAgSWYgdGhlIHVwZGF0ZXIKLQl1c2VzIGNhbGxfcmN1X3NjaGVkKCksIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVhZGVycyBtdXN0Ci0JZGlzYWJsZSBwcmVlbXB0aW9uLiAgTWl4aW5nIHRoaW5ncyB1cCB3aWxsIHJlc3VsdCBpbiBjb25mdXNpb24KLQlhbmQgYnJva2VuIGtlcm5lbHMuCisJVGhlIGV4cGVkaXRlZCBmb3JtcyBvZiB0aGVzZSBwcmltaXRpdmVzIGhhdmUgdGhlIHNhbWUgc2VtYW50aWNzCisJYXMgdGhlIG5vbi1leHBlZGl0ZWQgZm9ybXMsIGJ1dCBleHBlZGl0aW5nIGlzIGJvdGggZXhwZW5zaXZlCisJYW5kIHVuZnJpZW5kbHkgdG8gcmVhbC10aW1lIHdvcmtsb2Fkcy4JVXNlIG9mIHRoZSBleHBlZGl0ZWQKKwlwcmltaXRpdmVzIHNob3VsZCBiZSByZXN0cmljdGVkIHRvIHJhcmUgY29uZmlndXJhdGlvbi1jaGFuZ2UKKwlvcGVyYXRpb25zIHRoYXQgd291bGQgbm90IG5vcm1hbGx5IGJlIHVuZGVydGFrZW4gd2hpbGUgYSByZWFsLXRpbWUKKwl3b3JrbG9hZCBpcyBydW5uaW5nLgorCis3LglJZiB0aGUgdXBkYXRlciB1c2VzIGNhbGxfcmN1KCkgb3Igc3luY2hyb25pemVfcmN1KCksIHRoZW4gdGhlCisJY29ycmVzcG9uZGluZyByZWFkZXJzIG11c3QgdXNlIHJjdV9yZWFkX2xvY2soKSBhbmQKKwlyY3VfcmVhZF91bmxvY2soKS4gIElmIHRoZSB1cGRhdGVyIHVzZXMgY2FsbF9yY3VfYmgoKSBvcgorCXN5bmNocm9uaXplX3JjdV9iaCgpLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIHJlYWRlcnMgbXVzdAorCXVzZSByY3VfcmVhZF9sb2NrX2JoKCkgYW5kIHJjdV9yZWFkX3VubG9ja19iaCgpLiAgSWYgdGhlCisJdXBkYXRlciB1c2VzIGNhbGxfcmN1X3NjaGVkKCkgb3Igc3luY2hyb25pemVfc2NoZWQoKSwgdGhlbgorCXRoZSBjb3JyZXNwb25kaW5nIHJlYWRlcnMgbXVzdCBkaXNhYmxlIHByZWVtcHRpb24sIHBvc3NpYmx5CisJYnkgY2FsbGluZyByY3VfcmVhZF9sb2NrX3NjaGVkKCkgYW5kIHJjdV9yZWFkX3VubG9ja19zY2hlZCgpLgorCUlmIHRoZSB1cGRhdGVyIHVzZXMgc3luY2hyb25pemVfc3JjdSgpLCB0aGUgdGhlIGNvcnJlc3BvbmRpbmcKKwlyZWFkZXJzIG11c3QgdXNlIHNyY3VfcmVhZF9sb2NrKCkgYW5kIHNyY3VfcmVhZF91bmxvY2soKSwKKwlhbmQgd2l0aCB0aGUgc2FtZSBzcmN1X3N0cnVjdC4JVGhlIHJ1bGVzIGZvciB0aGUgZXhwZWRpdGVkCisJcHJpbWl0aXZlcyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZWlyIG5vbi1leHBlZGl0ZWQgY291bnRlcnBhcnRzLgorCU1peGluZyB0aGluZ3MgdXAgd2lsbCByZXN1bHQgaW4gY29uZnVzaW9uIGFuZCBicm9rZW4ga2VybmVscy4KIAogCU9uZSBleGNlcHRpb24gdG8gdGhpcyBydWxlOiByY3VfcmVhZF9sb2NrKCkgYW5kIHJjdV9yZWFkX3VubG9jaygpCiAJbWF5IGJlIHN1YnN0aXR1dGVkIGZvciByY3VfcmVhZF9sb2NrX2JoKCkgYW5kIHJjdV9yZWFkX3VubG9ja19iaCgpCkBAIC0yMTIsNiArMjQ0LDggQEAKIAllLglQZXJpb2RpY2FsbHkgaW52b2tlIHN5bmNocm9uaXplX3JjdSgpLCBwZXJtaXR0aW5nIGEgbGltaXRlZAogCQludW1iZXIgb2YgdXBkYXRlcyBwZXIgZ3JhY2UgcGVyaW9kLgogCisJVGhlIHNhbWUgY2F1dGlvbnMgYXBwbHkgdG8gY2FsbF9yY3VfYmgoKSBhbmQgY2FsbF9yY3Vfc2NoZWQoKS4KKwogOS4JQWxsIFJDVSBsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmVzLCB3aGljaCBpbmNsdWRlCiAJcmN1X2RlcmVmZXJlbmNlKCksIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KCksCiAJbGlzdF9mb3JfZWFjaF9jb250aW51ZV9yY3UoKSwgYW5kIGxpc3RfZm9yX2VhY2hfc2FmZV9yY3UoKSwKQEAgLTIxOSw3ICsyNTMsOSBAQAogCW11c3QgYmUgcHJvdGVjdGVkIGJ5IGFwcHJvcHJpYXRlIHVwZGF0ZS1zaWRlIGxvY2tzLiAgUkNVCiAJcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGFyZSBkZWxpbWl0ZWQgYnkgcmN1X3JlYWRfbG9jaygpCiAJYW5kIHJjdV9yZWFkX3VubG9jaygpLCBvciBieSBzaW1pbGFyIHByaW1pdGl2ZXMgc3VjaCBhcwotCXJjdV9yZWFkX2xvY2tfYmgoKSBhbmQgcmN1X3JlYWRfdW5sb2NrX2JoKCkuCisJcmN1X3JlYWRfbG9ja19iaCgpIGFuZCByY3VfcmVhZF91bmxvY2tfYmgoKSwgaW4gd2hpY2ggY2FzZQorCXRoZSBtYXRjaGluZyByY3VfZGVyZWZlcmVuY2UoKSBwcmltaXRpdmUgbXVzdCBiZSB1c2VkIGluIG9yZGVyCisJdG8ga2VlcCBsb2NrZGVwIGhhcHB5LCBpbiB0aGlzIGNhc2UsIHJjdV9kZXJlZmVyZW5jZV9iaCgpLgogCiAJVGhlIHJlYXNvbiB0aGF0IGl0IGlzIHBlcm1pc3NpYmxlIHRvIHVzZSBSQ1UgbGlzdC10cmF2ZXJzYWwKIAlwcmltaXRpdmVzIHdoZW4gdGhlIHVwZGF0ZS1zaWRlIGxvY2sgaXMgaGVsZCBpcyB0aGF0IGRvaW5nIHNvCkBAIC0yMjksNyArMjY1LDggQEAKIDEwLglDb252ZXJzZWx5LCBpZiB5b3UgYXJlIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiwKIAlhbmQgeW91IGRvbid0IGhvbGQgdGhlIGFwcHJvcHJpYXRlIHVwZGF0ZS1zaWRlIGxvY2ssIHlvdSAtbXVzdC0KIAl1c2UgdGhlICJfcmN1KCkiIHZhcmlhbnRzIG9mIHRoZSBsaXN0IG1hY3Jvcy4gIEZhaWxpbmcgdG8gZG8gc28KLQl3aWxsIGJyZWFrIEFscGhhIGFuZCBjb25mdXNlIHBlb3BsZSByZWFkaW5nIHlvdXIgY29kZS4KKwl3aWxsIGJyZWFrIEFscGhhLCBjYXVzZSBhZ2dyZXNzaXZlIGNvbXBpbGVycyB0byBnZW5lcmF0ZSBiYWQgY29kZSwKKwlhbmQgY29uZnVzZSBwZW9wbGUgdHJ5aW5nIHRvIHJlYWQgeW91ciBjb2RlLgogCiAxMS4JTm90ZSB0aGF0IHN5bmNocm9uaXplX3JjdSgpIC1vbmx5LSBndWFyYW50ZWVzIHRvIHdhaXQgdW50aWwKIAlhbGwgY3VycmVudGx5IGV4ZWN1dGluZyByY3VfcmVhZF9sb2NrKCktcHJvdGVjdGVkIFJDVSByZWFkLXNpZGUKQEAgLTIzOSwxNSArMjc2LDIxIEBACiAJcmN1X3JlYWRfbG9jaygpLXByb3RlY3RlZCByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMsIGRvIC1ub3QtCiAJdXNlIHN5bmNocm9uaXplX3JjdSgpLgogCi0JSWYgeW91IHdhbnQgdG8gd2FpdCBmb3Igc29tZSBvZiB0aGVzZSBvdGhlciB0aGluZ3MsIHlvdSBtaWdodAotCWluc3RlYWQgbmVlZCB0byB1c2Ugc3luY2hyb25pemVfaXJxKCkgb3Igc3luY2hyb25pemVfc2NoZWQoKS4KKwlTaW1pbGFybHksIGRpc2FibGluZyBwcmVlbXB0aW9uIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHN1YnN0aXR1dGUKKwlmb3IgcmN1X3JlYWRfbG9jaygpLiAgQ29kZSB0aGF0IGF0dGVtcHRzIHRvIHVzZSBwcmVlbXB0aW9uCisJZGlzYWJsaW5nIHdoZXJlIGl0IHNob3VsZCBiZSB1c2luZyByY3VfcmVhZF9sb2NrKCkgd2lsbCBicmVhaworCWluIHJlYWwtdGltZSBrZXJuZWwgYnVpbGRzLgorCisJSWYgeW91IHdhbnQgdG8gd2FpdCBmb3IgaW50ZXJydXB0IGhhbmRsZXJzLCBOTUkgaGFuZGxlcnMsIGFuZAorCWNvZGUgdW5kZXIgdGhlIGluZmx1ZW5jZSBvZiBwcmVlbXB0X2Rpc2FibGUoKSwgeW91IGluc3RlYWQKKwluZWVkIHRvIHVzZSBzeW5jaHJvbml6ZV9pcnEoKSBvciBzeW5jaHJvbml6ZV9zY2hlZCgpLgogCiAxMi4JQW55IGxvY2sgYWNxdWlyZWQgYnkgYW4gUkNVIGNhbGxiYWNrIG11c3QgYmUgYWNxdWlyZWQgZWxzZXdoZXJlCiAJd2l0aCBzb2Z0aXJxIGRpc2FibGVkLCBlLmcuLCB2aWEgc3Bpbl9sb2NrX2lycXNhdmUoKSwKIAlzcGluX2xvY2tfYmgoKSwgZXRjLiAgRmFpbGluZyB0byBkaXNhYmxlIGlycSBvbiBhIGdpdmVuCi0JYWNxdWlzaXRpb24gb2YgdGhhdCBsb2NrIHdpbGwgcmVzdWx0IGluIGRlYWRsb2NrIGFzIHNvb24gYXMgdGhlCi0JUkNVIGNhbGxiYWNrIGhhcHBlbnMgdG8gaW50ZXJydXB0IHRoYXQgYWNxdWlzaXRpb24ncyBjcml0aWNhbAotCXNlY3Rpb24uCisJYWNxdWlzaXRpb24gb2YgdGhhdCBsb2NrIHdpbGwgcmVzdWx0IGluIGRlYWRsb2NrIGFzIHNvb24gYXMKKwl0aGUgUkNVIHNvZnRpcnEgaGFuZGxlciBoYXBwZW5zIHRvIHJ1biB5b3VyIFJDVSBjYWxsYmFjayB3aGlsZQorCWludGVycnVwdGluZyB0aGF0IGFjcXVpc2l0aW9uJ3MgY3JpdGljYWwgc2VjdGlvbi4KIAogMTMuCVJDVSBjYWxsYmFja3MgY2FuIGJlIGFuZCBhcmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWwuICBJbiBtYW55IGNhc2VzLAogCXRoZSBjYWxsYmFjayBjb2RlIHNpbXBseSB3cmFwcGVycyBhcm91bmQga2ZyZWUoKSwgc28gdGhhdCB0aGlzCkBAIC0yNjUsMjkgKzMwOCwzMCBAQAogCW5vdCB0aGUgY2FzZSwgYSBzZWxmLXNwYXduaW5nIFJDVSBjYWxsYmFjayB3b3VsZCBwcmV2ZW50IHRoZQogCXZpY3RpbSBDUFUgZnJvbSBldmVyIGdvaW5nIG9mZmxpbmUuKQogCi0xNC4JU1JDVSAoc3JjdV9yZWFkX2xvY2soKSwgc3JjdV9yZWFkX3VubG9jaygpLCBhbmQgc3luY2hyb25pemVfc3JjdSgpKQotCW1heSBvbmx5IGJlIGludm9rZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQuICBVbmxpa2Ugb3RoZXIgZm9ybXMgb2YKLQlSQ1UsIGl0IC1pcy0gcGVybWlzc2libGUgdG8gYmxvY2sgaW4gYW4gU1JDVSByZWFkLXNpZGUgY3JpdGljYWwKLQlzZWN0aW9uIChkZW1hcmtlZCBieSBzcmN1X3JlYWRfbG9jaygpIGFuZCBzcmN1X3JlYWRfdW5sb2NrKCkpLAotCWhlbmNlIHRoZSAiU1JDVSI6ICJzbGVlcGFibGUgUkNVIi4gIFBsZWFzZSBub3RlIHRoYXQgaWYgeW91Ci0JZG9uJ3QgbmVlZCB0byBzbGVlcCBpbiByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMsIHlvdSBzaG91bGQKLQliZSB1c2luZyBSQ1UgcmF0aGVyIHRoYW4gU1JDVSwgYmVjYXVzZSBSQ1UgaXMgYWxtb3N0IGFsd2F5cwotCWZhc3RlciBhbmQgZWFzaWVyIHRvIHVzZSB0aGFuIGlzIFNSQ1UuCisxNC4JU1JDVSAoc3JjdV9yZWFkX2xvY2soKSwgc3JjdV9yZWFkX3VubG9jaygpLCBzcmN1X2RlcmVmZXJlbmNlKCksCisJc3luY2hyb25pemVfc3JjdSgpLCBhbmQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoKSkgbWF5IG9ubHkKKwliZSBpbnZva2VkIGZyb20gcHJvY2VzcyBjb250ZXh0LiAgVW5saWtlIG90aGVyIGZvcm1zIG9mIFJDVSwgaXQKKwktaXMtIHBlcm1pc3NpYmxlIHRvIGJsb2NrIGluIGFuIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24KKwkoZGVtYXJrZWQgYnkgc3JjdV9yZWFkX2xvY2soKSBhbmQgc3JjdV9yZWFkX3VubG9jaygpKSwgaGVuY2UgdGhlCisJIlNSQ1UiOiAic2xlZXBhYmxlIFJDVSIuICBQbGVhc2Ugbm90ZSB0aGF0IGlmIHlvdSBkb24ndCBuZWVkCisJdG8gc2xlZXAgaW4gcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLCB5b3Ugc2hvdWxkIGJlIHVzaW5nCisJUkNVIHJhdGhlciB0aGFuIFNSQ1UsIGJlY2F1c2UgUkNVIGlzIGFsbW9zdCBhbHdheXMgZmFzdGVyIGFuZAorCWVhc2llciB0byB1c2UgdGhhbiBpcyBTUkNVLgogCiAJQWxzbyB1bmxpa2Ugb3RoZXIgZm9ybXMgb2YgUkNVLCBleHBsaWNpdCBpbml0aWFsaXphdGlvbgogCWFuZCBjbGVhbnVwIGlzIHJlcXVpcmVkIHZpYSBpbml0X3NyY3Vfc3RydWN0KCkgYW5kCiAJY2xlYW51cF9zcmN1X3N0cnVjdCgpLglUaGVzZSBhcmUgcGFzc2VkIGEgInN0cnVjdCBzcmN1X3N0cnVjdCIKIAl0aGF0IGRlZmluZXMgdGhlIHNjb3BlIG9mIGEgZ2l2ZW4gU1JDVSBkb21haW4uCU9uY2UgaW5pdGlhbGl6ZWQsCiAJdGhlIHNyY3Vfc3RydWN0IGlzIHBhc3NlZCB0byBzcmN1X3JlYWRfbG9jaygpLCBzcmN1X3JlYWRfdW5sb2NrKCkKLQlhbmQgc3luY2hyb25pemVfc3JjdSgpLiAgQSBnaXZlbiBzeW5jaHJvbml6ZV9zcmN1KCkgd2FpdHMgb25seQotCWZvciBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBnb3Zlcm5lZCBieSBzcmN1X3JlYWRfbG9jaygpCi0JYW5kIHNyY3VfcmVhZF91bmxvY2soKSBjYWxscyB0aGF0IGhhdmUgYmVlbiBwYXNzZCB0aGUgc2FtZQotCXNyY3Vfc3RydWN0LiAgVGhpcyBwcm9wZXJ0eSBpcyB3aGF0IG1ha2VzIHNsZWVwaW5nIHJlYWQtc2lkZQotCWNyaXRpY2FsIHNlY3Rpb25zIHRvbGVyYWJsZSAtLSBhIGdpdmVuIHN1YnN5c3RlbSBkZWxheXMgb25seQotCWl0cyBvd24gdXBkYXRlcywgbm90IHRob3NlIG9mIG90aGVyIHN1YnN5c3RlbXMgdXNpbmcgU1JDVS4KLQlUaGVyZWZvcmUsIFNSQ1UgaXMgbGVzcyBwcm9uZSB0byBPT00gdGhlIHN5c3RlbSB0aGFuIFJDVSB3b3VsZAotCWJlIGlmIFJDVSdzIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyB3ZXJlIHBlcm1pdHRlZCB0bwotCXNsZWVwLgorCXN5bmNocm9uaXplX3NyY3UoKSwgYW5kIHN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKCkuICBBIGdpdmVuCisJc3luY2hyb25pemVfc3JjdSgpIHdhaXRzIG9ubHkgZm9yIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCisJc2VjdGlvbnMgZ292ZXJuZWQgYnkgc3JjdV9yZWFkX2xvY2soKSBhbmQgc3JjdV9yZWFkX3VubG9jaygpCisJY2FsbHMgdGhhdCBoYXZlIGJlZW4gcGFzc2VkIHRoZSBzYW1lIHNyY3Vfc3RydWN0LiAgVGhpcyBwcm9wZXJ0eQorCWlzIHdoYXQgbWFrZXMgc2xlZXBpbmcgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIHRvbGVyYWJsZSAtLQorCWEgZ2l2ZW4gc3Vic3lzdGVtIGRlbGF5cyBvbmx5IGl0cyBvd24gdXBkYXRlcywgbm90IHRob3NlIG9mIG90aGVyCisJc3Vic3lzdGVtcyB1c2luZyBTUkNVLglUaGVyZWZvcmUsIFNSQ1UgaXMgbGVzcyBwcm9uZSB0byBPT00gdGhlCisJc3lzdGVtIHRoYW4gUkNVIHdvdWxkIGJlIGlmIFJDVSdzIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucworCXdlcmUgcGVybWl0dGVkIHRvIHNsZWVwLgogCiAJVGhlIGFiaWxpdHkgdG8gc2xlZXAgaW4gcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGRvZXMgbm90CiAJY29tZSBmb3IgZnJlZS4JRmlyc3QsIGNvcnJlc3BvbmRpbmcgc3JjdV9yZWFkX2xvY2soKSBhbmQKQEAgLTMxMSwxMiArMzU1LDEyIEBACiAJZGVzdHJ1Y3RpdmUgb3BlcmF0aW9uLCBhbmQgLW9ubHktIC10aGVuLSBpbnZva2UgY2FsbF9yY3UoKSwKIAlzeW5jaHJvbml6ZV9yY3UoKSwgb3IgZnJpZW5kcy4KIAotCUJlY2F1c2UgdGhlc2UgcHJpbWl0aXZlcyBvbmx5IHdhaXQgZm9yIHByZS1leGlzdGluZyByZWFkZXJzLAotCWl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgc2FmZXR5IHRvCi0JYW55IHN1YnNlcXVlbnQgcmVhZGVycy4KKwlCZWNhdXNlIHRoZXNlIHByaW1pdGl2ZXMgb25seSB3YWl0IGZvciBwcmUtZXhpc3RpbmcgcmVhZGVycywgaXQKKwlpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZ3VhcmFudGVlIHRoYXQgYW55IHN1YnNlcXVlbnQKKwlyZWFkZXJzIHdpbGwgZXhlY3V0ZSBzYWZlbHkuCiAKLTE2LglUaGUgdmFyaW91cyBSQ1UgcmVhZC1zaWRlIHByaW1pdGl2ZXMgZG8gLW5vdC0gY29udGFpbiBtZW1vcnkKLQliYXJyaWVycy4gIFRoZSBDUFUgKGFuZCBpbiBzb21lIGNhc2VzLCB0aGUgY29tcGlsZXIpIGlzIGZyZWUKLQl0byByZW9yZGVyIGNvZGUgaW50byBhbmQgb3V0IG9mIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuCi0JSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBSQ1UgdXBkYXRlLXNpZGUgcHJpbWl0aXZlcyB0bwotCWRlYWwgd2l0aCB0aGlzLgorMTYuCVRoZSB2YXJpb3VzIFJDVSByZWFkLXNpZGUgcHJpbWl0aXZlcyBkbyAtbm90LSBuZWNlc3NhcmlseSBjb250YWluCisJbWVtb3J5IGJhcnJpZXJzLiAgWW91IHNob3VsZCB0aGVyZWZvcmUgcGxhbiBmb3IgdGhlIENQVQorCWFuZCB0aGUgY29tcGlsZXIgdG8gZnJlZWx5IHJlb3JkZXIgY29kZSBpbnRvIGFuZCBvdXQgb2YgUkNVCisJcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZQorCVJDVSB1cGRhdGUtc2lkZSBwcmltaXRpdmVzIHRvIGRlYWwgd2l0aCB0aGlzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvbG9ja2RlcC50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9sb2NrZGVwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTI0YjU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvbG9ja2RlcC50eHQKQEAgLTAsMCArMSw2NyBAQAorUkNVIGFuZCBsb2NrZGVwIGNoZWNraW5nCisKK0FsbCBmbGF2b3JzIG9mIFJDVSBoYXZlIGxvY2tkZXAgY2hlY2tpbmcgYXZhaWxhYmxlLCBzbyB0aGF0IGxvY2tkZXAgaXMKK2F3YXJlIG9mIHdoZW4gZWFjaCB0YXNrIGVudGVycyBhbmQgbGVhdmVzIGFueSBmbGF2b3Igb2YgUkNVIHJlYWQtc2lkZQorY3JpdGljYWwgc2VjdGlvbi4gIEVhY2ggZmxhdm9yIG9mIFJDVSBpcyB0cmFja2VkIHNlcGFyYXRlbHkgKGJ1dCBub3RlCit0aGF0IHRoaXMgaXMgbm90IHRoZSBjYXNlIGluIDIuNi4zMiBhbmQgZWFybGllcikuICBUaGlzIGFsbG93cyBsb2NrZGVwJ3MKK3RyYWNraW5nIHRvIGluY2x1ZGUgUkNVIHN0YXRlLCB3aGljaCBjYW4gc29tZXRpbWVzIGhlbHAgd2hlbiBkZWJ1Z2dpbmcKK2RlYWRsb2NrcyBhbmQgdGhlIGxpa2UuCisKK0luIGFkZGl0aW9uLCBSQ1UgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBwcmltaXRpdmVzIHRoYXQgY2hlY2sgbG9ja2RlcCdzCitzdGF0ZToKKworCXJjdV9yZWFkX2xvY2tfaGVsZCgpIGZvciBub3JtYWwgUkNVLgorCXJjdV9yZWFkX2xvY2tfYmhfaGVsZCgpIGZvciBSQ1UtYmguCisJcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKCkgZm9yIFJDVS1zY2hlZC4KKwlzcmN1X3JlYWRfbG9ja19oZWxkKCkgZm9yIFNSQ1UuCisKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgY29uc2VydmF0aXZlLCBhbmQgd2lsbCB0aGVyZWZvcmUgcmV0dXJuIDEgaWYgdGhleQorYXJlbid0IGNlcnRhaW4gKGZvciBleGFtcGxlLCBpZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0KS4KK1RoaXMgcHJldmVudHMgdGhpbmdzIGxpa2UgV0FSTl9PTighcmN1X3JlYWRfbG9ja19oZWxkKCkpIGZyb20gZ2l2aW5nIGZhbHNlCitwb3NpdGl2ZXMgd2hlbiBsb2NrZGVwIGlzIGRpc2FibGVkLgorCitJbiBhZGRpdGlvbiwgYSBzZXBhcmF0ZSBrZXJuZWwgY29uZmlnIHBhcmFtZXRlciBDT05GSUdfUFJPVkVfUkNVIGVuYWJsZXMKK2NoZWNraW5nIG9mIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZXM6CisKKwlyY3VfZGVyZWZlcmVuY2UocCk6CisJCUNoZWNrIGZvciBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCisJcmN1X2RlcmVmZXJlbmNlX2JoKHApOgorCQlDaGVjayBmb3IgUkNVLWJoIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorCXJjdV9kZXJlZmVyZW5jZV9zY2hlZChwKToKKwkJQ2hlY2sgZm9yIFJDVS1zY2hlZCByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKwlzcmN1X2RlcmVmZXJlbmNlKHAsIHNwKToKKwkJQ2hlY2sgZm9yIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCisJcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIGMpOgorCQlVc2UgZXhwbGljaXQgY2hlY2sgZXhwcmVzc2lvbiAiYyIuCisJcmN1X2RlcmVmZXJlbmNlX3JhdyhwKQorCQlEb24ndCBjaGVjay4gIChVc2Ugc3BhcmluZ2x5LCBpZiBhdCBhbGwuKQorCitUaGUgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKCkgY2hlY2sgZXhwcmVzc2lvbiBjYW4gYmUgYW55IGJvb2xlYW4KK2V4cHJlc3Npb24sIGJ1dCB3b3VsZCBub3JtYWxseSBpbmNsdWRlIG9uZSBvZiB0aGUgcmN1X3JlYWRfbG9ja19oZWxkKCkKK2ZhbWlseSBvZiBmdW5jdGlvbnMgYW5kIGEgbG9ja2RlcCBleHByZXNzaW9uLiAgSG93ZXZlciwgYW55IGJvb2xlYW4KK2V4cHJlc3Npb24gY2FuIGJlIHVzZWQuICBGb3IgYSBtb2RlcmF0ZWx5IG9ybmF0ZSBleGFtcGxlLCBjb25zaWRlcgordGhlIGZvbGxvd2luZzoKKworCWZpbGUgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soZmR0LT5mZFtmZF0sCisJCQkJICAgICByY3VfcmVhZF9sb2NrX2hlbGQoKSB8fAorCQkJCSAgICAgbG9ja2RlcF9pc19oZWxkKCZmaWxlcy0+ZmlsZV9sb2NrKSB8fAorCQkJCSAgICAgYXRvbWljX3JlYWQoJmZpbGVzLT5jb3VudCkgPT0gMSk7CisKK1RoaXMgZXhwcmVzc2lvbiBwaWNrcyB1cCB0aGUgcG9pbnRlciAiZmR0LT5mZFtmZF0iIGluIGFuIFJDVS1zYWZlIG1hbm5lciwKK2FuZCwgaWYgQ09ORklHX1BST1ZFX1JDVSBpcyBjb25maWd1cmVkLCB2ZXJpZmllcyB0aGF0IHRoaXMgZXhwcmVzc2lvbgoraXMgdXNlZCBpbjoKKworMS4JQW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLCBvcgorMi4Jd2l0aCBmaWxlcy0+ZmlsZV9sb2NrIGhlbGQsIG9yCiszLglvbiBhbiB1bnNoYXJlZCBmaWxlc19zdHJ1Y3QuCisKK0luIGNhc2UgKDEpLCB0aGUgcG9pbnRlciBpcyBwaWNrZWQgdXAgaW4gYW4gUkNVLXNhZmUgbWFubmVyIGZvciB2YW5pbGxhCitSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLCBpbiBjYXNlICgyKSB0aGUgLT5maWxlX2xvY2sgcHJldmVudHMKK2FueSBjaGFuZ2UgZnJvbSB0YWtpbmcgcGxhY2UsIGFuZCBmaW5hbGx5LCBpbiBjYXNlICgzKSB0aGUgY3VycmVudCB0YXNrCitpcyB0aGUgb25seSB0YXNrIGFjY2Vzc2luZyB0aGUgZmlsZV9zdHJ1Y3QsIGFnYWluIHByZXZlbnRpbmcgYW55IGNoYW5nZQorZnJvbSB0YWtpbmcgcGxhY2UuCisKK1RoZXJlIGFyZSBjdXJyZW50bHkgb25seSAidW5pdmVyc2FsIiB2ZXJzaW9ucyBvZiB0aGUgcmN1X2Fzc2lnbl9wb2ludGVyKCkKK2FuZCBSQ1UgbGlzdC0vdHJlZS10cmF2ZXJzYWwgcHJpbWl0aXZlcywgd2hpY2ggZG8gbm90ICh5ZXQpIGNoZWNrIGZvcgorYmVpbmcgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgSW4gdGhlIGZ1dHVyZSwgc2VwYXJhdGUKK3ZlcnNpb25zIG9mIHRoZXNlIHByaW1pdGl2ZXMgbWlnaHQgYmUgY3JlYXRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0CmluZGV4IDJhMjM1MjMuLjMxODUyNzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dApAQCAtNzUsNiArNzUsOCBAQAogCXNlYXJjaCBmb3IgdGhlIHN0cmluZyAiUGF0ZW50IiBpbiBSVEZQLnR4dCB0byBmaW5kIHRoZW0uCiAJT2YgdGhlc2UsIG9uZSB3YXMgYWxsb3dlZCB0byBsYXBzZSBieSB0aGUgYXNzaWduZWUsIGFuZCB0aGUKIAlvdGhlcnMgaGF2ZSBiZWVuIGNvbnRyaWJ1dGVkIHRvIHRoZSBMaW51eCBrZXJuZWwgdW5kZXIgR1BMLgorCVRoZXJlIGFyZSBub3cgYWxzbyBMR1BMIGltcGxlbWVudGF0aW9ucyBvZiB1c2VyLWxldmVsIFJDVQorCWF2YWlsYWJsZSAoaHR0cDovL2x0dG5nLm9yZy8/cT1ub2RlLzE4KS4KIAogbwlJIGhlYXIgdGhhdCBSQ1UgbmVlZHMgd29yayBpbiBvcmRlciB0byBzdXBwb3J0IHJlYWx0aW1lIGtlcm5lbHM/CiAKQEAgLTkxLDQ4ICs5Myw0IEBACiAKIG8JV2hhdCBhcmUgYWxsIHRoZXNlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5PwogCi0KLQlOTUktUkNVLnR4dAotCi0JCURlc2NyaWJlcyBob3cgdG8gdXNlIFJDVSB0byBpbXBsZW1lbnQgZHluYW1pYwotCQlOTUkgaGFuZGxlcnMsIHdoaWNoIGNhbiBiZSByZXZlY3RvcmVkIG9uIHRoZSBmbHksCi0JCXdpdGhvdXQgcmVib290aW5nLgotCi0JUlRGUC50eHQKLQotCQlMaXN0IG9mIFJDVS1yZWxhdGVkIHB1YmxpY2F0aW9ucyBhbmQgd2ViIHNpdGVzLgotCi0JVVAudHh0Ci0KLQkJRGlzY3Vzc2lvbiBvZiBSQ1UgdXNhZ2UgaW4gVVAga2VybmVscy4KLQotCWFycmF5UkNVLnR4dAotCi0JCURlc2NyaWJlcyBob3cgdG8gdXNlIFJDVSB0byBwcm90ZWN0IGFycmF5cywgd2l0aAotCQlyZXNpemVhYmxlIGFycmF5cyB3aG9zZSBlbGVtZW50cyByZWZlcmVuY2Ugb3RoZXIKLQkJZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG9mIHRoZSBtb3N0IGludGVyZXN0LgotCi0JY2hlY2tsaXN0LnR4dAotCi0JCUxpc3RzIHRoaW5ncyB0byBjaGVjayBmb3Igd2hlbiBpbnNwZWN0aW5nIGNvZGUgdGhhdAotCQl1c2VzIFJDVS4KLQotCWxpc3RSQ1UudHh0Ci0KLQkJRGVzY3JpYmVzIGhvdyB0byB1c2UgUkNVIHRvIHByb3RlY3QgbGlua2VkIGxpc3RzLgotCQlUaGlzIGlzIHRoZSBzaW1wbGVzdCBhbmQgbW9zdCBjb21tb24gdXNlIG9mIFJDVQotCQlpbiB0aGUgTGludXgga2VybmVsLgotCi0JcmN1LnR4dAotCi0JCVlvdSBhcmUgcmVhZGluZyBpdCEKLQotCXJjdXJlZi50eHQKLQotCQlEZXNjcmliZXMgaG93IHRvIGNvbWJpbmUgdXNlIG9mIHJlZmVyZW5jZSBjb3VudHMKLQkJd2l0aCBSQ1UuCi0KLQl3aGF0aXNSQ1UudHh0Ci0KLQkJT3ZlcnZpZXcgb2YgaG93IHRoZSBSQ1UgaW1wbGVtZW50YXRpb24gd29ya3MuICBBbG9uZwotCQl0aGUgd2F5LCBwcmVzZW50cyBhIGNvbmNlcHR1YWwgdmlldyBvZiBSQ1UuCisJU2VlIDAwLUlOREVYIGZvciB0aGUgbGlzdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3N0YWxsd2Fybi50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9zdGFsbHdhcm4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MjNkMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9zdGFsbHdhcm4udHh0CkBAIC0wLDAgKzEsNTggQEAKK1VzaW5nIFJDVSdzIENQVSBTdGFsbCBEZXRlY3RvcgorCitUaGUgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1Iga2VybmVsIGNvbmZpZyBwYXJhbWV0ZXIgZW5hYmxlcworUkNVJ3MgQ1BVIHN0YWxsIGRldGVjdG9yLCB3aGljaCBkZXRlY3RzIGNvbmRpdGlvbnMgdGhhdCB1bmR1bHkgZGVsYXkKK1JDVSBncmFjZSBwZXJpb2RzLiAgVGhlIHN0YWxsIGRldGVjdG9yJ3MgaWRlYSBvZiB3aGF0IGNvbnN0aXR1dGVzCisidW5kdWx5IGRlbGF5ZWQiIGlzIGNvbnRyb2xsZWQgYnkgYSBwYWlyIG9mIEMgcHJlcHJvY2Vzc29yIG1hY3JvczoKKworUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9DSEVDSworCisJVGhpcyBtYWNybyBkZWZpbmVzIHRoZSBwZXJpb2Qgb2YgdGltZSB0aGF0IFJDVSB3aWxsIHdhaXQgZnJvbQorCXRoZSBiZWdpbm5pbmcgb2YgYSBncmFjZSBwZXJpb2QgdW50aWwgaXQgaXNzdWVzIGFuIFJDVSBDUFUKKwlzdGFsbCB3YXJuaW5nLglJdCBpcyBub3JtYWxseSB0ZW4gc2Vjb25kcy4KKworUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9SRUNIRUNLCisKKwlUaGlzIG1hY3JvIGRlZmluZXMgdGhlIHBlcmlvZCBvZiB0aW1lIHRoYXQgUkNVIHdpbGwgd2FpdCBhZnRlcgorCWlzc3VpbmcgYSBzdGFsbCB3YXJuaW5nIHVudGlsIGl0IGlzc3VlcyBhbm90aGVyIHN0YWxsIHdhcm5pbmcuCisJSXQgaXMgbm9ybWFsbHkgc2V0IHRvIHRoaXJ0eSBzZWNvbmRzLgorCitSQ1VfU1RBTExfUkFUX0RFTEFZCisKKwlUaGUgQ1BVIHN0YWxsIGRldGVjdG9yIHRyaWVzIHRvIG1ha2UgdGhlIG9mZmVuZGluZyBDUFUgcmF0IG9uIGl0c2VsZiwKKwlhcyB0aGlzIG9mdGVuIGdpdmVzIGJldHRlci1xdWFsaXR5IHN0YWNrIHRyYWNlcy4gIEhvd2V2ZXIsIGlmCisJdGhlIG9mZmVuZGluZyBDUFUgZG9lcyBub3QgZGV0ZWN0IGl0cyBvd24gc3RhbGwgaW4gdGhlIG51bWJlcgorCW9mIGppZmZpZXMgc3BlY2lmaWVkIGJ5IFJDVV9TVEFMTF9SQVRfREVMQVksIHRoZW4gb3RoZXIgQ1BVcyB3aWxsCisJY29tcGxhaW4uICBUaGlzIGlzIG5vcm1hbGx5IHNldCB0byB0d28gamlmZmllcy4KKworVGhlIGZvbGxvd2luZyBwcm9ibGVtcyBjYW4gcmVzdWx0IGluIGFuIFJDVSBDUFUgc3RhbGwgd2FybmluZzoKKworbwlBIENQVSBsb29waW5nIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKwkKK28JQSBDUFUgbG9vcGluZyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisKK28JQSBDUFUgbG9vcGluZyB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQuCisKK28JRm9yICFDT05GSUdfUFJFRU1QVCBrZXJuZWxzLCBhIENQVSBsb29waW5nIGFueXdoZXJlIGluIHRoZSBrZXJuZWwKKwl3aXRob3V0IGludm9raW5nIHNjaGVkdWxlKCkuCisKK28JQSBidWcgaW4gdGhlIFJDVSBpbXBsZW1lbnRhdGlvbi4KKworbwlBIGhhcmR3YXJlIGZhaWx1cmUuICBUaGlzIGlzIHF1aXRlIHVubGlrZWx5LCBidXQgaGFzIG9jY3VycmVkCisJYXQgbGVhc3Qgb25jZSBpbiBhIGZvcm1lciBsaWZlLiAgQSBDUFUgZmFpbGVkIGluIGEgcnVubmluZyBzeXN0ZW0sCisJYmVjb21pbmcgdW5yZXNwb25zaXZlLCBidXQgbm90IGNhdXNpbmcgYW4gaW1tZWRpYXRlIGNyYXNoLgorCVRoaXMgcmVzdWx0ZWQgaW4gYSBzZXJpZXMgb2YgUkNVIENQVSBzdGFsbCB3YXJuaW5ncywgZXZlbnR1YWxseQorCWxlYWRpbmcgdGhlIHJlYWxpemF0aW9uIHRoYXQgdGhlIENQVSBoYWQgZmFpbGVkLgorCitUaGUgUkNVLCBSQ1Utc2NoZWQsIGFuZCBSQ1UtYmggaW1wbGVtZW50YXRpb25zIGhhdmUgQ1BVIHN0YWxsIHdhcm5pbmcuCitTUkNVIGRvZXMgbm90IGRvIHNvIGRpcmVjdGx5LCBidXQgaXRzIGNhbGxzIHRvIHN5bmNocm9uaXplX3NjaGVkKCkgd2lsbAorcmVzdWx0IGluIFJDVS1zY2hlZCBkZXRlY3RpbmcgYW55IENQVSBzdGFsbHMgdGhhdCBtaWdodCBiZSBvY2N1cnJpbmcuCisKK1RvIGRpYWdub3NlIHRoZSBjYXVzZSBvZiB0aGUgc3RhbGwsIGluc3BlY3QgdGhlIHN0YWNrIHRyYWNlcy4gIFRoZSBvZmZlbmRpbmcKK2Z1bmN0aW9uIHdpbGwgdXN1YWxseSBiZSBuZWFyIHRoZSB0b3Agb2YgdGhlIHN0YWNrLiAgSWYgeW91IGhhdmUgYSBzZXJpZXMKK29mIHN0YWxsIHdhcm5pbmdzIGZyb20gYSBzaW5nbGUgZXh0ZW5kZWQgc3RhbGwsIGNvbXBhcmluZyB0aGUgc3RhY2sgdHJhY2VzCitjYW4gb2Z0ZW4gaGVscCBkZXRlcm1pbmUgd2hlcmUgdGhlIHN0YWxsIGlzIG9jY3VycmluZywgd2hpY2ggd2lsbCB1c3VhbGx5CitiZSBpbiB0aGUgZnVuY3Rpb24gbmVhcmVzdCB0aGUgdG9wIG9mIHRoZSBzdGFjayB0aGF0IHN0YXlzIHRoZSBzYW1lIGZyb20KK3RyYWNlIHRvIHRyYWNlLgorCitSQ1UgYnVncyBjYW4gb2Z0ZW4gYmUgZGVidWdnZWQgd2l0aCB0aGUgaGVscCBvZiBDT05GSUdfUkNVX1RSQUNFLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvdG9ydHVyZS50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS90b3J0dXJlLnR4dAppbmRleCA5ZGJhM2JiLi4wZTUwYmMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS90b3J0dXJlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS90b3J0dXJlLnR4dApAQCAtMzAsNiArMzAsMTggQEAKIAogVGhpcyBtb2R1bGUgaGFzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKIAorZnFzX2R1cmF0aW9uCUR1cmF0aW9uIChpbiBtaWNyb3NlY29uZHMpIG9mIGFydGlmaWNpYWxseSBpbmR1Y2VkIGJ1cnN0cworCQlvZiBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSBpbnZvY2F0aW9ucy4gIEluIFJDVQorCQlpbXBsZW1lbnRhdGlvbnMgaGF2aW5nIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpLCB0aGVzZQorCQlidXJzdHMgaGVscCBmb3JjZSByYWNlcyBiZXR3ZWVuIGZvcmNpbmcgYSBnaXZlbiBncmFjZQorCQlwZXJpb2QgYW5kIHRoYXQgZ3JhY2UgcGVyaW9kIGVuZGluZyBvbiBpdHMgb3duLgorCitmcXNfaG9sZG9mZglIb2xkb2ZmIHRpbWUgKGluIG1pY3Jvc2Vjb25kcykgYmV0d2VlbiBjb25zZWN1dGl2ZSBjYWxscworCQl0byBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSB3aXRoaW4gYSBidXJzdC4KKworZnFzX3N0dXR0ZXIJV2FpdCB0aW1lIChpbiBzZWNvbmRzKSBiZXR3ZWVuIGNvbnNlY3V0aXZlIGJ1cnN0cworCQlvZiBjYWxscyB0byBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKS4KKwogaXJxcmVhZGVycwlTYXlzIHRvIGludm9rZSBSQ1UgcmVhZGVycyBmcm9tIGlycSBsZXZlbC4gIFRoaXMgaXMgY3VycmVudGx5CiAJCWRvbmUgdmlhIHRpbWVycy4gIERlZmF1bHRzIHRvICIxIiBmb3IgdmFyaWFudHMgb2YgUkNVIHRoYXQKIAkJcGVybWl0IHRoaXMuICAoT3IsIG1vcmUgYWNjdXJhdGVseSwgdmFyaWFudHMgb2YgUkNVIHRoYXQgZG8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0CmluZGV4IGQ1NDJjYTIuLjFkYzAwZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dApAQCAtMzIzLDE0ICszMjMsMTcgQEAKIAlEZWZlcgkJCVByb3RlY3QKIAogYS4Jc3luY2hyb25pemVfcmN1KCkJcmN1X3JlYWRfbG9jaygpIC8gcmN1X3JlYWRfdW5sb2NrKCkKLQljYWxsX3JjdSgpCisJY2FsbF9yY3UoKQkJcmN1X2RlcmVmZXJlbmNlKCkKIAogYi4JY2FsbF9yY3VfYmgoKQkJcmN1X3JlYWRfbG9ja19iaCgpIC8gcmN1X3JlYWRfdW5sb2NrX2JoKCkKKwkJCQlyY3VfZGVyZWZlcmVuY2VfYmgoKQogCi1jLglzeW5jaHJvbml6ZV9zY2hlZCgpCXByZWVtcHRfZGlzYWJsZSgpIC8gcHJlZW1wdF9lbmFibGUoKQorYy4Jc3luY2hyb25pemVfc2NoZWQoKQlyY3VfcmVhZF9sb2NrX3NjaGVkKCkgLyByY3VfcmVhZF91bmxvY2tfc2NoZWQoKQorCQkJCXByZWVtcHRfZGlzYWJsZSgpIC8gcHJlZW1wdF9lbmFibGUoKQogCQkJCWxvY2FsX2lycV9zYXZlKCkgLyBsb2NhbF9pcnFfcmVzdG9yZSgpCiAJCQkJaGFyZGlycSBlbnRlciAvIGhhcmRpcnEgZXhpdAogCQkJCU5NSSBlbnRlciAvIE5NSSBleGl0CisJCQkJcmN1X2RlcmVmZXJlbmNlX3NjaGVkKCkKIAogVGhlc2UgdGhyZWUgbWVjaGFuaXNtcyBhcmUgdXNlZCBhcyBmb2xsb3dzOgogCkBAIC03ODAsOSArNzgzLDggQEAKIEFQSXMsIHNpbmNlIHRoZXJlIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHdheSB0byBjYXRlZ29yaXplIHRoZW0KIGluIGRvY2Jvb2suICBIZXJlIGlzIHRoZSBsaXN0LCBieSBjYXRlZ29yeS4KIAotUkNVIHBvaW50ZXIvbGlzdCB0cmF2ZXJzYWw6CitSQ1UgbGlzdCB0cmF2ZXJzYWw6CiAKLQlyY3VfZGVyZWZlcmVuY2UKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdQogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdQogCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdQpAQCAtODA4LDcgKzgxMCw3IEBACiAKIAlyY3VfcmVhZF9sb2NrCQlzeW5jaHJvbml6ZV9uZXQJCXJjdV9iYXJyaWVyCiAJcmN1X3JlYWRfdW5sb2NrCQlzeW5jaHJvbml6ZV9yY3UKLQkJCQlzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkCisJcmN1X2RlcmVmZXJlbmNlCQlzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkCiAJCQkJY2FsbF9yY3UKIAogCkBAIC04MTYsNyArODE4LDcgQEAKIAogCXJjdV9yZWFkX2xvY2tfYmgJY2FsbF9yY3VfYmgJCXJjdV9iYXJyaWVyX2JoCiAJcmN1X3JlYWRfdW5sb2NrX2JoCXN5bmNocm9uaXplX3JjdV9iaAotCQkJCXN5bmNocm9uaXplX3JjdV9iaF9leHBlZGl0ZWQKKwlyY3VfZGVyZWZlcmVuY2VfYmgJc3luY2hyb25pemVfcmN1X2JoX2V4cGVkaXRlZAogCiAKIHNjaGVkOglDcml0aWNhbCBzZWN0aW9ucwlHcmFjZSBwZXJpb2QJCUJhcnJpZXIKQEAgLTgyNSwxMiArODI3LDE0IEBACiAJcmN1X3JlYWRfdW5sb2NrX3NjaGVkCWNhbGxfcmN1X3NjaGVkCiAJW3ByZWVtcHRfZGlzYWJsZV0Jc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkCiAJW2FuZCBmcmllbmRzXQorCXJjdV9kZXJlZmVyZW5jZV9zY2hlZAogCiAKIFNSQ1U6CUNyaXRpY2FsIHNlY3Rpb25zCUdyYWNlIHBlcmlvZAkJQmFycmllcgogCiAJc3JjdV9yZWFkX2xvY2sJCXN5bmNocm9uaXplX3NyY3UJTi9BCiAJc3JjdV9yZWFkX3VubG9jawlzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZAorCXNyY3VfZGVyZWZlcmVuY2UKIAogU1JDVToJSW5pdGlhbGl6YXRpb24vY2xlYW51cAogCWluaXRfc3JjdV9zdHJ1Y3QKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL21lbW9yeS50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9tZW1vcnkudHh0CmluZGV4IDlkNThjN2M1Li5lYjBmYWUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9tZW1vcnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYXJtL21lbW9yeS50eHQKQEAgLTU5LDcgKzU5LDExIEBACiAJCQkJVGhpcyBtYXBzIHRoZSBwbGF0Zm9ybXMgUkFNLCBhbmQgdHlwaWNhbGx5CiAJCQkJbWFwcyBhbGwgcGxhdGZvcm0gUkFNIGluIGEgMToxIHJlbGF0aW9uc2hpcC4KIAotVEFTS19TSVpFCVBBR0VfT0ZGU0VULTEJS2VybmVsIG1vZHVsZSBzcGFjZQorUEtNQVBfQkFTRQlQQUdFX09GRlNFVC0xCVBlcm1hbmVudCBrZXJuZWwgbWFwcGluZ3MKKwkJCQlPbmUgd2F5IG9mIG1hcHBpbmcgSElHSE1FTSBwYWdlcyBpbnRvIGtlcm5lbAorCQkJCXNwYWNlLgorCitNT0RVTEVTX1ZBRERSCU1PRFVMRVNfRU5ELTEJS2VybmVsIG1vZHVsZSBzcGFjZQogCQkJCUtlcm5lbCBtb2R1bGVzIGluc2VydGVkIHZpYSBpbnNtb2QgYXJlCiAJCQkJcGxhY2VkIGhlcmUgdXNpbmcgZHluYW1pYyBtYXBwaW5ncy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9xdWV1ZS1zeXNmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL3F1ZXVlLXN5c2ZzLnR4dAppbmRleCBlMTY0NDAzLi5mNjUyNzQwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL3F1ZXVlLXN5c2ZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL3F1ZXVlLXN5c2ZzLnR4dApAQCAtMjUsMTEgKzI1LDExIEBACiAKIG5vbWVyZ2VzIChSVykKIC0tLS0tLS0tLS0tLS0KLVRoaXMgZW5hYmxlcyB0aGUgdXNlciB0byBkaXNhYmxlIHRoZSBsb29rdXAgbG9naWMgaW52b2x2ZWQgd2l0aCBJTyBtZXJnaW5nCi1yZXF1ZXN0cyBpbiB0aGUgYmxvY2sgbGF5ZXIuIE1lcmdpbmcgbWF5IHN0aWxsIG9jY3VyIHRocm91Z2ggYSBkaXJlY3QKLTEtaGl0IGNhY2hlLCBzaW5jZSB0aGF0IGNvbWVzIGZvciAoYWxtb3N0KSBmcmVlLiBUaGUgSU8gc2NoZWR1bGVyIHdpbGwgbm90Ci13YXN0ZSBjeWNsZXMgZG9pbmcgdHJlZS9oYXNoIGxvb2t1cHMgZm9yIG1lcmdlcyBpZiBub21lcmdlcyBpcyAxLiBEZWZhdWx0cwotdG8gMCwgZW5hYmxpbmcgYWxsIG1lcmdlcy4KK1RoaXMgZW5hYmxlcyB0aGUgdXNlciB0byBkaXNhYmxlIHRoZSBsb29rdXAgbG9naWMgaW52b2x2ZWQgd2l0aCBJTworbWVyZ2luZyByZXF1ZXN0cyBpbiB0aGUgYmxvY2sgbGF5ZXIuIEJ5IGRlZmF1bHQgKDApIGFsbCBtZXJnZXMgYXJlCitlbmFibGVkLiBXaGVuIHNldCB0byAxIG9ubHkgc2ltcGxlIG9uZS1oaXQgbWVyZ2VzIHdpbGwgYmUgdHJpZWQuIFdoZW4KK3NldCB0byAyIG5vIG1lcmdlIGFsZ29yaXRobXMgd2lsbCBiZSB0cmllZCAoaW5jbHVkaW5nIG9uZS1oaXQgb3IgbW9yZQorY29tcGxleCB0cmVlL2hhc2ggbG9va3VwcykuCiAKIG5yX3JlcXVlc3RzIChSVykKIC0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2FjaGV0bGIudHh0IGIvRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQKaW5kZXggZGE0MmFiNC4uMmI1ZjgyMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQKQEAgLTg4LDEyICs4OCwxMiBAQAogCVRoaXMgaXMgdXNlZCBwcmltYXJpbHkgZHVyaW5nIGZhdWx0IHByb2Nlc3NpbmcuCiAKIDUpIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKKwkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogCiAJQXQgdGhlIGVuZCBvZiBldmVyeSBwYWdlIGZhdWx0LCB0aGlzIHJvdXRpbmUgaXMgaW52b2tlZCB0bwogCXRlbGwgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb2RlIHRoYXQgYSB0cmFuc2xhdGlvbgotCWRlc2NyaWJlZCBieSAicHRlIiBub3cgZXhpc3RzIGF0IHZpcnR1YWwgYWRkcmVzcyAiYWRkcmVzcyIKLQlmb3IgYWRkcmVzcyBzcGFjZSAidm1hLT52bV9tbSIsIGluIHRoZSBzb2Z0d2FyZSBwYWdlIHRhYmxlcy4KKwlub3cgZXhpc3RzIGF0IHZpcnR1YWwgYWRkcmVzcyAiYWRkcmVzcyIgZm9yIGFkZHJlc3Mgc3BhY2UKKwkidm1hLT52bV9tbSIsIGluIHRoZSBzb2Z0d2FyZSBwYWdlIHRhYmxlcy4KIAogCUEgcG9ydCBtYXkgdXNlIHRoaXMgaW5mb3JtYXRpb24gaW4gYW55IHdheSBpdCBzbyBjaG9vc2VzLgogCUZvciBleGFtcGxlLCBpdCBjb3VsZCB1c2UgdGhpcyBldmVudCB0byBwcmUtbG9hZCBUTEIKQEAgLTM3NywzICszNzcsMjcgQEAKIAlBbGwgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgZmx1c2hfaWNhY2hlX3BhZ2UgY2FuIGJlIGltcGxlbWVudGVkIGluCiAJZmx1c2hfZGNhY2hlX3BhZ2UgYW5kIHVwZGF0ZV9tbXVfY2FjaGUuIEluIDIuNyB0aGUgaG9wZSBpcyB0bwogCXJlbW92ZSB0aGlzIGludGVyZmFjZSBjb21wbGV0ZWx5LgorCitUaGUgZmluYWwgY2F0ZWdvcnkgb2YgQVBJcyBpcyBmb3IgSS9PIHRvIGRlbGliZXJhdGVseSBhbGlhc2VkIGFkZHJlc3MKK3JhbmdlcyBpbnNpZGUgdGhlIGtlcm5lbC4gIFN1Y2ggYWxpYXNlcyBhcmUgc2V0IHVwIGJ5IHVzZSBvZiB0aGUKK3ZtYXAvdm1hbGxvYyBBUEkuICBTaW5jZSBrZXJuZWwgSS9PIGdvZXMgdmlhIHBoeXNpY2FsIHBhZ2VzLCB0aGUgSS9PCitzdWJzeXN0ZW0gYXNzdW1lcyB0aGF0IHRoZSB1c2VyIG1hcHBpbmcgYW5kIGtlcm5lbCBvZmZzZXQgbWFwcGluZyBhcmUKK3RoZSBvbmx5IGFsaWFzZXMuICBUaGlzIGlzbid0IHRydWUgZm9yIHZtYXAgYWxpYXNlcywgc28gYW55dGhpbmcgaW4KK3RoZSBrZXJuZWwgdHJ5aW5nIHRvIGRvIEkvTyB0byB2bWFwIGFyZWFzIG11c3QgbWFudWFsbHkgbWFuYWdlCitjb2hlcmVuY3kuICBJdCBtdXN0IGRvIHRoaXMgYnkgZmx1c2hpbmcgdGhlIHZtYXAgcmFuZ2UgYmVmb3JlIGRvaW5nCitJL08gYW5kIGludmFsaWRhdGluZyBpdCBhZnRlciB0aGUgSS9PIHJldHVybnMuCisKKyAgdm9pZCBmbHVzaF9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICp2YWRkciwgaW50IHNpemUpCisgICAgICAgZmx1c2hlcyB0aGUga2VybmVsIGNhY2hlIGZvciBhIGdpdmVuIHZpcnR1YWwgYWRkcmVzcyByYW5nZSBpbgorICAgICAgIHRoZSB2bWFwIGFyZWEuICBUaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGFueSBkYXRhIHRoZSBrZXJuZWwKKyAgICAgICBtb2RpZmllZCBpbiB0aGUgdm1hcCByYW5nZSBpcyBtYWRlIHZpc2libGUgdG8gdGhlIHBoeXNpY2FsCisgICAgICAgcGFnZS4gIFRoZSBkZXNpZ24gaXMgdG8gbWFrZSB0aGlzIGFyZWEgc2FmZSB0byBwZXJmb3JtIEkvTyBvbi4KKyAgICAgICBOb3RlIHRoYXQgdGhpcyBBUEkgZG9lcyAqbm90KiBhbHNvIGZsdXNoIHRoZSBvZmZzZXQgbWFwIGFsaWFzCisgICAgICAgb2YgdGhlIGFyZWEuCisKKyAgdm9pZCBpbnZhbGlkYXRlX2tlcm5lbF92bWFwX3JhbmdlKHZvaWQgKnZhZGRyLCBpbnQgc2l6ZSkgaW52YWxpZGF0ZXMKKyAgICAgICB0aGUgY2FjaGUgZm9yIGEgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzIHJhbmdlIGluIHRoZSB2bWFwIGFyZWEKKyAgICAgICB3aGljaCBwcmV2ZW50cyB0aGUgcHJvY2Vzc29yIGZyb20gbWFraW5nIHRoZSBjYWNoZSBzdGFsZSBieQorICAgICAgIHNwZWN1bGF0aXZlbHkgcmVhZGluZyBkYXRhIHdoaWxlIHRoZSBJL08gd2FzIG9jY3VycmluZyB0byB0aGUKKyAgICAgICBwaHlzaWNhbCBwYWdlcy4gIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgZm9yIGRhdGEgcmVhZHMgaW50byB0aGUKKyAgICAgICB2bWFwIGFyZWEuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2dvdmVybm9ycy50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2dvdmVybm9ycy50eHQKaW5kZXggYWVkMDgyZi4uNzM3OTg4ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvZ292ZXJub3JzLnR4dApAQCAtMTQ1LDggKzE0NSw4IEBACiB1cF90aHJlc2hvbGQ6IGRlZmluZXMgd2hhdCB0aGUgYXZlcmFnZSBDUFUgdXNhZ2UgYmV0d2VlbiB0aGUgc2FtcGxpbmdzCiBvZiAnc2FtcGxpbmdfcmF0ZScgbmVlZHMgdG8gYmUgZm9yIHRoZSBrZXJuZWwgdG8gbWFrZSBhIGRlY2lzaW9uIG9uCiB3aGV0aGVyIGl0IHNob3VsZCBpbmNyZWFzZSB0aGUgZnJlcXVlbmN5LiAgRm9yIGV4YW1wbGUgd2hlbiBpdCBpcyBzZXQKLXRvIGl0cyBkZWZhdWx0IHZhbHVlIG9mICc4MCcgaXQgbWVhbnMgdGhhdCBiZXR3ZWVuIHRoZSBjaGVja2luZwotaW50ZXJ2YWxzIHRoZSBDUFUgbmVlZHMgdG8gYmUgb24gYXZlcmFnZSBtb3JlIHRoYW4gODAlIGluIHVzZSB0byB0aGVuCit0byBpdHMgZGVmYXVsdCB2YWx1ZSBvZiAnOTUnIGl0IG1lYW5zIHRoYXQgYmV0d2VlbiB0aGUgY2hlY2tpbmcKK2ludGVydmFscyB0aGUgQ1BVIG5lZWRzIHRvIGJlIG9uIGF2ZXJhZ2UgbW9yZSB0aGFuIDk1JSBpbiB1c2UgdG8gdGhlbgogZGVjaWRlIHRoYXQgdGhlIENQVSBmcmVxdWVuY3kgbmVlZHMgdG8gYmUgaW5jcmVhc2VkLiAgCiAKIGlnbm9yZV9uaWNlX2xvYWQ6IHRoaXMgcGFyYW1ldGVyIHRha2VzIGEgdmFsdWUgb2YgJzAnIG9yICcxJy4gV2hlbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZiBiL0RvY3VtZW50YXRpb24vZG9udGRpZmYKaW5kZXggM2FkNmFjZS4uZDliY2ZmZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgorKysgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCkBAIC02OSw3ICs2OSw2IEBACiBiYm9vdHNlY3QKIGJpbjJjCiBiaW5rZXJuZWwuc3BlYwotYmlub2Zmc2V0CiBib290c2VjdAogYm91bmRzLmgKIGJzZXR1cApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKaW5kZXggMTRiN2I1YS4uMjM5Y2JkYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCkBAIC0yNiw3ICsyNiw3IEBACiAJCSJkZWMzMDAwcyIsICJ2cDcwNDEiLCAiZGlidXNiIiwgIm54dDIwMDIiLCAibnh0MjAwNCIsCiAJCSJvcjUxMjExIiwgIm9yNTExMzJfcWFtIiwgIm9yNTExMzJfdnNiIiwgImJsdWViaXJkIiwKIAkJIm9wZXJhMSIsICJjeDIzMXh4IiwgImN4MTgiLCAiY3gyMzg4NSIsICJwdnJ1c2IyIiwgIm1wYzcxOCIsCi0JCSJhZjkwMTUiKTsKKwkJImFmOTAxNSIsICJuZ2VuZSIpOwogCiAjIENoZWNrIGFyZ3MKIHN5bnRheCgpIGlmIChzY2FsYXIoQEFSR1YpICE9IDEpOwpAQCAtMzksNyArMzksNyBAQAogCWRpZSAkQCBpZiAkQDsKIAlwcmludCBTVERFUlIgPDxFT0Y7CiBGaXJtd2FyZShzKSAkb3V0ZmlsZSBleHRyYWN0ZWQgc3VjY2Vzc2Z1bGx5LgotTm93IGNvcHkgaXQodGhleSkgdG8gZWl0aGVyIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUgb3IgL2xpYi9maXJtd2FyZQorTm93IGNvcHkgaXQodGhlbSkgdG8gZWl0aGVyIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUgb3IgL2xpYi9maXJtd2FyZQogKGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uIG9mIGZpcm13YXJlIGhvdHBsdWcpLgogRU9GCiAJZXhpdCgwKTsKQEAgLTU0OSw2ICs1NDksMjQgQEAKIAljbG9zZSBJTkZJTEU7CiB9CiAKK3N1YiBuZ2VuZSB7CisgICAgbXkgJHVybCA9ICJodHRwOi8vd3d3LmRpZ2l0YWxkZXZpY2VzLmRlL2Rvd25sb2FkLyI7CisgICAgbXkgJGZpbGUxID0gIm5nZW5lXzE1LmZ3IjsKKyAgICBteSAkaGFzaDEgPSAiZDc5OGQ1YTc1NzEyMTE3NGYwZGJjNWYyODMzYzBjODUiOworICAgIG15ICRmaWxlMiA9ICJuZ2VuZV8xNy5mdyI7CisgICAgbXkgJGhhc2gyID0gIjI2YjY4NzEzNmUxMjdiOGFjMjRiODFlMGVlYWZjMjBiIjsKKworICAgIGNoZWNrc3RhbmRhcmQoKTsKKworICAgIHdnZXRmaWxlKCRmaWxlMSwgJHVybCAuICRmaWxlMSk7CisgICAgdmVyaWZ5KCRmaWxlMSwgJGhhc2gxKTsKKworICAgIHdnZXRmaWxlKCRmaWxlMiwgJHVybCAuICRmaWxlMik7CisgICAgdmVyaWZ5KCRmaWxlMiwgJGhhc2gyKTsKKworICAgICIkZmlsZTEsICRmaWxlMiI7Cit9CisKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFV0aWxpdGllcwogCkBAIC02NjcsNiArNjg1LDcgQEAKIHN1YiBzeW50YXgoKSB7CiAgICAgcHJpbnQgU1RERVJSICJzeW50YXg6IGdldF9kdmJfZmlybXdhcmUgPGNvbXBvbmVudD5cbiI7CiAgICAgcHJpbnQgU1RERVJSICJTdXBwb3J0ZWQgY29tcG9uZW50czpcbiI7CisgICAgQGNvbXBvbmVudHMgPSBzb3J0IEBjb21wb25lbnRzOwogICAgIGZvcigkaT0wOyAkaSA8IHNjYWxhcihAY29tcG9uZW50cyk7ICRpKyspIHsKIAlwcmludCBTVERFUlIgIlx0IiAuICRjb21wb25lbnRzWyRpXSAuICJcbiI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYXVsdC1pbmplY3Rpb24vZmF1bHQtaW5qZWN0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL2ZhdWx0LWluamVjdGlvbi50eHQKaW5kZXggMDc5MzA1Ni4uN2JlMTVlNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mYXVsdC1pbmplY3Rpb24vZmF1bHQtaW5qZWN0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi9mYXVsdC1pbmplY3Rpb24udHh0CkBAIC0xNDMsOCArMTQzLDggQEAKICAgZmFpbHNsYWIsIGZhaWxfcGFnZV9hbGxvYywgYW5kIGZhaWxfbWFrZV9yZXF1ZXN0IHVzZSB0aGlzIHdheS4KICAgSGVscGVyIGZ1bmN0aW9uczoKIAotCWluaXRfZmF1bHRfYXR0cl9lbnRyaWVzKGVudHJpZXMsIGF0dHIsIG5hbWUpOwotCXZvaWQgY2xlYW51cF9mYXVsdF9hdHRyX2VudHJpZXMoZW50cmllcyk7CisJaW5pdF9mYXVsdF9hdHRyX2RlbnRyaWVzKGVudHJpZXMsIGF0dHIsIG5hbWUpOworCXZvaWQgY2xlYW51cF9mYXVsdF9hdHRyX2RlbnRyaWVzKGVudHJpZXMpOwogCiAtIG1vZHVsZSBwYXJhbWV0ZXJzCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCAwYTQ2ODMzLi43MzJiMWZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC02LDIxICs2LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CVVTRVJfU0NIRUQKLVdoZW46CTIuNi4zNAotCi1XaHk6CVVTRVJfU0NIRUQgd2FzIGltcGxlbWVudGVkIGFzIGEgcHJvb2Ygb2YgY29uY2VwdCBmb3IgZ3JvdXAgc2NoZWR1bGluZy4KLQlUaGUgZWZmZWN0IG9mIFVTRVJfU0NIRUQgY2FuIGFscmVhZHkgYmUgYWNoaWV2ZWQgZnJvbSB1c2Vyc3BhY2Ugd2l0aAotCXRoZSBoZWxwIG9mIGxpYmNncm91cC4gVGhlIHJlbW92YWwgb2YgVVNFUl9TQ0hFRCB3aWxsIGFsc28gc2ltcGxpZnkKLQl0aGUgc2NoZWR1bGVyIGNvZGUgd2l0aCB0aGUgcmVtb3ZhbCBvZiBvbmUgbWFqb3IgaWZkZWYuIFRoZXJlIGFyZSBhbHNvCi0JaXNzdWVzIFVTRVJfU0NIRUQgaGFzIHdpdGggVVNFUl9OUy4gQSBkZWNpc2lvbiB3YXMgdGFrZW4gbm90IHRvIGZpeAotCXRob3NlIGFuZCBpbnN0ZWFkIHJlbW92ZSBVU0VSX1NDSEVELiBBbHNvIG5ldyBncm91cCBzY2hlZHVsaW5nCi0JZmVhdHVyZXMgd2lsbCBub3QgYmUgaW1wbGVtZW50ZWQgZm9yIFVTRVJfU0NIRUQuCi0KLVdobzoJRGhhdmFsIEdpYW5pIDxkaGF2YWxAbGludXgudm5ldC5pYm0uY29tPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJUFJJU001NAogV2hlbjoJMi42LjM0CiAKQEAgLTY0LDYgKzQ5LDE3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGF0OglEZXByZWNhdGVkIHNuYXBzaG90IGlvY3RscworV2hlbjoJMi42LjM2CisKK1doeToJVGhlIGlvY3RscyBpbiBrZXJuZWwvcG93ZXIvdXNlci5jIHdlcmUgbWFya2VkIGFzIGRlcHJlY2F0ZWQgbG9uZyB0aW1lCisJYWdvLiBOb3cgdGhleSBub3RpZnkgdXNlcnMgYWJvdXQgdGhhdCBzbyB0aGF0IHRoZXkgbmVlZCB0byByZXBsYWNlCisJdGhlaXIgdXNlcnNwYWNlLiBBZnRlciBzb21lIG1vcmUgdGltZSwgcmVtb3ZlIHRoZW0gY29tcGxldGVseS4KKworV2hvOglKaXJpIFNsYWJ5IDxqaXJpc2xhYnlAZ21haWwuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hhdDoJVGhlIGllZWU4MDIxMV9yZWdkb20gbW9kdWxlIHBhcmFtZXRlcgogV2hlbjoJTWFyY2ggMjAxMCAvIGRlc2t0b3AgY2F0Y2h1cAogCkBAIC01NDIsMyArNTM4LDI2IEBACiAJc2Vuc29ycykgd2ljaCBhcmUgYWxzbyBzdXBwb3J0ZWQgYnkgdGhlIGdzcGNhX3pjM3h4IGRyaXZlcgogCSh3aGljaCBzdXBwb3J0cyA1MyBVU0ItSUQncyBpbiB0b3RhbCkKIFdobzoJSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0Ogljb3JnaWtiZCwgc3BpdHprYmQsIHRvc2FrYmQgZHJpdmVyCitXaGVuOgkyLjYuMzUKK0ZpbGVzOglkcml2ZXJzL2lucHV0L2tleWJvYXJkL3tjb3JnaSxzcGl0eix0b3NhfWtiZC5jCitXaHk6CVdlIG5vdyBoYXZlIGEgZ2VuZXJpYyBHUElPIGJhc2VkIG1hdHJpeCBrZXlib2FyZCBkcml2ZXIgdGhhdAorCWFyZSBmdWxseSBjYXBhYmxlIG9mIGhhbmRsaW5nIGFsbCB0aGUga2V5cyBvbiB0aGVzZSBkZXZpY2VzLgorCVRoZSBvcmlnaW5hbCBkcml2ZXJzIG1hbmlwdWxhdGUgdGhlIEdQSU8gcmVnaXN0ZXJzIGRpcmVjdGx5CisJYW5kIHNvIGFyZSBkaWZmaWN1bHQgdG8gbWFpbnRhaW4uCitXaG86CUVyaWMgTWlhbyA8ZXJpYy55Lm1pYW9AZ21haWwuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CWNvcmdpX3NzcCBhbmQgY29yZ2lfdHMgZHJpdmVyCitXaGVuOgkyLjYuMzUKK0ZpbGVzOglhcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYywgZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCitXaHk6CVRoZSBjb3JnaSB0b3VjaHNjcmVlbiBpcyBub3cgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgdGhlIGdlbmVyaWMKKwlhZHM3ODQ2LmMgZHJpdmVyLiBUaGUgbm9pc2UgcmVkdWN0aW9uIHRlY2huaXF1ZSB1c2VkIGluIGNvcmdpX3RzLmMsCisJdGhhdCdzIHRvIHdhaXQgdGlsbCB2c3luYyBiZWZvcmUgQURDIHNhbXBsaW5nLCBpcyBhbHNvIGludGVncmF0ZWQgaW50bworCWFkczc4NDYgZHJpdmVyIG5vdy4gUHJvdmlkZWQgdGhhdCB0aGUgb3JpZ2luYWwgZHJpdmVyIGlzIG5vdCBnZW5lcmljCisJYW5kIGlzIGRpZmZpY3VsdCB0byBtYWludGFpbiwgaXQgd2lsbCBiZSByZW1vdmVkIGxhdGVyLgorV2hvOglFcmljIE1pYW8gPGVyaWMueS5taWFvQGdtYWlsLmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGVudHJ5LWxvY2tpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZW50cnktbG9ja2luZy50eHQKaW5kZXggNGMwYzU3NS4uNzkzMzRlZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZW50cnktbG9ja2luZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZW50cnktbG9ja2luZy50eHQKQEAgLTYyLDcgKzYyLDggQEAKIDIuIEluc2VydGlvbiBvZiBhIGRlbnRyeSBpbnRvIHRoZSBoYXNoIHRhYmxlIGlzIGRvbmUgdXNpbmcKICAgIGhsaXN0X2FkZF9oZWFkX3JjdSgpIHdoaWNoIHRha2UgY2FyZSBvZiBvcmRlcmluZyB0aGUgd3JpdGVzIC0gdGhlCiAgICB3cml0ZXMgdG8gdGhlIGRlbnRyeSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHRoZSBkZW50cnkgaXMKLSAgIGluc2VydGVkLiBUaGlzIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggaGxpc3RfZm9yX2VhY2hfcmN1KCkgd2hpbGUKKyAgIGluc2VydGVkLiBUaGlzIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggaGxpc3RfZm9yX2VhY2hfcmN1KCksCisgICB3aGljaCBoYXMgc2luY2UgYmVlbiByZXBsYWNlZCBieSBobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoKSwgd2hpbGUKICAgIHdhbGtpbmcgdGhlIGhhc2ggY2hhaW4uIFRoZSBvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQgYWxsCiAgICBpbml0aWFsaXphdGlvbiB0byB0aGUgZGVudHJ5IG11c3QgYmUgZG9uZSBiZWZvcmUKICAgIGhsaXN0X2FkZF9oZWFkX3JjdSgpIHNpbmNlIHdlIGRvbid0IGhhdmUgZGNhY2hlX2xvY2sgcHJvdGVjdGlvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9zZW50ZWxpYy50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L3NlbnRlbGljLnR4dAppbmRleCBmNzE2MGEyLi5iMzVhZmZkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lucHV0L3NlbnRlbGljLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L3NlbnRlbGljLnR4dApAQCAtMSw1ICsxLDUgQEAKLUNvcHlyaWdodCAoQykgMjAwMi0yMDA4IFNlbnRlbGljIENvcnBvcmF0aW9uLgotTGFzdCB1cGRhdGU6IE9jdC0zMS0yMDA4CitDb3B5cmlnaHQgKEMpIDIwMDItMjAxMCBTZW50ZWxpYyBDb3Jwb3JhdGlvbi4KK0xhc3QgdXBkYXRlOiBKYW4tMTMtMjAxMAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogRmluZ2VyIFNlbnNpbmcgUGFkIEludGVsbGltb3VzZSBNb2RlKHNjcm9sbGluZyB3aGVlbCwgNHRoIGFuZCA1dGggYnV0dG9ucykKQEAgLTQ0LDcgKzQ0LDcgQEAKIFBhY2tldCAxCiAgICBCaXQgNyA2IDUgNCAzIDIgMSAwICAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMAogQllURSAgfC0tLS0tLS0tLS0tLS0tLXxCWVRFIHwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18Ci0gIDEgICB8WXxYfHl8eHwxfE18UnxMfCAgMiAgfFh8WHxYfFh8WHxYfFh8WHwgIDMgfFl8WXxZfFl8WXxZfFl8WXwgIDQgfCB8IHxCfEZ8bHxyfHV8ZHwKKyAgMSAgIHxZfFh8eXx4fDF8TXxSfEx8ICAyICB8WHxYfFh8WHxYfFh8WHxYfCAgMyB8WXxZfFl8WXxZfFl8WXxZfCAgNCB8IHwgfEJ8RnxyfGx8dXxkfAogICAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18CiAKIEJ5dGUgMTogQml0NyA9PiBZIG92ZXJmbG93CkBAIC01OSwxNSArNTksMTUgQEAKIEJ5dGUgMzogWSBNb3ZlbWVudCg5LWJpdCAyJ3MgY29tcGxlbWVudCBpbnRlZ2VycykKIEJ5dGUgNDogQml0MCA9PiB0aGUgVmVydGljYWwgc2Nyb2xsaW5nIG1vdmVtZW50IGRvd253YXJkLgogCUJpdDEgPT4gdGhlIFZlcnRpY2FsIHNjcm9sbGluZyBtb3ZlbWVudCB1cHdhcmQuCi0JQml0MiA9PiB0aGUgVmVydGljYWwgc2Nyb2xsaW5nIG1vdmVtZW50IHJpZ2h0d2FyZC4KLQlCaXQzID0+IHRoZSBWZXJ0aWNhbCBzY3JvbGxpbmcgbW92ZW1lbnQgbGVmdHdhcmQuCisJQml0MiA9PiB0aGUgSG9yaXpvbnRhbCBzY3JvbGxpbmcgbW92ZW1lbnQgbGVmdHdhcmQuCisJQml0MyA9PiB0aGUgSG9yaXpvbnRhbCBzY3JvbGxpbmcgbW92ZW1lbnQgcmlnaHR3YXJkLgogICAgICAgICBCaXQ0ID0+IDEgPSA0dGggbW91c2UgYnV0dG9uIGlzIHByZXNzZWQsIEZvcndhcmQgb25lIHBhZ2UuCiAgICAgICAgICAgICAgICAgMCA9IDR0aCBtb3VzZSBidXR0b24gaXMgbm90IHByZXNzZWQuCiAgICAgICAgIEJpdDUgPT4gMSA9IDV0aCBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCwgQmFja3dhcmQgb25lIHBhZ2UuCiAgICAgICAgICAgICAgICAgMCA9IDV0aCBtb3VzZSBidXR0b24gaXMgbm90IHByZXNzZWQuCiAKIEMpIE1TSUQgNzoKLSMgRlNQIHVzZXMgMiBwYWNrZXRzKDggQnl0ZXMpIGRhdGEgdG8gcmVwcmVzZW50IEFic29sdXRlIFBvc2l0aW9uCisjIEZTUCB1c2VzIDIgcGFja2V0cyAoOCBCeXRlcykgdG8gcmVwcmVzZW50IEFic29sdXRlIFBvc2l0aW9uLgogICBzbyB3ZSBoYXZlIFBBQ0tFVCBOVU1CRVIgdG8gaWRlbnRpZnkgcGFja2V0cy4KICAgSWYgUEFDS0VUIE5VTUJFUiBpcyAwLCB0aGUgcGFja2V0IGlzIFBhY2tldCAxLgogICBJZiBQQUNLRVQgTlVNQkVSIGlzIDEsIHRoZSBwYWNrZXQgaXMgUGFja2V0IDIuCkBAIC0xMjksNyArMTI5LDcgQEAKIEJ5dGUgNDogQml0N35CaXQwID0+IERvbid0IENhcmUKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qIEFic29sdXRlIHBvc2l0aW9uIGZvciBTVEwzODg4LUEwLgorKiBBYnNvbHV0ZSBwb3NpdGlvbiBmb3IgU1RMMzg4OC1BeC4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogUGFja2V0IDEgKEFCU09MVVRFIFBPU0lUSU9OKQogICAgQml0IDcgNiA1IDQgMyAyIDEgMCAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAKQEAgLTE3OSwxNCArMTc5LDE0IEBACiAgICAgICAgIEJpdDV+Qml0NCA9PiB5Ml9nCiAgICAgICAgIEJpdDd+Qml0NiA9PiB4Ml9nCiAKLU5vdGlmeSBQYWNrZXQgZm9yIFNUTDM4ODgtQTAKK05vdGlmeSBQYWNrZXQgZm9yIFNUTDM4ODgtQXgKICAgIEJpdCA3IDYgNSA0IDMgMiAxIDAgICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwCiBCWVRFICB8LS0tLS0tLS0tLS0tLS0tfEJZVEUgfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXwKICAgMSAgIHwxfDB8MXxQfDF8TXxSfEx8ICAyICB8Q3xDfEN8Q3xDfEN8Q3xDfCAgMyB8MHwwfEZ8RnwwfDB8MHxpfCAgNCB8cnxsfGR8dXwwfDB8MHwwfAogICAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18CiAKIEJ5dGUgMTogQml0N35CaXQ2ID0+IDAwLCBOb3JtYWwgZGF0YSBwYWNrZXQKLSAgICAgICAgICAgICAgICAgID0+IDAxLCBBYnNvbHV0ZSBjb29yZGluYXRpb24gcGFja2V0CisgICAgICAgICAgICAgICAgICA9PiAwMSwgQWJzb2x1dGUgY29vcmRpbmF0ZXMgcGFja2V0CiAgICAgICAgICAgICAgICAgICA9PiAxMCwgTm90aWZ5IHBhY2tldAogICAgICAgICBCaXQ1ID0+IDEKICAgICAgICAgQml0NCA9PiB3aGVuIGluIGFic29sdXRlIGNvb3JkaW5hdGVzIG1vZGUgKHZhbGlkIHdoZW4gRU5fUEtUX0dPIGlzIDEpOgpAQCAtMjA1LDE1ICsyMDUsMTA2IEBACiAgICAgICAgIEJpdDYgPT4gc2Nyb2xsIGxlZnQgYnV0dG9uCiAgICAgICAgIEJpdDUgPT4gc2Nyb2xsIGRvd24gYnV0dG9uCiAgICAgICAgIEJpdDQgPT4gc2Nyb2xsIHVwIGJ1dHRvbgotICAgICAgICAgICAgKiBOb3RlIHRoYXQgaWYgZ2VzdHVyZSBhbmQgYWRkaXRpb25hbCBidXR0b24gKEJpdDR+Qml0NykKLQkgICAgICBoYXBwZW4gYXQgdGhlIHNhbWUgdGltZSwgdGhlIGJ1dHRvbiBpbmZvcm1hdGlvbiB3aWxsIG5vdAotCSAgICAgIGJlIHNlbnQuCisgICAgICAgICAgICAqIE5vdGUgdGhhdCBpZiBnZXN0dXJlIGFuZCBhZGRpdGlvbmFsIGJ1dHRvbmkgKEJpdDR+Qml0NykKKyAgICAgICAgICAgICAgaGFwcGVuIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBidXR0b24gaW5mb3JtYXRpb24gd2lsbCBub3QKKyAgICAgICAgICAgICAgYmUgc2VudC4KICAgICAgICAgQml0M35CaXQwID0+IFJlc2VydmVkCiAKIFNhbXBsZSBzZXF1ZW5jZSBvZiBNdWx0aS1maW5nZXIsIE11bHRpLWNvb3JkaW5hdGUgbW9kZToKIAogCW5vdGlmeSBwYWNrZXQgKHZhbGlkIGJpdCA9PSAxKSwgYWJzIHBrdCAxLCBhYnMgcGt0IDIsIGFicyBwa3QgMSwKLQlhYnMgcGt0IDIsIC4uLiwgbm90aWZ5IHBhY2tldCh2YWxpZCBiaXQgPT0gMCkKKwlhYnMgcGt0IDIsIC4uLiwgbm90aWZ5IHBhY2tldCAodmFsaWQgYml0ID09IDApCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiBBYnNvbHV0ZSBwb3NpdGlvbiBmb3IgU1RMMzg4OC1CMC4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUGFja2V0IDEoQUJTT0xVVEUgUE9TSVRJT04pCisgICBCaXQgNyA2IDUgNCAzIDIgMSAwICAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMAorQllURSAgfC0tLS0tLS0tLS0tLS0tLXxCWVRFIHwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18CisgIDEgICB8MHwxfFZ8RnwxfDB8UnxMfCAgMiAgfFh8WHxYfFh8WHxYfFh8WHwgIDMgfFl8WXxZfFl8WXxZfFl8WXwgIDQgfHJ8bHx1fGR8WHxYfFl8WXwKKyAgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfAorCitCeXRlIDE6IEJpdDd+Qml0NiA9PiAwMCwgTm9ybWFsIGRhdGEgcGFja2V0CisgICAgICAgICAgICAgICAgICA9PiAwMSwgQWJzb2x1dGUgY29vcmRpbmF0ZXMgcGFja2V0CisgICAgICAgICAgICAgICAgICA9PiAxMCwgTm90aWZ5IHBhY2tldAorICAgICAgICBCaXQ1ID0+IFZhbGlkIGJpdCwgMCBtZWFucyB0aGF0IHRoZSBjb29yZGluYXRlIGlzIGludmFsaWQgb3IgZmluZ2VyIHVwLgorICAgICAgICAgICAgICAgIFdoZW4gYm90aCBmaW5nZXJzIGFyZSB1cCwgdGhlIGxhc3QgdHdvIHJlcG9ydHMgaGF2ZSB6ZXJvIHZhbGlkCisgICAgICAgICAgICAgICAgYml0LgorICAgICAgICBCaXQ0ID0+IGZpbmdlciB1cC9kb3duIGluZm9ybWF0aW9uLiAxOiBmaW5nZXIgZG93biwgMDogZmluZ2VyIHVwLgorICAgICAgICBCaXQzID0+IDEKKyAgICAgICAgQml0MiA9PiBmaW5nZXIgaW5kZXgsIDAgaXMgdGhlIGZpcnN0IGZpbmdlciwgMSBpcyB0aGUgc2Vjb25kIGZpbmdlci4KKyAgICAgICAgQml0MSA9PiBSaWdodCBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KKyAgICAgICAgQml0MCA9PiBMZWZ0IEJ1dHRvbiwgMSBpcyBwcmVzc2VkLCAwIGlzIG5vdCBwcmVzc2VkLgorQnl0ZSAyOiBYIGNvb3JkaW5hdGUgKHhwb3NbOToyXSkKK0J5dGUgMzogWSBjb29yZGluYXRlICh5cG9zWzk6Ml0pCitCeXRlIDQ6IEJpdDF+Qml0MCA9PiBZIGNvb3JkaW5hdGUgKHhwb3NbMTowXSkKKyAgICAgICAgQml0M35CaXQyID0+IFggY29vcmRpbmF0ZSAoeXBvc1sxOjBdKQorICAgICAgICBCaXQ0ID0+IHNjcm9sbCBkb3duIGJ1dHRvbgorICAgICAgICBCaXQ1ID0+IHNjcm9sbCB1cCBidXR0b24KKyAgICAgICAgQml0NiA9PiBzY3JvbGwgbGVmdCBidXR0b24KKyAgICAgICAgQml0NyA9PiBzY3JvbGwgcmlnaHQgYnV0dG9uCisKK1BhY2tldCAyIChBQlNPTFVURSBQT1NJVElPTikKKyAgIEJpdCA3IDYgNSA0IDMgMiAxIDAgICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwCitCWVRFICB8LS0tLS0tLS0tLS0tLS0tfEJZVEUgfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXwKKyAgMSAgIHwwfDF8VnxGfDF8MXxSfEx8ICAyICB8WHxYfFh8WHxYfFh8WHxYfCAgMyB8WXxZfFl8WXxZfFl8WXxZfCAgNCB8cnxsfHV8ZHxYfFh8WXxZfAorICAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18CisKK0J5dGUgMTogQml0N35CaXQ2ID0+IDAwLCBOb3JtYWwgZGF0YSBwYWNrZXQKKyAgICAgICAgICAgICAgICAgID0+IDAxLCBBYnNvbHV0ZSBjb29yZGluYXRpb24gcGFja2V0CisgICAgICAgICAgICAgICAgICA9PiAxMCwgTm90aWZ5IHBhY2tldAorICAgICAgICBCaXQ1ID0+IFZhbGlkIGJpdCwgMCBtZWFucyB0aGF0IHRoZSBjb29yZGluYXRlIGlzIGludmFsaWQgb3IgZmluZ2VyIHVwLgorICAgICAgICAgICAgICAgIFdoZW4gYm90aCBmaW5nZXJzIGFyZSB1cCwgdGhlIGxhc3QgdHdvIHJlcG9ydHMgaGF2ZSB6ZXJvIHZhbGlkCisgICAgICAgICAgICAgICAgYml0LgorICAgICAgICBCaXQ0ID0+IGZpbmdlciB1cC9kb3duIGluZm9ybWF0aW9uLiAxOiBmaW5nZXIgZG93biwgMDogZmluZ2VyIHVwLgorICAgICAgICBCaXQzID0+IDEKKyAgICAgICAgQml0MiA9PiBmaW5nZXIgaW5kZXgsIDAgaXMgdGhlIGZpcnN0IGZpbmdlciwgMSBpcyB0aGUgc2Vjb25kIGZpbmdlci4KKyAgICAgICAgQml0MSA9PiBSaWdodCBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KKyAgICAgICAgQml0MCA9PiBMZWZ0IEJ1dHRvbiwgMSBpcyBwcmVzc2VkLCAwIGlzIG5vdCBwcmVzc2VkLgorQnl0ZSAyOiBYIGNvb3JkaW5hdGUgKHhwb3NbOToyXSkKK0J5dGUgMzogWSBjb29yZGluYXRlICh5cG9zWzk6Ml0pCitCeXRlIDQ6IEJpdDF+Qml0MCA9PiBZIGNvb3JkaW5hdGUgKHhwb3NbMTowXSkKKyAgICAgICAgQml0M35CaXQyID0+IFggY29vcmRpbmF0ZSAoeXBvc1sxOjBdKQorICAgICAgICBCaXQ0ID0+IHNjcm9sbCBkb3duIGJ1dHRvbgorICAgICAgICBCaXQ1ID0+IHNjcm9sbCB1cCBidXR0b24KKyAgICAgICAgQml0NiA9PiBzY3JvbGwgbGVmdCBidXR0b24KKyAgICAgICAgQml0NyA9PiBzY3JvbGwgcmlnaHQgYnV0dG9uCisKK05vdGlmeSBQYWNrZXQgZm9yIFNUTDM4ODgtQjAKKyAgIEJpdCA3IDYgNSA0IDMgMiAxIDAgICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwCitCWVRFICB8LS0tLS0tLS0tLS0tLS0tfEJZVEUgfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXwKKyAgMSAgIHwxfDB8MXxQfDF8TXxSfEx8ICAyICB8Q3xDfEN8Q3xDfEN8Q3xDfCAgMyB8MHwwfEZ8RnwwfDB8MHxpfCAgNCB8cnxsfHV8ZHwwfDB8MHwwfAorICAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18CisKK0J5dGUgMTogQml0N35CaXQ2ID0+IDAwLCBOb3JtYWwgZGF0YSBwYWNrZXQKKyAgICAgICAgICAgICAgICAgID0+IDAxLCBBYnNvbHV0ZSBjb29yZGluYXRpb24gcGFja2V0CisgICAgICAgICAgICAgICAgICA9PiAxMCwgTm90aWZ5IHBhY2tldAorICAgICAgICBCaXQ1ID0+IDEKKyAgICAgICAgQml0NCA9PiB3aGVuIGluIGFic29sdXRlIGNvb3JkaW5hdGUgbW9kZSAodmFsaWQgd2hlbiBFTl9QS1RfR08gaXMgMSk6CisgICAgICAgICAgICAgICAgMDogbGVmdCBidXR0b24gaXMgZ2VuZXJhdGVkIGJ5IHRoZSBvbi1wYWQgY29tbWFuZAorICAgICAgICAgICAgICAgIDE6IGxlZnQgYnV0dG9uIGlzIGdlbmVyYXRlZCBieSB0aGUgZXh0ZXJuYWwgYnV0dG9uCisgICAgICAgIEJpdDMgPT4gMQorICAgICAgICBCaXQyID0+IE1pZGRsZSBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KKyAgICAgICAgQml0MSA9PiBSaWdodCBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KKyAgICAgICAgQml0MCA9PiBMZWZ0IEJ1dHRvbiwgMSBpcyBwcmVzc2VkLCAwIGlzIG5vdCBwcmVzc2VkLgorQnl0ZSAyOiBNZXNzYWdlIFR5cGUgPT4gMHhCNyAoTXVsdGkgRmluZ2VyLCBNdWx0aSBDb29yZGluYXRlIG1vZGUpCitCeXRlIDM6IEJpdDd+Qml0NiA9PiBEb24ndCBjYXJlCisgICAgICAgIEJpdDV+Qml0NCA9PiBOdW1iZXIgb2YgZmluZ2VycworICAgICAgICBCaXQzfkJpdDEgPT4gUmVzZXJ2ZWQKKyAgICAgICAgQml0MCA9PiAxOiBlbnRlciBnZXN0dXJlIG1vZGU7IDA6IGxlYXZpbmcgZ2VzdHVyZSBtb2RlCitCeXRlIDQ6IEJpdDcgPT4gc2Nyb2xsIHJpZ2h0IGJ1dHRvbgorICAgICAgICBCaXQ2ID0+IHNjcm9sbCBsZWZ0IGJ1dHRvbgorICAgICAgICBCaXQ1ID0+IHNjcm9sbCB1cCBidXR0b24KKyAgICAgICAgQml0NCA9PiBzY3JvbGwgZG93biBidXR0b24KKyAgICAgICAgICAgICogTm90ZSB0aGF0IGlmIGdlc3R1cmUgYW5kIGFkZGl0aW9uYWwgYnV0dG9uKEJpdDR+Qml0NykKKyAgICAgICAgICAgICAgaGFwcGVuIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBidXR0b24gaW5mb3JtYXRpb24gd2lsbCBub3QKKyAgICAgICAgICAgICAgYmUgc2VudC4KKyAgICAgICAgQml0M35CaXQwID0+IFJlc2VydmVkCisKK1NhbXBsZSBzZXF1ZW5jZSBvZiBNdWx0aS1maW5nZXIsIE11bHRpLWNvb3JkaW5hdGUgbW9kZToKKworCW5vdGlmeSBwYWNrZXQgKHZhbGlkIGJpdCA9PSAxKSwgYWJzIHBrdCAxLCBhYnMgcGt0IDIsIGFicyBwa3QgMSwKKwlhYnMgcGt0IDIsIC4uLiwgbm90aWZ5IHBhY2tldCAodmFsaWQgYml0ID09IDApCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBGU1AgRW5hYmxlL0Rpc2FibGUgcGFja2V0CkBAIC00MDksNyArNTAwLDggQEAKIAkJCQkJMDogcmVhZCBvbmx5LCAxOiByZWFkL3dyaXRlIGVuYWJsZQogCShOb3RlIHRoYXQgZm9sbG93aW5nIHJlZ2lzdGVycyBkb2VzIG5vdCByZXF1aXJlIGNsb2NrIGdhdGluZyBiZWluZwogCWVuYWJsZWQgcHJpb3IgdG8gd3JpdGU6IDA1IDA2IDA3IDA4IDA5IDBjIDBmIDEwIDExIDEyIDE2IDE3IDE4IDIzIDJlCi0JNDAgNDEgNDIgNDMuKQorCTQwIDQxIDQyIDQzLiAgSW4gYWRkaXRpb24gdG8gdGhhdCwgdGhpcyBiaXQgbXVzdCBiZSAxIHdoZW4gZ2VzdHVyZQorCW1vZGUgaXMgZW5hYmxlZCkKIAogMHgzMQkJCQlSVwlvbi1wYWQgY29tbWFuZCBkZXRlY3Rpb24KIAliaXQ3CQkwCVJXCW9uLXBhZCBjb21tYW5kIGxlZnQgYnV0dG9uIGRvd24gdGFnCkBAIC00NjMsNiArNTU1LDEwIEBACiAJYWJzb2x1dGUgY29vcmRpbmF0ZXM7IG90aGVyd2lzZSwgaG9zdCBvbmx5IHJlY2VpdmVzIHBhY2tldHMgd2l0aAogCXJlbGF0aXZlIGNvb3JkaW5hdGUuKQogCisJYml0NwkJMAlSVwlFTl9QUzJfRjI6IFBTLzIgZ2VzdHVyZSBtb2RlIDJuZAorCQkJCQlmaW5nZXIgcGFja2V0IGVuYWJsZQorCQkJCQkwOiBkaXNhYmxlLCAxOiBlbmFibGUKKwogMHg0MwkJCQlSVwlvbi1wYWQgY29udHJvbAogCWJpdDAJCTAJUlcJb24tcGFkIGNvbnRyb2wgZW5hYmxlCiAJCQkJCTA6IGRpc2FibGUsIDE6IGVuYWJsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA3MzZkNDU2Li44YzY2NmQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMTk5LDYgKzE5OSwxMCBAQAogCQkJYWNwaV9kaXNwbGF5X291dHB1dD12aWRlbwogCQkJU2VlIGFib3ZlLgogCisJYWNwaV9lYXJseV9wZGNfZXZhbAlbSFcsQUNQSV0gRXZhbHVhdGUgcHJvY2Vzc29yIF9QREMgbWV0aG9kcworCQkJCWVhcmx5LiBOZWVkZWQgb24gc29tZSBwbGF0Zm9ybXMgdG8gcHJvcGVybHkKKwkJCQlpbml0aWFsaXplIHRoZSBFQy4KKwogCWFjcGlfaXJxX2JhbGFuY2UgW0hXLEFDUEldCiAJCQlBQ1BJIHdpbGwgYmFsYW5jZSBhY3RpdmUgSVJRcwogCQkJZGVmYXVsdCBpbiBBUElDIG1vZGUKQEAgLTMxMSw2ICszMTUsMTEgQEAKIAlhaWM3OXh4PQlbSFcsU0NTSV0KIAkJCVNlZSBEb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQuCiAKKwlhbGlnbm1lbnQ9CVtLTkwsQVJNXQorCQkJQWxsb3cgdGhlIGRlZmF1bHQgdXNlcnNwYWNlIGFsaWdubWVudCBmYXVsdCBoYW5kbGVyCisJCQliZWhhdmlvdXIgdG8gYmUgc3BlY2lmaWVkLiAgQml0IDAgZW5hYmxlcyB3YXJuaW5ncywKKwkJCWJpdCAxIGVuYWJsZXMgZml4dXBzLCBhbmQgYml0IDIgc2VuZHMgYSBzZWdmYXVsdC4KKwogCWFtZF9pb21tdT0JW0hXLFg4Ni04NF0KIAkJCVBhc3MgcGFyYW1ldGVycyB0byB0aGUgQU1EIElPTU1VIGRyaXZlciBpbiB0aGUgc3lzdGVtLgogCQkJUG9zc2libGUgdmFsdWVzIGFyZToKQEAgLTE3MjksNiArMTczOCw5IEBACiAJbm9tZmdwdAkJW1g4Ni0zMl0gRGlzYWJsZSBNdWx0aS1GdW5jdGlvbiBHZW5lcmFsIFB1cnBvc2UKIAkJCVRpbWVyIHVzYWdlIChmb3IgQU1EIEdlb2RlIG1hY2hpbmVzKS4KIAorCW5vcGF0CQlbWDg2XSBEaXNhYmxlIFBBVCAocGFnZSBhdHRyaWJ1dGUgdGFibGUgZXh0ZW5zaW9uIG9mCisJCQlwYWdldGFibGVzKSBzdXBwb3J0LgorCiAJbm9yYW5kbWFwcwlEb24ndCB1c2UgYWRkcmVzcyBzcGFjZSByYW5kb21pemF0aW9uLiAgRXF1aXZhbGVudCB0bwogCQkJZWNobyAwID4gL3Byb2Mvc3lzL2tlcm5lbC9yYW5kb21pemVfdmFfc3BhY2UKIApAQCAtMTkzOSw4ICsxOTUxLDEyIEBACiAJCQkJSVJRIHJvdXRpbmcgaXMgZW5hYmxlZC4KIAkJbm9hY3BpCQlbWDg2XSBEbyBub3QgdXNlIEFDUEkgZm9yIElSUSByb3V0aW5nCiAJCQkJb3IgZm9yIFBDSSBzY2FubmluZy4KLQkJdXNlX2NycwkJW1g4Nl0gVXNlIF9DUlMgZm9yIFBDSSByZXNvdXJjZQotCQkJCWFsbG9jYXRpb24uCisJCXVzZV9jcnMJCVtYODZdIFVzZSBQQ0kgaG9zdCBicmlkZ2Ugd2luZG93IGluZm9ybWF0aW9uCisJCQkJZnJvbSBBQ1BJLiAgT24gQklPU2VzIGZyb20gMjAwOCBvciBsYXRlciwgdGhpcworCQkJCWlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gIElmIHlvdSBuZWVkIHRvIHVzZSB0aGlzLAorCQkJCXBsZWFzZSByZXBvcnQgYSBidWcuCisJCW5vY3JzCQlbWDg2XSBJZ25vcmUgUENJIGhvc3QgYnJpZGdlIHdpbmRvd3MgZnJvbSBBQ1BJLgorCQkJICAgICAgICBJZiB5b3UgbmVlZCB0byB1c2UgdGhpcywgcGxlYXNlIHJlcG9ydCBhIGJ1Zy4KIAkJcm91dGVpcnEJRG8gSVJRIHJvdXRpbmcgZm9yIGFsbCBQQ0kgZGV2aWNlcy4KIAkJCQlUaGlzIGlzIG5vcm1hbGx5IGRvbmUgaW4gcGNpX2VuYWJsZV9kZXZpY2UoKSwKIAkJCQlzbyB0aGlzIG9wdGlvbiBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kCkBAIC0xOTg5LDYgKzIwMDUsMTQgQEAKIAkJZm9yY2UJRW5hYmxlIEFTUE0gZXZlbiBvbiBkZXZpY2VzIHRoYXQgY2xhaW0gbm90IHRvIHN1cHBvcnQgaXQuCiAJCQlXQVJOSU5HOiBGb3JjaW5nIEFTUE0gb24gbWF5IGNhdXNlIHN5c3RlbSBsb2NrdXBzLgogCisJcGNpZV9wbWU9CVtQQ0lFLFBNXSBOYXRpdmUgUENJZSBQTUUgc2lnbmFsaW5nIG9wdGlvbnM6CisJCW9mZglEbyBub3QgdXNlIG5hdGl2ZSBQQ0llIFBNRSBzaWduYWxpbmcuCisJCWZvcmNlCVVzZSBuYXRpdmUgUENJZSBQTUUgc2lnbmFsaW5nIGV2ZW4gaWYgdGhlIEJJT1MgcmVmdXNlcworCQkJdG8gYWxsb3cgdGhlIGtlcm5lbCB0byBjb250cm9sIHRoZSByZWxldmFudCBQQ0llIGNvbmZpZworCQkJcmVnaXN0ZXJzLgorCQlub21zaQlEbyBub3QgdXNlIE1TSSBmb3IgbmF0aXZlIFBDSWUgUE1FIHNpZ25hbGluZyAodGhpcyBtYWtlcworCQkJYWxsIFBDSWUgcm9vdCBwb3J0cyB1c2UgSU5UeCBmb3IgZXZlcnl0aGluZykuCisKIAlwY212PQkJW0hXLFBDTUNJQV0gQmFkZ2VQQUQgNAogCiAJcGQuCQlbUEFSSURFXQpAQCAtMjY5NCw2ICsyNzE4LDEzIEBACiAJCQkJCW1lZGl1bSBpcyB3cml0ZS1wcm90ZWN0ZWQpLgogCQkJRXhhbXBsZTogcXVpcmtzPTA0MTk6YWFmNTpybCwwNDIxOjA0MzM6cmMKIAorCXVzZXJwdGU9CisJCQlbWDg2XSBGbGFncyBjb250cm9sbGluZyB1c2VyIFBURSBhbGxvY2F0aW9ucy4KKworCQkJCW5vaGlnaCA9IGRvIG5vdCBhbGxvY2F0ZSBQVEUgcGFnZXMgaW4KKwkJCQkJSElHSE1FTSByZWdhcmRsZXNzIG9mIHNldHRpbmcKKwkJCQkJb2YgQ09ORklHX0hJR0hQVEUuCisKIAl2ZHNvPQkJW1g4NixTSF0KIAkJCXZkc289MjogZW5hYmxlIGNvbXBhdCBWRFNPIChkZWZhdWx0IHdpdGggQ09NUEFUX1ZEU08pCiAJCQl2ZHNvPTE6IGVuYWJsZSBWRFNPIChkZWZhdWx0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMgYi9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYwppbmRleCA0MjIwODUxLi4zMTE5ZjVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYworKysgYi9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPHN5cy91aW8uaD4KICNpbmNsdWRlIDx0ZXJtaW9zLmg+CiAjaW5jbHVkZSA8Z2V0b3B0Lmg+Ci0jaW5jbHVkZSA8emxpYi5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHNjaGVkLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CmluZGV4IDAwNmIzOWQuLmU4N2YzY2RjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dApAQCAtMTA3NCwxMCArMTA3NCwxMCBAQAogCURlZmF1bHQ6IDUKIAogbWF4X2FkZHJlc3NlcyAtIElOVEVHRVIKLQlOdW1iZXIgb2YgbWF4aW11bSBhZGRyZXNzZXMgcGVyIGludGVyZmFjZS4gIDAgZGlzYWJsZXMgbGltaXRhdGlvbi4KLQlJdCBpcyByZWNvbW1lbmRlZCBub3Qgc2V0IHRvbyBsYXJnZSB2YWx1ZSAob3IgMCkgYmVjYXVzZSBpdCB3b3VsZAotCWJlIHRvbyBlYXN5IHdheSB0byBjcmFzaCBrZXJuZWwgdG8gYWxsb3cgdG8gY3JlYXRlIHRvbyBtdWNoIG9mCi0JYXV0b2NvbmZpZ3VyZWQgYWRkcmVzc2VzLgorCU1heGltdW0gbnVtYmVyIG9mIGF1dG9jb25maWd1cmVkIGFkZHJlc3NlcyBwZXIgaW50ZXJmYWNlLiAgU2V0dGluZworCXRvIHplcm8gZGlzYWJsZXMgdGhlIGxpbWl0YXRpb24uICBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gc2V0IHRoaXMKKwl2YWx1ZSB0b28gbGFyZ2UgKG9yIHRvIHplcm8pIGJlY2F1c2UgaXQgd291bGQgYmUgYW4gZWFzeSB3YXkgdG8KKwljcmFzaCB0aGUga2VybmVsIGJ5IGFsbG93aW5nIHRvbyBtYW55IGFkZHJlc3NlcyB0byBiZSBjcmVhdGVkLgogCURlZmF1bHQ6IDE2CiAKIGRpc2FibGVfaXB2NiAtIEJPT0xFQU4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGNtY2lhL2xvY2tpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9wY21jaWEvbG9ja2luZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhmNjIyYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcGNtY2lhL2xvY2tpbmcudHh0CkBAIC0wLDAgKzEsMTE4IEBACitUaGlzIGZpbGUgZXhwbGFpbnMgdGhlIGxvY2tpbmcgYW5kIGV4Y2x1c2lvbiBzY2hlbWUgdXNlZCBpbiB0aGUgUENDQVJECithbmQgUENNQ0lBIHN1YnN5c3RlbXMuCisKKworQSkgT3ZlcnZpZXcsIExvY2tpbmcgSGllcmFyY2h5OgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwY21jaWFfc29ja2V0X2xpc3RfcndzZW0JLSBwcm90ZWN0cyBvbmx5IHRoZSBsaXN0IG9mIHNvY2tldHMKKy0gc2t0X211dGV4CQkJLSBzZXJpYWxpemVzIGNhcmQgaW5zZXJ0IC8gZWplY3Rpb24KKyAgLSBvcHNfbXV0ZXgJCQktIHNlcmlhbGl6ZXMgc29ja2V0IG9wZXJhdGlvbgorCisKK0IpIEV4Y2x1c2lvbgorPT09PT09PT09PT09CisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFuZCBjYWxsYmFja3MgdG8gc3RydWN0IHBjbWNpYV9zb2NrZXQgbXVzdAorYmUgY2FsbGVkIHdpdGggInNrdF9tdXRleCIgaGVsZDoKKworCXNvY2tldF9kZXRlY3RfY2hhbmdlKCkKKwlzZW5kX2V2ZW50KCkKKwlzb2NrZXRfcmVzZXQoKQorCXNvY2tldF9zaHV0ZG93bigpCisJc29ja2V0X3NldHVwKCkKKwlzb2NrZXRfcmVtb3ZlKCkKKwlzb2NrZXRfaW5zZXJ0KCkKKwlzb2NrZXRfZWFybHlfcmVzdW1lKCkKKwlzb2NrZXRfbGF0ZV9yZXN1bWUoKQorCXNvY2tldF9yZXN1bWUoKQorCXNvY2tldF9zdXNwZW5kKCkKKworCXN0cnVjdCBwY21jaWFfY2FsbGJhY2sJKmNhbGxiYWNrCisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFuZCBjYWxsYmFja3MgdG8gc3RydWN0IHBjbWNpYV9zb2NrZXQgbXVzdAorYmUgY2FsbGVkIHdpdGggIm9wc19tdXRleCIgaGVsZDoKKworCXNvY2tldF9yZXNldCgpCisJc29ja2V0X3NldHVwKCkKKworCXN0cnVjdCBwY2NhcmRfb3BlcmF0aW9ucwkqb3BzCisJc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMJKnJlc291cmNlX29wczsKKworTm90ZSB0aGF0IHNlbmRfZXZlbnQoKSBhbmQgc3RydWN0IHBjbWNpYV9jYWxsYmFjayAqY2FsbGJhY2sgbXVzdCBub3QgYmUKK2NhbGxlZCB3aXRoICJvcHNfbXV0ZXgiIGhlbGQuCisKKworQykgUHJvdGVjdGlvbgorPT09PT09PT09PT09PQorCisxLiBHbG9iYWwgRGF0YToKKy0tLS0tLS0tLS0tLS0tLQorc3RydWN0IGxpc3RfaGVhZAlwY21jaWFfc29ja2V0X2xpc3Q7CisKK3Byb3RlY3RlZCBieSBwY21jaWFfc29ja2V0X2xpc3RfcndzZW07CisKKworMi4gUGVyLVNvY2tldCBEYXRhOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIHJlc291cmNlX29wcyBhbmQgdGhlaXIgZGF0YSBhcmUgcHJvdGVjdGVkIGJ5IG9wc19tdXRleC4KKworVGhlICJtYWluIiBzdHJ1Y3QgcGNtY2lhX3NvY2tldCBpcyBwcm90ZWN0ZWQgYXMgZm9sbG93cyAocmVhZC1vbmx5IGZpZWxkcworb3Igc2luZ2xlLXVzZSBmaWVsZHMgbm90IG1lbnRpb25lZCk6CisKKy0gYnkgcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtOgorCXN0cnVjdCBsaXN0X2hlYWQJc29ja2V0X2xpc3Q7CisKKy0gYnkgdGhyZWFkX2xvY2s6CisJdW5zaWduZWQgaW50CQl0aHJlYWRfZXZlbnRzOworCistIGJ5IHNrdF9tdXRleDoKKwl1X2ludAkJCXN1c3BlbmRlZF9zdGF0ZTsKKwl2b2lkCQkJKCp0dW5lX2JyaWRnZSk7CisJc3RydWN0IHBjbWNpYV9jYWxsYmFjawkqY2FsbGJhY2s7CisJaW50CQkJcmVzdW1lX3N0YXR1czsKKworLSBieSBvcHNfbXV0ZXg6CisJc29ja2V0X3N0YXRlX3QJCXNvY2tldDsKKwl1X2ludAkJCXN0YXRlOworCXVfc2hvcnQJCQlsb2NrX2NvdW50OworCXBjY2FyZF9tZW1fbWFwCQljaXNfbWVtOworCXZvaWQgX19pb21lbSAJCSpjaXNfdmlydDsKKwlzdHJ1Y3QgeyB9CQlpcnE7CisJaW9fd2luZG93X3QJCWlvW107CisJcGNjYXJkX21lbV9tYXAJCXdpbltdOworCXN0cnVjdCBsaXN0X2hlYWQJY2lzX2NhY2hlOworCXNpemVfdAkJCWZha2VfY2lzX2xlbjsKKwl1OAkJCSpmYWtlX2NpczsKKwl1X2ludAkJCWlycV9tYXNrOworCXZvaWQgCQkJKCp6b29tX3ZpZGVvKTsKKwlpbnQgCQkJKCpwb3dlcl9ob29rKTsKKwl1OAkJCXJlc291cmNlLi4uOworCXN0cnVjdCBsaXN0X2hlYWQJZGV2aWNlc19saXN0OworCXU4CQkJZGV2aWNlX2NvdW50OworCXN0cnVjdCAJCQlwY21jaWFfc3RhdGU7CisKKworMy4gUGVyIFBDTUNJQS1kZXZpY2UgRGF0YToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAibWFpbiIgc3RydWN0IHBjbWNpYV9kZXZpZSBpcyBwcm90ZWN0ZWQgYXMgZm9sbG93cyAocmVhZC1vbmx5IGZpZWxkcworb3Igc2luZ2xlLXVzZSBmaWVsZHMgbm90IG1lbnRpb25lZCk6CisKKworLSBieSBwY21jaWFfc29ja2V0LT5vcHNfbXV0ZXg6CisJc3RydWN0IGxpc3RfaGVhZAlzb2NrZXRfZGV2aWNlX2xpc3Q7CisJc3RydWN0IGNvbmZpZ190CQkqZnVuY3Rpb25fY29uZmlnOworCXUxNgkJCV9pcnE6MTsKKwl1MTYJCQlfaW86MTsKKwl1MTYJCQlfd2luOjQ7CisJdTE2CQkJX2xvY2tlZDoxOworCXUxNgkJCWFsbG93X2Z1bmNfaWRfbWF0Y2g6MTsKKwl1MTYJCQlzdXNwZW5kZWQ6MTsKKwl1MTYJCQlfcmVtb3ZlZDoxOworCistIGJ5IHRoZSBQQ01DSUEgZHJpdmVyOgorCWlvX3JlcV90CQlpbzsKKwlpcnFfcmVxX3QJCWlycTsKKwljb25maWdfcmVxX3QJCWNvbmY7CisJd2luZG93X2hhbmRsZV90CQl3aW47CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGM1MTIxLXBzYy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGM1MTIxLXBzYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzMmU4NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21wYzUxMjEtcHNjLnR4dApAQCAtMCwwICsxLDcwIEBACitNUEM1MTIxIFBTQyBEZXZpY2UgVHJlZSBCaW5kaW5ncworCitQU0MgaW4gVUFSVCBtb2RlCistLS0tLS0tLS0tLS0tLS0tCisKK0ZvciBQU0MgaW4gVUFSVCBtb2RlIHRoZSBuZWVkZWQgUFNDIHNlcmlhbCBkZXZpY2VzCithcmUgc3BlY2lmaWVkIGJ5IGZzbCxtcGM1MTIxLXBzYy11YXJ0IG5vZGVzIGluIHRoZQorZnNsLG1wYzUxMjEtaW1tciBTb0Mgbm9kZS4gQWRkaXRpb25hbGx5IHRoZSBQU0MgRklGTworQ29udHJvbGxlciBub2RlIGZzbCxtcGM1MTIxLXBzYy1maWZvIGlzIHJlcXVlcmVkIHRoZXJlOgorCitmc2wsbXBjNTEyMS1wc2MtdWFydCBub2RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVxdWlyZWQgcHJvcGVydGllcyA6CisgLSBjb21wYXRpYmxlIDogU2hvdWxkIGNvbnRhaW4gImZzbCxtcGM1MTIxLXBzYy11YXJ0IiBhbmQgImZzbCxtcGM1MTIxLXBzYyIKKyAtIGNlbGwtaW5kZXggOiBJbmRleCBvZiB0aGUgUFNDIGluIGhhcmR3YXJlCisgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgUFNDIGRldmljZQorIC0gaW50ZXJydXB0cyA6IDxhIGI+IHdoZXJlIGEgaXMgdGhlIGludGVycnVwdCBudW1iZXIgb2YgdGhlCisgICBQU0MgRklGTyBDb250cm9sbGVyIGFuZCBiIGlzIGEgZmllbGQgdGhhdCByZXByZXNlbnRzIGFuCisgICBlbmNvZGluZyBvZiB0aGUgc2Vuc2UgYW5kIGxldmVsIGluZm9ybWF0aW9uIGZvciB0aGUgaW50ZXJydXB0LgorIC0gaW50ZXJydXB0LXBhcmVudCA6IHRoZSBwaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgdGhhdAorICAgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCisKK1JlY29tbWVuZGVkIHByb3BlcnRpZXMgOgorIC0gZnNsLHJ4LWZpZm8tc2l6ZSA6IHRoZSBzaXplIG9mIHRoZSBSWCBmaWZvIHNsaWNlIChhIG11bHRpcGxlIG9mIDQpCisgLSBmc2wsdHgtZmlmby1zaXplIDogdGhlIHNpemUgb2YgdGhlIFRYIGZpZm8gc2xpY2UgKGEgbXVsdGlwbGUgb2YgNCkKKworCitmc2wsbXBjNTEyMS1wc2MtZmlmbyBub2RlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlcXVpcmVkIHByb3BlcnRpZXMgOgorIC0gY29tcGF0aWJsZSA6IFNob3VsZCBiZSAiZnNsLG1wYzUxMjEtcHNjLWZpZm8iCisgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgUFNDCisgICAgICAgICBGSUZPIENvbnRyb2xsZXIKKyAtIGludGVycnVwdHMgOiA8YSBiPiB3aGVyZSBhIGlzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIG9mIHRoZQorICAgUFNDIEZJRk8gQ29udHJvbGxlciBhbmQgYiBpcyBhIGZpZWxkIHRoYXQgcmVwcmVzZW50cyBhbgorICAgZW5jb2Rpbmcgb2YgdGhlIHNlbnNlIGFuZCBsZXZlbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGludGVycnVwdC4KKyAtIGludGVycnVwdC1wYXJlbnQgOiB0aGUgcGhhbmRsZSBmb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHRoYXQKKyAgIHNlcnZpY2VzIGludGVycnVwdHMgZm9yIHRoaXMgZGV2aWNlLgorCisKK0V4YW1wbGUgZm9yIGEgYm9hcmQgdXNpbmcgUFNDMCBhbmQgUFNDMSBkZXZpY2VzIGluIHNlcmlhbCBtb2RlOgorCitzZXJpYWxAMTEwMDAgeworCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtcHNjLXVhcnQiLCAiZnNsLG1wYzUxMjEtcHNjIjsKKwljZWxsLWluZGV4ID0gPDA+OworCXJlZyA9IDwweDExMDAwIDB4MTAwPjsKKwlpbnRlcnJ1cHRzID0gPDQwIDB4OD47CisJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKKwlmc2wscngtZmlmby1zaXplID0gPDE2PjsKKwlmc2wsdHgtZmlmby1zaXplID0gPDE2PjsKK307CisKK3NlcmlhbEAxMTEwMCB7CisJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1wc2MtdWFydCIsICJmc2wsbXBjNTEyMS1wc2MiOworCWNlbGwtaW5kZXggPSA8MT47CisJcmVnID0gPDB4MTExMDAgMHgxMDA+OworCWludGVycnVwdHMgPSA8NDAgMHg4PjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworCWZzbCxyeC1maWZvLXNpemUgPSA8MTY+OworCWZzbCx0eC1maWZvLXNpemUgPSA8MTY+OworfTsKKworcHNjZmlmb0AxMWYwMCB7CisJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1wc2MtZmlmbyI7CisJcmVnID0gPDB4MTFmMDAgMHgxMDA+OworCWludGVycnVwdHMgPSA8NDAgMHg4PjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zcGkudHh0CmluZGV4IGU3ZDlhMzQuLjgwNTEwYzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3BpLnR4dApAQCAtMTMsNiArMTMsMTEgQEAKIC0gaW50ZXJydXB0LXBhcmVudCA6IHRoZSBwaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgdGhhdAogICBzZXJ2aWNlcyBpbnRlcnJ1cHRzIGZvciB0aGlzIGRldmljZS4KIAorT3B0aW9uYWwgcHJvcGVydGllczoKKy0gZ3Bpb3MgOiBzcGVjaWZpZXMgdGhlIGdwaW8gcGlucyB0byBiZSB1c2VkIGZvciBjaGlwc2VsZWN0cy4KKyAgVGhlIGdwaW9zIHdpbGwgYmUgcmVmZXJyZWQgdG8gYXMgcmVnID0gPGluZGV4PiBpbiB0aGUgU1BJIGNoaWxkIG5vZGVzLgorICBJZiB1bnNwZWNpZmllZCwgYSBzaW5nbGUgU1BJIGRldmljZSB3aXRob3V0IGEgY2hpcCBzZWxlY3QgY2FuIGJlIHVzZWQuCisKIEV4YW1wbGU6CiAJc3BpQDRjMCB7CiAJCWNlbGwtaW5kZXggPSA8MD47CkBAIC0yMSw0ICsyNiw2IEBACiAJCWludGVycnVwdHMgPSA8ODIgMD47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKIAkJbW9kZSA9ICJjcHUiOworCQlncGlvcyA9IDwmZ3BpbyAxOCAxCS8vIGRldmljZSByZWc9PDA+CisJCQkgJmdwaW8gMTkgMT47CS8vIGRldmljZSByZWc9PDE+CiAJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9wdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3B0cmFjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRhNTQ5OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9wdHJhY2UudHh0CkBAIC0wLDAgKzEsMTM0IEBACitHREIgaW50ZW5kcyB0byBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgaGFyZHdhcmUgZGVidWcgZmVhdHVyZXMgb2YgQm9va0UKK3Byb2Nlc3NvcnM6CisKKzQgaGFyZHdhcmUgYnJlYWtwb2ludHMgKElBQykKKzIgaGFyZHdhcmUgd2F0Y2hwb2ludHMgKHJlYWQsIHdyaXRlIGFuZCByZWFkLXdyaXRlKSAoREFDKQorMiB2YWx1ZSBjb25kaXRpb25zIGZvciB0aGUgaGFyZHdhcmUgd2F0Y2hwb2ludHMgKERWQykKKworRm9yIHRoYXQsIHdlIG5lZWQgdG8gZXh0ZW5kIHB0cmFjZSBzbyB0aGF0IEdEQiBjYW4gcXVlcnkgYW5kIHNldCB0aGVzZQorcmVzb3VyY2VzLiBTaW5jZSB3ZSdyZSBleHRlbmRpbmcsIHdlJ3JlIHRyeWluZyB0byBjcmVhdGUgYW4gaW50ZXJmYWNlCit0aGF0J3MgZXh0ZW5kYWJsZSBhbmQgdGhhdCBjb3ZlcnMgYm90aCBCb29rRSBhbmQgc2VydmVyIHByb2Nlc3NvcnMsIHNvCit0aGF0IEdEQiBkb2Vzbid0IG5lZWQgdG8gc3BlY2lhbC1jYXNlIGVhY2ggb2YgdGhlbS4gV2UgYWRkZWQgdGhlCitmb2xsb3dpbmcgMyBuZXcgcHRyYWNlIHJlcXVlc3RzLgorCisxLiBQVFJBQ0VfUFBDX0dFVEhXREVCVUdJTkZPCisKK1F1ZXJ5IGZvciBHREIgdG8gZGlzY292ZXIgdGhlIGhhcmR3YXJlIGRlYnVnIGZlYXR1cmVzLiBUaGUgbWFpbiBpbmZvIHRvCitiZSByZXR1cm5lZCBoZXJlIGlzIHRoZSBtaW5pbXVtIGFsaWdubWVudCBmb3IgdGhlIGhhcmR3YXJlIHdhdGNocG9pbnRzLgorQm9va0UgcHJvY2Vzc29ycyBkb24ndCBoYXZlIHJlc3RyaWN0aW9ucyBoZXJlLCBidXQgc2VydmVyIHByb2Nlc3NvcnMgaGF2ZQorYW4gOC1ieXRlIGFsaWdubWVudCByZXN0cmljdGlvbiBmb3IgaGFyZHdhcmUgd2F0Y2hwb2ludHMuIFdlJ2QgbGlrZSB0byBhdm9pZAorYWRkaW5nIHNwZWNpYWwgY2FzZXMgdG8gR0RCIGJhc2VkIG9uIHdoYXQgaXQgc2VlcyBpbiBBVVhWLgorCitTaW5jZSB3ZSdyZSBhdCBpdCwgd2UgYWRkZWQgb3RoZXIgdXNlZnVsIGluZm8gdGhhdCB0aGUga2VybmVsIGNhbiByZXR1cm4gdG8KK0dEQjogdGhpcyBxdWVyeSB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIGhhcmR3YXJlIGJyZWFrcG9pbnRzLCBoYXJkd2FyZQord2F0Y2hwb2ludHMgYW5kIHdoZXRoZXIgaXQgc3VwcG9ydHMgYSByYW5nZSBvZiBhZGRyZXNzZXMgYW5kIGEgY29uZGl0aW9uLgorVGhlIHF1ZXJ5IHdpbGwgZmlsbCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBwcm92aWRlZCBieSB0aGUgcmVxdWVzdGluZyBwcm9jZXNzOgorCitzdHJ1Y3QgcHBjX2RlYnVnX2luZm8geworICAgICAgIHVuaXQzMl90IHZlcnNpb247CisgICAgICAgdW5pdDMyX3QgbnVtX2luc3RydWN0aW9uX2JwczsKKyAgICAgICB1bml0MzJfdCBudW1fZGF0YV9icHM7CisgICAgICAgdW5pdDMyX3QgbnVtX2NvbmRpdGlvbl9yZWdzOworICAgICAgIHVuaXQzMl90IGRhdGFfYnBfYWxpZ25tZW50OworICAgICAgIHVuaXQzMl90IHNpemVvZl9jb25kaXRpb247IC8qIHNpemUgb2YgdGhlIERWQyByZWdpc3RlciAqLworICAgICAgIHVpbnQ2NF90IGZlYXR1cmVzOyAvKiBiaXRtYXNrIG9mIHRoZSBpbmRpdmlkdWFsIGZsYWdzICovCit9OworCitmZWF0dXJlcyB3aWxsIGhhdmUgYml0cyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlcmUgaXMgc3VwcG9ydCBmb3I6CisKKyNkZWZpbmUgUFBDX0RFQlVHX0ZFQVRVUkVfSU5TTl9CUF9SQU5HRQkJMHgxCisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0lOU05fQlBfTUFTSwkJMHgyCisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0RBVEFfQlBfUkFOR0UJCTB4NAorI2RlZmluZSBQUENfREVCVUdfRkVBVFVSRV9EQVRBX0JQX01BU0sJCTB4OAorCisyLiBQVFJBQ0VfU0VUSFdERUJVRworCitTZXRzIGEgaGFyZHdhcmUgYnJlYWtwb2ludCBvciB3YXRjaHBvaW50LCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIHN0cnVjdHVyZToKKworc3RydWN0IHBwY19od19icmVha3BvaW50IHsKKyAgICAgICAgdWludDMyX3QgdmVyc2lvbjsKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9FWEVDVVRFICAweDEKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFEICAgICAweDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9XUklURSAgICAweDQKKyAgICAgICAgdWludDMyX3QgdHJpZ2dlcl90eXBlOyAgICAgICAvKiBvbmx5IHNvbWUgY29tYmluYXRpb25zIGFsbG93ZWQgKi8KKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9FWEFDVCAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0lOQ0xVU0lWRSAgICAgMHgxCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX01PREVfUkFOR0VfRVhDTFVTSVZFICAgICAweDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9NQVNLICAgICAgICAgICAgICAgIDB4MworICAgICAgICB1aW50MzJfdCBhZGRyX21vZGU7ICAgICAgICAgIC8qIGFkZHJlc3MgbWF0Y2ggbW9kZSAqLworCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9NT0RFICAgMHgzCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FICAgMHgwCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9BTkQgICAgMHgxCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9FWEFDVCAgMHgxCS8qIGRpZmZlcmVudCBuYW1lIGZvciB0aGUgc2FtZSB0aGluZyBhcyBhYm92ZSAqLworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fT1IgICAgIDB4MgorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQU5EX09SIDB4MworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfQUxMIDB4MDBmZjAwMDAJLyogYnl0ZSBlbmFibGUgYml0cyAqLworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkUobikgICgxPDwoKG4pKzE2KSkKKyAgICAgICAgdWludDMyX3QgY29uZGl0aW9uX21vZGU7ICAgICAvKiBicmVhay93YXRjaHBvaW50IGNvbmRpdGlvbiBmbGFncyAqLworCisgICAgICAgIHVpbnQ2NF90IGFkZHI7CisgICAgICAgIHVpbnQ2NF90IGFkZHIyOworICAgICAgICB1aW50NjRfdCBjb25kaXRpb25fdmFsdWU7Cit9OworCitBIHJlcXVlc3Qgc3BlY2lmaWVzIG9uZSBldmVudCwgbm90IG5lY2Vzc2FyaWx5IGp1c3Qgb25lIHJlZ2lzdGVyIHRvIGJlIHNldC4KK0ZvciBpbnN0YW5jZSwgaWYgdGhlIHJlcXVlc3QgaXMgZm9yIGEgd2F0Y2hwb2ludCB3aXRoIGEgY29uZGl0aW9uLCBib3RoIHRoZQorREFDIGFuZCBEVkMgcmVnaXN0ZXJzIHdpbGwgYmUgc2V0IGluIHRoZSBzYW1lIHJlcXVlc3QuCisKK1dpdGggdGhpcyBHREIgY2FuIGFzayBmb3IgYWxsIGtpbmRzIG9mIGhhcmR3YXJlIGJyZWFrcG9pbnRzIGFuZCB3YXRjaHBvaW50cwordGhhdCB0aGUgQm9va0Ugc3VwcG9ydHMuIENPTUVGUk9NIGJyZWFrcG9pbnRzIGF2YWlsYWJsZSBpbiBzZXJ2ZXIgcHJvY2Vzc29ycworYXJlIG5vdCBjb250ZW1wbGF0ZWQsIGJ1dCB0aGF0IGlzIG91dCBvZiB0aGUgc2NvcGUgb2YgdGhpcyB3b3JrLgorCitwdHJhY2Ugd2lsbCByZXR1cm4gYW4gaW50ZWdlciAoaGFuZGxlKSB1bmlxdWVseSBpZGVudGlmeWluZyB0aGUgYnJlYWtwb2ludCBvcgord2F0Y2hwb2ludCBqdXN0IGNyZWF0ZWQuIFRoaXMgaW50ZWdlciB3aWxsIGJlIHVzZWQgaW4gdGhlIFBUUkFDRV9ERUxIV0RFQlVHCityZXF1ZXN0IHRvIGFzayBmb3IgaXRzIHJlbW92YWwuIFJldHVybiAtRU5PU1BDIGlmIHRoZSByZXF1ZXN0ZWQgYnJlYWtwb2ludAorY2FuJ3QgYmUgYWxsb2NhdGVkIG9uIHRoZSByZWdpc3RlcnMuCisKK1NvbWUgZXhhbXBsZXMgb2YgdXNpbmcgdGhlIHN0cnVjdHVyZSB0bzoKKworLSBzZXQgYSBicmVha3BvaW50IGluIHRoZSBmaXJzdCBicmVha3BvaW50IHJlZ2lzdGVyCisKKyAgcC52ZXJzaW9uICAgICAgICAgPSBQUENfREVCVUdfQ1VSUkVOVF9WRVJTSU9OOworICBwLnRyaWdnZXJfdHlwZSAgICA9IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfRVhFQ1VURTsKKyAgcC5hZGRyX21vZGUgICAgICAgPSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUOworICBwLmNvbmRpdGlvbl9tb2RlICA9IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FOworICBwLmFkZHIgICAgICAgICAgICA9ICh1aW50NjRfdCkgYWRkcmVzczsKKyAgcC5hZGRyMiAgICAgICAgICAgPSAwOworICBwLmNvbmRpdGlvbl92YWx1ZSA9IDA7CisKKy0gc2V0IGEgd2F0Y2hwb2ludCB3aGljaCB0cmlnZ2VycyBvbiByZWFkcyBpbiB0aGUgc2Vjb25kIHdhdGNocG9pbnQgcmVnaXN0ZXIKKworICBwLnZlcnNpb24gICAgICAgICA9IFBQQ19ERUJVR19DVVJSRU5UX1ZFUlNJT047CisgIHAudHJpZ2dlcl90eXBlICAgID0gUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFEOworICBwLmFkZHJfbW9kZSAgICAgICA9IFBQQ19CUkVBS1BPSU5UX01PREVfRVhBQ1Q7CisgIHAuY29uZGl0aW9uX21vZGUgID0gUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX05PTkU7CisgIHAuYWRkciAgICAgICAgICAgID0gKHVpbnQ2NF90KSBhZGRyZXNzOworICBwLmFkZHIyICAgICAgICAgICA9IDA7CisgIHAuY29uZGl0aW9uX3ZhbHVlID0gMDsKKworLSBzZXQgYSB3YXRjaHBvaW50IHdoaWNoIHRyaWdnZXJzIG9ubHkgd2l0aCBhIHNwZWNpZmljIHZhbHVlCisKKyAgcC52ZXJzaW9uICAgICAgICAgPSBQUENfREVCVUdfQ1VSUkVOVF9WRVJTSU9OOworICBwLnRyaWdnZXJfdHlwZSAgICA9IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUkVBRDsKKyAgcC5hZGRyX21vZGUgICAgICAgPSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUOworICBwLmNvbmRpdGlvbl9tb2RlICA9IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9BTkQgfCBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfQUxMOworICBwLmFkZHIgICAgICAgICAgICA9ICh1aW50NjRfdCkgYWRkcmVzczsKKyAgcC5hZGRyMiAgICAgICAgICAgPSAwOworICBwLmNvbmRpdGlvbl92YWx1ZSA9ICh1aW50NjRfdCkgY29uZGl0aW9uOworCistIHNldCBhIHJhbmdlZCBoYXJkd2FyZSBicmVha3BvaW50CisKKyAgcC52ZXJzaW9uICAgICAgICAgPSBQUENfREVCVUdfQ1VSUkVOVF9WRVJTSU9OOworICBwLnRyaWdnZXJfdHlwZSAgICA9IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfRVhFQ1VURTsKKyAgcC5hZGRyX21vZGUgICAgICAgPSBQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0lOQ0xVU0lWRTsKKyAgcC5jb25kaXRpb25fbW9kZSAgPSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTk9ORTsKKyAgcC5hZGRyICAgICAgICAgICAgPSAodWludDY0X3QpIGJlZ2luX3JhbmdlOworICBwLmFkZHIyICAgICAgICAgICA9ICh1aW50NjRfdCkgZW5kX3JhbmdlOworICBwLmNvbmRpdGlvbl92YWx1ZSA9IDA7CisKKzMuIFBUUkFDRV9ERUxIV0RFQlVHCisKK1Rha2VzIGFuIGludGVnZXIgd2hpY2ggaWRlbnRpZmllcyBhbiBleGlzdGluZyBicmVha3BvaW50IG9yIHdhdGNocG9pbnQKKyhpLmUuLCB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBQVFJBQ0VfU0VUSFdERUJVRyksIGFuZCBkZWxldGVzIHRoZQorY29ycmVzcG9uZGluZyBicmVha3BvaW50IG9yIHdhdGNocG9pbnQuLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL0NvbW1vbklPIGIvRG9jdW1lbnRhdGlvbi9zMzkwL0NvbW1vbklPCmluZGV4IDMzOTIwN2QuLmQzNzhjYmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vczM5MC9Db21tb25JTworKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvQ29tbW9uSU8KQEAgLTg3LDYgKzg3LDEyIEBACiAgIGNvbXBhdGliaWxpdHksIGJ5IHRoZSBkZXZpY2UgbnVtYmVyIGluIGhleGFkZWNpbWFsICgweGFiY2Qgb3IgYWJjZCkuIERldmljZQogICBudW1iZXJzIGdpdmVuIGFzIDB4YWJjZCB3aWxsIGJlIGludGVycHJldGVkIGFzIDAuMC5hYmNkLgogCisqIC9wcm9jL2Npb19zZXR0bGUKKworICBBIHdyaXRlIHJlcXVlc3QgdG8gdGhpcyBmaWxlIGlzIGJsb2NrZWQgdW50aWwgYWxsIHF1ZXVlZCBjaW8gYWN0aW9ucyBhcmUKKyAgaGFuZGxlZC4gVGhpcyB3aWxsIGFsbG93IHVzZXJzcGFjZSB0byB3YWl0IGZvciBwZW5kaW5nIHdvcmsgYWZmZWN0aW5nCisgIGRldmljZSBhdmFpbGFiaWxpdHkgYWZ0ZXIgY2hhbmdpbmcgY2lvX2lnbm9yZSBvciB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KKwogKiBGb3Igc29tZSBvZiB0aGUgaW5mb3JtYXRpb24gcHJlc2VudCBpbiB0aGUgL3Byb2MgZmlsZXN5c3RlbSBpbiAyLjQgKG5hbWVseSwKICAgL3Byb2Mvc3ViY2hhbm5lbHMgYW5kIC9wcm9jL2NocGlkcyksIHNlZSBkcml2ZXItbW9kZWwudHh0LgogICBJbmZvcm1hdGlvbiBmb3JtZXJseSBpbiAvcHJvYy9pcnFfY291bnQgaXMgbm93IGluIC9wcm9jL2ludGVycnVwdHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvZHJpdmVyLW1vZGVsLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CmluZGV4IGJkZTQ3M2QuLmVkMjY1Y2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CkBAIC0yMjMsOCArMjIzLDggQEAKIHByaXZhdGUgZGF0YS4KIAogVG8gaW1wbGVtZW50IGEgY2N3Z3JvdXAgZHJpdmVyLCBwbGVhc2UgcmVmZXIgdG8gaW5jbHVkZS9hc20vY2N3Z3JvdXAuaC4gS2VlcCBpbgotbWluZCB0aGF0IG1vc3QgZHJpdmVycyB3aWxsIG5lZWQgdG8gaW1wbGVtZW50IGJvdGggYSBjY3dncm91cCBhbmQgYSBjY3cgZHJpdmVyCi0odW5sZXNzIHlvdSBoYXZlIGEgbWV0YSBjY3cgZHJpdmVyLCBsaWtlIGN1MzA4OCBmb3IgbGNzIGFuZCBjdGMpLgorbWluZCB0aGF0IG1vc3QgZHJpdmVycyB3aWxsIG5lZWQgdG8gaW1wbGVtZW50IGJvdGggYSBjY3dncm91cCBhbmQgYSBjY3cKK2RyaXZlci4KIAogCiAyLiBDaGFubmVsIHBhdGhzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkX3NhcyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWRfc2FzCmluZGV4IDE3ZmZhMDYuLjMwMDIzNTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWRfc2FzCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWRfc2FzCkBAIC0xLDMgKzEsMTkgQEAKKzEgUmVsZWFzZSBEYXRlICAgIDogVGh1ci4gIE9jdCAyOSwgMjAwOSAwOToxMjo0NSBQU1QgMjAwOSAtCisJCQkoZW1haWxkLWlkOm1lZ2FyYWlkbGludXhAbHNpLmNvbSkKKwkJCUJvIFlhbmcKKworMiBDdXJyZW50IFZlcnNpb24gOiAwMC4wMC4wNC4xNy4xLXJjMQorMyBPbGRlciBWZXJzaW9uICAgOiAwMC4wMC4wNC4xMgorCisxLglBZGQgdGhlIHBhZF8wIGluIG1maSBmcmFtZSBzdHJ1Y3R1cmUgdG8gMCB0byBmaXggdGhlCisJY29udGV4dCB2YWx1ZSBsYXJnZXIgdGhhbiAzMmJpdCB2YWx1ZSBpc3N1ZS4KKworMi4JQWRkIHRoZSBsb2dpYyBkcml2ZSBsaXN0IHRvIHRoZSBkcml2ZXIuICBEcml2ZXIgd2lsbAorCWtlZXAgdGhlIGxvZ2ljIGRyaXZlIGxpc3QgaW50ZXJuYWwgYWZ0ZXIgZHJpdmVyIGxvYWQuCisKKzMuCWRyaXZlciBmaXhlZCB0aGUgZGV2aWNlIHVwZGF0ZSBpc3N1ZSBhZnRlciBnZXQgdGhlIEFFTgorCVBEIGRlbGV0ZS9BREQsIExEIGFkZC9kZWxldGUgZnJvbSBGVy4KKwogMSBSZWxlYXNlIERhdGUgICAgOiBUdWVzLiAgSnVseSAyOCwgMjAwOSAxMDoxMjo0NSBQU1QgMjAwOSAtCiAJCQkoZW1haWxkLWlkOm1lZ2FyYWlkbGludXhAbHNpLmNvbSkKIAkJCUJvIFlhbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKaW5kZXggODkyMzU5Ny4uMzNkZjgyZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKQEAgLTQ4Miw2ICs0ODIsOSBAQAogCiAgICAgcmVmZXJlbmNlX3JhdGUJLSByZWZlcmVuY2Ugc2FtcGxlIHJhdGUsIDQ0MTAwIG9yIDQ4MDAwIChkZWZhdWx0KQogICAgIG11bHRpcGxlCQktIG11bHRpcGxlIHRvIHJlZi4gc2FtcGxlIHJhdGUsIDEgb3IgMiAoZGVmYXVsdCkKKyAgICBzdWJzeXN0ZW0JCS0gb3ZlcnJpZGUgdGhlIFBDSSBTU0lEIGZvciBwcm9iaW5nOyB0aGUgdmFsdWUKKwkJCSAgY29uc2lzdHMgb2YgU1NWSUQgPDwgMTYgfCBTU0RJRC4gIFRoZSBkZWZhdWx0IGlzCisJCQkgIHplcm8sIHdoaWNoIG1lYW5zIG5vIG92ZXJyaWRlLgogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuCiAKQEAgLTExMjMsNiArMTEyNiwyMSBAQAogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMsIGF1dG9wcm9iZSBhbmQgSVNBIFBuUC4KIAorICBNb2R1bGUgc25kLWphenoxNgorICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIE1lZGlhIFZpc2lvbiBKYXp6MTYgY2hpcHNldC4gVGhlIGNoaXBzZXQgY29uc2lzdHMgb2YgMyBjaGlwczoKKyAgICBNVkQxMjE2ICsgTVZBNDE2ICsgTVZBNTE0LgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgU0IgRFNQIGNoaXAgKDB4MjEwLDB4MjIwLDB4MjMwLDB4MjQwLDB4MjUwLDB4MjYwKQorICAgIGlycQkJLSBJUlEgIyBmb3IgU0IgRFNQIGNoaXAgKDMsNSw3LDksMTAsMTUpCisgICAgZG1hOAktIERNQSAjIGZvciBTQiBEU1AgY2hpcCAoMSwzKQorICAgIGRtYTE2CS0gRE1BICMgZm9yIFNCIERTUCBjaGlwICg1LDcpCisgICAgbXB1X3BvcnQJLSBNUFUtNDAxIHBvcnQgIyAoMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzApCisgICAgbXB1X2lycQktIE1QVS00MDEgaXJxICMgKDIsMyw1LDcpCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcy4KKwogICBNb2R1bGUgc25kLWtvcmcxMjEyCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTc5MSw2ICsxODA5LDEzIEBACiAKICAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCiAKKyAgTW9kdWxlIHNuZC11YTEwMQorICAtLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHRoZSBFZGlyb2wgVUEtMTAxIGF1ZGlvL01JREkgaW50ZXJmYWNlLgorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgZGV2aWNlcywgYXV0b3Byb2JlIGFuZCBob3RwbHVnZ2luZy4KKwogICBNb2R1bGUgc25kLXVzYi1hdWRpbwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xOTIzLDcgKzE5NDgsNyBAQAogICAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIHRoZSBBc3VzIEFWMTAwL0FWMjAwIGNoaXBzLAotICAgIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCwgSERBVjEuMyAoRGVsdXhlKSwgRXNzZW5jZSBTVAorICAgIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCwgRFMsIEhEQVYxLjMgKERlbHV4ZSksIEVzc2VuY2UgU1QKICAgICAoRGVsdXhlKSBhbmQgRXNzZW5jZSBTVFguCiAKICAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBhdXRvcHJvYmUgYW5kIG11bHRpcGxlIGNhcmRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAppbmRleCBlNzJjZWU5Li4xZDM4YjBkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dApAQCAtMTI0LDYgKzEyNCw4IEBACiAgIGFzdXMtYTdtCUFTVVMgQTdNCiAgIG1hY3BybwlNYWNQcm8gc3VwcG9ydAogICBtYjUJCU1hY2Jvb2sgNSwxCisgIG1hY21pbmkzCU1hY21pbmkgMywxCisgIG1iYTIxCQlNYWNib29rIEFpciAyLDEKICAgbWJwMwkJTWFjYm9vayBQcm8gcmV2MwogICBpbWFjMjQJaU1hYyAyNCcnIHdpdGggamFjayBkZXRlY3Rpb24KICAgaW1hYzkxCWlNYWMgOSwxCkBAIC0yNzksMTMgKzI4MSwxNiBAQAogICBsYXB0b3AJQmFzaWMgTGFwdG9wIGNvbmZpZyAoZGVmYXVsdCkKICAgaHAJCUhQIFNwYXJ0YW4gbGFwdG9wCiAgIGhwLWR2NjczNglIUCBkdjY3MzYKKyAgaHAtZjcwMAlIUCBDb21wYXEgUHJlc2FyaW8gRjcwMAogICBsZW5vdm8teDIwMAlMZW5vdm8gWDIwMCBsYXB0b3AKKyAgdG9zaGliYQlUb3NoaWJhIFNhdGVsbGl0ZSBNMzAwCiAKIENvbmV4YW50IDUwNjYKID09PT09PT09PT09PT0KICAgbGFwdG9wCUJhc2ljIExhcHRvcCBjb25maWcgKGRlZmF1bHQpCiAgIGRlbGwtbGFwdG9wCURlbGwgbGFwdG9wcwogICBvbHBjLXhvLTFfNQlPTFBDIFhPIDEuNQorICBpZGVhcGFkICAgICAgIExlbm92byBJZGVhUGFkIFUxNTAKIAogU1RBQzkyMDAKID09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dAppbmRleCA2MzI1YmVjLi5mNGRkM2JmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby50eHQKQEAgLTQ1Miw2ICs0NTIsMzMgQEAKIHN5c2ZzIGVudHJpZXMsIGFuZCB0aGUgbGluZXMgYWZ0ZXIgYFtoaW50XWAgYXJlIHBhcnNlZCBhcyBgaGludHNgCiBzeXNmcyBlbnRyaWVzLCByZXNwZWN0aXZlbHkuCiAKK0Fub3RoZXIgZXhhbXBsZSB0byBvdmVycmlkZSB0aGUgY29kZWMgdmVuZG9yIGlkIGZyb20gMHgxMjM0NTY3OCB0bworMHhkZWFkYmVlZiBpcyBsaWtlIGJlbG93OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFtjb2RlY10KKyAgMHgxMjM0NTY3OCAweGFiY2QxMjM0IDIKKworICBbdmVuZG9yX2lkXQorICAweGRlYWRiZWVmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhlIHNpbWlsYXIgd2F5LCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBjb2RlYyBzdWJzeXN0ZW1faWQgdmlhCitgW3N1YnN5c3RlbV9pZF1gLCB0aGUgcmV2aXNpb24gaWQgdmlhIGBbcmV2aXNpb25faWRdYCBsaW5lLgorQWxzbywgdGhlIGNvZGVjIGNoaXAgbmFtZSBjYW4gYmUgcmV3cml0dGVuIHZpYSBgW2NoaXBfbmFtZV1gIGxpbmUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgW2NvZGVjXQorICAweDEyMzQ1Njc4IDB4YWJjZDEyMzQgMgorCisgIFtzdWJzeXN0ZW1faWRdCisgIDB4ZmZmZjExMTEKKworICBbcmV2aXNpb25faWRdCisgIDB4MTAKKworICBbY2hpcF9uYW1lXQorICBNeS1vd24gTkVXUy0wMDAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogVGhlIGhkLWF1ZGlvIGRyaXZlciByZWFkcyB0aGUgZmlsZSB2aWEgcmVxdWVzdF9maXJtd2FyZSgpLiAgVGh1cywKIGEgcGF0Y2ggZmlsZSBoYXMgdG8gYmUgbG9jYXRlZCBvbiB0aGUgYXBwcm9wcmlhdGUgZmlybXdhcmUgcGF0aCwKIHR5cGljYWxseSwgL2xpYi9maXJtd2FyZS4gIEZvciBleGFtcGxlLCB3aGVuIHlvdSBwYXNzIHRoZSBvcHRpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CmluZGV4IDIzOWYxNGIuLmYxZjgxYWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dApAQCAtMSw1ICsxLDYgQEAKIAkJZnVuY3Rpb24gdHJhY2VyIGd1dHMKIAkJPT09PT09PT09PT09PT09PT09PT0KKwkJQnkgTWlrZSBGcnlzaW5nZXIKIAogSW50cm9kdWN0aW9uCiAtLS0tLS0tLS0tLS0KQEAgLTE3MywxNCArMTc0LDE2IEBACiAKIAl1bnNpZ25lZCBsb25nICpmcm9tcGMgPSAmLi4uOwogCXVuc2lnbmVkIGxvbmcgc2VsZnBjID0gPHJldHVybiBhZGRyZXNzPiAtIE1DT1VOVF9JTlNOX1NJWkU7Ci0JcHJlcGFyZV9mdHJhY2VfcmV0dXJuKGZyb21wYywgc2VsZnBjKTsKKwkvKiBwYXNzaW5nIGZyYW1lIHBvaW50ZXIgdXAgaXMgb3B0aW9uYWwgLS0gc2VlIGJlbG93ICovCisJcHJlcGFyZV9mdHJhY2VfcmV0dXJuKGZyb21wYywgc2VsZnBjLCBmcmFtZV9wb2ludGVyKTsKIAogCS8qIHJlc3RvcmUgYWxsIHN0YXRlIG5lZWRlZCBieSB0aGUgQUJJICovCiB9CiAjZW5kaWYKIAotRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpbXBsZW1lbnQgcHJlcGFyZV9mdHJhY2VfcmV0dXJuKCksIHNpbXBseSBsb29rIGF0Ci10aGUgeDg2IHZlcnNpb24uICBUaGUgb25seSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGllY2UgaW4gaXQgaXMgdGhlIHNldHVwIG9mCitGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGltcGxlbWVudCBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4oKSwgc2ltcGx5IGxvb2sgYXQgdGhlCit4ODYgdmVyc2lvbiAodGhlIGZyYW1lIHBvaW50ZXIgcGFzc2luZyBpcyBvcHRpb25hbDsgc2VlIHRoZSBuZXh0IHNlY3Rpb24gZm9yCittb3JlIGluZm9ybWF0aW9uKS4gIFRoZSBvbmx5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwaWVjZSBpbiBpdCBpcyB0aGUgc2V0dXAgb2YKIHRoZSBmYXVsdCByZWNvdmVyeSB0YWJsZSAodGhlIGFzbSguLi4pIGNvZGUpLiAgVGhlIHJlc3Qgc2hvdWxkIGJlIHRoZSBzYW1lCiBhY3Jvc3MgYXJjaGl0ZWN0dXJlcy4KIApAQCAtMjA1LDYgKzIwOCwyMyBAQAogI2VuZGlmCiAKIAorSEFWRV9GVU5DVElPTl9HUkFQSF9GUF9URVNUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gYXJjaCBtYXkgcGFzcyBpbiBhIHVuaXF1ZSB2YWx1ZSAoZnJhbWUgcG9pbnRlcikgdG8gYm90aCB0aGUgZW50ZXJpbmcgYW5kCitleGl0aW5nIG9mIGEgZnVuY3Rpb24uICBPbiBleGl0LCB0aGUgdmFsdWUgaXMgY29tcGFyZWQgYW5kIGlmIGl0IGRvZXMgbm90CittYXRjaCwgdGhlbiBpdCB3aWxsIHBhbmljIHRoZSBrZXJuZWwuICBUaGlzIGlzIGxhcmdlbHkgYSBzYW5pdHkgY2hlY2sgZm9yIGJhZAorY29kZSBnZW5lcmF0aW9uIHdpdGggZ2NjLiAgSWYgZ2NjIGZvciB5b3VyIHBvcnQgc2FuZWx5IHVwZGF0ZXMgdGhlIGZyYW1lCitwb2ludGVyIHVuZGVyIGRpZmZlcmVudCBvcGl0bWl6YXRpb24gbGV2ZWxzLCB0aGVuIGlnbm9yZSB0aGlzIG9wdGlvbi4KKworSG93ZXZlciwgYWRkaW5nIHN1cHBvcnQgZm9yIGl0IGlzbid0IHRlcnJpYmx5IGRpZmZpY3VsdC4gIEluIHlvdXIgYXNzZW1ibHkgY29kZQordGhhdCBjYWxscyBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4oKSwgcGFzcyB0aGUgZnJhbWUgcG9pbnRlciBhcyB0aGUgM3JkIGFyZ3VtZW50LgorVGhlbiBpbiB0aGUgQyB2ZXJzaW9uIG9mIHRoYXQgZnVuY3Rpb24sIGRvIHdoYXQgdGhlIHg4NiBwb3J0IGRvZXMgYW5kIHBhc3MgaXQKK2Fsb25nIHRvIGZ0cmFjZV9wdXNoX3JldHVybl90cmFjZSgpIGluc3RlYWQgb2YgYSBzdHViIHZhbHVlIG9mIDAuCisKK1NpbWlsYXJseSwgd2hlbiB5b3UgY2FsbCBmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIoKSwgcGFzcyBpdCB0aGUgZnJhbWUgcG9pbnRlci4KKworCiBIQVZFX0ZUUkFDRV9OTUlfRU5URVIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yMTgsMTEgKzIzOCwxMCBAQAogCiBZb3UgbmVlZCB2ZXJ5IGZldyB0aGluZ3MgdG8gZ2V0IHRoZSBzeXNjYWxscyB0cmFjaW5nIGluIGFuIGFyY2guCiAKKy0gU3VwcG9ydCBIQVZFX0FSQ0hfVFJBQ0VIT09LIChzZWUgYXJjaC9LY29uZmlnKS4KIC0gSGF2ZSBhIE5SX3N5c2NhbGxzIHZhcmlhYmxlIGluIDxhc20vdW5pc3RkLmg+IHRoYXQgcHJvdmlkZXMgdGhlIG51bWJlcgogICBvZiBzeXNjYWxscyBzdXBwb3J0ZWQgYnkgdGhlIGFyY2guCi0tIEltcGxlbWVudCBhcmNoX3N5c2NhbGxfYWRkcigpIHRoYXQgcmVzb2x2ZXMgYSBzeXNjYWxsIGFkZHJlc3MgZnJvbSBhCi0gIHN5c2NhbGwgbnVtYmVyLgotLSBTdXBwb3J0IHRoZSBUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UIHRocmVhZCBmbGFncworLSBTdXBwb3J0IHRoZSBUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UIHRocmVhZCBmbGFncy4KIC0gUHV0IHRoZSB0cmFjZV9zeXNfZW50ZXIoKSBhbmQgdHJhY2Vfc3lzX2V4aXQoKSB0cmFjZXBvaW50cyBjYWxscyBmcm9tIHB0cmFjZQogICBpbiB0aGUgcHRyYWNlIHN5c2NhbGxzIHRyYWNpbmcgcGF0aC4KIC0gVGFnIHRoaXMgYXJjaCBhcyBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKaW5kZXggODE3OTY5Mi4uYmFiMzA0MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dApAQCAtMTYyNSw3ICsxNjI1LDcgQEAKIAogICMgZWNobyBzeXNfbmFub3NsZWVwIGhydGltZXJfaW50ZXJydXB0IFwKIAkJPiBzZXRfZnRyYWNlX2ZpbHRlcgotICMgZWNobyBmdHJhY2UgPiBjdXJyZW50X3RyYWNlcgorICMgZWNobyBmdW5jdGlvbiA+IGN1cnJlbnRfdHJhY2VyCiAgIyBlY2hvIDEgPiB0cmFjaW5nX2VuYWJsZWQKICAjIHVzbGVlcCAxCiAgIyBlY2hvIDAgPiB0cmFjaW5nX2VuYWJsZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2Uva3Byb2JldHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKaW5kZXggNDdhYWJlZS4uYTkxMDBiMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKQEAgLTI0LDYgKzI0LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgcFs6W0dSUC9dRVZFTlRdIFNZTUJPTFsrb2Zmc118TUVNQUREUiBbRkVUQ0hBUkdTXQk6IFNldCBhIHByb2JlCiAgIHJbOltHUlAvXUVWRU5UXSBTWU1CT0xbKzBdIFtGRVRDSEFSR1NdCQk6IFNldCBhIHJldHVybiBwcm9iZQorICAtOltHUlAvXUVWRU5UCQkJCQkJOiBDbGVhciBhIHByb2JlCiAKICBHUlAJCTogR3JvdXAgbmFtZS4gSWYgb21pdHRlZCwgdXNlICJrcHJvYmVzIiBmb3IgaXQuCiAgRVZFTlQJCTogRXZlbnQgbmFtZS4gSWYgb21pdHRlZCwgdGhlIGV2ZW50IG5hbWUgaXMgZ2VuZXJhdGVkCkBAIC0zNywxNSArMzgsMTIgQEAKICAgQFNZTVsrfC1vZmZzXQk6IEZldGNoIG1lbW9yeSBhdCBTWU0gK3wtIG9mZnMgKFNZTSBzaG91bGQgYmUgYSBkYXRhIHN5bWJvbCkKICAgJHN0YWNrTgk6IEZldGNoIE50aCBlbnRyeSBvZiBzdGFjayAoTiA+PSAwKQogICAkc3RhY2sJOiBGZXRjaCBzdGFjayBhZGRyZXNzLgotICAkYXJnTgkJOiBGZXRjaCBmdW5jdGlvbiBhcmd1bWVudC4gKE4gPj0gMCkoKikKLSAgJHJldHZhbAk6IEZldGNoIHJldHVybiB2YWx1ZS4oKiopCi0gICt8LW9mZnMoRkVUQ0hBUkcpIDogRmV0Y2ggbWVtb3J5IGF0IEZFVENIQVJHICt8LSBvZmZzIGFkZHJlc3MuKCoqKikKKyAgJHJldHZhbAk6IEZldGNoIHJldHVybiB2YWx1ZS4oKikKKyAgK3wtb2ZmcyhGRVRDSEFSRykgOiBGZXRjaCBtZW1vcnkgYXQgRkVUQ0hBUkcgK3wtIG9mZnMgYWRkcmVzcy4oKiopCiAgIE5BTUU9RkVUQ0hBUkc6IFNldCBOQU1FIGFzIHRoZSBhcmd1bWVudCBuYW1lIG9mIEZFVENIQVJHLgogCi0gICgqKSBhTiBtYXkgbm90IGNvcnJlY3Qgb24gYXNtbGlua2FnZWQgZnVuY3Rpb25zIGFuZCBhdCB0aGUgbWlkZGxlIG9mCi0gICAgICBmdW5jdGlvbiBib2R5LgotICAoKiopIG9ubHkgZm9yIHJldHVybiBwcm9iZS4KLSAgKCoqKikgdGhpcyBpcyB1c2VmdWwgZm9yIGZldGNoaW5nIGEgZmllbGQgb2YgZGF0YSBzdHJ1Y3R1cmVzLgorICAoKikgb25seSBmb3IgcmV0dXJuIHByb2JlLgorICAoKiopIHRoaXMgaXMgdXNlZnVsIGZvciBmZXRjaGluZyBhIGZpZWxkIG9mIGRhdGEgc3RydWN0dXJlcy4KIAogCiBQZXItUHJvYmUgRXZlbnQgRmlsdGVyaW5nCkBAIC04MiwxMyArODAsMTYgQEAKIFRvIGFkZCBhIHByb2JlIGFzIGEgbmV3IGV2ZW50LCB3cml0ZSBhIG5ldyBkZWZpbml0aW9uIHRvIGtwcm9iZV9ldmVudHMKIGFzIGJlbG93LgogCi0gIGVjaG8gcDpteXByb2JlIGRvX3N5c19vcGVuIGRmZD0kYXJnMCBmaWxlbmFtZT0kYXJnMSBmbGFncz0kYXJnMiBtb2RlPSRhcmczID4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9rcHJvYmVfZXZlbnRzCisgIGVjaG8gJ3A6bXlwcm9iZSBkb19zeXNfb3BlbiBkZmQ9JWF4IGZpbGVuYW1lPSVkeCBmbGFncz0lY3ggbW9kZT0rNCgkc3RhY2spJyA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcva3Byb2JlX2V2ZW50cwogCiAgVGhpcyBzZXRzIGEga3Byb2JlIG9uIHRoZSB0b3Agb2YgZG9fc3lzX29wZW4oKSBmdW5jdGlvbiB3aXRoIHJlY29yZGluZwotMXN0IHRvIDR0aCBhcmd1bWVudHMgYXMgIm15cHJvYmUiIGV2ZW50LiBBcyB0aGlzIGV4YW1wbGUgc2hvd3MsIHVzZXJzIGNhbgotY2hvb3NlIG1vcmUgZmFtaWxpYXIgbmFtZXMgZm9yIGVhY2ggYXJndW1lbnRzLgorMXN0IHRvIDR0aCBhcmd1bWVudHMgYXMgIm15cHJvYmUiIGV2ZW50LiBOb3RlLCB3aGljaCByZWdpc3Rlci9zdGFjayBlbnRyeSBpcworYXNzaWduZWQgdG8gZWFjaCBmdW5jdGlvbiBhcmd1bWVudCBkZXBlbmRzIG9uIGFyY2gtc3BlY2lmaWMgQUJJLiBJZiB5b3UgdW5zdXJlCit0aGUgQUJJLCBwbGVhc2UgdHJ5IHRvIHVzZSBwcm9iZSBzdWJjb21tYW5kIG9mIHBlcmYtdG9vbHMgKHlvdSBjYW4gZmluZCBpdAordW5kZXIgdG9vbHMvcGVyZi8pLgorQXMgdGhpcyBleGFtcGxlIHNob3dzLCB1c2VycyBjYW4gY2hvb3NlIG1vcmUgZmFtaWxpYXIgbmFtZXMgZm9yIGVhY2ggYXJndW1lbnRzLgogCi0gIGVjaG8gcjpteXJldHByb2JlIGRvX3N5c19vcGVuICRyZXR2YWwgPj4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9rcHJvYmVfZXZlbnRzCisgIGVjaG8gJ3I6bXlyZXRwcm9iZSBkb19zeXNfb3BlbiAkcmV0dmFsJyA+PiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2twcm9iZV9ldmVudHMKIAogIFRoaXMgc2V0cyBhIGtyZXRwcm9iZSBvbiB0aGUgcmV0dXJuIHBvaW50IG9mIGRvX3N5c19vcGVuKCkgZnVuY3Rpb24gd2l0aAogcmVjb3JkaW5nIHJldHVybiB2YWx1ZSBhcyAibXlyZXRwcm9iZSIgZXZlbnQuCkBAIC05NywyMyArOTgsMjQgQEAKIAogICBjYXQgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMva3Byb2Jlcy9teXByb2JlL2Zvcm1hdAogbmFtZTogbXlwcm9iZQotSUQ6IDc1CitJRDogNzgwCiBmb3JtYXQ6Ci0JZmllbGQ6dW5zaWduZWQgc2hvcnQgY29tbW9uX3R5cGU7CW9mZnNldDowOwlzaXplOjI7Ci0JZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7CW9mZnNldDoyOwlzaXplOjE7Ci0JZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fcHJlZW1wdF9jb3VudDsJb2Zmc2V0OjM7CXNpemU6MTsKLQlmaWVsZDppbnQgY29tbW9uX3BpZDsJb2Zmc2V0OjQ7CXNpemU6NDsKLQlmaWVsZDppbnQgY29tbW9uX3RnaWQ7CW9mZnNldDo4OwlzaXplOjQ7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIHNob3J0IGNvbW1vbl90eXBlOyAgICAgICBvZmZzZXQ6MDsgICAgICAgc2l6ZToyOyBzaWduZWQ6MDsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7ICAgICAgIG9mZnNldDoyOyAgICAgICBzaXplOjE7IHNpZ25lZDowOworICAgICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OyAgICAgICBvZmZzZXQ6Mzsgc2l6ZToxO3NpZ25lZDowOworICAgICAgICBmaWVsZDppbnQgY29tbW9uX3BpZDsgICBvZmZzZXQ6NDsgICAgICAgc2l6ZTo0OyBzaWduZWQ6MTsKKyAgICAgICAgZmllbGQ6aW50IGNvbW1vbl9sb2NrX2RlcHRoOyAgICBvZmZzZXQ6ODsgICAgICAgc2l6ZTo0OyBzaWduZWQ6MTsKIAotCWZpZWxkOiB1bnNpZ25lZCBsb25nIGlwOwlvZmZzZXQ6MTY7dHNpemU6ODsKLQlmaWVsZDogaW50IG5hcmdzOwlvZmZzZXQ6MjQ7dHNpemU6NDsKLQlmaWVsZDogdW5zaWduZWQgbG9uZyBkZmQ7CW9mZnNldDozMjt0c2l6ZTo4OwotCWZpZWxkOiB1bnNpZ25lZCBsb25nIGZpbGVuYW1lOwlvZmZzZXQ6NDA7dHNpemU6ODsKLQlmaWVsZDogdW5zaWduZWQgbG9uZyBmbGFnczsJb2Zmc2V0OjQ4O3RzaXplOjg7Ci0JZmllbGQ6IHVuc2lnbmVkIGxvbmcgbW9kZTsJb2Zmc2V0OjU2O3RzaXplOjg7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgX19wcm9iZV9pcDsgb2Zmc2V0OjEyOyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CisgICAgICAgIGZpZWxkOmludCBfX3Byb2JlX25hcmdzOyAgICAgICAgb2Zmc2V0OjE2OyAgICAgIHNpemU6NDsgc2lnbmVkOjE7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgZGZkOyAgICAgICAgb2Zmc2V0OjIwOyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgZmlsZW5hbWU7ICAgb2Zmc2V0OjI0OyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgZmxhZ3M7ICAgICAgb2Zmc2V0OjI4OyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgbW9kZTsgICAgICAgb2Zmc2V0OjMyOyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CiAKLXByaW50IGZtdDogIiglbHgpIGRmZD0lbHggZmlsZW5hbWU9JWx4IGZsYWdzPSVseCBtb2RlPSVseCIsIFJFQy0+aXAsIFJFQy0+ZGZkLCBSRUMtPmZpbGVuYW1lLCBSRUMtPmZsYWdzLCBSRUMtPm1vZGUKIAorcHJpbnQgZm10OiAiKCVseCkgZGZkPSVseCBmaWxlbmFtZT0lbHggZmxhZ3M9JWx4IG1vZGU9JWx4IiwgUkVDLT5fX3Byb2JlX2lwLAorUkVDLT5kZmQsIFJFQy0+ZmlsZW5hbWUsIFJFQy0+ZmxhZ3MsIFJFQy0+bW9kZQogCiAgWW91IGNhbiBzZWUgdGhhdCB0aGUgZXZlbnQgaGFzIDQgYXJndW1lbnRzIGFzIGluIHRoZSBleHByZXNzaW9ucyB5b3Ugc3BlY2lmaWVkLgogCkBAIC0xMjEsNiArMTIzLDEyIEBACiAKICBUaGlzIGNsZWFycyBhbGwgcHJvYmUgcG9pbnRzLgogCisgT3IsCisKKyAgZWNobyAtOm15cHJvYmUgPj4ga3Byb2JlX2V2ZW50cworCisgVGhpcyBjbGVhcnMgcHJvYmUgcG9pbnRzIHNlbGVjdGl2ZWx5LgorCiAgUmlnaHQgYWZ0ZXIgZGVmaW5pdGlvbiwgZWFjaCBldmVudCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBGb3IgdHJhY2luZyB0aGVzZQogZXZlbnRzLCB5b3UgbmVlZCB0byBlbmFibGUgaXQuCiAKQEAgLTE0Niw0ICsxNTQsMyBAQAogcmV0dXJucyBmcm9tIFNZTUJPTChlLmcuICJzeXNfb3BlbisweDFiLzB4MWQgPC0gZG9fc3lzX29wZW4iIG1lYW5zIGtlcm5lbAogcmV0dXJucyBmcm9tIGRvX3N5c19vcGVuIHRvIHN5c19vcGVuKzB4MWIpLgogCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NSBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQppbmRleCA3NTM5ZThmLi4xNmNhMDMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CkBAIC0yNiwzICsyNiw0IEBACiAgMjUgLT4gQ29tcHJvIFZpZGVvTWF0ZSBFODAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxODU4OmU4MDBdCiAgMjYgLT4gSGF1cHBhdWdlIFdpblRWLUhWUjEyOTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOjg1NTFdCiAgMjcgLT4gTXlnaWNhIFg4NTU4IFBSTyBETUItVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNGYxOjg1NzhdCisgMjggLT4gTEVBRFRFSyBXaW5GYXN0IFB4VFYxMjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDdkOjZmMjJdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKaW5kZXggZmNlMWU3ZS4uYjRhNzY3MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNApAQCAtMTc0LDMgKzE3NCw0IEBACiAxNzMgLT4gWm9saWQgSHlicmlkIFRWIFR1bmVyIFBDSSAgICAgICAgICAgICAgICBbMTEzMToyMDA0XQogMTc0IC0+IEFzdXMgRXVyb3BhIEh5YnJpZCBPRU0gICAgICAgICAgICAgICAgICAgWzEwNDM6NDg0N10KIDE3NSAtPiBMZWFkdGVrIFdpbmZhc3QgRFRWMTAwMFMgICAgICAgICAgICAgICAgIFsxMDdkOjY2NTVdCisxNzYgLT4gQmVob2xkZXIgQmVob2xkVFYgNTA1IFJEUyAgICAgICAgICAgICAgICBbMDAwMDo1MDUxXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lciBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKaW5kZXggZTBkMjk4Zi4uOWIyZTBkZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCkBAIC04MSwzICs4MSw0IEBACiB0dW5lcj04MSAtIFBhcnRzbmljIChEYWV3b28pIFBUSS01TkYwNQogdHVuZXI9ODIgLSBQaGlsaXBzIENVMTIxNkwKIHR1bmVyPTgzIC0gTlhQIFREQTE4MjcxCit0dW5lcj04NCAtIFNvbnkgQlRGLVB4bjAxWgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUudGxnMjMwMCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLnRsZzIzMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2Y2NiOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLnRsZzIzMDAKQEAgLTAsMCArMSw0NyBAQAordGxnMjMwMCByZWxlYXNlIG5vdGVzCis9PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIGEgdjRsMi9kdmIgZGV2aWNlIGRyaXZlciBmb3IgdGhlIHRsZzIzMDAgY2hpcC4KKworCitjdXJyZW50IHN0YXR1cworPT09PT09PT09PT09PT0KKwordmlkZW8KKwktIHN1cHBvcnQgbW1hcCBhbmQgcmVhZCgpLihubyBvdmVybGF5KQorCithdWRpbworCS0gVGhlIGRyaXZlciB3aWxsIHJlZ2lzdGVyIGEgQUxTQSBjYXJkIGZvciB0aGUgYXVkaW8gaW5wdXQuCisKK3ZiaQorCS0gV29ya3MgZm9yIGFsbW9zdCBUViBub3Jtcy4KKworZHZiLXQKKwktIHdvcmtzIGZvciBEVkItVAorCitGTQorCS0gV29ya3MgZm9yIHJhZGlvLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RFU1RFRCBBUFBMSUNBVElPTlM6CisKKy1WTEMxLjAuNCB0ZXN0IHRoZSB2aWRlbyBhbmQgZHZiLiBUaGUgR1VJIGlzIGZyaWVuZGx5IHRvIHVzZS4KKworLU1wbGF5ZXIgdGVzdCB0aGUgdmlkZW8uCisKKy1NcGxheWVyIHRlc3QgdGhlIEZNLiBUaGUgbXBsYXllciBzaG91bGQgYmUgY29tcGlsZWQgd2l0aCAtLWVuYWJsZS1yYWRpbyBhbmQKKwkgLS1lbmFibGUtcmFkaW8tY2FwdHVyZS4KKwlUaGUgY29tbWFuZCBydW5zIGFzIHRoaXMoVGhlIGFsc2EgYXVkaW8gcmVnaXN0ZXJzIHRvIGNhcmQgMSk6CisJI21wbGF5ZXIgcmFkaW86Ly8xMDMuNy9jYXB0dXJlLyAtcmFkaW8gYWRldmljZT1odz0xLDA6YXJhdGU9NDgwMDAgXAorCQktcmF3YXVkaW8gcmF0ZT00ODAwMDpjaGFubmVscz0yCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorS05PV04gUFJPQkxFTVM6CithYm91dCBwcmVlbXBoYXNpczoKKwlZb3UgY2FuIHNldCB0aGUgcHJlZW1waGFzaXMgZm9yIHJhZGlvIGJ5IHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKwkjdjRsMi1jdGwgLWQgL2Rldi9yYWRpbzAgLS1zZXQtY3RybD1wcmVfZW1waGFzaXNfc2V0dGluZ3M9MQorCisJInByZV9lbXBoYXNpc19zZXR0aW5ncz0xIiBtZWFucyB0aGF0IHlvdSBzZWxlY3QgdGhlIDUwdXMuIElmIHlvdSB3YW50CisJdG8gc2VsZWN0IHRoZSA3NXVzLCBwbGVhc2UgdXNlICJwcmVfZW1waGFzaXNfc2V0dGluZ3M9MiIKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CmluZGV4IDE4MDBhNjIuLjE4MWI5ZTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CkBAIC00Miw2ICs0Miw3IEBACiBvdjUxOQkJMDQxZTo0MDY3CUNyZWF0aXZlIExpdmUhIENhbSBWaWRlbyBJTSAoVkYwMzUwKQogb3Y1MTkJCTA0MWU6NDA2OAlDcmVhdGl2ZSBMaXZlISBWSVNUQSBWRjA0NzAKIHNwY2E1NjEJCTA0NTg6NzAwNAlHZW5pdXMgVmlkZW9DQU0gRXhwcmVzcyBWMgorc245YzIwMjgJMDQ1ODo3MDA1CUdlbml1cyBTbWFydCAzMDAsIHZlcnNpb24gMgogc3VucGx1cwkJMDQ1ODo3MDA2CUdlbml1cyBEc2MgMS4zIFNtYXJ0CiB6YzN4eAkJMDQ1ODo3MDA3CUdlbml1cyBWaWRlb0NhbSBWMgogemMzeHgJCTA0NTg6NzAwYwlHZW5pdXMgVmlkZW9DYW0gVjMKQEAgLTEwOSw2ICsxMTAsNyBAQAogc3VucGx1cwkJMDRhNTozMDA4CUJlbnEgREMgMTUwMAogc3VucGx1cwkJMDRhNTozMDBhCUJlbnEgREMgMzQxMAogc3BjYTUwMAkJMDRhNTozMDBjCUJlbnEgREMgMTAxNgorYmVucQkJMDRhNTozMDM1CUJlbnEgREMgRTMwMAogZmluZXBpeAkJMDRjYjowMTA0CUZ1amlmaWxtIEZpbmVQaXggNDgwMAogZmluZXBpeAkJMDRjYjowMTA5CUZ1amlmaWxtIEZpbmVQaXggQTIwMgogZmluZXBpeAkJMDRjYjowMTBiCUZ1amlmaWxtIEZpbmVQaXggQTIwMwpAQCAtMTQyLDYgKzE0NCw3IEBACiBzcGNhNTAwCQkwNGZjOjczMzMJUGFsbVBpeERDODUKIHN1bnBsdXMJCTA0ZmM6ZmZmZglQdXJlIERpZ2l0YWxEYWtvdGEKIHNwY2E1MDEJCTA1MDY6MDBkZgkzQ29tIEhvbWVDb25uZWN0IExpdGUKK3N1bnBsdXMJCTA1MmI6MTUwNwlNZWdhcGl4ZWwgNSBQcmV0ZWMgREMtMTAwNwogc3VucGx1cwkJMDUyYjoxNTEzCU1lZ2FwaXggVjQKIHN1bnBsdXMJCTA1MmI6MTgwMwlNZWdhSW1hZ2UgVkkKIHR2ODUzMgkJMDU0NTo4MDhiCVZlbyBTdGluZ3JheQpAQCAtMTUxLDYgKzE1NCw3IEBACiBzdW5wbHVzCQkwNTQ2OjMyNzMJUG9sYXJvaWQgUERDMjAzMAogb3Y1MTkJCTA1NGM6MDE1NAlTb25ueSB0b3k0CiBvdjUxOQkJMDU0YzowMTU1CVNvbm55IHRveTUKK2NwaWExCQkwNTUzOjAwMDIJQ1BJQSBDUGlBICh2ZXJzaW9uMSkgYmFzZWQgY2FtZXJhcwogemMzeHgJCTA1NWY6YzAwNQlNdXN0ZWsgV2NhbTMwMEEKIHNwY2E1MDAJCTA1NWY6YzIwMAlNdXN0ZWsgR3NtYXJ0IDMwMAogc3VucGx1cwkJMDU1ZjpjMjExCUtvd2EgQnM4ODhlIE1pY3JvY2FtZXJhCkBAIC0xODgsOCArMTkyLDcgQEAKIHNwY2E1MDAJCTA2YmU6MDgwMAlPcHRpbWVkaWEKIHN1bnBsdXMJCTA2ZDY6MDAzMQlUcnVzdCA2MTAgTENEIFBvd2VyQ0BtIFpvb20KIHNwY2E1MDYJCTA2ZTE6YTE5MAlBRFMgSW5zdGFudCBWQ0QKLW92NTM0CQkwNmY4OjMwMDIJSGVyY3VsZXMgQmxvZyBXZWJjYW0KLW92NTM0CQkwNmY4OjMwMDMJSGVyY3VsZXMgRHVhbHBpeCBIRCBXZWJsb2cKK292NTM0XzkJCTA2Zjg6MzAwMwlIZXJjdWxlcyBEdWFscGl4IEhEIFdlYmxvZwogc29uaXhqCQkwNmY4OjMwMDQJSGVyY3VsZXMgQ2xhc3NpYyBTaWx2ZXIKIHNvbml4agkJMDZmODozMDA4CUhlcmN1bGVzIERlbHV4ZSBPcHRpY2FsIEdsYXNzCiBwYWM3MzAyCQkwNmY4OjMwMDkJSGVyY3VsZXMgQ2xhc3NpYyBMaW5rCkBAIC0yMDQsNiArMjA3LDcgQEAKIHN1bnBsdXMJCTA3MzM6MzI2MQlDb25jb3JkIDMwNDUgc3BjYTUzNmEKIHN1bnBsdXMJCTA3MzM6MzI4MQlDeWJlcnBpeCBTNTUwVgogc3BjYTUwNgkJMDczNDowNDNiCTNEZU1vbiBVU0IgQ2FwdHVyZSBha2EKK2NwaWExCQkwODEzOjAwMDEJUVgzIGNhbWVyYQogb3Y1MTkJCTA4MTM6MDAwMglEdWFsIE1vZGUgVVNCIENhbWVyYSBQbHVzCiBzcGNhNTAwCQkwODRkOjAwMDMJRC1MaW5rIERTQy0zNTAKIHNwY2E1MDAJCTA4Y2E6MDEwMwlBaXB0ZWsgUG9ja2V0RFYKQEAgLTIyNSw3ICsyMjksOCBAQAogc3VucGx1cwkJMDhjYToyMDYwCUFpcHRlayBQb2NrZXREVjUzMDAKIHR2ODUzMgkJMDkyMzowMTBmCUlDTTUzMiBjYW1zCiBtYXJzCQkwOTNhOjA1MGYJTWFycy1TZW1pIFBjLUNhbWVyYQotbXI5NzMxMGEJMDkzYTowMTBmCVNha2FyIERpZ2l0YWwgbm8uIDc3Mzc5Cittcjk3MzEwYQkwOTNhOjAxMGUJQWxsIGtub3duIENJRiBjYW1zIHdpdGggdGhpcyBJRAorbXI5NzMxMGEJMDkzYTowMTBmCUFsbCBrbm93biBWR0EgY2FtcyB3aXRoIHRoaXMgSUQKIHBhYzIwNwkJMDkzYToyNDYwCVF0ZWMgV2ViY2FtIDEwMAogcGFjMjA3CQkwOTNhOjI0NjEJSFAgV2ViY2FtCiBwYWMyMDcJCTA5M2E6MjQ2MwlQaGlsaXBzIFNQQyAyMjAgTkMKQEAgLTMwMiw2ICszMDcsNyBAQAogc29uaXhqCQkwYzQ1OjYxM2MJU29uaXggUGNjYW0xNjgKIHNvbml4agkJMGM0NTo2MTQzCVNvbml4IFBjY2FtMTY4CiBzb25peGoJCTBjNDU6NjE0OAlEaWdpdHVzIERBLTcwODExL1pTTUMgVVNCIFBDIENhbWVyYSBaUzIxMS9NaWNyb2RpYQorc29uaXhqCQkwYzQ1OjYxNGEJRnJvbnRlY2ggRS1DY2FtIChKSUwtMjIyNSkKIHNuOWMyMHgJCTBjNDU6NjI0MAlQQyBDYW1lcmEgKFNOOUMyMDEgKyBNVDlNMDAxKQogc245YzIweAkJMGM0NTo2MjQyCVBDIENhbWVyYSAoU045QzIwMSArIE1UOU0xMTEpCiBzbjljMjB4CQkwYzQ1OjYyNDgJUEMgQ2FtZXJhIChTTjlDMjAxICsgT1Y5NjU1KQpAQCAtMzI0LDYgKzMzMCwxMCBAQAogc245YzIweAkJMGM0NTo2MmIzCVBDIENhbWVyYSAoU045QzIwMiArIE9WOTY1NSkKIHNuOWMyMHgJCTBjNDU6NjJiYglQQyBDYW1lcmEgKFNOOUMyMDIgKyBPVjc2NjApCiBzbjljMjB4CQkwYzQ1OjYyYmMJUEMgQ2FtZXJhIChTTjlDMjAyICsgSFY3MTMxUikKK3NuOWMyMDI4CTBjNDU6ODAwMQlXaWxkIFBsYW5ldCBEaWdpdGFsIFNweSBDYW1lcmEKK3NuOWMyMDI4CTBjNDU6ODAwMwlTYWthciAjMTExOTksICM2NjM3eCwgIzY3NDgwIGtleWNoYWluIGNhbXMKK3NuOWMyMDI4CTBjNDU6ODAwOAlNaW5pLVNob3R6IG1zLTM1MAorc245YzIwMjgJMGM0NTo4MDBhCVZpdml0YXIgVml2aWNhbSAzMzUwQgogc3VucGx1cwkJMGQ2NDowMzAzCVN1bnBsdXMgRmFzaGlvbkNhbSBEWEcKIG92NTE5CQkwZTk2OmMwMDEJVFJVU1QgMzgwIFVTQjIgU1BBQ0VDQE0KIGV0b21zCQkxMDJjOjYxNTEJUWNhbSBTYW5naGEgQ0lGCkBAIC0zNDEsMTAgKzM1MSwxMSBAQAogdDYxMwkJMTdhMTowMTI4CVRBU0NPUlAgSlBFRyBXZWJjYW0sIE5HUyBDeWNsb3BzCiB2YzAzMngJCTE3ZWY6NDgwMglMZW5vdm8gVmMwMzIzK01JMTMxMF9TT0MKIHBhYzIwNwkJMjAwMTpmMTE1CUQtTGluayBEU0ItQzEyMAotc3E5MDVjCQkyNzcwOjkwNTAJc3E5MDVjCi1zcTkwNWMJCTI3NzA6OTA1YwlEdWFsQ2FtZXJhCi1zcTkwNQkJMjc3MDo5MTIwCUFyZ3VzIERpZ2l0YWwgQ2FtZXJhIERDMTUxMgotc3E5MDVjCQkyNzcwOjkxM2QJc3E5MDVjCitzcTkwNWMJCTI3NzA6OTA1MAlEaXNuZXkgcGl4IG1pY3JvIChDSUYpCitzcTkwNWMJCTI3NzA6OTA1MglEaXNuZXkgcGl4IG1pY3JvIDIgKFZHQSkKK3NxOTA1YwkJMjc3MDo5MDVjCUFsbCAxMSBrbm93biBjYW1lcmFzIHdpdGggdGhpcyBJRAorc3E5MDUJCTI3NzA6OTEyMAlBbGwgMjQga25vd24gY2FtZXJhcyB3aXRoIHRoaXMgSUQKK3NxOTA1YwkJMjc3MDo5MTNkCUFsbCA0IGtub3duIGNhbWVyYXMgd2l0aCB0aGlzIElECiBzcGNhNTAwCQkyODk5OjAxMmMJVG9wdHJvIEluZHVzdHJpYWwKIG92NTE5CQk4MDIwOmVmMDQJb3Y1MTkKIHNwY2E1MDgJCTgwODY6MDExMAlJbnRlbCBFYXN5IFBDIENhbWVyYQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dAppbmRleCA3NGQ2NzdjLi41MTU1NzAwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dApAQCAtNTk5LDk5ICs1OTksMTMgQEAKIHZpZGVvIGJ1ZmZlciBoZWxwZXIgZnVuY3Rpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgdjRsMiBjb3JlIEFQSSBwcm92aWRlcyBhIHN0YW5kYXJkIG1ldGhvZCBmb3IgZGVhbGluZyB3aXRoIHZpZGVvCi1idWZmZXJzLiBUaG9zZSBtZXRob2RzIGFsbG93IGEgZHJpdmVyIHRvIGltcGxlbWVudCByZWFkKCksIG1tYXAoKSBhbmQKLW92ZXJsYXkoKSBvbiBhIGNvbnNpc3RlbnQgd2F5LgorVGhlIHY0bDIgY29yZSBBUEkgcHJvdmlkZXMgYSBzZXQgb2Ygc3RhbmRhcmQgbWV0aG9kcyAoY2FsbGVkICJ2aWRlb2J1ZiIpCitmb3IgZGVhbGluZyB3aXRoIHZpZGVvIGJ1ZmZlcnMuIFRob3NlIG1ldGhvZHMgYWxsb3cgYSBkcml2ZXIgdG8gaW1wbGVtZW50CityZWFkKCksIG1tYXAoKSBhbmQgb3ZlcmxheSgpIGluIGEgY29uc2lzdGVudCB3YXkuICBUaGVyZSBhcmUgY3VycmVudGx5CittZXRob2RzIGZvciB1c2luZyB2aWRlbyBidWZmZXJzIG9uIGRldmljZXMgdGhhdCBzdXBwb3J0cyBETUEgd2l0aAorc2NhdHRlci9nYXRoZXIgbWV0aG9kICh2aWRlb2J1Zi1kbWEtc2cpLCBETUEgd2l0aCBsaW5lYXIgYWNjZXNzCisodmlkZW9idWYtZG1hLWNvbnRpZyksIGFuZCB2bWFsbG9jZWQgYnVmZmVycywgbW9zdGx5IHVzZWQgb24gVVNCIGRyaXZlcnMKKyh2aWRlb2J1Zi12bWFsbG9jKS4KIAotVGhlcmUgYXJlIGN1cnJlbnRseSBtZXRob2RzIGZvciB1c2luZyB2aWRlbyBidWZmZXJzIG9uIGRldmljZXMgdGhhdAotc3VwcG9ydHMgRE1BIHdpdGggc2NhdHRlci9nYXRoZXIgbWV0aG9kICh2aWRlb2J1Zi1kbWEtc2cpLCBETUEgd2l0aAotbGluZWFyIGFjY2VzcyAodmlkZW9idWYtZG1hLWNvbnRpZyksIGFuZCB2bWFsbG9jZWQgYnVmZmVycywgbW9zdGx5Ci11c2VkIG9uIFVTQiBkcml2ZXJzICh2aWRlb2J1Zi12bWFsbG9jKS4KLQotQW55IGRyaXZlciB1c2luZyB2aWRlb2J1ZiBzaG91bGQgcHJvdmlkZSBvcGVyYXRpb25zIChjYWxsYmFja3MpIGZvcgotZm91ciBoYW5kbGVyczoKLQotb3BzLT5idWZfc2V0dXAgICAtIGNhbGN1bGF0ZXMgdGhlIHNpemUgb2YgdGhlIHZpZGVvIGJ1ZmZlcnMgYW5kIGF2b2lkIHRoZXkKLQkJICAgdG8gd2FzdGUgbW9yZSB0aGFuIHNvbWUgbWF4aW11bSBsaW1pdCBvZiBSQU07Ci1vcHMtPmJ1Zl9wcmVwYXJlIC0gZmlsbHMgdGhlIHZpZGVvIGJ1ZmZlciBzdHJ1Y3RzIGFuZCBjYWxscwotCQkgICB2aWRlb2J1Zl9pb2xvY2soKSB0byBhbGxvYyBhbmQgcHJlcGFyZSBtbWFwZWQgbWVtb3J5Owotb3BzLT5idWZfcXVldWUgICAtIGFkdmljZXMgdGhlIGRyaXZlciB0aGF0IGFub3RoZXIgYnVmZmVyIHdlcmUKLQkJICAgcmVxdWVzdGVkIChieSByZWFkKCkgb3IgYnkgUUJVRik7Ci1vcHMtPmJ1Zl9yZWxlYXNlIC0gZnJlZXMgYW55IGJ1ZmZlciB0aGF0IHdlcmUgYWxsb2NhdGVkLgotCi1JbiBvcmRlciB0byB1c2UgaXQsIHRoZSBkcml2ZXIgbmVlZCB0byBoYXZlIGEgY29kZSAoZ2VuZXJhbGx5IGNhbGxlZCBhdAotaW50ZXJydXB0IGNvbnRleHQpIHRoYXQgd2lsbCBwcm9wZXJseSBoYW5kbGUgdGhlIGJ1ZmZlciByZXF1ZXN0IGxpc3RzLAotYW5ub3VuY2luZyB0aGF0IGEgbmV3IGJ1ZmZlciB3ZXJlIGZpbGxlZC4KLQotVGhlIGlycSBoYW5kbGluZyBjb2RlIHNob3VsZCBoYW5kbGUgdGhlIHZpZGVvYnVmIHRhc2sgbGlzdHMsIGluIG9yZGVyCi10byBhZHZpY2UgdmlkZW9idWYgdGhhdCBhIG5ldyBmcmFtZSB3ZXJlIGZpbGxlZCwgaW4gb3JkZXIgdG8gaG9ub3IgdG8gYQotcmVxdWVzdC4gVGhlIGNvZGUgaXMgZ2VuZXJhbGx5IGxpa2UgdGhpcyBvbmU6Ci0JaWYgKGxpc3RfZW1wdHkoJmRtYV9xLT5hY3RpdmUpKQotCQlyZXR1cm47Ci0KLQlidWYgPSBsaXN0X2VudHJ5KGRtYV9xLT5hY3RpdmUubmV4dCwgc3RydWN0IHZidWZmZXIsIHZiLnF1ZXVlKTsKLQotCWlmICghd2FpdHF1ZXVlX2FjdGl2ZSgmYnVmLT52Yi5kb25lKSkKLQkJcmV0dXJuOwotCi0JLyogU29tZSBsb2dpYyB0byBoYW5kbGUgdGhlIGJ1ZiBtYXkgYmUgbmVlZGVkIGhlcmUgKi8KLQotCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKLQlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOwotCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7Ci0KLVRob3NlIGFyZSB0aGUgdmlkZW9idWZmZXIgZnVuY3Rpb25zIHVzZWQgb24gZHJpdmVycywgaW1wbGVtZW50ZWQgb24KLXZpZGVvYnVmLWNvcmU6Ci0KLS0gVmlkZW9idWYgaW5pdCBmdW5jdGlvbnMKLSAgdmlkZW9idWZfcXVldWVfc2dfaW5pdCgpCi0gICAgICBJbml0aWFsaXplcyB0aGUgdmlkZW9idWYgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlCi0gICAgICBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB2aWRlb2J1ZiBmdW5jdGlvbiBvbiBkcml2ZXJzIHRoYXQgdXNlcyBETUEKLSAgICAgIFNjYXR0ZXIvR2F0aGVyIGJ1ZmZlcnMuCi0KLSAgdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0Ci0gICAgICBJbml0aWFsaXplcyB0aGUgdmlkZW9idWYgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlCi0gICAgICBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB2aWRlb2J1ZiBmdW5jdGlvbiBvbiBkcml2ZXJzIHRoYXQgbmVlZCBETUEKLSAgICAgIGNvbnRpZ3VvdXMgYnVmZmVycy4KLQotICB2aWRlb2J1Zl9xdWV1ZV92bWFsbG9jX2luaXQoKQotICAgICAgSW5pdGlhbGl6ZXMgdGhlIHZpZGVvYnVmIGluZnJhc3RydWN0dXJlLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZQotICAgICAgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgdmlkZW9idWYgZnVuY3Rpb24gb24gVVNCIChhbmQgb3RoZXIgZHJpdmVycykKLSAgICAgIHRoYXQgbmVlZCBhIHZtYWxsb2NlZCB0eXBlIG9mIHZpZGVvYnVmLgotCi0tIHZpZGVvYnVmX2lvbG9jaygpCi0gIFByZXBhcmVzIHRoZSB2aWRlb2J1ZiBtZW1vcnkgZm9yIHRoZSBwcm9wZXIgbWV0aG9kIChyZWFkLCBtbWFwLCBvdmVybGF5KS4KLQotLSB2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCkKLSAgQ2hlY2tzIGlmIGEgdmlkZW9idWYgaXMgc3RyZWFtaW5nLgotCi0tIHZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgpCi0gIFN0b3BzIHZpZGVvIGhhbmRsaW5nLgotCi0tIHZpZGVvYnVmX21tYXBfZnJlZSgpCi0gIGZyZWVzIG1tYXAgYnVmZmVycy4KLQotLSB2aWRlb2J1Zl9zdG9wKCkKLSAgU3RvcHMgdmlkZW8gaGFuZGxpbmcsIGVuZHMgbW1hcCBhbmQgZnJlZXMgbW1hcCBhbmQgb3RoZXIgYnVmZmVycy4KLQotLSBWNEwyIGFwaSBmdW5jdGlvbnMuIFRob3NlIGZ1bmN0aW9ucyBjb3JyZXNwb25kIHRvIFZJRElPQ19mb28gaW9jdGxzOgotICAgdmlkZW9idWZfcmVxYnVmcygpLCB2aWRlb2J1Zl9xdWVyeWJ1ZigpLCB2aWRlb2J1Zl9xYnVmKCksCi0gICB2aWRlb2J1Zl9kcWJ1ZigpLCB2aWRlb2J1Zl9zdHJlYW1vbigpLCB2aWRlb2J1Zl9zdHJlYW1vZmYoKS4KLQotLSBWNEwxIGFwaSBmdW5jdGlvbiAoY29ycmVzcG9uZHMgdG8gVklESU9DTUJVRiBpb2N0bCk6Ci0gICB2aWRlb2J1Zl9jZ21idWYoKQotICAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHByb3ZpZGUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIFY0TDEKLSAgICAgIEFQSS4KLQotLSBTb21lIGhlbHAgZnVuY3Rpb25zIGZvciByZWFkKCkvcG9sbCgpIG9wZXJhdGlvbnM6Ci0gICB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgpCi0gICAgICBGb3IgY29udGludW91cyBzdHJlYW0gcmVhZCgpCi0gICB2aWRlb2J1Zl9yZWFkX29uZSgpCi0gICAgICBGb3Igc25hcHNob3QgcmVhZCgpCi0gICB2aWRlb2J1Zl9wb2xsX3N0cmVhbSgpCi0gICAgICBwb2xsaW5nIGhlbHAgZnVuY3Rpb24KLQotVGhlIGJldHRlciB3YXkgdG8gdW5kZXJzdGFuZCBpdCBpcyB0byB0YWtlIGEgbG9vayBhdCB2aXZpIGRyaXZlci4gT25lCi1vZiB0aGUgbWFpbiByZWFzb25zIGZvciB2aXZpIGlzIHRvIGJlIGEgdmlkZW9idWYgdXNhZ2UgZXhhbXBsZS4gdGhlCi12aXZpX3RocmVhZF90aWNrKCkgZG9lcyB0aGUgdGFzayB0aGF0IHRoZSBJUlEgY2FsbGJhY2sgd291bGQgZG8gb24gUENJCi1kcml2ZXJzIChvciB0aGUgaXJxIGNhbGxiYWNrIG9uIFVTQikuCitQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvdmlkZW9idWYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93Cit0byB1c2UgdGhlIHZpZGVvYnVmIGxheWVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92aWRlb2J1ZiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdmlkZW9idWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdhMWY5YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdmlkZW9idWYKQEAgLTAsMCArMSwzNjAgQEAKK0FuIGludHJvZHVjdGlvbiB0byB0aGUgdmlkZW9idWYgbGF5ZXIKK0pvbmF0aGFuIENvcmJldCA8Y29yYmV0QGx3bi5uZXQ+CitDdXJyZW50IGFzIG9mIDIuNi4zMworCitUaGUgdmlkZW9idWYgbGF5ZXIgZnVuY3Rpb25zIGFzIGEgc29ydCBvZiBnbHVlIGxheWVyIGJldHdlZW4gYSBWNEwyIGRyaXZlcgorYW5kIHVzZXIgc3BhY2UuICBJdCBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIGJ1ZmZlcnMgZm9yCit0aGUgc3RvcmFnZSBvZiB2aWRlbyBmcmFtZXMuICBUaGVyZSBpcyBhIHNldCBvZiBmdW5jdGlvbnMgd2hpY2ggY2FuIGJlIHVzZWQKK3RvIGltcGxlbWVudCBtYW55IG9mIHRoZSBzdGFuZGFyZCBQT1NJWCBJL08gc3lzdGVtIGNhbGxzLCBpbmNsdWRpbmcgcmVhZCgpLAorcG9sbCgpLCBhbmQsIGhhcHBpbHksIG1tYXAoKS4gIEFub3RoZXIgc2V0IG9mIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCB0bworaW1wbGVtZW50IHRoZSBidWxrIG9mIHRoZSBWNEwyIGlvY3RsKCkgY2FsbHMgcmVsYXRlZCB0byBzdHJlYW1pbmcgSS9PLAoraW5jbHVkaW5nIGJ1ZmZlciBhbGxvY2F0aW9uLCBxdWV1ZWluZyBhbmQgZGVxdWV1ZWluZywgYW5kIHN0cmVhbWluZworY29udHJvbC4gIFVzaW5nIHZpZGVvYnVmIGltcG9zZXMgYSBmZXcgZGVzaWduIGRlY2lzaW9ucyBvbiB0aGUgZHJpdmVyCithdXRob3IsIGJ1dCB0aGUgcGF5YmFjayBjb21lcyBpbiB0aGUgZm9ybSBvZiByZWR1Y2VkIGNvZGUgaW4gdGhlIGRyaXZlciBhbmQKK2EgY29uc2lzdGVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVjRMMiB1c2VyLXNwYWNlIEFQSS4KKworQnVmZmVyIHR5cGVzCisKK05vdCBhbGwgdmlkZW8gZGV2aWNlcyB1c2UgdGhlIHNhbWUga2luZCBvZiBidWZmZXJzLiAgSW4gZmFjdCwgdGhlcmUgYXJlIChhdAorbGVhc3QpIHRocmVlIGNvbW1vbiB2YXJpYXRpb25zOgorCisgLSBCdWZmZXJzIHdoaWNoIGFyZSBzY2F0dGVyZWQgaW4gYm90aCB0aGUgcGh5c2ljYWwgYW5kIChrZXJuZWwpIHZpcnR1YWwKKyAgIGFkZHJlc3Mgc3BhY2VzLiAgKEFsbW9zdCkgYWxsIHVzZXItc3BhY2UgYnVmZmVycyBhcmUgbGlrZSB0aGlzLCBidXQgaXQKKyAgIG1ha2VzIGdyZWF0IHNlbnNlIHRvIGFsbG9jYXRlIGtlcm5lbC1zcGFjZSBidWZmZXJzIHRoaXMgd2F5IGFzIHdlbGwgd2hlbgorICAgaXQgaXMgcG9zc2libGUuICBVbmZvcnR1bmF0ZWx5LCBpdCBpcyBub3QgYWx3YXlzIHBvc3NpYmxlOyB3b3JraW5nIHdpdGgKKyAgIHRoaXMga2luZCBvZiBidWZmZXIgbm9ybWFsbHkgcmVxdWlyZXMgaGFyZHdhcmUgd2hpY2ggY2FuIGRvCisgICBzY2F0dGVyL2dhdGhlciBETUEgb3BlcmF0aW9ucy4KKworIC0gQnVmZmVycyB3aGljaCBhcmUgcGh5c2ljYWxseSBzY2F0dGVyZWQsIGJ1dCB3aGljaCBhcmUgdmlydHVhbGx5CisgICBjb250aWd1b3VzOyBidWZmZXJzIGFsbG9jYXRlZCB3aXRoIHZtYWxsb2MoKSwgaW4gb3RoZXIgd29yZHMuICBUaGVzZQorICAgYnVmZmVycyBhcmUganVzdCBhcyBoYXJkIHRvIHVzZSBmb3IgRE1BIG9wZXJhdGlvbnMsIGJ1dCB0aGV5IGNhbiBiZQorICAgdXNlZnVsIGluIHNpdHVhdGlvbnMgd2hlcmUgRE1BIGlzIG5vdCBhdmFpbGFibGUgYnV0IHZpcnR1YWxseS1jb250aWd1b3VzCisgICBidWZmZXJzIGFyZSBjb252ZW5pZW50LgorCisgLSBCdWZmZXJzIHdoaWNoIGFyZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMuICBBbGxvY2F0aW9uIG9mIHRoaXMga2luZCBvZgorICAgYnVmZmVyIGNhbiBiZSB1bnJlbGlhYmxlIG9uIGZyYWdtZW50ZWQgc3lzdGVtcywgYnV0IHNpbXBsZXIgRE1BCisgICBjb250cm9sbGVycyBjYW5ub3QgZGVhbCB3aXRoIGFueXRoaW5nIGVsc2UuCisKK1ZpZGVvYnVmIGNhbiB3b3JrIHdpdGggYWxsIHRocmVlIHR5cGVzIG9mIGJ1ZmZlcnMsIGJ1dCB0aGUgZHJpdmVyIGF1dGhvcgorbXVzdCBwaWNrIG9uZSBhdCB0aGUgb3V0c2V0IGFuZCBkZXNpZ24gdGhlIGRyaXZlciBhcm91bmQgdGhhdCBkZWNpc2lvbi4KKworW0l0J3Mgd29ydGggbm90aW5nIHRoYXQgdGhlcmUncyBhIGZvdXJ0aCBraW5kIG9mIGJ1ZmZlcjogIm92ZXJsYXkiIGJ1ZmZlcnMKK3doaWNoIGFyZSBsb2NhdGVkIHdpdGhpbiB0aGUgc3lzdGVtJ3MgdmlkZW8gbWVtb3J5LiAgVGhlIG92ZXJsYXkKK2Z1bmN0aW9uYWxpdHkgaXMgY29uc2lkZXJlZCB0byBiZSBkZXByZWNhdGVkIGZvciBtb3N0IHVzZSwgYnV0IGl0IHN0aWxsCitzaG93cyB1cCBvY2Nhc2lvbmFsbHkgaW4gc3lzdGVtLW9uLWNoaXAgZHJpdmVycyB3aGVyZSB0aGUgcGVyZm9ybWFuY2UKK2JlbmVmaXRzIG1lcml0IHRoZSB1c2Ugb2YgdGhpcyB0ZWNobmlxdWUuICBPdmVybGF5IGJ1ZmZlcnMgY2FuIGJlIGhhbmRsZWQKK2FzIGEgZm9ybSBvZiBzY2F0dGVyZWQgYnVmZmVyLCBidXQgdGhlcmUgYXJlIHZlcnkgZmV3IGltcGxlbWVudGF0aW9ucyBpbgordGhlIGtlcm5lbCBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGlzIHRlY2huaXF1ZSBpcyBjdXJyZW50bHkgYmV5b25kIHRoZQorc2NvcGUgb2YgdGhpcyBkb2N1bWVudC5dCisKK0RhdGEgc3RydWN0dXJlcywgY2FsbGJhY2tzLCBhbmQgaW5pdGlhbGl6YXRpb24KKworRGVwZW5kaW5nIG9uIHdoaWNoIHR5cGUgb2YgYnVmZmVycyBhcmUgYmVpbmcgdXNlZCwgdGhlIGRyaXZlciBzaG91bGQKK2luY2x1ZGUgb25lIG9mIHRoZSBmb2xsb3dpbmcgZmlsZXM6CisKKyAgICA8bWVkaWEvdmlkZW9idWYtZG1hLXNnLmg+CQkvKiBQaHlzaWNhbGx5IHNjYXR0ZXJlZCAqLworICAgIDxtZWRpYS92aWRlb2J1Zi12bWFsbG9jLmg+CQkvKiB2bWFsbG9jKCkgYnVmZmVycwkqLworICAgIDxtZWRpYS92aWRlb2J1Zi1kbWEtY29udGlnLmg+CS8qIFBoeXNpY2FsbHkgY29udGlndW91cyAqLworCitUaGUgZHJpdmVyJ3MgZGF0YSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIFY0TDIgZGV2aWNlIHNob3VsZCBpbmNsdWRlIGEKK3N0cnVjdCB2aWRlb2J1Zl9xdWV1ZSBpbnN0YW5jZSBmb3IgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIGJ1ZmZlciBxdWV1ZSwKK2Fsb25nIHdpdGggYSBsaXN0X2hlYWQgZm9yIHRoZSBxdWV1ZSBvZiBhdmFpbGFibGUgYnVmZmVycy4gIFRoZXJlIHdpbGwgYWxzbworbmVlZCB0byBiZSBhbiBpbnRlcnJ1cHQtc2FmZSBzcGlubG9jayB3aGljaCBpcyB1c2VkIHRvIHByb3RlY3QgKGF0IGxlYXN0KQordGhlIHF1ZXVlLgorCitUaGUgbmV4dCBzdGVwIGlzIHRvIHdyaXRlIGZvdXIgc2ltcGxlIGNhbGxiYWNrcyB0byBoZWxwIHZpZGVvYnVmIGRlYWwgd2l0aAordGhlIG1hbmFnZW1lbnQgb2YgYnVmZmVyczoKKworICAgIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgeworCWludCAoKmJ1Zl9zZXR1cCkoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJIHVuc2lnbmVkIGludCAqY291bnQsIHVuc2lnbmVkIGludCAqc2l6ZSk7CisJaW50ICgqYnVmX3ByZXBhcmUpKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAorCQkJICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKTsKKwl2b2lkICgqYnVmX3F1ZXVlKShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKTsKKwl2b2lkICgqYnVmX3JlbGVhc2UpKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2Yik7CisgICAgfTsKKworYnVmX3NldHVwKCkgaXMgY2FsbGVkIGVhcmx5IGluIHRoZSBJL08gcHJvY2Vzcywgd2hlbiBzdHJlYW1pbmcgaXMgYmVpbmcKK2luaXRpYXRlZDsgaXRzIHB1cnBvc2UgaXMgdG8gdGVsbCB2aWRlb2J1ZiBhYm91dCB0aGUgSS9PIHN0cmVhbS4gIFRoZSBjb3VudAorcGFyYW1ldGVyIHdpbGwgYmUgYSBzdWdnZXN0ZWQgbnVtYmVyIG9mIGJ1ZmZlcnMgdG8gdXNlOyB0aGUgZHJpdmVyIHNob3VsZAorY2hlY2sgaXQgZm9yIHJhdGlvbmFsaXR5IGFuZCBhZGp1c3QgaXQgaWYgbmVlZCBiZS4gIEFzIGEgcHJhY3RpY2FsIHJ1bGUsIGEKK21pbmltdW0gb2YgdHdvIGJ1ZmZlcnMgYXJlIG5lZWRlZCBmb3IgcHJvcGVyIHN0cmVhbWluZywgYW5kIHRoZXJlIGlzCit1c3VhbGx5IGEgbWF4aW11bSAod2hpY2ggY2Fubm90IGV4Y2VlZCAzMikgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGVhY2gKK2RldmljZS4gIFRoZSBzaXplIHBhcmFtZXRlciBzaG91bGQgYmUgc2V0IHRvIHRoZSBleHBlY3RlZCAobWF4aW11bSkgc2l6ZQorZm9yIGVhY2ggZnJhbWUgb2YgZGF0YS4KKworRWFjaCBidWZmZXIgKGluIHRoZSBmb3JtIG9mIGEgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciBwb2ludGVyKSB3aWxsIGJlCitwYXNzZWQgdG8gYnVmX3ByZXBhcmUoKSwgd2hpY2ggc2hvdWxkIHNldCB0aGUgYnVmZmVyJ3Mgc2l6ZSwgd2lkdGgsIGhlaWdodCwKK2FuZCBmaWVsZCBmaWVsZHMgcHJvcGVybHkuICBJZiB0aGUgYnVmZmVyJ3Mgc3RhdGUgZmllbGQgaXMKK1ZJREVPQlVGX05FRURTX0lOSVQsIHRoZSBkcml2ZXIgc2hvdWxkIHBhc3MgaXQgdG86CisKKyAgICBpbnQgdmlkZW9idWZfaW9sb2NrKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSogcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmJ1Zik7CisKK0Ftb25nIG90aGVyIHRoaW5ncywgdGhpcyBjYWxsIHdpbGwgdXN1YWxseSBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBidWZmZXIuCitGaW5hbGx5LCB0aGUgYnVmX3ByZXBhcmUoKSBmdW5jdGlvbiBzaG91bGQgc2V0IHRoZSBidWZmZXIncyBzdGF0ZSB0bworVklERU9CVUZfUFJFUEFSRUQuCisKK1doZW4gYSBidWZmZXIgaXMgcXVldWVkIGZvciBJL08sIGl0IGlzIHBhc3NlZCB0byBidWZfcXVldWUoKSwgd2hpY2ggc2hvdWxkCitwdXQgaXQgb250byB0aGUgZHJpdmVyJ3MgbGlzdCBvZiBhdmFpbGFibGUgYnVmZmVycyBhbmQgc2V0IGl0cyBzdGF0ZSB0bworVklERU9CVUZfUVVFVUVELiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIHF1ZXVlIHNwaW5sb2NrCitoZWxkOyBpZiBpdCB0cmllcyB0byBhY3F1aXJlIGl0IGFzIHdlbGwgdGhpbmdzIHdpbGwgY29tZSB0byBhIHNjcmVlY2hpbmcKK2hhbHQuICBZZXMsIHRoaXMgaXMgdGhlIHZvaWNlIG9mIGV4cGVyaWVuY2UuICBOb3RlIGFsc28gdGhhdCB2aWRlb2J1ZiBtYXkKK3dhaXQgb24gdGhlIGZpcnN0IGJ1ZmZlciBpbiB0aGUgcXVldWU7IHBsYWNpbmcgb3RoZXIgYnVmZmVycyBpbiBmcm9udCBvZiBpdAorY291bGQgYWdhaW4gZ3VtIHVwIHRoZSB3b3Jrcy4gIFNvIHVzZSBsaXN0X2FkZF90YWlsKCkgdG8gZW5xdWV1ZSBidWZmZXJzLgorCitGaW5hbGx5LCBidWZfcmVsZWFzZSgpIGlzIGNhbGxlZCB3aGVuIGEgYnVmZmVyIGlzIG5vIGxvbmdlciBpbnRlbmRlZCB0byBiZQordXNlZC4gIFRoZSBkcml2ZXIgc2hvdWxkIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIEkvTyBhY3RpdmUgb24gdGhlIGJ1ZmZlciwKK3RoZW4gcGFzcyBpdCB0byB0aGUgYXBwcm9wcmlhdGUgZnJlZSByb3V0aW5lKHMpOgorCisgICAgLyogU2NhdHRlci9nYXRoZXIgZHJpdmVycyAqLworICAgIGludCB2aWRlb2J1Zl9kbWFfdW5tYXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJICAgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKTsKKyAgICBpbnQgdmlkZW9idWZfZG1hX2ZyZWUoc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKTsKKworICAgIC8qIHZtYWxsb2MgZHJpdmVycyAqLworICAgIHZvaWQgdmlkZW9idWZfdm1hbGxvY19mcmVlIChzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYpOworCisgICAgLyogQ29udGlndW91cyBkcml2ZXJzICovCisgICAgdm9pZCB2aWRlb2J1Zl9kbWFfY29udGlnX2ZyZWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJCSAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYnVmKTsKKworT25lIHdheSB0byBlbnN1cmUgdGhhdCBhIGJ1ZmZlciBpcyBubyBsb25nZXIgdW5kZXIgSS9PIGlzIHRvIHBhc3MgaXQgdG86CisKKyAgICBpbnQgdmlkZW9idWZfd2FpdG9uKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLCBpbnQgbm9uX2Jsb2NraW5nLCBpbnQgaW50cik7CisKK0hlcmUsIHZiIGlzIHRoZSBidWZmZXIsIG5vbl9ibG9ja2luZyBpbmRpY2F0ZXMgd2hldGhlciBub24tYmxvY2tpbmcgSS9PCitzaG91bGQgYmUgdXNlZCAoaXQgc2hvdWxkIGJlIHplcm8gaW4gdGhlIGJ1Zl9yZWxlYXNlKCkgY2FzZSksIGFuZCBpbnRyCitjb250cm9scyB3aGV0aGVyIGFuIGludGVycnVwdGlibGUgd2FpdCBpcyB1c2VkLgorCitGaWxlIG9wZXJhdGlvbnMKKworQXQgdGhpcyBwb2ludCwgbXVjaCBvZiB0aGUgd29yayBpcyBkb25lOyBtdWNoIG9mIHRoZSByZXN0IGlzIHNsaXBwaW5nCit2aWRlb2J1ZiBjYWxscyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3RoZXIgZHJpdmVyIGNhbGxiYWNrcy4gIFRoZQorZmlyc3Qgc3RlcCBpcyBpbiB0aGUgb3BlbigpIGZ1bmN0aW9uLCB3aGljaCBtdXN0IGluaXRpYWxpemUgdGhlCit2aWRlb2J1ZiBxdWV1ZS4gIFRoZSBmdW5jdGlvbiB0byB1c2UgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiBidWZmZXIgdXNlZDoKKworICAgIHZvaWQgdmlkZW9idWZfcXVldWVfc2dfaW5pdChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyAqb3BzLAorCQkJCXN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzcGlubG9ja190ICppcnFsb2NrLAorCQkJCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlLAorCQkJCWVudW0gdjRsMl9maWVsZCBmaWVsZCwKKwkJCQl1bnNpZ25lZCBpbnQgbXNpemUsCisJCQkJdm9pZCAqcHJpdik7CisKKyAgICB2b2lkIHZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyAqb3BzLAorCQkJCXN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzcGlubG9ja190ICppcnFsb2NrLAorCQkJCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlLAorCQkJCWVudW0gdjRsMl9maWVsZCBmaWVsZCwKKwkJCQl1bnNpZ25lZCBpbnQgbXNpemUsCisJCQkJdm9pZCAqcHJpdik7CisKKyAgICB2b2lkIHZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJICAgICAgIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgKm9wcywKKwkJCQkgICAgICAgc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzcGlubG9ja190ICppcnFsb2NrLAorCQkJCSAgICAgICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSwKKwkJCQkgICAgICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbXNpemUsCisJCQkJICAgICAgIHZvaWQgKnByaXYpOworCitJbiBlYWNoIGNhc2UsIHRoZSBwYXJhbWV0ZXJzIGFyZSB0aGUgc2FtZTogcSBpcyB0aGUgcXVldWUgc3RydWN0dXJlIGZvciB0aGUKK2RldmljZSwgb3BzIGlzIHRoZSBzZXQgb2YgY2FsbGJhY2tzIGFzIGRlc2NyaWJlZCBhYm92ZSwgZGV2IGlzIHRoZSBkZXZpY2UKK3N0cnVjdHVyZSBmb3IgdGhpcyB2aWRlbyBkZXZpY2UsIGlycWxvY2sgaXMgYW4gaW50ZXJydXB0LXNhZmUgc3BpbmxvY2sgdG8KK3Byb3RlY3QgYWNjZXNzIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMsIHR5cGUgaXMgdGhlIGJ1ZmZlciB0eXBlIHVzZWQgYnkgdGhlCitkZXZpY2UgKGNhbWVyYXMgd2lsbCB1c2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLCBmb3IgZXhhbXBsZSksIGZpZWxkCitkZXNjcmliZXMgd2hpY2ggZmllbGQgaXMgYmVpbmcgY2FwdHVyZWQgKG9mdGVuIFY0TDJfRklFTERfTk9ORSBmb3IKK3Byb2dyZXNzaXZlIGRldmljZXMpLCBtc2l6ZSBpcyB0aGUgc2l6ZSBvZiBhbnkgY29udGFpbmluZyBzdHJ1Y3R1cmUgdXNlZAorYXJvdW5kIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIsIGFuZCBwcml2IGlzIGEgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgd2hpY2gKK3Nob3dzIHVwIGluIHRoZSBwcml2X2RhdGEgZmllbGQgb2Ygc3RydWN0IHZpZGVvYnVmX3F1ZXVlLiAgTm90ZSB0aGF0IHRoZXNlCithcmUgdm9pZCBmdW5jdGlvbnMgd2hpY2gsIGV2aWRlbnRseSwgYXJlIGltbXVuZSB0byBmYWlsdXJlLgorCitWNEwyIGNhcHR1cmUgZHJpdmVycyBjYW4gYmUgd3JpdHRlbiB0byBzdXBwb3J0IGVpdGhlciBvZiB0d28gQVBJczogdGhlCityZWFkKCkgc3lzdGVtIGNhbGwgYW5kIHRoZSByYXRoZXIgbW9yZSBjb21wbGljYXRlZCBzdHJlYW1pbmcgbWVjaGFuaXNtLiAgQXMKK2EgZ2VuZXJhbCBydWxlLCBpdCBpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydCBib3RoIHRvIGVuc3VyZSB0aGF0IGFsbAorYXBwbGljYXRpb25zIGhhdmUgYSBjaGFuY2Ugb2Ygd29ya2luZyB3aXRoIHRoZSBkZXZpY2UuICBWaWRlb2J1ZiBtYWtlcyBpdAorZWFzeSB0byBkbyB0aGF0IHdpdGggdGhlIHNhbWUgY29kZS4gIFRvIGltcGxlbWVudCByZWFkKCksIHRoZSBkcml2ZXIgbmVlZAorb25seSBtYWtlIGEgY2FsbCB0byBvbmUgb2Y6CisKKyAgICBzc2l6ZV90IHZpZGVvYnVmX3JlYWRfb25lKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgICAgIGNoYXIgX191c2VyICpkYXRhLCBzaXplX3QgY291bnQsCisJCQkgICAgICBsb2ZmX3QgKnBwb3MsIGludCBub25ibG9ja2luZyk7CisKKyAgICBzc2l6ZV90IHZpZGVvYnVmX3JlYWRfc3RyZWFtKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQkgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCwKKwkJCQkgbG9mZl90ICpwcG9zLCBpbnQgdmJpaGFjaywgaW50IG5vbmJsb2NraW5nKTsKKworRWl0aGVyIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2lsbCByZWFkIGZyYW1lIGRhdGEgaW50byBkYXRhLCByZXR1cm5pbmcgdGhlCithbW91bnQgYWN0dWFsbHkgcmVhZDsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCB2aWRlb2J1Zl9yZWFkX29uZSgpIHdpbGwgb25seQorcmVhZCBhIHNpbmdsZSBmcmFtZSwgd2hpbGUgdmlkZW9idWZfcmVhZF9zdHJlYW0oKSB3aWxsIHJlYWQgbXVsdGlwbGUgZnJhbWVzCitpZiB0aGV5IGFyZSBuZWVkZWQgdG8gc2F0aXNmeSB0aGUgY291bnQgcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gIEEKK3R5cGljYWwgZHJpdmVyIHJlYWQoKSBpbXBsZW1lbnRhdGlvbiB3aWxsIHN0YXJ0IHRoZSBjYXB0dXJlIGVuZ2luZSwgY2FsbAorb25lIG9mIHRoZSBhYm92ZSBmdW5jdGlvbnMsIHRoZW4gc3RvcCB0aGUgZW5naW5lIGJlZm9yZSByZXR1cm5pbmcgKHRob3VnaCBhCitzbWFydGVyIGltcGxlbWVudGF0aW9uIG1pZ2h0IGxlYXZlIHRoZSBlbmdpbmUgcnVubmluZyBmb3IgYSBsaXR0bGUgd2hpbGUgaW4KK2FudGljaXBhdGlvbiBvZiBhbm90aGVyIHJlYWQoKSBjYWxsIGhhcHBlbmluZyBpbiB0aGUgbmVhciBmdXR1cmUpLgorCitUaGUgcG9sbCgpIGZ1bmN0aW9uIGNhbiB1c3VhbGx5IGJlIGltcGxlbWVudGVkIHdpdGggYSBkaXJlY3QgY2FsbCB0bzoKKworICAgIHVuc2lnbmVkIGludCB2aWRlb2J1Zl9wb2xsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICAgICBzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJICAgICAgcG9sbF90YWJsZSAqd2FpdCk7CisKK05vdGUgdGhhdCB0aGUgYWN0dWFsIHdhaXQgcXVldWUgZXZlbnR1YWxseSB1c2VkIHdpbGwgYmUgdGhlIG9uZSBhc3NvY2lhdGVkCit3aXRoIHRoZSBmaXJzdCBhdmFpbGFibGUgYnVmZmVyLgorCitXaGVuIHN0cmVhbWluZyBJL08gaXMgZG9uZSB0byBrZXJuZWwtc3BhY2UgYnVmZmVycywgdGhlIGRyaXZlciBtdXN0IHN1cHBvcnQKK3RoZSBtbWFwKCkgc3lzdGVtIGNhbGwgdG8gZW5hYmxlIHVzZXIgc3BhY2UgdG8gYWNjZXNzIHRoZSBkYXRhLiAgSW4gbWFueQorVjRMMiBkcml2ZXJzLCB0aGUgb2Z0ZW4tY29tcGxleCBtbWFwKCkgaW1wbGVtZW50YXRpb24gc2ltcGxpZmllcyB0byBhCitzaW5nbGUgY2FsbCB0bzoKKworICAgIGludCB2aWRlb2J1Zl9tbWFwX21hcHBlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKKworRXZlcnl0aGluZyBlbHNlIGlzIGhhbmRsZWQgYnkgdGhlIHZpZGVvYnVmIGNvZGUuCisKK1RoZSByZWxlYXNlKCkgZnVuY3Rpb24gcmVxdWlyZXMgdHdvIHNlcGFyYXRlIHZpZGVvYnVmIGNhbGxzOgorCisgICAgdm9pZCB2aWRlb2J1Zl9zdG9wKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSk7CisgICAgaW50IHZpZGVvYnVmX21tYXBfZnJlZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpOworCitUaGUgY2FsbCB0byB2aWRlb2J1Zl9zdG9wKCkgdGVybWluYXRlcyBhbnkgSS9PIGluIHByb2dyZXNzIC0gdGhvdWdoIGl0IGlzCitzdGlsbCB1cCB0byB0aGUgZHJpdmVyIHRvIHN0b3AgdGhlIGNhcHR1cmUgZW5naW5lLiAgVGhlIGNhbGwgdG8KK3ZpZGVvYnVmX21tYXBfZnJlZSgpIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGJ1ZmZlcnMgaGF2ZSBiZWVuIHVubWFwcGVkOyBpZgorc28sIHRoZXkgd2lsbCBhbGwgYmUgcGFzc2VkIHRvIHRoZSBidWZfcmVsZWFzZSgpIGNhbGxiYWNrLiAgSWYgYnVmZmVycworcmVtYWluIG1hcHBlZCwgdmlkZW9idWZfbW1hcF9mcmVlKCkgcmV0dXJucyBhbiBlcnJvciBjb2RlIGluc3RlYWQuICBUaGUKK3B1cnBvc2UgaXMgY2xlYXJseSB0byBjYXVzZSB0aGUgY2xvc2luZyBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIGZhaWwgaWYKK2J1ZmZlcnMgYXJlIHN0aWxsIG1hcHBlZCwgYnV0IGV2ZXJ5IGRyaXZlciBpbiB0aGUgMi42LjMyIGtlcm5lbCBjaGVlcmZ1bGx5CitpZ25vcmVzIGl0cyByZXR1cm4gdmFsdWUuCisKK2lvY3RsKCkgb3BlcmF0aW9ucworCitUaGUgVjRMMiBBUEkgaW5jbHVkZXMgYSB2ZXJ5IGxvbmcgbGlzdCBvZiBkcml2ZXIgY2FsbGJhY2tzIHRvIHJlc3BvbmQgdG8KK3RoZSBtYW55IGlvY3RsKCkgY29tbWFuZHMgbWFkZSBhdmFpbGFibGUgdG8gdXNlciBzcGFjZS4gIEEgbnVtYmVyIG9mIHRoZXNlCistIHRob3NlIGFzc29jaWF0ZWQgd2l0aCBzdHJlYW1pbmcgSS9PIC0gdHVybiBhbG1vc3QgZGlyZWN0bHkgaW50byB2aWRlb2J1ZgorY2FsbHMuICBUaGUgcmVsZXZhbnQgaGVscGVyIGZ1bmN0aW9ucyBhcmU6CisKKyAgICBpbnQgdmlkZW9idWZfcmVxYnVmcyhzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcSk7CisgICAgaW50IHZpZGVvYnVmX3F1ZXJ5YnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHY0bDJfYnVmZmVyICpiKTsKKyAgICBpbnQgdmlkZW9idWZfcWJ1ZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYik7CisgICAgaW50IHZpZGVvYnVmX2RxYnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHY0bDJfYnVmZmVyICpiLAorCQkgICAgICAgaW50IG5vbmJsb2NraW5nKTsKKyAgICBpbnQgdmlkZW9idWZfc3RyZWFtb24oc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxKTsKKyAgICBpbnQgdmlkZW9idWZfc3RyZWFtb2ZmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSk7CisgICAgaW50IHZpZGVvYnVmX2NnbWJ1ZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb19tYnVmICptYnVmLAorCQkJaW50IGNvdW50KTsKKworU28sIGZvciBleGFtcGxlLCBhIFZJRElPQ19SRVFCVUZTIGNhbGwgdHVybnMgaW50byBhIGNhbGwgdG8gdGhlIGRyaXZlcidzCit2aWRpb2NfcmVxYnVmcygpIGNhbGxiYWNrIHdoaWNoLCBpbiB0dXJuLCB1c3VhbGx5IG9ubHkgbmVlZHMgdG8gbG9jYXRlIHRoZQorcHJvcGVyIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSBwb2ludGVyIGFuZCBwYXNzIGl0IHRvIHZpZGVvYnVmX3JlcWJ1ZnMoKS4KK1RoZXNlIHN1cHBvcnQgZnVuY3Rpb25zIGNhbiByZXBsYWNlIGEgZ3JlYXQgZGVhbCBvZiBidWZmZXIgbWFuYWdlbWVudAorYm9pbGVycGxhdGUgaW4gYSBsb3Qgb2YgVjRMMiBkcml2ZXJzLgorCitUaGUgdmlkaW9jX3N0cmVhbW9uKCkgYW5kIHZpZGlvY19zdHJlYW1vZmYoKSBmdW5jdGlvbnMgd2lsbCBiZSBhIGJpdCBtb3JlCitjb21wbGV4LCBvZiBjb3Vyc2UsIHNpbmNlIHRoZXkgd2lsbCBhbHNvIG5lZWQgdG8gZGVhbCB3aXRoIHN0YXJ0aW5nIGFuZAorc3RvcHBpbmcgdGhlIGNhcHR1cmUgZW5naW5lLiAgdmlkZW9idWZfY2dtYnVmKCksIGNhbGxlZCBmcm9tIHRoZSBkcml2ZXIncwordmlkaW9jZ21idWYoKSBmdW5jdGlvbiwgb25seSBleGlzdHMgaWYgdGhlIFY0TDEgY29tcGF0aWJpbGl0eSBtb2R1bGUgaGFzCitiZWVuIHNlbGVjdGVkIHdpdGggQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFULCBzbyBpdHMgdXNlIG11c3QgYmUgc3Vycm91bmRlZAord2l0aCAjaWZkZWYgZGlyZWN0aXZlcy4KKworQnVmZmVyIGFsbG9jYXRpb24KKworVGh1cyBmYXIsIHdlIGhhdmUgdGFsa2VkIGFib3V0IGJ1ZmZlcnMsIGJ1dCBoYXZlIG5vdCBsb29rZWQgYXQgaG93IHRoZXkgYXJlCithbGxvY2F0ZWQuICBUaGUgc2NhdHRlci9nYXRoZXIgY2FzZSBpcyB0aGUgbW9zdCBjb21wbGV4IG9uIHRoaXMgZnJvbnQuICBGb3IKK2FsbG9jYXRpb24sIHRoZSBkcml2ZXIgY2FuIGxlYXZlIGJ1ZmZlciBhbGxvY2F0aW9uIGVudGlyZWx5IHVwIHRvIHRoZQordmlkZW9idWYgbGF5ZXI7IGluIHRoaXMgY2FzZSwgYnVmZmVycyB3aWxsIGJlIGFsbG9jYXRlZCBhcyBhbm9ueW1vdXMKK3VzZXItc3BhY2UgcGFnZXMgYW5kIHdpbGwgYmUgdmVyeSBzY2F0dGVyZWQgaW5kZWVkLiAgSWYgdGhlIGFwcGxpY2F0aW9uIGlzCit1c2luZyB1c2VyLXNwYWNlIGJ1ZmZlcnMsIG5vIGFsbG9jYXRpb24gaXMgbmVlZGVkOyB0aGUgdmlkZW9idWYgbGF5ZXIgd2lsbAordGFrZSBjYXJlIG9mIGNhbGxpbmcgZ2V0X3VzZXJfcGFnZXMoKSBhbmQgZmlsbGluZyBpbiB0aGUgc2NhdHRlcmxpc3QgYXJyYXkuCisKK0lmIHRoZSBkcml2ZXIgbmVlZHMgdG8gZG8gaXRzIG93biBtZW1vcnkgYWxsb2NhdGlvbiwgaXQgc2hvdWxkIGJlIGRvbmUgaW4KK3RoZSB2aWRpb2NfcmVxYnVmcygpIGZ1bmN0aW9uLCAqYWZ0ZXIqIGNhbGxpbmcgdmlkZW9idWZfcmVxYnVmcygpLiAgVGhlCitmaXJzdCBzdGVwIGlzIGEgY2FsbCB0bzoKKworICAgIHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKnZpZGVvYnVmX3RvX2RtYShzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYpOworCitUaGUgcmV0dXJuZWQgdmlkZW9idWZfZG1hYnVmIHN0cnVjdHVyZSAoZGVmaW5lZCBpbgorPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPikgaW5jbHVkZXMgYSBjb3VwbGUgb2YgcmVsZXZhbnQgZmllbGRzOgorCisgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICAqc2dsaXN0OworICAgIGludCAgICAgICAgICAgICAgICAgc2dsZW47CisKK1RoZSBkcml2ZXIgbXVzdCBhbGxvY2F0ZSBhbiBhcHByb3ByaWF0ZWx5LXNpemVkIHNjYXR0ZXJsaXN0IGFycmF5IGFuZAorcG9wdWxhdGUgaXQgd2l0aCBwb2ludGVycyB0byB0aGUgcGllY2VzIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyOyBzZ2xlbgorc2hvdWxkIGJlIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheS4KKworRHJpdmVycyB1c2luZyB0aGUgdm1hbGxvYygpIG1ldGhvZCBuZWVkIG5vdCAoYW5kIGNhbm5vdCkgY29uY2VybiB0aGVtc2VsdmVzCit3aXRoIGJ1ZmZlciBhbGxvY2F0aW9uIGF0IGFsbDsgdmlkZW9idWYgd2lsbCBoYW5kbGUgdGhvc2UgZGV0YWlscy4gIFRoZQorc2FtZSBpcyBub3JtYWxseSB0cnVlIG9mIGNvbnRpZ3VvdXMtRE1BIGRyaXZlcnMgYXMgd2VsbDsgdmlkZW9idWYgd2lsbAorYWxsb2NhdGUgdGhlIGJ1ZmZlcnMgKHdpdGggZG1hX2FsbG9jX2NvaGVyZW50KCkpIHdoZW4gaXQgc2VlcyBmaXQuICBUaGF0CittZWFucyB0aGF0IHRoZXNlIGRyaXZlcnMgbWF5IGJlIHRyeWluZyB0byBkbyBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIGF0IGFueQordGltZSwgYW4gb3BlcmF0aW9uIHdoaWNoIGlzIG5vdCBhbHdheXMgZ3VhcmFudGVlZCB0byB3b3JrLiAgU29tZSBkcml2ZXJzCitwbGF5IHRyaWNrcyBieSBhbGxvY2F0aW5nIERNQSBzcGFjZSBhdCBzeXN0ZW0gYm9vdCB0aW1lOyB2aWRlb2J1ZiBkb2VzIG5vdAorY3VycmVudGx5IHBsYXkgd2VsbCB3aXRoIHRob3NlIGRyaXZlcnMuCisKK0FzIG9mIDIuNi4zMSwgY29udGlndW91cy1ETUEgZHJpdmVycyBjYW4gd29yayB3aXRoIGEgdXNlci1zdXBwbGllZCBidWZmZXIsCithcyBsb25nIGFzIHRoYXQgYnVmZmVyIGlzIHBoeXNpY2FsbHkgY29udGlndW91cy4gIE5vcm1hbCB1c2VyLXNwYWNlCithbGxvY2F0aW9ucyB3aWxsIG5vdCBtZWV0IHRoYXQgY3JpdGVyaW9uLCBidXQgYnVmZmVycyBvYnRhaW5lZCBmcm9tIG90aGVyCitrZXJuZWwgZHJpdmVycywgb3IgdGhvc2UgY29udGFpbmVkIHdpdGhpbiBodWdlIHBhZ2VzLCB3aWxsIHdvcmsgd2l0aCB0aGVzZQorZHJpdmVycy4KKworRmlsbGluZyB0aGUgYnVmZmVycworCitUaGUgZmluYWwgcGFydCBvZiBhIHZpZGVvYnVmIGltcGxlbWVudGF0aW9uIGhhcyBubyBkaXJlY3QgY2FsbGJhY2sgLSBpdCdzCit0aGUgcG9ydGlvbiBvZiB0aGUgY29kZSB3aGljaCBhY3R1YWxseSBwdXRzIGZyYW1lIGRhdGEgaW50byB0aGUgYnVmZmVycywKK3VzdWFsbHkgaW4gcmVzcG9uc2UgdG8gaW50ZXJydXB0cyBmcm9tIHRoZSBkZXZpY2UuICBGb3IgYWxsIHR5cGVzIG9mCitkcml2ZXJzLCB0aGlzIHByb2Nlc3Mgd29ya3MgYXBwcm94aW1hdGVseSBhcyBmb2xsb3dzOgorCisgLSBPYnRhaW4gdGhlIG5leHQgYXZhaWxhYmxlIGJ1ZmZlciBhbmQgbWFrZSBzdXJlIHRoYXQgc29tZWJvZHkgaXMgYWN0dWFsbHkKKyAgIHdhaXRpbmcgZm9yIGl0LgorCisgLSBHZXQgYSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgYW5kIHB1dCB2aWRlbyBkYXRhIHRoZXJlLgorCisgLSBNYXJrIHRoZSBidWZmZXIgYXMgZG9uZSBhbmQgd2FrZSB1cCB0aGUgcHJvY2VzcyB3YWl0aW5nIGZvciBpdC4KKworU3RlcCAoMSkgYWJvdmUgaXMgZG9uZSBieSBsb29raW5nIGF0IHRoZSBkcml2ZXItbWFuYWdlZCBsaXN0X2hlYWQgc3RydWN0dXJlCistIHRoZSBvbmUgd2hpY2ggaXMgZmlsbGVkIGluIHRoZSBidWZfcXVldWUoKSBjYWxsYmFjay4gIEJlY2F1c2Ugc3RhcnRpbmcKK3RoZSBlbmdpbmUgYW5kIGVucXVldWVpbmcgYnVmZmVycyBhcmUgZG9uZSBpbiBzZXBhcmF0ZSBzdGVwcywgaXQncyBwb3NzaWJsZQorZm9yIHRoZSBlbmdpbmUgdG8gYmUgcnVubmluZyB3aXRob3V0IGFueSBidWZmZXJzIGF2YWlsYWJsZSAtIGluIHRoZQordm1hbGxvYygpIGNhc2UgZXNwZWNpYWxseS4gIFNvIHRoZSBkcml2ZXIgc2hvdWxkIGJlIHByZXBhcmVkIGZvciB0aGUgbGlzdAordG8gYmUgZW1wdHkuICBJdCBpcyBlcXVhbGx5IHBvc3NpYmxlIHRoYXQgbm9ib2R5IGlzIHlldCBpbnRlcmVzdGVkIGluIHRoZQorYnVmZmVyOyB0aGUgZHJpdmVyIHNob3VsZCBub3QgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgb3IgZmlsbCBpdCB1bnRpbCBhCitwcm9jZXNzIGlzIHdhaXRpbmcgb24gaXQuICBUaGF0IHRlc3QgY2FuIGJlIGRvbmUgYnkgZXhhbWluaW5nIHRoZSBidWZmZXIncworZG9uZSBmaWVsZCAoYSB3YWl0X3F1ZXVlX2hlYWRfdCBzdHJ1Y3R1cmUpIHdpdGggd2FpdHF1ZXVlX2FjdGl2ZSgpLgorCitBIGJ1ZmZlcidzIHN0YXRlIHNob3VsZCBiZSBzZXQgdG8gVklERU9CVUZfQUNUSVZFIGJlZm9yZSBiZWluZyBtYXBwZWQgZm9yCitETUE7IHRoYXQgZW5zdXJlcyB0aGF0IHRoZSB2aWRlb2J1ZiBsYXllciB3aWxsIG5vdCB0cnkgdG8gZG8gYW55dGhpbmcgd2l0aAoraXQgd2hpbGUgdGhlIGRldmljZSBpcyB0cmFuc2ZlcnJpbmcgZGF0YS4KKworRm9yIHNjYXR0ZXIvZ2F0aGVyIGRyaXZlcnMsIHRoZSBuZWVkZWQgbWVtb3J5IHBvaW50ZXJzIHdpbGwgYmUgZm91bmQgaW4gdGhlCitzY2F0dGVybGlzdCBzdHJ1Y3R1cmUgZGVzY3JpYmVkIGFib3ZlLiAgRHJpdmVycyB1c2luZyB0aGUgdm1hbGxvYygpIG1ldGhvZAorY2FuIGdldCBhIG1lbW9yeSBwb2ludGVyIHdpdGg6CisKKyAgICB2b2lkICp2aWRlb2J1Zl90b192bWFsbG9jKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmJ1Zik7CisKK0ZvciBjb250aWd1b3VzIERNQSBkcml2ZXJzLCB0aGUgZnVuY3Rpb24gdG8gdXNlIGlzOgorCisgICAgZG1hX2FkZHJfdCB2aWRlb2J1Zl90b19kbWFfY29udGlnKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmJ1Zik7CisKK1RoZSBjb250aWd1b3VzIERNQSBBUEkgZ29lcyBvdXQgb2YgaXRzIHdheSB0byBoaWRlIHRoZSBrZXJuZWwtc3BhY2UgYWRkcmVzcworb2YgdGhlIERNQSBidWZmZXIgZnJvbSBkcml2ZXJzLgorCitUaGUgZmluYWwgc3RlcCBpcyB0byBzZXQgdGhlIHNpemUgZmllbGQgb2YgdGhlIHJlbGV2YW50IHZpZGVvYnVmX2J1ZmZlcgorc3RydWN0dXJlIHRvIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgY2FwdHVyZWQgaW1hZ2UsIHNldCBzdGF0ZSB0bworVklERU9CVUZfRE9ORSwgdGhlbiBjYWxsIHdha2VfdXAoKSBvbiB0aGUgZG9uZSBxdWV1ZS4gIEF0IHRoaXMgcG9pbnQsIHRoZQorYnVmZmVyIGlzIG93bmVkIGJ5IHRoZSB2aWRlb2J1ZiBsYXllciBhbmQgdGhlIGRyaXZlciBzaG91bGQgbm90IHRvdWNoIGl0CithZ2Fpbi4KKworRGV2ZWxvcGVycyB3aG8gYXJlIGludGVyZXN0ZWQgaW4gbW9yZSBpbmZvcm1hdGlvbiBjYW4gZ28gaW50byB0aGUgcmVsZXZhbnQKK2hlYWRlciBmaWxlczsgdGhlcmUgYXJlIGEgZmV3IGxvdy1sZXZlbCBmdW5jdGlvbnMgZGVjbGFyZWQgdGhlcmUgd2hpY2ggaGF2ZQorbm90IGJlZW4gdGFsa2VkIGFib3V0IGhlcmUuICBBbHNvIHdvcnRod2hpbGUgaXMgdGhlIHZpdmkgZHJpdmVyCisoZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMpLCB3aGljaCBpcyBtYWludGFpbmVkIGFzIGFuIGV4YW1wbGUgb2YgaG93IFY0TDIKK2RyaXZlcnMgc2hvdWxkIGJlIHdyaXR0ZW4uICBWaXZpIG9ubHkgdXNlcyB0aGUgdm1hbGxvYygpIEFQSSwgYnV0IGl0J3MgZ29vZAorZW5vdWdoIHRvIGdldCBzdGFydGVkIHdpdGguICBOb3RlIGFsc28gdGhhdCBhbGwgb2YgdGhlc2UgY2FsbHMgYXJlIGV4cG9ydGVkCitHUEwtb25seSwgc28gdGhleSB3aWxsIG5vdCBiZSBhdmFpbGFibGUgdG8gbm9uLUdQTCBrZXJuZWwgbW9kdWxlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2L3g4Nl82NC9ib290LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKaW5kZXggMjlhNmZmOC4uN2ZiYmFmOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKQEAgLTE2NiwxOSArMTY2LDEzIEBACiAKICAgbnVtYT1ub2FjcGkgICBEb24ndCBwYXJzZSB0aGUgU1JBVCB0YWJsZSBmb3IgTlVNQSBzZXR1cAogCi0gIG51bWE9ZmFrZT1DTURMSU5FCi0JCUlmIGEgbnVtYmVyLCBmYWtlcyBDTURMSU5FIG5vZGVzIGFuZCBpZ25vcmVzIE5VTUEgc2V0dXAgb2YgdGhlCi0JCWFjdHVhbCBtYWNoaW5lLiAgT3RoZXJ3aXNlLCBzeXN0ZW0gbWVtb3J5IGlzIGNvbmZpZ3VyZWQKLQkJZGVwZW5kaW5nIG9uIHRoZSBzaXplcyBhbmQgY29lZmZpY2llbnRzIGxpc3RlZC4gIEZvciBleGFtcGxlOgotCQkJbnVtYT1mYWtlPTIqNTEyLDEwMjQsNCoyNTYsKjEyOAotCQlnaXZlcyB0d28gNTEyTSBub2RlcywgYSAxMDI0TSBub2RlLCBmb3VyIDI1Nk0gbm9kZXMsIGFuZCB0aGUKLQkJcmVzdCBzcGxpdCBpbnRvIDEyOE0gY2h1bmtzLiAgSWYgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIENNRExJTkUKLQkJaXMgYSAqLCB0aGUgcmVtYWluaW5nIG1lbW9yeSBpcyBkaXZpZGVkIHVwIGVxdWFsbHkgYW1vbmcgaXRzCi0JCWNvZWZmaWNpZW50OgotCQkJbnVtYT1mYWtlPTIqNTEyLDIqCi0JCWdpdmVzIHR3byA1MTJNIG5vZGVzIGFuZCB0aGUgcmVzdCBzcGxpdCBpbnRvIHR3byBub2Rlcy4KLQkJT3RoZXJ3aXNlLCB0aGUgcmVtYWluaW5nIHN5c3RlbSBSQU0gaXMgYWxsb2NhdGVkIHRvIGFuCi0JCWFkZGl0aW9uYWwgbm9kZS4KKyAgbnVtYT1mYWtlPTxzaXplPltNR10KKwkJSWYgZ2l2ZW4gYXMgYSBtZW1vcnkgdW5pdCwgZmlsbHMgYWxsIHN5c3RlbSBSQU0gd2l0aCBub2RlcyBvZgorCQlzaXplIGludGVybGVhdmVkIG92ZXIgcGh5c2ljYWwgbm9kZXMuCisKKyAgbnVtYT1mYWtlPTxOPgorCQlJZiBnaXZlbiBhcyBhbiBpbnRlZ2VyLCBmaWxscyBhbGwgc3lzdGVtIFJBTSB3aXRoIE4gZmFrZSBub2RlcworCQlpbnRlcmxlYXZlZCBvdmVyIHBoeXNpY2FsIG5vZGVzLgogCiBBQ1BJCiAKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMDNmMzhjMS4uZjUyMGRkMCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTIyMSw2ICsyMjEsNyBAQAogCiBBQ0VSIEFTUElSRSBPTkUgVEVNUEVSQVRVUkUgQU5EIEZBTiBEUklWRVIKIE06CVBldGVyIEZldWVyZXIgPHBldGVyQHBpaWUubmV0PgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9waWllLm5ldC8/c2VjdGlvbj1hY2VyaGRmCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMKQEAgLTIyOCw2ICsyMjksNyBAQAogQUNFUiBXTUkgTEFQVE9QIEVYVFJBUwogTToJQ2FybG9zIENvcmJhY2hvIDxjYXJsb3NAc3RyYW5nZXdvcmxkcy5jby51az4KIEw6CWFjZXJhY3BpQGdvb2dsZWdyb3Vwcy5jb20gKHN1YnNjcmliZXJzLW9ubHkpCitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FjZXJhY3BpCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCkBAIC0yODgsNyArMjkwLDcgQEAKIAogQUNQSSBXTUkgRFJJVkVSCiBNOglDYXJsb3MgQ29yYmFjaG8gPGNhcmxvc0BzdHJhbmdld29ybGRzLmNvLnVrPgotTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3Lmxlc3N3YXR0cy5vcmcvcHJvamVjdHMvYWNwaS8KIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L3dtaS5jCkBAIC02MTYsMTAgKzYxOCwxMCBAQAogUzoJTWFpbnRhaW5lZAogCiBBUk0vQ09SVElOQSBTWVNURU1TIEdFTUlOSSBBUk0gQVJDSElURUNUVVJFCi1NOglQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KK006CVBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAZ21haWwuY29tPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFQ6CWdpdCBnaXQ6Ly9naXRvcmlvdXMub3JnL2xpbnV4LWdlbWluaS9tYWlubGluZS5naXQKLVM6CU1haW50YWluZWQKK1M6CU9kZCBGaXhlcwogRjoJYXJjaC9hcm0vbWFjaC1nZW1pbmkvCiAKIEFSTS9FQlNBMTEwIE1BQ0hJTkUgU1VQUE9SVApAQCAtNjQxLDkgKzY0Myw5IEBACiBGOglhcmNoL2FybS9tYWNoLXB4YS9lenguYwogCiBBUk0vRkFSQURBWSBGQTUyNiBQT1JUCi1NOglQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KK006CVBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAZ21haWwuY29tPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKLVM6CU1haW50YWluZWQKK1M6CU9kZCBGaXhlcwogRjoJYXJjaC9hcm0vbW0vKi1mYSoKIAogQVJNL0ZPT1RCUklER0UgQVJDSElURUNUVVJFCkBAIC05NjgsNiArOTcwLDcgQEAKIE06CUNvcmVudGluIENoYXJ5IDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CiBNOglLYXJvbCBLb3ppbW9yIDxzeml3YW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTDoJYWNwaTRhc3VzLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2FjcGk0YXN1cy5zZi5uZXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCkBAIC05ODEsNiArOTg0LDcgQEAKIEFTVVMgTEFQVE9QIEVYVFJBUyBEUklWRVIKIE06CUNvcmVudGluIENoYXJ5IDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CiBMOglhY3BpNGFzdXMtdXNlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vYWNwaTRhc3VzLnNmLm5ldAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYwpAQCAtMTQ3Myw2ICsxNDc3LDcgQEAKIENNUEMgQUNQSSBEUklWRVIKIE06CVRoYWRldSBMaW1hIGRlIFNvdXphIENhc2NhcmRvIDxjYXNjYXJkb0Bob2xvc2NvcGlvLmNvbT4KIE06CURhbmllbCBPbGl2ZWlyYSBOYXNjaW1lbnRvIDxkb25Ac3lzdC5jb20uYnI+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMKIApAQCAtMTUxNiw2ICsxNTIxLDcgQEAKIAogQ09NUEFMIExBUFRPUCBTVVBQT1JUCiBNOglDZXphcnkgSmFja2lld2ljeiA8Y2V6YXJ5LmphY2tpZXdpY3pAZ21haWwuY29tPgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYwogCkBAIC0xNzMzLDEwICsxNzM5LDkgQEAKIEY6CW5ldC9kY2NwLwogCiBERUNuZXQgTkVUV09SSyBMQVlFUgotTToJQ2hyaXN0aW5lIENhdWxmaWVsZCA8Y2hyaXN0aW5lLmNhdWxmaWVsZEBnb29nbGVtYWlsLmNvbT4KIFc6CWh0dHA6Ly9saW51eC1kZWNuZXQuc291cmNlZm9yZ2UubmV0CiBMOglsaW51eC1kZWNuZXQtdXNlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKLVM6CU1haW50YWluZWQKK1M6CU9ycGhhbgogRjoJRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RlY25ldC50eHQKIEY6CW5ldC9kZWNuZXQvCiAKQEAgLTE3NDcsNiArMTc1Miw3IEBACiAKIERFTEwgTEFQVE9QIERSSVZFUgogTToJTWF0dGhldyBHYXJyZXR0IDxtamc1OUBzcmNmLnVjYW0ub3JnPgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKIApAQCAtMjAyOSw2ICsyMDM1LDcgQEAKIEVFRVBDIExBUFRPUCBFWFRSQVMgRFJJVkVSCiBNOglDb3JlbnRpbiBDaGFyeSA8Y29yZW50aW5jakBpa3NhaWYubmV0PgogTDoJYWNwaTRhc3VzLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2FjcGk0YXN1cy5zZi5uZXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCkBAIC0yMTQyLDYgKzIxNDksMTcgQEAKIEY6CURvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uLwogRjoJbGliL2ZhdWx0LWluamVjdC5jCiAKK0ZDT0UgU1VCU1lTVEVNIChsaWJmYywgbGliZmNvZSwgZmNvZSkKK006CVJvYmVydCBMb3ZlIDxyb2JlcnQudy5sb3ZlQGludGVsLmNvbT4KK0w6CWRldmVsQG9wZW4tZmNvZS5vcmcKK1c6CXd3dy5PcGVuLUZDb0Uub3JnCitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvc2NzaS9saWJmYy8KK0Y6CWRyaXZlcnMvc2NzaS9mY29lLworRjoJaW5jbHVkZS9zY3NpL2ZjLworRjoJaW5jbHVkZS9zY3NpL2xpYmZjLmgKK0Y6CWluY2x1ZGUvc2NzaS9saWJmY29lLmgKKwogRklMRSBMT0NLSU5HIChmbG9jaygpIGFuZCBmY250bCgpL2xvY2tmKCkpCiBNOglNYXR0aGV3IFdpbGNveCA8bWF0dGhld0B3aWwuY3g+CiBMOglsaW51eC1mc2RldmVsQHZnZXIua2VybmVsLm9yZwpAQCAtMjI5Niw3ICsyMzE0LDcgQEAKIAogRlVKSVRTVSBMQVBUT1AgRVhUUkFTCiBNOglKb25hdGhhbiBXb2l0aGUgPGp3b2l0aGVAcGh5c2ljcy5hZGVsYWlkZS5lZHUuYXU+Ci1MOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZworTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKIApAQCAtMjM5NCw2ICsyNDEyLDE4IEBACiBTOglPZGQgRml4ZXMKIEY6CWRyaXZlcnMvY2hhci9odmNfKgogCitWSVJUSU8gQ09OU09MRSBEUklWRVIKK006CUFtaXQgU2hhaCA8YW1pdC5zaGFoQHJlZGhhdC5jb20+CitMOgl2aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKKworaVNDU0kgQk9PVCBGSVJNV0FSRSBUQUJMRSAoaUJGVCkgRFJJVkVSCitNOglQZXRlciBKb25lcyA8cGpvbmVzQHJlZGhhdC5jb20+CitNOglLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZEBrZXJuZWwub3JnPgorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0KgorCiBHU1BDQSBGSU5FUElYIFNVQkRSSVZFUgogTToJRnJhbmsgWmFnbyA8ZnJhbmtAemFnby5uZXQ+CiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTI1NjIsNiArMjU5Miw3IEBACiAKIEhQIENPTVBBUSBUQzExMDAgVEFCTEVUIFdNSSBFWFRSQVMgRFJJVkVSCiBNOglDYXJsb3MgQ29yYmFjaG8gPGNhcmxvc0BzdHJhbmdld29ybGRzLmNvLnVrPgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU9kZCBGaXhlcwogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jCiAKQEAgLTI3NzIsNyArMjgwMyw3IEBACiAKIElOVEVMIE1FTkxPVyBUSEVSTUFMIERSSVZFUgogTToJU3VqaXRoIFRob21hcyA8c3VqaXRoLnRob21hc0BpbnRlbC5jb20+Ci1MOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZworTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cubGVzc3dhdHRzLm9yZy9wcm9qZWN0cy9hY3BpLwogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9tZW5sb3cuYwpAQCAtMzQxMSw4ICszNDQyLDEwIEBACiBGOglkcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvCiAKIExUUCAoTGludXggVGVzdCBQcm9qZWN0KQotTToJU3VicmF0YSBNb2RhayA8c3VicmF0YUBsaW51eC52bmV0LmlibS5jb20+Ci1NOglNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CitNOglSaXNoaWtlc2ggSyBSYWphayA8cmlzcmFqYWtAbGludXgudm5ldC5pYm0uY29tPgorTToJR2FycmV0dCBDb29wZXIgPHlhbmVnb21pQGdtYWlsLmNvbT4KK006ICAgICBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CitNOiAgICAgU3VicmF0YSBNb2RhayA8c3VicmF0YUBsaW51eC52bmV0LmlibS5jb20+CiBMOglsdHAtbGlzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKHN1YnNjcmliZXJzLW9ubHkpCiBXOglodHRwOi8vbHRwLnNvdXJjZWZvcmdlLm5ldC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZ2FsYWsvbHRwLmdpdApAQCAtMzQ4OCw5ICszNTIxLDkgQEAKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzLwogCiBNQVJWRUxMIE1WNjQzWFggRVRIRVJORVQgRFJJVkVSCi1NOglMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEBtYXJ2ZWxsLmNvbT4KK006CUxlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL25ldC9tdjY0M3h4X2V0aC4qCiBGOglpbmNsdWRlL2xpbnV4L212NjQzeHguaAogCkBAIC0zNjM2LDYgKzM2NjksNyBAQAogCiBNU0kgTEFQVE9QIFNVUFBPUlQKIE06CUxlbm5hcnQgUG9ldHRlcmluZyA8bXp4cmVhcnlAMHBvaW50ZXIuZGU+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cHM6Ly90YW5nby4wcG9pbnRlci5kZS9tYWlsbWFuL2xpc3RpbmZvL3MyNzAtbGludXgKIFc6CWh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3RjaGliby5odG1sCiBTOglNYWludGFpbmVkCkBAIC0zNjQzLDYgKzM2NzcsNyBAQAogCiBNU0kgV01JIFNVUFBPUlQKIE06CUFuaXNzZSBBc3RpZXIgPGFuaXNzZUBhc3RpZXIuZXU+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktd21pLmMKIApAQCAtMzgzNiw2ICszODcxLDcgQEAKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9lbi9OZXQKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZGF2ZW0vbmV0LTIuNi5naXQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZGF2ZW0vbmV0LW5leHQtMi42LmdpdAogUzoJT2RkIEZpeGVzCiBGOglkcml2ZXJzL25ldC8KIEY6CWluY2x1ZGUvbGludXgvaWZfKgpAQCAtNDA5NCw2ICs0MTMwLDcgQEAKIAogUEFOQVNPTklDIExBUFRPUCBBQ1BJIEVYVFJBUyBEUklWRVIKIE06CUhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvcGFuYXNvbmljLWxhcHRvcC5jCiAKQEAgLTQ1MDcsNyArNDU0NCw3IEBACiBSQ1VUT1JUVVJFIE1PRFVMRQogTToJSm9zaCBUcmlwbGV0dCA8am9zaEBmcmVlZGVza3RvcC5vcmc+CiBNOgkiUGF1bCBFLiBNY0tlbm5leSIgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPgotUzoJTWFpbnRhaW5lZAorUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL1JDVS90b3J0dXJlLnR4dAogRjoJa2VybmVsL3JjdXRvcnR1cmUuYwogCkBAIC00NTMyLDExICs0NTY5LDEyIEBACiBNOgkiUGF1bCBFLiBNY0tlbm5leSIgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPgogVzoJaHR0cDovL3d3dy5yZHJvcC5jb20vdXNlcnMvcGF1bG1jay9yY2xvY2svCiBTOglTdXBwb3J0ZWQKLUY6CURvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKLUY6CURvY3VtZW50YXRpb24vUkNVL3JjdXJlZi50eHQKLUY6CWluY2x1ZGUvbGludXgvcmN1cGRhdGUuaAotRjoJaW5jbHVkZS9saW51eC9zcmN1LmgKLUY6CWtlcm5lbC9yY3VwZGF0ZS5jCitGOglEb2N1bWVudGF0aW9uL1JDVS8KK0Y6CWluY2x1ZGUvbGludXgvcmN1KgorRjoJaW5jbHVkZS9saW51eC9zcmN1KgorRjoJa2VybmVsL3JjdSoKK0Y6CWtlcm5lbC9zcmN1KgorWDoJa2VybmVsL3JjdXRvcnR1cmUuYwogCiBSRUFMIFRJTUUgQ0xPQ0sgRFJJVkVSCiBNOglQYXVsIEdvcnRtYWtlciA8cF9nb3J0bWFrZXJAeWFob28uY29tPgpAQCAtNDY3NCw2ICs0NzEyLDEzIEBACiBGOglkcml2ZXJzL21lZGlhL3ZpZGVvLyo3MTQ2KgogRjoJaW5jbHVkZS9tZWRpYS8qNzE0NioKIAorVExHMjMwMCBWSURFTzRMSU5VWC0yIERSSVZFUgorTToJSHVhbmcgU2hpamllIDxzaGlqaWU4QGdtYWlsLmNvbT4KK006CUthbmcgWW9uZyA8a2FuZ3lvbmdAdGVsZWdlbnQuY29tPgorTToJWmhhbmcgWGlhb2JpbmcgPHhiemhhbmdAdGVsZWdlbnQuY29tPgorUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAKKwogU0MxMjAwIFdEVCBEUklWRVIKIE06CVp3YW5lIE13YWlrYW1ibyA8endhbmVAYXJtLmxpbnV4Lm9yZy51az4KIFM6CU1haW50YWluZWQKQEAgLTUwMzIsNyArNTA3Nyw3IEBACiAKIFNPTlkgVkFJTyBDT05UUk9MIERFVklDRSBEUklWRVIKIE06CU1hdHRpYSBEb25naWxpIDxtYWxhdHRpYUBsaW51eC5pdD4KLUw6CWxpbnV4LWFjcGlAdmdlci5rZXJuZWwub3JnCitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5saW51eC5pdC9+bWFsYXR0aWEvd2lraS9pbmRleC5waHAvU29ueV9kcml2ZXJzCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2xhcHRvcHMvc29ueS1sYXB0b3AudHh0CkBAIC01MjM4LDYgKzUyODMsNyBAQAogVEhJTktQQUQgQUNQSSBFWFRSQVMgRFJJVkVSCiBNOglIZW5yaXF1ZSBkZSBNb3JhZXMgSG9sc2NodWggPGlibS1hY3BpQGhtaC5lbmcuYnI+CiBMOglpYm0tYWNwaS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vaWJtLWFjcGkuc291cmNlZm9yZ2UubmV0CiBXOglodHRwOi8vdGhpbmt3aWtpLm9yZy93aWtpL0libS1hY3BpCiBUOglnaXQgZ2l0Oi8vcmVwby5vci5jei9saW51eC0yLjYvbGludXgtYWNwaS0yLjYvaWJtLWFjcGktMi42LmdpdApAQCAtNTI5MSwxMCArNTMzNywxMiBAQAogCiBUT1BTVEFSIExBUFRPUCBFWFRSQVMgRFJJVkVSCiBNOglIZXJ0b24gUm9uYWxkbyBLcnplc2luc2tpIDxoZXJ0b25AbWFuZHJpdmEuY29tLmJyPgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L3RvcHN0YXItbGFwdG9wLmMKIAogVE9TSElCQSBBQ1BJIEVYVFJBUyBEUklWRVIKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglPcnBoYW4KIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jCiAKQEAgLTYwMjIsNiArNjA3MCwxMiBAQAogRjoJRG9jdW1lbnRhdGlvbi94ODYvCiBGOglhcmNoL3g4Ni8KIAorWDg2IFBMQVRGT1JNIERSSVZFUlMKK006CU1hdHRoZXcgR2FycmV0dCA8bWpnQHJlZGhhdC5jb20+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYKKwogWEVOIEhZUEVSVklTT1IgSU5URVJGQUNFCiBNOglKZXJlbXkgRml0emhhcmRpbmdlIDxqZXJlbXlAeGVuc291cmNlLmNvbT4KIE06CUNocmlzIFdyaWdodCA8Y2hyaXN3QHNvdXMtc29sLm9yZz4KZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMzk0YWVjNy4uMWIyNDg5NSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMgogUEFUQ0hMRVZFTCA9IDYKIFNVQkxFVkVMID0gMzMKLUVYVFJBVkVSU0lPTiA9IC1yYzYKK0VYVFJBVkVSU0lPTiA9CiBOQU1FID0gTWFuLUVhdGluZyBTZWFscyBvZiBBbnRpcXVpdHkKIAogIyAqRE9DVU1FTlRBVElPTioKZGlmZiAtLWdpdCBhL2FyY2gvS2NvbmZpZyBiL2FyY2gvS2NvbmZpZwppbmRleCA5ZDA1NWI0Li4yMTVlNDYwIDEwMDY0NAotLS0gYS9hcmNoL0tjb25maWcKKysrIGIvYXJjaC9LY29uZmlnCkBAIC0zLDExICszLDkgQEAKICMKIAogY29uZmlnIE9QUk9GSUxFCi0JdHJpc3RhdGUgIk9Qcm9maWxlIHN5c3RlbSBwcm9maWxpbmcgKEVYUEVSSU1FTlRBTCkiCisJdHJpc3RhdGUgIk9Qcm9maWxlIHN5c3RlbSBwcm9maWxpbmciCiAJZGVwZW5kcyBvbiBQUk9GSUxJTkcKIAlkZXBlbmRzIG9uIEhBVkVfT1BST0ZJTEUKLQlkZXBlbmRzIG9uIFRSQUNJTkdfU1VQUE9SVAotCXNlbGVjdCBUUkFDSU5HCiAJc2VsZWN0IFJJTkdfQlVGRkVSCiAJc2VsZWN0IFJJTkdfQlVGRkVSX0FMTE9XX1NXQVAKIAloZWxwCkBAIC0xNywyMCArMTUsNiBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgT1BST0ZJTEVfSUJTCi0JYm9vbCAiT1Byb2ZpbGUgQU1EIElCUyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlZmF1bHQgbgotCWRlcGVuZHMgb24gT1BST0ZJTEUgJiYgU01QICYmIFg4NgotCWhlbHAKLSAgICAgICAgICBJbnN0cnVjdGlvbi1CYXNlZCBTYW1wbGluZyAoSUJTKSBpcyBhIG5ldyBwcm9maWxpbmcKLSAgICAgICAgICB0ZWNobmlxdWUgdGhhdCBwcm92aWRlcyByaWNoLCBwcmVjaXNlIHByb2dyYW0gcGVyZm9ybWFuY2UKLSAgICAgICAgICBpbmZvcm1hdGlvbi4gSUJTIGlzIGludHJvZHVjZWQgYnkgQU1EIEZhbWlseTEwaCBwcm9jZXNzb3JzCi0gICAgICAgICAgKEFNRCBPcHRlcm9uIFF1YWQtQ29yZSBwcm9jZXNzb3IgIkJhcmNlbG9uYSIpIHRvIG92ZXJjb21lCi0gICAgICAgICAgdGhlIGxpbWl0YXRpb25zIG9mIGNvbnZlbnRpb25hbCBwZXJmb3JtYW5jZSBjb3VudGVyCi0gICAgICAgICAgc2FtcGxpbmcuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBPUFJPRklMRV9FVkVOVF9NVUxUSVBMRVgKIAlib29sICJPUHJvZmlsZSBtdWx0aXBsZXhpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKIAlkZWZhdWx0IG4KQEAgLTEyMSw2ICsxMDUsMTQgQEAKIGNvbmZpZyBVU0VfR0VORVJJQ19TTVBfSEVMUEVSUwogCWJvb2wKIAorY29uZmlnIEhBVkVfUkVHU19BTkRfU1RBQ0tfQUNDRVNTX0FQSQorCWJvb2wKKwloZWxwCisJICBUaGlzIHN5bWJvbCBzaG91bGQgYmUgc2VsZWN0ZWQgYnkgYW4gYXJjaGl0ZWN1cmUgaWYgaXQgc3VwcG9ydHMKKwkgIHRoZSBBUEkgbmVlZGVkIHRvIGFjY2VzcyByZWdpc3RlcnMgYW5kIHN0YWNrIGVudHJpZXMgZnJvbSBwdF9yZWdzLAorCSAgZGVjbGFyZWQgaW4gYXNtL3B0cmFjZS5oCisJICBGb3IgZXhhbXBsZSB0aGUga3Byb2Jlcy1iYXNlZCBldmVudCB0cmFjZXIgbmVlZHMgdGhpcyBBUEkuCisKIGNvbmZpZyBIQVZFX0NMSwogCWJvb2wKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDNmMGM1OWY2Li43MWEyNDMyIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMzI5LDcgKzMyOSw3IEBACiAgKiB0YWJsZXMgY29udGFpbiBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi4KICAqLwogZXh0ZXJuIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLAotCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQorCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3BjaS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMKaW5kZXggYTkxYmEyOC4uYzlhYjk0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMKQEAgLTEyNiw4ICsxMjYsOCBAQAogI2RlZmluZSBNQgkJCSgxMDI0KktCKQogI2RlZmluZSBHQgkJCSgxMDI0Kk1CKQogCi12b2lkCi1wY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorcmVzb3VyY2Vfc2l6ZV90CitwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKQEAgLTE4NCw3ICsxODQsNyBAQAogCQl9CiAJfQogCi0JcmVzLT5zdGFydCA9IHN0YXJ0OworCXJldHVybiBzdGFydDsKIH0KICN1bmRlZiBLQgogI3VuZGVmIE1CCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCA0YzMzY2E4Li4zYjE4MTI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTEyLDYgKzEyLDcgQEAKIAlzZWxlY3QgSEFWRV9JREUKIAlzZWxlY3QgUlRDX0xJQgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTgorCXNlbGVjdCBHRU5FUklDX0FUT01JQzY0IGlmICghQ1BVXzMydjZLKQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAJc2VsZWN0IEhBVkVfS1BST0JFUyBpZiAoIVhJUF9LRVJORUwpCkBAIC0yMCw2ICsyMSw4IEBACiAJc2VsZWN0IEhBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQKIAlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAogCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk8KKwlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUworCXNlbGVjdCBQRVJGX1VTRV9WTUFMTE9DCiAJaGVscAogCSAgVGhlIEFSTSBzZXJpZXMgaXMgYSBsaW5lIG9mIGxvdy1wb3dlci1jb25zdW1wdGlvbiBSSVNDIGNoaXAgZGVzaWducwogCSAgbGljZW5zZWQgYnkgQVJNIEx0ZCBhbmQgdGFyZ2V0ZWQgYXQgZW1iZWRkZWQgYXBwbGljYXRpb25zIGFuZApAQCAtNTIsNiArNTUsOSBAQAogCWJvb2wKIAlzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1IKIAorY29uZmlnIEhBVkVfUFJPQ19DUFUKKwlib29sCisKIGNvbmZpZyBOT19JT1BPUlQKIAlib29sCiAKQEAgLTE2MSw2ICsxNjcsMTEgQEAKIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBBUk1fTDFfQ0FDSEVfU0hJRlRfNgorCWJvb2wKKwloZWxwCisJICBTZXR0aW5nIEFSTSBMMSBjYWNoZSBsaW5lIHNpemUgdG8gNjQgQnl0ZXMuCisKIGlmIE9QUk9GSUxFCiAKIGNvbmZpZyBPUFJPRklMRV9BUk1WNgpAQCAtNTUwLDEwICs1NjEsMjAgQEAKIAkgIDxodHRwOi8vd3d3Lm51dm90b24uY29tL2hxL2VudS9Qcm9kdWN0QW5kU2FsZXMvUHJvZHVjdExpbmVzLwogCQlDb25zdW1lckVsZWN0cm9uaWNzSUMvQVJNTWljcm9jb250cm9sbGVyL0FSTU1pY3JvY29udHJvbGxlcj4KIAorY29uZmlnIEFSQ0hfTlVDOTNYCisJYm9vbCAiTnV2b3RvbiBOVUM5M1ggQ1BVIgorCXNlbGVjdCBDUFVfQVJNOTI2VAorCXNlbGVjdCBIQVZFX0NMSworCXNlbGVjdCBDT01NT05fQ0xLREVWCisJaGVscAorCSAgU3VwcG9ydCBmb3IgTnV2b3RvbiAoV2luYm9uZCBsb2dpYyBkZXB0LikgTlVDOTNYIE1DVSxUaGUgTlVDOTNYIGlzIGEKKwkgIGxvdy1wb3dlciBhbmQgaGlnaCBwZXJmb3JtYW5jZSBNUEVHLTQvSlBFRyBtdWx0aW1lZGlhIGNvbnRyb2xsZXIgY2hpcC4KKwogY29uZmlnIEFSQ0hfUE5YNDAwOAogCWJvb2wgIlBoaWxpcHMgTmV4cGVyaWEgUE5YNDAwOCBNb2JpbGUiCiAJc2VsZWN0IENQVV9BUk05MjZUCiAJc2VsZWN0IEhBVkVfQ0xLCisJc2VsZWN0IENPTU1PTl9DTEtERVYKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgUGhpbGlwcyBQTlg0MDA4IG1vYmlsZSBwbGF0Zm9ybS4KIApAQCAtNjM4LDYgKzY1OSw3IEBACiAJc2VsZWN0IEdFTkVSSUNfR1BJTwogCXNlbGVjdCBIQVZFX0NMSwogCXNlbGVjdCBDUFVfVjcKKwlzZWxlY3QgQVJNX0wxX0NBQ0hFX1NISUZUXzYKIAloZWxwCiAJICBTYW1zdW5nIFM1UEMxWFggc2VyaWVzIGJhc2VkIHN5c3RlbXMKIApAQCAtNzAyLDYgKzcyNCw3IEBACiAJc2VsZWN0IEFSQ0hfSEFTX0NQVUZSRVEKIAlzZWxlY3QgR0VORVJJQ19USU1FCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgQVJDSF9IQVNfSE9MRVNfTUVNT1JZTU9ERUwKIAloZWxwCiAJICBTdXBwb3J0IGZvciBUSSdzIE9NQVAgcGxhdGZvcm0gKE9NQVAxIGFuZCBPTUFQMikuCiAKQEAgLTc4NCw2ICs4MDcsOCBAQAogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbnM5eHh4L0tjb25maWciCiAKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1udWM5M3gvS2NvbmZpZyIKKwogc291cmNlICJhcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWciCkBAIC04NjYsNiArODkxLDExIEBACiAJZGVwZW5kcyBvbiBDUFVfWFNDQUxFICYmICFYU0NBTEVfUE1VX1RJTUVSCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBDUFVfSEFTX1BNVQorCWRlcGVuZHMgb24gQ1BVX1Y2IHx8IENQVV9WNyB8fCBYU0NBTEVfUE1VCisJZGVmYXVsdCB5CisJYm9vbAorCiBpZiAhTU1VCiBzb3VyY2UgImFyY2gvYXJtL0tjb25maWctbm9tbXUiCiBlbmRpZgpAQCAtOTIwLDYgKzk1MCwxOSBAQAogCSAgQUNUTFIgcmVnaXN0ZXIuIE5vdGUgdGhhdCBzZXR0aW5nIHNwZWNpZmljIGJpdHMgaW4gdGhlIEFDVExSIHJlZ2lzdGVyCiAJICBtYXkgbm90IGJlIGF2YWlsYWJsZSBpbiBub24tc2VjdXJlIG1vZGUuCiAKK2NvbmZpZyBQTDMxMF9FUlJBVEFfNTg4MzY5CisJYm9vbCAiQ2xlYW4gJiBJbnZhbGlkYXRlIG1haW50ZW5hbmNlIG9wZXJhdGlvbnMgZG8gbm90IGludmFsaWRhdGUgY2xlYW4gbGluZXMiCisJZGVwZW5kcyBvbiBDQUNIRV9MMlgwICYmIEFSQ0hfT01BUDQKKwloZWxwCisJICAgVGhlIFBMMzEwIEwyIGNhY2hlIGNvbnRyb2xsZXIgaW1wbGVtZW50cyB0aHJlZSB0eXBlcyBvZiBDbGVhbiAmCisJICAgSW52YWxpZGF0ZSBtYWludGVuYW5jZSBvcGVyYXRpb25zOiBieSBQaHlzaWNhbCBBZGRyZXNzCisJICAgKG9mZnNldCAweDdGMCksIGJ5IEluZGV4L1dheSAoMHg3RjgpIGFuZCBieSBXYXkgKDB4N0ZDKS4KKwkgICBUaGV5IGFyZSBhcmNoaXRlY3R1cmFsbHkgZGVmaW5lZCB0byBiZWhhdmUgYXMgdGhlIGV4ZWN1dGlvbiBvZiBhCisJICAgY2xlYW4gb3BlcmF0aW9uIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IGFuIGludmFsaWRhdGUgb3BlcmF0aW9uLAorCSAgIGJvdGggcGVyZm9ybWluZyB0byB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24uIFRoaXMgZnVuY3Rpb25hbGl0eQorCSAgIGlzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50ZWQgaW4gUEwzMTAgYXMgY2xlYW4gbGluZXMgYXJlIG5vdAorCSAgIGludmFsaWRhdGVkIGFzIGEgcmVzdWx0IG9mIHRoZXNlIG9wZXJhdGlvbnMuIE5vdGUgdGhhdCB0aGlzIGVycmF0YQorCSAgIHVzZXMgVGV4YXMgSW5zdHJ1bWVudCdzIHNlY3VyZSBtb25pdG9yIGFwaS4KIGVuZG1lbnUKIAogc291cmNlICJhcmNoL2FybS9jb21tb24vS2NvbmZpZyIKQEAgLTExNzAsNiArMTIxMywxNCBAQAogCWRlcGVuZHMgb24gSElHSE1FTQogCWRlcGVuZHMgb24gIU9VVEVSX0NBQ0hFCiAKK2NvbmZpZyBIV19QRVJGX0VWRU5UUworCWJvb2wgIkVuYWJsZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIHN1cHBvcnQgZm9yIHBlcmYgZXZlbnRzIgorCWRlcGVuZHMgb24gUEVSRl9FVkVOVFMgJiYgQ1BVX0hBU19QTVUgJiYgKENQVV9WNiB8fCBDUFVfVjcpCisJZGVmYXVsdCB5CisJaGVscAorCSAgRW5hYmxlIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXIgc3VwcG9ydCBmb3IgcGVyZiBldmVudHMuIElmCisJICBkaXNhYmxlZCwgcGVyZiBldmVudHMgd2lsbCB1c2Ugc29mdHdhcmUgZXZlbnRzIG9ubHkuCisKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogY29uZmlnIExFRFMKQEAgLTEyMjksNiArMTI4MCw3IEBACiAJYm9vbAogCWRlcGVuZHMgb24gQ1BVX0NQMTVfTU1VCiAJZGVmYXVsdCB5IGlmICFBUkNIX0VCU0ExMTAKKwlzZWxlY3QgSEFWRV9QUk9DX0NQVSBpZiBQUk9DX0ZTCiAJaGVscAogCSAgQVJNIHByb2Nlc3NvcnMgY2Fubm90IGZldGNoL3N0b3JlIGluZm9ybWF0aW9uIHdoaWNoIGlzIG5vdAogCSAgbmF0dXJhbGx5IGFsaWduZWQgb24gdGhlIGJ1cywgaS5lLiwgYSA0IGJ5dGUgZmV0Y2ggbXVzdCBzdGFydCBhdCBhbgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCA5ZTc1ODI1Li44MWY1NGNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtOTQsNyArOTQsNyBAQAogZW5kaWYKIAogaWZlcSAoJChDT05GSUdfVEhVTUIyX0tFUk5FTCkseSkKLUFGTEFHU19BVVRPSVQJOj0kKGNhbGwgYXMtb3B0aW9uLC1XYSQoY29tbWEpLW1pbXBsaWNpdC1pdD10aHVtYiwtV2EkKGNvbW1hKS1tYXV0by1pdCkKK0FGTEFHU19BVVRPSVQJOj0kKGNhbGwgYXMtb3B0aW9uLC1XYSQoY29tbWEpLW1pbXBsaWNpdC1pdD1hbHdheXMsLVdhJChjb21tYSktbWF1dG8taXQpCiBBRkxBR1NfTk9XQVJOCTo9JChjYWxsIGFzLW9wdGlvbiwtV2EkKGNvbW1hKS1tbm8td2Fybi1kZXByZWNhdGVkLC1XYSQoY29tbWEpLVcpCiBDRkxBR1NfVEhVTUIyCTo9LW10aHVtYiAkKEFGTEFHU19BVVRPSVQpICQoQUZMQUdTX05PV0FSTikKIEFGTEFHU19USFVNQjIJOj0kKENGTEFHU19USFVNQjIpIC1XYSQoY29tbWEpLW10aHVtYgpAQCAtMTcxLDYgKzE3MSw3IEBACiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVTg1MDApCQk6PSB1eDUwMAogbWFjaGluZS0kKENPTkZJR19BUkNIX1ZFUlNBVElMRSkJOj0gdmVyc2F0aWxlCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVzkwWDkwMCkJCTo9IHc5MHg5MDAKK21hY2hpbmUtJChDT05GSUdfQVJDSF9OVUM5M1gpCQk6PSBudWM5M3gKIG1hY2hpbmUtJChDT05GSUdfRk9PVEJSSURHRSkJCTo9IGZvb3RicmlkZ2UKIAogIyBQbGF0Zm9ybSBkaXJlY3RvcnkgbmFtZS4gIFRoaXMgbGlzdCBpcyBzb3J0ZWQgYWxwaGFudW1lcmljYWxseQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDJkNGQ4OGIuLjk3Yzg5ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiAjCiAKIEhFQUQJPSBoZWFkLm8KLU9CSlMJPSBtaXNjLm8KK09CSlMJPSBtaXNjLm8gZGVjb21wcmVzcy5vCiBGT05UQwk9ICQoc3JjdHJlZSkvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfYWNvcm5fOHg4LmMKIAogIwpAQCAtMTA2LDEwICsxMDYsNiBAQAogJChvYmopL2xpYjFmdW5jcy5TOiAkKHNyY3RyZWUpL2FyY2gvJChTUkNBUkNIKS9saWIvbGliMWZ1bmNzLlMgRk9SQ0UKIAkkKGNhbGwgY21kLHNoaXBwZWQpCiAKLSMgRG9uJ3QgYWxsb3cgYW55IHN0YXRpYyBkYXRhIGluIG1pc2Mubywgd2hpY2gKLSMgd291bGQgb3RoZXJ3aXNlIG1lc3MgdXAgb3VyIEdPVCB0YWJsZQotQ0ZMQUdTX21pc2MubyA6PSAtRHN0YXRpYz0KLQogJChvYmopL3ZtbGludXg6ICQob2JqKS92bWxpbnV4LmxkcyAkKG9iaikvJChIRUFEKSAkKG9iaikvcGlnZ3kuJChzdWZmaXhfeSkubyBcCiAJIAkkKGFkZHByZWZpeCAkKG9iaikvLCAkKE9CSlMpKSAkKGxpYjFmdW5jcykgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYTM4MmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jCkBAIC0wLDAgKzEsNDUgQEAKKyNkZWZpbmUgX0xJTlVYX1NUUklOR19IXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4JLyogZm9yIGlubGluZSAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CS8qIGZvciBzaXplX3QgKi8KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogZm9yIE5VTEwgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgorCitleHRlcm4gdW5zaWduZWQgbG9uZyBmcmVlX21lbV9wdHI7CitleHRlcm4gdW5zaWduZWQgbG9uZyBmcmVlX21lbV9lbmRfcHRyOworZXh0ZXJuIHZvaWQgZXJyb3IoY2hhciAqKTsKKworI2RlZmluZSBTVEFUSUMgc3RhdGljCisKKyNkZWZpbmUgQVJDSF9IQVNfREVDT01QX1dET0cKKworLyogRGlhZ25vc3RpYyBmdW5jdGlvbnMgKi8KKyNpZmRlZiBERUJVRworIyAgZGVmaW5lIEFzc2VydChjb25kLG1zZykge2lmKCEoY29uZCkpIGVycm9yKG1zZyk7fQorIyAgZGVmaW5lIFRyYWNlKHgpIGZwcmludGYgeAorIyAgZGVmaW5lIFRyYWNldih4KSB7aWYgKHZlcmJvc2UpIGZwcmludGYgeCA7fQorIyAgZGVmaW5lIFRyYWNldnYoeCkge2lmICh2ZXJib3NlPjEpIGZwcmludGYgeCA7fQorIyAgZGVmaW5lIFRyYWNlYyhjLHgpIHtpZiAodmVyYm9zZSAmJiAoYykpIGZwcmludGYgeCA7fQorIyAgZGVmaW5lIFRyYWNlY3YoYyx4KSB7aWYgKHZlcmJvc2U+MSAmJiAoYykpIGZwcmludGYgeCA7fQorI2Vsc2UKKyMgIGRlZmluZSBBc3NlcnQoY29uZCxtc2cpCisjICBkZWZpbmUgVHJhY2UoeCkKKyMgIGRlZmluZSBUcmFjZXYoeCkKKyMgIGRlZmluZSBUcmFjZXZ2KHgpCisjICBkZWZpbmUgVHJhY2VjKGMseCkKKyMgIGRlZmluZSBUcmFjZWN2KGMseCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tFUk5FTF9HWklQCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfaW5mbGF0ZS5jIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0xaTworI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHpvLmMiCisjZW5kaWYKKwordm9pZCBkb19kZWNvbXByZXNzKHU4ICppbnB1dCwgaW50IGxlbiwgdTggKm91dHB1dCwgdm9pZCAoKmVycm9yKShjaGFyICp4KSkKK3sKKwlkZWNvbXByZXNzKGlucHV0LCBsZW4sIE5VTEwsIE5VTEwsIG91dHB1dCwgTlVMTCwgZXJyb3IpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKaW5kZXggNGZkZGM1MC4uOTliNzVhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCkBAIC0yMiwxMyArMjIsMTMgQEAKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19JQ0VEQ0MpCiAKICNpZmRlZiBDT05GSUdfQ1BVX1Y2Ci0JCS5tYWNybwlsb2Fkc3AsIHJiCisJCS5tYWNybwlsb2Fkc3AsIHJiLCB0bXAKIAkJLmVuZG0KIAkJLm1hY3JvCXdyaXRlYiwgY2gsIHJiCiAJCW1jcglwMTQsIDAsIFxjaCwgYzAsIGM1LCAwCiAJCS5lbmRtCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfVjcpCi0JCS5tYWNybwlsb2Fkc3AsIHJiCisJCS5tYWNybwlsb2Fkc3AsIHJiLCB0bXAKIAkJLmVuZG0KIAkJLm1hY3JvCXdyaXRlYiwgY2gsIHJiCiB3YWl0OgkJbXJjCXAxNCwgMCwgcGMsIGMwLCBjMSwgMApAQCAtMzYsMTMgKzM2LDEzIEBACiAJCW1jcglwMTQsIDAsIFxjaCwgYzAsIGM1LCAwCiAJCS5lbmRtCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfWFNDQUxFKQotCQkubWFjcm8JbG9hZHNwLCByYgorCQkubWFjcm8JbG9hZHNwLCByYiwgdG1wCiAJCS5lbmRtCiAJCS5tYWNybwl3cml0ZWIsIGNoLCByYgogCQltY3IJcDE0LCAwLCBcY2gsIGM4LCBjMCwgMAogCQkuZW5kbQogI2Vsc2UKLQkJLm1hY3JvCWxvYWRzcCwgcmIKKwkJLm1hY3JvCWxvYWRzcCwgcmIsIHRtcAogCQkuZW5kbQogCQkubWFjcm8Jd3JpdGViLCBjaCwgcmIKIAkJbWNyCXAxNCwgMCwgXGNoLCBjMSwgYzAsIDAKQEAgLTU4LDcgKzU4LDcgQEAKIAkJLmVuZG0KIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfU0ExMTAwKQotCQkubWFjcm8JbG9hZHNwLCByYgorCQkubWFjcm8JbG9hZHNwLCByYiwgdG1wCiAJCW1vdglccmIsICMweDgwMDAwMDAwCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCiAjaWZkZWYgQ09ORklHX0RFQlVHX0xMX1NFUjMKIAkJYWRkCVxyYiwgXHJiLCAjMHgwMDA1MDAwMAlAIFNlcjMKQEAgLTY3LDEzICs2NywxMyBAQAogI2VuZGlmCiAJCS5lbmRtCiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX1MzQzI0MTApCi0JCS5tYWNybyBsb2Fkc3AsIHJiCisJCS5tYWNybyBsb2Fkc3AsIHJiLCB0bXAKIAkJbW92CVxyYiwgIzB4NTAwMDAwMDAKIAkJYWRkCVxyYiwgXHJiLCAjMHg0MDAwICogQ09ORklHX1MzQ19MT1dMRVZFTF9VQVJUX1BPUlQKIAkJLmVuZG0KICNlbHNlCi0JCS5tYWNybwlsb2Fkc3AsCXJiCi0JCWFkZHJ1YXJ0IFxyYgorCQkubWFjcm8JbG9hZHNwLAlyYiwgdG1wCisJCWFkZHJ1YXJ0IFxyYiwgXHRtcAogCQkuZW5kbQogI2VuZGlmCiAjZW5kaWYKQEAgLTEwMjUsNyArMTAyNSw3IEBACiAJCXN0cmIJcjIsIFtyMywgcjFdCiAJCWIJMWIKIAotcHV0czoJCWxvYWRzcAlyMworcHV0czoJCWxvYWRzcAlyMywgcjEKIDE6CQlsZHJiCXIyLCBbcjBdLCAjMQogCQl0ZXEJcjIsICMwCiAJCW1vdmVxCXBjLCBscgpAQCAtMTA0Miw3ICsxMDQyLDcgQEAKIHB1dGM6CiAJCW1vdglyMiwgcjAKIAkJbW92CXIwLCAjMAotCQlsb2Fkc3AJcjMKKwkJbG9hZHNwCXIzLCByMQogCQliCTJiCiAKIG1lbWR1bXA6CW1vdglyMTIsIHIwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCA1NmEwZDExLi5kMzJiYzcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgkvKiBmb3IgaW5saW5lICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JLyogZm9yIHNpemVfdCAqLwogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgkvKiBmb3IgTlVMTCAqLwotI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgogCiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCkBAIC0xMTcsNTcgKzExNyw3IEBACiAKICNlbmRpZgogCi0jZGVmaW5lIF9fcHRyX3Qgdm9pZCAqCi0KLSNkZWZpbmUgbWVtemVybyhzLG4pIF9fbWVtemVybyhzLG4pCi0KLS8qCi0gKiBPcHRpbWlzZWQgQyB2ZXJzaW9uIG9mIG1lbXplcm8gZm9yIHRoZSBBUk0uCi0gKi8KLXZvaWQgX19tZW16ZXJvIChfX3B0cl90IHMsIHNpemVfdCBuKQotewotCXVuaW9uIHsgdm9pZCAqdnA7IHVuc2lnbmVkIGxvbmcgKnVscDsgdW5zaWduZWQgY2hhciAqdWNwOyB9IHU7Ci0JaW50IGk7Ci0KLQl1LnZwID0gczsKLQotCWZvciAoaSA9IG4gPj4gNTsgaSA+IDA7IGktLSkgewotCQkqdS51bHArKyA9IDA7Ci0JCSp1LnVscCsrID0gMDsKLQkJKnUudWxwKysgPSAwOwotCQkqdS51bHArKyA9IDA7Ci0JCSp1LnVscCsrID0gMDsKLQkJKnUudWxwKysgPSAwOwotCQkqdS51bHArKyA9IDA7Ci0JCSp1LnVscCsrID0gMDsKLQl9Ci0KLQlpZiAobiAmIDEgPDwgNCkgewotCQkqdS51bHArKyA9IDA7Ci0JCSp1LnVscCsrID0gMDsKLQkJKnUudWxwKysgPSAwOwotCQkqdS51bHArKyA9IDA7Ci0JfQotCi0JaWYgKG4gJiAxIDw8IDMpIHsKLQkJKnUudWxwKysgPSAwOwotCQkqdS51bHArKyA9IDA7Ci0JfQotCi0JaWYgKG4gJiAxIDw8IDIpCi0JCSp1LnVscCsrID0gMDsKLQotCWlmIChuICYgMSA8PCAxKSB7Ci0JCSp1LnVjcCsrID0gMDsKLQkJKnUudWNwKysgPSAwOwotCX0KLQotCWlmIChuICYgMSkKLQkJKnUudWNwKysgPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fcHRyX3QgbWVtY3B5KF9fcHRyX3QgX19kZXN0LCBfX2NvbnN0IF9fcHRyX3QgX19zcmMsCi0JCQkgICAgc2l6ZV90IF9fbikKK3ZvaWQgKm1lbWNweSh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiB7CiAJaW50IGkgPSAwOwogCXVuc2lnbmVkIGNoYXIgKmQgPSAodW5zaWduZWQgY2hhciAqKV9fZGVzdCwgKnMgPSAodW5zaWduZWQgY2hhciAqKV9fc3JjOwpAQCAtMjA0LDU5ICsxNTQsMjAgQEAKIC8qCiAgKiBnemlwIGRlbGFyYXRpb25zCiAgKi8KLSNkZWZpbmUgU1RBVElDIHN0YXRpYwotCi0vKiBEaWFnbm9zdGljIGZ1bmN0aW9ucyAqLwotI2lmZGVmIERFQlVHCi0jICBkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKSB7aWYoIShjb25kKSkgZXJyb3IobXNnKTt9Ci0jICBkZWZpbmUgVHJhY2UoeCkgZnByaW50ZiB4Ci0jICBkZWZpbmUgVHJhY2V2KHgpIHtpZiAodmVyYm9zZSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2V2dih4KSB7aWYgKHZlcmJvc2U+MSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjKGMseCkge2lmICh2ZXJib3NlICYmIChjKSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjdihjLHgpIHtpZiAodmVyYm9zZT4xICYmIChjKSkgZnByaW50ZiB4IDt9Ci0jZWxzZQotIyAgZGVmaW5lIEFzc2VydChjb25kLG1zZykKLSMgIGRlZmluZSBUcmFjZSh4KQotIyAgZGVmaW5lIFRyYWNldih4KQotIyAgZGVmaW5lIFRyYWNldnYoeCkKLSMgIGRlZmluZSBUcmFjZWMoYyx4KQotIyAgZGVmaW5lIFRyYWNlY3YoYyx4KQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGVycm9yKGNoYXIgKm0pOwotCiBleHRlcm4gY2hhciBpbnB1dF9kYXRhW107CiBleHRlcm4gY2hhciBpbnB1dF9kYXRhX2VuZFtdOwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciAqb3V0cHV0X2RhdGE7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBvdXRwdXRfcHRyOwordW5zaWduZWQgY2hhciAqb3V0cHV0X2RhdGE7Cit1bnNpZ25lZCBsb25nIG91dHB1dF9wdHI7CiAKLXN0YXRpYyB2b2lkIGVycm9yKGNoYXIgKm0pOwotCi1zdGF0aWMgdm9pZCBwdXRzdHIoY29uc3QgY2hhciAqKTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJlZV9tZW1fcHRyOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJlZV9tZW1fZW5kX3B0cjsKLQotI2lmZGVmIFNUQU5EQUxPTkVfREVCVUcKLSNkZWZpbmUgTk9fSU5GTEFURV9NQUxMT0MKLSNlbmRpZgotCi0jZGVmaW5lIEFSQ0hfSEFTX0RFQ09NUF9XRE9HCi0KLSNpZmRlZiBDT05GSUdfS0VSTkVMX0daSVAKLSNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19pbmZsYXRlLmMiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19LRVJORUxfTFpPCi0jaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem8uYyIKLSNlbmRpZgordW5zaWduZWQgbG9uZyBmcmVlX21lbV9wdHI7Cit1bnNpZ25lZCBsb25nIGZyZWVfbWVtX2VuZF9wdHI7CiAKICNpZm5kZWYgYXJjaF9lcnJvcgogI2RlZmluZSBhcmNoX2Vycm9yKHgpCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqeCkKK3ZvaWQgZXJyb3IoY2hhciAqeCkKIHsKIAlhcmNoX2Vycm9yKHgpOwogCkBAIC0yNzIsNiArMTgzLDggQEAKIAllcnJvcigiQXR0ZW1wdGluZyBkaXZpc2lvbiBieSAwISIpOwogfQogCitleHRlcm4gdm9pZCBkb19kZWNvbXByZXNzKHU4ICppbnB1dCwgaW50IGxlbiwgdTggKm91dHB1dCwgdm9pZCAoKmVycm9yKShjaGFyICp4KSk7CisKICNpZm5kZWYgU1RBTkRBTE9ORV9ERUJVRwogCiB1bnNpZ25lZCBsb25nCkBAIC0yOTIsOCArMjA1LDggQEAKIAlvdXRwdXRfcHRyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHRtcCk7CiAKIAlwdXRzdHIoIlVuY29tcHJlc3NpbmcgTGludXguLi4iKTsKLQlkZWNvbXByZXNzKGlucHV0X2RhdGEsIGlucHV0X2RhdGFfZW5kIC0gaW5wdXRfZGF0YSwKLQkJCU5VTEwsIE5VTEwsIG91dHB1dF9kYXRhLCBOVUxMLCBlcnJvcik7CisJZG9fZGVjb21wcmVzcyhpbnB1dF9kYXRhLCBpbnB1dF9kYXRhX2VuZCAtIGlucHV0X2RhdGEsCisJCQlvdXRwdXRfZGF0YSwgZXJyb3IpOwogCXB1dHN0cigiIGRvbmUsIGJvb3RpbmcgdGhlIGtlcm5lbC5cbiIpOwogCXJldHVybiBvdXRwdXRfcHRyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCmluZGV4IGE1OTI0YjkuLjdjYTllY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbgorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KQEAgLTE0LDYgKzE0LDEzIEBACiAgIC9ESVNDQVJELyA6IHsKICAgICAqKC5BUk0uZXhpZHgqKQogICAgICooLkFSTS5leHRhYiopCisgICAgLyoKKyAgICAgKiBEaXNjYXJkIGFueSByL3cgZGF0YSAtIHRoaXMgcHJvZHVjZXMgYSBsaW5rIGVycm9yIGlmIHdlIGhhdmUgYW55LAorICAgICAqIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBQSUMgZGVjb21wcmVzc2lvbi4gIExvY2FsIGRhdGEgZ2VuZXJhdGVzCisgICAgICogR09UT0ZGIHJlbG9jYXRpb25zLCB3aGljaCBwcmV2ZW50cyBpdCBiZWluZyByZWxvY2F0ZWQgaW5kZXBlbmRlbnRseQorICAgICAqIG9mIHRoZSB0ZXh0L2dvdCBzZWdtZW50cy4KKyAgICAgKi8KKyAgICAqKC5kYXRhKQogICB9CiAKICAgLiA9IFRFWFRfU1RBUlQ7CkBAIC00MCw3ICs0Nyw2IEBACiAgIC5nb3QJCQk6IHsgKiguZ290KSB9CiAgIF9nb3RfZW5kID0gLjsKICAgLmdvdC5wbHQJCTogeyAqKC5nb3QucGx0KSB9Ci0gIC5kYXRhCQkJOiB7ICooLmRhdGEpIH0KICAgX2VkYXRhID0gLjsKIAogICAuID0gQlNTX1NUQVJUOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2Nsa2Rldi5jIGIvYXJjaC9hcm0vY29tbW9uL2Nsa2Rldi5jCmluZGV4IGFhZTViYzAuLjQ0NmI2OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYworKysgYi9hcmNoL2FybS9jb21tb24vY2xrZGV2LmMKQEAgLTk5LDYgKzk5LDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa2Rldl9hZGQpOwogCit2b2lkIF9faW5pdCBjbGtkZXZfYWRkX3RhYmxlKHN0cnVjdCBjbGtfbG9va3VwICpjbCwgc2l6ZV90IG51bSkKK3sKKwltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOworCXdoaWxlIChudW0tLSkgeworCQlsaXN0X2FkZF90YWlsKCZjbC0+bm9kZSwgJmNsb2Nrcyk7CisJCWNsKys7CisJfQorCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKK30KKwogI2RlZmluZSBNQVhfREVWX0lECTIwCiAjZGVmaW5lIE1BWF9DT05fSUQJMTYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jIGIvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCmluZGV4IGNjMzJjMWUuLmNjMGE5MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYworKysgYi9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCQkgKiBXZSBkb24ndCBuZWVkIHRvIHN5bmMgdGhlIERNQSBidWZmZXIgc2luY2UKIAkJICogaXQgd2FzIGFsbG9jYXRlZCB2aWEgdGhlIGNvaGVyZW50IGFsbG9jYXRvcnMuCiAJCSAqLwotCQlkbWFfY2FjaGVfbWFpbnQocHRyLCBzaXplLCBkaXIpOworCQlfX2RtYV9zaW5nbGVfY3B1X3RvX2RldihwdHIsIHNpemUsIGRpcik7CiAJfQogCiAJcmV0dXJuIGRtYV9hZGRyOwpAQCAtMzE1LDYgKzMxNSw4IEBACiAJCQlfX2NwdWNfZmx1c2hfZGNhY2hlX2FyZWEocHRyLCBzaXplKTsKIAkJfQogCQlmcmVlX3NhZmVfYnVmZmVyKGRldi0+YXJjaGRhdGEuZG1hYm91bmNlLCBidWYpOworCX0gZWxzZSB7CisJCV9fZG1hX3NpbmdsZV9kZXZfdG9fY3B1KGRtYV90b192aXJ0KGRldiwgZG1hX2FkZHIpLCBzaXplLCBkaXIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3ZpYy5jIGIvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCmluZGV4IGYyMzI5NDEuLjFjZjk5OWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi92aWMuYworKysgYi9hcmNoL2FybS9jb21tb24vdmljLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTI4LDQ4ICsyOSw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3ZpYy5oPgogCi1zdGF0aWMgdm9pZCB2aWNfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXZvaWQgX19pb21lbSAqYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JaXJxICY9IDMxOwotCXdyaXRlbCgxIDw8IGlycSwgYmFzZSArIFZJQ19JTlRfRU5BQkxFX0NMRUFSKTsKLQkvKiBtb3Jlb3ZlciwgY2xlYXIgdGhlIHNvZnQtdHJpZ2dlcmVkLCBpbiBjYXNlIGl0IHdhcyB0aGUgcmVhc29uICovCi0Jd3JpdGVsKDEgPDwgaXJxLCBiYXNlICsgVklDX0lOVF9TT0ZUX0NMRUFSKTsKLX0KLQotc3RhdGljIHZvaWQgdmljX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICpiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQlpcnEgJj0gMzE7Ci0Jd3JpdGVsKDEgPDwgaXJxLCBiYXNlICsgVklDX0lOVF9FTkFCTEVfQ0xFQVIpOwotfQotCi1zdGF0aWMgdm9pZCB2aWNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXZvaWQgX19pb21lbSAqYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JaXJxICY9IDMxOwotCXdyaXRlbCgxIDw8IGlycSwgYmFzZSArIFZJQ19JTlRfRU5BQkxFKTsKLX0KLQotLyoqCi0gKiB2aWNfaW5pdDIgLSBjb21tb24gaW5pdGlhbGlzYXRpb24gY29kZQotICogQGJhc2U6IEJhc2Ugb2YgdGhlIFZJQy4KLSAqCi0gKiBDb21tb24gaW5pdGlhbGlzYXRpb24gY29kZSBmb3IgcmVnaXN0ZXJhdGlvbgotICogYW5kIHJlc3VtZS4KLSovCi1zdGF0aWMgdm9pZCB2aWNfaW5pdDIodm9pZCBfX2lvbWVtICpiYXNlKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJdm9pZCBfX2lvbWVtICpyZWcgPSBiYXNlICsgVklDX1ZFQ1RfQ05UTDAgKyAoaSAqIDQpOwotCQl3cml0ZWwoVklDX1ZFQ1RfQ05UTF9FTkFCTEUgfCBpLCByZWcpOwotCX0KLQotCXdyaXRlbCgzMiwgYmFzZSArIFZJQ19QTDE5MF9ERUZfVkVDVF9BRERSKTsKLX0KLQogI2lmIGRlZmluZWQoQ09ORklHX1BNKQogLyoqCiAgKiBzdHJ1Y3QgdmljX2RldmljZSAtIFZJQyBQTSBkZXZpY2UKQEAgLTk5LDEzICs1OCwzNCBAQAogLyogd2UgY2Fubm90IGFsbG9jYXRlIG1lbW9yeSB3aGVuIFZJQ3MgYXJlIGluaXRpYWxseSByZWdpc3RlcmVkICovCiBzdGF0aWMgc3RydWN0IHZpY19kZXZpY2UgdmljX2RldmljZXNbQ09ORklHX0FSTV9WSUNfTlJdOwogCitzdGF0aWMgaW50IHZpY19pZDsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgdmljX2RldmljZSAqdG9fdmljKHN0cnVjdCBzeXNfZGV2aWNlICpzeXMpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihzeXMsIHN0cnVjdCB2aWNfZGV2aWNlLCBzeXNkZXYpOwogfQorI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi1zdGF0aWMgaW50IHZpY19pZDsKKy8qKgorICogdmljX2luaXQyIC0gY29tbW9uIGluaXRpYWxpc2F0aW9uIGNvZGUKKyAqIEBiYXNlOiBCYXNlIG9mIHRoZSBWSUMuCisgKgorICogQ29tbW9uIGluaXRpYWxpc2F0aW9uIGNvZGUgZm9yIHJlZ2lzdGVyYXRpb24KKyAqIGFuZCByZXN1bWUuCisqLworc3RhdGljIHZvaWQgdmljX2luaXQyKHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwlpbnQgaTsKIAorCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCXZvaWQgX19pb21lbSAqcmVnID0gYmFzZSArIFZJQ19WRUNUX0NOVEwwICsgKGkgKiA0KTsKKwkJd3JpdGVsKFZJQ19WRUNUX0NOVExfRU5BQkxFIHwgaSwgcmVnKTsKKwl9CisKKwl3cml0ZWwoMzIsIGJhc2UgKyBWSUNfUEwxOTBfREVGX1ZFQ1RfQUREUik7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkKIHN0YXRpYyBpbnQgdmljX2NsYXNzX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2aWNfZGV2aWNlICp2aWMgPSB0b192aWMoZGV2KTsKQEAgLTE1OSwzMSArMTM5LDYgQEAKIH07CiAKIC8qKgotICogdmljX3BtX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgYSBWSUMgZm9yIGxhdGVyIHBvd2VyIG1hbmFnZW1lbnQgY29udHJvbAotICogQGJhc2U6IFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFZJQy4KLSAqIEBpcnE6IFRoZSBiYXNlIElSUSBmb3IgdGhlIFZJQy4KLSAqIEByZXN1bWVfc291cmNlczogYml0bWFzayBvZiBpbnRlcnJ1cHRzIGFsbG93ZWQgZm9yIHJlc3VtZSBzb3VyY2VzLgotICoKLSAqIFJlZ2lzdGVyIHRoZSBWSUMgd2l0aCB0aGUgc3lzdGVtIGRldmljZSB0cmVlIHNvIHRoYXQgaXQgY2FuIGJlIG5vdGlmaWVkCi0gKiBvZiBzdXNwZW5kIGFuZCByZXN1bWUgcmVxdWVzdHMgYW5kIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGFjdGlvbnMgYXJlCi0gKiB0YWtlbiB0byByZS1pbnN0YXRlIHRoZSBzZXR0aW5ncyBvbiByZXN1bWUuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCB2aWNfcG1fcmVnaXN0ZXIodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxLCB1MzIgcmVzdW1lX3NvdXJjZXMpCi17Ci0Jc3RydWN0IHZpY19kZXZpY2UgKnY7Ci0KLQlpZiAodmljX2lkID49IEFSUkFZX1NJWkUodmljX2RldmljZXMpKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0b28gZmV3IFZJQ3MsIGluY3JlYXNlIENPTkZJR19BUk1fVklDX05SXG4iLCBfX2Z1bmNfXyk7Ci0JZWxzZSB7Ci0JCXYgPSAmdmljX2RldmljZXNbdmljX2lkXTsKLQkJdi0+YmFzZSA9IGJhc2U7Ci0JCXYtPnJlc3VtZV9zb3VyY2VzID0gcmVzdW1lX3NvdXJjZXM7Ci0JCXYtPmlycSA9IGlycTsKLQkJdmljX2lkKys7Ci0JfQotfQotCi0vKioKICAqIHZpY19wbV9pbml0IC0gaW5pdGljYWxsIHRvIHJlZ2lzdGVyIFZJQyBwbQogICoKICAqIFRoaXMgaXMgY2FsbGVkIHZpYSBsYXRlX2luaXRjYWxsKCkgdG8gcmVnaXN0ZXIKQEAgLTIxOSw5ICsxNzQsNjAgQEAKIAogCXJldHVybiAwOwogfQotCiBsYXRlX2luaXRjYWxsKHZpY19wbV9pbml0KTsKIAorLyoqCisgKiB2aWNfcG1fcmVnaXN0ZXIgLSBSZWdpc3RlciBhIFZJQyBmb3IgbGF0ZXIgcG93ZXIgbWFuYWdlbWVudCBjb250cm9sCisgKiBAYmFzZTogVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVklDLgorICogQGlycTogVGhlIGJhc2UgSVJRIGZvciB0aGUgVklDLgorICogQHJlc3VtZV9zb3VyY2VzOiBiaXRtYXNrIG9mIGludGVycnVwdHMgYWxsb3dlZCBmb3IgcmVzdW1lIHNvdXJjZXMuCisgKgorICogUmVnaXN0ZXIgdGhlIFZJQyB3aXRoIHRoZSBzeXN0ZW0gZGV2aWNlIHRyZWUgc28gdGhhdCBpdCBjYW4gYmUgbm90aWZpZWQKKyAqIG9mIHN1c3BlbmQgYW5kIHJlc3VtZSByZXF1ZXN0cyBhbmQgZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgYWN0aW9ucyBhcmUKKyAqIHRha2VuIHRvIHJlLWluc3RhdGUgdGhlIHNldHRpbmdzIG9uIHJlc3VtZS4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHZpY19wbV9yZWdpc3Rlcih2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnEsIHUzMiByZXN1bWVfc291cmNlcykKK3sKKwlzdHJ1Y3QgdmljX2RldmljZSAqdjsKKworCWlmICh2aWNfaWQgPj0gQVJSQVlfU0laRSh2aWNfZGV2aWNlcykpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRvbyBmZXcgVklDcywgaW5jcmVhc2UgQ09ORklHX0FSTV9WSUNfTlJcbiIsIF9fZnVuY19fKTsKKwllbHNlIHsKKwkJdiA9ICZ2aWNfZGV2aWNlc1t2aWNfaWRdOworCQl2LT5iYXNlID0gYmFzZTsKKwkJdi0+cmVzdW1lX3NvdXJjZXMgPSByZXN1bWVfc291cmNlczsKKwkJdi0+aXJxID0gaXJxOworCQl2aWNfaWQrKzsKKwl9Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHZpY19wbV9yZWdpc3Rlcih2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnEsIHUzMiBhcmcxKSB7IH0KKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIHZvaWQgdmljX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCWlycSAmPSAzMTsKKwl3cml0ZWwoMSA8PCBpcnEsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRV9DTEVBUik7CisJLyogbW9yZW92ZXIsIGNsZWFyIHRoZSBzb2Z0LXRyaWdnZXJlZCwgaW4gY2FzZSBpdCB3YXMgdGhlIHJlYXNvbiAqLworCXdyaXRlbCgxIDw8IGlycSwgYmFzZSArIFZJQ19JTlRfU09GVF9DTEVBUik7Cit9CisKK3N0YXRpYyB2b2lkIHZpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJaXJxICY9IDMxOworCXdyaXRlbCgxIDw8IGlycSwgYmFzZSArIFZJQ19JTlRfRU5BQkxFX0NMRUFSKTsKK30KKworc3RhdGljIHZvaWQgdmljX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCWlycSAmPSAzMTsKKwl3cml0ZWwoMSA8PCBpcnEsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRSk7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkKIHN0YXRpYyBzdHJ1Y3QgdmljX2RldmljZSAqdmljX2Zyb21faXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAgICAgICAgIHN0cnVjdCB2aWNfZGV2aWNlICp2ID0gdmljX2RldmljZXM7CkBAIC0yNTUsMTAgKzI2MSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KLQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB2aWNfcG1fcmVnaXN0ZXIodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxLCB1MzIgYXJnMSkgeyB9Ci0KICNkZWZpbmUgdmljX3NldF93YWtlIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIApAQCAtMjcwLDgwICsyNzMsNiBAQAogCS5zZXRfd2FrZSA9IHZpY19zZXRfd2FrZSwKIH07CiAKLS8qIFRoZSBQTDE5MCBjZWxsIGZyb20gQVJNIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IFNULCBzbyBoYW5kbGUgYm90aCBoZXJlICovCi1zdGF0aWMgdm9pZCB2aWtfaW5pdF9zdCh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnFfc3RhcnQsCi0JCQkgdTMyIHZpY19zb3VyY2VzKTsKLQotLyoqCi0gKiB2aWNfaW5pdCAtIGluaXRpYWxpc2UgYSB2ZWN0b3JlZCBpbnRlcnJ1cHQgY29udHJvbGxlcgotICogQGJhc2U6IGlvbWVtIGJhc2UgYWRkcmVzcwotICogQGlycV9zdGFydDogc3RhcnRpbmcgaW50ZXJydXB0IG51bWJlciwgbXVzdCBiZSBtdWxpcGxlIG9mIDMyCi0gKiBAdmljX3NvdXJjZXM6IGJpdG1hc2sgb2YgaW50ZXJydXB0IHNvdXJjZXMgdG8gYWxsb3cKLSAqIEByZXN1bWVfc291cmNlczogYml0bWFzayBvZiBpbnRlcnJ1cHQgc291cmNlcyB0byBhbGxvdyBmb3IgcmVzdW1lCi0gKi8KLXZvaWQgX19pbml0IHZpY19pbml0KHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50IGlycV9zdGFydCwKLQkJICAgICB1MzIgdmljX3NvdXJjZXMsIHUzMiByZXN1bWVfc291cmNlcykKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1MzIgY2VsbGlkID0gMDsKLQllbnVtIGFtYmFfdmVuZG9yIHZlbmRvcjsKLQotCS8qIElkZW50aWZ5IHdoaWNoIFZJQyBjZWxsIHRoaXMgb25lIGlzLCBieSByZWFkaW5nIHRoZSBJRCAqLwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJdTMyIGFkZHIgPSAoKHUzMiliYXNlICYgUEFHRV9NQVNLKSArIDB4ZmUwICsgKGkgKiA0KTsKLQkJY2VsbGlkIHw9IChyZWFkbChhZGRyKSAmIDB4ZmYpIDw8ICg4ICogaSk7Ci0JfQotCXZlbmRvciA9IChjZWxsaWQgPj4gMTIpICYgMHhmZjsKLQlwcmludGsoS0VSTl9JTkZPICJWSUMgQCVwOiBpZCAweCUwOHgsIHZlbmRvciAweCUwMnhcbiIsCi0JICAgICAgIGJhc2UsIGNlbGxpZCwgdmVuZG9yKTsKLQotCXN3aXRjaCh2ZW5kb3IpIHsKLQljYXNlIEFNQkFfVkVORE9SX1NUOgotCQl2aWtfaW5pdF9zdChiYXNlLCBpcnFfc3RhcnQsIHZpY19zb3VyY2VzKTsKLQkJcmV0dXJuOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZJQzogdW5rbm93biB2ZW5kb3IsIGNvbnRpbnVpbmcgYW55d2F5c1xuIik7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgQU1CQV9WRU5ET1JfQVJNOgotCQlicmVhazsKLQl9Ci0KLQkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGluaXRpYWxseS4gKi8KLQotCXdyaXRlbCgwLCBiYXNlICsgVklDX0lOVF9TRUxFQ1QpOwotCXdyaXRlbCgwLCBiYXNlICsgVklDX0lOVF9FTkFCTEUpOwotCXdyaXRlbCh+MCwgYmFzZSArIFZJQ19JTlRfRU5BQkxFX0NMRUFSKTsKLQl3cml0ZWwoMCwgYmFzZSArIFZJQ19JUlFfU1RBVFVTKTsKLQl3cml0ZWwoMCwgYmFzZSArIFZJQ19JVENSKTsKLQl3cml0ZWwofjAsIGJhc2UgKyBWSUNfSU5UX1NPRlRfQ0xFQVIpOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgd2UgY2xlYXIgYWxsIGV4aXN0aW5nIGludGVycnVwdHMKLQkgKi8KLQl3cml0ZWwoMCwgYmFzZSArIFZJQ19QTDE5MF9WRUNUX0FERFIpOwotCWZvciAoaSA9IDA7IGkgPCAxOTsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCQl2YWx1ZSA9IHJlYWRsKGJhc2UgKyBWSUNfUEwxOTBfVkVDVF9BRERSKTsKLQkJd3JpdGVsKHZhbHVlLCBiYXNlICsgVklDX1BMMTkwX1ZFQ1RfQUREUik7Ci0JfQotCi0JdmljX2luaXQyKGJhc2UpOwotCi0JZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJaWYgKHZpY19zb3VyY2VzICYgKDEgPDwgaSkpIHsKLQkJCXVuc2lnbmVkIGludCBpcnEgPSBpcnFfc3RhcnQgKyBpOwotCi0JCQlzZXRfaXJxX2NoaXAoaXJxLCAmdmljX2NoaXApOwotCQkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCBiYXNlKTsKLQkJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwotCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKLQkJfQotCX0KLQotCXZpY19wbV9yZWdpc3RlcihiYXNlLCBpcnFfc3RhcnQsIHJlc3VtZV9zb3VyY2VzKTsKLX0KLQogLyoKICAqIFRoZSBQTDE5MCBjZWxsIGZyb20gQVJNIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IFNUIHRvIGhhbmRsZSA2NCBpbnRlcnJ1cHRzLgogICogVGhlIG9yaWdpbmFsIGNlbGwgaGFzIDMyIGludGVycnVwdHMsIHdoaWxlIHRoZSBtb2RpZmllZCBvbmUgaGFzIDY0LApAQCAtMzUxLDcgKzI4MCw3IEBACiAgKiB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgY2FsbGVkIHR3aWNlLCB3aXRoIGJhc2Ugc2V0IHRvIG9mZnNldCAwMDAKICAqICBhbmQgMDIwIHdpdGhpbiB0aGUgcGFnZS4gV2UgY2FsbCB0aGlzICJzZWNvbmQgYmxvY2siLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgdmlrX2luaXRfc3Qodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0LAorc3RhdGljIHZvaWQgX19pbml0IHZpY19pbml0X3N0KHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50IGlycV9zdGFydCwKIAkJCQl1MzIgdmljX3NvdXJjZXMpCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC00MDAsMyArMzI5LDczIEBACiAJCX0KIAl9CiB9CisKKy8qKgorICogdmljX2luaXQgLSBpbml0aWFsaXNlIGEgdmVjdG9yZWQgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAqIEBiYXNlOiBpb21lbSBiYXNlIGFkZHJlc3MKKyAqIEBpcnFfc3RhcnQ6IHN0YXJ0aW5nIGludGVycnVwdCBudW1iZXIsIG11c3QgYmUgbXVsaXBsZSBvZiAzMgorICogQHZpY19zb3VyY2VzOiBiaXRtYXNrIG9mIGludGVycnVwdCBzb3VyY2VzIHRvIGFsbG93CisgKiBAcmVzdW1lX3NvdXJjZXM6IGJpdG1hc2sgb2YgaW50ZXJydXB0IHNvdXJjZXMgdG8gYWxsb3cgZm9yIHJlc3VtZQorICovCit2b2lkIF9faW5pdCB2aWNfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnFfc3RhcnQsCisJCSAgICAgdTMyIHZpY19zb3VyY2VzLCB1MzIgcmVzdW1lX3NvdXJjZXMpCit7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIGNlbGxpZCA9IDA7CisJZW51bSBhbWJhX3ZlbmRvciB2ZW5kb3I7CisKKwkvKiBJZGVudGlmeSB3aGljaCBWSUMgY2VsbCB0aGlzIG9uZSBpcywgYnkgcmVhZGluZyB0aGUgSUQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXUzMiBhZGRyID0gKCh1MzIpYmFzZSAmIFBBR0VfTUFTSykgKyAweGZlMCArIChpICogNCk7CisJCWNlbGxpZCB8PSAocmVhZGwoYWRkcikgJiAweGZmKSA8PCAoOCAqIGkpOworCX0KKwl2ZW5kb3IgPSAoY2VsbGlkID4+IDEyKSAmIDB4ZmY7CisJcHJpbnRrKEtFUk5fSU5GTyAiVklDIEAlcDogaWQgMHglMDh4LCB2ZW5kb3IgMHglMDJ4XG4iLAorCSAgICAgICBiYXNlLCBjZWxsaWQsIHZlbmRvcik7CisKKwlzd2l0Y2godmVuZG9yKSB7CisJY2FzZSBBTUJBX1ZFTkRPUl9TVDoKKwkJdmljX2luaXRfc3QoYmFzZSwgaXJxX3N0YXJ0LCB2aWNfc291cmNlcyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJWSUM6IHVua25vd24gdmVuZG9yLCBjb250aW51aW5nIGFueXdheXNcbiIpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEFNQkFfVkVORE9SX0FSTToKKwkJYnJlYWs7CisJfQorCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBpbml0aWFsbHkuICovCisKKwl3cml0ZWwoMCwgYmFzZSArIFZJQ19JTlRfU0VMRUNUKTsKKwl3cml0ZWwoMCwgYmFzZSArIFZJQ19JTlRfRU5BQkxFKTsKKwl3cml0ZWwofjAsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRV9DTEVBUik7CisJd3JpdGVsKDAsIGJhc2UgKyBWSUNfSVJRX1NUQVRVUyk7CisJd3JpdGVsKDAsIGJhc2UgKyBWSUNfSVRDUik7CisJd3JpdGVsKH4wLCBiYXNlICsgVklDX0lOVF9TT0ZUX0NMRUFSKTsKKworCS8qCisJICogTWFrZSBzdXJlIHdlIGNsZWFyIGFsbCBleGlzdGluZyBpbnRlcnJ1cHRzCisJICovCisJd3JpdGVsKDAsIGJhc2UgKyBWSUNfUEwxOTBfVkVDVF9BRERSKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTk7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwkJdmFsdWUgPSByZWFkbChiYXNlICsgVklDX1BMMTkwX1ZFQ1RfQUREUik7CisJCXdyaXRlbCh2YWx1ZSwgYmFzZSArIFZJQ19QTDE5MF9WRUNUX0FERFIpOworCX0KKworCXZpY19pbml0MihiYXNlKTsKKworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWlmICh2aWNfc291cmNlcyAmICgxIDw8IGkpKSB7CisJCQl1bnNpZ25lZCBpbnQgaXJxID0gaXJxX3N0YXJ0ICsgaTsKKworCQkJc2V0X2lycV9jaGlwKGlycSwgJnZpY19jaGlwKTsKKwkJCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgYmFzZSk7CisJCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJCX0KKwl9CisKKwl2aWNfcG1fcmVnaXN0ZXIoYmFzZSwgaXJxX3N0YXJ0LCByZXN1bWVfc291cmNlcyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0NTcyZDk0MGhmZWtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDU3MmQ5NDBoZmVrX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmQ3MjRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDU3MmQ5NDBoZmVrX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE2NDAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzcKKyMgRnJpIERlYyAgNSAxMDo1ODo0NyAyMDA4CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1BVDU3MkQ5NDBIRiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKK0NPTkZJR19UQVNLU1RBVFM9eQorIyBDT05GSUdfVEFTS19ERUxBWV9BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19UQVNLX1hBQ0NUPXkKK0NPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eQorQ09ORklHX0FVRElUPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CitDT05GSUdfQ0dST1VQUz15CisjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9GUkVFWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9ERVZJQ0UgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKK0NPTkZJR19SVF9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19VU0VSX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DR1JPVVBfU0NIRUQ9eQorQ09ORklHX0NHUk9VUF9DUFVBQ0NUPXkKKyMgQ09ORklHX1JFU09VUkNFX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKK0NPTkZJR19SRUxBWT15CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfTUFSS0VSUz15CitDT05GSUdfT1BST0ZJTEU9bQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0tQUk9CRVM9eQorQ09ORklHX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MT15CisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCisKKyMKKyMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAorIworIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05RzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MUNBUDkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0FUNTcyRDk0MEhGPXkKK0NPTkZJR19BVDkxX1BNQ19VTklUPXkKKworIworIyBBVDU3MkQ5NDBIRiBCb2FyZCBUeXBlCisjCitDT05GSUdfTUFDSF9BVDU3MkQ5NDBIRkVCPXkKKworIworIyBBVDkxIEJvYXJkIE9wdGlvbnMKKyMKKyMgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0FUTUVMX0JVU1dJRFRIXzE2IGlzIG5vdCBzZXQKK0NPTkZJR19OVU1fU0VSSUFMPTMKKworIworIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucworIworQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUz15CitDT05GSUdfQVQ5MV9USU1FUl9IWj0xMDAKK0NPTkZJR19BVDkxX0VBUkxZX0RCR1U9eQorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDAgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDEgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDIgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDMgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDQgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDUgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNOTI2VD15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CitDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0wCitDT05GSUdfWkJPT1RfUk9NX0JTUz0wCitDT05GSUdfQ01ETElORT0ibWVtPTQ4TSBjb25zb2xlPXR0eVMwIGluaXRyZD0weDIxMTAwMDAwLDMxNDU3Mjggcm9vdD0vZGV2L3JhbTAgcncgaXA9MTcyLjE2LjEuMTgxIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfS0VYRUM9eQorQ09ORklHX0FUQUdTX1BST0M9eQorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKK0NPTkZJR19GUEVfTldGUEVfWFA9eQorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPW0KK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCitDT05GSUdfTkVUX1BLVEdFTj1tCitDT05GSUdfTkVUX1RDUFBST0JFPW0KKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKK0NPTkZJR19DQU49bQorQ09ORklHX0NBTl9SQVc9bQorQ09ORklHX0NBTl9CQ009bQorCisjCisjIENBTiBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0NBTl9WQ0FOPW0KK0NPTkZJR19DQU5fREVCVUdfREVWSUNFUz15CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCisjIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPW0KK0NPTkZJR19NVEQ9bQorQ09ORklHX01URF9ERUJVRz15CitDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MQorQ09ORklHX01URF9DT05DQVQ9bQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj1tCitDT05GSUdfTVREX0JMS0RFVlM9bQorQ09ORklHX01URF9CTE9DSz1tCitDT05GSUdfTVREX0JMT0NLX1JPPW0KK0NPTkZJR19GVEw9bQorQ09ORklHX05GVEw9bQorQ09ORklHX05GVExfUlc9eQorQ09ORklHX0lORlRMPW0KK0NPTkZJR19SRkRfRlRMPW0KK0NPTkZJR19TU0ZEQz1tCitDT05GSUdfTVREX09PUFM9bQorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST1tCitDT05GSUdfTVREX0pFREVDUFJPQkU9bQorQ09ORklHX01URF9HRU5fUFJPQkU9bQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD1tCitDT05GSUdfTVREX0NGSV9BTURTVEQ9bQorQ09ORklHX01URF9DRklfU1RBQT1tCitDT05GSUdfTVREX0NGSV9VVElMPW0KK0NPTkZJR19NVERfUkFNPW0KK0NPTkZJR19NVERfUk9NPW0KK0NPTkZJR19NVERfQUJTRU5UPW0KKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorQ09ORklHX01URF9QSFlTTUFQPW0KK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHg0MDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAorQ09ORklHX01URF9QTEFUUkFNPW0KKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfREFUQUZMQVNIPW0KKyMgQ09ORklHX01URF9EQVRBRkxBU0hfV1JJVEVfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9EQVRBRkxBU0hfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTTI1UDgwPW0KK0NPTkZJR19NMjVQWFhfVVNFX0ZBU1RfUkVBRD15CitDT05GSUdfTVREX1NMUkFNPW0KK0NPTkZJR19NVERfUEhSQU09bQorQ09ORklHX01URF9NVERSQU09bQorQ09ORklHX01URFJBTV9UT1RBTF9TSVpFPTQwOTYKK0NPTkZJR19NVERSQU1fRVJBU0VfU0laRT0xMjgKK0NPTkZJR19NVERfQkxPQ0syTVREPW0KKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9bQorQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURT15CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPW0KK0NPTkZJR19NVERfTkFORF9ESVNLT05DSElQPW0KKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQUREUkVTUz0wCisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQX0JCVFdSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0FUTUVMIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9OQU5EU0lNPW0KK0NPTkZJR19NVERfTkFORF9QTEFURk9STT1tCitDT05GSUdfTVREX0FMQVVEQT1tCisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCitDT05GSUdfTVREX1VCST1tCitDT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgorQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQorQ09ORklHX01URF9VQklfR0xVRUJJPXkKKworIworIyBVQkkgZGVidWdnaW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX01URF9VQklfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKK0NPTkZJR19BVE1FTF9UQ0xJQj15CitDT05GSUdfQVRNRUxfVENCX0NMS1NSQz15CitDT05GSUdfQVRNRUxfVENCX0NMS1NSQ19CTE9DSz0wCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CitDT05GSUdfQVRNRUxfU1NDPW0KKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1JBSURfQVRUUlM9bQorQ09ORklHX1NDU0k9bQorQ09ORklHX1NDU0lfRE1BPXkKK0NPTkZJR19TQ1NJX1RHVD1tCisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9bQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9bQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9bQorQ09ORklHX0NIUl9ERVZfU0NIPW0KKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorQ09ORklHX1NDU0lfTE9HR0lORz15CitDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorQ09ORklHX0JPTkRJTkc9bQorQ09ORklHX01BQ1ZMQU49bQorQ09ORklHX0VRVUFMSVpFUj1tCitDT05GSUdfVFVOPW0KK0NPTkZJR19WRVRIPW0KK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT1tCitDT05GSUdfREFWSUNPTV9QSFk9bQorQ09ORklHX1FTRU1JX1BIWT1tCitDT05GSUdfTFhUX1BIWT1tCitDT05GSUdfQ0lDQURBX1BIWT1tCitDT05GSUdfVklURVNTRV9QSFk9bQorQ09ORklHX1NNU0NfUEhZPW0KK0NPTkZJR19CUk9BRENPTV9QSFk9bQorQ09ORklHX0lDUExVU19QSFk9bQorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NRElPX0JJVEJBTkc9bQorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPW0KK0NPTkZJR19NQUNCPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCitDT05GSUdfV0xBTl9QUkU4MDIxMT15CitDT05GSUdfU1RSSVA9bQorQ09ORklHX1dMQU5fODAyMTE9eQorQ09ORklHX0xJQkVSVEFTPW0KK0NPTkZJR19MSUJFUlRBU19VU0I9bQorQ09ORklHX0xJQkVSVEFTX1NESU89bQorIyBDT05GSUdfTElCRVJUQVNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9aRDEyMDE9bQorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfSE9TVEFQPW0KK0NPTkZJR19IT1NUQVBfRklSTVdBUkU9eQorQ09ORklHX0hPU1RBUF9GSVJNV0FSRV9OVlJBTT15CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKK0NPTkZJR19VU0JfQ0FUQz1tCitDT05GSUdfVVNCX0tBV0VUSD1tCitDT05GSUdfVVNCX1BFR0FTVVM9bQorQ09ORklHX1VTQl9SVEw4MTUwPW0KK0NPTkZJR19VU0JfVVNCTkVUPW0KK0NPTkZJR19VU0JfTkVUX0FYODgxN1g9bQorQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9bQorQ09ORklHX1VTQl9ORVRfRE05NjAxPW0KKyMgQ09ORklHX1VTQl9ORVRfU01TQzk1WFggaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfR0w2MjBBPW0KK0NPTkZJR19VU0JfTkVUX05FVDEwODA9bQorQ09ORklHX1VTQl9ORVRfUExVU0I9bQorQ09ORklHX1VTQl9ORVRfTUNTNzgzMD1tCitDT05GSUdfVVNCX05FVF9STkRJU19IT1NUPW0KK0NPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQ9bQorQ09ORklHX1VTQl9BTElfTTU2MzI9eQorQ09ORklHX1VTQl9BTjI3MjA9eQorQ09ORklHX1VTQl9CRUxLSU49eQorQ09ORklHX1VTQl9BUk1MSU5VWD15CitDT05GSUdfVVNCX0VQU09OMjg4OD15CitDT05GSUdfVVNCX0tDMjE5MD15CisjIENPTkZJR19VU0JfTkVUX1pBVVJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9QT0xMREVWPW0KKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9bQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPW0KK0NPTkZJR19JTlBVVF9FVkJVRz1tCisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorQ09ORklHX0tFWUJPQVJEX1NVTktCRD1tCitDT05GSUdfS0VZQk9BUkRfTEtLQkQ9bQorQ09ORklHX0tFWUJPQVJEX1hUS0JEPW0KK0NPTkZJR19LRVlCT0FSRF9ORVdUT049bQorQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZPW0KK0NPTkZJR19LRVlCT0FSRF9HUElPPW0KK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPW0KK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKK0NPTkZJR19NT1VTRV9TRVJJQUw9bQorQ09ORklHX01PVVNFX0FQUExFVE9VQ0g9bQorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfVlNYWFhBQT1tCitDT05GSUdfTU9VU0VfR1BJTz1tCisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVUlOUFVUPW0KKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCitDT05GSUdfU0VSSU9fTElCUFMyPXkKK0NPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CitDT05GSUdfTl9IRExDPW0KKyMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAorQ09ORklHX1NQRUNJQUxJWD1tCitDT05GSUdfUklPPW0KKyMgQ09ORklHX1JJT19PTERQQ0kgaXMgbm90IHNldAorQ09ORklHX1NUQUxEUlY9eQorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9BVE1FTD15CitDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9BVE1FTF9QREM9eQorIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorQ09ORklHX0lQTUlfSEFORExFUj1tCisjIENPTkZJR19JUE1JX1BBTklDX0VWRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19JUE1JX0RFVklDRV9JTlRFUkZBQ0U9bQorQ09ORklHX0lQTUlfU0k9bQorQ09ORklHX0lQTUlfV0FUQ0hET0c9bQorQ09ORklHX0lQTUlfUE9XRVJPRkY9bQorQ09ORklHX0hXX1JBTkRPTT15CitDT05GSUdfTlZSQU09bQorQ09ORklHX1IzOTY0PW0KK0NPTkZJR19SQVdfRFJJVkVSPW0KK0NPTkZJR19NQVhfUkFXX0RFVlM9MjU2CitDT05GSUdfVENHX1RQTT1tCitDT05GSUdfVENHX05TQz1tCitDT05GSUdfVENHX0FUTUVMPW0KK0NPTkZJR19JMkM9bQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworQ09ORklHX0RTMTY4Mj1tCisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0VFUFJPTT1tCitDT05GSUdfU0VOU09SU19QQ0Y4NTc0PW0KKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX1BDRjg1OTE9bQorQ09ORklHX1NFTlNPUlNfTUFYNjg3NT1tCitDT05GSUdfU0VOU09SU19UU0wyNTUwPW0KKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQVRNRUw9eQorQ09ORklHX1NQSV9CSVRCQU5HPW0KKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworQ09ORklHX1NQSV9BVDI1PW0KK0NPTkZJR19TUElfU1BJREVWPW0KKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorQ09ORklHX1NORF9IV0RFUD1tCitDT05GSUdfU05EX1JBV01JREk9bQorQ09ORklHX1NORF9TRVFVRU5DRVI9bQorQ09ORklHX1NORF9TRVFfRFVNTVk9bQorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCisjIENPTkZJR19TTkRfUENNX09TU19QTFVHSU5TIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CitDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFJJVkVSUz15CitDT05GSUdfU05EX0RVTU1ZPW0KK0NPTkZJR19TTkRfVklSTUlEST1tCisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FSTT15CitDT05GSUdfU05EX1NQST15CisjIENPTkZJR19TTkRfQVQ3M0MyMTMgaXMgbm90IHNldAorQ09ORklHX1NORF9VU0I9eQorQ09ORklHX1NORF9VU0JfQVVESU89bQorQ09ORklHX1NORF9VU0JfQ0FJQVE9bQorQ09ORklHX1NORF9VU0JfQ0FJQVFfSU5QVVQ9eQorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD1tCisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0hJRFJBVz15CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPW0KKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCitDT05GSUdfVVNCX0tCRD1tCitDT05GSUdfVVNCX01PVVNFPW0KKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD1tCitDT05GSUdfSElEX0FQUExFPW0KK0NPTkZJR19ISURfQkVMS0lOPW0KK0NPTkZJR19ISURfQlJJR0hUPW0KK0NPTkZJR19ISURfQ0hFUlJZPW0KK0NPTkZJR19ISURfQ0hJQ09OWT1tCitDT05GSUdfSElEX0NZUFJFU1M9bQorQ09ORklHX0hJRF9ERUxMPW0KK0NPTkZJR19ISURfRVpLRVk9bQorQ09ORklHX0hJRF9HWVJBVElPTj1tCitDT05GSUdfSElEX0xPR0lURUNIPW0KKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPW0KK0NPTkZJR19ISURfTU9OVEVSRVk9bQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD1tCisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPW0KK0NPTkZJR19ISURfU0FNU1VORz1tCitDT05GSUdfSElEX1NPTlk9bQorQ09ORklHX0hJRF9TVU5QTFVTPW0KKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9eQorQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009eQorQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMD15CitDT05GSUdfVVNCX1NUT1JBR0VfRFBDTT15CitDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQ9eQorQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT15CitDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PXkKK0NPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVD15CitDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1RPUkFHRV9LQVJNQT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTElCVVNVQUw9eQorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCitDT05GSUdfVVNCX1NFUklBTD1tCitDT05GSUdfVVNCX0VaVVNCPXkKK0NPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1PW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9ERUJVRz1tCisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworQ09ORklHX1VTQl9FTUk2Mj1tCitDT05GSUdfVVNCX0VNSTI2PW0KK0NPTkZJR19VU0JfQURVVFVYPW0KKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfVEVTVD1tCisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD1tCitDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUz15CitDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUz15CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorQ09ORklHX1VTQl9HQURHRVRfQVQ5MT15CitDT05GSUdfVVNCX0FUOTE9bQorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9aRVJPPW0KK0NPTkZJR19VU0JfRVRIPW0KK0NPTkZJR19VU0JfRVRIX1JORElTPXkKK0NPTkZJR19VU0JfR0FER0VURlM9bQorQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19TRVJJQUw9bQorQ09ORklHX1VTQl9NSURJX0dBREdFVD1tCisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorQ09ORklHX1NESU9fVUFSVD1tCisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0FUOTE9eQorQ09ORklHX01NQ19TUEk9bQorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9bQorCisjCisjIExFRCBkcml2ZXJzCisjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfR1BJTz1tCisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj1tCitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD1tCisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CitDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMPXkKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9EUzEzMDc9bQorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9EUzEzMDU9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0FUOTFTQU05IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfSkJEX0RFQlVHPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKK0NPTkZJR19SRUlTRVJGU19GUz1tCitDT05GSUdfUkVJU0VSRlNfQ0hFQ0s9eQorQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTz15CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTRV9GUz1tCitDT05GSUdfR0VORVJJQ19BQ0w9eQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz1tCisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OVEZTX1JXPXkKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPW0KK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTz15CisjIENPTkZJR19VQklGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPW0KKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorQ09ORklHX05GU19WND15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMl9BQ0w9eQorQ09ORklHX05GU0RfVjM9eQorQ09ORklHX05GU0RfVjNfQUNMPXkKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19MT0NLRD1tCitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9bQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz1tCitDT05GSUdfU1VOUlBDX0dTUz1tCisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT1tCisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTX1dFQUtfUFdfSEFTSD15CisjIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01BQ19QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfQlNEX0RJU0tMQUJFTD15CitDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OPXkKK0NPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT049eQorQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTD15CitDT05GSUdfTERNX1BBUlRJVElPTj15CitDT05GSUdfTERNX0RFQlVHPXkKK0NPTkZJR19TR0lfUEFSVElUSU9OPXkKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX1NVTl9QQVJUSVRJT049eQorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iY3A0MzciCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PW0KK0NPTkZJR19ETE09bQorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX1VOVVNFRF9TWU1CT0xTPXkKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX1JORz15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz1tCisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPW0KKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PW0KKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD1tCitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0NSQzc9bQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfQVVESVRfR0VORVJJQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPW0KK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX0xaT19DT01QUkVTUz1tCitDT05GSUdfTFpPX0RFQ09NUFJFU1M9bQorQ09ORklHX1JFRURfU09MT01PTj1tCitDT05GSUdfUkVFRF9TT0xPTU9OX0RFQzE2PXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF80NDMwc2RwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF80NDMwc2RwX2RlZmNvbmZpZwppbmRleCAzZGU2NDBhLi5jNDhkN2I4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfNDQzMHNkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzQ0MzBzZHBfZGVmY29uZmlnCkBAIC0yNDIsMTAgKzI0MiwxMyBAQAogIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKIENPTkZJR19IQVNfVExTX1JFRz15CitDT05GSUdfT1VURVJfQ0FDSEU9eQorQ09ORklHX0NBQ0hFX0wyWDA9eQogQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01CiAjIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUk1fRVJSQVRBXzQ1ODY5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUk1fRVJSQVRBXzQ2MDA3NSBpcyBub3Qgc2V0CitDT05GSUdfUEwzMTBfRVJSQVRBXzU4ODM2OT15CiBDT05GSUdfQVJNX0dJQz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggZDBkYWVhYi4uZThkZGVjMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTIzNSw2ICsyMzUsMjM0IEBACiAjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQlzbXBfbWIoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQlzbXBfbWIoKQogCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0FUT01JQzY0Cit0eXBlZGVmIHN0cnVjdCB7CisJdTY0IF9fYWxpZ25lZCg4KSBjb3VudGVyOworfSBhdG9taWM2NF90OworCisjZGVmaW5lIEFUT01JQzY0X0lOSVQoaSkgeyAoaSkgfQorCitzdGF0aWMgaW5saW5lIHU2NCBhdG9taWM2NF9yZWFkKGF0b21pYzY0X3QgKnYpCit7CisJdTY0IHJlc3VsdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X3JlYWRcbiIKKyIJbGRyZXhkCSUwLCAlSDAsIFslMV0iCisJOiAiPSZyIiAocmVzdWx0KQorCTogInIiICgmdi0+Y291bnRlcikKKwkpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X3NldChhdG9taWM2NF90ICp2LCB1NjQgaSkKK3sKKwl1NjQgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfc2V0XG4iCisiMToJbGRyZXhkCSUwLCAlSDAsIFslMV1cbiIKKyIJc3RyZXhkCSUwLCAlMiwgJUgyLCBbJTFdXG4iCisiCXRlcQklMCwgIzBcbiIKKyIJYm5lCTFiIgorCTogIj0mciIgKHRtcCkKKwk6ICJyIiAoJnYtPmNvdW50ZXIpLCAiciIgKGkpCisJOiAiY2MiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X2FkZCh1NjQgaSwgYXRvbWljNjRfdCAqdikKK3sKKwl1NjQgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfYWRkXG4iCisiMToJbGRyZXhkCSUwLCAlSDAsIFslMl1cbiIKKyIJYWRkcwklMCwgJTAsICUzXG4iCisiCWFkYwklSDAsICVIMCwgJUgzXG4iCisiCXN0cmV4ZAklMSwgJTAsICVIMCwgWyUyXVxuIgorIgl0ZXEJJTEsICMwXG4iCisiCWJuZQkxYiIKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodG1wKQorCTogInIiICgmdi0+Y291bnRlciksICJyIiAoaSkKKwk6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBhdG9taWM2NF9hZGRfcmV0dXJuKHU2NCBpLCBhdG9taWM2NF90ICp2KQoreworCXU2NCByZXN1bHQ7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlzbXBfbWIoKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X2FkZF9yZXR1cm5cbiIKKyIxOglsZHJleGQJJTAsICVIMCwgWyUyXVxuIgorIglhZGRzCSUwLCAlMCwgJTNcbiIKKyIJYWRjCSVIMCwgJUgwLCAlSDNcbiIKKyIJc3RyZXhkCSUxLCAlMCwgJUgwLCBbJTJdXG4iCisiCXRlcQklMSwgIzBcbiIKKyIJYm5lCTFiIgorCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0bXApCisJOiAiciIgKCZ2LT5jb3VudGVyKSwgInIiIChpKQorCTogImNjIik7CisKKwlzbXBfbWIoKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9zdWIodTY0IGksIGF0b21pYzY0X3QgKnYpCit7CisJdTY0IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X3N1YlxuIgorIjE6CWxkcmV4ZAklMCwgJUgwLCBbJTJdXG4iCisiCXN1YnMJJTAsICUwLCAlM1xuIgorIglzYmMJJUgwLCAlSDAsICVIM1xuIgorIglzdHJleGQJJTEsICUwLCAlSDAsIFslMl1cbiIKKyIJdGVxCSUxLCAjMFxuIgorIglibmUJMWIiCisJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRtcCkKKwk6ICJyIiAoJnYtPmNvdW50ZXIpLCAiciIgKGkpCisJOiAiY2MiKTsKK30KKworc3RhdGljIGlubGluZSB1NjQgYXRvbWljNjRfc3ViX3JldHVybih1NjQgaSwgYXRvbWljNjRfdCAqdikKK3sKKwl1NjQgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJc21wX21iKCk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiQCBhdG9taWM2NF9zdWJfcmV0dXJuXG4iCisiMToJbGRyZXhkCSUwLCAlSDAsIFslMl1cbiIKKyIJc3VicwklMCwgJTAsICUzXG4iCisiCXNiYwklSDAsICVIMCwgJUgzXG4iCisiCXN0cmV4ZAklMSwgJTAsICVIMCwgWyUyXVxuIgorIgl0ZXEJJTEsICMwXG4iCisiCWJuZQkxYiIKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodG1wKQorCTogInIiICgmdi0+Y291bnRlciksICJyIiAoaSkKKwk6ICJjYyIpOworCisJc21wX21iKCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIHU2NCBhdG9taWM2NF9jbXB4Y2hnKGF0b21pYzY0X3QgKnB0ciwgdTY0IG9sZCwgdTY0IG5ldykKK3sKKwl1NjQgb2xkdmFsOworCXVuc2lnbmVkIGxvbmcgcmVzOworCisJc21wX21iKCk7CisKKwlkbyB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X2NtcHhjaGdcbiIKKwkJImxkcmV4ZAkJJTEsICVIMSwgWyUyXVxuIgorCQkibW92CQklMCwgIzBcbiIKKwkJInRlcQkJJTEsICUzXG4iCisJCSJ0ZXFlcQkJJUgxLCAlSDNcbiIKKwkJInN0cmV4ZGVxCSUwLCAlNCwgJUg0LCBbJTJdIgorCQk6ICI9JnIiIChyZXMpLCAiPSZyIiAob2xkdmFsKQorCQk6ICJyIiAoJnB0ci0+Y291bnRlciksICJyIiAob2xkKSwgInIiIChuZXcpCisJCTogImNjIik7CisJfSB3aGlsZSAocmVzKTsKKworCXNtcF9tYigpOworCisJcmV0dXJuIG9sZHZhbDsKK30KKworc3RhdGljIGlubGluZSB1NjQgYXRvbWljNjRfeGNoZyhhdG9taWM2NF90ICpwdHIsIHU2NCBuZXcpCit7CisJdTY0IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCXNtcF9tYigpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfeGNoZ1xuIgorIjE6CWxkcmV4ZAklMCwgJUgwLCBbJTJdXG4iCisiCXN0cmV4ZAklMSwgJTMsICVIMywgWyUyXVxuIgorIgl0ZXEJJTEsICMwXG4iCisiCWJuZQkxYiIKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodG1wKQorCTogInIiICgmcHRyLT5jb3VudGVyKSwgInIiIChuZXcpCisJOiAiY2MiKTsKKworCXNtcF9tYigpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB1NjQgYXRvbWljNjRfZGVjX2lmX3Bvc2l0aXZlKGF0b21pYzY0X3QgKnYpCit7CisJdTY0IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCXNtcF9tYigpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfZGVjX2lmX3Bvc2l0aXZlXG4iCisiMToJbGRyZXhkCSUwLCAlSDAsIFslMl1cbiIKKyIJc3VicwklMCwgJTAsICMxXG4iCisiCXNiYwklSDAsICVIMCwgIzBcbiIKKyIJdGVxCSVIMCwgIzBcbiIKKyIJYm1pCTJmXG4iCisiCXN0cmV4ZAklMSwgJTAsICVIMCwgWyUyXVxuIgorIgl0ZXEJJTEsICMwXG4iCisiCWJuZQkxYlxuIgorIjI6IgorCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0bXApCisJOiAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIik7CisKKwlzbXBfbWIoKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF91bmxlc3MoYXRvbWljNjRfdCAqdiwgdTY0IGEsIHU2NCB1KQoreworCXU2NCB2YWw7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJaW50IHJldCA9IDE7CisKKwlzbXBfbWIoKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X2FkZF91bmxlc3NcbiIKKyIxOglsZHJleGQJJTAsICVIMCwgWyUzXVxuIgorIgl0ZXEJJTAsICU0XG4iCisiCXRlcWVxCSVIMCwgJUg0XG4iCisiCW1vdmVxCSUxLCAjMFxuIgorIgliZXEJMmZcbiIKKyIJYWRkcwklMCwgJTAsICU1XG4iCisiCWFkYwklSDAsICVIMCwgJUg1XG4iCisiCXN0cmV4ZAklMiwgJTAsICVIMCwgWyUzXVxuIgorIgl0ZXEJJTIsICMwXG4iCisiCWJuZQkxYlxuIgorIjI6IgorCTogIj0mciIgKHZhbCksICI9JnIiIChyZXQpLCAiPSZyIiAodG1wKQorCTogInIiICgmdi0+Y291bnRlciksICJyIiAodSksICJyIiAoYSkKKwk6ICJjYyIpOworCisJaWYgKHJldCkKKwkJc21wX21iKCk7CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIGF0b21pYzY0X2FkZF9uZWdhdGl2ZShhLCB2KQkoYXRvbWljNjRfYWRkX3JldHVybigoYSksICh2KSkgPCAwKQorI2RlZmluZSBhdG9taWM2NF9pbmModikJCQlhdG9taWM2NF9hZGQoMUxMLCAodikpCisjZGVmaW5lIGF0b21pYzY0X2luY19yZXR1cm4odikJCWF0b21pYzY0X2FkZF9yZXR1cm4oMUxMLCAodikpCisjZGVmaW5lIGF0b21pYzY0X2luY19hbmRfdGVzdCh2KQkoYXRvbWljNjRfaW5jX3JldHVybih2KSA9PSAwKQorI2RlZmluZSBhdG9taWM2NF9zdWJfYW5kX3Rlc3QoYSwgdikJKGF0b21pYzY0X3N1Yl9yZXR1cm4oKGEpLCAodikpID09IDApCisjZGVmaW5lIGF0b21pYzY0X2RlYyh2KQkJCWF0b21pYzY0X3N1YigxTEwsICh2KSkKKyNkZWZpbmUgYXRvbWljNjRfZGVjX3JldHVybih2KQkJYXRvbWljNjRfc3ViX3JldHVybigxTEwsICh2KSkKKyNkZWZpbmUgYXRvbWljNjRfZGVjX2FuZF90ZXN0KHYpCShhdG9taWM2NF9kZWNfcmV0dXJuKCh2KSkgPT0gMCkKKyNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpCWF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxTEwsIDBMTCkKKworI2Vsc2UgLyogIUNPTkZJR19HRU5FUklDX0FUT01JQzY0ICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljNjQuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F0b21pYy1sb25nLmg+CiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IGM3N2QyZmEuLjcyZGE3ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTQyLDcgKzQyLDggQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyMFQpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9BUk05MjJUKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyNVQpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9BUk0xMDIwKQorICAgIGRlZmluZWQoQ09ORklHX0NQVV9BUk05MjVUKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfQVJNMTAyMCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9BUk0xMDI2KQogIyBkZWZpbmUgTVVMVElfQ0FDSEUgMQogI2VuZGlmCiAKQEAgLTE5NiwyMSArMTk3LDYgQEAKICAqCURNQSBDYWNoZSBDb2hlcmVuY3kKICAqCT09PT09PT09PT09PT09PT09PT0KICAqCi0gKglkbWFfaW52X3JhbmdlKHN0YXJ0LCBlbmQpCi0gKgotICoJCUludmFsaWRhdGUgKGRpc2NhcmQpIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgotICoJCU1heSBub3Qgd3JpdGUgYmFjayBhbnkgZW50cmllcy4gIElmICdzdGFydCcgb3IgJ2VuZCcKLSAqCQlhcmUgbm90IGNhY2hlIGxpbmUgYWxpZ25lZCwgdGhvc2UgbGluZXMgbXVzdCBiZSB3cml0dGVuCi0gKgkJYmFjay4KLSAqCQktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcwotICoJCS0gZW5kICAgIC0gdmlydHVhbCBlbmQgYWRkcmVzcwotICoKLSAqCWRtYV9jbGVhbl9yYW5nZShzdGFydCwgZW5kKQotICoKLSAqCQlDbGVhbiAod3JpdGUgYmFjaykgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCi0gKgkJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKLSAqCQktIGVuZCAgICAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKLSAqCiAgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKICAqCiAgKgkJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCkBAIC0yMjcsOCArMjEzLDkgQEAKIAl2b2lkICgqY29oZXJlbnRfdXNlcl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAJdm9pZCAoKmZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpKHZvaWQgKiwgc2l6ZV90KTsKIAotCXZvaWQgKCpkbWFfaW52X3JhbmdlKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7Ci0Jdm9pZCAoKmRtYV9jbGVhbl9yYW5nZSkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworCXZvaWQgKCpkbWFfbWFwX2FyZWEpKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOworCXZvaWQgKCpkbWFfdW5tYXBfYXJlYSkoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CisKIAl2b2lkICgqZG1hX2ZsdXNoX3JhbmdlKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CiB9OwogCkBAIC0yNTgsOCArMjQ1LDggQEAKICAqIGlzIHZpc2libGUgdG8gRE1BLCBvciBkYXRhIHdyaXR0ZW4gYnkgRE1BIHRvIHN5c3RlbSBtZW1vcnkgaXMKICAqIHZpc2libGUgdG8gdGhlIENQVS4KICAqLwotI2RlZmluZSBkbWFjX2ludl9yYW5nZQkJCWNwdV9jYWNoZS5kbWFfaW52X3JhbmdlCi0jZGVmaW5lIGRtYWNfY2xlYW5fcmFuZ2UJCWNwdV9jYWNoZS5kbWFfY2xlYW5fcmFuZ2UKKyNkZWZpbmUgZG1hY19tYXBfYXJlYQkJCWNwdV9jYWNoZS5kbWFfbWFwX2FyZWEKKyNkZWZpbmUgZG1hY191bm1hcF9hcmVhCQljcHVfY2FjaGUuZG1hX3VubWFwX2FyZWEKICNkZWZpbmUgZG1hY19mbHVzaF9yYW5nZQkJY3B1X2NhY2hlLmRtYV9mbHVzaF9yYW5nZQogCiAjZWxzZQpAQCAtMjg0LDEyICsyNzEsMTIgQEAKICAqIGlzIHZpc2libGUgdG8gRE1BLCBvciBkYXRhIHdyaXR0ZW4gYnkgRE1BIHRvIHN5c3RlbSBtZW1vcnkgaXMKICAqIHZpc2libGUgdG8gdGhlIENQVS4KICAqLwotI2RlZmluZSBkbWFjX2ludl9yYW5nZQkJCV9fZ2x1ZShfQ0FDSEUsX2RtYV9pbnZfcmFuZ2UpCi0jZGVmaW5lIGRtYWNfY2xlYW5fcmFuZ2UJCV9fZ2x1ZShfQ0FDSEUsX2RtYV9jbGVhbl9yYW5nZSkKKyNkZWZpbmUgZG1hY19tYXBfYXJlYQkJCV9fZ2x1ZShfQ0FDSEUsX2RtYV9tYXBfYXJlYSkKKyNkZWZpbmUgZG1hY191bm1hcF9hcmVhCQlfX2dsdWUoX0NBQ0hFLF9kbWFfdW5tYXBfYXJlYSkKICNkZWZpbmUgZG1hY19mbHVzaF9yYW5nZQkJX19nbHVlKF9DQUNIRSxfZG1hX2ZsdXNoX3JhbmdlKQogCi1leHRlcm4gdm9pZCBkbWFjX2ludl9yYW5nZShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7Ci1leHRlcm4gdm9pZCBkbWFjX2NsZWFuX3JhbmdlKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGRtYWNfbWFwX2FyZWEoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CitleHRlcm4gdm9pZCBkbWFjX3VubWFwX2FyZWEoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CiBleHRlcm4gdm9pZCBkbWFjX2ZsdXNoX3JhbmdlKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKIAogI2VuZGlmCkBAIC0zMzAsMTIgKzMxNyw4IEBACiAgKiBwcm9jZXNzZXMgYWRkcmVzcyBzcGFjZS4gIFJlYWxseSwgd2Ugd2FudCB0byBhbGxvdyBvdXIgInVzZXIKICAqIHNwYWNlIiBtb2RlbCB0byBoYW5kbGUgdGhpcy4KICAqLwotI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCi0JZG8gewkJCQkJCQlcCi0JCW1lbWNweShkc3QsIHNyYywgbGVuKTsJCQkJXAotCQlmbHVzaF9wdHJhY2VfYWNjZXNzKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgbGVuLCAxKTtcCi0JfSB3aGlsZSAoMCkKLQorZXh0ZXJuIHZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCBwYWdlICosCisJdW5zaWduZWQgbG9uZywgdm9pZCAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwogI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKIAlkbyB7CQkJCQkJCVwKIAkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwkJCQlcCkBAIC0zNjksMTcgKzM1Miw2IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLXZpdnRfZmx1c2hfcHRyYWNlX2FjY2VzcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkgdW5zaWduZWQgbG9uZyB1YWRkciwgdm9pZCAqa2FkZHIsCi0JCQkgdW5zaWduZWQgbG9uZyBsZW4sIGludCB3cml0ZSkKLXsKLQlpZiAoY3B1bWFza190ZXN0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sodm1hLT52bV9tbSkpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWthZGRyOwotCQlfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZShhZGRyLCBhZGRyICsgbGVuKTsKLQl9Ci19Ci0KICNpZm5kZWYgQ09ORklHX0NQVV9DQUNIRV9WSVBUCiAjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKSBcCiAJCXZpdnRfZmx1c2hfY2FjaGVfbW0obW0pCkBAIC0zODcsMTUgKzM1OSwxMCBAQAogCQl2aXZ0X2ZsdXNoX2NhY2hlX3JhbmdlKHZtYSxzdGFydCxlbmQpCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLGFkZHIscGZuKSBcCiAJCXZpdnRfZmx1c2hfY2FjaGVfcGFnZSh2bWEsYWRkcixwZm4pCi0jZGVmaW5lIGZsdXNoX3B0cmFjZV9hY2Nlc3Modm1hLHBhZ2UsdWEsa2EsbGVuLHdyaXRlKSBcCi0JCXZpdnRfZmx1c2hfcHRyYWNlX2FjY2Vzcyh2bWEscGFnZSx1YSxrYSxsZW4sd3JpdGUpCiAjZWxzZQogZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIGV4dGVybiB2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdXNlcl9hZGRyLCB1bnNpZ25lZCBsb25nIHBmbik7Ci1leHRlcm4gdm9pZCBmbHVzaF9wdHJhY2VfYWNjZXNzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQl1bnNpZ25lZCBsb25nIHVhZGRyLCB2b2lkICprYWRkciwKLQkJCQl1bnNpZ25lZCBsb25nIGxlbiwgaW50IHdyaXRlKTsKICNlbmRpZgogCiAjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkgZmx1c2hfY2FjaGVfbW0obW0pCkBAIC00NDYsNiArNDEzLDE2IEBACiAJICAgIDogInIiICgwKSk7CiAjZW5kaWYKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKK3sKKwlpZiAoKGNhY2hlX2lzX3ZpdnQoKSB8fCBjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpKQorCSAgX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKGFkZHIsIChzaXplX3Qpc2l6ZSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKK3sKKwlpZiAoKGNhY2hlX2lzX3ZpdnQoKSB8fCBjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpKQorCSAgX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKGFkZHIsIChzaXplX3Qpc2l6ZSk7Cit9CiAKICNkZWZpbmUgQVJDSF9IQVNfRkxVU0hfQU5PTl9QQUdFCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfYW5vbl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2xrZGV2LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jbGtkZXYuaAppbmRleCBiNmVjN2M2Li43YTA2OTBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jbGtkZXYuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jbGtkZXYuaApAQCAtMjcsNCArMjcsNyBAQAogdm9pZCBjbGtkZXZfYWRkKHN0cnVjdCBjbGtfbG9va3VwICpjbCk7CiB2b2lkIGNsa2Rldl9kcm9wKHN0cnVjdCBjbGtfbG9va3VwICpjbCk7CiAKK3ZvaWQgY2xrZGV2X2FkZF90YWJsZShzdHJ1Y3QgY2xrX2xvb2t1cCAqLCBzaXplX3QpOworaW50IGNsa19hZGRfYWxpYXMoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc3RydWN0IGRldmljZSAqKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCBhOTYzMDBiLi4yNTZlZTFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTU3LDE4ICs1Nyw1OCBAQAogI2VuZGlmCiAKIC8qCi0gKiBETUEtY29uc2lzdGVudCBtYXBwaW5nIGZ1bmN0aW9ucy4gIFRoZXNlIGFsbG9jYXRlL2ZyZWUgYSByZWdpb24gb2YKLSAqIHVuY2FjaGVkLCB1bndyaXRlLWJ1ZmZlcmVkIG1hcHBlZCBtZW1vcnkgc3BhY2UgZm9yIHVzZSB3aXRoIERNQQotICogZGV2aWNlcy4gIFRoaXMgaXMgdGhlICJnZW5lcmljIiB2ZXJzaW9uLiAgVGhlIFBDSSBzcGVjaWZpYyB2ZXJzaW9uCi0gKiBpcyBpbiBwY2kuaAorICogVGhlIERNQSBBUEkgaXMgYnVpbHQgdXBvbiB0aGUgbm90aW9uIG9mICJidWZmZXIgb3duZXJzaGlwIi4gIEEgYnVmZmVyCisgKiBpcyBlaXRoZXIgZXhjbHVzaXZlbHkgb3duZWQgYnkgdGhlIENQVSAoYW5kIHRoZXJlZm9yZSBtYXkgYmUgYWNjZXNzZWQKKyAqIGJ5IGl0KSBvciBleGNsdXNpdmVseSBvd25lZCBieSB0aGUgRE1BIGRldmljZS4gIFRoZXNlIGhlbHBlciBmdW5jdGlvbnMKKyAqIHJlcHJlc2VudCB0aGUgdHJhbnNpdGlvbnMgYmV0d2VlbiB0aGVzZSB0d28gb3duZXJzaGlwIHN0YXRlcy4KICAqCi0gKiBOb3RlOiBEcml2ZXJzIHNob3VsZCBOT1QgdXNlIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHksIGFzIGl0IHdpbGwgYnJlYWsKLSAqIHBsYXRmb3JtcyB3aXRoIENPTkZJR19ETUFCT1VOQ0UuCi0gKiBVc2UgdGhlIGRyaXZlciBETUEgc3VwcG9ydCAtIHNlZSBkbWEtbWFwcGluZy5oIChkbWFfc3luY18qKQorICogTm90ZSwgaG93ZXZlciwgdGhhdCBvbiBsYXRlciBBUk1zLCB0aGlzIG5vdGlvbiBkb2VzIG5vdCB3b3JrIGR1ZSB0bworICogc3BlY3VsYXRpdmUgcHJlZmV0Y2hlcy4gIFdlIG1vZGVsIG91ciBhcHByb2FjaCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0CisgKiB0aGUgQ1BVIGRvZXMgZG8gc3BlY3VsYXRpdmUgcHJlZmV0Y2hlcywgd2hpY2ggbWVhbnMgd2UgY2xlYW4gY2FjaGVzCisgKiBiZWZvcmUgdHJhbnNmZXJzIGFuZCBkZWxheSBjYWNoZSBpbnZhbGlkYXRpb24gdW50aWwgdHJhbnNmZXIgY29tcGxldGlvbi4KKyAqCisgKiBQcml2YXRlIHN1cHBvcnQgZnVuY3Rpb25zOiB0aGVzZSBhcmUgbm90IHBhcnQgb2YgdGhlIEFQSSBhbmQgYXJlCisgKiBsaWFibGUgdG8gY2hhbmdlLiAgRHJpdmVycyBtdXN0IG5vdCB1c2UgdGhlc2UuCiAgKi8KLWV4dGVybiB2b2lkIGRtYV9jYWNoZV9tYWludChjb25zdCB2b2lkICprYWRkciwgc2l6ZV90IHNpemUsIGludCBydyk7Ci1leHRlcm4gdm9pZCBkbWFfY2FjaGVfbWFpbnRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJIHNpemVfdCBzaXplLCBpbnQgcncpOworc3RhdGljIGlubGluZSB2b2lkIF9fZG1hX3NpbmdsZV9jcHVfdG9fZGV2KGNvbnN0IHZvaWQgKmthZGRyLCBzaXplX3Qgc2l6ZSwKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJZXh0ZXJuIHZvaWQgX19fZG1hX3NpbmdsZV9jcHVfdG9fZGV2KGNvbnN0IHZvaWQgKiwgc2l6ZV90LAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CisKKwlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKKwkJX19fZG1hX3NpbmdsZV9jcHVfdG9fZGV2KGthZGRyLCBzaXplLCBkaXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kbWFfc2luZ2xlX2Rldl90b19jcHUoY29uc3Qgdm9pZCAqa2FkZHIsIHNpemVfdCBzaXplLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlleHRlcm4gdm9pZCBfX19kbWFfc2luZ2xlX2Rldl90b19jcHUoY29uc3Qgdm9pZCAqLCBzaXplX3QsCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKKworCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQorCQlfX19kbWFfc2luZ2xlX2Rldl90b19jcHUoa2FkZHIsIHNpemUsIGRpcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RtYV9wYWdlX2NwdV90b19kZXYoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2ZmLAorCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJZXh0ZXJuIHZvaWQgX19fZG1hX3BhZ2VfY3B1X3RvX2RldihzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBsb25nLAorCQlzaXplX3QsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKKworCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQorCQlfX19kbWFfcGFnZV9jcHVfdG9fZGV2KHBhZ2UsIG9mZiwgc2l6ZSwgZGlyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZG1hX3BhZ2VfZGV2X3RvX2NwdShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmYsCisJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlleHRlcm4gdm9pZCBfX19kbWFfcGFnZV9kZXZfdG9fY3B1KHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcsCisJCXNpemVfdCwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworCisJaWYgKCFhcmNoX2lzX2NvaGVyZW50KCkpCisJCV9fX2RtYV9wYWdlX2Rldl90b19jcHUocGFnZSwgb2ZmLCBzaXplLCBkaXIpOworfQogCiAvKgogICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGRldmljZSBETUEgYWRkcmVzcyBtYXNrIGNhbiBiZSBzdXBwb3J0ZWQKQEAgLTMwNCw4ICszNDQsNyBAQAogewogCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKIAotCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQotCQlkbWFfY2FjaGVfbWFpbnQoY3B1X2FkZHIsIHNpemUsIGRpcik7CisJX19kbWFfc2luZ2xlX2NwdV90b19kZXYoY3B1X2FkZHIsIHNpemUsIGRpcik7CiAKIAlyZXR1cm4gdmlydF90b19kbWEoZGV2LCBjcHVfYWRkcik7CiB9CkBAIC0zMjksOCArMzY4LDcgQEAKIHsKIAlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiAKLQlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKLQkJZG1hX2NhY2hlX21haW50X3BhZ2UocGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIpOworCV9fZG1hX3BhZ2VfY3B1X3RvX2RldihwYWdlLCBvZmZzZXQsIHNpemUsIGRpcik7CiAKIAlyZXR1cm4gcGFnZV90b19kbWEoZGV2LCBwYWdlKSArIG9mZnNldDsKIH0KQEAgLTM1Miw3ICszOTAsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSwKIAkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQkvKiBub3RoaW5nIHRvIGRvICovCisJX19kbWFfc2luZ2xlX2Rldl90b19jcHUoZG1hX3RvX3ZpcnQoZGV2LCBoYW5kbGUpLCBzaXplLCBkaXIpOwogfQogCiAvKioKQEAgLTM3Miw3ICs0MTAsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBoYW5kbGUsCiAJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7Ci0JLyogbm90aGluZyB0byBkbyAqLworCV9fZG1hX3BhZ2VfZGV2X3RvX2NwdShkbWFfdG9fcGFnZShkZXYsIGhhbmRsZSksIGhhbmRsZSAmIH5QQUdFX01BU0ssCisJCXNpemUsIGRpcik7CiB9CiAjZW5kaWYgLyogQ09ORklHX0RNQUJPVU5DRSAqLwogCkBAIC00MDAsNyArNDM5LDEwIEBACiB7CiAJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOwogCi0JZG1hYm91bmNlX3N5bmNfZm9yX2NwdShkZXYsIGhhbmRsZSwgb2Zmc2V0LCBzaXplLCBkaXIpOworCWlmICghZG1hYm91bmNlX3N5bmNfZm9yX2NwdShkZXYsIGhhbmRsZSwgb2Zmc2V0LCBzaXplLCBkaXIpKQorCQlyZXR1cm47CisKKwlfX2RtYV9zaW5nbGVfZGV2X3RvX2NwdShkbWFfdG9fdmlydChkZXYsIGhhbmRsZSkgKyBvZmZzZXQsIHNpemUsIGRpcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC00MTIsOCArNDU0LDcgQEAKIAlpZiAoIWRtYWJvdW5jZV9zeW5jX2Zvcl9kZXZpY2UoZGV2LCBoYW5kbGUsIG9mZnNldCwgc2l6ZSwgZGlyKSkKIAkJcmV0dXJuOwogCi0JaWYgKCFhcmNoX2lzX2NvaGVyZW50KCkpCi0JCWRtYV9jYWNoZV9tYWludChkbWFfdG9fdmlydChkZXYsIGhhbmRsZSkgKyBvZmZzZXQsIHNpemUsIGRpcik7CisJX19kbWFfc2luZ2xlX2NwdV90b19kZXYoZG1hX3RvX3ZpcnQoZGV2LCBoYW5kbGUpICsgb2Zmc2V0LCBzaXplLCBkaXIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggZDJhNTljZi4uYzk4MDE1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oCkBAIC02OSw5ICs2OSwxNiBAQAogLyoKICAqIF9fYXJtX2lvcmVtYXAgdGFrZXMgQ1BVIHBoeXNpY2FsIGFkZHJlc3MuCiAgKiBfX2FybV9pb3JlbWFwX3BmbiB0YWtlcyBhIFBhZ2UgRnJhbWUgTnVtYmVyIGFuZCBhbiBvZmZzZXQgaW50byB0aGF0IHBhZ2UKKyAqIFRoZSBfY2FsbGVyIHZhcmlldHkgdGFrZXMgYSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkgdmFsdWUgZm9yCisgKiAvcHJvYy92bWFsbG9jIHRvIHVzZSAtIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGluIG5vbi1pbmxpbmUgZnVuY3Rpb25zLgogICovCi1leHRlcm4gdm9pZCBfX2lvbWVtICogX19hcm1faW9yZW1hcF9wZm4odW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgX19pb21lbSAqIF9fYXJtX2lvcmVtYXAodW5zaWduZWQgbG9uZywgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgX19pb21lbSAqX19hcm1faW9yZW1hcF9wZm5fY2FsbGVyKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJc2l6ZV90LCB1bnNpZ25lZCBpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCBfX2lvbWVtICpfX2FybV9pb3JlbWFwX2NhbGxlcih1bnNpZ25lZCBsb25nLCBzaXplX3QsIHVuc2lnbmVkIGludCwKKwl2b2lkICopOworCitleHRlcm4gdm9pZCBfX2lvbWVtICpfX2FybV9pb3JlbWFwX3Bmbih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBfX2lvbWVtICpfX2FybV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcsIHNpemVfdCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIF9faW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC90aW1lLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3RpbWUuaAppbmRleCBiMmNjMWZjLi44YmZmYzNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3RpbWUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3RpbWUuaApAQCAtNDYsMTIgKzQ2LDQgQEAKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyICpzeXN0ZW1fdGltZXI7CiBleHRlcm4gdm9pZCB0aW1lcl90aWNrKHZvaWQpOwogCi0vKgotICogS2VybmVsIHRpbWUga2VlcGluZyBzdXBwb3J0LgotICovCi1zdHJ1Y3QgdGltZXNwZWM7Ci1leHRlcm4gaW50ICgqc2V0X3J0Yykodm9pZCk7Ci1leHRlcm4gdm9pZCBzYXZlX3RpbWVfZGVsdGEoc3RydWN0IHRpbWVzcGVjICpkZWx0YSwgc3RydWN0IHRpbWVzcGVjICpydGMpOwotZXh0ZXJuIHZvaWQgcmVzdG9yZV90aW1lX2RlbHRhKHN0cnVjdCB0aW1lc3BlYyAqZGVsdGEsIHN0cnVjdCB0aW1lc3BlYyAqcnRjKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCmluZGV4IDU0MjFkODIuLjQzMTJlZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCkBAIC03Niw2ICs3NiwxNyBAQAogICovCiAjZGVmaW5lIElPUkVNQVBfTUFYX09SREVSCTI0CiAKKy8qCisgKiBTaXplIG9mIERNQS1jb25zaXN0ZW50IG1lbW9yeSByZWdpb24uICBNdXN0IGJlIG11bHRpcGxlIG9mIDJNLAorICogYmV0d2VlbiAyTUIgYW5kIDE0TUIgaW5jbHVzaXZlLgorICovCisjaWZuZGVmIENPTlNJU1RFTlRfRE1BX1NJWkUKKyNkZWZpbmUgQ09OU0lTVEVOVF9ETUFfU0laRSAJU1pfMk0KKyNlbmRpZgorCisjZGVmaW5lIENPTlNJU1RFTlRfRU5ECQkoMHhmZmUwMDAwMFVMKQorI2RlZmluZSBDT05TSVNURU5UX0JBU0UJCShDT05TSVNURU5UX0VORCAtIENPTlNJU1RFTlRfRE1BX1NJWkUpCisKICNlbHNlIC8qIENPTkZJR19NTVUgKi8KIAogLyoKQEAgLTkzLDExICsxMDQsMTEgQEAKICNlbmRpZgogCiAjaWZuZGVmIFBIWVNfT0ZGU0VUCi0jZGVmaW5lIFBIWVNfT0ZGU0VUIAkJKENPTkZJR19EUkFNX0JBU0UpCisjZGVmaW5lIFBIWVNfT0ZGU0VUIAkJVUwoQ09ORklHX0RSQU1fQkFTRSkKICNlbmRpZgogCiAjaWZuZGVmIEVORF9NRU0KLSNkZWZpbmUgRU5EX01FTSAgICAgCQkoQ09ORklHX0RSQU1fQkFTRSArIENPTkZJR19EUkFNX1NJWkUpCisjZGVmaW5lIEVORF9NRU0gICAgIAkJKFVMKENPTkZJR19EUkFNX0JBU0UpICsgQ09ORklHX0RSQU1fU0laRSkKICNlbmRpZgogCiAjaWZuZGVmIFBBR0VfT0ZGU0VUCkBAIC0xMTMsMTQgKzEyNCw2IEBACiAjZW5kaWYgLyogIUNPTkZJR19NTVUgKi8KIAogLyoKLSAqIFNpemUgb2YgRE1BLWNvbnNpc3RlbnQgbWVtb3J5IHJlZ2lvbi4gIE11c3QgYmUgbXVsdGlwbGUgb2YgMk0sCi0gKiBiZXR3ZWVuIDJNQiBhbmQgMTRNQiBpbmNsdXNpdmUuCi0gKi8KLSNpZm5kZWYgQ09OU0lTVEVOVF9ETUFfU0laRQotI2RlZmluZSBDT05TSVNURU5UX0RNQV9TSVpFIFNaXzJNCi0jZW5kaWYKLQotLyoKICAqIFBoeXNpY2FsIHZzIHZpcnR1YWwgUkFNIGFkZHJlc3Mgc3BhY2UgY29udmVyc2lvbi4gIFRoZXNlIGFyZQogICogcHJpdmF0ZSBkZWZpbml0aW9ucyB3aGljaCBzaG91bGQgTk9UIGJlIHVzZWQgb3V0c2lkZSBtZW1vcnkuaAogICogZmlsZXMuICBVc2UgdmlydF90b19waHlzL3BoeXNfdG9fdmlydC9fX3BhL19fdmEgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11LmgKaW5kZXggYjU2MTU4NC4uNjg4NzBjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11LmgKQEAgLTYsNiArNiw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAjaWZkZWYgQ09ORklHX0NQVV9IQVNfQVNJRAogCXVuc2lnbmVkIGludCBpZDsKKwlzcGlubG9ja190IGlkX2xvY2s7CiAjZW5kaWYKIAl1bnNpZ25lZCBpbnQga3ZtX3NlcTsKIH0gbW1fY29udGV4dF90OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggZGU2Y2VmYi4uYTBiM2NhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC00MywxMiArNDMsMjMgQEAKICNkZWZpbmUgQVNJRF9GSVJTVF9WRVJTSU9OCSgxIDw8IEFTSURfQklUUykKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBjcHVfbGFzdF9hc2lkOworI2lmZGVmIENPTkZJR19TTVAKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbW1fc3RydWN0ICosIGN1cnJlbnRfbW0pOworI2VuZGlmCiAKIHZvaWQgX19pbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiB2b2lkIF9fbmV3X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKKwkvKgorCSAqIFRoaXMgY29kZSBpcyBleGVjdXRlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gVGhlcmVmb3JlLAorCSAqIG1tLT5jb250ZXh0LmlkIGNhbm5vdCBiZSB1cGRhdGVkIHRvIHRoZSBsYXRlc3QgQVNJRCB2ZXJzaW9uCisJICogb24gYSBkaWZmZXJlbnQgQ1BVIChhbmQgY29uZGl0aW9uIGJlbG93IG5vdCB0cmlnZ2VyZWQpCisJICogd2l0aG91dCBmaXJzdCBnZXR0aW5nIGFuIElQSSB0byByZXNldCB0aGUgY29udGV4dC4gVGhlCisJICogYWx0ZXJuYXRpdmUgaXMgdG8gdGFrZSBhIHJlYWRfbG9jayBvbiBtbS0+Y29udGV4dC5pZF9sb2NrCisJICogKGFmdGVyIGNoYW5naW5nIGl0cyB0eXBlIHRvIHJ3bG9ja190KS4KKwkgKi8KIAlpZiAodW5saWtlbHkoKG1tLT5jb250ZXh0LmlkIF4gY3B1X2xhc3RfYXNpZCkgPj4gQVNJRF9CSVRTKSkKIAkJX19uZXdfY29udGV4dChtbSk7CiAKQEAgLTEwOCw2ICsxMTksMTAgQEAKIAkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiAjZW5kaWYKIAlpZiAoIWNwdW1hc2tfdGVzdF9hbmRfc2V0X2NwdShjcHUsIG1tX2NwdW1hc2sobmV4dCkpIHx8IHByZXYgIT0gbmV4dCkgeworI2lmZGVmIENPTkZJR19TTVAKKwkJc3RydWN0IG1tX3N0cnVjdCAqKmNydF9tbSA9ICZwZXJfY3B1KGN1cnJlbnRfbW0sIGNwdSk7CisJCSpjcnRfbW0gPSBuZXh0OworI2VuZGlmCiAJCWNoZWNrX2NvbnRleHQobmV4dCk7CiAJCWNwdV9zd2l0Y2hfbW0obmV4dC0+cGdkLCBuZXh0KTsKIAkJaWYgKGNhY2hlX2lzX3ZpdnQoKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCAzYTMyYWY0Li5hNDg1YWMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMTcsMTEgKzExNywxMiBAQAogI2VuZGlmCiAKIHN0cnVjdCBwYWdlOworc3RydWN0IHZtX2FyZWFfc3RydWN0OwogCiBzdHJ1Y3QgY3B1X3VzZXJfZm5zIHsKIAl2b2lkICgqY3B1X2NsZWFyX3VzZXJfaGlnaHBhZ2UpKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyKTsKIAl2b2lkICgqY3B1X2NvcHlfdXNlcl9oaWdocGFnZSkoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSwKLQkJCXVuc2lnbmVkIGxvbmcgdmFkZHIpOworCQkJdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogfTsKIAogI2lmZGVmIE1VTFRJX1VTRVIKQEAgLTEzNyw3ICsxMzgsNyBAQAogCiBleHRlcm4gdm9pZCBfX2NwdV9jbGVhcl91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyKTsKIGV4dGVybiB2b2lkIF9fY3B1X2NvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLAotCQkJdW5zaWduZWQgbG9uZyB2YWRkcik7CisJCQl1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiAjZW5kaWYKIAogI2RlZmluZSBjbGVhcl91c2VyX2hpZ2hwYWdlKHBhZ2UsdmFkZHIpCQlcCkBAIC0xNDUsNyArMTQ2LDcgQEAKIAogI2RlZmluZSBfX0hBVkVfQVJDSF9DT1BZX1VTRVJfSElHSFBBR0UKICNkZWZpbmUgY29weV91c2VyX2hpZ2hwYWdlKHRvLGZyb20sdmFkZHIsdm1hKQlcCi0JX19jcHVfY29weV91c2VyX2hpZ2hwYWdlKHRvLCBmcm9tLCB2YWRkcikKKwlfX2NwdV9jb3B5X3VzZXJfaGlnaHBhZ2UodG8sIGZyb20sIHZhZGRyLCB2bWEpCiAKICNkZWZpbmUgY2xlYXJfcGFnZShwYWdlKQltZW1zZXQoKHZvaWQgKikocGFnZSksIDAsIFBBR0VfU0laRSkKIGV4dGVybiB2b2lkIGNvcHlfcGFnZSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDllMzA0OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgcGljb0NoaXAgRGVzaWducyBMdGQsIEphbWllIElsZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVJNX1BFUkZfRVZFTlRfSF9fCisjZGVmaW5lIF9fQVJNX1BFUkZfRVZFTlRfSF9fCisKKy8qCisgKiBOT1A6IG9uICptb3N0KiAocmVhZDogYWxsIHN1cHBvcnRlZCkgQVJNIHBsYXRmb3JtcywgdGhlIHBlcmZvcm1hbmNlCisgKiBjb3VudGVyIGludGVycnVwdHMgYXJlIHJlZ3VsYXIgaW50ZXJydXB0cyBhbmQgbm90IGFuIE5NSS4gVGhpcworICogbWVhbnMgdGhhdCB3aGVuIHdlIHJlY2VpdmUgdGhlIGludGVycnVwdCB3ZSBjYW4gY2FsbAorICogcGVyZl9ldmVudF9kb19wZW5kaW5nKCkgdGhhdCBoYW5kbGVzIGFsbCBvZiB0aGUgd29yayB3aXRoCisgKiBpbnRlcnJ1cHRzIGVuYWJsZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKQoreworfQorCisvKiBBUk0gcGVyZm9ybWFuY2UgY291bnRlcnMgc3RhcnQgZnJvbSAxIChpbiB0aGUgY3AxNSBhY2Nlc3Nlcykgc28gdXNlIHRoZQorICogc2FtZSBpbmRleGVzIGhlcmUgZm9yIGNvbnNpc3RlbmN5LiAqLworI2RlZmluZSBQRVJGX0VWRU5UX0lOREVYX09GRlNFVCAxCisKKyNlbmRpZiAvKiBfX0FSTV9QRVJGX0VWRU5UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS1ub21tdS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS1ub21tdS5oCmluZGV4IGIwMTFmMmUuLjAxM2NmY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtbm9tbXUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLW5vbW11LmgKQEAgLTg2LDggKzg2LDggQEAKICAqIEFsbCAzMmJpdCBhZGRyZXNzZXMgYXJlIGVmZmVjdGl2ZWx5IHZhbGlkIGZvciB2bWFsbG9jLi4uCiAgKiBTb3J0IG9mIG1lYW5pbmdsZXNzIGZvciBub24tVk0gdGFyZ2V0cy4KICAqLwotI2RlZmluZQlWTUFMTE9DX1NUQVJUCTAKLSNkZWZpbmUJVk1BTExPQ19FTkQJMHhmZmZmZmZmZgorI2RlZmluZQlWTUFMTE9DX1NUQVJUCTBVTAorI2RlZmluZQlWTUFMTE9DX0VORAkweGZmZmZmZmZmVUwKIAogI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MgICAgICAoMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcG11LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODI5YjlmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcG11LmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9pbmNsdWRlL2FzbS9wbXUuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgcGljb0NoaXAgRGVzaWducyBMdGQsIEphbWllIElsZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVJNX1BNVV9IX18KKyNkZWZpbmUgX19BUk1fUE1VX0hfXworCisjaWZkZWYgQ09ORklHX0NQVV9IQVNfUE1VCisKK3N0cnVjdCBwbXVfaXJxcyB7CisJY29uc3QgaW50ICAgKmlycXM7CisJaW50CSAgICBudW1faXJxczsKK307CisKKy8qKgorICogcmVzZXJ2ZV9wbXUoKSAtIHJlc2VydmUgdGhlIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzCisgKgorICogUmVzZXJ2ZSB0aGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMgaW4gdGhlIHN5c3RlbSBmb3IgZXhjbHVzaXZlIHVzZS4KKyAqIFRoZSAnc3RydWN0IHBtdV9pcnFzJyBmb3IgdGhlIHN5c3RlbSBpcyByZXR1cm5lZCBvbiBzdWNjZXNzLCBFUlJfUFRSKCkKKyAqIGVuY29kZWQgZXJyb3Igb24gZmFpbHVyZS4KKyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBwbXVfaXJxcyAqCityZXNlcnZlX3BtdSh2b2lkKTsKKworLyoqCisgKiByZWxlYXNlX3BtdSgpIC0gUmVsaW5xdWlzaCBjb250cm9sIG9mIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVycworICoKKyAqIFJlbGVhc2UgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGFuZCBhbGxvdyBzb21lb25lIGVsc2UgdG8gdXNlIHRoZW0uCisgKiBDYWxsZXJzIG11c3QgaGF2ZSBkaXNhYmxlZCB0aGUgY291bnRlcnMgYW5kIHJlbGVhc2VkIElSUXMgYmVmb3JlIGNhbGxpbmcKKyAqIHRoaXMuIFRoZSAnc3RydWN0IHBtdV9pcnFzJyByZXR1cm5lZCBmcm9tIHJlc2VydmVfcG11KCkgbXVzdCBiZSBwYXNzZWQgYXMKKyAqIGEgY29va2llLgorICovCitleHRlcm4gaW50CityZWxlYXNlX3BtdShjb25zdCBzdHJ1Y3QgcG11X2lycXMgKmlycXMpOworCisvKioKKyAqIGluaXRfcG11KCkgLSBJbml0aWFsaXNlIHRoZSBQTVUuCisgKgorICogSW5pdGlhbGlzZSB0aGUgc3lzdGVtIHJlYWR5IGZvciBQTVUgZW5hYmxpbmcuIFRoaXMgc2hvdWxkIHR5cGljYWxseSBzZXQgdGhlCisgKiBJUlEgYWZmaW5pdHkgYW5kIG5vdGhpbmcgZWxzZS4gVGhlIHVzZXJzIChvcHJvZmlsZS9wZXJmIGV2ZW50cyBldGMpIHdpbGwgZG8KKyAqIHRoZSBhY3R1YWwgaGFyZHdhcmUgaW5pdGlhbGlzYXRpb24uCisgKi8KK2V4dGVybiBpbnQKK2luaXRfcG11KHZvaWQpOworCisjZWxzZSAvKiBDT05GSUdfQ1BVX0hBU19QTVUgKi8KKworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgcG11X2lycXMgKgorcmVzZXJ2ZV9wbXUodm9pZCkKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3JlbGVhc2VfcG11KGNvbnN0IHN0cnVjdCBwbXVfaXJxcyAqaXJxcykKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2luaXRfcG11KHZvaWQpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX0hBU19QTVUgKi8KKworI2VuZGlmIC8qIF9fQVJNX1BNVV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IDVjY2NlMGEuLmYzOTJmYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMjIzLDE4ICsyMjMsNiBAQAogI2RlZmluZSBiYW5rX3BoeXNfZW5kKGJhbmspCSgoYmFuayktPnN0YXJ0ICsgKGJhbmspLT5zaXplKQogI2RlZmluZSBiYW5rX3BoeXNfc2l6ZShiYW5rKQkoYmFuayktPnNpemUKIAotLyoKLSAqIEVhcmx5IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLgotICovCi1zdHJ1Y3QgZWFybHlfcGFyYW1zIHsKLQljb25zdCBjaGFyICphcmc7Ci0Jdm9pZCAoKmZuKShjaGFyICoqcCk7Ci19OwotCi0jZGVmaW5lIF9fZWFybHlfcGFyYW0obmFtZSxmbikJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZWFybHlfcGFyYW1zIF9fZWFybHlfIyNmbiBfX3VzZWQJCQlcCi1fX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmVhcmx5X3BhcmFtLmluaXQiKSkpID0geyBuYW1lLCBmbiB9Ci0KICNlbmRpZiAgLyogIF9fS0VSTkVMX18gICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wX3BsYXQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9wbGF0LmgKaW5kZXggNTkzMDNlMi4uZTYyMTUzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wX3BsYXQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXBfcGxhdC5oCkBAIC0xMyw0ICsxMyw5IEBACiAJcmV0dXJuICgocmVhZF9jcHVpZF9leHQoQ1BVSURfRVhUX01NRlIzKSA+PiAxMikgJiAweGYpIDwgMjsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgY2FjaGVfb3BzX25lZWRfYnJvYWRjYXN0KHZvaWQpCit7CisJcmV0dXJuICgocmVhZF9jcHVpZF9leHQoQ1BVSURfRVhUX01NRlIzKSA+PiAxMikgJiAweGYpIDwgMTsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCBjOTFjNjRjLi4xN2ViMzU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTUsNiArNSwyMiBAQAogI2Vycm9yIFNNUCBub3Qgc3VwcG9ydGVkIG9uIHByZS1BUk12NiBDUFVzCiAjZW5kaWYKIAorc3RhdGljIGlubGluZSB2b2lkIGRzYl9zZXYodm9pZCkKK3sKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJImRzYlxuIgorCQkic2V2IgorCSk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfMzJ2NkspCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDRcbiIKKwkJInNldiIKKwkJOiA6ICJyIiAoMCkKKwkpOworI2VuZGlmCit9CisKIC8qCiAgKiBBUk12NiBTcGluLWxvY2tpbmcuCiAgKgpAQCAtNjksMTMgKzg1LDExIEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKICIJc3RyCSUxLCBbJTBdXG4iCi0jaWZkZWYgQ09ORklHX0NQVV8zMnY2SwotIgltY3IJcDE1LCAwLCAlMSwgYzcsIGMxMCwgNFxuIiAvKiBEU0IgKi8KLSIJc2V2IgotI2VuZGlmCiAJOgogCTogInIiICgmbG9jay0+bG9jayksICJyIiAoMCkKIAk6ICJjYyIpOworCisJZHNiX3NldigpOwogfQogCiAvKgpAQCAtMTMyLDEzICsxNDYsMTEgQEAKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCSJzdHIJJTEsIFslMF1cbiIKLSNpZmRlZiBDT05GSUdfQ1BVXzMydjZLCi0iCW1jcglwMTUsIDAsICUxLCBjNywgYzEwLCA0XG4iIC8qIERTQiAqLwotIglzZXZcbiIKLSNlbmRpZgogCToKIAk6ICJyIiAoJnJ3LT5sb2NrKSwgInIiICgwKQogCTogImNjIik7CisKKwlkc2Jfc2V2KCk7CiB9CiAKIC8qIHdyaXRlX2Nhbl9sb2NrIC0gd291bGQgd3JpdGVfdHJ5bG9jaygpIHN1Y2NlZWQ/ICovCkBAIC0xODgsMTQgKzIwMCwxMiBAQAogIglzdHJleAklMSwgJTAsIFslMl1cbiIKICIJdGVxCSUxLCAjMFxuIgogIglibmUJMWIiCi0jaWZkZWYgQ09ORklHX0NQVV8zMnY2SwotIlxuCWNtcAklMCwgIzBcbiIKLSIJbWNyZXEgICBwMTUsIDAsICUwLCBjNywgYzEwLCA0XG4iCi0iCXNldmVxIgotI2VuZGlmCiAJOiAiPSZyIiAodG1wKSwgIj0mciIgKHRtcDIpCiAJOiAiciIgKCZydy0+bG9jaykKIAk6ICJjYyIpOworCisJaWYgKHRtcCA9PSAwKQorCQlkc2Jfc2V2KCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFyY2hfcmVhZF90cnlsb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCAwNThlN2U5Li5jYTg4ZTZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtNzMsOCArNzMsNyBAQAogCiBzdHJ1Y3QgcHRfcmVnczsKIAotdm9pZCBkaWUoY29uc3QgY2hhciAqbXNnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVycikKLQkJX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKK3ZvaWQgZGllKGNvbnN0IGNoYXIgKm1zZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBlcnIpOwogCiBzdHJ1Y3Qgc2lnaW5mbzsKIHZvaWQgYXJtX25vdGlmeV9kaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHNpZ2luZm8gKmluZm8sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAyZGZiN2Q3Li5iNzQ5NzBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTExNSw3ICsxMTUsOCBAQAogZXh0ZXJuIHZvaWQgaXdtbXh0X3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGhyZWFkX2luZm8gKik7CiBleHRlcm4gdm9pZCBpd21teHRfdGFza19zd2l0Y2goc3RydWN0IHRocmVhZF9pbmZvICopOwogCi1leHRlcm4gdm9pZCB2ZnBfc3luY19zdGF0ZShzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCk7CitleHRlcm4gdm9pZCB2ZnBfc3luY19od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqKTsKK2V4dGVybiB2b2lkIHZmcF9mbHVzaF9od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IGMyZjE2MDUuLmUwODVlMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtNTI5LDcgKzUyOSw4IEBACiAgKiBjYWNoZSBlbnRyaWVzIGZvciB0aGUga2VybmVscyB2aXJ0dWFsIG1lbW9yeSByYW5nZSBhcmUgd3JpdHRlbgogICogYmFjayB0byB0aGUgcGFnZS4KICAqLwotZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpOworZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCXB0ZV90ICpwdGVwKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQppbmRleCBkZDAwZjc0Li4yNmQzMDJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBACiAJCSAgIHByb2Nlc3MubyBwdHJhY2UubyByZXR1cm5fYWRkcmVzcy5vIHNldHVwLm8gc2lnbmFsLm8gXAogCQkgICBzeXNfYXJtLm8gc3RhY2t0cmFjZS5vIHRpbWUubyB0cmFwcy5vCiAKK29iai0kKENPTkZJR19MRURTKQkJKz0gbGVkcy5vCiBvYmotJChDT05GSUdfT0NfRVRNKQkJKz0gZXRtLm8KIAogb2JqLSQoQ09ORklHX0lTQV9ETUFfQVBJKQkrPSBkbWEubwpAQCAtNDYsNiArNDcsOCBAQAogb2JqLSQoQ09ORklHX0NQVV9YU0MzKQkJKz0geHNjYWxlLWNwMC5vCiBvYmotJChDT05GSUdfQ1BVX01PSEFXSykJKz0geHNjYWxlLWNwMC5vCiBvYmotJChDT05GSUdfSVdNTVhUKQkJKz0gaXdtbXh0Lm8KK29iai0kKENPTkZJR19DUFVfSEFTX1BNVSkJKz0gcG11Lm8KK29iai0kKENPTkZJR19IV19QRVJGX0VWRU5UUykJKz0gcGVyZl9ldmVudC5vCiBBRkxBR1NfaXdtbXh0Lm8JCQk6PSAtV2EsLW1jcHU9aXdtbXh0CiAKIGlmbmVxICgkKENPTkZJR19BUkNIX0VCU0ExMTApLHkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDRhODgxMjUuLjg4MzUxMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xMiw2ICsxMiw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgpAQCAtMTEyLDUgKzExMyw5IEBACiAjaWZkZWYgTVVMVElfUEFCT1JUCiAgIERFRklORShQUk9DRVNTT1JfUEFCVF9GVU5DLAlvZmZzZXRvZihzdHJ1Y3QgcHJvY2Vzc29yLCBfcHJlZmV0Y2hfYWJvcnQpKTsKICNlbmRpZgorICBCTEFOSygpOworICBERUZJTkUoRE1BX0JJRElSRUNUSU9OQUwsCURNQV9CSURJUkVDVElPTkFMKTsKKyAgREVGSU5FKERNQV9UT19ERVZJQ0UsCQlETUFfVE9fREVWSUNFKTsKKyAgREVGSU5FKERNQV9GUk9NX0RFVklDRSwJRE1BX0ZST01fREVWSUNFKTsKICAgcmV0dXJuIDA7IAogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jIGIvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jCmluZGV4IDgwOTY4MTkuLmJkMzk3ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMKQEAgLTYxNiwxNSArNjE2LDE3IEBACiAgKiBidXQgd2Ugd2FudCB0byB0cnkgdG8gYXZvaWQgYWxsb2NhdGluZyBhdCAweDI5MDAtMHgyYmZmCiAgKiB3aGljaCBtaWdodCBiZSBtaXJyb3JlZCBhdCAweDAxMDAtMHgwM2ZmLi4KICAqLwotdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCityZXNvdXJjZV9zaXplX3QgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8gJiYgc3RhcnQgJiAweDMwMCkKIAkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7CiAKLQlyZXMtPnN0YXJ0ID0gKHN0YXJ0ICsgYWxpZ24gLSAxKSAmIH4oYWxpZ24gLSAxKTsKKwlzdGFydCA9IChzdGFydCArIGFsaWduIC0gMSkgJiB+KGFsaWduIC0gMSk7CisKKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYi9hcmNoL2FybS9rZXJuZWwvZGVidWcuUwppbmRleCA1YzkxYWRkLi5hMzhiNDg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZGVidWcuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZGVidWcuUwpAQCAtMjQsNyArMjQsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1Y2KQogCi0JCS5tYWNybwlhZGRydWFydCwgcngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCS5lbmRtCiAKIAkJLm1hY3JvCXNlbmR1YXJ0LCByZCwgcngKQEAgLTUxLDcgKzUxLDcgQEAKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1Y3KQogCi0JCS5tYWNybwlhZGRydWFydCwgcngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCS5lbmRtCiAKIAkJLm1hY3JvCXNlbmR1YXJ0LCByZCwgcngKQEAgLTcxLDcgKzcxLDcgQEAKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQ0FMRSkKIAotCQkubWFjcm8JYWRkcnVhcnQsIHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQkuZW5kbQogCiAJCS5tYWNybwlzZW5kdWFydCwgcmQsIHJ4CkBAIC05OCw3ICs5OCw3IEBACiAKICNlbHNlCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LCByeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJLmVuZG0KIAogCQkubWFjcm8Jc2VuZHVhcnQsIHJkLCByeApAQCAtMTY0LDcgKzE2NCw3IEBACiAJCS5sdG9yZwogCiBFTlRSWShwcmludGFzY2lpKQotCQlhZGRydWFydCByMworCQlhZGRydWFydCByMywgcjEKIAkJYgkyZgogMToJCXdhaXR1YXJ0IHIyLCByMwogCQlzZW5kdWFydCByMSwgcjMKQEAgLTE4MCw3ICsxODAsNyBAQAogRU5EUFJPQyhwcmludGFzY2lpKQogCiBFTlRSWShwcmludGNoKQotCQlhZGRydWFydCByMworCQlhZGRydWFydCByMywgcjEKIAkJbW92CXIxLCByMAogCQltb3YJcjAsICMwCiAJCWIJMWIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9sZWRzLmMgYi9hcmNoL2FybS9rZXJuZWwvbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYTMxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvbGVkcy5jCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogTEVEIHN1cHBvcnQgY29kZSwgcmlwcGVkIG91dCBvZiBhcmNoL2FybS9rZXJuZWwvdGltZS5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0yMDAxIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisKKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorCitzdGF0aWMgdm9pZCBkdW1teV9sZWRzX2V2ZW50KGxlZF9ldmVudF90IGV2dCkKK3sKK30KKwordm9pZCAoKmxlZHNfZXZlbnQpKGxlZF9ldmVudF90KSA9IGR1bW15X2xlZHNfZXZlbnQ7CisKK3N0cnVjdCBsZWRzX2V2dF9uYW1lIHsKKwljb25zdCBjaGFyCW5hbWVbOF07CisJaW50CQlvbjsKKwlpbnQJCW9mZjsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGVkc19ldnRfbmFtZSBldnRfbmFtZXNbXSA9IHsKKwl7ICJhbWJlciIsIGxlZF9hbWJlcl9vbiwgbGVkX2FtYmVyX29mZiB9LAorCXsgImJsdWUiLCAgbGVkX2JsdWVfb24sICBsZWRfYmx1ZV9vZmYgIH0sCisJeyAiZ3JlZW4iLCBsZWRfZ3JlZW5fb24sIGxlZF9ncmVlbl9vZmYgfSwKKwl7ICJyZWQiLCAgIGxlZF9yZWRfb24sICAgbGVkX3JlZF9vZmYgICB9LAorfTsKKworc3RhdGljIHNzaXplX3QgbGVkc19zdG9yZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCWludCByZXQgPSAtRUlOVkFMLCBsZW4gPSBzdHJjc3BuKGJ1ZiwgIiAiKTsKKworCWlmIChsZW4gPiAwICYmIGJ1ZltsZW5dID09ICdcMCcpCisJCWxlbi0tOworCisJaWYgKHN0cm5jbXAoYnVmLCAiY2xhaW0iLCBsZW4pID09IDApIHsKKwkJbGVkc19ldmVudChsZWRfY2xhaW0pOworCQlyZXQgPSBzaXplOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJyZWxlYXNlIiwgbGVuKSA9PSAwKSB7CisJCWxlZHNfZXZlbnQobGVkX3JlbGVhc2UpOworCQlyZXQgPSBzaXplOworCX0gZWxzZSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGV2dF9uYW1lcyk7IGkrKykgeworCQkJaWYgKHN0cmxlbihldnRfbmFtZXNbaV0ubmFtZSkgIT0gbGVuIHx8CisJCQkgICAgc3RybmNtcChidWYsIGV2dF9uYW1lc1tpXS5uYW1lLCBsZW4pICE9IDApCisJCQkJY29udGludWU7CisJCQlpZiAoc3RybmNtcChidWYrbGVuLCAiIG9uIiwgMykgPT0gMCkgeworCQkJCWxlZHNfZXZlbnQoZXZ0X25hbWVzW2ldLm9uKTsKKwkJCQlyZXQgPSBzaXplOworCQkJfSBlbHNlIGlmIChzdHJuY21wKGJ1ZitsZW4sICIgb2ZmIiwgNCkgPT0gMCkgeworCQkJCWxlZHNfZXZlbnQoZXZ0X25hbWVzW2ldLm9mZik7CisJCQkJcmV0ID0gc2l6ZTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBTWVNERVZfQVRUUihldmVudCwgMDIwMCwgTlVMTCwgbGVkc19zdG9yZSk7CisKK3N0YXRpYyBpbnQgbGVkc19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlsZWRzX2V2ZW50KGxlZF9zdG9wKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZWRzX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCWxlZHNfZXZlbnQobGVkX3N0YXJ0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZWRzX3NodXRkb3duKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJbGVkc19ldmVudChsZWRfaGFsdGVkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgbGVkc19zeXNjbGFzcyA9IHsKKwkubmFtZQkJPSAibGVkcyIsCisJLnNodXRkb3duCT0gbGVkc19zaHV0ZG93biwKKwkuc3VzcGVuZAk9IGxlZHNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGxlZHNfcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGxlZHNfZGV2aWNlID0geworCS5pZAkJPSAwLAorCS5jbHMJCT0gJmxlZHNfc3lzY2xhc3MsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsZWRzX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbGVkc19zeXNjbGFzcyk7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJmxlZHNfZGV2aWNlKTsKKwlpZiAocmV0ID09IDApCisJCXJldCA9IHN5c2Rldl9jcmVhdGVfZmlsZSgmbGVkc19kZXZpY2UsICZhdHRyX2V2ZW50KTsKKwlyZXR1cm4gcmV0OworfQorCitkZXZpY2VfaW5pdGNhbGwobGVkc19pbml0KTsKKworRVhQT1JUX1NZTUJPTChsZWRzX2V2ZW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NGNlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0wLDAgKzEsMjI3NiBAQAorI3VuZGVmIERFQlVHCisKKy8qCisgKiBBUk0gcGVyZm9ybWFuY2UgY291bnRlciBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBwaWNvQ2hpcCBEZXNpZ25zLCBMdGQuLCBKYW1pZSBJbGVzCisgKgorICogQVJNdjcgc3VwcG9ydDogSmVhbiBQaWhldCA8anBpaGV0QG12aXN0YS5jb20+CisgKiAyMDEwIChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBMTEMuCisgKgorICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIHRoZSBzcGFyYzY0IHBlcmYgZXZlbnQgY29kZSwgd2hpY2ggaXMgaW4gdHVybiBiYXNlZAorICogb24gdGhlIHg4NiBjb2RlLiBDYWxsY2hhaW4gY29kZSBpcyBiYXNlZCBvbiB0aGUgQVJNIE9Qcm9maWxlIGJhY2t0cmFjZQorICogY29kZS4KKyAqLworI2RlZmluZSBwcl9mbXQoZm10KSAiaHcgcGVyZmV2ZW50czogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgorI2luY2x1ZGUgPGFzbS9wbXUuaD4KKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9pcnFzICpwbXVfaXJxczsKKworLyoKKyAqIEhhcmR3YXJlIGxvY2sgdG8gc2VyaWFsaXplIGFjY2Vzc2VzIHRvIFBNVSByZWdpc3RlcnMuIE5lZWRlZCBmb3IgdGhlCisgKiByZWFkL21vZGlmeS93cml0ZSBzZXF1ZW5jZXMuCisgKi8KK0RFRklORV9TUElOTE9DSyhwbXVfbG9jayk7CisKKy8qCisgKiBBUk12NiBzdXBwb3J0cyBhIG1heGltdW0gb2YgMyBldmVudHMsIHN0YXJ0aW5nIGZyb20gaW5kZXggMS4gSWYgd2UgYWRkCisgKiBhbm90aGVyIHBsYXRmb3JtIHRoYXQgc3VwcG9ydHMgbW9yZSwgd2UgbmVlZCB0byBpbmNyZWFzZSB0aGlzIHRvIGJlIHRoZQorICogbGFyZ2VzdCBvZiBhbGwgcGxhdGZvcm1zLgorICoKKyAqIEFSTXY3IHN1cHBvcnRzIHVwIHRvIDMyIGV2ZW50czoKKyAqICBjeWNsZSBjb3VudGVyIENDTlQgKyAzMSBldmVudHMgY291bnRlcnMgQ05UMC4uMzAuCisgKiAgQ29ydGV4LUE4IGhhcyAxKzQgY291bnRlcnMsIENvcnRleC1BOSBoYXMgMSs2IGNvdW50ZXJzLgorICovCisjZGVmaW5lIEFSTVBNVV9NQVhfSFdFVkVOVFMJCTMzCisKKy8qIFRoZSBldmVudHMgZm9yIGEgZ2l2ZW4gQ1BVLiAqLworc3RydWN0IGNwdV9od19ldmVudHMgeworCS8qCisJICogVGhlIGV2ZW50cyB0aGF0IGFyZSBhY3RpdmUgb24gdGhlIENQVSBmb3IgdGhlIGdpdmVuIGluZGV4LiBJbmRleCAwCisJICogaXMgcmVzZXJ2ZWQuCisJICovCisJc3RydWN0IHBlcmZfZXZlbnQJKmV2ZW50c1tBUk1QTVVfTUFYX0hXRVZFTlRTXTsKKworCS8qCisJICogQSAxIGJpdCBmb3IgYW4gaW5kZXggaW5kaWNhdGVzIHRoYXQgdGhlIGNvdW50ZXIgaXMgYmVpbmcgdXNlZCBmb3IKKwkgKiBhbiBldmVudC4gQSAwIG1lYW5zIHRoYXQgdGhlIGNvdW50ZXIgY2FuIGJlIHVzZWQuCisJICovCisJdW5zaWduZWQgbG9uZwkJdXNlZF9tYXNrW0JJVFNfVE9fTE9OR1MoQVJNUE1VX01BWF9IV0VWRU5UUyldOworCisJLyoKKwkgKiBBIDEgYml0IGZvciBhbiBpbmRleCBpbmRpY2F0ZXMgdGhhdCB0aGUgY291bnRlciBpcyBhY3RpdmVseSBiZWluZworCSAqIHVzZWQuCisJICovCisJdW5zaWduZWQgbG9uZwkJYWN0aXZlX21hc2tbQklUU19UT19MT05HUyhBUk1QTVVfTUFYX0hXRVZFTlRTKV07Cit9OworREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9od19ldmVudHMsIGNwdV9od19ldmVudHMpOworCitzdHJ1Y3QgYXJtX3BtdSB7CisJY2hhcgkJKm5hbWU7CisJaXJxcmV0dXJuX3QJKCpoYW5kbGVfaXJxKShpbnQgaXJxX251bSwgdm9pZCAqZGV2KTsKKwl2b2lkCQkoKmVuYWJsZSkoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmV2dCwgaW50IGlkeCk7CisJdm9pZAkJKCpkaXNhYmxlKShzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqZXZ0LCBpbnQgaWR4KTsKKwlpbnQJCSgqZXZlbnRfbWFwKShpbnQgZXZ0KTsKKwl1NjQJCSgqcmF3X2V2ZW50KSh1NjQpOworCWludAkJKCpnZXRfZXZlbnRfaWR4KShzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJCQkJIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpOworCXUzMgkJKCpyZWFkX2NvdW50ZXIpKGludCBpZHgpOworCXZvaWQJCSgqd3JpdGVfY291bnRlcikoaW50IGlkeCwgdTMyIHZhbCk7CisJdm9pZAkJKCpzdGFydCkodm9pZCk7CisJdm9pZAkJKCpzdG9wKSh2b2lkKTsKKwlpbnQJCW51bV9ldmVudHM7CisJdTY0CQltYXhfcGVyaW9kOworfTsKKworLyogU2V0IGF0IHJ1bnRpbWUgd2hlbiB3ZSBrbm93IHdoYXQgQ1BVIHR5cGUgd2UgYXJlLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fcG11ICphcm1wbXU7CisKKyNkZWZpbmUgSFdfT1BfVU5TVVBQT1JURUQJCTB4RkZGRgorCisjZGVmaW5lIEMoX3gpIFwKKwlQRVJGX0NPVU5UX0hXX0NBQ0hFXyMjX3gKKworI2RlZmluZSBDQUNIRV9PUF9VTlNVUFBPUlRFRAkJMHhGRkZGCisKK3N0YXRpYyB1bnNpZ25lZCBhcm1wbXVfcGVyZl9jYWNoZV9tYXBbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJICAgICBbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJICAgICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXTsKKworc3RhdGljIGludAorYXJtcG11X21hcF9jYWNoZV9ldmVudCh1NjQgY29uZmlnKQoreworCXVuc2lnbmVkIGludCBjYWNoZV90eXBlLCBjYWNoZV9vcCwgY2FjaGVfcmVzdWx0LCByZXQ7CisKKwljYWNoZV90eXBlID0gKGNvbmZpZyA+PiAgMCkgJiAweGZmOworCWlmIChjYWNoZV90eXBlID49IFBFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNhY2hlX29wID0gKGNvbmZpZyA+PiAgOCkgJiAweGZmOworCWlmIChjYWNoZV9vcCA+PSBQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljYWNoZV9yZXN1bHQgPSAoY29uZmlnID4+IDE2KSAmIDB4ZmY7CisJaWYgKGNhY2hlX3Jlc3VsdCA+PSBQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gKGludClhcm1wbXVfcGVyZl9jYWNoZV9tYXBbY2FjaGVfdHlwZV1bY2FjaGVfb3BdW2NhY2hlX3Jlc3VsdF07CisKKwlpZiAocmV0ID09IENBQ0hFX09QX1VOU1VQUE9SVEVEKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2FybXBtdV9ldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsCisJCQlpbnQgaWR4KQoreworCXM2NCBsZWZ0ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CisJczY0IHBlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh1bmxpa2VseShsZWZ0IDw9IC1wZXJpb2QpKSB7CisJCWxlZnQgPSBwZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CisJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CisJCXJldCA9IDE7CisJfQorCisJaWYgKHVubGlrZWx5KGxlZnQgPD0gMCkpIHsKKwkJbGVmdCArPSBwZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CisJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CisJCXJldCA9IDE7CisJfQorCisJaWYgKGxlZnQgPiAoczY0KWFybXBtdS0+bWF4X3BlcmlvZCkKKwkJbGVmdCA9IGFybXBtdS0+bWF4X3BlcmlvZDsKKworCWF0b21pYzY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCAodTY0KS1sZWZ0KTsKKworCWFybXBtdS0+d3JpdGVfY291bnRlcihpZHgsICh1NjQpKC1sZWZ0KSAmIDB4ZmZmZmZmZmYpOworCisJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHU2NAorYXJtcG11X2V2ZW50X3VwZGF0ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCSAgICBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAorCQkgICAgaW50IGlkeCkKK3sKKwlpbnQgc2hpZnQgPSA2NCAtIDMyOworCXM2NCBwcmV2X3Jhd19jb3VudCwgbmV3X3Jhd19jb3VudDsKKwlzNjQgZGVsdGE7CisKK2FnYWluOgorCXByZXZfcmF3X2NvdW50ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wcmV2X2NvdW50KTsKKwluZXdfcmF3X2NvdW50ID0gYXJtcG11LT5yZWFkX2NvdW50ZXIoaWR4KTsKKworCWlmIChhdG9taWM2NF9jbXB4Y2hnKCZod2MtPnByZXZfY291bnQsIHByZXZfcmF3X2NvdW50LAorCQkJICAgICBuZXdfcmF3X2NvdW50KSAhPSBwcmV2X3Jhd19jb3VudCkKKwkJZ290byBhZ2FpbjsKKworCWRlbHRhID0gKG5ld19yYXdfY291bnQgPDwgc2hpZnQpIC0gKHByZXZfcmF3X2NvdW50IDw8IHNoaWZ0KTsKKwlkZWx0YSA+Pj0gc2hpZnQ7CisKKwlhdG9taWM2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOworCWF0b21pYzY0X3N1YihkZWx0YSwgJmh3Yy0+cGVyaW9kX2xlZnQpOworCisJcmV0dXJuIG5ld19yYXdfY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkCithcm1wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgaWR4ID0gaHdjLT5pZHg7CisKKwlXQVJOX09OKGlkeCA8IDApOworCisJY2xlYXJfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spOworCWFybXBtdS0+ZGlzYWJsZShod2MsIGlkeCk7CisKKwliYXJyaWVyKCk7CisKKwlhcm1wbXVfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CisJY3B1Yy0+ZXZlbnRzW2lkeF0gPSBOVUxMOworCWNsZWFyX2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzayk7CisKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7Cit9CisKK3N0YXRpYyB2b2lkCithcm1wbXVfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisKKwkvKiBEb24ndCByZWFkIGRpc2FibGVkIGNvdW50ZXJzISAqLworCWlmIChod2MtPmlkeCA8IDApCisJCXJldHVybjsKKworCWFybXBtdV9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaHdjLT5pZHgpOworfQorCitzdGF0aWMgdm9pZAorYXJtcG11X3VudGhyb3R0bGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCisJLyoKKwkgKiBTZXQgdGhlIHBlcmlvZCBhZ2Fpbi4gU29tZSBjb3VudGVycyBjYW4ndCBiZSBzdG9wcGVkLCBzbyB3aGVuIHdlCisJICogd2VyZSB0aHJvdHRsZWQgd2Ugc2ltcGx5IGRpc2FibGVkIHRoZSBJUlEgc291cmNlIGFuZCB0aGUgY291bnRlcgorCSAqIG1heSBoYXZlIGJlZW4gbGVmdCBjb3VudGluZy4gSWYgd2UgZG9uJ3QgZG8gdGhpcyBzdGVwIHRoZW4gd2UgbWF5CisJICogZ2V0IGFuIGludGVycnVwdCB0b28gc29vbiBvciAqd2F5KiB0b28gbGF0ZSBpZiB0aGUgb3ZlcmZsb3cgaGFzCisJICogaGFwcGVuZWQgc2luY2UgZGlzYWJsaW5nLgorCSAqLworCWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGh3Yy0+aWR4KTsKKwlhcm1wbXUtPmVuYWJsZShod2MsIGh3Yy0+aWR4KTsKK30KKworc3RhdGljIGludAorYXJtcG11X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgaWR4OworCWludCBlcnIgPSAwOworCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIHNwYWNlIGZvciB0aGUgY291bnRlciB0aGVuIGZpbmlzaCBlYXJseS4gKi8KKwlpZHggPSBhcm1wbXUtPmdldF9ldmVudF9pZHgoY3B1YywgaHdjKTsKKwlpZiAoaWR4IDwgMCkgeworCQllcnIgPSBpZHg7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogSWYgdGhlcmUgaXMgYW4gZXZlbnQgaW4gdGhlIGNvdW50ZXIgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGVuIG1ha2UKKwkgKiBzdXJlIGl0IGlzIGRpc2FibGVkLgorCSAqLworCWV2ZW50LT5ody5pZHggPSBpZHg7CisJYXJtcG11LT5kaXNhYmxlKGh3YywgaWR4KTsKKwljcHVjLT5ldmVudHNbaWR4XSA9IGV2ZW50OworCXNldF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzayk7CisKKwkvKiBTZXQgdGhlIHBlcmlvZCBmb3IgdGhlIGV2ZW50LiAqLworCWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCk7CisKKwkvKiBFbmFibGUgdGhlIGV2ZW50LiAqLworCWFybXBtdS0+ZW5hYmxlKGh3YywgaWR4KTsKKworCS8qIFByb3BhZ2F0ZSBvdXIgY2hhbmdlcyB0byB0aGUgdXNlcnNwYWNlIG1hcHBpbmcuICovCisJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBwbXUgcG11ID0geworCS5lbmFibGUJICAgID0gYXJtcG11X2VuYWJsZSwKKwkuZGlzYWJsZSAgICA9IGFybXBtdV9kaXNhYmxlLAorCS51bnRocm90dGxlID0gYXJtcG11X3VudGhyb3R0bGUsCisJLnJlYWQJICAgID0gYXJtcG11X3JlYWQsCit9OworCitzdGF0aWMgaW50Cit2YWxpZGF0ZV9ldmVudChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50IGZha2VfZXZlbnQgPSBldmVudC0+aHc7CisKKwlpZiAoZXZlbnQtPnBtdSAmJiBldmVudC0+cG11ICE9ICZwbXUpCisJCXJldHVybiAwOworCisJcmV0dXJuIGFybXBtdS0+Z2V0X2V2ZW50X2lkeChjcHVjLCAmZmFrZV9ldmVudCkgPj0gMDsKK30KKworc3RhdGljIGludAordmFsaWRhdGVfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpzaWJsaW5nLCAqbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlcjsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyBmYWtlX3BtdTsKKworCW1lbXNldCgmZmFrZV9wbXUsIDAsIHNpemVvZihmYWtlX3BtdSkpOworCisJaWYgKCF2YWxpZGF0ZV9ldmVudCgmZmFrZV9wbXUsIGxlYWRlcikpCisJCXJldHVybiAtRU5PU1BDOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzaWJsaW5nLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBzaWJsaW5nKSkKKwkJCXJldHVybiAtRU5PU1BDOworCX0KKworCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBldmVudCkpCisJCXJldHVybiAtRU5PU1BDOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FybXBtdV9yZXNlcnZlX2hhcmR3YXJlKHZvaWQpCit7CisJaW50IGk7CisJaW50IGVycjsKKworCXBtdV9pcnFzID0gcmVzZXJ2ZV9wbXUoKTsKKwlpZiAoSVNfRVJSKHBtdV9pcnFzKSkgeworCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVzZXJ2ZSBwbXVcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwbXVfaXJxcyk7CisJfQorCisJaW5pdF9wbXUoKTsKKworCWlmIChwbXVfaXJxcy0+bnVtX2lycXMgPCAxKSB7CisJCXByX2Vycigibm8gaXJxcyBmb3IgUE1VcyBkZWZpbmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHBtdV9pcnFzLT5udW1faXJxczsgKytpKSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKHBtdV9pcnFzLT5pcnFzW2ldLCBhcm1wbXUtPmhhbmRsZV9pcnEsCisJCQkJICBJUlFGX0RJU0FCTEVELCAiYXJtcG11IiwgTlVMTCk7CisJCWlmIChlcnIpIHsKKwkJCXByX3dhcm5pbmcoInVuYWJsZSB0byByZXF1ZXN0IElSUSVkIGZvciBBUk0gIgorCQkJCSAgICJwZXJmIGNvdW50ZXJzXG4iLCBwbXVfaXJxcy0+aXJxc1tpXSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChlcnIpIHsKKwkJZm9yIChpID0gaSAtIDE7IGkgPj0gMDsgLS1pKQorCQkJZnJlZV9pcnEocG11X2lycXMtPmlycXNbaV0sIE5VTEwpOworCQlyZWxlYXNlX3BtdShwbXVfaXJxcyk7CisJCXBtdV9pcnFzID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAorYXJtcG11X3JlbGVhc2VfaGFyZHdhcmUodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IHBtdV9pcnFzLT5udW1faXJxcyAtIDE7IGkgPj0gMDsgLS1pKQorCQlmcmVlX2lycShwbXVfaXJxcy0+aXJxc1tpXSwgTlVMTCk7CisJYXJtcG11LT5zdG9wKCk7CisKKwlyZWxlYXNlX3BtdShwbXVfaXJxcyk7CisJcG11X2lycXMgPSBOVUxMOworfQorCitzdGF0aWMgYXRvbWljX3QgYWN0aXZlX2V2ZW50cyA9IEFUT01JQ19JTklUKDApOworc3RhdGljIERFRklORV9NVVRFWChwbXVfcmVzZXJ2ZV9tdXRleCk7CisKK3N0YXRpYyB2b2lkCitod19wZXJmX2V2ZW50X2Rlc3Ryb3koc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWlmIChhdG9taWNfZGVjX2FuZF9tdXRleF9sb2NrKCZhY3RpdmVfZXZlbnRzLCAmcG11X3Jlc2VydmVfbXV0ZXgpKSB7CisJCWFybXBtdV9yZWxlYXNlX2hhcmR3YXJlKCk7CisJCW11dGV4X3VubG9jaygmcG11X3Jlc2VydmVfbXV0ZXgpOworCX0KK30KKworc3RhdGljIGludAorX19od19wZXJmX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBtYXBwaW5nLCBlcnI7CisKKwkvKiBEZWNvZGUgdGhlIGdlbmVyaWMgdHlwZSBpbnRvIGFuIEFSTSBldmVudCBpZGVudGlmaWVyLiAqLworCWlmIChQRVJGX1RZUEVfSEFSRFdBUkUgPT0gZXZlbnQtPmF0dHIudHlwZSkgeworCQltYXBwaW5nID0gYXJtcG11LT5ldmVudF9tYXAoZXZlbnQtPmF0dHIuY29uZmlnKTsKKwl9IGVsc2UgaWYgKFBFUkZfVFlQRV9IV19DQUNIRSA9PSBldmVudC0+YXR0ci50eXBlKSB7CisJCW1hcHBpbmcgPSBhcm1wbXVfbWFwX2NhY2hlX2V2ZW50KGV2ZW50LT5hdHRyLmNvbmZpZyk7CisJfSBlbHNlIGlmIChQRVJGX1RZUEVfUkFXID09IGV2ZW50LT5hdHRyLnR5cGUpIHsKKwkJbWFwcGluZyA9IGFybXBtdS0+cmF3X2V2ZW50KGV2ZW50LT5hdHRyLmNvbmZpZyk7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoImV2ZW50IHR5cGUgJXggbm90IHN1cHBvcnRlZFxuIiwgZXZlbnQtPmF0dHIudHlwZSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlpZiAobWFwcGluZyA8IDApIHsKKwkJcHJfZGVidWcoImV2ZW50ICV4OiVsbHggbm90IHN1cHBvcnRlZFxuIiwgZXZlbnQtPmF0dHIudHlwZSwKKwkJCSBldmVudC0+YXR0ci5jb25maWcpOworCQlyZXR1cm4gbWFwcGluZzsKKwl9CisKKwkvKgorCSAqIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBleGNsdWRlIHRoZSBjb3VudGVyIGZyb20gY2VydGFpbiBtb2Rlcy4KKwkgKiBUaGUgQVJNIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGFyZSBvbiBhbGwgb2YgdGhlIHRpbWUgc28gaWYgc29tZW9uZQorCSAqIGhhcyBhc2tlZCB1cyBmb3Igc29tZSBleGNsdWRlcyB0aGVuIHdlIGhhdmUgdG8gZmFpbC4KKwkgKi8KKwlpZiAoZXZlbnQtPmF0dHIuZXhjbHVkZV9rZXJuZWwgfHwgZXZlbnQtPmF0dHIuZXhjbHVkZV91c2VyIHx8CisJICAgIGV2ZW50LT5hdHRyLmV4Y2x1ZGVfaHYgfHwgZXZlbnQtPmF0dHIuZXhjbHVkZV9pZGxlKSB7CisJCXByX2RlYnVnKCJBUk0gcGVyZm9ybWFuY2UgY291bnRlcnMgZG8gbm90IHN1cHBvcnQgIgorCQkJICJtb2RlIGV4Y2x1c2lvblxuIik7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJLyoKKwkgKiBXZSBkb24ndCBhc3NpZ24gYW4gaW5kZXggdW50aWwgd2UgYWN0dWFsbHkgcGxhY2UgdGhlIGV2ZW50IG9udG8KKwkgKiBoYXJkd2FyZS4gVXNlIC0xIHRvIHNpZ25pZnkgdGhhdCB3ZSBoYXZlbid0IGRlY2lkZWQgd2hlcmUgdG8gcHV0IGl0CisJICogeWV0LiBGb3IgU01QIHN5c3RlbXMsIGVhY2ggY29yZSBoYXMgaXQncyBvd24gUE1VIHNvIHdlIGNhbid0IGRvIGFueQorCSAqIGNsZXZlciBhbGxvY2F0aW9uIG9yIGNvbnN0cmFpbnRzIGNoZWNraW5nIGF0IHRoaXMgcG9pbnQuCisJICovCisJaHdjLT5pZHggPSAtMTsKKworCS8qCisJICogU3RvcmUgdGhlIGV2ZW50IGVuY29kaW5nIGludG8gdGhlIGNvbmZpZ19iYXNlIGZpZWxkLiBjb25maWcgYW5kCisJICogZXZlbnRfYmFzZSBhcmUgdW51c2VkIGFzIHRoZSBvbmx5IDIgdGhpbmdzIHdlIG5lZWQgdG8ga25vdyBhcmUKKwkgKiB0aGUgZXZlbnQgbWFwcGluZyBhbmQgdGhlIGNvdW50ZXIgdG8gdXNlLiBUaGUgY291bnRlciB0byB1c2UgaXMKKwkgKiBhbHNvIHRoZSBpbmR4IGFuZCB0aGUgY29uZmlnX2Jhc2UgaXMgdGhlIGV2ZW50IHR5cGUuCisJICovCisJaHdjLT5jb25maWdfYmFzZQkgICAgPSAodW5zaWduZWQgbG9uZyltYXBwaW5nOworCWh3Yy0+Y29uZmlnCQkgICAgPSAwOworCWh3Yy0+ZXZlbnRfYmFzZQkJICAgID0gMDsKKworCWlmICghaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJCWh3Yy0+c2FtcGxlX3BlcmlvZCAgPSBhcm1wbXUtPm1heF9wZXJpb2Q7CisJCWh3Yy0+bGFzdF9wZXJpb2QgICAgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKKwl9CisKKwllcnIgPSAwOworCWlmIChldmVudC0+Z3JvdXBfbGVhZGVyICE9IGV2ZW50KSB7CisJCWVyciA9IHZhbGlkYXRlX2dyb3VwKGV2ZW50KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2NvbnN0IHN0cnVjdCBwbXUgKgoraHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICghYXJtcG11KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCWV2ZW50LT5kZXN0cm95ID0gaHdfcGVyZl9ldmVudF9kZXN0cm95OworCisJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZhY3RpdmVfZXZlbnRzKSkgeworCQlpZiAoYXRvbWljX3JlYWQoJmFjdGl2ZV9ldmVudHMpID4gcGVyZl9tYXhfZXZlbnRzKSB7CisJCQlhdG9taWNfZGVjKCZhY3RpdmVfZXZlbnRzKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOworCQl9CisKKwkJbXV0ZXhfbG9jaygmcG11X3Jlc2VydmVfbXV0ZXgpOworCQlpZiAoYXRvbWljX3JlYWQoJmFjdGl2ZV9ldmVudHMpID09IDApIHsKKwkJCWVyciA9IGFybXBtdV9yZXNlcnZlX2hhcmR3YXJlKCk7CisJCX0KKworCQlpZiAoIWVycikKKwkJCWF0b21pY19pbmMoJmFjdGl2ZV9ldmVudHMpOworCQltdXRleF91bmxvY2soJnBtdV9yZXNlcnZlX211dGV4KTsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJZXJyID0gX19od19wZXJmX2V2ZW50X2luaXQoZXZlbnQpOworCWlmIChlcnIpCisJCWh3X3BlcmZfZXZlbnRfZGVzdHJveShldmVudCk7CisKKwlyZXR1cm4gZXJyID8gRVJSX1BUUihlcnIpIDogJnBtdTsKK30KKwordm9pZAoraHdfcGVyZl9lbmFibGUodm9pZCkKK3sKKwkvKiBFbmFibGUgYWxsIG9mIHRoZSBwZXJmIGV2ZW50cyBvbiBoYXJkd2FyZS4gKi8KKwlpbnQgaWR4OworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKKwlpZiAoIWFybXBtdSkKKwkJcmV0dXJuOworCisJZm9yIChpZHggPSAwOyBpZHggPD0gYXJtcG11LT5udW1fZXZlbnRzOyArK2lkeCkgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbaWR4XTsKKworCQlpZiAoIWV2ZW50KQorCQkJY29udGludWU7CisKKwkJYXJtcG11LT5lbmFibGUoJmV2ZW50LT5odywgaWR4KTsKKwl9CisKKwlhcm1wbXUtPnN0YXJ0KCk7Cit9CisKK3ZvaWQKK2h3X3BlcmZfZGlzYWJsZSh2b2lkKQoreworCWlmIChhcm1wbXUpCisJCWFybXBtdS0+c3RvcCgpOworfQorCisvKgorICogQVJNdjYgUGVyZm9ybWFuY2UgY291bnRlciBoYW5kbGluZyBjb2RlLgorICoKKyAqIEFSTXY2IGhhcyAyIGNvbmZpZ3VyYWJsZSBwZXJmb3JtYW5jZSBjb3VudGVycyBhbmQgYSBzaW5nbGUgY3ljbGUgY291bnRlci4KKyAqIFRoZXkgYWxsIHNoYXJlIGEgc2luZ2xlIHJlc2V0IGJpdCBidXQgY2FuIGJlIHdyaXR0ZW4gdG8gemVybyBzbyB3ZSBjYW4gdXNlCisgKiB0aGF0IGZvciBhIHJlc2V0LgorICoKKyAqIFRoZSBjb3VudGVycyBjYW4ndCBiZSBpbmRpdmlkdWFsbHkgZW5hYmxlZCBvciBkaXNhYmxlZCBzbyB3aGVuIHdlIHJlbW92ZQorICogb25lIGV2ZW50IGFuZCByZXBsYWNlIGl0IHdpdGggYW5vdGhlciB3ZSBjb3VsZCBnZXQgc3B1cmlvdXMgY291bnRzIGZyb20gdGhlCisgKiB3cm9uZyBldmVudC4gSG93ZXZlciwgd2UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgdGhlCisgKiBwZXJmb3JtYW5jZSBjb3VudGVycyBjYW4gZXhwb3J0IGV2ZW50cyB0byB0aGUgZXZlbnQgYnVzLCBhbmQgdGhlIGV2ZW50IGJ1cworICogaXRzZWxmIGNhbiBiZSBtb25pdG9yZWQuIFRoaXMgcmVxdWlyZXMgdGhhdCB3ZSAqZG9uJ3QqIGV4cG9ydCB0aGUgZXZlbnRzIHRvCisgKiB0aGUgZXZlbnQgYnVzLiBUaGUgcHJvY2VkdXJlIGZvciBkaXNhYmxpbmcgYSBjb25maWd1cmFibGUgY291bnRlciBpczoKKyAqCS0gY2hhbmdlIHRoZSBjb3VudGVyIHRvIGNvdW50IHRoZSBFVE1FWFRPVVRbMF0gc2lnbmFsICgweDIwKS4gVGhpcworICoJICBlZmZlY3RpdmVseSBzdG9wcyB0aGUgY291bnRlciBmcm9tIGNvdW50aW5nLgorICoJLSBkaXNhYmxlIHRoZSBjb3VudGVyJ3MgaW50ZXJydXB0IGdlbmVyYXRpb24gKGVhY2ggY291bnRlciBoYXMgaXQncworICoJICBvd24gaW50ZXJydXB0IGVuYWJsZSBiaXQpLgorICogT25jZSBzdG9wcGVkLCB0aGUgY291bnRlciB2YWx1ZSBjYW4gYmUgd3JpdHRlbiBhcyAwIHRvIHJlc2V0LgorICoKKyAqIFRvIGVuYWJsZSBhIGNvdW50ZXI6CisgKgktIGVuYWJsZSB0aGUgY291bnRlcidzIGludGVycnVwdCBnZW5lcmF0aW9uLgorICoJLSBzZXQgdGhlIG5ldyBldmVudCB0eXBlLgorICoKKyAqIE5vdGU6IHRoZSBkZWRpY2F0ZWQgY3ljbGUgY291bnRlciBvbmx5IGNvdW50cyBjeWNsZXMgYW5kIGNhbid0IGJlCisgKiBlbmFibGVkL2Rpc2FibGVkIGluZGVwZW5kZW50bHkgb2YgdGhlIG90aGVycy4gV2hlbiB3ZSB3YW50IHRvIGRpc2FibGUgdGhlCisgKiBjeWNsZSBjb3VudGVyLCB3ZSBoYXZlIHRvIGp1c3QgZGlzYWJsZSB0aGUgaW50ZXJydXB0IHJlcG9ydGluZyBhbmQgc3RhcnQKKyAqIGlnbm9yaW5nIHRoYXQgY291bnRlci4gV2hlbiByZS1lbmFibGluZywgd2UgaGF2ZSB0byByZXNldCB0aGUgdmFsdWUgYW5kCisgKiBlbmFibGUgdGhlIGludGVycnVwdC4KKyAqLworCitlbnVtIGFybXY2X3BlcmZfdHlwZXMgeworCUFSTVY2X1BFUkZDVFJfSUNBQ0hFX01JU1MJICAgID0gMHgwLAorCUFSTVY2X1BFUkZDVFJfSUJVRl9TVEFMTAkgICAgPSAweDEsCisJQVJNVjZfUEVSRkNUUl9EREVQX1NUQUxMCSAgICA9IDB4MiwKKwlBUk1WNl9QRVJGQ1RSX0lUTEJfTUlTUwkJICAgID0gMHgzLAorCUFSTVY2X1BFUkZDVFJfRFRMQl9NSVNTCQkgICAgPSAweDQsCisJQVJNVjZfUEVSRkNUUl9CUl9FWEVDCQkgICAgPSAweDUsCisJQVJNVjZfUEVSRkNUUl9CUl9NSVNQUkVESUNUCSAgICA9IDB4NiwKKwlBUk1WNl9QRVJGQ1RSX0lOU1RSX0VYRUMJICAgID0gMHg3LAorCUFSTVY2X1BFUkZDVFJfRENBQ0hFX0hJVAkgICAgPSAweDksCisJQVJNVjZfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTCSAgICA9IDB4QSwKKwlBUk1WNl9QRVJGQ1RSX0RDQUNIRV9NSVNTCSAgICA9IDB4QiwKKwlBUk1WNl9QRVJGQ1RSX0RDQUNIRV9XQkFDSwkgICAgPSAweEMsCisJQVJNVjZfUEVSRkNUUl9TV19QQ19DSEFOR0UJICAgID0gMHhELAorCUFSTVY2X1BFUkZDVFJfTUFJTl9UTEJfTUlTUwkgICAgPSAweEYsCisJQVJNVjZfUEVSRkNUUl9FWFBMX0RfQUNDRVNTCSAgICA9IDB4MTAsCisJQVJNVjZfUEVSRkNUUl9MU1VfRlVMTF9TVEFMTAkgICAgPSAweDExLAorCUFSTVY2X1BFUkZDVFJfV0JVRl9EUkFJTkVECSAgICA9IDB4MTIsCisJQVJNVjZfUEVSRkNUUl9DUFVfQ1lDTEVTCSAgICA9IDB4RkYsCisJQVJNVjZfUEVSRkNUUl9OT1AJCSAgICA9IDB4MjAsCit9OworCitlbnVtIGFybXY2X2NvdW50ZXJzIHsKKwlBUk1WNl9DWUNMRV9DT1VOVEVSID0gMSwKKwlBUk1WNl9DT1VOVEVSMCwKKwlBUk1WNl9DT1VOVEVSMSwKK307CisKKy8qCisgKiBUaGUgaGFyZHdhcmUgZXZlbnRzIHRoYXQgd2Ugc3VwcG9ydC4gV2UgZG8gc3VwcG9ydCBjYWNoZSBvcGVyYXRpb25zIGJ1dAorICogd2UgaGF2ZSBoYXJ2YXJkIGNhY2hlcyBhbmQgbm8gd2F5IHRvIGNvbWJpbmUgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEKKyAqIGFjY2Vzc2VzL21pc3NlcyBpbiBoYXJkd2FyZS4KKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFybXY2X3BlcmZfbWFwW1BFUkZfQ09VTlRfSFdfTUFYXSA9IHsKKwlbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkgICAgPSBBUk1WNl9QRVJGQ1RSX0NQVV9DWUNMRVMsCisJW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkgICAgPSBBUk1WNl9QRVJGQ1RSX0lOU1RSX0VYRUMsCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gICAgPSBIV19PUF9VTlNVUFBPUlRFRCwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdID0gQVJNVjZfUEVSRkNUUl9CUl9FWEVDLAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCSAgICA9IEFSTVY2X1BFUkZDVFJfQlJfTUlTUFJFRElDVCwKKwlbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkgICAgPSBIV19PUF9VTlNVUFBPUlRFRCwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBhcm12Nl9wZXJmX2NhY2hlX21hcFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQkJICBbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJCSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPSB7CisJW0MoTDFEKV0gPSB7CisJCS8qCisJCSAqIFRoZSBwZXJmb3JtYW5jZSBjb3VudGVycyBkb24ndCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcmVhZAorCQkgKiBhbmQgd3JpdGUgYWNjZXNzZXMvbWlzc2VzIHNvIHRoaXMgaXNuJ3Qgc3RyaWN0bHkgY29ycmVjdCwKKwkJICogYnV0IGl0J3MgdGhlIGJlc3Qgd2UgY2FuIGRvLiBXcml0ZXMgYW5kIHJlYWRzIGdldAorCQkgKiBjb21iaW5lZC4KKwkJICovCisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY2X1BFUkZDVFJfRENBQ0hFX0FDQ0VTUywKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0RDQUNIRV9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjZfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY2X1BFUkZDVFJfRENBQ0hFX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKEwxSSldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0lDQUNIRV9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjZfUEVSRkNUUl9JQ0FDSEVfTUlTUywKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoTEwpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoRFRMQildID0geworCQkvKgorCQkgKiBUaGUgQVJNIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGNhbiBjb3VudCBtaWNybyBEVExCIG1pc3NlcywKKwkJICogbWljcm8gSVRMQiBtaXNzZXMgYW5kIG1haW4gVExCIG1pc3Nlcy4gVGhlcmUgaXNuJ3QgYW4gZXZlbnQKKwkJICogZm9yIFRMQiBtaXNzZXMsIHNvIHVzZSB0aGUgbWljcm8gbWlzc2VzIGhlcmUgYW5kIGlmIHVzZXJzCisJCSAqIHdhbnQgdGhlIG1haW4gVExCIG1pc3NlcyB0aGV5IGNhbiB1c2UgYSByYXcgY291bnRlci4KKwkJICovCisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY2X1BFUkZDVFJfRFRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjZfUEVSRkNUUl9EVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKElUTEIpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjZfUEVSRkNUUl9JVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0lUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoQlBVKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorfTsKKworZW51bSBhcm12Nm1wY29yZV9wZXJmX3R5cGVzIHsKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0lDQUNIRV9NSVNTCSAgICA9IDB4MCwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0lCVUZfU1RBTEwJICAgID0gMHgxLAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfRERFUF9TVEFMTAkgICAgPSAweDIsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9JVExCX01JU1MJICAgID0gMHgzLAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfRFRMQl9NSVNTCSAgICA9IDB4NCwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0JSX0VYRUMJICAgID0gMHg1LAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfQlJfTk9UUFJFRElDVCAgID0gMHg2LAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfQlJfTUlTUFJFRElDVCAgID0gMHg3LAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfSU5TVFJfRVhFQwkgICAgPSAweDgsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfUkRBQ0NFU1MgPSAweEEsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfUkRNSVNTICAgPSAweEIsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfV1JBQ0NFU1MgPSAweEMsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfV1JNSVNTICAgPSAweEQsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfRVZJQ1RJT04gPSAweEUsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9TV19QQ19DSEFOR0UgICAgPSAweEYsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9NQUlOX1RMQl9NSVNTICAgPSAweDEwLAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfRVhQTF9NRU1fQUNDRVNTID0gMHgxMSwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0xTVV9GVUxMX1NUQUxMICA9IDB4MTIsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9XQlVGX0RSQUlORUQgICAgPSAweDEzLAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfQ1BVX0NZQ0xFUwkgICAgPSAweEZGLAorfTsKKworLyoKKyAqIFRoZSBoYXJkd2FyZSBldmVudHMgdGhhdCB3ZSBzdXBwb3J0LiBXZSBkbyBzdXBwb3J0IGNhY2hlIG9wZXJhdGlvbnMgYnV0CisgKiB3ZSBoYXZlIGhhcnZhcmQgY2FjaGVzIGFuZCBubyB3YXkgdG8gY29tYmluZSBpbnN0cnVjdGlvbiBhbmQgZGF0YQorICogYWNjZXNzZXMvbWlzc2VzIGluIGhhcmR3YXJlLgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgYXJtdjZtcGNvcmVfcGVyZl9tYXBbUEVSRl9DT1VOVF9IV19NQVhdID0geworCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfQ1BVX0NZQ0xFUywKKwlbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfSU5TVFJfRVhFQywKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JICAgID0gSFdfT1BfVU5TVVBQT1JURUQsCisJW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10gPSBBUk1WNk1QQ09SRV9QRVJGQ1RSX0JSX0VYRUMsCisJW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9CUl9NSVNQUkVESUNULAorCVtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFybXY2bXBjb3JlX3BlcmZfY2FjaGVfbWFwW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0geworCVtDKEwxRCldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0KKwkJCQlBUk1WNk1QQ09SRV9QRVJGQ1RSX0RDQUNIRV9SREFDQ0VTUywKKwkJCVtDKFJFU1VMVF9NSVNTKV0gICAgPQorCQkJCUFSTVY2TVBDT1JFX1BFUkZDVFJfRENBQ0hFX1JETUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPQorCQkJCUFSTVY2TVBDT1JFX1BFUkZDVFJfRENBQ0hFX1dSQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9CisJCQkJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfV1JNSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoTDFJKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0gICAgPSBBUk1WNk1QQ09SRV9QRVJGQ1RSX0lDQUNIRV9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfSUNBQ0hFX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhMTCldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhEVExCKV0gPSB7CisJCS8qCisJCSAqIFRoZSBBUk0gcGVyZm9ybWFuY2UgY291bnRlcnMgY2FuIGNvdW50IG1pY3JvIERUTEIgbWlzc2VzLAorCQkgKiBtaWNybyBJVExCIG1pc3NlcyBhbmQgbWFpbiBUTEIgbWlzc2VzLiBUaGVyZSBpc24ndCBhbiBldmVudAorCQkgKiBmb3IgVExCIG1pc3Nlcywgc28gdXNlIHRoZSBtaWNybyBtaXNzZXMgaGVyZSBhbmQgaWYgdXNlcnMKKwkJICogd2FudCB0aGUgbWFpbiBUTEIgbWlzc2VzIHRoZXkgY2FuIHVzZSBhIHJhdyBjb3VudGVyLgorCQkgKi8KKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfRFRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfRFRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoSVRMQildID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9JVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9JVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhCUFUpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2FybXY2X3BtY3JfcmVhZCh2b2lkKQoreworCXUzMiB2YWw7CisJYXNtIHZvbGF0aWxlKCJtcmMgICBwMTUsIDAsICUwLCBjMTUsIGMxMiwgMCIgOiAiPXIiKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYXJtdjZfcG1jcl93cml0ZSh1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIm1jciAgIHAxNSwgMCwgJTAsIGMxNSwgYzEyLCAwIiA6IDogInIiKHZhbCkpOworfQorCisjZGVmaW5lIEFSTVY2X1BNQ1JfRU5BQkxFCQkoMSA8PCAwKQorI2RlZmluZSBBUk1WNl9QTUNSX0NUUjAxX1JFU0VUCQkoMSA8PCAxKQorI2RlZmluZSBBUk1WNl9QTUNSX0NDT1VOVF9SRVNFVAkJKDEgPDwgMikKKyNkZWZpbmUgQVJNVjZfUE1DUl9DQ09VTlRfRElWCQkoMSA8PCAzKQorI2RlZmluZSBBUk1WNl9QTUNSX0NPVU5UMF9JRU4JCSgxIDw8IDQpCisjZGVmaW5lIEFSTVY2X1BNQ1JfQ09VTlQxX0lFTgkJKDEgPDwgNSkKKyNkZWZpbmUgQVJNVjZfUE1DUl9DQ09VTlRfSUVOCQkoMSA8PCA2KQorI2RlZmluZSBBUk1WNl9QTUNSX0NPVU5UMF9PVkVSRkxPVwkoMSA8PCA4KQorI2RlZmluZSBBUk1WNl9QTUNSX0NPVU5UMV9PVkVSRkxPVwkoMSA8PCA5KQorI2RlZmluZSBBUk1WNl9QTUNSX0NDT1VOVF9PVkVSRkxPVwkoMSA8PCAxMCkKKyNkZWZpbmUgQVJNVjZfUE1DUl9FVlRfQ09VTlQwX1NISUZUCTIwCisjZGVmaW5lIEFSTVY2X1BNQ1JfRVZUX0NPVU5UMF9NQVNLCSgweEZGIDw8IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMF9TSElGVCkKKyNkZWZpbmUgQVJNVjZfUE1DUl9FVlRfQ09VTlQxX1NISUZUCTEyCisjZGVmaW5lIEFSTVY2X1BNQ1JfRVZUX0NPVU5UMV9NQVNLCSgweEZGIDw8IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMV9TSElGVCkKKworI2RlZmluZSBBUk1WNl9QTUNSX09WRVJGTE9XRURfTUFTSyBcCisJKEFSTVY2X1BNQ1JfQ09VTlQwX09WRVJGTE9XIHwgQVJNVjZfUE1DUl9DT1VOVDFfT1ZFUkZMT1cgfCBcCisJIEFSTVY2X1BNQ1JfQ0NPVU5UX09WRVJGTE9XKQorCitzdGF0aWMgaW5saW5lIGludAorYXJtdjZfcG1jcl9oYXNfb3ZlcmZsb3dlZCh1bnNpZ25lZCBsb25nIHBtY3IpCit7CisJcmV0dXJuIChwbWNyICYgQVJNVjZfUE1DUl9PVkVSRkxPV0VEX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXJtdjZfcG1jcl9jb3VudGVyX2hhc19vdmVyZmxvd2VkKHVuc2lnbmVkIGxvbmcgcG1jciwKKwkJCQkgIGVudW0gYXJtdjZfY291bnRlcnMgY291bnRlcikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGNvdW50ZXIpCisJCXJldCA9IHBtY3IgJiBBUk1WNl9QTUNSX0NDT1VOVF9PVkVSRkxPVzsKKwllbHNlIGlmIChBUk1WNl9DT1VOVEVSMCA9PSBjb3VudGVyKQorCQlyZXQgPSBwbWNyICYgQVJNVjZfUE1DUl9DT1VOVDBfT1ZFUkZMT1c7CisJZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjEgPT0gY291bnRlcikKKwkJcmV0ID0gcG1jciAmIEFSTVY2X1BNQ1JfQ09VTlQxX09WRVJGTE9XOworCWVsc2UKKwkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGNvdW50ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1MzIKK2FybXY2cG11X3JlYWRfY291bnRlcihpbnQgY291bnRlcikKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlID0gMDsKKworCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibXJjICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDEiIDogIj1yIih2YWx1ZSkpOworCWVsc2UgaWYgKEFSTVY2X0NPVU5URVIwID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibXJjICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDIiIDogIj1yIih2YWx1ZSkpOworCWVsc2UgaWYgKEFSTVY2X0NPVU5URVIxID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibXJjICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDMiIDogIj1yIih2YWx1ZSkpOworCWVsc2UKKwkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGNvdW50ZXIpOworCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2FybXY2cG11X3dyaXRlX2NvdW50ZXIoaW50IGNvdW50ZXIsCisJCSAgICAgICB1MzIgdmFsdWUpCit7CisJaWYgKEFSTVY2X0NZQ0xFX0NPVU5URVIgPT0gY291bnRlcikKKwkJYXNtIHZvbGF0aWxlKCJtY3IgICBwMTUsIDAsICUwLCBjMTUsIGMxMiwgMSIgOiA6ICJyIih2YWx1ZSkpOworCWVsc2UgaWYgKEFSTVY2X0NPVU5URVIwID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibWNyICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDIiIDogOiAiciIodmFsdWUpKTsKKwllbHNlIGlmIChBUk1WNl9DT1VOVEVSMSA9PSBjb3VudGVyKQorCQlhc20gdm9sYXRpbGUoIm1jciAgIHAxNSwgMCwgJTAsIGMxNSwgYzEyLCAzIiA6IDogInIiKHZhbHVlKSk7CisJZWxzZQorCQlXQVJOX09OQ0UoMSwgImludmFsaWQgY291bnRlciBudW1iZXIgKCVkKVxuIiwgY291bnRlcik7Cit9CisKK3ZvaWQKK2FybXY2cG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAorCQkgICAgICBpbnQgaWR4KQoreworCXVuc2lnbmVkIGxvbmcgdmFsLCBtYXNrLCBldnQsIGZsYWdzOworCisJaWYgKEFSTVY2X0NZQ0xFX0NPVU5URVIgPT0gaWR4KSB7CisJCW1hc2sJPSAwOworCQlldnQJPSBBUk1WNl9QTUNSX0NDT1VOVF9JRU47CisJfSBlbHNlIGlmIChBUk1WNl9DT1VOVEVSMCA9PSBpZHgpIHsKKwkJbWFzawk9IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMF9NQVNLOworCQlldnQJPSAoaHdjLT5jb25maWdfYmFzZSA8PCBBUk1WNl9QTUNSX0VWVF9DT1VOVDBfU0hJRlQpIHwKKwkJCSAgQVJNVjZfUE1DUl9DT1VOVDBfSUVOOworCX0gZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjEgPT0gaWR4KSB7CisJCW1hc2sJPSBBUk1WNl9QTUNSX0VWVF9DT1VOVDFfTUFTSzsKKwkJZXZ0CT0gKGh3Yy0+Y29uZmlnX2Jhc2UgPDwgQVJNVjZfUE1DUl9FVlRfQ09VTlQxX1NISUZUKSB8CisJCQkgIEFSTVY2X1BNQ1JfQ09VTlQxX0lFTjsKKwl9IGVsc2UgeworCQlXQVJOX09OQ0UoMSwgImludmFsaWQgY291bnRlciBudW1iZXIgKCVkKVxuIiwgaWR4KTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogTWFzayBvdXQgdGhlIGN1cnJlbnQgZXZlbnQgYW5kIHNldCB0aGUgY291bnRlciB0byBjb3VudCB0aGUgZXZlbnQKKwkgKiB0aGF0IHdlJ3JlIGludGVyZXN0ZWQgaW4uCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBldnQ7CisJYXJtdjZfcG1jcl93cml0ZSh2YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorYXJtdjZwbXVfaGFuZGxlX2lycShpbnQgaXJxX251bSwKKwkJICAgIHZvaWQgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIHBtY3IgPSBhcm12Nl9wbWNyX3JlYWQoKTsKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCWludCBpZHg7CisKKwlpZiAoIWFybXY2X3BtY3JfaGFzX292ZXJmbG93ZWQocG1jcikpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKKworCS8qCisJICogVGhlIGludGVycnVwdHMgYXJlIGNsZWFyZWQgYnkgd3JpdGluZyB0aGUgb3ZlcmZsb3cgZmxhZ3MgYmFjayB0bworCSAqIHRoZSBjb250cm9sIHJlZ2lzdGVyLiBBbGwgb2YgdGhlIG90aGVyIGJpdHMgZG9uJ3QgaGF2ZSBhbnkgZWZmZWN0CisJICogaWYgdGhleSBhcmUgcmV3cml0dGVuLCBzbyB3cml0ZSB0aGUgd2hvbGUgdmFsdWUgYmFjay4KKwkgKi8KKwlhcm12Nl9wbWNyX3dyaXRlKHBtY3IpOworCisJZGF0YS5hZGRyID0gMDsKKworCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8PSBhcm1wbXUtPm51bV9ldmVudHM7ICsraWR4KSB7CisJCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tpZHhdOworCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCisJCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBoYXZlIGEgc2luZ2xlIGludGVycnVwdCBmb3IgYWxsIGNvdW50ZXJzLiBDaGVjayB0aGF0CisJCSAqIGVhY2ggY291bnRlciBoYXMgb3ZlcmZsb3dlZCBiZWZvcmUgd2UgcHJvY2VzcyBpdC4KKwkJICovCisJCWlmICghYXJtdjZfcG1jcl9jb3VudGVyX2hhc19vdmVyZmxvd2VkKHBtY3IsIGlkeCkpCisJCQljb250aW51ZTsKKworCQlod2MgPSAmZXZlbnQtPmh3OworCQlhcm1wbXVfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CisJCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCQlpZiAoIWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCkpCisJCQljb250aW51ZTsKKworCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMCwgJmRhdGEsIHJlZ3MpKQorCQkJYXJtcG11LT5kaXNhYmxlKGh3YywgaWR4KTsKKwl9CisKKwkvKgorCSAqIEhhbmRsZSB0aGUgcGVuZGluZyBwZXJmIGV2ZW50cy4KKwkgKgorCSAqIE5vdGU6IHRoaXMgY2FsbCAqbXVzdCogYmUgcnVuIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiBGb3IKKwkgKiBwbGF0Zm9ybXMgdGhhdCBjYW4gaGF2ZSB0aGUgUE1VIGludGVycnVwdHMgcmFpc2VkIGFzIGEgUE1JLCB0aGlzCisJICogd2lsbCBub3Qgd29yay4KKwkgKi8KKwlwZXJmX2V2ZW50X2RvX3BlbmRpbmcoKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQKK2FybXY2cG11X3N0YXJ0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsIHw9IEFSTVY2X1BNQ1JfRU5BQkxFOworCWFybXY2X3BtY3Jfd3JpdGUodmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOworfQorCit2b2lkCithcm12NnBtdV9zdG9wKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsICY9IH5BUk1WNl9QTUNSX0VOQUJMRTsKKwlhcm12Nl9wbWNyX3dyaXRlKHZhbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2FybXY2cG11X2V2ZW50X21hcChpbnQgY29uZmlnKQoreworCWludCBtYXBwaW5nID0gYXJtdjZfcGVyZl9tYXBbY29uZmlnXTsKKwlpZiAoSFdfT1BfVU5TVVBQT1JURUQgPT0gbWFwcGluZykKKwkJbWFwcGluZyA9IC1FT1BOT1RTVVBQOworCXJldHVybiBtYXBwaW5nOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXJtdjZtcGNvcmVfcG11X2V2ZW50X21hcChpbnQgY29uZmlnKQoreworCWludCBtYXBwaW5nID0gYXJtdjZtcGNvcmVfcGVyZl9tYXBbY29uZmlnXTsKKwlpZiAoSFdfT1BfVU5TVVBQT1JURUQgPT0gbWFwcGluZykKKwkJbWFwcGluZyA9IC1FT1BOT1RTVVBQOworCXJldHVybiBtYXBwaW5nOworfQorCitzdGF0aWMgdTY0Cithcm12NnBtdV9yYXdfZXZlbnQodTY0IGNvbmZpZykKK3sKKwlyZXR1cm4gY29uZmlnICYgMHhmZjsKK30KKworc3RhdGljIGludAorYXJtdjZwbXVfZ2V0X2V2ZW50X2lkeChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJICAgICAgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpldmVudCkKK3sKKwkvKiBBbHdheXMgcGxhY2UgYSBjeWNsZSBjb3VudGVyIGludG8gdGhlIGN5Y2xlIGNvdW50ZXIuICovCisJaWYgKEFSTVY2X1BFUkZDVFJfQ1BVX0NZQ0xFUyA9PSBldmVudC0+Y29uZmlnX2Jhc2UpIHsKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoQVJNVjZfQ1lDTEVfQ09VTlRFUiwgY3B1Yy0+dXNlZF9tYXNrKSkKKwkJCXJldHVybiAtRUFHQUlOOworCisJCXJldHVybiBBUk1WNl9DWUNMRV9DT1VOVEVSOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEZvciBhbnl0aGluZyBvdGhlciB0aGFuIGEgY3ljbGUgY291bnRlciwgdHJ5IGFuZCB1c2UKKwkJICogY291bnRlcjAgYW5kIGNvdW50ZXIxLgorCQkgKi8KKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEFSTVY2X0NPVU5URVIxLCBjcHVjLT51c2VkX21hc2spKSB7CisJCQlyZXR1cm4gQVJNVjZfQ09VTlRFUjE7CisJCX0KKworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQVJNVjZfQ09VTlRFUjAsIGNwdWMtPnVzZWRfbWFzaykpIHsKKwkJCXJldHVybiBBUk1WNl9DT1VOVEVSMDsKKwkJfQorCisJCS8qIFRoZSBjb3VudGVycyBhcmUgYWxsIGluIHVzZS4gKi8KKwkJcmV0dXJuIC1FQUdBSU47CisJfQorfQorCitzdGF0aWMgdm9pZAorYXJtdjZwbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAorCQkgICAgICAgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgbWFzaywgZXZ0LCBmbGFnczsKKworCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGlkeCkgeworCQltYXNrCT0gQVJNVjZfUE1DUl9DQ09VTlRfSUVOOworCQlldnQJPSAwOworCX0gZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjAgPT0gaWR4KSB7CisJCW1hc2sJPSBBUk1WNl9QTUNSX0NPVU5UMF9JRU4gfCBBUk1WNl9QTUNSX0VWVF9DT1VOVDBfTUFTSzsKKwkJZXZ0CT0gQVJNVjZfUEVSRkNUUl9OT1AgPDwgQVJNVjZfUE1DUl9FVlRfQ09VTlQwX1NISUZUOworCX0gZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjEgPT0gaWR4KSB7CisJCW1hc2sJPSBBUk1WNl9QTUNSX0NPVU5UMV9JRU4gfCBBUk1WNl9QTUNSX0VWVF9DT1VOVDFfTUFTSzsKKwkJZXZ0CT0gQVJNVjZfUEVSRkNUUl9OT1AgPDwgQVJNVjZfUE1DUl9FVlRfQ09VTlQxX1NISUZUOworCX0gZWxzZSB7CisJCVdBUk5fT05DRSgxLCAiaW52YWxpZCBjb3VudGVyIG51bWJlciAoJWQpXG4iLCBpZHgpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBNYXNrIG91dCB0aGUgY3VycmVudCBldmVudCBhbmQgc2V0IHRoZSBjb3VudGVyIHRvIGNvdW50IHRoZSBudW1iZXIKKwkgKiBvZiBFVE0gYnVzIHNpZ25hbCBhc3NlcnRpb24gY3ljbGVzLiBUaGUgZXh0ZXJuYWwgcmVwb3J0aW5nIHNob3VsZAorCSAqIGJlIGRpc2FibGVkIGFuZCBzbyB0aGlzIHNob3VsZCBuZXZlciBpbmNyZW1lbnQuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBldnQ7CisJYXJtdjZfcG1jcl93cml0ZSh2YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCithcm12Nm1wY29yZV9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAorCQkJICAgICAgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgbWFzaywgZmxhZ3MsIGV2dCA9IDA7CisKKwlpZiAoQVJNVjZfQ1lDTEVfQ09VTlRFUiA9PSBpZHgpIHsKKwkJbWFzawk9IEFSTVY2X1BNQ1JfQ0NPVU5UX0lFTjsKKwl9IGVsc2UgaWYgKEFSTVY2X0NPVU5URVIwID09IGlkeCkgeworCQltYXNrCT0gQVJNVjZfUE1DUl9DT1VOVDBfSUVOOworCX0gZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjEgPT0gaWR4KSB7CisJCW1hc2sJPSBBUk1WNl9QTUNSX0NPVU5UMV9JRU47CisJfSBlbHNlIHsKKwkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGlkeCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFVubGlrZSBVUCBBUk12Niwgd2UgZG9uJ3QgaGF2ZSBhIHdheSBvZiBzdG9wcGluZyB0aGUgY291bnRlcnMuIFdlCisJICogc2ltcGx5IGRpc2FibGUgdGhlIGludGVycnVwdCByZXBvcnRpbmcuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBldnQ7CisJYXJtdjZfcG1jcl93cml0ZSh2YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX3BtdSBhcm12NnBtdSA9IHsKKwkubmFtZQkJCT0gInY2IiwKKwkuaGFuZGxlX2lycQkJPSBhcm12NnBtdV9oYW5kbGVfaXJxLAorCS5lbmFibGUJCQk9IGFybXY2cG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSBhcm12NnBtdV9kaXNhYmxlX2V2ZW50LAorCS5ldmVudF9tYXAJCT0gYXJtdjZwbXVfZXZlbnRfbWFwLAorCS5yYXdfZXZlbnQJCT0gYXJtdjZwbXVfcmF3X2V2ZW50LAorCS5yZWFkX2NvdW50ZXIJCT0gYXJtdjZwbXVfcmVhZF9jb3VudGVyLAorCS53cml0ZV9jb3VudGVyCQk9IGFybXY2cG11X3dyaXRlX2NvdW50ZXIsCisJLmdldF9ldmVudF9pZHgJCT0gYXJtdjZwbXVfZ2V0X2V2ZW50X2lkeCwKKwkuc3RhcnQJCQk9IGFybXY2cG11X3N0YXJ0LAorCS5zdG9wCQkJPSBhcm12NnBtdV9zdG9wLAorCS5udW1fZXZlbnRzCQk9IDMsCisJLm1heF9wZXJpb2QJCT0gKDFMTFUgPDwgMzIpIC0gMSwKK307CisKKy8qCisgKiBBUk12Nm1wY29yZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHNpbmdsZSBjb3JlIEFSTXY2IHdpdGggdGhlIGV4Y2VwdGlvbgorICogdGhhdCBzb21lIG9mIHRoZSBldmVudHMgaGF2ZSBkaWZmZXJlbnQgZW51bWVyYXRpb25zIGFuZCB0aGF0IHRoZXJlIGlzIG5vCisgKiAqaGFjayogdG8gc3RvcCB0aGUgcHJvZ3JhbW1hYmxlIGNvdW50ZXJzLiBUbyBzdG9wIHRoZSBjb3VudGVycyB3ZSBzaW1wbHkKKyAqIGRpc2FibGUgdGhlIGludGVycnVwdCByZXBvcnRpbmcgYW5kIHVwZGF0ZSB0aGUgZXZlbnQuIFdoZW4gdW50aHJvdHRsaW5nIHdlCisgKiByZXNldCB0aGUgcGVyaW9kIGFuZCBlbmFibGUgdGhlIGludGVycnVwdCByZXBvcnRpbmcuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX3BtdSBhcm12Nm1wY29yZV9wbXUgPSB7CisJLm5hbWUJCQk9ICJ2Nm1wY29yZSIsCisJLmhhbmRsZV9pcnEJCT0gYXJtdjZwbXVfaGFuZGxlX2lycSwKKwkuZW5hYmxlCQkJPSBhcm12NnBtdV9lbmFibGVfZXZlbnQsCisJLmRpc2FibGUJCT0gYXJtdjZtcGNvcmVfcG11X2Rpc2FibGVfZXZlbnQsCisJLmV2ZW50X21hcAkJPSBhcm12Nm1wY29yZV9wbXVfZXZlbnRfbWFwLAorCS5yYXdfZXZlbnQJCT0gYXJtdjZwbXVfcmF3X2V2ZW50LAorCS5yZWFkX2NvdW50ZXIJCT0gYXJtdjZwbXVfcmVhZF9jb3VudGVyLAorCS53cml0ZV9jb3VudGVyCQk9IGFybXY2cG11X3dyaXRlX2NvdW50ZXIsCisJLmdldF9ldmVudF9pZHgJCT0gYXJtdjZwbXVfZ2V0X2V2ZW50X2lkeCwKKwkuc3RhcnQJCQk9IGFybXY2cG11X3N0YXJ0LAorCS5zdG9wCQkJPSBhcm12NnBtdV9zdG9wLAorCS5udW1fZXZlbnRzCQk9IDMsCisJLm1heF9wZXJpb2QJCT0gKDFMTFUgPDwgMzIpIC0gMSwKK307CisKKy8qCisgKiBBUk12NyBDb3J0ZXgtQTggYW5kIENvcnRleC1BOSBQZXJmb3JtYW5jZSBFdmVudHMgaGFuZGxpbmcgY29kZS4KKyAqCisgKiBDb3BpZWQgZnJvbSBBUk12NiBjb2RlLCB3aXRoIHRoZSBsb3cgbGV2ZWwgY29kZSBpbnNwaXJlZAorICogIGJ5IHRoZSBBUk12NyBPcHJvZmlsZSBjb2RlLgorICoKKyAqIENvcnRleC1BOCBoYXMgdXAgdG8gNCBjb25maWd1cmFibGUgcGVyZm9ybWFuY2UgY291bnRlcnMgYW5kCisgKiAgYSBzaW5nbGUgY3ljbGUgY291bnRlci4KKyAqIENvcnRleC1BOSBoYXMgdXAgdG8gMzEgY29uZmlndXJhYmxlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGFuZAorICogIGEgc2luZ2xlIGN5Y2xlIGNvdW50ZXIuCisgKgorICogQWxsIGNvdW50ZXJzIGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIGFuZCBJUlEgbWFza2VkIHNlcGFyYXRlbHkuIFRoZSBjeWNsZQorICogIGNvdW50ZXIgYW5kIGFsbCA0IHBlcmZvcm1hbmNlIGNvdW50ZXJzIHRvZ2V0aGVyIGNhbiBiZSByZXNldCBzZXBhcmF0ZWx5LgorICovCisKKyNkZWZpbmUgQVJNVjdfUE1VX0NPUlRFWF9BOF9OQU1FCQkiQVJNdjcgQ29ydGV4LUE4IgorCisjZGVmaW5lIEFSTVY3X1BNVV9DT1JURVhfQTlfTkFNRQkJIkFSTXY3IENvcnRleC1BOSIKKworLyogQ29tbW9uIEFSTXY3IGV2ZW50IHR5cGVzICovCitlbnVtIGFybXY3X3BlcmZfdHlwZXMgeworCUFSTVY3X1BFUkZDVFJfUE1OQ19TV19JTkNSCQk9IDB4MDAsCisJQVJNVjdfUEVSRkNUUl9JRkVUQ0hfTUlTUwkJPSAweDAxLAorCUFSTVY3X1BFUkZDVFJfSVRMQl9NSVNTCQkJPSAweDAyLAorCUFSTVY3X1BFUkZDVFJfRENBQ0hFX1JFRklMTAkJPSAweDAzLAorCUFSTVY3X1BFUkZDVFJfRENBQ0hFX0FDQ0VTUwkJPSAweDA0LAorCUFSTVY3X1BFUkZDVFJfRFRMQl9SRUZJTEwJCT0gMHgwNSwKKwlBUk1WN19QRVJGQ1RSX0RSRUFECQkJPSAweDA2LAorCUFSTVY3X1BFUkZDVFJfRFdSSVRFCQkJPSAweDA3LAorCisJQVJNVjdfUEVSRkNUUl9FWENfVEFLRU4JCQk9IDB4MDksCisJQVJNVjdfUEVSRkNUUl9FWENfRVhFQ1VURUQJCT0gMHgwQSwKKwlBUk1WN19QRVJGQ1RSX0NJRF9XUklURQkJCT0gMHgwQiwKKwkvKiBBUk1WN19QRVJGQ1RSX1BDX1dSSVRFIGlzIGVxdWl2YWxlbnQgdG8gSFdfQlJBTkNIX0lOU1RSVUNUSU9OUy4KKwkgKiBJdCBjb3VudHM6CisJICogIC0gYWxsIGJyYW5jaCBpbnN0cnVjdGlvbnMsCisJICogIC0gaW5zdHJ1Y3Rpb25zIHRoYXQgZXhwbGljaXRseSB3cml0ZSB0aGUgUEMsCisJICogIC0gZXhjZXB0aW9uIGdlbmVyYXRpbmcgaW5zdHJ1Y3Rpb25zLgorCSAqLworCUFSTVY3X1BFUkZDVFJfUENfV1JJVEUJCQk9IDB4MEMsCisJQVJNVjdfUEVSRkNUUl9QQ19JTU1fQlJBTkNICQk9IDB4MEQsCisJQVJNVjdfUEVSRkNUUl9VTkFMSUdORURfQUNDRVNTCQk9IDB4MEYsCisJQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfTUlTX1BSRUQJPSAweDEwLAorCUFSTVY3X1BFUkZDVFJfQ0xPQ0tfQ1lDTEVTCQk9IDB4MTEsCisKKwlBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfVVNFRAk9IDB4MTIsCisKKwlBUk1WN19QRVJGQ1RSX0NQVV9DWUNMRVMJCT0gMHhGRgorfTsKKworLyogQVJNdjcgQ29ydGV4LUE4IHNwZWNpZmljIGV2ZW50IHR5cGVzICovCitlbnVtIGFybXY3X2E4X3BlcmZfdHlwZXMgeworCUFSTVY3X1BFUkZDVFJfSU5TVFJfRVhFQ1VURUQJCT0gMHgwOCwKKworCUFSTVY3X1BFUkZDVFJfUENfUFJPQ19SRVRVUk4JCT0gMHgwRSwKKworCUFSTVY3X1BFUkZDVFJfV1JJVEVfQlVGRkVSX0ZVTEwJCT0gMHg0MCwKKwlBUk1WN19QRVJGQ1RSX0wyX1NUT1JFX01FUkdFRAkJPSAweDQxLAorCUFSTVY3X1BFUkZDVFJfTDJfU1RPUkVfQlVGRgkJPSAweDQyLAorCUFSTVY3X1BFUkZDVFJfTDJfQUNDRVNTCQkJPSAweDQzLAorCUFSTVY3X1BFUkZDVFJfTDJfQ0FDSF9NSVNTCQk9IDB4NDQsCisJQVJNVjdfUEVSRkNUUl9BWElfUkVBRF9DWUNMRVMJCT0gMHg0NSwKKwlBUk1WN19QRVJGQ1RSX0FYSV9XUklURV9DWUNMRVMJCT0gMHg0NiwKKwlBUk1WN19QRVJGQ1RSX01FTU9SWV9SRVBMQVkJCT0gMHg0NywKKwlBUk1WN19QRVJGQ1RSX1VOQUxJR05FRF9BQ0NFU1NfUkVQTEFZCT0gMHg0OCwKKwlBUk1WN19QRVJGQ1RSX0wxX0RBVEFfTUlTUwkJPSAweDQ5LAorCUFSTVY3X1BFUkZDVFJfTDFfSU5TVF9NSVNTCQk9IDB4NEEsCisJQVJNVjdfUEVSRkNUUl9MMV9EQVRBX0NPTE9SSU5HCQk9IDB4NEIsCisJQVJNVjdfUEVSRkNUUl9MMV9ORU9OX0RBVEEJCT0gMHg0QywKKwlBUk1WN19QRVJGQ1RSX0wxX05FT05fQ0FDSF9EQVRBCQk9IDB4NEQsCisJQVJNVjdfUEVSRkNUUl9MMl9ORU9OCQkJPSAweDRFLAorCUFSTVY3X1BFUkZDVFJfTDJfTkVPTl9ISVQJCT0gMHg0RiwKKwlBUk1WN19QRVJGQ1RSX0wxX0lOU1QJCQk9IDB4NTAsCisJQVJNVjdfUEVSRkNUUl9QQ19SRVRVUk5fTUlTX1BSRUQJPSAweDUxLAorCUFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX0ZBSUxFRAkJPSAweDUyLAorCUFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX1RBS0VOCQk9IDB4NTMsCisJQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfRVhFQ1VURUQJPSAweDU0LAorCUFSTVY3X1BFUkZDVFJfT1BfRVhFQ1VURUQJCT0gMHg1NSwKKwlBUk1WN19QRVJGQ1RSX0NZQ0xFU19JTlNUX1NUQUxMCQk9IDB4NTYsCisJQVJNVjdfUEVSRkNUUl9DWUNMRVNfSU5TVAkJPSAweDU3LAorCUFSTVY3X1BFUkZDVFJfQ1lDTEVTX05FT05fREFUQV9TVEFMTAk9IDB4NTgsCisJQVJNVjdfUEVSRkNUUl9DWUNMRVNfTkVPTl9JTlNUX1NUQUxMCT0gMHg1OSwKKwlBUk1WN19QRVJGQ1RSX05FT05fQ1lDTEVTCQk9IDB4NUEsCisKKwlBUk1WN19QRVJGQ1RSX1BNVTBfRVZFTlRTCQk9IDB4NzAsCisJQVJNVjdfUEVSRkNUUl9QTVUxX0VWRU5UUwkJPSAweDcxLAorCUFSTVY3X1BFUkZDVFJfUE1VX0VWRU5UUwkJPSAweDcyLAorfTsKKworLyogQVJNdjcgQ29ydGV4LUE5IHNwZWNpZmljIGV2ZW50IHR5cGVzICovCitlbnVtIGFybXY3X2E5X3BlcmZfdHlwZXMgeworCUFSTVY3X1BFUkZDVFJfSkFWQV9IV19CWVRFQ09ERV9FWEVDCT0gMHg0MCwKKwlBUk1WN19QRVJGQ1RSX0pBVkFfU1dfQllURUNPREVfRVhFQwk9IDB4NDEsCisJQVJNVjdfUEVSRkNUUl9KQVpFTExFX0JSQU5DSF9FWEVDCT0gMHg0MiwKKworCUFSTVY3X1BFUkZDVFJfQ09IRVJFTlRfTElORV9NSVNTCT0gMHg1MCwKKwlBUk1WN19QRVJGQ1RSX0NPSEVSRU5UX0xJTkVfSElUCQk9IDB4NTEsCisKKwlBUk1WN19QRVJGQ1RSX0lDQUNIRV9ERVBfU1RBTExfQ1lDTEVTCT0gMHg2MCwKKwlBUk1WN19QRVJGQ1RSX0RDQUNIRV9ERVBfU1RBTExfQ1lDTEVTCT0gMHg2MSwKKwlBUk1WN19QRVJGQ1RSX1RMQl9NSVNTX0RFUF9TVEFMTF9DWUNMRVMJPSAweDYyLAorCUFSTVY3X1BFUkZDVFJfU1RSRVhfRVhFQ1VURURfUEFTU0VECT0gMHg2MywKKwlBUk1WN19QRVJGQ1RSX1NUUkVYX0VYRUNVVEVEX0ZBSUxFRAk9IDB4NjQsCisJQVJNVjdfUEVSRkNUUl9EQVRBX0VWSUNUSU9OCQk9IDB4NjUsCisJQVJNVjdfUEVSRkNUUl9JU1NVRV9TVEFHRV9OT19JTlNUCT0gMHg2NiwKKwlBUk1WN19QRVJGQ1RSX0lTU1VFX1NUQUdFX0VNUFRZCQk9IDB4NjcsCisJQVJNVjdfUEVSRkNUUl9JTlNUX09VVF9PRl9SRU5BTUVfU1RBR0UJPSAweDY4LAorCisJQVJNVjdfUEVSRkNUUl9QUkVESUNUQUJMRV9GVU5DVF9SRVRVUk5TCT0gMHg2RSwKKworCUFSTVY3X1BFUkZDVFJfTUFJTl9VTklUX0VYRUNVVEVEX0lOU1QJPSAweDcwLAorCUFSTVY3X1BFUkZDVFJfU0VDT05EX1VOSVRfRVhFQ1VURURfSU5TVAk9IDB4NzEsCisJQVJNVjdfUEVSRkNUUl9MRF9TVF9VTklUX0VYRUNVVEVEX0lOU1QJPSAweDcyLAorCUFSTVY3X1BFUkZDVFJfRlBfRVhFQ1VURURfSU5TVAkJPSAweDczLAorCUFSTVY3X1BFUkZDVFJfTkVPTl9FWEVDVVRFRF9JTlNUCT0gMHg3NCwKKworCUFSTVY3X1BFUkZDVFJfUExEX0ZVTExfREVQX1NUQUxMX0NZQ0xFUwk9IDB4ODAsCisJQVJNVjdfUEVSRkNUUl9EQVRBX1dSX0RFUF9TVEFMTF9DWUNMRVMJPSAweDgxLAorCUFSTVY3X1BFUkZDVFJfSVRMQl9NSVNTX0RFUF9TVEFMTF9DWUNMRVMJPSAweDgyLAorCUFSTVY3X1BFUkZDVFJfRFRMQl9NSVNTX0RFUF9TVEFMTF9DWUNMRVMJPSAweDgzLAorCUFSTVY3X1BFUkZDVFJfTUlDUk9fSVRMQl9NSVNTX0RFUF9TVEFMTF9DWUNMRVMJPSAweDg0LAorCUFSTVY3X1BFUkZDVFJfTUlDUk9fRFRMQl9NSVNTX0RFUF9TVEFMTF9DWUNMRVMgCT0gMHg4NSwKKwlBUk1WN19QRVJGQ1RSX0RNQl9ERVBfU1RBTExfQ1lDTEVTCT0gMHg4NiwKKworCUFSTVY3X1BFUkZDVFJfSU5UR1JfQ0xLX0VOQUJMRURfQ1lDTEVTCT0gMHg4QSwKKwlBUk1WN19QRVJGQ1RSX0RBVEFfRU5HSU5FX0NMS19FTl9DWUNMRVMJPSAweDhCLAorCisJQVJNVjdfUEVSRkNUUl9JU0JfSU5TVAkJCT0gMHg5MCwKKwlBUk1WN19QRVJGQ1RSX0RTQl9JTlNUCQkJPSAweDkxLAorCUFSTVY3X1BFUkZDVFJfRE1CX0lOU1QJCQk9IDB4OTIsCisJQVJNVjdfUEVSRkNUUl9FWFRfSU5URVJSVVBUUwkJPSAweDkzLAorCisJQVJNVjdfUEVSRkNUUl9QTEVfQ0FDSEVfTElORV9SUVNUX0NPTVBMRVRFRAk9IDB4QTAsCisJQVJNVjdfUEVSRkNUUl9QTEVfQ0FDSEVfTElORV9SUVNUX1NLSVBQRUQJPSAweEExLAorCUFSTVY3X1BFUkZDVFJfUExFX0ZJRk9fRkxVU0gJCT0gMHhBMiwKKwlBUk1WN19QRVJGQ1RSX1BMRV9SUVNUX0NPTVBMRVRFRAk9IDB4QTMsCisJQVJNVjdfUEVSRkNUUl9QTEVfRklGT19PVkVSRkxPVwkJPSAweEE0LAorCUFSTVY3X1BFUkZDVFJfUExFX1JRU1RfUFJPRwkJPSAweEE1Cit9OworCisvKgorICogQ29ydGV4LUE4IEhXIGV2ZW50cyBtYXBwaW5nCisgKgorICogVGhlIGhhcmR3YXJlIGV2ZW50cyB0aGF0IHdlIHN1cHBvcnQuIFdlIGRvIHN1cHBvcnQgY2FjaGUgb3BlcmF0aW9ucyBidXQKKyAqIHdlIGhhdmUgaGFydmFyZCBjYWNoZXMgYW5kIG5vIHdheSB0byBjb21iaW5lIGluc3RydWN0aW9uIGFuZCBkYXRhCisgKiBhY2Nlc3Nlcy9taXNzZXMgaW4gaGFyZHdhcmUuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBhcm12N19hOF9wZXJmX21hcFtQRVJGX0NPVU5UX0hXX01BWF0gPSB7CisJW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JICAgID0gQVJNVjdfUEVSRkNUUl9DUFVfQ1lDTEVTLAorCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JICAgID0gQVJNVjdfUEVSRkNUUl9JTlNUUl9FWEVDVVRFRCwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JICAgID0gSFdfT1BfVU5TVVBQT1JURUQsCisJW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10gPSBBUk1WN19QRVJGQ1RSX1BDX1dSSVRFLAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCSAgICA9IEFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX01JU19QUkVELAorCVtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCSAgICA9IEFSTVY3X1BFUkZDVFJfQ0xPQ0tfQ1lDTEVTLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFybXY3X2E4X3BlcmZfY2FjaGVfbWFwW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCQkgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQkJICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9IHsKKwlbQyhMMUQpXSA9IHsKKwkJLyoKKwkJICogVGhlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGRvbid0IGRpZmZlcmVudGlhdGUgYmV0d2VlbiByZWFkCisJCSAqIGFuZCB3cml0ZSBhY2Nlc3Nlcy9taXNzZXMgc28gdGhpcyBpc24ndCBzdHJpY3RseSBjb3JyZWN0LAorCQkgKiBidXQgaXQncyB0aGUgYmVzdCB3ZSBjYW4gZG8uIFdyaXRlcyBhbmQgcmVhZHMgZ2V0CisJCSAqIGNvbWJpbmVkLgorCQkgKi8KKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfRENBQ0hFX1JFRklMTCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfRENBQ0hFX0FDQ0VTUywKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RDQUNIRV9SRUZJTEwsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKEwxSSldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX0wxX0lOU1QsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9MMV9JTlNUX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX0wxX0lOU1QsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9MMV9JTlNUX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKExMKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfTDJfQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfTDJfQ0FDSF9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9MMl9BQ0NFU1MsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9MMl9DQUNIX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKERUTEIpXSA9IHsKKwkJLyoKKwkJICogT25seSBJVExCIG1pc3NlcyBhbmQgRFRMQiByZWZpbGxzIGFyZSBzdXBwb3J0ZWQuCisJCSAqIElmIHVzZXJzIHdhbnQgdGhlIERUTEIgcmVmaWxscyBtaXNzZXMgYSByYXcgY291bnRlcgorCQkgKiBtdXN0IGJlIHVzZWQuCisJCSAqLworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RUTEJfUkVGSUxMLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9EVExCX1JFRklMTCwKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoSVRMQildID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0lUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfSVRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhCUFUpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9QQ19XUklURSwKKwkJCVtDKFJFU1VMVF9NSVNTKV0KKwkJCQkJPSBBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfUFJFRCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfUENfV1JJVEUsCisJCQlbQyhSRVNVTFRfTUlTUyldCisJCQkJCT0gQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfTUlTX1BSRUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorfTsKKworLyoKKyAqIENvcnRleC1BOSBIVyBldmVudHMgbWFwcGluZworICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgYXJtdjdfYTlfcGVyZl9tYXBbUEVSRl9DT1VOVF9IV19NQVhdID0geworCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCSAgICA9IEFSTVY3X1BFUkZDVFJfQ1BVX0NZQ0xFUywKKwlbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCSAgICA9CisJCQkJCUFSTVY3X1BFUkZDVFJfSU5TVF9PVVRfT0ZfUkVOQU1FX1NUQUdFLAorCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdICAgID0gQVJNVjdfUEVSRkNUUl9DT0hFUkVOVF9MSU5FX0hJVCwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCSAgICA9IEFSTVY3X1BFUkZDVFJfQ09IRVJFTlRfTElORV9NSVNTLAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdID0gQVJNVjdfUEVSRkNUUl9QQ19XUklURSwKKwlbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkgICAgPSBBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfUFJFRCwKKwlbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkgICAgPSBBUk1WN19QRVJGQ1RSX0NMT0NLX0NZQ0xFUywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBhcm12N19hOV9wZXJmX2NhY2hlX21hcFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQkJICBbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJCSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPSB7CisJW0MoTDFEKV0gPSB7CisJCS8qCisJCSAqIFRoZSBwZXJmb3JtYW5jZSBjb3VudGVycyBkb24ndCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcmVhZAorCQkgKiBhbmQgd3JpdGUgYWNjZXNzZXMvbWlzc2VzIHNvIHRoaXMgaXNuJ3Qgc3RyaWN0bHkgY29ycmVjdCwKKwkJICogYnV0IGl0J3MgdGhlIGJlc3Qgd2UgY2FuIGRvLiBXcml0ZXMgYW5kIHJlYWRzIGdldAorCQkgKiBjb21iaW5lZC4KKwkJICovCisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfRENBQ0hFX0FDQ0VTUywKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RDQUNIRV9SRUZJTEwsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RDQUNIRV9BQ0NFU1MsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9EQ0FDSEVfUkVGSUxMLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhMMUkpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9JRkVUQ0hfTUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfSUZFVENIX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKExMKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKERUTEIpXSA9IHsKKwkJLyoKKwkJICogT25seSBJVExCIG1pc3NlcyBhbmQgRFRMQiByZWZpbGxzIGFyZSBzdXBwb3J0ZWQuCisJCSAqIElmIHVzZXJzIHdhbnQgdGhlIERUTEIgcmVmaWxscyBtaXNzZXMgYSByYXcgY291bnRlcgorCQkgKiBtdXN0IGJlIHVzZWQuCisJCSAqLworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RUTEJfUkVGSUxMLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9EVExCX1JFRklMTCwKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoSVRMQildID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0lUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfSVRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhCUFUpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9QQ19XUklURSwKKwkJCVtDKFJFU1VMVF9NSVNTKV0KKwkJCQkJPSBBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfUFJFRCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfUENfV1JJVEUsCisJCQlbQyhSRVNVTFRfTUlTUyldCisJCQkJCT0gQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfTUlTX1BSRUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorfTsKKworLyoKKyAqIFBlcmYgRXZlbnRzIGNvdW50ZXJzCisgKi8KK2VudW0gYXJtdjdfY291bnRlcnMgeworCUFSTVY3X0NZQ0xFX0NPVU5URVIgCQk9IDEsCS8qIEN5Y2xlIGNvdW50ZXIgKi8KKwlBUk1WN19DT1VOVEVSMAkJCT0gMiwJLyogRmlyc3QgZXZlbnQgY291bnRlciAqLworfTsKKworLyoKKyAqIFRoZSBjeWNsZSBjb3VudGVyIGlzIEFSTVY3X0NZQ0xFX0NPVU5URVIuCisgKiBUaGUgZmlyc3QgZXZlbnQgY291bnRlciBpcyBBUk1WN19DT1VOVEVSMC4KKyAqIFRoZSBsYXN0IGV2ZW50IGNvdW50ZXIgaXMgKEFSTVY3X0NPVU5URVIwICsgYXJtcG11LT5udW1fZXZlbnRzIC0gMSkuCisgKi8KKyNkZWZpbmUJQVJNVjdfQ09VTlRFUl9MQVNUCShBUk1WN19DT1VOVEVSMCArIGFybXBtdS0+bnVtX2V2ZW50cyAtIDEpCisKKy8qCisgKiBBUk12NyBsb3cgbGV2ZWwgUE1OQyBhY2Nlc3MKKyAqLworCisvKgorICogUGVyLUNQVSBQTU5DOiBjb25maWcgcmVnCisgKi8KKyNkZWZpbmUgQVJNVjdfUE1OQ19FCQkoMSA8PCAwKSAvKiBFbmFibGUgYWxsIGNvdW50ZXJzICovCisjZGVmaW5lIEFSTVY3X1BNTkNfUAkJKDEgPDwgMSkgLyogUmVzZXQgYWxsIGNvdW50ZXJzICovCisjZGVmaW5lIEFSTVY3X1BNTkNfQwkJKDEgPDwgMikgLyogQ3ljbGUgY291bnRlciByZXNldCAqLworI2RlZmluZSBBUk1WN19QTU5DX0QJCSgxIDw8IDMpIC8qIENDTlQgY291bnRzIGV2ZXJ5IDY0dGggY3B1IGN5Y2xlICovCisjZGVmaW5lIEFSTVY3X1BNTkNfWAkJKDEgPDwgNCkgLyogRXhwb3J0IHRvIEVUTSAqLworI2RlZmluZSBBUk1WN19QTU5DX0RQCQkoMSA8PCA1KSAvKiBEaXNhYmxlIENDTlQgaWYgbm9uLWludmFzaXZlIGRlYnVnKi8KKyNkZWZpbmUJQVJNVjdfUE1OQ19OX1NISUZUCTExCSAvKiBOdW1iZXIgb2YgY291bnRlcnMgc3VwcG9ydGVkICovCisjZGVmaW5lCUFSTVY3X1BNTkNfTl9NQVNLCTB4MWYKKyNkZWZpbmUJQVJNVjdfUE1OQ19NQVNLCQkweDNmCSAvKiBNYXNrIGZvciB3cml0YWJsZSBiaXRzICovCisKKy8qCisgKiBBdmFpbGFibGUgY291bnRlcnMKKyAqLworI2RlZmluZSBBUk1WN19DTlQwIAkJMAkvKiBGaXJzdCBldmVudCBjb3VudGVyICovCisjZGVmaW5lIEFSTVY3X0NDTlQgCQkzMQkvKiBDeWNsZSBjb3VudGVyICovCisKKy8qIFBlcmYgRXZlbnQgdG8gbG93IGxldmVsIGNvdW50ZXJzIG1hcHBpbmcgKi8KKyNkZWZpbmUgQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgJKEFSTVY3X0NPVU5URVIwIC0gQVJNVjdfQ05UMCkKKworLyoKKyAqIENOVEVOUzogY291bnRlcnMgZW5hYmxlIHJlZworICovCisjZGVmaW5lIEFSTVY3X0NOVEVOU19QKGlkeCkJKDEgPDwgKGlkeCAtIEFSTVY3X0VWRU5UX0NOVF9UT19DTlR4KSkKKyNkZWZpbmUgQVJNVjdfQ05URU5TX0MJCSgxIDw8IEFSTVY3X0NDTlQpCisKKy8qCisgKiBDTlRFTkM6IGNvdW50ZXJzIGRpc2FibGUgcmVnCisgKi8KKyNkZWZpbmUgQVJNVjdfQ05URU5DX1AoaWR4KQkoMSA8PCAoaWR4IC0gQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgpKQorI2RlZmluZSBBUk1WN19DTlRFTkNfQwkJKDEgPDwgQVJNVjdfQ0NOVCkKKworLyoKKyAqIElOVEVOUzogY291bnRlcnMgb3ZlcmZsb3cgaW50ZXJydXB0IGVuYWJsZSByZWcKKyAqLworI2RlZmluZSBBUk1WN19JTlRFTlNfUChpZHgpCSgxIDw8IChpZHggLSBBUk1WN19FVkVOVF9DTlRfVE9fQ05UeCkpCisjZGVmaW5lIEFSTVY3X0lOVEVOU19DCQkoMSA8PCBBUk1WN19DQ05UKQorCisvKgorICogSU5URU5DOiBjb3VudGVycyBvdmVyZmxvdyBpbnRlcnJ1cHQgZGlzYWJsZSByZWcKKyAqLworI2RlZmluZSBBUk1WN19JTlRFTkNfUChpZHgpCSgxIDw8IChpZHggLSBBUk1WN19FVkVOVF9DTlRfVE9fQ05UeCkpCisjZGVmaW5lIEFSTVY3X0lOVEVOQ19DCQkoMSA8PCBBUk1WN19DQ05UKQorCisvKgorICogRVZUU0VMOiBFdmVudCBzZWxlY3Rpb24gcmVnCisgKi8KKyNkZWZpbmUJQVJNVjdfRVZUU0VMX01BU0sJMHg3ZgkJLyogTWFzayBmb3Igd3JpdGFibGUgYml0cyAqLworCisvKgorICogU0VMRUNUOiBDb3VudGVyIHNlbGVjdGlvbiByZWcKKyAqLworI2RlZmluZQlBUk1WN19TRUxFQ1RfTUFTSwkweDFmCQkvKiBNYXNrIGZvciB3cml0YWJsZSBiaXRzICovCisKKy8qCisgKiBGTEFHOiBjb3VudGVycyBvdmVyZmxvdyBmbGFnIHN0YXR1cyByZWcKKyAqLworI2RlZmluZSBBUk1WN19GTEFHX1AoaWR4KQkoMSA8PCAoaWR4IC0gQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgpKQorI2RlZmluZSBBUk1WN19GTEFHX0MJCSgxIDw8IEFSTVY3X0NDTlQpCisjZGVmaW5lCUFSTVY3X0ZMQUdfTUFTSwkJMHhmZmZmZmZmZgkvKiBNYXNrIGZvciB3cml0YWJsZSBiaXRzICovCisjZGVmaW5lCUFSTVY3X09WRVJGTE9XRURfTUFTSwlBUk1WN19GTEFHX01BU0sKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFybXY3X3BtbmNfcmVhZCh2b2lkKQoreworCXUzMiB2YWw7CisJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMiwgMCIgOiAiPXIiKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcm12N19wbW5jX3dyaXRlKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXZhbCAmPSBBUk1WN19QTU5DX01BU0s7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMiwgMCIgOiA6ICJyIih2YWwpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXJtdjdfcG1uY19oYXNfb3ZlcmZsb3dlZCh1bnNpZ25lZCBsb25nIHBtbmMpCit7CisJcmV0dXJuIHBtbmMgJiBBUk1WN19PVkVSRkxPV0VEX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFybXY3X3BtbmNfY291bnRlcl9oYXNfb3ZlcmZsb3dlZCh1bnNpZ25lZCBsb25nIHBtbmMsCisJCQkJCWVudW0gYXJtdjdfY291bnRlcnMgY291bnRlcikKK3sKKwlpbnQgcmV0OworCisJaWYgKGNvdW50ZXIgPT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKKwkJcmV0ID0gcG1uYyAmIEFSTVY3X0ZMQUdfQzsKKwllbHNlIGlmICgoY291bnRlciA+PSBBUk1WN19DT1VOVEVSMCkgJiYgKGNvdW50ZXIgPD0gQVJNVjdfQ09VTlRFUl9MQVNUKSkKKwkJcmV0ID0gcG1uYyAmIEFSTVY3X0ZMQUdfUChjb3VudGVyKTsKKwllbHNlCisJCXByX2VycigiQ1BVJXUgY2hlY2tpbmcgd3JvbmcgY291bnRlciAlZCBvdmVyZmxvdyBzdGF0dXNcbiIsCisJCQlzbXBfcHJvY2Vzc29yX2lkKCksIGNvdW50ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcih1bnNpZ25lZCBpbnQgaWR4KQoreworCXUzMiB2YWw7CisKKwlpZiAoKGlkeCA8IEFSTVY3X0NPVU5URVIwKSB8fCAoaWR4ID4gQVJNVjdfQ09VTlRFUl9MQVNUKSkgeworCQlwcl9lcnIoIkNQVSV1IHNlbGVjdGluZyB3cm9uZyBQTU5DIGNvdW50ZXIiCisJCQkiICVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7CisJCXJldHVybiAtMTsKKwl9CisKKwl2YWwgPSAoaWR4IC0gQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgpICYgQVJNVjdfU0VMRUNUX01BU0s7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMiwgNSIgOiA6ICJyIiAodmFsKSk7CisKKwlyZXR1cm4gaWR4OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBhcm12N3BtdV9yZWFkX2NvdW50ZXIoaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlID0gMDsKKworCWlmIChpZHggPT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKKwkJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMywgMCIgOiAiPXIiICh2YWx1ZSkpOworCWVsc2UgaWYgKChpZHggPj0gQVJNVjdfQ09VTlRFUjApICYmIChpZHggPD0gQVJNVjdfQ09VTlRFUl9MQVNUKSkgeworCQlpZiAoYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpZHgpID09IGlkeCkKKwkJCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDIiCisJCQkJICAgICA6ICI9ciIgKHZhbHVlKSk7CisJfSBlbHNlCisJCXByX2VycigiQ1BVJXUgcmVhZGluZyB3cm9uZyBjb3VudGVyICVkXG4iLAorCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZHgpOworCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJtdjdwbXVfd3JpdGVfY291bnRlcihpbnQgaWR4LCB1MzIgdmFsdWUpCit7CisJaWYgKGlkeCA9PSBBUk1WN19DWUNMRV9DT1VOVEVSKQorCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEzLCAwIiA6IDogInIiICh2YWx1ZSkpOworCWVsc2UgaWYgKChpZHggPj0gQVJNVjdfQ09VTlRFUjApICYmIChpZHggPD0gQVJNVjdfQ09VTlRFUl9MQVNUKSkgeworCQlpZiAoYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpZHgpID09IGlkeCkKKwkJCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDIiCisJCQkJICAgICA6IDogInIiICh2YWx1ZSkpOworCX0gZWxzZQorCQlwcl9lcnIoIkNQVSV1IHdyaXRpbmcgd3JvbmcgY291bnRlciAlZFxuIiwKKwkJCXNtcF9wcm9jZXNzb3JfaWQoKSwgaWR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFybXY3X3BtbmNfd3JpdGVfZXZ0c2VsKHVuc2lnbmVkIGludCBpZHgsIHUzMiB2YWwpCit7CisJaWYgKGFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoaWR4KSA9PSBpZHgpIHsKKwkJdmFsICY9IEFSTVY3X0VWVFNFTF9NQVNLOworCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEzLCAxIiA6IDogInIiICh2YWwpKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGFybXY3X3BtbmNfZW5hYmxlX2NvdW50ZXIodW5zaWduZWQgaW50IGlkeCkKK3sKKwl1MzIgdmFsOworCisJaWYgKChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikgJiYKKwkgICAgKChpZHggPCBBUk1WN19DT1VOVEVSMCkgfHwgKGlkeCA+IEFSTVY3X0NPVU5URVJfTEFTVCkpKSB7CisJCXByX2VycigiQ1BVJXUgZW5hYmxpbmcgd3JvbmcgUE1OQyBjb3VudGVyIgorCQkJIiAlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZHgpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGlkeCA9PSBBUk1WN19DWUNMRV9DT1VOVEVSKQorCQl2YWwgPSBBUk1WN19DTlRFTlNfQzsKKwllbHNlCisJCXZhbCA9IEFSTVY3X0NOVEVOU19QKGlkeCk7CisKKwlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEyLCAxIiA6IDogInIiICh2YWwpKTsKKworCXJldHVybiBpZHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGFybXY3X3BtbmNfZGlzYWJsZV9jb3VudGVyKHVuc2lnbmVkIGludCBpZHgpCit7CisJdTMyIHZhbDsKKworCisJaWYgKChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikgJiYKKwkgICAgKChpZHggPCBBUk1WN19DT1VOVEVSMCkgfHwgKGlkeCA+IEFSTVY3X0NPVU5URVJfTEFTVCkpKSB7CisJCXByX2VycigiQ1BVJXUgZGlzYWJsaW5nIHdyb25nIFBNTkMgY291bnRlciIKKwkJCSIgJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgaWR4KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChpZHggPT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKKwkJdmFsID0gQVJNVjdfQ05URU5DX0M7CisJZWxzZQorCQl2YWwgPSBBUk1WN19DTlRFTkNfUChpZHgpOworCisJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMiwgMiIgOiA6ICJyIiAodmFsKSk7CisKKwlyZXR1cm4gaWR4OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBhcm12N19wbW5jX2VuYWJsZV9pbnRlbnModW5zaWduZWQgaW50IGlkeCkKK3sKKwl1MzIgdmFsOworCisJaWYgKChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikgJiYKKwkgICAgKChpZHggPCBBUk1WN19DT1VOVEVSMCkgfHwgKGlkeCA+IEFSTVY3X0NPVU5URVJfTEFTVCkpKSB7CisJCXByX2VycigiQ1BVJXUgZW5hYmxpbmcgd3JvbmcgUE1OQyBjb3VudGVyIgorCQkJIiBpbnRlcnJ1cHQgZW5hYmxlICVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoaWR4ID09IEFSTVY3X0NZQ0xFX0NPVU5URVIpCisJCXZhbCA9IEFSTVY3X0lOVEVOU19DOworCWVsc2UKKwkJdmFsID0gQVJNVjdfSU5URU5TX1AoaWR4KTsKKworCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTQsIDEiIDogOiAiciIgKHZhbCkpOworCisJcmV0dXJuIGlkeDsKK30KKworc3RhdGljIGlubGluZSB1MzIgYXJtdjdfcG1uY19kaXNhYmxlX2ludGVucyh1bnNpZ25lZCBpbnQgaWR4KQoreworCXUzMiB2YWw7CisKKwlpZiAoKGlkeCAhPSBBUk1WN19DWUNMRV9DT1VOVEVSKSAmJgorCSAgICAoKGlkeCA8IEFSTVY3X0NPVU5URVIwKSB8fCAoaWR4ID4gQVJNVjdfQ09VTlRFUl9MQVNUKSkpIHsKKwkJcHJfZXJyKCJDUFUldSBkaXNhYmxpbmcgd3JvbmcgUE1OQyBjb3VudGVyIgorCQkJIiBpbnRlcnJ1cHQgZW5hYmxlICVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoaWR4ID09IEFSTVY3X0NZQ0xFX0NPVU5URVIpCisJCXZhbCA9IEFSTVY3X0lOVEVOQ19DOworCWVsc2UKKwkJdmFsID0gQVJNVjdfSU5URU5DX1AoaWR4KTsKKworCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTQsIDIiIDogOiAiciIgKHZhbCkpOworCisJcmV0dXJuIGlkeDsKK30KKworc3RhdGljIGlubGluZSB1MzIgYXJtdjdfcG1uY19nZXRyZXNldF9mbGFncyh2b2lkKQoreworCXUzMiB2YWw7CisKKwkvKiBSZWFkICovCisJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMiwgMyIgOiAiPXIiICh2YWwpKTsKKworCS8qIFdyaXRlIHRvIGNsZWFyIGZsYWdzICovCisJdmFsICY9IEFSTVY3X0ZMQUdfTUFTSzsKKwlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEyLCAzIiA6IDogInIiICh2YWwpKTsKKworCXJldHVybiB2YWw7Cit9CisKKyNpZmRlZiBERUJVRworc3RhdGljIHZvaWQgYXJtdjdfcG1uY19kdW1wX3JlZ3Modm9pZCkKK3sKKwl1MzIgdmFsOworCXVuc2lnbmVkIGludCBjbnQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJQTU5DIHJlZ2lzdGVycyBkdW1wOlxuIik7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAwIiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIlBNTkMgID0weCUwOHhcbiIsIHZhbCk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAxIiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIkNOVEVOUz0weCUwOHhcbiIsIHZhbCk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzE0LCAxIiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIklOVEVOUz0weCUwOHhcbiIsIHZhbCk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAzIiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIkZMQUdTID0weCUwOHhcbiIsIHZhbCk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCA1IiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIlNFTEVDVD0weCUwOHhcbiIsIHZhbCk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEzLCAwIiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIkNDTlQgID0weCUwOHhcbiIsIHZhbCk7CisKKwlmb3IgKGNudCA9IEFSTVY3X0NPVU5URVIwOyBjbnQgPCBBUk1WN19DT1VOVEVSX0xBU1Q7IGNudCsrKSB7CisJCWFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoY250KTsKKwkJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMywgMiIgOiAiPXIiICh2YWwpKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ05UWyVkXSBjb3VudCA9MHglMDh4XG4iLAorCQkJY250LUFSTVY3X0VWRU5UX0NOVF9UT19DTlR4LCB2YWwpOworCQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEzLCAxIiA6ICI9ciIgKHZhbCkpOworCQlwcmludGsoS0VSTl9JTkZPICJDTlRbJWRdIGV2dHNlbD0weCUwOHhcbiIsCisJCQljbnQtQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgsIHZhbCk7CisJfQorfQorI2VuZGlmCisKK3ZvaWQgYXJtdjdwbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogRW5hYmxlIGNvdW50ZXIgYW5kIGludGVycnVwdCwgYW5kIHNldCB0aGUgY291bnRlciB0byBjb3VudAorCSAqIHRoZSBldmVudCB0aGF0IHdlJ3JlIGludGVyZXN0ZWQgaW4uCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIERpc2FibGUgY291bnRlcgorCSAqLworCWFybXY3X3BtbmNfZGlzYWJsZV9jb3VudGVyKGlkeCk7CisKKwkvKgorCSAqIFNldCBldmVudCAoaWYgZGVzdGluZWQgZm9yIFBNTnggY291bnRlcnMpCisJICogV2UgZG9uJ3QgbmVlZCB0byBzZXQgdGhlIGV2ZW50IGlmIGl0J3MgYSBjeWNsZSBjb3VudAorCSAqLworCWlmIChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKKwkJYXJtdjdfcG1uY193cml0ZV9ldnRzZWwoaWR4LCBod2MtPmNvbmZpZ19iYXNlKTsKKworCS8qCisJICogRW5hYmxlIGludGVycnVwdCBmb3IgdGhpcyBjb3VudGVyCisJICovCisJYXJtdjdfcG1uY19lbmFibGVfaW50ZW5zKGlkeCk7CisKKwkvKgorCSAqIEVuYWJsZSBjb3VudGVyCisJICovCisJYXJtdjdfcG1uY19lbmFibGVfY291bnRlcihpZHgpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgYXJtdjdwbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIERpc2FibGUgY291bnRlciBhbmQgaW50ZXJydXB0CisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIERpc2FibGUgY291bnRlcgorCSAqLworCWFybXY3X3BtbmNfZGlzYWJsZV9jb3VudGVyKGlkeCk7CisKKwkvKgorCSAqIERpc2FibGUgaW50ZXJydXB0IGZvciB0aGlzIGNvdW50ZXIKKwkgKi8KKwlhcm12N19wbW5jX2Rpc2FibGVfaW50ZW5zKGlkeCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYXJtdjdwbXVfaGFuZGxlX2lycShpbnQgaXJxX251bSwgdm9pZCAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgcG1uYzsKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCWludCBpZHg7CisKKwkvKgorCSAqIEdldCBhbmQgcmVzZXQgdGhlIElSUSBmbGFncworCSAqLworCXBtbmMgPSBhcm12N19wbW5jX2dldHJlc2V0X2ZsYWdzKCk7CisKKwkvKgorCSAqIERpZCBhbiBvdmVyZmxvdyBvY2N1cj8KKwkgKi8KKwlpZiAoIWFybXY3X3BtbmNfaGFzX292ZXJmbG93ZWQocG1uYykpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qCisJICogSGFuZGxlIHRoZSBjb3VudGVyKHMpIG92ZXJmbG93KHMpCisJICovCisJcmVncyA9IGdldF9pcnFfcmVncygpOworCisJZGF0YS5hZGRyID0gMDsKKworCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8PSBhcm1wbXUtPm51bV9ldmVudHM7ICsraWR4KSB7CisJCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tpZHhdOworCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCisJCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBoYXZlIGEgc2luZ2xlIGludGVycnVwdCBmb3IgYWxsIGNvdW50ZXJzLiBDaGVjayB0aGF0CisJCSAqIGVhY2ggY291bnRlciBoYXMgb3ZlcmZsb3dlZCBiZWZvcmUgd2UgcHJvY2VzcyBpdC4KKwkJICovCisJCWlmICghYXJtdjdfcG1uY19jb3VudGVyX2hhc19vdmVyZmxvd2VkKHBtbmMsIGlkeCkpCisJCQljb250aW51ZTsKKworCQlod2MgPSAmZXZlbnQtPmh3OworCQlhcm1wbXVfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CisJCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCQlpZiAoIWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCkpCisJCQljb250aW51ZTsKKworCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMCwgJmRhdGEsIHJlZ3MpKQorCQkJYXJtcG11LT5kaXNhYmxlKGh3YywgaWR4KTsKKwl9CisKKwkvKgorCSAqIEhhbmRsZSB0aGUgcGVuZGluZyBwZXJmIGV2ZW50cy4KKwkgKgorCSAqIE5vdGU6IHRoaXMgY2FsbCAqbXVzdCogYmUgcnVuIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiBGb3IKKwkgKiBwbGF0Zm9ybXMgdGhhdCBjYW4gaGF2ZSB0aGUgUE1VIGludGVycnVwdHMgcmFpc2VkIGFzIGEgUE1JLCB0aGlzCisJICogd2lsbCBub3Qgd29yay4KKwkgKi8KKwlwZXJmX2V2ZW50X2RvX3BlbmRpbmcoKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgYXJtdjdwbXVfc3RhcnQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJLyogRW5hYmxlIGFsbCBjb3VudGVycyAqLworCWFybXY3X3BtbmNfd3JpdGUoYXJtdjdfcG1uY19yZWFkKCkgfCBBUk1WN19QTU5DX0UpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGFybXY3cG11X3N0b3Aodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJLyogRGlzYWJsZSBhbGwgY291bnRlcnMgKi8KKwlhcm12N19wbW5jX3dyaXRlKGFybXY3X3BtbmNfcmVhZCgpICYgfkFSTVY3X1BNTkNfRSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXJtdjdfYThfcG11X2V2ZW50X21hcChpbnQgY29uZmlnKQoreworCWludCBtYXBwaW5nID0gYXJtdjdfYThfcGVyZl9tYXBbY29uZmlnXTsKKwlpZiAoSFdfT1BfVU5TVVBQT1JURUQgPT0gbWFwcGluZykKKwkJbWFwcGluZyA9IC1FT1BOT1RTVVBQOworCXJldHVybiBtYXBwaW5nOworfQorCitzdGF0aWMgaW5saW5lIGludCBhcm12N19hOV9wbXVfZXZlbnRfbWFwKGludCBjb25maWcpCit7CisJaW50IG1hcHBpbmcgPSBhcm12N19hOV9wZXJmX21hcFtjb25maWddOworCWlmIChIV19PUF9VTlNVUFBPUlRFRCA9PSBtYXBwaW5nKQorCQltYXBwaW5nID0gLUVPUE5PVFNVUFA7CisJcmV0dXJuIG1hcHBpbmc7Cit9CisKK3N0YXRpYyB1NjQgYXJtdjdwbXVfcmF3X2V2ZW50KHU2NCBjb25maWcpCit7CisJcmV0dXJuIGNvbmZpZyAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgYXJtdjdwbXVfZ2V0X2V2ZW50X2lkeChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJCQkgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgaWR4OworCisJLyogQWx3YXlzIHBsYWNlIGEgY3ljbGUgY291bnRlciBpbnRvIHRoZSBjeWNsZSBjb3VudGVyLiAqLworCWlmIChldmVudC0+Y29uZmlnX2Jhc2UgPT0gQVJNVjdfUEVSRkNUUl9DUFVfQ1lDTEVTKSB7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KEFSTVY3X0NZQ0xFX0NPVU5URVIsIGNwdWMtPnVzZWRfbWFzaykpCisJCQlyZXR1cm4gLUVBR0FJTjsKKworCQlyZXR1cm4gQVJNVjdfQ1lDTEVfQ09VTlRFUjsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBGb3IgYW55dGhpbmcgb3RoZXIgdGhhbiBhIGN5Y2xlIGNvdW50ZXIsIHRyeSBhbmQgdXNlCisJCSAqIHRoZSBldmVudHMgY291bnRlcnMKKwkJICovCisJCWZvciAoaWR4ID0gQVJNVjdfQ09VTlRFUjA7IGlkeCA8PSBhcm1wbXUtPm51bV9ldmVudHM7ICsraWR4KSB7CisJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQorCQkJCXJldHVybiBpZHg7CisJCX0KKworCQkvKiBUaGUgY291bnRlcnMgYXJlIGFsbCBpbiB1c2UuICovCisJCXJldHVybiAtRUFHQUlOOworCX0KK30KKworc3RhdGljIHN0cnVjdCBhcm1fcG11IGFybXY3cG11ID0geworCS5oYW5kbGVfaXJxCQk9IGFybXY3cG11X2hhbmRsZV9pcnEsCisJLmVuYWJsZQkJCT0gYXJtdjdwbXVfZW5hYmxlX2V2ZW50LAorCS5kaXNhYmxlCQk9IGFybXY3cG11X2Rpc2FibGVfZXZlbnQsCisJLnJhd19ldmVudAkJPSBhcm12N3BtdV9yYXdfZXZlbnQsCisJLnJlYWRfY291bnRlcgkJPSBhcm12N3BtdV9yZWFkX2NvdW50ZXIsCisJLndyaXRlX2NvdW50ZXIJCT0gYXJtdjdwbXVfd3JpdGVfY291bnRlciwKKwkuZ2V0X2V2ZW50X2lkeAkJPSBhcm12N3BtdV9nZXRfZXZlbnRfaWR4LAorCS5zdGFydAkJCT0gYXJtdjdwbXVfc3RhcnQsCisJLnN0b3AJCQk9IGFybXY3cG11X3N0b3AsCisJLm1heF9wZXJpb2QJCT0gKDFMTFUgPDwgMzIpIC0gMSwKK307CisKK3N0YXRpYyB1MzIgX19pbml0IGFybXY3X3Jlc2V0X3JlYWRfcG1uYyh2b2lkKQoreworCXUzMiBuYl9jbnQ7CisKKwkvKiBJbml0aWFsaXplICYgUmVzZXQgUE1OQzogQyBhbmQgUCBiaXRzICovCisJYXJtdjdfcG1uY193cml0ZShBUk1WN19QTU5DX1AgfCBBUk1WN19QTU5DX0MpOworCisJLyogUmVhZCB0aGUgbmIgb2YgQ05UeCBjb3VudGVycyBzdXBwb3J0ZWQgZnJvbSBQTU5DICovCisJbmJfY250ID0gKGFybXY3X3BtbmNfcmVhZCgpID4+IEFSTVY3X1BNTkNfTl9TSElGVCkgJiBBUk1WN19QTU5DX05fTUFTSzsKKworCS8qIEFkZCB0aGUgQ1BVIGN5Y2xlcyBjb3VudGVyIGFuZCByZXR1cm4gKi8KKwlyZXR1cm4gbmJfY250ICsgMTsKK30KKworc3RhdGljIGludCBfX2luaXQKK2luaXRfaHdfcGVyZl9ldmVudHModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNwdWlkID0gcmVhZF9jcHVpZF9pZCgpOworCXVuc2lnbmVkIGxvbmcgaW1wbGVtZW50b3IgPSAoY3B1aWQgJiAweEZGMDAwMDAwKSA+PiAyNDsKKwl1bnNpZ25lZCBsb25nIHBhcnRfbnVtYmVyID0gKGNwdWlkICYgMHhGRkYwKTsKKworCS8qIFdlIG9ubHkgc3VwcG9ydCBBUk0gQ1BVcyBpbXBsZW1lbnRlZCBieSBBUk0gYXQgdGhlIG1vbWVudC4gKi8KKwlpZiAoMHg0MSA9PSBpbXBsZW1lbnRvcikgeworCQlzd2l0Y2ggKHBhcnRfbnVtYmVyKSB7CisJCWNhc2UgMHhCMzYwOgkvKiBBUk0xMTM2ICovCisJCWNhc2UgMHhCNTYwOgkvKiBBUk0xMTU2ICovCisJCWNhc2UgMHhCNzYwOgkvKiBBUk0xMTc2ICovCisJCQlhcm1wbXUgPSAmYXJtdjZwbXU7CisJCQltZW1jcHkoYXJtcG11X3BlcmZfY2FjaGVfbWFwLCBhcm12Nl9wZXJmX2NhY2hlX21hcCwKKwkJCQkJc2l6ZW9mKGFybXY2X3BlcmZfY2FjaGVfbWFwKSk7CisJCQlwZXJmX21heF9ldmVudHMJPSBhcm12NnBtdS5udW1fZXZlbnRzOworCQkJYnJlYWs7CisJCWNhc2UgMHhCMDIwOgkvKiBBUk0xMW1wY29yZSAqLworCQkJYXJtcG11ID0gJmFybXY2bXBjb3JlX3BtdTsKKwkJCW1lbWNweShhcm1wbXVfcGVyZl9jYWNoZV9tYXAsCisJCQkgICAgICAgYXJtdjZtcGNvcmVfcGVyZl9jYWNoZV9tYXAsCisJCQkgICAgICAgc2l6ZW9mKGFybXY2bXBjb3JlX3BlcmZfY2FjaGVfbWFwKSk7CisJCQlwZXJmX21heF9ldmVudHMgPSBhcm12Nm1wY29yZV9wbXUubnVtX2V2ZW50czsKKwkJCWJyZWFrOworCQljYXNlIDB4QzA4MDoJLyogQ29ydGV4LUE4ICovCisJCQlhcm12N3BtdS5uYW1lID0gQVJNVjdfUE1VX0NPUlRFWF9BOF9OQU1FOworCQkJbWVtY3B5KGFybXBtdV9wZXJmX2NhY2hlX21hcCwgYXJtdjdfYThfcGVyZl9jYWNoZV9tYXAsCisJCQkJc2l6ZW9mKGFybXY3X2E4X3BlcmZfY2FjaGVfbWFwKSk7CisJCQlhcm12N3BtdS5ldmVudF9tYXAgPSBhcm12N19hOF9wbXVfZXZlbnRfbWFwOworCQkJYXJtcG11ID0gJmFybXY3cG11OworCisJCQkvKiBSZXNldCBQTU5DIGFuZCByZWFkIHRoZSBuYiBvZiBDTlR4IGNvdW50ZXJzCisJCQkgICAgc3VwcG9ydGVkICovCisJCQlhcm12N3BtdS5udW1fZXZlbnRzID0gYXJtdjdfcmVzZXRfcmVhZF9wbW5jKCk7CisJCQlwZXJmX21heF9ldmVudHMgPSBhcm12N3BtdS5udW1fZXZlbnRzOworCQkJYnJlYWs7CisJCWNhc2UgMHhDMDkwOgkvKiBDb3J0ZXgtQTkgKi8KKwkJCWFybXY3cG11Lm5hbWUgPSBBUk1WN19QTVVfQ09SVEVYX0E5X05BTUU7CisJCQltZW1jcHkoYXJtcG11X3BlcmZfY2FjaGVfbWFwLCBhcm12N19hOV9wZXJmX2NhY2hlX21hcCwKKwkJCQlzaXplb2YoYXJtdjdfYTlfcGVyZl9jYWNoZV9tYXApKTsKKwkJCWFybXY3cG11LmV2ZW50X21hcCA9IGFybXY3X2E5X3BtdV9ldmVudF9tYXA7CisJCQlhcm1wbXUgPSAmYXJtdjdwbXU7CisKKwkJCS8qIFJlc2V0IFBNTkMgYW5kIHJlYWQgdGhlIG5iIG9mIENOVHggY291bnRlcnMKKwkJCSAgICBzdXBwb3J0ZWQgKi8KKwkJCWFybXY3cG11Lm51bV9ldmVudHMgPSBhcm12N19yZXNldF9yZWFkX3BtbmMoKTsKKwkJCXBlcmZfbWF4X2V2ZW50cyA9IGFybXY3cG11Lm51bV9ldmVudHM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByX2luZm8oIm5vIGhhcmR3YXJlIHN1cHBvcnQgYXZhaWxhYmxlXG4iKTsKKwkJCXBlcmZfbWF4X2V2ZW50cyA9IC0xOworCQl9CisJfQorCisJaWYgKGFybXBtdSkKKwkJcHJfaW5mbygiZW5hYmxlZCB3aXRoICVzIFBNVSBkcml2ZXIsICVkIGNvdW50ZXJzIGF2YWlsYWJsZVxuIiwKKwkJCWFybXBtdS0+bmFtZSwgYXJtcG11LT5udW1fZXZlbnRzKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChpbml0X2h3X3BlcmZfZXZlbnRzKTsKKworLyoKKyAqIENhbGxjaGFpbiBoYW5kbGluZyBjb2RlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2NhbGxjaGFpbl9zdG9yZShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5LAorCQl1NjQgaXApCit7CisJaWYgKGVudHJ5LT5uciA8IFBFUkZfTUFYX1NUQUNLX0RFUFRIKQorCQllbnRyeS0+aXBbZW50cnktPm5yKytdID0gaXA7Cit9CisKKy8qCisgKiBUaGUgcmVnaXN0ZXJzIHdlJ3JlIGludGVyZXN0ZWQgaW4gYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlCisgKiBsZW5ndGggc2F2ZWQgcmVnaXN0ZXIgc3RydWN0dXJlLiBUaGUgZnAgcG9pbnRzIGF0IHRoZSBlbmQgb2YgdGhpcworICogc3RydWN0dXJlIHNvIHRoZSBhZGRyZXNzIG9mIHRoaXMgc3RydWN0IGlzOgorICogKHN0cnVjdCBmcmFtZV90YWlsICopKHh4eC0+ZnApLTEKKyAqCisgKiBUaGlzIGNvZGUgaGFzIGJlZW4gYWRhcHRlZCBmcm9tIHRoZSBBUk0gT1Byb2ZpbGUgc3VwcG9ydC4KKyAqLworc3RydWN0IGZyYW1lX3RhaWwgeworCXN0cnVjdCBmcmFtZV90YWlsICAgKmZwOworCXVuc2lnbmVkIGxvbmcJICAgIHNwOworCXVuc2lnbmVkIGxvbmcJICAgIGxyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIEdldCB0aGUgcmV0dXJuIGFkZHJlc3MgZm9yIGEgc2luZ2xlIHN0YWNrZnJhbWUgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlCisgKiBuZXh0IGZyYW1lIHRhaWwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnJhbWVfdGFpbCAqCit1c2VyX2JhY2t0cmFjZShzdHJ1Y3QgZnJhbWVfdGFpbCAqdGFpbCwKKwkgICAgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgZnJhbWVfdGFpbCBidWZ0YWlsOworCisJLyogQWxzbyBjaGVjayBhY2Nlc3NpYmlsaXR5IG9mIG9uZSBzdHJ1Y3QgZnJhbWVfdGFpbCBiZXlvbmQgKi8KKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdGFpbCwgc2l6ZW9mKGJ1ZnRhaWwpKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoJmJ1ZnRhaWwsIHRhaWwsIHNpemVvZihidWZ0YWlsKSkpCisJCXJldHVybiBOVUxMOworCisJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBidWZ0YWlsLmxyKTsKKworCS8qCisJICogRnJhbWUgcG9pbnRlcnMgc2hvdWxkIHN0cmljdGx5IHByb2dyZXNzIGJhY2sgdXAgdGhlIHN0YWNrCisJICogKHRvd2FyZHMgaGlnaGVyIGFkZHJlc3NlcykuCisJICovCisJaWYgKHRhaWwgPj0gYnVmdGFpbC5mcCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gYnVmdGFpbC5mcCAtIDE7Cit9CisKK3N0YXRpYyB2b2lkCitwZXJmX2NhbGxjaGFpbl91c2VyKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgZnJhbWVfdGFpbCAqdGFpbDsKKworCWNhbGxjaGFpbl9zdG9yZShlbnRyeSwgUEVSRl9DT05URVhUX1VTRVIpOworCisJaWYgKCF1c2VyX21vZGUocmVncykpCisJCXJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CisKKwl0YWlsID0gKHN0cnVjdCBmcmFtZV90YWlsICopcmVncy0+QVJNX2ZwIC0gMTsKKworCXdoaWxlICh0YWlsICYmICEoKHVuc2lnbmVkIGxvbmcpdGFpbCAmIDB4MykpCisJCXRhaWwgPSB1c2VyX2JhY2t0cmFjZSh0YWlsLCBlbnRyeSk7Cit9CisKKy8qCisgKiBHZXRzIGNhbGxlZCBieSB3YWxrX3N0YWNrZnJhbWUoKSBmb3IgZXZlcnkgc3RhY2tmcmFtZS4gVGhpcyB3aWxsIGJlIGNhbGxlZAorICogd2hpc3QgdW53aW5kaW5nIHRoZSBzdGFja2ZyYW1lIGFuZCBpcyBsaWtlIGEgc3Vicm91dGluZSByZXR1cm4gc28gd2UgdXNlCisgKiB0aGUgUEMuCisgKi8KK3N0YXRpYyBpbnQKK2NhbGxjaGFpbl90cmFjZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnIsCisJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSA9IGRhdGE7CisJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBmci0+cGMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcGVyZl9jYWxsY2hhaW5fa2VybmVsKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkgICAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBzdGFja2ZyYW1lIGZyOworCisJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBQRVJGX0NPTlRFWFRfS0VSTkVMKTsKKwlmci5mcCA9IHJlZ3MtPkFSTV9mcDsKKwlmci5zcCA9IHJlZ3MtPkFSTV9zcDsKKwlmci5sciA9IHJlZ3MtPkFSTV9scjsKKwlmci5wYyA9IHJlZ3MtPkFSTV9wYzsKKwl3YWxrX3N0YWNrZnJhbWUoJmZyLCBjYWxsY2hhaW5fdHJhY2UsIGVudHJ5KTsKK30KKworc3RhdGljIHZvaWQKK3BlcmZfZG9fY2FsbGNoYWluKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkgIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnkpCit7CisJaW50IGlzX3VzZXI7CisKKwlpZiAoIXJlZ3MpCisJCXJldHVybjsKKworCWlzX3VzZXIgPSB1c2VyX21vZGUocmVncyk7CisKKwlpZiAoIWN1cnJlbnQgfHwgIWN1cnJlbnQtPnBpZCkKKwkJcmV0dXJuOworCisJaWYgKGlzX3VzZXIgJiYgY3VycmVudC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HKQorCQlyZXR1cm47CisKKwlpZiAoIWlzX3VzZXIpCisJCXBlcmZfY2FsbGNoYWluX2tlcm5lbChyZWdzLCBlbnRyeSk7CisKKwlpZiAoY3VycmVudC0+bW0pCisJCXBlcmZfY2FsbGNoYWluX3VzZXIocmVncywgZW50cnkpOworfQorCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5LCBwbWNfaXJxX2VudHJ5KTsKKworc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICoKK3BlcmZfY2FsbGNoYWluKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnkgPSAmX19nZXRfY3B1X3ZhcihwbWNfaXJxX2VudHJ5KTsKKworCWVudHJ5LT5uciA9IDA7CisJcGVyZl9kb19jYWxsY2hhaW4ocmVncywgZW50cnkpOworCXJldHVybiBlbnRyeTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wbXUuYyBiL2FyY2gvYXJtL2tlcm5lbC9wbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTI0MzEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3BtdS5jCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9wbXUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgcGljb0NoaXAgRGVzaWducyBMdGQsIEphbWllIElsZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL3BtdS5oPgorCisvKgorICogRGVmaW5lIHRoZSBJUlFzIGZvciB0aGUgc3lzdGVtLiBXZSBjb3VsZCB1c2Ugc29tZXRoaW5nIGxpa2UgYSBwbGF0Zm9ybQorICogZGV2aWNlIGJ1dCB0aGF0IHNlZW1zIGZhaXJseSBoZWF2eXdlaWdodCBmb3IgdGhpcy4gQWxzbywgdGhlIHBlcmZvcm1hbmNlCisgKiBjb3VudGVycyBjYW4ndCBiZSByZW1vdmVkIG9yIGhvdHBsdWdnZWQuCisgKgorICogT3JkZXJpbmcgaXMgaW1wb3J0YW50OiBpbml0X3BtdSgpIHdpbGwgdXNlIHRoZSBvcmRlcmluZyB0byBzZXQgdGhlIGFmZmluaXR5CisgKiB0byB0aGUgY29ycmVzcG9uZGluZyBjb3JlLiBlLmcuIHRoZSBmaXJzdCBpbnRlcnJ1cHQgd2lsbCBnbyB0byBjcHUgMCwgdGhlCisgKiBzZWNvbmQgZ29lcyB0byBjcHUgMSBldGMuCisgKi8KK3N0YXRpYyBjb25zdCBpbnQgaXJxc1tdID0geworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCisJMywKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQkNNUklORykKKwlJUlFfUE1VSVJRLAorI2VsaWYgZGVmaW5lZChDT05GSUdfTUFDSF9SRUFMVklFV19FQikKKwlJUlFfRUIxMU1QX1BNVV9DUFUwLAorCUlSUV9FQjExTVBfUE1VX0NQVTEsCisJSVJRX0VCMTFNUF9QTVVfQ1BVMiwKKwlJUlFfRUIxMU1QX1BNVV9DUFUzLAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKKwlJTlRfMzRYWF9CRU5DSF9NUFVfRU1VTCwKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfSU9QMzJYKQorCUlSUV9JT1AzMlhfQ09SRV9QTVUsCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lPUDMzWCkKKwlJUlFfSU9QMzNYX0NPUkVfUE1VLAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9QWEEpCisJSVJRX1BNVSwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXVfaXJxcyBwbXVfaXJxcyA9IHsKKwkuaXJxcwkgICAgPSBpcnFzLAorCS5udW1faXJxcyAgID0gQVJSQVlfU0laRShpcnFzKSwKK307CisKK3N0YXRpYyB2b2xhdGlsZSBsb25nIHBtdV9sb2NrOworCitjb25zdCBzdHJ1Y3QgcG11X2lycXMgKgorcmVzZXJ2ZV9wbXUodm9pZCkKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdF9sb2NrKDAsICZwbXVfbG9jaykgPyBFUlJfUFRSKC1FQlVTWSkgOgorCQkmcG11X2lycXM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZXNlcnZlX3BtdSk7CisKK2ludAorcmVsZWFzZV9wbXUoY29uc3Qgc3RydWN0IHBtdV9pcnFzICppcnFzKQoreworCWlmIChXQVJOX09OKGlycXMgIT0gJnBtdV9pcnFzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2xlYXJfYml0X3VubG9jaygwLCAmcG11X2xvY2spOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVsZWFzZV9wbXUpOworCitzdGF0aWMgaW50CitzZXRfaXJxX2FmZmluaXR5KGludCBpcnEsCisJCSB1bnNpZ25lZCBpbnQgY3B1KQoreworI2lmZGVmIENPTkZJR19TTVAKKwlpbnQgZXJyID0gaXJxX3NldF9hZmZpbml0eShpcnEsIGNwdW1hc2tfb2YoY3B1KSk7CisJaWYgKGVycikKKwkJcHJfd2FybmluZygidW5hYmxlIHRvIHNldCBpcnEgYWZmaW5pdHkgKGlycT0lZCwgY3B1PSV1KVxuIiwKKwkJCSAgIGlycSwgY3B1KTsKKwlyZXR1cm4gZXJyOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCitpbnQKK2luaXRfcG11KHZvaWQpCit7CisJaW50IGksIGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgcG11X2lycXMubnVtX2lycXM7ICsraSkgeworCQllcnIgPSBzZXRfaXJxX2FmZmluaXR5KHBtdV9pcnFzLmlycXNbaV0sIGkpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGluaXRfcG11KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwppbmRleCBhMmVhMzg1Li4wOGY4OTlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCkBAIC00OTksMTAgKzQ5OSw0MSBAQAogCS5mbgkJPSBicmVha190cmFwLAogfTsKIAorc3RhdGljIGludCB0aHVtYjJfYnJlYWtfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGluc3RyKQoreworCXVuc2lnbmVkIGludCBpbnN0cjI7CisJdm9pZCBfX3VzZXIgKnBjOworCisJLyogQ2hlY2sgdGhlIHNlY29uZCBoYWxmIG9mIHRoZSBpbnN0cnVjdGlvbi4gICovCisJcGMgPSAodm9pZCBfX3VzZXIgKikoaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSArIDIpOworCisJaWYgKHByb2Nlc3Nvcl9tb2RlKHJlZ3MpID09IFNWQ19NT0RFKSB7CisJCWluc3RyMiA9ICoodTE2ICopIHBjOworCX0gZWxzZSB7CisJCWdldF91c2VyKGluc3RyMiwgKHUxNiBfX3VzZXIgKilwYyk7CisJfQorCisJaWYgKGluc3RyMiA9PSAweGEwMDApIHsKKwkJcHRyYWNlX2JyZWFrKGN1cnJlbnQsIHJlZ3MpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gMTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdW5kZWZfaG9vayB0aHVtYjJfYnJlYWtfaG9vayA9IHsKKwkuaW5zdHJfbWFzawk9IDB4ZmZmZiwKKwkuaW5zdHJfdmFsCT0gMHhmN2YwLAorCS5jcHNyX21hc2sJPSBQU1JfVF9CSVQsCisJLmNwc3JfdmFsCT0gUFNSX1RfQklULAorCS5mbgkJPSB0aHVtYjJfYnJlYWtfdHJhcCwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHB0cmFjZV9icmVha19pbml0KHZvaWQpCiB7CiAJcmVnaXN0ZXJfdW5kZWZfaG9vaygmYXJtX2JyZWFrX2hvb2spOwogCXJlZ2lzdGVyX3VuZGVmX2hvb2soJnRodW1iX2JyZWFrX2hvb2spOworCXJlZ2lzdGVyX3VuZGVmX2hvb2soJnRodW1iMl9icmVha19ob29rKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY5LDcgKzcwMCw3IEBACiAJdW5pb24gdmZwX3N0YXRlICp2ZnAgPSAmdGhyZWFkLT52ZnBzdGF0ZTsKIAlzdHJ1Y3QgdXNlcl92ZnAgX191c2VyICp1ZnAgPSBkYXRhOwogCi0JdmZwX3N5bmNfc3RhdGUodGhyZWFkKTsKKwl2ZnBfc3luY19od3N0YXRlKHRocmVhZCk7CiAKIAkvKiBjb3B5IHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KIAlpZiAoY29weV90b191c2VyKCZ1ZnAtPmZwcmVncywgJnZmcC0+aGFyZC5mcHJlZ3MsCkBAIC02OTIsNyArNzIzLDcgQEAKIAl1bmlvbiB2ZnBfc3RhdGUgKnZmcCA9ICZ0aHJlYWQtPnZmcHN0YXRlOwogCXN0cnVjdCB1c2VyX3ZmcCBfX3VzZXIgKnVmcCA9IGRhdGE7CiAKLQl2ZnBfc3luY19zdGF0ZSh0aHJlYWQpOworCXZmcF9zeW5jX2h3c3RhdGUodGhyZWFkKTsKIAogCS8qIGNvcHkgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLwogCWlmIChjb3B5X2Zyb21fdXNlcigmdmZwLT5oYXJkLmZwcmVncywgJnVmcC0+ZnByZWdzLApAQCAtNzAzLDYgKzczNCw4IEBACiAJaWYgKGdldF91c2VyKHZmcC0+aGFyZC5mcHNjciwgJnVmcC0+ZnBzY3IpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCXZmcF9mbHVzaF9od3N0YXRlKHRocmVhZCk7CisKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtNzEyLDI2ICs3NDUsMTAgQEAKIAlpbnQgcmV0OwogCiAJc3dpdGNoIChyZXF1ZXN0KSB7Ci0JCS8qCi0JCSAqIHJlYWQgd29yZCBhdCBsb2NhdGlvbiAiYWRkciIgaW4gdGhlIGNoaWxkIHByb2Nlc3MuCi0JCSAqLwotCQljYXNlIFBUUkFDRV9QRUVLVEVYVDoKLQkJY2FzZSBQVFJBQ0VfUEVFS0RBVEE6Ci0JCQlyZXQgPSBnZW5lcmljX3B0cmFjZV9wZWVrZGF0YShjaGlsZCwgYWRkciwgZGF0YSk7Ci0JCQlicmVhazsKLQogCQljYXNlIFBUUkFDRV9QRUVLVVNSOgogCQkJcmV0ID0gcHRyYWNlX3JlYWRfdXNlcihjaGlsZCwgYWRkciwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopZGF0YSk7CiAJCQlicmVhazsKIAotCQkvKgotCQkgKiB3cml0ZSB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyLgotCQkgKi8KLQkJY2FzZSBQVFJBQ0VfUE9LRVRFWFQ6Ci0JCWNhc2UgUFRSQUNFX1BPS0VEQVRBOgotCQkJcmV0ID0gZ2VuZXJpY19wdHJhY2VfcG9rZWRhdGEoY2hpbGQsIGFkZHIsIGRhdGEpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBQVFJBQ0VfUE9LRVVTUjoKIAkJCXJldCA9IHB0cmFjZV93cml0ZV91c2VyKGNoaWxkLCBhZGRyLCBkYXRhKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwppbmRleCBjNmM1N2I2Li5jOTFjNzdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogCiAjaW5jbHVkZSA8YXNtL3VuaWZpZWQuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CkBAIC0xMDIsNiArMTAzLDcgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19PVVRFUl9DQUNIRQogc3RydWN0IG91dGVyX2NhY2hlX2ZucyBvdXRlcl9jYWNoZTsKK0VYUE9SVF9TWU1CT0wob3V0ZXJfY2FjaGUpOwogI2VuZGlmCiAKIHN0cnVjdCBzdGFjayB7CkBAIC0xMTcsNyArMTE5LDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNwdV9uYW1lOwogc3RhdGljIGNvbnN0IGNoYXIgKm1hY2hpbmVfbmFtZTsKLXN0YXRpYyBjaGFyIF9faW5pdGRhdGEgY29tbWFuZF9saW5lW0NPTU1BTkRfTElORV9TSVpFXTsKK3N0YXRpYyBjaGFyIF9faW5pdGRhdGEgY21kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkVdOwogCiBzdGF0aWMgY2hhciBkZWZhdWx0X2NvbW1hbmRfbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YSA9IENPTkZJR19DTURMSU5FOwogc3RhdGljIHVuaW9uIHsgY2hhciBjWzRdOyB1bnNpZ25lZCBsb25nIGw7IH0gZW5kaWFuX3Rlc3QgX19pbml0ZGF0YSA9IHsgeyAnbCcsICc/JywgJz8nLCAnYicgfSB9OwpAQCAtNDE3LDEwICs0MTksMTEgQEAKICAqIFBpY2sgb3V0IHRoZSBtZW1vcnkgc2l6ZS4gIFdlIGxvb2sgZm9yIG1lbT1zaXplQHN0YXJ0LAogICogd2hlcmUgc3RhcnQgYW5kIHNpemUgYXJlICJzaXplW0trTW1dIgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfbWVtKGNoYXIgKipwKQorc3RhdGljIGludCBfX2luaXQgZWFybHlfbWVtKGNoYXIgKnApCiB7CiAJc3RhdGljIGludCB1c2VybWVtIF9faW5pdGRhdGEgPSAwOwogCXVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RhcnQ7CisJY2hhciAqZW5kcDsKIAogCS8qCiAJICogSWYgdGhlIHVzZXIgc3BlY2lmaWVzIG1lbW9yeSBzaXplLCB3ZQpAQCAtNDMzLDUyICs0MzYsMTUgQEAKIAl9CiAKIAlzdGFydCA9IFBIWVNfT0ZGU0VUOwotCXNpemUgID0gbWVtcGFyc2UoKnAsIHApOwotCWlmICgqKnAgPT0gJ0AnKQotCQlzdGFydCA9IG1lbXBhcnNlKCpwICsgMSwgcCk7CisJc2l6ZSAgPSBtZW1wYXJzZShwLCAmZW5kcCk7CisJaWYgKCplbmRwID09ICdAJykKKwkJc3RhcnQgPSBtZW1wYXJzZShlbmRwICsgMSwgTlVMTCk7CiAKIAlhcm1fYWRkX21lbW9yeShzdGFydCwgc2l6ZSk7CisKKwlyZXR1cm4gMDsKIH0KLV9fZWFybHlfcGFyYW0oIm1lbT0iLCBlYXJseV9tZW0pOwotCi0vKgotICogSW5pdGlhbCBwYXJzaW5nIG9mIHRoZSBjb21tYW5kIGxpbmUuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV9jbWRsaW5lKGNoYXIgKipjbWRsaW5lX3AsIGNoYXIgKmZyb20pCi17Ci0JY2hhciBjID0gJyAnLCAqdG8gPSBjb21tYW5kX2xpbmU7Ci0JaW50IGxlbiA9IDA7Ci0KLQlmb3IgKDs7KSB7Ci0JCWlmIChjID09ICcgJykgewotCQkJZXh0ZXJuIHN0cnVjdCBlYXJseV9wYXJhbXMgX19lYXJseV9iZWdpbiwgX19lYXJseV9lbmQ7Ci0JCQlzdHJ1Y3QgZWFybHlfcGFyYW1zICpwOwotCi0JCQlmb3IgKHAgPSAmX19lYXJseV9iZWdpbjsgcCA8ICZfX2Vhcmx5X2VuZDsgcCsrKSB7Ci0JCQkJaW50IGFyZ2xlbiA9IHN0cmxlbihwLT5hcmcpOwotCi0JCQkJaWYgKG1lbWNtcChmcm9tLCBwLT5hcmcsIGFyZ2xlbikgPT0gMCkgewotCQkJCQlpZiAodG8gIT0gY29tbWFuZF9saW5lKQotCQkJCQkJdG8gLT0gMTsKLQkJCQkJZnJvbSArPSBhcmdsZW47Ci0JCQkJCXAtPmZuKCZmcm9tKTsKLQotCQkJCQl3aGlsZSAoKmZyb20gIT0gJyAnICYmICpmcm9tICE9ICdcMCcpCi0JCQkJCQlmcm9tKys7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQljID0gKmZyb20rKzsKLQkJaWYgKCFjKQotCQkJYnJlYWs7Ci0JCWlmIChDT01NQU5EX0xJTkVfU0laRSA8PSArK2xlbikKLQkJCWJyZWFrOwotCQkqdG8rKyA9IGM7Ci0JfQotCSp0byA9ICdcMCc7Ci0JKmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTsKLX0KK2Vhcmx5X3BhcmFtKCJtZW0iLCBlYXJseV9tZW0pOwogCiBzdGF0aWMgdm9pZCBfX2luaXQKIHNldHVwX3JhbWRpc2soaW50IGRvbG9hZCwgaW50IHByb21wdCwgaW50IGltYWdlX3N0YXJ0LCB1bnNpZ25lZCBpbnQgcmRfc3opCkBAIC03MzksOSArNzA1LDE1IEBACiAJaW5pdF9tbS5lbmRfZGF0YSAgID0gKHVuc2lnbmVkIGxvbmcpIF9lZGF0YTsKIAlpbml0X21tLmJyawkgICA9ICh1bnNpZ25lZCBsb25nKSBfZW5kOwogCi0JbWVtY3B5KGJvb3RfY29tbWFuZF9saW5lLCBmcm9tLCBDT01NQU5EX0xJTkVfU0laRSk7Ci0JYm9vdF9jb21tYW5kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkUtMV0gPSAnXDAnOwotCXBhcnNlX2NtZGxpbmUoY21kbGluZV9wLCBmcm9tKTsKKwkvKiBwYXJzZV9lYXJseV9wYXJhbSBuZWVkcyBhIGJvb3RfY29tbWFuZF9saW5lICovCisJc3RybGNweShib290X2NvbW1hbmRfbGluZSwgZnJvbSwgQ09NTUFORF9MSU5FX1NJWkUpOworCisJLyogcG9wdWxhdGUgY21kX2xpbmUgdG9vIGZvciBsYXRlciB1c2UsIHByZXNlcnZpbmcgYm9vdF9jb21tYW5kX2xpbmUgKi8KKwlzdHJsY3B5KGNtZF9saW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOworCSpjbWRsaW5lX3AgPSBjbWRfbGluZTsKKworCXBhcnNlX2Vhcmx5X3BhcmFtKCk7CisKIAlwYWdpbmdfaW5pdChtZGVzYyk7CiAJcmVxdWVzdF9zdGFuZGFyZF9yZXNvdXJjZXMoJm1lbWluZm8sIG1kZXNjKTsKIApAQCAtNzgyLDkgKzc1NCwyMSBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KIHN1YnN5c19pbml0Y2FsbCh0b3BvbG9neV9pbml0KTsKIAorI2lmZGVmIENPTkZJR19IQVZFX1BST0NfQ1BVCitzdGF0aWMgaW50IF9faW5pdCBwcm9jX2NwdV9pbml0KHZvaWQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyZXM7CisKKwlyZXMgPSBwcm9jX21rZGlyKCJjcHUiLCBOVUxMKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9Citmc19pbml0Y2FsbChwcm9jX2NwdV9pbml0KTsKKyNlbmRpZgorCiBzdGF0aWMgY29uc3QgY2hhciAqaHdjYXBfc3RyW10gPSB7CiAJInN3cCIsCiAJImhhbGYiLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKaW5kZXggZDM4Y2RmMi4uMjg3NTM4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCkBAIC0xMCwxMSArMTAsNiBAQAogICoKICAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEFSTS1zcGVjaWZpYyB0aW1lIGhhbmRsaW5nIGRldGFpbHM6CiAgKiAgcmVhZGluZyB0aGUgUlRDIGF0IGJvb3R1cCwgZXRjLi4uCi0gKgotICogIDE5OTQtMDctMDIgIEFsYW4gTW9kcmEKLSAqICAgICAgICAgICAgICBmaXhlZCBzZXRfcnRjX21tc3MsIGZpeGVkIHRpbWUueWVhciBmb3IgPj0gMjAwMCwgbmV3IG1rdGltZQotICogIDE5OTgtMTItMjAgIFVwZGF0ZWQgTlRQIGNvZGUgYWNjb3JkaW5nIHRvIHRlY2huaWNhbCBtZW1vcmFuZHVtIEphbiAnOTYKLSAqICAgICAgICAgICAgICAiQSBLZXJuZWwgTW9kZWwgZm9yIFByZWNpc2lvbiBUaW1la2VlcGluZyIgYnkgRGF2ZSBNaWxscwogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC03NywxMSArNzIsNiBAQAogRVhQT1JUX1NZTUJPTChwcm9maWxlX3BjKTsKICNlbmRpZgogCi0vKgotICogaG9vayBmb3Igc2V0dGluZyB0aGUgUlRDJ3MgaWRlYSBvZiB0aGUgY3VycmVudCB0aW1lLgotICovCi1pbnQgKCpzZXRfcnRjKSh2b2lkKTsKLQogI2lmbmRlZiBDT05GSUdfR0VORVJJQ19USU1FCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkdW1teV9nZXR0aW1lb2Zmc2V0KHZvaWQpCiB7CkBAIC04OSwxNDAgKzc5LDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBuZXh0X3J0Y191cGRhdGU7Ci0KLS8qCi0gKiBJZiB3ZSBoYXZlIGFuIGV4dGVybmFsbHkgc3luY2hyb25pemVkIGxpbnV4IGNsb2NrLCB0aGVuIHVwZGF0ZQotICogQ01PUyBjbG9jayBhY2NvcmRpbmdseSBldmVyeSB+MTEgbWludXRlcy4gIHNldF9ydGMoKSBoYXMgdG8gYmUKLSAqIGNhbGxlZCBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byA1MDAgbXMgYmVmb3JlIHRoZSBuZXcgc2Vjb25kCi0gKiBzdGFydHMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb19zZXRfcnRjKHZvaWQpCi17Ci0JaWYgKCFudHBfc3luY2VkKCkgfHwgc2V0X3J0YyA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAobmV4dF9ydGNfdXBkYXRlICYmCi0JICAgIHRpbWVfYmVmb3JlKCh1bnNpZ25lZCBsb25nKXh0aW1lLnR2X3NlYywgbmV4dF9ydGNfdXBkYXRlKSkKLQkJcmV0dXJuOwotCi0JaWYgKHh0aW1lLnR2X25zZWMgPCA1MDAwMDAwMDAgLSAoKHVuc2lnbmVkKSB0aWNrX25zZWMgPj4gMSkgJiYKLQkgICAgeHRpbWUudHZfbnNlYyA+PSA1MDAwMDAwMDAgKyAoKHVuc2lnbmVkKSB0aWNrX25zZWMgPj4gMSkpCi0JCXJldHVybjsKLQotCWlmIChzZXRfcnRjKCkpCi0JCS8qCi0JCSAqIHJ0YyB1cGRhdGUgZmFpbGVkLiAgVHJ5IGFnYWluIGluIDYwcwotCQkgKi8KLQkJbmV4dF9ydGNfdXBkYXRlID0geHRpbWUudHZfc2VjICsgNjA7Ci0JZWxzZQotCQluZXh0X3J0Y191cGRhdGUgPSB4dGltZS50dl9zZWMgKyA2NjA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTEVEUwotCi1zdGF0aWMgdm9pZCBkdW1teV9sZWRzX2V2ZW50KGxlZF9ldmVudF90IGV2dCkKLXsKLX0KLQotdm9pZCAoKmxlZHNfZXZlbnQpKGxlZF9ldmVudF90KSA9IGR1bW15X2xlZHNfZXZlbnQ7Ci0KLXN0cnVjdCBsZWRzX2V2dF9uYW1lIHsKLQljb25zdCBjaGFyCW5hbWVbOF07Ci0JaW50CQlvbjsKLQlpbnQJCW9mZjsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGVkc19ldnRfbmFtZSBldnRfbmFtZXNbXSA9IHsKLQl7ICJhbWJlciIsIGxlZF9hbWJlcl9vbiwgbGVkX2FtYmVyX29mZiB9LAotCXsgImJsdWUiLCAgbGVkX2JsdWVfb24sICBsZWRfYmx1ZV9vZmYgIH0sCi0JeyAiZ3JlZW4iLCBsZWRfZ3JlZW5fb24sIGxlZF9ncmVlbl9vZmYgfSwKLQl7ICJyZWQiLCAgIGxlZF9yZWRfb24sICAgbGVkX3JlZF9vZmYgICB9LAotfTsKLQotc3RhdGljIHNzaXplX3QgbGVkc19zdG9yZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAotCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCi0JCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQotewotCWludCByZXQgPSAtRUlOVkFMLCBsZW4gPSBzdHJjc3BuKGJ1ZiwgIiAiKTsKLQotCWlmIChsZW4gPiAwICYmIGJ1ZltsZW5dID09ICdcMCcpCi0JCWxlbi0tOwotCi0JaWYgKHN0cm5jbXAoYnVmLCAiY2xhaW0iLCBsZW4pID09IDApIHsKLQkJbGVkc19ldmVudChsZWRfY2xhaW0pOwotCQlyZXQgPSBzaXplOwotCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJyZWxlYXNlIiwgbGVuKSA9PSAwKSB7Ci0JCWxlZHNfZXZlbnQobGVkX3JlbGVhc2UpOwotCQlyZXQgPSBzaXplOwotCX0gZWxzZSB7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGV2dF9uYW1lcyk7IGkrKykgewotCQkJaWYgKHN0cmxlbihldnRfbmFtZXNbaV0ubmFtZSkgIT0gbGVuIHx8Ci0JCQkgICAgc3RybmNtcChidWYsIGV2dF9uYW1lc1tpXS5uYW1lLCBsZW4pICE9IDApCi0JCQkJY29udGludWU7Ci0JCQlpZiAoc3RybmNtcChidWYrbGVuLCAiIG9uIiwgMykgPT0gMCkgewotCQkJCWxlZHNfZXZlbnQoZXZ0X25hbWVzW2ldLm9uKTsKLQkJCQlyZXQgPSBzaXplOwotCQkJfSBlbHNlIGlmIChzdHJuY21wKGJ1ZitsZW4sICIgb2ZmIiwgNCkgPT0gMCkgewotCQkJCWxlZHNfZXZlbnQoZXZ0X25hbWVzW2ldLm9mZik7Ci0JCQkJcmV0ID0gc2l6ZTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBTWVNERVZfQVRUUihldmVudCwgMDIwMCwgTlVMTCwgbGVkc19zdG9yZSk7Ci0KLXN0YXRpYyBpbnQgbGVkc19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlsZWRzX2V2ZW50KGxlZF9zdG9wKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsZWRzX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCWxlZHNfZXZlbnQobGVkX3N0YXJ0KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsZWRzX3NodXRkb3duKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0JbGVkc19ldmVudChsZWRfaGFsdGVkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgbGVkc19zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAibGVkcyIsCi0JLnNodXRkb3duCT0gbGVkc19zaHV0ZG93biwKLQkuc3VzcGVuZAk9IGxlZHNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGxlZHNfcmVzdW1lLAotfTsKLQotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGxlZHNfZGV2aWNlID0gewotCS5pZAkJPSAwLAotCS5jbHMJCT0gJmxlZHNfc3lzY2xhc3MsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBsZWRzX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbGVkc19zeXNjbGFzcyk7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJmxlZHNfZGV2aWNlKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IHN5c2Rldl9jcmVhdGVfZmlsZSgmbGVkc19kZXZpY2UsICZhdHRyX2V2ZW50KTsKLQlyZXR1cm4gcmV0OwotfQotCi1kZXZpY2VfaW5pdGNhbGwobGVkc19pbml0KTsKLQotRVhQT1JUX1NZTUJPTChsZWRzX2V2ZW50KTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0xFRFNfVElNRVIKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb19sZWRzKHZvaWQpCiB7CkBAIC0yOTUsMzkgKzE1MSw2IEBACiBFWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7CiAjZW5kaWYgLyogIUNPTkZJR19HRU5FUklDX1RJTUUgKi8KIAotLyoqCi0gKiBzYXZlX3RpbWVfZGVsdGEgLSBTYXZlIHRoZSBvZmZzZXQgYmV0d2VlbiBzeXN0ZW0gdGltZSBhbmQgUlRDIHRpbWUKLSAqIEBkZWx0YTogcG9pbnRlciB0byB0aW1lc3BlYyB0byBzdG9yZSBkZWx0YQotICogQHJ0YzogcG9pbnRlciB0byB0aW1lc3BlYyBmb3IgY3VycmVudCBSVEMgdGltZQotICoKLSAqIFJldHVybiBhIGRlbHRhIGJldHdlZW4gdGhlIHN5c3RlbSB0aW1lIGFuZCB0aGUgUlRDIHRpbWUsIHN1Y2gKLSAqIHRoYXQgc3lzdGVtIHRpbWUgY2FuIGJlIHJlc3RvcmVkIGxhdGVyIHdpdGggcmVzdG9yZV90aW1lX2RlbHRhKCkKLSAqLwotdm9pZCBzYXZlX3RpbWVfZGVsdGEoc3RydWN0IHRpbWVzcGVjICpkZWx0YSwgc3RydWN0IHRpbWVzcGVjICpydGMpCi17Ci0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoZGVsdGEsCi0JCQkJeHRpbWUudHZfc2VjIC0gcnRjLT50dl9zZWMsCi0JCQkJeHRpbWUudHZfbnNlYyAtIHJ0Yy0+dHZfbnNlYyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNhdmVfdGltZV9kZWx0YSk7Ci0KLS8qKgotICogcmVzdG9yZV90aW1lX2RlbHRhIC0gUmVzdG9yZSB0aGUgY3VycmVudCBzeXN0ZW0gdGltZQotICogQGRlbHRhOiBkZWx0YSByZXR1cm5lZCBieSBzYXZlX3RpbWVfZGVsdGEoKQotICogQHJ0YzogcG9pbnRlciB0byB0aW1lc3BlYyBmb3IgY3VycmVudCBSVEMgdGltZQotICovCi12b2lkIHJlc3RvcmVfdGltZV9kZWx0YShzdHJ1Y3QgdGltZXNwZWMgKmRlbHRhLCBzdHJ1Y3QgdGltZXNwZWMgKnJ0YykKLXsKLQlzdHJ1Y3QgdGltZXNwZWMgdHM7Ci0KLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmdHMsCi0JCQkJZGVsdGEtPnR2X3NlYyArIHJ0Yy0+dHZfc2VjLAotCQkJCWRlbHRhLT50dl9uc2VjICsgcnRjLT50dl9uc2VjKTsKLQotCWRvX3NldHRpbWVvZmRheSgmdHMpOwotfQotRVhQT1JUX1NZTUJPTChyZXN0b3JlX3RpbWVfZGVsdGEpOwotCiAjaWZuZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTCiAvKgogICogS2VybmVsIHN5c3RlbSB0aW1lciBzdXBwb3J0LgpAQCAtMzM2LDcgKzE1OSw2IEBACiB7CiAJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOwogCWRvX2xlZHMoKTsKLQlkb19zZXRfcnRjKCk7CiAJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CiAJZG9fdGltZXIoMSk7CiAJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggM2YzNjFhNy4uMTYyMWU1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTEyLDE1ICsxMiwxNyBAQAogICogICdsaW51eC9hcmNoL2FybS9saWIvdHJhcHMuUycuICBNb3N0bHkgYSBkZWJ1Z2dpbmcgYWlkLCBidXQgd2lsbCBwcm9iYWJseQogICogIGtpbGwgdGhlIG9mZmVuZGluZyBwcm9jZXNzLgogICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CkBAIC0yMjQsMTQgKzIyNiwyMSBAQAogI2RlZmluZSBTX1NNUCAiIgogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIF9fZGllKGNvbnN0IGNoYXIgKnN0ciwgaW50IGVyciwgc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGludCBfX2RpZShjb25zdCBjaGFyICpzdHIsIGludCBlcnIsIHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IHRocmVhZC0+dGFzazsKIAlzdGF0aWMgaW50IGRpZV9jb3VudGVyOworCWludCByZXQ7CiAKIAlwcmludGsoS0VSTl9FTUVSRyAiSW50ZXJuYWwgZXJyb3I6ICVzOiAleCBbIyVkXSIgU19QUkVFTVBUIFNfU01QICJcbiIsCiAJICAgICAgIHN0ciwgZXJyLCArK2RpZV9jb3VudGVyKTsKIAlzeXNmc19wcmludGtfbGFzdF9maWxlKCk7CisKKwkvKiB0cmFwIGFuZCBlcnJvciBudW1iZXJzIGFyZSBtb3N0bHkgbWVhbmluZ2xlc3Mgb24gQVJNICovCisJcmV0ID0gbm90aWZ5X2RpZShESUVfT09QUywgc3RyLCByZWdzLCBlcnIsIHRzay0+dGhyZWFkLnRyYXBfbm8sIFNJR1NFR1YpOworCWlmIChyZXQgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybiByZXQ7CisKIAlwcmludF9tb2R1bGVzKCk7CiAJX19zaG93X3JlZ3MocmVncyk7CiAJcHJpbnRrKEtFUk5fRU1FUkcgIlByb2Nlc3MgJS4qcyAocGlkOiAlZCwgc3RhY2sgbGltaXQgPSAweCVwKVxuIiwKQEAgLTI0Myw2ICsyNTIsOCBAQAogCQlkdW1wX2JhY2t0cmFjZShyZWdzLCB0c2spOwogCQlkdW1wX2luc3RyKEtFUk5fRU1FUkcsIHJlZ3MpOwogCX0KKworCXJldHVybiByZXQ7CiB9CiAKIERFRklORV9TUElOTE9DSyhkaWVfbG9jayk7CkBAIC0yNTAsMTYgKzI2MSwyMSBAQAogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdGVjdGVkIGFnYWluc3QgcmUtZW50cmFuY3kuCiAgKi8KLU5PUkVUX1RZUEUgdm9pZCBkaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVycikKK3ZvaWQgZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBlcnIpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CisJaW50IHJldDsKIAogCW9vcHNfZW50ZXIoKTsKIAogCXNwaW5fbG9ja19pcnEoJmRpZV9sb2NrKTsKIAljb25zb2xlX3ZlcmJvc2UoKTsKIAlidXN0X3NwaW5sb2NrcygxKTsKLQlfX2RpZShzdHIsIGVyciwgdGhyZWFkLCByZWdzKTsKKwlyZXQgPSBfX2RpZShzdHIsIGVyciwgdGhyZWFkLCByZWdzKTsKKworCWlmIChyZWdzICYmIGtleGVjX3Nob3VsZF9jcmFzaCh0aHJlYWQtPnRhc2spKQorCQljcmFzaF9rZXhlYyhyZWdzKTsKKwogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCWFkZF90YWludChUQUlOVF9ESUUpOwogCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOwpAQCAtMjY3LDExICsyODMsMTAgQEAKIAogCWlmIChpbl9pbnRlcnJ1cHQoKSkKIAkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiBpbiBpbnRlcnJ1cHQiKTsKLQogCWlmIChwYW5pY19vbl9vb3BzKQogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIik7Ci0KLQlkb19leGl0KFNJR1NFR1YpOworCWlmIChyZXQgIT0gTk9USUZZX1NUT1ApCisJCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKIHZvaWQgYXJtX25vdGlmeV9kaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNDk1N2UxM2UuLmIxNmMwNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC00MywxMCArNDMsNiBAQAogCiAJCUlOSVRfU0VUVVAoMTYpCiAKLQkJX19lYXJseV9iZWdpbiA9IC47Ci0JCQkqKC5lYXJseV9wYXJhbS5pbml0KQotCQlfX2Vhcmx5X2VuZCA9IC47Ci0KIAkJSU5JVF9DQUxMUwogCQlDT05fSU5JVENBTEwKIAkJU0VDVVJJVFlfSU5JVENBTEwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDBiNjM1MWQuLmE5Y2FjMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTAsNyArMTAsNyBAQAogICovCiAKICNpbmNsdWRlICJoYXJkd2FyZS5oIgotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHg4MDAwMDAwMAkJQCBwaHlzaWNhbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwppbmRleCAwYjJlZTk1Li4yZGI0M2E1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwpAQCAtODksNiArODksMTIgQEAKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBIQVZFX0ZCX0FUTUVMCiAKK2NvbmZpZyBBUkNIX0FUNTcyRDk0MEhGCisJYm9vbCAiQVQ1NzJEOTQwSEYiCisJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEdFTkVSSUNfVElNRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisKIGNvbmZpZyBBUkNIX0FUOTFYNDAKIAlib29sICJBVDkxeDQwIgogCkBAIC0zOTAsNiArMzk2LDIzIEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitpZiBBUkNIX0FUNTcyRDk0MEhGCisKK2NvbW1lbnQgIkFUNTcyRDk0MEhGIEJvYXJkIFR5cGUiCisKK2NvbmZpZyBNQUNIX0FUNTcyRDk0MEhGRUIKKwlib29sICJBVDU3MkQ5NDBIRi1FSyIKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ1NzJEOTQwSEYKKwlzZWxlY3QgSEFWRV9BVDkxX0RBVEFGTEFTSF9DQVJECisJc2VsZWN0IEhBVkVfTkFORF9BVE1FTF9CVVNXSURUSF8xNgorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDU3MkQ5NDBIRi1FSyBldmFsdWF0aW9uIGtpdC4KKwkgIDxodHRwOi8vd3d3LmF0bWVsLmNvbS9wcm9kdWN0cy9kaW9wc2lzL2RlZmF1bHQuYXNwPgorCitlbmRpZgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogaWYgQVJDSF9BVDkxWDQwCiAKIGNvbW1lbnQgIkFUOTFYNDAgQm9hcmQgVHlwZSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQppbmRleCA3MDlmYmFkLi4wMjdkZDU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3IEBACiBvYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOUcyMCkJKz0gYXQ5MXNhbTkyNjAubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MXNhbTkyNjBfZGV2aWNlcy5vICBzYW05X3NtYy5vCiAgb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpCSs9IGF0OTFzYW05ZzQ1Lm8gYXQ5MXNhbTkyNnhfdGltZS5vIGF0OTFzYW05ZzQ1X2RldmljZXMubyBzYW05X3NtYy5vCiBvYmotJChDT05GSUdfQVJDSF9BVDkxQ0FQOSkJKz0gYXQ5MWNhcDkubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MWNhcDlfZGV2aWNlcy5vIHNhbTlfc21jLm8KK29iai0kKENPTkZJR19BUkNIX0FUNTcyRDk0MEhGKSAgKz0gYXQ1NzJkOTQwaGYubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ1NzJkOTQwaGZfZGV2aWNlcy5vIHNhbTlfc21jLm8KIG9iai0kKENPTkZJR19BUkNIX0FUOTFYNDApCSs9IGF0OTF4NDAubyBhdDkxeDQwX3RpbWUubwogCiAjIEFUOTFSTTkyMDAgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydApAQCAtNjksNiArNzAsOSBAQAogIyBBVDkxQ0FQOSBib2FyZC1zcGVjaWZpYyBzdXBwb3J0CiBvYmotJChDT05GSUdfTUFDSF9BVDkxQ0FQOUFESykJKz0gYm9hcmQtY2FwOWFkay5vCiAKKyMgQVQ1NzJEOTQwSEYgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAorb2JqLSQoQ09ORklHX01BQ0hfQVQ1NzJEOTQwSEZFQikgKz0gYm9hcmQtYXQ1NzJkOTQwaGZfZWsubworCiAjIEFUOTFYNDAgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MUVCMDEpCSs9IGJvYXJkLWViMDEubwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ1NzJkOTQwaGYuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDU3MmQ5NDBoZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjljNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ1NzJkOTQwaGYuYwpAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtYXQ5MS9hdDU3MmQ5NDBoZi5jCisgKgorICogQW50b25pbyBSLiBDb3N0YSA8Y29zdGEuYW50b25pb3JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEF0bWVsCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2F0NTcyZDk0MGhmLmg+CisjaW5jbHVkZSA8bWFjaC9hdDkxX3BtYy5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MV9yc3RjLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhdDU3MmQ5NDBoZl9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX1NZUywKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9TWVMpLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBVDkxX0lPX1ZJUlRfQkFTRSAtIEFUNTcyRDk0MEhGX1NSQU1fU0laRSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUNTcyRDk0MEhGX1NSQU1fQkFTRSksCisJCS5sZW5ndGgJCT0gQVQ1NzJEOTQwSEZfU1JBTV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ2xvY2tzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogVGhlIHBlcmlwaGVyYWwgY2xvY2tzLgorICovCitzdGF0aWMgc3RydWN0IGNsayBwaW9BX2NsayA9IHsKKwkubmFtZQkJPSAicGlvQV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfUElPQSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBpb0JfY2xrID0geworCS5uYW1lCQk9ICJwaW9CX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9QSU9CLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcGlvQ19jbGsgPSB7CisJLm5hbWUJCT0gInBpb0NfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1BJT0MsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBtYWNiX2NsayA9IHsKKwkubmFtZQkJPSAibWFjYl9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfRU1BQywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7CisJLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfVVMwLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKKwkubmFtZQkJPSAidXNhcnQxX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9VUzEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0geworCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1VTMiwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY19jbGsgPSB7CisJLm5hbWUJCT0gIm1jaV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfTUNJLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdWRjX2NsayA9IHsKKwkubmFtZQkJPSAidWRjX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9VRFAsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0d2kwX2NsayA9IHsKKwkubmFtZQkJPSAidHdpMF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfVFdJMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNwaTBfY2xrID0geworCS5uYW1lCQk9ICJzcGkwX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9TUEkwLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgc3BpMV9jbGsgPSB7CisJLm5hbWUJCT0gInNwaTFfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1NQSTEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBzc2MwX2NsayA9IHsKKwkubmFtZQkJPSAic3NjMF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfU1NDMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzYzFfY2xrID0geworCS5uYW1lCQk9ICJzc2MxX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9TU0MxLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgc3NjMl9jbGsgPSB7CisJLm5hbWUJCT0gInNzYzJfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1NTQzIsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0YzBfY2xrID0geworCS5uYW1lCQk9ICJ0YzBfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1RDMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRjMV9jbGsgPSB7CisJLm5hbWUJCT0gInRjMV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfVEMxLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdGMyX2NsayA9IHsKKwkubmFtZQkJPSAidGMyX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9UQzIsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBvaGNpX2NsayA9IHsKKwkubmFtZQkJPSAib2hjaV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfVUhQLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgc3NjM19jbGsgPSB7CisJLm5hbWUJCT0gInNzYzNfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1NTQzMsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0d2kxX2NsayA9IHsKKwkubmFtZQkJPSAidHdpMV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfVFdJMSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbjBfY2xrID0geworCS5uYW1lCQk9ICJjYW4wX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9DQU4wLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2FuMV9jbGsgPSB7CisJLm5hbWUJCT0gImNhbjFfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX0NBTjEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBtQWdpY1ZfY2xrID0geworCS5uYW1lCQk9ICJtQWdpY1ZfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX01TSVJRMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKKworCitzdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7CisJJnBpb0FfY2xrLAorCSZwaW9CX2NsaywKKwkmcGlvQ19jbGssCisJJm1hY2JfY2xrLAorCSZ1c2FydDBfY2xrLAorCSZ1c2FydDFfY2xrLAorCSZ1c2FydDJfY2xrLAorCSZtbWNfY2xrLAorCSZ1ZGNfY2xrLAorCSZ0d2kwX2NsaywKKwkmc3BpMF9jbGssCisJJnNwaTFfY2xrLAorCSZzc2MwX2NsaywKKwkmc3NjMV9jbGssCisJJnNzYzJfY2xrLAorCSZ0YzBfY2xrLAorCSZ0YzFfY2xrLAorCSZ0YzJfY2xrLAorCSZvaGNpX2NsaywKKwkmc3NjM19jbGssCisJJnR3aTFfY2xrLAorCSZjYW4wX2NsaywKKwkmY2FuMV9jbGssCisJJm1BZ2ljVl9jbGssCisJLyogaXJxMCAuLiBpcnEyICovCit9OworCisvKgorICogVGhlIGZpdmUgcHJvZ3JhbW1hYmxlIGNsb2Nrcy4KKyAqIFlvdSBtdXN0IGNvbmZpZ3VyZSBwaW4gbXVsdGlwbGV4aW5nIHRvIGJyaW5nIHRoZXNlIHNpZ25hbHMgb3V0LgorICovCitzdGF0aWMgc3RydWN0IGNsayBwY2swID0geworCS5uYW1lCQk9ICJwY2swIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0swLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBwY2sxID0geworCS5uYW1lCQk9ICJwY2sxIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0sxLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMSwKK307CitzdGF0aWMgc3RydWN0IGNsayBwY2syID0geworCS5uYW1lCQk9ICJwY2syIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0syLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMiwKK307CitzdGF0aWMgc3RydWN0IGNsayBwY2szID0geworCS5uYW1lCQk9ICJwY2szIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0szLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1BZ2ljVl9tZW1fY2xrID0geworCS5uYW1lCQk9ICJtQWdpY1ZfbWVtX2NsayIsCisJLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLNCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCisJLmlkCQk9IDQsCit9OworCisvKiBIQ2xvY2tzICovCitzdGF0aWMgc3RydWN0IGNsayBoY2swID0geworCS5uYW1lCQk9ICJoY2swIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19IQ0swLAorCS50eXBlCQk9IENMS19UWVBFX1NZU1RFTSwKKwkuaWQJCT0gMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBoY2sxID0geworCS5uYW1lCQk9ICJoY2sxIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19IQ0sxLAorCS50eXBlCQk9IENMS19UWVBFX1NZU1RFTSwKKwkuaWQJCT0gMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDU3MmQ5NDBoZl9yZWdpc3Rlcl9jbG9ja3Modm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3MpOyBpKyspCisJCWNsa19yZWdpc3RlcihwZXJpcGhfY2xvY2tzW2ldKTsKKworCWNsa19yZWdpc3RlcigmcGNrMCk7CisJY2xrX3JlZ2lzdGVyKCZwY2sxKTsKKwljbGtfcmVnaXN0ZXIoJnBjazIpOworCWNsa19yZWdpc3RlcigmcGNrMyk7CisJY2xrX3JlZ2lzdGVyKCZtQWdpY1ZfbWVtX2Nsayk7CisKKwljbGtfcmVnaXN0ZXIoJmhjazApOworCWNsa19yZWdpc3RlcigmaGNrMSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgR1BJTworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBhdDkxX2dwaW9fYmFuayBhdDU3MmQ5NDBoZl9ncGlvW10gPSB7CisJeworCQkuaWQJCT0gQVQ1NzJEOTQwSEZfSURfUElPQSwKKwkJLm9mZnNldAkJPSBBVDkxX1BJT0EsCisJCS5jbG9jawkJPSAmcGlvQV9jbGssCisJfSwgeworCQkuaWQJCT0gQVQ1NzJEOTQwSEZfSURfUElPQiwKKwkJLm9mZnNldAkJPSBBVDkxX1BJT0IsCisJCS5jbG9jawkJPSAmcGlvQl9jbGssCisJfSwgeworCQkuaWQJCT0gQVQ1NzJEOTQwSEZfSURfUElPQywKKwkJLm9mZnNldAkJPSBBVDkxX1BJT0MsCisJCS5jbG9jawkJPSAmcGlvQ19jbGssCisJfQorfTsKKworc3RhdGljIHZvaWQgYXQ1NzJkOTQwaGZfcmVzZXQodm9pZCkKK3sKKwlhdDkxX3N5c193cml0ZShBVDkxX1JTVENfQ1IsIEFUOTFfUlNUQ19LRVkgfCBBVDkxX1JTVENfUFJPQ1JTVCB8IEFUOTFfUlNUQ19QRVJSU1QpOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQVQ1NzJEOTQwSEYgcHJvY2Vzc29yIGluaXRpYWxpemF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit2b2lkIF9faW5pdCBhdDU3MmQ5NDBoZl9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaykKK3sKKwkvKiBNYXAgcGVyaXBoZXJhbHMgKi8KKwlpb3RhYmxlX2luaXQoYXQ1NzJkOTQwaGZfaW9fZGVzYywgQVJSQVlfU0laRShhdDU3MmQ5NDBoZl9pb19kZXNjKSk7CisKKwlhdDkxX2FyY2hfcmVzZXQgPSBhdDU3MmQ5NDBoZl9yZXNldDsKKwlhdDkxX2V4dGVybl9pcnEgPSAoMSA8PCBBVDU3MkQ5NDBIRl9JRF9JUlEwKSB8ICgxIDw8IEFUNTcyRDk0MEhGX0lEX0lSUTEpCisJCQl8ICgxIDw8IEFUNTcyRDk0MEhGX0lEX0lSUTIpOworCisJLyogSW5pdCBjbG9jayBzdWJzeXN0ZW0gKi8KKwlhdDkxX2Nsb2NrX2luaXQobWFpbl9jbG9jayk7CisKKwkvKiBSZWdpc3RlciB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGNsb2NrcyAqLworCWF0NTcyZDk0MGhmX3JlZ2lzdGVyX2Nsb2NrcygpOworCisJLyogUmVnaXN0ZXIgR1BJTyBzdWJzeXN0ZW0gKi8KKwlhdDkxX2dwaW9faW5pdChhdDU3MmQ5NDBoZl9ncGlvLCAzKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBJbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzICgwID0gbG93ZXN0LCA3ID0gaGlnaGVzdCkuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXQ1NzJkOTQwaGZfZGVmYXVsdF9pcnFfcHJpb3JpdHlbTlJfQUlDX0lSUVNdIF9faW5pdGRhdGEgPSB7CisJNywJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKwk3LAkvKiBTeXN0ZW0gUGVyaXBoZXJhbHMgKi8KKwkwLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KKwkwLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8KKwkwLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMgKi8KKwkzLAkvKiBFdGhlcm5ldCAqLworCTYsCS8qIFVTQVJUIDAgKi8KKwk2LAkvKiBVU0FSVCAxICovCisJNiwJLyogVVNBUlQgMiAqLworCTAsCS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgKi8KKwk0LAkvKiBVU0IgRGV2aWNlIFBvcnQgKi8KKwkwLAkvKiBUd28tV2lyZSBJbnRlcmZhY2UgMCAqLworCTYsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovCisJNiwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8KKwk1LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCisJNSwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLworCTUsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDIgKi8KKwkwLAkvKiBUaW1lciBDb3VudGVyIDAgKi8KKwkwLAkvKiBUaW1lciBDb3VudGVyIDEgKi8KKwkwLAkvKiBUaW1lciBDb3VudGVyIDIgKi8KKwkzLAkvKiBVU0IgSG9zdCBwb3J0ICovCisJMywJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMyAqLworCTAsCS8qIFR3by1XaXJlIEludGVyZmFjZSAxICovCisJMCwJLyogQ0FOIENvbnRyb2xsZXIgMCAqLworCTAsCS8qIENBTiBDb250cm9sbGVyIDEgKi8KKwkwLAkvKiBtQWdpY1YgSEFMVCBsaW5lICovCisJMCwJLyogbUFnaWNWIFNJUlEwIGxpbmUgKi8KKwkwLAkvKiBtQWdpY1YgZXhjZXB0aW9uIGxpbmUgKi8KKwkwLAkvKiBtQWdpY1YgZW5kIG9mIERNQSBsaW5lICovCisJMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKwkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLworCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCit9OworCit2b2lkIF9faW5pdCBhdDU3MmQ5NDBoZl9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W05SX0FJQ19JUlFTXSkKK3sKKwlpZiAoIXByaW9yaXR5KQorCQlwcmlvcml0eSA9IGF0NTcyZDk0MGhmX2RlZmF1bHRfaXJxX3ByaW9yaXR5OworCisJLyogSW5pdGlhbGl6ZSB0aGUgQUlDIGludGVycnVwdCBjb250cm9sbGVyICovCisJYXQ5MV9haWNfaW5pdChwcmlvcml0eSk7CisKKwkvKiBFbmFibGUgR1BJTyBpbnRlcnJ1cHRzICovCisJYXQ5MV9ncGlvX2lycV9zZXR1cCgpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ1NzJkOTQwaGZfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0NTcyZDk0MGhmX2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmMyMGEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0NTcyZDk0MGhmX2RldmljZXMuYwpAQCAtMCwwICsxLDk3MCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtYXQ5MS9hdDU3MmQ5NDBoZl9kZXZpY2VzLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXRtZWwgQW50b25pbyBSLiBDb3N0YSA8Y29zdGEuYW50b25pb3JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRoaWJhdXQgVkFSRU5FIDx2YXJlbmV0QHBhcmlzYy1saW51eC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRGF2aWQgQnJvd25lbGwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvYXQ1NzJkOTQwaGYuaD4KKyNpbmNsdWRlIDxtYWNoL2F0NTcyZDk0MGhmX21hdHJpeC5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAic2FtOV9zbWMuaCIKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFVTQiBIb3N0CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQorc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSB1c2JoX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiaF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX1VIUF9CQVNFLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfVUhQX0JBU0UgKyBTWl8xTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9VSFAsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9VSFAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl91c2JoX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXQ5MV9vaGNpIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZvaGNpX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gdXNiaF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYmhfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCXVzYmhfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ1NzJkOTQwaGZfdXNiaF9kZXZpY2UpOworCit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBVU0IgRGV2aWNlIChHYWRnZXQpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfQVQ5MQorc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIHVkY19kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVkY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX0JBU0VfVURQLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfQkFTRV9VRFAgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfVURQLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfSURfVURQLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfdWRjX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXQ5MV91ZGMiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWRjX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSB1ZGNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1ZGNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpCit7CisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwlpZiAoZGF0YS0+dmJ1c19waW4pIHsKKwkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT52YnVzX3BpbiwgMCk7CisJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnZidXNfcGluLCAxKTsKKwl9CisKKwkvKiBQdWxsdXAgcGluIGlzIGhhbmRsZWQgaW50ZXJuYWxseSAqLworCisJdWRjX2RhdGEgPSAqZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0NTcyZDk0MGhmX3VkY19kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEV0aGVybmV0CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTUFDQikgfHwgZGVmaW5lZChDT05GSUdfTUFDQl9NT0RVTEUpCitzdGF0aWMgdTY0IGV0aF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSBldGhfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBldGhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9CQVNFX0VNQUMsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX0VNQUMgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfRU1BQywKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0lEX0VNQUMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl9ldGhfZGV2aWNlID0geworCS5uYW1lCQk9ICJtYWNiIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkuZG1hX21hc2sJCT0gJmV0aF9kbWFtYXNrLAorCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZldGhfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGV0aF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGV0aF9yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWlmIChkYXRhLT5waHlfaXJxX3BpbikgeworCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnBoeV9pcnFfcGluLCAwKTsKKwkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+cGh5X2lycV9waW4sIDEpOworCX0KKworCS8qIE9ubHkgUk1JSSBpcyBzdXBwb3J0ZWQgKi8KKwlkYXRhLT5pc19ybWlpID0gMTsKKworCS8qIFBpbnMgdXNlZCBmb3IgUk1JSSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTYsIDApOwkvKiBFVFhDS19FUkVGQ0sgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE3LCAwKTsJLyogRVJYRFYgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAwKTsJLyogRVJYMCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTksIDApOwkvKiBFUlgxICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMCwgMCk7CS8qIEVSWEVSICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMywgMCk7CS8qIEVUWEVOICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMSwgMCk7CS8qIEVUWDAgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAwKTsJLyogRVRYMSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTMsIDApOwkvKiBFTURJTyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTQsIDApOwkvKiBFTURDICovCisKKwlldGhfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ1NzJkOTQwaGZfZXRoX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgTU1DIC8gU0QKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX0FUOTFfTU9EVUxFKQorc3RhdGljIHU2NCBtbWNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgc3RydWN0IGF0OTFfbW1jX2RhdGEgbW1jX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfQkFTRV9NQ0ksCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX01DSSArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9NQ0ksCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9NQ0ksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl9tbWNfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX21jaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmbW1jX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbW1jX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBtbWNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tbWMoc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCS8qIGlucHV0L2lycSAqLworCWlmIChkYXRhLT5kZXRfcGluKSB7CisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7CisJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPmRldF9waW4sIDEpOworCX0KKwlpZiAoZGF0YS0+d3BfcGluKQorCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPndwX3BpbiwgMSk7CisJaWYgKGRhdGEtPnZjY19waW4pCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnZjY19waW4sIDApOworCisJLyogQ0xLICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyMiwgMCk7CisKKwkvKiBDTUQgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzIzLCAxKTsKKworCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzI0LCAxKTsKKwlpZiAoZGF0YS0+d2lyZTQpIHsKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyNSwgMSk7CisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMjYsIDEpOworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzI3LCAxKTsKKwl9CisKKwltbWNfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ1NzJkOTQwaGZfbW1jX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzaG9ydCBtbWNfaWQsIHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBOQU5EIC8gU21hcnRNZWRpYQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBuYW5kX2RhdGE7CisKKyNkZWZpbmUgTkFORF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8zCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IE5BTkRfQkFTRSwKKwkJLmVuZAk9IE5BTkRfQkFTRSArIFNaXzI1Nk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl9uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJm5hbmRfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IG5hbmRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShuYW5kX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgY3NhOworCisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwljc2EgPSBhdDkxX3N5c19yZWFkKEFUOTFfTUFUUklYX0VCSUNTQSk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9NQVRSSVhfRUJJQ1NBLCBjc2EgfCBBVDkxX01BVFJJWF9DUzNBX1NNQ19TTUFSVE1FRElBKTsKKworCS8qIGVuYWJsZSBwaW4gKi8KKwlpZiAoZGF0YS0+ZW5hYmxlX3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+ZW5hYmxlX3BpbiwgMSk7CisKKwkvKiByZWFkeS9idXN5IHBpbiAqLworCWlmIChkYXRhLT5yZHlfcGluKQorCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnJkeV9waW4sIDEpOworCisJLyogY2FyZCBkZXRlY3QgcGluICovCisJaWYgKGRhdGEtPmRldF9waW4pCisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7CisKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI4LCAwKTsJCS8qIEFbMjJdICovCisJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyOCwgMCk7CQkvKiBOQU5ET0UgKi8KKwlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI5LCAwKTsJCS8qIE5BTkRXRSAqLworCisJbmFuZF9kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDU3MmQ5NDBoZl9uYW5kX2RldmljZSk7Cit9CisKKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBUV0kgKGkyYykKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBQcmVmZXIgdGhlIEdQSU8gY29kZSBzaW5jZSB0aGUgVFdJIGNvbnRyb2xsZXIgaXNuJ3Qgcm9idXN0CisgKiAoZ2V0cyBvdmVycnVucyBhbmQgdW5kZXJydW5zIHVuZGVyIGxvYWQpIGFuZCBjYW4gb25seSBpc3N1ZQorICogcmVwZWF0ZWQgU1RBUlRzIGluIG9uZSBzY2VuYXJpbyAodGhlIGRyaXZlciBkb2Vzbid0IHlldCBoYW5kbGUgdGhlbSkuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0kyQ19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfR1BJT19NT0RVTEUpCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBwZGF0YSA9IHsKKwkuc2RhX3BpbgkJPSBBVDkxX1BJTl9QQzcsCisJLnNkYV9pc19vcGVuX2RyYWluCT0gMSwKKwkuc2NsX3BpbgkJPSBBVDkxX1BJTl9QQzgsCisJLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKKwkudWRlbGF5CQkJPSAyLAkJLyogfjEwMCBrSHogKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0NTcyZDk0MGhmX3R3aV9kZXZpY2UgeworCS5uYW1lCQkJPSAiaTJjLWdwaW8iLAorCS5pZAkJCT0gLTEsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnBkYXRhLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQoreworCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BDNywgMSk7CQkvKiBUV0QgKFNEQSkgKi8KKwlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQzcsIDEpOworCisJYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEE4LCAxKTsJCS8qIFRXQ0sgKFNDTCkgKi8KKwlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQzgsIDEpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnJfZGV2aWNlcyk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDU3MmQ5NDBoZl90d2lfZGV2aWNlKTsKK30KKworI2VsaWYgZGVmaW5lZChDT05GSUdfSTJDX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19BVDkxX01PRFVMRSkKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2kwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfQkFTRV9UV0kwLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfQkFTRV9UV0kwICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX0lEX1RXSTAsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9UV0kwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfdHdpMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfaTJjIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSB0d2kwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpMF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2kxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfQkFTRV9UV0kxLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfQkFTRV9UV0kxICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX0lEX1RXSTEsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9UV0kxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfdHdpMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfaTJjIiwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSB0d2kxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpMV9yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQoreworCS8qIHBpbnMgdXNlZCBmb3IgVFdJMCBpbnRlcmZhY2UgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzcsIDApOwkJLyogVFdEICovCisJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEM3LCAxKTsKKworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOCwgMCk7CQkvKiBUV0NLICovCisJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEM4LCAxKTsKKworCS8qIHBpbnMgdXNlZCBmb3IgVFdJMSBpbnRlcmZhY2UgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzIwLCAwKTsJCS8qIFRXRCAqLworCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BDMjAsIDEpOworCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyMSwgMCk7CQkvKiBUV0NLICovCisJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEMyMSwgMSk7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBkZXZpY2VzLCBucl9kZXZpY2VzKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0NTcyZDk0MGhmX3R3aTBfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0NTcyZDk0MGhmX3R3aTFfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFNQSQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMX01PRFVMRSkKK3N0YXRpYyB1NjQgc3BpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaTBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9CQVNFX1NQSTAsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX1NQSTAgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfU1BJMCwKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0lEX1NQSTAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl9zcGkwX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfc3BpIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJfSwKKwkucmVzb3VyY2UJPSBzcGkwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpMF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwaTBfc3RhbmRhcmRfY3NbNF0gPSB7IEFUOTFfUElOX1BBMywgQVQ5MV9QSU5fUEE0LCBBVDkxX1BJTl9QQTUsIEFUOTFfUElOX1BBNiB9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaTFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9CQVNFX1NQSTEsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX1NQSTEgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfU1BJMSwKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0lEX1NQSTEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl9zcGkxX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfc3BpIiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJfSwKKwkucmVzb3VyY2UJPSBzcGkxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpMV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwaTFfc3RhbmRhcmRfY3NbNF0gPSB7IEFUOTFfUElOX1BDMywgQVQ5MV9QSU5fUEM0LCBBVDkxX1BJTl9QQzUsIEFUOTFfUElOX1BDNiB9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBjc19waW47CisJc2hvcnQgZW5hYmxlX3NwaTAgPSAwOworCXNob3J0IGVuYWJsZV9zcGkxID0gMDsKKworCS8qIENob29zZSBTUEkgY2hpcC1zZWxlY3RzICovCisJZm9yIChpID0gMDsgaSA8IG5yX2RldmljZXM7IGkrKykgeworCQlpZiAoZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEpCisJCQljc19waW4gPSAodW5zaWduZWQgbG9uZykgZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGE7CisJCWVsc2UgaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQorCQkJY3NfcGluID0gc3BpMF9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKKwkJZWxzZQorCQkJY3NfcGluID0gc3BpMV9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKKworCQlpZiAoZGV2aWNlc1tpXS5idXNfbnVtID09IDApCisJCQllbmFibGVfc3BpMCA9IDE7CisJCWVsc2UKKwkJCWVuYWJsZV9zcGkxID0gMTsKKworCQkvKiBlbmFibGUgY2hpcC1zZWxlY3QgcGluICovCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNzX3BpbiwgMSk7CisKKwkJLyogcGFzcyBjaGlwLXNlbGVjdCBwaW4gdG8gZHJpdmVyICovCisJCWRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgY3NfcGluOworCX0KKworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGRldmljZXMsIG5yX2RldmljZXMpOworCisJLyogQ29uZmlndXJlIFNQSSBidXMoZXMpICovCisJaWYgKGVuYWJsZV9zcGkwKSB7CisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMCwgMCk7CS8qIFNQSTBfTUlTTyAqLworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEsIDApOwkvKiBTUEkwX01PU0kgKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyLCAwKTsJLyogU1BJMF9TUENLICovCisKKwkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInNwaTBfY2xrIiwgJmF0NTcyZDk0MGhmX3NwaTBfZGV2aWNlLmRldiwgInNwaV9jbGsiKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDU3MmQ5NDBoZl9zcGkwX2RldmljZSk7CisJfQorCWlmIChlbmFibGVfc3BpMSkgeworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzAsIDApOwkvKiBTUEkxX01JU08gKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsJLyogU1BJMV9NT1NJICovCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMiwgMCk7CS8qIFNQSTFfU1BDSyAqLworCisJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJzcGkxX2NsayIsICZhdDU3MmQ5NDBoZl9zcGkxX2RldmljZS5kZXYsICJzcGlfY2xrIik7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ1NzJkOTQwaGZfc3BpMV9kZXZpY2UpOworCX0KK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRpbWVyL0NvdW50ZXIgYmxvY2tzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgQ09ORklHX0FUTUVMX1RDTElCCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfQkFTRV9UQ0IsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX1RDQiArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9UQzAsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9UQzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9UQzEsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9UQzEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9UQzIsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9UQzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl90Y2JfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF90Y2IiLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9IHRjYl9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRjYl9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKQoreworCS8qIHRoaXMgY2hpcCBoYXMgYSBzZXBhcmF0ZSBjbG9jayBhbmQgaXJxIGZvciBlYWNoIFRDIGNoYW5uZWwgKi8KKwlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidGMwX2NsayIsICZhdDU3MmQ5NDBoZl90Y2JfZGV2aWNlLmRldiwgInQwX2NsayIpOworCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ0YzFfY2xrIiwgJmF0NTcyZDk0MGhmX3RjYl9kZXZpY2UuZGV2LCAidDFfY2xrIik7CisJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInRjMl9jbGsiLCAmYXQ1NzJkOTQwaGZfdGNiX2RldmljZS5kZXYsICJ0Ml9jbGsiKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0NTcyZDk0MGhmX3RjYl9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkgeyB9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFJUVAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydHRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBBVDkxX0JBU0VfU1lTICsgQVQ5MV9SVFQsCisJCS5lbmQJPSBBVDkxX0JBU0VfU1lTICsgQVQ5MV9SVFQgKyBTWl8xNiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0NTcyZDk0MGhmX3J0dF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfcnR0IiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSBydHRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShydHRfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDU3MmQ5NDBoZl9ydHRfZGV2aWNlKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFdhdGNoZG9nCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0dfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfd2R0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXQ5MV93ZHQiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDU3MmQ5NDBoZl93ZHRfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFVBUlQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQVRNRUwpCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRiZ3VfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxX1ZBX0JBU0VfU1lTICsgQVQ5MV9EQkdVLAorCQkuZW5kCT0gQVQ5MV9WQV9CQVNFX1NZUyArIEFUOTFfREJHVSArIFNaXzUxMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxX0lEX1NZUywKKwkJLmVuZAk9IEFUOTFfSURfU1lTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0geworCS51c2VfZG1hX3R4CT0gMCwKKwkudXNlX2RtYV9yeAk9IDAsCQkvKiBEQkdVIG5vdCBjYXBhYmxlIG9mIHJlY2VpdmUgRE1BICovCisJLnJlZ3MJCT0gKHZvaWQgX19pb21lbSAqKShBVDkxX1ZBX0JBU0VfU1lTICsgQVQ5MV9EQkdVKSwKK307CisKK3N0YXRpYyB1NjQgZGJndV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfZGJndV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJmRiZ3VfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZkYmd1X2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBkYmd1X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGJndV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9kYmd1X3BpbnModm9pZCkKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMxLCAxKTsJCS8qIERUWEQgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMwLCAwKTsJCS8qIERSWEQgKi8KK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX0JBU0VfVVMwLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfQkFTRV9VUzAgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfVVMwLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfSURfVVMwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDBfZGF0YSA9IHsKKwkudXNlX2RtYV90eAk9IDEsCisJLnVzZV9kbWFfcngJPSAxLAorfTsKKworc3RhdGljIHU2NCB1YXJ0MF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfdWFydDBfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MF9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQwX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSB1YXJ0MF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQwX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MF9waW5zKHVuc2lnbmVkIHBpbnMpCit7CisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE4LCAxKTsJCS8qIFRYRDAgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTcsIDApOwkJLyogUlhEMCAqLworCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMCwgMCk7CS8qIFJUUzAgKi8KKwlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTksIDApOwkvKiBDVFMwICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9CQVNFX1VTMSwKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0JBU0VfVVMxICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX0lEX1VTMSwKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0lEX1VTMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQxX2RhdGEgPSB7CisJLnVzZV9kbWFfdHgJPSAxLAorCS51c2VfZG1hX3J4CT0gMSwKK307CisKK3N0YXRpYyB1NjQgdWFydDFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0NTcyZDk0MGhmX3VhcnQxX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAorCS5pZAkJPSAyLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmdWFydDFfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0MV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gdWFydDFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDFfcGlucyh1bnNpZ25lZCBwaW5zKQoreworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTAsIDEpOwkJLyogVFhEMSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOSAsIDApOwkJLyogUlhEMSAqLworCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMiwgMCk7CS8qIFJUUzEgKi8KKwlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzExLCAwKTsJLyogQ1RTMSAqLworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQyX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfQkFTRV9VUzIsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX1VTMiArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9VUzIsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9VUzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0geworCS51c2VfZG1hX3R4CT0gMSwKKwkudXNlX2RtYV9yeAk9IDEsCit9OworCitzdGF0aWMgdTY0IHVhcnQyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl91YXJ0Ml9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKKwkuaWQJCT0gMywKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJnVhcnQyX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDJfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDJfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModW5zaWduZWQgcGlucykKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE1LCAxKTsJCS8qIFRYRDIgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE0LCAwKTsJCS8qIFJYRDIgKi8KKworCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTcsIDApOwkvKiBSVFMyICovCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxNiwgMCk7CS8qIENUUzIgKi8KK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdGRhdGEgYXQ5MV91YXJ0c1tBVE1FTF9NQVhfVUFSVF07CS8qIHRoZSBVQVJUcyB0byB1c2UgKi8KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2U7CS8qIHRoZSBzZXJpYWwgY29uc29sZSBkZXZpY2UgKi8KKwordm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCXN3aXRjaCAoaWQpIHsKKwkJY2FzZSAwOgkJLyogREJHVSAqLworCQkJcGRldiA9ICZhdDU3MmQ5NDBoZl9kYmd1X2RldmljZTsKKwkJCWNvbmZpZ3VyZV9kYmd1X3BpbnMoKTsKKwkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJtY2siLCAmcGRldi0+ZGV2LCAidXNhcnQiKTsKKwkJCWJyZWFrOworCQljYXNlIEFUNTcyRDk0MEhGX0lEX1VTMDoKKwkJCXBkZXYgPSAmYXQ1NzJkOTQwaGZfdWFydDBfZGV2aWNlOworCQkJY29uZmlndXJlX3VzYXJ0MF9waW5zKHBpbnMpOworCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0MF9jbGsiLCAmcGRldi0+ZGV2LCAidXNhcnQiKTsKKwkJCWJyZWFrOworCQljYXNlIEFUNTcyRDk0MEhGX0lEX1VTMToKKwkJCXBkZXYgPSAmYXQ1NzJkOTQwaGZfdWFydDFfZGV2aWNlOworCQkJY29uZmlndXJlX3VzYXJ0MV9waW5zKHBpbnMpOworCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0MV9jbGsiLCAmcGRldi0+ZGV2LCAidXNhcnQiKTsKKwkJCWJyZWFrOworCQljYXNlIEFUNTcyRDk0MEhGX0lEX1VTMjoKKwkJCXBkZXYgPSAmYXQ1NzJkOTQwaGZfdWFydDJfZGV2aWNlOworCQkJY29uZmlndXJlX3VzYXJ0Ml9waW5zKHBpbnMpOworCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0Ml9jbGsiLCAmcGRldi0+ZGV2LCAidXNhcnQiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuOworCX0KKwlwZGV2LT5pZCA9IHBvcnRucjsJCS8qIHVwZGF0ZSB0byBtYXBwZWQgSUQgKi8KKworCWlmIChwb3J0bnIgPCBBVE1FTF9NQVhfVUFSVCkKKwkJYXQ5MV91YXJ0c1twb3J0bnJdID0gcGRldjsKK30KKwordm9pZCBfX2luaXQgYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUodW5zaWduZWQgcG9ydG5yKQoreworCWlmIChwb3J0bnIgPCBBVE1FTF9NQVhfVUFSVCkKKwkJYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZSA9IGF0OTFfdWFydHNbcG9ydG5yXTsKK30KKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFUTUVMX01BWF9VQVJUOyBpKyspIHsKKwkJaWYgKGF0OTFfdWFydHNbaV0pCisJCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoYXQ5MV91YXJ0c1tpXSk7CisJfQorCisJaWYgKCFhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlKQorCQlwcmludGsoS0VSTl9JTkZPICJBVDkxOiBObyBkZWZhdWx0IHNlcmlhbCBjb25zb2xlIGRlZmluZWQuXG4iKTsKK30KKworI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKSB7fQordm9pZCBfX2luaXQgYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUodW5zaWduZWQgcG9ydG5yKSB7fQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBtQWdpYworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIENPTkZJR19NQUdJQ1YKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbUFnaWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX1BNX0JBU0UsCisJCS5lbmQgICA9IEFUOTFfTUFHSUNfUE1fQkFTRSArIEFUOTFfTUFHSUNfUE1fU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX0RNX0lfQkFTRSwKKwkJLmVuZCAgID0gQVQ5MV9NQUdJQ19ETV9JX0JBU0UgKyBBVDkxX01BR0lDX0RNX0lfU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX0RNX0ZfQkFTRSwKKwkJLmVuZCAgID0gQVQ5MV9NQUdJQ19ETV9GX0JBU0UgKyBBVDkxX01BR0lDX0RNX0ZfU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX0RNX0RCX0JBU0UsCisJCS5lbmQgICA9IEFUOTFfTUFHSUNfRE1fREJfQkFTRSArIEFUOTFfTUFHSUNfRE1fREJfU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX1JFR1NfQkFTRSwKKwkJLmVuZCAgID0gQVQ5MV9NQUdJQ19SRUdTX0JBU0UgKyBBVDkxX01BR0lDX1JFR1NfU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX0VYVFBBR0VfQkFTRSwKKwkJLmVuZCAgID0gQVQ5MV9NQUdJQ19FWFRQQUdFX0JBU0UgKyBBVDkxX01BR0lDX0VYVFBBR0VfU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgID0gQVQ1NzJEOTQwSEZfSURfTVNJUlEwLAorCQkuZW5kICAgID0gQVQ1NzJEOTQwSEZfSURfTVNJUlEwLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCAgPSBBVDU3MkQ5NDBIRl9JRF9NSEFMVCwKKwkJLmVuZCAgICA9IEFUNTcyRDk0MEhGX0lEX01IQUxULAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCAgPSBBVDU3MkQ5NDBIRl9JRF9NRVhDLAorCQkuZW5kICAgID0gQVQ1NzJEOTQwSEZfSURfTUVYQywKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgID0gQVQ1NzJEOTQwSEZfSURfTUVETUEsCisJCS5lbmQgICAgPSBBVDU3MkQ5NDBIRl9JRF9NRURNQSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtQWdpY19kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gIm1BZ2ljIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG1BZ2ljX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gbUFnaWNfcmVzb3VyY2VzLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21BZ2ljKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtQWdpY19kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tQWdpYyh2b2lkKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIFRoZXNlIGRldmljZXMgYXJlIGFsd2F5cyBwcmVzZW50IGFuZCBkb24ndCBuZWVkIGFueSBib2FyZC1zcGVjaWZpYworICogc2V0dXAuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKK3sKKwlhdDkxX2FkZF9kZXZpY2VfcnR0KCk7CisJYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7CisJYXQ5MV9hZGRfZGV2aWNlX3RjKCk7CisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYXQ1NzJkOTQwaGZfZWsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1hdDU3MmQ5NDBoZl9lay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYWZmMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYXQ1NzJkOTQwaGZfZWsuYwpAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1hdDU3MmQ5NDBoZl9lay5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEF0bWVsIEFudG9uaW8gUi4gQ29zdGEgPGNvc3RhLmFudG9uaW9yQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZHMxMzA1Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgorCisjaW5jbHVkZSAic2FtOV9zbWMuaCIKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKworc3RhdGljIHZvaWQgX19pbml0IGViX21hcF9pbyh2b2lkKQoreworCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxMi41MDAgTUh6IGNyeXN0YWwgKi8KKwlhdDU3MmQ5NDBoZl9pbml0aWFsaXplKDEyMDAwMDAwKTsKKworCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOworCisJLyogVVNBUlQwIG9uIHR0eVMxLiAoUnggJiBUeCBvbmx5KSAqLworCWF0OTFfcmVnaXN0ZXJfdWFydChBVDU3MkQ5NDBIRl9JRF9VUzAsIDEsIDApOworCisJLyogVVNBUlQxIG9uIHR0eVMyLiAoUnggJiBUeCBvbmx5KSAqLworCWF0OTFfcmVnaXN0ZXJfdWFydChBVDU3MkQ5NDBIRl9JRF9VUzEsIDIsIDApOworCisJLyogVVNBUlQyIG9uIHR0eVMzLiAoVHggJiBSeCBvbmx5ICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUNTcyRDk0MEhGX0lEX1VTMiwgMywgMCk7CisKKwkvKiBzZXQgc2VyaWFsIGNvbnNvbGUgdG8gdHR5UzAgKGllLCBEQkdVKSAqLworCWF0OTFfc2V0X3NlcmlhbF9jb25zb2xlKDApOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZWJfaW5pdF9pcnEodm9pZCkKK3sKKwlhdDU3MmQ5NDBoZl9pbml0X2ludGVycnVwdHMoTlVMTCk7Cit9CisKKworLyoKKyAqIFVTQiBIb3N0IFBvcnQKKyAqLworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGViX3VzYmhfZGF0YSA9IHsKKwkucG9ydHMJCT0gMiwKK307CisKKworLyoKKyAqIFVTQiBEZXZpY2UgUG9ydAorICovCitzdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBlYl91ZGNfZGF0YSA9IHsKKwkudmJ1c19waW4JPSAwLAkJLyogbm8gVkJVUyBkZXRlY3Rpb24sVURDIGFsd2F5cyBvbiAqLworCS5wdWxsdXBfcGluCT0gMCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLworfTsKKworCisvKgorICogTUNJIChTRC9NTUMpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSBfX2luaXRkYXRhIGViX21tY19kYXRhID0geworCS53aXJlNAkJPSAxLAorLyoJLmRldF9waW4JPSAuLi4gbm90IGNvbm5lY3RlZCAqLworLyoJLndwX3BpbgkJPSAuLi4gbm90IGNvbm5lY3RlZCAqLworLyoJLnZjY19waW4JPSAuLi4gbm90IGNvbm5lY3RlZCAqLworfTsKKworCisvKgorICogTUFDQiBFdGhlcm5ldCBkZXZpY2UKKyAqLworc3RhdGljIHN0cnVjdCBhdDkxX2V0aF9kYXRhIF9faW5pdGRhdGEgZWJfZXRoX2RhdGEgPSB7CisJLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEIyNSwKKwkuaXNfcm1paQk9IDEsCit9OworCisvKgorICogTk9SIGZsYXNoCisgKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGViX25vcl9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiUmF3IEVudmlyb25tZW50IiwKKwkJLm9mZnNldAkJPSAwLAorCQkuc2l6ZQkJPSBTWl80TSwKKwkJLm1hc2tfZmxhZ3MJPSAwLAorCX0sCisJeworCQkubmFtZQkJPSAiT1MgRlMiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gMyAqIFNaXzFNLAorCQkubWFza19mbGFncwk9IDAsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJBUFAgRlMiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm1hc2tfZmxhZ3MJPSAwLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBub3JfZmxhc2hfc2V0X3ZwcChzdHJ1Y3QgbWFwX2luZm8qIG1pLCBpbnQgaSkgeworfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbm9yX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDQsCisJLnBhcnRzCQk9IGViX25vcl9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZWJfbm9yX3BhcnRpdGlvbnMpLAorCS5zZXRfdnBwCT0gbm9yX2ZsYXNoX3NldF92cHAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5vcl9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IEFUOTFfQ0hJUFNFTEVDVF8wLAorCQkuZW5kCT0gQVQ5MV9DSElQU0VMRUNUXzAgKyBTWl8xNk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugbm9yX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJCQkucGxhdGZvcm1fZGF0YSA9ICZub3JfZmxhc2hfZGF0YSwKKwkJCX0sCisJLnJlc291cmNlCT0gbm9yX2ZsYXNoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobm9yX2ZsYXNoX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGViX25vcl9zbWNfY29uZmlnID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAxLAorCS5ucmRfc2V0dXAJCT0gMSwKKwkubmNzX3dyaXRlX3NldHVwCT0gMSwKKwkubndlX3NldHVwCQk9IDEsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gNywKKwkubnJkX3B1bHNlCQk9IDcsCisJLm5jc193cml0ZV9wdWxzZQk9IDcsCisJLm53ZV9wdWxzZQkJPSA3LAorCisJLnJlYWRfY3ljbGUJCT0gOSwKKwkud3JpdGVfY3ljbGUJCT0gOSwKKworCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfV1JJVEUgfCBBVDkxX1NNQ19EQldfMzIsCisJLnRkZl9jeWNsZXMJCT0gMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlYl9hZGRfZGV2aWNlX25vcih2b2lkKQoreworCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCAwIChOT1IpICovCisJc2FtOV9zbWNfY29uZmlndXJlKDAsICZlYl9ub3Jfc21jX2NvbmZpZyk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZub3JfZmxhc2gpOworfQorCisvKgorICogTkFORCBmbGFzaAorICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gX19pbml0ZGF0YSBlYl9uYW5kX3BhcnRpdGlvbltdID0geworCXsKKwkJLm5hbWUJPSAiUGFydGl0aW9uIDEiLAorCQkub2Zmc2V0CT0gMCwKKwkJLnNpemUJPSBTWl8xNk0sCisJfSwKKwl7CisJCS5uYW1lCT0gIlBhcnRpdGlvbiAyIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX05YVEJMSywKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqIF9faW5pdCBuYW5kX3BhcnRpdGlvbnMoaW50IHNpemUsIGludCAqbnVtX3BhcnRpdGlvbnMpCit7CisJKm51bV9wYXJ0aXRpb25zID0gQVJSQVlfU0laRShlYl9uYW5kX3BhcnRpdGlvbik7CisJcmV0dXJuIGViX25hbmRfcGFydGl0aW9uOworfQorCitzdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBfX2luaXRkYXRhIGViX25hbmRfZGF0YSA9IHsKKwkuYWxlCQk9IDIyLAorCS5jbGUJCT0gMjEsCisvKgkuZGV0X3Bpbgk9IC4uLiBub3QgY29ubmVjdGVkICovCisvKgkucmR5X3Bpbgk9IEFUOTFfUElOX1BDMTYsICovCisJLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QQTE1LAorCS5wYXJ0aXRpb25faW5mbwk9IG5hbmRfcGFydGl0aW9ucywKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVDkxX0JVU1dJRFRIXzE2KQorCS5idXNfd2lkdGhfMTYJPSAxLAorI2Vsc2UKKwkuYnVzX3dpZHRoXzE2CT0gMCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBlYl9uYW5kX3NtY19jb25maWcgPSB7CisJLm5jc19yZWFkX3NldHVwCQk9IDAsCisJLm5yZF9zZXR1cAkJPSAwLAorCS5uY3Nfd3JpdGVfc2V0dXAJPSAxLAorCS5ud2Vfc2V0dXAJCT0gMSwKKworCS5uY3NfcmVhZF9wdWxzZQkJPSAzLAorCS5ucmRfcHVsc2UJCT0gMywKKwkubmNzX3dyaXRlX3B1bHNlCT0gMywKKwkubndlX3B1bHNlCQk9IDMsCisKKwkucmVhZF9jeWNsZQkJPSA1LAorCS53cml0ZV9jeWNsZQkJPSA1LAorCisJLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSwKKwkudGRmX2N5Y2xlcwkJPSAxMiwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlYl9hZGRfZGV2aWNlX25hbmQodm9pZCkKK3sKKwkvKiBzZXR1cCBidXMtd2lkdGggKDggb3IgMTYpICovCisJaWYgKGViX25hbmRfZGF0YS5idXNfd2lkdGhfMTYpCisJCWViX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV18xNjsKKwllbHNlCisJCWViX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV184OworCisJLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDMgKE5BTkQpICovCisJc2FtOV9zbWNfY29uZmlndXJlKDMsICZlYl9uYW5kX3NtY19jb25maWcpOworCisJYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmViX25hbmRfZGF0YSk7Cit9CisKKworLyoKKyAqIFNQSSBkZXZpY2VzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfSVJRMSwKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0lEX0lSUTEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGRzMTMwNV9wbGF0Zm9ybV9kYXRhIGRzMTMwNl9kYXRhID0geworCS5pc19kczEzMDYJPSB0cnVlLAorCS5lbl8xaHoJCT0gZmFsc2UsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGViX3NwaV9kZXZpY2VzW10gPSB7CisJewkvKiBSVEMgRGFsbGFzIERTMTMwNiAqLworCQkubW9kYWxpYXMJPSAicnRjLWRzMTMwNSIsCisJCS5jaGlwX3NlbGVjdAk9IDMsCisJCS5tb2RlCQk9IFNQSV9DU19ISUdIIHwgU1BJX0NQT0wgfCBTUElfQ1BIQSwKKwkJLm1heF9zcGVlZF9oegk9IDUwMDAwMCwKKwkJLmJ1c19udW0JPSAwLAorCQkuaXJxCQk9IEFUNTcyRDk0MEhGX0lEX0lSUTEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gKHZvaWQgKikgJmRzMTMwNl9kYXRhLAorCX0sCisjaWYgZGVmaW5lZChDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQpCisJewkvKiBEYXRhZmxhc2ggY2FyZCAqLworCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCisJCS5jaGlwX3NlbGVjdAk9IDAsCisJCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAorCQkuYnVzX251bQk9IDAsCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGViX2JvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBTZXJpYWwgKi8KKwlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7CisJLyogVVNCIEhvc3QgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWJfdXNiaF9kYXRhKTsKKwkvKiBVU0IgRGV2aWNlICovCisJYXQ5MV9hZGRfZGV2aWNlX3VkYygmZWJfdWRjX2RhdGEpOworCS8qIEkyQyAqLworCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7CisJLyogTk9SICovCisJZWJfYWRkX2RldmljZV9ub3IoKTsKKwkvKiBOQU5EICovCisJZWJfYWRkX2RldmljZV9uYW5kKCk7CisJLyogU1BJICovCisJYXQ5MV9hZGRfZGV2aWNlX3NwaShlYl9zcGlfZGV2aWNlcywgQVJSQVlfU0laRShlYl9zcGlfZGV2aWNlcykpOworCS8qIE1NQyAqLworCWF0OTFfYWRkX2RldmljZV9tbWMoMCwgJmViX21tY19kYXRhKTsKKwkvKiBFdGhlcm5ldCAqLworCWF0OTFfYWRkX2RldmljZV9ldGgoJmViX2V0aF9kYXRhKTsKKwkvKiBtQWdpYyAqLworCWF0OTFfYWRkX2RldmljZV9tQWdpYygpOworfQorCitNQUNISU5FX1NUQVJUKEFUNTcyRDk0MEhGRUIsICJBdG1lbCBBVDkxRDk0MEhGLUVCIikKKwkvKiBNYWludGFpbmVyOiBBdG1lbCA8Y29zdGEuYW50b25pb3JAZ21haWwuY29tPiAqLworCS5waHlzX2lvCT0gQVQ5MV9CQVNFX1NZUywKKwkuaW9fcGdfb2Zmc3QJPSAoQVQ5MV9WQV9CQVNFX1NZUyA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gQVQ5MV9TRFJBTV9CQVNFICsgMHgxMDAsCisJLnRpbWVyCQk9ICZhdDkxc2FtOTI2eF90aW1lciwKKwkubWFwX2lvCQk9IGViX21hcF9pbywKKwkuaW5pdF9pcnEJPSBlYl9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gZWJfYm9hcmRfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCmluZGV4IGMwNDJkY2YuLjdmN2RhNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAKIC8qCkBAIC02MjgsNyArNjI5LDcgQEAKIAkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfU0NFUiwgQVQ5MVJNOTIwMF9QTUNfTUNLVURQKTsKIAl9IGVsc2UgaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpIHx8IGNwdV9pc19hdDkxc2FtOTI2MSgpIHx8CiAJCSAgIGNwdV9pc19hdDkxc2FtOTI2MygpIHx8IGNwdV9pc19hdDkxc2FtOWcyMCgpIHx8Ci0JCSAgIGNwdV9pc19hdDkxc2FtOWcxMCgpKSB7CisJCSAgIGNwdV9pc19hdDkxc2FtOWcxMCgpIHx8IGNwdV9pc19hdDU3MmQ5NDBoZigpKSB7CiAJCXVocGNrLnBtY19tYXNrID0gQVQ5MVNBTTkyNnhfUE1DX1VIUDsKIAkJdWRwY2sucG1jX21hc2sgPSBBVDkxU0FNOTI2eF9QTUNfVURQOwogCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFjYXA5KCkpIHsKQEAgLTcxMSwxMiArNzEyLDEzIEBACiAJLyoKIAkgKiBVU0IgSFMgY2xvY2sgaW5pdAogCSAqLwotCWlmIChjcHVfaGFzX3V0bWkoKSkKKwlpZiAoY3B1X2hhc191dG1pKCkpIHsKIAkJLyoKIAkJICogbXVsdGlwbGllciBpcyBoYXJkLXdpcmVkIHRvIDQwCiAJCSAqIChvYnRhaW4gdGhlIFVTQiBIaWdoIFNwZWVkIDQ4MCBNSHogd2hlbiBpbnB1dCBpcyAxMiBNSHopCiAJCSAqLwogCQl1dG1pX2Nsay5yYXRlX2h6ID0gNDAgKiB1dG1pX2Nsay5wYXJlbnQtPnJhdGVfaHo7CisJfQogCiAJLyoKIAkgKiBVU0IgRlMgY2xvY2sgaW5pdApAQCAtNzQ2LDcgKzc0OCw3IEBACiAJCW1jay5yYXRlX2h6ID0gKG1ja3IgJiBBVDkxX1BNQ19NRElWKSA9PSBBVDkxU0FNOV9QTUNfTURJVl8zID8KIAkJCWZyZXEgLyAzIDogZnJlcSAvICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsJLyogbWRpdiAqLwogCX0gZWxzZSB7Ci0JCW1jay5yYXRlX2h6ID0gZnJlcSAvICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsgICAgICAvKiBtZGl2ICovCisJCW1jay5yYXRlX2h6ID0gZnJlcSAvICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsJCS8qIG1kaXYgKi8KIAl9CiAKIAkvKiBSZWdpc3RlciB0aGUgUE1DJ3Mgc3RhbmRhcmQgY2xvY2tzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCmluZGV4IDFiYTNiOTUuLjZjZjRiNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCkBAIC0yMiw3ICsyMiw3IEBACiAJc3RydWN0IGNsawkqcGFyZW50OwogCXUzMgkJcG1jX21hc2s7CiAJdm9pZAkJKCptb2RlKShzdHJ1Y3QgY2xrICosIGludCk7Ci0JdW5zaWduZWQJaWQ6MjsJCS8qIFBDSzAuLjMsIG9yIDMyay9tYWluL2EvYiAqLworCXVuc2lnbmVkCWlkOjM7CQkvKiBQQ0swLi40LCBvciAzMmsvbWFpbi9hL2IgKi8KIAl1bnNpZ25lZAl0eXBlOwkJLyogY2xvY2sgdHlwZSAqLwogCXUxNgkJdXNlcnM7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmgKaW5kZXggODhlNDEzYi4uNjVjM2RjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvZ2VuZXJpYy5oCkBAIC0xNyw2ICsxNyw3IEBACiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTF4NDBfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFjYXA5X2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKK2V4dGVybiB2b2lkIF9faW5pdCBhdDU3MmQ5NDBoZl9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jayk7CiAKICAvKiBJbnRlcnJ1cHRzICovCiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXJtOTIwMF9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W10pOwpAQCAtMjcsNiArMjgsNyBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFzYW05ZzQ1X2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXg0MF9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W10pOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFjYXA5X2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CitleHRlcm4gdm9pZCBfX2luaXQgYXQ1NzJkOTQwaGZfaW5pdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FpY19pbml0KHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKIAogIC8qIFRpbWVyICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0NTcyZDk0MGhmLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0NTcyZDk0MGhmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5YjBhZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ1NzJkOTQwaGYuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIGluY2x1ZGUvbWFjaC9hdDU3MmQ5NDBoZi5oCisgKgorICogQW50b25pbyBSLiBDb3N0YSA8Y29zdGEuYW50b25pb3JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEF0bWVsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIEFUNTcyRDk0MEhGX0gKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSAorCisvKgorICogUGVyaXBoZXJhbCBpZGVudGlmaWVycy9pbnRlcnJ1cHRzLgorICovCisjZGVmaW5lIEFUOTFfSURfRklRCQkwCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovCisjZGVmaW5lIEFUOTFfSURfU1lTCQkxCS8qIFN5c3RlbSBQZXJpcGhlcmFscyAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9QSU9BCTIJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1BJT0IJMwkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfUElPQwk0CS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQyAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9FTUFDCTUJLyogTUFDQiBldGhlcm5ldCBjb250cm9sbGVyICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1VTMAk2CS8qIFVTQVJUIDAgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfVVMxCTcJLyogVVNBUlQgMSAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9VUzIJOAkvKiBVU0FSVCAyICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX01DSQk5CS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfVURQCTEwCS8qIFVTQiBEZXZpY2UgUG9ydCAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9UV0kwCTExCS8qIFR3by1XaXJlIEludGVyZmFjZSAwICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1NQSTAJMTIJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDAgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfU1BJMQkxMwkvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMSAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9TU0MwCTE0CS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDAgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfU1NDMQkxNQkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAxICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1NTQzIJMTYJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMiAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9UQzAJMTcJLyogVGltZXIgQ291bnRlciAwICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1RDMQkxOAkvKiBUaW1lciBDb3VudGVyIDEgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfVEMyCTE5CS8qIFRpbWVyIENvdW50ZXIgMiAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9VSFAJMjAJLyogVVNCIEhvc3QgcG9ydCAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9TU0MzCTIxCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDMgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfVFdJMQkyMgkvKiBUd28tV2lyZSBJbnRlcmZhY2UgMSAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9DQU4wCTIzCS8qIENBTiBDb250cm9sbGVyIDAgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfQ0FOMQkyNAkvKiBDQU4gQ29udHJvbGxlciAxICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX01IQUxUCTI1CS8qIG1BZ2ljViBIQUxUIGxpbmUgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfTVNJUlEwCTI2CS8qIG1BZ2ljViBTSVJRMCBsaW5lICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX01FWEMJMjcJLyogbUFnaWNWIGV4Y2VwdGlvbiBsaW5lICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX01FRE1BCTI4CS8qIG1BZ2ljViBlbmQgb2YgRE1BIGxpbmUgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfSVJRMAkyOQkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgU291cmNlIChJUlEwKSAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9JUlExCTMwCS8qIEV4dGVybmFsIEludGVycnVwdCBTb3VyY2UgKElSUTEpICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX0lSUTIJMzEJLyogRXh0ZXJuYWwgSW50ZXJydXB0IFNvdXJjZSAoSVJRMikgKi8KKworCisvKgorICogVXNlciBQZXJpcGhlcmFsIHBoeXNpY2FsIGJhc2UgYWRkcmVzc2VzLgorICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfVENCCTB4ZmZmYTAwMDAKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfQkFTRV9UQzAJMHhmZmZhMDAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX1RDMQkweGZmZmEwMDQwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfVEMyCTB4ZmZmYTAwODAKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfQkFTRV9VRFAJMHhmZmZhNDAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX01DSQkweGZmZmE4MDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfVFdJMAkweGZmZmFjMDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfVVMwCTB4ZmZmYjAwMDAKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfQkFTRV9VUzEJMHhmZmZiNDAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX1VTMgkweGZmZmI4MDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfU1NDMAkweGZmZmJjMDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfU1NDMQkweGZmZmMwMDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfU1NDMgkweGZmZmM0MDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfU1BJMAkweGZmZmM4MDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfU1BJMQkweGZmZmNjMDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfU1NDMwkweGZmZmQwMDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfVFdJMQkweGZmZmQ0MDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfRU1BQwkweGZmZmQ4MDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfQ0FOMAkweGZmZmRjMDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfQ0FOMQkweGZmZmUwMDAwCisjZGVmaW5lIEFUOTFfQkFTRV9TWVMJCTB4ZmZmZmVhMDAKKworCisvKgorICogU3lzdGVtIFBlcmlwaGVyYWxzIChvZmZzZXQgZnJvbSBBVDkxX0JBU0VfU1lTKQorICovCisjZGVmaW5lIEFUOTFfU0RSQU1DCSgweGZmZmZlYTAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9TTUMJKDB4ZmZmZmVjMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX01BVFJJWAkoMHhmZmZmZWUwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfQUlDCSgweGZmZmZmMDAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9EQkdVCSgweGZmZmZmMjAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9BCSgweGZmZmZmNDAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9CCSgweGZmZmZmNjAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9DCSgweGZmZmZmODAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QTUMJKDB4ZmZmZmZjMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1JTVEMJKDB4ZmZmZmZkMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1JUVAkoMHhmZmZmZmQyMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfUElUCSgweGZmZmZmZDMwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9XRFQJKDB4ZmZmZmZkNDAgLSBBVDkxX0JBU0VfU1lTKQorCisjZGVmaW5lIEFUOTFfVVNBUlQwCUFUNTcyRDk0MEhGX0lEX1VTMAorI2RlZmluZSBBVDkxX1VTQVJUMQlBVDU3MkQ5NDBIRl9JRF9VUzEKKyNkZWZpbmUgQVQ5MV9VU0FSVDIJQVQ1NzJEOTQwSEZfSURfVVMyCisKKworLyoKKyAqIEludGVybmFsIE1lbW9yeS4KKyAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9TUkFNX0JBU0UJMHgwMDMwMDAwMAkvKiBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9TUkFNX1NJWkUJKDQ4ICogU1pfMUspCS8qIEludGVybmFsIFNSQU0gc2l6ZSAoNDhLYikgKi8KKworI2RlZmluZSBBVDU3MkQ5NDBIRl9ST01fQkFTRQkweDAwNDAwMDAwCS8qIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfUk9NX1NJWkUJU1pfMzJLCQkvKiBJbnRlcm5hbCBST00gc2l6ZSAoMzJLYikgKi8KKworI2RlZmluZSBBVDU3MkQ5NDBIRl9VSFBfQkFTRQkweDAwNTAwMDAwCS8qIFVTQiBIb3N0IGNvbnRyb2xsZXIgKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ1NzJkOTQwaGZfbWF0cml4LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0NTcyZDk0MGhmX21hdHJpeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NzUxZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0NTcyZDk0MGhmX21hdHJpeC5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogaW5jbHVkZS9tYWNoLy9hdDU3MmQ5NDBoZl9tYXRyaXguaAorICoKKyAqIEFudG9uaW8gUi4gQ29zdGEgPGNvc3RhLmFudG9uaW9yQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBdG1lbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgQVQ1NzJEOTQwSEZfTUFUUklYX0gKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfTUFUUklYX0gKKworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHMAkoQVQ5MV9NQVRSSVggKyAweDAwKQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkcxCShBVDkxX01BVFJJWCArIDB4MDQpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzIJKEFUOTFfTUFUUklYICsgMHgwOCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHMwkoQVQ5MV9NQVRSSVggKyAweDBDKQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAzICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkc0CShBVDkxX01BVFJJWCArIDB4MTApCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzUJKEFUOTFfTUFUUklYICsgMHgxNCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNSAqLworCisjZGVmaW5lCQlBVDkxX01BVFJJWF9VTEJUCSg3IDw8IDApCS8qIFVuZGVmaW5lZCBMZW5ndGggQnVyc3QgVHlwZSAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX1VMQlRfSU5GSU5JVEUJKDAgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX1NJTkdMRQkJKDEgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX0ZPVVIJCSgyIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9FSUdIVAkJKDMgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX1NJWFRFRU4JKDQgPDwgMCkKKworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHMAkoQVQ5MV9NQVRSSVggKyAweDQwKQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzEJKEFUOTFfTUFUUklYICsgMHg0NCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkcyCShBVDkxX01BVFJJWCArIDB4NDgpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHMwkoQVQ5MV9NQVRSSVggKyAweDRDKQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzQJKEFUOTFfTUFUUklYICsgMHg1MCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA0ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9TTE9UX0NZQ0xFCQkoMHhmZiA8PCAwKQkvKiBNYXhpbXVtIE51bWJlciBvZiBBbGxvd2VkIEN5Y2xlcyBmb3IgYSBCdXJzdCAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFCSgzICAgIDw8IDE2KQkvKiBEZWZhdWx0IE1hc3RlciBUeXBlICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX05PTkUJKDAgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX0xBU1QJKDEgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX0ZJWEVECSgyIDw8IDE2KQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfRklYRURfREVGTVNUUgkoMHg3ICA8PCAxOCkJLyogRml4ZWQgSW5kZXggb2YgRGVmYXVsdCBNYXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX0FSQlQJCSgzICAgIDw8IDI0KQkvKiBBcmJpdHJhdGlvbiBUeXBlICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQVJCVF9ST1VORF9ST0JJTgkoMCA8PCAyNCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9BUkJUX0ZJWEVEX1BSSU9SSVRZCSgxIDw8IDI0KQorCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQVMwCShBVDkxX01BVFJJWCArIDB4ODApCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDAgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzEJKEFUOTFfTUFUUklYICsgMHg4OCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgMSAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTMgkoQVQ5MV9NQVRSSVggKyAweDkwKQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSAyICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQVMzCShBVDkxX01BVFJJWCArIDB4OTgpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDMgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzQJKEFUOTFfTUFUUklYICsgMHhBMCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgNCAqLworCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NMFBSCQkoMyA8PCAwKQkvKiBNYXN0ZXIgMCBQcmlvcml0eSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTFQUgkJKDMgPDwgNCkJLyogTWFzdGVyIDEgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX00yUFIJCSgzIDw8IDgpCS8qIE1hc3RlciAyIFByaW9yaXR5ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NM1BSCQkoMyA8PCAxMikJLyogTWFzdGVyIDMgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX000UFIJCSgzIDw8IDE2KQkvKiBNYXN0ZXIgNCBQcmlvcml0eSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTVQUgkJKDMgPDwgMjApCS8qIE1hc3RlciA1IFByaW9yaXR5ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NNlBSCQkoMyA8PCAyNCkJLyogTWFzdGVyIDYgUHJpb3JpdHkgKi8KKworI2RlZmluZSBBVDkxX01BVFJJWF9NUkNSCShBVDkxX01BVFJJWCArIDB4MTAwKQkvKiBNYXN0ZXIgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMAkJKDEgPDwgMCkJLyogUmVtYXAgQ29tbWFuZCBmb3IgQUhCIE1hc3RlciAwIChBUk05MjZFSi1TIEluc3RydWN0aW9uIE1hc3RlcikgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjEJCSgxIDw8IDEpCS8qIFJlbWFwIENvbW1hbmQgZm9yIEFIQiBNYXN0ZXIgMSAoQVJNOTI2RUotUyBEYXRhIE1hc3RlcikgKi8KKworI2RlZmluZSBBVDkxX01BVFJJWF9TRlIwCShBVDkxX01BVFJJWCArIDB4MTEwKQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMQkoQVQ5MV9NQVRSSVggKyAweDExNCkJLyogU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NGUjIJKEFUOTFfTUFUUklYICsgMHgxMTgpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TRlIzCShBVDkxX01BVFJJWCArIDB4MTFDKQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSNAkoQVQ5MV9NQVRSSVggKyAweDEyMCkJLyogU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlciA0ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NGUjUJKEFUOTFfTUFUUklYICsgMHgxMjQpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgNSAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TRlI2CShBVDkxX01BVFJJWCArIDB4MTI4KQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDYgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSNwkoQVQ5MV9NQVRSSVggKyAweDEyQykJLyogU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlciA3ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NGUjgJKEFUOTFfTUFUUklYICsgMHgxMzApCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgOCAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TRlI5CShBVDkxX01BVFJJWCArIDB4MTM0KQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDkgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMTAJKEFUOTFfTUFUUklYICsgMHgxMzgpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgMTAgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMTEJKEFUOTFfTUFUUklYICsgMHgxM0MpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgMTEgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMTIJKEFUOTFfTUFUUklYICsgMHgxNDApCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgMTIgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMTMJKEFUOTFfTUFUUklYICsgMHgxNDQpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgMTMgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMTQJKEFUOTFfTUFUUklYICsgMHgxNDgpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgMTQgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMTUJKEFUOTFfTUFUUklYICsgMHgxNEMpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgMTUgKi8KKworCisvKgorICogVGhlIGZvbGxvd2luZyByZWdpc3RlcnMgLyBiaXRzIGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgRGF0YXNoZWV0IChSZXZpc2lvbiBBKQorICovCisKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfVENSCQkoQVQ5MV9NQVRSSVggKyAweDEwMCkJLyogVENNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX0lUQ01fU0laRQkJKDB4ZiA8PCAwKQkvKiBTaXplIG9mIElUQ00gZW5hYmxlZCBtZW1vcnkgYmxvY2sgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9JVENNXzAJCSgwIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfSVRDTV8xNgkJKDUgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9JVENNXzMyCQkoNiA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0lUQ01fNjQJCSg3IDw8IDApCisjZGVmaW5lCQlBVDkxX01BVFJJWF9EVENNX1NJWkUJCSgweGYgPDwgNCkJLyogU2l6ZSBvZiBEVENNIGVuYWJsZWQgbWVtb3J5IGJsb2NrICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV8wCQkoMCA8PCA0KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0RUQ01fMTYJCSg1IDw8IDQpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV8zMgkJKDYgPDwgNCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9EVENNXzY0CQkoNyA8PCA0KQorCisjZGVmaW5lIEFUOTFfTUFUUklYX0VCSUNTQQkoQVQ5MV9NQVRSSVggKyAweDExQykJLyogRUJJIENoaXAgU2VsZWN0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX0NTMUEJCSgxIDw8IDEpCS8qIENoaXAgU2VsZWN0IDEgQXNzaWdubWVudCAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTMUFfU01DCQkoMCA8PCAxKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTMUFfU0RSQU1DCQkoMSA8PCAxKQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfQ1MzQQkJKDEgPDwgMykJLyogQ2hpcCBTZWxlY3QgMyBBc3NpZ25tZW50ICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1MzQV9TTUMJCSgwIDw8IDMpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1MzQV9TTUNfU01BUlRNRURJQQkoMSA8PCAzKQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfQ1M0QQkJKDEgPDwgNCkJLyogQ2hpcCBTZWxlY3QgNCBBc3NpZ25tZW50ICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1M0QV9TTUMJCSgwIDw8IDQpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1M0QV9TTUNfQ0YxCSgxIDw8IDQpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9DUzVBCQkoMSA8PCA1KQkvKiBDaGlwIFNlbGVjdCA1IEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzVBX1NNQwkJKDAgPDwgNSkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzVBX1NNQ19DRjIJKDEgPDwgNSkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0RCUFVDCQkoMSA8PCA4KQkvKiBEYXRhIEJ1cyBQdWxsLXVwIENvbmZpZ3VyYXRpb24gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfcG1jLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfcG1jLmgKaW5kZXggNjQ1ODllYS4uZTQ2ZjkzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX3BtYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9wbWMuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZQkJQVQ5MV9QTUNfUENLMQkJKDEgPDwgIDkpCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMSAqLwogI2RlZmluZQkJQVQ5MV9QTUNfUENLMgkJKDEgPDwgMTApCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMiAqLwogI2RlZmluZQkJQVQ5MV9QTUNfUENLMwkJKDEgPDwgMTEpCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMyAqLworI2RlZmluZQkJQVQ5MV9QTUNfUENLNAkJKDEgPDwgMTIpCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgNCBbQVQ1NzJEOTQwSEYgb25seV0gKi8KICNkZWZpbmUJCUFUOTFfUE1DX0hDSzAJCSgxIDw8IDE2KQkJLyogQUhCIENsb2NrIChVU0IgaG9zdCkgW0FUOTFTQU05MjYxIG9ubHldICovCiAjZGVmaW5lCQlBVDkxX1BNQ19IQ0sxCQkoMSA8PCAxNykJCS8qIEFIQiBDbG9jayAoTENEKSBbQVQ5MVNBTTkyNjEgb25seV0gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oCmluZGV4IGJiNmY2YTcuLmNlYWVjNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYm9hcmQuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2JvYXJkLmgKQEAgLTg3LDcgKzg3LDcgQEAKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfZXRoKHN0cnVjdCBhdDkxX2V0aF9kYXRhICpkYXRhKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHMjApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MUNBUDkpIFwKLQl8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05RzQ1KQorCXx8IGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ1NzJEOTQwSEYpCiAjZGVmaW5lIGV0aF9wbGF0Zm9ybV9kYXRhCWF0OTFfZXRoX2RhdGEKICNlbmRpZgogCkBAIC0yMDUsNiArMjA1LDkgQEAKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2dwaW9fbGVkcyhzdHJ1Y3QgZ3Bpb19sZWQgKmxlZHMsIGludCBucik7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9wd21fbGVkcyhzdHJ1Y3QgZ3Bpb19sZWQgKmxlZHMsIGludCBucik7CiAKKyAvKiBBVDU3MkQ5NDBIRiBEU1AgKi8KK2V4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbUFnaWModm9pZCk7CisKIC8qIEZJWE1FOiB0aGlzIG5lZWRzIGEgYmV0dGVyIGxvY2F0aW9uLCBidXQgZ2V0cyBzdHVmZiBidWlsZGluZyBhZ2FpbiAqLwogZXh0ZXJuIGludCBhdDkxX3N1c3BlbmRfZW50ZXJpbmdfc2xvd19jbG9jayh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKaW5kZXggYzIyZGYzMC4uNWEwNjUwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCkBAIC0zMyw2ICszMyw4IEBACiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlYRTI1NgkweDMyOWE5M2EwCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlYRTUxMgkweDMyOWFhM2EwCiAKKyNkZWZpbmUgQVJDSF9JRF9BVDU3MkQ5NDBIRgkweDBlMDMwM2UwCisKICNkZWZpbmUgQVJDSF9JRF9BVDkxTTQwODAwCTB4MTQwODAwNDQKICNkZWZpbmUgQVJDSF9JRF9BVDkxUjQwODA3CTB4NDQwODA3NDYKICNkZWZpbmUgQVJDSF9JRF9BVDkxTTQwODA3CTB4MTQwODA3NDUKQEAgLTE0MSw2ICsxNDMsMTIgQEAKICNkZWZpbmUgY3B1X2lzX2F0OTFjYXA5X3JldkMoKQkoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfQVQ1NzJEOTQwSEYKKyNkZWZpbmUgY3B1X2lzX2F0NTcyZDk0MGhmKCkgKGF0OTFfY3B1X2lkZW50aWZ5KCkgPT0gQVJDSF9JRF9BVDU3MkQ5NDBIRikKKyNlbHNlCisjZGVmaW5lIGNwdV9pc19hdDU3MmQ5NDBoZigpICgwKQorI2VuZGlmCisKIC8qCiAgKiBTaW5jZSB0aGlzIGlzIEFSTSwgd2Ugd2lsbCBuZXZlciBydW4gb24gYW55IEFWUjMyIENQVS4gQnV0IHRoZXNlCiAgKiBkZWZpbml0aW9ucyBtYXkgcmVkdWNlIGNsdXR0ZXIgaW4gY29tbW9uIGRyaXZlcnMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggMjkwNTJiYS4uOWU3NTBhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFfZGJndS5oPgogCi0JLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAl0c3QJXHJ4LCAjMQkJCQkJCUAgTU1VIGVuYWJsZWQ/CiAJbGRyZXEJXHJ4LCA9KEFUOTFfQkFTRV9TWVMgKyBBVDkxX0RCR1UpCQlAIFN5c3RlbSBwZXJpcGhlcmFscyAocGh5cyBhZGRyZXNzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IGEwZGY4YjAuLjNkNjRhNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlIDxtYWNoL2F0OTFjYXA5Lmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFYNDApCiAjaW5jbHVkZSA8bWFjaC9hdDkxeDQwLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUNTcyRDk0MEhGKQorI2luY2x1ZGUgPG1hY2gvYXQ1NzJkOTQwaGYuaD4KICNlbHNlCiAjZXJyb3IgIlVuc3VwcG9ydGVkIEFUOTEgcHJvY2Vzc29yIgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL3RpbWV4LmgKaW5kZXggMzFhYzJkOS4uMDVhNmU4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC90aW1leC5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtODIsNiArODIsMTEgQEAKICNkZWZpbmUgQVQ5MVg0MF9NQVNURVJfQ0xPQ0sJNDAwMDAwMDAKICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkoQVQ5MVg0MF9NQVNURVJfQ0xPQ0spCiAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ1NzJEOTQwSEYpCisKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfTUFTVEVSX0NMT0NLCTgwMDAwMDAwCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKEFUNTcyRDk0MEhGX01BU1RFUl9DTE9DSy8xNikKKwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKaW5kZXggZTU5MGJiZS4uNzJlNDA1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY29yZS5jCkBAIC0xNDIsOCArMTQyLDcgQEAKIAogCWNoaXBjSHdfYnVzSW50ZXJmYWNlQ2xvY2tFbmFibGUoYnVzX2Nsb2NrKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKIAkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggNjRiYWY5Zi4uZmVkZDgwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMyw3ICsxMyw3IEBACiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xwczcxMTEuaD4KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjQ0xQUzcxMTFfUEhZU19CQVNFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jCmluZGV4IDM2ZTcyMTMuLjNkYzBhODggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jCkBAIC0xMjYsNyArMTI2LDYgQEAKIAkubHBzYyA9IERBVklOQ0lfTFBTQ19WUFNTU0xWLAogfTsKIAotCiBzdGF0aWMgc3RydWN0IGNsayBjbGtvdXQxX2NsayA9IHsKIAkubmFtZSA9ICJjbGtvdXQxIiwKIAkucGFyZW50ID0gJnBsbDFfYXV4X2NsaywKQEAgLTY3NCw2ICs2NzMsMTcgQEAKIAkucmVzb3VyY2UJPSBkbTM1NV9hc3AxX3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyB2b2lkIGRtMzU1X2NjZGNfc2V0dXBfcGlubXV4KHZvaWQpCit7CisJZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9QQ0xLKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NBTV9XRU4pOworCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0FNX1ZEKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NBTV9IRCk7CisJZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9ZSU5fRU4pOworCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0lOTF9FTik7CisJZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DSU5IX0VOKTsKK30KKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTM1NV92cHNzX3Jlc291cmNlc1tdID0gewogCXsKIAkJLyogVlBTUyBCTCBCYXNlIGFkZHJlc3MgKi8KQEAgLTcxMCw2ICs3MjAsMTAgQEAKIAkJLmVuZCAgICAgICAgICAgID0gSVJRX1ZESU5UMSwKIAkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKK307CisKK3N0YXRpYyB1NjQgdnBmZV9jYXB0dXJlX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG0zNTVfY2NkY19yZXNvdXJjZVtdID0gewogCS8qIENDREMgQmFzZSBhZGRyZXNzICovCiAJewogCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX01FTSwKQEAgLTcxNyw4ICs3MzEsMTggQEAKIAkJLmVuZCAgICAgICAgICAgID0gMHgwMWM3MDYwMCArIDB4MWZmLAogCX0sCiB9Oworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG0zNTVfY2NkY19kZXYgPSB7CisJLm5hbWUgICAgICAgICAgID0gImRtMzU1X2NjZGMiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoZG0zNTVfY2NkY19yZXNvdXJjZSksCisJLnJlc291cmNlICAgICAgID0gZG0zNTVfY2NkY19yZXNvdXJjZSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sgICAgICAgICAgICAgICA9ICZ2cGZlX2NhcHR1cmVfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayAgICAgID0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gZG0zNTVfY2NkY19zZXR1cF9waW5tdXgsCisJfSwKK307CiAKLXN0YXRpYyB1NjQgdnBmZV9jYXB0dXJlX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZwZmVfY2FwdHVyZV9kZXYgPSB7CiAJLm5hbWUJCT0gQ0FQVFVSRV9EUlZfTkFNRSwKIAkuaWQJCT0gLTEsCkBAIC04NjYsMjAgKzg5MCwxMyBAQAogCWlmICghY3B1X2lzX2RhdmluY2lfZG0zNTUoKSkKIAkJcmV0dXJuIDA7CiAKKwkvKiBBZGQgY2NkYyBjbG9jayBhbGlhc2VzICovCisJY2xrX2FkZF9hbGlhcygibWFzdGVyIiwgZG0zNTVfY2NkY19kZXYubmFtZSwgInZwc3NfbWFzdGVyIiwgTlVMTCk7CisJY2xrX2FkZF9hbGlhcygic2xhdmUiLCBkbTM1NV9jY2RjX2Rldi5uYW1lLCAidnBzc19tYXN0ZXIiLCBOVUxMKTsKIAlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfSU5UX0VETUFfQ0MpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG0zNTVfZWRtYV9kZXZpY2UpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG0zNTVfdnBzc19kZXZpY2UpOwotCS8qCi0JICogc2V0dXAgTXV4IGNvbmZpZ3VyYXRpb24gZm9yIHZwZmUgaW5wdXQgYW5kIHJlZ2lzdGVyCi0JICogdnBmZSBjYXB0dXJlIHBsYXRmb3JtIGRldmljZQotCSAqLwotCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fUENMSyk7Ci0JZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DQU1fV0VOKTsKLQlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NBTV9WRCk7Ci0JZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DQU1fSEQpOwotCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fWUlOX0VOKTsKLQlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NJTkxfRU4pOwotCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0lOSF9FTik7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTM1NV9jY2RjX2Rldik7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2cGZlX2NhcHR1cmVfZGV2KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ0eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ0eC5jCmluZGV4IGE3YjU3MjMuLjJmMmFlOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NHguYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDR4LmMKQEAgLTYwMiw2ICs2MDIsMTEgQEAKIAkJLmVuZCAgICAgICAgICAgID0gSVJRX1ZESU5UMSwKIAkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKK307CisKK3N0YXRpYyB1NjQgdnBmZV9jYXB0dXJlX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG02NDR4X2NjZGNfcmVzb3VyY2VbXSA9IHsKKwkvKiBDQ0RDIEJhc2UgYWRkcmVzcyAqLwogCXsKIAkJLnN0YXJ0ICAgICAgICAgID0gMHgwMWM3MDQwMCwKIAkJLmVuZCAgICAgICAgICAgID0gMHgwMWM3MDQwMCArIDB4ZmYsCkBAIC02MDksNyArNjE0LDE3IEBACiAJfSwKIH07CiAKLXN0YXRpYyB1NjQgdnBmZV9jYXB0dXJlX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtNjQ0eF9jY2RjX2RldiA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiZG02NDR4X2NjZGMiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoZG02NDR4X2NjZGNfcmVzb3VyY2UpLAorCS5yZXNvdXJjZSAgICAgICA9IGRtNjQ0eF9jY2RjX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayAgICAgICAgICAgICAgID0gJnZwZmVfY2FwdHVyZV9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrICAgICAgPSBETUFfQklUX01BU0soMzIpLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2cGZlX2NhcHR1cmVfZGV2ID0gewogCS5uYW1lCQk9IENBUFRVUkVfRFJWX05BTUUsCiAJLmlkCQk9IC0xLApAQCAtNzU5LDkgKzc3NCwxMyBAQAogCWlmICghY3B1X2lzX2RhdmluY2lfZG02NDR4KCkpCiAJCXJldHVybiAwOwogCisJLyogQWRkIGNjZGMgY2xvY2sgYWxpYXNlcyAqLworCWNsa19hZGRfYWxpYXMoIm1hc3RlciIsIGRtNjQ0eF9jY2RjX2Rldi5uYW1lLCAidnBzc19tYXN0ZXIiLCBOVUxMKTsKKwljbGtfYWRkX2FsaWFzKCJzbGF2ZSIsIGRtNjQ0eF9jY2RjX2Rldi5uYW1lLCAidnBzc19zbGF2ZSIsIE5VTEwpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG02NDR4X2VkbWFfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtNjQ0eF9lbWFjX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTY0NHhfdnBzc19kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG02NDR4X2NjZGNfZGV2KTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZwZmVfY2FwdHVyZV9kZXYpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggMTdhYjUyMy4uM2NkOTNhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KICNkZWZpbmUgVUFSVF9TSElGVAkyCiAKLQkJLm1hY3JvIGFkZHJ1YXJ0LCByeAorCQkubWFjcm8gYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICMweDAxMDAwMDAwCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggNDFjODkzOC4uYzQ1YmExZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMjcsNyArMjcsNyBAQAogLyoKICAqIEkvTyBtYXBwaW5nCiAgKi8KLSNkZWZpbmUgSU9fUEhZUwkJCQkweDAxYzAwMDAwCisjZGVmaW5lIElPX1BIWVMJCQkJMHgwMWMwMDAwMFVMCiAjZGVmaW5lIElPX09GRlNFVAkJCTB4ZmQwMDAwMDAgLyogVmlydHVhbCBJTyA9IDB4ZmVjMDAwMDAgKi8KICNkZWZpbmUgSU9fU0laRQkJCQkweDAwNDAwMDAwCiAjZGVmaW5lIElPX1ZJUlQJCQkJKElPX1BIWVMgKyBJT19PRkZTRVQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW8uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pby5jCmluZGV4IDQ5OTEyYjQuLmExYzBiNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pby5jCkBAIC0yNCw3ICsyNCw3IEBACiAJaWYgKEJFVFdFRU4ocCwgSU9fUEhZUywgSU9fU0laRSkpCiAJCXJldHVybiBYTEFURShwLCBJT19QSFlTLCBJT19WSVJUKTsKIAotCXJldHVybiBfX2FybV9pb3JlbWFwKHAsIHNpemUsIHR5cGUpOworCXJldHVybiBfX2FybV9pb3JlbWFwX2NhbGxlcihwLCBzaXplLCB0eXBlLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTChkYXZpbmNpX2lvcmVtYXApOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggOWI4OWVjNy4uMTUyMWQxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtZG92ZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtOCw3ICs4LDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvYnJpZGdlLXJlZ3MuaD4KIAotCS5tYWNybwlhZGRydWFydCxyeAorCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJdHN0CVxyeCwgIzEJCQkJCUAgTU1VIGVuYWJsZWQ/CiAJbGRyZXEJXHJ4LCA9RE9WRV9TQl9SRUdTX1BIWVNfQkFTRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCA4YjJjOTc0Li5hMjg3OTJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMiw0ICsyLDQgQEAKICAqIGFyY2gvYXJtL21hY2gtZG92ZS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCiAgKi8KIAotI2RlZmluZSBWTUFMTE9DX0VORAkweGZkODAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmQ4MDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDFkZGU4MjIuLmViYmQ4OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqCiAqKi8KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1vdglccngsICMweGYwMDAwMDAwCiAJCW9ycglccngsIFxyeCwgIzB4MDAwMDBiZTAKIAkJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnCmluZGV4IDkxNjdjM2QuLjNhMDhiMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZwpAQCAtMTYxLDYgKzE2MSwyMCBAQAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCiAJICBDb250ZWMgTWljcm85LVNsaW0gYm9hcmQuCiAKK2NvbmZpZyBNQUNIX1NJTV9PTkUKKyAgICAgICAgYm9vbCAiU3VwcG9ydCBTaW1wbGVtYWNoaW5lcyBTaW0uT25lIGJvYXJkIgorICAgICAgICBkZXBlbmRzIG9uIEVQOTNYWF9TRENFMF9QSFlTX09GRlNFVAorICAgICAgICBoZWxwCisgICAgICAgICAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisgICAgICAgICAgU2ltcGxlbWFjaGluZXMgU2ltLk9uZSBib2FyZC4KKworY29uZmlnIE1BQ0hfU05BUFBFUl9DTDE1CisJYm9vbCAiU3VwcG9ydCBCbHVld2F0ZXIgU3lzdGVtcyBTbmFwcGVyIENMMTUgTW9kdWxlIgorCWRlcGVuZHMgb24gRVA5M1hYX1NEQ0UwX1BIWVNfT0ZGU0VUCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIEJsdWV3YXRlcgorCSAgU3lzdGVtcyBTbmFwcGVyIENMMTUgTW9kdWxlLgorCiBjb25maWcgTUFDSF9UUzcyWFgKIAlib29sICJTdXBwb3J0IFRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzJ4eCBTQkMiCiAJZGVwZW5kcyBvbiBFUDkzWFhfU0RDRTNfU1lOQ19QSFlTX09GRlNFVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZQppbmRleCBlYWU2MTk5Li4zM2VlMmM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZQpAQCAtMTAsNCArMTAsNiBAQAogb2JqLSQoQ09ORklHX01BQ0hfRURCOTNYWCkJKz0gZWRiOTN4eC5vCiBvYmotJChDT05GSUdfTUFDSF9HRVNCQzkzMTIpCSs9IGdlc2JjOTMxMi5vCiBvYmotJChDT05GSUdfTUFDSF9NSUNSTzkpCSs9IG1pY3JvOS5vCitvYmotJChDT05GSUdfTUFDSF9TSU1fT05FKQkrPSBzaW1vbmUubworb2JqLSQoQ09ORklHX01BQ0hfU05BUFBFUl9DTDE1KQkrPSBzbmFwcGVyY2wxNS5vCiBvYmotJChDT05GSUdfTUFDSF9UUzcyWFgpCSs9IHRzNzJ4eC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYwppbmRleCAxZDBmOWQ4Li41ZjgwMDkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKQEAgLTEwLDYgKzEwLDggQEAKICAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpICJlcDkzeHggIiBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC00NDUsMzcgKzQ0NywzOSBAQAogc3RhdGljIGludCBfX2luaXQgZXA5M3h4X2Nsb2NrX2luaXQodm9pZCkKIHsKIAl1MzIgdmFsdWU7Ci0JaW50IGk7CiAKLQl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fQ0xPQ0tfU0VUMSk7Ci0JaWYgKCEodmFsdWUgJiAweDAwODAwMDAwKSkgewkJCS8qIFBMTDEgYnlwYXNzZWQ/ICAqLworCS8qIERldGVybWluZSB0aGUgYm9vdGxvYWRlciBjb25maWd1cmVkIHBsbDEgcmF0ZSAqLworCXZhbHVlID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9DTEtTRVQxKTsKKwlpZiAoISh2YWx1ZSAmIEVQOTNYWF9TWVNDT05fQ0xLU0VUMV9OQllQMSkpCiAJCWNsa19wbGwxLnJhdGUgPSBjbGtfeHRhbGkucmF0ZTsKLQl9IGVsc2UgeworCWVsc2UKIAkJY2xrX3BsbDEucmF0ZSA9IGNhbGNfcGxsX3JhdGUodmFsdWUpOwotCX0KKworCS8qIEluaXRpYWxpemUgdGhlIHBsbDEgZGVyaXZlZCBjbG9ja3MgKi8KIAljbGtfZi5yYXRlID0gY2xrX3BsbDEucmF0ZSAvIGZjbGtfZGl2aXNvcnNbKHZhbHVlID4+IDI1KSAmIDB4N107CiAJY2xrX2gucmF0ZSA9IGNsa19wbGwxLnJhdGUgLyBoY2xrX2Rpdmlzb3JzWyh2YWx1ZSA+PiAyMCkgJiAweDddOwogCWNsa19wLnJhdGUgPSBjbGtfaC5yYXRlIC8gcGNsa19kaXZpc29yc1sodmFsdWUgPj4gMTgpICYgMHgzXTsKIAllcDkzeHhfZG1hX2Nsb2NrX2luaXQoKTsKIAotCXZhbHVlID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9DTE9DS19TRVQyKTsKLQlpZiAoISh2YWx1ZSAmIDB4MDAwODAwMDApKSB7CQkJLyogUExMMiBieXBhc3NlZD8gICovCisJLyogRGV0ZXJtaW5lIHRoZSBib290bG9hZGVyIGNvbmZpZ3VyZWQgcGxsMiByYXRlICovCisJdmFsdWUgPSBfX3Jhd19yZWFkbChFUDkzWFhfU1lTQ09OX0NMS1NFVDIpOworCWlmICghKHZhbHVlICYgRVA5M1hYX1NZU0NPTl9DTEtTRVQyX05CWVAyKSkKIAkJY2xrX3BsbDIucmF0ZSA9IGNsa194dGFsaS5yYXRlOwotCX0gZWxzZSBpZiAodmFsdWUgJiAweDAwMDQwMDAwKSB7CQkvKiBQTEwyIGVuYWJsZWQ/ICAqLworCWVsc2UgaWYgKHZhbHVlICYgRVA5M1hYX1NZU0NPTl9DTEtTRVQyX1BMTDJfRU4pCiAJCWNsa19wbGwyLnJhdGUgPSBjYWxjX3BsbF9yYXRlKHZhbHVlKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJY2xrX3BsbDIucmF0ZSA9IDA7Ci0JfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgcGxsMiBkZXJpdmVkIGNsb2NrcyAqLwogCWNsa191c2JfaG9zdC5yYXRlID0gY2xrX3BsbDIucmF0ZSAvICgoKHZhbHVlID4+IDI4KSAmIDB4ZikgKyAxKTsKIAotCXByaW50ayhLRVJOX0lORk8gImVwOTN4eDogUExMMSBydW5uaW5nIGF0ICVsZCBNSHosIFBMTDIgYXQgJWxkIE1IelxuIiwKKwlwcl9pbmZvKCJQTEwxIHJ1bm5pbmcgYXQgJWxkIE1IeiwgUExMMiBhdCAlbGQgTUh6XG4iLAogCQljbGtfcGxsMS5yYXRlIC8gMTAwMDAwMCwgY2xrX3BsbDIucmF0ZSAvIDEwMDAwMDApOwotCXByaW50ayhLRVJOX0lORk8gImVwOTN4eDogRkNMSyAlbGQgTUh6LCBIQ0xLICVsZCBNSHosIFBDTEsgJWxkIE1IelxuIiwKKwlwcl9pbmZvKCJGQ0xLICVsZCBNSHosIEhDTEsgJWxkIE1IeiwgUENMSyAlbGQgTUh6XG4iLAogCQljbGtfZi5yYXRlIC8gMTAwMDAwMCwgY2xrX2gucmF0ZSAvIDEwMDAwMDAsCiAJCWNsa19wLnJhdGUgLyAxMDAwMDAwKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNsb2Nrcyk7IGkrKykKLQkJY2xrZGV2X2FkZCgmY2xvY2tzW2ldKTsKKwljbGtkZXZfYWRkX3RhYmxlKGNsb2NrcywgQVJSQVlfU0laRShjbG9ja3MpKTsKIAlyZXR1cm4gMDsKIH0KIGFyY2hfaW5pdGNhbGwoZXA5M3h4X2Nsb2NrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCmluZGV4IDFmMGQ2NjUuLjkwZmI1OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKQEAgLTE0LDEyICsxNCwxNSBAQAogICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgImVwOTN4eCAiIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KQEAgLTM1LDcgKzM4LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS92aWMuaD4KIApAQCAtODIsMTMgKzg0LDQwIEBACiAgKiB0byB1c2UgdGhpcyB0aW1lciBmb3Igc29tZXRoaW5nIGVsc2UuICBXZSBhbHNvIHVzZSB0aW1lciA0IGZvciBrZWVwaW5nCiAgKiB0cmFjayBvZiBsb3N0IGppZmZpZXMuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbGFzdF9qaWZmeV90aW1lOworI2RlZmluZSBFUDkzWFhfVElNRVJfUkVHKHgpCQkoRVA5M1hYX1RJTUVSX0JBU0UgKyAoeCkpCisjZGVmaW5lIEVQOTNYWF9USU1FUjFfTE9BRAkJRVA5M1hYX1RJTUVSX1JFRygweDAwKQorI2RlZmluZSBFUDkzWFhfVElNRVIxX1ZBTFVFCQlFUDkzWFhfVElNRVJfUkVHKDB4MDQpCisjZGVmaW5lIEVQOTNYWF9USU1FUjFfQ09OVFJPTAkJRVA5M1hYX1RJTUVSX1JFRygweDA4KQorI2RlZmluZSBFUDkzWFhfVElNRVIxMjNfQ09OVFJPTF9FTkFCTEUJKDEgPDwgNykKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMTIzX0NPTlRST0xfTU9ERQkoMSA8PCA2KQorI2RlZmluZSBFUDkzWFhfVElNRVIxMjNfQ09OVFJPTF9DTEtTRUwJKDEgPDwgMykKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMV9DTEVBUgkJRVA5M1hYX1RJTUVSX1JFRygweDBjKQorI2RlZmluZSBFUDkzWFhfVElNRVIyX0xPQUQJCUVQOTNYWF9USU1FUl9SRUcoMHgyMCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMl9WQUxVRQkJRVA5M1hYX1RJTUVSX1JFRygweDI0KQorI2RlZmluZSBFUDkzWFhfVElNRVIyX0NPTlRST0wJCUVQOTNYWF9USU1FUl9SRUcoMHgyOCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMl9DTEVBUgkJRVA5M1hYX1RJTUVSX1JFRygweDJjKQorI2RlZmluZSBFUDkzWFhfVElNRVI0X1ZBTFVFX0xPVwkJRVA5M1hYX1RJTUVSX1JFRygweDYwKQorI2RlZmluZSBFUDkzWFhfVElNRVI0X1ZBTFVFX0hJR0gJRVA5M1hYX1RJTUVSX1JFRygweDY0KQorI2RlZmluZSBFUDkzWFhfVElNRVI0X1ZBTFVFX0hJR0hfRU5BQkxFCSgxIDw8IDgpCisjZGVmaW5lIEVQOTNYWF9USU1FUjNfTE9BRAkJRVA5M1hYX1RJTUVSX1JFRygweDgwKQorI2RlZmluZSBFUDkzWFhfVElNRVIzX1ZBTFVFCQlFUDkzWFhfVElNRVJfUkVHKDB4ODQpCisjZGVmaW5lIEVQOTNYWF9USU1FUjNfQ09OVFJPTAkJRVA5M1hYX1RJTUVSX1JFRygweDg4KQorI2RlZmluZSBFUDkzWFhfVElNRVIzX0NMRUFSCQlFUDkzWFhfVElNRVJfUkVHKDB4OGMpCiAKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMTIzX0NMT0NLCQk1MDg0NjkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSNF9DTE9DSwkJOTgzMDQwCisKKyNkZWZpbmUgVElNRVIxX1JFTE9BRAkJCSgoRVA5M1hYX1RJTUVSMTIzX0NMT0NLIC8gSFopIC0gMSkKICNkZWZpbmUgVElNRVI0X1RJQ0tTX1BFUl9KSUZGWQkJRElWX1JPVU5EX0NMT1NFU1QoQ0xPQ0tfVElDS19SQVRFLCBIWikKIAorc3RhdGljIHVuc2lnbmVkIGludCBsYXN0X2ppZmZ5X3RpbWU7CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBlcDkzeHhfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKKwkvKiBXcml0aW5nIGFueSB2YWx1ZSBjbGVhcnMgdGhlIHRpbWVyIGludGVycnVwdCAqLwogCV9fcmF3X3dyaXRlbCgxLCBFUDkzWFhfVElNRVIxX0NMRUFSKTsKKworCS8qIFJlY292ZXIgbG9zdCBqaWZmaWVzICovCiAJd2hpbGUgKChzaWduZWQgbG9uZykKIAkJKF9fcmF3X3JlYWRsKEVQOTNYWF9USU1FUjRfVkFMVUVfTE9XKSAtIGxhc3RfamlmZnlfdGltZSkKIAkJCQkJCT49IFRJTUVSNF9USUNLU19QRVJfSklGRlkpIHsKQEAgLTEwNywxMyArMTM2LDE4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlcDkzeHhfdGltZXJfaW5pdCh2b2lkKQogeworCXUzMiB0bW9kZSA9IEVQOTNYWF9USU1FUjEyM19DT05UUk9MX01PREUgfAorCQkgICAgRVA5M1hYX1RJTUVSMTIzX0NPTlRST0xfQ0xLU0VMOworCiAJLyogRW5hYmxlIHBlcmlvZGljIEhaIHRpbWVyLiAgKi8KLQlfX3Jhd193cml0ZWwoMHg0OCwgRVA5M1hYX1RJTUVSMV9DT05UUk9MKTsKLQlfX3Jhd193cml0ZWwoKDUwODQ2OSAvIEhaKSAtIDEsIEVQOTNYWF9USU1FUjFfTE9BRCk7Ci0JX19yYXdfd3JpdGVsKDB4YzgsIEVQOTNYWF9USU1FUjFfQ09OVFJPTCk7CisJX19yYXdfd3JpdGVsKHRtb2RlLCBFUDkzWFhfVElNRVIxX0NPTlRST0wpOworCV9fcmF3X3dyaXRlbChUSU1FUjFfUkVMT0FELCBFUDkzWFhfVElNRVIxX0xPQUQpOworCV9fcmF3X3dyaXRlbCh0bW9kZSB8IEVQOTNYWF9USU1FUjEyM19DT05UUk9MX0VOQUJMRSwKKwkJCUVQOTNYWF9USU1FUjFfQ09OVFJPTCk7CiAKIAkvKiBFbmFibGUgbG9zdCBqaWZmeSB0aW1lci4gICovCi0JX19yYXdfd3JpdGVsKDB4MTAwLCBFUDkzWFhfVElNRVI0X1ZBTFVFX0hJR0gpOworCV9fcmF3X3dyaXRlbChFUDkzWFhfVElNRVI0X1ZBTFVFX0hJR0hfRU5BQkxFLAorCQkJRVA5M1hYX1RJTUVSNF9WQUxVRV9ISUdIKTsKIAogCXNldHVwX2lycShJUlFfRVA5M1hYX1RJTUVSMSwgJmVwOTN4eF90aW1lcl9pcnEpOwogfQpAQCAtMTM1LDIzNyArMTY5LDE2IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdQSU8gaGFuZGxpbmcgZm9yIEVQOTN4eAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBncGlvX2ludF91bm1hc2tlZFszXTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGdwaW9faW50X2VuYWJsZWRbM107Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBncGlvX2ludF90eXBlMVszXTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGdwaW9faW50X3R5cGUyWzNdOwotc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfZGVib3VuY2VbM107Ci0KLS8qIFBvcnQgb3JkZXJpbmcgaXM6IEEgQiBGICovCi1zdGF0aWMgY29uc3QgdTggaW50X3R5cGUxX3JlZ2lzdGVyX29mZnNldFszXQk9IHsgMHg5MCwgMHhhYywgMHg0YyB9Owotc3RhdGljIGNvbnN0IHU4IGludF90eXBlMl9yZWdpc3Rlcl9vZmZzZXRbM10JPSB7IDB4OTQsIDB4YjAsIDB4NTAgfTsKLXN0YXRpYyBjb25zdCB1OCBlb2lfcmVnaXN0ZXJfb2Zmc2V0WzNdCQk9IHsgMHg5OCwgMHhiNCwgMHg1NCB9Owotc3RhdGljIGNvbnN0IHU4IGludF9lbl9yZWdpc3Rlcl9vZmZzZXRbM10JPSB7IDB4OWMsIDB4YjgsIDB4NTggfTsKLXN0YXRpYyBjb25zdCB1OCBpbnRfZGVib3VuY2VfcmVnaXN0ZXJfb2Zmc2V0WzNdCT0geyAweGE4LCAweGM0LCAweDY0IH07Ci0KLXZvaWQgZXA5M3h4X2dwaW9fdXBkYXRlX2ludF9wYXJhbXModW5zaWduZWQgcG9ydCkKLXsKLQlCVUdfT04ocG9ydCA+IDIpOwotCi0JX19yYXdfd3JpdGViKDAsIEVQOTNYWF9HUElPX1JFRyhpbnRfZW5fcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7Ci0KLQlfX3Jhd193cml0ZWIoZ3Bpb19pbnRfdHlwZTJbcG9ydF0sCi0JCUVQOTNYWF9HUElPX1JFRyhpbnRfdHlwZTJfcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7Ci0KLQlfX3Jhd193cml0ZWIoZ3Bpb19pbnRfdHlwZTFbcG9ydF0sCi0JCUVQOTNYWF9HUElPX1JFRyhpbnRfdHlwZTFfcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7Ci0KLQlfX3Jhd193cml0ZWIoZ3Bpb19pbnRfdW5tYXNrZWRbcG9ydF0gJiBncGlvX2ludF9lbmFibGVkW3BvcnRdLAotCQlFUDkzWFhfR1BJT19SRUcoaW50X2VuX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOwotfQotCi12b2lkIGVwOTN4eF9ncGlvX2ludF9tYXNrKHVuc2lnbmVkIGxpbmUpCi17Ci0JZ3Bpb19pbnRfdW5tYXNrZWRbbGluZSA+PiAzXSAmPSB+KDEgPDwgKGxpbmUgJiA3KSk7Ci19Ci0KLXZvaWQgZXA5M3h4X2dwaW9faW50X2RlYm91bmNlKHVuc2lnbmVkIGludCBpcnEsIGludCBlbmFibGUpCi17Ci0JaW50IGxpbmUgPSBpcnFfdG9fZ3BpbyhpcnEpOwotCWludCBwb3J0ID0gbGluZSA+PiAzOwotCWludCBwb3J0X21hc2sgPSAxIDw8IChsaW5lICYgNyk7Ci0KLQlpZiAoZW5hYmxlKQotCQlncGlvX2ludF9kZWJvdW5jZVtwb3J0XSB8PSBwb3J0X21hc2s7Ci0JZWxzZQotCQlncGlvX2ludF9kZWJvdW5jZVtwb3J0XSAmPSB+cG9ydF9tYXNrOwotCi0JX19yYXdfd3JpdGViKGdwaW9faW50X2RlYm91bmNlW3BvcnRdLAotCQlFUDkzWFhfR1BJT19SRUcoaW50X2RlYm91bmNlX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOwotfQotRVhQT1JUX1NZTUJPTChlcDkzeHhfZ3Bpb19pbnRfZGVib3VuY2UpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogRVA5M3h4IElSUSBoYW5kbGluZwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19hYl9pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCi17Ci0JdW5zaWduZWQgY2hhciBzdGF0dXM7Ci0JaW50IGk7Ci0KLQlzdGF0dXMgPSBfX3Jhd19yZWFkYihFUDkzWFhfR1BJT19BX0lOVF9TVEFUVVMpOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaWYgKHN0YXR1cyAmICgxIDw8IGkpKSB7Ci0JCQlpbnQgZ3Bpb19pcnEgPSBncGlvX3RvX2lycShFUDkzWFhfR1BJT19MSU5FX0EoMCkpICsgaTsKLQkJCWdlbmVyaWNfaGFuZGxlX2lycShncGlvX2lycSk7Ci0JCX0KLQl9Ci0KLQlzdGF0dXMgPSBfX3Jhd19yZWFkYihFUDkzWFhfR1BJT19CX0lOVF9TVEFUVVMpOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaWYgKHN0YXR1cyAmICgxIDw8IGkpKSB7Ci0JCQlpbnQgZ3Bpb19pcnEgPSBncGlvX3RvX2lycShFUDkzWFhfR1BJT19MSU5FX0IoMCkpICsgaTsKLQkJCWdlbmVyaWNfaGFuZGxlX2lycShncGlvX2lycSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCS8qCi0JICogbWFwIGRpc2NvbnRpZ3VvdXMgaHcgaXJxIHJhbmdlIHRvIGNvbnRpbm91cyBzdyBpcnEgcmFuZ2U6Ci0JICoKLQkgKiAgSVJRX0VQOTNYWF9HUElPezAuLjd9TVVYIC0+IGdwaW9fdG9faXJxKEVQOTNYWF9HUElPX0xJTkVfRih7MC4uN30pCi0JICovCi0JaW50IHBvcnRfZl9pZHggPSAoKGlycSArIDEpICYgNykgXiA0OyAvKiB7MTkuLjIyLDQ3Li41MH0gLT4gezAuLjd9ICovCi0JaW50IGdwaW9faXJxID0gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9GKDApKSArIHBvcnRfZl9pZHg7Ci0KLQlnZW5lcmljX2hhbmRsZV9pcnEoZ3Bpb19pcnEpOwotfQotCi1zdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19pcnFfYWNrKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaW50IGxpbmUgPSBpcnFfdG9fZ3BpbyhpcnEpOwotCWludCBwb3J0ID0gbGluZSA+PiAzOwotCWludCBwb3J0X21hc2sgPSAxIDw8IChsaW5lICYgNyk7Ci0KLQlpZiAoKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSykgPT0gSVJRX1RZUEVfRURHRV9CT1RIKSB7Ci0JCWdwaW9faW50X3R5cGUyW3BvcnRdIF49IHBvcnRfbWFzazsgLyogc3dpdGNoIGVkZ2UgZGlyZWN0aW9uICovCi0JCWVwOTN4eF9ncGlvX3VwZGF0ZV9pbnRfcGFyYW1zKHBvcnQpOwotCX0KLQotCV9fcmF3X3dyaXRlYihwb3J0X21hc2ssIEVQOTNYWF9HUElPX1JFRyhlb2lfcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2lycV9tYXNrX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBsaW5lID0gaXJxX3RvX2dwaW8oaXJxKTsKLQlpbnQgcG9ydCA9IGxpbmUgPj4gMzsKLQlpbnQgcG9ydF9tYXNrID0gMSA8PCAobGluZSAmIDcpOwotCi0JaWYgKChpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9UWVBFX1NFTlNFX01BU0spID09IElSUV9UWVBFX0VER0VfQk9USCkKLQkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gXj0gcG9ydF9tYXNrOyAvKiBzd2l0Y2ggZWRnZSBkaXJlY3Rpb24gKi8KLQotCWdwaW9faW50X3VubWFza2VkW3BvcnRdICY9IH5wb3J0X21hc2s7Ci0JZXA5M3h4X2dwaW9fdXBkYXRlX2ludF9wYXJhbXMocG9ydCk7Ci0KLQlfX3Jhd193cml0ZWIocG9ydF9tYXNrLCBFUDkzWFhfR1BJT19SRUcoZW9pX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOwotfQotCi1zdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBsaW5lID0gaXJxX3RvX2dwaW8oaXJxKTsKLQlpbnQgcG9ydCA9IGxpbmUgPj4gMzsKLQotCWdwaW9faW50X3VubWFza2VkW3BvcnRdICY9IH4oMSA8PCAobGluZSAmIDcpKTsKLQllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhwb3J0KTsKLX0KLQotc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9faXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBsaW5lID0gaXJxX3RvX2dwaW8oaXJxKTsKLQlpbnQgcG9ydCA9IGxpbmUgPj4gMzsKLQotCWdwaW9faW50X3VubWFza2VkW3BvcnRdIHw9IDEgPDwgKGxpbmUgJiA3KTsKLQllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhwb3J0KTsKLX0KLQotCi0vKgotICogZ3Bpb19pbnRfdHlwZTEgY29udHJvbHMgd2hldGhlciB0aGUgaW50ZXJydXB0IGlzIGxldmVsICgwKSBvcgotICogZWRnZSAoMSkgdHJpZ2dlcmVkLCB3aGlsZSBncGlvX2ludF90eXBlMiBjb250cm9scyB3aGV0aGVyIGl0Ci0gKiB0cmlnZ2VycyBvbiBsb3cvZmFsbGluZyAoMCkgb3IgaGlnaC9yaXNpbmcgKDEpLgotICovCi1zdGF0aWMgaW50IGVwOTN4eF9ncGlvX2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQotewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCWNvbnN0IGludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKLQljb25zdCBpbnQgcG9ydCA9IGdwaW8gPj4gMzsKLQljb25zdCBpbnQgcG9ydF9tYXNrID0gMSA8PCAoZ3BpbyAmIDcpOwotCi0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpbyk7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgotCQlncGlvX2ludF90eXBlMVtwb3J0XSB8PSBwb3J0X21hc2s7Ci0JCWdwaW9faW50X3R5cGUyW3BvcnRdIHw9IHBvcnRfbWFzazsKLQkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6Ci0JCWdwaW9faW50X3R5cGUxW3BvcnRdIHw9IHBvcnRfbWFzazsKLQkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gJj0gfnBvcnRfbWFzazsKLQkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgotCQlncGlvX2ludF90eXBlMVtwb3J0XSAmPSB+cG9ydF9tYXNrOwotCQlncGlvX2ludF90eXBlMltwb3J0XSB8PSBwb3J0X21hc2s7Ci0JCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfbGV2ZWxfaXJxOwotCQlicmVhazsKLQljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKLQkJZ3Bpb19pbnRfdHlwZTFbcG9ydF0gJj0gfnBvcnRfbWFzazsKLQkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gJj0gfnBvcnRfbWFzazsKLQkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9sZXZlbF9pcnE7Ci0JCWJyZWFrOwotCWNhc2UgSVJRX1RZUEVfRURHRV9CT1RIOgotCQlncGlvX2ludF90eXBlMVtwb3J0XSB8PSBwb3J0X21hc2s7Ci0JCS8qIHNldCBpbml0aWFsIHBvbGFyaXR5IGJhc2VkIG9uIGN1cnJlbnQgaW5wdXQgbGV2ZWwgKi8KLQkJaWYgKGdwaW9fZ2V0X3ZhbHVlKGdwaW8pKQotCQkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gJj0gfnBvcnRfbWFzazsgLyogZmFsbGluZyAqLwotCQllbHNlCi0JCQlncGlvX2ludF90eXBlMltwb3J0XSB8PSBwb3J0X21hc2s7IC8qIHJpc2luZyAqLwotCQlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2VkZ2VfaXJxOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl9lcnIoImVwOTN4eDogZmFpbGVkIHRvIHNldCBpcnEgdHlwZSAlZCBmb3IgZ3BpbyAlZFxuIiwKLQkJICAgICAgIHR5cGUsIGdwaW8pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlncGlvX2ludF9lbmFibGVkW3BvcnRdIHw9IHBvcnRfbWFzazsKLQotCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1RZUEVfU0VOU0VfTUFTSzsKLQlkZXNjLT5zdGF0dXMgfD0gdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0s7Ci0KLQllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhwb3J0KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGVwOTN4eF9ncGlvX2lycV9jaGlwID0gewotCS5uYW1lCQk9ICJHUElPIiwKLQkuYWNrCQk9IGVwOTN4eF9ncGlvX2lycV9hY2ssCi0JLm1hc2tfYWNrCT0gZXA5M3h4X2dwaW9faXJxX21hc2tfYWNrLAotCS5tYXNrCQk9IGVwOTN4eF9ncGlvX2lycV9tYXNrLAotCS51bm1hc2sJCT0gZXA5M3h4X2dwaW9faXJxX3VubWFzaywKLQkuc2V0X3R5cGUJPSBlcDkzeHhfZ3Bpb19pcnFfdHlwZSwKLX07Ci0KK2V4dGVybiB2b2lkIGVwOTN4eF9ncGlvX2luaXRfaXJxKHZvaWQpOwogCiB2b2lkIF9faW5pdCBlcDkzeHhfaW5pdF9pcnEodm9pZCkKIHsKLQlpbnQgZ3Bpb19pcnE7Ci0KIAl2aWNfaW5pdChFUDkzWFhfVklDMV9CQVNFLCAwLCBFUDkzWFhfVklDMV9WQUxJRF9JUlFfTUFTSywgMCk7CiAJdmljX2luaXQoRVA5M1hYX1ZJQzJfQkFTRSwgMzIsIEVQOTNYWF9WSUMyX1ZBTElEX0lSUV9NQVNLLCAwKTsKIAotCWZvciAoZ3Bpb19pcnEgPSBncGlvX3RvX2lycSgwKTsKLQkgICAgIGdwaW9faXJxIDw9IGdwaW9fdG9faXJxKEVQOTNYWF9HUElPX0xJTkVfTUFYX0lSUSk7ICsrZ3Bpb19pcnEpIHsKLQkJc2V0X2lycV9jaGlwKGdwaW9faXJxLCAmZXA5M3h4X2dwaW9faXJxX2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIoZ3Bpb19pcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwotCQlzZXRfaXJxX2ZsYWdzKGdwaW9faXJxLCBJUlFGX1ZBTElEKTsKLQl9Ci0KLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU9fQUIsIGVwOTN4eF9ncGlvX2FiX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU8wTVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU8xTVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU8yTVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU8zTVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU80TVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU81TVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU82TVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRVA5M1hYX0dQSU83TVVYLCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKTsKKwllcDkzeHhfZ3Bpb19pbml0X2lycSgpOwogfQogCiAKQEAgLTU3Miw5ICszODUsOSBAQAogCSAqIENNT1MgZHJpdmVyLgogCSAqLwogCWlmIChkYXRhLT5zZGFfaXNfb3Blbl9kcmFpbiAmJiBkYXRhLT5zZGFfcGluICE9IEVQOTNYWF9HUElPX0xJTkVfRUVEQVQpCi0JCXByX3dhcm5pbmcoImVwOTN4eDogc2RhICE9IEVFREFULCBvcGVuIGRyYWluIGhhcyBubyBlZmZlY3RcbiIpOworCQlwcl93YXJuaW5nKCJzZGEgIT0gRUVEQVQsIG9wZW4gZHJhaW4gaGFzIG5vIGVmZmVjdFxuIik7CiAJaWYgKGRhdGEtPnNjbF9pc19vcGVuX2RyYWluICYmIGRhdGEtPnNjbF9waW4gIT0gRVA5M1hYX0dQSU9fTElORV9FRUNMSykKLQkJcHJfd2FybmluZygiZXA5M3h4OiBzY2wgIT0gRUVDTEssIG9wZW4gZHJhaW4gaGFzIG5vIGVmZmVjdFxuIik7CisJCXByX3dhcm5pbmcoInNjbCAhPSBFRUNMSywgb3BlbiBkcmFpbiBoYXMgbm8gZWZmZWN0XG4iKTsKIAogCV9fcmF3X3dyaXRlbCgoZGF0YS0+c2RhX2lzX29wZW5fZHJhaW4gPDwgMSkgfAogCQkgICAgIChkYXRhLT5zY2xfaXNfb3Blbl9kcmFpbiA8PCAwKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2RtYS1tMnAuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2RtYS1tMnAuYwppbmRleCBkYmNhYzljLi44OTA0Y2E0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEtbTJwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZG1hLW0ycC5jCkBAIC0yOCw2ICsyOCw4IEBACiAgKiB3aXRoIHRoaXMgaW1wbGVtZW50YXRpb24uCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSAiZXA5M3h4ICIgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtMTczLDcgKzE3NSw3IEBACiAKIAlzd2l0Y2ggKG0ycF9jaGFubmVsX3N0YXRlKGNoKSkgewogCWNhc2UgU1RBVEVfSURMRToKLQkJcHJfY3JpdCgibTJwX2lycTogZG1hIGludGVycnVwdCB3aXRob3V0IGEgZG1hIGJ1ZmZlclxuIik7CisJCXByX2NyaXQoImRtYSBpbnRlcnJ1cHQgd2l0aG91dCBhIGRtYSBidWZmZXJcbiIpOwogCQlCVUcoKTsKIAkJYnJlYWs7CiAKQEAgLTE5Nyw3ICsxOTksNyBAQAogCQlicmVhazsKIAogCWNhc2UgU1RBVEVfTkVYVDoKLQkJcHJfY3JpdCgibTJwX2lycTogZG1hIGludGVycnVwdCB3aGlsZSBuZXh0XG4iKTsKKwkJcHJfY3JpdCgiZG1hIGludGVycnVwdCB3aGlsZSBuZXh0XG4iKTsKIAkJQlVHKCk7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwppbmRleCBhNGE3YmUzLi5kMjJkNjdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCkBAIC0xMTgsMTIgKzExOCwzMyBAQAogCX0KIH0KIAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRURCOTN4eCBwd20KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgX19pbml0IGVkYjkzeHhfcmVnaXN0ZXJfcHdtKHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfZWRiOTMwMSgpIHx8CisJICAgIG1hY2hpbmVfaXNfZWRiOTMwMigpIHx8IG1hY2hpbmVfaXNfZWRiOTMwMmEoKSkgeworCQkvKiBFUDkzMDEgYW5kIEVQOTMwMiBvbmx5IGhhdmUgcHdtLjEgKEVHUElPMTQpICovCisJCWVwOTN4eF9yZWdpc3Rlcl9wd20oMCwgMSk7CisJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2VkYjkzMDcoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMDdhKCkpIHsKKwkJLyogRVA5MzA3IG9ubHkgaGFzIHB3bS4wIChQV01PVVQpICovCisJCWVwOTN4eF9yZWdpc3Rlcl9wd20oMSwgMCk7CisJfSBlbHNlIHsKKwkJLyogRVA5MzEyIGFuZCBFUDkzMTUgaGF2ZSBib3RoICovCisJCWVwOTN4eF9yZWdpc3Rlcl9wd20oMSwgMSk7CisJfQorfQorCisKIHN0YXRpYyB2b2lkIF9faW5pdCBlZGI5M3h4X2luaXRfbWFjaGluZSh2b2lkKQogewogCWVwOTN4eF9pbml0X2RldmljZXMoKTsKIAllZGI5M3h4X3JlZ2lzdGVyX2ZsYXNoKCk7CiAJZXA5M3h4X3JlZ2lzdGVyX2V0aCgmZWRiOTN4eF9ldGhfZGF0YSwgMSk7CiAJZWRiOTN4eF9yZWdpc3Rlcl9pMmMoKTsKKwllZGI5M3h4X3JlZ2lzdGVyX3B3bSgpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYwppbmRleCAxZWE4ODcxLi5jYzM3N2FlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ3Bpby5jCkBAIC0xMyw2ICsxMyw4IEBACiAgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSAiZXA5M3h4ICIgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpAQCAtMjIsNiArMjQsMjM1IEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIGhhbmRsaW5nIGZvciBFUDkzeHgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfdW5tYXNrZWRbM107CitzdGF0aWMgdW5zaWduZWQgY2hhciBncGlvX2ludF9lbmFibGVkWzNdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfdHlwZTFbM107CitzdGF0aWMgdW5zaWduZWQgY2hhciBncGlvX2ludF90eXBlMlszXTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdwaW9faW50X2RlYm91bmNlWzNdOworCisvKiBQb3J0IG9yZGVyaW5nIGlzOiBBIEIgRiAqLworc3RhdGljIGNvbnN0IHU4IGludF90eXBlMV9yZWdpc3Rlcl9vZmZzZXRbM10JPSB7IDB4OTAsIDB4YWMsIDB4NGMgfTsKK3N0YXRpYyBjb25zdCB1OCBpbnRfdHlwZTJfcmVnaXN0ZXJfb2Zmc2V0WzNdCT0geyAweDk0LCAweGIwLCAweDUwIH07CitzdGF0aWMgY29uc3QgdTggZW9pX3JlZ2lzdGVyX29mZnNldFszXQkJPSB7IDB4OTgsIDB4YjQsIDB4NTQgfTsKK3N0YXRpYyBjb25zdCB1OCBpbnRfZW5fcmVnaXN0ZXJfb2Zmc2V0WzNdCT0geyAweDljLCAweGI4LCAweDU4IH07CitzdGF0aWMgY29uc3QgdTggaW50X2RlYm91bmNlX3JlZ2lzdGVyX29mZnNldFszXQk9IHsgMHhhOCwgMHhjNCwgMHg2NCB9OworCit2b2lkIGVwOTN4eF9ncGlvX3VwZGF0ZV9pbnRfcGFyYW1zKHVuc2lnbmVkIHBvcnQpCit7CisJQlVHX09OKHBvcnQgPiAyKTsKKworCV9fcmF3X3dyaXRlYigwLCBFUDkzWFhfR1BJT19SRUcoaW50X2VuX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOworCisJX19yYXdfd3JpdGViKGdwaW9faW50X3R5cGUyW3BvcnRdLAorCQlFUDkzWFhfR1BJT19SRUcoaW50X3R5cGUyX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOworCisJX19yYXdfd3JpdGViKGdwaW9faW50X3R5cGUxW3BvcnRdLAorCQlFUDkzWFhfR1BJT19SRUcoaW50X3R5cGUxX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOworCisJX19yYXdfd3JpdGViKGdwaW9faW50X3VubWFza2VkW3BvcnRdICYgZ3Bpb19pbnRfZW5hYmxlZFtwb3J0XSwKKwkJRVA5M1hYX0dQSU9fUkVHKGludF9lbl9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKK30KKwordm9pZCBlcDkzeHhfZ3Bpb19pbnRfbWFzayh1bnNpZ25lZCBsaW5lKQoreworCWdwaW9faW50X3VubWFza2VkW2xpbmUgPj4gM10gJj0gfigxIDw8IChsaW5lICYgNykpOworfQorCit2b2lkIGVwOTN4eF9ncGlvX2ludF9kZWJvdW5jZSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgZW5hYmxlKQoreworCWludCBsaW5lID0gaXJxX3RvX2dwaW8oaXJxKTsKKwlpbnQgcG9ydCA9IGxpbmUgPj4gMzsKKwlpbnQgcG9ydF9tYXNrID0gMSA8PCAobGluZSAmIDcpOworCisJaWYgKGVuYWJsZSkKKwkJZ3Bpb19pbnRfZGVib3VuY2VbcG9ydF0gfD0gcG9ydF9tYXNrOworCWVsc2UKKwkJZ3Bpb19pbnRfZGVib3VuY2VbcG9ydF0gJj0gfnBvcnRfbWFzazsKKworCV9fcmF3X3dyaXRlYihncGlvX2ludF9kZWJvdW5jZVtwb3J0XSwKKwkJRVA5M1hYX0dQSU9fUkVHKGludF9kZWJvdW5jZV9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKK30KK0VYUE9SVF9TWU1CT0woZXA5M3h4X2dwaW9faW50X2RlYm91bmNlKTsKKworc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9fYWJfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCWludCBpOworCisJc3RhdHVzID0gX19yYXdfcmVhZGIoRVA5M1hYX0dQSU9fQV9JTlRfU1RBVFVTKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmIChzdGF0dXMgJiAoMSA8PCBpKSkgeworCQkJaW50IGdwaW9faXJxID0gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9BKDApKSArIGk7CisJCQlnZW5lcmljX2hhbmRsZV9pcnEoZ3Bpb19pcnEpOworCQl9CisJfQorCisJc3RhdHVzID0gX19yYXdfcmVhZGIoRVA5M1hYX0dQSU9fQl9JTlRfU1RBVFVTKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmIChzdGF0dXMgJiAoMSA8PCBpKSkgeworCQkJaW50IGdwaW9faXJxID0gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9CKDApKSArIGk7CisJCQlnZW5lcmljX2hhbmRsZV9pcnEoZ3Bpb19pcnEpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwkvKgorCSAqIG1hcCBkaXNjb250aWd1b3VzIGh3IGlycSByYW5nZSB0byBjb250aW5vdXMgc3cgaXJxIHJhbmdlOgorCSAqCisJICogIElSUV9FUDkzWFhfR1BJT3swLi43fU1VWCAtPiBncGlvX3RvX2lycShFUDkzWFhfR1BJT19MSU5FX0YoezAuLjd9KQorCSAqLworCWludCBwb3J0X2ZfaWR4ID0gKChpcnEgKyAxKSAmIDcpIF4gNDsgLyogezE5Li4yMiw0Ny4uNTB9IC0+IHswLi43fSAqLworCWludCBncGlvX2lycSA9IGdwaW9fdG9faXJxKEVQOTNYWF9HUElPX0xJTkVfRigwKSkgKyBwb3J0X2ZfaWR4OworCisJZ2VuZXJpY19oYW5kbGVfaXJxKGdwaW9faXJxKTsKK30KKworc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9faXJxX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBsaW5lID0gaXJxX3RvX2dwaW8oaXJxKTsKKwlpbnQgcG9ydCA9IGxpbmUgPj4gMzsKKwlpbnQgcG9ydF9tYXNrID0gMSA8PCAobGluZSAmIDcpOworCisJaWYgKChpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9UWVBFX1NFTlNFX01BU0spID09IElSUV9UWVBFX0VER0VfQk9USCkgeworCQlncGlvX2ludF90eXBlMltwb3J0XSBePSBwb3J0X21hc2s7IC8qIHN3aXRjaCBlZGdlIGRpcmVjdGlvbiAqLworCQllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhwb3J0KTsKKwl9CisKKwlfX3Jhd193cml0ZWIocG9ydF9tYXNrLCBFUDkzWFhfR1BJT19SRUcoZW9pX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOworfQorCitzdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19pcnFfbWFza19hY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgbGluZSA9IGlycV90b19ncGlvKGlycSk7CisJaW50IHBvcnQgPSBsaW5lID4+IDM7CisJaW50IHBvcnRfbWFzayA9IDEgPDwgKGxpbmUgJiA3KTsKKworCWlmICgoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfVFlQRV9TRU5TRV9NQVNLKSA9PSBJUlFfVFlQRV9FREdFX0JPVEgpCisJCWdwaW9faW50X3R5cGUyW3BvcnRdIF49IHBvcnRfbWFzazsgLyogc3dpdGNoIGVkZ2UgZGlyZWN0aW9uICovCisKKwlncGlvX2ludF91bm1hc2tlZFtwb3J0XSAmPSB+cG9ydF9tYXNrOworCWVwOTN4eF9ncGlvX3VwZGF0ZV9pbnRfcGFyYW1zKHBvcnQpOworCisJX19yYXdfd3JpdGViKHBvcnRfbWFzaywgRVA5M1hYX0dQSU9fUkVHKGVvaV9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKK30KKworc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9faXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgbGluZSA9IGlycV90b19ncGlvKGlycSk7CisJaW50IHBvcnQgPSBsaW5lID4+IDM7CisKKwlncGlvX2ludF91bm1hc2tlZFtwb3J0XSAmPSB+KDEgPDwgKGxpbmUgJiA3KSk7CisJZXA5M3h4X2dwaW9fdXBkYXRlX2ludF9wYXJhbXMocG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgbGluZSA9IGlycV90b19ncGlvKGlycSk7CisJaW50IHBvcnQgPSBsaW5lID4+IDM7CisKKwlncGlvX2ludF91bm1hc2tlZFtwb3J0XSB8PSAxIDw8IChsaW5lICYgNyk7CisJZXA5M3h4X2dwaW9fdXBkYXRlX2ludF9wYXJhbXMocG9ydCk7Cit9CisKKy8qCisgKiBncGlvX2ludF90eXBlMSBjb250cm9scyB3aGV0aGVyIHRoZSBpbnRlcnJ1cHQgaXMgbGV2ZWwgKDApIG9yCisgKiBlZGdlICgxKSB0cmlnZ2VyZWQsIHdoaWxlIGdwaW9faW50X3R5cGUyIGNvbnRyb2xzIHdoZXRoZXIgaXQKKyAqIHRyaWdnZXJzIG9uIGxvdy9mYWxsaW5nICgwKSBvciBoaWdoL3Jpc2luZyAoMSkuCisgKi8KK3N0YXRpYyBpbnQgZXA5M3h4X2dwaW9faXJxX3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJY29uc3QgaW50IGdwaW8gPSBpcnFfdG9fZ3BpbyhpcnEpOworCWNvbnN0IGludCBwb3J0ID0gZ3BpbyA+PiAzOworCWNvbnN0IGludCBwb3J0X21hc2sgPSAxIDw8IChncGlvICYgNyk7CisKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSVJRX1RZUEVfRURHRV9SSVNJTkc6CisJCWdwaW9faW50X3R5cGUxW3BvcnRdIHw9IHBvcnRfbWFzazsKKwkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gfD0gcG9ydF9tYXNrOworCQlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2VkZ2VfaXJxOworCQlicmVhazsKKwljYXNlIElSUV9UWVBFX0VER0VfRkFMTElORzoKKwkJZ3Bpb19pbnRfdHlwZTFbcG9ydF0gfD0gcG9ydF9tYXNrOworCQlncGlvX2ludF90eXBlMltwb3J0XSAmPSB+cG9ydF9tYXNrOworCQlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2VkZ2VfaXJxOworCQlicmVhazsKKwljYXNlIElSUV9UWVBFX0xFVkVMX0hJR0g6CisJCWdwaW9faW50X3R5cGUxW3BvcnRdICY9IH5wb3J0X21hc2s7CisJCWdwaW9faW50X3R5cGUyW3BvcnRdIHw9IHBvcnRfbWFzazsKKwkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9sZXZlbF9pcnE7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfTEVWRUxfTE9XOgorCQlncGlvX2ludF90eXBlMVtwb3J0XSAmPSB+cG9ydF9tYXNrOworCQlncGlvX2ludF90eXBlMltwb3J0XSAmPSB+cG9ydF9tYXNrOworCQlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2xldmVsX2lycTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9FREdFX0JPVEg6CisJCWdwaW9faW50X3R5cGUxW3BvcnRdIHw9IHBvcnRfbWFzazsKKwkJLyogc2V0IGluaXRpYWwgcG9sYXJpdHkgYmFzZWQgb24gY3VycmVudCBpbnB1dCBsZXZlbCAqLworCQlpZiAoZ3Bpb19nZXRfdmFsdWUoZ3BpbykpCisJCQlncGlvX2ludF90eXBlMltwb3J0XSAmPSB+cG9ydF9tYXNrOyAvKiBmYWxsaW5nICovCisJCWVsc2UKKwkJCWdwaW9faW50X3R5cGUyW3BvcnRdIHw9IHBvcnRfbWFzazsgLyogcmlzaW5nICovCisJCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfZWRnZV9pcnE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2VycigiZmFpbGVkIHRvIHNldCBpcnEgdHlwZSAlZCBmb3IgZ3BpbyAlZFxuIiwgdHlwZSwgZ3Bpbyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWdwaW9faW50X2VuYWJsZWRbcG9ydF0gfD0gcG9ydF9tYXNrOworCisJZGVzYy0+c3RhdHVzICY9IH5JUlFfVFlQRV9TRU5TRV9NQVNLOworCWRlc2MtPnN0YXR1cyB8PSB0eXBlICYgSVJRX1RZUEVfU0VOU0VfTUFTSzsKKworCWVwOTN4eF9ncGlvX3VwZGF0ZV9pbnRfcGFyYW1zKHBvcnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZXA5M3h4X2dwaW9faXJxX2NoaXAgPSB7CisJLm5hbWUJCT0gIkdQSU8iLAorCS5hY2sJCT0gZXA5M3h4X2dwaW9faXJxX2FjaywKKwkubWFza19hY2sJPSBlcDkzeHhfZ3Bpb19pcnFfbWFza19hY2ssCisJLm1hc2sJCT0gZXA5M3h4X2dwaW9faXJxX21hc2ssCisJLnVubWFzawkJPSBlcDkzeHhfZ3Bpb19pcnFfdW5tYXNrLAorCS5zZXRfdHlwZQk9IGVwOTN4eF9ncGlvX2lycV90eXBlLAorfTsKKwordm9pZCBfX2luaXQgZXA5M3h4X2dwaW9faW5pdF9pcnEodm9pZCkKK3sKKwlpbnQgZ3Bpb19pcnE7CisKKwlmb3IgKGdwaW9faXJxID0gZ3Bpb190b19pcnEoMCk7CisJICAgICBncGlvX2lycSA8PSBncGlvX3RvX2lycShFUDkzWFhfR1BJT19MSU5FX01BWF9JUlEpOyArK2dwaW9faXJxKSB7CisJCXNldF9pcnFfY2hpcChncGlvX2lycSwgJmVwOTN4eF9ncGlvX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGdwaW9faXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhncGlvX2lycSwgSVJRRl9WQUxJRCk7CisJfQorCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPX0FCLCBlcDkzeHhfZ3Bpb19hYl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPME1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPMU1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPMk1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPM01VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPNE1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPNU1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPNk1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPN01VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdwaW9saWIgaW50ZXJmYWNlIGZvciBFUDkzeHggb24tY2hpcCBHUElPcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgZXA5M3h4X2dwaW9fY2hpcCB7CiAJc3RydWN0IGdwaW9fY2hpcAljaGlwOwogCkBAIC0zMSwxMCArMjYyLDYgQEAKIAogI2RlZmluZSB0b19lcDkzeHhfZ3Bpb19jaGlwKGMpIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgZXA5M3h4X2dwaW9fY2hpcCwgY2hpcCkKIAotLyogRnJvbSBjb3JlLmMgKi8KLWV4dGVybiB2b2lkIGVwOTN4eF9ncGlvX2ludF9tYXNrKHVuc2lnbmVkIGxpbmUpOwotZXh0ZXJuIHZvaWQgZXA5M3h4X2dwaW9fdXBkYXRlX2ludF9wYXJhbXModW5zaWduZWQgcG9ydCk7Ci0KIHN0YXRpYyBpbnQgZXA5M3h4X2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKIAlzdHJ1Y3QgZXA5M3h4X2dwaW9fY2hpcCAqZXA5M3h4X2NoaXAgPSB0b19lcDkzeHhfZ3Bpb19jaGlwKGNoaXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA4MDI4NThiLi41Y2QyMjQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsNyArMTEsNyBAQAogICovCiAjaW5jbHVkZSA8bWFjaC9lcDkzeHgtcmVncy5oPgogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQkJQCBNTVUgZW5hYmxlZD8KIAkJbGRyZXEJXHJ4LCA9RVA5M1hYX0FQQl9QSFlTX0JBU0UJQCBQaHlzaWNhbCBiYXNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCmluZGV4IGQ1NTE5NGEuLjkzZTJlY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCkBAIC05MiwyMSArOTIsNiBAQAogCiAvKiBBUEIgcGVyaXBoZXJhbHMgKi8KICNkZWZpbmUgRVA5M1hYX1RJTUVSX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDAxMDAwMCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSX1JFRyh4KQkJKEVQOTNYWF9USU1FUl9CQVNFICsgKHgpKQotI2RlZmluZSBFUDkzWFhfVElNRVIxX0xPQUQJCUVQOTNYWF9USU1FUl9SRUcoMHgwMCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSMV9WQUxVRQkJRVA5M1hYX1RJTUVSX1JFRygweDA0KQotI2RlZmluZSBFUDkzWFhfVElNRVIxX0NPTlRST0wJCUVQOTNYWF9USU1FUl9SRUcoMHgwOCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSMV9DTEVBUgkJRVA5M1hYX1RJTUVSX1JFRygweDBjKQotI2RlZmluZSBFUDkzWFhfVElNRVIyX0xPQUQJCUVQOTNYWF9USU1FUl9SRUcoMHgyMCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSMl9WQUxVRQkJRVA5M1hYX1RJTUVSX1JFRygweDI0KQotI2RlZmluZSBFUDkzWFhfVElNRVIyX0NPTlRST0wJCUVQOTNYWF9USU1FUl9SRUcoMHgyOCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSMl9DTEVBUgkJRVA5M1hYX1RJTUVSX1JFRygweDJjKQotI2RlZmluZSBFUDkzWFhfVElNRVI0X1ZBTFVFX0xPVwkJRVA5M1hYX1RJTUVSX1JFRygweDYwKQotI2RlZmluZSBFUDkzWFhfVElNRVI0X1ZBTFVFX0hJR0gJRVA5M1hYX1RJTUVSX1JFRygweDY0KQotI2RlZmluZSBFUDkzWFhfVElNRVIzX0xPQUQJCUVQOTNYWF9USU1FUl9SRUcoMHg4MCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSM19WQUxVRQkJRVA5M1hYX1RJTUVSX1JFRygweDg0KQotI2RlZmluZSBFUDkzWFhfVElNRVIzX0NPTlRST0wJCUVQOTNYWF9USU1FUl9SRUcoMHg4OCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSM19DTEVBUgkJRVA5M1hYX1RJTUVSX1JFRygweDhjKQogCiAjZGVmaW5lIEVQOTNYWF9JMlNfQkFTRQkJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDAyMDAwMCkKIApAQCAtMTY3LDggKzE1MiwxMSBAQAogI2RlZmluZSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQMQkoMTw8MTYpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fSEFMVAkJRVA5M1hYX1NZU0NPTl9SRUcoMHgwOCkKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TVEFOREJZCQlFUDkzWFhfU1lTQ09OX1JFRygweDBjKQotI2RlZmluZSBFUDkzWFhfU1lTQ09OX0NMT0NLX1NFVDEJRVA5M1hYX1NZU0NPTl9SRUcoMHgyMCkKLSNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTE9DS19TRVQyCUVQOTNYWF9TWVNDT05fUkVHKDB4MjQpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0xLU0VUMQkJRVA5M1hYX1NZU0NPTl9SRUcoMHgyMCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTEtTRVQxX05CWVAxCSgxPDwyMykKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTEtTRVQyCQlFUDkzWFhfU1lTQ09OX1JFRygweDI0KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0NMS1NFVDJfTkJZUDIJKDE8PDE5KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0NMS1NFVDJfUExMMl9FTgkoMTw8MTgpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHCQlFUDkzWFhfU1lTQ09OX1JFRygweDgwKQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19TV1JTVAkoMTw8MzEpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0QxT05HCSgxPDwzMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHhfa2V5cGFkLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4X2tleXBhZC5oCmluZGV4IDYyZDE3NDIuLjFlMmY0ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHhfa2V5cGFkLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2VwOTN4eF9rZXlwYWQuaApAQCAtNSw2ICs1LDggQEAKICNpZm5kZWYgX19BU01fQVJDSF9FUDkzWFhfS0VZUEFEX0gKICNkZWZpbmUgX19BU01fQVJDSF9FUDkzWFhfS0VZUEFEX0gKIAorc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YTsKKwogLyogZmxhZ3MgZm9yIHRoZSBlcDkzeHhfa2V5cGFkIGRyaXZlciAqLwogI2RlZmluZSBFUDkzWFhfS0VZUEFEX0RJU0FCTEVfM19LRVkJKDE8PDApCS8qIGRpc2FibGUgMy1rZXkgcmVzZXQgKi8KICNkZWZpbmUgRVA5M1hYX0tFWVBBRF9ESUFHX01PREUJCSgxPDwxKQkvKiBkaWFnbm9zdGljIG1vZGUgKi8KQEAgLTE1LDE1ICsxNywxMyBAQAogCiAvKioKICAqIHN0cnVjdCBlcDkzeHhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgLSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAbWF0cml4X2tleV9tYXA6CQlhcnJheSBvZiBrZXljb2RlcyBkZWZpbmluZyB0aGUga2V5cGFkIG1hdHJpeAotICogQG1hdHJpeF9rZXlfbWFwX3NpemU6CUFSUkFZX1NJWkUobWF0cml4X2tleV9tYXApCi0gKiBAZGVib3VuY2U6CQkJZGVib3VuY2Ugc3RhcnQgY291bnQ7IHRlcm1pbmFsIGNvdW50IGlzIDB4ZmYKLSAqIEBwcmVzY2FsZToJCQlyb3cvY29sdW1uIGNvdW50ZXIgcHJlLXNjYWxlciBsb2FkIHZhbHVlCi0gKiBAZmxhZ3M6CQkJc2VlIGFib3ZlCisgKiBAa2V5bWFwX2RhdGE6CXBvaW50ZXIgdG8gJm1hdHJpeF9rZXltYXBfZGF0YQorICogQGRlYm91bmNlOgkJZGVib3VuY2Ugc3RhcnQgY291bnQ7IHRlcm1pbmFsIGNvdW50IGlzIDB4ZmYKKyAqIEBwcmVzY2FsZToJCXJvdy9jb2x1bW4gY291bnRlciBwcmUtc2NhbGVyIGxvYWQgdmFsdWUKKyAqIEBmbGFnczoJCXNlZSBhYm92ZQogICovCiBzdHJ1Y3QgZXA5M3h4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIHsKLQl1bnNpZ25lZCBpbnQJKm1hdHJpeF9rZXlfbWFwOwotCWludAkJbWF0cml4X2tleV9tYXBfc2l6ZTsKKwlzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhICprZXltYXBfZGF0YTsKIAl1bnNpZ25lZCBpbnQJZGVib3VuY2U7CiAJdW5zaWduZWQgaW50CXByZXNjYWxlOwogCXVuc2lnbmVkIGludAlmbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IGFlZDIxY2QuLjFiM2YyNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMiw0ICsyLDQgQEAKICAqIGFyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKICAqLwogCi0jZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmU4MDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTgwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9zaW1vbmUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L3NpbW9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOTM5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9zaW1vbmUuYwpAQCAtMCwwICsxLDk3IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1lcDkzeHgvc2ltb25lLmMKKyAqIFNpbXBsZW1hY2hpbmVzIFNpbS5PbmUgc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUnlhbiBNYWxsb24gPHJ5YW5AYmx1ZXdhdGVyc3lzLmNvbT4KKyAqCisgKiBCYXNlZCBvbiB0aGUgMi42LjI0Ljcgc3VwcG9ydDoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA5IFNpbXBsZW1hY2hpbmVzCisgKiAgIE1NQyBzdXBwb3J0IGJ5IFBldGVyIEl2YW5vdiA8aXZhbm92cEBnbWFpbC5jb20+LCAyMDA3CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZmIuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBzaW1vbmVfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2ltb25lX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSBFUDkzWFhfQ1M2X1BIWVNfQkFTRSwKKwkuZW5kCQk9IEVQOTNYWF9DUzZfUEhZU19CQVNFICsgU1pfOE0gLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNpbW9uZV9mbGFzaCA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZzaW1vbmVfZmxhc2hfcmVzb3VyY2UsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2ltb25lX2ZsYXNoX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhIHNpbW9uZV9ldGhfZGF0YSA9IHsKKwkucGh5X2lkCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyBzaW1vbmVfZmJfaW5mbyA9IHsKKwkubnVtX21vZGVzCT0gRVA5M1hYRkJfVVNFX01PREVEQiwKKwkuYnBwCQk9IDE2LAorCS5mbGFncwkJPSBFUDkzWFhGQl9VU0VfU0RDU04wIHwgRVA5M1hYRkJfUENMS19GQUxMSU5HLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIHNpbW9uZV9pMmNfZ3Bpb19kYXRhID0geworCS5zZGFfcGluCQk9IEVQOTNYWF9HUElPX0xJTkVfRUVEQVQsCisJLnNkYV9pc19vcGVuX2RyYWluCT0gMCwKKwkuc2NsX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFQ0xLLAorCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDAsCisJLnVkZWxheQkJCT0gMCwKKwkudGltZW91dAkJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHNpbW9uZV9pMmNfYm9hcmRfaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oImRzMTMzNyIsIDB4NjgpLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc2ltb25lX2luaXRfbWFjaGluZSh2b2lkKQoreworCWVwOTN4eF9pbml0X2RldmljZXMoKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2ltb25lX2ZsYXNoKTsKKwllcDkzeHhfcmVnaXN0ZXJfZXRoKCZzaW1vbmVfZXRoX2RhdGEsIDEpOworCWVwOTN4eF9yZWdpc3Rlcl9mYigmc2ltb25lX2ZiX2luZm8pOworCWVwOTN4eF9yZWdpc3Rlcl9pMmMoJnNpbW9uZV9pMmNfZ3Bpb19kYXRhLCBzaW1vbmVfaTJjX2JvYXJkX2luZm8sCisJCQkgICAgQVJSQVlfU0laRShzaW1vbmVfaTJjX2JvYXJkX2luZm8pKTsKK30KKworTUFDSElORV9TVEFSVChTSU1fT05FLCAiU2ltcGxlbWFjaGluZXMgU2ltLk9uZSBCb2FyZCIpCisvKiBNYWludGFpbmVyOiBSeWFuIE1hbGxvbiA8cnlhbkBibHVld2F0ZXJzeXMuY29tPiAqLworCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFMF9QSFlTX0JBU0UgKyAweDEwMCwKKwkubWFwX2lvCQk9IGVwOTN4eF9tYXBfaW8sCisJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmZXA5M3h4X3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBzaW1vbmVfaW5pdF9tYWNoaW5lLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L3NuYXBwZXJjbDE1LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9zbmFwcGVyY2wxNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMTM0YjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9zbmFwcGVyY2wxNS5jCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1lcDkzeHgvc25hcHBlcmNsMTUuYworICogQmx1ZXdhdGVyIFN5c3RlbXMgU25hcHBlciBDTDE1IHN5c3RlbSBtb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQmx1ZXdhdGVyIFN5c3RlbXMgTHRkCisgKiBBdXRob3I6IFJ5YW4gTWFsbG9uIDxyeWFuQGJsdWV3YXRlcnN5cy5jb20+CisgKgorICogTkFORCBjb2RlIGFkYXB0ZWQgZnJvbSBkcml2ZXIgYnk6CisgKiAgIEFuZHJlIFJlbmF1ZCA8YW5kcmVAYmx1ZXdhdGVyc3lzLmNvbT4KKyAqICAgSmFtZXMgUi4gTWNLYXNraWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9mYi5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNkZWZpbmUgU05BUFBFUkNMMTVfTkFORF9CQVNFCShFUDkzWFhfQ1M3X1BIWVNfQkFTRSArIFNaXzE2TSkKKworI2RlZmluZSBTTkFQUEVSQ0wxNV9OQU5EX1dQTgkoMSA8PCA4KSAgLyogV3JpdGUgcHJvdGVjdCAoYWN0aXZlIGxvdykgKi8KKyNkZWZpbmUgU05BUFBFUkNMMTVfTkFORF9BTEUJKDEgPDwgOSkgIC8qIEFkZHJlc3MgbGF0Y2ggKi8KKyNkZWZpbmUgU05BUFBFUkNMMTVfTkFORF9DTEUJKDEgPDwgMTApIC8qIENvbW1hbmQgbGF0Y2ggKi8KKyNkZWZpbmUgU05BUFBFUkNMMTVfTkFORF9DRU4JKDEgPDwgMTEpIC8qIENoaXAgZW5hYmxlIChhY3RpdmUgbG93KSAqLworI2RlZmluZSBTTkFQUEVSQ0wxNV9OQU5EX1JEWQkoMSA8PCAxNCkgLyogRGV2aWNlIHJlYWR5ICovCisKKyNkZWZpbmUgTkFORF9DVFJMX0FERFIoY2hpcCkgCShjaGlwLT5JT19BRERSX1cgKyAweDQwKQorCitzdGF0aWMgdm9pZCBzbmFwcGVyY2wxNV9uYW5kX2NtZF9jdHJsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJc3RhdGljIHUxNiBuYW5kX3N0YXRlID0gU05BUFBFUkNMMTVfTkFORF9XUE47CisJdTE2IHNldDsKKworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQlzZXQgPSBTTkFQUEVSQ0wxNV9OQU5EX0NFTiB8IFNOQVBQRVJDTDE1X05BTkRfV1BOOworCisJCWlmIChjdHJsICYgTkFORF9OQ0UpCisJCQlzZXQgJj0gflNOQVBQRVJDTDE1X05BTkRfQ0VOOworCQlpZiAoY3RybCAmIE5BTkRfQ0xFKQorCQkJc2V0IHw9IFNOQVBQRVJDTDE1X05BTkRfQ0xFOworCQlpZiAoY3RybCAmIE5BTkRfQUxFKQorCQkJc2V0IHw9IFNOQVBQRVJDTDE1X05BTkRfQUxFOworCisJCW5hbmRfc3RhdGUgJj0gfihTTkFQUEVSQ0wxNV9OQU5EX0NFTiB8CisJCQkJU05BUFBFUkNMMTVfTkFORF9DTEUgfAorCQkJCVNOQVBQRVJDTDE1X05BTkRfQUxFKTsKKwkJbmFuZF9zdGF0ZSB8PSBzZXQ7CisJCV9fcmF3X3dyaXRldyhuYW5kX3N0YXRlLCBOQU5EX0NUUkxfQUREUihjaGlwKSk7CisJfQorCisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQlfX3Jhd193cml0ZXcoKGNtZCAmIDB4ZmYpIHwgbmFuZF9zdGF0ZSwgY2hpcC0+SU9fQUREUl9XKTsKK30KKworc3RhdGljIGludCBzbmFwcGVyY2wxNV9uYW5kX2Rldl9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCisJcmV0dXJuICEhKF9fcmF3X3JlYWR3KE5BTkRfQ1RSTF9BRERSKGNoaXApKSAmIFNOQVBQRVJDTDE1X05BTkRfUkRZKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNuYXBwZXJjbDE1X25hbmRfcGFydF9wcm9iZXNbXSA9IHsiY21kbGluZXBhcnQiLCBOVUxMfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHNuYXBwZXJjbDE1X25hbmRfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJLZXJuZWwiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IFNaXzJNLAorCX0sCisJeworCQkubmFtZQkJPSAiRmlsZXN5c3RlbSIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX25hbmRfZGF0YSBzbmFwcGVyY2wxNV9uYW5kX2RhdGEgPSB7CisJLmNoaXAgPSB7CisJCS5ucl9jaGlwcwkJPSAxLAorCQkucGFydF9wcm9iZV90eXBlcwk9IHNuYXBwZXJjbDE1X25hbmRfcGFydF9wcm9iZXMsCisJCS5wYXJ0aXRpb25zCQk9IHNuYXBwZXJjbDE1X25hbmRfcGFydHMsCisJCS5ucl9wYXJ0aXRpb25zCQk9IEFSUkFZX1NJWkUoc25hcHBlcmNsMTVfbmFuZF9wYXJ0cyksCisJCS5vcHRpb25zCQk9IE5BTkRfTk9fQVVUT0lOQ1IsCisJCS5jaGlwX2RlbGF5CQk9IDI1LAorCX0sCisJLmN0cmwgPSB7CisJCS5kZXZfcmVhZHkJCT0gc25hcHBlcmNsMTVfbmFuZF9kZXZfcmVhZHksCisJCS5jbWRfY3RybAkJPSBzbmFwcGVyY2wxNV9uYW5kX2NtZF9jdHJsLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNuYXBwZXJjbDE1X25hbmRfcmVzb3VyY2VbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBTTkFQUEVSQ0wxNV9OQU5EX0JBU0UsCisJCS5lbmQJCT0gU05BUFBFUkNMMTVfTkFORF9CQVNFICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNuYXBwZXJjbDE1X25hbmRfZGV2aWNlID0geworCS5uYW1lCQkJPSAiZ2VuX25hbmQiLAorCS5pZAkJCT0gLTEsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnNuYXBwZXJjbDE1X25hbmRfZGF0YSwKKwkucmVzb3VyY2UJCT0gc25hcHBlcmNsMTVfbmFuZF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKHNuYXBwZXJjbDE1X25hbmRfcmVzb3VyY2UpLAorfTsKKworc3RhdGljIHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgc25hcHBlcmNsMTVfZXRoX2RhdGEgPSB7CisJLnBoeV9pZAkJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBzbmFwcGVyY2wxNV9pMmNfZ3Bpb19kYXRhID0geworCS5zZGFfcGluCQk9IEVQOTNYWF9HUElPX0xJTkVfRUVEQVQsCisJLnNkYV9pc19vcGVuX2RyYWluCT0gMCwKKwkuc2NsX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFQ0xLLAorCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDAsCisJLnVkZWxheQkJCT0gMCwKKwkudGltZW91dAkJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHNuYXBwZXJjbDE1X2kyY19kYXRhW10gPSB7CisJeworCQkvKiBBdWRpbyBjb2RlYyAqLworCQlJMkNfQk9BUkRfSU5GTygidGx2MzIwYWljMjMiLCAweDFhKSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBlcDkzeHhmYl9tYWNoX2luZm8gc25hcHBlcmNsMTVfZmJfaW5mbyA9IHsKKwkubnVtX21vZGVzCQk9IEVQOTNYWEZCX1VTRV9NT0RFREIsCisJLmJwcAkJCT0gMTYsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc25hcHBlcmNsMTVfaW5pdF9tYWNoaW5lKHZvaWQpCit7CisJZXA5M3h4X2luaXRfZGV2aWNlcygpOworCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJnNuYXBwZXJjbDE1X2V0aF9kYXRhLCAxKTsKKwllcDkzeHhfcmVnaXN0ZXJfaTJjKCZzbmFwcGVyY2wxNV9pMmNfZ3Bpb19kYXRhLCBzbmFwcGVyY2wxNV9pMmNfZGF0YSwKKwkJCSAgICBBUlJBWV9TSVpFKHNuYXBwZXJjbDE1X2kyY19kYXRhKSk7CisJZXA5M3h4X3JlZ2lzdGVyX2ZiKCZzbmFwcGVyY2wxNV9mYl9pbmZvKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNuYXBwZXJjbDE1X25hbmRfZGV2aWNlKTsKK30KKworTUFDSElORV9TVEFSVChTTkFQUEVSX0NMMTUsICJCbHVld2F0ZXIgU3lzdGVtcyBTbmFwcGVyIENMMTUiKQorCS8qIE1haW50YWluZXI6IFJ5YW4gTWFsbG9uIDxyeWFuQGJsdWV3YXRlcnN5cy5jb20+ICovCisJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gRVA5M1hYX1NEQ0UwX1BIWVNfQkFTRSArIDB4MTAwLAorCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCisJLnRpbWVyIAkJPSAmZXA5M3h4X3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBzbmFwcGVyY2wxNV9pbml0X21hY2hpbmUsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5jCmluZGV4IDQxZmViYzcuLmUzYmMzZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY29tbW9uLmMKQEAgLTMyLDEyICszMiwxMyBAQAogCiBFWFBPUlRfU1lNQk9MKG1lbV9mY2xrXzIxMjg1KTsKIAotc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2ZjbGsoY2hhciAqKmFyZykKK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X2ZjbGsoY2hhciAqYXJnKQogewotCW1lbV9mY2xrXzIxMjg1ID0gc2ltcGxlX3N0cnRvdWwoKmFyZywgYXJnLCAwKTsKKwltZW1fZmNsa18yMTI4NSA9IHNpbXBsZV9zdHJ0b3VsKGFyZywgTlVMTCwgMCk7CisJcmV0dXJuIDA7CiB9CiAKLV9fZWFybHlfcGFyYW0oIm1lbV9mY2xrXzIxMjg1PSIsIGVhcmx5X2ZjbGspOworZWFybHlfcGFyYW0oIm1lbV9mY2xrXzIxMjg1IiwgZWFybHlfZmNsayk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHBhcnNlX3RhZ19tZW1jbGsoY29uc3Qgc3RydWN0IHRhZyAqdGFnKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDQzMjliODEuLjYwZGRhMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE1LDcgKzE1LDcgQEAKIAogI2lmbmRlZiBDT05GSUdfREVCVUdfREMyMTI4NV9QT1JUCiAJLyogRm9yIE5ldFdpbmRlciBkZWJ1Z2dpbmcgKi8KLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4N2MwMDAwMDAJQCBwaHlzaWNhbApAQCAtMzIsNyArMzIsNyBAQAogCQkuZXF1CWRjMjEyODVfaGlnaCwgQVJNQ1NSX0JBU0UgJiAweGZmMDAwMDAwCiAJCS5lcXUJZGMyMTI4NV9sb3csICBBUk1DU1JfQkFTRSAmIDB4MDBmZmZmZmYKIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHg0MjAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvZ3Bpby5jCmluZGV4IGU3MjYzODUuLmZlM2JkNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9ncGlvLmMKQEAgLTg2LDcgKzg2LDcgQEAKIAl1bnNpZ25lZCBpbnQgcmVnX2JvdGgsIHJlZ19sZXZlbCwgcmVnX3R5cGU7CiAKIAlyZWdfdHlwZSA9IF9fcmF3X3JlYWRsKGJhc2UgKyBHUElPX0lOVF9UWVBFKTsKLQlyZWdfbGV2ZWwgPSBfX3Jhd19yZWFkbChiYXNlICsgR1BJT19JTlRfQk9USF9FREdFKTsKKwlyZWdfbGV2ZWwgPSBfX3Jhd19yZWFkbChiYXNlICsgR1BJT19JTlRfTEVWRUwpOwogCXJlZ19ib3RoID0gX19yYXdfcmVhZGwoYmFzZSArIEdQSU9fSU5UX0JPVEhfRURHRSk7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKQEAgLTExNyw3ICsxMTcsNyBAQAogCX0KIAogCV9fcmF3X3dyaXRlbChyZWdfdHlwZSwgYmFzZSArIEdQSU9fSU5UX1RZUEUpOwotCV9fcmF3X3dyaXRlbChyZWdfbGV2ZWwsIGJhc2UgKyBHUElPX0lOVF9CT1RIX0VER0UpOworCV9fcmF3X3dyaXRlbChyZWdfbGV2ZWwsIGJhc2UgKyBHUElPX0lOVF9MRVZFTCk7CiAJX19yYXdfd3JpdGVsKHJlZ19ib3RoLCBiYXNlICsgR1BJT19JTlRfQk9USF9FREdFKTsKIAogCWdwaW9fYWNrX2lycShpcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBkMDRhNmVhLi5hZDQ3NzA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsNyArMTEsNyBAQAogICovCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0JLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAl0c3QJXHJ4LCAjMQkJCQkJQCBNTVUgZW5hYmxlZD8KIAlsZHJlcQlccngsID1HRU1JTklfVUFSVF9CQVNFCQkJQCBwaHlzaWNhbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggODNlNTM2ZC4uNDUzNzFlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC03LDQgKzcsNCBAQAogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jZGVmaW5lIFZNQUxMT0NfRU5ECTB4RjAwMDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQJMHhmMDAwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA2Mjk0YTEzLi5hOWVlOGYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE0LDcgKzE0LDcgQEAKIAkJLmVxdSAgICBpb192aXJ0LCBJT19CQVNFCiAJCS5lcXUgICAgaW9fcGh5cywgSU9fU1RBUlQKIAotCQkubWFjcm8gIGFkZHJ1YXJ0LHJ4CisJCS5tYWNybyAgYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjICAgICBwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdCAgICAgXHJ4LCAjMSAgCSAgICAgICBAIE1NVSBlbmFibGVkPwogCQltb3ZlcSAgIFxyeCwgI2lvX3BoeXMJICAgICAgIEAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYwppbmRleCBhMGY2MGU1Li44YjM5MGUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMKQEAgLTE0NCw4ICsxNDQsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKLQkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CisJY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtYmFfZGV2cyk7IGkrKykgewogCQlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmQgPSBhbWJhX2RldnNbaV07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggZDM0N2Q2NS4uODdhNjg4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsNyArMTEsNyBAQAogICoKICovCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4MTYwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCmluZGV4IDNmMzUyOTMuLjY2ZWY4NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwpAQCAtNTU4LDkgKzU1OCw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcF9sb29rdXBzKTsgaSsrKQotCQljbGtkZXZfYWRkKCZjcF9sb29rdXBzW2ldKTsKLQorCWNsa2Rldl9hZGRfdGFibGUoY3BfbG9va3VwcywgQVJSQVlfU0laRShjcF9sb29rdXBzKSk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoaW50Y3BfZGV2cywgQVJSQVlfU0laRShpbnRjcF9kZXZzKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA5MDM3ZDJlLi5jOWQ2YmE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSw3ICsxMSw3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0JLm1hY3JvCWFkZHJ1YXJ0LCByeAorCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJdHN0CVxyeCwgIzEJCQlAIG1tdSBlbmFibGVkPwogCW1vdmVxCVxyeCwgIzB4ZmYwMDAwMDAJQCBwaHlzaWNhbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lvLmMgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW8uYwppbmRleCA1Mjk1ODA5Li40ODY0MmU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW8uYwpAQCAtNjEsOSArNjEsOSBAQAogCQkJICAgICAgICAgKGNvb2tpZSAtIElPUDEzWFhfUENJRV9MT1dFUl9NRU1fUkEpKTsKIAkJYnJlYWs7CiAJY2FzZSBJT1AxM1hYX1BCSV9MT1dFUl9NRU1fUkEgLi4uIElPUDEzWFhfUEJJX1VQUEVSX01FTV9SQToKLQkJcmV0dmFsID0gX19hcm1faW9yZW1hcChJT1AxM1hYX1BCSV9MT1dFUl9NRU1fUEEgKworCQlyZXR2YWwgPSBfX2FybV9pb3JlbWFwX2NhbGxlcihJT1AxM1hYX1BCSV9MT1dFUl9NRU1fUEEgKwogCQkJCSAgICAgICAoY29va2llIC0gSU9QMTNYWF9QQklfTE9XRVJfTUVNX1JBKSwKLQkJCQkgICAgICAgc2l6ZSwgbXR5cGUpOworCQkJCSAgICAgICBzaXplLCBtdHlwZSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAkJYnJlYWs7CiAJY2FzZSBJT1AxM1hYX1BDSUVfTE9XRVJfSU9fUEEgLi4uIElPUDEzWFhfUENJRV9VUFBFUl9JT19QQToKIAkJcmV0dmFsID0gKHZvaWQgKikgSU9QMTNYWF9QQ0lFX0lPX1BIWVNfVE9fVklSVChjb29raWUpOwpAQCAtNzUsNyArNzUsOCBAQAogCQlyZXR2YWwgPSAodm9pZCAqKSBJT1AxM1hYX1BNTVJfUEhZU19UT19WSVJUKGNvb2tpZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHZhbCA9IF9fYXJtX2lvcmVtYXAoY29va2llLCBzaXplLCBtdHlwZSk7CisJCXJldHZhbCA9IF9fYXJtX2lvcmVtYXBfY2FsbGVyKGNvb2tpZSwgc2l6ZSwgbXR5cGUsCisJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAl9CiAKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA1OGIwMTY2Li43MzZhZmUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsNyArMTEsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotCQkubWFjcm8JYWRkcnVhcnQsIHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltb3YJXHJ4LCAjMHhmZTAwMDAwMAlAIHBoeXNpY2FsIGFzIHdlbGwgYXMgdmlydHVhbAogCQlvcnIJXHJ4LCBccngsICMweDAwODAwMDAwCUAgbG9jYXRpb24gb2YgdGhlIFVBUlQKIAkJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IDg1Y2ViMDkuLmM0ODYyZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMiw0ICsyLDQgQEAKICAqIGFyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKICAqLwogCi0jZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmUwMDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTAwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGE2MGM5ZWYuLmFkZGIyZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSw3ICsxMSw3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0JCS5tYWNybwlhZGRydWFydCwgcngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBtbXUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHhmZjAwMDAwMAlAIHBoeXNpY2FsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCBmOWY5OWRlLi40ODMzMWRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTIsNCArMiw0IEBACiAgKiBhcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCiAgKi8KIAotI2RlZmluZSBWTUFMTE9DX0VORAkweGZlMDAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmUwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDkwNGZmNTYuLjZhODI3NjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqCiAqLwogCi0JCS5tYWNybyAgYWRkcnVhcnQscngKKwkJLm1hY3JvICBhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4YzAwMDAwMDAJQCBQaHlzaWNhbCBiYXNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IGQxOTVlMzUuLjYxYzhkYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0xNyw0ICsxNyw0IEBACiAgKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKICAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKICAqLwotI2RlZmluZSBWTUFMTE9DX0VORAkgICAgMHhmYjAwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORAkgICAgMHhmYjAwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggOTA1ZGIzMS4uYTgyZTM3NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTEyLDcgKzEyLDcgQEAKICAqLwogI2luY2x1ZGUgPG1hY2gvaXhwMjN4eC5oPgogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQkJQCBtbXUgZW5hYmxlZD8KIAkJbGRyZXEJXHJ4LCA9SVhQMjNYWF9QRVJJUEhFUkFMX1BIWVMgCUAgcGh5c2ljYWwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggZGQ1MTlmNi4uODk2YzU2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTcsNCArNyw0IEBACiAgKiBzcGVjaWZpYyBzdGF0aWMgSS9PLgogICovCiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJKDB4ZWMwMDAwMDApCisjZGVmaW5lIFZNQUxMT0NfRU5ECSgweGVjMDAwMDAwVUwpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCmluZGV4IDNiYmY0MGYuLjcxNzI4ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCkBAIC00MjcsNiArNDI3LDE3IEBACiB9CiAKIC8qCisgKiBzY2hlZF9jbG9jaygpCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKQoreworCWN5Y2xlX3QgY3ljID0gaXhwNHh4X2dldF9jeWNsZXMoTlVMTCk7CisJc3RydWN0IGNsb2Nrc291cmNlICpjcyA9ICZjbG9ja3NvdXJjZV9peHA0eHg7CisKKwlyZXR1cm4gY2xvY2tzb3VyY2VfY3ljMm5zKGN5YywgY3MtPm11bHQsIGNzLT5zaGlmdCk7Cit9CisKKy8qCiAgKiBjbG9ja2V2ZW50cwogICovCiBzdGF0aWMgaW50IGl4cDR4eF9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGV2dCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggN2M2YTY5MS4uODkzODczZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTEwLDcgKzEwLDcgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogKi8KIAotICAgICAgICAgICAgICAgIC5tYWNybyAgYWRkcnVhcnQscngKKyAgICAgICAgICAgICAgICAubWFjcm8gIGFkZHJ1YXJ0LCByeCwgdG1wCiAgICAgICAgICAgICAgICAgbXJjICAgICBwMTUsIDAsIFxyeCwgYzEsIGMwCiAgICAgICAgICAgICAgICAgdHN0ICAgICBccngsICMxICAgICAgICAgICAgICAgICBAIE1NVSBlbmFibGVkPwogICAgICAgICAgICAgICAgIG1vdmVxICAgXHJ4LCAjMHhjODAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggN2IzNTgwYi4uOWJjZDY0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKICAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKICAqLwotI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhGRjAwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKDB4ZmYwMDAwMDBVTCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggYTRhNTVjMS4uZDA2MDY3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC04LDcgKzgsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9icmlkZ2UtcmVncy5oPgogCi0JLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAl0c3QJXHJ4LCAjMQkJCQkJQCBNTVUgZW5hYmxlZD8KIAlsZHJlcQlccngsID1LSVJLV09PRF9SRUdTX1BIWVNfQkFTRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IDhmNDgyNjAuLmJmMTYyY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTIsNCArMiw0IEBACiAgKiBhcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKICAqLwogCi0jZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmU4MDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTgwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDM3ODJjMzUuLmNmMjA5NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy11YXJ0Lmg+CiAKLQkubWFjcm8JYWRkcnVhcnQsIHJ4CisJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJCUAgTU1VIGVuYWJsZWQ/CiAJCWxkcmVxCVxyeCwgPUtTODY5NV9VQVJUX1BBCQlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggMzRlZWQyYS4uYjY5ZWQzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xNCw3ICsxNCw3IEBACiAJCS5lcXUJaW9fdmlydCwgSU9fQkFTRQogCQkuZXF1CWlvX3BoeXMsIElPX1NUQVJUCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgI2lvX3BoeXMJCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggODUxNDFlZC4uYzBkY2JiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTQsNyArMTQsNyBAQAogCUAgSXQgaXMgbm90IGtub3duIGlmIHRoaXMgd2lsbCBiZSBhcHByb3ByaWF0ZSBmb3IgZXZlcnkgNDB4CiAJQCBib2FyZC4KIAotCQkubWFjcm8gIGFkZHJ1YXJ0LHJ4CisJCS5tYWNybyAgYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjICAgICBwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdCAgICAgXHJ4LCAjMSAgICAgICAgICAgICAgICAgQCBNTVUgZW5hYmxlZD8KIAkJbW92ICAgICBccngsICMweDAwMDAwNzAwICAgICAgICBAIG9mZnNldCBmcm9tIGJhc2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggM2ZiZDQ5NC4uZDYyZGE3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTcsNCArNyw0IEBACiAgKiAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqLwotI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhlODAwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKDB4ZTgwMDAwMDBVTCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBhOGMyMGJkLi4zMTM2YzkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxva2kvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC04LDcgKzgsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9sb2tpLmg+CiAKLQkubWFjcm8JYWRkcnVhcnQscngKKwkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCXRzdAlccngsICMxCQkJCQlAIE1NVSBlbmFibGVkPwogCWxkcmVxCVxyeCwgPUxPS0lfUkVHU19QSFlTX0JBU0UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggOGRjM2JmYy4uNWRjYmQ4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTIsNCArMiw0IEBACiAgKiBhcmNoL2FybS9tYWNoLWxva2kvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAogICovCiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTgwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORAkweGZlODAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW1tcC9jbG9jay5jCmluZGV4IDJhNDZlZDUuLjg4NmUwNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suYwpAQCAtODgsMTEgKzg4LDMgQEAKIAlyZXR1cm4gcmF0ZTsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKLQotdm9pZCBjbGtzX3JlZ2lzdGVyKHN0cnVjdCBjbGtfbG9va3VwICpjbGtzLCBzaXplX3QgbnVtKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQotCQljbGtkZXZfYWRkKCZjbGtzW2ldKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW1tcC9jbG9jay5oCmluZGV4IGVlZmZmYmUuLjAxNmFlOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suaApAQCAtNjgsNSArNjgsMyBAQAogCiBleHRlcm4gc3RydWN0IGNsayBjbGtfcHhhMTY4X2dwaW87CiBleHRlcm4gc3RydWN0IGNsayBjbGtfcHhhMTY4X3RpbWVyczsKLQotZXh0ZXJuIHZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqLCBzaXplX3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBhODUwZjg3Li43NmRlZmYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsNyArMTEsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQkJQCBNTVUgZW5hYmxlZD8KIAkJbGRyZXEJXHJ4LCA9QVBCX1BIWVNfQkFTRQkJQCBwaHlzaWNhbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggYjYwY2NhZi4uMWQwYmFjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0yLDQgKzIsNCBAQAogICogbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAogICovCiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTAwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORAkweGZlMDAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL3B4YTE2OC5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvcHhhMTY4LmMKaW5kZXggMzdkYmRkZS4uMTg3M2M4MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvcHhhMTY4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvcHhhMTY4LmMKQEAgLTk0LDcgKzk0LDcgQEAKIAkJbWZwX2luaXRfYmFzZShNRlBSX1ZJUlRfQkFTRSk7CiAJCW1mcF9pbml0X2FkZHIocHhhMTY4X21mcF9hZGRyX21hcCk7CiAJCXB4YV9pbml0X2RtYShJUlFfUFhBMTY4X0RNQV9JTlQwLCAzMik7Ci0JCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUocHhhMTY4X2Nsa3JlZ3MpKTsKKwkJY2xrZGV2X2FkZF90YWJsZShBUlJBWV9BTkRfU0laRShweGExNjhfY2xrcmVncykpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvcHhhOTEwLmMgYi9hcmNoL2FybS9tYWNoLW1tcC9weGE5MTAuYwppbmRleCBkNDA0OTUwLi40NmYyZDY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9weGE5MTAuYworKysgYi9hcmNoL2FybS9tYWNoLW1tcC9weGE5MTAuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJCW1mcF9pbml0X2Jhc2UoTUZQUl9WSVJUX0JBU0UpOwogCQltZnBfaW5pdF9hZGRyKHB4YTkxMF9tZnBfYWRkcl9tYXApOwogCQlweGFfaW5pdF9kbWEoSVJRX1BYQTkxMF9ETUFfSU5UMCwgMzIpOwotCQljbGtzX3JlZ2lzdGVyKEFSUkFZX0FORF9TSVpFKHB4YTkxMF9jbGtyZWdzKSk7CisJCWNsa2Rldl9hZGRfdGFibGUoQVJSQVlfQU5EX1NJWkUocHhhOTEwX2Nsa3JlZ3MpKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggZDQ4NzQ3ZS4uNTI4NzUwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlIDxtYWNoL21zbV9pb21hcC5oPgogCiAjaWZkZWYgQ09ORklHX01TTV9ERUJVR19VQVJUCi0JLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJQCBzZWUgaWYgdGhlIE1NVSBpcyBlbmFibGVkIGFuZCBzZWxlY3QgYXBwcm9wcmlhdGUgYmFzZSBhZGRyZXNzCiAJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAl0c3QJXHJ4LCAjMQpAQCAtNDAsNyArNDAsNyBAQAogCWJlcQkxMDAxYgogCS5lbmRtCiAjZWxzZQotCS5tYWNybwlhZGRydWFydCxyeAorCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCS5lbmRtCiAKIAkubWFjcm8Jc2VuZHVhcnQscmQscngKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2lvLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9pby5jCmluZGV4IDFjNWU3ZGEuLjA1Zjk2YjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW8uYwpAQCAtNzYsNSArNzYsNiBAQAogCQkJbXR5cGUgPSBNVF9ERVZJQ0VfTk9OU0hBUkVEOwogCX0KIAotCXJldHVybiBfX2FybV9pb3JlbWFwKHBoeXNfYWRkciwgc2l6ZSwgbXR5cGUpOworCXJldHVybiBfX2FybV9pb3JlbWFwX2NhbGxlcihwaHlzX2FkZHIsIHNpemUsIG10eXBlLAorCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGEwNjQ0MmYuLmNkODE2ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTgsNyArOCw3IEBACiAKICNpbmNsdWRlIDxtYWNoL212Nzh4eDAuaD4KIAotCS5tYWNybwlhZGRydWFydCxyeAorCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJdHN0CVxyeCwgIzEJCQkJCUAgTU1VIGVuYWJsZWQ/CiAJbGRyZXEJXHJ4LCA9TVY3OFhYMF9SRUdTX1BIWVNfQkFTRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCAxYzQ5NTQzLi5iYTI2ZmU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMiw0ICsyLDQgQEAKICAqIGFyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCiAgKi8KIAotI2RlZmluZSBWTUFMTE9DX0VORAkweGZlMDAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmUwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbXgxL2Nsb2NrLmMKaW5kZXggZDFiNTg4NS4uNmNmMmQ0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDEvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW14MS9jbG9jay5jCkBAIC01NzAsNyArNTcwLDYgQEAKIGludCBfX2luaXQgbXgxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKIHsKIAl1bnNpZ25lZCBpbnQgcmVnOwotCWludCBpOwogCiAJLyogZGlzYWJsZSBjbG9ja3Mgd2UgYXJlIGFibGUgdG8gKi8KIAlfX3Jhd193cml0ZWwoMCwgU0NNX0dDQ1IpOwpAQCAtNTkyLDggKzU5MSw3IEBACiAJcmVnID0gKHJlZyAmIENDTV9DU0NSX0NMS09fTUFTSykgPj4gQ0NNX0NTQ1JfQ0xLT19PRkZTRVQ7CiAJY2xrb19jbGsucGFyZW50ID0gKHN0cnVjdCBjbGsgKiljbGtvX2Nsb2Nrc1tyZWddOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKLQkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CisJY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKIAogCWNsa19lbmFibGUoJmhjbGspOwogCWNsa19lbmFibGUoJmZjbGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjEuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDIxLmMKaW5kZXggOTE5MDFiNS4uZTgyYjQ4OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjEuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyMS5jCkBAIC05NjgsNyArOTY4LDYgQEAKICAqLwogaW50IF9faW5pdCBteDIxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgbHJlZiwgdW5zaWduZWQgbG9uZyBocmVmKQogewotCWludCBpOwogCXUzMiBjc2NyOwogCiAJZXh0ZXJuYWxfbG93X3JlZmVyZW5jZSA9IGxyZWY7CkBAIC05ODYsOCArOTg1LDcgQEAKIAllbHNlCiAJCXNwbGxfY2xrLnBhcmVudCA9ICZmcG1fY2xrOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKLQkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CisJY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKIAogCS8qIFR1cm4gb2ZmIGFsbCBjbG9jayBnYXRlcyAqLwogCV9fcmF3X3dyaXRlbCgwLCBDQ01fUENDUjApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKaW5kZXggYjAxMGJmOS4uMThjNTNhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCkBAIC03MTksNyArNzE5LDYgQEAKIGludCBfX2luaXQgbXgyN19jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpCiB7CiAJdTMyIGNzY3IgPSBfX3Jhd19yZWFkbChDQ01fQ1NDUik7Ci0JaW50IGk7CiAKIAlleHRlcm5hbF9oaWdoX3JlZmVyZW5jZSA9IGZyZWY7CiAKQEAgLTczNiw4ICs3MzUsNyBAQAogCiAJdG8yX2FkanVzdF9jbG9ja3MoKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAKIAkvKiBUdXJuIG9mZiBhbGwgY2xvY2tzIHdlIGRvIG5vdCBuZWVkICovCiAJX19yYXdfd3JpdGVsKDAsIENDTV9QQ0NSMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbXgyNS9jbG9jay5jCmluZGV4IDZlODM4YjguLjM3ZTEzNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyNS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9jbG9jay5jCkBAIC0xMTksNiArMTE5LDExIEBACiAJcmV0dXJuIGdldF9yYXRlX3Blcig4KTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfZ3B0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZ2V0X3JhdGVfcGVyKDUpOworfQorCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9vdGcoc3RydWN0IGNsayAqY2xrKQogewogCXJldHVybiA0ODAwMDAwMDsgLyogRklYTUUgKi8KQEAgLTE0NCw3ICsxNDksNyBAQAogCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0NMT0NLKG5hbWUsIGksIGVyLCBlcywgZ3IsIHNyKQkJXAorI2RlZmluZSBERUZJTkVfQ0xPQ0sobmFtZSwgaSwgZXIsIGVzLCBnciwgc3IsIHMpCVwKIAlzdGF0aWMgc3RydWN0IGNsayBuYW1lID0gewkJCVwKIAkJLmlkCQk9IGksCQkJXAogCQkuZW5hYmxlX3JlZwk9IENSTV9CQVNFICsgZXIsCVwKQEAgLTE1MywyNyArMTU4LDMwIEBACiAJCS5zZXRfcmF0ZQk9IHNyLAkJCVwKIAkJLmVuYWJsZQkJPSBjbGtfY2djcl9lbmFibGUsCVwKIAkJLmRpc2FibGUJPSBjbGtfY2djcl9kaXNhYmxlLAlcCisJCS5zZWNvbmRhcnkJPSBzLAkJCVwKIAl9CiAKLURFRklORV9DTE9DSyhncHRfY2xrLCAgICAwLCBDQ01fQ0dDUjAsICA1LCBnZXRfcmF0ZV9pcGcsIE5VTEwpOwotREVGSU5FX0NMT0NLKGNzcGkxX2NsaywgIDAsIENDTV9DR0NSMSwgIDUsIGdldF9yYXRlX2lwZywgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0soY3NwaTJfY2xrLCAgMCwgQ0NNX0NHQ1IxLCAgNiwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKLURFRklORV9DTE9DSyhjc3BpM19jbGssICAwLCBDQ01fQ0dDUjEsICA3LCBnZXRfcmF0ZV9pcGcsIE5VTEwpOwotREVGSU5FX0NMT0NLKHVhcnQxX2NsaywgIDAsIENDTV9DR0NSMiwgMTQsIGdldF9yYXRlX3VhcnQsIE5VTEwpOwotREVGSU5FX0NMT0NLKHVhcnQyX2NsaywgIDAsIENDTV9DR0NSMiwgMTUsIGdldF9yYXRlX3VhcnQsIE5VTEwpOwotREVGSU5FX0NMT0NLKHVhcnQzX2NsaywgIDAsIENDTV9DR0NSMiwgMTYsIGdldF9yYXRlX3VhcnQsIE5VTEwpOwotREVGSU5FX0NMT0NLKHVhcnQ0X2NsaywgIDAsIENDTV9DR0NSMiwgMTcsIGdldF9yYXRlX3VhcnQsIE5VTEwpOwotREVGSU5FX0NMT0NLKHVhcnQ1X2NsaywgIDAsIENDTV9DR0NSMiwgMTgsIGdldF9yYXRlX3VhcnQsIE5VTEwpOwotREVGSU5FX0NMT0NLKG5mY19jbGssICAgIDAsIENDTV9DR0NSMCwgIDgsIGdldF9yYXRlX25mYywgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0sodXNib3RnX2NsaywgMCwgQ0NNX0NHQ1IwLCAyOCwgZ2V0X3JhdGVfb3RnLCBOVUxMKTsKLURFRklORV9DTE9DSyhwd20xX2NsaywJIDAsIENDTV9DR0NSMSwgMzEsIGdldF9yYXRlX2lwZywgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0socHdtMl9jbGssCSAwLCBDQ01fQ0dDUjIsICAwLCBnZXRfcmF0ZV9pcGcsIE5VTEwpOwotREVGSU5FX0NMT0NLKHB3bTNfY2xrLAkgMCwgQ0NNX0NHQ1IyLCAgMSwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKLURFRklORV9DTE9DSyhwd200X2NsaywJIDAsIENDTV9DR0NSMiwgIDIsIGdldF9yYXRlX2lwZywgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0soa3BwX2NsaywJIDAsIENDTV9DR0NSMSwgMjgsIGdldF9yYXRlX2lwZywgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0sodHNjX2NsaywJIDAsIENDTV9DR0NSMiwgMTMsIGdldF9yYXRlX2lwZywgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0soaTJjX2NsaywJIDAsIENDTV9DR0NSMCwgIDYsIGdldF9yYXRlX2kyYywgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0soZmVjX2NsaywJIDAsIENDTV9DR0NSMCwgMjMsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soZ3B0X2NsaywgICAgMCwgQ0NNX0NHQ1IwLCAgNSwgZ2V0X3JhdGVfZ3B0LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyh1YXJ0X3Blcl9jbGssIDAsIENDTV9DR0NSMCwgMTUsIGdldF9yYXRlX3VhcnQsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGNzcGkxX2NsaywgIDAsIENDTV9DR0NSMSwgIDUsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soY3NwaTJfY2xrLCAgMCwgQ0NNX0NHQ1IxLCAgNiwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhjc3BpM19jbGssICAwLCBDQ01fQ0dDUjEsICA3LCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGZlY19haGJfY2xrLCAwLCBDQ01fQ0dDUjAsIDIzLCBOVUxMLAkgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0sodWFydDFfY2xrLCAgMCwgQ0NNX0NHQ1IyLCAxNCwgZ2V0X3JhdGVfdWFydCwgTlVMTCwgJnVhcnRfcGVyX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDJfY2xrLCAgMCwgQ0NNX0NHQ1IyLCAxNSwgZ2V0X3JhdGVfdWFydCwgTlVMTCwgJnVhcnRfcGVyX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDNfY2xrLCAgMCwgQ0NNX0NHQ1IyLCAxNiwgZ2V0X3JhdGVfdWFydCwgTlVMTCwgJnVhcnRfcGVyX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDRfY2xrLCAgMCwgQ0NNX0NHQ1IyLCAxNywgZ2V0X3JhdGVfdWFydCwgTlVMTCwgJnVhcnRfcGVyX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDVfY2xrLCAgMCwgQ0NNX0NHQ1IyLCAxOCwgZ2V0X3JhdGVfdWFydCwgTlVMTCwgJnVhcnRfcGVyX2Nsayk7CitERUZJTkVfQ0xPQ0sobmZjX2NsaywgICAgMCwgQ0NNX0NHQ1IwLCAgOCwgZ2V0X3JhdGVfbmZjLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyh1c2JvdGdfY2xrLCAwLCBDQ01fQ0dDUjAsIDI4LCBnZXRfcmF0ZV9vdGcsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKHB3bTFfY2xrLAkgMCwgQ0NNX0NHQ1IxLCAzMSwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhwd20yX2NsaywJIDAsIENDTV9DR0NSMiwgIDAsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0socHdtM19jbGssCSAwLCBDQ01fQ0dDUjIsICAxLCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKHB3bTRfY2xrLAkgMCwgQ0NNX0NHQ1IyLCAgMiwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhrcHBfY2xrLAkgMCwgQ0NNX0NHQ1IxLCAyOCwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyh0c2NfY2xrLAkgMCwgQ0NNX0NHQ1IyLCAxMywgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhpMmNfY2xrLAkgMCwgQ0NNX0NHQ1IwLCAgNiwgZ2V0X3JhdGVfaTJjLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhmZWNfY2xrLAkgMCwgQ0NNX0NHQ1IxLCAxNSwgZ2V0X3JhdGVfaXBnLCBOVUxMLCAmZmVjX2FoYl9jbGspOwogCiAjZGVmaW5lIF9SRUdJU1RFUl9DTE9DSyhkLCBuLCBjKQlcCiAJewkJCQlcCkBAIC0yMDgsMTIgKzIxNiwxNyBAQAogCV9SRUdJU1RFUl9DTE9DSygiZmVjLjAiLCBOVUxMLCBmZWNfY2xrKQogfTsKIAotaW50IF9faW5pdCBteDI1X2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKK2ludCBfX2luaXQgbXgyNV9jbG9ja3NfaW5pdCh2b2lkKQogewotCWludCBpOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQotCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKwkvKiBUdXJuIG9mZiBhbGwgY2xvY2tzIGV4Y2VwdCB0aGUgb25lcyB3ZSBuZWVkIHRvIHN1cnZpdmUsIG5hbWVseToKKwkgKiBFTUksIEdQSU8xLTMgKENDTV9DR0NSMVsxODoxNl0pLCBHUFQxLCBJT01VWEMgKENDTV9DR0NSMVsyN10pLCBJSU0sCisJICogU0NDCisJICovCisJX19yYXdfd3JpdGVsKCgxIDw8IDE5KSwgQ1JNX0JBU0UgKyBDQ01fQ0dDUjApOworCV9fcmF3X3dyaXRlbCgoMHhmIDw8IDE2KSB8ICgzIDw8IDI2KSwgQ1JNX0JBU0UgKyBDQ01fQ0dDUjEpOworCV9fcmF3X3dyaXRlbCgoMSA8PCA1KSwgQ1JNX0JBU0UgKyBDQ01fQ0dDUjIpOwogCiAJbXhjX3RpbWVyX2luaXQoJmdwdF9jbGssIE1YMjVfSU9fQUREUkVTUyhNWDI1X0dQVDFfQkFTRV9BRERSKSwgNTQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYwppbmRleCA5MjFiYzk5Li42ZjA2MDg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfdGltZXJfaW5pdCh2b2lkKQogewotCW14MjVfY2xvY2tzX2luaXQoMjYwMDAwMDApOworCW14MjVfY2xvY2tzX2luaXQoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXgyNXBka190aW1lciA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCmluZGV4IDc1ODRiNGMuLmYzZjQxZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwpAQCAtNDg1LDE1ICs0ODUsMTMgQEAKIAogaW50IF9faW5pdCBteDM1X2Nsb2Nrc19pbml0KCkKIHsKLQlpbnQgaTsKIAl1bnNpZ25lZCBpbnQgbGwgPSAwOwogCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfTEwpICYmICFkZWZpbmVkKENPTkZJR19ERUJVR19JQ0VEQ0MpCiAJbGwgPSAoMyA8PCAxNik7CiAjZW5kaWYKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAKIAkvKiBUdXJuIG9mZiBhbGwgY2xvY2tzIGV4Y2VwdCB0aGUgb25lcyB3ZSBuZWVkIHRvIHN1cnZpdmUsIG5hbWVseToKIAkgKiBFTUksIEdQSU8xLzIvMywgR1BULCBJT01VWCwgTUFYIGFuZCBldmVudHVhbGx5IHVhcnQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCmluZGV4IDI3YTMxOGEuLmI1YzM5YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYwpAQCAtNTc4LDEyICs1NzgsMTAgQEAKIGludCBfX2luaXQgbXgzMV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpCiB7CiAJdTMyIHJlZzsKLQlpbnQgaTsKIAogCWNraWhfcmF0ZSA9IGZyZWY7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQotCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKwljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwogCiAJLyogY2hhbmdlIHRoZSBjc2lfY2xrIHBhcmVudCBpZiBuZWNlc3NhcnkgKi8KIAlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NDTVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWFkcy5jCmluZGV4IDNlN2JhZmEuLjkzOGM1NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxYWRzLmMKQEAgLTE3Myw2ICsxNzMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGV4cGlvX2lycV9jaGlwID0geworCS5uYW1lID0gIkVYUElPKENQTEQpIiwKIAkuYWNrID0gZXhwaW9fYWNrX2lycSwKIAkubWFzayA9IGV4cGlvX21hc2tfaXJxLAogCS51bm1hc2sgPSBleHBpb191bm1hc2tfaXJxLApAQCAtMzAyLDYgKzMwMyw3IEBACiAJCS5taW5fdVYgPSAyODAwMDAwLAogCQkubWF4X3VWID0gMjgwMDAwMCwKIAkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAogCQkuYXBwbHlfdVYgPSAxLAogCX0sCiB9OwpAQCAtMzIyLDYgKzMyNCw3IEBACiAJCS5taW5fdVYgPSAzMzAwMDAwLAogCQkubWF4X3VWID0gMzMwMDAwMCwKIAkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAogCQkuYXBwbHlfdVYgPSAxLAogCX0sCiAJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUobGRvMl9jb25zdW1lcnMpLApAQCAtNDU5LDYgKzQ2Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgd204MzUwX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBteDMxX3dtODM1MF9wZGF0YSA9IHsKIAkuaW5pdCA9IG14MzFfd204MzUwX2luaXQsCisJLmlycV9iYXNlID0gTVhDX0JPQVJEX0lSUV9TVEFSVCArIE1YQ19NQVhfRVhQX0lPX0xJTkVTLAogfTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2Nsb2NrLmMKaW5kZXggZWNmYTM3Zi4uNWM4NTA3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvY2xvY2suYwpAQCAtNjI0LDcgKzYyNCw2IEBACiBpbnQgX19pbml0IG14YzkxMjMxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKIHsKIAl2b2lkIF9faW9tZW0gKmdwdF9iYXNlOwotCWludCBpOwogCiAJY2tpaF9yYXRlID0gZnJlZjsKIApAQCAtNjMyLDggKzYzMSw3IEBACiAJc2RoY19jbGtbMF0ucGFyZW50ID0gY2xrX3NkaGNfcGFyZW50KCZzZGhjX2Nsa1swXSk7CiAJc2RoY19jbGtbMV0ucGFyZW50ID0gY2xrX3NkaGNfcGFyZW50KCZzZGhjX2Nsa1sxXSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQotCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKwljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwogCiAJZ3B0X2Jhc2UgPSBNWEM5MTIzMV9JT19BRERSRVNTKE1YQzkxMjMxX0dQVDFfQkFTRV9BRERSKTsKIAlteGNfdGltZXJfaW5pdCgmZ3B0X2NsaywgZ3B0X2Jhc2UsIE1YQzkxMjMxX0lOVF9HUFQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDExYjlkNWIuLmU5NjMzOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTEzLDcgKzEzLDcgQEAKIAogI2luY2x1ZGUgImhhcmR3YXJlLmgiCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4MDAxMDAwMDAJCUAgcGh5c2ljYWwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9jcHUtODgxNS5jIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMKaW5kZXggZjkzYzU5Ni4uOWJmMzNiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMKQEAgLTg2LDExICs4NiwxOSBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlIGNwdTg4MTVfYW1iYV9ybmcgPSB7CisJLmRldiA9IHsKKwkJLmluaXRfbmFtZSA9ICJybmciLAorCX0sCisJX19NRU1fNEtfUkVTT1VSQ0UoTk9NQURJS19STkdfQkFTRSksCit9OworCiBzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewogCWNwdTg4MTVfYW1iYV9ncGlvICsgMCwKIAljcHU4ODE1X2FtYmFfZ3BpbyArIDEsCiAJY3B1ODgxNV9hbWJhX2dwaW8gKyAyLAogCWNwdTg4MTVfYW1iYV9ncGlvICsgMywKKwkmY3B1ODgxNV9hbWJhX3JuZwogfTsKIAogc3RhdGljIGludCBfX2luaXQgY3B1ODgxNV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggZTg3Njk5MC4uNGY5MmFjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTAsNyArMTAsNyBAQAogICoKICovCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4MTAwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggYmUxMmUzMS4uZjgzZDU3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTEsMiArMSwyIEBACiAKLSNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgMHhlODAwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAweGU4MDAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggYzk1MzBmYi4uMDg1OTMzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvcmVncy1ib2FyZC1hOW05NzUwZGV2Lmg+CiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQogCQlsZHJlcQlccngsID1OUzlYWFhfQ1N4U1RBVF9QSFlTKDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCBmZTk2NGQzLi5jODY1MTk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTExLDYgKzExLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9WTUFMTE9DX0gKICNkZWZpbmUgX19BU01fQVJDSF9WTUFMTE9DX0gKIAotI2RlZmluZSBWTUFMTE9DX0VORCAgICAgKDB4ZjAwMDAwMDApCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAoMHhmMDAwMDAwMFVMKQogCiAjZW5kaWYgLyogaWZuZGVmIF9fQVNNX0FSQ0hfVk1BTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmM0MGEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvS2NvbmZpZwpAQCAtMCwwICsxLDE5IEBACitpZiBBUkNIX05VQzkzWAorCitjb25maWcgQ1BVX05VQzkzMgorCWJvb2wKKwloZWxwCisJICBTdXBwb3J0IGZvciBOVUM5MzIgb2YgTnV2b3RvbiBOVUM5M1ggQ1BVcy4KKworbWVudSAiTlVDOTMyIE1hY2hpbmVzIgorCitjb25maWcgTUFDSF9OVUM5MzJFVkIKKwlib29sICJOdXZvdG9uIE5VQzkzMiBFdmFsdWF0aW9uIEJvYXJkIgorCWRlZmF1bHQgeQorCXNlbGVjdCBDUFVfTlVDOTMyCisJaGVscAorCSAgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTnV2b3RvbiBOVUM5MzJFVkIKKworZW5kbWVudQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDBlMmRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvTWFrZWZpbGUKQEAgLTAsMCArMSwxNCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworIyBPYmplY3QgZmlsZSBsaXN0cy4KKworb2JqLXkJCQkJOj0gaXJxLm8gdGltZS5vIGRldi5vIGNwdS5vIGNsb2NrLm8KKyMgTlVDOTMyIENQVSBzdXBwb3J0IGZpbGVzCisKK29iai0kKENPTkZJR19DUFVfTlVDOTMyKQkrPSBudWM5MzIubworCisjIG1hY2hpbmUgc3VwcG9ydAorCitvYmotJChDT05GSUdfTUFDSF9OVUM5MzJFVkIpCSs9IG1hY2gtbnVjOTMyZXZiLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNTdiNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMyBAQAorenJlbGFkZHIteQk6PSAweDAwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4MDAwMDAxMDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUyMWVmYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2Nsb2NrLmMKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbnVjOTN4L2Nsb2NrLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKworc3RhdGljIERFRklORV9TUElOTE9DSyhjbG9ja3NfbG9jayk7CisKK2ludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJaWYgKGNsay0+ZW5hYmxlZCsrID09IDApCisJCShjbGstPmVuYWJsZSkoY2xrLCAxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJV0FSTl9PTihjbGstPmVuYWJsZWQgPT0gMCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlpZiAoLS1jbGstPmVuYWJsZWQgPT0gMCkKKwkJKGNsay0+ZW5hYmxlKShjbGssIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKKwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAyNzAwMDAwMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKKwordm9pZCBudWM5M3hfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IGNsb2NrcyA9IGNsay0+Y2tlbjsKKwl1bnNpZ25lZCBsb25nIGNsa2VuOworCisJY2xrZW4gPSBfX3Jhd19yZWFkbChOVUM5M1hfVkFfQ0xLUFdSKTsKKworCWlmIChlbmFibGUpCisJCWNsa2VuIHw9IGNsb2NrczsKKwllbHNlCisJCWNsa2VuICY9IH5jbG9ja3M7CisKKwlfX3Jhd193cml0ZWwoY2xrZW4sIE5VQzkzWF9WQV9DTEtQV1IpOworfQorCit2b2lkIGNsa3NfcmVnaXN0ZXIoc3RydWN0IGNsa19sb29rdXAgKmNsa3MsIHNpemVfdCBudW0pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCisJCWNsa2Rldl9hZGQoJmNsa3NbaV0pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlNTFiZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2Nsb2NrLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbnVjOTN4L2Nsb2NrLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorCit2b2lkIG51YzkzeF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSk7Cit2b2lkIGNsa3NfcmVnaXN0ZXIoc3RydWN0IGNsa19sb29rdXAgKmNsa3MsIHNpemVfdCBudW0pOworCitzdHJ1Y3QgY2xrIHsKKwl1bnNpZ25lZCBsb25nCQlja2VuOworCXVuc2lnbmVkIGludAkJZW5hYmxlZDsKKwl2b2lkCQkJKCplbmFibGUpKHN0cnVjdCBjbGsgKiwgaW50IGVuYWJsZSk7Cit9OworCisjZGVmaW5lIERFRklORV9DTEsoX25hbWUsIF9jdHJsYml0KQkJCVwKK3N0cnVjdCBjbGsgY2xrXyMjX25hbWUgPSB7CQkJCVwKKwkJLmVuYWJsZQk9IG51YzkzeF9jbGtfZW5hYmxlLAkJXAorCQkuY2tlbgk9ICgxIDw8IF9jdHJsYml0KSwJCVwKKwl9CisKKyNkZWZpbmUgREVGX0NMS0xPT0soX2NsaywgX2Rldm5hbWUsIF9jb25uYW1lKQkJXAorCXsJCQkJCQlcCisJCS5jbGsJCT0gX2NsaywJCQlcCisJCS5kZXZfaWQJCT0gX2Rldm5hbWUsCQlcCisJCS5jb25faWQJCT0gX2Nvbm5hbWUsCQlcCisJfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9jcHUuYyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZmY1ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9jcHUuYwpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbnVjOTN4L2NwdS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE51dm90b24gY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIE5VQzkzeCBzZXJpZXMgY3B1IGNvbW1vbiBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWViaS5oPgorCisjaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKworLyogSW5pdGlhbCBJTyBtYXBwaW5ncyAqLworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG51YzkzeF9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworCUlPREVTQ19FTlQoSVJRKSwKKwlJT0RFU0NfRU5UKEdDUiksCisJSU9ERVNDX0VOVChVQVJUKSwKKwlJT0RFU0NfRU5UKFRJTUVSKSwKKwlJT0RFU0NfRU5UKEVCSSksCit9OworCisvKiBJbml0aWFsIG51YzkzMiBjbG9jayBkZWNsYXJhdGlvbnMuICovCitzdGF0aWMgREVGSU5FX0NMSyhhdWRpbywgMik7CitzdGF0aWMgREVGSU5FX0NMSyhzZCwgMyk7CitzdGF0aWMgREVGSU5FX0NMSyhqcGcsIDQpOworc3RhdGljIERFRklORV9DTEsodmlkZW8sIDUpOworc3RhdGljIERFRklORV9DTEsodnBvc3QsIDYpOworc3RhdGljIERFRklORV9DTEsoMmQsIDcpOworc3RhdGljIERFRklORV9DTEsoZ3B1LCA4KTsKK3N0YXRpYyBERUZJTkVfQ0xLKGdkbWEsIDkpOworc3RhdGljIERFRklORV9DTEsoYWRjLCAxMCk7CitzdGF0aWMgREVGSU5FX0NMSyh1YXJ0LCAxMSk7CitzdGF0aWMgREVGSU5FX0NMSyhzcGksIDEyKTsKK3N0YXRpYyBERUZJTkVfQ0xLKHB3bSwgMTMpOworc3RhdGljIERFRklORV9DTEsodGltZXIsIDE0KTsKK3N0YXRpYyBERUZJTkVfQ0xLKHdkdCwgMTUpOworc3RhdGljIERFRklORV9DTEsoYWM5NywgMTYpOworc3RhdGljIERFRklORV9DTEsoaTJzLCAxNik7CitzdGF0aWMgREVGSU5FX0NMSyh1c2JjaywgMTcpOworc3RhdGljIERFRklORV9DTEsodXNiNDgsIDE4KTsKK3N0YXRpYyBERUZJTkVfQ0xLKHVzYmgsIDE5KTsKK3N0YXRpYyBERUZJTkVfQ0xLKGkyYywgMjApOworc3RhdGljIERFRklORV9DTEsoZXh0LCAwKTsKKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIG51YzkzMl9jbGtyZWdzW10gPSB7CisgICAgICAgREVGX0NMS0xPT0soJmNsa19hdWRpbywgIm51YzkzMi1hdWRpbyIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfc2QsICJudWM5MzItc2QiLCBOVUxMKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX2pwZywgIm51YzkzMi1qcGciLCAiTlVMTCIpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfdmlkZW8sICJudWM5MzItdmlkZW8iLCAiTlVMTCIpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfdnBvc3QsICJudWM5MzItdnBvc3QiLCBOVUxMKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrXzJkLCAibnVjOTMyLTJkIiwgTlVMTCksCisgICAgICAgREVGX0NMS0xPT0soJmNsa19ncHUsICJudWM5MzItZ3B1IiwgTlVMTCksCisgICAgICAgREVGX0NMS0xPT0soJmNsa19nZG1hLCAibnVjOTMyLWdkbWEiLCAiTlVMTCIpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfYWRjLCAibnVjOTMyLWFkYyIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfdWFydCwgTlVMTCwgInVhcnQiKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX3NwaSwgIm51YzkzMi1zcGkiLCBOVUxMKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX3B3bSwgIm51YzkzMi1wd20iLCBOVUxMKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX3RpbWVyLCBOVUxMLCAidGltZXIiKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX3dkdCwgIm51YzkzMi13ZHQiLCBOVUxMKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX2FjOTcsICJudWM5MzItYWM5NyIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfaTJzLCAibnVjOTMyLWkycyIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfdXNiY2ssICJudWM5MzItdXNiY2siLCBOVUxMKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX3VzYjQ4LCAibnVjOTMyLXVzYjQ4IiwgTlVMTCksCisgICAgICAgREVGX0NMS0xPT0soJmNsa191c2JoLCAibnVjOTMyLXVzYmgiLCBOVUxMKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX2kyYywgIm51YzkzMi1pMmMiLCBOVUxMKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX2V4dCwgTlVMTCwgImV4dCIpLAorfTsKKworLyogSW5pdGlhbCBzZXJpYWwgcGxhdGZvcm0gZGF0YSAqLworCitzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgbnVjOTN4X3VhcnRfZGF0YVtdID0geworCU5VQzkzWF84MjUwUE9SVChVQVJUMCksCisJe30sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkzeF9zZXJpYWxfZGV2aWNlID0geworCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQkJPSBQTEFUODI1MF9ERVZfUExBVEZPUk0sCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IG51YzkzeF91YXJ0X2RhdGEsCisJfSwKK307CisKKy8qSW5pdCBOVUM5M3ggZXZiIGlvKi8KKwordm9pZCBfX2luaXQgbnVjOTN4X21hcF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IG1hY2hfc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGlkY29kZSA9IDB4MDsKKworCWlvdGFibGVfaW5pdChtYWNoX2Rlc2MsIG1hY2hfc2l6ZSk7CisJaW90YWJsZV9pbml0KG51YzkzeF9pb2Rlc2MsIEFSUkFZX1NJWkUobnVjOTN4X2lvZGVzYykpOworCisJaWRjb2RlID0gX19yYXdfcmVhZGwoTlVDOTNYUERJRCk7CisJaWYgKGlkY29kZSA9PSBOVUM5MzJfQ1BVSUQpCisJCXByaW50ayhLRVJOX0lORk8gIkNQVSB0eXBlIDB4JTA4bHggaXMgTlVDOTEwXG4iLCBpZGNvZGUpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJDUFUgdHlwZSBkZXRlY3QgZXJyb3IhXG4iKTsKKworfQorCisvKkluaXQgTlVDOTN4IGNsb2NrKi8KKwordm9pZCBfX2luaXQgbnVjOTN4X2luaXRfY2xvY2tzKHZvaWQpCit7CisJY2xrc19yZWdpc3RlcihudWM5MzJfY2xrcmVncywgQVJSQVlfU0laRShudWM5MzJfY2xrcmVncykpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9jcHUuaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2NwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZWYyODE5NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2NwdS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW51YzkzeC9jcHUuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogSGVhZGVyIGZpbGUgZm9yIE5VQzkzWCBDUFUgc3VwcG9ydAorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjZGVmaW5lIElPREVTQ19FTlQoeSkJCQkJCVwKK3sJCQkJCQkJXAorCS52aXJ0dWFsID0gKHVuc2lnbmVkIGxvbmcpTlVDOTNYX1ZBXyMjeSwJXAorCS5wZm4gICAgID0gX19waHlzX3RvX3BmbihOVUM5M1hfUEFfIyN5KSwJXAorCS5sZW5ndGggID0gTlVDOTNYX1NaXyMjeSwJCQlcCisJLnR5cGUgICAgPSBNVF9ERVZJQ0UsCQkJCVwKK30KKworI2RlZmluZSBOVUM5M1hfODI1MFBPUlQobmFtZSkJCQkJCVwKK3sJCQkJCQkJCVwKKwkubWVtYmFzZQk9IG5hbWUjI19CQSwJCQkJXAorCS5tYXBiYXNlCT0gbmFtZSMjX1BBLAkJCQlcCisJLmlycQkJPSBJUlFfIyNuYW1lLAkJCQlcCisJLnVhcnRjbGsJPSA1NzEzOTIwMCwJCQkJXAorCS5yZWdzaGlmdAk9IDIsCQkJCQlcCisJLmlvdHlwZQkJPSBVUElPX01FTSwJCQkJXAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QsCVwKK30KKworLypDcHUgaWRlbnRpZmllciByZWdpc3RlciovCisKKyNkZWZpbmUgTlVDOTNYUERJRAlOVUM5M1hfVkFfR0NSCisjZGVmaW5lIE5VQzkzMl9DUFVJRAkweDI5NTUwMDkxCisKKy8qIGV4dGVybiBmaWxlIGZyb20gY3B1LmMgKi8KKworZXh0ZXJuIHZvaWQgbnVjOTN4X2Nsb2NrX3NvdXJjZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgKnNyYyk7CitleHRlcm4gdm9pZCBudWM5M3hfaW5pdF9jbG9ja3Modm9pZCk7CitleHRlcm4gdm9pZCBudWM5M3hfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgbWFjaF9zaXplKTsKK2V4dGVybiB2b2lkIG51YzkzeF9ib2FyZF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKipkZXZpY2UsIGludCBzaXplKTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkzeF9zZXJpYWxfZGV2aWNlOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9kZXYuYyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2Rldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjJhZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9kZXYuYwpAQCAtMCwwICsxLDQyIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1udWM5M3gvZGV2LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTnV2b3RvbiBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICJjcHUuaCIKKworLypIZXJlIHNob3VsZCBiZSB5b3VyIGV2YiByZXNvdXJzZSxzdWNoIGFzIExDRCovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpudWM5M3hfcHVibGljX2RldltdIF9faW5pdGRhdGEgPSB7CisJJm51YzkzeF9zZXJpYWxfZGV2aWNlLAorfTsKKworLyogUHJvdmlkZSBhZGRpbmcgc3BlY2lmaWMgQ1BVIHBsYXRmb3JtIGRldmljZXMgQVBJICovCisKK3ZvaWQgX19pbml0IG51YzkzeF9ib2FyZF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKipkZXZpY2UsIGludCBzaXplKQoreworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZSwgc2l6ZSk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMobnVjOTN4X3B1YmxpY19kZXYsIEFSUkFZX1NJWkUobnVjOTN4X3B1YmxpY19kZXYpKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjM3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvY2xrZGV2LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfQ0xLREVWX0gKKyNkZWZpbmUgX19BU01fTUFDSF9DTEtERVZfSAorCisjZGVmaW5lIF9fY2xrX2dldChjbGspICh7IDE7IH0pCisjZGVmaW5lIF9fY2xrX3B1dChjbGspIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNTJjYmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDMyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKi8KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+CisKKwkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJLmVuZG0KKworCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisKKwkJbW92CVxiYXNlLCAjQUlDX0JBCisKKwkJbGRyCVxpcnFuciwgWyBcYmFzZSwgI0FJQ19JUEVSXQorCQlsZHIJXGlycW5yLCBbIFxiYXNlLCAjQUlDX0lTTlJdCisJCWNtcAlcaXJxbnIsICMwCisKKwkuZW5kbQorCisJLyogY3VycmVudGx5IGRvbid0IG5lZWQgYW4gZGlzYWJsZV9maXEgbWFjcm8gKi8KKworCS5tYWNybwlkaXNhYmxlX2ZpcQorCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNWM2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKworI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJlNTA1MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9pby5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvaW8uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQJMHhmZmZmZmZmZgorCisvKgorICogMToxIG1hcHBpbmcgZm9yIGlvcmVtYXBwZWQgcmVnaW9ucy4KKyAqLworCisjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKKyNkZWZpbmUgX19pbyhhKQkJX190eXBlc2FmZV9pbyhhKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNGFhNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvaXJxcy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0lSUVNfSAorI2RlZmluZSBfX0FTTV9BUkNIX0lSUVNfSAorCisjZGVmaW5lIE5VQzkzWF9JUlEoeCkJKHgpCisKKy8qIE1haW4gY3B1IGludGVycnVwdHMgKi8KKworI2RlZmluZSBJUlFfV0RUCQlOVUM5M1hfSVJRKDEpCisjZGVmaW5lIElSUV9JUlEwCU5VQzkzWF9JUlEoMikKKyNkZWZpbmUgSVJRX0lSUTEJTlVDOTNYX0lSUSgzKQorI2RlZmluZSBJUlFfSVJRMglOVUM5M1hfSVJRKDQpCisjZGVmaW5lIElSUV9JUlEzCU5VQzkzWF9JUlEoNSkKKyNkZWZpbmUgSVJRX1VTQkgJTlVDOTNYX0lSUSg2KQorI2RlZmluZSBJUlFfQVBVCQlOVUM5M1hfSVJRKDcpCisjZGVmaW5lIElSUV9WUE9TVAlOVUM5M1hfSVJRKDgpCisjZGVmaW5lIElSUV9BREMJCU5VQzkzWF9JUlEoOSkKKyNkZWZpbmUgSVJRX1VBUlQwCU5VQzkzWF9JUlEoMTApCisjZGVmaW5lIElSUV9USU1FUjAJTlVDOTNYX0lSUSgxMSkKKyNkZWZpbmUgSVJRX0dQVTAJTlVDOTNYX0lSUSgxMikKKyNkZWZpbmUgSVJRX0dQVTEJTlVDOTNYX0lSUSgxMykKKyNkZWZpbmUgSVJRX0dQVTIJTlVDOTNYX0lSUSgxNCkKKyNkZWZpbmUgSVJRX0dQVTMJTlVDOTNYX0lSUSgxNSkKKyNkZWZpbmUgSVJRX0dQVTQJTlVDOTNYX0lSUSgxNikKKyNkZWZpbmUgSVJRX1ZJTgkJTlVDOTNYX0lSUSgxNykKKyNkZWZpbmUgSVJRX1VTQkQJTlVDOTNYX0lSUSgxOCkKKyNkZWZpbmUgSVJRX1ZSQU1MRAlOVUM5M1hfSVJRKDE5KQorI2RlZmluZSBJUlFfR0RNQTAJTlVDOTNYX0lSUSgyMCkKKyNkZWZpbmUgSVJRX0dETUExCU5VQzkzWF9JUlEoMjEpCisjZGVmaW5lIElSUV9TRElPCU5VQzkzWF9JUlEoMjIpCisjZGVmaW5lIElSUV9GTUkJCU5VQzkzWF9JUlEoMjIpCisjZGVmaW5lIElSUV9KUEVHCU5VQzkzWF9JUlEoMjMpCisjZGVmaW5lIElSUV9TUEkwCU5VQzkzWF9JUlEoMjQpCisjZGVmaW5lIElSUV9TUEkxCU5VQzkzWF9JUlEoMjUpCisjZGVmaW5lIElSUV9SVEMJCU5VQzkzWF9JUlEoMjYpCisjZGVmaW5lIElSUV9QV00wCU5VQzkzWF9JUlEoMjcpCisjZGVmaW5lIElSUV9QV00xCU5VQzkzWF9JUlEoMjgpCisjZGVmaW5lIElSUV9QV00yCU5VQzkzWF9JUlEoMjkpCisjZGVmaW5lIElSUV9QV00zCU5VQzkzWF9JUlEoMzApCisjZGVmaW5lIElSUV9JMlNBQzk3CU5VQzkzWF9JUlEoMzEpCisjZGVmaW5lIElSUV9DQVAwCUlSUV9QV00wCisjZGVmaW5lIElSUV9DQVAxCUlSUV9QV00xCisjZGVmaW5lIElSUV9DQVAyCUlSUV9QV00yCisjZGVmaW5lIElSUV9DQVAzCUlSUV9QV00zCisjZGVmaW5lIE5SX0lSUVMJCShJUlFfSTJTQUM5NyArIDEpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQwYjVlOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9tYXAuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NQVBfSAorI2RlZmluZSBfX0FTTV9BUkNIX01BUF9ICisKKyNkZWZpbmUgTUFQX09GRlNFVAkoMHhmZmYwMDAwMCkKKyNkZWZpbmUgQ0xLX09GRlNFVAkoMHgxMCkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgTlVDOTNYX0FERFIoeCkJKCh2b2lkIF9faW9tZW0gKikoMHhGMDAwMDAwMCArICgoeCkmKH5NQVBfT0ZGU0VUKSkpKQorI2Vsc2UKKyNkZWZpbmUgTlVDOTNYX0FERFIoeCkJKDB4RjAwMDAwMDAgKyAoKHgpJih+TUFQX09GRlNFVCkpKQorI2VuZGlmCisKKyAvKgorICAqIG51YzkzMiBoYXJkd2FyZSByZWdpc3RlciBkZWZpbml0aW9uCisgICovCisKKyNkZWZpbmUgTlVDOTNYX1BBX0lSUQkJKDB4RkZGODMwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9HQ1IJCSgweEZGRjAwMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfRUJJCQkoMHhGRkYwMTAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX1VBUlQJCSgweEZGRjgwMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfVElNRVIJCSgweEZGRjgxMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfR1BJTwkJKDB4RkZGODQwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9HRE1BCQkoMHhGRkYwMzAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX1VTQkhPU1QJKDB4RkZGMGQwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9JMkMJCSgweEZGRjg5MDAwKQorI2RlZmluZSBOVUM5M1hfUEFfTENECQkoMHhGRkYwNjAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX0dFCQkoMHhGRkYwNTAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX0FEQwkJKDB4RkZGODUwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9SVEMJCSgweEZGRjg3MDAwKQorI2RlZmluZSBOVUM5M1hfUEFfUFdNCQkoMHhGRkY4MjAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX0FDVEwJCSgweEZGRjBhMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfVVNCREVWCSgweEZGRjBDMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfSkVQRUcJCSgweEZGRjBlMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfQ0FDSEVfVAkoMHhGRkY2MDAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX1ZSQU0JCSgweEZGRjBiMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfRE1BQwkJKDB4RkZGMDkwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9JMlNNCQkoMHhGRkYwODAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX0NBQ0hFCQkoMHhGRkYwMjAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX0dQVQkJKDB4RkZGMDQwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9WSURFT0lOCSgweEZGRjA3MDAwKQorI2RlZmluZSBOVUM5M1hfUEFfU1BJMAkJKDB4RkZGODYwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9TUEkxCQkoMHhGRkY4ODAwMCkKKworIC8qCisgICogbnVjOTMyIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nLgorICAqIGludGVycnVwdCBjb250cm9sbGVyIGlzIHRoZSBmaXJzdCB0aGluZyB3ZSBwdXQgaW4sIHRvIG1ha2UKKyAgKiB0aGUgYXNzZW1ibHkgY29kZSBmb3IgdGhlIGlycSBkZXRlY3Rpb24gZWFzaWVyCisgICovCisKKyNkZWZpbmUgTlVDOTNYX1ZBX0lSUQkJTlVDOTNYX0FERFIoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTlVDOTNYX1NaX0lSUQkJU1pfNEsKKworI2RlZmluZSBOVUM5M1hfVkFfR0NSCQlOVUM5M1hfQUREUihOVUM5M1hfUEFfSVJRKQorI2RlZmluZSBOVUM5M1hfVkFfQ0xLUFdSCShOVUM5M1hfVkFfR0NSK0NMS19PRkZTRVQpCisjZGVmaW5lIE5VQzkzWF9TWl9HQ1IJCVNaXzRLCisKKy8qIEVCSSBtYW5hZ2VtZW50ICovCisKKyNkZWZpbmUgTlVDOTNYX1ZBX0VCSQkJTlVDOTNYX0FERFIoTlVDOTNYX1BBX0VCSSkKKyNkZWZpbmUgTlVDOTNYX1NaX0VCSQkJU1pfNEsKKworLyogVUFSVHMgKi8KKworI2RlZmluZSBOVUM5M1hfVkFfVUFSVAkJTlVDOTNYX0FERFIoTlVDOTNYX1BBX1VBUlQpCisjZGVmaW5lIE5VQzkzWF9TWl9VQVJUCQlTWl80SworCisvKiBUaW1lcnMgKi8KKworI2RlZmluZSBOVUM5M1hfVkFfVElNRVIJTlVDOTNYX0FERFIoTlVDOTNYX1BBX1RJTUVSKQorI2RlZmluZSBOVUM5M1hfU1pfVElNRVIJU1pfNEsKKworLyogR1BJTyBwb3J0cyAqLworCisjZGVmaW5lIE5VQzkzWF9WQV9HUElPCQlOVUM5M1hfQUREUihOVUM5M1hfUEFfR1BJTykKKyNkZWZpbmUgTlVDOTNYX1NaX0dQSU8JCVNaXzRLCisKKy8qIEdETUEgY29udHJvbCAqLworCisjZGVmaW5lIE5VQzkzWF9WQV9HRE1BCQlOVUM5M1hfQUREUihOVUM5M1hfUEFfR0RNQSkKKyNkZWZpbmUgTlVDOTNYX1NaX0dETUEJCVNaXzRLCisKKy8qIEkyQyBoYXJkd2FyZSBjb250cm9sbGVyICovCisKKyNkZWZpbmUgTlVDOTNYX1ZBX0kyQwkJTlVDOTNYX0FERFIoTlVDOTNYX1BBX0kyQykKKyNkZWZpbmUgTlVDOTNYX1NaX0kyQwkJU1pfNEsKKworLyogTENEIGNvbnRyb2xsZXIqLworCisjZGVmaW5lIE5VQzkzWF9WQV9MQ0QJCU5VQzkzWF9BRERSKE5VQzkzWF9QQV9MQ0QpCisjZGVmaW5lIE5VQzkzWF9TWl9MQ0QJCVNaXzRLCisKKy8qIDJEIGNvbnRyb2xsZXIqLworCisjZGVmaW5lIE5VQzkzWF9WQV9HRQkJTlVDOTNYX0FERFIoTlVDOTNYX1BBX0dFKQorI2RlZmluZSBOVUM5M1hfU1pfR0UJCVNaXzRLCisKKy8qIEFEQyAqLworCisjZGVmaW5lIE5VQzkzWF9WQV9BREMJCU5VQzkzWF9BRERSKE5VQzkzWF9QQV9BREMpCisjZGVmaW5lIE5VQzkzWF9TWl9BREMJCVNaXzRLCisKKy8qIFJUQyAqLworCisjZGVmaW5lIE5VQzkzWF9WQV9SVEMJCU5VQzkzWF9BRERSKE5VQzkzWF9QQV9SVEMpCisjZGVmaW5lIE5VQzkzWF9TWl9SVEMJCVNaXzRLCisKKy8qIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24oUFdNKSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBOVUM5M1hfVkFfUFdNCQlOVUM5M1hfQUREUihOVUM5M1hfUEFfUFdNKQorI2RlZmluZSBOVUM5M1hfU1pfUFdNCQlTWl80SworCisvKiBBdWRpbyBDb250cm9sbGVyIGNvbnRyb2xsZXIgKi8KKworI2RlZmluZSBOVUM5M1hfVkFfQUNUTAkJTlVDOTNYX0FERFIoTlVDOTNYX1BBX0FDVEwpCisjZGVmaW5lIE5VQzkzWF9TWl9BQ1RMCQlTWl80SworCisvKiBVU0IgRGV2aWNlIHBvcnQgKi8KKworI2RlZmluZSBOVUM5M1hfVkFfVVNCREVWCU5VQzkzWF9BRERSKE5VQzkzWF9QQV9VU0JERVYpCisjZGVmaW5lIE5VQzkzWF9TWl9VU0JERVYJU1pfNEsKKworLyogVVNCIGhvc3QgY29udHJvbGxlciovCisjZGVmaW5lIE5VQzkzWF9WQV9VU0JIT1NUCU5VQzkzWF9BRERSKE5VQzkzWF9QQV9VU0JIT1NUKQorI2RlZmluZSBOVUM5M1hfU1pfVVNCSE9TVAlTWl80SworCisjZW5kaWYgLyogX19BU01fQVJDSF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyM2FiMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKyNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHgwMDAwMDAwMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2IyOTU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaApAQCAtMCwwICsxLDUzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0NMT0NLX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX0NMT0NLX0gKKworLyogQ2xvY2sgQ29udHJvbCBSZWdpc3RlcnMgICovCisjZGVmaW5lIENMS19CQQkJTlVDOTNYX1ZBX0NMS1BXUgorI2RlZmluZSBSRUdfQ0xLRU4JKENMS19CQSArIDB4MDApCisjZGVmaW5lIFJFR19DTEtTRUwJKENMS19CQSArIDB4MDQpCisjZGVmaW5lIFJFR19DTEtESVYJKENMS19CQSArIDB4MDgpCisjZGVmaW5lIFJFR19QTExDT04wCShDTEtfQkEgKyAweDBDKQorI2RlZmluZSBSRUdfUExMQ09OMQkoQ0xLX0JBICsgMHgxMCkKKyNkZWZpbmUgUkVHX1BNQ09OCShDTEtfQkEgKyAweDE0KQorI2RlZmluZSBSRUdfSVJRV0FLRUNPTgkoQ0xLX0JBICsgMHgxOCkKKyNkZWZpbmUgUkVHX0lSUVdBS0VGTEFHCShDTEtfQkEgKyAweDFDKQorI2RlZmluZSBSRUdfSVBTUlNUCShDTEtfQkEgKyAweDIwKQorI2RlZmluZSBSRUdfQ0xLRU4xCShDTEtfQkEgKyAweDI0KQorI2RlZmluZSBSRUdfQ0xLRElWMQkoQ0xLX0JBICsgMHgyOCkKKworLyogRGVmaW5lIFBMTCBmcmVxIHNldHRpbmcgKi8KKyNkZWZpbmUgUExMX0RJU0FCTEUJCTB4MTJCNjMKKyNkZWZpbmUJUExMXzY2TUhaCQkweDJCNjMKKyNkZWZpbmUJUExMXzEwME1IWgkJMHg0RjY0CisjZGVmaW5lIFBMTF8xMjBNSFoJCTB4NEY2MworI2RlZmluZQlQTExfMTY2TUhaCQkweDQxMjQKKyNkZWZpbmUJUExMXzIwME1IWgkJMHg0RjI0CisKKy8qIERlZmluZSBBSEI6Q1BVRlJFUSByYXRpbyAqLworI2RlZmluZQlBSEJfQ1BVQ0xLXzFfMQkJMHgwMAorI2RlZmluZQlBSEJfQ1BVQ0xLXzFfMgkJMHgwMQorI2RlZmluZQlBSEJfQ1BVQ0xLXzFfNAkJMHgwMgorI2RlZmluZQlBSEJfQ1BVQ0xLXzFfOAkJMHgwMworCisvKiBEZWZpbmUgQVBCOkFIQiByYXRpbyAqLworI2RlZmluZSBBUEJfQUhCXzFfMgkJMHgwMQorI2RlZmluZSBBUEJfQUhCXzFfNAkJMHgwMgorI2RlZmluZSBBUEJfQUhCXzFfOAkJMHgwMworCisvKiBEZWZpbmUgY2xvY2sgc2tldyAqLworI2RlZmluZSBERUZBVUxUU0tFVwkJMHg0OAorCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfUkVHU19DTE9DS19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1lYmkuaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLWViaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNzI1NTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1lYmkuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3MtZWJpLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19FQklfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfRUJJX0gKKworLyogRUJJIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgRUJJX0JBCQlOVUM5M1hfVkFfRUJJCisjZGVmaW5lIFJFR19FQklDT04JKEVCSV9CQSArIDB4MDApCisjZGVmaW5lIFJFR19ST01DT04JKEVCSV9CQSArIDB4MDQpCisjZGVmaW5lIFJFR19TRENPTkYwCShFQklfQkEgKyAweDA4KQorI2RlZmluZSBSRUdfU0RDT05GMQkoRUJJX0JBICsgMHgwQykKKyNkZWZpbmUgUkVHX1NEVElNRTAJKEVCSV9CQSArIDB4MTApCisjZGVmaW5lIFJFR19TRFRJTUUxCShFQklfQkEgKyAweDE0KQorI2RlZmluZSBSRUdfRVhUMENPTgkoRUJJX0JBICsgMHgxOCkKKyNkZWZpbmUgUkVHX0VYVDFDT04JKEVCSV9CQSArIDB4MUMpCisjZGVmaW5lIFJFR19FWFQyQ09OCShFQklfQkEgKyAweDIwKQorI2RlZmluZSBSRUdfRVhUM0NPTgkoRUJJX0JBICsgMHgyNCkKKyNkZWZpbmUgUkVHX0VYVDRDT04JKEVCSV9CQSArIDB4MjgpCisjZGVmaW5lIFJFR19DS1NLRVcJKEVCSV9CQSArIDB4MkMpCisKKyNlbmRpZiAvKiAgX19BU01fQVJDSF9SRUdTX0VCSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLWlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMDIxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fX0FTTV9BUkNIX1JFR1NfSVJRX0gKKyNkZWZpbmUgX19fQVNNX0FSQ0hfUkVHU19JUlFfSAorCisvKiBBZHZhbmNlIEludGVycnVwdCBDb250cm9sbGVyIChBSUMpIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIEFJQ19CQSAgICAJCU5VQzkzWF9WQV9JUlEKKworI2RlZmluZSBSRUdfQUlDX0lSUVNDCQkoQUlDX0JBKzB4ODApCisjZGVmaW5lIFJFR19BSUNfR0VOCQkoQUlDX0JBKzB4ODQpCisjZGVmaW5lIFJFR19BSUNfR0FTUgkJKEFJQ19CQSsweDg4KQorI2RlZmluZSBSRUdfQUlDX0dTQ1IJCShBSUNfQkErMHg4QykKKyNkZWZpbmUgUkVHX0FJQ19JUlNSCQkoQUlDX0JBKzB4MTAwKQorI2RlZmluZSBSRUdfQUlDX0lBU1IJCShBSUNfQkErMHgxMDQpCisjZGVmaW5lIFJFR19BSUNfSVNSCQkoQUlDX0JBKzB4MTA4KQorI2RlZmluZSBSRUdfQUlDX0lQRVIJCShBSUNfQkErMHgxMEMpCisjZGVmaW5lIFJFR19BSUNfSVNOUgkJKEFJQ19CQSsweDExMCkKKyNkZWZpbmUgUkVHX0FJQ19JTVIJCShBSUNfQkErMHgxMTQpCisjZGVmaW5lIFJFR19BSUNfT0lTUgkJKEFJQ19CQSsweDExOCkKKyNkZWZpbmUgUkVHX0FJQ19NRUNSCQkoQUlDX0JBKzB4MTIwKQorI2RlZmluZSBSRUdfQUlDX01EQ1IJCShBSUNfQkErMHgxMjQpCisjZGVmaW5lIFJFR19BSUNfU1NDUgkJKEFJQ19CQSsweDEyOCkKKyNkZWZpbmUgUkVHX0FJQ19TQ0NSCQkoQUlDX0JBKzB4MTJDKQorI2RlZmluZSBSRUdfQUlDX0VPU0NSCQkoQUlDX0JBKzB4MTMwKQorI2RlZmluZSBBSUNfSVBFUgkJKDB4MTBDKQorI2RlZmluZSBBSUNfSVNOUgkJKDB4MTEwKQorCisjZW5kaWYgLyogX19fQVNNX0FSQ0hfUkVHU19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3Mtc2VyaWFsLmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjdhMDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3Mtc2VyaWFsLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLXNlcmlhbC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fUkVHU19TRVJJQUxfSAorI2RlZmluZSBfX0FTTV9BUk1fUkVHU19TRVJJQUxfSAorCisjZGVmaW5lIFVBUlQwX0JBCU5VQzkzWF9WQV9VQVJUCisjZGVmaW5lIFVBUlQxX0JBCShOVUM5M1hfVkFfVUFSVCsweDEwMCkKKworI2RlZmluZSBVQVJUMF9QQQlOVUM5M1hfUEFfVUFSVAorI2RlZmluZSBVQVJUMV9QQQkoTlVDOTNYX1BBX1VBUlQrMHgxMDApCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IG51YzkzeF91YXJ0X2Nsa3NyYyB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwl1bnNpZ25lZCBpbnQJZGl2aXNvcjsKKwl1bnNpZ25lZCBpbnQJbWluX2JhdWQ7CisJdW5zaWduZWQgaW50CW1heF9iYXVkOworfTsKKworc3RydWN0IG51YzkzeF91YXJ0Y2ZnIHsKKwl1bnNpZ25lZCBjaGFyCWh3cG9ydDsKKwl1bnNpZ25lZCBjaGFyCXVudXNlZDsKKwl1bnNpZ25lZCBzaG9ydAlmbGFnczsKKwl1bnNpZ25lZCBsb25nCXVhcnRfZmxhZ3M7CisKKwl1bnNpZ25lZCBsb25nCXVjb247CisJdW5zaWduZWQgbG9uZwl1bGNvbjsKKwl1bnNpZ25lZCBsb25nCXVmY29uOworCisJc3RydWN0IG51YzkzeF91YXJ0X2Nsa3NyYyAqY2xvY2tzOworCXVuc2lnbmVkIGludAljbG9ja3Nfc2l6ZTsKK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fQVNNX0FSTV9SRUdTX1NFUklBTF9IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLXRpbWVyLmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy10aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NGJlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy10aW1lci5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy10aW1lci5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfVElNRVJfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfVElNRVJfSAorCisvKiBUaW1lciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBUTVJfQkEJCQlOVUM5M1hfVkFfVElNRVIKKyNkZWZpbmUgUkVHX1RDU1IwCQkoVE1SX0JBKzB4MDApCisjZGVmaW5lIFJFR19USUNSMAkJKFRNUl9CQSsweDA4KQorI2RlZmluZSBSRUdfVERSMAkJKFRNUl9CQSsweDEwKQorI2RlZmluZSBSRUdfVElTUgkJKFRNUl9CQSsweDE4KQorI2RlZmluZSBSRUdfV1RDUgkJKFRNUl9CQSsweDFDKQorCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfUkVHU19USU1FUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI2YmQ5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMCwwICsxLDI4IEBACisvKgorICogYXJjaC9hcm0vbWFjaG51YzkzeC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgorCitzdGF0aWMgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKK30KKworc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKK3sKKwljcHVfcmVzZXQoMCk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3MTljYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvdGltZXguaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdGltZXguaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9USU1FWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVElNRVhfSAorCisvKiBDTE9DS19USUNLX1JBVEUgTm93LCBJIGRvbid0IHVzZSBpdC4gKi8KKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUgMjcwMDAwMDAKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwODJjZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKworLyogRGVmaW5lcyBmb3IgVUFSVCByZWdpc3RlcnMgKi8KKworI2luY2x1ZGUgPG1hY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKworI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKKworI2RlZmluZSBUWF9ET05FCShVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkKK3N0YXRpYyB1MzIgKiB1YXJ0X2Jhc2UgPSAodTMyICopVUFSVDBfUEE7CisKK3N0YXRpYyB2b2lkIHB1dGMoaW50IGNoKQoreworCS8qIENoZWNrIFRIUkUgYW5kIFRFTVQgYml0cyBiZWZvcmUgd2UgdHJhbnNtaXQgdGhlIGNoYXJhY3Rlci4KKwkgKi8KKwl3aGlsZSAoKHVhcnRfYmFzZVtVQVJUX0xTUl0gJiBUWF9ET05FKSAhPSBUWF9ET05FKQorCQliYXJyaWVyKCk7CisKKwkqdWFydF9iYXNlID0gY2g7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaCh2b2lkKQoreworfQorCitzdGF0aWMgdm9pZCBhcmNoX2RlY29tcF9zZXR1cCh2b2lkKQoreworfQorCisjZW5kaWYvKiBfX0FTTV9OVUM5M1hfVU5DT01QUkVTU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGEyMWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1ZNQUxMT0NfSAorI2RlZmluZSBfX0FTTV9BUkNIX1ZNQUxMT0NfSAorCisjZGVmaW5lIFZNQUxMT0NfRU5ECSAgKDB4RTAwMDAwMDApCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1ZNQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2E4OGVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaXJxLmMKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbnVjOTN4L2lycS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1pcnEuaD4KKworc3RhdGljIHZvaWQgbnVjOTN4X2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJX19yYXdfd3JpdGVsKDEgPDwgaXJxLCBSRUdfQUlDX01EQ1IpOworfQorCisvKgorICogQnkgdGhlIHc5MHA5MTAgc3BlYyxhbnkgaXJxLG9ubHkgd3JpdGUgMQorICogdG8gUkVHX0FJQ19FT1NDUiBmb3IgQUNLCisgKi8KKworc3RhdGljIHZvaWQgbnVjOTN4X2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlfX3Jhd193cml0ZWwoMHgwMSwgUkVHX0FJQ19FT1NDUik7Cit9CisKK3N0YXRpYyB2b2lkIG51YzkzeF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJX19yYXdfd3JpdGVsKDEgPDwgaXJxLCBSRUdfQUlDX01FQ1IpOworCit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbnVjOTN4X2lycV9jaGlwID0geworCS5hY2sJICAgPSBudWM5M3hfaXJxX2FjaywKKwkubWFzawkgICA9IG51YzkzeF9pcnFfbWFzaywKKwkudW5tYXNrCSAgID0gbnVjOTN4X2lycV91bm1hc2ssCit9OworCit2b2lkIF9faW5pdCBudWM5M3hfaW5pdF9pcnEodm9pZCkKK3sKKwlpbnQgaXJxbm87CisKKwlfX3Jhd193cml0ZWwoMHhGRkZGRkZGRSwgUkVHX0FJQ19NRENSKTsKKworCWZvciAoaXJxbm8gPSBJUlFfV0RUOyBpcnFubyA8PSBOUl9JUlFTOyBpcnFubysrKSB7CisJCXNldF9pcnFfY2hpcChpcnFubywgJm51YzkzeF9pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnFubywgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxbm8sIElSUUZfVkFMSUQpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L21hY2gtbnVjOTMyZXZiLmMgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9tYWNoLW51YzkzMmV2Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzkyNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9tYWNoLW51YzkzMmV2Yi5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC1udWM5MTBldmIuYworICoKKyAqIEJhc2VkIG9uIG1hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMgYnkgSm9uYXMgRGlldHNjaGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgIm51YzkzMi5oIgorCitzdGF0aWMgdm9pZCBfX2luaXQgbnVjOTMyZXZiX21hcF9pbyh2b2lkKQoreworCW51YzkzMl9tYXBfaW8oKTsKKwludWM5MzJfaW5pdF9jbG9ja3MoKTsKKwludWM5MzJfaW5pdF91YXJ0Y2xrKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBudWM5MzJldmJfaW5pdCh2b2lkKQoreworCW51YzkzMl9ib2FyZF9pbml0KCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoTlVDOTMyRVZCLCAiTlVDOTMyRVZCIikKKwkvKiBNYWludGFpbmVyOiBXYW4gWm9uZ1NodW4gKi8KKwkucGh5c19pbwk9IE5VQzkzWF9QQV9VQVJULAorCS5pb19wZ19vZmZzdAk9ICgoKHUzMilOVUM5M1hfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDAsCisJLm1hcF9pbwkJPSBudWM5MzJldmJfbWFwX2lvLAorCS5pbml0X2lycQk9IG51YzkzeF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gbnVjOTMyZXZiX2luaXQsCisJLnRpbWVyCQk9ICZudWM5M3hfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvbnVjOTMyLmMgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9udWM5MzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTY2ZWFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvbnVjOTMyLmMKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbnVjOTN4L251YzkzMi5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE51dm90b24gY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIE5VQzkzMiBjcHUgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKKy8qIGRlZmluZSBzcGVjaWZpYyBDUFUgcGxhdGZvcm0gZGV2aWNlICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpudWM5MzJfZGV2W10gX19pbml0ZGF0YSA9IHsKK307CisKKy8qIGRlZmluZSBzcGVjaWZpYyBDUFUgcGxhdGZvcm0gaW8gbWFwICovCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbnVjOTMyZXZiX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7Cit9OworCisvKkluaXQgTlVDOTMyIGV2YiBpbyovCisKK3ZvaWQgX19pbml0IG51YzkzMl9tYXBfaW8odm9pZCkKK3sKKwludWM5M3hfbWFwX2lvKG51YzkzMmV2Yl9pb2Rlc2MsIEFSUkFZX1NJWkUobnVjOTMyZXZiX2lvZGVzYykpOworfQorCisvKkluaXQgTlVDOTMyIGNsb2NrKi8KKwordm9pZCBfX2luaXQgbnVjOTMyX2luaXRfY2xvY2tzKHZvaWQpCit7CisJbnVjOTN4X2luaXRfY2xvY2tzKCk7Cit9CisKKy8qZW5hYmxlIE5VQzkzMiB1YXJ0IGNsb2NrKi8KKwordm9pZCBfX2luaXQgbnVjOTMyX2luaXRfdWFydGNsayh2b2lkKQoreworCXN0cnVjdCBjbGsgKmNrX3VhcnQgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0Iik7CisJQlVHX09OKElTX0VSUihja191YXJ0KSk7CisKKwljbGtfZW5hYmxlKGNrX3VhcnQpOworfQorCisvKkluaXQgTlVDOTMyIGJvYXJkIGluZm8qLworCit2b2lkIF9faW5pdCBudWM5MzJfYm9hcmRfaW5pdCh2b2lkKQoreworCW51YzkzeF9ib2FyZF9pbml0KG51YzkzMl9kZXYsIEFSUkFZX1NJWkUobnVjOTMyX2RldikpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvbnVjOTMyLmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9udWM5MzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTY2ZWRkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvbnVjOTMyLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L251YzkzMi5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gY29ycG9yYXRpb24KKyAqCisgKiBIZWFkZXIgZmlsZSBmb3IgTlVDOTN4IENQVSBzdXBwb3J0CisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKK3N0cnVjdCBtYXBfZGVzYzsKK3N0cnVjdCBzeXNfdGltZXI7CisKKy8qIGNvcmUgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zICovCisKK2V4dGVybiB2b2lkIG51YzkzeF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIG51YzkzeF90aW1lcjsKKworLyogZXh0ZXJuIGZpbGUgZnJvbSBudWM5MzIuYyAqLworCitleHRlcm4gdm9pZCBudWM5MzJfYm9hcmRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG51YzkzMl9pbml0X2Nsb2Nrcyh2b2lkKTsKK2V4dGVybiB2b2lkIG51YzkzMl9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBudWM5MzJfaW5pdF91YXJ0Y2xrKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOTBmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC90aW1lLmMKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW51YzkzeC90aW1lLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgPG1hY2gvc3lzdGVtLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtdGltZXIuaD4KKworI2RlZmluZSBSRVNFVElOVAkweDAxCisjZGVmaW5lIFBFUklPRAkJKDB4MDEgPDwgMjcpCisjZGVmaW5lIE9ORVNIT1QJCSgweDAwIDw8IDI3KQorI2RlZmluZSBDT1VOVEVOCQkoMHgwMSA8PCAzMCkKKyNkZWZpbmUgSU5URU4JCSgweDAxIDw8IDI5KQorCisjZGVmaW5lIFRJQ0tTX1BFUl9TRUMJMTAwCisjZGVmaW5lIFBSRVNDQUxFCTB4NjMgLyogRGl2aWRlciA9IHByZXNjYWxlICsgMSAqLworCit1bnNpZ25lZCBpbnQgdGltZXIwX2xvYWQ7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG51YzkzeF9nZXR0aW1lb2Zmc2V0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lciovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBudWM5M3hfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl0aW1lcl90aWNrKCk7CisJX19yYXdfd3JpdGVsKDB4MDEsIFJFR19USVNSKTsgLyogY2xlYXIgVElGMCAqLworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbnVjOTN4X3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAibnVjOTN4IFRpbWVyIFRpY2siLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKKwkuaGFuZGxlcgk9IG51YzkzeF90aW1lcl9pbnRlcnJ1cHQsCit9OworCisvKlNldCB1cCB0aW1lciByZWcuKi8KKworc3RhdGljIHZvaWQgbnVjOTN4X3RpbWVyX3NldHVwKHZvaWQpCit7CisJc3RydWN0IGNsayAqY2tfZXh0ID0gY2xrX2dldChOVUxMLCAiZXh0Iik7CisJc3RydWN0IGNsayAqY2tfdGltZXIgPSBjbGtfZ2V0KE5VTEwsICJ0aW1lciIpOworCXVuc2lnbmVkIGludCByYXRlLCB2YWwgPSAwOworCisJQlVHX09OKElTX0VSUihja19leHQpIHx8IElTX0VSUihja190aW1lcikpOworCisJY2xrX2VuYWJsZShja190aW1lcik7CisJcmF0ZSA9IGNsa19nZXRfcmF0ZShja19leHQpOworCWNsa19wdXQoY2tfZXh0KTsKKwlyYXRlID0gcmF0ZSAvIChQUkVTQ0FMRSArIDB4MDEpOworCisJIC8qIHNldCBhIGtub3duIHN0YXRlICovCisJX19yYXdfd3JpdGVsKDB4MDAsIFJFR19UQ1NSMCk7CisJX19yYXdfd3JpdGVsKFJFU0VUSU5ULCBSRUdfVElTUik7CisKKwl0aW1lcjBfbG9hZCA9IChyYXRlIC8gVElDS1NfUEVSX1NFQyk7CisJX19yYXdfd3JpdGVsKHRpbWVyMF9sb2FkLCBSRUdfVElDUjApOworCisJdmFsIHw9IChQRVJJT0QgfCBDT1VOVEVOIHwgSU5URU4gfCBQUkVTQ0FMRSk7OworCV9fcmF3X3dyaXRlbCh2YWwsIFJFR19UQ1NSMCk7CisKK30KKworc3RhdGljIHZvaWQgX19pbml0IG51YzkzeF90aW1lcl9pbml0KHZvaWQpCit7CisJbnVjOTN4X3RpbWVyX3NldHVwKCk7CisJc2V0dXBfaXJxKElSUV9USU1FUjAsICZudWM5M3hfdGltZXJfaXJxKTsKK30KKworc3RydWN0IHN5c190aW1lciBudWM5M3hfdGltZXIgPSB7CisJLmluaXQJCT0gbnVjOTN4X3RpbWVyX2luaXQsCisJLm9mZnNldAkJPSBudWM5M3hfZ2V0dGltZW9mZnNldCwKKwkucmVzdW1lCQk9IG51YzkzeF90aW1lcl9zZXR1cAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGFlZGI3NDYuLjhjNzRjYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsNyArMTEsNyBAQAogICoKICovCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4ZmYwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKaW5kZXggMGM2YmU2Yi4uOGJhOGZiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KICNpbmNsdWRlIDxwbGF0L3RpbWVyLWdwLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNkcDQ0MzBfbGNkX2RldmljZSA9IHsKIAkubmFtZQkJPSAic2RwNDQzMF9sY2QiLApAQCAtNTAsNiArNTEsNTkgQEAKIAl7IE9NQVBfVEFHX0xDRCwJCSZzZHA0NDMwX2xjZF9jb25maWcgfSwKIH07CiAKKyNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMAorbm9pbmxpbmUgdm9pZCBvbWFwX3NtYzEodTMyIGZuLCB1MzIgYXJnKQoreworCXJlZ2lzdGVyIHUzMiByMTIgYXNtKCJyMTIiKSA9IGZuOworCXJlZ2lzdGVyIHUzMiByMCBhc20oInIwIikgPSBhcmc7CisKKwkvKiBUaGlzIGlzIGNvbW1vbiByb3V0aW5lIGNhY2hlIHNlY3VyZSBtb25pdG9yIEFQSSB1c2VkIHRvCisJICogbW9kaWZ5IHRoZSBQTDMxMCBzZWN1cmUgcmVnaXN0ZXJzLgorCSAqIHIwIGNvbnRhaW5zIHRoZSB2YWx1ZSB0byBiZSBtb2RpZmllZCBhbmQgInIxMiIgY29udGFpbnMKKwkgKiB0aGUgbW9uaXRvciBBUEkgbnVtYmVyLiBJdCB1c2VzIGZldyBDUFUgcmVnaXN0ZXJzCisJICogaW50ZXJuYWxseSBhbmQgaGVuY2UgdGhleSBuZWVkIGJlIGJhY2tlZCB1cCBpbmNsdWRpbmcKKwkgKiBsaW5rIHJlZ2lzdGVyICJsciIuCisJICogRXhwbGljaXRseSBzYXZlIHIxMSBhbmQgcjEyIHRoZSBjb21waWxlciBnZW5lcmF0ZWQgY29kZQorCSAqIHdvbid0IHNhdmUgaXQuCisJICovCisJYXNtIHZvbGF0aWxlKAorCQkic3RtZmQgcjEzISwge3IxMSxyMTJ9XG4iCisJCSJkc2JcbiIKKwkJInNtY1xuIgorCQkibGRtZmQgcjEzISwge3IxMSxyMTJ9XG4iCisJCTogIityIiAocjApLCAiK3IiIChyMTIpCisJCToKKwkJOiAicjQiLCAicjUiLCAicjEwIiwgImxyIiwgImNjIik7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfc21jMSk7CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfbDJfY2FjaGVfaW5pdCh2b2lkKQoreworCXZvaWQgX19pb21lbSAqbDJjYWNoZV9iYXNlOworCisJLyogVG8gYXZvaWQgY29kZSBydW5uaW5nIG9uIG90aGVyIE9NQVBzIGluCisJICogbXVsdGktb21hcCBidWlsZHMKKwkgKi8KKwlpZiAoIWNwdV9pc19vbWFwNDR4eCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIFN0YXRpYyBtYXBwaW5nLCBuZXZlciByZWxlYXNlZCAqLworCWwyY2FjaGVfYmFzZSA9IGlvcmVtYXAoT01BUDQ0WFhfTDJDQUNIRV9CQVNFLCBTWl80Syk7CisJQlVHX09OKCFsMmNhY2hlX2Jhc2UpOworCisJLyogRW5hYmxlIFBMMzEwIEwyIENhY2hlIGNvbnRyb2xsZXIgKi8KKwlvbWFwX3NtYzEoMHgxMDIsIDB4MSk7CisKKwkvKiAzMktCIHdheSBzaXplLCAxNi13YXkgYXNzb2NpYXRpdml0eSwKKwkqIHBhcml0eSBkaXNhYmxlZAorCSovCisJbDJ4MF9pbml0KGwyY2FjaGVfYmFzZSwgMHgwZTA1MDAwMCwgMHhjMDAwMGZmZik7CisKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X2luaXRjYWxsKG9tYXBfbDJfY2FjaGVfaW5pdCk7CisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IGdpY19pbml0X2lycSh2b2lkKQogewogCXZvaWQgX19pb21lbSAqYmFzZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKaW5kZXggM2YxMzM0Zi4uNzAyN2NkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKQEAgLTUwNSw3ICs1MDUsNyBAQAogdm9pZCBfX2luaXQgZ3BtY19pbml0KHZvaWQpCiB7CiAJdTMyIGw7Ci0JY2hhciAqY2s7CisJY2hhciAqY2sgPSBOVUxMOwogCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCWNrID0gImNvcmVfbDNfY2siOwpAQCAtNTIxLDYgKzUyMSw5IEBACiAJCWwgPSBPTUFQNDRYWF9HUE1DX0JBU0U7CiAJfQogCisJaWYgKFdBUk5fT04oIWNrKSkKKwkJcmV0dXJuOworCiAJZ3BtY19sM19jbGsgPSBjbGtfZ2V0KE5VTEwsIGNrKTsKIAlpZiAoSVNfRVJSKGdwbWNfbDNfY2xrKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBnZXQgR1BNQyBjbG9jayAlc1xuIiwgY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggZTlmMjU1ZC4uODY5NzlkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogKi8KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KICNpZmRlZiAgQ09ORklHX0FSQ0hfT01BUDIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCmluZGV4IDI3MDU0MDIuLjI2YWVlZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcnFfYmFua3MpOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBiYXNlOworCQl1bnNpZ25lZCBsb25nIGJhc2UgPSAwOwogCQlzdHJ1Y3Qgb21hcF9pcnFfYmFuayAqYmFuayA9IGlycV9iYW5rcyArIGk7CiAKIAkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQpAQCAtMjAyLDYgKzIwMiw4IEBACiAJCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQogCQkJYmFzZSA9IE9NQVAzNFhYX0lDX0JBU0U7CiAKKwkJQlVHX09OKCFiYXNlKTsKKwogCQkvKiBTdGF0aWMgbWFwcGluZywgbmV2ZXIgcmVsZWFzZWQgKi8KIAkJYmFuay0+YmFzZV9yZWcgPSBpb3JlbWFwKGJhc2UsIFNaXzRLKTsKIAkJaWYgKCFiYW5rLT5iYXNlX3JlZykgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5jCmluZGV4IDBjM2M3MmQuLjhhZmU5ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMKQEAgLTQwOCw2ICs0MDgsNyBAQAogewogCXN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gKmM7CiAJaW50IG5yX2hzbW1jID0gQVJSQVlfU0laRShoc21tY19kYXRhKTsKKwlpbnQgaTsKIAogCWlmIChjcHVfaXNfb21hcDI0MzAoKSkgewogCQljb250cm9sX3BiaWFzX29mZnNldCA9IE9NQVAyNDNYX0NPTlRST0xfUEJJQVNfTElURTsKQEAgLTQzNCw3ICs0MzUsNyBAQAogCQltbWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSksIEdGUF9LRVJORUwpOwogCQlpZiAoIW1tYykgewogCQkJcHJfZXJyKCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBtbWMgZGV2aWNlIVxuIik7Ci0JCQlyZXR1cm47CisJCQlnb3RvIGRvbmU7CiAJCX0KIAogCQlpZiAoYy0+bmFtZSkKQEAgLTUzMiw2ICs1MzMsMTAgQEAKIAkJCWNvbnRpbnVlOwogCQljLT5kZXYgPSBtbWMtPmRldjsKIAl9CisKK2RvbmU6CisJZm9yIChpID0gMDsgaSA8IG5yX2hzbW1jOyBpKyspCisJCWtmcmVlKGhzbW1jX2RhdGFbaV0pOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCmluZGV4IDNmNTliZDEuLjVmZWY3M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtNDg2LDcgKzQ4Niw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9tdXhfZGVjb2RlKHN0cnVjdCBzZXFfZmlsZSAqcywgdTE2IHZhbCkKIHsKIAljaGFyICpmbGFnc1tPTUFQX01VWF9NQVhfTlJfRkxBR1NdOwotCWNoYXIgbW9kZVsxNF07CisJY2hhciBtb2RlW3NpemVvZigiT01BUF9NVVhfTU9ERSIpICsgMV07CiAJaW50IGkgPSAtMTsKIAogCXNwcmludGYobW9kZSwgIk9NQVBfTVVYX01PREUlZCIsIHZhbCAmIDB4Nyk7CkBAIC01NTMsNiArNTUzLDcgQEAKIAkJaWYgKCFtMF9uYW1lKQogCQkJY29udGludWU7CiAKKwkJLyogUkVWSVNJVDogTmVlZHMgdG8gYmUgdXBkYXRlZCBpZiBtb2RlMCBuYW1lcyBnZXQgbG9uZ2VyICovCiAJCWZvciAoaSA9IDA7IGkgPCBPTUFQX01VWF9ERUZOQU1FX0xFTjsgaSsrKSB7CiAJCQlpZiAobTBfbmFtZVtpXSA9PSAnXDAnKSB7CiAJCQkJbTBfZGVmW2ldID0gbTBfbmFtZVtpXTsKQEAgLTk2MCw3ICs5NjEsMTIgQEAKIAl3aGlsZSAoc3VwZXJzZXQtPnJlZ19vZmZzZXQgIT0gIE9NQVBfTVVYX1RFUk1JTkFUT1IpIHsKIAkJc3RydWN0IG9tYXBfbXV4ICplbnRyeTsKIAotI2lmbmRlZiBDT05GSUdfT01BUF9NVVgKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKKwkJaWYgKCFzdXBlcnNldC0+bXV4bmFtZXMgfHwgIXN1cGVyc2V0LT5tdXhuYW1lc1swXSkgeworCQkJc3VwZXJzZXQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisjZWxzZQogCQkvKiBTa2lwIHBpbnMgdGhhdCBhcmUgbm90IG11eGVkIGFzIEdQSU8gYnkgYm9vdGxvYWRlciAqLwogCQlpZiAoIU9NQVBfTU9ERV9HUElPKG9tYXBfbXV4X3JlYWQoc3VwZXJzZXQtPnJlZ19vZmZzZXQpKSkgewogCQkJc3VwZXJzZXQrKzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4MzR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgzNHh4LmMKaW5kZXggNjhlMGE1OS4uMDdhYTdiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgzNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgzNHh4LmMKQEAgLTY0OSw2ICs2NDksNTMgQEAKIAlfT01BUDNfTVVYRU5UUlkoVUFSVDNfVFhfSVJUWCwgMTY2LAogCQkidWFydDNfdHhfaXJ0eCIsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCSJncGlvXzE2NiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKworCS8qIE9ubHkgb24gMzYzMCwgc2VlIG9tYXAzNnh4X2NicF9zdWJzZXQgZm9yIHRoZSBzaWduYWxzICovCisJX09NQVAzX01VWEVOVFJZKEdQTUNfQTExLCAwLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoU0FEMkRfTUJVU0ZMQUcsIDAsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShTQUQyRF9NUkVBRCwgMCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNBRDJEX01XUklURSwgMCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNBRDJEX1NCVVNGTEFHLCAwLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoU0FEMkRfU1JFQUQsIDAsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShTQUQyRF9TV1JJVEUsIDAsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX0ExMSwgMCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNBRDJEX01DQUQyOCwgMCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNBRDJEX01DQUQyOSwgMCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNBRDJEX01DQUQzMiwgMCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNBRDJEX01DQUQzMywgMCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNBRDJEX01DQUQzNCwgMCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNBRDJEX01DQUQzNSwgMCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNBRDJEX01DQUQzNiwgMCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCiAJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCmluZGV4IDhjOTY0YmUuLmUxMGEwMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpAQCAtMzYsNyArMzYsMTMgQEAKICNkZWZpbmUgVUFSVF9PTUFQX05PX0VNUFRZX0ZJRk9fUkVBRF9JUF9SRVYJMHg1MgogI2RlZmluZSBVQVJUX09NQVBfV0VSCQkweDE3CS8qIFdha2UtdXAgZW5hYmxlIHJlZ2lzdGVyICovCiAKLSNkZWZpbmUgREVGQVVMVF9USU1FT1VUICg1ICogSFopCisvKgorICogTk9URTogQnkgZGVmYXVsdCB0aGUgc2VyaWFsIHRpbWVvdXQgaXMgZGlzYWJsZWQgYXMgaXQgY2F1c2VzIGxvc3QgY2hhcmFjdGVycworICogb3ZlciB0aGUgc2VyaWFsIHBvcnRzLiBUaGlzIG1lYW5zIHRoYXQgdGhlIFVBUlQgY2xvY2tzIHdpbGwgc3RheSBvbiB1bnRpbAorICogZGlzYWJsZWQgdmlhIHN5c2ZzLiBUaGlzIGFsc28gY2F1c2VzIHRoYXQgYW55IGRlZXBlciBvbWFwIHNsZWVwIHN0YXRlcyBhcmUKKyAqIGJsb2NrZWQuIAorICovCisjZGVmaW5lIERFRkFVTFRfVElNRU9VVCAwCiAKIHN0cnVjdCBvbWFwX3VhcnRfc3RhdGUgewogCWludCBudW07CkBAIC00MjIsNyArNDI4LDggQEAKIAl1YXJ0LT50aW1lb3V0ID0gREVGQVVMVF9USU1FT1VUOwogCXNldHVwX3RpbWVyKCZ1YXJ0LT50aW1lciwgb21hcF91YXJ0X2lkbGVfdGltZXIsCiAJCSAgICAodW5zaWduZWQgbG9uZykgdWFydCk7Ci0JbW9kX3RpbWVyKCZ1YXJ0LT50aW1lciwgamlmZmllcyArIHVhcnQtPnRpbWVvdXQpOworCWlmICh1YXJ0LT50aW1lb3V0KQorCQltb2RfdGltZXIoJnVhcnQtPnRpbWVyLCBqaWZmaWVzICsgdWFydC0+dGltZW91dCk7CiAJb21hcF91YXJ0X3NtYXJ0X2lkbGVfZW5hYmxlKHVhcnQsIDApOwogCiAJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggYzdmODA4YmYuLjkxZTBlMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTEwLDcgKzEwLDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvb3Jpb241eC5oPgogCi0JLm1hY3JvICBhZGRydWFydCxyeAorCS5tYWNybyAgYWRkcnVhcnQsIHJ4LCB0bXAKIAltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCXRzdAlccngsICMxCQkJCQlAIE1NVSBlbmFibGVkPwogCWxkcmVxCVxyeCwgPU9SSU9ONVhfUkVHU19QSFlTX0JBU0UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggNzE0N2EyOS4uMDZiNTBhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTIsNCArMiw0IEBACiAgKiBhcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAogICovCiAKLSNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgMHhmZDgwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAweGZkODAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmMKaW5kZXggODk4YzBlOC4uOWQxOTc1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmMKQEAgLTIyLDggKzIyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KICNpbmNsdWRlICJjbG9jay5oIgogCkBAIC01NiwxOCArNTcsMTkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGtfcmVnX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHZvaWQgY2xrX3JlZ19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlpZiAoY2xrLT5lbmFibGVfcmVnKQogCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKSAmCiAJCQkgICAgIH4oMSA8PCBjbGstPmVuYWJsZV9zaGlmdCksIGNsay0+ZW5hYmxlX3JlZyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGtfcmVnX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgaW50IGNsa19yZWdfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlpZiAoY2xrLT5lbmFibGVfcmVnKQogCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKSB8CiAJCQkgICAgICgxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KSwgY2xrLT5lbmFibGVfcmVnKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNsa19yZWdfZGlzYWJsZTEoc3RydWN0IGNsayAqY2xrKQpAQCAtNjM2LDMxICs2MzgsMzQgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzBfY2sgPSB7CiAJLm5hbWUgPSAiaTJjMF9jayIsCiAJLnBhcmVudCA9ICZwZXJfY2ssCi0JLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCi0JLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiB8IEZJWEVEX1JBVEUsCiAJLmVuYWJsZV9zaGlmdCA9IDAsCiAJLmVuYWJsZV9yZWcgPSBJMkNDTEtDVFJMX1JFRywKKwkucmF0ZSA9IDEzMDAwMDAwLAorCS5lbmFibGUgPSBjbGtfcmVnX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGNsa19yZWdfZGlzYWJsZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfY2sgPSB7CiAJLm5hbWUgPSAiaTJjMV9jayIsCiAJLnBhcmVudCA9ICZwZXJfY2ssCi0JLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCi0JLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiB8IEZJWEVEX1JBVEUsCiAJLmVuYWJsZV9zaGlmdCA9IDEsCiAJLmVuYWJsZV9yZWcgPSBJMkNDTEtDVFJMX1JFRywKKwkucmF0ZSA9IDEzMDAwMDAwLAorCS5lbmFibGUgPSBjbGtfcmVnX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGNsa19yZWdfZGlzYWJsZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfY2sgPSB7CiAJLm5hbWUgPSAiaTJjMl9jayIsCiAJLnBhcmVudCA9ICZwZXJfY2ssCi0JLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCi0JLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiB8IEZJWEVEX1JBVEUsCiAJLmVuYWJsZV9zaGlmdCA9IDIsCiAJLmVuYWJsZV9yZWcgPSBVU0JfT1RHX0NMS0NUUkxfUkVHLAorCS5yYXRlID0gMTMwMDAwMDAsCisJLmVuYWJsZSA9IGNsa19yZWdfZW5hYmxlLAorCS5kaXNhYmxlID0gY2xrX3JlZ19kaXNhYmxlLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc3BpMF9jayA9IHsKQEAgLTczOCwxNiArNzQzLDE2IEBACiAJLm5hbWUgPSAid2R0X2NrIiwKIAkucGFyZW50ID0gJnBlcl9jaywKIAkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKLQkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAogCS5lbmFibGVfc2hpZnQgPSAwLAogCS5lbmFibGVfcmVnID0gVElNQ0xLQ1RSTF9SRUcsCisJLmVuYWJsZSA9IGNsa19yZWdfZW5hYmxlLAorCS5kaXNhYmxlID0gY2xrX3JlZ19kaXNhYmxlLAogfTsKIAogLyogVGhlc2UgY2xvY2tzIGFyZSB2aXNpYmxlIG91dHNpZGUgdGhpcyBtb2R1bGUKICAqIGFuZCBjYW4gYmUgaW5pdGlhbGl6ZWQKICAqLwotc3RhdGljIHN0cnVjdCBjbGsgKm9uY2hpcF9jbGtzW10gPSB7CitzdGF0aWMgc3RydWN0IGNsayAqb25jaGlwX2Nsa3NbXSBfX2luaXRkYXRhID0gewogCSZja18xM01IeiwKIAkmY2tfcGxsMSwKIAkmY2tfcGxsNCwKQEAgLTc3Nyw0OSArNzgyLDc0IEBACiAJJndkdF9jaywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBvbmNoaXBfY2xrcmVnW10gPSB7CisJeyAuY2xrID0gJmNrXzEzTUh6LAkuY29uX2lkID0gImNrXzEzTUh6Igl9LAorCXsgLmNsayA9ICZja19wbGwxLAkuY29uX2lkID0gImNrX3BsbDEiCX0sCisJeyAuY2xrID0gJmNrX3BsbDQsCS5jb25faWQgPSAiY2tfcGxsNCIJfSwKKwl7IC5jbGsgPSAmY2tfcGxsNSwJLmNvbl9pZCA9ICJja19wbGw1Igl9LAorCXsgLmNsayA9ICZja19wbGwzLAkuY29uX2lkID0gImNrX3BsbDMiCX0sCisJeyAuY2xrID0gJnZmcDlfY2ssCS5jb25faWQgPSAidmZwOV9jayIJfSwKKwl7IC5jbGsgPSAmbTJoY2xrX2NrLAkuY29uX2lkID0gIm0yaGNsa19jayIJfSwKKwl7IC5jbGsgPSAmaGNsa19jaywJLmNvbl9pZCA9ICJoY2xrX2NrIgl9LAorCXsgLmNsayA9ICZkbWFfY2ssCS5jb25faWQgPSAiZG1hX2NrIgl9LAorCXsgLmNsayA9ICZmbGFzaF9jaywJLmNvbl9pZCA9ICJmbGFzaF9jayIJfSwKKwl7IC5jbGsgPSAmZHVtX2NrLAkuY29uX2lkID0gImR1bV9jayIJfSwKKwl7IC5jbGsgPSAma2V5c2Nhbl9jaywJLmNvbl9pZCA9ICJrZXlzY2FuX2NrIgl9LAorCXsgLmNsayA9ICZwd20xX2NrLAkuY29uX2lkID0gInB3bTFfY2siCX0sCisJeyAuY2xrID0gJnB3bTJfY2ssCS5jb25faWQgPSAicHdtMl9jayIJfSwKKwl7IC5jbGsgPSAmanBlZ19jaywJLmNvbl9pZCA9ICJqcGVnX2NrIgl9LAorCXsgLmNsayA9ICZtc19jaywJLmNvbl9pZCA9ICJtc19jayIJfSwKKwl7IC5jbGsgPSAmdG91Y2hfY2ssCS5jb25faWQgPSAidG91Y2hfY2siCX0sCisJeyAuY2xrID0gJmkyYzBfY2ssCS5kZXZfaWQgPSAicG54LWkyYy4wIgl9LAorCXsgLmNsayA9ICZpMmMxX2NrLAkuZGV2X2lkID0gInBueC1pMmMuMSIJfSwKKwl7IC5jbGsgPSAmaTJjMl9jaywJLmRldl9pZCA9ICJwbngtaTJjLjIiCX0sCisJeyAuY2xrID0gJnNwaTBfY2ssCS5jb25faWQgPSAic3BpMF9jayIJfSwKKwl7IC5jbGsgPSAmc3BpMV9jaywJLmNvbl9pZCA9ICJzcGkxX2NrIgl9LAorCXsgLmNsayA9ICZ1YXJ0M19jaywJLmNvbl9pZCA9ICJ1YXJ0M19jayIJfSwKKwl7IC5jbGsgPSAmdWFydDRfY2ssCS5jb25faWQgPSAidWFydDRfY2siCX0sCisJeyAuY2xrID0gJnVhcnQ1X2NrLAkuY29uX2lkID0gInVhcnQ1X2NrIgl9LAorCXsgLmNsayA9ICZ1YXJ0Nl9jaywJLmNvbl9pZCA9ICJ1YXJ0Nl9jayIJfSwKKwl7IC5jbGsgPSAmd2R0X2NrLAkuZGV2X2lkID0gInBueDQwMDgtd2F0Y2hkb2ciIH0sCit9OworCitzdGF0aWMgdm9pZCBsb2NhbF9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKFdBUk5fT04oY2xrLT51c2Vjb3VudCA9PSAwKSkKKwkJcmV0dXJuOworCisJaWYgKCEoLS1jbGstPnVzZWNvdW50KSkgeworCQlpZiAoY2xrLT5kaXNhYmxlKQorCQkJY2xrLT5kaXNhYmxlKGNsayk7CisJCWVsc2UgaWYgKCEoY2xrLT5mbGFncyAmIEZJWEVEX1JBVEUpICYmIGNsay0+cmF0ZSAmJiBjbGstPnNldF9yYXRlKQorCQkJY2xrLT5zZXRfcmF0ZShjbGssIDApOworCQlpZiAoY2xrLT5wYXJlbnQpCisJCQlsb2NhbF9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CisJfQorfQorCiBzdGF0aWMgaW50IGxvY2FsX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewogCWludCByZXQgPSAwOwogCi0JaWYgKCEoY2xrLT5mbGFncyAmIEZJWEVEX1JBVEUpICYmICFjbGstPnJhdGUgJiYgY2xrLT5zZXRfcmF0ZQotCSAgICAmJiBjbGstPnVzZXJfcmF0ZSkKLQkJcmV0ID0gY2xrLT5zZXRfcmF0ZShjbGssIGNsay0+dXNlcl9yYXRlKTsKLQlyZXR1cm4gcmV0OwotfQorCWlmIChjbGstPnVzZWNvdW50ID09IDApIHsKKwkJaWYgKGNsay0+cGFyZW50KSB7CisJCQlyZXQgPSBsb2NhbF9jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlnb3RvIG91dDsKKwkJfQogCi1zdGF0aWMgdm9pZCBsb2NhbF9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKCEoY2xrLT5mbGFncyAmIEZJWEVEX1JBVEUpICYmIGNsay0+cmF0ZSAmJiBjbGstPnNldF9yYXRlKQotCQljbGstPnNldF9yYXRlKGNsaywgMCk7Ci19CisJCWlmIChjbGstPmVuYWJsZSkKKwkJCXJldCA9IGNsay0+ZW5hYmxlKGNsayk7CisJCWVsc2UgaWYgKCEoY2xrLT5mbGFncyAmIEZJWEVEX1JBVEUpICYmICFjbGstPnJhdGUgJiYgY2xrLT5zZXRfcmF0ZQorCQkJICAgICYmIGNsay0+dXNlcl9yYXRlKQorCQkJcmV0ID0gY2xrLT5zZXRfcmF0ZShjbGssIGNsay0+dXNlcl9yYXRlKTsKIAotc3RhdGljIHZvaWQgbG9jYWxfY2xrX3VudXNlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpZiAoY2xrLT51c2Vjb3VudCA+IDAgJiYgISgtLWNsay0+dXNlY291bnQpKSB7Ci0JCWxvY2FsX2Nsa19kaXNhYmxlKGNsayk7Ci0JCWlmIChjbGstPnBhcmVudCkKLQkJCWxvY2FsX2Nsa191bnVzZShjbGstPnBhcmVudCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGxvY2FsX2Nsa191c2Uoc3RydWN0IGNsayAqY2xrKQotewotCWludCByZXQgPSAwOwotCWlmIChjbGstPnVzZWNvdW50KysgPT0gMCkgewotCQlpZiAoY2xrLT5wYXJlbnQpCi0JCQlyZXQgPSBsb2NhbF9jbGtfdXNlKGNsay0+cGFyZW50KTsKLQotCQlpZiAocmV0ICE9IDApIHsKLQkJCWNsay0+dXNlY291bnQtLTsKKwkJaWYgKHJldCAhPSAwICYmIGNsay0+cGFyZW50KSB7CisJCQlsb2NhbF9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXJldCA9IGxvY2FsX2Nsa19lbmFibGUoY2xrKTsKLQotCQlpZiAocmV0ICE9IDAgJiYgY2xrLT5wYXJlbnQpIHsKLQkJCWxvY2FsX2Nsa191bnVzZShjbGstPnBhcmVudCk7Ci0JCQljbGstPnVzZWNvdW50LS07Ci0JCX0KKwkJY2xrLT51c2Vjb3VudCsrOwogCX0KIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtODY2LDM1ICs4OTYsNiBAQAogCiBFWFBPUlRfU1lNQk9MKGNsa19zZXRfcmF0ZSk7CiAKLXN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKLXsKLQlzdHJ1Y3QgY2xrICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOwotCXN0cnVjdCBjbGsgKipjbGtwOwotCi0JY2xvY2tfbG9jaygpOwotCWZvciAoY2xrcCA9IG9uY2hpcF9jbGtzOyBjbGtwIDwgb25jaGlwX2Nsa3MgKyBBUlJBWV9TSVpFKG9uY2hpcF9jbGtzKTsKLQkgICAgIGNsa3ArKykgewotCQlpZiAoc3RyY21wKGlkLCAoKmNsa3ApLT5uYW1lKSA9PSAwCi0JCSAgICAmJiB0cnlfbW9kdWxlX2dldCgoKmNsa3ApLT5vd25lcikpIHsKLQkJCWNsayA9ICgqY2xrcCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQljbG9ja191bmxvY2soKTsKLQotCXJldHVybiBjbGs7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19nZXQpOwotCi12b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQotewotCWNsb2NrX2xvY2soKTsKLQlpZiAoY2xrICYmICFJU19FUlIoY2xrKSkKLQkJbW9kdWxlX3B1dChjbGstPm93bmVyKTsKLQljbG9ja191bmxvY2soKTsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3B1dCk7Ci0KIHVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIHJldDsKQEAgLTkwNywxMCArOTA4LDEwIEBACiAKIGludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCiAJY2xvY2tfbG9jaygpOwotCXJldCA9IGxvY2FsX2Nsa191c2UoY2xrKTsKKwlyZXQgPSBsb2NhbF9jbGtfZW5hYmxlKGNsayk7CiAJY2xvY2tfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTkyMCw3ICs5MjEsNyBAQAogdm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJY2xvY2tfbG9jaygpOwotCWxvY2FsX2Nsa191bnVzZShjbGspOworCWxvY2FsX2Nsa19kaXNhYmxlKGNsayk7CiAJY2xvY2tfdW5sb2NrKCk7CiB9CiAKQEAgLTk2NywxOCArOTY4LDI0IEBACiAKIAlmb3IgKGNsa3AgPSBvbmNoaXBfY2xrczsgY2xrcCA8IG9uY2hpcF9jbGtzICsgQVJSQVlfU0laRShvbmNoaXBfY2xrcyk7CiAJICAgICBjbGtwKyspIHsKLQkJaWYgKCgoKmNsa3ApLT5mbGFncyAmIE5FRURTX0lOSVRJQUxJWkFUSU9OKQotCQkgICAgJiYgKCgqY2xrcCktPnNldF9yYXRlKSkgewotCQkJKCpjbGtwKS0+dXNlcl9yYXRlID0gKCpjbGtwKS0+cmF0ZTsKLQkJCWxvY2FsX3NldF9yYXRlKCgqY2xrcCksICgqY2xrcCktPnVzZXJfcmF0ZSk7Ci0JCQlpZiAoKCpjbGtwKS0+c2V0X3BhcmVudCkKLQkJCQkoKmNsa3ApLT5zZXRfcGFyZW50KCgqY2xrcCksICgqY2xrcCktPnBhcmVudCk7CisJCXN0cnVjdCBjbGsgKmNsayA9ICpjbGtwOworCQlpZiAoY2xrLT5mbGFncyAmIE5FRURTX0lOSVRJQUxJWkFUSU9OKSB7CisJCQlpZiAoY2xrLT5zZXRfcmF0ZSkgeworCQkJCWNsay0+dXNlcl9yYXRlID0gY2xrLT5yYXRlOworCQkJCWxvY2FsX3NldF9yYXRlKGNsaywgY2xrLT51c2VyX3JhdGUpOworCQkJCWlmIChjbGstPnNldF9wYXJlbnQpCisJCQkJCWNsay0+c2V0X3BhcmVudChjbGssIGNsay0+cGFyZW50KTsKKwkJCX0KKwkJCWlmIChjbGstPmVuYWJsZSAmJiBjbGstPnVzZWNvdW50KQorCQkJCWNsay0+ZW5hYmxlKGNsayk7CisJCQlpZiAoY2xrLT5kaXNhYmxlICYmICFjbGstPnVzZWNvdW50KQorCQkJCWNsay0+ZGlzYWJsZShjbGspOwogCQl9CiAJCXByX2RlYnVnKCIlczogY2xvY2sgJXMsIHJhdGUgJWxkXG4iLAotCQkJX19mdW5jX18sICgqY2xrcCktPm5hbWUsICgqY2xrcCktPnJhdGUpOworCQkJX19mdW5jX18sIGNsay0+bmFtZSwgY2xrLT5yYXRlKTsKIAl9CiAKLQlsb2NhbF9jbGtfdXNlKCZja19wbGw0KTsKKwlsb2NhbF9jbGtfZW5hYmxlKCZja19wbGw0KTsKIAogCS8qIGlmIGNrXzEzTUh6IGlzIG5vdCB1c2VkLCBkaXNhYmxlIGl0LiAqLwogCWlmIChja18xM01Iei51c2Vjb3VudCA9PSAwKQpAQCAtOTg3LDYgKzk5NCw4IEBACiAJLyogRGlzYWJsZSBhdXRvY2xvY2tpbmcgKi8KIAlfX3Jhd193cml0ZWIoMHhmZiwgQVVUT0NMS19DVFJMKTsKIAorCWNsa2Rldl9hZGRfdGFibGUob25jaGlwX2Nsa3JlZywgQVJSQVlfU0laRShvbmNoaXBfY2xrcmVnKSk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suaAppbmRleCBjZDU4ZjM3Li4zOTcyMGQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suaApAQCAtMTQsOCArMTQsNiBAQAogI2RlZmluZSBfX0FSQ0hfQVJNX1BOWDQwMDhfQ0xPQ0tfSF9fCiAKIHN0cnVjdCBjbGsgewotCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAljb25zdCBjaGFyICpuYW1lOwogCXN0cnVjdCBjbGsgKnBhcmVudDsKIAlzdHJ1Y3QgY2xrICpwcm9wYWdhdGVfbmV4dDsKQEAgLTI5LDkgKzI3LDExIEBACiAJdTggZW5hYmxlX3NoaWZ0MTsKIAl1MzIgZW5hYmxlX3JlZzE7CiAJdTMyIHBhcmVudF9zd2l0Y2hfcmVnOwotCSB1MzIoKnJvdW5kX3JhdGUpIChzdHJ1Y3QgY2xrICosIHUzMik7CisJdTMyKCpyb3VuZF9yYXRlKSAoc3RydWN0IGNsayAqLCB1MzIpOwogCWludCAoKnNldF9yYXRlKSAoc3RydWN0IGNsayAqLCB1MzIpOwogCWludCAoKnNldF9wYXJlbnQpIChzdHJ1Y3QgY2xrICogY2xrLCBzdHJ1Y3QgY2xrICogcGFyZW50KTsKKwlpbnQgKCplbmFibGUpKHN0cnVjdCBjbGsgKik7CisJdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBjbGsgKik7CiB9OwogCiAvKiBGbGFncyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2kyYy5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2kyYy5jCmluZGV4IGYzZmVhMjkuLjgxMDNmOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pMmMuYworKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvaTJjLmMKQEAgLTE4LDEyMCArMTgsMjQgQEAKICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgogCi1zdGF0aWMgaW50IHNldF9jbG9ja19ydW4oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgY2xrICpjbGs7Ci0JY2hhciBuYW1lWzEwXTsKLQlpbnQgcmV0dmFsID0gMDsKLQotCXNucHJpbnRmKG5hbWUsIDEwLCAiaTJjJWRfY2siLCBwZGV2LT5pZCk7Ci0JY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBuYW1lKTsKLQlpZiAoIUlTX0VSUihjbGspKSB7Ci0JCWNsa19zZXRfcmF0ZShjbGssIDEpOwotCQljbGtfcHV0KGNsayk7Ci0JfSBlbHNlCi0JCXJldHZhbCA9IC1FTk9FTlQ7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgaW50IHNldF9jbG9ja19zdG9wKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IGNsayAqY2xrOwotCWNoYXIgbmFtZVsxMF07Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlzbnByaW50ZihuYW1lLCAxMCwgImkyYyVkX2NrIiwgcGRldi0+aWQpOwotCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgbmFtZSk7Ci0JaWYgKCFJU19FUlIoY2xrKSkgewotCQljbGtfc2V0X3JhdGUoY2xrLCAwKTsKLQkJY2xrX3B1dChjbGspOwotCX0gZWxzZQotCQlyZXR2YWwgPSAtRU5PRU5UOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludCBpMmNfcG54X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCWludCByZXR2YWwgPSAwOwotI2lmZGVmIENPTkZJR19QTQotCXJldHZhbCA9IHNldF9jbG9ja19ydW4ocGRldik7Ci0jZW5kaWYKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgaW50IGkyY19wbnhfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0jaWZkZWYgQ09ORklHX1BNCi0JcmV0dmFsID0gc2V0X2Nsb2NrX3J1bihwZGV2KTsKLSNlbmRpZgotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB1MzIgY2FsY3VsYXRlX2lucHV0X2ZyZXEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlyZXR1cm4gSENMS19NSFo7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSBwbnhfYWxnb19kYXRhMCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaTJjX3BueF9kYXRhIGkyYzBfZGF0YSA9IHsKKwkubmFtZSA9IEkyQ19DSElQX05BTUUgIjAiLAogCS5iYXNlID0gUE5YNDAwOF9JMkMxX0JBU0UsCiAJLmlycSA9IEkyQ18xX0lOVCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgcG54X2FsZ29fZGF0YTEgPSB7CitzdGF0aWMgc3RydWN0IGkyY19wbnhfZGF0YSBpMmMxX2RhdGEgPSB7CisJLm5hbWUgPSBJMkNfQ0hJUF9OQU1FICIxIiwKIAkuYmFzZSA9IFBOWDQwMDhfSTJDMl9CQVNFLAogCS5pcnEgPSBJMkNfMl9JTlQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19wbnhfYWxnb19kYXRhIHBueF9hbGdvX2RhdGEyID0geworc3RhdGljIHN0cnVjdCBpMmNfcG54X2RhdGEgaTJjMl9kYXRhID0geworCS5uYW1lID0gIlVTQi1JMkMiLAogCS5iYXNlID0gKFBOWDQwMDhfVVNCX0NPTkZJR19CQVNFICsgMHgzMDApLAogCS5pcnEgPSBVU0JfSTJDX0lOVCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgcG54X2FkYXB0ZXIwID0gewotCS5uYW1lID0gSTJDX0NISVBfTkFNRSAiMCIsCi0JLmFsZ29fZGF0YSA9ICZwbnhfYWxnb19kYXRhMCwKLX07Ci1zdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHBueF9hZGFwdGVyMSA9IHsKLQkubmFtZSA9IEkyQ19DSElQX05BTUUgIjEiLAotCS5hbGdvX2RhdGEgPSAmcG54X2FsZ29fZGF0YTEsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHBueF9hZGFwdGVyMiA9IHsKLQkubmFtZSA9ICJVU0ItSTJDIiwKLQkuYWxnb19kYXRhID0gJnBueF9hbGdvX2RhdGEyLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfcG54X2RhdGEgaTJjMF9kYXRhID0gewotCS5zdXNwZW5kID0gaTJjX3BueF9zdXNwZW5kLAotCS5yZXN1bWUgPSBpMmNfcG54X3Jlc3VtZSwKLQkuY2FsY3VsYXRlX2lucHV0X2ZyZXEgPSBjYWxjdWxhdGVfaW5wdXRfZnJlcSwKLQkuc2V0X2Nsb2NrX3J1biA9IHNldF9jbG9ja19ydW4sCi0JLnNldF9jbG9ja19zdG9wID0gc2V0X2Nsb2NrX3N0b3AsCi0JLmFkYXB0ZXIgPSAmcG54X2FkYXB0ZXIwLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfcG54X2RhdGEgaTJjMV9kYXRhID0gewotCS5zdXNwZW5kID0gaTJjX3BueF9zdXNwZW5kLAotCS5yZXN1bWUgPSBpMmNfcG54X3Jlc3VtZSwKLQkuY2FsY3VsYXRlX2lucHV0X2ZyZXEgPSBjYWxjdWxhdGVfaW5wdXRfZnJlcSwKLQkuc2V0X2Nsb2NrX3J1biA9IHNldF9jbG9ja19ydW4sCi0JLnNldF9jbG9ja19zdG9wID0gc2V0X2Nsb2NrX3N0b3AsCi0JLmFkYXB0ZXIgPSAmcG54X2FkYXB0ZXIxLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfcG54X2RhdGEgaTJjMl9kYXRhID0gewotCS5zdXNwZW5kID0gaTJjX3BueF9zdXNwZW5kLAotCS5yZXN1bWUgPSBpMmNfcG54X3Jlc3VtZSwKLQkuY2FsY3VsYXRlX2lucHV0X2ZyZXEgPSBjYWxjdWxhdGVfaW5wdXRfZnJlcSwKLQkuc2V0X2Nsb2NrX3J1biA9IHNldF9jbG9ja19ydW4sCi0JLnNldF9jbG9ja19zdG9wID0gc2V0X2Nsb2NrX3N0b3AsCi0JLmFkYXB0ZXIgPSAmcG54X2FkYXB0ZXIyLAotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaTJjMF9kZXZpY2UgPSB7CiAJLm5hbWUgPSAicG54LWkyYyIsCiAJLmlkID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjM3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0NMS0RFVl9ICisjZGVmaW5lIF9fQVNNX01BQ0hfQ0xLREVWX0gKKworI2RlZmluZSBfX2Nsa19nZXQoY2xrKSAoeyAxOyB9KQorI2RlZmluZSBfX2Nsa19wdXQoY2xrKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDZkMTQwN2YuLjZjYThiZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqCiAqLwogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3YJXHJ4LCAjMHgwMDA5MDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC90aW1leC5oCmluZGV4IDVmZjAxOTYuLmIzODNjN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvdGltZXguaAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL3RpbWV4LmgKQEAgLTE0LDYwICsxNCw2IEBACiAjaWZuZGVmIF9fUE5YNDAwOF9USU1FWF9ICiAjZGVmaW5lIF9fUE5YNDAwOF9USU1FWF9ICiAKLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCTEwMDAwMDAKIAotI2RlZmluZSBUSUNLUzJVU0VDUyh4KQkoeCkKLQotLyogTWlsbGlTZWNvbmQgVGltZXIgLSBDaGFwdGVyIDIxIFBhZ2UgMjAyICovCi0KLSNkZWZpbmUgTVNUSU1fSU5UICAgICBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4MCkpCi0jZGVmaW5lIE1TVElNX0NUUkwgICAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDQpKQotI2RlZmluZSBNU1RJTV9DT1VOVEVSIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHg4KSkKLSNkZWZpbmUgTVNUSU1fTUNUUkwgICBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4MTQpKQotI2RlZmluZSBNU1RJTV9NQVRDSDAgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHgxOCkpCi0jZGVmaW5lIE1TVElNX01BVENIMSAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDFjKSkKLQotLyogSGlnaCBTcGVlZCBUaW1lciAtIENocGF0ZXIgMjIsIFBhZ2UgMjA1ICovCi0KLSNkZWZpbmUgSFNUSU1fSU5UICAgICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MCkpCi0jZGVmaW5lIEhTVElNX0NUUkwgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDQpKQotI2RlZmluZSBIU1RJTV9DT1VOVEVSIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHg4KSkKLSNkZWZpbmUgSFNUSU1fUE1BVENIICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4QykpCi0jZGVmaW5lIEhTVElNX1BDT1VOVCAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDEwKSkKLSNkZWZpbmUgSFNUSU1fTUNUUkwgICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MTQpKQotI2RlZmluZSBIU1RJTV9NQVRDSDAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgxOCkpCi0jZGVmaW5lIEhTVElNX01BVENIMSAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDFjKSkKLSNkZWZpbmUgSFNUSU1fTUFUQ0gyICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MjApKQotI2RlZmluZSBIU1RJTV9DQ1IgICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgyOCkpCi0jZGVmaW5lIEhTVElNX0NSMCAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDJDKSkKLSNkZWZpbmUgSFNUSU1fQ1IxICAgICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MzApKQotCi0vKiBJTVBPUlRBTlQ6IGJvdGggdGltZXJzIGFyZSBVUENPVU5USU5HICovCi0KLS8qIHhTVElNX01DVFJMIGJpdCBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBNUjBfSU5UICAgICAgICAxCi0jZGVmaW5lIFJFU0VUX0NPVU5UMCAgICgxPDwxKQotI2RlZmluZSBTVE9QX0NPVU5UMCAgICAoMTw8MikKLSNkZWZpbmUgTVIxX0lOVCAgICAgICAgKDE8PDMpCi0jZGVmaW5lIFJFU0VUX0NPVU5UMSAgICgxPDw0KQotI2RlZmluZSBTVE9QX0NPVU5UMSAgICAoMTw8NSkKLSNkZWZpbmUgTVIyX0lOVCAgICAgICAgKDE8PDYpCi0jZGVmaW5lIFJFU0VUX0NPVU5UMiAgICgxPDw3KQotI2RlZmluZSBTVE9QX0NPVU5UMiAgICAoMTw8OCkKLQotLyogeFNUSU1fQ1RSTCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgQ09VTlRfRU5BQiAgICAgMQotI2RlZmluZSBSRVNFVF9DT1VOVCAgICAoMTw8MSkKLSNkZWZpbmUgREVCVUdfRU4gICAgICAgKDE8PDIpCi0KLS8qIHhTVElNX0lOVCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgTUFUQ0gwX0lOVCAgICAgMQotI2RlZmluZSBNQVRDSDFfSU5UICAgICAoMTw8MSkKLSNkZWZpbmUgTUFUQ0gyX0lOVCAgICAgKDE8PDIpCi0jZGVmaW5lIFJUQ19USUNLMCAgICAgICgxPDw0KQotI2RlZmluZSBSVENfVElDSzEgICAgICAoMTw8NSkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvcG0uYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9wbS5jCmluZGV4IGIzZDhkNTMuLjFmMDU4NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9wbS5jCkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9wbS5oPgogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC90aW1lLmMKaW5kZXggZmMwYmExOC4uMGM4YWFkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvdGltZS5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogCisjaW5jbHVkZSAidGltZS5oIgorCiAvKiEgTm90ZTogYWxsIHRpbWVycyBhcmUgVVBDT1VOVElORyAqLwogCiAvKiEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC90aW1lLmggYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZTg4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvdGltZS5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKyAqCisgKiBQTlg0MDA4IHRpbWVycyBoZWFkZXIgZmlsZQorICoKKyAqIEF1dGhvcjogRG1pdHJ5IENoaWdpcmV2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisjaWZuZGVmIFBOWF9USU1FX0gKKyNkZWZpbmUgUE5YX1RJTUVfSAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgVElDS1MyVVNFQ1MoeCkJKHgpCisKKy8qIE1pbGxpU2Vjb25kIFRpbWVyIC0gQ2hhcHRlciAyMSBQYWdlIDIwMiAqLworCisjZGVmaW5lIE1TVElNX0lOVCAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDApKQorI2RlZmluZSBNU1RJTV9DVFJMICAgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHg0KSkKKyNkZWZpbmUgTVNUSU1fQ09VTlRFUiBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4OCkpCisjZGVmaW5lIE1TVElNX01DVFJMICAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDE0KSkKKyNkZWZpbmUgTVNUSU1fTUFUQ0gwICBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4MTgpKQorI2RlZmluZSBNU1RJTV9NQVRDSDEgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHgxYykpCisKKy8qIEhpZ2ggU3BlZWQgVGltZXIgLSBDaHBhdGVyIDIyLCBQYWdlIDIwNSAqLworCisjZGVmaW5lIEhTVElNX0lOVCAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDApKQorI2RlZmluZSBIU1RJTV9DVFJMICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHg0KSkKKyNkZWZpbmUgSFNUSU1fQ09VTlRFUiBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4OCkpCisjZGVmaW5lIEhTVElNX1BNQVRDSCAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweEMpKQorI2RlZmluZSBIU1RJTV9QQ09VTlQgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgxMCkpCisjZGVmaW5lIEhTVElNX01DVFJMICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDE0KSkKKyNkZWZpbmUgSFNUSU1fTUFUQ0gwICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MTgpKQorI2RlZmluZSBIU1RJTV9NQVRDSDEgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgxYykpCisjZGVmaW5lIEhTVElNX01BVENIMiAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDIwKSkKKyNkZWZpbmUgSFNUSU1fQ0NSICAgICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MjgpKQorI2RlZmluZSBIU1RJTV9DUjAgICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgyQykpCisjZGVmaW5lIEhTVElNX0NSMSAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDMwKSkKKworLyogSU1QT1JUQU5UOiBib3RoIHRpbWVycyBhcmUgVVBDT1VOVElORyAqLworCisvKiB4U1RJTV9NQ1RSTCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVIwX0lOVCAgICAgICAgMQorI2RlZmluZSBSRVNFVF9DT1VOVDAgICAoMTw8MSkKKyNkZWZpbmUgU1RPUF9DT1VOVDAgICAgKDE8PDIpCisjZGVmaW5lIE1SMV9JTlQgICAgICAgICgxPDwzKQorI2RlZmluZSBSRVNFVF9DT1VOVDEgICAoMTw8NCkKKyNkZWZpbmUgU1RPUF9DT1VOVDEgICAgKDE8PDUpCisjZGVmaW5lIE1SMl9JTlQgICAgICAgICgxPDw2KQorI2RlZmluZSBSRVNFVF9DT1VOVDIgICAoMTw8NykKKyNkZWZpbmUgU1RPUF9DT1VOVDIgICAgKDE8PDgpCisKKy8qIHhTVElNX0NUUkwgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIENPVU5UX0VOQUIgICAgIDEKKyNkZWZpbmUgUkVTRVRfQ09VTlQgICAgKDE8PDEpCisjZGVmaW5lIERFQlVHX0VOICAgICAgICgxPDwyKQorCisvKiB4U1RJTV9JTlQgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIE1BVENIMF9JTlQgICAgIDEKKyNkZWZpbmUgTUFUQ0gxX0lOVCAgICAgKDE8PDEpCisjZGVmaW5lIE1BVENIMl9JTlQgICAgICgxPDwyKQorI2RlZmluZSBSVENfVElDSzAgICAgICAoMTw8NCkKKyNkZWZpbmUgUlRDX1RJQ0sxICAgICAgKDE8PDUpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmMKaW5kZXggNDlhZTM4Mi4uYWJiYTAwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5jCkBAIC03OCwxMSArNzgsMyBAQAogCS5lbmFibGUJCT0gY2xrX2NrZW5fZW5hYmxlLAogCS5kaXNhYmxlCT0gY2xrX2NrZW5fZGlzYWJsZSwKIH07Ci0KLXZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrcywgc2l6ZV90IG51bSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKLQkJY2xrZGV2X2FkZCgmY2xrc1tpXSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaAppbmRleCA5NzhhMzY2Li5kODQ4ODc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmgKQEAgLTY3LDcgKzY3LDMgQEAKIGV4dGVybiB2b2lkIGNsa19weGEzeHhfY2tlbl9kaXNhYmxlKHN0cnVjdCBjbGsgKik7CiAjZW5kaWYKIAotdm9pZCBjbGtzX3JlZ2lzdGVyKHN0cnVjdCBjbGtfbG9va3VwICpjbGtzLCBzaXplX3QgbnVtKTsKLWludCBjbGtfYWRkX2FsaWFzKGNvbnN0IGNoYXIgKmFsaWFzLCBjb25zdCBjaGFyICphbGlhc19uYW1lLCBjaGFyICppZCwKLQlzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKaW5kZXggOTE0MTdmMC4uOTZlZDEzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYwpAQCAtMTI4LDYgKzEyOCw2IEBACiAKIHZvaWQgZXNlcmllc19yZWdpc3Rlcl9jbGtzKHZvaWQpCiB7Ci0JY2xrc19yZWdpc3Rlcihlc2VyaWVzX2Nsa3JlZ3MsIEFSUkFZX1NJWkUoZXNlcmllc19jbGtyZWdzKSk7CisJY2xrZGV2X2FkZF90YWJsZShlc2VyaWVzX2Nsa3JlZ3MsIEFSUkFZX1NJWkUoZXNlcmllc19jbGtyZWdzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jYW1lcmEuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jYW1lcmEuaAppbmRleCAzMWFiZTZkLi42NzA5YjFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY2FtZXJhLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NhbWVyYS5oCkBAIC0zNSw4ICszNSw2IEBACiAjZGVmaW5lIFBYQV9DQU1FUkFfVlNQCQkweDQwMAogCiBzdHJ1Y3QgcHhhY2FtZXJhX3BsYXRmb3JtX2RhdGEgewotCWludCAoKmluaXQpKHN0cnVjdCBkZXZpY2UgKik7Ci0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgbWNsa18xMGtoejsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDU1ZDZhMTcuLjAxY2Y4MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMyw3ICsxMyw3IEBACiAKICNpbmNsdWRlICJoYXJkd2FyZS5oIgogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICMweDQwMDAwMDAwCQlAIHBoeXNpY2FsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCBlOTBjNWVlLi5iZmVjZmJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTgsNCArOCw0IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLSNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKDB4ZTgwMDAwMDApCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgICgweGU4MDAwMDAwVUwpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCmluZGV4IDJjMWIwYjcuLjBiOWFkMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCkBAIC0zNDksNyArMzQ5LDcgQEAKIAogCQlyZXNldF9zdGF0dXMgPSBSQ1NSOwogCi0JCWNsa3NfcmVnaXN0ZXIocHhhMjV4X2Nsa3JlZ3MsIEFSUkFZX1NJWkUocHhhMjV4X2Nsa3JlZ3MpKTsKKwkJY2xrZGV2X2FkZF90YWJsZShweGEyNXhfY2xrcmVncywgQVJSQVlfU0laRShweGEyNXhfY2xrcmVncykpOwogCiAJCWlmICgocmV0ID0gcHhhX2luaXRfZG1hKElSUV9ETUEsIDE2KSkpCiAJCQlyZXR1cm4gcmV0OwpAQCAtMzcwLDcgKzM3MCw3IEBACiAKIAkvKiBPbmx5IGFkZCBIV1VBUlQgZm9yIFBYQTI1NS8yNng7IFBYQTIxMC8yNTAgZG8gbm90IGhhdmUgaXQuICovCiAJaWYgKGNwdV9pc19weGEyNTUoKSkKLQkJY2xrc19yZWdpc3RlcigmcHhhMjV4X2h3dWFydF9jbGtyZWcsIDEpOworCQljbGtkZXZfYWRkKCZweGEyNXhfaHd1YXJ0X2Nsa3JlZyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwppbmRleCA2YTBiNzMxLi5kNzgzMTIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwpAQCAtMzkyLDcgKzM5Miw3IEBACiAKIAkJcmVzZXRfc3RhdHVzID0gUkNTUjsKIAotCQljbGtzX3JlZ2lzdGVyKHB4YTI3eF9jbGtyZWdzLCBBUlJBWV9TSVpFKHB4YTI3eF9jbGtyZWdzKSk7CisJCWNsa2Rldl9hZGRfdGFibGUocHhhMjd4X2Nsa3JlZ3MsIEFSUkFZX1NJWkUocHhhMjd4X2Nsa3JlZ3MpKTsKIAogCQlpZiAoKHJldCA9IHB4YV9pbml0X2RtYShJUlFfRE1BLCAzMikpKQogCQkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKaW5kZXggZjRhZjZlMmIuLjQwYmIxNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMwMC5jCkBAIC0xMDIsMTIgKzEwMiwxMiBAQAogCWlmIChjcHVfaXNfcHhhMzAwKCkgfHwgY3B1X2lzX3B4YTMxMCgpKSB7CiAJCW1mcF9pbml0X2Jhc2UoaW9fcDJ2KE1GUFJfQkFTRSkpOwogCQltZnBfaW5pdF9hZGRyKHB4YTMwMF9tZnBfYWRkcl9tYXApOwotCQljbGtzX3JlZ2lzdGVyKEFSUkFZX0FORF9TSVpFKGNvbW1vbl9jbGtyZWdzKSk7CisJCWNsa2Rldl9hZGRfdGFibGUoQVJSQVlfQU5EX1NJWkUoY29tbW9uX2Nsa3JlZ3MpKTsKIAl9CiAKIAlpZiAoY3B1X2lzX3B4YTMxMCgpKSB7CiAJCW1mcF9pbml0X2FkZHIocHhhMzEwX21mcF9hZGRyX21hcCk7Ci0JCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUocHhhMzEwX2Nsa3JlZ3MpKTsKKwkJY2xrZGV2X2FkZF90YWJsZShBUlJBWV9BTkRfU0laRShweGEzMTBfY2xrcmVncykpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzMjAuYwppbmRleCBjNzM3M2U3Li44ZDYxNGVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzMjAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzMjAuYwpAQCAtOTAsNyArOTAsNyBAQAogCWlmIChjcHVfaXNfcHhhMzIwKCkpIHsKIAkJbWZwX2luaXRfYmFzZShpb19wMnYoTUZQUl9CQVNFKSk7CiAJCW1mcF9pbml0X2FkZHIocHhhMzIwX21mcF9hZGRyX21hcCk7Ci0JCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUocHhhMzIwX2Nsa3JlZ3MpKTsKKwkJY2xrZGV2X2FkZF90YWJsZShBUlJBWV9BTkRfU0laRShweGEzMjBfY2xrcmVncykpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYwppbmRleCBmY2IwNzIxLi40ZDdjMDNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYwpAQCAtNjM0LDcgKzYzNCw3IEBACiAJCSAqLwogCQlBU0NSICY9IH4oQVNDUl9SREggfCBBU0NSX0QxUyB8IEFTQ1JfRDJTIHwgQVNDUl9EM1MpOwogCi0JCWNsa3NfcmVnaXN0ZXIocHhhM3h4X2Nsa3JlZ3MsIEFSUkFZX1NJWkUocHhhM3h4X2Nsa3JlZ3MpKTsKKwkJY2xrZGV2X2FkZF90YWJsZShweGEzeHhfY2xrcmVncywgQVJSQVlfU0laRShweGEzeHhfY2xrcmVncykpOwogCiAJCWlmICgocmV0ID0gcHhhX2luaXRfZG1hKElSUV9ETUEsIDMyKSkpCiAJCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwppbmRleCA5ZjI5MzQzLi45MGJkNGVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwpAQCAtMzQ2LDEwICszNDYsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBjbGtfaW5pdCh2b2lkKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKLQkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CisJY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKIAlyZXR1cm4gMDsKIH0KIGFyY2hfaW5pdGNhbGwoY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggOTMyZDhhZi4uODY2MjIyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0zMyw3ICszMyw3IEBACiAjZXJyb3IgIlVua25vd24gUmVhbFZpZXcgcGxhdGZvcm0iCiAjZW5kaWYKIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAgICAgICMweDEwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggZmUwZGUxYi4uYTJhNGM2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMTgsNCArMTgsNCBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwotI2RlZmluZSBWTUFMTE9DX0VORAkJMHhmODAwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORAkJMHhmODAwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYwppbmRleCBhMjFhNGIzLi5kOTQ4NTdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMKQEAgLTMzNCw4ICszMzQsOCBAQAogCSAqIGluIHRoZSBzeXN0ZW0gRlBHQQogCSAqLwogCV9fcmF3X3dyaXRlbChSRUFMVklFV19TWVNfTE9DS19WQUwsIGxvY2tfY3RybCk7Ci0JX19yYXdfd3JpdGVsKDB4MDAwMCwgcmVzZXRfY3RybCk7Ci0JX19yYXdfd3JpdGVsKDB4MDAwNCwgcmVzZXRfY3RybCk7CisJX19yYXdfd3JpdGVsKDB4MDBGMCwgcmVzZXRfY3RybCk7CisJX19yYXdfd3JpdGVsKDB4MDBGNCwgcmVzZXRfY3RybCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCByZWFsdmlld19wYnhfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXJwYy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBiMmE5MzlmZi4uNmZjOGQ2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqCiAqLwogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICMweDAzMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggNGMyOWE4OS4uMGVlZjc4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTksNyArMTksNyBAQAogI2RlZmluZSBTM0MyNDEwX1VBUlQxX09GRiAoMHg0MDAwKQogI2RlZmluZSBTSElGVF8yNDQwVFhGICgxNC05KQogCi0JLm1hY3JvIGFkZHJ1YXJ0LCByeAorCS5tYWNybyBhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQogCQlsZHJlcQlccngsID0gUzNDMjRYWF9QQV9VQVJUCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggZjBlZjBhYi4uMjM5NDc2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogCi0JLm1hY3JvIGFkZHJ1YXJ0LCByeAorCS5tYWNybyBhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQogCQlsZHJlcQlccngsID0gUzNDMjRYWF9QQV9VQVJUCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IDRkNGZlNDguLjkxNDY1NjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0xMiw2ICsxMiw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfVk1BTExPQ19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfVk1BTExPQ19ICiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhFMDAwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhlMDAwMDAwMFVMKQogCiAjZW5kaWYgLyogX19BU01fQVJDSF9WTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBiMThhYzUyLi41Yzg4ODc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0yMSw3ICsyMSw3IEBACiAJICogYWxpZ25lZCBhbmQgYWRkIGluIHRoZSBvZmZzZXQgd2hlbiB3ZSBsb2FkIHRoZSB2YWx1ZSBoZXJlLgogCSAqLwogCi0JLm1hY3JvIGFkZHJ1YXJ0LCByeAorCS5tYWNybyBhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQogCQlsZHJlcQlccngsID0gUzNDX1BBX1VBUlQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA5ZDE0MmNjLi5lMTgxZjU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0yMiw3ICsyMiw3IEBACiAJICogYWxpZ25lZCBhbmQgYWRkIGluIHRoZSBvZmZzZXQgd2hlbiB3ZSBsb2FkIHRoZSB2YWx1ZSBoZXJlLgogCSAqLwogCi0JLm1hY3JvIGFkZHJ1YXJ0LCByeAorCS5tYWNybyBhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQogCQlsZHJlcQlccngsID0gUzNDX1BBX1VBUlQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggMWYwNjM0ZC4uMzM2YWRjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTEyLDcgKzEyLDcgQEAKICovCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICMweDgwMDAwMDAwCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCBlYzhmZGM1Li5iM2QwMDIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTEsNCArMSw0IEBACiAvKgogICogYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAogICovCi0jZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgICgweGU4MDAwMDAwKQorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhlODAwMDAwMFVMKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggZjk3YTc2Mi4uNTBmMDcxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogKi8KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1vdglccngsICMweGUwMDAwMDAwCiAJCW9ycglccngsIFxyeCwgIzB4MDAwMDAzZjgKIAkJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2Nsb2NrLmMKaW5kZXggMTExZjdlYS4uNWFmNzFkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2Nsb2NrLmMKQEAgLTYxMCwzNCArNjEwLDM0IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19yb3VuZF9yYXRlX21jbGsoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JaWYgKHJhdGUgPj0gMTg5MDAwMDApCisJaWYgKHJhdGUgPD0gMTg5MDAwMDApCiAJCXJldHVybiAxODkwMDAwMDsKLQlpZiAocmF0ZSA+PSAyMDgwMDAwMCkKKwlpZiAocmF0ZSA8PSAyMDgwMDAwMCkKIAkJcmV0dXJuIDIwODAwMDAwOwotCWlmIChyYXRlID49IDIzMTAwMDAwKQorCWlmIChyYXRlIDw9IDIzMTAwMDAwKQogCQlyZXR1cm4gMjMxMDAwMDA7Ci0JaWYgKHJhdGUgPj0gMjYwMDAwMDApCisJaWYgKHJhdGUgPD0gMjYwMDAwMDApCiAJCXJldHVybiAyNjAwMDAwMDsKLQlpZiAocmF0ZSA+PSAyOTcwMDAwMCkKKwlpZiAocmF0ZSA8PSAyOTcwMDAwMCkKIAkJcmV0dXJuIDI5NzAwMDAwOwotCWlmIChyYXRlID49IDM0NzAwMDAwKQorCWlmIChyYXRlIDw9IDM0NzAwMDAwKQogCQlyZXR1cm4gMzQ3MDAwMDA7Ci0JaWYgKHJhdGUgPj0gNDE2MDAwMDApCisJaWYgKHJhdGUgPD0gNDE2MDAwMDApCiAJCXJldHVybiA0MTYwMDAwMDsKLQlpZiAocmF0ZSA+PSA1MjAwMDAwMCkKKwlpZiAocmF0ZSA8PSA1MjAwMDAwMCkKIAkJcmV0dXJuIDUyMDAwMDAwOwogCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfcm91bmRfcmF0ZV9jcHVjbGsoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JaWYgKHJhdGUgPj0gMTMwMDAwMDApCisJaWYgKHJhdGUgPD0gMTMwMDAwMDApCiAJCXJldHVybiAxMzAwMDAwMDsKLQlpZiAocmF0ZSA+PSA1MjAwMDAwMCkKKwlpZiAocmF0ZSA8PSA1MjAwMDAwMCkKIAkJcmV0dXJuIDUyMDAwMDAwOwotCWlmIChyYXRlID49IDEwNDAwMDAwMCkKKwlpZiAocmF0ZSA8PSAxMDQwMDAwMDApCiAJCXJldHVybiAxMDQwMDAwMDA7Ci0JaWYgKHJhdGUgPj0gMjA4MDAwMDAwKQorCWlmIChyYXRlIDw9IDIwODAwMDAwMCkKIAkJcmV0dXJuIDIwODAwMDAwMDsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTEyNzYsMTEgKzEyNzYsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgY2xrX3JlZ2lzdGVyKHZvaWQpCiB7Ci0JaW50IGk7Ci0KIAkvKiBSZWdpc3RlciB0aGUgbG9va3VwcyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYwppbmRleCA2NTNlMjViLi4wMWI1MDMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMKQEAgLTMsNyArMyw3IEBACiAgKiBhcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jCiAgKgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFNULUVyaWNzc29uIEFCCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBTVC1Fcmljc3NvbiBBQgogICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCiAgKiBDb3JlIHBsYXRmb3JtIHN1cHBvcnQsIElSUSBoYW5kbGluZyBhbmQgZGV2aWNlIGRlZmluaXRpb25zLgogICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvY29oOTAxMzE4Lmg+CiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTI5LDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3N5c2Nvbi5oPgorI2luY2x1ZGUgPG1hY2gvZG1hX2NoYW5uZWxzLmg+CiAKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgIm1tYy5oIgpAQCAtMzcyLDggKzM3NCwxMDE5IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG1hX3Jlc291cmNlW10gPSB7CisJeworCQkuc3RhcnQgPSBVMzAwX0RNQUNfQkFTRSwKKwkJLmVuZCA9IFUzMDBfRE1BQ19CQVNFICsgUEFHRV9TSVpFIC0gMSwKKwkJLmZsYWdzID0gIElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBJUlFfVTMwMF9ETUEsCisJCS5lbmQgPSBJUlFfVTMwMF9ETUEsCisJCS5mbGFncyA9ICBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCisjaWZkZWYgQ09ORklHX01BQ0hfVTMwMF9CUzMzNQorLyogcG9pbnRzIG91dCBhbGwgZG1hIHNsYXZlIGNoYW5uZWxzLgorICogU3ludGF4IGlzIFtBMSwgQjEsIEEyLCBCMiwgLi4uLiAsLTEsLTFdCisgKiBTZWxlY3QgYWxsIGNoYW5uZWxzIGZyb20gQSB0byBCLCBlbmQgb2YgbGlzdCBpcyBtYXJrZWQgd2l0aCAtMSwtMQorICovCitzdGF0aWMgaW50IGRtYV9zbGF2ZV9jaGFubmVsc1tdID0geworCVUzMDBfRE1BX01TTF9UWF8wLCBVMzAwX0RNQV9TUElfUlgsCisJVTMwMF9ETUFfVUFSVDFfVFgsIFUzMDBfRE1BX1VBUlQxX1JYLCAtMSwgLTF9OworCisvKiBwb2ludHMgb3V0IGFsbCBkbWEgbWVtY3B5IGNoYW5uZWxzLiAqLworc3RhdGljIGludCBkbWFfbWVtY3B5X2NoYW5uZWxzW10gPSB7CisJVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzAsIFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV84LCAtMSwgLTF9OworCisjZWxzZSAvKiBDT05GSUdfTUFDSF9VMzAwX0JTMzM1ICovCisKK3N0YXRpYyBpbnQgZG1hX3NsYXZlX2NoYW5uZWxzW10gPSB7VTMwMF9ETUFfTVNMX1RYXzAsIFUzMDBfRE1BX1NQSV9SWCwgLTEsIC0xfTsKK3N0YXRpYyBpbnQgZG1hX21lbWNweV9jaGFubmVsc1tdID0geworCVUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV8wLCBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfMTAsIC0xLCAtMX07CisKKyNlbmRpZgorCisvKiogcmVnaXN0ZXIgZG1hIGZvciBtZW1vcnkgYWNjZXNzCisgKgorICogYWN0aXZlICAxIG1lYW5zIGRtYSBpbnRlbmRzIHRvIGFjY2VzcyBtZW1vcnkKKyAqICAgICAgICAgMCBtZWFucyBkbWEgd29udCBhY2Nlc3MgbWVtb3J5CisgKi8KK3N0YXRpYyB2b2lkIGNvaDkwMTMxOF9hY2Nlc3NfbWVtb3J5X3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBhY3RpdmUpCit7Cit9CisKKyNkZWZpbmUgZmxhZ3NfbWVtY3B5X2NvbmZpZyAoQ09IOTAxMzE4X0NYX0NGR19DSF9ESVNBQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NGR19STV9NRU1PUllfVE9fTUVNT1JZIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DRkdfQkVfSVJRX0VOQUJMRSkKKyNkZWZpbmUgZmxhZ3NfbWVtY3B5X2xsaV9jaGFpbmVkIChDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0RJU0FCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UpCisjZGVmaW5lIGZsYWdzX21lbWNweV9sbGkgKENPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRElTQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSkKKyNkZWZpbmUgZmxhZ3NfbWVtY3B5X2xsaV9sYXN0IChDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRElTQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSkKKworY29uc3Qgc3RydWN0IGNvaF9kbWFfY2hhbm5lbCBjaGFuX2NvbmZpZ1tVMzAwX0RNQV9DSEFOTkVMU10gPSB7CisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNMX1RYXzAsCisJCS5uYW1lID0gIk1TTCBUWCAwIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCQkuZGV2X2FkZHIgPSBVMzAwX01TTF9CQVNFICsgMCAqIDB4NDAgKyAweDIwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNMX1RYXzEsCisJCS5uYW1lID0gIk1TTCBUWCAxIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCQkuZGV2X2FkZHIgPSBVMzAwX01TTF9CQVNFICsgMSAqIDB4NDAgKyAweDIwLAorCQkucGFyYW0uY29uZmlnID0gQ09IOTAxMzE4X0NYX0NGR19DSF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0xDUl9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfQkVfSVJRX0VOQUJMRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJfTTJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJCS5wYXJhbS5jdHJsX2xsaSA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUl9NMlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUl9NMlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU0xfVFhfMiwKKwkJLm5hbWUgPSAiTVNMIFRYIDIiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5kZXZfYWRkciA9IFUzMDBfTVNMX0JBU0UgKyAyICogMHg0MCArIDB4MjAsCisJCS5wYXJhbS5jb25maWcgPSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUl9NMlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwkJLnBhcmFtLmN0cmxfbGxpID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSX00yVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSX00yVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwkJLmRlc2NfbmJyX21heCA9IDEwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNMX1RYXzMsCisJCS5uYW1lID0gIk1TTCBUWCAzIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCQkuZGV2X2FkZHIgPSBVMzAwX01TTF9CQVNFICsgMyAqIDB4NDAgKyAweDIwLAorCQkucGFyYW0uY29uZmlnID0gQ09IOTAxMzE4X0NYX0NGR19DSF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0xDUl9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfQkVfSVJRX0VOQUJMRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJfTTJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJCS5wYXJhbS5jdHJsX2xsaSA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUl9NMlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUl9NMlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU0xfVFhfNCwKKwkJLm5hbWUgPSAiTVNMIFRYIDQiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5kZXZfYWRkciA9IFUzMDBfTVNMX0JBU0UgKyA0ICogMHg0MCArIDB4MjAsCisJCS5wYXJhbS5jb25maWcgPSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUl9NMlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwkJLnBhcmFtLmN0cmxfbGxpID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSX00yVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSX00yVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TTF9UWF81LAorCQkubmFtZSA9ICJNU0wgVFggNSIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLmRldl9hZGRyID0gVTMwMF9NU0xfQkFTRSArIDUgKiAweDQwICsgMHgyMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TTF9UWF82LAorCQkubmFtZSA9ICJNU0wgVFggNiIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLmRldl9hZGRyID0gVTMwMF9NU0xfQkFTRSArIDYgKiAweDQwICsgMHgyMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TTF9SWF8wLAorCQkubmFtZSA9ICJNU0wgUlggMCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLmRldl9hZGRyID0gVTMwMF9NU0xfQkFTRSArIDAgKiAweDQwICsgMHgyMjAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU0xfUlhfMSwKKwkJLm5hbWUgPSAiTVNMIFJYIDEiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5kZXZfYWRkciA9IFUzMDBfTVNMX0JBU0UgKyAxICogMHg0MCArIDB4MjIwLAorCQkucGFyYW0uY29uZmlnID0gQ09IOTAxMzE4X0NYX0NGR19DSF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0xDUl9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfQkVfSVJRX0VOQUJMRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMlJfTTFXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0RFTUFORF9ETUExIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJCS5wYXJhbS5jdHJsX2xsaSA9IDAsCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTJSX00xVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0RFTUFORF9ETUExIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU0xfUlhfMiwKKwkJLm5hbWUgPSAiTVNMIFJYIDIiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5kZXZfYWRkciA9IFUzMDBfTVNMX0JBU0UgKyAyICogMHg0MCArIDB4MjIwLAorCQkucGFyYW0uY29uZmlnID0gQ09IOTAxMzE4X0NYX0NGR19DSF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0xDUl9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfQkVfSVJRX0VOQUJMRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMlJfTTFXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0RFTUFORF9ETUExIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJCS5wYXJhbS5jdHJsX2xsaSA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00yUl9NMVcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9ERU1BTkRfRE1BMSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00yUl9NMVcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9ERU1BTkRfRE1BMSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNMX1JYXzMsCisJCS5uYW1lID0gIk1TTCBSWCAzIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCQkuZGV2X2FkZHIgPSBVMzAwX01TTF9CQVNFICsgMyAqIDB4NDAgKyAweDIyMCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTJSX00xVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9ERU1BTkRfRE1BMSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMlJfTTFXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfREVNQU5EX0RNQTEgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMlJfTTFXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfREVNQU5EX0RNQTEgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TTF9SWF80LAorCQkubmFtZSA9ICJNU0wgUlggNCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLmRldl9hZGRyID0gVTMwMF9NU0xfQkFTRSArIDQgKiAweDQwICsgMHgyMjAsCisJCS5wYXJhbS5jb25maWcgPSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00yUl9NMVcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfREVNQU5EX0RNQTEgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTJSX00xVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0RFTUFORF9ETUExIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTJSX00xVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0RFTUFORF9ETUExIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU0xfUlhfNSwKKwkJLm5hbWUgPSAiTVNMIFJYIDUiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5kZXZfYWRkciA9IFUzMDBfTVNMX0JBU0UgKyA1ICogMHg0MCArIDB4MjIwLAorCQkucGFyYW0uY29uZmlnID0gQ09IOTAxMzE4X0NYX0NGR19DSF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0xDUl9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfQkVfSVJRX0VOQUJMRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMlJfTTFXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0RFTUFORF9ETUExIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJCS5wYXJhbS5jdHJsX2xsaSA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00yUl9NMVcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9ERU1BTkRfRE1BMSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00yUl9NMVcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9ERU1BTkRfRE1BMSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNMX1JYXzYsCisJCS5uYW1lID0gIk1TTCBSWCA2IiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCQkuZGV2X2FkZHIgPSBVMzAwX01TTF9CQVNFICsgNiAqIDB4NDAgKyAweDIyMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01NQ1NEX1JYX1RYLAorCQkubmFtZSA9ICJNTUNTRCBSWCBUWCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLmRldl9hZGRyID0gIFUzMDBfTU1DU0RfQkFTRSArIDB4MDgwLAorCQkucGFyYW0uY29uZmlnID0gQ09IOTAxMzE4X0NYX0NGR19DSF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0xDUl9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfQkVfSVJRX0VOQUJMRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSwKKwkJLnBhcmFtLmN0cmxfbGxpID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1ksCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZLAorCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU1BST19UWCwKKwkJLm5hbWUgPSAiTVNQUk8gVFgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU1BST19SWCwKKwkJLm5hbWUgPSAiTVNQUk8gUlgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9VQVJUMF9UWCwKKwkJLm5hbWUgPSAiVUFSVDAgVFgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9VQVJUMF9SWCwKKwkJLm5hbWUgPSAiVUFSVDAgUlgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9BUEVYX1RYLAorCQkubmFtZSA9ICJBUEVYIFRYIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfQVBFWF9SWCwKKwkJLm5hbWUgPSAiQVBFWCBSWCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX1BDTV9JMlMwX1RYLAorCQkubmFtZSA9ICJQQ00gSTJTMCBUWCIsCisJCS5wcmlvcml0eV9oaWdoID0gMSwKKwkJLmRldl9hZGRyID0gVTMwMF9QQ01fSTJTMF9CQVNFICsgMHgxNCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8xNl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzE2X0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzE2X0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfUENNX0kyUzBfUlgsCisJCS5uYW1lID0gIlBDTSBJMlMwIFJYIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAxLAorCQkuZGV2X2FkZHIgPSBVMzAwX1BDTV9JMlMwX0JBU0UgKyAweDEwLAorCQkucGFyYW0uY29uZmlnID0gQ09IOTAxMzE4X0NYX0NGR19DSF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0xDUl9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfQkVfSVJRX0VOQUJMRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzE2X0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzE2X0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8xNl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9QQ01fSTJTMV9UWCwKKwkJLm5hbWUgPSAiUENNIEkyUzEgVFgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDEsCisJCS5kZXZfYWRkciA9ICBVMzAwX1BDTV9JMlMxX0JBU0UgKyAweDE0LAorCQkucGFyYW0uY29uZmlnID0gQ09IOTAxMzE4X0NYX0NGR19DSF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0xDUl9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfQkVfSVJRX0VOQUJMRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzE2X0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJCS5wYXJhbS5jdHJsX2xsaSA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMTZfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMTZfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9QQ01fSTJTMV9SWCwKKwkJLm5hbWUgPSAiUENNIEkyUzEgUlgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDEsCisJCS5kZXZfYWRkciA9IFUzMDBfUENNX0kyUzFfQkFTRSArIDB4MTAsCisJCS5wYXJhbS5jb25maWcgPSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMTZfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJCS5wYXJhbS5jdHJsX2xsaSA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMTZfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzE2X0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX1hHQU1fQ0RJLAorCQkubmFtZSA9ICJYR0FNIENESSIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX1hHQU1fUERJLAorCQkubmFtZSA9ICJYR0FNIFBESSIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX1NQSV9UWCwKKwkJLm5hbWUgPSAiU1BJIFRYIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfU1BJX1JYLAorCQkubmFtZSA9ICJTUEkgUlgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfMCwKKwkJLm5hbWUgPSAiR0VORVJBTCAwMCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKworCQkucGFyYW0uY29uZmlnID0gZmxhZ3NfbWVtY3B5X2NvbmZpZywKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSBmbGFnc19tZW1jcHlfbGxpX2NoYWluZWQsCisJCS5wYXJhbS5jdHJsX2xsaSA9IGZsYWdzX21lbWNweV9sbGksCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gZmxhZ3NfbWVtY3B5X2xsaV9sYXN0LAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzEsCisJCS5uYW1lID0gIkdFTkVSQUwgMDEiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisKKwkJLnBhcmFtLmNvbmZpZyA9IGZsYWdzX21lbWNweV9jb25maWcsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gZmxhZ3NfbWVtY3B5X2xsaV9jaGFpbmVkLAorCQkucGFyYW0uY3RybF9sbGkgPSBmbGFnc19tZW1jcHlfbGxpLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IGZsYWdzX21lbWNweV9sbGlfbGFzdCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV8yLAorCQkubmFtZSA9ICJHRU5FUkFMIDAyIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCisJCS5wYXJhbS5jb25maWcgPSBmbGFnc19tZW1jcHlfY29uZmlnLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IGZsYWdzX21lbWNweV9sbGlfY2hhaW5lZCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gZmxhZ3NfbWVtY3B5X2xsaSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSBmbGFnc19tZW1jcHlfbGxpX2xhc3QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfMywKKwkJLm5hbWUgPSAiR0VORVJBTCAwMyIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKworCQkucGFyYW0uY29uZmlnID0gZmxhZ3NfbWVtY3B5X2NvbmZpZywKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSBmbGFnc19tZW1jcHlfbGxpX2NoYWluZWQsCisJCS5wYXJhbS5jdHJsX2xsaSA9IGZsYWdzX21lbWNweV9sbGksCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gZmxhZ3NfbWVtY3B5X2xsaV9sYXN0LAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzQsCisJCS5uYW1lID0gIkdFTkVSQUwgMDQiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisKKwkJLnBhcmFtLmNvbmZpZyA9IGZsYWdzX21lbWNweV9jb25maWcsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gZmxhZ3NfbWVtY3B5X2xsaV9jaGFpbmVkLAorCQkucGFyYW0uY3RybF9sbGkgPSBmbGFnc19tZW1jcHlfbGxpLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IGZsYWdzX21lbWNweV9sbGlfbGFzdCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV81LAorCQkubmFtZSA9ICJHRU5FUkFMIDA1IiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCisJCS5wYXJhbS5jb25maWcgPSBmbGFnc19tZW1jcHlfY29uZmlnLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IGZsYWdzX21lbWNweV9sbGlfY2hhaW5lZCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gZmxhZ3NfbWVtY3B5X2xsaSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSBmbGFnc19tZW1jcHlfbGxpX2xhc3QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfNiwKKwkJLm5hbWUgPSAiR0VORVJBTCAwNiIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKworCQkucGFyYW0uY29uZmlnID0gZmxhZ3NfbWVtY3B5X2NvbmZpZywKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSBmbGFnc19tZW1jcHlfbGxpX2NoYWluZWQsCisJCS5wYXJhbS5jdHJsX2xsaSA9IGZsYWdzX21lbWNweV9sbGksCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gZmxhZ3NfbWVtY3B5X2xsaV9sYXN0LAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzcsCisJCS5uYW1lID0gIkdFTkVSQUwgMDciLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisKKwkJLnBhcmFtLmNvbmZpZyA9IGZsYWdzX21lbWNweV9jb25maWcsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gZmxhZ3NfbWVtY3B5X2xsaV9jaGFpbmVkLAorCQkucGFyYW0uY3RybF9sbGkgPSBmbGFnc19tZW1jcHlfbGxpLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IGZsYWdzX21lbWNweV9sbGlfbGFzdCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV84LAorCQkubmFtZSA9ICJHRU5FUkFMIDA4IiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCisJCS5wYXJhbS5jb25maWcgPSBmbGFnc19tZW1jcHlfY29uZmlnLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IGZsYWdzX21lbWNweV9sbGlfY2hhaW5lZCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gZmxhZ3NfbWVtY3B5X2xsaSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSBmbGFnc19tZW1jcHlfbGxpX2xhc3QsCisJfSwKKyNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX0JTMzM1CisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfVUFSVDFfVFgsCisJCS5uYW1lID0gIlVBUlQxIFRYIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfVUFSVDFfUlgsCisJCS5uYW1lID0gIlVBUlQxIFJYIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCX0KKyNlbHNlCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzksCisJCS5uYW1lID0gIkdFTkVSQUwgMDkiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisKKwkJLnBhcmFtLmNvbmZpZyA9IGZsYWdzX21lbWNweV9jb25maWcsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gZmxhZ3NfbWVtY3B5X2xsaV9jaGFpbmVkLAorCQkucGFyYW0uY3RybF9sbGkgPSBmbGFnc19tZW1jcHlfbGxpLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IGZsYWdzX21lbWNweV9sbGlfbGFzdCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV8xMCwKKwkJLm5hbWUgPSAiR0VORVJBTCAxMCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKworCQkucGFyYW0uY29uZmlnID0gZmxhZ3NfbWVtY3B5X2NvbmZpZywKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSBmbGFnc19tZW1jcHlfbGxpX2NoYWluZWQsCisJCS5wYXJhbS5jdHJsX2xsaSA9IGZsYWdzX21lbWNweV9sbGksCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gZmxhZ3NfbWVtY3B5X2xsaV9sYXN0LAorCX0KKyNlbmRpZgorfTsKKworCitzdGF0aWMgc3RydWN0IGNvaDkwMTMxOF9wbGF0Zm9ybSBjb2g5MDEzMThfcGxhdGZvcm0gPSB7CisJLmNoYW5zX3NsYXZlID0gZG1hX3NsYXZlX2NoYW5uZWxzLAorCS5jaGFuc19tZW1jcHkgPSBkbWFfbWVtY3B5X2NoYW5uZWxzLAorCS5hY2Nlc3NfbWVtb3J5X3N0YXRlID0gY29oOTAxMzE4X2FjY2Vzc19tZW1vcnlfc3RhdGUsCisJLmNoYW5fY29uZiA9IGNoYW5fY29uZmlnLAorCS5tYXhfY2hhbm5lbHMgPSBVMzAwX0RNQV9DSEFOTkVMUywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHdkb2dfZGV2aWNlID0gewotCS5uYW1lID0gIndkb2ciLAorCS5uYW1lID0gImNvaDkwMTMyN193ZG9nIiwKIAkuaWQgPSAtMSwKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUod2RvZ19yZXNvdXJjZXMpLAogCS5yZXNvdXJjZSA9IHdkb2dfcmVzb3VyY2VzLApAQCAtNDI4LDExICsxNDQxLDIzIEBACiAJLnJlc291cmNlID0gYXZlX3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtYV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImNvaDkwMTMxOCIsCisJLmlkCQk9IC0xLAorCS5yZXNvdXJjZQk9IGRtYV9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGRtYV9yZXNvdXJjZSksCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmY29oOTAxMzE4X3BsYXRmb3JtLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSB+MCwKKwl9LAorfTsKKwogLyoKICAqIE5vdGljZSB0aGF0IEFNQkEgZGV2aWNlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHBsYXRmb3JtIGRldmljZXMuCiAgKgogICovCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJJmRtYV9kZXZpY2UsCiAJJmkyYzBfZGV2aWNlLAogCSZpMmMxX2RldmljZSwKIAkma2V5cGFkX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvZ3Bpby5jCmluZGV4IDBiMzU4MjYuLjVmNjFmZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2dwaW8uYwpAQCAtNTQ2LDcgKzU0Niw3IEBACiAJZm9yIChpID0gMDsgaSA8IFUzMDBfR1BJT19NQVg7IGkrKykgewogCQl2YWwgPSAwOwogCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKQotCQkJdmFsIHw9ICh1MzIpKCh1MzAwX2dwaW9fY29uZmlnW2ldW2pdLnB1bGxfdXAgPT0gRElTQUJMRV9QVUxMX1VQKSkgPDwgajsKKwkJCXZhbCB8PSAodTMyKSgodTMwMF9ncGlvX2NvbmZpZ1tpXVtqXS5wdWxsX3VwID09IERJU0FCTEVfUFVMTF9VUCkgPDwgaik7CiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJd3JpdGVsKHZhbCwgdmlydGJhc2UgKyBVMzAwX0dQSU9fUFhQRVIgKyBpICogVTMwMF9HUElPX1BPUlRYX1NQQUNJTkcpOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggZjNhMWNiYi4uY2E0YTAyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTAsNyArMTAsNyBAQAogICovCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0JLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJLyogSWYgd2UgbW92ZSB0aGUgYWRyZXNzIHVzaW5nIE1NVSwgdXNlIHRoaXMuICovCiAJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2RtYV9jaGFubmVscy5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9kbWFfY2hhbm5lbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjM5MTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9kbWFfY2hhbm5lbHMuaApAQCAtMCwwICsxLDY5IEBACisvKgorICoKKyAqIGFyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvZG1hX2NoYW5uZWxzLmgKKyAqCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgU1QtRXJpY3Nzb24KKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgorICogTWFwIGZpbGUgZm9yIHRoZSBVMzAwIGRtYSBkcml2ZXIuCisgKiBBdXRob3I6IFBlciBGcmlkZW4gPHBlci5mcmlkZW5Ac3Rlcmljc3Nvbi5jb20+CisgKi8KKworI2lmbmRlZiBETUFfQ0hBTk5FTFNfSAorI2RlZmluZSBETUFfQ0hBTk5FTFNfSAorCisjZGVmaW5lIFUzMDBfRE1BX01TTF9UWF8wICAgICAgICAgICAgIDAKKyNkZWZpbmUgVTMwMF9ETUFfTVNMX1RYXzEgICAgICAgICAgICAgMQorI2RlZmluZSBVMzAwX0RNQV9NU0xfVFhfMiAgICAgICAgICAgICAyCisjZGVmaW5lIFUzMDBfRE1BX01TTF9UWF8zICAgICAgICAgICAgIDMKKyNkZWZpbmUgVTMwMF9ETUFfTVNMX1RYXzQgICAgICAgICAgICAgNAorI2RlZmluZSBVMzAwX0RNQV9NU0xfVFhfNSAgICAgICAgICAgICA1CisjZGVmaW5lIFUzMDBfRE1BX01TTF9UWF82ICAgICAgICAgICAgIDYKKyNkZWZpbmUgVTMwMF9ETUFfTVNMX1JYXzAgICAgICAgICAgICAgNworI2RlZmluZSBVMzAwX0RNQV9NU0xfUlhfMSAgICAgICAgICAgICA4CisjZGVmaW5lIFUzMDBfRE1BX01TTF9SWF8yICAgICAgICAgICAgIDkKKyNkZWZpbmUgVTMwMF9ETUFfTVNMX1JYXzMgICAgICAgICAgICAgMTAKKyNkZWZpbmUgVTMwMF9ETUFfTVNMX1JYXzQgICAgICAgICAgICAgMTEKKyNkZWZpbmUgVTMwMF9ETUFfTVNMX1JYXzUgICAgICAgICAgICAgMTIKKyNkZWZpbmUgVTMwMF9ETUFfTVNMX1JYXzYgICAgICAgICAgICAgMTMKKyNkZWZpbmUgVTMwMF9ETUFfTU1DU0RfUlhfVFggICAgICAgICAgMTQKKyNkZWZpbmUgVTMwMF9ETUFfTVNQUk9fVFggICAgICAgICAgICAgMTUKKyNkZWZpbmUgVTMwMF9ETUFfTVNQUk9fUlggICAgICAgICAgICAgMTYKKyNkZWZpbmUgVTMwMF9ETUFfVUFSVDBfVFggICAgICAgICAgICAgMTcKKyNkZWZpbmUgVTMwMF9ETUFfVUFSVDBfUlggICAgICAgICAgICAgMTgKKyNkZWZpbmUgVTMwMF9ETUFfQVBFWF9UWCAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgVTMwMF9ETUFfQVBFWF9SWCAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgVTMwMF9ETUFfUENNX0kyUzBfVFggICAgICAgICAgMjEKKyNkZWZpbmUgVTMwMF9ETUFfUENNX0kyUzBfUlggICAgICAgICAgMjIKKyNkZWZpbmUgVTMwMF9ETUFfUENNX0kyUzFfVFggICAgICAgICAgMjMKKyNkZWZpbmUgVTMwMF9ETUFfUENNX0kyUzFfUlggICAgICAgICAgMjQKKyNkZWZpbmUgVTMwMF9ETUFfWEdBTV9DREkgICAgICAgICAgICAgMjUKKyNkZWZpbmUgVTMwMF9ETUFfWEdBTV9QREkgICAgICAgICAgICAgMjYKKyNkZWZpbmUgVTMwMF9ETUFfU1BJX1RYICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgVTMwMF9ETUFfU1BJX1JYICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzAgICAgMjkKKyNkZWZpbmUgVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzEgICAgMzAKKyNkZWZpbmUgVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzIgICAgMzEKKyNkZWZpbmUgVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzMgICAgMzIKKyNkZWZpbmUgVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzQgICAgMzMKKyNkZWZpbmUgVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzUgICAgMzQKKyNkZWZpbmUgVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzYgICAgMzUKKyNkZWZpbmUgVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzcgICAgMzYKKyNkZWZpbmUgVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzggICAgMzcKKyNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX0JTMzM1CisjZGVmaW5lIFUzMDBfRE1BX1VBUlQxX1RYICAgICAgICAgICAgIDM4CisjZGVmaW5lIFUzMDBfRE1BX1VBUlQxX1JYICAgICAgICAgICAgIDM5CisjZWxzZQorI2RlZmluZSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfOSAgICAzOAorI2RlZmluZSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfMTAgICAzOQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX0JTMzM1CisjZGVmaW5lIFUzMDBfRE1BX0RFVklDRV9DSEFOTkVMUyAgICAgIDMyCisjZWxzZQorI2RlZmluZSBVMzAwX0RNQV9ERVZJQ0VfQ0hBTk5FTFMgICAgICAzMAorI2VuZGlmCisjZGVmaW5lIFUzMDBfRE1BX0NIQU5ORUxTICAgICAgICAgICAgIDQwCisKKworI2VuZGlmIC8qIERNQV9DSEFOTkVMU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IGIwMGM1MWEuLmVjNDIzYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC05LDQgKzksNCBAQAogICogRW5kIG11c3QgYmUgYWJvdmUgdGhlIEkvTyByZWdpc3RlcnMgYW5kIG9uIGFuIGV2ZW4gMk1pQiBib3VuZGFyeS4KICAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KICAqLwotI2RlZmluZSBWTUFMTE9DX0VORAkweGZlODAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmU4MDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmMKaW5kZXggYWE1YWZiYy4uODAzYWVjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCiAjaW5jbHVkZSA8cGxhdC9tdHUuaD4KKyNpbmNsdWRlIDxwbGF0L2kyYy5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvc2V0dXAuaD4KQEAgLTEwOCwxMSArMTA5LDk2IEBACiAJLnBlcmlwaGlkID0gU1NQX1BFUl9JRCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgcGwwMzFfZGV2aWNlID0geworCS5kZXYgPSB7CisJCS5pbml0X25hbWUgPSAicGwwMzEiLAorCX0sCisJLnJlcyA9IHsKKwkJLnN0YXJ0ID0gVTg1MDBfUlRDX0JBU0UsCisJCS5lbmQgPSBVODUwMF9SVENfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkuaXJxID0ge0lSUV9SVENfUlRULCBOT19JUlF9LAorfTsKKworI2RlZmluZSBVODUwMF9JMkNfUkVTT1VSQ0VTKGlkLCBzaXplKQkJXAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1ODUwMF9pMmNfcmVzb3VyY2VzXyMjaWRbXSA9IHsJXAorCVswXSA9IHsJCQkJCVwKKwkJLnN0YXJ0CT0gVTg1MDBfSTJDIyNpZCMjX0JBU0UsCVwKKwkJLmVuZAk9IFU4NTAwX0kyQyMjaWQjI19CQVNFICsgc2l6ZSAtIDEsIFwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCVwKKwl9LAkJCQkJXAorCVsxXSA9IHsJCQkJCVwKKwkJLnN0YXJ0CT0gSVJRX0kyQyMjaWQsCQlcCisJCS5lbmQJPSBJUlFfSTJDIyNpZCwJCVwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEJXAorCX0JCQkJCVwKK30KKworVTg1MDBfSTJDX1JFU09VUkNFUygwLCBTWl80Syk7CitVODUwMF9JMkNfUkVTT1VSQ0VTKDEsIFNaXzRLKTsKK1U4NTAwX0kyQ19SRVNPVVJDRVMoMiwgU1pfNEspOworVTg1MDBfSTJDX1JFU09VUkNFUygzLCBTWl80Syk7CisKKyNkZWZpbmUgVTg1MDBfSTJDX0NPTlRST0xMRVIoaWQsIF9zbHN1LCBfdGZ0LCBfcmZ0LCBjbGssIF9zbSkgXAorc3RhdGljIHN0cnVjdCBubWtfaTJjX2NvbnRyb2xsZXIgdTg1MDBfaTJjXyMjaWQgPSB7IFwKKwkvKgkJCQlcCisJICogc2xhdmUgZGF0YSBzZXR1cCB0aW1lLCB3aGljaCBpcwlcCisJICogMjUwIG5zLDEwMG5zLDEwbnMgd2hpY2ggaXMgMTQsNiwyCVwKKwkgKiByZXNwZWN0aXZlbHkgZm9yIGEgNDggTWh6CVwKKwkgKiBpMmMgY2xvY2sJCQlcCisJICovCQkJCVwKKwkuc2xzdQkJPSBfc2xzdSwJXAorCS8qIFR4IEZJRk8gdGhyZXNob2xkICovCQlcCisJLnRmdAkJPSBfdGZ0LAkJXAorCS8qIFJ4IEZJRk8gdGhyZXNob2xkICovCQlcCisJLnJmdAkJPSBfcmZ0LAkJXAorCS8qIHN0ZC4gbW9kZSBvcGVyYXRpb24gKi8JXAorCS5jbGtfZnJlcQk9IGNsaywJCVwKKwkuc20JCT0gX3NtLAkJXAorfQorCisvKgorICogVGhlIGJvYXJkIHVzZXMgNCBpMmMgY29udHJvbGxlcnMsIGluaXRpYWxpemUgYWxsIG9mCisgKiB0aGVtIHdpdGggc2xhdmUgZGF0YSBzZXR1cCB0aW1lIG9mIDI1MCBucywKKyAqIFR4ICYgUnggRklGTyB0aHJlc2hvbGQgdmFsdWVzIGFzIDEgYW5kIHN0YW5kYXJkCisgKiBtb2RlIG9mIG9wZXJhdGlvbgorICovCitVODUwMF9JMkNfQ09OVFJPTExFUigwLCAweGUsIDEsIDEsIDEwMDAwMCwgSTJDX0ZSRVFfTU9ERV9TVEFOREFSRCk7CitVODUwMF9JMkNfQ09OVFJPTExFUigxLCAweGUsIDEsIDEsIDEwMDAwMCwgSTJDX0ZSRVFfTU9ERV9TVEFOREFSRCk7CitVODUwMF9JMkNfQ09OVFJPTExFUigyLAkweGUsIDEsIDEsIDEwMDAwMCwgSTJDX0ZSRVFfTU9ERV9TVEFOREFSRCk7CitVODUwMF9JMkNfQ09OVFJPTExFUigzLAkweGUsIDEsIDEsIDEwMDAwMCwgSTJDX0ZSRVFfTU9ERV9TVEFOREFSRCk7CisKKyNkZWZpbmUgVTg1MDBfSTJDX1BERVZJQ0UoY2lkKQkJXAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaTJjX2NvbnRyb2xsZXIjI2NpZCA9IHsgXAorCS5uYW1lID0gIm5tay1pMmMiLAkJXAorCS5pZAkgPSBjaWQsCQkJXAorCS5udW1fcmVzb3VyY2VzID0gMiwJCVwKKwkucmVzb3VyY2UgPSB1ODUwMF9pMmNfcmVzb3VyY2VzXyMjY2lkLAlcCisJLmRldiA9IHsJCQlcCisJCS5wbGF0Zm9ybV9kYXRhID0gJnU4NTAwX2kyY18jI2NpZCBcCisJfQkJCQlcCit9CisKK1U4NTAwX0kyQ19QREVWSUNFKDApOworVTg1MDBfSTJDX1BERVZJQ0UoMSk7CitVODUwMF9JMkNfUERFVklDRSgyKTsKK1U4NTAwX0kyQ19QREVWSUNFKDMpOworCiBzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewogCSZ1YXJ0MF9kZXZpY2UsCiAJJnVhcnQxX2RldmljZSwKIAkmdWFydDJfZGV2aWNlLAogCSZwbDAyMl9kZXZpY2UsCisJJnBsMDMxX2RldmljZSwKK307CisKKy8qIGFkZCBhbnkgcGxhdGZvcm0gZGV2aWNlcyBoZXJlIC0gVE9ETyAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldnNbXSBfX2luaXRkYXRhID0geworCSZpMmNfY29udHJvbGxlcjAsCisJJmkyY19jb250cm9sbGVyMSwKKwkmaTJjX2NvbnRyb2xsZXIyLAorCSZpMmNfY29udHJvbGxlcjMsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgdTg1MDBfdGltZXJfaW5pdCh2b2lkKQpAQCAtMTM5LDYgKzIyNSw4IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKQogCQlhbWJhX2RldmljZV9yZWdpc3RlcihhbWJhX2RldnNbaV0sICZpb21lbV9yZXNvdXJjZSk7CiAKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldnMpKTsKKwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHU4NTAwX3NwaV9kZXZpY2VzLAogCQkJQVJSQVlfU0laRSh1ODUwMF9zcGlfZGV2aWNlcykpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2Nsb2NrLmMKaW5kZXggMjBiNmViYi4uODM1OWE3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY2xvY2suYwpAQCAtODUsMTEgKzg1LDggQEAKIAogc3RhdGljIGludCBfX2luaXQgY2xrX2luaXQodm9pZCkKIHsKLQlpbnQgaTsKLQogCS8qIHJlZ2lzdGVyIHRoZSBjbG9jayBsb29rdXBzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKLQkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CisJY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKIAlyZXR1cm4gMDsKIH0KIGFyY2hfaW5pdGNhbGwoY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtdTg1MDAuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LXU4NTAwLmMKaW5kZXggNWYwNWU1OC4uMzk3YmMxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtdTg1MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2NwdS11ODUwMC5jCkBAIC0zMyw2ICszMyw3IEBACiAKIC8qIG1pbmltdW0gc3RhdGljIGkvbyBtYXBwaW5nIHJlcXVpcmVkIHRvIGJvb3QgVTg1MDAgcGxhdGZvcm1zICovCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHU4NTAwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCV9fSU9fREVWX0RFU0MoVTg1MDBfVUFSVDJfQkFTRSwgU1pfNEspLAogCV9fSU9fREVWX0RFU0MoVTg1MDBfR0lDX0NQVV9CQVNFLCBTWl80SyksCiAJX19JT19ERVZfREVTQyhVODUwMF9HSUNfRElTVF9CQVNFLCBTWl80SyksCiAJX19JT19ERVZfREVTQyhVODUwMF9NVFUwX0JBU0UsIFNaXzRLKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDhmMjFiNmEuLjA5Y2JmZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtOCwxMiArOCwxMyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICovCi0JLm1hY3JvCWFkZHJ1YXJ0LHJ4CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKLQl0c3QJXHJ4LCAjMQkJCUBNTVUgZW5hYmxlZD8KLQltb3ZlcQlccngsICMweDgwMDAwMDAwCUBNTVUgb2ZmLCBQaHlzaWNhbCBhZGRyZXNzCi0JbW92bmUJXHJ4LCAjMHhGMDAwMDAwMAlATU1VIG9uLCBWaXJ0dWFsIGFkZHJlc3MKLQlvcnIJXHJ4LCBccngsICMweDcwMDAKKwl0c3QJXHJ4LCAjMQkJCQkJQCBNTVUgZW5hYmxlZD8KKwlsZHJlcQlccngsID1VODUwMF9VQVJUMl9CQVNFCQkJQCBubywgcGh5c2ljYWwgYWRkcmVzcworCWxkcm5lCVxyeCwgPUlPX0FERFJFU1MoVTg1MDBfVUFSVDJfQkFTRSkJQCB5ZXMsIHZpcnR1YWwgYWRkcmVzcwogCS5lbmRtCiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctcGwwMXguUz4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCA4NmNkYmJjLi5hNDk0NWNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0xNSw0ICsxNSw0IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCi0jZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZjAwMDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQJMHhmMDAwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKaW5kZXggZTEzYmU3Yy4uOWRkYjQ5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwpAQCAtODUxLDggKzg1MSw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQotCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKwljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2ZXJzYXRpbGVfZmxhc2hfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZlcnNhdGlsZV9pMmNfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggYjRhYzAwZS4uNmZlYTcxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqCiAqLwogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICAgICAgIzB4MTAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsb2NrLmMKaW5kZXggYjc4NTk5NGIuLjJjMzcxZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5jCkBAIC05MCwxMiArOTAsMyBAQAogCiAJX19yYXdfd3JpdGVsKGNsa2VuLCBXOTBYOTAwX1ZBX0NMS1BXUiArIFNVQkNMSyk7CiB9Ci0KLQotdm9pZCBjbGtzX3JlZ2lzdGVyKHN0cnVjdCBjbGtfbG9va3VwICpjbGtzLCBzaXplX3QgbnVtKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQotCQljbGtkZXZfYWRkKCZjbGtzW2ldKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsb2NrLmgKaW5kZXggZjU4MTZhMC4uYzU2ZGRhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsb2NrLmgKQEAgLTE0LDcgKzE0LDYgQEAKIAogdm9pZCBudWM5MDBfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpOwogdm9pZCBudWM5MDBfc3ViY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpOwotdm9pZCBjbGtzX3JlZ2lzdGVyKHN0cnVjdCBjbGtfbG9va3VwICpjbGtzLCBzaXplX3QgbnVtKTsKIAogc3RydWN0IGNsayB7CiAJdW5zaWduZWQgbG9uZwkJY2tlbjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuYwppbmRleCAyMGRjMGM5Li42NDIyMDdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5jCkBAIC00NSw2ICs0NSw3IEBACiAJSU9ERVNDX0VOVChVQVJUKSwKIAlJT0RFU0NfRU5UKFRJTUVSKSwKIAlJT0RFU0NfRU5UKEVCSSksCisJSU9ERVNDX0VOVChHUElPKSwKIH07CiAKIC8qIEluaXRpYWwgY2xvY2sgZGVjbGFyYXRpb25zLiAqLwpAQCAtNjgsNiArNjksMTEgQEAKIHN0YXRpYyBERUZJTkVfQ0xLKGFkYywgMjgpOwogc3RhdGljIERFRklORV9DTEsodXNpLCAyOSk7CiBzdGF0aWMgREVGSU5FX0NMSyhleHQsIDApOworc3RhdGljIERFRklORV9DTEsodGltZXIwLCAxOSk7CitzdGF0aWMgREVGSU5FX0NMSyh0aW1lcjEsIDIwKTsKK3N0YXRpYyBERUZJTkVfQ0xLKHRpbWVyMiwgMjEpOworc3RhdGljIERFRklORV9DTEsodGltZXIzLCAyMik7CitzdGF0aWMgREVGSU5FX0NMSyh0aW1lcjQsIDIzKTsKIAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIG51YzkwMF9jbGtyZWdzW10gPSB7CiAJREVGX0NMS0xPT0soJmNsa19sY2QsICJudWM5MDAtbGNkIiwgTlVMTCksCkBAIC05MCw2ICs5NiwxMSBAQAogCURFRl9DTEtMT09LKCZjbGtfYWRjLCAibnVjOTAwLWFkYyIsIE5VTEwpLAogCURFRl9DTEtMT09LKCZjbGtfdXNpLCAibnVjOTAwLXNwaSIsIE5VTEwpLAogCURFRl9DTEtMT09LKCZjbGtfZXh0LCBOVUxMLCAiZXh0IiksCisJREVGX0NMS0xPT0soJmNsa190aW1lcjAsIE5VTEwsICJ0aW1lcjAiKSwKKwlERUZfQ0xLTE9PSygmY2xrX3RpbWVyMSwgTlVMTCwgInRpbWVyMSIpLAorCURFRl9DTEtMT09LKCZjbGtfdGltZXIyLCBOVUxMLCAidGltZXIyIiksCisJREVGX0NMS0xPT0soJmNsa190aW1lcjMsIE5VTEwsICJ0aW1lcjMiKSwKKwlERUZfQ0xLTE9PSygmY2xrX3RpbWVyNCwgTlVMTCwgInRpbWVyNCIpLAogfTsKIAogLyogSW5pdGlhbCBzZXJpYWwgcGxhdGZvcm0gZGF0YSAqLwpAQCAtMjA4LDYgKzIxOSw2IEBACiAKIHZvaWQgX19pbml0IG51YzkwMF9pbml0X2Nsb2Nrcyh2b2lkKQogewotCWNsa3NfcmVnaXN0ZXIobnVjOTAwX2Nsa3JlZ3MsIEFSUkFZX1NJWkUobnVjOTAwX2Nsa3JlZ3MpKTsKKwljbGtkZXZfYWRkX3RhYmxlKG51YzkwMF9jbGtyZWdzLCBBUlJBWV9TSVpFKG51YzkwMF9jbGtyZWdzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggMmY5ZGZiOS4uYjA2N2U0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTE4LDYgKzE4LDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9WTUFMTE9DX0gKICNkZWZpbmUgX19BU01fQVJDSF9WTUFMTE9DX0gKIAotI2RlZmluZSBWTUFMTE9DX0VORAkgICgweEUwMDAwMDAwKQorI2RlZmluZSBWTUFMTE9DX0VORAkgICgweGUwMDAwMDAwVUwpCiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX1ZNQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggYmFmNjM4NC4uYzRlZDlmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC0zOTksNyArMzk5LDcgQEAKIGNvbmZpZyBDUFVfMzJ2NksKIAlib29sICJTdXBwb3J0IEFSTSBWNksgcHJvY2Vzc29yIGV4dGVuc2lvbnMiIGlmICFTTVAKIAlkZXBlbmRzIG9uIENQVV9WNgotCWRlZmF1bHQgeSBpZiBTTVAgJiYgIUFSQ0hfTVgzCisJZGVmYXVsdCB5IGlmIFNNUCAmJiAhKEFSQ0hfTVgzIHx8IEFSQ0hfT01BUDIpCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3VyIEFSTXY2IHByb2Nlc3NvciBzdXBwb3J0cyB0aGUgJ0snIGV4dGVuc2lvbi4KIAkgIFRoaXMgZW5hYmxlcyB0aGUga2VybmVsIHRvIHVzZSBzb21lIGluc3RydWN0aW9ucyBub3QgcHJlc2VudApAQCAtNDEwLDcgKzQxMCw3IEBACiAjIEFSTXY3CiBjb25maWcgQ1BVX1Y3CiAJYm9vbCAiU3VwcG9ydCBBUk0gVjcgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBNQUNIX1JFQUxWSUVXX1BCWAotCXNlbGVjdCBDUFVfMzJ2NksKKwlzZWxlY3QgQ1BVXzMydjZLIGlmICFBUkNIX09NQVAyCiAJc2VsZWN0IENQVV8zMnY3CiAJc2VsZWN0IENQVV9BQlJUX0VWNwogCXNlbGVjdCBDUFVfUEFCUlRfVjcKQEAgLTc1NCw3ICs3NTQsNyBAQAogY29uZmlnIENBQ0hFX0wyWDAKIAlib29sICJFbmFibGUgdGhlIEwyeDAgb3V0ZXIgY2FjaGUgY29udHJvbGxlciIKIAlkZXBlbmRzIG9uIFJFQUxWSUVXX0VCX0FSTTExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExNzYgfHwgXAotCQkgICBSRUFMVklFV19FQl9BOU1QIHx8IEFSQ0hfTVgzNSB8fCBBUkNIX01YMzEgfHwgTUFDSF9SRUFMVklFV19QQlggfHwgQVJDSF9OT01BRElLCisJCSAgIFJFQUxWSUVXX0VCX0E5TVAgfHwgQVJDSF9NWDM1IHx8IEFSQ0hfTVgzMSB8fCBNQUNIX1JFQUxWSUVXX1BCWCB8fCBBUkNIX05PTUFESUsgfHwgQVJDSF9PTUFQNAogCWRlZmF1bHQgeQogCXNlbGVjdCBPVVRFUl9DQUNIRQogCWhlbHAKQEAgLTc3OSw1ICs3NzksNSBAQAogCiBjb25maWcgQVJNX0wxX0NBQ0hFX1NISUZUCiAJaW50Ci0JZGVmYXVsdCA2IGlmIEFSQ0hfT01BUDMgfHwgQVJDSF9TNVBDMVhYCisJZGVmYXVsdCA2IGlmIEFSTV9MMV9DQUNIRV9TSElGVF82CiAJZGVmYXVsdCA1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYyBiL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCmluZGV4IGIyNzBkNjIuLmVkZGRkNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCisrKyBiL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTc3LDYgKzc4LDggQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFpX211bHRpOwogc3RhdGljIGludCBhaV91c2VybW9kZTsKIAorY29yZV9wYXJhbShhbGlnbm1lbnQsIGFpX3VzZXJtb2RlLCBpbnQsIDA2MDApOworCiAjZGVmaW5lIFVNX1dBUk4JCSgxIDw8IDApCiAjZGVmaW5lIFVNX0ZJWFVQCSgxIDw8IDEpCiAjZGVmaW5lIFVNX1NJR05BTAkoMSA8PCAyKQpAQCAtODk4LDExICs5MDEsNyBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyZXM7CiAKLQlyZXMgPSBwcm9jX21rZGlyKCJjcHUiLCBOVUxMKTsKLQlpZiAoIXJlcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXMgPSBjcmVhdGVfcHJvY19lbnRyeSgiYWxpZ25tZW50IiwgU19JV1VTUiB8IFNfSVJVR08sIHJlcyk7CisJcmVzID0gY3JlYXRlX3Byb2NfZW50cnkoImNwdS9hbGlnbm1lbnQiLCBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCk7CiAJaWYgKCFyZXMpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS1mYS5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtZmEuUwppbmRleCBhODk0NDRhLi43MTQ4ZTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS1mYS5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLWZhLlMKQEAgLTE1Nyw3ICsxNTcsNyBAQAogICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkoZmFfZG1hX2ludl9yYW5nZSkKK2ZhX2RtYV9pbnZfcmFuZ2U6CiAJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBlbnRyeQpAQCAtMTgwLDcgKzE4MCw3IEBACiAgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcwogICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcwogICovCi1FTlRSWShmYV9kbWFfY2xlYW5fcmFuZ2UpCitmYV9kbWFfY2xlYW5fcmFuZ2U6CiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCkBAIC0yMDUsNiArMjA1LDMwIEBACiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShmYV9kbWFfbWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwljbXAJcjIsICNETUFfVE9fREVWSUNFCisJYmVxCWZhX2RtYV9jbGVhbl9yYW5nZQorCWJjcwlmYV9kbWFfaW52X3JhbmdlCisJYglmYV9kbWFfZmx1c2hfcmFuZ2UKK0VORFBST0MoZmFfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGZhX2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoZmFfZG1hX3VubWFwX2FyZWEpCisKIAlfX0lOSVREQVRBCiAKIAkudHlwZQlmYV9jYWNoZV9mbnMsICNvYmplY3QKQEAgLTIxNSw3ICsyMzksNyBAQAogCS5sb25nCWZhX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlmYV9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJZmFfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWZhX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlmYV9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlmYV9kbWFfbWFwX2FyZWEKKwkubG9uZwlmYV9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWZhX2RtYV9mbHVzaF9yYW5nZQogCS5zaXplCWZhX2NhY2hlX2ZucywgLiAtIGZhX2NhY2hlX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jIGIvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jCmluZGV4IGNiOGZjNjUuLjA3MzM0NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLWwyeDAuYworKysgYi9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMKQEAgLTQyLDYgKzQyLDU3IEBACiAJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DQUNIRV9TWU5DLCAxKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGwyeDBfY2xlYW5fbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gbDJ4MF9iYXNlOworCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfQ0xFQU5fTElORV9QQSwgMSk7CisJd3JpdGVsKGFkZHIsIGJhc2UgKyBMMlgwX0NMRUFOX0xJTkVfUEEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbDJ4MF9pbnZfbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gbDJ4MF9iYXNlOworCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfSU5WX0xJTkVfUEEsIDEpOworCXdyaXRlbChhZGRyLCBiYXNlICsgTDJYMF9JTlZfTElORV9QQSk7Cit9CisKKyNpZmRlZiBDT05GSUdfUEwzMTBfRVJSQVRBXzU4ODM2OQorc3RhdGljIHZvaWQgZGVidWdfd3JpdGVsKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWV4dGVybiB2b2lkIG9tYXBfc21jMSh1MzIgZm4sIHUzMiBhcmcpOworCisJLyoKKwkgKiBUZXhhcyBJbnN0cnVtZW50IHNlY3VyZSBtb25pdG9yIGFwaSB0byBtb2RpZnkgdGhlCisJICogUEwzMTAgRGVidWcgQ29udHJvbCBSZWdpc3Rlci4KKwkgKi8KKwlvbWFwX3NtYzEoMHgxMDAsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMngwX2ZsdXNoX2xpbmUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IGwyeDBfYmFzZTsKKworCS8qIENsZWFuIGJ5IFBBIGZvbGxvd2VkIGJ5IEludmFsaWRhdGUgYnkgUEEgKi8KKwljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NMRUFOX0xJTkVfUEEsIDEpOworCXdyaXRlbChhZGRyLCBiYXNlICsgTDJYMF9DTEVBTl9MSU5FX1BBKTsKKwljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0lOVl9MSU5FX1BBLCAxKTsKKwl3cml0ZWwoYWRkciwgYmFzZSArIEwyWDBfSU5WX0xJTkVfUEEpOworfQorI2Vsc2UKKworLyogT3B0aW1pc2VkIG91dCBmb3Igbm9uLWVycmF0YSBjYXNlICovCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfd3JpdGVsKHVuc2lnbmVkIGxvbmcgdmFsKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbDJ4MF9mbHVzaF9saW5lKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBsMngwX2Jhc2U7CisJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9JTlZfTElORV9QQSwgMSk7CisJd3JpdGVsKGFkZHIsIGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIHZvaWQgbDJ4MF9pbnZfYWxsKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTYyLDIzICsxMTMsMjQgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbDJ4MF9sb2NrLCBmbGFncyk7CiAJaWYgKHN0YXJ0ICYgKENBQ0hFX0xJTkVfU0laRSAtIDEpKSB7CiAJCXN0YXJ0ICY9IH4oQ0FDSEVfTElORV9TSVpFIC0gMSk7Ci0JCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfQ0xFQU5fSU5WX0xJTkVfUEEsIDEpOwotCQl3cml0ZWwoc3RhcnQsIGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBKTsKKwkJZGVidWdfd3JpdGVsKDB4MDMpOworCQlsMngwX2ZsdXNoX2xpbmUoc3RhcnQpOworCQlkZWJ1Z193cml0ZWwoMHgwMCk7CiAJCXN0YXJ0ICs9IENBQ0hFX0xJTkVfU0laRTsKIAl9CiAKIAlpZiAoZW5kICYgKENBQ0hFX0xJTkVfU0laRSAtIDEpKSB7CiAJCWVuZCAmPSB+KENBQ0hFX0xJTkVfU0laRSAtIDEpOwotCQljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBLCAxKTsKLQkJd3JpdGVsKGVuZCwgYmFzZSArIEwyWDBfQ0xFQU5fSU5WX0xJTkVfUEEpOworCQlkZWJ1Z193cml0ZWwoMHgwMyk7CisJCWwyeDBfZmx1c2hfbGluZShlbmQpOworCQlkZWJ1Z193cml0ZWwoMHgwMCk7CiAJfQogCiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CiAJCXVuc2lnbmVkIGxvbmcgYmxrX2VuZCA9IHN0YXJ0ICsgbWluKGVuZCAtIHN0YXJ0LCA0MDk2VUwpOwogCiAJCXdoaWxlIChzdGFydCA8IGJsa19lbmQpIHsKLQkJCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfSU5WX0xJTkVfUEEsIDEpOwotCQkJd3JpdGVsKHN0YXJ0LCBiYXNlICsgTDJYMF9JTlZfTElORV9QQSk7CisJCQlsMngwX2ludl9saW5lKHN0YXJ0KTsKIAkJCXN0YXJ0ICs9IENBQ0hFX0xJTkVfU0laRTsKIAkJfQogCkBAIC0xMDMsOCArMTU1LDcgQEAKIAkJdW5zaWduZWQgbG9uZyBibGtfZW5kID0gc3RhcnQgKyBtaW4oZW5kIC0gc3RhcnQsIDQwOTZVTCk7CiAKIAkJd2hpbGUgKHN0YXJ0IDwgYmxrX2VuZCkgewotCQkJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9MSU5FX1BBLCAxKTsKLQkJCXdyaXRlbChzdGFydCwgYmFzZSArIEwyWDBfQ0xFQU5fTElORV9QQSk7CisJCQlsMngwX2NsZWFuX2xpbmUoc3RhcnQpOwogCQkJc3RhcnQgKz0gQ0FDSEVfTElORV9TSVpFOwogCQl9CiAKQEAgLTEyOCwxMSArMTc5LDEyIEBACiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CiAJCXVuc2lnbmVkIGxvbmcgYmxrX2VuZCA9IHN0YXJ0ICsgbWluKGVuZCAtIHN0YXJ0LCA0MDk2VUwpOwogCisJCWRlYnVnX3dyaXRlbCgweDAzKTsKIAkJd2hpbGUgKHN0YXJ0IDwgYmxrX2VuZCkgewotCQkJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9JTlZfTElORV9QQSwgMSk7Ci0JCQl3cml0ZWwoc3RhcnQsIGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBKTsKKwkJCWwyeDBfZmx1c2hfbGluZShzdGFydCk7CiAJCQlzdGFydCArPSBDQUNIRV9MSU5FX1NJWkU7CiAJCX0KKwkJZGVidWdfd3JpdGVsKDB4MDApOwogCiAJCWlmIChibGtfZW5kIDwgZW5kKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMngwX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXYzLlMgYi9hcmNoL2FybS9tbS9jYWNoZS12My5TCmluZGV4IDJhNDgyNzMuLmMyZmYzYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXYzLlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjMuUwpAQCAtODQsMjAgKzg0LDYgQEAKIAkvKiBGQUxMVEhST1VHSCAqLwogCiAvKgotICoJZG1hX2ludl9yYW5nZShzdGFydCwgZW5kKQotICoKLSAqCUludmFsaWRhdGUgKGRpc2NhcmQpIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgotICoJTWF5IG5vdCB3cml0ZSBiYWNrIGFueSBlbnRyaWVzLiAgSWYgJ3N0YXJ0JyBvciAnZW5kJwotICoJYXJlIG5vdCBjYWNoZSBsaW5lIGFsaWduZWQsIHRob3NlIGxpbmVzIG11c3QgYmUgd3JpdHRlbgotICoJYmFjay4KLSAqCi0gKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcwotICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcwotICovCi1FTlRSWSh2M19kbWFfaW52X3JhbmdlKQotCS8qIEZBTExUSFJPVUdIICovCi0KLS8qCiAgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKICAqCiAgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KQEAgLTEwOCwxOCArOTQsMjkgQEAKIEVOVFJZKHYzX2RtYV9mbHVzaF9yYW5nZSkKIAltb3YJcjAsICMwCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgMAkJQCBmbHVzaCBJRCBjYWNoZQorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh2M19kbWFfdW5tYXBfYXJlYSkKKwl0ZXEJcjIsICNETUFfVE9fREVWSUNFCisJYm5lCXYzX2RtYV9mbHVzaF9yYW5nZQogCS8qIEZBTExUSFJPVUdIICovCiAKIC8qCi0gKglkbWFfY2xlYW5fcmFuZ2Uoc3RhcnQsIGVuZCkKLSAqCi0gKglDbGVhbiAod3JpdGUgYmFjaykgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCi0gKgotICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKLSAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KICAqLwotRU5UUlkodjNfZG1hX2NsZWFuX3JhbmdlKQorRU5UUlkodjNfZG1hX21hcF9hcmVhKQogCW1vdglwYywgbHIKK0VORFBST0ModjNfZG1hX3VubWFwX2FyZWEpCitFTkRQUk9DKHYzX2RtYV9tYXBfYXJlYSkKIAogCV9fSU5JVERBVEEKIApAQCAtMTMxLDcgKzEyOCw3IEBACiAJLmxvbmcJdjNfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXYzX2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwl2M19mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJdjNfZG1hX2ludl9yYW5nZQotCS5sb25nCXYzX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCXYzX2RtYV9tYXBfYXJlYQorCS5sb25nCXYzX2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJdjNfZG1hX2ZsdXNoX3JhbmdlCiAJLnNpemUJdjNfY2FjaGVfZm5zLCAuIC0gdjNfY2FjaGVfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12NC5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjQuUwppbmRleCA1YzdkYTNlLi40ODEwZjdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12NC5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0LlMKQEAgLTk0LDIwICs5NCw2IEBACiAJLyogRkFMTFRIUk9VR0ggKi8KIAogLyoKLSAqCWRtYV9pbnZfcmFuZ2Uoc3RhcnQsIGVuZCkKLSAqCi0gKglJbnZhbGlkYXRlIChkaXNjYXJkKSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KLSAqCU1heSBub3Qgd3JpdGUgYmFjayBhbnkgZW50cmllcy4gIElmICdzdGFydCcgb3IgJ2VuZCcKLSAqCWFyZSBub3QgY2FjaGUgbGluZSBhbGlnbmVkLCB0aG9zZSBsaW5lcyBtdXN0IGJlIHdyaXR0ZW4KLSAqCWJhY2suCi0gKgotICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKLSAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKLSAqLwotRU5UUlkodjRfZG1hX2ludl9yYW5nZSkKLQkvKiBGQUxMVEhST1VHSCAqLwotCi0vKgogICoJZG1hX2ZsdXNoX3JhbmdlKHN0YXJ0LCBlbmQpCiAgKgogICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCkBAIC0xMjAsMTggKzEwNiwyOSBAQAogCW1vdglyMCwgIzAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCQlAIGZsdXNoIElEIGNhY2hlCiAjZW5kaWYKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkodjRfZG1hX3VubWFwX2FyZWEpCisJdGVxCXIyLCAjRE1BX1RPX0RFVklDRQorCWJuZQl2NF9kbWFfZmx1c2hfcmFuZ2UKIAkvKiBGQUxMVEhST1VHSCAqLwogCiAvKgotICoJZG1hX2NsZWFuX3JhbmdlKHN0YXJ0LCBlbmQpCi0gKgotICoJQ2xlYW4gKHdyaXRlIGJhY2spIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgotICoKLSAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCi0gKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCiAgKi8KLUVOVFJZKHY0X2RtYV9jbGVhbl9yYW5nZSkKK0VOVFJZKHY0X2RtYV9tYXBfYXJlYSkKIAltb3YJcGMsIGxyCitFTkRQUk9DKHY0X2RtYV91bm1hcF9hcmVhKQorRU5EUFJPQyh2NF9kbWFfbWFwX2FyZWEpCiAKIAlfX0lOSVREQVRBCiAKQEAgLTE0Myw3ICsxNDAsNyBAQAogCS5sb25nCXY0X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwl2NF9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJdjRfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCXY0X2RtYV9pbnZfcmFuZ2UKLQkubG9uZwl2NF9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwl2NF9kbWFfbWFwX2FyZWEKKwkubG9uZwl2NF9kbWFfdW5tYXBfYXJlYQogCS5sb25nCXY0X2RtYV9mbHVzaF9yYW5nZQogCS5zaXplCXY0X2NhY2hlX2ZucywgLiAtIHY0X2NhY2hlX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCmluZGV4IDNkYmVkZjFlLi5kZjgzNjhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12NHdiLlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCkBAIC0xNzMsNyArMTczLDcgQEAKICAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCiAgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCiAgKi8KLUVOVFJZKHY0d2JfZG1hX2ludl9yYW5nZSkKK3Y0d2JfZG1hX2ludl9yYW5nZToKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIAltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTE5NCw3ICsxOTQsNyBAQAogICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkodjR3Yl9kbWFfY2xlYW5fcmFuZ2UpCit2NHdiX2RtYV9jbGVhbl9yYW5nZToKIAliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQogCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKQEAgLTIxNiw2ICsyMTYsMzAgQEAKIAkuZ2xvYmwJdjR3Yl9kbWFfZmx1c2hfcmFuZ2UKIAkuc2V0CXY0d2JfZG1hX2ZsdXNoX3JhbmdlLCB2NHdiX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkodjR3Yl9kbWFfbWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwljbXAJcjIsICNETUFfVE9fREVWSUNFCisJYmVxCXY0d2JfZG1hX2NsZWFuX3JhbmdlCisJYmNzCXY0d2JfZG1hX2ludl9yYW5nZQorCWIJdjR3Yl9kbWFfZmx1c2hfcmFuZ2UKK0VORFBST0ModjR3Yl9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkodjR3Yl9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKHY0d2JfZG1hX3VubWFwX2FyZWEpCisKIAlfX0lOSVREQVRBCiAKIAkudHlwZQl2NHdiX2NhY2hlX2ZucywgI29iamVjdApAQCAtMjI2LDcgKzI1MCw3IEBACiAJLmxvbmcJdjR3Yl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJdjR3Yl9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJdjR3Yl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJdjR3Yl9kbWFfaW52X3JhbmdlCi0JLmxvbmcJdjR3Yl9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwl2NHdiX2RtYV9tYXBfYXJlYQorCS5sb25nCXY0d2JfZG1hX3VubWFwX2FyZWEKIAkubG9uZwl2NHdiX2RtYV9mbHVzaF9yYW5nZQogCS5zaXplCXY0d2JfY2FjaGVfZm5zLCAuIC0gdjR3Yl9jYWNoZV9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d3QuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0d3QuUwppbmRleCBiM2I3NDEwLi40NWM3MDMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12NHd0LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3dC5TCkBAIC0xNDIsMjMgKzE0MiwxMiBAQAogICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkodjR3dF9kbWFfaW52X3JhbmdlKQordjR3dF9kbWFfaW52X3JhbmdlOgogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgRCBlbnRyeQogCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKIAljbXAJcjAsIHIxCiAJYmxvCTFiCi0JLyogRkFMTFRIUk9VR0ggKi8KLQotLyoKLSAqCWRtYV9jbGVhbl9yYW5nZShzdGFydCwgZW5kKQotICoKLSAqCUNsZWFuIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgotICoKLSAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCi0gKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCi0gKi8KLUVOVFJZKHY0d3RfZG1hX2NsZWFuX3JhbmdlKQogCW1vdglwYywgbHIKIAogLyoKQEAgLTE3Miw2ICsxNjEsMjkgQEAKIAkuZ2xvYmwJdjR3dF9kbWFfZmx1c2hfcmFuZ2UKIAkuZXF1CXY0d3RfZG1hX2ZsdXNoX3JhbmdlLCB2NHd0X2RtYV9pbnZfcmFuZ2UKIAorLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh2NHd0X2RtYV91bm1hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJdGVxCXIyLCAjRE1BX1RPX0RFVklDRQorCWJuZQl2NHd0X2RtYV9pbnZfcmFuZ2UKKwkvKiBGQUxMVEhST1VHSCAqLworCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh2NHd0X2RtYV9tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKHY0d3RfZG1hX3VubWFwX2FyZWEpCitFTkRQUk9DKHY0d3RfZG1hX21hcF9hcmVhKQorCiAJX19JTklUREFUQQogCiAJLnR5cGUJdjR3dF9jYWNoZV9mbnMsICNvYmplY3QKQEAgLTE4Miw3ICsxOTQsNyBAQAogCS5sb25nCXY0d3RfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXY0d3RfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCXY0d3RfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCXY0d3RfZG1hX2ludl9yYW5nZQotCS5sb25nCXY0d3RfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJdjR3dF9kbWFfbWFwX2FyZWEKKwkubG9uZwl2NHd0X2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJdjR3dF9kbWFfZmx1c2hfcmFuZ2UKIAkuc2l6ZQl2NHd0X2NhY2hlX2ZucywgLiAtIHY0d3RfY2FjaGVfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12Ni5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUwppbmRleCA0YmEwYTI0Li45ZDg5YzY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12Ni5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMKQEAgLTE5NSw3ICsxOTUsNyBAQAogICoJLSBzdGFydCAgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzIG9mIHJlZ2lvbgogICoJLSBlbmQgICAgIC0gdmlydHVhbCBlbmQgYWRkcmVzcyBvZiByZWdpb24KICAqLwotRU5UUlkodjZfZG1hX2ludl9yYW5nZSkKK3Y2X2RtYV9pbnZfcmFuZ2U6CiAJdHN0CXIwLCAjRF9DQUNIRV9MSU5FX1NJWkUgLSAxCiAJYmljCXIwLCByMCwgI0RfQ0FDSEVfTElORV9TSVpFIC0gMQogI2lmZGVmIEhBUlZBUkRfQ0FDSEUKQEAgLTIyOCw3ICsyMjgsNyBAQAogICoJLSBzdGFydCAgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzIG9mIHJlZ2lvbgogICoJLSBlbmQgICAgIC0gdmlydHVhbCBlbmQgYWRkcmVzcyBvZiByZWdpb24KICAqLwotRU5UUlkodjZfZG1hX2NsZWFuX3JhbmdlKQordjZfZG1hX2NsZWFuX3JhbmdlOgogCWJpYwlyMCwgcjAsICNEX0NBQ0hFX0xJTkVfU0laRSAtIDEKIDE6CiAjaWZkZWYgSEFSVkFSRF9DQUNIRQpAQCAtMjYzLDYgKzI2MywzMiBAQAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgogCW1vdglwYywgbHIKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkodjZfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJdGVxCXIyLCAjRE1BX0ZST01fREVWSUNFCisJYmVxCXY2X2RtYV9pbnZfcmFuZ2UKKwliCXY2X2RtYV9jbGVhbl9yYW5nZQorRU5EUFJPQyh2Nl9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkodjZfZG1hX3VubWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwl0ZXEJcjIsICNETUFfVE9fREVWSUNFCisJYm5lCXY2X2RtYV9pbnZfcmFuZ2UKKwltb3YJcGMsIGxyCitFTkRQUk9DKHY2X2RtYV91bm1hcF9hcmVhKQorCiAJX19JTklUREFUQQogCiAJLnR5cGUJdjZfY2FjaGVfZm5zLCAjb2JqZWN0CkBAIC0yNzMsNyArMjk5LDcgQEAKIAkubG9uZwl2Nl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJdjZfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCXY2X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKLQkubG9uZwl2Nl9kbWFfaW52X3JhbmdlCi0JLmxvbmcJdjZfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJdjZfZG1hX21hcF9hcmVhCisJLmxvbmcJdjZfZG1hX3VubWFwX2FyZWEKIAkubG9uZwl2Nl9kbWFfZmx1c2hfcmFuZ2UKIAkuc2l6ZQl2Nl9jYWNoZV9mbnMsIC4gLSB2Nl9jYWNoZV9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMgYi9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCmluZGV4IDkwNzNkYjguLmJjZDY0ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUwpAQCAtMjE2LDcgKzIxNiw3IEBACiAgKgktIHN0YXJ0ICAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3Mgb2YgcmVnaW9uCiAgKgktIGVuZCAgICAgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzIG9mIHJlZ2lvbgogICovCi1FTlRSWSh2N19kbWFfaW52X3JhbmdlKQordjdfZG1hX2ludl9yYW5nZToKIAlkY2FjaGVfbGluZV9zaXplIHIyLCByMwogCXN1YglyMywgcjIsICMxCiAJdHN0CXIwLCByMwpAQCAtMjQwLDcgKzI0MCw3IEBACiAgKgktIHN0YXJ0ICAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3Mgb2YgcmVnaW9uCiAgKgktIGVuZCAgICAgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzIG9mIHJlZ2lvbgogICovCi1FTlRSWSh2N19kbWFfY2xlYW5fcmFuZ2UpCit2N19kbWFfY2xlYW5fcmFuZ2U6CiAJZGNhY2hlX2xpbmVfc2l6ZSByMiwgcjMKIAlzdWIJcjMsIHIyLCAjMQogCWJpYwlyMCwgcjAsIHIzCkBAIC0yNzEsNiArMjcxLDMyIEBACiAJbW92CXBjLCBscgogRU5EUFJPQyh2N19kbWFfZmx1c2hfcmFuZ2UpCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKHY3X2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCXRlcQlyMiwgI0RNQV9GUk9NX0RFVklDRQorCWJlcQl2N19kbWFfaW52X3JhbmdlCisJYgl2N19kbWFfY2xlYW5fcmFuZ2UKK0VORFBST0ModjdfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKHY3X2RtYV91bm1hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJdGVxCXIyLCAjRE1BX1RPX0RFVklDRQorCWJuZQl2N19kbWFfaW52X3JhbmdlCisJbW92CXBjLCBscgorRU5EUFJPQyh2N19kbWFfdW5tYXBfYXJlYSkKKwogCV9fSU5JVERBVEEKIAogCS50eXBlCXY3X2NhY2hlX2ZucywgI29iamVjdApAQCAtMjgxLDcgKzMwNyw3IEBACiAJLmxvbmcJdjdfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXY3X2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwl2N19mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJdjdfZG1hX2ludl9yYW5nZQotCS5sb25nCXY3X2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCXY3X2RtYV9tYXBfYXJlYQorCS5sb25nCXY3X2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJdjdfZG1hX2ZsdXNoX3JhbmdlCiAJLnNpemUJdjdfY2FjaGVfZm5zLCAuIC0gdjdfY2FjaGVfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb250ZXh0LmMgYi9hcmNoL2FybS9tbS9jb250ZXh0LmMKaW5kZXggYTllMjJlMy4uYjBlZTliYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29udGV4dC5jCisrKyBiL2FyY2gvYXJtL21tL2NvbnRleHQuYwpAQCAtMTAsMTIgKzEwLDE3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KIAogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNwdV9hc2lkX2xvY2spOwogdW5zaWduZWQgaW50IGNwdV9sYXN0X2FzaWQgPSBBU0lEX0ZJUlNUX1ZFUlNJT047CisjaWZkZWYgQ09ORklHX1NNUAorREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tX3N0cnVjdCAqLCBjdXJyZW50X21tKTsKKyNlbmRpZgogCiAvKgogICogV2UgZm9yaygpZWQgYSBwcm9jZXNzLCBhbmQgd2UgbmVlZCBhIG5ldyBjb250ZXh0IGZvciB0aGUgY2hpbGQKQEAgLTI2LDEzICszMSwxMDkgQEAKIHZvaWQgX19pbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAltbS0+Y29udGV4dC5pZCA9IDA7CisJc3Bpbl9sb2NrX2luaXQoJm1tLT5jb250ZXh0LmlkX2xvY2spOwogfQogCitzdGF0aWMgdm9pZCBmbHVzaF9jb250ZXh0KHZvaWQpCit7CisJLyogc2V0IHRoZSByZXNlcnZlZCBBU0lEIGJlZm9yZSBmbHVzaGluZyB0aGUgVExCICovCisJYXNtKCJtY3IJcDE1LCAwLCAlMCwgYzEzLCBjMCwgMVxuIiA6IDogInIiICgwKSk7CisJaXNiKCk7CisJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOworCWlmIChpY2FjaGVfaXNfdml2dF9hc2lkX3RhZ2dlZCgpKSB7CisJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOworCQlkc2IoKTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCisKK3N0YXRpYyB2b2lkIHNldF9tbV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgYXNpZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBMb2NraW5nIG5lZWRlZCBmb3IgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zIHdoZXJlIHRoZQorCSAqIHNhbWUgbW0tPmNvbnRleHQuaWQgY291bGQgYmUgc2V0IGZyb20gZGlmZmVyZW50IENQVXMgZHVyaW5nCisJICogdGhlIGJyb2FkY2FzdC4gVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB2aWEgSVBJIHNvIHRoZQorCSAqIG1tLT5jb250ZXh0LmlkX2xvY2sgaGFzIHRvIGJlIElSUS1zYWZlLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZtbS0+Y29udGV4dC5pZF9sb2NrLCBmbGFncyk7CisJaWYgKGxpa2VseSgobW0tPmNvbnRleHQuaWQgXiBjcHVfbGFzdF9hc2lkKSA+PiBBU0lEX0JJVFMpKSB7CisJCS8qCisJCSAqIE9sZCB2ZXJzaW9uIG9mIEFTSUQgZm91bmQuIFNldCB0aGUgbmV3IG9uZSBhbmQKKwkJICogcmVzZXQgbW1fY3B1bWFzayhtbSkuCisJCSAqLworCQltbS0+Y29udGV4dC5pZCA9IGFzaWQ7CisJCWNwdW1hc2tfY2xlYXIobW1fY3B1bWFzayhtbSkpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtbS0+Y29udGV4dC5pZF9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFNldCB0aGUgbW1fY3B1bWFzayhtbSkgYml0IGZvciB0aGUgY3VycmVudCBDUFUuCisJICovCisJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhtbSkpOworfQorCisvKgorICogUmVzZXQgdGhlIEFTSUQgb24gdGhlIGN1cnJlbnQgQ1BVLiBUaGlzIGZ1bmN0aW9uIGNhbGwgaXMgYnJvYWRjYXN0CisgKiBmcm9tIHRoZSBDUFUgaGFuZGxpbmcgdGhlIEFTSUQgcm9sbG92ZXIgYW5kIGhvbGRpbmcgY3B1X2FzaWRfbG9jay4KKyAqLworc3RhdGljIHZvaWQgcmVzZXRfY29udGV4dCh2b2lkICppbmZvKQoreworCXVuc2lnbmVkIGludCBhc2lkOworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwZXJfY3B1KGN1cnJlbnRfbW0sIGNwdSk7CisKKwkvKgorCSAqIENoZWNrIGlmIGEgY3VycmVudF9tbSB3YXMgc2V0IG9uIHRoaXMgQ1BVIGFzIGl0IG1pZ2h0IHN0aWxsCisJICogYmUgaW4gdGhlIGVhcmx5IGJvb3Rpbmcgc3RhZ2VzIGFuZCB1c2luZyB0aGUgcmVzZXJ2ZWQgQVNJRC4KKwkgKi8KKwlpZiAoIW1tKQorCQlyZXR1cm47CisKKwlzbXBfcm1iKCk7CisJYXNpZCA9IGNwdV9sYXN0X2FzaWQgKyBjcHUgKyAxOworCisJZmx1c2hfY29udGV4dCgpOworCXNldF9tbV9jb250ZXh0KG1tLCBhc2lkKTsKKworCS8qIHNldCB0aGUgbmV3IEFTSUQgKi8KKwlhc20oIm1jcglwMTUsIDAsICUwLCBjMTMsIGMwLCAxXG4iIDogOiAiciIgKG1tLT5jb250ZXh0LmlkKSk7CisJaXNiKCk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbW1fY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IGFzaWQpCit7CisJbW0tPmNvbnRleHQuaWQgPSBhc2lkOworCWNwdW1hc2tfY29weShtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKTsKK30KKworI2VuZGlmCisKIHZvaWQgX19uZXdfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAl1bnNpZ25lZCBpbnQgYXNpZDsKIAogCXNwaW5fbG9jaygmY3B1X2FzaWRfbG9jayk7CisjaWZkZWYgQ09ORklHX1NNUAorCS8qCisJICogQ2hlY2sgdGhlIEFTSUQgYWdhaW4sIGluIGNhc2UgdGhlIGNoYW5nZSB3YXMgYnJvYWRjYXN0IGZyb20KKwkgKiBhbm90aGVyIENQVSBiZWZvcmUgd2UgYWNxdWlyZWQgdGhlIGxvY2suCisJICovCisJaWYgKHVubGlrZWx5KCgobW0tPmNvbnRleHQuaWQgXiBjcHVfbGFzdF9hc2lkKSA+PiBBU0lEX0JJVFMpID09IDApKSB7CisJCWNwdW1hc2tfc2V0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sobW0pKTsKKwkJc3Bpbl91bmxvY2soJmNwdV9hc2lkX2xvY2spOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50LCBpdCBpcyBndWFyYW50ZWVkIHRoYXQgdGhlIGN1cnJlbnQgbW0gKHdpdGgKKwkgKiBhbiBvbGQgQVNJRCkgaXNuJ3QgYWN0aXZlIG9uIGFueSBvdGhlciBDUFUgc2luY2UgdGhlIEFTSURzCisJICogYXJlIGNoYW5nZWQgc2ltdWx0YW5lb3VzbHkgdmlhIElQSS4KKwkgKi8KIAlhc2lkID0gKytjcHVfbGFzdF9hc2lkOwogCWlmIChhc2lkID09IDApCiAJCWFzaWQgPSBjcHVfbGFzdF9hc2lkID0gQVNJRF9GSVJTVF9WRVJTSU9OOwpAQCAtNDIsMjAgKzE0MywxNSBAQAogCSAqIHRvIHN0YXJ0IGEgbmV3IHZlcnNpb24gYW5kIGZsdXNoIHRoZSBUTEIuCiAJICovCiAJaWYgKHVubGlrZWx5KChhc2lkICYgfkFTSURfTUFTSykgPT0gMCkpIHsKLQkJYXNpZCA9ICsrY3B1X2xhc3RfYXNpZDsKLQkJLyogc2V0IHRoZSByZXNlcnZlZCBBU0lEIGJlZm9yZSBmbHVzaGluZyB0aGUgVExCICovCi0JCWFzbSgibWNyCXAxNSwgMCwgJTAsIGMxMywgYzAsIDEJQCBzZXQgcmVzZXJ2ZWQgY29udGV4dCBJRFxuIgotCQkgICAgOgotCQkgICAgOiAiciIgKDApKTsKLQkJaXNiKCk7Ci0JCWZsdXNoX3RsYl9hbGwoKTsKLQkJaWYgKGljYWNoZV9pc192aXZ0X2FzaWRfdGFnZ2VkKCkpIHsKLQkJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwotCQkJZHNiKCk7Ci0JCX0KKwkJYXNpZCA9IGNwdV9sYXN0X2FzaWQgKyBzbXBfcHJvY2Vzc29yX2lkKCkgKyAxOworCQlmbHVzaF9jb250ZXh0KCk7CisjaWZkZWYgQ09ORklHX1NNUAorCQlzbXBfd21iKCk7CisJCXNtcF9jYWxsX2Z1bmN0aW9uKHJlc2V0X2NvbnRleHQsIE5VTEwsIDEpOworI2VuZGlmCisJCWNwdV9sYXN0X2FzaWQgKz0gTlJfQ1BVUzsKIAl9Ci0Jc3Bpbl91bmxvY2soJmNwdV9hc2lkX2xvY2spOwogCi0JY3B1bWFza19jb3B5KG1tX2NwdW1hc2sobW0pLCBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpOwotCW1tLT5jb250ZXh0LmlkID0gYXNpZDsKKwlzZXRfbW1fY29udGV4dChtbSwgYXNpZCk7CisJc3Bpbl91bmxvY2soJmNwdV9hc2lkX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtZmVyb2Nlb24uYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLWZlcm9jZW9uLmMKaW5kZXggNzA5OTdkNS4uNWViNGZkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtZmVyb2Nlb24uYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS1mZXJvY2Vvbi5jCkBAIC02OCwxMiArNjgsMTMgQEAKIH0KIAogdm9pZCBmZXJvY2Vvbl9jb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSwKLQl1bnNpZ25lZCBsb25nIHZhZGRyKQorCXVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXZvaWQgKmt0bywgKmtmcm9tOwogCiAJa3RvID0ga21hcF9hdG9taWModG8sIEtNX1VTRVIwKTsKIAlrZnJvbSA9IGttYXBfYXRvbWljKGZyb20sIEtNX1VTRVIxKTsKKwlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdmFkZHIsIHBhZ2VfdG9fcGZuKGZyb20pKTsKIAlmZXJvY2Vvbl9jb3B5X3VzZXJfcGFnZShrdG8sIGtmcm9tKTsKIAlrdW5tYXBfYXRvbWljKGtmcm9tLCBLTV9VU0VSMSk7CiAJa3VubWFwX2F0b21pYyhrdG8sIEtNX1VTRVIwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXYzLmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12My5jCmluZGV4IGRlOWMwNjguLmY3MjMwM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXYzLmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjMuYwpAQCAtMzgsNyArMzgsNyBAQAogfQogCiB2b2lkIHYzX2NvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLAotCXVuc2lnbmVkIGxvbmcgdmFkZHIpCisJdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJdm9pZCAqa3RvLCAqa2Zyb207CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0bWMuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0bWMuYwppbmRleCA3MzcwYTcxLi41OThjNTFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NG1jLmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjRtYy5jCkBAIC02OSw3ICs2OSw3IEBACiB9CiAKIHZvaWQgdjRfbWNfY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sCi0JdW5zaWduZWQgbG9uZyB2YWRkcikKKwl1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl2b2lkICprdG8gPSBrbWFwX2F0b21pYyh0bywgS01fVVNFUjEpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHdiLmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHdiLmMKaW5kZXggOWFiMDk4NC4uN2MyZWI1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3Yi5jCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d2IuYwpAQCAtNDgsMTIgKzQ4LDEzIEBACiB9CiAKIHZvaWQgdjR3Yl9jb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSwKLQl1bnNpZ25lZCBsb25nIHZhZGRyKQorCXVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXZvaWQgKmt0bywgKmtmcm9tOwogCiAJa3RvID0ga21hcF9hdG9taWModG8sIEtNX1VTRVIwKTsKIAlrZnJvbSA9IGttYXBfYXRvbWljKGZyb20sIEtNX1VTRVIxKTsKKwlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdmFkZHIsIHBhZ2VfdG9fcGZuKGZyb20pKTsKIAl2NHdiX2NvcHlfdXNlcl9wYWdlKGt0bywga2Zyb20pOwogCWt1bm1hcF9hdG9taWMoa2Zyb20sIEtNX1VTRVIxKTsKIAlrdW5tYXBfYXRvbWljKGt0bywgS01fVVNFUjApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3dC5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3dC5jCmluZGV4IDMwMGVmYWYuLjE3MmU2YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d3QuYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHd0LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIH0KIAogdm9pZCB2NHd0X2NvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLAotCXVuc2lnbmVkIGxvbmcgdmFkZHIpCisJdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJdm9pZCAqa3RvLCAqa2Zyb207CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY2LmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12Ni5jCmluZGV4IDBmYTEzMTkuLjhiY2E0ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY2LmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYwpAQCAtMzQsNyArMzQsNyBAQAogICogYXR0YWNrIHRoZSBrZXJuZWwncyBleGlzdGluZyBtYXBwaW5nIG9mIHRoZXNlIHBhZ2VzLgogICovCiBzdGF0aWMgdm9pZCB2Nl9jb3B5X3VzZXJfaGlnaHBhZ2Vfbm9uYWxpYXNpbmcoc3RydWN0IHBhZ2UgKnRvLAotCXN0cnVjdCBwYWdlICpmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyKQorCXN0cnVjdCBwYWdlICpmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl2b2lkICprdG8sICprZnJvbTsKIApAQCAtODEsNyArODEsNyBAQAogICogQ29weSB0aGUgcGFnZSwgdGFraW5nIGFjY291bnQgb2YgdGhlIGNhY2hlIGNvbG91ci4KICAqLwogc3RhdGljIHZvaWQgdjZfY29weV91c2VyX2hpZ2hwYWdlX2FsaWFzaW5nKHN0cnVjdCBwYWdlICp0bywKLQlzdHJ1Y3QgcGFnZSAqZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkcikKKwlzdHJ1Y3QgcGFnZSAqZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJdW5zaWduZWQgaW50IG9mZnNldCA9IENBQ0hFX0NPTE9VUih2YWRkcik7CiAJdW5zaWduZWQgbG9uZyBrZnJvbSwga3RvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjMy5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjMy5jCmluZGV4IGJjNDUyNWYuLjc0N2FkNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzYzMuYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS14c2MzLmMKQEAgLTcxLDEyICs3MSwxMyBAQAogfQogCiB2b2lkIHhzYzNfbWNfY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sCi0JdW5zaWduZWQgbG9uZyB2YWRkcikKKwl1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl2b2lkICprdG8sICprZnJvbTsKIAogCWt0byA9IGttYXBfYXRvbWljKHRvLCBLTV9VU0VSMCk7CiAJa2Zyb20gPSBrbWFwX2F0b21pYyhmcm9tLCBLTV9VU0VSMSk7CisJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZhZGRyLCBwYWdlX3RvX3Bmbihmcm9tKSk7CiAJeHNjM19tY19jb3B5X3VzZXJfcGFnZShrdG8sIGtmcm9tKTsKIAlrdW5tYXBfYXRvbWljKGtmcm9tLCBLTV9VU0VSMSk7CiAJa3VubWFwX2F0b21pYyhrdG8sIEtNX1VTRVIwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzY2FsZS5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjYWxlLmMKaW5kZXggNzY4MjRkMy4uOTkyMGMwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjYWxlLmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjYWxlLmMKQEAgLTkxLDcgKzkxLDcgQEAKIH0KIAogdm9pZCB4c2NhbGVfbWNfY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sCi0JdW5zaWduZWQgbG9uZyB2YWRkcikKKwl1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl2b2lkICprdG8gPSBrbWFwX2F0b21pYyh0bywgS01fVVNFUjEpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwppbmRleCAyNjMyNWNiLi4wZGE3ZWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCisrKyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKQEAgLTI5LDkgKzI5LDYgQEAKICNlcnJvciAiQ09OU0lTVEVOVF9ETUFfU0laRSBtdXN0IGJlIG11bHRpcGxlIG9mIDJNaUIiCiAjZW5kaWYKIAotI2RlZmluZSBDT05TSVNURU5UX0VORAkoMHhmZmUwMDAwMCkKLSNkZWZpbmUgQ09OU0lTVEVOVF9CQVNFCShDT05TSVNURU5UX0VORCAtIENPTlNJU1RFTlRfRE1BX1NJWkUpCi0KICNkZWZpbmUgQ09OU0lTVEVOVF9PRkZTRVQoeCkJKCgodW5zaWduZWQgbG9uZykoeCkgLSBDT05TSVNURU5UX0JBU0UpID4+IFBBR0VfU0hJRlQpCiAjZGVmaW5lIENPTlNJU1RFTlRfUFRFX0lOREVYKHgpICgoKHVuc2lnbmVkIGxvbmcpKHgpIC0gQ09OU0lTVEVOVF9CQVNFKSA+PiBQR0RJUl9TSElGVCkKICNkZWZpbmUgTlVNX0NPTlNJU1RFTlRfUFRFUyAoQ09OU0lTVEVOVF9ETUFfU0laRSA+PiBQR0RJUl9TSElGVCkKQEAgLTQwNCw3OCArNDAxLDQ0IEBACiAgKiBwbGF0Zm9ybXMgd2l0aCBDT05GSUdfRE1BQk9VTkNFLgogICogVXNlIHRoZSBkcml2ZXIgRE1BIHN1cHBvcnQgLSBzZWUgZG1hLW1hcHBpbmcuaCAoZG1hX3N5bmNfKikKICAqLwotdm9pZCBkbWFfY2FjaGVfbWFpbnQoY29uc3Qgdm9pZCAqc3RhcnQsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQordm9pZCBfX19kbWFfc2luZ2xlX2NwdV90b19kZXYoY29uc3Qgdm9pZCAqa2FkZHIsIHNpemVfdCBzaXplLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQl2b2lkICgqaW5uZXJfb3ApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKLQl2b2lkICgqb3V0ZXJfb3ApKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotCi0JQlVHX09OKCF2aXJ0X2FkZHJfdmFsaWQoc3RhcnQpIHx8ICF2aXJ0X2FkZHJfdmFsaWQoc3RhcnQgKyBzaXplIC0gMSkpOwotCi0Jc3dpdGNoIChkaXJlY3Rpb24pIHsKLQljYXNlIERNQV9GUk9NX0RFVklDRToJCS8qIGludmFsaWRhdGUgb25seSAqLwotCQlpbm5lcl9vcCA9IGRtYWNfaW52X3JhbmdlOwotCQlvdXRlcl9vcCA9IG91dGVyX2ludl9yYW5nZTsKLQkJYnJlYWs7Ci0JY2FzZSBETUFfVE9fREVWSUNFOgkJLyogd3JpdGViYWNrIG9ubHkgKi8KLQkJaW5uZXJfb3AgPSBkbWFjX2NsZWFuX3JhbmdlOwotCQlvdXRlcl9vcCA9IG91dGVyX2NsZWFuX3JhbmdlOwotCQlicmVhazsKLQljYXNlIERNQV9CSURJUkVDVElPTkFMOgkJLyogd3JpdGViYWNrIGFuZCBpbnZhbGlkYXRlICovCi0JCWlubmVyX29wID0gZG1hY19mbHVzaF9yYW5nZTsKLQkJb3V0ZXJfb3AgPSBvdXRlcl9mbHVzaF9yYW5nZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JfQotCi0JaW5uZXJfb3Aoc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7Ci0Jb3V0ZXJfb3AoX19wYShzdGFydCksIF9fcGEoc3RhcnQpICsgc2l6ZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRtYV9jYWNoZV9tYWludCk7Ci0KLXN0YXRpYyB2b2lkIGRtYV9jYWNoZV9tYWludF9jb250aWd1b3VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQkgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCi17Ci0Jdm9pZCAqdmFkZHI7CiAJdW5zaWduZWQgbG9uZyBwYWRkcjsKLQl2b2lkICgqaW5uZXJfb3ApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKLQl2b2lkICgqb3V0ZXJfb3ApKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogCi0Jc3dpdGNoIChkaXJlY3Rpb24pIHsKLQljYXNlIERNQV9GUk9NX0RFVklDRToJCS8qIGludmFsaWRhdGUgb25seSAqLwotCQlpbm5lcl9vcCA9IGRtYWNfaW52X3JhbmdlOwotCQlvdXRlcl9vcCA9IG91dGVyX2ludl9yYW5nZTsKLQkJYnJlYWs7Ci0JY2FzZSBETUFfVE9fREVWSUNFOgkJLyogd3JpdGViYWNrIG9ubHkgKi8KLQkJaW5uZXJfb3AgPSBkbWFjX2NsZWFuX3JhbmdlOwotCQlvdXRlcl9vcCA9IG91dGVyX2NsZWFuX3JhbmdlOwotCQlicmVhazsKLQljYXNlIERNQV9CSURJUkVDVElPTkFMOgkJLyogd3JpdGViYWNrIGFuZCBpbnZhbGlkYXRlICovCi0JCWlubmVyX29wID0gZG1hY19mbHVzaF9yYW5nZTsKLQkJb3V0ZXJfb3AgPSBvdXRlcl9mbHVzaF9yYW5nZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JfQorCUJVR19PTighdmlydF9hZGRyX3ZhbGlkKGthZGRyKSB8fCAhdmlydF9hZGRyX3ZhbGlkKGthZGRyICsgc2l6ZSAtIDEpKTsKIAotCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpIHsKLQkJdmFkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQ7Ci0JCWlubmVyX29wKHZhZGRyLCB2YWRkciArIHNpemUpOworCWRtYWNfbWFwX2FyZWEoa2FkZHIsIHNpemUsIGRpcik7CisKKwlwYWRkciA9IF9fcGEoa2FkZHIpOworCWlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKSB7CisJCW91dGVyX2ludl9yYW5nZShwYWRkciwgcGFkZHIgKyBzaXplKTsKIAl9IGVsc2UgewotCQl2YWRkciA9IGttYXBfaGlnaF9nZXQocGFnZSk7Ci0JCWlmICh2YWRkcikgewotCQkJdmFkZHIgKz0gb2Zmc2V0OwotCQkJaW5uZXJfb3AodmFkZHIsIHZhZGRyICsgc2l6ZSk7Ci0JCQlrdW5tYXBfaGlnaChwYWdlKTsKLQkJfQorCQlvdXRlcl9jbGVhbl9yYW5nZShwYWRkciwgcGFkZHIgKyBzaXplKTsKKwl9CisJLyogRklYTUU6IG5vbi1zcGVjdWxhdGluZzogZmx1c2ggb24gYmlkaXJlY3Rpb25hbCBtYXBwaW5ncz8gKi8KK30KK0VYUE9SVF9TWU1CT0woX19fZG1hX3NpbmdsZV9jcHVfdG9fZGV2KTsKKwordm9pZCBfX19kbWFfc2luZ2xlX2Rldl90b19jcHUoY29uc3Qgdm9pZCAqa2FkZHIsIHNpemVfdCBzaXplLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlCVUdfT04oIXZpcnRfYWRkcl92YWxpZChrYWRkcikgfHwgIXZpcnRfYWRkcl92YWxpZChrYWRkciArIHNpemUgLSAxKSk7CisKKwkvKiBGSVhNRTogbm9uLXNwZWN1bGF0aW5nOiBub3QgcmVxdWlyZWQgKi8KKwkvKiBkb24ndCBib3RoZXIgaW52YWxpZGF0aW5nIGlmIERNQSB0byBkZXZpY2UgKi8KKwlpZiAoZGlyICE9IERNQV9UT19ERVZJQ0UpIHsKKwkJdW5zaWduZWQgbG9uZyBwYWRkciA9IF9fcGEoa2FkZHIpOworCQlvdXRlcl9pbnZfcmFuZ2UocGFkZHIsIHBhZGRyICsgc2l6ZSk7CiAJfQogCi0JcGFkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7Ci0Jb3V0ZXJfb3AocGFkZHIsIHBhZGRyICsgc2l6ZSk7CisJZG1hY191bm1hcF9hcmVhKGthZGRyLCBzaXplLCBkaXIpOwogfQorRVhQT1JUX1NZTUJPTChfX19kbWFfc2luZ2xlX2Rldl90b19jcHUpOwogCi12b2lkIGRtYV9jYWNoZV9tYWludF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCSAgc2l6ZV90IHNpemUsIGludCBkaXIpCitzdGF0aWMgdm9pZCBkbWFfY2FjaGVfbWFpbnRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwl2b2lkICgqb3ApKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpKQogewogCS8qCiAJICogQSBzaW5nbGUgc2cgZW50cnkgbWF5IHJlZmVyIHRvIG11bHRpcGxlIHBoeXNpY2FsbHkgY29udGlndW91cwpAQCAtNDg2LDIwICs0NDksNjIgQEAKIAlzaXplX3QgbGVmdCA9IHNpemU7CiAJZG8gewogCQlzaXplX3QgbGVuID0gbGVmdDsKLQkJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpICYmIGxlbiArIG9mZnNldCA+IFBBR0VfU0laRSkgewotCQkJaWYgKG9mZnNldCA+PSBQQUdFX1NJWkUpIHsKLQkJCQlwYWdlICs9IG9mZnNldCAvIFBBR0VfU0laRTsKLQkJCQlvZmZzZXQgJT0gUEFHRV9TSVpFOworCQl2b2lkICp2YWRkcjsKKworCQlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpIHsKKwkJCWlmIChsZW4gKyBvZmZzZXQgPiBQQUdFX1NJWkUpIHsKKwkJCQlpZiAob2Zmc2V0ID49IFBBR0VfU0laRSkgeworCQkJCQlwYWdlICs9IG9mZnNldCAvIFBBR0VfU0laRTsKKwkJCQkJb2Zmc2V0ICU9IFBBR0VfU0laRTsKKwkJCQl9CisJCQkJbGVuID0gUEFHRV9TSVpFIC0gb2Zmc2V0OwogCQkJfQotCQkJbGVuID0gUEFHRV9TSVpFIC0gb2Zmc2V0OworCQkJdmFkZHIgPSBrbWFwX2hpZ2hfZ2V0KHBhZ2UpOworCQkJaWYgKHZhZGRyKSB7CisJCQkJdmFkZHIgKz0gb2Zmc2V0OworCQkJCW9wKHZhZGRyLCBsZW4sIGRpcik7CisJCQkJa3VubWFwX2hpZ2gocGFnZSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQl2YWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldDsKKwkJCW9wKHZhZGRyLCBsZW4sIGRpcik7CiAJCX0KLQkJZG1hX2NhY2hlX21haW50X2NvbnRpZ3VvdXMocGFnZSwgb2Zmc2V0LCBsZW4sIGRpcik7CiAJCW9mZnNldCA9IDA7CiAJCXBhZ2UrKzsKIAkJbGVmdCAtPSBsZW47CiAJfSB3aGlsZSAobGVmdCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGRtYV9jYWNoZV9tYWludF9wYWdlKTsKKwordm9pZCBfX19kbWFfcGFnZV9jcHVfdG9fZGV2KHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZiwKKwlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXVuc2lnbmVkIGxvbmcgcGFkZHI7CisKKwlkbWFfY2FjaGVfbWFpbnRfcGFnZShwYWdlLCBvZmYsIHNpemUsIGRpciwgZG1hY19tYXBfYXJlYSk7CisKKwlwYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZjsKKwlpZiAoZGlyID09IERNQV9GUk9NX0RFVklDRSkgeworCQlvdXRlcl9pbnZfcmFuZ2UocGFkZHIsIHBhZGRyICsgc2l6ZSk7CisJfSBlbHNlIHsKKwkJb3V0ZXJfY2xlYW5fcmFuZ2UocGFkZHIsIHBhZGRyICsgc2l6ZSk7CisJfQorCS8qIEZJWE1FOiBub24tc3BlY3VsYXRpbmc6IGZsdXNoIG9uIGJpZGlyZWN0aW9uYWwgbWFwcGluZ3M/ICovCit9CitFWFBPUlRfU1lNQk9MKF9fX2RtYV9wYWdlX2NwdV90b19kZXYpOworCit2b2lkIF9fX2RtYV9wYWdlX2Rldl90b19jcHUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2ZmLAorCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJdW5zaWduZWQgbG9uZyBwYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZjsKKworCS8qIEZJWE1FOiBub24tc3BlY3VsYXRpbmc6IG5vdCByZXF1aXJlZCAqLworCS8qIGRvbid0IGJvdGhlciBpbnZhbGlkYXRpbmcgaWYgRE1BIHRvIGRldmljZSAqLworCWlmIChkaXIgIT0gRE1BX1RPX0RFVklDRSkKKwkJb3V0ZXJfaW52X3JhbmdlKHBhZGRyLCBwYWRkciArIHNpemUpOworCisJZG1hX2NhY2hlX21haW50X3BhZ2UocGFnZSwgb2ZmLCBzaXplLCBkaXIsIGRtYWNfdW5tYXBfYXJlYSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fX2RtYV9wYWdlX2Rldl90b19jcHUpOwogCiAvKioKICAqIGRtYV9tYXBfc2cgLSBtYXAgYSBzZXQgb2YgU0cgYnVmZmVycyBmb3Igc3RyZWFtaW5nIG1vZGUgRE1BCkBAIC01NzMsOCArNTc4LDEyIEBACiAJaW50IGk7CiAKIAlmb3JfZWFjaF9zZyhzZywgcywgbmVudHMsIGkpIHsKLQkJZG1hYm91bmNlX3N5bmNfZm9yX2NwdShkZXYsIHNnX2RtYV9hZGRyZXNzKHMpLCAwLAotCQkJCQlzZ19kbWFfbGVuKHMpLCBkaXIpOworCQlpZiAoIWRtYWJvdW5jZV9zeW5jX2Zvcl9jcHUoZGV2LCBzZ19kbWFfYWRkcmVzcyhzKSwgMCwKKwkJCQkJICAgIHNnX2RtYV9sZW4ocyksIGRpcikpCisJCQljb250aW51ZTsKKworCQlfX2RtYV9wYWdlX2Rldl90b19jcHUoc2dfcGFnZShzKSwgcy0+b2Zmc2V0LAorCQkJCSAgICAgIHMtPmxlbmd0aCwgZGlyKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKGRtYV9zeW5jX3NnX2Zvcl9jcHUpOwpAQCAtNTk3LDkgKzYwNiw4IEBACiAJCQkJCXNnX2RtYV9sZW4ocyksIGRpcikpCiAJCQljb250aW51ZTsKIAotCQlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKLQkJCWRtYV9jYWNoZV9tYWludF9wYWdlKHNnX3BhZ2UocyksIHMtPm9mZnNldCwKLQkJCQkJICAgICBzLT5sZW5ndGgsIGRpcik7CisJCV9fZG1hX3BhZ2VfY3B1X3RvX2RldihzZ19wYWdlKHMpLCBzLT5vZmZzZXQsCisJCQkJICAgICAgcy0+bGVuZ3RoLCBkaXIpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2dfZm9yX2RldmljZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMgYi9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKaW5kZXggNTZlZTE1My4uYzliOTdlOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCisrKyBiL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYwpAQCAtMzYsMjggKzM2LDEyIEBACiAgKiBUaGVyZWZvcmUgdGhvc2UgY29uZmlndXJhdGlvbnMgd2hpY2ggbWlnaHQgY2FsbCBhZGp1c3RfcHRlICh0aG9zZQogICogd2l0aG91dCBDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQpIGNhbm5vdCBzdXBwb3J0IHNwbGl0IHBhZ2VfdGFibGVfbG9jay4KICAqLwotc3RhdGljIGludCBhZGp1c3RfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgaW50IGRvX2FkanVzdF9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwl1bnNpZ25lZCBsb25nIHBmbiwgcHRlX3QgKnB0ZXApCiB7Ci0JcGdkX3QgKnBnZDsKLQlwbWRfdCAqcG1kOwotCXB0ZV90ICpwdGUsIGVudHJ5OworCXB0ZV90IGVudHJ5ID0gKnB0ZXA7CiAJaW50IHJldDsKIAotCXBnZCA9IHBnZF9vZmZzZXQodm1hLT52bV9tbSwgYWRkcmVzcyk7Ci0JaWYgKHBnZF9ub25lKCpwZ2QpKQotCQlnb3RvIG5vX3BnZDsKLQlpZiAocGdkX2JhZCgqcGdkKSkKLQkJZ290byBiYWRfcGdkOwotCi0JcG1kID0gcG1kX29mZnNldChwZ2QsIGFkZHJlc3MpOwotCWlmIChwbWRfbm9uZSgqcG1kKSkKLQkJZ290byBub19wbWQ7Ci0JaWYgKHBtZF9iYWQoKnBtZCkpCi0JCWdvdG8gYmFkX3BtZDsKLQotCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcmVzcyk7Ci0JZW50cnkgPSAqcHRlOwotCiAJLyoKIAkgKiBJZiB0aGlzIHBhZ2UgaXMgcHJlc2VudCwgaXQncyBhY3R1YWxseSBiZWluZyBzaGFyZWQuCiAJICovCkBAIC02OCwzMyArNTIsNTUgQEAKIAkgKiBmYXVsdCAoaWUsIGlzIG9sZCksIHdlIGNhbiBzYWZlbHkgaWdub3JlIGFueSBpc3N1ZXMuCiAJICovCiAJaWYgKHJldCAmJiAocHRlX3ZhbChlbnRyeSkgJiBMX1BURV9NVF9NQVNLKSAhPSBzaGFyZWRfcHRlX21hc2spIHsKLQkJdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKGVudHJ5KTsKIAkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHJlc3MsIHBmbik7CiAJCW91dGVyX2ZsdXNoX3JhbmdlKChwZm4gPDwgUEFHRV9TSElGVCksCiAJCQkJICAocGZuIDw8IFBBR0VfU0hJRlQpICsgUEFHRV9TSVpFKTsKIAkJcHRlX3ZhbChlbnRyeSkgJj0gfkxfUFRFX01UX01BU0s7CiAJCXB0ZV92YWwoZW50cnkpIHw9IHNoYXJlZF9wdGVfbWFzazsKLQkJc2V0X3B0ZV9hdCh2bWEtPnZtX21tLCBhZGRyZXNzLCBwdGUsIGVudHJ5KTsKKwkJc2V0X3B0ZV9hdCh2bWEtPnZtX21tLCBhZGRyZXNzLCBwdGVwLCBlbnRyeSk7CiAJCWZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcmVzcyk7CiAJfQotCXB0ZV91bm1hcChwdGUpOworCiAJcmV0dXJuIHJldDsKK30KIAotYmFkX3BnZDoKLQlwZ2RfRVJST1IoKnBnZCk7Ci0JcGdkX2NsZWFyKHBnZCk7Ci1ub19wZ2Q6Ci0JcmV0dXJuIDA7CitzdGF0aWMgaW50IGFkanVzdF9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwl1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlzcGlubG9ja190ICpwdGw7CisJcGdkX3QgKnBnZDsKKwlwbWRfdCAqcG1kOworCXB0ZV90ICpwdGU7CisJaW50IHJldDsKIAotYmFkX3BtZDoKLQlwbWRfRVJST1IoKnBtZCk7Ci0JcG1kX2NsZWFyKHBtZCk7Ci1ub19wbWQ6Ci0JcmV0dXJuIDA7CisJcGdkID0gcGdkX29mZnNldCh2bWEtPnZtX21tLCBhZGRyZXNzKTsKKwlpZiAocGdkX25vbmVfb3JfY2xlYXJfYmFkKHBnZCkpCisJCXJldHVybiAwOworCisJcG1kID0gcG1kX29mZnNldChwZ2QsIGFkZHJlc3MpOworCWlmIChwbWRfbm9uZV9vcl9jbGVhcl9iYWQocG1kKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFRoaXMgaXMgY2FsbGVkIHdoaWxlIGFub3RoZXIgcGFnZSB0YWJsZSBpcyBtYXBwZWQsIHNvIHdlCisJICogbXVzdCB1c2UgdGhlIG5lc3RlZCB2ZXJzaW9uLiAgVGhpcyBhbHNvIG1lYW5zIHdlIG5lZWQgdG8KKwkgKiBvcGVuLWNvZGUgdGhlIHNwaW4tbG9ja2luZy4KKwkgKi8KKwlwdGwgPSBwdGVfbG9ja3B0cih2bWEtPnZtX21tLCBwbWQpOworCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX25lc3RlZChwbWQsIGFkZHJlc3MpOworCXNwaW5fbG9jayhwdGwpOworCisJcmV0ID0gZG9fYWRqdXN0X3B0ZSh2bWEsIGFkZHJlc3MsIHBmbiwgcHRlKTsKKworCXNwaW5fdW5sb2NrKHB0bCk7CisJcHRlX3VubWFwX25lc3RlZChwdGUpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQKLW1ha2VfY29oZXJlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuKQorbWFrZV9jb2hlcmVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbXBudDsKQEAgLTEyMiwxMSArMTI4LDExIEBACiAJCWlmICghKG1wbnQtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUpKQogCQkJY29udGludWU7CiAJCW9mZnNldCA9IChwZ29mZiAtIG1wbnQtPnZtX3Bnb2ZmKSA8PCBQQUdFX1NISUZUOwotCQlhbGlhc2VzICs9IGFkanVzdF9wdGUobXBudCwgbXBudC0+dm1fc3RhcnQgKyBvZmZzZXQpOworCQlhbGlhc2VzICs9IGFkanVzdF9wdGUobXBudCwgbXBudC0+dm1fc3RhcnQgKyBvZmZzZXQsIHBmbik7CiAJfQogCWZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKTsKIAlpZiAoYWxpYXNlcykKLQkJYWRqdXN0X3B0ZSh2bWEsIGFkZHIpOworCQlkb19hZGp1c3RfcHRlKHZtYSwgYWRkciwgcGZuLCBwdGVwKTsKIAllbHNlCiAJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwZm4pOwogfQpAQCAtMTQ0LDkgKzE1MCwxMCBAQAogICoKICAqIE5vdGUgdGhhdCB0aGUgcHRlIGxvY2sgd2lsbCBiZSBoZWxkLgogICovCi12b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQordm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJcHRlX3QgKnB0ZXApCiB7Ci0JdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKHB0ZSk7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKCpwdGVwKTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIApAQCAtMTY4LDcgKzE3NSw3IEBACiAjZW5kaWYKIAlpZiAobWFwcGluZykgewogCQlpZiAoY2FjaGVfaXNfdml2dCgpKQotCQkJbWFrZV9jb2hlcmVudChtYXBwaW5nLCB2bWEsIGFkZHIsIHBmbik7CisJCQltYWtlX2NvaGVyZW50KG1hcHBpbmcsIHZtYSwgYWRkciwgcHRlcCwgcGZuKTsKIAkJZWxzZSBpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCiAJCQlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC5jIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwppbmRleCAxMGUwNjgwLi45ZDQwYzM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mYXVsdC5jCisrKyBiL2FyY2gvYXJtL21tL2ZhdWx0LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC0zMDIsNiArMzAzLDEyIEBACiAJZmF1bHQgPSBfX2RvX3BhZ2VfZmF1bHQobW0sIGFkZHIsIGZzciwgdHNrKTsKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCisJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTLCAxLCAwLCByZWdzLCBhZGRyKTsKKwlpZiAoZmF1bHQgJiBWTV9GQVVMVF9NQUpPUikKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwgcmVncywgYWRkcik7CisJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9NSU5PUikKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwgcmVncywgYWRkcik7CisKIAkvKgogCSAqIEhhbmRsZSB0aGUgIm5vcm1hbCIgY2FzZSBmaXJzdCAtIFZNX0ZBVUxUX01BSk9SIC8gVk1fRkFVTFRfTUlOT1IKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZsdXNoLmMgYi9hcmNoL2FybS9tbS9mbHVzaC5jCmluZGV4IDZmM2E0YjcuLmUzNGYwOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZsdXNoLmMKKysrIGIvYXJjaC9hcm0vbW0vZmx1c2guYwpAQCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vY2FjaGV0eXBlLmg+CisjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCkBAIC04NywxMyArODgsMjYgQEAKIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMgJiYgaWNhY2hlX2lzX3ZpdnRfYXNpZF90YWdnZWQoKSkKIAkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiB9CisjZWxzZQorI2RlZmluZSBmbHVzaF9wZm5fYWxpYXMocGZuLHZhZGRyKQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyB2b2lkIGZsdXNoX3B0cmFjZV9hY2Nlc3Nfb3RoZXIodm9pZCAqYXJncykKK3sKKwlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKK30KKyNlbmRpZgorCitzdGF0aWMKIHZvaWQgZmx1c2hfcHRyYWNlX2FjY2VzcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkgdW5zaWduZWQgbG9uZyB1YWRkciwgdm9pZCAqa2FkZHIsCi0JCQkgdW5zaWduZWQgbG9uZyBsZW4sIGludCB3cml0ZSkKKwkJCSB1bnNpZ25lZCBsb25nIHVhZGRyLCB2b2lkICprYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCiB7CiAJaWYgKGNhY2hlX2lzX3ZpdnQoKSkgewotCQl2aXZ0X2ZsdXNoX3B0cmFjZV9hY2Nlc3Modm1hLCBwYWdlLCB1YWRkciwga2FkZHIsIGxlbiwgd3JpdGUpOworCQlpZiAoY3B1bWFza190ZXN0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sodm1hLT52bV9tbSkpKSB7CisJCQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylrYWRkcjsKKwkJCV9fY3B1Y19jb2hlcmVudF9rZXJuX3JhbmdlKGFkZHIsIGFkZHIgKyBsZW4pOworCQl9CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwNCwxNiArMTE4LDM3IEBACiAJfQogCiAJLyogVklQVCBub24tYWxpYXNpbmcgY2FjaGUgKi8KLQlpZiAoY3B1bWFza190ZXN0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sodm1hLT52bV9tbSkpICYmCi0JICAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSB7CisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSB7CiAJCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWthZGRyOwotCQkvKiBvbmx5IGZsdXNoaW5nIHRoZSBrZXJuZWwgbWFwcGluZyBvbiBub24tYWxpYXNpbmcgVklQVCAqLwogCQlfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZShhZGRyLCBhZGRyICsgbGVuKTsKKyNpZmRlZiBDT05GSUdfU01QCisJCWlmIChjYWNoZV9vcHNfbmVlZF9icm9hZGNhc3QoKSkKKwkJCXNtcF9jYWxsX2Z1bmN0aW9uKGZsdXNoX3B0cmFjZV9hY2Nlc3Nfb3RoZXIsCisJCQkJCSAgTlVMTCwgMSk7CisjZW5kaWYKIAl9CiB9Ci0jZWxzZQotI2RlZmluZSBmbHVzaF9wZm5fYWxpYXMocGZuLHZhZGRyKQlkbyB7IH0gd2hpbGUgKDApCisKKy8qCisgKiBDb3B5IHVzZXIgZGF0YSBmcm9tL3RvIGEgcGFnZSB3aGljaCBpcyBtYXBwZWQgaW50byBhIGRpZmZlcmVudAorICogcHJvY2Vzc2VzIGFkZHJlc3Mgc3BhY2UuICBSZWFsbHksIHdlIHdhbnQgdG8gYWxsb3cgb3VyICJ1c2VyCisgKiBzcGFjZSIgbW9kZWwgdG8gaGFuZGxlIHRoaXMuCisgKgorICogTm90ZSB0aGF0IHRoaXMgY29kZSBuZWVkcyB0byBydW4gb24gdGhlIGN1cnJlbnQgQ1BVLgorICovCit2b2lkIGNvcHlfdG9fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWFkZHIsIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBsZW4pCit7CisjaWZkZWYgQ09ORklHX1NNUAorCXByZWVtcHRfZGlzYWJsZSgpOwogI2VuZGlmCisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOworCWZsdXNoX3B0cmFjZV9hY2Nlc3Modm1hLCBwYWdlLCB1YWRkciwgZHN0LCBsZW4pOworI2lmZGVmIENPTkZJR19TTVAKKwlwcmVlbXB0X2VuYWJsZSgpOworI2VuZGlmCit9CiAKIHZvaWQgX19mbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggYTA0ZmZiYi4uNzgyOWNiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC0zMiwxOSArMzMsMjEgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBoeXNfaW5pdHJkX3N0YXJ0IF9faW5pdGRhdGEgPSAwOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcGh5c19pbml0cmRfc2l6ZSBfX2luaXRkYXRhID0gMDsKIAotc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2luaXRyZChjaGFyICoqcCkKK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRyZChjaGFyICpwKQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemU7CisJY2hhciAqZW5kcDsKIAotCXN0YXJ0ID0gbWVtcGFyc2UoKnAsIHApOwotCWlmICgqKnAgPT0gJywnKSB7Ci0JCXNpemUgPSBtZW1wYXJzZSgoKnApICsgMSwgcCk7CisJc3RhcnQgPSBtZW1wYXJzZShwLCAmZW5kcCk7CisJaWYgKCplbmRwID09ICcsJykgeworCQlzaXplID0gbWVtcGFyc2UoZW5kcCArIDEsIE5VTEwpOwogCiAJCXBoeXNfaW5pdHJkX3N0YXJ0ID0gc3RhcnQ7CiAJCXBoeXNfaW5pdHJkX3NpemUgPSBzaXplOwogCX0KKwlyZXR1cm4gMDsKIH0KLV9fZWFybHlfcGFyYW0oImluaXRyZD0iLCBlYXJseV9pbml0cmQpOworZWFybHlfcGFyYW0oImluaXRyZCIsIGVhcmx5X2luaXRyZCk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHBhcnNlX3RhZ19pbml0cmQoY29uc3Qgc3RydWN0IHRhZyAqdGFnKQogewpAQCAtNTYwLDcgKzU2Myw3IEBACiAgKi8KIHZvaWQgX19pbml0IG1lbV9pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGNvZGVzaXplLCBkYXRhc2l6ZSwgaW5pdHNpemU7CisJdW5zaWduZWQgbG9uZyByZXNlcnZlZF9wYWdlcywgZnJlZV9wYWdlczsKIAlpbnQgaSwgbm9kZTsKIAogI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCkBAIC01OTYsNiArNTk5LDMzIEBACiAJdG90YWxyYW1fcGFnZXMgKz0gdG90YWxoaWdoX3BhZ2VzOwogI2VuZGlmCiAKKwlyZXNlcnZlZF9wYWdlcyA9IGZyZWVfcGFnZXMgPSAwOworCisJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgeworCQlwZ19kYXRhX3QgKm4gPSBOT0RFX0RBVEEobm9kZSk7CisJCXN0cnVjdCBwYWdlICptYXAgPSBwZ2RhdF9wYWdlX25yKG4sIDApIC0gbi0+bm9kZV9zdGFydF9wZm47CisKKwkJZm9yX2VhY2hfbm9kZWJhbmsoaSwgJm1lbWluZm8sIG5vZGUpIHsKKwkJCXN0cnVjdCBtZW1iYW5rICpiYW5rID0gJm1lbWluZm8uYmFua1tpXTsKKwkJCXVuc2lnbmVkIGludCBwZm4xLCBwZm4yOworCQkJc3RydWN0IHBhZ2UgKnBhZ2UsICplbmQ7CisKKwkJCXBmbjEgPSBiYW5rX3Bmbl9zdGFydChiYW5rKTsKKwkJCXBmbjIgPSBiYW5rX3Bmbl9lbmQoYmFuayk7CisKKwkJCXBhZ2UgPSBtYXAgKyBwZm4xOworCQkJZW5kICA9IG1hcCArIHBmbjI7CisKKwkJCWRvIHsKKwkJCQlpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKQorCQkJCQlyZXNlcnZlZF9wYWdlcysrOworCQkJCWVsc2UgaWYgKCFwYWdlX2NvdW50KHBhZ2UpKQorCQkJCQlmcmVlX3BhZ2VzKys7CisJCQkJcGFnZSsrOworCQkJfSB3aGlsZSAocGFnZSA8IGVuZCk7CisJCX0KKwl9CisKIAkvKgogCSAqIFNpbmNlIG91ciBtZW1vcnkgbWF5IG5vdCBiZSBjb250aWd1b3VzLCBjYWxjdWxhdGUgdGhlCiAJICogcmVhbCBudW1iZXIgb2YgcGFnZXMgd2UgaGF2ZSBpbiB0aGlzIHN5c3RlbQpAQCAtNjA4LDE2ICs2MzgsNzEgQEAKIAl9CiAJcHJpbnRrKCIgPSAlbHVNQiB0b3RhbFxuIiwgbnVtX3BoeXNwYWdlcyA+PiAoMjAgLSBQQUdFX1NISUZUKSk7CiAKLQljb2Rlc2l6ZSA9IF9ldGV4dCAtIF90ZXh0OwotCWRhdGFzaXplID0gX2VuZCAtIF9kYXRhOwotCWluaXRzaXplID0gX19pbml0X2VuZCAtIF9faW5pdF9iZWdpbjsKLQotCXByaW50ayhLRVJOX05PVElDRSAiTWVtb3J5OiAlbHVLQiBhdmFpbGFibGUgKCVkSyBjb2RlLCAiCi0JCSIlZEsgZGF0YSwgJWRLIGluaXQsICVsdUsgaGlnaG1lbSlcbiIsCi0JCW5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksIGNvZGVzaXplID4+IDEwLAotCQlkYXRhc2l6ZSA+PiAxMCwgaW5pdHNpemUgPj4gMTAsCisJcHJpbnRrKEtFUk5fTk9USUNFICJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUsICVsdWsgcmVzZXJ2ZWQsICVsdUsgaGlnaG1lbVxuIiwKKwkJbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkJZnJlZV9wYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksCisJCXJlc2VydmVkX3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKIAkJdG90YWxoaWdoX3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSk7CiAKKyNkZWZpbmUgTUxLKGIsIHQpIGIsIHQsICgodCkgLSAoYikpID4+IDEwCisjZGVmaW5lIE1MTShiLCB0KSBiLCB0LCAoKHQpIC0gKGIpKSA+PiAyMAorI2RlZmluZSBNTEtfUk9VTkRVUChiLCB0KSBiLCB0LCBESVZfUk9VTkRfVVAoKCh0KSAtIChiKSksIFNaXzFLKQorCisJcHJpbnRrKEtFUk5fTk9USUNFICJWaXJ0dWFsIGtlcm5lbCBtZW1vcnkgbGF5b3V0OlxuIgorCQkJIiAgICB2ZWN0b3IgIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBrQilcbiIKKwkJCSIgICAgZml4bWFwICA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQga0IpXG4iCisjaWZkZWYgQ09ORklHX01NVQorCQkJIiAgICBETUEgICAgIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBNQilcbiIKKyNlbmRpZgorCQkJIiAgICB2bWFsbG9jIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBNQilcbiIKKwkJCSIgICAgbG93bWVtICA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQgTUIpXG4iCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJCSIgICAgcGttYXAgICA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQgTUIpXG4iCisjZW5kaWYKKwkJCSIgICAgbW9kdWxlcyA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQgTUIpXG4iCisJCQkiICAgICAgLmluaXQgOiAweCVwIiAiIC0gMHglcCIgIiAgICglNGQga0IpXG4iCisJCQkiICAgICAgLnRleHQgOiAweCVwIiAiIC0gMHglcCIgIiAgICglNGQga0IpXG4iCisJCQkiICAgICAgLmRhdGEgOiAweCVwIiAiIC0gMHglcCIgIiAgICglNGQga0IpXG4iLAorCisJCQlNTEsoVUwoQ09ORklHX1ZFQ1RPUlNfQkFTRSksIFVMKENPTkZJR19WRUNUT1JTX0JBU0UpICsKKwkJCQkoUEFHRV9TSVpFKSksCisJCQlNTEsoRklYQUREUl9TVEFSVCwgRklYQUREUl9UT1ApLAorI2lmZGVmIENPTkZJR19NTVUKKwkJCU1MTShDT05TSVNURU5UX0JBU0UsIENPTlNJU1RFTlRfRU5EKSwKKyNlbmRpZgorCQkJTUxNKFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5EKSwKKwkJCU1MTShQQUdFX09GRlNFVCwgKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkpLAorI2lmZGVmIENPTkZJR19ISUdITUVNCisJCQlNTE0oUEtNQVBfQkFTRSwgKFBLTUFQX0JBU0UpICsgKExBU1RfUEtNQVApICoKKwkJCQkoUEFHRV9TSVpFKSksCisjZW5kaWYKKwkJCU1MTShNT0RVTEVTX1ZBRERSLCBNT0RVTEVTX0VORCksCisKKwkJCU1MS19ST1VORFVQKF9faW5pdF9iZWdpbiwgX19pbml0X2VuZCksCisJCQlNTEtfUk9VTkRVUChfdGV4dCwgX2V0ZXh0KSwKKwkJCU1MS19ST1VORFVQKF9kYXRhLCBfZWRhdGEpKTsKKworI3VuZGVmIE1MSworI3VuZGVmIE1MTQorI3VuZGVmIE1MS19ST1VORFVQCisKKwkvKgorCSAqIENoZWNrIGJvdW5kYXJpZXMgdHdpY2U6IFNvbWUgZnVuZGFtZW50YWwgaW5jb25zaXN0ZW5jaWVzIGNhbgorCSAqIGJlIGRldGVjdGVkIGF0IGJ1aWxkIHRpbWUgYWxyZWFkeS4KKwkgKi8KKyNpZmRlZiBDT05GSUdfTU1VCisJQlVJTERfQlVHX09OKFZNQUxMT0NfRU5ECQkJPiBDT05TSVNURU5UX0JBU0UpOworCUJVR19PTihWTUFMTE9DX0VORAkJCQk+IENPTlNJU1RFTlRfQkFTRSk7CisKKwlCVUlMRF9CVUdfT04oVEFTS19TSVpFCQkJCT4gTU9EVUxFU19WQUREUik7CisJQlVHX09OKFRBU0tfU0laRSAJCQkJPiBNT0RVTEVTX1ZBRERSKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwlCVUlMRF9CVUdfT04oUEtNQVBfQkFTRSArIExBU1RfUEtNQVAgKiBQQUdFX1NJWkUgPiBQQUdFX09GRlNFVCk7CisJQlVHX09OKFBLTUFQX0JBU0UgKyBMQVNUX1BLTUFQICogUEFHRV9TSVpFCT4gUEFHRV9PRkZTRVQpOworI2VuZGlmCisKIAlpZiAoUEFHRV9TSVpFID49IDE2Mzg0ICYmIG51bV9waHlzcGFnZXMgPD0gMTI4KSB7CiAJCWV4dGVybiBpbnQgc3lzY3RsX292ZXJjb21taXRfbWVtb3J5OwogCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW9yZW1hcC5jIGIvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCmluZGV4IDBhYjc1YzYuLjI4YzhiOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2lvcmVtYXAuYworKysgYi9hcmNoL2FybS9tbS9pb3JlbWFwLmMKQEAgLTEzOSw4ICsxMzksOCBAQAogICogd2hpY2ggcmVxdWlyZXMgdGhlIG5ldyBpb3JlbWFwJ2QgcmVnaW9uIHRvIGJlIHJlZmVyZW5jZWQsIHRoZSBDUFUgd2lsbAogICogcmVmZXJlbmNlIHRoZSBfb2xkXyByZWdpb24uCiAgKgotICogTm90ZSB0aGF0IGdldF92bV9hcmVhKCkgYWxsb2NhdGVzIGEgZ3VhcmQgNEsgcGFnZSwgc28gd2UgbmVlZCB0byBtYXNrCi0gKiB0aGUgc2l6ZSBiYWNrIHRvIDFNQiBhbGlnbmVkIG9yIHdlIHdpbGwgb3ZlcmZsb3cgaW4gdGhlIGxvb3AgYmVsb3cuCisgKiBOb3RlIHRoYXQgZ2V0X3ZtX2FyZWFfY2FsbGVyKCkgYWxsb2NhdGVzIGEgZ3VhcmQgNEsgcGFnZSwgc28gd2UgbmVlZCB0bworICogbWFzayB0aGUgc2l6ZSBiYWNrIHRvIDFNQiBhbGlnbmVkIG9yIHdlIHdpbGwgb3ZlcmZsb3cgaW4gdGhlIGxvb3AgYmVsb3cuCiAgKi8KIHN0YXRpYyB2b2lkIHVubWFwX2FyZWFfc2VjdGlvbnModW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CkBAIC0yNTQsMjIgKzI1NCw4IEBACiB9CiAjZW5kaWYKIAotCi0vKgotICogUmVtYXAgYW4gYXJiaXRyYXJ5IHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgaW50byB0aGUga2VybmVsIHZpcnR1YWwKLSAqIGFkZHJlc3Mgc3BhY2UuIE5lZWRlZCB3aGVuIHRoZSBrZXJuZWwgd2FudHMgdG8gYWNjZXNzIGhpZ2ggYWRkcmVzc2VzCi0gKiBkaXJlY3RseS4KLSAqCi0gKiBOT1RFISBXZSBuZWVkIHRvIGFsbG93IG5vbi1wYWdlLWFsaWduZWQgbWFwcGluZ3MgdG9vOiB3ZSB3aWxsIG9idmlvdXNseQotICogaGF2ZSB0byBjb252ZXJ0IHRoZW0gaW50byBhbiBvZmZzZXQgaW4gYSBwYWdlLWFsaWduZWQgbWFwcGluZywgYnV0IHRoZQotICogY2FsbGVyIHNob3VsZG4ndCBuZWVkIHRvIGtub3cgdGhhdCBzbWFsbCBkZXRhaWwuCi0gKgotICogJ2ZsYWdzJyBhcmUgdGhlIGV4dHJhIExfUFRFXyBmbGFncyB0aGF0IHlvdSB3YW50IHRvIHNwZWNpZnkgZm9yIHRoaXMKLSAqIG1hcHBpbmcuICBTZWUgPGFzbS9wZ3RhYmxlLmg+IGZvciBtb3JlIGluZm9ybWF0aW9uLgotICovCi12b2lkIF9faW9tZW0gKgotX19hcm1faW9yZW1hcF9wZm4odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKLQkJICB1bnNpZ25lZCBpbnQgbXR5cGUpCit2b2lkIF9faW9tZW0gKiBfX2FybV9pb3JlbWFwX3Bmbl9jYWxsZXIodW5zaWduZWQgbG9uZyBwZm4sCisJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgbXR5cGUsIHZvaWQgKmNhbGxlcikKIHsKIAljb25zdCBzdHJ1Y3QgbWVtX3R5cGUgKnR5cGU7CiAJaW50IGVycjsKQEAgLTI5MSw3ICsyNzcsNyBAQAogCSAqLwogCXNpemUgPSBQQUdFX0FMSUdOKG9mZnNldCArIHNpemUpOwogCi0gCWFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9JT1JFTUFQKTsKKwlhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIFZNX0lPUkVNQVAsIGNhbGxlcik7CiAgCWlmICghYXJlYSkKICAJCXJldHVybiBOVUxMOwogIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0+YWRkcjsKQEAgLTMxOCwxMCArMzA0LDkgQEAKIAlmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGFkZHIgKyBzaXplKTsKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSAob2Zmc2V0ICsgYWRkcik7CiB9Ci1FWFBPUlRfU1lNQk9MKF9fYXJtX2lvcmVtYXBfcGZuKTsKIAotdm9pZCBfX2lvbWVtICoKLV9fYXJtX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgbXR5cGUpCit2b2lkIF9faW9tZW0gKl9fYXJtX2lvcmVtYXBfY2FsbGVyKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCBzaXplX3Qgc2l6ZSwKKwl1bnNpZ25lZCBpbnQgbXR5cGUsIHZvaWQgKmNhbGxlcikKIHsKIAl1bnNpZ25lZCBsb25nIGxhc3RfYWRkcjsKICAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBwaHlzX2FkZHIgJiB+UEFHRV9NQVNLOwpAQCAtMzM0LDcgKzMxOSwzMyBAQAogCWlmICghc2l6ZSB8fCBsYXN0X2FkZHIgPCBwaHlzX2FkZHIpCiAJCXJldHVybiBOVUxMOwogCi0gCXJldHVybiBfX2FybV9pb3JlbWFwX3BmbihwZm4sIG9mZnNldCwgc2l6ZSwgbXR5cGUpOworCXJldHVybiBfX2FybV9pb3JlbWFwX3Bmbl9jYWxsZXIocGZuLCBvZmZzZXQsIHNpemUsIG10eXBlLAorCQkJY2FsbGVyKTsKK30KKworLyoKKyAqIFJlbWFwIGFuIGFyYml0cmFyeSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIGludG8gdGhlIGtlcm5lbCB2aXJ0dWFsCisgKiBhZGRyZXNzIHNwYWNlLiBOZWVkZWQgd2hlbiB0aGUga2VybmVsIHdhbnRzIHRvIGFjY2VzcyBoaWdoIGFkZHJlc3NlcworICogZGlyZWN0bHkuCisgKgorICogTk9URSEgV2UgbmVlZCB0byBhbGxvdyBub24tcGFnZS1hbGlnbmVkIG1hcHBpbmdzIHRvbzogd2Ugd2lsbCBvYnZpb3VzbHkKKyAqIGhhdmUgdG8gY29udmVydCB0aGVtIGludG8gYW4gb2Zmc2V0IGluIGEgcGFnZS1hbGlnbmVkIG1hcHBpbmcsIGJ1dCB0aGUKKyAqIGNhbGxlciBzaG91bGRuJ3QgbmVlZCB0byBrbm93IHRoYXQgc21hbGwgZGV0YWlsLgorICovCit2b2lkIF9faW9tZW0gKgorX19hcm1faW9yZW1hcF9wZm4odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJICB1bnNpZ25lZCBpbnQgbXR5cGUpCit7CisJcmV0dXJuIF9fYXJtX2lvcmVtYXBfcGZuX2NhbGxlcihwZm4sIG9mZnNldCwgc2l6ZSwgbXR5cGUsCisJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworfQorRVhQT1JUX1NZTUJPTChfX2FybV9pb3JlbWFwX3Bmbik7CisKK3ZvaWQgX19pb21lbSAqCitfX2FybV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IG10eXBlKQoreworCXJldHVybiBfX2FybV9pb3JlbWFwX2NhbGxlcihwaHlzX2FkZHIsIHNpemUsIG10eXBlLAorCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0woX19hcm1faW9yZW1hcCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tdS5jIGIvYXJjaC9hcm0vbW0vbW11LmMKaW5kZXggNzYxZmZlZC4uOWQ0ZGE2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW11LmMKKysrIGIvYXJjaC9hcm0vbW0vbW11LmMKQEAgLTEwMCwxOCArMTAwLDE3IEBACiAgKiB3cml0ZWJ1ZmZlciB0byBiZSB0dXJuZWQgb2ZmLiAgKE5vdGU6IHRoZSB3cml0ZQogICogYnVmZmVyIHNob3VsZCBub3QgYmUgb24gYW5kIHRoZSBjYWNoZSBvZmYpLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfY2FjaGVwb2xpY3koY2hhciAqKnApCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9jYWNoZXBvbGljeShjaGFyICpwKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2FjaGVfcG9saWNpZXMpOyBpKyspIHsKIAkJaW50IGxlbiA9IHN0cmxlbihjYWNoZV9wb2xpY2llc1tpXS5wb2xpY3kpOwogCi0JCWlmIChtZW1jbXAoKnAsIGNhY2hlX3BvbGljaWVzW2ldLnBvbGljeSwgbGVuKSA9PSAwKSB7CisJCWlmIChtZW1jbXAocCwgY2FjaGVfcG9saWNpZXNbaV0ucG9saWN5LCBsZW4pID09IDApIHsKIAkJCWNhY2hlcG9saWN5ID0gaTsKIAkJCWNyX2FsaWdubWVudCAmPSB+Y2FjaGVfcG9saWNpZXNbaV0uY3JfbWFzazsKIAkJCWNyX25vX2FsaWdubWVudCAmPSB+Y2FjaGVfcG9saWNpZXNbaV0uY3JfbWFzazsKLQkJCSpwICs9IGxlbjsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTMwLDM2ICsxMjksMzcgQEAKIAl9CiAJZmx1c2hfY2FjaGVfYWxsKCk7CiAJc2V0X2NyKGNyX2FsaWdubWVudCk7CisJcmV0dXJuIDA7CiB9Ci1fX2Vhcmx5X3BhcmFtKCJjYWNoZXBvbGljeT0iLCBlYXJseV9jYWNoZXBvbGljeSk7CitlYXJseV9wYXJhbSgiY2FjaGVwb2xpY3kiLCBlYXJseV9jYWNoZXBvbGljeSk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9ub2NhY2hlKGNoYXIgKipfX3VudXNlZCkKK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X25vY2FjaGUoY2hhciAqX191bnVzZWQpCiB7CiAJY2hhciAqcCA9ICJidWZmZXJlZCI7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAibm9jYWNoZSBpcyBkZXByZWNhdGVkOyB1c2UgY2FjaGVwb2xpY3k9JXNcbiIsIHApOwotCWVhcmx5X2NhY2hlcG9saWN5KCZwKTsKKwllYXJseV9jYWNoZXBvbGljeShwKTsKKwlyZXR1cm4gMDsKIH0KLV9fZWFybHlfcGFyYW0oIm5vY2FjaGUiLCBlYXJseV9ub2NhY2hlKTsKK2Vhcmx5X3BhcmFtKCJub2NhY2hlIiwgZWFybHlfbm9jYWNoZSk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9ub3dyaXRlKGNoYXIgKipfX3VudXNlZCkKK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X25vd3JpdGUoY2hhciAqX191bnVzZWQpCiB7CiAJY2hhciAqcCA9ICJ1bmNhY2hlZCI7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAibm93YiBpcyBkZXByZWNhdGVkOyB1c2UgY2FjaGVwb2xpY3k9JXNcbiIsIHApOwotCWVhcmx5X2NhY2hlcG9saWN5KCZwKTsKKwllYXJseV9jYWNoZXBvbGljeShwKTsKKwlyZXR1cm4gMDsKIH0KLV9fZWFybHlfcGFyYW0oIm5vd2IiLCBlYXJseV9ub3dyaXRlKTsKK2Vhcmx5X3BhcmFtKCJub3diIiwgZWFybHlfbm93cml0ZSk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9lY2MoY2hhciAqKnApCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9lY2MoY2hhciAqcCkKIHsKLQlpZiAobWVtY21wKCpwLCAib24iLCAyKSA9PSAwKSB7CisJaWYgKG1lbWNtcChwLCAib24iLCAyKSA9PSAwKQogCQllY2NfbWFzayA9IFBNRF9QUk9URUNUSU9OOwotCQkqcCArPSAyOwotCX0gZWxzZSBpZiAobWVtY21wKCpwLCAib2ZmIiwgMykgPT0gMCkgeworCWVsc2UgaWYgKG1lbWNtcChwLCAib2ZmIiwgMykgPT0gMCkKIAkJZWNjX21hc2sgPSAwOwotCQkqcCArPSAzOwotCX0KKwlyZXR1cm4gMDsKIH0KLV9fZWFybHlfcGFyYW0oImVjYz0iLCBlYXJseV9lY2MpOworZWFybHlfcGFyYW0oImVjYyIsIGVhcmx5X2VjYyk7CiAKIHN0YXRpYyBpbnQgX19pbml0IG5vYWxpZ25fc2V0dXAoY2hhciAqX191bnVzZWQpCiB7CkBAIC02NzAsOSArNjcwLDkgQEAKICAqIGJ5dGVzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGluY3JlYXNlIChvciBkZWNyZWFzZSkgdGhlIHZtYWxsb2MKICAqIGFyZWEgLSB0aGUgZGVmYXVsdCBpcyAxMjhtLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfdm1hbGxvYyhjaGFyICoqYXJnKQorc3RhdGljIGludCBfX2luaXQgZWFybHlfdm1hbGxvYyhjaGFyICphcmcpCiB7Ci0Jdm1hbGxvY19yZXNlcnZlID0gbWVtcGFyc2UoKmFyZywgYXJnKTsKKwl2bWFsbG9jX3Jlc2VydmUgPSBtZW1wYXJzZShhcmcsIE5VTEwpOwogCiAJaWYgKHZtYWxsb2NfcmVzZXJ2ZSA8IFNaXzE2TSkgewogCQl2bWFsbG9jX3Jlc2VydmUgPSBTWl8xNk07CkBAIC02ODcsOCArNjg3LDkgQEAKIAkJCSJ2bWFsbG9jIGFyZWEgaXMgdG9vIGJpZywgbGltaXRpbmcgdG8gJWx1TUJcbiIsCiAJCQl2bWFsbG9jX3Jlc2VydmUgPj4gMjApOwogCX0KKwlyZXR1cm4gMDsKIH0KLV9fZWFybHlfcGFyYW0oInZtYWxsb2M9IiwgZWFybHlfdm1hbGxvYyk7CitlYXJseV9wYXJhbSgidm1hbGxvYyIsIGVhcmx5X3ZtYWxsb2MpOwogCiAjZGVmaW5lIFZNQUxMT0NfTUlOCSh2b2lkICopKFZNQUxMT0NfRU5EIC0gdm1hbGxvY19yZXNlcnZlKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9ub21tdS5jIGIvYXJjaC9hcm0vbW0vbm9tbXUuYwppbmRleCAzNzRhODMxLi45YmZlYjZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9ub21tdS5jCisrKyBiL2FyY2gvYXJtL21tL25vbW11LmMKQEAgLTc0LDYgKzc0LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKF9fYXJtX2lvcmVtYXBfcGZuKTsKIAordm9pZCBfX2lvbWVtICpfX2FybV9pb3JlbWFwX3Bmbl9jYWxsZXIodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJICAgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBtdHlwZSwgdm9pZCAqY2FsbGVyKQoreworCXJldHVybiBfX2FybV9pb3JlbWFwX3BmbihwZm4sIG9mZnNldCwgc2l6ZSwgbXR5cGUpOworfQorCiB2b2lkIF9faW9tZW0gKl9fYXJtX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHNpemVfdCBzaXplLAogCQkJICAgIHVuc2lnbmVkIGludCBtdHlwZSkKIHsKQEAgLTgxLDYgKzg3LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKF9fYXJtX2lvcmVtYXApOwogCit2b2lkIF9faW9tZW0gKl9fYXJtX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHNpemVfdCBzaXplLAorCQkJICAgIHVuc2lnbmVkIGludCBtdHlwZSwgdm9pZCAqY2FsbGVyKQoreworCXJldHVybiBfX2FybV9pb3JlbWFwKHBoeXNfYWRkciwgc2l6ZSwgbXR5cGUpOworfQorCiB2b2lkIF9faW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCmluZGV4IDgwMTJlMjQuLjcyNTA3YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCkBAIC0yNjUsNyArMjY1LDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm0xMDIwX2RtYV9pbnZfcmFuZ2UpCithcm0xMDIwX2RtYV9pbnZfcmFuZ2U6CiAJbW92CWlwLCAjMAogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCiAJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQpAQCAtMjk1LDcgKzI5NSw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkoYXJtMTAyMF9kbWFfY2xlYW5fcmFuZ2UpCithcm0xMDIwX2RtYV9jbGVhbl9yYW5nZToKIAltb3YJaXAsICMwCiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKIAliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQpAQCAtMzMwLDYgKzMzMCwzMCBAQAogCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm0xMDIwX2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJYXJtMTAyMF9kbWFfY2xlYW5fcmFuZ2UKKwliY3MJYXJtMTAyMF9kbWFfaW52X3JhbmdlCisJYglhcm0xMDIwX2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyhhcm0xMDIwX2RtYV9tYXBfYXJlYSkKKworLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm0xMDIwX2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoYXJtMTAyMF9kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoYXJtMTAyMF9jYWNoZV9mbnMpCiAJLmxvbmcJYXJtMTAyMF9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCS5sb25nCWFybTEwMjBfZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTMzNyw4ICszNjEsOCBAQAogCS5sb25nCWFybTEwMjBfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCWFybTEwMjBfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCWFybTEwMjBfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWFybTEwMjBfZG1hX2ludl9yYW5nZQotCS5sb25nCWFybTEwMjBfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJYXJtMTAyMF9kbWFfbWFwX2FyZWEKKwkubG9uZwlhcm0xMDIwX2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJYXJtMTAyMF9kbWFfZmx1c2hfcmFuZ2UKIAogCS5hbGlnbgk1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKaW5kZXggNDFmZTI1ZC4uZDI3ODI5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUwpAQCAtMjU4LDcgKzI1OCw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkoYXJtMTAyMGVfZG1hX2ludl9yYW5nZSkKK2FybTEwMjBlX2RtYV9pbnZfcmFuZ2U6CiAJbW92CWlwLCAjMAogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCiAJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQpAQCAtMjg0LDcgKzI4NCw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkoYXJtMTAyMGVfZG1hX2NsZWFuX3JhbmdlKQorYXJtMTAyMGVfZG1hX2NsZWFuX3JhbmdlOgogCW1vdglpcCwgIzAKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCkBAIC0zMTYsNiArMzE2LDMwIEBACiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltb3YJcGMsIGxyCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTEwMjBlX2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJYXJtMTAyMGVfZG1hX2NsZWFuX3JhbmdlCisJYmNzCWFybTEwMjBlX2RtYV9pbnZfcmFuZ2UKKwliCWFybTEwMjBlX2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyhhcm0xMDIwZV9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtMTAyMGVfZG1hX3VubWFwX2FyZWEpCisJbW92CXBjLCBscgorRU5EUFJPQyhhcm0xMDIwZV9kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoYXJtMTAyMGVfY2FjaGVfZm5zKQogCS5sb25nCWFybTEwMjBlX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJLmxvbmcJYXJtMTAyMGVfZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTMyMyw4ICszNDcsOCBAQAogCS5sb25nCWFybTEwMjBlX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm0xMDIwZV9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJYXJtMTAyMGVfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWFybTEwMjBlX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlhcm0xMDIwZV9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm0xMDIwZV9kbWFfbWFwX2FyZWEKKwkubG9uZwlhcm0xMDIwZV9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWFybTEwMjBlX2RtYV9mbHVzaF9yYW5nZQogCiAJLmFsaWduCTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKaW5kZXggMjBhNWIxYi4uY2UxM2U0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTEwMjJfZG1hX2ludl9yYW5nZSkKK2FybTEwMjJfZG1hX2ludl9yYW5nZToKIAltb3YJaXAsICMwCiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCkBAIC0yNzMsNyArMjczLDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm0xMDIyX2RtYV9jbGVhbl9yYW5nZSkKK2FybTEwMjJfZG1hX2NsZWFuX3JhbmdlOgogCW1vdglpcCwgIzAKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCkBAIC0zMDUsNiArMzA1LDMwIEBACiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltb3YJcGMsIGxyCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTEwMjJfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlhcm0xMDIyX2RtYV9jbGVhbl9yYW5nZQorCWJjcwlhcm0xMDIyX2RtYV9pbnZfcmFuZ2UKKwliCWFybTEwMjJfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGFybTEwMjJfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTEwMjJfZG1hX3VubWFwX2FyZWEpCisJbW92CXBjLCBscgorRU5EUFJPQyhhcm0xMDIyX2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShhcm0xMDIyX2NhY2hlX2ZucykKIAkubG9uZwlhcm0xMDIyX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJLmxvbmcJYXJtMTAyMl9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMzEyLDggKzMzNiw4IEBACiAJLmxvbmcJYXJtMTAyMl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtMTAyMl9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJYXJtMTAyMl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJYXJtMTAyMl9kbWFfaW52X3JhbmdlCi0JLmxvbmcJYXJtMTAyMl9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm0xMDIyX2RtYV9tYXBfYXJlYQorCS5sb25nCWFybTEwMjJfZG1hX3VubWFwX2FyZWEKIAkubG9uZwlhcm0xMDIyX2RtYV9mbHVzaF9yYW5nZQogCiAJLmFsaWduCTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKaW5kZXggOTZhZWRiMS4uNjM2NjcyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKQEAgLTI0MSw3ICsyNDEsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTEwMjZfZG1hX2ludl9yYW5nZSkKK2FybTEwMjZfZG1hX2ludl9yYW5nZToKIAltb3YJaXAsICMwCiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCkBAIC0yNjcsNyArMjY3LDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm0xMDI2X2RtYV9jbGVhbl9yYW5nZSkKK2FybTEwMjZfZG1hX2NsZWFuX3JhbmdlOgogCW1vdglpcCwgIzAKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCkBAIC0yOTksNiArMjk5LDMwIEBACiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltb3YJcGMsIGxyCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTEwMjZfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlhcm0xMDI2X2RtYV9jbGVhbl9yYW5nZQorCWJjcwlhcm0xMDI2X2RtYV9pbnZfcmFuZ2UKKwliCWFybTEwMjZfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGFybTEwMjZfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTEwMjZfZG1hX3VubWFwX2FyZWEpCisJbW92CXBjLCBscgorRU5EUFJPQyhhcm0xMDI2X2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShhcm0xMDI2X2NhY2hlX2ZucykKIAkubG9uZwlhcm0xMDI2X2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJLmxvbmcJYXJtMTAyNl9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMzA2LDggKzMzMCw4IEBACiAJLmxvbmcJYXJtMTAyNl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtMTAyNl9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJYXJtMTAyNl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJYXJtMTAyNl9kbWFfaW52X3JhbmdlCi0JLmxvbmcJYXJtMTAyNl9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm0xMDI2X2RtYV9tYXBfYXJlYQorCS5sb25nCWFybTEwMjZfZG1hX3VubWFwX2FyZWEKIAkubG9uZwlhcm0xMDI2X2RtYV9mbHVzaF9yYW5nZQogCiAJLmFsaWduCTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCmluZGV4IDNmOWNkM2QuLjc5NWRjNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUwpAQCAtNDEsNyArNDEsNyBAQAogRU5UUlkoY3B1X2FybTdfZGF0YV9hYm9ydCkKIAltcmMJcDE1LCAwLCByMSwgYzUsIGMwLCAwCQlAIGdldCBGU1IKIAltcmMJcDE1LCAwLCByMCwgYzYsIGMwLCAwCQlAIGdldCBGQVIKLQlsZHIJcjgsIFtyMF0JCQlAIHJlYWQgYXJtIGluc3RydWN0aW9uCisJbGRyCXI4LCBbcjJdCQkJQCByZWFkIGFybSBpbnN0cnVjdGlvbgogCXRzdAlyOCwgIzEgPDwgMjAJCQlAIEwgPSAwIC0+IHdyaXRlPwogCW9ycmVxCXIxLCByMSwgIzEgPDwgMTEJCUAgeWVzLgogCWFuZAlyNywgcjgsICMxNSA8PCAyNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKaW5kZXggNDcxNjY5ZS4uOGJlODE5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCkBAIC0yMzksNyArMjM5LDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm05MjBfZG1hX2ludl9yYW5nZSkKK2FybTkyMF9kbWFfaW52X3JhbmdlOgogCXRzdAlyMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIAliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQpAQCAtMjYyLDcgKzI2Miw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkoYXJtOTIwX2RtYV9jbGVhbl9yYW5nZSkKK2FybTkyMF9kbWFfY2xlYW5fcmFuZ2U6CiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCkBAIC0yODgsNiArMjg4LDMwIEBACiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltb3YJcGMsIGxyCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTkyMF9kbWFfbWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwljbXAJcjIsICNETUFfVE9fREVWSUNFCisJYmVxCWFybTkyMF9kbWFfY2xlYW5fcmFuZ2UKKwliY3MJYXJtOTIwX2RtYV9pbnZfcmFuZ2UKKwliCWFybTkyMF9kbWFfZmx1c2hfcmFuZ2UKK0VORFBST0MoYXJtOTIwX2RtYV9tYXBfYXJlYSkKKworLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm05MjBfZG1hX3VubWFwX2FyZWEpCisJbW92CXBjLCBscgorRU5EUFJPQyhhcm05MjBfZG1hX3VubWFwX2FyZWEpCisKIEVOVFJZKGFybTkyMF9jYWNoZV9mbnMpCiAJLmxvbmcJYXJtOTIwX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJLmxvbmcJYXJtOTIwX2ZsdXNoX3VzZXJfY2FjaGVfYWxsCkBAIC0yOTUsOCArMzE5LDggQEAKIAkubG9uZwlhcm05MjBfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCWFybTkyMF9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJYXJtOTIwX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKLQkubG9uZwlhcm05MjBfZG1hX2ludl9yYW5nZQotCS5sb25nCWFybTkyMF9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm05MjBfZG1hX21hcF9hcmVhCisJLmxvbmcJYXJtOTIwX2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJYXJtOTIwX2RtYV9mbHVzaF9yYW5nZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCmluZGV4IGVlMTExYjAuLmMwZmY4ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwpAQCAtMjQxLDcgKzI0MSw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkoYXJtOTIyX2RtYV9pbnZfcmFuZ2UpCithcm05MjJfZG1hX2ludl9yYW5nZToKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIAltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTI2NCw3ICsyNjQsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTkyMl9kbWFfY2xlYW5fcmFuZ2UpCithcm05MjJfZG1hX2NsZWFuX3JhbmdlOgogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQpAQCAtMjkwLDYgKzI5MCwzMCBAQAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm05MjJfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlhcm05MjJfZG1hX2NsZWFuX3JhbmdlCisJYmNzCWFybTkyMl9kbWFfaW52X3JhbmdlCisJYglhcm05MjJfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGFybTkyMl9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtOTIyX2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoYXJtOTIyX2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShhcm05MjJfY2FjaGVfZm5zKQogCS5sb25nCWFybTkyMl9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCS5sb25nCWFybTkyMl9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMjk3LDggKzMyMSw4IEBACiAJLmxvbmcJYXJtOTIyX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm05MjJfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCWFybTkyMl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJYXJtOTIyX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlhcm05MjJfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJYXJtOTIyX2RtYV9tYXBfYXJlYQorCS5sb25nCWFybTkyMl9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWFybTkyMl9kbWFfZmx1c2hfcmFuZ2UKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUwppbmRleCA4ZGViNWJkLi4zYzZjZmZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKQEAgLTI4Myw3ICsyODMsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTkyNV9kbWFfaW52X3JhbmdlKQorYXJtOTI1X2RtYV9pbnZfcmFuZ2U6CiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAogCXRzdAlyMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIAltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTMwOCw3ICszMDgsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTkyNV9kbWFfY2xlYW5fcmFuZ2UpCithcm05MjVfZG1hX2NsZWFuX3JhbmdlOgogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKIAliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQpAQCAtMzQxLDYgKzM0MSwzMCBAQAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm05MjVfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlhcm05MjVfZG1hX2NsZWFuX3JhbmdlCisJYmNzCWFybTkyNV9kbWFfaW52X3JhbmdlCisJYglhcm05MjVfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGFybTkyNV9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtOTI1X2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoYXJtOTI1X2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShhcm05MjVfY2FjaGVfZm5zKQogCS5sb25nCWFybTkyNV9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCS5sb25nCWFybTkyNV9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMzQ4LDggKzM3Miw4IEBACiAJLmxvbmcJYXJtOTI1X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm05MjVfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCWFybTkyNV9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJYXJtOTI1X2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlhcm05MjVfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJYXJtOTI1X2RtYV9tYXBfYXJlYQorCS5sb25nCWFybTkyNV9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWFybTkyNV9kbWFfZmx1c2hfcmFuZ2UKIAogRU5UUlkoY3B1X2FybTkyNV9kY2FjaGVfY2xlYW5fYXJlYSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCmluZGV4IDY0ZGI2ZTIuLjc1YjcwN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkoYXJtOTI2X2RtYV9pbnZfcmFuZ2UpCithcm05MjZfZG1hX2ludl9yYW5nZToKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICiAJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQpAQCAtMjcxLDcgKzI3MSw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkoYXJtOTI2X2RtYV9jbGVhbl9yYW5nZSkKK2FybTkyNl9kbWFfY2xlYW5fcmFuZ2U6CiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CkBAIC0zMDQsNiArMzA0LDMwIEBACiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltb3YJcGMsIGxyCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTkyNl9kbWFfbWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwljbXAJcjIsICNETUFfVE9fREVWSUNFCisJYmVxCWFybTkyNl9kbWFfY2xlYW5fcmFuZ2UKKwliY3MJYXJtOTI2X2RtYV9pbnZfcmFuZ2UKKwliCWFybTkyNl9kbWFfZmx1c2hfcmFuZ2UKK0VORFBST0MoYXJtOTI2X2RtYV9tYXBfYXJlYSkKKworLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm05MjZfZG1hX3VubWFwX2FyZWEpCisJbW92CXBjLCBscgorRU5EUFJPQyhhcm05MjZfZG1hX3VubWFwX2FyZWEpCisKIEVOVFJZKGFybTkyNl9jYWNoZV9mbnMpCiAJLmxvbmcJYXJtOTI2X2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJLmxvbmcJYXJtOTI2X2ZsdXNoX3VzZXJfY2FjaGVfYWxsCkBAIC0zMTEsOCArMzM1LDggQEAKIAkubG9uZwlhcm05MjZfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCWFybTkyNl9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJYXJtOTI2X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKLQkubG9uZwlhcm05MjZfZG1hX2ludl9yYW5nZQotCS5sb25nCWFybTkyNl9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm05MjZfZG1hX21hcF9hcmVhCisJLmxvbmcJYXJtOTI2X2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJYXJtOTI2X2RtYV9mbHVzaF9yYW5nZQogCiBFTlRSWShjcHVfYXJtOTI2X2RjYWNoZV9jbGVhbl9hcmVhKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMKaW5kZXggODE5NmI5Zi4uMWFmMTY1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TCkBAIC0xNzEsNyArMTcxLDcgQEAKICAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcwogICovCi1FTlRSWShhcm05NDBfZG1hX2ludl9yYW5nZSkKK2FybTk0MF9kbWFfaW52X3JhbmdlOgogCW1vdglpcCwgIzAKIAltb3YJcjEsICMoQ0FDSEVfRFNFR01FTlRTIC0gMSkgPDwgNAlAIDQgc2VnbWVudHMKIDE6CW9ycglyMywgcjEsICMoQ0FDSEVfREVOVFJJRVMgLSAxKSA8PCAyNiBAIDY0IGVudHJpZXMKQEAgLTE5Miw3ICsxOTIsNyBAQAogICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcwogICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCiAgKi8KLUVOVFJZKGFybTk0MF9kbWFfY2xlYW5fcmFuZ2UpCithcm05NDBfZG1hX2NsZWFuX3JhbmdlOgogRU5UUlkoY3B1X2FybTk0MF9kY2FjaGVfY2xlYW5fYXJlYSkKIAltb3YJaXAsICMwCiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSApAQCAtMjMzLDYgKzIzMywzMCBAQAogCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm05NDBfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlhcm05NDBfZG1hX2NsZWFuX3JhbmdlCisJYmNzCWFybTk0MF9kbWFfaW52X3JhbmdlCisJYglhcm05NDBfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGFybTk0MF9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtOTQwX2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoYXJtOTQwX2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShhcm05NDBfY2FjaGVfZm5zKQogCS5sb25nCWFybTk0MF9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCS5sb25nCWFybTk0MF9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMjQwLDggKzI2NCw4IEBACiAJLmxvbmcJYXJtOTQwX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm05NDBfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCWFybTk0MF9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJYXJtOTQwX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlhcm05NDBfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJYXJtOTQwX2RtYV9tYXBfYXJlYQorCS5sb25nCWFybTk0MF9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWFybTk0MF9kbWFfZmx1c2hfcmFuZ2UKIAogCV9fSU5JVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMKaW5kZXggOWE5NTEyMy4uMTY2NGI2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCkBAIC0yMTUsNyArMjE1LDcgQEAKICAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcwogICogKHNhbWUgYXMgYXJtOTI2KQogICovCi1FTlRSWShhcm05NDZfZG1hX2ludl9yYW5nZSkKK2FybTk0Nl9kbWFfaW52X3JhbmdlOgogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CkBAIC0yNDAsNyArMjQwLDcgQEAKICAqCiAgKiAoc2FtZSBhcyBhcm05MjYpCiAgKi8KLUVOVFJZKGFybTk0Nl9kbWFfY2xlYW5fcmFuZ2UpCithcm05NDZfZG1hX2NsZWFuX3JhbmdlOgogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKIAliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQpAQCAtMjc1LDYgKzI3NSwzMCBAQAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm05NDZfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlhcm05NDZfZG1hX2NsZWFuX3JhbmdlCisJYmNzCWFybTk0Nl9kbWFfaW52X3JhbmdlCisJYglhcm05NDZfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGFybTk0Nl9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtOTQ2X2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoYXJtOTQ2X2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShhcm05NDZfY2FjaGVfZm5zKQogCS5sb25nCWFybTk0Nl9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCS5sb25nCWFybTk0Nl9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMjgyLDggKzMwNiw4IEBACiAJLmxvbmcJYXJtOTQ2X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm05NDZfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCWFybTk0Nl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJYXJtOTQ2X2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlhcm05NDZfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJYXJtOTQ2X2RtYV9tYXBfYXJlYQorCS5sb25nCWFybTk0Nl9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWFybTk0Nl9kbWFfZmx1c2hfcmFuZ2UKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMgYi9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMKaW5kZXggZGJjMzkzOC4uNTNlNjMyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUwpAQCAtMjc0LDcgKzI3NCw3IEBACiAgKiAoc2FtZSBhcyB2NHdiKQogICovCiAJLmFsaWduCTUKLUVOVFJZKGZlcm9jZW9uX2RtYV9pbnZfcmFuZ2UpCitmZXJvY2Vvbl9kbWFfaW52X3JhbmdlOgogCXRzdAlyMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIAliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQpAQCAtMjg4LDcgKzI4OCw3IEBACiAJbW92CXBjLCBscgogCiAJLmFsaWduCTUKLUVOVFJZKGZlcm9jZW9uX3JhbmdlX2RtYV9pbnZfcmFuZ2UpCitmZXJvY2Vvbl9yYW5nZV9kbWFfaW52X3JhbmdlOgogCW1ycwlyMiwgY3BzcgogCXRzdAlyMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIAltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTMxNCw3ICszMTQsNyBAQAogICogKHNhbWUgYXMgdjR3YikKICAqLwogCS5hbGlnbgk1Ci1FTlRSWShmZXJvY2Vvbl9kbWFfY2xlYW5fcmFuZ2UpCitmZXJvY2Vvbl9kbWFfY2xlYW5fcmFuZ2U6CiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCkBAIC0zMjQsNyArMzI0LDcgQEAKIAltb3YJcGMsIGxyCiAKIAkuYWxpZ24JNQotRU5UUlkoZmVyb2Nlb25fcmFuZ2VfZG1hX2NsZWFuX3JhbmdlKQorZmVyb2Nlb25fcmFuZ2VfZG1hX2NsZWFuX3JhbmdlOgogCW1ycwlyMiwgY3BzcgogCWNtcAlyMSwgcjAKIAlzdWJuZQlyMSwgcjEsICMxCQkJQCB0b3AgYWRkcmVzcyBpcyBpbmNsdXNpdmUKQEAgLTM2Nyw2ICszNjcsNDQgQEAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1vdglwYywgbHIKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoZmVyb2Nlb25fZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlmZXJvY2Vvbl9kbWFfY2xlYW5fcmFuZ2UKKwliY3MJZmVyb2Nlb25fZG1hX2ludl9yYW5nZQorCWIJZmVyb2Nlb25fZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGZlcm9jZW9uX2RtYV9tYXBfYXJlYSkKKworLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoZmVyb2Nlb25fcmFuZ2VfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlmZXJvY2Vvbl9yYW5nZV9kbWFfY2xlYW5fcmFuZ2UKKwliY3MJZmVyb2Nlb25fcmFuZ2VfZG1hX2ludl9yYW5nZQorCWIJZmVyb2Nlb25fcmFuZ2VfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGZlcm9jZW9uX3JhbmdlX2RtYV9tYXBfYXJlYSkKKworLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShmZXJvY2Vvbl9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKGZlcm9jZW9uX2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShmZXJvY2Vvbl9jYWNoZV9mbnMpCiAJLmxvbmcJZmVyb2Nlb25fZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAkubG9uZwlmZXJvY2Vvbl9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMzc0LDggKzQxMiw4IEBACiAJLmxvbmcJZmVyb2Nlb25fY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCWZlcm9jZW9uX2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwlmZXJvY2Vvbl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJZmVyb2Nlb25fZG1hX2ludl9yYW5nZQotCS5sb25nCWZlcm9jZW9uX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCWZlcm9jZW9uX2RtYV9tYXBfYXJlYQorCS5sb25nCWZlcm9jZW9uX2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJZmVyb2Nlb25fZG1hX2ZsdXNoX3JhbmdlCiAKIEVOVFJZKGZlcm9jZW9uX3JhbmdlX2NhY2hlX2ZucykKQEAgLTM4NSw4ICs0MjMsOCBAQAogCS5sb25nCWZlcm9jZW9uX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlmZXJvY2Vvbl9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJZmVyb2Nlb25fcmFuZ2VfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWZlcm9jZW9uX3JhbmdlX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlmZXJvY2Vvbl9yYW5nZV9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlmZXJvY2Vvbl9yYW5nZV9kbWFfbWFwX2FyZWEKKwkubG9uZwlmZXJvY2Vvbl9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWZlcm9jZW9uX3JhbmdlX2RtYV9mbHVzaF9yYW5nZQogCiAJLmFsaWduCTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMgYi9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCmluZGV4IDk2NzRkMzYuLmNhYTMxMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUwpAQCAtMjE4LDcgKzIxOCw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkobW9oYXdrX2RtYV9pbnZfcmFuZ2UpCittb2hhd2tfZG1hX2ludl9yYW5nZToKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CiAJdHN0CXIxLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQpAQCAtMjQxLDcgKzI0MSw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkobW9oYXdrX2RtYV9jbGVhbl9yYW5nZSkKK21vaGF3a19kbWFfY2xlYW5fcmFuZ2U6CiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCkBAIC0yNjgsNiArMjY4LDMwIEBACiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltb3YJcGMsIGxyCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKG1vaGF3a19kbWFfbWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwljbXAJcjIsICNETUFfVE9fREVWSUNFCisJYmVxCW1vaGF3a19kbWFfY2xlYW5fcmFuZ2UKKwliY3MJbW9oYXdrX2RtYV9pbnZfcmFuZ2UKKwliCW1vaGF3a19kbWFfZmx1c2hfcmFuZ2UKK0VORFBST0MobW9oYXdrX2RtYV9tYXBfYXJlYSkKKworLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShtb2hhd2tfZG1hX3VubWFwX2FyZWEpCisJbW92CXBjLCBscgorRU5EUFJPQyhtb2hhd2tfZG1hX3VubWFwX2FyZWEpCisKIEVOVFJZKG1vaGF3a19jYWNoZV9mbnMpCiAJLmxvbmcJbW9oYXdrX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJLmxvbmcJbW9oYXdrX2ZsdXNoX3VzZXJfY2FjaGVfYWxsCkBAIC0yNzUsOCArMjk5LDggQEAKIAkubG9uZwltb2hhd2tfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCW1vaGF3a19jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJbW9oYXdrX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKLQkubG9uZwltb2hhd2tfZG1hX2ludl9yYW5nZQotCS5sb25nCW1vaGF3a19kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwltb2hhd2tfZG1hX21hcF9hcmVhCisJLmxvbmcJbW9oYXdrX2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJbW9oYXdrX2RtYV9mbHVzaF9yYW5nZQogCiBFTlRSWShjcHVfbW9oYXdrX2RjYWNoZV9jbGVhbl9hcmVhKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwppbmRleCA4ZTRmNmRjLi5lNTc5N2YxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcwogICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcwogICovCi1FTlRSWSh4c2MzX2RtYV9pbnZfcmFuZ2UpCit4c2MzX2RtYV9pbnZfcmFuZ2U6CiAJdHN0CXIwLCAjQ0FDSEVMSU5FU0laRSAtIDEKIAliaWMJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRSAtIDEKIAltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEwxIEQgbGluZQpAQCAtMjc4LDcgKzI3OCw3IEBACiAgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcwogICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcwogICovCi1FTlRSWSh4c2MzX2RtYV9jbGVhbl9yYW5nZSkKK3hzYzNfZG1hX2NsZWFuX3JhbmdlOgogCWJpYwlyMCwgcjAsICNDQUNIRUxJTkVTSVpFIC0gMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gTDEgRCBsaW5lCiAJYWRkCXIwLCByMCwgI0NBQ0hFTElORVNJWkUKQEAgLTMwNCw2ICszMDQsMzAgQEAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkYXRhIHdyaXRlIGJhcnJpZXIKIAltb3YJcGMsIGxyCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKHhzYzNfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQl4c2MzX2RtYV9jbGVhbl9yYW5nZQorCWJjcwl4c2MzX2RtYV9pbnZfcmFuZ2UKKwliCXhzYzNfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKHhzYzNfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKHhzYzNfZG1hX3VubWFwX2FyZWEpCisJbW92CXBjLCBscgorRU5EUFJPQyh4c2MzX2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWSh4c2MzX2NhY2hlX2ZucykKIAkubG9uZwl4c2MzX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJLmxvbmcJeHNjM19mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMzExLDggKzMzNSw4IEBACiAJLmxvbmcJeHNjM19jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJeHNjM19jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJeHNjM19mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJeHNjM19kbWFfaW52X3JhbmdlCi0JLmxvbmcJeHNjM19kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwl4c2MzX2RtYV9tYXBfYXJlYQorCS5sb25nCXhzYzNfZG1hX3VubWFwX2FyZWEKIAkubG9uZwl4c2MzX2RtYV9mbHVzaF9yYW5nZQogCiBFTlRSWShjcHVfeHNjM19kY2FjaGVfY2xlYW5fYXJlYSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCmluZGV4IDkzZGY0NzIuLjYzMDM3ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwpAQCAtMzE1LDcgKzMxNSw3IEBACiAgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcwogICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcwogICovCi1FTlRSWSh4c2NhbGVfZG1hX2ludl9yYW5nZSkKK3hzY2FsZV9kbWFfaW52X3JhbmdlOgogCXRzdAlyMCwgI0NBQ0hFTElORVNJWkUgLSAxCiAJYmljCXIwLCByMCwgI0NBQ0hFTElORVNJWkUgLSAxCiAJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CkBAIC0zMzYsNyArMzM2LDcgQEAKICAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCiAgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCiAgKi8KLUVOVFJZKHhzY2FsZV9kbWFfY2xlYW5fcmFuZ2UpCit4c2NhbGVfZG1hX2NsZWFuX3JhbmdlOgogCWJpYwlyMCwgcjAsICNDQUNIRUxJTkVTSVpFIC0gMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQogCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVTSVpFCkBAIC0zNjMsNiArMzYzLDQzIEBACiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgRHJhaW4gV3JpdGUgKCYgRmlsbCkgQnVmZmVyCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh4c2NhbGVfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQl4c2NhbGVfZG1hX2NsZWFuX3JhbmdlCisJYmNzCXhzY2FsZV9kbWFfaW52X3JhbmdlCisJYgl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKHhzY2FsZV9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKHhzY2FsZV9kbWFfYTBfbWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwl0ZXEJcjIsICNETUFfVE9fREVWSUNFCisJYmVxCXhzY2FsZV9kbWFfY2xlYW5fcmFuZ2UKKwliCXhzY2FsZV9kbWFfZmx1c2hfcmFuZ2UKK0VORFBST0MoeHNjc2FsZV9kbWFfYTBfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoeHNjYWxlX2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoeHNjYWxlX2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWSh4c2NhbGVfY2FjaGVfZm5zKQogCS5sb25nCXhzY2FsZV9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCS5sb25nCXhzY2FsZV9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMzcwLDggKzQwNyw4IEBACiAJLmxvbmcJeHNjYWxlX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwl4c2NhbGVfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCXhzY2FsZV9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJeHNjYWxlX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwl4c2NhbGVfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJeHNjYWxlX2RtYV9tYXBfYXJlYQorCS5sb25nCXhzY2FsZV9kbWFfdW5tYXBfYXJlYQogCS5sb25nCXhzY2FsZV9kbWFfZmx1c2hfcmFuZ2UKIAogLyoKQEAgLTM5NCw4ICs0MzEsOCBAQAogCS5sb25nCXhzY2FsZV9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJeHNjYWxlX2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwl4c2NhbGVfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCXhzY2FsZV9kbWFfZmx1c2hfcmFuZ2UKLQkubG9uZwl4c2NhbGVfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJeHNjYWxlX2RtYV9hMF9tYXBfYXJlYQorCS5sb25nCXhzY2FsZV9kbWFfdW5tYXBfYXJlYQogCS5sb25nCXhzY2FsZV9kbWFfZmx1c2hfcmFuZ2UKIAogRU5UUlkoY3B1X3hzY2FsZV9kY2FjaGVfY2xlYW5fYXJlYSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX2FybTExX2NvcmUuYyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX2FybTExX2NvcmUuYwppbmRleCBhZDgwNzUyLi5lZjNlMjY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9hcm0xMV9jb3JlLmMKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfYXJtMTFfY29yZS5jCkBAIC0xMzIsNyArMTMyLDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLWludCBhcm0xMV9yZXF1ZXN0X2ludGVycnVwdHMoaW50ICppcnFzLCBpbnQgbnIpCitpbnQgYXJtMTFfcmVxdWVzdF9pbnRlcnJ1cHRzKGNvbnN0IGludCAqaXJxcywgaW50IG5yKQogewogCXVuc2lnbmVkIGludCBpOwogCWludCByZXQgPSAwOwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBhcm0xMV9yZWxlYXNlX2ludGVycnVwdHMoaW50ICppcnFzLCBpbnQgbnIpCit2b2lkIGFybTExX3JlbGVhc2VfaW50ZXJydXB0cyhjb25zdCBpbnQgKmlycXMsIGludCBucikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfYXJtMTFfY29yZS5oIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfYXJtMTFfY29yZS5oCmluZGV4IDZmODUzOGUuLjE5MDJiOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX2FybTExX2NvcmUuaAorKysgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9hcm0xMV9jb3JlLmgKQEAgLTM5LDcgKzM5LDcgQEAKIGludCBhcm0xMV9zZXR1cF9wbXUodm9pZCk7CiBpbnQgYXJtMTFfc3RhcnRfcG11KHZvaWQpOwogaW50IGFybTExX3N0b3BfcG11KHZvaWQpOwotaW50IGFybTExX3JlcXVlc3RfaW50ZXJydXB0cyhpbnQgKiwgaW50KTsKLXZvaWQgYXJtMTFfcmVsZWFzZV9pbnRlcnJ1cHRzKGludCAqLCBpbnQpOworaW50IGFybTExX3JlcXVlc3RfaW50ZXJydXB0cyhjb25zdCBpbnQgKiwgaW50KTsKK3ZvaWQgYXJtMTFfcmVsZWFzZV9pbnRlcnJ1cHRzKGNvbnN0IGludCAqLCBpbnQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX21wY29yZS5jIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfbXBjb3JlLmMKaW5kZXggNGNlMGY5OC4uZjczY2U4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfbXBjb3JlLmMKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfbXBjb3JlLmMKQEAgLTMyLDYgKzMyLDcgQEAKIC8qICNkZWZpbmUgREVCVUcgKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtNDMsNiArNDQsNyBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLWViLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wbXUuaD4KIAogI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKICNpbmNsdWRlICJvcF9hcm1fbW9kZWwuaCIKQEAgLTU4LDYgKzYwLDcgQEAKICAqIEJpdG1hc2sgb2YgdXNlZCBTQ1UgY291bnRlcnMKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBzY3VfZW1fdXNlZDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11X2lycXMgKnBtdV9pcnFzOwogCiAvKgogICogMiBoZWxwZXIgZm5zIHRha2UgYSBjb3VudGVyIG51bWJlciBmcm9tIDAtNyAobm90IHRoZSB1c2Vyc3BhY2UtdmlzaWJsZSBjb3VudGVyIG51bWJlcikKQEAgLTIyNSwzMyArMjI4LDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXJtMTFfaXJxc1tdID0gewotCVswXQk9IElSUV9FQjExTVBfUE1VX0NQVTAsCi0JWzFdCT0gSVJRX0VCMTFNUF9QTVVfQ1BVMSwKLQlbMl0JPSBJUlFfRUIxMU1QX1BNVV9DUFUyLAotCVszXQk9IElSUV9FQjExTVBfUE1VX0NQVTMKLX07Ci0KIHN0YXRpYyBpbnQgZW1fc3RhcnQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gYXJtMTFfcmVxdWVzdF9pbnRlcnJ1cHRzKGFybTExX2lycXMsIEFSUkFZX1NJWkUoYXJtMTFfaXJxcykpOworCXBtdV9pcnFzID0gcmVzZXJ2ZV9wbXUoKTsKKwlpZiAoSVNfRVJSKHBtdV9pcnFzKSkgeworCQlyZXQgPSBQVFJfRVJSKHBtdV9pcnFzKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gYXJtMTFfcmVxdWVzdF9pbnRlcnJ1cHRzKHBtdV9pcnFzLT5pcnFzLCBwbXVfaXJxcy0+bnVtX2lycXMpOwogCWlmIChyZXQgPT0gMCkgewogCQllbV9jYWxsX2Z1bmN0aW9uKGFybTExX3N0YXJ0X3BtdSk7CiAKIAkJcmV0ID0gc2N1X3N0YXJ0KCk7Ci0JCWlmIChyZXQpCi0JCQlhcm0xMV9yZWxlYXNlX2ludGVycnVwdHMoYXJtMTFfaXJxcywgQVJSQVlfU0laRShhcm0xMV9pcnFzKSk7CisJCWlmIChyZXQpIHsKKwkJCWFybTExX3JlbGVhc2VfaW50ZXJydXB0cyhwbXVfaXJxcy0+aXJxcywKKwkJCQkJCSBwbXVfaXJxcy0+bnVtX2lycXMpOworCQl9IGVsc2UgeworCQkJcmVsZWFzZV9wbXUocG11X2lycXMpOworCQkJcG11X2lycXMgPSBOVUxMOworCQl9CiAJfQorCitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgZW1fc3RvcCh2b2lkKQogewogCWVtX2NhbGxfZnVuY3Rpb24oYXJtMTFfc3RvcF9wbXUpOwotCWFybTExX3JlbGVhc2VfaW50ZXJydXB0cyhhcm0xMV9pcnFzLCBBUlJBWV9TSVpFKGFybTExX2lycXMpKTsKKwlhcm0xMV9yZWxlYXNlX2ludGVycnVwdHMocG11X2lycXMtPmlycXMsIHBtdV9pcnFzLT5udW1faXJxcyk7CiAJc2N1X3N0b3AoKTsKKwlyZWxlYXNlX3BtdShwbXVfaXJxcyk7CiB9CiAKIC8qCkBAIC0yODMsMTUgKzI5Myw3IEBACiAJZW1fcm91dGVfaXJxKElSUV9FQjExTVBfUE1VX1NDVTYsIDMpOwogCWVtX3JvdXRlX2lycShJUlFfRUIxMU1QX1BNVV9TQ1U3LCAzKTsKIAotCS8qCi0JICogU2VuZCBDUDE1IFBNVSBpbnRlcnJ1cHRzIHRvIHRoZSBvd25lciBDUFUuCi0JICovCi0JZW1fcm91dGVfaXJxKElSUV9FQjExTVBfUE1VX0NQVTAsIDApOwotCWVtX3JvdXRlX2lycShJUlFfRUIxMU1QX1BNVV9DUFUxLCAxKTsKLQllbV9yb3V0ZV9pcnEoSVJRX0VCMTFNUF9QTVVfQ1BVMiwgMik7Ci0JZW1fcm91dGVfaXJxKElSUV9FQjExTVBfUE1VX0NQVTMsIDMpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGluaXRfcG11KCk7CiB9CiAKIHN0cnVjdCBvcF9hcm1fbW9kZWxfc3BlYyBvcF9tcGNvcmVfc3BlYyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y2LmMgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jCmluZGV4IGY3ZDJlYzUuLmEyMjM1N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y2LmMKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYwpAQCAtMTksMzkgKzE5LDQ3IEBACiAvKiAjZGVmaW5lIERFQlVHICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wbXUuaD4KIAogI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKICNpbmNsdWRlICJvcF9hcm1fbW9kZWwuaCIKICNpbmNsdWRlICJvcF9tb2RlbF9hcm0xMV9jb3JlLmgiCiAKLXN0YXRpYyBpbnQgaXJxc1tdID0gewotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCi0JMywKLSNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX0JDTVJJTkcKLQlJUlFfUE1VSVJRLCAvKiBmb3IgQkNNUklORywgQVJNIFBNVSBpbnRlcnJ1cHQgaXMgNDMgKi8KLSNlbmRpZgotfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11X2lycXMgKnBtdV9pcnFzOwogCiBzdGF0aWMgdm9pZCBhcm12Nl9wbXVfc3RvcCh2b2lkKQogewogCWFybTExX3N0b3BfcG11KCk7Ci0JYXJtMTFfcmVsZWFzZV9pbnRlcnJ1cHRzKGlycXMsIEFSUkFZX1NJWkUoaXJxcykpOworCWFybTExX3JlbGVhc2VfaW50ZXJydXB0cyhwbXVfaXJxcy0+aXJxcywgcG11X2lycXMtPm51bV9pcnFzKTsKKwlyZWxlYXNlX3BtdShwbXVfaXJxcyk7CisJcG11X2lycXMgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IGFybXY2X3BtdV9zdGFydCh2b2lkKQogewogCWludCByZXQ7CiAKLQlyZXQgPSBhcm0xMV9yZXF1ZXN0X2ludGVycnVwdHMoaXJxcywgQVJSQVlfU0laRShpcnFzKSk7Ci0JaWYgKHJldCA+PSAwKQotCQlyZXQgPSBhcm0xMV9zdGFydF9wbXUoKTsKKwlwbXVfaXJxcyA9IHJlc2VydmVfcG11KCk7CisJaWYgKElTX0VSUihwbXVfaXJxcykpIHsKKwkJcmV0ID0gUFRSX0VSUihwbXVfaXJxcyk7CisJCWdvdG8gb3V0OworCX0KIAorCXJldCA9IGFybTExX3JlcXVlc3RfaW50ZXJydXB0cyhwbXVfaXJxcy0+aXJxcywgcG11X2lycXMtPm51bV9pcnFzKTsKKwlpZiAocmV0ID49IDApIHsKKwkJcmV0ID0gYXJtMTFfc3RhcnRfcG11KCk7CisJfSBlbHNlIHsKKwkJcmVsZWFzZV9wbXUocG11X2lycXMpOworCQlwbXVfaXJxcyA9IE5VTEw7CisJfQorCitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjcuYyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y3LmMKaW5kZXggMjA4OGE2Yy4uODY0MmQwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjcuYworKysgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ny5jCkBAIC0xMSwxMSArMTEsMTQgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCisjaW5jbHVkZSA8YXNtL3BtdS5oPgorCiAjaW5jbHVkZSAib3BfY291bnRlci5oIgogI2luY2x1ZGUgIm9wX2FybV9tb2RlbC5oIgogI2luY2x1ZGUgIm9wX21vZGVsX3Y3LmgiCkBAIC0yOTUsNyArMjk4LDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLWludCBhcm12N19yZXF1ZXN0X2ludGVycnVwdHMoaW50ICppcnFzLCBpbnQgbnIpCitpbnQgYXJtdjdfcmVxdWVzdF9pbnRlcnJ1cHRzKGNvbnN0IGludCAqaXJxcywgaW50IG5yKQogewogCXVuc2lnbmVkIGludCBpOwogCWludCByZXQgPSAwOwpAQCAtMzE4LDcgKzMyMSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBhcm12N19yZWxlYXNlX2ludGVycnVwdHMoaW50ICppcnFzLCBpbnQgbnIpCit2b2lkIGFybXY3X3JlbGVhc2VfaW50ZXJydXB0cyhjb25zdCBpbnQgKmlycXMsIGludCBucikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIApAQCAtMzYyLDEyICszNjUsNyBAQAogfQogI2VuZGlmCiAKLQotc3RhdGljIGludCBpcnFzW10gPSB7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKLQlJTlRfMzRYWF9CRU5DSF9NUFVfRU1VTCwKLSNlbmRpZgotfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11X2lycXMgKnBtdV9pcnFzOwogCiBzdGF0aWMgdm9pZCBhcm12N19wbW5jX3N0b3Aodm9pZCkKIHsKQEAgLTM3NSwxOSArMzczLDI5IEBACiAJYXJtdjdfcG1uY19kdW1wX3JlZ3MoKTsKICNlbmRpZgogCWFybXY3X3N0b3BfcG1uYygpOwotCWFybXY3X3JlbGVhc2VfaW50ZXJydXB0cyhpcnFzLCBBUlJBWV9TSVpFKGlycXMpKTsKKwlhcm12N19yZWxlYXNlX2ludGVycnVwdHMocG11X2lycXMtPmlycXMsIHBtdV9pcnFzLT5udW1faXJxcyk7CisJcmVsZWFzZV9wbXUocG11X2lycXMpOworCXBtdV9pcnFzID0gTlVMTDsKIH0KIAogc3RhdGljIGludCBhcm12N19wbW5jX3N0YXJ0KHZvaWQpCiB7CiAJaW50IHJldDsKIAorCXBtdV9pcnFzID0gcmVzZXJ2ZV9wbXUoKTsKKwlpZiAoSVNfRVJSKHBtdV9pcnFzKSkKKwkJcmV0dXJuIFBUUl9FUlIocG11X2lycXMpOworCiAjaWZkZWYgREVCVUcKIAlhcm12N19wbW5jX2R1bXBfcmVncygpOwogI2VuZGlmCi0JcmV0ID0gYXJtdjdfcmVxdWVzdF9pbnRlcnJ1cHRzKGlycXMsIEFSUkFZX1NJWkUoaXJxcykpOwotCWlmIChyZXQgPj0gMCkKKwlyZXQgPSBhcm12N19yZXF1ZXN0X2ludGVycnVwdHMocG11X2lycXMtPmlycXMsIHBtdV9pcnFzLT5udW1faXJxcyk7CisJaWYgKHJldCA+PSAwKSB7CiAJCWFybXY3X3N0YXJ0X3BtbmMoKTsKKwl9IGVsc2UgeworCQlyZWxlYXNlX3BtdShwbXVfaXJxcyk7CisJCXBtdV9pcnFzID0gTlVMTDsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjcuaCBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y3LmgKaW5kZXggMGUxOWJjYy4uOWNhMzM0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjcuaAorKysgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ny5oCkBAIC05Nyw3ICs5Nyw3IEBACiBpbnQgYXJtdjdfc2V0dXBfcG11KHZvaWQpOwogaW50IGFybXY3X3N0YXJ0X3BtdSh2b2lkKTsKIGludCBhcm12N19zdG9wX3BtdSh2b2lkKTsKLWludCBhcm12N19yZXF1ZXN0X2ludGVycnVwdHMoaW50ICosIGludCk7Ci12b2lkIGFybXY3X3JlbGVhc2VfaW50ZXJydXB0cyhpbnQgKiwgaW50KTsKK2ludCBhcm12N19yZXF1ZXN0X2ludGVycnVwdHMoY29uc3QgaW50ICosIGludCk7Cit2b2lkIGFybXY3X3JlbGVhc2VfaW50ZXJydXB0cyhjb25zdCBpbnQgKiwgaW50KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF94c2NhbGUuYyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3hzY2FsZS5jCmluZGV4IDcyNGFiOWMuLjFkMzRhMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3hzY2FsZS5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3hzY2FsZS5jCkBAIC0xNywxMiArMTcsMTQgQEAKIC8qICNkZWZpbmUgREVCVUcgKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KKyNpbmNsdWRlIDxhc20vcG11Lmg+CiAKICNpbmNsdWRlICJvcF9jb3VudGVyLmgiCiAjaW5jbHVkZSAib3BfYXJtX21vZGVsLmgiCkBAIC0zMywxNyArMzUsNiBAQAogI2RlZmluZQlQTVVfUkVTRVQJKENDTlRfUkVTRVQgfCBQTU5fUkVTRVQpCiAjZGVmaW5lIFBNVV9DTlQ2NAkweDAwOAkvKiBNYWtlIENDTlQgY291bnQgZXZlcnkgNjR0aCBjeWNsZSAqLwogCi0vKiBUT0RPIGRvIHJ1bnRpbWUgZGV0ZWN0aW9uICovCi0jaWZkZWYgQ09ORklHX0FSQ0hfSU9QMzJYCi0jZGVmaW5lIFhTQ0FMRV9QTVVfSVJRICBJUlFfSU9QMzJYX0NPUkVfUE1VCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9JT1AzM1gKLSNkZWZpbmUgWFNDQUxFX1BNVV9JUlEgIElSUV9JT1AzM1hfQ09SRV9QTVUKLSNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX1BYQQotI2RlZmluZSBYU0NBTEVfUE1VX0lSUSAgSVJRX1BNVQotI2VuZGlmCi0KIC8qCiAgKiBEaWZmZXJlbnQgdHlwZXMgb2YgZXZlbnRzIHRoYXQgY2FuIGJlIGNvdW50ZWQgYnkgdGhlIFhTY2FsZSBQTVUKICAqIGFzIHVzZWQgYnkgT3Byb2ZpbGUgdXNlcnNwYWNlLiBIZXJlIHByaW1hcmlseSBmb3IgZG9jdW1lbnRhdGlvbgpAQCAtMzY3LDYgKzM1OCw4IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9pcnFzICpwbXVfaXJxczsKKwogc3RhdGljIHZvaWQgeHNjYWxlX3BtdV9zdG9wKHZvaWQpCiB7CiAJdTMyIHBtbmMgPSByZWFkX3BtbmMoKTsKQEAgLTM3NCwyMCArMzY3LDMwIEBACiAJcG1uYyAmPSB+UE1VX0VOQUJMRTsKIAl3cml0ZV9wbW5jKHBtbmMpOwogCi0JZnJlZV9pcnEoWFNDQUxFX1BNVV9JUlEsIHJlc3VsdHMpOworCWZyZWVfaXJxKHBtdV9pcnFzLT5pcnFzWzBdLCByZXN1bHRzKTsKKwlyZWxlYXNlX3BtdShwbXVfaXJxcyk7CisJcG11X2lycXMgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IHhzY2FsZV9wbXVfc3RhcnQodm9pZCkKIHsKIAlpbnQgcmV0OwotCXUzMiBwbW5jID0gcmVhZF9wbW5jKCk7CisJdTMyIHBtbmM7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShYU0NBTEVfUE1VX0lSUSwgeHNjYWxlX3BtdV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCi0JCQkiWFNjYWxlIFBNVSIsICh2b2lkICopcmVzdWx0cyk7CisJcG11X2lycXMgPSByZXNlcnZlX3BtdSgpOworCWlmIChJU19FUlIocG11X2lycXMpKQorCQlyZXR1cm4gUFRSX0VSUihwbXVfaXJxcyk7CisKKwlwbW5jID0gcmVhZF9wbW5jKCk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShwbXVfaXJxcy0+aXJxc1swXSwgeHNjYWxlX3BtdV9pbnRlcnJ1cHQsCisJCQkgIElSUUZfRElTQUJMRUQsICJYU2NhbGUgUE1VIiwgKHZvaWQgKilyZXN1bHRzKTsKIAogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAib3Byb2ZpbGU6IHVuYWJsZSB0byByZXF1ZXN0IElSUSVkIGZvciBYU2NhbGUgUE1VXG4iLAotCQkJWFNDQUxFX1BNVV9JUlEpOworCQkgICAgICAgcG11X2lycXMtPmlycXNbMF0pOworCQlyZWxlYXNlX3BtdShwbXVfaXJxcyk7CisJCXBtdV9pcnFzID0gTlVMTDsKIAkJcmV0dXJuIHJldDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtaW9wL2lvLmMgYi9hcmNoL2FybS9wbGF0LWlvcC9pby5jCmluZGV4IGVkMGJiZWMuLmUxNWJjMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtaW9wL2lvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1pb3AvaW8uYwpAQCAtMzQsNyArMzQsOCBAQAogCQlyZXR2YWwgPSAodm9pZCAqKSBJT1AzWFhfUE1NUl9QSFlTX1RPX1ZJUlQoY29va2llKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dmFsID0gX19hcm1faW9yZW1hcChjb29raWUsIHNpemUsIG10eXBlKTsKKwkJcmV0dmFsID0gX19hcm1faW9yZW1hcF9jYWxsZXIoY29va2llLCBzaXplLCBtdHlwZSwKKwkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCX0KIAogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlCmluZGV4IDk5NmNiYWMuLjZjZWUzOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlCkBAIC0xMywzICsxMyw3IEBACiBvYmotJChDT05GSUdfTVhDX1VMUEkpICs9IHVscGkubwogb2JqLSQoQ09ORklHX0FSQ0hfTVhDX0FVRE1VWF9WMSkgKz0gYXVkbXV4LXYxLm8KIG9iai0kKENPTkZJR19BUkNIX01YQ19BVURNVVhfVjIpICs9IGF1ZG11eC12Mi5vCitpZmRlZiBDT05GSUdfU05EX0lNWF9TT0MKK29iai15ICs9IHNzaS1maXEubworb2JqLXkgKz0gc3NpLWZpcS1rc3ltLm8KK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9hdWRtdXgtdjIuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2F1ZG11eC12Mi5jCmluZGV4IDZmMjEwOTYuLmIwNjk1NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2F1ZG11eC12Mi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2F1ZG11eC12Mi5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRtdXguaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKQEAgLTMyLDYgKzMzLDE0MCBAQAogI2RlZmluZSBNWENfQVVETVVYX1YyX1BUQ1IoeCkJCSgoeCkgKiA4KQogI2RlZmluZSBNWENfQVVETVVYX1YyX1BEQ1IoeCkJCSgoeCkgKiA4ICsgNCkKIAorI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIHN0cnVjdCBkZW50cnkgKmF1ZG11eF9kZWJ1Z2ZzX3Jvb3Q7CisKK3N0YXRpYyBpbnQgYXVkbXV4X29wZW5fZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCXJldHVybiAwOworfQorCisvKiBUaGVyZSBpcyBhbiBhbm5veWluZyBkaXNjb250aW51aXR5IGluIHRoZSBTU0kgbnVtYmVyaW5nIHdpdGggcmVnYXJkCisgKiB0byB0aGUgTGludXggbnVtYmVyIG9mIHRoZSBkZXZpY2VzICovCitzdGF0aWMgY29uc3QgY2hhciAqYXVkbXV4X3BvcnRfc3RyaW5nKGludCBwb3J0KQoreworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgTVgzMV9BVURNVVhfUE9SVDFfU1NJMDoKKwkJcmV0dXJuICJpbXgtc3NpLjAiOworCWNhc2UgTVgzMV9BVURNVVhfUE9SVDJfU1NJMToKKwkJcmV0dXJuICJpbXgtc3NpLjEiOworCWNhc2UgTVgzMV9BVURNVVhfUE9SVDNfU1NJX1BJTlNfMzoKKwkJcmV0dXJuICJTU0kzIjsKKwljYXNlIE1YMzFfQVVETVVYX1BPUlQ0X1NTSV9QSU5TXzQ6CisJCXJldHVybiAiU1NJNCI7CisJY2FzZSBNWDMxX0FVRE1VWF9QT1JUNV9TU0lfUElOU181OgorCQlyZXR1cm4gIlNTSTUiOworCWNhc2UgTVgzMV9BVURNVVhfUE9SVDZfU1NJX1BJTlNfNjoKKwkJcmV0dXJuICJTU0k2IjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVOS05PV04iOworCX0KK30KKworc3RhdGljIHNzaXplX3QgYXVkbXV4X3JlYWRfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXNzaXplX3QgcmV0OworCWNoYXIgKmJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpbnQgcG9ydCA9IChpbnQpZmlsZS0+cHJpdmF0ZV9kYXRhOworCXUzMiBwZGNyLCBwdGNyOworCisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGF1ZG11eF9jbGspCisJCWNsa19lbmFibGUoYXVkbXV4X2Nsayk7CisKKwlwdGNyID0gcmVhZGwoYXVkbXV4X2Jhc2UgKyBNWENfQVVETVVYX1YyX1BUQ1IocG9ydCkpOworCXBkY3IgPSByZWFkbChhdWRtdXhfYmFzZSArIE1YQ19BVURNVVhfVjJfUERDUihwb3J0KSk7CisKKwlpZiAoYXVkbXV4X2NsaykKKwkJY2xrX2Rpc2FibGUoYXVkbXV4X2Nsayk7CisKKwlyZXQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIlBEQ1I6ICUwOHhcblBUQ1I6ICUwOHhcbiIsCisJCSAgICAgICBwZGNyLCBwdGNyKTsKKworCWlmIChwdGNyICYgTVhDX0FVRE1VWF9WMl9QVENSX1RGU0RJUikKKwkJcmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgUEFHRV9TSVpFIC0gcmV0LAorCQkJCSJUeEZTIG91dHB1dCBmcm9tICVzLCAiLAorCQkJCWF1ZG11eF9wb3J0X3N0cmluZygocHRjciA+PiAyNykgJiAweDcpKTsKKwllbHNlCisJCXJldCArPSBzbnByaW50ZihidWYgKyByZXQsIFBBR0VfU0laRSAtIHJldCwKKwkJCQkiVHhGUyBpbnB1dCwgIik7CisKKwlpZiAocHRjciAmIE1YQ19BVURNVVhfVjJfUFRDUl9UQ0xLRElSKQorCQlyZXQgKz0gc25wcmludGYoYnVmICsgcmV0LCBQQUdFX1NJWkUgLSByZXQsCisJCQkJIlR4Q2xrIG91dHB1dCBmcm9tICVzIiwKKwkJCQlhdWRtdXhfcG9ydF9zdHJpbmcoKHB0Y3IgPj4gMjIpICYgMHg3KSk7CisJZWxzZQorCQlyZXQgKz0gc25wcmludGYoYnVmICsgcmV0LCBQQUdFX1NJWkUgLSByZXQsCisJCQkJIlR4Q2xrIGlucHV0Iik7CisKKwlyZXQgKz0gc25wcmludGYoYnVmICsgcmV0LCBQQUdFX1NJWkUgLSByZXQsICJcbiIpOworCisJaWYgKHB0Y3IgJiBNWENfQVVETVVYX1YyX1BUQ1JfU1lOKSB7CisJCXJldCArPSBzbnByaW50ZihidWYgKyByZXQsIFBBR0VfU0laRSAtIHJldCwKKwkJCQkiUG9ydCBpcyBzeW1tZXRyaWMiKTsKKwl9IGVsc2UgeworCQlpZiAocHRjciAmIE1YQ19BVURNVVhfVjJfUFRDUl9SRlNESVIpCisJCQlyZXQgKz0gc25wcmludGYoYnVmICsgcmV0LCBQQUdFX1NJWkUgLSByZXQsCisJCQkJCSJSeEZTIG91dHB1dCBmcm9tICVzLCAiLAorCQkJCQlhdWRtdXhfcG9ydF9zdHJpbmcoKHB0Y3IgPj4gMTcpICYgMHg3KSk7CisJCWVsc2UKKwkJCXJldCArPSBzbnByaW50ZihidWYgKyByZXQsIFBBR0VfU0laRSAtIHJldCwKKwkJCQkJIlJ4RlMgaW5wdXQsICIpOworCisJCWlmIChwdGNyICYgTVhDX0FVRE1VWF9WMl9QVENSX1JDTEtESVIpCisJCQlyZXQgKz0gc25wcmludGYoYnVmICsgcmV0LCBQQUdFX1NJWkUgLSByZXQsCisJCQkJCSJSeENsayBvdXRwdXQgZnJvbSAlcyIsCisJCQkJCWF1ZG11eF9wb3J0X3N0cmluZygocHRjciA+PiAxMikgJiAweDcpKTsKKwkJZWxzZQorCQkJcmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgUEFHRV9TSVpFIC0gcmV0LAorCQkJCQkiUnhDbGsgaW5wdXQiKTsKKwl9CisKKwlyZXQgKz0gc25wcmludGYoYnVmICsgcmV0LCBQQUdFX1NJWkUgLSByZXQsCisJCQkiXG5EYXRhIHJlY2VpdmVkIGZyb20gJXNcbiIsCisJCQlhdWRtdXhfcG9ydF9zdHJpbmcoKHBkY3IgPj4gMTMpICYgMHg3KSk7CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmV0KTsKKworCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdWRtdXhfZGVidWdmc19mb3BzID0geworCS5vcGVuID0gYXVkbXV4X29wZW5fZmlsZSwKKwkucmVhZCA9IGF1ZG11eF9yZWFkX2ZpbGUsCit9OworCitzdGF0aWMgdm9pZCBhdWRtdXhfZGVidWdmc19pbml0KHZvaWQpCit7CisJaW50IGk7CisJY2hhciBidWZbMjBdOworCisJYXVkbXV4X2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiYXVkbXV4IiwgTlVMTCk7CisJaWYgKCFhdWRtdXhfZGVidWdmc19yb290KSB7CisJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBjcmVhdGUgQVVETVVYIGRlYnVnZnMgcm9vdFxuIik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7CisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJzc2klZCIsIGkpOworCQlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoYnVmLCAwNDQ0LCBhdWRtdXhfZGVidWdmc19yb290LAorCQkJCQkgKHZvaWQgKilpLCAmYXVkbXV4X2RlYnVnZnNfZm9wcykpCisJCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gY3JlYXRlIEFVRE1VWCBwb3J0ICVkIGRlYnVnZnMgZmlsZVxuIiwKKwkJCQkgICBpKTsKKwl9Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGF1ZG11eF9kZWJ1Z2ZzX2luaXQodm9pZCkKK3sKK30KKyNlbmRpZgorCiBpbnQgbXhjX2F1ZG11eF92Ml9jb25maWd1cmVfcG9ydCh1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IHB0Y3IsCiAJCXVuc2lnbmVkIGludCBwZGNyKQogewpAQCAtNjgsNiArMjAzLDggQEAKIAlpZiAoY3B1X2lzX214MzEoKSB8fCBjcHVfaXNfbXgzNSgpKQogCQlhdWRtdXhfYmFzZSA9IElPX0FERFJFU1MoQVVETVVYX0JBU0VfQUREUik7CiAKKwlhdWRtdXhfZGVidWdmc19pbml0KCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFsaXRlLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWxpdGUuaAppbmRleCAwMTg0YjYzLi4yYjJkYTAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWxpdGUuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWxpdGUuaApAQCAtMjUsNyArMjUsNyBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi1lbnVtIG14MzFsaWxseV9ib2FyZHMgeworZW51bSBteDMxbGl0ZV9ib2FyZHMgewogCU1YMzFMSVRFX05PQk9BUkQJPSAwLAogCU1YMzFMSVRFX0RCCQk9IDEsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCmluZGV4IDI4NmNiOWIuLjRiZjEwNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jb21tb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY29tbW9uLmgKQEAgLTMyLDcgKzMyLDcgQEAKIGV4dGVybiB2b2lkIG14Y190aW1lcl9pbml0KHN0cnVjdCBjbGsgKnRpbWVyX2Nsaywgdm9pZCBfX2lvbWVtICosIGludCk7CiBleHRlcm4gaW50IG14MV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpOwogZXh0ZXJuIGludCBteDIxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgbHJlZiwgdW5zaWduZWQgbG9uZyBmcmVmKTsKLWV4dGVybiBpbnQgbXgyNV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpOworZXh0ZXJuIGludCBteDI1X2Nsb2Nrc19pbml0KHZvaWQpOwogZXh0ZXJuIGludCBteDI3X2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZik7CiBleHRlcm4gaW50IG14MzFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKTsKIGV4dGVybiBpbnQgbXgzNV9jbG9ja3NfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggMTViMmIxNC4uNWE2YWUxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTUyLDcgKzUyLDcgQEAKICNkZWZpbmUgVUFSVF9QQUREUglNWEM5MTIzMV9VQVJUMl9CQVNFX0FERFIKICNkZWZpbmUgVUFSVF9WQUREUglNWEM5MTIzMV9BSVBTMV9JT19BRERSRVNTKE1YQzkxMjMxX1VBUlQyX0JBU0VfQUREUikKICNlbmRpZgotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbGRyZXEJXHJ4LCA9VUFSVF9QQUREUglAIHBoeXNpY2FsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzNS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MzUuaAppbmRleCAwMGIwYWMxLi5jODhkNDA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzNS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDM1LmgKQEAgLTY3MSw3ICs2NzEsNyBAQAogI2RlZmluZSBNWDM1X1BBRF9MRDhfX1NETUFfU0RNQV9ERUJVR19QQ184CQkJSU9NVVhfUEFEKDB4NjM0LCAweDFkMCwgNiwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMzVfUEFEX0xEOV9fSVBVX0RJU1BCX0RBVF85CQkJCUlPTVVYX1BBRCgweDYzOCwgMHgxZDQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVgzNV9QQURfTEQ5X19HUElPMl85CQkJCQlJT01VWF9QQUQoMHg2MzgsIDB4MWQ0LCA1LCAweDhlNCAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMzVfUEFEX0xEOV9fR1BJTzJfOQkJCQkJSU9NVVhfUEFEKDB4NjM4LCAweDFkNCwgNSwgMHg4ZTQsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDM1X1BBRF9MRDlfX1NETUFfU0RNQV9ERUJVR19QQ185CQkJSU9NVVhfUEFEKDB4NjM4LCAweDFkNCwgNiwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMzVfUEFEX0xEMTBfX0lQVV9ESVNQQl9EQVRfMTAJCQkJSU9NVVhfUEFEKDB4NjNjLCAweDFkOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggZWFkOWQ1OS4uMGNiMzQ3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0zNyw3ICszNywxMiBAQAogICogd2l0aGluIHNlbnNpYmxlIGxpbWl0cy4KICAqLwogI2RlZmluZSBNWENfQk9BUkRfSVJRX1NUQVJUCShNWENfSU5URVJOQUxfSVJRUyArIE1YQ19HUElPX0lSUVMpCisKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDMxQURTX1dNMTEzM19FVjEKKyNkZWZpbmUgTVhDX0JPQVJEX0lSUVMgIDgwCisjZWxzZQogI2RlZmluZSBNWENfQk9BUkRfSVJRUwkxNgorI2VuZGlmCiAKICNkZWZpbmUgTVhDX0lQVV9JUlFfU1RBUlQJKE1YQ19CT0FSRF9JUlFfU1RBUlQgKyBNWENfQk9BUkRfSVJRUykKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggNjJkOTc2Mi4uNDQyNDNhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0yMSw2ICsyMSw2IEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX1ZNQUxMT0NfSF9fCiAKIC8qIHZtYWxsb2MgZW5kaW5nIGFkZHJlc3MgKi8KLSNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgMHhGNDAwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAweGY0MDAwMDAwVUwKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX1ZNQUxMT0NfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9zc2ktZmlxLWtzeW0uYyBiL2FyY2gvYXJtL3BsYXQtbXhjL3NzaS1maXEta3N5bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZmFkNDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9zc2ktZmlxLWtzeW0uYwpAQCAtMCwwICsxLDIwIEBACisvKgorICogRXhwb3J0ZWQga3N5bXMgZm9yIHRoZSBTU0kgRklRIGhhbmRsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPG1hY2gvc3NpLmg+CisKK0VYUE9SVF9TWU1CT0woaW14X3NzaV9maXFfdHhfYnVmZmVyKTsKK0VYUE9SVF9TWU1CT0woaW14X3NzaV9maXFfcnhfYnVmZmVyKTsKK0VYUE9SVF9TWU1CT0woaW14X3NzaV9maXFfc3RhcnQpOworRVhQT1JUX1NZTUJPTChpbXhfc3NpX2ZpcV9lbmQpOworRVhQT1JUX1NZTUJPTChpbXhfc3NpX2ZpcV9iYXNlKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvc3NpLWZpcS5TIGIvYXJjaC9hcm0vcGxhdC1teGMvc3NpLWZpcS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZGNlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9zc2ktZmlxLlMKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCisvKgorICogcjggID0gYml0IDAtMTU6IHR4IG9mZnNldCwgYml0IDE2LTMxOiB0eCBidWZmZXIgc2l6ZQorICogcjkgID0gYml0IDAtMTU6IHJ4IG9mZnNldCwgYml0IDE2LTMxOiByeCBidWZmZXIgc2l6ZQorICovCisKKyNkZWZpbmUgU1NJX1NUWDAJMHgwMAorI2RlZmluZSBTU0lfU1JYMAkweDA4CisjZGVmaW5lIFNTSV9TSVNSCTB4MTQKKyNkZWZpbmUgU1NJX1NJRVIJMHgxOAorI2RlZmluZSBTU0lfU0FDTlQJMHgzOAorCisjZGVmaW5lIFNTSV9TQUNOVF9BQzk3RU4JKDEgPDwgMCkKKworI2RlZmluZSBTU0lfU0lFUl9URkUwX0VOCSgxIDw8IDApCisjZGVmaW5lIFNTSV9TSVNSX1RGRTAJCSgxIDw8IDApCisjZGVmaW5lIFNTSV9TSVNSX1JGRjAJCSgxIDw8IDIpCisjZGVmaW5lIFNTSV9TSUVSX1JGRjBfRU4JKDEgPDwgMikKKworCQkudGV4dAorCQkuZ2xvYmFsCWlteF9zc2lfZmlxX3N0YXJ0CisJCS5nbG9iYWwJaW14X3NzaV9maXFfZW5kCisJCS5nbG9iYWwgaW14X3NzaV9maXFfYmFzZQorCQkuZ2xvYmFsIGlteF9zc2lfZmlxX3J4X2J1ZmZlcgorCQkuZ2xvYmFsIGlteF9zc2lfZmlxX3R4X2J1ZmZlcgorCitpbXhfc3NpX2ZpcV9zdGFydDoKKwkJbGRyIHIxMiwgaW14X3NzaV9maXFfYmFzZQorCisJCS8qIFRYICovCisJCWxkciByMTEsIGlteF9zc2lfZmlxX3R4X2J1ZmZlcgorCisJCS8qIHNoYWxsIHdlIHNlbmQ/ICovCisJCWxkciByMTMsIFtyMTIsICNTU0lfU0lFUl0KKwkJdHN0IHIxMywgI1NTSV9TSUVSX1RGRTBfRU4KKwkJYmVxIDFmCisKKwkJLyogVFggRklGTyBlbXB0eT8gKi8KKwkJbGRyIHIxMywgW3IxMiwgI1NTSV9TSVNSXQorCQl0c3QgcjEzLCAjU1NJX1NJU1JfVEZFMAorCQliZXEgMWYKKworCQltb3YgcjEwLCAjMHgxMDAwMAorCQlzdWIgcjEwLCAjMQorCQlhbmQgcjEwLCByMTAsIHI4CS8qIHIxMDogY3VycmVudCBidWZmZXIgb2Zmc2V0ICovCisKKwkJYWRkIHIxMSwgcjExLCByMTAKKworCQlsZHJoIHIxMywgW3IxMV0KKwkJc3RyaCByMTMsIFtyMTIsICNTU0lfU1RYMF0KKworCQlsZHJoIHIxMywgW3IxMSwgIzJdCisJCXN0cmggcjEzLCBbcjEyLCAjU1NJX1NUWDBdCisKKwkJbGRyaCByMTMsIFtyMTEsICM0XQorCQlzdHJoIHIxMywgW3IxMiwgI1NTSV9TVFgwXQorCisJCWxkcmggcjEzLCBbcjExLCAjNl0KKwkJc3RyaCByMTMsIFtyMTIsICNTU0lfU1RYMF0KKworCQlhZGQgcjEwLCAjOAorCQlsc3IgcjEzLCByOCwgIzE2CS8qIHIxMzogYnVmZmVyIHNpemUgKi8KKwkJY21wIHIxMCwgcjEzCisJCWxzbGd0IHI4LCByMTMsICMxNgorCQlhZGRsZSByOCwgIzgKKzE6CisJCS8qIFJYICovCisKKwkJLyogc2hhbGwgd2UgcmVjZWl2ZT8gKi8KKwkJbGRyIHIxMywgW3IxMiwgI1NTSV9TSUVSXQorCQl0c3QgcjEzLCAjU1NJX1NJRVJfUkZGMF9FTgorCQliZXEgMWYKKworCQkvKiBSWCBGSUZPIGZ1bGw/ICovCisJCWxkciByMTMsIFtyMTIsICNTU0lfU0lTUl0KKwkJdHN0IHIxMywgI1NTSV9TSVNSX1JGRjAKKwkJYmVxIDFmCisKKwkJbGRyIHIxMSwgaW14X3NzaV9maXFfcnhfYnVmZmVyCisKKwkJbW92IHIxMCwgIzB4MTAwMDAKKwkJc3ViIHIxMCwgIzEKKwkJYW5kIHIxMCwgcjEwLCByOQkvKiByMTA6IGN1cnJlbnQgYnVmZmVyIG9mZnNldCAqLworCisJCWFkZCByMTEsIHIxMSwgcjEwCisKKwkJbGRyIHIxMywgW3IxMiwgI1NTSV9TQUNOVF0KKwkJdHN0IHIxMywgI1NTSV9TQUNOVF9BQzk3RU4KKworCQlsZHIgcjEzLCBbcjEyLCAjU1NJX1NSWDBdCisJCXN0cmggcjEzLCBbcjExXQorCisJCWxkciByMTMsIFtyMTIsICNTU0lfU1JYMF0KKwkJc3RyaCByMTMsIFtyMTEsICMyXQorCisJCS8qIGR1bW15IHJlYWQgdG8gc2tpcCBzbG90IDEyICovCisJCWxkcm5lIHIxMywgW3IxMiwgI1NTSV9TUlgwXQorCisJCWxkciByMTMsIFtyMTIsICNTU0lfU1JYMF0KKwkJc3RyaCByMTMsIFtyMTEsICM0XQorCisJCWxkciByMTMsIFtyMTIsICNTU0lfU1JYMF0KKwkJc3RyaCByMTMsIFtyMTEsICM2XQorCisJCS8qIGR1bW15IHJlYWQgdG8gc2tpcCBzbG90IDEyICovCisJCWxkcm5lIHIxMywgW3IxMiwgI1NTSV9TUlgwXQorCisJCWFkZCByMTAsICM4CisJCWxzciByMTMsIHI5LCAjMTYJLyogcjEzOiBidWZmZXIgc2l6ZSAqLworCQljbXAgcjEwLCByMTMKKwkJbHNsZ3QgcjksIHIxMywgIzE2CisJCWFkZGxlIHI5LCAjOAorCisxOgorCQlAIHJldHVybiBmcm9tIEZJUQorCQlzdWJzCXBjLCBsciwgIzQKK2lteF9zc2lfZmlxX2Jhc2U6CisJCS53b3JkIDB4MAoraW14X3NzaV9maXFfcnhfYnVmZmVyOgorCQkud29yZCAweDAKK2lteF9zc2lfZmlxX3R4X2J1ZmZlcjoKKwkJLndvcmQgMHgwCitpbXhfc3NpX2ZpcV9lbmQ6CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9pbmNsdWRlL3BsYXQvaTJjLmggYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L2kyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MjFkYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L2kyYy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QtRXJpY3Nzb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX1BMQVRfSTJDX0gKKyNkZWZpbmUgX19QTEFUX0kyQ19ICisKK2VudW0gaTJjX2ZyZXFfbW9kZSB7CisJSTJDX0ZSRVFfTU9ERV9TVEFOREFSRCwJCS8qIHVwIHRvIDEwMCBLYi9zICovCisJSTJDX0ZSRVFfTU9ERV9GQVNULAkJLyogdXAgdG8gNDAwIEtiL3MgKi8KKwlJMkNfRlJFUV9NT0RFX0ZBU1RfUExVUywJLyogdXAgdG8gMSBNYi9zICovCisJSTJDX0ZSRVFfTU9ERV9ISUdIX1NQRUVECS8qIHVwIHRvIDMuNCBNYi9zICovCit9OworCisvKioKKyAqIHN0cnVjdCBubWtfaTJjX2NvbnRyb2xsZXIgLSBjbGllbnQgc3BlY2lmaWMgY29udHJvbGxlciBjb25maWd1cmF0aW9uCisgKiBAY2xrX2ZyZXE6CWNsb2NrIGZyZXF1ZW5jeSBmb3IgdGhlIG9wZXJhdGlvbiBtb2RlCisgKiBAc2xzdToJU2xhdmUgZGF0YSBzZXR1cCB0aW1lIGluIG5zLgorICoJCVRoZSBuZWVkZWQgc2V0dXAgdGltZSBmb3IgdGhyZWUgbW9kZXMgb2Ygb3BlcmF0aW9uCisgKgkJYXJlIDI1MG5zLCAxMDBucyBhbmQgMTBucyByZXNwZWN0aXZlbHkgdGh1cyBsZWFkaW5nCisgKgkJdG8gdGhlIHZhbHVlcyBvZiAxNCwgNiwgMiBmb3IgYSA0OCBNSHogaTJjIGNsaworICogQHRmdDoJVHggRklGTyBUaHJlc2hvbGQgaW4gYnl0ZXMKKyAqIEByZnQ6CVJ4IEZJRk8gVGhyZXNob2xkIGluIGJ5dGVzCisgKiBAc206CQlzcGVlZCBtb2RlCisgKi8KK3N0cnVjdCBubWtfaTJjX2NvbnRyb2xsZXIgeworCXVuc2lnbmVkIGxvbmcJY2xrX2ZyZXE7CisJdW5zaWduZWQgc2hvcnQJc2xzdTsKKwl1bnNpZ25lZCBjaGFyIAl0ZnQ7CisJdW5zaWduZWQgY2hhciAJcmZ0OworCWVudW0gaTJjX2ZyZXFfbW9kZQlzbTsKK307CisKKyNlbmRpZgkvKiBfX1BMQVRfSTJDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKaW5kZXggZTJlYTA0YS4uMmUzZWVjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKQEAgLTIyLDYgKzIyLDcgQEAKIAlib29sICJUSSBPTUFQMyIKIAlzZWxlY3QgQ1BVX1Y3CiAJc2VsZWN0IENPTU1PTl9DTEtERVYKKwlzZWxlY3QgQVJNX0wxX0NBQ0hFX1NISUZUXzYKIAogY29uZmlnIEFSQ0hfT01BUDQKIAlib29sICJUSSBPTUFQNCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKaW5kZXggZDlmOGM4NC4uNGJlY2JkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogc3RhdGljIGludCBjbGtfZGVidWdmc19yZWdpc3Rlcl9vbmUoc3RydWN0IGNsayAqYykKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCBkZW50cnkgKmQsICpjaGlsZDsKKwlzdHJ1Y3QgZGVudHJ5ICpkLCAqY2hpbGQsICpjaGlsZF90bXA7CiAJc3RydWN0IGNsayAqcGEgPSBjLT5wYXJlbnQ7CiAJY2hhciBzWzI1NV07CiAJY2hhciAqcCA9IHM7CkBAIC00MjMsNyArNDIzLDcgQEAKIAogZXJyX291dDoKIAlkID0gYy0+ZGVudDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmZC0+ZF9zdWJkaXJzLCBkX3UuZF9jaGlsZCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGQsIGNoaWxkX3RtcCwgJmQtPmRfc3ViZGlycywgZF91LmRfY2hpbGQpCiAJCWRlYnVnZnNfcmVtb3ZlKGNoaWxkKTsKIAlkZWJ1Z2ZzX3JlbW92ZShjLT5kZW50KTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKaW5kZXggZDE3NjIwYy4uZDI0MjJjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCkBAIC03NTAsNiArNzUwLDcgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKIC8qCiAgKiBUaGlzIG9ubHkgYXBwbGllcyB0byBjaGlwcyB0aGF0IGNhbid0IGRvIGJvdGggcmlzaW5nIGFuZCBmYWxsaW5nIGVkZ2UKICAqIGRldGVjdGlvbiBhdCBvbmNlLiAgRm9yIGFsbCBvdGhlciBjaGlwcywgdGhpcyBmdW5jdGlvbiBpcyBhIG5vb3AuCkBAIC03NjAsMTEgKzc2MSw5IEBACiAJdTMyIGwgPSAwOwogCiAJc3dpdGNoIChiYW5rLT5tZXRob2QpIHsKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogCWNhc2UgTUVUSE9EX01QVUlPOgogCQlyZWcgKz0gT01BUF9NUFVJT19HUElPX0lOVF9FREdFOwogCQlicmVhazsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJY2FzZSBNRVRIT0RfR1BJT18xNTEwOgogCQlyZWcgKz0gT01BUDE1MTBfR1BJT19JTlRfQ09OVFJPTDsKQEAgLTc4Nyw2ICs3ODYsNyBAQAogCiAJX19yYXdfd3JpdGVsKGwsIHJlZyk7CiB9CisjZW5kaWYKIAogc3RhdGljIGludCBfc2V0X2dwaW9fdHJpZ2dlcmluZyhzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rLCBpbnQgZ3BpbywgaW50IHRyaWdnZXIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXA0NHh4LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXA0NHh4LmgKaW5kZXggZWY4NzBkZS4uYzdkNjI4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwNDR4eC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDQ0eHguaApAQCAtNDAsNiArNDAsNyBAQAogI2RlZmluZSBPTUFQNDRYWF9HSUNfQ1BVX0JBU0UJCTB4NDgyNDAxMDAKICNkZWZpbmUgT01BUDQ0WFhfU0NVX0JBU0UJCTB4NDgyNDAwMDAKICNkZWZpbmUgT01BUDQ0WFhfTE9DQUxfVFdEX0JBU0UJCTB4NDgyNDA2MDAKKyNkZWZpbmUgT01BUDQ0WFhfTDJDQUNIRV9CQVNFCQkweDQ4MjQyMDAwCiAjZGVmaW5lIE9NQVA0NFhYX1dLVVBHRU5fQkFTRQkJMHg0ODI4MTAwMAogCiAjZGVmaW5lIE9NQVA0NFhYX01BSUxCT1hfQkFTRQkJKEw0XzQ0WFhfQkFTRSArIDB4RjQwMDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pby5jCmluZGV4IDBjZmQ1NGYuLjRjYmQ0ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pby5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJCXJldHVybiBYTEFURShwLCBMNF9FTVVfNDRYWF9QSFlTLCBMNF9FTVVfNDRYWF9WSVJUKTsKIAl9CiAjZW5kaWYKLQlyZXR1cm4gX19hcm1faW9yZW1hcChwLCBzaXplLCB0eXBlKTsKKwlyZXR1cm4gX19hcm1faW9yZW1hcF9jYWxsZXIocCwgc2l6ZSwgdHlwZSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9pb3JlbWFwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL29tYXBfZGV2aWNlLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvb21hcF9kZXZpY2UuYwppbmRleCAxZTU2NDhkLi4yZWQ3MjAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvb21hcF9kZXZpY2UuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvb21hcF9kZXZpY2UuYwpAQCAtODksMTYgKzg5LDYgQEAKICNkZWZpbmUgVVNFX1dBS0VVUF9MQVQJCQkwCiAjZGVmaW5lIElHTk9SRV9XQUtFVVBfTEFUCQkxCiAKLS8qIFhYWCB0aGlzIHNob3VsZCBiZSBtb3ZlZCBpbnRvIGEgc2VwYXJhdGUgZmlsZSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCi0jIGRlZmluZSBPTUFQXzMyS1NZTkNUX0JBU0UJCTB4NDgwMDQwMDAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApCi0jIGRlZmluZSBPTUFQXzMyS1NZTkNUX0JBU0UJCTB4NDkwMjAwMDAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0MzApCi0jIGRlZmluZSBPTUFQXzMyS1NZTkNUX0JBU0UJCTB4NDgzMjAwMDAKLSNlbHNlCi0jIGVycm9yIFVua25vd24gT01BUCBkZXZpY2UKLSNlbmRpZgogCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCBiZmQyY2E2Li4yOTlkOTVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTE1LDYgKzE1LDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9WTUFMTE9DX0gKICNkZWZpbmUgX19BU01fQVJDSF9WTUFMTE9DX0gKIAotI2RlZmluZSBWTUFMTE9DX0VORAkgICgweEUwMDAwMDAwKQorI2RlZmluZSBWTUFMTE9DX0VORAkgICgweGUwMDAwMDAwVUwpCiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX1ZNQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9jbG9jay5jCmluZGV4IDVkMmYxOWEuLmU1OTNhMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2Nsb2NrLmMKQEAgLTExMjYsOSArMTEyNiw4IEBACiAJCQlpZiAob3BzICYmIG9wcy0+c2V0X3BhcmVudCkKIAkJCQlvcHMtPnNldF9wYXJlbnQoY2wtPmNsaywgY2wtPmNsay0+cGFyZW50KTsKIAkJfQotCi0JCWNsa2Rldl9hZGQoY2wpOwogCX0KKwljbGtkZXZfYWRkX3RhYmxlKG9uY2hpcF9jbGtzLCBBUlJBWV9TSVpFKG9uY2hpcF9jbGtzKSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGZiM2I5NjkuLjFiOTM0OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTYsNyArMTYsNyBAQAogICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCiAgKi8KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHg4MDAwMDAwMAlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IDU0MWI4ODAuLjk0M2MxYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTksNCArOSw0IEBACiAgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKICAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAogICovCi0jZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgICgweEYwMDAwMDAwKQorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAweGYwMDAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCmluZGV4IDVhNzlmYzYuLjMxYzJmNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwpAQCAtMTIsNyArMTIsNyBAQAogIwogIyAgIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvbWFjaGluZXMvP2FjdGlvbj1uZXcKICMKLSMgTGFzdCB1cGRhdGU6IFRodSBKYW4gMjggMjI6MTU6NTQgMjAxMAorIyBMYXN0IHVwZGF0ZTogU2F0IEZlYiAyMCAxNDoxNjoxNSAyMDEwCiAjCiAjIG1hY2hpbmVfaXNfeHh4CUNPTkZJR194eHh4CQlNQUNIX1RZUEVfeHh4CQludW1iZXIKICMKQEAgLTIyNTcsNyArMjI1Nyw3IEBACiBvcmF0aXNtYWRpCQlNQUNIX09SQVRJU01BREkJCU9SQVRJU01BREkJCTIyNjkKIG9yYXRpc290MTYJCU1BQ0hfT1JBVElTT1QxNgkJT1JBVElTT1QxNgkJMjI3MAogb3JhdGlzZGVzawkJTUFDSF9PUkFUSVNERVNLCQlPUkFUSVNERVNLCQkyMjcxCi12Ml9jYTkJCQlNQUNIX1YyUF9DQTkJCVYyUF9DQTkJCQkyMjcyCit2ZXhwcmVzcwkJTUFDSF9WRVhQUkVTUwkJVkVYUFJFU1MJCTIyNzIKIHNpbnRleG8JCQlNQUNIX1NJTlRFWE8JCVNJTlRFWE8JCQkyMjczCiBjbTMzODkJCQlNQUNIX0NNMzM4OQkJQ00zMzg5CQkJMjI3NAogb21hcDNfY2lvCQlNQUNIX09NQVAzX0NJTwkJT01BUDNfQ0lPCQkyMjc1CkBAIC0yNjM2LDMgKzI2MzYsNDUgQEAKIGRtMzY1X2xlb3BhcmQJCU1BQ0hfRE0zNjVfTEVPUEFSRAlETTM2NV9MRU9QQVJECQkyNjQ5CiBtaXR5b21hcGwxMzgJCU1BQ0hfTUlUWU9NQVBMMTM4CU1JVFlPTUFQTDEzOAkJMjY1MAogc2NhdDExMAkJCU1BQ0hfU0NBVDExMAkJU0NBVDExMAkJCTI2NTEKK2FjZXJfYTEJCQlNQUNIX0FDRVJfQTEJCUFDRVJfQTEJCQkyNjUyCitjbWNvbnRyb2wJCU1BQ0hfQ01DT05UUk9MCQlDTUNPTlRST0wJCTI2NTMKK3BlbGNvX2xhbWFyCQlNQUNIX1BFTENPX0xBTUFSCVBFTENPX0xBTUFSCQkyNjU0CityZnA0MwkJCU1BQ0hfUkZQNDMJCVJGUDQzCQkJMjY1NQorc2s4NnIwMzAxCQlNQUNIX1NLODZSMDMwMQkJU0s4NlIwMzAxCQkyNjU2CitjdHB4YQkJCU1BQ0hfQ1RQWEEJCUNUUFhBCQkJMjY1NworZXBiX2FybTlfYQkJTUFDSF9FUEJfQVJNOV9BCQlFUEJfQVJNOV9BCQkyNjU4CitndXJ1cGx1ZwkJTUFDSF9HVVJVUExVRwkJR1VSVVBMVUcJCTI2NTkKK3NwZWFyMzEwCQlNQUNIX1NQRUFSMzEwCQlTUEVBUjMxMAkJMjY2MAorc3BlYXIzMjAJCU1BQ0hfU1BFQVIzMjAJCVNQRUFSMzIwCQkyNjYxCityb2JvdHgJCQlNQUNIX1JPQk9UWAkJUk9CT1RYCQkJMjY2MgorbHN4aGwJCQlNQUNIX0xTWEhMCQlMU1hITAkJCTI2NjMKK3NtYXJ0bGl0ZQkJTUFDSF9TTUFSVExJVEUJCVNNQVJUTElURQkJMjY2NAorY3dzMgkJCU1BQ0hfQ1dTMgkJQ1dTMgkJCTI2NjUKK202MTkJCQlNQUNIX002MTkJCU02MTkJCQkyNjY2CitzbWFydHZpZXcJCU1BQ0hfU01BUlRWSUVXCQlTTUFSVFZJRVcJCTI2NjcKK2xzYV9zYWxzYQkJTUFDSF9MU0FfU0FMU0EJCUxTQV9TQUxTQQkJMjY2OAora2l6Ym94CQkJTUFDSF9LSVpCT1gJCUtJWkJPWAkJCTI2NjkKK2h0Y2NoYXJtZXIJCU1BQ0hfSFRDQ0hBUk1FUgkJSFRDQ0hBUk1FUgkJMjY3MAorZ3VmX25lc29fbHQJCU1BQ0hfR1VGX05FU09fTFQJR1VGX05FU09fTFQJCTI2NzEKK3BtOWc0NQkJCU1BQ0hfUE05RzQ1CQlQTTlHNDUJCQkyNjcyCitodGNwYW50aGVyCQlNQUNIX0hUQ1BBTlRIRVIJCUhUQ1BBTlRIRVIJCTI2NzMKK2h0Y3BhbnRoZXJfY2RtYQkJTUFDSF9IVENQQU5USEVSX0NETUEJSFRDUEFOVEhFUl9DRE1BCQkyNjc0CityZWIwMQkJCU1BQ0hfUkVCMDEJCVJFQjAxCQkJMjY3NQorYXF1aWxhCQkJTUFDSF9BUVVJTEEJCUFRVUlMQQkJCTI2NzYKK3NwYXJrX3Nsc19odzIJCU1BQ0hfU1BBUktfU0xTX0hXMglTUEFSS19TTFNfSFcyCQkyNjc3CitzaGVldmFfZXNhdGEJCU1BQ0hfRVNBVEFfU0hFRVZBUExVRwlFU0FUQV9TSEVFVkFQTFVHCTI2NzgKK3N1cmY3eDMwCQlNQUNIX1NVUkY3WDMwCQlTVVJGN1gzMAkJMjY3OQorbWljcm8yNDQwCQlNQUNIX01JQ1JPMjQ0MAkJTUlDUk8yNDQwCQkyNjgwCithbTI0NDAJCQlNQUNIX0FNMjQ0MAkJQU0yNDQwCQkJMjY4MQordHEyNDQwCQkJTUFDSF9UUTI0NDAJCVRRMjQ0MAkJCTI2ODIKK2xwYzI0NzhvZW0JCU1BQ0hfTFBDMjQ3OE9FTQkJTFBDMjQ3OE9FTQkJMjY4MworYWs4ODB4CQkJTUFDSF9BSzg4MFgJCUFLODgwWAkJCTI2ODQKK2NvYnJhMzUzMAkJTUFDSF9DT0JSQTM1MzAJCUNPQlJBMzUzMAkJMjY4NQorcG1wcGIJCQlNQUNIX1BNUFBCCQlQTVBQQgkJCTI2ODYKK3U2NzE1CQkJTUFDSF9VNjcxNQkJVTY3MTUJCQkyNjg3CitheGFyMTUwMF9zZW5kZXIJCU1BQ0hfQVhBUjE1MDBfU0VOREVSCUFYQVIxNTAwX1NFTkRFUgkJMjY4OAorZzMwX2R2YgkJCU1BQ0hfRzMwX0RWQgkJRzMwX0RWQgkJCTI2ODkKK3ZjMDg4eAkJCU1BQ0hfVkMwODhYCQlWQzA4OFgJCQkyNjkwCittaW9hNzAyCQkJTUFDSF9NSU9BNzAyCQlNSU9BNzAyCQkJMjY5MQoraHBtaW4JCQlNQUNIX0hQTUlOCQlIUE1JTgkJCTI2OTIKK2FrODgweGFrCQlNQUNIX0FLODgwWEFLCQlBSzg4MFhBSwkJMjY5MwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jIGIvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCmluZGV4IGY2MGE1NDAuLjdmM2Y1OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYworKysgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKQEAgLTE5NywxMCArMTk3LDEzIEBACiAJfQogCiAJLyoKLQkgKiBVcGRhdGUgdGhlIEZQU0NSIHdpdGggdGhlIGFkZGl0aW9uYWwgZXhjZXB0aW9uIGZsYWdzLgorCSAqIElmIGFueSBvZiB0aGUgc3RhdHVzIGZsYWdzIGFyZSBzZXQsIHVwZGF0ZSB0aGUgRlBTQ1IuCiAJICogQ29tcGFyaXNvbiBpbnN0cnVjdGlvbnMgYWx3YXlzIHJldHVybiBhdCBsZWFzdCBvbmUgb2YKIAkgKiB0aGVzZSBmbGFncyBzZXQuCiAJICovCisJaWYgKGV4Y2VwdGlvbnMgJiAoRlBTQ1JfTnxGUFNDUl9afEZQU0NSX0N8RlBTQ1JfVikpCisJCWZwc2NyICY9IH4oRlBTQ1JfTnxGUFNDUl9afEZQU0NSX0N8RlBTQ1JfVik7CisKIAlmcHNjciB8PSBleGNlcHRpb25zOwogCiAJZm14cihGUFNDUiwgZnBzY3IpOwpAQCAtNDMwLDcgKzQzMywxMSBAQAogICogc2F2ZWQgb25lLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIHB0cmFjZSBtZWNoYW5pc20uCiAgKi8KICNpZmRlZiBDT05GSUdfU01QCi12b2lkIHZmcF9zeW5jX3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQordm9pZCB2ZnBfc3luY19od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQoreworfQorCit2b2lkIHZmcF9mbHVzaF9od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQogewogCS8qCiAJICogT24gU01QIHN5c3RlbXMsIHRoZSBWRlAgc3RhdGUgaXMgYXV0b21hdGljYWxseSBzYXZlZCBhdCBldmVyeQpAQCAtNDQxLDM1ICs0NDgsNDggQEAKIAl0aHJlYWQtPnZmcHN0YXRlLmhhcmQuY3B1ID0gTlJfQ1BVUzsKIH0KICNlbHNlCi12b2lkIHZmcF9zeW5jX3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQordm9pZCB2ZnBfc3luY19od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQogewogCXVuc2lnbmVkIGludCBjcHUgPSBnZXRfY3B1KCk7Ci0JdTMyIGZwZXhjID0gZm1yeChGUEVYQyk7CiAKIAkvKgotCSAqIElmIFZGUCBpcyBlbmFibGVkLCB0aGUgcHJldmlvdXMgc3RhdGUgd2FzIGFscmVhZHkgc2F2ZWQgYW5kCi0JICogbGFzdF9WRlBfY29udGV4dCB1cGRhdGVkLgorCSAqIElmIHRoZSB0aHJlYWQgd2UncmUgaW50ZXJlc3RlZCBpbiBpcyB0aGUgY3VycmVudCBvd25lciBvZiB0aGUKKwkgKiBoYXJkd2FyZSBWRlAgc3RhdGUsIHRoZW4gd2UgbmVlZCB0byBzYXZlIGl0cyBzdGF0ZS4KIAkgKi8KLQlpZiAoZnBleGMgJiBGUEVYQ19FTikKLQkJZ290byBvdXQ7CisJaWYgKGxhc3RfVkZQX2NvbnRleHRbY3B1XSA9PSAmdGhyZWFkLT52ZnBzdGF0ZSkgeworCQl1MzIgZnBleGMgPSBmbXJ4KEZQRVhDKTsKIAotCWlmICghbGFzdF9WRlBfY29udGV4dFtjcHVdKQotCQlnb3RvIG91dDsKKwkJLyoKKwkJICogU2F2ZSB0aGUgbGFzdCBWRlAgc3RhdGUgb24gdGhpcyBDUFUuCisJCSAqLworCQlmbXhyKEZQRVhDLCBmcGV4YyB8IEZQRVhDX0VOKTsKKwkJdmZwX3NhdmVfc3RhdGUoJnRocmVhZC0+dmZwc3RhdGUsIGZwZXhjIHwgRlBFWENfRU4pOworCQlmbXhyKEZQRVhDLCBmcGV4Yyk7CisJfQorCisJcHV0X2NwdSgpOworfQorCit2b2lkIHZmcF9mbHVzaF9od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQoreworCXVuc2lnbmVkIGludCBjcHUgPSBnZXRfY3B1KCk7CiAKIAkvKgotCSAqIFNhdmUgdGhlIGxhc3QgVkZQIHN0YXRlIG9uIHRoaXMgQ1BVLgorCSAqIElmIHRoZSB0aHJlYWQgd2UncmUgaW50ZXJlc3RlZCBpbiBpcyB0aGUgY3VycmVudCBvd25lciBvZiB0aGUKKwkgKiBoYXJkd2FyZSBWRlAgc3RhdGUsIHRoZW4gd2UgbmVlZCB0byBzYXZlIGl0cyBzdGF0ZS4KIAkgKi8KLQlmbXhyKEZQRVhDLCBmcGV4YyB8IEZQRVhDX0VOKTsKLQl2ZnBfc2F2ZV9zdGF0ZShsYXN0X1ZGUF9jb250ZXh0W2NwdV0sIGZwZXhjKTsKLQlmbXhyKEZQRVhDLCBmcGV4Yyk7CisJaWYgKGxhc3RfVkZQX2NvbnRleHRbY3B1XSA9PSAmdGhyZWFkLT52ZnBzdGF0ZSkgeworCQl1MzIgZnBleGMgPSBmbXJ4KEZQRVhDKTsKIAotCS8qCi0JICogU2V0IHRoZSBjb250ZXh0IHRvIE5VTEwgdG8gZm9yY2UgYSByZWxvYWQgdGhlIG5leHQgdGltZSB0aGUgdGhyZWFkCi0JICogdXNlcyB0aGUgVkZQLgotCSAqLwotCWxhc3RfVkZQX2NvbnRleHRbY3B1XSA9IE5VTEw7CisJCWZteHIoRlBFWEMsIGZwZXhjICYgfkZQRVhDX0VOKTsKIAotb3V0OgorCQkvKgorCQkgKiBTZXQgdGhlIGNvbnRleHQgdG8gTlVMTCB0byBmb3JjZSBhIHJlbG9hZCB0aGUgbmV4dCB0aW1lCisJCSAqIHRoZSB0aHJlYWQgdXNlcyB0aGUgVkZQLgorCQkgKi8KKwkJbGFzdF9WRlBfY29udGV4dFtjcHVdID0gTlVMTDsKKwl9CisKIAlwdXRfY3B1KCk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZmVjZGRhMS4uYTlhZTMwYyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTMyNSw3ICszMjUsNyBAQAogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CiBleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpOworCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKTsKIAogLyoKICAqIEVuY29kZSBhbmQgZGVjb2RlIGEgc3dhcCBlbnRyeQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDB4LmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYwppbmRleCAxYWExZWE1Li5iMTNkMTg3IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYwpAQCAtMTMyNSw3ICsxMzI1LDcgQEAKIGF0MzJfYWRkX2RldmljZV9tY2kodW5zaWduZWQgaW50IGlkLCBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgKmRhdGEpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKnBkZXY7Ci0Jc3RydWN0IG1jaV9kbWFfc2xhdmUJCSpzbGF2ZTsKKwlzdHJ1Y3QgbWNpX2RtYV9kYXRhCSAgICAgICAgKnNsYXZlOwogCXUzMgkJCQlwaW9hX21hc2s7CiAJdTMyCQkJCXBpb2JfbWFzazsKIApAQCAtMTM0NCw3ICsxMzQ0LDkgQEAKIAkJCQlBUlJBWV9TSVpFKGF0bWVsX21jaTBfcmVzb3VyY2UpKSkKIAkJZ290byBmYWlsOwogCi0Jc2xhdmUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWNpX2RtYV9zbGF2ZSksIEdGUF9LRVJORUwpOworCXNsYXZlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1jaV9kbWFfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghc2xhdmUpCisJCWdvdG8gZmFpbDsKIAogCXNsYXZlLT5zZGF0YS5kbWFfZGV2ID0gJmR3X2RtYWMwX2RldmljZS5kZXY7CiAJc2xhdmUtPnNkYXRhLnJlZ193aWR0aCA9IERXX0RNQV9TTEFWRV9XSURUSF8zMkJJVDsKQEAgLTEzNTcsNyArMTM1OSw3IEBACiAKIAlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsCiAJCQkJc2l6ZW9mKHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSkpKQotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbF9mcmVlOwogCiAJLyogQ0xLIGxpbmUgaXMgY29tbW9uIHRvIGJvdGggc2xvdHMgKi8KIAlwaW9hX21hc2sgPSAxIDw8IDEwOwpAQCAtMTM4MSw3ICsxMzgzLDcgQEAKIAkJLyogU2xvdCBpcyB1bnVzZWQgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWxfZnJlZTsKIAl9CiAKIAlzZWxlY3RfcGVyaXBoZXJhbChQSU9BLCBwaW9hX21hc2ssIFBFUklQSF9BLCAwKTsKQEAgLTE0MDgsNyArMTQxMCw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICghZGF0YS0+c2xvdFswXS5idXNfd2lkdGgpCi0JCQlnb3RvIGZhaWw7CisJCQlnb3RvIGZhaWxfZnJlZTsKIAogCQlkYXRhLT5zbG90WzFdLmJ1c193aWR0aCA9IDA7CiAJCWJyZWFrOwpAQCAtMTQxOSw5ICsxNDIxLDEwIEBACiAJcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKIAlyZXR1cm4gcGRldjsKIAorZmFpbF9mcmVlOgorCWtmcmVlKHNsYXZlKTsKIGZhaWw6CiAJZGF0YS0+ZG1hX3NsYXZlID0gTlVMTDsKLQlrZnJlZShzbGF2ZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbW0vdGxiLmMgYi9hcmNoL2F2cjMyL21tL3RsYi5jCmluZGV4IDA2Njc3YmUuLjBkYTIzMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbW0vdGxiLmMKKysrIGIvYXJjaC9hdnIzMi9tbS90bGIuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiB9CiAKIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTEwLDcgKzExMCw3IEBACiAJCXJldHVybjsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl1cGRhdGVfZHRsYihhZGRyZXNzLCBwdGUpOworCXVwZGF0ZV9kdGxiKGFkZHJlc3MsICpwdGVwKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvaXJxLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2lycS5jCmluZGV4IDVkNzVmNzcuLjFhNjFlZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgY3Jpc3YxMF9pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUgPSAgICAiQ1JJU3YxMCIsCisJLm5hbWUgPSAgICAgICAgIkNSSVN2MTAiLAogCS5zdGFydHVwID0gICAgIHN0YXJ0dXBfY3Jpc3YxMF9pcnEsCiAJLnNodXRkb3duID0gICAgc2h1dGRvd25fY3Jpc3YxMF9pcnEsCiAJLmVuYWJsZSA9ICAgICAgZW5hYmxlX2NyaXN2MTBfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNpL2Jpb3MuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjaS9iaW9zLmMKaW5kZXggNzdlZTMxOS4uZDRiOWMzNiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNpL2Jpb3MuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2kvYmlvcy5jCkBAIC00MSwxOCArNDEsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZAotcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKK3Jlc291cmNlX3NpemVfdAorcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7Ci0JaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0JCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAotCQlpZiAoc3RhcnQgJiAweDMwMCkgewotCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCX0KLQl9CisJaWYgKChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgJiYgKHN0YXJ0ICYgMHgzMDApKQorCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKKworCXJldHVybiBzdGFydAogfQogCiBpbnQgcGNpYmlvc19lbmFibGVfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBtYXNrKQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaXJxLmMKaW5kZXggNTc2NjhkYi4uYjYyNDExOSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jCkBAIC0zMzYsNyArMzM2LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjcmlzdjMyX2lycV90eXBlID0gewotCS50eXBlbmFtZSA9ICAgICJDUklTdjMyIiwKKwkubmFtZSA9ICAgICAgICAiQ1JJU3YzMiIsCiAJLnN0YXJ0dXAgPSAgICAgc3RhcnR1cF9jcmlzdjMyX2lycSwKIAkuc2h1dGRvd24gPSAgICBzaHV0ZG93bl9jcmlzdjMyX2lycSwKIAkuZW5hYmxlID0gICAgICBlbmFibGVfY3Jpc3YzMl9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3Bpbm11eC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9waW5tdXguYwppbmRleCA2ZWI1NGVhLi5mNmYzNjM3IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3Bpbm11eC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcGlubXV4LmMKQEAgLTU0LDcgKzU0LDcgQEAKIAogCWNyaXN2MzJfcGlubXV4X2luaXQoKTsKIAotCWlmIChwb3J0ID4gUE9SVFMpCisJaWYgKHBvcnQgPiBQT1JUUyB8fCBwb3J0IDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGlubXV4X2xvY2ssIGZsYWdzKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCiAJY3Jpc3YzMl9waW5tdXhfaW5pdCgpOwogCi0JaWYgKHBvcnQgPiBQT1JUUykKKwlpZiAocG9ydCA+IFBPUlRTIHx8IHBvcnQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5tdXhfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvcGlubXV4LmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9waW5tdXguYwppbmRleCAwYTI4YzliLi4xODY0OGVmIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9waW5tdXguYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9waW5tdXguYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAKIAljcmlzdjMyX3Bpbm11eF9pbml0KCk7CiAKLQlpZiAocG9ydCA+IFBPUlRTKQorCWlmIChwb3J0ID4gUE9SVFMgfHwgcG9ydCA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbm11eF9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9waW5tdXguYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL3Bpbm11eC5jCmluZGV4IGQ3MjJhZDkuLjM4ZjI5ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL3Bpbm11eC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL3Bpbm11eC5jCkBAIC01NCw3ICs1NCw3IEBACiAKIAljcmlzdjMyX3Bpbm11eF9pbml0KCk7CiAKLQlpZiAocG9ydCA+IFBPUlRTKQorCWlmIChwb3J0ID4gUE9SVFMgfHwgcG9ydCA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbm11eF9sb2NrLCBmbGFncyk7CkBAIC0xOTUsNyArMTk1LDcgQEAKIAogCWNyaXN2MzJfcGlubXV4X2luaXQoKTsKIAotCWlmIChwb3J0ID4gUE9SVFMpCisJaWYgKHBvcnQgPiBQT1JUUyB8fCBwb3J0IDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGlubXV4X2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDFmY2NlMDAuLjk5ZWE2Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjcwLDcgKzI3MCw3IEBACiAgKiBBY3R1YWxseSBJIGFtIG5vdCBzdXJlIG9uIHdoYXQgdGhpcyBjb3VsZCBiZSB1c2VkIGZvci4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLAotCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQorCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCmluZGV4IGI1Y2UwNzIuLjZkN2I5ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYwpAQCAtNjMsNyArNjMsNyBAQAogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbmRpZgotCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPnR5cGVuYW1lKTsKKwkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CiAKIAkJZm9yIChhY3Rpb249YWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAyMmM2MDY5Li5jMThiMGQzIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC01MDUsNyArNTA1LDcgQEAKIC8qCiAgKiBwcmVsb2FkIGluZm9ybWF0aW9uIGFib3V0IGEgbmV3bHkgaW5zdGFudGlhdGVkIFBURSBpbnRvIHRoZSBTQ1IwL1NDUjEgUEdFIGNhY2hlCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCXVuc2lnbmVkIGxvbmcgYW1wcjsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmMgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5jCmluZGV4IDU2NmJkZWIuLjFlZDE1ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmMKKysrIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYwpAQCAtMzIsMTggKzMyLDE2IEBACiAgKiBidXQgd2Ugd2FudCB0byB0cnkgdG8gYXZvaWQgYWxsb2NhdGluZyBhdCAweDI5MDAtMHgyYmZmCiAgKiB3aGljaCBtaWdodCBoYXZlIGJlIG1pcnJvcmVkIGF0IDB4MDEwMC0weDAzZmYuLgogICovCi12b2lkCi1wY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorcmVzb3VyY2Vfc2l6ZV90CitwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKLQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCi0JCWlmIChzdGFydCAmIDB4MzAwKSB7Ci0JCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKLQkJCXJlcy0+c3RhcnQgPSBzdGFydDsKLQkJfQotCX0KKwlpZiAoKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSAmJiAoc3RhcnQgJiAweDMwMCkpCisJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOworCisJcmV0dXJuIHN0YXJ0CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9tbS9tZW1vcnkuYyBiL2FyY2gvaDgzMDAvbW0vbWVtb3J5LmMKaW5kZXggY2NkNmFkZS4uNDBkOGFhOCAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9tbS9tZW1vcnkuYworKysgYi9hcmNoL2g4MzAwL21tL21lbW9yeS5jCkBAIC00NCw4ICs0NCw4IEBACiB7CiB9CiAKLS8qIE1hcCBzb21lIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuIFRoZQotICogY29kZSBpcyBjb3BpZWQgYW5kIGFkYXB0ZWQgZnJvbSBtYXBfY2h1bmsoKS4KKy8qCisgKiBNYXAgc29tZSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIGludG8gdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlLgogICovCiAKIHVuc2lnbmVkIGxvbmcga2VybmVsX21hcCh1bnNpZ25lZCBsb25nIHBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IDJkN2Y1NmEuLjlhNTBkN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC00OTksMjMgKzQ5OSw2IEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gUFJPQ19LQ09SRQogCi1jb25maWcgSUEzMl9TVVBQT1JUCi0JYm9vbCAiU3VwcG9ydCBmb3IgTGludXgveDg2IGJpbmFyaWVzIgotCWhlbHAKLQkgIElBLTY0IHByb2Nlc3NvcnMgY2FuIGV4ZWN1dGUgSUEtMzIgKFg4NikgaW5zdHJ1Y3Rpb25zLiAgQnkKLQkgIHNheWluZyBZIGhlcmUsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIElBLTMyIHN5c3RlbSBjYWxsCi0JICBlbXVsYXRpb24gc3VwcG9ydCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byB0cmFuc3BhcmVudGx5Ci0JICBydW4gSUEtMzIgTGludXggYmluYXJpZXMgb24gYW4gSUEtNjQgTGludXggc3lzdGVtLgotCSAgSWYgaW4gZG91YnQsIHNheSBZLgotCi1jb25maWcgQ09NUEFUCi0JYm9vbAotCWRlcGVuZHMgb24gSUEzMl9TVVBQT1JUCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlQKLQlkZWZfYm9vbCBDT01QQVQKLQogY29uZmlnIElBNjRfTUNBX1JFQ09WRVJZCiAJdHJpc3RhdGUgIk1DQSByZWNvdmVyeSBmcm9tIGVycm9ycyBvdGhlciB0aGFuIFRMQi4iCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9NYWtlZmlsZSBiL2FyY2gvaWE2NC9NYWtlZmlsZQppbmRleCA0NzVlMjcyLi44YWUwZDI2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L01ha2VmaWxlCkBAIC00Niw3ICs0Niw2IEBACiAKIGxpYnMteQkJCQkrPSBhcmNoL2lhNjQvbGliLwogY29yZS15CQkJCSs9IGFyY2gvaWE2NC9rZXJuZWwvIGFyY2gvaWE2NC9tbS8KLWNvcmUtJChDT05GSUdfSUEzMl9TVVBQT1JUKQkrPSBhcmNoL2lhNjQvaWEzMi8KIGNvcmUtJChDT05GSUdfSUE2NF9ESUcpIAkrPSBhcmNoL2lhNjQvZGlnLwogY29yZS0kKENPTkZJR19JQTY0X0RJR19WVEQpIAkrPSBhcmNoL2lhNjQvZGlnLwogY29yZS0kKENPTkZJR19JQTY0X0dFTkVSSUMpIAkrPSBhcmNoL2lhNjQvZGlnLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKaW5kZXggYWNlNDEwOS4uMzEyYjEyMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZworKysgYi9hcmNoL2lhNjQvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCkBAIC0xMzEsOCArMTMxLDYgQEAKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQogIyBDT05GSUdfVklSVFVBTF9NRU1fTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19JQTMyX1NVUFBPUlQ9eQotQ09ORklHX0NPTVBBVD15CiAjIENPTkZJR19JQTY0X01DQV9SRUNPVkVSWSBpcyBub3Qgc2V0CiBDT05GSUdfUEVSRk1PTj15CiBDT05GSUdfSUE2NF9QQUxJTkZPPXkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL2dlbmVyaWNfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKaW5kZXggNzU2NDU0OS4uNmE0Y2M1MCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKQEAgLTIwNSw4ICsyMDUsNiBAQAogQ09ORklHX0hPTEVTX0lOX1pPTkU9eQogQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklEPXkKIENPTkZJR19IQVZFX0FSQ0hfTk9ERURBVEFfRVhURU5TSU9OPXkKLUNPTkZJR19JQTMyX1NVUFBPUlQ9eQotQ09ORklHX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UPXkKIENPTkZJR19JQTY0X01DQV9SRUNPVkVSWT15CiBDT05GSUdfUEVSRk1PTj15CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy9nZW5zcGFyc2VfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3MvZ2Vuc3BhcnNlX2RlZmNvbmZpZwppbmRleCBlODZmYmQzLi4yZGMxODViIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy9nZW5zcGFyc2VfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL2dlbnNwYXJzZV9kZWZjb25maWcKQEAgLTEzOSw4ICsxMzksNiBAQAogQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0RFRkFVTFQ9eQogQ09ORklHX05VTUE9eQogQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklEPXkKLUNPTkZJR19JQTMyX1NVUFBPUlQ9eQotQ09ORklHX0NPTVBBVD15CiBDT05GSUdfSUE2NF9NQ0FfUkVDT1ZFUlk9eQogQ09ORklHX1BFUkZNT049eQogQ09ORklHX0lBNjRfUEFMSU5GTz15CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy9zaW1fZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3Mvc2ltX2RlZmNvbmZpZwppbmRleCA1NDZhNzcyLi4yMWEyM2NkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy9zaW1fZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL3NpbV9kZWZjb25maWcKQEAgLTEzMCw4ICsxMzAsNiBAQAogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CiAjIENPTkZJR19WSVJUVUFMX01FTV9NQVAgaXMgbm90IHNldAotQ09ORklHX0lBMzJfU1VQUE9SVD15Ci1DT05GSUdfQ09NUEFUPXkKICMgQ09ORklHX0lBNjRfTUNBX1JFQ09WRVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZNT04gaXMgbm90IHNldAogQ09ORklHX0lBNjRfUEFMSU5GTz1tCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy90aWdlcl9kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy90aWdlcl9kZWZjb25maWcKaW5kZXggYzUyMmVkZi4uYzVhNWVhOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3MvdGlnZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL3RpZ2VyX2RlZmNvbmZpZwpAQCAtMTU0LDcgKzE1NCw2IEBACiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1ZJUlRVQUxfTUVNX01BUD15CiBDT05GSUdfSE9MRVNfSU5fWk9ORT15Ci0jIENPTkZJR19JQTMyX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0lBNjRfTUNBX1JFQ09WRVJZPXkKIENPTkZJR19QRVJGTU9OPXkKIENPTkZJR19JQTY0X1BBTElORk89eQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2NvbmZpZ3MveGVuX2RvbXVfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3MveGVuX2RvbXVfZGVmY29uZmlnCmluZGV4IDBiYjA3MTQuLmM2N2VhZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9jb25maWdzL3hlbl9kb211X2RlZmNvbmZpZworKysgYi9hcmNoL2lhNjQvY29uZmlncy94ZW5fZG9tdV9kZWZjb25maWcKQEAgLTIwMCw4ICsyMDAsNiBAQAogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19WSVJUVUFMX01FTV9NQVA9eQogQ09ORklHX0hPTEVTX0lOX1pPTkU9eQotIyBDT05GSUdfSUEzMl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCBpcyBub3Qgc2V0CiBDT05GSUdfSUE2NF9NQ0FfUkVDT1ZFUlk9eQogQ09ORklHX1BFUkZNT049eQogQ09ORklHX0lBNjRfUEFMSU5GTz15CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy96eDFfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3MvengxX2RlZmNvbmZpZwppbmRleCA1MTRmMDYzLi4zY2VjNjViIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy96eDFfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL3p4MV9kZWZjb25maWcKQEAgLTE1MCw4ICsxNTAsNiBAQAogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19WSVJUVUFMX01FTV9NQVA9eQogQ09ORklHX0hPTEVTX0lOX1pPTkU9eQotQ09ORklHX0lBMzJfU1VQUE9SVD15Ci1DT05GSUdfQ09NUEFUPXkKIENPTkZJR19JQTY0X01DQV9SRUNPVkVSWT15CiBDT05GSUdfUEVSRk1PTj15CiBDT05GSUdfSUE2NF9QQUxJTkZPPXkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9jb21tb24vYW1sX25mdy5jIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9hbWxfbmZ3LmMKaW5kZXggNGFiZDJjNzkuLjIyMDc4NDggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9jb21tb24vYW1sX25mdy5jCisrKyBiL2FyY2gvaWE2NC9ocC9jb21tb24vYW1sX25mdy5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJCSAgICAgYy0+YXJnWzRdLCBjLT5hcmdbNV0sIGMtPmFyZ1s2XSwgYy0+YXJnWzddKTsKIH0KIAotc3RhdGljIHZvaWQgYW1sX25md19yZWFkX2FyZyh1OCAqb2Zmc2V0LCB1MzIgYml0X3dpZHRoLCBhY3BpX2ludGVnZXIgKnZhbHVlKQorc3RhdGljIHZvaWQgYW1sX25md19yZWFkX2FyZyh1OCAqb2Zmc2V0LCB1MzIgYml0X3dpZHRoLCB1NjQgKnZhbHVlKQogewogCXN3aXRjaCAoYml0X3dpZHRoKSB7CiAJY2FzZSA4OgpAQCAtOTUsNyArOTUsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYW1sX25md193cml0ZV9hcmcodTggKm9mZnNldCwgdTMyIGJpdF93aWR0aCwgYWNwaV9pbnRlZ2VyICp2YWx1ZSkKK3N0YXRpYyB2b2lkIGFtbF9uZndfd3JpdGVfYXJnKHU4ICpvZmZzZXQsIHUzMiBiaXRfd2lkdGgsIHU2NCAqdmFsdWUpCiB7CiAJc3dpdGNoIChiaXRfd2lkdGgpIHsKIAljYXNlIDg6CkBAIC0xMTQsNyArMTE0LDcgQEAKIH0KIAogc3RhdGljIGFjcGlfc3RhdHVzIGFtbF9uZndfaGFuZGxlcih1MzIgZnVuY3Rpb24sIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAotCXUzMiBiaXRfd2lkdGgsIGFjcGlfaW50ZWdlciAqdmFsdWUsIHZvaWQgKmhhbmRsZXJfY29udGV4dCwKKwl1MzIgYml0X3dpZHRoLCB1NjQgKnZhbHVlLCB2b2lkICpoYW5kbGVyX2NvbnRleHQsCiAJdm9pZCAqcmVnaW9uX2NvbnRleHQpCiB7CiAJc3RydWN0IGlhNjRfbmZ3X2NvbnRleHQgKmNvbnRleHQgPSBoYW5kbGVyX2NvbnRleHQ7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9NYWtlZmlsZSBiL2FyY2gvaWE2NC9pYTMyL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWFkOGM3Li4wMDAwMDAwCi0tLSBhL2FyY2gvaWE2NC9pYTMyL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIGlhMzIga2VybmVsIGVtdWxhdGlvbiBzdWJzeXN0ZW0uCi0jCi0KLW9iai15IDo9IGlhMzJfZW50cnkubyBzeXNfaWEzMi5vIGlhMzJfc2lnbmFsLm8gXAotCSBpYTMyX3N1cHBvcnQubyBpYTMyX3RyYXBzLm8gYmluZm10X2VsZjMyLm8gaWEzMl9sZHQubwotb2JqLSQoQ09ORklHX0FVRElUKSArPSBhdWRpdC5vCi0KLSMgRG9uJ3QgbGV0IEdDQyB1c2VzIGYxNi1mMzEgc28gdGhhdCBzYXZlX2lhMzJfZnBzdGF0ZV9saXZlKCkgYW5kCi0jIHJlc3RvcmVfaWEzMl9mcHN0YXRlX2xpdmUoKSBjYW4gYmUgc3VyZSB0aGUgbGl2ZSByZWdpc3RlciBjb250YWluIHVzZXItbGV2ZWwgc3RhdGUuCi1DRkxBR1NfaWEzMl9zaWduYWwubyArPSAtbWZpeGVkLXJhbmdlPWYxNi1mMzEKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2F1ZGl0LmMgYi9hcmNoL2lhNjQvaWEzMi9hdWRpdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzkzZGRkLi4wMDAwMDAwCi0tLSBhL2FyY2gvaWE2NC9pYTMyL2F1ZGl0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0jaW5jbHVkZSAiLi4vLi4veDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oIgotCi11bnNpZ25lZCBpYTMyX2Rpcl9jbGFzc1tdID0gewotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X2Rpcl93cml0ZS5oPgotfjBVCi19OwotCi11bnNpZ25lZCBpYTMyX2NoYXR0cl9jbGFzc1tdID0gewotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmg+Ci1+MFUKLX07Ci0KLXVuc2lnbmVkIGlhMzJfd3JpdGVfY2xhc3NbXSA9IHsKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF93cml0ZS5oPgotfjBVCi19OwotCi11bnNpZ25lZCBpYTMyX3JlYWRfY2xhc3NbXSA9IHsKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9yZWFkLmg+Ci1+MFUKLX07Ci0KLXVuc2lnbmVkIGlhMzJfc2lnbmFsX2NsYXNzW10gPSB7Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfc2lnbmFsLmg+Ci1+MFUKLX07Ci0KLWludCBpYTMyX2NsYXNzaWZ5X3N5c2NhbGwodW5zaWduZWQgc3lzY2FsbCkKLXsKLQlzd2l0Y2goc3lzY2FsbCkgewotCWNhc2UgX19OUl9vcGVuOgotCQlyZXR1cm4gMjsKLQljYXNlIF9fTlJfb3BlbmF0OgotCQlyZXR1cm4gMzsKLQljYXNlIF9fTlJfc29ja2V0Y2FsbDoKLQkJcmV0dXJuIDQ7Ci0JY2FzZSBfX05SX2V4ZWN2ZToKLQkJcmV0dXJuIDU7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDE7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMgYi9hcmNoL2lhNjQvaWEzMi9iaW5mbXRfZWxmMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY5NTUyYi4uMDAwMDAwMAotLS0gYS9hcmNoL2lhNjQvaWEzMi9iaW5mbXRfZWxmMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0vKgotICogSUEtMzIgRUxGIHN1cHBvcnQuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IEFydW4gU2hhcm1hIDxhcnVuLnNoYXJtYUBpbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgSGV3bGV0dC1QYWNrYXJkIENvCi0gKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+Ci0gKgotICogMDYvMTYvMDAJQS4gTWFsbGljawlpbml0aWFsaXplIGNzZC9zc2QvdHNzZC9jZmxnIGZvciBpYTMyX2xvYWRfc3RhdGUKLSAqIDA0LzEzLzAxCUQuIE1vc2Jlcmdlcglkcm9wcGVkIHNhdmluZyB0c3NkIGluIGFyLmsxLS0taXQncyBub3QgbmVlZGVkCi0gKiAwOS8xNC8wMQlELiBNb3NiZXJnZXIJZml4ZWQgbWVtb3J5IG1hbmFnZW1lbnQgZm9yIGdkdC90c3MgcGFnZQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KLQotI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgotI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KLQotI2luY2x1ZGUgImlhMzJwcml2LmgiCi0jaW5jbHVkZSAiZWxmY29yZTMyLmgiCi0KLS8qIE92ZXJyaWRlIHNvbWUgZnVuY3Rpb24gbmFtZXMgKi8KLSN1bmRlZiBzdGFydF90aHJlYWQKLSNkZWZpbmUgc3RhcnRfdGhyZWFkCQkJaWEzMl9zdGFydF90aHJlYWQKLSNkZWZpbmUgZWxmX2Zvcm1hdAkJCWVsZjMyX2Zvcm1hdAotI2RlZmluZSBpbml0X2VsZl9iaW5mbXQJCQlpbml0X2VsZjMyX2JpbmZtdAotI2RlZmluZSBleGl0X2VsZl9iaW5mbXQJCQlleGl0X2VsZjMyX2JpbmZtdAotCi0jdW5kZWYgQ0xPQ0tTX1BFUl9TRUMKLSNkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJSUEzMl9DTE9DS1NfUEVSX1NFQwotCi1leHRlcm4gdm9pZCBpYTY0X2VsZjMyX2luaXQgKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLQotc3RhdGljIHZvaWQgZWxmMzJfc2V0X3BlcnNvbmFsaXR5ICh2b2lkKTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19hdHRyaWJ1dGUgKCh1bnVzZWQpKQotcmFuZG9taXplX3N0YWNrX3RvcCh1bnNpZ25lZCBsb25nIHN0YWNrX3RvcCk7Ci0KLSNkZWZpbmUgc2V0dXBfYXJnX3BhZ2VzKGJwcm0sdG9zLGV4ZWMpCQlpYTMyX3NldHVwX2FyZ19wYWdlcyhicHJtLGV4ZWMpCi0jZGVmaW5lIGVsZl9tYXAJCQkJZWxmMzJfbWFwCi0KLSN1bmRlZiBTRVRfUEVSU09OQUxJVFkKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KQllbGYzMl9zZXRfcGVyc29uYWxpdHkoKQotCi0jZGVmaW5lIGVsZl9yZWFkX2ltcGxpZXNfZXhlYyhleCwgaGF2ZV9wdF9nbnVfc3RhY2spCSghKGhhdmVfcHRfZ251X3N0YWNrKSkKLQotLyogVWdseSBidXQgYXZvaWRzIGR1cGxpY2F0aW9uICovCi0jaW5jbHVkZSAiLi4vLi4vLi4vZnMvYmluZm10X2VsZi5jIgotCi1leHRlcm4gc3RydWN0IHBhZ2UgKmlhMzJfc2hhcmVkX3BhZ2VbXTsKLWV4dGVybiB1bnNpZ25lZCBsb25nICppYTMyX2dkdDsKLWV4dGVybiBzdHJ1Y3QgcGFnZSAqaWEzMl9nYXRlX3BhZ2U7Ci0KLWludAotaWEzMl9pbnN0YWxsX3NoYXJlZF9wYWdlIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCi17Ci0Jdm1mLT5wYWdlID0gaWEzMl9zaGFyZWRfcGFnZVtzbXBfcHJvY2Vzc29yX2lkKCldOwotCWdldF9wYWdlKHZtZi0+cGFnZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludAotaWEzMl9pbnN0YWxsX2dhdGVfcGFnZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQotewotCXZtZi0+cGFnZSA9IGlhMzJfZ2F0ZV9wYWdlOwotCWdldF9wYWdlKHZtZi0+cGFnZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpYTMyX3NoYXJlZF9wYWdlX3ZtX29wcyA9IHsKLQkuZmF1bHQgPSBpYTMyX2luc3RhbGxfc2hhcmVkX3BhZ2UKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaWEzMl9nYXRlX3BhZ2Vfdm1fb3BzID0gewotCS5mYXVsdCA9IGlhMzJfaW5zdGFsbF9nYXRlX3BhZ2UKLX07Ci0KLXZvaWQKLWlhNjRfZWxmMzJfaW5pdCAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0KLQkvKgotCSAqIE1hcCBHRFQgYmVsb3cgNEdCLCB3aGVyZSB0aGUgcHJvY2Vzc29yIGNhbiBmaW5kIGl0LiAgV2UgbmVlZCB0byBtYXAKLQkgKiBpdCB3aXRoIHByaXZpbGVnZSBsZXZlbCAzIGJlY2F1c2UgdGhlIElWRSB1c2VzIG5vbi1wcml2aWxlZ2VkIGFjY2Vzc2VzIHRvIHRoZXNlCi0JICogdGFibGVzLiAgSUEtMzIgc2VnbWVudGF0aW9uIGlzIHVzZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IElBLTMyIGFjY2Vzc2VzIHRvIHRoZW0uCi0JICovCi0Jdm1hID0ga21lbV9jYWNoZV96YWxsb2Modm1fYXJlYV9jYWNoZXAsIEdGUF9LRVJORUwpOwotCWlmICh2bWEpIHsKLQkJdm1hLT52bV9tbSA9IGN1cnJlbnQtPm1tOwotCQl2bWEtPnZtX3N0YXJ0ID0gSUEzMl9HRFRfT0ZGU0VUOwotCQl2bWEtPnZtX2VuZCA9IHZtYS0+dm1fc3RhcnQgKyBQQUdFX1NJWkU7Ci0JCXZtYS0+dm1fcGFnZV9wcm90ID0gUEFHRV9TSEFSRUQ7Ci0JCXZtYS0+dm1fZmxhZ3MgPSBWTV9SRUFEfFZNX01BWVJFQUR8Vk1fUkVTRVJWRUQ7Ci0JCXZtYS0+dm1fb3BzID0gJmlhMzJfc2hhcmVkX3BhZ2Vfdm1fb3BzOwotCQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQl7Ci0JCQlpZiAoaW5zZXJ0X3ZtX3N0cnVjdChjdXJyZW50LT5tbSwgdm1hKSkgewotCQkJCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgdm1hKTsKLQkJCQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQkJCQlCVUcoKTsKLQkJCX0KLQkJfQotCQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQl9Ci0KLQkvKgotCSAqIFdoZW4gdXNlciBzdGFjayBpcyBub3QgZXhlY3V0YWJsZSwgcHVzaCBzaWdyZXR1cm4gY29kZSB0byBzdGFjayBtYWtlcwotCSAqIHNlZ21lbnRhdGlvbiBmYXVsdCByYWlzZWQgd2hlbiByZXR1cm5pbmcgdG8ga2VybmVsLiBTbyBub3cgc2lncmV0dXJuCi0JICogY29kZSBpcyBsb2NrZWQgaW4gc3BlY2lmaWMgZ2F0ZSBwYWdlLCB3aGljaCBpcyBwb2ludGVkIGJ5IHByZXRjb2RlCi0JICogd2hlbiBzZXR1cF9mcmFtZV9pYTMyCi0JICovCi0Jdm1hID0ga21lbV9jYWNoZV96YWxsb2Modm1fYXJlYV9jYWNoZXAsIEdGUF9LRVJORUwpOwotCWlmICh2bWEpIHsKLQkJdm1hLT52bV9tbSA9IGN1cnJlbnQtPm1tOwotCQl2bWEtPnZtX3N0YXJ0ID0gSUEzMl9HQVRFX09GRlNFVDsKLQkJdm1hLT52bV9lbmQgPSB2bWEtPnZtX3N0YXJ0ICsgUEFHRV9TSVpFOwotCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IFBBR0VfQ09QWV9FWEVDOwotCQl2bWEtPnZtX2ZsYWdzID0gVk1fUkVBRCB8IFZNX01BWVJFQUQgfCBWTV9FWEVDCi0JCQkJfCBWTV9NQVlFWEVDIHwgVk1fUkVTRVJWRUQ7Ci0JCXZtYS0+dm1fb3BzID0gJmlhMzJfZ2F0ZV9wYWdlX3ZtX29wczsKLQkJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQkJewotCQkJaWYgKGluc2VydF92bV9zdHJ1Y3QoY3VycmVudC0+bW0sIHZtYSkpIHsKLQkJCQlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIHZtYSk7Ci0JCQkJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JCQkJQlVHKCk7Ci0JCQl9Ci0JCX0KLQkJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JfQotCi0JLyoKLQkgKiBJbnN0YWxsIExEVCBhcyBhbm9ueW1vdXMgbWVtb3J5LiAgVGhpcyBnaXZlcyB1cyBhbGwtemVybyBzZWdtZW50IGRlc2NyaXB0b3JzCi0JICogdW50aWwgYSB0YXNrIG1vZGlmaWVzIHRoZW0gdmlhIG1vZGlmeV9sZHQoKS4KLQkgKi8KLQl2bWEgPSBrbWVtX2NhY2hlX3phbGxvYyh2bV9hcmVhX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHZtYSkgewotCQl2bWEtPnZtX21tID0gY3VycmVudC0+bW07Ci0JCXZtYS0+dm1fc3RhcnQgPSBJQTMyX0xEVF9PRkZTRVQ7Ci0JCXZtYS0+dm1fZW5kID0gdm1hLT52bV9zdGFydCArIFBBR0VfQUxJR04oSUEzMl9MRFRfRU5UUklFUypJQTMyX0xEVF9FTlRSWV9TSVpFKTsKLQkJdm1hLT52bV9wYWdlX3Byb3QgPSBQQUdFX1NIQVJFRDsKLQkJdm1hLT52bV9mbGFncyA9IFZNX1JFQUR8Vk1fV1JJVEV8Vk1fTUFZUkVBRHxWTV9NQVlXUklURTsKLQkJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQkJewotCQkJaWYgKGluc2VydF92bV9zdHJ1Y3QoY3VycmVudC0+bW0sIHZtYSkpIHsKLQkJCQlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIHZtYSk7Ci0JCQkJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JCQkJQlVHKCk7Ci0JCQl9Ci0JCX0KLQkJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JfQotCi0JaWE2NF9wc3IocmVncyktPmFjID0gMDsJCS8qIHR1cm4gb2ZmIGFsaWdubWVudCBjaGVja2luZyAqLwotCXJlZ3MtPmxvYWRycyA9IDA7Ci0JLyoKLQkgKiAgQWNjb3JkaW5nIHRvIHRoZSBBQkkgJWVkeCBwb2ludHMgdG8gYW4gYGF0ZXhpdCcgaGFuZGxlci4gIFNpbmNlIHdlIGRvbid0IGhhdmUKLQkgKiAgb25lIHdlJ2xsIHNldCBpdCB0byAwIGFuZCBpbml0aWFsaXplIGFsbCB0aGUgb3RoZXIgcmVnaXN0ZXJzIGp1c3QgdG8gbWFrZQotCSAqICB0aGluZ3MgbW9yZSBkZXRlcm1pbmlzdGljLCBhbGEgdGhlIGkzODYgaW1wbGVtZW50YXRpb24uCi0JICovCi0JcmVncy0+cjggPSAwOwkvKiAlZWF4ICovCi0JcmVncy0+cjExID0gMDsJLyogJWVieCAqLwotCXJlZ3MtPnI5ID0gMDsJLyogJWVjeCAqLwotCXJlZ3MtPnIxMCA9IDA7CS8qICVlZHggKi8KLQlyZWdzLT5yMTMgPSAwOwkvKiAlZWJwICovCi0JcmVncy0+cjE0ID0gMDsJLyogJWVzaSAqLwotCXJlZ3MtPnIxNSA9IDA7CS8qICVlZGkgKi8KLQotCWN1cnJlbnQtPnRocmVhZC5lZmxhZyA9IElBMzJfRUZMQUc7Ci0JY3VycmVudC0+dGhyZWFkLmZzciA9IElBMzJfRlNSX0RFRkFVTFQ7Ci0JY3VycmVudC0+dGhyZWFkLmZjciA9IElBMzJfRkNSX0RFRkFVTFQ7Ci0JY3VycmVudC0+dGhyZWFkLmZpciA9IDA7Ci0JY3VycmVudC0+dGhyZWFkLmZkciA9IDA7Ci0KLQkvKgotCSAqIFNldHVwIEdEVEQuICBOb3RlOiBHRFREIGlzIHRoZSBkZXNjcmFtYmxlZCB2ZXJzaW9uIG9mIHRoZSBwc2V1ZG8tZGVzY3JpcHRvcgotCSAqIGZvcm1hdCBkZWZpbmVkIGJ5IEZpZ3VyZSAzLTExICJQc2V1ZG8tRGVzY3JpcHRvciBGb3JtYXQiIGluIHRoZSBJQS0zMgotCSAqIGFyY2hpdGVjdHVyZSBtYW51YWwuIEFsc28gbm90ZSB0aGF0IHRoZSBvbmx5IGZpZWxkcyB0aGF0IGFyZSBub3QgaWdub3JlZCBhcmUKLQkgKiBgYmFzZScsIGBsaW1pdCcsICdHJywgYFAnIChtdXN0IGJlIDEpIGFuZCBgUycgKG11c3QgYmUgMCkuCi0JICovCi0JcmVncy0+cjMxID0gSUEzMl9TRUdfVU5TQ1JBTUJMRShJQTMyX1NFR19ERVNDUklQVE9SKElBMzJfR0RUX09GRlNFVCwgSUEzMl9QQUdFX1NJWkUgLSAxLAotCQkJCQkJCSAgICAwLCAwLCAwLCAxLCAwLCAwLCAwKSk7Ci0JLyogU2V0dXAgdGhlIHNlZ21lbnQgc2VsZWN0b3JzICovCi0JcmVncy0+cjE2ID0gKF9fVVNFUl9EUyA8PCAxNikgfCBfX1VTRVJfRFM7IC8qIEVTID09IERTLCBHUywgRlMgYXJlIHplcm8gKi8KLQlyZWdzLT5yMTcgPSAoX19VU0VSX0RTIDw8IDE2KSB8IF9fVVNFUl9DUzsgLyogU1MsIENTOyBpYTMyX2xvYWRfc3RhdGUoKSBzZXRzIFRTUyBhbmQgTERUICovCi0KLQlpYTMyX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9ycyhjdXJyZW50KTsKLQlpYTMyX2xvYWRfc3RhdGUoY3VycmVudCk7Ci19Ci0KLS8qCi0gKiBVbmRvIHRoZSBvdmVycmlkZSBvZiBzZXR1cF9hcmdfcGFnZXMoKSB3aXRob3V0IHRoaXMgaWEzMl9zZXR1cF9hcmdfcGFnZXMoKQotICogd2lsbCBzdWZmZXIgaW5maW5pdGUgc2VsZiByZWN1cnNpb24uCi0gKi8KLSN1bmRlZiBzZXR1cF9hcmdfcGFnZXMKLQotaW50Ci1pYTMyX3NldHVwX2FyZ19wYWdlcyAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgaW50IGV4ZWN1dGFibGVfc3RhY2spCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHNldHVwX2FyZ19wYWdlcyhicHJtLCBJQTMyX1NUQUNLX1RPUCwgZXhlY3V0YWJsZV9zdGFjayk7Ci0JaWYgKCFyZXQpIHsKLQkJLyoKLQkJICogQ2FuJ3QgZG8gaXQgaW4gaWE2NF9lbGYzMl9pbml0KCkuIE5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlCi0JCSAqIGNhbGxzIHRvIGVsZjMyX21hcCgpCi0JCSAqLwotCQljdXJyZW50LT50aHJlYWQucHBsID0gaWEzMl9pbml0X3BwX2xpc3QoKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZWxmMzJfc2V0X3BlcnNvbmFsaXR5ICh2b2lkKQotewotCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgzMik7Ci0JY3VycmVudC0+dGhyZWFkLm1hcF9iYXNlICA9IElBMzJfUEFHRV9PRkZTRVQvMzsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWVsZjMyX21hcChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGVsZl9waGRyICplcHBudCwKLQkJaW50IHByb3QsIGludCB0eXBlLCB1bnNpZ25lZCBsb25nIHVudXNlZCkKLXsKLQl1bnNpZ25lZCBsb25nIHBnb2ZmID0gKGVwcG50LT5wX3ZhZGRyKSAmIH5JQTMyX1BBR0VfTUFTSzsKLQotCXJldHVybiBpYTMyX2RvX21tYXAoZmlsZXAsIChhZGRyICYgSUEzMl9QQUdFX01BU0spLCBlcHBudC0+cF9maWxlc3ogKyBwZ29mZiwgcHJvdCwgdHlwZSwKLQkJCSAgICBlcHBudC0+cF9vZmZzZXQgLSBwZ29mZik7Ci19Ci0KLSNkZWZpbmUgY3B1X3VzZXNfaWEzMmVsKCkJKGxvY2FsX2NwdV9kYXRhLT5mYW1pbHkgPiAweDFmKQotCi1zdGF0aWMgaW50IF9faW5pdCBjaGVja19lbGYzMl9iaW5mbXQodm9pZCkKLXsKLQlpZiAoY3B1X3VzZXNfaWEzMmVsKCkpIHsKLQkJcHJpbnRrKCJQbGVhc2UgdXNlIElBLTMyIEVMIGZvciBleGVjdXRpbmcgSUEtMzIgYmluYXJpZXNcbiIpOwotCQl1bnJlZ2lzdGVyX2JpbmZtdCgmZWxmX2Zvcm1hdCk7Ci0JfQotCXJldHVybiAwOwotfQotCi1tb2R1bGVfaW5pdChjaGVja19lbGYzMl9iaW5mbXQpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9lbGZjb3JlMzIuaCBiL2FyY2gvaWE2NC9pYTMyL2VsZmNvcmUzMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTc3MjU3Li4wMDAwMDAwCi0tLSBhL2FyY2gvaWE2NC9pYTMyL2VsZmNvcmUzMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qCi0gKiBJQS0zMiBFTEYgY29yZSBkdW1wIHN1cHBvcnQuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFydW4gU2hhcm1hIDxhcnVuLnNoYXJtYUBpbnRlbC5jb20+Ci0gKgotICogRGVyaXZlZCBmcm9tIHRoZSB4ODZfNjQgdmVyc2lvbgotICovCi0jaWZuZGVmIF9FTEZDT1JFMzJfSF8KLSNkZWZpbmUgX0VMRkNPUkUzMl9IXwotCi0jaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0vKiBPdmVycmlkZSBlbGZjb3JlLmggKi8KLSNkZWZpbmUgX0xJTlVYX0VMRkNPUkVfSCAxCi10eXBlZGVmIHVuc2lnbmVkIGludCBlbGZfZ3JlZ190OwotCi0jZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mIChzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdDMyKSAvIHNpemVvZihlbGZfZ3JlZ190KSkKLXR5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107Ci0KLXR5cGVkZWYgc3RydWN0IGlhMzJfdXNlcl9pMzg3X3N0cnVjdCBlbGZfZnByZWdzZXRfdDsKLXR5cGVkZWYgc3RydWN0IGlhMzJfdXNlcl9meHNyX3N0cnVjdCBlbGZfZnB4cmVnc2V0X3Q7Ci0KLXN0cnVjdCBlbGZfc2lnaW5mbwotewotCWludAlzaV9zaWdubzsJCQkvKiBzaWduYWwgbnVtYmVyICovCi0JaW50CXNpX2NvZGU7CQkJLyogZXh0cmEgY29kZSAqLwotCWludAlzaV9lcnJubzsJCQkvKiBlcnJubyAqLwotfTsKLQotI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCi0vKgotICogSGFja3MgYXJlIGhlcmUgc2luY2UgdHlwZXMgYmV0d2VlbiBjb21wYXRfdGltZXZhbCAoPSBwYWlyIG9mIHMzMikgYW5kCi0gKiBpYTY0LW5hdGl2ZSB0aW1ldmFsICg9IHBhaXIgb2YgczY0KSBhcmUgbm90IGNvbXBhdGlibGUsIGF0IGxlYXN0IGEgZmlsZQotICogYXJjaC9pYTY0L2lhMzIvLi4vLi4vLi4vZnMvYmluZm10X2VsZi5jIHdpbGwgZ2V0IHdhcm5pbmdzIGZyb20gY29tcGlsZXIgb24KLSAqIHVzZSBvZiBjcHV0aW1lX3RvX3RpbWV2YWwoKSwgd2hpY2ggdXN1YWxseSBhbiBhbGlhcyBvZiBqaWZmaWVzX3RvX3RpbWV2YWwoKS4KLSAqLwotI2RlZmluZSBjcHV0aW1lX3RvX3RpbWV2YWwoYSxiKSBcCi0JZG8geyAoYiktPnR2X3VzZWMgPSAwOyAoYiktPnR2X3NlYyA9IChhKS9OU0VDX1BFUl9TRUM7IH0gd2hpbGUoMCkKLSNlbHNlCi0jZGVmaW5lIGppZmZpZXNfdG9fdGltZXZhbChhLGIpIFwKLQlkbyB7IChiKS0+dHZfdXNlYyA9IDA7IChiKS0+dHZfc2VjID0gKGEpL0haOyB9IHdoaWxlKDApCi0jZW5kaWYKLQotc3RydWN0IGVsZl9wcnN0YXR1cwotewotCXN0cnVjdCBlbGZfc2lnaW5mbyBwcl9pbmZvOwkvKiBJbmZvIGFzc29jaWF0ZWQgd2l0aCBzaWduYWwgKi8KLQlzaG9ydAlwcl9jdXJzaWc7CQkvKiBDdXJyZW50IHNpZ25hbCAqLwotCXVuc2lnbmVkIGludCBwcl9zaWdwZW5kOwkvKiBTZXQgb2YgcGVuZGluZyBzaWduYWxzICovCi0JdW5zaWduZWQgaW50IHByX3NpZ2hvbGQ7CS8qIFNldCBvZiBoZWxkIHNpZ25hbHMgKi8KLQlwaWRfdAlwcl9waWQ7Ci0JcGlkX3QJcHJfcHBpZDsKLQlwaWRfdAlwcl9wZ3JwOwotCXBpZF90CXByX3NpZDsKLQlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgcHJfdXRpbWU7CS8qIFVzZXIgdGltZSAqLwotCXN0cnVjdCBjb21wYXRfdGltZXZhbCBwcl9zdGltZTsJLyogU3lzdGVtIHRpbWUgKi8KLQlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgcHJfY3V0aW1lOwkvKiBDdW11bGF0aXZlIHVzZXIgdGltZSAqLwotCXN0cnVjdCBjb21wYXRfdGltZXZhbCBwcl9jc3RpbWU7CS8qIEN1bXVsYXRpdmUgc3lzdGVtIHRpbWUgKi8KLQllbGZfZ3JlZ3NldF90IHByX3JlZzsJLyogR1AgcmVnaXN0ZXJzICovCi0JaW50IHByX2ZwdmFsaWQ7CQkvKiBUcnVlIGlmIG1hdGggY28tcHJvY2Vzc29yIGJlaW5nIHVzZWQuICAqLwotfTsKLQotI2RlZmluZSBFTEZfUFJBUkdTWgkoODApCS8qIE51bWJlciBvZiBjaGFycyBmb3IgYXJncyAqLwotCi1zdHJ1Y3QgZWxmX3BycHNpbmZvCi17Ci0JY2hhcglwcl9zdGF0ZTsJLyogbnVtZXJpYyBwcm9jZXNzIHN0YXRlICovCi0JY2hhcglwcl9zbmFtZTsJLyogY2hhciBmb3IgcHJfc3RhdGUgKi8KLQljaGFyCXByX3pvbWI7CS8qIHpvbWJpZSAqLwotCWNoYXIJcHJfbmljZTsJLyogbmljZSB2YWwgKi8KLQl1bnNpZ25lZCBpbnQgcHJfZmxhZzsJLyogZmxhZ3MgKi8KLQlfX3UxNglwcl91aWQ7Ci0JX191MTYJcHJfZ2lkOwotCXBpZF90CXByX3BpZCwgcHJfcHBpZCwgcHJfcGdycCwgcHJfc2lkOwotCS8qIExvdHMgbWlzc2luZyAqLwotCWNoYXIJcHJfZm5hbWVbMTZdOwkvKiBmaWxlbmFtZSBvZiBleGVjdXRhYmxlICovCi0JY2hhcglwcl9wc2FyZ3NbRUxGX1BSQVJHU1pdOwkvKiBpbml0aWFsIHBhcnQgb2YgYXJnIGxpc3QgKi8KLX07Ci0KLSNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKHByX3JlZywgcmVncykgICAgICAgCQlcCi0JcHJfcmVnWzBdID0gcmVncy0+cjExOwkJCQlcCi0JcHJfcmVnWzFdID0gcmVncy0+cjk7CQkJCVwKLQlwcl9yZWdbMl0gPSByZWdzLT5yMTA7CQkJCVwKLQlwcl9yZWdbM10gPSByZWdzLT5yMTQ7CQkJCVwKLQlwcl9yZWdbNF0gPSByZWdzLT5yMTU7CQkJCVwKLQlwcl9yZWdbNV0gPSByZWdzLT5yMTM7CQkJCVwKLQlwcl9yZWdbNl0gPSByZWdzLT5yODsJCQkJXAotCXByX3JlZ1s3XSA9IHJlZ3MtPnIxNiAmIDB4ZmZmZjsJCQlcCi0JcHJfcmVnWzhdID0gKHJlZ3MtPnIxNiA+PiAxNikgJiAweGZmZmY7CQlcCi0JcHJfcmVnWzldID0gKHJlZ3MtPnIxNiA+PiAzMikgJiAweGZmZmY7CQlcCi0JcHJfcmVnWzEwXSA9IChyZWdzLT5yMTYgPj4gNDgpICYgMHhmZmZmOwlcCi0JcHJfcmVnWzExXSA9IHJlZ3MtPnIxOyAJCQkJXAotCXByX3JlZ1sxMl0gPSByZWdzLT5jcl9paXA7CQkJXAotCXByX3JlZ1sxM10gPSByZWdzLT5yMTcgJiAweGZmZmY7CQlcCi0JcHJfcmVnWzE0XSA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9FRkxBRyk7CVwKLQlwcl9yZWdbMTVdID0gcmVncy0+cjEyOwkJCQlcCi0JcHJfcmVnWzE2XSA9IChyZWdzLT5yMTcgPj4gMTYpICYgMHhmZmZmOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZWxmX2NvcmVfY29weV9yZWdzKGVsZl9ncmVnc2V0X3QgKmVsZnJlZ3MsCi0JCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JRUxGX0NPUkVfQ09QWV9SRUdTKCgqZWxmcmVncyksIHJlZ3MpCi19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGVsZl9jb3JlX2NvcHlfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwKLQkJCQkJICBlbGZfZ3JlZ3NldF90KiBlbGZyZWdzKQotewotCUVMRl9DT1JFX0NPUFlfUkVHUygoKmVsZnJlZ3MpLCB0YXNrX3B0X3JlZ3ModCkpOwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotZWxmX2NvcmVfY29weV90YXNrX2ZwcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGVsZl9mcHJlZ3NldF90ICpmcHUpCi17Ci0Jc3RydWN0IGlhMzJfdXNlcl9pMzg3X3N0cnVjdCAqZnBzdGF0ZSA9ICh2b2lkKilmcHU7Ci0JbW1fc2VnbWVudF90IG9sZF9mczsKLQotCWlmICghdHNrX3VzZWRfbWF0aCh0c2spKQotCQlyZXR1cm4gMDsKLQkKLQlvbGRfZnMgPSBnZXRfZnMoKTsKLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlzYXZlX2lhMzJfZnBzdGF0ZSh0c2ssIChzdHJ1Y3QgaWEzMl91c2VyX2kzODdfc3RydWN0IF9fdXNlciAqKSBmcHN0YXRlKTsKLQlzZXRfZnMob2xkX2ZzKTsKLQotCXJldHVybiAxOwotfQotCi0jZGVmaW5lIEVMRl9DT1JFX0NPUFlfWEZQUkVHUyAxCi0jZGVmaW5lIEVMRl9DT1JFX1hGUFJFR19UWVBFIE5UX1BSWEZQUkVHCi1zdGF0aWMgaW5saW5lIGludAotZWxmX2NvcmVfY29weV90YXNrX3hmcHJlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGVsZl9mcHhyZWdzZXRfdCAqeGZwdSkKLXsKLQlzdHJ1Y3QgaWEzMl91c2VyX2Z4c3Jfc3RydWN0ICpmcHhzdGF0ZSA9ICh2b2lkKikgeGZwdTsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzOwotCi0JaWYgKCF0c2tfdXNlZF9tYXRoKHRzaykpCi0JCXJldHVybiAwOwotCi0Jb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0Jc2F2ZV9pYTMyX2ZweHN0YXRlKHRzaywgKHN0cnVjdCBpYTMyX3VzZXJfZnhzcl9zdHJ1Y3QgX191c2VyICopIGZweHN0YXRlKTsKLQlzZXRfZnMob2xkX2ZzKTsKLQotCXJldHVybiAxOwotfQotCi0jZW5kaWYgLyogX0VMRkNPUkUzMl9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TIGIvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmQ3NDc5Li4wMDAwMDAwCi0tLSBhL2FyY2gvaWE2NC9pYTMyL2lhMzJfZW50cnkuUworKysgL2Rldi9udWxsCkBAIC0xLDQ2OCArMCwwIEBACi0jaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+Ci0jaW5jbHVkZSA8YXNtL2lhMzIuaD4KLSNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KLSNpbmNsdWRlIDxhc20vc2lnbmFsLmg+Ci0jaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+Ci0KLSNpbmNsdWRlICIuLi9rZXJuZWwvbWluc3RhdGUuaCIKLQotCS8qCi0JICogZXhlY3ZlKCkgaXMgc3BlY2lhbCBiZWNhdXNlIGluIGNhc2Ugb2Ygc3VjY2Vzcywgd2UgbmVlZCB0bwotCSAqIHNldHVwIGEgbnVsbCByZWdpc3RlciB3aW5kb3cgZnJhbWUgKGluIGNhc2UgYW4gSUEtMzIgcHJvY2VzcwotCSAqIGlzIGV4ZWMnaW5nIGFuIElBLTY0IHByb2dyYW0pLgotCSAqLwotRU5UUlkoaWEzMl9leGVjdmUpCi0JLnByb2xvZ3VlIEFTTV9VTldfUFJMR19SUHxBU01fVU5XX1BSTEdfUEZTLCBBU01fVU5XX1BSTEdfR1JTQVZFKDMpCi0JYWxsb2MgbG9jMT1hci5wZnMsMywyLDQsMAotCW1vdiBsb2MwPXJwCi0JLmJvZHkKLQl6eHQ0IG91dDA9aW4wCQkJLy8gZmlsZW5hbWUKLQk7OwkJCQkvLyBzdG9wIGJpdCBiZXR3ZWVuIGFsbG9jIGFuZCBjYWxsCi0Jenh0NCBvdXQxPWluMQkJCS8vIGFyZ3YKLQl6eHQ0IG91dDI9aW4yCQkJLy8gZW52cAotCWFkZCBvdXQzPTE2LHNwCQkJLy8gcmVncwotCWJyLmNhbGwuc3B0ay5mZXcgcnA9c3lzMzJfZXhlY3ZlCi0xOgljbXAuZ2UgcDYscDA9cjgscjAKLQltb3YgYXIucGZzPWxvYzEJCQkvLyByZXN0b3JlIGFyLnBmcwotCTs7Ci0ocDYpCW1vdiBhci5wZnM9cjAJCQkvLyBjbGVhciBhci5wZnMgaW4gY2FzZSBvZiBzdWNjZXNzCi0Jc3h0NCByOD1yOAkJCS8vIHJldHVybiA2NC1iaXQgcmVzdWx0Ci0JbW92IHJwPWxvYzAKLQlici5yZXQuc3B0ay5mZXcgcnAKLUVORChpYTMyX2V4ZWN2ZSkKLQotRU5UUlkoaWEzMl9jbG9uZSkKLQkucHJvbG9ndWUgQVNNX1VOV19QUkxHX1JQfEFTTV9VTldfUFJMR19QRlMsIEFTTV9VTldfUFJMR19HUlNBVkUoNSkKLQlhbGxvYyByMTY9YXIucGZzLDUsMiw2LDAKLQlET19TQVZFX1NXSVRDSF9TVEFDSwotCW1vdiBsb2MwPXJwCi0JbW92IGxvYzE9cjE2CQkJCS8vIHNhdmUgYXIucGZzIGFjcm9zcyBkb19mb3JrCi0JLmJvZHkKLQl6eHQ0IG91dDE9aW4xCQkJCS8vIG5ld3NwCi0JbW92IG91dDM9MTYJCQkJLy8gc3RhY2tzaXplIChjb21wZW5zYXRlcyBmb3IgMTYtYnl0ZSBzY3JhdGNoIGFyZWEpCi0JYWRkcyBvdXQyPUlBNjRfU1dJVENIX1NUQUNLX1NJWkUrMTYsc3AJLy8gb3V0MiA9ICZyZWdzCi0JbW92IG91dDA9aW4wCQkJCS8vIG91dDAgPSBjbG9uZV9mbGFncwotCXp4dDQgb3V0ND1pbjIJCQkJLy8gb3V0NCA9IHBhcmVudF90aWRwdHIKLQl6eHQ0IG91dDU9aW40CQkJCS8vIG91dDUgPSBjaGlsZF90aWRwdHIKLQlici5jYWxsLnNwdGsubWFueSBycD1kb19mb3JrCi0ucmV0MDoJLnJlc3RvcmUgc3AKLQlhZGRzIHNwPUlBNjRfU1dJVENIX1NUQUNLX1NJWkUsc3AJLy8gcG9wIHRoZSBzd2l0Y2ggc3RhY2sKLQltb3YgYXIucGZzPWxvYzEKLQltb3YgcnA9bG9jMAotCWJyLnJldC5zcHRrLm1hbnkgcnAKLUVORChpYTMyX2Nsb25lKQotCi1HTE9CQUxfRU5UUlkoaWEzMl9yZXRfZnJvbV9jbG9uZSkKLQlQVF9SRUdTX1VOV0lORF9JTkZPKDApCi17CS8qCi0JICogU29tZSB2ZXJzaW9ucyBvZiBnYXMgZ2VuZXJhdGUgYmFkIHVud2luZCBpbmZvIGlmIHRoZSBmaXJzdCBpbnN0cnVjdGlvbiBvZiBhCi0JICogcHJvY2VkdXJlIGRvZXNuJ3QgZ28gaW50byB0aGUgZmlyc3Qgc2xvdCBvZiBhIGJ1bmRsZS4gIFRoaXMgaXMgYSB3b3JrYXJvdW5kLgotCSAqLwotCW5vcC5tIDAKLQlub3AuaSAwCi0JLyoKLQkgKiBXZSBuZWVkIHRvIGNhbGwgc2NoZWR1bGVfdGFpbCgpIHRvIGNvbXBsZXRlIHRoZSBzY2hlZHVsaW5nIHByb2Nlc3MuCi0JICogQ2FsbGVkIGJ5IGlhNjRfc3dpdGNoX3RvIGFmdGVyIGRvX2ZvcmsoKS0+Y29weV90aHJlYWQoKS4gIHI4IGNvbnRhaW5zIHRoZQotCSAqIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzbHkgZXhlY3V0aW5nIHRhc2suCi0JICovCi0JYnIuY2FsbC5zcHRrLm1hbnkgcnA9aWE2NF9pbnZva2Vfc2NoZWR1bGVfdGFpbAotfQotLnJldDE6Ci0JYWRkcyByMj1USV9GTEFHUytJQTY0X1RBU0tfU0laRSxyMTMKLQk7OwotCWxkNCByMj1bcjJdCi0JOzsKLQltb3Ygcjg9MAotCWFuZCByMj1fVElGX1NZU0NBTExfVFJBQ0VBVURJVCxyMgotCTs7Ci0JY21wLm5lIHA2LHAwPXIyLHIwCi0ocDYpCWJyLmNvbmQuc3BudCAuaWEzMl9zdHJhY2VfY2hlY2tfcmV0dmFsCi0JOzsJCQkJCS8vIHByZXZlbnQgUkFXIG9uIHI4Ci1FTkQoaWEzMl9yZXRfZnJvbV9jbG9uZSkKLQkvLyBmYWxsIHRocm91Z2gKLUdMT0JBTF9FTlRSWShpYTMyX3JldF9mcm9tX3N5c2NhbGwpCi0JUFRfUkVHU19VTldJTkRfSU5GTygwKQotCi0JY21wLmdlIHA2LHA3PXI4LHIwICAgICAgICAgICAgICAgICAgICAgIC8vIHN5c2NhbGwgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5PwotCWFkZHMgcjI9SUE2NF9QVF9SRUdTX1I4X09GRlNFVCsxNixzcCAgICAvLyByMiA9ICZwdF9yZWdzLnI4Ci0JOzsKLQlhbGxvYyByMz1hci5wZnMsMCwwLDAsMAkJCS8vIGRyb3AgdGhlIHN5c2NhbGwgYXJndW1lbnQgZnJhbWUKLQlzdDggW3IyXT1yOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmUgcmV0dXJuIHZhbHVlIGluIHNsb3QgZm9yIHI4Ci0JYnIuY29uZC5zcHRrLm1hbnkgaWE2NF9sZWF2ZV9rZXJuZWwKLUVORChpYTMyX3JldF9mcm9tX3N5c2NhbGwpCi0KLQkvLwotCS8vIEludm9rZSBhIHN5c3RlbSBjYWxsLCBidXQgZG8gc29tZSB0cmFjaW5nIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNhbGwuCi0JLy8gV2UgTVVTVCBwcmVzZXJ2ZSB0aGUgY3VycmVudCByZWdpc3RlciBmcmFtZSB0aHJvdWdob3V0IHRoaXMgcm91dGluZQotCS8vIGJlY2F1c2Ugc29tZSBzeXN0ZW0gY2FsbHMgKHN1Y2ggYXMgaWE2NF9leGVjdmUpIGRpcmVjdGx5Ci0JLy8gbWFuaXB1bGF0ZSBhci5wZnMuCi0JLy8KLQkvLyBJbnB1dDoKLQkvLwlyOCA9IHN5c2NhbGwgbnVtYmVyCi0JLy8JYjYgPSBzeXNjYWxsIGVudHJ5IHBvaW50Ci0JLy8KLUdMT0JBTF9FTlRSWShpYTMyX3RyYWNlX3N5c2NhbGwpCi0JUFRfUkVHU19VTldJTkRfSU5GTygwKQotCW1vdiByMz0tMzgKLQlhZGRzIHIyPUlBNjRfUFRfUkVHU19SOF9PRkZTRVQrMTYsc3AKLQk7OwotCXN0OCBbcjJdPXIzCQkJCS8vIGluaXRpYWxpemUgcmV0dXJuIGNvZGUgdG8gLUVOT1NZUwotCWJyLmNhbGwuc3B0ay5mZXcgcnA9c3lzY2FsbF90cmFjZV9lbnRlcgkvLyBnaXZlIHBhcmVudCBhIGNoYW5jZSB0byBjYXRjaCBzeXNjYWxsIGFyZ3MKLQljbXAubHQgcDYscDA9cjgscjAJCQkvLyBjaGVjayB0cmFjZWhvb2sKLQlhZGRzIHIyPUlBNjRfUFRfUkVHU19SOF9PRkZTRVQrMTYsc3AJLy8gcjIgPSAmcHRfcmVncy5yOAotCTs7Ci0ocDYpCXN0OC5zcGlsbCBbcjJdPXI4CQkJLy8gc3RvcmUgcmV0dXJuIHZhbHVlIGluIHNsb3QgZm9yIHI4Ci0ocDYpCWJyLnNwbnQuZmV3IC5yZXQ0Ci0ucmV0MjoJLy8gTmVlZCB0byByZWxvYWQgYXJndW1lbnRzICh0aGV5IG1heSBiZSBjaGFuZ2VkIGJ5IHRoZSB0cmFjaW5nIHByb2Nlc3MpCi0JYWRkcyByMj1JQTY0X1BUX1JFR1NfUjFfT0ZGU0VUKzE2LHNwCS8vIHIyID0gJnB0X3JlZ3MucjEKLQlhZGRzIHIzPUlBNjRfUFRfUkVHU19SMTNfT0ZGU0VUKzE2LHNwCS8vIHIzID0gJnB0X3JlZ3MucjEzCi0JbW92IHIxNT1JQTMyX05SX3N5c2NhbGxzCi0JOzsKLQlsZDQgcjg9W3IyXSxJQTY0X1BUX1JFR1NfUjlfT0ZGU0VULUlBNjRfUFRfUkVHU19SMV9PRkZTRVQKLQltb3ZsIHIxNj1pYTMyX3N5c2NhbGxfdGFibGUKLQk7OwotCWxkNCByMzM9W3IyXSw4CQkJCS8vIHI5ID09IGVjeAotCWxkNCByMzc9W3IzXSwxNgkJCQkvLyByMTMgPT0gZWJwCi0JY21wLmx0dS51bmMgcDYscDc9cjgscjE1Ci0JOzsKLQlsZDQgcjM0PVtyMl0sOAkJCQkvLyByMTAgPT0gZWR4Ci0JbGQ0IHIzNj1bcjNdLDgJCQkJLy8gcjE1ID09IGVkaQotKHA2KQlzaGxhZGQgcjE2PXI4LDMscjE2CS8vIGZvcmNlIG5pX3N5c2NhbGwgaWYgbm90IHZhbGlkIHN5c2NhbGwgbnVtYmVyCi0JOzsKLQlsZDggcjE2PVtyMTZdCi0JOzsKLQlsZDQgcjMyPVtyMl0sOAkJCQkvLyByMTEgPT0gZWJ4Ci0JbW92IGI2PXIxNgotCWxkNCByMzU9W3IzXSw4CQkJCS8vIHIxNCA9PSBlc2kKLQlici5jYWxsLnNwdGsuZmV3IHJwPWI2CQkJLy8gZG8gdGhlIHN5c2NhbGwKLS5pYTMyX3N0cmFjZV9jaGVja19yZXR2YWw6Ci0JY21wLmx0IHA2LHAwPXI4LHIwCQkJLy8gc3lzY2FsbCBmYWlsZWQ/Ci0JYWRkcyByMj1JQTY0X1BUX1JFR1NfUjhfT0ZGU0VUKzE2LHNwCS8vIHIyID0gJnB0X3JlZ3MucjgKLQk7OwotCXN0OC5zcGlsbCBbcjJdPXI4CQkJLy8gc3RvcmUgcmV0dXJuIHZhbHVlIGluIHNsb3QgZm9yIHI4Ci0JYnIuY2FsbC5zcHRrLmZldyBycD1zeXNjYWxsX3RyYWNlX2xlYXZlCS8vIGdpdmUgcGFyZW50IGEgY2hhbmNlIHRvIGNhdGNoIHJldHVybiB2YWx1ZQotLnJldDQ6CWFsbG9jIHIyPWFyLnBmcywwLDAsMCwwCQkJLy8gZHJvcCB0aGUgc3lzY2FsbCBhcmd1bWVudCBmcmFtZQotCWJyLmNvbmQuc3B0ay5tYW55IGlhNjRfbGVhdmVfa2VybmVsCi1FTkQoaWEzMl90cmFjZV9zeXNjYWxsKQotCi1HTE9CQUxfRU5UUlkoc3lzMzJfdmZvcmspCi0JYWxsb2MgcjE2PWFyLnBmcywyLDIsNCwwOzsKLQltb3Ygb3V0MD1JQTY0X0NMT05FX1ZGT1JLfElBNjRfQ0xPTkVfVk18U0lHQ0hMRAkvLyBvdXQwID0gY2xvbmVfZmxhZ3MKLQlici5jb25kLnNwdGsuZmV3IC5mb3JrMQkJCS8vIGRvIHRoZSB3b3JrCi1FTkQoc3lzMzJfdmZvcmspCi0KLUdMT0JBTF9FTlRSWShzeXMzMl9mb3JrKQotCS5wcm9sb2d1ZSBBU01fVU5XX1BSTEdfUlB8QVNNX1VOV19QUkxHX1BGUywgQVNNX1VOV19QUkxHX0dSU0FWRSgyKQotCWFsbG9jIHIxNj1hci5wZnMsMiwyLDQsMAotCW1vdiBvdXQwPVNJR0NITEQJCQkvLyBvdXQwID0gY2xvbmVfZmxhZ3MKLQk7OwotLmZvcmsxOgotCW1vdiBsb2MwPXJwCi0JbW92IGxvYzE9cjE2CQkJCS8vIHNhdmUgYXIucGZzIGFjcm9zcyBkb19mb3JrCi0JRE9fU0FWRV9TV0lUQ0hfU1RBQ0sKLQotCS5ib2R5Ci0KLQltb3Ygb3V0MT0wCi0JbW92IG91dDM9MAotCWFkZHMgb3V0Mj1JQTY0X1NXSVRDSF9TVEFDS19TSVpFKzE2LHNwCS8vIG91dDIgPSAmcmVncwotCWJyLmNhbGwuc3B0ay5mZXcgcnA9ZG9fZm9yawotLnJldDU6CS5yZXN0b3JlIHNwCi0JYWRkcyBzcD1JQTY0X1NXSVRDSF9TVEFDS19TSVpFLHNwCS8vIHBvcCB0aGUgc3dpdGNoIHN0YWNrCi0JbW92IGFyLnBmcz1sb2MxCi0JbW92IHJwPWxvYzAKLQlici5yZXQuc3B0ay5tYW55IHJwCi1FTkQoc3lzMzJfZm9yaykKLQotCS5yb2RhdGEKLQkuYWxpZ24gOAotCS5nbG9ibCBpYTMyX3N5c2NhbGxfdGFibGUKLWlhMzJfc3lzY2FsbF90YWJsZToKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkgIC8qIDAJLSAgb2xkICJzZXR1cCgiIHN5c3RlbSBjYWxsKi8KLQlkYXRhOCBzeXNfZXhpdAotCWRhdGE4IHN5czMyX2ZvcmsKLQlkYXRhOCBzeXNfcmVhZAotCWRhdGE4IHN5c193cml0ZQotCWRhdGE4IGNvbXBhdF9zeXNfb3BlbgkgIC8qIDUgKi8KLQlkYXRhOCBzeXNfY2xvc2UKLQlkYXRhOCBzeXMzMl93YWl0cGlkCi0JZGF0YTggc3lzX2NyZWF0Ci0JZGF0YTggc3lzX2xpbmsKLQlkYXRhOCBzeXNfdW5saW5rCSAgLyogMTAgKi8KLQlkYXRhOCBpYTMyX2V4ZWN2ZQotCWRhdGE4IHN5c19jaGRpcgotCWRhdGE4IGNvbXBhdF9zeXNfdGltZQotCWRhdGE4IHN5c19ta25vZAotCWRhdGE4IHN5c19jaG1vZAkJICAvKiAxNSAqLwotCWRhdGE4IHN5c19sY2hvd24JLyogMTYtYml0IHZlcnNpb24gKi8KLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkgIC8qIG9sZCBicmVhayBzeXNjYWxsIGhvbGRlciAqLwotCWRhdGE4IHN5c19uaV9zeXNjYWxsCi0JZGF0YTggc3lzMzJfbHNlZWsKLQlkYXRhOCBzeXNfZ2V0cGlkCSAgLyogMjAgKi8KLQlkYXRhOCBjb21wYXRfc3lzX21vdW50Ci0JZGF0YTggc3lzX29sZHVtb3VudAotCWRhdGE4IHN5c19zZXR1aWQJLyogMTYtYml0IHZlcnNpb24gKi8KLQlkYXRhOCBzeXNfZ2V0dWlkCS8qIDE2LWJpdCB2ZXJzaW9uICovCi0JZGF0YTggY29tcGF0X3N5c19zdGltZSAgICAvKiAyNSAqLwotCWRhdGE4IGNvbXBhdF9zeXNfcHRyYWNlCi0JZGF0YTggc3lzMzJfYWxhcm0KLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAotCWRhdGE4IHN5c19wYXVzZQotCWRhdGE4IGNvbXBhdF9zeXNfdXRpbWUJICAvKiAzMCAqLwotCWRhdGE4IHN5c19uaV9zeXNjYWxsCSAgLyogb2xkIHN0dHkgc3lzY2FsbCBob2xkZXIgKi8KLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkgIC8qIG9sZCBndHR5IHN5c2NhbGwgaG9sZGVyICovCi0JZGF0YTggc3lzX2FjY2VzcwotCWRhdGE4IHN5c19uaWNlCi0JZGF0YTggc3lzX25pX3N5c2NhbGwJICAvKiAzNSAqLwkgIC8qIG9sZCBmdGltZSBzeXNjYWxsIGhvbGRlciAqLwotCWRhdGE4IHN5c19zeW5jCi0JZGF0YTggc3lzX2tpbGwKLQlkYXRhOCBzeXNfcmVuYW1lCi0JZGF0YTggc3lzX21rZGlyCi0JZGF0YTggc3lzX3JtZGlyCQkgIC8qIDQwICovCi0JZGF0YTggc3lzX2R1cAotCWRhdGE4IHN5c19pYTY0X3BpcGUKLQlkYXRhOCBjb21wYXRfc3lzX3RpbWVzCi0JZGF0YTggc3lzX25pX3N5c2NhbGwJICAvKiBvbGQgcHJvZiBzeXNjYWxsIGhvbGRlciAqLwotCWRhdGE4IHN5czMyX2JyawkJICAvKiA0NSAqLwotCWRhdGE4IHN5c19zZXRnaWQJLyogMTYtYml0IHZlcnNpb24gKi8KLQlkYXRhOCBzeXNfZ2V0Z2lkCS8qIDE2LWJpdCB2ZXJzaW9uICovCi0JZGF0YTggc3lzMzJfc2lnbmFsCi0JZGF0YTggc3lzX2dldGV1aWQJLyogMTYtYml0IHZlcnNpb24gKi8KLQlkYXRhOCBzeXNfZ2V0ZWdpZAkvKiAxNi1iaXQgdmVyc2lvbiAqLwkgIC8qIDUwICovCi0JZGF0YTggc3lzX2FjY3QKLQlkYXRhOCBzeXNfdW1vdW50CSAgLyogcmVjeWNsZWQgbmV2ZXIgdXNlZCBwaHlzKCAqLwotCWRhdGE4IHN5c19uaV9zeXNjYWxsCSAgLyogb2xkIGxvY2sgc3lzY2FsbCBob2xkZXIgKi8KLQlkYXRhOCBjb21wYXRfc3lzX2lvY3RsCi0JZGF0YTggY29tcGF0X3N5c19mY250bAkgIC8qIDU1ICovCi0JZGF0YTggc3lzX25pX3N5c2NhbGwJICAvKiBvbGQgbXB4IHN5c2NhbGwgaG9sZGVyICovCi0JZGF0YTggc3lzX3NldHBnaWQKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkgIC8qIG9sZCB1bGltaXQgc3lzY2FsbCBob2xkZXIgKi8KLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAotCWRhdGE4IHN5c191bWFzawkJICAvKiA2MCAqLwotCWRhdGE4IHN5c19jaHJvb3QKLQlkYXRhOCBjb21wYXRfc3lzX3VzdGF0Ci0JZGF0YTggc3lzX2R1cDIKLQlkYXRhOCBzeXNfZ2V0cHBpZAotCWRhdGE4IHN5c19nZXRwZ3JwCSAgLyogNjUgKi8KLQlkYXRhOCBzeXNfc2V0c2lkCi0JZGF0YTggc3lzMzJfc2lnYWN0aW9uCi0JZGF0YTggc3lzX25pX3N5c2NhbGwKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAotCWRhdGE4IHN5c19zZXRyZXVpZAkvKiAxNi1iaXQgdmVyc2lvbiAqLwkgIC8qIDcwICovCi0JZGF0YTggc3lzX3NldHJlZ2lkCS8qIDE2LWJpdCB2ZXJzaW9uICovCi0JZGF0YTggc3lzMzJfc2lnc3VzcGVuZAotCWRhdGE4IGNvbXBhdF9zeXNfc2lncGVuZGluZwotCWRhdGE4IHN5c19zZXRob3N0bmFtZQotCWRhdGE4IGNvbXBhdF9zeXNfc2V0cmxpbWl0CSAgLyogNzUgKi8KLQlkYXRhOCBjb21wYXRfc3lzX29sZF9nZXRybGltaXQKLQlkYXRhOCBjb21wYXRfc3lzX2dldHJ1c2FnZQotCWRhdGE4IGNvbXBhdF9zeXNfZ2V0dGltZW9mZGF5Ci0JZGF0YTggY29tcGF0X3N5c19zZXR0aW1lb2ZkYXkKLQlkYXRhOCBzeXMzMl9nZXRncm91cHMxNgkgIC8qIDgwICovCi0JZGF0YTggc3lzMzJfc2V0Z3JvdXBzMTYKLQlkYXRhOCBzeXMzMl9vbGRfc2VsZWN0Ci0JZGF0YTggc3lzX3N5bWxpbmsKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAotCWRhdGE4IHN5c19yZWFkbGluawkgIC8qIDg1ICovCi0JZGF0YTggc3lzX3VzZWxpYgotCWRhdGE4IHN5c19zd2Fwb24KLQlkYXRhOCBzeXNfcmVib290Ci0JZGF0YTggY29tcGF0X3N5c19vbGRfcmVhZGRpcgotCWRhdGE4IHN5czMyX21tYXAJICAvKiA5MCAqLwotCWRhdGE4IHN5czMyX211bm1hcAotCWRhdGE4IHN5c190cnVuY2F0ZQotCWRhdGE4IHN5c19mdHJ1bmNhdGUKLQlkYXRhOCBzeXNfZmNobW9kCi0JZGF0YTggc3lzX2ZjaG93bgkvKiAxNi1iaXQgdmVyc2lvbiAqLwkgIC8qIDk1ICovCi0JZGF0YTggc3lzX2dldHByaW9yaXR5Ci0JZGF0YTggc3lzX3NldHByaW9yaXR5Ci0JZGF0YTggc3lzX25pX3N5c2NhbGwJICAvKiBvbGQgcHJvZmlsIHN5c2NhbGwgaG9sZGVyICovCi0JZGF0YTggY29tcGF0X3N5c19zdGF0ZnMKLQlkYXRhOCBjb21wYXRfc3lzX2ZzdGF0ZnMJICAvKiAxMDAgKi8KLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkvKiBpb3Blcm0gKi8KLQlkYXRhOCBjb21wYXRfc3lzX3NvY2tldGNhbGwKLQlkYXRhOCBzeXNfc3lzbG9nCi0JZGF0YTggY29tcGF0X3N5c19zZXRpdGltZXIKLQlkYXRhOCBjb21wYXRfc3lzX2dldGl0aW1lcgkgIC8qIDEwNSAqLwotCWRhdGE4IGNvbXBhdF9zeXNfbmV3c3RhdAotCWRhdGE4IGNvbXBhdF9zeXNfbmV3bHN0YXQKLQlkYXRhOCBjb21wYXRfc3lzX25ld2ZzdGF0Ci0JZGF0YTggc3lzX25pX3N5c2NhbGwKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkvKiBpb3BsICovCS8qIDExMCAqLwotCWRhdGE4IHN5c192aGFuZ3VwCi0JZGF0YTggc3lzX25pX3N5c2NhbGwJCS8qIHVzZWQgdG8gYmUgc3lzX2lkbGUgKi8KLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAotCWRhdGE4IGNvbXBhdF9zeXNfd2FpdDQKLQlkYXRhOCBzeXNfc3dhcG9mZgkgIC8qIDExNSAqLwotCWRhdGE4IGNvbXBhdF9zeXNfc3lzaW5mbwotCWRhdGE4IHN5czMyX2lwYwotCWRhdGE4IHN5c19mc3luYwotCWRhdGE4IHN5czMyX3NpZ3JldHVybgotCWRhdGE4IGlhMzJfY2xvbmUJICAvKiAxMjAgKi8KLQlkYXRhOCBzeXNfc2V0ZG9tYWlubmFtZQotCWRhdGE4IHN5czMyX25ld3VuYW1lCi0JZGF0YTggc3lzMzJfbW9kaWZ5X2xkdAotCWRhdGE4IGNvbXBhdF9zeXNfYWRqdGltZXgKLQlkYXRhOCBzeXMzMl9tcHJvdGVjdAkgIC8qIDEyNSAqLwotCWRhdGE4IGNvbXBhdF9zeXNfc2lncHJvY21hc2sKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkvKiBjcmVhdGVfbW9kdWxlICovCi0JZGF0YTggc3lzX25pX3N5c2NhbGwJLyogaW5pdF9tb2R1bGUgKi8KLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkvKiBkZWxldGVfbW9kdWxlICovCi0JZGF0YTggc3lzX25pX3N5c2NhbGwJLyogZ2V0X2tlcm5lbF9zeW1zICovICAvKiAxMzAgKi8KLQlkYXRhOCBzeXMzMl9xdW90YWN0bAotCWRhdGE4IHN5c19nZXRwZ2lkCi0JZGF0YTggc3lzX2ZjaGRpcgotCWRhdGE4IHN5c19uaV9zeXNjYWxsCS8qIHN5c19iZGZsdXNoICovCi0JZGF0YTggc3lzX3N5c2ZzCQkvKiAxMzUgKi8KLQlkYXRhOCBzeXMzMl9wZXJzb25hbGl0eQotCWRhdGE4IHN5c19uaV9zeXNjYWxsCSAgLyogZm9yIGFmc19zeXNjYWxsICovCi0JZGF0YTggc3lzX3NldGZzdWlkCS8qIDE2LWJpdCB2ZXJzaW9uICovCi0JZGF0YTggc3lzX3NldGZzZ2lkCS8qIDE2LWJpdCB2ZXJzaW9uICovCi0JZGF0YTggc3lzX2xsc2VlawkgIC8qIDE0MCAqLwotCWRhdGE4IGNvbXBhdF9zeXNfZ2V0ZGVudHMKLQlkYXRhOCBjb21wYXRfc3lzX3NlbGVjdAotCWRhdGE4IHN5c19mbG9jawotCWRhdGE4IHN5czMyX21zeW5jCi0JZGF0YTggY29tcGF0X3N5c19yZWFkdgkgIC8qIDE0NSAqLwotCWRhdGE4IGNvbXBhdF9zeXNfd3JpdGV2Ci0JZGF0YTggc3lzX2dldHNpZAotCWRhdGE4IHN5c19mZGF0YXN5bmMKLQlkYXRhOCBjb21wYXRfc3lzX3N5c2N0bAotCWRhdGE4IHN5c19tbG9jawkJICAvKiAxNTAgKi8KLQlkYXRhOCBzeXNfbXVubG9jawotCWRhdGE4IHN5c19tbG9ja2FsbAotCWRhdGE4IHN5c19tdW5sb2NrYWxsCi0JZGF0YTggc3lzX3NjaGVkX3NldHBhcmFtCi0JZGF0YTggc3lzX3NjaGVkX2dldHBhcmFtICAvKiAxNTUgKi8KLQlkYXRhOCBzeXNfc2NoZWRfc2V0c2NoZWR1bGVyCi0JZGF0YTggc3lzX3NjaGVkX2dldHNjaGVkdWxlcgotCWRhdGE4IHN5c19zY2hlZF95aWVsZAotCWRhdGE4IHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4Ci0JZGF0YTggc3lzX3NjaGVkX2dldF9wcmlvcml0eV9taW4JIC8qIDE2MCAqLwotCWRhdGE4IHN5czMyX3NjaGVkX3JyX2dldF9pbnRlcnZhbAotCWRhdGE4IGNvbXBhdF9zeXNfbmFub3NsZWVwCi0JZGF0YTggc3lzMzJfbXJlbWFwCi0JZGF0YTggc3lzX3NldHJlc3VpZAkvKiAxNi1iaXQgdmVyc2lvbiAqLwotCWRhdGE4IHN5czMyX2dldHJlc3VpZDE2CS8qIDE2LWJpdCB2ZXJzaW9uICovCSAgLyogMTY1ICovCi0JZGF0YTggc3lzX25pX3N5c2NhbGwJLyogdm04NiAqLwotCWRhdGE4IHN5c19uaV9zeXNjYWxsCS8qIHN5c19xdWVyeV9tb2R1bGUgKi8KLQlkYXRhOCBzeXNfcG9sbAotCWRhdGE4IHN5c19uaV9zeXNjYWxsCS8qIG5mc3NlcnZjdGwgKi8KLQlkYXRhOCBzeXNfc2V0cmVzZ2lkCSAgLyogMTcwICovCi0JZGF0YTggc3lzMzJfZ2V0cmVzZ2lkMTYKLQlkYXRhOCBzeXNfcHJjdGwKLQlkYXRhOCBzeXMzMl9ydF9zaWdyZXR1cm4KLQlkYXRhOCBzeXMzMl9ydF9zaWdhY3Rpb24KLQlkYXRhOCBzeXMzMl9ydF9zaWdwcm9jbWFzayAvKiAxNzUgKi8KLQlkYXRhOCBzeXNfcnRfc2lncGVuZGluZwotCWRhdGE4IGNvbXBhdF9zeXNfcnRfc2lndGltZWR3YWl0Ci0JZGF0YTggc3lzMzJfcnRfc2lncXVldWVpbmZvCi0JZGF0YTggY29tcGF0X3N5c19ydF9zaWdzdXNwZW5kCi0JZGF0YTggc3lzMzJfcHJlYWQJICAvKiAxODAgKi8KLQlkYXRhOCBzeXMzMl9wd3JpdGUKLQlkYXRhOCBzeXNfY2hvd24JLyogMTYtYml0IHZlcnNpb24gKi8KLQlkYXRhOCBzeXNfZ2V0Y3dkCi0JZGF0YTggc3lzX2NhcGdldAotCWRhdGE4IHN5c19jYXBzZXQJICAvKiAxODUgKi8KLQlkYXRhOCBzeXMzMl9zaWdhbHRzdGFjawotCWRhdGE4IHN5czMyX3NlbmRmaWxlCi0JZGF0YTggc3lzX25pX3N5c2NhbGwJCSAgLyogc3RyZWFtczEgKi8KLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkJICAvKiBzdHJlYW1zMiAqLwotCWRhdGE4IHN5czMyX3Zmb3JrCSAgLyogMTkwICovCi0JZGF0YTggY29tcGF0X3N5c19nZXRybGltaXQKLQlkYXRhOCBzeXMzMl9tbWFwMgotCWRhdGE4IHN5czMyX3RydW5jYXRlNjQKLQlkYXRhOCBzeXMzMl9mdHJ1bmNhdGU2NAotCWRhdGE4IHN5czMyX3N0YXQ2NAkgIC8qIDE5NSAqLwotCWRhdGE4IHN5czMyX2xzdGF0NjQKLQlkYXRhOCBzeXMzMl9mc3RhdDY0Ci0JZGF0YTggc3lzX2xjaG93bgotCWRhdGE4IHN5c19nZXR1aWQKLQlkYXRhOCBzeXNfZ2V0Z2lkCSAgLyogMjAwICovCi0JZGF0YTggc3lzX2dldGV1aWQKLQlkYXRhOCBzeXNfZ2V0ZWdpZAotCWRhdGE4IHN5c19zZXRyZXVpZAotCWRhdGE4IHN5c19zZXRyZWdpZAotCWRhdGE4IHN5c19nZXRncm91cHMJICAvKiAyMDUgKi8KLQlkYXRhOCBzeXNfc2V0Z3JvdXBzCi0JZGF0YTggc3lzX2ZjaG93bgotCWRhdGE4IHN5c19zZXRyZXN1aWQKLQlkYXRhOCBzeXNfZ2V0cmVzdWlkCi0JZGF0YTggc3lzX3NldHJlc2dpZAkgIC8qIDIxMCAqLwotCWRhdGE4IHN5c19nZXRyZXNnaWQKLQlkYXRhOCBzeXNfY2hvd24KLQlkYXRhOCBzeXNfc2V0dWlkCi0JZGF0YTggc3lzX3NldGdpZAotCWRhdGE4IHN5c19zZXRmc3VpZAkgIC8qIDIxNSAqLwotCWRhdGE4IHN5c19zZXRmc2dpZAotCWRhdGE4IHN5c19waXZvdF9yb290Ci0JZGF0YTggc3lzX21pbmNvcmUKLQlkYXRhOCBzeXNfbWFkdmlzZQotCWRhdGE4IGNvbXBhdF9zeXNfZ2V0ZGVudHM2NAkgIC8qIDIyMCAqLwotCWRhdGE4IGNvbXBhdF9zeXNfZmNudGw2NAotCWRhdGE4IHN5c19uaV9zeXNjYWxsCQkvKiByZXNlcnZlZCBmb3IgVFVYICovCi0JZGF0YTggc3lzX25pX3N5c2NhbGwJCS8qIHJlc2VydmVkIGZvciBTZWN1cml0eSAqLwotCWRhdGE4IHN5c19nZXR0aWQKLQlkYXRhOCBzeXNfcmVhZGFoZWFkCSAgLyogMjI1ICovCi0gCWRhdGE4IHN5c19zZXR4YXR0cgotIAlkYXRhOCBzeXNfbHNldHhhdHRyCi0gCWRhdGE4IHN5c19mc2V0eGF0dHIKLSAJZGF0YTggc3lzX2dldHhhdHRyCi0gCWRhdGE4IHN5c19sZ2V0eGF0dHIJLyogMjMwICovCi0gCWRhdGE4IHN5c19mZ2V0eGF0dHIKLSAJZGF0YTggc3lzX2xpc3R4YXR0cgotIAlkYXRhOCBzeXNfbGxpc3R4YXR0cgotIAlkYXRhOCBzeXNfZmxpc3R4YXR0cgotIAlkYXRhOCBzeXNfcmVtb3ZleGF0dHIJLyogMjM1ICovCi0gCWRhdGE4IHN5c19scmVtb3ZleGF0dHIKLSAJZGF0YTggc3lzX2ZyZW1vdmV4YXR0cgotCWRhdGE4IHN5c190a2lsbAotIAlkYXRhOCBzeXNfc2VuZGZpbGU2NAotCWRhdGE4IGNvbXBhdF9zeXNfZnV0ZXgJLyogMjQwICovCi0JZGF0YTggY29tcGF0X3N5c19zY2hlZF9zZXRhZmZpbml0eQotCWRhdGE4IGNvbXBhdF9zeXNfc2NoZWRfZ2V0YWZmaW5pdHkKLQlkYXRhOCBzeXMzMl9zZXRfdGhyZWFkX2FyZWEKLQlkYXRhOCBzeXMzMl9nZXRfdGhyZWFkX2FyZWEKLSAJZGF0YTggY29tcGF0X3N5c19pb19zZXR1cAkvKiAyNDUgKi8KLSAJZGF0YTggc3lzX2lvX2Rlc3Ryb3kKLSAJZGF0YTggY29tcGF0X3N5c19pb19nZXRldmVudHMKLSAJZGF0YTggY29tcGF0X3N5c19pb19zdWJtaXQKLSAJZGF0YTggc3lzX2lvX2NhbmNlbAotIAlkYXRhOCBzeXNfZmFkdmlzZTY0CS8qIDI1MCAqLwotCWRhdGE4IHN5c19uaV9zeXNjYWxsCi0JZGF0YTggc3lzX2V4aXRfZ3JvdXAKLSAJZGF0YTggc3lzX2xvb2t1cF9kY29va2llCi0JZGF0YTggc3lzX2Vwb2xsX2NyZWF0ZQotCWRhdGE4IHN5czMyX2Vwb2xsX2N0bAkvKiAyNTUgKi8KLQlkYXRhOCBzeXMzMl9lcG9sbF93YWl0Ci0JZGF0YTggc3lzX3JlbWFwX2ZpbGVfcGFnZXMKLQlkYXRhOCBzeXNfc2V0X3RpZF9hZGRyZXNzCi0gCWRhdGE4IGNvbXBhdF9zeXNfdGltZXJfY3JlYXRlCi0gCWRhdGE4IGNvbXBhdF9zeXNfdGltZXJfc2V0dGltZQkvKiAyNjAgKi8KLSAJZGF0YTggY29tcGF0X3N5c190aW1lcl9nZXR0aW1lCi0gCWRhdGE4IHN5c190aW1lcl9nZXRvdmVycnVuCi0gCWRhdGE4IHN5c190aW1lcl9kZWxldGUKLSAJZGF0YTggY29tcGF0X3N5c19jbG9ja19zZXR0aW1lCi0gCWRhdGE4IGNvbXBhdF9zeXNfY2xvY2tfZ2V0dGltZSAvKiAyNjUgKi8KLSAJZGF0YTggY29tcGF0X3N5c19jbG9ja19nZXRyZXMKLSAJZGF0YTggY29tcGF0X3N5c19jbG9ja19uYW5vc2xlZXAKLQlkYXRhOCBjb21wYXRfc3lzX3N0YXRmczY0Ci0JZGF0YTggY29tcGF0X3N5c19mc3RhdGZzNjQKLSAJZGF0YTggc3lzX3Rna2lsbAkvKiAyNzAgKi8KLSAJZGF0YTggY29tcGF0X3N5c191dGltZXMKLSAJZGF0YTggc3lzMzJfZmFkdmlzZTY0XzY0Ci0gCWRhdGE4IHN5c19uaV9zeXNjYWxsCi0gIAlkYXRhOCBzeXNfbmlfc3lzY2FsbAotIAlkYXRhOCBzeXNfbmlfc3lzY2FsbAkvKiAyNzUgKi8KLSAgCWRhdGE4IHN5c19uaV9zeXNjYWxsCi0gIAlkYXRhOCBjb21wYXRfc3lzX21xX29wZW4KLSAgCWRhdGE4IHN5c19tcV91bmxpbmsKLSAgCWRhdGE4IGNvbXBhdF9zeXNfbXFfdGltZWRzZW5kCi0gIAlkYXRhOCBjb21wYXRfc3lzX21xX3RpbWVkcmVjZWl2ZQkvKiAyODAgKi8KLSAgCWRhdGE4IGNvbXBhdF9zeXNfbXFfbm90aWZ5Ci0gIAlkYXRhOCBjb21wYXRfc3lzX21xX2dldHNldGF0dHIKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkJLyogcmVzZXJ2ZWQgZm9yIGtleGVjICovCi0JZGF0YTggY29tcGF0X3N5c193YWl0aWQKLQotCS8vIGd1YXJkIGFnYWluc3QgZmFpbHVyZXMgdG8gaW5jcmVhc2UgSUEzMl9OUl9zeXNjYWxscwotCS5vcmcgaWEzMl9zeXNjYWxsX3RhYmxlICsgOCpJQTMyX05SX3N5c2NhbGxzCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9pYTMyX2xkdC5jIGIvYXJjaC9pYTY0L2lhMzIvaWEzMl9sZHQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZkNTFjMS4uMDAwMDAwMAotLS0gYS9hcmNoL2lhNjQvaWEzMi9pYTMyX2xkdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDQgSGV3bGV0dC1QYWNrYXJkIENvCi0gKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+Ci0gKgotICogQWRhcHRlZCBmcm9tIGFyY2gvaTM4Ni9rZXJuZWwvbGR0LmMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgImlhMzJwcml2LmgiCi0KLS8qCi0gKiByZWFkX2xkdCgpIGlzIG5vdCByZWFsbHkgYXRvbWljIC0gdGhpcyBpcyBub3QgYSBwcm9ibGVtIHNpbmNlIHN5bmNocm9uaXphdGlvbiBvZiByZWFkcwotICogYW5kIHdyaXRlcyBkb25lIHRvIHRoZSBMRFQgaGFzIHRvIGJlIGFzc3VyZWQgYnkgdXNlci1zcGFjZSBhbnl3YXkuIFdyaXRlcyBhcmUgYXRvbWljLAotICogdG8gcHJvdGVjdCB0aGUgc2VjdXJpdHkgY2hlY2tzIGRvbmUgb24gbmV3IGRlc2NyaXB0b3JzLgotICovCi1zdGF0aWMgaW50Ci1yZWFkX2xkdCAodm9pZCBfX3VzZXIgKnB0ciwgdW5zaWduZWQgbG9uZyBieXRlY291bnQpCi17Ci0JdW5zaWduZWQgbG9uZyBieXRlc19sZWZ0LCBuOwotCWNoYXIgX191c2VyICpzcmMsICpkc3Q7Ci0JY2hhciBidWZbMjU2XTsJLyogdGVtcG9yYXJ5IGJ1ZmZlciAoZG9uJ3Qgb3ZlcmZsb3cga2VybmVsIHN0YWNrISkgKi8KLQotCWlmIChieXRlY291bnQgPiBJQTMyX0xEVF9FTlRSSUVTKklBMzJfTERUX0VOVFJZX1NJWkUpCi0JCWJ5dGVjb3VudCA9IElBMzJfTERUX0VOVFJJRVMqSUEzMl9MRFRfRU5UUllfU0laRTsKLQotCWJ5dGVzX2xlZnQgPSBieXRlY291bnQ7Ci0KLQlzcmMgPSAodm9pZCBfX3VzZXIgKikgSUEzMl9MRFRfT0ZGU0VUOwotCWRzdCA9IHB0cjsKLQotCXdoaWxlIChieXRlc19sZWZ0KSB7Ci0JCW4gPSBzaXplb2YoYnVmKTsKLQkJaWYgKG4gPiBieXRlc19sZWZ0KQotCQkJbiA9IGJ5dGVzX2xlZnQ7Ci0KLQkJLyoKLQkJICogV2Uga25vdyB3ZSdyZSByZWFkaW5nIHZhbGlkIG1lbW9yeSwgYnV0IHdlIHN0aWxsIG11c3QgZ3VhcmQgYWdhaW5zdAotCQkgKiBydW5uaW5nIG91dCBvZiBtZW1vcnkuCi0JCSAqLwotCQlpZiAoX19jb3B5X2Zyb21fdXNlcihidWYsIHNyYywgbikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlpZiAoY29weV90b191c2VyKGRzdCwgYnVmLCBuKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCXNyYyArPSBuOwotCQlkc3QgKz0gbjsKLQkJYnl0ZXNfbGVmdCAtPSBuOwotCX0KLQlyZXR1cm4gYnl0ZWNvdW50OwotfQotCi1zdGF0aWMgaW50Ci1yZWFkX2RlZmF1bHRfbGR0ICh2b2lkIF9fdXNlciAqIHB0ciwgdW5zaWduZWQgbG9uZyBieXRlY291bnQpCi17Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCWludCBlcnI7Ci0KLQkvKiBYWFggZml4IG1lOiBzaG91bGQgcmV0dXJuIGVxdWl2YWxlbnQgb2YgZGVmYXVsdF9sZHRbMF0gKi8KLQllcnIgPSAwOwotCXNpemUgPSA4OwotCWlmIChzaXplID4gYnl0ZWNvdW50KQotCQlzaXplID0gYnl0ZWNvdW50OwotCi0JZXJyID0gc2l6ZTsKLQlpZiAoY2xlYXJfdXNlcihwdHIsIHNpemUpKQotCQllcnIgPSAtRUZBVUxUOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludAotd3JpdGVfbGR0ICh2b2lkIF9fdXNlciAqIHB0ciwgdW5zaWduZWQgbG9uZyBieXRlY291bnQsIGludCBvbGRtb2RlKQotewotCXN0cnVjdCBpYTMyX3VzZXJfZGVzYyBsZHRfaW5mbzsKLQlfX3U2NCBlbnRyeTsKLQlpbnQgcmV0OwotCi0JaWYgKGJ5dGVjb3VudCAhPSBzaXplb2YobGR0X2luZm8pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoY29weV9mcm9tX3VzZXIoJmxkdF9pbmZvLCBwdHIsIHNpemVvZihsZHRfaW5mbykpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChsZHRfaW5mby5lbnRyeV9udW1iZXIgPj0gSUEzMl9MRFRfRU5UUklFUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGxkdF9pbmZvLmNvbnRlbnRzID09IDMpIHsKLQkJaWYgKG9sZG1vZGUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGxkdF9pbmZvLnNlZ19ub3RfcHJlc2VudCA9PSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGxkdF9pbmZvLmJhc2VfYWRkciA9PSAwICYmIGxkdF9pbmZvLmxpbWl0ID09IDAKLQkgICAgJiYgKG9sZG1vZGUgfHwgKGxkdF9pbmZvLmNvbnRlbnRzID09IDAgJiYgbGR0X2luZm8ucmVhZF9leGVjX29ubHkgPT0gMQotCQkJICAgICYmIGxkdF9pbmZvLnNlZ18zMmJpdCA9PSAwICYmIGxkdF9pbmZvLmxpbWl0X2luX3BhZ2VzID09IDAKLQkJCSAgICAmJiBsZHRfaW5mby5zZWdfbm90X3ByZXNlbnQgPT0gMSAmJiBsZHRfaW5mby51c2VhYmxlID09IDApKSkKLQkJLyogYWxsb3cgTERUcyB0byBiZSBjbGVhcmVkIGJ5IHRoZSB1c2VyICovCi0JCWVudHJ5ID0gMDsKLQllbHNlCi0JCS8qIHdlIG11c3Qgc2V0IHRoZSAiQWNjZXNzZWQiIGJpdCBhcyBJVkUgZG9lc24ndCBlbXVsYXRlIGl0ICovCi0JCWVudHJ5ID0gSUEzMl9TRUdfREVTQ1JJUFRPUihsZHRfaW5mby5iYXNlX2FkZHIsIGxkdF9pbmZvLmxpbWl0LAotCQkJCQkgICAgKCgobGR0X2luZm8ucmVhZF9leGVjX29ubHkgXiAxKSA8PCAxKQotCQkJCQkgICAgIHwgKGxkdF9pbmZvLmNvbnRlbnRzIDw8IDIpKSB8IDEsCi0JCQkJCSAgICAxLCAzLCBsZHRfaW5mby5zZWdfbm90X3ByZXNlbnQgXiAxLAotCQkJCQkgICAgKG9sZG1vZGUgPyAwIDogbGR0X2luZm8udXNlYWJsZSksCi0JCQkJCSAgICBsZHRfaW5mby5zZWdfMzJiaXQsCi0JCQkJCSAgICBsZHRfaW5mby5saW1pdF9pbl9wYWdlcyk7Ci0JLyoKLQkgKiBJbnN0YWxsIHRoZSBuZXcgZW50cnkuICBXZSBrbm93IHdlJ3JlIGFjY2Vzc2luZyB2YWxpZCAobWFwcGVkKSB1c2VyLWxldmVsCi0JICogbWVtb3J5LCBidXQgd2Ugc3RpbGwgbmVlZCB0byBndWFyZCBhZ2FpbnN0IG91dC1vZi1tZW1vcnksIGhlbmNlIHdlIG11c3QgdXNlCi0JICogcHV0X3VzZXIoKS4KLQkgKi8KLQlyZXQgPSBfX3B1dF91c2VyKGVudHJ5LCAoX191NjQgX191c2VyICopIElBMzJfTERUX09GRlNFVCArIGxkdF9pbmZvLmVudHJ5X251bWJlcik7Ci0JaWEzMl9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcnMoY3VycmVudCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQKLXN5czMyX21vZGlmeV9sZHQgKGludCBmdW5jLCB1bnNpZ25lZCBpbnQgcHRyLCB1bnNpZ25lZCBpbnQgYnl0ZWNvdW50KQotewotCWludCByZXQgPSAtRU5PU1lTOwotCi0Jc3dpdGNoIChmdW5jKSB7Ci0JICAgICAgY2FzZSAwOgotCQlyZXQgPSByZWFkX2xkdChjb21wYXRfcHRyKHB0ciksIGJ5dGVjb3VudCk7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgMToKLQkJcmV0ID0gd3JpdGVfbGR0KGNvbXBhdF9wdHIocHRyKSwgYnl0ZWNvdW50LCAxKTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAyOgotCQlyZXQgPSByZWFkX2RlZmF1bHRfbGR0KGNvbXBhdF9wdHIocHRyKSwgYnl0ZWNvdW50KTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAweDExOgotCQlyZXQgPSB3cml0ZV9sZHQoY29tcGF0X3B0cihwdHIpLCBieXRlY291bnQsIDApOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2lhMzJfc2lnbmFsLmMgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX3NpZ25hbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzYzY2ExLi4wMDAwMDAwCi0tLSBhL2FyY2gvaWE2NC9pYTMyL2lhMzJfc2lnbmFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEwICswLDAgQEAKLS8qCi0gKiBJQTMyIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzaWduYWwgaGFuZGxpbmcgc3VwcG9ydC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDEtMjAwMiwgMjAwNSBIZXdsZXR0LVBhY2thcmQgQ28KLSAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMTk5OSBBcnVuIFNoYXJtYSA8YXJ1bi5zaGFybWFAaW50ZWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDAwIFZBIExpbnV4IENvCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgRG9uIER1Z2dlciA8bjBhbm9AdmFsaW51eC5jb20+Ci0gKgotICogRGVyaXZlZCBmcm9tIGkzODYgYW5kIEFscGhhIHZlcnNpb25zLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgotCi0jaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9yc2UuaD4KLSNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgotCi0jaW5jbHVkZSAiaWEzMnByaXYuaCIKLQotI2luY2x1ZGUgIi4uL2tlcm5lbC9zaWdmcmFtZS5oIgotCi0jZGVmaW5lIEEoX194KQkJKCh1bnNpZ25lZCBsb25nKShfX3gpKQotCi0jZGVmaW5lIERFQlVHX1NJRwkwCi0jZGVmaW5lIF9CTE9DS0FCTEUJKH4oc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHU1RPUCkpKQotCi0jZGVmaW5lIF9fSUEzMl9OUl9zaWdyZXR1cm4gICAgICAgICAgICAxMTkKLSNkZWZpbmUgX19JQTMyX05SX3J0X3NpZ3JldHVybiAgICAgICAgIDE3MwotCi1zdHJ1Y3Qgc2lnZnJhbWVfaWEzMgotewotICAgICAgIGludCBwcmV0Y29kZTsKLSAgICAgICBpbnQgc2lnOwotICAgICAgIHN0cnVjdCBzaWdjb250ZXh0X2lhMzIgc2M7Ci0gICAgICAgc3RydWN0IF9mcHN0YXRlX2lhMzIgZnBzdGF0ZTsKLSAgICAgICB1bnNpZ25lZCBpbnQgZXh0cmFtYXNrW19DT01QQVRfTlNJR19XT1JEUy0xXTsKLSAgICAgICBjaGFyIHJldGNvZGVbOF07Ci19OwotCi1zdHJ1Y3QgcnRfc2lnZnJhbWVfaWEzMgotewotICAgICAgIGludCBwcmV0Y29kZTsKLSAgICAgICBpbnQgc2lnOwotICAgICAgIGludCBwaW5mbzsKLSAgICAgICBpbnQgcHVjOwotICAgICAgIGNvbXBhdF9zaWdpbmZvX3QgaW5mbzsKLSAgICAgICBzdHJ1Y3QgdWNvbnRleHRfaWEzMiB1YzsKLSAgICAgICBzdHJ1Y3QgX2Zwc3RhdGVfaWEzMiBmcHN0YXRlOwotICAgICAgIGNoYXIgcmV0Y29kZVs4XTsKLX07Ci0KLWludAotY29weV9zaWdpbmZvX2Zyb21fdXNlcjMyIChzaWdpbmZvX3QgKnRvLCBjb21wYXRfc2lnaW5mb190IF9fdXNlciAqZnJvbSkKLXsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQlpbnQgZXJyOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyb20sIHNpemVvZihjb21wYXRfc2lnaW5mb190KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZXJyID0gX19nZXRfdXNlcih0by0+c2lfc2lnbm8sICZmcm9tLT5zaV9zaWdubyk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIodG8tPnNpX2Vycm5vLCAmZnJvbS0+c2lfZXJybm8pOwotCWVyciB8PSBfX2dldF91c2VyKHRvLT5zaV9jb2RlLCAmZnJvbS0+c2lfY29kZSk7Ci0KLQlpZiAodG8tPnNpX2NvZGUgPCAwKQotCQllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigmdG8tPl9zaWZpZWxkcy5fcGFkLCAmZnJvbS0+X3NpZmllbGRzLl9wYWQsIFNJX1BBRF9TSVpFKTsKLQllbHNlIHsKLQkJc3dpdGNoICh0by0+c2lfY29kZSA+PiAxNikgewotCQkgICAgICBjYXNlIF9fU0lfQ0hMRCA+PiAxNjoKLQkJCWVyciB8PSBfX2dldF91c2VyKHRvLT5zaV91dGltZSwgJmZyb20tPnNpX3V0aW1lKTsKLQkJCWVyciB8PSBfX2dldF91c2VyKHRvLT5zaV9zdGltZSwgJmZyb20tPnNpX3N0aW1lKTsKLQkJCWVyciB8PSBfX2dldF91c2VyKHRvLT5zaV9zdGF0dXMsICZmcm9tLT5zaV9zdGF0dXMpOwotCQkgICAgICBkZWZhdWx0OgotCQkJZXJyIHw9IF9fZ2V0X3VzZXIodG8tPnNpX3BpZCwgJmZyb20tPnNpX3BpZCk7Ci0JCQllcnIgfD0gX19nZXRfdXNlcih0by0+c2lfdWlkLCAmZnJvbS0+c2lfdWlkKTsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIF9fU0lfRkFVTFQgPj4gMTY6Ci0JCQllcnIgfD0gX19nZXRfdXNlcih0bXAsICZmcm9tLT5zaV9hZGRyKTsKLQkJCXRvLT5zaV9hZGRyID0gKHZvaWQgX191c2VyICopIHRtcDsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIF9fU0lfUE9MTCA+PiAxNjoKLQkJCWVyciB8PSBfX2dldF91c2VyKHRvLT5zaV9iYW5kLCAmZnJvbS0+c2lfYmFuZCk7Ci0JCQllcnIgfD0gX19nZXRfdXNlcih0by0+c2lfZmQsICZmcm9tLT5zaV9mZCk7Ci0JCQlicmVhazsKLQkJICAgICAgY2FzZSBfX1NJX1JUID4+IDE2OiAvKiBUaGlzIGlzIG5vdCBnZW5lcmF0ZWQgYnkgdGhlIGtlcm5lbCBhcyBvZiBub3cuICAqLwotCQkgICAgICBjYXNlIF9fU0lfTUVTR1EgPj4gMTY6Ci0JCQllcnIgfD0gX19nZXRfdXNlcih0by0+c2lfcGlkLCAmZnJvbS0+c2lfcGlkKTsKLQkJCWVyciB8PSBfX2dldF91c2VyKHRvLT5zaV91aWQsICZmcm9tLT5zaV91aWQpOwotCQkJZXJyIHw9IF9fZ2V0X3VzZXIodG8tPnNpX2ludCwgJmZyb20tPnNpX2ludCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gZXJyOwotfQotCi1pbnQKLWNvcHlfc2lnaW5mb190b191c2VyMzIgKGNvbXBhdF9zaWdpbmZvX3QgX191c2VyICp0bywgc2lnaW5mb190ICpmcm9tKQotewotCXVuc2lnbmVkIGludCBhZGRyOwotCWludCBlcnI7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHRvLCBzaXplb2YoY29tcGF0X3NpZ2luZm9fdCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCS8qIElmIHlvdSBjaGFuZ2Ugc2lnaW5mb190IHN0cnVjdHVyZSwgcGxlYXNlIGJlIHN1cmUKLQkgICB0aGlzIGNvZGUgaXMgZml4ZWQgYWNjb3JkaW5nbHkuCi0JICAgSXQgc2hvdWxkIG5ldmVyIGNvcHkgYW55IHBhZCBjb250YWluZWQgaW4gdGhlIHN0cnVjdHVyZQotCSAgIHRvIGF2b2lkIHNlY3VyaXR5IGxlYWtzLCBidXQgbXVzdCBjb3B5IHRoZSBnZW5lcmljCi0JICAgMyBpbnRzIHBsdXMgdGhlIHJlbGV2YW50IHVuaW9uIG1lbWJlci4KLQkgICBUaGlzIHJvdXRpbmUgbXVzdCBjb252ZXJ0IHNpZ2luZm8gZnJvbSA2NGJpdCB0byAzMmJpdCBhcyB3ZWxsCi0JICAgYXQgdGhlIHNhbWUgdGltZS4gICovCi0JZXJyID0gX19wdXRfdXNlcihmcm9tLT5zaV9zaWdubywgJnRvLT5zaV9zaWdubyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfZXJybm8sICZ0by0+c2lfZXJybm8pOwotCWVyciB8PSBfX3B1dF91c2VyKChzaG9ydClmcm9tLT5zaV9jb2RlLCAmdG8tPnNpX2NvZGUpOwotCWlmIChmcm9tLT5zaV9jb2RlIDwgMCkKLQkJZXJyIHw9IF9fY29weV90b191c2VyKCZ0by0+X3NpZmllbGRzLl9wYWQsICZmcm9tLT5fc2lmaWVsZHMuX3BhZCwgU0lfUEFEX1NJWkUpOwotCWVsc2UgewotCQlzd2l0Y2ggKGZyb20tPnNpX2NvZGUgPj4gMTYpIHsKLQkJY2FzZSBfX1NJX0NITEQgPj4gMTY6Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV91dGltZSwgJnRvLT5zaV91dGltZSk7Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9zdGltZSwgJnRvLT5zaV9zdGltZSk7Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9zdGF0dXMsICZ0by0+c2lfc3RhdHVzKTsKLQkJZGVmYXVsdDoKLQkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3BpZCwgJnRvLT5zaV9waWQpOwotCQkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfdWlkLCAmdG8tPnNpX3VpZCk7Ci0JCQlicmVhazsKLQkJY2FzZSBfX1NJX0ZBVUxUID4+IDE2OgotCQkJLyogYXZvaWQgdHlwZS1jaGVja2luZyB3YXJuaW5ncyBieSBjb3B5aW5nIF9wYWRbMF0gaW4gbGlldSBvZiBzaV9hZGRyLi4uICovCi0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5fc2lmaWVsZHMuX3BhZFswXSwgJnRvLT5zaV9hZGRyKTsKLQkJCWJyZWFrOwotCQljYXNlIF9fU0lfUE9MTCA+PiAxNjoKLQkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX2JhbmQsICZ0by0+c2lfYmFuZCk7Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9mZCwgJnRvLT5zaV9mZCk7Ci0JCQlicmVhazsKLQkJY2FzZSBfX1NJX1RJTUVSID4+IDE2OgotCQkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfdGlkLCAmdG8tPnNpX3RpZCk7Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9vdmVycnVuLCAmdG8tPnNpX292ZXJydW4pOwotCQkJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBmcm9tLT5zaV9wdHI7Ci0JCQllcnIgfD0gX19wdXRfdXNlcihhZGRyLCAmdG8tPnNpX3B0cik7Ci0JCQlicmVhazsKLQkJY2FzZSBfX1NJX1JUID4+IDE2OgkvKiBOb3QgZ2VuZXJhdGVkIGJ5IHRoZSBrZXJuZWwgYXMgb2Ygbm93LiAgKi8KLQkJY2FzZSBfX1NJX01FU0dRID4+IDE2OgotCQkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfdWlkLCAmdG8tPnNpX3VpZCk7Ci0JCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9waWQsICZ0by0+c2lfcGlkKTsKLQkJCWFkZHIgPSAodW5zaWduZWQgbG9uZykgZnJvbS0+c2lfcHRyOwotCQkJZXJyIHw9IF9fcHV0X3VzZXIoYWRkciwgJnRvLT5zaV9wdHIpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotCi0vKgotICogIFNBVkUgYW5kIFJFU1RPUkUgb2YgaWEzMiBmcHN0YXRlIGluZm8sIGZyb20gaWE2NCBjdXJyZW50IHN0YXRlCi0gKiAgVXNlZCBpbiBleGNlcHRpb24gaGFuZGxlciB0byBwYXNzIHRoZSBmcHN0YXRlIHRvIHRoZSB1c2VyLCBhbmQgcmVzdG9yZQotICogIHRoZSBmcHN0YXRlIHdoaWxlIHJldHVybmluZyBmcm9tIHRoZSBleGNlcHRpb24gaGFuZGxlci4KLSAqCi0gKiAgICBmcHN0YXRlIGluZm8gYW5kIHRoZWlyIG1hcHBpbmcgdG8gSUE2NCByZWdzOgotICogICAgZnBzdGF0ZSAgICBSRUcoQklUUykgICAgICBBdHRyaWJ1dGUgICAgQ29tbWVudHMKLSAqICAgIGN3ICAgICAgICAgYXIuZmNyKDA6MTIpICAgICAgICAgICAgICAgIHdpdGggYml0cyA3IGFuZCA2IG5vdCB1c2VkCi0gKiAgICBzdyAgICAgICAgIGFyLmZzcigwOjE1KQotICogICAgdGFnICAgICAgICBhci5mc3IoMTY6MzEpICAgICAgICAgICAgICAgd2l0aCBvZGQgbnVtYmVyZWQgYml0cyBub3QgdXNlZAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWQgcmV0dXJucyAwLCB3cml0ZXMgaWdub3JlZCkKLSAqICAgIGlwb2ZmICAgICAgYXIuZmlyKDA6MzEpCi0gKiAgICBjc3NlbCAgICAgIGFyLmZpcigzMjo0NykKLSAqICAgIGRhdGFvZmYgICAgYXIuZmRyKDA6MzEpCi0gKiAgICBkYXRhc2VsICAgIGFyLmZkcigzMjo0NykKLSAqCi0gKiAgICBfc3RbKDArVE9TKSU4XSAgIGY4Ci0gKiAgICBfc3RbKDErVE9TKSU4XSAgIGY5Ci0gKiAgICBfc3RbKDIrVE9TKSU4XSAgIGYxMAotICogICAgX3N0WygzK1RPUyklOF0gICBmMTEgICAgICAgICAgICAgICAgICAgKGY4Li5mMTEgZnJvbSBwdHJlZ3MpCi0gKiAgICAgIDogOiAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAoZjEyLi5mMTUgZnJvbSBsaXZlIHJlZykKLSAqICAgICAgOiA6ICAgICAgICAgICAgOgotICogICAgX3N0Wyg3K1RPUyklOF0gICBmMTUgICAgICAgICAgICAgICAgICAgVE9TPXN3LnRvcChiaXRzMTE6MTMpCi0gKgotICogICAgc3RhdHVzICAgICBTYW1lIGFzIHN3ICAgICBSTwotICogICAgbWFnaWMgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgWDg2X0ZYU1JfTUFHSUMgaW4gaWEzMgotICogICAgbXhjc3IgICAgICBCaXRzKDc6MTUpPWFyLmZjcigzOTo0NykKLSAqICAgICAgICAgICAgICAgQml0cygwOjUpID1hci5mc3IoMzI6MzcpICAgIHdpdGggYml0IDYgcmVzZXJ2ZWQKLSAqICAgIF94bW1bMC4uN10gZjE2Li5mMzEgICAgICAgICAgICAgICAgICAgIChsaXZlIHJlZ2lzdGVycykKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggX3htbVswXQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQoNjQ6MTI3KT1mMTcoMDo2MykKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0KDA6NjMpPWYxNigwOjYzKQotICogICAgQWxsIG90aGVyIGZpZWxkcyB1bnVzZWQuLi4KLSAqLwotCi1zdGF0aWMgaW50Ci1zYXZlX2lhMzJfZnBzdGF0ZV9saXZlIChzdHJ1Y3QgX2Zwc3RhdGVfaWEzMiBfX3VzZXIgKnNhdmUpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCXN0cnVjdCBwdF9yZWdzICpwdHA7Ci0Jc3RydWN0IF9mcHJlZ19pYTMyICpmcHJlZ3A7Ci0JY2hhciBidWZbMzJdOwotCXVuc2lnbmVkIGxvbmcgZnNyLCBmY3IsIGZpciwgZmRyOwotCXVuc2lnbmVkIGxvbmcgbmV3X2ZzcjsKLQl1bnNpZ25lZCBsb25nIG51bTEyOFsyXTsKLQl1bnNpZ25lZCBsb25nIG14Y3NyPTA7Ci0JaW50IGZwX3RvcywgZnI4X3N0X21hcDsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgc2F2ZSwgc2l6ZW9mKCpzYXZlKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JLyogUmVhZCBpbiBmc3IsIGZjciwgZmlyLCBmZHIgYW5kIGNvcHkgb250byBmcHN0YXRlICovCi0JZnNyID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0ZTUik7Ci0JZmNyID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0ZDUik7Ci0JZmlyID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0ZJUik7Ci0JZmRyID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0ZEUik7Ci0KLQkvKgotCSAqIFdlIG5lZWQgdG8gY2xlYXIgdGhlIGV4Y2VwdGlvbiBzdGF0ZSBiZWZvcmUgY2FsbGluZyB0aGUgc2lnbmFsIGhhbmRsZXIuIENsZWFyCi0JICogdGhlIGJpdHMgMTUsIGJpdHMgMC03IGluIGZwIHN0YXR1cyB3b3JkLiBTaW1pbGFyIHRvIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGZuY2xleAotCSAqIGluc3RydWN0aW9uLgotCSAqLwotCW5ld19mc3IgPSBmc3IgJiB+MHg4MGZmOwotCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19BUl9GU1IsIG5ld19mc3IpOwotCi0JX19wdXRfdXNlcihmY3IgJiAweGZmZmYsICZzYXZlLT5jdyk7Ci0JX19wdXRfdXNlcihmc3IgJiAweGZmZmYsICZzYXZlLT5zdyk7Ci0JX19wdXRfdXNlcigoZnNyPj4xNikgJiAweGZmZmYsICZzYXZlLT50YWcpOwotCV9fcHV0X3VzZXIoZmlyLCAmc2F2ZS0+aXBvZmYpOwotCV9fcHV0X3VzZXIoKGZpcj4+MzIpICYgMHhmZmZmLCAmc2F2ZS0+Y3NzZWwpOwotCV9fcHV0X3VzZXIoZmRyLCAmc2F2ZS0+ZGF0YW9mZik7Ci0JX19wdXRfdXNlcigoZmRyPj4zMikgJiAweGZmZmYsICZzYXZlLT5kYXRhc2VsKTsKLQlfX3B1dF91c2VyKGZzciAmIDB4ZmZmZiwgJnNhdmUtPnN0YXR1cyk7Ci0KLQlteGNzciA9ICgoZmNyPj4zMikgJiAweGZmODApIHwgKChmc3I+PjMyKSAmIDB4M2YpOwotCV9fcHV0X3VzZXIobXhjc3IgJiAweGZmZmYsICZzYXZlLT5teGNzcik7Ci0JX19wdXRfdXNlciggMCwgJnNhdmUtPm1hZ2ljKTsgLy8jZGVmaW5lIFg4Nl9GWFNSX01BR0lDICAgMHgwMDAwCi0KLQkvKgotCSAqIHNhdmUgZjguLmYxMSAgZnJvbSBwdF9yZWdzCi0JICogc2F2ZSBmMTIuLmYxNSBmcm9tIGxpdmUgcmVnaXN0ZXIgc2V0Ci0JICovCi0JLyoKLQkgKiAgRmluZCB0aGUgbG9jYXRpb24gd2hlcmUgZjggaGFzIHRvIGdvIGluIGZwIHJlZyBzdGFjay4gIFRoaXMgZGVwZW5kcyBvbgotCSAqICBUT1AoMTE6MTMpIGZpZWxkIG9mIHN3LiBPdGhlciBmIHJlZyBjb250aW51ZSBzZXF1ZW50aWFsbHkgZnJvbSB3aGVyZSBmOCBtYXBzCi0JICogIHRvLgotCSAqLwotCWZwX3RvcyA9IChmc3I+PjExKSYweDc7Ci0JZnI4X3N0X21hcCA9ICg4LWZwX3RvcykmMHg3OwotCXB0cCA9IHRhc2tfcHRfcmVncyh0c2spOwotCWZwcmVncCA9IChzdHJ1Y3QgX2ZwcmVnX2lhMzIgKikoKCh1bnNpZ25lZCBsb25nKWJ1ZiArIDE1KSAmIH4xNSk7Ci0JaWE2NGYyaWEzMmYoZnByZWdwLCAmcHRwLT5mOCk7Ci0JY29weV90b191c2VyKCZzYXZlLT5fc3RbKDArZnI4X3N0X21hcCkmMHg3XSwgZnByZWdwLCBzaXplb2Yoc3RydWN0IF9mcHJlZ19pYTMyKSk7Ci0JaWE2NGYyaWEzMmYoZnByZWdwLCAmcHRwLT5mOSk7Ci0JY29weV90b191c2VyKCZzYXZlLT5fc3RbKDErZnI4X3N0X21hcCkmMHg3XSwgZnByZWdwLCBzaXplb2Yoc3RydWN0IF9mcHJlZ19pYTMyKSk7Ci0JaWE2NGYyaWEzMmYoZnByZWdwLCAmcHRwLT5mMTApOwotCWNvcHlfdG9fdXNlcigmc2F2ZS0+X3N0WygyK2ZyOF9zdF9tYXApJjB4N10sIGZwcmVncCwgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOwotCWlhNjRmMmlhMzJmKGZwcmVncCwgJnB0cC0+ZjExKTsKLQljb3B5X3RvX3VzZXIoJnNhdmUtPl9zdFsoMytmcjhfc3RfbWFwKSYweDddLCBmcHJlZ3AsIHNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpKTsKLQotCWlhNjRfc3RmZShmcHJlZ3AsIDEyKTsKLQljb3B5X3RvX3VzZXIoJnNhdmUtPl9zdFsoNCtmcjhfc3RfbWFwKSYweDddLCBmcHJlZ3AsIHNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpKTsKLQlpYTY0X3N0ZmUoZnByZWdwLCAxMyk7Ci0JY29weV90b191c2VyKCZzYXZlLT5fc3RbKDUrZnI4X3N0X21hcCkmMHg3XSwgZnByZWdwLCBzaXplb2Yoc3RydWN0IF9mcHJlZ19pYTMyKSk7Ci0JaWE2NF9zdGZlKGZwcmVncCwgMTQpOwotCWNvcHlfdG9fdXNlcigmc2F2ZS0+X3N0Wyg2K2ZyOF9zdF9tYXApJjB4N10sIGZwcmVncCwgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOwotCWlhNjRfc3RmZShmcHJlZ3AsIDE1KTsKLQljb3B5X3RvX3VzZXIoJnNhdmUtPl9zdFsoNytmcjhfc3RfbWFwKSYweDddLCBmcHJlZ3AsIHNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpKTsKLQotCWlhNjRfc3RmOCgmbnVtMTI4WzBdLCAxNik7Ci0JaWE2NF9zdGY4KCZudW0xMjhbMV0sIDE3KTsKLQljb3B5X3RvX3VzZXIoJnNhdmUtPl94bW1bMF0sIG51bTEyOCwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQotCWlhNjRfc3RmOCgmbnVtMTI4WzBdLCAxOCk7Ci0JaWE2NF9zdGY4KCZudW0xMjhbMV0sIDE5KTsKLQljb3B5X3RvX3VzZXIoJnNhdmUtPl94bW1bMV0sIG51bTEyOCwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQotCWlhNjRfc3RmOCgmbnVtMTI4WzBdLCAyMCk7Ci0JaWE2NF9zdGY4KCZudW0xMjhbMV0sIDIxKTsKLQljb3B5X3RvX3VzZXIoJnNhdmUtPl94bW1bMl0sIG51bTEyOCwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQotCWlhNjRfc3RmOCgmbnVtMTI4WzBdLCAyMik7Ci0JaWE2NF9zdGY4KCZudW0xMjhbMV0sIDIzKTsKLQljb3B5X3RvX3VzZXIoJnNhdmUtPl94bW1bM10sIG51bTEyOCwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQotCWlhNjRfc3RmOCgmbnVtMTI4WzBdLCAyNCk7Ci0JaWE2NF9zdGY4KCZudW0xMjhbMV0sIDI1KTsKLQljb3B5X3RvX3VzZXIoJnNhdmUtPl94bW1bNF0sIG51bTEyOCwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQotCWlhNjRfc3RmOCgmbnVtMTI4WzBdLCAyNik7Ci0JaWE2NF9zdGY4KCZudW0xMjhbMV0sIDI3KTsKLQljb3B5X3RvX3VzZXIoJnNhdmUtPl94bW1bNV0sIG51bTEyOCwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQotCWlhNjRfc3RmOCgmbnVtMTI4WzBdLCAyOCk7Ci0JaWE2NF9zdGY4KCZudW0xMjhbMV0sIDI5KTsKLQljb3B5X3RvX3VzZXIoJnNhdmUtPl94bW1bNl0sIG51bTEyOCwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQotCWlhNjRfc3RmOCgmbnVtMTI4WzBdLCAzMCk7Ci0JaWE2NF9zdGY4KCZudW0xMjhbMV0sIDMxKTsKLQljb3B5X3RvX3VzZXIoJnNhdmUtPl94bW1bN10sIG51bTEyOCwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotcmVzdG9yZV9pYTMyX2Zwc3RhdGVfbGl2ZSAoc3RydWN0IF9mcHN0YXRlX2lhMzIgX191c2VyICpzYXZlKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlzdHJ1Y3QgcHRfcmVncyAqcHRwOwotCXVuc2lnbmVkIGludCBsbywgaGk7Ci0JdW5zaWduZWQgbG9uZyBudW0xMjhbMl07Ci0JdW5zaWduZWQgbG9uZyBudW02NCwgbXhjc3I7Ci0Jc3RydWN0IF9mcHJlZ19pYTMyICpmcHJlZ3A7Ci0JY2hhciBidWZbMzJdOwotCXVuc2lnbmVkIGxvbmcgZnNyLCBmY3IsIGZpciwgZmRyOwotCWludCBmcF90b3MsIGZyOF9zdF9tYXA7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgc2F2ZSwgc2l6ZW9mKCpzYXZlKSkpCi0JCXJldHVybigtRUZBVUxUKTsKLQotCS8qCi0JICogVXBkYXRpbmcgZnNyLCBmY3IsIGZpciwgZmRyLgotCSAqIEp1c3QgYSBiaXQgbW9yZSBjb21wbGljYXRlZCB0aGFuIHNhdmUuCi0JICogLSBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IHdyaXRlIGFueSB2YWx1ZSBvdGhlciB0aGFuIHRoZQotCSAqICAgc3BlY2lmaWMgZnBzdGF0ZSBpbmZvCi0JICogLSBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB1bnRvdWNoZWQgcGFydCBvZiBmcnMsIGZkciwgZmlyLCBmY3IKLQkgKiAgIHNob3VsZCByZW1haW4gc2FtZSB3aGlsZSB3cml0aW5nLgotCSAqIFNvLCB3ZSBkbyBhIHJlYWQsIGNoYW5nZSBzcGVjaWZpYyBmaWVsZHMgYW5kIHdyaXRlLgotCSAqLwotCWZzciA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9GU1IpOwotCWZjciA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9GQ1IpOwotCWZpciA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9GSVIpOwotCWZkciA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9GRFIpOwotCi0JX19nZXRfdXNlcihteGNzciwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2F2ZS0+bXhjc3IpOwotCS8qIHNldHRpbmcgYml0cyAwLi41IDguLjEyIHdpdGggY3cgYW5kIDM5Li40NyBmcm9tIG14Y3NyICovCi0JX19nZXRfdXNlcihsbywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2F2ZS0+Y3cpOwotCW51bTY0ID0gbXhjc3IgJiAweGZmMTA7Ci0JbnVtNjQgPSAobnVtNjQgPDwgMzIpIHwgKGxvICYgMHgxZjNmKTsKLQlmY3IgPSAoZmNyICYgKH4weGZmMTAwMDAwMWYzZlVMKSkgfCBudW02NDsKLQotCS8qIHNldHRpbmcgYml0cyAwLi4zMSB3aXRoIHN3IGFuZCB0YWcgYW5kIDMyLi4zNyBmcm9tIG14Y3NyICovCi0JX19nZXRfdXNlcihsbywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2F2ZS0+c3cpOwotCS8qIHNldCBiaXRzIDE1LDcgKGZzdy5iLCBmc3cuZXMpIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgZXJyb3Igc3RhdHVzICovCi0JaWYgKCAhKGxvICYgMHg3ZikgKQotCQlsbyAmPSAofjB4ODA4MCk7Ci0JX19nZXRfdXNlcihoaSwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2F2ZS0+dGFnKTsKLQludW02NCA9IG14Y3NyICYgMHgzZjsKLQludW02NCA9IChudW02NCA8PCAxNikgfCAoaGkgJiAweGZmZmYpOwotCW51bTY0ID0gKG51bTY0IDw8IDE2KSB8IChsbyAmIDB4ZmZmZik7Ci0JZnNyID0gKGZzciAmICh+MHgzZmZmZmZmZmZmVUwpKSB8IG51bTY0OwotCi0JLyogc2V0dGluZyBiaXRzIDAuLjQ3IHdpdGggY3NzZWwgYW5kIGlwb2ZmICovCi0JX19nZXRfdXNlcihsbywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2F2ZS0+aXBvZmYpOwotCV9fZ2V0X3VzZXIoaGksICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNhdmUtPmNzc2VsKTsKLQludW02NCA9IGhpICYgMHhmZmZmOwotCW51bTY0ID0gKG51bTY0IDw8IDMyKSB8IGxvOwotCWZpciA9IChmaXIgJiAofjB4ZmZmZmZmZmZmZmZmVUwpKSB8IG51bTY0OwotCi0JLyogc2V0dGluZyBiaXRzIDAuLjQ3IHdpdGggZGF0YXNlbCBhbmQgZGF0YW9mZiAqLwotCV9fZ2V0X3VzZXIobG8sICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNhdmUtPmRhdGFvZmYpOwotCV9fZ2V0X3VzZXIoaGksICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNhdmUtPmRhdGFzZWwpOwotCW51bTY0ID0gaGkgJiAweGZmZmY7Ci0JbnVtNjQgPSAobnVtNjQgPDwgMzIpIHwgbG87Ci0JZmRyID0gKGZkciAmICh+MHhmZmZmZmZmZmZmZmZVTCkpIHwgbnVtNjQ7Ci0KLQlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfRlNSLCBmc3IpOwotCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19BUl9GQ1IsIGZjcik7Ci0JaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0FSX0ZJUiwgZmlyKTsKLQlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfRkRSLCBmZHIpOwotCi0JLyoKLQkgKiByZXN0b3JlIGY4Li5mMTEgb250byBwdF9yZWdzCi0JICogcmVzdG9yZSBmMTIuLmYxNSBvbnRvIGxpdmUgcmVnaXN0ZXJzCi0JICovCi0JLyoKLQkgKiAgRmluZCB0aGUgbG9jYXRpb24gd2hlcmUgZjggaGFzIHRvIGdvIGluIGZwIHJlZyBzdGFjay4gIFRoaXMgZGVwZW5kcyBvbgotCSAqICBUT1AoMTE6MTMpIGZpZWxkIG9mIHN3LiBPdGhlciBmIHJlZyBjb250aW51ZSBzZXF1ZW50aWFsbHkgZnJvbSB3aGVyZSBmOCBtYXBzCi0JICogIHRvLgotCSAqLwotCWZwX3RvcyA9IChmc3I+PjExKSYweDc7Ci0JZnI4X3N0X21hcCA9ICg4LWZwX3RvcykmMHg3OwotCWZwcmVncCA9IChzdHJ1Y3QgX2ZwcmVnX2lhMzIgKikoKCh1bnNpZ25lZCBsb25nKWJ1ZiArIDE1KSAmIH4xNSk7Ci0KLQlwdHAgPSB0YXNrX3B0X3JlZ3ModHNrKTsKLQljb3B5X2Zyb21fdXNlcihmcHJlZ3AsICZzYXZlLT5fc3RbKDArZnI4X3N0X21hcCkmMHg3XSwgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOwotCWlhMzJmMmlhNjRmKCZwdHAtPmY4LCBmcHJlZ3ApOwotCWNvcHlfZnJvbV91c2VyKGZwcmVncCwgJnNhdmUtPl9zdFsoMStmcjhfc3RfbWFwKSYweDddLCBzaXplb2Yoc3RydWN0IF9mcHJlZ19pYTMyKSk7Ci0JaWEzMmYyaWE2NGYoJnB0cC0+ZjksIGZwcmVncCk7Ci0JY29weV9mcm9tX3VzZXIoZnByZWdwLCAmc2F2ZS0+X3N0WygyK2ZyOF9zdF9tYXApJjB4N10sIHNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpKTsKLQlpYTMyZjJpYTY0ZigmcHRwLT5mMTAsIGZwcmVncCk7Ci0JY29weV9mcm9tX3VzZXIoZnByZWdwLCAmc2F2ZS0+X3N0WygzK2ZyOF9zdF9tYXApJjB4N10sIHNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpKTsKLQlpYTMyZjJpYTY0ZigmcHRwLT5mMTEsIGZwcmVncCk7Ci0KLQljb3B5X2Zyb21fdXNlcihmcHJlZ3AsICZzYXZlLT5fc3RbKDQrZnI4X3N0X21hcCkmMHg3XSwgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOwotCWlhNjRfbGRmZSgxMiwgZnByZWdwKTsKLQljb3B5X2Zyb21fdXNlcihmcHJlZ3AsICZzYXZlLT5fc3RbKDUrZnI4X3N0X21hcCkmMHg3XSwgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOwotCWlhNjRfbGRmZSgxMywgZnByZWdwKTsKLQljb3B5X2Zyb21fdXNlcihmcHJlZ3AsICZzYXZlLT5fc3RbKDYrZnI4X3N0X21hcCkmMHg3XSwgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOwotCWlhNjRfbGRmZSgxNCwgZnByZWdwKTsKLQljb3B5X2Zyb21fdXNlcihmcHJlZ3AsICZzYXZlLT5fc3RbKDcrZnI4X3N0X21hcCkmMHg3XSwgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOwotCWlhNjRfbGRmZSgxNSwgZnByZWdwKTsKLQotCWNvcHlfZnJvbV91c2VyKG51bTEyOCwgJnNhdmUtPl94bW1bMF0sIHNpemVvZihzdHJ1Y3QgX3htbXJlZ19pYTMyKSk7Ci0JaWE2NF9sZGY4KDE2LCAmbnVtMTI4WzBdKTsKLQlpYTY0X2xkZjgoMTcsICZudW0xMjhbMV0pOwotCi0JY29weV9mcm9tX3VzZXIobnVtMTI4LCAmc2F2ZS0+X3htbVsxXSwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQlpYTY0X2xkZjgoMTgsICZudW0xMjhbMF0pOwotCWlhNjRfbGRmOCgxOSwgJm51bTEyOFsxXSk7Ci0KLQljb3B5X2Zyb21fdXNlcihudW0xMjgsICZzYXZlLT5feG1tWzJdLCBzaXplb2Yoc3RydWN0IF94bW1yZWdfaWEzMikpOwotCWlhNjRfbGRmOCgyMCwgJm51bTEyOFswXSk7Ci0JaWE2NF9sZGY4KDIxLCAmbnVtMTI4WzFdKTsKLQotCWNvcHlfZnJvbV91c2VyKG51bTEyOCwgJnNhdmUtPl94bW1bM10sIHNpemVvZihzdHJ1Y3QgX3htbXJlZ19pYTMyKSk7Ci0JaWE2NF9sZGY4KDIyLCAmbnVtMTI4WzBdKTsKLQlpYTY0X2xkZjgoMjMsICZudW0xMjhbMV0pOwotCi0JY29weV9mcm9tX3VzZXIobnVtMTI4LCAmc2F2ZS0+X3htbVs0XSwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQlpYTY0X2xkZjgoMjQsICZudW0xMjhbMF0pOwotCWlhNjRfbGRmOCgyNSwgJm51bTEyOFsxXSk7Ci0KLQljb3B5X2Zyb21fdXNlcihudW0xMjgsICZzYXZlLT5feG1tWzVdLCBzaXplb2Yoc3RydWN0IF94bW1yZWdfaWEzMikpOwotCWlhNjRfbGRmOCgyNiwgJm51bTEyOFswXSk7Ci0JaWE2NF9sZGY4KDI3LCAmbnVtMTI4WzFdKTsKLQotCWNvcHlfZnJvbV91c2VyKG51bTEyOCwgJnNhdmUtPl94bW1bNl0sIHNpemVvZihzdHJ1Y3QgX3htbXJlZ19pYTMyKSk7Ci0JaWE2NF9sZGY4KDI4LCAmbnVtMTI4WzBdKTsKLQlpYTY0X2xkZjgoMjksICZudW0xMjhbMV0pOwotCi0JY29weV9mcm9tX3VzZXIobnVtMTI4LCAmc2F2ZS0+X3htbVs3XSwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQlpYTY0X2xkZjgoMzAsICZudW0xMjhbMF0pOwotCWlhNjRfbGRmOCgzMSwgJm51bTEyOFsxXSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotc2lnYWN0X3NldF9oYW5kbGVyIChzdHJ1Y3Qga19zaWdhY3Rpb24gKnNhLCB1bnNpZ25lZCBpbnQgaGFuZGxlciwgdW5zaWduZWQgaW50IHJlc3RvcmVyKQotewotCWlmIChoYW5kbGVyICsgMSA8PSAyKQotCQkvKiBTSUdfREZMLCBTSUdfSUdOLCBvciBTSUdfRVJSOiBtdXN0IHNpZ24tZXh0ZW5kIHRvIDY0LWJpdHMgKi8KLQkJc2EtPnNhLnNhX2hhbmRsZXIgPSAoX19zaWdoYW5kbGVyX3QpIEEoKGludCkgaGFuZGxlcik7Ci0JZWxzZQotCQlzYS0+c2Euc2FfaGFuZGxlciA9IChfX3NpZ2hhbmRsZXJfdCkgKCgodW5zaWduZWQgbG9uZykgcmVzdG9yZXIgPDwgMzIpIHwgaGFuZGxlcik7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfc2lnc3VzcGVuZCAoaW50IGhpc3RvcnkwLCBpbnQgaGlzdG9yeTEsIG9sZF9zaWdzZXRfdCBtYXNrKQotewotCW1hc2sgJj0gX0JMT0NLQUJMRTsKLQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQljdXJyZW50LT5zYXZlZF9zaWdtYXNrID0gY3VycmVudC0+YmxvY2tlZDsKLQlzaWdpbml0c2V0KCZjdXJyZW50LT5ibG9ja2VkLCBtYXNrKTsKLQlyZWNhbGNfc2lncGVuZGluZygpOwotCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0KLQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKLQlzY2hlZHVsZSgpOwotCXNldF9yZXN0b3JlX3NpZ21hc2soKTsKLQlyZXR1cm4gLUVSRVNUQVJUTk9IQU5EOwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX3NpZ25hbCAoaW50IHNpZywgdW5zaWduZWQgaW50IGhhbmRsZXIpCi17Ci0Jc3RydWN0IGtfc2lnYWN0aW9uIG5ld19zYSwgb2xkX3NhOwotCWludCByZXQ7Ci0KLQlzaWdhY3Rfc2V0X2hhbmRsZXIoJm5ld19zYSwgaGFuZGxlciwgMCk7Ci0JbmV3X3NhLnNhLnNhX2ZsYWdzID0gU0FfT05FU0hPVCB8IFNBX05PTUFTSzsKLQlzaWdlbXB0eXNldCgmbmV3X3NhLnNhLnNhX21hc2spOwotCi0JcmV0ID0gZG9fc2lnYWN0aW9uKHNpZywgJm5ld19zYSwgJm9sZF9zYSk7Ci0KLQlyZXR1cm4gcmV0ID8gcmV0IDogSUEzMl9TQV9IQU5ETEVSKCZvbGRfc2EpOwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX3J0X3NpZ2FjdGlvbiAoaW50IHNpZywgc3RydWN0IHNpZ2FjdGlvbjMyIF9fdXNlciAqYWN0LAotCQkgICAgc3RydWN0IHNpZ2FjdGlvbjMyIF9fdXNlciAqb2FjdCwgdW5zaWduZWQgaW50IHNpZ3NldHNpemUpCi17Ci0Jc3RydWN0IGtfc2lnYWN0aW9uIG5ld19rYSwgb2xkX2thOwotCXVuc2lnbmVkIGludCBoYW5kbGVyLCByZXN0b3JlcjsKLQlpbnQgcmV0OwotCi0JLyogWFhYOiBEb24ndCBwcmVjbHVkZSBoYW5kbGluZyBkaWZmZXJlbnQgc2l6ZWQgc2lnc2V0X3Qncy4gICovCi0JaWYgKHNpZ3NldHNpemUgIT0gc2l6ZW9mKGNvbXBhdF9zaWdzZXRfdCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGFjdCkgewotCQlyZXQgPSBnZXRfdXNlcihoYW5kbGVyLCAmYWN0LT5zYV9oYW5kbGVyKTsKLQkJcmV0IHw9IGdldF91c2VyKG5ld19rYS5zYS5zYV9mbGFncywgJmFjdC0+c2FfZmxhZ3MpOwotCQlyZXQgfD0gZ2V0X3VzZXIocmVzdG9yZXIsICZhY3QtPnNhX3Jlc3RvcmVyKTsKLQkJcmV0IHw9IGNvcHlfZnJvbV91c2VyKCZuZXdfa2Euc2Euc2FfbWFzaywgJmFjdC0+c2FfbWFzaywgc2l6ZW9mKGNvbXBhdF9zaWdzZXRfdCkpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJc2lnYWN0X3NldF9oYW5kbGVyKCZuZXdfa2EsIGhhbmRsZXIsIHJlc3RvcmVyKTsKLQl9Ci0KLQlyZXQgPSBkb19zaWdhY3Rpb24oc2lnLCBhY3QgPyAmbmV3X2thIDogTlVMTCwgb2FjdCA/ICZvbGRfa2EgOiBOVUxMKTsKLQotCWlmICghcmV0ICYmIG9hY3QpIHsKLQkJcmV0ID0gcHV0X3VzZXIoSUEzMl9TQV9IQU5ETEVSKCZvbGRfa2EpLCAmb2FjdC0+c2FfaGFuZGxlcik7Ci0JCXJldCB8PSBwdXRfdXNlcihvbGRfa2Euc2Euc2FfZmxhZ3MsICZvYWN0LT5zYV9mbGFncyk7Ci0JCXJldCB8PSBwdXRfdXNlcihJQTMyX1NBX1JFU1RPUkVSKCZvbGRfa2EpLCAmb2FjdC0+c2FfcmVzdG9yZXIpOwotCQlyZXQgfD0gY29weV90b191c2VyKCZvYWN0LT5zYV9tYXNrLCAmb2xkX2thLnNhLnNhX21hc2ssIHNpemVvZihjb21wYXRfc2lnc2V0X3QpKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX3J0X3NpZ3Byb2NtYXNrIChpbnQgaG93LCBjb21wYXRfc2lnc2V0X3QgX191c2VyICpzZXQsIGNvbXBhdF9zaWdzZXRfdCBfX3VzZXIgKm9zZXQsCi0JCSAgICAgIHVuc2lnbmVkIGludCBzaWdzZXRzaXplKQotewotCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKLQlzaWdzZXRfdCBzOwotCWxvbmcgcmV0OwotCi0JaWYgKHNpZ3NldHNpemUgPiBzaXplb2YocykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHNldCkgewotCQltZW1zZXQoJnMsIDAsIHNpemVvZihzKSk7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmcy5zaWcsIHNldCwgc2lnc2V0c2l6ZSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JcmV0ID0gc3lzX3J0X3NpZ3Byb2NtYXNrKGhvdywKLQkJCQkgc2V0ID8gKHNpZ3NldF90IF9fdXNlciAqKSAmcyA6IE5VTEwsCi0JCQkJIG9zZXQgPyAoc2lnc2V0X3QgX191c2VyICopICZzIDogTlVMTCwgc2l6ZW9mKHMpKTsKLQlzZXRfZnMob2xkX2ZzKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCWlmIChvc2V0KSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIob3NldCwgJnMuc2lnLCBzaWdzZXRzaXplKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9ydF9zaWdxdWV1ZWluZm8gKGludCBwaWQsIGludCBzaWcsIGNvbXBhdF9zaWdpbmZvX3QgX191c2VyICp1aW5mbykKLXsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0Jc2lnaW5mb190IGluZm87Ci0JaW50IHJldDsKLQotCWlmIChjb3B5X3NpZ2luZm9fZnJvbV91c2VyMzIoJmluZm8sIHVpbmZvKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JcmV0ID0gc3lzX3J0X3NpZ3F1ZXVlaW5mbyhwaWQsIHNpZywgKHNpZ2luZm9fdCBfX3VzZXIgKikgJmluZm8pOwotCXNldF9mcyhvbGRfZnMpOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfc2lnYWN0aW9uIChpbnQgc2lnLCBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbjMyIF9fdXNlciAqYWN0LCBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbjMyIF9fdXNlciAqb2FjdCkKLXsKLQlzdHJ1Y3Qga19zaWdhY3Rpb24gbmV3X2thLCBvbGRfa2E7Ci0JdW5zaWduZWQgaW50IGhhbmRsZXIsIHJlc3RvcmVyOwotCWludCByZXQ7Ci0KLQlpZiAoYWN0KSB7Ci0JCWNvbXBhdF9vbGRfc2lnc2V0X3QgbWFzazsKLQotCQlyZXQgPSBnZXRfdXNlcihoYW5kbGVyLCAmYWN0LT5zYV9oYW5kbGVyKTsKLQkJcmV0IHw9IGdldF91c2VyKG5ld19rYS5zYS5zYV9mbGFncywgJmFjdC0+c2FfZmxhZ3MpOwotCQlyZXQgfD0gZ2V0X3VzZXIocmVzdG9yZXIsICZhY3QtPnNhX3Jlc3RvcmVyKTsKLQkJcmV0IHw9IGdldF91c2VyKG1hc2ssICZhY3QtPnNhX21hc2spOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQotCQlzaWdhY3Rfc2V0X2hhbmRsZXIoJm5ld19rYSwgaGFuZGxlciwgcmVzdG9yZXIpOwotCQlzaWdpbml0c2V0KCZuZXdfa2Euc2Euc2FfbWFzaywgbWFzayk7Ci0JfQotCi0JcmV0ID0gZG9fc2lnYWN0aW9uKHNpZywgYWN0ID8gJm5ld19rYSA6IE5VTEwsIG9hY3QgPyAmb2xkX2thIDogTlVMTCk7Ci0KLQlpZiAoIXJldCAmJiBvYWN0KSB7Ci0JCXJldCA9IHB1dF91c2VyKElBMzJfU0FfSEFORExFUigmb2xkX2thKSwgJm9hY3QtPnNhX2hhbmRsZXIpOwotCQlyZXQgfD0gcHV0X3VzZXIob2xkX2thLnNhLnNhX2ZsYWdzLCAmb2FjdC0+c2FfZmxhZ3MpOwotCQlyZXQgfD0gcHV0X3VzZXIoSUEzMl9TQV9SRVNUT1JFUigmb2xkX2thKSwgJm9hY3QtPnNhX3Jlc3RvcmVyKTsKLQkJcmV0IHw9IHB1dF91c2VyKG9sZF9rYS5zYS5zYV9tYXNrLnNpZ1swXSwgJm9hY3QtPnNhX21hc2spOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLXNldHVwX3NpZ2NvbnRleHRfaWEzMiAoc3RydWN0IHNpZ2NvbnRleHRfaWEzMiBfX3VzZXIgKnNjLCBzdHJ1Y3QgX2Zwc3RhdGVfaWEzMiBfX3VzZXIgKmZwc3RhdGUsCi0JCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBtYXNrKQotewotCWludCAgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWc7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHNjLCBzaXplb2YoKnNjKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZXJyIHw9IF9fcHV0X3VzZXIoKHJlZ3MtPnIxNiA+PiAzMikgJiAweGZmZmYsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5mcyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoKHJlZ3MtPnIxNiA+PiA0OCkgJiAweGZmZmYsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5ncyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoKHJlZ3MtPnIxNiA+PiAxNikgJiAweGZmZmYsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5lcyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjE2ICYgMHhmZmZmLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZHMpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnIxNSwgJnNjLT5lZGkpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnIxNCwgJnNjLT5lc2kpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnIxMywgJnNjLT5lYnApOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnIxMiwgJnNjLT5lc3ApOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnIxMSwgJnNjLT5lYngpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnIxMCwgJnNjLT5lZHgpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnI5LCAmc2MtPmVjeCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjgsICZzYy0+ZWF4KTsKLSNpZiAwCi0JZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+dHNzLnRyYXBfbm8sICZzYy0+dHJhcG5vKTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50c3MuZXJyb3JfY29kZSwgJnNjLT5lcnIpOwotI2VuZGlmCi0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+Y3JfaWlwLCAmc2MtPmVpcCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cjE3ICYgMHhmZmZmLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+Y3MpOwotCS8qCi0JICogIGBlZmxhZ3MnIGlzIGluIGFuIGFyIHJlZ2lzdGVyIGZvciB0aGlzIGNvbnRleHQKLQkgKi8KLQlmbGFnID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0VGTEFHKTsKLQllcnIgfD0gX19wdXRfdXNlcigodW5zaWduZWQgaW50KWZsYWcsICZzYy0+ZWZsYWdzKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5yMTIsICZzYy0+ZXNwX2F0X3NpZ25hbCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoKHJlZ3MtPnIxNyA+PiAxNikgJiAweGZmZmYsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5zcyk7Ci0KLQlpZiAoIHNhdmVfaWEzMl9mcHN0YXRlX2xpdmUoZnBzdGF0ZSkgPCAwICkKLQkJZXJyID0gLUVGQVVMVDsKLQllbHNlCi0JCWVyciB8PSBfX3B1dF91c2VyKCh1MzIpKHU2NClmcHN0YXRlLCAmc2MtPmZwc3RhdGUpOwotCi0jaWYgMAotCXRtcCA9IHNhdmVfaTM4NyhmcHN0YXRlKTsKLQlpZiAodG1wIDwgMCkKLQkJZXJyID0gMTsKLQllbHNlCi0JCWVyciB8PSBfX3B1dF91c2VyKHRtcCA/IGZwc3RhdGUgOiBOVUxMLCAmc2MtPmZwc3RhdGUpOwotCi0JLyogbm9uLWlCQ1MyIGV4dGVuc2lvbnMuLiAqLwotI2VuZGlmCi0JZXJyIHw9IF9fcHV0X3VzZXIobWFzaywgJnNjLT5vbGRtYXNrKTsKLSNpZiAwCi0JZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+dHNzLmNyMiwgJnNjLT5jcjIpOwotI2VuZGlmCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludAotcmVzdG9yZV9zaWdjb250ZXh0X2lhMzIgKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3Qgc2lnY29udGV4dF9pYTMyIF9fdXNlciAqc2MsIGludCAqcGVheCkKLXsKLQl1bnNpZ25lZCBpbnQgZXJyID0gMDsKLQotCS8qIEFsd2F5cyBtYWtlIGFueSBwZW5kaW5nIHJlc3RhcnRlZCBzeXN0ZW0gY2FsbHMgcmV0dXJuIC1FSU5UUiAqLwotCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jay5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbDsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBzYywgc2l6ZW9mKCpzYykpKQotCQlyZXR1cm4oLUVGQVVMVCk7Ci0KLSNkZWZpbmUgQ09QWShpYTY0eCwgaWEzMngpCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPmlhNjR4LCAmc2MtPmlhMzJ4KQotCi0jZGVmaW5lIGNvcHlzZWdfZ3ModG1wKQkJKHJlZ3MtPnIxNiB8PSAodW5zaWduZWQgbG9uZykgKHRtcCkgPDwgNDgpCi0jZGVmaW5lIGNvcHlzZWdfZnModG1wKQkJKHJlZ3MtPnIxNiB8PSAodW5zaWduZWQgbG9uZykgKHRtcCkgPDwgMzIpCi0jZGVmaW5lIGNvcHlzZWdfY3ModG1wKQkJKHJlZ3MtPnIxNyB8PSB0bXApCi0jZGVmaW5lIGNvcHlzZWdfc3ModG1wKQkJKHJlZ3MtPnIxNyB8PSAodW5zaWduZWQgbG9uZykgKHRtcCkgPDwgMTYpCi0jZGVmaW5lIGNvcHlzZWdfZXModG1wKQkJKHJlZ3MtPnIxNiB8PSAodW5zaWduZWQgbG9uZykgKHRtcCkgPDwgMTYpCi0jZGVmaW5lIGNvcHlzZWdfZHModG1wKQkJKHJlZ3MtPnIxNiB8PSB0bXApCi0KLSNkZWZpbmUgQ09QWV9TRUcoc2VnKQkJCQkJXAotCXsJCQkJCQlcCi0JCXVuc2lnbmVkIHNob3J0IHRtcDsJCQlcCi0JCWVyciB8PSBfX2dldF91c2VyKHRtcCwgJnNjLT5zZWcpOwlcCi0JCWNvcHlzZWdfIyNzZWcodG1wKTsJCQlcCi0JfQotI2RlZmluZSBDT1BZX1NFR19TVFJJQ1Qoc2VnKQkJCQlcCi0JewkJCQkJCVwKLQkJdW5zaWduZWQgc2hvcnQgdG1wOwkJCVwKLQkJZXJyIHw9IF9fZ2V0X3VzZXIodG1wLCAmc2MtPnNlZyk7CVwKLQkJY29weXNlZ18jI3NlZyh0bXB8Myk7CQkJXAotCX0KLQotCS8qIFRvIG1ha2UgQ09QWV9TRUdzIGVhc2llciwgd2UgemVybyByMTYsIHIxNyAqLwotCXJlZ3MtPnIxNiA9IDA7Ci0JcmVncy0+cjE3ID0gMDsKLQotCUNPUFlfU0VHKGdzKTsKLQlDT1BZX1NFRyhmcyk7Ci0JQ09QWV9TRUcoZXMpOwotCUNPUFlfU0VHKGRzKTsKLQlDT1BZKHIxNSwgZWRpKTsKLQlDT1BZKHIxNCwgZXNpKTsKLQlDT1BZKHIxMywgZWJwKTsKLQlDT1BZKHIxMiwgZXNwKTsKLQlDT1BZKHIxMSwgZWJ4KTsKLQlDT1BZKHIxMCwgZWR4KTsKLQlDT1BZKHI5LCBlY3gpOwotCUNPUFkoY3JfaWlwLCBlaXApOwotCUNPUFlfU0VHX1NUUklDVChjcyk7Ci0JQ09QWV9TRUdfU1RSSUNUKHNzKTsKLQlpYTMyX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9ycyhjdXJyZW50KTsKLQl7Ci0JCXVuc2lnbmVkIGludCB0bXBmbGFnczsKLQkJdW5zaWduZWQgbG9uZyBmbGFnOwotCi0JCS8qCi0JCSAqICBJQTMyIGBlZmxhZ3MnIGlzIG5vdCBwYXJ0IG9mIGBwdF9yZWdzJywgaXQncyBpbiBhbiBhciByZWdpc3RlciB3aGljaAotCQkgKiAgaXMgcGFydCBvZiB0aGUgdGhyZWFkIGNvbnRleHQuICBGb3J0dW5hdGVseSwgd2UgYXJlIGV4ZWN1dGluZyBpbiB0aGUKLQkJICogIElBMzIgcHJvY2VzcydzIGNvbnRleHQuCi0JCSAqLwotCQllcnIgfD0gX19nZXRfdXNlcih0bXBmbGFncywgJnNjLT5lZmxhZ3MpOwotCQlmbGFnID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0VGTEFHKTsKLQkJZmxhZyAmPSB+MHg0MERENTsKLQkJZmxhZyB8PSAodG1wZmxhZ3MgJiAweDQwREQ1KTsKLQkJaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0FSX0VGTEFHLCBmbGFnKTsKLQotCQlyZWdzLT5yMSA9IC0xOwkvKiBkaXNhYmxlIHN5c2NhbGwgY2hlY2tzLCByMSBpcyBvcmlnX2VheCAqLwotCX0KLQotCXsKLQkJc3RydWN0IF9mcHN0YXRlX2lhMzIgX191c2VyICpidWYgPSBOVUxMOwotCQl1MzIgICAgZnBzdGF0ZV9wdHI7Ci0JCWVyciB8PSBnZXRfdXNlcihmcHN0YXRlX3B0ciwgJihzYy0+ZnBzdGF0ZSkpOwotCQlidWYgPSBjb21wYXRfcHRyKGZwc3RhdGVfcHRyKTsKLQkJaWYgKGJ1ZikgewotCQkJZXJyIHw9IHJlc3RvcmVfaWEzMl9mcHN0YXRlX2xpdmUoYnVmKTsKLQkJfQotCX0KLQotI2lmIDAKLQl7Ci0JCXN0cnVjdCBfZnBzdGF0ZSAqIGJ1ZjsKLQkJZXJyIHw9IF9fZ2V0X3VzZXIoYnVmLCAmc2MtPmZwc3RhdGUpOwotCQlpZiAoYnVmKSB7Ci0JCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmLCBzaXplb2YoKmJ1ZikpKQotCQkJCWdvdG8gYmFkZnJhbWU7Ci0JCQllcnIgfD0gcmVzdG9yZV9pMzg3KGJ1Zik7Ci0JCX0KLQl9Ci0jZW5kaWYKLQotCWVyciB8PSBfX2dldF91c2VyKCpwZWF4LCAmc2MtPmVheCk7Ci0JcmV0dXJuIGVycjsKLQotI2lmIDAKLSAgYmFkZnJhbWU6Ci0JcmV0dXJuIDE7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIERldGVybWluZSB3aGljaCBzdGFjayB0byB1c2UuLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX191c2VyICoKLWdldF9zaWdmcmFtZSAoc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBzaXplX3QgZnJhbWVfc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGVzcDsKLQotCS8qIERlZmF1bHQgdG8gdXNpbmcgbm9ybWFsIHN0YWNrICh0cnVuY2F0ZSBvZmYgc2lnbi1leHRlbnNpb24gb2YgYml0IDMxOiAqLwotCWVzcCA9ICh1bnNpZ25lZCBpbnQpIHJlZ3MtPnIxMjsKLQotCS8qIFRoaXMgaXMgdGhlIFgvT3BlbiBzYW5jdGlvbmVkIHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICAqLwotCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTlNUQUNLKSB7Ci0JCWludCBvbnN0YWNrID0gc2FzX3NzX2ZsYWdzKGVzcCk7Ci0KLQkJaWYgKG9uc3RhY2sgPT0gMCkKLQkJCWVzcCA9IGN1cnJlbnQtPnNhc19zc19zcCArIGN1cnJlbnQtPnNhc19zc19zaXplOwotCQllbHNlIGlmIChvbnN0YWNrID09IFNTX09OU1RBQ0spIHsKLQkJCS8qCi0JCQkgKiBJZiB3ZSBhcmUgb24gdGhlIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgYW5kIHdvdWxkCi0JCQkgKiBvdmVyZmxvdyBpdCwgZG9uJ3QuIFJldHVybiBhbiBhbHdheXMtYm9ndXMgYWRkcmVzcwotCQkJICogaW5zdGVhZCBzbyB3ZSB3aWxsIGRpZSB3aXRoIFNJR1NFR1YuCi0JCQkgKi8KLQkJCWlmICghbGlrZWx5KG9uX3NpZ19zdGFjayhlc3AgLSBmcmFtZV9zaXplKSkpCi0JCQkJcmV0dXJuICh2b2lkIF9fdXNlciAqKSAtMUw7Ci0JCX0KLQl9Ci0JLyogTGVnYWN5IHN0YWNrIHN3aXRjaGluZyBub3Qgc3VwcG9ydGVkICovCi0KLQllc3AgLT0gZnJhbWVfc2l6ZTsKLQkvKiBBbGlnbiB0aGUgc3RhY2sgcG9pbnRlciBhY2NvcmRpbmcgdG8gdGhlIGkzODYgQUJJLAotCSAqIGkuZS4gc28gdGhhdCBvbiBmdW5jdGlvbiBlbnRyeSAoKHNwICsgNCkgJiAxNSkgPT0gMC4gKi8KLQllc3AgPSAoKGVzcCArIDQpICYgLTE2dWwpIC0gNDsKLQlyZXR1cm4gKHZvaWQgX191c2VyICopIGVzcDsKLX0KLQotc3RhdGljIGludAotc2V0dXBfZnJhbWVfaWEzMiAoaW50IHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnc2V0X3QgKnNldCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQotewotCXN0cnVjdCBleGVjX2RvbWFpbiAqZWQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmV4ZWNfZG9tYWluOwotCXN0cnVjdCBzaWdmcmFtZV9pYTMyIF9fdXNlciAqZnJhbWU7Ci0JaW50IGVyciA9IDA7Ci0KLQlmcmFtZSA9IGdldF9zaWdmcmFtZShrYSwgcmVncywgc2l6ZW9mKCpmcmFtZSkpOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQotCQlnb3RvIGdpdmVfc2lnc2VndjsKLQotCWVyciB8PSBfX3B1dF91c2VyKChlZCAmJiBlZC0+c2lnbmFsX2ludm1hcCAmJiBzaWcgPCAzMgotCQkJICAgPyAoaW50KShlZC0+c2lnbmFsX2ludm1hcFtzaWddKSA6IHNpZyksICZmcmFtZS0+c2lnKTsKLQotCWVyciB8PSBzZXR1cF9zaWdjb250ZXh0X2lhMzIoJmZyYW1lLT5zYywgJmZyYW1lLT5mcHN0YXRlLCByZWdzLCBzZXQtPnNpZ1swXSk7Ci0KLQlpZiAoX0NPTVBBVF9OU0lHX1dPUkRTID4gMSkKLQkJZXJyIHw9IF9fY29weV90b191c2VyKGZyYW1lLT5leHRyYW1hc2ssIChjaGFyICopICZzZXQtPnNpZyArIDQsCi0JCQkJICAgICAgc2l6ZW9mKGZyYW1lLT5leHRyYW1hc2spKTsKLQotCS8qIFNldCB1cCB0byByZXR1cm4gZnJvbSB1c2Vyc3BhY2UuICBJZiBwcm92aWRlZCwgdXNlIGEgc3R1YgotCSAgIGFscmVhZHkgaW4gdXNlcnNwYWNlLiAgKi8KLQlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVE9SRVIpIHsKLQkJdW5zaWduZWQgaW50IHJlc3RvcmVyID0gSUEzMl9TQV9SRVNUT1JFUihrYSk7Ci0JCWVyciB8PSBfX3B1dF91c2VyKHJlc3RvcmVyLCAmZnJhbWUtPnByZXRjb2RlKTsKLQl9IGVsc2UgewotCQkvKiBQb2ludGluZyB0byByZXN0b3JlciBpbiBpYTMyIGdhdGUgcGFnZSAqLwotCQllcnIgfD0gX19wdXRfdXNlcihJQTMyX0dBVEVfT0ZGU0VULCAmZnJhbWUtPnByZXRjb2RlKTsKLQl9Ci0KLQkvKiBUaGlzIGlzIHBvcGwgJWVheCA7IG1vdmwgJCwlZWF4IDsgaW50ICQweDgwCi0JICogYW5kIHRoZXJlIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMgb25seS4KLQkgKiBTZWUgYXJjaC9pMzg2L2tlcm5lbC9zaWduYWwuYwotCSAqLwotCi0JZXJyIHw9IF9fcHV0X3VzZXIoMHhiODU4LCAoc2hvcnQgX191c2VyICopKGZyYW1lLT5yZXRjb2RlKzApKTsKLQllcnIgfD0gX19wdXRfdXNlcihfX0lBMzJfTlJfc2lncmV0dXJuLCAoaW50IF9fdXNlciAqKShmcmFtZS0+cmV0Y29kZSsyKSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoMHg4MGNkLCAoc2hvcnQgX191c2VyICopKGZyYW1lLT5yZXRjb2RlKzYpKTsKLQotCWlmIChlcnIpCi0JCWdvdG8gZ2l2ZV9zaWdzZWd2OwotCi0JLyogU2V0IHVwIHJlZ2lzdGVycyBmb3Igc2lnbmFsIGhhbmRsZXIgKi8KLQlyZWdzLT5yMTIgPSAodW5zaWduZWQgbG9uZykgZnJhbWU7Ci0JcmVncy0+Y3JfaWlwID0gSUEzMl9TQV9IQU5ETEVSKGthKTsKLQotCXNldF9mcyhVU0VSX0RTKTsKLQotI2lmIDAKLQlyZWdzLT5lZmxhZ3MgJj0gflRGX01BU0s7Ci0jZW5kaWYKLQotI2lmIDAKLQlwcmludGsoIlNJRyBkZWxpdmVyICglczolZCk6IHNpZz0lZCBzcD0lcCBwYz0lbHggcmE9JXhcbiIsCi0gICAgICAgICAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHNpZywgKHZvaWQgKikgZnJhbWUsIHJlZ3MtPmNyX2lpcCwgZnJhbWUtPnByZXRjb2RlKTsKLSNlbmRpZgotCi0JcmV0dXJuIDE7Ci0KLSAgZ2l2ZV9zaWdzZWd2OgotCWZvcmNlX3NpZ3NlZ3Yoc2lnLCBjdXJyZW50KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotc2V0dXBfcnRfZnJhbWVfaWEzMiAoaW50IHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnaW5mb190ICppbmZvLAotCQkgICAgIHNpZ3NldF90ICpzZXQsIHN0cnVjdCBwdF9yZWdzICogcmVncykKLXsKLQlzdHJ1Y3QgZXhlY19kb21haW4gKmVkID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5leGVjX2RvbWFpbjsKLQljb21wYXRfdXB0cl90IHBpbmZvLCBwdWM7Ci0Jc3RydWN0IHJ0X3NpZ2ZyYW1lX2lhMzIgX191c2VyICpmcmFtZTsKLQlpbnQgZXJyID0gMDsKLQotCWZyYW1lID0gZ2V0X3NpZ2ZyYW1lKGthLCByZWdzLCBzaXplb2YoKmZyYW1lKSk7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCi0JCWdvdG8gZ2l2ZV9zaWdzZWd2OwotCi0JZXJyIHw9IF9fcHV0X3VzZXIoKGVkICYmIGVkLT5zaWduYWxfaW52bWFwCi0JCQkgICAmJiBzaWcgPCAzMiA/IGVkLT5zaWduYWxfaW52bWFwW3NpZ10gOiBzaWcpLCAmZnJhbWUtPnNpZyk7Ci0KLQlwaW5mbyA9IChsb25nIF9fdXNlcikgJmZyYW1lLT5pbmZvOwotCXB1YyA9IChsb25nIF9fdXNlcikgJmZyYW1lLT51YzsKLQllcnIgfD0gX19wdXRfdXNlcihwaW5mbywgJmZyYW1lLT5waW5mbyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocHVjLCAmZnJhbWUtPnB1Yyk7Ci0JZXJyIHw9IGNvcHlfc2lnaW5mb190b191c2VyMzIoJmZyYW1lLT5pbmZvLCBpbmZvKTsKLQotCS8qIENyZWF0ZSB0aGUgdWNvbnRleHQuICAqLwotCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfZmxhZ3MpOwotCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfbGluayk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NwLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NwKTsKLQllcnIgfD0gX19wdXRfdXNlcihzYXNfc3NfZmxhZ3MocmVncy0+cjEyKSwgJmZyYW1lLT51Yy51Y19zdGFjay5zc19mbGFncyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NpemUsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc2l6ZSk7Ci0JZXJyIHw9IHNldHVwX3NpZ2NvbnRleHRfaWEzMigmZnJhbWUtPnVjLnVjX21jb250ZXh0LCAmZnJhbWUtPmZwc3RhdGUsIHJlZ3MsIHNldC0+c2lnWzBdKTsKLQllcnIgfD0gX19jb3B5X3RvX3VzZXIoJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzZXQsIHNpemVvZigqc2V0KSk7Ci0JaWYgKGVycikKLQkJZ290byBnaXZlX3NpZ3NlZ3Y7Ci0KLQkvKiBTZXQgdXAgdG8gcmV0dXJuIGZyb20gdXNlcnNwYWNlLiAgSWYgcHJvdmlkZWQsIHVzZSBhIHN0dWIKLQkgICBhbHJlYWR5IGluIHVzZXJzcGFjZS4gICovCi0JaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1JFU1RPUkVSKSB7Ci0JCXVuc2lnbmVkIGludCByZXN0b3JlciA9IElBMzJfU0FfUkVTVE9SRVIoa2EpOwotCQllcnIgfD0gX19wdXRfdXNlcihyZXN0b3JlciwgJmZyYW1lLT5wcmV0Y29kZSk7Ci0JfSBlbHNlIHsKLQkJLyogUG9pbnRpbmcgdG8gcnRfcmVzdG9yZXIgaW4gaWEzMiBnYXRlIHBhZ2UgKi8KLQkJZXJyIHw9IF9fcHV0X3VzZXIoSUEzMl9HQVRFX09GRlNFVCArIDgsICZmcmFtZS0+cHJldGNvZGUpOwotCX0KLQotCS8qIFRoaXMgaXMgbW92bCAkLCVlYXggOyBpbnQgJDB4ODAKLQkgKiBhbmQgdGhlcmUgZm9yIGhpc3RvcmljYWwgcmVhc29ucyBvbmx5LgotCSAqIFNlZSBhcmNoL2kzODYva2VybmVsL3NpZ25hbC5jCi0JICovCi0KLQllcnIgfD0gX19wdXRfdXNlcigweGI4LCAoY2hhciBfX3VzZXIgKikoZnJhbWUtPnJldGNvZGUrMCkpOwotCWVyciB8PSBfX3B1dF91c2VyKF9fSUEzMl9OUl9ydF9zaWdyZXR1cm4sIChpbnQgX191c2VyICopKGZyYW1lLT5yZXRjb2RlKzEpKTsKLQllcnIgfD0gX19wdXRfdXNlcigweDgwY2QsIChzaG9ydCBfX3VzZXIgKikoZnJhbWUtPnJldGNvZGUrNSkpOwotCi0JaWYgKGVycikKLQkJZ290byBnaXZlX3NpZ3NlZ3Y7Ci0KLQkvKiBTZXQgdXAgcmVnaXN0ZXJzIGZvciBzaWduYWwgaGFuZGxlciAqLwotCXJlZ3MtPnIxMiA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKLQlyZWdzLT5jcl9paXAgPSBJQTMyX1NBX0hBTkRMRVIoa2EpOwotCi0Jc2V0X2ZzKFVTRVJfRFMpOwotCi0jaWYgMAotCXJlZ3MtPmVmbGFncyAmPSB+VEZfTUFTSzsKLSNlbmRpZgotCi0jaWYgMAotCXByaW50aygiU0lHIGRlbGl2ZXIgKCVzOiVkKTogc3A9JXAgcGM9JWx4IHJhPSV4XG4iLAotICAgICAgICAgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAodm9pZCAqKSBmcmFtZSwgcmVncy0+Y3JfaWlwLCBmcmFtZS0+cHJldGNvZGUpOwotI2VuZGlmCi0KLQlyZXR1cm4gMTsKLQotZ2l2ZV9zaWdzZWd2OgotCWZvcmNlX3NpZ3NlZ3Yoc2lnLCBjdXJyZW50KTsKLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1pYTMyX3NldHVwX2ZyYW1lMSAoaW50IHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnaW5mb190ICppbmZvLAotCQkgICBzaWdzZXRfdCAqc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLSAgICAgICAvKiBTZXQgdXAgdGhlIHN0YWNrIGZyYW1lICovCi0gICAgICAgaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1NJR0lORk8pCi0gICAgICAgICAgICAgICByZXR1cm4gc2V0dXBfcnRfZnJhbWVfaWEzMihzaWcsIGthLCBpbmZvLCBzZXQsIHJlZ3MpOwotICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgIHJldHVybiBzZXR1cF9mcmFtZV9pYTMyKHNpZywga2EsIHNldCwgcmVncyk7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfc2lncmV0dXJuIChpbnQgYXJnMCwgaW50IGFyZzEsIGludCBhcmcyLCBpbnQgYXJnMywgaW50IGFyZzQsIGludCBhcmc1LAotCQkgaW50IGFyZzYsIGludCBhcmc3LCBzdHJ1Y3QgcHRfcmVncyByZWdzKQotewotCXVuc2lnbmVkIGxvbmcgZXNwID0gKHVuc2lnbmVkIGludCkgcmVncy5yMTI7Ci0Jc3RydWN0IHNpZ2ZyYW1lX2lhMzIgX191c2VyICpmcmFtZSA9IChzdHJ1Y3Qgc2lnZnJhbWVfaWEzMiBfX3VzZXIgKikoZXNwIC0gOCk7Ci0Jc2lnc2V0X3Qgc2V0OwotCWludCBlYXg7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkKLQkJZ290byBiYWRmcmFtZTsKLQotCWlmIChfX2dldF91c2VyKHNldC5zaWdbMF0sICZmcmFtZS0+c2Mub2xkbWFzaykKLQkgICAgfHwgKF9DT01QQVRfTlNJR19XT1JEUyA+IDEgJiYgX19jb3B5X2Zyb21fdXNlcigoY2hhciAqKSAmc2V0LnNpZyArIDQsICZmcmFtZS0+ZXh0cmFtYXNrLAotCQkJCQkJCSBzaXplb2YoZnJhbWUtPmV4dHJhbWFzaykpKSkKLQkJZ290byBiYWRmcmFtZTsKLQotCXNpZ2RlbHNldG1hc2soJnNldCwgfl9CTE9DS0FCTEUpOwotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCWN1cnJlbnQtPmJsb2NrZWQgPSBzZXQ7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCi0JaWYgKHJlc3RvcmVfc2lnY29udGV4dF9pYTMyKCZyZWdzLCAmZnJhbWUtPnNjLCAmZWF4KSkKLQkJZ290byBiYWRmcmFtZTsKLQlyZXR1cm4gZWF4OwotCi0gIGJhZGZyYW1lOgotCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKLQlyZXR1cm4gMDsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9ydF9zaWdyZXR1cm4gKGludCBhcmcwLCBpbnQgYXJnMSwgaW50IGFyZzIsIGludCBhcmczLCBpbnQgYXJnNCwKLQkJICAgIGludCBhcmc1LCBpbnQgYXJnNiwgaW50IGFyZzcsIHN0cnVjdCBwdF9yZWdzIHJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBlc3AgPSAodW5zaWduZWQgaW50KSByZWdzLnIxMjsKLQlzdHJ1Y3QgcnRfc2lnZnJhbWVfaWEzMiBfX3VzZXIgKmZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZV9pYTMyIF9fdXNlciAqKShlc3AgLSA0KTsKLQlzaWdzZXRfdCBzZXQ7Ci0JaW50IGVheDsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQotCQlnb3RvIGJhZGZyYW1lOwotCWlmIChfX2NvcHlfZnJvbV91c2VyKCZzZXQsICZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2l6ZW9mKHNldCkpKQotCQlnb3RvIGJhZGZyYW1lOwotCi0Jc2lnZGVsc2V0bWFzaygmc2V0LCB+X0JMT0NLQUJMRSk7Ci0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JY3VycmVudC0+YmxvY2tlZCA9ICBzZXQ7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCi0JaWYgKHJlc3RvcmVfc2lnY29udGV4dF9pYTMyKCZyZWdzLCAmZnJhbWUtPnVjLnVjX21jb250ZXh0LCAmZWF4KSkKLQkJZ290byBiYWRmcmFtZTsKLQotCS8qIEl0IGlzIG1vcmUgZGlmZmljdWx0IHRvIGF2b2lkIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB0aGFuIHRvCi0JICAgY2FsbCBpdCBhbmQgaWdub3JlIGVycm9ycy4gICovCi0JZG9fc2lnYWx0c3RhY2soKHN0YWNrX3QgX191c2VyICopICZmcmFtZS0+dWMudWNfc3RhY2ssIE5VTEwsIGVzcCk7Ci0KLQlyZXR1cm4gZWF4OwotCi0gIGJhZGZyYW1lOgotCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2lhMzJfc3VwcG9ydC5jIGIvYXJjaC9pYTY0L2lhMzIvaWEzMl9zdXBwb3J0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2OTY1ZGQuLjAwMDAwMDAKLS0tIGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9zdXBwb3J0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTMgKzAsMCBAQAotLyoKLSAqIElBMzIgaGVscGVyIGZ1bmN0aW9ucwotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBBcnVuIFNoYXJtYSA8YXJ1bi5zaGFybWFAaW50ZWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDAwIEFzaXQgSy4gTWFsbGljayA8YXNpdC5rLm1hbGxpY2tAaW50ZWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgSGV3bGV0dC1QYWNrYXJkIENvCi0gKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+Ci0gKgotICogMDYvMTYvMDAJQS4gTWFsbGljawlhZGRlZCBjc2Qvc3NkL3Rzc2QgZm9yIGlhMzIgdGhyZWFkIGNvbnRleHQKLSAqIDAyLzE5LzAxCUQuIE1vc2Jlcmdlcglkcm9wcGVkIHRzc2Q7IGl0J3Mgbm90IG5lZWRlZAotICogMDkvMTQvMDEJRC4gTW9zYmVyZ2VyCWZpeGVkIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBnZHQvdHNzIHBhZ2UKLSAqIDA5LzI5LzAxCUQuIE1vc2JlcmdlcglhZGRlZCBpYTMyX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9ycygpCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlICJpYTMycHJpdi5oIgotCi1leHRlcm4gaW50IGRpZV9pZl9rZXJuZWwgKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKTsKLQotc3RydWN0IHBhZ2UgKmlhMzJfc2hhcmVkX3BhZ2VbTlJfQ1BVU107Ci11bnNpZ25lZCBsb25nICppYTMyX2Jvb3RfZ2R0OwotdW5zaWduZWQgbG9uZyAqY3B1X2dkdF90YWJsZVtOUl9DUFVTXTsKLXN0cnVjdCBwYWdlICppYTMyX2dhdGVfcGFnZTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWxvYWRfZGVzYyAodTE2IHNlbGVjdG9yKQotewotCXVuc2lnbmVkIGxvbmcgKnRhYmxlLCBsaW1pdCwgaW5kZXg7Ci0KLQlpZiAoIXNlbGVjdG9yKQotCQlyZXR1cm4gMDsKLQlpZiAoc2VsZWN0b3IgJiBJQTMyX1NFR1NFTF9USSkgewotCQl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopIElBMzJfTERUX09GRlNFVDsKLQkJbGltaXQgPSBJQTMyX0xEVF9FTlRSSUVTOwotCX0gZWxzZSB7Ci0JCXRhYmxlID0gY3B1X2dkdF90YWJsZVtzbXBfcHJvY2Vzc29yX2lkKCldOwotCQlsaW1pdCA9IElBMzJfUEFHRV9TSVpFIC8gc2l6ZW9mKGlhMzJfYm9vdF9nZHRbMF0pOwotCX0KLQlpbmRleCA9IHNlbGVjdG9yID4+IElBMzJfU0VHU0VMX0lOREVYX1NISUZUOwotCWlmIChpbmRleCA+PSBsaW1pdCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIElBMzJfU0VHX1VOU0NSQU1CTEUodGFibGVbaW5kZXhdKTsKLX0KLQotdm9pZAotaWEzMl9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcnMgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyh0YXNrKTsKLQotCS8qIFNldHVwIHRoZSBzZWdtZW50IGRlc2NyaXB0b3JzICovCi0JcmVncy0+cjI0ID0gbG9hZF9kZXNjKHJlZ3MtPnIxNiA+PiAxNik7CQkvKiBFU0QgKi8KLQlyZWdzLT5yMjcgPSBsb2FkX2Rlc2MocmVncy0+cjE2ID4+ICAwKTsJCS8qIERTRCAqLwotCXJlZ3MtPnIyOCA9IGxvYWRfZGVzYyhyZWdzLT5yMTYgPj4gMzIpOwkJLyogRlNEICovCi0JcmVncy0+cjI5ID0gbG9hZF9kZXNjKHJlZ3MtPnIxNiA+PiA0OCk7CQkvKiBHU0QgKi8KLQlyZWdzLT5hcl9jc2QgPSBsb2FkX2Rlc2MocmVncy0+cjE3ID4+ICAwKTsJLyogQ1NEICovCi0JcmVncy0+YXJfc3NkID0gbG9hZF9kZXNjKHJlZ3MtPnIxNyA+PiAxNik7CS8qIFNTRCAqLwotfQotCi1pbnQKLWlhMzJfY2xvbmVfdGxzIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBzdHJ1Y3QgcHRfcmVncyAqY2hpbGRyZWdzKQotewotCXN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYzsKLQlzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MgaW5mbzsKLQlpbnQgaWR4OwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZpbmZvLCAodm9pZCBfX3VzZXIgKikoY2hpbGRyZWdzLT5yMTQgJiAweGZmZmZmZmZmKSwgc2l6ZW9mKGluZm8pKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKExEVF9lbXB0eSgmaW5mbykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWR4ID0gaW5mby5lbnRyeV9udW1iZXI7Ci0JaWYgKGlkeCA8IEdEVF9FTlRSWV9UTFNfTUlOIHx8IGlkeCA+IEdEVF9FTlRSWV9UTFNfTUFYKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRlc2MgPSBjaGlsZC0+dGhyZWFkLnRsc19hcnJheSArIGlkeCAtIEdEVF9FTlRSWV9UTFNfTUlOOwotCWRlc2MtPmEgPSBMRFRfZW50cnlfYSgmaW5mbyk7Ci0JZGVzYy0+YiA9IExEVF9lbnRyeV9iKCZpbmZvKTsKLQotCS8qIFhYWDogY2FuIHRoaXMgYmUgZG9uZSBpbiBhIGNsZWFuZXIgd2F5ID8gKi8KLQlsb2FkX1RMUygmY2hpbGQtPnRocmVhZCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlpYTMyX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9ycyhjaGlsZCk7Ci0JbG9hZF9UTFMoJmN1cnJlbnQtPnRocmVhZCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkCi1pYTMyX3NhdmVfc3RhdGUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKLXsKLQl0LT50aHJlYWQuZWZsYWcgPSBpYTY0X2dldHJlZyhfSUE2NF9SRUdfQVJfRUZMQUcpOwotCXQtPnRocmVhZC5mc3IgICA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9GU1IpOwotCXQtPnRocmVhZC5mY3IgICA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9GQ1IpOwotCXQtPnRocmVhZC5maXIgICA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9GSVIpOwotCXQtPnRocmVhZC5mZHIgICA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9GRFIpOwotCWlhNjRfc2V0X2tyKElBNjRfS1JfSU9fQkFTRSwgdC0+dGhyZWFkLm9sZF9pb2IpOwotCWlhNjRfc2V0X2tyKElBNjRfS1JfVFNTRCwgdC0+dGhyZWFkLm9sZF9rMSk7Ci19Ci0KLXZvaWQKLWlhMzJfbG9hZF9zdGF0ZSAoc3RydWN0IHRhc2tfc3RydWN0ICp0KQotewotCXVuc2lnbmVkIGxvbmcgZWZsYWcsIGZzciwgZmNyLCBmaXIsIGZkciwgdHNzZDsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyh0KTsKLQotCWVmbGFnID0gdC0+dGhyZWFkLmVmbGFnOwotCWZzciA9IHQtPnRocmVhZC5mc3I7Ci0JZmNyID0gdC0+dGhyZWFkLmZjcjsKLQlmaXIgPSB0LT50aHJlYWQuZmlyOwotCWZkciA9IHQtPnRocmVhZC5mZHI7Ci0JdHNzZCA9IGxvYWRfZGVzYyhfVFNTKTsJCQkJCS8qIFRTU0QgKi8KLQotCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19BUl9FRkxBRywgZWZsYWcpOwotCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19BUl9GU1IsIGZzcik7Ci0JaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0FSX0ZDUiwgZmNyKTsKLQlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfRklSLCBmaXIpOwotCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19BUl9GRFIsIGZkcik7Ci0JY3VycmVudC0+dGhyZWFkLm9sZF9pb2IgPSBpYTY0X2dldF9rcihJQTY0X0tSX0lPX0JBU0UpOwotCWN1cnJlbnQtPnRocmVhZC5vbGRfazEgPSBpYTY0X2dldF9rcihJQTY0X0tSX1RTU0QpOwotCWlhNjRfc2V0X2tyKElBNjRfS1JfSU9fQkFTRSwgSUEzMl9JT0JBU0UpOwotCWlhNjRfc2V0X2tyKElBNjRfS1JfVFNTRCwgdHNzZCk7Ci0KLQlyZWdzLT5yMTcgPSAoX1RTUyA8PCA0OCkgfCAoX0xEVCA8PCAzMikgfCAoX191MzIpIHJlZ3MtPnIxNzsKLQlyZWdzLT5yMzAgPSBsb2FkX2Rlc2MoX0xEVCk7CQkJCS8qIExEVEQgKi8KLQlsb2FkX1RMUygmdC0+dGhyZWFkLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotfQotCi0vKgotICogU2V0dXAgSUEzMiBHRFQgYW5kIFRTUwotICovCi12b2lkCi1pYTMyX2dkdF9pbml0ICh2b2lkKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpYTMyX3NoYXJlZF9wYWdlW2NwdV0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwotCWlmICghaWEzMl9zaGFyZWRfcGFnZVtjcHVdKQotCQlwYW5pYygiZmFpbGVkIHRvIGFsbG9jYXRlIGlhMzJfc2hhcmVkX3BhZ2VbJWRdXG4iLCBjcHUpOwotCi0JY3B1X2dkdF90YWJsZVtjcHVdID0gcGFnZV9hZGRyZXNzKGlhMzJfc2hhcmVkX3BhZ2VbY3B1XSk7Ci0KLQkvKiBDb3B5IGZyb20gdGhlIGJvb3QgY3B1J3MgR0RUICovCi0JbWVtY3B5KGNwdV9nZHRfdGFibGVbY3B1XSwgaWEzMl9ib290X2dkdCwgUEFHRV9TSVpFKTsKLX0KLQotCi0vKgotICogU2V0dXAgSUEzMiBHRFQgYW5kIFRTUwotICovCi1zdGF0aWMgdm9pZAotaWEzMl9ib290X2dkdF9pbml0ICh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgbGR0X3NpemU7Ci0KLQlpYTMyX3NoYXJlZF9wYWdlWzBdID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAoIWlhMzJfc2hhcmVkX3BhZ2VbMF0pCi0JCXBhbmljKCJmYWlsZWQgdG8gYWxsb2NhdGUgaWEzMl9zaGFyZWRfcGFnZVswXVxuIik7Ci0KLQlpYTMyX2Jvb3RfZ2R0ID0gcGFnZV9hZGRyZXNzKGlhMzJfc2hhcmVkX3BhZ2VbMF0pOwotCWNwdV9nZHRfdGFibGVbMF0gPSBpYTMyX2Jvb3RfZ2R0OwotCi0JLyogQ1MgZGVzY3JpcHRvciBpbiBJQS0zMiAoc2NyYW1ibGVkKSBmb3JtYXQgKi8KLQlpYTMyX2Jvb3RfZ2R0W19fVVNFUl9DUyA+PiAzXQotCQk9IElBMzJfU0VHX0RFU0NSSVBUT1IoMCwgKElBMzJfR0FURV9FTkQtMSkgPj4gSUEzMl9QQUdFX1NISUZULAotCQkJCSAgICAgIDB4YiwgMSwgMywgMSwgMSwgMSwgMSk7Ci0KLQkvKiBEUyBkZXNjcmlwdG9yIGluIElBLTMyIChzY3JhbWJsZWQpIGZvcm1hdCAqLwotCWlhMzJfYm9vdF9nZHRbX19VU0VSX0RTID4+IDNdCi0JCT0gSUEzMl9TRUdfREVTQ1JJUFRPUigwLCAoSUEzMl9HQVRFX0VORC0xKSA+PiBJQTMyX1BBR0VfU0hJRlQsCi0JCQkJICAgICAgMHgzLCAxLCAzLCAxLCAxLCAxLCAxKTsKLQotCWxkdF9zaXplID0gUEFHRV9BTElHTihJQTMyX0xEVF9FTlRSSUVTKklBMzJfTERUX0VOVFJZX1NJWkUpOwotCWlhMzJfYm9vdF9nZHRbVFNTX0VOVFJZXSA9IElBMzJfU0VHX0RFU0NSSVBUT1IoSUEzMl9UU1NfT0ZGU0VULCAyMzUsCi0JCQkJCQkgICAgICAgMHhiLCAwLCAzLCAxLCAxLCAxLCAwKTsKLQlpYTMyX2Jvb3RfZ2R0W0xEVF9FTlRSWV0gPSBJQTMyX1NFR19ERVNDUklQVE9SKElBMzJfTERUX09GRlNFVCwgbGR0X3NpemUgLSAxLAotCQkJCQkJICAgICAgIDB4MiwgMCwgMywgMSwgMSwgMSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pYTMyX2dhdGVfcGFnZV9pbml0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyAqc3I7Ci0KLQlpYTMyX2dhdGVfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0Jc3IgPSBwYWdlX2FkZHJlc3MoaWEzMl9nYXRlX3BhZ2UpOwotCS8qIFRoaXMgaXMgcG9wbCAlZWF4IDsgbW92bCAkLCVlYXggOyBpbnQgJDB4ODAgKi8KLQkqc3IrKyA9IDB4Yjg1OCB8IChfX0lBMzJfTlJfc2lncmV0dXJuIDw8IDE2KSB8ICgweDgwY2RVTCA8PCA0OCk7Ci0KLQkvKiBUaGlzIGlzIG1vdmwgJCwlZWF4IDsgaW50ICQweDgwICovCi0JKnNyID0gMHhiOCB8IChfX0lBMzJfTlJfcnRfc2lncmV0dXJuIDw8IDgpIHwgKDB4ODBjZFVMIDw8IDQwKTsKLX0KLQotdm9pZAotaWEzMl9tZW1faW5pdCh2b2lkKQotewotCWlhMzJfYm9vdF9nZHRfaW5pdCgpOwotCWlhMzJfZ2F0ZV9wYWdlX2luaXQoKTsKLX0KLQotLyoKLSAqIEhhbmRsZSBiYWQgSUEzMiBpbnRlcnJ1cHQgdmlhIHN5c2NhbGwKLSAqLwotdm9pZAotaWEzMl9iYWRfaW50ZXJydXB0ICh1bnNpZ25lZCBsb25nIGludF9udW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXNpZ2luZm9fdCBzaWdpbmZvOwotCi0JaWYgKGRpZV9pZl9rZXJuZWwoIkJhZCBJQS0zMiBpbnRlcnJ1cHQiLCByZWdzLCBpbnRfbnVtKSkKLQkJcmV0dXJuOwotCi0Jc2lnaW5mby5zaV9zaWdubyA9IFNJR1RSQVA7Ci0Jc2lnaW5mby5zaV9lcnJubyA9IGludF9udW07CS8qIFhYWCBpcyBpdCBPSyB0byBhYnVzZSBzaV9lcnJubyBsaWtlIHRoaXM/ICovCi0Jc2lnaW5mby5zaV9mbGFncyA9IDA7Ci0Jc2lnaW5mby5zaV9pc3IgPSAwOwotCXNpZ2luZm8uc2lfYWRkciA9IE5VTEw7Ci0Jc2lnaW5mby5zaV9pbW0gPSAwOwotCXNpZ2luZm8uc2lfY29kZSA9IFRSQVBfQlJLUFQ7Ci0JZm9yY2Vfc2lnX2luZm8oU0lHVFJBUCwgJnNpZ2luZm8sIGN1cnJlbnQpOwotfQotCi12b2lkCi1pYTMyX2NwdV9pbml0ICh2b2lkKQotewotCS8qIGluaXRpYWxpemUgZ2xvYmFsIGlhMzIgc3RhdGUgLSBDUjAgYW5kIENSNCAqLwotCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19BUl9DRkxBRywgKCgodWxvbmcpIElBMzJfQ1I0IDw8IDMyKSB8IElBMzJfQ1IwKSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1pYTMyX2luaXQgKHZvaWQpCi17Ci0jaWYgUEFHRV9TSElGVCA+IElBMzJfUEFHRV9TSElGVAotCXsKLQkJZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICppYTY0X3BhcnRpYWxfcGFnZV9jYWNoZXA7Ci0KLQkJaWE2NF9wYXJ0aWFsX3BhZ2VfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImlhNjRfcGFydGlhbF9wYWdlX2NhY2hlIiwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSksCi0JCQkJCTAsIFNMQUJfUEFOSUMsIE5VTEwpOwotCX0KLSNlbmRpZgotCXJldHVybiAwOwotfQotCi1fX2luaXRjYWxsKGlhMzJfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9pYTMyX3RyYXBzLmMgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX3RyYXBzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0ODYwNDIuLjAwMDAwMDAKLS0tIGEvYXJjaC9pYTY0L2lhMzIvaWEzMl90cmFwcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qCi0gKiBJQS0zMiBleGNlcHRpb24gaGFuZGxlcnMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgQXNpdCBLLiBNYWxsaWNrIDxhc2l0LmsubWFsbGlja0BpbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBIZXdsZXR0LVBhY2thcmQgQ28KLSAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KLSAqCi0gKiAwNi8xNi8wMAlBLiBNYWxsaWNrCWFkZGVkIHNpZ2luZm8gZm9yIG1vc3QgY2FzZXMgKGNsb3NlIHRvIElBMzIpCi0gKiAwOS8yOS8wMAlELiBNb3NiZXJnZXIJYWRkZWQgaWEzMl9pbnRlcmNlcHQoKQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotCi0jaW5jbHVkZSAiaWEzMnByaXYuaCIKLQotI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotCi1pbnQKLWlhMzJfaW50ZXJjZXB0IChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBpc3IpCi17Ci0Jc3dpdGNoICgoaXNyID4+IDE2KSAmIDB4ZmYpIHsKLQkgICAgICBjYXNlIDA6CS8qIEluc3RydWN0aW9uIGludGVyY2VwdCBmYXVsdCAqLwotCSAgICAgIGNhc2UgNDoJLyogTG9ja2VkIERhdGEgcmVmZXJlbmNlIGZhdWx0ICovCi0JICAgICAgY2FzZSAxOgkvKiBHYXRlIGludGVyY2VwdCB0cmFwICovCi0JCXJldHVybiAtMTsKLQotCSAgICAgIGNhc2UgMjoJLyogU3lzdGVtIGZsYWcgdHJhcCAqLwotCQlpZiAoKChpc3IgPj4gMTQpICYgMHgzKSA+PSAyKSB7Ci0JCQkvKiBNT1YgU1MsIFBPUCBTUyBpbnN0cnVjdGlvbnMgKi8KLQkJCWlhNjRfcHNyKHJlZ3MpLT5pZCA9IDE7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlCi0JCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAtMTsKLX0KLQotaW50Ci1pYTMyX2V4Y2VwdGlvbiAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgaXNyKQotewotCXN0cnVjdCBzaWdpbmZvIHNpZ2luZm87Ci0KLQkvKiBpbml0aWFsaXplIHRoZXNlIGZpZWxkcyB0byBhdm9pZCBsZWFraW5nIGtlcm5lbCBiaXRzIHRvIHVzZXIgc3BhY2U6ICovCi0Jc2lnaW5mby5zaV9lcnJubyA9IDA7Ci0Jc2lnaW5mby5zaV9mbGFncyA9IDA7Ci0Jc2lnaW5mby5zaV9pc3IgPSAwOwotCXNpZ2luZm8uc2lfaW1tID0gMDsKLQlzd2l0Y2ggKChpc3IgPj4gMTYpICYgMHhmZikgewotCSAgICAgIGNhc2UgMToKLQkgICAgICBjYXNlIDI6Ci0JCXNpZ2luZm8uc2lfc2lnbm8gPSBTSUdUUkFQOwotCQlpZiAoaXNyID09IDApCi0JCQlzaWdpbmZvLnNpX2NvZGUgPSBUUkFQX1RSQUNFOwotCQllbHNlIGlmIChpc3IgJiAweDQpCi0JCQlzaWdpbmZvLnNpX2NvZGUgPSBUUkFQX0JSQU5DSDsKLQkJZWxzZQotCQkJc2lnaW5mby5zaV9jb2RlID0gVFJBUF9CUktQVDsKLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIDM6Ci0JCXNpZ2luZm8uc2lfc2lnbm8gPSBTSUdUUkFQOwotCQlzaWdpbmZvLnNpX2NvZGUgPSBUUkFQX0JSS1BUOwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgMDoJLyogRGl2aWRlIGZhdWx0ICovCi0JCXNpZ2luZm8uc2lfc2lnbm8gPSBTSUdGUEU7Ci0JCXNpZ2luZm8uc2lfY29kZSA9IEZQRV9JTlRESVY7Ci0JCWJyZWFrOwotCi0JICAgICAgY2FzZSA0OgkvKiBPdmVyZmxvdyAqLwotCSAgICAgIGNhc2UgNToJLyogQm91bmRzIGZhdWx0ICovCi0JCXNpZ2luZm8uc2lfc2lnbm8gPSBTSUdGUEU7Ci0JCXNpZ2luZm8uc2lfY29kZSA9IDA7Ci0JCWJyZWFrOwotCi0JICAgICAgY2FzZSA2OgkvKiBJbnZhbGlkIE9wLWNvZGUgKi8KLQkJc2lnaW5mby5zaV9zaWdubyA9IFNJR0lMTDsKLQkJc2lnaW5mby5zaV9jb2RlID0gSUxMX0lMTE9QTjsKLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIDc6CS8qIEZQIEROQSAqLwotCSAgICAgIGNhc2UgODoJLyogRG91YmxlIEZhdWx0ICovCi0JICAgICAgY2FzZSA5OgkvKiBJbnZhbGlkIFRTUyAqLwotCSAgICAgIGNhc2UgMTE6CS8qIFNlZ21lbnQgbm90IHByZXNlbnQgKi8KLQkgICAgICBjYXNlIDEyOgkvKiBTdGFjayBmYXVsdCAqLwotCSAgICAgIGNhc2UgMTM6CS8qIEdlbmVyYWwgUHJvdGVjdGlvbiBGYXVsdCAqLwotCQlzaWdpbmZvLnNpX3NpZ25vID0gU0lHU0VHVjsKLQkJc2lnaW5mby5zaV9jb2RlID0gMDsKLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIDE2OgkvKiBQZW5kaW5nIEZQIGVycm9yICovCi0JCXsKLQkJCXVuc2lnbmVkIGxvbmcgZnNyLCBmY3I7Ci0KLQkJCWZzciA9IGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9GU1IpOwotCQkJZmNyID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0FSX0ZDUik7Ci0KLQkJCXNpZ2luZm8uc2lfc2lnbm8gPSBTSUdGUEU7Ci0JCQkvKgotCQkJICogKH5jd2QgJiBzd2QpIHdpbGwgbWFzayBvdXQgZXhjZXB0aW9ucyB0aGF0IGFyZSBub3Qgc2V0IHRvIHVubWFza2VkCi0JCQkgKiBzdGF0dXMuICAweDNmIGlzIHRoZSBleGNlcHRpb24gYml0cyBpbiB0aGVzZSByZWdzLCAweDIwMCBpcyB0aGUKLQkJCSAqIEMxIHJlZyB5b3UgbmVlZCBpbiBjYXNlIG9mIGEgc3RhY2sgZmF1bHQsIDB4MDQwIGlzIHRoZSBzdGFjawotCQkJICogZmF1bHQgYml0LiAgV2Ugc2hvdWxkIG9ubHkgYmUgdGFraW5nIG9uZSBleGNlcHRpb24gYXQgYSB0aW1lLAotCQkJICogc28gaWYgdGhpcyBjb21iaW5hdGlvbiBkb2Vzbid0IHByb2R1Y2UgYW55IHNpbmdsZSBleGNlcHRpb24sCi0JCQkgKiB0aGVuIHdlIGhhdmUgYSBiYWQgcHJvZ3JhbSB0aGF0IGlzbid0IHN5bmNocm9uaXppbmcgaXRzIEZQVSB1c2FnZQotCQkJICogYW5kIGl0IHdpbGwgc3VmZmVyIHRoZSBjb25zZXF1ZW5jZXMgc2luY2Ugd2Ugd29uJ3QgYmUgYWJsZSB0bwotCQkJICogZnVsbHkgcmVwcm9kdWNlIHRoZSBjb250ZXh0IG9mIHRoZSBleGNlcHRpb24KLQkJCSAqLwotCQkJc2lnaW5mby5zaV9pc3IgPSBpc3I7Ci0JCQlzaWdpbmZvLnNpX2ZsYWdzID0gX19JU1JfVkFMSUQ7Ci0JCQlzd2l0Y2goKCh+ZmNyKSAmIChmc3IgJiAweDNmKSkgfCAoZnNyICYgMHgyNDApKSB7Ci0JCQkJY2FzZSAweDAwMDoKLQkJCQlkZWZhdWx0OgotCQkJCQlzaWdpbmZvLnNpX2NvZGUgPSAwOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDB4MDAxOiAvKiBJbnZhbGlkIE9wICovCi0JCQkJY2FzZSAweDA0MDogLyogU3RhY2sgRmF1bHQgKi8KLQkJCQljYXNlIDB4MjQwOiAvKiBTdGFjayBGYXVsdCB8IERpcmVjdGlvbiAqLwotCQkJCQlzaWdpbmZvLnNpX2NvZGUgPSBGUEVfRkxUSU5WOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDB4MDAyOiAvKiBEZW5vcm1hbGl6ZSAqLwotCQkJCWNhc2UgMHgwMTA6IC8qIFVuZGVyZmxvdyAqLwotCQkJCQlzaWdpbmZvLnNpX2NvZGUgPSBGUEVfRkxUVU5EOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDB4MDA0OiAvKiBaZXJvIERpdmlkZSAqLwotCQkJCQlzaWdpbmZvLnNpX2NvZGUgPSBGUEVfRkxURElWOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDB4MDA4OiAvKiBPdmVyZmxvdyAqLwotCQkJCQlzaWdpbmZvLnNpX2NvZGUgPSBGUEVfRkxUT1ZGOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDB4MDIwOiAvKiBQcmVjaXNpb24gKi8KLQkJCQkJc2lnaW5mby5zaV9jb2RlID0gRlBFX0ZMVFJFUzsKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCQl9Ci0KLQkgICAgICBjYXNlIDE3OgkvKiBBbGlnbm1lbnQgY2hlY2sgKi8KLQkJc2lnaW5mby5zaV9zaWdubyA9IFNJR1NFR1Y7Ci0JCXNpZ2luZm8uc2lfY29kZSA9IEJVU19BRFJBTE47Ci0JCWJyZWFrOwotCi0JICAgICAgY2FzZSAxOToJLyogU1NFIE51bWVyaWMgZXJyb3IgKi8KLQkJc2lnaW5mby5zaV9zaWdubyA9IFNJR0ZQRTsKLQkJc2lnaW5mby5zaV9jb2RlID0gMDsKLQkJYnJlYWs7Ci0KLQkgICAgICBkZWZhdWx0OgotCQlyZXR1cm4gLTE7Ci0JfQotCWZvcmNlX3NpZ19pbmZvKHNpZ2luZm8uc2lfc2lnbm8sICZzaWdpbmZvLCBjdXJyZW50KTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2lhMzJwcml2LmggYi9hcmNoL2lhNjQvaWEzMi9pYTMycHJpdi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjE1MzQ5Li4wMDAwMDAwCi0tLSBhL2FyY2gvaWE2NC9pYTMyL2lhMzJwcml2LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MzIgKzAsMCBAQAotI2lmbmRlZiBfQVNNX0lBNjRfSUEzMl9QUklWX0gKLSNkZWZpbmUgX0FTTV9JQTY0X0lBMzJfUFJJVl9ICi0KLQotI2luY2x1ZGUgPGFzbS9pYTMyLmg+Ci0KLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0KLSNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+Ci0KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0KLS8qCi0gKiAzMiBiaXQgc3RydWN0dXJlcyBmb3IgSUEzMiBzdXBwb3J0LgotICovCi0KLSNkZWZpbmUgSUEzMl9QQUdFX1NJWkUJCSgxVUwgPDwgSUEzMl9QQUdFX1NISUZUKQotI2RlZmluZSBJQTMyX1BBR0VfTUFTSwkJKH4oSUEzMl9QQUdFX1NJWkUgLSAxKSkKLSNkZWZpbmUgSUEzMl9QQUdFX0FMSUdOKGFkZHIpCSgoKGFkZHIpICsgSUEzMl9QQUdFX1NJWkUgLSAxKSAmIElBMzJfUEFHRV9NQVNLKQotI2RlZmluZSBJQTMyX0NMT0NLU19QRVJfU0VDCTEwMAkvKiBDYXN0IGluIHN0b25lIGZvciBJQTMyIExpbnV4ICovCi0KLS8qCi0gKiBwYXJ0aWFsbHkgbWFwcGVkIHBhZ2VzIHByb3ZpZGUgcHJlY2lzZSBhY2NvdW50aW5nIG9mIHdoaWNoIDRrIHN1YiBwYWdlcwotICogYXJlIG1hcHBlZCBhbmQgd2hpY2ggb25lcyBhcmUgbm90LCB0aGVyZWJ5IGltcHJvdmluZyBJQS0zMiBjb21wYXRpYmlsaXR5LgotICovCi1zdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UgewotCXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSAqbmV4dDsgLyogbGlua2VkIGxpc3QsIHNvcnRlZCBieSBhZGRyZXNzICovCi0Jc3RydWN0IHJiX25vZGUJCXBwX3JiOwotCS8qIDY0SyBpcyB0aGUgbGFyZ2VzdCAibm9ybWFsIiBwYWdlIHN1cHBvcnRlZCBieSBpYTY0IEFCSS4gU28gNEsqNjQKLQkgKiBzaG91bGQgc3VmZmljZS4qLwotCXVuc2lnbmVkIGxvbmcJCWJpdG1hcDsKLQl1bnNpZ25lZCBpbnQJCWJhc2U7Ci19OwotCi1zdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdCB7Ci0Jc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlICpwcF9oZWFkOyAvKiBsaXN0IGhlYWQsIHBvaW50cyB0byB0aGUgbG93ZXN0Ci0JCQkJCSAgICogYWRkcmVzc2VkIHBhcnRpYWwgcGFnZSAqLwotCXN0cnVjdCByYl9yb290CQlwcGxfcmI7Ci0Jc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlICpwcF9oaW50OyAvKiBwcF9oaW50LT5uZXh0IGlzIHRoZSBsYXN0Ci0JCQkJCSAgICogYWNjZXNzZWQgcGFydGlhbCBwYWdlICovCi0JYXRvbWljX3QJCXBwX2NvdW50OyAvKiByZWZlcmVuY2UgY291bnQgKi8KLX07Ci0KLSNpZiBQQUdFX1NISUZUID4gSUEzMl9QQUdFX1NISUZUCi1zdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdCogaWEzMl9pbml0X3BwX2xpc3QgKHZvaWQpOwotI2Vsc2UKLSMgZGVmaW5lIGlhMzJfaW5pdF9wcF9saXN0KCkJMAotI2VuZGlmCi0KLS8qIHNpZ2NvbnRleHQuaCAqLwotLyoKLSAqIEFzIGRvY3VtZW50ZWQgaW4gdGhlIGlCQ1MyIHN0YW5kYXJkLi4KLSAqCi0gKiBUaGUgZmlyc3QgcGFydCBvZiAic3RydWN0IF9mcHN0YXRlIiBpcyBqdXN0IHRoZQotICogbm9ybWFsIGkzODcgaGFyZHdhcmUgc2V0dXAsIHRoZSBleHRyYSAic3RhdHVzIgotICogd29yZCBpcyB1c2VkIHRvIHNhdmUgdGhlIGNvcHJvY2Vzc29yIHN0YXR1cyB3b3JkCi0gKiBiZWZvcmUgZW50ZXJpbmcgdGhlIGhhbmRsZXIuCi0gKi8KLXN0cnVjdCBfZnByZWdfaWEzMiB7Ci0gICAgICAgdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07Ci0gICAgICAgdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7Ci19OwotCi1zdHJ1Y3QgX2ZweHJlZ19pYTMyIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IGV4cG9uZW50OwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYWRkaW5nWzNdOwotfTsKLQotc3RydWN0IF94bW1yZWdfaWEzMiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBlbGVtZW50WzRdOwotfTsKLQotCi1zdHJ1Y3QgX2Zwc3RhdGVfaWEzMiB7Ci0gICAgICAgdW5zaWduZWQgaW50ICAgIGN3LAotCQkgICAgICAgc3csCi0JCSAgICAgICB0YWcsCi0JCSAgICAgICBpcG9mZiwKLQkJICAgICAgIGNzc2VsLAotCQkgICAgICAgZGF0YW9mZiwKLQkJICAgICAgIGRhdGFzZWw7Ci0gICAgICAgc3RydWN0IF9mcHJlZ19pYTMyICAgICAgX3N0WzhdOwotICAgICAgIHVuc2lnbmVkIHNob3J0ICBzdGF0dXM7Ci0gICAgICAgdW5zaWduZWQgc2hvcnQgIG1hZ2ljOyAgICAgICAgICAvKiAweGZmZmYgPSByZWd1bGFyIEZQVSBkYXRhIG9ubHkgKi8KLQotICAgICAgIC8qIEZYU1IgRlBVIGVudmlyb25tZW50ICovCi0gICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgX2Z4c3JfZW52WzZdOyAgIC8qIEZYU1IgRlBVIGVudiBpcyBpZ25vcmVkICovCi0gICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgbXhjc3I7Ci0gICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgcmVzZXJ2ZWQ7Ci0gICAgICAgc3RydWN0IF9mcHhyZWdfaWEzMiAgX2Z4c3Jfc3RbOF07ICAgIC8qIEZYU1IgRlBVIHJlZyBkYXRhIGlzIGlnbm9yZWQgKi8KLSAgICAgICBzdHJ1Y3QgX3htbXJlZ19pYTMyICBfeG1tWzhdOwotICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgIHBhZGRpbmdbNTZdOwotfTsKLQotc3RydWN0IHNpZ2NvbnRleHRfaWEzMiB7Ci0gICAgICAgdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOwotICAgICAgIHVuc2lnbmVkIHNob3J0IGZzLCBfX2ZzaDsKLSAgICAgICB1bnNpZ25lZCBzaG9ydCBlcywgX19lc2g7Ci0gICAgICAgdW5zaWduZWQgc2hvcnQgZHMsIF9fZHNoOwotICAgICAgIHVuc2lnbmVkIGludCBlZGk7Ci0gICAgICAgdW5zaWduZWQgaW50IGVzaTsKLSAgICAgICB1bnNpZ25lZCBpbnQgZWJwOwotICAgICAgIHVuc2lnbmVkIGludCBlc3A7Ci0gICAgICAgdW5zaWduZWQgaW50IGVieDsKLSAgICAgICB1bnNpZ25lZCBpbnQgZWR4OwotICAgICAgIHVuc2lnbmVkIGludCBlY3g7Ci0gICAgICAgdW5zaWduZWQgaW50IGVheDsKLSAgICAgICB1bnNpZ25lZCBpbnQgdHJhcG5vOwotICAgICAgIHVuc2lnbmVkIGludCBlcnI7Ci0gICAgICAgdW5zaWduZWQgaW50IGVpcDsKLSAgICAgICB1bnNpZ25lZCBzaG9ydCBjcywgX19jc2g7Ci0gICAgICAgdW5zaWduZWQgaW50IGVmbGFnczsKLSAgICAgICB1bnNpZ25lZCBpbnQgZXNwX2F0X3NpZ25hbDsKLSAgICAgICB1bnNpZ25lZCBzaG9ydCBzcywgX19zc2g7Ci0gICAgICAgdW5zaWduZWQgaW50IGZwc3RhdGU7CQkvKiByZWFsbHkgKHN0cnVjdCBfZnBzdGF0ZV9pYTMyICopICovCi0gICAgICAgdW5zaWduZWQgaW50IG9sZG1hc2s7Ci0gICAgICAgdW5zaWduZWQgaW50IGNyMjsKLX07Ci0KLS8qIHVzZXIuaCAqLwotLyoKLSAqIElBMzIgKFBlbnRpdW0gSUlJLzQpIEZYU1IsIFNTRSBzdXBwb3J0Ci0gKgotICogUHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR0RCIDUuMCsgUFRSQUNFX3tHRVR8U0VUfUZQWFJFR1MgcmVxdWVzdHMgZm9yCi0gKiBpbnRlcmFjdGluZyB3aXRoIHRoZSBGWFNSLWZvcm1hdCBmbG9hdGluZyBwb2ludCBlbnZpcm9ubWVudC4gIEZsb2F0aW5nCi0gKiBwb2ludCBkYXRhIGNhbiBiZSBhY2Nlc3NlZCBpbiB0aGUgcmVndWxhciBmb3JtYXQgaW4gdGhlIHVzdWFsIG1hbm5lciwKLSAqIGFuZCBib3RoIHRoZSBzdGFuZGFyZCBhbmQgU0lNRCBmbG9hdGluZyBwb2ludCBkYXRhIGNhbiBiZSBhY2Nlc3NlZCB2aWEKLSAqIHRoZSBuZXcgcHRyYWNlIHJlcXVlc3RzLiAgSW4gZWl0aGVyIGNhc2UsIGNoYW5nZXMgdG8gdGhlIEZQVSBlbnZpcm9ubWVudAotICogd2lsbCBiZSByZWZsZWN0ZWQgaW4gdGhlIHRhc2sncyBzdGF0ZSBhcyBleHBlY3RlZC4KLSAqLwotc3RydWN0IGlhMzJfdXNlcl9pMzg3X3N0cnVjdCB7Ci0JaW50CWN3ZDsKLQlpbnQJc3dkOwotCWludAl0d2Q7Ci0JaW50CWZpcDsKLQlpbnQJZmNzOwotCWludAlmb287Ci0JaW50CWZvczsKLQkvKiA4KjEwIGJ5dGVzIGZvciBlYWNoIEZQLXJlZyA9IDgwIGJ5dGVzICovCi0Jc3RydWN0IF9mcHJlZ19pYTMyIAlzdF9zcGFjZVs4XTsKLX07Ci0KLXN0cnVjdCBpYTMyX3VzZXJfZnhzcl9zdHJ1Y3QgewotCXVuc2lnbmVkIHNob3J0CWN3ZDsKLQl1bnNpZ25lZCBzaG9ydAlzd2Q7Ci0JdW5zaWduZWQgc2hvcnQJdHdkOwotCXVuc2lnbmVkIHNob3J0CWZvcDsKLQlpbnQJZmlwOwotCWludAlmY3M7Ci0JaW50CWZvbzsKLQlpbnQJZm9zOwotCWludAlteGNzcjsKLQlpbnQJcmVzZXJ2ZWQ7Ci0JaW50CXN0X3NwYWNlWzMyXTsJLyogOCoxNiBieXRlcyBmb3IgZWFjaCBGUC1yZWcgPSAxMjggYnl0ZXMgKi8KLQlpbnQJeG1tX3NwYWNlWzMyXTsJLyogOCoxNiBieXRlcyBmb3IgZWFjaCBYTU0tcmVnID0gMTI4IGJ5dGVzICovCi0JaW50CXBhZGRpbmdbNTZdOwotfTsKLQotLyogc2lnbmFsLmggKi8KLSNkZWZpbmUgSUEzMl9TRVRfU0FfSEFORExFUihrYSxoYW5kbGVyLHJlc3RvcmVyKQkJCQlcCi0JCQkJKChrYSktPnNhLnNhX2hhbmRsZXIgPSAoX19zaWdoYW5kbGVyX3QpCQlcCi0JCQkJCSgoKHVuc2lnbmVkIGxvbmcpKHJlc3RvcmVyKSA8PCAzMikJXAotCQkJCQkgfCAoKGhhbmRsZXIpICYgMHhmZmZmZmZmZikpKQotI2RlZmluZSBJQTMyX1NBX0hBTkRMRVIoa2EpCSgodW5zaWduZWQgbG9uZykgKGthKS0+c2Euc2FfaGFuZGxlciAmIDB4ZmZmZmZmZmYpCi0jZGVmaW5lIElBMzJfU0FfUkVTVE9SRVIoa2EpCSgodW5zaWduZWQgbG9uZykgKGthKS0+c2Euc2FfaGFuZGxlciA+PiAzMikKLQotI2RlZmluZSBfX0lBMzJfTlJfc2lncmV0dXJuIDExOQotI2RlZmluZSBfX0lBMzJfTlJfcnRfc2lncmV0dXJuIDE3MwotCi1zdHJ1Y3Qgc2lnYWN0aW9uMzIgewotICAgICAgIHVuc2lnbmVkIGludCBzYV9oYW5kbGVyOwkJLyogUmVhbGx5IGEgcG9pbnRlciwgYnV0IG5lZWQgdG8gZGVhbCB3aXRoIDMyIGJpdHMgKi8KLSAgICAgICB1bnNpZ25lZCBpbnQgc2FfZmxhZ3M7Ci0gICAgICAgdW5zaWduZWQgaW50IHNhX3Jlc3RvcmVyOwkvKiBBbm90aGVyIDMyIGJpdCBwb2ludGVyICovCi0gICAgICAgY29tcGF0X3NpZ3NldF90IHNhX21hc2s7CQkvKiBBIDMyIGJpdCBtYXNrICovCi19OwotCi1zdHJ1Y3Qgb2xkX3NpZ2FjdGlvbjMyIHsKLSAgICAgICB1bnNpZ25lZCBpbnQgIHNhX2hhbmRsZXI7CS8qIFJlYWxseSBhIHBvaW50ZXIsIGJ1dCBuZWVkIHRvIGRlYWwKLQkJCQkJICAgICB3aXRoIDMyIGJpdHMgKi8KLSAgICAgICBjb21wYXRfb2xkX3NpZ3NldF90IHNhX21hc2s7CQkvKiBBIDMyIGJpdCBtYXNrICovCi0gICAgICAgdW5zaWduZWQgaW50IHNhX2ZsYWdzOwotICAgICAgIHVuc2lnbmVkIGludCBzYV9yZXN0b3JlcjsJLyogQW5vdGhlciAzMiBiaXQgcG9pbnRlciAqLwotfTsKLQotdHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2tfaWEzMiB7Ci0JdW5zaWduZWQgaW50CXNzX3NwOwotCWludAkJc3NfZmxhZ3M7Ci0JdW5zaWduZWQgaW50CXNzX3NpemU7Ci19IHN0YWNrX2lhMzJfdDsKLQotc3RydWN0IHVjb250ZXh0X2lhMzIgewotCXVuc2lnbmVkIGludAkgIHVjX2ZsYWdzOwotCXVuc2lnbmVkIGludAkgIHVjX2xpbms7Ci0Jc3RhY2tfaWEzMl90CSAgdWNfc3RhY2s7Ci0Jc3RydWN0IHNpZ2NvbnRleHRfaWEzMiB1Y19tY29udGV4dDsKLQlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLwotfTsKLQotc3RydWN0IHN0YXQ2NCB7Ci0JdW5zaWduZWQgbG9uZyBsb25nCXN0X2RldjsKLQl1bnNpZ25lZCBjaGFyCV9fcGFkMFs0XTsKLQl1bnNpZ25lZCBpbnQJX19zdF9pbm87Ci0JdW5zaWduZWQgaW50CXN0X21vZGU7Ci0JdW5zaWduZWQgaW50CXN0X25saW5rOwotCXVuc2lnbmVkIGludAlzdF91aWQ7Ci0JdW5zaWduZWQgaW50CXN0X2dpZDsKLQl1bnNpZ25lZCBsb25nIGxvbmcJc3RfcmRldjsKLQl1bnNpZ25lZCBjaGFyCV9fcGFkM1s0XTsKLQl1bnNpZ25lZCBpbnQJc3Rfc2l6ZV9sbzsKLQl1bnNpZ25lZCBpbnQJc3Rfc2l6ZV9oaTsKLQl1bnNpZ25lZCBpbnQJc3RfYmxrc2l6ZTsKLQl1bnNpZ25lZCBpbnQJc3RfYmxvY2tzOwkvKiBOdW1iZXIgNTEyLWJ5dGUgYmxvY2tzIGFsbG9jYXRlZC4gKi8KLQl1bnNpZ25lZCBpbnQJX19wYWQ0OwkJLyogZnV0dXJlIHBvc3NpYmxlIHN0X2Jsb2NrcyBoaWdoIGJpdHMgKi8KLQl1bnNpZ25lZCBpbnQJc3RfYXRpbWU7Ci0JdW5zaWduZWQgaW50CXN0X2F0aW1lX25zZWM7Ci0JdW5zaWduZWQgaW50CXN0X210aW1lOwotCXVuc2lnbmVkIGludAlzdF9tdGltZV9uc2VjOwotCXVuc2lnbmVkIGludAlzdF9jdGltZTsKLQl1bnNpZ25lZCBpbnQJc3RfY3RpbWVfbnNlYzsKLQl1bnNpZ25lZCBpbnQJc3RfaW5vX2xvOwotCXVuc2lnbmVkIGludAlzdF9pbm9faGk7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBjb21wYXRfc2lnaW5mbyB7Ci0JaW50IHNpX3NpZ25vOwotCWludCBzaV9lcnJubzsKLQlpbnQgc2lfY29kZTsKLQotCXVuaW9uIHsKLQkJaW50IF9wYWRbKCgxMjgvc2l6ZW9mKGludCkpIC0gMyldOwotCi0JCS8qIGtpbGwoKSAqLwotCQlzdHJ1Y3QgewotCQkJdW5zaWduZWQgaW50IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLwotCQkJdW5zaWduZWQgaW50IF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwotCQl9IF9raWxsOwotCi0JCS8qIFBPU0lYLjFiIHRpbWVycyAqLwotCQlzdHJ1Y3QgewotCQkJY29tcGF0X3RpbWVyX3QgX3RpZDsJCS8qIHRpbWVyIGlkICovCi0JCQlpbnQgX292ZXJydW47CQkvKiBvdmVycnVuIGNvdW50ICovCi0JCQljaGFyIF9wYWRbc2l6ZW9mKHVuc2lnbmVkIGludCkgLSBzaXplb2YoaW50KV07Ci0JCQljb21wYXRfc2lndmFsX3QgX3NpZ3ZhbDsJLyogc2FtZSBhcyBiZWxvdyAqLwotCQkJaW50IF9zeXNfcHJpdmF0ZTsgICAgICAgLyogbm90IHRvIGJlIHBhc3NlZCB0byB1c2VyICovCi0JCX0gX3RpbWVyOwotCi0JCS8qIFBPU0lYLjFiIHNpZ25hbHMgKi8KLQkJc3RydWN0IHsKLQkJCXVuc2lnbmVkIGludCBfcGlkOwkvKiBzZW5kZXIncyBwaWQgKi8KLQkJCXVuc2lnbmVkIGludCBfdWlkOwkvKiBzZW5kZXIncyB1aWQgKi8KLQkJCWNvbXBhdF9zaWd2YWxfdCBfc2lndmFsOwotCQl9IF9ydDsKLQotCQkvKiBTSUdDSExEICovCi0JCXN0cnVjdCB7Ci0JCQl1bnNpZ25lZCBpbnQgX3BpZDsJLyogd2hpY2ggY2hpbGQgKi8KLQkJCXVuc2lnbmVkIGludCBfdWlkOwkvKiBzZW5kZXIncyB1aWQgKi8KLQkJCWludCBfc3RhdHVzOwkJLyogZXhpdCBjb2RlICovCi0JCQljb21wYXRfY2xvY2tfdCBfdXRpbWU7Ci0JCQljb21wYXRfY2xvY2tfdCBfc3RpbWU7Ci0JCX0gX3NpZ2NobGQ7Ci0KLQkJLyogU0lHSUxMLCBTSUdGUEUsIFNJR1NFR1YsIFNJR0JVUyAqLwotCQlzdHJ1Y3QgewotCQkJdW5zaWduZWQgaW50IF9hZGRyOwkvKiBmYXVsdGluZyBpbnNuL21lbW9yeSByZWYuICovCi0JCX0gX3NpZ2ZhdWx0OwotCi0JCS8qIFNJR1BPTEwgKi8KLQkJc3RydWN0IHsKLQkJCWludCBfYmFuZDsJLyogUE9MTF9JTiwgUE9MTF9PVVQsIFBPTExfTVNHICovCi0JCQlpbnQgX2ZkOwotCQl9IF9zaWdwb2xsOwotCX0gX3NpZmllbGRzOwotfSBjb21wYXRfc2lnaW5mb190OwotCi0vKgotICogSUEtMzIgRUxGIHNwZWNpZmljIGRlZmluaXRpb25zIGZvciBJQS02NC4KLSAqLwotCi0jZGVmaW5lIF9BU01fSUE2NF9FTEZfSAkJLyogRG9uJ3QgaW5jbHVkZSBlbGYuaCAqLwotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLQotLyoKLSAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCi0gKi8KLSNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCh4KS0+ZV9tYWNoaW5lID09IEVNXzM4NikKLQotLyoKLSAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgotICovCi0jZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzMyCi0jZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTFNCCi0jZGVmaW5lIEVMRl9BUkNICUVNXzM4NgotCi0jZGVmaW5lIElBMzJfU1RBQ0tfVE9QCQlJQTMyX1BBR0VfT0ZGU0VUCi0jZGVmaW5lIElBMzJfR0FURV9PRkZTRVQJSUEzMl9QQUdFX09GRlNFVAotI2RlZmluZSBJQTMyX0dBVEVfRU5ECQlJQTMyX1BBR0VfT0ZGU0VUICsgUEFHRV9TSVpFCi0KLS8qCi0gKiBUaGUgc3lzdGVtIHNlZ21lbnRzIChHRFQsIFRTUywgTERUKSBoYXZlIHRvIGJlIG1hcHBlZCBiZWxvdyA0R0Igc28gdGhlIElBLTMyIGVuZ2luZSBjYW4KLSAqIGFjY2VzcyB0aGVtLgotICovCi0jZGVmaW5lIElBMzJfR0RUX09GRlNFVAkJKElBMzJfUEFHRV9PRkZTRVQgKyBQQUdFX1NJWkUpCi0jZGVmaW5lIElBMzJfVFNTX09GRlNFVAkJKElBMzJfUEFHRV9PRkZTRVQgKyAyKlBBR0VfU0laRSkKLSNkZWZpbmUgSUEzMl9MRFRfT0ZGU0VUCQkoSUEzMl9QQUdFX09GRlNFVCArIDMqUEFHRV9TSVpFKQotCi0jZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCUlBMzJfUEFHRV9TSVpFCi0KLS8qCi0gKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLgotICogVHlwaWNhbCB1c2Ugb2YgdGhpcyBpcyB0byBpbnZva2UgIi4vbGQuc28gc29tZXByb2ciIHRvIHRlc3Qgb3V0IGEKLSAqIG5ldyB2ZXJzaW9uIG9mIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZgotICogdGhlIHdheSBvZiB0aGUgcHJvZ3JhbSB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcwotICogc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLgotICovCi0jZGVmaW5lIEVMRl9FVF9EWU5fQkFTRQkJKElBMzJfUEFHRV9PRkZTRVQvMyArIDB4MTAwMDAwMCkKLQotdm9pZCBpYTY0X2VsZjMyX2luaXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpCWlhNjRfZWxmMzJfaW5pdChfcikKLQotLyogVGhpcyBtYWNybyB5aWVsZHMgYSBiaXRtYXNrIHRoYXQgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0Ci0gICB3aGF0IGluc3RydWN0aW9uIHNldCB0aGlzIENQVSBzdXBwb3J0cy4gICovCi0jZGVmaW5lIEVMRl9IV0NBUAkwCi0KLS8qIFRoaXMgbWFjcm8geWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZAotICAgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBOb3QgdGVycmlibHkKLSAgIHJlbGV2YW50IHVudGlsIHdlIGhhdmUgcmVhbCBoYXJkd2FyZSB0byBwbGF5IHdpdGguLi4gKi8KLSNkZWZpbmUgRUxGX1BMQVRGT1JNCU5VTEwKLQotI2lmZGVmIF9fS0VSTkVMX18KLSMgZGVmaW5lIFNFVF9QRVJTT05BTElUWShFWCkJCQkJXAotCShjdXJyZW50LT5wZXJzb25hbGl0eSA9IFBFUl9MSU5VWCkKLSNlbmRpZgotCi0jZGVmaW5lIElBMzJfRUZMQUcJMHgyMDAKLQotLyoKLSAqIElBLTMyIEVMRiBzcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgSUEtNjQuCi0gKi8KLQotI2RlZmluZSBfX1VTRVJfQ1MgICAgICAweDIzCi0jZGVmaW5lIF9fVVNFUl9EUyAgICAgIDB4MkIKLQotLyoKLSAqIFRoZSBwZXItY3B1IEdEVCBoYXMgMzIgZW50cmllczogc2VlIDxhc20taTM4Ni9zZWdtZW50Lmg+Ci0gKi8KLSNkZWZpbmUgR0RUX0VOVFJJRVMgMzIKLQotI2RlZmluZSBHRFRfU0laRQkoR0RUX0VOVFJJRVMgKiA4KQotCi0jZGVmaW5lIFRTU19FTlRSWSAxNAotI2RlZmluZSBMRFRfRU5UUlkJKFRTU19FTlRSWSArIDEpCi0KLSNkZWZpbmUgSUEzMl9TRUdTRUxfUlBMCQkoMHgzIDw8IDApCi0jZGVmaW5lIElBMzJfU0VHU0VMX1RJCQkoMHgxIDw8IDIpCi0jZGVmaW5lIElBMzJfU0VHU0VMX0lOREVYX1NISUZUCTMKLQotI2RlZmluZSBfVFNTCQkJKCh1bnNpZ25lZCBsb25nKSBUU1NfRU5UUlkgPDwgSUEzMl9TRUdTRUxfSU5ERVhfU0hJRlQpCi0jZGVmaW5lIF9MRFQJCQkoKHVuc2lnbmVkIGxvbmcpIExEVF9FTlRSWSA8PCBJQTMyX1NFR1NFTF9JTkRFWF9TSElGVCkKLQotI2RlZmluZSBJQTMyX1NFR19CQVNFCQkxNgotI2RlZmluZSBJQTMyX1NFR19UWVBFCQk0MAotI2RlZmluZSBJQTMyX1NFR19TWVMJCTQ0Ci0jZGVmaW5lIElBMzJfU0VHX0RQTAkJNDUKLSNkZWZpbmUgSUEzMl9TRUdfUAkJNDcKLSNkZWZpbmUgSUEzMl9TRUdfSElHSF9MSU1JVAk0OAotI2RlZmluZSBJQTMyX1NFR19BVkwJCTUyCi0jZGVmaW5lIElBMzJfU0VHX0RCCQk1NAotI2RlZmluZSBJQTMyX1NFR19HCQk1NQotI2RlZmluZSBJQTMyX1NFR19ISUdIX0JBU0UJNTYKLQotI2RlZmluZSBJQTMyX1NFR19ERVNDUklQVE9SKGJhc2UsIGxpbWl0LCBzZWd0eXBlLCBub25zeXNzZWcsIGRwbCwgc2VncHJlc2VudCwgYXZsLCBzZWdkYiwgZ3JhbikJXAotCSAgICAgICAoKChsaW1pdCkgJiAweGZmZmYpCQkJCQkJCQlcCi0JCXwgKCgodW5zaWduZWQgbG9uZykgKGJhc2UpICYgMHhmZmZmZmYpIDw8IElBMzJfU0VHX0JBU0UpCQkJXAotCQl8ICgodW5zaWduZWQgbG9uZykgKHNlZ3R5cGUpIDw8IElBMzJfU0VHX1RZUEUpCQkJCQlcCi0JCXwgKCh1bnNpZ25lZCBsb25nKSAobm9uc3lzc2VnKSA8PCBJQTMyX1NFR19TWVMpCQkJCQlcCi0JCXwgKCh1bnNpZ25lZCBsb25nKSAoZHBsKSA8PCBJQTMyX1NFR19EUEwpCQkJCQlcCi0JCXwgKCh1bnNpZ25lZCBsb25nKSAoc2VncHJlc2VudCkgPDwgSUEzMl9TRUdfUCkJCQkJCVwKLQkJfCAoKCgodW5zaWduZWQgbG9uZykgKGxpbWl0KSA+PiAxNikgJiAweGYpIDw8IElBMzJfU0VHX0hJR0hfTElNSVQpCQlcCi0JCXwgKCh1bnNpZ25lZCBsb25nKSAoYXZsKSA8PCBJQTMyX1NFR19BVkwpCQkJCQlcCi0JCXwgKCh1bnNpZ25lZCBsb25nKSAoc2VnZGIpIDw8IElBMzJfU0VHX0RCKQkJCQkJXAotCQl8ICgodW5zaWduZWQgbG9uZykgKGdyYW4pIDw8IElBMzJfU0VHX0cpCQkJCQlcCi0JCXwgKCgoKHVuc2lnbmVkIGxvbmcpIChiYXNlKSA+PiAyNCkgJiAweGZmKSA8PCBJQTMyX1NFR19ISUdIX0JBU0UpKQotCi0jZGVmaW5lIFNFR19MSU0JCTMyCi0jZGVmaW5lIFNFR19UWVBFCTUyCi0jZGVmaW5lIFNFR19TWVMJCTU2Ci0jZGVmaW5lIFNFR19EUEwJCTU3Ci0jZGVmaW5lIFNFR19QCQk1OQotI2RlZmluZSBTRUdfQVZMCQk2MAotI2RlZmluZSBTRUdfREIJCTYyCi0jZGVmaW5lIFNFR19HCQk2MwotCi0vKiBVbnNjcmFtYmxlIGFuIElBLTMyIHNlZ21lbnQgZGVzY3JpcHRvciBpbnRvIHRoZSBJQS02NCBmb3JtYXQuICAqLwotI2RlZmluZSBJQTMyX1NFR19VTlNDUkFNQkxFKHNkKQkJCQkJCQkJCSBcCi0JKCAgICgoKHNkKSA+PiBJQTMyX1NFR19CQVNFKSAmIDB4ZmZmZmZmKSB8ICgoKChzZCkgPj4gSUEzMl9TRUdfSElHSF9CQVNFKSAmIDB4ZmYpIDw8IDI0KSBcCi0JIHwgKCgoKHNkKSAmIDB4ZmZmZikgfCAoKCgoc2QpID4+IElBMzJfU0VHX0hJR0hfTElNSVQpICYgMHhmKSA8PCAxNikpIDw8IFNFR19MSU0pCSBcCi0JIHwgKCgoKHNkKSA+PiBJQTMyX1NFR19UWVBFKSAmIDB4ZikgPDwgU0VHX1RZUEUpCQkJCQkgXAotCSB8ICgoKChzZCkgPj4gSUEzMl9TRUdfU1lTKSAmIDB4MSkgPDwgU0VHX1NZUykJCQkJCQkgXAotCSB8ICgoKChzZCkgPj4gSUEzMl9TRUdfRFBMKSAmIDB4MykgPDwgU0VHX0RQTCkJCQkJCQkgXAotCSB8ICgoKChzZCkgPj4gSUEzMl9TRUdfUCkgJiAweDEpIDw8IFNFR19QKQkJCQkJCSBcCi0JIHwgKCgoKHNkKSA+PiBJQTMyX1NFR19BVkwpICYgMHgxKSA8PCBTRUdfQVZMKQkJCQkJCSBcCi0JIHwgKCgoKHNkKSA+PiBJQTMyX1NFR19EQikgJiAweDEpIDw8IFNFR19EQikJCQkJCQkgXAotCSB8ICgoKChzZCkgPj4gSUEzMl9TRUdfRykgJiAweDEpIDw8IFNFR19HKSkKLQotI2RlZmluZSBJQTMyX0lPQkFTRQkweDIwMDAwMDAwMDAwMDAwMDBVTCAvKiBWaXJ0dWFsIGFkZHJlc3MgZm9yIEkvTyBzcGFjZSAqLwotCi0jZGVmaW5lIElBMzJfQ1IwCTB4ODAwMDAwMDEJLyogRW5hYmxlIFBHIGFuZCBQRSBiaXRzICovCi0jZGVmaW5lIElBMzJfQ1I0CTB4NjAwCQkvKiBNTVhFWCBhbmQgRlhTUiBvbiAqLwotCi0vKgotICogIElBMzIgZmxvYXRpbmcgcG9pbnQgY29udHJvbCByZWdpc3RlcnMgc3RhcnRpbmcgdmFsdWVzCi0gKi8KLQotI2RlZmluZSBJQTMyX0ZTUl9ERUZBVUxUCTB4NTU1NTAwMDAJCS8qIHNldCBhbGwgdGFnIGJpdHMgKi8KLSNkZWZpbmUgSUEzMl9GQ1JfREVGQVVMVAkweDE3ODAwMDAwMDM3ZlVMCS8qIGV4dGVuZGVkIHByZWNpc2lvbiwgYWxsIG1hc2tzICovCi0KLSNkZWZpbmUgSUEzMl9QVFJBQ0VfR0VUUkVHUwkxMgotI2RlZmluZSBJQTMyX1BUUkFDRV9TRVRSRUdTCTEzCi0jZGVmaW5lIElBMzJfUFRSQUNFX0dFVEZQUkVHUwkxNAotI2RlZmluZSBJQTMyX1BUUkFDRV9TRVRGUFJFR1MJMTUKLSNkZWZpbmUgSUEzMl9QVFJBQ0VfR0VURlBYUkVHUwkxOAotI2RlZmluZSBJQTMyX1BUUkFDRV9TRVRGUFhSRUdTCTE5Ci0KLSNkZWZpbmUgaWEzMl9zdGFydF90aHJlYWQocmVncyxuZXdfaXAsbmV3X3NwKSBkbyB7CQkJCVwKLQlzZXRfZnMoVVNFUl9EUyk7CQkJCQkJCVwKLQlpYTY0X3BzcihyZWdzKS0+Y3BsID0gMzsJLyogc2V0IHVzZXIgbW9kZSAqLwkJCVwKLQlpYTY0X3BzcihyZWdzKS0+cmkgPSAwOwkJLyogY2xlYXIgcmV0dXJuIHNsb3QgbnVtYmVyICovCQlcCi0JaWE2NF9wc3IocmVncyktPmlzID0gMTsJCS8qIElBLTMyIGluc3RydWN0aW9uIHNldCAqLwkJXAotCXJlZ3MtPmNyX2lpcCA9IG5ld19pcDsJCQkJCQkJXAotCXJlZ3MtPmFyX3JzYyA9IDB4YzsJCS8qIGVuZm9yY2VkIGxhenkgbW9kZSwgcHJpdi4gbGV2ZWwgMyAqLwlcCi0JcmVncy0+YXJfcm5hdCA9IDA7CQkJCQkJCVwKLQlyZWdzLT5sb2FkcnMgPSAwOwkJCQkJCQlcCi0JcmVncy0+cjEyID0gbmV3X3NwOwkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0vKgotICogTG9jYWwgRGVzY3JpcHRvciBUYWJsZSAoTERUKSByZWxhdGVkIGRlY2xhcmF0aW9ucy4KLSAqLwotCi0jZGVmaW5lIElBMzJfTERUX0VOVFJJRVMJODE5MgkJLyogTWF4aW11bSBudW1iZXIgb2YgTERUIGVudHJpZXMgc3VwcG9ydGVkLiAqLwotI2RlZmluZSBJQTMyX0xEVF9FTlRSWV9TSVpFCTgJCS8qIFRoZSBzaXplIG9mIGVhY2ggTERUIGVudHJ5LiAqLwotCi0jZGVmaW5lIExEVF9lbnRyeV9hKGluZm8pIFwKLQkoKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4MDAwMGZmZmYpIDw8IDE2KSB8ICgoaW5mbyktPmxpbWl0ICYgMHgwZmZmZikpCi0KLSNkZWZpbmUgTERUX2VudHJ5X2IoaW5mbykJCQkJXAotCSgoKGluZm8pLT5iYXNlX2FkZHIgJiAweGZmMDAwMDAwKSB8CQlcCi0JKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4MDBmZjAwMDApID4+IDE2KSB8CVwKLQkoKGluZm8pLT5saW1pdCAmIDB4ZjAwMDApIHwJCQlcCi0JKCgoaW5mbyktPnJlYWRfZXhlY19vbmx5IF4gMSkgPDwgOSkgfAkJXAotCSgoaW5mbyktPmNvbnRlbnRzIDw8IDEwKSB8CQkJXAotCSgoKGluZm8pLT5zZWdfbm90X3ByZXNlbnQgXiAxKSA8PCAxNSkgfAkJXAotCSgoaW5mbyktPnNlZ18zMmJpdCA8PCAyMikgfAkJCVwKLQkoKGluZm8pLT5saW1pdF9pbl9wYWdlcyA8PCAyMykgfAkJXAotCSgoaW5mbyktPnVzZWFibGUgPDwgMjApIHwJCQlcCi0JMHg3MTAwKQotCi0jZGVmaW5lIExEVF9lbXB0eShpbmZvKSAoCQkJXAotCShpbmZvKS0+YmFzZV9hZGRyCT09IDAJJiYJXAotCShpbmZvKS0+bGltaXQJCT09IDAJJiYJXAotCShpbmZvKS0+Y29udGVudHMJPT0gMAkmJglcCi0JKGluZm8pLT5yZWFkX2V4ZWNfb25seQk9PSAxCSYmCVwKLQkoaW5mbyktPnNlZ18zMmJpdAk9PSAwCSYmCVwKLQkoaW5mbyktPmxpbWl0X2luX3BhZ2VzCT09IDAJJiYJXAotCShpbmZvKS0+c2VnX25vdF9wcmVzZW50CT09IDEJJiYJXAotCShpbmZvKS0+dXNlYWJsZQkJPT0gMAkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbG9hZF9UTFMgKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LCB1bnNpZ25lZCBpbnQgY3B1KQotewotCWV4dGVybiB1bnNpZ25lZCBsb25nICpjcHVfZ2R0X3RhYmxlW05SX0NQVVNdOwotCi0JbWVtY3B5KGNwdV9nZHRfdGFibGVbY3B1XSArIEdEVF9FTlRSWV9UTFNfTUlOICsgMCwgJnQtPnRsc19hcnJheVswXSwgc2l6ZW9mKGxvbmcpKTsKLQltZW1jcHkoY3B1X2dkdF90YWJsZVtjcHVdICsgR0RUX0VOVFJZX1RMU19NSU4gKyAxLCAmdC0+dGxzX2FycmF5WzFdLCBzaXplb2YobG9uZykpOwotCW1lbWNweShjcHVfZ2R0X3RhYmxlW2NwdV0gKyBHRFRfRU5UUllfVExTX01JTiArIDIsICZ0LT50bHNfYXJyYXlbMl0sIHNpemVvZihsb25nKSk7Ci19Ci0KLXN0cnVjdCBpYTMyX3VzZXJfZGVzYyB7Ci0JdW5zaWduZWQgaW50IGVudHJ5X251bWJlcjsKLQl1bnNpZ25lZCBpbnQgYmFzZV9hZGRyOwotCXVuc2lnbmVkIGludCBsaW1pdDsKLQl1bnNpZ25lZCBpbnQgc2VnXzMyYml0OjE7Ci0JdW5zaWduZWQgaW50IGNvbnRlbnRzOjI7Ci0JdW5zaWduZWQgaW50IHJlYWRfZXhlY19vbmx5OjE7Ci0JdW5zaWduZWQgaW50IGxpbWl0X2luX3BhZ2VzOjE7Ci0JdW5zaWduZWQgaW50IHNlZ19ub3RfcHJlc2VudDoxOwotCXVuc2lnbmVkIGludCB1c2VhYmxlOjE7Ci19OwotCi1zdHJ1Y3QgbGludXhfYmlucHJtOwotCi1leHRlcm4gdm9pZCBpYTMyX2luaXRfYWRkcl9zcGFjZSAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIGludCBpYTMyX3NldHVwX2FyZ19wYWdlcyAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgaW50IGV4ZWNfc3RhY2spOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaWEzMl9kb19tbWFwIChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQsIGludCwgbG9mZl90KTsKLWV4dGVybiB2b2lkIGlhMzJfbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3JzIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwotCi0jZGVmaW5lIGlhMzJmMmlhNjRmKGRzdCxzcmMpCQkJXAotZG8gewkJCQkJCVwKLQlpYTY0X2xkZmUoNixzcmMpOwkJCVwKLQlpYTY0X3N0b3AoKTsJCQkJXAotCWlhNjRfc3RmX3NwaWxsKGRzdCwgNik7CQkJXAotfSB3aGlsZSgwKQotCi0jZGVmaW5lIGlhNjRmMmlhMzJmKGRzdCxzcmMpCQkJXAotZG8gewkJCQkJCVwKLQlpYTY0X2xkZl9maWxsKDYsIHNyYyk7CQkJXAotCWlhNjRfc3RvcCgpOwkJCQlcCi0JaWE2NF9zdGZlKGRzdCwgNik7CQkJXAotfSB3aGlsZSgwKQotCi1zdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdDMyIHsKLQlfX3UzMiBlYngsIGVjeCwgZWR4LCBlc2ksIGVkaSwgZWJwLCBlYXg7Ci0JdW5zaWduZWQgc2hvcnQgZHMsIF9fZHMsIGVzLCBfX2VzOwotCXVuc2lnbmVkIHNob3J0IGZzLCBfX2ZzLCBncywgX19nczsKLQlfX3UzMiBvcmlnX2VheCwgZWlwOwotCXVuc2lnbmVkIHNob3J0IGNzLCBfX2NzOwotCV9fdTMyIGVmbGFncywgZXNwOwotCXVuc2lnbmVkIHNob3J0IHNzLCBfX3NzOwotfTsKLQotLyogUHJvdG90eXBlcyBmb3IgdXNlIGluIGVsZmNvcmUzMi5oICovCi1leHRlcm4gaW50IHNhdmVfaWEzMl9mcHN0YXRlIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IGlhMzJfdXNlcl9pMzg3X3N0cnVjdCBfX3VzZXIgKik7Ci1leHRlcm4gaW50IHNhdmVfaWEzMl9mcHhzdGF0ZSAoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBpYTMyX3VzZXJfZnhzcl9zdHJ1Y3QgX191c2VyICopOwotCi0jZW5kaWYgLyogIUNPTkZJR19JQTMyX1NVUFBPUlQgKi8KLQotI2VuZGlmIC8qIF9BU01fSUE2NF9JQTMyX1BSSVZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYyBiL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NWI3NDZiLi4wMDAwMDAwCi0tLSBhL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzY1ICswLDAgQEAKLS8qCi0gKiBzeXNfaWEzMi5jOiBDb252ZXJzaW9uIGJldHdlZW4gMzJiaXQgYW5kIDY0Yml0IG5hdGl2ZSBzeXNjYWxscy4gRGVyaXZlZCBmcm9tIHN5c19zcGFyYzMyLmMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwCQlWQSBMaW51eCBDbwotICogQ29weXJpZ2h0IChDKSAyMDAwCQlEb24gRHVnZ2VyIDxuMGFub0B2YWxpbnV4LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMTk5OQkJQXJ1biBTaGFybWEgPGFydW4uc2hhcm1hQGludGVsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMTk5NywxOTk4CUpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTcJCURhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAzLCAyMDA1IEhld2xldHQtUGFja2FyZCBDbwotICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA0CQlHb3Jkb24gSmluIDxnb3Jkb24uamluQGludGVsLmNvbT4KLSAqCi0gKiBUaGVzZSByb3V0aW5lcyBtYWludGFpbiBhcmd1bWVudCBzaXplIGNvbnZlcnNpb24gYmV0d2VlbiAzMmJpdCBhbmQgNjRiaXQKLSAqIGVudmlyb25tZW50LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lcy5oPgotI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3NlbS5oPgotI2luY2x1ZGUgPGxpbnV4L21zZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2htLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgotI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgotI2luY2x1ZGUgPGxpbnV4L3F1b3RhLmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L2V2ZW50cG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVnc2V0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgotI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tbWFuLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLQotI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0KLSNpbmNsdWRlICJpYTMycHJpdi5oIgotCi0jaW5jbHVkZSA8bmV0L3NjbS5oPgotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0KLSNkZWZpbmUgREVCVUcJMAotCi0jaWYgREVCVUcKLSMgZGVmaW5lIERCRyhmbXQuLi4pCXByaW50ayhLRVJOX0RFQlVHIGZtdCkKLSNlbHNlCi0jIGRlZmluZSBEQkcoZm10Li4uKQotI2VuZGlmCi0KLSNkZWZpbmUgUk9VTkRfVVAoeCxhKQkoKF9fdHlwZW9mX18oeCkpKCgodW5zaWduZWQgbG9uZykoeCkgKyAoKGEpIC0gMSkpICYgfigoYSkgLSAxKSkpCi0KLSNkZWZpbmUgT0ZGU0VUNEsoYSkJCSgoYSkgJiAweGZmZikKLSNkZWZpbmUgUEFHRV9TVEFSVChhZGRyKQkoKGFkZHIpICYgUEFHRV9NQVNLKQotI2RlZmluZSBNSU5TSUdTVEtTWl9JQTMyCTIwNDgKLQotI2RlZmluZSBoaWdoMmxvd3VpZCh1aWQpICgodWlkKSA+IDY1NTM1ID8gNjU1MzQgOiAodWlkKSkKLSNkZWZpbmUgaGlnaDJsb3dnaWQoZ2lkKSAoKGdpZCkgPiA2NTUzNSA/IDY1NTM0IDogKGdpZCkpCi0KLS8qCi0gKiBBbnl0aGluZyB0aGF0IG1vZGlmaWVzIG9yIGluc3BlY3RzIGlhMzIgdXNlciB2aXJ0dWFsIG1lbW9yeSBtdXN0IGhvbGQgdGhpcyBzZW1hcGhvcmUKLSAqIHdoaWxlIGRvaW5nIHNvLgotICovCi0vKiBYWFggbWFrZSBwZXItbW06ICovCi1zdGF0aWMgREVGSU5FX01VVEVYKGlhMzJfbW1hcF9tdXRleCk7Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfZXhlY3ZlIChjaGFyIF9fdXNlciAqbmFtZSwgY29tcGF0X3VwdHJfdCBfX3VzZXIgKmFyZ3YsIGNvbXBhdF91cHRyX3QgX191c2VyICplbnZwLAotCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWxvbmcgZXJyb3I7Ci0JY2hhciAqZmlsZW5hbWU7Ci0JdW5zaWduZWQgbG9uZyBvbGRfbWFwX2Jhc2UsIG9sZF90YXNrX3NpemUsIHRzc2Q7Ci0KLQlmaWxlbmFtZSA9IGdldG5hbWUobmFtZSk7Ci0JZXJyb3IgPSBQVFJfRVJSKGZpbGVuYW1lKTsKLQlpZiAoSVNfRVJSKGZpbGVuYW1lKSkKLQkJcmV0dXJuIGVycm9yOwotCi0Jb2xkX21hcF9iYXNlICA9IGN1cnJlbnQtPnRocmVhZC5tYXBfYmFzZTsKLQlvbGRfdGFza19zaXplID0gY3VycmVudC0+dGhyZWFkLnRhc2tfc2l6ZTsKLQl0c3NkID0gaWE2NF9nZXRfa3IoSUE2NF9LUl9UU1NEKTsKLQotCS8qIHdlIG1heSBiZSBleGVjJ2luZyBhIDY0LWJpdCBwcm9jZXNzOiByZXNldCBtYXAgYmFzZSwgdGFzay1zaXplLCBhbmQgaW8tYmFzZTogKi8KLQljdXJyZW50LT50aHJlYWQubWFwX2Jhc2UgID0gREVGQVVMVF9NQVBfQkFTRTsKLQljdXJyZW50LT50aHJlYWQudGFza19zaXplID0gREVGQVVMVF9UQVNLX1NJWkU7Ci0JaWE2NF9zZXRfa3IoSUE2NF9LUl9JT19CQVNFLCBjdXJyZW50LT50aHJlYWQub2xkX2lvYik7Ci0JaWE2NF9zZXRfa3IoSUE2NF9LUl9UU1NELCBjdXJyZW50LT50aHJlYWQub2xkX2sxKTsKLQotCWVycm9yID0gY29tcGF0X2RvX2V4ZWN2ZShmaWxlbmFtZSwgYXJndiwgZW52cCwgcmVncyk7Ci0JcHV0bmFtZShmaWxlbmFtZSk7Ci0KLQlpZiAoZXJyb3IgPCAwKSB7Ci0JCS8qIG9vcHMsIGV4ZWN2ZSBmYWlsZWQsIHN3aXRjaCBiYWNrIHRvIG9sZCB2YWx1ZXMuLi4gKi8KLQkJaWE2NF9zZXRfa3IoSUE2NF9LUl9JT19CQVNFLCBJQTMyX0lPQkFTRSk7Ci0JCWlhNjRfc2V0X2tyKElBNjRfS1JfVFNTRCwgdHNzZCk7Ci0JCWN1cnJlbnQtPnRocmVhZC5tYXBfYmFzZSAgPSBvbGRfbWFwX2Jhc2U7Ci0JCWN1cnJlbnQtPnRocmVhZC50YXNrX3NpemUgPSBvbGRfdGFza19zaXplOwotCX0KLQotCXJldHVybiBlcnJvcjsKLX0KLQotCi0jaWYgUEFHRV9TSElGVCA+IElBMzJfUEFHRV9TSElGVAotCi0KLXN0YXRpYyBpbnQKLWdldF9wYWdlX3Byb3QgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JaW50IHByb3QgPSAwOwotCi0JaWYgKCF2bWEgfHwgdm1hLT52bV9zdGFydCA+IGFkZHIpCi0JCXJldHVybiAwOwotCi0JaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKQotCQlwcm90IHw9IFBST1RfUkVBRDsKLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKQotCQlwcm90IHw9IFBST1RfV1JJVEU7Ci0JaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKQotCQlwcm90IHw9IFBST1RfRVhFQzsKLQlyZXR1cm4gcHJvdDsKLX0KLQotLyoKLSAqIE1hcCBhIHN1YnBhZ2UgYnkgY3JlYXRpbmcgYW4gYW5vbnltb3VzIHBhZ2UgdGhhdCBjb250YWlucyB0aGUgdW5pb24gb2YgdGhlIG9sZCBwYWdlIGFuZAotICogdGhlIHN1YnBhZ2UuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nCi1tbWFwX3N1YnBhZ2UgKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgaW50IHByb3QsIGludCBmbGFncywKLQkgICAgICBsb2ZmX3Qgb2ZmKQotewotCXZvaWQgKnBhZ2UgPSBOVUxMOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0JdW5zaWduZWQgbG9uZyByZXQgPSAwOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gZmluZF92bWEoY3VycmVudC0+bW0sIHN0YXJ0KTsKLQlpbnQgb2xkX3Byb3QgPSBnZXRfcGFnZV9wcm90KHZtYSwgc3RhcnQpOwotCi0JREJHKCJtbWFwX3N1YnBhZ2UoZmlsZT0lcCxzdGFydD0weCVseCxlbmQ9MHglbHgscHJvdD0leCxmbGFncz0leCxvZmY9MHglbGx4KVxuIiwKLQkgICAgZmlsZSwgc3RhcnQsIGVuZCwgcHJvdCwgZmxhZ3MsIG9mZik7Ci0KLQotCS8qIE9wdGltaXplIHRoZSBjYXNlIHdoZXJlIHRoZSBvbGQgbW1hcCBhbmQgdGhlIG5ldyBtbWFwIGFyZSBib3RoIGFub255bW91cyAqLwotCWlmICgob2xkX3Byb3QgJiBQUk9UX1dSSVRFKSAmJiAoZmxhZ3MgJiBNQVBfQU5PTllNT1VTKSAmJiAhdm1hLT52bV9maWxlKSB7Ci0JCWlmIChjbGVhcl91c2VyKCh2b2lkIF9fdXNlciAqKSBzdGFydCwgZW5kIC0gc3RhcnQpKSB7Ci0JCQlyZXQgPSAtRUZBVUxUOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJZ290byBza2lwX21tYXA7Ci0JfQotCi0JcGFnZSA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAoIXBhZ2UpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKG9sZF9wcm90KQotCQljb3B5X2Zyb21fdXNlcihwYWdlLCAodm9pZCBfX3VzZXIgKikgUEFHRV9TVEFSVChzdGFydCksIFBBR0VfU0laRSk7Ci0KLQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCXsKLQkJcmV0ID0gZG9fbW1hcChOVUxMLCBQQUdFX1NUQVJUKHN0YXJ0KSwgUEFHRV9TSVpFLCBwcm90IHwgUFJPVF9XUklURSwKLQkJCSAgICAgIGZsYWdzIHwgTUFQX0ZJWEVEIHwgTUFQX0FOT05ZTU9VUywgMCk7Ci0JfQotCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCi0JaWYgKElTX0VSUigodm9pZCAqKSByZXQpKQotCQlnb3RvIG91dDsKLQotCWlmIChvbGRfcHJvdCkgewotCQkvKiBjb3B5IGJhY2sgdGhlIG9sZCBwYWdlIGNvbnRlbnRzLiAgKi8KLQkJaWYgKG9mZnNldF9pbl9wYWdlKHN0YXJ0KSkKLQkJCWNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgUEFHRV9TVEFSVChzdGFydCksIHBhZ2UsCi0JCQkJICAgICBvZmZzZXRfaW5fcGFnZShzdGFydCkpOwotCQlpZiAob2Zmc2V0X2luX3BhZ2UoZW5kKSkKLQkJCWNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgZW5kLCBwYWdlICsgb2Zmc2V0X2luX3BhZ2UoZW5kKSwKLQkJCQkgICAgIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGVuZCkpOwotCX0KLQotCWlmICghKGZsYWdzICYgTUFQX0FOT05ZTU9VUykpIHsKLQkJLyogcmVhZCB0aGUgZmlsZSBjb250ZW50cyAqLwotCQlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JCWlmICghaW5vZGUtPmlfZm9wIHx8ICFmaWxlLT5mX29wLT5yZWFkCi0JCSAgICB8fCAoKCpmaWxlLT5mX29wLT5yZWFkKShmaWxlLCAoY2hhciBfX3VzZXIgKikgc3RhcnQsIGVuZCAtIHN0YXJ0LCAmb2ZmKSA8IDApKQotCQl7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLSBza2lwX21tYXA6Ci0JaWYgKCEocHJvdCAmIFBST1RfV1JJVEUpKQotCQlyZXQgPSBzeXNfbXByb3RlY3QoUEFHRV9TVEFSVChzdGFydCksIFBBR0VfU0laRSwgcHJvdCB8IG9sZF9wcm90KTsKLSAgb3V0OgotCWlmIChwYWdlKQotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2UpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIFNMQUIgY2FjaGUgZm9yIGlhNjRfcGFydGlhbF9wYWdlIHN0cnVjdHVyZXMgKi8KLXN0cnVjdCBrbWVtX2NhY2hlICppYTY0X3BhcnRpYWxfcGFnZV9jYWNoZXA7Ci0KLS8qCi0gKiBpbml0IGlhNjRfcGFydGlhbF9wYWdlX2xpc3QuCi0gKiByZXR1cm4gMCBtZWFucyBrbWFsbG9jIGZhaWwuCi0gKi8KLXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZV9saXN0KgotaWEzMl9pbml0X3BwX2xpc3Qodm9pZCkKLXsKLQlzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdCAqcDsKLQotCWlmICgocCA9IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCi0JCXJldHVybiBwOwotCXAtPnBwX2hlYWQgPSBOVUxMOwotCXAtPnBwbF9yYiA9IFJCX1JPT1Q7Ci0JcC0+cHBfaGludCA9IE5VTEw7Ci0JYXRvbWljX3NldCgmcC0+cHBfY291bnQsIDEpOwotCXJldHVybiBwOwotfQotCi0vKgotICogU2VhcmNoIGZvciB0aGUgcGFydGlhbCBwYWdlIHdpdGggQHN0YXJ0IGluIHBhcnRpYWwgcGFnZSBsaXN0IEBwcGwuCi0gKiBJZiBmaW5kcyB0aGUgcGFydGlhbCBwYWdlLCByZXR1cm4gdGhlIGZvdW5kIHBhcnRpYWwgcGFnZS4KLSAqIEVsc2UsIHJldHVybiAwIGFuZCBwcm92aWRlIEBwcHJldiwgQHJiX2xpbmssIEByYl9wYXJlbnQgdG8KLSAqIGJlIHVzZWQgYnkgbGF0ZXIgX19pYTMyX2luc2VydF9wcCgpLgotICovCi1zdGF0aWMgc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlICoKLV9faWEzMl9maW5kX3BwKHN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZV9saXN0ICpwcGwsIHVuc2lnbmVkIGludCBzdGFydCwKLQlzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UgKipwcHJldiwgc3RydWN0IHJiX25vZGUgKioqcmJfbGluaywKLQlzdHJ1Y3QgcmJfbm9kZSAqKnJiX3BhcmVudCkKLXsKLQlzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UgKnBwOwotCXN0cnVjdCByYl9ub2RlICoqX19yYl9saW5rLCAqX19yYl9wYXJlbnQsICpyYl9wcmV2OwotCi0JcHAgPSBwcGwtPnBwX2hpbnQ7Ci0JaWYgKHBwICYmIHBwLT5iYXNlID09IHN0YXJ0KQotCQlyZXR1cm4gcHA7Ci0KLQlfX3JiX2xpbmsgPSAmcHBsLT5wcGxfcmIucmJfbm9kZTsKLQlyYl9wcmV2ID0gX19yYl9wYXJlbnQgPSBOVUxMOwotCi0Jd2hpbGUgKCpfX3JiX2xpbmspIHsKLQkJX19yYl9wYXJlbnQgPSAqX19yYl9saW5rOwotCQlwcCA9IHJiX2VudHJ5KF9fcmJfcGFyZW50LCBzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UsIHBwX3JiKTsKLQotCQlpZiAocHAtPmJhc2UgPT0gc3RhcnQpIHsKLQkJCXBwbC0+cHBfaGludCA9IHBwOwotCQkJcmV0dXJuIHBwOwotCQl9IGVsc2UgaWYgKHBwLT5iYXNlIDwgc3RhcnQpIHsKLQkJCXJiX3ByZXYgPSBfX3JiX3BhcmVudDsKLQkJCV9fcmJfbGluayA9ICZfX3JiX3BhcmVudC0+cmJfcmlnaHQ7Ci0JCX0gZWxzZSB7Ci0JCQlfX3JiX2xpbmsgPSAmX19yYl9wYXJlbnQtPnJiX2xlZnQ7Ci0JCX0KLQl9Ci0KLQkqcmJfbGluayA9IF9fcmJfbGluazsKLQkqcmJfcGFyZW50ID0gX19yYl9wYXJlbnQ7Ci0JKnBwcmV2ID0gTlVMTDsKLQlpZiAocmJfcHJldikKLQkJKnBwcmV2ID0gcmJfZW50cnkocmJfcHJldiwgc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlLCBwcF9yYik7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBpbnNlcnQgQHBwIGludG8gQHBwbC4KLSAqLwotc3RhdGljIHZvaWQKLV9faWEzMl9pbnNlcnRfcHAoc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlX2xpc3QgKnBwbCwKLQlzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UgKnBwLCBzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UgKnByZXYsCi0Jc3RydWN0IHJiX25vZGUgKipyYl9saW5rLCBzdHJ1Y3QgcmJfbm9kZSAqcmJfcGFyZW50KQotewotCS8qIGxpbmsgbGlzdCAqLwotCWlmIChwcmV2KSB7Ci0JCXBwLT5uZXh0ID0gcHJldi0+bmV4dDsKLQkJcHJldi0+bmV4dCA9IHBwOwotCX0gZWxzZSB7Ci0JCXBwbC0+cHBfaGVhZCA9IHBwOwotCQlpZiAocmJfcGFyZW50KQotCQkJcHAtPm5leHQgPSByYl9lbnRyeShyYl9wYXJlbnQsCi0JCQkJc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlLCBwcF9yYik7Ci0JCWVsc2UKLQkJCXBwLT5uZXh0ID0gTlVMTDsKLQl9Ci0KLQkvKiBsaW5rIHJiICovCi0JcmJfbGlua19ub2RlKCZwcC0+cHBfcmIsIHJiX3BhcmVudCwgcmJfbGluayk7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZwcC0+cHBfcmIsICZwcGwtPnBwbF9yYik7Ci0KLQlwcGwtPnBwX2hpbnQgPSBwcDsKLX0KLQotLyoKLSAqIGRlbGV0ZSBAcHAgZnJvbSBwYXJ0aWFsIHBhZ2UgbGlzdCBAcHBsLgotICovCi1zdGF0aWMgdm9pZAotX19pYTMyX2RlbGV0ZV9wcChzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdCAqcHBsLAotCXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSAqcHAsIHN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSAqcHJldikKLXsKLQlpZiAocHJldikgewotCQlwcmV2LT5uZXh0ID0gcHAtPm5leHQ7Ci0JCWlmIChwcGwtPnBwX2hpbnQgPT0gcHApCi0JCQlwcGwtPnBwX2hpbnQgPSBwcmV2OwotCX0gZWxzZSB7Ci0JCXBwbC0+cHBfaGVhZCA9IHBwLT5uZXh0OwotCQlpZiAocHBsLT5wcF9oaW50ID09IHBwKQotCQkJcHBsLT5wcF9oaW50ID0gcHAtPm5leHQ7Ci0JfQotCXJiX2VyYXNlKCZwcC0+cHBfcmIsICZwcGwtPnBwbF9yYik7Ci0Ja21lbV9jYWNoZV9mcmVlKGlhNjRfcGFydGlhbF9wYWdlX2NhY2hlcCwgcHApOwotfQotCi1zdGF0aWMgc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlICoKLV9fcHBfcHJldihzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UgKnBwKQotewotCXN0cnVjdCByYl9ub2RlICpwcmV2ID0gcmJfcHJldigmcHAtPnBwX3JiKTsKLQlpZiAocHJldikKLQkJcmV0dXJuIHJiX2VudHJ5KHByZXYsIHN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSwgcHBfcmIpOwotCWVsc2UKLQkJcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBEZWxldGUgcGFydGlhbCBwYWdlcyB3aXRoIGFkZHJlc3MgYmV0d2VlbiBAc3RhcnQgYW5kIEBlbmQuCi0gKiBAc3RhcnQgYW5kIEBlbmQgYXJlIHBhZ2UgYWxpZ25lZC4KLSAqLwotc3RhdGljIHZvaWQKLV9faWEzMl9kZWxldGVfcHBfcmFuZ2UodW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgZW5kKQotewotCXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSAqcHAsICpwcmV2OwotCXN0cnVjdCByYl9ub2RlICoqcmJfbGluaywgKnJiX3BhcmVudDsKLQotCWlmIChzdGFydCA+PSBlbmQpCi0JCXJldHVybjsKLQotCXBwID0gX19pYTMyX2ZpbmRfcHAoY3VycmVudC0+dGhyZWFkLnBwbCwgc3RhcnQsICZwcmV2LAotCQkJCQkmcmJfbGluaywgJnJiX3BhcmVudCk7Ci0JaWYgKHBwKQotCQlwcmV2ID0gX19wcF9wcmV2KHBwKTsKLQllbHNlIHsKLQkJaWYgKHByZXYpCi0JCQlwcCA9IHByZXYtPm5leHQ7Ci0JCWVsc2UKLQkJCXBwID0gY3VycmVudC0+dGhyZWFkLnBwbC0+cHBfaGVhZDsKLQl9Ci0KLQl3aGlsZSAocHAgJiYgcHAtPmJhc2UgPCBlbmQpIHsKLQkJc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlICp0bXAgPSBwcC0+bmV4dDsKLQkJX19pYTMyX2RlbGV0ZV9wcChjdXJyZW50LT50aHJlYWQucHBsLCBwcCwgcHJldik7Ci0JCXBwID0gdG1wOwotCX0KLX0KLQotLyoKLSAqIFNldCB0aGUgcmFuZ2UgYmV0d2VlbiBAc3RhcnQgYW5kIEBlbmQgaW4gYml0bWFwLgotICogQHN0YXJ0IGFuZCBAZW5kIHNob3VsZCBiZSBJQTMyIHBhZ2UgYWxpZ25lZCBhbmQgaW4gdGhlIHNhbWUgSUE2NCBwYWdlLgotICovCi1zdGF0aWMgaW50Ci1fX2lhMzJfc2V0X3BwKHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGVuZCwgaW50IGZsYWdzKQotewotCXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSAqcHAsICpwcmV2OwotCXN0cnVjdCByYl9ub2RlICoqIHJiX2xpbmssICpyYl9wYXJlbnQ7Ci0JdW5zaWduZWQgaW50IHBzdGFydCwgc3RhcnRfYml0LCBlbmRfYml0LCBpOwotCi0JcHN0YXJ0ID0gUEFHRV9TVEFSVChzdGFydCk7Ci0Jc3RhcnRfYml0ID0gKHN0YXJ0ICUgUEFHRV9TSVpFKSAvIElBMzJfUEFHRV9TSVpFOwotCWVuZF9iaXQgPSAoZW5kICUgUEFHRV9TSVpFKSAvIElBMzJfUEFHRV9TSVpFOwotCWlmIChlbmRfYml0ID09IDApCi0JCWVuZF9iaXQgPSBQQUdFX1NJWkUgLyBJQTMyX1BBR0VfU0laRTsKLQlwcCA9IF9faWEzMl9maW5kX3BwKGN1cnJlbnQtPnRocmVhZC5wcGwsIHBzdGFydCwgJnByZXYsCi0JCQkJCSZyYl9saW5rLCAmcmJfcGFyZW50KTsKLQlpZiAocHApIHsKLQkJZm9yIChpID0gc3RhcnRfYml0OyBpIDwgZW5kX2JpdDsgaSsrKQotCQkJc2V0X2JpdChpLCAmcHAtPmJpdG1hcCk7Ci0JCS8qCi0JCSAqIENoZWNrOiBpZiB0aGlzIHBhcnRpYWwgcGFnZSBoYXMgYmVlbiBzZXQgdG8gYSBmdWxsIHBhZ2UsCi0JCSAqIHRoZW4gZGVsZXRlIGl0LgotCQkgKi8KLQkJaWYgKGZpbmRfZmlyc3RfemVyb19iaXQoJnBwLT5iaXRtYXAsIHNpemVvZihwcC0+Yml0bWFwKSo4KSA+PQotCQkJCVBBR0VfU0laRS9JQTMyX1BBR0VfU0laRSkgewotCQkJX19pYTMyX2RlbGV0ZV9wcChjdXJyZW50LT50aHJlYWQucHBsLCBwcCwgX19wcF9wcmV2KHBwKSk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBNQVBfRklYRUQgbWF5IGxlYWQgdG8gb3ZlcmxhcHBpbmcgbW1hcC4KLQkgKiBJbiB0aGlzIGNhc2UsIHRoZSByZXF1ZXN0ZWQgbW1hcCBhcmVhIG1heSBhbHJlYWR5IG1tYXBlZCBhcyBhIGZ1bGwKLQkgKiBwYWdlLiBTbyBjaGVjayB2bWEgYmVmb3JlIGFkZGluZyBhIG5ldyBwYXJ0aWFsIHBhZ2UuCi0JICovCi0JaWYgKGZsYWdzICYgTUFQX0ZJWEVEKSB7Ci0JCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gZmluZF92bWEoY3VycmVudC0+bW0sIHBzdGFydCk7Ci0JCWlmICh2bWEgJiYgdm1hLT52bV9zdGFydCA8PSBwc3RhcnQpCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBuZXcgYSBpYTY0X3BhcnRpYWxfcGFnZSAqLwotCXBwID0ga21lbV9jYWNoZV9hbGxvYyhpYTY0X3BhcnRpYWxfcGFnZV9jYWNoZXAsIEdGUF9LRVJORUwpOwotCWlmICghcHApCi0JCXJldHVybiAtRU5PTUVNOwotCXBwLT5iYXNlID0gcHN0YXJ0OwotCXBwLT5iaXRtYXAgPSAwOwotCWZvciAoaT1zdGFydF9iaXQ7IGk8ZW5kX2JpdDsgaSsrKQotCQlzZXRfYml0KGksICYocHAtPmJpdG1hcCkpOwotCXBwLT5uZXh0ID0gTlVMTDsKLQlfX2lhMzJfaW5zZXJ0X3BwKGN1cnJlbnQtPnRocmVhZC5wcGwsIHBwLCBwcmV2LCByYl9saW5rLCByYl9wYXJlbnQpOwotCXJldHVybiAwOwotfQotCi0vKgotICogQHN0YXJ0IGFuZCBAZW5kIHNob3VsZCBiZSBJQTMyIHBhZ2UgYWxpZ25lZCwgYnV0IGRvbid0IG5lZWQgdG8gYmUgaW4gdGhlCi0gKiBzYW1lIElBNjQgcGFnZS4gU3BsaXQgQHN0YXJ0IGFuZCBAZW5kIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIGluIHRoZSBzYW1lIElBNjQKLSAqIHBhZ2UsIHRoZW4gY2FsbCBfX2lhMzJfc2V0X3BwKCkuCi0gKi8KLXN0YXRpYyB2b2lkCi1pYTMyX3NldF9wcCh1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBlbmQsIGludCBmbGFncykKLXsKLQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCWlmIChmbGFncyAmIE1BUF9GSVhFRCkgewotCQkvKgotCQkgKiBNQVBfRklYRUQgbWF5IGxlYWQgdG8gb3ZlcmxhcHBpbmcgbW1hcC4gV2hlbiB0aGlzIGhhcHBlbnMsCi0JCSAqIGEgc2VyaWVzIG9mIGNvbXBsZXRlIElBNjQgcGFnZXMgcmVzdWx0cyBpbiBkZWxldGlvbiBvZgotCQkgKiBvbGQgcGFydGlhbCBwYWdlcyBpbiB0aGF0IHJhbmdlLgotCQkgKi8KLQkJX19pYTMyX2RlbGV0ZV9wcF9yYW5nZShQQUdFX0FMSUdOKHN0YXJ0KSwgUEFHRV9TVEFSVChlbmQpKTsKLQl9Ci0KLQlpZiAoZW5kIDwgUEFHRV9BTElHTihzdGFydCkpIHsKLQkJX19pYTMyX3NldF9wcChzdGFydCwgZW5kLCBmbGFncyk7Ci0JfSBlbHNlIHsKLQkJaWYgKG9mZnNldF9pbl9wYWdlKHN0YXJ0KSkKLQkJCV9faWEzMl9zZXRfcHAoc3RhcnQsIFBBR0VfQUxJR04oc3RhcnQpLCBmbGFncyk7Ci0JCWlmIChvZmZzZXRfaW5fcGFnZShlbmQpKQotCQkJX19pYTMyX3NldF9wcChQQUdFX1NUQVJUKGVuZCksIGVuZCwgZmxhZ3MpOwotCX0KLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLX0KLQotLyoKLSAqIFVuc2V0IHRoZSByYW5nZSBiZXR3ZWVuIEBzdGFydCBhbmQgQGVuZCBpbiBiaXRtYXAuCi0gKiBAc3RhcnQgYW5kIEBlbmQgc2hvdWxkIGJlIElBMzIgcGFnZSBhbGlnbmVkIGFuZCBpbiB0aGUgc2FtZSBJQTY0IHBhZ2UuCi0gKiBBZnRlciBkb2luZyB0aGF0LCBpZiB0aGUgYml0bWFwIGlzIDAsIHRoZW4gZnJlZSB0aGUgcGFnZSBhbmQgcmV0dXJuIDEsCi0gKiAJZWxzZSByZXR1cm4gMDsKLSAqIElmIG5vdCBmaW5kIHRoZSBwYXJ0aWFsIHBhZ2UgaW4gdGhlIGxpc3QsIHRoZW4KLSAqIAlJZiB0aGUgdm1hIGV4aXN0cywgdGhlbiB0aGUgZnVsbCBwYWdlIGlzIHNldCB0byBhIHBhcnRpYWwgcGFnZTsKLSAqCUVsc2UgcmV0dXJuIC1FTk9NRU0uCi0gKi8KLXN0YXRpYyBpbnQKLV9faWEzMl91bnNldF9wcCh1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBlbmQpCi17Ci0Jc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlICpwcCwgKnByZXY7Ci0Jc3RydWN0IHJiX25vZGUgKiogcmJfbGluaywgKnJiX3BhcmVudDsKLQl1bnNpZ25lZCBpbnQgcHN0YXJ0LCBzdGFydF9iaXQsIGVuZF9iaXQsIGk7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0KLQlwc3RhcnQgPSBQQUdFX1NUQVJUKHN0YXJ0KTsKLQlzdGFydF9iaXQgPSAoc3RhcnQgJSBQQUdFX1NJWkUpIC8gSUEzMl9QQUdFX1NJWkU7Ci0JZW5kX2JpdCA9IChlbmQgJSBQQUdFX1NJWkUpIC8gSUEzMl9QQUdFX1NJWkU7Ci0JaWYgKGVuZF9iaXQgPT0gMCkKLQkJZW5kX2JpdCA9IFBBR0VfU0laRSAvIElBMzJfUEFHRV9TSVpFOwotCi0JcHAgPSBfX2lhMzJfZmluZF9wcChjdXJyZW50LT50aHJlYWQucHBsLCBwc3RhcnQsICZwcmV2LAotCQkJCQkmcmJfbGluaywgJnJiX3BhcmVudCk7Ci0JaWYgKHBwKSB7Ci0JCWZvciAoaSA9IHN0YXJ0X2JpdDsgaSA8IGVuZF9iaXQ7IGkrKykKLQkJCWNsZWFyX2JpdChpLCAmcHAtPmJpdG1hcCk7Ci0JCWlmIChwcC0+Yml0bWFwID09IDApIHsKLQkJCV9faWEzMl9kZWxldGVfcHAoY3VycmVudC0+dGhyZWFkLnBwbCwgcHAsIF9fcHBfcHJldihwcCkpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotCi0Jdm1hID0gZmluZF92bWEoY3VycmVudC0+bW0sIHBzdGFydCk7Ci0JaWYgKCF2bWEgfHwgdm1hLT52bV9zdGFydCA+IHBzdGFydCkgewotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiBuZXcgYSBpYTY0X3BhcnRpYWxfcGFnZSAqLwotCXBwID0ga21lbV9jYWNoZV9hbGxvYyhpYTY0X3BhcnRpYWxfcGFnZV9jYWNoZXAsIEdGUF9LRVJORUwpOwotCWlmICghcHApCi0JCXJldHVybiAtRU5PTUVNOwotCXBwLT5iYXNlID0gcHN0YXJ0OwotCXBwLT5iaXRtYXAgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBzdGFydF9iaXQ7IGkrKykKLQkJc2V0X2JpdChpLCAmKHBwLT5iaXRtYXApKTsKLQlmb3IgKGkgPSBlbmRfYml0OyBpIDwgUEFHRV9TSVpFIC8gSUEzMl9QQUdFX1NJWkU7IGkrKykKLQkJc2V0X2JpdChpLCAmKHBwLT5iaXRtYXApKTsKLQlwcC0+bmV4dCA9IE5VTEw7Ci0JX19pYTMyX2luc2VydF9wcChjdXJyZW50LT50aHJlYWQucHBsLCBwcCwgcHJldiwgcmJfbGluaywgcmJfcGFyZW50KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIERlbGV0ZSBwcCBiZXR3ZWVuIFBBR0VfQUxJR04oc3RhcnQpIGFuZCBQQUdFX1NUQVJUKGVuZCkgYnkgY2FsbGluZwotICogX19pYTMyX2RlbGV0ZV9wcF9yYW5nZSgpLiBVbnNldCBwb3NzaWJsZSBwYXJ0aWFsIHBhZ2VzIGJ5IGNhbGxpbmcKLSAqIF9faWEzMl91bnNldF9wcCgpLgotICogVGhlIHJldHVybmVkIHZhbHVlIHNlZSBfX2lhMzJfdW5zZXRfcHAoKS4KLSAqLwotc3RhdGljIGludAotaWEzMl91bnNldF9wcCh1bnNpZ25lZCBpbnQgKnN0YXJ0cCwgdW5zaWduZWQgaW50ICplbmRwKQotewotCXVuc2lnbmVkIGludCBzdGFydCA9ICpzdGFydHAsIGVuZCA9ICplbmRwOwotCWludCByZXQgPSAwOwotCi0JZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQotCV9faWEzMl9kZWxldGVfcHBfcmFuZ2UoUEFHRV9BTElHTihzdGFydCksIFBBR0VfU1RBUlQoZW5kKSk7Ci0KLQlpZiAoZW5kIDwgUEFHRV9BTElHTihzdGFydCkpIHsKLQkJcmV0ID0gX19pYTMyX3Vuc2V0X3BwKHN0YXJ0LCBlbmQpOwotCQlpZiAocmV0ID09IDEpIHsKLQkJCSpzdGFydHAgPSBQQUdFX1NUQVJUKHN0YXJ0KTsKLQkJCSplbmRwID0gUEFHRV9BTElHTihlbmQpOwotCQl9Ci0JCWlmIChyZXQgPT0gMCkgewotCQkJLyogdG8gc2hvcnRjdXQgc3lzX211bm1hcCgpIGluIHN5czMyX211bm1hcCgpICovCi0JCQkqc3RhcnRwID0gUEFHRV9TVEFSVChzdGFydCk7Ci0JCQkqZW5kcCA9IFBBR0VfU1RBUlQoZW5kKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChvZmZzZXRfaW5fcGFnZShzdGFydCkpIHsKLQkJCXJldCA9IF9faWEzMl91bnNldF9wcChzdGFydCwgUEFHRV9BTElHTihzdGFydCkpOwotCQkJaWYgKHJldCA9PSAxKQotCQkJCSpzdGFydHAgPSBQQUdFX1NUQVJUKHN0YXJ0KTsKLQkJCWlmIChyZXQgPT0gMCkKLQkJCQkqc3RhcnRwID0gUEFHRV9BTElHTihzdGFydCk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlnb3RvIG91dDsKLQkJfQotCQlpZiAob2Zmc2V0X2luX3BhZ2UoZW5kKSkgewotCQkJcmV0ID0gX19pYTMyX3Vuc2V0X3BwKFBBR0VfU1RBUlQoZW5kKSwgZW5kKTsKLQkJCWlmIChyZXQgPT0gMSkKLQkJCQkqZW5kcCA9IFBBR0VfQUxJR04oZW5kKTsKLQkJCWlmIChyZXQgPT0gMCkKLQkJCQkqZW5kcCA9IFBBR0VfU1RBUlQoZW5kKTsKLQkJfQotCX0KLQotIG91dDoKLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogQ29tcGFyZSB0aGUgcmFuZ2UgYmV0d2VlbiBAc3RhcnQgYW5kIEBlbmQgd2l0aCBiaXRtYXAgaW4gcGFydGlhbCBwYWdlLgotICogQHN0YXJ0IGFuZCBAZW5kIHNob3VsZCBiZSBJQTMyIHBhZ2UgYWxpZ25lZCBhbmQgaW4gdGhlIHNhbWUgSUE2NCBwYWdlLgotICovCi1zdGF0aWMgaW50Ci1fX2lhMzJfY29tcGFyZV9wcCh1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBlbmQpCi17Ci0Jc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlICpwcCwgKnByZXY7Ci0Jc3RydWN0IHJiX25vZGUgKiogcmJfbGluaywgKnJiX3BhcmVudDsKLQl1bnNpZ25lZCBpbnQgcHN0YXJ0LCBzdGFydF9iaXQsIGVuZF9iaXQsIHNpemU7Ci0JdW5zaWduZWQgaW50IGZpcnN0X2JpdCwgbmV4dF96ZXJvX2JpdDsJLyogdGhlIGZpcnN0IHJhbmdlIGluIGJpdG1hcCAqLwotCi0JcHN0YXJ0ID0gUEFHRV9TVEFSVChzdGFydCk7Ci0KLQlwcCA9IF9faWEzMl9maW5kX3BwKGN1cnJlbnQtPnRocmVhZC5wcGwsIHBzdGFydCwgJnByZXYsCi0JCQkJCSZyYl9saW5rLCAmcmJfcGFyZW50KTsKLQlpZiAoIXBwKQotCQlyZXR1cm4gMTsKLQotCXN0YXJ0X2JpdCA9IChzdGFydCAlIFBBR0VfU0laRSkgLyBJQTMyX1BBR0VfU0laRTsKLQllbmRfYml0ID0gKGVuZCAlIFBBR0VfU0laRSkgLyBJQTMyX1BBR0VfU0laRTsKLQlzaXplID0gc2l6ZW9mKHBwLT5iaXRtYXApICogODsKLQlmaXJzdF9iaXQgPSBmaW5kX2ZpcnN0X2JpdCgmcHAtPmJpdG1hcCwgc2l6ZSk7Ci0JbmV4dF96ZXJvX2JpdCA9IGZpbmRfbmV4dF96ZXJvX2JpdCgmcHAtPmJpdG1hcCwgc2l6ZSwgZmlyc3RfYml0KTsKLQlpZiAoKHN0YXJ0X2JpdCA8IGZpcnN0X2JpdCkgfHwgKGVuZF9iaXQgPiBuZXh0X3plcm9fYml0KSkgewotCQkvKiBleGNlZWRzIHRoZSBmaXJzdCByYW5nZSBpbiBiaXRtYXAgKi8KLQkJcmV0dXJuIC1FTk9NRU07Ci0JfSBlbHNlIGlmICgoc3RhcnRfYml0ID09IGZpcnN0X2JpdCkgJiYgKGVuZF9iaXQgPT0gbmV4dF96ZXJvX2JpdCkpIHsKLQkJZmlyc3RfYml0ID0gZmluZF9uZXh0X2JpdCgmcHAtPmJpdG1hcCwgc2l6ZSwgbmV4dF96ZXJvX2JpdCk7Ci0JCWlmICgobmV4dF96ZXJvX2JpdCA8IGZpcnN0X2JpdCkgJiYgKGZpcnN0X2JpdCA8IHNpemUpKQotCQkJcmV0dXJuIDE7CS8qIGhhcyBuZXh0IHJhbmdlICovCi0JCWVsc2UKLQkJCXJldHVybiAwOyAJLyogbm8gbmV4dCByYW5nZSAqLwotCX0gZWxzZQotCQlyZXR1cm4gMTsKLX0KLQotLyoKLSAqIEBzdGFydCBhbmQgQGVuZCBzaG91bGQgYmUgSUEzMiBwYWdlIGFsaWduZWQsIGJ1dCBkb24ndCBuZWVkIHRvIGJlIGluIHRoZQotICogc2FtZSBJQTY0IHBhZ2UuIFNwbGl0IEBzdGFydCBhbmQgQGVuZCB0byBtYWtlIHN1cmUgdGhleSdyZSBpbiB0aGUgc2FtZSBJQTY0Ci0gKiBwYWdlLCB0aGVuIGNhbGwgX19pYTMyX2NvbXBhcmVfcHAoKS4KLSAqCi0gKiBUYWtlIHRoaXMgYXMgZXhhbXBsZTogdGhlIHJhbmdlIGlzIHRoZSAxc3QgYW5kIDJuZCA0SyBwYWdlLgotICogUmV0dXJuIDAgaWYgdGhleSBmaXQgYml0bWFwIGV4YWN0bHksIGkuZS4gYml0bWFwID0gMDAwMDAwMTE7Ci0gKiBSZXR1cm4gMSBpZiB0aGUgcmFuZ2UgZG9lc24ndCBjb3ZlciB3aG9sZSBiaXRtYXAsIGUuZy4gYml0bWFwID0gMDAwMDExMTE7Ci0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGUgcmFuZ2UgZXhjZWVkcyB0aGUgYml0bWFwLCBlLmcuIGJpdG1hcCA9IDAwMDAwMDAxIG9yCi0gKiAJYml0bWFwID0gMDAwMDAxMDEuCi0gKi8KLXN0YXRpYyBpbnQKLWlhMzJfY29tcGFyZV9wcCh1bnNpZ25lZCBpbnQgKnN0YXJ0cCwgdW5zaWduZWQgaW50ICplbmRwKQotewotCXVuc2lnbmVkIGludCBzdGFydCA9ICpzdGFydHAsIGVuZCA9ICplbmRwOwotCWludCByZXR2YWwgPSAwOwotCi0JZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQotCWlmIChlbmQgPCBQQUdFX0FMSUdOKHN0YXJ0KSkgewotCQlyZXR2YWwgPSBfX2lhMzJfY29tcGFyZV9wcChzdGFydCwgZW5kKTsKLQkJaWYgKHJldHZhbCA9PSAwKSB7Ci0JCQkqc3RhcnRwID0gUEFHRV9TVEFSVChzdGFydCk7Ci0JCQkqZW5kcCA9IFBBR0VfQUxJR04oZW5kKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChvZmZzZXRfaW5fcGFnZShzdGFydCkpIHsKLQkJCXJldHZhbCA9IF9faWEzMl9jb21wYXJlX3BwKHN0YXJ0LAotCQkJCQkJICAgUEFHRV9BTElHTihzdGFydCkpOwotCQkJaWYgKHJldHZhbCA9PSAwKQotCQkJCSpzdGFydHAgPSBQQUdFX1NUQVJUKHN0YXJ0KTsKLQkJCWlmIChyZXR2YWwgPCAwKQotCQkJCWdvdG8gb3V0OwotCQl9Ci0JCWlmIChvZmZzZXRfaW5fcGFnZShlbmQpKSB7Ci0JCQlyZXR2YWwgPSBfX2lhMzJfY29tcGFyZV9wcChQQUdFX1NUQVJUKGVuZCksIGVuZCk7Ci0JCQlpZiAocmV0dmFsID09IDApCi0JCQkJKmVuZHAgPSBQQUdFX0FMSUdOKGVuZCk7Ci0JCX0KLQl9Ci0KLSBvdXQ6Ci0JdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQKLV9faWEzMl9kcm9wX3BwX2xpc3Qoc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlX2xpc3QgKnBwbCkKLXsKLQlzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2UgKnBwID0gcHBsLT5wcF9oZWFkOwotCi0Jd2hpbGUgKHBwKSB7Ci0JCXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSAqbmV4dCA9IHBwLT5uZXh0OwotCQlrbWVtX2NhY2hlX2ZyZWUoaWE2NF9wYXJ0aWFsX3BhZ2VfY2FjaGVwLCBwcCk7Ci0JCXBwID0gbmV4dDsKLQl9Ci0KLQlrZnJlZShwcGwpOwotfQotCi12b2lkCi1pYTMyX2Ryb3BfaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCi17Ci0Jc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlX2xpc3QqIHBwbCA9IHRhc2stPnRocmVhZC5wcGw7Ci0KLQlpZiAocHBsICYmIGF0b21pY19kZWNfYW5kX3Rlc3QoJnBwbC0+cHBfY291bnQpKQotCQlfX2lhMzJfZHJvcF9wcF9saXN0KHBwbCk7Ci19Ci0KLS8qCi0gKiBDb3B5IGN1cnJlbnQtPnRocmVhZC5wcGwgdG8gcHBsIChhbHJlYWR5IGluaXRpYWxpemVkKS4KLSAqLwotc3RhdGljIGludAotX19pYTMyX2NvcHlfcHBfbGlzdChzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdCAqcHBsKQotewotCXN0cnVjdCBpYTY0X3BhcnRpYWxfcGFnZSAqcHAsICp0bXAsICpwcmV2OwotCXN0cnVjdCByYl9ub2RlICoqcmJfbGluaywgKnJiX3BhcmVudDsKLQotCXBwbC0+cHBfaGVhZCA9IE5VTEw7Ci0JcHBsLT5wcF9oaW50ID0gTlVMTDsKLQlwcGwtPnBwbF9yYiA9IFJCX1JPT1Q7Ci0JcmJfbGluayA9ICZwcGwtPnBwbF9yYi5yYl9ub2RlOwotCXJiX3BhcmVudCA9IE5VTEw7Ci0JcHJldiA9IE5VTEw7Ci0KLQlmb3IgKHBwID0gY3VycmVudC0+dGhyZWFkLnBwbC0+cHBfaGVhZDsgcHA7IHBwID0gcHAtPm5leHQpIHsKLQkJdG1wID0ga21lbV9jYWNoZV9hbGxvYyhpYTY0X3BhcnRpYWxfcGFnZV9jYWNoZXAsIEdGUF9LRVJORUwpOwotCQlpZiAoIXRtcCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQkqdG1wID0gKnBwOwotCQlfX2lhMzJfaW5zZXJ0X3BwKHBwbCwgdG1wLCBwcmV2LCByYl9saW5rLCByYl9wYXJlbnQpOwotCQlwcmV2ID0gdG1wOwotCQlyYl9saW5rID0gJnRtcC0+cHBfcmIucmJfcmlnaHQ7Ci0JCXJiX3BhcmVudCA9ICZ0bXAtPnBwX3JiOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1pYTMyX2NvcHlfaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCi0JCQkJdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncykKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQotCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1ZNKSB7Ci0JCWF0b21pY19pbmMoJmN1cnJlbnQtPnRocmVhZC5wcGwtPnBwX2NvdW50KTsKLQkJcC0+dGhyZWFkLnBwbCA9IGN1cnJlbnQtPnRocmVhZC5wcGw7Ci0JfSBlbHNlIHsKLQkJcC0+dGhyZWFkLnBwbCA9IGlhMzJfaW5pdF9wcF9saXN0KCk7Ci0JCWlmICghcC0+dGhyZWFkLnBwbCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQl7Ci0JCQlyZXR2YWwgPSBfX2lhMzJfY29weV9wcF9saXN0KHAtPnRocmVhZC5wcGwpOwotCQl9Ci0JCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCX0KLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nCi1lbXVsYXRlX21tYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgaW50IHByb3QsIGludCBmbGFncywKLQkgICAgICBsb2ZmX3Qgb2ZmKQotewotCXVuc2lnbmVkIGxvbmcgdG1wLCBlbmQsIHBlbmQsIHBzdGFydCwgcmV0LCBpc19jb25ncnVlbnQsIGZ1ZGdlID0gMDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCWxvZmZfdCBwb2ZmOwotCi0JZW5kID0gc3RhcnQgKyBsZW47Ci0JcHN0YXJ0ID0gUEFHRV9TVEFSVChzdGFydCk7Ci0JcGVuZCA9IFBBR0VfQUxJR04oZW5kKTsKLQotCWlmIChmbGFncyAmIE1BUF9GSVhFRCkgewotCQlpYTMyX3NldF9wcCgodW5zaWduZWQgaW50KXN0YXJ0LCAodW5zaWduZWQgaW50KWVuZCwgZmxhZ3MpOwotCQlpZiAoc3RhcnQgPiBwc3RhcnQpIHsKLQkJCWlmIChmbGFncyAmIE1BUF9TSEFSRUQpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSAgICAgICAiJXMoJWQpOiBlbXVsYXRlX21tYXAoKSBjYW4ndCBzaGFyZSBoZWFkIChhZGRyPTB4JWx4KVxuIiwKLQkJCQkgICAgICAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIHN0YXJ0KTsKLQkJCXJldCA9IG1tYXBfc3VicGFnZShmaWxlLCBzdGFydCwgbWluKFBBR0VfQUxJR04oc3RhcnQpLCBlbmQpLCBwcm90LCBmbGFncywKLQkJCQkJICAgb2ZmKTsKLQkJCWlmIChJU19FUlIoKHZvaWQgKikgcmV0KSkKLQkJCQlyZXR1cm4gcmV0OwotCQkJcHN0YXJ0ICs9IFBBR0VfU0laRTsKLQkJCWlmIChwc3RhcnQgPj0gcGVuZCkKLQkJCQlnb3RvIG91dDsJLyogZG9uZSAqLwotCQl9Ci0JCWlmIChlbmQgPCBwZW5kKSB7Ci0JCQlpZiAoZmxhZ3MgJiBNQVBfU0hBUkVEKQotCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkgICAgICAgIiVzKCVkKTogZW11bGF0ZV9tbWFwKCkgY2FuJ3Qgc2hhcmUgdGFpbCAoZW5kPTB4JWx4KVxuIiwKLQkJCQkgICAgICAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIGVuZCk7Ci0JCQlyZXQgPSBtbWFwX3N1YnBhZ2UoZmlsZSwgbWF4KHN0YXJ0LCBQQUdFX1NUQVJUKGVuZCkpLCBlbmQsIHByb3QsIGZsYWdzLAotCQkJCQkgICAob2ZmICsgbGVuKSAtIG9mZnNldF9pbl9wYWdlKGVuZCkpOwotCQkJaWYgKElTX0VSUigodm9pZCAqKSByZXQpKQotCQkJCXJldHVybiByZXQ7Ci0JCQlwZW5kIC09IFBBR0VfU0laRTsKLQkJCWlmIChwc3RhcnQgPj0gcGVuZCkKLQkJCQlnb3RvIG91dDsJLyogZG9uZSAqLwotCQl9Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogSWYgYSBzdGFydCBhZGRyZXNzIHdhcyBzcGVjaWZpZWQsIHVzZSBpdCBpZiB0aGUgZW50aXJlIHJvdW5kZWQgb3V0IGFyZWEKLQkJICogaXMgYXZhaWxhYmxlLgotCQkgKi8KLQkJaWYgKHN0YXJ0ICYmICFwc3RhcnQpCi0JCQlmdWRnZSA9IDE7CS8qIGhhbmRsZSBjYXNlIG9mIG1hcHBpbmcgdG8gcmFuZ2UgKDAsUEFHRV9TSVpFKSAqLwotCQl0bXAgPSBhcmNoX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIHBzdGFydCAtIGZ1ZGdlLCBwZW5kIC0gcHN0YXJ0LCAwLCBmbGFncyk7Ci0JCWlmICh0bXAgIT0gcHN0YXJ0KSB7Ci0JCQlwc3RhcnQgPSB0bXA7Ci0JCQlzdGFydCA9IHBzdGFydCArIG9mZnNldF9pbl9wYWdlKG9mZik7CS8qIG1ha2Ugc3RhcnQgY29uZ3J1ZW50IHdpdGggb2ZmICovCi0JCQllbmQgPSBzdGFydCArIGxlbjsKLQkJCXBlbmQgPSBQQUdFX0FMSUdOKGVuZCk7Ci0JCX0KLQl9Ci0KLQlwb2ZmID0gb2ZmICsgKHBzdGFydCAtIHN0YXJ0KTsJLyogbm90ZTogKHBzdGFydCAtIHN0YXJ0KSBtYXkgYmUgbmVnYXRpdmUgKi8KLQlpc19jb25ncnVlbnQgPSAoZmxhZ3MgJiBNQVBfQU5PTllNT1VTKSB8fCAob2Zmc2V0X2luX3BhZ2UocG9mZikgPT0gMCk7Ci0KLQlpZiAoKGZsYWdzICYgTUFQX1NIQVJFRCkgJiYgIWlzX2NvbmdydWVudCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoJWQpOiBlbXVsYXRlX21tYXAoKSBjYW4ndCBzaGFyZSBjb250ZW50cyBvZiBpbmNvbmdydWVudCBtbWFwICIKLQkJICAgICAgICIoYWRkcj0weCVseCxvZmY9MHglbGx4KVxuIiwgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIHN0YXJ0LCBvZmYpOwotCi0JREJHKCJtbWFwX2JvZHk6IG1hcHBpbmcgWzB4JWx4LTB4JWx4KSAlcyB3aXRoIHBvZmYgMHglbGx4XG4iLCBwc3RhcnQsIHBlbmQsCi0JICAgIGlzX2NvbmdydWVudCA/ICJjb25ncnVlbnQiIDogIm5vdCBjb25ncnVlbnQiLCBwb2ZmKTsKLQotCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JewotCQlpZiAoIShmbGFncyAmIE1BUF9BTk9OWU1PVVMpICYmIGlzX2NvbmdydWVudCkKLQkJCXJldCA9IGRvX21tYXAoZmlsZSwgcHN0YXJ0LCBwZW5kIC0gcHN0YXJ0LCBwcm90LCBmbGFncyB8IE1BUF9GSVhFRCwgcG9mZik7Ci0JCWVsc2UKLQkJCXJldCA9IGRvX21tYXAoTlVMTCwgcHN0YXJ0LCBwZW5kIC0gcHN0YXJ0LAotCQkJCSAgICAgIHByb3QgfCAoKGZsYWdzICYgTUFQX0FOT05ZTU9VUykgPyAwIDogUFJPVF9XUklURSksCi0JCQkJICAgICAgZmxhZ3MgfCBNQVBfRklYRUQgfCBNQVBfQU5PTllNT1VTLCAwKTsKLQl9Ci0JdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0KLQlpZiAoSVNfRVJSKCh2b2lkICopIHJldCkpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoIWlzX2NvbmdydWVudCkgewotCQkvKiByZWFkIHRoZSBmaWxlIGNvbnRlbnRzICovCi0JCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQkJaWYgKCFpbm9kZS0+aV9mb3AgfHwgIWZpbGUtPmZfb3AtPnJlYWQKLQkJICAgIHx8ICgoKmZpbGUtPmZfb3AtPnJlYWQpKGZpbGUsIChjaGFyIF9fdXNlciAqKSBwc3RhcnQsIHBlbmQgLSBwc3RhcnQsICZwb2ZmKQotCQkJPCAwKSkKLQkJewotCQkJc3lzX211bm1hcChwc3RhcnQsIHBlbmQgLSBwc3RhcnQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKCEocHJvdCAmIFBST1RfV1JJVEUpICYmIHN5c19tcHJvdGVjdChwc3RhcnQsIHBlbmQgLSBwc3RhcnQsIHByb3QpIDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghKGZsYWdzICYgTUFQX0ZJWEVEKSkKLQkJaWEzMl9zZXRfcHAoKHVuc2lnbmVkIGludClzdGFydCwgKHVuc2lnbmVkIGludCllbmQsIGZsYWdzKTsKLW91dDoKLQlyZXR1cm4gc3RhcnQ7Ci19Ci0KLSNlbmRpZiAvKiBQQUdFX1NISUZUID4gSUEzMl9QQUdFX1NISUZUICovCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Ci1nZXRfcHJvdDMyICh1bnNpZ25lZCBpbnQgcHJvdCkKLXsKLQlpZiAocHJvdCAmIFBST1RfV1JJVEUpCi0JCS8qIG9uIHg4NiwgUFJPVF9XUklURSBpbXBsaWVzIFBST1RfUkVBRCB3aGljaCBpbXBsaWVzIFBST1RfRUVDICovCi0JCXByb3QgfD0gUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQzsKLQllbHNlIGlmIChwcm90ICYgKFBST1RfUkVBRCB8IFBST1RfRVhFQykpCi0JCS8qIG9uIHg4NiwgdGhlcmUgaXMgbm8gZGlzdGluY3Rpb24gYmV0d2VlbiBQUk9UX1JFQUQgYW5kIFBST1RfRVhFQyAqLwotCQlwcm90IHw9IChQUk9UX1JFQUQgfCBQUk9UX0VYRUMpOwotCi0JcmV0dXJuIHByb3Q7Ci19Ci0KLXVuc2lnbmVkIGxvbmcKLWlhMzJfZG9fbW1hcCAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCBwcm90LCBpbnQgZmxhZ3MsCi0JICAgICAgbG9mZl90IG9mZnNldCkKLXsKLQlEQkcoImlhMzJfZG9fbW1hcChmaWxlPSVwLGFkZHI9MHglbHgsbGVuPTB4JWx4LHByb3Q9JXgsZmxhZ3M9JXgsb2Zmc2V0PTB4JWxseClcbiIsCi0JICAgIGZpbGUsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIG9mZnNldCk7Ci0KLQlpZiAoZmlsZSAmJiAoIWZpbGUtPmZfb3AgfHwgIWZpbGUtPmZfb3AtPm1tYXApKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWxlbiA9IElBMzJfUEFHRV9BTElHTihsZW4pOwotCWlmIChsZW4gPT0gMCkKLQkJcmV0dXJuIGFkZHI7Ci0KLQlpZiAobGVuID4gSUEzMl9QQUdFX09GRlNFVCB8fCBhZGRyID4gSUEzMl9QQUdFX09GRlNFVCAtIGxlbikKLQl7Ci0JCWlmIChmbGFncyAmIE1BUF9GSVhFRCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChPRkZTRVQ0SyhvZmZzZXQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByb3QgPSBnZXRfcHJvdDMyKHByb3QpOwotCi0JaWYgKGZsYWdzICYgTUFQX0hVR0VUTEIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0jaWYgUEFHRV9TSElGVCA+IElBMzJfUEFHRV9TSElGVAotCW11dGV4X2xvY2soJmlhMzJfbW1hcF9tdXRleCk7Ci0JewotCQlhZGRyID0gZW11bGF0ZV9tbWFwKGZpbGUsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIG9mZnNldCk7Ci0JfQotCW11dGV4X3VubG9jaygmaWEzMl9tbWFwX211dGV4KTsKLSNlbHNlCi0JZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQl7Ci0JCWFkZHIgPSBkb19tbWFwKGZpbGUsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIG9mZnNldCk7Ci0JfQotCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotI2VuZGlmCi0JREJHKCJpYTMyX2RvX21tYXA6IHJldHVybmluZyAweCVseFxuIiwgYWRkcik7Ci0JcmV0dXJuIGFkZHI7Ci19Ci0KLS8qCi0gKiBMaW51eC9pMzg2IGRpZG4ndCB1c2UgdG8gYmUgYWJsZSB0byBoYW5kbGUgbW9yZSB0aGFuIDQgc3lzdGVtIGNhbGwgcGFyYW1ldGVycywgc28gdGhlc2UKLSAqIHN5c3RlbSBjYWxscyB1c2VkIGEgbWVtb3J5IGJsb2NrIGZvciBwYXJhbWV0ZXIgcGFzc2luZy4uCi0gKi8KLQotc3RydWN0IG1tYXBfYXJnX3N0cnVjdCB7Ci0JdW5zaWduZWQgaW50IGFkZHI7Ci0JdW5zaWduZWQgaW50IGxlbjsKLQl1bnNpZ25lZCBpbnQgcHJvdDsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGZkOwotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci19OwotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX21tYXAgKHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgX191c2VyICphcmcpCi17Ci0Jc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBhOwotCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JaW50IGZsYWdzOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZhLCBhcmcsIHNpemVvZihhKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKE9GRlNFVDRLKGEub2Zmc2V0KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmbGFncyA9IGEuZmxhZ3M7Ci0KLQlmbGFncyAmPSB+KE1BUF9FWEVDVVRBQkxFIHwgTUFQX0RFTllXUklURSk7Ci0JaWYgKCEoZmxhZ3MgJiBNQVBfQU5PTllNT1VTKSkgewotCQlmaWxlID0gZmdldChhLmZkKTsKLQkJaWYgKCFmaWxlKQotCQkJcmV0dXJuIC1FQkFERjsKLQl9Ci0KLQlhZGRyID0gaWEzMl9kb19tbWFwKGZpbGUsIGEuYWRkciwgYS5sZW4sIGEucHJvdCwgZmxhZ3MsIGEub2Zmc2V0KTsKLQotCWlmIChmaWxlKQotCQlmcHV0KGZpbGUpOwotCXJldHVybiBhZGRyOwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX21tYXAyICh1bnNpZ25lZCBpbnQgYWRkciwgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IHByb3QsIHVuc2lnbmVkIGludCBmbGFncywKLQkgICAgIHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IHBnb2ZmKQotewotCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHJldHZhbDsKLQotCWZsYWdzICY9IH4oTUFQX0VYRUNVVEFCTEUgfCBNQVBfREVOWVdSSVRFKTsKLQlpZiAoIShmbGFncyAmIE1BUF9BTk9OWU1PVVMpKSB7Ci0JCWZpbGUgPSBmZ2V0KGZkKTsKLQkJaWYgKCFmaWxlKQotCQkJcmV0dXJuIC1FQkFERjsKLQl9Ci0KLQlyZXR2YWwgPSBpYTMyX2RvX21tYXAoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFncywKLQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSBwZ29mZiA8PCBJQTMyX1BBR0VfU0hJRlQpOwotCi0JaWYgKGZpbGUpCi0JCWZwdXQoZmlsZSk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9tdW5tYXAgKHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGxlbikKLXsKLQl1bnNpZ25lZCBpbnQgZW5kID0gc3RhcnQgKyBsZW47Ci0JbG9uZyByZXQ7Ci0KLSNpZiBQQUdFX1NISUZUIDw9IElBMzJfUEFHRV9TSElGVAotCXJldCA9IHN5c19tdW5tYXAoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLSNlbHNlCi0JaWYgKE9GRlNFVDRLKHN0YXJ0KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQllbmQgPSBJQTMyX1BBR0VfQUxJR04oZW5kKTsKLQlpZiAoc3RhcnQgPj0gZW5kKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IGlhMzJfdW5zZXRfcHAoJnN0YXJ0LCAmZW5kKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWlmIChzdGFydCA+PSBlbmQpCi0JCXJldHVybiAwOwotCi0JbXV0ZXhfbG9jaygmaWEzMl9tbWFwX211dGV4KTsKLQlyZXQgPSBzeXNfbXVubWFwKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JbXV0ZXhfdW5sb2NrKCZpYTMyX21tYXBfbXV0ZXgpOwotI2VuZGlmCi0JcmV0dXJuIHJldDsKLX0KLQotI2lmIFBBR0VfU0hJRlQgPiBJQTMyX1BBR0VfU0hJRlQKLQotLyoKLSAqIFdoZW4gbXByb3RlY3QoKWluZyBhIHBhcnRpYWwgcGFnZSwgd2Ugc2V0IHRoZSBwZXJtaXNzaW9uIHRvIHRoZSB1bmlvbiBvZiB0aGUgb2xkCi0gKiBzZXR0aW5ncyBhbmQgdGhlIG5ldyBzZXR0aW5ncy4gIEluIG90aGVyIHdvcmRzLCBpdCdzIG9ubHkgcG9zc2libGUgdG8gbWFrZSBhY2Nlc3MgdG8gYQotICogcGFydGlhbCBwYWdlIGxlc3MgcmVzdHJpY3RpdmUuCi0gKi8KLXN0YXRpYyBsb25nCi1tcHJvdGVjdF9zdWJwYWdlICh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBuZXdfcHJvdCkKLXsKLQlpbnQgb2xkX3Byb3Q7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0KLQlpZiAobmV3X3Byb3QgPT0gUFJPVF9OT05FKQotCQlyZXR1cm4gMDsJCS8qIG9wdGltaXplIGNhc2Ugd2hlcmUgbm90aGluZyBjaGFuZ2VzLi4uICovCi0Jdm1hID0gZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHJlc3MpOwotCW9sZF9wcm90ID0gZ2V0X3BhZ2VfcHJvdCh2bWEsIGFkZHJlc3MpOwotCXJldHVybiBzeXNfbXByb3RlY3QoYWRkcmVzcywgUEFHRV9TSVpFLCBuZXdfcHJvdCB8IG9sZF9wcm90KTsKLX0KLQotI2VuZGlmIC8qIFBBR0VfU0hJRlQgPiBJQTMyX1BBR0VfU0hJRlQgKi8KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9tcHJvdGVjdCAodW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgcHJvdCkKLXsKLQl1bnNpZ25lZCBpbnQgZW5kID0gc3RhcnQgKyBsZW47Ci0jaWYgUEFHRV9TSElGVCA+IElBMzJfUEFHRV9TSElGVAotCWxvbmcgcmV0dmFsID0gMDsKLSNlbmRpZgotCi0JcHJvdCA9IGdldF9wcm90MzIocHJvdCk7Ci0KLSNpZiBQQUdFX1NISUZUIDw9IElBMzJfUEFHRV9TSElGVAotCXJldHVybiBzeXNfbXByb3RlY3Qoc3RhcnQsIGVuZCAtIHN0YXJ0LCBwcm90KTsKLSNlbHNlCi0JaWYgKE9GRlNFVDRLKHN0YXJ0KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQllbmQgPSBJQTMyX1BBR0VfQUxJR04oZW5kKTsKLQlpZiAoZW5kIDwgc3RhcnQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dmFsID0gaWEzMl9jb21wYXJlX3BwKCZzdGFydCwgJmVuZCk7Ci0KLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCW11dGV4X2xvY2soJmlhMzJfbW1hcF9tdXRleCk7Ci0JewotCQlpZiAob2Zmc2V0X2luX3BhZ2Uoc3RhcnQpKSB7Ci0JCQkvKiBzdGFydCBhZGRyZXNzIGlzIDRLQiBhbGlnbmVkIGJ1dCBub3QgcGFnZSBhbGlnbmVkLiAqLwotCQkJcmV0dmFsID0gbXByb3RlY3Rfc3VicGFnZShQQUdFX1NUQVJUKHN0YXJ0KSwgcHJvdCk7Ci0JCQlpZiAocmV0dmFsIDwgMCkKLQkJCQlnb3RvIG91dDsKLQotCQkJc3RhcnQgPSBQQUdFX0FMSUdOKHN0YXJ0KTsKLQkJCWlmIChzdGFydCA+PSBlbmQpCi0JCQkJZ290byBvdXQ7CS8qIHJldHZhbCBpcyBhbHJlYWR5IHplcm8uLi4gKi8KLQkJfQotCi0JCWlmIChvZmZzZXRfaW5fcGFnZShlbmQpKSB7Ci0JCQkvKiBlbmQgYWRkcmVzcyBpcyA0S0IgYWxpZ25lZCBidXQgbm90IHBhZ2UgYWxpZ25lZC4gKi8KLQkJCXJldHZhbCA9IG1wcm90ZWN0X3N1YnBhZ2UoUEFHRV9TVEFSVChlbmQpLCBwcm90KTsKLQkJCWlmIChyZXR2YWwgPCAwKQotCQkJCWdvdG8gb3V0OwotCi0JCQllbmQgPSBQQUdFX1NUQVJUKGVuZCk7Ci0JCX0KLQkJcmV0dmFsID0gc3lzX21wcm90ZWN0KHN0YXJ0LCBlbmQgLSBzdGFydCwgcHJvdCk7Ci0JfQotICBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpYTMyX21tYXBfbXV0ZXgpOwotCXJldHVybiByZXR2YWw7Ci0jZW5kaWYKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9tcmVtYXAgKHVuc2lnbmVkIGludCBhZGRyLCB1bnNpZ25lZCBpbnQgb2xkX2xlbiwgdW5zaWduZWQgaW50IG5ld19sZW4sCi0JCXVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IG5ld19hZGRyKQotewotCWxvbmcgcmV0OwotCi0jaWYgUEFHRV9TSElGVCA8PSBJQTMyX1BBR0VfU0hJRlQKLQlyZXQgPSBzeXNfbXJlbWFwKGFkZHIsIG9sZF9sZW4sIG5ld19sZW4sIGZsYWdzLCBuZXdfYWRkcik7Ci0jZWxzZQotCXVuc2lnbmVkIGludCBvbGRfZW5kLCBuZXdfZW5kOwotCi0JaWYgKE9GRlNFVDRLKGFkZHIpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW9sZF9sZW4gPSBJQTMyX1BBR0VfQUxJR04ob2xkX2xlbik7Ci0JbmV3X2xlbiA9IElBMzJfUEFHRV9BTElHTihuZXdfbGVuKTsKLQlvbGRfZW5kID0gYWRkciArIG9sZF9sZW47Ci0JbmV3X2VuZCA9IGFkZHIgKyBuZXdfbGVuOwotCi0JaWYgKCFuZXdfbGVuKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgoZmxhZ3MgJiBNUkVNQVBfRklYRUQpICYmIChPRkZTRVQ0SyhuZXdfYWRkcikpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChvbGRfbGVuID49IG5ld19sZW4pIHsKLQkJcmV0ID0gc3lzMzJfbXVubWFwKGFkZHIgKyBuZXdfbGVuLCBvbGRfbGVuIC0gbmV3X2xlbik7Ci0JCWlmIChyZXQgJiYgb2xkX2xlbiAhPSBuZXdfbGVuKQotCQkJcmV0dXJuIHJldDsKLQkJcmV0ID0gYWRkcjsKLQkJaWYgKCEoZmxhZ3MgJiBNUkVNQVBfRklYRUQpIHx8IChuZXdfYWRkciA9PSBhZGRyKSkKLQkJCXJldHVybiByZXQ7Ci0JCW9sZF9sZW4gPSBuZXdfbGVuOwotCX0KLQotCWFkZHIgPSBQQUdFX1NUQVJUKGFkZHIpOwotCW9sZF9sZW4gPSBQQUdFX0FMSUdOKG9sZF9lbmQpIC0gYWRkcjsKLQluZXdfbGVuID0gUEFHRV9BTElHTihuZXdfZW5kKSAtIGFkZHI7Ci0KLQltdXRleF9sb2NrKCZpYTMyX21tYXBfbXV0ZXgpOwotCXJldCA9IHN5c19tcmVtYXAoYWRkciwgb2xkX2xlbiwgbmV3X2xlbiwgZmxhZ3MsIG5ld19hZGRyKTsKLQltdXRleF91bmxvY2soJmlhMzJfbW1hcF9tdXRleCk7Ci0KLQlpZiAoKHJldCA+PSAwKSAmJiAob2xkX2xlbiA8IG5ld19sZW4pKSB7Ci0JCS8qIG1yZW1hcCBleHBhbmRlZCBzdWNjZXNzZnVsbHkgKi8KLQkJaWEzMl9zZXRfcHAob2xkX2VuZCwgbmV3X2VuZCwgZmxhZ3MpOwotCX0KLSNlbmRpZgotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZwotc3lzMzJfYWxhcm0gKHVuc2lnbmVkIGludCBzZWNvbmRzKQotewotCXJldHVybiBhbGFybV9zZXRpdGltZXIoc2Vjb25kcyk7Ci19Ci0KLXN0cnVjdCBzZWxfYXJnX3N0cnVjdCB7Ci0JdW5zaWduZWQgaW50IG47Ci0JdW5zaWduZWQgaW50IGlucDsKLQl1bnNpZ25lZCBpbnQgb3V0cDsKLQl1bnNpZ25lZCBpbnQgZXhwOwotCXVuc2lnbmVkIGludCB0dnA7Ci19OwotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX29sZF9zZWxlY3QgKHN0cnVjdCBzZWxfYXJnX3N0cnVjdCBfX3VzZXIgKmFyZykKLXsKLQlzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgYTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmYSwgYXJnLCBzaXplb2YoYSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gY29tcGF0X3N5c19zZWxlY3QoYS5uLCBjb21wYXRfcHRyKGEuaW5wKSwgY29tcGF0X3B0cihhLm91dHApLAotCQkJCSBjb21wYXRfcHRyKGEuZXhwKSwgY29tcGF0X3B0cihhLnR2cCkpOwotfQotCi0jZGVmaW5lIFNFTU9QCQkgMQotI2RlZmluZSBTRU1HRVQJCSAyCi0jZGVmaW5lIFNFTUNUTAkJIDMKLSNkZWZpbmUgU0VNVElNRURPUAkgNAotI2RlZmluZSBNU0dTTkQJCTExCi0jZGVmaW5lIE1TR1JDVgkJMTIKLSNkZWZpbmUgTVNHR0VUCQkxMwotI2RlZmluZSBNU0dDVEwJCTE0Ci0jZGVmaW5lIFNITUFUCQkyMQotI2RlZmluZSBTSE1EVAkJMjIKLSNkZWZpbmUgU0hNR0VUCQkyMwotI2RlZmluZSBTSE1DVEwJCTI0Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfaXBjKHUzMiBjYWxsLCBpbnQgZmlyc3QsIGludCBzZWNvbmQsIGludCB0aGlyZCwgdTMyIHB0ciwgdTMyIGZpZnRoKQotewotCWludCB2ZXJzaW9uOwotCi0JdmVyc2lvbiA9IGNhbGwgPj4gMTY7IC8qIGhhY2sgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLQljYWxsICY9IDB4ZmZmZjsKLQotCXN3aXRjaCAoY2FsbCkgewotCSAgICAgIGNhc2UgU0VNVElNRURPUDoKLQkJaWYgKGZpZnRoKQotCQkJcmV0dXJuIGNvbXBhdF9zeXNfc2VtdGltZWRvcChmaXJzdCwgY29tcGF0X3B0cihwdHIpLAotCQkJCXNlY29uZCwgY29tcGF0X3B0cihmaWZ0aCkpOwotCQkvKiBlbHNlIGZhbGwgdGhyb3VnaCBmb3Igbm9ybWFsIHNlbW9wKCkgKi8KLQkgICAgICBjYXNlIFNFTU9QOgotCQkvKiBzdHJ1Y3Qgc2VtYnVmIGlzIHRoZSBzYW1lIG9uIDMyIGFuZCA2NGJpdCA6KSkgKi8KLQkJcmV0dXJuIHN5c19zZW10aW1lZG9wKGZpcnN0LCBjb21wYXRfcHRyKHB0ciksIHNlY29uZCwKLQkJCQkgICAgICBOVUxMKTsKLQkgICAgICBjYXNlIFNFTUdFVDoKLQkJcmV0dXJuIHN5c19zZW1nZXQoZmlyc3QsIHNlY29uZCwgdGhpcmQpOwotCSAgICAgIGNhc2UgU0VNQ1RMOgotCQlyZXR1cm4gY29tcGF0X3N5c19zZW1jdGwoZmlyc3QsIHNlY29uZCwgdGhpcmQsIGNvbXBhdF9wdHIocHRyKSk7Ci0KLQkgICAgICBjYXNlIE1TR1NORDoKLQkJcmV0dXJuIGNvbXBhdF9zeXNfbXNnc25kKGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBjb21wYXRfcHRyKHB0cikpOwotCSAgICAgIGNhc2UgTVNHUkNWOgotCQlyZXR1cm4gY29tcGF0X3N5c19tc2dyY3YoZmlyc3QsIHNlY29uZCwgZmlmdGgsIHRoaXJkLCB2ZXJzaW9uLCBjb21wYXRfcHRyKHB0cikpOwotCSAgICAgIGNhc2UgTVNHR0VUOgotCQlyZXR1cm4gc3lzX21zZ2dldCgoa2V5X3QpIGZpcnN0LCBzZWNvbmQpOwotCSAgICAgIGNhc2UgTVNHQ1RMOgotCQlyZXR1cm4gY29tcGF0X3N5c19tc2djdGwoZmlyc3QsIHNlY29uZCwgY29tcGF0X3B0cihwdHIpKTsKLQotCSAgICAgIGNhc2UgU0hNQVQ6Ci0JCXJldHVybiBjb21wYXRfc3lzX3NobWF0KGZpcnN0LCBzZWNvbmQsIHRoaXJkLCB2ZXJzaW9uLCBjb21wYXRfcHRyKHB0cikpOwotCQlicmVhazsKLQkgICAgICBjYXNlIFNITURUOgotCQlyZXR1cm4gc3lzX3NobWR0KGNvbXBhdF9wdHIocHRyKSk7Ci0JICAgICAgY2FzZSBTSE1HRVQ6Ci0JCXJldHVybiBzeXNfc2htZ2V0KGZpcnN0LCAodW5zaWduZWQpc2Vjb25kLCB0aGlyZCk7Ci0JICAgICAgY2FzZSBTSE1DVEw6Ci0JCXJldHVybiBjb21wYXRfc3lzX3NobWN0bChmaXJzdCwgc2Vjb25kLCBjb21wYXRfcHRyKHB0cikpOwotCi0JICAgICAgZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9TWVM7Ci0JfQotCXJldHVybiAtRUlOVkFMOwotfQotCi1hc21saW5rYWdlIGxvbmcKLWNvbXBhdF9zeXNfd2FpdDQgKGNvbXBhdF9waWRfdCBwaWQsIGNvbXBhdF91aW50X3QgKiBzdGF0X2FkZHIsIGludCBvcHRpb25zLAotCQkgc3RydWN0IGNvbXBhdF9ydXNhZ2UgKnJ1KTsKLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl93YWl0cGlkIChpbnQgcGlkLCB1bnNpZ25lZCBpbnQgKnN0YXRfYWRkciwgaW50IG9wdGlvbnMpCi17Ci0JcmV0dXJuIGNvbXBhdF9zeXNfd2FpdDQocGlkLCBzdGF0X2FkZHIsIG9wdGlvbnMsIE5VTEwpOwotfQotCi0vKgotICogIFRoZSBvcmRlciBpbiB3aGljaCByZWdpc3RlcnMgYXJlIHN0b3JlZCBpbiB0aGUgcHRyYWNlIHJlZ3Mgc3RydWN0dXJlCi0gKi8KLSNkZWZpbmUgUFRfRUJYCTAKLSNkZWZpbmUgUFRfRUNYCTEKLSNkZWZpbmUgUFRfRURYCTIKLSNkZWZpbmUgUFRfRVNJCTMKLSNkZWZpbmUgUFRfRURJCTQKLSNkZWZpbmUgUFRfRUJQCTUKLSNkZWZpbmUgUFRfRUFYCTYKLSNkZWZpbmUgUFRfRFMJNwotI2RlZmluZSBQVF9FUwk4Ci0jZGVmaW5lIFBUX0ZTCTkKLSNkZWZpbmUgUFRfR1MJMTAKLSNkZWZpbmUgUFRfT1JJR19FQVggMTEKLSNkZWZpbmUgUFRfRUlQCTEyCi0jZGVmaW5lIFBUX0NTCTEzCi0jZGVmaW5lIFBUX0VGTAkxNAotI2RlZmluZSBQVF9VRVNQCTE1Ci0jZGVmaW5lIFBUX1NTCTE2Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWdldHJlZyAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IHJlZ25vKQotewotCXN0cnVjdCBwdF9yZWdzICpjaGlsZF9yZWdzOwotCi0JY2hpbGRfcmVncyA9IHRhc2tfcHRfcmVncyhjaGlsZCk7Ci0Jc3dpdGNoIChyZWdubyAvIHNpemVvZihpbnQpKSB7Ci0JICAgICAgY2FzZSBQVF9FQlg6IHJldHVybiBjaGlsZF9yZWdzLT5yMTE7Ci0JICAgICAgY2FzZSBQVF9FQ1g6IHJldHVybiBjaGlsZF9yZWdzLT5yOTsKLQkgICAgICBjYXNlIFBUX0VEWDogcmV0dXJuIGNoaWxkX3JlZ3MtPnIxMDsKLQkgICAgICBjYXNlIFBUX0VTSTogcmV0dXJuIGNoaWxkX3JlZ3MtPnIxNDsKLQkgICAgICBjYXNlIFBUX0VESTogcmV0dXJuIGNoaWxkX3JlZ3MtPnIxNTsKLQkgICAgICBjYXNlIFBUX0VCUDogcmV0dXJuIGNoaWxkX3JlZ3MtPnIxMzsKLQkgICAgICBjYXNlIFBUX0VBWDogcmV0dXJuIGNoaWxkX3JlZ3MtPnI4OwotCSAgICAgIGNhc2UgUFRfT1JJR19FQVg6IHJldHVybiBjaGlsZF9yZWdzLT5yMTsgLyogc2VlIGRpc3BhdGNoX3RvX2lhMzJfaGFuZGxlcigpICovCi0JICAgICAgY2FzZSBQVF9FSVA6IHJldHVybiBjaGlsZF9yZWdzLT5jcl9paXA7Ci0JICAgICAgY2FzZSBQVF9VRVNQOiByZXR1cm4gY2hpbGRfcmVncy0+cjEyOwotCSAgICAgIGNhc2UgUFRfRUZMOiByZXR1cm4gY2hpbGQtPnRocmVhZC5lZmxhZzsKLQkgICAgICBjYXNlIFBUX0RTOiBjYXNlIFBUX0VTOiBjYXNlIFBUX0ZTOiBjYXNlIFBUX0dTOiBjYXNlIFBUX1NTOgotCQlyZXR1cm4gX19VU0VSX0RTOwotCSAgICAgIGNhc2UgUFRfQ1M6IHJldHVybiBfX1VTRVJfQ1M7Ci0JICAgICAgZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJpYTMyLmdldHJlZygpOiB1bmtub3duIHJlZ2lzdGVyICVkXG4iLCByZWdubyk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLXB1dHJlZyAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0Jc3RydWN0IHB0X3JlZ3MgKmNoaWxkX3JlZ3M7Ci0KLQljaGlsZF9yZWdzID0gdGFza19wdF9yZWdzKGNoaWxkKTsKLQlzd2l0Y2ggKHJlZ25vIC8gc2l6ZW9mKGludCkpIHsKLQkgICAgICBjYXNlIFBUX0VCWDogY2hpbGRfcmVncy0+cjExID0gdmFsdWU7IGJyZWFrOwotCSAgICAgIGNhc2UgUFRfRUNYOiBjaGlsZF9yZWdzLT5yOSA9IHZhbHVlOyBicmVhazsKLQkgICAgICBjYXNlIFBUX0VEWDogY2hpbGRfcmVncy0+cjEwID0gdmFsdWU7IGJyZWFrOwotCSAgICAgIGNhc2UgUFRfRVNJOiBjaGlsZF9yZWdzLT5yMTQgPSB2YWx1ZTsgYnJlYWs7Ci0JICAgICAgY2FzZSBQVF9FREk6IGNoaWxkX3JlZ3MtPnIxNSA9IHZhbHVlOyBicmVhazsKLQkgICAgICBjYXNlIFBUX0VCUDogY2hpbGRfcmVncy0+cjEzID0gdmFsdWU7IGJyZWFrOwotCSAgICAgIGNhc2UgUFRfRUFYOiBjaGlsZF9yZWdzLT5yOCA9IHZhbHVlOyBicmVhazsKLQkgICAgICBjYXNlIFBUX09SSUdfRUFYOiBjaGlsZF9yZWdzLT5yMSA9IHZhbHVlOyBicmVhazsKLQkgICAgICBjYXNlIFBUX0VJUDogY2hpbGRfcmVncy0+Y3JfaWlwID0gdmFsdWU7IGJyZWFrOwotCSAgICAgIGNhc2UgUFRfVUVTUDogY2hpbGRfcmVncy0+cjEyID0gdmFsdWU7IGJyZWFrOwotCSAgICAgIGNhc2UgUFRfRUZMOiBjaGlsZC0+dGhyZWFkLmVmbGFnID0gdmFsdWU7IGJyZWFrOwotCSAgICAgIGNhc2UgUFRfRFM6IGNhc2UgUFRfRVM6IGNhc2UgUFRfRlM6IGNhc2UgUFRfR1M6IGNhc2UgUFRfU1M6Ci0JCWlmICh2YWx1ZSAhPSBfX1VTRVJfRFMpCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiaWEzMi5wdXRyZWc6IGF0dGVtcHQgdG8gc2V0IGludmFsaWQgc2VnbWVudCByZWdpc3RlciAlZCA9ICV4XG4iLAotCQkJICAgICAgIHJlZ25vLCB2YWx1ZSk7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgUFRfQ1M6Ci0JCWlmICh2YWx1ZSAhPSBfX1VTRVJfQ1MpCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiaWEzMi5wdXRyZWc6IGF0dGVtcHQgdG8gc2V0IGludmFsaWQgc2VnbWVudCByZWdpc3RlciAlZCA9ICV4XG4iLAotCQkJICAgICAgIHJlZ25vLCB2YWx1ZSk7Ci0JCWJyZWFrOwotCSAgICAgIGRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiaWEzMi5wdXRyZWc6IHVua25vd24gcmVnaXN0ZXIgJWRcbiIsIHJlZ25vKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotcHV0X2ZwcmVnIChpbnQgcmVnbm8sIHN0cnVjdCBfZnByZWdfaWEzMiBfX3VzZXIgKnJlZywgc3RydWN0IHB0X3JlZ3MgKnB0cCwKLQkgICBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzd3AsIGludCB0b3MpCi17Ci0Jc3RydWN0IF9mcHJlZ19pYTMyICpmOwotCWNoYXIgYnVmWzMyXTsKLQotCWYgPSAoc3RydWN0IF9mcHJlZ19pYTMyICopKCgodW5zaWduZWQgbG9uZylidWYgKyAxNSkgJiB+MTUpOwotCWlmICgocmVnbm8gKz0gdG9zKSA+PSA4KQotCQlyZWdubyAtPSA4OwotCXN3aXRjaCAocmVnbm8pIHsKLQkgICAgICBjYXNlIDA6Ci0JCWlhNjRmMmlhMzJmKGYsICZwdHAtPmY4KTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAxOgotCQlpYTY0ZjJpYTMyZihmLCAmcHRwLT5mOSk7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgMjoKLQkJaWE2NGYyaWEzMmYoZiwgJnB0cC0+ZjEwKTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAzOgotCQlpYTY0ZjJpYTMyZihmLCAmcHRwLT5mMTEpOwotCQlicmVhazsKLQkgICAgICBjYXNlIDQ6Ci0JICAgICAgY2FzZSA1OgotCSAgICAgIGNhc2UgNjoKLQkgICAgICBjYXNlIDc6Ci0JCWlhNjRmMmlhMzJmKGYsICZzd3AtPmYxMiArIChyZWdubyAtIDQpKTsKLQkJYnJlYWs7Ci0JfQotCWNvcHlfdG9fdXNlcihyZWcsIGYsIHNpemVvZigqcmVnKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZXRfZnByZWcgKGludCByZWdubywgc3RydWN0IF9mcHJlZ19pYTMyIF9fdXNlciAqcmVnLCBzdHJ1Y3QgcHRfcmVncyAqcHRwLAotCSAgIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3cCwgaW50IHRvcykKLXsKLQotCWlmICgocmVnbm8gKz0gdG9zKSA+PSA4KQotCQlyZWdubyAtPSA4OwotCXN3aXRjaCAocmVnbm8pIHsKLQkgICAgICBjYXNlIDA6Ci0JCWNvcHlfZnJvbV91c2VyKCZwdHAtPmY4LCByZWcsIHNpemVvZigqcmVnKSk7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgMToKLQkJY29weV9mcm9tX3VzZXIoJnB0cC0+ZjksIHJlZywgc2l6ZW9mKCpyZWcpKTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAyOgotCQljb3B5X2Zyb21fdXNlcigmcHRwLT5mMTAsIHJlZywgc2l6ZW9mKCpyZWcpKTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAzOgotCQljb3B5X2Zyb21fdXNlcigmcHRwLT5mMTEsIHJlZywgc2l6ZW9mKCpyZWcpKTsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSA0OgotCSAgICAgIGNhc2UgNToKLQkgICAgICBjYXNlIDY6Ci0JICAgICAgY2FzZSA3OgotCQljb3B5X2Zyb21fdXNlcigmc3dwLT5mMTIgKyAocmVnbm8gLSA0KSwgcmVnLCBzaXplb2YoKnJlZykpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuOwotfQotCi1pbnQKLXNhdmVfaWEzMl9mcHN0YXRlIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IGlhMzJfdXNlcl9pMzg3X3N0cnVjdCBfX3VzZXIgKnNhdmUpCi17Ci0Jc3RydWN0IHN3aXRjaF9zdGFjayAqc3dwOwotCXN0cnVjdCBwdF9yZWdzICpwdHA7Ci0JaW50IGksIHRvczsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgc2F2ZSwgc2l6ZW9mKCpzYXZlKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JX19wdXRfdXNlcih0c2stPnRocmVhZC5mY3IgJiAweGZmZmYsICZzYXZlLT5jd2QpOwotCV9fcHV0X3VzZXIodHNrLT50aHJlYWQuZnNyICYgMHhmZmZmLCAmc2F2ZS0+c3dkKTsKLQlfX3B1dF91c2VyKCh0c2stPnRocmVhZC5mc3I+PjE2KSAmIDB4ZmZmZiwgJnNhdmUtPnR3ZCk7Ci0JX19wdXRfdXNlcih0c2stPnRocmVhZC5maXIsICZzYXZlLT5maXApOwotCV9fcHV0X3VzZXIoKHRzay0+dGhyZWFkLmZpcj4+MzIpICYgMHhmZmZmLCAmc2F2ZS0+ZmNzKTsKLQlfX3B1dF91c2VyKHRzay0+dGhyZWFkLmZkciwgJnNhdmUtPmZvbyk7Ci0JX19wdXRfdXNlcigodHNrLT50aHJlYWQuZmRyPj4zMikgJiAweGZmZmYsICZzYXZlLT5mb3MpOwotCi0JLyoKLQkgKiAgU3RhY2sgZnJhbWVzIHN0YXJ0IHdpdGggMTYtYnl0ZXMgb2YgdGVtcCBzcGFjZQotCSAqLwotCXN3cCA9IChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopKHRzay0+dGhyZWFkLmtzcCArIDE2KTsKLQlwdHAgPSB0YXNrX3B0X3JlZ3ModHNrKTsKLQl0b3MgPSAodHNrLT50aHJlYWQuZnNyID4+IDExKSAmIDc7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJcHV0X2ZwcmVnKGksICZzYXZlLT5zdF9zcGFjZVtpXSwgcHRwLCBzd3AsIHRvcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXJlc3RvcmVfaWEzMl9mcHN0YXRlIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IGlhMzJfdXNlcl9pMzg3X3N0cnVjdCBfX3VzZXIgKnNhdmUpCi17Ci0Jc3RydWN0IHN3aXRjaF9zdGFjayAqc3dwOwotCXN0cnVjdCBwdF9yZWdzICpwdHA7Ci0JaW50IGksIHRvczsKLQl1bnNpZ25lZCBpbnQgZnNybG8sIGZzcmhpLCBudW0zMjsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBzYXZlLCBzaXplb2YoKnNhdmUpKSkKLQkJcmV0dXJuKC1FRkFVTFQpOwotCi0JX19nZXRfdXNlcihudW0zMiwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2F2ZS0+Y3dkKTsKLQl0c2stPnRocmVhZC5mY3IgPSAodHNrLT50aHJlYWQuZmNyICYgKH4weDFmM2YpKSB8IChudW0zMiAmIDB4MWYzZik7Ci0JX19nZXRfdXNlcihmc3JsbywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2F2ZS0+c3dkKTsKLQlfX2dldF91c2VyKGZzcmhpLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYXZlLT50d2QpOwotCW51bTMyID0gKGZzcmhpIDw8IDE2KSB8IGZzcmxvOwotCXRzay0+dGhyZWFkLmZzciA9ICh0c2stPnRocmVhZC5mc3IgJiAofjB4ZmZmZmZmZmYpKSB8IG51bTMyOwotCV9fZ2V0X3VzZXIobnVtMzIsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNhdmUtPmZpcCk7Ci0JdHNrLT50aHJlYWQuZmlyID0gKHRzay0+dGhyZWFkLmZpciAmICh+MHhmZmZmZmZmZikpIHwgbnVtMzI7Ci0JX19nZXRfdXNlcihudW0zMiwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2F2ZS0+Zm9vKTsKLQl0c2stPnRocmVhZC5mZHIgPSAodHNrLT50aHJlYWQuZmRyICYgKH4weGZmZmZmZmZmKSkgfCBudW0zMjsKLQotCS8qCi0JICogIFN0YWNrIGZyYW1lcyBzdGFydCB3aXRoIDE2LWJ5dGVzIG9mIHRlbXAgc3BhY2UKLQkgKi8KLQlzd3AgPSAoc3RydWN0IHN3aXRjaF9zdGFjayAqKSh0c2stPnRocmVhZC5rc3AgKyAxNik7Ci0JcHRwID0gdGFza19wdF9yZWdzKHRzayk7Ci0JdG9zID0gKHRzay0+dGhyZWFkLmZzciA+PiAxMSkgJiA3OwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWdldF9mcHJlZyhpLCAmc2F2ZS0+c3Rfc3BhY2VbaV0sIHB0cCwgc3dwLCB0b3MpOwotCXJldHVybiAwOwotfQotCi1pbnQKLXNhdmVfaWEzMl9mcHhzdGF0ZSAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBpYTMyX3VzZXJfZnhzcl9zdHJ1Y3QgX191c2VyICpzYXZlKQotewotCXN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3cDsKLQlzdHJ1Y3QgcHRfcmVncyAqcHRwOwotCWludCBpLCB0b3M7Ci0JdW5zaWduZWQgbG9uZyBteGNzcj0wOwotCXVuc2lnbmVkIGxvbmcgbnVtMTI4WzJdOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBzYXZlLCBzaXplb2YoKnNhdmUpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlfX3B1dF91c2VyKHRzay0+dGhyZWFkLmZjciAmIDB4ZmZmZiwgJnNhdmUtPmN3ZCk7Ci0JX19wdXRfdXNlcih0c2stPnRocmVhZC5mc3IgJiAweGZmZmYsICZzYXZlLT5zd2QpOwotCV9fcHV0X3VzZXIoKHRzay0+dGhyZWFkLmZzcj4+MTYpICYgMHhmZmZmLCAmc2F2ZS0+dHdkKTsKLQlfX3B1dF91c2VyKHRzay0+dGhyZWFkLmZpciwgJnNhdmUtPmZpcCk7Ci0JX19wdXRfdXNlcigodHNrLT50aHJlYWQuZmlyPj4zMikgJiAweGZmZmYsICZzYXZlLT5mY3MpOwotCV9fcHV0X3VzZXIodHNrLT50aHJlYWQuZmRyLCAmc2F2ZS0+Zm9vKTsKLQlfX3B1dF91c2VyKCh0c2stPnRocmVhZC5mZHI+PjMyKSAmIDB4ZmZmZiwgJnNhdmUtPmZvcyk7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogIFN0YWNrIGZyYW1lcyBzdGFydCB3aXRoIDE2LWJ5dGVzIG9mIHRlbXAgc3BhY2UKLSAgICAgICAgICovCi0gICAgICAgIHN3cCA9IChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopKHRzay0+dGhyZWFkLmtzcCArIDE2KTsKLSAgICAgICAgcHRwID0gdGFza19wdF9yZWdzKHRzayk7Ci0JdG9zID0gKHRzay0+dGhyZWFkLmZzciA+PiAxMSkgJiA3OwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlwdXRfZnByZWcoaSwgKHN0cnVjdCBfZnByZWdfaWEzMiBfX3VzZXIgKikmc2F2ZS0+c3Rfc3BhY2VbNCppXSwgcHRwLCBzd3AsIHRvcyk7Ci0KLQlteGNzciA9ICgodHNrLT50aHJlYWQuZmNyPj4zMikgJiAweGZmODApIHwgKCh0c2stPnRocmVhZC5mc3I+PjMyKSAmIDB4M2YpOwotCV9fcHV0X3VzZXIobXhjc3IgJiAweGZmZmYsICZzYXZlLT5teGNzcik7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQltZW1jcHkoJihudW0xMjhbMF0pLCAmKHN3cC0+ZjE2KSArIGkqMiwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLQkJbWVtY3B5KCYobnVtMTI4WzFdKSwgJihzd3AtPmYxNykgKyBpKjIsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Ci0JCWNvcHlfdG9fdXNlcigmc2F2ZS0+eG1tX3NwYWNlWzBdICsgNCppLCBudW0xMjgsIHNpemVvZihzdHJ1Y3QgX3htbXJlZ19pYTMyKSk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1yZXN0b3JlX2lhMzJfZnB4c3RhdGUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgaWEzMl91c2VyX2Z4c3Jfc3RydWN0IF9fdXNlciAqc2F2ZSkKLXsKLQlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzd3A7Ci0Jc3RydWN0IHB0X3JlZ3MgKnB0cDsKLQlpbnQgaSwgdG9zOwotCXVuc2lnbmVkIGludCBmc3JsbywgZnNyaGksIG51bTMyOwotCWludCBteGNzcjsKLQl1bnNpZ25lZCBsb25nIG51bTY0OwotCXVuc2lnbmVkIGxvbmcgbnVtMTI4WzJdOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHNhdmUsIHNpemVvZigqc2F2ZSkpKQotCQlyZXR1cm4oLUVGQVVMVCk7Ci0KLQlfX2dldF91c2VyKG51bTMyLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYXZlLT5jd2QpOwotCXRzay0+dGhyZWFkLmZjciA9ICh0c2stPnRocmVhZC5mY3IgJiAofjB4MWYzZikpIHwgKG51bTMyICYgMHgxZjNmKTsKLQlfX2dldF91c2VyKGZzcmxvLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYXZlLT5zd2QpOwotCV9fZ2V0X3VzZXIoZnNyaGksICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNhdmUtPnR3ZCk7Ci0JbnVtMzIgPSAoZnNyaGkgPDwgMTYpIHwgZnNybG87Ci0JdHNrLT50aHJlYWQuZnNyID0gKHRzay0+dGhyZWFkLmZzciAmICh+MHhmZmZmZmZmZikpIHwgbnVtMzI7Ci0JX19nZXRfdXNlcihudW0zMiwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2F2ZS0+ZmlwKTsKLQl0c2stPnRocmVhZC5maXIgPSAodHNrLT50aHJlYWQuZmlyICYgKH4weGZmZmZmZmZmKSkgfCBudW0zMjsKLQlfX2dldF91c2VyKG51bTMyLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYXZlLT5mb28pOwotCXRzay0+dGhyZWFkLmZkciA9ICh0c2stPnRocmVhZC5mZHIgJiAofjB4ZmZmZmZmZmYpKSB8IG51bTMyOwotCi0JLyoKLQkgKiAgU3RhY2sgZnJhbWVzIHN0YXJ0IHdpdGggMTYtYnl0ZXMgb2YgdGVtcCBzcGFjZQotCSAqLwotCXN3cCA9IChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopKHRzay0+dGhyZWFkLmtzcCArIDE2KTsKLQlwdHAgPSB0YXNrX3B0X3JlZ3ModHNrKTsKLQl0b3MgPSAodHNrLT50aHJlYWQuZnNyID4+IDExKSAmIDc7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQlnZXRfZnByZWcoaSwgKHN0cnVjdCBfZnByZWdfaWEzMiBfX3VzZXIgKikmc2F2ZS0+c3Rfc3BhY2VbNCppXSwgcHRwLCBzd3AsIHRvcyk7Ci0KLQlfX2dldF91c2VyKG14Y3NyLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYXZlLT5teGNzcik7Ci0JbnVtNjQgPSBteGNzciAmIDB4ZmYxMDsKLQl0c2stPnRocmVhZC5mY3IgPSAodHNrLT50aHJlYWQuZmNyICYgKH4weGZmMTAwMDAwMDAwMFVMKSkgfCAobnVtNjQ8PDMyKTsKLQludW02NCA9IG14Y3NyICYgMHgzZjsKLQl0c2stPnRocmVhZC5mc3IgPSAodHNrLT50aHJlYWQuZnNyICYgKH4weDNmMDAwMDAwMDBVTCkpIHwgKG51bTY0PDwzMik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWNvcHlfZnJvbV91c2VyKG51bTEyOCwgJnNhdmUtPnhtbV9zcGFjZVswXSArIDQqaSwgc2l6ZW9mKHN0cnVjdCBfeG1tcmVnX2lhMzIpKTsKLQkJbWVtY3B5KCYoc3dwLT5mMTYpICsgaSoyLCAmKG51bTEyOFswXSksIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Ci0JCW1lbWNweSgmKHN3cC0+ZjE3KSArIGkqMiwgJihudW0xMjhbMV0pLCBzaXplb2YodW5zaWduZWQgbG9uZykpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotbG9uZyBjb21wYXRfYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgY29tcGF0X2xvbmdfdCByZXF1ZXN0LAotCWNvbXBhdF91bG9uZ190IGNhZGRyLCBjb21wYXRfdWxvbmdfdCBjZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBjYWRkcjsKLQl1bnNpZ25lZCBsb25nIGRhdGEgPSBjZGF0YTsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCWxvbmcgaSwgcmV0OwotCi0Jc3dpdGNoIChyZXF1ZXN0KSB7Ci0JICAgICAgY2FzZSBQVFJBQ0VfUEVFS1VTUjoJLyogcmVhZCB3b3JkIGF0IGFkZHIgaW4gVVNFUiBhcmVhICovCi0JCXJldCA9IC1FSU87Ci0JCWlmICgoYWRkciAmIDMpIHx8IGFkZHIgPiAxNypzaXplb2YoaW50KSkKLQkJCWJyZWFrOwotCi0JCXRtcCA9IGdldHJlZyhjaGlsZCwgYWRkcik7Ci0JCWlmICghcHV0X3VzZXIodG1wLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSBjb21wYXRfcHRyKGRhdGEpKSkKLQkJCXJldCA9IDA7Ci0JCWJyZWFrOwotCi0JICAgICAgY2FzZSBQVFJBQ0VfUE9LRVVTUjoJLyogd3JpdGUgd29yZCBhdCBhZGRyIGluIFVTRVIgYXJlYSAqLwotCQlyZXQgPSAtRUlPOwotCQlpZiAoKGFkZHIgJiAzKSB8fCBhZGRyID4gMTcqc2l6ZW9mKGludCkpCi0JCQlicmVhazsKLQotCQlwdXRyZWcoY2hpbGQsIGFkZHIsIGRhdGEpOwotCQlyZXQgPSAwOwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgSUEzMl9QVFJBQ0VfR0VUUkVHUzoKLQkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBjb21wYXRfcHRyKGRhdGEpLCAxNypzaXplb2YoaW50KSkpIHsKLQkJCXJldCA9IC1FSU87Ci0JCQlicmVhazsKLQkJfQotCQlmb3IgKGkgPSAwOyBpIDwgKGludCkgKDE3KnNpemVvZihpbnQpKTsgaSArPSBzaXplb2YoaW50KSApIHsKLQkJCXB1dF91c2VyKGdldHJlZyhjaGlsZCwgaSksICh1bnNpZ25lZCBpbnQgX191c2VyICopIGNvbXBhdF9wdHIoZGF0YSkpOwotCQkJZGF0YSArPSBzaXplb2YoaW50KTsKLQkJfQotCQlyZXQgPSAwOwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgSUEzMl9QVFJBQ0VfU0VUUkVHUzoKLQkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGNvbXBhdF9wdHIoZGF0YSksIDE3KnNpemVvZihpbnQpKSkgewotCQkJcmV0ID0gLUVJTzsKLQkJCWJyZWFrOwotCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCAoaW50KSAoMTcqc2l6ZW9mKGludCkpOyBpICs9IHNpemVvZihpbnQpICkgewotCQkJZ2V0X3VzZXIodG1wLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSBjb21wYXRfcHRyKGRhdGEpKTsKLQkJCXB1dHJlZyhjaGlsZCwgaSwgdG1wKTsKLQkJCWRhdGEgKz0gc2l6ZW9mKGludCk7Ci0JCX0KLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIElBMzJfUFRSQUNFX0dFVEZQUkVHUzoKLQkJcmV0ID0gc2F2ZV9pYTMyX2Zwc3RhdGUoY2hpbGQsIChzdHJ1Y3QgaWEzMl91c2VyX2kzODdfc3RydWN0IF9fdXNlciAqKQotCQkJCQljb21wYXRfcHRyKGRhdGEpKTsKLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIElBMzJfUFRSQUNFX0dFVEZQWFJFR1M6Ci0JCXJldCA9IHNhdmVfaWEzMl9mcHhzdGF0ZShjaGlsZCwgKHN0cnVjdCBpYTMyX3VzZXJfZnhzcl9zdHJ1Y3QgX191c2VyICopCi0JCQkJCSBjb21wYXRfcHRyKGRhdGEpKTsKLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIElBMzJfUFRSQUNFX1NFVEZQUkVHUzoKLQkJcmV0ID0gcmVzdG9yZV9pYTMyX2Zwc3RhdGUoY2hpbGQsIChzdHJ1Y3QgaWEzMl91c2VyX2kzODdfc3RydWN0IF9fdXNlciAqKQotCQkJCQkgICBjb21wYXRfcHRyKGRhdGEpKTsKLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIElBMzJfUFRSQUNFX1NFVEZQWFJFR1M6Ci0JCXJldCA9IHJlc3RvcmVfaWEzMl9mcHhzdGF0ZShjaGlsZCwgKHN0cnVjdCBpYTMyX3VzZXJfZnhzcl9zdHJ1Y3QgX191c2VyICopCi0JCQkJCSAgICBjb21wYXRfcHRyKGRhdGEpKTsKLQkJYnJlYWs7Ci0KLQkgICAgICBkZWZhdWx0OgotCQlyZXR1cm4gY29tcGF0X3B0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBjYWRkciwgY2RhdGEpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50CXNzX3NwOwotCXVuc2lnbmVkIGludAlzc19mbGFnczsKLQl1bnNpZ25lZCBpbnQJc3Nfc2l6ZTsKLX0gaWEzMl9zdGFja190OwotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX3NpZ2FsdHN0YWNrIChpYTMyX3N0YWNrX3QgX191c2VyICp1c3MzMiwgaWEzMl9zdGFja190IF9fdXNlciAqdW9zczMyLAotCQkgICBsb25nIGFyZzIsIGxvbmcgYXJnMywgbG9uZyBhcmc0LCBsb25nIGFyZzUsIGxvbmcgYXJnNiwKLQkJICAgbG9uZyBhcmc3LCBzdHJ1Y3QgcHRfcmVncyBwdCkKLXsKLQlzdGFja190IHVzcywgdW9zczsKLQlpYTMyX3N0YWNrX3QgYnVmMzI7Ci0JaW50IHJldDsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0KLQlpZiAodXNzMzIpIHsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYzMiwgdXNzMzIsIHNpemVvZihpYTMyX3N0YWNrX3QpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQl1c3Muc3Nfc3AgPSAodm9pZCBfX3VzZXIgKikgKGxvbmcpIGJ1ZjMyLnNzX3NwOwotCQl1c3Muc3NfZmxhZ3MgPSBidWYzMi5zc19mbGFnczsKLQkJLyogTUlOU0lHU1RLU1ogaXMgZGlmZmVyZW50IGZvciBpYTMyIHZzIGlhNjQuIFdlIGxpZSBoZXJlIHRvIHBhc3MgdGhlCi0JICAgICAgICAgICBjaGVjayBhbmQgc2V0IGl0IHRvIHRoZSB1c2VyIHJlcXVlc3RlZCB2YWx1ZSBsYXRlciAqLwotCQlpZiAoKGJ1ZjMyLnNzX2ZsYWdzICE9IFNTX0RJU0FCTEUpICYmIChidWYzMi5zc19zaXplIDwgTUlOU0lHU1RLU1pfSUEzMikpIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dDsKLQkJfQotCQl1c3Muc3Nfc2l6ZSA9IE1JTlNJR1NUS1NaOwotCX0KLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlyZXQgPSBkb19zaWdhbHRzdGFjayh1c3MzMiA/IChzdGFja190IF9fdXNlciAqKSAmdXNzIDogTlVMTCwKLQkJCSAgICAgKHN0YWNrX3QgX191c2VyICopICZ1b3NzLCBwdC5yMTIpOwotIAljdXJyZW50LT5zYXNfc3Nfc2l6ZSA9IGJ1ZjMyLnNzX3NpemU7Ci0Jc2V0X2ZzKG9sZF9mcyk7Ci1vdXQ6Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybihyZXQpOwotCWlmICh1b3NzMzIpIHsKLQkJYnVmMzIuc3Nfc3AgPSAobG9uZyBfX3VzZXIpIHVvc3Muc3Nfc3A7Ci0JCWJ1ZjMyLnNzX2ZsYWdzID0gdW9zcy5zc19mbGFnczsKLQkJYnVmMzIuc3Nfc2l6ZSA9IHVvc3Muc3Nfc2l6ZTsKLQkJaWYgKGNvcHlfdG9fdXNlcih1b3NzMzIsICZidWYzMiwgc2l6ZW9mKGlhMzJfc3RhY2tfdCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgaW50Ci1zeXMzMl9tc3luYyAodW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgZmxhZ3MpCi17Ci0JdW5zaWduZWQgaW50IGFkZHI7Ci0KLQlpZiAoT0ZGU0VUNEsoc3RhcnQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlhZGRyID0gUEFHRV9TVEFSVChzdGFydCk7Ci0JcmV0dXJuIHN5c19tc3luYyhhZGRyLCBsZW4gKyAoc3RhcnQgLSBhZGRyKSwgZmxhZ3MpOwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX25ld3VuYW1lIChzdHJ1Y3QgbmV3X3V0c25hbWUgX191c2VyICpuYW1lKQotewotCWludCByZXQgPSBzeXNfbmV3dW5hbWUobmFtZSk7Ci0KLQlpZiAoIXJldCkKLQkJaWYgKGNvcHlfdG9fdXNlcihuYW1lLT5tYWNoaW5lLCAiaTY4NlwwXDBcMCIsIDgpKQotCQkJcmV0ID0gLUVGQVVMVDsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX2dldHJlc3VpZDE2ICh1MTYgX191c2VyICpydWlkLCB1MTYgX191c2VyICpldWlkLCB1MTYgX191c2VyICpzdWlkKQotewotCXVpZF90IGEsIGIsIGM7Ci0JaW50IHJldDsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0KLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlyZXQgPSBzeXNfZ2V0cmVzdWlkKCh1aWRfdCBfX3VzZXIgKikgJmEsICh1aWRfdCBfX3VzZXIgKikgJmIsICh1aWRfdCBfX3VzZXIgKikgJmMpOwotCXNldF9mcyhvbGRfZnMpOwotCi0JaWYgKHB1dF91c2VyKGEsIHJ1aWQpIHx8IHB1dF91c2VyKGIsIGV1aWQpIHx8IHB1dF91c2VyKGMsIHN1aWQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX2dldHJlc2dpZDE2ICh1MTYgX191c2VyICpyZ2lkLCB1MTYgX191c2VyICplZ2lkLCB1MTYgX191c2VyICpzZ2lkKQotewotCWdpZF90IGEsIGIsIGM7Ci0JaW50IHJldDsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0KLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlyZXQgPSBzeXNfZ2V0cmVzZ2lkKChnaWRfdCBfX3VzZXIgKikgJmEsIChnaWRfdCBfX3VzZXIgKikgJmIsIChnaWRfdCBfX3VzZXIgKikgJmMpOwotCXNldF9mcyhvbGRfZnMpOwotCi0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBwdXRfdXNlcihhLCByZ2lkKSB8IHB1dF91c2VyKGIsIGVnaWQpIHwgcHV0X3VzZXIoYywgc2dpZCk7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfbHNlZWsgKHVuc2lnbmVkIGludCBmZCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHdoZW5jZSkKLXsKLQkvKiBTaWduLWV4dGVuc2lvbiBvZiAib2Zmc2V0IiBpcyBpbXBvcnRhbnQgaGVyZS4uLiAqLwotCXJldHVybiBzeXNfbHNlZWsoZmQsIG9mZnNldCwgd2hlbmNlKTsKLX0KLQotc3RhdGljIGludAotZ3JvdXBzMTZfdG9fdXNlcihzaG9ydCBfX3VzZXIgKmdyb3VwbGlzdCwgc3RydWN0IGdyb3VwX2luZm8gKmdyb3VwX2luZm8pCi17Ci0JaW50IGk7Ci0Jc2hvcnQgZ3JvdXA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZ3JvdXBfaW5mby0+bmdyb3VwczsgaSsrKSB7Ci0JCWdyb3VwID0gKHNob3J0KUdST1VQX0FUKGdyb3VwX2luZm8sIGkpOwotCQlpZiAocHV0X3VzZXIoZ3JvdXAsIGdyb3VwbGlzdCtpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1ncm91cHMxNl9mcm9tX3VzZXIoc3RydWN0IGdyb3VwX2luZm8gKmdyb3VwX2luZm8sIHNob3J0IF9fdXNlciAqZ3JvdXBsaXN0KQotewotCWludCBpOwotCXNob3J0IGdyb3VwOwotCi0JZm9yIChpID0gMDsgaSA8IGdyb3VwX2luZm8tPm5ncm91cHM7IGkrKykgewotCQlpZiAoZ2V0X3VzZXIoZ3JvdXAsIGdyb3VwbGlzdCtpKSkKLQkJCXJldHVybiAgLUVGQVVMVDsKLQkJR1JPVVBfQVQoZ3JvdXBfaW5mbywgaSkgPSAoZ2lkX3QpZ3JvdXA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfZ2V0Z3JvdXBzMTYgKGludCBnaWRzZXRzaXplLCBzaG9ydCBfX3VzZXIgKmdyb3VwbGlzdCkKLXsKLQljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCWludCBpOwotCi0JaWYgKGdpZHNldHNpemUgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWkgPSBjcmVkLT5ncm91cF9pbmZvLT5uZ3JvdXBzOwotCWlmIChnaWRzZXRzaXplKSB7Ci0JCWlmIChpID4gZ2lkc2V0c2l6ZSkgewotCQkJaSA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAoZ3JvdXBzMTZfdG9fdXNlcihncm91cGxpc3QsIGNyZWQtPmdyb3VwX2luZm8pKSB7Ci0JCQlpID0gLUVGQVVMVDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotb3V0OgotCXJldHVybiBpOwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX3NldGdyb3VwczE2IChpbnQgZ2lkc2V0c2l6ZSwgc2hvcnQgX191c2VyICpncm91cGxpc3QpCi17Ci0Jc3RydWN0IGdyb3VwX2luZm8gKmdyb3VwX2luZm87Ci0JaW50IHJldHZhbDsKLQotCWlmICghY2FwYWJsZShDQVBfU0VUR0lEKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQlpZiAoKHVuc2lnbmVkKWdpZHNldHNpemUgPiBOR1JPVVBTX01BWCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlncm91cF9pbmZvID0gZ3JvdXBzX2FsbG9jKGdpZHNldHNpemUpOwotCWlmICghZ3JvdXBfaW5mbykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dmFsID0gZ3JvdXBzMTZfZnJvbV91c2VyKGdyb3VwX2luZm8sIGdyb3VwbGlzdCk7Ci0JaWYgKHJldHZhbCkgewotCQlwdXRfZ3JvdXBfaW5mbyhncm91cF9pbmZvKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlyZXR2YWwgPSBzZXRfY3VycmVudF9ncm91cHMoZ3JvdXBfaW5mbyk7Ci0JcHV0X2dyb3VwX2luZm8oZ3JvdXBfaW5mbyk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX3RydW5jYXRlNjQgKHVuc2lnbmVkIGludCBwYXRoLCB1bnNpZ25lZCBpbnQgbGVuX2xvLCB1bnNpZ25lZCBpbnQgbGVuX2hpKQotewotCXJldHVybiBzeXNfdHJ1bmNhdGUoY29tcGF0X3B0cihwYXRoKSwgKCh1bnNpZ25lZCBsb25nKSBsZW5faGkgPDwgMzIpIHwgbGVuX2xvKTsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9mdHJ1bmNhdGU2NCAoaW50IGZkLCB1bnNpZ25lZCBpbnQgbGVuX2xvLCB1bnNpZ25lZCBpbnQgbGVuX2hpKQotewotCXJldHVybiBzeXNfZnRydW5jYXRlKGZkLCAoKHVuc2lnbmVkIGxvbmcpIGxlbl9oaSA8PCAzMikgfCBsZW5fbG8pOwotfQotCi1zdGF0aWMgaW50Ci1wdXRzdGF0NjQgKHN0cnVjdCBzdGF0NjQgX191c2VyICp1YnVmLCBzdHJ1Y3Qga3N0YXQgKmtidWYpCi17Ci0JaW50IGVycjsKLQl1NjQgaGRldjsKLQotCWlmIChjbGVhcl91c2VyKHVidWYsIHNpemVvZigqdWJ1ZikpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWhkZXYgPSBodWdlX2VuY29kZV9kZXYoa2J1Zi0+ZGV2KTsKLQllcnIgID0gX19wdXRfdXNlcihoZGV2LCAodTMyIF9fdXNlciopJnVidWYtPnN0X2Rldik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoaGRldiA+PiAzMiwgKCh1MzIgX191c2VyKikmdWJ1Zi0+c3RfZGV2KSArIDEpOwotCWVyciB8PSBfX3B1dF91c2VyKGtidWYtPmlubywgJnVidWYtPl9fc3RfaW5vKTsKLQllcnIgfD0gX19wdXRfdXNlcihrYnVmLT5pbm8sICZ1YnVmLT5zdF9pbm9fbG8pOwotCWVyciB8PSBfX3B1dF91c2VyKGtidWYtPmlubyA+PiAzMiwgJnVidWYtPnN0X2lub19oaSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoa2J1Zi0+bW9kZSwgJnVidWYtPnN0X21vZGUpOwotCWVyciB8PSBfX3B1dF91c2VyKGtidWYtPm5saW5rLCAmdWJ1Zi0+c3RfbmxpbmspOwotCWVyciB8PSBfX3B1dF91c2VyKGtidWYtPnVpZCwgJnVidWYtPnN0X3VpZCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoa2J1Zi0+Z2lkLCAmdWJ1Zi0+c3RfZ2lkKTsKLQloZGV2ID0gaHVnZV9lbmNvZGVfZGV2KGtidWYtPnJkZXYpOwotCWVyciAgPSBfX3B1dF91c2VyKGhkZXYsICh1MzIgX191c2VyKikmdWJ1Zi0+c3RfcmRldik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoaGRldiA+PiAzMiwgKCh1MzIgX191c2VyKikmdWJ1Zi0+c3RfcmRldikgKyAxKTsKLQllcnIgfD0gX19wdXRfdXNlcihrYnVmLT5zaXplLCAmdWJ1Zi0+c3Rfc2l6ZV9sbyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoKGtidWYtPnNpemUgPj4gMzIpLCAmdWJ1Zi0+c3Rfc2l6ZV9oaSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoa2J1Zi0+YXRpbWUudHZfc2VjLCAmdWJ1Zi0+c3RfYXRpbWUpOwotCWVyciB8PSBfX3B1dF91c2VyKGtidWYtPmF0aW1lLnR2X25zZWMsICZ1YnVmLT5zdF9hdGltZV9uc2VjKTsKLQllcnIgfD0gX19wdXRfdXNlcihrYnVmLT5tdGltZS50dl9zZWMsICZ1YnVmLT5zdF9tdGltZSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoa2J1Zi0+bXRpbWUudHZfbnNlYywgJnVidWYtPnN0X210aW1lX25zZWMpOwotCWVyciB8PSBfX3B1dF91c2VyKGtidWYtPmN0aW1lLnR2X3NlYywgJnVidWYtPnN0X2N0aW1lKTsKLQllcnIgfD0gX19wdXRfdXNlcihrYnVmLT5jdGltZS50dl9uc2VjLCAmdWJ1Zi0+c3RfY3RpbWVfbnNlYyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoa2J1Zi0+Ymxrc2l6ZSwgJnVidWYtPnN0X2Jsa3NpemUpOwotCWVyciB8PSBfX3B1dF91c2VyKGtidWYtPmJsb2NrcywgJnVidWYtPnN0X2Jsb2Nrcyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9zdGF0NjQgKGNoYXIgX191c2VyICpmaWxlbmFtZSwgc3RydWN0IHN0YXQ2NCBfX3VzZXIgKnN0YXRidWYpCi17Ci0Jc3RydWN0IGtzdGF0IHM7Ci0JbG9uZyByZXQgPSB2ZnNfc3RhdChmaWxlbmFtZSwgJnMpOwotCWlmICghcmV0KQotCQlyZXQgPSBwdXRzdGF0NjQoc3RhdGJ1ZiwgJnMpOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfbHN0YXQ2NCAoY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBzdHJ1Y3Qgc3RhdDY0IF9fdXNlciAqc3RhdGJ1ZikKLXsKLQlzdHJ1Y3Qga3N0YXQgczsKLQlsb25nIHJldCA9IHZmc19sc3RhdChmaWxlbmFtZSwgJnMpOwotCWlmICghcmV0KQotCQlyZXQgPSBwdXRzdGF0NjQoc3RhdGJ1ZiwgJnMpOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfZnN0YXQ2NCAodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3Qgc3RhdDY0IF9fdXNlciAqc3RhdGJ1ZikKLXsKLQlzdHJ1Y3Qga3N0YXQgczsKLQlsb25nIHJldCA9IHZmc19mc3RhdChmZCwgJnMpOwotCWlmICghcmV0KQotCQlyZXQgPSBwdXRzdGF0NjQoc3RhdGJ1ZiwgJnMpOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfc2NoZWRfcnJfZ2V0X2ludGVydmFsIChwaWRfdCBwaWQsIHN0cnVjdCBjb21wYXRfdGltZXNwZWMgX191c2VyICppbnRlcnZhbCkKLXsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0Jc3RydWN0IHRpbWVzcGVjIHQ7Ci0JbG9uZyByZXQ7Ci0KLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlyZXQgPSBzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsKHBpZCwgKHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKikgJnQpOwotCXNldF9mcyhvbGRfZnMpOwotCWlmIChwdXRfY29tcGF0X3RpbWVzcGVjKCZ0LCBpbnRlcnZhbCkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfcHJlYWQgKHVuc2lnbmVkIGludCBmZCwgdm9pZCBfX3VzZXIgKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50LCB1MzIgcG9zX2xvLCB1MzIgcG9zX2hpKQotewotCXJldHVybiBzeXNfcHJlYWQ2NChmZCwgYnVmLCBjb3VudCwgKCh1bnNpZ25lZCBsb25nKSBwb3NfaGkgPDwgMzIpIHwgcG9zX2xvKTsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9wd3JpdGUgKHVuc2lnbmVkIGludCBmZCwgdm9pZCBfX3VzZXIgKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50LCB1MzIgcG9zX2xvLCB1MzIgcG9zX2hpKQotewotCXJldHVybiBzeXNfcHdyaXRlNjQoZmQsIGJ1ZiwgY291bnQsICgodW5zaWduZWQgbG9uZykgcG9zX2hpIDw8IDMyKSB8IHBvc19sbyk7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfc2VuZGZpbGUgKGludCBvdXRfZmQsIGludCBpbl9mZCwgaW50IF9fdXNlciAqb2Zmc2V0LCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0JbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCWxvbmcgcmV0OwotCW9mZl90IG9mOwotCi0JaWYgKG9mZnNldCAmJiBnZXRfdXNlcihvZiwgb2Zmc2V0KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlyZXQgPSBzeXNfc2VuZGZpbGUob3V0X2ZkLCBpbl9mZCwgb2Zmc2V0ID8gKG9mZl90IF9fdXNlciAqKSAmb2YgOiBOVUxMLCBjb3VudCk7Ci0Jc2V0X2ZzKG9sZF9mcyk7Ci0KLQlpZiAob2Zmc2V0ICYmIHB1dF91c2VyKG9mLCBvZmZzZXQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfcGVyc29uYWxpdHkgKHVuc2lnbmVkIGludCBwZXJzb25hbGl0eSkKLXsKLQlsb25nIHJldDsKLQotCWlmIChjdXJyZW50LT5wZXJzb25hbGl0eSA9PSBQRVJfTElOVVgzMiAmJiBwZXJzb25hbGl0eSA9PSBQRVJfTElOVVgpCi0JCXBlcnNvbmFsaXR5ID0gUEVSX0xJTlVYMzI7Ci0JcmV0ID0gc3lzX3BlcnNvbmFsaXR5KHBlcnNvbmFsaXR5KTsKLQlpZiAocmV0ID09IFBFUl9MSU5VWDMyKQotCQlyZXQgPSBQRVJfTElOVVg7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nCi1zeXMzMl9icmsgKHVuc2lnbmVkIGludCBicmspCi17Ci0JdW5zaWduZWQgbG9uZyByZXQsIG9icms7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKLQotCW9icmsgPSBtbS0+YnJrOwotCXJldCA9IHN5c19icmsoYnJrKTsKLQlpZiAocmV0IDwgb2JyaykKLQkJY2xlYXJfdXNlcihjb21wYXRfcHRyKHJldCksIFBBR0VfQUxJR04ocmV0KSAtIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogU3RydWN0dXJlIGZvciBpYTMyIGVtdWxhdGlvbiBvbiBpYTY0ICovCi1zdHJ1Y3QgZXBvbGxfZXZlbnQzMgotewotCXUzMiBldmVudHM7Ci0JdTMyIGRhdGFbMl07Ci19OwotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX2Vwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsIHN0cnVjdCBlcG9sbF9ldmVudDMyIF9fdXNlciAqZXZlbnQpCi17Ci0JbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCXN0cnVjdCBlcG9sbF9ldmVudCBldmVudDY0OwotCWludCBlcnJvcjsKLQl1MzIgZGF0YV9oYWxmd29yZDsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBldmVudCwgc2l6ZW9mKHN0cnVjdCBlcG9sbF9ldmVudDMyKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JX19nZXRfdXNlcihldmVudDY0LmV2ZW50cywgJmV2ZW50LT5ldmVudHMpOwotCV9fZ2V0X3VzZXIoZGF0YV9oYWxmd29yZCwgJmV2ZW50LT5kYXRhWzBdKTsKLQlldmVudDY0LmRhdGEgPSBkYXRhX2hhbGZ3b3JkOwotCV9fZ2V0X3VzZXIoZGF0YV9oYWxmd29yZCwgJmV2ZW50LT5kYXRhWzFdKTsKLSAJZXZlbnQ2NC5kYXRhIHw9ICh1NjQpZGF0YV9oYWxmd29yZCA8PCAzMjsKLQotCXNldF9mcyhLRVJORUxfRFMpOwotCWVycm9yID0gc3lzX2Vwb2xsX2N0bChlcGZkLCBvcCwgZmQsIChzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICopICZldmVudDY0KTsKLQlzZXRfZnMob2xkX2ZzKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9lcG9sbF93YWl0KGludCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQzMiBfX3VzZXIgKiBldmVudHMsIGludCBtYXhldmVudHMsCi0JCSBpbnQgdGltZW91dCkKLXsKLQlzdHJ1Y3QgZXBvbGxfZXZlbnQgKmV2ZW50czY0ID0gTlVMTDsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0JaW50IG51bWV2ZW50cywgc2l6ZTsKLQlpbnQgZXZ0X2lkeDsKLQlpbnQgZG9fZnJlZV9wYWdlcyA9IDA7Ci0KLQlpZiAobWF4ZXZlbnRzIDw9IDApIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogVmVyaWZ5IHRoYXQgdGhlIGFyZWEgcGFzc2VkIGJ5IHRoZSB1c2VyIGlzIHdyaXRlYWJsZSAqLwotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZXZlbnRzLCBtYXhldmVudHMgKiBzaXplb2Yoc3RydWN0IGVwb2xsX2V2ZW50MzIpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKgotIAkgKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGludGVybWVkaWF0ZSBjb3B5LiAgSWYgdGhlIHNwYWNlIG5lZWRlZAotCSAqIGlzIGxhcmdlIGVub3VnaCB0byBjYXVzZSBrbWFsbG9jIHRvIGZhaWwsIHRoZW4gdHJ5IGFnYWluIHdpdGgKLQkgKiBfX2dldF9mcmVlX3BhZ2VzLgotCSAqLwotCXNpemUgPSBtYXhldmVudHMgKiBzaXplb2Yoc3RydWN0IGVwb2xsX2V2ZW50KTsKLQlldmVudHM2NCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGV2ZW50czY0ID09IE5VTEwpIHsKLQkJZXZlbnRzNjQgPSAoc3RydWN0IGVwb2xsX2V2ZW50ICopCi0JCQkJX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBnZXRfb3JkZXIoc2l6ZSkpOwotCQlpZiAoZXZlbnRzNjQgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlkb19mcmVlX3BhZ2VzID0gMTsKLQl9Ci0KLQkvKiBEbyB0aGUgc3lzdGVtIGNhbGwgKi8KLQlzZXRfZnMoS0VSTkVMX0RTKTsgLyogY29weV90by9mcm9tX3VzZXIgc2hvdWxkIHdvcmsgb24ga2VybmVsIG1lbSovCi0JbnVtZXZlbnRzID0gc3lzX2Vwb2xsX3dhaXQoZXBmZCwgKHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKikgZXZlbnRzNjQsCi0JCQkJICAgbWF4ZXZlbnRzLCB0aW1lb3V0KTsKLQlzZXRfZnMob2xkX2ZzKTsKLQotCS8qIERvbid0IG1vZGlmeSB1c2Vyc3BhY2UgbWVtb3J5IGlmIHdlJ3JlIHJldHVybmluZyBhbiBlcnJvciAqLwotCWlmIChudW1ldmVudHMgPiAwKSB7Ci0JCS8qIFRyYW5zbGF0ZSB0aGUgNjQtYml0IHN0cnVjdHVyZXMgYmFjayBpbnRvIHRoZSAzMi1iaXQKLQkJICAgc3RydWN0dXJlcyAqLwotCQlmb3IgKGV2dF9pZHggPSAwOyBldnRfaWR4IDwgbnVtZXZlbnRzOyBldnRfaWR4KyspIHsKLQkJCV9fcHV0X3VzZXIoZXZlbnRzNjRbZXZ0X2lkeF0uZXZlbnRzLAotCQkJCSAgICZldmVudHNbZXZ0X2lkeF0uZXZlbnRzKTsKLQkJCV9fcHV0X3VzZXIoKHUzMilldmVudHM2NFtldnRfaWR4XS5kYXRhLAotCQkJCSAgICZldmVudHNbZXZ0X2lkeF0uZGF0YVswXSk7Ci0JCQlfX3B1dF91c2VyKCh1MzIpKGV2ZW50czY0W2V2dF9pZHhdLmRhdGEgPj4gMzIpLAotCQkJCSAgICZldmVudHNbZXZ0X2lkeF0uZGF0YVsxXSk7Ci0JCX0KLQl9Ci0KLQlpZiAoZG9fZnJlZV9wYWdlcykKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgZXZlbnRzNjQsIGdldF9vcmRlcihzaXplKSk7Ci0JZWxzZQotCQlrZnJlZShldmVudHM2NCk7Ci0JcmV0dXJuIG51bWV2ZW50czsKLX0KLQotLyoKLSAqIEdldCBhIHlldCB1bnVzZWQgVExTIGRlc2NyaXB0b3IgaW5kZXguCi0gKi8KLXN0YXRpYyBpbnQKLWdldF9mcmVlX2lkeCAodm9pZCkKLXsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZjdXJyZW50LT50aHJlYWQ7Ci0JaW50IGlkeDsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgR0RUX0VOVFJZX1RMU19FTlRSSUVTOyBpZHgrKykKLQkJaWYgKGRlc2NfZW1wdHkodC0+dGxzX2FycmF5ICsgaWR4KSkKLQkJCXJldHVybiBpZHggKyBHRFRfRU5UUllfVExTX01JTjsKLQlyZXR1cm4gLUVTUkNIOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfdGxzX2Rlc2Moc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgaWR4LAotCQljb25zdCBzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MgKmluZm8sIGludCBuKQotewotCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0ID0gJnAtPnRocmVhZDsKLQlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRlc2MgPSAmdC0+dGxzX2FycmF5W2lkeCAtIEdEVF9FTlRSWV9UTFNfTUlOXTsKLQlpbnQgY3B1OwotCi0JLyoKLQkgKiBXZSBtdXN0IG5vdCBnZXQgcHJlZW1wdGVkIHdoaWxlIG1vZGlmeWluZyB0aGUgVExTLgotCSAqLwotCWNwdSA9IGdldF9jcHUoKTsKLQotCXdoaWxlIChuLS0gPiAwKSB7Ci0JCWlmIChMRFRfZW1wdHkoaW5mbykpIHsKLQkJCWRlc2MtPmEgPSAwOwotCQkJZGVzYy0+YiA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlkZXNjLT5hID0gTERUX2VudHJ5X2EoaW5mbyk7Ci0JCQlkZXNjLT5iID0gTERUX2VudHJ5X2IoaW5mbyk7Ci0JCX0KLQotCQkrK2luZm87Ci0JCSsrZGVzYzsKLQl9Ci0KLQlpZiAodCA9PSAmY3VycmVudC0+dGhyZWFkKQotCQlsb2FkX1RMUyh0LCBjcHUpOwotCi0JcHV0X2NwdSgpOwotfQotCi0vKgotICogU2V0IGEgZ2l2ZW4gVExTIGRlc2NyaXB0b3I6Ci0gKi8KLWFzbWxpbmthZ2UgaW50Ci1zeXMzMl9zZXRfdGhyZWFkX2FyZWEgKHN0cnVjdCBpYTMyX3VzZXJfZGVzYyBfX3VzZXIgKnVfaW5mbykKLXsKLQlzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MgaW5mbzsKLQlpbnQgaWR4OwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZpbmZvLCB1X2luZm8sIHNpemVvZihpbmZvKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWlkeCA9IGluZm8uZW50cnlfbnVtYmVyOwotCi0JLyoKLQkgKiBpbmRleCAtMSBtZWFucyB0aGUga2VybmVsIHNob3VsZCB0cnkgdG8gZmluZCBhbmQgYWxsb2NhdGUgYW4gZW1wdHkgZGVzY3JpcHRvcjoKLQkgKi8KLQlpZiAoaWR4ID09IC0xKSB7Ci0JCWlkeCA9IGdldF9mcmVlX2lkeCgpOwotCQlpZiAoaWR4IDwgMCkKLQkJCXJldHVybiBpZHg7Ci0JCWlmIChwdXRfdXNlcihpZHgsICZ1X2luZm8tPmVudHJ5X251bWJlcikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlpZiAoaWR4IDwgR0RUX0VOVFJZX1RMU19NSU4gfHwgaWR4ID4gR0RUX0VOVFJZX1RMU19NQVgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc2V0X3Rsc19kZXNjKGN1cnJlbnQsIGlkeCwgJmluZm8sIDEpOwotCXJldHVybiAwOwotfQotCi0vKgotICogR2V0IHRoZSBjdXJyZW50IFRocmVhZC1Mb2NhbCBTdG9yYWdlIGFyZWE6Ci0gKi8KLQotI2RlZmluZSBHRVRfQkFTRShkZXNjKSAoCQkJXAotCSgoKGRlc2MpLT5hID4+IDE2KSAmIDB4MDAwMGZmZmYpIHwJXAotCSgoKGRlc2MpLT5iIDw8IDE2KSAmIDB4MDBmZjAwMDApIHwJXAotCSggKGRlc2MpLT5iICAgICAgICAmIDB4ZmYwMDAwMDApICAgKQotCi0jZGVmaW5lIEdFVF9MSU1JVChkZXNjKSAoCQkJXAotCSgoZGVzYyktPmEgJiAweDBmZmZmKSB8CQkJXAotCSAoKGRlc2MpLT5iICYgMHhmMDAwMCkgKQotCi0jZGVmaW5lIEdFVF8zMkJJVChkZXNjKQkJKCgoZGVzYyktPmIgPj4gMjIpICYgMSkKLSNkZWZpbmUgR0VUX0NPTlRFTlRTKGRlc2MpCSgoKGRlc2MpLT5iID4+IDEwKSAmIDMpCi0jZGVmaW5lIEdFVF9XUklUQUJMRShkZXNjKQkoKChkZXNjKS0+YiA+PiAgOSkgJiAxKQotI2RlZmluZSBHRVRfTElNSVRfUEFHRVMoZGVzYykJKCgoZGVzYyktPmIgPj4gMjMpICYgMSkKLSNkZWZpbmUgR0VUX1BSRVNFTlQoZGVzYykJKCgoZGVzYyktPmIgPj4gMTUpICYgMSkKLSNkZWZpbmUgR0VUX1VTRUFCTEUoZGVzYykJKCgoZGVzYyktPmIgPj4gMjApICYgMSkKLQotc3RhdGljIHZvaWQgZmlsbF91c2VyX2Rlc2Moc3RydWN0IGlhMzJfdXNlcl9kZXNjICppbmZvLCBpbnQgaWR4LAotCQljb25zdCBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRlc2MpCi17Ci0JaW5mby0+ZW50cnlfbnVtYmVyID0gaWR4OwotCWluZm8tPmJhc2VfYWRkciA9IEdFVF9CQVNFKGRlc2MpOwotCWluZm8tPmxpbWl0ID0gR0VUX0xJTUlUKGRlc2MpOwotCWluZm8tPnNlZ18zMmJpdCA9IEdFVF8zMkJJVChkZXNjKTsKLQlpbmZvLT5jb250ZW50cyA9IEdFVF9DT05URU5UUyhkZXNjKTsKLQlpbmZvLT5yZWFkX2V4ZWNfb25seSA9ICFHRVRfV1JJVEFCTEUoZGVzYyk7Ci0JaW5mby0+bGltaXRfaW5fcGFnZXMgPSBHRVRfTElNSVRfUEFHRVMoZGVzYyk7Ci0JaW5mby0+c2VnX25vdF9wcmVzZW50ID0gIUdFVF9QUkVTRU5UKGRlc2MpOwotCWluZm8tPnVzZWFibGUgPSBHRVRfVVNFQUJMRShkZXNjKTsKLX0KLQotYXNtbGlua2FnZSBpbnQKLXN5czMyX2dldF90aHJlYWRfYXJlYSAoc3RydWN0IGlhMzJfdXNlcl9kZXNjIF9fdXNlciAqdV9pbmZvKQotewotCXN0cnVjdCBpYTMyX3VzZXJfZGVzYyBpbmZvOwotCXN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYzsKLQlpbnQgaWR4OwotCi0JaWYgKGdldF91c2VyKGlkeCwgJnVfaW5mby0+ZW50cnlfbnVtYmVyKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKGlkeCA8IEdEVF9FTlRSWV9UTFNfTUlOIHx8IGlkeCA+IEdEVF9FTlRSWV9UTFNfTUFYKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRlc2MgPSBjdXJyZW50LT50aHJlYWQudGxzX2FycmF5ICsgaWR4IC0gR0RUX0VOVFJZX1RMU19NSU47Ci0JZmlsbF91c2VyX2Rlc2MoJmluZm8sIGlkeCwgZGVzYyk7Ci0KLQlpZiAoY29weV90b191c2VyKHVfaW5mbywgJmluZm8sIHNpemVvZihpbmZvKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgcmVnc2V0X2dldCB7Ci0Jdm9pZCAqa2J1ZjsKLQl2b2lkIF9fdXNlciAqdWJ1ZjsKLX07Ci0KLXN0cnVjdCByZWdzZXRfc2V0IHsKLQljb25zdCB2b2lkICprYnVmOwotCWNvbnN0IHZvaWQgX191c2VyICp1YnVmOwotfTsKLQotc3RydWN0IHJlZ3NldF9nZXRzZXQgewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0OwotCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0OwotCXVuaW9uIHsKLQkJc3RydWN0IHJlZ3NldF9nZXQgZ2V0OwotCQlzdHJ1Y3QgcmVnc2V0X3NldCBzZXQ7Ci0JfSB1OwotCXVuc2lnbmVkIGludCBwb3M7Ci0JdW5zaWduZWQgaW50IGNvdW50OwotCWludCByZXQ7Ci19OwotCi1zdGF0aWMgdm9pZCBnZXRmcHJlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCByZWdubywgaW50ICp2YWwpCi17Ci0Jc3dpdGNoIChyZWdubyAvIHNpemVvZihpbnQpKSB7Ci0JY2FzZSAwOgotCQkqdmFsID0gdGFzay0+dGhyZWFkLmZjciAmIDB4ZmZmZjsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQkqdmFsID0gdGFzay0+dGhyZWFkLmZzciAmIDB4ZmZmZjsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkqdmFsID0gKHRhc2stPnRocmVhZC5mc3I+PjE2KSAmIDB4ZmZmZjsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQkqdmFsID0gdGFzay0+dGhyZWFkLmZpcjsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQkqdmFsID0gKHRhc2stPnRocmVhZC5maXI+PjMyKSAmIDB4ZmZmZjsKLQkJYnJlYWs7Ci0JY2FzZSA1OgotCQkqdmFsID0gdGFzay0+dGhyZWFkLmZkcjsKLQkJYnJlYWs7Ci0JY2FzZSA2OgotCQkqdmFsID0gKHRhc2stPnRocmVhZC5mZHIgPj4gMzIpICYgMHhmZmZmOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNldGZwcmVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHJlZ25vLCBpbnQgdmFsKQotewotCXN3aXRjaCAocmVnbm8gLyBzaXplb2YoaW50KSkgewotCWNhc2UgMDoKLQkJdGFzay0+dGhyZWFkLmZjciA9ICh0YXNrLT50aHJlYWQuZmNyICYgKH4weDFmM2YpKQotCQkJfCAodmFsICYgMHgxZjNmKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQl0YXNrLT50aHJlYWQuZnNyID0gKHRhc2stPnRocmVhZC5mc3IgJiAofjB4ZmZmZikpIHwgdmFsOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXRhc2stPnRocmVhZC5mc3IgPSAodGFzay0+dGhyZWFkLmZzciAmICh+MHhmZmZmMDAwMCkpCi0JCQl8ICh2YWwgPDwgMTYpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXRhc2stPnRocmVhZC5maXIgPSAodGFzay0+dGhyZWFkLmZpciAmICh+MHhmZmZmZmZmZikpIHwgdmFsOwotCQlicmVhazsKLQljYXNlIDU6Ci0JCXRhc2stPnRocmVhZC5mZHIgPSAodGFzay0+dGhyZWFkLmZkciAmICh+MHhmZmZmZmZmZikpIHwgdmFsOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGFjY2Vzc19mcHJlZ19pYTMyKGludCByZWdubywgdm9pZCAqcmVnLAotCQlzdHJ1Y3QgcHRfcmVncyAqcHQsIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3LAotCQlpbnQgdG9zLCBpbnQgd3JpdGUpCi17Ci0Jdm9pZCAqZjsKLQotCWlmICgocmVnbm8gKz0gdG9zKSA+PSA4KQotCQlyZWdubyAtPSA4OwotCWlmIChyZWdubyA8IDQpCi0JCWYgPSAmcHQtPmY4ICsgcmVnbm87Ci0JZWxzZSBpZiAocmVnbm8gPD0gNykKLQkJZiA9ICZzdy0+ZjEyICsgKHJlZ25vIC0gNCk7Ci0JZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmVnbm8gbXVzdCBiZSBsZXNzIHRoYW4gNyBcbiIpOwotCQkgcmV0dXJuOwotCX0KLQotCWlmICh3cml0ZSkKLQkJbWVtY3B5KGYsIHJlZywgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOwotCWVsc2UKLQkJbWVtY3B5KHJlZywgZiwgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOwotfQotCi1zdGF0aWMgdm9pZCBkb19mcHJlZ3NfZ2V0KHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqYXJnKQotewotCXN0cnVjdCByZWdzZXRfZ2V0c2V0ICpkc3QgPSBhcmc7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gZHN0LT50YXJnZXQ7Ci0Jc3RydWN0IHB0X3JlZ3MgKnB0OwotCWludCBzdGFydCwgZW5kLCB0b3M7Ci0JY2hhciBidWZbODBdOwotCi0JaWYgKGRzdC0+Y291bnQgPT0gMCB8fCB1bndfdW53aW5kX3RvX3VzZXIoaW5mbykgPCAwKQotCQlyZXR1cm47Ci0JaWYgKGRzdC0+cG9zIDwgNyAqIHNpemVvZihpbnQpKSB7Ci0JCWVuZCA9IG1pbigoZHN0LT5wb3MgKyBkc3QtPmNvdW50KSwKLQkJCSh1bnNpZ25lZCBpbnQpKDcgKiBzaXplb2YoaW50KSkpOwotCQlmb3IgKHN0YXJ0ID0gZHN0LT5wb3M7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBzaXplb2YoaW50KSkKLQkJCWdldGZwcmVnKHRhc2ssIHN0YXJ0LCAoaW50ICopKGJ1ZiArIHN0YXJ0KSk7Ci0JCWRzdC0+cmV0ID0gdXNlcl9yZWdzZXRfY29weW91dCgmZHN0LT5wb3MsICZkc3QtPmNvdW50LAotCQkJCSZkc3QtPnUuZ2V0LmtidWYsICZkc3QtPnUuZ2V0LnVidWYsIGJ1ZiwKLQkJCQkwLCA3ICogc2l6ZW9mKGludCkpOwotCQlpZiAoZHN0LT5yZXQgfHwgZHN0LT5jb3VudCA9PSAwKQotCQkJcmV0dXJuOwotCX0KLQlpZiAoZHN0LT5wb3MgPCBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9pMzg3X3N0cnVjdCkpIHsKLQkJcHQgPSB0YXNrX3B0X3JlZ3ModGFzayk7Ci0JCXRvcyA9ICh0YXNrLT50aHJlYWQuZnNyID4+IDExKSAmIDc7Ci0JCWVuZCA9IG1pbihkc3QtPnBvcyArIGRzdC0+Y291bnQsCi0JCQkodW5zaWduZWQgaW50KShzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9pMzg3X3N0cnVjdCkpKTsKLQkJc3RhcnQgPSAoZHN0LT5wb3MgLSA3ICogc2l6ZW9mKGludCkpIC8KLQkJCXNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpOwotCQllbmQgPSAoZW5kIC0gNyAqIHNpemVvZihpbnQpKSAvIHNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpOwotCQlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCi0JCQlhY2Nlc3NfZnByZWdfaWEzMihzdGFydCwKLQkJCQkoc3RydWN0IF9mcHJlZ19pYTMyICopYnVmICsgc3RhcnQsCi0JCQkJcHQsIGluZm8tPnN3LCB0b3MsIDApOwotCQlkc3QtPnJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXQoJmRzdC0+cG9zLCAmZHN0LT5jb3VudCwKLQkJCQkmZHN0LT51LmdldC5rYnVmLCAmZHN0LT51LmdldC51YnVmLAotCQkJCWJ1ZiwgNyAqIHNpemVvZihpbnQpLAotCQkJCXNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2kzODdfc3RydWN0KSk7Ci0JCWlmIChkc3QtPnJldCB8fCBkc3QtPmNvdW50ID09IDApCi0JCQlyZXR1cm47Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkb19mcHJlZ3Nfc2V0KHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqYXJnKQotewotCXN0cnVjdCByZWdzZXRfZ2V0c2V0ICpkc3QgPSBhcmc7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gZHN0LT50YXJnZXQ7Ci0Jc3RydWN0IHB0X3JlZ3MgKnB0OwotCWNoYXIgYnVmWzgwXTsKLQlpbnQgZW5kLCBzdGFydCwgdG9zOwotCi0JaWYgKGRzdC0+Y291bnQgPT0gMCB8fCB1bndfdW53aW5kX3RvX3VzZXIoaW5mbykgPCAwKQotCQlyZXR1cm47Ci0KLQlpZiAoZHN0LT5wb3MgPCA3ICogc2l6ZW9mKGludCkpIHsKLQkJc3RhcnQgPSBkc3QtPnBvczsKLQkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJmRzdC0+cG9zLCAmZHN0LT5jb3VudCwKLQkJCQkmZHN0LT51LnNldC5rYnVmLCAmZHN0LT51LnNldC51YnVmLCBidWYsCi0JCQkJMCwgNyAqIHNpemVvZihpbnQpKTsKLQkJaWYgKGRzdC0+cmV0KQotCQkJcmV0dXJuOwotCQlmb3IgKDsgc3RhcnQgPCBkc3QtPnBvczsgc3RhcnQgKz0gc2l6ZW9mKGludCkpCi0JCQlzZXRmcHJlZyh0YXNrLCBzdGFydCwgKigoaW50ICopKGJ1ZiArIHN0YXJ0KSkpOwotCQlpZiAoZHN0LT5jb3VudCA9PSAwKQotCQkJcmV0dXJuOwotCX0KLQlpZiAoZHN0LT5wb3MgPCBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9pMzg3X3N0cnVjdCkpIHsKLQkJc3RhcnQgPSAoZHN0LT5wb3MgLSA3ICogc2l6ZW9mKGludCkpIC8KLQkJCXNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpOwotCQlkc3QtPnJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmZHN0LT5wb3MsICZkc3QtPmNvdW50LAotCQkJCSZkc3QtPnUuc2V0LmtidWYsICZkc3QtPnUuc2V0LnVidWYsCi0JCQkJYnVmLCA3ICogc2l6ZW9mKGludCksCi0JCQkJc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfaTM4N19zdHJ1Y3QpKTsKLQkJaWYgKGRzdC0+cmV0KQotCQkJcmV0dXJuOwotCQlwdCA9IHRhc2tfcHRfcmVncyh0YXNrKTsKLQkJdG9zID0gKHRhc2stPnRocmVhZC5mc3IgPj4gMTEpICYgNzsKLQkJZW5kID0gKGRzdC0+cG9zIC0gNyAqIHNpemVvZihpbnQpKSAvIHNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpOwotCQlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCi0JCQlhY2Nlc3NfZnByZWdfaWEzMihzdGFydCwKLQkJCQkoc3RydWN0IF9mcHJlZ19pYTMyICopYnVmICsgc3RhcnQsCi0JCQkJcHQsIGluZm8tPnN3LCB0b3MsIDEpOwotCQlpZiAoZHN0LT5jb3VudCA9PSAwKQotCQkJcmV0dXJuOwotCX0KLX0KLQotI2RlZmluZSBPRkZTRVQobWVtYmVyKSAoKGludCkob2Zmc2V0b2Yoc3RydWN0IGlhMzJfdXNlcl9meHNyX3N0cnVjdCwgbWVtYmVyKSkpCi1zdGF0aWMgdm9pZCBnZXRmcHhyZWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc3RhcnQsIGludCBlbmQsIGNoYXIgKmJ1ZikKLXsKLQlpbnQgbWluX3ZhbDsKLQotCW1pbl92YWwgPSBtaW4oZW5kLCBPRkZTRVQoZm9wKSk7Ci0Jd2hpbGUgKHN0YXJ0IDwgbWluX3ZhbCkgewotCQlpZiAoc3RhcnQgPT0gT0ZGU0VUKGN3ZCkpCi0JCQkqKChzaG9ydCAqKWJ1ZikgPSB0YXNrLT50aHJlYWQuZmNyICYgMHhmZmZmOwotCQllbHNlIGlmIChzdGFydCA9PSBPRkZTRVQoc3dkKSkKLQkJCSooKHNob3J0ICopYnVmKSA9IHRhc2stPnRocmVhZC5mc3IgJiAweGZmZmY7Ci0JCWVsc2UgaWYgKHN0YXJ0ID09IE9GRlNFVCh0d2QpKQotCQkJKigoc2hvcnQgKilidWYpID0gKHRhc2stPnRocmVhZC5mc3I+PjE2KSAmIDB4ZmZmZjsKLQkJYnVmICs9IDI7Ci0JCXN0YXJ0ICs9IDI7Ci0JfQotCS8qIHNraXAgZm9wIGVsZW1lbnQgKi8KLQlpZiAoc3RhcnQgPT0gT0ZGU0VUKGZvcCkpIHsKLQkJc3RhcnQgKz0gMjsKLQkJYnVmICs9IDI7Ci0JfQotCXdoaWxlIChzdGFydCA8IGVuZCkgewotCQlpZiAoc3RhcnQgPT0gT0ZGU0VUKGZpcCkpCi0JCQkqKChpbnQgKilidWYpID0gdGFzay0+dGhyZWFkLmZpcjsKLQkJZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKGZjcykpCi0JCQkqKChpbnQgKilidWYpID0gKHRhc2stPnRocmVhZC5maXI+PjMyKSAmIDB4ZmZmZjsKLQkJZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKGZvbykpCi0JCQkqKChpbnQgKilidWYpID0gdGFzay0+dGhyZWFkLmZkcjsKLQkJZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKGZvcykpCi0JCQkqKChpbnQgKilidWYpID0gKHRhc2stPnRocmVhZC5mZHI+PjMyKSAmIDB4ZmZmZjsKLQkJZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKG14Y3NyKSkKLQkJCSooKGludCAqKWJ1ZikgPSAoKHRhc2stPnRocmVhZC5mY3I+PjMyKSAmIDB4ZmY4MCkKLQkJCQkJIHwgKCh0YXNrLT50aHJlYWQuZnNyPj4zMikgJiAweDNmKTsKLQkJYnVmICs9IDQ7Ci0JCXN0YXJ0ICs9IDQ7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBzZXRmcHhyZWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc3RhcnQsIGludCBlbmQsIGNoYXIgKmJ1ZikKLXsKLQlpbnQgbWluX3ZhbCwgbnVtMzI7Ci0Jc2hvcnQgbnVtOwotCXVuc2lnbmVkIGxvbmcgbnVtNjQ7Ci0KLQltaW5fdmFsID0gbWluKGVuZCwgT0ZGU0VUKGZvcCkpOwotCXdoaWxlIChzdGFydCA8IG1pbl92YWwpIHsKLQkJbnVtID0gKigoc2hvcnQgKilidWYpOwotCQlpZiAoc3RhcnQgPT0gT0ZGU0VUKGN3ZCkpIHsKLQkJCXRhc2stPnRocmVhZC5mY3IgPSAodGFzay0+dGhyZWFkLmZjciAmICh+MHgxZjNmKSkKLQkJCQkJCXwgKG51bSAmIDB4MWYzZik7Ci0JCX0gZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKHN3ZCkpIHsKLQkJCXRhc2stPnRocmVhZC5mc3IgPSAodGFzay0+dGhyZWFkLmZzciAmICh+MHhmZmZmKSkgfCBudW07Ci0JCX0gZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKHR3ZCkpIHsKLQkJCXRhc2stPnRocmVhZC5mc3IgPSAodGFzay0+dGhyZWFkLmZzciAmICh+MHhmZmZmMDAwMCkpCi0JCQkJfCAoKChpbnQpbnVtKSA8PCAxNik7Ci0JCX0KLQkJYnVmICs9IDI7Ci0JCXN0YXJ0ICs9IDI7Ci0JfQotCS8qIHNraXAgZm9wIGVsZW1lbnQgKi8KLQlpZiAoc3RhcnQgPT0gT0ZGU0VUKGZvcCkpIHsKLQkJc3RhcnQgKz0gMjsKLQkJYnVmICs9IDI7Ci0JfQotCXdoaWxlIChzdGFydCA8IGVuZCkgewotCQludW0zMiA9ICooKGludCAqKWJ1Zik7Ci0JCWlmIChzdGFydCA9PSBPRkZTRVQoZmlwKSkKLQkJCXRhc2stPnRocmVhZC5maXIgPSAodGFzay0+dGhyZWFkLmZpciAmICh+MHhmZmZmZmZmZikpCi0JCQkJCQkgfCBudW0zMjsKLQkJZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKGZvbykpCi0JCQl0YXNrLT50aHJlYWQuZmRyID0gKHRhc2stPnRocmVhZC5mZHIgJiAofjB4ZmZmZmZmZmYpKQotCQkJCQkJIHwgbnVtMzI7Ci0JCWVsc2UgaWYgKHN0YXJ0ID09IE9GRlNFVChteGNzcikpIHsKLQkJCW51bTY0ID0gbnVtMzIgJiAweGZmMTA7Ci0JCQl0YXNrLT50aHJlYWQuZmNyID0gKHRhc2stPnRocmVhZC5mY3IgJgotCQkJCSh+MHhmZjEwMDAwMDAwMDBVTCkpIHwgKG51bTY0PDwzMik7Ci0JCQludW02NCA9IG51bTMyICYgMHgzZjsKLQkJCXRhc2stPnRocmVhZC5mc3IgPSAodGFzay0+dGhyZWFkLmZzciAmCi0JCQkJKH4weDNmMDAwMDAwMDBVTCkpIHwgKG51bTY0PDwzMik7Ci0JCX0KLQkJYnVmICs9IDQ7Ci0JCXN0YXJ0ICs9IDQ7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkb19mcHhyZWdzX2dldChzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKmluZm8sIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgcmVnc2V0X2dldHNldCAqZHN0ID0gYXJnOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGRzdC0+dGFyZ2V0OwotCXN0cnVjdCBwdF9yZWdzICpwdDsKLQljaGFyIGJ1ZlsxMjhdOwotCWludCBzdGFydCwgZW5kLCB0b3M7Ci0KLQlpZiAoZHN0LT5jb3VudCA9PSAwIHx8IHVud191bndpbmRfdG9fdXNlcihpbmZvKSA8IDApCi0JCXJldHVybjsKLQlpZiAoZHN0LT5wb3MgPCBPRkZTRVQoc3Rfc3BhY2VbMF0pKSB7Ci0JCWVuZCA9IG1pbihkc3QtPnBvcyArIGRzdC0+Y291bnQsICh1bnNpZ25lZCBpbnQpMzIpOwotCQlnZXRmcHhyZWcodGFzaywgZHN0LT5wb3MsIGVuZCwgYnVmKTsKLQkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCi0JCQkJJmRzdC0+dS5nZXQua2J1ZiwgJmRzdC0+dS5nZXQudWJ1ZiwgYnVmLAotCQkJCTAsIE9GRlNFVChzdF9zcGFjZVswXSkpOwotCQlpZiAoZHN0LT5yZXQgfHwgZHN0LT5jb3VudCA9PSAwKQotCQkJcmV0dXJuOwotCX0KLQlpZiAoZHN0LT5wb3MgPCBPRkZTRVQoeG1tX3NwYWNlWzBdKSkgewotCQlwdCA9IHRhc2tfcHRfcmVncyh0YXNrKTsKLQkJdG9zID0gKHRhc2stPnRocmVhZC5mc3IgPj4gMTEpICYgNzsKLQkJZW5kID0gbWluKGRzdC0+cG9zICsgZHN0LT5jb3VudCwKLQkJCQkodW5zaWduZWQgaW50KU9GRlNFVCh4bW1fc3BhY2VbMF0pKTsKLQkJc3RhcnQgPSAoZHN0LT5wb3MgLSBPRkZTRVQoc3Rfc3BhY2VbMF0pKSAvIDE2OwotCQllbmQgPSAoZW5kIC0gT0ZGU0VUKHN0X3NwYWNlWzBdKSkgLyAxNjsKLQkJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKQotCQkJYWNjZXNzX2ZwcmVnX2lhMzIoc3RhcnQsIGJ1ZiArIDE2ICogc3RhcnQsIHB0LAotCQkJCQkJaW5mby0+c3csIHRvcywgMCk7Ci0JCWRzdC0+cmV0ID0gdXNlcl9yZWdzZXRfY29weW91dCgmZHN0LT5wb3MsICZkc3QtPmNvdW50LAotCQkJCSZkc3QtPnUuZ2V0LmtidWYsICZkc3QtPnUuZ2V0LnVidWYsCi0JCQkJYnVmLCBPRkZTRVQoc3Rfc3BhY2VbMF0pLCBPRkZTRVQoeG1tX3NwYWNlWzBdKSk7Ci0JCWlmIChkc3QtPnJldCB8fCBkc3QtPmNvdW50ID09IDApCi0JCQlyZXR1cm47Ci0JfQotCWlmIChkc3QtPnBvcyA8IE9GRlNFVChwYWRkaW5nWzBdKSkKLQkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCi0JCQkJJmRzdC0+dS5nZXQua2J1ZiwgJmRzdC0+dS5nZXQudWJ1ZiwKLQkJCQkmaW5mby0+c3ctPmYxNiwgT0ZGU0VUKHhtbV9zcGFjZVswXSksCi0JCQkJT0ZGU0VUKHBhZGRpbmdbMF0pKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fZnB4cmVnc19zZXQoc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IHJlZ3NldF9nZXRzZXQgKmRzdCA9IGFyZzsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBkc3QtPnRhcmdldDsKLQljaGFyIGJ1ZlsxMjhdOwotCWludCBzdGFydCwgZW5kOwotCi0JaWYgKGRzdC0+Y291bnQgPT0gMCB8fCB1bndfdW53aW5kX3RvX3VzZXIoaW5mbykgPCAwKQotCQlyZXR1cm47Ci0KLQlpZiAoZHN0LT5wb3MgPCBPRkZTRVQoc3Rfc3BhY2VbMF0pKSB7Ci0JCXN0YXJ0ID0gZHN0LT5wb3M7Ci0JCWRzdC0+cmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCi0JCQkJJmRzdC0+dS5zZXQua2J1ZiwgJmRzdC0+dS5zZXQudWJ1ZiwKLQkJCQlidWYsIDAsIE9GRlNFVChzdF9zcGFjZVswXSkpOwotCQlpZiAoZHN0LT5yZXQpCi0JCQlyZXR1cm47Ci0JCXNldGZweHJlZyh0YXNrLCBzdGFydCwgZHN0LT5wb3MsIGJ1Zik7Ci0JCWlmIChkc3QtPmNvdW50ID09IDApCi0JCQlyZXR1cm47Ci0JfQotCWlmIChkc3QtPnBvcyA8IE9GRlNFVCh4bW1fc3BhY2VbMF0pKSB7Ci0JCXN0cnVjdCBwdF9yZWdzICpwdDsKLQkJaW50IHRvczsKLQkJcHQgPSB0YXNrX3B0X3JlZ3ModGFzayk7Ci0JCXRvcyA9ICh0YXNrLT50aHJlYWQuZnNyID4+IDExKSAmIDc7Ci0JCXN0YXJ0ID0gKGRzdC0+cG9zIC0gT0ZGU0VUKHN0X3NwYWNlWzBdKSkgLyAxNjsKLQkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJmRzdC0+cG9zLCAmZHN0LT5jb3VudCwKLQkJCQkmZHN0LT51LnNldC5rYnVmLCAmZHN0LT51LnNldC51YnVmLAotCQkJCWJ1ZiwgT0ZGU0VUKHN0X3NwYWNlWzBdKSwgT0ZGU0VUKHhtbV9zcGFjZVswXSkpOwotCQlpZiAoZHN0LT5yZXQpCi0JCQlyZXR1cm47Ci0JCWVuZCA9IChkc3QtPnBvcyAtIE9GRlNFVChzdF9zcGFjZVswXSkpIC8gMTY7Ci0JCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykKLQkJCWFjY2Vzc19mcHJlZ19pYTMyKHN0YXJ0LCBidWYgKyAxNiAqIHN0YXJ0LCBwdCwgaW5mby0+c3csCi0JCQkJCQkgdG9zLCAxKTsKLQkJaWYgKGRzdC0+Y291bnQgPT0gMCkKLQkJCXJldHVybjsKLQl9Ci0JaWYgKGRzdC0+cG9zIDwgT0ZGU0VUKHBhZGRpbmdbMF0pKQotCQlkc3QtPnJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmZHN0LT5wb3MsICZkc3QtPmNvdW50LAotCQkJCSZkc3QtPnUuc2V0LmtidWYsICZkc3QtPnUuc2V0LnVidWYsCi0JCQkJJmluZm8tPnN3LT5mMTYsIE9GRlNFVCh4bW1fc3BhY2VbMF0pLAotCQkJCSBPRkZTRVQocGFkZGluZ1swXSkpOwotfQotI3VuZGVmIE9GRlNFVAotCi1zdGF0aWMgaW50IGRvX3JlZ3NldF9jYWxsKHZvaWQgKCpjYWxsKShzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKiwgdm9pZCAqKSwKLQkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCi0JCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAotCQl1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCi0JCWNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQotewotCXN0cnVjdCByZWdzZXRfZ2V0c2V0IGluZm8gPSB7IC50YXJnZXQgPSB0YXJnZXQsIC5yZWdzZXQgPSByZWdzZXQsCi0JCS5wb3MgPSBwb3MsIC5jb3VudCA9IGNvdW50LAotCQkudS5zZXQgPSB7IC5rYnVmID0ga2J1ZiwgLnVidWYgPSB1YnVmIH0sCi0JCS5yZXQgPSAwIH07Ci0KLQlpZiAodGFyZ2V0ID09IGN1cnJlbnQpCi0JCXVud19pbml0X3J1bm5pbmcoY2FsbCwgJmluZm8pOwotCWVsc2UgewotCQlzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gdWZpOwotCQltZW1zZXQoJnVmaSwgMCwgc2l6ZW9mKHVmaSkpOwotCQl1bndfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzaygmdWZpLCB0YXJnZXQpOwotCQkoKmNhbGwpKCZ1ZmksICZpbmZvKTsKLQl9Ci0KLQlyZXR1cm4gaW5mby5yZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaWEzMl9mcHJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAotCQljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKLQkJdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAotCQl2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKLXsKLQlyZXR1cm4gZG9fcmVnc2V0X2NhbGwoZG9fZnByZWdzX2dldCwgdGFyZ2V0LCByZWdzZXQsIHBvcywgY291bnQsCi0JCWtidWYsIHVidWYpOwotfQotCi1zdGF0aWMgaW50IGlhMzJfZnByZWdzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKLQkJY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCi0JCXVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKLQkJY29uc3Qgdm9pZCAqa2J1ZiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVidWYpCi17Ci0JcmV0dXJuIGRvX3JlZ3NldF9jYWxsKGRvX2ZwcmVnc19zZXQsIHRhcmdldCwgcmVnc2V0LCBwb3MsIGNvdW50LAotCQlrYnVmLCB1YnVmKTsKLX0KLQotc3RhdGljIGludCBpYTMyX2ZweHJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAotCQljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKLQkJdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAotCQl2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKLXsKLQlyZXR1cm4gZG9fcmVnc2V0X2NhbGwoZG9fZnB4cmVnc19nZXQsIHRhcmdldCwgcmVnc2V0LCBwb3MsIGNvdW50LAotCQlrYnVmLCB1YnVmKTsKLX0KLQotc3RhdGljIGludCBpYTMyX2ZweHJlZ3Nfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAotCQljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKLQkJdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAotCQljb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKLXsKLQlyZXR1cm4gZG9fcmVnc2V0X2NhbGwoZG9fZnB4cmVnc19zZXQsIHRhcmdldCwgcmVnc2V0LCBwb3MsIGNvdW50LAotCQlrYnVmLCB1YnVmKTsKLX0KLQotc3RhdGljIGludCBpYTMyX2dlbnJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAotCQljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKLQkJdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAotCQl2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKLXsKLQlpZiAoa2J1ZikgewotCQl1MzIgKmtwID0ga2J1ZjsKLQkJd2hpbGUgKGNvdW50ID4gMCkgewotCQkJKmtwKysgPSBnZXRyZWcodGFyZ2V0LCBwb3MpOwotCQkJcG9zICs9IDQ7Ci0JCQljb3VudCAtPSA0OwotCQl9Ci0JfSBlbHNlIHsKLQkJdTMyIF9fdXNlciAqdXAgPSB1YnVmOwotCQl3aGlsZSAoY291bnQgPiAwKSB7Ci0JCQlpZiAoX19wdXRfdXNlcihnZXRyZWcodGFyZ2V0LCBwb3MpLCB1cCsrKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXBvcyArPSA0OwotCQkJY291bnQgLT0gNDsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpYTMyX2dlbnJlZ3Nfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAotCQljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKLQkJdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAotCQljb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChrYnVmKSB7Ci0JCWNvbnN0IHUzMiAqa3AgPSBrYnVmOwotCQl3aGlsZSAoIXJldCAmJiBjb3VudCA+IDApIHsKLQkJCXB1dHJlZyh0YXJnZXQsIHBvcywgKmtwKyspOwotCQkJcG9zICs9IDQ7Ci0JCQljb3VudCAtPSA0OwotCQl9Ci0JfSBlbHNlIHsKLQkJY29uc3QgdTMyIF9fdXNlciAqdXAgPSB1YnVmOwotCQl1MzIgdmFsOwotCQl3aGlsZSAoIXJldCAmJiBjb3VudCA+IDApIHsKLQkJCXJldCA9IF9fZ2V0X3VzZXIodmFsLCB1cCsrKTsKLQkJCWlmICghcmV0KQotCQkJCXB1dHJlZyh0YXJnZXQsIHBvcywgdmFsKTsKLQkJCXBvcyArPSA0OwotCQkJY291bnQgLT0gNDsKLQkJfQotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGlhMzJfdGxzX2FjdGl2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKLQkJY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQpCi17Ci0Jc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQgPSAmdGFyZ2V0LT50aHJlYWQ7Ci0JaW50IG4gPSBHRFRfRU5UUllfVExTX0VOVFJJRVM7Ci0Jd2hpbGUgKG4gPiAwICYmIGRlc2NfZW1wdHkoJnQtPnRsc19hcnJheVtuIC0xXSkpCi0JCS0tbjsKLQlyZXR1cm4gbjsKLX0KLQotc3RhdGljIGludCBpYTMyX3Rsc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCi0JCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LCB1bnNpZ25lZCBpbnQgcG9zLAotCQl1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQotewotCWNvbnN0IHN0cnVjdCBkZXNjX3N0cnVjdCAqdGxzOwotCi0JaWYgKHBvcyA+IEdEVF9FTlRSWV9UTFNfRU5UUklFUyAqIHNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MpIHx8Ci0JCQkocG9zICUgc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZGVzYykpICE9IDAgfHwKLQkJCShjb3VudCAlIHNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MpKSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBvcyAvPSBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9kZXNjKTsKLQljb3VudCAvPSBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9kZXNjKTsKLQotCXRscyA9ICZ0YXJnZXQtPnRocmVhZC50bHNfYXJyYXlbcG9zXTsKLQotCWlmIChrYnVmKSB7Ci0JCXN0cnVjdCBpYTMyX3VzZXJfZGVzYyAqaW5mbyA9IGtidWY7Ci0JCXdoaWxlIChjb3VudC0tID4gMCkKLQkJCWZpbGxfdXNlcl9kZXNjKGluZm8rKywgR0RUX0VOVFJZX1RMU19NSU4gKyBwb3MrKywKLQkJCQkJdGxzKyspOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBpYTMyX3VzZXJfZGVzYyBfX3VzZXIgKnVfaW5mbyA9IHVidWY7Ci0JCXdoaWxlIChjb3VudC0tID4gMCkgewotCQkJc3RydWN0IGlhMzJfdXNlcl9kZXNjIGluZm87Ci0JCQlmaWxsX3VzZXJfZGVzYygmaW5mbywgR0RUX0VOVFJZX1RMU19NSU4gKyBwb3MrKywgdGxzKyspOwotCQkJaWYgKF9fY29weV90b191c2VyKHVfaW5mbysrLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlhMzJfdGxzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKLQkJY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsIHVuc2lnbmVkIGludCBwb3MsCi0JCXVuc2lnbmVkIGludCBjb3VudCwgY29uc3Qgdm9pZCAqa2J1ZiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVidWYpCi17Ci0Jc3RydWN0IGlhMzJfdXNlcl9kZXNjIGluZm9idWZbR0RUX0VOVFJZX1RMU19FTlRSSUVTXTsKLQljb25zdCBzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MgKmluZm87Ci0KLQlpZiAocG9zID4gR0RUX0VOVFJZX1RMU19FTlRSSUVTICogc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZGVzYykgfHwKLQkJCShwb3MgJSBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9kZXNjKSkgIT0gMCB8fAotCQkJKGNvdW50ICUgc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZGVzYykpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGtidWYpCi0JCWluZm8gPSBrYnVmOwotCWVsc2UgaWYgKF9fY29weV9mcm9tX3VzZXIoaW5mb2J1ZiwgdWJ1ZiwgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQllbHNlCi0JCWluZm8gPSBpbmZvYnVmOwotCi0Jc2V0X3Rsc19kZXNjKHRhcmdldCwKLQkJR0RUX0VOVFJZX1RMU19NSU4gKyAocG9zIC8gc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZGVzYykpLAotCQlpbmZvLCBjb3VudCAvIHNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MpKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogVGhpcyBzaG91bGQgbWF0Y2ggYXJjaC9pMzg2L2tlcm5lbC9wdHJhY2UuYzpuYXRpdmVfcmVnc2V0cy4KLSAqIFhYWCBpb3Blcm0/IHZtODY/Ci0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgaWEzMl9yZWdzZXRzW10gPSB7Ci0JewotCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9QUlNUQVRVUywKLQkJLm4gPSBzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QzMikvNCwKLQkJLnNpemUgPSA0LCAuYWxpZ24gPSA0LAotCQkuZ2V0ID0gaWEzMl9nZW5yZWdzX2dldCwgLnNldCA9IGlhMzJfZ2VucmVnc19zZXQKLQl9LAotCXsKLQkJLmNvcmVfbm90ZV90eXBlID0gTlRfUFJGUFJFRywKLQkJLm4gPSBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9pMzg3X3N0cnVjdCkgLyA0LAotCQkuc2l6ZSA9IDQsIC5hbGlnbiA9IDQsCi0JCS5nZXQgPSBpYTMyX2ZwcmVnc19nZXQsIC5zZXQgPSBpYTMyX2ZwcmVnc19zZXQKLQl9LAotCXsKLQkJLmNvcmVfbm90ZV90eXBlID0gTlRfUFJYRlBSRUcsCi0JCS5uID0gc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZnhzcl9zdHJ1Y3QpIC8gNCwKLQkJLnNpemUgPSA0LCAuYWxpZ24gPSA0LAotCQkuZ2V0ID0gaWEzMl9mcHhyZWdzX2dldCwgLnNldCA9IGlhMzJfZnB4cmVnc19zZXQKLQl9LAotCXsKLQkJLmNvcmVfbm90ZV90eXBlID0gTlRfMzg2X1RMUywKLQkJLm4gPSBHRFRfRU5UUllfVExTX0VOVFJJRVMsCi0JCS5iaWFzID0gR0RUX0VOVFJZX1RMU19NSU4sCi0JCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZGVzYyksCi0JCS5hbGlnbiA9IHNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MpLAotCQkuYWN0aXZlID0gaWEzMl90bHNfYWN0aXZlLAotCQkuZ2V0ID0gaWEzMl90bHNfZ2V0LCAuc2V0ID0gaWEzMl90bHNfc2V0LAotCX0sCi19OwotCi1jb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXRfdmlldyB1c2VyX2lhMzJfdmlldyA9IHsKLQkubmFtZSA9ICJpMzg2IiwgLmVfbWFjaGluZSA9IEVNXzM4NiwKLQkucmVnc2V0cyA9IGlhMzJfcmVnc2V0cywgLm4gPSBBUlJBWV9TSVpFKGlhMzJfcmVnc2V0cykKLX07Ci0KLWxvbmcgc3lzMzJfZmFkdmlzZTY0XzY0KGludCBmZCwgX191MzIgb2Zmc2V0X2xvdywgX191MzIgb2Zmc2V0X2hpZ2gsIAotCQkJX191MzIgbGVuX2xvdywgX191MzIgbGVuX2hpZ2gsIGludCBhZHZpY2UpCi17IAotCXJldHVybiBzeXNfZmFkdmlzZTY0XzY0KGZkLAotCQkJICAgICAgICgoKHU2NClvZmZzZXRfaGlnaCk8PDMyKSB8IG9mZnNldF9sb3csCi0JCQkgICAgICAgKCgodTY0KWxlbl9oaWdoKTw8MzIpIHwgbGVuX2xvdywKLQkJCSAgICAgICBhZHZpY2UpOyAKLX0gCi0KLSNpZmRlZglOT1RZRVQgIC8qIFVOVEVTVEVEIEZPUiBJQTY0IEZST00gSEVSRSBET1dOICovCi0KLWFzbWxpbmthZ2UgbG9uZyBzeXMzMl9zZXRyZXVpZChjb21wYXRfdWlkX3QgcnVpZCwgY29tcGF0X3VpZF90IGV1aWQpCi17Ci0JdWlkX3Qgc3J1aWQsIHNldWlkOwotCi0Jc3J1aWQgPSAocnVpZCA9PSAoY29tcGF0X3VpZF90KS0xKSA/ICgodWlkX3QpLTEpIDogKCh1aWRfdClydWlkKTsKLQlzZXVpZCA9IChldWlkID09IChjb21wYXRfdWlkX3QpLTEpID8gKCh1aWRfdCktMSkgOiAoKHVpZF90KWV1aWQpOwotCXJldHVybiBzeXNfc2V0cmV1aWQoc3J1aWQsIHNldWlkKTsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9zZXRyZXN1aWQoY29tcGF0X3VpZF90IHJ1aWQsIGNvbXBhdF91aWRfdCBldWlkLAotCQljb21wYXRfdWlkX3Qgc3VpZCkKLXsKLQl1aWRfdCBzcnVpZCwgc2V1aWQsIHNzdWlkOwotCi0Jc3J1aWQgPSAocnVpZCA9PSAoY29tcGF0X3VpZF90KS0xKSA/ICgodWlkX3QpLTEpIDogKCh1aWRfdClydWlkKTsKLQlzZXVpZCA9IChldWlkID09IChjb21wYXRfdWlkX3QpLTEpID8gKCh1aWRfdCktMSkgOiAoKHVpZF90KWV1aWQpOwotCXNzdWlkID0gKHN1aWQgPT0gKGNvbXBhdF91aWRfdCktMSkgPyAoKHVpZF90KS0xKSA6ICgodWlkX3Qpc3VpZCk7Ci0JcmV0dXJuIHN5c19zZXRyZXN1aWQoc3J1aWQsIHNldWlkLCBzc3VpZCk7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfc2V0cmVnaWQoY29tcGF0X2dpZF90IHJnaWQsIGNvbXBhdF9naWRfdCBlZ2lkKQotewotCWdpZF90IHNyZ2lkLCBzZWdpZDsKLQotCXNyZ2lkID0gKHJnaWQgPT0gKGNvbXBhdF9naWRfdCktMSkgPyAoKGdpZF90KS0xKSA6ICgoZ2lkX3QpcmdpZCk7Ci0Jc2VnaWQgPSAoZWdpZCA9PSAoY29tcGF0X2dpZF90KS0xKSA/ICgoZ2lkX3QpLTEpIDogKChnaWRfdCllZ2lkKTsKLQlyZXR1cm4gc3lzX3NldHJlZ2lkKHNyZ2lkLCBzZWdpZCk7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfc2V0cmVzZ2lkKGNvbXBhdF9naWRfdCByZ2lkLCBjb21wYXRfZ2lkX3QgZWdpZCwKLQkJY29tcGF0X2dpZF90IHNnaWQpCi17Ci0JZ2lkX3Qgc3JnaWQsIHNlZ2lkLCBzc2dpZDsKLQotCXNyZ2lkID0gKHJnaWQgPT0gKGNvbXBhdF9naWRfdCktMSkgPyAoKGdpZF90KS0xKSA6ICgoZ2lkX3QpcmdpZCk7Ci0Jc2VnaWQgPSAoZWdpZCA9PSAoY29tcGF0X2dpZF90KS0xKSA/ICgoZ2lkX3QpLTEpIDogKChnaWRfdCllZ2lkKTsKLQlzc2dpZCA9IChzZ2lkID09IChjb21wYXRfZ2lkX3QpLTEpID8gKChnaWRfdCktMSkgOiAoKGdpZF90KXNnaWQpOwotCXJldHVybiBzeXNfc2V0cmVzZ2lkKHNyZ2lkLCBzZWdpZCwgc3NnaWQpOwotfQotI2VuZGlmIC8qIE5PVFlFVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmgKaW5kZXggN2FlNTg4OS4uMjFhZGJkNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oCkBAIC05NCwxMSArOTQsMzggQEAKICNkZWZpbmUgYWNwaV9ub2lycSAwCS8qIEFDUEkgYWx3YXlzIGVuYWJsZWQgb24gSUE2NCAqLwogI2RlZmluZSBhY3BpX3BjaV9kaXNhYmxlZCAwIC8qIEFDUEkgUENJIGFsd2F5cyBlbmFibGVkIG9uIElBNjQgKi8KICNkZWZpbmUgYWNwaV9zdHJpY3QgMQkvKiBubyBBQ1BJIHNwZWMgd29ya2Fyb3VuZHMgb24gSUE2NCAqLworI2RlZmluZSBhY3BpX2h0IDAJLyogbm8gSFQtb25seSBtb2RlIG9uIElBNjQgKi8KICNlbmRpZgogI2RlZmluZSBhY3BpX3Byb2Nlc3Nvcl9jc3RhdGVfY2hlY2soeCkgKHgpIC8qIG5vIGlkbGUgbGltaXRzIG9uIElBNjQgOikgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2FjcGkodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2FjcGlfY3JzX3F1aXJrcyh2b2lkKSB7IH0KIAorI2lmZGVmIENPTkZJR19JQTY0X0dFTkVSSUMKIGNvbnN0IGNoYXIgKmFjcGlfZ2V0X3N5c25hbWUgKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqYWNwaV9nZXRfc3lzbmFtZSAodm9pZCkKK3sKKyMgaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfSFBfU0lNKQorCXJldHVybiAiaHBzaW0iOworIyBlbGlmIGRlZmluZWQgKENPTkZJR19JQTY0X0hQX1pYMSkKKwlyZXR1cm4gImhwengxIjsKKyMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9IUF9aWDFfU1dJT1RMQikKKwlyZXR1cm4gImhwengxX3N3aW90bGIiOworIyBlbGlmIGRlZmluZWQgKENPTkZJR19JQTY0X1NHSV9TTjIpCisJcmV0dXJuICJzbjIiOworIyBlbGlmIGRlZmluZWQgKENPTkZJR19JQTY0X1NHSV9VVikKKwlyZXR1cm4gInV2IjsKKyMgZWxpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9ESUcpCisJcmV0dXJuICJkaWciOworIyBlbGlmIGRlZmluZWQgKENPTkZJR19JQTY0X1hFTl9HVUVTVCkKKwlyZXR1cm4gInhlbiI7CisjIGVsaWYgZGVmaW5lZChDT05GSUdfSUE2NF9ESUdfVlREKQorCXJldHVybiAiZGlnX3Z0ZCI7CisjIGVsc2UKKyMJZXJyb3IgVW5rbm93biBwbGF0Zm9ybS4gIEZpeCBhY3BpLmMuCisjIGVuZGlmCit9CisjZW5kaWYKIGludCBhY3BpX3JlcXVlc3RfdmVjdG9yICh1MzIgaW50X3R5cGUpOwogaW50IGFjcGlfZ3NpX3RvX2lycSAodTMyIGdzaSwgdW5zaWduZWQgaW50ICppcnEpOwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggZTE0MTA4Yi4uNGM0MTY1NiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMjAxLDcgKzIwMSw5IEBACiAgICByZWxldmFudCB1bnRpbCB3ZSBoYXZlIHJlYWwgaGFyZHdhcmUgdG8gcGxheSB3aXRoLi4uICovCiAjZGVmaW5lIEVMRl9QTEFURk9STQlOVUxMCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KQlzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCVwKKwlzZXRfcGVyc29uYWxpdHkoKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgflBFUl9NQVNLKSB8IFBFUl9MSU5VWCkKKwogI2RlZmluZSBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMoZXgsIGV4ZWN1dGFibGVfc3RhY2spCQkJCQlcCiAJKChleGVjdXRhYmxlX3N0YWNrIT1FWFNUQUNLX0RJU0FCTEVfWCkgJiYgKChleCkuZV9mbGFncyAmIEVGX0lBXzY0X0xJTlVYX0VYRUNVVEFCTEVfU1RBQ0spICE9IDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pYTMyLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaWEzMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzkwZWUxLi4wMDAwMDAwCi0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pYTMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0jaWZuZGVmIF9BU01fSUE2NF9JQTMyX0gKLSNkZWZpbmUgX0FTTV9JQTY0X0lBMzJfSAotCi0KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgotCi0jZGVmaW5lIElBMzJfTlJfc3lzY2FsbHMJCTI4NQkvKiBsZW5ndGggb2Ygc3lzY2FsbCB0YWJsZSAqLwotI2RlZmluZSBJQTMyX1BBR0VfU0hJRlQJCQkxMgkvKiA0S0IgcGFnZXMgKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotIyBpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0KLSNkZWZpbmUgSUEzMl9QQUdFX09GRlNFVAkweGMwMDAwMDAwCi0KLWV4dGVybiB2b2lkIGlhMzJfY3B1X2luaXQgKHZvaWQpOwotZXh0ZXJuIHZvaWQgaWEzMl9tZW1faW5pdCAodm9pZCk7Ci1leHRlcm4gdm9pZCBpYTMyX2dkdF9pbml0ICh2b2lkKTsKLWV4dGVybiBpbnQgaWEzMl9leGNlcHRpb24gKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGlzcik7Ci1leHRlcm4gaW50IGlhMzJfaW50ZXJjZXB0IChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBpc3IpOwotZXh0ZXJuIGludCBpYTMyX2Nsb25lX3RscyAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgc3RydWN0IHB0X3JlZ3MgKmNoaWxkcmVncyk7Ci0KLSMgZW5kaWYgLyogIUNPTkZJR19JQTMyX1NVUFBPUlQgKi8KLQotLyogRGVjbGFyZSB0aGlzIHVuY29uZGl0aW9uYWxseSwgc28gd2UgZG9uJ3QgZ2V0IHdhcm5pbmdzIGZvciB1bnJlYWNoYWJsZSBjb2RlLiAgKi8KLWV4dGVybiBpbnQgaWEzMl9zZXR1cF9mcmFtZTEgKGludCBzaWcsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHNpZ2luZm9fdCAqaW5mbywKLQkJCSAgICAgIHNpZ3NldF90ICpzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLSNpZiBQQUdFX1NISUZUID4gSUEzMl9QQUdFX1NISUZUCi1leHRlcm4gaW50IGlhMzJfY29weV9pYTY0X3BhcnRpYWxfcGFnZV9saXN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqLAotCQkJCQl1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIGlhMzJfZHJvcF9pYTY0X3BhcnRpYWxfcGFnZV9saXN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKLSNlbHNlCi0jIGRlZmluZSBpYTMyX2NvcHlfaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdChhMSwgYTIpCTAKLSMgZGVmaW5lIGlhMzJfZHJvcF9pYTY0X3BhcnRpYWxfcGFnZV9saXN0KGExKQlkbyB7IDsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYgLyogX0FTTV9JQTY0X0lBMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggNjliZjEzOC4uYzMyODZmNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC00NjIsNyArNDYyLDcgQEAKIAlyZXR1cm4gcHRlX3ZhbChhKSA9PSBwdGVfdmFsKGIpOwogfQogCi0jZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGUpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZXApIGRvIHsgfSB3aGlsZSAoMCkKIAogZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07CiBleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCAodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggN2ZhOTBmNy4uMzQ4ZTQ0ZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMjcwLDIzICsyNzAsNiBAQAogCQkgKGludCBfX3VzZXIgKikgKGFkZHIpKTsJCQkJCQkJXAogfSkKIAotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLXN0cnVjdCBkZXNjX3N0cnVjdCB7Ci0JdW5zaWduZWQgaW50IGEsIGI7Ci19OwotCi0jZGVmaW5lIGRlc2NfZW1wdHkoZGVzYykJCSghKChkZXNjKS0+YSB8IChkZXNjKS0+YikpCi0jZGVmaW5lIGRlc2NfZXF1YWwoZGVzYzEsIGRlc2MyKQkoKChkZXNjMSktPmEgPT0gKGRlc2MyKS0+YSkgJiYgKChkZXNjMSktPmIgPT0gKGRlc2MyKS0+YikpCi0KLSNkZWZpbmUgR0RUX0VOVFJZX1RMU19FTlRSSUVTCTMKLSNkZWZpbmUgR0RUX0VOVFJZX1RMU19NSU4JNgotI2RlZmluZSBHRFRfRU5UUllfVExTX01BWCAJKEdEVF9FTlRSWV9UTFNfTUlOICsgR0RUX0VOVFJZX1RMU19FTlRSSUVTIC0gMSkKLQotI2RlZmluZSBUTFNfU0laRSAoR0RUX0VOVFJZX1RMU19FTlRSSUVTICogOCkKLQotc3RydWN0IGlhNjRfcGFydGlhbF9wYWdlX2xpc3Q7Ci0jZW5kaWYKLQogc3RydWN0IHRocmVhZF9zdHJ1Y3QgewogCV9fdTMyIGZsYWdzOwkJCS8qIHZhcmlvdXMgdGhyZWFkIGZsYWdzIChzZWUgSUE2NF9USFJFQURfKikgKi8KIAkvKiB3cml0aW5nIG9uX3VzdGFjayBpcyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgc28gaXQncyB3b3J0aCBzcGVuZGluZyA4IGJpdHMgb24gaXQuLi4gKi8KQEAgLTI5OCwyOSArMjgxLDYgQEAKIAlfX3U2NCByYnNfYm90OwkJCS8qIHRoZSBiYXNlIGFkZHJlc3MgZm9yIHRoZSBSQlMgKi8KIAlpbnQgbGFzdF9mcGhfY3B1OwkJLyogQ1BVIHRoYXQgbWF5IGhvbGQgdGhlIGNvbnRlbnRzIG9mIGYzMi1mMTI3ICovCiAKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JX191NjQgZWZsYWc7CQkJLyogSUEzMiBFRkxBR1MgcmVnICovCi0JX191NjQgZnNyOwkJCS8qIElBMzIgZmxvYXRpbmcgcHQgc3RhdHVzIHJlZyAqLwotCV9fdTY0IGZjcjsJCQkvKiBJQTMyIGZsb2F0aW5nIHB0IGNvbnRyb2wgcmVnICovCi0JX191NjQgZmlyOwkJCS8qIElBMzIgZnAgZXhjZXB0LiBpbnN0ci4gcmVnICovCi0JX191NjQgZmRyOwkJCS8qIElBMzIgZnAgZXhjZXB0LiBkYXRhIHJlZyAqLwotCV9fdTY0IG9sZF9rMTsJCQkvKiBvbGQgdmFsdWUgb2YgYXIuazEgKi8KLQlfX3U2NCBvbGRfaW9iOwkJCS8qIG9sZCBJT0Jhc2UgdmFsdWUgKi8KLQlzdHJ1Y3QgaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdCAqcHBsOyAvKiBwYXJ0aWFsIHBhZ2UgbGlzdCBmb3IgNEsgcGFnZSBzaXplIGlzc3VlICovCi0gICAgICAgIC8qIGNhY2hlZCBUTFMgZGVzY3JpcHRvcnMuICovCi0Jc3RydWN0IGRlc2Nfc3RydWN0IHRsc19hcnJheVtHRFRfRU5UUllfVExTX0VOVFJJRVNdOwotCi0jIGRlZmluZSBJTklUX1RIUkVBRF9JQTMyCS5lZmxhZyA9CTAsCQkJXAotCQkJCS5mc3IgPQkJMCwJCQlcCi0JCQkJLmZjciA9CQkweDE3ODAwMDAwMDM3ZlVMTCwJXAotCQkJCS5maXIgPQkJMCwJCQlcCi0JCQkJLmZkciA9CQkwLAkJCVwKLQkJCQkub2xkX2sxID0JMCwJCQlcCi0JCQkJLm9sZF9pb2IgPQkwLAkJCVwKLQkJCQkucHBsID0JCU5VTEwsCi0jZWxzZQotIyBkZWZpbmUgSU5JVF9USFJFQURfSUEzMgotI2VuZGlmIC8qIENPTkZJR19JQTMyX1NVUFBPUlQgKi8KICNpZmRlZiBDT05GSUdfUEVSRk1PTgogCXZvaWQgKnBmbV9jb250ZXh0OwkJICAgICAvKiBwb2ludGVyIHRvIGRldGFpbGVkIFBNVSBjb250ZXh0ICovCiAJdW5zaWduZWQgbG9uZyBwZm1fbmVlZHNfY2hlY2tpbmc7ICAgIC8qIHdoZW4gPjAsIHBlbmRpbmcgcGVyZm1vbiB3b3JrIG9uIGtlcm5lbCBleGl0ICovCkBAIC0zNDIsNyArMzAyLDYgQEAKIAkucmJzX2JvdCA9CVNUQUNLX1RPUCAtIERFRkFVTFRfVVNFUl9TVEFDS19TSVpFLAlcCiAJLnRhc2tfc2l6ZSA9CURFRkFVTFRfVEFTS19TSVpFLAkJCVwKIAkubGFzdF9mcGhfY3B1ID0gIC0xLAkJCQkJXAotCUlOSVRfVEhSRUFEX0lBMzIJCQkJCVwKIAlJTklUX1RIUkVBRF9QTQkJCQkJCVwKIAkuZGJyID0JCXswLCB9LAkJCQkJXAogCS5pYnIgPQkJezAsIH0sCQkJCQlcCkBAIC00ODUsMTEgKzQ0NCw2IEBACiBleHRlcm4gdm9pZCBpYTY0X3NhdmVfZGVidWdfcmVncyAodW5zaWduZWQgbG9uZyAqc2F2ZV9hcmVhKTsKIGV4dGVybiB2b2lkIGlhNjRfbG9hZF9kZWJ1Z19yZWdzICh1bnNpZ25lZCBsb25nICpzYXZlX2FyZWEpOwogCi0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotZXh0ZXJuIHZvaWQgaWEzMl9zYXZlX3N0YXRlIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwotZXh0ZXJuIHZvaWQgaWEzMl9sb2FkX3N0YXRlIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwotI2VuZGlmCi0KICNkZWZpbmUgaWE2NF9mcGhfZW5hYmxlKCkJZG8geyBpYTY0X3JzbShJQTY0X1BTUl9ERkgpOyBpYTY0X3NybHpfZCgpOyB9IHdoaWxlICgwKQogI2RlZmluZSBpYTY0X2ZwaF9kaXNhYmxlKCkJZG8geyBpYTY0X3NzbShJQTY0X1BTUl9ERkgpOyBpYTY0X3NybHpfZCgpOyB9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCmluZGV4IGQ2ZjU3ODcuLmQ4ZTk4OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCkBAIC0yLDI1ICsyLDYgQEAKICNkZWZpbmUgX0FTTV9JQTY0X1NDQVRURVJMSVNUX0gKIAogLyoKLSAqIE1vZGlmaWVkIDE5OTgtMTk5OSwgMjAwMS0yMDAyLCAyMDA0Ci0gKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28KLSAqLwotCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLXN0cnVjdCBzY2F0dGVybGlzdCB7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX1NHCi0JdW5zaWduZWQgbG9uZyBzZ19tYWdpYzsKLSNlbmRpZgotCXVuc2lnbmVkIGxvbmcgcGFnZV9saW5rOwotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0JdW5zaWduZWQgaW50IGxlbmd0aDsJLyogYnVmZmVyIGxlbmd0aCAqLwotCi0JZG1hX2FkZHJfdCBkbWFfYWRkcmVzczsKLQl1bnNpZ25lZCBpbnQgZG1hX2xlbmd0aDsKLX07Ci0KLS8qCiAgKiBJdCB1c2VkIHRvIGJlIHRoYXQgSVNBX0RNQV9USFJFU0hPTEQgaGFkIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZQogICogRE1BLWxpbWl0cyBvZiBJU0EtZGV2aWNlcy4gIE5vd2FkYXlzLCBpdHMgb25seSByZW1haW5pbmcgdXNlIChhcGFydAogICogZnJvbSB0aGUgYWhhMTU0Mi5jIGRyaXZlciwgd2hpY2ggaXNuJ3QgNjQtYml0IGNsZWFuIGFueWhvdykgaXMgdG8KQEAgLTMwLDkgKzExLDYgQEAKICAqLwogI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkweGZmZmZmZmZmCiAKLSNkZWZpbmUgc2dfZG1hX2xlbihzZykJCSgoc2cpLT5kbWFfbGVuZ3RoKQotI2RlZmluZSBzZ19kbWFfYWRkcmVzcyhzZykJKChzZyktPmRtYV9hZGRyZXNzKQotCi0jZGVmaW5lCUFSQ0hfSEFTX1NHX0NIQUlOCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2NhdHRlcmxpc3QuaD4KIAogI2VuZGlmIC8qIF9BU01fSUE2NF9TQ0FUVEVSTElTVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaAppbmRleCAyZjc1OGE0Li5hN2ZmMWM2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTIyLDMzICsyMiwxOCBAQAogCWlmICgobG9uZylyZWdzLT5jcl9pZnMgPCAwKSAvKiBOb3QgYSBzeXNjYWxsICovCiAJCXJldHVybiAtMTsKIAotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQlpZiAoSVNfSUEzMl9QUk9DRVNTKHJlZ3MpKQotCQlyZXR1cm4gcmVncy0+cjE7Ci0jZW5kaWYKLQogCXJldHVybiByZWdzLT5yMTU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX3JvbGxiYWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCWlmIChJU19JQTMyX1BST0NFU1MocmVncykpCi0JCXJlZ3MtPnI4ID0gcmVncy0+cjE7Ci0jZW5kaWYKLQogCS8qIGRvIG5vdGhpbmcgKi8KIH0KIAogc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X2Vycm9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQlpZiAoSVNfSUEzMl9QUk9DRVNTKHJlZ3MpKQotCQlyZXR1cm4gcmVncy0+cjg7Ci0jZW5kaWYKLQogCXJldHVybiByZWdzLT5yMTAgPT0gLTEgPyByZWdzLT5yODowOwogfQogCkBAIC02MiwxMyArNDcsNiBAQAogCQkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJCSAgICBpbnQgZXJyb3IsIGxvbmcgdmFsKQogewotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQlpZiAoSVNfSUEzMl9QUk9DRVNTKHJlZ3MpKSB7Ci0JCXJlZ3MtPnI4ID0gKGxvbmcpIGVycm9yID8gZXJyb3IgOiB2YWw7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQogCWlmIChlcnJvcikgewogCQkvKiBlcnJvciA8IDAsIGJ1dCBpYTY0IHVzZXMgPiAwIHJldHVybiB2YWx1ZSAqLwogCQlyZWdzLT5yOCA9IC1lcnJvcjsKQEAgLTg5LDM3ICs2Nyw2IEBACiB7CiAJQlVHX09OKGkgKyBuID4gNik7CiAKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JaWYgKElTX0lBMzJfUFJPQ0VTUyhyZWdzKSkgewotCQlzd2l0Y2ggKGkgKyBuKSB7Ci0JCWNhc2UgNjoKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCSphcmdzKysgPSByZWdzLT5yMTM7Ci0JCWNhc2UgNToKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCSphcmdzKysgPSByZWdzLT5yMTU7Ci0JCWNhc2UgNDoKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCSphcmdzKysgPSByZWdzLT5yMTQ7Ci0JCWNhc2UgMzoKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCSphcmdzKysgPSByZWdzLT5yMTA7Ci0JCWNhc2UgMjoKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCSphcmdzKysgPSByZWdzLT5yOTsKLQkJY2FzZSAxOgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQkJKmFyZ3MrKyA9IHJlZ3MtPnIxMTsKLQkJY2FzZSAwOgotCQkJaWYgKCFuLS0pIGJyZWFrOwotCQlkZWZhdWx0OgotCQkJQlVHKCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldHVybjsKLQl9Ci0jZW5kaWYKIAlpYTY0X3N5c2NhbGxfZ2V0X3NldF9hcmd1bWVudHModGFzaywgcmVncywgaSwgbiwgYXJncywgMCk7CiB9CiAKQEAgLTEzMCwzNCArNzcsNiBAQAogewogCUJVR19PTihpICsgbiA+IDYpOwogCi0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCWlmIChJU19JQTMyX1BST0NFU1MocmVncykpIHsKLQkJc3dpdGNoIChpICsgbikgewotCQljYXNlIDY6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCQlyZWdzLT5yMTMgPSAqYXJncysrOwotCQljYXNlIDU6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCQlyZWdzLT5yMTUgPSAqYXJncysrOwotCQljYXNlIDQ6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCQlyZWdzLT5yMTQgPSAqYXJncysrOwotCQljYXNlIDM6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCQlyZWdzLT5yMTAgPSAqYXJncysrOwotCQljYXNlIDI6Ci0JCQlpZiAoIW4tLSkgYnJlYWs7Ci0JCQlyZWdzLT5yOSA9ICphcmdzKys7Ci0JCWNhc2UgMToKLQkJCWlmICghbi0tKSBicmVhazsKLQkJCXJlZ3MtPnIxMSA9ICphcmdzKys7Ci0JCWNhc2UgMDoKLQkJCWlmICghbi0tKSBicmVhazsKLQkJfQotCi0JCXJldHVybjsKLQl9Ci0jZW5kaWYKIAlpYTY0X3N5c2NhbGxfZ2V0X3NldF9hcmd1bWVudHModGFzaywgcmVncywgaSwgbiwgYXJncywgMSk7CiB9CiAjZW5kaWYJLyogX0FTTV9TWVNDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCA5MjdhMzgxLi45ZjM0MmE1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xOTEsMTUgKzE5MSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0jIGRlZmluZSBJU19JQTMyX1BST0NFU1MocmVncykJKGlhNjRfcHNyKHJlZ3MpLT5pcyAhPSAwKQotI2Vsc2UKLSMgZGVmaW5lIElTX0lBMzJfUFJPQ0VTUyhyZWdzKQkJMAotc3RydWN0IHRhc2tfc3RydWN0Owotc3RhdGljIGlubGluZSB2b2lkIGlhMzJfc2F2ZV9zdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpe30KLXN0YXRpYyBpbmxpbmUgdm9pZCBpYTMyX2xvYWRfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpKXt9Ci0jZW5kaWYKLQogLyoKICAqIENvbnRleHQgc3dpdGNoIGZyb20gb25lIHRocmVhZCB0byBhbm90aGVyLiAgSWYgdGhlIHR3byB0aHJlYWRzIGhhdmUKICAqIGRpZmZlcmVudCBhZGRyZXNzIHNwYWNlcywgc2NoZWR1bGUoKSBoYXMgYWxyZWFkeSB0YWtlbiBjYXJlIG9mCkBAIC0yMzMsNyArMjI0LDcgQEAKIAogI2RlZmluZSBJQTY0X0hBU19FWFRSQV9TVEFURSh0KQkJCQkJCQlcCiAJKCh0KS0+dGhyZWFkLmZsYWdzICYgKElBNjRfVEhSRUFEX0RCR19WQUxJRHxJQTY0X1RIUkVBRF9QTV9WQUxJRCkJXAotCSB8fCBJU19JQTMyX1BST0NFU1ModGFza19wdF9yZWdzKHQpKSB8fCBQRVJGTU9OX0lTX1NZU1dJREUoKSkKKwkgfHwgUEVSRk1PTl9JU19TWVNXSURFKCkpCiAKICNkZWZpbmUgX19zd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpIGRvIHsJCQkJCQkJIFwKIAlJQTY0X0FDQ09VTlRfT05fU1dJVENIKHByZXYsIG5leHQpOwkJCQkJCQkgXApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDEwYThmMjEuLmJiOGIwZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTMzNSwyMCArMzM1LDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHU1VTUEVORAogCi0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotIyBkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAotIyBkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVFBHUlAKLSMgZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKLSMgZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCi0jIGRlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX0dFVFJMSU1JVAotIyBkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAotIyBkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCi0jIGRlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwotIyBkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCi0jIGRlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1JUX1NJR1NVU1BFTkQKLSMgZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfVElNRQotI2VuZGlmCi0KICNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICYmICFkZWZpbmVkKEFTU0VNQkxFUikKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQppbmRleCBlMTIzNjM0Li40MTM4MjgyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKQEAgLTgsMTUgKzgsMTMgQEAKIAogZXh0cmEteQk6PSBoZWFkLm8gaW5pdF90YXNrLm8gdm1saW51eC5sZHMKIAotb2JqLXkgOj0gYWNwaS5vIGVudHJ5Lm8gZWZpLm8gZWZpX3N0dWIubyBnYXRlLWRhdGEubyBmc3lzLm8gaWE2NF9rc3ltcy5vIGlycS5vIGlycV9pYTY0Lm8JXAorb2JqLXkgOj0gZW50cnkubyBlZmkubyBlZmlfc3R1Yi5vIGdhdGUtZGF0YS5vIGZzeXMubyBpYTY0X2tzeW1zLm8gaXJxLm8gaXJxX2lhNjQubwlcCiAJIGlycV9sc2FwaWMubyBpdnQubyBtYWNodmVjLm8gcGFsLm8gcGFyYXZpcnRfcGF0Y2hsaXN0Lm8gcGF0Y2gubyBwcm9jZXNzLm8gcGVyZm1vbi5vIHB0cmFjZS5vIHNhbC5vCQlcCiAJIHNhbGluZm8ubyBzZXR1cC5vIHNpZ25hbC5vIHN5c19pYTY0Lm8gdGltZS5vIHRyYXBzLm8gdW5hbGlnbmVkLm8gXAogCSB1bndpbmQubyBtY2EubyBtY2FfYXNtLm8gdG9wb2xvZ3kubyBkbWEtbWFwcGluZy5vCiAKK29iai0kKENPTkZJR19BQ1BJKQkJKz0gYWNwaS5vIGFjcGktZXh0Lm8KIG9iai0kKENPTkZJR19JQTY0X0JSTF9FTVUpCSs9IGJybF9lbXUubwotb2JqLSQoQ09ORklHX0lBNjRfR0VORVJJQykJKz0gYWNwaS1leHQubwotb2JqLSQoQ09ORklHX0lBNjRfSFBfWlgxKQkrPSBhY3BpLWV4dC5vCi1vYmotJChDT05GSUdfSUE2NF9IUF9aWDFfU1dJT1RMQikgKz0gYWNwaS1leHQubwogCiBvYmotJChDT05GSUdfSUE2NF9QQUxJTkZPKQkrPSBwYWxpbmZvLm8KIG9iai0kKENPTkZJR19JT1NBUElDKQkJKz0gaW9zYXBpYy5vCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2FjcGkuYyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCmluZGV4IDQwNTc0YWUuLmMxNmZiMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCkBAIC02MCwxMSArNjAsNiBAQAogCiAjZGVmaW5lIFBSRUZJWAkJCSJBQ1BJOiAiCiAKLXZvaWQgKCpwbV9pZGxlKSAodm9pZCk7Ci1FWFBPUlRfU1lNQk9MKHBtX2lkbGUpOwotdm9pZCAoKnBtX3Bvd2VyX29mZikgKHZvaWQpOwotRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOwotCiB1MzIgYWNwaV9yc2R0X2ZvcmNlZDsKIHVuc2lnbmVkIGludCBhY3BpX2NwZWlfb3ZlcnJpZGU7CiB1bnNpZ25lZCBpbnQgYWNwaV9jcGVpX3BoeXNfY3B1aWQ7CkBAIC04MywxMiArNzgsMTAgQEAKIAkJICAgICAgICJ2MS4wL3IwLjcxIHRhYmxlcyBubyBsb25nZXIgc3VwcG9ydGVkXG4iKTsKIAlyZXR1cm4gcnNkcF9waHlzOwogfQotI2VuZGlmCiAKIGNvbnN0IGNoYXIgX19pbml0ICoKIGFjcGlfZ2V0X3N5c25hbWUodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfSUE2NF9HRU5FUklDCiAJdW5zaWduZWQgbG9uZyByc2RwX3BoeXM7CiAJc3RydWN0IGFjcGlfdGFibGVfcnNkcCAqcnNkcDsKIAlzdHJ1Y3QgYWNwaV90YWJsZV94c2R0ICp4c2R0OwpAQCAtMTQzLDMwICsxMzYsOCBAQAogI2VuZGlmCiAKIAlyZXR1cm4gImRpZyI7Ci0jZWxzZQotIyBpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9IUF9TSU0pCi0JcmV0dXJuICJocHNpbSI7Ci0jIGVsaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfSFBfWlgxKQotCXJldHVybiAiaHB6eDEiOwotIyBlbGlmIGRlZmluZWQgKENPTkZJR19JQTY0X0hQX1pYMV9TV0lPVExCKQotCXJldHVybiAiaHB6eDFfc3dpb3RsYiI7Ci0jIGVsaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfU0dJX1NOMikKLQlyZXR1cm4gInNuMiI7Ci0jIGVsaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfU0dJX1VWKQotCXJldHVybiAidXYiOwotIyBlbGlmIGRlZmluZWQgKENPTkZJR19JQTY0X0RJRykKLQlyZXR1cm4gImRpZyI7Ci0jIGVsaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfWEVOX0dVRVNUKQotCXJldHVybiAieGVuIjsKLSMgZWxpZiBkZWZpbmVkKENPTkZJR19JQTY0X0RJR19WVEQpCi0JcmV0dXJuICJkaWdfdnRkIjsKLSMgZWxzZQotIwllcnJvciBVbmtub3duIHBsYXRmb3JtLiAgRml4IGFjcGkuYy4KLSMgZW5kaWYKLSNlbmRpZgogfQotCi0jaWZkZWYgQ09ORklHX0FDUEkKKyNlbmRpZiAvKiBDT05GSUdfSUE2NF9HRU5FUklDICovCiAKICNkZWZpbmUgQUNQSV9NQVhfUExBVEZPUk1fSU5URVJSVVBUUwkyNTYKIApAQCAtMTA2MCw1ICsxMDMxLDMgQEAKICAqIGRvX3N1c3BlbmRfbG93bGV2ZWwoKQogICovCiB2b2lkIGRvX3N1c3BlbmRfbG93bGV2ZWwodm9pZCkge30KLQotI2VuZGlmCQkJCS8qIENPTkZJR19BQ1BJICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2F1ZGl0LmMgYi9hcmNoL2lhNjQva2VybmVsL2F1ZGl0LmMKaW5kZXggZjM4MDJhZS4uOTZhOWQxOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hdWRpdC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvYXVkaXQuYwpAQCAtMzAsMjAgKzMwLDExIEBACiAKIGludCBhdWRpdF9jbGFzc2lmeV9hcmNoKGludCBhcmNoKQogewotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQlpZiAoYXJjaCA9PSBBVURJVF9BUkNIX0kzODYpCi0JCXJldHVybiAxOwotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKIGludCBhdWRpdF9jbGFzc2lmeV9zeXNjYWxsKGludCBhYmksIHVuc2lnbmVkIHN5c2NhbGwpCiB7Ci0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCWV4dGVybiBpbnQgaWEzMl9jbGFzc2lmeV9zeXNjYWxsKHVuc2lnbmVkKTsKLQlpZiAoYWJpID09IEFVRElUX0FSQ0hfSTM4NikKLQkJcmV0dXJuIGlhMzJfY2xhc3NpZnlfc3lzY2FsbChzeXNjYWxsKTsKLSNlbmRpZgogCXN3aXRjaChzeXNjYWxsKSB7CiAJY2FzZSBfX05SX29wZW46CiAJCXJldHVybiAyOwpAQCAtNTgsMTggKzQ5LDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgYXVkaXRfY2xhc3Nlc19pbml0KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCWV4dGVybiBfX3UzMiBpYTMyX2Rpcl9jbGFzc1tdOwotCWV4dGVybiBfX3UzMiBpYTMyX3dyaXRlX2NsYXNzW107Ci0JZXh0ZXJuIF9fdTMyIGlhMzJfcmVhZF9jbGFzc1tdOwotCWV4dGVybiBfX3UzMiBpYTMyX2NoYXR0cl9jbGFzc1tdOwotCWV4dGVybiBfX3UzMiBpYTMyX3NpZ25hbF9jbGFzc1tdOwotCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1dSSVRFXzMyLCBpYTMyX3dyaXRlX2NsYXNzKTsKLQlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19SRUFEXzMyLCBpYTMyX3JlYWRfY2xhc3MpOwotCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0RJUl9XUklURV8zMiwgaWEzMl9kaXJfY2xhc3MpOwotCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0NIQVRUUl8zMiwgaWEzMl9jaGF0dHJfY2xhc3MpOwotCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1NJR05BTF8zMiwgaWEzMl9zaWduYWxfY2xhc3MpOwotI2VuZGlmCiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfV1JJVEUsIHdyaXRlX2NsYXNzKTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19SRUFELCByZWFkX2NsYXNzKTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19ESVJfV1JJVEUsIGRpcl9jbGFzcyk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKaW5kZXggZDc1Yjg3Mi4uOWEyNjBiMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwpAQCAtNzEsMTUgKzcxLDYgQEAKIAlhZGQgb3V0Mz0xNixzcAkJCS8vIHJlZ3MKIAlici5jYWxsLnNwdGsubWFueSBycD1zeXNfZXhlY3ZlCiAucmV0MDoKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JLyoKLQkgKiBDaGVjayBpZiB3ZSdyZSByZXR1cm5pbmcgdG8gaWEzMiBtb2RlLiBJZiBzbywgd2UgbmVlZCB0byByZXN0b3JlIGlhMzIgcmVnaXN0ZXJzCi0JICogZnJvbSBwdF9yZWdzLgotCSAqLwotCWFkZHMgcjE2PVBUKENSX0lQU1IpKzE2LHNwCi0JOzsKLQlsZDggcjE2PVtyMTZdCi0jZW5kaWYKIAljbXA0LmdlIHA2LHA3PXI4LHIwCiAJbW92IGFyLnBmcz1sb2MxCQkJLy8gcmVzdG9yZSBhci5wZnMKIAlzeHQ0IHI4PXI4CQkJLy8gcmV0dXJuIDY0LWJpdCByZXN1bHQKQEAgLTEwOCwxMiArOTksNiBAQAogCWxkZi5maWxsIGYyMz1bc3BdOwlsZGYuZmlsbCBmMjQ9W3NwXTsJbW92IGYyNT1mMAogCWxkZi5maWxsIGYyNj1bc3BdOwlsZGYuZmlsbCBmMjc9W3NwXTsJbW92IGYyOD1mMAogCWxkZi5maWxsIGYyOT1bc3BdOwlsZGYuZmlsbCBmMzA9W3NwXTsJbW92IGYzMT1mMAotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQl0Yml0Lm56IHA2LHAwPXIxNiwgSUE2NF9QU1JfSVNfQklUCi0JbW92bCBsb2MwPWlhNjRfcmV0X2Zyb21faWEzMl9leGVjdmUKLQk7OwotKHA2KQltb3YgcnA9bG9jMAotI2VuZGlmCiAJYnIucmV0LnNwdGsubWFueSBycAogRU5EKGlhNjRfZXhlY3ZlKQogCkBAIC04NDgsMzAgKzgzMyw2IEBACiAJYnIuY29uZC5zcHRrLm1hbnkgcmJzX3N3aXRjaAkvLyBCCiBFTkQoX19wYXJhdmlydF9sZWF2ZV9zeXNjYWxsKQogCi0jaWZkZWYgX19JQTY0X0FTTV9QQVJBVklSVFVBTElaRURfTkFUSVZFCi0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotR0xPQkFMX0VOVFJZKGlhNjRfcmV0X2Zyb21faWEzMl9leGVjdmUpCi0JUFRfUkVHU19VTldJTkRfSU5GTygwKQotCWFkZHMgcjI9UFQoUjgpKzE2LHNwCQkJLy8gcjIgPSAmcHRfcmVncy5yOAotCWFkZHMgcjM9UFQoUjEwKSsxNixzcAkJCS8vIHIzID0gJnB0X3JlZ3MucjEwCi0JOzsKLQkubWVtLm9mZnNldCAwLDAKLQlzdDguc3BpbGwgW3IyXT1yOAkvLyBzdG9yZSByZXR1cm4gdmFsdWUgaW4gc2xvdCBmb3IgcjggYW5kIHNldCB1bmF0IGJpdAotCS5tZW0ub2Zmc2V0IDgsMAotCXN0OC5zcGlsbCBbcjNdPXIwCS8vIGNsZWFyIGVycm9yIGluZGljYXRpb24gaW4gc2xvdCBmb3IgcjEwIGFuZCBzZXQgdW5hdCBiaXQKLSNpZmRlZiBDT05GSUdfUEFSQVZJUlQKLQk7OwotCS8vIGRvbid0IGZhbGwgdGhyb3VnaCwgaWE2NF9sZWF2ZV9rZXJuZWwgbWF5IGJlICNkZWZpbmUnZAotCWJyLmNvbmQuc3B0ay5mZXcgaWE2NF9sZWF2ZV9rZXJuZWwKLQk7OwotI2VuZGlmIC8qIENPTkZJR19QQVJBVklSVCAqLwotRU5EKGlhNjRfcmV0X2Zyb21faWEzMl9leGVjdmUpCi0jaWZuZGVmIENPTkZJR19QQVJBVklSVAotCS8vIGZhbGwgdGhyb3VnaAotI2VuZGlmCi0jZW5kaWYgLyogQ09ORklHX0lBMzJfU1VQUE9SVCAqLwotI2VuZGlmIC8qIF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX05BVElWRSAqLwotCiBHTE9CQUxfRU5UUlkoX19wYXJhdmlydF9sZWF2ZV9rZXJuZWwpCiAJUFRfUkVHU19VTldJTkRfSU5GTygwKQogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2l2dC5TIGIvYXJjaC9pYTY0L2tlcm5lbC9pdnQuUwppbmRleCBlYzlhNWZkLi4xNzlmZDEyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2l2dC5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaXZ0LlMKQEAgLTQ5LDcgKzQ5LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgogI2luY2x1ZGUgPGFzbS9icmVhay5oPgotI2luY2x1ZGUgPGFzbS9pYTMyLmg+CiAjaW5jbHVkZSA8YXNtL2tyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTEzODYsMjggKzEzODUsNiBAQAogLy8gMHg2YTAwIEVudHJ5IDQ2IChzaXplIDE2IGJ1bmRsZXMpIElBLTMyIEludGVyY2VwdCAgKDMwLDMxLDU5LDcwLDcxKQogRU5UUlkoaWEzMl9pbnRlcmNlcHQpCiAJREJHX0ZBVUxUKDQ2KQotI2lmZGVmCUNPTkZJR19JQTMyX1NVUFBPUlQKLQltb3YgcjMxPXByCi0JTU9WX0ZST01fSVNSKHIxNikKLQk7OwotCWV4dHIudSByMTc9cjE2LDE2LDgJLy8gZ2V0IElTUi5jb2RlCi0JbW92IHIxOD1hci5lZmxhZwotCU1PVl9GUk9NX0lJTShyMTkpCS8vIG9sZCBlZmxhZyB2YWx1ZQotCTs7Ci0JY21wLm5lIHA2LHAwPTIscjE3Ci0ocDYpCWJyLmNvbmQuc3BudCAxZgkJLy8gbm90IGEgc3lzdGVtIGZsYWcgZmF1bHQKLQl4b3IgcjE2PXIxOCxyMTkKLQk7OwotCWV4dHIudSByMTc9cjE2LDE4LDEJLy8gZ2V0IHRoZSBlZmxhZ3MuYWMgYml0Ci0JOzsKLQljbXAuZXEgcDYscDA9MCxyMTcKLShwNikJYnIuY29uZC5zcG50IDFmCQkvLyBlZmxhZ3MuYWMgYml0IGRpZG4ndCBjaGFuZ2UKLQk7OwotCW1vdiBwcj1yMzEsLTEJCS8vIHJlc3RvcmUgcHJlZGljYXRlIHJlZ2lzdGVycwotCVJGSQotCi0xOgotI2VuZGlmCS8vIENPTkZJR19JQTMyX1NVUFBPUlQKIAlGQVVMVCg0NikKIEVORChpYTMyX2ludGVyY2VwdCkKIApAQCAtMTQxNiwxMiArMTM5Myw3IEBACiAvLyAweDZiMDAgRW50cnkgNDcgKHNpemUgMTYgYnVuZGxlcykgSUEtMzIgSW50ZXJydXB0ICAoNzQpCiBFTlRSWShpYTMyX2ludGVycnVwdCkKIAlEQkdfRkFVTFQoNDcpCi0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCW1vdiByMzE9cHIKLQlici5zcHRrLm1hbnkgZGlzcGF0Y2hfdG9faWEzMl9oYW5kbGVyCi0jZWxzZQogCUZBVUxUKDQ3KQotI2VuZGlmCiBFTkQoaWEzMl9pbnRlcnJ1cHQpCiAKIAkub3JnIGlhNjRfaXZ0KzB4NmMwMApAQCAtMTcxNSw4OSArMTY4NywzIEBACiAocDYpCWJyLmNhbGwuZHBudC5tYW55IGI2PWI2CQkvLyBjYWxsIHJldHVybnMgdG8gaWE2NF9sZWF2ZV9rZXJuZWwKIAlici5zcHRrLm1hbnkgaWE2NF9sZWF2ZV9rZXJuZWwKIEVORChkaXNwYXRjaF9pbGxlZ2FsX29wX2ZhdWx0KQotCi0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCi0JLyoKLQkgKiBUaGVyZSBpcyBubyBwYXJ0aWN1bGFyIHJlYXNvbiBmb3IgdGhpcyBjb2RlIHRvIGJlIGhlcmUsIG90aGVyIHRoYW4gdGhhdAotCSAqIHRoZXJlIGhhcHBlbnMgdG8gYmUgc3BhY2UgaGVyZSB0aGF0IHdvdWxkIGdvIHVudXNlZCBvdGhlcndpc2UuICBJZiB0aGlzCi0JICogZmF1bHQgZXZlciBnZXRzICJ1bnJlc2VydmVkIiwgc2ltcGx5IG1vdmVkIHRoZSBmb2xsb3dpbmcgY29kZSB0byBhIG1vcmUKLQkgKiBzdWl0YWJsZSBzcG90Li4uCi0JICovCi0KLQkvLyBJQTMyIGludGVycnVwdCBlbnRyeSBwb2ludAotCi1FTlRSWShkaXNwYXRjaF90b19pYTMyX2hhbmRsZXIpCi0JU0FWRV9NSU4KLQk7OwotCU1PVl9GUk9NX0lTUihyMTQpCi0JU1NNX1BTUl9JQ19BTkRfREVGQVVMVF9CSVRTX0FORF9TUkxaX0kocjMsIHIyNCkKLQkJCQkvLyBndWFyYW50ZWUgdGhhdCBpbnRlcnJ1cHRpb24gY29sbGVjdGlvbiBpcyBvbgotCTs7Ci0JU1NNX1BTUl9JKHAxNSwgcDE1LCByMykKLQlhZGRzIHIzPTgscjIJCS8vIEJhc2UgcG9pbnRlciBmb3IgU0FWRV9SRVNUCi0JOzsKLQlTQVZFX1JFU1QKLQk7OwotCW1vdiByMTU9MHg4MAotCXNociByMTQ9cjE0LDE2CQkvLyBHZXQgaW50ZXJydXB0IG51bWJlcgotCTs7Ci0JY21wLm5lIHA2LHAwPXIxNCxyMTUKLShwNikJYnIuY2FsbC5kcG50Lm1hbnkgYjY9bm9uX2lhMzJfc3lzY2FsbAotCi0JYWRkcyByMTQ9SUE2NF9QVF9SRUdTX1I4X09GRlNFVCArIDE2LHNwCS8vIDE2IGJ5dGUgaG9sZSBwZXIgU1cgY29udmVudGlvbnMKLQlhZGRzIHIxNT1JQTY0X1BUX1JFR1NfUjFfT0ZGU0VUICsgMTYsc3AKLQk7OwotCWNtcC5lcSBwU3lzLHBOb25TeXM9cjAscjAgLy8gc2V0IHBTeXM9MSwgcE5vblN5cz0wCi0JbGQ4IHI4PVtyMTRdCQkvLyBnZXQgcjgKLQk7OwotCXN0OCBbcjE1XT1yOAkJLy8gc2F2ZSBvcmlnaW5hbCBFQVggaW4gcjEgKElBMzIgcHJvY3MgZG9uJ3QgdXNlIHRoZSBHUCkKLQk7OwotCWFsbG9jIHIxNT1hci5wZnMsMCwwLDYsMAkvLyBtdXN0IGZpcnN0IGluIGFuIGluc24gZ3JvdXAKLQk7OwotCWxkNCByOD1bcjE0XSw4CQkvLyByOCA9PSBlYXggKHN5c2NhbGwgbnVtYmVyKQotCW1vdiByMTU9SUEzMl9OUl9zeXNjYWxscwotCTs7Ci0JY21wLmx0dS51bmMgcDYscDc9cjgscjE1Ci0JbGQ0IG91dDE9W3IxNF0sOAkvLyByOSA9PSBlY3gKLQk7OwotCWxkNCBvdXQyPVtyMTRdLDgJLy8gcjEwID09IGVkeAotCTs7Ci0JbGQ0IG91dDA9W3IxNF0JCS8vIHIxMSA9PSBlYngKLQlhZGRzIHIxND0oSUE2NF9QVF9SRUdTX1IxM19PRkZTRVQpICsgMTYsc3AKLQk7OwotCWxkNCBvdXQ1PVtyMTRdLFBUKFIxNCktUFQoUjEzKQkvLyByMTMgPT0gZWJwCi0JOzsKLQlsZDQgb3V0Mz1bcjE0XSxQVChSMTUpLVBUKFIxNCkJLy8gcjE0ID09IGVzaQotCWFkZHMgcjI9VElfRkxBR1MrSUE2NF9UQVNLX1NJWkUscjEzCi0JOzsKLQlsZDQgb3V0ND1bcjE0XQkJLy8gcjE1ID09IGVkaQotCW1vdmwgcjE2PWlhMzJfc3lzY2FsbF90YWJsZQotCTs7Ci0ocDYpCXNobGFkZCByMTY9cjgsMyxyMTYJLy8gZm9yY2Ugbmlfc3lzY2FsbCBpZiBub3QgdmFsaWQgc3lzY2FsbCBudW1iZXIKLQlsZDQgcjI9W3IyXQkJLy8gcjIgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzCi0JOzsKLQlsZDggcjE2PVtyMTZdCi0JYW5kIHIyPV9USUZfU1lTQ0FMTF9UUkFDRUFVRElULHIyCS8vIG1hc2sgdHJhY2Ugb3IgYXVkaXQKLQk7OwotCW1vdiBiNj1yMTYKLQltb3ZsIHIxNT1pYTMyX3JldF9mcm9tX3N5c2NhbGwKLQljbXAuZXEgcDgscDA9cjIscjAKLQk7OwotCW1vdiBycD1yMTUKLShwOCkJYnIuY2FsbC5zcHRrLm1hbnkgYjY9YjYKLQlici5jb25kLnNwdGsgaWEzMl90cmFjZV9zeXNjYWxsCi0KLW5vbl9pYTMyX3N5c2NhbGw6Ci0JYWxsb2MgcjE1PWFyLnBmcywwLDAsMiwwCi0JbW92IG91dDA9cjE0CQkJCS8vIGludGVycnVwdCAjCi0JYWRkIG91dDE9MTYsc3AJCQkJLy8gcG9pbnRlciB0byBwdF9yZWdzCi0JOzsJCQkvLyBhdm9pZCBXQVcgb24gQ0ZNCi0JYnIuY2FsbC5zcHRrLm1hbnkgcnA9aWEzMl9iYWRfaW50ZXJydXB0Ci0ucmV0MToJbW92bCByMTU9aWE2NF9sZWF2ZV9rZXJuZWwKLQk7OwotCW1vdiBycD1yMTUKLQlici5yZXQuc3B0ay5tYW55IHJwCi1FTkQoZGlzcGF0Y2hfdG9faWEzMl9oYW5kbGVyKQotCi0jZW5kaWYgLyogQ09ORklHX0lBMzJfU1VQUE9SVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYwppbmRleCA5YWRhYzQ0Li43MDI2YjI5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYwpAQCAtODcwLDcgKzg3MCw3IEBACiAJCXJldHVybiAxOwogCiBzc19wcm9iZToKLSNpZiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkgfHwgZGVmaW5lZChDT05GSUdfRlJFRVpFUikKKyNpZiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkKIAlpZiAocC0+YWluc24uaW5zdF9mbGFnID09IElOU1RfRkxBR19CT09TVEFCTEUgJiYgIXAtPnBvc3RfaGFuZGxlcikgewogCQkvKiBCb29zdCB1cCAtLSB3ZSBjYW4gZXhlY3V0ZSBjb3BpZWQgaW5zdHJ1Y3Rpb25zIGRpcmVjdGx5ICovCiAJCWlhNjRfcHNyKHJlZ3MpLT5yaSA9IHAtPmFpbnNuLnNsb3Q7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IDZiY2JlMjEuLmI4MWU0NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCkBAIC0yNzEzLDcgKzI3MTMsNyBAQAogCQkJZ290byBidWZmZXJfZXJyb3I7CiAJfQogCi0JRFBSSU5UKCgiY3R4PSVwIGZsYWdzPTB4JXggc3lzdGVtPSVkIG5vdGlmeV9ibG9jaz0lZCBleGNsX2lkbGU9JWQgbm9fbXNnPSVkIGN0eF9mZD0lZCBcbiIsCisJRFBSSU5UKCgiY3R4PSVwIGZsYWdzPTB4JXggc3lzdGVtPSVkIG5vdGlmeV9ibG9jaz0lZCBleGNsX2lkbGU9JWQgbm9fbXNnPSVkIGN0eF9mZD0lZFxuIiwKIAkJY3R4LAogCQljdHhfZmxhZ3MsCiAJCWN0eC0+Y3R4X2ZsX3N5c3RlbSwKQEAgLTM2NzcsNyArMzY3Nyw3IEBACiAJICogInNlbGYtbW9uaXRvcmluZyIuCiAJICovCiAJaWYgKENUWF9PVkZMX05PQkxPQ0soY3R4KSA9PSAwICYmIHN0YXRlID09IFBGTV9DVFhfTUFTS0VEKSB7Ci0JCURQUklOVCgoInVuYmxvY2tpbmcgWyVkXSBcbiIsIHRhc2tfcGlkX25yKHRhc2spKSk7CisJCURQUklOVCgoInVuYmxvY2tpbmcgWyVkXVxuIiwgdGFza19waWRfbnIodGFzaykpKTsKIAkJY29tcGxldGUoJmN0eC0+Y3R4X3Jlc3RhcnRfZG9uZSk7CiAJfSBlbHNlIHsKIAkJRFBSSU5UKCgiWyVkXSBhcm1lZCBleGl0IHRyYXBcbiIsIHRhc2tfcGlkX25yKHRhc2spKSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDliY2VjOTkuLmQ5Mjc2NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9lbGYuaD4KLSNpbmNsdWRlIDxhc20vaWEzMi5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20va2V4ZWMuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpAQCAtNjAsNiArNTksMTAgQEAKIEVYUE9SVF9TWU1CT0woaWRsZV9oYWx0KTsKIHVuc2lnbmVkIGxvbmcgaWRsZV9ub213YWl0OwogRVhQT1JUX1NZTUJPTChpZGxlX25vbXdhaXQpOwordm9pZCAoKnBtX2lkbGUpICh2b2lkKTsKK0VYUE9SVF9TWU1CT0wocG1faWRsZSk7Cit2b2lkICgqcG1fcG93ZXJfb2ZmKSAodm9pZCk7CitFWFBPUlRfU1lNQk9MKHBtX3Bvd2VyX29mZik7CiAKIHZvaWQKIGlhNjRfZG9fc2hvd19zdGFjayAoc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lkICphcmcpCkBAIC0zNTgsMTEgKzM2MSw2IEBACiAJaWYgKGluZm8gJiBQRk1fQ1BVSU5GT19TWVNUX1dJREUpCiAJCXBmbV9zeXN0X3dpZGVfdXBkYXRlX3Rhc2sodGFzaywgaW5mbywgMCk7CiAjZW5kaWYKLQotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQlpZiAoSVNfSUEzMl9QUk9DRVNTKHRhc2tfcHRfcmVncyh0YXNrKSkpCi0JCWlhMzJfc2F2ZV9zdGF0ZSh0YXNrKTsKLSNlbmRpZgogfQogCiB2b2lkCkBAIC0zODMsMTEgKzM4MSw2IEBACiAJaWYgKGluZm8gJiBQRk1fQ1BVSU5GT19TWVNUX1dJREUpIAogCQlwZm1fc3lzdF93aWRlX3VwZGF0ZV90YXNrKHRhc2ssIGluZm8sIDEpOwogI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JaWYgKElTX0lBMzJfUFJPQ0VTUyh0YXNrX3B0X3JlZ3ModGFzaykpKQotCQlpYTMyX2xvYWRfc3RhdGUodGFzayk7Ci0jZW5kaWYKIH0KIAogLyoKQEAgLTQyNiw3ICs0MTksNyBAQAogCSAgICAgdW5zaWduZWQgbG9uZyB1c2VyX3N0YWNrX2Jhc2UsIHVuc2lnbmVkIGxvbmcgdXNlcl9zdGFja19zaXplLAogCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlleHRlcm4gY2hhciBpYTY0X3JldF9mcm9tX2Nsb25lLCBpYTMyX3JldF9mcm9tX2Nsb25lOworCWV4dGVybiBjaGFyIGlhNjRfcmV0X2Zyb21fY2xvbmU7CiAJc3RydWN0IHN3aXRjaF9zdGFjayAqY2hpbGRfc3RhY2ssICpzdGFjazsKIAl1bnNpZ25lZCBsb25nIHJicywgY2hpbGRfcmJzLCByYnNfc2l6ZTsKIAlzdHJ1Y3QgcHRfcmVncyAqY2hpbGRfcHRyZWdzOwpAQCAtNDU3LDcgKzQ1MCw3IEBACiAJbWVtY3B5KCh2b2lkICopIGNoaWxkX3JicywgKHZvaWQgKikgcmJzLCByYnNfc2l6ZSk7CiAKIAlpZiAobGlrZWx5KHVzZXJfbW9kZShjaGlsZF9wdHJlZ3MpKSkgewotCQlpZiAoKGNsb25lX2ZsYWdzICYgQ0xPTkVfU0VUVExTKSAmJiAhSVNfSUEzMl9QUk9DRVNTKHJlZ3MpKQorCQlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9TRVRUTFMpCiAJCQljaGlsZF9wdHJlZ3MtPnIxMyA9IHJlZ3MtPnIxNjsJLyogc2VlIHN5c19jbG9uZTIoKSBpbiBlbnRyeS5TICovCiAJCWlmICh1c2VyX3N0YWNrX2Jhc2UpIHsKIAkJCWNoaWxkX3B0cmVncy0+cjEyID0gdXNlcl9zdGFja19iYXNlICsgdXNlcl9zdGFja19zaXplIC0gMTY7CkBAIC00NzcsMTAgKzQ3MCw3IEBACiAJCWNoaWxkX3B0cmVncy0+cjEzID0gKHVuc2lnbmVkIGxvbmcpIHA7CQkvKiBzZXQgYGN1cnJlbnQnIHBvaW50ZXIgKi8KIAl9CiAJY2hpbGRfc3RhY2stPmFyX2JzcHN0b3JlID0gY2hpbGRfcmJzICsgcmJzX3NpemU7Ci0JaWYgKElTX0lBMzJfUFJPQ0VTUyhyZWdzKSkKLQkJY2hpbGRfc3RhY2stPmIwID0gKHVuc2lnbmVkIGxvbmcpICZpYTMyX3JldF9mcm9tX2Nsb25lOwotCWVsc2UKLQkJY2hpbGRfc3RhY2stPmIwID0gKHVuc2lnbmVkIGxvbmcpICZpYTY0X3JldF9mcm9tX2Nsb25lOworCWNoaWxkX3N0YWNrLT5iMCA9ICh1bnNpZ25lZCBsb25nKSAmaWE2NF9yZXRfZnJvbV9jbG9uZTsKIAogCS8qIGNvcHkgcGFydHMgb2YgdGhyZWFkX3N0cnVjdDogKi8KIAlwLT50aHJlYWQua3NwID0gKHVuc2lnbmVkIGxvbmcpIGNoaWxkX3N0YWNrIC0gMTY7CkBAIC01MTUsMjIgKzUwNSw2IEBACiAJcC0+dGhyZWFkLmZsYWdzID0gKChjdXJyZW50LT50aHJlYWQuZmxhZ3MgJiB+VEhSRUFEX0ZMQUdTX1RPX0NMRUFSKQogCQkJICAgfCBUSFJFQURfRkxBR1NfVE9fU0VUKTsKIAlpYTY0X2Ryb3BfZnB1KHApOwkvKiBkb24ndCBwaWNrIHVwIHN0YWxlIHN0YXRlIGZyb20gYSBDUFUncyBmcGggKi8KLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JLyoKLQkgKiBJZiB3ZSdyZSBjbG9uaW5nIGFuIElBMzIgdGFzayB0aGVuIHNhdmUgdGhlIElBMzIgZXh0cmEKLQkgKiBzdGF0ZSBmcm9tIHRoZSBjdXJyZW50IHRhc2sgdG8gdGhlIG5ldyB0YXNrCi0JICovCi0JaWYgKElTX0lBMzJfUFJPQ0VTUyh0YXNrX3B0X3JlZ3MoY3VycmVudCkpKSB7Ci0JCWlhMzJfc2F2ZV9zdGF0ZShwKTsKLQkJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfU0VUVExTKQotCQkJcmV0dmFsID0gaWEzMl9jbG9uZV90bHMocCwgY2hpbGRfcHRyZWdzKTsKLQotCQkvKiBDb3B5IHBhcnRpYWxseSBtYXBwZWQgcGFnZSBsaXN0ICovCi0JCWlmICghcmV0dmFsKQotCQkJcmV0dmFsID0gaWEzMl9jb3B5X2lhNjRfcGFydGlhbF9wYWdlX2xpc3QocCwKLQkJCQkJCQkJY2xvbmVfZmxhZ3MpOwotCX0KLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BFUkZNT04KIAlpZiAoY3VycmVudC0+dGhyZWFkLnBmbV9jb250ZXh0KQpAQCAtNzA0LDE1ICs2NzgsNiBAQAogaW50CiBrZXJuZWxfdGhyZWFkX2hlbHBlciAoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZykKIHsKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JaWYgKElTX0lBMzJfUFJPQ0VTUyh0YXNrX3B0X3JlZ3MoY3VycmVudCkpKSB7Ci0JCS8qIEEga2VybmVsIHRocmVhZCBpcyBhbHdheXMgYSA2NC1iaXQgcHJvY2Vzcy4gKi8KLQkJY3VycmVudC0+dGhyZWFkLm1hcF9iYXNlICA9IERFRkFVTFRfTUFQX0JBU0U7Ci0JCWN1cnJlbnQtPnRocmVhZC50YXNrX3NpemUgPSBERUZBVUxUX1RBU0tfU0laRTsKLQkJaWE2NF9zZXRfa3IoSUE2NF9LUl9JT19CQVNFLCBjdXJyZW50LT50aHJlYWQub2xkX2lvYik7Ci0JCWlhNjRfc2V0X2tyKElBNjRfS1JfVFNTRCwgY3VycmVudC0+dGhyZWFkLm9sZF9rMSk7Ci0JfQotI2VuZGlmCiAJcmV0dXJuICgqZm4pKGFyZyk7CiB9CiAKQEAgLTcyNSwxNCArNjkwLDYgQEAKIAkvKiBkcm9wIGZsb2F0aW5nLXBvaW50IGFuZCBkZWJ1Zy1yZWdpc3RlciBzdGF0ZSBpZiBpdCBleGlzdHM6ICovCiAJY3VycmVudC0+dGhyZWFkLmZsYWdzICY9IH4oSUE2NF9USFJFQURfRlBIX1ZBTElEIHwgSUE2NF9USFJFQURfREJHX1ZBTElEKTsKIAlpYTY0X2Ryb3BfZnB1KGN1cnJlbnQpOwotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQlpZiAoSVNfSUEzMl9QUk9DRVNTKHRhc2tfcHRfcmVncyhjdXJyZW50KSkpIHsKLQkJaWEzMl9kcm9wX2lhNjRfcGFydGlhbF9wYWdlX2xpc3QoY3VycmVudCk7Ci0JCWN1cnJlbnQtPnRocmVhZC50YXNrX3NpemUgPSBJQTMyX1BBR0VfT0ZGU0VUOwotCQlzZXRfZnMoVVNFUl9EUyk7Ci0JCW1lbXNldChjdXJyZW50LT50aHJlYWQudGxzX2FycmF5LCAwLCBzaXplb2YoY3VycmVudC0+dGhyZWFkLnRsc19hcnJheSkpOwotCX0KLSNlbmRpZgogfQogCiAvKgpAQCAtNzUzLDggKzcxMCw2IEBACiAJaWYgKGN1cnJlbnQtPnRocmVhZC5mbGFncyAmIElBNjRfVEhSRUFEX0RCR19WQUxJRCkKIAkJcGZtX3JlbGVhc2VfZGVidWdfcmVnaXN0ZXJzKGN1cnJlbnQpOwogI2VuZGlmCi0JaWYgKElTX0lBMzJfUFJPQ0VTUyh0YXNrX3B0X3JlZ3MoY3VycmVudCkpKQotCQlpYTMyX2Ryb3BfaWE2NF9wYXJ0aWFsX3BhZ2VfbGlzdChjdXJyZW50KTsKIH0KIAogdW5zaWduZWQgbG9uZwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggOWRhYTg3Zi4uYjYxYWZiYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3B0cmFjZS5jCkBAIC0xMjUwLDEzICsxMjUwLDggQEAKIAkJbG9uZyBzeXNjYWxsOwogCQlpbnQgYXJjaDsKIAotCQlpZiAoSVNfSUEzMl9QUk9DRVNTKCZyZWdzKSkgewotCQkJc3lzY2FsbCA9IHJlZ3MucjE7Ci0JCQlhcmNoID0gQVVESVRfQVJDSF9JMzg2OwotCQl9IGVsc2UgewotCQkJc3lzY2FsbCA9IHJlZ3MucjE1OwotCQkJYXJjaCA9IEFVRElUX0FSQ0hfSUE2NDsKLQkJfQorCQlzeXNjYWxsID0gcmVncy5yMTU7CisJCWFyY2ggPSBBVURJVF9BUkNIX0lBNjQ7CiAKIAkJYXVkaXRfc3lzY2FsbF9lbnRyeShhcmNoLCBzeXNjYWxsLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTsKIAl9CkBAIC0yMTcyLDExICsyMTY3LDYgQEAKIAogY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0X3ZpZXcgKnRhc2tfdXNlcl9yZWdzZXRfdmlldyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JZXh0ZXJuIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3IHVzZXJfaWEzMl92aWV3OwotCWlmIChJU19JQTMyX1BST0NFU1ModGFza19wdF9yZWdzKHRzaykpKQotCQlyZXR1cm4gJnVzZXJfaWEzMl92aWV3OwotI2VuZGlmCiAJcmV0dXJuICZ1c2VyX2lhNjRfdmlldzsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IGExZWE4NzkuLjQxYWU2YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYXNoX2R1bXAuaD4KIAotI2luY2x1ZGUgPGFzbS9pYTMyLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vbWNhLmg+CiAjaW5jbHVkZSA8YXNtL21lbWluaXQuaD4KQEAgLTEwMTYsMTAgKzEwMTUsNiBAQAogCWlhNjRfbW11X2luaXQoaWE2NF9pbXZhKGNwdV9kYXRhKSk7CiAJaWE2NF9tY2FfY3B1X2luaXQoaWE2NF9pbXZhKGNwdV9kYXRhKSk7CiAKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JaWEzMl9jcHVfaW5pdCgpOwotI2VuZGlmCi0KIAkvKiBDbGVhciBJVEMgdG8gZWxpbWluYXRlIHNjaGVkX2Nsb2NrKCkgb3ZlcmZsb3dzIGluIGh1bWFuIHRpbWUuICAqLwogCWlhNjRfc2V0X2l0YygwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZTE4MjFjYS4uN2JkYWZjOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCi0jaW5jbHVkZSA8YXNtL2lhMzIuaD4KICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3JzZS5oPgpAQCAtNDI1LDE0ICs0MjQsOCBAQAogaGFuZGxlX3NpZ25hbCAodW5zaWduZWQgbG9uZyBzaWcsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHNpZ2luZm9fdCAqaW5mbywgc2lnc2V0X3QgKm9sZHNldCwKIAkgICAgICAgc3RydWN0IHNpZ3NjcmF0Y2ggKnNjcikKIHsKLQlpZiAoSVNfSUEzMl9QUk9DRVNTKCZzY3ItPnB0KSkgewotCQkvKiBzZW5kIHNpZ25hbCB0byBJQS0zMiBwcm9jZXNzICovCi0JCWlmICghaWEzMl9zZXR1cF9mcmFtZTEoc2lnLCBrYSwgaW5mbywgb2xkc2V0LCAmc2NyLT5wdCkpCi0JCQlyZXR1cm4gMDsKLQl9IGVsc2UKLQkJLyogc2VuZCBzaWduYWwgdG8gSUEtNjQgcHJvY2VzcyAqLwotCQlpZiAoIXNldHVwX2ZyYW1lKHNpZywga2EsIGluZm8sIG9sZHNldCwgc2NyKSkKLQkJCXJldHVybiAwOworCWlmICghc2V0dXBfZnJhbWUoc2lnLCBrYSwgaW5mbywgb2xkc2V0LCBzY3IpKQorCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCXNpZ29yc2V0cygmY3VycmVudC0+YmxvY2tlZCwgJmN1cnJlbnQtPmJsb2NrZWQsICZrYS0+c2Euc2FfbWFzayk7CkBAIC00NjIsNyArNDU1LDYgQEAKIAlzaWdpbmZvX3QgaW5mbzsKIAlsb25nIHJlc3RhcnQgPSBpbl9zeXNjYWxsOwogCWxvbmcgZXJybm8gPSBzY3ItPnB0LnI4OwotIwlkZWZpbmUgRVJSX0NPREUoYykJKElTX0lBMzJfUFJPQ0VTUygmc2NyLT5wdCkgPyAtKGMpIDogKGMpKQogCiAJLyoKIAkgKiBJbiB0aGUgaWE2NF9sZWF2ZV9rZXJuZWwgY29kZSBwYXRoLCB3ZSB3YW50IHRoZSBjb21tb24gY2FzZSB0byBnbyBmYXN0LCB3aGljaApAQCAtNDkwLDE0ICs0ODIsNyBAQAogCQkgKiBpbmZlcmlvciBjYWxsKSwgdGh1cyBpdCdzIGltcG9ydGFudCB0byBjaGVjayBmb3IgcmVzdGFydGluZyBfYWZ0ZXJfCiAJCSAqIGdldF9zaWduYWxfdG9fZGVsaXZlcigpLgogCQkgKi8KLQkJaWYgKElTX0lBMzJfUFJPQ0VTUygmc2NyLT5wdCkpIHsKLQkJCWlmIChpbl9zeXNjYWxsKSB7Ci0JCQkJaWYgKGVycm5vID49IDApCi0JCQkJCXJlc3RhcnQgPSAwOwotCQkJCWVsc2UKLQkJCQkJZXJybm8gPSAtZXJybm87Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoKGxvbmcpIHNjci0+cHQucjEwICE9IC0xKQorCQlpZiAoKGxvbmcpIHNjci0+cHQucjEwICE9IC0xKQogCQkJLyoKIAkJCSAqIEEgc3lzdGVtIGNhbGxzIGhhcyB0byBiZSByZXN0YXJ0ZWQgb25seSBpZiBvbmUgb2YgdGhlIGVycm9yIGNvZGVzCiAJCQkgKiBFUkVTVEFSVE5PSEFORCwgRVJFU1RBUlRTWVMsIG9yIEVSRVNUQVJUTk9JTlRSIGlzIHJldHVybmVkLiAgSWYgcjEwCkBAIC01MTMsMjIgKzQ5OCwxOCBAQAogCQkJc3dpdGNoIChlcnJubykgewogCQkJICAgICAgY2FzZSBFUkVTVEFSVF9SRVNUQVJUQkxPQ0s6CiAJCQkgICAgICBjYXNlIEVSRVNUQVJUTk9IQU5EOgotCQkJCXNjci0+cHQucjggPSBFUlJfQ09ERShFSU5UUik7CisJCQkJc2NyLT5wdC5yOCA9IEVJTlRSOwogCQkJCS8qIG5vdGU6IHNjci0+cHQucjEwIGlzIGFscmVhZHkgLTEgKi8KIAkJCQlicmVhazsKIAogCQkJICAgICAgY2FzZSBFUkVTVEFSVFNZUzoKIAkJCQlpZiAoKGthLnNhLnNhX2ZsYWdzICYgU0FfUkVTVEFSVCkgPT0gMCkgewotCQkJCQlzY3ItPnB0LnI4ID0gRVJSX0NPREUoRUlOVFIpOworCQkJCQlzY3ItPnB0LnI4ID0gRUlOVFI7CiAJCQkJCS8qIG5vdGU6IHNjci0+cHQucjEwIGlzIGFscmVhZHkgLTEgKi8KIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJICAgICAgY2FzZSBFUkVTVEFSVE5PSU5UUjoKLQkJCQlpZiAoSVNfSUEzMl9QUk9DRVNTKCZzY3ItPnB0KSkgewotCQkJCQlzY3ItPnB0LnI4ID0gc2NyLT5wdC5yMTsKLQkJCQkJc2NyLT5wdC5jcl9paXAgLT0gMjsKLQkJCQl9IGVsc2UKLQkJCQkJaWE2NF9kZWNyZW1lbnRfaXAoJnNjci0+cHQpOworCQkJCWlhNjRfZGVjcmVtZW50X2lwKCZzY3ItPnB0KTsKIAkJCQlyZXN0YXJ0ID0gMDsgLyogZG9uJ3QgcmVzdGFydCB0d2ljZSBpZiBoYW5kbGVfc2lnbmFsKCkgZmFpbHMuLi4gKi8KIAkJCX0KIAkJfQpAQCAtNTU1LDIxICs1MzYsMTQgQEAKIAkJaWYgKGVycm5vID09IEVSRVNUQVJUTk9IQU5EIHx8IGVycm5vID09IEVSRVNUQVJUU1lTIHx8IGVycm5vID09IEVSRVNUQVJUTk9JTlRSCiAJCSAgICB8fCBlcnJubyA9PSBFUkVTVEFSVF9SRVNUQVJUQkxPQ0spCiAJCXsKLQkJCWlmIChJU19JQTMyX1BST0NFU1MoJnNjci0+cHQpKSB7Ci0JCQkJc2NyLT5wdC5yOCA9IHNjci0+cHQucjE7Ci0JCQkJc2NyLT5wdC5jcl9paXAgLT0gMjsKLQkJCQlpZiAoZXJybm8gPT0gRVJFU1RBUlRfUkVTVEFSVEJMT0NLKQotCQkJCQlzY3ItPnB0LnI4ID0gMDsJLyogeDg2IHZlcnNpb24gb2YgX19OUl9yZXN0YXJ0X3N5c2NhbGwgKi8KLQkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBOb3RlOiB0aGUgc3lzY2FsbCBudW1iZXIgaXMgaW4gcjE1IHdoaWNoIGlzIHNhdmVkIGluCi0JCQkJICogcHRfcmVncyBzbyBhbGwgd2UgbmVlZCB0byBkbyBoZXJlIGlzIGFkanVzdCBpcCBzbyB0aGF0Ci0JCQkJICogdGhlICJicmVhayIgaW5zdHJ1Y3Rpb24gZ2V0cyByZS1leGVjdXRlZC4KLQkJCQkgKi8KLQkJCQlpYTY0X2RlY3JlbWVudF9pcCgmc2NyLT5wdCk7Ci0JCQkJaWYgKGVycm5vID09IEVSRVNUQVJUX1JFU1RBUlRCTE9DSykKLQkJCQkJc2NyLT5wdC5yMTUgPSBfX05SX3Jlc3RhcnRfc3lzY2FsbDsKLQkJCX0KKwkJCS8qCisJCQkgKiBOb3RlOiB0aGUgc3lzY2FsbCBudW1iZXIgaXMgaW4gcjE1IHdoaWNoIGlzIHNhdmVkIGluCisJCQkgKiBwdF9yZWdzIHNvIGFsbCB3ZSBuZWVkIHRvIGRvIGhlcmUgaXMgYWRqdXN0IGlwIHNvIHRoYXQKKwkJCSAqIHRoZSAiYnJlYWsiIGluc3RydWN0aW9uIGdldHMgcmUtZXhlY3V0ZWQuCisJCQkgKi8KKwkJCWlhNjRfZGVjcmVtZW50X2lwKCZzY3ItPnB0KTsKKwkJCWlmIChlcnJubyA9PSBFUkVTVEFSVF9SRVNUQVJUQkxPQ0spCisJCQkJc2NyLT5wdC5yMTUgPSBfX05SX3Jlc3RhcnRfc3lzY2FsbDsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCBkZTEwMGFhLi5lNTIzMGIyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwpAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2lhMzIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KQEAgLTQ0MywxMCArNDQyLDYgQEAKIAkJY2FsaWJyYXRlX2RlbGF5KCk7CiAJbG9jYWxfY3B1X2RhdGEtPmxvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTsKIAotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQlpYTMyX2dkdF9pbml0KCk7Ci0jZW5kaWYKLQogCS8qCiAJICogQWxsb3cgdGhlIG1hc3RlciB0byBjb250aW51ZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMKaW5kZXggYTM1YzY2MS4uNDdhMTkyNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMKQEAgLTYxLDcgKzYxLDcgQEAKIAogI2lmZGVmIENPTkZJR19QQVJBVklSVAogc3RhdGljIHZvaWQKLXBhcmF2aXJ0X2Nsb2Nrc291cmNlX3Jlc3VtZSh2b2lkKQorcGFyYXZpcnRfY2xvY2tzb3VyY2VfcmVzdW1lKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJaWYgKHB2X3RpbWVfb3BzLmNsb2Nrc291cmNlX3Jlc3VtZSkKIAkJcHZfdGltZV9vcHMuY2xvY2tzb3VyY2VfcmVzdW1lKCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMKaW5kZXggZjBjZGE3Ni4uZmQ4MGU3MCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdHJhcHMuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL2Zwc3dhLmg+Ci0jaW5jbHVkZSA8YXNtL2lhMzIuaD4KICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtNjI2LDEwICs2MjUsNiBAQAogCQlicmVhazsKIAogCSAgICAgIGNhc2UgNDU6Ci0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCQlpZiAoaWEzMl9leGNlcHRpb24oJnJlZ3MsIGlzcikgPT0gMCkKLQkJCXJldHVybjsKLSNlbmRpZgogCQlwcmludGsoS0VSTl9FUlIgIlVuZXhwZWN0ZWQgSUEtMzIgZXhjZXB0aW9uIChUcmFwIDQ1KVxuIik7CiAJCXByaW50ayhLRVJOX0VSUiAiICBpaXAgLSAweCVseCwgaWZhIC0gMHglbHgsIGlzciAtIDB4JWx4XG4iLAogCQkgICAgICAgaWlwLCBpZmEsIGlzcik7CkBAIC02MzcsMTAgKzYzMiw2IEBACiAJCWJyZWFrOwogCiAJICAgICAgY2FzZSA0NjoKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JCWlmIChpYTMyX2ludGVyY2VwdCgmcmVncywgaXNyKSA9PSAwKQotCQkJcmV0dXJuOwotI2VuZGlmCiAJCXByaW50ayhLRVJOX0VSUiAiVW5leHBlY3RlZCBJQS0zMiBpbnRlcmNlcHQgdHJhcCAoVHJhcCA0NilcbiIpOwogCQlwcmludGsoS0VSTl9FUlIgIiAgaWlwIC0gMHglbHgsIGlmYSAtIDB4JWx4LCBpc3IgLSAweCVseCwgaWltIC0gMHglbHhcbiIsCiAJCSAgICAgICBpaXAsIGlmYSwgaXNyLCBpaW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2luaXQuYyBiL2FyY2gvaWE2NC9tbS9pbml0LmMKaW5kZXggN2MwZDQ4MS4uY2EzMzM1ZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2luaXQuYworKysgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KIAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxhc20vaWEzMi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL251bWEuaD4KQEAgLTY2OCwxMCArNjY3LDYgQEAKIAkJCWZzeXNjYWxsX3RhYmxlW2ldID0gc3lzX2NhbGxfdGFibGVbaV0gfCAxOwogCX0KIAlzZXR1cF9nYXRlKCk7Ci0KLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JaWEzMl9tZW1faW5pdCgpOwotI2VuZGlmCiB9CiAKICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9wY2kvcGNpLmMgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCmluZGV4IGRmNjM5ZGI3Li42NGFmZjUyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvcGNpL3BjaS5jCisrKyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKQEAgLTMyMCw5ICszMjAsOSBAQAogc3RhdGljIHZvaWQgX19kZXZpbml0CiBwY2liaW9zX3NldHVwX3Jvb3Rfd2luZG93cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmN0cmwpCiB7Ci0JaW50IGksIGo7CisJaW50IGk7CiAKLQlqID0gMDsKKwlwY2lfYnVzX3JlbW92ZV9yZXNvdXJjZXMoYnVzKTsKIAlmb3IgKGkgPSAwOyBpIDwgY3RybC0+d2luZG93czsgaSsrKSB7CiAJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmN0cmwtPndpbmRvd1tpXS5yZXNvdXJjZTsKIAkJLyogSFAncyBmaXJtd2FyZSBoYXMgYSBoYWNrIHRvIHdvcmsgYXJvdW5kIGEgV2luZG93cyBidWcuCkBAIC0zMzAsMTMgKzMzMCw3IEBACiAJCWlmICgocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSAmJgogCQkgICAgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCA8IDE2KSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoaiA+PSBQQ0lfQlVTX05VTV9SRVNPVVJDRVMpIHsKLQkJCWRldl93YXJuKCZidXMtPmRldiwKLQkJCQkgImlnbm9yaW5nIGhvc3QgYnJpZGdlIHdpbmRvdyAlcFIgKG5vIHNwYWNlKVxuIiwKLQkJCQkgcmVzKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWJ1cy0+cmVzb3VyY2VbaisrXSA9IHJlczsKKwkJcGNpX2J1c19hZGRfcmVzb3VyY2UoYnVzLCByZXMsIDApOwogCX0KIH0KIApAQCAtNDUyLDEzICs0NDYsMTIgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGlzX3ZhbGlkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZHgpCiB7CiAJdW5zaWduZWQgaW50IGksIHR5cGVfbWFzayA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKmRldnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOworCXN0cnVjdCByZXNvdXJjZSAqZGV2ciA9ICZkZXYtPnJlc291cmNlW2lkeF0sICpidXNyOwogCiAJaWYgKCFkZXYtPmJ1cykKIAkJcmV0dXJuIDA7Ci0JZm9yIChpPTA7IGk8UENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLQkJc3RydWN0IHJlc291cmNlICpidXNyID0gZGV2LT5idXMtPnJlc291cmNlW2ldOwogCisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShkZXYtPmJ1cywgYnVzciwgaSkgewogCQlpZiAoIWJ1c3IgfHwgKChidXNyLT5mbGFncyBeIGRldnItPmZsYWdzKSAmIHR5cGVfbWFzaykpCiAJCQljb250aW51ZTsKIAkJaWYgKChkZXZyLT5zdGFydCkgJiYgKGRldnItPnN0YXJ0ID49IGJ1c3ItPnN0YXJ0KSAmJgpAQCAtNTQ3LDEwICs1NDAsMTEgQEAKIAkJYWNwaV9wY2lfaXJxX2Rpc2FibGUoZGV2KTsKIH0KIAotdm9pZAotcGNpYmlvc19hbGlnbl9yZXNvdXJjZSAodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCityZXNvdXJjZV9zaXplX3QKK3BjaWJpb3NfYWxpZ25fcmVzb3VyY2UgKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkgICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CisJcmV0dXJuIHJlcy0+c3RhcnQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMKaW5kZXggZWNlMWJmOS4uZTQ1NmYwNiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYwpAQCAtNzEsNyArNzEsNyBAQAogREVGSU5FX1BFUl9DUFUoc3RydWN0IHNuX2h1Yl9pbmZvX3MsIF9fc25faHViX2luZm8pOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKF9fc25faHViX2luZm8pOwogCi1ERUZJTkVfUEVSX0NQVShzaG9ydCBbTUFYX0NPTVBBQ1RfTk9ERVNdLCBfX3NuX2Nub2RlaWRfdG9fbmFzaWQpOworREVGSU5FX1BFUl9DUFUoc2hvcnQsIF9fc25fY25vZGVpZF90b19uYXNpZFtNQVhfQ09NUEFDVF9OT0RFU10pOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKF9fc25fY25vZGVpZF90b19uYXNpZCk7CiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBub2RlcGRhX3MgKiwgX19zbl9ub2RlcGRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC91di9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC91di9rZXJuZWwvc2V0dXAuYwppbmRleCA3YTVhZTYzLi5mMTQ5MDY1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvdXYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L3V2L2tlcm5lbC9zZXR1cC5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmxvd21lbV9yZW1hcF90b3AgPQogCQkJbG93bWVtX3JlZGlyX2Jhc2UgKyBsb3dtZW1fcmVkaXJfc2l6ZTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm1fdmFsID0gbV92YWw7Ci0JCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5uX3ZhbCA9IG1fdmFsOworCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bl92YWwgPSBuX3ZhbDsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnBub2RlX21hc2sgPSAoMSA8PCBuX3ZhbCkgLTE7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5ncGFfbWFzayA9ICgxIDw8IChtX3ZhbCArIG5fdmFsKSkgLSAxOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z25vZGVfdXBwZXIgPSBnbm9kZV91cHBlcjsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4vaHlwZXJjYWxsLlMgYi9hcmNoL2lhNjQveGVuL2h5cGVyY2FsbC5TCmluZGV4IGUzMmRhZTQuLjA4ODQ3YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC94ZW4vaHlwZXJjYWxsLlMKKysrIGIvYXJjaC9pYTY0L3hlbi9oeXBlcmNhbGwuUwpAQCAtNTgsMTEgKzU4LDYgQEAKIF9fSENBTEwyKHhlbl9zZXRfcnIsIEhZUEVSUFJJVk9QX1NFVF9SUikKIF9fSENBTEwyKHhlbl9zZXRfa3IsIEhZUEVSUFJJVk9QX1NFVF9LUikKIAotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLV9fSENBTEwwKHhlbl9nZXRfZWZsYWcsIEhZUEVSUFJJVk9QX0dFVF9FRkxBRykKLV9fSENBTEwxKHhlbl9zZXRfZWZsYWcsIEhZUEVSUFJJVk9QX1NFVF9FRkxBRykJLy8gcmVmZXIgU0RNIHZvbDEgMy4xLjgKLSNlbmRpZiAvKiBDT05GSUdfSUEzMl9TVVBQT1JUICovCi0KIEdMT0JBTF9FTlRSWSh4ZW5fc2V0X3JyMF90b19ycjQpCiAJbW92IHI4PXIzMgogCW1vdiByOT1yMzMKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4veGVuX3B2X29wcy5jIGIvYXJjaC9pYTY0L3hlbi94ZW5fcHZfb3BzLmMKaW5kZXggNWUyMjcwYS4uOGFkYzZhMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3hlbi94ZW5fcHZfb3BzLmMKKysrIGIvYXJjaC9pYTY0L3hlbi94ZW5fcHZfb3BzLmMKQEAgLTMwMSwxMSArMzAxLDYgQEAKIAljYXNlIF9JQTY0X1JFR19BUl9LUjAgLi4uIF9JQTY0X1JFR19BUl9LUjc6CiAJCXhlbl9zZXRfa3IocmVnbnVtIC0gX0lBNjRfUkVHX0FSX0tSMCwgdmFsKTsKIAkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAotCWNhc2UgX0lBNjRfUkVHX0FSX0VGTEFHOgotCQl4ZW5fc2V0X2VmbGFnKHZhbCk7Ci0JCWJyZWFrOwotI2VuZGlmCiAJY2FzZSBfSUE2NF9SRUdfQVJfSVRDOgogCQl4ZW5fc2V0X2l0Yyh2YWwpOwogCQlicmVhazsKQEAgLTMzMiwxMSArMzI3LDYgQEAKIAljYXNlIF9JQTY0X1JFR19QU1I6CiAJCXJlcyA9IHhlbl9nZXRfcHNyKCk7CiAJCWJyZWFrOwotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQljYXNlIF9JQTY0X1JFR19BUl9FRkxBRzoKLQkJcmVzID0geGVuX2dldF9lZmxhZygpOwotCQlicmVhazsKLSNlbmRpZgogCWNhc2UgX0lBNjRfUkVHX0FSX0lUQzoKIAkJcmVzID0geGVuX2dldF9pdGMoKTsKIAkJYnJlYWs7CkBAIC03MTAsOSArNzAwLDYgQEAKIAogX19ERUZJTkVfRlVOQyhnZXRyZWcsCiAJICAgICAgX19ERUZJTkVfR0VUX1JFRyhQU1IsIFBTUikKLSNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCi0JICAgICAgX19ERUZJTkVfR0VUX1JFRyhBUl9FRkxBRywgRUZMQUcpCi0jZW5kaWYKIAogCSAgICAgIC8qIGdldF9pdGMgKi8KIAkgICAgICAibW92IHIyID0gIiBfX3N0cmluZ2lmeShfSUE2NF9SRUdfQVJfSVRDKSAiXG4iCkBAIC03ODksOSArNzc2LDYgQEAKIAkgICAgICAiOztcbiIKIAkgICAgICAiKHA2KSBici5jb25kLnNwbnQgeGVuX3NldF9pdGNcbiIKIAotI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKLQkgICAgICBfX0RFRklORV9TRVRfUkVHKEFSX0VGTEFHLCBTRVRfRUZMQUcpCi0jZW5kaWYKIAkgICAgICBfX0RFRklORV9TRVRfUkVHKENSX1RQUiwgU0VUX1RQUikKIAkgICAgICBfX0RFRklORV9TRVRfUkVHKENSX0VPSSwgRU9JKQogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IDBlZjk1MzAuLjkyNjE0YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC05Miw2ICs5Miw2IEBACiAJKTsKIH0KIAotZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QpOworZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7CiAKICNlbmRpZgkvKiBfQVNNX00zMlJfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21tL2ZhdWx0LW5vbW11LmMgYi9hcmNoL20zMnIvbW0vZmF1bHQtbm9tbXUuYwppbmRleCA4ODQ2OTE3Li44ODhhYWIxIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbW0vZmF1bHQtbm9tbXUuYworKysgYi9hcmNoL20zMnIvbW0vZmF1bHQtbm9tbXUuYwpAQCAtOTUsNyArOTUsNyBAQAogICogdXBkYXRlX21tdV9jYWNoZSgpCiAgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JcHRlX3QgcHRlKQorCXB0ZV90ICpwdGVwKQogewogCUJVRygpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21tL2ZhdWx0LmMgYi9hcmNoL20zMnIvbW0vZmF1bHQuYwppbmRleCA3Mjc0YjQ3Li4yOGVlMzg5IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbW0vZmF1bHQuYworKysgYi9hcmNoL20zMnIvbW0vZmF1bHQuYwpAQCAtMzM2LDcgKzMzNiw3IEBACiAKIAkJYWRkciA9IChhZGRyZXNzICYgUEFHRV9NQVNLKTsKIAkJc2V0X3RocmVhZF9mYXVsdF9jb2RlKGVycm9yX2NvZGUpOwotCQl1cGRhdGVfbW11X2NhY2hlKE5VTEwsIGFkZHIsICpwdGVfayk7CisJCXVwZGF0ZV9tbXVfY2FjaGUoTlVMTCwgYWRkciwgcHRlX2spOwogCQlzZXRfdGhyZWFkX2ZhdWx0X2NvZGUoMCk7CiAJCXJldHVybjsKIAl9CkBAIC0zNDksNyArMzQ5LDcgQEAKICNkZWZpbmUgSVRMQl9FTkQJKHVuc2lnbmVkIGxvbmcgKikoSVRMQl9CQVNFICsgKE5SX1RMQl9FTlRSSUVTICogOCkpCiAjZGVmaW5lIERUTEJfRU5ECSh1bnNpZ25lZCBsb25nICopKERUTEJfQkFTRSArIChOUl9UTEJfRU5UUklFUyAqIDgpKQogdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZhZGRyLAotCXB0ZV90IHB0ZSkKKwlwdGVfdCAqcHRlcCkKIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICplbnRyeTEsICplbnRyeTI7CiAJdW5zaWduZWQgbG9uZyBwdGVfZGF0YSwgZmxhZ3M7CkBAIC0zNjUsNyArMzY1LDcgQEAKIAogCXZhZGRyID0gKHZhZGRyICYgUEFHRV9NQVNLKSB8IGdldF9hc2lkKCk7CiAKLQlwdGVfZGF0YSA9IHB0ZV92YWwocHRlKTsKKwlwdGVfZGF0YSA9IHB0ZV92YWwoKnB0ZXApOwogCiAjaWZkZWYgQ09ORklHX0NISVBfT1BTUAogCWVudHJ5MSA9ICh1bnNpZ25lZCBsb25nICopSVRMQl9CQVNFOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZwppbmRleCBlY2RjMTlhLi5iNWRhMjk4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZworKysgYi9hcmNoL202OGsvS2NvbmZpZwpAQCAtNTM2LDEwICs1MzYsNiBAQAogCSAgU2F5IFkgdG8gZW5hYmxlIGRvaW5nIElQIG92ZXIgdGhlIHBhcmFsbGVsIHBvcnQgb24geW91ciBHVlAKIAkgIElPLUV4dGVuZGVyIGNhcmQsIE4gb3RoZXJ3aXNlLgogCi1jb25maWcgTUFDX1NDQwotCXRyaXN0YXRlICJNYWNpbnRvc2ggc2VyaWFsIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNQUMKLQogY29uZmlnIE1BQ19ISUQKIAlib29sCiAJZGVwZW5kcyBvbiBJTlBVVF9BREJISUQKQEAgLTU5NSw3ICs1OTEsNyBAQAogCiBjb25maWcgU0VSSUFMX0NPTlNPTEUKIAlib29sICJTdXBwb3J0IGZvciBzZXJpYWwgcG9ydCBjb25zb2xlIgotCWRlcGVuZHMgb24gKEFNSUdBIHx8IEFUQVJJIHx8IE1BQyB8fCBTVU4zIHx8IFNVTjNYIHx8IFZNRSB8fCBBUE9MTE8pICYmIChBVEFSSV9NRlBTRVI9eSB8fCBBVEFSSV9NSURJPXkgfHwgTUFDX1NDQz15IHx8IEFNSUdBX0JVSUxUSU5fU0VSSUFMPXkgfHwgR1ZQSU9FWFQ9eSB8fCBNVUxUSUZBQ0VfSUlJX1RUWT15IHx8IFNFUklBTD15IHx8IE1WTUUxNDdfU0NDIHx8IFNFUklBTDE2NyB8fCBNVk1FMTYyX1NDQyB8fCBCVk1FNjAwMF9TQ0MgfHwgRE5fU0VSSUFMKQorCWRlcGVuZHMgb24gKEFNSUdBIHx8IEFUQVJJIHx8IFNVTjMgfHwgU1VOM1ggfHwgVk1FIHx8IEFQT0xMTykgJiYgKEFUQVJJX01GUFNFUj15IHx8IEFUQVJJX01JREk9eSB8fCBBTUlHQV9CVUlMVElOX1NFUklBTD15IHx8IEdWUElPRVhUPXkgfHwgTVVMVElGQUNFX0lJSV9UVFk9eSB8fCBTRVJJQUw9eSB8fCBNVk1FMTQ3X1NDQyB8fCBTRVJJQUwxNjcgfHwgTVZNRTE2Ml9TQ0MgfHwgQlZNRTYwMDBfU0NDIHx8IEROX1NFUklBTCkKIAktLS1oZWxwLS0tCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byB1c2UgYSBzZXJpYWwgcG9ydCBhcyB0aGUKIAkgIHN5c3RlbSBjb25zb2xlICh0aGUgc3lzdGVtIGNvbnNvbGUgaXMgdGhlIGRldmljZSB3aGljaCByZWNlaXZlcyBhbGwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYyBiL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYwppbmRleCA2Yzc0NzUxLi5kMmNjMzVkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCkBAIC00ODAsNyArNDgwLDcgQEAKIAlzdGF0aWMgc3RydWN0IHJlc291cmNlIHNjaGVkX3JlcyA9IHsKIAkJLm5hbWUgPSAidGltZXIiLCAuc3RhcnQgPSAweDAwYmZkNDAwLCAuZW5kID0gMHgwMGJmZDVmZiwKIAl9OwotCWppZmZ5X3RpY2tzID0gKGFtaWdhX2VjbG9jaytIWi8yKS9IWjsKKwlqaWZmeV90aWNrcyA9IERJVl9ST1VORF9DTE9TRVNUKGFtaWdhX2VjbG9jaywgSFopOwogCiAJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJm1iX3Jlc291cmNlcy5fY2lhYiwgJnNjaGVkX3JlcykpCiAJCXByaW50aygiQ2Fubm90IGFsbG9jYXRlIGNpYWIudGF7bG8saGl9XG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnCmluZGV4IDk5OTFiNjQuLmM1ZjMyMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZwpAQCAtNzAxLDYgKzcwMSwxMSBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0c9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0dfVFRZUz15CitDT05GSUdfU0VSSUFMX1BNQUNaSUxPR19DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC04MzQsOSArODM5LDcgQEAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLUNPTkZJR19NQUNfU0NDPXkKIENPTkZJR19NQUNfSElEPXkKLUNPTkZJR19TRVJJQUxfQ09OU09MRT15CiAKICMKICMgRmlsZSBzeXN0ZW1zCmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWcKaW5kZXggNjljNDNlMi4uYThiZmEzZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZwpAQCAtODIyLDYgKzgyMiwxMSBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0c9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0dfVFRZUz15CitDT05GSUdfU0VSSUFMX1BNQUNaSUxPR19DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC05ODIsNyArOTg3LDYgQEAKIENPTkZJR19BVEFSSV9EU1A1Nks9bQogQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMPXkKIENPTkZJR19NVUxUSUZBQ0VfSUlJX1RUWT1tCi1DT05GSUdfTUFDX1NDQz15CiBDT05GSUdfTUFDX0hJRD15CiBDT05GSUdfTVZNRTE0N19TQ0M9eQogQ09ORklHX1NFUklBTDE2Nz15CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaHcuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNody5oCmluZGV4IDJiNGRlMGMuLmEyMjA5NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNody5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNody5oCkBAIC0yMSwyOSArMjEsNCBAQAogI2RlZmluZSBWSURFT01FTVNJWkUJKDQwOTYqMTAyNCkKICNkZWZpbmUgVklERU9NRU1NQVNLCSgtNDA5NioxMDI0KQogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2lmIDAKLS8qCi0qKiBTQ0MgWjg1MzAKLSovCi0KLSNkZWZpbmUgTUFDX1NDQ19CQVMgKDB4NTBGMDQwMDApCi1zdHJ1Y3QgTUFDX1NDQwotIHsKLSAgdV9jaGFyIGNoYV9hX2N0cmw7Ci0gIHVfY2hhciBjaGFyX2R1bW15MTsKLSAgdV9jaGFyIGNoYV9hX2RhdGE7Ci0gIHVfY2hhciBjaGFyX2R1bW15MjsKLSAgdV9jaGFyIGNoYV9iX2N0cmw7Ci0gIHVfY2hhciBjaGFyX2R1bW15MzsKLSAgdV9jaGFyIGNoYV9iX2RhdGE7Ci0gfTsKLSMgZGVmaW5lIG1hY19zY2MgKCgqKHZvbGF0aWxlIHN0cnVjdCBTQ0MqKU1BQ19TQ0NfQkFTKSkKLSNlbmRpZgotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KICNlbmRpZiAvKiBsaW51eC9tYWNody5oICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50cy5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludHMuaAppbmRleCA2NzljNDhhLi5lYmUxYjcwIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50cy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRzLmgKQEAgLTM3LDcgKzM3LDYgQEAKIAogI2RlZmluZSBWSUExX1NPVVJDRV9CQVNFCTgKICNkZWZpbmUgVklBMl9TT1VSQ0VfQkFTRQkxNgotI2RlZmluZSBNQUNfU0NDX1NPVVJDRV9CQVNFCTI0CiAjZGVmaW5lIFBTQzNfU09VUkNFX0JBU0UJMjQKICNkZWZpbmUgUFNDNF9TT1VSQ0VfQkFTRQkzMgogI2RlZmluZSBQU0M1X1NPVVJDRV9CQVNFCTQwCkBAIC05NiwyNiArOTUsMTIgQEAKICNkZWZpbmUgSVJRX1BTQzNfMgkgICgyNikKICNkZWZpbmUgSVJRX1BTQzNfMwkgICgyNykKIAotLyogTGV2ZWwgNCAoU0NDKSBpbnRlcnJ1cHRzICovCi0jZGVmaW5lIElSUV9TQ0MJCSAgICAgKDMyKQotI2RlZmluZSBJUlFfU0NDQQkgICAgICgzMykKLSNkZWZpbmUgSVJRX1NDQ0IJICAgICAoMzQpCi0jaWYgMCAvKiBGSVhNRTogYXJlIHRoZXJlIG11bHRpcGxlIGludGVycnVwdCBjb25kaXRpb25zIG9uIHRoZSBTQ0MgPz8gKi8KLS8qIFNDQyBpbnRlcnJ1cHRzICovCi0jZGVmaW5lIElSUV9TQ0NCX1RYCSAgICAgKDMyKQotI2RlZmluZSBJUlFfU0NDQl9TVEFUCSAgICAgKDMzKQotI2RlZmluZSBJUlFfU0NDQl9SWAkgICAgICgzNCkKLSNkZWZpbmUgSVJRX1NDQ0JfU1BDT05ECSAgICAgKDM1KQotI2RlZmluZSBJUlFfU0NDQV9UWAkgICAgICgzNikKLSNkZWZpbmUgSVJRX1NDQ0FfU1RBVAkgICAgICgzNykKLSNkZWZpbmUgSVJRX1NDQ0FfUlgJICAgICAoMzgpCi0jZGVmaW5lIElSUV9TQ0NBX1NQQ09ORAkgICAgICgzOSkKLSNlbmRpZgotCiAvKiBMZXZlbCA0IChQU0MsIEFWIE1hY3Mgb25seSkgaW50ZXJydXB0cyAqLwogI2RlZmluZSBJUlFfUFNDNF8wCSAgKDMyKQogI2RlZmluZSBJUlFfUFNDNF8xCSAgKDMzKQorI2RlZmluZSBJUlFfTUFDX1NDQ19BCSAgSVJRX1BTQzRfMQogI2RlZmluZSBJUlFfUFNDNF8yCSAgKDM0KQorI2RlZmluZSBJUlFfTUFDX1NDQ19CCSAgSVJRX1BTQzRfMgogI2RlZmluZSBJUlFfUFNDNF8zCSAgKDM1KQogI2RlZmluZSBJUlFfTUFDX01BQ0VfRE1BICBJUlFfUFNDNF8zCiAKQEAgLTE0Niw2ICsxMzEsOSBAQAogI2RlZmluZSBJUlFfQkFCT09OXzIJICAoNjYpCiAjZGVmaW5lIElSUV9CQUJPT05fMwkgICg2NykKIAorLyogT24gbm9uLVBTQyBtYWNoaW5lcywgdGhlIHNlcmlhbCBwb3J0cyBzaGFyZSBhbiBJUlEgKi8KKyNkZWZpbmUgSVJRX01BQ19TQ0MJICBJUlFfQVVUT180CisKICNkZWZpbmUgU0xPVDJJUlEoeCkJICAoeCArIDQ3KQogI2RlZmluZSBJUlEyU0xPVCh4KQkgICh4IC0gNDcpCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ3RhYmxlX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGd0YWJsZV9tbS5oCmluZGV4IGFjYTBlMjguLjg3MTc0YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ3RhYmxlX21tLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BndGFibGVfbW0uaApAQCAtMTE1LDcgKzExNSw3IEBACiAgKiB0aGV5IGFyZSB1cGRhdGVkIG9uIGRlbWFuZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQorCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogewogfQogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggZWU0MDExYy4uMjE2MDVjNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtNzEsNiArNzEsOCBAQAogI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTICAgICAgICAgIDE0CiAjZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1MgICAgICAgICAgMTUKIAorI2RlZmluZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBICAgIDI1CisKICNkZWZpbmUgUFRSQUNFX1NJTkdMRUJMT0NLCTMzCS8qIHJlc3VtZSBleGVjdXRpb24gdW50aWwgbmV4dCBicmFuY2ggKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCmluZGV4IDUyM2RiMmEuLjEzMjBlYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApAQCAtMTUsOSArMTUsMTUgQEAKIAl1bnNpZ25lZCBsb25nICBzY19wYzsKIAl1bnNpZ25lZCBzaG9ydCBzY19mb3JtYXR2ZWM7CiAjaWZuZGVmIF9fdUNsaW51eF9fCisjIGlmZGVmIF9fbWNvbGRmaXJlX18KKwl1bnNpZ25lZCBsb25nICBzY19mcHJlZ3NbMl1bMl07CS8qIHJvb20gZm9yIHR3byBmcCByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBsb25nICBzY19mcGNudGxbM107CisJdW5zaWduZWQgY2hhciAgc2NfZnBzdGF0ZVsxNis2KjhdOworIyBlbHNlCiAJdW5zaWduZWQgbG9uZyAgc2NfZnByZWdzWzIqM107ICAvKiByb29tIGZvciB0d28gZnAgcmVnaXN0ZXJzICovCiAJdW5zaWduZWQgbG9uZyAgc2NfZnBjbnRsWzNdOwogCXVuc2lnbmVkIGNoYXIgIHNjX2Zwc3RhdGVbMjE2XTsKKyMgZW5kaWYKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKaW5kZXggY2E3ZGRlOC4uODUxZDNkNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mby5oCkBAIC0xLDk3ICsxLDYgQEAKICNpZm5kZWYgX002OEtfU0lHSU5GT19ICiAjZGVmaW5lIF9NNjhLX1NJR0lORk9fSAogCi0jaWZuZGVmIF9fdUNsaW51eF9fCi0jZGVmaW5lIEhBVkVfQVJDSF9TSUdJTkZPX1QKLSNkZWZpbmUgSEFWRV9BUkNIX0NPUFlfU0lHSU5GTwotI2VuZGlmCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CiAKLSNpZm5kZWYgX191Q2xpbnV4X18KLQotdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7Ci0JaW50IHNpX3NpZ25vOwotCWludCBzaV9lcnJubzsKLQlpbnQgc2lfY29kZTsKLQotCXVuaW9uIHsKLQkJaW50IF9wYWRbU0lfUEFEX1NJWkVdOwotCi0JCS8qIGtpbGwoKSAqLwotCQlzdHJ1Y3QgewotCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCi0JCQlfX2tlcm5lbF91aWRfdCBfdWlkOwkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwotCQkJX19rZXJuZWxfdWlkMzJfdCBfdWlkMzI7IC8qIHNlbmRlcidzIHVpZCAqLwotCQl9IF9raWxsOwotCi0JCS8qIFBPU0lYLjFiIHRpbWVycyAqLwotCQlzdHJ1Y3QgewotCQkJdGltZXJfdCBfdGlkOwkJLyogdGltZXIgaWQgKi8KLQkJCWludCBfb3ZlcnJ1bjsJCS8qIG92ZXJydW4gY291bnQgKi8KLQkJCWNoYXIgX3BhZFtzaXplb2YoIF9fQVJDSF9TSV9VSURfVCkgLSBzaXplb2YoaW50KV07Ci0JCQlzaWd2YWxfdCBfc2lndmFsOwkvKiBzYW1lIGFzIGJlbG93ICovCi0JCQlpbnQgX3N5c19wcml2YXRlOyAgICAgICAvKiBub3QgdG8gYmUgcGFzc2VkIHRvIHVzZXIgKi8KLQkJfSBfdGltZXI7Ci0KLQkJLyogUE9TSVguMWIgc2lnbmFscyAqLwotCQlzdHJ1Y3QgewotCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCi0JCQlfX2tlcm5lbF91aWRfdCBfdWlkOwkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwotCQkJc2lndmFsX3QgX3NpZ3ZhbDsKLQkJCV9fa2VybmVsX3VpZDMyX3QgX3VpZDMyOyAvKiBzZW5kZXIncyB1aWQgKi8KLQkJfSBfcnQ7Ci0KLQkJLyogU0lHQ0hMRCAqLwotCQlzdHJ1Y3QgewotCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogd2hpY2ggY2hpbGQgKi8KLQkJCV9fa2VybmVsX3VpZF90IF91aWQ7CS8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0JCQlpbnQgX3N0YXR1czsJCS8qIGV4aXQgY29kZSAqLwotCQkJY2xvY2tfdCBfdXRpbWU7Ci0JCQljbG9ja190IF9zdGltZTsKLQkJCV9fa2VybmVsX3VpZDMyX3QgX3VpZDMyOyAvKiBzZW5kZXIncyB1aWQgKi8KLQkJfSBfc2lnY2hsZDsKLQotCQkvKiBTSUdJTEwsIFNJR0ZQRSwgU0lHU0VHViwgU0lHQlVTICovCi0JCXN0cnVjdCB7Ci0JCQl2b2lkICpfYWRkcjsgLyogZmF1bHRpbmcgaW5zbi9tZW1vcnkgcmVmLiAqLwotCQl9IF9zaWdmYXVsdDsKLQotCQkvKiBTSUdQT0xMICovCi0JCXN0cnVjdCB7Ci0JCQlpbnQgX2JhbmQ7CS8qIFBPTExfSU4sIFBPTExfT1VULCBQT0xMX01TRyAqLwotCQkJaW50IF9mZDsKLQkJfSBfc2lncG9sbDsKLQl9IF9zaWZpZWxkczsKLX0gc2lnaW5mb190OwotCi0jZGVmaW5lIFVJRDE2X1NJR0lORk9fQ09NUEFUX05FRURFRAotCi0vKgotICogSG93IHRoZXNlIGZpZWxkcyBhcmUgdG8gYmUgYWNjZXNzZWQuCi0gKi8KLSN1bmRlZiBzaV91aWQKLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIHNpX3VpZAkJX3NpZmllbGRzLl9raWxsLl91aWQzMgotI2RlZmluZSBzaV91aWQxNglfc2lmaWVsZHMuX2tpbGwuX3VpZAotI2Vsc2UKLSNkZWZpbmUgc2lfdWlkCQlfc2lmaWVsZHMuX2tpbGwuX3VpZAotI2VuZGlmCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLQotc3RhdGljIGlubGluZSB2b2lkIGNvcHlfc2lnaW5mbyhzdHJ1Y3Qgc2lnaW5mbyAqdG8sIHN0cnVjdCBzaWdpbmZvICpmcm9tKQotewotCWlmIChmcm9tLT5zaV9jb2RlIDwgMCkKLQkJbWVtY3B5KHRvLCBmcm9tLCBzaXplb2YoKnRvKSk7Ci0JZWxzZQotCQkvKiBfc2lnY2hsZCBpcyBjdXJyZW50bHkgdGhlIGxhcmdlc3Qga25vdyB1bmlvbiBtZW1iZXIgKi8KLQkJbWVtY3B5KHRvLCBmcm9tLCAzKnNpemVvZihpbnQpICsgc2l6ZW9mKGZyb20tPl9zaWZpZWxkcy5fc2lnY2hsZCkpOwotfQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qICFfX3VDbGludXhfXyAqLwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IDViNzU0YWEuLmI3YjM3YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMTQsNyArMTQsNyBAQAogfQogCiAjZGVmaW5lIF9fYXJjaF9zd2FiMzIgX19hcmNoX3N3YWIzMgotI2VsaWYgIWRlZmluZWQoX191Q2xpbnV4X18pCisjZWxpZiAhZGVmaW5lZChfX21jb2xkZmlyZV9fKQogCiBzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIgX19hcmNoX3N3YWIzMihfX3UzMiB2YWwpCiB7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19tbS5oCmluZGV4IDE2N2U1MTguLjY3MjY2YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19tbS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19tbS5oCkBAIC0xNiw2ICsxNiw3IEBACiAJc3RydWN0IGV4ZWNfZG9tYWluCSpleGVjX2RvbWFpbjsJLyogZXhlY3V0aW9uIGRvbWFpbiAqLwogCWludAkJCXByZWVtcHRfY291bnQ7CS8qIDAgPT4gcHJlZW1wdGFibGUsIDwwID0+IEJVRyAqLwogCV9fdTMyIGNwdTsgLyogc2hvdWxkIGFsd2F5cyBiZSAwIG9uIG02OGsgKi8KKwl1bnNpZ25lZCBsb25nCQl0cF92YWx1ZTsJLyogdGhyZWFkIHBvaW50ZXIgKi8KIAlzdHJ1Y3QgcmVzdGFydF9ibG9jayAgICByZXN0YXJ0X2Jsb2NrOwogfTsKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvX25vLmgKaW5kZXggYTY1MTJiZi4uODg0Nzc2ZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvX25vLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvX25vLmgKQEAgLTM3LDYgKzM3LDcgQEAKIAl1bnNpZ25lZCBsb25nCSAgIGZsYWdzOwkJLyogbG93IGxldmVsIGZsYWdzICovCiAJaW50CQkgICBjcHU7CQkJLyogY3B1IHdlJ3JlIG9uICovCiAJaW50CQkgICBwcmVlbXB0X2NvdW50OwkvKiAwID0+IHByZWVtcHRhYmxlLCA8MCA9PiBCVUcgKi8KKwl1bnNpZ25lZCBsb25nCSAgIHRwX3ZhbHVlOwkJLyogdGhyZWFkIHBvaW50ZXIgKi8KIAlzdHJ1Y3QgcmVzdGFydF9ibG9jayByZXN0YXJ0X2Jsb2NrOwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHQuaAppbmRleCBlNGUyMjY2Li4wMGRjYzUxIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHQuaApAQCAtNyw3ICs3LDExIEBACiAKIHR5cGVkZWYgc3RydWN0IGZwcmVnc2V0IHsKIAlpbnQgZl9mcGNudGxbM107CisjaWZkZWYgX19tY29sZGZpcmVfXworCWludCBmX2ZwcmVnc1s4XVsyXTsKKyNlbHNlCiAJaW50IGZfZnByZWdzWzgqM107CisjZW5kaWYKIH0gZnByZWdzZXRfdDsKIAogc3RydWN0IG1jb250ZXh0IHsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA0OGI4N2Y1Li5kNzJhNzFkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zMzYsMTAgKzMzNiwxNCBAQAogI2RlZmluZSBfX05SX3B3cml0ZXYJCTMzMAogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCTMzMQogI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkzMzIKKyNkZWZpbmUgX19OUl9nZXRfdGhyZWFkX2FyZWEJMzMzCisjZGVmaW5lIF9fTlJfc2V0X3RocmVhZF9hcmVhCTMzNAorI2RlZmluZSBfX05SX2F0b21pY19jbXB4Y2hnXzMyCTMzNQorI2RlZmluZSBfX05SX2F0b21pY19iYXJyaWVyCTMzNgogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jZGVmaW5lIE5SX3N5c2NhbGxzCQkzMzMKKyNkZWZpbmUgTlJfc3lzY2FsbHMJCTMzNwogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdmlydGNvbnZlcnQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS92aXJ0Y29udmVydC5oCmluZGV4IDNmODM0YjMuLmYzNTIyOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS92aXJ0Y29udmVydC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS92aXJ0Y29udmVydC5oCkBAIC0zMSwxMiArMzEsNyBAQAogI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkgXAogCV9fcGEoUEFHRV9PRkZTRVQgKyAoKChwYWdlKSAtIHBnX2RhdGFfbWFwWzBdLm5vZGVfbWVtX21hcCkgPDwgUEFHRV9TSElGVCkpCiAjZWxzZQotI2RlZmluZSBwYWdlX3RvX3BoeXMoX3BhZ2UpICh7CQkJCQkJXAotCXN0cnVjdCBwYWdlICpfX3BhZ2UgPSBfcGFnZTsJCQkJCVwKLQlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0OwkJCQkJXAotCXBnZGF0ID0gcGdfZGF0YV90YWJsZVtwYWdlX3RvX25pZChfX3BhZ2UpXTsJCQlcCi0JcGFnZV90b19wZm4oX19wYWdlKSA8PCBQQUdFX1NISUZUOwkJCQlcCi19KQorI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJKHBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCiAjZW5kaWYKICNlbHNlCiAjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkoKChwYWdlKSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2VudHJ5LlMgYi9hcmNoL202OGsva2VybmVsL2VudHJ5LlMKaW5kZXggNzdmYzdjMS4uZTEzNmI4YyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUwpAQCAtNzYxLDQgKzc2MSw4IEBACiAJLmxvbmcgc3lzX3B3cml0ZXYJCS8qIDMzMCAqLwogCS5sb25nIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbwogCS5sb25nIHN5c19wZXJmX2V2ZW50X29wZW4KKwkubG9uZyBzeXNfZ2V0X3RocmVhZF9hcmVhCisJLmxvbmcgc3lzX3NldF90aHJlYWRfYXJlYQorCS5sb25nIHN5c19hdG9taWNfY21weGNoZ18zMgkvKiAzMzUgKi8KKwkubG9uZyBzeXNfYXRvbWljX2JhcnJpZXIKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYwppbmRleCAwNTI5NjU5Li4xN2MzZjMyIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjUxLDYgKzI1MSwxMCBAQAogCiAJcC0+dGhyZWFkLnVzcCA9IHVzcDsKIAlwLT50aHJlYWQua3NwID0gKHVuc2lnbmVkIGxvbmcpY2hpbGRzdGFjazsKKworCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1NFVFRMUykKKwkJdGFza190aHJlYWRfaW5mbyhwKS0+dHBfdmFsdWUgPSByZWdzLT5kNTsKKwogCS8qCiAJICogTXVzdCBzYXZlIHRoZSBjdXJyZW50IFNGQy9ERkMgdmFsdWUsIE5PVCB0aGUgdmFsdWUgd2hlbgogCSAqIHRoZSBwYXJlbnQgd2FzIGxhc3QgZGVzY2hlZHVsZWQgLSBSR0ggIDEwLTA4LTk2CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYwppbmRleCAxZmMyMTdlLi42MTZlNTk3IDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMKQEAgLTI0NSw2ICsyNDUsMTEgQEAKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCisJY2FzZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBOgorCQlyZXQgPSBwdXRfdXNlcih0YXNrX3RocmVhZF9pbmZvKGNoaWxkKS0+dHBfdmFsdWUsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgX191c2VyICopZGF0YSk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcmV0ID0gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL202OGsva2VybmVsL3NpZ25hbC5jCmluZGV4IGRlMmQwNWQuLjRiMzg3NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9zaWduYWwuYwpAQCAtODk3LDEwICs4OTcsMTcgQEAKIAogCS8qIFNldCB1cCB0byByZXR1cm4gZnJvbSB1c2Vyc3BhY2UuICAqLwogCWVyciB8PSBfX3B1dF91c2VyKGZyYW1lLT5yZXRjb2RlLCAmZnJhbWUtPnByZXRjb2RlKTsKKyNpZmRlZiBfX21jb2xkZmlyZV9fCisJLyogbW92ZWwgI19fTlJfcnRfc2lncmV0dXJuLGQwOyB0cmFwICMwICovCisJZXJyIHw9IF9fcHV0X3VzZXIoMHgyMDNjMDAwMCwgKGxvbmcgX191c2VyICopKGZyYW1lLT5yZXRjb2RlICsgMCkpOworCWVyciB8PSBfX3B1dF91c2VyKDB4MDAwMDRlNDAgKyAoX19OUl9ydF9zaWdyZXR1cm4gPDwgMTYpLAorCQkJICAobG9uZyBfX3VzZXIgKikoZnJhbWUtPnJldGNvZGUgKyA0KSk7CisjZWxzZQogCS8qIG1vdmVxICMsZDA7IG5vdGIgZDA7IHRyYXAgIzAgKi8KIAllcnIgfD0gX19wdXRfdXNlcigweDcwMDA0NjAwICsgKChfX05SX3J0X3NpZ3JldHVybiBeIDB4ZmYpIDw8IDE2KSwKIAkJCSAgKGxvbmcgX191c2VyICopKGZyYW1lLT5yZXRjb2RlICsgMCkpOwogCWVyciB8PSBfX3B1dF91c2VyKDB4NGU0MCwgKHNob3J0IF9fdXNlciAqKShmcmFtZS0+cmV0Y29kZSArIDQpKTsKKyNlbmRpZgogCiAJaWYgKGVycikKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3N5c19tNjhrLmMgYi9hcmNoL202OGsva2VybmVsL3N5c19tNjhrLmMKaW5kZXggMjE4ZjQ0MS4uZTNhZDJkNiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNfbTY4ay5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvc3lzX202OGsuYwpAQCAtMjgsNiArMjgsMTEgQEAKICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxhc20vdGxiLmg+CisKK2FzbWxpbmthZ2UgaW50IGRvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlKTsKIAogYXNtbGlua2FnZSBsb25nIHN5c19tbWFwMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAogCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKQEAgLTU5NSwzICs2MDAsNzkgQEAKIAkJCTogImQiIChfX2EpLCAiZCIgKF9fYiksICJkIiAoX19jKSk7CiAJcmV0dXJuIF9fcmVzOwogfQorCithc21saW5rYWdlIHVuc2lnbmVkIGxvbmcgc3lzX2dldF90aHJlYWRfYXJlYSh2b2lkKQoreworCXJldHVybiBjdXJyZW50X3RocmVhZF9pbmZvKCktPnRwX3ZhbHVlOworfQorCithc21saW5rYWdlIGludCBzeXNfc2V0X3RocmVhZF9hcmVhKHVuc2lnbmVkIGxvbmcgdHApCit7CisJY3VycmVudF90aHJlYWRfaW5mbygpLT50cF92YWx1ZSA9IHRwOworCXJldHVybiAwOworfQorCisvKiBUaGlzIHN5c2NhbGwgZ2V0cyBpdHMgYXJndW1lbnRzIGluIEEwIChtZW0pLCBEMiAob2xkdmFsKSBhbmQKKyAgIEQxIChuZXd2YWwpLiAgKi8KK2FzbWxpbmthZ2UgaW50CitzeXNfYXRvbWljX2NtcHhjaGdfMzIodW5zaWduZWQgbG9uZyBuZXd2YWwsIGludCBvbGR2YWwsIGludCBkMywgaW50IGQ0LCBpbnQgZDUsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgX191c2VyICogbWVtKQoreworCS8qIFRoaXMgd2FzIGJvcnJvd2VkIGZyb20gQVJNJ3MgaW1wbGVtZW50YXRpb24uICAqLworCWZvciAoOzspIHsKKwkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwkJcGdkX3QgKnBnZDsKKwkJcG1kX3QgKnBtZDsKKwkJcHRlX3QgKnB0ZTsKKwkJc3BpbmxvY2tfdCAqcHRsOworCQl1bnNpZ25lZCBsb25nIG1lbV92YWx1ZTsKKworCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCXBnZCA9IHBnZF9vZmZzZXQobW0sICh1bnNpZ25lZCBsb25nKW1lbSk7CisJCWlmICghcGdkX3ByZXNlbnQoKnBnZCkpCisJCQlnb3RvIGJhZF9hY2Nlc3M7CisJCXBtZCA9IHBtZF9vZmZzZXQocGdkLCAodW5zaWduZWQgbG9uZyltZW0pOworCQlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKQorCQkJZ290byBiYWRfYWNjZXNzOworCQlwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWQsICh1bnNpZ25lZCBsb25nKW1lbSwgJnB0bCk7CisJCWlmICghcHRlX3ByZXNlbnQoKnB0ZSkgfHwgIXB0ZV9kaXJ0eSgqcHRlKQorCQkgICAgfHwgIXB0ZV93cml0ZSgqcHRlKSkgeworCQkJcHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7CisJCQlnb3RvIGJhZF9hY2Nlc3M7CisJCX0KKworCQltZW1fdmFsdWUgPSAqbWVtOworCQlpZiAobWVtX3ZhbHVlID09IG9sZHZhbCkKKwkJCSptZW0gPSBuZXd2YWw7CisKKwkJcHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7CisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCXJldHVybiBtZW1fdmFsdWU7CisKKwkgICAgICBiYWRfYWNjZXNzOgorCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQkvKiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSBhIGJhZCBhY2Nlc3MsIHdlIGNhbiBnZXQgaGVyZSBpZgorCQkgICBhIG1lbW9yeSB3ZSdyZSB0cnlpbmcgdG8gd3JpdGUgdG8gc2hvdWxkIGJlIGNvcGllZC1vbi13cml0ZS4KKwkJICAgTWFrZSB0aGUga2VybmVsIGRvIHRoZSBuZWNlc3NhcnkgcGFnZSBzdHVmZiwgdGhlbiByZS1pdGVyYXRlLgorCQkgICBTaW11bGF0ZSBhIHdyaXRlIGFjY2VzcyBmYXVsdCB0byBkbyB0aGF0LiAgKi8KKwkJeworCQkJLyogVGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoZSBmdW5jdGlvbiBjb3JyZXNwb25kcyB0bworCQkJICAgRDEsIHdoaWNoIGlzIHRoZSBmaXJzdCBmaWVsZCBvZiBzdHJ1Y3QgcHRfcmVncy4gICovCisJCQlzdHJ1Y3QgcHRfcmVncyAqZnAgPSAoc3RydWN0IHB0X3JlZ3MgKikmbmV3dmFsOworCisJCQkvKiAnMycgaXMgYW4gUk1XIGZsYWcuICAqLworCQkJaWYgKGRvX3BhZ2VfZmF1bHQoZnAsICh1bnNpZ25lZCBsb25nKW1lbSwgMykpCisJCQkJLyogSWYgdGhlIGRvX3BhZ2VfZmF1bHQoKSBmYWlsZWQsIHdlIGRvbid0CisJCQkJICAgaGF2ZSBhbnl0aGluZyBtZWFuaW5nZnVsIHRvIHJldHVybi4KKwkJCQkgICBUaGVyZSBzaG91bGQgYmUgYSBTSUdTRUdWIHBlbmRpbmcgZm9yCisJCQkJICAgdGhlIHByb2Nlc3MuICAqLworCQkJCXJldHVybiAweGRlYWRiZWVmOworCQl9CisJfQorfQorCithc21saW5rYWdlIGludCBzeXNfYXRvbWljX2JhcnJpZXIodm9pZCkKK3sKKwkvKiBubyBjb2RlIG5lZWRlZCBmb3IgdW5pcHJvY3MgKi8KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvTWFrZWZpbGUgYi9hcmNoL202OGsvbWFjL01ha2VmaWxlCmluZGV4IGRhZWJkODAuLmI4ZDRjODMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvTWFrZWZpbGUKKysrIGIvYXJjaC9tNjhrL21hYy9NYWtlZmlsZQpAQCAtMyw0ICszLDQgQEAKICMKIAogb2JqLXkJCTo9IGNvbmZpZy5vIG1hY2ludHMubyBpb3AubyB2aWEubyBvc3MubyBwc2MubyBcCi0JCQliYWJvb24ubyBtYWNib2luZy5vIGRlYnVnLm8gbWlzYy5vCisJCQliYWJvb24ubyBtYWNib2luZy5vIG1pc2MubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9jb25maWcuYyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKaW5kZXggYmUwMTc5OC4uMDM1NmRhOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy9jb25maWcuYworKysgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jCkBAIC0yMyw2ICsyMyw4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9hZGIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdWRhLmg+CiAKICNkZWZpbmUgQk9PVElORk9fQ09NUEFUXzFfMAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtNDQsMTIgKzQ2LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjX29zcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNfcHNjLmg+CiAKLS8qIHBsYXRmb3JtIGRldmljZSBpbmZvICovCi0KLSNkZWZpbmUgU1dJTV9JT19TSVpFIDB4MjAwMAkvKiBTV0lNIElPIHJlc291cmNlIHNpemUgKi8KLQogLyogTWFjIGJvb3RpbmZvIHN0cnVjdCAqLwotCiBzdHJ1Y3QgbWFjX2Jvb3Rlcl9kYXRhIG1hY19iaV9kYXRhOwogCiAvKiBUaGUgcGh5cy4gdmlkZW8gYWRkci4gLSBtaWdodCBiZSBib2d1cyBvbiBzb21lIG1hY2hpbmVzICovCkBAIC03MCw4ICs2Nyw2IEBACiAKIGV4dGVybiB2b2lkIG1hY19ta3NvdW5kKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIAotZXh0ZXJuIHZvaWQgbnVidXNfc3dlZXBfdmlkZW8odm9pZCk7Ci0KIHN0YXRpYyB2b2lkIG1hY19nZXRfbW9kZWwoY2hhciAqc3RyKTsKIHN0YXRpYyB2b2lkIG1hY19pZGVudGlmeSh2b2lkKTsKIHN0YXRpYyB2b2lkIG1hY19yZXBvcnRfaGFyZHdhcmUodm9pZCk7CkBAIC0xNjgsMTIgKzE2Myw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfTTY4S19CRUVQKSB8fCBkZWZpbmVkKENPTkZJR19JTlBVVF9NNjhLX0JFRVBfTU9EVUxFKQogCW1hY2hfYmVlcCA9IG1hY19ta3NvdW5kOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hFQVJUQkVBVAotI2lmIDAKLQltYWNoX2hlYXJ0YmVhdCA9IG1hY19oZWFydGJlYXQ7Ci0JbWFjaF9oZWFydGJlYXRfaXJxID0gSVJRX01BQ19USU1FUjsKLSNlbmRpZgotI2VuZGlmCiAKIAkvKgogCSAqIERldGVybWluZSBoYXJkd2FyZSBwcmVzZW50CkBAIC0xOTEsMjcgKzE4MCwxOSBAQAogCWlmIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfSUlDSQogCSAgICB8fCBtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfSUlGWCkKIAkJbWFjaF9sMl9mbHVzaCA9IG1hY19jYWNoZV9jYXJkX2ZsdXNoOwotCi0JLyoKLQkgKiBDaGVjayBmb3IgbWFjaGluZSBzcGVjaWZpYyBmaXh1cHMuCi0JICovCi0KLSNpZmRlZiBPTERfTlVCVVNfQ09ERQotCW51YnVzX3N3ZWVwX3ZpZGVvKCk7Ci0jZW5kaWYKIH0KIAogCiAvKgotICoJTWFjaW50b3NoIFRhYmxlOiBoYXJkY29kZWQgbW9kZWwgY29uZmlndXJhdGlvbiBkYXRhLgorICogTWFjaW50b3NoIFRhYmxlOiBoYXJkY29kZWQgbW9kZWwgY29uZmlndXJhdGlvbiBkYXRhLgogICoKLSAqCU11Y2ggb2YgdGhpcyB3YXMgZGVmaW5lZCBieSBBbGFuLCBiYXNlZCBvbiB3aG8ga25vd3Mgd2hhdCBkb2NzLgotICoJSSd2ZSBhZGRlZCBhIGxvdCBtb3JlLCBhbmQgc29tZSBvZiB0aGF0IHdhcyBwdXJlIGd1ZXNzd29yayBiYXNlZAotICoJb24gaGFyZHdhcmUgcGFnZXMgcHJlc2VudCBvbiB0aGUgTWFjIHdlYiBzaXRlLiBQb3NzaWJseSB3aWxkbHkKLSAqCWluYWNjdXJhdGUsIHNvIGxvb2sgaGVyZSBpZiBhIG5ldyBNYWMgbW9kZWwgd29uJ3QgcnVuLiBFeGFtcGxlOiBpZgotICoJYSBNYWMgY3Jhc2hlcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgVklBMSByZWdpc3RlcnMgaGF2ZSBiZWVuIGR1bXBlZAotICoJdG8gdGhlIHNjcmVlbiwgaXQgcHJvYmFibHkgZGllZCBhdHRlbXB0aW5nIHRvIHJlYWQgRGlyQiBvbiBhIFJCVi4KLSAqCU1lYW5pbmcgaXQgc2hvdWxkIGhhdmUgTUFDX1ZJQV9JSWNpIGhlcmUgOi0pCisgKiBNdWNoIG9mIHRoaXMgd2FzIGRlZmluZWQgYnkgQWxhbiwgYmFzZWQgb24gd2hvIGtub3dzIHdoYXQgZG9jcy4KKyAqIEkndmUgYWRkZWQgYSBsb3QgbW9yZSwgYW5kIHNvbWUgb2YgdGhhdCB3YXMgcHVyZSBndWVzc3dvcmsgYmFzZWQKKyAqIG9uIGhhcmR3YXJlIHBhZ2VzIHByZXNlbnQgb24gdGhlIE1hYyB3ZWIgc2l0ZS4gUG9zc2libHkgd2lsZGx5CisgKiBpbmFjY3VyYXRlLCBzbyBsb29rIGhlcmUgaWYgYSBuZXcgTWFjIG1vZGVsIHdvbid0IHJ1bi4gRXhhbXBsZTogaWYKKyAqIGEgTWFjIGNyYXNoZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIFZJQTEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBkdW1wZWQKKyAqIHRvIHRoZSBzY3JlZW4sIGl0IHByb2JhYmx5IGRpZWQgYXR0ZW1wdGluZyB0byByZWFkIERpckIgb24gYSBSQlYuCisgKiBNZWFuaW5nIGl0IHNob3VsZCBoYXZlIE1BQ19WSUFfSUljaSBoZXJlIDotKQogICovCiAKIHN0cnVjdCBtYWNfbW9kZWwgKm1hY2ludG9zaF9jb25maWc7CkBAIC0yMTksNyArMjAwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBtYWNfbW9kZWwgbWFjX2RhdGFfdGFibGVbXSA9IHsKIAkvKgotCSAqCVdlJ2xsIHByZXRlbmQgdG8gYmUgYSBNYWNpbnRvc2ggSUksIHRoYXQncyBwcmV0dHkgc2FmZS4KKwkgKiBXZSdsbCBwcmV0ZW5kIHRvIGJlIGEgTWFjaW50b3NoIElJLCB0aGF0J3MgcHJldHR5IHNhZmUuCiAJICovCiAKIAl7CkBAIC0yMzAsMTIgKzIxMSwxMSBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9JV00KKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9JV00sCiAJfSwKIAogCS8qCi0JICoJT3JpZ2luYWwgTWFjSUkgaGFyZHdhcmUKLQkgKgorCSAqIE9yaWdpbmFsIE1hYyBJSSBoYXJkd2FyZQogCSAqLwogCiAJewpAQCAtMjQ2LDcgKzIyNiw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX0lXTQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX0lXTSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlYLAogCQkubmFtZQkJPSAiSUl4IiwKQEAgLTI1NSw3ICsyMzUsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlDWCwKIAkJLm5hbWUJCT0gIklJY3giLApAQCAtMjY0LDcgKzI0NCw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9TRTMwLAogCQkubmFtZQkJPSAiU0UvMzAiLApAQCAtMjczLDEzICsyNTMsMTMgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwKIAogCS8qCi0JICoJV2VpcmRpZmllZCBNYWNJSSBoYXJkd2FyZSAtIGFsbCBzdWJ0bHkgZGlmZmVyZW50LiBHZWUgdGhhbmtzCi0JICoJQXBwbGUuIEFsbCB0aGVzZSBib3hlcyBzZWVtIHRvIGhhdmUgVklBMiBpbiBhIGRpZmZlcmVudCBwbGFjZSB0bwotCSAqCXRoZSBNYWNJSSAoKzFBMDAwIHJhdGhlciB0aGFuICs0MDAwKQorCSAqIFdlaXJkaWZpZWQgTWFjIElJIGhhcmR3YXJlIC0gYWxsIHN1YnRseSBkaWZmZXJlbnQuIEdlZSB0aGFua3MKKwkgKiBBcHBsZS4gQWxsIHRoZXNlIGJveGVzIHNlZW0gdG8gaGF2ZSBWSUEyIGluIGEgZGlmZmVyZW50IHBsYWNlIHRvCisJICogdGhlIE1hYyBJSSAoKzFBMDAwIHJhdGhlciB0aGFuICs0MDAwKQogCSAqIENTQTogc2VlIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3RlY2hub3Rlcy9ody9od18wOS5odG1sCiAJICovCiAKQEAgLTI5MSw3ICsyNzEsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlGWCwKIAkJLm5hbWUJCT0gIklJZngiLApAQCAtMzAwLDcgKzI4MCw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSU9QLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0lPUAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fSU9QLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVNJLAogCQkubmFtZQkJPSAiSUlzaSIsCkBAIC0zMDksNyArMjg5LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJVkksCiAJCS5uYW1lCQk9ICJJSXZpIiwKQEAgLTMxOCw3ICsyOTgsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlWWCwKIAkJLm5hbWUJCT0gIklJdngiLApAQCAtMzI3LDExICszMDcsMTEgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwKIAogCS8qCi0JICoJQ2xhc3NpYyBtb2RlbHMgKGd1ZXNzaW5nOiBzaW1pbGFyIHRvIFNFLzMwID8/IE5vcGUsIHNpbWlsYXIgdG8gTEMgLi4uKQorCSAqIENsYXNzaWMgbW9kZWxzIChndWVzc2luZzogc2ltaWxhciB0byBTRS8zMD8gTm9wZSwgc2ltaWxhciB0byBMQy4uLikKIAkgKi8KIAogCXsKQEAgLTM0Miw3ICszMjIsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfQ0NMLAogCQkubmFtZQkJPSAiQ29sb3IgQ2xhc3NpYyIsCkBAIC0zNTEsMTEgKzMzMSwxMSBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LAogCiAJLyoKLQkgKglTb21lIE1hYyBMQyBtYWNoaW5lcy4gQmFzaWNhbGx5IHRoZSBzYW1lIGFzIHRoZSBJSWNpLCBBREIgbGlrZSBJSXNpCisJICogU29tZSBNYWMgTEMgbWFjaGluZXMuIEJhc2ljYWxseSB0aGUgc2FtZSBhcyB0aGUgSUljaSwgQURCIGxpa2UgSUlzaQogCSAqLwogCiAJewpAQCAtMzY2LDcgKzM0Niw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9MQ0lJLAogCQkubmFtZQkJPSAiTEMgSUkiLApAQCAtMzc1LDcgKzM1NSw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9MQ0lJSSwKIAkJLm5hbWUJCT0gIkxDIElJSSIsCkBAIC0zODQsMTcgKzM2NCwxNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LAogCiAJLyoKLQkgKglRdWFkcmEuIFZpZGVvIGlzIGF0IDB4RjkwMDAwMDAsIHZpYSBpcyBsaWtlIGEgTWFjSUkuIFdlIGxhYmVsIGl0IGRpZmZlcmVudGx5Ci0JICoJYXMgc29tZSBvZiB0aGUgc3R1ZmYgY29ubmVjdGVkIHRvIFZJQTIgc2VlbXMgZGlmZmVyZW50LiBCZXR0ZXIgU0NTSSBjaGlwIGFuZAotCSAqCW9uYm9hcmQgZXRoZXJuZXQgdXNpbmcgYSBOYXRTZW1pIFNPTklDIGV4Y2VwdCB0aGUgNjYwQVYgYW5kIDg0MEFWIHdoaWNoIHVzZSBhbgotCSAqCUFNRCA3OUM5NDAgKE1BQ0UpLgotCSAqCVRoZSA3MDAsIDkwMCBhbmQgOTUwIGhhdmUgc29tZSBJL08gY2hpcHMgaW4gdGhlIHdyb25nIHBsYWNlIHRvCi0JICoJY29uZnVzZSB1cy4gVGhlIDg0MEFWIGhhcyBhIFNDU0kgbG9jYXRpb24gb2YgaXRzIG93biAoc2FtZSBhcwotCSAqCXRoZSA2NjBBVikuCisJICogUXVhZHJhLiBWaWRlbyBpcyBhdCAweEY5MDAwMDAwLCB2aWEgaXMgbGlrZSBhIE1hY0lJLiBXZSBsYWJlbCBpdAorCSAqIGRpZmZlcmVudGx5IGFzIHNvbWUgb2YgdGhlIHN0dWZmIGNvbm5lY3RlZCB0byBWSUEyIHNlZW1zIGRpZmZlcmVudC4KKwkgKiBCZXR0ZXIgU0NTSSBjaGlwIGFuZCBvbmJvYXJkIGV0aGVybmV0IHVzaW5nIGEgTmF0U2VtaSBTT05JQyBleGNlcHQKKwkgKiB0aGUgNjYwQVYgYW5kIDg0MEFWIHdoaWNoIHVzZSBhbiBBTUQgNzlDOTQwIChNQUNFKS4KKwkgKiBUaGUgNzAwLCA5MDAgYW5kIDk1MCBoYXZlIHNvbWUgSS9PIGNoaXBzIGluIHRoZSB3cm9uZyBwbGFjZSB0bworCSAqIGNvbmZ1c2UgdXMuIFRoZSA4NDBBViBoYXMgYSBTQ1NJIGxvY2F0aW9uIG9mIGl0cyBvd24gKHNhbWUgYXMKKwkgKiB0aGUgNjYwQVYpLgogCSAqLwogCiAJewpAQCAtNDA1LDcgKzM4NSw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTYwNV9BQ0MsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNjA1IiwKQEAgLTQxNCw3ICszOTQsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2MTAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNjEwIiwKQEAgLTQyNCw3ICs0MDQsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjMwLAogCQkubmFtZQkJPSAiUXVhZHJhIDYzMCIsCkBAIC00MzUsNyArNDE1LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTY1MCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA2NTAiLApAQCAtNDQ1LDkgKzQyNSw5IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwKLQkvKglUaGUgUTcwMCBkb2VzIGhhdmUgYSBOUyBTb25pYyAqLworCS8qIFRoZSBRNzAwIGRvZXMgaGF2ZSBhIE5TIFNvbmljICovCiAJewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E3MDAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNzAwIiwKQEAgLTQ1Nyw3ICs0MzcsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RODAwLAogCQkubmFtZQkJPSAiUXVhZHJhIDgwMCIsCkBAIC00NjcsNyArNDQ3LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTg0MCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA4NDBBViIsCkBAIC00NzcsNyArNDU3LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19QU0MsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX01BQ0UsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX0FWCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfQVYsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E5MDAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgOTAwIiwKQEAgLTQ4Nyw3ICs0NjcsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fSU9QCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9JT1AsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E5NTAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgOTUwIiwKQEAgLTQ5Nyw2MCArNDc3LDYwIEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSU9QLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9JT1AKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0lPUCwKIAl9LAogCiAJLyoKLQkgKglQZXJmb3JtYSAtIG1vcmUgTEMgdHlwZSBtYWNoaW5lcworCSAqIFBlcmZvcm1hIC0gbW9yZSBMQyB0eXBlIG1hY2hpbmVzCiAJICovCiAKIAl7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDQ2MCwKLQkJLm5hbWUJCT0gICJQZXJmb3JtYSA0NjAiLAorCQkubmFtZQkJPSAiUGVyZm9ybWEgNDYwIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSVNJLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNDc1LAotCQkubmFtZQkJPSAgIlBlcmZvcm1hIDQ3NSIsCisJCS5uYW1lCQk9ICJQZXJmb3JtYSA0NzUiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDQ3NUYsCi0JCS5uYW1lCQk9ICAiUGVyZm9ybWEgNDc1IiwKKwkJLm5hbWUJCT0gIlBlcmZvcm1hIDQ3NSIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTIwLAotCQkubmFtZQkJPSAgIlBlcmZvcm1hIDUyMCIsCisJCS5uYW1lCQk9ICJQZXJmb3JtYSA1MjAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1NTAsCi0JCS5uYW1lCQk9ICAiUGVyZm9ybWEgNTUwIiwKKwkJLm5hbWUJCT0gIlBlcmZvcm1hIDU1MCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LAotCS8qIFRoZXNlIGhhdmUgdGhlIGNvbW0gc2xvdCwgYW5kIHRoZXJlZm9yZSB0aGUgcG9zc2liaWxpdHkgb2YgU09OSUMgZXRoZXJuZXQgKi8KKwkvKiBUaGVzZSBoYXZlIHRoZSBjb21tIHNsb3QsIGFuZCB0aGVyZWZvcmUgcG9zc2libHkgU09OSUMgZXRoZXJuZXQgKi8KIAl7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDU3NSwKIAkJLm5hbWUJCT0gIlBlcmZvcm1hIDU3NSIsCkBAIC01NjAsNyArNTQwLDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTg4LAogCQkubmFtZQkJPSAiUGVyZm9ybWEgNTg4IiwKQEAgLTU3MSw3ICs1NTEsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1RWLAogCQkubmFtZQkJPSAiVFYiLApAQCAtNTgwLDcgKzU2MCw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNjAwLAogCQkubmFtZQkJPSAiUGVyZm9ybWEgNjAwIiwKQEAgLTU4OSwxNCArNTY5LDE0IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sCiAKIAkvKgotCSAqCUNlbnRyaXMgLSBqdXN0IGd1ZXNzaW5nIGFnYWluOyBtYXliZSBsaWtlIFF1YWRyYQorCSAqIENlbnRyaXMgLSBqdXN0IGd1ZXNzaW5nIGFnYWluOyBtYXliZSBsaWtlIFF1YWRyYS4KKwkgKiBUaGUgQzYxMCBtYXkgb3IgbWF5IG5vdCBoYXZlIFNPTklDLiBXZSBwcm9iZSB0byBtYWtlIHN1cmUuCiAJICovCiAKLQkvKiBUaGUgQzYxMCBtYXkgb3IgbWF5IG5vdCBoYXZlIFNPTklDLiAgV2UgcHJvYmUgdG8gbWFrZSBzdXJlICovCiAJewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0M2MTAsCiAJCS5uYW1lCQk9ICJDZW50cmlzIDYxMCIsCkBAIC02MDYsNyArNTg2LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfQzY1MCwKIAkJLm5hbWUJCT0gIkNlbnRyaXMgNjUwIiwKQEAgLTYxNiw3ICs1OTYsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9DNjYwLAogCQkubmFtZQkJPSAiQ2VudHJpcyA2NjBBViIsCkBAIC02MjYsNyArNjA2LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19QU0MsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX01BQ0UsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX0FWCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfQVYsCiAJfSwKIAogCS8qCkBAIC02NDMsNyArNjIzLDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE0NSwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNDUiLApAQCAtNjUyLDcgKzYzMiw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNTAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTUwIiwKQEAgLTY2Miw3ICs2NDIsNyBAQAogCQkuaWRlX3R5cGUJPSBNQUNfSURFX1BCLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTYwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE2MCIsCkBAIC02NzEsNyArNjUxLDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE2NSwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNjUiLApAQCAtNjgwLDcgKzY2MCw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjVDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE2NWMiLApAQCAtNjg5LDcgKzY2OSw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNzAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTcwIiwKQEAgLTY5OCw3ICs2NzgsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTgwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE4MCIsCkBAIC03MDcsNyArNjg3LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE4MEMsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTgwYyIsCkBAIC03MTYsNyArNjk2LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE5MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxOTAiLApAQCAtNzI2LDcgKzcwNiw3IEBACiAJCS5pZGVfdHlwZQk9IE1BQ19JREVfQkFCT09OLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCNTIwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDUyMCIsCkBAIC03MzYsNyArNzE2LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LAogCiAJLyoKQEAgLTc1Nyw3ICs3MzcsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjMwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyMzAiLApAQCAtNzY2LDcgKzc0Niw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyNTAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI1MCIsCkBAIC03NzUsNyArNzU1LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI3MEMsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI3MGMiLApAQCAtNzg0LDcgKzc2NCw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyODAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI4MCIsCkBAIC03OTMsNyArNzczLDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI4MEMsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI4MGMiLApAQCAtODAyLDE3ICs3ODIsNDQgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sCiAKIAkvKgotCSAqCU90aGVyIHN0dWZmID8/CisJICogT3RoZXIgc3R1ZmY/CiAJICovCisKIAl7CiAJCS5pZGVudAkJPSAtMQogCX0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2NjX2FfcnNyY3NbXSA9IHsKKwl7IC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIH0sCisJeyAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSB9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzY2NfYl9yc3Jjc1tdID0geworCXsgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfSwKKwl7IC5mbGFncyA9IElPUkVTT1VSQ0VfSVJRIH0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjY19hX3BkZXYgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNjYyIsCisJLmlkICAgICAgICAgICAgID0gMCwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNjY19hX3JzcmNzKSwKKwkucmVzb3VyY2UgICAgICAgPSBzY2NfYV9yc3JjcywKK307CitFWFBPUlRfU1lNQk9MKHNjY19hX3BkZXYpOworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjY19iX3BkZXYgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNjYyIsCisJLmlkICAgICAgICAgICAgID0gMSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNjY19iX3JzcmNzKSwKKwkucmVzb3VyY2UgICAgICAgPSBzY2NfYl9yc3JjcywKK307CitFWFBPUlRfU1lNQk9MKHNjY19iX3BkZXYpOworCiBzdGF0aWMgdm9pZCBfX2luaXQgbWFjX2lkZW50aWZ5KHZvaWQpCiB7CiAJc3RydWN0IG1hY19tb2RlbCAqbTsKQEAgLTgyMyw3ICs4MzAsOCBAQAogCQkvKiBubyBib290aW5mbyBtb2RlbCBpZCAtPiBOZXRCU0QgYm9vdGVyIHdhcyB1c2VkISAqLwogCQkvKiBYWFggRklYTUU6IGJyZWFrcyBmb3IgbW9kZWwgPiAzMSAqLwogCQltb2RlbCA9IChtYWNfYmlfZGF0YS5jcHVpZCA+PiAyKSAmIDYzOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBib290aW5mbyBtb2RlbCBJRCwgdXNpbmcgY3B1aWQgaW5zdGVhZCAoaGV5LCB1c2UgUGVuZ3VpbiEpXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gYm9vdGluZm8gbW9kZWwgSUQsIHVzaW5nIGNwdWlkIGluc3RlYWQgIgorCQkgICAgICAgIihvYnNvbGV0ZSBib290bG9hZGVyPylcbiIpOwogCX0KIAogCW1hY2ludG9zaF9jb25maWcgPSBtYWNfZGF0YV90YWJsZTsKQEAgLTgzNCwxMCArODQyLDI5IEBACiAJCX0KIAl9CiAKLQkvKiBXZSBuZWVkIHRvIHByZS1pbml0IHRoZSBJT1BzLCBpZiBhbnkuIE90aGVyd2lzZSAqLwotCS8qIHRoZSBzZXJpYWwgY29uc29sZSB3b24ndCB3b3JrIGlmIHRoZSB1c2VyIGhhZCAgICovCi0JLyogdGhlIHNlcmlhbCBwb3J0cyBzZXQgdG8gIkZhc3RlciIgbW9kZSBpbiBNYWNPUy4gKi8KKwkvKiBTZXQgdXAgc2VyaWFsIHBvcnQgcmVzb3VyY2VzIGZvciB0aGUgY29uc29sZSBpbml0Y2FsbC4gKi8KIAorCXNjY19hX3JzcmNzWzBdLnN0YXJ0ID0gKHJlc291cmNlX3NpemVfdCkgbWFjX2JpX2RhdGEuc2NjYmFzZSArIDI7CisJc2NjX2FfcnNyY3NbMF0uZW5kICAgPSBzY2NfYV9yc3Jjc1swXS5zdGFydDsKKwlzY2NfYl9yc3Jjc1swXS5zdGFydCA9IChyZXNvdXJjZV9zaXplX3QpIG1hY19iaV9kYXRhLnNjY2Jhc2U7CisJc2NjX2JfcnNyY3NbMF0uZW5kICAgPSBzY2NfYl9yc3Jjc1swXS5zdGFydDsKKworCXN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy0+c2NjX3R5cGUpIHsKKwljYXNlIE1BQ19TQ0NfUFNDOgorCQlzY2NfYV9yc3Jjc1sxXS5zdGFydCA9IHNjY19hX3JzcmNzWzFdLmVuZCA9IElSUV9NQUNfU0NDX0E7CisJCXNjY19iX3JzcmNzWzFdLnN0YXJ0ID0gc2NjX2JfcnNyY3NbMV0uZW5kID0gSVJRX01BQ19TQ0NfQjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc2NjX2FfcnNyY3NbMV0uc3RhcnQgPSBzY2NfYV9yc3Jjc1sxXS5lbmQgPSBJUlFfTUFDX1NDQzsKKwkJc2NjX2JfcnNyY3NbMV0uc3RhcnQgPSBzY2NfYl9yc3Jjc1sxXS5lbmQgPSBJUlFfTUFDX1NDQzsKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBXZSBuZWVkIHRvIHByZS1pbml0IHRoZSBJT1BzLCBpZiBhbnkuIE90aGVyd2lzZQorCSAqIHRoZSBzZXJpYWwgY29uc29sZSB3b24ndCB3b3JrIGlmIHRoZSB1c2VyIGhhZAorCSAqIHRoZSBzZXJpYWwgcG9ydHMgc2V0IHRvICJGYXN0ZXIiIG1vZGUgaW4gTWFjT1MuCisJICovCiAJaW9wX3ByZWluaXQoKTsKIAogCXByaW50ayhLRVJOX0lORk8gIkRldGVjdGVkIE1hY2ludG9zaCBtb2RlbDogJWQgXG4iLCBtb2RlbCk7CkBAIC04NDYsNyArODczLDggQEAKIAkgKiBSZXBvcnQgYm9vdGVyIGRhdGE6CiAJICovCiAJcHJpbnRrKEtFUk5fREVCVUcgIiBQZW5ndWluIGJvb3RpbmZvIGRhdGE6XG4iKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiIFZpZGVvOiBhZGRyIDB4JWx4IHJvdyAweCVseCBkZXB0aCAlbHggZGltZW5zaW9ucyAlbGQgeCAlbGRcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIiBWaWRlbzogYWRkciAweCVseCAiCisJCSJyb3cgMHglbHggZGVwdGggJWx4IGRpbWVuc2lvbnMgJWxkIHggJWxkXG4iLAogCQltYWNfYmlfZGF0YS52aWRlb2FkZHIsIG1hY19iaV9kYXRhLnZpZGVvcm93LAogCQltYWNfYmlfZGF0YS52aWRlb2RlcHRoLCBtYWNfYmlfZGF0YS5kaW1lbnNpb25zICYgMHhGRkZGLAogCQltYWNfYmlfZGF0YS5kaW1lbnNpb25zID4+IDE2KTsKQEAgLTg2Myw2ICs4OTEsMTAgQEAKIAlvc3NfaW5pdCgpOwogCXBzY19pbml0KCk7CiAJYmFib29uX2luaXQoKTsKKworI2lmZGVmIENPTkZJR19BREJfQ1VEQQorCWZpbmRfdmlhX2N1ZGEoKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbWFjX3JlcG9ydF9oYXJkd2FyZSh2b2lkKQpAQCAtODc2LDIzICs5MDgsNTAgQEAKIAlzdHJjYXQoc3RyLCBtYWNpbnRvc2hfY29uZmlnLT5uYW1lKTsKIH0KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzd2ltX3Jlc291cmNlc1sxXTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3dpbV9yc3JjID0geyAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzd2ltX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN3aW1fcGRldiA9IHsKIAkubmFtZQkJPSAic3dpbSIsCiAJLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzd2ltX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gc3dpbV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZzd2ltX3JzcmMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWFjX3BsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZzd2ltX2RldmljZQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXNwXzBfcGRldiA9IHsKKwkubmFtZQkJPSAibWFjX2VzcCIsCisJLmlkCQk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlc3BfMV9wZGV2ID0geworCS5uYW1lCQk9ICJtYWNfZXNwIiwKKwkuaWQJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNvbmljX3BkZXYgPSB7CisJLm5hbWUJCT0gIm1hY3NvbmljIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtYWNlX3BkZXYgPSB7CisJLm5hbWUJCT0gIm1hY21hY2UiLAorCS5pZAkJPSAtMSwKIH07CiAKIGludCBfX2luaXQgbWFjX3BsYXRmb3JtX2luaXQodm9pZCkKIHsKIAl1OCAqc3dpbV9iYXNlOwogCisJLyoKKwkgKiBTZXJpYWwgZGV2aWNlcworCSAqLworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzY2NfYV9wZGV2KTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNjY19iX3BkZXYpOworCisJLyoKKwkgKiBGbG9wcHkgZGV2aWNlCisJICovCisKIAlzd2l0Y2ggKG1hY2ludG9zaF9jb25maWctPmZsb3BweV90eXBlKSB7CiAJY2FzZSBNQUNfRkxPUFBZX1NXSU1fQUREUjE6CiAJCXN3aW1fYmFzZSA9ICh1OCAqKShWSUExX0JBU0UgKyAweDFFMDAwKTsKQEAgLTkwMSwxNiArOTYwLDQ3IEBACiAJCXN3aW1fYmFzZSA9ICh1OCAqKShWSUExX0JBU0UgKyAweDE2MDAwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIDA7CisJCXN3aW1fYmFzZSA9IE5VTEw7CisJCWJyZWFrOwogCX0KIAotCXN3aW1fcmVzb3VyY2VzWzBdLm5hbWUgPSAic3dpbS1yZWdzIjsKLQlzd2ltX3Jlc291cmNlc1swXS5zdGFydCA9IChyZXNvdXJjZV9zaXplX3Qpc3dpbV9iYXNlOwotCXN3aW1fcmVzb3VyY2VzWzBdLmVuZCA9IChyZXNvdXJjZV9zaXplX3QpKHN3aW1fYmFzZSArIFNXSU1fSU9fU0laRSk7Ci0Jc3dpbV9yZXNvdXJjZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKwlpZiAoc3dpbV9iYXNlKSB7CisJCXN3aW1fcnNyYy5zdGFydCA9IChyZXNvdXJjZV9zaXplX3QpIHN3aW1fYmFzZSwKKwkJc3dpbV9yc3JjLmVuZCAgID0gKHJlc291cmNlX3NpemVfdCkgc3dpbV9iYXNlICsgMHgyMDAwLAorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnN3aW1fcGRldik7CisJfQogCi0JcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKG1hY19wbGF0Zm9ybV9kZXZpY2VzLAotCQkJCSAgICBBUlJBWV9TSVpFKG1hY19wbGF0Zm9ybV9kZXZpY2VzKSk7CisJLyoKKwkgKiBTQ1NJIGRldmljZShzKQorCSAqLworCisJc3dpdGNoIChtYWNpbnRvc2hfY29uZmlnLT5zY3NpX3R5cGUpIHsKKwljYXNlIE1BQ19TQ1NJX1FVQURSQToKKwljYXNlIE1BQ19TQ1NJX1FVQURSQTM6CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXNwXzBfcGRldik7CisJCWJyZWFrOworCWNhc2UgTUFDX1NDU0lfUVVBRFJBMjoKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlc3BfMF9wZGV2KTsKKwkJaWYgKChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfUTkwMCkgfHwKKwkJICAgIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfUTk1MCkpCisJCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVzcF8xX3BkZXYpOworCQlicmVhazsKKwl9CisKKwkvKgorCSAqIEV0aGVybmV0IGRldmljZQorCSAqLworCisJc3dpdGNoIChtYWNpbnRvc2hfY29uZmlnLT5ldGhlcl90eXBlKSB7CisJY2FzZSBNQUNfRVRIRVJfU09OSUM6CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc29uaWNfcGRldik7CisJCWJyZWFrOworCWNhc2UgTUFDX0VUSEVSX01BQ0U6CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbWFjZV9wZGV2KTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIGFyY2hfaW5pdGNhbGwobWFjX3BsYXRmb3JtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9kZWJ1Zy5jIGIvYXJjaC9tNjhrL21hYy9kZWJ1Zy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2UwNzRjLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9tYWMvZGVidWcuYworKysgL2Rldi9udWxsCkBAIC0xLDM2NSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9tNjhrL21hYy9kZWJ1Zy5jCi0gKgotICogU2hhbWVsZXNzbHkgc3RvbGVuIChTQ0MgY29kZSBhbmQgZ2VuZXJhbCBmcmFtZXdvcmspIGZyb206Ci0gKgotICogbGludXgvYXJjaC9tNjhrL2F0YXJpL2RlYnVnLmMKLSAqCi0gKiBBdGFyaSBkZWJ1Z2dpbmcgYW5kIHNlcmlhbCBjb25zb2xlIHN0dWZmCi0gKgotICogQXNzZW1ibGVkIG9mIHBhcnRzIG9mIGZvcm1lciBhdGFyaS9jb25maWcuYyA5Ny0xMi0xOCBieSBSb21hbiBIb2RlawotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2RlZmluZSBCT09USU5GT19DT01QQVRfMV8wCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2ludHMuaD4KLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWFjX3ZpZGVvYmFzZTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG1hY19yb3dieXRlczsKLQotZXh0ZXJuIHZvaWQgbWFjX3NlcmlhbF9wcmludChjb25zdCBjaGFyICopOwotCi0jZGVmaW5lIERFQlVHX0hFQURTCi0jdW5kZWYgREVCVUdfU0NSRUVOCi0jZGVmaW5lIERFQlVHX1NFUklBTAotCi0vKgotICogVGhlc2UgdHdvIGF1eGlsaWFyeSBkZWJ1ZyBmdW5jdGlvbnMgc2hvdWxkIGdvIGF3YXkgQVNBUC4gT25seSB1c2FnZToKLSAqIGJlZm9yZSB0aGUgY29uc29sZSBvdXRwdXQgaXMgdXAgKGFmdGVyIGhlYWQuUyBjb21lIHNvbWUgb3RoZXIgY3J1Y2lhbAotICogc2V0dXAgcm91dGluZXMgOi0pIGl0IHBlcm1pdHMgd3JpdGluZyAnZGF0YScgdG8gdGhlIHNjcmVlbiBhcyBiaXQgcGF0dGVybnMKLSAqIChnb29kIGx1Y2sgcmVhZGluZyB0aG9zZSkuIEhlbHBlZCB0byBmaWd1cmUgdGhhdCB0aGUgYm9vdGluZm8gY29udGFpbmVkCi0gKiBnYXJiYWdlIGRhdGEgb24gdGhlIGFtb3VudCBhbmQgc2l6ZSBvZiBtZW1vcnkgY2h1bmtzIC4uLgotICoKLSAqIFRoZSAncG9zJyBhcmd1bWVudCBub3cgc2ltcGx5IG1lYW5zICdsaW5lZmVlZCBhZnRlciBwcmludCcgLi4uCi0gKi8KLQotI2lmZGVmIERFQlVHX1NDUkVFTgotc3RhdGljIGludCBwZW5nLCBsaW5lOwotI2VuZGlmCi0KLSNpZiAwCi0KLXZvaWQgbWFjX2RlYnVnZ2luZ19zaG9ydChpbnQgcG9zLCBzaG9ydCBudW0pCi17Ci0jaWZkZWYgREVCVUdfU0NSRUVOCi0JdW5zaWduZWQgY2hhciAqcGVuZ29mZnNldDsKLQl1bnNpZ25lZCBjaGFyICpwcHRyOwotCWludCBpOwotI2VuZGlmCi0KLSNpZmRlZiBERUJVR19TRVJJQUwKLQlwcmludGsoImRlYnVnOiAlZCAhXG4iLCBudW0pOwotI2VuZGlmCi0KLSNpZmRlZiBERUJVR19TQ1JFRU4KLQlpZiAoIU1BQ0hfSVNfTUFDKSB7Ci0JCS8qIHByaW50aygiZGVidWc6ICVkICFcbiIsIG51bSk7ICovCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBjYWxjdWxhdGUgY3VycmVudCBvZmZzZXQgKi8KLQlwZW5nb2Zmc2V0ID0gKHVuc2lnbmVkIGNoYXIgKiltYWNfdmlkZW9iYXNlICsKLQkJKDE1MCtsaW5lKjIpICogbWFjX3Jvd2J5dGVzICsgODAgKiBwZW5nOwotCi0JcHB0ciA9IHBlbmdvZmZzZXQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgOCAqIHNpemVvZihzaG9ydCk7IGkrKykgeyAvKiAjIG9mIGJpdHMgKi8KLQkJLyogICAgICAgIHZhbHVlICAgICAgICBtYXNrIGZvciBiaXQgaSwgcmV2ZXJzZSBvcmRlciAqLwotCQkqcHB0cisrID0gKG51bSAmICgxIDw8ICg4KnNpemVvZihzaG9ydCktaS0xKSkgPyAweEZGIDogMHgwMCk7Ci0JfQotCi0JcGVuZysrOwotCi0JaWYgKHBvcykgewotCQlsaW5lKys7Ci0JCXBlbmcgPSAwOwotCX0KLSNlbmRpZgotfQotCi12b2lkIG1hY19kZWJ1Z2dpbmdfbG9uZyhpbnQgcG9zLCBsb25nIGFkZHIpCi17Ci0jaWZkZWYgREVCVUdfU0NSRUVOCi0JdW5zaWduZWQgY2hhciAqcGVuZ29mZnNldDsKLQl1bnNpZ25lZCBjaGFyICpwcHRyOwotCWludCBpOwotI2VuZGlmCi0KLSNpZmRlZiBERUJVR19TRVJJQUwKLQlwcmludGsoImRlYnVnOiAjJWxkICFcbiIsIGFkZHIpOwotI2VuZGlmCi0KLSNpZmRlZiBERUJVR19TQ1JFRU4KLQlpZiAoIU1BQ0hfSVNfTUFDKSB7Ci0JCS8qIHByaW50aygiZGVidWc6ICMlbGQgIVxuIiwgYWRkcik7ICovCi0JCXJldHVybjsKLQl9Ci0KLQlwZW5nb2Zmc2V0PSh1bnNpZ25lZCBjaGFyICopKG1hY192aWRlb2Jhc2UrKDE1MCtsaW5lKjIpKm1hY19yb3dieXRlcykKLQkJICAgICs4MCpwZW5nOwotCi0JcHB0ciA9IHBlbmdvZmZzZXQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgOCAqIHNpemVvZihsb25nKTsgaSsrKSB7IC8qICMgb2YgYml0cyAqLwotCQkqcHB0cisrID0gKGFkZHIgJiAoMSA8PCAoOCpzaXplb2YobG9uZyktaS0xKSkgPyAweEZGIDogMHgwMCk7Ci0JfQotCi0JcGVuZysrOwotCi0JaWYgKHBvcykgewotCQlsaW5lKys7Ci0JCXBlbmcgPSAwOwotCX0KLSNlbmRpZgotfQotCi0jZW5kaWYgIC8qICAwICAqLwotCi0jaWZkZWYgREVCVUdfU0VSSUFMCi0vKgotICogVE9ETzogc2VyaWFsIGRlYnVnIGNvZGUKLSAqLwotCi1zdHJ1Y3QgbWFjX1NDQyB7Ci0JdV9jaGFyIGNoYV9iX2N0cmw7Ci0JdV9jaGFyIGNoYXJfZHVtbXkxOwotCXVfY2hhciBjaGFfYV9jdHJsOwotCXVfY2hhciBjaGFyX2R1bW15MjsKLQl1X2NoYXIgY2hhX2JfZGF0YTsKLQl1X2NoYXIgY2hhcl9kdW1teTM7Ci0JdV9jaGFyIGNoYV9hX2RhdGE7Ci19OwotCi0jIGRlZmluZSBzY2MgKCooKHZvbGF0aWxlIHN0cnVjdCBtYWNfU0NDKiltYWNfYmlfZGF0YS5zY2NiYXNlKSkKLQotc3RhdGljIGludCBzY2NfcG9ydCA9IC0xOwotCi1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbWFjX2NvbnNvbGVfZHJpdmVyID0gewotCS5uYW1lCT0gImRlYnVnIiwKLQkuZmxhZ3MJPSBDT05fUFJJTlRCVUZGRVIsCi0JLmluZGV4CT0gLTEsCi19OwotCi0vKgotICogQ3J1ZGUgaGFjayB0byBnZXQgY29uc29sZSBvdXRwdXQgdG8gdGhlIHNjcmVlbiBiZWZvcmUgdGhlIGZyYW1lYnVmZmVyCi0gKiBpcyBpbml0aWFsaXplZCAoaGFwcGVucyBhIGxvdCBsYXRlciBpbiAyLjEhKS4KLSAqIFdlIGp1c3QgdXNlIHRoZSBjb25zb2xlIHJvdXRpbmVzIGRlY2xhcmVkIGluIGhlYWQuUywgdGhpcyB3aWxsIGludGVyZmVyZQotICogd2l0aCByZWd1bGFyIGZyYW1lYnVmZmVyIGNvbnNvbGUgb3V0cHV0IGFuZCBzaG91bGQgYmUgdXNlZCBleGNsdXNpdmVseQotICogdG8gZGVidWcga2VybmVsIHByb2JsZW1zIG1hbmlmZXN0aW5nIGJlZm9yZSBmcmFtZWJ1ZmZlciBpbml0IChha2EgV1NPRCkKLSAqCi0gKiBUbyBrZWVwIHRoaXMgaGFjayBmcm9tIGludGVyZmVyaW5nIHdpdGggdGhlIHJlZ3VsYXIgY29uc29sZSBkcml2ZXIsIGVpdGhlcgotICogZGVyZWdpc3RlciB0aGlzIGRyaXZlciBiZWZvcmUvb24gZnJhbWVidWZmZXIgY29uc29sZSBpbml0LCBvciBzaWxlbmNlIHRoaXMKLSAqIGZ1bmN0aW9uIGFmdGVyIHRoZSBmYmNvbiBkcml2ZXIgaXMgcnVubmluZyAod2lsbCBsb3NlIGNvbnNvbGUgbWVzc2FnZXMhPykuCi0gKiBUbyBkZWJ1ZyByZWFsIGVhcmx5IGJ1Z3MsIG5lZWQgdG8gd3JpdGUgYSAnbWFjX3JlZ2lzdGVyX2NvbnNvbGVfaGFjaygpJwotICogdGhhdCBpcyBjYWxsZWQgZnJvbSBzdGFydF9rZXJuZWwoKSBiZWZvcmUgc2V0dXBfYXJjaCgpIGFuZCBqdXN0IHJlZ2lzdGVycwotICogdGhpcyBkcml2ZXIgaWYgTWFjLgotICovCi0KLXN0YXRpYyB2b2lkIG1hY19kZWJ1Z19jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0JbWFjX3NlcmlhbF9wcmludChzdHIpOwotfQotCi0KLQotLyogTWFjOiBsb29wc19wZXJfamlmZnkgbWluLiAxOTAwMCBePSAuNSB1czsgTUZQREVMQVkgd2FzIDAuNiB1cyovCi0KLSNkZWZpbmUgdVNFQyAxCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtYWNfc2NjYl9vdXQoY2hhciBjKQotewotCWludCBpOwotCi0JZG8gewotCQlmb3IgKGkgPSB1U0VDOyBpID4gMDsgLS1pKQotCQkJYmFycmllcigpOwotCX0gd2hpbGUgKCEoc2NjLmNoYV9iX2N0cmwgJiAweDA0KSk7IC8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLwotCWZvciAoaSA9IHVTRUM7IGkgPiAwOyAtLWkpCi0JCWJhcnJpZXIoKTsKLQlzY2MuY2hhX2JfZGF0YSA9IGM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtYWNfc2NjYV9vdXQoY2hhciBjKQotewotCWludCBpOwotCi0JZG8gewotCQlmb3IgKGkgPSB1U0VDOyBpID4gMDsgLS1pKQotCQkJYmFycmllcigpOwotCX0gd2hpbGUgKCEoc2NjLmNoYV9hX2N0cmwgJiAweDA0KSk7IC8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLwotCWZvciAoaSA9IHVTRUM7IGkgPiAwOyAtLWkpCi0JCWJhcnJpZXIoKTsKLQlzY2MuY2hhX2FfZGF0YSA9IGM7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hY19zY2NiX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCi0JCQkJICAgdW5zaWduZWQgaW50IGNvdW50KQotewotCXdoaWxlIChjb3VudC0tKSB7Ci0JCWlmICgqc3RyID09ICdcbicpCi0JCQltYWNfc2NjYl9vdXQoJ1xyJyk7Ci0JCW1hY19zY2NiX291dCgqc3RyKyspOwotCX0KLX0KLQotc3RhdGljIHZvaWQgbWFjX3NjY2FfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnN0ciwKLQkJCQkgICB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0Jd2hpbGUgKGNvdW50LS0pIHsKLQkJaWYgKCpzdHIgPT0gJ1xuJykKLQkJCW1hY19zY2NhX291dCgnXHInKTsKLQkJbWFjX3NjY2Ffb3V0KCpzdHIrKyk7Ci0JfQotfQotCi0KLS8qIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBkbyBhIHF1aWNrJ24nZGlydHkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIE1GUCBvcgotICogU0NDIHNlcmlhbCBwb3J0cy4gVGhleSdyZSB1c2VkIGJ5IHRoZSBkZWJ1Z2dpbmcgaW50ZXJmYWNlLCBrZ2RiLCBhbmQgdGhlCi0gKiBzZXJpYWwgY29uc29sZSBjb2RlLiAqLwotI2RlZmluZSBTQ0NCX1dSSVRFKHJlZyx2YWwpCQkJCVwKLQlkbyB7CQkJCQkJXAotCQlpbnQgaTsJCQkJCVwKLQkJc2NjLmNoYV9iX2N0cmwgPSAocmVnKTsJCQlcCi0JCWZvciAoaSA9IHVTRUM7IGkgPiAwOyAtLWkpCQlcCi0JCQliYXJyaWVyKCk7CQkJXAotCQlzY2MuY2hhX2JfY3RybCA9ICh2YWwpOwkJCVwKLQkJZm9yIChpID0gdVNFQzsgaSA+IDA7IC0taSkJCVwKLQkJCWJhcnJpZXIoKTsJCQlcCi0JfSB3aGlsZSgwKQotCi0jZGVmaW5lIFNDQ0FfV1JJVEUocmVnLHZhbCkJCQkJXAotCWRvIHsJCQkJCQlcCi0JCWludCBpOwkJCQkJXAotCQlzY2MuY2hhX2FfY3RybCA9IChyZWcpOwkJCVwKLQkJZm9yIChpID0gdVNFQzsgaSA+IDA7IC0taSkJCVwKLQkJCWJhcnJpZXIoKTsJCQlcCi0JCXNjYy5jaGFfYV9jdHJsID0gKHZhbCk7CQkJXAotCQlmb3IgKGkgPSB1U0VDOyBpID4gMDsgLS1pKQkJXAotCQkJYmFycmllcigpOwkJCVwKLQl9IHdoaWxlKDApCi0KLS8qIGxvb3BzX3Blcl9qaWZmeSBpc24ndCBpbml0aWFsaXplZCB5ZXQsIHNvIHdlIGNhbid0IHVzZSB1ZGVsYXkoKS4gVGhpcyBkb2VzIGEKLSAqIGRlbGF5IG9mIH4gNjB1cy4gKi8KLS8qIE1hYzogbG9vcHNfcGVyX2ppZmZ5IG1pbi4gMTkwMDAgXj0gLjUgdXM7IE1GUERFTEFZIHdhcyAwLjYgdXMqLwotI2RlZmluZSBMT05HX0RFTEFZKCkJCQkJCVwKLQlkbyB7CQkJCQkJXAotCQlpbnQgaTsJCQkJCVwKLQkJZm9yIChpID0gNjAqdVNFQzsgaSA+IDA7IC0taSkJCVwKLQkJICAgIGJhcnJpZXIoKTsJCQkJXAotCX0gd2hpbGUoMCkKLQotc3RhdGljIHZvaWQgX19pbml0IG1hY19pbml0X3NjY19wb3J0KGludCBjZmxhZywgaW50IHBvcnQpCi17Ci0JLyoKLQkgKiBiYXVkIHJhdGVzOiAxMjAwLCAxODAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOS4yaywgMzguNGssIDU3LjZrLCAxMTUuMmsKLQkgKi8KLQotCXN0YXRpYyBpbnQgY2xrc3JjX3RhYmxlWzldID0KLQkJLyogcmVnIDExOiAweDUwID0gQlJHLCAweDAwID0gUlR4QywgMHgyOCA9IFRSeEMgKi8KLQkJeyAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDAwLCAweDAwIH07Ci0Jc3RhdGljIGludCBjbGttb2RlX3RhYmxlWzldID0KLQkJLyogcmVnIDQ6IDB4NDAgPSB4MTYsIDB4ODAgPSB4MzIsIDB4YzAgPSB4NjQgKi8KLQkJeyAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweGMwLCAweDgwIH07Ci0Jc3RhdGljIGludCBkaXZfdGFibGVbOV0gPQotCQkvKiByZWcxMiAoQlJHIGxvdykgKi8KLQkJeyA5NCwgNjIsIDQ2LCAyMiwgMTAsIDQsIDEsIDAsIDAgfTsKLQotCWludCBiYXVkID0gY2ZsYWcgJiBDQkFVRDsKLQlpbnQgY2xrc3JjLCBjbGttb2RlLCBkaXYsIHJlZzMsIHJlZzU7Ci0KLQlpZiAoY2ZsYWcgJiBDQkFVREVYKQotCQliYXVkICs9IEIzODQwMDsKLQlpZiAoYmF1ZCA8IEIxMjAwIHx8IGJhdWQgPiBCMzg0MDArMikKLQkJYmF1ZCA9IEI5NjAwOyAvKiB1c2UgZGVmYXVsdCA5NjAwYnBzIGZvciBub24taW1wbGVtZW50ZWQgcmF0ZXMgKi8KLQliYXVkIC09IEIxMjAwOyAvKiB0YWJsZXMgc3RhcnRzIGF0IDEyMDBicHMgKi8KLQotCWNsa3NyYyAgPSBjbGtzcmNfdGFibGVbYmF1ZF07Ci0JY2xrbW9kZSA9IGNsa21vZGVfdGFibGVbYmF1ZF07Ci0JZGl2ICAgICA9IGRpdl90YWJsZVtiYXVkXTsKLQotCXJlZzMgPSAoKChjZmxhZyAmIENTSVpFKSA9PSBDUzgpID8gMHhjMCA6IDB4NDApOwotCXJlZzUgPSAoKChjZmxhZyAmIENTSVpFKSA9PSBDUzgpID8gMHg2MCA6IDB4MjApIHwgMHg4MiAvKiBhc3NlcnQgRFRSL1JUUyAqLzsKLQotCWlmIChwb3J0ID09IDEpIHsKLQkJKHZvaWQpc2NjLmNoYV9iX2N0cmw7CS8qIHJlc2V0IHJlZyBwb2ludGVyICovCi0JCVNDQ0JfV1JJVEUoOSwgMHhjMCk7CS8qIHJlc2V0ICovCi0JCUxPTkdfREVMQVkoKTsJCS8qIGV4dHJhIGRlbGF5IGFmdGVyIFdSOSBhY2Nlc3MgKi8KLQkJU0NDQl9XUklURSg0LCAoY2ZsYWcgJiBQQVJFTkIpID8gKChjZmxhZyAmIFBBUk9ERCkgPyAweDAxIDogMHgwMykgOiAwIHwKLQkJCSAgIDB4MDQgLyogMSBzdG9wYml0ICovIHwKLQkJCSAgIGNsa21vZGUpOwotCQlTQ0NCX1dSSVRFKDMsIHJlZzMpOwotCQlTQ0NCX1dSSVRFKDUsIHJlZzUpOwotCQlTQ0NCX1dSSVRFKDksIDApOwkvKiBubyBpbnRlcnJ1cHRzICovCi0JCUxPTkdfREVMQVkoKTsJCS8qIGV4dHJhIGRlbGF5IGFmdGVyIFdSOSBhY2Nlc3MgKi8KLQkJU0NDQl9XUklURSgxMCwgMCk7CS8qIE5SWiBtb2RlICovCi0JCVNDQ0JfV1JJVEUoMTEsIGNsa3NyYyk7CS8qIG1haW4gY2xvY2sgc291cmNlICovCi0JCVNDQ0JfV1JJVEUoMTIsIGRpdik7CS8qIEJSRyB2YWx1ZSAqLwotCQlTQ0NCX1dSSVRFKDEzLCAwKTsJLyogQlJHIGhpZ2ggYnl0ZSAqLwotCQlTQ0NCX1dSSVRFKDE0LCAxKTsKLQkJU0NDQl9XUklURSgzLCByZWczIHwgMSk7Ci0JCVNDQ0JfV1JJVEUoNSwgcmVnNSB8IDgpOwotCX0gZWxzZSBpZiAocG9ydCA9PSAwKSB7Ci0JCSh2b2lkKXNjYy5jaGFfYV9jdHJsOwkvKiByZXNldCByZWcgcG9pbnRlciAqLwotCQlTQ0NBX1dSSVRFKDksIDB4YzApOwkvKiByZXNldCAqLwotCQlMT05HX0RFTEFZKCk7CQkvKiBleHRyYSBkZWxheSBhZnRlciBXUjkgYWNjZXNzICovCi0JCVNDQ0FfV1JJVEUoNCwgKGNmbGFnICYgUEFSRU5CKSA/ICgoY2ZsYWcgJiBQQVJPREQpID8gMHgwMSA6IDB4MDMpIDogMCB8Ci0JCQkgIDB4MDQgLyogMSBzdG9wYml0ICovIHwKLQkJCSAgY2xrbW9kZSk7Ci0JCVNDQ0FfV1JJVEUoMywgcmVnMyk7Ci0JCVNDQ0FfV1JJVEUoNSwgcmVnNSk7Ci0JCVNDQ0FfV1JJVEUoOSwgMCk7CS8qIG5vIGludGVycnVwdHMgKi8KLQkJTE9OR19ERUxBWSgpOwkJLyogZXh0cmEgZGVsYXkgYWZ0ZXIgV1I5IGFjY2VzcyAqLwotCQlTQ0NBX1dSSVRFKDEwLCAwKTsJLyogTlJaIG1vZGUgKi8KLQkJU0NDQV9XUklURSgxMSwgY2xrc3JjKTsJLyogbWFpbiBjbG9jayBzb3VyY2UgKi8KLQkJU0NDQV9XUklURSgxMiwgZGl2KTsJLyogQlJHIHZhbHVlICovCi0JCVNDQ0FfV1JJVEUoMTMsIDApOwkvKiBCUkcgaGlnaCBieXRlICovCi0JCVNDQ0FfV1JJVEUoMTQsIDEpOwotCQlTQ0NBX1dSSVRFKDMsIHJlZzMgfCAxKTsKLQkJU0NDQV9XUklURSg1LCByZWc1IHwgOCk7Ci0JfQotfQotI2VuZGlmIC8qIERFQlVHX1NFUklBTCAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBtYWNfZGVidWdfc2V0dXAoY2hhciAqYXJnKQotewotCWlmICghTUFDSF9JU19NQUMpCi0JCXJldHVybiAwOwotCi0jaWZkZWYgREVCVUdfU0VSSUFMCi0JaWYgKCFzdHJjbXAoYXJnLCAic2VyIikgfHwgIXN0cmNtcChhcmcsICJzZXIxIikpIHsKLQkJLyogTWFjIG1vZGVtIHBvcnQgKi8KLQkJbWFjX2luaXRfc2NjX3BvcnQoQjk2MDB8Q1M4LCAwKTsKLQkJbWFjX2NvbnNvbGVfZHJpdmVyLndyaXRlID0gbWFjX3NjY2FfY29uc29sZV93cml0ZTsKLQkJc2NjX3BvcnQgPSAwOwotCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICJzZXIyIikpIHsKLQkJLyogTWFjIHByaW50ZXIgcG9ydCAqLwotCQltYWNfaW5pdF9zY2NfcG9ydChCOTYwMHxDUzgsIDEpOwotCQltYWNfY29uc29sZV9kcml2ZXIud3JpdGUgPSBtYWNfc2NjYl9jb25zb2xlX3dyaXRlOwotCQlzY2NfcG9ydCA9IDE7Ci0JfQotI2VuZGlmCi0jaWZkZWYgREVCVUdfSEVBRFMKLQlpZiAoIXN0cmNtcChhcmcsICJzY24iKSB8fCAhc3RyY21wKGFyZywgImNvbiIpKSB7Ci0JCS8qIGRpc3BsYXksIHVzaW5nIGhlYWQuUyBjb25zb2xlIHJvdXRpbmVzICovCi0JCW1hY19jb25zb2xlX2RyaXZlci53cml0ZSA9IG1hY19kZWJ1Z19jb25zb2xlX3dyaXRlOwotCX0KLSNlbmRpZgotCWlmIChtYWNfY29uc29sZV9kcml2ZXIud3JpdGUpCi0JCXJlZ2lzdGVyX2NvbnNvbGUoJm1hY19jb25zb2xlX2RyaXZlcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWVhcmx5X3BhcmFtKCJkZWJ1ZyIsIG1hY19kZWJ1Z19zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL21hY2ludHMuYyBiL2FyY2gvbTY4ay9tYWMvbWFjaW50cy5jCmluZGV4IDIzNzExMDcuLjkwMGQ4OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvbWFjaW50cy5jCisrKyBiL2FyY2gvbTY4ay9tYWMvbWFjaW50cy5jCkBAIC0zNCw5ICszNCw3IEBACiAgKgogICoJMwktIHVudXNlZCAoPykKICAqCi0gKgk0CS0gU0NDIChzbG90IG51bWJlciBkZXRlcm1pbmVkIGJ5IHJlYWRpbmcgUlIzIG9uIHRoZSBTU0MgaXRzZWxmKQotICoJCSAgLSBzbG90IDE6IFNDQyBjaGFubmVsIEEKLSAqCQkgIC0gc2xvdCAyOiBTQ0MgY2hhbm5lbCBCCisgKgk0CS0gU0NDCiAgKgogICoJNQktIHVudXNlZCAoPykKICAqCQkgIFtzZXJpYWwgZXJyb3JzIG9yIHNwZWNpYWwgY29uZGl0aW9ucyBzZWVtIHRvIHJhaXNlIGxldmVsIDYKQEAgLTU1LDggKzUzLDYgQEAKICAqCQkgIC0gc2xvdCA1OiBTbG90ICRFCiAgKgogICoJNAktIFNDQyBJT1AKLSAqCQkgIC0gc2xvdCAxOiBTQ0MgY2hhbm5lbCBBCi0gKgkJICAtIHNsb3QgMjogU0NDIGNoYW5uZWwgQgogICoKICAqCTUJLSBJU00gSU9QIChBREI/KQogICoKQEAgLTEzNiwxMyArMTMyLDggQEAKICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vbWFjX29zcy5oPgogCi0jZGVmaW5lIERFQlVHX1NQVVJJT1VTCiAjZGVmaW5lIFNIVVRVUF9TT05JQwogCi0vKiBTQ0MgaW50ZXJydXB0IG1hc2sgKi8KLQotc3RhdGljIGludCBzY2NfbWFzazsKLQogLyoKICAqIFZJQS9SQlYgaG9va3MKICAqLwpAQCAtMTkxLDEzICsxODIsNiBAQAogZXh0ZXJuIHZvaWQgYmFib29uX2lycV9jbGVhcihpbnQpOwogCiAvKgotICogU0NDIGludGVycnVwdCByb3V0aW5lcwotICovCi0KLXN0YXRpYyB2b2lkIHNjY19pcnFfZW5hYmxlKHVuc2lnbmVkIGludCk7Ci1zdGF0aWMgdm9pZCBzY2NfaXJxX2Rpc2FibGUodW5zaWduZWQgaW50KTsKLQotLyoKICAqIGNvbnNvbGVfbG9nbGV2ZWwgZGV0ZXJtaW5lcyBOTUkgaGFuZGxlciBmdW5jdGlvbgogICovCiAKQEAgLTIyMSw4ICsyMDUsNiBAQAogI2lmZGVmIERFQlVHX01BQ0lOVFMKIAlwcmludGsoIm1hY19pbml0X0lSUSgpOiBTZXR0aW5nIHRoaW5ncyB1cC4uLlxuIik7CiAjZW5kaWYKLQlzY2NfbWFzayA9IDA7Ci0KIAltNjhrX3NldHVwX2lycV9jb250cm9sbGVyKCZtYWNfaXJxX2NvbnRyb2xsZXIsIElSUV9VU0VSLAogCQkJCSAgTlVNX01BQ19TT1VSQ0VTIC0gSVJRX1VTRVIpOwogCS8qIE1ha2Ugc3VyZSB0aGUgU09OSUMgaW50ZXJydXB0IGlzIGNsZWFyZWQgb3IgdGhpbmdzIGdldCB1Z2x5ICovCkBAIC0yODMsMTUgKzI2NSwxNiBAQAogCQkJdmlhX2lycV9lbmFibGUoaXJxKTsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCWNhc2UgNDoKIAljYXNlIDU6CiAJY2FzZSA2OgogCQlpZiAocHNjX3ByZXNlbnQpCiAJCQlwc2NfaXJxX2VuYWJsZShpcnEpOwogCQllbHNlIGlmIChvc3NfcHJlc2VudCkKIAkJCW9zc19pcnFfZW5hYmxlKGlycSk7Ci0JCWVsc2UgaWYgKGlycV9zcmMgPT0gNCkKLQkJCXNjY19pcnFfZW5hYmxlKGlycSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKHBzY19wcmVzZW50KQorCQkJcHNjX2lycV9lbmFibGUoaXJxKTsKIAkJYnJlYWs7CiAJY2FzZSA4OgogCQlpZiAoYmFib29uX3ByZXNlbnQpCkBAIC0zMTYsMTUgKzI5OSwxNiBAQAogCQkJdmlhX2lycV9kaXNhYmxlKGlycSk7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQljYXNlIDQ6CiAJY2FzZSA1OgogCWNhc2UgNjoKIAkJaWYgKHBzY19wcmVzZW50KQogCQkJcHNjX2lycV9kaXNhYmxlKGlycSk7CiAJCWVsc2UgaWYgKG9zc19wcmVzZW50KQogCQkJb3NzX2lycV9kaXNhYmxlKGlycSk7Ci0JCWVsc2UgaWYgKGlycV9zcmMgPT0gNCkKLQkJCXNjY19pcnFfZGlzYWJsZShpcnEpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWlmIChwc2NfcHJlc2VudCkKKwkJCXBzY19pcnFfZGlzYWJsZShpcnEpOwogCQlicmVhazsKIAljYXNlIDg6CiAJCWlmIChiYWJvb25fcHJlc2VudCkKQEAgLTM0Nyw3ICszMzEsNiBAQAogCQkJdmlhX2lycV9jbGVhcihpcnEpOwogCQlicmVhazsKIAljYXNlIDM6Ci0JY2FzZSA0OgogCWNhc2UgNToKIAljYXNlIDY6CiAJCWlmIChwc2NfcHJlc2VudCkKQEAgLTM1NSw2ICszMzgsMTAgQEAKIAkJZWxzZSBpZiAob3NzX3ByZXNlbnQpCiAJCQlvc3NfaXJxX2NsZWFyKGlycSk7CiAJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKHBzY19wcmVzZW50KQorCQkJcHNjX2lycV9jbGVhcihpcnEpOworCQlicmVhazsKIAljYXNlIDg6CiAJCWlmIChiYWJvb25fcHJlc2VudCkKIAkJCWJhYm9vbl9pcnFfY2xlYXIoaXJxKTsKQEAgLTM3NCwxMyArMzYxLDE3IEBACiAJCWVsc2UKIAkJCXJldHVybiB2aWFfaXJxX3BlbmRpbmcoaXJxKTsKIAljYXNlIDM6Ci0JY2FzZSA0OgogCWNhc2UgNToKIAljYXNlIDY6CiAJCWlmIChwc2NfcHJlc2VudCkKIAkJCXJldHVybiBwc2NfaXJxX3BlbmRpbmcoaXJxKTsKIAkJZWxzZSBpZiAob3NzX3ByZXNlbnQpCiAJCQlyZXR1cm4gb3NzX2lycV9wZW5kaW5nKGlycSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKHBzY19wcmVzZW50KQorCQkJcHNjX2lycV9wZW5kaW5nKGlycSk7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQ0OCw1OSArNDM5LDMgQEAKIAlpbl9ubWktLTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9Ci0KLS8qCi0gKiBTaW1wbGUgcm91dGluZXMgZm9yIG1hc2tpbmcgYW5kIHVubWFza2luZwotICogU0NDIGludGVycnVwdHMgaW4gY2FzZXMgd2hlcmUgdGhpcyBjYW4ndCBiZQotICogZG9uZSBpbiBoYXJkd2FyZSAob25seSB0aGUgUFNDIGNhbiBkbyB0aGF0LikKLSAqLwotCi1zdGF0aWMgdm9pZCBzY2NfaXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBpcnFfaWR4ID0gSVJRX0lEWChpcnEpOwotCi0Jc2NjX21hc2sgfD0gKDEgPDwgaXJxX2lkeCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjY19pcnFfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBpcnFfaWR4ID0gSVJRX0lEWChpcnEpOwotCi0Jc2NjX21hc2sgJj0gfigxIDw8IGlycV9pZHgpOwotfQotCi0vKgotICogU0NDIG1hc3RlciBpbnRlcnJ1cHQgaGFuZGxlci4gV2UgaGF2ZSB0byBkbyBhIGJpdCBvZiBtYWdpYyBoZXJlCi0gKiB0byBmaWd1cmUgb3V0IHdoYXQgY2hhbm5lbCBnYXZlIHVzIHRoZSBpbnRlcnJ1cHQ7IHB1dHRpbmcgdGhpcwotICogaGVyZSBpcyBjbGVhbmVyIHRoYW4gaGFja2luZyBpdCBpbnRvIGRyaXZlcnMvY2hhci9tYWNzZXJpYWwuYy4KLSAqLwotCi12b2lkIG1hY19zY2NfZGlzcGF0Y2goaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnNjYyA9ICh1bnNpZ25lZCBjaGFyICopIG1hY19iaV9kYXRhLnNjY2Jhc2UgKyAyOwotCXVuc2lnbmVkIGNoYXIgcmVnOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBSZWFkIFJSMyBmcm9tIHRoZSBjaGlwLiBBbHdheXMgZG8gdGhpcyBvbiBjaGFubmVsIEEgKi8KLQkvKiBUaGlzIG11c3QgYmUgYW4gYXRvbWljIG9wZXJhdGlvbiBzbyBkaXNhYmxlIGlycXMuICAgKi8KLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkqc2NjID0gMzsKLQlyZWcgPSAqc2NjOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCS8qIE5vdyBkaXNwYXRjaC4gQml0cyAwLTIgYXJlIGZvciBjaGFubmVsIEIgYW5kICovCi0JLyogYml0cyAzLTUgYXJlIGZvciBjaGFubmVsIEEuIFdlIGNhbiBzYWZlbHkgICAgKi8KLQkvKiBpZ25vcmUgdGhlIHJlbWFpbmluZyBiaXRzIGhlcmUuICAgICAgICAgICAgICAqLwotCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JLyogTm90ZSB0aGF0IHdlJ3JlIGlnbm9yaW5nIHNjY19tYXNrIGZvciBub3cuICAgKi8KLQkvKiBJZiB3ZSBhY3R1YWxseSBtYXNrIHRoZSBpbnRzIHRoZW4gd2UgdGVuZCB0byAqLwotCS8qIGdldCBoYW1tZXJlZCBieSB2ZXJ5IHBlcnNpc3RlbnQgU0NDIGlycXMsICAgICovCi0JLyogYW5kIHNpbmNlIHRoZXkncmUgYXV0b3ZlY3RvciBpbnRlcnJ1cHRzIHRoZXkgKi8KLQkvKiBwcmV0dHkgbXVjaCBraWxsIHRoZSBzeXN0ZW0uICAgICAgICAgICAgICAgICAqLwotCi0JaWYgKHJlZyAmIDB4MzgpCi0JCW02OGtfaGFuZGxlX2ludChJUlFfU0NDQSk7Ci0JaWYgKHJlZyAmIDB4MDcpCi0JCW02OGtfaGFuZGxlX2ludChJUlFfU0NDQik7Ci19CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL29zcy5jIGIvYXJjaC9tNjhrL21hYy9vc3MuYwppbmRleCBmM2QyM2Q2Li5hOWMwZjVhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL29zcy5jCisrKyBiL2FyY2gvbTY4ay9tYWMvb3NzLmMKQEAgLTMzLDcgKzMzLDYgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBvc3NfbnVidXNfaXJxKGludCwgdm9pZCAqKTsKIAogZXh0ZXJuIGlycXJldHVybl90IHZpYTFfaXJxKGludCwgdm9pZCAqKTsKLWV4dGVybiBpcnFyZXR1cm5fdCBtYWNfc2NjX2Rpc3BhdGNoKGludCwgdm9pZCAqKTsKIAogLyoKICAqIEluaXRpYWxpemUgdGhlIE9TUwpAQCAtNjksOSArNjgsNiBAQAogCWlmIChyZXF1ZXN0X2lycShPU1NfSVJRTEVWX1NDU0ksIG9zc19pcnEsIElSUV9GTEdfTE9DSywKIAkJCSJzY3NpIiwgKHZvaWQgKikgb3NzKSkKIAkJcHJfZXJyKCJDb3VsZG4ndCByZWdpc3RlciAlcyBpbnRlcnJ1cHRcbiIsICJzY3NpIik7Ci0JaWYgKHJlcXVlc3RfaXJxKE9TU19JUlFMRVZfSU9QU0NDLCBtYWNfc2NjX2Rpc3BhdGNoLCBJUlFfRkxHX0xPQ0ssCi0JCQkic2NjIiwgbWFjX3NjY19kaXNwYXRjaCkpCi0JCXByX2VycigiQ291bGRuJ3QgcmVnaXN0ZXIgJXMgaW50ZXJydXB0XG4iLCAic2NjIik7CiAJaWYgKHJlcXVlc3RfaXJxKE9TU19JUlFMRVZfTlVCVVMsIG9zc19udWJ1c19pcnEsIElSUV9GTEdfTE9DSywKIAkJCSJudWJ1cyIsICh2b2lkICopIG9zcykpCiAJCXByX2VycigiQ291bGRuJ3QgcmVnaXN0ZXIgJXMgaW50ZXJydXB0XG4iLCAibnVidXMiKTsKQEAgLTE3Miw5ICsxNjgsNyBAQAogCXByaW50aygib3NzX2lycV9lbmFibGUoJWQpXG4iLCBpcnEpOwogI2VuZGlmCiAJc3dpdGNoKGlycSkgewotCQljYXNlIElSUV9TQ0M6Ci0JCWNhc2UgSVJRX1NDQ0E6Ci0JCWNhc2UgSVJRX1NDQ0I6CisJCWNhc2UgSVJRX01BQ19TQ0M6CiAJCQlvc3MtPmlycV9sZXZlbFtPU1NfSU9QU0NDXSA9IE9TU19JUlFMRVZfSU9QU0NDOwogCQkJYnJlYWs7CiAJCWNhc2UgSVJRX01BQ19BREI6CkBAIC0yMTIsOSArMjA2LDcgQEAKIAlwcmludGsoIm9zc19pcnFfZGlzYWJsZSglZClcbiIsIGlycSk7CiAjZW5kaWYKIAlzd2l0Y2goaXJxKSB7Ci0JCWNhc2UgSVJRX1NDQzoKLQkJY2FzZSBJUlFfU0NDQToKLQkJY2FzZSBJUlFfU0NDQjoKKwkJY2FzZSBJUlFfTUFDX1NDQzoKIAkJCW9zcy0+aXJxX2xldmVsW09TU19JT1BTQ0NdID0gT1NTX0lSUUxFVl9ESVNBQkxFRDsKIAkJCWJyZWFrOwogCQljYXNlIElSUV9NQUNfQURCOgpAQCAtMjUwLDkgKzI0Miw3IEBACiB2b2lkIG9zc19pcnFfY2xlYXIoaW50IGlycSkgewogCS8qIEZJWE1FOiBob3cgdG8gZG8gdGhpcyBvbiBPU1M/ICovCiAJc3dpdGNoKGlycSkgewotCQljYXNlIElSUV9TQ0M6Ci0JCWNhc2UgSVJRX1NDQ0E6Ci0JCWNhc2UgSVJRX1NDQ0I6CisJCWNhc2UgSVJRX01BQ19TQ0M6CiAJCQlvc3MtPmlycV9wZW5kaW5nICY9IH5PU1NfSVBfSU9QU0NDOwogCQkJYnJlYWs7CiAJCWNhc2UgSVJRX01BQ19BREI6CkBAIC0yODAsOSArMjcwLDcgQEAKIGludCBvc3NfaXJxX3BlbmRpbmcoaW50IGlycSkKIHsKIAlzd2l0Y2goaXJxKSB7Ci0JCWNhc2UgSVJRX1NDQzoKLQkJY2FzZSBJUlFfU0NDQToKLQkJY2FzZSBJUlFfU0NDQjoKKwkJY2FzZSBJUlFfTUFDX1NDQzoKIAkJCXJldHVybiBvc3MtPmlycV9wZW5kaW5nICYgT1NTX0lQX0lPUFNDQzsKIAkJCWJyZWFrOwogCQljYXNlIElSUV9NQUNfQURCOgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy92aWEuYyBiL2FyY2gvbTY4ay9tYWMvdmlhLmMKaW5kZXggMTFiY2UzYy4uZTcxMTY2ZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy92aWEuYworKysgYi9hcmNoL202OGsvbWFjL3ZpYS5jCkBAIC04NCw4ICs4NCw2IEBACiB2b2lkIHZpYV9pcnFfZGlzYWJsZShpbnQgaXJxKTsKIHZvaWQgdmlhX2lycV9jbGVhcihpbnQgaXJxKTsKIAotZXh0ZXJuIGlycXJldHVybl90IG1hY19zY2NfZGlzcGF0Y2goaW50LCB2b2lkICopOwotCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgVklBcwogICoKQEAgLTMxMSwxMSArMzA5LDYgQEAKIAlpZiAocmVxdWVzdF9pcnEoSVJRX0FVVE9fMiwgdmlhMl9pcnEsIElSUV9GTEdfTE9DS3xJUlFfRkxHX0ZBU1QsCiAJCQkidmlhMiIsICh2b2lkICopIHZpYTIpKQogCQlwcl9lcnIoIkNvdWxkbid0IHJlZ2lzdGVyICVzIGludGVycnVwdFxuIiwgInZpYTIiKTsKLQlpZiAoIXBzY19wcmVzZW50KSB7Ci0JCWlmIChyZXF1ZXN0X2lycShJUlFfQVVUT180LCBtYWNfc2NjX2Rpc3BhdGNoLCBJUlFfRkxHX0xPQ0ssCi0JCQkJInNjYyIsIG1hY19zY2NfZGlzcGF0Y2gpKQotCQkJcHJfZXJyKCJDb3VsZG4ndCByZWdpc3RlciAlcyBpbnRlcnJ1cHRcbiIsICJzY2MiKTsKLQl9CiAJaWYgKHJlcXVlc3RfaXJxKElSUV9NQUNfTlVCVVMsIHZpYV9udWJ1c19pcnEsCiAJCQlJUlFfRkxHX0xPQ0t8SVJRX0ZMR19GQVNULCAibnVidXMiLCAodm9pZCAqKSB2aWEyKSkKIAkJcHJfZXJyKCJDb3VsZG4ndCByZWdpc3RlciAlcyBpbnRlcnJ1cHRcbiIsICJudWJ1cyIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL2ttYXAuYyBiL2FyY2gvbTY4ay9tbS9rbWFwLmMKaW5kZXggZGY2MjBhYy4uNjkzNDU4NCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL2ttYXAuYworKysgYi9hcmNoL202OGsvbW0va21hcC5jCkBAIC05OSw4ICs5OSw3IEBACiAjZW5kaWYKIAogLyoKLSAqIE1hcCBzb21lIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuIFRoZQotICogY29kZSBpcyBjb3BpZWQgYW5kIGFkYXB0ZWQgZnJvbSBtYXBfY2h1bmsoKS4KKyAqIE1hcCBzb21lIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuCiAgKi8KIC8qIFJld3JpdHRlbiBieSBBbmRyZWFzIFNjaHdhYiB0byByZW1vdmUgYWxsIHJhY2VzLiAqLwogCkBAIC0xMTYsNyArMTE1LDcgQEAKIAkvKgogCSAqIERvbid0IGFsbG93IG1hcHBpbmdzIHRoYXQgd3JhcC4uCiAJICovCi0JaWYgKCFzaXplIHx8IHNpemUgPiBwaHlzYWRkciArIHNpemUpCisJaWYgKCFzaXplIHx8IHBoeXNhZGRyID4gKHVuc2lnbmVkIGxvbmcpKC1zaXplKSkKIAkJcmV0dXJuIE5VTEw7CiAKICNpZmRlZiBDT05GSUdfQU1JR0EKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDVjOWVjZDQuLjk1OWNiMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjIxLDYgKzIyMSwxMCBAQAogCiAJcC0+dGhyZWFkLnVzcCA9IHVzcDsKIAlwLT50aHJlYWQua3NwID0gKHVuc2lnbmVkIGxvbmcpY2hpbGRzdGFjazsKKworCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1NFVFRMUykKKwkJdGFza190aHJlYWRfaW5mbyhwKS0+dHBfdmFsdWUgPSByZWdzLT5kNTsKKwogCS8qCiAJICogTXVzdCBzYXZlIHRoZSBjdXJyZW50IFNGQy9ERkMgdmFsdWUsIE5PVCB0aGUgdmFsdWUgd2hlbgogCSAqIHRoZSBwYXJlbnQgd2FzIGxhc3QgZGVzY2hlZHVsZWQgLSBSR0ggIDEwLTA4LTk2CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNGQzODI4OS4uODVlZDJmOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wdHJhY2UuYwpAQCAtMzE5LDYgKzMxOSwxMSBAQAogCQl9CiAjZW5kaWYKIAorCWNhc2UgUFRSQUNFX0dFVF9USFJFQURfQVJFQToKKwkJcmV0ID0gcHV0X3VzZXIodGFza190aHJlYWRfaW5mbyhjaGlsZCktPnRwX3ZhbHVlLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWRhdGEpOworCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJcmV0ID0gLUVJTzsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c19tNjhrLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzX202OGsuYwppbmRleCBiNjdjYmM3Li45MjNkZDRhIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzX202OGsuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzX202OGsuYwpAQCAtMTkwLDMgKzE5MCwzOSBAQAogCQkJOiAiZCIgKF9fYSksICJkIiAoX19iKSwgImQiIChfX2MpKTsKIAlyZXR1cm4gX19yZXM7CiB9CisKK2FzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNfZ2V0X3RocmVhZF9hcmVhKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dHBfdmFsdWU7Cit9CisKK2FzbWxpbmthZ2UgaW50IHN5c19zZXRfdGhyZWFkX2FyZWEodW5zaWduZWQgbG9uZyB0cCkKK3sKKwljdXJyZW50X3RocmVhZF9pbmZvKCktPnRwX3ZhbHVlID0gdHA7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgc3lzY2FsbCBnZXRzIGl0cyBhcmd1bWVudHMgaW4gQTAgKG1lbSksIEQyIChvbGR2YWwpIGFuZAorICAgRDEgKG5ld3ZhbCkuICAqLworYXNtbGlua2FnZSBpbnQKK3N5c19hdG9taWNfY21weGNoZ18zMih1bnNpZ25lZCBsb25nIG5ld3ZhbCwgaW50IG9sZHZhbCwgaW50IGQzLCBpbnQgZDQsIGludCBkNSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBfX3VzZXIgKiBtZW0pCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwl1bnNpZ25lZCBsb25nIG1lbV92YWx1ZTsKKworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKworCW1lbV92YWx1ZSA9ICptZW07CisJaWYgKG1lbV92YWx1ZSA9PSBvbGR2YWwpCisJCSptZW0gPSBuZXd2YWw7CisKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXJldHVybiBtZW1fdmFsdWU7Cit9CisKK2FzbWxpbmthZ2UgaW50IHN5c19hdG9taWNfYmFycmllcih2b2lkKQoreworCS8qIG5vIGNvZGUgbmVlZGVkIGZvciB1bmlwcm9jcyAqLworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c2NhbGx0YWJsZS5TIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c2NhbGx0YWJsZS5TCmluZGV4IDQ4NjgzN2UuLjU2ZGQwMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNjYWxsdGFibGUuUworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKQEAgLTM1MSw2ICszNTEsMTAgQEAKIAkubG9uZyBzeXNfcHdyaXRldgkJLyogMzMwICovCiAJLmxvbmcgc3lzX3J0X3Rnc2lncXVldWVpbmZvCiAJLmxvbmcgc3lzX3BlcmZfZXZlbnRfb3BlbgorCS5sb25nIHN5c19nZXRfdGhyZWFkX2FyZWEKKwkubG9uZyBzeXNfc2V0X3RocmVhZF9hcmVhCisJLmxvbmcgc3lzX2F0b21pY19jbXB4Y2hnXzMyCS8qIDMzNSAqLworCS5sb25nIHN5c19hdG9taWNfYmFycmllcgogCiAJLnJlcHQgTlJfc3lzY2FsbHMtKC4tc3lzX2NhbGxfdGFibGUpLzQKIAkJLmxvbmcgc3lzX25pX3N5c2NhbGwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L21tL21lbW9yeS5jIGIvYXJjaC9tNjhrbm9tbXUvbW0vbWVtb3J5LmMKaW5kZXggZjkzYjg4Yi4uZDViOWUxMyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvbW0vbWVtb3J5LmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvbW0vbWVtb3J5LmMKQEAgLTI0LDcgKzI0LDYgQEAKIAogLyoKICAqIE1hcCBzb21lIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuCi0gKiBUaGUgY29kZSBpcyBjb3BpZWQgYW5kIGFkYXB0ZWQgZnJvbSBtYXBfY2h1bmsoKS4KICAqLwogCiB1bnNpZ25lZCBsb25nIGtlcm5lbF9tYXAodW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL0tjb25maWcgYi9hcmNoL21pY3JvYmxhemUvS2NvbmZpZwppbmRleCBjZDU4MzdlLi5iMDA4MTY4IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvS2NvbmZpZworKysgYi9hcmNoL21pY3JvYmxhemUvS2NvbmZpZwpAQCAtMTMwLDYgKzEzMCw3IEBACiAKIGNvbmZpZyBPRgogCWRlZl9ib29sIHkKKwlzZWxlY3QgT0ZfRkxBVFRSRUUKIAogY29uZmlnIFBST0NfREVWSUNFVFJFRQogCWJvb2wgIlN1cHBvcnQgZm9yIGRldmljZSB0cmVlIGluIC9wcm9jIgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2NvbmZpZ3MvbW11X2RlZmNvbmZpZyBiL2FyY2gvbWljcm9ibGF6ZS9jb25maWdzL21tdV9kZWZjb25maWcKaW5kZXggYmI3YzM3NC4uNmZjZWQxZiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2NvbmZpZ3MvbW11X2RlZmNvbmZpZworKysgYi9hcmNoL21pY3JvYmxhemUvY29uZmlncy9tbXVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTA6Mjg6NTAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjNgorIyBXZWQgRmViICAzIDEwOjAyOjU5IDIwMTAKICMKIENPTkZJR19NSUNST0JMQVpFPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldApAQCAtMTksOCArMTksMTIgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19DU1VNPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKIENPTkZJR19OT19ETUE9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTQ0LDYgKzQ4LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC02NCwxMCArNjksMTIgQEAKIENPTkZJR19SRF9HWklQPXkKICMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fR1pJUD15CiAjIENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fQlpJUDIgaXMgbm90IHNldAogIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CkBAIC05MCwyMSArOTcsMjAgQEAKIENPTkZJR19BSU89eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKICMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19CQVNFX1NNQUxMPTEKQEAgLTEyMywxNCArMTI5LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM5LDExICsxNzIsNiBAQAogQ09ORklHX1BMQVRGT1JNX0dFTkVSSUM9eQogQ09ORklHX09QVF9MSUJfRlVOQ1RJT049eQogQ09ORklHX09QVF9MSUJfQVNNPXkKLUNPTkZJR19BTExPV19FRElUX0FVVE89eQotCi0jCi0jIEF1dG9tYXRpYyBwbGF0Zm9ybSBzZXR0aW5ncyBmcm9tIEtjb25maWcuYXV0bwotIwogCiAjCiAjIERlZmluaXRpb25zIGZvciBNSUNST0JMQVpFMApAQCAtMjAzLDEyICsyMzEsMTEgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9OTk5OTk5CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI4OSw3ICszMTYsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIwogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zMTMsNiArMzQ2LDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CkBAIC0zNDksNyArMzg2LDYgQEAKICMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKICMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CkBAIC0zNTksMTIgKzM5NSwxMiBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfWElMSU5YX0VNQUNMSVRFPXkKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTQwOCw2ICs0NDQsNyBAQAogQ09ORklHX1NFUklBTF9VQVJUTElURV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC00MzMsNyArNDcwLDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC01MjYsOCArNTYyLDYgQEAKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKQEAgLTYzOCwxMSArNjcyLDEzIEBACiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC02NjIsNiArNjk4LDkgQEAKICMgQ09ORklHX0RFQlVHX1NMQUJfTEVBSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTY4MCwxMCArNzE5LDI5IEBACiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfSEVBUlRfQkVBVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfQk9PVE1FTT15CkBAIC02OTQsNyArNzUyLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2NvbmZpZ3Mvbm9tbXVfZGVmY29uZmlnIGIvYXJjaC9taWNyb2JsYXplL2NvbmZpZ3Mvbm9tbXVfZGVmY29uZmlnCmluZGV4IGFkYjgzOWIuLmNlMmRhNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9jb25maWdzL25vbW11X2RlZmNvbmZpZworKysgYi9hcmNoL21pY3JvYmxhemUvY29uZmlncy9ub21tdV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxMDoyOTo0MyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmM2CisjIFdlZCBGZWIgIDMgMTA6MDM6MjEgMjAxMAogIwogQ09ORklHX01JQ1JPQkxBWkU9eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CkBAIC0xOSw4ICsxOSwxMiBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX0NTVU09eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19QQ0kgaXMgbm90IHNldAogQ09ORklHX05PX0RNQT15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNDYsNiArNTAsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTgxLDE2ICs4NiwxNiBAQAogQ09ORklHX0FJTz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTExNiwxNCArMTIxLDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTMyLDcgKzE2NCwxMCBAQAogQ09ORklHX1BMQVRGT1JNX0dFTkVSSUM9eQogIyBDT05GSUdfU0VMRk1PRCBpcyBub3Qgc2V0CiAjIENPTkZJR19PUFRfTElCX0ZVTkNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMTE9XX0VESVRfQVVUTyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmaW5pdGlvbnMgZm9yIE1JQ1JPQkxBWkUwCisjCiBDT05GSUdfS0VSTkVMX0JBU0VfQUREUj0weDkwMDAwMDAwCiBDT05GSUdfWElMSU5YX01JQ1JPQkxBWkUwX0ZBTUlMWT0idmlydGV4NSIKIENPTkZJR19YSUxJTlhfTUlDUk9CTEFaRTBfVVNFX01TUl9JTlNUUj0xCkBAIC0xOTAsNyArMjI1LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19OT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTPTEKIAogIwpAQCAtMjc0LDkgKzMwOCw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTMwMSw5ICszMzIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtMzg3LDYgKzQxOCwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogQ09ORklHX0JMS19ERVZfTkJEPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKQEAgLTQyMyw3ICs0NTgsNiBAQAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKQEAgLTQzMywxMiArNDY3LDEyIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC00ODIsNiArNTE2LDcgQEAKIENPTkZJR19TRVJJQUxfVUFSVExJVEVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtNTA4LDcgKzU0Myw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwpAQCAtNjE2LDcgKzY1MCw2IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CkBAIC02NzIsMTEgKzcwNSwxMyBAQAogIwogIyBLZXJuZWwgaGFja2luZwogIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19VTlVTRURfU1lNQk9MUz15CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC02OTUsMTIgKzczMCwxNiBAQAogQ09ORklHX0RFQlVHX09CSkVDVFNfU0VMRlRFU1Q9eQogQ09ORklHX0RFQlVHX09CSkVDVFNfRlJFRT15CiBDT05GSUdfREVCVUdfT0JKRUNUU19USU1FUlM9eQorIyBDT05GSUdfREVCVUdfT0JKRUNUU19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19PQkpFQ1RTX0VOQUJMRV9ERUZBVUxUPTEKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTcyMCw4ICs3NTksMjggQEAKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKQEAgLTczNCw3ICs3OTMsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pby5oCmluZGV4IGZjOTk5N2IuLjI2N2M3YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pby5oCkBAIC0yMTcsNyArMjE3LDcgQEAKICAqIExpdHRsZSBlbmRpYW4KICAqLwogCi0jZGVmaW5lIG91dF9sZTMyKGEsIHYpIF9fcmF3X3dyaXRlbChfX2NwdV90b19sZTMyKHYpLCAoYSkpOworI2RlZmluZSBvdXRfbGUzMihhLCB2KSBfX3Jhd193cml0ZWwoX19jcHVfdG9fbGUzMih2KSwgKGEpKQogI2RlZmluZSBvdXRfbGUxNihhLCB2KSBfX3Jhd193cml0ZXcoX19jcHVfdG9fbGUxNih2KSwgKGEpKQogCiAjZGVmaW5lIGluX2xlMzIoYSkgX19sZTMyX3RvX2NwdShfX3Jhd19yZWFkbChhKSkKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wcm9tLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHJvbS5oCmluZGV4IGVmM2VjMWQuLjAzZjQ1YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wcm9tLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3Byb20uaApAQCAtMjYsMzEgKzI2LDExIEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAotI2RlZmluZSBPRl9ST09UX05PREVfQUREUl9DRUxMU19ERUZBVUxUCTEKLSNkZWZpbmUgT0ZfUk9PVF9OT0RFX1NJWkVfQ0VMTFNfREVGQVVMVAkxCi0KLSNkZWZpbmUgb2ZfY29tcGF0X2NtcChzMSwgczIsIGwpCXN0cm5jYXNlY21wKChzMSksIChzMiksIChsKSkKLSNkZWZpbmUgb2ZfcHJvcF9jbXAoczEsIHMyKQkJc3RyY21wKChzMSksIChzMikpCi0jZGVmaW5lIG9mX25vZGVfY21wKHMxLCBzMikJCXN0cmNhc2VjbXAoKHMxKSwgKHMyKSkKLQotZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfY2hvc2VuOwotCiAjZGVmaW5lIEhBVkVfQVJDSF9ERVZUUkVFX0ZJWFVQUwogCi1leHRlcm4gc3RydWN0IGRldmljZV9ub2RlICphbGxub2RlczsJLyogdGVtcG9yYXJ5IHdoaWxlIG1lcmdpbmcgKi8KLWV4dGVybiByd2xvY2tfdCBkZXZ0cmVlX2xvY2s7CS8qIHRlbXBvcmFyeSB3aGlsZSBtZXJnaW5nICovCi0KLS8qIEZvciB1cGRhdGluZyB0aGUgZGV2aWNlIHRyZWUgYXQgcnVudGltZSAqLwotZXh0ZXJuIHZvaWQgb2ZfYXR0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICopOwotZXh0ZXJuIHZvaWQgb2ZfZGV0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICopOwotCiAvKiBPdGhlciBQcm90b3R5cGVzICovCiBleHRlcm4gaW50IGVhcmx5X3VhcnRsaXRlX2NvbnNvbGUodm9pZCk7CiAKLWV4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgKnJlcXVlc3RfT0ZfcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQkJCWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZV9wb3N0Zml4KTsKLWV4dGVybiBpbnQgcmVsZWFzZV9PRl9yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIGludCBpbmRleCk7Ci0KIC8qCiAgKiBPRiBhZGRyZXNzIHJldHJlaXZhbCAmIHRyYW5zbGF0aW9uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggZWIzMWEwZS4uMTBlYzcwYyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKQEAgLTM4LDcgKzM4LDcgQEAKIAogI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKIAotI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkciwgcHRlKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyLCBwdGVwKQlkbyB7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZmx1c2hfdGxiX2FsbCBsb2NhbF9mbHVzaF90bGJfYWxsCiAjZGVmaW5lIGZsdXNoX3RsYl9tbSBsb2NhbF9mbHVzaF90bGJfbW0KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L2NhY2hlLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jYWNoZS5jCmluZGV4IGQ5ZDYzODMuLjJhNTZiY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L2NhY2hlLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY2FjaGUuYwpAQCAtMTcyLDE2ICsxNzIsMTUgQEAKIC8qIEl0IGlzIHVzZWQgb25seSBmaXJzdCBwYXJhbWV0ZXIgZm9yIE9QIC0gZm9yIHdpYywgd2RjICovCiAjZGVmaW5lIENBQ0hFX1JBTkdFX0xPT1BfMShzdGFydCwgZW5kLCBsaW5lX2xlbmd0aCwgb3ApCQkJXAogZG8gewkJCQkJCQkJCVwKLQlpbnQgc3RlcCA9IC1saW5lX2xlbmd0aDsJCQkJCVwKLQlpbnQgY291bnQgPSBlbmQgLSBzdGFydDsJCQkJCVwKLQlCVUdfT04oY291bnQgPD0gMCk7CQkJCQkJXAorCWludCB2b2xhdGlsZSB0ZW1wOwkJCQkJCVwKKwlCVUdfT04oZW5kIC0gc3RhcnQgPD0gMCk7CQkJCQlcCiAJCQkJCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgMToJYWRkawklMCwgJTAsICUxOwkJXAotCQkJCQkiICNvcCAiICUwLCByMDsJCQlcCi0JCQkJCWJndGlkICAgJTEsIDFiOwkJCVwKLQkJCQkJYWRkayAgICAlMSwgJTEsICUyOwkJXAotCQkJCQkiIDogOiAiciIgKHN0YXJ0KSwgInIiIChjb3VudCksCVwKLQkJCQkJInIiIChzdGVwKSA6ICJtZW1vcnkiKTsJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiAxOgkiICNvcCAiICUxLCByMDsJCQlcCisJCQkJCWNtcHUJJTAsICUxLCAlMjsJCVwKKwkJCQkJYmd0aWQJJTAsIDFiOwkJCVwKKwkJCQkJYWRkawklMSwgJTEsICUzOwkJXAorCQkJCSIgOiA6ICJyIiAodGVtcCksICJyIiAoc3RhcnQpLCAiciIgKGVuZCksXAorCQkJCQkiciIgKGxpbmVfbGVuZ3RoKSA6ICJtZW1vcnkiKTsJXAogfSB3aGlsZSAoMCk7CiAKIHN0YXRpYyB2b2lkIF9fZmx1c2hfaWNhY2hlX3JhbmdlX21zcl9pcnEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCkBAIC0zMTMsMTYgKzMxMiw2IEBACiAJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAJQ0FDSEVfQUxMX0xPT1AyKGNwdWluZm8uZGNhY2hlX3NpemUsIGNwdWluZm8uZGNhY2hlX2xpbmVfbGVuZ3RoLAogCQkJCQl3ZGMuY2xlYXIpCi0KLSNpZiAwCi0JdW5zaWduZWQgaW50IGk7Ci0KLQlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKLQotCS8qIEp1c3QgbG9vcCB0aHJvdWdoIGNhY2hlIHNpemUgYW5kIGludmFsaWRhdGUgaXQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY3B1aW5mby5kY2FjaGVfc2l6ZTsgaSArPSBjcHVpbmZvLmRjYWNoZV9saW5lX2xlbmd0aCkKLQkJCV9faW52YWxpZGF0ZV9kY2FjaGUoMCwgaSk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19pbnZhbGlkYXRlX2RjYWNoZV9yYW5nZV93Yih1bnNpZ25lZCBsb25nIHN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS1ub21tdS5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS1ub21tdS5TCmluZGV4IDk1YjA4NTUuLjM5MWQ2MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnktbm9tbXUuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LW5vbW11LlMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCiByZXRfZnJvbV9pbnRyOgogCWx3aQlyMTEsIHIxLCBQVF9NT0RFCi0JYm5laWQJcjExLCAzZgorCWJuZWlkCXIxMSwgbm9faW50cl9yZXNjaGVkCiAKIAlsd2kJcjYsIHIzMSwgVFNfVEhSRUFEX0lORk8JLyogZ2V0IHRocmVhZCBpbmZvICovCiAJbHdpCXIxOSwgcjYsIFRJX0ZMQUdTCS8qIGdldCBmbGFncyBpbiB0aHJlYWQgaW5mbyAqLwpAQCAtMTMzLDE2ICsxMzMsMTggQEAKIAlicmFsaWQJcjE1LCBzY2hlZHVsZQogCW5vcAogMToJYW5kaQlyMTEsIHIxOSwgX1RJRl9TSUdQRU5ESU5HCi0JYmVxaWQJcjExLCBub19pbnRyX3Jlc2hlZAorCWJlcWlkCXIxMSwgbm9faW50cl9yZXNjaGVkCiAJYWRkawlyNSwgcjEsIHIwCiAJYWRkawlyNywgcjAsIHIwCiAJYnJhbGlkCXIxNSwgZG9fc2lnbmFsCiAJYWRkawlyNiwgcjAsIHIwCiAKLW5vX2ludHJfcmVzaGVkOgorbm9faW50cl9yZXNjaGVkOgorCS8qIERpc2FibGUgaW50ZXJydXB0cywgd2UgYXJlIG5vdyBjb21taXR0ZWQgdG8gdGhlIHN0YXRlIHJlc3RvcmUgKi8KKwlkaXNhYmxlX2lycQorCiAJLyogc2F2ZSBtb2RlIGluZGljYXRvciAqLwogCWx3aQlyMTEsIHIxLCBQVF9NT0RFCi0zOgogCXN3aQlyMTEsIHIwLCBQRVJfQ1BVKEtNKQogCiAJLyogc2F2ZSByMzEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvb2ZfcGxhdGZvcm0uYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvb2ZfcGxhdGZvcm0uYwppbmRleCBhY2Y0NTc0Li4xYzZkNjg0IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL29mX3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9vZl9wbGF0Zm9ybS5jCkBAIC0xODUsNyArMTg1LDcgQEAKIHN0YXRpYyBpbnQgb2ZfZGV2X3BoYW5kbGVfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCXBoYW5kbGUgKnBoID0gZGF0YTsKLQlyZXR1cm4gdG9fb2ZfZGV2aWNlKGRldiktPm5vZGUtPmxpbnV4X3BoYW5kbGUgPT0gKnBoOworCXJldHVybiB0b19vZl9kZXZpY2UoZGV2KS0+bm9kZS0+cGhhbmRsZSA9PSAqcGg7CiB9CiAKIHN0cnVjdCBvZl9kZXZpY2UgKm9mX2ZpbmRfZGV2aWNlX2J5X3BoYW5kbGUocGhhbmRsZSBwaCkKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvbS5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9tLmMKaW5kZXggYjgxN2RmMS4uYTE1ZWY2ZCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9tLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9tLmMKQEAgLTQyLDY5OCArNDIsMjEgQEAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgogCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgZHRfcm9vdF9hZGRyX2NlbGxzOwotc3RhdGljIGludCBfX2luaXRkYXRhIGR0X3Jvb3Rfc2l6ZV9jZWxsczsKLQotdHlwZWRlZiB1MzIgY2VsbF90OwotCi1zdGF0aWMgc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyICppbml0aWFsX2Jvb3RfcGFyYW1zOwotCi0vKiBleHBvcnQgdGhhdCB0byBvdXRzaWRlIHdvcmxkICovCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2Nob3NlbjsKLQotc3RhdGljIGlubGluZSBjaGFyICpmaW5kX2ZsYXRfZHRfc3RyaW5nKHUzMiBvZmZzZXQpCit2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuX2FyY2godW5zaWduZWQgbG9uZyBub2RlKQogewotCXJldHVybiAoKGNoYXIgKilpbml0aWFsX2Jvb3RfcGFyYW1zKSArCi0JCWluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJpbmdzICsgb2Zmc2V0OworCS8qIE5vIE1pY3JvYmxhemUgc3BlY2lmaWMgY29kZSBoZXJlICovCiB9CiAKLS8qKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNjYW4gdGhlIGZsYXR0ZW5lZCBkZXZpY2UtdHJlZSwgaXQgaXMKLSAqIHVzZWQgdG8gZXh0cmFjdCB0aGUgbWVtb3J5IGluZm9ybWF0aW9ucyBhdCBib290IGJlZm9yZSB3ZSBjYW4KLSAqIHVuZmxhdHRlbiB0aGUgdHJlZQotICovCi1pbnQgX19pbml0IG9mX3NjYW5fZmxhdF9kdChpbnQgKCppdCkodW5zaWduZWQgbG9uZyBub2RlLAotCQkJCSAgICAgY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwKLQkJCQkgICAgIHZvaWQgKmRhdGEpLAotCQkJICAgdm9pZCAqZGF0YSkKK3ZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfYWRkX21lbW9yeV9hcmNoKHU2NCBiYXNlLCB1NjQgc2l6ZSkKIHsKLQl1bnNpZ25lZCBsb25nIHAgPSAoKHVuc2lnbmVkIGxvbmcpaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RydWN0OwotCWludCByYyA9IDA7Ci0JaW50IGRlcHRoID0gLTE7Ci0KLQlkbyB7Ci0JCXUzMiB0YWcgPSAqKCh1MzIgKilwKTsKLQkJY2hhciAqcGF0aHA7Ci0KLQkJcCArPSA0OwotCQlpZiAodGFnID09IE9GX0RUX0VORF9OT0RFKSB7Ci0JCQlkZXB0aC0tOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHRhZyA9PSBPRl9EVF9OT1ApCi0JCQljb250aW51ZTsKLQkJaWYgKHRhZyA9PSBPRl9EVF9FTkQpCi0JCQlicmVhazsKLQkJaWYgKHRhZyA9PSBPRl9EVF9QUk9QKSB7Ci0JCQl1MzIgc3ogPSAqKCh1MzIgKilwKTsKLQkJCXAgKz0gODsKLQkJCWlmIChpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uIDwgMHgxMCkKLQkJCQlwID0gX0FMSUdOKHAsIHN6ID49IDggPyA4IDogNCk7Ci0JCQlwICs9IHN6OwotCQkJcCA9IF9BTElHTihwLCA0KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICh0YWcgIT0gT0ZfRFRfQkVHSU5fTk9ERSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW52YWxpZCB0YWcgJXggc2Nhbm5pbmcgZmxhdHRlbmVkIgotCQkJCSIgZGV2aWNlIHRyZWUgIVxuIiwgdGFnKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWRlcHRoKys7Ci0JCXBhdGhwID0gKGNoYXIgKilwOwotCQlwID0gX0FMSUdOKHAgKyBzdHJsZW4ocGF0aHApICsgMSwgNCk7Ci0JCWlmICgoKnBhdGhwKSA9PSAnLycpIHsKLQkJCWNoYXIgKmxwLCAqbnA7Ci0JCQlmb3IgKGxwID0gTlVMTCwgbnAgPSBwYXRocDsgKm5wOyBucCsrKQotCQkJCWlmICgoKm5wKSA9PSAnLycpCi0JCQkJCWxwID0gbnArMTsKLQkJCWlmIChscCAhPSBOVUxMKQotCQkJCXBhdGhwID0gbHA7Ci0JCX0KLQkJcmMgPSBpdChwLCBwYXRocCwgZGVwdGgsIGRhdGEpOwotCQlpZiAocmMgIT0gMCkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKDEpOwotCi0JcmV0dXJuIHJjOworCWxtYl9hZGQoYmFzZSwgc2l6ZSk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgX19pbml0IG9mX2dldF9mbGF0X2R0X3Jvb3Qodm9pZCkKK3U2NCBfX2luaXQgZWFybHlfaW5pdF9kdF9hbGxvY19tZW1vcnlfYXJjaCh1NjQgc2l6ZSwgdTY0IGFsaWduKQogewotCXVuc2lnbmVkIGxvbmcgcCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCi0JCWluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3Q7Ci0KLQl3aGlsZSAoKigodTMyICopcCkgPT0gT0ZfRFRfTk9QKQotCQlwICs9IDQ7Ci0JQlVHX09OKCooKHUzMiAqKXApICE9IE9GX0RUX0JFR0lOX05PREUpOwotCXAgKz0gNDsKLQlyZXR1cm4gX0FMSUdOKHAgKyBzdHJsZW4oKGNoYXIgKilwKSArIDEsIDQpOworCXJldHVybiBsbWJfYWxsb2Moc2l6ZSwgYWxpZ24pOwogfQogCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgd2l0aGluIHNjYW5fZmxhdHRlbmVkX2R0IGNhbGxiYWNrIHRvIGdldAotICogYWNjZXNzIHRvIHByb3BlcnRpZXMKLSAqLwotdm9pZCAqX19pbml0IG9mX2dldF9mbGF0X2R0X3Byb3AodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCXVuc2lnbmVkIGxvbmcgKnNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBwID0gbm9kZTsKLQotCWRvIHsKLQkJdTMyIHRhZyA9ICooKHUzMiAqKXApOwotCQl1MzIgc3osIG5vZmY7Ci0JCWNvbnN0IGNoYXIgKm5zdHI7Ci0KLQkJcCArPSA0OwotCQlpZiAodGFnID09IE9GX0RUX05PUCkKLQkJCWNvbnRpbnVlOwotCQlpZiAodGFnICE9IE9GX0RUX1BST1ApCi0JCQlyZXR1cm4gTlVMTDsKLQotCQlzeiA9ICooKHUzMiAqKXApOwotCQlub2ZmID0gKigodTMyICopKHAgKyA0KSk7Ci0JCXAgKz0gODsKLQkJaWYgKGluaXRpYWxfYm9vdF9wYXJhbXMtPnZlcnNpb24gPCAweDEwKQotCQkJcCA9IF9BTElHTihwLCBzeiA+PSA4ID8gOCA6IDQpOwotCi0JCW5zdHIgPSBmaW5kX2ZsYXRfZHRfc3RyaW5nKG5vZmYpOwotCQlpZiAobnN0ciA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4ndCBmaW5kIHByb3BlcnR5IGluZGV4IgotCQkJCSIgbmFtZSAhXG4iKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCWlmIChzdHJjbXAobmFtZSwgbnN0cikgPT0gMCkgewotCQkJaWYgKHNpemUpCi0JCQkJKnNpemUgPSBzejsKLQkJCXJldHVybiAodm9pZCAqKXA7Ci0JCX0KLQkJcCArPSBzejsKLQkJcCA9IF9BTElHTihwLCA0KTsKLQl9IHdoaWxlICgxKTsKLX0KLQotaW50IF9faW5pdCBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICpjb21wYXQpCi17Ci0JY29uc3QgY2hhciAqY3A7Ci0JdW5zaWduZWQgbG9uZyBjcGxlbiwgbDsKLQotCWNwID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiY29tcGF0aWJsZSIsICZjcGxlbik7Ci0JaWYgKGNwID09IE5VTEwpCi0JCXJldHVybiAwOwotCXdoaWxlIChjcGxlbiA+IDApIHsKLQkJaWYgKHN0cm5jYXNlY21wKGNwLCBjb21wYXQsIHN0cmxlbihjb21wYXQpKSA9PSAwKQotCQkJcmV0dXJuIDE7Ci0JCWwgPSBzdHJsZW4oY3ApICsgMTsKLQkJY3AgKz0gbDsKLQkJY3BsZW4gLT0gbDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgKl9faW5pdCB1bmZsYXR0ZW5fZHRfYWxsb2ModW5zaWduZWQgbG9uZyAqbWVtLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJCXVuc2lnbmVkIGxvbmcgYWxpZ24pCi17Ci0Jdm9pZCAqcmVzOwotCi0JKm1lbSA9IF9BTElHTigqbWVtLCBhbGlnbik7Ci0JcmVzID0gKHZvaWQgKikqbWVtOwotCSptZW0gKz0gc2l6ZTsKLQotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB1bmZsYXR0ZW5fZHRfbm9kZSh1bnNpZ25lZCBsb25nIG1lbSwKLQkJCQkJdW5zaWduZWQgbG9uZyAqcCwKLQkJCQkJc3RydWN0IGRldmljZV9ub2RlICpkYWQsCi0JCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqKiphbGxuZXh0cHAsCi0JCQkJCXVuc2lnbmVkIGxvbmcgZnBzaXplKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcCwgKipwcmV2X3BwID0gTlVMTDsKLQljaGFyICpwYXRocDsKLQl1MzIgdGFnOwotCXVuc2lnbmVkIGludCBsLCBhbGxvY2w7Ci0JaW50IGhhc19uYW1lID0gMDsKLQlpbnQgbmV3X2Zvcm1hdCA9IDA7Ci0KLQl0YWcgPSAqKCh1MzIgKikoKnApKTsKLQlpZiAodGFnICE9IE9GX0RUX0JFR0lOX05PREUpIHsKLQkJcHJpbnRrKCJXZWlyZCB0YWcgYXQgc3RhcnQgb2Ygbm9kZTogJXhcbiIsIHRhZyk7Ci0JCXJldHVybiBtZW07Ci0JfQotCSpwICs9IDQ7Ci0JcGF0aHAgPSAoY2hhciAqKSpwOwotCWwgPSBhbGxvY2wgPSBzdHJsZW4ocGF0aHApICsgMTsKLQkqcCA9IF9BTElHTigqcCArIGwsIDQpOwotCi0JLyogdmVyc2lvbiAweDEwIGhhcyBhIG1vcmUgY29tcGFjdCB1bml0IG5hbWUgaGVyZSBpbnN0ZWFkIG9mIHRoZSBmdWxsCi0JICogcGF0aC4gd2UgYWNjdW11bGF0ZSB0aGUgZnVsbCBwYXRoIHNpemUgdXNpbmcgImZwc2l6ZSIsIHdlJ2xsIHJlYnVpbGQKLQkgKiBpdCBsYXRlci4gV2UgZGV0ZWN0IHRoaXMgYmVjYXVzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBuYW1lIGlzCi0JICogbm90ICcvJy4KLQkgKi8KLQlpZiAoKCpwYXRocCkgIT0gJy8nKSB7Ci0JCW5ld19mb3JtYXQgPSAxOwotCQlpZiAoZnBzaXplID09IDApIHsKLQkJCS8qIHJvb3Qgbm9kZTogc3BlY2lhbCBjYXNlLiBmcHNpemUgYWNjb3VudHMgZm9yIHBhdGgKLQkJCSAqIHBsdXMgdGVybWluYXRpbmcgemVyby4gcm9vdCBub2RlIG9ubHkgaGFzICcvJywgc28KLQkJCSAqIGZwc2l6ZSBzaG91bGQgYmUgMiwgYnV0IHdlIHdhbnQgdG8gYXZvaWQgdGhlIGZpcnN0Ci0JCQkgKiBsZXZlbCBub2RlcyB0byBoYXZlIHR3byAnLycgc28gd2UgdXNlIGZwc2l6ZSAxIGhlcmUKLQkJCSAqLwotCQkJZnBzaXplID0gMTsKLQkJCWFsbG9jbCA9IDI7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBhY2NvdW50IGZvciAnLycgYW5kIHBhdGggc2l6ZSBtaW51cyB0ZXJtaW5hbCAwCi0JCQkgKiBhbHJlYWR5IGluICdsJwotCQkJICovCi0JCQlmcHNpemUgKz0gbDsKLQkJCWFsbG9jbCA9IGZwc2l6ZTsKLQkJfQotCX0KLQotCW5wID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgZGV2aWNlX25vZGUpICsgYWxsb2NsLAotCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBkZXZpY2Vfbm9kZSkpOwotCWlmIChhbGxuZXh0cHApIHsKLQkJbWVtc2V0KG5wLCAwLCBzaXplb2YoKm5wKSk7Ci0JCW5wLT5mdWxsX25hbWUgPSAoKGNoYXIgKilucCkgKyBzaXplb2Yoc3RydWN0IGRldmljZV9ub2RlKTsKLQkJaWYgKG5ld19mb3JtYXQpIHsKLQkJCWNoYXIgKnAyID0gbnAtPmZ1bGxfbmFtZTsKLQkJCS8qIHJlYnVpbGQgZnVsbCBwYXRoIGZvciBuZXcgZm9ybWF0ICovCi0JCQlpZiAoZGFkICYmIGRhZC0+cGFyZW50KSB7Ci0JCQkJc3RyY3B5KHAyLCBkYWQtPmZ1bGxfbmFtZSk7Ci0jaWZkZWYgREVCVUcKLQkJCQlpZiAoKHN0cmxlbihwMikgKyBsICsgMSkgIT0gYWxsb2NsKSB7Ci0JCQkJCXByX2RlYnVnKCIlczogcDogJWQsIGw6ICVkLCBhOiAlZFxuIiwKLQkJCQkJCXBhdGhwLCAoaW50KXN0cmxlbihwMiksCi0JCQkJCQlsLCBhbGxvY2wpOwotCQkJCX0KLSNlbmRpZgotCQkJCXAyICs9IHN0cmxlbihwMik7Ci0JCQl9Ci0JCQkqKHAyKyspID0gJy8nOwotCQkJbWVtY3B5KHAyLCBwYXRocCwgbCk7Ci0JCX0gZWxzZQotCQkJbWVtY3B5KG5wLT5mdWxsX25hbWUsIHBhdGhwLCBsKTsKLQkJcHJldl9wcCA9ICZucC0+cHJvcGVydGllczsKLQkJKiphbGxuZXh0cHAgPSBucDsKLQkJKmFsbG5leHRwcCA9ICZucC0+YWxsbmV4dDsKLQkJaWYgKGRhZCAhPSBOVUxMKSB7Ci0JCQlucC0+cGFyZW50ID0gZGFkOwotCQkJLyogd2UgdGVtcG9yYXJpbHkgdXNlIHRoZSBuZXh0IGZpZWxkIGFzIGBsYXN0X2NoaWxkJyovCi0JCQlpZiAoZGFkLT5uZXh0ID09IE5VTEwpCi0JCQkJZGFkLT5jaGlsZCA9IG5wOwotCQkJZWxzZQotCQkJCWRhZC0+bmV4dC0+c2libGluZyA9IG5wOwotCQkJZGFkLT5uZXh0ID0gbnA7Ci0JCX0KLQkJa3JlZl9pbml0KCZucC0+a3JlZik7Ci0JfQotCXdoaWxlICgxKSB7Ci0JCXUzMiBzeiwgbm9mZjsKLQkJY2hhciAqcG5hbWU7Ci0KLQkJdGFnID0gKigodTMyICopKCpwKSk7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfTk9QKSB7Ci0JCQkqcCArPSA0OwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHRhZyAhPSBPRl9EVF9QUk9QKQotCQkJYnJlYWs7Ci0JCSpwICs9IDQ7Ci0JCXN6ID0gKigodTMyICopKCpwKSk7Ci0JCW5vZmYgPSAqKCh1MzIgKikoKCpwKSArIDQpKTsKLQkJKnAgKz0gODsKLQkJaWYgKGluaXRpYWxfYm9vdF9wYXJhbXMtPnZlcnNpb24gPCAweDEwKQotCQkJKnAgPSBfQUxJR04oKnAsIHN6ID49IDggPyA4IDogNCk7Ci0KLQkJcG5hbWUgPSBmaW5kX2ZsYXRfZHRfc3RyaW5nKG5vZmYpOwotCQlpZiAocG5hbWUgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSJDYW4ndCBmaW5kIHByb3BlcnR5IG5hbWUgaW4gbGlzdCAhXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzdHJjbXAocG5hbWUsICJuYW1lIikgPT0gMCkKLQkJCWhhc19uYW1lID0gMTsKLQkJbCA9IHN0cmxlbihwbmFtZSkgKyAxOwotCQlwcCA9IHVuZmxhdHRlbl9kdF9hbGxvYygmbWVtLCBzaXplb2Yoc3RydWN0IHByb3BlcnR5KSwKLQkJCQkJX19hbGlnbm9mX18oc3RydWN0IHByb3BlcnR5KSk7Ci0JCWlmIChhbGxuZXh0cHApIHsKLQkJCWlmIChzdHJjbXAocG5hbWUsICJsaW51eCxwaGFuZGxlIikgPT0gMCkgewotCQkJCW5wLT5ub2RlID0gKigodTMyICopKnApOwotCQkJCWlmIChucC0+bGludXhfcGhhbmRsZSA9PSAwKQotCQkJCQlucC0+bGludXhfcGhhbmRsZSA9IG5wLT5ub2RlOwotCQkJfQotCQkJaWYgKHN0cmNtcChwbmFtZSwgImlibSxwaGFuZGxlIikgPT0gMCkKLQkJCQlucC0+bGludXhfcGhhbmRsZSA9ICooKHUzMiAqKSpwKTsKLQkJCXBwLT5uYW1lID0gcG5hbWU7Ci0JCQlwcC0+bGVuZ3RoID0gc3o7Ci0JCQlwcC0+dmFsdWUgPSAodm9pZCAqKSpwOwotCQkJKnByZXZfcHAgPSBwcDsKLQkJCXByZXZfcHAgPSAmcHAtPm5leHQ7Ci0JCX0KLQkJKnAgPSBfQUxJR04oKCpwKSArIHN6LCA0KTsKLQl9Ci0JLyogd2l0aCB2ZXJzaW9uIDB4MTAgd2UgbWF5IG5vdCBoYXZlIHRoZSBuYW1lIHByb3BlcnR5LCByZWNyZWF0ZQotCSAqIGl0IGhlcmUgZnJvbSB0aGUgdW5pdCBuYW1lIGlmIGFic2VudAotCSAqLwotCWlmICghaGFzX25hbWUpIHsKLQkJY2hhciAqcDEgPSBwYXRocCwgKnBzID0gcGF0aHAsICpwYSA9IE5VTEw7Ci0JCWludCBzejsKLQotCQl3aGlsZSAoKnAxKSB7Ci0JCQlpZiAoKCpwMSkgPT0gJ0AnKQotCQkJCXBhID0gcDE7Ci0JCQlpZiAoKCpwMSkgPT0gJy8nKQotCQkJCXBzID0gcDEgKyAxOwotCQkJcDErKzsKLQkJfQotCQlpZiAocGEgPCBwcykKLQkJCXBhID0gcDE7Ci0JCXN6ID0gKHBhIC0gcHMpICsgMTsKLQkJcHAgPSB1bmZsYXR0ZW5fZHRfYWxsb2MoJm1lbSwgc2l6ZW9mKHN0cnVjdCBwcm9wZXJ0eSkgKyBzeiwKLQkJCQkJX19hbGlnbm9mX18oc3RydWN0IHByb3BlcnR5KSk7Ci0JCWlmIChhbGxuZXh0cHApIHsKLQkJCXBwLT5uYW1lID0gIm5hbWUiOwotCQkJcHAtPmxlbmd0aCA9IHN6OwotCQkJcHAtPnZhbHVlID0gcHAgKyAxOwotCQkJKnByZXZfcHAgPSBwcDsKLQkJCXByZXZfcHAgPSAmcHAtPm5leHQ7Ci0JCQltZW1jcHkocHAtPnZhbHVlLCBwcywgc3ogLSAxKTsKLQkJCSgoY2hhciAqKXBwLT52YWx1ZSlbc3ogLSAxXSA9IDA7Ci0JCQlwcl9kZWJ1ZygiZml4ZWQgdXAgbmFtZSBmb3IgJXMgLT4gJXNcbiIsIHBhdGhwLAotCQkJCShjaGFyICopcHAtPnZhbHVlKTsKLQkJfQotCX0KLQlpZiAoYWxsbmV4dHBwKSB7Ci0JCSpwcmV2X3BwID0gTlVMTDsKLQkJbnAtPm5hbWUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJuYW1lIiwgTlVMTCk7Ci0JCW5wLT50eXBlID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKLQotCQlpZiAoIW5wLT5uYW1lKQotCQkJbnAtPm5hbWUgPSAiPE5VTEw+IjsKLQkJaWYgKCFucC0+dHlwZSkKLQkJCW5wLT50eXBlID0gIjxOVUxMPiI7Ci0JfQotCXdoaWxlICh0YWcgPT0gT0ZfRFRfQkVHSU5fTk9ERSkgewotCQltZW0gPSB1bmZsYXR0ZW5fZHRfbm9kZShtZW0sIHAsIG5wLCBhbGxuZXh0cHAsIGZwc2l6ZSk7Ci0JCXRhZyA9ICooKHUzMiAqKSgqcCkpOwotCX0KLQlpZiAodGFnICE9IE9GX0RUX0VORF9OT0RFKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIldlaXJkIHRhZyBhdCBlbmQgb2Ygbm9kZTogJXhcbiIsIHRhZyk7Ci0JCXJldHVybiBtZW07Ci0JfQotCSpwICs9IDQ7Ci0JcmV0dXJuIG1lbTsKLX0KLQotLyoqCi0gKiB1bmZsYXR0ZW5zIHRoZSBkZXZpY2UtdHJlZSBwYXNzZWQgYnkgdGhlIGZpcm13YXJlLCBjcmVhdGluZyB0aGUKLSAqIHRyZWUgb2Ygc3RydWN0IGRldmljZV9ub2RlLiBJdCBhbHNvIGZpbGxzIHRoZSAibmFtZSIgYW5kICJ0eXBlIgotICogcG9pbnRlcnMgb2YgdGhlIG5vZGVzIHNvIHRoZSBub3JtYWwgZGV2aWNlLXRyZWUgd2Fsa2luZyBmdW5jdGlvbnMKLSAqIGNhbiBiZSB1c2VkICh0aGlzIHVzZWQgdG8gYmUgZG9uZSBieSBmaW5pc2hfZGV2aWNlX3RyZWUpCi0gKi8KLXZvaWQgX19pbml0IHVuZmxhdHRlbl9kZXZpY2VfdHJlZSh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIG1lbSwgc2l6ZTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKiphbGxuZXh0cCA9ICZhbGxub2RlczsKLQotCXByX2RlYnVnKCIgLT4gdW5mbGF0dGVuX2RldmljZV90cmVlKClcbiIpOwotCi0JLyogRmlyc3QgcGFzcywgc2NhbiBmb3Igc2l6ZSAqLwotCXN0YXJ0ID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdDsKLQlzaXplID0gdW5mbGF0dGVuX2R0X25vZGUoMCwgJnN0YXJ0LCBOVUxMLCBOVUxMLCAwKTsKLQlzaXplID0gKHNpemUgfCAzKSArIDE7Ci0KLQlwcl9kZWJ1ZygiICBzaXplIGlzICVseCwgYWxsb2NhdGluZy4uLlxuIiwgc2l6ZSk7Ci0KLQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBleHBhbmRlZCBkZXZpY2UgdHJlZSAqLwotCW1lbSA9IGxtYl9hbGxvYyhzaXplICsgNCwgX19hbGlnbm9mX18oc3RydWN0IGRldmljZV9ub2RlKSk7Ci0JbWVtID0gKHVuc2lnbmVkIGxvbmcpIF9fdmEobWVtKTsKLQotCSgodTMyICopbWVtKVtzaXplIC8gNF0gPSAweGRlYWRiZWVmOwotCi0JcHJfZGVidWcoIiAgdW5mbGF0dGVuaW5nICVseC4uLlxuIiwgbWVtKTsKLQotCS8qIFNlY29uZCBwYXNzLCBkbyBhY3R1YWwgdW5mbGF0dGVuaW5nICovCi0Jc3RhcnQgPSAoKHVuc2lnbmVkIGxvbmcpaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RydWN0OwotCXVuZmxhdHRlbl9kdF9ub2RlKG1lbSwgJnN0YXJ0LCBOVUxMLCAmYWxsbmV4dHAsIDApOwotCWlmICgqKCh1MzIgKilzdGFydCkgIT0gT0ZfRFRfRU5EKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXZWlyZCB0YWcgYXQgZW5kIG9mIHRyZWU6ICUwOHhcbiIsCi0JCQkqKCh1MzIgKilzdGFydCkpOwotCWlmICgoKHUzMiAqKW1lbSlbc2l6ZSAvIDRdICE9IDB4ZGVhZGJlZWYpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkVuZCBvZiB0cmVlIG1hcmtlciBvdmVyd3JpdHRlbjogJTA4eFxuIiwKLQkJCSgodTMyICopbWVtKVtzaXplIC8gNF0pOwotCSphbGxuZXh0cCA9IE5VTEw7Ci0KLQkvKiBHZXQgcG9pbnRlciB0byBPRiAiL2Nob3NlbiIgbm9kZSBmb3IgdXNlIGV2ZXJ5d2hlcmUgKi8KLQlvZl9jaG9zZW4gPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2Nob3NlbiIpOwotCWlmIChvZl9jaG9zZW4gPT0gTlVMTCkKLQkJb2ZfY2hvc2VuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jaG9zZW5AMCIpOwotCi0JcHJfZGVidWcoIiA8LSB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUoKVxuIik7Ci19Ci0KLSNkZWZpbmUgZWFybHlfaW5pdF9kdF9zY2FuX2RyY29uZl9tZW1vcnkobm9kZSkgMAotCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fY3B1cyh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJCSAgY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwKLQkJCQkJICB2b2lkICpkYXRhKQotewotCXN0YXRpYyBpbnQgbG9naWNhbF9jcHVpZDsKLQljaGFyICp0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKLQljb25zdCB1MzIgKmludHNlcnY7Ci0JaW50IGksIG50aHJlYWRzOwotCWludCBmb3VuZCA9IDA7Ci0KLQkvKiBXZSBhcmUgc2Nhbm5pbmcgImNwdSIgbm9kZXMgb25seSAqLwotCWlmICh0eXBlID09IE5VTEwgfHwgc3RyY21wKHR5cGUsICJjcHUiKSAhPSAwKQotCQlyZXR1cm4gMDsKLQotCS8qIEdldCBwaHlzaWNhbCBjcHVpZCAqLwotCWludHNlcnYgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJyZWciLCBOVUxMKTsKLQludGhyZWFkcyA9IDE7Ci0KLQkvKgotCSAqIE5vdyBzZWUgaWYgYW55IG9mIHRoZXNlIHRocmVhZHMgbWF0Y2ggb3VyIGJvb3QgY3B1LgotCSAqIE5PVEU6IFRoaXMgbXVzdCBtYXRjaCB0aGUgcGFyc2luZyBkb25lIGluIHNtcF9zZXR1cF9jcHVfbWFwcy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnRocmVhZHM7IGkrKykgewotCQkvKgotCQkgKiB2ZXJzaW9uIDIgb2YgdGhlIGtleGVjIHBhcmFtIGZvcm1hdCBhZGRzIHRoZSBwaHlzIGNwdWlkIG9mCi0JCSAqIGJvb3RlZCBwcm9jLgotCQkgKi8KLQkJaWYgKGluaXRpYWxfYm9vdF9wYXJhbXMgJiYgaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbiA+PSAyKSB7Ci0JCQlpZiAoaW50c2VydltpXSA9PQotCQkJCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5ib290X2NwdWlkX3BoeXMpIHsKLQkJCQlmb3VuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogQ2hlY2sgaWYgaXQncyB0aGUgYm9vdC1jcHUsIHNldCBpdCdzIGh3IGluZGV4IG5vdywKLQkJCSAqIHVuZm9ydHVuYXRlbHkgdGhpcyBmb3JtYXQgZGlkIG5vdCBzdXBwb3J0IGJvb3RpbmcKLQkJCSAqIG9mZiBzZWNvbmRhcnkgdGhyZWFkcy4KLQkJCSAqLwotCQkJaWYgKG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwKLQkJCQkJImxpbnV4LGJvb3QtY3B1IiwgTlVMTCkgIT0gTlVMTCkgewotCQkJCWZvdW5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0jaWZkZWYgQ09ORklHX1NNUAotCQkvKiBsb2dpY2FsIGNwdSBpZCBpcyBhbHdheXMgMCBvbiBVUCBrZXJuZWxzICovCi0JCWxvZ2ljYWxfY3B1aWQrKzsKLSNlbmRpZgotCX0KLQotCWlmIChmb3VuZCkgewotCQlwcl9kZWJ1ZygiYm9vdCBjcHU6IGxvZ2ljYWwgJWQgcGh5c2ljYWwgJWRcbiIsIGxvZ2ljYWxfY3B1aWQsCi0JCQlpbnRzZXJ2W2ldKTsKLQkJYm9vdF9jcHVpZCA9IGxvZ2ljYWxfY3B1aWQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQodW5zaWduZWQgbG9uZyBub2RlKQotewotCXVuc2lnbmVkIGxvbmcgbDsKLQl1MzIgKnByb3A7Ci0KLQlwcl9kZWJ1ZygiTG9va2luZyBmb3IgaW5pdHJkIHByb3BlcnRpZXMuLi4gIik7Ci0KLQlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsaW5pdHJkLXN0YXJ0IiwgJmwpOwotCWlmIChwcm9wKSB7Ci0JCWluaXRyZF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKQotCQkJCQlfX3ZhKCh1MzIpb2ZfcmVhZF91bG9uZyhwcm9wLCBsLzQpKTsKLQotCQlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsaW5pdHJkLWVuZCIsICZsKTsKLQkJaWYgKHByb3ApIHsKLQkJCWluaXRyZF9lbmQgPSAodW5zaWduZWQgbG9uZykKLQkJCQkJX192YSgodTMyKW9mX3JlYWRfdWxvbmcocHJvcCwgMS80KSk7Ci0JCQlpbml0cmRfYmVsb3dfc3RhcnRfb2sgPSAxOwotCQl9IGVsc2UgewotCQkJaW5pdHJkX3N0YXJ0ID0gMDsKLQkJfQotCX0KLQotCXByX2RlYnVnKCJpbml0cmRfc3RhcnQ9MHglbHggIGluaXRyZF9lbmQ9MHglbHhcbiIsCi0JCQkJCWluaXRyZF9zdGFydCwgaW5pdHJkX2VuZCk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZCh1bnNpZ25lZCBsb25nIG5vZGUpCi17Ci19Ci0jZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU5JVFJEICovCi0KLXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW4odW5zaWduZWQgbG9uZyBub2RlLAotCQkJCWNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBsOwotCWNoYXIgKnA7Ci0KLQlwcl9kZWJ1Zygic2VhcmNoIFwiY2hvc2VuXCIsIGRlcHRoOiAlZCwgdW5hbWU6ICVzXG4iLCBkZXB0aCwgdW5hbWUpOwotCi0JaWYgKGRlcHRoICE9IDEgfHwKLQkJKHN0cmNtcCh1bmFtZSwgImNob3NlbiIpICE9IDAgJiYKLQkJCQlzdHJjbXAodW5hbWUsICJjaG9zZW5AMCIpICE9IDApKQotCQlyZXR1cm4gMDsKLQotI2lmZGVmIENPTkZJR19LRVhFQwotCWxwcm9wID0gKHU2NCAqKW9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwKLQkJCQkibGludXgsY3Jhc2hrZXJuZWwtYmFzZSIsIE5VTEwpOwotCWlmIChscHJvcCkKLQkJY3Jhc2hrX3Jlcy5zdGFydCA9ICpscHJvcDsKLQotCWxwcm9wID0gKHU2NCAqKW9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwKLQkJCQkibGludXgsY3Jhc2hrZXJuZWwtc2l6ZSIsIE5VTEwpOwotCWlmIChscHJvcCkKLQkJY3Jhc2hrX3Jlcy5lbmQgPSBjcmFzaGtfcmVzLnN0YXJ0ICsgKmxwcm9wIC0gMTsKLSNlbmRpZgotCi0JZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkKG5vZGUpOwotCi0JLyogUmV0cmVpdmUgY29tbWFuZCBsaW5lICovCi0JcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImJvb3RhcmdzIiwgJmwpOwotCWlmIChwICE9IE5VTEwgJiYgbCA+IDApCi0JCXN0cmxjcHkoY21kX2xpbmUsIHAsIG1pbigoaW50KWwsIENPTU1BTkRfTElORV9TSVpFKSk7Ci0KLSNpZmRlZiBDT05GSUdfQ01ETElORQotI2lmbmRlZiBDT05GSUdfQ01ETElORV9GT1JDRQotCWlmIChwID09IE5VTEwgfHwgbCA9PSAwIHx8IChsID09IDEgJiYgKCpwKSA9PSAwKSkKLSNlbmRpZgotCQlzdHJsY3B5KGNtZF9saW5lLCBDT05GSUdfQ01ETElORSwgQ09NTUFORF9MSU5FX1NJWkUpOwotI2VuZGlmIC8qIENPTkZJR19DTURMSU5FICovCi0KLQlwcl9kZWJ1ZygiQ29tbWFuZCBsaW5lIGlzOiAlc1xuIiwgY21kX2xpbmUpOwotCi0JLyogYnJlYWsgbm93ICovCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9yb290KHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQljb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLCB2b2lkICpkYXRhKQotewotCXUzMiAqcHJvcDsKLQotCWlmIChkZXB0aCAhPSAwKQotCQlyZXR1cm4gMDsKLQotCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICIjc2l6ZS1jZWxscyIsIE5VTEwpOwotCWR0X3Jvb3Rfc2l6ZV9jZWxscyA9IChwcm9wID09IE5VTEwpID8gMSA6ICpwcm9wOwotCXByX2RlYnVnKCJkdF9yb290X3NpemVfY2VsbHMgPSAleFxuIiwgZHRfcm9vdF9zaXplX2NlbGxzKTsKLQotCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICIjYWRkcmVzcy1jZWxscyIsIE5VTEwpOwotCWR0X3Jvb3RfYWRkcl9jZWxscyA9IChwcm9wID09IE5VTEwpID8gMiA6ICpwcm9wOwotCXByX2RlYnVnKCJkdF9yb290X2FkZHJfY2VsbHMgPSAleFxuIiwgZHRfcm9vdF9hZGRyX2NlbGxzKTsKLQotCS8qIGJyZWFrIG5vdyAqLwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdTY0IF9faW5pdCBkdF9tZW1fbmV4dF9jZWxsKGludCBzLCBjZWxsX3QgKipjZWxscCkKLXsKLQljZWxsX3QgKnAgPSAqY2VsbHA7Ci0KLQkqY2VsbHAgPSBwICsgczsKLQlyZXR1cm4gb2ZfcmVhZF9udW1iZXIocCwgcyk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9tZW1vcnkodW5zaWduZWQgbG9uZyBub2RlLAotCQkJCWNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCi17Ci0JY2hhciAqdHlwZSA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7Ci0JY2VsbF90ICpyZWcsICplbmRwOwotCXVuc2lnbmVkIGxvbmcgbDsKLQotCS8qIExvb2sgZm9yIHRoZSBpYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5IG5vZGUgKi8KLS8qCWlmIChkZXB0aCA9PSAxICYmCi0JCXN0cmNtcCh1bmFtZSwgImlibSxkeW5hbWljLXJlY29uZmlndXJhdGlvbi1tZW1vcnkiKSA9PSAwKQotCQlyZXR1cm4gZWFybHlfaW5pdF9kdF9zY2FuX2RyY29uZl9tZW1vcnkobm9kZSk7Ci0qLwotCS8qIFdlIGFyZSBzY2FubmluZyAibWVtb3J5IiBub2RlcyBvbmx5ICovCi0JaWYgKHR5cGUgPT0gTlVMTCkgewotCQkvKgotCQkgKiBUaGUgbG9uZ3RyYWlsIGRvZXNuJ3QgaGF2ZSBhIGRldmljZV90eXBlIG9uIHRoZQotCQkgKiAvbWVtb3J5IG5vZGUsIHNvIGxvb2sgZm9yIHRoZSBub2RlIGNhbGxlZCAvbWVtb3J5QDAuCi0JCSAqLwotCQlpZiAoZGVwdGggIT0gMSB8fCBzdHJjbXAodW5hbWUsICJtZW1vcnlAMCIpICE9IDApCi0JCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKHN0cmNtcCh0eXBlLCAibWVtb3J5IikgIT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlyZWcgPSAoY2VsbF90ICopb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsdXNhYmxlLW1lbW9yeSIsICZsKTsKLQlpZiAocmVnID09IE5VTEwpCi0JCXJlZyA9IChjZWxsX3QgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJyZWciLCAmbCk7Ci0JaWYgKHJlZyA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQotCWVuZHAgPSByZWcgKyAobCAvIHNpemVvZihjZWxsX3QpKTsKLQotCXByX2RlYnVnKCJtZW1vcnkgc2NhbiBub2RlICVzLCByZWcgc2l6ZSAlbGQsIGRhdGE6ICV4ICV4ICV4ICV4LFxuIiwKLQkJdW5hbWUsIGwsIHJlZ1swXSwgcmVnWzFdLCByZWdbMl0sIHJlZ1szXSk7Ci0KLQl3aGlsZSAoKGVuZHAgLSByZWcpID49IChkdF9yb290X2FkZHJfY2VsbHMgKyBkdF9yb290X3NpemVfY2VsbHMpKSB7Ci0JCXU2NCBiYXNlLCBzaXplOwotCi0JCWJhc2UgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3RfYWRkcl9jZWxscywgJnJlZyk7Ci0JCXNpemUgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3Rfc2l6ZV9jZWxscywgJnJlZyk7Ci0KLQkJaWYgKHNpemUgPT0gMCkKLQkJCWNvbnRpbnVlOwotCQlwcl9kZWJ1ZygiIC0gJWxseCAsICAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWJhc2UsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXNpemUpOwotCi0JCWxtYl9hZGQoYmFzZSwgc2l6ZSk7Ci0JfQotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX1BIWVBfRFVNUAotLyoqCi0gKiBwaHlwX2R1bXBfY2FsY3VsYXRlX3Jlc2VydmVfc2l6ZSgpIC0gcmVzZXJ2ZSB2YXJpYWJsZSBib290IGFyZWEgNSUgb3IgYXJnCi0gKgotICogRnVuY3Rpb24gdG8gZmluZCB0aGUgbGFyZ2VzdCBzaXplIHdlIG5lZWQgdG8gcmVzZXJ2ZQotICogZHVyaW5nIGVhcmx5IGJvb3QgcHJvY2Vzcy4KLSAqCi0gKiBJdCBlaXRoZXIgbG9va3MgZm9yIGJvb3QgcGFyYW0gYW5kIHJldHVybnMgdGhhdCBPUgotICogcmV0dXJucyBsYXJnZXIgb2YgMjU2IG9yIDUlIHJvdW5kZWQgZG93biB0byBtdWx0aXBsZXMgb2YgMjU2TUIuCi0gKgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGh5cF9kdW1wX2NhbGN1bGF0ZV9yZXNlcnZlX3NpemUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCWlmIChwaHlwX2R1bXBfaW5mby0+cmVzZXJ2ZV9ib290dmFyKQotCQlyZXR1cm4gcGh5cF9kdW1wX2luZm8tPnJlc2VydmVfYm9vdHZhcjsKLQotCS8qIGRpdmlkZSBieSAyMCB0byBnZXQgNSUgb2YgdmFsdWUgKi8KLQl0bXAgPSBsbWJfZW5kX29mX0RSQU0oKTsKLQlkb19kaXYodG1wLCAyMCk7Ci0KLQkvKiByb3VuZCBpdCBkb3duIGluIG11bHRpcGxlcyBvZiAyNTYgKi8KLQl0bXAgPSB0bXAgJiB+MHgwRkZGRkZGRlVMOwotCi0JcmV0dXJuICh0bXAgPiBQSFlQX0RVTVBfUk1SX0VORCA/IHRtcCA6IFBIWVBfRFVNUF9STVJfRU5EKTsKLX0KLQotLyoqCi0gKiBwaHlwX2R1bXBfcmVzZXJ2ZV9tZW0oKSAtIHJlc2VydmUgYWxsIG5vdC15ZXQtZHVtcGVkIG1tZW1vcnkKLSAqCi0gKiBUaGlzIHJvdXRpbmUgbWF5IHJlc2VydmUgbWVtb3J5IHJlZ2lvbnMgaW4gdGhlIGtlcm5lbCBvbmx5Ci0gKiBpZiB0aGUgc3lzdGVtIGlzIHN1cHBvcnRlZCBhbmQgYSBkdW1wIHdhcyB0YWtlbiBpbiBsYXN0Ci0gKiBib290IGluc3RhbmNlIG9yIGlmIHRoZSBoYXJkd2FyZSBpcyBzdXBwb3J0ZWQgYW5kIHRoZQotICogc2NyYXRjaCBhcmVhIG5lZWRzIHRvIGJlIHNldHVwLiBJbiBvdGhlciBpbnN0YW5jZXMgaXQgcmV0dXJucwotICogd2l0aG91dCByZXNlcnZpbmcgYW55dGhpbmcuIFRoZSBtZW1vcnkgaW4gY2FzZSBvZiBkdW1wIGJlaW5nCi0gKiBhY3RpdmUgaXMgZnJlZWQgd2hlbiB0aGUgZHVtcCBpcyBjb2xsZWN0ZWQgKGJ5IHVzZXJsYW5kIHRvb2xzKS4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IHBoeXBfZHVtcF9yZXNlcnZlX21lbSh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZTsKLQl1bnNpZ25lZCBsb25nIHZhcmlhYmxlX3Jlc2VydmVfc2l6ZTsKLQotCWlmICghcGh5cF9kdW1wX2luZm8tPnBoeXBfZHVtcF9jb25maWd1cmVkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUGh5cC1kdW1wIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBoYXJkd2FyZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIXBoeXBfZHVtcF9pbmZvLT5waHlwX2R1bXBfYXRfYm9vdCkgewotCQlwcmludGsoS0VSTl9JTkZPICJQaHlwLWR1bXAgZGlzYWJsZWQgYXQgYm9vdCB0aW1lXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXZhcmlhYmxlX3Jlc2VydmVfc2l6ZSA9IHBoeXBfZHVtcF9jYWxjdWxhdGVfcmVzZXJ2ZV9zaXplKCk7Ci0KLQlpZiAocGh5cF9kdW1wX2luZm8tPnBoeXBfZHVtcF9pc19hY3RpdmUpIHsKLQkJLyogUmVzZXJ2ZSAqZXZlcnl0aGluZyogYWJvdmUgUk1SLkFyZWEgZnJlZWQgYnkgdXNlcmxhbmQgdG9vbHMqLwotCQliYXNlID0gdmFyaWFibGVfcmVzZXJ2ZV9zaXplOwotCQlzaXplID0gbG1iX2VuZF9vZl9EUkFNKCkgLSBiYXNlOwotCi0JCS8qIFhYWCBjcmFzaGVkX3JhbV9lbmQgaXMgd3JvbmcsIHNpbmNlIGl0IG1heSBiZSBiZXlvbmQKLQkJICogdGhlIG1lbW9yeV9saW1pdCwgaXQgd2lsbCBuZWVkIHRvIGJlIGFkanVzdGVkLiAqLwotCQlsbWJfcmVzZXJ2ZShiYXNlLCBzaXplKTsKLQotCQlwaHlwX2R1bXBfaW5mby0+aW5pdF9yZXNlcnZlX3N0YXJ0ID0gYmFzZTsKLQkJcGh5cF9kdW1wX2luZm8tPmluaXRfcmVzZXJ2ZV9zaXplID0gc2l6ZTsKLQl9IGVsc2UgewotCQlzaXplID0gcGh5cF9kdW1wX2luZm8tPmNwdV9zdGF0ZV9zaXplICsKLQkJCXBoeXBfZHVtcF9pbmZvLT5ocHRlX3JlZ2lvbl9zaXplICsKLQkJCXZhcmlhYmxlX3Jlc2VydmVfc2l6ZTsKLQkJYmFzZSA9IGxtYl9lbmRfb2ZfRFJBTSgpIC0gc2l6ZTsKLQkJbG1iX3Jlc2VydmUoYmFzZSwgc2l6ZSk7Ci0JCXBoeXBfZHVtcF9pbmZvLT5pbml0X3Jlc2VydmVfc3RhcnQgPSBiYXNlOwotCQlwaHlwX2R1bXBfaW5mby0+aW5pdF9yZXNlcnZlX3NpemUgPSBzaXplOwotCX0KLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHBoeXBfZHVtcF9yZXNlcnZlX21lbSh2b2lkKSB7fQotI2VuZGlmIC8qIENPTkZJR19QSFlQX0RVTVAgICYmIENPTkZJR19QUENfUlRBUyAqLwotCiAjaWZkZWYgQ09ORklHX0VBUkxZX1BSSU5USwogLyogTVMgdGhpcyBpcyBNaWNyb2JsYXplIHNwZWNpZmlnIGZ1bmN0aW9uICovCiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fc2VyaWFsKHVuc2lnbmVkIGxvbmcgbm9kZSwKQEAgLTc3NSwxMSArOTgsNiBAQAogCS8qIFNldHVwIGZsYXQgZGV2aWNlLXRyZWUgcG9pbnRlciAqLwogCWluaXRpYWxfYm9vdF9wYXJhbXMgPSBwYXJhbXM7CiAKLSNpZmRlZiBDT05GSUdfUEhZUF9EVU1QCi0JLyogc2NhbiB0cmVlIHRvIHNlZSBpZiBkdW1wIG9jY3VyZWQgZHVyaW5nIGxhc3QgYm9vdCAqLwotCW9mX3NjYW5fZmxhdF9kdChlYXJseV9pbml0X2R0X3NjYW5fcGh5cF9kdW1wLCBOVUxMKTsKLSNlbmRpZgotCiAJLyogUmV0cmlldmUgdmFyaW91cyBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgL2Nob3NlbiBub2RlIG9mIHRoZQogCSAqIGRldmljZS10cmVlLCBpbmNsdWRpbmcgdGhlIHBsYXRmb3JtIHR5cGUsIGluaXRyZCBsb2NhdGlvbiBhbmQKIAkgKiBzaXplLCBUQ0UgcmVzZXJ2ZSwgYW5kIG1vcmUgLi4uCkBAIC03OTksMzMgKzExNywxOCBAQAogCiAJcHJfZGVidWcoIlBoeXMuIG1lbTogJWx4XG4iLCAodW5zaWduZWQgbG9uZykgbG1iX3BoeXNfbWVtX3NpemUoKSk7CiAKLQlwcl9kZWJ1ZygiU2Nhbm5pbmcgQ1BVcyAuLi5cbiIpOwotCi0JLyogUmV0cmVpdmUgQ1BVIHJlbGF0ZWQgaW5mb3JtYXRpb25zIGZyb20gdGhlIGZsYXQgdHJlZQotCSAqIChhbHRpdmVjIHN1cHBvcnQsIGJvb3QgQ1BVIElELCAuLi4pCi0JICovCi0Jb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9jcHVzLCBOVUxMKTsKLQogCXByX2RlYnVnKCIgPC0gZWFybHlfaW5pdF9kZXZ0cmVlKClcbiIpOwogfQogCi0vKioKLSAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSByb290IG5vZGUgaGFzIGEgZ2l2ZW4gdmFsdWUgaW4gaXRzCi0gKiBjb21wYXRpYmxlIHByb3BlcnR5LgotICovCi1pbnQgbWFjaGluZV9pc19jb21wYXRpYmxlKGNvbnN0IGNoYXIgKmNvbXBhdCkKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKK3ZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfc2V0dXBfaW5pdHJkX2FyY2godW5zaWduZWQgbG9uZyBzdGFydCwKKwkJdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpyb290OwotCWludCByYyA9IDA7Ci0KLQlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKLQlpZiAocm9vdCkgewotCQlyYyA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHJvb3QsIGNvbXBhdCk7Ci0JCW9mX25vZGVfcHV0KHJvb3QpOwotCX0KLQlyZXR1cm4gcmM7CisJaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShzdGFydCk7CisJaW5pdHJkX2VuZCA9ICh1bnNpZ25lZCBsb25nKV9fdmEoZW5kKTsKKwlpbml0cmRfYmVsb3dfc3RhcnRfb2sgPSAxOwogfQotRVhQT1JUX1NZTUJPTChtYWNoaW5lX2lzX2NvbXBhdGlibGUpOworI2VuZGlmCiAKIC8qKioqKioqCiAgKgpAQCAtODM4LDI3MyArMTQxLDYgQEAKICAqCiAgKioqKioqKi8KIAotLyoqCi0gKglvZl9maW5kX25vZGVfYnlfcGhhbmRsZSAtIEZpbmQgYSBub2RlIGdpdmVuIGEgcGhhbmRsZQotICoJQGhhbmRsZToJcGhhbmRsZSBvZiB0aGUgbm9kZSB0byBmaW5kCi0gKgotICoJUmV0dXJucyBhIG5vZGUgcG9pbnRlciB3aXRoIHJlZmNvdW50IGluY3JlbWVudGVkLCB1c2UKLSAqCW9mX25vZGVfcHV0KCkgb24gaXQgd2hlbiBkb25lLgotICovCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKHBoYW5kbGUgaGFuZGxlKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0KLQlyZWFkX2xvY2soJmRldnRyZWVfbG9jayk7Ci0JZm9yIChucCA9IGFsbG5vZGVzOyBucCAhPSBOVUxMOyBucCA9IG5wLT5hbGxuZXh0KQotCQlpZiAobnAtPmxpbnV4X3BoYW5kbGUgPT0gaGFuZGxlKQotCQkJYnJlYWs7Ci0Jb2Zfbm9kZV9nZXQobnApOwotCXJlYWRfdW5sb2NrKCZkZXZ0cmVlX2xvY2spOwotCXJldHVybiBucDsKLX0KLUVYUE9SVF9TWU1CT0wob2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUpOwotCi0vKioKLSAqCW9mX25vZGVfZ2V0IC0gSW5jcmVtZW50IHJlZmNvdW50IG9mIGEgbm9kZQotICoJQG5vZGU6CU5vZGUgdG8gaW5jIHJlZmNvdW50LCBOVUxMIGlzIHN1cHBvcnRlZCB0bwotICoJCXNpbXBsaWZ5IHdyaXRpbmcgb2YgY2FsbGVycwotICoKLSAqCVJldHVybnMgbm9kZS4KLSAqLwotc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlX2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCi17Ci0JaWYgKG5vZGUpCi0JCWtyZWZfZ2V0KCZub2RlLT5rcmVmKTsKLQlyZXR1cm4gbm9kZTsKLX0KLUVYUE9SVF9TWU1CT0wob2Zfbm9kZV9nZXQpOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqa3JlZl90b19kZXZpY2Vfbm9kZShzdHJ1Y3Qga3JlZiAqa3JlZikKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBkZXZpY2Vfbm9kZSwga3JlZik7Ci19Ci0KLS8qKgotICoJb2Zfbm9kZV9yZWxlYXNlIC0gcmVsZWFzZSBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBub2RlCi0gKglAa3JlZjogIGtyZWYgZWxlbWVudCBvZiB0aGUgbm9kZSB0byBiZSByZWxlYXNlZAotICoKLSAqCUluIG9mX25vZGVfcHV0KCkgdGhpcyBmdW5jdGlvbiBpcyBwYXNzZWQgdG8ga3JlZl9wdXQoKQotICoJYXMgdGhlIGRlc3RydWN0b3IuCi0gKi8KLXN0YXRpYyB2b2lkIG9mX25vZGVfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBrcmVmX3RvX2RldmljZV9ub2RlKGtyZWYpOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcCA9IG5vZGUtPnByb3BlcnRpZXM7Ci0KLQkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgcmVsZWFzaW5nIG5vZGVzIHRoYXQgaGF2ZW4ndCBiZWVuIGRldGFjaGVkLiAqLwotCWlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX0RFVEFDSEVEKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJXQVJOSU5HOiBCYWQgb2Zfbm9kZV9wdXQoKSBvbiAlc1xuIiwKLQkJCW5vZGUtPmZ1bGxfbmFtZSk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJa3JlZl9pbml0KCZub2RlLT5rcmVmKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX0RZTkFNSUMpKQotCQlyZXR1cm47Ci0KLQl3aGlsZSAocHJvcCkgewotCQlzdHJ1Y3QgcHJvcGVydHkgKm5leHQgPSBwcm9wLT5uZXh0OwotCQlrZnJlZShwcm9wLT5uYW1lKTsKLQkJa2ZyZWUocHJvcC0+dmFsdWUpOwotCQlrZnJlZShwcm9wKTsKLQkJcHJvcCA9IG5leHQ7Ci0KLQkJaWYgKCFwcm9wKSB7Ci0JCQlwcm9wID0gbm9kZS0+ZGVhZHByb3BzOwotCQkJbm9kZS0+ZGVhZHByb3BzID0gTlVMTDsKLQkJfQotCX0KLQlrZnJlZShub2RlLT5mdWxsX25hbWUpOwotCWtmcmVlKG5vZGUtPmRhdGEpOwotCWtmcmVlKG5vZGUpOwotfQotCi0vKioKLSAqCW9mX25vZGVfcHV0IC0gRGVjcmVtZW50IHJlZmNvdW50IG9mIGEgbm9kZQotICoJQG5vZGU6CU5vZGUgdG8gZGVjIHJlZmNvdW50LCBOVUxMIGlzIHN1cHBvcnRlZCB0bwotICoJCXNpbXBsaWZ5IHdyaXRpbmcgb2YgY2FsbGVycwotICoKLSAqLwotdm9pZCBvZl9ub2RlX3B1dChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCi17Ci0JaWYgKG5vZGUpCi0JCWtyZWZfcHV0KCZub2RlLT5rcmVmLCBvZl9ub2RlX3JlbGVhc2UpOwotfQotRVhQT1JUX1NZTUJPTChvZl9ub2RlX3B1dCk7Ci0KLS8qCi0gKiBQbHVnIGEgZGV2aWNlIG5vZGUgaW50byB0aGUgdHJlZSBhbmQgZ2xvYmFsIGxpc3QuCi0gKi8KLXZvaWQgb2ZfYXR0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQlucC0+c2libGluZyA9IG5wLT5wYXJlbnQtPmNoaWxkOwotCW5wLT5hbGxuZXh0ID0gYWxsbm9kZXM7Ci0JbnAtPnBhcmVudC0+Y2hpbGQgPSBucDsKLQlhbGxub2RlcyA9IG5wOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqICJVbnBsdWciIGEgbm9kZSBmcm9tIHRoZSBkZXZpY2UgdHJlZS4gIFRoZSBjYWxsZXIgbXVzdCBob2xkCi0gKiBhIHJlZmVyZW5jZSB0byB0aGUgbm9kZS4gIFRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlCi0gKiBpcyBub3QgZnJlZWQgdW50aWwgaXRzIHJlZmNvdW50IGdvZXMgdG8gemVyby4KLSAqLwotdm9pZCBvZl9kZXRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCi0JcGFyZW50ID0gbnAtPnBhcmVudDsKLQlpZiAoIXBhcmVudCkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JaWYgKGFsbG5vZGVzID09IG5wKQotCQlhbGxub2RlcyA9IG5wLT5hbGxuZXh0OwotCWVsc2UgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXY7Ci0JCWZvciAocHJldiA9IGFsbG5vZGVzOwotCQkgICAgIHByZXYtPmFsbG5leHQgIT0gbnA7Ci0JCSAgICAgcHJldiA9IHByZXYtPmFsbG5leHQpCi0JCQk7Ci0JCXByZXYtPmFsbG5leHQgPSBucC0+YWxsbmV4dDsKLQl9Ci0KLQlpZiAocGFyZW50LT5jaGlsZCA9PSBucCkKLQkJcGFyZW50LT5jaGlsZCA9IG5wLT5zaWJsaW5nOwotCWVsc2UgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXZzaWI7Ci0JCWZvciAocHJldnNpYiA9IG5wLT5wYXJlbnQtPmNoaWxkOwotCQkgICAgIHByZXZzaWItPnNpYmxpbmcgIT0gbnA7Ci0JCSAgICAgcHJldnNpYiA9IHByZXZzaWItPnNpYmxpbmcpCi0JCQk7Ci0JCXByZXZzaWItPnNpYmxpbmcgPSBucC0+c2libGluZzsKLQl9Ci0KLQlvZl9ub2RlX3NldF9mbGFnKG5wLCBPRl9ERVRBQ0hFRCk7Ci0KLW91dF91bmxvY2s6Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotfQotCi0vKgotICogQWRkIGEgcHJvcGVydHkgdG8gYSBub2RlCi0gKi8KLWludCBwcm9tX2FkZF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcHJvcGVydHkgKnByb3ApCi17Ci0Jc3RydWN0IHByb3BlcnR5ICoqbmV4dDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JcHJvcC0+bmV4dCA9IE5VTEw7Ci0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQluZXh0ID0gJm5wLT5wcm9wZXJ0aWVzOwotCXdoaWxlICgqbmV4dCkgewotCQlpZiAoc3RyY21wKHByb3AtPm5hbWUsICgqbmV4dCktPm5hbWUpID09IDApIHsKLQkJCS8qIGR1cGxpY2F0ZSAhIGRvbid0IGluc2VydCBpdCAqLwotCQkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCW5leHQgPSAmKCpuZXh0KS0+bmV4dDsKLQl9Ci0JKm5leHQgPSBwcm9wOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQotI2lmZGVmIENPTkZJR19QUk9DX0RFVklDRVRSRUUKLQkvKiB0cnkgdG8gYWRkIHRvIHByb2MgYXMgd2VsbCBpZiBpdCB3YXMgaW5pdGlhbGl6ZWQgKi8KLQlpZiAobnAtPnBkZSkKLQkJcHJvY19kZXZpY2VfdHJlZV9hZGRfcHJvcChucC0+cGRlLCBwcm9wKTsKLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFICovCi0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFJlbW92ZSBhIHByb3BlcnR5IGZyb20gYSBub2RlLiAgTm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5Ci0gKiByZW1vdmUgaXQsIHNpbmNlIHdlIGhhdmUgZ2l2ZW4gb3V0IHdoby1rbm93cy1ob3ctbWFueSBwb2ludGVycwotICogdG8gdGhlIGRhdGEgdXNpbmcgZ2V0LXByb3BlcnR5LiAgSW5zdGVhZCB3ZSBqdXN0IG1vdmUgdGhlIHByb3BlcnR5Ci0gKiB0byB0aGUgImRlYWQgcHJvcGVydGllcyIgbGlzdCwgc28gaXQgd29uJ3QgYmUgZm91bmQgYW55IG1vcmUuCi0gKi8KLWludCBwcm9tX3JlbW92ZV9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcHJvcGVydHkgKnByb3ApCi17Ci0Jc3RydWN0IHByb3BlcnR5ICoqbmV4dDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBmb3VuZCA9IDA7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCW5leHQgPSAmbnAtPnByb3BlcnRpZXM7Ci0Jd2hpbGUgKCpuZXh0KSB7Ci0JCWlmICgqbmV4dCA9PSBwcm9wKSB7Ci0JCQkvKiBmb3VuZCB0aGUgbm9kZSAqLwotCQkJKm5leHQgPSBwcm9wLT5uZXh0OwotCQkJcHJvcC0+bmV4dCA9IG5wLT5kZWFkcHJvcHM7Ci0JCQlucC0+ZGVhZHByb3BzID0gcHJvcDsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCW5leHQgPSAmKCpuZXh0KS0+bmV4dDsKLQl9Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCi0JaWYgKCFmb3VuZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFCi0JLyogdHJ5IHRvIHJlbW92ZSB0aGUgcHJvYyBub2RlIGFzIHdlbGwgKi8KLQlpZiAobnAtPnBkZSkKLQkJcHJvY19kZXZpY2VfdHJlZV9yZW1vdmVfcHJvcChucC0+cGRlLCBwcm9wKTsKLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFICovCi0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFVwZGF0ZSBhIHByb3BlcnR5IGluIGEgbm9kZS4gIE5vdGUgdGhhdCB3ZSBkb24ndCBhY3R1YWxseQotICogcmVtb3ZlIGl0LCBzaW5jZSB3ZSBoYXZlIGdpdmVuIG91dCB3aG8ta25vd3MtaG93LW1hbnkgcG9pbnRlcnMKLSAqIHRvIHRoZSBkYXRhIHVzaW5nIGdldC1wcm9wZXJ0eS4gIEluc3RlYWQgd2UganVzdCBtb3ZlIHRoZSBwcm9wZXJ0eQotICogdG8gdGhlICJkZWFkIHByb3BlcnRpZXMiIGxpc3QsIGFuZCBhZGQgdGhlIG5ldyBwcm9wZXJ0eSB0byB0aGUKLSAqIHByb3BlcnR5IGxpc3QKLSAqLwotaW50IHByb21fdXBkYXRlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkgc3RydWN0IHByb3BlcnR5ICpuZXdwcm9wLAotCQkJIHN0cnVjdCBwcm9wZXJ0eSAqb2xkcHJvcCkKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGZvdW5kID0gMDsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JbmV4dCA9ICZucC0+cHJvcGVydGllczsKLQl3aGlsZSAoKm5leHQpIHsKLQkJaWYgKCpuZXh0ID09IG9sZHByb3ApIHsKLQkJCS8qIGZvdW5kIHRoZSBub2RlICovCi0JCQluZXdwcm9wLT5uZXh0ID0gb2xkcHJvcC0+bmV4dDsKLQkJCSpuZXh0ID0gbmV3cHJvcDsKLQkJCW9sZHByb3AtPm5leHQgPSBucC0+ZGVhZHByb3BzOwotCQkJbnAtPmRlYWRwcm9wcyA9IG9sZHByb3A7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQluZXh0ID0gJigqbmV4dCktPm5leHQ7Ci0JfQotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQotCWlmICghZm91bmQpCi0JCXJldHVybiAtRU5PREVWOwotCi0jaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQotCS8qIHRyeSB0byBhZGQgdG8gcHJvYyBhcyB3ZWxsIGlmIGl0IHdhcyBpbml0aWFsaXplZCAqLwotCWlmIChucC0+cGRlKQotCQlwcm9jX2RldmljZV90cmVlX3VwZGF0ZV9wcm9wKG5wLT5wZGUsIG5ld3Byb3AsIG9sZHByb3ApOwotI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KLQotCXJldHVybiAwOwotfQotCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpICYmIGRlZmluZWQoREVCVUcpCiBzdGF0aWMgc3RydWN0IGRlYnVnZnNfYmxvYl93cmFwcGVyIGZsYXRfZHRfYmxvYjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zZXR1cC5jCmluZGV4IDUzNzJiMjQuLmJiOGM0YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3NldHVwLmMKQEAgLTU0LDYgKzU0LDcgQEAKIAogCW1pY3JvYmxhemVfY2FjaGVfaW5pdCgpOwogCisJaW52YWxpZGF0ZV9kY2FjaGUoKTsKIAllbmFibGVfZGNhY2hlKCk7CiAKIAlpbnZhbGlkYXRlX2ljYWNoZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCA4YjVkMTc0Li41OTFjYTBjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtNDEsNyArNDEsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19aQk9PVF9VQVJUMTY1NTAKLQlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJc2VsZWN0IEdDRAogCXNlbGVjdCBWTFlOUQogCWhlbHAKQEAgLTE4MCw3ICsxODAsNyBAQAogCiBjb25maWcgTUFDSF9MT09OR1NPTgogCWJvb2wgIkxvb25nc29uIGZhbWlseSBvZiBtYWNoaW5lcyIKLQlzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfWkJPT1QKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIHN1cHBvcnQgb2YgTG9vbmdzb24gZmFtaWx5IG9mIG1hY2hpbmVzLgogCkBAIC0xMjk1LDcgKzEyOTUsNiBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfU01QCiAJc2VsZWN0IE5SX0NQVVNfREVGQVVMVF8xNgogCXNlbGVjdCBXRUFLX09SREVSSU5HCi0Jc2VsZWN0IFdFQUtfUkVPUkRFUklOR19CRVlPTkRfTExTQwogCXNlbGVjdCBDUFVfU1VQUE9SVFNfSElHSE1FTQogCXNlbGVjdCBDUFVfU1VQUE9SVFNfSFVHRVBBR0VTCiAJaGVscApAQCAtMTcyNiw2ICsxNzI1LDkgQEAKIGNvbmZpZyA2NEJJVF9QSFlTX0FERFIKIAlib29sCiAKK2NvbmZpZyBBUkNIX1BIWVNfQUREUl9UXzY0QklUCisgICAgICAgZGVmX2Jvb2wgNjRCSVRfUEhZU19BRERSCisKIGNvbmZpZyBDUFVfSEFTX1NNQVJUTUlQUwogCWRlcGVuZHMgb24gU1lTX1NVUFBPUlRTX1NNQVJUTUlQUwogCWJvb2wgIlN1cHBvcnQgZm9yIHRoZSBTbWFydE1JUFMgQVNFIgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcuZGVidWcgYi9hcmNoL21pcHMvS2NvbmZpZy5kZWJ1ZwppbmRleCBkMmI4OGEwLi40M2RjMjc5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL21pcHMvS2NvbmZpZy5kZWJ1ZwpAQCAtMTAyLDQgKzEwMiwzMCBAQAogCSAgYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RlYnVnLmggZm9yIGRlYnVnZ2luZyBtYWNyb3MuCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgREVCVUdfWkJPT1QKKwlib29sICJFbmFibGUgY29tcHJlc3NlZCBrZXJuZWwgc3VwcG9ydCBkZWJ1Z2dpbmciCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgU1lTX1NVUFBPUlRTX1pCT09UCisJZGVmYXVsdCBuCisJaGVscAorCSAgSWYgeW91IHdhbnQgdG8gYWRkIGNvbXByZXNzZWQga2VybmVsIHN1cHBvcnQgdG8gYSBuZXcgYm9hcmQsIGFuZCB0aGUKKwkgIGJvYXJkIHN1cHBvcnRzIHVhcnQxNjU1MCBjb21wYXRpYmxlIHNlcmlhbCBwb3J0LCBwbGVhc2Ugc2VsZWN0CisJICBTWVNfU1VQUE9SVFNfWkJPT1RfVUFSVDE2NTUwIGZvciB5b3VyIGJvYXJkIGFuZCBlbmFibGUgdGhpcyBvcHRpb24gdG8KKwkgIGRlYnVnIGl0LgorCisJICBJZiB5b3VyIGJvYXJkIGRvZXNuJ3Qgc3VwcG9ydCB1YXJ0MTY1NTAgY29tcGF0aWJsZSBzZXJpYWwgcG9ydCwgeW91CisJICBjYW4gdHJ5IHRvIHNlbGVjdCBTWVNfU1VQUE9SVFNfWkJPT1QgYW5kIHVzZSB0aGUgb3RoZXIgbWV0aG9kcyB0bworCSAgZGVidWcgaXQuIGZvciBleGFtcGxlLCBhZGQgYSBuZXcgc2VyaWFsIHBvcnQgc3VwcG9ydCBqdXN0IGFzCisJICBhcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL3VhcnQtMTY1NTAuYyBkb2VzLgorCisJICBBZnRlciB0aGUgY29tcHJlc3NlZCBrZXJuZWwgc3VwcG9ydCB3b3JrcywgcGxlYXNlIGRpc2FibGUgdGhpcyBvcHRpb24KKwkgIHRvIHJlZHVjZSB0aGUga2VybmVsIGltYWdlIHNpemUgYW5kIHNwZWVkIHVwIHRoZSBib290aW5nIHByb2NlZHVyZSBhCisJICBsaXR0bGUuCisKK2NvbmZpZyBTUElOTE9DS19URVNUCisJYm9vbCAiRW5hYmxlIHNwaW5sb2NrIHRpbWluZyB0ZXN0cyBpbiBkZWJ1Z2ZzIgorCWRlcGVuZHMgb24gREVCVUdfRlMKKwlkZWZhdWx0IG4KKwloZWxwCisJICBBZGQgc2V2ZXJhbCBmaWxlcyB0byB0aGUgZGVidWdmcyB0byB0ZXN0IHNwaW5sb2NrIHNwZWVkLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvTWFrZWZpbGUgYi9hcmNoL21pcHMvTWFrZWZpbGUKaW5kZXggMTg5M2VmZC4uMmYyZWFjMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9NYWtlZmlsZQpAQCAtMTg1LDYgKzE4NSwxNSBAQAogbGlicy15CQkJCSs9IGFyY2gvbWlwcy9mdy9saWIvCiAKICMKKyMgS2VybmVsIGNvbXByZXNzaW9uCisjCitpZmRlZiBTWVNfU1VQUE9SVFNfWkJPT1QKK0NPTVBSRVNTSU9OX0ZOQU1FCQk9IHZtbGludXoKK2Vsc2UKK0NPTVBSRVNTSU9OX0ZOQU1FCQk9IHZtbGludXgKK2VuZGlmCisKKyMKICMgQm9hcmQtZGVwZW5kZW50IG9wdGlvbnMgYW5kIGV4dHJhIGZpbGVzCiAjCiAKQEAgLTMzMiwxMSArMzQxLDExIEBACiAjCiAjIExvb25nc29uIGZhbWlseQogIwotY29yZS0kKENPTkZJR19NQUNIX0xPT05HU09OKSArPWFyY2gvbWlwcy9sb29uZ3Nvbi8KK2NvcmUtJChDT05GSUdfTUFDSF9MT09OR1NPTikgKz0gYXJjaC9taXBzL2xvb25nc29uLwogY2ZsYWdzLSQoQ09ORklHX01BQ0hfTE9PTkdTT04pICs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3NvbiBcCiAgICAgICAgICAgICAgICAgICAgIC1tbm8tYnJhbmNoLWxpa2VseQotbG9hZC0kKENPTkZJR19MRU1PVEVfRlVMT09ORzJFKSArPTB4ZmZmZmZmZmY4MDEwMDAwMAotbG9hZC0kKENPTkZJR19MRU1PVEVfTUFDSDJGKSArPTB4ZmZmZmZmZmY4MDIwMDAwMAorbG9hZC0kKENPTkZJR19MRU1PVEVfRlVMT09ORzJFKSArPSAweGZmZmZmZmZmODAxMDAwMDAKK2xvYWQtJChDT05GSUdfTEVNT1RFX01BQ0gyRikgKz0gMHhmZmZmZmZmZjgwMjAwMDAwCiAKICMKICMgTUlQUyBNYWx0YSBib2FyZApAQCAtMzQ0LDcgKzM1Myw3IEBACiBjb3JlLSQoQ09ORklHX01JUFNfTUFMVEEpCSs9IGFyY2gvbWlwcy9tdGktbWFsdGEvCiBjZmxhZ3MtJChDT05GSUdfTUlQU19NQUxUQSkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLW1hbHRhCiBsb2FkLSQoQ09ORklHX01JUFNfTUFMVEEpCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAotYWxsLSQoQ09ORklHX01JUFNfTUFMVEEpCTo9IHZtbGludXouYmluCithbGwtJChDT05GSUdfTUlQU19NQUxUQSkJOj0gJChDT01QUkVTU0lPTl9GTkFNRSkuYmluCiAKICMKICMgTUlQUyBTSU0KQEAgLTU5NCw3ICs2MDMsNyBAQAogZWxzZQogbG9hZC0kKENPTkZJR19TTklfUk0pCQkrPSAweGZmZmZmZmZmODAwMzAwMDAKIGVuZGlmCi1hbGwtJChDT05GSUdfU05JX1JNKQkJOj0gdm1saW51ei5lY29mZgorYWxsLSQoQ09ORklHX1NOSV9STSkJCTo9ICQoQ09NUFJFU1NJT05fRk5BTUUpLmVjb2ZmCiAKICMKICMgQ29tbW9uIFRYeDkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L0tjb25maWcgYi9hcmNoL21pcHMvYWxjaGVteS9LY29uZmlnCmluZGV4IDAwYjQ5OGUuLmRmM2IxYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L0tjb25maWcKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKLSMgYXUxMDAwLXN0eWxlIGdwaW8KLWNvbmZpZyBBTENIRU1ZX0dQSU9fQVUxMDAwCisjIGF1MTAwMC1zdHlsZSBncGlvIGFuZCBpbnRlcnJ1cHQgY29udHJvbGxlcnMKK2NvbmZpZyBBTENIRU1ZX0dQSU9JTlRfQVUxMDAwCiAJYm9vbAogCiAjIHNlbGVjdCB0aGlzIGluIHlvdXIgYm9hcmQgY29uZmlnIGlmIHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGUgZ3BpbwpAQCAtMjAsMTIgKzIwLDE0IEBACiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgU09DX0FVMTUwMAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19CT1NQT1JVUwogCWJvb2wgIkFsY2hlbXkgQm9zcG9ydXMgYm9hcmQiCiAJc2VsZWN0IFNPQ19BVTE1MDAKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX0RCMTAwMAogCWJvb2wgIkFsY2hlbXkgREIxMDAwIGJvYXJkIgpAQCAtMzMsMTIgKzM1LDE0IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX0RCMTEwMAogCWJvb2wgIkFsY2hlbXkgREIxMTAwIGJvYXJkIgogCXNlbGVjdCBTT0NfQVUxMTAwCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19EQjEyMDAKIAlib29sICJBbGNoZW15IERCMTIwMCBib2FyZCIKQEAgLTQ2LDYgKzUwLDcgQEAKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCiAJc2VsZWN0IE1JUFNfRElTQUJMRV9PQlNPTEVURV9JREUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfREIxNTAwCiAJYm9vbCAiQWxjaGVteSBEQjE1MDAgYm9hcmQiCkBAIC01NSw2ICs2MCw3IEBACiAJc2VsZWN0IE1JUFNfRElTQUJMRV9PQlNPTEVURV9JREUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfREIxNTUwCiAJYm9vbCAiQWxjaGVteSBEQjE1NTAgYm9hcmQiCkBAIC02MywxMiArNjksMTQgQEAKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IE1JUFNfRElTQUJMRV9PQlNPTEVURV9JREUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfTUlSQUdFCiAJYm9vbCAiQWxjaGVteSBNaXJhZ2UgYm9hcmQiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBTT0NfQVUxNTAwCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX1BCMTAwMAogCWJvb2wgIkFsY2hlbXkgUEIxMDAwIGJvYXJkIgpAQCAtNzcsNiArODUsNyBAQAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNXQVBfSU9fU1BBQ0UKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfUEIxMTAwCiAJYm9vbCAiQWxjaGVteSBQQjExMDAgYm9hcmQiCkBAIC04NSw2ICs5NCw3IEBACiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgU1dBUF9JT19TUEFDRQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19QQjEyMDAKIAlib29sICJBbGNoZW15IFBCMTIwMCBib2FyZCIKQEAgLTkyLDYgKzEwMiw3IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX1BCMTUwMAogCWJvb2wgIkFsY2hlbXkgUEIxNTAwIGJvYXJkIgpAQCAtOTksNiArMTEwLDcgQEAKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfUEIxNTUwCiAJYm9vbCAiQWxjaGVteSBQQjE1NTAgYm9hcmQiCkBAIC0xMDcsMzkgKzExOSw0MSBAQAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IE1JUFNfRElTQUJMRV9PQlNPTEVURV9JREUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfWFhTMTUwMAogCWJvb2wgIk15Q2FibGUgWFhTMTUwMCBib2FyZCIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IFNPQ19BVTE1MDAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogZW5kY2hvaWNlCiAKIGNvbmZpZyBTT0NfQVUxMDAwCiAJYm9vbAogCXNlbGVjdCBTT0NfQVUxWDAwCi0Jc2VsZWN0IEFMQ0hFTVlfR1BJT19BVTEwMDAKKwlzZWxlY3QgQUxDSEVNWV9HUElPSU5UX0FVMTAwMAogCiBjb25maWcgU09DX0FVMTEwMAogCWJvb2wKIAlzZWxlY3QgU09DX0FVMVgwMAotCXNlbGVjdCBBTENIRU1ZX0dQSU9fQVUxMDAwCisJc2VsZWN0IEFMQ0hFTVlfR1BJT0lOVF9BVTEwMDAKIAogY29uZmlnIFNPQ19BVTE1MDAKIAlib29sCiAJc2VsZWN0IFNPQ19BVTFYMDAKLQlzZWxlY3QgQUxDSEVNWV9HUElPX0FVMTAwMAorCXNlbGVjdCBBTENIRU1ZX0dQSU9JTlRfQVUxMDAwCiAKIGNvbmZpZyBTT0NfQVUxNTUwCiAJYm9vbAogCXNlbGVjdCBTT0NfQVUxWDAwCi0Jc2VsZWN0IEFMQ0hFTVlfR1BJT19BVTEwMDAKKwlzZWxlY3QgQUxDSEVNWV9HUElPSU5UX0FVMTAwMAogCiBjb25maWcgU09DX0FVMTIwMAogCWJvb2wKIAlzZWxlY3QgU09DX0FVMVgwMAotCXNlbGVjdCBBTENIRU1ZX0dQSU9fQVUxMDAwCisJc2VsZWN0IEFMQ0hFTVlfR1BJT0lOVF9BVTEwMDAKIAogY29uZmlnIFNPQ19BVTFYMDAKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vTWFrZWZpbGUKaW5kZXggYjY3ZmI1MS4uMDZjMGU2NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9NYWtlZmlsZQpAQCAtNSwxNCArNSwxNSBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIEFsY2hlbXkgQXUxeHgwIENQVXMsIGdlbmVyaWMgZmlsZXMuCiAjCiAKLW9iai15ICs9IHByb20ubyBpcnEubyBwdXRzLm8gdGltZS5vIHJlc2V0Lm8gXAotCWNsb2Nrcy5vIHBsYXRmb3JtLm8gcG93ZXIubyBzZXR1cC5vIFwKK29iai15ICs9IHByb20ubyB0aW1lLm8gY2xvY2tzLm8gcGxhdGZvcm0ubyBwb3dlci5vIHNldHVwLm8gXAogCXNsZWVwZXIubyBkbWEubyBkYmRtYS5vCiAKK29iai0kKENPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwKSArPSBpcnEubworCiAjIG9wdGlvbmFsIGdwaW9saWIgc3VwcG9ydAogaWZlcSAoJChDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUKSwpCiAgaWZlcSAoJChDT05GSUdfR1BJT0xJQikseSkKLSAgb2JqLSQoQ09ORklHX0FMQ0hFTVlfR1BJT19BVTEwMDApICs9IGdwaW9saWItYXUxMDAwLm8KKyAgb2JqLSQoQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDApICs9IGdwaW9saWItYXUxMDAwLm8KICBlbmRpZgogZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2Nsb2Nrcy5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2Nsb2Nrcy5jCmluZGV4IGQ4OTkxODUuLjQ2MGM2MjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9jbG9ja3MuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vY2xvY2tzLmMKQEAgLTQwLDggKzQwLDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXUxeDAwX2Nsb2NrOyAvKiAgSHogKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHVhcnRfYmF1ZF9iYXNlOwogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRpbWVfbG9jayk7Ci0KIC8qCiAgKiBTZXQgdGhlIGF1MTAwMF9jbG9jawogICovCkBAIC04NCw5ICs4Miw2IEBACiB1bnNpZ25lZCBsb25nIGF1MXh4eF9jYWxjX2Nsb2NrKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBjcHVfc3BlZWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ0aW1lX2xvY2ssIGZsYWdzKTsKIAogCS8qCiAJICogT24gZWFybHkgQXUxMDAwLCBzeXNfY3B1cGxsIHdhcyB3cml0ZS1vbmx5LiBTaW5jZSB0aGVzZQpAQCAtMTA4LDggKzEwMyw2IEBACiAJc2V0X2F1MXgwMF91YXJ0X2JhdWRfYmFzZShjcHVfc3BlZWQgLyAoMiAqICgoaW50KShhdV9yZWFkbChTWVNfUE9XRVJDVFJMKQogCQkJCQkJCSAgJiAweDAzKSArIDIpICogMTYpKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVfbG9jaywgZmxhZ3MpOwotCiAJc2V0X2F1MXgwMF9zcGVlZChjcHVfc3BlZWQpOwogCiAJcmV0dXJuIGNwdV9zcGVlZDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMKaW5kZXggNWM2ODU2OS4uOTlhZTg0YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTU4LDcgKzU5LDYgQEAKIAogc3RhdGljIGRiZG1hX2dsb2JhbF90ICpkYmRtYV9ncHRyID0gKGRiZG1hX2dsb2JhbF90ICopRERNQV9HTE9CQUxfQkFTRTsKIHN0YXRpYyBpbnQgZGJkbWFfaW5pdGlhbGl6ZWQ7Ci1zdGF0aWMgdm9pZCBhdTF4eHhfZGJkbWFfaW5pdCh2b2lkKTsKIAogc3RhdGljIGRiZGV2X3RhYl90IGRiZGV2X3RhYltdID0gewogI2lmZGVmIENPTkZJR19TT0NfQVUxNTUwCkBAIC0yMzcsNyArMjM3LDcgQEAKICAgICAgICB2b2lkICgqY2FsbGJhY2spKGludCwgdm9pZCAqKSwgdm9pZCAqY2FsbHBhcmFtKQogewogCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKLQl1MzIJCXVzZWQsIGNoYW4sIHJ2OworCXUzMgkJdXNlZCwgY2hhbjsKIAl1MzIJCWRjcDsKIAlpbnQJCWk7CiAJZGJkZXZfdGFiX3QJKnN0cCwgKmR0cDsKQEAgLTI1MCw4ICsyNTAsNyBAQAogCSAqIHdoaWNoIGNhbid0IGJlIGRvbmUgc3VjY2Vzc2Z1bGx5IGR1cmluZyBib2FyZCBzZXQgdXAuCiAJICovCiAJaWYgKCFkYmRtYV9pbml0aWFsaXplZCkKLQkJYXUxeHh4X2RiZG1hX2luaXQoKTsKLQlkYmRtYV9pbml0aWFsaXplZCA9IDE7CisJCXJldHVybiAwOwogCiAJc3RwID0gZmluZF9kYmRldl9pZChzcmNpZCk7CiAJaWYgKHN0cCA9PSBOVUxMKQpAQCAtMjYxLDcgKzI2MCw2IEBACiAJCXJldHVybiAwOwogCiAJdXNlZCA9IDA7Ci0JcnYgPSAwOwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBnZXQgYm90aCBjaGFubmVscy4gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYXUxeHh4X2RiZG1hX3NwaW5fbG9jaywgZmxhZ3MpOwpAQCAtMjgyLDYzICsyODAsNjUgQEAKIAkJdXNlZCsrOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKIAotCWlmICghdXNlZCkgewotCQkvKiBMZXQncyBzZWUgaWYgd2UgY2FuIGFsbG9jYXRlIGEgY2hhbm5lbCBmb3IgaXQuICovCi0JCWN0cCA9IE5VTEw7Ci0JCWNoYW4gPSAwOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXUxeHh4X2RiZG1hX3NwaW5fbG9jaywgZmxhZ3MpOwotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0RCRE1BX0NIQU5TOyBpKyspCi0JCQlpZiAoY2hhbl90YWJfcHRyW2ldID09IE5VTEwpIHsKLQkJCQkvKgotCQkJCSAqIElmIGttYWxsb2MgZmFpbHMsIGl0IGlzIGNhdWdodCBiZWxvdyBzYW1lCi0JCQkJICogYXMgYSBjaGFubmVsIG5vdCBhdmFpbGFibGUuCi0JCQkJICovCi0JCQkJY3RwID0ga21hbGxvYyhzaXplb2YoY2hhbl90YWJfdCksIEdGUF9BVE9NSUMpOwotCQkJCWNoYW5fdGFiX3B0cltpXSA9IGN0cDsKLQkJCQlicmVhazsKLQkJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXUxeHh4X2RiZG1hX3NwaW5fbG9jaywgZmxhZ3MpOworCWlmICh1c2VkKQorCQlyZXR1cm4gMDsKIAotCQlpZiAoY3RwICE9IE5VTEwpIHsKLQkJCW1lbXNldChjdHAsIDAsIHNpemVvZihjaGFuX3RhYl90KSk7Ci0JCQljdHAtPmNoYW5faW5kZXggPSBjaGFuID0gaTsKLQkJCWRjcCA9IERETUFfQ0hBTk5FTF9CQVNFOwotCQkJZGNwICs9ICgweDAxMDAgKiBjaGFuKTsKLQkJCWN0cC0+Y2hhbl9wdHIgPSAoYXUxeF9kbWFfY2hhbl90ICopZGNwOwotCQkJY3AgPSAoYXUxeF9kbWFfY2hhbl90ICopZGNwOwotCQkJY3RwLT5jaGFuX3NyYyA9IHN0cDsKLQkJCWN0cC0+Y2hhbl9kZXN0ID0gZHRwOwotCQkJY3RwLT5jaGFuX2NhbGxiYWNrID0gY2FsbGJhY2s7Ci0JCQljdHAtPmNoYW5fY2FsbHBhcmFtID0gY2FsbHBhcmFtOwotCi0JCQkvKiBJbml0aWFsaXplIGNoYW5uZWwgY29uZmlndXJhdGlvbi4gKi8KLQkJCWkgPSAwOwotCQkJaWYgKHN0cC0+ZGV2X2ludGxldmVsKQotCQkJCWkgfD0gRERNQV9DRkdfU0VEOwotCQkJaWYgKHN0cC0+ZGV2X2ludHBvbGFyaXR5KQotCQkJCWkgfD0gRERNQV9DRkdfU1A7Ci0JCQlpZiAoZHRwLT5kZXZfaW50bGV2ZWwpCi0JCQkJaSB8PSBERE1BX0NGR19ERUQ7Ci0JCQlpZiAoZHRwLT5kZXZfaW50cG9sYXJpdHkpCi0JCQkJaSB8PSBERE1BX0NGR19EUDsKLQkJCWlmICgoc3RwLT5kZXZfZmxhZ3MgJiBERVZfRkxBR1NfU1lOQykgfHwKLQkJCQkoZHRwLT5kZXZfZmxhZ3MgJiBERVZfRkxBR1NfU1lOQykpCi0JCQkJCWkgfD0gRERNQV9DRkdfU1lOQzsKLQkJCWNwLT5kZG1hX2NmZyA9IGk7Ci0JCQlhdV9zeW5jKCk7Ci0KLQkJCS8qIFJldHVybiBhIG5vbi16ZXJvIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8KLQkJCSAqIGZpbmQgdGhlIGNoYW5uZWwgaW5mb3JtYXRpb24gaW4gc3Vic2VxdWVudAotCQkJICogb3BlcmF0aW9ucy4KKwkvKiBMZXQncyBzZWUgaWYgd2UgY2FuIGFsbG9jYXRlIGEgY2hhbm5lbCBmb3IgaXQuICovCisJY3RwID0gTlVMTDsKKwljaGFuID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXUxeHh4X2RiZG1hX3NwaW5fbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBOVU1fREJETUFfQ0hBTlM7IGkrKykKKwkJaWYgKGNoYW5fdGFiX3B0cltpXSA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogSWYga21hbGxvYyBmYWlscywgaXQgaXMgY2F1Z2h0IGJlbG93IHNhbWUKKwkJCSAqIGFzIGEgY2hhbm5lbCBub3QgYXZhaWxhYmxlLgogCQkJICovCi0JCQlydiA9ICh1MzIpKCZjaGFuX3RhYl9wdHJbY2hhbl0pOwotCQl9IGVsc2UgewotCQkJLyogUmVsZWFzZSBkZXZpY2VzICovCi0JCQlzdHAtPmRldl9mbGFncyAmPSB+REVWX0ZMQUdTX0lOVVNFOwotCQkJZHRwLT5kZXZfZmxhZ3MgJj0gfkRFVl9GTEFHU19JTlVTRTsKKwkJCWN0cCA9IGttYWxsb2Moc2l6ZW9mKGNoYW5fdGFiX3QpLCBHRlBfQVRPTUlDKTsKKwkJCWNoYW5fdGFiX3B0cltpXSA9IGN0cDsKKwkJCWJyZWFrOwogCQl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXUxeHh4X2RiZG1hX3NwaW5fbG9jaywgZmxhZ3MpOworCisJaWYgKGN0cCAhPSBOVUxMKSB7CisJCW1lbXNldChjdHAsIDAsIHNpemVvZihjaGFuX3RhYl90KSk7CisJCWN0cC0+Y2hhbl9pbmRleCA9IGNoYW4gPSBpOworCQlkY3AgPSBERE1BX0NIQU5ORUxfQkFTRTsKKwkJZGNwICs9ICgweDAxMDAgKiBjaGFuKTsKKwkJY3RwLT5jaGFuX3B0ciA9IChhdTF4X2RtYV9jaGFuX3QgKilkY3A7CisJCWNwID0gKGF1MXhfZG1hX2NoYW5fdCAqKWRjcDsKKwkJY3RwLT5jaGFuX3NyYyA9IHN0cDsKKwkJY3RwLT5jaGFuX2Rlc3QgPSBkdHA7CisJCWN0cC0+Y2hhbl9jYWxsYmFjayA9IGNhbGxiYWNrOworCQljdHAtPmNoYW5fY2FsbHBhcmFtID0gY2FsbHBhcmFtOworCisJCS8qIEluaXRpYWxpemUgY2hhbm5lbCBjb25maWd1cmF0aW9uLiAqLworCQlpID0gMDsKKwkJaWYgKHN0cC0+ZGV2X2ludGxldmVsKQorCQkJaSB8PSBERE1BX0NGR19TRUQ7CisJCWlmIChzdHAtPmRldl9pbnRwb2xhcml0eSkKKwkJCWkgfD0gRERNQV9DRkdfU1A7CisJCWlmIChkdHAtPmRldl9pbnRsZXZlbCkKKwkJCWkgfD0gRERNQV9DRkdfREVEOworCQlpZiAoZHRwLT5kZXZfaW50cG9sYXJpdHkpCisJCQlpIHw9IERETUFfQ0ZHX0RQOworCQlpZiAoKHN0cC0+ZGV2X2ZsYWdzICYgREVWX0ZMQUdTX1NZTkMpIHx8CisJCQkoZHRwLT5kZXZfZmxhZ3MgJiBERVZfRkxBR1NfU1lOQykpCisJCQkJaSB8PSBERE1BX0NGR19TWU5DOworCQljcC0+ZGRtYV9jZmcgPSBpOworCQlhdV9zeW5jKCk7CisKKwkJLyoKKwkJICogUmV0dXJuIGEgbm9uLXplcm8gdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBjaGFubmVsCisJCSAqIGluZm9ybWF0aW9uIGluIHN1YnNlcXVlbnQgb3BlcmF0aW9ucy4KKwkJICovCisJCXJldHVybiAodTMyKSgmY2hhbl90YWJfcHRyW2NoYW5dKTsKIAl9Ci0JcmV0dXJuIHJ2OworCisJLyogUmVsZWFzZSBkZXZpY2VzICovCisJc3RwLT5kZXZfZmxhZ3MgJj0gfkRFVl9GTEFHU19JTlVTRTsKKwlkdHAtPmRldl9mbGFncyAmPSB+REVWX0ZMQUdTX0lOVVNFOworCisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGF1MXh4eF9kYmRtYV9jaGFuX2FsbG9jKTsKIApAQCAtNDEyLDggKzQxMiwxMSBAQAogCQlpZiAoZGVzY19iYXNlID09IDApCiAJCQlyZXR1cm4gMDsKIAorCQljdHAtPmNkYl9tZW1iYXNlID0gZGVzY19iYXNlOwogCQlkZXNjX2Jhc2UgPSBBTElHTl9BRERSKGRlc2NfYmFzZSwgc2l6ZW9mKGF1MXhfZGRtYV9kZXNjX3QpKTsKLQl9CisJfSBlbHNlCisJCWN0cC0+Y2RiX21lbWJhc2UgPSBkZXNjX2Jhc2U7CisKIAlkcCA9IChhdTF4X2RkbWFfZGVzY190ICopZGVzY19iYXNlOwogCiAJLyogS2VlcCB0cmFjayBvZiB0aGUgYmFzZSBkZXNjcmlwdG9yLiAqLwpAQCAtNTY5LDcgKzU3Miw3IEBACiAgKiBUaGlzIHVwZGF0ZXMgdGhlIHNvdXJjZSBwb2ludGVyIGFuZCBieXRlIGNvdW50LiAgTm9ybWFsbHkgdXNlZAogICogZm9yIG1lbW9yeSB0byBmaWZvIHRyYW5zZmVycy4KICAqLwotdTMyIF9hdTF4eHhfZGJkbWFfcHV0X3NvdXJjZSh1MzIgY2hhbmlkLCB2b2lkICpidWYsIGludCBuYnl0ZXMsIHUzMiBmbGFncykKK3UzMiBhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZSh1MzIgY2hhbmlkLCBkbWFfYWRkcl90IGJ1ZiwgaW50IG5ieXRlcywgdTMyIGZsYWdzKQogewogCWNoYW5fdGFiX3QJCSpjdHA7CiAJYXUxeF9kZG1hX2Rlc2NfdAkqZHA7CkBAIC01OTUsNyArNTk4LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBMb2FkIHVwIGJ1ZmZlciBhZGRyZXNzIGFuZCBieXRlIGNvdW50LiAqLwotCWRwLT5kc2NyX3NvdXJjZTAgPSB2aXJ0X3RvX3BoeXMoYnVmKTsKKwlkcC0+ZHNjcl9zb3VyY2UwID0gYnVmICYgfjBVTDsKIAlkcC0+ZHNjcl9jbWQxID0gbmJ5dGVzOwogCS8qIENoZWNrIGZsYWdzICovCiAJaWYgKGZsYWdzICYgRERNQV9GTEFHU19JRSkKQEAgLTYyMiwxNCArNjI1LDEzIEBACiAJLyogUmV0dXJuIHNvbWV0aGluZyBub24temVyby4gKi8KIAlyZXR1cm4gbmJ5dGVzOwogfQotRVhQT1JUX1NZTUJPTChfYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UpOworRVhQT1JUX1NZTUJPTChhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZSk7CiAKIC8qIFB1dCBhIGRlc3RpbmF0aW9uIGJ1ZmZlciBpbnRvIHRoZSBETUEgcmluZy4KICAqIFRoaXMgdXBkYXRlcyB0aGUgZGVzdGluYXRpb24gcG9pbnRlciBhbmQgYnl0ZSBjb3VudC4gIE5vcm1hbGx5IHVzZWQKICAqIHRvIHBsYWNlIGFuIGVtcHR5IGJ1ZmZlciBpbnRvIHRoZSByaW5nIGZvciBmaWZvIHRvIG1lbW9yeSB0cmFuc2ZlcnMuCiAgKi8KLXUzMgotX2F1MXh4eF9kYmRtYV9wdXRfZGVzdCh1MzIgY2hhbmlkLCB2b2lkICpidWYsIGludCBuYnl0ZXMsIHUzMiBmbGFncykKK3UzMiBhdTF4eHhfZGJkbWFfcHV0X2Rlc3QodTMyIGNoYW5pZCwgZG1hX2FkZHJfdCBidWYsIGludCBuYnl0ZXMsIHUzMiBmbGFncykKIHsKIAljaGFuX3RhYl90CQkqY3RwOwogCWF1MXhfZGRtYV9kZXNjX3QJKmRwOwpAQCAtNjU5LDcgKzY2MSw3IEBACiAJaWYgKGZsYWdzICYgRERNQV9GTEFHU19OT0lFKQogCQlkcC0+ZHNjcl9jbWQwICY9IH5EU0NSX0NNRDBfSUU7CiAKLQlkcC0+ZHNjcl9kZXN0MCA9IHZpcnRfdG9fcGh5cyhidWYpOworCWRwLT5kc2NyX2Rlc3QwID0gYnVmICYgfjBVTDsKIAlkcC0+ZHNjcl9jbWQxID0gbmJ5dGVzOwogI2lmIDAKIAlwcmludGsoS0VSTl9ERUJVRyAiY21kMDoleCBjbWQxOiV4IHNvdXJjZTA6JXggc291cmNlMToleCBkZXN0MDoleCBkZXN0MToleFxuIiwKQEAgLTY4NSw3ICs2ODcsNyBAQAogCS8qIFJldHVybiBzb21ldGhpbmcgbm9uLXplcm8uICovCiAJcmV0dXJuIG5ieXRlczsKIH0KLUVYUE9SVF9TWU1CT0woX2F1MXh4eF9kYmRtYV9wdXRfZGVzdCk7CitFWFBPUlRfU1lNQk9MKGF1MXh4eF9kYmRtYV9wdXRfZGVzdCk7CiAKIC8qCiAgKiBHZXQgYSBkZXN0aW5hdGlvbiBidWZmZXIgaW50byB0aGUgRE1BIHJpbmcuCkBAIC04MzEsNyArODMzLDcgQEAKIAogCWF1MXh4eF9kYmRtYV9zdG9wKGNoYW5pZCk7CiAKLQlrZnJlZSgodm9pZCAqKWN0cC0+Y2hhbl9kZXNjX2Jhc2UpOworCWtmcmVlKCh2b2lkICopY3RwLT5jZGJfbWVtYmFzZSk7CiAKIAlzdHAtPmRldl9mbGFncyAmPSB+REVWX0ZMQUdTX0lOVVNFOwogCWR0cC0+ZGV2X2ZsYWdzICY9IH5ERVZfRkxBR1NfSU5VU0U7CkBAIC04NjgsMjggKzg3MCw2IEBACiAJcmV0dXJuIElSUV9SRVRWQUwoMSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF1MXh4eF9kYmRtYV9pbml0KHZvaWQpCi17Ci0JaW50IGlycV9ucjsKLQotCWRiZG1hX2dwdHItPmRkbWFfY29uZmlnID0gMDsKLQlkYmRtYV9ncHRyLT5kZG1hX3Rocm90dGxlID0gMDsKLQlkYmRtYV9ncHRyLT5kZG1hX2ludGVuID0gMHhmZmZmOwotCWF1X3N5bmMoKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApCi0JaXJxX25yID0gQVUxNTUwX0RETUFfSU5UOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTIwMCkKLQlpcnFfbnIgPSBBVTEyMDBfRERNQV9JTlQ7Ci0jZWxzZQotCSNlcnJvciBVbmtub3duIEF1MXgwMCBTT0MKLSNlbmRpZgotCi0JaWYgKHJlcXVlc3RfaXJxKGlycV9uciwgZGJkbWFfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAotCQkJIkF1MXh4eCBkYmRtYSIsICh2b2lkICopZGJkbWFfZ3B0cikpCi0JCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZ2V0IDE1NTAgZGJkbWEgaXJxIik7Ci19Ci0KIHZvaWQgYXUxeHh4X2RiZG1hX2R1bXAodTMyIGNoYW5pZCkKIHsKIAljaGFuX3RhYl90CSAqY3RwOwpAQCAtOTAzLDcgKzg4Myw3IEBACiAJZHRwID0gY3RwLT5jaGFuX2Rlc3Q7CiAJY3AgPSBjdHAtPmNoYW5fcHRyOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIkNoYW4gJXgsIHN0cCAleCAoZGV2ICVkKSAgZHRwICV4IChkZXYgJWQpIFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiQ2hhbiAleCwgc3RwICV4IChkZXYgJWQpICBkdHAgJXggKGRldiAlZClcbiIsCiAJCQkgICh1MzIpY3RwLCAodTMyKXN0cCwgc3RwIC0gZGJkZXZfdGFiLCAodTMyKWR0cCwKIAkJCSAgZHRwIC0gZGJkZXZfdGFiKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiZGVzYyBiYXNlICV4LCBnZXQgJXgsIHB1dCAleCwgY3VyICV4XG4iLApAQCAtMTAzOCw0ICsxMDE4LDM4IEBACiAJfQogfQogI2VuZGlmCS8qIENPTkZJR19QTSAqLworCitzdGF0aWMgaW50IF9faW5pdCBhdTF4eHhfZGJkbWFfaW5pdCh2b2lkKQoreworCWludCBpcnFfbnIsIHJldDsKKworCWRiZG1hX2dwdHItPmRkbWFfY29uZmlnID0gMDsKKwlkYmRtYV9ncHRyLT5kZG1hX3Rocm90dGxlID0gMDsKKwlkYmRtYV9ncHRyLT5kZG1hX2ludGVuID0gMHhmZmZmOworCWF1X3N5bmMoKTsKKworCXN3aXRjaCAoYWxjaGVteV9nZXRfY3B1dHlwZSgpKSB7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1NTA6CisJCWlycV9uciA9IEFVMTU1MF9ERE1BX0lOVDsKKwkJYnJlYWs7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTEyMDA6CisJCWlycV9uciA9IEFVMTIwMF9ERE1BX0lOVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxX25yLCBkYmRtYV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCisJCQkiQXUxeHh4IGRiZG1hIiwgKHZvaWQgKilkYmRtYV9ncHRyKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBncmFiIERCRE1BIGludGVycnVwdCFcbiIpOworCWVsc2UgeworCQlkYmRtYV9pbml0aWFsaXplZCA9IDE7CisJCXByaW50ayhLRVJOX0lORk8gIkFsY2hlbXkgREJETUEgaW5pdGlhbGl6ZWRcbiIpOworCX0KKworCXJldHVybiByZXQ7Cit9CitzdWJzeXNfaW5pdGNhbGwoYXUxeHh4X2RiZG1hX2luaXQpOworCiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkgfHwgZGVmaW5lZChDT05GSUdfU09DX0FVMTIwMCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kbWEuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kbWEuYwppbmRleCBkNmZiZGEyLi5kNTI3ODg3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZG1hLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RtYS5jCkBAIC0yOSw2ICsyOSw4IEBACiAgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKgogICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTE4OCwxNyArMTkwLDE0IEBACiAJCWRldiA9ICZkbWFfZGV2X3RhYmxlW2Rldl9pZF07CiAKIAlpZiAoaXJxaGFuZGxlcikgewotCQljaGFuLT5pcnEgPSBBVTEwMDBfRE1BX0lOVF9CQVNFICsgaTsKIAkJY2hhbi0+aXJxX2RldiA9IGlycV9kZXZfaWQ7CiAJCXJldCA9IHJlcXVlc3RfaXJxKGNoYW4tPmlycSwgaXJxaGFuZGxlciwgaXJxZmxhZ3MsIGRldl9zdHIsCiAJCQkJICBjaGFuLT5pcnFfZGV2KTsKIAkJaWYgKHJldCkgewotCQkJY2hhbi0+aXJxID0gMDsKIAkJCWNoYW4tPmlycV9kZXYgPSBOVUxMOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0gZWxzZSB7Ci0JCWNoYW4tPmlycSA9IDA7CiAJCWNoYW4tPmlycV9kZXYgPSBOVUxMOwogCX0KIApAQCAtMjI2LDEzICsyMjUsNDAgQEAKIAl9CiAKIAlkaXNhYmxlX2RtYShkbWFucik7Ci0JaWYgKGNoYW4tPmlycSkKKwlpZiAoY2hhbi0+aXJxX2RldikKIAkJZnJlZV9pcnEoY2hhbi0+aXJxLCBjaGFuLT5pcnFfZGV2KTsKIAotCWNoYW4tPmlycSA9IDA7CiAJY2hhbi0+aXJxX2RldiA9IE5VTEw7CiAJY2hhbi0+ZGV2X2lkID0gLTE7CiB9CiBFWFBPUlRfU1lNQk9MKGZyZWVfYXUxMDAwX2RtYSk7CiAKK3N0YXRpYyBpbnQgX19pbml0IGF1MTAwMF9kbWFfaW5pdCh2b2lkKQoreworICAgICAgICBpbnQgYmFzZSwgaTsKKworICAgICAgICBzd2l0Y2ggKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSkgeworICAgICAgICBjYXNlIEFMQ0hFTVlfQ1BVX0FVMTAwMDoKKyAgICAgICAgICAgICAgICBiYXNlID0gQVUxMDAwX0RNQV9JTlRfQkFTRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBTENIRU1ZX0NQVV9BVTE1MDA6CisgICAgICAgICAgICAgICAgYmFzZSA9IEFVMTUwMF9ETUFfSU5UX0JBU0U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxDSEVNWV9DUFVfQVUxMTAwOgorICAgICAgICAgICAgICAgIGJhc2UgPSBBVTExMDBfRE1BX0lOVF9CQVNFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IE5VTV9BVTEwMDBfRE1BX0NIQU5ORUxTOyBpKyspCisgICAgICAgICAgICAgICAgYXUxMDAwX2RtYV90YWJsZVtpXS5pcnEgPSBiYXNlICsgaTsKKworICAgICAgICBwcmludGsoS0VSTl9JTkZPICJBbGNoZW15IERNQSBpbml0aWFsaXplZFxuIik7CisKK291dDoKKyAgICAgICAgcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGF1MTAwMF9kbWFfaW5pdCk7CisKICNlbmRpZiAvKiBBVTEwMDAgQVUxNTAwIEFVMTEwMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2dwaW9saWItYXUxMDAwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZ3Bpb2xpYi1hdTEwMDAuYwppbmRleCAxYmZhOTFmLi5jOGUxYTk0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZ3Bpb2xpYi1hdTEwMDAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZ3Bpb2xpYi1hdTEwMDAuYwpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvZ3Bpby5oPgogCi0jaWYgIWRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCiBzdGF0aWMgaW50IGdwaW8yX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJcmV0dXJuIGFsY2hlbXlfZ3BpbzJfZ2V0X3ZhbHVlKG9mZnNldCArIEFMQ0hFTVlfR1BJTzJfQkFTRSk7CkBAIC02Myw3ICs2Miw3IEBACiB7CiAJcmV0dXJuIGFsY2hlbXlfZ3BpbzJfdG9faXJxKG9mZnNldCArIEFMQ0hFTVlfR1BJTzJfQkFTRSk7CiB9Ci0jZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApICovCisKIAogc3RhdGljIGludCBncGlvMV9nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewpAQCAtMTA0LDcgKzEwMyw2IEBACiAJCS5iYXNlCQkJPSBBTENIRU1ZX0dQSU8xX0JBU0UsCiAJCS5uZ3BpbwkJCT0gQUxDSEVNWV9HUElPMV9OVU0sCiAJfSwKLSNpZiAhZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKIAlbMV0gPSB7CiAJCS5sYWJlbCAgICAgICAgICAgICAgICAgID0gImFsY2hlbXktZ3BpbzIiLAogCQkuZGlyZWN0aW9uX2lucHV0ICAgICAgICA9IGdwaW8yX2RpcmVjdGlvbl9pbnB1dCwKQEAgLTExNSwxNSArMTEzLDEzIEBACiAJCS5iYXNlICAgICAgICAgICAgICAgICAgID0gQUxDSEVNWV9HUElPMl9CQVNFLAogCQkubmdwaW8gICAgICAgICAgICAgICAgICA9IEFMQ0hFTVlfR1BJTzJfTlVNLAogCX0sCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGFsY2hlbXlfZ3Bpb2xpYl9pbml0KHZvaWQpCiB7CiAJZ3Bpb2NoaXBfYWRkKCZhbGNoZW15X2dwaW9fY2hpcFswXSk7Ci0jaWYgIWRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JZ3Bpb2NoaXBfYWRkKCZhbGNoZW15X2dwaW9fY2hpcFsxXSk7Ci0jZW5kaWYKKwlpZiAoYWxjaGVteV9nZXRfY3B1dHlwZSgpICE9IEFMQ0hFTVlfQ1BVX0FVMTAwMCkKKwkJZ3Bpb2NoaXBfYWRkKCZhbGNoZW15X2dwaW9fY2hpcFsxXSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9pcnEuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9pcnEuYwppbmRleCBkNjcwOTI4Li5iMjgyMWFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jCkBAIC0zOSwxNjggKzM5LDE4MCBAQAogCiBzdGF0aWMgaW50IGF1MXhfaWNfc2V0dHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKTsKIAorLyogTk9URSBvbiBpbnRlcnJ1cHQgcHJpb3JpdGllczogVGhlIG9yaWdpbmFsIHdyaXRlcnMgb2YgdGhpcyBjb2RlIHNhaWQ6CisgKgorICogQmVjYXVzZSBvZiB0aGUgdGlnaHQgdGltaW5nIG9mIFNFVFVQIHRva2VuIHRvIHJlcGx5IHRyYW5zYWN0aW9ucywKKyAqIHRoZSBVU0IgZGV2aWNlcy1zaWRlIHBhY2tldCBjb21wbGV0ZSBpbnRlcnJ1cHQgKFVTQl9ERVZfUkVRX0lOVCkKKyAqIG5lZWRzIHRoZSBoaWdoZXN0IHByaW9yaXR5LgorICovCisKIC8qIHBlci1wcm9jZXNzb3IgZml4ZWQgZnVuY3Rpb24gaXJxcyAqLwotc3RydWN0IGF1MXh4eF9pcnFtYXAgYXUxeHh4X2ljMF9tYXBbXSBfX2luaXRkYXRhID0geworc3RydWN0IGF1MXh4eF9pcnFtYXAgeworCWludCBpbV9pcnE7CisJaW50IGltX3R5cGU7CisJaW50IGltX3JlcXVlc3Q7CQkvKiBzZXQgMSB0byBnZXQgaGlnaGVyIHByaW9yaXR5ICovCit9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQl7IEFVMTAwMF9VQVJUMF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9VQVJUMV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9VQVJUMl9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9VQVJUM19JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9TU0kwX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1NTSTFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzEsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMiwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSszLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNSwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs2LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzcsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9UT1lfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDBfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDFfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDJfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMSB9LAotCXsgQVUxMDAwX1JUQ19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMl9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfSVJEQV9UWF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9JUkRBX1JYX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1VTQl9ERVZfUkVRX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAorc3RydWN0IGF1MXh4eF9pcnFtYXAgYXUxMDAwX2lycW1hcFtdIF9faW5pdGRhdGEgPSB7CisJeyBBVTEwMDBfVUFSVDBfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfVUFSVDFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfVUFSVDJfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfVUFSVDNfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfU1NJMF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9TU0kxX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSsxLCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMiwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzMsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs0LCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNSwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzYsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs3LCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9UT1lfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEwMDBfVE9ZX01BVENIMF9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMDAwX1RPWV9NQVRDSDFfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTAwMF9UT1lfTUFUQ0gyX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEwMDBfUlRDX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMDAwX1JUQ19NQVRDSDBfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTAwMF9SVENfTUFUQ0gxX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEwMDBfUlRDX01BVENIMl9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMSB9LAorCXsgQVUxMDAwX0lSREFfVFhfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfSVJEQV9SWF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9VU0JfREVWX1JFUV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsICAxIH0sCiAJeyBBVTEwMDBfVVNCX0RFVl9TVVNfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1VTQl9IT1NUX0lOVCwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTEwMDBfQUNTWU5DX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9NQUMwX0RNQV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9NQUMxX0RNQV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9BQzk3Q19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEwMDBfVVNCX0hPU1RfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTEwMDBfQUNTWU5DX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMDAwX01BQzBfRE1BX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX01BQzFfRE1BX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX0FDOTdDX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgLTEsIH0sCit9OwogCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQorc3RydWN0IGF1MXh4eF9pcnFtYXAgYXUxNTAwX2lycW1hcFtdIF9faW5pdGRhdGEgPSB7CisJeyBBVTE1MDBfVUFSVDBfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfUENJX0lOVEEsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTUwMF9QQ0lfSU5UQiwJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxNTAwX1VBUlQzX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX1BDSV9JTlRDLAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1MDBfUENJX0lOVEQsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTUwMF9ETUFfSU5UX0JBU0UsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTUwMF9ETUFfSU5UX0JBU0UrMSwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfRE1BX0lOVF9CQVNFKzIsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX0RNQV9JTlRfQkFTRSszLCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTUwMF9ETUFfSU5UX0JBU0UrNCwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfRE1BX0lOVF9CQVNFKzUsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX0RNQV9JTlRfQkFTRSs2LCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTUwMF9ETUFfSU5UX0JBU0UrNywgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfVE9ZX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTAwX1RPWV9NQVRDSDBfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTUwMF9UT1lfTUFUQ0gxX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1MDBfVE9ZX01BVENIMl9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTAwX1JUQ19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTUwMF9SVENfTUFUQ0gwX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1MDBfUlRDX01BVENIMV9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTAwX1JUQ19NQVRDSDJfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDEgfSwKKwl7IEFVMTUwMF9VU0JfREVWX1JFUV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsICAxIH0sCisJeyBBVTE1MDBfVVNCX0RFVl9TVVNfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTAwX1VTQl9IT1NUX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxNTAwX0FDU1lOQ19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTUwMF9NQUMwX0RNQV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTUwMF9NQUMxX0RNQV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTUwMF9BQzk3Q19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IC0xLCB9LAorfTsKIAotCXsgQVUxNTAwX1VBUlQwX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1BDSV9JTlRBLCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTAwMF9QQ0lfSU5UQiwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTE1MDBfVUFSVDNfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfUENJX0lOVEMsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxMDAwX1BDSV9JTlRELCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMSwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSsyLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzMsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs1LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzYsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNywgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1RPWV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMl9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAxIH0sCi0JeyBBVTEwMDBfUlRDX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gwX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gxX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gyX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9VU0JfREVWX1JFUV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9VU0JfREVWX1NVU19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVVNCX0hPU1RfSU5ULCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTAwMF9BQ1NZTkNfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxNTAwX01BQzBfRE1BX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxNTAwX01BQzFfRE1BX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0FDOTdDX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKK3N0cnVjdCBhdTF4eHhfaXJxbWFwIGF1MTEwMF9pcnFtYXBbXSBfX2luaXRkYXRhID0geworCXsgQVUxMTAwX1VBUlQwX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX1VBUlQxX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX1NEX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX1VBUlQzX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX1NTSTBfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfU1NJMV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9ETUFfSU5UX0JBU0UsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9ETUFfSU5UX0JBU0UrMSwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfRE1BX0lOVF9CQVNFKzIsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX0RNQV9JTlRfQkFTRSszLCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9ETUFfSU5UX0JBU0UrNCwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfRE1BX0lOVF9CQVNFKzUsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX0RNQV9JTlRfQkFTRSs2LCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9ETUFfSU5UX0JBU0UrNywgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfVE9ZX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMTAwX1RPWV9NQVRDSDBfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTEwMF9UT1lfTUFUQ0gxX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTExMDBfVE9ZX01BVENIMl9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMTAwX1JUQ19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTEwMF9SVENfTUFUQ0gwX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTExMDBfUlRDX01BVENIMV9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMTAwX1JUQ19NQVRDSDJfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDEgfSwKKwl7IEFVMTEwMF9JUkRBX1RYX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX0lSREFfUlhfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfVVNCX0RFVl9SRVFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMSB9LAorCXsgQVUxMTAwX1VTQl9ERVZfU1VTX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTEwMF9VU0JfSE9TVF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTEwMF9BQ1NZTkNfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTExMDBfTUFDMF9ETUFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfTENEX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX0FDOTdDX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgLTEsIH0sCit9OwogCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMTAwKQotCi0JeyBBVTExMDBfVUFSVDBfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTExMDBfVUFSVDFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTExMDBfU0RfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTExMDBfVUFSVDNfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfU1NJMF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9TU0kxX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSsxLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzIsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMywgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs0LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzUsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNiwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs3LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVE9ZX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gyX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDEgfSwKLQl7IEFVMTAwMF9SVENfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDBfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDFfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDJfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX0lSREFfVFhfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfSVJEQV9SWF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9VU0JfREVWX1JFUV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9VU0JfREVWX1NVU19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVVNCX0hPU1RfSU5ULCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTAwMF9BQ1NZTkNfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMTAwX01BQzBfRE1BX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMTAwX0xDRF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9BQzk3Q19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0KLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApCi0KLQl7IEFVMTU1MF9VQVJUMF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTU1MF9QQ0lfSU5UQSwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTE1NTBfUENJX0lOVEIsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxNTUwX0RETUFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTE1NTBfQ1JZUFRPX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxNTUwX1BDSV9JTlRDLCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTU1MF9QQ0lfSU5URCwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTE1NTBfUENJX1JTVF9JTlQsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxNTUwX1VBUlQxX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxNTUwX1VBUlQzX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxNTUwX1BTQzBfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTE1NTBfUFNDMV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTU1MF9QU0MyX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxNTUwX1BTQzNfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVE9ZX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gyX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDEgfSwKLQl7IEFVMTAwMF9SVENfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDBfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDFfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDJfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxNTUwX05BTkRfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxNTUwX1VTQl9ERVZfUkVRX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAorc3RydWN0IGF1MXh4eF9pcnFtYXAgYXUxNTUwX2lycW1hcFtdIF9faW5pdGRhdGEgPSB7CisJeyBBVTE1NTBfVUFSVDBfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1NTBfUENJX0lOVEEsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTU1MF9QQ0lfSU5UQiwJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxNTUwX0RETUFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1NTBfQ1JZUFRPX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTUwX1BDSV9JTlRDLAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1NTBfUENJX0lOVEQsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTU1MF9QQ0lfUlNUX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxNTUwX1VBUlQxX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTUwX1VBUlQzX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTUwX1BTQzBfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1NTBfUFNDMV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTU1MF9QU0MyX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTUwX1BTQzNfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1NTBfVE9ZX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTUwX1RPWV9NQVRDSDBfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTU1MF9UT1lfTUFUQ0gxX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1NTBfVE9ZX01BVENIMl9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTUwX1JUQ19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTU1MF9SVENfTUFUQ0gwX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1NTBfUlRDX01BVENIMV9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTUwX1JUQ19NQVRDSDJfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDEgfSwKKwl7IEFVMTU1MF9OQU5EX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTUwX1VTQl9ERVZfUkVRX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDEgfSwKIAl7IEFVMTU1MF9VU0JfREVWX1NVU19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTE1NTBfVVNCX0hPU1RfSU5ULCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTU1MF9NQUMwX0RNQV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTU1MF9NQUMxX0RNQV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKKwl7IEFVMTU1MF9VU0JfSE9TVF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTU1MF9NQUMwX0RNQV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTU1MF9NQUMxX0RNQV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IC0xLCB9LAorfTsKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTIwMCkKLQotCXsgQVUxMjAwX1VBUlQwX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX1NXVF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEyMDBfU0RfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEyMDBfRERNQV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTIwMF9NQUVfQkVfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEyMDBfVUFSVDFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEyMDBfTUFFX0ZFX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX1BTQzBfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEyMDBfUFNDMV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTIwMF9BRVNfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEyMDBfQ0FNRVJBX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1RPWV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMl9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAxIH0sCi0JeyBBVTEwMDBfUlRDX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gwX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gxX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gyX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTIwMF9OQU5EX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTIwMF9VU0JfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEyMDBfTENEX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX01BRV9CT1RIX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCi0jZWxzZQotI2Vycm9yICJFcnJvcjogVW5rbm93biBBbGNoZW15IFNPQyIKLSNlbmRpZgorc3RydWN0IGF1MXh4eF9pcnFtYXAgYXUxMjAwX2lycW1hcFtdIF9faW5pdGRhdGEgPSB7CisJeyBBVTEyMDBfVUFSVDBfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEyMDBfU1dUX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMjAwX1NEX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMjAwX0RETUFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEyMDBfTUFFX0JFX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMjAwX1VBUlQxX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMjAwX01BRV9GRV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9QU0MwX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMjAwX1BTQzFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEyMDBfQUVTX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMjAwX0NBTUVSQV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9UT1lfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEyMDBfVE9ZX01BVENIMF9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMjAwX1RPWV9NQVRDSDFfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTIwMF9UT1lfTUFUQ0gyX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEyMDBfUlRDX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMjAwX1JUQ19NQVRDSDBfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTIwMF9SVENfTUFUQ0gxX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEyMDBfUlRDX01BVENIMl9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMSB9LAorCXsgQVUxMjAwX05BTkRfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEyMDBfVVNCX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMjAwX0xDRF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9NQUVfQk9USF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IC0xLCB9LAogfTsKIAogCkBAIC0zMDYsNyArMzE4LDcgQEAKICAqIG5vd2hlcmUgaW4gdGhlIGN1cnJlbnQga2VybmVsIHNvdXJjZXMgaXMgaXQgZGlzYWJsZWQuCS0tbWxhdQogICovCiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19QQjEwMDApCi0JaWYgKGlycV9uciA9PSBBVTEwMDBfR1BJT18xNSkKKwlpZiAoaXJxX25yID09IEFVMTAwMF9HUElPMTVfSU5UKQogCQlhdV93cml0ZWwoMHg0MDAwLCBQQjEwMDBfTURSKTsgLyogZW5hYmxlIGludCAqLwogI2VuZGlmCiAJYXVfc3luYygpOwpAQCAtMzc4LDExICszOTAsMTMgQEAKIAogc3RhdGljIGludCBhdTF4X2ljMV9zZXR3YWtlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKIHsKLQl1bnNpZ25lZCBpbnQgYml0ID0gaXJxIC0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFOworCWludCBiaXQgPSBpcnEgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7CiAJdW5zaWduZWQgbG9uZyB3YWtlbXNrLCBmbGFnczsKIAotCS8qIG9ubHkgR1BJTyAwLTcgY2FuIGFjdCBhcyB3YWtldXAgc291cmNlOiAqLwotCWlmICgoaXJxIDwgQVUxMDAwX0dQSU9fMCkgfHwgKGlycSA+IEFVMTAwMF9HUElPXzcpKQorCS8qIG9ubHkgR1BJTyAwLTcgY2FuIGFjdCBhcyB3YWtldXAgc291cmNlLiAgRm9ydHVuYXRlbHkgdGhlc2UKKwkgKiBhcmUgd2lyZWQgdXAgaWRlbnRpY2FsbHkgb24gYWxsIHN1cHBvcnRlZCB2YXJpYW50cy4KKwkgKi8KKwlpZiAoKGJpdCA8IDApIHx8IChiaXQgPiA3KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC01MDQsMTEgKzUxOCwxMSBAQAogYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX3N0YXR1cygpICYgcmVhZF9jMF9jYXVzZSgpOwotCXVuc2lnbmVkIGxvbmcgcywgb2ZmLCBiaXQ7CisJdW5zaWduZWQgbG9uZyBzLCBvZmY7CiAKIAlpZiAocGVuZGluZyAmIENBVVNFRl9JUDcpIHsKLQkJZG9fSVJRKE1JUFNfQ1BVX0lSUV9CQVNFICsgNyk7Ci0JCXJldHVybjsKKwkJb2ZmID0gTUlQU19DUFVfSVJRX0JBU0UgKyA3OworCQlnb3RvIGhhbmRsZTsKIAl9IGVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAyKSB7CiAJCXMgPSBJQzBfUkVRMElOVDsKIAkJb2ZmID0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFOwpAQCAtNTI0LDU4ICs1MzgsMjAgQEAKIAl9IGVsc2UKIAkJZ290byBzcHVyaW91czsKIAotCWJpdCA9IDA7CiAJcyA9IGF1X3JlYWRsKHMpOwogCWlmICh1bmxpa2VseSghcykpIHsKIHNwdXJpb3VzOgogCQlzcHVyaW91c19pbnRlcnJ1cHQoKTsKIAkJcmV0dXJuOwogCX0KLSNpZmRlZiBBVTEwMDBfVVNCX0RFVl9SRVFfSU5UCi0JLyoKLQkgKiBCZWNhdXNlIG9mIHRoZSB0aWdodCB0aW1pbmcgb2YgU0VUVVAgdG9rZW4gdG8gcmVwbHkKLQkgKiB0cmFuc2FjdGlvbnMsIHRoZSBVU0IgZGV2aWNlcy1zaWRlIHBhY2tldCBjb21wbGV0ZQotCSAqIGludGVycnVwdCBuZWVkcyB0aGUgaGlnaGVzdCBwcmlvcml0eS4KLQkgKi8KLQliaXQgPSAxIDw8IChBVTEwMDBfVVNCX0RFVl9SRVFfSU5UIC0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFKTsKLQlpZiAoKHBlbmRpbmcgJiBDQVVTRUZfSVAyKSAmJiAocyAmIGJpdCkpIHsKLQkJZG9fSVJRKEFVMTAwMF9VU0JfREVWX1JFUV9JTlQpOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0JZG9fSVJRKF9fZmZzKHMpICsgb2ZmKTsKKwlvZmYgKz0gX19mZnMocyk7CitoYW5kbGU6CisJZG9fSVJRKG9mZik7CiB9CiAKLS8qIHNldHVwIGVkZ2UvbGV2ZWwgYW5kIGFzc2lnbiByZXF1ZXN0IDAvMSAqLwotdm9pZCBfX2luaXQgYXUxeHh4X3NldHVwX2lycW1hcChzdHJ1Y3QgYXUxeHh4X2lycW1hcCAqbWFwLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBfX2luaXQgYXUxMDAwX2luaXRfaXJxKHN0cnVjdCBhdTF4eHhfaXJxbWFwICptYXApCiB7CiAJdW5zaWduZWQgaW50IGJpdCwgaXJxX25yOwotCi0Jd2hpbGUgKGNvdW50LS0pIHsKLQkJaXJxX25yID0gbWFwW2NvdW50XS5pbV9pcnE7Ci0KLQkJaWYgKCgoaXJxX25yIDwgQVUxMDAwX0lOVEMwX0lOVF9CQVNFKSB8fAotCQkgICAgIChpcnFfbnIgPj0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFICsgMzIpKSAmJgotCQkgICAgKChpcnFfbnIgPCBBVTEwMDBfSU5UQzFfSU5UX0JBU0UpIHx8Ci0JCSAgICAgKGlycV9uciA+PSBBVTEwMDBfSU5UQzFfSU5UX0JBU0UgKyAzMikpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGlycV9uciA+PSBBVTEwMDBfSU5UQzFfSU5UX0JBU0UpIHsKLQkJCWJpdCA9IGlycV9uciAtIEFVMTAwMF9JTlRDMV9JTlRfQkFTRTsKLQkJCWlmIChtYXBbY291bnRdLmltX3JlcXVlc3QpCi0JCQkJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfQVNTSUdOQ0xSKTsKLQkJfSBlbHNlIHsKLQkJCWJpdCA9IGlycV9uciAtIEFVMTAwMF9JTlRDMF9JTlRfQkFTRTsKLQkJCWlmIChtYXBbY291bnRdLmltX3JlcXVlc3QpCi0JCQkJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfQVNTSUdOQ0xSKTsKLQkJfQotCi0JCWF1MXhfaWNfc2V0dHlwZShpcnFfbnIsIG1hcFtjb3VudF0uaW1fdHlwZSk7Ci0JfQotfQotCi12b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCi17CiAJaW50IGk7CiAKIAkvKgpAQCAtNTg1LDcgKzU2MSw3IEBACiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9DRkcxQ0xSKTsKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX0NGRzJDTFIpOwogCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzBfTUFTS0NMUik7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9BU1NJR05TRVQpOworCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzBfQVNTSUdOQ0xSKTsKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX1dBS0VDTFIpOwogCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzBfU1JDU0VUKTsKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX0ZBTExJTkdDTFIpOwpAQCAtNTk2LDcgKzU3Miw3IEBACiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9DRkcxQ0xSKTsKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMxX0NGRzJDTFIpOwogCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfTUFTS0NMUik7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9BU1NJR05TRVQpOworCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfQVNTSUdOQ0xSKTsKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMxX1dBS0VDTFIpOwogCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfU1JDU0VUKTsKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMxX0ZBTExJTkdDTFIpOwpAQCAtNjE5LDExICs1OTUsNDMgQEAKIAkvKgogCSAqIEluaXRpYWxpemUgSUMwLCB3aGljaCBpcyBmaXhlZCBwZXIgcHJvY2Vzc29yLgogCSAqLwotCWF1MXh4eF9zZXR1cF9pcnFtYXAoYXUxeHh4X2ljMF9tYXAsIEFSUkFZX1NJWkUoYXUxeHh4X2ljMF9tYXApKTsKKwl3aGlsZSAobWFwLT5pbV9pcnEgIT0gLTEpIHsKKwkJaXJxX25yID0gbWFwLT5pbV9pcnE7CiAKLQkvKiBCb2FyZHMgY2FuIHJlZ2lzdGVyIGFkZGl0aW9uYWwgKEdQSU8tYmFzZWQpIElSUXMuCi0JKi8KLQlib2FyZF9pbml0X2lycSgpOworCQlpZiAoaXJxX25yID49IEFVMTAwMF9JTlRDMV9JTlRfQkFTRSkgeworCQkJYml0ID0gaXJxX25yIC0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFOworCQkJaWYgKG1hcC0+aW1fcmVxdWVzdCkKKwkJCQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9BU1NJR05TRVQpOworCQl9IGVsc2UgeworCQkJYml0ID0gaXJxX25yIC0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFOworCQkJaWYgKG1hcC0+aW1fcmVxdWVzdCkKKwkJCQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9BU1NJR05TRVQpOworCQl9CisKKwkJYXUxeF9pY19zZXR0eXBlKGlycV9uciwgbWFwLT5pbV90eXBlKTsKKwkJKyttYXA7CisJfQogCiAJc2V0X2MwX3N0YXR1cyhJRV9JUlEwIHwgSUVfSVJRMSB8IElFX0lSUTIgfCBJRV9JUlEzKTsKIH0KKwordm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQoreworCXN3aXRjaCAoYWxjaGVteV9nZXRfY3B1dHlwZSgpKSB7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTEwMDA6CisJCWF1MTAwMF9pbml0X2lycShhdTEwMDBfaXJxbWFwKTsKKwkJYnJlYWs7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1MDA6CisJCWF1MTAwMF9pbml0X2lycShhdTE1MDBfaXJxbWFwKTsKKwkJYnJlYWs7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTExMDA6CisJCWF1MTAwMF9pbml0X2lycShhdTExMDBfaXJxbWFwKTsKKwkJYnJlYWs7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1NTA6CisJCWF1MTAwMF9pbml0X2lycShhdTE1NTBfaXJxbWFwKTsKKwkJYnJlYWs7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTEyMDA6CisJCWF1MTAwMF9pbml0X2lycShhdTEyMDBfaXJxbWFwKTsKKwkJYnJlYWs7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcGxhdGZvcm0uYwppbmRleCAxMTdmOTlmLi4yNTgwZTc3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcGxhdGZvcm0uYwpAQCAtMTksMzkgKzE5LDQwIEBACiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMTAwX21tYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZXRoLmg+CiAKLSNkZWZpbmUgUE9SVChfYmFzZSwgX2lycSkJCQkJXAotCXsJCQkJCQlcCi0JCS5pb2Jhc2UJCT0gX2Jhc2UsCQlcCi0JCS5tZW1iYXNlCT0gKHZvaWQgX19pb21lbSAqKV9iYXNlLFwKLQkJLm1hcGJhc2UJPSBDUEhZU0FERFIoX2Jhc2UpLAlcCi0JCS5pcnEJCT0gX2lycSwJCQlcCi0JCS5yZWdzaGlmdAk9IDIsCQkJXAotCQkuaW90eXBlCQk9IFVQSU9fQVUsCQlcCi0JCS5mbGFncwkJPSBVUEZfU0tJUF9URVNUIAlcCisjZGVmaW5lIFBPUlQoX2Jhc2UsIF9pcnEpCQkJCQlcCisJewkJCQkJCQlcCisJCS5tYXBiYXNlCT0gX2Jhc2UsCQkJXAorCQkuaXJxCQk9IF9pcnEsCQkJCVwKKwkJLnJlZ3NoaWZ0CT0gMiwJCQkJXAorCQkuaW90eXBlCQk9IFVQSU9fQVUsCQkJXAorCQkuZmxhZ3MJCT0gVVBGX1NLSVBfVEVTVCB8IFVQRl9JT1JFTUFQIHwJXAorCQkJCSAgVVBGX0ZJWEVEX1RZUEUsCQlcCisJCS50eXBlCQk9IFBPUlRfMTY1NTBBLAkJCVwKIAl9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgYXUxeDAwX3VhcnRfZGF0YVtdID0gewogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwX0FVMVgwMCkKICNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCVBPUlQoVUFSVDBfQUREUiwgQVUxMDAwX1VBUlQwX0lOVCksCi0JUE9SVChVQVJUMV9BRERSLCBBVTEwMDBfVUFSVDFfSU5UKSwKLQlQT1JUKFVBUlQyX0FERFIsIEFVMTAwMF9VQVJUMl9JTlQpLAotCVBPUlQoVUFSVDNfQUREUiwgQVUxMDAwX1VBUlQzX0lOVCksCisJUE9SVChVQVJUMF9QSFlTX0FERFIsIEFVMTAwMF9VQVJUMF9JTlQpLAorCVBPUlQoVUFSVDFfUEhZU19BRERSLCBBVTEwMDBfVUFSVDFfSU5UKSwKKwlQT1JUKFVBUlQyX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQyX0lOVCksCisJUE9SVChVQVJUM19QSFlTX0FERFIsIEFVMTAwMF9VQVJUM19JTlQpLAogI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkKLQlQT1JUKFVBUlQwX0FERFIsIEFVMTUwMF9VQVJUMF9JTlQpLAotCVBPUlQoVUFSVDNfQUREUiwgQVUxNTAwX1VBUlQzX0lOVCksCisJUE9SVChVQVJUMF9QSFlTX0FERFIsIEFVMTUwMF9VQVJUMF9JTlQpLAorCVBPUlQoVUFSVDNfUEhZU19BRERSLCBBVTE1MDBfVUFSVDNfSU5UKSwKICNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTExMDApCi0JUE9SVChVQVJUMF9BRERSLCBBVTExMDBfVUFSVDBfSU5UKSwKLQlQT1JUKFVBUlQxX0FERFIsIEFVMTEwMF9VQVJUMV9JTlQpLAotCVBPUlQoVUFSVDNfQUREUiwgQVUxMTAwX1VBUlQzX0lOVCksCisJUE9SVChVQVJUMF9QSFlTX0FERFIsIEFVMTEwMF9VQVJUMF9JTlQpLAorCVBPUlQoVUFSVDFfUEhZU19BRERSLCBBVTExMDBfVUFSVDFfSU5UKSwKKwlQT1JUKFVBUlQzX1BIWVNfQUREUiwgQVUxMTAwX1VBUlQzX0lOVCksCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTUwKQotCVBPUlQoVUFSVDBfQUREUiwgQVUxNTUwX1VBUlQwX0lOVCksCi0JUE9SVChVQVJUMV9BRERSLCBBVTE1NTBfVUFSVDFfSU5UKSwKLQlQT1JUKFVBUlQzX0FERFIsIEFVMTU1MF9VQVJUM19JTlQpLAorCVBPUlQoVUFSVDBfUEhZU19BRERSLCBBVTE1NTBfVUFSVDBfSU5UKSwKKwlQT1JUKFVBUlQxX1BIWVNfQUREUiwgQVUxNTUwX1VBUlQxX0lOVCksCisJUE9SVChVQVJUM19QSFlTX0FERFIsIEFVMTU1MF9VQVJUM19JTlQpLAogI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTIwMCkKLQlQT1JUKFVBUlQwX0FERFIsIEFVMTIwMF9VQVJUMF9JTlQpLAotCVBPUlQoVUFSVDFfQUREUiwgQVUxMjAwX1VBUlQxX0lOVCksCisJUE9SVChVQVJUMF9QSFlTX0FERFIsIEFVMTIwMF9VQVJUMF9JTlQpLAorCVBPUlQoVUFSVDFfUEhZU19BRERSLCBBVTEyMDBfVUFSVDFfSU5UKSwKICNlbmRpZgogI2VuZGlmCS8qIENPTkZJR19TRVJJQUxfODI1MF9BVTFYMDAgKi8KIAl7IH0sCkBAIC03Myw4ICs3NCw4IEBACiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CQk9IEFVMTAwMF9VU0JfSE9TVF9JTlQsCi0JCS5lbmQJCT0gQVUxMDAwX1VTQl9IT1NUX0lOVCwKKwkJLnN0YXJ0CQk9IEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCwKKwkJLmVuZAkJPSBGT1JfUExBVEZPUk1fQ19VU0JfSE9TVF9JTlQsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTEzMiw4ICsxMzMsOCBAQAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAkJPSBBVTEwMDBfVVNCX0hPU1RfSU5ULAotCQkuZW5kCQk9IEFVMTAwMF9VU0JfSE9TVF9JTlQsCisJCS5zdGFydAkJPSBBVTEyMDBfVVNCX0lOVCwKKwkJLmVuZAkJPSBBVTEyMDBfVVNCX0lOVCwKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtMzA4LDExICszMDksNiBAQAogI2VuZGlmIC8qICNpZm5kZWYgQ09ORklHX01JUFNfREIxMjAwICovCiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19TT0NfQVUxMjAwICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF1MXgwMF9wY21jaWFfZGV2aWNlID0gewotCS5uYW1lIAkJPSAiYXUxeDAwLXBjbWNpYSIsCi0JLmlkIAkJPSAwLAotfTsKLQogLyogQWxsIEFsY2hlbXkgZGVtb2JvYXJkcyB3aXRoIEkyQyBoYXZlIHRoaXMgI2RlZmluZSBpbiB0aGVpciBoZWFkZXJzICovCiAjaWZkZWYgU01CVVNfUFNDX0JBU0UKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGJkYl9zbWJ1c19yZXNvdXJjZXNbXSA9IHsKQEAgLTMzMSwxMCArMzI3LDkyIEBACiB9OwogI2VuZGlmCiAKKy8qIE1hY3JvIHRvIGhlbHAgZGVmaW5pbmcgdGhlIEV0aGVybmV0IE1BQyByZXNvdXJjZXMgKi8KKyNkZWZpbmUgTUFDX1JFUyhfYmFzZSwgX2VuYWJsZSwgX2lycSkJCQlcCisJewkJCQkJCVwKKwkJLnN0YXJ0CT0gQ1BIWVNBRERSKF9iYXNlKSwJCVwKKwkJLmVuZAk9IENQSFlTQUREUihfYmFzZSArIDB4ZmZmZiksCVwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCQlcCisJfSwJCQkJCQlcCisJewkJCQkJCVwKKwkJLnN0YXJ0CT0gQ1BIWVNBRERSKF9lbmFibGUpLAkJXAorCQkuZW5kCT0gQ1BIWVNBRERSKF9lbmFibGUgKyAweDMpLAlcCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAkJXAorCX0sCQkJCQkJXAorCXsJCQkJCQlcCisJCS5zdGFydAk9IF9pcnEsCQkJCVwKKwkJLmVuZAk9IF9pcnEsCQkJCVwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEJCVwKKwl9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXUxeHh4X2V0aDBfcmVzb3VyY2VzW10gPSB7CisjaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKKwlNQUNfUkVTKEFVMTAwMF9FVEgwX0JBU0UsIEFVMTAwMF9NQUMwX0VOQUJMRSwgQVUxMDAwX01BQzBfRE1BX0lOVCksCisjZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMTAwKQorCU1BQ19SRVMoQVUxMTAwX0VUSDBfQkFTRSwgQVUxMTAwX01BQzBfRU5BQkxFLCBBVTExMDBfTUFDMF9ETUFfSU5UKSwKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApCisJTUFDX1JFUyhBVTE1NTBfRVRIMF9CQVNFLCBBVTE1NTBfTUFDMF9FTkFCTEUsIEFVMTU1MF9NQUMwX0RNQV9JTlQpLAorI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkKKwlNQUNfUkVTKEFVMTUwMF9FVEgwX0JBU0UsIEFVMTUwMF9NQUMwX0VOQUJMRSwgQVUxNTAwX01BQzBfRE1BX0lOVCksCisjZW5kaWYKK307CisKKworc3RhdGljIHN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEgYXUxeHh4X2V0aDBfcGxhdGZvcm1fZGF0YSA9IHsKKwkucGh5MV9zZWFyY2hfbWFjMCA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdTF4eHhfZXRoMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF1MTAwMC1ldGgiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdTF4eHhfZXRoMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGF1MXh4eF9ldGgwX3Jlc291cmNlcywKKwkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmYXUxeHh4X2V0aDBfcGxhdGZvcm1fZGF0YSwKK307CisKKyNpZm5kZWYgQ09ORklHX1NPQ19BVTExMDAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXUxeHh4X2V0aDFfcmVzb3VyY2VzW10gPSB7CisjaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKKwlNQUNfUkVTKEFVMTAwMF9FVEgxX0JBU0UsIEFVMTAwMF9NQUMxX0VOQUJMRSwgQVUxMDAwX01BQzFfRE1BX0lOVCksCisjZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTUwKQorCU1BQ19SRVMoQVUxNTUwX0VUSDFfQkFTRSwgQVUxNTUwX01BQzFfRU5BQkxFLCBBVTE1NTBfTUFDMV9ETUFfSU5UKSwKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1MDApCisJTUFDX1JFUyhBVTE1MDBfRVRIMV9CQVNFLCBBVTE1MDBfTUFDMV9FTkFCTEUsIEFVMTUwMF9NQUMxX0RNQV9JTlQpLAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IGF1MTAwMF9ldGhfcGxhdGZvcm1fZGF0YSBhdTF4eHhfZXRoMV9wbGF0Zm9ybV9kYXRhID0geworCS5waHkxX3NlYXJjaF9tYWMwID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF1MXh4eF9ldGgxX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXUxMDAwLWV0aCIsCisJLmlkCQk9IDEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGF1MXh4eF9ldGgxX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gYXUxeHh4X2V0aDFfcmVzb3VyY2VzLAorCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZhdTF4eHhfZXRoMV9wbGF0Zm9ybV9kYXRhLAorfTsKKyNlbmRpZgorCit2b2lkIF9faW5pdCBhdTF4eHhfb3ZlcnJpZGVfZXRoX2NmZyh1bnNpZ25lZCBpbnQgcG9ydCwKKwkJCXN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEgKmV0aF9kYXRhKQoreworCWlmICghZXRoX2RhdGEgfHwgcG9ydCA+IDEpCisJCXJldHVybjsKKworCWlmIChwb3J0ID09IDApCisJCW1lbWNweSgmYXUxeHh4X2V0aDBfcGxhdGZvcm1fZGF0YSwgZXRoX2RhdGEsCisJCQlzaXplb2Yoc3RydWN0IGF1MTAwMF9ldGhfcGxhdGZvcm1fZGF0YSkpOworI2lmbmRlZiBDT05GSUdfU09DX0FVMTEwMAorCWVsc2UKKwkJbWVtY3B5KCZhdTF4eHhfZXRoMV9wbGF0Zm9ybV9kYXRhLCBldGhfZGF0YSwKKwkJCXNpemVvZihzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhKSk7CisjZW5kaWYKK30KKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF1MXh4eF9wbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmYXUxeHgwX3VhcnRfZGV2aWNlLAogCSZhdTF4eHhfdXNiX29oY2lfZGV2aWNlLAotCSZhdTF4MDBfcGNtY2lhX2RldmljZSwKICNpZmRlZiBDT05GSUdfRkJfQVUxMTAwCiAJJmF1MTEwMF9sY2RfZGV2aWNlLAogI2VuZGlmCkBAIC0zNTEsNiArNDI5LDcgQEAKICNpZmRlZiBTTUJVU19QU0NfQkFTRQogCSZwYmRiX3NtYnVzX2RldmljZSwKICNlbmRpZgorCSZhdTF4eHhfZXRoMF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhdTF4eHhfcGxhdGZvcm1faW5pdCh2b2lkKQpAQCAtMzYyLDYgKzQ0MSwxMiBAQAogCWZvciAoaSA9IDA7IGF1MXgwMF91YXJ0X2RhdGFbaV0uZmxhZ3M7IGkrKykKIAkJYXUxeDAwX3VhcnRfZGF0YVtpXS51YXJ0Y2xrID0gdWFydGNsazsKIAorI2lmbmRlZiBDT05GSUdfU09DX0FVMTEwMAorCS8qIFJlZ2lzdGVyIHNlY29uZCBNQUMgaWYgZW5hYmxlZCBpbiBwaW5mdW5jICovCisJaWYgKCEoYXVfcmVhZGwoU1lTX1BJTkZVTkMpICYgKHUzMilTWVNfUEZfTkkyKSkKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdTF4eHhfZXRoMV9kZXZpY2UpOworI2VuZGlmCisKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoYXUxeHh4X3BsYXRmb3JtX2RldmljZXMsCiAJCQkJICAgIEFSUkFZX1NJWkUoYXUxeHh4X3BsYXRmb3JtX2RldmljZXMpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wcm9tLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHJvbS5jCmluZGV4IDE4YjMxMGIuLmMyOTUxMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3Byb20uYwpAQCAtNDMsMjkgKzQzLDE1IEBACiBjaGFyICoqcHJvbV9hcmd2OwogY2hhciAqKnByb21fZW52cDsKIAotY2hhciAqIF9faW5pdF9vcl9tb2R1bGUgcHJvbV9nZXRjbWRsaW5lKHZvaWQpCi17Ci0JcmV0dXJuICYoYXJjc19jbWRsaW5lWzBdKTsKLX0KLQogdm9pZCBwcm9tX2luaXRfY21kbGluZSh2b2lkKQogewotCWNoYXIgKmNwOwotCWludCBhY3RyOworCWludCBpOwogCi0JYWN0ciA9IDE7IC8qIEFsd2F5cyBpZ25vcmUgYXJndlswXSAqLwotCi0JY3AgPSAmKGFyY3NfY21kbGluZVswXSk7Ci0Jd2hpbGUgKGFjdHIgPCBwcm9tX2FyZ2MpIHsKLQkJc3RyY3B5KGNwLCBwcm9tX2FyZ3ZbYWN0cl0pOwotCQljcCArPSBzdHJsZW4ocHJvbV9hcmd2W2FjdHJdKTsKLQkJKmNwKysgPSAnICc7Ci0JCWFjdHIrKzsKKwlmb3IgKGkgPSAxOyBpIDwgcHJvbV9hcmdjOyBpKyspIHsKKwkJc3RybGNhdChhcmNzX2NtZGxpbmUsIHByb21fYXJndltpXSwgQ09NTUFORF9MSU5FX1NJWkUpOworCQlpZiAoaSA8IChwcm9tX2FyZ2MgLSAxKSkKKwkJCXN0cmxjYXQoYXJjc19jbWRsaW5lLCAiICIsIENPTU1BTkRfTElORV9TSVpFKTsKIAl9Ci0JaWYgKGNwICE9ICYoYXJjc19jbWRsaW5lWzBdKSkgLyogZ2V0IHJpZCBvZiB0cmFpbGluZyBzcGFjZSAqLwotCQktLWNwOwotCWlmIChwcm9tX2FyZ2MgPiAxKQotCQkqY3AgPSAnXDAnOwogfQogCiBjaGFyICpwcm9tX2dldGVudihjaGFyICplbnZuYW1lKQpAQCAtMTIxLDE0ICsxMDcsMTIgQEAKIGludCBwcm9tX2dldF9ldGhlcm5ldF9hZGRyKGNoYXIgKmV0aGVybmV0X2FkZHIpCiB7CiAJY2hhciAqZXRoYWRkcl9zdHI7Ci0JY2hhciAqYXJncHRyOwogCiAJLyogQ2hlY2sgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmaXJzdCAqLwogCWV0aGFkZHJfc3RyID0gcHJvbV9nZXRlbnYoImV0aGFkZHIiKTsKIAlpZiAoIWV0aGFkZHJfc3RyKSB7CiAJCS8qIENoZWNrIGNvbW1hbmQgbGluZSAqLwotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJZXRoYWRkcl9zdHIgPSBzdHJzdHIoYXJncHRyLCAiZXRoYWRkcj0iKTsKKwkJZXRoYWRkcl9zdHIgPSBzdHJzdHIoYXJjc19jbWRsaW5lLCAiZXRoYWRkcj0iKTsKIAkJaWYgKCFldGhhZGRyX3N0cikKIAkJCXJldHVybiAtMTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3B1dHMuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wdXRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YmJlMjQuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3B1dHMuYworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglMb3cgbGV2ZWwgVUFSVCByb3V0aW5lcyB0byBkaXJlY3RseSBhY2Nlc3MgQWxjaGVteSBVQVJULgotICoKLSAqIENvcHlyaWdodCAyMDAxLCAyMDA4IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KLQotI2RlZmluZSBTRVJJQUxfQkFTRSAgIFVBUlRfQkFTRQotI2RlZmluZSBTRVJfQ01EICAgICAgIDB4NwotI2RlZmluZSBTRVJfREFUQSAgICAgIDB4MQotI2RlZmluZSBUWF9CVVNZICAgICAgIDB4MjAKLQotI2RlZmluZSBUSU1FT1VUICAgICAgIDB4ZmZmZmZmCi0jZGVmaW5lIFNMT1dfRE9XTgotCi1zdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGNvbnN0IGNvbTEgPSAodW5zaWduZWQgbG9uZyAqKVNFUklBTF9CQVNFOwotCi0jaWZkZWYgU0xPV19ET1dOCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xvd19kb3duKHZvaWQpCi17Ci0JaW50IGs7Ci0KLQlmb3IgKGsgPSAwOyBrIDwgMTAwMDA7IGsrKyk7Ci19Ci0jZWxzZQotI2RlZmluZSBzbG93X2Rvd24oKQotI2VuZGlmCi0KLXZvaWQKLXByb21fcHV0Y2hhcihjb25zdCB1bnNpZ25lZCBjaGFyIGMpCi17Ci0JdW5zaWduZWQgY2hhciBjaDsKLQlpbnQgaSA9IDA7Ci0KLQlkbyB7Ci0JCWNoID0gY29tMVtTRVJfQ01EXTsKLQkJc2xvd19kb3duKCk7Ci0JCWkrKzsKLQkJaWYgKGkgPiBUSU1FT1VUKQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoMCA9PSAoY2ggJiBUWF9CVVNZKSk7Ci0KLQljb20xW1NFUl9EQVRBXSA9IGM7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcmVzZXQuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9yZXNldC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzkxMDExLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9yZXNldC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qCi0gKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglBdTF4eDAgcmVzZXQgcm91dGluZXMuCi0gKgotICogQ29weXJpZ2h0IDIwMDEsIDIwMDYsIDIwMDggTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotCi0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0KLXZvaWQgYXUxMDAwX3Jlc3RhcnQoY2hhciAqY29tbWFuZCkKLXsKLQkvKiBTZXQgYWxsIGludGVncmF0ZWQgcGVyaXBoZXJhbHMgdG8gZGlzYWJsZWQgc3RhdGVzICovCi0JZXh0ZXJuIHZvaWQgYm9hcmRfcmVzZXQodm9pZCk7Ci0JdTMyIHByaWQgPSByZWFkX2MwX3ByaWQoKTsKLQotCXByaW50ayhLRVJOX05PVElDRSAiXG4qKiBSZXNldHRpbmcgSW50ZWdyYXRlZCBQZXJpcGhlcmFsc1xuIik7Ci0KLQlzd2l0Y2ggKHByaWQgJiAweEZGMDAwMDAwKSB7Ci0JY2FzZSAweDAwMDAwMDAwOiAvKiBBdTEwMDAgKi8KLQkJYXVfd3JpdGVsKDB4MDIsIDB4YjAwMDAwMTApOyAvKiBhYzk3X2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwOCwgMHhiMDE3ZmZmYyk7IC8qIHVzYmhfZW5hYmxlIC0gZWFybHkgZXJyYXRhICovCi0JCWFzbSgic3luYyIpOwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDE3ZmZmYyk7IC8qIHVzYmhfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIwMjAwMDU4KTsgLyogdXNiZF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjAzMDAwNDApOyAvKiBpcl9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMDQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTE0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDEyNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMzQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIwNTIwMDAwKTsgLyogbWFjZW4wICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIwNTIwMDA0KTsgLyogbWFjZW4xICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxMDAwMDA4KTsgLyogaTJzX2VuYWJsZSAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjExMDAxMDApOyAvKiB1YXJ0MF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjEyMDAxMDApOyAvKiB1YXJ0MV9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjEzMDAxMDApOyAvKiB1YXJ0Ml9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE0MDAxMDApOyAvKiB1YXJ0M19lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDIsIDB4YjE2MDAxMDApOyAvKiBzc2kwX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMiwgMHhiMTY4MDEwMCk7IC8qIHNzaTFfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDIwKTsgLyogc3lzX2ZyZXFjdHJsMCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyNCk7IC8qIHN5c19mcmVxY3RybDEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjgpOyAvKiBzeXNfY2xrc3JjICovCi0JCWF1X3dyaXRlbCgweDEwLCAweGIxOTAwMDYwKTsgLyogc3lzX2NwdXBsbCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDA2NCk7IC8qIHN5c19hdXhwbGwgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAxMDApOyAvKiBzeXNfcGluaW5wdXRlbiAqLwotCQlicmVhazsKLQljYXNlIDB4MDEwMDAwMDA6IC8qIEF1MTUwMCAqLwotCQlhdV93cml0ZWwoMHgwMiwgMHhiMDAwMDAxMCk7IC8qIGFjOTdfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDA4LCAweGIwMTdmZmZjKTsgLyogdXNiaF9lbmFibGUgLSBlYXJseSBlcnJhdGEgKi8KLQkJYXNtKCJzeW5jIik7Ci0JCWF1X3dyaXRlbCgweDAwLCAweGIwMTdmZmZjKTsgLyogdXNiaF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjAyMDAwNTgpOyAvKiB1c2JkX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDEwNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMTQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTI0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDEzNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE1MjAwMDApOyAvKiBtYWNlbjAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE1MjAwMDQpOyAvKiBtYWNlbjEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjExMDAxMDApOyAvKiB1YXJ0MF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE0MDAxMDApOyAvKiB1YXJ0M19lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjApOyAvKiBzeXNfZnJlcWN0cmwwICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDI0KTsgLyogc3lzX2ZyZXFjdHJsMSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyOCk7IC8qIHN5c19jbGtzcmMgKi8KLQkJYXVfd3JpdGVsKDB4MTAsIDB4YjE5MDAwNjApOyAvKiBzeXNfY3B1cGxsICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDY0KTsgLyogc3lzX2F1eHBsbCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDEwMCk7IC8qIHN5c19waW5pbnB1dGVuICovCi0JCWJyZWFrOwotCWNhc2UgMHgwMjAwMDAwMDogLyogQXUxMTAwICovCi0JCWF1X3dyaXRlbCgweDAyLCAweGIwMDAwMDEwKTsgLyogYWM5N19lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDgsIDB4YjAxN2ZmZmMpOyAvKiB1c2JoX2VuYWJsZSAtIGVhcmx5IGVycmF0YSAqLwotCQlhc20oInN5bmMiKTsKLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjAxN2ZmZmMpOyAvKiB1c2JoX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDIwMDA1OCk7IC8qIHVzYmRfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIwMzAwMDQwKTsgLyogaXJfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTA0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDExNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMjQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTM0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDUyMDAwMCk7IC8qIG1hY2VuMCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTAwMDAwOCk7IC8qIGkyc19lbmFibGUgICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxMTAwMTAwKTsgLyogdWFydDBfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxMjAwMTAwKTsgLyogdWFydDFfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxNDAwMTAwKTsgLyogdWFydDNfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAyLCAweGIxNjAwMTAwKTsgLyogc3NpMF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDIsIDB4YjE2ODAxMDApOyAvKiBzc2kxX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyMCk7IC8qIHN5c19mcmVxY3RybDAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjQpOyAvKiBzeXNfZnJlcWN0cmwxICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDI4KTsgLyogc3lzX2Nsa3NyYyAqLwotCQlhdV93cml0ZWwoMHgxMCwgMHhiMTkwMDA2MCk7IC8qIHN5c19jcHVwbGwgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwNjQpOyAvKiBzeXNfYXV4cGxsICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMTAwKTsgLyogc3lzX3BpbmlucHV0ZW4gKi8KLQkJYnJlYWs7Ci0JY2FzZSAweDAzMDAwMDAwOiAvKiBBdTE1NTAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjFhMDAwMDQpOyAvKiBwc2MgMCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMWIwMDAwNCk7IC8qIHBzYyAxICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIwYTAwMDA0KTsgLyogcHNjIDIgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjBiMDAwMDQpOyAvKiBwc2MgMyAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDE3ZmZmYyk7IC8qIHVzYmhfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIwMjAwMDU4KTsgLyogdXNiZF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMDQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTE0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDEyNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMzQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxNTIwMDAwKTsgLyogbWFjZW4wICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxNTIwMDA0KTsgLyogbWFjZW4xICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxMTAwMTAwKTsgLyogdWFydDBfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxMjAwMTAwKTsgLyogdWFydDFfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxNDAwMTAwKTsgLyogdWFydDNfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDIwKTsgLyogc3lzX2ZyZXFjdHJsMCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyNCk7IC8qIHN5c19mcmVxY3RybDEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjgpOyAvKiBzeXNfY2xrc3JjICovCi0JCWF1X3dyaXRlbCgweDEwLCAweGIxOTAwMDYwKTsgLyogc3lzX2NwdXBsbCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDA2NCk7IC8qIHN5c19hdXhwbGwgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAxMDApOyAvKiBzeXNfcGluaW5wdXRlbiAqLwotCQlicmVhazsKLQl9Ci0KLQlzZXRfYzBfc3RhdHVzKFNUMF9CRVYgfCBTVDBfRVJMKTsKLQljaGFuZ2VfYzBfY29uZmlnKENPTkZfQ01fQ01BU0ssIENPTkZfQ01fVU5DQUNIRUQpOwotCWZsdXNoX2NhY2hlX2FsbCgpOwotCXdyaXRlX2MwX3dpcmVkKDApOwotCi0JLyogR2l2ZSBib2FyZCBhIGNoYW5jZSB0byBkbyBhIGhhcmR3YXJlIHJlc2V0ICovCi0JYm9hcmRfcmVzZXQoKTsKLQotCS8qIEp1bXAgdG8gdGhlIGJlZ2dpbmluZyBpbiBjYXNlIGJvYXJkX3Jlc2V0KCkgaXMgZW1wdHkgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygianJcdCUwIjo6InIiKDB4YmZjMDAwMDApKTsKLX0KLQotdm9pZCBhdTEwMDBfaGFsdCh2b2lkKQotewotI2lmIGRlZmluZWQoQ09ORklHX01JUFNfUEIxNTUwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTU1MCkKLQkvKiBQb3dlciBvZmYgc3lzdGVtICovCi0JcHJpbnRrKEtFUk5fTk9USUNFICJcbioqIFBvd2VyaW5nIG9mZi4uLlxuIik7Ci0JYXVfd3JpdGV3KGF1X3JlYWR3KDB4QUYwMDAwMUMpIHwgKDMgPDwgMTQpLCAweEFGMDAwMDFDKTsKLQlhdV9zeW5jKCk7Ci0Jd2hpbGUgKDEpOyAvKiBzaG91bGQgbm90IGdldCBoZXJlICovCi0jZWxzZQotCXByaW50ayhLRVJOX05PVElDRSAiXG4qKiBZb3UgY2FuIHNhZmVseSB0dXJuIG9mZiB0aGUgcG93ZXJcbiIpOwotI2lmZGVmIENPTkZJR19NSVBTX01JUkFHRQotCWdwaW9fZGlyZWN0aW9uX291dHB1dCgyMTAsIDEpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01JUFNfREIxMjAwCi0JYXVfd3JpdGV3KGF1X3JlYWR3KDB4Qjk4MDAwMUMpIHwgKDEgPDwgMTQpLCAweEI5ODAwMDFDKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19QTQotCWF1X3NsZWVwKCk7Ci0KLQkvKiBTaG91bGQgbm90IGdldCBoZXJlICovCi0JcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcHV0IENQVSBpbiBzbGVlcCBtb2RlXG4iKTsKLQl3aGlsZSAoMSk7Ci0jZWxzZQotCXdoaWxlICgxKQotCQlfX2FzbV9fKCIuc2V0XHRtaXBzM1xuXHQiCi0JICAgICAgICAgICAgICAgICJ3YWl0XG5cdCIKLQkJCSIuc2V0XHRtaXBzMCIpOwotI2VuZGlmCi0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfTUlQU19QQjE1NTApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfREIxNTUwKSAqLwotfQotCi12b2lkIGF1MTAwMF9wb3dlcl9vZmYodm9pZCkKLXsKLQlhdTEwMDBfaGFsdCgpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vc2V0dXAuYwppbmRleCA2MTg0YmFhLi41NjFlNWRhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vc2V0dXAuYwpAQCAtMjksMTggKzI5LDEzIEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KIAogI2luY2x1ZGUgPGF1MTAwMC5oPgogCiBleHRlcm4gdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCk7Ci1leHRlcm4gdm9pZCBhdTEwMDBfcmVzdGFydChjaGFyICopOwotZXh0ZXJuIHZvaWQgYXUxMDAwX2hhbHQodm9pZCk7Ci1leHRlcm4gdm9pZCBhdTEwMDBfcG93ZXJfb2ZmKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2V0X2NwdXNwZWModm9pZCk7CiAKIHZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCkBAIC01NywxMCArNTIsNiBAQAogCS8qIHRoaXMgaXMgZmFzdGVyIHRoYW4gd2FzdGluZyBjeWNsZXMgdHJ5aW5nIHRvIGFwcHJveGltYXRlIGl0ICovCiAJcHJlc2V0X2xwaiA9IChlc3RfZnJlcSA+PiAxKSAvIEhaOwogCi0JX21hY2hpbmVfcmVzdGFydCA9IGF1MTAwMF9yZXN0YXJ0OwotCV9tYWNoaW5lX2hhbHQgPSBhdTEwMDBfaGFsdDsKLQlwbV9wb3dlcl9vZmYgPSBhdTEwMDBfcG93ZXJfb2ZmOwotCiAJYm9hcmRfc2V0dXAoKTsgIC8qIGJvYXJkIHNwZWNpZmljIHNldHVwICovCiAKIAlpZiAoYXUxeHh4X2NwdV9uZWVkc19jb25maWdfb2QoKSkKQEAgLTc4LDM3ICs2OSwyMCBAQAogCWlvbWVtX3Jlc291cmNlLmVuZCA9IElPTUVNX1JFU09VUkNFX0VORDsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikKKyNpZiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpICYmIGRlZmluZWQoQ09ORklHX1BDSSkKIC8qIFRoaXMgcm91dGluZSBzaG91bGQgYmUgdmFsaWQgZm9yIGFsbCBBdTF4IGJhc2VkIGJvYXJkcyAqLwogcGh5c190IF9fZml4dXBfYmlncGh5c19hZGRyKHBoeXNfdCBwaHlzX2FkZHIsIHBoeXNfdCBzaXplKQogeworCXUzMiBzdGFydCA9ICh1MzIpQXUxNTAwX1BDSV9NRU1fU1RBUlQ7CisJdTMyIGVuZCAgID0gKHUzMilBdTE1MDBfUENJX01FTV9FTkQ7CisKIAkvKiBEb24ndCBmaXh1cCAzNi1iaXQgYWRkcmVzc2VzICovCiAJaWYgKChwaHlzX2FkZHIgPj4gMzIpICE9IDApCiAJCXJldHVybiBwaHlzX2FkZHI7CiAKLSNpZmRlZiBDT05GSUdfUENJCi0JewotCQl1MzIgc3RhcnQgPSAodTMyKUF1MTUwMF9QQ0lfTUVNX1NUQVJUOwotCQl1MzIgZW5kICAgPSAodTMyKUF1MTUwMF9QQ0lfTUVNX0VORDsKLQotCQkvKiBDaGVjayBmb3IgUENJIG1lbW9yeSB3aW5kb3cgKi8KLQkJaWYgKHBoeXNfYWRkciA+PSBzdGFydCAmJiAocGh5c19hZGRyICsgc2l6ZSAtIDEpIDw9IGVuZCkKLQkJCXJldHVybiAocGh5c190KQotCQkJICAgICAgICgocGh5c19hZGRyIC0gc3RhcnQpICsgQXUxNTAwX1BDSV9NRU1fU1RBUlQpOwotCX0KLSNlbmRpZgotCi0JLyoKLQkgKiBBbGwgQXUxeHgwIFNPQ3MgaGF2ZSBhIFBDTUNJQSBjb250cm9sbGVyLgotCSAqIFdlIHNldHVwIG91ciAzMi1iaXQgcHNldWRvIGFkZHJlc3NlcyB0byBiZSBlcXVhbCB0byB0aGUKLQkgKiAzNi1iaXQgYWRkciA+PiA0LCB0byBtYWtlIGl0IGVhc2llciB0byBjaGVjayB0aGUgYWRkcmVzcwotCSAqIGFuZCBmaXggaXQuCi0JICogVGhlIFBDTUNJQSBzb2NrZXQgMCBwaHlzaWNhbCBhdHRyaWJ1dGUgYWRkcmVzcyBpcyAweEYgNDAwMCAwMDAwLgotCSAqIFRoZSBwc2V1ZG8gYWRkcmVzcyB3ZSB1c2UgaXMgMHhGNDAwIDAwMDAuIEFueSBhZGRyZXNzIG92ZXIKLQkgKiAweEY0MDAgMDAwMCBpcyBhIFBDTUNJQSBwc2V1ZG8gYWRkcmVzcy4KLQkgKi8KLQlpZiAoKHBoeXNfYWRkciA+PSAweEY0MDAwMDAwKSAmJiAocGh5c19hZGRyIDwgMHhGRkZGRkZGRikpCi0JCXJldHVybiAocGh5c190KShwaHlzX2FkZHIgPDwgNCk7CisJLyogQ2hlY2sgZm9yIFBDSSBtZW1vcnkgd2luZG93ICovCisJaWYgKHBoeXNfYWRkciA+PSBzdGFydCAmJiAocGh5c19hZGRyICsgc2l6ZSAtIDEpIDw9IGVuZCkKKwkJcmV0dXJuIChwaHlzX3QpKChwaHlzX2FkZHIgLSBzdGFydCkgKyBBdTE1MDBfUENJX01FTV9TVEFSVCk7CiAKIAkvKiBkZWZhdWx0IG5vcCAqLwogCXJldHVybiBwaHlzX2FkZHI7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vdGltZS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3RpbWUuYwppbmRleCAzNzlhNjY0Li4yYWVjYjJmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vdGltZS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi90aW1lLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE1hbnVlbCBMYXVzcyA8bWFub0Byb2FyaW5lbGsuaG9tZWxpbnV4Lm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE1hbnVlbCBMYXVzcyA8bWFudWVsLmxhdXNzQGdtYWlsLmNvbT4KICAqCiAgKiBQcmV2aW91cyBpbmNhcm5hdGlvbnMgd2VyZToKICAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwNiwgMjAwOCBNb250YVZpc3RhIFNvZnR3YXJlLCA8c291cmNlQG12aXN0YS5jb20+CkBAIC04NSw3ICs4NSw2IEBACiAJLm5hbWUJCT0gInJ0Y21hdGNoMiIsCiAJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKIAkucmF0aW5nCQk9IDEwMCwKLQkuaXJxCQk9IEFVMTAwMF9SVENfTUFUQ0gyX0lOVCwKIAkuc2V0X25leHRfZXZlbnQJPSBhdTF4X3J0Y21hdGNoMl9zZXRfbmV4dF9ldmVudCwKIAkuc2V0X21vZGUJPSBhdTF4X3J0Y21hdGNoMl9zZXRfbW9kZSwKIAkuY3B1bWFzawk9IGNwdV9hbGxfbWFzaywKQEAgLTk4LDExICs5NywxMyBAQAogCS5kZXZfaWQJCT0gJmF1MXhfcnRjbWF0Y2gyX2Nsb2NrZGV2LAogfTsKIAotdm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGFsY2hlbXlfdGltZV9pbml0KHVuc2lnbmVkIGludCBtMmludCkKIHsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZCA9ICZhdTF4X3J0Y21hdGNoMl9jbG9ja2RldjsKIAl1bnNpZ25lZCBsb25nIHQ7CiAKKwlhdTF4X3J0Y21hdGNoMl9jbG9ja2Rldi5pcnEgPSBtMmludDsKKwogCS8qIENoZWNrIGlmIGZpcm13YXJlIChZQU1PTiwgLi4uKSBoYXMgZW5hYmxlZCAzMmtIeiBhbmQgY2xvY2sKIAkgKiBoYXMgYmVlbiBkZXRlY3RlZC4gIElmIHNvIGluc3RhbGwgdGhlIHJ0Y21hdGNoMiBjbG9ja3NvdXJjZSwKIAkgKiBvdGhlcndpc2UgZG9uJ3QgYm90aGVyLiAgTm90ZSB0aGF0IGJvdGggYml0cyBiZWluZyBzZXQgaXMgYnkKQEAgLTE0OCwxMyArMTQ5LDE4IEBACiAJY2QtPm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHhmZmZmZmZmZiwgY2QpOwogCWNkLT5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDgsIGNkKTsJLyogfjAuMjVtcyAqLwogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZCk7Ci0Jc2V0dXBfaXJxKEFVMTAwMF9SVENfTUFUQ0gyX0lOVCwgJmF1MXhfcnRjbWF0Y2gyX2lycWFjdGlvbik7CisJc2V0dXBfaXJxKG0yaW50LCAmYXUxeF9ydGNtYXRjaDJfaXJxYWN0aW9uKTsKIAogCXByaW50ayhLRVJOX0lORk8gIkFsY2hlbXkgY2xvY2tzb3VyY2UgaW5zdGFsbGVkXG4iKTsKIAotCXJldHVybjsKKwlyZXR1cm4gMDsKIAogY250cl9lcnI6CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgYWxjaGVteV9zZXR1cF9jMHRpbWVyKHZvaWQpCit7CiAJLyoKIAkgKiBNSVBTIGtlcm5lbCBhc3NpZ25zICdhdTFrX3dhaXQnIHRvICdjcHVfd2FpdCcgYmVmb3JlIHRoaXMKIAkgKiBmdW5jdGlvbiBpcyBjYWxsZWQuICBCZWNhdXNlIHRoZSBBbGNoZW15IGNvdW50ZXJzIGFyZSB1bnVzYWJsZQpAQCAtMTY2LDMgKzE3MiwyMiBAQAogCXI0a19jbG9ja2V2ZW50X2luaXQoKTsKIAlpbml0X3I0a19jbG9ja3NvdXJjZSgpOwogfQorCitzdGF0aWMgaW50IGFsY2hlbXlfbTJpbnR0YWJbXSBfX2luaXRkYXRhID0geworCUFVMTAwMF9SVENfTUFUQ0gyX0lOVCwKKwlBVTE1MDBfUlRDX01BVENIMl9JTlQsCisJQVUxMTAwX1JUQ19NQVRDSDJfSU5ULAorCUFVMTU1MF9SVENfTUFUQ0gyX0lOVCwKKwlBVTEyMDBfUlRDX01BVENIMl9JTlQsCit9OworCit2b2lkIF9faW5pdCBwbGF0X3RpbWVfaW5pdCh2b2lkKQoreworCWludCB0OworCisJdCA9IGFsY2hlbXlfZ2V0X2NwdXR5cGUoKTsKKwlpZiAodCA9PSBBTENIRU1ZX0NQVV9VTktOT1dOKQorCQlhbGNoZW15X3NldHVwX2MwdGltZXIoKTsKKwllbHNlIGlmIChhbGNoZW15X3RpbWVfaW5pdChhbGNoZW15X20yaW50dGFiW3RdKSkKKwkJYWxjaGVteV9zZXR1cF9jMHRpbWVyKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvTWFrZWZpbGUKaW5kZXggNzMwZjlmMi4uZWNiZDM3ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgQWxjaGVteSBEZXZlbGJvYXJkcwogIwogCi1vYmoteSArPSBwcm9tLm8KK29iai15ICs9IHByb20ubyBiY3NyLm8gcGxhdGZvcm0ubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubwogb2JqLSQoQ09ORklHX01JUFNfUEIxMDAwKQkrPSBwYjEwMDAvCiBvYmotJChDT05GSUdfTUlQU19QQjExMDApCSs9IHBiMTEwMC8KQEAgLTExLDggKzExLDEwIEBACiBvYmotJChDT05GSUdfTUlQU19QQjE1NTApCSs9IHBiMTU1MC8KIG9iai0kKENPTkZJR19NSVBTX0RCMTAwMCkJKz0gZGIxeDAwLwogb2JqLSQoQ09ORklHX01JUFNfREIxMTAwKQkrPSBkYjF4MDAvCi1vYmotJChDT05GSUdfTUlQU19EQjEyMDApCSs9IHBiMTIwMC8KK29iai0kKENPTkZJR19NSVBTX0RCMTIwMCkJKz0gZGIxMjAwLwogb2JqLSQoQ09ORklHX01JUFNfREIxNTAwKQkrPSBkYjF4MDAvCiBvYmotJChDT05GSUdfTUlQU19EQjE1NTApCSs9IGRiMXgwMC8KIG9iai0kKENPTkZJR19NSVBTX0JPU1BPUlVTKQkrPSBkYjF4MDAvCiBvYmotJChDT05GSUdfTUlQU19NSVJBR0UpCSs9IGRiMXgwMC8KKworRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9iY3NyLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvYmNzci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYzRmZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvYmNzci5jCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogYmNzci5oIC0tIERiMXh4eC9QYjF4eHggRGV2Ym9hcmQgQ1BMRCByZWdpc3RlcnMgKCJCQ1NSIikgYWJzdHJhY3Rpb24uCisgKgorICogQWxsIEFsY2hlbXkgZGV2ZWxvcG1lbnQgYm9hcmRzIChleGNlcHQsIG9mIGNvdXJzZSwgdGhlIHdlaXJkIFBCMTAwMCkKKyAqIGhhdmUgYSBmZXcgcmVnaXN0ZXJzIGluIGEgQ1BMRCB3aXRoIHN0YW5kYXJkaXNlZCBsYXlvdXQ7IHRoZXkgbW9zdGx5CisgKiBvbmx5IGRpZmZlciBpbiBiYXNlIGFkZHJlc3MuCisgKiBBbGwgcmVnaXN0ZXJzIGFyZSAxNmJpdHMgd2lkZSB3aXRoIDMyYml0IHNwYWNpbmcuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisKK3N0YXRpYyBzdHJ1Y3QgYmNzcl9yZWcgeworCXZvaWQgX19pb21lbSAqcmFkZHI7CisJc3BpbmxvY2tfdCBsb2NrOworfSBiY3NyX3JlZ3NbQkNTUl9DTlRdOworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpiY3NyX3ZpcnQ7CS8qIEtTRUcxIGFkZHIgb2YgQkNTUiBiYXNlICovCitzdGF0aWMgaW50IGJjc3JfY3NjX2Jhc2U7CS8qIGxpbnV4LWlycSBvZiBmaXJzdCBjYXNjYWRlZCBpcnEgKi8KKwordm9pZCBfX2luaXQgYmNzcl9pbml0KHVuc2lnbmVkIGxvbmcgYmNzcjFfcGh5cywgdW5zaWduZWQgbG9uZyBiY3NyMl9waHlzKQoreworCWludCBpOworCisJYmNzcjFfcGh5cyA9IEtTRUcxQUREUihDUEhZU0FERFIoYmNzcjFfcGh5cykpOworCWJjc3IyX3BoeXMgPSBLU0VHMUFERFIoQ1BIWVNBRERSKGJjc3IyX3BoeXMpKTsKKworCWJjc3JfdmlydCA9ICh2b2lkIF9faW9tZW0gKiliY3NyMV9waHlzOworCisJZm9yIChpID0gMDsgaSA8IEJDU1JfQ05UOyBpKyspIHsKKwkJaWYgKGkgPj0gQkNTUl9IRVhMRURTKQorCQkJYmNzcl9yZWdzW2ldLnJhZGRyID0gKHZvaWQgX19pb21lbSAqKWJjc3IyX3BoeXMgKworCQkJCQkoMHgwNCAqIChpIC0gQkNTUl9IRVhMRURTKSk7CisJCWVsc2UKKwkJCWJjc3JfcmVnc1tpXS5yYWRkciA9ICh2b2lkIF9faW9tZW0gKiliY3NyMV9waHlzICsKKwkJCQkJKDB4MDQgKiBpKTsKKworCQlzcGluX2xvY2tfaW5pdCgmYmNzcl9yZWdzW2ldLmxvY2spOworCX0KK30KKwordW5zaWduZWQgc2hvcnQgYmNzcl9yZWFkKGVudW0gYmNzcl9pZCByZWcpCit7CisJdW5zaWduZWQgc2hvcnQgcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJjc3JfcmVnc1tyZWddLmxvY2ssIGZsYWdzKTsKKwlyID0gX19yYXdfcmVhZHcoYmNzcl9yZWdzW3JlZ10ucmFkZHIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjc3JfcmVnc1tyZWddLmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJjc3JfcmVhZCk7CisKK3ZvaWQgYmNzcl93cml0ZShlbnVtIGJjc3JfaWQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiY3NyX3JlZ3NbcmVnXS5sb2NrLCBmbGFncyk7CisJX19yYXdfd3JpdGV3KHZhbCwgYmNzcl9yZWdzW3JlZ10ucmFkZHIpOworCXdtYigpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjc3JfcmVnc1tyZWddLmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJjc3Jfd3JpdGUpOworCit2b2lkIGJjc3JfbW9kKGVudW0gYmNzcl9pZCByZWcsIHVuc2lnbmVkIHNob3J0IGNsciwgdW5zaWduZWQgc2hvcnQgc2V0KQoreworCXVuc2lnbmVkIHNob3J0IHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiY3NyX3JlZ3NbcmVnXS5sb2NrLCBmbGFncyk7CisJciA9IF9fcmF3X3JlYWR3KGJjc3JfcmVnc1tyZWddLnJhZGRyKTsKKwlyICY9IH5jbHI7CisJciB8PSBzZXQ7CisJX19yYXdfd3JpdGV3KHIsIGJjc3JfcmVnc1tyZWddLnJhZGRyKTsKKwl3bWIoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3NyX3JlZ3NbcmVnXS5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChiY3NyX21vZCk7CisKKy8qCisgKiBEQjEyMDAvUEIxMjAwIENQTEQgSVJRIG11eGVyCisgKi8KK3N0YXRpYyB2b2lkIGJjc3JfY3NjX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkKQoreworCXVuc2lnbmVkIHNob3J0IGJpc3IgPSBfX3Jhd19yZWFkdyhiY3NyX3ZpcnQgKyBCQ1NSX1JFR19JTlRTVEFUKTsKKworCWZvciAoIDsgYmlzcjsgYmlzciAmPSBiaXNyIC0gMSkKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGJjc3JfY3NjX2Jhc2UgKyBfX2ZmcyhiaXNyKSk7Cit9CisKKy8qIE5PVEU6IGJvdGggdGhlIGVuYWJsZSBhbmQgbWFzayBiaXRzIG11c3QgYmUgY2xlYXJlZCwgb3RoZXJ3aXNlIHRoZQorICogQ1BMRCBnZW5lcmF0ZXMgdG9ucyBvZiBzcHVyaW91cyBpbnRlcnJ1cHRzIChhdCBsZWFzdCBvbiBteSBEQjEyMDApLgorICoJLS0gbWxhdQorICovCitzdGF0aWMgdm9pZCBiY3NyX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnFfbnIpCit7CisJdW5zaWduZWQgc2hvcnQgdiA9IDEgPDwgKGlycV9uciAtIGJjc3JfY3NjX2Jhc2UpOworCV9fcmF3X3dyaXRldyh2LCBiY3NyX3ZpcnQgKyBCQ1NSX1JFR19JTlRDTFIpOworCV9fcmF3X3dyaXRldyh2LCBiY3NyX3ZpcnQgKyBCQ1NSX1JFR19NQVNLQ0xSKTsKKwl3bWIoKTsKK30KKworc3RhdGljIHZvaWQgYmNzcl9pcnFfbWFza2Fjayh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCXVuc2lnbmVkIHNob3J0IHYgPSAxIDw8IChpcnFfbnIgLSBiY3NyX2NzY19iYXNlKTsKKwlfX3Jhd193cml0ZXcodiwgYmNzcl92aXJ0ICsgQkNTUl9SRUdfSU5UQ0xSKTsKKwlfX3Jhd193cml0ZXcodiwgYmNzcl92aXJ0ICsgQkNTUl9SRUdfTUFTS0NMUik7CisJX19yYXdfd3JpdGV3KHYsIGJjc3JfdmlydCArIEJDU1JfUkVHX0lOVFNUQVQpOwkvKiBhY2sgKi8KKwl3bWIoKTsKK30KKworc3RhdGljIHZvaWQgYmNzcl9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnFfbnIpCit7CisJdW5zaWduZWQgc2hvcnQgdiA9IDEgPDwgKGlycV9uciAtIGJjc3JfY3NjX2Jhc2UpOworCV9fcmF3X3dyaXRldyh2LCBiY3NyX3ZpcnQgKyBCQ1NSX1JFR19JTlRTRVQpOworCV9fcmF3X3dyaXRldyh2LCBiY3NyX3ZpcnQgKyBCQ1NSX1JFR19NQVNLU0VUKTsKKwl3bWIoKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBiY3NyX2lycV90eXBlID0geworCS5uYW1lCQk9ICJDUExEIiwKKwkubWFzawkJPSBiY3NyX2lycV9tYXNrLAorCS5tYXNrX2Fjawk9IGJjc3JfaXJxX21hc2thY2ssCisJLnVubWFzawkJPSBiY3NyX2lycV91bm1hc2ssCit9OworCit2b2lkIF9faW5pdCBiY3NyX2luaXRfaXJxKGludCBjc2Nfc3RhcnQsIGludCBjc2NfZW5kLCBpbnQgaG9va19pcnEpCit7CisJdW5zaWduZWQgaW50IGlycTsKKworCS8qIG1hc2sgJiBkaXNhYmxlICYgYWNrIGFsbCAqLworCV9fcmF3X3dyaXRldygweGZmZmYsIGJjc3JfdmlydCArIEJDU1JfUkVHX0lOVENMUik7CisJX19yYXdfd3JpdGV3KDB4ZmZmZiwgYmNzcl92aXJ0ICsgQkNTUl9SRUdfTUFTS0NMUik7CisJX19yYXdfd3JpdGV3KDB4ZmZmZiwgYmNzcl92aXJ0ICsgQkNTUl9SRUdfSU5UU1RBVCk7CisJd21iKCk7CisKKwliY3NyX2NzY19iYXNlID0gY3NjX3N0YXJ0OworCisJZm9yIChpcnEgPSBjc2Nfc3RhcnQ7IGlycSA8PSBjc2NfZW5kOyBpcnErKykKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmYmNzcl9pcnFfdHlwZSwKKwkJCWhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOworCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoaG9va19pcnEsIGJjc3JfY3NjX2hhbmRsZXIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjEyMDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4NDBhNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjEyMDAvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLXkgKz0gc2V0dXAubyBwbGF0Zm9ybS5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NiOTVhOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjEyMDAvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDU2MSBAQAorLyoKKyAqIERCQXUxMjAwIGJvYXJkIHBsYXRmb3JtIGRldmljZSByZWdpc3RyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBNYW51ZWwgTGF1c3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9mbGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTEwMF9tbWMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTU1MF9zcGkuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9kYjEyMDAuaD4KKworI2luY2x1ZGUgIi4uL3BsYXRmb3JtLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBkYjEyMDBfc3BpZmxhc2hfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIkRCMTIwMCBTUEkgZmxhc2giLAorCQkub2Zmc2V0CT0gMCwKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgZGIxMjAwX3NwaWZsYXNoX2RhdGEgPSB7CisJLm5hbWUJCT0gInMyNWZsMDAxIiwKKwkucGFydHMJCT0gZGIxMjAwX3NwaWZsYXNoX3BhcnRzLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZGIxMjAwX3NwaWZsYXNoX3BhcnRzKSwKKwkudHlwZQkJPSAibTI1cDEwIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZGIxMjAwX3NwaV9kZXZzW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS8qIFRJIFRNUDEyMUFJREJWUiB0ZW1wIHNlbnNvciAqLworCQkubW9kYWxpYXMJPSAidG1wMTIxIiwKKwkJLm1heF9zcGVlZF9oegk9IDIwMDAwMDAsCisJCS5idXNfbnVtCT0gMCwKKwkJLmNoaXBfc2VsZWN0CT0gMCwKKwkJLm1vZGUJCT0gMCwKKwl9LAorCXsKKwkJLyogU3BhbnNpb24gUzI1RkwwMDFEMEZNQSBTUEkgZmxhc2ggKi8KKwkJLm1vZGFsaWFzCT0gIm0yNXA4MCIsCisJCS5tYXhfc3BlZWRfaHoJPSA1MDAwMDAwMCwKKwkJLmJ1c19udW0JPSAwLAorCQkuY2hpcF9zZWxlY3QJPSAxLAorCQkubW9kZQkJPSAwLAorCQkucGxhdGZvcm1fZGF0YQk9ICZkYjEyMDBfc3BpZmxhc2hfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBkYjEyMDBfaTJjX2RldnNbXSBfX2luaXRkYXRhID0geworCXsKKwkJLyogQVQyNEMwNC0xMCBJMkMgZWVwcm9tICovCisJCUkyQ19CT0FSRF9JTkZPKCIyNGMwNCIsIDB4NTIpLAorCX0sCisJeworCQkvKiBQaGlsaXBzIE5FMTYxOSB0ZW1wL3ZvbHRhZ2Ugc2Vuc29yIChhZG0xMDI1IGRydikgKi8KKwkJSTJDX0JPQVJEX0lORk8oIm5lMTYxOSIsIDB4MmQpLAorCX0sCisJeworCQkvKiBJMlMgYXVkaW8gY29kZWMgV004NzMxICovCisJCUkyQ19CT0FSRF9JTkZPKCJ3bTg3MzEiLCAweDFiKSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGF1MTIwMF9uYW5kX2NtZF9jdHJsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJCSB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9XOworCisJaW9hZGRyICY9IDB4ZmZmZmZmMDA7CisKKwlpZiAoY3RybCAmIE5BTkRfQ0xFKSB7CisJCWlvYWRkciArPSBNRU1fU1ROQU5EX0NNRDsKKwl9IGVsc2UgaWYgKGN0cmwgJiBOQU5EX0FMRSkgeworCQlpb2FkZHIgKz0gTUVNX1NUTkFORF9BRERSOworCX0gZWxzZSB7CisJCS8qIGFzc3VtZSB3ZSB3YW50IHRvIHIvdyByZWFsIGRhdGEgIGJ5IGRlZmF1bHQgKi8KKwkJaW9hZGRyICs9IE1FTV9TVE5BTkRfREFUQTsKKwl9CisJdGhpcy0+SU9fQUREUl9SID0gdGhpcy0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqKWlvYWRkcjsKKwlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpIHsKKwkJX19yYXdfd3JpdGViKGNtZCwgdGhpcy0+SU9fQUREUl9XKTsKKwkJd21iKCk7CisJfQorfQorCitzdGF0aWMgaW50IGF1MTIwMF9uYW5kX2RldmljZV9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoKHZvaWQgX19pb21lbSAqKU1FTV9TVFNUQVQpICYgMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmRiMTIwMF9wYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBkYjEyMDBfbmFuZF9wYXJ0c1tdID0geworCXsKKwkJLm5hbWUJPSAiTkFORCBGUyAwIiwKKwkJLm9mZnNldAk9IDAsCisJCS5zaXplCT0gOCAqIDEwMjQgKiAxMDI0LAorCX0sCisJeworCQkubmFtZQk9ICJOQU5EIEZTIDEiLAorCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX25hbmRfZGF0YSBkYjEyMDBfbmFuZF9wbGF0ZGF0YSA9IHsKKwkuY2hpcCA9IHsKKwkJLm5yX2NoaXBzCT0gMSwKKwkJLmNoaXBfb2Zmc2V0CT0gMCwKKwkJLm5yX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKGRiMTIwMF9uYW5kX3BhcnRzKSwKKwkJLnBhcnRpdGlvbnMJPSBkYjEyMDBfbmFuZF9wYXJ0cywKKwkJLmNoaXBfZGVsYXkJPSAyMCwKKwkJLnBhcnRfcHJvYmVfdHlwZXMgPSBkYjEyMDBfcGFydF9wcm9iZXMsCisJfSwKKwkuY3RybCA9IHsKKwkJLmRldl9yZWFkeQk9IGF1MTIwMF9uYW5kX2RldmljZV9yZWFkeSwKKwkJLmNtZF9jdHJsCT0gYXUxMjAwX25hbmRfY21kX2N0cmwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGIxMjAwX25hbmRfcmVzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBEQjEyMDBfTkFORF9QSFlTX0FERFIsCisJCS5lbmQJPSBEQjEyMDBfTkFORF9QSFlTX0FERFIgKyAweGZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGIxMjAwX25hbmRfZGV2ID0geworCS5uYW1lCQk9ICJnZW5fbmFuZCIsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRiMTIwMF9uYW5kX3JlcyksCisJLnJlc291cmNlCT0gZGIxMjAwX25hbmRfcmVzLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZGIxMjAwX25hbmRfcGxhdGRhdGEsCisJfQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIGRiMTIwMF9ldGhfZGF0YSA9IHsKKwkuZmxhZ3MJPSBTTUM5MVhfTk9XQUlUIHwgU01DOTFYX1VTRV8xNkJJVCwKKwkubGVkYQk9IFJQQ19MRURfMTAwXzEwLAorCS5sZWRiCT0gUlBDX0xFRF9UWF9SWCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGIxMjAwX2V0aF9yZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IERCMTIwMF9FVEhfUEhZU19BRERSLAorCQkuZW5kCT0gREIxMjAwX0VUSF9QSFlTX0FERFIgKyAweGYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBEQjEyMDBfRVRIX0lOVCwKKwkJLmVuZAk9IERCMTIwMF9FVEhfSU5ULAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGIxMjAwX2V0aF9kZXYgPSB7CisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZGIxMjAwX2V0aF9kYXRhLAorCX0sCisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkYjEyMDBfZXRoX3JlcyksCisJLnJlc291cmNlCT0gZGIxMjAwX2V0aF9yZXMsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYjEyMDBfaWRlX3Jlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gREIxMjAwX0lERV9QSFlTX0FERFIsCisJCS5lbmQgCT0gREIxMjAwX0lERV9QSFlTX0FERFIgKyBEQjEyMDBfSURFX1BIWVNfTEVOIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IERCMTIwMF9JREVfSU5ULAorCQkuZW5kCT0gREIxMjAwX0lERV9JTlQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0YXRpYyB1NjQgaWRlX2RtYW1hc2sgPSBETUFfMzJCSVRfTUFTSzsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGIxMjAwX2lkZV9kZXYgPSB7CisJLm5hbWUJCT0gImF1MTIwMC1pZGUiLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayAJCT0gJmlkZV9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfMzJCSVRfTUFTSywKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkYjEyMDBfaWRlX3JlcyksCisJLnJlc291cmNlCT0gZGIxMjAwX2lkZV9yZXMsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGIxMjAwX3J0Y19kZXYgPSB7CisJLm5hbWUJPSAicnRjLWF1MXh4eCIsCisJLmlkCT0gLTEsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU0QgY2FyZGRldGVjdHM6ICB0aGV5J3JlIHN1cHBvc2VkIHRvIGJlIGVkZ2UtdHJpZ2dlcmVkLCBidXQgYWNrCisgKiBkb2Vzbid0IHNlZW0gdG8gd29yayAoQ1BMRCBSZXYgMikuICBJbnN0ZWFkLCB0aGUgc2NyZWFtaW5nIG9uZQorICogaXMgZGlzYWJsZWQgYW5kIGl0cyBjb3VudGVycGFydCBlbmFibGVkLiAgVGhlIDUwMG1zIHRpbWVvdXQgaXMKKyAqIGJlY2F1c2UgdGhlIGNhcmRkZXRlY3QgaXNuJ3QgZGVib3VuY2VkIGluIGhhcmR3YXJlLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZGIxMjAwX21tY19jZChpbnQgaXJxLCB2b2lkICpwdHIpCit7CisJdm9pZCgqbW1jX2NkKShzdHJ1Y3QgbW1jX2hvc3QgKiwgdW5zaWduZWQgbG9uZyk7CisKKwlpZiAoaXJxID09IERCMTIwMF9TRDBfSU5TRVJUX0lOVCkgeworCQlkaXNhYmxlX2lycV9ub3N5bmMoREIxMjAwX1NEMF9JTlNFUlRfSU5UKTsKKwkJZW5hYmxlX2lycShEQjEyMDBfU0QwX0VKRUNUX0lOVCk7CisJfSBlbHNlIHsKKwkJZGlzYWJsZV9pcnFfbm9zeW5jKERCMTIwMF9TRDBfRUpFQ1RfSU5UKTsKKwkJZW5hYmxlX2lycShEQjEyMDBfU0QwX0lOU0VSVF9JTlQpOworCX0KKworCS8qIGxpbmsgYWdhaW5zdCBDT05GSUdfTU1DPW0gKi8KKwltbWNfY2QgPSBzeW1ib2xfZ2V0KG1tY19kZXRlY3RfY2hhbmdlKTsKKwlpZiAobW1jX2NkKSB7CisJCW1tY19jZChwdHIsIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7CisJCXN5bWJvbF9wdXQobW1jX2RldGVjdF9jaGFuZ2UpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBkYjEyMDBfbW1jX2NkX3NldHVwKHZvaWQgKm1tY19ob3N0LCBpbnQgZW4pCit7CisJaW50IHJldDsKKworCWlmIChlbikgeworCQlyZXQgPSByZXF1ZXN0X2lycShEQjEyMDBfU0QwX0lOU0VSVF9JTlQsIGRiMTIwMF9tbWNfY2QsCisJCQkJICBJUlFGX0RJU0FCTEVELCAic2RfaW5zZXJ0IiwgbW1jX2hvc3QpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEoREIxMjAwX1NEMF9FSkVDVF9JTlQsIGRiMTIwMF9tbWNfY2QsCisJCQkJICBJUlFGX0RJU0FCTEVELCAic2RfZWplY3QiLCBtbWNfaG9zdCk7CisJCWlmIChyZXQpIHsKKwkJCWZyZWVfaXJxKERCMTIwMF9TRDBfSU5TRVJUX0lOVCwgbW1jX2hvc3QpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoYmNzcl9yZWFkKEJDU1JfU0lHU1RBVCkgJiBCQ1NSX0lOVF9TRDBJTlNFUlQpCisJCQllbmFibGVfaXJxKERCMTIwMF9TRDBfRUpFQ1RfSU5UKTsKKwkJZWxzZQorCQkJZW5hYmxlX2lycShEQjEyMDBfU0QwX0lOU0VSVF9JTlQpOworCisJfSBlbHNlIHsKKwkJZnJlZV9pcnEoREIxMjAwX1NEMF9JTlNFUlRfSU5ULCBtbWNfaG9zdCk7CisJCWZyZWVfaXJxKERCMTIwMF9TRDBfRUpFQ1RfSU5ULCBtbWNfaG9zdCk7CisJfQorCXJldCA9IDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZGIxMjAwX21tY19zZXRfcG93ZXIodm9pZCAqbW1jX2hvc3QsIGludCBzdGF0ZSkKK3sKKwlpZiAoc3RhdGUpIHsKKwkJYmNzcl9tb2QoQkNTUl9CT0FSRCwgMCwgQkNTUl9CT0FSRF9TRDBQV1IpOworCQltc2xlZXAoNDAwKTsJLyogc3RhYmlsaXphdGlvbiB0aW1lICovCisJfSBlbHNlCisJCWJjc3JfbW9kKEJDU1JfQk9BUkQsIEJDU1JfQk9BUkRfU0QwUFdSLCAwKTsKK30KKworc3RhdGljIGludCBkYjEyMDBfbW1jX2NhcmRfcmVhZG9ubHkodm9pZCAqbW1jX2hvc3QpCit7CisJcmV0dXJuIChiY3NyX3JlYWQoQkNTUl9TVEFUVVMpICYgQkNTUl9TVEFUVVNfU0QwV1ApID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgZGIxMjAwX21tY19jYXJkX2luc2VydGVkKHZvaWQgKm1tY19ob3N0KQoreworCXJldHVybiAoYmNzcl9yZWFkKEJDU1JfU0lHU1RBVCkgJiBCQ1NSX0lOVF9TRDBJTlNFUlQpID8gMSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIGRiMTIwMF9tbWNsZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZCwKKwkJCSAgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlpZiAoYnJpZ2h0bmVzcyAhPSBMRURfT0ZGKQorCQliY3NyX21vZChCQ1NSX0xFRFMsIEJDU1JfTEVEU19MRUQwLCAwKTsKKwllbHNlCisJCWJjc3JfbW9kKEJDU1JfTEVEUywgMCwgQkNTUl9MRURTX0xFRDApOworfQorCitzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiBkYjEyMDBfbW1jX2xlZCA9IHsKKwkuYnJpZ2h0bmVzc19zZXQJPSBkYjEyMDBfbW1jbGVkX3NldCwKK307CisKKy8qIG5lZWRlZCBieSBhcmNoL21pcHMvYWxjaGVteS9jb21tb24vcGxhdGZvcm0uYyAqLworc3RydWN0IGF1MXhtbWNfcGxhdGZvcm1fZGF0YSBhdTF4bW1jX3BsYXRkYXRhW10gPSB7CisJWzBdID0geworCQkuY2Rfc2V0dXAJPSBkYjEyMDBfbW1jX2NkX3NldHVwLAorCQkuc2V0X3Bvd2VyCT0gZGIxMjAwX21tY19zZXRfcG93ZXIsCisJCS5jYXJkX2luc2VydGVkCT0gZGIxMjAwX21tY19jYXJkX2luc2VydGVkLAorCQkuY2FyZF9yZWFkb25seQk9IGRiMTIwMF9tbWNfY2FyZF9yZWFkb25seSwKKwkJLmxlZAkJPSAmZGIxMjAwX21tY19sZWQsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MTIwMF9wc2MwX3Jlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUFNDMF9QSFlTX0FERFIsCisJCS5lbmQJPSBQU0MwX1BIWVNfQUREUiArIDB4MDAwZmZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVTEyMDBfUFNDMF9JTlQsCisJCS5lbmQJPSBBVTEyMDBfUFNDMF9JTlQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBEU0NSX0NNRDBfUFNDMF9UWCwKKwkJLmVuZAk9IERTQ1JfQ01EMF9QU0MwX1RYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0CT0gRFNDUl9DTUQwX1BTQzBfUlgsCisJCS5lbmQJPSBEU0NSX0NNRDBfUFNDMF9SWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRiMTIwMF9pMmNfZGV2ID0geworCS5uYW1lCQk9ICJhdTF4cHNjX3NtYnVzIiwKKwkuaWQJCT0gMCwJLyogYnVzIG51bWJlciAqLworCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdTEyMDBfcHNjMF9yZXMpLAorCS5yZXNvdXJjZQk9IGF1MTIwMF9wc2MwX3JlcywKK307CisKK3N0YXRpYyB2b2lkIGRiMTIwMF9zcGlfY3NfZW4oc3RydWN0IGF1MTU1MF9zcGlfaW5mbyAqc3BpLCBpbnQgY3MsIGludCBwb2wpCit7CisJaWYgKGNzKQorCQliY3NyX21vZChCQ1NSX1JFU0VUUywgMCwgQkNTUl9SRVNFVFNfU1BJU0VMKTsKKwllbHNlCisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19TUElTRUwsIDApOworfQorCitzdGF0aWMgc3RydWN0IGF1MTU1MF9zcGlfaW5mbyBkYjEyMDBfc3BpX3BsYXRkYXRhID0geworCS5tYWluY2xrX2h6CT0gNTAwMDAwMDAsCS8qIFBTQzAgY2xvY2sgKi8KKwkubnVtX2NoaXBzZWxlY3QgPSAyLAorCS5hY3RpdmF0ZV9jcwk9IGRiMTIwMF9zcGlfY3NfZW4sCit9OworCitzdGF0aWMgdTY0IHNwaV9kbWFtYXNrID0gRE1BXzMyQklUX01BU0s7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRiMTIwMF9zcGlfZGV2ID0geworCS5kZXYJPSB7CisJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV8zMkJJVF9NQVNLLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmZGIxMjAwX3NwaV9wbGF0ZGF0YSwKKwl9LAorCS5uYW1lCQk9ICJhdTE1NTAtc3BpIiwKKwkuaWQJCT0gMCwJLyogYnVzIG51bWJlciAqLworCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdTEyMDBfcHNjMF9yZXMpLAorCS5yZXNvdXJjZQk9IGF1MTIwMF9wc2MwX3JlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXUxMjAwX3BzYzFfcmVzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBQU0MxX1BIWVNfQUREUiwKKwkJLmVuZAk9IFBTQzFfUEhZU19BRERSICsgMHgwMDBmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFVMTIwMF9QU0MxX0lOVCwKKwkJLmVuZAk9IEFVMTIwMF9QU0MxX0lOVCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IERTQ1JfQ01EMF9QU0MxX1RYLAorCQkuZW5kCT0gRFNDUl9DTUQwX1BTQzFfVFgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBEU0NSX0NNRDBfUFNDMV9SWCwKKwkJLmVuZAk9IERTQ1JfQ01EMF9QU0MxX1JYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGIxMjAwX2F1ZGlvX2RldiA9IHsKKwkvKiBuYW1lIGFzc2lnbmVkIGxhdGVyIGJhc2VkIG9uIHN3aXRjaCBzZXR0aW5nICovCisJLmlkCQk9IDEsCS8qIFBTQyBJRCAqLworCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdTEyMDBfcHNjMV9yZXMpLAorCS5yZXNvdXJjZQk9IGF1MTIwMF9wc2MxX3JlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkYjEyMDBfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJTlVMTCwJCS8qIFBTQzAsIHNlbGVjdGVkIGJ5IFM2LjggKi8KKwkmZGIxMjAwX2lkZV9kZXYsCisJJmRiMTIwMF9ldGhfZGV2LAorCSZkYjEyMDBfcnRjX2RldiwKKwkmZGIxMjAwX25hbmRfZGV2LAorCSZkYjEyMDBfYXVkaW9fZGV2LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGIxMjAwX2Rldl9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwZmM7CisJdW5zaWduZWQgc2hvcnQgc3c7CisJaW50IHN3YXBwZWQ7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBkYjEyMDBfaTJjX2RldnMsCisJCQkJQVJSQVlfU0laRShkYjEyMDBfaTJjX2RldnMpKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhkYjEyMDBfc3BpX2RldnMsCisJCQkJQVJSQVlfU0laRShkYjEyMDBfaTJjX2RldnMpKTsKKworCS8qIFNXSVRDSEVTOglTNi44IEkyQy9TUEkgc2VsZWN0b3IgIChPRkY9STJDICBPTj1TUEkpCisJICoJCVM2LjcgQUM5Ny9JMlMgc2VsZWN0b3IgKE9GRj1BQzk3IE9OPUkyUykKKwkgKi8KKworCS8qIE5PVEU6IEdQSU8yMTUgY29udHJvbHMgT1RHIFZCVVMgc3VwcGx5LiAgSW4gU1BJIG1vZGUgaG93ZXZlcgorCSAqIHRoaXMgcGluIGlzIGNsYWltZWQgYnkgUFNDMCAodW51c2VkIHRob3VnaCwgYnV0IHBpbm11eCBkb2Vzbid0CisJICogYWxsb3cgdG8gZnJlZSBpdCB3aXRob3V0IGNyaXBwbGluZyB0aGUgU1BJIGludGVyZmFjZSkuCisJICogQXMgYSByZXN1bHQsIGluIFNQSSBtb2RlLCBPVEcgc2ltcGx5IHdvbid0IHdvcmsgKFBTQzAgdXNlcworCSAqIGl0IGFzIGFuIGlucHV0IHBpbiB3aGljaCBpcyBwdWxsZWQgaGlnaCBvbiB0aGUgYm9hcmRzKS4KKwkgKi8KKwlwZmMgPSBfX3Jhd19yZWFkbCgodm9pZCBfX2lvbWVtICopU1lTX1BJTkZVTkMpICYgflNZU19QSU5GVU5DX1AwQTsKKworCS8qIHN3aXRjaCBvZmYgT1RHIFZCVVMgc3VwcGx5ICovCisJZ3Bpb19yZXF1ZXN0KDIxNSwgIm90Zy12YnVzIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIxNSwgMSk7CisKKwlwcmludGsoS0VSTl9JTkZPICJEQjEyMDAgZGV2aWNlIGNvbmZpZ3VyYXRpb246XG4iKTsKKworCXN3ID0gYmNzcl9yZWFkKEJDU1JfU1dJVENIRVMpOworCWlmIChzdyAmIEJDU1JfU1dJVENIRVNfRElQXzgpIHsKKwkJZGIxMjAwX2RldnNbMF0gPSAmZGIxMjAwX2kyY19kZXY7CisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19QU0MwTVVYLCAwKTsKKworCQlwZmMgfD0gKDIgPDwgMTcpOwkvKiBHUElPMiBibG9jayBvd25zIEdQSU8yMTUgKi8KKworCQlwcmludGsoS0VSTl9JTkZPICIgUzYuOCBPRkY6IFBTQzAgbW9kZSBJMkNcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICIgICBPVEcgcG9ydCBWQlVTIHN1cHBseSBhdmFpbGFibGUhXG4iKTsKKwl9IGVsc2UgeworCQlkYjEyMDBfZGV2c1swXSA9ICZkYjEyMDBfc3BpX2RldjsKKwkJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIDAsIEJDU1JfUkVTRVRTX1BTQzBNVVgpOworCisJCXBmYyB8PSAoMSA8PCAxNyk7CS8qIFBTQzAgb3ducyBHUElPMjE1ICovCisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiIFM2LjggT04gOiBQU0MwIG1vZGUgU1BJXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiICAgT1RHIHBvcnQgVkJVUyBzdXBwbHkgZGlzYWJsZWRcbiIpOworCX0KKwlfX3Jhd193cml0ZWwocGZjLCAodm9pZCBfX2lvbWVtICopU1lTX1BJTkZVTkMpOworCXdtYigpOworCisJLyogQXVkaW86IERJUDcgc2VsZWN0cyBJMlMoMCkvQUM5NygxKSwgYnV0IG5lZWQgSTJDIGZvciBJMlMhCisJICogc286IERJUDc9MSB8fCBESVA4PTAgPT4gQUM5NywgRElQNz0wICYmIERJUDg9MSA9PiBJMlMKKwkgKi8KKwlzdyAmPSBCQ1NSX1NXSVRDSEVTX0RJUF84IHwgQkNTUl9TV0lUQ0hFU19ESVBfNzsKKwlpZiAoc3cgPT0gQkNTUl9TV0lUQ0hFU19ESVBfOCkgeworCQliY3NyX21vZChCQ1NSX1JFU0VUUywgMCwgQkNTUl9SRVNFVFNfUFNDMU1VWCk7CisJCWRiMTIwMF9hdWRpb19kZXYubmFtZSA9ICJhdTF4cHNjX2kycyI7CisJCXByaW50ayhLRVJOX0lORk8gIiBTNi43IE9OIDogUFNDMSBtb2RlIEkyU1xuIik7CisJfSBlbHNlIHsKKwkJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIEJDU1JfUkVTRVRTX1BTQzFNVVgsIDApOworCQlkYjEyMDBfYXVkaW9fZGV2Lm5hbWUgPSAiYXUxeHBzY19hYzk3IjsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiIFM2LjcgT0ZGOiBQU0MxIG1vZGUgQUM5N1xuIik7CisJfQorCisJLyogQXVkaW8gUFNDIGNsb2NrIGlzIHN1cHBsaWVkIGV4dGVybmFsbHkuIChGSVhNRTogcGxhdGRhdGEhISkgKi8KKwlfX3Jhd193cml0ZWwoUFNDX1NFTF9DTEtfU0VSQ0xLLAorCQkodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKFBTQzFfUEhZU19BRERSKSArIFBTQ19TRUxfT0ZGU0VUKTsKKwl3bWIoKTsKKworCWRiMXhfcmVnaXN0ZXJfcGNtY2lhX3NvY2tldChQQ01DSUFfQVRUUl9QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDAwNDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDAwNDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDAwMTAwMDAgLSAxLAorCQkJCSAgICBEQjEyMDBfUEMwX0lOVCwKKwkJCQkgICAgREIxMjAwX1BDMF9JTlNFUlRfSU5ULAorCQkJCSAgICAvKkRCMTIwMF9QQzBfU1RTQ0hHX0lOVCovMCwKKwkJCQkgICAgREIxMjAwX1BDMF9FSkVDVF9JTlQsCisJCQkJICAgIDApOworCisJZGIxeF9yZWdpc3Rlcl9wY21jaWFfc29ja2V0KFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDA0MDAwMDAwLAorCQkJCSAgICBQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwNDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDA0MDAwMDAwLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwNDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDA0MDAwMDAwLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwNDAxMDAwMCAtIDEsCisJCQkJICAgIERCMTIwMF9QQzFfSU5ULAorCQkJCSAgICBEQjEyMDBfUEMxX0lOU0VSVF9JTlQsCisJCQkJICAgIC8qREIxMjAwX1BDMV9TVFNDSEdfSU5UKi8wLAorCQkJCSAgICBEQjEyMDBfUEMxX0VKRUNUX0lOVCwKKwkJCQkgICAgMSk7CisKKwlzd2FwcGVkID0gYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSAmIEJDU1JfU1RBVFVTX0RCMTIwMF9TV0FQQk9PVDsKKwlkYjF4X3JlZ2lzdGVyX25vcmZsYXNoKDY0IDw8IDIwLCAyLCBzd2FwcGVkKTsKKworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkYjEyMDBfZGV2cywgQVJSQVlfU0laRShkYjEyMDBfZGV2cykpOworfQorZGV2aWNlX2luaXRjYWxsKGRiMTIwMF9kZXZfaW5pdCk7CisKKy8qIGF1MTIwMGZiIGNhbGxzIHRoZXNlOiBTVEVSQlQgRUlORU4gVFJBR0lTQ0hFTiBUT0QhISEgKi8KK2ludCBib2FyZF9hdTEyMDBmYl9wYW5lbCh2b2lkKQoreworCXJldHVybiAoYmNzcl9yZWFkKEJDU1JfU1dJVENIRVMpID4+IDgpICYgMHgwZjsKK30KKworaW50IGJvYXJkX2F1MTIwMGZiX3BhbmVsX2luaXQodm9pZCkKK3sKKwkvKiBBcHBseSBwb3dlciAqLworCWJjc3JfbW9kKEJDU1JfQk9BUkQsIDAsIEJDU1JfQk9BUkRfTENEVkVFIHwgQkNTUl9CT0FSRF9MQ0RWREQgfAorCQkJCUJDU1JfQk9BUkRfTENEQkwpOworCXJldHVybiAwOworfQorCitpbnQgYm9hcmRfYXUxMjAwZmJfcGFuZWxfc2h1dGRvd24odm9pZCkKK3sKKwkvKiBSZW1vdmUgcG93ZXIgKi8KKwliY3NyX21vZChCQ1NSX0JPQVJELCBCQ1NSX0JPQVJEX0xDRFZFRSB8IEJDU1JfQk9BUkRfTENEVkREIHwKKwkJCSAgICAgQkNTUl9CT0FSRF9MQ0RCTCwgMCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5NTM2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjEyMDAvc2V0dXAuYwpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIEFsY2hlbXkvQU1EL1JNSSBEQjEyMDAgYm9hcmQgc2V0dXAuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG91dGxpbmVkIGluIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHJvb3Qgb2YKKyAqIHRoaXMgc291cmNlIGFyY2hpdmUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9kYjEyMDAuaD4KKworY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCit7CisJcmV0dXJuICJBbGNoZW15IERiMTIwMCI7Cit9CisKK3ZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmcmVxMCwgY2xrc3JjLCBkaXYsIHBmYzsKKwl1bnNpZ25lZCBzaG9ydCB3aG9hbWk7CisKKwliY3NyX2luaXQoREIxMjAwX0JDU1JfUEhZU19BRERSLAorCQkgIERCMTIwMF9CQ1NSX1BIWVNfQUREUiArIERCMTIwMF9CQ1NSX0hFWExFRF9PRlMpOworCisJd2hvYW1pID0gYmNzcl9yZWFkKEJDU1JfV0hPQU1JKTsKKwlwcmludGsoS0VSTl9JTkZPICJBbGNoZW15L0FNRC9STUkgREIxMjAwIEJvYXJkLCBDUExEIFJldiAlZCIKKwkJIiAgQm9hcmQtSUQgJWQgIERhdWdodGVyY2FyZCBJRCAlZFxuIiwKKwkJKHdob2FtaSA+PiA0KSAmIDB4ZiwgKHdob2FtaSA+PiA4KSAmIDB4Ziwgd2hvYW1pICYgMHhmKTsKKworCS8qIFNNQnVzL1NQSSBvbiBQU0MwLCBBdWRpbyBvbiBQU0MxICovCisJcGZjID0gX19yYXdfcmVhZGwoKHZvaWQgX19pb21lbSAqKVNZU19QSU5GVU5DKTsKKwlwZmMgJj0gfihTWVNfUElORlVOQ19QMEEgfCBTWVNfUElORlVOQ19QMEIpOworCXBmYyAmPSB+KFNZU19QSU5GVU5DX1AxQSB8IFNZU19QSU5GVU5DX1AxQiB8IFNZU19QSU5GVU5DX0ZTMyk7CisJcGZjIHw9IFNZU19QSU5GVU5DX1AxQzsJLyogU1BJIGlzIGNvbmZpZ3VyZWQgbGF0ZXIgKi8KKwlfX3Jhd193cml0ZWwocGZjLCAodm9pZCBfX2lvbWVtICopU1lTX1BJTkZVTkMpOworCXdtYigpOworCisJLyogQ2xvY2sgY29uZmlndXJhdGlvbnM6IFBTQzA6IH41ME1IeiB2aWEgQ2xrZ2VuMCwgZGVyaXZlZCBmcm9tCisJICogQ1BVIGNsb2NrOyBhbGwgb3RoZXIgY2xvY2sgZ2VuZXJhdG9ycyBvZmYvdW51c2VkLgorCSAqLworCWRpdiA9IChnZXRfYXUxeDAwX3NwZWVkKCkgKyAyNTAwMDAwMCkgLyA1MDAwMDAwMDsKKwlpZiAoZGl2ICYgMSkKKwkJZGl2Kys7CisJZGl2ID0gKChkaXYgPj4gMSkgLSAxKSAmIDB4ZmY7CisKKwlmcmVxMCA9IGRpdiA8PCBTWVNfRkNfRlJESVYwX0JJVDsKKwlfX3Jhd193cml0ZWwoZnJlcTAsICh2b2lkIF9faW9tZW0gKilTWVNfRlJFUUNUUkwwKTsKKwl3bWIoKTsKKwlmcmVxMCB8PSBTWVNfRkNfRkUwOwkvKiBlbmFibGUgRjAgKi8KKwlfX3Jhd193cml0ZWwoZnJlcTAsICh2b2lkIF9faW9tZW0gKilTWVNfRlJFUUNUUkwwKTsKKwl3bWIoKTsKKworCS8qIHBzYzBfaW50Y2xrIGNvbWVzIDE6MSBmcm9tIEYwICovCisJY2xrc3JjID0gU1lTX0NTX01VWF9GUTAgPDwgU1lTX0NTX01FMF9CSVQ7CisJX19yYXdfd3JpdGVsKGNsa3NyYywgKHZvaWQgX19pb21lbSAqKVNZU19DTEtTUkMpOworCXdtYigpOworfQorCisvKiB1c2UgdGhlIGhleGxlZHMgdG8gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY3B1IGhhcyBlbnRlcmVkCisgKiB3YWl0LCB0aGUgZG90cyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBDUFUgaXMgY3VycmVudGx5IGlkbGUgb3IKKyAqIGFjdGl2ZSAoZG90cyBvZmYgPSBzbGVlcGluZywgZG90cyBvbiA9IHdvcmtpbmcpIGZvciBjYXNlcyB3aGVyZQorICogdGhlIG51bWJlciBkb2Vzbid0IGNoYW5nZSBmb3IgYSBsb25nKGVyKSBwZXJpb2Qgb2YgdGltZS4KKyAqLworc3RhdGljIHZvaWQgZGIxMjAwX3dhaXQodm9pZCkKK3sKKwlfX2FzbV9fKCIJLnNldAlwdXNoCQkJXG4iCisJCSIJLnNldAltaXBzMwkJCVxuIgorCQkiCS5zZXQJbm9yZW9yZGVyCQlcbiIKKwkJIgljYWNoZQkweDE0LCAwKCUwKQkJXG4iCisJCSIJY2FjaGUJMHgxNCwgMzIoJTApCQlcbiIKKwkJIgljYWNoZQkweDE0LCA2NCglMCkJCVxuIgorCQkvKiBkb3RzIG9mZjogd2UncmUgYWJvdXQgdG8gY2FsbCB3YWl0ICovCisJCSIJbHVpCSQyNiwgMHhiOTgwCQlcbiIKKwkJIglvcmkJJDI3LCAkMCwgMwkJXG4iCisJCSIJc2IJJDI3LCAweDE4KCQyNikJCVxuIgorCQkiCXN5bmMJCQkJXG4iCisJCSIJbm9wCQkJCVxuIgorCQkiCXdhaXQJCQkJXG4iCisJCSIJbm9wCQkJCVxuIgorCQkiCW5vcAkJCQlcbiIKKwkJIglub3AJCQkJXG4iCisJCSIJbm9wCQkJCVxuIgorCQkiCW5vcAkJCQlcbiIKKwkJLyogZG90cyBvbjogdGhlcmUncyB3b3JrIHRvIGRvLCBpbmNyZW1lbnQgY250ciAqLworCQkiCWx1aQkkMjYsIDB4Yjk4MAkJXG4iCisJCSIJc2IJJDAsIDB4MTgoJDI2KQkJXG4iCisJCSIJbHVpCSQyNiwgMHhiOWMwCQlcbiIKKwkJIglsYgkkMjcsIDAoJDI2KQkJXG4iCisJCSIJYWRkaXUJJDI3LCAkMjcsIDEJCVxuIgorCQkiCXNiCSQyNywgMCgkMjYpCQlcbiIKKwkJIglzeW5jCQkJCVxuIgorCQkiCS5zZXQJcG9wCQkJXG4iCisJCTogOiAiciIgKGRiMTIwMF93YWl0KSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGRiMTIwMF9hcmNoX2luaXQodm9pZCkKK3sKKwkvKiBHUElPNyBpcyBsb3ctbGV2ZWwgdHJpZ2dlcmVkIENQTEQgY2FzY2FkZSAqLworCXNldF9pcnFfdHlwZShBVTEyMDBfR1BJTzdfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwliY3NyX2luaXRfaXJxKERCMTIwMF9JTlRfQkVHSU4sIERCMTIwMF9JTlRfRU5ELCBBVTEyMDBfR1BJTzdfSU5UKTsKKworCS8qIGRvIG5vdCBhdXRvZW5hYmxlIHRoZXNlOiBDUExEIGhhcyBicm9rZW4gZWRnZSBpbnQgaGFuZGxpbmcsCisJICogYW5kIHRoZSBDRCBoYW5kbGVyIHNldHVwIHJlcXVpcmVzIG1hbnVhbCBlbmFibGluZyB0byB3b3JrCisJICogYXJvdW5kIHRoYXQuCisJICovCisJaXJxX3RvX2Rlc2MoREIxMjAwX1NEMF9JTlNFUlRfSU5UKS0+c3RhdHVzIHw9IElSUV9OT0FVVE9FTjsKKwlpcnFfdG9fZGVzYyhEQjEyMDBfU0QwX0VKRUNUX0lOVCktPnN0YXR1cyB8PSBJUlFfTk9BVVRPRU47CisKKwlpZiAoY3B1X3dhaXQpCisJCWNwdV93YWl0ID0gZGIxMjAwX3dhaXQ7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoZGIxMjAwX2FyY2hfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9NYWtlZmlsZQppbmRleCA0MzIyNDFhLi42MTNjMGMwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvTWFrZWZpbGUKQEAgLTUsNCArNSw0IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgQWxjaGVteSBTZW1pY29uZHVjdG9yIERCQXUxeHgwIGJvYXJkcy4KICMKIAotb2JqLXkgOj0gYm9hcmRfc2V0dXAubyBpcnFtYXAubworb2JqLXkgOj0gYm9hcmRfc2V0dXAubyBwbGF0Zm9ybS5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2JvYXJkX3NldHVwLmMKaW5kZXggZGUzMGQ4ZS4uNTBjOWJlZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvYm9hcmRfc2V0dXAuYwpAQCAtMjksNTggKzI5LDEzOCBAQAogCiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZXRoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2RiMXgwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogCiAjaW5jbHVkZSA8cHJvbS5oPgogCisjaWZkZWYgQ09ORklHX01JUFNfREIxNTAwCitjaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7CisJWzEyXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQSwgMHhmZiwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAxMiAtIEhQVDM3MSAgICovCisJWzEzXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQSwgQVUxNTAwX1BDSV9JTlRCLCBBVTE1MDBfUENJX0lOVEMsIEFVMTUwMF9QQ0lfSU5URCB9LCAvKiBJRFNFTCAxMyAtIFBDSSBzbG90ICovCit9OwogCi1zdGF0aWMgQkNTUiAqIGNvbnN0IGJjc3IgPSAoQkNTUiAqKUJDU1JfS1NFRzFfQUREUjsKKyNlbmRpZgorCisKKyNpZmRlZiBDT05GSUdfTUlQU19EQjE1NTAKK2NoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKKwlbMTFdID0geyAtMSwgQVUxNTUwX1BDSV9JTlRDLCAweGZmLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDExIC0gb24tYm9hcmQgSFBUMzcxICovCisJWzEyXSA9IHsgLTEsIEFVMTU1MF9QQ0lfSU5UQiwgQVUxNTUwX1BDSV9JTlRDLCBBVTE1NTBfUENJX0lOVEQsIEFVMTU1MF9QQ0lfSU5UQSB9LCAvKiBJRFNFTCAxMiAtIFBDSSBzbG90IDIgKGxlZnQpICovCisJWzEzXSA9IHsgLTEsIEFVMTU1MF9QQ0lfSU5UQSwgQVUxNTUwX1BDSV9JTlRCLCBBVTE1NTBfUENJX0lOVEMsIEFVMTU1MF9QQ0lfSU5URCB9LCAvKiBJRFNFTCAxMyAtIFBDSSBzbG90IDEgKHJpZ2h0KSAqLworfTsKKyNlbmRpZgorCisKKyNpZmRlZiBDT05GSUdfTUlQU19CT1NQT1JVUworY2hhciBpcnFfdGFiX2FsY2hlbXlbXVs1XSBfX2luaXRkYXRhID0geworCVsxMV0gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEEsIEFVMTUwMF9QQ0lfSU5UQiwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAxMSAtIG1pbmlQQ0kgICovCisJWzEyXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQSwgMHhmZiwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAxMiAtIFNOMTc0MSAgICovCisJWzEzXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQSwgQVUxNTAwX1BDSV9JTlRCLCBBVTE1MDBfUENJX0lOVEMsIEFVMTUwMF9QQ0lfSU5URCB9LCAvKiBJRFNFTCAxMyAtIFBDSSBzbG90ICovCit9OworCisvKgorICogTWljcmVsL0tlbmRpbiA1IHBvcnQgc3dpdGNoIGF0dGFjaGVkIHRvIE1BQzAsCisgKiBNQUMwIGlzIGFzc29jaWF0ZWQgd2l0aCBQSFkgYWRkcmVzcyA1ICg9PSBXQU4gcG9ydCkKKyAqIE1BQzEgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgUEhZLCBzaW5jZSBpdCdzIGNvbm5lY3RlZCBkaXJlY3RseQorICogdG8gdGhlIHN3aXRjaC4KKyAqIG5vIGludGVycnVwdHMgYXJlIHVzZWQKKyAqLworc3RhdGljIHN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEgZXRoMF9wZGF0YSA9IHsKKwkucGh5X3N0YXRpY19jb25maWcJPSAxLAorCS5waHlfYWRkcgkJPSA1LAorfTsKKworc3RhdGljIHZvaWQgYm9zcG9ydXNfcG93ZXJfb2ZmKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiSXQncyBub3cgc2FmZSB0byB0dXJuIG9mZiBwb3dlclxuIik7CisJd2hpbGUgKDEpCisJCWFzbSB2b2xhdGlsZSAoIi5zZXQgbWlwczMgOyB3YWl0IDsgLnNldCBtaXBzMCIpOworfQogCiBjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfTUlQU19CT1NQT1JVUwogCXJldHVybiAiQWxjaGVteSBCb3Nwb3J1cyBHYXRld2F5IFJlZmVyZW5jZSI7Ci0jZWxzZQotCXJldHVybiAiQWxjaGVteSBEYjF4MDAiOworfQogI2VuZGlmCisKKworI2lmZGVmIENPTkZJR19NSVBTX01JUkFHRQorY2hhciBpcnFfdGFiX2FsY2hlbXlbXVs1XSBfX2luaXRkYXRhID0geworCVsxMV0gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEQsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMTEgLSBTTUkgVkdYICovCisJWzEyXSA9IHsgLTEsIDB4ZmYsIDB4ZmYsIEFVMTUwMF9QQ0lfSU5UQywgMHhmZiB9LCAvKiBJRFNFTCAxMiAtIFBOWDEzMDAgKi8KKwlbMTNdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCBBVTE1MDBfUENJX0lOVEIsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMTMgLSBtaW5pUENJICovCit9OworCitzdGF0aWMgdm9pZCBtaXJhZ2VfcG93ZXJfb2ZmKHZvaWQpCit7CisJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjEwLCAxKTsKIH0KIAotdm9pZCBib2FyZF9yZXNldCh2b2lkKQorY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCiB7Ci0JLyogSGl0IEJDU1IuU1dfUkVTRVRbUkVTRVRdICovCi0JYmNzci0+c3dyZXNldCA9IDB4MDAwMDsKKwlyZXR1cm4gIkFsY2hlbXkgTWlyYWdlIjsKIH0KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0JPU1BPUlVTKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX01JUkFHRSkKK3N0YXRpYyB2b2lkIG1pcHNfc29mdHJlc2V0KHZvaWQpCit7CisJYXNtIHZvbGF0aWxlICgianJcdCUwIiA6IDogInIiKDB4YmZjMDAwMDApKTsKK30KKworI2Vsc2UKKworY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCit7CisJcmV0dXJuICJBbGNoZW15IERiMXgwMCI7Cit9CisjZW5kaWYKKwogCiB2b2lkIF9faW5pdCBib2FyZF9zZXR1cCh2b2lkKQogewotCXUzMiBwaW5fZnVuYyA9IDA7Ci0JY2hhciAqYXJncHRyOworCXVuc2lnbmVkIGxvbmcgYmNzcjEsIGJjc3IyOworCXUzMiBwaW5fZnVuYzsKIAotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCi0JYXJncHRyID0gc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9Iik7Ci0JaWYgKGFyZ3B0ciA9PSBOVUxMKSB7Ci0JCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCQlzdHJjYXQoYXJncHRyLCAiIGNvbnNvbGU9dHR5UzAsMTE1MjAwIik7Ci0JfQorCWJjc3IxID0gREIxMDAwX0JDU1JfUEhZU19BRERSOworCWJjc3IyID0gREIxMDAwX0JDU1JfUEhZU19BRERSICsgREIxMDAwX0JDU1JfSEVYTEVEX09GUzsKKworCXBpbl9mdW5jID0gMDsKKworI2lmZGVmIENPTkZJR19NSVBTX0RCMTAwMAorCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IEF1MTAwMC9EYjEwMDAgQm9hcmRcbiIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFNfREIxNTAwCisJcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQXUxNTAwL0RiMTUwMCBCb2FyZFxuIik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUlQU19EQjExMDAKKwlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBBdTExMDAvRGIxMTAwIEJvYXJkXG4iKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NSVBTX0JPU1BPUlVTCisJYXUxeHh4X292ZXJyaWRlX2V0aF9jZmcoMCwgJmV0aDBfcGRhdGEpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQm9zcG9ydXMgQm9hcmRcbiIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFNfTUlSQUdFCisJcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgTWlyYWdlIEJvYXJkXG4iKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NSVBTX0RCMTU1MAorCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IEF1MTU1MC9EYjE1NTAgQm9hcmRcbiIpOworCisJYmNzcjEgPSBEQjE1NTBfQkNTUl9QSFlTX0FERFI7CisJYmNzcjIgPSBEQjE1NTBfQkNTUl9QSFlTX0FERFIgKyBEQjE1NTBfQkNTUl9IRVhMRURfT0ZTOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfRkJfQVUxMTAwCi0JYXJncHRyID0gc3Ryc3RyKGFyZ3B0ciwgInZpZGVvPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJLyogZGVmYXVsdCBwYW5lbCAqLwotCQkvKnN0cmNhdChhcmdwdHIsICIgdmlkZW89YXUxMTAwZmI6cGFuZWw6U2hhcnBfMzIweDI0MF8xNiIpOyovCi0JfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TT1VORF9BVTFYMDApICYmICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCS8qIGF1MTAwMCBkb2VzIG5vdCBzdXBwb3J0IHZyYSwgYXUxNTAwIGFuZCBhdTExMDAgZG8gKi8KLQlzdHJjYXQoYXJncHRyLCAiIGF1MTAwMF9hdWRpbz12cmEiKTsKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLSNlbmRpZgorCS8qIGluaXRpYWxpemUgYm9hcmQgcmVnaXN0ZXIgc3BhY2UgKi8KKwliY3NyX2luaXQoYmNzcjEsIGJjc3IyKTsKIAogCS8qIE5vdCB2YWxpZCBmb3IgQXUxNTUwICovCiAjaWYgZGVmaW5lZChDT05GSUdfSVJEQSkgJiYgXApAQCAtODksMTEgKzE2OSwxMCBAQAogCXBpbl9mdW5jID0gYXVfcmVhZGwoU1lTX1BJTkZVTkMpIHwgU1lTX1BGX0lSRjsKIAlhdV93cml0ZWwocGluX2Z1bmMsIFNZU19QSU5GVU5DKTsKIAkvKiBQb3dlciBvZmYgdW50aWwgdGhlIGRyaXZlciBpcyBpbiB1c2UgKi8KLQliY3NyLT5yZXNldHMgJj0gfkJDU1JfUkVTRVRTX0lSREFfTU9ERV9NQVNLOwotCWJjc3ItPnJlc2V0cyB8PSAgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX09GRjsKLQlhdV9zeW5jKCk7CisJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9NQVNLLAorCQkJCUJDU1JfUkVTRVRTX0lSREFfTU9ERV9PRkYpOwogI2VuZGlmCi0JYmNzci0+cGNtY2lhID0gMHgwMDAwOyAvKiB0dXJuIG9mZiBQQ01DSUEgcG93ZXIgKi8KKwliY3NyX3dyaXRlKEJDU1JfUENNQ0lBLCAwKTsJLyogdHVybiBvZmYgUENNQ0lBIHBvd2VyICovCiAKIAkvKiBFbmFibGUgR1BJT1szMTowXSBpbnB1dHMgKi8KIAlhbGNoZW15X2dwaW8xX2lucHV0X2VuYWJsZSgpOwpAQCAtMTIwLDI2ICsxOTksNTMgQEAKIAkgKiBiZSBwYXJ0IG9mIHRoZSBhdWRpbyBkcml2ZXIuCiAJICovCiAJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjA5LCAxKTsKKworCXBtX3Bvd2VyX29mZiA9IG1pcmFnZV9wb3dlcl9vZmY7CisJX21hY2hpbmVfaGFsdCA9IG1pcmFnZV9wb3dlcl9vZmY7CisJX21hY2hpbmVfcmVzdGFydCA9ICh2b2lkKCopKGNoYXIgKikpbWlwc19zb2Z0cmVzZXQ7CiAjZW5kaWYKIAotCWF1X3N5bmMoKTsKLQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTAwMAotCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IEF1MTAwMC9EYjEwMDAgQm9hcmRcbiIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01JUFNfREIxNTAwCi0JcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQXUxNTAwL0RiMTUwMCBCb2FyZFxuIik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUlQU19EQjExMDAKLQlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBBdTExMDAvRGIxMTAwIEJvYXJkXG4iKTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19NSVBTX0JPU1BPUlVTCi0JcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQm9zcG9ydXMgQm9hcmRcbiIpOworCXBtX3Bvd2VyX29mZiA9IGJvc3BvcnVzX3Bvd2VyX29mZjsKKwlfbWFjaGluZV9oYWx0ID0gYm9zcG9ydXNfcG93ZXJfb2ZmOworCV9tYWNoaW5lX3Jlc3RhcnQgPSAodm9pZCgqKShjaGFyICopKW1pcHNfc29mdHJlc2V0OwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX01JUFNfTUlSQUdFCi0JcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgTWlyYWdlIEJvYXJkXG4iKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NSVBTX0RCMTU1MAotCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IEF1MTU1MC9EYjE1NTAgQm9hcmRcbiIpOwotI2VuZGlmCisJYXVfc3luYygpOwogfQorCitzdGF0aWMgaW50IF9faW5pdCBkYjF4MDBfaW5pdF9pcnEodm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01JUkFHRSkKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU83X0lOVCwgSVJRRl9UUklHR0VSX1JJU0lORyk7IC8qIFRTIHBlbmRvd24gKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfREIxNTUwKQorCXNldF9pcnFfdHlwZShBVTE1NTBfR1BJTzBfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgIC8qIENEMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTUwX0dQSU8xX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7ICAvKiBDRDEjICovCisJc2V0X2lycV90eXBlKEFVMTU1MF9HUElPM19JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAgLyogQ0FSRDAjICovCisJc2V0X2lycV90eXBlKEFVMTU1MF9HUElPNV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAgLyogQ0FSRDEjICovCisJc2V0X2lycV90eXBlKEFVMTU1MF9HUElPMjFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogU1RTQ0hHMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTUwX0dQSU8yMl9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBTVFNDSEcxIyAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjE1MDApCisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDRDAjICovCisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPM19JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDRDEjICovCisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMl9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDQVJEMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU81X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENBUkQxIyAqLworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogU1RTQ0hHMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU80X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIFNUU0NIRzEjICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTEwMCkKKwlzZXRfaXJxX3R5cGUoQVUxMTAwX0dQSU8wX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENEMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMTAwX0dQSU8zX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENEMSMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMTAwX0dQSU8yX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENBUkQwIyAqLworCXNldF9pcnFfdHlwZShBVTExMDBfR1BJTzVfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0FSRDEjICovCisJc2V0X2lycV90eXBlKEFVMTEwMF9HUElPMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBTVFNDSEcwIyAqLworCXNldF9pcnFfdHlwZShBVTExMDBfR1BJTzRfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogU1RTQ0hHMSMgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMDAwKQorCXNldF9pcnFfdHlwZShBVTEwMDBfR1BJTzBfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0QwIyAqLworCXNldF9pcnFfdHlwZShBVTEwMDBfR1BJTzNfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0QxIyAqLworCXNldF9pcnFfdHlwZShBVTEwMDBfR1BJTzJfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0FSRDAjICovCisJc2V0X2lycV90eXBlKEFVMTAwMF9HUElPNV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDQVJEMSMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMDAwX0dQSU8xX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIFNUU0NIRzAjICovCisJc2V0X2lycV90eXBlKEFVMTAwMF9HUElPNF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBTVFNDSEcxIyAqLworI2VuZGlmCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGRiMXgwMF9pbml0X2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2lycW1hcC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9pcnFtYXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIwOTAyNS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2lycW1hcC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICoJQXUxeHh4IGlycSBtYXAgdGFibGUKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMyBFbWJlZGRlZCBFZGdlLCBMTEMKLSAqCQlkYW5AZW1iZWRkZWRlZGdlLmNvbQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUJIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mCSB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQlMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRAkgIGBgQVMJSVMnJyBBTkQgICBBTlkJRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywJICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8JRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUJIExJQUJMRSBGT1IgQU5ZCSAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRAkgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUwlPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwJT1IgUFJPRklUUzsgT1IJQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgkgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotCi0jaWZkZWYgQ09ORklHX01JUFNfREIxNTAwCi1jaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7Ci0JWzEyXSA9IHsgLTEsIElOVEEsIElOVFgsIElOVFgsIElOVFggfSwgLyogSURTRUwgMTIgLSBIUFQzNzEgICAqLwotCVsxM10gPSB7IC0xLCBJTlRBLCBJTlRCLCBJTlRDLCBJTlREIH0sIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgKi8KLX07Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX0JPU1BPUlVTCi1jaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7Ci0JWzExXSA9IHsgLTEsIElOVEEsIElOVEIsIElOVFgsIElOVFggfSwgLyogSURTRUwgMTEgLSBtaW5pUENJICAqLwotCVsxMl0gPSB7IC0xLCBJTlRBLCBJTlRYLCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDEyIC0gU04xNzQxICAgKi8KLQlbMTNdID0geyAtMSwgSU5UQSwgSU5UQiwgSU5UQywgSU5URCB9LCAvKiBJRFNFTCAxMyAtIFBDSSBzbG90ICovCi19OwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19NSVJBR0UKLWNoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKLQlbMTFdID0geyAtMSwgSU5URCwgSU5UWCwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAxMSAtIFNNSSBWR1ggKi8KLQlbMTJdID0geyAtMSwgSU5UWCwgSU5UWCwgSU5UQywgSU5UWCB9LCAvKiBJRFNFTCAxMiAtIFBOWDEzMDAgKi8KLQlbMTNdID0geyAtMSwgSU5UQSwgSU5UQiwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAxMyAtIG1pbmlQQ0kgKi8KLX07Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTU1MAotY2hhciBpcnFfdGFiX2FsY2hlbXlbXVs1XSBfX2luaXRkYXRhID0gewotCVsxMV0gPSB7IC0xLCBJTlRDLCBJTlRYLCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDExIC0gb24tYm9hcmQgSFBUMzcxICovCi0JWzEyXSA9IHsgLTEsIElOVEIsIElOVEMsIElOVEQsIElOVEEgfSwgLyogSURTRUwgMTIgLSBQQ0kgc2xvdCAyIChsZWZ0KSAqLwotCVsxM10gPSB7IC0xLCBJTlRBLCBJTlRCLCBJTlRDLCBJTlREIH0sIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgMSAocmlnaHQpICovCi19OwotI2VuZGlmCi0KLQotc3RydWN0IGF1MXh4eF9pcnFtYXAgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewotCi0jaWZuZGVmIENPTkZJR19NSVBTX01JUkFHRQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTU1MAotCXsgQVUxMDAwX0dQSU9fMywgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCAwIElSUSMgKi8KLQl7IEFVMTAwMF9HUElPXzUsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwgLyogUENNQ0lBIENhcmQgMSBJUlEjICovCi0jZWxzZQotCXsgQVUxMDAwX0dQSU9fMCwgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCAwIEZ1bGx5X0ludGVydGVkIyAqLwotCXsgQVUxMDAwX0dQSU9fMSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCAwIFNUU0NIRyMgKi8KLQl7IEFVMTAwMF9HUElPXzIsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwgLyogUENNQ0lBIENhcmQgMCBJUlEjICovCi0KLQl7IEFVMTAwMF9HUElPXzMsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwgLyogUENNQ0lBIENhcmQgMSBGdWxseV9JbnRlcnRlZCMgKi8KLQl7IEFVMTAwMF9HUElPXzQsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwgLyogUENNQ0lBIENhcmQgMSBTVFNDSEcjICovCi0JeyBBVTEwMDBfR1BJT181LCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIFBDTUNJQSBDYXJkIDEgSVJRIyAqLwotI2VuZGlmCi0jZWxzZQotCXsgQVUxMDAwX0dQSU9fNywgSVJRRl9UUklHR0VSX1JJU0lORywgMCB9LCAvKiB0b3VjaHNjcmVlbiBwZW4gZG93biAqLwotI2VuZGlmCi0KLX07Ci0KLXZvaWQgX19pbml0IGJvYXJkX2luaXRfaXJxKHZvaWQpCi17Ci0JYXUxeHh4X3NldHVwX2lycW1hcChhdTF4eHhfaXJxX21hcCwgQVJSQVlfU0laRShhdTF4eHhfaXJxX21hcCkpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OGQ1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL3BsYXRmb3JtLmMKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBEQkF1MXh4eCBib2FyZCBwbGF0Zm9ybSBkZXZpY2UgcmVnaXN0cmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hbnVlbCBMYXVzcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHguaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorI2luY2x1ZGUgIi4uL3BsYXRmb3JtLmgiCisKKy8qIERCMXh4eCBQQ01DSUEgaW50ZXJydXB0IHNvdXJjZXM6CisgKiBDRDAvMSAJR1BJTzAvMworICogU1RTQ0hHMC8xCUdQSU8xLzQKKyAqIENBUkQwLzEJR1BJTzIvNQorICogRGIxNTUwOgkwLzEsIDIxLzIyLCAzLzUKKyAqLworCisjZGVmaW5lIERCMVhYWF9IQVNfUENNQ0lBCisjZGVmaW5lIEZfU1dBUFBFRCAoYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSAmIEJDU1JfU1RBVFVTX0RCMTAwMF9TV0FQQk9PVCkKKworI2lmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMDAwKQorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NEMAlBVTEwMDBfR1BJTzBfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfU1RTQ0hHMAlBVTEwMDBfR1BJTzFfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0FSRDAJQVUxMDAwX0dQSU8yX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NEMQlBVTEwMDBfR1BJTzNfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfU1RTQ0hHMQlBVTEwMDBfR1BJTzRfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0FSRDEJQVUxMDAwX0dQSU81X0lOVAorI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFCTB4MDIwMDAwMDAgLyogMzJNQiAqLworI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSAk0IC8qIDMyLWJpdHMgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMTAwKQorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NEMAlBVTExMDBfR1BJTzBfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfU1RTQ0hHMAlBVTExMDBfR1BJTzFfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0FSRDAJQVUxMTAwX0dQSU8yX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NEMQlBVTExMDBfR1BJTzNfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfU1RTQ0hHMQlBVTExMDBfR1BJTzRfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0FSRDEJQVUxMTAwX0dQSU81X0lOVAorI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFCTB4MDIwMDAwMDAgLyogMzJNQiAqLworI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSAk0IC8qIDMyLWJpdHMgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfREIxNTAwKQorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NEMAlBVTE1MDBfR1BJTzBfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfU1RTQ0hHMAlBVTE1MDBfR1BJTzFfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0FSRDAJQVUxNTAwX0dQSU8yX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NEMQlBVTE1MDBfR1BJTzNfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfU1RTQ0hHMQlBVTE1MDBfR1BJTzRfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0FSRDEJQVUxNTAwX0dQSU81X0lOVAorI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFCTB4MDIwMDAwMDAgLyogMzJNQiAqLworI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSAk0IC8qIDMyLWJpdHMgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfREIxNTUwKQorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NEMAlBVTE1NTBfR1BJTzBfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfU1RTQ0hHMAlBVTE1NTBfR1BJTzIxX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NBUkQwCUFVMTU1MF9HUElPM19JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DRDEJQVUxNTUwX0dQSU8xX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX1NUU0NIRzEJQVUxNTUwX0dQSU8yMl9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DQVJEMQlBVTE1NTBfR1BJTzVfSU5UCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUJMHgwODAwMDAwMCAvKiAxMjhNQiAqLworI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSAk0IC8qIDMyLWJpdHMgKi8KKyNlbHNlCisvKiBvdGhlciBib2FyZDogbm8gUENNQ0lBICovCisjdW5kZWYgREIxWFhYX0hBU19QQ01DSUEKKyN1bmRlZiBGX1NXQVBQRUQKKyNkZWZpbmUgRl9TV0FQUEVEIDAKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0JPU1BPUlVTKQorI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFCTB4MDEwMDAwMDAgLyogMTZNQiAqLworI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSAkyIC8qIDE2LWJpdHMgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfTUlSQUdFKQorI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFCTB4MDQwMDAwMDAgLyogNjRNQiAqLworI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSAk0IC8qIDMyLWJpdHMgKi8KKyNlbmRpZgorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IGRiMXh4eF9kZXZfaW5pdCh2b2lkKQoreworI2lmZGVmIERCMVhYWF9IQVNfUENNQ0lBCisJZGIxeF9yZWdpc3Rlcl9wY21jaWFfc29ja2V0KFBDTUNJQV9BVFRSX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDA0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDA0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwMDAxMDAwMCAtIDEsCisJCQkJICAgIERCMVhYWF9QQ01DSUFfQ0FSRDAsCisJCQkJICAgIERCMVhYWF9QQ01DSUFfQ0QwLAorCQkJCSAgICAvKkRCMVhYWF9QQ01DSUFfU1RTQ0hHMCovMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7CisKKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDQwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDA0NDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDQwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDA0NDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDQwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDA0MDEwMDAwIC0gMSwKKwkJCQkgICAgREIxWFhYX1BDTUNJQV9DQVJEMSwKKwkJCQkgICAgREIxWFhYX1BDTUNJQV9DRDEsCisJCQkJICAgIC8qREIxWFhYX1BDTUNJQV9TVFNDSEcxKi8wLAorCQkJCSAgICAwLAorCQkJCSAgICAxKTsKKyNlbmRpZgorCWRiMXhfcmVnaXN0ZXJfbm9yZmxhc2goQk9BUkRfRkxBU0hfU0laRSwgQk9BUkRfRkxBU0hfV0lEVEgsIEZfU1dBUFBFRCk7CisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoZGIxeHh4X2Rldl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEwMDAvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEwMDAvYm9hcmRfc2V0dXAuYwppbmRleCBjZDI3MzU0Li5iNTMxMWQ4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMDAwL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTAwMC9ib2FyZF9zZXR1cC5jCkBAIC0zMSwxMSArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXBiMXgwMC9wYjEwMDAuaD4KICNpbmNsdWRlIDxwcm9tLmg+CiAKLQotc3RydWN0IGF1MXh4eF9pcnFtYXAgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewotCXsgQVUxMDAwX0dQSU9fMTUsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLX07Ci0KKyNpbmNsdWRlICIuLi9wbGF0Zm9ybS5oIgogCiBjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKIHsKQEAgLTQ2LDI1ICs0MiwxNCBAQAogewogfQogCi12b2lkIF9faW5pdCBib2FyZF9pbml0X2lycSh2b2lkKQotewotCWF1MXh4eF9zZXR1cF9pcnFtYXAoYXUxeHh4X2lycV9tYXAsIEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApKTsKLX0KLQogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKIAl1MzIgcGluX2Z1bmMsIHN0YXRpY19jZmcwOwogCXUzMiBzeXNfZnJlcWN0cmwsIHN5c19jbGtzcmM7CiAJdTMyIHByaWQgPSByZWFkX2MwX3ByaWQoKTsKIAotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCi0JY2hhciAqYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JYXJncHRyID0gc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9Iik7Ci0JaWYgKGFyZ3B0ciA9PSBOVUxMKSB7Ci0JCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCQlzdHJjYXQoYXJncHRyLCAiIGNvbnNvbGU9dHR5UzAsMTE1MjAwIik7Ci0JfQotI2VuZGlmCisJc3lzX2ZyZXFjdHJsID0gMDsKKwlzeXNfY2xrc3JjID0gMDsKIAogCS8qIFNldCBBVVggY2xvY2sgdG8gMTIgTUh6ICogOCA9IDk2IE1IeiAqLwogCWF1X3dyaXRlbCg4LCBTWVNfQVVYUExMKTsKQEAgLTE5MywzICsxNzgsMTYgQEAKIAkJYnJlYWs7CiAJfQogfQorCitzdGF0aWMgaW50IF9faW5pdCBwYjEwMDBfaW5pdF9pcnEodm9pZCkKK3sKKwlzZXRfaXJxX3R5cGUoQVUxMDAwX0dQSU8xNV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChwYjEwMDBfaW5pdF9pcnEpOworCitzdGF0aWMgaW50IF9faW5pdCBwYjEwMDBfZGV2aWNlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZGIxeF9yZWdpc3Rlcl9ub3JmbGFzaCg4ICogMTAyNCAqIDEwMjQsIDQsIDApOworfQorZGV2aWNlX2luaXRjYWxsKHBiMTAwMF9kZXZpY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTEwMC9NYWtlZmlsZQppbmRleCBjNTg2ZGQ3Li43ZTM3NTZjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjExMDAvTWFrZWZpbGUKQEAgLTUsNCArNSw0IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgQWxjaGVteSBTZW1pY29uZHVjdG9yIFBiMTEwMCBib2FyZC4KICMKIAotb2JqLXkgOj0gYm9hcmRfc2V0dXAubworb2JqLXkgOj0gYm9hcmRfc2V0dXAubyBwbGF0Zm9ybS5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL2JvYXJkX3NldHVwLmMKaW5kZXggNjEyNjMwOC4uYzdiNGNhYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTEwMC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjExMDAvYm9hcmRfc2V0dXAuYwpAQCAtMjksMTkgKzI5LDExIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtcGIxeDAwL3BiMTEwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CiAKICNpbmNsdWRlIDxwcm9tLmg+CiAKIAotc3RydWN0IGF1MXh4eF9pcnFtYXAgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewotCXsgQVUxMDAwX0dQSU9fOSwgIElSUUZfVFJJR0dFUl9MT1csIDAgfSwgLyogUENNQ0lBIENhcmQgRnVsbHlfSW5zZXJ0ZWQjICovCi0JeyBBVTEwMDBfR1BJT18xMCwgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCBTVFNDSEcjICovCi0JeyBBVTEwMDBfR1BJT18xMSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCBJUlEjICovCi0JeyBBVTEwMDBfR1BJT18xMywgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBEQ19JUlEjICovCi19OwotCi0KIGNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQogewogCXJldHVybiAiQWxjaGVteSBQYjExMDAiOwpAQCAtNDksNDMgKzQxLDE1IEBACiAKIHZvaWQgYm9hcmRfcmVzZXQodm9pZCkKIHsKLQkvKiBIaXQgQkNTUi5SU1RfVkRESVtTT0ZUX1JFU0VUXSAqLwotCWF1X3dyaXRlbCgweDAwMDAwMDAwLCBQQjExMDBfUlNUX1ZEREkpOwotfQotCi12b2lkIF9faW5pdCBib2FyZF9pbml0X2lycSh2b2lkKQotewotCWF1MXh4eF9zZXR1cF9pcnFtYXAoYXUxeHh4X2lycV9tYXAsIEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApKTsKKwliY3NyX3dyaXRlKEJDU1JfU1lTVEVNLCAwKTsKIH0KIAogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKIAl2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICopMHhhYzAwMDAwMFVMOwotCWNoYXIgKmFyZ3B0cjsKIAotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCi0JYXJncHRyID0gc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9Iik7Ci0JaWYgKGFyZ3B0ciA9PSBOVUxMKSB7Ci0JCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCQlzdHJjYXQoYXJncHRyLCAiIGNvbnNvbGU9dHR5UzAsMTE1MjAwIik7Ci0JfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfRkJfQVUxMTAwCi0JYXJncHRyID0gc3Ryc3RyKGFyZ3B0ciwgInZpZGVvPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJLyogZGVmYXVsdCBwYW5lbCAqLwotCQkvKnN0cmNhdChhcmdwdHIsICIgdmlkZW89YXUxMTAwZmI6cGFuZWw6U2hhcnBfMzIweDI0MF8xNiIpOyovCi0JfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TT1VORF9BVTFYMDApICYmICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCS8qIGF1MTAwMCBkb2VzIG5vdCBzdXBwb3J0IHZyYSwgYXUxNTAwIGFuZCBhdTExMDAgZG8gKi8KLQlzdHJjYXQoYXJncHRyLCAiIGF1MTAwMF9hdWRpbz12cmEiKTsKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLSNlbmRpZgorCWJjc3JfaW5pdChEQjEwMDBfQkNTUl9QSFlTX0FERFIsCisJCSAgREIxMDAwX0JDU1JfUEhZU19BRERSICsgREIxMDAwX0JDU1JfSEVYTEVEX09GUyk7CiAKIAkvKiBTZXQgQVVYIGNsb2NrIHRvIDEyIE1IeiAqIDggPSA5NiBNSHogKi8KIAlhdV93cml0ZWwoOCwgU1lTX0FVWFBMTCk7CkBAIC0xNTUsMyArMTE5LDE0IEBACiAJCWF1X3N5bmMoKTsKIAl9CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IHBiMTEwMF9pbml0X2lycSh2b2lkKQoreworCXNldF9pcnFfdHlwZShBVTExMDBfR1BJTzlfSU5ULCAgSVJRRl9UUklHR0VSX0xPVyk7IC8qIFBDQ0QjICovCisJc2V0X2lycV90eXBlKEFVMTEwMF9HUElPMTBfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogUENTVFNDSEcjICovCisJc2V0X2lycV90eXBlKEFVMTEwMF9HUElPMTFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogUENDYXJkIyAqLworCXNldF9pcnFfdHlwZShBVTExMDBfR1BJTzEzX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIERDX0lSUSMgKi8KKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChwYjExMDBfaW5pdF9pcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTEwMC9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTEwMC9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjOGRjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL3BsYXRmb3JtLmMKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIFBiMTEwMCBib2FyZCBwbGF0Zm9ybSBkZXZpY2UgcmVnaXN0cmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hbnVlbCBMYXVzcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorCisjaW5jbHVkZSAiLi4vcGxhdGZvcm0uaCIKKworc3RhdGljIGludCBfX2luaXQgcGIxMTAwX2Rldl9pbml0KHZvaWQpCit7CisJaW50IHN3YXBwZWQ7CisKKwkvKiBQQ01DSUEuIHNpbmdsZSBzb2NrZXQsIGlkZW50aWNhbCB0byBQYjE1MDAgKi8KKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDAwMDEwMDAwIC0gMSwKKwkJCQkgICAgQVUxMTAwX0dQSU8xMV9JTlQsCSAvKiBjYXJkICovCisJCQkJICAgIEFVMTEwMF9HUElPOV9JTlQsCSAvKiBpbnNlcnQgKi8KKwkJCQkgICAgLypBVTExMDBfR1BJTzEwX0lOVCovMCwgLyogc3RzY2hnICovCisJCQkJICAgIDAsCQkJIC8qIGVqZWN0ICovCisJCQkJICAgIDApOwkJCSAvKiBpZCAqLworCisJc3dhcHBlZCA9IGJjc3JfcmVhZChCQ1NSX1NUQVRVUykgJiAgQkNTUl9TVEFUVVNfREIxMDAwX1NXQVBCT09UOworCWRiMXhfcmVnaXN0ZXJfbm9yZmxhc2goNjQgKiAxMDI0ICogMTAyNCwgNCwgc3dhcHBlZCk7CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChwYjExMDBfZGV2X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvTWFrZWZpbGUKaW5kZXggYzhjM2E5OS4uMmVhOWIwMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL01ha2VmaWxlCkBAIC0yLDYgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIEFsY2hlbXkgU2VtaWNvbmR1Y3RvciBQYjEyMDAvREJBdTEyMDAgYm9hcmRzLgogIwogCi1vYmoteSA6PSBib2FyZF9zZXR1cC5vIGlycW1hcC5vIHBsYXRmb3JtLm8KK29iai15IDo9IGJvYXJkX3NldHVwLm8gcGxhdGZvcm0ubwogCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9ib2FyZF9zZXR1cC5jCmluZGV4IDk0ZTZiN2UuLjMxODQwNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL2JvYXJkX3NldHVwLmMKQEAgLTI1LDExICsyNSwyMyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAotI2luY2x1ZGUgPHByb20uaD4KLSNpbmNsdWRlIDxhdTF4eHguaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KIAorI2lmZGVmIENPTkZJR19NSVBTX1BCMTIwMAorI2luY2x1ZGUgPGFzbS9tYWNoLXBiMXgwMC9wYjEyMDAuaD4KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01JUFNfREIxMjAwCisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2RiMTIwMC5oPgorI2RlZmluZSBQQjEyMDBfSU5UX0JFR0lOIERCMTIwMF9JTlRfQkVHSU4KKyNkZWZpbmUgUEIxMjAwX0lOVF9FTkQgREIxMjAwX0lOVF9FTkQKKyNlbmRpZgorCisjaW5jbHVkZSA8cHJvbS5oPgogCiBjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKIHsKQEAgLTM4LDI1ICs1MCwxNSBAQAogCiB2b2lkIGJvYXJkX3Jlc2V0KHZvaWQpCiB7Ci0JYmNzci0+cmVzZXRzID0gMDsKLQliY3NyLT5zeXN0ZW0gPSAwOworCWJjc3Jfd3JpdGUoQkNTUl9SRVNFVFMsIDApOworCWJjc3Jfd3JpdGUoQkNTUl9TWVNURU0sIDApOwogfQogCiB2b2lkIF9faW5pdCBib2FyZF9zZXR1cCh2b2lkKQogewotCWNoYXIgKmFyZ3B0cjsKLQotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCi0JYXJncHRyID0gc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9Iik7Ci0JaWYgKGFyZ3B0ciA9PSBOVUxMKSB7Ci0JCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCQlzdHJjYXQoYXJncHRyLCAiIGNvbnNvbGU9dHR5UzAsMTE1MjAwIik7Ci0JfQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0ZCX0FVMTIwMAotCXN0cmNhdChhcmdwdHIsICIgdmlkZW89YXUxMjAwZmI6cGFuZWw6YnMiKTsKLSNlbmRpZgorCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IFBiMTIwMCBCb2FyZFxuIik7CisJYmNzcl9pbml0KFBCMTIwMF9CQ1NSX1BIWVNfQUREUiwKKwkJICBQQjEyMDBfQkNTUl9QSFlTX0FERFIgKyBQQjEyMDBfQkNTUl9IRVhMRURfT0ZTKTsKIAogI2lmIDAKIAl7CkBAIC04Miw3ICs4NCw3IEBACiAJCXUzMiBwaW5fZnVuYzsKIAogCQkvKiBTZWxlY3QgU01CdXMgaW4gQ1BMRCAqLwotCQliY3NyLT5yZXNldHMgJj0gfkJDU1JfUkVTRVRTX1BDUzBNVVg7CisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19QU0MwTVVYLCAwKTsKIAogCQlwaW5fZnVuYyA9IGF1X3JlYWRsKFNZU19QSU5GVU5DKTsKIAkJYXVfc3luYygpOwpAQCAtMTE2LDM4ICsxMTgsNTQgQEAKIAogCS8qCiAJICogVGhlIFBiMTIwMCBkZXZlbG9wbWVudCBib2FyZCB1c2VzIGV4dGVybmFsIE1VWCBmb3IgUFNDMCB0bwotCSAqIHN1cHBvcnQgU01CL1NQSS4gYmNzci0+cmVzZXRzIGJpdCAxMjogMD1TTUIgMT1TUEkKKwkgKiBzdXBwb3J0IFNNQi9TUEkuIGJjc3JfcmVzZXRzIGJpdCAxMjogMD1TTUIgMT1TUEkKIAkgKi8KICNpZmRlZiBDT05GSUdfSTJDX0FVMTU1MAotCWJjc3ItPnJlc2V0cyAmPSB+QkNTUl9SRVNFVFNfUENTME1VWDsKKwliY3NyX21vZChCQ1NSX1JFU0VUUywgQkNTUl9SRVNFVFNfUFNDME1VWCwgMCk7CiAjZW5kaWYKIAlhdV9zeW5jKCk7Ci0KLSNpZmRlZiBDT05GSUdfTUlQU19QQjEyMDAKLQlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBQYjEyMDAgQm9hcmRcbiIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01JUFNfREIxMjAwCi0JcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgRGIxMjAwIEJvYXJkXG4iKTsKLSNlbmRpZgogfQogCitzdGF0aWMgaW50IF9faW5pdCBwYjEyMDBfaW5pdF9pcnEodm9pZCkKK3sKKwkvKiBXZSBoYXZlIGEgcHJvYmxlbSB3aXRoIENQTEQgcmV2IDMuICovCisJaWYgKEJDU1JfV0hPQU1JX0NQTEQoYmNzcl9yZWFkKEJDU1JfV0hPQU1JKSkgPD0gMykgeworCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlBiMTIwMCBtdXN0IGJlIGF0IENQTEQgcmV2IDQuIFBsZWFzZSBoYXZlIFBiMTIwMFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAidXBkYXRlZCB0byBsYXRlc3QgcmV2aXNpb24uIFRoaXMgc29mdHdhcmUgd2lsbFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAibm90IHdvcmsgb24gYW55dGhpbmcgbGVzcyB0aGFuIENQTEQgcmV2IDQuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcGFuaWMoIkdhbWUgb3Zlci4gIFlvdXIgc2NvcmUgaXMgMC4iKTsKKwl9CisKKwlzZXRfaXJxX3R5cGUoQVUxMjAwX0dQSU83X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJYmNzcl9pbml0X2lycShQQjEyMDBfSU5UX0JFR0lOLCBQQjEyMDBfSU5UX0VORCwgQVUxMjAwX0dQSU83X0lOVCk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwocGIxMjAwX2luaXRfaXJxKTsKKworCiBpbnQgYm9hcmRfYXUxMjAwZmJfcGFuZWwodm9pZCkKIHsKLQlCQ1NSICpiY3NyID0gKEJDU1IgKilCQ1NSX0tTRUcxX0FERFI7Ci0JaW50IHA7Ci0KLQlwID0gYmNzci0+c3dpdGNoZXM7Ci0JcCA+Pj0gODsKLQlwICY9IDB4MEY7Ci0JcmV0dXJuIHA7CisJcmV0dXJuIChiY3NyX3JlYWQoQkNTUl9TV0lUQ0hFUykgPj4gOCkgJiAweDBmOwogfQogCiBpbnQgYm9hcmRfYXUxMjAwZmJfcGFuZWxfaW5pdCh2b2lkKQogewogCS8qIEFwcGx5IHBvd2VyICovCi0JQkNTUiAqYmNzciA9IChCQ1NSICopQkNTUl9LU0VHMV9BRERSOwotCi0JYmNzci0+Ym9hcmQgfD0gQkNTUl9CT0FSRF9MQ0RWRUUgfCBCQ1NSX0JPQVJEX0xDRFZERCB8IEJDU1JfQk9BUkRfTENEQkw7CisJYmNzcl9tb2QoQkNTUl9CT0FSRCwgMCwgQkNTUl9CT0FSRF9MQ0RWRUUgfCBCQ1NSX0JPQVJEX0xDRFZERCB8CisJCQkJQkNTUl9CT0FSRF9MQ0RCTCk7CiAJLyogcHJpbnRrKEtFUk5fREVCVUcgImJvYXJkX2F1MTIwMGZiX3BhbmVsX2luaXQoKVxuIik7ICovCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTUsMTAgKzE3Myw4IEBACiBpbnQgYm9hcmRfYXUxMjAwZmJfcGFuZWxfc2h1dGRvd24odm9pZCkKIHsKIAkvKiBSZW1vdmUgcG93ZXIgKi8KLQlCQ1NSICpiY3NyID0gKEJDU1IgKilCQ1NSX0tTRUcxX0FERFI7Ci0KLQliY3NyLT5ib2FyZCAmPSB+KEJDU1JfQk9BUkRfTENEVkVFIHwgQkNTUl9CT0FSRF9MQ0RWREQgfAotCQkJIEJDU1JfQk9BUkRfTENEQkwpOworCWJjc3JfbW9kKEJDU1JfQk9BUkQsIEJDU1JfQk9BUkRfTENEVkVFIHwgQkNTUl9CT0FSRF9MQ0RWREQgfAorCQkJICAgICBCQ1NSX0JPQVJEX0xDREJMLCAwKTsKIAkvKiBwcmludGsoS0VSTl9ERUJVRyAiYm9hcmRfYXUxMjAwZmJfcGFuZWxfc2h1dGRvd24oKVxuIik7ICovCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL2lycW1hcC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9pcnFtYXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU0NzQ5OC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL2lycW1hcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8qCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUF1MXh4eCBpcnEgbWFwIHRhYmxlCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVECSAgYGBBUwlJUycnIEFORCAgIEFOWQlFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLAkgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTwlFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRQkgTElBQkxFIEZPUiBBTlkJICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVECSAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTCU9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLAlPUiBQUk9GSVRTOyBPUglCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCSBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0KLSNpZmRlZiBDT05GSUdfTUlQU19QQjEyMDAKLSNpbmNsdWRlIDxhc20vbWFjaC1wYjF4MDAvcGIxMjAwLmg+Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTIwMAotI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9kYjEyMDAuaD4KLSNkZWZpbmUgUEIxMjAwX0lOVF9CRUdJTiBEQjEyMDBfSU5UX0JFR0lOCi0jZGVmaW5lIFBCMTIwMF9JTlRfRU5EIERCMTIwMF9JTlRfRU5ECi0jZW5kaWYKLQotc3RydWN0IGF1MXh4eF9pcnFtYXAgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewotCS8qIFRoaXMgaXMgZXh0ZXJuYWwgaW50ZXJydXB0IGNhc2NhZGUgKi8KLQl7IEFVMTAwMF9HUElPXzcsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLX07Ci0KLQotLyoKLSAqIFN1cHBvcnQgZm9yIEV4dGVybmFsIGludGVycnVwdHMgb24gdGhlIFBiMTIwMCBEZXZlbG9wbWVudCBwbGF0Zm9ybS4KLSAqLwotCi1zdGF0aWMgdm9pZCBwYjEyMDBfY2FzY2FkZV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZCkKLXsKLQl1bnNpZ25lZCBzaG9ydCBiaXNyID0gYmNzci0+aW50X3N0YXR1czsKLQotCWZvciAoIDsgYmlzcjsgYmlzciAmPSBiaXNyIC0gMSkKLQkJZ2VuZXJpY19oYW5kbGVfaXJxKFBCMTIwMF9JTlRfQkVHSU4gKyBfX2ZmcyhiaXNyKSk7Ci19Ci0KLS8qIE5PVEU6IGJvdGggdGhlIGVuYWJsZSBhbmQgbWFzayBiaXRzIG11c3QgYmUgY2xlYXJlZCwgb3RoZXJ3aXNlIHRoZQotICogQ1BMRCBnZW5lcmF0ZXMgdG9ucyBvZiBzcHVyaW91cyBpbnRlcnJ1cHRzIChhdCBsZWFzdCBvbiB0aGUgREIxMjAwKS4KLSAqLwotc3RhdGljIHZvaWQgcGIxMjAwX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCi17Ci0JYmNzci0+aW50Y2xyX21hc2sgPSAxIDw8IChpcnFfbnIgLSBQQjEyMDBfSU5UX0JFR0lOKTsKLQliY3NyLT5pbnRjbHIgPSAxIDw8IChpcnFfbnIgLSBQQjEyMDBfSU5UX0JFR0lOKTsKLQlhdV9zeW5jKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBiMTIwMF9tYXNrYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQotewotCWJjc3ItPmludGNscl9tYXNrID0gMSA8PCAoaXJxX25yIC0gUEIxMjAwX0lOVF9CRUdJTik7Ci0JYmNzci0+aW50Y2xyID0gMSA8PCAoaXJxX25yIC0gUEIxMjAwX0lOVF9CRUdJTik7Ci0JYmNzci0+aW50X3N0YXR1cyA9IDEgPDwgKGlycV9uciAtIFBCMTIwMF9JTlRfQkVHSU4pOwkvKiBhY2sgKi8KLQlhdV9zeW5jKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBiMTIwMF91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCi17Ci0JYmNzci0+aW50c2V0ID0gMSA8PCAoaXJxX25yIC0gUEIxMjAwX0lOVF9CRUdJTik7Ci0JYmNzci0+aW50c2V0X21hc2sgPSAxIDw8IChpcnFfbnIgLSBQQjEyMDBfSU5UX0JFR0lOKTsKLQlhdV9zeW5jKCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcGIxMjAwX2NwbGRfaXJxX3R5cGUgPSB7Ci0jaWZkZWYgQ09ORklHX01JUFNfUEIxMjAwCi0JLm5hbWUgPSAiUGIxMjAwIEV4dCIsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUlQU19EQjEyMDAKLQkubmFtZSA9ICJEYjEyMDAgRXh0IiwKLSNlbmRpZgotCS5tYXNrCQk9IHBiMTIwMF9tYXNrX2lycSwKLQkubWFza19hY2sJPSBwYjEyMDBfbWFza2Fja19pcnEsCi0JLnVubWFzawkJPSBwYjEyMDBfdW5tYXNrX2lycSwKLX07Ci0KLXZvaWQgX19pbml0IGJvYXJkX2luaXRfaXJxKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGlycTsKLQotCWF1MXh4eF9zZXR1cF9pcnFtYXAoYXUxeHh4X2lycV9tYXAsIEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApKTsKLQotI2lmZGVmIENPTkZJR19NSVBTX1BCMTIwMAotCS8qIFdlIGhhdmUgYSBwcm9ibGVtIHdpdGggQ1BMRCByZXYgMy4gKi8KLQlpZiAoKChiY3NyLT53aG9hbWkgJiBCQ1NSX1dIT0FNSV9DUExEKSA+PiA0KSA8PSAzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiUGIxMjAwIG11c3QgYmUgYXQgQ1BMRCByZXYgNC4gUGxlYXNlIGhhdmUgUGIxMjAwXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1cGRhdGVkIHRvIGxhdGVzdCByZXZpc2lvbi4gVGhpcyBzb2Z0d2FyZSB3aWxsXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJub3Qgd29yayBvbiBhbnl0aGluZyBsZXNzIHRoYW4gQ1BMRCByZXYgNC5cbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwYW5pYygiR2FtZSBvdmVyLiAgWW91ciBzY29yZSBpcyAwLiIpOwotCX0KLSNlbmRpZgotCS8qIG1hc2sgJiBkaXNhYmxlICYgYWNrIGFsbCAqLwotCWJjc3ItPmludGNscl9tYXNrID0gMHhmZmZmOwotCWJjc3ItPmludGNsciA9IDB4ZmZmZjsKLQliY3NyLT5pbnRfc3RhdHVzID0gMHhmZmZmOwotCWF1X3N5bmMoKTsKLQotCWZvciAoaXJxID0gUEIxMjAwX0lOVF9CRUdJTjsgaXJxIDw9IFBCMTIwMF9JTlRfRU5EOyBpcnErKykKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmcGIxMjAwX2NwbGRfaXJxX3R5cGUsCi0JCQkJCSBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKLQotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKEFVMTAwMF9HUElPXzcsIHBiMTIwMF9jYXNjYWRlX2hhbmRsZXIpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9wbGF0Zm9ybS5jCmluZGV4IGI5M2RmZjQuLjNlZjJkY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL3BsYXRmb3JtLmMKQEAgLTI2LDI3ICsyNiwzMCBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTExMDBfbW1jLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKworI2luY2x1ZGUgIi4uL3BsYXRmb3JtLmgiCiAKIHN0YXRpYyBpbnQgbW1jX2FjdGl2aXR5OwogCiBzdGF0aWMgdm9pZCBwYjEyMDBtbWMwX3NldF9wb3dlcih2b2lkICptbWNfaG9zdCwgaW50IHN0YXRlKQogewogCWlmIChzdGF0ZSkKLQkJYmNzci0+Ym9hcmQgfD0gQkNTUl9CT0FSRF9TRDBQV1I7CisJCWJjc3JfbW9kKEJDU1JfQk9BUkQsIDAsIEJDU1JfQk9BUkRfU0QwUFdSKTsKIAllbHNlCi0JCWJjc3ItPmJvYXJkICY9IH5CQ1NSX0JPQVJEX1NEMFBXUjsKKwkJYmNzcl9tb2QoQkNTUl9CT0FSRCwgQkNTUl9CT0FSRF9TRDBQV1IsIDApOwogCi0JYXVfc3luY19kZWxheSgxKTsKKwltc2xlZXAoMSk7CiB9CiAKIHN0YXRpYyBpbnQgcGIxMjAwbW1jMF9jYXJkX3JlYWRvbmx5KHZvaWQgKm1tY19ob3N0KQogewotCXJldHVybiAoYmNzci0+c3RhdHVzICYgQkNTUl9TVEFUVVNfU0QwV1ApID8gMSA6IDA7CisJcmV0dXJuIChiY3NyX3JlYWQoQkNTUl9TVEFUVVMpICYgQkNTUl9TVEFUVVNfU0QwV1ApID8gMSA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgcGIxMjAwbW1jMF9jYXJkX2luc2VydGVkKHZvaWQgKm1tY19ob3N0KQogewotCXJldHVybiAoYmNzci0+c2lnX3N0YXR1cyAmIEJDU1JfSU5UX1NEMElOU0VSVCkgPyAxIDogMDsKKwlyZXR1cm4gKGJjc3JfcmVhZChCQ1NSX1NJR1NUQVQpICYgQkNTUl9JTlRfU0QwSU5TRVJUKSA/IDEgOiAwOwogfQogCiBzdGF0aWMgdm9pZCBwYjEyMDBfbW1jbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWQsCkBAIC01NCwxMCArNTcsMTAgQEAKIHsKIAlpZiAoYnJpZ2h0bmVzcyAhPSBMRURfT0ZGKSB7CiAJCWlmICgrK21tY19hY3Rpdml0eSA9PSAxKQotCQkJYmNzci0+ZGlza19sZWRzICY9IH4oMSA8PCA4KTsKKwkJCWJjc3JfbW9kKEJDU1JfTEVEUywgQkNTUl9MRURTX0xFRDAsIDApOwogCX0gZWxzZSB7CiAJCWlmICgtLW1tY19hY3Rpdml0eSA9PSAwKQotCQkJYmNzci0+ZGlza19sZWRzIHw9ICgxIDw8IDgpOworCQkJYmNzcl9tb2QoQkNTUl9MRURTLCAwLCBCQ1NSX0xFRFNfTEVEMCk7CiAJfQogfQogCkBAIC02NSwyNyArNjgsMjUgQEAKIAkuYnJpZ2h0bmVzc19zZXQJPSBwYjEyMDBfbW1jbGVkX3NldCwKIH07CiAKLSNpZm5kZWYgQ09ORklHX01JUFNfREIxMjAwCiBzdGF0aWMgdm9pZCBwYjEyMDBtbWMxX3NldF9wb3dlcih2b2lkICptbWNfaG9zdCwgaW50IHN0YXRlKQogewogCWlmIChzdGF0ZSkKLQkJYmNzci0+Ym9hcmQgfD0gQkNTUl9CT0FSRF9TRDFQV1I7CisJCWJjc3JfbW9kKEJDU1JfQk9BUkQsIDAsIEJDU1JfQk9BUkRfU0QxUFdSKTsKIAllbHNlCi0JCWJjc3ItPmJvYXJkICY9IH5CQ1NSX0JPQVJEX1NEMVBXUjsKKwkJYmNzcl9tb2QoQkNTUl9CT0FSRCwgQkNTUl9CT0FSRF9TRDFQV1IsIDApOwogCi0JYXVfc3luY19kZWxheSgxKTsKKwltc2xlZXAoMSk7CiB9CiAKIHN0YXRpYyBpbnQgcGIxMjAwbW1jMV9jYXJkX3JlYWRvbmx5KHZvaWQgKm1tY19ob3N0KQogewotCXJldHVybiAoYmNzci0+c3RhdHVzICYgQkNTUl9TVEFUVVNfU0QxV1ApID8gMSA6IDA7CisJcmV0dXJuIChiY3NyX3JlYWQoQkNTUl9TVEFUVVMpICYgQkNTUl9TVEFUVVNfU0QxV1ApID8gMSA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgcGIxMjAwbW1jMV9jYXJkX2luc2VydGVkKHZvaWQgKm1tY19ob3N0KQogewotCXJldHVybiAoYmNzci0+c2lnX3N0YXR1cyAmIEJDU1JfSU5UX1NEMUlOU0VSVCkgPyAxIDogMDsKKwlyZXR1cm4gKGJjc3JfcmVhZChCQ1NSX1NJR1NUQVQpICYgQkNTUl9JTlRfU0QxSU5TRVJUKSA/IDEgOiAwOwogfQotI2VuZGlmCiAKIGNvbnN0IHN0cnVjdCBhdTF4bW1jX3BsYXRmb3JtX2RhdGEgYXUxeG1tY19wbGF0ZGF0YVsyXSA9IHsKIAlbMF0gPSB7CkBAIC05NSw3ICs5Niw2IEBACiAJCS5jZF9zZXR1cAk9IE5VTEwsCQkvKiB1c2UgcG9sbC10aW1lciBpbiBkcml2ZXIgKi8KIAkJLmxlZAkJPSAmcGIxMjAwbW1jX2xlZCwKIAl9LAotI2lmbmRlZiBDT05GSUdfTUlQU19EQjEyMDAKIAlbMV0gPSB7CiAJCS5zZXRfcG93ZXIJPSBwYjEyMDBtbWMxX3NldF9wb3dlciwKIAkJLmNhcmRfaW5zZXJ0ZWQJPSBwYjEyMDBtbWMxX2NhcmRfaW5zZXJ0ZWQsCkBAIC0xMDMsNyArMTAzLDYgQEAKIAkJLmNkX3NldHVwCT0gTlVMTCwJCS8qIHVzZSBwb2xsLXRpbWVyIGluIGRyaXZlciAqLwogCQkubGVkCQk9ICZwYjEyMDBtbWNfbGVkLAogCX0sCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaWRlX3Jlc291cmNlc1tdID0gewpAQCAtMTY5LDggKzE2OCwzNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBib2FyZF9yZWdpc3Rlcl9kZXZpY2VzKHZvaWQpCiB7CisJaW50IHN3YXBwZWQ7CisKKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDAwMDEwMDAwIC0gMSwKKwkJCQkgICAgUEIxMjAwX1BDMF9JTlQsCisJCQkJICAgIFBCMTIwMF9QQzBfSU5TRVJUX0lOVCwKKwkJCQkgICAgLypQQjEyMDBfUEMwX1NUU0NIR19JTlQqLzAsCisJCQkJICAgIFBCMTIwMF9QQzBfRUpFQ1RfSU5ULAorCQkJCSAgICAwKTsKKworCWRiMXhfcmVnaXN0ZXJfcGNtY2lhX3NvY2tldChQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwODAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDg0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwODAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDg0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwODAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDgwMTAwMDAgLSAxLAorCQkJCSAgICBQQjEyMDBfUEMxX0lOVCwKKwkJCQkgICAgUEIxMjAwX1BDMV9JTlNFUlRfSU5ULAorCQkJCSAgICAvKlBCMTIwMF9QQzFfU1RTQ0hHX0lOVCovMCwKKwkJCQkgICAgUEIxMjAwX1BDMV9FSkVDVF9JTlQsCisJCQkJICAgIDEpOworCisJc3dhcHBlZCA9IGJjc3JfcmVhZChCQ1NSX1NUQVRVUykgJiAgQkNTUl9TVEFUVVNfREIxMjAwX1NXQVBCT09UOworCWRiMXhfcmVnaXN0ZXJfbm9yZmxhc2goMTI4ICogMTAyNCAqIDEwMjQsIDIsIHN3YXBwZWQpOworCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGJvYXJkX3BsYXRmb3JtX2RldmljZXMsCiAJCQkJICAgIEFSUkFZX1NJWkUoYm9hcmRfcGxhdGZvcm1fZGV2aWNlcykpOwogfQotCi1hcmNoX2luaXRjYWxsKGJvYXJkX3JlZ2lzdGVyX2RldmljZXMpOworZGV2aWNlX2luaXRjYWxsKGJvYXJkX3JlZ2lzdGVyX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvTWFrZWZpbGUKaW5kZXggMTczYjQxOS4uZTgzYjE1MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL01ha2VmaWxlCkBAIC01LDQgKzUsNCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIEFsY2hlbXkgU2VtaWNvbmR1Y3RvciBQYjE1MDAgYm9hcmQuCiAjCiAKLW9iai15IDo9IGJvYXJkX3NldHVwLm8KK29iai15IDo9IGJvYXJkX3NldHVwLm8gcGxhdGZvcm0ubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9ib2FyZF9zZXR1cC5jCmluZGV4IGQ3YTU2NTYuLmZhOTc3MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL2JvYXJkX3NldHVwLmMKQEAgLTI5LDIyICsyOSwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXBiMXgwMC9wYjE1MDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgogCiAjaW5jbHVkZSA8cHJvbS5oPgogCiAKIGNoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKLQlbMTJdID0geyAtMSwgSU5UQSwgSU5UWCwgSU5UWCwgSU5UWCB9LCAgIC8qIElEU0VMIDEyIC0gSFBUMzcwCSovCi0JWzEzXSA9IHsgLTEsIElOVEEsIElOVEIsIElOVEMsIElOVEQgfSwgICAvKiBJRFNFTCAxMyAtIFBDSSBzbG90ICovCi19OwotCi1zdHJ1Y3QgYXUxeHh4X2lycW1hcCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7Ci0JeyBBVTE1MDBfR1BJT18yMDQsIElSUUZfVFJJR0dFUl9ISUdILCAwIH0sCi0JeyBBVTE1MDBfR1BJT18yMDEsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQl7IEFVMTUwMF9HUElPXzIwMiwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCXsgQVUxNTAwX0dQSU9fMjAzLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTE1MDBfR1BJT18yMDUsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKKwlbMTJdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCAweGZmLCAweGZmLCAweGZmIH0sICAgLyogSURTRUwgMTIgLSBIUFQzNzAJKi8KKwlbMTNdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCBBVTE1MDBfUENJX0lOVEIsIEFVMTUwMF9QQ0lfSU5UQywgQVUxNTAwX1BDSV9JTlREIH0sICAgLyogSURTRUwgMTMgLSBQQ0kgc2xvdCAqLwogfTsKIAogCkBAIC01NSwzNSArNDcsMTYgQEAKIAogdm9pZCBib2FyZF9yZXNldCh2b2lkKQogewotCS8qIEhpdCBCQ1NSLlJTVF9WRERJW1NPRlRfUkVTRVRdICovCi0JYXVfd3JpdGVsKDB4MDAwMDAwMDAsIFBCMTUwMF9SU1RfVkRESSk7Ci19Ci0KLXZvaWQgX19pbml0IGJvYXJkX2luaXRfaXJxKHZvaWQpCi17Ci0JYXUxeHh4X3NldHVwX2lycW1hcChhdTF4eHhfaXJxX21hcCwgQVJSQVlfU0laRShhdTF4eHhfaXJxX21hcCkpOworCWJjc3Jfd3JpdGUoQkNTUl9TWVNURU0sIDApOwogfQogCiB2b2lkIF9faW5pdCBib2FyZF9zZXR1cCh2b2lkKQogewogCXUzMiBwaW5fZnVuYzsKIAl1MzIgc3lzX2ZyZXFjdHJsLCBzeXNfY2xrc3JjOwotCWNoYXIgKmFyZ3B0cjsKIAotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCi0JYXJncHRyID0gc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9Iik7Ci0JaWYgKGFyZ3B0ciA9PSBOVUxMKSB7Ci0JCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCQlzdHJjYXQoYXJncHRyLCAiIGNvbnNvbGU9dHR5UzAsMTE1MjAwIik7Ci0JfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TT1VORF9BVTFYMDApICYmICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCS8qIGF1MTAwMCBkb2VzIG5vdCBzdXBwb3J0IHZyYSwgYXUxNTAwIGFuZCBhdTExMDAgZG8gKi8KLQlzdHJjYXQoYXJncHRyLCAiIGF1MTAwMF9hdWRpbz12cmEiKTsKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLSNlbmRpZgorCWJjc3JfaW5pdChEQjEwMDBfQkNTUl9QSFlTX0FERFIsCisJCSAgREIxMDAwX0JDU1JfUEhZU19BRERSICsgREIxMDAwX0JDU1JfSEVYTEVEX09GUyk7CiAKIAlzeXNfY2xrc3JjID0gc3lzX2ZyZXFjdHJsID0gcGluX2Z1bmMgPSAwOwogCS8qIFNldCBBVVggY2xvY2sgdG8gMTIgTUh6ICogOCA9IDk2IE1IeiAqLwpAQCAtMTYzLDMgKzEzNiwxOCBAQAogCQlhdV9zeW5jKCk7CiAJfQogfQorCitzdGF0aWMgaW50IF9faW5pdCBwYjE1MDBfaW5pdF9pcnEodm9pZCkKK3sKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU85X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7ICAgLyogQ0QwIyAqLworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzEwX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7ICAvKiBDQVJEMCAqLworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzExX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7ICAvKiBTVFNDSEcwIyAqLworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwNF9JTlQsIElSUUZfVFJJR0dFUl9ISUdIKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDJfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDNfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDVfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChwYjE1MDBfaW5pdF9pcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NDNiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL3BsYXRmb3JtLmMKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIFBiMTUwMCBib2FyZCBwbGF0Zm9ybSBkZXZpY2UgcmVnaXN0cmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hbnVlbCBMYXVzcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKworI2luY2x1ZGUgIi4uL3BsYXRmb3JtLmgiCisKK3N0YXRpYyBpbnQgX19pbml0IHBiMTUwMF9kZXZfaW5pdCh2b2lkKQoreworCWludCBzd2FwcGVkOworCisJLyogUENNQ0lBLiBzaW5nbGUgc29ja2V0LCBpZGVudGljYWwgdG8gUGIxNTAwICovCisJZGIxeF9yZWdpc3Rlcl9wY21jaWFfc29ja2V0KFBDTUNJQV9BVFRSX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDA0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDA0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwMDAxMDAwMCAtIDEsCisJCQkJICAgIEFVMTUwMF9HUElPMTFfSU5ULAkgLyogY2FyZCAqLworCQkJCSAgICBBVTE1MDBfR1BJTzlfSU5ULAkgLyogaW5zZXJ0ICovCisJCQkJICAgIC8qQVUxNTAwX0dQSU8xMF9JTlQqLzAsIC8qIHN0c2NoZyAqLworCQkJCSAgICAwLAkJCSAvKiBlamVjdCAqLworCQkJCSAgICAwKTsJCQkgLyogaWQgKi8KKworCXN3YXBwZWQgPSBiY3NyX3JlYWQoQkNTUl9TVEFUVVMpICYgIEJDU1JfU1RBVFVTX0RCMTAwMF9TV0FQQk9PVDsKKwlkYjF4X3JlZ2lzdGVyX25vcmZsYXNoKDY0ICogMTAyNCAqIDEwMjQsIDQsIHN3YXBwZWQpOworCisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwocGIxNTAwX2Rldl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1NTAvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL01ha2VmaWxlCmluZGV4IGNmZjk1YmMuLjk2NjFiNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1NTAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTU1MC9NYWtlZmlsZQpAQCAtNSw0ICs1LDQgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBBbGNoZW15IFNlbWljb25kdWN0b3IgUGIxNTUwIGJvYXJkLgogIwogCi1vYmoteSA6PSBib2FyZF9zZXR1cC5vCitvYmoteSA6PSBib2FyZF9zZXR1cC5vIHBsYXRmb3JtLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1NTAvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1NTAvYm9hcmRfc2V0dXAuYwppbmRleCBiNmU5ZTdkLi4xZThmYjNkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTU1MC9ib2FyZF9zZXR1cC5jCkBAIC0zMiwxOCArMzIsMTUgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1wYjF4MDAvcGIxNTUwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvZ3Bpby5oPgogCiAjaW5jbHVkZSA8cHJvbS5oPgogCiAKIGNoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKLQlbMTJdID0geyAtMSwgSU5UQiwgSU5UQywgSU5URCwgSU5UQSB9LCAvKiBJRFNFTCAxMiAtIFBDSSBzbG90IDIgKGxlZnQpICAqLwotCVsxM10gPSB7IC0xLCBJTlRBLCBJTlRCLCBJTlRDLCBJTlREIH0sIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgMSAocmlnaHQpICovCi19OwotCi1zdHJ1Y3QgYXUxeHh4X2lycW1hcCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7Ci0JeyBBVTEwMDBfR1BJT18wLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTEwMDBfR1BJT18xLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCisJWzEyXSA9IHsgLTEsIEFVMTU1MF9QQ0lfSU5UQiwgQVUxNTUwX1BDSV9JTlRDLCBBVTE1NTBfUENJX0lOVEQsIEFVMTU1MF9QQ0lfSU5UQSB9LCAvKiBJRFNFTCAxMiAtIFBDSSBzbG90IDIgKGxlZnQpICAqLworCVsxM10gPSB7IC0xLCBBVTE1NTBfUENJX0lOVEEsIEFVMTU1MF9QQ0lfSU5UQiwgQVUxNTUwX1BDSV9JTlRDLCBBVTE1NTBfUENJX0lOVEQgfSwgLyogSURTRUwgMTMgLSBQQ0kgc2xvdCAxIChyaWdodCkgKi8KIH07CiAKIGNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQpAQCAtNTMsMjggKzUwLDE3IEBACiAKIHZvaWQgYm9hcmRfcmVzZXQodm9pZCkKIHsKLQkvKiBIaXQgQkNTUi5TWVNURU1bUkVTRVRdICovCi0JYXVfd3JpdGV3KGF1X3JlYWR3KDB4QUYwMDAwMUMpICYgfkJDU1JfU1lTVEVNX1JFU0VULCAweEFGMDAwMDFDKTsKLX0KLQotdm9pZCBfX2luaXQgYm9hcmRfaW5pdF9pcnEodm9pZCkKLXsKLQlhdTF4eHhfc2V0dXBfaXJxbWFwKGF1MXh4eF9pcnFfbWFwLCBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKSk7CisJYmNzcl93cml0ZShCQ1NSX1NZU1RFTSwgMCk7CiB9CiAKIHZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpCiB7CiAJdTMyIHBpbl9mdW5jOwogCi0jaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUKLQljaGFyICphcmdwdHI7Ci0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JYXJncHRyID0gc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9Iik7Ci0JaWYgKGFyZ3B0ciA9PSBOVUxMKSB7Ci0JCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCQlzdHJjYXQoYXJncHRyLCAiIGNvbnNvbGU9dHR5UzAsMTE1MjAwIik7Ci0JfQotI2VuZGlmCisJYmNzcl9pbml0KFBCMTU1MF9CQ1NSX1BIWVNfQUREUiwKKwkJICBQQjE1NTBfQkNTUl9QSFlTX0FERFIgKyBQQjE1NTBfQkNTUl9IRVhMRURfT0ZTKTsKKworCWFsY2hlbXlfZ3BpbzJfZW5hYmxlKCk7CiAKIAkvKgogCSAqIEVuYWJsZSBQU0MxIFNZTkMgZm9yIEFDJzk3LiAgTm9ybWFseSBkb25lIGluIGF1ZGlvIGRyaXZlciwKQEAgLTg1LDggKzcxLDIxIEBACiAJcGluX2Z1bmMgfD0gU1lTX1BGX01VU1RfQkVfU0VUIHwgU1lTX1BGX1BTQzFfUzE7CiAJYXVfd3JpdGVsKHBpbl9mdW5jLCBTWVNfUElORlVOQyk7CiAKLQlhdV93cml0ZWwoMCwgKHUzMiliY3NyIHwgMHgxMCk7IC8qIHR1cm4gb2ZmIFBDTUNJQSBwb3dlciAqLwotCWF1X3N5bmMoKTsKKwliY3NyX3dyaXRlKEJDU1JfUENNQ0lBLCAwKTsJLyogdHVybiBvZmYgUENNQ0lBIHBvd2VyICovCiAKIAlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBQYjE1NTAgQm9hcmRcbiIpOwogfQorCitzdGF0aWMgaW50IF9faW5pdCBwYjE1NTBfaW5pdF9pcnEodm9pZCkKK3sKKwlzZXRfaXJxX3R5cGUoQVUxNTUwX0dQSU8wX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTU1MF9HUElPMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1NTBfR1BJTzIwMV8yMDVfSU5ULCBJUlFGX1RSSUdHRVJfSElHSCk7CisKKwkvKiBlbmFibGUgYm90aCBQQ01DSUEgY2FyZCBpcnFzIGluIHRoZSBzaGFyZWQgbGluZSAqLworCWFsY2hlbXlfZ3BpbzJfZW5hYmxlX2ludCgyMDEpOworCWFsY2hlbXlfZ3BpbzJfZW5hYmxlX2ludCgyMDIpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHBiMTU1MF9pbml0X2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcxNTBkMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1NTAvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDY5IEBACisvKgorICogUGIxNTUwIGJvYXJkIHBsYXRmb3JtIGRldmljZSByZWdpc3RyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFudWVsIExhdXNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXBiMXgwMC9wYjE1NTAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorCisjaW5jbHVkZSAiLi4vcGxhdGZvcm0uaCIKKworc3RhdGljIGludCBfX2luaXQgcGIxNTUwX2Rldl9pbml0KHZvaWQpCit7CisJaW50IHN3YXBwZWQ7CisKKwkvKiBQYjE1NTAsIGxpa2UgYWxsIG90aGVycywgYWxzbyBoYXMgc3RhdHVzY2hhbmdlIGlycXM7IGhvd2V2ZXIgdGhleSdyZQorCSogd2lyZWQgdXAgb24gb25lIG9mIHRoZSBBdTE1NTAncyBzaGFyZWQgR1BJTzIwMV8yMDUgbGluZSwgd2hpY2ggYWxzbworCSogc2VydmljZXMgdGhlIFBDTUNJQSBjYXJkIGludGVycnVwdHMuICBTbyB3ZSBpZ25vcmUgc3RhdHVzY2hhbmdlIGFuZAorCSogdXNlIHRoZSBHUElPMjAxXzIwNSBleGNsdXNpdmVseSBmb3IgY2FyZCBpbnRlcnJ1cHRzLCBzaW5jZSBhKSBwY21jaWEKKwkqIGRyaXZlcnMgYXJlIHVzZWQgdG8gc2hhcmVkIGlycXMgYW5kIGIpIHN0YXR1c2NoYW5nZSBpc24ndCByZWFsbHkgdXNlLQorCSogZnVsIGFueXdheS4KKwkqLworCWRiMXhfcmVnaXN0ZXJfcGNtY2lhX3NvY2tldChQQ01DSUFfQVRUUl9QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDAwNDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDAwNDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDAwMTAwMDAgLSAxLAorCQkJCSAgICBBVTE1NTBfR1BJTzIwMV8yMDVfSU5ULAorCQkJCSAgICBBVTE1NTBfR1BJTzBfSU5ULAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAgICAwKTsKKworCWRiMXhfcmVnaXN0ZXJfcGNtY2lhX3NvY2tldChQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwODAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDg0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwODAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDg0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwODAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDgwMTAwMDAgLSAxLAorCQkJCSAgICBBVTE1NTBfR1BJTzIwMV8yMDVfSU5ULAorCQkJCSAgICBBVTE1NTBfR1BJTzFfSU5ULAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAgICAxKTsKKworCXN3YXBwZWQgPSBiY3NyX3JlYWQoQkNTUl9TVEFUVVMpICYgQkNTUl9TVEFUVVNfUEIxNTUwX1NXQVBCT09UOworCWRiMXhfcmVnaXN0ZXJfbm9yZmxhc2goMTI4ICogMTAyNCAqIDEwMjQsIDQsIHN3YXBwZWQpOworCisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwocGIxNTUwX2Rldl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlhNGIzMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogZGV2b2FyZCBtaXNjIHN0dWZmLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorCisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisKK3N0YXRpYyB2b2lkIGRiMXhfcG93ZXJfb2ZmKHZvaWQpCit7CisJYmNzcl93cml0ZShCQ1NSX1JFU0VUUywgMCk7CisJYmNzcl93cml0ZShCQ1NSX1NZU1RFTSwgQkNTUl9TWVNURU1fUFdST0ZGIHwgQkNTUl9TWVNURU1fUkVTRVQpOworfQorCitzdGF0aWMgdm9pZCBkYjF4X3Jlc2V0KGNoYXIgKmMpCit7CisJYmNzcl93cml0ZShCQ1NSX1JFU0VUUywgMCk7CisJYmNzcl93cml0ZShCQ1NSX1NZU1RFTSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGRiMXhfcG93ZXJvZmZfc2V0dXAodm9pZCkKK3sKKwlpZiAoIXBtX3Bvd2VyX29mZikKKwkJcG1fcG93ZXJfb2ZmID0gZGIxeF9wb3dlcl9vZmY7CisJaWYgKCFfbWFjaGluZV9oYWx0KQorCQlfbWFjaGluZV9oYWx0ID0gZGIxeF9wb3dlcl9vZmY7CisJaWYgKCFfbWFjaGluZV9yZXN0YXJ0KQorCQlfbWFjaGluZV9yZXN0YXJ0ID0gZGIxeF9yZXNldDsKKworCXJldHVybiAwOworfQorbGF0ZV9pbml0Y2FsbChkYjF4X3Bvd2Vyb2ZmX3NldHVwKTsKKworLyogcmVnaXN0ZXIgYSBwY21jaWEgc29ja2V0ICovCitpbnQgX19pbml0IGRiMXhfcmVnaXN0ZXJfcGNtY2lhX3NvY2tldChwaHlzX2FkZHJfdCBwY21jaWFfYXR0cl9zdGFydCwKKwkJCQkgICAgICAgcGh5c19hZGRyX3QgcGNtY2lhX2F0dHJfZW5kLAorCQkJCSAgICAgICBwaHlzX2FkZHJfdCBwY21jaWFfbWVtX3N0YXJ0LAorCQkJCSAgICAgICBwaHlzX2FkZHJfdCBwY21jaWFfbWVtX2VuZCwKKwkJCQkgICAgICAgcGh5c19hZGRyX3QgcGNtY2lhX2lvX3N0YXJ0LAorCQkJCSAgICAgICBwaHlzX2FkZHJfdCBwY21jaWFfaW9fZW5kLAorCQkJCSAgICAgICBpbnQgY2FyZF9pcnEsCisJCQkJICAgICAgIGludCBjZF9pcnEsCisJCQkJICAgICAgIGludCBzdHNjaGdfaXJxLAorCQkJCSAgICAgICBpbnQgZWplY3RfaXJxLAorCQkJCSAgICAgICBpbnQgaWQpCit7CisJaW50IGNudCwgaSwgcmV0OworCXN0cnVjdCByZXNvdXJjZSAqc3I7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQ7CisKKwljbnQgPSA1OworCWlmIChlamVjdF9pcnEpCisJCWNudCsrOworCWlmIChzdHNjaGdfaXJxKQorCQljbnQrKzsKKworCXNyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIGNudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwZCA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiZGIxeHh4X3BjbWNpYSIsIGlkKTsKKwlpZiAoIXBkKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXNyWzBdLm5hbWUJPSAicGNtY2lhLWF0dHIiOworCXNyWzBdLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU07CisJc3JbMF0uc3RhcnQJPSBwY21jaWFfYXR0cl9zdGFydDsKKwlzclswXS5lbmQJPSBwY21jaWFfYXR0cl9lbmQ7CisKKwlzclsxXS5uYW1lCT0gInBjbWNpYS1tZW0iOworCXNyWzFdLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU07CisJc3JbMV0uc3RhcnQJPSBwY21jaWFfbWVtX3N0YXJ0OworCXNyWzFdLmVuZAk9IHBjbWNpYV9tZW1fZW5kOworCisJc3JbMl0ubmFtZQk9ICJwY21jaWEtaW8iOworCXNyWzJdLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU07CisJc3JbMl0uc3RhcnQJPSBwY21jaWFfaW9fc3RhcnQ7CisJc3JbMl0uZW5kCT0gcGNtY2lhX2lvX2VuZDsKKworCXNyWzNdLm5hbWUJPSAiaW5zZXJ0IjsKKwlzclszXS5mbGFncwk9IElPUkVTT1VSQ0VfSVJROworCXNyWzNdLnN0YXJ0ID0gc3JbM10uZW5kID0gY2RfaXJxOworCisJc3JbNF0ubmFtZQk9ICJjYXJkIjsKKwlzcls0XS5mbGFncwk9IElPUkVTT1VSQ0VfSVJROworCXNyWzRdLnN0YXJ0ID0gc3JbNF0uZW5kID0gY2FyZF9pcnE7CisKKwlpID0gNTsKKwlpZiAoc3RzY2hnX2lycSkgeworCQlzcltpXS5uYW1lCT0gInN0c2NoZyI7CisJCXNyW2ldLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlE7CisJCXNyW2ldLnN0YXJ0ID0gc3JbaV0uZW5kID0gc3RzY2hnX2lycTsKKwkJaSsrOworCX0KKwlpZiAoZWplY3RfaXJxKSB7CisJCXNyW2ldLm5hbWUJPSAiZWplY3QiOworCQlzcltpXS5mbGFncwk9IElPUkVTT1VSQ0VfSVJROworCQlzcltpXS5zdGFydCA9IHNyW2ldLmVuZCA9IGVqZWN0X2lycTsKKwl9CisKKwlwZC0+cmVzb3VyY2UgPSBzcjsKKwlwZC0+bnVtX3Jlc291cmNlcyA9IGNudDsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGQpOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworCXBsYXRmb3JtX2RldmljZV9wdXQocGQpOworb3V0OgorCWtmcmVlKHNyKTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIFlBTU9OX1NJWkUJMHgwMDEwMDAwMAorI2RlZmluZSBZQU1PTl9FTlZfU0laRQkweDAwMDQwMDAwCisKK2ludCBfX2luaXQgZGIxeF9yZWdpc3Rlcl9ub3JmbGFzaCh1bnNpZ25lZCBsb25nIHNpemUsIGludCB3aWR0aCwKKwkJCQkgIGludCBzd2FwcGVkKQoreworCXN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgKnBmZDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZDsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldCwgaTsKKworCWlmIChzaXplIDwgKDggKiAxMDI0ICogMTAyNCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gLUVOT01FTTsKKwlwYXJ0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfcGFydGl0aW9uKSAqIDUsIEdGUF9LRVJORUwpOworCWlmICghcGFydHMpCisJCWdvdG8gb3V0OworCisJcmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXMpCisJCWdvdG8gb3V0MTsKKworCXBmZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBmZCkKKwkJZ290byBvdXQyOworCisJcGQgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInBoeXNtYXAtZmxhc2giLCAwKTsKKwlpZiAoIXBkKQorCQlnb3RvIG91dDM7CisKKwkvKiBOT1IgZmxhc2ggZW5kcyBhdCAweDIwMDAwMDAwLCByZWdhcmRsZXNzIG9mIHNpemUgKi8KKwlyZXMtPnN0YXJ0ID0gMHgyMDAwMDAwMCAtIHNpemU7CisJcmVzLT5lbmQgPSAweDIwMDAwMDAwIC0gMTsKKwlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisKKwkvKiBwYXJ0aXRpb24gc2V0dXAuICBNb3N0IERldmVsYm9hcmRzIGhhdmUgYSBzd2l0Y2ggd2hpY2ggYWxsb3dzCisJICogdG8gc3dhcCB0aGUgcGh5c2ljYWwgbG9jYXRpb25zIG9mIHRoZSAyIE5PUiBmbGFzaCBiYW5rcy4KKwkgKi8KKwlpID0gMDsKKwlpZiAoIXN3YXBwZWQpIHsKKwkJLyogZmlyc3QgTk9SIGNoaXAgKi8KKwkJcGFydHNbaV0ub2Zmc2V0ID0gMDsKKwkJcGFydHNbaV0ubmFtZSA9ICJVc2VyIEZTIjsKKwkJcGFydHNbaV0uc2l6ZSA9IHNpemUgLyAyOworCQlpKys7CisJfQorCisJcGFydHNbaV0ub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5EOworCXBhcnRzW2ldLm5hbWUgPSAiVXNlciBGUyAyIjsKKwlwYXJ0c1tpXS5zaXplID0gKHNpemUgLyAyKSAtICgweDIwMDAwMDAwIC0gMHgxZmMwMDAwMCk7CisJaSsrOworCisJcGFydHNbaV0ub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5EOworCXBhcnRzW2ldLm5hbWUgPSAiWUFNT04iOworCXBhcnRzW2ldLnNpemUgPSBZQU1PTl9TSVpFOworCXBhcnRzW2ldLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFOworCWkrKzsKKworCXBhcnRzW2ldLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORDsKKwlwYXJ0c1tpXS5uYW1lID0gInJhdyBrZXJuZWwiOworCXBhcnRzW2ldLnNpemUgPSAweDAwNDAwMDAwIC0gWUFNT05fU0laRSAtIFlBTU9OX0VOVl9TSVpFOworCWkrKzsKKworCXBhcnRzW2ldLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORDsKKwlwYXJ0c1tpXS5uYW1lID0gIllBTU9OIEVudiI7CisJcGFydHNbaV0uc2l6ZSA9IFlBTU9OX0VOVl9TSVpFOworCXBhcnRzW2ldLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFOworCWkrKzsKKworCWlmIChzd2FwcGVkKSB7CisJCXBhcnRzW2ldLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORDsKKwkJcGFydHNbaV0ubmFtZSA9ICJVc2VyIEZTIjsKKwkJcGFydHNbaV0uc2l6ZSA9IHNpemUgLyAyOworCQlpKys7CisJfQorCisJcGZkLT53aWR0aCA9IHdpZHRoOworCXBmZC0+cGFydHMgPSBwYXJ0czsKKwlwZmQtPm5yX3BhcnRzID0gNTsKKworCXBkLT5kZXYucGxhdGZvcm1fZGF0YSA9IHBmZDsKKwlwZC0+cmVzb3VyY2UgPSByZXM7CisJcGQtPm51bV9yZXNvdXJjZXMgPSAxOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZCk7CisJaWYgKCFyZXQpCisJCXJldHVybiByZXQ7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkKTsKK291dDM6CisJa2ZyZWUocGZkKTsKK291dDI6CisJa2ZyZWUocmVzKTsKK291dDE6CisJa2ZyZWUocGFydHMpOworb3V0OgorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGxhdGZvcm0uaCBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYzA1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGxhdGZvcm0uaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9ERVZCT0FSRF9QTEFURk9STV9IXworI2RlZmluZSBfREVWQk9BUkRfUExBVEZPUk1fSF8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworaW50IF9faW5pdCBkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQocGh5c19hZGRyX3QgcGNtY2lhX2F0dHJfc3RhcnQsCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBjbWNpYV9hdHRyX2xlbiwKKwkJCQkgICAgICAgcGh5c19hZGRyX3QgcGNtY2lhX21lbV9zdGFydCwKKwkJCQkgICAgICAgcGh5c19hZGRyX3QgcGNtY2lhX21lbV9lbmQsCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBjbWNpYV9pb19zdGFydCwKKwkJCQkgICAgICAgcGh5c19hZGRyX3QgcGNtY2lhX2lvX2VuZCwKKwkJCQkgICAgICAgaW50IGNhcmRfaXJxLAorCQkJCSAgICAgICBpbnQgY2RfaXJxLAorCQkJCSAgICAgICBpbnQgc3RzY2hnX2lycSwKKwkJCQkgICAgICAgaW50IGVqZWN0X2lycSwKKwkJCQkgICAgICAgaW50IGlkKTsKKworaW50IF9faW5pdCBkYjF4X3JlZ2lzdGVyX25vcmZsYXNoKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IHdpZHRoLAorCQkJCSAgaW50IHN3YXBwZWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BtLmMKaW5kZXggNjMyZjk4Ni4uNGJiZDMxMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BtLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BtLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CiAKIC8qCiAgKiBHZW5lcmljIHN1c3BlbmQgdXNlcnNwYWNlIGludGVyZmFjZSBmb3IgQWxjaGVteSBkZXZlbG9wbWVudCBib2FyZHMuCkBAIC0yNiw2ICsyNywyMCBAQAogCiBzdGF0aWMgaW50IGRiMXhfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQogeworCXVuc2lnbmVkIHNob3J0IGJjc3JzWzE2XTsKKwlpbnQgaSwgaiwgaGFzaW50OworCisJLyogc2F2ZSBDUExEIHJlZ3MgKi8KKwloYXNpbnQgPSBiY3NyX3JlYWQoQkNTUl9XSE9BTUkpOworCWhhc2ludCA9IEJDU1JfV0hPQU1JX0JPQVJEKGhhc2ludCkgPj0gQkNTUl9XSE9BTUlfREIxMjAwOworCWogPSAoaGFzaW50KSA/IEJDU1JfTUFTS1NFVCA6IEJDU1JfU1lTVEVNOworCisJZm9yIChpID0gQkNTUl9TVEFUVVM7IGkgPD0gajsgaSsrKQorCQliY3Nyc1tpXSA9IGJjc3JfcmVhZChpKTsKKworCS8qIHNodXQgb2ZmIGhleGxlZHMgKi8KKwliY3NyX3dyaXRlKEJDU1JfSEVYQ0xFQVIsIDMpOworCiAJLyogZW5hYmxlIEdQSU8gYmFzZWQgd2FrZXVwICovCiAJYWxjaGVteV9ncGlvMV9pbnB1dF9lbmFibGUoKTsKIApAQCAtNTIsNiArNjcsMjMgQEAKIAkvKiAuLi5hbmQgbm93IHRoZSBzYW5kbWFuIGNhbiBjb21lISAqLwogCWF1X3NsZWVwKCk7CiAKKworCS8qIHJlc3RvcmUgQ1BMRCByZWdzICovCisJZm9yIChpID0gQkNTUl9TVEFUVVM7IGkgPD0gQkNTUl9TWVNURU07IGkrKykKKwkJYmNzcl93cml0ZShpLCBiY3Nyc1tpXSk7CisKKwkvKiByZXN0b3JlIENQTEQgaW50IHJlZ2lzdGVycyAqLworCWlmIChoYXNpbnQpIHsKKwkJYmNzcl93cml0ZShCQ1NSX0lOVENMUiwgMHhmZmZmKTsKKwkJYmNzcl93cml0ZShCQ1NSX01BU0tDTFIsIDB4ZmZmZik7CisJCWJjc3Jfd3JpdGUoQkNTUl9JTlRTVEFULCAweGZmZmYpOworCQliY3NyX3dyaXRlKEJDU1JfSU5UU0VULCBiY3Nyc1tCQ1NSX0lOVFNFVF0pOworCQliY3NyX3dyaXRlKEJDU1JfTUFTS1NFVCwgYmNzcnNbQkNTUl9NQVNLU0VUXSk7CisJfQorCisJLyogbGlnaHQgdXAgaGV4bGVkcyAqLworCWJjc3Jfd3JpdGUoQkNTUl9IRVhDTEVBUiwgMCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3Byb20uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wcm9tLmMKaW5kZXggMDA0MmJkNi4uYjMwZGY1YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3Byb20uYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcHJvbS5jCkBAIC02MCwzICs2MCw4IEBACiAJCXN0cmljdF9zdHJ0b3VsKG1lbXNpemVfc3RyLCAwLCAmbWVtc2l6ZSk7CiAJYWRkX21lbW9yeV9yZWdpb24oMCwgbWVtc2l6ZSwgQk9PVF9NRU1fUkFNKTsKIH0KKwordm9pZCBwcm9tX3B1dGNoYXIodW5zaWduZWQgY2hhciBjKQoreworICAgIGFsY2hlbXlfdWFydF9wdXRjaGFyKFVBUlQwX1BIWVNfQUREUiwgYyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9NYWtlZmlsZSBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL01ha2VmaWxlCmluZGV4IDdjNjdiM2QuLjRhNTM4MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogIyBNYWtlZmlsZSBmb3IgNEcgU3lzdGVtcyBNVFgtMSBib2FyZC4KICMKIAotbGliLXkgOj0gaW5pdC5vIGJvYXJkX3NldHVwLm8gaXJxbWFwLm8KK2xpYi15IDo9IGluaXQubyBib2FyZF9zZXR1cC5vCiBvYmoteSA6PSBwbGF0Zm9ybS5vCiAKIEVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYwppbmRleCA0NWI2MWM5Li5hOWYwMzM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMKQEAgLTMwLDMyICszMCw0MyBAQAogCiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgogCisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KIAogI2luY2x1ZGUgPHByb20uaD4KIAorY2hhciBpcnFfdGFiX2FsY2hlbXlbXVs1XSBfX2luaXRkYXRhID0geworCVswXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQSwgQVUxNTAwX1BDSV9JTlRBLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDAwIC0gQWRhcHRlckEtU2xvdDAgKHRvcCkgKi8KKwlbMV0gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEIsIEFVMTUwMF9QQ0lfSU5UQSwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAwMSAtIEFkYXB0ZXJBLVNsb3QxIChib3R0b20pICovCisJWzJdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRDLCBBVTE1MDBfUENJX0lOVEQsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMDIgLSBBZGFwdGVyQi1TbG90MCAodG9wKSAqLworCVszXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5URCwgQVUxNTAwX1BDSV9JTlRDLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDAzIC0gQWRhcHRlckItU2xvdDEgKGJvdHRvbSkgKi8KKwlbNF0gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEEsIEFVMTUwMF9QQ0lfSU5UQiwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAwNCAtIEFkYXB0ZXJDLVNsb3QwICh0b3ApICovCisJWzVdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRCLCBBVTE1MDBfUENJX0lOVEEsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMDUgLSBBZGFwdGVyQy1TbG90MSAoYm90dG9tKSAqLworCVs2XSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQywgQVUxNTAwX1BDSV9JTlRELCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDA2IC0gQWRhcHRlckQtU2xvdDAgKHRvcCkgKi8KKwlbN10gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEQsIEFVMTUwMF9QQ0lfSU5UQywgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAwNyAtIEFkYXB0ZXJELVNsb3QxIChib3R0b20pICovCit9OworCiBleHRlcm4gaW50ICgqYm9hcmRfcGNpX2lkc2VsKSh1bnNpZ25lZCBpbnQgZGV2c2VsLCBpbnQgYXNzZXJ0KTsKIGludCBtdHgxX3BjaV9pZHNlbCh1bnNpZ25lZCBpbnQgZGV2c2VsLCBpbnQgYXNzZXJ0KTsKIAotdm9pZCBib2FyZF9yZXNldCh2b2lkKQorc3RhdGljIHZvaWQgbXR4MV9yZXNldChjaGFyICpjKQogewogCS8qIEhpdCBCQ1NSLlNZU1RFTV9DT05UUk9MW1NXX1JTVF0gKi8KIAlhdV93cml0ZWwoMHgwMDAwMDAwMCwgMHhBRTAwMDAxQyk7CiB9CiAKK3N0YXRpYyB2b2lkIG10eDFfcG93ZXJfb2ZmKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fQUxFUlQgIkl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHBvd2VyXG4iKTsKKwl3aGlsZSAoMSkKKwkJYXNtIHZvbGF0aWxlICgiLnNldCBtaXBzMyA7IHdhaXQgOyAuc2V0IG1pcHMxIik7Cit9CisKIHZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUKLQljaGFyICphcmdwdHI7Ci0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JYXJncHRyID0gc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9Iik7Ci0JaWYgKGFyZ3B0ciA9PSBOVUxMKSB7Ci0JCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCQlzdHJjYXQoYXJncHRyLCAiIGNvbnNvbGU9dHR5UzAsMTE1MjAwIik7Ci0JfQotI2VuZGlmCi0KIAlhbGNoZW15X2dwaW8yX2VuYWJsZSgpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQpAQCAtODYsNiArOTcsMTAgQEAKIAlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMTEsIDEpOwkvKiBncmVlbiBvbiAqLwogCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIxMiwgMCk7CS8qIHJlZCBvZmYgKi8KIAorCXBtX3Bvd2VyX29mZiA9IG10eDFfcG93ZXJfb2ZmOworCV9tYWNoaW5lX2hhbHQgPSBtdHgxX3Bvd2VyX29mZjsKKwlfbWFjaGluZV9yZXN0YXJ0ID0gbXR4MV9yZXNldDsKKwogCXByaW50ayhLRVJOX0lORk8gIjRHIFN5c3RlbXMgTVRYLTEgQm9hcmRcbiIpOwogfQogCkBAIC0xMDksMyArMTI0LDE1IEBACiAJYXVfc3luY191ZGVsYXkoMSk7CiAJcmV0dXJuIDE7CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IG10eDFfaW5pdF9pcnEodm9pZCkKK3sKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDRfSU5ULCBJUlFGX1RSSUdHRVJfSElHSCk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjAxX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjAyX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjAzX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjA1X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwobXR4MV9pbml0X2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9pbml0LmMgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9pbml0LmMKaW5kZXggNWU4NzFjOC4uZjhkMjU1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2luaXQuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KIAogI2luY2x1ZGUgPHByb20uaD4KIApAQCAtNTgsMyArNTksOCBAQAogCQlzdHJpY3Rfc3RydG91bChtZW1zaXplX3N0ciwgMCwgJm1lbXNpemUpOwogCWFkZF9tZW1vcnlfcmVnaW9uKDAsIG1lbXNpemUsIEJPT1RfTUVNX1JBTSk7CiB9CisKK3ZvaWQgcHJvbV9wdXRjaGFyKHVuc2lnbmVkIGNoYXIgYykKK3sKKwlhbGNoZW15X3VhcnRfcHV0Y2hhcihVQVJUMF9QSFlTX0FERFIsIGMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvaXJxbWFwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9pcnFtYXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFhYjEyYS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9pcnFtYXAuYworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUF1MXh4eCBpcnEgbWFwIHRhYmxlCi0gKgotICogQ29weXJpZ2h0IDIwMDMgRW1iZWRkZWQgRWRnZSwgTExDCi0gKgkJZGFuQGVtYmVkZGVkZWRnZS5jb20KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZgkgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUJTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQJICBgYEFTCUlTJycgQU5EICAgQU5ZCUVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsCSAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PCUVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFCSBMSUFCTEUgRk9SIEFOWQkgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQJICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMJT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsCU9SIFBST0ZJVFM7IE9SCUJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4JIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0KLWNoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKLQlbMF0gPSB7IC0xLCBJTlRBLCBJTlRBLCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDAwIC0gQWRhcHRlckEtU2xvdDAgKHRvcCkgKi8KLQlbMV0gPSB7IC0xLCBJTlRCLCBJTlRBLCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDAxIC0gQWRhcHRlckEtU2xvdDEgKGJvdHRvbSkgKi8KLQlbMl0gPSB7IC0xLCBJTlRDLCBJTlRELCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDAyIC0gQWRhcHRlckItU2xvdDAgKHRvcCkgKi8KLQlbM10gPSB7IC0xLCBJTlRELCBJTlRDLCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDAzIC0gQWRhcHRlckItU2xvdDEgKGJvdHRvbSkgKi8KLQlbNF0gPSB7IC0xLCBJTlRBLCBJTlRCLCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDA0IC0gQWRhcHRlckMtU2xvdDAgKHRvcCkgKi8KLQlbNV0gPSB7IC0xLCBJTlRCLCBJTlRBLCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDA1IC0gQWRhcHRlckMtU2xvdDEgKGJvdHRvbSkgKi8KLQlbNl0gPSB7IC0xLCBJTlRDLCBJTlRELCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDA2IC0gQWRhcHRlckQtU2xvdDAgKHRvcCkgKi8KLQlbN10gPSB7IC0xLCBJTlRELCBJTlRDLCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDA3IC0gQWRhcHRlckQtU2xvdDEgKGJvdHRvbSkgKi8KLX07Ci0KLXN0cnVjdCBhdTF4eHhfaXJxbWFwIF9faW5pdGRhdGEgYXUxeHh4X2lycV9tYXBbXSA9IHsKLSAgICAgICB7IEFVMTUwMF9HUElPXzIwNCwgSVJRRl9UUklHR0VSX0hJR0gsIDAgfSwKLSAgICAgICB7IEFVMTUwMF9HUElPXzIwMSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotICAgICAgIHsgQVUxNTAwX0dQSU9fMjAyLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0gICAgICAgeyBBVTE1MDBfR1BJT18yMDMsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLSAgICAgICB7IEFVMTUwMF9HUElPXzIwNSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotfTsKLQotCi12b2lkIF9faW5pdCBib2FyZF9pbml0X2lycSh2b2lkKQotewotCWF1MXh4eF9zZXR1cF9pcnFtYXAoYXUxeHh4X2lycV9tYXAsIEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL01ha2VmaWxlCmluZGV4IGRiM2M1MjYuLjRkYzgxZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9NYWtlZmlsZQpAQCAtNSw0ICs1LDYgQEAKICMgTWFrZWZpbGUgZm9yIE15Q2FibGUgWFhTMTUwMCBib2FyZC4KICMKIAotbGliLXkgOj0gaW5pdC5vIGJvYXJkX3NldHVwLm8gaXJxbWFwLm8KK2xpYi15IDo9IGluaXQubyBib2FyZF9zZXR1cC5vIHBsYXRmb3JtLm8KKworRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvYm9hcmRfc2V0dXAuYwppbmRleCA0ZGUyZDQ4Li40N2I0MjkyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9ib2FyZF9zZXR1cC5jCkBAIC0yNSwzMSArMjUsMzUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgogCisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KIAogI2luY2x1ZGUgPHByb20uaD4KIAotdm9pZCBib2FyZF9yZXNldCh2b2lkKQorc3RhdGljIHZvaWQgeHhzMTUwMF9yZXNldChjaGFyICpjKQogewogCS8qIEhpdCBCQ1NSLlNZU1RFTV9DT05UUk9MW1NXX1JTVF0gKi8KIAlhdV93cml0ZWwoMHgwMDAwMDAwMCwgMHhBRTAwMDAxQyk7CiB9CiAKK3N0YXRpYyB2b2lkIHh4czE1MDBfcG93ZXJfb2ZmKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fQUxFUlQgIkl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHBvd2VyXG4iKTsKKwl3aGlsZSAoMSkKKwkJYXNtIHZvbGF0aWxlICgiLnNldCBtaXBzMyA7IHdhaXQgOyAuc2V0IG1pcHMxIik7Cit9CisKIHZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpCiB7CiAJdTMyIHBpbl9mdW5jOwogCi0jaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUKLQljaGFyICphcmdwdHI7Ci0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JYXJncHRyID0gc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9Iik7Ci0JaWYgKGFyZ3B0ciA9PSBOVUxMKSB7Ci0JCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCQlzdHJjYXQoYXJncHRyLCAiIGNvbnNvbGU9dHR5UzAsMTE1MjAwIik7Ci0JfQotI2VuZGlmCisJcG1fcG93ZXJfb2ZmID0geHhzMTUwMF9wb3dlcl9vZmY7CisJX21hY2hpbmVfaGFsdCA9IHh4czE1MDBfcG93ZXJfb2ZmOworCV9tYWNoaW5lX3Jlc3RhcnQgPSB4eHMxNTAwX3Jlc2V0OwogCiAJYWxjaGVteV9ncGlvMV9pbnB1dF9lbmFibGUoKTsKIAlhbGNoZW15X2dwaW8yX2VuYWJsZSgpOwpAQCAtNjgsMjIgKzcyLDYgQEAKIAkvKiBFbmFibGUgRFRSID0gVVNCIHBvd2VyIHVwICovCiAJYXVfd3JpdGVsKDB4MDEsIFVBUlQzX0FERFIgKyBVQVJUX01DUik7IC8qIFVBUlRfTUNSX0RUUiBpcyAweDAxPz8/ICovCiAKLSNpZmRlZiBDT05GSUdfUENNQ0lBX1hYUzE1MDAKLQkvKiBHUElPIDAsIDEsIGFuZCA0IGFyZSBpbnB1dHMgKi8KLQlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX2lucHV0KDApOwotCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25faW5wdXQoMSk7Ci0JYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9pbnB1dCg0KTsKLQotCS8qIEdQSU8yIDIwOC85LzEwLzExIGFyZSBpbnB1dHMgKi8KLQlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX2lucHV0KDIwOCk7Ci0JYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9pbnB1dCgyMDkpOwotCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25faW5wdXQoMjEwKTsKLQlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX2lucHV0KDIxMSk7Ci0KLQkvKiBUdXJuIG9mZiBwb3dlciAqLwotCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIxNCwgMCk7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19QQ0kKICNpZiBkZWZpbmVkKF9fTUlQU0VCX18pCiAJYXVfd3JpdGVsKDB4ZiB8ICgyIDw8IDYpIHwgKDEgPDwgNCksIEF1MTUwMF9QQ0lfQ0ZHKTsKQEAgLTkyLDMgKzgwLDIzIEBACiAjZW5kaWYKICNlbmRpZgogfQorCitzdGF0aWMgaW50IF9faW5pdCB4eHMxNTAwX2luaXRfaXJxKHZvaWQpCit7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjA0X0lOVCwgSVJRRl9UUklHR0VSX0hJR0gpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwMl9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwM19JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwNV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwN19JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPM19JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzRfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0YgaXJxICovCisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPNV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHh4czE1MDBfaW5pdF9pcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9pbml0LmMgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2luaXQuYwppbmRleCA0NTZmYTE0Li4xNTEyNWMyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2luaXQuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2luaXQuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogCiAjaW5jbHVkZSA8cHJvbS5oPgogCkBAIC01NiwzICs1Nyw4IEBACiAJCXN0cmljdF9zdHJ0b3VsKG1lbXNpemVfc3RyLCAwLCAmbWVtc2l6ZSk7CiAJYWRkX21lbW9yeV9yZWdpb24oMCwgbWVtc2l6ZSwgQk9PVF9NRU1fUkFNKTsKIH0KKwordm9pZCBwcm9tX3B1dGNoYXIodW5zaWduZWQgY2hhciBjKQoreworCWFsY2hlbXlfdWFydF9wdXRjaGFyKFVBUlQwX1BIWVNfQUREUiwgYyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2lycW1hcC5jIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9pcnFtYXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYwZjMwMS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2lycW1hcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICoJQXUxeHh4IGlycSBtYXAgdGFibGUKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMyBFbWJlZGRlZCBFZGdlLCBMTEMKLSAqCQlkYW5AZW1iZWRkZWRlZGdlLmNvbQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUJIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mCSB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQlMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRAkgIGBgQVMJSVMnJyBBTkQgICBBTlkJRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywJICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8JRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUJIExJQUJMRSBGT1IgQU5ZCSAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRAkgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUwlPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwJT1IgUFJPRklUUzsgT1IJQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgkgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KLQotc3RydWN0IGF1MXh4eF9pcnFtYXAgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewotCXsgQVUxNTAwX0dQSU9fMjA0LCBJUlFGX1RSSUdHRVJfSElHSCwgMCB9LAotCXsgQVUxNTAwX0dQSU9fMjAxLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTE1MDBfR1BJT18yMDIsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQl7IEFVMTUwMF9HUElPXzIwMywgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCXsgQVUxNTAwX0dQSU9fMjA1LCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTE1MDBfR1BJT18yMDcsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQotCXsgQVUxMDAwX0dQSU9fMCwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCXsgQVUxMDAwX0dQSU9fMSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCXsgQVUxMDAwX0dQSU9fMiwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCXsgQVUxMDAwX0dQSU9fMywgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCXsgQVUxMDAwX0dQSU9fNCwgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBDRiBpbnRlcnJ1cHQgKi8KLQl7IEFVMTAwMF9HUElPXzUsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLX07Ci0KLXZvaWQgX19pbml0IGJvYXJkX2luaXRfaXJxKHZvaWQpCi17Ci0JYXUxeHh4X3NldHVwX2lycW1hcChhdTF4eHhfaXJxX21hcCwgQVJSQVlfU0laRShhdTF4eHhfaXJxX21hcCkpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4N2M0NWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL3BsYXRmb3JtLmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIFhYUzE1MDAgYm9hcmQgcGxhdGZvcm0gZGV2aWNlIHJlZ2lzdHJhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYW51ZWwgTGF1c3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgeHhzMTUwMF9wY21jaWFfcmVzW10gPSB7CisJeworCQkubmFtZQk9ICJwY21jaWEtaW8iLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gUENNQ0lBX0lPX1BIWVNfQUREUiwKKwkJLmVuZAk9IFBDTUNJQV9JT19QSFlTX0FERFIgKyAweDAwMDQwMDAwMCAtIDEsCisJfSwKKwl7CisJCS5uYW1lCT0gInBjbWNpYS1hdHRyIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IFBDTUNJQV9BVFRSX1BIWVNfQUREUiwKKwkJLmVuZAk9IFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDAwNDAwMDAwIC0gMSwKKwl9LAorCXsKKwkJLm5hbWUJPSAicGNtY2lhLW1lbSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSBQQ01DSUFfTUVNX1BIWVNfQUREUiwKKwkJLmVuZAk9IFBDTUNJQV9NRU1fUEhZU19BRERSICsgMHgwMDA0MDAwMDAgLSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB4eHMxNTAwX3BjbWNpYV9kZXYgPSB7CisJLm5hbWUJCT0gInh4czE1MDBfcGNtY2lhIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHh4czE1MDBfcGNtY2lhX3JlcyksCisJLnJlc291cmNlCT0geHhzMTUwMF9wY21jaWFfcmVzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnh4czE1MDBfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJJnh4czE1MDBfcGNtY2lhX2RldiwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHh4czE1MDBfZGV2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoeHhzMTUwMF9kZXZzLAorCQkJCSAgICBBUlJBWV9TSVpFKHh4czE1MDBfZGV2cykpOworfQorZGV2aWNlX2luaXRjYWxsKHh4czE1MDBfZGV2X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyNy9jbG9jay5jIGIvYXJjaC9taXBzL2FyNy9jbG9jay5jCmluZGV4IGNjNjVjOGUuLmZjMGU3MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvY2xvY2suYworKysgYi9hcmNoL21pcHMvYXI3L2Nsb2NrLmMKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEZlbGl4IEZpZXRrYXUgPG5iZEBvcGVud3J0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFdWdlbmUgS29uZXYgPGVqa2FAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI0LDYgKzI1LDggQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2djZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXI3L2FyNy5oPgpAQCAtOTQsMTIgKzk3LDE2IEBACiAJc3RydWN0IHRuZXRkNzIwMF9jbG9jayB1c2I7CiB9OwogCi1pbnQgYXI3X2NwdV9jbG9jayA9IDE1MDAwMDAwMDsKLUVYUE9SVF9TWU1CT0woYXI3X2NwdV9jbG9jayk7Ci1pbnQgYXI3X2J1c19jbG9jayA9IDEyNTAwMDAwMDsKLUVYUE9SVF9TWU1CT0woYXI3X2J1c19jbG9jayk7Ci1pbnQgYXI3X2RzcF9jbG9jazsKLUVYUE9SVF9TWU1CT0woYXI3X2RzcF9jbG9jayk7CitzdGF0aWMgc3RydWN0IGNsayBidXNfY2xrID0geworCS5yYXRlCT0gMTI1MDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY3B1X2NsayA9IHsKKwkucmF0ZQk9IDE1MDAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9jbGs7CitzdGF0aWMgc3RydWN0IGNsayB2YnVzX2NsazsKIAogc3RhdGljIHZvaWQgYXBwcm94aW1hdGUoaW50IGJhc2UsIGludCB0YXJnZXQsIGludCAqcHJlZGl2LAogCQkJaW50ICpwb3N0ZGl2LCBpbnQgKm11bCkKQEAgLTE4NSw3ICsxOTIsNyBAQAogCQliYXNlX2Nsb2NrID0gQVI3X1hUQUxfQ0xPQ0s7CiAJCWJyZWFrOwogCWNhc2UgQk9PVF9QTExfU09VUkNFX0NQVToKLQkJYmFzZV9jbG9jayA9IGFyN19jcHVfY2xvY2s7CisJCWJhc2VfY2xvY2sgPSBjcHVfY2xrLnJhdGU7CiAJCWJyZWFrOwogCX0KIApAQCAtMjEyLDExICsyMTksMTEgQEAKIAl1MzIgKmJvb3RjciwgdTMyIGZyZXF1ZW5jeSkKIHsKIAlpbnQgcHJlZGl2LCBwb3N0ZGl2LCBtdWw7Ci0JaW50IGJhc2VfY2xvY2sgPSBhcjdfYnVzX2Nsb2NrOworCWludCBiYXNlX2Nsb2NrID0gYnVzX2Nsay5yYXRlOwogCiAJc3dpdGNoICgoKmJvb3RjciAmIChCT09UX1BMTF9TT1VSQ0VfTUFTSyA8PCBzaGlmdCkpID4+IHNoaWZ0KSB7CiAJY2FzZSBCT09UX1BMTF9TT1VSQ0VfQlVTOgotCQliYXNlX2Nsb2NrID0gYXI3X2J1c19jbG9jazsKKwkJYmFzZV9jbG9jayA9IGJ1c19jbGsucmF0ZTsKIAkJYnJlYWs7CiAJY2FzZSBCT09UX1BMTF9TT1VSQ0VfUkVGOgogCQliYXNlX2Nsb2NrID0gQVI3X1JFRl9DTE9DSzsKQEAgLTIyNSw3ICsyMzIsNyBAQAogCQliYXNlX2Nsb2NrID0gQVI3X1hUQUxfQ0xPQ0s7CiAJCWJyZWFrOwogCWNhc2UgQk9PVF9QTExfU09VUkNFX0NQVToKLQkJYmFzZV9jbG9jayA9IGFyN19jcHVfY2xvY2s7CisJCWJhc2VfY2xvY2sgPSBjcHVfY2xrLnJhdGU7CiAJCWJyZWFrOwogCX0KIApAQCAtMjQ3LDE4ICsyNTQsMTggQEAKIAkJCQkJaW9yZW1hcF9ub2NhY2hlKFVSOF9SRUdTX0NMT0NLUywKIAkJCQkJc2l6ZW9mKHN0cnVjdCB0bmV0ZDczMDBfY2xvY2tzKSk7CiAKLQlhcjdfYnVzX2Nsb2NrID0gdG5ldGQ3MzAwX2dldF9jbG9jayhCVVNfUExMX1NPVVJDRV9TSElGVCwKKwlidXNfY2xrLnJhdGUgPSB0bmV0ZDczMDBfZ2V0X2Nsb2NrKEJVU19QTExfU09VUkNFX1NISUZULAogCQkmY2xvY2tzLT5idXMsIGJvb3RjciwgQVI3X0FGRV9DTE9DSyk7CiAKIAlpZiAoKmJvb3RjciAmIEJPT1RfUExMX0FTWU5DX01PREUpCi0JCWFyN19jcHVfY2xvY2sgPSB0bmV0ZDczMDBfZ2V0X2Nsb2NrKENQVV9QTExfU09VUkNFX1NISUZULAorCQljcHVfY2xrLnJhdGUgPSB0bmV0ZDczMDBfZ2V0X2Nsb2NrKENQVV9QTExfU09VUkNFX1NISUZULAogCQkJJmNsb2Nrcy0+Y3B1LCBib290Y3IsIEFSN19BRkVfQ0xPQ0spOwogCWVsc2UKLQkJYXI3X2NwdV9jbG9jayA9IGFyN19idXNfY2xvY2s7CisJCWNwdV9jbGsucmF0ZSA9IGJ1c19jbGsucmF0ZTsKIAotCWlmIChhcjdfZHNwX2Nsb2NrID09IDI1MDAwMDAwMCkKKwlpZiAoZHNwX2Nsay5yYXRlID09IDI1MDAwMDAwMCkKIAkJdG5ldGQ3MzAwX3NldF9jbG9jayhEU1BfUExMX1NPVVJDRV9TSElGVCwgJmNsb2Nrcy0+ZHNwLAotCQkJYm9vdGNyLCBhcjdfZHNwX2Nsb2NrKTsKKwkJCWJvb3RjciwgZHNwX2Nsay5yYXRlKTsKIAogCWlvdW5tYXAoY2xvY2tzKTsKIAlpb3VubWFwKGJvb3Rjcik7CkBAIC0zNDMsMjAgKzM1MCwyMCBAQAogCQlwcmludGsoS0VSTl9JTkZPICJDbG9ja3M6IFNldHRpbmcgRFNQIGNsb2NrXG4iKTsKIAkJY2FsY3VsYXRlKGRzcF9iYXNlLCBUTkVURDcyMDBfREVGX0RTUF9DTEssCiAJCQkmZHNwX3ByZWRpdiwgJmRzcF9wb3N0ZGl2LCAmZHNwX211bCk7Ci0JCWFyN19idXNfY2xvY2sgPQorCQlidXNfY2xrLnJhdGUgPQogCQkJKChkc3BfYmFzZSAvIGRzcF9wcmVkaXYpICogZHNwX211bCkgLyBkc3BfcG9zdGRpdjsKIAkJdG5ldGQ3MjAwX3NldF9jbG9jayhkc3BfYmFzZSwgJmNsb2Nrcy0+ZHNwLAogCQkJZHNwX3ByZWRpdiwgZHNwX3Bvc3RkaXYgKiAyLCBkc3BfcG9zdGRpdiwgZHNwX211bCAqIDIsCi0JCQlhcjdfYnVzX2Nsb2NrKTsKKwkJCWJ1c19jbGsucmF0ZSk7CiAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tzOiBTZXR0aW5nIENQVSBjbG9ja1xuIik7CiAJCWNhbGN1bGF0ZShjcHVfYmFzZSwgVE5FVEQ3MjAwX0RFRl9DUFVfQ0xLLCAmY3B1X3ByZWRpdiwKIAkJCSZjcHVfcG9zdGRpdiwgJmNwdV9tdWwpOwotCQlhcjdfY3B1X2Nsb2NrID0KKwkJY3B1X2Nsay5yYXRlID0KIAkJCSgoY3B1X2Jhc2UgLyBjcHVfcHJlZGl2KSAqIGNwdV9tdWwpIC8gY3B1X3Bvc3RkaXY7CiAJCXRuZXRkNzIwMF9zZXRfY2xvY2soY3B1X2Jhc2UsICZjbG9ja3MtPmNwdSwKIAkJCWNwdV9wcmVkaXYsIGNwdV9wb3N0ZGl2LCAtMSwgY3B1X211bCwKLQkJCWFyN19jcHVfY2xvY2spOworCQkJY3B1X2Nsay5yYXRlKTsKIAogCX0gZWxzZQogCQlpZiAoKmJvb3RjciAmIEJPT1RfUExMXzJUTzFfTU9ERSkgewpAQCAtMzY1LDQ4ICszNzIsOTAgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gIkNsb2NrczogU2V0dGluZyBDUFUgY2xvY2tcbiIpOwogCQkJY2FsY3VsYXRlKGNwdV9iYXNlLCBUTkVURDcyMDBfREVGX0NQVV9DTEssICZjcHVfcHJlZGl2LAogCQkJCSZjcHVfcG9zdGRpdiwgJmNwdV9tdWwpOwotCQkJYXI3X2NwdV9jbG9jayA9ICgoY3B1X2Jhc2UgLyBjcHVfcHJlZGl2KSAqIGNwdV9tdWwpCisJCQljcHVfY2xrLnJhdGUgPSAoKGNwdV9iYXNlIC8gY3B1X3ByZWRpdikgKiBjcHVfbXVsKQogCQkJCQkJCQkvIGNwdV9wb3N0ZGl2OwogCQkJdG5ldGQ3MjAwX3NldF9jbG9jayhjcHVfYmFzZSwgJmNsb2Nrcy0+Y3B1LAogCQkJCWNwdV9wcmVkaXYsIGNwdV9wb3N0ZGl2LCAtMSwgY3B1X211bCwKLQkJCQlhcjdfY3B1X2Nsb2NrKTsKKwkJCQljcHVfY2xrLnJhdGUpOwogCiAJCQlwcmludGsoS0VSTl9JTkZPICJDbG9ja3M6IFNldHRpbmcgRFNQIGNsb2NrXG4iKTsKIAkJCWNhbGN1bGF0ZShkc3BfYmFzZSwgVE5FVEQ3MjAwX0RFRl9EU1BfQ0xLLCAmZHNwX3ByZWRpdiwKIAkJCQkmZHNwX3Bvc3RkaXYsICZkc3BfbXVsKTsKLQkJCWFyN19idXNfY2xvY2sgPSBhcjdfY3B1X2Nsb2NrIC8gMjsKKwkJCWJ1c19jbGsucmF0ZSA9IGNwdV9jbGsucmF0ZSAvIDI7CiAJCQl0bmV0ZDcyMDBfc2V0X2Nsb2NrKGRzcF9iYXNlLCAmY2xvY2tzLT5kc3AsCiAJCQkJZHNwX3ByZWRpdiwgZHNwX3Bvc3RkaXYgKiAyLCBkc3BfcG9zdGRpdiwKLQkJCQlkc3BfbXVsICogMiwgYXI3X2J1c19jbG9jayk7CisJCQkJZHNwX211bCAqIDIsIGJ1c19jbGsucmF0ZSk7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJDbG9ja3M6IFN5bmMgMToxIG1vZGVcbiIpOwogCiAJCQlwcmludGsoS0VSTl9JTkZPICJDbG9ja3M6IFNldHRpbmcgRFNQIGNsb2NrXG4iKTsKIAkJCWNhbGN1bGF0ZShkc3BfYmFzZSwgVE5FVEQ3MjAwX0RFRl9EU1BfQ0xLLCAmZHNwX3ByZWRpdiwKIAkJCQkmZHNwX3Bvc3RkaXYsICZkc3BfbXVsKTsKLQkJCWFyN19idXNfY2xvY2sgPSAoKGRzcF9iYXNlIC8gZHNwX3ByZWRpdikgKiBkc3BfbXVsKQorCQkJYnVzX2Nsay5yYXRlID0gKChkc3BfYmFzZSAvIGRzcF9wcmVkaXYpICogZHNwX211bCkKIAkJCQkJCQkJLyBkc3BfcG9zdGRpdjsKIAkJCXRuZXRkNzIwMF9zZXRfY2xvY2soZHNwX2Jhc2UsICZjbG9ja3MtPmRzcCwKIAkJCQlkc3BfcHJlZGl2LCBkc3BfcG9zdGRpdiAqIDIsIGRzcF9wb3N0ZGl2LAotCQkJCWRzcF9tdWwgKiAyLCBhcjdfYnVzX2Nsb2NrKTsKKwkJCQlkc3BfbXVsICogMiwgYnVzX2Nsay5yYXRlKTsKIAotCQkJYXI3X2NwdV9jbG9jayA9IGFyN19idXNfY2xvY2s7CisJCQljcHVfY2xrLnJhdGUgPSBidXNfY2xrLnJhdGU7CiAJCX0KIAogCXByaW50ayhLRVJOX0lORk8gIkNsb2NrczogU2V0dGluZyBVU0IgY2xvY2tcbiIpOwotCXVzYl9iYXNlID0gYXI3X2J1c19jbG9jazsKKwl1c2JfYmFzZSA9IGJ1c19jbGsucmF0ZTsKIAljYWxjdWxhdGUodXNiX2Jhc2UsIFRORVRENzIwMF9ERUZfVVNCX0NMSywgJnVzYl9wcmVkaXYsCiAJCSZ1c2JfcG9zdGRpdiwgJnVzYl9tdWwpOwogCXRuZXRkNzIwMF9zZXRfY2xvY2sodXNiX2Jhc2UsICZjbG9ja3MtPnVzYiwKIAkJdXNiX3ByZWRpdiwgdXNiX3Bvc3RkaXYsIC0xLCB1c2JfbXVsLAogCQlUTkVURDcyMDBfREVGX1VTQl9DTEspOwogCi0JYXI3X2RzcF9jbG9jayA9IGFyN19jcHVfY2xvY2s7CisJZHNwX2Nsay5yYXRlID0gY3B1X2Nsay5yYXRlOwogCiAJaW91bm1hcChjbG9ja3MpOwogCWlvdW5tYXAoYm9vdGNyKTsKIH0KIAorLyoKKyAqIExpbnV4IGNsb2NrIEFQSQorICovCitpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKK30KK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsay0+cmF0ZTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKKworc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQoreworCWlmICghc3RyY21wKGlkLCAiYnVzIikpCisJCXJldHVybiAmYnVzX2NsazsKKwkvKiBjcG1hYyBhbmQgdmJ1cyBzaGFyZSB0aGUgc2FtZSByYXRlICovCisJaWYgKCFzdHJjbXAoaWQsICJjcG1hYyIpKQorCQlyZXR1cm4gJnZidXNfY2xrOworCWlmICghc3RyY21wKGlkLCAiY3B1IikpCisJCXJldHVybiAmY3B1X2NsazsKKwlpZiAoIXN0cmNtcChpZCwgImRzcCIpKTsKKwkJcmV0dXJuICZkc3BfY2xrOworCWlmICghc3RyY21wKGlkLCAidmJ1cyIpKQorCQlyZXR1cm4gJnZidXNfY2xrOworCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKKwordm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKK3sKK30KK0VYUE9SVF9TWU1CT0woY2xrX3B1dCk7CisKIGludCBfX2luaXQgYXI3X2luaXRfY2xvY2tzKHZvaWQpCiB7CiAJc3dpdGNoIChhcjdfY2hpcF9pZCgpKSB7CkBAIC00MTUsMTIgKzQ2NCwxNCBAQAogCQl0bmV0ZDcyMDBfaW5pdF9jbG9ja3MoKTsKIAkJYnJlYWs7CiAJY2FzZSBBUjdfQ0hJUF83MzAwOgotCQlhcjdfZHNwX2Nsb2NrID0gdG5ldGQ3MzAwX2RzcF9jbG9jaygpOworCQlkc3BfY2xrLnJhdGUgPSB0bmV0ZDczMDBfZHNwX2Nsb2NrKCk7CiAJCXRuZXRkNzMwMF9pbml0X2Nsb2NrcygpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CisJLyogYWRqdXN0IHZidXMgY2xvY2sgcmF0ZSAqLworCXZidXNfY2xrLnJhdGUgPSBidXNfY2xrLnJhdGUgLyAyOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L2dwaW8uYyBiL2FyY2gvbWlwcy9hcjcvZ3Bpby5jCmluZGV4IDc0ZTE0YTMuLmMzMmZiYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvZ3Bpby5jCisrKyBiL2FyY2gvbWlwcy9hcjcvZ3Bpby5jCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBGZWxpeCBGaWV0a2F1IDxuYmRAb3BlbndydC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXVnZW5lIEtvbmV2IDxlamthQG9wZW53cnQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xOCwzMSArMTksMTEzIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLWFyNy9ncGlvLmg+CiAKLXN0YXRpYyBjb25zdCBjaGFyICphcjdfZ3Bpb19saXN0W0FSN19HUElPX01BWF07CitzdHJ1Y3QgYXI3X2dwaW9fY2hpcCB7CisJdm9pZCBfX2lvbWVtCQkqcmVnczsKKwlzdHJ1Y3QgZ3Bpb19jaGlwCWNoaXA7Cit9OwogCi1pbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQorc3RhdGljIGludCBhcjdfZ3Bpb19nZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgZ3BpbykKIHsKLQlpZiAoZ3BpbyA+PSBBUjdfR1BJT19NQVgpCi0JCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBhcjdfZ3Bpb19jaGlwICpncGNoID0KKwkJCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGFyN19ncGlvX2NoaXAsIGNoaXApOworCXZvaWQgX19pb21lbSAqZ3Bpb19pbiA9IGdwY2gtPnJlZ3MgKyBBUjdfR1BJT19JTlBVVDsKIAotCWlmIChhcjdfZ3Bpb19saXN0W2dwaW9dKQotCQlyZXR1cm4gLUVCVVNZOworCXJldHVybiByZWFkbChncGlvX2luKSAmICgxIDw8IGdwaW8pOworfQogCi0JaWYgKGxhYmVsKQotCQlhcjdfZ3Bpb19saXN0W2dwaW9dID0gbGFiZWw7Ci0JZWxzZQotCQlhcjdfZ3Bpb19saXN0W2dwaW9dID0gImJ1c3kiOworc3RhdGljIHZvaWQgYXI3X2dwaW9fc2V0X3ZhbHVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJdW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCXN0cnVjdCBhcjdfZ3Bpb19jaGlwICpncGNoID0KKwkJCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGFyN19ncGlvX2NoaXAsIGNoaXApOworCXZvaWQgX19pb21lbSAqZ3Bpb19vdXQgPSBncGNoLT5yZWdzICsgQVI3X0dQSU9fT1VUUFVUOworCXVuc2lnbmVkIHRtcDsKKworCXRtcCA9IHJlYWRsKGdwaW9fb3V0KSAmIH4oMSA8PCBncGlvKTsKKwlpZiAodmFsdWUpCisJCXRtcCB8PSAxIDw8IGdwaW87CisJd3JpdGVsKHRtcCwgZ3Bpb19vdXQpOworfQorCitzdGF0aWMgaW50IGFyN19ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBncGlvKQoreworCXN0cnVjdCBhcjdfZ3Bpb19jaGlwICpncGNoID0KKwkJCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGFyN19ncGlvX2NoaXAsIGNoaXApOworCXZvaWQgX19pb21lbSAqZ3Bpb19kaXIgPSBncGNoLT5yZWdzICsgQVI3X0dQSU9fRElSOworCisJd3JpdGVsKHJlYWRsKGdwaW9fZGlyKSB8ICgxIDw8IGdwaW8pLCBncGlvX2Rpcik7CiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb19yZXF1ZXN0KTsKIAotdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgZ3BpbykKK3N0YXRpYyBpbnQgYXI3X2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCiB7Ci0JQlVHX09OKCFhcjdfZ3Bpb19saXN0W2dwaW9dKTsKLQlhcjdfZ3Bpb19saXN0W2dwaW9dID0gTlVMTDsKKwlzdHJ1Y3QgYXI3X2dwaW9fY2hpcCAqZ3BjaCA9CisJCQkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhcjdfZ3Bpb19jaGlwLCBjaGlwKTsKKwl2b2lkIF9faW9tZW0gKmdwaW9fZGlyID0gZ3BjaC0+cmVncyArIEFSN19HUElPX0RJUjsKKworCWFyN19ncGlvX3NldF92YWx1ZShjaGlwLCBncGlvLCB2YWx1ZSk7CisJd3JpdGVsKHJlYWRsKGdwaW9fZGlyKSAmIH4oMSA8PCBncGlvKSwgZ3Bpb19kaXIpOworCisJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZnJlZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXI3X2dwaW9fY2hpcCBhcjdfZ3Bpb19jaGlwID0geworCS5jaGlwID0geworCQkubGFiZWwJCQk9ICJhcjctZ3BpbyIsCisJCS5kaXJlY3Rpb25faW5wdXQJPSBhcjdfZ3Bpb19kaXJlY3Rpb25faW5wdXQsCisJCS5kaXJlY3Rpb25fb3V0cHV0CT0gYXI3X2dwaW9fZGlyZWN0aW9uX291dHB1dCwKKwkJLnNldAkJCT0gYXI3X2dwaW9fc2V0X3ZhbHVlLAorCQkuZ2V0CQkJPSBhcjdfZ3Bpb19nZXRfdmFsdWUsCisJCS5iYXNlCQkJPSAwLAorCQkubmdwaW8JCQk9IEFSN19HUElPX01BWCwKKwl9Cit9OworCitpbnQgYXI3X2dwaW9fZW5hYmxlKHVuc2lnbmVkIGdwaW8pCit7CisJdm9pZCBfX2lvbWVtICpncGlvX2VuID0gYXI3X2dwaW9fY2hpcC5yZWdzICsgQVI3X0dQSU9fRU5BQkxFOworCisJd3JpdGVsKHJlYWRsKGdwaW9fZW4pIHwgKDEgPDwgZ3BpbyksIGdwaW9fZW4pOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGFyN19ncGlvX2VuYWJsZSk7CisKK2ludCBhcjdfZ3Bpb19kaXNhYmxlKHVuc2lnbmVkIGdwaW8pCit7CisJdm9pZCBfX2lvbWVtICpncGlvX2VuID0gYXI3X2dwaW9fY2hpcC5yZWdzICsgQVI3X0dQSU9fRU5BQkxFOworCisJd3JpdGVsKHJlYWRsKGdwaW9fZW4pICYgfigxIDw8IGdwaW8pLCBncGlvX2VuKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChhcjdfZ3Bpb19kaXNhYmxlKTsKKworc3RhdGljIGludCBfX2luaXQgYXI3X2dwaW9faW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlhcjdfZ3Bpb19jaGlwLnJlZ3MgPSBpb3JlbWFwX25vY2FjaGUoQVI3X1JFR1NfR1BJTywKKwkJCQkJQVI3X1JFR1NfR1BJTyArIDB4MTApOworCisJaWYgKCFhcjdfZ3Bpb19jaGlwLnJlZ3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhcjctZ3BpbzogZmFpbGVkIHRvIGlvcmVtYXAgcmVnc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IGdwaW9jaGlwX2FkZCgmYXI3X2dwaW9fY2hpcC5jaGlwKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiYXI3LWdwaW86IGZhaWxlZCB0byBhZGQgZ3Bpb2NoaXBcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlwcmludGsoS0VSTl9JTkZPICJhcjctZ3BpbzogcmVnaXN0ZXJlZCAlZCBHUElPc1xuIiwKKwkJCQlhcjdfZ3Bpb19jaGlwLmNoaXAubmdwaW8pOworCXJldHVybiByZXQ7Cit9CithcmNoX2luaXRjYWxsKGFyN19ncGlvX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyNy9tZW1vcnkuYyBiL2FyY2gvbWlwcy9hcjcvbWVtb3J5LmMKaW5kZXggNjk2YzcyMy4uMjhhYmZlZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9tZW1vcnkuYworKysgYi9hcmNoL21pcHMvYXI3L21lbW9yeS5jCkBAIC02Miw4ICs2Miw3IEBACiAJdW5zaWduZWQgbG9uZyBwYWdlczsKIAogCXBhZ2VzID0gbWVtc2l6ZSgpID4+IFBBR0VfU0hJRlQ7Ci0JYWRkX21lbW9yeV9yZWdpb24oUEhZU19PRkZTRVQsIHBhZ2VzIDw8IFBBR0VfU0hJRlQsCi0JCQkgIEJPT1RfTUVNX1JBTSk7CisJYWRkX21lbW9yeV9yZWdpb24oUEhZU19PRkZTRVQsIHBhZ2VzIDw8IFBBR0VfU0hJRlQsIEJPT1RfTUVNX1JBTSk7CiB9CiAKIHZvaWQgX19pbml0IHByb21fZnJlZV9wcm9tX21lbW9yeSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCmluZGV4IDg1MTY5YzAuLjI0NmRmN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKQEAgLTM0LDQ1ICszNCw1MCBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGh5X2ZpeGVkLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWFyNy9hcjcuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hcjcvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWFyNy9wcm9tLmg+CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVkxZTlEgQnVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0cnVjdCBwbGF0X3ZseW5xX2RhdGEgewogCXN0cnVjdCBwbGF0X3ZseW5xX29wcyBvcHM7CiAJaW50IGdwaW9fYml0OwogCWludCByZXNldF9iaXQ7CiB9OwogCi0KIHN0YXRpYyBpbnQgdmx5bnFfb24oc3RydWN0IHZseW5xX2RldmljZSAqZGV2KQogewotCWludCByZXN1bHQ7CisJaW50IHJldDsKIAlzdHJ1Y3QgcGxhdF92bHlucV9kYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlyZXN1bHQgPSBncGlvX3JlcXVlc3QocGRhdGEtPmdwaW9fYml0LCAidmx5bnEiKTsKLQlpZiAocmVzdWx0KQorCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb19iaXQsICJ2bHlucSIpOworCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCiAJYXI3X2RldmljZV9yZXNldChwZGF0YS0+cmVzZXRfYml0KTsKIAotCXJlc3VsdCA9IGFyN19ncGlvX2Rpc2FibGUocGRhdGEtPmdwaW9fYml0KTsKLQlpZiAocmVzdWx0KQorCXJldCA9IGFyN19ncGlvX2Rpc2FibGUocGRhdGEtPmdwaW9fYml0KTsKKwlpZiAocmV0KQogCQlnb3RvIG91dF9lbmFibGVkOwogCi0JcmVzdWx0ID0gYXI3X2dwaW9fZW5hYmxlKHBkYXRhLT5ncGlvX2JpdCk7Ci0JaWYgKHJlc3VsdCkKKwlyZXQgPSBhcjdfZ3Bpb19lbmFibGUocGRhdGEtPmdwaW9fYml0KTsKKwlpZiAocmV0KQogCQlnb3RvIG91dF9lbmFibGVkOwogCi0JcmVzdWx0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvX2JpdCwgMCk7Ci0JaWYgKHJlc3VsdCkKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQocGRhdGEtPmdwaW9fYml0LCAwKTsKKwlpZiAocmV0KQogCQlnb3RvIG91dF9ncGlvX2VuYWJsZWQ7CiAKIAltc2xlZXAoNTApOwogCiAJZ3Bpb19zZXRfdmFsdWUocGRhdGEtPmdwaW9fYml0LCAxKTsKKwogCW1zbGVlcCg1MCk7CiAKIAlyZXR1cm4gMDsKQEAgLTgzLDM1MiArODgsMjA4IEBACiAJYXI3X2RldmljZV9kaXNhYmxlKHBkYXRhLT5yZXNldF9iaXQpOwogCWdwaW9fZnJlZShwZGF0YS0+Z3Bpb19iaXQpOwogb3V0OgotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgdmx5bnFfb2ZmKHN0cnVjdCB2bHlucV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGxhdF92bHlucV9kYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKIAlhcjdfZ3Bpb19kaXNhYmxlKHBkYXRhLT5ncGlvX2JpdCk7CiAJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX2JpdCk7CiAJYXI3X2RldmljZV9kaXNhYmxlKHBkYXRhLT5yZXNldF9iaXQpOwogfQogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHBoeXNtYXBfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLm5hbWUgPSAibWVtIiwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkuc3RhcnQgPSAweDEwMDAwMDAwLAotCS5lbmQgPSAweDEwN2ZmZmZmLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjcG1hY19sb3dfcmVzW10gPSB7Ci0JewotCQkubmFtZSA9ICJyZWdzIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JCS5zdGFydCA9IEFSN19SRUdTX01BQzAsCi0JCS5lbmQgPSBBUjdfUkVHU19NQUMwICsgMHg3ZmYsCi0JfSwKLQl7Ci0JCS5uYW1lID0gImlycSIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCQkuc3RhcnQgPSAyNywKLQkJLmVuZCA9IDI3LAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNwbWFjX2hpZ2hfcmVzW10gPSB7Ci0JewotCQkubmFtZSA9ICJyZWdzIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JCS5zdGFydCA9IEFSN19SRUdTX01BQzEsCi0JCS5lbmQgPSBBUjdfUkVHU19NQUMxICsgMHg3ZmYsCi0JfSwKLQl7Ci0JCS5uYW1lID0gImlycSIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCQkuc3RhcnQgPSA0MSwKLQkJLmVuZCA9IDQxLAotCX0sCi19OwotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHZseW5xX2xvd19yZXNbXSA9IHsKIAl7Ci0JCS5uYW1lID0gInJlZ3MiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJLnN0YXJ0ID0gQVI3X1JFR1NfVkxZTlEwLAotCQkuZW5kID0gQVI3X1JFR1NfVkxZTlEwICsgMHhmZiwKKwkJLm5hbWUJPSAicmVncyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSBBUjdfUkVHU19WTFlOUTAsCisJCS5lbmQJPSBBUjdfUkVHU19WTFlOUTAgKyAweGZmLAogCX0sCiAJewotCQkubmFtZSA9ICJpcnEiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJLnN0YXJ0ID0gMjksCi0JCS5lbmQgPSAyOSwKKwkJLm5hbWUJPSAiaXJxIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydAk9IDI5LAorCQkuZW5kCT0gMjksCiAJfSwKIAl7Ci0JCS5uYW1lID0gIm1lbSIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkuc3RhcnQgPSAweDA0MDAwMDAwLAotCQkuZW5kID0gMHgwNGZmZmZmZiwKKwkJLm5hbWUJPSAibWVtIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IDB4MDQwMDAwMDAsCisJCS5lbmQJPSAweDA0ZmZmZmZmLAogCX0sCiAJewotCQkubmFtZSA9ICJkZXZpcnEiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJLnN0YXJ0ID0gODAsCi0JCS5lbmQgPSAxMTEsCisJCS5uYW1lCT0gImRldmlycSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQJPSA4MCwKKwkJLmVuZAk9IDExMSwKIAl9LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2bHlucV9oaWdoX3Jlc1tdID0gewogCXsKLQkJLm5hbWUgPSAicmVncyIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkuc3RhcnQgPSBBUjdfUkVHU19WTFlOUTEsCi0JCS5lbmQgPSBBUjdfUkVHU19WTFlOUTEgKyAweGZmLAorCQkubmFtZQk9ICJyZWdzIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IEFSN19SRUdTX1ZMWU5RMSwKKwkJLmVuZAk9IEFSN19SRUdTX1ZMWU5RMSArIDB4ZmYsCiAJfSwKIAl7Ci0JCS5uYW1lID0gImlycSIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCQkuc3RhcnQgPSAzMywKLQkJLmVuZCA9IDMzLAorCQkubmFtZQk9ICJpcnEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0CT0gMzMsCisJCS5lbmQJPSAzMywKIAl9LAogCXsKLQkJLm5hbWUgPSAibWVtIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JCS5zdGFydCA9IDB4MGMwMDAwMDAsCi0JCS5lbmQgPSAweDBjZmZmZmZmLAorCQkubmFtZQk9ICJtZW0iLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gMHgwYzAwMDAwMCwKKwkJLmVuZAk9IDB4MGNmZmZmZmYsCiAJfSwKIAl7Ci0JCS5uYW1lID0gImRldmlycSIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCQkuc3RhcnQgPSAxMTIsCi0JCS5lbmQgPSAxNDMsCisJCS5uYW1lCT0gImRldmlycSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQJPSAxMTIsCisJCS5lbmQJPSAxNDMsCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiX3Jlc1tdID0gewotCXsKLQkJLm5hbWUgPSAicmVncyIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkuc3RhcnQgPSBBUjdfUkVHU19VU0IsCi0JCS5lbmQgPSBBUjdfUkVHU19VU0IgKyAweGZmLAotCX0sCi0JewotCQkubmFtZSA9ICJpcnEiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJLnN0YXJ0ID0gMzIsCi0JCS5lbmQgPSAzMiwKLQl9LAotCXsKLQkJLm5hbWUgPSAibWVtIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JCS5zdGFydCA9IDB4MDM0MDAwMDAsCi0JCS5lbmQgPSAweDAzNDAwMWZmZiwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGh5c21hcF9mbGFzaF9kYXRhID0gewotCS53aWR0aCA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgZml4ZWRfcGh5X3N0YXR1cyBfX2luaXRkYXRhID0gewotCS5saW5rID0gMSwKLQkuc3BlZWQgPSAxMDAsCi0JLmR1cGxleCA9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRfY3BtYWNfZGF0YSBjcG1hY19sb3dfZGF0YSA9IHsKLQkucmVzZXRfYml0ID0gMTcsCi0JLnBvd2VyX2JpdCA9IDIwLAotCS5waHlfbWFzayA9IDB4ODAwMDAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRfY3BtYWNfZGF0YSBjcG1hY19oaWdoX2RhdGEgPSB7Ci0JLnJlc2V0X2JpdCA9IDIxLAotCS5wb3dlcl9iaXQgPSAyMiwKLQkucGh5X21hc2sgPSAweDdmZmZmZmZmLAotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0X3ZseW5xX2RhdGEgdmx5bnFfbG93X2RhdGEgPSB7Ci0JLm9wcy5vbiA9IHZseW5xX29uLAotCS5vcHMub2ZmID0gdmx5bnFfb2ZmLAotCS5yZXNldF9iaXQgPSAyMCwKLQkuZ3Bpb19iaXQgPSAxOCwKKwkub3BzID0geworCQkub24JPSB2bHlucV9vbiwKKwkJLm9mZgk9IHZseW5xX29mZiwKKwl9LAorCS5yZXNldF9iaXQJPSAyMCwKKwkuZ3Bpb19iaXQJPSAxOCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF92bHlucV9kYXRhIHZseW5xX2hpZ2hfZGF0YSA9IHsKLQkub3BzLm9uID0gdmx5bnFfb24sCi0JLm9wcy5vZmYgPSB2bHlucV9vZmYsCi0JLnJlc2V0X2JpdCA9IDE2LAotCS5ncGlvX2JpdCA9IDE5LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGh5c21hcF9mbGFzaCA9IHsKLQkuaWQgPSAwLAotCS5uYW1lID0gInBoeXNtYXAtZmxhc2giLAotCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZwaHlzbWFwX2ZsYXNoX2RhdGEsCi0JLnJlc291cmNlID0gJnBoeXNtYXBfZmxhc2hfcmVzb3VyY2UsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotfTsKLQotc3RhdGljIHU2NCBjcG1hY19kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjcG1hY19sb3cgPSB7Ci0JLmlkID0gMCwKLQkubmFtZSA9ICJjcG1hYyIsCi0JLmRldiA9IHsKLQkJLmRtYV9tYXNrID0gJmNwbWFjX2RtYV9tYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCQkucGxhdGZvcm1fZGF0YSA9ICZjcG1hY19sb3dfZGF0YSwKKwkub3BzID0geworCQkub24JPSB2bHlucV9vbiwKKwkJLm9mZgk9IHZseW5xX29mZiwKIAl9LAotCS5yZXNvdXJjZSA9IGNwbWFjX2xvd19yZXMsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGNwbWFjX2xvd19yZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3BtYWNfaGlnaCA9IHsKLQkuaWQgPSAxLAotCS5uYW1lID0gImNwbWFjIiwKLQkuZGV2ID0gewotCQkuZG1hX21hc2sgPSAmY3BtYWNfZG1hX21hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmNwbWFjX2hpZ2hfZGF0YSwKLQl9LAotCS5yZXNvdXJjZSA9IGNwbWFjX2hpZ2hfcmVzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShjcG1hY19oaWdoX3JlcyksCisJLnJlc2V0X2JpdAk9IDI2LAorCS5ncGlvX2JpdAk9IDE5LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugdmx5bnFfbG93ID0gewotCS5pZCA9IDAsCi0JLm5hbWUgPSAidmx5bnEiLAotCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZ2bHlucV9sb3dfZGF0YSwKLQkucmVzb3VyY2UgPSB2bHlucV9sb3dfcmVzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh2bHlucV9sb3dfcmVzKSwKKwkuaWQJCT0gMCwKKwkubmFtZQkJPSAidmx5bnEiLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnZseW5xX2xvd19kYXRhLAorCX0sCisJLnJlc291cmNlCT0gdmx5bnFfbG93X3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodmx5bnFfbG93X3JlcyksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2bHlucV9oaWdoID0gewotCS5pZCA9IDEsCi0JLm5hbWUgPSAidmx5bnEiLAotCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZ2bHlucV9oaWdoX2RhdGEsCi0JLnJlc291cmNlID0gdmx5bnFfaGlnaF9yZXMsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHZseW5xX2hpZ2hfcmVzKSwKLX07Ci0KLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBkZWZhdWx0X2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInN0YXR1cyIsCi0JCS5ncGlvID0gOCwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGRzbDUwMnRfbGVkc1tdID0gewotCXsKLQkJLm5hbWUgPSAic3RhdHVzIiwKLQkJLmdwaW8gPSA5LAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gImV0aGVybmV0IiwKLQkJLmdwaW8gPSA3LAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gInVzYiIsCi0JCS5ncGlvID0gMTIsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBkZzgzNGdfbGVkc1tdID0gewotCXsKLQkJLm5hbWUgPSAicHBwIiwKLQkJLmdwaW8gPSA2LAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gInN0YXR1cyIsCi0JCS5ncGlvID0gNywKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJhZHNsIiwKLQkJLmdwaW8gPSA4LAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIndpZmkiLAotCQkuZ3BpbyA9IDEyLAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gInBvd2VyIiwKLQkJLmdwaW8gPSAxNCwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyID0gImRlZmF1bHQtb24iLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGZiX3NsX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gIjEiLAotCQkuZ3BpbyA9IDcsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIjIiLAotCQkuZ3BpbyA9IDEzLAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIjMiLAotCQkuZ3BpbyA9IDEwLAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIjQiLAotCQkuZ3BpbyA9IDEyLAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIjUiLAotCQkuZ3BpbyA9IDksCi0JCS5hY3RpdmVfbG93ID0gMSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBmYl9mb25fbGVkc1tdID0gewotCXsKLQkJLm5hbWUgPSAiMSIsCi0JCS5ncGlvID0gOCwKLQl9LAotCXsKLQkJLm5hbWUgPSAiMiIsCi0JCS5ncGlvID0gMywKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICIzIiwKLQkJLmdwaW8gPSA1LAotCX0sCi0JewotCQkubmFtZSA9ICI0IiwKLQkJLmdwaW8gPSA0LAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIjUiLAotCQkuZ3BpbyA9IDExLAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBhcjdfbGVkX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFyN19ncGlvX2xlZHMgPSB7Ci0JLm5hbWUgPSAibGVkcy1ncGlvIiwKLQkuaWQgPSAtMSwKKwkuaWQJCT0gMSwKKwkubmFtZQkJPSAidmx5bnEiLAogCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmFyN19sZWRfZGF0YSwKLQl9CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnZseW5xX2hpZ2hfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHZseW5xX2hpZ2hfcmVzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh2bHlucV9oaWdoX3JlcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcjdfdWRjID0gewotCS5pZCA9IC0xLAotCS5uYW1lID0gImFyN191ZGMiLAotCS5yZXNvdXJjZSA9IHVzYl9yZXMsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVzYl9yZXMpLAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGbGFzaAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBoeXNtYXBfZmxhc2hfcmVzb3VyY2UgPSB7CisJLm5hbWUJPSAibWVtIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkuc3RhcnQJPSAweDEwMDAwMDAwLAorCS5lbmQJPSAweDEwN2ZmZmZmLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhcjdfd2R0X3JlcyA9IHsKLQkubmFtZSA9ICJyZWdzIiwKLQkuc3RhcnQgPSAtMSwgLyogRmlsbGVkIGF0IHJ1bnRpbWUgKi8KLQkuZW5kID0gLTEsIC8qIEZpbGxlZCBhdCBydW50aW1lICovCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBwaHlzbWFwX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCT0gMiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFyN193ZHQgPSB7Ci0JLmlkID0gLTEsCi0JLm5hbWUgID0gImFyN193ZHQiLAotCS5yZXNvdXJjZSA9ICZhcjdfd2R0X3JlcywKLQkubnVtX3Jlc291cmNlcyA9IDEsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwaHlzbWFwX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZwaHlzbWFwX2ZsYXNoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSAmcGh5c21hcF9mbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEV0aGVybmV0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY3BtYWNfbG93X3Jlc1tdID0geworCXsKKwkJLm5hbWUJPSAicmVncyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSBBUjdfUkVHU19NQUMwLAorCQkuZW5kCT0gQVI3X1JFR1NfTUFDMCArIDB4N2ZmLAorCX0sCisJeworCQkubmFtZQk9ICJpcnEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0CT0gMjcsCisJCS5lbmQgCT0gMjcsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY3BtYWNfaGlnaF9yZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gInJlZ3MiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gQVI3X1JFR1NfTUFDMSwKKwkJLmVuZAk9IEFSN19SRUdTX01BQzEgKyAweDdmZiwKKwl9LAorCXsKKwkJLm5hbWUJPSAiaXJxIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydAk9IDQxLAorCQkuZW5kCT0gNDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBmaXhlZF9waHlfc3RhdHVzIF9faW5pdGRhdGEgPSB7CisJLmxpbmsJCT0gMSwKKwkuc3BlZWQJCT0gMTAwLAorCS5kdXBsZXgJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9jcG1hY19kYXRhIGNwbWFjX2xvd19kYXRhID0geworCS5yZXNldF9iaXQJPSAxNywKKwkucG93ZXJfYml0CT0gMjAsCisJLnBoeV9tYXNrCT0gMHg4MDAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9jcG1hY19kYXRhIGNwbWFjX2hpZ2hfZGF0YSA9IHsKKwkucmVzZXRfYml0CT0gMjEsCisJLnBvd2VyX2JpdAk9IDIyLAorCS5waHlfbWFzawk9IDB4N2ZmZmZmZmYsCit9OworCitzdGF0aWMgdTY0IGNwbWFjX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3BtYWNfbG93ID0geworCS5pZAkJPSAwLAorCS5uYW1lCQk9ICJjcG1hYyIsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrCQk9ICZjcG1hY19kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmNwbWFjX2xvd19kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY3BtYWNfbG93X3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY3BtYWNfbG93X3JlcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjcG1hY19oaWdoID0geworCS5pZAkJPSAxLAorCS5uYW1lCQk9ICJjcG1hYyIsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrCQk9ICZjcG1hY19kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmNwbWFjX2hpZ2hfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGNwbWFjX2hpZ2hfcmVzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjcG1hY19oaWdoX3JlcyksCiB9OwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgY2hhcjJoZXgoY2hhciBoKQpAQCAtNDY3LDYgKzMyOCwxNTYgQEAKIAkJCWNoYXIyaGV4KG1hY1tpICogMyArIDFdKTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVU0IKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JfcmVzW10gPSB7CisJeworCQkubmFtZQk9ICJyZWdzIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IEFSN19SRUdTX1VTQiwKKwkJLmVuZAk9IEFSN19SRUdTX1VTQiArIDB4ZmYsCisJfSwKKwl7CisJCS5uYW1lCT0gImlycSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQJPSAzMiwKKwkJLmVuZAk9IDMyLAorCX0sCisJeworCQkubmFtZQk9ICJtZW0iLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gMHgwMzQwMDAwMCwKKwkJLmVuZAk9IDB4MDM0MDFmZmYsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFyN191ZGMgPSB7CisJLm5hbWUJCT0gImFyN191ZGMiLAorCS5yZXNvdXJjZQk9IHVzYl9yZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYl9yZXMpLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMRURzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZGVmYXVsdF9sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gInN0YXR1cyIsCisJCS5ncGlvCQkJPSA4LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGRzbDUwMnRfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJzdGF0dXMiLAorCQkuZ3BpbwkJCT0gOSwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJldGhlcm5ldCIsCisJCS5ncGlvCQkJPSA3LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gInVzYiIsCisJCS5ncGlvCQkJPSAxMiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBkZzgzNGdfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJwcHAiLAorCQkuZ3BpbwkJCT0gNiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJzdGF0dXMiLAorCQkuZ3BpbwkJCT0gNywKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJhZHNsIiwKKwkJLmdwaW8JCQk9IDgsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAid2lmaSIsCisJCS5ncGlvCQkJPSAxMiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJwb3dlciIsCisJCS5ncGlvCQkJPSAxNCwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJkZWZhdWx0LW9uIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBmYl9zbF9sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gIjEiLAorCQkuZ3BpbwkJCT0gNywKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICIyIiwKKwkJLmdwaW8JCQk9IDEzLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gIjMiLAorCQkuZ3BpbwkJCT0gMTAsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiNCIsCisJCS5ncGlvCQkJPSAxMiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICI1IiwKKwkJLmdwaW8JCQk9IDksCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZmJfZm9uX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAiMSIsCisJCS5ncGlvCQkJPSA4LAorCX0sCisJeworCQkubmFtZQkJCT0gIjIiLAorCQkuZ3BpbwkJCT0gMywKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICIzIiwKKwkJLmdwaW8JCQk9IDUsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiNCIsCisJCS5ncGlvCQkJPSA0LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gIjUiLAorCQkuZ3BpbwkJCT0gMTEsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBhcjdfbGVkX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFyN19ncGlvX2xlZHMgPSB7CisJLm5hbWUgPSAibGVkcy1ncGlvIiwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZhcjdfbGVkX2RhdGEsCisJfQorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGRldGVjdF9sZWRzKHZvaWQpCiB7CiAJY2hhciAqcHJpZCwgKnVzYl9wcm9kOwpAQCAtNDk5LDExMSArNTEwLDE0OSBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2luaXQgYXI3X3JlZ2lzdGVyX2RldmljZXModm9pZCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogV2F0Y2hkb2cKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhcjdfd2R0X3JlcyA9IHsKKwkubmFtZQkJPSAicmVncyIsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCS5zdGFydAkJPSAtMSwJLyogRmlsbGVkIGF0IHJ1bnRpbWUgKi8KKwkuZW5kCQk9IC0xLAkvKiBGaWxsZWQgYXQgcnVudGltZSAqLworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXI3X3dkdCA9IHsKKwkubmFtZQkJPSAiYXI3X3dkdCIsCisJLnJlc291cmNlCT0gJmFyN193ZHRfcmVzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW5pdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IF9faW5pdCBhcjdfcmVnaXN0ZXJfdWFydHModm9pZCkKIHsKLQl1MTYgY2hpcF9pZDsKLQlpbnQgcmVzOwotCXUzMiAqYm9vdGNyLCB2YWw7CiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwCi0Jc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgdWFydF9wb3J0WzJdIF9faW5pdGRhdGE7CisJc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgdWFydF9wb3J0IF9faW5pdGRhdGE7CisJc3RydWN0IGNsayAqYnVzX2NsazsKKwlpbnQgcmVzOwogCi0JbWVtc2V0KHVhcnRfcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X3BvcnQpICogMik7CisJbWVtc2V0KCZ1YXJ0X3BvcnQsIDAsIHNpemVvZihzdHJ1Y3QgdWFydF9wb3J0KSk7CiAKLQl1YXJ0X3BvcnRbMF0udHlwZSA9IFBPUlRfMTY1NTBBOwotCXVhcnRfcG9ydFswXS5saW5lID0gMDsKLQl1YXJ0X3BvcnRbMF0uaXJxID0gQVI3X0lSUV9VQVJUMDsKLQl1YXJ0X3BvcnRbMF0udWFydGNsayA9IGFyN19idXNfZnJlcSgpIC8gMjsKLQl1YXJ0X3BvcnRbMF0uaW90eXBlID0gVVBJT19NRU0zMjsKLQl1YXJ0X3BvcnRbMF0ubWFwYmFzZSA9IEFSN19SRUdTX1VBUlQwOwotCXVhcnRfcG9ydFswXS5tZW1iYXNlID0gaW9yZW1hcCh1YXJ0X3BvcnRbMF0ubWFwYmFzZSwgMjU2KTsKLQl1YXJ0X3BvcnRbMF0ucmVnc2hpZnQgPSAyOwotCXJlcyA9IGVhcmx5X3NlcmlhbF9zZXR1cCgmdWFydF9wb3J0WzBdKTsKKwlidXNfY2xrID0gY2xrX2dldChOVUxMLCAiYnVzIik7CisJaWYgKElTX0VSUihidXNfY2xrKSkKKwkJcGFuaWMoInVuYWJsZSB0byBnZXQgYnVzIGNsa1xuIik7CisKKwl1YXJ0X3BvcnQudHlwZQkJPSBQT1JUXzE2NTUwQTsKKwl1YXJ0X3BvcnQudWFydGNsawk9IGNsa19nZXRfcmF0ZShidXNfY2xrKSAvIDI7CisJdWFydF9wb3J0LmlvdHlwZQk9IFVQSU9fTUVNMzI7CisJdWFydF9wb3J0LnJlZ3NoaWZ0CT0gMjsKKworCXVhcnRfcG9ydC5saW5lCQk9IDA7CisJdWFydF9wb3J0LmlycQkJPSBBUjdfSVJRX1VBUlQwOworCXVhcnRfcG9ydC5tYXBiYXNlCT0gQVI3X1JFR1NfVUFSVDA7CisJdWFydF9wb3J0Lm1lbWJhc2UJPSBpb3JlbWFwKHVhcnRfcG9ydC5tYXBiYXNlLCAyNTYpOworCisJcmVzID0gZWFybHlfc2VyaWFsX3NldHVwKCZ1YXJ0X3BvcnQpOwogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKLQogCS8qIE9ubHkgVE5FVEQ3M3h4IGhhdmUgYSBzZWNvbmQgc2VyaWFsIHBvcnQgKi8KIAlpZiAoYXI3X2hhc19zZWNvbmRfdWFydCgpKSB7Ci0JCXVhcnRfcG9ydFsxXS50eXBlID0gUE9SVF8xNjU1MEE7Ci0JCXVhcnRfcG9ydFsxXS5saW5lID0gMTsKLQkJdWFydF9wb3J0WzFdLmlycSA9IEFSN19JUlFfVUFSVDE7Ci0JCXVhcnRfcG9ydFsxXS51YXJ0Y2xrID0gYXI3X2J1c19mcmVxKCkgLyAyOwotCQl1YXJ0X3BvcnRbMV0uaW90eXBlID0gVVBJT19NRU0zMjsKLQkJdWFydF9wb3J0WzFdLm1hcGJhc2UgPSBVUjhfUkVHU19VQVJUMTsKLQkJdWFydF9wb3J0WzFdLm1lbWJhc2UgPSBpb3JlbWFwKHVhcnRfcG9ydFsxXS5tYXBiYXNlLCAyNTYpOwotCQl1YXJ0X3BvcnRbMV0ucmVnc2hpZnQgPSAyOwotCQlyZXMgPSBlYXJseV9zZXJpYWxfc2V0dXAoJnVhcnRfcG9ydFsxXSk7CisJCXVhcnRfcG9ydC5saW5lCQk9IDE7CisJCXVhcnRfcG9ydC5pcnEJCT0gQVI3X0lSUV9VQVJUMTsKKwkJdWFydF9wb3J0Lm1hcGJhc2UJPSBVUjhfUkVHU19VQVJUMTsKKwkJdWFydF9wb3J0Lm1lbWJhc2UJPSBpb3JlbWFwKHVhcnRfcG9ydC5tYXBiYXNlLCAyNTYpOworCisJCXJlcyA9IGVhcmx5X3NlcmlhbF9zZXR1cCgmdWFydF9wb3J0KTsKIAkJaWYgKHJlcykKIAkJCXJldHVybiByZXM7CiAJfQotI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfODI1MCAqLworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgYXI3X3JlZ2lzdGVyX2RldmljZXModm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKmJvb3RjcjsKKwl1MzIgdmFsOworCXUxNiBjaGlwX2lkOworCWludCByZXM7CisKKwlyZXMgPSBhcjdfcmVnaXN0ZXJfdWFydHMoKTsKKwlpZiAocmVzKQorCQlwcl9lcnIoInVuYWJsZSB0byBzZXR1cCB1YXJ0KHMpOiAlZFxuIiwgcmVzKTsKKwogCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGh5c21hcF9mbGFzaCk7CiAJaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKKwkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIHBoeXNtYXAtZmxhc2g6ICVkXG4iLCByZXMpOwogCiAJYXI3X2RldmljZV9kaXNhYmxlKHZseW5xX2xvd19kYXRhLnJlc2V0X2JpdCk7CiAJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2bHlucV9sb3cpOwogCWlmIChyZXMpCi0JCXJldHVybiByZXM7CisJCXByX3dhcm5pbmcoInVuYWJsZSB0byByZWdpc3RlciB2bHlucS1sb3c6ICVkXG4iLCByZXMpOwogCiAJaWYgKGFyN19oYXNfaGlnaF92bHlucSgpKSB7CiAJCWFyN19kZXZpY2VfZGlzYWJsZSh2bHlucV9oaWdoX2RhdGEucmVzZXRfYml0KTsKIAkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2bHlucV9oaWdoKTsKIAkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7CisJCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVnaXN0ZXIgdmx5bnEtaGlnaDogJWRcbiIsIHJlcyk7CiAJfQogCiAJaWYgKGFyN19oYXNfaGlnaF9jcG1hYygpKSB7Ci0JCXJlcyA9IGZpeGVkX3BoeV9hZGQoUEhZX1BPTEwsIGNwbWFjX2hpZ2guaWQsICZmaXhlZF9waHlfc3RhdHVzKTsKLQkJaWYgKHJlcyAmJiByZXMgIT0gLUVOT0RFVikKLQkJCXJldHVybiByZXM7Ci0JCWNwbWFjX2dldF9tYWMoMSwgY3BtYWNfaGlnaF9kYXRhLmRldl9hZGRyKTsKLQkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjcG1hY19oaWdoKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0JfSBlbHNlIHsKKwkJaWYgKCFyZXMpIHsKKwkJCWNwbWFjX2dldF9tYWMoMSwgY3BtYWNfaGlnaF9kYXRhLmRldl9hZGRyKTsKKworCQkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjcG1hY19oaWdoKTsKKwkJCWlmIChyZXMpCisJCQkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIGNwbWFjLWhpZ2g6ICVkXG4iLCByZXMpOworCQl9IGVsc2UKKwkJCXByX3dhcm5pbmcoInVuYWJsZSB0byBhZGQgY3BtYWMtaGlnaCBwaHk6ICVkXG4iLCByZXMpOworCX0gZWxzZQogCQljcG1hY19sb3dfZGF0YS5waHlfbWFzayA9IDB4ZmZmZmZmZmY7Ci0JfQogCiAJcmVzID0gZml4ZWRfcGh5X2FkZChQSFlfUE9MTCwgY3BtYWNfbG93LmlkLCAmZml4ZWRfcGh5X3N0YXR1cyk7Ci0JaWYgKHJlcyAmJiByZXMgIT0gLUVOT0RFVikKLQkJcmV0dXJuIHJlczsKLQotCWNwbWFjX2dldF9tYWMoMCwgY3BtYWNfbG93X2RhdGEuZGV2X2FkZHIpOwotCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3BtYWNfbG93KTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOworCWlmICghcmVzKSB7CisJCWNwbWFjX2dldF9tYWMoMCwgY3BtYWNfbG93X2RhdGEuZGV2X2FkZHIpOworCQlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNwbWFjX2xvdyk7CisJCWlmIChyZXMpCisJCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVnaXN0ZXIgY3BtYWMtbG93OiAlZFxuIiwgcmVzKTsKKwl9IGVsc2UKKwkJcHJfd2FybmluZygidW5hYmxlIHRvIGFkZCBjcG1hYy1sb3cgcGh5OiAlZFxuIiwgcmVzKTsKIAogCWRldGVjdF9sZWRzKCk7CiAJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhcjdfZ3Bpb19sZWRzKTsKIAlpZiAocmVzKQotCQlyZXR1cm4gcmVzOworCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVnaXN0ZXIgbGVkczogJWRcbiIsIHJlcyk7CiAKIAlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFyN191ZGMpOwotCi0JY2hpcF9pZCA9IGFyN19jaGlwX2lkKCk7Ci0Jc3dpdGNoIChjaGlwX2lkKSB7Ci0JY2FzZSBBUjdfQ0hJUF83MTAwOgotCWNhc2UgQVI3X0NISVBfNzIwMDoKLQkJYXI3X3dkdF9yZXMuc3RhcnQgPSBBUjdfUkVHU19XRFQ7Ci0JCWJyZWFrOwotCWNhc2UgQVI3X0NISVBfNzMwMDoKLQkJYXI3X3dkdF9yZXMuc3RhcnQgPSBVUjhfUkVHU19XRFQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCWFyN193ZHRfcmVzLmVuZCA9IGFyN193ZHRfcmVzLnN0YXJ0ICsgMHgyMDsKLQotCWJvb3RjciA9ICh1MzIgKilpb3JlbWFwX25vY2FjaGUoQVI3X1JFR1NfRENMLCA0KTsKLQl2YWwgPSAqYm9vdGNyOwotCWlvdW5tYXAoYm9vdGNyKTsKKwlpZiAocmVzKQorCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVnaXN0ZXIgdXNiIHNsYXZlOiAlZFxuIiwgcmVzKTsKIAogCS8qIFJlZ2lzdGVyIHdhdGNoZG9nIG9ubHkgaWYgZW5hYmxlZCBpbiBoYXJkd2FyZSAqLwotCWlmICh2YWwgJiBBUjdfV0RUX0hXX0VOQSkKLQkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhcjdfd2R0KTsKKwlib290Y3IgPSBpb3JlbWFwX25vY2FjaGUoQVI3X1JFR1NfRENMLCA0KTsKKwl2YWwgPSByZWFkbChib290Y3IpOworCWlvdW5tYXAoYm9vdGNyKTsKKwlpZiAodmFsICYgQVI3X1dEVF9IV19FTkEpIHsKKwkJY2hpcF9pZCA9IGFyN19jaGlwX2lkKCk7CisJCXN3aXRjaCAoY2hpcF9pZCkgeworCQljYXNlIEFSN19DSElQXzcxMDA6CisJCWNhc2UgQVI3X0NISVBfNzIwMDoKKwkJCWFyN193ZHRfcmVzLnN0YXJ0ID0gQVI3X1JFR1NfV0RUOworCQkJYnJlYWs7CisJCWNhc2UgQVI3X0NISVBfNzMwMDoKKwkJCWFyN193ZHRfcmVzLnN0YXJ0ID0gVVI4X1JFR1NfV0RUOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQogCi0JcmV0dXJuIHJlczsKKwkJYXI3X3dkdF9yZXMuZW5kID0gYXI3X3dkdF9yZXMuc3RhcnQgKyAweDIwOworCQlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFyN193ZHQpOworCQlpZiAocmVzKQorCQkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIHdhdGNoZG9nOiAlZFxuIiwgcmVzKTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIGFyY2hfaW5pdGNhbGwoYXI3X3JlZ2lzdGVyX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyNy9wcm9tLmMgYi9hcmNoL21pcHMvYXI3L3Byb20uYwppbmRleCBjMWZkZDM2Li41MjM4NTc5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXI3L3Byb20uYworKysgYi9hcmNoL21pcHMvYXI3L3Byb20uYwpAQCAtMzIsOCArMzIsOCBAQAogI2RlZmluZSBNQVhfRU5UUlkgODAKIAogc3RydWN0IGVudl92YXIgewotCWNoYXIgKm5hbWU7Ci0JY2hhciAqdmFsdWU7CisJY2hhcgkqbmFtZTsKKwljaGFyCSp2YWx1ZTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZW52X3ZhciBhZGFtMl9lbnZbTUFYX0VOVFJZXTsKQEAgLTQxLDYgKzQxLDcgQEAKIGNoYXIgKnByb21fZ2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyAoaSA8IE1BWF9FTlRSWSkgJiYgYWRhbTJfZW52W2ldLm5hbWU7IGkrKykKIAkJaWYgKCFzdHJjbXAobmFtZSwgYWRhbTJfZW52W2ldLm5hbWUpKQogCQkJcmV0dXJuIGFkYW0yX2VudltpXS52YWx1ZTsKQEAgLTQ5LDY1ICs1MCw1MCBAQAogfQogRVhQT1JUX1NZTUJPTChwcm9tX2dldGVudik7CiAKLWNoYXIgKiBfX2luaXQgcHJvbV9nZXRjbWRsaW5lKHZvaWQpCi17Ci0JcmV0dXJuICYoYXJjc19jbWRsaW5lWzBdKTsKLX0KLQogc3RhdGljIHZvaWQgIF9faW5pdCBhcjdfaW5pdF9jbWRsaW5lKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JY2hhciAqY3A7Ci0JaW50IGFjdHI7CisJaW50IGk7CiAKLQlhY3RyID0gMTsgLyogQWx3YXlzIGlnbm9yZSBhcmd2WzBdICovCi0KLQljcCA9ICYoYXJjc19jbWRsaW5lWzBdKTsKLQl3aGlsZSAoYWN0ciA8IGFyZ2MpIHsKLQkJc3RyY3B5KGNwLCBhcmd2W2FjdHJdKTsKLQkJY3AgKz0gc3RybGVuKGFyZ3ZbYWN0cl0pOwotCQkqY3ArKyA9ICcgJzsKLQkJYWN0cisrOwotCX0KLQlpZiAoY3AgIT0gJihhcmNzX2NtZGxpbmVbMF0pKSB7Ci0JCS8qIGdldCByaWQgb2YgdHJhaWxpbmcgc3BhY2UgKi8KLQkJLS1jcDsKLQkJKmNwID0gJ1wwJzsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCXN0cmxjYXQoYXJjc19jbWRsaW5lLCBhcmd2W2ldLCBDT01NQU5EX0xJTkVfU0laRSk7CisJCWlmIChpIDwgKGFyZ2MgLSAxKSkKKwkJCXN0cmxjYXQoYXJjc19jbWRsaW5lLCAiICIsIENPTU1BTkRfTElORV9TSVpFKTsKIAl9CiB9CiAKIHN0cnVjdCBwc2JsX3JlYyB7Ci0JdTMyIHBzYmxfc2l6ZTsKLQl1MzIgZW52X2Jhc2U7Ci0JdTMyIGVudl9zaXplOwotCXUzMiBmZnNfYmFzZTsKLQl1MzIgZmZzX3NpemU7CisJdTMyCXBzYmxfc2l6ZTsKKwl1MzIJZW52X2Jhc2U7CisJdTMyCWVudl9zaXplOworCXUzMglmZnNfYmFzZTsKKwl1MzIJZmZzX3NpemU7CiB9OwogCiBzdGF0aWMgX19pbml0ZGF0YSBjaGFyIHBzcF9lbnZfdmVyc2lvbltdID0gIlRJRU5WMC44IjsKIAogc3RydWN0IHBzcF9lbnZfY2h1bmsgewotCXU4IG51bTsKLQl1OCBjdHJsOwotCXUxNiBjc3VtOwotCXU4IGxlbjsKLQljaGFyIGRhdGFbMTFdOworCXU4CW51bTsKKwl1OAljdHJsOworCXUxNgljc3VtOworCXU4CWxlbjsKKwljaGFyCWRhdGFbMTFdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBwc3BfdmFyX21hcF9lbnRyeSB7Ci0JdTggbnVtOwotCWNoYXIgKnZhbHVlOworCXU4CW51bTsKKwljaGFyCSp2YWx1ZTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcHNwX3Zhcl9tYXBfZW50cnkgcHNwX3Zhcl9tYXBbXSA9IHsKLQl7IDEsICJjcHVmcmVxdWVuY3kiIH0sCi0JeyAyLCAibWVtc2l6ZSIgfSwKLQl7IDMsICJmbGFzaHNpemUiIH0sCi0JeyA0LCAibW9kZXR0eTAiIH0sCi0JeyA1LCAibW9kZXR0eTEiIH0sCi0JeyA4LCAibWFjYSIgfSwKLQl7IDksICJtYWNiIiB9LAotCXsgMjgsICJzeXNmcmVxdWVuY3kiIH0sCi0JeyAzOCwgIm1pcHNmcmVxdWVuY3kiIH0sCisJeyAgMSwJImNwdWZyZXF1ZW5jeSIgfSwKKwl7ICAyLAkibWVtc2l6ZSIgfSwKKwl7ICAzLAkiZmxhc2hzaXplIiB9LAorCXsgIDQsCSJtb2RldHR5MCIgfSwKKwl7ICA1LAkibW9kZXR0eTEiIH0sCisJeyAgOCwJIm1hY2EiIH0sCisJeyAgOSwJIm1hY2IiIH0sCisJeyAyOCwJInN5c2ZyZXF1ZW5jeSIgfSwKKwl7IDM4LAkibWlwc2ZyZXF1ZW5jeSIgfSwKIH07CiAKIC8qCkBAIC0xNTQsNiArMTQwLDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBhZGRfYWRhbTJfdmFyKGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQogewogCWludCBpOworCiAJZm9yIChpID0gMDsgaSA8IE1BWF9FTlRSWTsgaSsrKSB7CiAJCWlmICghYWRhbTJfZW52W2ldLm5hbWUpIHsKIAkJCWFkYW0yX2VudltpXS5uYW1lID0gbmFtZTsKQEAgLTIxNiw3ICsyMDMsNyBAQAogCWNoYXIgcGFyaXR5ID0gJ1wwJywgYml0cyA9ICdcMCcsIGZsb3cgPSAnXDAnOwogCWNoYXIgKnMsICpwOwogCi0JaWYgKHN0cnN0cihwcm9tX2dldGNtZGxpbmUoKSwgImNvbnNvbGU9IikpCisJaWYgKHN0cnN0cihhcmNzX2NtZGxpbmUsICJjb25zb2xlPSIpKQogCQlyZXR1cm47CiAKIAlzID0gcHJvbV9nZXRlbnYoIm1vZGV0dHkwIik7CkBAIC0yNTAsNyArMjM3LDcgQEAKIAllbHNlCiAJCXNwcmludGYoY29uc29sZV9zdHJpbmcsICIgY29uc29sZT10dHlTMCwlZCVjJWMiLCBiYXVkLCBwYXJpdHksCiAJCQliaXRzKTsKLQlzdHJjYXQocHJvbV9nZXRjbWRsaW5lKCksIGNvbnNvbGVfc3RyaW5nKTsKKwlzdHJsY2F0KGFyY3NfY21kbGluZSwgY29uc29sZV9zdHJpbmcsIENPTU1BTkRfTElORV9TSVpFKTsKICNlbmRpZgogfQogCkBAIC0yNzksNCArMjY2LDMgQEAKIAlzZXJpYWxfb3V0KFVBUlRfVFgsIGMpOwogCXJldHVybiAxOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L3NldHVwLmMgYi9hcmNoL21pcHMvYXI3L3NldHVwLmMKaW5kZXggMzlmNmI1Yi4uM2E4MDFkMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hcjcvc2V0dXAuYwpAQCAtMjYsOCArMjYsOCBAQAogCiBzdGF0aWMgdm9pZCBhcjdfbWFjaGluZV9yZXN0YXJ0KGNoYXIgKmNvbW1hbmQpCiB7Ci0JdTMyICpzb2Z0cmVzX3JlZyA9IGlvcmVtYXAoQVI3X1JFR1NfUkVTRVQgKwotCQkJCQkgIEFSN19SRVNFVF9TT0ZUV0FSRSwgMSk7CisJdTMyICpzb2Z0cmVzX3JlZyA9IGlvcmVtYXAoQVI3X1JFR1NfUkVTRVQgKyBBUjdfUkVTRVRfU09GVFdBUkUsIDEpOworCiAJd3JpdGVsKDEsIHNvZnRyZXNfcmVnKTsKIH0KIApAQCAtNDEsNiArNDEsNyBAQAogewogCXUzMiAqcG93ZXJfcmVnID0gKHUzMiAqKWlvcmVtYXAoQVI3X1JFR1NfUE9XRVIsIDEpOwogCXUzMiBwb3dlcl9zdGF0ZSA9IHJlYWRsKHBvd2VyX3JlZykgfCAoMyA8PCAzMCk7CisKIAl3cml0ZWwocG93ZXJfc3RhdGUsIHBvd2VyX3JlZyk7CiAJYXI3X21hY2hpbmVfaGFsdCgpOwogfQpAQCAtNDksMTQgKzUwLDE0IEBACiB7CiAJdTE2IGNoaXBfaWQgPSBhcjdfY2hpcF9pZCgpOwogCXN3aXRjaCAoY2hpcF9pZCkgewotCWNhc2UgQVI3X0NISVBfNzMwMDoKLQkJcmV0dXJuICJUSSBBUjcgKFRORVRENzMwMCkiOwogCWNhc2UgQVI3X0NISVBfNzEwMDoKIAkJcmV0dXJuICJUSSBBUjcgKFRORVRENzEwMCkiOwogCWNhc2UgQVI3X0NISVBfNzIwMDoKIAkJcmV0dXJuICJUSSBBUjcgKFRORVRENzIwMCkiOworCWNhc2UgQVI3X0NISVBfNzMwMDoKKwkJcmV0dXJuICJUSSBBUjcgKFRORVRENzMwMCkiOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAiVEkgQVI3IChVbmtub3duKSI7CisJCXJldHVybiAiVEkgQVI3ICh1bmtub3duKSI7CiAJfQogfQogCkBAIC03MCw3ICs3MSw2IEBACiAgKiBJbml0aWFsaXplcyBiYXNpYyByb3V0aW5lcyBhbmQgc3RydWN0dXJlcyBwb2ludGVycywgbWVtb3J5IHNpemUgKGFzCiAgKiBnaXZlbiBieSB0aGUgYmlvcyBhbmQgc2F2ZXMgdGhlIGNvbW1hbmQgbGluZS4KICAqLwotCiB2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgaW9fYmFzZTsKQEAgLTg4LDYgKzg4LDUgQEAKIAlwcm9tX21lbWluaXQoKTsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzLCBJRDogMHglMDR4LCBSZXZpc2lvbjogMHglMDJ4XG4iLAotCQkJCQlnZXRfc3lzdGVtX3R5cGUoKSwKLQkJYXI3X2NoaXBfaWQoKSwgYXI3X2NoaXBfcmV2KCkpOworCQkJZ2V0X3N5c3RlbV90eXBlKCksIGFyN19jaGlwX2lkKCksIGFyN19jaGlwX3JldigpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvdGltZS5jIGIvYXJjaC9taXBzL2FyNy90aW1lLmMKaW5kZXggYTFmYmE4OS4uNWZiOGEwMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy90aW1lLmMKKysrIGIvYXJjaC9taXBzL2FyNy90aW1lLmMKQEAgLTIwLDExICsyMCwyMSBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXI3L2FyNy5oPgogCiB2b2lkIF9faW5pdCBwbGF0X3RpbWVfaW5pdCh2b2lkKQogewotCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IGFyN19jcHVfZnJlcSgpIC8gMjsKKwlzdHJ1Y3QgY2xrICpjcHVfY2xrOworCisJY3B1X2NsayA9IGNsa19nZXQoTlVMTCwgImNwdSIpOworCWlmIChJU19FUlIoY3B1X2NsaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ2V0IGNwdSBjbG9ja1xuIik7CisJCXJldHVybjsKKwl9CisKKwltaXBzX2hwdF9mcmVxdWVuY3kgPSBjbGtfZ2V0X3JhdGUoY3B1X2NsaykgLyAyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTQ3eHgvZ3Bpby5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvZ3Bpby5jCmluZGV4IDliNzk4ODAuLmU0YTVlZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY200N3h4L2dwaW8uYworKysgYi9hcmNoL21pcHMvYmNtNDd4eC9ncGlvLmMKQEAgLTU5LDQgKzU5LDMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChncGlvX3RvX2lycSk7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYyBiL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYwppbmRleCBjNTE0MDVlLi4wZmE2NDZjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jCkBAIC0xNDEsNiArMTQxLDE0IEBACiAJCQlicmVhazsKIAl9CiAKKwkvKiBJZ25vcmluZyB0aGUgbGFzdCBwYWdlIHdoZW4gZGRyIHNpemUgaXMgMTI4TS4gQ2FjaGVkCisJICogYWNjZXNzZXMgdG8gbGFzdCBwYWdlIGlzIGNhdXNpbmcgdGhlIHByb2Nlc3NvciB0byBwcmVmZXRjaAorCSAqIHVzaW5nIGFkZHJlc3MgYWJvdmUgMTI4TSBzdGVwcGluZyBvdXQgb2YgdGhlIGRkciBhZGRyZXNzCisJICogc3BhY2UuCisJICovCisJaWYgKG1lbSA9PSAweDgwMDAwMDApCisJCW1lbSAtPSAweDEwMDA7CisKIAlhZGRfbWVtb3J5X3JlZ2lvbigwLCBtZW0sIEJPT1RfTUVNX1JBTSk7CiB9CiAKQEAgLTE1NSw0ICsxNjMsMyBAQAogdm9pZCBfX2luaXQgcHJvbV9mcmVlX3Byb21fbWVtb3J5KHZvaWQpCiB7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L3NldHVwLmMgYi9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jCmluZGV4IDJmNTgwZmEuLmQ0NDJlMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY200N3h4L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvc2V0dXAuYwpAQCAtMTIxLDQgKzEyMSwzIEBACiAJX21hY2hpbmVfaGFsdCA9IGJjbTQ3eHhfbWFjaGluZV9oYWx0OwogCXBtX3Bvd2VyX29mZiA9IGJjbTQ3eHhfbWFjaGluZV9oYWx0OwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNDd4eC93Z3Q2MzR1LmMgYi9hcmNoL21pcHMvYmNtNDd4eC93Z3Q2MzR1LmMKaW5kZXggZWYwMGU3Zi4uNzRkMDY5NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2JjbTQ3eHgvd2d0NjM0dS5jCisrKyBiL2FyY2gvbWlwcy9iY200N3h4L3dndDYzNHUuYwpAQCAtMTY0LDQgKzE2NCwzIEBACiB9CiAKIG1vZHVsZV9pbml0KHdndDYzNHVfaW5pdCk7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jIGIvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMKaW5kZXggMWZlNDEyYy4uZWExNzk0MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMKKysrIGIvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMKQEAgLTgzNiw0ICs4MzYsMyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L3RpbWVyLmMgYi9hcmNoL21pcHMvYmNtNjN4eC90aW1lci5jCmluZGV4IGJhNTIyYmQuLjVmMTEzNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY202M3h4L3RpbWVyLmMKKysrIGIvYXJjaC9taXBzL2JjbTYzeHgvdGltZXIuYwpAQCAtMTcsOCArMTcsOCBAQAogI2luY2x1ZGUgPGJjbTYzeHhfdGltZXIuaD4KICNpbmNsdWRlIDxiY202M3h4X3JlZ3MuaD4KIAotc3RhdGljIERFRklORV9TUElOTE9DSyh0aW1lcl9yZWdfbG9jayk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRpbWVyX2RhdGFfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyh0aW1lcl9yZWdfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyh0aW1lcl9kYXRhX2xvY2spOwogc3RhdGljIHN0cnVjdCBjbGsgKnBlcmlwaF9jbGs7CiAKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfZGF0YSB7CkBAIC0zMSwyMyArMzEsMjMgQEAKIAl1MzIgc3RhdDsKIAlpbnQgaTsKIAotCXNwaW5fbG9jaygmdGltZXJfcmVnX2xvY2spOworCXJhd19zcGluX2xvY2soJnRpbWVyX3JlZ19sb2NrKTsKIAlzdGF0ID0gYmNtX3RpbWVyX3JlYWRsKFRJTUVSX0lSUVNUQVRfUkVHKTsKIAliY21fdGltZXJfd3JpdGVsKHN0YXQsIFRJTUVSX0lSUVNUQVRfUkVHKTsKLQlzcGluX3VubG9jaygmdGltZXJfcmVnX2xvY2spOworCXJhd19zcGluX3VubG9jaygmdGltZXJfcmVnX2xvY2spOwogCiAJZm9yIChpID0gMDsgaSA8IEJDTTYzWFhfVElNRVJfQ09VTlQ7IGkrKykgewogCQlpZiAoIShzdGF0ICYgVElNRVJfSVJRU1RBVF9USU1FUl9DQVVTRShpKSkpCiAJCQljb250aW51ZTsKIAotCQlzcGluX2xvY2soJnRpbWVyX2RhdGFfbG9jayk7CisJCXJhd19zcGluX2xvY2soJnRpbWVyX2RhdGFfbG9jayk7CiAJCWlmICghdGltZXJfZGF0YVtpXS5jYikgewotCQkJc3Bpbl91bmxvY2soJnRpbWVyX2RhdGFfbG9jayk7CisJCQlyYXdfc3Bpbl91bmxvY2soJnRpbWVyX2RhdGFfbG9jayk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCXRpbWVyX2RhdGFbaV0uY2IodGltZXJfZGF0YVtpXS5kYXRhKTsKLQkJc3Bpbl91bmxvY2soJnRpbWVyX2RhdGFfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmdGltZXJfZGF0YV9sb2NrKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC02MSw3ICs2MSw3IEBACiAJaWYgKGlkID49IEJDTTYzWFhfVElNRVJfQ09VTlQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOwogCiAJcmVnID0gYmNtX3RpbWVyX3JlYWRsKFRJTUVSX0NUTHhfUkVHKGlkKSk7CiAJcmVnIHw9IFRJTUVSX0NUTF9FTkFCTEVfTUFTSzsKQEAgLTcxLDcgKzcxLDcgQEAKIAlyZWcgfD0gVElNRVJfSVJRU1RBVF9USU1FUl9JUl9FTihpZCk7CiAJYmNtX3RpbWVyX3dyaXRlbChyZWcsIFRJTUVSX0lSUVNUQVRfUkVHKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg1LDcgKzg1LDcgQEAKIAlpZiAoaWQgPj0gQkNNNjNYWF9USU1FUl9DT1VOVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CiAKIAlyZWcgPSBiY21fdGltZXJfcmVhZGwoVElNRVJfQ1RMeF9SRUcoaWQpKTsKIAlyZWcgJj0gflRJTUVSX0NUTF9FTkFCTEVfTUFTSzsKQEAgLTk1LDcgKzk1LDcgQEAKIAlyZWcgJj0gflRJTUVSX0lSUVNUQVRfVElNRVJfSVJfRU4oaWQpOwogCWJjbV90aW1lcl93cml0ZWwocmVnLCBUSU1FUl9JUlFTVEFUX1JFRyk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXQgPSAwOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9kYXRhX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX2RhdGFfbG9jaywgZmxhZ3MpOwogCWlmICh0aW1lcl9kYXRhW2lkXS5jYikgewogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0OwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJdGltZXJfZGF0YVtpZF0uZGF0YSA9IGRhdGE7CiAKIG91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9kYXRhX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfZGF0YV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTMzLDkgKzEzMyw5IEBACiAJaWYgKGlkID49IEJDTTYzWFhfVElNRVJfQ09VTlQpCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9kYXRhX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX2RhdGFfbG9jaywgZmxhZ3MpOwogCXRpbWVyX2RhdGFbaWRdLmNiID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9kYXRhX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfZGF0YV9sb2NrLCBmbGFncyk7CiB9CiAKIEVYUE9SVF9TWU1CT0woYmNtNjN4eF90aW1lcl91bnJlZ2lzdGVyKTsKQEAgLTE1OSw3ICsxNTksNyBAQAogCWlmIChjb3VudGRvd24gJiB+VElNRVJfQ1RMX0NPVU5URE9XTl9NQVNLKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKIAlyZWcgPSBiY21fdGltZXJfcmVhZGwoVElNRVJfQ1RMeF9SRUcoaWQpKTsKIAogCWlmIChtb25vdG9uaWMpCkBAIC0xNzEsNyArMTcxLDcgQEAKIAlyZWcgfD0gY291bnRkb3duOwogCWJjbV90aW1lcl93cml0ZWwocmVnLCBUSU1FUl9DVEx4X1JFRyhpZCkpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggOWRmOTAzZC4uNzkwZGRkMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC05LDcgKzksNyBAQAogIyBtb2RpZmllZCBieSBDb3J0IChjb3J0QGNzLm5tdC5lZHUpCiAjCiAjIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIERTTGFiLCBMYW56aG91IFVuaXZlcnNpdHkKLSMgQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorIyBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICMKIAogIyBjb21wcmVzc2VkIGtlcm5lbCBsb2FkIGFkZHI6IFZNTElOVVpfTE9BRF9BRERSRVNTID4gVk1MSU5VWF9MT0FEX0FERFJFU1MgKyBWTUxJTlVYX1NJWkUKQEAgLTI3LDE1ICsyNywxOCBAQAogS0JVSUxEX0NGTEFHUyA6PSAkKHNoZWxsIGVjaG8gJChLQlVJTERfQ0ZMQUdTKSB8IHNlZCAtZSAicy8tcGcvLyIpCiAKIEtCVUlMRF9DRkxBR1MgOj0gJChMSU5VWElOQ0xVREUpICQoS0JVSUxEX0NGTEFHUykgLURfX0tFUk5FTF9fIFwKLQktREJPT1RfSEVBUF9TSVpFPSQoQk9PVF9IRUFQX1NJWkUpIC1EIlZNTElOVVhfTE9BRF9BRERSRVNTX1VMTD0kKFZNTElOVVhfTE9BRF9BRERSRVNTKXVsbCIgXAorCS1EQk9PVF9IRUFQX1NJWkU9JChCT09UX0hFQVBfU0laRSkgLUQiVk1MSU5VWF9MT0FEX0FERFJFU1NfVUxMPSQoVk1MSU5VWF9MT0FEX0FERFJFU1MpdWxsIgogCiBLQlVJTERfQUZMQUdTIDo9ICQoTElOVVhJTkNMVURFKSAkKEtCVUlMRF9BRkxBR1MpIC1EX19BU1NFTUJMWV9fIFwKLQktREtFUk5FTF9FTlRSWT0weCQoc2hlbGwgJChOTSkgJChvYmp0cmVlKS8kKEtCVUlMRF9JTUFHRSkgMj4vZGV2L251bGwgfCBncmVwICIga2VybmVsX2VudHJ5IiB8IGN1dCAtZjEgLWQgXCApIFwKLQktREJPT1RfSEVBUF9TSVpFPSQoQk9PVF9IRUFQX1NJWkUpCisJLURCT09UX0hFQVBfU0laRT0kKEJPT1RfSEVBUF9TSVpFKSBcCisJLURLRVJORUxfRU5UUlk9MHgkKHNoZWxsICQoTk0pICQob2JqdHJlZSkvJChLQlVJTERfSU1BR0UpIDI+L2Rldi9udWxsIHwgZ3JlcCAiIGtlcm5lbF9lbnRyeSIgfCBjdXQgLWYxIC1kIFwgKQogCiBvYmoteSA6PSAkKG9iaikvaGVhZC5vICQob2JqKS9kZWNvbXByZXNzLm8gJChvYmopL2RiZy5vCiAKK2lmZGVmIENPTkZJR19ERUJVR19aQk9PVAogb2JqLSQoQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVF9VQVJUMTY1NTApICs9ICQob2JqKS91YXJ0LTE2NTUwLm8KK29iai0kKENPTkZJR19NQUNIX0FMQ0hFTVkpCQkgICArPSAkKG9iaikvdWFydC1hbGNoZW15Lm8KK2VuZGlmCiAKIE9CSkNPUFlGTEFHU192bWxpbnV4LmJpbiA6PSAkKE9CSkNPUFlGTEFHUykgLU8gYmluYXJ5IC1SIC5jb21tZW50IC1TCiAkKG9iaikvdm1saW51eC5iaW46ICQoS0JVSUxEX0lNQUdFKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kYmcuYyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGJnLmMKaW5kZXggZmY0ZGM3YTMuLjEzNGE2MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGJnLmMKKysrIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kYmcuYwpAQCAtNSwxMSArNSwxMSBAQAogICogcGxlYXNlIHNlbGVjdCBTWVNfU1VQUE9SVFNfWkJPT1RfVUFSVDE2NTUwIGZvciB5b3VyIG1hY2hpbmUuIG90aGV3aXNlLCB5b3UKICAqIG5lZWQgdG8gaW1wbGVtZW50IHlvdXIgb3duIHB1dGMoKS4KICAqLwotCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgod2VhaykpIHB1dGMoY2hhciBjKQordm9pZCBfX3dlYWsgcHV0YyhjaGFyIGMpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmMKaW5kZXggNTVkMDJiMy4uNWRiNDNjNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmMKKysrIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmMKQEAgLTUsOCArNSw4IEBACiAgKiBBdXRob3I6IE1hdHQgUG9ydGVyIDxtcG9ydGVyQG12aXN0YS5jb20+IERlcml2ZWQgZnJvbQogICogYXJjaC9wcGMvYm9vdC9wcmVwL21pc2MuYwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4gJiBJbnN0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL3VhcnQtYWxjaGVteS5jIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC91YXJ0LWFsY2hlbXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmZmMjJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC91YXJ0LWFsY2hlbXkuYwpAQCAtMCwwICsxLDcgQEAKKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisKK3ZvaWQgcHV0YyhjaGFyIGMpCit7CisJLyogYWxsIGN1cnJlbnQgKEphbi4gMjAxMCkgaW4ta2VybmVsIGJvYXJkcyAqLworCWFsY2hlbXlfdWFydF9wdXRjaGFyKFVBUlQwX1BIWVNfQUREUiwgYyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9kbWEtb2N0ZW9uLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9kbWEtb2N0ZW9uLmMKaW5kZXggNGI5MmJmYy4uYmU1MzFlYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZG1hLW9jdGVvbi5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2RtYS1vY3Rlb24uYwpAQCAtNDEsNyArNDEsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19QQ0kKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmFyMV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGJhcjFfbG9jayk7CiBzdGF0aWMgc3RydWN0IGJhcjFfaW5kZXhfc3RhdGUgYmFyMV9zdGF0ZVszMl07CiAjZW5kaWYKIApAQCAtMTk4LDcgKzE5OCw3IEBACiAJCXN0YXJ0X2luZGV4ID0gMzE7CiAKIAkvKiBPbmx5IG9uZSBwcm9jZXNzb3IgY2FuIGFjY2VzcyB0aGUgQmFyIHJlZ2lzdGVyIGF0IG9uY2UgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmFyMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZiYXIxX2xvY2ssIGZsYWdzKTsKIAogCS8qIExvb2sgdGhyb3VnaCBCYXIxIGZvciBleGlzdGluZyBtYXBwaW5nIHRoYXQgd2lsbCB3b3JrICovCiAJZm9yIChpbmRleCA9IHN0YXJ0X2luZGV4OyBpbmRleCA+PSAwOyBpbmRleC0tKSB7CkBAIC0yNTAsNyArMjUwLDcgQEAKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGh5c2ljYWwpOwogCiBkb25lX3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXIxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFyMV9sb2NrLCBmbGFncyk7CiBkb25lOgogCXByX2RlYnVnKCJkbWFfbWFwX3NpbmdsZSAweCVsbHgtPjB4JWxseFxuIiwgcGh5c2ljYWwsIHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTMyNCwxNCArMzI0LDE0IEBACiAJCSAgICAgICJBdHRlbXB0IHRvIHVubWFwIGFuIGludmFsaWQgYWRkcmVzcyAoMHglbGx4KVxuIiwKIAkJICAgICAgZG1hX2FkZHIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJhcjFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmFyMV9sb2NrLCBmbGFncyk7CiAJYmFyMV9zdGF0ZVtpbmRleF0ucmVmX2NvdW50LS07CiAJaWYgKGJhcjFfc3RhdGVbaW5kZXhdLnJlZl9jb3VudCA9PSAwKQogCQlvY3Rlb25fbnBpX3dyaXRlMzIoQ1ZNWF9OUElfUENJX0JBUjFfSU5ERVhYKGluZGV4KSwgMCk7CiAJZWxzZSBpZiAodW5saWtlbHkoYmFyMV9zdGF0ZVtpbmRleF0ucmVmX2NvdW50IDwgMCkpCiAJCXBhbmljKCJkbWFfdW5tYXBfc2luZ2xlOiBCYXIxWyV1XSByZWZlcmVuY2UgY291bnQgPCAwXG4iLAogCQkgICAgICAoaW50KSBpbmRleCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFyMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhcjFfbG9jaywgZmxhZ3MpOwogZG9uZToKIAlwcl9kZWJ1ZygiZG1hX3VubWFwX3NpbmdsZSAweCVsbHhcbiIsIGRtYV9hZGRyKTsKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvY3ZteC1ib290bWVtLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvY3ZteC1ib290bWVtLmMKaW5kZXggMjU2NjZkYS4uZmRmNWYxOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL2N2bXgtYm9vdG1lbS5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS9jdm14LWJvb3RtZW0uYwpAQCAtMjUzLDcgKzI1Myw3IEBACiAJICogaW1wb3NzaWJsZSByZXF1ZXN0cyB1cCBmcm9udC4gKE5PUCBmb3IgYWRkcmVzc19taW4gPT0gMCkKIAkgKi8KIAlpZiAoYWxpZ25tZW50KQotCQlhZGRyZXNzX21pbiA9IF9fQUxJR05fTUFTSyhhZGRyZXNzX21pbiwgKGFsaWdubWVudCAtIDEpKTsKKwkJYWRkcmVzc19taW4gPSBBTElHTihhZGRyZXNzX21pbiwgYWxpZ25tZW50KTsKIAogCS8qCiAJICogUmVqZWN0IGluY29uc2lzdGVudCBhcmdzLiAgV2UgaGF2ZSBhZGp1c3RlZCB0aGVzZSwgc28gdGhpcwpAQCAtMjkxLDcgKzI5MSw3IEBACiAJCSAqIHNhdGlzZnkgcmVxdWVzdC4KIAkJICovCiAJCXVzYWJsZV9iYXNlID0KLQkJICAgIF9fQUxJR05fTUFTSyhtYXgoYWRkcmVzc19taW4sIGVudF9hZGRyKSwgYWxpZ25tZW50IC0gMSk7CisJCSAgICBBTElHTihtYXgoYWRkcmVzc19taW4sIGVudF9hZGRyKSwgYWxpZ25tZW50KTsKIAkJdXNhYmxlX21heCA9IG1pbihhZGRyZXNzX21heCwgZW50X2FkZHIgKyBlbnRfc2l6ZSk7CiAJCS8qCiAJCSAqIFdlIHNob3VsZCBiZSBhYmxlIHRvIGFsbG9jYXRlIGJsb2NrIGF0IGFkZHJlc3MKQEAgLTY3MSw3ICs2NzEsNyBAQAogCSAqIGNvYWxsZXNjZWQgd2hlbiB0aGV5IGFyZSBmcmVlZC4gIFRoZSBhbGxvYyByb3V0aW5lIGRvZXMgdGhlCiAJICogc2FtZSByb3VuZGluZyB1cCBvbiBhbGwgYWxsb2NhdGlvbnMuCiAJICovCi0Jc2l6ZSA9IF9fQUxJR05fTUFTSyhzaXplLCAoQ1ZNWF9CT09UTUVNX0FMSUdOTUVOVF9TSVpFIC0gMSkpOworCXNpemUgPSBBTElHTihzaXplLCBDVk1YX0JPT1RNRU1fQUxJR05NRU5UX1NJWkUpOwogCiAJYWRkcl9hbGxvY2F0ZWQgPSBjdm14X2Jvb3RtZW1fcGh5X2FsbG9jKHNpemUsIG1pbl9hZGRyLCBtYXhfYWRkciwKIAkJCQkJCWFsaWdubWVudCwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS9jdm14LXN5c2luZm8uYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS9jdm14LXN5c2luZm8uYwppbmRleCBlNTgzODg5Li44YjE4YTIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvY3ZteC1zeXNpbmZvLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL2N2bXgtc3lzaW5mby5jCkBAIC0xMTUsNCArMTE1LDMgQEAKIAogCXJldHVybiAxOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKaW5kZXggNmYyYWNmMC4uYzQyNGNkMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYwpAQCAtMTMsOSArMTMsOCBAQAogI2luY2x1ZGUgPGFzbS9vY3Rlb24vY3ZteC1wZXhwLWRlZnMuaD4KICNpbmNsdWRlIDxhc20vb2N0ZW9uL2N2bXgtbnBpLWRlZnMuaD4KIAotREVGSU5FX1JXTE9DSyhvY3Rlb25faXJxX2NpdTBfcndsb2NrKTsKLURFRklORV9SV0xPQ0sob2N0ZW9uX2lycV9jaXUxX3J3bG9jayk7Ci1ERUZJTkVfU1BJTkxPQ0sob2N0ZW9uX2lycV9tc2lfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhvY3Rlb25faXJxX2NpdTBfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhvY3Rlb25faXJxX2NpdTFfbG9jayk7CiAKIHN0YXRpYyBpbnQgb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGludCBjcHUpCiB7CkBAIC01MSw5ICs1MCw2IEBACiAJICovCiAJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkKIAkJcmV0dXJuOwotCi0JLyogVGhlcmUgaXMgYSByYWNlIGhlcmUuICBXZSBzaG91bGQgZml4IGl0LiAgKi8KLQogCS8qCiAJICogV2UgZG9uJ3QgbmVlZCB0byBkaXNhYmxlIElSUXMgdG8gbWFrZSB0aGVzZSBhdG9taWMgc2luY2UKIAkgKiB0aGV5IGFyZSBhbHJlYWR5IGRpc2FibGVkIGVhcmxpZXIgaW4gdGhlIGxvdyBsZXZlbApAQCAtMTQxLDE5ICsxMzcsMTIgQEAKIAl1aW50NjRfdCBlbjA7CiAJaW50IGJpdCA9IGlycSAtIE9DVEVPTl9JUlFfV09SS1EwOwkvKiBCaXQgMC02MyBvZiBFTjAgKi8KIAotCS8qCi0JICogQSByZWFkIGxvY2sgaXMgdXNlZCBoZXJlIHRvIG1ha2Ugc3VyZSBvbmx5IG9uZSBjb3JlIGlzIGV2ZXIKLQkgKiB1cGRhdGluZyB0aGUgQ0lVIGVuYWJsZSBiaXRzIGF0IGEgdGltZS4gRHVyaW5nIGFuIGVuYWJsZQotCSAqIHRoZSBjb3JlcyBkb24ndCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyLiBEdXJpbmcgYSBkaXNhYmxlCi0JICogdGhlIHdyaXRlIGxvY2sgc3RvcHMgYW55IGVuYWJsZXMgdGhhdCBtaWdodCBjYXVzZSBhCi0JICogcHJvYmxlbS4KLQkgKi8KLQlyZWFkX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUwX2xvY2ssIGZsYWdzKTsKIAllbjAgPSBjdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKIAllbjAgfD0gMXVsbCA8PCBiaXQ7CiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMiksIGVuMCk7CiAJY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSk7Ci0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTBfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTYyLDcgKzE1MSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50NjRfdCBlbjA7CiAJaW50IGNwdTsKLQl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MF9sb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCQllbjAgPSBjdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKQEAgLTE3NCw3ICsxNjMsNyBAQAogCSAqIG9mIHRoZW0gYXJlIGRvbmUuCiAJICovCiAJY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjdm14X2dldF9jb3JlX251bSgpICogMikpOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC0xOTMsNyArMTgyLDcgQEAKICAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgY3VycmVudCBjb3JlIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CiAgKiByZWdpc3RlcnMuCiAgKi8KLXN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX3YyKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfYWNrX3YyKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDI7CiAJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCk7CkBAIC0yMDIsNiArMTkxLDQzIEBACiB9CiAKIC8qCisgKiBDSVUgdGltZXIgdHlwZSBpbnRlcnJ1cHRzIG11c3QgYmUgYWNrbm9sZWdlZCBieSB3cml0aW5nIGEgJzEnIGJpdAorICogdG8gdGhlaXIgc3VtMCBiaXQuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF90aW1lcl9hY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgaW5kZXggPSBjdm14X2dldF9jb3JlX251bSgpICogMjsKKwl1aW50NjRfdCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfU1VNMChpbmRleCksIG1hc2spOworfQorCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfdGltZXJfYWNrX3YxKHVuc2lnbmVkIGludCBpcnEpCit7CisJb2N0ZW9uX2lycV9jaXUwX3RpbWVyX2FjayhpcnEpOworCW9jdGVvbl9pcnFfY2l1MF9hY2soaXJxKTsKK30KKworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX3RpbWVyX2Fja192Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCW9jdGVvbl9pcnFfY2l1MF90aW1lcl9hY2soaXJxKTsKKwlvY3Rlb25faXJxX2NpdTBfYWNrX3YyKGlycSk7Cit9CisKKy8qCisgKiBFbmFibGUgdGhlIGlycSBvbiB0aGUgY3VycmVudCBjb3JlIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF9lb2lfdjIodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlpbnQgaW5kZXggPSBjdm14X2dldF9jb3JlX251bSgpICogMjsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV09SS1EwKTsKKworCWlmICgoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSA9PSAwKQorCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMF9XMVMoaW5kZXgpLCBtYXNrKTsKK30KKworLyoKICAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgYWxsIGNvcmVzIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CiAgKiByZWdpc3RlcnMuCiAgKi8KQEAgLTIyMyw3ICsyNDksNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGJpdCA9IGlycSAtIE9DVEVPTl9JUlFfV09SS1EwOwkvKiBCaXQgMC02MyBvZiBFTjAgKi8KIAotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUwX2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCXVpbnQ2NF90IGVuMCA9CkBAIC0yMzksNyArMjY1LDcgQEAKIAkgKiBvZiB0aGVtIGFyZSBkb25lLgogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIpKTsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTBfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNzIsOCArMjk4LDggQEAKIAkubmFtZSA9ICJDSVUwIiwKIAkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92MiwKIAkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX2FsbF92MiwKLQkuYWNrID0gb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGVfdjIsCi0JLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGVfdjIsCisJLmFjayA9IG9jdGVvbl9pcnFfY2l1MF9hY2tfdjIsCisJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lb2lfdjIsCiAjaWZkZWYgQ09ORklHX1NNUAogCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5X3YyLAogI2VuZGlmCkBAIC0yOTAsNiArMzE2LDI4IEBACiAjZW5kaWYKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb2N0ZW9uX2lycV9jaGlwX2NpdTBfdGltZXJfdjIgPSB7CisJLm5hbWUgPSAiQ0lVMC1UIiwKKwkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92MiwKKwkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX2FsbF92MiwKKwkuYWNrID0gb2N0ZW9uX2lycV9jaXUwX3RpbWVyX2Fja192MiwKKwkuZW9pID0gb2N0ZW9uX2lycV9jaXUwX2VvaV92MiwKKyNpZmRlZiBDT05GSUdfU01QCisJLnNldF9hZmZpbml0eSA9IG9jdGVvbl9pcnFfY2l1MF9zZXRfYWZmaW5pdHlfdjIsCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb2N0ZW9uX2lycV9jaGlwX2NpdTBfdGltZXIgPSB7CisJLm5hbWUgPSAiQ0lVMC1UIiwKKwkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZSwKKwkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlLAorCS5hY2sgPSBvY3Rlb25faXJxX2NpdTBfdGltZXJfYWNrX3YxLAorCS5lb2kgPSBvY3Rlb25faXJxX2NpdTBfZW9pLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5ID0gb2N0ZW9uX2lycV9jaXUwX3NldF9hZmZpbml0eSwKKyNlbmRpZgorfTsKKwogCiBzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfYWNrKHVuc2lnbmVkIGludCBpcnEpCiB7CkBAIC0zMjIsMTkgKzM3MCwxMiBAQAogCXVpbnQ2NF90IGVuMTsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsJLyogQml0IDAtNjMgb2YgRU4xICovCiAKLQkvKgotCSAqIEEgcmVhZCBsb2NrIGlzIHVzZWQgaGVyZSB0byBtYWtlIHN1cmUgb25seSBvbmUgY29yZSBpcyBldmVyCi0JICogdXBkYXRpbmcgdGhlIENJVSBlbmFibGUgYml0cyBhdCBhIHRpbWUuICBEdXJpbmcgYW4gZW5hYmxlCi0JICogdGhlIGNvcmVzIGRvbid0IGludGVyZmVyZSB3aXRoIGVhY2ggb3RoZXIuICBEdXJpbmcgYSBkaXNhYmxlCi0JICogdGhlIHdyaXRlIGxvY2sgc3RvcHMgYW55IGVuYWJsZXMgdGhhdCBtaWdodCBjYXVzZSBhCi0JICogcHJvYmxlbS4KLQkgKi8KLQlyZWFkX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUxX2xvY2ssIGZsYWdzKTsKIAllbjEgPSBjdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGNvcmVpZCAqIDIgKyAxKSk7CiAJZW4xIHw9IDF1bGwgPDwgYml0OwogCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGNvcmVpZCAqIDIgKyAxKSwgZW4xKTsKIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGNvcmVpZCAqIDIgKyAxKSk7Ci0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMzQzLDcgKzM4NCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50NjRfdCBlbjE7CiAJaW50IGNwdTsKLQl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9sb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCQllbjEgPSBjdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGNvcmVpZCAqIDIgKyAxKSk7CkBAIC0zNTUsNyArMzk2LDcgQEAKIAkgKiBvZiB0aGVtIGFyZSBkb25lLgogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxKSk7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUxX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTM3NCw3ICs0MTUsNyBAQAogICogRGlzYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KICAqIHJlZ2lzdGVycy4KICAqLwotc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUxX2Rpc2FibGVfdjIodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MV9hY2tfdjIodW5zaWduZWQgaW50IGlycSkKIHsKIAlpbnQgaW5kZXggPSBjdm14X2dldF9jb3JlX251bSgpICogMiArIDE7CiAJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dET0cwKTsKQEAgLTM4Myw2ICs0MjQsMjAgQEAKIH0KIAogLyoKKyAqIEVuYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUxX2VvaV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMTsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCisJaWYgKChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpID09IDApCisJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xX1cxUyhpbmRleCksIG1hc2spOworfQorCisvKgogICogRGlzYWJsZSB0aGUgaXJxIG9uIHRoZSBhbGwgY29yZXMgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KICAqIHJlZ2lzdGVycy4KICAqLwpAQCAtNDA1LDcgKzQ2MCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsJLyogQml0IDAtNjMgb2YgRU4xICovCiAKLQl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9sb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCQl1aW50NjRfdCBlbjEgPQpAQCAtNDIyLDcgKzQ3Nyw3IEBACiAJICogb2YgdGhlbSBhcmUgZG9uZS4KIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMSkpOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1NSw4ICs1MTAsOCBAQAogCS5uYW1lID0gIkNJVTAiLAogCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTFfZW5hYmxlX3YyLAogCS5kaXNhYmxlID0gb2N0ZW9uX2lycV9jaXUxX2Rpc2FibGVfYWxsX3YyLAotCS5hY2sgPSBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV92MiwKLQkuZW9pID0gb2N0ZW9uX2lycV9jaXUxX2VuYWJsZV92MiwKKwkuYWNrID0gb2N0ZW9uX2lycV9jaXUxX2Fja192MiwKKwkuZW9pID0gb2N0ZW9uX2lycV9jaXUxX2VvaV92MiwKICNpZmRlZiBDT05GSUdfU01QCiAJLnNldF9hZmZpbml0eSA9IG9jdGVvbl9pcnFfY2l1MV9zZXRfYWZmaW5pdHlfdjIsCiAjZW5kaWYKQEAgLTQ3NSw2ICs1MzAsOCBAQAogCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAorc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sob2N0ZW9uX2lycV9tc2lfbG9jayk7CisKIHN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfbXNpX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQogewogCWlmICghb2N0ZW9uX2hhc19mZWF0dXJlKE9DVEVPTl9GRUFUVVJFX1BDSUUpKSB7CkBAIC01MTUsMTIgKzU3MiwxMiBAQAogCQkgKi8KIAkJdWludDY0X3QgZW47CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX21zaV9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOwogCQllbiA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX0VOQjApOwogCQllbiB8PSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX01TSV9CSVQwKTsKIAkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX0VOQjAsIGVuKTsKIAkJY3ZteF9yZWFkX2NzcihDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTUzNywxMiArNTk0LDEyIEBACiAJCSAqLwogCQl1aW50NjRfdCBlbjsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX21zaV9sb2NrLCBmbGFncyk7CiAJCWVuID0gY3ZteF9yZWFkX2NzcihDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMCk7CiAJCWVuICY9IH4oMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9NU0lfQklUMCkpOwogCQljdm14X3dyaXRlX2NzcihDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMCwgZW4pOwogCQljdm14X3JlYWRfY3NyKENWTVhfUEVYUF9OUEVJX01TSV9FTkIwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtNTU5LDYgKzYxNiw3IEBACiB7CiAJaW50IGlycTsKIAlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAwOworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDBfdGltZXI7CiAJc3RydWN0IGlycV9jaGlwICpjaGlwMTsKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTU3NCw5ICs2MzIsMTEgQEAKIAkgICAgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjU2WFhfUEFTUzJfWCkgfHwKIAkgICAgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjUyWFhfUEFTUzJfWCkpIHsKIAkJY2hpcDAgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTBfdjI7CisJCWNoaXAwX3RpbWVyID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUwX3RpbWVyX3YyOwogCQljaGlwMSA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MV92MjsKIAl9IGVsc2UgewogCQljaGlwMCA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MDsKKwkJY2hpcDBfdGltZXIgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTBfdGltZXI7CiAJCWNoaXAxID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUxOwogCX0KIApAQCAtNTkwLDcgKzY1MCwyMSBAQAogCiAJLyogMjQgLSA4NyBDSVVfSU5UX1NVTTAgKi8KIAlmb3IgKGlycSA9IE9DVEVPTl9JUlFfV09SS1EwOyBpcnEgPD0gT0NURU9OX0lSUV9CT09URE1BOyBpcnErKykgewotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBjaGlwMCwgaGFuZGxlX3BlcmNwdV9pcnEpOworCQlzd2l0Y2ggKGlycSkgeworCQljYXNlIE9DVEVPTl9JUlFfR01YX0RSUDA6CisJCWNhc2UgT0NURU9OX0lSUV9HTVhfRFJQMToKKwkJY2FzZSBPQ1RFT05fSVJRX0lQRF9EUlA6CisJCWNhc2UgT0NURU9OX0lSUV9LRVlfWkVSTzoKKwkJY2FzZSBPQ1RFT05fSVJRX1RJTUVSMDoKKwkJY2FzZSBPQ1RFT05fSVJRX1RJTUVSMToKKwkJY2FzZSBPQ1RFT05fSVJRX1RJTUVSMjoKKwkJY2FzZSBPQ1RFT05fSVJRX1RJTUVSMzoKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIGNoaXAwX3RpbWVyLCBoYW5kbGVfcGVyY3B1X2lycSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIGNoaXAwLCBoYW5kbGVfcGVyY3B1X2lycSk7CisJCQlicmVhazsKKwkJfQogCX0KIAogCS8qIDg4IC0gMTUxIENJVV9JTlRfU1VNMSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLXBsYXRmb3JtLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24tcGxhdGZvcm0uYwppbmRleCBjZmRiNGMyLi42MmFjMzBlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24tcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24tcGxhdGZvcm0uYwpAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIApAQCAtMTU5LDYgKzE2MCw5MCBAQAogfQogZGV2aWNlX2luaXRjYWxsKG9jdGVvbl9ybmdfZGV2aWNlX2luaXQpOwogCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgb2N0ZW9uX2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygiZHMxMzM3IiwgMHg2OCksCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9pMmNfZGV2aWNlc19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG9jdGVvbl9pMmNfZGV2aWNlcywKKwkJCQkgICAgICAgQVJSQVlfU0laRShvY3Rlb25faTJjX2RldmljZXMpKTsKK30KK2FyY2hfaW5pdGNhbGwob2N0ZW9uX2kyY19kZXZpY2VzX2luaXQpOworCisjZGVmaW5lIE9DVEVPTl9JMkNfSU9fQkFTRSAweDExODAwMDAwMDEwMDB1bGwKKyNkZWZpbmUgT0NURU9OX0kyQ19JT19VTklUX09GRlNFVCAweDIwMAorCitzdGF0aWMgc3RydWN0IG9jdGVvbl9pMmNfZGF0YSBvY3Rlb25faTJjX2RhdGFbMl07CisKK3N0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9pMmNfZGV2aWNlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgcG9ydCwgbnVtX3BvcnRzOworCisJc3RydWN0IHJlc291cmNlIGkyY19yZXNvdXJjZXNbXSA9IHsKKwkJeworCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCX0sIHsKKwkJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQl9CisJfTsKKworCWlmIChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWCkgfHwgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjUyWFgpKQorCQludW1fcG9ydHMgPSAyOworCWVsc2UKKwkJbnVtX3BvcnRzID0gMTsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBudW1fcG9ydHM7IHBvcnQrKykgeworCQlvY3Rlb25faTJjX2RhdGFbcG9ydF0uc3lzX2ZyZXEgPSBvY3Rlb25fZ2V0X2Nsb2NrX3JhdGUoKTsKKwkJLypGSVhNRTogc2hvdWxkIGJlIGV4YW1pbmVkLiBBdCB0aGUgbW9tZW50IGlzIHNldCBmb3IgMTAwS2h6ICovCisJCW9jdGVvbl9pMmNfZGF0YVtwb3J0XS5pMmNfZnJlcSA9IDEwMDAwMDsKKworCQlwZCA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiaTJjLW9jdGVvbiIsIHBvcnQpOworCQlpZiAoIXBkKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlwZC0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBvY3Rlb25faTJjX2RhdGEgKyBwb3J0OworCisJCWkyY19yZXNvdXJjZXNbMF0uc3RhcnQgPQorCQkJT0NURU9OX0kyQ19JT19CQVNFICsgKHBvcnQgKiBPQ1RFT05fSTJDX0lPX1VOSVRfT0ZGU0VUKTsKKwkJaTJjX3Jlc291cmNlc1swXS5lbmQgPSBpMmNfcmVzb3VyY2VzWzBdLnN0YXJ0ICsgMHgxZjsKKwkJc3dpdGNoIChwb3J0KSB7CisJCWNhc2UgMDoKKwkJCWkyY19yZXNvdXJjZXNbMV0uc3RhcnQgPSBPQ1RFT05fSVJRX1RXU0k7CisJCQlpMmNfcmVzb3VyY2VzWzFdLmVuZCA9IE9DVEVPTl9JUlFfVFdTSTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlpMmNfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gT0NURU9OX0lSUV9UV1NJMjsKKwkJCWkyY19yZXNvdXJjZXNbMV0uZW5kID0gT0NURU9OX0lSUV9UV1NJMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCX0KKworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZCwKKwkJCQkJCSAgICBpMmNfcmVzb3VyY2VzLAorCQkJCQkJICAgIEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlcykpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsOworCisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGQpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsOworCX0KKwlyZXR1cm4gcmV0OworZmFpbDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorZGV2aWNlX2luaXRjYWxsKG9jdGVvbl9pMmNfZGV2aWNlX2luaXQpOworCiAvKiBPY3Rlb24gU01JL01ESU8gaW50ZXJmYWNlLiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9tZGlvYnVzX2RldmljZV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NtcC5jCmluZGV4IGMxOThlZmQuLjUxZTk4MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NtcC5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NtcC5jCkBAIC0zMjcsNyArMzI3LDcgQEAKIAkJCQkgICBhdmFpbF9jb3JlbWFzayk7CiAJfQogCi0JcHJfaW5mbygiUmVzZXQgY29yZSAlZC4gQXZhaWxhYmxlIENvcmVtYXNrID0gJXggXG4iLCBjb3JlaWQsCisJcHJfaW5mbygiUmVzZXQgY29yZSAlZC4gQXZhaWxhYmxlIENvcmVtYXNrID0gJXhcbiIsIGNvcmVpZCwKIAkJYXZhaWxfY29yZW1hc2spOwogCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX1BQX1JTVCwgMSA8PCBjb3JlaWQpOwogCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX1BQX1JTVCwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29iYWx0L3BjaS5jIGIvYXJjaC9taXBzL2NvYmFsdC9wY2kuYwppbmRleCBjZmNlN2FmLi44NWVjOWNjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29iYWx0L3BjaS5jCisrKyBiL2FyY2gvbWlwcy9jb2JhbHQvcGNpLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjb2JhbHRfaW9fcmVzb3VyY2UgPSB7CiAJLnN0YXJ0CT0gMHgxMDAwLAotCS5lbmQJPSBHVF9ERUZfUENJMF9JT19TSVpFIC0gMSwKKwkuZW5kCT0gMHhmZmZmZmZVTCwKIAkubmFtZQk9ICJQQ0kgSS9PIiwKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCmluZGV4IDY4ZTkwY2QuLmY2NmQ0MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZwpAQCAtMSw3OCArMSwxMDIgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAotIyBUdWUgRmViIDIwIDIxOjQ3OjI0IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMworIyBGcmkgRmViIDI2IDA4OjQ2OjE0IDIwMTAKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwotQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19NQUNIX0FMQ0hFTVk9eQotIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAotQ09ORklHX01JUFNfREIxMDAwPXkKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDA9eQorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX0RCMTAwMD15CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorQ09ORklHX1NPQ19BVTEwMDA9eQorQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX09QUk9GSUxFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0NFVlRfUjRLX0xJQj15CitDT05GSUdfQ1NSQ19SNEtfTElCPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19TT0NfQVUxMDAwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19JUlFfQ1BVPXkKIENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCisjIENPTkZJR19DUFVfTE9PTkdTT04yRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTE9PTkdTT04yRiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX01JUFMzMl9SMT15CiAjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldApAQCAtODUsNiArMTA5LDcgQEAKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKQEAgLTkyLDExICsxMTcsMTQgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQogQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMT15CiBDT05GSUdfQ1BVX01JUFMzMj15CiBDT05GSUdfQ1BVX01JUFNSMT15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfSEFSRFdBUkVfV0FUQ0hQT0lOVFM9eQogCiAjCiAjIEtlcm5lbCB0eXBlCkBAIC0xMDYsMTg0ICsxMzQsMjQ0IEBACiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWRiMTAwMCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19SRUxBWT15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiAjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX01NVT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotQ09ORklHX1BDQ0FSRD1tCi0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENDQVJEPXkKK0NPTkZJR19QQ01DSUE9eQogQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKKyMgQ09ORklHX1BDTUNJQV9JT0NUTCBpcyBub3Qgc2V0CiAKICMKICMgUEMtY2FyZCBicmlkZ2VzCiAjCiAjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTI5NCwxMTAgKzM4MiwyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDA3LDI3ICs0MTAsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDM2LDI1ICs0MzYsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotQ09ORklHX0NPTk5FQ1RPUj1tCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ2Nyw2ICs0NjcsNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ5MiwxNCArNDkzLDEzIEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQUxDSEVNWT15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNTE2LDE3NCArNTE2LDExNSBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1JBSURfQVRUUlM9bQorIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiBDT05GSUdfUEhZTElCPXkKIAogIwogIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCiAjCi1DT05GSUdfTUFSVkVMTF9QSFk9bQotQ09ORklHX0RBVklDT01fUEhZPW0KLUNPTkZJR19RU0VNSV9QSFk9bQotQ09ORklHX0xYVF9QSFk9bQotQ09ORklHX0NJQ0FEQV9QSFk9bQotQ09ORklHX1ZJVEVTU0VfUEhZPW0KLUNPTkZJR19TTVNDX1BIWT1tCi0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CitDT05GSUdfUVNFTUlfUEhZPXkKK0NPTkZJR19MWFRfUEhZPXkKK0NPTkZJR19DSUNBREFfUEhZPXkKK0NPTkZJR19WSVRFU1NFX1BIWT15CitDT05GSUdfU01TQ19QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CitDT05GSUdfSUNQTFVTX1BIWT15CitDT05GSUdfUkVBTFRFS19QSFk9eQorQ09ORklHX05BVElPTkFMX1BIWT15CitDT05GSUdfU1RFMTBYUD15CitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPXkKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPW0KK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVD15CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKICMKIAogIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19ORVRfUENNQ0lBPXkKLUNPTkZJR19QQ01DSUFfM0M1ODk9bQotQ09ORklHX1BDTUNJQV8zQzU3ND1tCi1DT05GSUdfUENNQ0lBX0ZNVkoxOFg9bQotQ09ORklHX1BDTUNJQV9QQ05FVD1tCi1DT05GSUdfUENNQ0lBX05NQ0xBTj1tCi1DT05GSUdfUENNQ0lBX1NNQzkxQzkyPW0KLUNPTkZJR19QQ01DSUFfWElSQzJQUz1tCi1DT05GSUdfUENNQ0lBX0FYTkVUPW0KLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC02OTEsMTYgKzYzMiwxNCBAQAogIwogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNzEwLDM1ICs2NDksMzMgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQotQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVMVgwMF9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DUz1tCisjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNzUwLDE5OCArNjg3LDI5MSBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKICMKICMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCiAjCi1DT05GSUdfU1lOQ0xJTktfQ1M9bQorIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwotIyBISUQgRGV2aWNlcworIyBVU0IgSW5wdXQgRGV2aWNlcwogIwotIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIHN1cHBvcnQKKyMgU3BlY2lhbCBISUQgZHJpdmVycwogIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19VU0JfU1VTUEVORD15CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgTEVEIGRyaXZlcnMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIExFRCBUcmlnZ2VycworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIEluZmluaUJhbmQgc3VwcG9ydAorIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMgVEkgVkxZTlEKICMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci1DT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19SRUlTRVJGU19GU19YQVRUUj15Ci1DT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz1tCi1DT05GSUdfQVVUT0ZTNF9GUz1tCi1DT05GSUdfRlVTRV9GUz1tCi1DT05GSUdfR0VORVJJQ19BQ0w9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC05NjAsNzQgKzk5MCw2NSBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci1DT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9bQorQ09ORklHX0NSQU1GUz15CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MwogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9bQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQotQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9bQorQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldApAQCAtMTA0NSwxMCArMTA2NiwxMCBAQAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKICMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKQEAgLTEwNTgsMzggKzEwNzksNzUgQEAKICMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE1PXkKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi1DT05GSUdfRExNPW0KLUNPTkZJR19ETE1fVENQPXkKLSMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTA5Nyw2NyArMTE1NSwyOSBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PW0KK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9bQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQotQ09ORklHX1RFWFRTRUFSQ0hfQk09bQotQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KLUNPTkZJR19QTElTVD15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZwppbmRleCA5MDgxMjgzLi5hYmI5YTU4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKQEAgLTEsNzggKzEsMTAyIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzoyNCAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAwODo1MDoxNSAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX0RCMTEwMD15Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19EQjExMDA9eQorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxMTAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15Ci1DT05GSUdfU09DX0FVMTEwMD15Ci1DT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQ1BVIHNlbGVjdGlvbgogIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTg1LDYgKzEwOSw3IEBACiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC05MiwxMSArMTE3LDE0IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKIENPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQogQ09ORklHX0NQVV9NSVBTMzI9eQogQ09ORklHX0NQVV9NSVBTUjE9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTA2LDE3MyArMTM0LDI0MiBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDA9eQogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQotQ09ORklHX0haPTEwMDAKK0NPTkZJR19IWj0xMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1kYjExMDAiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19USU5ZX1JDVT15CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfUkVMQVk9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX0FJTz15CiAKICMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCiAjCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKK0NPTkZJR19QQ0NBUkQ9eQorQ09ORklHX1BDTUNJQT15CitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKKyMgQ09ORklHX1BDTUNJQV9JT0NUTCBpcyBub3Qgc2V0CiAKICMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIyBQQy1jYXJkIGJyaWRnZXMKICMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworIyBDT05GSUdfUENNQ0lBX0FVMVgwMCBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTI4MywxMTAgKzM4MCwyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzk2LDI3ICs0MDgsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDI1LDI1ICs0MzQsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi1DT05GSUdfQ09OTkVDVE9SPW0KLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00NTYsNiArNDY1LDcgQEAKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00ODEsMTQgKzQ5MSwxMyBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0FMQ0hFTVk9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTUwNSwxNjEgKzUxNCwxMjMgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQogCiAjCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CitDT05GSUdfSURFX1RBU0tfSU9DVEw9eQorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwotIyBCbG9jayBkZXZpY2VzCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfUkFJRF9BVFRSUz1tCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKIENPTkZJR19QSFlMSUI9eQogCiAjCiAjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi1DT05GSUdfVklURVNTRV9QSFk9bQotQ09ORklHX1NNU0NfUEhZPW0KLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0RBVklDT01fUEhZPXkKK0NPTkZJR19RU0VNSV9QSFk9eQorQ09ORklHX0xYVF9QSFk9eQorQ09ORklHX0NJQ0FEQV9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKK0NPTkZJR19TTVNDX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19JQ1BMVVNfUEhZPXkKK0NPTkZJR19SRUFMVEVLX1BIWT15CitDT05GSUdfTkFUSU9OQUxfUEhZPXkKK0NPTkZJR19TVEUxMFhQPXkKK0NPTkZJR19MU0lfRVQxMDExQ19QSFk9eQogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAKICMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwogIwogCiAjCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC02NjcsMTYgKzYzOCwxNCBAQAogIwogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNjg2LDM0ICs2NTUsMzMgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci1DT05GSUdfU0VSSU9fTElCUFMyPW0KLUNPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVMVgwMF9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC03MjUsNzggKzY5Myw5MSBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBQUFMgc3VwcG9ydAogIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwotIyBNdWx0aW1lZGlhIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVUxMTAwPXkKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CkBAIC04MDQsOSArNzg1LDEwIEBACiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogQ09ORklHX0ZPTlRTPXkKLUNPTkZJR19GT05UXzh4OD15CisjIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVF84eDE2PXkKICMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldApAQCAtODE2LDEzMiArNzk4LDE4NiBAQAogIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIworIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgSElEIERldmljZXMKLSMKLSMgQ09ORklHX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19VU0JfU1VTUEVORD15CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgTEVEIGRyaXZlcnMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIExFRCBUcmlnZ2VycworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIEluZmluaUJhbmQgc3VwcG9ydAorIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMgVEkgVkxZTlEKICMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotQ09ORklHX0ZVU0VfRlM9bQotQ09ORklHX0dFTkVSSUNfQUNMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtOTYwLDY5ICs5OTYsNzYgQEAKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKK0NPTkZJR19KRkZTMl9GU19YQVRUUj15CitDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19KRkZTMl9GU19TRUNVUklUWT15CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD1tCi0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15Ci1DT05GSUdfRVhQT1JURlM9bQorQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz1tCitDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKQEAgLTEwNjIsMzQgKzExMDUsNzEgQEAKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi1DT05GSUdfRExNPW0KLUNPTkZJR19ETE1fVENQPXkKLSMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTA5Nyw2NyArMTE3NywzMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZwppbmRleCBkYWJmMDMwLi45OTFjMjBhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKQEAgLTEsNzggKzEsMTAyIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzoyNSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAxMDoxODowOSAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX0RCMTIwMD15Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19EQjEyMDA9eQorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxMjAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CiBDT05GSUdfTUlQU19ESVNBQkxFX09CU09MRVRFX0lERT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15Ci1DT05GSUdfU09DX0FVMTIwMD15Ci1DT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQ1BVIHNlbGVjdGlvbgogIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTg1LDYgKzEwOSw3IEBACiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC05MiwxMSArMTE3LDE0IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKIENPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQogQ09ORklHX0NQVV9NSVBTMzI9eQogQ09ORklHX0NQVV9NSVBTUjE9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTA2LDE4MCArMTM0LDIzNSBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19LU009eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cAogIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItZGIxMjAwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15CisjIENPTkZJR19QQ01DSUFfSU9DVEwgaXMgbm90IHNldAogCiAjCiAjIFBDLWNhcmQgYnJpZGdlcwogIwotQ09ORklHX1BDTUNJQV9BVTFYMDA9bQotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKKyMgQ09ORklHX1BDTUNJQV9BVTFYMDAgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTPXkKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CkBAIC0yOTAsMTA3ICszNzMsMjUgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDAwLDIxICs0MDEsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDIzLDI1ICs0MjcsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDU0LDYgKzQ1OCw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDc5LDE5ICs0ODQsMjEgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTUwMywyMjQgKzUxMCwxMzQgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogQ09ORklHX01URF9OQU5EPXkKICMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0lEUz15CiAjIENPTkZJR19NVERfTkFORF9BVTE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCitDT05GSUdfTVREX05BTkRfUExBVEZPUk09eQorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9VQj15CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotQ09ORklHX0lERV9NQVhfSFdJRlM9NAotQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworQ09ORklHX0lERV9YRkVSX01PREU9eQorQ09ORklHX0lERV9BVEFQST15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotQ09ORklHX0lERURJU0tfTVVMVElfTU9ERT15Ci1DT05GSUdfQkxLX0RFVl9JREVDUz1tCi0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNTPXkKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9UQVNLX0lPQ1RMPXkKKyMgQ09ORklHX0lERV9QUk9DX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi1DT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYPXkKIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfUElPX0RCRE1BPXkKICMgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9NRE1BMl9EQkRNQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX1NFUVRTX1BFUl9SUT0xMjgKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9UR1Q9bQorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLUNPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NSPXkKLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKLUNPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIFNDU0kgYWRhcHRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ01DSUFfQUhBMTUyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfRkRPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfTklOSkFfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfUUxPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9TWU01M0M1MDAgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST1tCitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19BVTFYMDBfRU5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKICMKIAogIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTcyOCwxNiArNjQ1LDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC03NDcsMjggKzY2MiwyNiBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fUkFXPXkKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CiBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVTFYMDBfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTc3NiwzMyArNjg5LDIyIEBACiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwPXkKIAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIAogIwpAQCAtODExLDIyMyArNzEzLDYyNCBAQAogIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0NIQVJERVY9eQorIyBDT05GSUdfSTJDX0hFTFBFUl9BVVRPIGlzIG5vdCBzZXQKIAogIwotIyBJMkMgc3VwcG9ydAorIyBJMkMgQWxnb3JpdGhtcwogIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKIAogIwotIyBTUEkgc3VwcG9ydAorIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19BVTE1NTA9eQorIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0FVMTU1MD15CitDT05GSUdfU1BJX0JJVEJBTkc9eQorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CitDT05GSUdfSFdNT05fVklEPXkKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIyBOYXRpdmUgZHJpdmVycwogIwotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0FETTEwMjU9eQorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19MTTcwPXkKKyMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwotIyBNdWx0aW1lZGlhIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVUxMjAwPXkKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgSElEIERldmljZXMKLSMKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfRk9OVFM9eQorIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHgxNj15CisjIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9KQUNLPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9WTUFTVEVSPXkKKyMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9BQzk3X0NPREVDPXkKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNQ0lBIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfU09DX0FDOTdfQlVTPXkKK0NPTkZJR19TTkRfU09DX0FVMVhQU0M9eQorQ09ORklHX1NORF9TT0NfQVUxWFBTQ19JMlM9eQorQ09ORklHX1NORF9TT0NfQVUxWFBTQ19BQzk3PXkKK0NPTkZJR19TTkRfU09DX0RCMTIwMD15CitDT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST15CisjIENPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1MgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0NfQUM5N19DT0RFQz15CitDT05GSUdfU05EX1NPQ19XTTg3MzE9eQorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0FDOTdfQlVTPXkKK0NPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSElEUkFXPXkKIAogIwotIyBVU0Igc3VwcG9ydAorIyBVU0IgSW5wdXQgRGV2aWNlcwogIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRERFVj15CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfREVCVUc9eQorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCi1DT05GSUdfVVNCX0dBREdFVD1tCi0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQogIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19BVTFYPXkKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKIAogIwotIyBMRUQgZGV2aWNlcworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKICMKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfQkxPQ0s9eQorIyBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19BVTFYPXkKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CiAKICMKICMgTEVEIGRyaXZlcnMKICMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xUMzU5MyBpcyBub3Qgc2V0CiAKICMKICMgTEVEIFRyaWdnZXJzCiAjCitDT05GSUdfTEVEU19UUklHR0VSUz15CisjIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CiAKICMKLSMgSW5maW5pQmFuZCBzdXBwb3J0CisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKICMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjIFJUQyBpbnRlcmZhY2VzCiAjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKIAogIwotIyBSZWFsIFRpbWUgQ2xvY2sKKyMgSTJDIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCi0jIERNQSBDbGllbnRzCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIERldmljZXMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCitDT05GSUdfUlRDX0RSVl9BVTFYWFg9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIyBUSSBWTFlOUQogIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRlNfRlM9eQotIyBDT05GSUdfSkZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FDTD15CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCi1DT05GSUdfSVNPOTY2MF9GUz1tCitDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQotQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX0ZTPXkKIENPTkZJR19VREZfTkxTPXkKIAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCi1DT05GSUdfRkFUX0ZTPW0KLUNPTkZJR19NU0RPU19GUz1tCi1DT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0ZTPXkKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKIENPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKICMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldApAQCAtMTAzNiwyMSArMTMzOSwxNyBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci1DT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CkBAIC0xMDU5LDI3ICsxMzU4LDM2IEBACiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKIENPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKICMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQogQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CiBDT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz1tCitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQpAQCAtMTA4Nyw5MyArMTM5NSwxNDAgQEAKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz15Ci0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIworIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfRUZJX1BBUlRJVElPTj15CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfOD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQotQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KLUNPTkZJR19OTFNfQVNDSUk9bQotQ09ORklHX05MU19JU084ODU5XzE9bQotQ09ORklHX05MU19JU084ODU5XzI9bQotQ09ORklHX05MU19JU084ODU5XzM9bQotQ09ORklHX05MU19JU084ODU5XzQ9bQotQ09ORklHX05MU19JU084ODU5XzU9bQotQ09ORklHX05MU19JU084ODU5XzY9bQotQ09ORklHX05MU19JU084ODU5Xzc9bQotQ09ORklHX05MU19JU084ODU5Xzk9bQotQ09ORklHX05MU19JU084ODU5XzEzPW0KLUNPTkZJR19OTFNfSVNPODg1OV8xND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTU9bQotQ09ORklHX05MU19LT0k4X1I9bQotQ09ORklHX05MU19LT0k4X1U9bQotQ09ORklHX05MU19VVEY4PW0KLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPXkKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0NNRExJTkVfQk9PTD15Ci1DT05GSUdfQ01ETElORT0ibWVtPTQ4TSIKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCIKICMgQ09ORklHX0NNRExJTkVfT1ZFUlJJREUgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfWkJPT1Q9eQogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTExODEsNjcgKzE1MzYsMzIgQEAKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotQ09ORklHX0NSWVBUT19ITUFDPW0KLUNPTkZJR19DUllQVE9fWENCQz1tCi1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCi1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19MUlc9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworQ09ORklHX1NFQ1VSSVRZRlM9eQorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0NSQ19DQ0lUVD15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfSVRVX1Q9eQogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZwppbmRleCBhMTUxMzEzLi41NDI0YzkxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKQEAgLTEsODAgKzEsMTA0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzoyNiAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAwODo0NjozMyAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX0RCMTUwMD15Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19EQjE1MDA9eQorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxNTAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CiBDT05GSUdfTUlQU19ESVNBQkxFX09CU09MRVRFX0lERT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQklHX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1NPQ19BVTE1MDA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0lSUV9DUFU9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIENQVSBzZWxlY3Rpb24KICMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTUlQUzMyX1IxPXkKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CkBAIC04Nyw2ICsxMTEsNyBAQAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtOTQsMTEgKzExOSwxNCBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CiBDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKIENPTkZJR19DUFVfTUlQUzMyPXkKIENPTkZJR19DUFVfTUlQU1IxPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CiAKICMKICMgS2VybmVsIHR5cGUKQEAgLTEwOCwxMzcgKzEzNiwyMDcgQEAKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWRiMTUwMCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1JFTEFZPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfUENJX1FVSVJLUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogQ09ORklHX01NVT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotQ09ORklHX1BDQ0FSRD1tCi0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENDQVJEPXkKK0NPTkZJR19QQ01DSUE9eQogQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKLUNPTkZJR19DQVJEQlVTPXkKKyMgQ09ORklHX1BDTUNJQV9JT0NUTCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJEQlVTIGlzIG5vdCBzZXQKIAogIwogIyBQQy1jYXJkIGJyaWRnZXMKQEAgLTI0Niw1MSArMzQ0LDQ5IEBACiAjIENPTkZJR19ZRU5UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAogIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUFfQVUxWDAwPW0KLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCisjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfQUxDSEVNWV9ERVZCT0FSRD15CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAKICMKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAogQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9SQVJQPXkKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldApAQCAtMzAxLDExMCArMzk3LDI1IEBACiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCi1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi1DT05GSUdfVENQX01ENVNJRz15Ci0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfU0VDTUFSSz15Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19ORl9DVF9QUk9UT19HUkU9bQotQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQotQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQotQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQotQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KLUNPTkZJR19ORl9DVF9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC00MTQsMjcgKzQyNSwyNCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUk9VVEU9eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCi0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCi0jIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00NDMsMjUgKzQ1MSwyNSBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi1DT05GSUdfQ09OTkVDVE9SPW0KLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDc0LDYgKzQ4Miw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDk5LDE0ICs1MDgsMTQgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTUyNCwxNTIgKzUzMywxNTIgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIworQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KLQotIwotIyBNaXNjIGRldmljZXMKLSMKLUNPTkZJR19TR0lfSU9DND1tCi0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ1M9bQotIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ1M9eQogIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCiAjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKK0NPTkZJR19CTEtfREVWX0lERVBDST15CisjIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKKyMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9IUFQzNjY9eQorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1JBSURfQVRUUlM9bQorIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX1BIWUxJQj15CiAKICMKICMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwogIwotQ09ORklHX01BUlZFTExfUEhZPW0KLUNPTkZJR19EQVZJQ09NX1BIWT1tCi1DT05GSUdfUVNFTUlfUEhZPW0KLUNPTkZJR19MWFRfUEhZPW0KLUNPTkZJR19DSUNBREFfUEhZPW0KLUNPTkZJR19WSVRFU1NFX1BIWT1tCi1DT05GSUdfU01TQ19QSFk9bQotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfREFWSUNPTV9QSFk9eQorQ09ORklHX1FTRU1JX1BIWT15CitDT05GSUdfTFhUX1BIWT15CitDT05GSUdfQ0lDQURBX1BIWT15CitDT05GSUdfVklURVNTRV9QSFk9eQorQ09ORklHX1NNU0NfUEhZPXkKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorQ09ORklHX0lDUExVU19QSFk9eQorQ09ORklHX1JFQUxURUtfUEhZPXkKK0NPTkZJR19OQVRJT05BTF9QSFk9eQorQ09ORklHX1NURTEwWFA9eQorQ09ORklHX0xTSV9FVDEwMTFDX1BIWT15CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIworIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVD15CiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKQEAgLTY3Nyw4OCArNjg2LDUxIEBACiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19RTEEzWFhYPW0KLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UMz1tCi0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotQ09ORklHX05FVFhFTl9OSUM9bQotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIworIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAogCiAjCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTc2NiwxNiArNzM4LDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC03ODUsMzMgKzc1NSwzNCBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVTFYMDBfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKQEAgLTgyNSwzMDEgKzc5NiwxNDMgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAKICMKICMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCiAjCi1DT05GSUdfU1lOQ0xJTktfQ1M9bQorIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIworQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIFNvdW5kCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19TT1VORD15CisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKLUNPTkZJR19TTkQ9bQotQ09ORklHX1NORF9USU1FUj1tCi1DT05GSUdfU05EX1BDTT1tCi1DT05GSUdfU05EX1JBV01JREk9bQotQ09ORklHX1NORF9TRVFVRU5DRVI9bQotQ09ORklHX1NORF9TRVFfRFVNTVk9bQotQ09ORklHX1NORF9PU1NFTVVMPXkKLUNPTkZJR19TTkRfTUlYRVJfT1NTPW0KLUNPTkZJR19TTkRfUENNX09TUz1tCi1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15Ci1DT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCi1DT05GSUdfU05EX0FDOTdfQ09ERUM9bQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVklSTUlEST1tCi1DT05GSUdfU05EX01UUEFWPW0KLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotCi0jCi0jIFBDSSBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQUxTQSBNSVBTIGRldmljZXMKLSMKLUNPTkZJR19TTkRfQVUxWDAwPW0KLQotIwotIyBVU0IgZGV2aWNlcwotIwotIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9WWFBPQ0tFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKLQotIwotIyBTb0MgYXVkaW8gc3VwcG9ydAotIwotIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKLUNPTkZJR19TT1VORF9QUklNRT15Ci0jIENPTkZJR19PQlNPTEVURV9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQlQ4NzggaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfSUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9WSUE4MkNYWFggaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPW0KLQotIwotIyBISUQgRGV2aWNlcwotIwotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKICMKICMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19VU0JfU1VTUEVORD15CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1lFQUxJTks9bQotIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1RDTyBpcyBub3Qgc2V0Ci0KLSMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwogIwogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci0KLSMKICMgVVNCIHBvcnQgZHJpdmVycwogIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAogCiAjCkBAIC0xMTI4LDcgKzk0MSw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKQEAgLTExMzYsMTEyICs5NDksMTA3IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotQ09ORklHX1VTQl9MRD1tCisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAorIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIworIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgSW5maW5pQmFuZCBzdXBwb3J0Ci0jCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKICMKIAogIwotIyBSZWFsIFRpbWUgQ2xvY2sKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0CisjIG9uLUNQVSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9BVTFYWFg9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIENsaWVudHMKKyMgVEkgVkxZTlEKICMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKLSMKLQotIwotIyBWaXJ0dWFsaXphdGlvbgotIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUMl9GU19YQVRUUj15Ci1DT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLUNPTkZJR19SRUlTRVJGU19GUz1tCi0jIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAotQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKLUNPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPW0KLUNPTkZJR19BVVRPRlM0X0ZTPW0KLUNPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTEyNjAsNzQgKzEwNjgsODEgQEAKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKK0NPTkZJR19KRkZTMl9GU19YQVRUUj15CitDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19KRkZTMl9GU19TRUNVUklUWT15CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD1tCi0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15Ci1DT05GSUdfRVhQT1JURlM9bQorQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz1tCitDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CkBAIC0xMzQ1LDEwICsxMTYwLDEwIEBACiAjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CiAjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CkBAIC0xMzU4LDM4ICsxMTczLDc2IEBACiAjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotQ09ORklHX0RMTT1tCi1DT05GSUdfRExNX1RDUD15Ci0jIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfWkJPT1Q9eQogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTEzOTcsNjcgKzEyNTAsMzIgQEAKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fWENCQz1tCi1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCi1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19MUlc9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworQ09ORklHX1NFQ1VSSVRZRlM9eQorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi1DT05GSUdfQ1JDMTY9bQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKaW5kZXggNmI2NDMzOS4uOTQ5YjZkYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCkBAIC0xLDc5ICsxLDEwMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCi0jIFR1ZSBGZWIgMjAgMjE6NDc6MjcgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCisjIEZyaSBGZWIgMjYgMDg6NTg6MjIgMjAxMAogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX01BQ0hfQUxDSEVNWT15Ci0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlQU19EQjE1NTA9eQotIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9PTkdTT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMD15CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorQ09ORklHX01JUFNfREIxNTUwPXkKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CitDT05GSUdfU09DX0FVMTU1MD15CitDT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BST0ZJTEU9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfQ0VWVF9SNEtfTElCPXkKK0NPTkZJR19DU1JDX1I0S19MSUI9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogQ09ORklHX01JUFNfRElTQUJMRV9PQlNPTEVURV9JREU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1NPQ19BVTE1NTA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0lSUV9DUFU9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIENQVSBzZWxlY3Rpb24KICMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTUlQUzMyX1IxPXkKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CkBAIC04Niw2ICsxMTAsNyBAQAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtOTMsMTEgKzExOCwxNCBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CiBDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKIENPTkZJR19DUFVfTUlQUzMyPXkKIENPTkZJR19DUFVfTUlQU1IxPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CiAKICMKICMgS2VybmVsIHR5cGUKQEAgLTEwNywxMzcgKzEzNSwyMDUgQEAKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWRiMTU1MCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19SRUxBWT15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKIAogIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1BDSV9RVUlSS1M9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi1DT05GSUdfUENDQVJEPW0KLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPW0KK0NPTkZJR19QQ0NBUkQ9eQorQ09ORklHX1BDTUNJQT15CiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQotQ09ORklHX0NBUkRCVVM9eQorIyBDT05GSUdfUENNQ0lBX0lPQ1RMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRCVVMgaXMgbm90IHNldAogCiAjCiAjIFBDLWNhcmQgYnJpZGdlcwpAQCAtMjQ1LDUxICszNDEsNDkgQEAKICMgQ09ORklHX1lFTlRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQV9BVTFYMDA9bQotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKKyMgQ09ORklHX1BDTUNJQV9BVTFYMDAgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9NSUdSQVRFPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX1JBUlA9eQogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CkBAIC0zMDAsMTEwICszOTQsMjUgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19ORl9DVF9BQ0NUPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCi1DT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQotQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQotQ09ORklHX05GX0NUX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTQxMywyNyArNDIyLDI0IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19ST1VURT15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQ0MiwyNSArNDQ4LDI1IEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLUNPTkZJR19DT05ORUNUT1I9bQotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ3Myw2ICs0NzksNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ5OCwyMCArNTA1LDIzIEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQUxDSEVNWT15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwogIwogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNTIzLDEwNSArNTMzLDk2IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19NVERfTkFORD1tCitDT05GSUdfTVREX05BTkQ9eQogIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz1tCi1DT05GSUdfTVREX05BTkRfQVUxNTUwPW0KKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CitDT05GSUdfTVREX05BTkRfQVUxNTUwPXkKICMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIworQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1VCPXkKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi1DT05GSUdfU0dJX0lPQzQ9bQotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCitDT05GSUdfSURFX1hGRVJfTU9ERT15CitDT05GSUdfSURFX0FUQVBJPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ1M9bQotIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CitDT05GSUdfQkxLX0RFVl9JREVDRD15CisjIENPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1RBU0tfSU9DVEw9eQorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi1DT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKIENPTkZJR19CTEtfREVWX0lERVBDST15Ci0jIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX1BDSV9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0hQVDM2Nj15CiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lUODIxMz1tCisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldApAQCAtNjMxLDgyICs2MzIsNjUgQEAKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfVEM4NkMwMDE9bQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15Ci0jIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19SQUlEX0FUVFJTPW0KKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19QSFlMSUI9eQogCiAjCiAjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi1DT05GSUdfVklURVNTRV9QSFk9bQotQ09ORklHX1NNU0NfUEhZPW0KLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0RBVklDT01fUEhZPXkKK0NPTkZJR19RU0VNSV9QSFk9eQorQ09ORklHX0xYVF9QSFk9eQorQ09ORklHX0NJQ0FEQV9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKK0NPTkZJR19TTVNDX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19JQ1BMVVNfUEhZPXkKK0NPTkZJR19SRUFMVEVLX1BIWT15CitDT05GSUdfTkFUSU9OQUxfUEhZPXkKK0NPTkZJR19TVEUxMFhQPXkKK0NPTkZJR19MU0lfRVQxMDExQ19QSFk9eQogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUPXkKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldApAQCAtNzE0LDk2ICs2OTgsNTMgQEAKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLQotIwotIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotQ09ORklHX1FMQTNYWFg9bQotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzPW0KLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUWEVOX05JQz1tCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAogCiAjCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCi1DT05GSUdfTkVUX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBXzNDNTg5PW0KLUNPTkZJR19QQ01DSUFfM0M1NzQ9bQotQ09ORklHX1BDTUNJQV9GTVZKMThYPW0KLUNPTkZJR19QQ01DSUFfUENORVQ9bQotQ09ORklHX1BDTUNJQV9OTUNMQU49bQotQ09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCi1DT05GSUdfUENNQ0lBX1hJUkMyUFM9bQotQ09ORklHX1BDTUNJQV9BWE5FVD1tCi0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTgxMSwxNiArNzUyLDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC04MzAsMjYgKzc2OSwyNyBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVTFYMDBfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC04NjYsMTk5ICs4MDYsNDIwIEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAogCiAjCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwogIwotQ09ORklHX1NZTkNMSU5LX0NTPW0KKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAorQ09ORklHX0kyQ19DSEFSREVWPXkKKyMgQ09ORklHX0kyQ19IRUxQRVJfQVVUTyBpcyBub3Qgc2V0CiAKICMKLSMgSTJDIHN1cHBvcnQKKyMgSTJDIEFsZ29yaXRobXMKICMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CiAKICMKLSMgU1BJIHN1cHBvcnQKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwogIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0FVMTU1MD15CisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQVUxNTUwPXkKK0NPTkZJR19TUElfQklUQkFORz15CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIFNvdW5kCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgSElEIERldmljZXMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCi0jIENPTkZJR19ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfU09VTkQ9eQorIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKK0NPTkZJR19TTkRfSkFDSz15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorQ09ORklHX1NORF9IUlRJTUVSPXkKK0NPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlQUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1VTQj15CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTUNJQSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX1NPQ19BVTFYUFNDPXkKKyMgQ09ORklHX1NORF9TT0NfREIxMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorQ09ORklHX1VTQl9TVVNQRU5EPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBSVEMgaW50ZXJmYWNlcwogIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CiAKICMKLSMgUmVhbCBUaW1lIENsb2NrCisjIEkyQyBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0CisjIFNQSSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwotIyBETUEgQ2xpZW50cworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIERNQSBEZXZpY2VzCisjIG9uLUNQVSBSVEMgZHJpdmVycwogIworQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCi0jIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMgVEkgVkxZTlEKICMKLQotIwotIyBWaXJ0dWFsaXphdGlvbgotIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUMl9GU19YQVRUUj15Ci1DT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLUNPTkZJR19SRUlTRVJGU19GUz1tCi0jIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAotQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKLUNPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz1tCi1DT05GSUdfQVVUT0ZTNF9GUz1tCi1DT05GSUdfRlVTRV9GUz1tCi1DT05GSUdfR0VORVJJQ19BQ0w9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0xMDc3LDc1ICsxMjM4LDgyIEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX0NPTkZJR0ZTX0ZTPXkKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9bQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorQ09ORklHX0pGRlMyX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD1tCi0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15Ci1DT05GSUdfRVhQT1JURlM9bQorQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz1tCitDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKQEAgLTExNjIsMTAgKzEzMzAsMTAgQEAKICMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKICMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKQEAgLTExNzUsMzggKzEzNDMsNzUgQEAKICMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE1PXkKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi1DT05GSUdfRExNPW0KLUNPTkZJR19ETE1fVENQPXkKLSMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTIxNCw2NyArMTQxOSwzMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCmluZGV4IGVkODRiNGMuLjg0YjY1MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzLXJjMgotIyBUdWUgQXVnICA3IDEzOjA0OjI0IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzYKKyMgV2VkIEZlYiAgMyAxODoxMjozMSAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTksMjAgKzksMjggQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAotIyBDT05GSUdfTEVNT1RFX0ZVTE9ORyBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKIENPTkZJR19TR0lfSVAyNz15CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldApAQCAtMzMsMzIgKzQxLDM5IEBACiAjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKIENPTkZJR19TR0lfU05fTV9NT0RFPXkKICMgQ09ORklHX1NHSV9TTl9OX01PREUgaXMgbm90IHNldAogIyBDT05GSUdfTUFQUEVEX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRVBMSUNBVEVfS1RFWFQgaXMgbm90IHNldAogIyBDT05GSUdfUkVQTElDQVRFX0VYSEFORExFUlMgaXMgbm90IHNldAorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX09QUk9GSUxFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfQVJDPXkKIENPTkZJR19ETUFfQ09IRVJFTlQ9eQotQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfQklHX0VORElBTj15CiAjIENPTkZJR19DUFVfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0JJR19FTkRJQU49eQorQ09ORklHX0RFRkFVTFRfU0dJX1BBUlRJVElPTj15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD03CiBDT05GSUdfQVJDNjQ9eQogQ09ORklHX0JPT1RfRUxGNjQ9eQpAQCAtNjYsNyArODEsOCBAQAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCi0jIENPTkZJR19DUFVfTE9PTkdTT04yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTMzJfUjEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTc5LDYgKzk1LDcgQEAKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKQEAgLTg2LDYgKzEwMyw3IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX0hBU19DUFVfUjEwMDAwPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKQEAgLTk5LDYgKzExNyw3IEBACiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKQEAgLTExMCw2ICsxMjksNyBAQAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfTlVNQT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQogQ09ORklHX05PREVTX1NISUZUPTYKQEAgLTEyMCwxNiArMTQwLDIyIEBACiBDT05GSUdfRElTQ09OVElHTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQotQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTY1NTM2CiBDT05GSUdfU01QPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfU01QPXkKIENPTkZJR19OUl9DUFVTX0RFRkFVTFRfNjQ9eQogQ09ORklHX05SX0NQVVM9NjQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CkBAIC0xNDIsMTMgKzE2OCwxMyBAQAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX0JLTD15CiAjIENPTkZJR19NSVBTX0lOU0FORV9MQVJHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTE2MiwyMCArMTg4LDQxIEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9NjQKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE1CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0dST1VQUz15CisjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9GUkVFWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9ERVZJQ0UgaXMgbm90IHNldAogQ09ORklHX0NQVVNFVFM9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1BST0NfUElEX0NQVVNFVD15CisjIENPTkZJR19DR1JPVVBfQ1BVQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNPVVJDRV9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKIENPTkZJR19SRUxBWT15CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKQEAgLTE4NCw0NCArMjMxLDkyIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlM9eQorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKK0NPTkZJR19TTE9XX1dPUks9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKIENPTkZJR19TVE9QX01BQ0hJTkU9eQogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NHUk9VUCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0tfQ09NUEFUPXkKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19DRlFfR1JPVVBfSU9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CitDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUj15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCkBAIC0yMzAsMTEgKzMyNSwxMCBAQAogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAKQEAgLTI0Miw4ICszMzYsOSBAQAogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTPXkKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVUlMRF9FTEY2NCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQUzMyX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19TWVNWSVBDX0NPTVBBVD15CkBAIC0yNTUsMTMgKzM1MCwxMCBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX05FVD15CitDT05GSUdfQ09NUEFUX05FVExJTktfTUVTU0FHRVM9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwpAQCAtMjczLDYgKzM2NSw4IEBACiBDT05GSUdfWEZSTV9VU0VSPW0KICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiBDT05GSUdfWEZSTV9NSUdSQVRFPXkKK0NPTkZJR19YRlJNX1NUQVRJU1RJQ1M9eQorQ09ORklHX1hGUk1fSVBDT01QPW0KIENPTkZJR19ORVRfS0VZPXkKIENPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQpAQCAtMjkyLDE5ICszODYsNDAgQEAKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVF9MUk89eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgogQ09ORklHX1RDUF9NRDVTSUc9eQotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lQVjY9eQorQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CitDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkKK0NPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXkKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lQVjZfTUlQNj1tCitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTj1tCitDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfU0lUXzZSRD15CitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUFY2X1NVQlRSRUVTPXkKK0NPTkZJR19JUFY2X01ST1VURT15CitDT05GSUdfSVBWNl9QSU1TTV9WMj15CiBDT05GSUdfTkVUV09SS19TRUNNQVJLPXkKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKQEAgLTMxNCw5ICs0MjksMTEgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTMyNiwxMiArNDQzLDkgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogQ09ORklHX05FVF9TQ0hFRD15Ci1DT05GSUdfTkVUX1NDSF9GSUZPPXkKIAogIwogIyBRdWV1ZWluZy9TY2hlZHVsaW5nCkBAIC0zNDAsNyArNDU0LDcgQEAKIENPTkZJR19ORVRfU0NIX0hUQj1tCiBDT05GSUdfTkVUX1NDSF9IRlNDPW0KIENPTkZJR19ORVRfU0NIX1BSSU89bQotQ09ORklHX05FVF9TQ0hfUlI9bQorQ09ORklHX05FVF9TQ0hfTVVMVElRPXkKIENPTkZJR19ORVRfU0NIX1JFRD1tCiBDT05GSUdfTkVUX1NDSF9TRlE9bQogQ09ORklHX05FVF9TQ0hfVEVRTD1tCkBAIC0zNDgsNiArNDYyLDcgQEAKIENPTkZJR19ORVRfU0NIX0dSRUQ9bQogQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0KIENPTkZJR19ORVRfU0NIX05FVEVNPW0KKyMgQ09ORklHX05FVF9TQ0hfRFJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfU0NIX0lOR1JFU1M9bQogCiAjCkBAIC0zNjQsNDEgKzQ3OSw2MyBAQAogQ09ORklHX0NMU19VMzJfTUFSSz15CiBDT05GSUdfTkVUX0NMU19SU1ZQPW0KIENPTkZJR19ORVRfQ0xTX1JTVlA2PW0KK0NPTkZJR19ORVRfQ0xTX0ZMT1c9bQorQ09ORklHX05FVF9DTFNfQ0dST1VQPXkKICMgQ09ORklHX05FVF9FTUFUQ0ggaXMgbm90IHNldAogQ09ORklHX05FVF9DTFNfQUNUPXkKIENPTkZJR19ORVRfQUNUX1BPTElDRT15CiBDT05GSUdfTkVUX0FDVF9HQUNUPW0KIENPTkZJR19HQUNUX1BST0I9eQogQ09ORklHX05FVF9BQ1RfTUlSUkVEPW0KK0NPTkZJR19ORVRfQUNUX05BVD1tCiBDT05GSUdfTkVUX0FDVF9QRURJVD1tCiAjIENPTkZJR19ORVRfQUNUX1NJTVAgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUE9MSUNFPXkKK0NPTkZJR19ORVRfQUNUX1NLQkVESVQ9bQogIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hfRklGTz15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLUNPTkZJR19DRkc4MDIxMT1tCitDT05GSUdfRklCX1JVTEVTPXkKK0NPTkZJR19XSVJFTEVTUz15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XRVhUX0NPUkU9eQorQ09ORklHX1dFWFRfUFJPQz15CitDT05GSUdfV0VYVF9TUFk9eQorQ09ORklHX1dFWFRfUFJJVj15CitDT05GSUdfQ0ZHODAyMTE9bQorIyBDT05GSUdfTkw4MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9XRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorQ09ORklHX0xJQjgwMjExPW0KK0NPTkZJR19MSUI4MDIxMV9DUllQVF9XRVA9bQorQ09ORklHX0xJQjgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0xJQjgwMjExX0NSWVBUX1RLSVA9bQorIyBDT05GSUdfTElCODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExPW0KLSMgQ09ORklHX01BQzgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19QSUQ9eQorQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMPXkKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJtaW5zdHJlbCIKKyMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX0xFRFM9eQorIyBDT05GSUdfTUFDODAyMTFfREVCVUdfTUVOVSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiBDT05GSUdfUkZLSUxMPW0KK0NPTkZJR19SRktJTExfTEVEUz15CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCkBAIC00MDgsOSArNTQ1LDEzIEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPW0KICMgQ09ORklHX01URCBpcyBub3Qgc2V0CkBAIC00MjMsMTQgKzU2NCwxOSBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfT1NEPW0KICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAogQ09ORklHX0FUQV9PVkVSX0VUSD1tCisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfRUVQUk9NXzkzQ1g2PW0KK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC00NTMsMTAgKzU5OSw2IEBACiBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQogQ09ORklHX0NIUl9ERVZfU0c9bQogQ09ORklHX0NIUl9ERVZfU0NIPW0KLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKQEAgLTQ3MSwxMSArNjEzLDE4IEBACiBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCiBDT05GSUdfU0NTSV9TQVNfQVRUUlM9bQogQ09ORklHX1NDU0lfU0FTX0xJQlNBUz1tCitDT05GSUdfU0NTSV9TQVNfSE9TVF9TTVA9eQogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DWEdCM19JU0NTST1tCitDT05GSUdfU0NTSV9CTlgyX0lTQ1NJPW0KK0NPTkZJR19CRTJJU0NTST1tCiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9IUFNBPW0KICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV8zV19TQVM9bQogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKQEAgLTQ4MywxMSArNjMyLDIxIEBACiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogQ09ORklHX1NDU0lfQUlDOTRYWD1tCiAjIENPTkZJR19BSUM5NFhYX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX01WU0FTPW0KKyMgQ09ORklHX1NDU0lfTVZTQVNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NDU0lfRFBUX0kyTz1tCisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX01QVDJTQVM9bQorQ09ORklHX1NDU0lfTVBUMlNBU19NQVhfU0dFPTEyOAorIyBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorQ09ORklHX0xJQkZDPW0KKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CkBAIC01MDIsMTYgKzY2MSwzMSBAQAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QTUNSQUlEPW0KKyMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0JGQV9GQz1tCitDT05GSUdfU0NTSV9ESD1tCitDT05GSUdfU0NTSV9ESF9SREFDPW0KK0NPTkZJR19TQ1NJX0RIX0hQX1NXPW0KK0NPTkZJR19TQ1NJX0RIX0VNQz1tCitDT05GSUdfU0NTSV9ESF9BTFVBPW0KK0NPTkZJR19TQ1NJX09TRF9JTklUSUFUT1I9bQorQ09ORklHX1NDU0lfT1NEX1VMRD1tCitDT05GSUdfU0NTSV9PU0RfRFBSSU5UX1NFTlNFPTEKKyMgQ09ORklHX1NDU0lfT1NEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogQ09ORklHX01EX0xJTkVBUj1tCiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKIENPTkZJR19NRF9SQUlEMTA9bQogQ09ORklHX01EX1JBSUQ0NTY9eQotQ09ORklHX01EX1JBSUQ1X1JFU0hBUEU9eQorIyBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ2X1BRPXkKKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KIENPTkZJR19CTEtfREVWX0RNPW0KQEAgLTUxOSwzNiArNjkzLDM5IEBACiBDT05GSUdfRE1fQ1JZUFQ9bQogQ09ORklHX0RNX1NOQVBTSE9UPW0KIENPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX0xPR19VU0VSU1BBQ0U9bQogQ09ORklHX0RNX1pFUk89bQogQ09ORklHX0RNX01VTFRJUEFUSD1tCi1DT05GSUdfRE1fTVVMVElQQVRIX0VNQz1tCi1DT05GSUdfRE1fTVVMVElQQVRIX1JEQUM9bQorQ09ORklHX0RNX01VTFRJUEFUSF9RTD1tCitDT05GSUdfRE1fTVVMVElQQVRIX1NUPW0KICMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCitDT05GSUdfRE1fVUVWRU5UPXkKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCisjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRT15CiBDT05GSUdfSUZCPW0KICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogQ09ORklHX01BQ1ZMQU49bQogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CitDT05GSUdfVkVUSD1tCiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj1tCitDT05GSUdfUEhZTElCPXkKIAogIwogIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCkBAIC01NjIsMjMgKzczOSw1MSBAQAogQ09ORklHX1NNU0NfUEhZPW0KICMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfSUNQTFVTX1BIWT1tCitDT05GSUdfUkVBTFRFS19QSFk9bQorQ09ORklHX05BVElPTkFMX1BIWT1tCitDT05GSUdfU1RFMTBYUD1tCitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPW0KICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTURJT19CSVRCQU5HPW0KIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15CiBDT05GSUdfQVg4ODc5Nj1tCitDT05GSUdfQVg4ODc5Nl85M0NYNj15CiBDT05GSUdfU0dJX0lPQzNfRVRIPXkKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD1tCiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorQ09ORklHX0VUSE9DPW0KK0NPTkZJR19TTVNDOTExWD1tCitDT05GSUdfRE5FVD1tCiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19CNDQ9bQorQ09ORklHX0I0NF9QQ0lfQVVUT1NFTEVDVD15CitDT05GSUdfQjQ0X1BDSUNPUkVfQVVUT1NFTEVDVD15CitDT05GSUdfQjQ0X1BDST15CitDT05GSUdfS1M4ODQyPW0KK0NPTkZJR19LUzg4NTFfTUxMPW0KK0NPTkZJR19BVEwyPW0KIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDBFPW0KK0NPTkZJR19JUDEwMDA9bQorQ09ORklHX0lHQj1tCitDT05GSUdfSUdCVkY9bQogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01ODgsMjQgKzc5Myw3NSBAQAogIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiBDT05GSUdfVklBX1ZFTE9DSVRZPW0KICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19CTlgyPW0KK0NPTkZJR19DTklDPW0KIENPTkZJR19RTEEzWFhYPW0KICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorQ09ORklHX0FUTDFFPW0KK0NPTkZJR19BVEwxQz1tCitDT05GSUdfSk1FPW0KIENPTkZJR19ORVRERVZfMTAwMDA9eQorQ09ORklHX01ESU89bQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKIENPTkZJR19DSEVMU0lPX1QzPW0KK0NPTkZJR19FTklDPW0KK0NPTkZJR19JWEdCRT1tCiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorQ09ORklHX1ZYR0U9bQorIyBDT05GSUdfVlhHRV9ERUJVR19UUkFDRV9BTEwgaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogQ09ORklHX05FVFhFTl9OSUM9bQotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19OSVU9bQorQ09ORklHX01MWDRfRU49bQorQ09ORklHX01MWDRfQ09SRT1tCisjIENPTkZJR19NTFg0X0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19URUhVVEk9bQorQ09ORklHX0JOWDJYPW0KK0NPTkZJR19RTEdFPW0KK0NPTkZJR19TRkM9bQorQ09ORklHX0JFMk5FVD1tCiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOXzgwMjExPXkKK0NPTkZJR19XTEFOPXkKK0NPTkZJR19MSUJFUlRBU19USElORklSTT1tCitDT05GSUdfQVRNRUw9bQorQ09ORklHX1BDSV9BVE1FTD1tCitDT05GSUdfUFJJU001ND1tCitDT05GSUdfUlRMODE4MD1tCitDT05GSUdfQURNODIxMT1tCisjIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0CitDT05GSUdfTVdMOEs9bQorQ09ORklHX0FUSF9DT01NT049bQorIyBDT05GSUdfQVRIX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BVEg1Sz1tCisjIENPTkZJR19BVEg1S19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQVRIOUtfSFc9bQorQ09ORklHX0FUSDlLX0NPTU1PTj1tCitDT05GSUdfQVRIOUs9bQorQ09ORklHX0I0Mz1tCitDT05GSUdfQjQzX1BDSV9BVVRPU0VMRUNUPXkKK0NPTkZJR19CNDNfUENJQ09SRV9BVVRPU0VMRUNUPXkKK0NPTkZJR19CNDNfUEhZX0xQPXkKK0NPTkZJR19CNDNfTEVEUz15CitDT05GSUdfQjQzX0hXUk5HPXkKKyMgQ09ORklHX0I0M19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQjQzTEVHQUNZPW0KK0NPTkZJR19CNDNMRUdBQ1lfUENJX0FVVE9TRUxFQ1Q9eQorQ09ORklHX0I0M0xFR0FDWV9QQ0lDT1JFX0FVVE9TRUxFQ1Q9eQorQ09ORklHX0I0M0xFR0FDWV9MRURTPXkKK0NPTkZJR19CNDNMRUdBQ1lfSFdSTkc9eQorIyBDT05GSUdfQjQzTEVHQUNZX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19CNDNMRUdBQ1lfRE1BPXkKK0NPTkZJR19CNDNMRUdBQ1lfUElPPXkKK0NPTkZJR19CNDNMRUdBQ1lfRE1BX0FORF9QSU9fTU9ERT15CisjIENPTkZJR19CNDNMRUdBQ1lfRE1BX01PREUgaXMgbm90IHNldAorIyBDT05GSUdfQjQzTEVHQUNZX1BJT19NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19IT1NUQVA9bQorQ09ORklHX0hPU1RBUF9GSVJNV0FSRT15CitDT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFNPXkKK0NPTkZJR19IT1NUQVBfUExYPW0KK0NPTkZJR19IT1NUQVBfUENJPW0KIENPTkZJR19JUFcyMTAwPW0KIENPTkZJR19JUFcyMTAwX01PTklUT1I9eQogQ09ORklHX0lQVzIxMDBfREVCVUc9eQpAQCAtNjE1LDM4ICs4NzEsNTcgQEAKIENPTkZJR19JUFcyMjAwX1BST01JU0NVT1VTPXkKIENPTkZJR19JUFcyMjAwX1FPUz15CiBDT05GSUdfSVBXMjIwMF9ERUJVRz15CitDT05GSUdfTElCSVBXPW0KKyMgQ09ORklHX0xJQklQV19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVdMV0lGST1tCitDT05GSUdfSVdMV0lGSV9TUEVDVFJVTV9NRUFTVVJFTUVOVD15CisjIENPTkZJR19JV0xXSUZJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JV0xBR049bQorQ09ORklHX0lXTDQ5NjU9eQorQ09ORklHX0lXTDUwMDA9eQorQ09ORklHX0lXTDM5NDU9bQorQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQ9eQogQ09ORklHX0xJQkVSVEFTPW0KICMgQ09ORklHX0xJQkVSVEFTX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19IRVJNRVM9bQorIyBDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQgaXMgbm90IHNldAogQ09ORklHX1BMWF9IRVJNRVM9bQogQ09ORklHX1RNRF9IRVJNRVM9bQogQ09ORklHX05PUlRFTF9IRVJNRVM9bQogQ09ORklHX1BDSV9IRVJNRVM9bQotQ09ORklHX0FUTUVMPW0KLUNPTkZJR19QQ0lfQVRNRUw9bQotQ09ORklHX1BSSVNNNTQ9bQotQ09ORklHX0hPU1RBUD1tCi1DT05GSUdfSE9TVEFQX0ZJUk1XQVJFPXkKLUNPTkZJR19IT1NUQVBfRklSTVdBUkVfTlZSQU09eQotQ09ORklHX0hPU1RBUF9QTFg9bQotQ09ORklHX0hPU1RBUF9QQ0k9bQotQ09ORklHX0JDTTQzWFg9bQotQ09ORklHX0JDTTQzWFhfREVCVUc9eQotQ09ORklHX0JDTTQzWFhfRE1BPXkKLUNPTkZJR19CQ000M1hYX1BJTz15Ci1DT05GSUdfQkNNNDNYWF9ETUFfQU5EX1BJT19NT0RFPXkKLSMgQ09ORklHX0JDTTQzWFhfRE1BX01PREUgaXMgbm90IHNldAotIyBDT05GSUdfQkNNNDNYWF9QSU9fTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfUDU0X0NPTU1PTj1tCitDT05GSUdfUDU0X1BDST1tCitDT05GSUdfUDU0X0xFRFM9eQorQ09ORklHX1JUMlgwMD1tCitDT05GSUdfUlQyNDAwUENJPW0KK0NPTkZJR19SVDI1MDBQQ0k9bQorQ09ORklHX1JUNjFQQ0k9bQorQ09ORklHX1JUMjgwMFBDSV9QQ0k9bQorQ09ORklHX1JUMjgwMFBDST1tCitDT05GSUdfUlQyODAwX0xJQj1tCitDT05GSUdfUlQyWDAwX0xJQl9QQ0k9bQorQ09ORklHX1JUMlgwMF9MSUI9bQorQ09ORklHX1JUMlgwMF9MSUJfSFQ9eQorQ09ORklHX1JUMlgwMF9MSUJfRklSTVdBUkU9eQorQ09ORklHX1JUMlgwMF9MSUJfQ1JZUFRPPXkKK0NPTkZJR19SVDJYMDBfTElCX0xFRFM9eQorIyBDT05GSUdfUlQyWDAwX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XTDEyWFg9bQorQ09ORklHX1dMMTI1MT1tCisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC02NjQsMTMgKzkzOSwxNiBAQAogIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19MSUJQUzI9bQogQ09ORklHX1NFUklPX1JBVz1tCitDT05GSUdfU0VSSU9fQUxURVJBX1BTMj1tCiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfTk9aT01JPW0KIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNjkzLDk1ICs5NzEsMjU4IEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT1tCi0jIENPTkZJR19SVEMgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNPW0KICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0RFVlBPUlQ9eQotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9bQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQorQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPW0KK0NPTkZJR19JMkNfQUxHT1BDQT1tCiAKICMKLSMgU1BJIHN1cHBvcnQKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKK0NPTkZJR19JMkNfQUxJMTUzNT1tCitDT05GSUdfSTJDX0FMSTE1NjM9bQorQ09ORklHX0kyQ19BTEkxNVgzPW0KK0NPTkZJR19JMkNfQU1ENzU2PW0KK0NPTkZJR19JMkNfQU1EODExMT1tCitDT05GSUdfSTJDX0k4MDE9bQorQ09ORklHX0kyQ19JU0NIPW0KK0NPTkZJR19JMkNfUElJWDQ9bQorQ09ORklHX0kyQ19ORk9SQ0UyPW0KK0NPTkZJR19JMkNfU0lTNTU5NT1tCitDT05GSUdfSTJDX1NJUzYzMD1tCitDT05GSUdfSTJDX1NJUzk2WD1tCitDT05GSUdfSTJDX1ZJQT1tCitDT05GSUdfSTJDX1ZJQVBSTz1tCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX09DT1JFUz1tCitDT05GSUdfSTJDX1NJTVRFQz1tCisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUPW0KK0NPTkZJR19JMkNfVEFPU19FVk09bQorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworQ09ORklHX0kyQ19QQ0FfUExBVEZPUk09bQorQ09ORklHX0kyQ19TVFVCPW0KKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19TRU5TT1JTX1RTTDI1NTA9bQorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKK0NPTkZJR19QUFM9bQorIyBDT05GSUdfUFBTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfVEhFUk1BTD1tCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0I9bQorQ09ORklHX1NTQl9TUFJPTT15CitDT05GSUdfU1NCX1BDSUhPU1RfUE9TU0lCTEU9eQorQ09ORklHX1NTQl9QQ0lIT1NUPXkKK0NPTkZJR19TU0JfQjQzX1BDSV9CUklER0U9eQorIyBDT05GSUdfU1NCX1NJTEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0JfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRV9QT1NTSUJMRT15CitDT05GSUdfU1NCX0RSSVZFUl9QQ0lDT1JFPXkKKyMgQ09ORklHX1NTQl9EUklWRVJfTUlQUyBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfV004MzUwPW0KK0NPTkZJR19NRkRfV004MzUwX0kyQz1tCitDT05GSUdfTUZEX1BDRjUwNjMzPW0KK0NPTkZJR19QQ0Y1MDYzM19BREM9bQorQ09ORklHX1BDRjUwNjMzX0dQSU89bQorQ09ORklHX0FCMzEwMF9DT1JFPW0KK0NPTkZJR19BQjMxMDBfT1RQPW0KKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKICMKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz1tCisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKK0NPTkZJR19MRURTX0xQMzk0ND1tCitDT05GSUdfTEVEU19QQ0E5NTVYPW0KK0NPTkZJR19MRURTX1dNODM1MD1tCitDT05GSUdfTEVEU19CRDI4MDI9bQorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj1tCitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD1tCitDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVD1tCitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049bQorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0CisjIFJUQyBpbnRlcmZhY2VzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIERNQSBDbGllbnRzCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKICMKIAogIwotIyBETUEgRGV2aWNlcworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfTTQ4VDM1PXkKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfV004MzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGNTA2MzMgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfQUIzMTAwPW0KIAogIwotIyBVc2Vyc3BhY2UgSS9PCisjIG9uLUNQVSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKIENPTkZJR19VSU89eQogIyBDT05GSUdfVUlPX0NJRiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUERSViBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUERSVl9HRU5JUlEgaXMgbm90IHNldAorQ09ORklHX1VJT19TTVg9bQorQ09ORklHX1VJT19BRUM9bQorQ09ORklHX1VJT19TRVJDT1MzPW0KK0NPTkZJR19VSU9fUENJX0dFTkVSSUM9bQorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTc5MiwzNiArMTIzMyw1OCBAQAogQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X0ZTPXkKK0NPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUNF9GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQ0X0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQotQ09ORklHX0pCRF9ERUJVRz15CitDT05GSUdfSkJEMj15CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfWEZTX0ZTPW0KIENPTkZJR19YRlNfUVVPVEE9eQotQ09ORklHX1hGU19TRUNVUklUWT15CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0JUUkZTX0ZTPW0KK0NPTkZJR19CVFJGU19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFPXkKIENPTkZJR19RVU9UQUNUTD15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogQ09ORklHX0ZVU0VfRlM9bQorQ09ORklHX0NVU0U9bQogQ09ORklHX0dFTkVSSUNfQUNMPXkKIAogIworIyBDYWNoZXMKKyMKK0NPTkZJR19GU0NBQ0hFPW0KK0NPTkZJR19GU0NBQ0hFX1NUQVRTPXkKKyMgQ09ORklHX0ZTQ0FDSEVfSElTVE9HUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTQ0FDSEVfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRlNDQUNIRV9PQkpFQ1RfTElTVCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVGSUxFUz1tCisjIENPTkZJR19DQUNIRUZJTEVTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFRklMRVNfSElTVE9HUkFNIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTg0MCwxNiArMTMwMywxMyBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CiBDT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldApAQCAtODU5LDI4ICsxMzE5LDMyIEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlM9bQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MwogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CitDT05GSUdfT01GU19GUz1tCiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19FWE9GU19GUz1tCisjIENPTkZJR19FWE9GU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAogIyBDT05GSUdfUk9PVF9ORlMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC05MTAsMzUgKzEzNzQsMzcgQEAKICMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiAjIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwogQ09ORklHX0RMTT1tCiAjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAogCiAjCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MjA0OAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0NST1NTQ09NUElMRT15CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCkBAIC05NDcsNjUgKzE0MTMsMTQwIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotQ09ORklHX1hPUl9CTE9DS1M9bQotQ09ORklHX0FTWU5DX0NPUkU9bQotQ09ORklHX0FTWU5DX01FTUNQWT1tCi1DT05GSUdfQVNZTkNfWE9SPW0KK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorQ09ORklHX1hPUl9CTE9DS1M9eQorQ09ORklHX0FTWU5DX0NPUkU9eQorQ09ORklHX0FTWU5DX01FTUNQWT15CitDT05GSUdfQVNZTkNfWE9SPXkKK0NPTkZJR19BU1lOQ19QUT15CitDT05GSUdfQVNZTkNfUkFJRDZfUkVDT1Y9eQogQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0ZJUFM9eQogQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19BRUFEMj15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkc9bQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQorQ09ORklHX0NSWVBUT19DUllQVEQ9bQorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKK0NPTkZJR19DUllQVE9fQ0NNPW0KK0NPTkZJR19DUllQVE9fR0NNPW0KK0NPTkZJR19DUllQVE9fU0VRSVY9bQorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX0NUUj1tCitDT05GSUdfQ1JZUFRPX0NUUz1tCitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19YVFM9bQorCisjCisjIEhhc2ggbW9kZXMKKyMKIENPTkZJR19DUllQVE9fSE1BQz15CiBDT05GSUdfQ1JZUFRPX1hDQkM9bQotQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fVk1BQz1tCisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0dIQVNIPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19STUQxMjg9bQorQ09ORklHX0NSWVBUT19STUQxNjA9bQorQ09ORklHX0NSWVBUT19STUQyNTY9bQorQ09ORklHX0NSWVBUT19STUQzMjA9bQogQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCi1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19MUlc9bQotQ09ORklHX0NSWVBUT19DUllQVEQ9bQotQ09ORklHX0NSWVBUT19ERVM9eQotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCisKKyMKKyMgQ2lwaGVycworIwogQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KIENPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCitDT05GSUdfQ1JZUFRPX1NFRUQ9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KKworIworIyBDb21wcmVzc2lvbgorIwogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1pMSUI9bQorQ09ORklHX0NSWVBUT19MWk89bQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HPW0KIENPTkZJR19DUllQVE9fSFc9eQorQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYPW0KKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYX1JORyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMxNj15CitDT05GSUdfQ1JDX1QxMERJRj1tCitDT05GSUdfQ1JDX0lUVV9UPW0KIENPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19DUkM3PW0KIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT1tCiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19QTElTVD15CitDT05GSUdfTFpPX0NPTVBSRVNTPW0KK0NPTkZJR19MWk9fREVDT01QUkVTUz1tCiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnCmluZGV4IGI3MWEwYTQuLjRjYWEwZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM2Ci0jIE1vbiBOb3YgIDkgMjM6NDI6NDIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDEzOjQxOjA5IDIwMTAKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMjcsNiArMjcsNyBAQAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CkBAIC01MSw2ICs1Miw5IEBACiAjIENPTkZJR19MRU1PVEVfRlVMT09ORzJFIGlzIG5vdCBzZXQKIENPTkZJR19MRU1PVEVfTUFDSDJGPXkKIENPTkZJR19DUzU1MzY9eQorQ09ORklHX0NTNTUzNl9NRkdQVD15CitDT05GSUdfTE9PTkdTT05fU1VTUEVORD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldApAQCAtNjMsMTMgKzY3LDggQEAKIENPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKIENPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfQ0VWVF9SNEtfTElCPXkKLUNPTkZJR19DRVZUX1I0Sz15Ci1DT05GSUdfQ1NSQ19SNEtfTElCPXkKLUNPTkZJR19DU1JDX1I0Sz15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19JODI1OT15CiAjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldApAQCAtMTA5LDEzICsxMDgsMTUgQEAKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MD15CiBDT05GSUdfQ1BVX0xPT05HU09OMj15CiBDT05GSUdfU1lTX0hBU19DUFVfTE9PTkdTT04yRj15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTX0NQVUZSRVE9eQorQ09ORklHX0NQVV9TVVBQT1JUU19BRERSV0lOQ0ZHPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfVU5DQUNIRURfQUNDRUxFUkFURUQ9eQogCiAjCiAjIEtlcm5lbCB0eXBlCkBAIC0xMzcsNyArMTM4LDYgQEAKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX1NZU19TVVBQT1JUU19ISUdITUVNPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiAjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CkBAIC0xNDYsMTcgKzE0NiwxMSBAQAogQ09ORklHX1NQQVJTRU1FTT15CiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci0KLSMKLSMgTWVtb3J5IGhvdHBsdWcgaXMgY3VycmVudGx5IGluY29tcGF0aWJsZSB3aXRoIFNvZnR3YXJlIFN1c3BlbmQKLSMKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfVElDS19PTkVTSE9UPXkKQEAgLTE3NSw3ICsxNjksNyBAQAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKK0NPTkZJR19LRVhFQz15CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0xOTQsOSArMTg4LDkgQEAKIENPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKIENPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CiBDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15Ci0jIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0daSVA9eQogIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKLUNPTkZJR19LRVJORUxfTFpNQT15CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtMjExLDYgKzIwNSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9NjQKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMjI0LDcgKzIxOSwxMSBAQAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKK0NPTkZJR19SRF9CWklQMj15CitDT05GSUdfUkRfTFpNQT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CkBAIC0yNTYsMTQgKzI1NSwxOCBAQAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CitDT05GSUdfT1BST0ZJTEU9bQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CisjIENPTkZJR19TTE9XX1dPUktfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTI4MywxNCArMjg2LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9bQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiBDT05GSUdfRlJFRVpFUj15CiAKICMKQEAgLTMxNCw3ICszNDQsNyBAQAogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfTUlQUzMyX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19TWVNWSVBDX0NPTVBBVD15CkBAIC0zMzUsOSArMzY1LDM0IEBACiBDT05GSUdfSElCRVJOQVRJT05fTlZTPXkKIENPTkZJR19ISUJFUk5BVElPTj15CiBDT05GSUdfUE1fU1REX1BBUlRJVElPTj0iL2Rldi9oZGEzIgotIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CitDT05GSUdfTUlQU19FWFRFUk5BTF9USU1FUj15CitDT05GSUdfTUlQU19DUFVGUkVRPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorQ09ORklHX0NQVV9GUkVRX0RFQlVHPXkKK0NPTkZJR19DUFVfRlJFUV9TVEFUPW0KK0NPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFM9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9bQorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9bQorQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15CitDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRT1tCisKKyMKKyMgQ1BVRnJlcSBwcm9jZXNzb3IgZHJpdmVycworIworQ09ORklHX0xPT05HU09OMl9DUFVGUkVRPW0KIENPTkZJR19ORVQ9eQotQ09ORklHX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKQEAgLTM0NiwxMSArNDAxLDEyIEBACiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX1VTRVI9bQogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT1tCisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKQEAgLTM2MSwxMiArNDE3LDEzIEBACiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKIENPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKICMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorIyBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTVJPVVRFPXkKIENPTkZJR19JUF9QSU1TTV9WMT15CiBDT05GSUdfSVBfUElNU01fVjI9eQotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfQVJQRD15CiBDT05GSUdfU1lOX0NPT0tJRVM9eQogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CkBAIC0zOTksMzAgKzQ1NiwzNCBAQAogIyBDT05GSUdfREVGQVVMVF9XRVNUV09PRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX1JFTk8gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX1RDUF9NRDVTSUc9eQogQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKKyMgQ09ORklHX0lQVjZfUk9VVEVfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfVFVOTkVMPW0KIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogQ09ORklHX0lQVjZfU0lUPW0KKyMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUFY2X1NVQlRSRUVTPXkKICMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX1NFQ01BUks9eQogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CitDT05GSUdfQlJJREdFX05FVEZJTFRFUj15CiAKICMKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgpAQCAtNDQ2LDE3ICs1MDcsMjIgQEAKICMKICMgQ09ORklHX0lQNl9ORl9RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDZfTkZfSVBUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKK0NPTkZJR19TVFA9bQorQ09ORklHX0JSSURHRT1tCiAjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorQ09ORklHX1ZMQU5fODAyMVE9bQorIyBDT05GSUdfVkxBTl84MDIxUV9HVlJQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KICMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKK0NPTkZJR19JUFg9bQorIyBDT05GSUdfSVBYX0lOVEVSTiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CkBAIC01MTgsMjYgKzU4NCw2MSBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfQlQ9bQorQ09ORklHX0JUX0wyQ0FQPW0KK0NPTkZJR19CVF9TQ089bQorQ09ORklHX0JUX1JGQ09NTT1tCitDT05GSUdfQlRfUkZDT01NX1RUWT15CitDT05GSUdfQlRfQk5FUD1tCitDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQorQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKK0NPTkZJR19CVF9ISURQPW0KKworIworIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19CVF9IQ0lCVFVTQj1tCisjIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0CitDT05GSUdfQlRfSENJQkZVU0I9bQorQ09ORklHX0JUX0hDSVZIQ0k9bQorIyBDT05GSUdfQlRfTVJWTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCitDT05GSUdfV0VYVF9DT1JFPXkKK0NPTkZJR19XRVhUX1BST0M9eQorQ09ORklHX0NGRzgwMjExPW0KKyMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15CisjIENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX0NGRzgwMjExX1dFWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKK0NPTkZJR19MSUI4MDIxMT1tCitDT05GSUdfTElCODAyMTFfREVCVUc9eQorQ09ORklHX01BQzgwMjExPW0KKyMgQ09ORklHX01BQzgwMjExX1JDX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUw9eQorIyBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQgaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUw9eQorQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9Im1pbnN0cmVsIgorIyBDT05GSUdfTUFDODAyMTFfTUVTSCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfTEVEUz15CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogQ09ORklHX1JGS0lMTD1tCi0jIENPTkZJR19SRktJTExfSU5QVVQgaXMgbm90IHNldAorQ09ORklHX1JGS0lMTF9MRURTPXkKK0NPTkZJR19SRktJTExfSU5QVVQ9eQogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwpAQCAtNTU1LDcgKzY1Niw3IEBACiBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKIENPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9bQogIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKQEAgLTU2Niw3ICs2NjcsMTIgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKQEAgLTU3NywxOSArNjgzLDcgQEAKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15CiAKQEAgLTYxOSw4ICs3MTMsNyBAQAogIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKICMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CiAjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldApAQCAtNzAwLDcgKzc5MywyOSBAQAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorQ09ORklHX01EX1JBSUQxMD1tCitDT05GSUdfTURfUkFJRDQ1Nj1tCitDT05GSUdfTURfUkFJRDZfUFE9bQorIyBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfTURfTVVMVElQQVRIPW0KK0NPTkZJR19NRF9GQVVMVFk9bQorQ09ORklHX0JMS19ERVZfRE09bQorQ09ORklHX0RNX0RFQlVHPXkKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fTE9HX1VTRVJTUEFDRT1tCitDT05GSUdfRE1fWkVSTz1tCitDT05GSUdfRE1fTVVMVElQQVRIPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfUUw9bQorQ09ORklHX0RNX01VTFRJUEFUSF9TVD1tCitDT05GSUdfRE1fREVMQVk9bQorQ09ORklHX0RNX1VFVkVOVD15CiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAogCiAjCkBAIC03MTIsMTkgKzgyNywxOSBAQAogIwogCiAjCi0jIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0lGQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVk9bQogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfVFVOPW0KK0NPTkZJR19WRVRIPW0KICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC03MzgsNiArODUzLDcgQEAKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CkBAIC03NjksNyArODg1LDcgQEAKICMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CiBDT05GSUdfODEzOVRPTz15CiAjIENPTkZJR184MTM5VE9PX1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVI9eQorIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKQEAgLTc5NSw2ICs5MTEsNyBAQAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAogQ09ORklHX1I4MTY5PXkKK0NPTkZJR19SODE2OV9WTEFOPXkKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLWTIgaXMgbm90IHNldApAQCAtODEwLDE1ICs5MjcsMzEgQEAKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci1DT05GSUdfV0xBTl9QUkU4MDIxMT15Ci0jIENPTkZJR19TVFJJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVZFTEFOIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOXzgwMjExPXkKLSMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUNzZDNTBYX1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgxODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRMODE4NyBpcyBub3Qgc2V0CisjIENPTkZJR19BRE04MjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01XTDhLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRkkgaXMgbm90IHNldAorIyBDT05GSUdfSVdNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTDEyWFggaXMgbm90IHNldAorIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTgzMSwxNyArOTY0LDM5IEBACiAjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9VU0JORVQ9bQorQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCitDT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCitDT05GSUdfVVNCX05FVF9DRENfRUVNPW0KKyMgQ09ORklHX1VTQl9ORVRfRE05NjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfU01TQzk1WFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfTkVUMTA4MD1tCisjIENPTkZJR19VU0JfTkVUX1BMVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfTUNTNzgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVD1tCisjIENPTkZJR19VU0JfQUxJX001NjMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTjI3MjAgaXMgbm90IHNldAorQ09ORklHX1VTQl9CRUxLSU49eQorQ09ORklHX1VTQl9BUk1MSU5VWD15CisjIENPTkZJR19VU0JfRVBTT04yODg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQzIxOTAgaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfWkFVUlVTPW0KICMgQ09ORklHX1VTQl9IU08gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9JTlQ1MVgxIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUQ09OU09MRT1tCitDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXkKK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC04NDksOCArMTAwNCw5IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KK0NPTkZJR19JTlBVVF9QT0xMREVWPW0KKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTg4NCw3ICsxMDQwLDcgQEAKICMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorQ09ORklHX01PVVNFX0FQUExFVE9VQ0g9bQogIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9JTlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfTE9HSUJNIGlzIG5vdCBzZXQKQEAgLTkwNCw2ICsxMDYwLDcgQEAKICMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fTElCUFMyPXkKICMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTM0LDggKzEwOTEsNyBAQAogIwogIyBTZXJpYWwgZHJpdmVycwogIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MD1tCiAjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTE2CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CkBAIC05NTMsOCArMTEwOSw3IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9bQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CkBAIC0xMDMzLDE0ICsxMTg4LDE4IEBACiAjCiAjIE11bHRpbWVkaWEgZHJpdmVycwogIworQ09ORklHX0lSX0NPUkU9bQorQ09ORklHX1ZJREVPX0lSPW0KICMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fVjRMMj1tCiBDT05GSUdfVklERU9fVjRMMT1tCitDT05GSUdfVklERU9CVUZfR0VOPW0KK0NPTkZJR19WSURFT0JVRl9WTUFMTE9DPW0KIENPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQogIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQotIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVklWST1tCiAjIENPTkZJR19WSURFT19QTVMgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fQ1BJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19DUElBMiBpcyBub3Qgc2V0CkBAIC0xMDQ5LDUyICsxMjA4LDU1IEBACiBDT05GSUdfVVNCX1ZJREVPX0NMQVNTPW0KIENPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQogQ09ORklHX1VTQl9HU1BDQT1tCi0jIENPTkZJR19VU0JfTTU2MDIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUVjA2WFggaXMgbm90IHNldAorQ09ORklHX1VTQl9NNTYwMj1tCitDT05GSUdfVVNCX1NUVjA2WFg9bQogIyBDT05GSUdfVVNCX0dMODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9DT05FWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfRVRPTVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVggaXMgbm90IHNldAorQ09ORklHX1VTQl9HU1BDQV9DT05FWD1tCitDT05GSUdfVVNCX0dTUENBX0VUT01TPW0KK0NPTkZJR19VU0JfR1NQQ0FfRklORVBJWD1tCiAjIENPTkZJR19VU0JfR1NQQ0FfSkVJTElOSiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfTUFSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfTVI5NzMxMEEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX09WNTE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9PVjUzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfUEFDMjA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TTjlDMjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TT05JWEIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NPTklYSiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTU2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1E5MDUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NROTA1QyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9UNjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9UVjg1MzIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1ZDMDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfWkMzWFggaXMgbm90IHNldAorQ09ORklHX1VTQl9HU1BDQV9NQVJTPW0KK0NPTkZJR19VU0JfR1NQQ0FfTVI5NzMxMEE9bQorQ09ORklHX1VTQl9HU1BDQV9PVjUxOT1tCitDT05GSUdfVVNCX0dTUENBX09WNTM0PW0KK0NPTkZJR19VU0JfR1NQQ0FfUEFDMjA3PW0KKyMgQ09ORklHX1VTQl9HU1BDQV9QQUM3MzAyIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMT1tCitDT05GSUdfVVNCX0dTUENBX1NOOUMyMFg9bQorQ09ORklHX1VTQl9HU1BDQV9TTjlDMjBYX0VWREVWPXkKK0NPTkZJR19VU0JfR1NQQ0FfU09OSVhCPW0KK0NPTkZJR19VU0JfR1NQQ0FfU09OSVhKPW0KK0NPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMD1tCitDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDE9bQorQ09ORklHX1VTQl9HU1BDQV9TUENBNTA1PW0KK0NPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNj1tCitDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDg9bQorQ09ORklHX1VTQl9HU1BDQV9TUENBNTYxPW0KK0NPTkZJR19VU0JfR1NQQ0FfU1E5MDU9bQorQ09ORklHX1VTQl9HU1BDQV9TUTkwNUM9bQorQ09ORklHX1VTQl9HU1BDQV9TVEswMTQ9bQorIyBDT05GSUdfVVNCX0dTUENBX1NUVjA2ODAgaXMgbm90IHNldAorQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTPW0KK0NPTkZJR19VU0JfR1NQQ0FfVDYxMz1tCitDT05GSUdfVVNCX0dTUENBX1RWODUzMj1tCitDT05GSUdfVVNCX0dTUENBX1ZDMDMyWD1tCitDT05GSUdfVVNCX0dTUENBX1pDM1hYPW0KICMgQ09ORklHX1ZJREVPX0hEUFZSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WSUNBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSUJNQ0FNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LT05JQ0FXQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUVVJQ0tDQU1fTUVTU0VOR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVDYxWDI1MSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUNjFYMjUxPW0KICMgQ09ORklHX1VTQl9PVjUxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0U0MDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NOOUMxMDIgaXMgbm90IHNldAorQ09ORklHX1VTQl9TTjlDMTAyPW0KICMgQ09ORklHX1VTQl9TVFY2ODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pDMDMwMSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1pDMDMwMT1tCiAjIENPTkZJR19VU0JfUFdDIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX1VTQl9aUjM2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVEtXRUJDQU0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1MyMjU1IGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfWlIzNjRYWD1tCitDT05GSUdfVVNCX1NUS1dFQkNBTT1tCitDT05GSUdfVVNCX1MyMjU1PW0KICMgQ09ORklHX1JBRElPX0FEQVBURVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKQEAgLTExMzIsNiArMTI5NCw3IEBACiAjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVVZFU0EgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldApAQCAtMTE2MSw3ICsxMzI0LDcgQEAKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPW0KIAogIwogIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CkBAIC0xMTkzLDI4ICsxMzU2LDQ0IEBACiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPW0KLSMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD1tCiBDT05GSUdfU05EX1RJTUVSPW0KIENPTkZJR19TTkRfUENNPW0KLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CitDT05GSUdfU05EX0hXREVQPW0KK0NPTkZJR19TTkRfUkFXTUlEST1tCitDT05GSUdfU05EX1NFUVVFTkNFUj1tCitDT05GSUdfU05EX1NFUV9EVU1NWT1tCitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTPW0KK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CitDT05GSUdfU05EX0hSVElNRVI9bQorQ09ORklHX1NORF9TRVFfSFJUSU1FUl9ERUZBVUxUPXkKICMgQ09ORklHX1NORF9SVENUSU1FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfVk1BU1RFUj15Ci0jIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9SQVdNSURJX1NFUT1tCiAjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9NUFU0MDFfVUFSVD1tCiBDT05GSUdfU05EX0FDOTdfQ09ERUM9bQotIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKK0NPTkZJR19TTkRfRFVNTVk9bQorQ09ORklHX1NORF9WSVJNSURJPW0KKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NFUklBTF9VMTY1NTA9bQorQ09ORklHX1NORF9NUFU0MDE9bQorQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkU9eQorQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkVfREVGQVVMVD0xMAogQ09ORklHX1NORF9QQ0k9eQogIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKQEAgLTEyODEsNyArMTQ2MCwxMCBAQAogIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfU05EX1VTQj15CitDT05GSUdfU05EX1VTQl9BVURJTz1tCitDT05GSUdfU05EX1VTQl9DQUlBUT1tCitDT05GSUdfU05EX1VTQl9DQUlBUV9JTlBVVD15CiAjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19BQzk3X0JVUz1tCkBAIC0xMjk5LDMyICsxNDgxLDQxIEBACiAjCiAjIFNwZWNpYWwgSElEIGRyaXZlcnMKICMKLSMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfSElEX0E0VEVDSD1tCitDT05GSUdfSElEX0FQUExFPW0KK0NPTkZJR19ISURfQkVMS0lOPW0KK0NPTkZJR19ISURfQ0hFUlJZPW0KK0NPTkZJR19ISURfQ0hJQ09OWT1tCitDT05GSUdfSElEX0NZUFJFU1M9bQorQ09ORklHX0hJRF9EUkFHT05SSVNFPW0KK0NPTkZJR19EUkFHT05SSVNFX0ZGPXkKK0NPTkZJR19ISURfRVpLRVk9bQorQ09ORklHX0hJRF9LWUU9bQorQ09ORklHX0hJRF9HWVJBVElPTj1tCitDT05GSUdfSElEX1RXSU5IQU49bQorQ09ORklHX0hJRF9LRU5TSU5HVE9OPW0KK0NPTkZJR19ISURfTE9HSVRFQ0g9bQorQ09ORklHX0xPR0lURUNIX0ZGPXkKK0NPTkZJR19MT0dJUlVNQkxFUEFEMl9GRj15CitDT05GSUdfSElEX01JQ1JPU09GVD1tCitDT05GSUdfSElEX01PTlRFUkVZPW0KK0NPTkZJR19ISURfTlRSSUc9bQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD1tCitDT05GSUdfUEFOVEhFUkxPUkRfRkY9eQorQ09ORklHX0hJRF9QRVRBTFlOWD1tCitDT05GSUdfSElEX1NBTVNVTkc9bQorQ09ORklHX0hJRF9TT05ZPW0KK0NPTkZJR19ISURfU1VOUExVUz1tCitDT05GSUdfSElEX0dSRUVOQVNJQT1tCitDT05GSUdfR1JFRU5BU0lBX0ZGPXkKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPW0KK0NPTkZJR19TTUFSVEpPWVBMVVNfRkY9eQorQ09ORklHX0hJRF9UT1BTRUVEPW0KK0NPTkZJR19ISURfVEhSVVNUTUFTVEVSPW0KK0NPTkZJR19USFJVU1RNQVNURVJfRkY9eQorQ09ORklHX0hJRF9XQUNPTT1tCitDT05GSUdfSElEX1pFUk9QTFVTPW0KK0NPTkZJR19aRVJPUExVU19GRj15CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTEzNDQsNyArMTUzNSw3IEBACiBDT05GSUdfVVNCX09UR19XSElURUxJU1Q9eQogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfV1VTQj1tCiAjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM2NiwxNCArMTU1NywxNSBAQAogQ09ORklHX1VTQl9VSENJX0hDRD1tCiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfV0hDSV9IQ0Q9bQorQ09ORklHX1VTQl9IV0FfSENEPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKICMKIENPTkZJR19VU0JfQUNNPW0KLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUFJJTlRFUj1tCiBDT05GSUdfVVNCX1dETT1tCiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIApAQCAtMTM5Nyw3ICsxNTg5LDcgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTElCVVNVQUw9eQogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTE0NjcsNyArMTY1OSw3IEBACiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTEVEPW0KICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CkBAIC0xNDgwLDE2ICsxNjcyLDk1IEBACiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyPXkKK0NPTkZJR19VU0JfTTY2NTkyPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19NVUxUSSBpcyBub3Qgc2V0CiAKICMKICMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCiAjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAorQ09ORklHX1VXQj1tCitDT05GSUdfVVdCX0hXQT1tCitDT05GSUdfVVdCX1dIQ0k9bQorIyBDT05GSUdfVVdCX1dMUCBpcyBub3Qgc2V0CisjIENPTkZJR19VV0JfSTE0ODBVIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9bQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9bQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQ0I3MTAgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1ZJQV9TRE1NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9bQorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CisjIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CisKKyMKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQorIwogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CkBAIC0xNTA0LDIyICsxNzc1LDE4IEBACiAjIENPTkZJR19TVEFHSU5HX0VYQ0xVREVfQlVJTEQgaXMgbm90IHNldAogIyBDT05GSUdfRVQxMzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JUF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfUFJJU00yX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMzVVTkQgaXMgbm90IHNldAogIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0CisjIENPTkZJR19PVFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTUVESSBpcyBub3Qgc2V0CiAjIENPTkZJR19BU1VTX09MRUQgaXMgbm90IHNldAogIyBDT05GSUdfQUxURVJBX1BDSUVfQ0hETUEgaXMgbm90IHNldAotIyBDT05GSUdfUlRMODE4N1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUTDgxOTJTVSBpcyBub3Qgc2V0CisjIENPTkZJR19SODE4N1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUTDgxOTJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSQU5aUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgQW5kcm9pZAotIwotCi0jCiAjIFF1YWxjb21tIE1TTSBDYW1lcmEgQW5kIFZpZGVvCiAjCiAKQEAgLTE1MjcsNyArMTc5NCw2IEBACiAjIENhbWVyYSBTZW5zb3IgU2VsZWN0aW9uCiAjCiAjIENPTkZJR19JTlBVVF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QT0hNRUxGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CM0RGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTEFOOUFVVEggaXMgbm90IHNldApAQCAtMTU0NCwyOCArMTgxMCw1NSBAQAogIwogIyBDT05GSUdfUkFSX1JFR0lTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lJTyBpcyBub3Qgc2V0CisjIENPTkZJR19SQU1aU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRNQU5fQURWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVkVMQU4gaXMgbm90IHNldAogQ09ORklHX0ZCX1NNN1hYPXkKLUNPTkZJR19GQl9TTTdYWF9BQ0NFTD15CisjIENPTkZJR19GQl9TTTdYWF9BQ0NFTCBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCi0jIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQyX0ZTPW0KKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X0ZTPXkKK0NPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSkJEMj15CisjIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlM9bQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTz15CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorIyBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KRlNfRlM9bQorQ09ORklHX0pGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSkZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfWEZTX0ZTPW0KK0NPTkZJR19YRlNfUVVPVEE9eQorQ09ORklHX1hGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19CVFJGU19GUz1tCisjIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKQEAgLTE1NzUsMTcgKzE4NjgsMjUgQEAKIENPTkZJR19RVU9UQT15CiAjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CitDT05GSUdfUVVPVEFfVFJFRT1tCiAjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAorQ09ORklHX1FGTVRfVjI9bQogQ09ORklHX1FVT1RBQ1RMPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlNfRlM9bQorQ09ORklHX0FVVE9GUzRfRlM9bQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKICMgQ2FjaGVzCiAjCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19GU0NBQ0hFPW0KKyMgQ09ORklHX0ZTQ0FDSEVfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfRlNDQUNIRV9ISVNUT0dSQU0gaXMgbm90IHNldAorIyBDT05GSUdfRlNDQUNIRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19GU0NBQ0hFX09CSkVDVF9MSVNUIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRUZJTEVTPW0KKyMgQ09ORklHX0NBQ0hFRklMRVNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVGSUxFU19ISVNUT0dSQU0gaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTE1OTksMTEgKzE5MDAsMTMgQEAKICMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwogIwogQ09ORklHX0ZBVF9GUz1tCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQogQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwogQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTlRGU19GUz1tCisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OVEZTX1JXPXkKIAogIwogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKQEAgLTE2MTYsMjMgKzE5MTksNjAgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JU0NfRklMRVNZU1RFTVMgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorQ09ORklHX1NRVUFTSEZTPW0KK0NPTkZJR19TUVVBU0hGU19FTUJFRERFRD15CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPW0KK0NPTkZJR19ST01GU19CQUNLRURfQllfQkxPQ0s9eQorIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19CQUNLRURfQllfQk9USCBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz1tCiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19GU0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1Y0PXkKIENPTkZJR19MT0NLRD1tCiBDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KIENPTkZJR19ORlNfQUNMX1NVUFBPUlQ9bQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz1tCi0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorQ09ORklHX1NVTlJQQ19HU1M9bQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT1tCiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19VUENBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0RGU19VUENBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE2NDMsNDUgKzE5ODMsNDUgQEAKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKIENPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJ1dGYtOCIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfREVGQVVMVD0idXRmOCIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9eQogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwpAQCAtMTY5NSwxMjUgKzIwMzUsMTU1IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiBDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKK0NPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorQ09ORklHX0tFWVM9eQorQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCitDT05GSUdfWE9SX0JMT0NLUz1tCitDT05GSUdfQVNZTkNfQ09SRT1tCitDT05GSUdfQVNZTkNfTUVNQ1BZPW0KK0NPTkZJR19BU1lOQ19YT1I9bQorQ09ORklHX0FTWU5DX1BRPW0KK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj1tCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKK0NPTkZJR19DUllQVE9fRklQUz15CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KIENPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HPW0KIENPTkZJR19DUllQVE9fUk5HMj15CiBDT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX05VTEw9bQogQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NSWVBURD1tCitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KIAogIwogIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKICMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQ009bQorQ09ORklHX0NSWVBUT19HQ009bQorQ09ORklHX0NSWVBUT19TRVFJVj1tCiAKICMKICMgQmxvY2sgbW9kZXMKICMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19DVFI9bQogIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19YVFM9bQogCiAjCiAjIEhhc2ggbW9kZXMKICMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSE1BQz1tCitDT05GSUdfQ1JZUFRPX1hDQkM9bQogIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0dIQVNIPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19STUQxMjg9bQorQ09ORklHX0NSWVBUT19STUQxNjA9bQorQ09ORklHX0NSWVBUT19STUQyNTY9bQorQ09ORklHX0NSWVBUT19STUQzMjA9bQorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQogCiAjCiAjIENpcGhlcnMKICMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX1NBTFNBMjA9bQorQ09ORklHX0NSWVBUT19TRUVEPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCiAKICMKICMgQ29tcHJlc3Npb24KICMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fWkxJQj1tCitDT05GSUdfQ1JZUFRPX0xaTz1tCiAKICMKICMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCiAjCi0jIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkc9bQogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5BUllfUFJJTlRGPXkKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xODIxLDE0ICsyMTkxLDIwIEBACiBDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMTY9eQogQ09ORklHX0NSQ19UMTBESUY9eQogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19BVURJVF9HRU5FUklDPXkKLUNPTkZJR19aTElCX0lORkxBVEU9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19MWk9fQ09NUFJFU1M9bQorQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCmluZGV4IGRkZjY3ZjYuLjk3MzgyYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZwpAQCAtMSw3OSArMSwxMDMgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAotIyBUdWUgRmViIDIwIDIxOjQ3OjM3IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMworIyBGcmkgRmViIDI2IDA5OjUzOjI5IDIwMTAKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwotQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19NQUNIX0FMQ0hFTVk9eQotIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAotQ09ORklHX01JUFNfUEIxMTAwPXkKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDA9eQorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX1BCMTEwMD15CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorQ09ORklHX1NPQ19BVTExMDA9eQorQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX09QUk9GSUxFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0NFVlRfUjRLX0xJQj15CitDT05GSUdfQ1NSQ19SNEtfTElCPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19TT0NfQVUxMTAwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19JUlFfQ1BVPXkKIENPTkZJR19TV0FQX0lPX1NQQUNFPXkKIENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCisjIENPTkZJR19DUFVfTE9PTkdTT04yRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTE9PTkdTT04yRiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX01JUFMzMl9SMT15CiAjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldApAQCAtODYsNiArMTEwLDcgQEAKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKQEAgLTkzLDExICsxMTgsMTQgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQogQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMT15CiBDT05GSUdfQ1BVX01JUFMzMj15CiBDT05GSUdfQ1BVX01JUFNSMT15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfSEFSRFdBUkVfV0FUQ0hQT0lOVFM9eQogCiAjCiAjIEtlcm5lbCB0eXBlCkBAIC0xMDcsMTg0ICsxMzUsMjQ0IEBACiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXBiMTEwMCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19SRUxBWT15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKIAogIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15CisjIENPTkZJR19QQ01DSUFfSU9DVEwgaXMgbm90IHNldAogCiAjCiAjIFBDLWNhcmQgYnJpZGdlcwogIwogIyBDT05GSUdfUENNQ0lBX0FVMVgwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTI5NSwxMTAgKzM4MywyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDA4LDI3ICs0MTEsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDM3LDI1ICs0MzcsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotQ09ORklHX0NPTk5FQ1RPUj1tCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDY4LDYgKzQ2OCw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDkzLDE0ICs0OTQsMTMgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01MTcsMTY2ICs1MTcsMTM2IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVUI9eQogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKIAogIwotIyBNaXNjIGRldmljZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CitDT05GSUdfSURFX1RBU0tfSU9DVEw9eQorIyBDT05GSUdfSURFX1BST0NfRlMgaXMgbm90IHNldAogCiAjCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19SQUlEX0FUVFJTPW0KKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19QSFlMSUI9bQorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKIAogIwogIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCiAjCi1DT05GSUdfTUFSVkVMTF9QSFk9bQotQ09ORklHX0RBVklDT01fUEhZPW0KLUNPTkZJR19RU0VNSV9QSFk9bQotQ09ORklHX0xYVF9QSFk9bQotQ09ORklHX0NJQ0FEQV9QSFk9bQotQ09ORklHX1ZJVEVTU0VfUEhZPW0KLUNPTkZJR19TTVNDX1BIWT1tCi0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CitDT05GSUdfUVNFTUlfUEhZPXkKK0NPTkZJR19MWFRfUEhZPXkKK0NPTkZJR19DSUNBREFfUEhZPXkKK0NPTkZJR19WSVRFU1NFX1BIWT15CitDT05GSUdfU01TQ19QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CitDT05GSUdfSUNQTFVTX1BIWT15CitDT05GSUdfUkVBTFRFS19QSFk9eQorQ09ORklHX05BVElPTkFMX1BIWT15CitDT05GSUdfU1RFMTBYUD15CitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPXkKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19BVTFYMDBfRU5FVCBpcyBub3Qgc2V0CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorQ09ORklHX01JUFNfQVUxWDAwX0VORVQ9eQogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKIAogIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCiAKICMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAotQ09ORklHX1BQUF9BU1lOQz1tCi0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotQ09ORklHX1BQUF9ERUZMQVRFPW0KLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfTVBQRT1tCi1DT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwpAQCAtNjg0LDE2ICs2NTQsMTQgQEAKICMKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwogIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTcwMywyOCArNjcxLDI2IEBACiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVMVgwMF9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNzQzLDE5OCArNzA5LDI4OCBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKICMKICMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCiAjCi1DT05GSUdfU1lOQ0xJTktfQ1M9bQorIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRFJBVz15CiAKICMKLSMgSElEIERldmljZXMKKyMgVVNCIElucHV0IERldmljZXMKICMKLSMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKIAogIwotIyBVU0Igc3VwcG9ydAorIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCisjIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorQ09ORklHX1VTQl9TVVNQRU5EPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIworIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBMRUQgZHJpdmVycworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKLSMgTEVEIFRyaWdnZXJzCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKLSMgSW5maW5pQmFuZCBzdXBwb3J0CisjIG9uLUNQVSBSVEMgZHJpdmVycwogIworQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBUSSBWTFlOUQogIwotCi0jCi0jIFJlYWwgVGltZSBDbG9jawotIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci1DT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19SRUlTRVJGU19GU19YQVRUUj15Ci1DT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotQ09ORklHX0ZVU0VfRlM9bQotQ09ORklHX0dFTkVSSUNfQUNMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtOTUzLDY5ICsxMDA5LDc2IEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz1tCitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CitDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQorIyBDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPW0KLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KK0NPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldApAQCAtMTA1NSwzNCArMTExOCw3MSBAQAogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1pCT09UPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMDkwLDY3ICsxMTkwLDMyIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX1hDQkM9bQotQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KLUNPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fRkNSWVBUPW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PW0KK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9bQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQotQ09ORklHX1RFWFRTRUFSQ0hfQk09bQotQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KLUNPTkZJR19QTElTVD15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjEyMDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YWQ3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjEyMDBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTU2OCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCisjIEZyaSBGZWIgMjYgMTA6MjM6MzQgMjAxMAorIworQ09ORklHX01JUFM9eQorCisjCisjIE1hY2hpbmUgc2VsZWN0aW9uCisjCitDT05GSUdfTUFDSF9BTENIRU1ZPXkKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19QQjEyMDA9eQorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxMjAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKK0NPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CitDT05GSUdfTUlQU19ESVNBQkxFX09CU09MRVRFX0lERT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CitDT05GSUdfSVJRX0NQVT15CitDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CisKKyMKKyMgQ1BVIHNlbGVjdGlvbgorIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAorQ09ORklHX0NQVV9NSVBTMzJfUjE9eQorIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CitDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKK0NPTkZJR19DUFVfTUlQUzMyPXkKK0NPTkZJR19DUFVfTUlQU1IxPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CisKKyMKKyMgS2VybmVsIHR5cGUKKyMKK0NPTkZJR18zMkJJVD15CisjIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKK0NPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKKyMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CitDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19DUFVfSEFTX1NZTkM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfS1NNPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItcGIxMjAwIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKKyMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKK0NPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQorIyBDT05GSUdfUENNQ0lBX0lPQ1RMIGlzIG5vdCBzZXQKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKKyMgQ09ORklHX1BDTUNJQV9BVTFYMDAgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTPXkKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQorQ09ORklHX1RSQURfU0lHTkFMUz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0FVMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPXkKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIworIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVUI9eQorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKK0NPTkZJR19JREVfQVRBUEk9eQorIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorQ09ORklHX0lERV9UQVNLX0lPQ1RMPXkKKyMgQ09ORklHX0lERV9QUk9DX0ZTIGlzIG5vdCBzZXQKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCisjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERV9BVTFYWFg9eQorQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9QSU9fREJETUE9eQorIyBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0NIQVJERVY9eQorIyBDT05GSUdfSTJDX0hFTFBFUl9BVVRPIGlzIG5vdCBzZXQKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19BVTE1NTA9eQorIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0FVMTU1MD15CitDT05GSUdfU1BJX0JJVEJBTkc9eQorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CitDT05GSUdfSFdNT05fVklEPXkKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19BRE0xMDI1PXkKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTE03MD15CisjIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQjE0MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQVUxMjAwPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorQ09ORklHX0ZPTlRTPXkKKyMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4MTY9eQorIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CitDT05GSUdfU09VTkQ9eQorIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKK0NPTkZJR19TTkRfSkFDSz15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUz15CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVk1BU1RFUj15CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQUM5N19DT0RFQz15CisjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTUNJQSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX1NPQ19BQzk3X0JVUz15CitDT05GSUdfU05EX1NPQ19BVTFYUFNDPXkKK0NPTkZJR19TTkRfU09DX0FVMVhQU0NfSTJTPXkKK0NPTkZJR19TTkRfU09DX0FVMVhQU0NfQUM5Nz15CitDT05GSUdfU05EX1NPQ19EQjEyMDA9eQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX0FDOTdfQ09ERUM9eQorQ09ORklHX1NORF9TT0NfV004NzMxPXkKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BQzk3X0JVUz15CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CitDT05GSUdfSElEUkFXPXkKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRERFVj15CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9ERUJVRz15CitDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisKKyMKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KKyMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CisjIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0FVMVg9eQorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfSURFX0RJU0sgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9eQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19FRklfUEFSVElUSU9OPXkKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPXkKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19TVFJJUF9BU01fU1lNUz15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwIgorIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworQ09ORklHX0tFWVM9eQorQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD15CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwppbmRleCA1ZWM2MDgzLi43NDk3ZDMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKQEAgLTEsNzggKzEsMTAyIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzozNyAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAxMDowNToyNyAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX1BCMTUwMD15Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19QQjE1MDA9eQorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxNTAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15Ci1DT05GSUdfU09DX0FVMTUwMD15Ci1DT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQ1BVIHNlbGVjdGlvbgogIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTg1LDYgKzEwOSw3IEBACiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC05MiwxMSArMTE3LDE0IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKIENPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQogQ09ORklHX0NQVV9NSVBTMzI9eQogQ09ORklHX0NQVV9NSVBTUjE9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTA2LDE5MCArMTM0LDI1NSBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cAogIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItcGIxNTAwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1JFTEFZPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfUENJX1FVSVJLUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQogQ09ORklHX1BDTUNJQV9JT0NUTD15Ci1DT05GSUdfQ0FSREJVUz15CisjIENPTkZJR19DQVJEQlVTIGlzIG5vdCBzZXQKIAogIwogIyBQQy1jYXJkIGJyaWRnZXMKICMKICMgQ09ORklHX1lFTlRBIGlzIG5vdCBzZXQKLUNPTkZJR19QRDY3Mjk9bQorIyBDT05GSUdfUEQ2NzI5IGlzIG5vdCBzZXQKICMgQ09ORklHX0k4MjA5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0NBUkRfTk9OU1RBVElDPW0KLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTMwMCwxMTAgKzM5MywyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDEzLDI3ICs0MjEsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDQyLDI1ICs0NDcsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotQ09ORklHX0NPTk5FQ1RPUj1tCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDczLDYgKzQ3OCw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDk4LDE0ICs1MDQsMTQgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTUyMywzMCArNTI5LDIwIEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKQEAgLTU1NCw2NyArNTUwLDY2IEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1VCPXkKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi1DT05GSUdfU0dJX0lPQzQ9bQotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCitDT05GSUdfSURFX1hGRVJfTU9ERT15CitDT05GSUdfSURFX0FUQVBJPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ1M9bQotIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9UQVNLX0lPQ1RMPXkKK0NPTkZJR19JREVfUFJPQ19GUz15CiAKICMKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCiBDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotIyBDT05GSUdfSURFUENJX1NIQVJFX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9JREVETUFfRk9SQ0VEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9QQ0lfQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9IUFQzNjY9eQogIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JVDgyMTM9bQorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKQEAgLTYyNCw4MiArNjE5LDY1IEBACiAjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1RDODZDMDAxPW0KLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUE9eQotIyBDT05GSUdfSURFRE1BX0lWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfUkFJRF9BVFRSUz1tCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKKworIworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEFSQ25ldCBkZXZpY2VzCi0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfUEhZTElCPXkKIAogIwogIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCiAjCi1DT05GSUdfTUFSVkVMTF9QSFk9bQotQ09ORklHX0RBVklDT01fUEhZPW0KLUNPTkZJR19RU0VNSV9QSFk9bQotQ09ORklHX0xYVF9QSFk9bQotQ09ORklHX0NJQ0FEQV9QSFk9bQotQ09ORklHX1ZJVEVTU0VfUEhZPW0KLUNPTkZJR19TTVNDX1BIWT1tCi0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CitDT05GSUdfUVNFTUlfUEhZPXkKK0NPTkZJR19MWFRfUEhZPXkKK0NPTkZJR19DSUNBREFfUEhZPXkKK0NPTkZJR19WSVRFU1NFX1BIWT15CitDT05GSUdfU01TQ19QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CitDT05GSUdfSUNQTFVTX1BIWT15CitDT05GSUdfUkVBTFRFS19QSFk9eQorQ09ORklHX05BVElPTkFMX1BIWT15CitDT05GSUdfU1RFMTBYUD15CitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPXkKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPW0KK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVD15CiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKQEAgLTcwNyw5NiArNjg1LDUxIEBACiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19RTEEzWFhYPW0KLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UMz1tCi0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotQ09ORklHX05FVFhFTl9OSUM9bQotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIworIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAogCiAjCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCi1DT05GSUdfTkVUX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBXzNDNTg5PW0KLUNPTkZJR19QQ01DSUFfM0M1NzQ9bQotQ09ORklHX1BDTUNJQV9GTVZKMThYPW0KLUNPTkZJR19QQ01DSUFfUENORVQ9bQotQ09ORklHX1BDTUNJQV9OTUNMQU49bQotQ09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCi1DT05GSUdfUENNQ0lBX1hJUkMyUFM9bQotQ09ORklHX1BDTUNJQV9BWE5FVD1tCi0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTgwNCwxNiArNzM3LDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC04MjMsMzMgKzc1NCwzNCBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQVUxWDAwX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CkBAIC04NjMsMjgyICs3OTUsNDUwIEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAogCiAjCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwogIwotQ09ORklHX1NZTkNMSU5LX0NTPW0KKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKK0NPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFBQUyBzdXBwb3J0CiAjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCi0jIE11bHRpbWVkaWEgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQV9BUkIgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CitDT05GSUdfRklSTVdBUkVfRURJRD15CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TMUQxM1hYWD15CisjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAorIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIFNvdW5kCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwotIyBISUQgRGV2aWNlcworIyBVU0IgSW5wdXQgRGV2aWNlcwogIwotIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQogCiAjCi0jIFVTQiBzdXBwb3J0CisjIFNwZWNpYWwgSElEIGRyaXZlcnMKICMKKyMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09UR19XSElURUxJU1Q9eQorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIFJlYWwgVGltZSBDbG9jaworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBETUEgQ2xpZW50cworIyBUSSBWTFlOUQogIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPW0KLUNPTkZJR19BVVRPRlM0X0ZTPW0KLUNPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPXkKK0NPTkZJR19VREZfTkxTPXkKIAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCitDT05GSUdfRkFUX0ZTPXkKICMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPW0KLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KK0NPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldApAQCAtMTE1NSwxMCArMTI1NSwxMCBAQAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQogIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldApAQCAtMTE2OCwzOCArMTI2OCw3NSBAQAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTIwNyw2NyArMTM0NCwzMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfSVRVX1Q9eQogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKaW5kZXggNjY0NzY0Mi4uYWE1MjZmNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCkBAIC0xLDc5ICsxLDEwMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCi0jIFR1ZSBGZWIgMjAgMjE6NDc6MzcgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCisjIEZyaSBGZWIgMjYgMTA6MDY6MDcgMjAxMAogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX01BQ0hfQUxDSEVNWT15Ci0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlQU19QQjE1NTA9eQotIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9PTkdTT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMD15CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorQ09ORklHX01JUFNfUEIxNTUwPXkKKyMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CitDT05GSUdfU09DX0FVMTU1MD15CitDT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BST0ZJTEU9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfQ0VWVF9SNEtfTElCPXkKK0NPTkZJR19DU1JDX1I0S19MSUI9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogQ09ORklHX01JUFNfRElTQUJMRV9PQlNPTEVURV9JREU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1NPQ19BVTE1NTA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0lSUV9DUFU9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIENQVSBzZWxlY3Rpb24KICMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTUlQUzMyX1IxPXkKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CkBAIC04Niw2ICsxMTAsNyBAQAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtOTMsMTEgKzExOCwxNCBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CiBDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKIENPTkZJR19DUFVfTUlQUzMyPXkKIENPTkZJR19DUFVfTUlQU1IxPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CiAKICMKICMgS2VybmVsIHR5cGUKQEAgLTEwNywxOTAgKzEzNSwyNTUgQEAKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXBiMTU1MCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19SRUxBWT15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKIAogIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1BDSV9RVUlSS1M9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi1DT05GSUdfUENDQVJEPW0KLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPW0KK0NPTkZJR19QQ0NBUkQ9eQorQ09ORklHX1BDTUNJQT15CiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKIENPTkZJR19QQ01DSUFfSU9DVEw9eQotQ09ORklHX0NBUkRCVVM9eQorIyBDT05GSUdfQ0FSREJVUyBpcyBub3Qgc2V0CiAKICMKICMgUEMtY2FyZCBicmlkZ2VzCiAjCiAjIENPTkZJR19ZRU5UQSBpcyBub3Qgc2V0Ci1DT05GSUdfUEQ2NzI5PW0KKyMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBX0FVMVgwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUENDQVJEX05PTlNUQVRJQz1tCi0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9NSUdSQVRFPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX1JBUlA9eQogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CkBAIC0zMDEsMTEwICszOTQsMjUgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19ORl9DVF9BQ0NUPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCi1DT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQotQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQotQ09ORklHX05GX0NUX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTQxNCwyNyArNDIyLDMwIEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19ST1VURT15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIworIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQ0MywyNSArNDU0LDI1IEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLUNPTkZJR19DT05ORUNUT1I9bQotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ3NCw2ICs0ODUsNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ5OSwxNCArNTExLDE0IEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQUxDSEVNWT15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01MjQsMzAgKzUzNiwzMCBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIworQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CitDT05GSUdfTVREX05BTkRfQVUxNTUwPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CkBAIC01NTUsNjcgKzU2Nyw2NiBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9VQj15CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotQ09ORklHX1NHSV9JT0M0PW0KLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotQ09ORklHX0lERV9NQVhfSFdJRlM9NAotQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworQ09ORklHX0lERV9YRkVSX01PREU9eQorQ09ORklHX0lERV9BVEFQST15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERUNTPW0KLSMgQ09ORklHX0JMS19ERVZfREVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ1M9eQorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorIyBDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi1DT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKIENPTkZJR19CTEtfREVWX0lERVBDST15Ci0jIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX1BDSV9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0hQVDM2Nj15CiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lUODIxMz1tCisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldApAQCAtNjI1LDgyICs2MzYsNjUgQEAKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfVEM4NkMwMDE9bQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15Ci0jIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19SQUlEX0FUVFJTPW0KKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19QSFlMSUI9eQogCiAjCiAjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi1DT05GSUdfVklURVNTRV9QSFk9bQotQ09ORklHX1NNU0NfUEhZPW0KLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0RBVklDT01fUEhZPXkKK0NPTkZJR19RU0VNSV9QSFk9eQorQ09ORklHX0xYVF9QSFk9eQorQ09ORklHX0NJQ0FEQV9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKK0NPTkZJR19TTVNDX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19JQ1BMVVNfUEhZPXkKK0NPTkZJR19SRUFMVEVLX1BIWT15CitDT05GSUdfTkFUSU9OQUxfUEhZPXkKK0NPTkZJR19TVEUxMFhQPXkKK0NPTkZJR19MU0lfRVQxMDExQ19QSFk9eQogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX01JUFNfQVUxWDAwX0VORVQ9eQogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CkBAIC03MDgsODggKzcwMiw1MSBAQAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotCi0jCi0jIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci1DT05GSUdfUUxBM1hYWD1tCi0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDM9bQotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRYRU5fTklDPW0KLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKIAogIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwogIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKIAogIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAotQ09ORklHX1BQUF9BU1lOQz1tCi0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotQ09ORklHX1BQUF9ERUZMQVRFPW0KLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfTVBQRT1tCi1DT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIworIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC03OTcsMTYgKzc1NCwxNCBAQAogIwogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtODE2LDMzICs3NzEsMzQgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVMVgwMF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NApAQCAtODU2LDI4MiArODEyLDQ5MiBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKIAogIwogIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKICMKLUNPTkZJR19TWU5DTElOS19DUz1tCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisjIENPTkZJR19JMkNfSEVMUEVSX0FVVE8gaXMgbm90IHNldAogCiAjCi0jIEkyQyBzdXBwb3J0CisjIEkyQyBBbGdvcml0aG1zCiAjCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAogCiAjCi0jIFNQSSBzdXBwb3J0CisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAogIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfQVUxNTUwPXkKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFBQUyBzdXBwb3J0CiAjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCi0jIE11bHRpbWVkaWEgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBX0FSQiBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwotIyBTb3VuZAorIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRFJBVz15CiAKICMKLSMgSElEIERldmljZXMKKyMgVVNCIElucHV0IERldmljZXMKICMKLSMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKIAogIwotIyBVU0Igc3VwcG9ydAorIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCisjIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorQ09ORklHX1VTQl9TVVNQRU5EPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIFJlYWwgVGltZSBDbG9jaworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBETUEgQ2xpZW50cworIyBUSSBWTFlOUQogIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPW0KLUNPTkZJR19BVVRPRlM0X0ZTPW0KLUNPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPXkKK0NPTkZJR19VREZfTkxTPXkKIAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCitDT05GSUdfRkFUX0ZTPXkKICMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPW0KLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KK0NPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldApAQCAtMTE0OCwxMCArMTMxNCwxMCBAQAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQogIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldApAQCAtMTE2MSwzOCArMTMyNyw3NSBAQAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTIwMCw2NyArMTQwMywzMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfSVRVX1Q9eQogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy9rbjAxLWJlcnIuYyBiL2FyY2gvbWlwcy9kZWMva24wMS1iZXJyLmMKaW5kZXggYjBkYzZkNS4uOTRkMjNiNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy9rbjAxLWJlcnIuYworKysgYi9hcmNoL21pcHMvZGVjL2tuMDEtYmVyci5jCkBAIC00Niw3ICs0Niw3IEBACiAgKiBUaGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlIC0tIGl0IGhhcyB0byBiZSBpbml0aWFsaXplZC4KICAqLwogdTE2IGNhY2hlZF9rbjAxX2NzcjsKLURFRklORV9TUElOTE9DSyhrbjAxX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soa24wMV9sb2NrKTsKIAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVjX2tuMDFfYmVfYWNrKHZvaWQpCkBAIC01NCwxMiArNTQsMTIgQEAKIAl2b2xhdGlsZSB1MTYgKmNzciA9ICh2b2lkICopQ0tTRUcxQUREUihLTjAxX1NMT1RfQkFTRSArIEtOMDFfQ1NSKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmtuMDFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgma24wMV9sb2NrLCBmbGFncyk7CiAKIAkqY3NyID0gY2FjaGVkX2tuMDFfY3NyIHwgS04wMV9DU1JfTUVNRVJSOwkvKiBDbGVhciBidXMgSVJRLiAqLwogCWlvYigpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma24wMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtuMDFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGRlY19rbjAxX2JlX2JhY2tlbmQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBpc19maXh1cCwgaW50IGludm9rZXIpCkBAIC0xODIsNyArMTgyLDcgQEAKIAl2b2xhdGlsZSB1MTYgKmNzciA9ICh2b2lkICopQ0tTRUcxQUREUihLTjAxX1NMT1RfQkFTRSArIEtOMDFfQ1NSKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmtuMDFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgma24wMV9sb2NrLCBmbGFncyk7CiAKIAkvKiBQcmVzZXQgd3JpdGUtb25seSBiaXRzIG9mIHRoZSBDb250cm9sIFJlZ2lzdGVyIGNhY2hlLiAqLwogCWNhY2hlZF9rbjAxX2NzciA9ICpjc3I7CkBAIC0xOTQsNyArMTk0LDcgQEAKIAkqY3NyID0gY2FjaGVkX2tuMDFfY3NyOwogCWlvYigpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma24wMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtuMDFfbG9jaywgZmxhZ3MpOwogCiAJLyogQ2xlYXIgYW55IGxlZnRvdmVyIGVycm9ycyBmcm9tIHRoZSBmaXJtd2FyZS4gKi8KIAlkZWNfa24wMV9iZV9hY2soKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWMvcHJvbS9sb2NvcmUuUyBiL2FyY2gvbWlwcy9kZWMvcHJvbS9sb2NvcmUuUwppbmRleCBkOWFjZGNlLi5mNzJiNTc0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGVjL3Byb20vbG9jb3JlLlMKKysrIGIvYXJjaC9taXBzL2RlYy9wcm9tL2xvY29yZS5TCkBAIC0yNyw0ICsyNywzIEBACiAJanIJazAKIAkgcmZlCiBFTkQoZ2VuZXhjZXB0X2Vhcmx5KQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggZGQ3NWQ2Ny4uNTE5MTk3ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMTM3LDcgKzEzNyw3IEBACiB7CiAJaW50IHJlc3VsdDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCWludCB0ZW1wOwpAQCAtMTg5LDcgKzE4OSw3IEBACiB7CiAJaW50IHJlc3VsdDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCWludCB0ZW1wOwpAQCAtMjQ5LDcgKzI0OSw3IEBACiB7CiAJaW50IHJlc3VsdDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCWludCB0ZW1wOwpAQCAtNTE2LDcgKzUxNiw3IEBACiB7CiAJbG9uZyByZXN1bHQ7CiAKLQlzbXBfbGxzY19tYigpOworCXNtcF9tYl9fYmVmb3JlX2xsc2MoKTsKIAogCWlmIChrZXJuZWxfdXNlc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgewogCQlsb25nIHRlbXA7CkBAIC01NjgsNyArNTY4LDcgQEAKIHsKIAlsb25nIHJlc3VsdDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCWxvbmcgdGVtcDsKQEAgLTYyOCw3ICs2MjgsNyBAQAogewogCWxvbmcgcmVzdWx0OwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJbG9uZyB0ZW1wOwpAQCAtNzg4LDkgKzc4OCw5IEBACiAgKiBhdG9taWMqX3JldHVybiBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemluZyBidXQgbm90IHRoZSBub24tKl9yZXR1cm4KICAqIHZlcnNpb25zLgogICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbGxzY19tYigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbWJfX2JlZm9yZV9sbHNjKCkKICNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJc21wX2xsc2NfbWIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJc21wX2xsc2NfbWIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJc21wX21iX19iZWZvcmVfbGxzYygpCiAjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCXNtcF9sbHNjX21iKCkKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F0b21pYy1sb25nLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYmFycmllci5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JhcnJpZXIuaAppbmRleCA4ZTlhYzMxLi5jMDg4NGYwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYmFycmllci5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKQEAgLTg4LDEyICs4OCwyMCBAQAogCQk6IC8qIG5vIG91dHB1dCAqLwkJXAogCQk6ICJtIiAoKihpbnQgKilDS1NFRzEpCQlcCiAJCTogIm1lbW9yeSIpCisjaWZkZWYgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OCisjIGRlZmluZSBPQ1RFT05fU1lOQ1dfU1RSCSIuc2V0IHB1c2hcbi5zZXQgYXJjaD1vY3Rlb25cbnN5bmN3XG5zeW5jd1xuLnNldCBwb3BcbiIKKyMgZGVmaW5lIF9fc3luY3coKSAJX19hc21fXyBfX3ZvbGF0aWxlX18oT0NURU9OX1NZTkNXX1NUUiA6IDogOiAibWVtb3J5IikKIAotI2RlZmluZSBmYXN0X3dtYigpCV9fc3luYygpCi0jZGVmaW5lIGZhc3Rfcm1iKCkJX19zeW5jKCkKLSNkZWZpbmUgZmFzdF9tYigpCV9fc3luYygpCi0jaWZkZWYgQ09ORklHX1NHSV9JUDI4Ci0jZGVmaW5lIGZhc3RfaW9iKCkJCQkJXAorIyBkZWZpbmUgZmFzdF93bWIoKQlfX3N5bmN3KCkKKyMgZGVmaW5lIGZhc3Rfcm1iKCkJYmFycmllcigpCisjIGRlZmluZSBmYXN0X21iKCkJX19zeW5jKCkKKyMgZGVmaW5lIGZhc3RfaW9iKCkJZG8geyB9IHdoaWxlICgwKQorI2Vsc2UgLyogISBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gKi8KKyMgZGVmaW5lIGZhc3Rfd21iKCkJX19zeW5jKCkKKyMgZGVmaW5lIGZhc3Rfcm1iKCkJX19zeW5jKCkKKyMgZGVmaW5lIGZhc3RfbWIoKQlfX3N5bmMoKQorIyBpZmRlZiBDT05GSUdfU0dJX0lQMjgKKyMgIGRlZmluZSBmYXN0X2lvYigpCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCiAJCSIuc2V0CXB1c2hcblx0IgkJXAogCQkiLnNldAlub3Jlb3JkZXJcblx0IgkJXApAQCAtMTA0LDEzICsxMTIsMTQgQEAKIAkJOiAvKiBubyBvdXRwdXQgKi8JCVwKIAkJOiAibSIgKCooaW50ICopQ0tTRUcxQUREUigweDFmYTAwMDA0KSkgXAogCQk6ICJtZW1vcnkiKQotI2Vsc2UKLSNkZWZpbmUgZmFzdF9pb2IoKQkJCQlcCisjIGVsc2UKKyMgIGRlZmluZSBmYXN0X2lvYigpCQkJCVwKIAlkbyB7CQkJCQlcCiAJCV9fc3luYygpOwkJCVwKIAkJX19mYXN0X2lvYigpOwkJCVwKIAl9IHdoaWxlICgwKQotI2VuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OICovCiAKICNpZmRlZiBDT05GSUdfQ1BVX0hBU19XQgogCkBAIC0xMzEsMjUgKzE0MCw0MiBAQAogI2VuZGlmIC8qICFDT05GSUdfQ1BVX0hBU19XQiAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfV0VBS19PUkRFUklORykgJiYgZGVmaW5lZChDT05GSUdfU01QKQotI2RlZmluZSBfX1dFQUtfT1JERVJJTkdfTUIJIiAgICAgICBzeW5jCVxuIgorIyBpZmRlZiBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04KKyMgIGRlZmluZSBzbXBfbWIoKQlfX3N5bmMoKQorIyAgZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyMgIGRlZmluZSBzbXBfd21iKCkJX19zeW5jdygpCisjIGVsc2UKKyMgIGRlZmluZSBzbXBfbWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIgOiA6IDoibWVtb3J5IikKKyMgIGRlZmluZSBzbXBfcm1iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmMiIDogOiA6Im1lbW9yeSIpCisjICBkZWZpbmUgc21wX3dtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIiA6IDogOiJtZW1vcnkiKQorIyBlbmRpZgogI2Vsc2UKLSNkZWZpbmUgX19XRUFLX09SREVSSU5HX01CCSIJCVxuIgorI2RlZmluZSBzbXBfbWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfd21iKCkJYmFycmllcigpCiAjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX1dFQUtfUkVPUkRFUklOR19CRVlPTkRfTExTQykgJiYgZGVmaW5lZChDT05GSUdfU01QKQogI2RlZmluZSBfX1dFQUtfTExTQ19NQgkJIiAgICAgICBzeW5jCVxuIgogI2Vsc2UKICNkZWZpbmUgX19XRUFLX0xMU0NfTUIJCSIJCVxuIgogI2VuZGlmCiAKLSNkZWZpbmUgc21wX21iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oX19XRUFLX09SREVSSU5HX01CIDogOiA6Im1lbW9yeSIpCi0jZGVmaW5lIHNtcF9ybWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfT1JERVJJTkdfTUIgOiA6IDoibWVtb3J5IikKLSNkZWZpbmUgc21wX3dtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKF9fV0VBS19PUkRFUklOR19NQiA6IDogOiJtZW1vcnkiKQotCiAjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBcCiAJZG8geyB2YXIgPSB2YWx1ZTsgc21wX21iKCk7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgc21wX2xsc2NfbWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfTExTQ19NQiA6IDogOiJtZW1vcnkiKQotI2RlZmluZSBzbXBfbGxzY19ybWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfTExTQ19NQiA6IDogOiJtZW1vcnkiKQotI2RlZmluZSBzbXBfbGxzY193bWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfTExTQ19NQiA6IDogOiJtZW1vcnkiKQorCisjaWZkZWYgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2xsc2MoKSBzbXBfd21iKCkKKy8qIENhdXNlIHByZXZpb3VzIHdyaXRlcyB0byBiZWNvbWUgdmlzaWJsZSBvbiBhbGwgQ1BVcyBhcyBzb29uIGFzIHBvc3NpYmxlICovCisjZGVmaW5lIG51ZGdlX3dyaXRlcygpIF9fYXNtX18gX192b2xhdGlsZV9fKCIuc2V0IHB1c2hcblx0IgkJXAorCQkJCQkgICAgIi5zZXQgYXJjaD1vY3Rlb25cblx0IglcCisJCQkJCSAgICAic3luY3dcblx0IgkJCVwKKwkJCQkJICAgICIuc2V0IHBvcCIgOiA6IDogIm1lbW9yeSIpCisjZWxzZQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9sbHNjKCkgc21wX2xsc2NfbWIoKQorI2RlZmluZSBudWRnZV93cml0ZXMoKSBtYigpCisjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX0JBUlJJRVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDg0YTM4MzguLjkyNTVjZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTQyLDcgKzQyLDcgQEAKIC8qCiAgKiBjbGVhcl9iaXQoKSBkb2Vzbid0IHByb3ZpZGUgYW55IGJhcnJpZXIgZm9yIHRoZSBjb21waWxlci4KICAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQlzbXBfbGxzY19tYigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCXNtcF9tYl9fYmVmb3JlX2xsc2MoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCXNtcF9sbHNjX21iKCkKIAogLyoKQEAgLTI1OCw3ICsyNTgsNyBAQAogCXVuc2lnbmVkIHNob3J0IGJpdCA9IG5yICYgU1pMT05HX01BU0s7CiAJdW5zaWduZWQgbG9uZyByZXM7CiAKLQlzbXBfbGxzY19tYigpOworCXNtcF9tYl9fYmVmb3JlX2xsc2MoKTsKIAogCWlmIChrZXJuZWxfdXNlc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgewogCQl1bnNpZ25lZCBsb25nICptID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IFNaTE9OR19MT0cpOwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJdW5zaWduZWQgc2hvcnQgYml0ID0gbnIgJiBTWkxPTkdfTUFTSzsKIAl1bnNpZ25lZCBsb25nIHJlczsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCXVuc2lnbmVkIGxvbmcgKm0gPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gU1pMT05HX0xPRyk7CkBAIC00ODUsNyArNDg1LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBiaXQgPSBuciAmIFNaTE9OR19NQVNLOwogCXVuc2lnbmVkIGxvbmcgcmVzOwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJdW5zaWduZWQgbG9uZyAqbSA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiBTWkxPTkdfTE9HKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jbXB4Y2hnLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY21weGNoZy5oCmluZGV4IDgxNWE0MzguLmVkOWFhYWFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY21weGNoZy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jbXB4Y2hnLmgKQEAgLTcyLDE0ICs3MiwxNCBAQAogICovCiBleHRlcm4gdm9pZCBfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CiAKLSNkZWZpbmUgX19jbXB4Y2hnKHB0ciwgb2xkLCBuZXcsIGJhcnJpZXIpCQkJCVwKKyNkZWZpbmUgX19jbXB4Y2hnKHB0ciwgb2xkLCBuZXcsIHByZV9iYXJyaWVyLCBwb3N0X2JhcnJpZXIpCQlcCiAoewkJCQkJCQkJCVwKIAlfX3R5cGVvZl9fKHB0cikgX19wdHIgPSAocHRyKTsJCQkJCVwKIAlfX3R5cGVvZl9fKCoocHRyKSkgX19vbGQgPSAob2xkKTsJCQkJXAogCV9fdHlwZW9mX18oKihwdHIpKSBfX25ldyA9IChuZXcpOwkJCQlcCiAJX190eXBlb2ZfXygqKHB0cikpIF9fcmVzID0gMDsJCQkJCVwKIAkJCQkJCQkJCVwKLQliYXJyaWVyOwkJCQkJCQlcCisJcHJlX2JhcnJpZXI7CQkJCQkJCVwKIAkJCQkJCQkJCVwKIAlzd2l0Y2ggKHNpemVvZigqKF9fcHRyKSkpIHsJCQkJCVwKIAljYXNlIDQ6CQkJCQkJCQlcCkBAIC05NiwxMyArOTYsMTMgQEAKIAkJYnJlYWs7CQkJCQkJCVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCi0JYmFycmllcjsJCQkJCQkJXAorCXBvc3RfYmFycmllcjsJCQkJCQkJXAogCQkJCQkJCQkJXAogCV9fcmVzOwkJCQkJCQkJXAogfSkKIAotI2RlZmluZSBjbXB4Y2hnKHB0ciwgb2xkLCBuZXcpCQlfX2NtcHhjaGcocHRyLCBvbGQsIG5ldywgc21wX2xsc2NfbWIoKSkKLSNkZWZpbmUgY21weGNoZ19sb2NhbChwdHIsIG9sZCwgbmV3KQlfX2NtcHhjaGcocHRyLCBvbGQsIG5ldywgKQorI2RlZmluZSBjbXB4Y2hnKHB0ciwgb2xkLCBuZXcpCQlfX2NtcHhjaGcocHRyLCBvbGQsIG5ldywgc21wX21iX19iZWZvcmVfbGxzYygpLCBzbXBfbGxzY19tYigpKQorI2RlZmluZSBjbXB4Y2hnX2xvY2FsKHB0ciwgb2xkLCBuZXcpCV9fY21weGNoZyhwdHIsIG9sZCwgbmV3LCAsICkKIAogI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQkJCQkJCVwKICAgKHsJCQkJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmgKaW5kZXggMWY0ZGY2NC4uYWM3M2NlZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS1mZWF0dXJlcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaApAQCAtOTUsNiArOTUsOSBAQAogI2lmbmRlZiBjcHVfaGFzX3NtYXJ0bWlwcwogI2RlZmluZSBjcHVfaGFzX3NtYXJ0bWlwcyAgICAgIChjcHVfZGF0YVswXS5hc2VzICYgTUlQU19BU0VfU01BUlRNSVBTKQogI2VuZGlmCisjaWZuZGVmIGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpCisjZGVmaW5lIGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpIDAKKyNlbmRpZgogI2lmbmRlZiBjcHVfaGFzX3Z0YWdfaWNhY2hlCiAjZGVmaW5lIGNwdV9oYXNfdnRhZ19pY2FjaGUJKGNwdV9kYXRhWzBdLmljYWNoZS5mbGFncyAmIE1JUFNfQ0FDSEVfVlRBRykKICNlbmRpZgpAQCAtMTkxLDYgKzE5NCw5IEBACiAjIGlmbmRlZiBjcHVfaGFzXzY0Yml0X2FkZHJlc3NlcwogIyBkZWZpbmUgY3B1X2hhc182NGJpdF9hZGRyZXNzZXMJMAogIyBlbmRpZgorIyBpZm5kZWYgY3B1X3ZtYml0cworIyBkZWZpbmUgY3B1X3ZtYml0cyAzMQorIyBlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfNjRCSVQKQEAgLTIwOSw2ICsyMTUsMTAgQEAKICMgaWZuZGVmIGNwdV9oYXNfNjRiaXRfYWRkcmVzc2VzCiAjIGRlZmluZSBjcHVfaGFzXzY0Yml0X2FkZHJlc3NlcwkxCiAjIGVuZGlmCisjIGlmbmRlZiBjcHVfdm1iaXRzCisjIGRlZmluZSBjcHVfdm1iaXRzIGNwdV9kYXRhWzBdLnZtYml0cworIyBkZWZpbmUgX19ORUVEX1ZNQklUU19QUk9CRQorIyBlbmRpZgogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IyX0lSUV9WSSkgJiYgIWRlZmluZWQoY3B1X2hhc192aW50KQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS1pbmZvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LWluZm8uaAppbmRleCAxMjYwNDQzLi5iMzlkZWYzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LWluZm8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LWluZm8uaApAQCAtNTgsNiArNTgsOSBAQAogCXN0cnVjdCBjYWNoZV9kZXNjCXRjYWNoZTsJLyogVGVydGlhcnkvc3BsaXQgc2Vjb25kYXJ5IGNhY2hlICovCiAJaW50CQkJc3JzZXRzOwkvKiBTaGFkb3cgcmVnaXN0ZXIgc2V0cyAqLwogCWludAkJCWNvcmU7CS8qIHBoeXNpY2FsIGNvcmUgbnVtYmVyICovCisjaWZkZWYgQ09ORklHXzY0QklUCisJaW50CQkJdm1iaXRzOwkvKiBWaXJ0dWFsIG1lbW9yeSBzaXplIGluIGJpdHMgKi8KKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX01JUFNfTVRfU01QKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNVEMpCiAJLyoKIAkgKiBJbiB0aGUgTUlQUyBNVCAiU01UQyIgbW9kZWwsIGVhY2ggVEMgaXMgY29uc2lkZXJlZApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oCmluZGV4IGNmMzczYTkuLmE1YWNkYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmgKQEAgLTIyNCw3ICsyMjQsNyBAQAogCSAqIE1JUFM2NCBjbGFzcyBwcm9jZXNzb3JzCiAJICovCiAJQ1BVXzVLQywgQ1BVXzIwS0MsIENQVV8yNUtGLCBDUFVfU0IxLCBDUFVfU0IxQSwgQ1BVX0xPT05HU09OMiwKLQlDUFVfQ0FWSVVNX09DVEVPTiwKKwlDUFVfQ0FWSVVNX09DVEVPTiwgQ1BVX0NBVklVTV9PQ1RFT05fUExVUywKIAogCUNQVV9MQVNUCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2N1cnJlbnQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jdXJyZW50LmgKaW5kZXggNTU5ZGI2Ni4uNGM1MTQwMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2N1cnJlbnQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3VycmVudC5oCkBAIC0xLDIzICsxIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAyIFJhbGYgQmFlY2hsZQotICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSAqLwotI2lmbmRlZiBfQVNNX0NVUlJFTlRfSAotI2RlZmluZSBfQVNNX0NVUlJFTlRfSAotCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KLQotc3RydWN0IHRhc2tfc3RydWN0OwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGdldF9jdXJyZW50KHZvaWQpCi17Ci0JcmV0dXJuIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dGFzazsKLX0KLQotI2RlZmluZSBjdXJyZW50CQlnZXRfY3VycmVudCgpCi0KLSNlbmRpZiAvKiBfQVNNX0NVUlJFTlRfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2N1cnJlbnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZWMva24wMS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RlYy9rbjAxLmgKaW5kZXggMjhmYTcxNy4uODhkOWZmZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RlYy9rbjAxLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RlYy9rbjAxLmgKQEAgLTgwLDcgKzgwLDYgQEAKIHN0cnVjdCBwdF9yZWdzOwogCiBleHRlcm4gdTE2IGNhY2hlZF9rbjAxX2NzcjsKLWV4dGVybiBzcGlubG9ja190IGtuMDFfbG9jazsKIAogZXh0ZXJuIHZvaWQgZGVjX2tuMDFfYmVfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgZGVjX2tuMDFfYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlzX2ZpeHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZXZpY2UuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZXZpY2UuaAppbmRleCBkOGY5ODcyLi4wNjc0NmM1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZGV2aWNlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RldmljZS5oCkBAIC00LDQgKzQsMyBAQAogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2MgogICovCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZGV2aWNlLmg+Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA3YTZhMzVkLi5lNTNkN2JlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0zMzQsMTQgKzMzNCwxNCBAQAogCiAjZGVmaW5lIEVMRl9IV0NBUCAgICAgICAoMCkKIAotLyogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCi0gICBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgotICAgaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uCisvKgorICogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCisgKiBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgorICogaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uCisgKi8KIAotICAgRm9yIHRoZSBtb21lbnQsIHdlIGhhdmUgb25seSBvcHRpbWl6YXRpb25zIGZvciB0aGUgSW50ZWwgZ2VuZXJhdGlvbnMsCi0gICBidXQgdGhhdCBjb3VsZCBjaGFuZ2UuLi4gKi8KLQotI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQorI2RlZmluZSBFTEZfUExBVEZPUk0gIF9fZWxmX3BsYXRmb3JtCitleHRlcm4gY29uc3QgY2hhciAqX19lbGZfcGxhdGZvcm07CiAKIC8qCiAgKiBTZWUgY29tbWVudHMgaW4gYXNtLWFscGhhL2VsZi5oLCB0aGlzIGlzIHRoZSBzYW1lIHRoaW5nCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnRyYWNlLmgKaW5kZXggMzk4NmNkOC4uY2UzNWM5YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtNCw3ICs0LDcgQEAKICAqIG1vcmUgZGV0YWlscy4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRFNMYWIsIExhbnpob3UgVW5pdmVyc2l0eSwgQ2hpbmEKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICovCiAKICNpZm5kZWYgX0FTTV9NSVBTX0ZUUkFDRV9ICmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaTgyNTkuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pODI1OS5oCmluZGV4IDg1NzJhMmQuLmM3ZTI3ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pODI1OS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pODI1OS5oCkBAIC0zNSw3ICszNSw3IEBACiAjZGVmaW5lIFNMQVZFX0lDVzRfREVGQVVMVAkweDAxCiAjZGVmaW5lIFBJQ19JQ1c0X0FFT0kJCTIKIAotZXh0ZXJuIHNwaW5sb2NrX3QgaTgyNTlBX2xvY2s7CitleHRlcm4gcmF3X3NwaW5sb2NrX3QgaTgyNTlBX2xvY2s7CiAKIGV4dGVybiBpbnQgaTgyNTlBX2lycV9wZW5kaW5nKHVuc2lnbmVkIGludCBpcnEpOwogZXh0ZXJuIHZvaWQgbWFrZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7CkBAIC01MSw3ICs1MSw3IEBACiB7CiAJaW50IGlycTsKIAotCXNwaW5fbG9jaygmaTgyNTlBX2xvY2spOworCXJhd19zcGluX2xvY2soJmk4MjU5QV9sb2NrKTsKIAogCS8qIFBlcmZvcm0gYW4gaW50ZXJydXB0IGFja25vd2xlZGdlIGN5Y2xlIG9uIGNvbnRyb2xsZXIgMS4gKi8KIAlvdXRiKDB4MEMsIFBJQ19NQVNURVJfQ01EKTsJCS8qIHByZXBhcmUgZm9yIHBvbGwgKi8KQEAgLTc4LDcgKzc4LDcgQEAKIAkJCWlycSA9IC0xOwogCX0KIAotCXNwaW5fdW5sb2NrKCZpODI1OUFfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZpODI1OUFfbG9jayk7CiAKIAlyZXR1cm4gbGlrZWx5KGlycSA+PSAwKSA/IGlycSArIEk4MjU5QV9JUlFfQkFTRSA6IGlycTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggNDM2ODc4ZS4uYzk4YmY1MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTQ0Nyw2ICs0NDcsMjQgQEAKICNkZWZpbmUgcmVhZGxfcmVsYXhlZAkJCXJlYWRsCiAjZGVmaW5lIHJlYWRxX3JlbGF4ZWQJCQlyZWFkcQogCisjZGVmaW5lIHJlYWRiX2JlKGFkZHIpCQkJCQkJCVwKKwlfX3Jhd19yZWFkYigoX19mb3JjZSB1bnNpZ25lZCAqKShhZGRyKSkKKyNkZWZpbmUgcmVhZHdfYmUoYWRkcikJCQkJCQkJXAorCWJlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KChfX2ZvcmNlIHVuc2lnbmVkICopKGFkZHIpKSkKKyNkZWZpbmUgcmVhZGxfYmUoYWRkcikJCQkJCQkJXAorCWJlMzJfdG9fY3B1KF9fcmF3X3JlYWRsKChfX2ZvcmNlIHVuc2lnbmVkICopKGFkZHIpKSkKKyNkZWZpbmUgcmVhZHFfYmUoYWRkcikJCQkJCQkJXAorCWJlNjRfdG9fY3B1KF9fcmF3X3JlYWRxKChfX2ZvcmNlIHVuc2lnbmVkICopKGFkZHIpKSkKKworI2RlZmluZSB3cml0ZWJfYmUodmFsLCBhZGRyKQkJCQkJCVwKKwlfX3Jhd193cml0ZWIoKHZhbCksIChfX2ZvcmNlIHVuc2lnbmVkICopKGFkZHIpKQorI2RlZmluZSB3cml0ZXdfYmUodmFsLCBhZGRyKQkJCQkJCVwKKwlfX3Jhd193cml0ZXcoY3B1X3RvX2JlMTYoKHZhbCkpLCAoX19mb3JjZSB1bnNpZ25lZCAqKShhZGRyKSkKKyNkZWZpbmUgd3JpdGVsX2JlKHZhbCwgYWRkcikJCQkJCQlcCisJX19yYXdfd3JpdGVsKGNwdV90b19iZTMyKCh2YWwpKSwgKF9fZm9yY2UgdW5zaWduZWQgKikoYWRkcikpCisjZGVmaW5lIHdyaXRlcV9iZSh2YWwsIGFkZHIpCQkJCQkJXAorCV9fcmF3X3dyaXRlcShjcHVfdG9fYmU2NCgodmFsKSksIChfX2ZvcmNlIHVuc2lnbmVkICopKGFkZHIpKQorCiAvKgogICogU29tZSBjb2RlIHRlc3RzIGZvciB0aGVzZSBzeW1ib2xzCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9hcjcuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9hcjcuaAppbmRleCAyMWNiYmM3Li5mMWNmMzg5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvYXI3LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oCkBAIC0xMDUsMjYgKzEwNSw5IEBACiAJcmV0dXJuIChyZWFkbCgodm9pZCAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgMHgxNCkpID4+IDE2KSAmIDB4ZmY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFyN19jcHVfZnJlcSh2b2lkKQotewotCXJldHVybiBhcjdfY3B1X2Nsb2NrOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcjdfYnVzX2ZyZXEodm9pZCkKLXsKLQlyZXR1cm4gYXI3X2J1c19jbG9jazsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXI3X3ZidXNfZnJlcSh2b2lkKQotewotCXJldHVybiBhcjdfYnVzX2Nsb2NrIC8gMjsKLX0KLSNkZWZpbmUgYXI3X2NwbWFjX2ZyZXEgYXI3X3ZidXNfZnJlcQotCi1zdGF0aWMgaW5saW5lIGludCBhcjdfZHNwX2ZyZXEodm9pZCkKLXsKLQlyZXR1cm4gYXI3X2RzcF9jbG9jazsKLX0KK3N0cnVjdCBjbGsgeworCXVuc2lnbmVkIGludAlyYXRlOworfTsKIAogc3RhdGljIGlubGluZSBpbnQgYXI3X2hhc19oaWdoX2NwbWFjKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvZ3Bpby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2dwaW8uaAppbmRleCBjYmU5YzRmLi43M2Y5YjE2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvZ3Bpby5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9ncGlvLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjIsODggKzIyLDE4IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtYXI3L2FyNy5oPgogCiAjZGVmaW5lIEFSN19HUElPX01BWCAzMgorI2RlZmluZSBOUl9CVUlMVElOX0dQSU8gQVI3X0dQSU9fTUFYCiAKLWV4dGVybiBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKTsKLWV4dGVybiB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKTsKKyNkZWZpbmUgZ3Bpb190b19pcnEoZ3BpbykJTlVMTAogCi0vKiBDb21tb24gR1BJTyBsYXllciAqLwotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKLXsKLQl2b2lkIF9faW9tZW0gKmdwaW9faW4gPQotCQkodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFSN19SRUdTX0dQSU8gKyBBUjdfR1BJT19JTlBVVCk7CisjZGVmaW5lIGdwaW9fZ2V0X3ZhbHVlIF9fZ3Bpb19nZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUgX19ncGlvX3NldF92YWx1ZQogCi0JcmV0dXJuIHJlYWRsKGdwaW9faW4pICYgKDEgPDwgZ3Bpbyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0Jdm9pZCBfX2lvbWVtICpncGlvX291dCA9Ci0JCSh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVI3X1JFR1NfR1BJTyArIEFSN19HUElPX09VVFBVVCk7Ci0JdW5zaWduZWQgdG1wOwotCi0JdG1wID0gcmVhZGwoZ3Bpb19vdXQpICYgfigxIDw8IGdwaW8pOwotCWlmICh2YWx1ZSkKLQkJdG1wIHw9IDEgPDwgZ3BpbzsKLQl3cml0ZWwodG1wLCBncGlvX291dCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCi17Ci0Jdm9pZCBfX2lvbWVtICpncGlvX2RpciA9Ci0JCSh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVI3X1JFR1NfR1BJTyArIEFSN19HUElPX0RJUik7Ci0KLQlpZiAoZ3BpbyA+PSBBUjdfR1BJT19NQVgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd3JpdGVsKHJlYWRsKGdwaW9fZGlyKSB8ICgxIDw8IGdwaW8pLCBncGlvX2Rpcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQl2b2lkIF9faW9tZW0gKmdwaW9fZGlyID0KLQkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgQVI3X0dQSU9fRElSKTsKLQotCWlmIChncGlvID49IEFSN19HUElPX01BWCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7Ci0Jd3JpdGVsKHJlYWRsKGdwaW9fZGlyKSAmIH4oMSA8PCBncGlvKSwgZ3Bpb19kaXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KKyNkZWZpbmUgZ3Bpb19jYW5zbGVlcCBfX2dwaW9fY2Fuc2xlZXAKIAogLyogQm9hcmQgc3BlY2lmaWMgR1BJTyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFyN19ncGlvX2VuYWJsZSh1bnNpZ25lZCBncGlvKQotewotCXZvaWQgX19pb21lbSAqZ3Bpb19lbiA9Ci0JCSh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVI3X1JFR1NfR1BJTyArIEFSN19HUElPX0VOQUJMRSk7Ci0KLQl3cml0ZWwocmVhZGwoZ3Bpb19lbikgfCAoMSA8PCBncGlvKSwgZ3Bpb19lbik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXI3X2dwaW9fZGlzYWJsZSh1bnNpZ25lZCBncGlvKQotewotCXZvaWQgX19pb21lbSAqZ3Bpb19lbiA9Ci0JCSh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVI3X1JFR1NfR1BJTyArIEFSN19HUElPX0VOQUJMRSk7Ci0KLQl3cml0ZWwocmVhZGwoZ3Bpb19lbikgJiB+KDEgPDwgZ3BpbyksIGdwaW9fZW4pOwotCi0JcmV0dXJuIDA7Ci19CitpbnQgYXI3X2dwaW9fZW5hYmxlKHVuc2lnbmVkIGdwaW8pOworaW50IGFyN19ncGlvX2Rpc2FibGUodW5zaWduZWQgZ3Bpbyk7CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaAppbmRleCA4NTRlOTVmLi5hZTA3NDIzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMDAwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oCkBAIC0xMzAsNiArMTMwLDU2IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgQUxDSEVNWV9DUFVfVU5LTk9XTgktMQorI2RlZmluZSBBTENIRU1ZX0NQVV9BVTEwMDAJMAorI2RlZmluZSBBTENIRU1ZX0NQVV9BVTE1MDAJMQorI2RlZmluZSBBTENIRU1ZX0NQVV9BVTExMDAJMgorI2RlZmluZSBBTENIRU1ZX0NQVV9BVTE1NTAJMworI2RlZmluZSBBTENIRU1ZX0NQVV9BVTEyMDAJNAorCitzdGF0aWMgaW5saW5lIGludCBhbGNoZW15X2dldF9jcHV0eXBlKHZvaWQpCit7CisJc3dpdGNoIChyZWFkX2MwX3ByaWQoKSAmIDB4ZmZmZjAwMDApIHsKKwljYXNlIDB4MDAwMzAwMDA6CisJCXJldHVybiBBTENIRU1ZX0NQVV9BVTEwMDA7CisJCWJyZWFrOworCWNhc2UgMHgwMTAzMDAwMDoKKwkJcmV0dXJuIEFMQ0hFTVlfQ1BVX0FVMTUwMDsKKwkJYnJlYWs7CisJY2FzZSAweDAyMDMwMDAwOgorCQlyZXR1cm4gQUxDSEVNWV9DUFVfQVUxMTAwOworCQlicmVhazsKKwljYXNlIDB4MDMwMzAwMDA6CisJCXJldHVybiBBTENIRU1ZX0NQVV9BVTE1NTA7CisJCWJyZWFrOworCWNhc2UgMHgwNDAzMDAwMDoKKwljYXNlIDB4MDUwMzAwMDA6CisJCXJldHVybiBBTENIRU1ZX0NQVV9BVTEyMDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiBBTENIRU1ZX0NQVV9VTktOT1dOOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWxjaGVteV91YXJ0X3B1dGNoYXIodTMyIHVhcnRfcGh5cywgdTggYykKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKHVhcnRfcGh5cyk7CisJaW50IHRpbWVvdXQsIGk7CisKKwkvKiBjaGVjayBMU1IgVFhfRU1QVFkgYml0ICovCisJdGltZW91dCA9IDB4ZmZmZmZmOworCWRvIHsKKwkJaWYgKF9fcmF3X3JlYWRsKGJhc2UgKyAweDFjKSAmIDB4MjApCisJCQlicmVhazsKKwkJLyogc2xvdyBkb3duICovCisJCWZvciAoaSA9IDEwMDAwOyBpOyBpLS0pCisJCQlhc20gdm9sYXRpbGUgKCJub3AiKTsKKwl9IHdoaWxlICgtLXRpbWVvdXQpOworCisJX19yYXdfd3JpdGVsKGMsIGJhc2UgKyAweDA0KTsJLyogdHggKi8KKwl3bWIoKTsKK30KKwogLyogYXJjaC9taXBzL2F1MTAwMC9jb21tb24vY2xvY2tzLmMgKi8KIGV4dGVybiB2b2lkIHNldF9hdTF4MDBfc3BlZWQodW5zaWduZWQgaW50IG5ld19mcmVxKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X2F1MXgwMF9zcGVlZCh2b2lkKTsKQEAgLTE0MywyMCArMTkzLDMzMiBAQAogdm9pZCBzYXZlX2F1MXh4eF9pbnRjdGwodm9pZCk7CiB2b2lkIHJlc3RvcmVfYXUxeHh4X2ludGN0bCh2b2lkKTsKIAotLyoKLSAqIEV2ZXJ5IGJvYXJkIGRlc2NyaWJlcyBpdHMgSVJRIG1hcHBpbmcgd2l0aCB0aGlzIHRhYmxlLgotICovCi1zdHJ1Y3QgYXUxeHh4X2lycW1hcCB7Ci0JaW50CWltX2lycTsKLQlpbnQJaW1fdHlwZTsKLQlpbnQJaW1fcmVxdWVzdDsKKworLyogU09DIEludGVycnVwdCBudW1iZXJzICovCisKKyNkZWZpbmUgQVUxMDAwX0lOVEMwX0lOVF9CQVNFCShNSVBTX0NQVV9JUlFfQkFTRSArIDgpCisjZGVmaW5lIEFVMTAwMF9JTlRDMF9JTlRfTEFTVAkoQVUxMDAwX0lOVEMwX0lOVF9CQVNFICsgMzEpCisjZGVmaW5lIEFVMTAwMF9JTlRDMV9JTlRfQkFTRQkoQVUxMDAwX0lOVEMwX0lOVF9MQVNUICsgMSkKKyNkZWZpbmUgQVUxMDAwX0lOVEMxX0lOVF9MQVNUCShBVTEwMDBfSU5UQzFfSU5UX0JBU0UgKyAzMSkKKyNkZWZpbmUgQVUxMDAwX01BWF9JTlRSIAlBVTEwMDBfSU5UQzFfSU5UX0xBU1QKKworZW51bSBzb2NfYXUxMDAwX2ludHMgeworCUFVMTAwMF9GSVJTVF9JTlQJPSBBVTEwMDBfSU5UQzBfSU5UX0JBU0UsCisJQVUxMDAwX1VBUlQwX0lOVAk9IEFVMTAwMF9GSVJTVF9JTlQsCisJQVUxMDAwX1VBUlQxX0lOVCwKKwlBVTEwMDBfVUFSVDJfSU5ULAorCUFVMTAwMF9VQVJUM19JTlQsCisJQVUxMDAwX1NTSTBfSU5ULAorCUFVMTAwMF9TU0kxX0lOVCwKKwlBVTEwMDBfRE1BX0lOVF9CQVNFLAorCisJQVUxMDAwX1RPWV9JTlQJCT0gQVUxMDAwX0ZJUlNUX0lOVCArIDE0LAorCUFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwKKwlBVTEwMDBfVE9ZX01BVENIMV9JTlQsCisJQVUxMDAwX1RPWV9NQVRDSDJfSU5ULAorCUFVMTAwMF9SVENfSU5ULAorCUFVMTAwMF9SVENfTUFUQ0gwX0lOVCwKKwlBVTEwMDBfUlRDX01BVENIMV9JTlQsCisJQVUxMDAwX1JUQ19NQVRDSDJfSU5ULAorCUFVMTAwMF9JUkRBX1RYX0lOVCwKKwlBVTEwMDBfSVJEQV9SWF9JTlQsCisJQVUxMDAwX1VTQl9ERVZfUkVRX0lOVCwKKwlBVTEwMDBfVVNCX0RFVl9TVVNfSU5ULAorCUFVMTAwMF9VU0JfSE9TVF9JTlQsCisJQVUxMDAwX0FDU1lOQ19JTlQsCisJQVUxMDAwX01BQzBfRE1BX0lOVCwKKwlBVTEwMDBfTUFDMV9ETUFfSU5ULAorCUFVMTAwMF9JMlNfVU9fSU5ULAorCUFVMTAwMF9BQzk3Q19JTlQsCisJQVUxMDAwX0dQSU8wX0lOVCwKKwlBVTEwMDBfR1BJTzFfSU5ULAorCUFVMTAwMF9HUElPMl9JTlQsCisJQVUxMDAwX0dQSU8zX0lOVCwKKwlBVTEwMDBfR1BJTzRfSU5ULAorCUFVMTAwMF9HUElPNV9JTlQsCisJQVUxMDAwX0dQSU82X0lOVCwKKwlBVTEwMDBfR1BJTzdfSU5ULAorCUFVMTAwMF9HUElPOF9JTlQsCisJQVUxMDAwX0dQSU85X0lOVCwKKwlBVTEwMDBfR1BJTzEwX0lOVCwKKwlBVTEwMDBfR1BJTzExX0lOVCwKKwlBVTEwMDBfR1BJTzEyX0lOVCwKKwlBVTEwMDBfR1BJTzEzX0lOVCwKKwlBVTEwMDBfR1BJTzE0X0lOVCwKKwlBVTEwMDBfR1BJTzE1X0lOVCwKKwlBVTEwMDBfR1BJTzE2X0lOVCwKKwlBVTEwMDBfR1BJTzE3X0lOVCwKKwlBVTEwMDBfR1BJTzE4X0lOVCwKKwlBVTEwMDBfR1BJTzE5X0lOVCwKKwlBVTEwMDBfR1BJTzIwX0lOVCwKKwlBVTEwMDBfR1BJTzIxX0lOVCwKKwlBVTEwMDBfR1BJTzIyX0lOVCwKKwlBVTEwMDBfR1BJTzIzX0lOVCwKKwlBVTEwMDBfR1BJTzI0X0lOVCwKKwlBVTEwMDBfR1BJTzI1X0lOVCwKKwlBVTEwMDBfR1BJTzI2X0lOVCwKKwlBVTEwMDBfR1BJTzI3X0lOVCwKKwlBVTEwMDBfR1BJTzI4X0lOVCwKKwlBVTEwMDBfR1BJTzI5X0lOVCwKKwlBVTEwMDBfR1BJTzMwX0lOVCwKKwlBVTEwMDBfR1BJTzMxX0lOVCwKIH07CiAKLS8qIGNvcmUgY2FsbHMgdGhpcyBmdW5jdGlvbiB0byBsZXQgYm9hcmRzIGluaXRpYWxpemUgb3RoZXIgSVJRIHNvdXJjZXMgKi8KLXZvaWQgYm9hcmRfaW5pdF9pcnEodm9pZCk7CitlbnVtIHNvY19hdTExMDBfaW50cyB7CisJQVUxMTAwX0ZJUlNUX0lOVAk9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRSwKKwlBVTExMDBfVUFSVDBfSU5UCT0gQVUxMTAwX0ZJUlNUX0lOVCwKKwlBVTExMDBfVUFSVDFfSU5ULAorCUFVMTEwMF9TRF9JTlQsCisJQVUxMTAwX1VBUlQzX0lOVCwKKwlBVTExMDBfU1NJMF9JTlQsCisJQVUxMTAwX1NTSTFfSU5ULAorCUFVMTEwMF9ETUFfSU5UX0JBU0UsCiAKLS8qIGJvYXJkcyBjYWxsIHRoaXMgdG8gcmVnaXN0ZXIgYWRkaXRpb25hbCAoR1BJTykgaW50ZXJydXB0cyAqLwotdm9pZCBhdTF4eHhfc2V0dXBfaXJxbWFwKHN0cnVjdCBhdTF4eHhfaXJxbWFwICptYXAsIGludCBjb3VudCk7CisJQVUxMTAwX1RPWV9JTlQJCT0gQVUxMTAwX0ZJUlNUX0lOVCArIDE0LAorCUFVMTEwMF9UT1lfTUFUQ0gwX0lOVCwKKwlBVTExMDBfVE9ZX01BVENIMV9JTlQsCisJQVUxMTAwX1RPWV9NQVRDSDJfSU5ULAorCUFVMTEwMF9SVENfSU5ULAorCUFVMTEwMF9SVENfTUFUQ0gwX0lOVCwKKwlBVTExMDBfUlRDX01BVENIMV9JTlQsCisJQVUxMTAwX1JUQ19NQVRDSDJfSU5ULAorCUFVMTEwMF9JUkRBX1RYX0lOVCwKKwlBVTExMDBfSVJEQV9SWF9JTlQsCisJQVUxMTAwX1VTQl9ERVZfUkVRX0lOVCwKKwlBVTExMDBfVVNCX0RFVl9TVVNfSU5ULAorCUFVMTEwMF9VU0JfSE9TVF9JTlQsCisJQVUxMTAwX0FDU1lOQ19JTlQsCisJQVUxMTAwX01BQzBfRE1BX0lOVCwKKwlBVTExMDBfR1BJTzIwOF8yMTVfSU5ULAorCUFVMTEwMF9MQ0RfSU5ULAorCUFVMTEwMF9BQzk3Q19JTlQsCisJQVUxMTAwX0dQSU8wX0lOVCwKKwlBVTExMDBfR1BJTzFfSU5ULAorCUFVMTEwMF9HUElPMl9JTlQsCisJQVUxMTAwX0dQSU8zX0lOVCwKKwlBVTExMDBfR1BJTzRfSU5ULAorCUFVMTEwMF9HUElPNV9JTlQsCisJQVUxMTAwX0dQSU82X0lOVCwKKwlBVTExMDBfR1BJTzdfSU5ULAorCUFVMTEwMF9HUElPOF9JTlQsCisJQVUxMTAwX0dQSU85X0lOVCwKKwlBVTExMDBfR1BJTzEwX0lOVCwKKwlBVTExMDBfR1BJTzExX0lOVCwKKwlBVTExMDBfR1BJTzEyX0lOVCwKKwlBVTExMDBfR1BJTzEzX0lOVCwKKwlBVTExMDBfR1BJTzE0X0lOVCwKKwlBVTExMDBfR1BJTzE1X0lOVCwKKwlBVTExMDBfR1BJTzE2X0lOVCwKKwlBVTExMDBfR1BJTzE3X0lOVCwKKwlBVTExMDBfR1BJTzE4X0lOVCwKKwlBVTExMDBfR1BJTzE5X0lOVCwKKwlBVTExMDBfR1BJTzIwX0lOVCwKKwlBVTExMDBfR1BJTzIxX0lOVCwKKwlBVTExMDBfR1BJTzIyX0lOVCwKKwlBVTExMDBfR1BJTzIzX0lOVCwKKwlBVTExMDBfR1BJTzI0X0lOVCwKKwlBVTExMDBfR1BJTzI1X0lOVCwKKwlBVTExMDBfR1BJTzI2X0lOVCwKKwlBVTExMDBfR1BJTzI3X0lOVCwKKwlBVTExMDBfR1BJTzI4X0lOVCwKKwlBVTExMDBfR1BJTzI5X0lOVCwKKwlBVTExMDBfR1BJTzMwX0lOVCwKKwlBVTExMDBfR1BJTzMxX0lOVCwKK307CisKK2VudW0gc29jX2F1MTUwMF9pbnRzIHsKKwlBVTE1MDBfRklSU1RfSU5UCT0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFLAorCUFVMTUwMF9VQVJUMF9JTlQJPSBBVTE1MDBfRklSU1RfSU5ULAorCUFVMTUwMF9QQ0lfSU5UQSwKKwlBVTE1MDBfUENJX0lOVEIsCisJQVUxNTAwX1VBUlQzX0lOVCwKKwlBVTE1MDBfUENJX0lOVEMsCisJQVUxNTAwX1BDSV9JTlRELAorCUFVMTUwMF9ETUFfSU5UX0JBU0UsCisKKwlBVTE1MDBfVE9ZX0lOVAkJPSBBVTE1MDBfRklSU1RfSU5UICsgMTQsCisJQVUxNTAwX1RPWV9NQVRDSDBfSU5ULAorCUFVMTUwMF9UT1lfTUFUQ0gxX0lOVCwKKwlBVTE1MDBfVE9ZX01BVENIMl9JTlQsCisJQVUxNTAwX1JUQ19JTlQsCisJQVUxNTAwX1JUQ19NQVRDSDBfSU5ULAorCUFVMTUwMF9SVENfTUFUQ0gxX0lOVCwKKwlBVTE1MDBfUlRDX01BVENIMl9JTlQsCisJQVUxNTAwX1BDSV9FUlJfSU5ULAorCUFVMTUwMF9SRVNFUlZFRF9JTlQsCisJQVUxNTAwX1VTQl9ERVZfUkVRX0lOVCwKKwlBVTE1MDBfVVNCX0RFVl9TVVNfSU5ULAorCUFVMTUwMF9VU0JfSE9TVF9JTlQsCisJQVUxNTAwX0FDU1lOQ19JTlQsCisJQVUxNTAwX01BQzBfRE1BX0lOVCwKKwlBVTE1MDBfTUFDMV9ETUFfSU5ULAorCUFVMTUwMF9BQzk3Q19JTlQJPSBBVTE1MDBfRklSU1RfSU5UICsgMzEsCisJQVUxNTAwX0dQSU8wX0lOVCwKKwlBVTE1MDBfR1BJTzFfSU5ULAorCUFVMTUwMF9HUElPMl9JTlQsCisJQVUxNTAwX0dQSU8zX0lOVCwKKwlBVTE1MDBfR1BJTzRfSU5ULAorCUFVMTUwMF9HUElPNV9JTlQsCisJQVUxNTAwX0dQSU82X0lOVCwKKwlBVTE1MDBfR1BJTzdfSU5ULAorCUFVMTUwMF9HUElPOF9JTlQsCisJQVUxNTAwX0dQSU85X0lOVCwKKwlBVTE1MDBfR1BJTzEwX0lOVCwKKwlBVTE1MDBfR1BJTzExX0lOVCwKKwlBVTE1MDBfR1BJTzEyX0lOVCwKKwlBVTE1MDBfR1BJTzEzX0lOVCwKKwlBVTE1MDBfR1BJTzE0X0lOVCwKKwlBVTE1MDBfR1BJTzE1X0lOVCwKKwlBVTE1MDBfR1BJTzIwMF9JTlQsCisJQVUxNTAwX0dQSU8yMDFfSU5ULAorCUFVMTUwMF9HUElPMjAyX0lOVCwKKwlBVTE1MDBfR1BJTzIwM19JTlQsCisJQVUxNTAwX0dQSU8yMF9JTlQsCisJQVUxNTAwX0dQSU8yMDRfSU5ULAorCUFVMTUwMF9HUElPMjA1X0lOVCwKKwlBVTE1MDBfR1BJTzIzX0lOVCwKKwlBVTE1MDBfR1BJTzI0X0lOVCwKKwlBVTE1MDBfR1BJTzI1X0lOVCwKKwlBVTE1MDBfR1BJTzI2X0lOVCwKKwlBVTE1MDBfR1BJTzI3X0lOVCwKKwlBVTE1MDBfR1BJTzI4X0lOVCwKKwlBVTE1MDBfR1BJTzIwNl9JTlQsCisJQVUxNTAwX0dQSU8yMDdfSU5ULAorCUFVMTUwMF9HUElPMjA4XzIxNV9JTlQsCit9OworCitlbnVtIHNvY19hdTE1NTBfaW50cyB7CisJQVUxNTUwX0ZJUlNUX0lOVAk9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRSwKKwlBVTE1NTBfVUFSVDBfSU5UCT0gQVUxNTUwX0ZJUlNUX0lOVCwKKwlBVTE1NTBfUENJX0lOVEEsCisJQVUxNTUwX1BDSV9JTlRCLAorCUFVMTU1MF9ERE1BX0lOVCwKKwlBVTE1NTBfQ1JZUFRPX0lOVCwKKwlBVTE1NTBfUENJX0lOVEMsCisJQVUxNTUwX1BDSV9JTlRELAorCUFVMTU1MF9QQ0lfUlNUX0lOVCwKKwlBVTE1NTBfVUFSVDFfSU5ULAorCUFVMTU1MF9VQVJUM19JTlQsCisJQVUxNTUwX1BTQzBfSU5ULAorCUFVMTU1MF9QU0MxX0lOVCwKKwlBVTE1NTBfUFNDMl9JTlQsCisJQVUxNTUwX1BTQzNfSU5ULAorCUFVMTU1MF9UT1lfSU5ULAorCUFVMTU1MF9UT1lfTUFUQ0gwX0lOVCwKKwlBVTE1NTBfVE9ZX01BVENIMV9JTlQsCisJQVUxNTUwX1RPWV9NQVRDSDJfSU5ULAorCUFVMTU1MF9SVENfSU5ULAorCUFVMTU1MF9SVENfTUFUQ0gwX0lOVCwKKwlBVTE1NTBfUlRDX01BVENIMV9JTlQsCisJQVUxNTUwX1JUQ19NQVRDSDJfSU5ULAorCisJQVUxNTUwX05BTkRfSU5UCQk9IEFVMTU1MF9GSVJTVF9JTlQgKyAyMywKKwlBVTE1NTBfVVNCX0RFVl9SRVFfSU5ULAorCUFVMTU1MF9VU0JfREVWX1NVU19JTlQsCisJQVUxNTUwX1VTQl9IT1NUX0lOVCwKKwlBVTE1NTBfTUFDMF9ETUFfSU5ULAorCUFVMTU1MF9NQUMxX0RNQV9JTlQsCisJQVUxNTUwX0dQSU8wX0lOVAk9IEFVMTU1MF9GSVJTVF9JTlQgKyAzMiwKKwlBVTE1NTBfR1BJTzFfSU5ULAorCUFVMTU1MF9HUElPMl9JTlQsCisJQVUxNTUwX0dQSU8zX0lOVCwKKwlBVTE1NTBfR1BJTzRfSU5ULAorCUFVMTU1MF9HUElPNV9JTlQsCisJQVUxNTUwX0dQSU82X0lOVCwKKwlBVTE1NTBfR1BJTzdfSU5ULAorCUFVMTU1MF9HUElPOF9JTlQsCisJQVUxNTUwX0dQSU85X0lOVCwKKwlBVTE1NTBfR1BJTzEwX0lOVCwKKwlBVTE1NTBfR1BJTzExX0lOVCwKKwlBVTE1NTBfR1BJTzEyX0lOVCwKKwlBVTE1NTBfR1BJTzEzX0lOVCwKKwlBVTE1NTBfR1BJTzE0X0lOVCwKKwlBVTE1NTBfR1BJTzE1X0lOVCwKKwlBVTE1NTBfR1BJTzIwMF9JTlQsCisJQVUxNTUwX0dQSU8yMDFfMjA1X0lOVCwJLyogTG9naWNhbCBvciBvZiBHUElPMjAxOjIwNSAqLworCUFVMTU1MF9HUElPMTZfSU5ULAorCUFVMTU1MF9HUElPMTdfSU5ULAorCUFVMTU1MF9HUElPMjBfSU5ULAorCUFVMTU1MF9HUElPMjFfSU5ULAorCUFVMTU1MF9HUElPMjJfSU5ULAorCUFVMTU1MF9HUElPMjNfSU5ULAorCUFVMTU1MF9HUElPMjRfSU5ULAorCUFVMTU1MF9HUElPMjVfSU5ULAorCUFVMTU1MF9HUElPMjZfSU5ULAorCUFVMTU1MF9HUElPMjdfSU5ULAorCUFVMTU1MF9HUElPMjhfSU5ULAorCUFVMTU1MF9HUElPMjA2X0lOVCwKKwlBVTE1NTBfR1BJTzIwN19JTlQsCisJQVUxNTUwX0dQSU8yMDhfMjE1X0lOVCwJLyogTG9naWNhbCBvciBvZiBHUElPMjA4OjIxNSAqLworfTsKKworZW51bSBzb2NfYXUxMjAwX2ludHMgeworCUFVMTIwMF9GSVJTVF9JTlQJPSBBVTEwMDBfSU5UQzBfSU5UX0JBU0UsCisJQVUxMjAwX1VBUlQwX0lOVAk9IEFVMTIwMF9GSVJTVF9JTlQsCisJQVUxMjAwX1NXVF9JTlQsCisJQVUxMjAwX1NEX0lOVCwKKwlBVTEyMDBfRERNQV9JTlQsCisJQVUxMjAwX01BRV9CRV9JTlQsCisJQVUxMjAwX0dQSU8yMDBfSU5ULAorCUFVMTIwMF9HUElPMjAxX0lOVCwKKwlBVTEyMDBfR1BJTzIwMl9JTlQsCisJQVUxMjAwX1VBUlQxX0lOVCwKKwlBVTEyMDBfTUFFX0ZFX0lOVCwKKwlBVTEyMDBfUFNDMF9JTlQsCisJQVUxMjAwX1BTQzFfSU5ULAorCUFVMTIwMF9BRVNfSU5ULAorCUFVMTIwMF9DQU1FUkFfSU5ULAorCUFVMTIwMF9UT1lfSU5ULAorCUFVMTIwMF9UT1lfTUFUQ0gwX0lOVCwKKwlBVTEyMDBfVE9ZX01BVENIMV9JTlQsCisJQVUxMjAwX1RPWV9NQVRDSDJfSU5ULAorCUFVMTIwMF9SVENfSU5ULAorCUFVMTIwMF9SVENfTUFUQ0gwX0lOVCwKKwlBVTEyMDBfUlRDX01BVENIMV9JTlQsCisJQVUxMjAwX1JUQ19NQVRDSDJfSU5ULAorCUFVMTIwMF9HUElPMjAzX0lOVCwKKwlBVTEyMDBfTkFORF9JTlQsCisJQVUxMjAwX0dQSU8yMDRfSU5ULAorCUFVMTIwMF9HUElPMjA1X0lOVCwKKwlBVTEyMDBfR1BJTzIwNl9JTlQsCisJQVUxMjAwX0dQSU8yMDdfSU5ULAorCUFVMTIwMF9HUElPMjA4XzIxNV9JTlQsCS8qIExvZ2ljYWwgT1Igb2YgMjA4OjIxNSAqLworCUFVMTIwMF9VU0JfSU5ULAorCUFVMTIwMF9MQ0RfSU5ULAorCUFVMTIwMF9NQUVfQk9USF9JTlQsCisJQVUxMjAwX0dQSU8wX0lOVCwKKwlBVTEyMDBfR1BJTzFfSU5ULAorCUFVMTIwMF9HUElPMl9JTlQsCisJQVUxMjAwX0dQSU8zX0lOVCwKKwlBVTEyMDBfR1BJTzRfSU5ULAorCUFVMTIwMF9HUElPNV9JTlQsCisJQVUxMjAwX0dQSU82X0lOVCwKKwlBVTEyMDBfR1BJTzdfSU5ULAorCUFVMTIwMF9HUElPOF9JTlQsCisJQVUxMjAwX0dQSU85X0lOVCwKKwlBVTEyMDBfR1BJTzEwX0lOVCwKKwlBVTEyMDBfR1BJTzExX0lOVCwKKwlBVTEyMDBfR1BJTzEyX0lOVCwKKwlBVTEyMDBfR1BJTzEzX0lOVCwKKwlBVTEyMDBfR1BJTzE0X0lOVCwKKwlBVTEyMDBfR1BJTzE1X0lOVCwKKwlBVTEyMDBfR1BJTzE2X0lOVCwKKwlBVTEyMDBfR1BJTzE3X0lOVCwKKwlBVTEyMDBfR1BJTzE4X0lOVCwKKwlBVTEyMDBfR1BJTzE5X0lOVCwKKwlBVTEyMDBfR1BJTzIwX0lOVCwKKwlBVTEyMDBfR1BJTzIxX0lOVCwKKwlBVTEyMDBfR1BJTzIyX0lOVCwKKwlBVTEyMDBfR1BJTzIzX0lOVCwKKwlBVTEyMDBfR1BJTzI0X0lOVCwKKwlBVTEyMDBfR1BJTzI1X0lOVCwKKwlBVTEyMDBfR1BJTzI2X0lOVCwKKwlBVTEyMDBfR1BJTzI3X0lOVCwKKwlBVTEyMDBfR1BJTzI4X0lOVCwKKwlBVTEyMDBfR1BJTzI5X0lOVCwKKwlBVTEyMDBfR1BJTzMwX0lOVCwKKwlBVTEyMDBfR1BJTzMxX0lOVCwKK307CiAKICNlbmRpZiAvKiAhZGVmaW5lZCAoX0xBTkdVQUdFX0FTU0VNQkxZKSAqLwogCkBAIC01NDksNzggKzkxMSwxNiBAQAogCiAjZGVmaW5lIElDMV9URVNUQklUCQkweEIxODAwMDgwCiAKLS8qIEludGVycnVwdCBOdW1iZXJzICovCisKIC8qIEF1MTAwMCAqLwogI2lmZGVmIENPTkZJR19TT0NfQVUxMDAwCi1lbnVtIHNvY19hdTEwMDBfaW50cyB7Ci0JQVUxMDAwX0ZJUlNUX0lOVAk9IE1JUFNfQ1BVX0lSUV9CQVNFICsgOCwKLQlBVTEwMDBfVUFSVDBfSU5UCT0gQVUxMDAwX0ZJUlNUX0lOVCwKLQlBVTEwMDBfVUFSVDFfSU5ULAkJCQkvKiBhdTEwMDAgKi8KLQlBVTEwMDBfVUFSVDJfSU5ULAkJCQkvKiBhdTEwMDAgKi8KLQlBVTEwMDBfVUFSVDNfSU5ULAotCUFVMTAwMF9TU0kwX0lOVCwJCQkJLyogYXUxMDAwICovCi0JQVUxMDAwX1NTSTFfSU5ULAkJCQkvKiBhdTEwMDAgKi8KLQlBVTEwMDBfRE1BX0lOVF9CQVNFLAotCi0JQVUxMDAwX1RPWV9JTlQJCT0gQVUxMDAwX0ZJUlNUX0lOVCArIDE0LAotCUFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMV9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDJfSU5ULAotCUFVMTAwMF9SVENfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gwX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMV9JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDJfSU5ULAotCUFVMTAwMF9JUkRBX1RYX0lOVCwJCQkJLyogYXUxMDAwICovCi0JQVUxMDAwX0lSREFfUlhfSU5ULAkJCQkvKiBhdTEwMDAgKi8KLQlBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULAotCUFVMTAwMF9VU0JfREVWX1NVU19JTlQsCi0JQVUxMDAwX1VTQl9IT1NUX0lOVCwKLQlBVTEwMDBfQUNTWU5DX0lOVCwKLQlBVTEwMDBfTUFDMF9ETUFfSU5ULAotCUFVMTAwMF9NQUMxX0RNQV9JTlQsCi0JQVUxMDAwX0kyU19VT19JTlQsCQkJCS8qIGF1MTAwMCAqLwotCUFVMTAwMF9BQzk3Q19JTlQsCi0JQVUxMDAwX0dQSU9fMCwKLQlBVTEwMDBfR1BJT18xLAotCUFVMTAwMF9HUElPXzIsCi0JQVUxMDAwX0dQSU9fMywKLQlBVTEwMDBfR1BJT180LAotCUFVMTAwMF9HUElPXzUsCi0JQVUxMDAwX0dQSU9fNiwKLQlBVTEwMDBfR1BJT183LAotCUFVMTAwMF9HUElPXzgsCi0JQVUxMDAwX0dQSU9fOSwKLQlBVTEwMDBfR1BJT18xMCwKLQlBVTEwMDBfR1BJT18xMSwKLQlBVTEwMDBfR1BJT18xMiwKLQlBVTEwMDBfR1BJT18xMywKLQlBVTEwMDBfR1BJT18xNCwKLQlBVTEwMDBfR1BJT18xNSwKLQlBVTEwMDBfR1BJT18xNiwKLQlBVTEwMDBfR1BJT18xNywKLQlBVTEwMDBfR1BJT18xOCwKLQlBVTEwMDBfR1BJT18xOSwKLQlBVTEwMDBfR1BJT18yMCwKLQlBVTEwMDBfR1BJT18yMSwKLQlBVTEwMDBfR1BJT18yMiwKLQlBVTEwMDBfR1BJT18yMywKLQlBVTEwMDBfR1BJT18yNCwKLQlBVTEwMDBfR1BJT18yNSwKLQlBVTEwMDBfR1BJT18yNiwKLQlBVTEwMDBfR1BJT18yNywKLQlBVTEwMDBfR1BJT18yOCwKLQlBVTEwMDBfR1BJT18yOSwKLQlBVTEwMDBfR1BJT18zMCwKLQlBVTEwMDBfR1BJT18zMSwKLX07CiAKICNkZWZpbmUgVUFSVDBfQUREUgkJMHhCMTEwMDAwMAotI2RlZmluZSBVQVJUMV9BRERSCQkweEIxMjAwMDAwCi0jZGVmaW5lIFVBUlQyX0FERFIJCTB4QjEzMDAwMDAKICNkZWZpbmUgVUFSVDNfQUREUgkJMHhCMTQwMDAwMAogCiAjZGVmaW5lIFVTQl9PSENJX0JBU0UJCTB4MTAxMDAwMDAJLyogcGh5cyBhZGRyIGZvciBpb3JlbWFwICovCiAjZGVmaW5lIFVTQl9IT1NUX0NPTkZJRyAJMHhCMDE3RkZGQworI2RlZmluZSBGT1JfUExBVEZPUk1fQ19VU0JfSE9TVF9JTlQgQVUxMDAwX1VTQl9IT1NUX0lOVAogCiAjZGVmaW5lIEFVMTAwMF9FVEgwX0JBU0UJMHhCMDUwMDAwMAogI2RlZmluZSBBVTEwMDBfRVRIMV9CQVNFCTB4QjA1MTAwMDAKQEAgLTYzMSw3OCArOTMxLDEzIEBACiAKIC8qIEF1MTUwMCAqLwogI2lmZGVmIENPTkZJR19TT0NfQVUxNTAwCi1lbnVtIHNvY19hdTE1MDBfaW50cyB7Ci0JQVUxNTAwX0ZJUlNUX0lOVAk9IE1JUFNfQ1BVX0lSUV9CQVNFICsgOCwKLQlBVTE1MDBfVUFSVDBfSU5UCT0gQVUxNTAwX0ZJUlNUX0lOVCwKLQlBVTEwMDBfUENJX0lOVEEsCQkJCS8qIGF1MTUwMCAqLwotCUFVMTAwMF9QQ0lfSU5UQiwJCQkJLyogYXUxNTAwICovCi0JQVUxNTAwX1VBUlQzX0lOVCwKLQlBVTEwMDBfUENJX0lOVEMsCQkJCS8qIGF1MTUwMCAqLwotCUFVMTAwMF9QQ0lfSU5URCwJCQkJLyogYXUxNTAwICovCi0JQVUxMDAwX0RNQV9JTlRfQkFTRSwKLQotCUFVMTAwMF9UT1lfSU5UCQk9IEFVMTUwMF9GSVJTVF9JTlQgKyAxNCwKLQlBVTEwMDBfVE9ZX01BVENIMF9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDFfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gyX0lOVCwKLQlBVTEwMDBfUlRDX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMF9JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDFfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gyX0lOVCwKLQlBVTE1MDBfUENJX0VSUl9JTlQsCi0JQVUxNTAwX1JFU0VSVkVEX0lOVCwKLQlBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULAotCUFVMTAwMF9VU0JfREVWX1NVU19JTlQsCi0JQVUxMDAwX1VTQl9IT1NUX0lOVCwKLQlBVTEwMDBfQUNTWU5DX0lOVCwKLQlBVTE1MDBfTUFDMF9ETUFfSU5ULAotCUFVMTUwMF9NQUMxX0RNQV9JTlQsCi0JQVUxMDAwX0FDOTdDX0lOVAk9IEFVMTUwMF9GSVJTVF9JTlQgKyAzMSwKLQlBVTEwMDBfR1BJT18wLAotCUFVMTAwMF9HUElPXzEsCi0JQVUxMDAwX0dQSU9fMiwKLQlBVTEwMDBfR1BJT18zLAotCUFVMTAwMF9HUElPXzQsCi0JQVUxMDAwX0dQSU9fNSwKLQlBVTEwMDBfR1BJT182LAotCUFVMTAwMF9HUElPXzcsCi0JQVUxMDAwX0dQSU9fOCwKLQlBVTEwMDBfR1BJT185LAotCUFVMTAwMF9HUElPXzEwLAotCUFVMTAwMF9HUElPXzExLAotCUFVMTAwMF9HUElPXzEyLAotCUFVMTAwMF9HUElPXzEzLAotCUFVMTAwMF9HUElPXzE0LAotCUFVMTAwMF9HUElPXzE1LAotCUFVMTUwMF9HUElPXzIwMCwKLQlBVTE1MDBfR1BJT18yMDEsCi0JQVUxNTAwX0dQSU9fMjAyLAotCUFVMTUwMF9HUElPXzIwMywKLQlBVTE1MDBfR1BJT18yMCwKLQlBVTE1MDBfR1BJT18yMDQsCi0JQVUxNTAwX0dQSU9fMjA1LAotCUFVMTUwMF9HUElPXzIzLAotCUFVMTUwMF9HUElPXzI0LAotCUFVMTUwMF9HUElPXzI1LAotCUFVMTUwMF9HUElPXzI2LAotCUFVMTUwMF9HUElPXzI3LAotCUFVMTUwMF9HUElPXzI4LAotCUFVMTUwMF9HUElPXzIwNiwKLQlBVTE1MDBfR1BJT18yMDcsCi0JQVUxNTAwX0dQSU9fMjA4XzIxNSwKLX07Ci0KLS8qIHNob3J0Y3V0cyAqLwotI2RlZmluZSBJTlRBIEFVMTAwMF9QQ0lfSU5UQQotI2RlZmluZSBJTlRCIEFVMTAwMF9QQ0lfSU5UQgotI2RlZmluZSBJTlRDIEFVMTAwMF9QQ0lfSU5UQwotI2RlZmluZSBJTlREIEFVMTAwMF9QQ0lfSU5URAogCiAjZGVmaW5lIFVBUlQwX0FERFIJCTB4QjExMDAwMDAKICNkZWZpbmUgVUFSVDNfQUREUgkJMHhCMTQwMDAwMAogCiAjZGVmaW5lIFVTQl9PSENJX0JBU0UJCTB4MTAxMDAwMDAJLyogcGh5cyBhZGRyIGZvciBpb3JlbWFwICovCiAjZGVmaW5lIFVTQl9IT1NUX0NPTkZJRyAJMHhCMDE3ZmZmYworI2RlZmluZSBGT1JfUExBVEZPUk1fQ19VU0JfSE9TVF9JTlQgQVUxNTAwX1VTQl9IT1NUX0lOVAogCiAjZGVmaW5lIEFVMTUwMF9FVEgwX0JBU0UJMHhCMTUwMDAwMAogI2RlZmluZSBBVTE1MDBfRVRIMV9CQVNFCTB4QjE1MTAwMDAKQEAgLTcxMyw3NCArOTQ4LDEzIEBACiAKIC8qIEF1MTEwMCAqLwogI2lmZGVmIENPTkZJR19TT0NfQVUxMTAwCi1lbnVtIHNvY19hdTExMDBfaW50cyB7Ci0JQVUxMTAwX0ZJUlNUX0lOVAk9IE1JUFNfQ1BVX0lSUV9CQVNFICsgOCwKLQlBVTExMDBfVUFSVDBfSU5UCT0gQVUxMTAwX0ZJUlNUX0lOVCwKLQlBVTExMDBfVUFSVDFfSU5ULAotCUFVMTEwMF9TRF9JTlQsCi0JQVUxMTAwX1VBUlQzX0lOVCwKLQlBVTEwMDBfU1NJMF9JTlQsCi0JQVUxMDAwX1NTSTFfSU5ULAotCUFVMTAwMF9ETUFfSU5UX0JBU0UsCi0KLQlBVTEwMDBfVE9ZX0lOVAkJPSBBVTExMDBfRklSU1RfSU5UICsgMTQsCi0JQVUxMDAwX1RPWV9NQVRDSDBfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMl9JTlQsCi0JQVUxMDAwX1JUQ19JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDBfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMl9JTlQsCi0JQVUxMDAwX0lSREFfVFhfSU5ULAotCUFVMTAwMF9JUkRBX1JYX0lOVCwKLQlBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULAotCUFVMTAwMF9VU0JfREVWX1NVU19JTlQsCi0JQVUxMDAwX1VTQl9IT1NUX0lOVCwKLQlBVTEwMDBfQUNTWU5DX0lOVCwKLQlBVTExMDBfTUFDMF9ETUFfSU5ULAotCUFVMTEwMF9HUElPXzIwOF8yMTUsCi0JQVUxMTAwX0xDRF9JTlQsCi0JQVUxMDAwX0FDOTdDX0lOVCwKLQlBVTEwMDBfR1BJT18wLAotCUFVMTAwMF9HUElPXzEsCi0JQVUxMDAwX0dQSU9fMiwKLQlBVTEwMDBfR1BJT18zLAotCUFVMTAwMF9HUElPXzQsCi0JQVUxMDAwX0dQSU9fNSwKLQlBVTEwMDBfR1BJT182LAotCUFVMTAwMF9HUElPXzcsCi0JQVUxMDAwX0dQSU9fOCwKLQlBVTEwMDBfR1BJT185LAotCUFVMTAwMF9HUElPXzEwLAotCUFVMTAwMF9HUElPXzExLAotCUFVMTAwMF9HUElPXzEyLAotCUFVMTAwMF9HUElPXzEzLAotCUFVMTAwMF9HUElPXzE0LAotCUFVMTAwMF9HUElPXzE1LAotCUFVMTAwMF9HUElPXzE2LAotCUFVMTAwMF9HUElPXzE3LAotCUFVMTAwMF9HUElPXzE4LAotCUFVMTAwMF9HUElPXzE5LAotCUFVMTAwMF9HUElPXzIwLAotCUFVMTAwMF9HUElPXzIxLAotCUFVMTAwMF9HUElPXzIyLAotCUFVMTAwMF9HUElPXzIzLAotCUFVMTAwMF9HUElPXzI0LAotCUFVMTAwMF9HUElPXzI1LAotCUFVMTAwMF9HUElPXzI2LAotCUFVMTAwMF9HUElPXzI3LAotCUFVMTAwMF9HUElPXzI4LAotCUFVMTAwMF9HUElPXzI5LAotCUFVMTAwMF9HUElPXzMwLAotCUFVMTAwMF9HUElPXzMxLAotfTsKIAogI2RlZmluZSBVQVJUMF9BRERSCQkweEIxMTAwMDAwCi0jZGVmaW5lIFVBUlQxX0FERFIJCTB4QjEyMDAwMDAKICNkZWZpbmUgVUFSVDNfQUREUgkJMHhCMTQwMDAwMAogCiAjZGVmaW5lIFVTQl9PSENJX0JBU0UJCTB4MTAxMDAwMDAJLyogcGh5cyBhZGRyIGZvciBpb3JlbWFwICovCiAjZGVmaW5lIFVTQl9IT1NUX0NPTkZJRyAJMHhCMDE3RkZGQworI2RlZmluZSBGT1JfUExBVEZPUk1fQ19VU0JfSE9TVF9JTlQgQVUxMTAwX1VTQl9IT1NUX0lOVAogCiAjZGVmaW5lIEFVMTEwMF9FVEgwX0JBU0UJMHhCMDUwMDAwMAogI2RlZmluZSBBVTExMDBfTUFDMF9FTkFCTEUJMHhCMDUyMDAwMApAQCAtNzg4LDg3ICs5NjIsMTIgQEAKICNlbmRpZiAvKiBDT05GSUdfU09DX0FVMTEwMCAqLwogCiAjaWZkZWYgQ09ORklHX1NPQ19BVTE1NTAKLWVudW0gc29jX2F1MTU1MF9pbnRzIHsKLQlBVTE1NTBfRklSU1RfSU5UCT0gTUlQU19DUFVfSVJRX0JBU0UgKyA4LAotCUFVMTU1MF9VQVJUMF9JTlQJPSBBVTE1NTBfRklSU1RfSU5ULAotCUFVMTU1MF9QQ0lfSU5UQSwKLQlBVTE1NTBfUENJX0lOVEIsCi0JQVUxNTUwX0RETUFfSU5ULAotCUFVMTU1MF9DUllQVE9fSU5ULAotCUFVMTU1MF9QQ0lfSU5UQywKLQlBVTE1NTBfUENJX0lOVEQsCi0JQVUxNTUwX1BDSV9SU1RfSU5ULAotCUFVMTU1MF9VQVJUMV9JTlQsCi0JQVUxNTUwX1VBUlQzX0lOVCwKLQlBVTE1NTBfUFNDMF9JTlQsCi0JQVUxNTUwX1BTQzFfSU5ULAotCUFVMTU1MF9QU0MyX0lOVCwKLQlBVTE1NTBfUFNDM19JTlQsCi0JQVUxMDAwX1RPWV9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDBfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMl9JTlQsCi0JQVUxMDAwX1JUQ19JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDBfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMl9JTlQsCi0KLQlBVTE1NTBfTkFORF9JTlQJCQk9IEFVMTU1MF9GSVJTVF9JTlQgKyAyMywKLQlBVTE1NTBfVVNCX0RFVl9SRVFfSU5ULAotCUFVMTAwMF9VU0JfREVWX1JFUV9JTlQJCT0gQVUxNTUwX1VTQl9ERVZfUkVRX0lOVCwKLQlBVTE1NTBfVVNCX0RFVl9TVVNfSU5ULAotCUFVMTAwMF9VU0JfREVWX1NVU19JTlQJCT0gQVUxNTUwX1VTQl9ERVZfU1VTX0lOVCwKLQlBVTE1NTBfVVNCX0hPU1RfSU5ULAotCUFVMTAwMF9VU0JfSE9TVF9JTlQJCT0gQVUxNTUwX1VTQl9IT1NUX0lOVCwKLQlBVTE1NTBfTUFDMF9ETUFfSU5ULAotCUFVMTU1MF9NQUMxX0RNQV9JTlQsCi0JQVUxMDAwX0dQSU9fMAkJCT0gQVUxNTUwX0ZJUlNUX0lOVCArIDMyLAotCUFVMTAwMF9HUElPXzEsCi0JQVUxMDAwX0dQSU9fMiwKLQlBVTEwMDBfR1BJT18zLAotCUFVMTAwMF9HUElPXzQsCi0JQVUxMDAwX0dQSU9fNSwKLQlBVTEwMDBfR1BJT182LAotCUFVMTAwMF9HUElPXzcsCi0JQVUxMDAwX0dQSU9fOCwKLQlBVTEwMDBfR1BJT185LAotCUFVMTAwMF9HUElPXzEwLAotCUFVMTAwMF9HUElPXzExLAotCUFVMTAwMF9HUElPXzEyLAotCUFVMTAwMF9HUElPXzEzLAotCUFVMTAwMF9HUElPXzE0LAotCUFVMTAwMF9HUElPXzE1LAotCUFVMTU1MF9HUElPXzIwMCwKLQlBVTE1MDBfR1BJT18yMDFfMjA1LAkJCS8qIExvZ2ljYWwgb3Igb2YgR1BJTzIwMToyMDUgKi8KLQlBVTE1MDBfR1BJT18xNiwKLQlBVTE1MDBfR1BJT18xNywKLQlBVTE1MDBfR1BJT18yMCwKLQlBVTE1MDBfR1BJT18yMSwKLQlBVTE1MDBfR1BJT18yMiwKLQlBVTE1MDBfR1BJT18yMywKLQlBVTE1MDBfR1BJT18yNCwKLQlBVTE1MDBfR1BJT18yNSwKLQlBVTE1MDBfR1BJT18yNiwKLQlBVTE1MDBfR1BJT18yNywKLQlBVTE1MDBfR1BJT18yOCwKLQlBVTE1MDBfR1BJT18yMDYsCi0JQVUxNTAwX0dQSU9fMjA3LAotCUFVMTUwMF9HUElPXzIwOF8yMTgsCQkJLyogTG9naWNhbCBvciBvZiBHUElPMjA4OjIxOCAqLwotfTsKLQotLyogc2hvcnRjdXRzICovCi0jZGVmaW5lIElOVEEgQVUxNTUwX1BDSV9JTlRBCi0jZGVmaW5lIElOVEIgQVUxNTUwX1BDSV9JTlRCCi0jZGVmaW5lIElOVEMgQVUxNTUwX1BDSV9JTlRDCi0jZGVmaW5lIElOVEQgQVUxNTUwX1BDSV9JTlRECi0KICNkZWZpbmUgVUFSVDBfQUREUgkJMHhCMTEwMDAwMAotI2RlZmluZSBVQVJUMV9BRERSCQkweEIxMjAwMDAwCi0jZGVmaW5lIFVBUlQzX0FERFIJCTB4QjE0MDAwMDAKIAogI2RlZmluZSBVU0JfT0hDSV9CQVNFCQkweDE0MDIwMDAwCS8qIHBoeXMgYWRkciBmb3IgaW9yZW1hcCAqLwogI2RlZmluZSBVU0JfT0hDSV9MRU4JCTB4MDAwNjAwMDAKICNkZWZpbmUgVVNCX0hPU1RfQ09ORklHIAkweEI0MDI3ZmZjCisjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTE1NTBfVVNCX0hPU1RfSU5UCiAKICNkZWZpbmUgQVUxNTUwX0VUSDBfQkFTRQkweEIwNTAwMDAwCiAjZGVmaW5lIEFVMTU1MF9FVEgxX0JBU0UJMHhCMDUxMDAwMApAQCAtODc3LDc4ICs5NzYsMTAgQEAKICNkZWZpbmUgTlVNX0VUSF9JTlRFUkZBQ0VTIDIKICNlbmRpZiAvKiBDT05GSUdfU09DX0FVMTU1MCAqLwogCisKICNpZmRlZiBDT05GSUdfU09DX0FVMTIwMAotZW51bSBzb2NfYXUxMjAwX2ludHMgewotCUFVMTIwMF9GSVJTVF9JTlQJPSBNSVBTX0NQVV9JUlFfQkFTRSArIDgsCi0JQVUxMjAwX1VBUlQwX0lOVAk9IEFVMTIwMF9GSVJTVF9JTlQsCi0JQVUxMjAwX1NXVF9JTlQsCi0JQVUxMjAwX1NEX0lOVCwKLQlBVTEyMDBfRERNQV9JTlQsCi0JQVUxMjAwX01BRV9CRV9JTlQsCi0JQVUxMjAwX0dQSU9fMjAwLAotCUFVMTIwMF9HUElPXzIwMSwKLQlBVTEyMDBfR1BJT18yMDIsCi0JQVUxMjAwX1VBUlQxX0lOVCwKLQlBVTEyMDBfTUFFX0ZFX0lOVCwKLQlBVTEyMDBfUFNDMF9JTlQsCi0JQVUxMjAwX1BTQzFfSU5ULAotCUFVMTIwMF9BRVNfSU5ULAotCUFVMTIwMF9DQU1FUkFfSU5ULAotCUFVMTAwMF9UT1lfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMV9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDJfSU5ULAotCUFVMTAwMF9SVENfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gwX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMV9JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDJfSU5ULAotCUFVMTIwMF9HUElPXzIwMywKLQlBVTEyMDBfTkFORF9JTlQsCi0JQVUxMjAwX0dQSU9fMjA0LAotCUFVMTIwMF9HUElPXzIwNSwKLQlBVTEyMDBfR1BJT18yMDYsCi0JQVUxMjAwX0dQSU9fMjA3LAotCUFVMTIwMF9HUElPXzIwOF8yMTUsCQkJLyogTG9naWNhbCBPUiBvZiAyMDg6MjE1ICovCi0JQVUxMjAwX1VTQl9JTlQsCi0JQVUxMDAwX1VTQl9IT1NUX0lOVAk9IEFVMTIwMF9VU0JfSU5ULAotCUFVMTIwMF9MQ0RfSU5ULAotCUFVMTIwMF9NQUVfQk9USF9JTlQsCi0JQVUxMDAwX0dQSU9fMCwKLQlBVTEwMDBfR1BJT18xLAotCUFVMTAwMF9HUElPXzIsCi0JQVUxMDAwX0dQSU9fMywKLQlBVTEwMDBfR1BJT180LAotCUFVMTAwMF9HUElPXzUsCi0JQVUxMDAwX0dQSU9fNiwKLQlBVTEwMDBfR1BJT183LAotCUFVMTAwMF9HUElPXzgsCi0JQVUxMDAwX0dQSU9fOSwKLQlBVTEwMDBfR1BJT18xMCwKLQlBVTEwMDBfR1BJT18xMSwKLQlBVTEwMDBfR1BJT18xMiwKLQlBVTEwMDBfR1BJT18xMywKLQlBVTEwMDBfR1BJT18xNCwKLQlBVTEwMDBfR1BJT18xNSwKLQlBVTEwMDBfR1BJT18xNiwKLQlBVTEwMDBfR1BJT18xNywKLQlBVTEwMDBfR1BJT18xOCwKLQlBVTEwMDBfR1BJT18xOSwKLQlBVTEwMDBfR1BJT18yMCwKLQlBVTEwMDBfR1BJT18yMSwKLQlBVTEwMDBfR1BJT18yMiwKLQlBVTEwMDBfR1BJT18yMywKLQlBVTEwMDBfR1BJT18yNCwKLQlBVTEwMDBfR1BJT18yNSwKLQlBVTEwMDBfR1BJT18yNiwKLQlBVTEwMDBfR1BJT18yNywKLQlBVTEwMDBfR1BJT18yOCwKLQlBVTEwMDBfR1BJT18yOSwKLQlBVTEwMDBfR1BJT18zMCwKLQlBVTEwMDBfR1BJT18zMSwKLX07CiAKICNkZWZpbmUgVUFSVDBfQUREUgkJMHhCMTEwMDAwMAotI2RlZmluZSBVQVJUMV9BRERSCQkweEIxMjAwMDAwCiAKICNkZWZpbmUgVVNCX1VPQ19CQVNFCQkweDE0MDIwMDIwCiAjZGVmaW5lIFVTQl9VT0NfTEVOCQkweDIwCkBAIC05NzQsMTYgKzEwMDUsMTAgQEAKICNkZWZpbmUgVVNCTVNSTUNGR19SRENPTUIJMzAKICNkZWZpbmUgVVNCTVNSTUNGR19QRkVOIAkzMQogCisjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTEyMDBfVVNCX0lOVAorCiAjZW5kaWYgLyogQ09ORklHX1NPQ19BVTEyMDAgKi8KIAotI2RlZmluZSBBVTEwMDBfSU5UQzBfSU5UX0JBU0UJKE1JUFNfQ1BVX0lSUV9CQVNFICsgOCkKLSNkZWZpbmUgQVUxMDAwX0lOVEMwX0lOVF9MQVNUCShBVTEwMDBfSU5UQzBfSU5UX0JBU0UgKyAzMSkKLSNkZWZpbmUgQVUxMDAwX0lOVEMxX0lOVF9CQVNFCShBVTEwMDBfSU5UQzBfSU5UX0JBU0UgKyAzMikKLSNkZWZpbmUgQVUxMDAwX0lOVEMxX0lOVF9MQVNUCShBVTEwMDBfSU5UQzFfSU5UX0JBU0UgKyAzMSkKLQotI2RlZmluZSBBVTEwMDBfTUFYX0lOVFIgCUFVMTAwMF9JTlRDMV9JTlRfTEFTVAotI2RlZmluZSBJTlRYCQkJMHhGRgkJCS8qIG5vdCB2YWxpZCAqLwotCiAvKiBQcm9ncmFtbWFibGUgQ291bnRlcnMgMCBhbmQgMSAqLwogI2RlZmluZSBTWVNfQkFTRQkJMHhCMTkwMDAwMAogI2RlZmluZSBTWVNfQ09VTlRFUl9DTlRSTAkoU1lTX0JBU0UgKyAweDE0KQpAQCAtMTIzMSwxNCArMTI1Niw2IEBACiAjZGVmaW5lIE1BQ19SWF9CVUZGM19TVEFUVVMJMHgzMAogI2RlZmluZSBNQUNfUlhfQlVGRjNfQUREUgkweDM0CiAKLS8qIFVBUlRTIDAtMyAqLwotI2RlZmluZSBVQVJUX0JBU0UJCVVBUlQwX0FERFIKLSNpZmRlZglDT05GSUdfU09DX0FVMTIwMAotI2RlZmluZSBVQVJUX0RFQlVHX0JBU0UgCVVBUlQxX0FERFIKLSNlbHNlCi0jZGVmaW5lIFVBUlRfREVCVUdfQkFTRSAJVUFSVDNfQUREUgotI2VuZGlmCi0KICNkZWZpbmUgVUFSVF9SWAkJMAkvKiBSZWNlaXZlIGJ1ZmZlciAqLwogI2RlZmluZSBVQVJUX1RYCQk0CS8qIFRyYW5zbWl0IGJ1ZmZlciAqLwogI2RlZmluZSBVQVJUX0lFUgk4CS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KQEAgLTEyNTEsODQgKzEyNjgsNiBAQAogI2RlZmluZSBVQVJUX0NMSwkweDI4CS8qIEJhdWQgUmF0ZSBDbG9jayBEaXZpZGVyICovCiAjZGVmaW5lIFVBUlRfTU9EX0NOVFJMCTB4MTAwCS8qIE1vZHVsZSBDb250cm9sICovCiAKLSNkZWZpbmUgVUFSVF9GQ1JfRU5BQkxFX0ZJRk8JMHgwMSAvKiBFbmFibGUgdGhlIEZJRk8gKi8KLSNkZWZpbmUgVUFSVF9GQ1JfQ0xFQVJfUkNWUgkweDAyIC8qIENsZWFyIHRoZSBSQ1ZSIEZJRk8gKi8KLSNkZWZpbmUgVUFSVF9GQ1JfQ0xFQVJfWE1JVAkweDA0IC8qIENsZWFyIHRoZSBYTUlUIEZJRk8gKi8KLSNkZWZpbmUgVUFSVF9GQ1JfRE1BX1NFTEVDVAkweDA4IC8qIEZvciBETUEgYXBwbGljYXRpb25zICovCi0jZGVmaW5lIFVBUlRfRkNSX1RSSUdHRVJfTUFTSwkweEYwIC8qIE1hc2sgZm9yIHRoZSBGSUZPIHRyaWdnZXIgcmFuZ2UgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHR0VSXzEJMHgwMCAvKiBNYXNrIGZvciByZWNlaXZlIHRyaWdnZXIgc2V0IGF0IDEgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHR0VSXzQJMHg0MCAvKiBNYXNrIGZvciByZWNlaXZlIHRyaWdnZXIgc2V0IGF0IDQgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHR0VSXzgJMHg4MCAvKiBNYXNrIGZvciByZWNlaXZlIHRyaWdnZXIgc2V0IGF0IDggKi8KLSNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHR0VSXzE0ICAgMHhBMCAvKiBNYXNrIGZvciByZWNlaXZlIHRyaWdnZXIgc2V0IGF0IDE0ICovCi0jZGVmaW5lIFVBUlRfRkNSX1RfVFJJR0dFUl8wCTB4MDAgLyogTWFzayBmb3IgdHJhbnNtaXQgdHJpZ2dlciBzZXQgYXQgMCAqLwotI2RlZmluZSBVQVJUX0ZDUl9UX1RSSUdHRVJfNAkweDEwIC8qIE1hc2sgZm9yIHRyYW5zbWl0IHRyaWdnZXIgc2V0IGF0IDQgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHR0VSXzggICAgMHgyMCAvKiBNYXNrIGZvciB0cmFuc21pdCB0cmlnZ2VyIHNldCBhdCA4ICovCi0jZGVmaW5lIFVBUlRfRkNSX1RfVFJJR0dFUl8xMgkweDMwIC8qIE1hc2sgZm9yIHRyYW5zbWl0IHRyaWdnZXIgc2V0IGF0IDEyICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgTGluZSBDb250cm9sIFJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgVUFSVF9MQ1JfU0JDCTB4NDAJLyogU2V0IGJyZWFrIGNvbnRyb2wgKi8KLSNkZWZpbmUgVUFSVF9MQ1JfU1BBUgkweDIwCS8qIFN0aWNrIHBhcml0eSAoPykgKi8KLSNkZWZpbmUgVUFSVF9MQ1JfRVBBUgkweDEwCS8qIEV2ZW4gcGFyaXR5IHNlbGVjdCAqLwotI2RlZmluZSBVQVJUX0xDUl9QQVJJVFkJMHgwOAkvKiBQYXJpdHkgRW5hYmxlICovCi0jZGVmaW5lIFVBUlRfTENSX1NUT1AJMHgwNAkvKiBTdG9wIGJpdHM6IDA9MSBzdG9wIGJpdCwgMT0gMiBzdG9wIGJpdHMgKi8KLSNkZWZpbmUgVUFSVF9MQ1JfV0xFTjUgIDB4MDAJLyogV29yZGxlbmd0aDogNSBiaXRzICovCi0jZGVmaW5lIFVBUlRfTENSX1dMRU42ICAweDAxCS8qIFdvcmRsZW5ndGg6IDYgYml0cyAqLwotI2RlZmluZSBVQVJUX0xDUl9XTEVONyAgMHgwMgkvKiBXb3JkbGVuZ3RoOiA3IGJpdHMgKi8KLSNkZWZpbmUgVUFSVF9MQ1JfV0xFTjggIDB4MDMJLyogV29yZGxlbmd0aDogOCBiaXRzICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgTGluZSBTdGF0dXMgUmVnaXN0ZXIKLSAqLwotI2RlZmluZSBVQVJUX0xTUl9URU1UCTB4NDAJLyogVHJhbnNtaXR0ZXIgZW1wdHkgKi8KLSNkZWZpbmUgVUFSVF9MU1JfVEhSRQkweDIwCS8qIFRyYW5zbWl0LWhvbGQtcmVnaXN0ZXIgZW1wdHkgKi8KLSNkZWZpbmUgVUFSVF9MU1JfQkkJMHgxMAkvKiBCcmVhayBpbnRlcnJ1cHQgaW5kaWNhdG9yICovCi0jZGVmaW5lIFVBUlRfTFNSX0ZFCTB4MDgJLyogRnJhbWUgZXJyb3IgaW5kaWNhdG9yICovCi0jZGVmaW5lIFVBUlRfTFNSX1BFCTB4MDQJLyogUGFyaXR5IGVycm9yIGluZGljYXRvciAqLwotI2RlZmluZSBVQVJUX0xTUl9PRQkweDAyCS8qIE92ZXJydW4gZXJyb3IgaW5kaWNhdG9yICovCi0jZGVmaW5lIFVBUlRfTFNSX0RSCTB4MDEJLyogUmVjZWl2ZXIgZGF0YSByZWFkeSAqLwotCi0vKgotICogVGhlc2UgYXJlIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIEludGVycnVwdCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlcgotICovCi0jZGVmaW5lIFVBUlRfSUlSX05PX0lOVAkweDAxCS8qIE5vIGludGVycnVwdHMgcGVuZGluZyAqLwotI2RlZmluZSBVQVJUX0lJUl9JRAkweDA2CS8qIE1hc2sgZm9yIHRoZSBpbnRlcnJ1cHQgSUQgKi8KLSNkZWZpbmUgVUFSVF9JSVJfTVNJCTB4MDAJLyogTW9kZW0gc3RhdHVzIGludGVycnVwdCAqLwotI2RlZmluZSBVQVJUX0lJUl9USFJJCTB4MDIJLyogVHJhbnNtaXR0ZXIgaG9sZGluZyByZWdpc3RlciBlbXB0eSAqLwotI2RlZmluZSBVQVJUX0lJUl9SREkJMHgwNAkvKiBSZWNlaXZlciBkYXRhIGludGVycnVwdCAqLwotI2RlZmluZSBVQVJUX0lJUl9STFNJCTB4MDYJLyogUmVjZWl2ZXIgbGluZSBzdGF0dXMgaW50ZXJydXB0ICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgotICovCi0jZGVmaW5lIFVBUlRfSUVSX01TSQkweDA4CS8qIEVuYWJsZSBNb2RlbSBzdGF0dXMgaW50ZXJydXB0ICovCi0jZGVmaW5lIFVBUlRfSUVSX1JMU0kJMHgwNAkvKiBFbmFibGUgcmVjZWl2ZXIgbGluZSBzdGF0dXMgaW50ZXJydXB0ICovCi0jZGVmaW5lIFVBUlRfSUVSX1RIUkkJMHgwMgkvKiBFbmFibGUgVHJhbnNtaXR0ZXIgaG9sZGluZyByZWdpc3RlciBpbnQuICovCi0jZGVmaW5lIFVBUlRfSUVSX1JESQkweDAxCS8qIEVuYWJsZSByZWNlaXZlciBkYXRhIGludGVycnVwdCAqLwotCi0vKgotICogVGhlc2UgYXJlIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIKLSAqLwotI2RlZmluZSBVQVJUX01DUl9MT09QCTB4MTAJLyogRW5hYmxlIGxvb3BiYWNrIHRlc3QgbW9kZSAqLwotI2RlZmluZSBVQVJUX01DUl9PVVQyCTB4MDgJLyogT3V0MiBjb21wbGVtZW50ICovCi0jZGVmaW5lIFVBUlRfTUNSX09VVDEJMHgwNAkvKiBPdXQxIGNvbXBsZW1lbnQgKi8KLSNkZWZpbmUgVUFSVF9NQ1JfUlRTCTB4MDIJLyogUlRTIGNvbXBsZW1lbnQgKi8KLSNkZWZpbmUgVUFSVF9NQ1JfRFRSCTB4MDEJLyogRFRSIGNvbXBsZW1lbnQgKi8KLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIKLSAqLwotI2RlZmluZSBVQVJUX01TUl9EQ0QJMHg4MAkvKiBEYXRhIENhcnJpZXIgRGV0ZWN0ICovCi0jZGVmaW5lIFVBUlRfTVNSX1JJCTB4NDAJLyogUmluZyBJbmRpY2F0b3IgKi8KLSNkZWZpbmUgVUFSVF9NU1JfRFNSCTB4MjAJLyogRGF0YSBTZXQgUmVhZHkgKi8KLSNkZWZpbmUgVUFSVF9NU1JfQ1RTCTB4MTAJLyogQ2xlYXIgdG8gU2VuZCAqLwotI2RlZmluZSBVQVJUX01TUl9ERENECTB4MDgJLyogRGVsdGEgRENEICovCi0jZGVmaW5lIFVBUlRfTVNSX1RFUkkJMHgwNAkvKiBUcmFpbGluZyBlZGdlIHJpbmcgaW5kaWNhdG9yICovCi0jZGVmaW5lIFVBUlRfTVNSX0REU1IJMHgwMgkvKiBEZWx0YSBEU1IgKi8KLSNkZWZpbmUgVUFSVF9NU1JfRENUUwkweDAxCS8qIERlbHRhIENUUyAqLwotI2RlZmluZSBVQVJUX01TUl9BTllfREVMVEEgMHgwRgkvKiBBbnkgb2YgdGhlIGRlbHRhIGJpdHMhICovCi0KIC8qIFNTSU8gKi8KICNkZWZpbmUgU1NJMF9TVEFUVVMJCTB4QjE2MDAwMDAKICMgIGRlZmluZSBTU0lfU1RBVFVTX0JGIAkoMSA8PCA0KQpAQCAtMTcyMCw3ICsxNjU5LDcgQEAKICNkZWZpbmUgSU9QT1JUX1JFU09VUkNFX1NUQVJUCTB4MDAwMDEwMDAJLyogc2tpcCBsZWdhY3kgcHJvYmluZyAqLwogI2RlZmluZSBJT1BPUlRfUkVTT1VSQ0VfRU5ECTB4ZmZmZmZmZmYKICNkZWZpbmUgSU9NRU1fUkVTT1VSQ0VfU1RBUlQJMHgxMDAwMDAwMAotI2RlZmluZSBJT01FTV9SRVNPVVJDRV9FTkQJMHhmZmZmZmZmZgorI2RlZmluZSBJT01FTV9SRVNPVVJDRV9FTkQJMHhmZmZmZmZmZmZVTEwKIAogI2Vsc2UgLyogQXUxMDAwIGFuZCBBdTExMDAgYW5kIEF1MTIwMCAqLwogCkBAIC0xNzI4LDcgKzE2NjcsNyBAQAogI2RlZmluZSBJT1BPUlRfUkVTT1VSQ0VfU1RBUlQJMHgxMDAwMDAwMAogI2RlZmluZSBJT1BPUlRfUkVTT1VSQ0VfRU5ECTB4ZmZmZmZmZmYKICNkZWZpbmUgSU9NRU1fUkVTT1VSQ0VfU1RBUlQJMHgxMDAwMDAwMAotI2RlZmluZSBJT01FTV9SRVNPVVJDRV9FTkQJMHhmZmZmZmZmZgorI2RlZmluZSBJT01FTV9SRVNPVVJDRV9FTkQJMHhmZmZmZmZmZmZVTEwKIAogI2RlZmluZSBQQ0lfSU9fU1RBUlQJMAogI2RlZmluZSBQQ0lfSU9fRU5ECTAKQEAgLTE3MzksNTMgKzE2NzgsNCBAQAogCiAjZW5kaWYKIAotI2lmbmRlZiBfTEFOR1VBR0VfQVNTRU1CTFkKLXR5cGVkZWYgdm9sYXRpbGUgc3RydWN0IHsKLQkvKiAweDAwMDAgKi8gdTMyIHRveXRyaW07Ci0JLyogMHgwMDA0ICovIHUzMiB0b3l3cml0ZTsKLQkvKiAweDAwMDggKi8gdTMyIHRveW1hdGNoMDsKLQkvKiAweDAwMEMgKi8gdTMyIHRveW1hdGNoMTsKLQkvKiAweDAwMTAgKi8gdTMyIHRveW1hdGNoMjsKLQkvKiAweDAwMTQgKi8gdTMyIGNudHJjdHJsOwotCS8qIDB4MDAxOCAqLyB1MzIgc2NyYXRjaDA7Ci0JLyogMHgwMDFDICovIHUzMiBzY3JhdGNoMTsKLQkvKiAweDAwMjAgKi8gdTMyIGZyZXFjdHJsMDsKLQkvKiAweDAwMjQgKi8gdTMyIGZyZXFjdHJsMTsKLQkvKiAweDAwMjggKi8gdTMyIGNsa3NyYzsKLQkvKiAweDAwMkMgKi8gdTMyIHBpbmZ1bmM7Ci0JLyogMHgwMDMwICovIHUzMiByZXNlcnZlZDA7Ci0JLyogMHgwMDM0ICovIHUzMiB3YWtlbXNrOwotCS8qIDB4MDAzOCAqLyB1MzIgZW5kaWFuOwotCS8qIDB4MDAzQyAqLyB1MzIgcG93ZXJjdHJsOwotCS8qIDB4MDA0MCAqLyB1MzIgdG95cmVhZDsKLQkvKiAweDAwNDQgKi8gdTMyIHJ0Y3RyaW07Ci0JLyogMHgwMDQ4ICovIHUzMiBydGN3cml0ZTsKLQkvKiAweDAwNEMgKi8gdTMyIHJ0Y21hdGNoMDsKLQkvKiAweDAwNTAgKi8gdTMyIHJ0Y21hdGNoMTsKLQkvKiAweDAwNTQgKi8gdTMyIHJ0Y21hdGNoMjsKLQkvKiAweDAwNTggKi8gdTMyIHJ0Y3JlYWQ7Ci0JLyogMHgwMDVDICovIHUzMiB3YWtlc3JjOwotCS8qIDB4MDA2MCAqLyB1MzIgY3B1cGxsOwotCS8qIDB4MDA2NCAqLyB1MzIgYXV4cGxsOwotCS8qIDB4MDA2OCAqLyB1MzIgcmVzZXJ2ZWQxOwotCS8qIDB4MDA2QyAqLyB1MzIgcmVzZXJ2ZWQyOwotCS8qIDB4MDA3MCAqLyB1MzIgcmVzZXJ2ZWQzOwotCS8qIDB4MDA3NCAqLyB1MzIgcmVzZXJ2ZWQ0OwotCS8qIDB4MDA3OCAqLyB1MzIgc2xwcHdyOwotCS8qIDB4MDA3QyAqLyB1MzIgc2xlZXA7Ci0JLyogMHgwMDgwICovIHUzMiByZXNlcnZlZDVbMzJdOwotCS8qIDB4MDEwMCAqLyB1MzIgdHJpb3V0cmQ7Ci0jZGVmaW5lIHRyaW91dGNsciB0cmlvdXRyZAotCS8qIDB4MDEwNCAqLyB1MzIgcmVzZXJ2ZWQ2OwotCS8qIDB4MDEwOCAqLyB1MzIgb3V0cHV0cmQ7Ci0jZGVmaW5lIG91dHB1dHNldCBvdXRwdXRyZAotCS8qIDB4MDEwQyAqLyB1MzIgb3V0cHV0Y2xyOwotCS8qIDB4MDExMCAqLyB1MzIgcGluc3RhdGVyZDsKLSNkZWZpbmUgcGluaW5wdXRlbiBwaW5zdGF0ZXJkCi19IEFVMVgwMF9TWVM7Ci0KLXN0YXRpYyBBVTFYMDBfU1lTICogY29uc3Qgc3lzID0gKEFVMVgwMF9TWVMgKilTWVNfQkFTRTsKLQotI2VuZGlmCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTEwMF9tbWMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTExMDBfbW1jLmgKaW5kZXggYzM1ZTIwOS4uOTQwMDBhMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTEwMF9tbWMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMTAwX21tYy5oCkBAIC00Niw2ICs0Niw3IEBACiAJaW50KCpjYXJkX3JlYWRvbmx5KSh2b2lkICptbWNfaG9zdCk7CiAJdm9pZCgqc2V0X3Bvd2VyKSh2b2lkICptbWNfaG9zdCwgaW50IHN0YXRlKTsKIAlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWQ7CisJdW5zaWduZWQgbG9uZyBtYXNrX2hvc3RfY2FwczsKIH07CiAKICNkZWZpbmUgU0QwX0JBU0UJMHhCMDYwMDAwMApAQCAtMjA1LDQgKzIwNiwzIEBACiAKIAogI2VuZGlmIC8qIF9fQVNNX0FVMTEwMF9NTUNfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmgKaW5kZXggMDZmNjhmNC4uOGM2YjExMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaApAQCAtMzA1LDYgKzMwNSw3IEBACiAJZGJkZXZfdGFiX3QJCSpjaGFuX2Rlc3Q7CiAJYXUxeF9kbWFfY2hhbl90CQkqY2hhbl9wdHI7CiAJYXUxeF9kZG1hX2Rlc2NfdAkqY2hhbl9kZXNjX2Jhc2U7CisJdTMyCQkJY2RiX21lbWJhc2U7IC8qIGttYWxsb2MgYmFzZSBvZiBhYm92ZSAqLwogCWF1MXhfZGRtYV9kZXNjX3QJKmdldF9wdHIsICpwdXRfcHRyLCAqY3VyX3B0cjsKIAl2b2lkCQkJKmNoYW5fY2FsbHBhcmFtOwogCXZvaWQJCQkoKmNoYW5fY2FsbGJhY2spKGludCwgdm9pZCAqKTsKQEAgLTMzOCw4ICszMzksOCBAQAogdTMyIGF1MXh4eF9kYmRtYV9yaW5nX2FsbG9jKHUzMiBjaGFuaWQsIGludCBlbnRyaWVzKTsKIAogLyogUHV0IGJ1ZmZlcnMgb24gc291cmNlL2Rlc3RpbmF0aW9uIGRlc2NyaXB0b3JzLiAqLwotdTMyIF9hdTF4eHhfZGJkbWFfcHV0X3NvdXJjZSh1MzIgY2hhbmlkLCB2b2lkICpidWYsIGludCBuYnl0ZXMsIHUzMiBmbGFncyk7Ci11MzIgX2F1MXh4eF9kYmRtYV9wdXRfZGVzdCh1MzIgY2hhbmlkLCB2b2lkICpidWYsIGludCBuYnl0ZXMsIHUzMiBmbGFncyk7Cit1MzIgYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UodTMyIGNoYW5pZCwgZG1hX2FkZHJfdCBidWYsIGludCBuYnl0ZXMsIHUzMiBmbGFncyk7Cit1MzIgYXUxeHh4X2RiZG1hX3B1dF9kZXN0KHUzMiBjaGFuaWQsIGRtYV9hZGRyX3QgYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpOwogCiAvKiBHZXQgYSBidWZmZXIgZnJvbSB0aGUgZGVzdGluYXRpb24gZGVzY3JpcHRvci4gKi8KIHUzMiBhdTF4eHhfZGJkbWFfZ2V0X2Rlc3QodTMyIGNoYW5pZCwgdm9pZCAqKmJ1ZiwgaW50ICpuYnl0ZXMpOwpAQCAtMzYyLDI1ICszNjMsNiBAQAogdm9pZCBhdTF4eHhfZGJkbWFfcmVzdW1lKHZvaWQpOwogI2VuZGlmCiAKLQotLyoKLSAqIFNvbWUgY29tcGF0aWJpbHR5IG1hY3JvcyAtLSBuZWVkZWQgdG8gbWFrZSBjaGFuZ2VzIHRvIEFQSQotICogd2l0aG91dCBicmVha2luZyBleGlzdGluZyBkcml2ZXJzLgotICovCi0jZGVmaW5lIGF1MXh4eF9kYmRtYV9wdXRfc291cmNlKGNoYW5pZCwgYnVmLCBuYnl0ZXMpCQkJXAotCV9hdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBERE1BX0ZMQUdTX0lFKQotI2RlZmluZSBhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZV9mbGFncyhjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBmbGFncykJXAotCV9hdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBmbGFncykKLSNkZWZpbmUgcHV0X3NvdXJjZV9mbGFncyhjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBmbGFncykJCQlcCi0JYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2VfZmxhZ3MoY2hhbmlkLCBidWYsIG5ieXRlcywgZmxhZ3MpCi0KLSNkZWZpbmUgYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGNoYW5pZCwgYnVmLCBuYnl0ZXMpCQkJXAotCV9hdTF4eHhfZGJkbWFfcHV0X2Rlc3QoY2hhbmlkLCBidWYsIG5ieXRlcywgRERNQV9GTEFHU19JRSkKLSNkZWZpbmUgYXUxeHh4X2RiZG1hX3B1dF9kZXN0X2ZsYWdzKGNoYW5pZCwgYnVmLCBuYnl0ZXMsIGZsYWdzKSAJXAotCV9hdTF4eHhfZGJkbWFfcHV0X2Rlc3QoY2hhbmlkLCBidWYsIG5ieXRlcywgZmxhZ3MpCi0jZGVmaW5lIHB1dF9kZXN0X2ZsYWdzKGNoYW5pZCwgYnVmLCBuYnl0ZXMsIGZsYWdzKQkJCVwKLQlhdTF4eHhfZGJkbWFfcHV0X2Rlc3RfZmxhZ3MoY2hhbmlkLCBidWYsIG5ieXRlcywgZmxhZ3MpCi0KIC8qCiAgKglGbGFncyBmb3IgdGhlIHB1dF9zb3VyY2UvcHV0X2Rlc3QgZnVuY3Rpb25zLgogICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2V0aC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MXh4eF9ldGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWU5Yjc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MXh4eF9ldGguaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9fQVUxWDAwX0VUSF9EQVRBX0gKKyNkZWZpbmUgX19BVTFYMDBfRVRIX0RBVEFfSAorCisvKiBQbGF0Zm9ybSBzcGVjaWZpYyBQSFkgY29uZmlndXJhdGlvbiBwYXNzZWQgdG8gdGhlIE1BQyBkcml2ZXIgKi8KK3N0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEgeworCWludCBwaHlfc3RhdGljX2NvbmZpZzsKKwlpbnQgcGh5X3NlYXJjaF9oaWdoZXN0X2FkZHI7CisJaW50IHBoeTFfc2VhcmNoX21hYzA7CisJaW50IHBoeV9hZGRyOworCWludCBwaHlfYnVzaWQ7CisJaW50IHBoeV9pcnE7Cit9OworCit2b2lkIF9faW5pdCBhdTF4eHhfb3ZlcnJpZGVfZXRoX2NmZyh1bnNpZ25lZCBwb3J0LAorCQkJc3RydWN0IGF1MTAwMF9ldGhfcGxhdGZvcm1fZGF0YSAqZXRoX2RhdGEpOworCisjZW5kaWYgLyogX19BVTFYMDBfRVRIX0RBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaAppbmRleCA5MTU5NWZhLi42MmQyZjEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaApAQCAtMzUsMTUgKzM1LDEzIEBACiAJcmV0dXJuIC1FTlhJTzsKIH0KIAotI2lmZGVmIENPTkZJR19TT0NfQVUxMDAwCiBzdGF0aWMgaW5saW5lIGludCBhdTEwMDBfaXJxX3RvX2dwaW8oaW50IGlycSkKIHsKLQlpZiAoKGlycSA+PSBBVTEwMDBfR1BJT18wKSAmJiAoaXJxIDw9IEFVMTAwMF9HUElPXzMxKSkKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTEwMDBfR1BJT18wKSArIDA7CisJaWYgKChpcnEgPj0gQVUxMDAwX0dQSU8wX0lOVCkgJiYgKGlycSA8PSBBVTEwMDBfR1BJTzMxX0lOVCkpCisJCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxMDAwX0dQSU8wX0lOVCkgKyAwOwogCiAJcmV0dXJuIC1FTlhJTzsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGludCBhdTE1MDBfZ3BpbzFfdG9faXJxKGludCBncGlvKQogewpAQCAtNzEsMjcgKzY5LDI1IEBACiAJcmV0dXJuIC1FTlhJTzsKIH0KIAotI2lmZGVmIENPTkZJR19TT0NfQVUxNTAwCiBzdGF0aWMgaW5saW5lIGludCBhdTE1MDBfaXJxX3RvX2dwaW8oaW50IGlycSkKIHsKIAlzd2l0Y2ggKGlycSkgewotCWNhc2UgQVUxMDAwX0dQSU9fMCAuLi4gQVUxMDAwX0dQSU9fMTU6Ci0JY2FzZSBBVTE1MDBfR1BJT18yMDoKLQljYXNlIEFVMTUwMF9HUElPXzIzIC4uLiBBVTE1MDBfR1BJT18yODoKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTEwMDBfR1BJT18wKSArIDA7Ci0JY2FzZSBBVTE1MDBfR1BJT18yMDAgLi4uIEFVMTUwMF9HUElPXzIwMzoKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1MDBfR1BJT18yMDApICsgMDsKLQljYXNlIEFVMTUwMF9HUElPXzIwNCAuLi4gQVUxNTAwX0dQSU9fMjA1OgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPXzIwNCkgKyA0OwotCWNhc2UgQVUxNTAwX0dQSU9fMjA2IC4uLiBBVTE1MDBfR1BJT18yMDc6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTAwX0dQSU9fMjA2KSArIDY7Ci0JY2FzZSBBVTE1MDBfR1BJT18yMDhfMjE1OgorCWNhc2UgQVUxNTAwX0dQSU8wX0lOVCAuLi4gQVUxNTAwX0dQSU8xNV9JTlQ6CisJY2FzZSBBVTE1MDBfR1BJTzIwX0lOVDoKKwljYXNlIEFVMTUwMF9HUElPMjNfSU5UIC4uLiBBVTE1MDBfR1BJTzI4X0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTE1MDBfR1BJTzBfSU5UKSArIDA7CisJY2FzZSBBVTE1MDBfR1BJTzIwMF9JTlQgLi4uIEFVMTUwMF9HUElPMjAzX0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1MDBfR1BJTzIwMF9JTlQpICsgMDsKKwljYXNlIEFVMTUwMF9HUElPMjA0X0lOVCAuLi4gQVUxNTAwX0dQSU8yMDVfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPMjA0X0lOVCkgKyA0OworCWNhc2UgQVUxNTAwX0dQSU8yMDZfSU5UIC4uLiBBVTE1MDBfR1BJTzIwN19JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTAwX0dQSU8yMDZfSU5UKSArIDY7CisJY2FzZSBBVTE1MDBfR1BJTzIwOF8yMTVfSU5UOgogCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgODsKIAl9CiAKIAlyZXR1cm4gLUVOWElPOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTEwMF9ncGlvMV90b19pcnEoaW50IGdwaW8pCiB7CkBAIC0xMDgsMTkgKzEwNCwxNyBAQAogCXJldHVybiAtRU5YSU87CiB9CiAKLSNpZmRlZiBDT05GSUdfU09DX0FVMTEwMAogc3RhdGljIGlubGluZSBpbnQgYXUxMTAwX2lycV90b19ncGlvKGludCBpcnEpCiB7CiAJc3dpdGNoIChpcnEpIHsKLQljYXNlIEFVMTAwMF9HUElPXzAgLi4uIEFVMTAwMF9HUElPXzMxOgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTAwMF9HUElPXzApICsgMDsKLQljYXNlIEFVMTEwMF9HUElPXzIwOF8yMTU6CisJY2FzZSBBVTExMDBfR1BJTzBfSU5UIC4uLiBBVTExMDBfR1BJTzMxX0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTExMDBfR1BJTzBfSU5UKSArIDA7CisJY2FzZSBBVTExMDBfR1BJTzIwOF8yMTVfSU5UOgogCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgODsKIAl9CiAKIAlyZXR1cm4gLUVOWElPOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTU1MF9ncGlvMV90b19pcnEoaW50IGdwaW8pCiB7CkBAIC0xNDksMjQgKzE0MywyMiBAQAogCXJldHVybiAtRU5YSU87CiB9CiAKLSNpZmRlZiBDT05GSUdfU09DX0FVMTU1MAogc3RhdGljIGlubGluZSBpbnQgYXUxNTUwX2lycV90b19ncGlvKGludCBpcnEpCiB7CiAJc3dpdGNoIChpcnEpIHsKLQljYXNlIEFVMTAwMF9HUElPXzAgLi4uIEFVMTAwMF9HUElPXzE1OgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTAwMF9HUElPXzApICsgMDsKLQljYXNlIEFVMTU1MF9HUElPXzIwMDoKLQljYXNlIEFVMTUwMF9HUElPXzIwMV8yMDU6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTUwX0dQSU9fMjAwKSArIDA7Ci0JY2FzZSBBVTE1MDBfR1BJT18xNiAuLi4gQVUxNTAwX0dQSU9fMjg6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxNTAwX0dQSU9fMTYpICsgMTY7Ci0JY2FzZSBBVTE1MDBfR1BJT18yMDYgLi4uIEFVMTUwMF9HUElPXzIwOF8yMTg6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTAwX0dQSU9fMjA2KSArIDY7CisJY2FzZSBBVTE1NTBfR1BJTzBfSU5UIC4uLiBBVTE1NTBfR1BJTzE1X0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTE1NTBfR1BJTzBfSU5UKSArIDA7CisJY2FzZSBBVTE1NTBfR1BJTzIwMF9JTlQ6CisJY2FzZSBBVTE1NTBfR1BJTzIwMV8yMDVfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTU1MF9HUElPMjAwX0lOVCkgKyAwOworCWNhc2UgQVUxNTUwX0dQSU8xNl9JTlQgLi4uIEFVMTU1MF9HUElPMjhfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTU1MF9HUElPMTZfSU5UKSArIDE2OworCWNhc2UgQVUxNTUwX0dQSU8yMDZfSU5UIC4uLiBBVTE1NTBfR1BJTzIwOF8yMTVfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTU1MF9HUElPMjA2X0lOVCkgKyA2OwogCX0KIAogCXJldHVybiAtRU5YSU87CiB9Ci0jZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgYXUxMjAwX2dwaW8xX3RvX2lycShpbnQgZ3BpbykKIHsKQEAgLTE4NywyMyArMTc5LDIxIEBACiAJcmV0dXJuIC1FTlhJTzsKIH0KIAotI2lmZGVmIENPTkZJR19TT0NfQVUxMjAwCiBzdGF0aWMgaW5saW5lIGludCBhdTEyMDBfaXJxX3RvX2dwaW8oaW50IGlycSkKIHsKIAlzd2l0Y2ggKGlycSkgewotCWNhc2UgQVUxMDAwX0dQSU9fMCAuLi4gQVUxMDAwX0dQSU9fMzE6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxMDAwX0dQSU9fMCkgKyAwOwotCWNhc2UgQVUxMjAwX0dQSU9fMjAwIC4uLiBBVTEyMDBfR1BJT18yMDI6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxMjAwX0dQSU9fMjAwKSArIDA7Ci0JY2FzZSBBVTEyMDBfR1BJT18yMDM6CisJY2FzZSBBVTEyMDBfR1BJTzBfSU5UIC4uLiBBVTEyMDBfR1BJTzMxX0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTEyMDBfR1BJTzBfSU5UKSArIDA7CisJY2FzZSBBVTEyMDBfR1BJTzIwMF9JTlQgLi4uIEFVMTIwMF9HUElPMjAyX0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTEyMDBfR1BJTzIwMF9JTlQpICsgMDsKKwljYXNlIEFVMTIwMF9HUElPMjAzX0lOVDoKIAkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIDM7Ci0JY2FzZSBBVTEyMDBfR1BJT18yMDQgLi4uIEFVMTIwMF9HUElPXzIwOF8yMTU6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxMjAwX0dQSU9fMjA0KSArIDQ7CisJY2FzZSBBVTEyMDBfR1BJTzIwNF9JTlQgLi4uIEFVMTIwMF9HUElPMjA4XzIxNV9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxMjAwX0dQSU8yMDRfSU5UKSArIDQ7CiAJfQogCiAJcmV0dXJuIC1FTlhJTzsKIH0KLSNlbmRpZgogCiAvKgogICogR1BJTzEgYmxvY2sgbWFjcm9zIGZvciBjb21tb24gbGludXggZ3BpbyBmdW5jdGlvbnMuCkBAIC0yNDYsMTkgKzIzNiwxOSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhbGNoZW15X2dwaW8xX3RvX2lycShpbnQgZ3BpbykKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCXJldHVybiBhdTEwMDBfZ3BpbzFfdG9faXJxKGdwaW8pOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkKLQlyZXR1cm4gYXUxMTAwX2dwaW8xX3RvX2lycShncGlvKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1MDApCi0JcmV0dXJuIGF1MTUwMF9ncGlvMV90b19pcnEoZ3Bpbyk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTUwKQotCXJldHVybiBhdTE1NTBfZ3BpbzFfdG9faXJxKGdwaW8pOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTIwMCkKLQlyZXR1cm4gYXUxMjAwX2dwaW8xX3RvX2lycShncGlvKTsKLSNlbHNlCisJc3dpdGNoIChhbGNoZW15X2dldF9jcHV0eXBlKCkpIHsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTAwMDoKKwkJcmV0dXJuIGF1MTAwMF9ncGlvMV90b19pcnEoZ3Bpbyk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTExMDA6CisJCXJldHVybiBhdTExMDBfZ3BpbzFfdG9faXJxKGdwaW8pOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTAwOgorCQlyZXR1cm4gYXUxNTAwX2dwaW8xX3RvX2lycShncGlvKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTU1MDoKKwkJcmV0dXJuIGF1MTU1MF9ncGlvMV90b19pcnEoZ3Bpbyk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTEyMDA6CisJCXJldHVybiBhdTEyMDBfZ3BpbzFfdG9faXJxKGdwaW8pOworCX0KIAlyZXR1cm4gLUVOWElPOwotI2VuZGlmCiB9CiAKIC8qCkBAIC0zMTYsMTkgKzMwNiwxOSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhbGNoZW15X2dwaW8yX3RvX2lycShpbnQgZ3BpbykKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCXJldHVybiBhdTEwMDBfZ3BpbzJfdG9faXJxKGdwaW8pOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkKLQlyZXR1cm4gYXUxMTAwX2dwaW8yX3RvX2lycShncGlvKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1MDApCi0JcmV0dXJuIGF1MTUwMF9ncGlvMl90b19pcnEoZ3Bpbyk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTUwKQotCXJldHVybiBhdTE1NTBfZ3BpbzJfdG9faXJxKGdwaW8pOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTIwMCkKLQlyZXR1cm4gYXUxMjAwX2dwaW8yX3RvX2lycShncGlvKTsKLSNlbHNlCisJc3dpdGNoIChhbGNoZW15X2dldF9jcHV0eXBlKCkpIHsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTAwMDoKKwkJcmV0dXJuIGF1MTAwMF9ncGlvMl90b19pcnEoZ3Bpbyk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTExMDA6CisJCXJldHVybiBhdTExMDBfZ3BpbzJfdG9faXJxKGdwaW8pOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTAwOgorCQlyZXR1cm4gYXUxNTAwX2dwaW8yX3RvX2lycShncGlvKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTU1MDoKKwkJcmV0dXJuIGF1MTU1MF9ncGlvMl90b19pcnEoZ3Bpbyk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTEyMDA6CisJCXJldHVybiBhdTEyMDBfZ3BpbzJfdG9faXJxKGdwaW8pOworCX0KIAlyZXR1cm4gLUVOWElPOwotI2VuZGlmCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzg0LDEwICszNzQsMTMgQEAKIAogCWdwaW8yIC09IEFMQ0hFTVlfR1BJTzJfQkFTRTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTExMDApIHx8IGRlZmluZWQoQ09ORklHX1NPQ19BVTE1MDApCiAJLyogQXUxMTAwL0F1MTUwMCBoYXZlIEdQSU8yMDgtMjE1IGVuYWJsZSBiaXRzIGF0IDAuLjcgKi8KLQlncGlvMiAtPSA4OwotI2VuZGlmCisJc3dpdGNoIChhbGNoZW15X2dldF9jcHV0eXBlKCkpIHsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTEwMDoKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTUwMDoKKwkJZ3BpbzIgLT0gODsKKwl9CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJX19hbGNoZW15X2dwaW8yX21vZF9pbnQoZ3BpbzIsIDEpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTQwNSwxMCArMzk4LDEzIEBACiAKIAlncGlvMiAtPSBBTENIRU1ZX0dQSU8yX0JBU0U7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMTAwKSB8fCBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQogCS8qIEF1MTEwMC9BdTE1MDAgaGF2ZSBHUElPMjA4LTIxNSBlbmFibGUgYml0cyBhdCAwLi43ICovCi0JZ3BpbzIgLT0gODsKLSNlbmRpZgorCXN3aXRjaCAoYWxjaGVteV9nZXRfY3B1dHlwZSgpKSB7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTExMDA6CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1MDA6CisJCWdwaW8yIC09IDg7CisJfQorCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCV9fYWxjaGVteV9ncGlvMl9tb2RfaW50KGdwaW8yLCAwKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC00OTQsMTkgKzQ5MCwxOSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhbGNoZW15X2lycV90b19ncGlvKGludCBpcnEpCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQlyZXR1cm4gYXUxMDAwX2lycV90b19ncGlvKGlycSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMTAwKQotCXJldHVybiBhdTExMDBfaXJxX3RvX2dwaW8oaXJxKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1MDApCi0JcmV0dXJuIGF1MTUwMF9pcnFfdG9fZ3BpbyhpcnEpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQlyZXR1cm4gYXUxNTUwX2lycV90b19ncGlvKGlycSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMjAwKQotCXJldHVybiBhdTEyMDBfaXJxX3RvX2dwaW8oaXJxKTsKLSNlbHNlCisJc3dpdGNoIChhbGNoZW15X2dldF9jcHV0eXBlKCkpIHsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTAwMDoKKwkJcmV0dXJuIGF1MTAwMF9pcnFfdG9fZ3BpbyhpcnEpOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMTAwOgorCQlyZXR1cm4gYXUxMTAwX2lycV90b19ncGlvKGlycSk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1MDA6CisJCXJldHVybiBhdTE1MDBfaXJxX3RvX2dwaW8oaXJxKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTU1MDoKKwkJcmV0dXJuIGF1MTU1MF9pcnFfdG9fZ3BpbyhpcnEpOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMjAwOgorCQlyZXR1cm4gYXUxMjAwX2lycV90b19ncGlvKGlycSk7CisJfQogCXJldHVybiAtRU5YSU87Ci0jZW5kaWYKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8uaAppbmRleCBmOWI3ZDQxLi5jM2Y2MGNkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9BTENIRU1ZX0dQSU9fSF8KICNkZWZpbmUgX0FMQ0hFTVlfR1BJT19IXwogCi0jaWYgZGVmaW5lZChDT05GSUdfQUxDSEVNWV9HUElPX0FVMTAwMCkKKyNpZiBkZWZpbmVkKENPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwKQogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9pb3JlbWFwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvaW9yZW1hcC5oCmluZGV4IDM2NGNlYTIuLjc1YTk0YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9pb3JlbWFwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2lvcmVtYXAuaApAQCAtMTEsNyArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2lmZGVmIENPTkZJR182NEJJVF9QSFlTX0FERFIKKyNpZiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpICYmIGRlZmluZWQoQ09ORklHX1BDSSkKIGV4dGVybiBwaHlzX3QgX19maXh1cF9iaWdwaHlzX2FkZHIocGh5c190LCBwaHlzX3QpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgcGh5c190IF9fZml4dXBfYmlncGh5c19hZGRyKHBoeXNfdCBwaHlzX2FkZHIsIHBoeXNfdCBzaXplKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL3Byb20uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9wcm9tLmgKaW5kZXggZTM4NzE1NS4uNGMwZTA5YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL3Byb20uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvcHJvbS5oCkBAIC02LDcgKzYsNiBAQAogZXh0ZXJuIGNoYXIgKipwcm9tX2VudnA7CiAKIGV4dGVybiB2b2lkIHByb21faW5pdF9jbWRsaW5lKHZvaWQpOwotZXh0ZXJuIGNoYXIgKnByb21fZ2V0Y21kbGluZSh2b2lkKTsKIGV4dGVybiBjaGFyICpwcm9tX2dldGVudihjaGFyICplbnZuYW1lKTsKIGV4dGVybiBpbnQgcHJvbV9nZXRfZXRoZXJuZXRfYWRkcihjaGFyICpldGhlcm5ldF9hZGRyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY202M3h4X3JlZ3MuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9yZWdzLmgKaW5kZXggZWQ0Y2NlYy4uODVmZDI3NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY202M3h4X3JlZ3MuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTYzeHhfcmVncy5oCkBAIC03NzAsNCArNzcwLDMgQEAKICNkZWZpbmUgRE1JUFNQTExDRkdfTjJfTUFTSwkJKDB4NyA8PCBETUlQU1BMTENGR19OMl9TSElGVCkKIAogI2VuZGlmIC8qIEJDTTYzWFhfUkVHU19IXyAqLwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1jYXZpdW0tb2N0ZW9uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtY2F2aXVtLW9jdGVvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAppbmRleCA0MjVlNzA4Li5iYmYwNTQwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1jYXZpdW0tb2N0ZW9uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWNhdml1bS1vY3Rlb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTU4LDYgKzU4LDkgQEAKICNkZWZpbmUgY3B1X2hhc192aW50CQkwCiAjZGVmaW5lIGNwdV9oYXNfdmVpYwkJMAogI2RlZmluZSBjcHVfaHdyZW5hX2ltcGxfYml0cwkweGMwMDAwMDAwCisKKyNkZWZpbmUga2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgKGNwdV9kYXRhWzBdLmNwdXR5cGUgPT0gQ1BVX0NBVklVTV9PQ1RFT05fUExVUykKKwogI2RlZmluZSBBUkNIX0hBU19SRUFEX0NVUlJFTlRfVElNRVIgMQogI2RlZmluZSBBUkNIX0hBU19JUlFfUEVSX0NQVQkxCiAjZGVmaW5lIEFSQ0hfSEFTX1NQSU5MT0NLX1BSRUZFVENIIDEKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9iY3NyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvYmNzci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOGQyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvYmNzci5oCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogYmNzci5oIC0tIERiMXh4eC9QYjF4eHggRGV2Ym9hcmQgQ1BMRCByZWdpc3RlcnMgKCJCQ1NSIikgYWJzdHJhY3Rpb24uCisgKgorICogQWxsIEFsY2hlbXkgZGV2ZWxvcG1lbnQgYm9hcmRzIChleGNlcHQsIG9mIGNvdXJzZSwgdGhlIHdlaXJkIFBCMTAwMCkKKyAqIGhhdmUgYSBmZXcgcmVnaXN0ZXJzIGluIGEgQ1BMRCB3aXRoIHN0YW5kYXJkaXNlZCBsYXlvdXQ7IHRoZXkgbW9zdGx5CisgKiBvbmx5IGRpZmZlciBpbiBiYXNlIGFkZHJlc3MgYW5kIGJpdCBtZWFuaW5ncyBpbiB0aGUgUkVTRVRTIGFuZCBCT0FSRAorICogcmVnaXN0ZXJzLgorICoKKyAqIEFsbCBkYXRhIHRha2VuIGZyb20gdGhlIG9mZmljaWFsIEFNRCBib2FyZCBkb2N1bWVudGF0aW9uIHNoZWV0cy4KKyAqLworCisjaWZuZGVmIF9EQjFYWFhfQkNTUl9IXworI2RlZmluZSBfREIxWFhYX0JDU1JfSF8KKworCisvKiBCQ1NSIGJhc2UgYWRkcmVzc2VzIG9uIHZhcmlvdXMgYm9hcmRzLiBCQ1NSIGJhc2UgMiByZWZlcnMgdG8gdGhlCisgKiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBIRVhMRURTIHJlZ2lzdGVyLCB3aGljaCBpcyB1c3VhbGx5CisgKiBhIHZhcmlhYmxlIG9mZnNldCBmcm9tIHRoZSBXSE9BTUkgcmVnaXN0ZXIuCisgKi8KKworLyogREIxMDAwLCBEQjExMDAsIERCMTUwMCwgUEIxMTAwLCBQQjE1MDAgKi8KKyNkZWZpbmUgREIxMDAwX0JDU1JfUEhZU19BRERSCTB4MEUwMDAwMDAKKyNkZWZpbmUgREIxMDAwX0JDU1JfSEVYTEVEX09GUwkweDAxMDAwMDAwCisKKyNkZWZpbmUgREIxNTUwX0JDU1JfUEhZU19BRERSCTB4MEYwMDAwMDAKKyNkZWZpbmUgREIxNTUwX0JDU1JfSEVYTEVEX09GUwkweDAwNDAwMDAwCisKKyNkZWZpbmUgUEIxNTUwX0JDU1JfUEhZU19BRERSCTB4MEYwMDAwMDAKKyNkZWZpbmUgUEIxNTUwX0JDU1JfSEVYTEVEX09GUwkweDAwODAwMDAwCisKKyNkZWZpbmUgREIxMjAwX0JDU1JfUEhZU19BRERSCTB4MTk4MDAwMDAKKyNkZWZpbmUgREIxMjAwX0JDU1JfSEVYTEVEX09GUwkweDAwNDAwMDAwCisKKyNkZWZpbmUgUEIxMjAwX0JDU1JfUEhZU19BRERSCTB4MEQ4MDAwMDAKKyNkZWZpbmUgUEIxMjAwX0JDU1JfSEVYTEVEX09GUwkweDAwNDAwMDAwCisKKworZW51bSBiY3NyX2lkIHsKKwkvKiBCQ1NSIGJhc2UgMSAqLworCUJDU1JfV0hPQU1JCT0gMCwKKwlCQ1NSX1NUQVRVUywKKwlCQ1NSX1NXSVRDSEVTLAorCUJDU1JfUkVTRVRTLAorCUJDU1JfUENNQ0lBLAorCUJDU1JfQk9BUkQsCisJQkNTUl9MRURTLAorCUJDU1JfU1lTVEVNLAorCS8qIEF1MTIwMC8xMzAwIGJhc2VkIGJvYXJkcyAqLworCUJDU1JfSU5UQ0xSLAorCUJDU1JfSU5UU0VULAorCUJDU1JfTUFTS0NMUiwKKwlCQ1NSX01BU0tTRVQsCisJQkNTUl9TSUdTVEFULAorCUJDU1JfSU5UU1RBVCwKKworCS8qIEJDU1IgYmFzZSAyICovCisJQkNTUl9IRVhMRURTLAorCUJDU1JfUlNWRDEsCisJQkNTUl9IRVhDTEVBUiwKKworCUJDU1JfQ05ULAorfTsKKworLyogcmVnaXN0ZXIgb2Zmc2V0cywgdmFsaWQgZm9yIGFsbCBEYjF4eHgvUGIxeHh4IGJvYXJkcyAqLworI2RlZmluZSBCQ1NSX1JFR19XSE9BTUkJCTB4MDAKKyNkZWZpbmUgQkNTUl9SRUdfU1RBVFVTCQkweDA0CisjZGVmaW5lIEJDU1JfUkVHX1NXSVRDSEVTCTB4MDgKKyNkZWZpbmUgQkNTUl9SRUdfUkVTRVRTCQkweDBjCisjZGVmaW5lIEJDU1JfUkVHX1BDTUNJQQkJMHgxMAorI2RlZmluZSBCQ1NSX1JFR19CT0FSRAkJMHgxNAorI2RlZmluZSBCQ1NSX1JFR19MRURTCQkweDE4CisjZGVmaW5lIEJDU1JfUkVHX1NZU1RFTQkJMHgxYworLyogQXUxMjAwL0F1MTMwMCBiYXNlZCBib2FyZHM6IENQTEQgSVJRIG11eGVyICovCisjZGVmaW5lIEJDU1JfUkVHX0lOVENMUgkJMHgyMAorI2RlZmluZSBCQ1NSX1JFR19JTlRTRVQJCTB4MjQKKyNkZWZpbmUgQkNTUl9SRUdfTUFTS0NMUgkweDI4CisjZGVmaW5lIEJDU1JfUkVHX01BU0tTRVQJMHgyYworI2RlZmluZSBCQ1NSX1JFR19TSUdTVEFUCTB4MzAKKyNkZWZpbmUgQkNTUl9SRUdfSU5UU1RBVAkweDM0CisKKy8qIGhleGxlZCBjb250cm9sLCBvZmZzZXQgZnJvbSBCQ1NSIGJhc2UgMiAqLworI2RlZmluZSBCQ1NSX1JFR19IRVhMRURTCTB4MDAKKyNkZWZpbmUgQkNTUl9SRUdfSEVYQ0xFQVIJMHgwOAorCisvKgorICogUmVnaXN0ZXIgQml0cyBhbmQgUGllY2VzLgorICovCisjZGVmaW5lIEJDU1JfV0hPQU1JX0RDSUQoeCkJCSgoeCkgJiAweGYpCisjZGVmaW5lIEJDU1JfV0hPQU1JX0NQTEQoeCkJCSgoKHgpID4+IDQpICYgMHhmKQorI2RlZmluZSBCQ1NSX1dIT0FNSV9CT0FSRCh4KQkJKCgoeCkgPj4gOCkgJiAweGYpCisKKy8qIHJlZ2lzdGVyICJXSE9BTUkiIGJpdHMgMTE6OCBpZGVudGlmeSB0aGUgYm9hcmQgKi8KK2VudW0gYmNzcl93aG9hbWlfYm9hcmRzIHsKKwlCQ1NSX1dIT0FNSV9QQjE1MDAgPSAxLAorCUJDU1JfV0hPQU1JX1BCMTUwMFIyLAorCUJDU1JfV0hPQU1JX1BCMTEwMCwKKwlCQ1NSX1dIT0FNSV9EQjEwMDAsCisJQkNTUl9XSE9BTUlfREIxMTAwLAorCUJDU1JfV0hPQU1JX0RCMTUwMCwKKwlCQ1NSX1dIT0FNSV9EQjE1NTAsCisJQkNTUl9XSE9BTUlfUEIxNTUwX0REUiwKKwlCQ1NSX1dIT0FNSV9QQjE1NTAgPSBCQ1NSX1dIT0FNSV9QQjE1NTBfRERSLAorCUJDU1JfV0hPQU1JX1BCMTU1MF9TRFIsCisJQkNTUl9XSE9BTUlfUEIxMjAwX0REUjEsCisJQkNTUl9XSE9BTUlfUEIxMjAwID0gQkNTUl9XSE9BTUlfUEIxMjAwX0REUjEsCisJQkNTUl9XSE9BTUlfUEIxMjAwX0REUjIsCisJQkNTUl9XSE9BTUlfREIxMjAwLAorfTsKKworLyogU1RBVFVTIHJlZy4gIFVubGVzcyBvdGhlcndpc2Ugbm90ZWQsIHRoZXkncmUgdmFsaWQgb24gYWxsIGJvYXJkcy4KKyAqIFBCMTIwMCA9IERCMTIwMC4KKyAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19QQzBWUwkJMHgwMDAzCisjZGVmaW5lIEJDU1JfU1RBVFVTX1BDMVZTCQkweDAwMEMKKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEMwRkkJCTB4MDAxMAorI2RlZmluZSBCQ1NSX1NUQVRVU19QQzFGSQkJMHgwMDIwCisjZGVmaW5lIEJDU1JfU1RBVFVTX1BCMTU1MF9TV0FQQk9PVAkweDAwNDAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfU1JBTVdJRFRICQkweDAwODAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfRkxBU0hCVVNZCQkweDAxMDAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfUk9NQlVTWQkJMHgwNDAwCisjZGVmaW5lIEJDU1JfU1RBVFVTX1NEMFdQCQkweDA0MDAJLyogREIxMjAwICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX1NEMVdQCQkweDA4MDAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfVVNCT1RHSUQJCTB4MDgwMAkvKiBQQi9EQjE1NTAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfREIxMDAwX1NXQVBCT09UCTB4MjAwMAorI2RlZmluZSBCQ1NSX1NUQVRVU19EQjEyMDBfU1dBUEJPT1QJMHgwMDQwCS8qIERCMTIwMCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19JREVDQkxJRAkJMHgwMjAwCS8qIERCMTIwMCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19EQjEyMDBfVTBSWEQJMHgxMDAwCS8qIERCMTIwMCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19EQjEyMDBfVTFSWEQJMHgyMDAwCS8qIERCMTIwMCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19GTEFTSERFTgkJMHhDMDAwCisjZGVmaW5lIEJDU1JfU1RBVFVTX0RCMTU1MF9VMFJYRAkweDEwMDAJLyogREIxNTUwICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX0RCMTU1MF9VM1JYRAkweDIwMDAJLyogREIxNTUwICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX1BCMTU1MF9VMFJYRAkweDEwMDAJLyogUEIxNTUwICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX1BCMTU1MF9VMVJYRAkweDIwMDAJLyogUEIxNTUwICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX1BCMTU1MF9VM1JYRAkweDgwMDAJLyogUEIxNTUwICovCisKKworLyogREIvUEIxMDAwLDExMDAsMTUwMCwxNTUwICovCisjZGVmaW5lIEJDU1JfUkVTRVRTX1BIWTAJCTB4MDAwMQorI2RlZmluZSBCQ1NSX1JFU0VUU19QSFkxCQkweDAwMDIKKyNkZWZpbmUgQkNTUl9SRVNFVFNfREMJCQkweDAwMDQKKyNkZWZpbmUgQkNTUl9SRVNFVFNfRklSX1NFTAkJMHgyMDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9NQVNLCTB4QzAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfRlVMTAkweDAwMDAKKyNkZWZpbmUgQkNTUl9SRVNFVFNfUEIxNTUwX1dTQ0ZTTQkweDIwMDAKKyNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX09GRgkweDQwMDAKKyNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFXzJfMwkweDgwMDAKKyNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFXzFfMwkweEMwMDAKKyNkZWZpbmUgQkNTUl9SRVNFVFNfRE1BUkVRCQkweDgwMDAJLyogUEIxNTUwICovCisKKyNkZWZpbmUgQkNTUl9CT0FSRF9QQ0lNNjZFTgkJMHgwMDAxCisjZGVmaW5lIEJDU1JfQk9BUkRfU0QwUFdSCQkweDAwNDAKKyNkZWZpbmUgQkNTUl9CT0FSRF9TRDFQV1IJCTB4MDA4MAorI2RlZmluZSBCQ1NSX0JPQVJEX1BDSU0zMwkJMHgwMTAwCisjZGVmaW5lIEJDU1JfQk9BUkRfUENJRVhUQVJCCQkweDAyMDAKKyNkZWZpbmUgQkNTUl9CT0FSRF9HUElPMjAwUlNUCQkweDA0MDAKKyNkZWZpbmUgQkNTUl9CT0FSRF9QQ0lDTEtPVVQJCTB4MDgwMAorI2RlZmluZSBCQ1NSX0JPQVJEX1BDSUNGRwkJMHgxMDAwCisjZGVmaW5lIEJDU1JfQk9BUkRfU1BJU0VMCQkweDQwMDAJLyogUEIvREIxNTUwICovCisjZGVmaW5lIEJDU1JfQk9BUkRfU0QwV1AJCTB4NDAwMAkvKiBEQjExMDAgKi8KKyNkZWZpbmUgQkNTUl9CT0FSRF9TRDFXUAkJMHg4MDAwCS8qIERCMTEwMCAqLworCisKKy8qIERCL1BCMTIwMCAqLworI2RlZmluZSBCQ1NSX1JFU0VUU19FVEgJCQkweDAwMDEKKyNkZWZpbmUgQkNTUl9SRVNFVFNfQ0FNRVJBCQkweDAwMDIKKyNkZWZpbmUgQkNTUl9SRVNFVFNfREMJCQkweDAwMDQKKyNkZWZpbmUgQkNTUl9SRVNFVFNfSURFCQkJMHgwMDA4CisjZGVmaW5lIEJDU1JfUkVTRVRTX1RWCQkJMHgwMDEwCS8qIERCMTIwMCAqLworLyogTm90IHJlc2V0cyBidXQgaW4gdGhlIHNhbWUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQkNTUl9SRVNFVFNfUFdNUjFNVVgJCTB4MDgwMAkvKiBEQjEyMDAgKi8KKyNkZWZpbmUgQkNTUl9SRVNFVFNfUEIxMjAwX1dTQ0ZTTQkweDA4MDAJLyogUEIxMjAwICovCisjZGVmaW5lIEJDU1JfUkVTRVRTX1BTQzBNVVgJCTB4MTAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19QU0MxTVVYCQkweDIwMDAKKyNkZWZpbmUgQkNTUl9SRVNFVFNfU1BJU0VMCQkweDQwMDAKKyNkZWZpbmUgQkNTUl9SRVNFVFNfU0QxTVVYCQkweDgwMDAJLyogUEIxMjAwICovCisKKyNkZWZpbmUgQkNTUl9CT0FSRF9MQ0RWRUUJCTB4MDAwMQorI2RlZmluZSBCQ1NSX0JPQVJEX0xDRFZERAkJMHgwMDAyCisjZGVmaW5lIEJDU1JfQk9BUkRfTENEQkwJCTB4MDAwNAorI2RlZmluZSBCQ1NSX0JPQVJEX0NBTVNOQVAJCTB4MDAxMAorI2RlZmluZSBCQ1NSX0JPQVJEX0NBTVBXUgkJMHgwMDIwCisjZGVmaW5lIEJDU1JfQk9BUkRfU0QwUFdSCQkweDAwNDAKKworCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQCQkweDAwRkYKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMQkJMHgwMDgwCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzIJCTB4MDA0MAorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8zCQkweDAwMjAKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNAkJMHgwMDEwCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzUJCTB4MDAwOAorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF82CQkweDAwMDQKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNwkJMHgwMDAyCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzgJCTB4MDAwMQorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX1JPVEFSWQkJMHgwRjAwCisKKworI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWUFAJCTB4MDAwMworI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWQ0MJCTB4MDAwQworI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBEUlZFTgkJMHgwMDEwCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFJTVAkJMHgwMDgwCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZQUAkJMHgwMzAwCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZDQwkJMHgwQzAwCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMURSVkVOCQkweDEwMDAKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxUlNUCQkweDgwMDAKKworCisjZGVmaW5lIEJDU1JfTEVEU19ERUNJTUFMUwkJMHgwMDAzCisjZGVmaW5lIEJDU1JfTEVEU19MRUQwCQkJMHgwMTAwCisjZGVmaW5lIEJDU1JfTEVEU19MRUQxCQkJMHgwMjAwCisjZGVmaW5lIEJDU1JfTEVEU19MRUQyCQkJMHgwNDAwCisjZGVmaW5lIEJDU1JfTEVEU19MRUQzCQkJMHgwODAwCisKKworI2RlZmluZSBCQ1NSX1NZU1RFTV9SRVNFVAkJMHg4MDAwCS8qIGNsZWFyIHRvIHJlc2V0ICovCisjZGVmaW5lIEJDU1JfU1lTVEVNX1BXUk9GRgkJMHg0MDAwCS8qIHNldCB0byBwb3dlciBvZmYgKi8KKyNkZWZpbmUgQkNTUl9TWVNURU1fVkRESQkJMHgwMDFGCS8qIFBCMXh4eCBib2FyZHMgKi8KKworCisKKworLyogaW5pdGlhbGl6ZSBCQ1NSIGZvciBhIGJvYXJkLiBQcm92aWRlIHRoZSBQSFlTSUNBTCBhZGRyZXNzZXMgb2YgYm90aAorICogQkNTUiBzcGFjZXMuCisgKi8KK3ZvaWQgX19pbml0IGJjc3JfaW5pdCh1bnNpZ25lZCBsb25nIGJjc3IxX3BoeXMsIHVuc2lnbmVkIGxvbmcgYmNzcjJfcGh5cyk7CisKKy8qIHJlYWQgYSBib2FyZCByZWdpc3RlciAqLwordW5zaWduZWQgc2hvcnQgYmNzcl9yZWFkKGVudW0gYmNzcl9pZCByZWcpOworCisvKiB3cml0ZSB0byBhIGJvYXJkIHJlZ2lzdGVyICovCit2b2lkIGJjc3Jfd3JpdGUoZW51bSBiY3NyX2lkIHJlZywgdW5zaWduZWQgc2hvcnQgdmFsKTsKKworLyogbW9kaWZ5IGEgcmVnaXN0ZXIuIGNsZWFyIGJpdHMgc2V0IGluICdjbHInLCBzZXQgYml0cyBzZXQgaW4gJ3NldCcgKi8KK3ZvaWQgYmNzcl9tb2QoZW51bSBiY3NyX2lkIHJlZywgdW5zaWduZWQgc2hvcnQgY2xyLCB1bnNpZ25lZCBzaG9ydCBzZXQpOworCisvKiBpbnN0YWxsIENQTEQgSVJRIGRlbXV4ZXIgKERCMTIwMC9QQjEyMDApICovCit2b2lkIF9faW5pdCBiY3NyX2luaXRfaXJxKGludCBjc2Nfc3RhcnQsIGludCBjc2NfZW5kLCBpbnQgaG9va19pcnEpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9kYjEyMDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9kYjEyMDAuaAppbmRleCAyN2YyNjEwLi4zNDA0MjQ4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvZGIxMjAwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2RiMTIwMC5oCkBAIC0yNSwxMzMgKzI1LDkgQEAKICNkZWZpbmUgX19BU01fREIxMjAwX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHhfcHNjLmg+CiAKLSNkZWZpbmUgREJETUFfQUM5N19UWF9DSEFOCURTQ1JfQ01EMF9QU0MxX1RYCi0jZGVmaW5lIERCRE1BX0FDOTdfUlhfQ0hBTglEU0NSX0NNRDBfUFNDMV9SWAotI2RlZmluZSBEQkRNQV9JMlNfVFhfQ0hBTglEU0NSX0NNRDBfUFNDMV9UWAotI2RlZmluZSBEQkRNQV9JMlNfUlhfQ0hBTglEU0NSX0NNRDBfUFNDMV9SWAotCi0vKgotICogU1BJIGFuZCBTTUIgYXJlIG11eGVkIG9uIHRoZSBEQkF1MTIwMCBib2FyZC4KLSAqIFJlZmVyIHRvIGJvYXJkIGRvY3VtZW50YXRpb24uCi0gKi8KLSNkZWZpbmUgU1BJX1BTQ19CQVNFCQlQU0MwX0JBU0VfQUREUgotI2RlZmluZSBTTUJVU19QU0NfQkFTRQkJUFNDMF9CQVNFX0FERFIKLS8qCi0gKiBBQyc5NyBhbmQgSTJTIGFyZSBtdXhlZCBvbiB0aGUgREJBdTEyMDAgYm9hcmQuCi0gKiBSZWZlciB0byBib2FyZCBkb2N1bWVudGF0aW9uLgotICovCi0jZGVmaW5lIEFDOTdfUFNDX0JBU0UJCVBTQzFfQkFTRV9BRERSCi0jZGVmaW5lIEkyU19QU0NfQkFTRQkJUFNDMV9CQVNFX0FERFIKLQotI2RlZmluZSBCQ1NSX0tTRUcxX0FERFIgCTB4Qjk4MDAwMDAKLQotdHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QKLXsKLQkvKjAwKi8JdTE2IHdob2FtaTsKLQkJdTE2IHJlc2VydmVkMDsKLQkvKjA0Ki8JdTE2IHN0YXR1czsKLQkJdTE2IHJlc2VydmVkMTsKLQkvKjA4Ki8JdTE2IHN3aXRjaGVzOwotCQl1MTYgcmVzZXJ2ZWQyOwotCS8qMEMqLwl1MTYgcmVzZXRzOwotCQl1MTYgcmVzZXJ2ZWQzOwotCi0JLyoxMCovCXUxNiBwY21jaWE7Ci0JCXUxNiByZXNlcnZlZDQ7Ci0JLyoxNCovCXUxNiBib2FyZDsKLQkJdTE2IHJlc2VydmVkNTsKLQkvKjE4Ki8JdTE2IGRpc2tfbGVkczsKLQkJdTE2IHJlc2VydmVkNjsKLQkvKjFDKi8JdTE2IHN5c3RlbTsKLQkJdTE2IHJlc2VydmVkNzsKLQotCS8qMjAqLwl1MTYgaW50Y2xyOwotCQl1MTYgcmVzZXJ2ZWQ4OwotCS8qMjQqLwl1MTYgaW50c2V0OwotCQl1MTYgcmVzZXJ2ZWQ5OwotCS8qMjgqLwl1MTYgaW50Y2xyX21hc2s7Ci0JCXUxNiByZXNlcnZlZDEwOwotCS8qMkMqLwl1MTYgaW50c2V0X21hc2s7Ci0JCXUxNiByZXNlcnZlZDExOwotCi0JLyozMCovCXUxNiBzaWdfc3RhdHVzOwotCQl1MTYgcmVzZXJ2ZWQxMjsKLQkvKjM0Ki8JdTE2IGludF9zdGF0dXM7Ci0JCXUxNiByZXNlcnZlZDEzOwotCS8qMzgqLwl1MTYgcmVzZXJ2ZWQxNDsKLQkJdTE2IHJlc2VydmVkMTU7Ci0JLyozQyovCXUxNiByZXNlcnZlZDE2OwotCQl1MTYgcmVzZXJ2ZWQxNzsKLQotfSBCQ1NSOwotCi1zdGF0aWMgQkNTUiAqIGNvbnN0IGJjc3IgPSAoQkNTUiAqKUJDU1JfS1NFRzFfQUREUjsKLQotLyoKLSAqIFJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIEJDU1JzCi0gKi8KLSNkZWZpbmUgQkNTUl9XSE9BTUlfRENJRAkweDAwMEYKLSNkZWZpbmUgQkNTUl9XSE9BTUlfQ1BMRAkweDAwRjAKLSNkZWZpbmUgQkNTUl9XSE9BTUlfQk9BUkQJMHgwRjAwCi0KLSNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMFZTCTB4MDAwMwotI2RlZmluZSBCQ1NSX1NUQVRVU19QQ01DSUExVlMJMHgwMDBDCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1NXQVBCT09UCTB4MDA0MAotI2RlZmluZSBCQ1NSX1NUQVRVU19GTEFTSEJVU1kJMHgwMTAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX0lERUNCTElECTB4MDIwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19TRDBXUAkweDA0MDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfVTBSWEQJMHgxMDAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1UxUlhECTB4MjAwMAotCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfT0NUQUwJMHgwMEZGCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzEJMHgwMDgwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzIJMHgwMDQwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzMJMHgwMDIwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzQJMHgwMDEwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzUJMHgwMDA4Ci0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzYJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzcJMHgwMDAyCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzgJMHgwMDAxCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfUk9UQVJZCTB4MEYwMAotCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0VUSAkJMHgwMDAxCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0NBTUVSQQkweDAwMDIKLSNkZWZpbmUgQkNTUl9SRVNFVFNfREMJCTB4MDAwNAotI2RlZmluZSBCQ1NSX1JFU0VUU19JREUJCTB4MDAwOAotI2RlZmluZSBCQ1NSX1JFU0VUU19UVgkJMHgwMDEwCi0vKiBOb3QgcmVzZXRzIGJ1dCBpbiB0aGUgc2FtZSByZWdpc3RlciAqLwotI2RlZmluZSBCQ1NSX1JFU0VUU19QV01SMU1VWAkweDA4MDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfUENTME1VWAkweDEwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfUENTMU1VWAkweDIwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfU1BJU0VMCTB4NDAwMAotCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZQUAkweDAwMDMKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVkNDCTB4MDAwQwotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBEUlZFTgkweDAwMTAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwUlNUCTB4MDA4MAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWUFAJMHgwMzAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZDQwkweDBDMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxRFJWRU4JMHgxMDAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVJTVAkweDgwMDAKLQotI2RlZmluZSBCQ1NSX0JPQVJEX0xDRFZFRQkweDAwMDEKLSNkZWZpbmUgQkNTUl9CT0FSRF9MQ0RWREQJMHgwMDAyCi0jZGVmaW5lIEJDU1JfQk9BUkRfTENEQkwJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfQk9BUkRfQ0FNU05BUAkweDAwMTAKLSNkZWZpbmUgQkNTUl9CT0FSRF9DQU1QV1IJMHgwMDIwCi0jZGVmaW5lIEJDU1JfQk9BUkRfU0QwUFdSCTB4MDA0MAotCi0jZGVmaW5lIEJDU1JfTEVEU19ERUNJTUFMUwkweDAwMDMKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDAJCTB4MDEwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMQkJMHgwMjAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQyCQkweDA0MDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDMJCTB4MDgwMAotCi0jZGVmaW5lIEJDU1JfU1lTVEVNX1BPV0VST0ZGCTB4NDAwMAotI2RlZmluZSBCQ1NSX1NZU1RFTV9SRVNFVAkweDgwMDAKLQogLyogQml0IHBvc2l0aW9ucyBmb3IgdGhlIGRpZmZlcmVudCBpbnRlcnJ1cHQgc291cmNlcyAqLwogI2RlZmluZSBCQ1NSX0lOVF9JREUJCTB4MDAwMQogI2RlZmluZSBCQ1NSX0lOVF9FVEgJCTB4MDAwMgpAQCAtMTY4LDE3ICs0NCwxNSBAQAogI2RlZmluZSBCQ1NSX0lOVF9TRDBJTlNFUlQJMHgxMDAwCiAjZGVmaW5lIEJDU1JfSU5UX1NEMEVKRUNUCTB4MjAwMAogCi0jZGVmaW5lIFNNQzkxQzExMV9QSFlTX0FERFIJMHgxOTAwMDMwMAotI2RlZmluZSBTTUM5MUMxMTFfSU5UCQlEQjEyMDBfRVRIX0lOVAotCiAjZGVmaW5lIElERV9QSFlTX0FERFIJCTB4MTg4MDAwMDAKICNkZWZpbmUgSURFX1JFR19TSElGVAkJNQotI2RlZmluZSBJREVfUEhZU19MRU4JCSgxNiA8PCBJREVfUkVHX1NISUZUKQotI2RlZmluZSBJREVfSU5UIAkJREIxMjAwX0lERV9JTlQKICNkZWZpbmUgSURFX0RETUFfUkVRCQlEU0NSX0NNRDBfRE1BX1JFUTEKICNkZWZpbmUgSURFX1JRU0laRQkJMTI4CiAKLSNkZWZpbmUgTkFORF9QSFlTX0FERFIJCTB4MjAwMDAwMDAKKyNkZWZpbmUgREIxMjAwX0lERV9QSFlTX0FERFIJSURFX1BIWVNfQUREUgorI2RlZmluZSBEQjEyMDBfSURFX1BIWVNfTEVOCSgxNiA8PCBJREVfUkVHX1NISUZUKQorI2RlZmluZSBEQjEyMDBfRVRIX1BIWVNfQUREUgkweDE5MDAwMzAwCisjZGVmaW5lIERCMTIwMF9OQU5EX1BIWVNfQUREUgkweDIwMDAwMDAwCiAKIC8qCiAgKiBFeHRlcm5hbCBJbnRlcnJ1cHRzIGZvciBEQkF1MTIwMCBhcyBvZiA4LzYvMjAwNC4KQEAgLTE4OCw3ICs2Miw3IEBACiAgKiAgIEV4YW1wbGU6IElERSBiaXMgcG9zIGlzICA9IDY0IC0gNjQKICAqICAgICAgICAgICAgRVRIIGJpdCBwb3MgaXMgID0gNjUgLSA2NAogICovCi1lbnVtIGV4dGVybmFsX3BiMTIwMF9pbnRzIHsKK2VudW0gZXh0ZXJuYWxfZGIxMjAwX2ludHMgewogCURCMTIwMF9JTlRfQkVHSU4JPSBBVTEwMDBfTUFYX0lOVFIgKyAxLAogCiAJREIxMjAwX0lERV9JTlQJCT0gREIxMjAwX0lOVF9CRUdJTiwKQEAgLTIwOSwyMiArODMsNCBAQAogCURCMTIwMF9JTlRfRU5ECQk9IERCMTIwMF9JTlRfQkVHSU4gKyAxNSwKIH07CiAKLQotLyoKLSAqIERCQXUxMjAwIHNwZWNpZmljIFBDTUNJQSBkZWZpbmVzIGZvciBkcml2ZXJzL3BjbWNpYS9hdTEwMDBfZGIxeDAwLmMKLSAqLwotI2RlZmluZSBQQ01DSUFfTUFYX1NPQ0sgIDEKLSNkZWZpbmUgUENNQ0lBX05VTV9TT0NLUyAoUENNQ0lBX01BWF9TT0NLICsgMSkKLQotLyogVlBQL1ZDQyAqLwotI2RlZmluZSBTRVRfVkNDX1ZQUChWQ0MsIFZQUCwgU0xPVCkgXAotCSgoKChWQ0MpIDw8IDIpIHwgKChWUFApIDw8IDApKSA8PCAoKFNMT1QpICogOCkpCi0KLSNkZWZpbmUgQk9BUkRfUEMwX0lOVAlEQjEyMDBfUEMwX0lOVAotI2RlZmluZSBCT0FSRF9QQzFfSU5UCURCMTIwMF9QQzFfSU5UCi0jZGVmaW5lIEJPQVJEX0NBUkRfSU5TRVJURUQoU09DS0VUKSBiY3NyLT5zaWdfc3RhdHVzICYgKDEgPDwgKDggKyAoMiAqIFNPQ0tFVCkpKQotCi0vKiBOQU5EIGNoaXAgc2VsZWN0ICovCi0jZGVmaW5lIE5BTkRfQ1MgMQotCiAjZW5kaWYgLyogX19BU01fREIxMjAwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9kYjF4MDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9kYjF4MDAuaAppbmRleCAxYTUxNWI4Li5hOTE5ZGFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvZGIxeDAwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2RiMXgwMC5oCkBAIC00MSwxMTEgKzQxLDExIEBACiAjZGVmaW5lIFNNQlVTX1BTQ19CQVNFCQlQU0MyX0JBU0VfQUREUgogI2RlZmluZSBJMlNfUFNDX0JBU0UJCVBTQzNfQkFTRV9BRERSCiAKLSNkZWZpbmUgQkNTUl9LU0VHMV9BRERSIAkweEFGMDAwMDAwCiAjZGVmaW5lIE5BTkRfUEhZU19BRERSCQkweDIwMDAwMDAwCiAKLSNlbHNlCi0jZGVmaW5lIEJDU1JfS1NFRzFfQUREUiAweEFFMDAwMDAwCiAjZW5kaWYKIAogLyoKLSAqIE92ZXJsYXkgZGF0YSBzdHJ1Y3R1cmUgb2YgdGhlIERCQXUxeDAwIGJvYXJkIHJlZ2lzdGVycy4KLSAqIFJlZ2lzdGVycyBhcmUgbG9jYXRlZCBhdCBwaHlzaWNhbCAwRTAwMDB4eCwgS1NFRzEgMHhBRTAwMDB4eC4KLSAqLwotdHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QKLXsKLQkvKjAwKi8JdW5zaWduZWQgc2hvcnQgd2hvYW1pOwotCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkMDsKLQkvKjA0Ki8JdW5zaWduZWQgc2hvcnQgc3RhdHVzOwotCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkMTsKLQkvKjA4Ki8JdW5zaWduZWQgc2hvcnQgc3dpdGNoZXM7Ci0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQyOwotCS8qMEMqLwl1bnNpZ25lZCBzaG9ydCByZXNldHM7Ci0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQzOwotCS8qMTAqLwl1bnNpZ25lZCBzaG9ydCBwY21jaWE7Ci0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQ0OwotCS8qMTQqLwl1bnNpZ25lZCBzaG9ydCBzcGVjaWZpYzsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDU7Ci0JLyoxOCovCXVuc2lnbmVkIHNob3J0IGxlZHM7Ci0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQ2OwotCS8qMUMqLwl1bnNpZ25lZCBzaG9ydCBzd3Jlc2V0OwotCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkNzsKLQotfSBCQ1NSOwotCi0KLS8qCi0gKiBSZWdpc3Rlci9tYXNrIGJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIEJDU1JzCi0gKi8KLSNkZWZpbmUgQkNTUl9XSE9BTUlfRENJRAkJMHgwMDBGCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0NQTEQJCTB4MDBGMAotI2RlZmluZSBCQ1NSX1dIT0FNSV9CT0FSRAkJMHgwRjAwCi0KLSNkZWZpbmUgQkNTUl9TVEFUVVNfUEMwVlMJCTB4MDAwMwotI2RlZmluZSBCQ1NSX1NUQVRVU19QQzFWUwkJMHgwMDBDCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDMEZJCQkweDAwMTAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUEMxRkkJCTB4MDAyMAotI2RlZmluZSBCQ1NSX1NUQVRVU19GTEFTSEJVU1kJCTB4MDEwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19ST01CVVNZCQkweDA0MDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfU1dBUEJPT1QJCTB4MjAwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19GTEFTSERFTgkJMHhDMDAwCi0KLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVAJCTB4MDBGRgotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8xCQkweDAwODAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMgkJMHgwMDQwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzMJCTB4MDAyMAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF80CQkweDAwMTAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNQkJMHgwMDA4Ci0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzYJCTB4MDAwNAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF83CQkweDAwMDIKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfOAkJMHgwMDAxCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfUk9UQVJZCQkweDBGMDAKLQotI2RlZmluZSBCQ1NSX1JFU0VUU19QSFkwCQkweDAwMDEKLSNkZWZpbmUgQkNTUl9SRVNFVFNfUEhZMQkJMHgwMDAyCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0RDCQkJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfUkVTRVRTX0ZJUl9TRUwJCTB4MjAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfTUFTSwkweEMwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX0ZVTEwJMHgwMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9PRkYJMHg0MDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV8yXzMJMHg4MDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV8xXzMJMHhDMDAwCi0KLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVlBQCQkweDAwMDMKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVkNDCQkweDAwMEMKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwRFJWRU4JCTB4MDAxMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBSU1QJCTB4MDA4MAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWUFAJCTB4MDMwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWQ0MJCTB4MEMwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFEUlZFTgkJMHgxMDAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVJTVAkJMHg4MDAwCi0KLSNkZWZpbmUgQkNTUl9CT0FSRF9QQ0lNNjZFTgkJMHgwMDAxCi0jZGVmaW5lIEJDU1JfQk9BUkRfU0QwX1BXUgkJMHgwMDQwCi0jZGVmaW5lIEJDU1JfQk9BUkRfU0QxX1BXUgkJMHgwMDgwCi0jZGVmaW5lIEJDU1JfQk9BUkRfUENJTTMzCQkweDAxMDAKLSNkZWZpbmUgQkNTUl9CT0FSRF9HUElPMjAwUlNUCQkweDA0MDAKLSNkZWZpbmUgQkNTUl9CT0FSRF9QQ0lDRkcJCTB4MTAwMAotI2RlZmluZSBCQ1NSX0JPQVJEX1NEMF9XUAkJMHg0MDAwCi0jZGVmaW5lIEJDU1JfQk9BUkRfU0QxX1dQCQkweDgwMDAKLQotI2RlZmluZSBCQ1NSX0xFRFNfREVDSU1BTFMJCTB4MDAwMwotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMAkJCTB4MDEwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMQkJCTB4MDIwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMgkJCTB4MDQwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMwkJCTB4MDgwMAotCi0jZGVmaW5lIEJDU1JfU1dSRVNFVF9SRVNFVAkJMHgwMDgwCi0KLS8qIFBDTUNJQSBEQkF1MXgwMCBzcGVjaWZpYyBkZWZpbmVzICovCi0jZGVmaW5lIFBDTUNJQV9NQVhfU09DSyAgMQotI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTIChQQ01DSUFfTUFYX1NPQ0sgKyAxKQotCi0vKiBWUFAvVkNDICovCi0jZGVmaW5lIFNFVF9WQ0NfVlBQKFZDQywgVlBQLCBTTE9UKVwKLQkoKCgoVkNDKSA8PCAyKSB8ICgoVlBQKSA8PCAwKSkgPDwgKChTTE9UKSAqIDgpKQotCi0vKgogICogTkFORCBkZWZpbmVzCiAgKgogICogVGltaW5nIHZhbHVlcyBhcyBkZXNjcmliZWQgaW4gZGF0YWJvb2ssICogbnMgdmFsdWUgc3RyaXBwZWQgb2YgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCmluZGV4IDk5NDdlNTcuLjE2MjEwY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC0zLDcgKzMsNyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUGhpbGlwcGUgVmFjaG9uIDxwaGlsaXBwZUBjb3dwaWcuY2E+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgWmhhbmcgTGUgPHIwYmVydHpAZ2VudG9vLm9yZz4KICAqCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jczU1MzYvY3M1NTM2X3ZzbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNl92c20uaAppbmRleCA2MzA1YmVhLi4yMWM0ZWNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jczU1MzYvY3M1NTM2X3ZzbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzZfdnNtLmgKQEAgLTIsNyArMiw3IEBACiAgKiB0aGUgcmVhZC93cml0ZSBpbnRlcmZhY2VzIGZvciBWaXJ0dWFsIFN1cHBvcnQgTW9kdWxlKFZTTSkKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqLwogCiAjaWZuZGVmCV9DUzU1MzZfVlNNX0gKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2xvb25nc29uLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9sb29uZ3Nvbi5oCmluZGV4IGVlOGJjODMuLjFjZjdiMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2xvb25nc29uLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbG9vbmdzb24uaApAQCAtMSwxMiArMSwxMSBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgogICovCiAKICNpZm5kZWYgX19BU01fTUFDSF9MT09OR1NPTl9MT09OR1NPTl9ICkBAIC0yMyw3ICsyMiw3IEBACiBleHRlcm4gdm9pZCBtYWNoX3ByZXBhcmVfc2h1dGRvd24odm9pZCk7CiAKIC8qIGVudmlyb25tZW50IGFyZ3VtZW50cyBmcm9tIGJvb3Rsb2FkZXIgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIGJ1c19jbG9jaywgY3B1X2Nsb2NrX2ZyZXE7CitleHRlcm4gdW5zaWduZWQgbG9uZyBjcHVfY2xvY2tfZnJlcTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbXNpemUsIGhpZ2htZW1zaXplOwogCiAvKiBsb29uZ3Nvbi1zcGVjaWZpYyBjb21tYW5kIGxpbmUsIGVudiBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tYWNoaW5lLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tYWNoaW5lLmgKaW5kZXggYWNmODM1OS4uNDMyMTMzOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWFjaGluZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21hY2hpbmUuaApAQCAtMSw2ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuICYgSW5zdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5Ci0gKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWVtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tZW0uaAppbmRleCBlOTk2MGYzLi4zYjIzZWU4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tZW0uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tZW0uaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vcGNpLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9wY2kuaAppbmRleCBhMTk5YTRmLi5iYzk5ZGFiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9wY2kuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9wY2kuaApAQCAtMSwyMyArMSwxMiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwOCBaaGFuZyBMZSA8cjBiZXJ0ekBnZW50b28ub3JnPgotICogQ29weXJpZ2h0IChjKSAyMDA5IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAogICogYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCiAgKiBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKLSAqIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKLSAqIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCi0gKiBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BCi0gKiAwMjEzOSwgVVNBLgogICovCiAKICNpZm5kZWYgX19BU01fTUFDSF9MT09OR1NPTl9QQ0lfSF8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjExMDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjExMDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFhNjBmMS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMTAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgotICogQWxjaGVteSBTZW1pIFBiMTEwMCBSZWZlcnJlbmNlIEJvYXJkCi0gKgotICogQ29weXJpZ2h0IDIwMDEsIDIwMDggTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqCi0gKi8KLSNpZm5kZWYgX19BU01fUEIxMTAwX0gKLSNkZWZpbmUgX19BU01fUEIxMTAwX0gKLQotI2RlZmluZSBQQjExMDBfSURFTlQJCTB4QUUwMDAwMDAKLSNkZWZpbmUgQk9BUkRfU1RBVFVTX1JFRwkweEFFMDAwMDA0Ci0jICBkZWZpbmUgUEIxMTAwX1JPTV9TRUwJKDEgPDwgMTUpCi0jICBkZWZpbmUgUEIxMTAwX1JPTV9TSVoJKDEgPDwgMTQpCi0jICBkZWZpbmUgUEIxMTAwX1NXQVBfQk9PVAkoMSA8PCAxMykKLSMgIGRlZmluZSBQQjExMDBfRkxBU0hfV1AJKDEgPDwgMTIpCi0jICBkZWZpbmUgUEIxMTAwX1JPTV9IX1NUUwkoMSA8PCAxMSkKLSMgIGRlZmluZSBQQjExMDBfUk9NX0xfU1RTCSgxIDw8IDEwKQotIyAgZGVmaW5lIFBCMTEwMF9GTEFTSF9IX1NUUwkoMSA8PCA5KQotIyAgZGVmaW5lIFBCMTEwMF9GTEFTSF9MX1NUUwkoMSA8PCA4KQotIyAgZGVmaW5lIFBCMTEwMF9TUkFNX1NJWgkoMSA8PCA3KQotIyAgZGVmaW5lIFBCMTEwMF9UU0NfQlVTWQkoMSA8PCA2KQotIyAgZGVmaW5lIFBCMTEwMF9QQ01DSUFfVlNfTUFTSyAoMyA8PCA0KQotIyAgZGVmaW5lIFBCMTEwMF9SUzIzMl9DRAkoMSA8PCAzKQotIyAgZGVmaW5lIFBCMTEwMF9SUzIzMl9DVFMJKDEgPDwgMikKLSMgIGRlZmluZSBQQjExMDBfUlMyMzJfRFNSCSgxIDw8IDEpCi0jICBkZWZpbmUgUEIxMTAwX1JTMjMyX1JJCSgxIDw8IDApCi0KLSNkZWZpbmUgUEIxMTAwX0lSREFfUlMyMzIJMHhBRTAwMDAwQwotIyAgZGVmaW5lIFBCMTEwMF9JUkRBX0ZVTEwJKDAgPDwgMTQpCS8qIGZ1bGwgcG93ZXIJCSovCi0jICBkZWZpbmUgUEIxMTAwX0lSREFfU0hVVERPV04JKDEgPDwgMTQpCi0jICBkZWZpbmUgUEIxMTAwX0lSREFfVFQJKDIgPDwgMTQpCS8qIDIvMyBwb3dlcgkJKi8KLSMgIGRlZmluZSBQQjExMDBfSVJEQV9PVAkoMyA8PCAxNCkJLyogMS8zIHBvd2VyCQkqLwotIyAgZGVmaW5lIFBCMTEwMF9JUkRBX0ZJUgkoMSA8PCAxMykKLQotI2RlZmluZSBQQ01DSUFfQk9BUkRfUkVHCTB4QUUwMDAwMTAKLSMgIGRlZmluZSBQQjExMDBfU0RfV1AxX1JPCSgxIDw8IDE1KQkvKiByZWFkIG9ubHkJCSovCi0jICBkZWZpbmUgUEIxMTAwX1NEX1dQMF9STwkoMSA8PCAxNCkJLyogcmVhZCBvbmx5CQkqLwotIyAgZGVmaW5lIFBCMTEwMF9TRF9QV1IxCSgxIDw8IDExKQkvKiBhcHBsaWVzIHBvd2VyIHRvIFNEMSAqLwotIyAgZGVmaW5lIFBCMTEwMF9TRF9QV1IwCSgxIDw8IDEwKQkvKiBhcHBsaWVzIHBvd2VyIHRvIFNEMCAqLwotIyAgZGVmaW5lIFBCMTEwMF9TRUxfU0RfQ09OTjEJKDEgPDwgOSkKLSMgIGRlZmluZSBQQjExMDBfU0VMX1NEX0NPTk4wCSgxIDw8IDgpCi0jICBkZWZpbmUgUENfREVBU1NFUlRfUlNUCSgxIDw8IDcpCi0jICBkZWZpbmUgUENfRFJWX0VOCQkoMSA8PCA0KQotCi0jZGVmaW5lIFBCMTEwMF9HX0NPTlRST0wJMHhBRTAwMDAxNAkvKiBncmFwaGljcyBjb250cm9sCSovCi0KLSNkZWZpbmUgUEIxMTAwX1JTVF9WRERJIAkweEFFMDAwMDFDCi0jICBkZWZpbmUgUEIxMTAwX1NPRlRfUkVTRVQJKDEgPDwgMTUpCS8qIGNsZWFyIHRvIHJlc2V0IHRoZSBib2FyZCAqLwotIyAgZGVmaW5lIFBCMTEwMF9WRERJX01BU0sJMHgxRgotCi0jZGVmaW5lIFBCMTEwMF9MRURTCQkweEFFMDAwMDE4Ci0KLS8qCi0gKiAxMTo4IGlzIDQgZGlzY3JlZXQgTEVEcy4gQ2xlYXJpbmcgYSBiaXQgaWxsdW1pbmF0ZXMgdGhlIExFRC4KLSAqIDc6MCAgaXMgdGhlIExFRCBEaXNwbGF5J3MgZGVjaW1hbCBwb2ludHMuCi0gKi8KLSNkZWZpbmUgUEIxMTAwX0hFWF9MRUQJCTB4QUUwMDAwMTgKLQotLyogUENNQ0lBIFBiMTEwMCBzcGVjaWZpYyBkZWZpbmVzICovCi0jZGVmaW5lIFBDTUNJQV9NQVhfU09DSyAgMAotI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTIChQQ01DSUFfTUFYX1NPQ0sgKyAxKQotCi0vKiBWUFAvVkNDICovCi0jZGVmaW5lIFNFVF9WQ0NfVlBQKFZDQywgVlBQKSAoKChWQ0MpIDw8IDIpIHwgKChWUFApIDw8IDApKQotCi0jZW5kaWYgLyogX19BU01fUEIxMTAwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjEyMDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjEyMDAuaAppbmRleCBjODYxOGRmLi45NjJlYjU1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMjAwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTIwMC5oCkBAIC0yNSw2ICsyNSw3IEBACiAjZGVmaW5lIF9fQVNNX1BCMTIwMF9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X3BzYy5oPgogCiAjZGVmaW5lIERCRE1BX0FDOTdfVFhfQ0hBTglEU0NSX0NNRDBfUFNDMV9UWApAQCAtNDMsMTEzICs0NCw4IEBACiAgKiBSZWZlciB0byBib2FyZCBkb2N1bWVudGF0aW9uLgogICovCiAjZGVmaW5lIEFDOTdfUFNDX0JBU0UgICAgICAgUFNDMV9CQVNFX0FERFIKLSNkZWZpbmUgSTJTX1BTQ19CQVNFCQlQU0MxX0JBU0VfQUREUgorI2RlZmluZSBJMlNfUFNDX0JBU0UJUFNDMV9CQVNFX0FERFIKIAotI2RlZmluZSBCQ1NSX0tTRUcxX0FERFIgMHhBRDgwMDAwMAotCi10eXBlZGVmIHZvbGF0aWxlIHN0cnVjdAotewotCS8qMDAqLwl1MTYgd2hvYW1pOwotCQl1MTYgcmVzZXJ2ZWQwOwotCS8qMDQqLwl1MTYgc3RhdHVzOwotCQl1MTYgcmVzZXJ2ZWQxOwotCS8qMDgqLwl1MTYgc3dpdGNoZXM7Ci0JCXUxNiByZXNlcnZlZDI7Ci0JLyowQyovCXUxNiByZXNldHM7Ci0JCXUxNiByZXNlcnZlZDM7Ci0KLQkvKjEwKi8JdTE2IHBjbWNpYTsKLQkJdTE2IHJlc2VydmVkNDsKLQkvKjE0Ki8JdTE2IGJvYXJkOwotCQl1MTYgcmVzZXJ2ZWQ1OwotCS8qMTgqLwl1MTYgZGlza19sZWRzOwotCQl1MTYgcmVzZXJ2ZWQ2OwotCS8qMUMqLwl1MTYgc3lzdGVtOwotCQl1MTYgcmVzZXJ2ZWQ3OwotCi0JLyoyMCovCXUxNiBpbnRjbHI7Ci0JCXUxNiByZXNlcnZlZDg7Ci0JLyoyNCovCXUxNiBpbnRzZXQ7Ci0JCXUxNiByZXNlcnZlZDk7Ci0JLyoyOCovCXUxNiBpbnRjbHJfbWFzazsKLQkJdTE2IHJlc2VydmVkMTA7Ci0JLyoyQyovCXUxNiBpbnRzZXRfbWFzazsKLQkJdTE2IHJlc2VydmVkMTE7Ci0KLQkvKjMwKi8JdTE2IHNpZ19zdGF0dXM7Ci0JCXUxNiByZXNlcnZlZDEyOwotCS8qMzQqLwl1MTYgaW50X3N0YXR1czsKLQkJdTE2IHJlc2VydmVkMTM7Ci0JLyozOCovCXUxNiByZXNlcnZlZDE0OwotCQl1MTYgcmVzZXJ2ZWQxNTsKLQkvKjNDKi8JdTE2IHJlc2VydmVkMTY7Ci0JCXUxNiByZXNlcnZlZDE3OwotCi19IEJDU1I7Ci0KLXN0YXRpYyBCQ1NSICogY29uc3QgYmNzciA9IChCQ1NSICopQkNTUl9LU0VHMV9BRERSOwotCi0vKgotICogUmVnaXN0ZXIgYml0IGRlZmluaXRpb25zIGZvciB0aGUgQkNTUnMKLSAqLwotI2RlZmluZSBCQ1NSX1dIT0FNSV9EQ0lECTB4MDAwRgotI2RlZmluZSBCQ1NSX1dIT0FNSV9DUExECTB4MDBGMAotI2RlZmluZSBCQ1NSX1dIT0FNSV9CT0FSRAkweDBGMDAKLQotI2RlZmluZSBCQ1NSX1NUQVRVU19QQ01DSUEwVlMJMHgwMDAzCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDTUNJQTFWUwkweDAwMEMKLSNkZWZpbmUgQkNTUl9TVEFUVVNfU1dBUEJPT1QJMHgwMDQwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX0ZMQVNIQlVTWQkweDAxMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfSURFQ0JMSUQJMHgwMjAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1NEMFdQCTB4MDQwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19TRDFXUAkweDA4MDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfVTBSWEQJMHgxMDAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1UxUlhECTB4MjAwMAotCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfT0NUQUwJMHgwMEZGCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzEJMHgwMDgwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzIJMHgwMDQwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzMJMHgwMDIwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzQJMHgwMDEwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzUJMHgwMDA4Ci0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzYJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzcJMHgwMDAyCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzgJMHgwMDAxCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfUk9UQVJZCTB4MEYwMAotCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0VUSAkJMHgwMDAxCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0NBTUVSQQkweDAwMDIKLSNkZWZpbmUgQkNTUl9SRVNFVFNfREMJCTB4MDAwNAotI2RlZmluZSBCQ1NSX1JFU0VUU19JREUJCTB4MDAwOAotLyogbm90IHJlc2V0cyBidXQgaW4gdGhlIHNhbWUgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgQkNTUl9SRVNFVFNfV1NDRlNNCTB4MDgwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19QQ1MwTVVYCTB4MTAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19QQ1MxTVVYCTB4MjAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19TUElTRUwJMHg0MDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1NEMU1VWAkweDgwMDAKLQotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWUFAJMHgwMDAzCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZDQwkweDAwMEMKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwRFJWRU4JMHgwMDEwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFJTVAkweDAwODAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVlBQCTB4MDMwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWQ0MJMHgwQzAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMURSVkVOCTB4MTAwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFSU1QJMHg4MDAwCi0KLSNkZWZpbmUgQkNTUl9CT0FSRF9MQ0RWRUUJMHgwMDAxCi0jZGVmaW5lIEJDU1JfQk9BUkRfTENEVkRECTB4MDAwMgotI2RlZmluZSBCQ1NSX0JPQVJEX0xDREJMCTB4MDAwNAotI2RlZmluZSBCQ1NSX0JPQVJEX0NBTVNOQVAJMHgwMDEwCi0jZGVmaW5lIEJDU1JfQk9BUkRfQ0FNUFdSCTB4MDAyMAotI2RlZmluZSBCQ1NSX0JPQVJEX1NEMFBXUgkweDAwNDAKLSNkZWZpbmUgQkNTUl9CT0FSRF9TRDFQV1IJMHgwMDgwCi0KLSNkZWZpbmUgQkNTUl9MRURTX0RFQ0lNQUxTCTB4MDBGRgotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMAkJMHgwMTAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQxCQkweDAyMDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDIJCTB4MDQwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMwkJMHgwODAwCiAKICNkZWZpbmUgQkNTUl9TWVNURU1fVkRESQkweDAwMUYKICNkZWZpbmUgQkNTUl9TWVNURU1fUE9XRVJPRkYJMHg0MDAwCkBAIC0yMzksMjAgKzEzNSw2IEBACiAJUEIxMjAwX0lOVF9FTkQJCT0gUEIxMjAwX0lOVF9CRUdJTiArIDE1CiB9OwogCi0vKgotICogUGIxMjAwIHNwZWNpZmljIFBDTUNJQSBkZWZpbmVzIGZvciBkcml2ZXJzL3BjbWNpYS9hdTEwMDBfZGIxeDAwLmMKLSAqLwotI2RlZmluZSBQQ01DSUFfTUFYX1NPQ0sgIDEKLSNkZWZpbmUgUENNQ0lBX05VTV9TT0NLUyAoUENNQ0lBX01BWF9TT0NLICsgMSkKLQotLyogVlBQL1ZDQyAqLwotI2RlZmluZSBTRVRfVkNDX1ZQUChWQ0MsIFZQUCwgU0xPVCkgXAotCSgoKChWQ0MpIDw8IDIpIHwgKChWUFApIDw8IDApKSA8PCAoKFNMT1QpICogOCkpCi0KLSNkZWZpbmUgQk9BUkRfUEMwX0lOVAlQQjEyMDBfUEMwX0lOVAotI2RlZmluZSBCT0FSRF9QQzFfSU5UCVBCMTIwMF9QQzFfSU5UCi0jZGVmaW5lIEJPQVJEX0NBUkRfSU5TRVJURUQoU09DS0VUKSBiY3NyLT5zaWdfc3RhdHVzICYgKDEgPDwgKDggKyAoMiAqIFNPQ0tFVCkpKQotCiAvKiBOQU5EIGNoaXAgc2VsZWN0ICovCiAjZGVmaW5lIE5BTkRfQ1MgMQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxNTAwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxNTAwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNTFhMmUuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTUwMC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIEFsY2hlbXkgU2VtaSBQYjE1MDAgUmVmZXJyZW5jZSBCb2FyZAotICoKLSAqIENvcHlyaWdodCAyMDAxLCAyMDA4IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KLSAqCi0gKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAqCi0gKgotICovCi0jaWZuZGVmIF9fQVNNX1BCMTUwMF9ICi0jZGVmaW5lIF9fQVNNX1BCMTUwMF9ICi0KLSNkZWZpbmUgSURFTlRfQk9BUkRfUkVHIAkweEFFMDAwMDAwCi0jZGVmaW5lIEJPQVJEX1NUQVRVU19SRUcJMHhBRTAwMDAwNAotI2RlZmluZSBQQ0lfQk9BUkRfUkVHCQkweEFFMDAwMDEwCi0jZGVmaW5lIFBDTUNJQV9CT0FSRF9SRUcJMHhBRTAwMDAxMAotIyAgZGVmaW5lIFBDX0RFQVNTRVJUX1JTVAkgICAgICAweDgwCi0jICBkZWZpbmUgUENfRFJWX0VOCQkgICAgICAweDEwCi0jZGVmaW5lIFBCMTUwMF9HX0NPTlRST0wJMHhBRTAwMDAxNAotI2RlZmluZSBQQjE1MDBfUlNUX1ZEREkgCTB4QUUwMDAwMUMKLSNkZWZpbmUgUEIxNTAwX0xFRFMJCTB4QUUwMDAwMTgKLQotI2RlZmluZSBQQjE1MDBfSEVYX0xFRAkJMHhBRjAwMDAwNAotI2RlZmluZSBQQjE1MDBfSEVYX0xFRF9CTEFOSwkweEFGMDAwMDA4Ci0KLS8qIFBDTUNJQSBQYjE1MDAgc3BlY2lmaWMgZGVmaW5lcyAqLwotI2RlZmluZSBQQ01DSUFfTUFYX1NPQ0sgIDAKLSNkZWZpbmUgUENNQ0lBX05VTV9TT0NLUyAoUENNQ0lBX01BWF9TT0NLICsgMSkKLQotLyogVlBQL1ZDQyAqLwotI2RlZmluZSBTRVRfVkNDX1ZQUChWQ0MsIFZQUCkgKCgoVkNDKSA8PCAyKSB8ICgoVlBQKSA8PCAwKSkKLQotI2VuZGlmIC8qIF9fQVNNX1BCMTUwMF9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxNTUwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxNTUwLmgKaW5kZXggNjcwNGExMS4uNTg3OTY0MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTU1MC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1NTAuaApAQCAtNDAsMTAyICs0MCw2IEBACiAjZGVmaW5lIFNNQlVTX1BTQ19CQVNFCQlQU0MyX0JBU0VfQUREUgogI2RlZmluZSBJMlNfUFNDX0JBU0UJCVBTQzNfQkFTRV9BRERSCiAKLSNkZWZpbmUgQkNTUl9QSFlTX0FERFIgMHhBRjAwMDAwMAotCi10eXBlZGVmIHZvbGF0aWxlIHN0cnVjdAotewotCS8qMDAqLwl1MTYgd2hvYW1pOwotCQl1MTYgcmVzZXJ2ZWQwOwotCS8qMDQqLwl1MTYgc3RhdHVzOwotCQl1MTYgcmVzZXJ2ZWQxOwotCS8qMDgqLwl1MTYgc3dpdGNoZXM7Ci0JCXUxNiByZXNlcnZlZDI7Ci0JLyowQyovCXUxNiByZXNldHM7Ci0JCXUxNiByZXNlcnZlZDM7Ci0JLyoxMCovCXUxNiBwY21jaWE7Ci0JCXUxNiByZXNlcnZlZDQ7Ci0JLyoxNCovCXUxNiBwY2k7Ci0JCXUxNiByZXNlcnZlZDU7Ci0JLyoxOCovCXUxNiBsZWRzOwotCQl1MTYgcmVzZXJ2ZWQ2OwotCS8qMUMqLwl1MTYgc3lzdGVtOwotCQl1MTYgcmVzZXJ2ZWQ3OwotCi19IEJDU1I7Ci0KLXN0YXRpYyBCQ1NSICogY29uc3QgYmNzciA9IChCQ1NSICopQkNTUl9QSFlTX0FERFI7Ci0KLS8qCi0gKiBSZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBCQ1NScwotICovCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0RDSUQJMHgwMDBGCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0NQTEQJMHgwMEYwCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0JPQVJECTB4MEYwMAotCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDTUNJQTBWUwkweDAwMDMKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMVZTCTB4MDAwQwotI2RlZmluZSBCQ1NSX1NUQVRVU19QQ01DSUEwRkkJMHgwMDEwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDTUNJQTFGSQkweDAwMjAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfU1dBUEJPT1QJMHgwMDQwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1NSQU1XSURUSAkweDAwODAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfRkxBU0hCVVNZCTB4MDEwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19ST01CVVNZCTB4MDIwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19VU0JPVEdJRAkweDA4MDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfVTBSWEQJMHgxMDAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1UxUlhECTB4MjAwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19VM1JYRAkweDgwMDAKLQotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX09DVEFMCTB4MDBGRgotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8xCTB4MDA4MAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8yCTB4MDA0MAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8zCTB4MDAyMAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF80CTB4MDAxMAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF81CTB4MDAwOAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF82CTB4MDAwNAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF83CTB4MDAwMgotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF84CTB4MDAwMQotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX1JPVEFSWQkweDBGMDAKLQotI2RlZmluZSBCQ1NSX1JFU0VUU19QSFkwCTB4MDAwMQotI2RlZmluZSBCQ1NSX1JFU0VUU19QSFkxCTB4MDAwMgotI2RlZmluZSBCQ1NSX1JFU0VUU19EQwkJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfUkVTRVRTX1dTQwkJMHgyMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1NQSVNFTAkweDQwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfRE1BUkVRCTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZQUAkweDAwMDMKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVkNDCTB4MDAwQwotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBEUlZFTgkweDAwMTAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwUlNUCTB4MDA4MAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWUFAJMHgwMzAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZDQwkweDBDMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxRFJWRU4JMHgxMDAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVJTVAkweDgwMDAKLQotI2RlZmluZSBCQ1NSX1BDSV9NNjZFTgkJMHgwMDAxCi0jZGVmaW5lIEJDU1JfUENJX00zMwkJMHgwMTAwCi0jZGVmaW5lIEJDU1JfUENJX0VYVEVSTkFSQgkweDAyMDAKLSNkZWZpbmUgQkNTUl9QQ0lfR1BJTzIwMFJTVAkweDA0MDAKLSNkZWZpbmUgQkNTUl9QQ0lfQ0xLT1VUCQkweDA4MDAKLSNkZWZpbmUgQkNTUl9QQ0lfQ0ZHSE9TVAkweDEwMDAKLQotI2RlZmluZSBCQ1NSX0xFRFNfREVDSU1BTFMJMHgwMEZGCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQwCQkweDAxMDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDEJCTB4MDIwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMgkJMHgwNDAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQzCQkweDA4MDAKLQotI2RlZmluZSBCQ1NSX1NZU1RFTV9WRERJCTB4MDAxRgotI2RlZmluZSBCQ1NSX1NZU1RFTV9QT1dFUk9GRgkweDQwMDAKLSNkZWZpbmUgQkNTUl9TWVNURU1fUkVTRVQJMHg4MDAwCi0KLSNkZWZpbmUgUENNQ0lBX01BWF9TT0NLICAxCi0jZGVmaW5lIFBDTUNJQV9OVU1fU09DS1MgKFBDTUNJQV9NQVhfU09DSyArIDEpCi0KLS8qIFZQUC9WQ0MgKi8KLSNkZWZpbmUgU0VUX1ZDQ19WUFAoVkNDLCBWUFAsIFNMT1QpIFwKLQkoKCgoVkNDKSA8PCAyKSB8ICgoVlBQKSA8PCAwKSkgPDwgKChTTE9UKSAqIDgpKQotCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BCMTU1MF9CT09UKSAmJiBkZWZpbmVkKENPTkZJR19NVERfUEIxNTUwX1VTRVIpCiAjZGVmaW5lIFBCMTU1MF9CT1RIX0JBTktTCiAjZWxpZiBkZWZpbmVkKENPTkZJR19NVERfUEIxNTUwX0JPT1QpICYmICFkZWZpbmVkKENPTkZJR19NVERfUEIxNTUwX1VTRVIpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wbng4MzN4L2lycS1tYXBwaW5nLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wbng4MzN4L2lycS1tYXBwaW5nLmgKaW5kZXggNjU3ZjA4OS4uNmQ3MDI2NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG54ODMzeC9pcnEtbWFwcGluZy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBueDgzM3gvaXJxLW1hcHBpbmcuaApAQCAtMTIzLDQgKzEyMywzIEBACiAjZGVmaW5lIFBOWDgzM1hfR1BJT18xNV9JTlQJCQkoUE5YODMzWF9HUElPX0lSUV9CQVNFICsgMTUpCiAKICNlbmRpZgotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2ludGVycnVwdHMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvaW50ZXJydXB0cy5oCmluZGV4IDYyOWE1NzQuLjRmZDY1MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvaW50ZXJydXB0cy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvaW50ZXJydXB0cy5oCkBAIC0yNTEsNCArMjUxLDMgQEAKIAkJCQkJCSAqIGNoYW5uZWwgMy4gKi8KICNkZWZpbmUgaXJxX21wZWdfZAkJKGliYXNlKzApIAkvKiBNUEVHIERlY29kZXIgSW50ZXJydXB0ICovCiAjZW5kaWYJLyogX0FTTV9NQUNIX1BPV0VSVFZfSU5URVJSVVBUU19IXyAqLwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oCmluZGV4IGY0YWIzMTMuLjQ5MzgyZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oCkBAIC0yNTEsNiArMjUxLDE0IEBACiAjZGVmaW5lIFBMXzI1Nk0JCTI4CiAKIC8qCisgKiBQYWdlR3JhaW4gYml0cworICovCisjZGVmaW5lIFBHX1JJRQkJKF9VTENBU1RfKDEpIDw8ICAzMSkKKyNkZWZpbmUgUEdfWElFCQkoX1VMQ0FTVF8oMSkgPDwgIDMwKQorI2RlZmluZSBQR19FTFBBCQkoX1VMQ0FTVF8oMSkgPDwgIDI5KQorI2RlZmluZSBQR19FU1AJCShfVUxDQVNUXygxKSA8PCAgMjgpCisKKy8qCiAgKiBSNHgwMCBpbnRlcnJ1cHQgZW5hYmxlIC8gY2F1c2UgYml0cwogICovCiAjZGVmaW5lIElFX1NXMCAgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgIDgpCkBAIC01NzYsNiArNTg0LDEwIEBACiAjZGVmaW5lIE1JUFNfQ09ORjNfRFNQCQkoX1VMQ0FTVF8oMSkgPDwgMTApCiAjZGVmaW5lIE1JUFNfQ09ORjNfVUxSSQkJKF9VTENBU1RfKDEpIDw8IDEzKQogCisjZGVmaW5lIE1JUFNfQ09ORjRfTU1VU0laRUVYVAkoX1VMQ0FTVF8oMjU1KSA8PCAwKQorI2RlZmluZSBNSVBTX0NPTkY0X01NVUVYVERFRgkoX1VMQ0FTVF8oMykgPDwgMTQpCisjZGVmaW5lIE1JUFNfQ09ORjRfTU1VRVhUREVGX01NVVNJWkVFWFQgKF9VTENBU1RfKDEpIDw8IDE0KQorCiAjZGVmaW5lIE1JUFNfQ09ORjdfV0lJCQkoX1VMQ0FTVF8oMSkgPDwgMzEpCiAKICNkZWZpbmUgTUlQU19DT05GN19SUFMJCShfVUxDQVNUXygxKSA8PCAyKQpAQCAtODI2LDYgKzgzOCw5IEBACiAjZGVmaW5lIHJlYWRfYzBfcGFnZW1hc2soKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDUsIDApCiAjZGVmaW5lIHdyaXRlX2MwX3BhZ2VtYXNrKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkNSwgMCwgdmFsKQogCisjZGVmaW5lIHJlYWRfYzBfcGFnZWdyYWluKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQ1LCAxKQorI2RlZmluZSB3cml0ZV9jMF9wYWdlZ3JhaW4odmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ1LCAxLCB2YWwpCisKICNkZWZpbmUgcmVhZF9jMF93aXJlZCgpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDYsIDApCiAjZGVmaW5lIHdyaXRlX2MwX3dpcmVkKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkNiwgMCwgdmFsKQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbXNjMDFfaWMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tc2MwMV9pYy5oCmluZGV4IDc5ODliOWYuLmQ5MjQwNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tc2MwMV9pYy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tc2MwMV9pYy5oCkBAIC0xNDUsNCArMTQ1LDMgQEAKIGV4dGVybiB2b2lkIGxsX21zY19pcnEodm9pZCk7CiAKICNlbmRpZiAvKiBfX0FTTV9NSVBTX0JPQVJEU19NU0MwMV9JQ19IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uaWxlNC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25pbGU0LmgKaW5kZXggYzNjYTk1OS4uYWYwZTUxYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25pbGU0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25pbGU0LmgKQEAgLTMwNyw0ICszMDcsMyBAQAogZXh0ZXJuIHZvaWQgbmlsZTRfZHVtcF9pcnFfc3RhdHVzKHZvaWQpOwkvKiBEZWJ1ZyAqLwogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24tZmVhdHVyZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24tZmVhdHVyZS5oCmluZGV4IGVmMjRhN2IuLmNiYTZmYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLWZlYXR1cmUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi1mZWF0dXJlLmgKQEAgLTk5LDYgKzk5LDggQEAKIAkJcmV0dXJuICFjdm14X2Z1c2VfcmVhZCg5MCk7CiAKIAljYXNlIE9DVEVPTl9GRUFUVVJFX1BDSUU6CisJY2FzZSBPQ1RFT05fRkVBVFVSRV9NR01UX1BPUlQ6CisJY2FzZSBPQ1RFT05fRkVBVFVSRV9SQUlEOgogCQlyZXR1cm4gT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjU2WFgpCiAJCQl8fCBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWCk7CiAKQEAgLTExMCwxMiArMTEyLDYgQEAKIAljYXNlIE9DVEVPTl9GRUFUVVJFX1RSQToKIAkJcmV0dXJuICEoT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjMwWFgpCiAJCQkgfHwgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjUwWFgpKTsKLQljYXNlIE9DVEVPTl9GRUFUVVJFX01HTVRfUE9SVDoKLQkJcmV0dXJuIE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041NlhYKQotCQkJfHwgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjUyWFgpOwotCWNhc2UgT0NURU9OX0ZFQVRVUkVfUkFJRDoKLQkJcmV0dXJuIE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041NlhYKQotCQkJfHwgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjUyWFgpOwogCWNhc2UgT0NURU9OX0ZFQVRVUkVfVVNCOgogCQlyZXR1cm4gIShPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NOMzhYWCkKIAkJCSB8fCBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONThYWCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLmgKaW5kZXggNGQwYThjNi4uY2E2MjE0YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi5oCkBAIC0yMTMsNiArMjEzLDExIEBACiAJaW50CQlkbWFfZW5naW5lOwkvKiAtMSBmb3Igbm8gRE1BICovCiB9OwogCitzdHJ1Y3Qgb2N0ZW9uX2kyY19kYXRhIHsKKwl1bnNpZ25lZCBpbnQJc3lzX2ZyZXE7CisJdW5zaWduZWQgaW50CWkyY19mcmVxOworfTsKKwogZXh0ZXJuIHZvaWQgb2N0ZW9uX3dyaXRlX2xjZChjb25zdCBjaGFyICpzKTsKIGV4dGVybiB2b2lkIG9jdGVvbl9jaGVja19jcHVfYmlzdCh2b2lkKTsKIGV4dGVybiBpbnQgb2N0ZW9uX2dldF9ib290X2RlYnVnX2ZsYWcodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCBmMjY2Mjk1Li5hYzMyNTcyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTEwNywxOCArMTA3LDYgQEAKIHR5cGVkZWYgc3RydWN0IHBhZ2UgKnBndGFibGVfdDsKIAogLyoKLSAqIEZvciAzLWxldmVsIHBhZ2V0YWJsZXMgd2UgZGVmaW5lcyB0aGVzZSBvdXJzZWx2ZXMsIGZvciAyLWxldmVsIHRoZQotICogZGVmaW5pdGlvbnMgYXJlIHN1cHBsaWVkIGJ5IDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmg+LgotICovCi0jaWZkZWYgQ09ORklHXzY0QklUCi0KLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWQ7IH0gcG1kX3Q7Ci0jZGVmaW5lIHBtZF92YWwoeCkJKCh4KS5wbWQpCi0jZGVmaW5lIF9fcG1kKHgpCSgocG1kX3QpIHsgKHgpIH0gKQotCi0jZW5kaWYKLQotLyoKICAqIFJpZ2h0IG5vdyB3ZSBkb24ndCBzdXBwb3J0IDQtbGV2ZWwgcGFnZXRhYmxlcywgc28gYWxsIHB1ZC1yZWxhdGVkCiAgKiBkZWZpbml0aW9ucyBjb21lIGZyb20gPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYXJhbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhcmFtLmgKaW5kZXggMWQ5YmI4Yy4uZGEzOTIwZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhcmFtLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhcmFtLmgKQEAgLTksMjMgKzksOCBAQAogI2lmbmRlZiBfQVNNX1BBUkFNX0gKICNkZWZpbmUgX0FTTV9QQVJBTV9ICiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSMgZGVmaW5lIEhaCQlDT05GSUdfSFoJLyogSW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLwotIyBkZWZpbmUgVVNFUl9IWgkxMDAJCS8qIC4uIHNvbWUgdXNlciBpbnRlcmZhY2VzIGFyZSBpbiAidGlja3MiICovCi0jIGRlZmluZSBDTE9DS1NfUEVSX1NFQwkoVVNFUl9IWikJLyogbGlrZSB0aW1lcygpICovCi0jZW5kaWYKLQotI2lmbmRlZiBIWgotI2RlZmluZSBIWiAxMDAKLSNlbmRpZgotCiAjZGVmaW5lIEVYRUNfUEFHRVNJWkUJNjU1MzYKIAotI2lmbmRlZiBOT0dST1VQCi0jZGVmaW5lIE5PR1JPVVAJCSgtMSkKLSNlbmRpZgotCi0jZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYXJhbS5oPgogCiAjZW5kaWYgLyogX0FTTV9QQVJBTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFycG9ydC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhcnBvcnQuaAppbmRleCBmNTI2NTY4Li5jZjI1MmFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFycG9ydC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYXJwb3J0LmgKQEAgLTEsMTUgKzEgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIFRpbSBXYXVnaCA8dGltQGN5YmVyZWxrLmRlbW9uLmNvLnVrPgotICoKLSAqIFRoaXMgZmlsZSBzaG91bGQgb25seSBiZSBpbmNsdWRlZCBieSBkcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jLgotICovCi0jaWZuZGVmIF9BU01fUEFSUE9SVF9ICi0jZGVmaW5lIF9BU01fUEFSUE9SVF9ICi0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9pc2FfcG9ydHMoaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKTsKLXN0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9ub25wY2lfcG9ydHMoaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKQotewotCXJldHVybiBwYXJwb3J0X3BjX2ZpbmRfaXNhX3BvcnRzKGF1dG9pcnEsIGF1dG9kbWEpOwotfQotCi0jZW5kaWYgLyogX0FTTV9QQVJQT1JUX0ggKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYXJwb3J0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCAzNzM4ZjRiNC4uODgxZDE4YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMzEsNyArMzEsNyBAQAogICovCiBleHRlcm4gdm9pZCBwbWRfaW5pdCh1bnNpZ25lZCBsb25nIHBhZ2UsIHVuc2lnbmVkIGxvbmcgcGFnZXRhYmxlKTsKIAotI2lmZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpCiB7CkBAIC0xMDQsNyArMTA0LDcgQEAKIAl0bGJfcmVtb3ZlX3BhZ2UoKHRsYiksIHB0ZSk7CQkJXAogfSB3aGlsZSAoMCkKIAotI2lmZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAKIHN0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTMyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS0zMi5oCmluZGV4IDU1ODEzZDYuLmFlOTA0MTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTMyLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtMzIuaApAQCAtMTI3LDggKzEyNyw4IEBACiAjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHgpLnB0ZSA+PiAoUEFHRV9TSElGVCArIDIpKSkKICNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgocGZuKSA8PCAoUEFHRV9TSElGVCArIDIpKSB8IHBncHJvdF92YWwocHJvdCkpCiAjZWxzZQotI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCh4KS5wdGUgPj4gUEFHRV9TSElGVCkpCi0jZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHVuc2lnbmVkIGxvbmcgbG9uZykocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCisjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHgpLnB0ZSA+PiBfUEZOX1NISUZUKSkKKyNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgodW5zaWduZWQgbG9uZyBsb25nKShwZm4pIDw8IF9QRk5fU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKICNlbmRpZgogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtNjQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTY0LmgKaW5kZXggOWNkNTA4OS4uMjZkYzY5ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtNjQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS02NC5oCkBAIC0xNiw3ICsxNiwxMSBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWN0bC5oPgogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KIAorI2lmZGVmIENPTkZJR19QQUdFX1NJWkVfNjRLQgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KKyNlbHNlCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPgorI2VuZGlmCiAKIC8qCiAgKiBFYWNoIGFkZHJlc3Mgc3BhY2UgaGFzIDIgNEsgcGFnZXMgYXMgaXRzIHBhZ2UgZGlyZWN0b3J5LCBnaXZpbmcgMTAyNApAQCAtMzcsMTMgKzQxLDIwIEBACiAgKiBmYXVsdCBhZGRyZXNzIC0gVk1BTExPQ19TVEFSVC4KICAqLwogCisKKy8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2lmZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKKyNkZWZpbmUgUEdESVJfU0hJRlQJKFBBR0VfU0hJRlQgKyBQQUdFX1NISUZUICsgUFRFX09SREVSIC0gMykKKyNlbHNlCisKIC8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgY2FuIG1hcCAqLwogI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyAoUEFHRV9TSElGVCArIFBURV9PUkRFUiAtIDMpKQogI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKICNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCiAKLS8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworCiAjZGVmaW5lIFBHRElSX1NISUZUCShQTURfU0hJRlQgKyAoUEFHRV9TSElGVCArIFBNRF9PUkRFUiAtIDMpKQorI2VuZGlmCiAjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKICNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQogCkBAIC05MiwxMiArMTAzLDE0IEBACiAjaWZkZWYgQ09ORklHX1BBR0VfU0laRV82NEtCCiAjZGVmaW5lIFBHRF9PUkRFUgkJMAogI2RlZmluZSBQVURfT1JERVIJCWFpZWVlZV9hdHRlbXB0X3RvX2FsbG9jYXRlX3B1ZAotI2RlZmluZSBQTURfT1JERVIJCTAKKyNkZWZpbmUgUE1EX09SREVSCQlhaWVlZWVfYXR0ZW1wdF90b19hbGxvY2F0ZV9wbWQKICNkZWZpbmUgUFRFX09SREVSCQkwCiAjZW5kaWYKIAogI2RlZmluZSBQVFJTX1BFUl9QR0QJKChQQUdFX1NJWkUgPDwgUEdEX09SREVSKSAvIHNpemVvZihwZ2RfdCkpCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKICNkZWZpbmUgUFRSU19QRVJfUE1ECSgoUEFHRV9TSVpFIDw8IFBNRF9PUkRFUikgLyBzaXplb2YocG1kX3QpKQorI2VuZGlmCiAjZGVmaW5lIFBUUlNfUEVSX1BURQkoKFBBR0VfU0laRSA8PCBQVEVfT1JERVIpIC8gc2l6ZW9mKHB0ZV90KSkKIAogI2lmIFBHRElSX1NJWkUgPj0gVEFTS19TSVpFCkBAIC0xMTAsNyArMTIzLDkgQEAKICNkZWZpbmUgVk1BTExPQ19TVEFSVAkJTUFQX0JBU0UKICNkZWZpbmUgVk1BTExPQ19FTkQJXAogCShWTUFMTE9DX1NUQVJUICsgXAotCSBQVFJTX1BFUl9QR0QgKiBQVFJTX1BFUl9QTUQgKiBQVFJTX1BFUl9QVEUgKiBQQUdFX1NJWkUgLSAoMVVMIDw8IDMyKSkKKwkgbWluKFBUUlNfUEVSX1BHRCAqIFBUUlNfUEVSX1BNRCAqIFBUUlNfUEVSX1BURSAqIFBBR0VfU0laRSwgXAorCSAgICAgKDFVTCA8PCBjcHVfdm1iaXRzKSkgLSAoMVVMIDw8IDMyKSkKKwogI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRVMpICYmIGRlZmluZWQoS0JVSUxEXzY0QklUX1NZTTMyKSAmJiBcCiAJVk1BTExPQ19TVEFSVCAhPSBDS1NTRUcKIC8qIExvYWQgbW9kdWxlcyBpbnRvIDMyYml0LWNvbXBhdGlibGUgc2VnbWVudC4gKi8KQEAgLTEyMCwxNSArMTM1LDMwIEBACiAKICNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKIAlwcmludGsoIiVzOiVkOiBiYWQgcHRlICUwMTZseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcHRlX3ZhbChlKSkKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogI2RlZmluZSBwbWRfRVJST1IoZSkgXAogCXByaW50aygiJXM6JWQ6IGJhZCBwbWQgJTAxNmx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwbWRfdmFsKGUpKQorI2VuZGlmCiAjZGVmaW5lIHBnZF9FUlJPUihlKSBcCiAJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDE2bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBnZF92YWwoZSkpCiAKIGV4dGVybiBwdGVfdCBpbnZhbGlkX3B0ZV90YWJsZVtQVFJTX1BFUl9QVEVdOwogZXh0ZXJuIHB0ZV90IGVtcHR5X2JhZF9wYWdlX3RhYmxlW1BUUlNfUEVSX1BURV07CisKKworI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECisvKgorICogRm9yIDMtbGV2ZWwgcGFnZXRhYmxlcyB3ZSBkZWZpbmVzIHRoZXNlIG91cnNlbHZlcywgZm9yIDItbGV2ZWwgdGhlCisgKiBkZWZpbml0aW9ucyBhcmUgc3VwcGxpZWQgYnkgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWQ7IH0gcG1kX3Q7CisjZGVmaW5lIHBtZF92YWwoeCkJKCh4KS5wbWQpCisjZGVmaW5lIF9fcG1kKHgpCSgocG1kX3QpIHsgKHgpIH0gKQorCisKIGV4dGVybiBwbWRfdCBpbnZhbGlkX3BtZF90YWJsZVtQVFJTX1BFUl9QTURdOwogZXh0ZXJuIHBtZF90IGVtcHR5X2JhZF9wbWRfdGFibGVbUFRSU19QRVJfUE1EXTsKKyNlbmRpZgogCiAvKgogICogRW1wdHkgcGdkL3BtZCBlbnRyaWVzIHBvaW50IHRvIHRoZSBpbnZhbGlkX3B0ZV90YWJsZS4KQEAgLTE0OSw2ICsxNzksNyBAQAogewogCXBtZF92YWwoKnBtZHApID0gKCh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3B0ZV90YWJsZSk7CiB9CisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIAogLyoKICAqIEVtcHR5IHB1ZCBlbnRyaWVzIHBvaW50IHRvIHRoZSBpbnZhbGlkX3BtZF90YWJsZS4KQEAgLTE3Miw2ICsyMDMsNyBAQAogewogCXB1ZF92YWwoKnB1ZHApID0gKCh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3BtZF90YWJsZSk7CiB9CisjZW5kaWYKIAogI2RlZmluZSBwdGVfcGFnZSh4KQkJcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKIApAQCAtMTc5LDggKzIxMSw4IEBACiAjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHgpLnB0ZSA+PiAoUEFHRV9TSElGVCArIDIpKSkKICNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgocGZuKSA8PCAoUEFHRV9TSElGVCArIDIpKSB8IHBncHJvdF92YWwocHJvdCkpCiAjZWxzZQotI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCh4KS5wdGUgPj4gUEFHRV9TSElGVCkpCi0jZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQorI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCh4KS5wdGUgPj4gX1BGTl9TSElGVCkpCisjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHBmbikgPDwgX1BGTl9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQogI2VuZGlmCiAKICNkZWZpbmUgX19wZ2Rfb2Zmc2V0KGFkZHJlc3MpCXBnZF9pbmRleChhZGRyZXNzKQpAQCAtMTk2LDYgKzIyOCw3IEBACiAvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KICNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcikJKChtbSktPnBnZCArIHBnZF9pbmRleChhZGRyKSkKIAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHVkX3BhZ2VfdmFkZHIocHVkX3QgcHVkKQogewogCXJldHVybiBwdWRfdmFsKHB1ZCk7CkBAIC0yMDgsNiArMjQxLDcgQEAKIHsKIAlyZXR1cm4gKHBtZF90ICopIHB1ZF9wYWdlX3ZhZGRyKCpwdWQpICsgcG1kX2luZGV4KGFkZHJlc3MpOwogfQorI2VuZGlmCiAKIC8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUuLiAqLwogI2RlZmluZSBfX3B0ZV9vZmZzZXQoYWRkcmVzcykJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLmgKaW5kZXggMTA3M2U2ZC4uZTlmZTdlOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLWJpdHMuaApAQCAtNTAsNyArNTAsNyBAQAogI2RlZmluZSBfQ0FDSEVfU0hJRlQgICAgICAgICAgICAgICAgMwogI2RlZmluZSBfQ0FDSEVfTUFTSyAgICAgICAgICAgICAgICAgKDc8PDMpCiAKLSNlbHNlCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfUjMwMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9UWDM5WFgpCiAKICNkZWZpbmUgX1BBR0VfUFJFU0VOVCAgICAgICAgICAgICAgICgxPDwwKSAgLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KICNkZWZpbmUgX1BBR0VfUkVBRCAgICAgICAgICAgICAgICAgICgxPDwxKSAgLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KQEAgLTU5LDggKzU5LDYgQEAKICNkZWZpbmUgX1BBR0VfTU9ESUZJRUQgICAgICAgICAgICAgICgxPDw0KSAgLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KICNkZWZpbmUgX1BBR0VfRklMRSAgICAgICAgICAgICAgICAgICgxPDw0KSAgLyogc2V0OnBhZ2VjYWNoZSB1bnNldDpzd2FwICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfUjMwMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9UWDM5WFgpCi0KICNkZWZpbmUgX1BBR0VfR0xPQkFMICAgICAgICAgICAgICAgICgxPDw4KQogI2RlZmluZSBfUEFHRV9WQUxJRCAgICAgICAgICAgICAgICAgKDE8PDkpCiAjZGVmaW5lIF9QQUdFX1NJTEVOVF9SRUFEICAgICAgICAgICAoMTw8OSkgIC8qIHN5bm9ueW0gICAgICAgICAgICAgICAgICovCkBAIC02OSwyMSArNjcsMTEzIEBACiAjZGVmaW5lIF9DQUNIRV9VTkNBQ0hFRCAgICAgICAgICAgICAoMTw8MTEpCiAjZGVmaW5lIF9DQUNIRV9NQVNLICAgICAgICAgICAgICAgICAoMTw8MTEpCiAKKyNlbHNlIC8qICdOb3JtYWwnIHI0SyBjYXNlICovCisvKgorICogV2hlbiB1c2luZyB0aGUgUkkvWEkgYml0IHN1cHBvcnQsIHdlIGhhdmUgMTMgYml0cyBvZiBmbGFncyBiZWxvdworICogdGhlIHBoeXNpY2FsIGFkZHJlc3MuIFRoZSBSSS9YSSBiaXRzIGFyZSBwbGFjZWQgc3VjaCB0aGF0IGEgU1JMIDUKKyAqIGNhbiBzdHJpcCBvZmYgdGhlIHNvZnR3YXJlIGJpdHMsIHRoZW4gYSBST1RSIDIgY2FuIG1vdmUgdGhlIFJJL1hJCisgKiBpbnRvIGJpdHMgWzYzOjYyXS4gVGhpcyBhbHNvIGxpbWl0cyBwaHlzaWNhbCBhZGRyZXNzIHRvIDU2IGJpdHMsCisgKiB3aGljaCBpcyBtb3JlIHRoYW4gd2UgbmVlZCByaWdodCBub3cuCisgKi8KKworLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVF9TSElGVAkoMCkKKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkJKDEgPDwgX1BBR0VfUFJFU0VOVF9TSElGVCkKKy8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlLCBzaG91bGQgYmUgdW51c2VkIGlmIGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpLiAqLworI2RlZmluZSBfUEFHRV9SRUFEX1NISUZUCShrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSA/IF9QQUdFX1BSRVNFTlRfU0hJRlQgOiBfUEFHRV9QUkVTRU5UX1NISUZUICsgMSkKKyNkZWZpbmUgX1BBR0VfUkVBRCAoe2lmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgQlVHKCk7IDEgPDwgX1BBR0VfUkVBRF9TSElGVDsgfSkKKy8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX1dSSVRFX1NISUZUCShfUEFHRV9SRUFEX1NISUZUICsgMSkKKyNkZWZpbmUgX1BBR0VfV1JJVEUJCSgxIDw8IF9QQUdFX1dSSVRFX1NISUZUKQorLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRURfU0hJRlQJKF9QQUdFX1dSSVRFX1NISUZUICsgMSkKKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJCSgxIDw8IF9QQUdFX0FDQ0VTU0VEX1NISUZUKQorLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KKyNkZWZpbmUgX1BBR0VfTU9ESUZJRURfU0hJRlQJKF9QQUdFX0FDQ0VTU0VEX1NISUZUICsgMSkKKyNkZWZpbmUgX1BBR0VfTU9ESUZJRUQJCSgxIDw8IF9QQUdFX01PRElGSUVEX1NISUZUKQorLyogc2V0OnBhZ2VjYWNoZSB1bnNldDpzd2FwICovCisjZGVmaW5lIF9QQUdFX0ZJTEUJCShfUEFHRV9NT0RJRklFRCkKKworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKy8qIGh1Z2UgdGxiIHBhZ2UgKi8KKyNkZWZpbmUgX1BBR0VfSFVHRV9TSElGVAkoX1BBR0VfTU9ESUZJRURfU0hJRlQgKyAxKQorI2RlZmluZSBfUEFHRV9IVUdFCQkoMSA8PCBfUEFHRV9IVUdFX1NISUZUKQogI2Vsc2UKLQotI2RlZmluZSBfUEFHRV9SNEtCVUcgICAgICAgICAgICAgICAgKDE8PDUpICAvKiB3b3JrYXJvdW5kIGZvciByNGsgYnVnICAqLwotI2RlZmluZSBfUEFHRV9IVUdFICAgICAgICAgICAgICAgICAgKDE8PDUpICAvKiBodWdlIHRsYiBwYWdlICovCi0jZGVmaW5lIF9QQUdFX0dMT0JBTCAgICAgICAgICAgICAgICAoMTw8NikKLSNkZWZpbmUgX1BBR0VfVkFMSUQgICAgICAgICAgICAgICAgICgxPDw3KQotI2RlZmluZSBfUEFHRV9TSUxFTlRfUkVBRCAgICAgICAgICAgKDE8PDcpICAvKiBzeW5vbnltICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUEFHRV9ESVJUWSAgICAgICAgICAgICAgICAgKDE8PDgpICAvKiBUaGUgTUlQUyBkaXJ0eSBiaXQgICAgICAqLwotI2RlZmluZSBfUEFHRV9TSUxFTlRfV1JJVEUgICAgICAgICAgKDE8PDgpCi0jZGVmaW5lIF9DQUNIRV9TSElGVAkJICAgIDkKLSNkZWZpbmUgX0NBQ0hFX01BU0sgICAgICAgICAgICAgICAgICg3PDw5KQotCisjZGVmaW5lIF9QQUdFX0hVR0VfU0hJRlQJKF9QQUdFX01PRElGSUVEX1NISUZUKQorI2RlZmluZSBfUEFHRV9IVUdFCQkoe0JVRygpOyAxOyB9KSAgLyogRHVtbXkgdmFsdWUgKi8KICNlbmRpZgorCisvKiBQYWdlIGNhbm5vdCBiZSBleGVjdXRlZCAqLworI2RlZmluZSBfUEFHRV9OT19FWEVDX1NISUZUCShrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSA/IF9QQUdFX0hVR0VfU0hJRlQgKyAxIDogX1BBR0VfSFVHRV9TSElGVCkKKyNkZWZpbmUgX1BBR0VfTk9fRVhFQwkJKHtpZiAoIWtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSBCVUcoKTsgMSA8PCBfUEFHRV9OT19FWEVDX1NISUZUOyB9KQorCisvKiBQYWdlIGNhbm5vdCBiZSByZWFkICovCisjZGVmaW5lIF9QQUdFX05PX1JFQURfU0hJRlQJKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpID8gX1BBR0VfTk9fRVhFQ19TSElGVCArIDEgOiBfUEFHRV9OT19FWEVDX1NISUZUKQorI2RlZmluZSBfUEFHRV9OT19SRUFECQkoe2lmICgha2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIEJVRygpOyAxIDw8IF9QQUdFX05PX1JFQURfU0hJRlQ7IH0pCisKKyNkZWZpbmUgX1BBR0VfR0xPQkFMX1NISUZUCShfUEFHRV9OT19SRUFEX1NISUZUICsgMSkKKyNkZWZpbmUgX1BBR0VfR0xPQkFMCQkoMSA8PCBfUEFHRV9HTE9CQUxfU0hJRlQpCisKKyNkZWZpbmUgX1BBR0VfVkFMSURfU0hJRlQJKF9QQUdFX0dMT0JBTF9TSElGVCArIDEpCisjZGVmaW5lIF9QQUdFX1ZBTElECQkoMSA8PCBfUEFHRV9WQUxJRF9TSElGVCkKKy8qIHN5bm9ueW0gICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1NJTEVOVF9SRUFECShfUEFHRV9WQUxJRCkKKworLyogVGhlIE1JUFMgZGlydHkgYml0ICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfRElSVFlfU0hJRlQJKF9QQUdFX1ZBTElEX1NISUZUICsgMSkKKyNkZWZpbmUgX1BBR0VfRElSVFkJCSgxIDw8IF9QQUdFX0RJUlRZX1NISUZUKQorI2RlZmluZSBfUEFHRV9TSUxFTlRfV1JJVEUJKF9QQUdFX0RJUlRZKQorCisjZGVmaW5lIF9DQUNIRV9TSElGVAkJKF9QQUdFX0RJUlRZX1NISUZUICsgMSkKKyNkZWZpbmUgX0NBQ0hFX01BU0sJCSg3IDw8IF9DQUNIRV9TSElGVCkKKworI2RlZmluZSBfUEZOX1NISUZUCQkoUEFHRV9TSElGVCAtIDEyICsgX0NBQ0hFX1NISUZUICsgMykKKwogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUiAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKSAqLwogCisjaWZuZGVmIF9QRk5fU0hJRlQKKyNkZWZpbmUgX1BGTl9TSElGVCAgICAgICAgICAgICAgICAgIFBBR0VfU0hJRlQKKyNlbmRpZgorI2RlZmluZSBfUEZOX01BU0sJCSh+KCgxIDw8IChfUEZOX1NISUZUKSkgLSAxKSkKKworI2lmbmRlZiBfUEFHRV9OT19SRUFECisjZGVmaW5lIF9QQUdFX05PX1JFQUQgKHtCVUcoKTsgMDsgfSkKKyNkZWZpbmUgX1BBR0VfTk9fUkVBRF9TSElGVCAoe0JVRygpOyAwOyB9KQorI2VuZGlmCisjaWZuZGVmIF9QQUdFX05PX0VYRUMKKyNkZWZpbmUgX1BBR0VfTk9fRVhFQyAoe0JVRygpOyAwOyB9KQorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0dMT0JBTF9TSElGVAorI2RlZmluZSBfUEFHRV9HTE9CQUxfU0hJRlQgaWxvZzIoX1BBR0VfR0xPQkFMKQorI2VuZGlmCisKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qCisgKiBwdGVfdG9fZW50cnlsbyBjb252ZXJ0cyBhIHBhZ2UgdGFibGUgZW50cnkgKFBURSkgaW50byBhIE1pcHMKKyAqIGVudHJ5bG8wLzEgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgcHRlX3RvX2VudHJ5bG8odW5zaWduZWQgbG9uZyBwdGVfdmFsKQoreworCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQlpbnQgc2E7CisjaWZkZWYgQ09ORklHXzMyQklUCisJCXNhID0gMzEgLSBfUEFHRV9OT19SRUFEX1NISUZUOworI2Vsc2UKKwkJc2EgPSA2MyAtIF9QQUdFX05PX1JFQURfU0hJRlQ7CisjZW5kaWYKKwkJLyoKKwkJICogQyBoYXMgbm8gd2F5IHRvIGV4cHJlc3MgdGhhdCB0aGlzIGlzIGEgRFNSTAorCQkgKiBfUEFHRV9OT19FWEVDX1NISUZUIGZvbGxvd2VkIGJ5IGEgUk9UUiAyLiAgTHVja2lseQorCQkgKiBpbiB0aGUgZmFzdCBwYXRoIHRoaXMgaXMgZG9uZSBpbiBhc3NlbWJseQorCQkgKi8KKwkJcmV0dXJuIChwdGVfdmFsID4+IF9QQUdFX0dMT0JBTF9TSElGVCkgfAorCQkJKChwdGVfdmFsICYgKF9QQUdFX05PX0VYRUMgfCBfUEFHRV9OT19SRUFEKSkgPDwgc2EpOworCX0KKworCXJldHVybiBwdGVfdmFsID4+IF9QQUdFX0dMT0JBTF9TSElGVDsKK30KKyNlbmRpZgogCiAvKgogICogQ2FjaGUgYXR0cmlidXRlcwpAQCAtMTMwLDkgKzIyMCw5IEBACiAKICNlbmRpZgogCi0jZGVmaW5lIF9fUkVBREFCTEUJKF9QQUdFX1JFQUQgfCBfUEFHRV9TSUxFTlRfUkVBRCB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBfX1JFQURBQkxFCShfUEFHRV9TSUxFTlRfUkVBRCB8IF9QQUdFX0FDQ0VTU0VEIHwgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpID8gMCA6IF9QQUdFX1JFQUQpKQogI2RlZmluZSBfX1dSSVRFQUJMRQkoX1BBR0VfV1JJVEUgfCBfUEFHRV9TSUxFTlRfV1JJVEUgfCBfUEFHRV9NT0RJRklFRCkKIAotI2RlZmluZSBfUEFHRV9DSEdfTUFTSyAgKFBBR0VfTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTU9ESUZJRUQgfCBfQ0FDSEVfTUFTSykKKyNkZWZpbmUgX1BBR0VfQ0hHX01BU0sgIChfUEZOX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX01PRElGSUVEIHwgX0NBQ0hFX01BU0spCiAKICNlbmRpZiAvKiBfQVNNX1BHVEFCTEVfQklUU19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAxODU0MzM2Li43ZTQwZjM3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTIyLDIzICsyMiwyNCBAQAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwogCiAjZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX0NBQ0hFX0NBQ0hBQkxFX05PTkNPSEVSRU5UKQotI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCB8IF9QQUdFX1dSSVRFIHwgXAorI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfV1JJVEUgfCAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyAwIDogX1BBR0VfUkVBRCkgfCBcCiAJCQkJIF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCi0jZGVmaW5lIFBBR0VfQ09QWQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCB8IFwKLQkJCQkgX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCkKLSNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCB8IFwKKyNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyAwIDogX1BBR0VfUkVBRCkgfCBcCisJCQkJIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSA/ICBfUEFHRV9OT19FWEVDIDogMCkgfCBfcGFnZV9jYWNoYWJsZV9kZWZhdWx0KQorI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyAwIDogX1BBR0VfUkVBRCkgfCBcCiAJCQkJIF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCiAjZGVmaW5lIFBBR0VfS0VSTkVMCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfX1JFQURBQkxFIHwgX19XUklURUFCTEUgfCBcCiAJCQkJIF9QQUdFX0dMT0JBTCB8IF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCi0jZGVmaW5lIFBBR0VfVVNFUklPCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEIHwgX1BBR0VfV1JJVEUgfCBcCisjZGVmaW5lIFBBR0VfVVNFUklPCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyAwIDogX1BBR0VfUkVBRCkgfCBfUEFHRV9XUklURSB8IFwKIAkJCQkgX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCkKICNkZWZpbmUgUEFHRV9LRVJORUxfVU5DQUNIRUQgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9fUkVBREFCTEUgfCBcCiAJCQlfX1dSSVRFQUJMRSB8IF9QQUdFX0dMT0JBTCB8IF9DQUNIRV9VTkNBQ0hFRCkKIAogLyoKLSAqIE1JUFMgY2FuJ3QgZG8gcGFnZSBwcm90ZWN0aW9uIGZvciBleGVjdXRlLCBhbmQgY29uc2lkZXJzIHRoYXQgdGhlIHNhbWUgbGlrZQotICogcmVhZC4gQWxzbywgd3JpdGUgcGVybWlzc2lvbnMgaW1wbHkgcmVhZCBwZXJtaXNzaW9ucy4gVGhpcyBpcyB0aGUgY2xvc2VzdAotICogd2UgY2FuIGdldCBieSByZWFzb25hYmxlIG1lYW5zLi4KKyAqIElmIF9QQUdFX05PX0VYRUMgaXMgbm90IGRlZmluZWQsIHdlIGNhbid0IGRvIHBhZ2UgcHJvdGVjdGlvbiBmb3IKKyAqIGV4ZWN1dGUsIGFuZCBjb25zaWRlciBpdCB0byBiZSB0aGUgc2FtZSBhcyByZWFkLiBBbHNvLCB3cml0ZQorICogcGVybWlzc2lvbnMgaW1wbHkgcmVhZCBwZXJtaXNzaW9ucy4gVGhpcyBpcyB0aGUgY2xvc2VzdCB3ZSBjYW4gZ2V0CisgKiBieSByZWFzb25hYmxlIG1lYW5zLi4KICAqLwogCiAvKgpAQCAtMTc3LDcgKzE3OCw3IEBACiAgKi8KICNkZWZpbmUgc2V0X3BtZChwbWRwdHIsIHBtZHZhbCkgZG8geyAqKHBtZHB0cikgPSAocG1kdmFsKTsgfSB3aGlsZSgwKQogCi0jaWZkZWYgQ09ORklHXzY0QklUCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIC8qCiAgKiAocHVkcyBhcmUgZm9sZGVkIGludG8gcGdkcyBzbyB0aGlzIGRvZXNuJ3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCwKICAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pCkBAIC0yOTgsOCArMjk5LDEzIEBACiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkKIHsKIAlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfQUNDRVNTRUQ7Ci0JaWYgKHB0ZV92YWwocHRlKSAmIF9QQUdFX1JFQUQpCi0JCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKKwlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJaWYgKCEocHRlX3ZhbChwdGUpICYgX1BBR0VfTk9fUkVBRCkpCisJCQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CisJfSBlbHNlIHsKKwkJaWYgKHB0ZV92YWwocHRlKSAmIF9QQUdFX1JFQUQpCisJCQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CisJfQogCXJldHVybiBwdGU7CiB9CiAKQEAgLTM2Miw4ICszNjgsOSBAQAogCXB0ZV90IHB0ZSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQorCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CisJcHRlX3QgcHRlID0gKnB0ZXA7CiAJX191cGRhdGVfdGxiKHZtYSwgYWRkcmVzcywgcHRlKTsKIAlfX3VwZGF0ZV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9wcm9tLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9wcm9tLmgKaW5kZXggMTRjYTdkYy4uNTRlZjFhOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfcHJvbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3Byb20uaApAQCAtMTE4LDcgKzExOCw2IEBACiAjZGVmaW5lIFpTUF9EVUVUCQknRCcJLyogb25lIERVRVQgenNwIGVuZ2luZSAqLwogI2RlZmluZSBaU1BfVFJJQUQJCSdUJwkvKiB0d28gVFJJQUQgenNwIGVuZ2luZXMgKi8KIAotZXh0ZXJuIGNoYXIgKnByb21fZ2V0Y21kbGluZSh2b2lkKTsKIGV4dGVybiBjaGFyICpwcm9tX2dldGVudihjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIHByb21faW5pdF9jbWRsaW5lKHZvaWQpOwogZXh0ZXJuIHZvaWQgcHJvbV9tZW1pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NlcmlhbC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NlcmlhbC5oCmluZGV4IGMwN2ViZDguLmEwY2IwY2FmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2VyaWFsLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NlcmlhbC5oCkBAIC0xLDIyICsxIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IGJ5IFJhbGYgQmFlY2hsZQotICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSAqLwotI2lmbmRlZiBfQVNNX1NFUklBTF9ICi0jZGVmaW5lIF9BU01fU0VSSUFMX0gKLQotCi0vKgotICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgotICoKLSAqIEl0J2QgYmUgbmljZSBpZiBzb21lb25lIGJ1aWx0IGEgc2VyaWFsIGNhcmQgd2l0aCBhIDI0LjU3NiBNSHoKLSAqIGNsb2NrLCBzaW5jZSB0aGUgMTY1NTBBIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgYSB0b3Agc3BlZWQgb2YgMS41Ci0gKiBtZWdhYml0cy9zZWNvbmQ7IGJ1dCB0aGlzIHJlcXVpcmVzIHRoZSBmYXN0ZXIgY2xvY2suCi0gKi8KLSNkZWZpbmUgQkFTRV9CQVVEICgxODQzMjAwIC8gMTYpCi0KLSNlbmRpZiAvKiBfQVNNX1NFUklBTF9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2dpYWxpYi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NnaWFsaWIuaAppbmRleCA2Mzc0MWNhLi4yYTJmMWJkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2dpYWxpYi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZ2lhbGliLmgKQEAgLTMzLDE0ICszMyw2IEBACiBleHRlcm4gdm9pZCBwcm9tX3B1dGNoYXIoY2hhciBjKTsKIGV4dGVybiBjaGFyIHByb21fZ2V0Y2hhcih2b2lkKTsKIAotLyogTWVtb3J5IGRlc2NyaXB0b3IgbWFuYWdlbWVudC4gKi8KLSNkZWZpbmUgUFJPTV9NQVhfUE1FTUJMT0NLUyAgICAzMgotc3RydWN0IHByb21fcG1lbWJsb2NrIHsKLQlMT05HCWJhc2U7CQkvKiBXaXRoaW4gS1NFRzAgb3IgWEtQSFlTLiAqLwotCVVMT05HCXNpemU7CQkvKiBJbiBieXRlcy4gKi8KLQlVTE9ORwl0eXBlOwkJLyogZnJlZSBvciBwcm9tIG1lbW9yeSAqLwotfTsKLQogLyogR2V0IG5leHQgbWVtb3J5IGRlc2NyaXB0b3IgYWZ0ZXIgQ1VSUiwgcmV0dXJucyBmaXJzdCBkZXNjcmlwdG9yCiAgKiBpbiBjaGFpbiBpcyBDVVJSIGlzIE5VTEwuCiAgKi8KQEAgLTUxLDcgKzQzLDYgQEAKICAqIGFycmF5LgogICovCiBleHRlcm4gdm9pZCBwcm9tX21lbWluaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBwcm9tX2ZpeHVwX21lbV9tYXAodW5zaWduZWQgbG9uZyBzdGFydF9tZW0sIHVuc2lnbmVkIGxvbmcgZW5kX21lbSk7CiAKIC8qIFBST00gZGV2aWNlIHRyZWUgbGlicmFyeSByb3V0aW5lcy4gKi8KICNkZWZpbmUgUFJPTV9OVUxMX0NPTVBPTkVOVCAoKHBjb21wb25lbnQgKikgMCkKQEAgLTYyLDIwICs1Myw2IEBACiAvKiBHZXQgY2hpbGQgY29tcG9uZW50IG9mIFRISVMuICovCiBleHRlcm4gcGNvbXBvbmVudCAqQXJjR2V0Q2hpbGQocGNvbXBvbmVudCAqdGhpcyk7CiAKLS8qIEdldCBwYXJlbnQgY29tcG9uZW50IG9mIENISUxELiAqLwotZXh0ZXJuIHBjb21wb25lbnQgKnByb21fZ2V0cGFyZW50KHBjb21wb25lbnQgKmNoaWxkKTsKLQotLyogQ29weSBjb21wb25lbnQgb3BhcXVlIGRhdGEgb2YgY29tcG9uZW50IFRISVMgaW50byBCVUZGRVIKLSAqIGlmIGNvbXBvbmVudCBUSElTIGhhcyBvcGFxdWUgZGF0YS4gIFJldHVybnMgc3VjY2VzcyBvcgotICogZmFpbHVyZSBzdGF0dXMuCi0gKi8KLWV4dGVybiBsb25nIHByb21fZ2V0Y2RhdGEodm9pZCAqYnVmZmVyLCBwY29tcG9uZW50ICp0aGlzKTsKLQotLyogT3RoZXIgbWlzYy4gY29tcG9uZW50IHJvdXRpbmVzLiAqLwotZXh0ZXJuIHBjb21wb25lbnQgKnByb21fY2hpbGRhZGQocGNvbXBvbmVudCAqdGhpcywgcGNvbXBvbmVudCAqdG1wLCB2b2lkICpkYXRhKTsKLWV4dGVybiBsb25nIHByb21fZGVsY29tcG9uZW50KHBjb21wb25lbnQgKnRoaXMpOwotZXh0ZXJuIHBjb21wb25lbnQgKnByb21fY29tcG9uZW50YnlwYXRoKGNoYXIgKnBhdGgpOwotCiAvKiBUaGlzIGlzIGNhbGxlZCBhdCBwcm9tX2luaXQgdGltZSB0byBpZGVudGlmeSB0aGUKICAqIEFSQyBhcmNoaXRlY3R1cmUgd2UgYXJlIHJ1bm5pbmcgb24KICAqLwpAQCAtODgsMzUgKzY1LDEzIEBACiAvKiBBUkNTIGNvbW1hbmQgbGluZSBwYXJzaW5nLiAqLwogZXh0ZXJuIHZvaWQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCk7CiAKLS8qIEFjcXVpcmluZyBpbmZvIGFib3V0IHRoZSBjdXJyZW50IHRpbWUsIGV0Yy4gKi8KLWV4dGVybiBzdHJ1Y3QgbGludXhfdGluZm8gKnByb21fZ2V0dGluZm8odm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBwcm9tX2dldHJ0aW1lKHZvaWQpOwotCiAvKiBGaWxlIG9wZXJhdGlvbnMuICovCi1leHRlcm4gbG9uZyBwcm9tX2dldHZkaXJlbnQodW5zaWduZWQgbG9uZyBmZCwgc3RydWN0IGxpbnV4X3ZkaXJlbnQgKmVudCwgdW5zaWduZWQgbG9uZyBudW0sIHVuc2lnbmVkIGxvbmcgKmNudCk7Ci1leHRlcm4gbG9uZyBwcm9tX29wZW4oY2hhciAqbmFtZSwgZW51bSBsaW51eF9vbW9kZSBtZCwgdW5zaWduZWQgbG9uZyAqZmQpOwotZXh0ZXJuIGxvbmcgcHJvbV9jbG9zZSh1bnNpZ25lZCBsb25nIGZkKTsKIGV4dGVybiBMT05HIEFyY1JlYWQoVUxPTkcgZmQsIFBWT0lEIGJ1ZiwgVUxPTkcgbnVtLCBQVUxPTkcgY250KTsKLWV4dGVybiBsb25nIHByb21fZ2V0cnN0YXR1cyh1bnNpZ25lZCBsb25nIGZkKTsKIGV4dGVybiBMT05HIEFyY1dyaXRlKFVMT05HIGZkLCBQVk9JRCBidWYsIFVMT05HIG51bSwgUFVMT05HIGNudCk7Ci1leHRlcm4gbG9uZyBwcm9tX3NlZWsodW5zaWduZWQgbG9uZyBmZCwgc3RydWN0IGxpbnV4X2JpZ2ludCAqb2ZmLCBlbnVtIGxpbnV4X3NlZWttb2RlIHNtKTsKLWV4dGVybiBsb25nIHByb21fbW91bnQoY2hhciAqbmFtZSwgZW51bSBsaW51eF9tb3VudG9wcyBvcCk7Ci1leHRlcm4gbG9uZyBwcm9tX2dldGZpbmZvKHVuc2lnbmVkIGxvbmcgZmQsIHN0cnVjdCBsaW51eF9maW5mbyAqYnVmKTsKLWV4dGVybiBsb25nIHByb21fc2V0ZmluZm8odW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBtc2spOwotCi0vKiBSdW5uaW5nIHN0YW5kLWFsb25nIHByb2dyYW1zLiAqLwotZXh0ZXJuIGxvbmcgcHJvbV9sb2FkKGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nICpwYywgdW5zaWduZWQgbG9uZyAqZWFkZHIpOwotZXh0ZXJuIGxvbmcgcHJvbV9pbnZva2UodW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgbG9uZyBzcCwgbG9uZyBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqKmVudnApOwotZXh0ZXJuIGxvbmcgcHJvbV9leGVjKGNoYXIgKm5hbWUsIGxvbmcgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwKTsKIAogLyogTWlzYy4gcm91dGluZXMuICovCi1leHRlcm4gVk9JRCBwcm9tX2hhbHQoVk9JRCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKLWV4dGVybiBWT0lEIHByb21fcG93ZXJkb3duKFZPSUQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7Ci1leHRlcm4gVk9JRCBwcm9tX3Jlc3RhcnQoVk9JRCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKIGV4dGVybiBWT0lEIEFyY1JlYm9vdChWT0lEKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwogZXh0ZXJuIFZPSUQgQXJjRW50ZXJJbnRlcmFjdGl2ZU1vZGUoVk9JRCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKLWV4dGVybiBsb25nIHByb21fY2Znc2F2ZShWT0lEKTsKLWV4dGVybiBzdHJ1Y3QgbGludXhfc3lzaWQgKnByb21fZ2V0c3lzaWQoVk9JRCk7CiBleHRlcm4gVk9JRCBBcmNGbHVzaEFsbENhY2hlcyhWT0lEKTsKIGV4dGVybiBESVNQTEFZX1NUQVRVUyAqQXJjR2V0RGlzcGxheVN0YXR1cyhVTE9ORyBGaWxlSUQpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lieXRlL2JpZ3N1ci5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9iaWdzdXIuaAppbmRleCBlYmVmZTc5Li4yZDFhMjZkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lieXRlL2JpZ3N1ci5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvYmlnc3VyLmgKQEAgLTQ2LDQgKzQ2LDMgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19BU01fU0lCWVRFX0JJR1NVUl9IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvc2IxMjUwX2xkdC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9zYjEyNTBfbGR0LmgKaW5kZXggMDgxZThiMS4uMWU3NmNmMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9zYjEyNTBfbGR0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9zYjEyNTBfbGR0LmgKQEAgLTQyMCw0ICs0MjAsMyBAQAogI2VuZGlmIC8qIDEyNTAgUEFTUzIgfHwgMTEyeCBQQVNTMSAqLwogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NuL2tsa2VybnZhcnMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9rbGtlcm52YXJzLmgKaW5kZXggNWRlNGM1ZS4uNmFmMjViYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NuL2tsa2VybnZhcnMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc24va2xrZXJudmFycy5oCkBAIC0yNiw0ICsyNiwzIEBACiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX19BU01fU05fS0xLRVJOVkFSU19IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGFyc2VtZW0uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGFyc2VtZW0uaAppbmRleCA3OTVhYzZjLi43MTY1MzMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BhcnNlbWVtLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwYXJzZW1lbS5oCkBAIC0xMSw0ICsxMSwzIEBACiAKICNlbmRpZiAvKiBDT05GSUdfU1BBUlNFTUVNICovCiAjZW5kaWYgLyogX01JUFNfU1BBUlNFTUVNX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCAyMWVmOWVmLi4zOTZlNDAyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMzYsOSArMzYsOSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhcmNoX3NwaW5faXNfbG9ja2VkKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQl1bnNpZ25lZCBpbnQgY291bnRlcnMgPSBBQ0NFU1NfT05DRShsb2NrLT5sb2NrKTsKKwl1MzIgY291bnRlcnMgPSBBQ0NFU1NfT05DRShsb2NrLT5sb2NrKTsKIAotCXJldHVybiAoKGNvdW50ZXJzID4+IDE0KSBeIGNvdW50ZXJzKSAmIDB4MWZmZjsKKwlyZXR1cm4gKChjb3VudGVycyA+PiAxNikgXiBjb3VudGVycykgJiAweGZmZmY7CiB9CiAKICNkZWZpbmUgYXJjaF9zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIGFyY2hfc3Bpbl9sb2NrKGxvY2spCkBAIC00Nyw5ICs0Nyw5IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGFyY2hfc3Bpbl9pc19jb250ZW5kZWQoYXJjaF9zcGlubG9ja190ICpsb2NrKQogewotCXVuc2lnbmVkIGludCBjb3VudGVycyA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOworCXUzMiBjb3VudGVycyA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOwogCi0JcmV0dXJuICgoKGNvdW50ZXJzID4+IDE0KSAtIGNvdW50ZXJzKSAmIDB4MWZmZikgPiAxOworCXJldHVybiAoKChjb3VudGVycyA+PiAxNikgLSBjb3VudGVycykgJiAweGZmZmYpID4gMTsKIH0KICNkZWZpbmUgYXJjaF9zcGluX2lzX2NvbnRlbmRlZAlhcmNoX3NwaW5faXNfY29udGVuZGVkCiAKQEAgLTU3LDYgKzU3LDcgQEAKIHsKIAlpbnQgbXlfdGlja2V0OwogCWludCB0bXA7CisJaW50IGluYyA9IDB4MTAwMDA7CiAKIAlpZiAoUjEwMDAwX0xMU0NfV0FSKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKQEAgLTY0LDI1ICs2NSwyNCBAQAogCQkiCS5zZXQgbm9yZW9yZGVyCQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKIAkJIjE6CWxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYWRkaXUJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDB4NDAwMAkJXG4iCisJCSIJYWRkdQklW215X3RpY2tldF0sICVbdGlja2V0XSwgJVtpbmNdCQlcbiIKIAkJIglzYwklW215X3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgogCQkiCWJlcXpsCSVbbXlfdGlja2V0XSwgMWIJCQlcbiIKIAkJIgkgbm9wCQkJCQkJXG4iCi0JCSIJc3JsCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAxNAkJXG4iCi0JCSIJYW5kaQklW215X3RpY2tldF0sICVbbXlfdGlja2V0XSwgMHgxZmZmCVxuIgotCQkiCWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MWZmZgkJXG4iCisJCSIJc3JsCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAxNgkJXG4iCisJCSIJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHhmZmZmCQlcbiIKKwkJIglhbmRpCSVbbXlfdGlja2V0XSwgJVtteV90aWNrZXRdLCAweGZmZmYJXG4iCiAJCSIJYm5lCSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCA0ZgkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sICVbdGlja2V0XQlcbiIKIAkJIjI6CQkJCQkJCVxuIgogCQkiCS5zdWJzZWN0aW9uIDIJCQkJCVxuIgotCQkiNDoJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKKwkJIjQ6CWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4ZmZmZgkJXG4iCiAJCSIJc2xsCSVbdGlja2V0XSwgNQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKIAkJIjY6CWJuZXoJJVt0aWNrZXRdLCA2YgkJCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sIDEJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCi0JCSIJbHcJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDFmZmYJCVxuIgorCQkiCWxodQklW3RpY2tldF0sICVbc2VydmluZ19ub3dfcHRyXQkJXG4iCiAJCSIJYmVxCSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCAyYgkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sICVbdGlja2V0XQlcbiIKIAkJIgliCTRiCQkJCQlcbiIKQEAgLTkwLDM2ICs5MCwzMyBAQAogCQkiCS5wcmV2aW91cwkJCQkJXG4iCiAJCSIJLnNldCBwb3AJCQkJCVxuIgogCQk6IFt0aWNrZXRfcHRyXSAiK20iIChsb2NrLT5sb2NrKSwKKwkJICBbc2VydmluZ19ub3dfcHRyXSAiK20iIChsb2NrLT5oLnNlcnZpbmdfbm93KSwKIAkJICBbdGlja2V0XSAiPSZyIiAodG1wKSwKLQkJICBbbXlfdGlja2V0XSAiPSZyIiAobXlfdGlja2V0KSk7CisJCSAgW215X3RpY2tldF0gIj0mciIgKG15X3RpY2tldCkKKwkJOiBbaW5jXSAiciIgKGluYykpOwogCX0gZWxzZSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIgkuc2V0IHB1c2gJCSMgYXJjaF9zcGluX2xvY2sJXG4iCiAJCSIJLnNldCBub3Jlb3JkZXIJCQkJCVxuIgogCQkiCQkJCQkJCVxuIgotCQkiCWxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIxOglhZGRpdQklW215X3RpY2tldF0sICVbdGlja2V0XSwgMHg0MDAwCQlcbiIKKwkJIjE6CWxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCisJCSIJYWRkdQklW215X3RpY2tldF0sICVbdGlja2V0XSwgJVtpbmNdCQlcbiIKIAkJIglzYwklW215X3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCWJlcXoJJVtteV90aWNrZXRdLCAzZgkJCVxuIgotCQkiCSBub3AJCQkJCQlcbiIKLQkJIglzcmwJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDE0CQlcbiIKLQkJIglhbmRpCSVbbXlfdGlja2V0XSwgJVtteV90aWNrZXRdLCAweDFmZmYJXG4iCi0JCSIJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKKwkJIgliZXF6CSVbbXlfdGlja2V0XSwgMWIJCQlcbiIKKwkJIgkgc3JsCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAxNgkJXG4iCisJCSIJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHhmZmZmCQlcbiIKKwkJIglhbmRpCSVbbXlfdGlja2V0XSwgJVtteV90aWNrZXRdLCAweGZmZmYJXG4iCiAJCSIJYm5lCSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCA0ZgkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sICVbdGlja2V0XQlcbiIKIAkJIjI6CQkJCQkJCVxuIgogCQkiCS5zdWJzZWN0aW9uIDIJCQkJCVxuIgotCQkiMzoJYgkxYgkJCQkJXG4iCi0JCSIJIGxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJCQkJCQkJXG4iCiAJCSI0OglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDFmZmYJCVxuIgogCQkiCXNsbAklW3RpY2tldF0sIDUJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCiAJCSI2OglibmV6CSVbdGlja2V0XSwgNmIJCQkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAxCQkJCVxuIgogCQkiCQkJCQkJCVxuIgotCQkiCWx3CSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKKwkJIglsaHUJJVt0aWNrZXRdLCAlW3NlcnZpbmdfbm93X3B0cl0JCVxuIgogCQkiCWJlcQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgMmIJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCAlW3RpY2tldF0JXG4iCiAJCSIJYgk0YgkJCQkJXG4iCkBAIC0xMjcsOCArMTI0LDEwIEBACiAJCSIJLnByZXZpb3VzCQkJCQlcbiIKIAkJIgkuc2V0IHBvcAkJCQkJXG4iCiAJCTogW3RpY2tldF9wdHJdICIrbSIgKGxvY2stPmxvY2spLAorCQkgIFtzZXJ2aW5nX25vd19wdHJdICIrbSIgKGxvY2stPmguc2VydmluZ19ub3cpLAogCQkgIFt0aWNrZXRdICI9JnIiICh0bXApLAotCQkgIFtteV90aWNrZXRdICI9JnIiIChteV90aWNrZXQpKTsKKwkJICBbbXlfdGlja2V0XSAiPSZyIiAobXlfdGlja2V0KQorCQk6IFtpbmNdICJyIiAoaW5jKSk7CiAJfQogCiAJc21wX2xsc2NfbWIoKTsKQEAgLTEzNiw0NyArMTM1LDE2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fdW5sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQlpbnQgdG1wOwotCi0Jc21wX2xsc2NfbWIoKTsKLQotCWlmIChSMTAwMDBfTExTQ19XQVIpIHsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiCQkJCSMgYXJjaF9zcGluX3VubG9jawlcbiIKLQkJIjE6CWxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYWRkaXUJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDEJCQlcbiIKLQkJIglvcmkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MjAwMAkJXG4iCi0JCSIJeG9yaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgyMDAwCQlcbiIKLQkJIglzYwklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCWJlcXpsCSVbdGlja2V0XSwgMWIJCQkJXG4iCi0JCTogW3RpY2tldF9wdHJdICIrbSIgKGxvY2stPmxvY2spLAotCQkgIFt0aWNrZXRdICI9JnIiICh0bXApKTsKLQl9IGVsc2UgewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIJLnNldCBwdXNoCQkjIGFyY2hfc3Bpbl91bmxvY2sJXG4iCi0JCSIJLnNldCBub3Jlb3JkZXIJCQkJCVxuIgotCQkiCQkJCQkJCVxuIgotCQkiCWxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIxOglhZGRpdQklW3RpY2tldF0sICVbdGlja2V0XSwgMQkJCVxuIgotCQkiCW9yaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgyMDAwCQlcbiIKLQkJIgl4b3JpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDIwMDAJCVxuIgotCQkiCXNjCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYmVxegklW3RpY2tldF0sIDJmCQkJCVxuIgotCQkiCSBub3AJCQkJCQlcbiIKLQkJIgkJCQkJCQlcbiIKLQkJIgkuc3Vic2VjdGlvbiAyCQkJCQlcbiIKLQkJIjI6CWIJMWIJCQkJCVxuIgotCQkiCSBsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCS5wcmV2aW91cwkJCQkJXG4iCi0JCSIJLnNldCBwb3AJCQkJCVxuIgotCQk6IFt0aWNrZXRfcHRyXSAiK20iIChsb2NrLT5sb2NrKSwKLQkJICBbdGlja2V0XSAiPSZyIiAodG1wKSk7Ci0JfQorCXVuc2lnbmVkIGludCBzZXJ2aW5nX25vdyA9IGxvY2stPmguc2VydmluZ19ub3cgKyAxOworCXdtYigpOworCWxvY2stPmguc2VydmluZ19ub3cgPSAodTE2KXNlcnZpbmdfbm93OworCW51ZGdlX3dyaXRlcygpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhcmNoX3NwaW5fdHJ5bG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJaW50IHRtcCwgdG1wMiwgdG1wMzsKKwlpbnQgaW5jID0gMHgxMDAwMDsKIAogCWlmIChSMTAwMDBfTExTQ19XQVIpIHsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKApAQCAtMTg0LDExICsxNTIsMTEgQEAKIAkJIgkuc2V0IG5vcmVvcmRlcgkJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCiAJCSIxOglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCXNybAklW215X3RpY2tldF0sICVbdGlja2V0XSwgMTQJCVxuIgotCQkiCWFuZGkJJVtteV90aWNrZXRdLCAlW215X3RpY2tldF0sIDB4MWZmZglcbiIKLQkJIglhbmRpCSVbbm93X3NlcnZpbmddLCAlW3RpY2tldF0sIDB4MWZmZglcbiIKKwkJIglzcmwJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDE2CQlcbiIKKwkJIglhbmRpCSVbbXlfdGlja2V0XSwgJVtteV90aWNrZXRdLCAweGZmZmYJXG4iCisJCSIJYW5kaQklW25vd19zZXJ2aW5nXSwgJVt0aWNrZXRdLCAweGZmZmYJXG4iCiAJCSIJYm5lCSVbbXlfdGlja2V0XSwgJVtub3dfc2VydmluZ10sIDNmCVxuIgotCQkiCSBhZGRpdQklW3RpY2tldF0sICVbdGlja2V0XSwgMHg0MDAwCQlcbiIKKwkJIgkgYWRkdQklW3RpY2tldF0sICVbdGlja2V0XSwgJVtpbmNdCQlcbiIKIAkJIglzYwklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgogCQkiCWJlcXpsCSVbdGlja2V0XSwgMWIJCQkJXG4iCiAJCSIJIGxpCSVbdGlja2V0XSwgMQkJCQlcbiIKQEAgLTIwMSwzMyArMTY5LDMzIEBACiAJCTogW3RpY2tldF9wdHJdICIrbSIgKGxvY2stPmxvY2spLAogCQkgIFt0aWNrZXRdICI9JnIiICh0bXApLAogCQkgIFtteV90aWNrZXRdICI9JnIiICh0bXAyKSwKLQkJICBbbm93X3NlcnZpbmddICI9JnIiICh0bXAzKSk7CisJCSAgW25vd19zZXJ2aW5nXSAiPSZyIiAodG1wMykKKwkJOiBbaW5jXSAiciIgKGluYykpOwogCX0gZWxzZSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIgkuc2V0IHB1c2gJCSMgYXJjaF9zcGluX3RyeWxvY2sJXG4iCiAJCSIJLnNldCBub3Jlb3JkZXIJCQkJCVxuIgogCQkiCQkJCQkJCVxuIgotCQkiCWxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIxOglzcmwJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDE0CQlcbiIKLQkJIglhbmRpCSVbbXlfdGlja2V0XSwgJVtteV90aWNrZXRdLCAweDFmZmYJXG4iCi0JCSIJYW5kaQklW25vd19zZXJ2aW5nXSwgJVt0aWNrZXRdLCAweDFmZmYJXG4iCisJCSIxOglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgorCQkiCXNybAklW215X3RpY2tldF0sICVbdGlja2V0XSwgMTYJCVxuIgorCQkiCWFuZGkJJVtteV90aWNrZXRdLCAlW215X3RpY2tldF0sIDB4ZmZmZglcbiIKKwkJIglhbmRpCSVbbm93X3NlcnZpbmddLCAlW3RpY2tldF0sIDB4ZmZmZglcbiIKIAkJIglibmUJJVtteV90aWNrZXRdLCAlW25vd19zZXJ2aW5nXSwgM2YJXG4iCi0JCSIJIGFkZGl1CSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDQwMDAJCVxuIgorCQkiCSBhZGR1CSVbdGlja2V0XSwgJVt0aWNrZXRdLCAlW2luY10JCVxuIgogCQkiCXNjCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYmVxegklW3RpY2tldF0sIDRmCQkJCVxuIgorCQkiCWJlcXoJJVt0aWNrZXRdLCAxYgkJCQlcbiIKIAkJIgkgbGkJJVt0aWNrZXRdLCAxCQkJCVxuIgogCQkiMjoJCQkJCQkJXG4iCiAJCSIJLnN1YnNlY3Rpb24gMgkJCQkJXG4iCiAJCSIzOgliCTJiCQkJCQlcbiIKIAkJIgkgbGkJJVt0aWNrZXRdLCAwCQkJCVxuIgotCQkiNDoJYgkxYgkJCQkJXG4iCi0JCSIJIGxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCiAJCSIJLnByZXZpb3VzCQkJCQlcbiIKIAkJIgkuc2V0IHBvcAkJCQkJXG4iCiAJCTogW3RpY2tldF9wdHJdICIrbSIgKGxvY2stPmxvY2spLAogCQkgIFt0aWNrZXRdICI9JnIiICh0bXApLAogCQkgIFtteV90aWNrZXRdICI9JnIiICh0bXAyKSwKLQkJICBbbm93X3NlcnZpbmddICI9JnIiICh0bXAzKSk7CisJCSAgW25vd19zZXJ2aW5nXSAiPSZyIiAodG1wMykKKwkJOiBbaW5jXSAiciIgKGluYykpOwogCX0KIAogCXNtcF9sbHNjX21iKCk7CkBAIC0zMDUsNyArMjczLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoUjEwMDAwX0xMU0NfV0FSKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fKApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAppbmRleCBlZTE5N2MyLi5jNTJmMzYwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaApAQCAtNSwxNiArNSwyOCBAQAogIyBlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgogI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IHsKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCit0eXBlZGVmIHVuaW9uIHsKIAkvKgotCSAqIGJpdHMgIDAuLjEzOiBzZXJ2aW5nX25vdwotCSAqIGJpdHMgMTQgICAgOiBqdW5rIGRhdGEKLQkgKiBiaXRzIDE1Li4yODogdGlja2V0CisJICogYml0cyAgMC4uMTUgOiBzZXJ2aW5nX25vdworCSAqIGJpdHMgMTYuLjMxIDogdGlja2V0CiAJICovCi0JdW5zaWduZWQgaW50IGxvY2s7CisJdTMyIGxvY2s7CisJc3RydWN0IHsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJdTE2IHRpY2tldDsKKwkJdTE2IHNlcnZpbmdfbm93OworI2Vsc2UKKwkJdTE2IHNlcnZpbmdfbm93OworCQl1MTYgdGlja2V0OworI2VuZGlmCisJfSBoOwogfSBhcmNoX3NwaW5sb2NrX3Q7CiAKLSNkZWZpbmUgX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRAl7IDAgfQorI2RlZmluZSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VECXsgLmxvY2sgPSAwIH0KIAogdHlwZWRlZiBzdHJ1Y3QgewogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IDgzYjU1MDkuLmJiOTM3Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTk1LDYgKzk1LDggQEAKIHsKIAlfX3UzMiByZXR2YWw7CiAKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CisKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJdW5zaWduZWQgbG9uZyBkdW1teTsKIApAQCAtMTQ3LDYgKzE0OSw4IEBACiB7CiAJX191NjQgcmV0dmFsOwogCisJc21wX21iX19iZWZvcmVfbGxzYygpOworCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eHg5L2dlbmVyaWMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eHg5L2dlbmVyaWMuaAppbmRleCA4MjdkYzIyLi42NDg4N2QzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdHh4OS9nZW5lcmljLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R4eDkvZ2VuZXJpYy5oCkBAIC00Miw3ICs0Miw2IEBACiB9OwogZXh0ZXJuIHN0cnVjdCB0eHg5X2JvYXJkX3ZlYyAqdHh4OV9ib2FyZF92ZWM7CiBleHRlcm4gaW50ICgqdHh4OV9pcnFfZGlzcGF0Y2gpKGludCBwZW5kaW5nKTsKLWNoYXIgKnByb21fZ2V0Y21kbGluZSh2b2lkKTsKIGNvbnN0IGNoYXIgKnByb21fZ2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpOwogdm9pZCB0eHg5X3dkdF9pbml0KHVuc2lnbmVkIGxvbmcgYmFzZSk7CiB2b2lkIHR4eDlfd2R0X25vdyh1bnNpZ25lZCBsb25nIGJhc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3Vhc20uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91YXNtLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9taXBzL21tL3Vhc20uaApyZW5hbWUgdG8gYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Vhc20uaAppbmRleCAzZDE1M2VkLi5iOTliZDA3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdWFzbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91YXNtLmgKQEAgLTkyLDkgKzkyLDExIEBACiBJcF91MnUxdTMoX3NsbCk7CiBJcF91MnUxdTMoX3NyYSk7CiBJcF91MnUxdTMoX3NybCk7CitJcF91MnUxdTMoX3JvdHIpOwogSXBfdTN1MXUyKF9zdWJ1KTsKIElwX3UyczN1MShfc3cpOwogSXBfMChfdGxicCk7CitJcF8wKF90bGJyKTsKIElwXzAoX3RsYndpKTsKIElwXzAoX3RsYndyKTsKIElwX3UzdTF1MihfeG9yKTsKQEAgLTEyOSw2ICsxMzEsNyBAQAogIyBkZWZpbmUgVUFTTV9pX1NMTChidWYsIHJzLCBydCwgc2gpIHVhc21faV9kc2xsKGJ1ZiwgcnMsIHJ0LCBzaCkKICMgZGVmaW5lIFVBU01faV9TUkEoYnVmLCBycywgcnQsIHNoKSB1YXNtX2lfZHNyYShidWYsIHJzLCBydCwgc2gpCiAjIGRlZmluZSBVQVNNX2lfU1JMKGJ1ZiwgcnMsIHJ0LCBzaCkgdWFzbV9pX2RzcmwoYnVmLCBycywgcnQsIHNoKQorIyBkZWZpbmUgVUFTTV9pX1JPVFIoYnVmLCBycywgcnQsIHNoKSB1YXNtX2lfZHJvdHIoYnVmLCBycywgcnQsIHNoKQogIyBkZWZpbmUgVUFTTV9pX01GQzAoYnVmLCBydCwgcmQuLi4pIHVhc21faV9kbWZjMChidWYsIHJ0LCByZCkKICMgZGVmaW5lIFVBU01faV9NVEMwKGJ1ZiwgcnQsIHJkLi4uKSB1YXNtX2lfZG10YzAoYnVmLCBydCwgcmQpCiAjIGRlZmluZSBVQVNNX2lfQURESVUoYnVmLCBycywgcnQsIHZhbCkgdWFzbV9pX2RhZGRpdShidWYsIHJzLCBydCwgdmFsKQpAQCAtMTQyLDYgKzE0NSw3IEBACiAjIGRlZmluZSBVQVNNX2lfU0xMKGJ1ZiwgcnMsIHJ0LCBzaCkgdWFzbV9pX3NsbChidWYsIHJzLCBydCwgc2gpCiAjIGRlZmluZSBVQVNNX2lfU1JBKGJ1ZiwgcnMsIHJ0LCBzaCkgdWFzbV9pX3NyYShidWYsIHJzLCBydCwgc2gpCiAjIGRlZmluZSBVQVNNX2lfU1JMKGJ1ZiwgcnMsIHJ0LCBzaCkgdWFzbV9pX3NybChidWYsIHJzLCBydCwgc2gpCisjIGRlZmluZSBVQVNNX2lfUk9UUihidWYsIHJzLCBydCwgc2gpIHVhc21faV9yb3RyKGJ1ZiwgcnMsIHJ0LCBzaCkKICMgZGVmaW5lIFVBU01faV9NRkMwKGJ1ZiwgcnQsIHJkLi4uKSB1YXNtX2lfbWZjMChidWYsIHJ0LCByZCkKICMgZGVmaW5lIFVBU01faV9NVEMwKGJ1ZiwgcnQsIHJkLi4uKSB1YXNtX2lfbXRjMChidWYsIHJ0LCByZCkKICMgZGVmaW5lIFVBU01faV9BRERJVShidWYsIHJzLCBydCwgdmFsKSB1YXNtX2lfYWRkaXUoYnVmLCBycywgcnQsIHZhbCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91Y29udGV4dC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKaW5kZXggOGE0YjIwZS4uOWJjMDdiOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKQEAgLTEsMjEgKzEgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBMb3cgbGV2ZWwgZXhjZXB0aW9uIGhhbmRsaW5nCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5IGJ5IFJhbGYgQmFlY2hsZQotICovCi0jaWZuZGVmIF9BU01fVUNPTlRFWFRfSAotI2RlZmluZSBfQVNNX1VDT05URVhUX0gKLQotc3RydWN0IHVjb250ZXh0IHsKLQl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7Ci0Jc3RydWN0IHVjb250ZXh0ICAqdWNfbGluazsKLQlzdGFja190CQkgIHVjX3N0YWNrOwotCXN0cnVjdCBzaWdjb250ZXh0IHVjX21jb250ZXh0OwotCXNpZ3NldF90CSAgdWNfc2lnbWFzazsJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCi19OwotCi0jZW5kaWYgLyogX0FTTV9VQ09OVEVYVF9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdWNvbnRleHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L2lycS5jIGIvYXJjaC9taXBzL2phenovaXJxLmMKaW5kZXggN2JkMzJkMC4uZWUxODAyOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2phenovaXJxLmMKKysrIGIvYXJjaC9taXBzL2phenovaXJxLmMKQEAgLTIwLDE3ICsyMCwxNyBAQAogI2luY2x1ZGUgPGFzbS9qYXp6Lmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAotc3RhdGljIERFRklORV9TUElOTE9DSyhyNDAzMF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHI0MDMwX2xvY2spOwogCiBzdGF0aWMgdm9pZCBlbmFibGVfcjQwMzBfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAxIDw8IChpcnEgLSBKQVpaX0lSUV9TVEFSVCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZyNDAzMF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZyNDAzMF9sb2NrLCBmbGFncyk7CiAJbWFzayB8PSByNDAzMF9yZWFkX3JlZzE2KEpBWlpfSU9fSVJRX0VOQUJMRSk7CiAJcjQwMzBfd3JpdGVfcmVnMTYoSkFaWl9JT19JUlFfRU5BQkxFLCBtYXNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyNDAzMF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnI0MDMwX2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBkaXNhYmxlX3I0MDMwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMzgsMTAgKzM4LDEwIEBACiAJdW5zaWduZWQgaW50IG1hc2sgPSB+KDEgPDwgKGlycSAtIEpBWlpfSVJRX1NUQVJUKSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZyNDAzMF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZyNDAzMF9sb2NrLCBmbGFncyk7CiAJbWFzayAmPSByNDAzMF9yZWFkX3JlZzE2KEpBWlpfSU9fSVJRX0VOQUJMRSk7CiAJcjQwMzBfd3JpdGVfcmVnMTYoSkFaWl9JT19JUlFfRU5BQkxFLCBtYXNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyNDAzMF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnI0MDMwX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCByNDAzMF9pcnFfdHlwZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCmluZGV4IDkzMjZhZjUuLmVmMjA5NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQpAQCAtOTMsNiArOTMsNyBAQAogCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjLm8gcmVsb2NhdGVfa2VybmVsLm8KIG9iai0kKENPTkZJR19FQVJMWV9QUklOVEspCSs9IGVhcmx5X3ByaW50ay5vCitvYmotJChDT05GSUdfU1BJTkxPQ0tfVEVTVCkJKz0gc3BpbmxvY2tfdGVzdC5vCiAKIENGTEFHU19jcHUtYnVnczY0Lm8JPSAkKHNoZWxsIGlmICQoQ0MpICQoS0JVSUxEX0NGTEFHUykgLVdhLC1tZGFkZGkgLWMgLW8gL2Rldi9udWxsIC14YyAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIGVjaG8gIi1ESEFWRV9BU19TRVRfREFEREkiOyBmaSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDJjMWUxZDAuLmNhNmM4MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTE4OCwxMSArMTg4LDE1IEBACiAJREVGSU5FKF9QVEVfVF9TSVpFLCBzaXplb2YocHRlX3QpKTsKIAlCTEFOSygpOwogCURFRklORShfUEdEX1RfTE9HMiwgUEdEX1RfTE9HMik7CisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIAlERUZJTkUoX1BNRF9UX0xPRzIsIFBNRF9UX0xPRzIpOworI2VuZGlmCiAJREVGSU5FKF9QVEVfVF9MT0cyLCBQVEVfVF9MT0cyKTsKIAlCTEFOSygpOwogCURFRklORShfUEdEX09SREVSLCBQR0RfT1JERVIpOworI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAJREVGSU5FKF9QTURfT1JERVIsIFBNRF9PUkRFUik7CisjZW5kaWYKIAlERUZJTkUoX1BURV9PUkRFUiwgUFRFX09SREVSKTsKIAlCTEFOSygpOwogCURFRklORShfUE1EX1NISUZULCBQTURfU0hJRlQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1ndDY0MXh4LmMKaW5kZXggZjVkMjY1ZS4uMzkyZWYzNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtZ3Q2NDF4eC5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGd0NjQxeHhfdGltZXJfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhndDY0MXh4X3RpbWVyX2xvY2spOwogc3RhdGljIHVuc2lnbmVkIGludCBndDY0MXh4X2Jhc2VfY2xvY2s7CiAKIHZvaWQgZ3Q2NDF4eF9zZXRfYmFzZV9jbG9jayh1bnNpZ25lZCBpbnQgY2xvY2spCkBAIC00OSw3ICs0OSw3IEBACiB7CiAJdTMyIGN0cmw7CiAKLQlzcGluX2xvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmZ3Q2NDF4eF90aW1lcl9sb2NrKTsKIAogCWN0cmwgPSBHVF9SRUFEKEdUX1RDX0NPTlRST0xfT0ZTKTsKIAljdHJsICY9IH4oR1RfVENfQ09OVFJPTF9FTlRDMF9NU0sgfCBHVF9UQ19DT05UUk9MX1NFTFRDMF9NU0spOwpAQCAtNTgsNyArNTgsNyBAQAogCUdUX1dSSVRFKEdUX1RDMF9PRlMsIGRlbHRhKTsKIAlHVF9XUklURShHVF9UQ19DT05UUk9MX09GUywgY3RybCk7CiAKLQlzcGluX3VubG9jaygmZ3Q2NDF4eF90aW1lcl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY4LDcgKzY4LDcgQEAKIHsKIAl1MzIgY3RybDsKIAotCXNwaW5fbG9jaygmZ3Q2NDF4eF90aW1lcl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZndDY0MXh4X3RpbWVyX2xvY2spOwogCiAJY3RybCA9IEdUX1JFQUQoR1RfVENfQ09OVFJPTF9PRlMpOwogCWN0cmwgJj0gfihHVF9UQ19DT05UUk9MX0VOVEMwX01TSyB8IEdUX1RDX0NPTlRST0xfU0VMVEMwX01TSyk7CkBAIC04Niw3ICs4Niw3IEBACiAKIAlHVF9XUklURShHVF9UQ19DT05UUk9MX09GUywgY3RybCk7CiAKLQlzcGluX3VubG9jaygmZ3Q2NDF4eF90aW1lcl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGd0NjQxeHhfdGltZXIwX2V2ZW50X2hhbmRsZXIoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKaW5kZXggODBlMjAyZS4uYmU1YmIxNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwpAQCAtMTYyLDYgKzE2Miw3IEBACiAJY2FzZSBDUFVfQkNNNjM0ODoKIAljYXNlIENQVV9CQ002MzU4OgogCWNhc2UgQ1BVX0NBVklVTV9PQ1RFT046CisJY2FzZSBDUFVfQ0FWSVVNX09DVEVPTl9QTFVTOgogCQljcHVfd2FpdCA9IHI0a193YWl0OwogCQlicmVhazsKIApAQCAtMjg0LDYgKzI4NSwxNSBAQAogCXJldHVybiAoKGNwdV9nZXRfZnB1X2lkKCkgJiAweGZmMDApICE9IEZQSVJfSU1QX05PTkUpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3Byb2JlX3ZtYml0cyhzdHJ1Y3QgY3B1aW5mb19taXBzICpjKQoreworI2lmZGVmIF9fTkVFRF9WTUJJVFNfUFJPQkUKKwl3cml0ZV9jMF9lbnRyeWhpKDB4M2ZmZmZmZmZmZmZmZTAwMFVMTCk7CisJYmFja190b19iYWNrX2MwX2hhemFyZCgpOworCWMtPnZtYml0cyA9IGZsczY0KHJlYWRfYzBfZW50cnloaSgpICYgMHgzZmZmZmZmZmZmZmZlMDAwVUxMKTsKKyNlbmRpZgorfQorCiAjZGVmaW5lIFI0S19PUFRTIChNSVBTX0NQVV9UTEIgfCBNSVBTX0NQVV80S0VYIHwgTUlQU19DUFVfNEtfQ0FDSEUgXAogCQl8IE1JUFNfQ1BVX0NPVU5URVIpCiAKQEAgLTY5MSw2ICs3MDEsMTkgQEAKIAlyZXR1cm4gY29uZmlnMyAmIE1JUFNfQ09ORl9NOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkZWNvZGVfY29uZmlnNChzdHJ1Y3QgY3B1aW5mb19taXBzICpjKQoreworCXVuc2lnbmVkIGludCBjb25maWc0OworCisJY29uZmlnNCA9IHJlYWRfYzBfY29uZmlnNCgpOworCisJaWYgKChjb25maWc0ICYgTUlQU19DT05GNF9NTVVFWFRERUYpID09IE1JUFNfQ09ORjRfTU1VRVhUREVGX01NVVNJWkVFWFQKKwkgICAgJiYgY3B1X2hhc190bGIpCisJCWMtPnRsYnNpemUgKz0gKGNvbmZpZzQgJiBNSVBTX0NPTkY0X01NVVNJWkVFWFQpICogMHg0MDsKKworCXJldHVybiBjb25maWc0ICYgTUlQU19DT05GX007Cit9CisKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBkZWNvZGVfY29uZmlncyhzdHJ1Y3QgY3B1aW5mb19taXBzICpjKQogewogCWludCBvazsKQEAgLTcwOSw2ICs3MzIsOCBAQAogCQlvayA9IGRlY29kZV9jb25maWcyKGMpOwogCWlmIChvaykKIAkJb2sgPSBkZWNvZGVfY29uZmlnMyhjKTsKKwlpZiAob2spCisJCW9rID0gZGVjb2RlX2NvbmZpZzQoYyk7CiAKIAltaXBzX3Byb2JlX3dhdGNoX3JlZ2lzdGVycyhjKTsKIH0KQEAgLTcyMiw5ICs3NDcsNiBAQAogCQlfX2NwdV9uYW1lW2NwdV0gPSAiTUlQUyA0S2MiOwogCQlicmVhazsKIAljYXNlIFBSSURfSU1QXzRLRUM6Ci0JCWMtPmNwdXR5cGUgPSBDUFVfNEtFQzsKLQkJX19jcHVfbmFtZVtjcHVdID0gIk1JUFMgNEtFYyI7Ci0JCWJyZWFrOwogCWNhc2UgUFJJRF9JTVBfNEtFQ1IyOgogCQljLT5jcHV0eXBlID0gQ1BVXzRLRUM7CiAJCV9fY3B1X25hbWVbY3B1XSA9ICJNSVBTIDRLRWMiOwpAQCAtODkwLDEyICs5MTIsMTggQEAKIAljYXNlIFBSSURfSU1QX0NBVklVTV9DTjM4WFg6CiAJY2FzZSBQUklEX0lNUF9DQVZJVU1fQ04zMVhYOgogCWNhc2UgUFJJRF9JTVBfQ0FWSVVNX0NOMzBYWDoKKwkJYy0+Y3B1dHlwZSA9IENQVV9DQVZJVU1fT0NURU9OOworCQlfX2NwdV9uYW1lW2NwdV0gPSAiQ2F2aXVtIE9jdGVvbiI7CisJCWdvdG8gcGxhdGZvcm07CiAJY2FzZSBQUklEX0lNUF9DQVZJVU1fQ041OFhYOgogCWNhc2UgUFJJRF9JTVBfQ0FWSVVNX0NONTZYWDoKIAljYXNlIFBSSURfSU1QX0NBVklVTV9DTjUwWFg6CiAJY2FzZSBQUklEX0lNUF9DQVZJVU1fQ041MlhYOgotCQljLT5jcHV0eXBlID0gQ1BVX0NBVklVTV9PQ1RFT047Ci0JCV9fY3B1X25hbWVbY3B1XSA9ICJDYXZpdW0gT2N0ZW9uIjsKKwkJYy0+Y3B1dHlwZSA9IENQVV9DQVZJVU1fT0NURU9OX1BMVVM7CisJCV9fY3B1X25hbWVbY3B1XSA9ICJDYXZpdW0gT2N0ZW9uKyI7CitwbGF0Zm9ybToKKwkJaWYgKGNwdSA9PSAwKQorCQkJX19lbGZfcGxhdGZvcm0gPSAib2N0ZW9uIjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVW5rbm93biBPY3Rlb24gY2hpcCFcbiIpOwpAQCAtOTA1LDYgKzkzMyw3IEBACiB9CiAKIGNvbnN0IGNoYXIgKl9fY3B1X25hbWVbTlJfQ1BVU107Citjb25zdCBjaGFyICpfX2VsZl9wbGF0Zm9ybTsKIAogX19jcHVpbml0IHZvaWQgY3B1X3Byb2JlKHZvaWQpCiB7CkBAIC05NjksNiArOTk4LDggQEAKIAkJYy0+c3JzZXRzID0gKChyZWFkX2MwX3Nyc2N0bCgpID4+IDI2KSAmIDB4MGYpICsgMTsKIAllbHNlCiAJCWMtPnNyc2V0cyA9IDE7CisKKwljcHVfcHJvYmVfdm1iaXRzKGMpOwogfQogCiBfX2NwdWluaXQgdm9pZCBjcHVfcmVwb3J0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYwppbmRleCA2OGIwNjcwLi5lOWU2NGUwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRFNMYWIsIExhbnpob3UgVW5pdmVyc2l0eSwgQ2hpbmEKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoYW5rcyBnb2VzIHRvIFN0ZXZlbiBSb3N0ZWR0IGZvciB3cml0aW5nIHRoZSBvcmlnaW5hbCB4ODYgdmVyc2lvbi4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jCmluZGV4IDAxYzA4ODUuLjI3Nzk5MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYworKysgYi9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMKQEAgLTI5LDcgKzI5LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IGk4MjU5QV9hdXRvX2VvaSA9IC0xOwotREVGSU5FX1NQSU5MT0NLKGk4MjU5QV9sb2NrKTsKK0RFRklORV9SQVdfU1BJTkxPQ0soaTgyNTlBX2xvY2spOwogc3RhdGljIHZvaWQgZGlzYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7CiBzdGF0aWMgdm9pZCBlbmFibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogc3RhdGljIHZvaWQgbWFza19hbmRfYWNrXzgyNTlBKHVuc2lnbmVkIGludCBpcnEpOwpAQCAtNjUsMTMgKzY1LDEzIEBACiAKIAlpcnEgLT0gSTgyNTlBX0lSUV9CQVNFOwogCW1hc2sgPSAxIDw8IGlycTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAJY2FjaGVkX2lycV9tYXNrIHw9IG1hc2s7CiAJaWYgKGlycSAmIDgpCiAJCW91dGIoY2FjaGVkX3NsYXZlX21hc2ssIFBJQ19TTEFWRV9JTVIpOwogCWVsc2UKIAkJb3V0YihjYWNoZWRfbWFzdGVyX21hc2ssIFBJQ19NQVNURVJfSU1SKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC04MSwxMyArODEsMTMgQEAKIAogCWlycSAtPSBJODI1OUFfSVJRX0JBU0U7CiAJbWFzayA9IH4oMSA8PCBpcnEpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAljYWNoZWRfaXJxX21hc2sgJj0gbWFzazsKIAlpZiAoaXJxICYgOCkKIAkJb3V0YihjYWNoZWRfc2xhdmVfbWFzaywgUElDX1NMQVZFX0lNUik7CiAJZWxzZQogCQlvdXRiKGNhY2hlZF9tYXN0ZXJfbWFzaywgUElDX01BU1RFUl9JTVIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiB9CiAKIGludCBpODI1OUFfaXJxX3BlbmRpbmcodW5zaWduZWQgaW50IGlycSkKQEAgLTk4LDEyICs5OCwxMiBAQAogCiAJaXJxIC09IEk4MjU5QV9JUlFfQkFTRTsKIAltYXNrID0gMSA8PCBpcnE7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCWlmIChpcnEgPCA4KQogCQlyZXQgPSBpbmIoUElDX01BU1RFUl9DTUQpICYgbWFzazsKIAllbHNlCiAJCXJldCA9IGluYihQSUNfU0xBVkVfQ01EKSAmIChtYXNrID4+IDgpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUxLDcgKzE1MSw3IEBACiAKIAlpcnEgLT0gSTgyNTlBX0lSUV9CQVNFOwogCWlycW1hc2sgPSAxIDw8IGlycTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAJLyoKIAkgKiBMaWdodHdlaWdodCBzcHVyaW91cyBJUlEgZGV0ZWN0aW9uLiBXZSBkbyBub3Qgd2FudAogCSAqIHRvIG92ZXJkbyBzcHVyaW91cyBJUlEgaGFuZGxpbmcgLSBpdCdzIHVzdWFsbHkgYSBzaWduCkBAIC0xODMsNyArMTgzLDcgQEAKIAkJb3V0YigweDYwK2lycSwgUElDX01BU1RFUl9DTUQpOwkvKiAnU3BlY2lmaWMgRU9JIHRvIG1hc3RlciAqLwogCX0KIAlzbXRjX2ltX2Fja19pcnEoaXJxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCXJldHVybjsKIAogc3B1cmlvdXNfODI1OUFfaXJxOgpAQCAtMjY0LDcgKzI2NCw3IEBACiAKIAlpODI1OUFfYXV0b19lb2kgPSBhdXRvX2VvaTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCW91dGIoMHhmZiwgUElDX01BU1RFUl9JTVIpOwkvKiBtYXNrIGFsbCBvZiA4MjU5QS0xICovCiAJb3V0YigweGZmLCBQSUNfU0xBVkVfSU1SKTsJLyogbWFzayBhbGwgb2YgODI1OUEtMiAqLwpAQCAtMjk4LDcgKzI5OCw3IEBACiAJb3V0YihjYWNoZWRfbWFzdGVyX21hc2ssIFBJQ19NQVNURVJfSU1SKTsgLyogcmVzdG9yZSBtYXN0ZXIgSVJRIG1hc2sgKi8KIAlvdXRiKGNhY2hlZF9zbGF2ZV9tYXNrLCBQSUNfU0xBVkVfSU1SKTsJICAvKiByZXN0b3JlIHNsYXZlIElSUSBtYXNrICovCiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtZ3Q2NDF4eC5jIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEtZ3Q2NDF4eC5jCmluZGV4IGViY2M1ZjcuLjQyZWY4MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWd0NjQxeHguYworKysgYi9hcmNoL21pcHMva2VybmVsL2lycS1ndDY0MXh4LmMKQEAgLTI3LDE4ICsyNywxOCBAQAogCiAjZGVmaW5lIEdUNjQxWFhfSVJRX1RPX0JJVChpcnEpCSgxVSA8PCAoaXJxIC0gR1Q2NDFYWF9JUlFfQkFTRSkpCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ3Q2NDF4eF9pcnFfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhndDY0MXh4X2lycV9sb2NrKTsKIAogc3RhdGljIHZvaWQgYWNrX2d0NjQxeHhfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgY2F1c2U7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOwogCWNhdXNlID0gR1RfUkVBRChHVF9JTlRSQ0FVU0VfT0ZTKTsKIAljYXVzZSAmPSB+R1Q2NDFYWF9JUlFfVE9fQklUKGlycSk7CiAJR1RfV1JJVEUoR1RfSU5UUkNBVVNFX09GUywgY2F1c2UpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBtYXNrX2d0NjQxeHhfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC00NiwxMSArNDYsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBtYXNrOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKIAltYXNrID0gR1RfUkVBRChHVF9JTlRSTUFTS19PRlMpOwogCW1hc2sgJj0gfkdUNjQxWFhfSVJRX1RPX0JJVChpcnEpOwogCUdUX1dSSVRFKEdUX0lOVFJNQVNLX09GUywgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1hc2tfYWNrX2d0NjQxeHhfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC01OCw3ICs1OCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgY2F1c2UsIG1hc2s7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOwogCW1hc2sgPSBHVF9SRUFEKEdUX0lOVFJNQVNLX09GUyk7CiAJbWFzayAmPSB+R1Q2NDFYWF9JUlFfVE9fQklUKGlycSk7CiAJR1RfV1JJVEUoR1RfSU5UUk1BU0tfT0ZTLCBtYXNrKTsKQEAgLTY2LDcgKzY2LDcgQEAKIAljYXVzZSA9IEdUX1JFQUQoR1RfSU5UUkNBVVNFX09GUyk7CiAJY2F1c2UgJj0gfkdUNjQxWFhfSVJRX1RPX0JJVChpcnEpOwogCUdUX1dSSVRFKEdUX0lOVFJDQVVTRV9PRlMsIGNhdXNlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgdW5tYXNrX2d0NjQxeHhfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC03NCwxMSArNzQsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBtYXNrOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKIAltYXNrID0gR1RfUkVBRChHVF9JTlRSTUFTS19PRlMpOwogCW1hc2sgfD0gR1Q2NDFYWF9JUlFfVE9fQklUKGlycSk7CiAJR1RfV1JJVEUoR1RfSU5UUk1BU0tfT0ZTLCBtYXNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBndDY0MXh4X2lycV9jaGlwID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMgYi9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYwppbmRleCBmMDQyNTYzLi5iZGU3OWVmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYworKysgYi9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYwpAQCAtOSw3ICs5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgogI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9tY291bnQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvbWNvdW50LlMKaW5kZXggMGE5Y2ZkYi4uNjg1MWZjOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9tY291bnQuUworKysgYi9hcmNoL21pcHMva2VybmVsL21jb3VudC5TCkBAIC02LDcgKzYsNyBAQAogICogbW9yZSBkZXRhaWxzLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIERTTGFiLCBMYW56aG91IFVuaXZlcnNpdHksIENoaW5hCi0gKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9vY3Rlb25fc3dpdGNoLlMgYi9hcmNoL21pcHMva2VybmVsL29jdGVvbl9zd2l0Y2guUwppbmRleCAzOTUyYjgzLi5kZDE4YjI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL29jdGVvbl9zd2l0Y2guUworKysgYi9hcmNoL21pcHMva2VybmVsL29jdGVvbl9zd2l0Y2guUwpAQCAtNTAwLDQgKzUwMCwzIEBACiAJIG5vcAogCUVORChvY3Rlb25fbXVsdF9yZXN0b3JlKQogCS5zZXQgcG9wCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKaW5kZXggMzY0ZjA2Ni4uZGNhZWQxYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlbG9hZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NwaW5sb2NrX3Rlc3QuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc3BpbmxvY2tfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNjExMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL3NwaW5sb2NrX3Rlc3QuYwpAQCAtMCwwICsxLDE0MSBAQAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKworc3RhdGljIGludCBzc19nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCit7CisJa3RpbWVfdCBzdGFydCwgZmluaXNoOworCWludCBsb29wczsKKwlpbnQgY29udDsKKwlERUZJTkVfUkFXX1NQSU5MT0NLKHNzX3NwaW4pOworCisJbG9vcHMgPSAxMDAwMDAwOworCWNvbnQgPSAxOworCisJc3RhcnQgPSBrdGltZV9nZXQoKTsKKworCXdoaWxlIChjb250KSB7CisJCXJhd19zcGluX2xvY2soJnNzX3NwaW4pOworCQlsb29wcy0tOworCQlpZiAobG9vcHMgPT0gMCkKKwkJCWNvbnQgPSAwOworCQlyYXdfc3Bpbl91bmxvY2soJnNzX3NwaW4pOworCX0KKworCWZpbmlzaCA9IGt0aW1lX2dldCgpOworCisJKnZhbCA9IGt0aW1lX3VzX2RlbHRhKGZpbmlzaCwgc3RhcnQpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGZvcHNfc3MsIHNzX2dldCwgTlVMTCwgIiVsbHVcbiIpOworCisKKworc3RydWN0IHNwaW5fbXVsdGlfc3RhdGUgeworCXJhd19zcGlubG9ja190IGxvY2s7CisJYXRvbWljX3Qgc3RhcnRfd2FpdDsKKwlhdG9taWNfdCBlbnRlcl93YWl0OworCWF0b21pY190IGV4aXRfd2FpdDsKKwlpbnQgbG9vcHM7Cit9OworCitzdHJ1Y3Qgc3Bpbl9tdWx0aV9wZXJfdGhyZWFkIHsKKwlzdHJ1Y3Qgc3Bpbl9tdWx0aV9zdGF0ZSAqc3RhdGU7CisJa3RpbWVfdCBzdGFydDsKK307CisKK3N0YXRpYyBpbnQgbXVsdGlfb3RoZXIodm9pZCAqZGF0YSkKK3sKKwlpbnQgbG9vcHM7CisJaW50IGNvbnQ7CisJc3RydWN0IHNwaW5fbXVsdGlfcGVyX3RocmVhZCAqcHQgPSBkYXRhOworCXN0cnVjdCBzcGluX211bHRpX3N0YXRlICpzID0gcHQtPnN0YXRlOworCisJbG9vcHMgPSBzLT5sb29wczsKKwljb250ID0gMTsKKworCWF0b21pY19kZWMoJnMtPmVudGVyX3dhaXQpOworCisJd2hpbGUgKGF0b21pY19yZWFkKCZzLT5lbnRlcl93YWl0KSkKKwkJOyAvKiBzcGluICovCisKKwlwdC0+c3RhcnQgPSBrdGltZV9nZXQoKTsKKworCWF0b21pY19kZWMoJnMtPnN0YXJ0X3dhaXQpOworCisJd2hpbGUgKGF0b21pY19yZWFkKCZzLT5zdGFydF93YWl0KSkKKwkJOyAvKiBzcGluICovCisKKwl3aGlsZSAoY29udCkgeworCQlyYXdfc3Bpbl9sb2NrKCZzLT5sb2NrKTsKKwkJbG9vcHMtLTsKKwkJaWYgKGxvb3BzID09IDApCisJCQljb250ID0gMDsKKwkJcmF3X3NwaW5fdW5sb2NrKCZzLT5sb2NrKTsKKwl9CisKKwlhdG9taWNfZGVjKCZzLT5leGl0X3dhaXQpOworCXdoaWxlIChhdG9taWNfcmVhZCgmcy0+ZXhpdF93YWl0KSkKKwkJOyAvKiBzcGluICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXVsdGlfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCWt0aW1lX3QgZmluaXNoOworCXN0cnVjdCBzcGluX211bHRpX3N0YXRlIG1zOworCXN0cnVjdCBzcGluX211bHRpX3Blcl90aHJlYWQgdDEsIHQyOworCisJbXMubG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCgibXVsdGlfZ2V0Iik7CisJbXMubG9vcHMgPSAxMDAwMDAwOworCisJYXRvbWljX3NldCgmbXMuc3RhcnRfd2FpdCwgMik7CisJYXRvbWljX3NldCgmbXMuZW50ZXJfd2FpdCwgMik7CisJYXRvbWljX3NldCgmbXMuZXhpdF93YWl0LCAyKTsKKwl0MS5zdGF0ZSA9ICZtczsKKwl0Mi5zdGF0ZSA9ICZtczsKKworCWt0aHJlYWRfcnVuKG11bHRpX290aGVyLCAmdDIsICJtdWx0aV9nZXQiKTsKKworCW11bHRpX290aGVyKCZ0MSk7CisKKwlmaW5pc2ggPSBrdGltZV9nZXQoKTsKKworCSp2YWwgPSBrdGltZV91c19kZWx0YShmaW5pc2gsIHQxLnN0YXJ0KTsKKworCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0FUVFJJQlVURShmb3BzX211bHRpLCBtdWx0aV9nZXQsIE5VTEwsICIlbGx1XG4iKTsKKworCitleHRlcm4gc3RydWN0IGRlbnRyeSAqbWlwc19kZWJ1Z2ZzX2RpcjsKK3N0YXRpYyBpbnQgX19pbml0IHNwaW5sb2NrX3Rlc3Qodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkOworCisJaWYgKCFtaXBzX2RlYnVnZnNfZGlyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzcGluX3NpbmdsZSIsIFNfSVJVR08sCisJCQkJbWlwc19kZWJ1Z2ZzX2RpciwgTlVMTCwKKwkJCQkmZm9wc19zcyk7CisJaWYgKCFkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzcGluX211bHRpIiwgU19JUlVHTywKKwkJCQltaXBzX2RlYnVnZnNfZGlyLCBOVUxMLAorCQkJCSZmb3BzX211bHRpKTsKKwlpZiAoIWQpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoc3BpbmxvY2tfdGVzdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKaW5kZXggMzM4ZGZlOC4uNGUwMGY5YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS91YXNtLmg+CiAKIGV4dGVybiB2b2lkIGNoZWNrX3dhaXQodm9pZCk7CiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIHI0a193YWl0KHZvaWQpOwpAQCAtMTI3MSwyMSArMTI3MiwyNSBAQAogdW5zaWduZWQgbG9uZyBleGNlcHRpb25faGFuZGxlcnNbMzJdOwogdW5zaWduZWQgbG9uZyB2aV9oYW5kbGVyc1s2NF07CiAKLS8qCi0gKiBBcyBhIHNpZGUgZWZmZWN0IG9mIHRoZSB3YXkgdGhpcyBpcyBpbXBsZW1lbnRlZCB3ZSdyZSBsaW1pdGVkCi0gKiB0byBpbnRlcnJ1cHQgaGFuZGxlcnMgaW4gdGhlIGFkZHJlc3MgcmFuZ2UgZnJvbQotICogS1NFRzAgPD0geCA8IEtTRUcwICsgMjU2bWIgb24gdGhlIE5ldmFkYS4gIE9oIHdlbGwgLi4uCi0gKi8KLXZvaWQgKnNldF9leGNlcHRfdmVjdG9yKGludCBuLCB2b2lkICphZGRyKQordm9pZCBfX2luaXQgKnNldF9leGNlcHRfdmVjdG9yKGludCBuLCB2b2lkICphZGRyKQogewogCXVuc2lnbmVkIGxvbmcgaGFuZGxlciA9ICh1bnNpZ25lZCBsb25nKSBhZGRyOwogCXVuc2lnbmVkIGxvbmcgb2xkX2hhbmRsZXIgPSBleGNlcHRpb25faGFuZGxlcnNbbl07CiAKIAlleGNlcHRpb25faGFuZGxlcnNbbl0gPSBoYW5kbGVyOwogCWlmIChuID09IDAgJiYgY3B1X2hhc19kaXZlYykgewotCQkqKHUzMiAqKShlYmFzZSArIDB4MjAwKSA9IDB4MDgwMDAwMDAgfAotCQkJCQkgICgweDAzZmZmZmZmICYgKGhhbmRsZXIgPj4gMikpOwotCQlsb2NhbF9mbHVzaF9pY2FjaGVfcmFuZ2UoZWJhc2UgKyAweDIwMCwgZWJhc2UgKyAweDIwNCk7CisJCXVuc2lnbmVkIGxvbmcganVtcF9tYXNrID0gfigoMSA8PCAyOCkgLSAxKTsKKwkJdTMyICpidWYgPSAodTMyICopKGViYXNlICsgMHgyMDApOworCQl1bnNpZ25lZCBpbnQgazAgPSAyNjsKKwkJaWYgKChoYW5kbGVyICYganVtcF9tYXNrKSA9PSAoKGViYXNlICsgMHgyMDApICYganVtcF9tYXNrKSkgeworCQkJdWFzbV9pX2ooJmJ1ZiwgaGFuZGxlciAmIH5qdW1wX21hc2spOworCQkJdWFzbV9pX25vcCgmYnVmKTsKKwkJfSBlbHNlIHsKKwkJCVVBU01faV9MQSgmYnVmLCBrMCwgaGFuZGxlcik7CisJCQl1YXNtX2lfanIoJmJ1ZiwgazApOworCQkJdWFzbV9pX25vcCgmYnVmKTsKKwkJfQorCQlsb2NhbF9mbHVzaF9pY2FjaGVfcmFuZ2UoZWJhc2UgKyAweDIwMCwgKHVuc2lnbmVkIGxvbmcpYnVmKTsKIAl9CiAJcmV0dXJuICh2b2lkICopb2xkX2hhbmRsZXI7CiB9CkBAIC0xNTAxLDYgKzE1MDYsNyBAQAogCQkJY3AwX3BlcmZjb3VudF9pcnEgPSAtMTsKIAl9IGVsc2UgewogCQljcDBfY29tcGFyZV9pcnEgPSBDUDBfTEVHQUNZX0NPTVBBUkVfSVJROworCQljcDBfY29tcGFyZV9pcnFfc2hpZnQgPSBjcDBfY29tcGFyZV9pcnE7CiAJCWNwMF9wZXJmY291bnRfaXJxID0gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwppbmRleCA2MDQ3NzUyLi4yYmQyMTUxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlbG9hZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFzYXQvcGljdnVlLmggYi9hcmNoL21pcHMvbGFzYXQvcGljdnVlLmgKaW5kZXggOTFkZjU1My4uMmYwNzU3NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xhc2F0L3BpY3Z1ZS5oCisrKyBiL2FyY2gvbWlwcy9sYXNhdC9waWN2dWUuaApAQCAtNDIsNCArNDIsMyBAQAogCiB2b2lkIHB2Y19jbGVhcih2b2lkKTsKIHZvaWQgcHZjX2hvbWUodm9pZCk7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY21kbGluZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jbWRsaW5lLmMKaW5kZXggN2FkNDdmMi4uMWEwNmRlZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jbWRsaW5lLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jbWRsaW5lLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqIEF1dGhvcjogRnV4aW4gWmhhbmcsIHpoYW5nZnhAbGVtb3RlLmNvbQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0yMSwxMiArMjEsMTEgQEAKIAogI2luY2x1ZGUgPGxvb25nc29uLmg+CiAKLWludCBwcm9tX2FyZ2M7Ci0vKiBwbW9uIHBhc3NlcyBhcmd1bWVudHMgaW4gMzJiaXQgcG9pbnRlcnMgKi8KLWludCAqX3Byb21fYXJndjsKLQogdm9pZCBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCkKIHsKKwlpbnQgcHJvbV9hcmdjOworCS8qIHBtb24gcGFzc2VzIGFyZ3VtZW50cyBpbiAzMmJpdCBwb2ludGVycyAqLworCWludCAqX3Byb21fYXJndjsKIAlpbnQgaTsKIAlsb25nIGw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9hY2MuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9hY2MuYwppbmRleCBiNDk0ODVmLi5iM2ZkNWVhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfYWNjLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2FjYy5jCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9laGNpLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfZWhjaS5jCmluZGV4IDc0ZjljNTkuLmVhZjhiODYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9laGNpLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2VoY2kuYwpAQCAtNSw3ICs1LDcgQEAKICAqIEF1dGhvciA6IGpsbGl1LCBsaXVqbEBsZW1vdGUuY29tCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaWRlLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaWRlLmMKaW5kZXggM2Y2MTU5NC4uOWE5NmI1NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2lkZS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pZGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqIEF1dGhvciA6IGpsbGl1LCBsaXVqbEBsZW1vdGUuY29tCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaXNhLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaXNhLmMKaW5kZXggYjZmMTdmNS4uZjVjMDgxOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2lzYS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pc2EuYwpAQCAtNSw3ICs1LDcgQEAKICAqIEF1dGhvciA6IGpsbGl1LCBsaXVqbEBsZW1vdGUuY29tCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfbWZncHQuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9tZmdwdC5jCmluZGV4IDZjYjQ0ZGIuLjhjODA3YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9tZmdwdC5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9tZmdwdC5jCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yOiBZYW5odWEsIHlhbmhAbGVtb3RlLmNvbQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgotICogQXV0aG9yOiBXdSB6aGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IHpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFJlZmVyZW5jZTogQU1EIEdlb2RlKFRNKSBDUzU1MzYgQ29tcGFuaW9uIERldmljZSBEYXRhIEJvb2sKICAqCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfb2hjaS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X29oY2kuYwppbmRleCA4ZmRiMDJiLi5kYjU5MDBhYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9vaGNpLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X29oY2kuYwpAQCAtNSw3ICs1LDcgQEAKICAqIEF1dGhvciA6IGpsbGl1LCBsaXVqbEBsZW1vdGUuY29tCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfcGNpLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfcGNpLmMKaW5kZXggZTIzZjNkNy4uNmRmZWFiMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X3BjaS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9wY2kuYwpAQCAtNSw3ICs1LDcgQEAKICAqIEF1dGhvciA6IGpsbGl1LCBsaXVqbEBsZW1vdGUuY29tCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lYXJseV9wcmludGsuYwppbmRleCAyM2U3YThmLi5hNzE3MzZmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vhcmx5X3ByaW50ay5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZWFybHlfcHJpbnRrLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogIENvcHlyaWdodCAoYykgMjAwOSBQaGlsaXBwZSBWYWNob24gPHBoaWxpcHBlQGNvd3BpZy5jYT4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDkgTGVtb3RlIEluYy4KLSAqICBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqICBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZW52LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vudi5jCmluZGV4IDE5NmQ5NDcuLmFlNGNmZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZW52LmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lbnYuYwpAQCAtOSw4ICs5LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNyBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKICAqIEF1dGhvcjogRnV4aW4gWmhhbmcsIHpoYW5nZnhAbGVtb3RlLmNvbQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0yMywxMyArMjMsMTAgQEAKIAogI2luY2x1ZGUgPGxvb25nc29uLmg+CiAKLXVuc2lnbmVkIGxvbmcgYnVzX2Nsb2NrLCBjcHVfY2xvY2tfZnJlcTsKK3Vuc2lnbmVkIGxvbmcgY3B1X2Nsb2NrX2ZyZXE7CiBFWFBPUlRfU1lNQk9MKGNwdV9jbG9ja19mcmVxKTsKIHVuc2lnbmVkIGxvbmcgbWVtc2l6ZSwgaGlnaG1lbXNpemU7CiAKLS8qIHBtb24gcGFzc2VzIGFyZ3VtZW50cyBpbiAzMmJpdCBwb2ludGVycyAqLwotaW50ICpfcHJvbV9lbnZwOwotCiAjZGVmaW5lIHBhcnNlX2V2ZW5fZWFybGllcihyZXMsIG9wdGlvbiwgcCkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAlpZiAoc3RybmNtcChvcHRpb24sIChjaGFyICopcCwgc3RybGVuKG9wdGlvbikpID09IDApCQlcCkBAIC0zOSw2ICszNiwxMCBAQAogCiB2b2lkIF9faW5pdCBwcm9tX2luaXRfZW52KHZvaWQpCiB7CisJLyogcG1vbiBwYXNzZXMgYXJndW1lbnRzIGluIDMyYml0IHBvaW50ZXJzICovCisJaW50ICpfcHJvbV9lbnZwOworCXVuc2lnbmVkIGxvbmcgYnVzX2Nsb2NrOworCXVuc2lnbmVkIGludCBwcm9jZXNzb3JfaWQ7CiAJbG9uZyBsOwogCiAJLyogZmlybXdhcmUgYXJndW1lbnRzIGFyZSBpbml0aWFsaXplZCBpbiBoZWFkLlMgKi8KQEAgLTU1LDYgKzU2LDIyIEBACiAJfQogCWlmIChtZW1zaXplID09IDApCiAJCW1lbXNpemUgPSAyNTY7CisJaWYgKGJ1c19jbG9jayA9PSAwKQorCQlidXNfY2xvY2sgPSA2NjAwMDAwMDsKKwlpZiAoY3B1X2Nsb2NrX2ZyZXEgPT0gMCkgeworCQlwcm9jZXNzb3JfaWQgPSAoJmN1cnJlbnRfY3B1X2RhdGEpLT5wcm9jZXNzb3JfaWQ7CisJCXN3aXRjaCAocHJvY2Vzc29yX2lkICYgUFJJRF9SRVZfTUFTSykgeworCQljYXNlIFBSSURfUkVWX0xPT05HU09OMkU6CisJCQljcHVfY2xvY2tfZnJlcSA9IDUzMzA4MDAwMDsKKwkJCWJyZWFrOworCQljYXNlIFBSSURfUkVWX0xPT05HU09OMkY6CisJCQljcHVfY2xvY2tfZnJlcSA9IDc5NzAwMDAwMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY3B1X2Nsb2NrX2ZyZXEgPSAxMDAwMDAwMDA7CisJCQlicmVhazsKKwkJfQorCX0KIAogCXByX2luZm8oImJ1c2Nsb2NrPSVsZCwgY3B1Y2xvY2s9JWxkLCBtZW1zaXplPSVsZCwgaGlnaG1lbXNpemU9JWxkXG4iLAogCQlidXNfY2xvY2ssIGNwdV9jbG9ja19mcmVxLCBtZW1zaXplLCBoaWdobWVtc2l6ZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2luaXQuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaW5pdC5jCmluZGV4IGEyYWJkOTMuLjE5ZDM0MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaW5pdC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21hY2h0eXBlLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21hY2h0eXBlLmMKaW5kZXggMGVkNTJiMy4uODUzZjE4NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tYWNodHlwZS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWFjaHR5cGUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5Ci0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWmhhbmcgTGUgPHIwYmVydHpAZ2VudG9vLm9yZz4KICAqCkBAIC0zNSw2ICszNSwxMCBAQAogCXJldHVybiBzeXN0ZW1fdHlwZXNbbWlwc19tYWNodHlwZV07CiB9CiAKK3ZvaWQgX193ZWFrIF9faW5pdCBtYWNoX3Byb21faW5pdF9tYWNodHlwZSh2b2lkKQoreworfQorCiB2b2lkIF9faW5pdCBwcm9tX2luaXRfbWFjaHR5cGUodm9pZCkKIHsKIAljaGFyICpwLCBzdHJbTUFDSFRZUEVfTEVOXTsKQEAgLTQzLDggKzQ3LDEwIEBACiAJbWlwc19tYWNodHlwZSA9IExPT05HU09OX01BQ0hUWVBFOwogCiAJcCA9IHN0cnN0cihhcmNzX2NtZGxpbmUsICJtYWNodHlwZT0iKTsKLQlpZiAoIXApCisJaWYgKCFwKSB7CisJCW1hY2hfcHJvbV9pbml0X21hY2h0eXBlKCk7CiAJCXJldHVybjsKKwl9CiAJcCArPSBzdHJsZW4oIm1hY2h0eXBlPSIpOwogCXN0cm5jcHkoc3RyLCBwLCBNQUNIVFlQRV9MRU4pOwogCXAgPSBzdHJzdHIoc3RyLCAiICIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tZW0uYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWVtLmMKaW5kZXggY2VhY2QwOS4uZWMyZjc5NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tZW0uYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21lbS5jCkBAIC0xNiwxMCArMTYsMTEgQEAKIAogdm9pZCBfX2luaXQgcHJvbV9pbml0X21lbW9yeSh2b2lkKQogewotICAgIGFkZF9tZW1vcnlfcmVnaW9uKDB4MCwgKG1lbXNpemUgPDwgMjApLCBCT09UX01FTV9SQU0pOworCWFkZF9tZW1vcnlfcmVnaW9uKDB4MCwgKG1lbXNpemUgPDwgMjApLCBCT09UX01FTV9SQU0pOwogCi0gICAgYWRkX21lbW9yeV9yZWdpb24obWVtc2l6ZSA8PCAyMCwgTE9PTkdTT05fUENJX01FTV9TVEFSVCAtIChtZW1zaXplIDw8Ci0JCQkgICAgMjApLCBCT09UX01FTV9SRVNFUlZFRCk7CisJYWRkX21lbW9yeV9yZWdpb24obWVtc2l6ZSA8PCAyMCwgTE9PTkdTT05fUENJX01FTV9TVEFSVCAtIChtZW1zaXplIDw8CisJCQkJMjApLCBCT09UX01FTV9SRVNFUlZFRCk7CisKICNpZmRlZiBDT05GSUdfQ1BVX1NVUFBPUlRTX0FERFJXSU5DRkcKIAl7CiAJCWludCBiaXQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BsYXRmb3JtLmMKaW5kZXggYmU4MTc3Ny4uZWQwMDdhMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcGxhdGZvcm0uYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbS5jCmluZGV4IGI2MjVmZWMuLjZjMWZkOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcG0uYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BtLmMKQEAgLTIsNyArMiw3IEBACiAgKiBsb29uZ3Nvbi1zcGVjaWZpYyBzdXNwZW5kIHN1cHBvcnQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiAgQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9yZXNldC5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9yZXNldC5jCmluZGV4IGQ1N2YxNzEuLjRiZDljMTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcmVzZXQuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3Jlc2V0LmMKQEAgLTYsOCArNiw4IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3IExlbW90ZSwgSW5jLiAmIEluc3RpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQogICogQXV0aG9yOiBGdXhpbiBaaGFuZywgemhhbmdmeEBsZW1vdGUuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuICYgSW5zdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5Ci0gKiBBdXRob3I6IFpoYW5namluIFd1LCB3dXpqQGxlbW90ZS5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogWmhhbmdqaW4gV3UsIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KQEAgLTI1LDE4ICsyNSwyNiBAQAogCSgodm9pZCAoKikodm9pZCkpaW9yZW1hcF9ub2NhY2hlKExPT05HU09OX0JPT1RfQkFTRSwgNCkpICgpOwogfQogCi1zdGF0aWMgdm9pZCBsb29uZ3Nvbl9oYWx0KHZvaWQpCitzdGF0aWMgdm9pZCBsb29uZ3Nvbl9wb3dlcm9mZih2b2lkKQogewogCW1hY2hfcHJlcGFyZV9zaHV0ZG93bigpOwotCXdoaWxlICgxKQotCQk7CisJdW5yZWFjaGFibGUoKTsKK30KKworc3RhdGljIHZvaWQgbG9vbmdzb25faGFsdCh2b2lkKQoreworCXByX25vdGljZSgiXG5cbioqIFlvdSBjYW4gc2FmZWx5IHR1cm4gb2ZmIHRoZSBwb3dlciBub3cgKipcblxuIik7CisJd2hpbGUgKDEpIHsKKwkJaWYgKGNwdV93YWl0KQorCQkJY3B1X3dhaXQoKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG1pcHNfcmVib290X3NldHVwKHZvaWQpCiB7CiAJX21hY2hpbmVfcmVzdGFydCA9IGxvb25nc29uX3Jlc3RhcnQ7CiAJX21hY2hpbmVfaGFsdCA9IGxvb25nc29uX2hhbHQ7Ci0JcG1fcG93ZXJfb2ZmID0gbG9vbmdzb25faGFsdDsKKwlwbV9wb3dlcl9vZmYgPSBsb29uZ3Nvbl9wb3dlcm9mZjsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9zZXJpYWwuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vc2VyaWFsLmMKaW5kZXggMjNiNjZhNS4uNzU4MDg3MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9zZXJpYWwuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3NlcmlhbC5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KICAqIEF1dGhvcjogWWFuIGh1YSAoeWFuaHVhQGxlbW90ZS5jb20pCi0gKiBBdXRob3I6IFd1IFpoYW5namluICh3dXpqQGxlbW90ZS5jb20pCisgKiBBdXRob3I6IFd1IFpoYW5namluICh3dXpoYW5namluQGdtYWlsLmNvbSkKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdGltZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMKaW5kZXggMzVmMGI2Ni4uOWZkZDAxZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMKQEAgLTIsOCArMiw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTGVtb3RlLCBJbmMuICYgSW5zdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CiAgKiBBdXRob3I6IEZ1eGluIFpoYW5nLCB6aGFuZ2Z4QGxlbW90ZS5jb20KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5Ci0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3VhcnRfYmFzZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi91YXJ0X2Jhc2UuYwppbmRleCA3OGZmNjZhLi5kNjllYTU0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3VhcnRfYmFzZS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdWFydF9iYXNlLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL3Jlc2V0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vZnVsb29uZy0yZS9yZXNldC5jCmluZGV4IGZjMTZjNjcuLmJjMzllYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL3Jlc2V0LmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2Z1bG9vbmctMmUvcmVzZXQuYwpAQCAtMSw4ICsxLDggQEAKIC8qIEJvYXJkLXNwZWNpZmljIHJlYm9vdC9zaHV0ZG93biByb3V0aW5lcwogICogQ29weXJpZ2h0IChjKSAyMDA5IFBoaWxpcHBlIFZhY2hvbiA8cGhpbGlwcGVAY293cGlnLmNhPgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL01ha2VmaWxlIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9NYWtlZmlsZQppbmRleCA0ZDg0YjI3Li44Njk5YTUzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciBsZW1vdGUgbG9vbmdzb24yZiBmYW1pbHkgbWFjaGluZXMKICMKIAotb2JqLXkgKz0gaXJxLm8gcmVzZXQubyBlY19rYjMzMTBiLm8KK29iai15ICs9IG1hY2h0eXBlLm8gaXJxLm8gcmVzZXQubyBlY19rYjMzMTBiLm8KIAogIwogIyBTdXNwZW5kIFN1cHBvcnQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvZWNfa2IzMzEwYi5jIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9lY19rYjMzMTBiLmMKaW5kZXggNGQ4NDExMS4uNjQwNTcyNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9lY19rYjMzMTBiLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9lY19rYjMzMTBiLmMKQEAgLTc1LDYgKzc1LDggQEAKIAkJdWRlbGF5KEVDX1JFR19ERUxBWSk7CiAJfQogCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydF9hY2Nlc3NfbG9jaywgZmxhZ3MpOworCiAJaWYgKHRpbWVvdXQgPD0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkZWFkYWJsZSBlcnJvciA6IHRpbWVvdXQuLi5cbiIsIF9fZnVuY19fKTsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTgzLDggKzg1LDYgQEAKIAkJCSAgICIoJXgvJWQpZWMgaXNzdWVkIGNvbW1hbmQgJWQgc3RhdHVzIDogMHgleFxuIiwKIAkJCSAgIHRpbWVvdXQsIEVDX0NNRF9USU1FT1VUIC0gdGltZW91dCwgY21kLCBzdGF0dXMpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydF9hY2Nlc3NfbG9jaywgZmxhZ3MpOwotCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGVjX3F1ZXJ5X3NlcSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2lycS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9pcnEuYwppbmRleCA3N2QzMmY5Li44ODJkZmNkNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9pcnEuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2lycS5jCkBAIC0zOCw3ICszOCw3IEBACiAJaXJxID0gLTE7CiAKIAlpZiAoKExPT05HU09OX0lOVElTUiAmIExPT05HU09OX0lOVEVOKSAmIExPT05HU09OX0lOVF9CSVRfSU5UMCkgewotCQlzcGluX2xvY2soJmk4MjU5QV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmaTgyNTlBX2xvY2spOwogCQlpc3IgPSBpbmIoUElDX01BU1RFUl9DTUQpICYKIAkJCX5pbmIoUElDX01BU1RFUl9JTVIpICYgfigxIDw8IFBJQ19DQVNDQURFX0lSKTsKIAkJaWYgKCFpc3IpCkBAIC01Niw3ICs1Niw3IEBACiAJCQlpZiAofmluYihQSUNfTUFTVEVSX0lTUikgJiAweDgwKQogCQkJCWlycSA9IC0xOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZpODI1OUFfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmaTgyNTlBX2xvY2spOwogCX0KIAogCXJldHVybiBpcnE7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL21hY2h0eXBlLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL21hY2h0eXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg2MGEyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvbWFjaHR5cGUuYwpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKworI2luY2x1ZGUgPGxvb25nc29uLmg+CisKK3ZvaWQgX19pbml0IG1hY2hfcHJvbV9pbml0X21hY2h0eXBlKHZvaWQpCit7CisJLyogV2Ugc2hhcmUgdGhlIHNhbWUga2VybmVsIGltYWdlIGZpbGUgYW1vbmcgTGVtb3RlIDJGIGZhbWlseQorCSAqIG9mIG1hY2hpbmVzLCBhbmQgcHJvdmlkZSB0aGUgbWFjaHR5cGU9IGtlcm5lbCBjb21tYW5kIGxpbmUKKwkgKiB0byB1c2VycyB0byBpbmRpY2F0ZSB0aGVpciBtYWNoaW5lLCB0aGlzIGNvbW1hbmQgbGluZSB3aWxsCisJICogYmUgcGFzc2VkIGJ5IHRoZSBsYXRlc3QgUE1PTiBhdXRvbWF0aWNhbGx5LiBhbmQgZm9ydHVuYXRlbHksCisJICogdXAgdG8gbm93LCB3ZSBjYW4gZ2V0IHRoZSBtYWNoaW5lIHR5cGUgZnJvbSB0aGUgUE1PTl9WRVI9CisJICogY29tbWFuZGxpbmUgZGlyZWN0bHkgZXhjZXB0IHRoZSBOQVMgbWFjaGluZSwgSW4gdGhlIG9sZAorCSAqIG1hY2hpbmVzLCB0aGlzIHdpbGwgaGVscCB0aGUgdXNlcnMgYSBsb3QuCisJICoKKwkgKiBJZiBubyAibWFjaHR5cGU9IiBwYXNzZWQsIGdldCBtYWNoaW5lIHR5cGUgZnJvbSAiUE1PTl9WRVI9Ii4KKwkgKiAJUE1PTl9WRVI9TE04MDg5CQlMZW1vdGUgOC45JycgbmV0Ym9vaworCSAqIAkgICAgICAgICBMTTgxMDEJCUxlbW90ZSAxMC4xJycgbmV0Ym9vaworCSAqIAkoVGhlIGFib3ZlIHR3byBuZXRib29rcyBoYXZlIHRoZSBzYW1lIGtlcm5lbCBzdXBwb3J0KQorCSAqCSAgICAgICAgIExNNlhYWAkJTGVtb3RlIEZ1TG9vbmcoMkYpIGJveCBzZXJpZXMKKwkgKgkgICAgICAgICBMTTlYWFgJCUxlbW90ZSBMeW5Mb29uZyBQQyBzZXJpZXMKKwkgKi8KKwlpZiAoc3Ryc3RyKGFyY3NfY21kbGluZSwgIlBNT05fVkVSPUxNIikpIHsKKwkJaWYgKHN0cnN0cihhcmNzX2NtZGxpbmUsICJQTU9OX1ZFUj1MTTgiKSkKKwkJCW1pcHNfbWFjaHR5cGUgPSBNQUNIX0xFTU9URV9ZTDJGODk7CisJCWVsc2UgaWYgKHN0cnN0cihhcmNzX2NtZGxpbmUsICJQTU9OX1ZFUj1MTTYiKSkKKwkJCW1pcHNfbWFjaHR5cGUgPSBNQUNIX0xFTU9URV9GTDJGOworCQllbHNlIGlmIChzdHJzdHIoYXJjc19jbWRsaW5lLCAiUE1PTl9WRVI9TE05IikpCisJCQltaXBzX21hY2h0eXBlID0gTUFDSF9MRU1PVEVfTEwyRjsKKwkJZWxzZQorCQkJbWlwc19tYWNodHlwZSA9IE1BQ0hfTEVNT1RFX05BUzsKKworCQlzdHJjYXQoYXJjc19jbWRsaW5lLCAiIG1hY2h0eXBlPSIpOworCQlzdHJjYXQoYXJjc19jbWRsaW5lLCBnZXRfc3lzdGVtX3R5cGUoKSk7CisJCXN0cmNhdChhcmNzX2NtZGxpbmUsICIgIik7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9wbS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9wbS5jCmluZGV4IGQ3YWYyZTYuLmNhYzRkMzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcG0uYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3BtLmMKQEAgLTIsNyArMiw3IEBACiAgKiAgTGVtb3RlIGxvb25nc29uMmYgZmFtaWx5IG1hY2hpbmVzJyBzcGVjaWZpYyBzdXNwZW5kIHN1cHBvcnQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiAgQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9yZXNldC5jIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9yZXNldC5jCmluZGV4IDUxZDFhNjAuLjM2MDIwYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcmVzZXQuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3Jlc2V0LmMKQEAgLTMsNyArMyw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDkgUGhpbGlwcGUgVmFjaG9uIDxwaGlsaXBwZUBjb3dwaWcuY2E+CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0ZC5jIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRkLmMKaW5kZXggN2U5MDBmMy4uYTAzMjUzMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRkLmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRkLmMKQEAgLTEzNSw0ICsxMzUsMyBAQAogCXByaW50aygiXG4iKTsKIAlyZXR1cm4geDsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRkcC5jIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRkcC5jCmluZGV4IDZkMmQ4OWYuLjJmMjJmZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0ZHAuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NGRwLmMKQEAgLTE0OCw3ICsxNDgsNiBAQAogCiAJCQlzd2l0Y2goaWVlZTc1NF9jc3Iucm0pIHsKIAkJCWNhc2UgSUVFRTc1NF9STjoKLQkJCQlyZXR1cm4gaWVlZTc1NGRwX3plcm8oc24pOwogCQkJY2FzZSBJRUVFNzU0X1JaOgogCQkJCXJldHVybiBpZWVlNzU0ZHBfemVybyhzbik7CiAJCQljYXNlIElFRUU3NTRfUlU6ICAgIC8qIHRvd2FyZCArSW5maW5pdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0c3AuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0c3AuYwppbmRleCA0NjM1MzQwLi5hMTliNzIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NHNwLmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRzcC5jCkBAIC0xNDksNyArMTQ5LDYgQEAKIAogCQkJc3dpdGNoKGllZWU3NTRfY3NyLnJtKSB7CiAJCQljYXNlIElFRUU3NTRfUk46Ci0JCQkJcmV0dXJuIGllZWU3NTRzcF96ZXJvKHNuKTsKIAkJCWNhc2UgSUVFRTc1NF9SWjoKIAkJCQlyZXR1cm4gaWVlZTc1NHNwX3plcm8oc24pOwogCQkJY2FzZSBJRUVFNzU0X1JVOiAgICAgIC8qIHRvd2FyZCArSW5maW5pdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0eGNwdC5jIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTR4Y3B0LmMKaW5kZXggN2Q4ZWY4OS4uZTAyNDIzYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTR4Y3B0LmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTR4Y3B0LmMKQEAgLTQ2LDQgKzQ2LDMgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uIGluIFwiJXNcIiwgdHlwZT0lc1xuIiwKIAkJeGNwLT5vcCwgcnRuYW1lc1t4Y3AtPnJ0XSk7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLW9jdGVvbi5jIGIvYXJjaC9taXBzL21tL2Mtb2N0ZW9uLmMKaW5kZXggOTRlMDVlNS4uMGY5YzQ4OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2Mtb2N0ZW9uLmMKKysrIGIvYXJjaC9taXBzL21tL2Mtb2N0ZW9uLmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogICogUHJvYmUgT2N0ZW9uJ3MgY2FjaGVzCiAgKgogICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgcHJvYmVfb2N0ZW9uKHZvaWQpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgcHJvYmVfb2N0ZW9uKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBpY2FjaGVfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGRjYWNoZV9zaXplOwpAQCAtMTgzLDYgKzE4Myw3IEBACiAKIAlzd2l0Y2ggKGMtPmNwdXR5cGUpIHsKIAljYXNlIENQVV9DQVZJVU1fT0NURU9OOgorCWNhc2UgQ1BVX0NBVklVTV9PQ1RFT05fUExVUzoKIAkJY29uZmlnMSA9IHJlYWRfYzBfY29uZmlnMSgpOwogCQljLT5pY2FjaGUubGluZXN6ID0gMiA8PCAoKGNvbmZpZzEgPj4gMTkpICYgNyk7CiAJCWMtPmljYWNoZS5zZXRzID0gNjQgPDwgKChjb25maWcxID4+IDIyKSAmIDcpOwpAQCAtMTkyLDEwICsxOTMsMTAgQEAKIAkJCWMtPmljYWNoZS5zZXRzICogYy0+aWNhY2hlLndheXMgKiBjLT5pY2FjaGUubGluZXN6OwogCQljLT5pY2FjaGUud2F5Yml0ID0gZmZzKGljYWNoZV9zaXplIC8gYy0+aWNhY2hlLndheXMpIC0gMTsKIAkJYy0+ZGNhY2hlLmxpbmVzeiA9IDEyODsKLQkJaWYgKE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ04zWFhYKSkKLQkJCWMtPmRjYWNoZS5zZXRzID0gMTsgLyogQ04zWFhYIGhhcyBvbmUgRGNhY2hlIHNldCAqLwotCQllbHNlCisJCWlmIChjLT5jcHV0eXBlID09IENQVV9DQVZJVU1fT0NURU9OX1BMVVMpCiAJCQljLT5kY2FjaGUuc2V0cyA9IDI7IC8qIENONVhYWCBoYXMgdHdvIERjYWNoZSBzZXRzICovCisJCWVsc2UKKwkJCWMtPmRjYWNoZS5zZXRzID0gMTsgLyogQ04zWFhYIGhhcyBvbmUgRGNhY2hlIHNldCAqLwogCQljLT5kY2FjaGUud2F5cyA9IDY0OwogCQlkY2FjaGVfc2l6ZSA9CiAJCQljLT5kY2FjaGUuc2V0cyAqIGMtPmRjYWNoZS53YXlzICogYy0+ZGNhY2hlLmxpbmVzejsKQEAgLTIzNSw3ICsyMzYsNyBAQAogICogU2V0dXAgdGhlIE9jdGVvbiBjYWNoZSBmbHVzaCByb3V0aW5lcwogICoKICAqLwotdm9pZCBfX2RldmluaXQgb2N0ZW9uX2NhY2hlX2luaXQodm9pZCkKK3ZvaWQgX19jcHVpbml0IG9jdGVvbl9jYWNoZV9pbml0KHZvaWQpCiB7CiAJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZWJhc2U7CiAJZXh0ZXJuIGNoYXIgZXhjZXB0X3ZlYzJfb2N0ZW9uOwpAQCAtMzA1LDQgKzMwNiwzIEBACiB7CiAJY2FjaGVfcGFyaXR5X2Vycm9yX29jdGVvbigxKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2NhY2hlLmMgYi9hcmNoL21pcHMvbW0vY2FjaGUuYwppbmRleCAxMDJiMmRmLi5iZTg2MjdiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vY2FjaGUuYworKysgYi9hcmNoL21pcHMvbW0vY2FjaGUuYwpAQCAtMTM3LDI1ICsxMzcsNDYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3Byb3RlY3Rpb25fbWFwKHZvaWQpCiB7Ci0JcHJvdGVjdGlvbl9tYXBbMF0gPSBQQUdFX05PTkU7Ci0JcHJvdGVjdGlvbl9tYXBbMV0gPSBQQUdFX1JFQURPTkxZOwotCXByb3RlY3Rpb25fbWFwWzJdID0gUEFHRV9DT1BZOwotCXByb3RlY3Rpb25fbWFwWzNdID0gUEFHRV9DT1BZOwotCXByb3RlY3Rpb25fbWFwWzRdID0gUEFHRV9SRUFET05MWTsKLQlwcm90ZWN0aW9uX21hcFs1XSA9IFBBR0VfUkVBRE9OTFk7Ci0JcHJvdGVjdGlvbl9tYXBbNl0gPSBQQUdFX0NPUFk7Ci0JcHJvdGVjdGlvbl9tYXBbN10gPSBQQUdFX0NPUFk7Ci0JcHJvdGVjdGlvbl9tYXBbOF0gPSBQQUdFX05PTkU7Ci0JcHJvdGVjdGlvbl9tYXBbOV0gPSBQQUdFX1JFQURPTkxZOwotCXByb3RlY3Rpb25fbWFwWzEwXSA9IFBBR0VfU0hBUkVEOwotCXByb3RlY3Rpb25fbWFwWzExXSA9IFBBR0VfU0hBUkVEOwotCXByb3RlY3Rpb25fbWFwWzEyXSA9IFBBR0VfUkVBRE9OTFk7Ci0JcHJvdGVjdGlvbl9tYXBbMTNdID0gUEFHRV9SRUFET05MWTsKLQlwcm90ZWN0aW9uX21hcFsxNF0gPSBQQUdFX1NIQVJFRDsKLQlwcm90ZWN0aW9uX21hcFsxNV0gPSBQQUdFX1NIQVJFRDsKKwlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJcHJvdGVjdGlvbl9tYXBbMF0gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19FWEVDIHwgX1BBR0VfTk9fUkVBRCk7CisJCXByb3RlY3Rpb25fbWFwWzFdICA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyk7CisJCXByb3RlY3Rpb25fbWFwWzJdICA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyB8IF9QQUdFX05PX1JFQUQpOworCQlwcm90ZWN0aW9uX21hcFszXSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX0VYRUMpOworCQlwcm90ZWN0aW9uX21hcFs0XSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX1JFQUQpOworCQlwcm90ZWN0aW9uX21hcFs1XSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCk7CisJCXByb3RlY3Rpb25fbWFwWzZdICA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fUkVBRCk7CisJCXByb3RlY3Rpb25fbWFwWzddICA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UKTsKKworCQlwcm90ZWN0aW9uX21hcFs4XSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX0VYRUMgfCBfUEFHRV9OT19SRUFEKTsKKwkJcHJvdGVjdGlvbl9tYXBbOV0gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19FWEVDKTsKKwkJcHJvdGVjdGlvbl9tYXBbMTBdID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19FWEVDIHwgX1BBR0VfV1JJVEUgfCBfUEFHRV9OT19SRUFEKTsKKwkJcHJvdGVjdGlvbl9tYXBbMTFdID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19FWEVDIHwgX1BBR0VfV1JJVEUpOworCQlwcm90ZWN0aW9uX21hcFsxMl0gPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX1JFQUQpOworCQlwcm90ZWN0aW9uX21hcFsxM10gPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCk7CisJCXByb3RlY3Rpb25fbWFwWzE0XSA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfV1JJVEUgIHwgX1BBR0VfTk9fUkVBRCk7CisJCXByb3RlY3Rpb25fbWFwWzE1XSA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfV1JJVEUpOworCisJfSBlbHNlIHsKKwkJcHJvdGVjdGlvbl9tYXBbMF0gPSBQQUdFX05PTkU7CisJCXByb3RlY3Rpb25fbWFwWzFdID0gUEFHRV9SRUFET05MWTsKKwkJcHJvdGVjdGlvbl9tYXBbMl0gPSBQQUdFX0NPUFk7CisJCXByb3RlY3Rpb25fbWFwWzNdID0gUEFHRV9DT1BZOworCQlwcm90ZWN0aW9uX21hcFs0XSA9IFBBR0VfUkVBRE9OTFk7CisJCXByb3RlY3Rpb25fbWFwWzVdID0gUEFHRV9SRUFET05MWTsKKwkJcHJvdGVjdGlvbl9tYXBbNl0gPSBQQUdFX0NPUFk7CisJCXByb3RlY3Rpb25fbWFwWzddID0gUEFHRV9DT1BZOworCQlwcm90ZWN0aW9uX21hcFs4XSA9IFBBR0VfTk9ORTsKKwkJcHJvdGVjdGlvbl9tYXBbOV0gPSBQQUdFX1JFQURPTkxZOworCQlwcm90ZWN0aW9uX21hcFsxMF0gPSBQQUdFX1NIQVJFRDsKKwkJcHJvdGVjdGlvbl9tYXBbMTFdID0gUEFHRV9TSEFSRUQ7CisJCXByb3RlY3Rpb25fbWFwWzEyXSA9IFBBR0VfUkVBRE9OTFk7CisJCXByb3RlY3Rpb25fbWFwWzEzXSA9IFBBR0VfUkVBRE9OTFk7CisJCXByb3RlY3Rpb25fbWFwWzE0XSA9IFBBR0VfU0hBUkVEOworCQlwcm90ZWN0aW9uX21hcFsxNV0gPSBQQUdFX1NIQVJFRDsKKwl9CiB9CiAKLXZvaWQgX19kZXZpbml0IGNwdV9jYWNoZV9pbml0KHZvaWQpCit2b2lkIF9fY3B1aW5pdCBjcHVfY2FjaGVfaW5pdCh2b2lkKQogewogCWlmIChjcHVfaGFzXzNrX2NhY2hlKSB7CiAJCWV4dGVybiB2b2lkIF9fd2VhayByM2tfY2FjaGVfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9mYXVsdC5jIGIvYXJjaC9taXBzL21tL2ZhdWx0LmMKaW5kZXggZTk3YTdhMi4uYjc4ZjdkOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9taXBzL21tL2ZhdWx0LmMKQEAgLTk5LDggKzk5LDMxIEBACiAJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCiAJCQlnb3RvIGJhZF9hcmVhOwogCX0gZWxzZSB7Ci0JCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQykpKQotCQkJZ290byBiYWRfYXJlYTsKKwkJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCQlpZiAoYWRkcmVzcyA9PSByZWdzLT5jcDBfZXBjICYmICEodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpKSB7CisjaWYgMAorCQkJCXByX25vdGljZSgiQ3B1JWRbJXM6JWQ6JTAqbHg6JWxkOiUwKmx4XSBYSSB2aW9sYXRpb25cbiIsCisJCQkJCSAgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwKKwkJCQkJICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsCisJCQkJCSAgZmllbGQsIGFkZHJlc3MsIHdyaXRlLAorCQkJCQkgIGZpZWxkLCByZWdzLT5jcDBfZXBjKTsKKyNlbmRpZgorCQkJCWdvdG8gYmFkX2FyZWE7CisJCQl9CisJCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCkpIHsKKyNpZiAwCisJCQkJcHJfbm90aWNlKCJDcHUlZFslczolZDolMCpseDolbGQ6JTAqbHhdIFJJIHZpb2xhdGlvblxuIiwKKwkJCQkJICByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLAorCQkJCQkgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKKwkJCQkJICBmaWVsZCwgYWRkcmVzcywgd3JpdGUsCisJCQkJCSAgZmllbGQsIHJlZ3MtPmNwMF9lcGMpOworI2VuZGlmCisJCQkJZ290byBiYWRfYXJlYTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQykpKQorCQkJCWdvdG8gYmFkX2FyZWE7CisJCX0KIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2hpZ2htZW0uYyBiL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMKaW5kZXggZTI3NGZkYS4uMTI3ZDczMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2hpZ2htZW0uYworKysgYi9hcmNoL21pcHMvbW0vaGlnaG1lbS5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9taXBzL21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggOGMyODM0Zi4uY2QwNjYwYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC9taXBzL21tL2h1Z2V0bGJwYWdlLmMKQEAgLTk3LDQgKzk3LDMgQEAKIAkJcGFnZSArPSAoKGFkZHJlc3MgJiB+SFBBR0VfTUFTSykgPj4gUEFHRV9TSElGVCk7CiAJcmV0dXJuIHBhZ2U7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9pbml0LmMgYi9hcmNoL21pcHMvbW0vaW5pdC5jCmluZGV4IDE2NTE5NDIuLjEyNTM5YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9pbml0LmMKKysrIGIvYXJjaC9taXBzL21tL2luaXQuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKQogCWVudHJ5bG8gPSBwdGUucHRlX2hpZ2g7CiAjZWxzZQotCWVudHJ5bG8gPSBwdGVfdmFsKHB0ZSkgPj4gNjsKKwllbnRyeWxvID0gcHRlX3RvX2VudHJ5bG8ocHRlX3ZhbChwdGUpKTsKICNlbmRpZgogCiAJRU5URVJfQ1JJVElDQUwoZmxhZ3MpOwpAQCAtMjk4LDcgKzI5OCw3IEBACiB9CiAKICNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKLXN0YXRpYyBpbnQgX19pbml0IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKQoraW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKQogewogCWludCBpOwogCkBAIC00NzcsNyArNDc3LDcgQEAKICAqIHdpbGwgb2ZmaWNpYWxseSBiZSByZXRpcmVkLgogICovCiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltfUFRSU19QRVJfUEdEXSBfX3BhZ2VfYWxpZ25lZChfUEdEX09SREVSKTsKLSNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogcG1kX3QgaW52YWxpZF9wbWRfdGFibGVbUFRSU19QRVJfUE1EXSBfX3BhZ2VfYWxpZ25lZChQTURfT1JERVIpOwogI2VuZGlmCiBwdGVfdCBpbnZhbGlkX3B0ZV90YWJsZVtQVFJTX1BFUl9QVEVdIF9fcGFnZV9hbGlnbmVkKFBURV9PUkRFUik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vcGFnZS5jIGIvYXJjaC9taXBzL21tL3BhZ2UuYwppbmRleCBmNWM3Mzc1Li4zNjI3MmY3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vcGFnZS5jCisrKyBiL2FyY2gvbWlwcy9tbS9wYWdlLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxhc20vc2lieXRlL3NiMTI1MF9kbWEuaD4KICNlbmRpZgogCi0jaW5jbHVkZSAidWFzbS5oIgorI2luY2x1ZGUgPGFzbS91YXNtLmg+CiAKIC8qIFJlZ2lzdGVycyB1c2VkIGluIHRoZSBhc3NlbWJsZWQgcm91dGluZXMuICovCiAjZGVmaW5lIFpFUk8gMApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3BndGFibGUtNjQuYyBiL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTY0LmMKaW5kZXggMTEyMTAxOS4uNzhlYWE0ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3BndGFibGUtNjQuYworKysgYi9hcmNoL21pcHMvbW0vcGd0YWJsZS02NC5jCkBAIC0xNSwyMyArMTUsMzEgQEAKIHZvaWQgcGdkX2luaXQodW5zaWduZWQgbG9uZyBwYWdlKQogewogCXVuc2lnbmVkIGxvbmcgKnAsICplbmQ7CisJdW5zaWduZWQgbG9uZyBlbnRyeTsKKworI2lmZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKKwllbnRyeSA9ICh1bnNpZ25lZCBsb25nKWludmFsaWRfcHRlX3RhYmxlOworI2Vsc2UKKwllbnRyeSA9ICh1bnNpZ25lZCBsb25nKWludmFsaWRfcG1kX3RhYmxlOworI2VuZGlmCiAKICAJcCA9ICh1bnNpZ25lZCBsb25nICopIHBhZ2U7CiAJZW5kID0gcCArIFBUUlNfUEVSX1BHRDsKIAogCXdoaWxlIChwIDwgZW5kKSB7Ci0JCXBbMF0gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wbWRfdGFibGU7Ci0JCXBbMV0gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wbWRfdGFibGU7Ci0JCXBbMl0gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wbWRfdGFibGU7Ci0JCXBbM10gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wbWRfdGFibGU7Ci0JCXBbNF0gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wbWRfdGFibGU7Ci0JCXBbNV0gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wbWRfdGFibGU7Ci0JCXBbNl0gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wbWRfdGFibGU7Ci0JCXBbN10gPSAodW5zaWduZWQgbG9uZykgaW52YWxpZF9wbWRfdGFibGU7CisJCXBbMF0gPSBlbnRyeTsKKwkJcFsxXSA9IGVudHJ5OworCQlwWzJdID0gZW50cnk7CisJCXBbM10gPSBlbnRyeTsKKwkJcFs0XSA9IGVudHJ5OworCQlwWzVdID0gZW50cnk7CisJCXBbNl0gPSBlbnRyeTsKKwkJcFs3XSA9IGVudHJ5OwogCQlwICs9IDg7CiAJfQogfQogCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIHZvaWQgcG1kX2luaXQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBhZ2V0YWJsZSkKIHsKIAl1bnNpZ25lZCBsb25nICpwLCAqZW5kOwpAQCAtNDAsMTcgKzQ4LDE4IEBACiAJZW5kID0gcCArIFBUUlNfUEVSX1BNRDsKIAogCXdoaWxlIChwIDwgZW5kKSB7Ci0JCXBbMF0gPSAodW5zaWduZWQgbG9uZylwYWdldGFibGU7Ci0JCXBbMV0gPSAodW5zaWduZWQgbG9uZylwYWdldGFibGU7Ci0JCXBbMl0gPSAodW5zaWduZWQgbG9uZylwYWdldGFibGU7Ci0JCXBbM10gPSAodW5zaWduZWQgbG9uZylwYWdldGFibGU7Ci0JCXBbNF0gPSAodW5zaWduZWQgbG9uZylwYWdldGFibGU7Ci0JCXBbNV0gPSAodW5zaWduZWQgbG9uZylwYWdldGFibGU7Ci0JCXBbNl0gPSAodW5zaWduZWQgbG9uZylwYWdldGFibGU7Ci0JCXBbN10gPSAodW5zaWduZWQgbG9uZylwYWdldGFibGU7CisJCXBbMF0gPSBwYWdldGFibGU7CisJCXBbMV0gPSBwYWdldGFibGU7CisJCXBbMl0gPSBwYWdldGFibGU7CisJCXBbM10gPSBwYWdldGFibGU7CisJCXBbNF0gPSBwYWdldGFibGU7CisJCXBbNV0gPSBwYWdldGFibGU7CisJCXBbNl0gPSBwYWdldGFibGU7CisJCXBbN10gPSBwYWdldGFibGU7CiAJCXAgKz0gODsKIAl9CiB9CisjZW5kaWYKIAogdm9pZCBfX2luaXQgcGFnZXRhYmxlX2luaXQodm9pZCkKIHsKQEAgLTU5LDggKzY4LDkgQEAKIAogCS8qIEluaXRpYWxpemUgdGhlIGVudGlyZSBwZ2QuICAqLwogCXBnZF9pbml0KCh1bnNpZ25lZCBsb25nKXN3YXBwZXJfcGdfZGlyKTsKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogCXBtZF9pbml0KCh1bnNpZ25lZCBsb25nKWludmFsaWRfcG1kX3RhYmxlLCAodW5zaWduZWQgbG9uZylpbnZhbGlkX3B0ZV90YWJsZSk7Ci0KKyNlbmRpZgogCXBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7CiAJLyoKIAkgKiBGaXhlZCBtYXBwaW5nczoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGItcjRrLmMgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCmluZGV4IGQ3MzQyOGIuLmM2MThlZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL3RsYi1yNGsuYwpAQCAtMzAzLDcgKzMwMyw3IEBACiAJCXVuc2lnbmVkIGxvbmcgbG87CiAJCXdyaXRlX2MwX3BhZ2VtYXNrKFBNX0hVR0VfTUFTSyk7CiAJCXB0ZXAgPSAocHRlX3QgKilwbWRwOwotCQlsbyA9IHB0ZV92YWwoKnB0ZXApID4+IDY7CisJCWxvID0gcHRlX3RvX2VudHJ5bG8ocHRlX3ZhbCgqcHRlcCkpOwogCQl3cml0ZV9jMF9lbnRyeWxvMChsbyk7CiAJCXdyaXRlX2MwX2VudHJ5bG8xKGxvICsgKEhQQUdFX1NJWkUgPj4gNykpOwogCkBAIC0zMjMsOCArMzIzLDggQEAKIAkJcHRlcCsrOwogCQl3cml0ZV9jMF9lbnRyeWxvMShwdGVwLT5wdGVfaGlnaCk7CiAjZWxzZQotCQl3cml0ZV9jMF9lbnRyeWxvMChwdGVfdmFsKCpwdGVwKyspID4+IDYpOwotCQl3cml0ZV9jMF9lbnRyeWxvMShwdGVfdmFsKCpwdGVwKSA+PiA2KTsKKwkJd3JpdGVfYzBfZW50cnlsbzAocHRlX3RvX2VudHJ5bG8ocHRlX3ZhbCgqcHRlcCsrKSkpOworCQl3cml0ZV9jMF9lbnRyeWxvMShwdGVfdG9fZW50cnlsbyhwdGVfdmFsKCpwdGVwKSkpOwogI2VuZGlmCiAJCW10YzBfdGxid19oYXphcmQoKTsKIAkJaWYgKGlkeCA8IDApCkBAIC0zMzcsNDAgKzMzNyw2IEBACiAJRVhJVF9DUklUSUNBTChmbGFncyk7CiB9CiAKLSNpZiAwCi1zdGF0aWMgdm9pZCByNGtfdXBkYXRlX21tdV9jYWNoZV9od2J1ZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGFzaWQ7Ci0JcGdkX3QgKnBnZHA7Ci0JcG1kX3QgKnBtZHA7Ci0JcHRlX3QgKnB0ZXA7Ci0JaW50IGlkeDsKLQotCUVOVEVSX0NSSVRJQ0FMKGZsYWdzKTsKLQlhZGRyZXNzICY9IChQQUdFX01BU0sgPDwgMSk7Ci0JYXNpZCA9IHJlYWRfYzBfZW50cnloaSgpICYgQVNJRF9NQVNLOwotCXdyaXRlX2MwX2VudHJ5aGkoYWRkcmVzcyB8IGFzaWQpOwotCXBnZHAgPSBwZ2Rfb2Zmc2V0KHZtYS0+dm1fbW0sIGFkZHJlc3MpOwotCW10YzBfdGxid19oYXphcmQoKTsKLQl0bGJfcHJvYmUoKTsKLQl0bGJfcHJvYmVfaGF6YXJkKCk7Ci0JcG1kcCA9IHBtZF9vZmZzZXQocGdkcCwgYWRkcmVzcyk7Ci0JaWR4ID0gcmVhZF9jMF9pbmRleCgpOwotCXB0ZXAgPSBwdGVfb2Zmc2V0X21hcChwbWRwLCBhZGRyZXNzKTsKLQl3cml0ZV9jMF9lbnRyeWxvMChwdGVfdmFsKCpwdGVwKyspID4+IDYpOwotCXdyaXRlX2MwX2VudHJ5bG8xKHB0ZV92YWwoKnB0ZXApID4+IDYpOwotCW10YzBfdGxid19oYXphcmQoKTsKLQlpZiAoaWR4IDwgMCkKLQkJdGxiX3dyaXRlX3JhbmRvbSgpOwotCWVsc2UKLQkJdGxiX3dyaXRlX2luZGV4ZWQoKTsKLQl0bGJ3X3VzZV9oYXphcmQoKTsKLQlFWElUX0NSSVRJQ0FMKGZsYWdzKTsKLX0KLSNlbmRpZgotCiB2b2lkIF9faW5pdCBhZGRfd2lyZWRfZW50cnkodW5zaWduZWQgbG9uZyBlbnRyeWxvMCwgdW5zaWduZWQgbG9uZyBlbnRyeWxvMSwKIAl1bnNpZ25lZCBsb25nIGVudHJ5aGksIHVuc2lnbmVkIGxvbmcgcGFnZW1hc2spCiB7CkBAIC00NDcsMzQgKzQxMyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19jcHVpbml0IHByb2JlX3RsYih1bnNpZ25lZCBsb25nIGNvbmZpZykKLXsKLQlzdHJ1Y3QgY3B1aW5mb19taXBzICpjID0gJmN1cnJlbnRfY3B1X2RhdGE7Ci0JdW5zaWduZWQgaW50IHJlZzsKLQotCS8qCi0JICogSWYgdGhpcyBpc24ndCBhIE1JUFMzMiAvIE1JUFM2NCBjb21wbGlhbnQgQ1BVLiAgQ29uZmlnIDEgcmVnaXN0ZXIKLQkgKiBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBhc3N1bWUgUjRrIHN0eWxlLiAgQ3B1IHByb2JpbmcgYWxyZWFkeSBmaWd1cmVkCi0JICogb3V0IHRoZSBudW1iZXIgb2YgdGxiIGVudHJpZXMuCi0JICovCi0JaWYgKChjLT5wcm9jZXNzb3JfaWQgJiAweGZmMDAwMCkgPT0gUFJJRF9DT01QX0xFR0FDWSkKLQkJcmV0dXJuOwotI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQkvKgotCSAqIElmIFRMQiBpcyBzaGFyZWQgaW4gU01UQyBzeXN0ZW0sIHRvdGFsIHNpemUgYWxyZWFkeQotCSAqIGhhcyBiZWVuIGNhbGN1bGF0ZWQgYW5kIHdyaXR0ZW4gaW50byBjcHVfZGF0YSB0bGJzaXplCi0JICovCi0JaWYoKHNtdGNfc3RhdHVzICYgU01UQ19UTEJfU0hBUkVEKSA9PSBTTVRDX1RMQl9TSEFSRUQpCi0JCXJldHVybjsKLSNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCi0KLQlyZWcgPSByZWFkX2MwX2NvbmZpZzEoKTsKLQlpZiAoISgoY29uZmlnID4+IDcpICYgMykpCi0JCXBhbmljKCJObyBUTEIgcHJlc2VudCIpOwotCi0JYy0+dGxic2l6ZSA9ICgocmVnID4+IDI1KSAmIDB4M2YpICsgMTsKLX0KLQogc3RhdGljIGludCBfX2NwdWluaXRkYXRhIG50bGI7CiBzdGF0aWMgaW50IF9faW5pdCBzZXRfbnRsYihjaGFyICpzdHIpCiB7CkBAIC00ODYsOCArNDI0LDYgQEAKIAogdm9pZCBfX2NwdWluaXQgdGxiX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgY29uZmlnID0gcmVhZF9jMF9jb25maWcoKTsKLQogCS8qCiAJICogWW91IHNob3VsZCBuZXZlciBjaGFuZ2UgdGhpcyByZWdpc3RlcjoKIAkgKiAgIC0gT24gUjQ2MDAgMS43IHRoZSB0bGJwIG5ldmVyIGhpdHMgZm9yIHBhZ2VzIHNtYWxsZXIgdGhhbgpAQCAtNDk1LDEzICs0MzEsMjUgQEAKIAkgKiAgIC0gVGhlIGVudGlyZSBtbSBoYW5kbGluZyBhc3N1bWVzIHRoZSBjMF9wYWdlbWFzayByZWdpc3RlciB0bwogCSAqICAgICBiZSBzZXQgdG8gZml4ZWQtc2l6ZSBwYWdlcy4KIAkgKi8KLQlwcm9iZV90bGIoY29uZmlnKTsKIAl3cml0ZV9jMF9wYWdlbWFzayhQTV9ERUZBVUxUX01BU0spOwogCXdyaXRlX2MwX3dpcmVkKDApOwogCWlmIChjdXJyZW50X2NwdV90eXBlKCkgPT0gQ1BVX1IxMDAwMCB8fAogCSAgICBjdXJyZW50X2NwdV90eXBlKCkgPT0gQ1BVX1IxMjAwMCB8fAogCSAgICBjdXJyZW50X2NwdV90eXBlKCkgPT0gQ1BVX1IxNDAwMCkKIAkJd3JpdGVfYzBfZnJhbWVtYXNrKDApOworCisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCS8qCisJCSAqIEVuYWJsZSB0aGUgbm8gcmVhZCwgbm8gZXhlYyBiaXRzLCBhbmQgZW5hYmxlIGxhcmdlIHZpcnR1YWwKKwkJICogYWRkcmVzcy4KKwkJICovCisJCXUzMiBwZyA9IFBHX1JJRSB8IFBHX1hJRTsKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwkJcGcgfD0gUEdfRUxQQTsKKyNlbmRpZgorCQl3cml0ZV9jMF9wYWdlZ3JhaW4ocGcpOworCX0KKwogCXRlbXBfdGxiX2VudHJ5ID0gY3VycmVudF9jcHVfZGF0YS50bGJzaXplIC0gMTsKIAogICAgICAgICAvKiBGcm9tIHRoaXMgcG9pbnQgb24gdGhlIEFSQyBmaXJtd2FyZSBpcyBkZWFkLiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGJleC5jIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKaW5kZXggYmFkY2Y1ZS4uMGRlMGU0MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYmV4LmMKKysrIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKQEAgLTI5LDggKzI5LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS93YXIuaD4KLQotI2luY2x1ZGUgInVhc20uaCIKKyNpbmNsdWRlIDxhc20vdWFzbS5oPgogCiBzdGF0aWMgaW5saW5lIGludCByNDVrX2J2YWh3YnVnKHZvaWQpCiB7CkBAIC03Nyw2ICs3Niw4IEBACiAJbGFiZWxfdm1hbGxvY19kb25lLAogCWxhYmVsX3RsYndfaGF6YXJkLAogCWxhYmVsX3NwbGl0LAorCWxhYmVsX3RsYmxfZ29hcm91bmQxLAorCWxhYmVsX3RsYmxfZ29hcm91bmQyLAogCWxhYmVsX25vcGFnZV90bGJsLAogCWxhYmVsX25vcGFnZV90bGJzLAogCWxhYmVsX25vcGFnZV90bGJtLApAQCAtOTMsNiArOTQsOCBAQAogVUFTTV9MX0xBKF92bWFsbG9jX2RvbmUpCiBVQVNNX0xfTEEoX3RsYndfaGF6YXJkKQogVUFTTV9MX0xBKF9zcGxpdCkKK1VBU01fTF9MQShfdGxibF9nb2Fyb3VuZDEpCitVQVNNX0xfTEEoX3RsYmxfZ29hcm91bmQyKQogVUFTTV9MX0xBKF9ub3BhZ2VfdGxibCkKIFVBU01fTF9MQShfbm9wYWdlX3RsYnMpCiBVQVNNX0xfTEEoX25vcGFnZV90bGJtKQpAQCAtMzk3LDcgKzQwMCw0NCBAQAogCX0KIH0KIAorc3RhdGljIF9fY3B1aW5pdCBfX21heWJlX3VudXNlZCB2b2lkIGJ1aWxkX2NvbnZlcnRfcHRlX3RvX2VudHJ5bG8odTMyICoqcCwKKwkJCQkJCQkJICB1bnNpZ25lZCBpbnQgcmVnKQoreworCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQlVQVNNX2lfU1JMKHAsIHJlZywgcmVnLCBpbG9nMihfUEFHRV9OT19FWEVDKSk7CisJCVVBU01faV9ST1RSKHAsIHJlZywgcmVnLCBpbG9nMihfUEFHRV9HTE9CQUwpIC0gaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCX0gZWxzZSB7CisjaWZkZWYgQ09ORklHXzY0QklUX1BIWVNfQUREUgorCQl1YXNtX2lfZHNybChwLCByZWcsIHJlZywgaWxvZzIoX1BBR0VfR0xPQkFMKSk7CisjZWxzZQorCQlVQVNNX2lfU1JMKHAsIHJlZywgcmVnLCBpbG9nMihfUEFHRV9HTE9CQUwpKTsKKyNlbmRpZgorCX0KK30KKwogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKworc3RhdGljIF9fY3B1aW5pdCB2b2lkIGJ1aWxkX3Jlc3RvcmVfcGFnZW1hc2sodTMyICoqcCwKKwkJCQkJICAgICBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IHRtcCwKKwkJCQkJICAgICBlbnVtIGxhYmVsX2lkIGxpZCkKK3sKKwkvKiBSZXNldCBkZWZhdWx0IHBhZ2Ugc2l6ZSAqLworCWlmIChQTV9ERUZBVUxUX01BU0sgPj4gMTYpIHsKKwkJdWFzbV9pX2x1aShwLCB0bXAsIFBNX0RFRkFVTFRfTUFTSyA+PiAxNik7CisJCXVhc21faV9vcmkocCwgdG1wLCB0bXAsIFBNX0RFRkFVTFRfTUFTSyAmIDB4ZmZmZik7CisJCXVhc21faWxfYihwLCByLCBsaWQpOworCQl1YXNtX2lfbXRjMChwLCB0bXAsIEMwX1BBR0VNQVNLKTsKKwl9IGVsc2UgaWYgKFBNX0RFRkFVTFRfTUFTSykgeworCQl1YXNtX2lfb3JpKHAsIHRtcCwgMCwgUE1fREVGQVVMVF9NQVNLKTsKKwkJdWFzbV9pbF9iKHAsIHIsIGxpZCk7CisJCXVhc21faV9tdGMwKHAsIHRtcCwgQzBfUEFHRU1BU0spOworCX0gZWxzZSB7CisJCXVhc21faWxfYihwLCByLCBsaWQpOworCQl1YXNtX2lfbXRjMChwLCAwLCBDMF9QQUdFTUFTSyk7CisJfQorfQorCiBzdGF0aWMgX19jcHVpbml0IHZvaWQgYnVpbGRfaHVnZV90bGJfd3JpdGVfZW50cnkodTMyICoqcCwKIAkJCQkJCSBzdHJ1Y3QgdWFzbV9sYWJlbCAqKmwsCiAJCQkJCQkgc3RydWN0IHVhc21fcmVsb2MgKipyLApAQCAtNDExLDIwICs0NTEsNyBAQAogCiAJYnVpbGRfdGxiX3dyaXRlX2VudHJ5KHAsIGwsIHIsIHdtb2RlKTsKIAotCS8qIFJlc2V0IGRlZmF1bHQgcGFnZSBzaXplICovCi0JaWYgKFBNX0RFRkFVTFRfTUFTSyA+PiAxNikgewotCQl1YXNtX2lfbHVpKHAsIHRtcCwgUE1fREVGQVVMVF9NQVNLID4+IDE2KTsKLQkJdWFzbV9pX29yaShwLCB0bXAsIHRtcCwgUE1fREVGQVVMVF9NQVNLICYgMHhmZmZmKTsKLQkJdWFzbV9pbF9iKHAsIHIsIGxhYmVsX2xlYXZlKTsKLQkJdWFzbV9pX210YzAocCwgdG1wLCBDMF9QQUdFTUFTSyk7Ci0JfSBlbHNlIGlmIChQTV9ERUZBVUxUX01BU0spIHsKLQkJdWFzbV9pX29yaShwLCB0bXAsIDAsIFBNX0RFRkFVTFRfTUFTSyk7Ci0JCXVhc21faWxfYihwLCByLCBsYWJlbF9sZWF2ZSk7Ci0JCXVhc21faV9tdGMwKHAsIHRtcCwgQzBfUEFHRU1BU0spOwotCX0gZWxzZSB7Ci0JCXVhc21faWxfYihwLCByLCBsYWJlbF9sZWF2ZSk7Ci0JCXVhc21faV9tdGMwKHAsIDAsIEMwX1BBR0VNQVNLKTsKLQl9CisJYnVpbGRfcmVzdG9yZV9wYWdlbWFzayhwLCByLCB0bXAsIGxhYmVsX2xlYXZlKTsKIH0KIAogLyoKQEAgLTQ2MCwxNSArNDg3LDE1IEBACiAJaWYgKCFzbWFsbF9zZXF1ZW5jZSkKIAkJdWFzbV9pX2x1aShwLCB0bXAsIEhQQUdFX1NJWkUgPj4gKDcgKyAxNikpOwogCi0JVUFTTV9pX1NSTChwLCBwdGUsIHB0ZSwgNik7IC8qIGNvbnZlcnQgdG8gZW50cnlsbyAqLwotCXVhc21faV9tdGMwKHAsIHB0ZSwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0ICovCisJYnVpbGRfY29udmVydF9wdGVfdG9fZW50cnlsbyhwLCBwdGUpOworCVVBU01faV9NVEMwKHAsIHB0ZSwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0ICovCiAJLyogY29udmVydCB0byBlbnRyeWxvMSAqLwogCWlmIChzbWFsbF9zZXF1ZW5jZSkKIAkJVUFTTV9pX0FERElVKHAsIHB0ZSwgcHRlLCBIUEFHRV9TSVpFID4+IDcpOwogCWVsc2UKIAkJVUFTTV9pX0FERFUocCwgcHRlLCBwdGUsIHRtcCk7CiAKLQl1YXNtX2lfbXRjMChwLCBwdGUsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCAqLworCVVBU01faV9NVEMwKHAsIHB0ZSwgQzBfRU5UUllMTzEpOyAvKiBsb2FkIGl0ICovCiB9CiAKIHN0YXRpYyBfX2NwdWluaXQgdm9pZCBidWlsZF9odWdlX2hhbmRsZXJfdGFpbCh1MzIgKipwLApAQCAtNTQ5LDExICs1NzYsMTMgQEAKIAogCXVhc21faV9hbmRpKHAsIHRtcCwgdG1wLCAoUFRSU19QRVJfUEdEIC0gMSk8PDMpOwogCXVhc21faV9kYWRkdShwLCBwdHIsIHB0ciwgdG1wKTsgLyogYWRkIGluIHBnZCBvZmZzZXQgKi8KKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogCXVhc21faV9kbWZjMChwLCB0bXAsIEMwX0JBRFZBRERSKTsgLyogZ2V0IGZhdWx0aW5nIGFkZHJlc3MgKi8KIAl1YXNtX2lfbGQocCwgcHRyLCAwLCBwdHIpOyAvKiBnZXQgcG1kIHBvaW50ZXIgKi8KIAl1YXNtX2lfZHNybChwLCB0bXAsIHRtcCwgUE1EX1NISUZULTMpOyAvKiBnZXQgcG1kIG9mZnNldCBpbiBieXRlcyAqLwogCXVhc21faV9hbmRpKHAsIHRtcCwgdG1wLCAoUFRSU19QRVJfUE1EIC0gMSk8PDMpOwogCXVhc21faV9kYWRkdShwLCBwdHIsIHB0ciwgdG1wKTsgLyogYWRkIGluIHBtZCBvZmZzZXQgKi8KKyNlbmRpZgogfQogCiAvKgpAQCAtNjg0LDM1ICs3MTMsNTMgQEAKIAlpZiAoY3B1X2hhc182NGJpdHMpIHsKIAkJdWFzbV9pX2xkKHAsIHRtcCwgMCwgcHRlcCk7IC8qIGdldCBldmVuIHB0ZSAqLwogCQl1YXNtX2lfbGQocCwgcHRlcCwgc2l6ZW9mKHB0ZV90KSwgcHRlcCk7IC8qIGdldCBvZGQgcHRlICovCi0JCXVhc21faV9kc3JsKHAsIHRtcCwgdG1wLCA2KTsgLyogY29udmVydCB0byBlbnRyeWxvMCAqLwotCQl1YXNtX2lfbXRjMChwLCB0bXAsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLwotCQl1YXNtX2lfZHNybChwLCBwdGVwLCBwdGVwLCA2KTsgLyogY29udmVydCB0byBlbnRyeWxvMSAqLwotCQl1YXNtX2lfbXRjMChwLCBwdGVwLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgKi8KKwkJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCQlVQVNNX2lfU1JMKHAsIHRtcCwgdG1wLCBpbG9nMihfUEFHRV9OT19FWEVDKSk7CisJCQlVQVNNX2lfU1JMKHAsIHB0ZXAsIHB0ZXAsIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwkJCVVBU01faV9ST1RSKHAsIHRtcCwgdG1wLCBpbG9nMihfUEFHRV9HTE9CQUwpIC0gaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQkJVUFTTV9pX01UQzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KKwkJCVVBU01faV9ST1RSKHAsIHB0ZXAsIHB0ZXAsIGlsb2cyKF9QQUdFX0dMT0JBTCkgLSBpbG9nMihfUEFHRV9OT19FWEVDKSk7CisJCX0gZWxzZSB7CisJCQl1YXNtX2lfZHNybChwLCB0bXAsIHRtcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSk7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzAgKi8KKwkJCVVBU01faV9NVEMwKHAsIHRtcCwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0ICovCisJCQl1YXNtX2lfZHNybChwLCBwdGVwLCBwdGVwLCBpbG9nMihfUEFHRV9HTE9CQUwpKTsgLyogY29udmVydCB0byBlbnRyeWxvMSAqLworCQl9CisJCVVBU01faV9NVEMwKHAsIHB0ZXAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCAqLwogCX0gZWxzZSB7CiAJCWludCBwdGVfb2ZmX2V2ZW4gPSBzaXplb2YocHRlX3QpIC8gMjsKIAkJaW50IHB0ZV9vZmZfb2RkID0gcHRlX29mZl9ldmVuICsgc2l6ZW9mKHB0ZV90KTsKIAogCQkvKiBUaGUgcHRlIGVudHJpZXMgYXJlIHByZS1zaGlmdGVkICovCiAJCXVhc21faV9sdyhwLCB0bXAsIHB0ZV9vZmZfZXZlbiwgcHRlcCk7IC8qIGdldCBldmVuIHB0ZSAqLwotCQl1YXNtX2lfbXRjMChwLCB0bXAsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLworCQlVQVNNX2lfTVRDMChwLCB0bXAsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLwogCQl1YXNtX2lfbHcocCwgcHRlcCwgcHRlX29mZl9vZGQsIHB0ZXApOyAvKiBnZXQgb2RkIHB0ZSAqLwotCQl1YXNtX2lfbXRjMChwLCBwdGVwLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgKi8KKwkJVUFTTV9pX01UQzAocCwgcHRlcCwgQzBfRU5UUllMTzEpOyAvKiBsb2FkIGl0ICovCiAJfQogI2Vsc2UKIAlVQVNNX2lfTFcocCwgdG1wLCAwLCBwdGVwKTsgLyogZ2V0IGV2ZW4gcHRlICovCiAJVUFTTV9pX0xXKHAsIHB0ZXAsIHNpemVvZihwdGVfdCksIHB0ZXApOyAvKiBnZXQgb2RkIHB0ZSAqLwogCWlmIChyNDVrX2J2YWh3YnVnKCkpCiAJCWJ1aWxkX3RsYl9wcm9iZV9lbnRyeShwKTsKLQlVQVNNX2lfU1JMKHAsIHRtcCwgdG1wLCA2KTsgLyogY29udmVydCB0byBlbnRyeWxvMCAqLworCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQlVQVNNX2lfU1JMKHAsIHRtcCwgdG1wLCBpbG9nMihfUEFHRV9OT19FWEVDKSk7CisJCVVBU01faV9TUkwocCwgcHRlcCwgcHRlcCwgaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQlVQVNNX2lfUk9UUihwLCB0bXAsIHRtcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSAtIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwkJaWYgKHI0a18yNTBNSFpod2J1ZygpKQorCQkJVUFTTV9pX01UQzAocCwgMCwgQzBfRU5UUllMTzApOworCQlVQVNNX2lfTVRDMChwLCB0bXAsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLworCQlVQVNNX2lfUk9UUihwLCBwdGVwLCBwdGVwLCBpbG9nMihfUEFHRV9HTE9CQUwpIC0gaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCX0gZWxzZSB7CisJCVVBU01faV9TUkwocCwgdG1wLCB0bXAsIGlsb2cyKF9QQUdFX0dMT0JBTCkpOyAvKiBjb252ZXJ0IHRvIGVudHJ5bG8wICovCisJCWlmIChyNGtfMjUwTUhaaHdidWcoKSkKKwkJCVVBU01faV9NVEMwKHAsIDAsIEMwX0VOVFJZTE8wKTsKKwkJVUFTTV9pX01UQzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KKwkJVUFTTV9pX1NSTChwLCBwdGVwLCBwdGVwLCBpbG9nMihfUEFHRV9HTE9CQUwpKTsgLyogY29udmVydCB0byBlbnRyeWxvMSAqLworCQlpZiAocjQ1a19idmFod2J1ZygpKQorCQkJdWFzbV9pX21mYzAocCwgdG1wLCBDMF9JTkRFWCk7CisJfQogCWlmIChyNGtfMjUwTUhaaHdidWcoKSkKLQkJdWFzbV9pX210YzAocCwgMCwgQzBfRU5UUllMTzApOwotCXVhc21faV9tdGMwKHAsIHRtcCwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0ICovCi0JVUFTTV9pX1NSTChwLCBwdGVwLCBwdGVwLCA2KTsgLyogY29udmVydCB0byBlbnRyeWxvMSAqLwotCWlmIChyNDVrX2J2YWh3YnVnKCkpCi0JCXVhc21faV9tZmMwKHAsIHRtcCwgQzBfSU5ERVgpOwotCWlmIChyNGtfMjUwTUhaaHdidWcoKSkKLQkJdWFzbV9pX210YzAocCwgMCwgQzBfRU5UUllMTzEpOwotCXVhc21faV9tdGMwKHAsIHB0ZXAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCAqLworCQlVQVNNX2lfTVRDMChwLCAwLCBDMF9FTlRSWUxPMSk7CisJVUFTTV9pX01UQzAocCwgcHRlcCwgQzBfRU5UUllMTzEpOyAvKiBsb2FkIGl0ICovCiAjZW5kaWYKIH0KIApAQCAtOTg1LDkgKzEwMzIsMTQgQEAKIGJ1aWxkX3B0ZV9wcmVzZW50KHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwKIAkJICB1bnNpZ25lZCBpbnQgcHRlLCB1bnNpZ25lZCBpbnQgcHRyLCBlbnVtIGxhYmVsX2lkIGxpZCkKIHsKLQl1YXNtX2lfYW5kaShwLCBwdGUsIHB0ZSwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQpOwotCXVhc21faV94b3JpKHAsIHB0ZSwgcHRlLCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCk7Ci0JdWFzbV9pbF9ibmV6KHAsIHIsIHB0ZSwgbGlkKTsKKwlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJdWFzbV9pX2FuZGkocCwgcHRlLCBwdGUsIF9QQUdFX1BSRVNFTlQpOworCQl1YXNtX2lsX2JlcXoocCwgciwgcHRlLCBsaWQpOworCX0gZWxzZSB7CisJCXVhc21faV9hbmRpKHAsIHB0ZSwgcHRlLCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCk7CisJCXVhc21faV94b3JpKHAsIHB0ZSwgcHRlLCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCk7CisJCXVhc21faWxfYm5leihwLCByLCBwdGUsIGxpZCk7CisJfQogCWlQVEVfTFcocCwgcHRlLCBwdHIpOwogfQogCkBAIC0xMjcyLDYgKzEzMjQsMzQgQEAKIAlidWlsZF9wdGVfcHJlc2VudCgmcCwgJnIsIEswLCBLMSwgbGFiZWxfbm9wYWdlX3RsYmwpOwogCWlmIChtNGtjX3RsYnBfd2FyKCkpCiAJCWJ1aWxkX3RsYl9wcm9iZV9lbnRyeSgmcCk7CisKKwlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJLyoKKwkJICogSWYgdGhlIHBhZ2UgaXMgbm90IF9QQUdFX1ZBTElELCBSSSBvciBYSSBjb3VsZCBub3QKKwkJICogaGF2ZSB0cmlnZ2VyZWQgaXQuICBTa2lwIHRoZSBleHBlbnNpdmUgdGVzdC4uCisJCSAqLworCQl1YXNtX2lfYW5kaSgmcCwgSzAsIEswLCBfUEFHRV9WQUxJRCk7CisJCXVhc21faWxfYmVxeigmcCwgJnIsIEswLCBsYWJlbF90bGJsX2dvYXJvdW5kMSk7CisJCXVhc21faV9ub3AoJnApOworCisJCXVhc21faV90bGJyKCZwKTsKKwkJLyogRXhhbWluZSAgZW50cnlsbyAwIG9yIDEgYmFzZWQgb24gcHRyLiAqLworCQl1YXNtX2lfYW5kaSgmcCwgSzAsIEsxLCBzaXplb2YocHRlX3QpKTsKKwkJdWFzbV9pX2JlcXooJnAsIEswLCA4KTsKKworCQlVQVNNX2lfTUZDMCgmcCwgSzAsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCBpbiB0aGUgZGVsYXkgc2xvdCovCisJCVVBU01faV9NRkMwKCZwLCBLMCwgQzBfRU5UUllMTzEpOyAvKiBsb2FkIGl0IGlmIHB0ciBpcyBvZGQgKi8KKwkJLyoKKwkJICogSWYgdGhlIGVudHJ5TG8gKG5vdyBpbiBLMCkgaXMgdmFsaWQgKGJpdCAxKSwgUkkgb3IKKwkJICogWEkgbXVzdCBoYXZlIHRyaWdnZXJlZCBpdC4KKwkJICovCisJCXVhc21faV9hbmRpKCZwLCBLMCwgSzAsIDIpOworCQl1YXNtX2lsX2JuZXooJnAsICZyLCBLMCwgbGFiZWxfbm9wYWdlX3RsYmwpOworCisJCXVhc21fbF90bGJsX2dvYXJvdW5kMSgmbCwgcCk7CisJCS8qIFJlbG9hZCB0aGUgUFRFIHZhbHVlICovCisJCWlQVEVfTFcoJnAsIEswLCBLMSk7CisJfQogCWJ1aWxkX21ha2VfdmFsaWQoJnAsICZyLCBLMCwgSzEpOwogCWJ1aWxkX3I0MDAwX3RsYmNoYW5nZV9oYW5kbGVyX3RhaWwoJnAsICZsLCAmciwgSzAsIEsxKTsKIApAQCAtMTI4NCw2ICsxMzY0LDQwIEBACiAJaVBURV9MVygmcCwgSzAsIEsxKTsKIAlidWlsZF9wdGVfcHJlc2VudCgmcCwgJnIsIEswLCBLMSwgbGFiZWxfbm9wYWdlX3RsYmwpOwogCWJ1aWxkX3RsYl9wcm9iZV9lbnRyeSgmcCk7CisKKwlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJLyoKKwkJICogSWYgdGhlIHBhZ2UgaXMgbm90IF9QQUdFX1ZBTElELCBSSSBvciBYSSBjb3VsZCBub3QKKwkJICogaGF2ZSB0cmlnZ2VyZWQgaXQuICBTa2lwIHRoZSBleHBlbnNpdmUgdGVzdC4uCisJCSAqLworCQl1YXNtX2lfYW5kaSgmcCwgSzAsIEswLCBfUEFHRV9WQUxJRCk7CisJCXVhc21faWxfYmVxeigmcCwgJnIsIEswLCBsYWJlbF90bGJsX2dvYXJvdW5kMik7CisJCXVhc21faV9ub3AoJnApOworCisJCXVhc21faV90bGJyKCZwKTsKKwkJLyogRXhhbWluZSAgZW50cnlsbyAwIG9yIDEgYmFzZWQgb24gcHRyLiAqLworCQl1YXNtX2lfYW5kaSgmcCwgSzAsIEsxLCBzaXplb2YocHRlX3QpKTsKKwkJdWFzbV9pX2JlcXooJnAsIEswLCA4KTsKKworCQlVQVNNX2lfTUZDMCgmcCwgSzAsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCBpbiB0aGUgZGVsYXkgc2xvdCovCisJCVVBU01faV9NRkMwKCZwLCBLMCwgQzBfRU5UUllMTzEpOyAvKiBsb2FkIGl0IGlmIHB0ciBpcyBvZGQgKi8KKwkJLyoKKwkJICogSWYgdGhlIGVudHJ5TG8gKG5vdyBpbiBLMCkgaXMgdmFsaWQgKGJpdCAxKSwgUkkgb3IKKwkJICogWEkgbXVzdCBoYXZlIHRyaWdnZXJlZCBpdC4KKwkJICovCisJCXVhc21faV9hbmRpKCZwLCBLMCwgSzAsIDIpOworCQl1YXNtX2lsX2JlcXooJnAsICZyLCBLMCwgbGFiZWxfdGxibF9nb2Fyb3VuZDIpOworCQkvKiBSZWxvYWQgdGhlIFBURSB2YWx1ZSAqLworCQlpUFRFX0xXKCZwLCBLMCwgSzEpOworCisJCS8qCisJCSAqIFdlIGNsb2JiZXJlZCBDMF9QQUdFTUFTSywgcmVzdG9yZSBpdC4gIE9uIHRoZSBvdGhlciBicmFuY2gKKwkJICogaXQgaXMgcmVzdG9yZWQgaW4gYnVpbGRfaHVnZV90bGJfd3JpdGVfZW50cnkuCisJCSAqLworCQlidWlsZF9yZXN0b3JlX3BhZ2VtYXNrKCZwLCAmciwgSzAsIGxhYmVsX25vcGFnZV90bGJsKTsKKworCQl1YXNtX2xfdGxibF9nb2Fyb3VuZDIoJmwsIHApOworCX0KIAl1YXNtX2lfb3JpKCZwLCBLMCwgSzAsIChfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1ZBTElEKSk7CiAJYnVpbGRfaHVnZV9oYW5kbGVyX3RhaWwoJnAsICZyLCAmbCwgSzAsIEsxKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3Vhc20uYyBiL2FyY2gvbWlwcy9tbS91YXNtLmMKaW5kZXggMGExNjVjNS4uMTU4MWU5OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3Vhc20uYworKysgYi9hcmNoL21pcHMvbW0vdWFzbS5jCkBAIC0xOSw4ICsxOSw3IEBACiAjaW5jbHVkZSA8YXNtL2luc3QuaD4KICNpbmNsdWRlIDxhc20vZWxmLmg+CiAjaW5jbHVkZSA8YXNtL2J1Z3MuaD4KLQotI2luY2x1ZGUgInVhc20uaCIKKyNpbmNsdWRlIDxhc20vdWFzbS5oPgogCiBlbnVtIGZpZWxkcyB7CiAJUlMgPSAweDAwMSwKQEAgLTYzLDggKzYyLDkgQEAKIAlpbnNuX2RzcmwzMiwgaW5zbl9kcm90ciwgaW5zbl9kc3VidSwgaW5zbl9lcmV0LCBpbnNuX2osIGluc25famFsLAogCWluc25fanIsIGluc25fbGQsIGluc25fbGwsIGluc25fbGxkLCBpbnNuX2x1aSwgaW5zbl9sdywgaW5zbl9tZmMwLAogCWluc25fbXRjMCwgaW5zbl9vcmksIGluc25fcHJlZiwgaW5zbl9yZmUsIGluc25fc2MsIGluc25fc2NkLAotCWluc25fc2QsIGluc25fc2xsLCBpbnNuX3NyYSwgaW5zbl9zcmwsIGluc25fc3VidSwgaW5zbl9zdywKLQlpbnNuX3RsYnAsIGluc25fdGxid2ksIGluc25fdGxid3IsIGluc25feG9yLCBpbnNuX3hvcmksIGluc25fZGlucworCWluc25fc2QsIGluc25fc2xsLCBpbnNuX3NyYSwgaW5zbl9zcmwsIGluc25fcm90ciwgaW5zbl9zdWJ1LCBpbnNuX3N3LAorCWluc25fdGxicCwgaW5zbl90bGJyLCBpbnNuX3RsYndpLCBpbnNuX3RsYndyLCBpbnNuX3hvciwgaW5zbl94b3JpLAorCWluc25fZGlucwogfTsKIAogc3RydWN0IGluc24gewpAQCAtMTI2LDkgKzEyNiwxMSBAQAogCXsgaW5zbl9zbGwsICBNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIHNsbF9vcCksICBSVCB8IFJEIHwgUkUgfSwKIAl7IGluc25fc3JhLCAgTShzcGVjX29wLCAwLCAwLCAwLCAwLCBzcmFfb3ApLCAgUlQgfCBSRCB8IFJFIH0sCiAJeyBpbnNuX3NybCwgIE0oc3BlY19vcCwgMCwgMCwgMCwgMCwgc3JsX29wKSwgIFJUIHwgUkQgfCBSRSB9LAorCXsgaW5zbl9yb3RyLCAgTShzcGVjX29wLCAxLCAwLCAwLCAwLCBzcmxfb3ApLCAgUlQgfCBSRCB8IFJFIH0sCiAJeyBpbnNuX3N1YnUsICBNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIHN1YnVfb3ApLCAgUlMgfCBSVCB8IFJEIH0sCiAJeyBpbnNuX3N3LCAgTShzd19vcCwgMCwgMCwgMCwgMCwgMCksICBSUyB8IFJUIHwgU0lNTSB9LAogCXsgaW5zbl90bGJwLCAgTShjb3AwX29wLCBjb3Bfb3AsIDAsIDAsIDAsIHRsYnBfb3ApLCAgMCB9LAorCXsgaW5zbl90bGJyLCAgTShjb3AwX29wLCBjb3Bfb3AsIDAsIDAsIDAsIHRsYnJfb3ApLCAgMCB9LAogCXsgaW5zbl90bGJ3aSwgIE0oY29wMF9vcCwgY29wX29wLCAwLCAwLCAwLCB0bGJ3aV9vcCksICAwIH0sCiAJeyBpbnNuX3RsYndyLCAgTShjb3AwX29wLCBjb3Bfb3AsIDAsIDAsIDAsIHRsYndyX29wKSwgIDAgfSwKIAl7IGluc25feG9yLCAgTShzcGVjX29wLCAwLCAwLCAwLCAwLCB4b3Jfb3ApLCAgUlMgfCBSVCB8IFJEIH0sCkBAIC0zNzksOSArMzgxLDExIEBACiBJX3UydTF1Myhfc2xsKQogSV91MnUxdTMoX3NyYSkKIElfdTJ1MXUzKF9zcmwpCitJX3UydTF1Myhfcm90cikKIElfdTN1MXUyKF9zdWJ1KQogSV91MnMzdTEoX3N3KQogSV8wKF90bGJwKQorSV8wKF90bGJyKQogSV8wKF90bGJ3aSkKIElfMChfdGxid3IpCiBJX3UzdTF1MihfeG9yKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKaW5kZXggNGMzZmNhMS4uMmNiNWFlNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYworKysgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCkBAIC01Miw3ICs1Miw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfZ2NtcF9iYXNlOwogc3RhdGljIHVuc2lnbmVkIGludCBpcGlfbWFwW05SX0NQVVNdOwogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1pcHNfaXJxX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sobWlwc19pcnFfbG9jayk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IG1pcHNfcGNpYmlvc19pYWNrKHZvaWQpCiB7CkBAIC0xMDMsNyArMTAzLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpcnE7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1pcHNfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm1pcHNfaXJxX2xvY2ssIGZsYWdzKTsKIAogCWlycSA9IG1pcHNfcGNpYmlvc19pYWNrKCk7CiAKQEAgLTExMyw3ICsxMTMsNyBAQAogCSAqIG9uIGFuIFNNUCBzeXN0ZW0sICBzbyBsZWF2ZSBpdCB1cCB0byB0aGUgZ2VuZXJpYyBjb2RlLi4uCiAJICovCiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtaXBzX2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1pcHNfaXJxX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBpcnE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL2ludGVycnVwdHMuYyBiL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vaW50ZXJydXB0cy5jCmluZGV4IDNhNDY3YzAuLjk0MTkxNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vaW50ZXJydXB0cy5jCisrKyBiL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vaW50ZXJydXB0cy5jCkBAIC0xNTYsMTkgKzE1NiwxOSBAQAogI2RlZmluZSBJUlFGTEFHX1NUQVJURUQJCTEKICNkZWZpbmUgSVJRRkxBR19ESVNBQkxFRAkyCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socG54ODMzeF9pcnFfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhwbng4MzN4X2lycV9sb2NrKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBwbng4MzN4X3N0YXJ0dXBfcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHBpY19pcnEgPSBpcnEgLSBQTlg4MzNYX1BJQ19JUlFfQkFTRTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiAKIAlpcnFmbGFnc1twaWNfaXJxXSA9IElSUUZMQUdfU1RBUlRFRDsJLyogc3RhcnRlZCwgbm90IGRpc2FibGVkICovCiAJcG54ODMzeF9oYXJkX2VuYWJsZV9waWNfaXJxKHBpY19pcnEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3NywxMiArMTc3LDEyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgcGljX2lycSA9IGlycSAtIFBOWDgzM1hfUElDX0lSUV9CQVNFOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAogCWlycWZsYWdzW3BpY19pcnFdID0gMDsJCQkvKiBub3Qgc3RhcnRlZCAqLwogCXBueDgzM3hfaGFyZF9kaXNhYmxlX3BpY19pcnEocGljX2lycSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcG54ODMzeF9lbmFibGVfcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTkwLDEzICsxOTAsMTMgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBwaWNfaXJxID0gaXJxIC0gUE5YODMzWF9QSUNfSVJRX0JBU0U7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCiAJaXJxZmxhZ3NbcGljX2lycV0gJj0gfklSUUZMQUdfRElTQUJMRUQ7CiAJaWYgKGlycWZsYWdzW3BpY19pcnFdID09IElSUUZMQUdfU1RBUlRFRCkKIAkJcG54ODMzeF9oYXJkX2VuYWJsZV9waWNfaXJxKHBpY19pcnEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBueDgzM3hfZGlzYWJsZV9waWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0yMDQsMTIgKzIwNCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHBpY19pcnEgPSBpcnEgLSBQTlg4MzNYX1BJQ19JUlFfQkFTRTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiAKIAlpcnFmbGFnc1twaWNfaXJxXSB8PSBJUlFGTEFHX0RJU0FCTEVEOwogCXBueDgzM3hfaGFyZF9kaXNhYmxlX3BpY19pcnEocGljX2lycSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcG54ODMzeF9hY2tfcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMjIwLDE1ICsyMjAsMTUgQEAKIHsKIH0KIAotc3RhdGljIERFRklORV9TUElOTE9DSyhwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jayk7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcG54ODMzeF9zdGFydHVwX2dwaW9faXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJaW50IHBpbiA9IGlycSAtIFBOWDgzM1hfR1BJT19JUlFfQkFTRTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAlwbng4MzN4X2dwaW9fZW5hYmxlX2lycShwaW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzNiwxOCArMjM2LDE4IEBACiB7CiAJaW50IHBpbiA9IGlycSAtIFBOWDgzM1hfR1BJT19JUlFfQkFTRTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAlwbng4MzN4X2dwaW9fZW5hYmxlX2lycShwaW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBueDgzM3hfZGlzYWJsZV9ncGlvX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCWludCBwaW4gPSBpcnEgLSBQTlg4MzNYX0dQSU9fSVJRX0JBU0U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiAJcG54ODMzeF9ncGlvX2Rpc2FibGVfaXJxKHBpbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcG54ODMzeF9hY2tfZ3Bpb19pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTI1OCw5ICsyNTgsOSBAQAogewogCWludCBwaW4gPSBpcnEgLSBQTlg4MzNYX0dQSU9fSVJRX0JBU0U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiAJcG54ODMzeF9ncGlvX2NsZWFyX2lycShwaW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgcG54ODMzeF9zZXRfdHlwZV9ncGlvX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQpAQCAtMzc3LDQgKzM3NywzIEBACiAKIAltaXBzX2hwdF9mcmVxdWVuY3kgKj0gNTAwMDAwOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL3Byb20uYyBiL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vcHJvbS5jCmluZGV4IDJhNDFlOGYuLjI5OTY5ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vcHJvbS5jCkBAIC02Miw5ICs2MiwzIEBACiB2b2lkIF9faW5pdCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKIHsKIH0KLQotY2hhciAqIF9faW5pdCBwcm9tX2dldGNtZGxpbmUodm9pZCkKLXsKLQlyZXR1cm4gYXJjc19jbWRsaW5lOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3Byb20uYyBiL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vcHJvbS5jCmluZGV4IDJmNTY3NDUuLjMyZjcwMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vcHJvbS5jCkBAIC0xMjQsNiArMTI0LDUgQEAKIAl9CiB9CiAKLUVYUE9SVF9TWU1CT0wocHJvbV9nZXRjbWRsaW5lKTsKIEVYUE9SVF9TWU1CT0woZ2V0X2V0aGVybmV0X2FkZHIpOwogRVhQT1JUX1NZTUJPTChzdHIyZWFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL29wcm9maWxlL2NvbW1vbi5jIGIvYXJjaC9taXBzL29wcm9maWxlL2NvbW1vbi5jCmluZGV4IDc4MzJhZDIuLmY5ZWIxYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9vcHJvZmlsZS9jb21tb24uYworKysgYi9hcmNoL21pcHMvb3Byb2ZpbGUvY29tbW9uLmMKQEAgLTYsNiArNiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUmFsZiBCYWVjaGxlCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KICAqLworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KQEAgLTE0LDkgKzE1LDkgQEAKIAogI2luY2x1ZGUgIm9wX2ltcGwuaCIKIAotZXh0ZXJuIHN0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX21pcHN4eF9vcHMgX19hdHRyaWJ1dGVfXygod2VhaykpOwotZXh0ZXJuIHN0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX3JtOTAwMF9vcHMgX19hdHRyaWJ1dGVfXygod2VhaykpOwotZXh0ZXJuIHN0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX2xvb25nc29uMl9vcHMgX19hdHRyaWJ1dGVfXygod2VhaykpOworZXh0ZXJuIHN0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX21pcHN4eF9vcHMgX193ZWFrOworZXh0ZXJuIHN0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX3JtOTAwMF9vcHMgX193ZWFrOworZXh0ZXJuIHN0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX2xvb25nc29uMl9vcHMgX193ZWFrOwogCiBzdGF0aWMgc3RydWN0IG9wX21pcHNfbW9kZWwgKm1vZGVsOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMgYi9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMKaW5kZXggNDc1ZmY0Ni4uMjllMjMyNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jCisrKyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KICAqIEF1dGhvcjogWWFuaHVhIDx5YW5oQGxlbW90ZS5jb20+Ci0gKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtNDcsOCArNDcsNiBAQAogCWludCBjbnQxX2VuYWJsZWQsIGNudDJfZW5hYmxlZDsKIH0gcmVnOwogCi1ERUZJTkVfU1BJTkxPQ0soc2FtcGxlX2xvY2spOwotCiBzdGF0aWMgY2hhciAqb3Byb2ZpZCA9ICJMb29uZ3NvblBlcmYiOwogc3RhdGljIGlycXJldHVybl90IGxvb25nc29uMl9wZXJmY291bnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogLyogQ29tcHV0ZSBhbGwgb2YgdGhlIHJlZ2lzdGVycyBpbiBwcmVwYXJhdGlvbiBmb3IgZW5hYmxpbmcgcHJvZmlsaW5nLiAgKi8KQEAgLTExNSw3ICsxMTMsNiBAQAogCXVpbnQ2NF90IGNvdW50ZXIsIGNvdW50ZXIxLCBjb3VudGVyMjsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOwogCWludCBlbmFibGVkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKgogCSAqIExPT05HU09OMiBkZWZpbmVzIHR3byAzMi1iaXQgcGVyZm9ybWFuY2UgY291bnRlcnMuCkBAIC0xMzYsOCArMTMzLDYgQEAKIAljb3VudGVyMSA9IGNvdW50ZXIgJiAweGZmZmZmZmZmOwogCWNvdW50ZXIyID0gY291bnRlciA+PiAzMjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzYW1wbGVfbG9jaywgZmxhZ3MpOwotCiAJaWYgKGNvdW50ZXIxICYgTE9PTkdTT04yX1BFUkZDTlRfT1ZFUkZMT1cpIHsKIAkJaWYgKHJlZy5jbnQxX2VuYWJsZWQpCiAJCQlvcHJvZmlsZV9hZGRfc2FtcGxlKHJlZ3MsIDApOwpAQCAtMTQ5LDggKzE0NCw2IEBACiAJCWNvdW50ZXIyID0gcmVnLnJlc2V0X2NvdW50ZXIyOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhbXBsZV9sb2NrLCBmbGFncyk7Ci0KIAl3cml0ZV9jMF9wZXJmY250KChjb3VudGVyMiA8PCAzMikgfCBjb3VudGVyMSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWNvYmFsdC5jIGIvYXJjaC9taXBzL3BjaS9maXh1cC1jb2JhbHQuYwppbmRleCA5NTUzYjE0Li5hY2FjZDE0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWNvYmFsdC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtY29iYWx0LmMKQEAgLTUxLDYgKzUxLDY3IEBACiBERUNMQVJFX1BDSV9GSVhVUF9FQVJMWShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF9HVDY0MTExLAogCSBxdWJlX3JhcV9nYWxpbGVvX2Vhcmx5X2ZpeHVwKTsKIAorc3RhdGljIHZvaWQgX19kZXZpbml0IGNvYmFsdF9sZWdhY3lfaWRlX3Jlc291cmNlX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQkgICAgICAgc3RydWN0IHJlc291cmNlICpyZXMpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gKHN0cnVjdCBwY2lfY29udHJvbGxlciAqKWRldi0+c3lzZGF0YTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGhvc2UtPmlvX29mZnNldDsKKwlzdHJ1Y3QgcmVzb3VyY2Ugb3JpZyA9ICpyZXM7CisKKwlpZiAoIShyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgfHwKKwkgICAgIShyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9QQ0lfRklYRUQpKQorCQlyZXR1cm47CisKKwlyZXMtPnN0YXJ0IC09IG9mZnNldDsKKwlyZXMtPmVuZCAtPSBvZmZzZXQ7CisJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJjb252ZXJ0ZWQgbGVnYWN5ICVwUiB0byBidXMgJXBSXG4iLAorCQkgICAmb3JpZywgcmVzKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGNvYmFsdF9sZWdhY3lfaWRlX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdTMyIGNsYXNzOworCXU4IHByb2dpZjsKKworCS8qCisJICogSWYgdGhlIElERSBjb250cm9sbGVyIGlzIGluIGxlZ2FjeSBtb2RlLCBwY2lfc2V0dXBfZGV2aWNlKCkgZmlsbHMgaW4KKwkgKiB0aGUgcmVzb3VyY2VzIHdpdGggdGhlIGxlZ2FjeSBhZGRyZXNzZXMgdGhhdCBub3JtYWxseSBhcHBlYXIgb24gdGhlCisJICogUENJIGJ1cywganVzdCBhcyBpZiB3ZSBoYWQgcmVhZCB0aGVtIGZyb20gYSBCQVIuCisJICoKKwkgKiBIb3dldmVyLCB3aXRoIHRoZSBHVC02NDExMSwgdGhvc2UgbGVnYWN5IGFkZHJlc3NlcywgZS5nLiwgMHgxZjAsCisJICogd2lsbCBuZXZlciBhcHBlYXIgb24gdGhlIFBDSSBidXMgYmVjYXVzZSBpdCBjb252ZXJ0cyBtZW1vcnkgYWNjZXNzZXMKKwkgKiBpbiB0aGUgUENJIEkvTyByZWdpb24gKHdoaWNoIGlzIG5ldmVyIGF0IGFkZHJlc3MgemVybykgaW50byBJL08gcG9ydAorCSAqIGFjY2Vzc2VzIHdpdGggbm8gYWRkcmVzcyB0cmFuc2xhdGlvbi4KKwkgKgorCSAqIEZvciBleGFtcGxlLCBpZiBHVF9ERUZfUENJMF9JT19CQVNFIGlzIDB4MTAwMDAwMDAsIGEgbG9hZCBvciBzdG9yZQorCSAqIHRvIHBoeXNpY2FsIGFkZHJlc3MgMHgxMDAwMDFmMCB3aWxsIGJlY29tZSBhIFBDSSBhY2Nlc3MgdG8gSS9PIHBvcnQKKwkgKiAweDEwMDAwMWYwLiAgVGhlcmUncyBubyB3YXkgdG8gZ2VuZXJhdGUgYW4gYWNjZXNzIHRvIEkvTyBwb3J0IDB4MWYwLAorCSAqIGJ1dCB0aGUgVlQ4MkM1ODYgSURFIGNvbnRyb2xsZXIgZG9lcyByZXNwb25kIGF0IDB4MTAwMDAxZjAgYmVjYXVzZQorCSAqIGl0IG9ubHkgZGVjb2RlcyB0aGUgbG93IDI0IGJpdHMgb2YgdGhlIGFkZHJlc3MuCisJICoKKwkgKiBXaGVuIHRoaXMgcXVpcmsgcnVucywgdGhlIHBjaV9kZXYgcmVzb3VyY2VzIHNob3VsZCBjb250YWluIGJ1cworCSAqIGFkZHJlc3Nlcywgbm90IExpbnV4IEkvTyBwb3J0IG51bWJlcnMsIHNvIGNvbnZlcnQgbGVnYWN5IGFkZHJlc3NlcworCSAqIGxpa2UgMHgxZjAgdG8gYnVzIGFkZHJlc3NlcyBsaWtlIDB4MTAwMDAxZjAuICBMYXRlciwgd2UnbGwgY29udmVydAorCSAqIHRoZW0gYmFjayB3aXRoIHBjaWJpb3NfZml4dXBfYnVzKCkgb3IgcGNpYmlvc19idXNfdG9fcmVzb3VyY2UoKS4KKwkgKi8KKwljbGFzcyA9IGRldi0+Y2xhc3MgPj4gODsKKwlpZiAoY2xhc3MgIT0gUENJX0NMQVNTX1NUT1JBR0VfSURFKQorCQlyZXR1cm47CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9DTEFTU19QUk9HLCAmcHJvZ2lmKTsKKwlpZiAoKHByb2dpZiAmIDEpID09IDApIHsKKwkJY29iYWx0X2xlZ2FjeV9pZGVfcmVzb3VyY2VfZml4dXAoZGV2LCAmZGV2LT5yZXNvdXJjZVswXSk7CisJCWNvYmFsdF9sZWdhY3lfaWRlX3Jlc291cmNlX2ZpeHVwKGRldiwgJmRldi0+cmVzb3VyY2VbMV0pOworCX0KKwlpZiAoKHByb2dpZiAmIDQpID09IDApIHsKKwkJY29iYWx0X2xlZ2FjeV9pZGVfcmVzb3VyY2VfZml4dXAoZGV2LCAmZGV2LT5yZXNvdXJjZVsyXSk7CisJCWNvYmFsdF9sZWdhY3lfaWRlX3Jlc291cmNlX2ZpeHVwKGRldiwgJmRldi0+cmVzb3VyY2VbM10pOworCX0KK30KKworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMSwKKwkgIGNvYmFsdF9sZWdhY3lfaWRlX2ZpeHVwKTsKKwogc3RhdGljIHZvaWQgcXViZV9yYXFfdmlhX2JtSURFX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgc2hvcnQgY2Znd29yZDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvZml4dXAtbGVtb3RlMmYuYyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtbGVtb3RlMmYuYwppbmRleCBjYWYyZWRlLi40Yjk3NjhkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWxlbW90ZTJmLmMKKysrIGIvYXJjaC9taXBzL3BjaS9maXh1cC1sZW1vdGUyZi5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIAogCS8qIFNlcmlhbCBzaG9ydCBkZXRlY3QgZW5hYmxlICovCiAJX3JkbXNyKFVTQl9NU1JfUkVHKFVTQl9DT05GSUcpLCAmaGksICZsbyk7Ci0JX3dybXNyKFVTQl9NU1JfUkVHKFVTQl9DT05GSUcpLCAoMSA8PCAxKSB8ICgxIDw8IDIpIHwgKDEgPDwgMyksIGxvKTsKKwlfd3Jtc3IoVVNCX01TUl9SRUcoVVNCX0NPTkZJRyksICgxIDw8IDEpIHwgKDEgPDwgMyksIGxvKTsKIAogCS8qIHNldHRpbmcgdGhlIFVTQjIuMCBtaWNybyBmcmFtZSBsZW5ndGggKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9FSENJX0ZMQURKX1JFRywgMHgyMDAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLWxvb25nc29uMi5jIGIvYXJjaC9taXBzL3BjaS9vcHMtbG9vbmdzb24yLmMKaW5kZXggYWE1ZDNkYS4uMmJiNDA1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9vcHMtbG9vbmdzb24yLmMKKysrIGIvYXJjaC9taXBzL3BjaS9vcHMtbG9vbmdzb24yLmMKQEAgLTEsMTMgKzEsMTEgQEAKIC8qCi0gKiBmdWxvb25nMmUgc3BlY2lmaWMgUENJIHN1cHBvcnQuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDA0ICBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgogICoJQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCUF1dGhvcnM6IENhcnN0ZW4gTGFuZ2dhYXJkIDxjYXJzdGVubEBtaXBzLmNvbT4KICAqCQkgTWFjaWVqIFcuIFJvenlja2kgPG1hY3JvQG1pcHMuY29tPgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jIGIvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMKaW5kZXggMzI1NDhiNS4uMDRiMzE0NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMKKysrIGIvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICYmIFBDSV9DT1VOVEVSUyAqLwogCi1ERUZJTkVfU1BJTkxPQ0soYnBjaV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYnBjaV9sb2NrKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2ktYmNtNDd4eC5jIGIvYXJjaC9taXBzL3BjaS9wY2ktYmNtNDd4eC5jCmluZGV4IGJlYTliNmMuLjQ1NWY4ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTQ3eHguYworKysgYi9hcmNoL21pcHMvcGNpL3BjaS1iY200N3h4LmMKQEAgLTU3LDQgKzU3LDMgQEAKIAlkZXYtPmlycSA9IHJlczsKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2ktb2N0ZW9uLmMgYi9hcmNoL21pcHMvcGNpL3BjaS1vY3Rlb24uYwppbmRleCA5Y2IwYzgwNy4uZDI0OGI3MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktb2N0ZW9uLmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktb2N0ZW9uLmMKQEAgLTIwOSwxNiArMjA5LDE0IEBACiAJY2FzZSBDVk1YX0JPQVJEX1RZUEVfTkFPMzg6CiAJCS8qIFRoaXMgaXMgcmVhbGx5IHRoZSBOQUMzOCAqLwogCQlyZXR1cm4gIkFBQUFBREFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIjsKLQljYXNlIENWTVhfQk9BUkRfVFlQRV9USFVOREVSOgotCQlyZXR1cm4gIiI7Ci0JY2FzZSBDVk1YX0JPQVJEX1RZUEVfRUJIMzAwMDoKLQkJcmV0dXJuICIiOwogCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX0VCSDMxMDA6CiAJY2FzZSBDVk1YX0JPQVJEX1RZUEVfQ04zMDEwX0VWQl9IUzU6CiAJY2FzZSBDVk1YX0JPQVJEX1RZUEVfQ04zMDA1X0VWQl9IUzU6CiAJCXJldHVybiAiQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiOwogCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX0JCR1dfUkVGOgogCQlyZXR1cm4gIkFBQkNEIjsKKwljYXNlIENWTVhfQk9BUkRfVFlQRV9USFVOREVSOgorCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX0VCSDMwMDA6CiAJZGVmYXVsdDoKIAkJcmV0dXJuICIiOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLmMgYi9hcmNoL21pcHMvcGNpL3BjaS5jCmluZGV4IDlhMTFjMjIuLjM4YmMyODAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2kuYwpAQCAtNDksOCArNDksOCBAQAogICogYnV0IHdlIHdhbnQgdG8gdHJ5IHRvIGF2b2lkIGFsbG9jYXRpbmcgYXQgMHgyOTAwLTB4MmJmZgogICogd2hpY2ggbWlnaHQgaGF2ZSBiZSBtaXJyb3JlZCBhdCAweDAxMDAtMHgwM2ZmLi4KICAqLwotdm9pZAotcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKK3Jlc291cmNlX3NpemVfdAorcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRhdGE7CkBAIC03Myw3ICs3Myw3IEBACiAJCQlzdGFydCA9IFBDSUJJT1NfTUlOX01FTSArIGhvc2UtPm1lbV9yZXNvdXJjZS0+c3RhcnQ7CiAJfQogCi0JcmVzLT5zdGFydCA9IHN0YXJ0OworCXJldHVybiBzdGFydDsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaWJpb3Nfc2NhbmJ1cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCkBAIC0yNTEsOCArMjUxLDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgUENJX05VTV9SRVNPVVJDRVM7IGkrKykgewogCQlpZiAoIWRldi0+cmVzb3VyY2VbaV0uc3RhcnQpCiAJCQljb250aW51ZTsKLQkJaWYgKGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX1BDSV9GSVhFRCkKLQkJCWNvbnRpbnVlOwogCQlpZiAoZGV2LT5yZXNvdXJjZVtpXS5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCiAJCQlvZmZzZXQgPSBob3NlLT5pb19vZmZzZXQ7CiAJCWVsc2UgaWYgKGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX2lycV9jaWMuYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX2lycV9jaWMuYwppbmRleCA1MTc1MzU3Li45NGM5YzJjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9pcnFfY2ljLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfaXJxX2NpYy5jCkBAIC0xMzEsNCArMTMxLDMgQEAKIAllbHNlCiAJCWRvX0lSUShmZnMocGVuZGluZykgKyBpbnRiYXNlIC0gMSk7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3Byb20uYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3Byb20uYwppbmRleCBjMzE3YTM2Li5kYjk4ZDg3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9wcm9tLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfcHJvbS5jCkBAIC0zMDMsMTIgKzMwMyw2IEBACiB9CiAKIC8qIFBST00gY29tbWFuZGxpbmUgZnVuY3Rpb25zICovCi1jaGFyICpwcm9tX2dldGNtZGxpbmUodm9pZCkKLXsKLQlyZXR1cm4gJihhcmNzX2NtZGxpbmVbMF0pOwotfQotRVhQT1JUX1NZTUJPTChwcm9tX2dldGNtZGxpbmUpOwotCiB2b2lkICBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCkKIHsKIAljaGFyICpjcDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2F0bWVsX3JlYWRfZWVwcm9tLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9hdG1lbF9yZWFkX2VlcHJvbS5jCmluZGV4IGZjOTkwY2IuLmQ2ZjhiZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2F0bWVsX3JlYWRfZWVwcm9tLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvYXRtZWxfcmVhZF9lZXByb20uYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAKIAlpZiAoYWNrKSB7CiAJCWRvX2lkbGUoKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZWFkaW5nIHRoZSBBdG1lbCAyNEMzMi8yNEM2NCBFRVBST00gXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZWFkaW5nIHRoZSBBdG1lbCAyNEMzMi8yNEM2NCBFRVBST01cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9hdG1lbF9yZWFkX2VlcHJvbS5oIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvYXRtZWxfcmVhZF9lZXByb20uaAppbmRleCBhMzEyODgzLi5kNmM3ZWM0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9hdG1lbF9yZWFkX2VlcHJvbS5oCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2F0bWVsX3JlYWRfZWVwcm9tLmgKQEAgLTY1LDQgKzY1LDMgQEAKIGNvbnN0IGNoYXIgcnRzID0gVElPQ01fUlRTOwogY29uc3QgY2hhciBkdHIgPSBUSU9DTV9EVFI7CiBpbnQgZmQ7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2h0LmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9odC5jCmluZGV4IDY3ODM4OGYuLmZkMjI1OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2h0LmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvaHQuYwpAQCAtMzQ1LDE0ICszNDUsMTMgQEAKICAgICAgICAgcmV0dXJuIHBjaWJpb3NfZW5hYmxlX3Jlc291cmNlcyhkZXYpOwogfQogCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKICAgICAgICAgaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKLQogICAgICAgICAgICAgICAgIC8qIFdlIG5lZWQgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoIGBtaXJyb3JlZCcgVkdBIHBvcnRzCiAgICAgICAgICAgICAgICAgICAgYW5kIG90aGVyIHN0cmFuZ2UgSVNBIGhhcmR3YXJlLCBzbyB3ZSBhbHdheXMgd2FudCB0aGUKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzZXMga2lsb2J5dGUgYWxpZ25lZC4gICovCkBAIC0zNjMsOCArMzYyLDkgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBzdGFydCA9IChzdGFydCArIDEwMjQgLSAxKSAmIH4oMTAyNCAtIDEpOwotICAgICAgICAgICAgICAgIHJlcy0+c3RhcnQgPSBzdGFydDsKICAgICAgICAgfQorCisJcmV0dXJuIHN0YXJ0OwogfQogCiBzdHJ1Y3QgcGNpX29wcyB0aXRhbl9wY2lfb3BzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zbXAuYwppbmRleCAzMjZmZTdhLi5lZmM5ZTg4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zbXAuYworKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zbXAuYwpAQCAtOCw3ICs4LDcgQEAKIAogI2RlZmluZSBMQVVOQ0hTVEFDS19TSVpFIDI1NgogCi1zdGF0aWMgX19jcHVpbml0ZGF0YSBERUZJTkVfU1BJTkxPQ0sobGF1bmNoX2xvY2spOworc3RhdGljIF9fY3B1aW5pdGRhdGEgYXJjaF9zcGlubG9ja190IGxhdW5jaF9sb2NrID0gX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRDsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Vjb25kYXJ5X3NwIF9fY3B1aW5pdGRhdGE7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzZWNvbmRhcnlfZ3AgX19jcHVpbml0ZGF0YTsKQEAgLTIwLDcgKzIwLDcgQEAKIHsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCi0Jd2hpbGUgKHNwaW5faXNfbG9ja2VkKCZsYXVuY2hfbG9jaykpOworCXdoaWxlIChhcmNoX3NwaW5faXNfbG9ja2VkKCZsYXVuY2hfbG9jaykpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJIgltb3ZlCSRzcCwgJTAJCVxuIgpAQCAtMzcsNyArMzcsNyBAQAogICovCiB2b2lkIF9faW5pdCBwcm9tX2dyYWJfc2Vjb25kYXJ5KHZvaWQpCiB7Ci0Jc3Bpbl9sb2NrKCZsYXVuY2hfbG9jayk7CisJYXJjaF9zcGluX2xvY2soJmxhdW5jaF9sb2NrKTsKIAogCXBtb25fY3B1c3RhcnQoMSwgJnByb21fc21wX2Jvb3RzdHJhcCwKIAkgICAgICAgICAgICAgIGxhdW5jaHN0YWNrICsgTEFVTkNIU1RBQ0tfU0laRSwgMCk7CkBAIC0xMzgsNyArMTM4LDcgQEAKIAlzZWNvbmRhcnlfc3AgPSBzcDsKIAlzZWNvbmRhcnlfZ3AgPSBncDsKIAotCXNwaW5fdW5sb2NrKCZsYXVuY2hfbG9jayk7CisJYXJjaF9zcGluX3VubG9jaygmbGF1bmNoX2xvY2spOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VyL2NwdS5jIGIvYXJjaC9taXBzL3Bvd2VyL2NwdS5jCmluZGV4IDc5OTVkZjQuLjI2YTZlZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wb3dlci9jcHUuYworKysgYi9hcmNoL21pcHMvcG93ZXIvY3B1LmMKQEAgLTMsOSArMyw5IEBACiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTHYyCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCiAgKiBBdXRob3I6IEh1IEhvbmdiaW5nIDxodWhiQGxlbW90ZS5jb20+Ci0gKiAgICAgICAgIFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiAgICAgICAgIFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqLwogI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VyL2hpYmVybmF0ZS5TIGIvYXJjaC9taXBzL3Bvd2VyL2hpYmVybmF0ZS5TCmluZGV4IDBjZjg2ZmIuLmRiYjVjN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wb3dlci9oaWJlcm5hdGUuUworKysgYi9hcmNoL21pcHMvcG93ZXIvaGliZXJuYXRlLlMKQEAgLTMsOSArMyw5IEBACiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTHYyCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCiAgKiBBdXRob3I6IEh1IEhvbmdiaW5nIDxodWhiQGxlbW90ZS5jb20+Ci0gKiAgICAgICAgIFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiAgICAgICAgIFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqLwogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWNfZGV2aWNlcy5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2RldmljZXMuYwppbmRleCA2YTg4MjE5Li4yMTc0MjQyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWNfZGV2aWNlcy5jCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19kZXZpY2VzLmMKQEAgLTM0MCwxMCArMzQwLDYgQEAKIAogCXN3aXRjaCAoYXNpYykgewogCWNhc2UgQVNJQ19aRVVTOgotCQlmc191cGRhdGUoMHgwMDAwLCAweDExLCAweDAyLCAwKTsKLQkJYmNtMV91c2IyX2N0bCA9IDB4ODAzOwotCQlicmVhazsKLQogCWNhc2UgQVNJQ19DUk9OVVM6CiAJY2FzZSBBU0lDX0NST05VU0xJVEU6CiAJCWZzX3VwZGF0ZSgweDAwMDAsIDB4MTEsIDB4MDIsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2ludC5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2ludC5jCmluZGV4IDgwYjJlZWQuLjMyNWZhYjk2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWNfaW50LmMKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2ludC5jCkBAIC0zOSwyMSArMzksMjEgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmg+CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYXNpY19pcnFfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhhc2ljX2lycV9sb2NrKTsKIAogc3RhdGljIGlubGluZSBpbnQgZ2V0X2ludCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGlycTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhc2ljX2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhc2ljX2lycV9sb2NrLCBmbGFncyk7CiAKIAlpcnEgPSAoYXNpY19yZWFkKGludF9pbnRfc2NhbikgPj4gNCkgLSAxOwogCiAJaWYgKGlycSA9PSAwIHx8IGlycSA+PSBOUl9JUlFTKQogCQlpcnEgPSAtMTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzaWNfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXNpY19pcnFfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGlycTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHZfc2V0dXAuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHZfc2V0dXAuYwppbmRleCA2OThiMWVhLi5hZjJjYWUwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXJ0di9wb3dlcnR2X3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvcG93ZXJ0dl9zZXR1cC5jCkBAIC0yNSwxNCArMjUsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLQogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKwogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvZ2VuZXJpYy5oPgogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vYXNtLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSAicmVzZXQuaCIKQEAgLTQxLDI2ICs0MiwyMSBAQAogCiAvKgogICogTWFjcm9zIGZvciBsb2FkaW5nIGFkZHJlc3NlcyBhbmQgc3RvcmluZyByZWdpc3RlcnM6Ci0gKiBQVFJfTEEJTG9hZCB0aGUgYWRkcmVzcyBpbnRvIGEgcmVnaXN0ZXIKLSAqIExPTkdfUwlTdG9yZSB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgZ2l2ZW4gcmVnaXN0ZXIuCi0gKiBMT05HX0wJTG9hZCB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgZ2l2ZW4gcmVnaXN0ZXIKLSAqIFBUUl9BRERJVQlBZGQgYSBjb25zdGFudCB2YWx1ZSB0byBhIHJlZ2lzdGVyIHVzZWQgYXMgYSBwb2ludGVyCisgKiBMT05HX0xfCVN0cmluZ2lmaWVkIHZlcnNpb24gb2YgTE9OR19MIGZvciB1c2UgaW4gYXNtKCkgc3RhdGVtZW50CisgKiBMT05HX1NfCVN0cmluZ2lmaWVkIHZlcnNpb24gb2YgTE9OR19TIGZvciB1c2UgaW4gYXNtKCkgc3RhdGVtZW50CisgKiBQVFJfTEFfCVN0cmluZ2lmaWVkIHZlcnNpb24gb2YgUFRSX0xBIGZvciB1c2UgaW4gYXNtKCkgc3RhdGVtZW50CiAgKiBSRUdfU0laRQlOdW1iZXIgb2YgOC1iaXQgYnl0ZXMgaW4gYSBmdWxsIHdpZHRoIHJlZ2lzdGVyCiAgKi8KKyNkZWZpbmUgTE9OR19MXwkJVkFMKExPTkdfTCkgIiAiCisjZGVmaW5lIExPTkdfU18JCVZBTChMT05HX1MpICIgIgorI2RlZmluZSBQVFJfTEFfCQlWQUwoUFRSX0xBKSAiICIKKwogI2lmZGVmIENPTkZJR182NEJJVAogI3dhcm5pbmcgVE9ETzogNjQtYml0IGNvZGUgbmVlZHMgdG8gYmUgdmVyaWZpZWQKLSNkZWZpbmUgUFRSX0xBCQkiZGxhCSIKLSNkZWZpbmUgTE9OR19TCQkic2QJIgotI2RlZmluZSBMT05HX0wJCSJsZAkiCi0jZGVmaW5lIFBUUl9BRERJVQkiZGFkZGl1CSIKICNkZWZpbmUgUkVHX1NJWkUJIjgiCQkvKiBJbiBieXRlcyAqLwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfMzJCSVQKLSNkZWZpbmUgUFRSX0xBCQkibGEJIgotI2RlZmluZSBMT05HX1MJCSJzdwkiCi0jZGVmaW5lIExPTkdfTAkJImx3CSIKLSNkZWZpbmUgUFRSX0FERElVCSJhZGRpdQkiCiAjZGVmaW5lIFJFR19TSVpFCSI0IgkJLyogSW4gYnl0ZXMgKi8KICNlbmRpZgogCkBAIC0xMTMsOSArMTA5LDkgQEAKIAkJICogc3RydWN0dXJlLiAqLwogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCQkiLnNldAlub2F0XG4iCi0JCQlMT05HX1MJCSIkYXQsICVbYXRdXG4iCi0JCQlMT05HX1MJCSIkMiwgJVt2MF1cbiIKLQkJCUxPTkdfUwkJIiQzLCAlW3YxXVxuIgorCQkJTE9OR19TXwkJIiRhdCwgJVthdF1cbiIKKwkJCUxPTkdfU18JCSIkMiwgJVt2MF1cbiIKKwkJCUxPTkdfU18JCSIkMywgJVt2MV1cbiIKIAkJOgogCQkJW2F0XSAiPW0iIChhdCksCiAJCQlbdjBdICI9bSIgKHYwKSwKQEAgLTEyOSw1NCArMTI1LDU0IEBACiAJCQkibW92ZQkJJGF0LCAlW3B0X3JlZ3NdXG4iCiAKIAkJCS8qIEFyZ3VtZW50IHJlZ2lzdGVycyAqLwotCQkJTE9OR19TCQkiJDQsICIgVkFMKFBUX1I0KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQ1LCAiIFZBTChQVF9SNSkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkNiwgIiBWQUwoUFRfUjYpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDcsICIgVkFMKFBUX1I3KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkNCwgIiBWQUwoUFRfUjQpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQ1LCAiIFZBTChQVF9SNSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDYsICIgVkFMKFBUX1I2KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkNywgIiBWQUwoUFRfUjcpICIoJGF0KVxuIgogCiAJCQkvKiBUZW1wb3JhcnkgcmVncyAqLwotCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1I4KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQ5LCAiIFZBTChQVF9SOSkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTAsICIgVkFMKFBUX1IxMCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTEsICIgVkFMKFBUX1IxMSkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTIsICIgVkFMKFBUX1IxMikgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTMsICIgVkFMKFBUX1IxMykgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTQsICIgVkFMKFBUX1IxNCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTUsICIgVkFMKFBUX1IxNSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDgsICIgVkFMKFBUX1I4KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkOSwgIiBWQUwoUFRfUjkpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxMCwgIiBWQUwoUFRfUjEwKSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTEsICIgVkFMKFBUX1IxMSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDEyLCAiIFZBTChQVF9SMTIpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxMywgIiBWQUwoUFRfUjEzKSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTQsICIgVkFMKFBUX1IxNCkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDE1LCAiIFZBTChQVF9SMTUpICIoJGF0KVxuIgogCiAJCQkvKiAiU2F2ZWQiIHJlZ2lzdGVycyAqLwotCQkJTE9OR19TCQkiJDE2LCAiIFZBTChQVF9SMTYpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDE3LCAiIFZBTChQVF9SMTcpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDE4LCAiIFZBTChQVF9SMTgpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDE5LCAiIFZBTChQVF9SMTkpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDIwLCAiIFZBTChQVF9SMjApICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDIxLCAiIFZBTChQVF9SMjEpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDIyLCAiIFZBTChQVF9SMjIpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDIzLCAiIFZBTChQVF9SMjMpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxNiwgIiBWQUwoUFRfUjE2KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTcsICIgVkFMKFBUX1IxNykgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDE4LCAiIFZBTChQVF9SMTgpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxOSwgIiBWQUwoUFRfUjE5KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjAsICIgVkFMKFBUX1IyMCkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDIxLCAiIFZBTChQVF9SMjEpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQyMiwgIiBWQUwoUFRfUjIyKSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjMsICIgVkFMKFBUX1IyMykgIigkYXQpXG4iCiAKIAkJCS8qIEFkZCdsIHRlbXAgcmVncyAqLwotCQkJTE9OR19TCQkiJDI0LCAiIFZBTChQVF9SMjQpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDI1LCAiIFZBTChQVF9SMjUpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQyNCwgIiBWQUwoUFRfUjI0KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjUsICIgVkFMKFBUX1IyNSkgIigkYXQpXG4iCiAKIAkJCS8qIEtlcm5lbCB0ZW1wIHJlZ3MgKi8KLQkJCUxPTkdfUwkJIiQyNiwgIiBWQUwoUFRfUjI2KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQyNywgIiBWQUwoUFRfUjI3KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjYsICIgVkFMKFBUX1IyNikgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDI3LCAiIFZBTChQVF9SMjcpICIoJGF0KVxuIgogCiAJCQkvKiBHbG9iYWwgcG9pbnRlciwgc3RhY2sgcG9pbnRlciwgZnJhbWUgcG9pbnRlciBhbmQKIAkJCSAqIHJldHVybiBhZGRyZXNzICovCi0JCQlMT05HX1MJCSIkZ3AsICIgVkFMKFBUX1IyOCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkc3AsICIgVkFMKFBUX1IyOSkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkZnAsICIgVkFMKFBUX1IzMCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkcmEsICIgVkFMKFBUX1IzMSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJGdwLCAiIFZBTChQVF9SMjgpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiRzcCwgIiBWQUwoUFRfUjI5KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkZnAsICIgVkFMKFBUX1IzMCkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJHJhLCAiIFZBTChQVF9SMzEpICIoJGF0KVxuIgogCiAJCQkvKiBOb3cgd2UgY2FuIGdldCB0aGUgJGF0IGFuZCB2MCByZWdpc3RlcnMgYmFjayBhbmQKIAkJCSAqIHN0b3JlIHRoZW0gKi8KLQkJCUxPTkdfTAkJIiQ4LCAlW2F0XVxuIgotCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1IxKSAiKCRhdClcbiIKLQkJCUxPTkdfTAkJIiQ4LCAlW3YwXVxuIgotCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1IyKSAiKCRhdClcbiIKLQkJCUxPTkdfTAkJIiQ4LCAlW3YxXVxuIgotCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1IzKSAiKCRhdClcbiIKKwkJCUxPTkdfTF8JCSIkOCwgJVthdF1cbiIKKwkJCUxPTkdfU18JCSIkOCwgIiBWQUwoUFRfUjEpICIoJGF0KVxuIgorCQkJTE9OR19MXwkJIiQ4LCAlW3YwXVxuIgorCQkJTE9OR19TXwkJIiQ4LCAiIFZBTChQVF9SMikgIigkYXQpXG4iCisJCQlMT05HX0xfCQkiJDgsICVbdjFdXG4iCisJCQlMT05HX1NfCQkiJDgsICIgVkFMKFBUX1IzKSAiKCRhdClcbiIKIAkJOgogCQk6CiAJCQlbYXRdICJtIiAoYXQpLApAQCAtMTkxLDggKzE4Nyw4IEBACiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJCSIuc2V0CW5vYXRcbiIKIAkJIjE6XG4iCi0JCQlQVFJfTEEJCSIkYXQsIDFiXG4iCi0JCQlMT05HX1MJCSIkYXQsICVbY3AwX2VwY11cbiIKKwkJCVBUUl9MQV8JCSIkYXQsIDFiXG4iCisJCQlMT05HX1NfCQkiJGF0LCAlW2NwMF9lcGNdXG4iCiAJCToKIAkJCVtjcDBfZXBjXSAiPW0iIChteV9yZWdzLmNwMF9lcGMpCiAJCToKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMKaW5kZXggZDljNzlkOC4uYzNkMzBhOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMKQEAgLTEzMyw0ICsxMzMsMyBAQAogCQlyZXR1cm4gKEtETV9UT19QSFlTKFBBR0VfQUxJR04oU1lNTU9OX1NUS19BRERSKG5hc2lkLCAwKSkpID4+CiAJCQkJCQkJCVBBR0VfU0hJRlQpOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1ubWkuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jCmluZGV4IDZjNWE2MzAuLmJjNGZhOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jCkBAIC0xNywxMSArMTcsMTAgQEAKICNlbmRpZgogCiAjZGVmaW5lIENOT0RFSURfTk9ORSAoY25vZGVpZF90KS0xCi0jZGVmaW5lIGVudGVyX3BhbmljX21vZGUoKQlzcGluX2xvY2soJm5taV9sb2NrKQogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbWFjaHJlZ190OwogCi1ERUZJTkVfU1BJTkxPQ0sobm1pX2xvY2spOworc3RhdGljIGFyY2hfc3BpbmxvY2tfdCBubWlfbG9jayA9IF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQ7CiAKIC8qCiAgKiBMZXRzIHNlZSB3aGF0IGVsc2Ugd2UgbmVlZCB0byBkbyBoZXJlLiBTZXQgdXAgc3AsIGdwPwpAQCAtMTkzLDkgKzE5Miw5IEBACiAJYXRvbWljX2luYygmbm1pZWRfY3B1cyk7CiAjZW5kaWYKIAkvKgotCSAqIFVzZSBlbnRlcl9wYW5pY19tb2RlIHRvIGFsbG93IG9ubHkgMSBjcHUgdG8gcHJvY2VlZAorCSAqIE9ubHkgYWxsb3cgMSBjcHUgdG8gcHJvY2VlZAogCSAqLwotCWVudGVyX3BhbmljX21vZGUoKTsKKwlhcmNoX3NwaW5fbG9jaygmbm1pX2xvY2spOwogCiAjaWZkZWYgUkVBTF9OTUlfU0lHTkFMCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKaW5kZXggNWMyYmYxMS4uZDhiNjUyMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKQEAgLTUxMiwxMCArNTEyLDYgQEAKIAkJCQkibGV2ZWwiKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgQ1JJTUVfR0JFMF9JUlEgLi4uIENSSU1FX0dCRTNfSVJROgotCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAotCQkJCSZjcmltZV9lZGdlX2ludGVycnVwdCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotCQkJYnJlYWs7CiAJCWNhc2UgQ1JJTUVfQ1BVRVJSX0lSUToKIAkJY2FzZSBDUklNRV9NRU1FUlJfSVJROgogCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLApAQCAtNTIzLDEyICs1MTksOSBAQAogCQkJCSJsZXZlbCIpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBDUklNRV9HQkUwX0lSUSAuLi4gQ1JJTUVfR0JFM19JUlE6CiAJCWNhc2UgQ1JJTUVfUkVfRU1QVFlfRV9JUlEgLi4uIENSSU1FX1JFX0lETEVfRV9JUlE6CiAJCWNhc2UgQ1JJTUVfU09GVDBfSVJRIC4uLiBDUklNRV9TT0ZUMl9JUlE6Ci0JCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCi0JCQkJJmNyaW1lX2VkZ2VfaW50ZXJydXB0LCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7Ci0JCQlicmVhazsKLQogCQljYXNlIENSSU1FX1ZJQ0VfSVJROgogCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAogCQkJCSZjcmltZV9lZGdlX2ludGVycnVwdCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCmluZGV4IDQwNzAyNjguLjA2ZTI1ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKQEAgLTczLDE0ICs3MywxNCBAQAogLyogU3RvcmUgdGhlIENQVSBpZCAobm90IHRoZSBsb2dpY2FsIG51bWJlcikgKi8KIGludCBiY20xNDgwX2lycV9vd25lcltCQ00xNDgwX05SX0lSUVNdOwogCi1ERUZJTkVfU1BJTkxPQ0soYmNtMTQ4MF9pbXJfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhiY20xNDgwX2ltcl9sb2NrKTsKIAogdm9pZCBiY20xNDgwX21hc2tfaXJxKGludCBjcHUsIGludCBpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgaGxfc3BhY2luZzsKIAl1NjQgY3VyX2ludHM7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOwogCWhsX3NwYWNpbmcgPSAwOwogCWlmICgoaXJxID49IEJDTTE0ODBfTlJfSVJRU19IQUxGKSAmJiAoaXJxIDw9IEJDTTE0ODBfTlJfSVJRUykpIHsKIAkJaGxfc3BhY2luZyA9IEJDTTE0ODBfSU1SX0hMX1NQQUNJTkc7CkBAIC04OSw3ICs4OSw3IEBACiAJY3VyX2ludHMgPSBfX19fcmF3X3JlYWRxKElPQUREUihBX0JDTTE0ODBfSU1SX01BUFBFUihjcHUpICsgUl9CQ00xNDgwX0lNUl9JTlRFUlJVUFRfTUFTS19IICsgaGxfc3BhY2luZykpOwogCWN1cl9pbnRzIHw9ICgoKHU2NCkgMSkgPDwgaXJxKTsKIAlfX19fcmF3X3dyaXRlcShjdXJfaW50cywgSU9BRERSKEFfQkNNMTQ4MF9JTVJfTUFQUEVSKGNwdSkgKyBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9NQVNLX0ggKyBobF9zcGFjaW5nKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20xNDgwX2ltcl9sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgYmNtMTQ4MF91bm1hc2tfaXJxKGludCBjcHUsIGludCBpcnEpCkBAIC05Nyw3ICs5Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFncywgaGxfc3BhY2luZzsKIAl1NjQgY3VyX2ludHM7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOwogCWhsX3NwYWNpbmcgPSAwOwogCWlmICgoaXJxID49IEJDTTE0ODBfTlJfSVJRU19IQUxGKSAmJiAoaXJxIDw9IEJDTTE0ODBfTlJfSVJRUykpIHsKIAkJaGxfc3BhY2luZyA9IEJDTTE0ODBfSU1SX0hMX1NQQUNJTkc7CkBAIC0xMDYsNyArMTA2LDcgQEAKIAljdXJfaW50cyA9IF9fX19yYXdfcmVhZHEoSU9BRERSKEFfQkNNMTQ4MF9JTVJfTUFQUEVSKGNwdSkgKyBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9NQVNLX0ggKyBobF9zcGFjaW5nKSk7CiAJY3VyX2ludHMgJj0gfigoKHU2NCkgMSkgPDwgaXJxKTsKIAlfX19fcmF3X3dyaXRlcShjdXJfaW50cywgSU9BRERSKEFfQkNNMTQ4MF9JTVJfTUFQUEVSKGNwdSkgKyBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9NQVNLX0ggKyBobF9zcGFjaW5nKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20xNDgwX2ltcl9sb2NrLCBmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0xMjMsNyArMTIzLDcgQEAKIAljcHUgPSBjcHVfbG9naWNhbF9tYXAoaSk7CiAKIAkvKiBQcm90ZWN0IGFnYWluc3Qgb3RoZXIgYWZmaW5pdHkgY2hhbmdlcnMgYW5kIElNUiBtYW5pcHVsYXRpb24gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOwogCiAJLyogU3dpenpsZSBlYWNoIENQVSdzIElNUiAoYnV0IGxlYXZlIHRoZSBJUCBzZWxlY3Rpb24gYWxvbmUpICovCiAJb2xkX2NwdSA9IGJjbTE0ODBfaXJxX293bmVyW2lycV07CkBAIC0xNDgsNyArMTQ4LDcgQEAKIAkJCV9fX19yYXdfd3JpdGVxKGN1cl9pbnRzLCBJT0FERFIoQV9CQ00xNDgwX0lNUl9NQVBQRVIoY3B1KSArIFJfQkNNMTQ4MF9JTVJfSU5URVJSVVBUX01BU0tfSCArIChrKkJDTTE0ODBfSU1SX0hMX1NQQUNJTkcpKSk7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20xNDgwX2ltcl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKaW5kZXggMTVlYTc3OC4uZWQyNDUzZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKaW5kZXggNWU3ZjIwMS4uYWI0NGEyZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKQEAgLTcyLDIwICs3MiwyMCBAQAogLyogU3RvcmUgdGhlIENQVSBpZCAobm90IHRoZSBsb2dpY2FsIG51bWJlcikgKi8KIGludCBzYjEyNTBfaXJxX293bmVyW1NCMTI1MF9OUl9JUlFTXTsKIAotREVGSU5FX1NQSU5MT0NLKHNiMTI1MF9pbXJfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhzYjEyNTBfaW1yX2xvY2spOwogCiB2b2lkIHNiMTI1MF9tYXNrX2lycShpbnQgY3B1LCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTY0IGN1cl9pbnRzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CiAJY3VyX2ludHMgPSBfX19fcmF3X3JlYWRxKElPQUREUihBX0lNUl9NQVBQRVIoY3B1KSArCiAJCQkJCVJfSU1SX0lOVEVSUlVQVF9NQVNLKSk7CiAJY3VyX2ludHMgfD0gKCgodTY0KSAxKSA8PCBpcnEpOwogCV9fX19yYXdfd3JpdGVxKGN1cl9pbnRzLCBJT0FERFIoQV9JTVJfTUFQUEVSKGNwdSkgKwogCQkJCQlSX0lNUl9JTlRFUlJVUFRfTUFTSykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBzYjEyNTBfdW5tYXNrX2lycShpbnQgY3B1LCBpbnQgaXJxKQpAQCAtOTMsMTMgKzkzLDEzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1NjQgY3VyX2ludHM7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKIAljdXJfaW50cyA9IF9fX19yYXdfcmVhZHEoSU9BRERSKEFfSU1SX01BUFBFUihjcHUpICsKIAkJCQkJUl9JTVJfSU5URVJSVVBUX01BU0spKTsKIAljdXJfaW50cyAmPSB+KCgodTY0KSAxKSA8PCBpcnEpOwogCV9fX19yYXdfd3JpdGVxKGN1cl9pbnRzLCBJT0FERFIoQV9JTVJfTUFQUEVSKGNwdSkgKwogCQkJCQlSX0lNUl9JTlRFUlJVUFRfTUFTSykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTExNSw3ICsxMTUsNyBAQAogCWNwdSA9IGNwdV9sb2dpY2FsX21hcChpKTsKIAogCS8qIFByb3RlY3QgYWdhaW5zdCBvdGhlciBhZmZpbml0eSBjaGFuZ2VycyBhbmQgSU1SIG1hbmlwdWxhdGlvbiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOwogCiAJLyogU3dpenpsZSBlYWNoIENQVSdzIElNUiAoYnV0IGxlYXZlIHRoZSBJUCBzZWxlY3Rpb24gYWxvbmUpICovCiAJb2xkX2NwdSA9IHNiMTI1MF9pcnFfb3duZXJbaXJxXTsKQEAgLTEzNyw3ICsxMzcsNyBAQAogCQlfX19fcmF3X3dyaXRlcShjdXJfaW50cywgSU9BRERSKEFfSU1SX01BUFBFUihjcHUpICsKIAkJCQkJUl9JTVJfSU5URVJSVVBUX01BU0spKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3JtMjAwLmMgYi9hcmNoL21pcHMvc25pL3JtMjAwLmMKaW5kZXggNDZmMDA2OS4uOTBjNTU4ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9ybTIwMC5jCisrKyBiL2FyY2gvbWlwcy9zbmkvcm0yMDAuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgKiByZWFkYi93cml0ZWIgdG8gYWNjZXNzIHRoZW0KICAqLwogCi1ERUZJTkVfU1BJTkxPQ0soc25pX3JtMjAwX2k4MjU5QV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHNuaV9ybTIwMF9pODI1OUFfbG9jayk7CiAjZGVmaW5lIFBJQ19DTUQgICAgMHgwMAogI2RlZmluZSBQSUNfSU1SICAgIDB4MDEKICNkZWZpbmUgUElDX0lTUiAgICBQSUNfQ01ECkBAIC0xNjEsMTMgKzE2MSwxMyBAQAogCiAJaXJxIC09IFJNMjAwX0k4MjU5QV9JUlFfQkFTRTsKIAltYXNrID0gMSA8PCBpcnE7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CiAJcm0yMDBfY2FjaGVkX2lycV9tYXNrIHw9IG1hc2s7CiAJaWYgKGlycSAmIDgpCiAJCXdyaXRlYihjYWNoZWRfc2xhdmVfbWFzaywgcm0yMDBfcGljX3NsYXZlICsgUElDX0lNUik7CiAJZWxzZQogCQl3cml0ZWIoY2FjaGVkX21hc3Rlcl9tYXNrLCBybTIwMF9waWNfbWFzdGVyICsgUElDX0lNUik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBzbmlfcm0yMDBfZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTc3LDEzICsxNzcsMTMgQEAKIAogCWlycSAtPSBSTTIwMF9JODI1OUFfSVJRX0JBU0U7CiAJbWFzayA9IH4oMSA8PCBpcnEpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOwogCXJtMjAwX2NhY2hlZF9pcnFfbWFzayAmPSBtYXNrOwogCWlmIChpcnEgJiA4KQogCQl3cml0ZWIoY2FjaGVkX3NsYXZlX21hc2ssIHJtMjAwX3BpY19zbGF2ZSArIFBJQ19JTVIpOwogCWVsc2UKIAkJd3JpdGViKGNhY2hlZF9tYXN0ZXJfbWFzaywgcm0yMDBfcGljX21hc3RlciArIFBJQ19JTVIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc25pX3JtMjAwX2k4MjU5QV9pcnFfcmVhbCh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMjE2LDcgKzIxNiw3IEBACiAKIAlpcnEgLT0gUk0yMDBfSTgyNTlBX0lSUV9CQVNFOwogCWlycW1hc2sgPSAxIDw8IGlycTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAkvKgogCSAqIExpZ2h0d2VpZ2h0IHNwdXJpb3VzIElSUSBkZXRlY3Rpb24uIFdlIGRvIG5vdCB3YW50CiAJICogdG8gb3ZlcmRvIHNwdXJpb3VzIElSUSBoYW5kbGluZyAtIGl0J3MgdXN1YWxseSBhIHNpZ24KQEAgLTI0Nyw3ICsyNDcsNyBAQAogCQl3cml0ZWIoY2FjaGVkX21hc3Rlcl9tYXNrLCBybTIwMF9waWNfbWFzdGVyICsgUElDX0lNUik7CiAJCXdyaXRlYigweDYwK2lycSwgcm0yMDBfcGljX21hc3RlciArIFBJQ19DTUQpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuOwogCiBzcHVyaW91c184MjU5QV9pcnE6CkBAIC0yOTgsNyArMjk4LDcgQEAKIHsKIAlpbnQgaXJxOwogCi0Jc3Bpbl9sb2NrKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2spOworCXJhd19zcGluX2xvY2soJnNuaV9ybTIwMF9pODI1OUFfbG9jayk7CiAKIAkvKiBQZXJmb3JtIGFuIGludGVycnVwdCBhY2tub3dsZWRnZSBjeWNsZSBvbiBjb250cm9sbGVyIDEuICovCiAJd3JpdGViKDB4MEMsIHJtMjAwX3BpY19tYXN0ZXIgKyBQSUNfQ01EKTsJLyogcHJlcGFyZSBmb3IgcG9sbCAqLwpAQCAtMzI1LDcgKzMyNSw3IEBACiAJCQlpcnEgPSAtMTsKIAl9CiAKLQlzcGluX3VubG9jaygmc25pX3JtMjAwX2k4MjU5QV9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnNuaV9ybTIwMF9pODI1OUFfbG9jayk7CiAKIAlyZXR1cm4gbGlrZWx5KGlycSA+PSAwKSA/IGlycSArIFJNMjAwX0k4MjU5QV9JUlFfQkFTRSA6IGlycTsKIH0KQEAgLTMzNCw3ICszMzQsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCXdyaXRlYigweGZmLCBybTIwMF9waWNfbWFzdGVyICsgUElDX0lNUik7CiAJd3JpdGViKDB4ZmYsIHJtMjAwX3BpY19zbGF2ZSArIFBJQ19JTVIpOwpAQCAtMzUyLDcgKzM1Miw3IEBACiAJd3JpdGViKGNhY2hlZF9tYXN0ZXJfbWFzaywgcm0yMDBfcGljX21hc3RlciArIFBJQ19JTVIpOwogCXdyaXRlYihjYWNoZWRfc2xhdmVfbWFzaywgcm0yMDBfcGljX3NsYXZlICsgUElDX0lNUik7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC00MDQsNyArNDA0LDcgQEAKIAlpZiAoIXJtMjAwX3BpY19tYXN0ZXIpCiAJCXJldHVybjsKIAlybTIwMF9waWNfc2xhdmUgPSBpb3JlbWFwX25vY2FjaGUoMHgxNjAwMDBhMCwgNCk7Ci0JaWYgKCFybTIwMF9waWNfbWFzdGVyKSB7CisJaWYgKCFybTIwMF9waWNfc2xhdmUpIHsKIAkJaW91bm1hcChybTIwMF9waWNfbWFzdGVyKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYyBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYwppbmRleCBlMjc4MDliLi43MTc0ZDgzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jCkBAIC0zOTksMTEgKzM5OSw2IEBACiAJcmV0dXJuIHR4eDlfc3lzdGVtX3R5cGU7CiB9CiAKLWNoYXIgKiBfX2luaXQgcHJvbV9nZXRjbWRsaW5lKHZvaWQpCi17Ci0JcmV0dXJuICYoYXJjc19jbWRsaW5lWzBdKTsKLX0KLQogY29uc3QgY2hhciAqX19pbml0IHByb21fZ2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJY29uc3QgczMyICpzdHI7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHh4OS9qbXIzOTI3L3NldHVwLmMgYi9hcmNoL21pcHMvdHh4OS9qbXIzOTI3L3NldHVwLmMKaW5kZXggMjVlNTBhNy4uMzIwNmY3NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvam1yMzkyNy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy90eHg5L2ptcjM5Mjcvc2V0dXAuYwpAQCAtNjcsOCArNjcsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgam1yMzkyN19tZW1fc2V0dXAodm9pZCkKIHsKLQljaGFyICphcmdwdHI7Ci0KIAlzZXRfaW9fcG9ydF9iYXNlKEpNUjM5MjdfUE9SVF9CQVNFICsgSk1SMzkyN19QQ0lJTyk7CiAKIAlfbWFjaGluZV9yZXN0YXJ0ID0gam1yMzkyN19tYWNoaW5lX3Jlc3RhcnQ7CkBAIC05NywxMSArOTUsNiBAQAogCWptcjM5MjdfYm9hcmRfaW5pdCgpOwogCiAJdHgzOTI3X3Npb19pbml0KDAsIDEgPDwgMSk7IC8qIGNoMTogbm9DVFMgKi8KLSNpZmRlZiBDT05GSUdfU0VSSUFMX1RYWDlfQ09OU09MRQotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCWlmICghc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9IikpCi0JCXN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMSwxMTUyMDAiKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgam1yMzkyN19wY2lfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L3JidHg0OTI3L3NldHVwLmMgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkyNy9zZXR1cC5jCmluZGV4IGVlNDY4ZWEuLmIxNWFkZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L3JidHg0OTI3L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mjcvc2V0dXAuYwpAQCAtMTg3LDggKzE4Nyw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCByYnR4NDkyN19tZW1fc2V0dXAodm9pZCkKIHsKLQljaGFyICphcmdwdHI7Ci0KIAlpZiAoVFg0OTI3X1JFVl9QQ09ERSgpID09IDB4NDkyNykgewogCQlyYnR4NDkyN19jbG9ja19pbml0KCk7CiAJCXR4NDkyN19zZXR1cCgpOwpAQCAtMjEzLDExICsyMTEsNiBAQAogCWdwaW9fZGlyZWN0aW9uX291dHB1dCgxNSwgMSk7CiAKIAl0eDQ5Mjdfc2lvX2luaXQoMCwgMCk7Ci0jaWZkZWYgQ09ORklHX1NFUklBTF9UWFg5X0NPTlNPTEUKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQlpZiAoIXN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpKQotCQlzdHJjYXQoYXJncHRyLCAiIGNvbnNvbGU9dHR5UzAsMzg0MDAiKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcmJ0eDQ5MjdfY2xvY2tfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mzgvc2V0dXAuYyBiL2FyY2gvbWlwcy90eHg5L3JidHg0OTM4L3NldHVwLmMKaW5kZXggZDY2NTA5Yi4uZDZlNzBkYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mzgvc2V0dXAuYworKysgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOC9zZXR1cC5jCkBAIC0xNTMsNyArMTUzLDYgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCByYnR4NDkzOF9tZW1fc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcGNmZzsKLQljaGFyICphcmdwdHI7CiAKIAlpZiAodHh4OV9tYXN0ZXJfY2xvY2sgPT0gMCkKIAkJdHh4OV9tYXN0ZXJfY2xvY2sgPSAyNTAwMDAwMDsgLyogMjVNSHogKi8KQEAgLTE2OCwxMSArMTY3LDYgQEAKICNlbmRpZgogCiAJdHg0OTM4X3Npb19pbml0KDczNzI4MDAsIDApOwotI2lmZGVmIENPTkZJR19TRVJJQUxfVFhYOV9DT05TT0xFCi0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JaWYgKCFzdHJzdHIoYXJncHRyLCAiY29uc29sZT0iKSkKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDM4NDAwIik7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19UT1NISUJBX1JCVFg0OTM4X01QTEVYX1BJTzU4XzYxCiAJcHJfaW5mbygiUElPU0VMOiBkaXNhYmxpbmcgYm90aCBBVEEgYW5kIE5BTkQgc2VsZWN0aW9uXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDZkYzMwZmMuLjE2ZDg4NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNDY2LDcgKzQ2Niw3IEBACiAgKiB0aGUga2VybmVsIHBhZ2UgdGFibGVzIGNvbnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBieSB0bGItbW4xMDMwMC5TCiAgKi8KIGV4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKTsKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCk7CiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9tbS9tbXUtY29udGV4dC5jIGIvYXJjaC9tbjEwMzAwL21tL21tdS1jb250ZXh0LmMKaW5kZXggMzFjOWQyNy4uMzZiYTAyMSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL21tL21tdS1jb250ZXh0LmMKKysrIGIvYXJjaC9tbjEwMzAwL21tL21tdS1jb250ZXh0LmMKQEAgLTUxLDkgKzUxLDEwIEBACiAvKgogICogcHJlZW1wdGl2ZWx5IHNldCBhIFRMQiBlbnRyeQogICovCi12b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQordm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQogewogCXVuc2lnbmVkIGxvbmcgcHRldSwgcHRlbCwgY254LCBmbGFnczsKKwlwdGVfdCBwdGUgPSAqcHRlcDsKIAogCWFkZHIgJj0gUEFHRV9NQVNLOwogCXB0ZWwgPSBwdGVfdmFsKHB0ZSkgJiB+KHhQVEVMX1VOVVNFRDEgfCB4UFRFTF9VTlVTRUQyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWFzYjIzMDUuYyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWFzYjIzMDUuYwppbmRleCA3OGNkMTM0Li5kNjExOWI4IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS1hc2IyMzA1LmMKKysrIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2ktYXNiMjMwNS5jCkBAIC0zMSw5ICszMSwxMSBAQAogICogYnV0IHdlIHdhbnQgdG8gdHJ5IHRvIGF2b2lkIGFsbG9jYXRpbmcgYXQgMHgyOTAwLTB4MmJmZgogICogd2hpY2ggbWlnaHQgaGF2ZSBiZSBtaXJyb3JlZCBhdCAweDAxMDAtMHgwM2ZmLi4KICAqLwotdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCityZXNvdXJjZV9zaXplX3QgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogeworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CisKICNpZiAwCiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRhdGE7CiAKQEAgLTQ3LDE0ICs0OSwxMCBAQAogCSAgICAgICApOwogI2VuZGlmCiAKLQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJdW5zaWduZWQgbG9uZyBzdGFydCA9IHJlcy0+c3RhcnQ7CisJaWYgKChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgJiYgKHN0YXJ0ICYgMHgzMDApKQorCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKIAotCQlpZiAoc3RhcnQgJiAweDMwMCkgewotCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCX0KLQl9CisJcmV0dXJuIHN0YXJ0OwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLmMgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS5jCmluZGV4IDJjYjdlNzUuLjZkODcyMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLmMKKysrIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2kuYwpAQCAtMzMxLDEyICszMzEsMTAgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGlzX3ZhbGlkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZHgpCiB7CiAJdW5zaWduZWQgaW50IGksIHR5cGVfbWFzayA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKmRldnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOworCXN0cnVjdCByZXNvdXJjZSAqZGV2ciA9ICZkZXYtPnJlc291cmNlW2lkeF0sICpidXNyOwogCiAJaWYgKGRldi0+YnVzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQkJc3RydWN0IHJlc291cmNlICpidXNyID0gZGV2LT5idXMtPnJlc291cmNlW2ldOwotCisJCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoZGV2LT5idXMsIGJ1c3IsIGkpIHsKIAkJCWlmICghYnVzciB8fCAoYnVzci0+ZmxhZ3MgXiBkZXZyLT5mbGFncykgJiB0eXBlX21hc2spCiAJCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnCmluZGV4IDUyNGQ5MzUuLmYzODhkYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWcKKysrIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwpAQCAtMTgsNyArMTgsNiBAQAogCXNlbGVjdCBCVUcKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwogCXNlbGVjdCBHRU5FUklDX0FUT01JQzY0IGlmICE2NEJJVAotCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJaGVscAogCSAgVGhlIFBBLVJJU0MgbWljcm9wcm9jZXNzb3IgaXMgZGVzaWduZWQgYnkgSGV3bGV0dC1QYWNrYXJkIGFuZCB1c2VkCiAJICBpbiBtYW55IG9mIHRoZWlyIHdvcmtzdGF0aW9ucyAmIHNlcnZlcnMgKEhQOTAwMCA3MDAgYW5kIDgwMCBzZXJpZXMsCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggN2E3M2I2MS4uNDc3Mjc3NyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMzgsNiArMzgsMTggQEAKIAogI2RlZmluZSBmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlKHN0YXJ0LHNpemUpIFwKIAlmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlX2FzbSgoc3RhcnQpLCAoc3RhcnQpKyhzaXplKSk7CisvKiB2bWFwIHJhbmdlIGZsdXNoZXMgYW5kIGludmFsaWRhdGVzLiAgQXJjaGl0ZWN0dXJhbGx5LCB3ZSBkb24ndCBuZWVkCisgKiB0aGUgaW52YWxpZGF0ZSwgYmVjYXVzZSB0aGUgQ1BVIHNob3VsZCByZWZ1c2UgdG8gc3BlY3VsYXRlIG9uY2UgYW4KKyAqIGFyZWEgaGFzIGJlZW4gZmx1c2hlZCwgc28gaW52YWxpZGF0ZSBpcyBsZWZ0IGVtcHR5ICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqdmFkZHIsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKKworCWZsdXNoX2tlcm5lbF9kY2FjaGVfcmFuZ2VfYXNtKHN0YXJ0LCBzdGFydCArIHNpemUpOworfQorc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqdmFkZHIsIGludCBzaXplKQoreworfQogCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBhMjdkMmUyLi4wMWMxNTAzIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC00MTAsNyArNDEwLDcgQEAKIAogI2RlZmluZSBQR19kY2FjaGVfZGlydHkgICAgICAgICBQR19hcmNoXzEKIAotZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QpOworZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7CiAKIC8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYwppbmRleCBiNmVkMzRkLi4xMDU0YmFhIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYwpAQCAtNjgsOSArNjgsOSBAQAogRVhQT1JUX1NZTUJPTChmbHVzaF9jYWNoZV9hbGxfbG9jYWwpOwogCiB2b2lkCi11cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKK3VwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdGVfcGFnZShwdGUpOworCXN0cnVjdCBwYWdlICpwYWdlID0gcHRlX3BhZ2UoKnB0ZXApOwogCiAJaWYgKHBmbl92YWxpZChwYWdlX3RvX3BmbihwYWdlKSkgJiYgcGFnZV9tYXBwaW5nKHBhZ2UpICYmCiAJICAgIHRlc3RfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3BjaS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BjaS5jCmluZGV4IGY3MDY0YWIuLjM4MzcyZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGNpLmMKQEAgLTE4LDcgKzE4LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vY2FjaGUuaD4JCS8qIGZvciBMMV9DQUNIRV9CWVRFUyAqLwogI2luY2x1ZGUgPGFzbS9zdXBlcmlvLmg+CiAKICNkZWZpbmUgREVCVUdfUkVTT1VSQ0VTIDAKQEAgLTEyMyw2ICsxMjIsMTAgQEAKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJwY2lfYmlvcyAhPSBOVUxMIGJ1dCBpbml0KCkgaXMhXG4iKTsKIAl9CisKKwkvKiBTZXQgdGhlIENMUyBmb3IgUENJIGFzIGVhcmx5IGFzIHBvc3NpYmxlLiAqLworCXBjaV9jYWNoZV9saW5lX3NpemUgPSBwY2lfZGZsX2NhY2hlX2xpbmVfc2l6ZTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNzEsNyArMTc0LDcgQEAKIAkqKiB1cHBlciBieXRlIGlzIFBDSV9MQVRFTkNZX1RJTUVSLgogCSovCiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwKLQkJCQkoMHg4MCA8PCA4KSB8IChMMV9DQUNIRV9CWVRFUyAvIHNpemVvZih1MzIpKSk7CisJCQkgICAgICAoMHg4MCA8PCA4KSB8IHBjaV9jYWNoZV9saW5lX3NpemUpOwogfQogCiAKQEAgLTI1NCwxMCArMjU3LDEwIEBACiAgKiBTaW5jZSB3ZSBhcmUganVzdCBjaGVja2luZyBjYW5kaWRhdGVzLCBkb24ndCB1c2UgYW55IGZpZWxkcyBvdGhlcgogICogdGhhbiByZXMtPnN0YXJ0LgogICovCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCityZXNvdXJjZV9zaXplX3QgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWdubWVudCkKIHsKLQlyZXNvdXJjZV9zaXplX3QgbWFzaywgYWxpZ247CisJcmVzb3VyY2Vfc2l6ZV90IG1hc2ssIGFsaWduLCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAlEQkdfUkVTKCJwY2liaW9zX2FsaWduX3Jlc291cmNlKCVzLCAoJXApIFslbHgsJWx4XS8leCwgMHglbHgsIDB4JWx4KVxuIiwKIAkJcGNpX25hbWUoKChzdHJ1Y3QgcGNpX2RldiAqKSBkYXRhKSksCkBAIC0yNjksMTAgKzI3MiwxMCBAQAogCiAJLyogQWxpZ24gdG8gbGFyZ2VzdCBvZiBNSU4gb3IgaW5wdXQgc2l6ZSAqLwogCW1hc2sgPSBtYXgoYWxpZ25tZW50LCBhbGlnbikgLSAxOwotCXJlcy0+c3RhcnQgKz0gbWFzazsKLQlyZXMtPnN0YXJ0ICY9IH5tYXNrOworCXN0YXJ0ICs9IG1hc2s7CisJc3RhcnQgJj0gfm1hc2s7CiAKLQkvKiBUaGUgY2FsbGVyIHVwZGF0ZXMgdGhlIGVuZCBmaWVsZCwgd2UgZG9uJ3QuICAqLworCXJldHVybiBzdGFydDsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZmIzN2FjNS4uMzVjODI3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYwpAQCAtNDY4LDcgKzQ2OCw5IEBACiAJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKIAlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCi0JdHJhY2Vob29rX3NpZ25hbF9oYW5kbGVyKHNpZywgaW5mbywga2EsIHJlZ3MsIDApOworCXRyYWNlaG9va19zaWduYWxfaGFuZGxlcihzaWcsIGluZm8sIGthLCByZWdzLCAKKwkJdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkgfHwKKwkJdGVzdF90aHJlYWRfZmxhZyhUSUZfQkxPQ0tTVEVQKSk7CiAKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggYmEzOTQ4Yy4uMTU1ZDU3MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTU4LDcgKzU4LDcgQEAKIAogY29uZmlnIE5SX0lSUVMKIAlpbnQgIk51bWJlciBvZiB2aXJ0dWFsIGludGVycnVwdCBudW1iZXJzIgotCXJhbmdlIDMyIDUxMgorCXJhbmdlIDMyIDMyNzY4CiAJZGVmYXVsdCAiNTEyIgogCWhlbHAKIAkgIFRoaXMgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHZpcnR1YWwgaW50ZXJydXB0IG51bWJlcnMgdGhlIGtlcm5lbApAQCAtMTczLDYgKzE3Myw3IEBACiAKIGNvbmZpZyBPRgogCWRlZl9ib29sIHkKKwlzZWxlY3QgT0ZfRkxBVFRSRUUKIAogY29uZmlnIFBQQ19VREJHXzE2NTUwCiAJYm9vbApAQCAtMjQwLDYgKzI0MSwzMyBAQAogY29uZmlnIEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCiAJZGVmX2Jvb2wgeQogCitjb25maWcgUFBDX0FEVl9ERUJVR19SRUdTCisJYm9vbAorCWRlcGVuZHMgb24gNDB4IHx8IEJPT0tFCisJZGVmYXVsdCB5CisKK2NvbmZpZyBQUENfQURWX0RFQlVHX0lBQ1MKKwlpbnQKKwlkZXBlbmRzIG9uIFBQQ19BRFZfREVCVUdfUkVHUworCWRlZmF1bHQgNCBpZiA0NHgKKwlkZWZhdWx0IDIKKworY29uZmlnIFBQQ19BRFZfREVCVUdfREFDUworCWludAorCWRlcGVuZHMgb24gUFBDX0FEVl9ERUJVR19SRUdTCisJZGVmYXVsdCAyCisKK2NvbmZpZyBQUENfQURWX0RFQlVHX0RWQ1MKKwlpbnQKKwlkZXBlbmRzIG9uIFBQQ19BRFZfREVCVUdfUkVHUworCWRlZmF1bHQgMiBpZiA0NHgKKwlkZWZhdWx0IDAKKworY29uZmlnIFBQQ19BRFZfREVCVUdfREFDX1JBTkdFCisJYm9vbAorCWRlcGVuZHMgb24gUFBDX0FEVl9ERUJVR19SRUdTICYmIDQ0eAorCWRlZmF1bHQgeQorCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAogc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FyY2hlcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXJjaGVzLmR0cwppbmRleCA0MTRlZjhiLi4zMGY0MTIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXJjaGVzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXJjaGVzLmR0cwpAQCAtNjAsNiArNjAsNyBAQAogCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsKIAkJCWRjci1jb250cm9sbGVyOwogCQkJZGNyLWFjY2Vzcy1tZXRob2QgPSAibmF0aXZlIjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyQzA+OwogCQl9OwogCX07CiAKQEAgLTE0Niw2ICsxNDcsMTMgQEAKIAkJCWRjci1yZWcgPSA8MHgwMTAgMHgwMDI+OwogCQl9OwogCisJCUNSWVBUTzogY3J5cHRvQDE4MDAwMCB7CisJCQljb21wYXRpYmxlID0gImFtY2MscHBjNDYwZ3QtY3J5cHRvIiwgImFtY2MscHBjNHh4LWNyeXB0byI7CisJCQlyZWcgPSA8NCAweDAwMTgwMDAwIDB4ODA0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHg0PjsKKwkJfTsKKwogCQlNQUwwOiBtY21hbCB7CiAJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00NjBndCIsICJpYm0sbWNtYWwyIjsKIAkJCWRjci1yZWcgPSA8MHgxODAgMHgwNjI+OwpAQCAtMjc0LDYgKzI4Miw3IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CiAJCQkJcGh5LW1vZGUgPSAic2dtaWkiOwogCQkJCXBoeS1tYXAgPSA8MHhmZmZmZmZmZj47CiAJCQkJZ3Bjcy1hZGRyZXNzID0gPDB4MDAwMDAwMGE+OwpAQCAtMzAyLDYgKzMxMSw3IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CiAJCQkJcGh5LW1vZGUgPSAic2dtaWkiOwogCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CiAJCQkJZ3Bjcy1hZGRyZXNzID0gPDB4MDAwMDAwMGI+OwpAQCAtMzMxLDYgKzM0MSw4IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CisJCQkJdHgtZmlmby1zaXplLWdpZ2UgPSA8MTYzODQ+OyAvKiBlbWFjMiYzIG9ubHkgKi8KIAkJCQlwaHktbW9kZSA9ICJzZ21paSI7CiAJCQkJcGh5LW1hcCA9IDwweDAwMDAwMDAxPjsKIAkJCQlncGNzLWFkZHJlc3MgPSA8MHgwMDAwMDAwQz47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3BwYzlhLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfcHBjOWEuZHRzCmluZGV4IGM4NjExNGUuLjk3N2YyNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfcHBjOWEuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfcHBjOWEuZHRzCkBAIC0zNDEsNiArMzQxLDIyIEBACiAJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CiAJCX07CiAKKwkJbXNpQDQxNjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKIAkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWd1dHMiOwogCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cwppbmRleCA4MjBjMmIzLi44ZTRlZmZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzMxMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmMzMTAuZHRzCkBAIC0zMiw2ICszMiw3IEBACiAJCXNlcmlhbDAgPSAmc2VyaWFsMDsKIAkJc2VyaWFsMSA9ICZzZXJpYWwxOwogCQlwY2kwID0gJnBjaTA7CisJCXBjaTEgPSAmcGNpMTsKIAl9OwogCiAJY3B1cyB7CkBAIC0zMzgsNiArMzM5LDIyIEBACiAJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CiAJCX07CiAKKwkJbXNpQDQxNjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKIAkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWd1dHMiOwogCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKQEAgLTM1OCw3ICszNzUsNyBAQAogCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJaW50ZXJydXB0cyA9IDwweDE4IDB4Mj47Ci0JCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmZjAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAkJCTB4MDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDAgMHgyCiAJCQkweDAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzCmluZGV4IDMwOTExYWQuLmJiNzA2MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMKQEAgLTc1LDE0ICs3NSw0OCBAQAogCQlpbnRlcnJ1cHRzID0gPDE5IDI+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAotCQlyYW5nZXMgPSA8MCAwIDB4ZmYwMDAwMDAgMHgwMTAwMDAwMCAgICAgLy8gMTZNQiBCb290IGZsYXNoCi0JCQkgIDEgMCAweGU4MDAwMDAwIDB4MDgwMDAwMDAgICAgIC8vIFBhZ2VkIEZsYXNoIDAKLQkJCSAgMiAwIDB4ZTAwMDAwMDAgMHgwODAwMDAwMCAgICAgLy8gUGFnZWQgRmxhc2ggMQotCQkJICAzIDAgMHhmYzEwMDAwMCAweDAwMDIwMDAwICAgICAvLyBOVlJBTQotCQkJICA0IDAgMHhmYzAwMDAwMCAweDAwMDA4MDAwICAgICAvLyBGUEdBCi0JCQkgIDUgMCAweGZjMDA4MDAwIDB4MDAwMDgwMDAgICAgIC8vIEFGSVggRlBHQQotCQkJICA2IDAgMHhmZDAwMDAwMCAweDAwODAwMDAwICAgICAvLyBJTyBGUEdBICg4LWJpdCkKLQkJCSAgNyAwIDB4ZmQ4MDAwMDAgMHgwMDgwMDAwMD47ICAgLy8gSU8gRlBHQSAoMzItYml0KQorCQlyYW5nZXMgPSA8MCAwIDB4ZmYwMDAwMDAgMHgwMTAwMDAwMAkvLyAxNk1CIEJvb3QgZmxhc2gKKwkJCSAgMSAwIDB4ZTgwMDAwMDAgMHgwODAwMDAwMAkvLyBQYWdlZCBGbGFzaCAwCisJCQkgIDIgMCAweGUwMDAwMDAwIDB4MDgwMDAwMDAJLy8gUGFnZWQgRmxhc2ggMQorCQkJICAzIDAgMHhmYzEwMDAwMCAweDAwMDIwMDAwCS8vIE5WUkFNCisJCQkgIDQgMCAweGZjMDAwMDAwIDB4MDAwMDgwMDAJLy8gRlBHQQorCQkJICA1IDAgMHhmYzAwODAwMCAweDAwMDA4MDAwCS8vIEFGSVggRlBHQQorCQkJICA2IDAgMHhmZDAwMDAwMCAweDAwODAwMDAwCS8vIElPIEZQR0EgKDgtYml0KQorCQkJICA3IDAgMHhmZDgwMDAwMCAweDAwODAwMDAwPjsJLy8gSU8gRlBHQSAoMzItYml0KQorCisJCS8qIGZsYXNoQDAsMCBpcyBhIG1pcnJvciBvZiBwYXJ0IG9mIHRoZSBtZW1vcnkgaW4gZmxhc2hAMSwwCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImdlZixzYmM2MTAtZmlybXdhcmUtbWlycm9yIiwgImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwIDB4MCAweDEwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDw0PjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiZmlybXdhcmUiOworCQkJCXJlZyA9IDwweDAgMHgxMDAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OworCQkqLworCisJCWZsYXNoQDEsMCB7CisJCQljb21wYXRpYmxlID0gImdlZixzYmM2MTAtcGFnZWQtZmxhc2giLCAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwweDEgMHgwIDB4ODAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDQ+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQlyZWcgPSA8MHgwIDB4NzgwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc4MDAwMDAgeworCQkJCWxhYmVsID0gImZpcm13YXJlIjsKKwkJCQlyZWcgPSA8MHg3ODAwMDAwIDB4ODAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OwogCiAJCW52cmFtQDMsMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJudnJhbSI7CkBAIC0zMDUsNiArMzM5LDIyIEBACiAJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CiAJCX07CiAKKwkJbXNpQDQxNjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKIAkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWd1dHMiOwogCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cwppbmRleCBmNmY2MTg5Li5kNjJhNGZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dsYWNpZXIuZHRzCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgQU1DQyBHbGFjaWVyICg0NjBHVCkKICAqCi0gKiBDb3B5cmlnaHQgMjAwOCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dApAQCAtNDIsNiArNDIsNyBAQAogCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsKIAkJCWRjci1jb250cm9sbGVyOwogCQkJZGNyLWFjY2Vzcy1tZXRob2QgPSAibmF0aXZlIjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyQzA+OwogCQl9OwogCX07CiAKQEAgLTEwNiw2ICsxMDcsMTYgQEAKIAkJZGNyLXJlZyA9IDwweDAwYyAweDAwMj47CiAJfTsKIAorCUwyQzA6IGwyYyB7CisJCWNvbXBhdGlibGUgPSAiaWJtLGwyLWNhY2hlLTQ2MGd0IiwgImlibSxsMi1jYWNoZSI7CisJCWRjci1yZWcgPSA8MHgwMjAgMHgwMDgJCS8qIEludGVybmFsIFNSQU0gRENSJ3MgKi8KKwkJCSAgIDB4MDMwIDB4MDA4PjsJLyogTDIgY2FjaGUgRENSJ3MgKi8KKwkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJCS8qIDMyIGJ5dGVzICovCisJCWNhY2hlLXNpemUgPSA8MjYyMTQ0PjsJCS8qIEwyLCAyNTZLICovCisJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQlpbnRlcnJ1cHRzID0gPDExIDE+OworCX07CisKIAlwbGIgewogCQljb21wYXRpYmxlID0gImlibSxwbGItNDYwZ3QiLCAiaWJtLHBsYjQiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKQEAgLTExOCw2ICsxMjksMTMgQEAKIAkJCWRjci1yZWcgPSA8MHgwMTAgMHgwMDI+OwogCQl9OwogCisJCUNSWVBUTzogY3J5cHRvQDE4MDAwMCB7CisJCQljb21wYXRpYmxlID0gImFtY2MscHBjNDYwZ3QtY3J5cHRvIiwgImFtY2MscHBjNHh4LWNyeXB0byI7CisJCQlyZWcgPSA8NCAweDAwMTgwMDAwIDB4ODA0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHg0PjsKKwkJfTsKKwogCQlNQUwwOiBtY21hbCB7CiAJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00NjBndCIsICJpYm0sbWNtYWwyIjsKIAkJCWRjci1yZWcgPSA8MHgxODAgMHgwNjI+OwpAQCAtMTg2LDYgKzIwNCwyOSBAQAogCQkJCQkJcmVnID0gPDB4MDNmYTAwMDAgMHgwMDA2MDAwMD47CiAJCQkJCX07CiAJCQkJfTsKKworCQkJCW5kZmNAMywwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJpYm0sbmRmYyI7CisJCQkJCXJlZyA9IDwweDAwMDAwMDAzIDB4MDAwMDAwMDAgMHgwMDAwMjAwMD47CisJCQkJCWNjciA9IDwweDAwMDAxMDAwPjsKKwkJCQkJYmFuay1zZXR0aW5ncyA9IDwweDgwMDAyMjIyPjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDE+OworCisJCQkJCW5hbmQgeworCQkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQkJCQkJcGFydGl0aW9uQDAgeworCQkJCQkJCWxhYmVsID0gInUtYm9vdCI7CisJCQkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDEwMDAwMD47CisJCQkJCQl9OworCQkJCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwM2YwMDAwMD47CisJCQkJCQl9OworCQkJCQl9OworCQkJCX07CiAJCQl9OwogCiAJCQlVQVJUMDogc2VyaWFsQGVmNjAwMzAwIHsKQEAgLTIzNyw2ICsyNzgsMjAgQEAKIAkJCQlyZWcgPSA8MHhlZjYwMDcwMCAweDAwMDAwMDE0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDB4MiAweDQ+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCXJ0Y0A2OCB7CisJCQkJCWNvbXBhdGlibGUgPSAic3RtLG00MXQ4MCI7CisJCQkJCXJlZyA9IDwweDY4PjsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMj47CisJCQkJCWludGVycnVwdHMgPSA8MHgxOSAweDg+OworCQkJCX07CisJCQkJc3R0bUA0OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYWQsYWQ3NDE0IjsKKwkJCQkJcmVnID0gPDB4NDg+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDE0IDB4OD47CisJCQkJfTsKIAkJCX07CiAKIAkJCUlJQzE6IGkyY0BlZjYwMDgwMCB7CkBAIC0yNzUsNyArMzMwLDcgQEAKIAogCQkJRU1BQzA6IGV0aGVybmV0QGVmNjAwZTAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNCI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMD47CiAJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwpAQCAtMjgzLDcgKzMzOCw3IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDEwIDB4NAogCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTQgMHg0PjsKLQkJCQlyZWcgPSA8MHhlZjYwMGUwMCAweDAwMDAwMDc0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMGUwMCAweDAwMDAwMGM0PjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MD47CkBAIC0zMDUsNyArMzYwLDcgQEAKIAogCQkJRU1BQzE6IGV0aGVybmV0QGVmNjAwZjAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNCI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMT47CiAJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwpAQCAtMzEzLDcgKzM2OCw3IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDExIDB4NAogCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTUgMHg0PjsKLQkJCQlyZWcgPSA8MHhlZjYwMGYwMCAweDAwMDAwMDc0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMGYwMCAweDAwMDAwMGM0PjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MT47CkBAIC0zMzYsNyArMzkxLDcgQEAKIAogCQkJRU1BQzI6IGV0aGVybmV0QGVmNjAxMTAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNCI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMj47CiAJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwpAQCAtMzQ0LDcgKzM5OSw3IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDEyIDB4NAogCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTYgMHg0PjsKLQkJCQlyZWcgPSA8MHhlZjYwMTEwMCAweDAwMDAwMDc0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMTEwMCAweDAwMDAwMGM0PjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8Mj47CkBAIC0zNjYsNyArNDIxLDcgQEAKIAogCQkJRU1BQzM6IGV0aGVybmV0QGVmNjAxMjAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNCI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMz47CiAJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwpAQCAtMzc0LDcgKzQyOSw3IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDEzIDB4NAogCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTcgMHg0PjsKLQkJCQlyZWcgPSA8MHhlZjYwMTIwMCAweDAwMDAwMDc0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMTIwMCAweDAwMDAwMGM0PjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8Mz47CkBAIC00MTQsNiArNDY5LDcgQEAKIAkJCSAqIGxhdGVyIGNhbm5vdCBiZSBjaGFuZ2VkCiAJCQkgKi8KIAkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MDAwMDAwMDAgMHg4MDAwMDAwMCAweDAwMDAwMDBkIDB4ODAwMDAwMDAgMHgwMDAwMDAwMCAweDgwMDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDBjIDB4MGVlMDAwMDAgMHgwMDAwMDAwMCAweDAwMTAwMDAwCiAJCQkJICAweDAxMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDBjIDB4MDgwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDEwMDAwPjsKIAogCQkJLyogSW5ib3VuZCAyR0IgcmFuZ2Ugc3RhcnRpbmcgYXQgMCAqLwpAQCAtNDQ0LDYgKzUwMCw3IEBACiAJCQkgKiBsYXRlciBjYW5ub3QgYmUgY2hhbmdlZAogCQkJICovCiAJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAwMDAwMDAwIDB4ODAwMDAwMDAgMHgwMDAwMDAwZSAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHg4MDAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwZiAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDEwMDAwMAogCQkJCSAgMHgwMTAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwZiAweDgwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAxMDAwMD47CiAKIAkJCS8qIEluYm91bmQgMkdCIHJhbmdlIHN0YXJ0aW5nIGF0IDAgKi8KQEAgLTQ4NSw2ICs1NDIsNyBAQAogCQkJICogbGF0ZXIgY2Fubm90IGJlIGNoYW5nZWQKIAkJCSAqLwogCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwMDAwMDAwMCAweDgwMDAwMDAwIDB4MDAwMDAwMGUgMHg4MDAwMDAwMCAweDAwMDAwMDAwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMGYgMHgwMDEwMDAwMCAweDAwMDAwMDAwIDB4MDAxMDAwMDAKIAkJCQkgIDB4MDEwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMGYgMHg4MDAxMDAwMCAweDAwMDAwMDAwIDB4MDAwMTAwMDA+OwogCiAJCQkvKiBJbmJvdW5kIDJHQiByYW5nZSBzdGFydGluZyBhdCAwICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rYXRtYWkuZHRzCmluZGV4IDhmMzQ1ZGU5Li44Y2YyYzBjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJCQljb21wYXRpYmxlID0gImlibSxvcGItNDQwc3BlIiwgImlibSxvcGItNDQwZ3AiLCAiaWJtLG9wYiI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJcmFuZ2VzID0gPDB4MDAwMDAwMDAgMHgwMDAwMDAwNCAweGUwMDAwMDAwIDB4MjAwMDAwMDA+OworCQkJcmFuZ2VzID0gPDB4ZTAwMDAwMDAgMHgwMDAwMDAwNCAweGUwMDAwMDAwIDB4MjAwMDAwMDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgekltYWdlICovCiAKIAkJCUVCQzA6IGViYyB7CkBAIC0xNjUsMTQgKzE2NSw0NyBAQAogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHpJbWFnZSAqLworCQkJCS8qIHJhbmdlcyBwcm9wZXJ0eSBpcyBzdXBwbGllZCBieSBVLUJvb3QgKi8KIAkJCQlpbnRlcnJ1cHRzID0gPDB4NSAweDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCisJCQkJbm9yX2ZsYXNoQDAsMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAxMDAwMDAwPjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCQlwYXJ0aXRpb25AMCB7CisJCQkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDFlMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAxZTAwMDAgeworCQkJCQkJbGFiZWwgPSAiZHRiIjsKKwkJCQkJCXJlZyA9IDwweDAwMWUwMDAwIDB4MDAwMjAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMjAwMDAwIHsKKwkJCQkJCWxhYmVsID0gInJvb3QiOworCQkJCQkJcmVnID0gPDB4MDAyMDAwMDAgMHgwMDIwMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkA0MDAwMDAgeworCQkJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJCQlyZWcgPSA8MHgwMDQwMDAwMCAweDAwYjYwMDAwPjsKKwkJCQkJfTsKKwkJCQkJcGFydGl0aW9uQGY2MDAwMCB7CisJCQkJCQlsYWJlbCA9ICJlbnYiOworCQkJCQkJcmVnID0gPDB4MDBmNjAwMDAgMHgwMDA0MDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkBmYTAwMDAgeworCQkJCQkJbGFiZWwgPSAidS1ib290IjsKKwkJCQkJCXJlZyA9IDwweDAwZmEwMDAwIDB4MDAwNjAwMDA+OworCQkJCQl9OworCQkJCX07CiAJCQl9OwogCi0JCQlVQVJUMDogc2VyaWFsQDEwMDAwMjAwIHsKKwkJCVVBUlQwOiBzZXJpYWxAZjAwMDAyMDAgewogCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCQlyZWcgPSA8MHgxMDAwMDIwMCAweDAwMDAwMDA4PjsKKwkJCQlyZWcgPSA8MHhmMDAwMDIwMCAweDAwMDAwMDA4PjsKIAkJCQl2aXJ0dWFsLXJlZyA9IDwweGEwMDAwMjAwPjsKIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSB6SW1hZ2UgKi8KIAkJCQljdXJyZW50LXNwZWVkID0gPDExNTIwMD47CkBAIC0xODAsMTAgKzIxMywxMCBAQAogCQkJCWludGVycnVwdHMgPSA8MHgwIDB4ND47CiAJCQl9OwogCi0JCQlVQVJUMTogc2VyaWFsQDEwMDAwMzAwIHsKKwkJCVVBUlQxOiBzZXJpYWxAZjAwMDAzMDAgewogCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCQlyZWcgPSA8MHgxMDAwMDMwMCAweDAwMDAwMDA4PjsKKwkJCQlyZWcgPSA8MHhmMDAwMDMwMCAweDAwMDAwMDA4PjsKIAkJCQl2aXJ0dWFsLXJlZyA9IDwweGEwMDAwMzAwPjsKIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsKQEAgLTE5MiwxMCArMjI1LDEwIEBACiAJCQl9OwogCiAKLQkJCVVBUlQyOiBzZXJpYWxAMTAwMDA2MDAgeworCQkJVUFSVDI6IHNlcmlhbEBmMDAwMDYwMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOwotCQkJCXJlZyA9IDwweDEwMDAwNjAwIDB4MDAwMDAwMDg+OworCQkJCXJlZyA9IDwweGYwMDAwNjAwIDB4MDAwMDAwMDg+OwogCQkJCXZpcnR1YWwtcmVnID0gPDB4YTAwMDA2MDA+OwogCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCQljdXJyZW50LXNwZWVkID0gPDA+OwpAQCAtMjAzLDI3ICsyMzYsMjcgQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDB4NSAweDQ+OwogCQkJfTsKIAotCQkJSUlDMDogaTJjQDEwMDAwNDAwIHsKKwkJCUlJQzA6IGkyY0BmMDAwMDQwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0saWljLTQ0MHNwZSIsICJpYm0saWljLTQ0MGdwIiwgImlibSxpaWMiOwotCQkJCXJlZyA9IDwweDEwMDAwNDAwIDB4MDAwMDAwMTQ+OworCQkJCXJlZyA9IDwweGYwMDAwNDAwIDB4MDAwMDAwMTQ+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OwogCQkJCWludGVycnVwdHMgPSA8MHgyIDB4ND47CiAJCQl9OwogCi0JCQlJSUMxOiBpMmNAMTAwMDA1MDAgeworCQkJSUlDMTogaTJjQGYwMDAwNTAwIHsKIAkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDQwc3BlIiwgImlibSxpaWMtNDQwZ3AiLCAiaWJtLGlpYyI7Ci0JCQkJcmVnID0gPDB4MTAwMDA1MDAgMHgwMDAwMDAxND47CisJCQkJcmVnID0gPDB4ZjAwMDA1MDAgMHgwMDAwMDAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CiAJCQkJaW50ZXJydXB0cyA9IDwweDMgMHg0PjsKIAkJCX07CiAKLQkJCUVNQUMwOiBldGhlcm5ldEAxMDAwMDgwMCB7CisJCQlFTUFDMDogZXRoZXJuZXRAZjAwMDA4MDAgewogCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MHgwPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ0MHNwZSIsICJpYm0sZW1hYzQiOwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OwogCQkJCWludGVycnVwdHMgPSA8MHgxYyAweDQgMHgxZCAweDQ+OwotCQkJCXJlZyA9IDwweDEwMDAwODAwIDB4MDAwMDAwNzQ+OworCQkJCXJlZyA9IDwweGYwMDAwODAwIDB4MDAwMDAwNzQ+OwogCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwMDAwMDAwMDAwMF07CiAJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MD47CkBAIC0yNDgsMTEgKzI4MSwxMSBAQAogCQkJcHJpbWFyeTsKIAkJCWxhcmdlLWluYm91bmQtd2luZG93czsKIAkJCWVuYWJsZS1tc2ktaG9sZTsKLQkJCXJlZyA9IDwweDAwMDAwMDBjIDB4MGVjMDAwMDAgICAweDAwMDAwMDA4CS8qIENvbmZpZyBzcGFjZSBhY2Nlc3MgKi8KLQkJCSAgICAgICAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMAkJLyogbm8gSUFDSyBjeWNsZXMgKi8KLQkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVkMDAwMDAgICAweDAwMDAwMDA0ICAgLyogU3BlY2lhbCBjeWNsZXMgKi8KLQkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVjODAwMDAgMHgwMDAwMDEwMAkvKiBJbnRlcm5hbCByZWdpc3RlcnMgKi8KLQkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVjODAxMDAgIDB4MDAwMDAwZmM+OwkvKiBJbnRlcm5hbCBtZXNzYWdpbmcgcmVnaXN0ZXJzICovCisJCQlyZWcgPSA8MHgwMDAwMDAwYyAweDBlYzAwMDAwIDB4MDAwMDAwMDggICAvKiBDb25maWcgc3BhY2UgYWNjZXNzICovCisJCQkgICAgICAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgICAvKiBubyBJQUNLIGN5Y2xlcyAqLworCQkJICAgICAgIDB4MDAwMDAwMGMgMHgwZWQwMDAwMCAweDAwMDAwMDA0ICAgLyogU3BlY2lhbCBjeWNsZXMgKi8KKwkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVjODAwMDAgMHgwMDAwMDEwMCAgIC8qIEludGVybmFsIHJlZ2lzdGVycyAqLworCQkJICAgICAgIDB4MDAwMDAwMGMgMHgwZWM4MDEwMCAweDAwMDAwMGZjPjsgLyogSW50ZXJuYWwgbWVzc2FnaW5nIHJlZ2lzdGVycyAqLwogCiAJCQkvKiBPdXRib3VuZCByYW5nZXMsIG9uZSBtZW1vcnkgYW5kIG9uZSBJTywKIAkJCSAqIGxhdGVyIGNhbm5vdCBiZSBjaGFuZ2VkCkBAIC00NTMsNiArNDg2LDYgQEAKIAl9OwogCiAJY2hvc2VuIHsKLQkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3BsYi9vcGIvc2VyaWFsQDEwMDAwMjAwIjsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3BsYi9vcGIvc2VyaWFsQGYwMDAwMjAwIjsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cwppbmRleCBjMzUzZGFjLi5jOWVmNmJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzCkBAIC02MiwxNyArNjIsMTIgQEAKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwotCQliYW5rLXdpZHRoID0gPDE+OwogCQkvLyBBRFMgaGFzIHR3byBIeW5peCA1MTJNQiBOYW5kIGZsYXNoIGNoaXBzIGluIGEgc2luZ2xlCi0JCS8vIHN0YWNrZWQgcGFja2FnZSAuCisJCS8vIHN0YWNrZWQgcGFja2FnZS4KIAkJY2hpcHMgPSA8Mj47Ci0JCW5hbmQwQDAgewotCQkJbGFiZWwgPSAibmFuZDAiOwotCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMjAwMDAwMD47IAkvLyBmaXJzdCAzMiBNQiBvZiBjaGlwIDAKLQkJfTsKLQkJbmFuZDFAMjAwMDAwMDAgewotCQkJbGFiZWwgPSAibmFuZDEiOwotCQkJcmVnID0gPDB4MjAwMDAwMDAgMHgwMjAwMDAwMD47IAkvLyBmaXJzdCAzMiBNQiBvZiBjaGlwIDEKKwkJbmFuZEAwIHsKKwkJCWxhYmVsID0gIm5hbmQiOworCQkJcmVnID0gPDB4MDAwMDAwMDAgMHg0MDAwMDAwMD47CS8vIDUxMk1CICsgNTEyTUIKIAkJfTsKIAl9OwogCkBAIC0xNjYsNiArMTYxLDExIEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQl9OwogCisJCXJlc2V0QGUwMCB7CS8vIFJlc2V0IG1vZHVsZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1yZXNldCI7CisJCQlyZWcgPSA8MHhlMDAgMHgxMDA+OworCQl9OworCiAJCWNsb2NrQGYwMCB7CS8vIENsb2NrIGNvbnRyb2wKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtY2xvY2siOwogCQkJcmVnID0gPDB4ZjAwIDB4MTAwPjsKQEAgLTE4NSwxNyArMTg1LDE1IEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQl9OwogCi0JCW1zY2FuQDEzMDAgeworCQljYW5AMTMwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLW1zY2FuIjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlpbnRlcnJ1cHRzID0gPDEyIDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQkJcmVnID0gPDB4MTMwMCAweDgwPjsKIAkJfTsKIAotCQltc2NhbkAxMzgwIHsKKwkJY2FuQDEzODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1tc2NhbiI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwogCQkJaW50ZXJydXB0cyA9IDwxMyAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCXJlZyA9IDwweDEzODAgMHg4MD47CkBAIC0yMDUsMTcgKzIwMywzMSBAQAogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtaTJjIiwgImZzbC1pMmMiOwotCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDwweDE3MDAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDkgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJCQlmc2wscHJlc2VydmUtY2xvY2tpbmc7CisKKwkJCWh3bW9uQDRhIHsKKwkJCQljb21wYXRpYmxlID0gImFkaSxhZDc0MTQiOworCQkJCXJlZyA9IDwweDRhPjsKKwkJCX07CisKKwkJCWVlcHJvbUA1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJhdCwyNGMzMiI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKworCQkJcnRjQDY4IHsKKwkJCQljb21wYXRpYmxlID0gInN0bSxtNDF0NjIiOworCQkJCXJlZyA9IDwweDY4PjsKKwkJCX07CiAJCX07CiAKIAkJaTJjQDE3MjAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtaTJjIiwgImZzbC1pMmMiOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCXJlZyA9IDwweDE3MjAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEwIDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwpAQCAtMjI1LDcgKzIzNyw2IEBACiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1pMmMiLCAiZnNsLWkyYyI7Ci0JCQljZWxsLWluZGV4ID0gPDI+OwogCQkJcmVnID0gPDB4MTc0MCAweDIwPjsKIAkJCWludGVycnVwdHMgPSA8MTEgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CkBAIC0yNDQsNyArMjU1LDcgQEAKIAkJfTsKIAogCQlkaXNwbGF5QDIxMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1kaXUiLCAiZnNsLWRpdSI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWRpdSI7CiAJCQlyZWcgPSA8MHgyMTAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8NjQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CkBAIC0yNzcsNyArMjg4LDcgQEAKIAogCQkvLyBVU0IxIHVzaW5nIGV4dGVybmFsIFVMUEkgUEhZCiAJCS8vdXNiQDMwMDAgewotCQkvLwljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXVzYjItZHIiLCAiZnNsLXVzYjItZHIiOworCQkvLwljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXVzYjItZHIiOwogCQkvLwlyZWcgPSA8MHgzMDAwIDB4MTAwMD47CiAJCS8vCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkvLwkjc2l6ZS1jZWxscyA9IDwwPjsKQEAgLTI4NSwxMiArMjk2LDExIEBACiAJCS8vCWludGVycnVwdHMgPSA8NDMgMHg4PjsKIAkJLy8JZHJfbW9kZSA9ICJvdGciOwogCQkvLwlwaHlfdHlwZSA9ICJ1bHBpIjsKLQkJLy8JcG9ydDE7CiAJCS8vfTsKIAogCQkvLyBVU0IwIHVzaW5nIGludGVybmFsIFVUTUkgUEhZCiAJCXVzYkA0MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtdXNiMi1kciIsICJmc2wtdXNiMi1kciI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXVzYjItZHIiOwogCQkJcmVnID0gPDB4NDAwMCAweDEwMDA+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKQEAgLTI5OCw3ICszMDgsOCBAQAogCQkJaW50ZXJydXB0cyA9IDw0NCAweDg+OwogCQkJZHJfbW9kZSA9ICJvdGciOwogCQkJcGh5X3R5cGUgPSAidXRtaV93aWRlIjsKLQkJCXBvcnQwOworCQkJZnNsLGludmVydC1kcnZ2YnVzOworCQkJZnNsLGludmVydC1wd3ItZmF1bHQ7CiAJCX07CiAKIAkJLy8gSU8gY29udHJvbApAQCAtMzY1LDcgKzM3Niw3IEBACiAJCX07CiAKIAkJZG1hQDE0MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtZG1hMiI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWRtYSI7CiAJCQlyZWcgPSA8MHgxNDAwMCAweDE4MDA+OwogCQkJaW50ZXJydXB0cyA9IDw2NSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cwppbmRleCA2ZDg5MmJhLi45MmZiMTc4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzCkBAIC01NCw5ICs1NCw1MiBAQAogCQlyZWcgPSA8MHgwIDB4MTAwMDAwMDA+OwogCX07CiAKLQliY3NyQGY4MDAwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2OG1kcy1iY3NyIjsKLQkJcmVnID0gPDB4ZjgwMDAwMDAgMHg4MDAwPjsKKwlsb2NhbGJ1c0BlMDAwNTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2OC1sb2NhbGJ1cyIsICJmc2wscHEzLWxvY2FsYnVzIiwKKwkJCSAgICAgInNpbXBsZS1idXMiOworCQlyZWcgPSA8MHhlMDAwNTAwMCAweDEwMDA+OworCisJCXJhbmdlcyA9IDwweDAgMHgwIDB4ZmUwMDAwMDAgMHgwMjAwMDAwMAorCQkJICAweDEgMHgwIDB4ZjgwMDAwMDAgMHgwMDAwODAwMAorCQkJICAweDIgMHgwIDB4ZjAwMDAwMDAgMHgwNDAwMDAwMAorCQkJICAweDQgMHgwIDB4ZjgwMDgwMDAgMHgwMDAwODAwMAorCQkJICAweDUgMHgwIDB4ZjgwMTAwMDAgMHgwMDAwODAwMD47CisKKwkJbm9yQDAsMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDB4MCAweDAgMHgwMjAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCQl9OworCisJCWJjc3JAMSwwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTY4bWRzLWJjc3IiOworCQkJcmVnID0gPDEgMCAweDgwMDA+OworCQkJcmFuZ2VzID0gPDAgMSAwIDB4ODAwMD47CisKKwkJCWJjc3I1OiBncGlvLWNvbnRyb2xsZXJAMTEgeworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjhtZHMtYmNzci1ncGlvIjsKKwkJCQlyZWcgPSA8MHg1IDB4MT47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJfTsKKwkJfTsKKworCQlwaWJANCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjhtZHMtcGliIjsKKwkJCXJlZyA9IDw0IDAgMHg4MDAwPjsKKwkJfTsKKworCQlwaWJANSwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjhtZHMtcGliIjsKKwkJCXJlZyA9IDw1IDAgMHg4MDAwPjsKKwkJfTsKIAl9OwogCiAJc29jODU2OEBlMDAwMDAwMCB7CkBAIC02MTAsNCArNjUzLDIwIEBACiAJCXNsZWVwID0gPCZwbWMgMHgwMDA4MDAwMCAgIC8qIGNvbnRyb2xsZXIgKi8KIAkJCSAmcG1jIDB4MDAwNDAwMDA+OyAvKiBtZXNzYWdlIHVuaXQgKi8KIAl9OworCisJbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKworCQlncmVlbiB7CisJCQlncGlvcyA9IDwmYmNzcjUgMSAwPjsKKwkJfTsKKworCQlhbWJlciB7CisJCQlncGlvcyA9IDwmYmNzcjUgMiAwPjsKKwkJfTsKKworCQlyZWQgeworCQkJZ3Bpb3MgPSA8JmJjc3I1IDMgMD47CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvYWNhZGlhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9hY2FkaWFfZGVmY29uZmlnCmluZGV4IDE3M2E1YmIuLjhlOTVmOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9hY2FkaWFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9hY2FkaWFfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMyCi0jIFR1ZSBKYW4gMjAgMDg6MTc6NDYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQorIyBNb24gSmFuICA0IDE1OjMzOjA3IDIwMTAKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiBDT05GSUdfNDB4PXkKQEAgLTE2LDYgKzE2LDcgQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzR4eD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMjcsMTUgKzI4LDE4IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfTlJfSVJRUz01MTIKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNDksMTEgKzUzLDE1IEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRENSPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNjcsOSArNzUsMjEgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC04NCwzMSArMTA0LDQwIEBACiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19TVFJJUF9HRU5FUkFURUQ9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMjAsNiArMTQ5LDE0IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEzMSw4ICsxNjgsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTQwLDE5ICsxNzYsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAogCkBAIC0xNjYsNiArMjI0LDcgQEAKIENPTkZJR19BQ0FESUE9eQogIyBDT05GSUdfRVA0MDUgaXMgbm90IHNldAogIyBDT05GSUdfSENVNCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RGT09UIGlzIG5vdCBzZXQKICMgQ09ORklHX0tJTEFVRUEgaXMgbm90IHNldAogIyBDT05GSUdfTUFLQUxVIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTE5VVCBpcyBub3Qgc2V0CkBAIC0yMDgsMTAgKzI2NywxMiBAQAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19TUEFSU0VfSVJRPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yMjcsMTAgKzI4OCwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldApAQCAtMjU1LDYgKzMxOCw3IEBACiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CkBAIC0yNzIsMTQgKzMzNiwxMiBAQAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCiBDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAogQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCiBDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTMxNiw2ICszNzgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTMyOSw2ICszOTIsOCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzQxLDggKzQwNiwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIwogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zNTUsNiArNDI1LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtMzY3LDkgKzQzOCw5IEBACiBDT05GSUdfUFJPQ19FVkVOVFM9eQogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC00NDUsNyArNTE2LDYgQEAKICMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKICMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAogCiAjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwpAQCAtNDYxLDYgKzUzMSw3IEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTQ5MSw3ICs1NjIsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC01MTIsNiArNTg3LDggQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSUJNX05FV19FTUFDPXkKQEAgLTUzMCwxNyArNjA3LDE4IEBACiBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSPXkKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0FJUk8gaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTU1Myw2ICs2MzEsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNTk4LDYgKzY3Nyw3IEBACiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC02MTQsNiArNjk0LDExIEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTYzNiwyNyArNzIxLDEzIEBACiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC02NzgsNyArNzQ5LDEyIEBACiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTY4OSwxNCArNzY1LDE3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtNzA2LDYgKzc4NSwxMSBAQAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTc2MCw3ICs4NDQsNiBAQAogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC03NzYsNiArODU5LDcgQEAKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC03OTAsMTEgKzg3NCwxMyBAQAogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CitDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtODA0LDYgKzg5MCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTgxMiwxNiArODk5LDIzIEBACiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAogQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTgzMywzNSArOTI3LDQ1IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKQEAgLTg3NywxMyArOTgxLDE2IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTg5MiwxMCArOTk5LDEyIEBACiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC05MjMsMTEgKzEwMzIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTk2NCw2ICsxMDc1LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC05NzIsNSArMTA4NCw2IEBACiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvZXA0MDVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2VwNDA1X2RlZmNvbmZpZwppbmRleCBlOWI4NDk1Li45MThmMjNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvZXA0MDVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9lcDQwNV9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKLSMgVHVlIEphbiAyMCAwODoxNzo0OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCisjIE1vbiBKYW4gIDQgMTU6Mzc6MzQgMjAxMAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi0jIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKIENPTkZJR180MHg9eQpAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfNHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yNywxNSArMjgsMTggQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19OUl9JUlFTPTUxMgogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC00OSwxMSArNTMsMTUgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19QUENfRENSX05BVElWRT15CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC02Nyw5ICs3NSwyMSBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTg0LDMxICsxMDQsNDAgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotQ09ORklHX0tBTExTWU1TX1NUUklQX0dFTkVSQVRFRD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEyMCw2ICsxNDksMTQgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTMxLDggKzE2OCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDAsMTkgKzE3Niw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0CiAKQEAgLTE2Niw2ICsyMjQsNyBAQAogIyBDT05GSUdfQUNBRElBIGlzIG5vdCBzZXQKIENPTkZJR19FUDQwNT15CiAjIENPTkZJR19IQ1U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVEZPT1QgaXMgbm90IHNldAogIyBDT05GSUdfS0lMQVVFQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUtBTFUgaXMgbm90IHNldAogIyBDT05GSUdfV0FMTlVUIGlzIG5vdCBzZXQKQEAgLTIxMCwxMCArMjY5LDEyIEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIyOSwxMCArMjkwLDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CkBAIC0yNTcsNiArMzIwLDcgQEAKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKQEAgLTI3NCwxNCArMzM4LDEyIEBACiBDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKIENPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCiBDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKIENPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzE4LDYgKzM4MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzMxLDYgKzM5NCw4IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNDMsOCArNDA4LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM1Nyw2ICs0MjcsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC0zNjksOSArNDQwLDkgQEAKIENPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTQ0Nyw3ICs1MTgsNiBAQAogIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIwogIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CiAKICMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCkBAIC00NjMsNiArNTMzLDcgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKQEAgLTQ3NiwxMiArNTQ3LDE3IEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTUwMSw3ICs1NzcsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC01MjIsNiArNjAyLDggQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSUJNX05FV19FTUFDPXkKQEAgLTU0MCw3ICs2MjIsMTAgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNTQ4LDYgKzYzMyw3IEBACiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTU1OCw5ICs2NDQsMTMgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9MTF9URU1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CkBAIC01NzAsNiArNjYwLDcgQEAKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKQEAgLTU3OSwxNCArNjcwLDE0IEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTYwOCw2ICs2OTksNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNjUzLDYgKzc0NSw3IEBACiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC02NjksNiArNzYyLDExIEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTY5MSwyNyArNzg5LDEzIEBACiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtNzQ4LDE0ICs4MzIsMTYgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BDST15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQpAQCAtNzc1LDExICs4NjEsMTEgQEAKICMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIApAQCAtODA3LDcgKzg5Myw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtODIyLDYgKzkwNyw3IEBACiAjCiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKQEAgLTgzMSw3ICs5MTcsMTIgQEAKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtODQyLDE0ICs5MzMsMTcgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC04NTksNiArOTUzLDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtOTEzLDcgKzEwMTIsNiBAQAogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC05MjcsOCArMTAyNSw0OCBAQAogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtOTQzLDExICsxMDgxLDEzIEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC05NTcsNiArMTA5Nyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTk2NSwxNiArMTEwNiwyMyBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC05ODYsMzUgKzExMzQsNDUgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldApAQCAtMTAzMCwxMyArMTE4OCwxNiBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMDQ1LDEwICsxMjA2LDEyIEBACiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xMDc2LDExICsxMjM5LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMTE3LDYgKzEyODIsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMjUsNSArMTI5MSw2IEBACiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvaGN1NF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvaGN1NF9kZWZjb25maWcKaW5kZXggOGMwMTlkNy4uZjg3ZWYwMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2hjdTRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9oY3U0X2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBUdWUgSmFuIDIwIDA4OjE3OjUwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKKyMgTW9uIEphbiAgNCAxNTo0NToxMSAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogQ09ORklHXzQweD15CkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR180eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI3LDE1ICsyOCwxOCBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTQ5LDExICs1MywxNSBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTY3LDkgKzc1LDIxIEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtODQsMzEgKzEwNCw0MCBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfU1RSSVBfR0VORVJBVEVEPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTIwLDYgKzE0OSwxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMzEsOCArMTY4LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE0MCwxOSArMTc2LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTIGlzIG5vdCBzZXQKIApAQCAtMTY2LDYgKzIyNCw3IEBACiAjIENPTkZJR19BQ0FESUEgaXMgbm90IHNldAogIyBDT05GSUdfRVA0MDUgaXMgbm90IHNldAogQ09ORklHX0hDVTQ9eQorIyBDT05GSUdfSE9URk9PVCBpcyBub3Qgc2V0CiAjIENPTkZJR19LSUxBVUVBIGlzIG5vdCBzZXQKICMgQ09ORklHX01BS0FMVSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQUxOVVQgaXMgbm90IHNldApAQCAtMjA4LDEwICsyNjcsMTIgQEAKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjI3LDEwICsyODgsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKQEAgLTI1NSw2ICszMTgsNyBAQAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldApAQCAtMjcyLDE0ICszMzYsMTIgQEAKIENPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAogQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKIENPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAogQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zMTYsNiArMzc4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zMjksNiArMzkyLDggQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM0MSw4ICs0MDYsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzU1LDYgKzQyNSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTM2Nyw5ICs0MzgsOSBAQAogQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDQ1LDcgKzUxNiw2IEBACiAjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKIAogIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKQEAgLTQ2MSw2ICs1MzEsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC00NzMsMTIgKzU0NCwxNyBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC00OTgsNyArNTc0LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNTE5LDYgKzU5OSw4IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15CkBAIC01MzcsNyArNjE5LDEwIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTU0NSw2ICs2MzAsNyBAQAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01NTUsOSArNjQxLDEzIEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfTExfVEVNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNTY3LDYgKzY1Nyw3IEBACiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CkBAIC01NzYsMTQgKzY2NywxMyBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNTk2LDYgKzY4Niw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC02NDEsNiArNzMyLDcgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTY1NywxMyArNzQ5LDE3IEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY4MCwyNyArNzc2LDEzIEBACiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtNzIyLDcgKzgwNCwxMiBAQAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC03MzMsMTQgKzgyMCwxNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTc1MCw2ICs4NDAsMTEgQEAKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CkBAIC04MDQsNyArODk5LDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtODIwLDYgKzkxNCw3IEBACiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtODM0LDExICs5MjksMTMgQEAKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTg0OCw2ICs5NDUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NTYsMTYgKzk1NCwyMyBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC04NzcsMzUgKzk4Miw0NSBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CkBAIC05MjEsMTMgKzEwMzYsMTYgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtOTM2LDEwICsxMDU0LDEyIEBACiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC05NjcsMTEgKzEwODcsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEwMDgsNiArMTEzMCw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAxNiw1ICsxMTM5LDYgQEAKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFVl9QUEM0WFggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9raWxhdWVhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9raWxhdWVhX2RlZmNvbmZpZwppbmRleCA5YTA1ZWMwLi4xOWZiY2IwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgva2lsYXVlYV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2tpbGF1ZWFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDEzOjI4OjM3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKKyMgTW9uIEphbiAgNCAxNTo1MToyMyAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTE2LDYgKzE2LDcgQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzR4eD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMjksNyArMzAsOSBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19OUl9JUlFTPTUxMgogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQpAQCAtNTIsNiArNTUsNyBAQAogQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CkBAIC03OSwxMSArODMsMTMgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyMSwyMiArMTI3LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQ0LDYgKzE0OSw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTY5LDE0ICsxNzYsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQogCkBAIC0xOTAsNiArMjI0LDcgQEAKICMgQ09ORklHX0FDQURJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19FUDQwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19IQ1U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVEZPT1QgaXMgbm90IHNldAogQ09ORklHX0tJTEFVRUE9eQogIyBDT05GSUdfTUFLQUxVIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTE5VVCBpcyBub3Qgc2V0CkBAIC0yMzMsMTAgKzI2OCwxMSBAQAogIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19TUEFSU0VfSVJRPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNTIsOCArMjg4LDcgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0Myw2ICszNzgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3MCw3ICs0MDYsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIwogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zODMsNiArNDI1LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtMzk1LDkgKzQzOCw5IEBACiBDT05GSUdfUFJPQ19FVkVOVFM9eQogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC00OTgsNiArNTQxLDcgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNTc0LDE2ICs2MTgsMTcgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNTk2LDYgKzY0MSw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC02NDEsNiArNjg3LDcgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTY1Niw2ICs3MDMsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY5NiwxMSArNzQ0LDYgQEAKICMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CiAKICMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCiAjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwogIwogIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CkBAIC03MDksMTAgKzc1Miw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNzMwLDYgKzc2OSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC03NTMsNiArNzk3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19MTTc1PXkKICMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldApAQCAtNzc5LDYgKzgyNCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTc5MCw3ICs4MzYsNiBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKICMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldApAQCAtODEwLDEwICs4NTUsMTMgQEAKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC04MjEsNiArODY5LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC04NjgsNiArOTE3LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtODg5LDcgKzkzOSw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTkxMyw2ICs5NjUsNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC05MjAsNiArOTczLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTk3OSw3ICsxMDMzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTAzNyw2ICsxMDkwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTA1NCw2ICsxMTA4LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTEwNzIsMTAgKzExMjcsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTA5OSwxMCArMTE1NiwxMCBAQAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xMTI0LDEzICsxMTgxLDE2IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTExNzIsMTEgKzEyMzIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9tYWthbHVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L21ha2FsdV9kZWZjb25maWcKaW5kZXggMTQ2NzQ3NS4uZWI0MWNkNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L21ha2FsdV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L21ha2FsdV9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzcKLSMgV2VkIEp1biAgMyAwOToxMTowMiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCisjIE1vbiBKYW4gIDQgMTU6NTU6MTIgMjAxMAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi0jIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKIENPTkZJR180MHg9eQpAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfNHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yOSwxNCArMzAsMTYgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfTlJfSVJRUz01MTIKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTEgKzU1LDEzIEBACiBDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0RUQz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRENSPXkKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzgsMTEgKzgzLDEzIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMDgsNyArMTE1LDYgQEAKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMjEsNiArMTI3LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKQEAgLTEyOSw3ICsxNDIsNiBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTEzNyw2ICsxNDksMTMgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ5LDcgKzE2OCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTU3LDE0ICsxNzYsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQogCkBAIC0xNzgsNiArMjI0LDcgQEAKICMgQ09ORklHX0FDQURJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19FUDQwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19IQ1U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVEZPT1QgaXMgbm90IHNldAogIyBDT05GSUdfS0lMQVVFQSBpcyBub3Qgc2V0CiBDT05GSUdfTUFLQUxVPXkKICMgQ09ORklHX1dBTE5VVCBpcyBub3Qgc2V0CkBAIC0yMjAsMTAgKzI2NywxMiBAQAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19TUEFSU0VfSVJRPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yMzksOSArMjg4LDggQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zMzAsNiArMzc4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNDQsNiArMzkzLDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNTYsNyArNDA2LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzY5LDYgKzQyNSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTM4MSw5ICs0MzgsOSBAQAogQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDc0LDYgKzUzMSw3IEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTUwNCwxNCArNTYyLDE3IEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU0NiwxNiArNjA3LDE4IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC01NjgsNiArNjMxLDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTYxMyw2ICs2NzcsNyBAQAogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtNjI5LDYgKzY5NCwxMSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC02NTEsMjcgKzcyMSwxMyBAQAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtNjk1LDYgKzc1MSwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC03MDUsMTQgKzc2NSwxNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTc3MCw3ICs4MzMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04MTgsNiArODgwLDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtODI3LDYgKzg5MCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg0NCwxMCArOTA4LDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtODU5LDExICs5MjcsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtODczLDI0ICs5NDIsMjYgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTkxMCwxMyArOTgxLDE2IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTk1OCwxMSArMTAzMiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3dhbG51dF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvd2FsbnV0X2RlZmNvbmZpZwppbmRleCA1YWIyOWRkLi5iZmZmMGVhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvd2FsbnV0X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvd2FsbnV0X2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBUdWUgSmFuIDIwIDA4OjE3OjU3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKKyMgTW9uIEphbiAgNCAxNTo1NjozMCAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogQ09ORklHXzQweD15CkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR180eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI3LDE1ICsyOCwxOCBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTQ5LDExICs1MywxNSBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTY3LDkgKzc1LDIxIEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtODQsMzEgKzEwNCw0MCBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfU1RSSVBfR0VORVJBVEVEPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTIwLDYgKzE0OSwxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMzEsOCArMTY4LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE0MCwxOSArMTc2LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTIGlzIG5vdCBzZXQKIApAQCAtMTY2LDYgKzIyNCw3IEBACiAjIENPTkZJR19BQ0FESUEgaXMgbm90IHNldAogIyBDT05GSUdfRVA0MDUgaXMgbm90IHNldAogIyBDT05GSUdfSENVNCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RGT09UIGlzIG5vdCBzZXQKICMgQ09ORklHX0tJTEFVRUEgaXMgbm90IHNldAogIyBDT05GSUdfTUFLQUxVIGlzIG5vdCBzZXQKIENPTkZJR19XQUxOVVQ9eQpAQCAtMjExLDEwICsyNzAsMTIgQEAKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjMwLDEwICsyOTEsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKQEAgLTI1OCw2ICszMjEsNyBAQAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldApAQCAtMjc1LDE0ICszMzksMTIgQEAKIENPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAogQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKIENPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAogQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zMTksNiArMzgxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zMzIsNiArMzk1LDggQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM0NCw4ICs0MDksMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzU4LDYgKzQyOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTM3MCw5ICs0NDEsOSBAQAogQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDQ4LDcgKzUxOSw2IEBACiAjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKIAogIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKQEAgLTQ2NCw2ICs1MzQsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC00NzYsMTIgKzU0NywxNyBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01MDEsNyArNTc3LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNTIyLDYgKzYwMiw4IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15CkBAIC01NDAsNyArNjIyLDEwIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTU0OCw2ICs2MzMsNyBAQAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01NTgsOSArNjQ0LDEzIEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfTExfVEVNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNTcwLDYgKzY2MCw3IEBACiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CkBAIC01NzksMTQgKzY3MCwxMyBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNTk5LDYgKzY4OSw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC02NDQsNiArNzM1LDcgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTY2MCw2ICs3NTIsMTEgQEAKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNjgyLDI3ICs3NzksMTMgQEAKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC03MjcsNyArODEwLDcgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIApAQCAtNzQzLDcgKzgyNiwxMiBAQAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC03NTQsMTQgKzg0MiwxNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTc3MSw2ICs4NjIsMTEgQEAKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CkBAIC04MjUsNyArOTIxLDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtODQxLDYgKzkzNiw3IEBACiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtODU1LDExICs5NTEsMTMgQEAKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTg2OSw2ICs5NjcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NzcsMTYgKzk3NiwyMyBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC04OTgsMzUgKzEwMDQsNDUgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldApAQCAtOTQyLDEzICsxMDU4LDE2IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTk1NywxMCArMTA3NiwxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtOTg4LDExICsxMTA5LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMDI5LDYgKzExNTIsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMzcsNSArMTE2MSw2IEBACiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYXJjaGVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9hcmNoZXNfZGVmY29uZmlnCmluZGV4IDZmOTc2YjUuLjFmNmQwNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9hcmNoZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9hcmNoZXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNQotIyBUaHUgQXVnIDEzIDE0OjE0OjA3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKKyMgTW9uIEphbiAgNCAxNDowMjozNSAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19QVEVfNjRCSVQ9eQogQ09ORklHX1BIWVNfNjRCSVQ9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTMzLDcgKzM0LDkgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfTlJfSVJRUz01MTIKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKQEAgLTU2LDYgKzU5LDcgQEAKIENPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfRFRDPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19QUENfRENSX05BVElWRT15CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX1BQQ19EQ1I9eQpAQCAtODMsMTEgKzg3LDEzIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTEyMSwyMiArMTI3LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQ0LDYgKzE0OSw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTY5LDE0ICsxNzYsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQogCkBAIC0xOTgsNiArMjMyLDcgQEAKICMgQ09ORklHX0NBTllPTkxBTkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dMQUNJRVIgaXMgbm90IHNldAogIyBDT05GSUdfUkVEV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19FSUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAogQ09ORklHX1BQQzQ0eF9TSU1QTEU9eQpAQCAtMjQxLDEwICsyNzYsMTEgQEAKICMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYwLDggKzI5Niw3IEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19TVERCSU5VVElMUz15CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKQEAgLTM1Miw2ICszODcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3OSw3ICs0MTUsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIwogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zOTIsNiArNDM0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDA0LDkgKzQ0Nyw5IEBACiBDT05GSUdfUFJPQ19FVkVOVFM9eQogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC00OTcsNiArNTQwLDcgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNTczLDE2ICs2MTcsMTcgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNTk1LDYgKzY0MCw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC02NDAsNiArNjg2LDcgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTY1Niw2ICs3MDMsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY5NiwxMSArNzQ0LDYgQEAKICMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CiAKICMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCiAjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwogIwogIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CkBAIC03MDksMTAgKzc1Miw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNzMwLDYgKzc2OSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKIENPTkZJR19TRU5TT1JTX0FENzQxND15CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtNzUzLDYgKzc5Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldApAQCAtNzc5LDYgKzgyNCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTc5MCw5ICs4MzYsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODEwLDEwICs4NTQsMTMgQEAKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC04MjEsNiArODY4LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtODU4LDYgKzkwNiw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTg2NSw2ICs5MTQsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtOTM0LDcgKzk4NCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTk5Myw2ICsxMDQyLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTAxMCw2ICsxMDYwLDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTEwMjgsMTAgKzEwNzksMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTA1NSwxMCArMTEwOCwxMCBAQAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xMDgwLDcgKzExMzMsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2JhbWJvb19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYmFtYm9vX2RlZmNvbmZpZwppbmRleCBlNTdmMWU0Li43ODhmYWFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYmFtYm9vX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYmFtYm9vX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBUdWUgSmFuIDIwIDA4OjIyOjMzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKKyMgTW9uIEphbiAgNCAxNDowOTowMyAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19QVEVfNjRCSVQ9eQogQ09ORklHX1BIWVNfNjRCSVQ9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTMxLDE1ICszMiwxOCBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUzLDExICs1NywxNSBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTcxLDkgKzc5LDIxIEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtODgsOCArMTA4LDEyIEBACiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CkBAIC05OSwxOSArMTIzLDI1IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEyMyw2ICsxNTMsMTQgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTM0LDggKzE3Miw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDMsMTkgKzE4MCw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0CiAKQEAgLTE3Niw2ICsyMzUsOCBAQAogIyBDT05GSUdfQVJDSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTllPTkxBTkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dMQUNJRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVEV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19FSUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAogQ09ORklHX1BQQzQ0eF9TSU1QTEU9eQpAQCAtMjE4LDEwICsyNzksMTIgQEAKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjM3LDEwICszMDAsMTMgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1NUREJJTlVUSUxTPXkKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19DTURMSU5FX0JPT0w9eQpAQCAtMjY1LDYgKzMzMSw3IEBACiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CkBAIC0yODIsMTQgKzM0OSwxMiBAQAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCiBDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAogQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCiBDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTMyNiw2ICszOTEsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTMzOSw2ICs0MDUsOCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzUxLDggKzQxOSwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIwogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zNjUsNiArNDM4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtMzg2LDYgKzQ2MCw3IEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTM5OCwxMiArNDczLDE3IEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTQyMyw3ICs1MDMsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC00NDQsNiArNTI4LDggQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSUJNX05FV19FTUFDPXkKQEAgLTQ2Miw3ICs1NDgsMTAgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNDcwLDYgKzU1OSw3IEBACiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTQ4MCw5ICs1NzAsMTMgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9MTF9URU1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CkBAIC00OTIsNiArNTg2LDcgQEAKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKQEAgLTUwMSwxNCArNTk2LDEzIEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC01MjEsNiArNjE1LDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTU2Niw2ICs2NjEsNyBAQAogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtNTgyLDYgKzY3OCwxMSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC02MDQsMjcgKzcwNSwxMyBAQAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0RBQj15CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC02NDksNyArNzM2LDcgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIApAQCAtNjY1LDcgKzc1MiwxMiBAQAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC02NzYsMTQgKzc2OCwxNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTY5Myw2ICs3ODgsMTEgQEAKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CkBAIC03NDYsNyArODQ2LDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtNzYyLDYgKzg2MSw3IEBACiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtNzc2LDExICs4NzYsMTMgQEAKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTc5MCw2ICs4OTIsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC03OTgsMTYgKzkwMSwyMyBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC04MTksMzUgKzkyOSw0NSBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CkBAIC04NjMsMTMgKzk4MywxNiBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC04NzgsMTAgKzEwMDEsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTkwOSwxMSArMTAzNCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtOTUwLDYgKzEwNzcsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTk1OCw1ICsxMDg2LDYgQEAKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFVl9QUEM0WFggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmlnCmluZGV4IGIzMTJiMTY2Li40ZWY4YmNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMTc6Mjc6MjAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQorIyBNb24gSmFuICA0IDE0OjEyOjIwIDIwMTAKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX1BURV82NEJJVD15CiBDT05GSUdfUEhZU182NEJJVD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMzMsNyArMzQsOSBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19OUl9JUlFTPTUxMgogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQpAQCAtNTYsNiArNTksNyBAQAogQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CkBAIC04MywxMSArODcsMTMgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtMTIxLDIyICsxMjcsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNDQsNiArMTQ5LDggQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xNjksMTQgKzE3Niw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUz15CiAKQEAgLTE5OCw2ICsyMzIsNyBAQAogQ09ORklHX0NBTllPTkxBTkRTPXkKICMgQ09ORklHX0dMQUNJRVIgaXMgbm90IHNldAogIyBDT05GSUdfUkVEV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19FSUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAogQ09ORklHX1BQQzQ0eF9TSU1QTEU9eQpAQCAtMjQxLDEwICsyNzYsMTEgQEAKICMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYwLDggKzI5Niw3IEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19TVERCSU5VVElMUz15CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKQEAgLTM1Miw2ICszODcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3OSw3ICs0MTUsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIwogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zOTIsNiArNDM0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDA0LDkgKzQ0Nyw5IEBACiBDT05GSUdfUFJPQ19FVkVOVFM9eQogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC01MDgsNiArNTUxLDcgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKQEAgLTU4NSwxNiArNjI5LDE4IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0FJUk8gaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjE2LDYgKzY2Miw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC02NjEsNiArNzA4LDcgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTY3Niw2ICs3MjQsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTcxNywxMSArNzY2LDYgQEAKICMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CiAKICMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCiAjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwogIwogIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CkBAIC03MzAsMTAgKzc3NCw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNzUxLDYgKzc5MSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKIENPTkZJR19TRU5TT1JTX0FENzQxND15CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtNzc0LDYgKzgxOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldApAQCAtODAwLDYgKzg0Niw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTgxMSw5ICs4NTgsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODMxLDEwICs4NzYsMTMgQEAKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC04NDIsNiArODkwLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC04ODIsMTAgKzkzMSwxMiBAQAogQ09ORklHX1VTQl9FSENJX0hDRD1tCiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19YUFNfVVNCX0hDRF9YSUxJTlggaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKQEAgLTk5Myw2ICsxMDQ0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9NNDFUODA9eQogIyBDT05GSUdfUlRDX0RSVl9NNDFUODBfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTEwMTQsNyArMTA2Niw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMzgsNiArMTA5Miw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTEwNDUsNiArMTEwMCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTA0LDcgKzExNjAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMjAxLDYgKzEyNTYsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjE4LDYgKzEyNzQsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTIzNiwxMCArMTI5MywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMjYzLDEwICsxMzIyLDEwIEBACiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTEyODgsNyArMTM0NywxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvZWJvbnlfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2Vib255X2RlZmNvbmZpZwppbmRleCBiNjUyZjdkLi5jYTE3YjE0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvZWJvbnlfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9lYm9ueV9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKLSMgVHVlIEphbiAyMCAwODoyMjozNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCisjIE1vbiBKYW4gIDQgMTQ6MjA6NDYgMjAxMAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi0jIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CkBAIC0xOSw2ICsxOSw3IEBACiBDT05GSUdfUFRFXzY0QklUPXkKIENPTkZJR19QSFlTXzY0QklUPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0zMCwxNSArMzEsMTggQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19OUl9JUlFTPTUxMgogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMSArNTYsMTUgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19QUENfRENSX05BVElWRT15CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03MCw5ICs3OCwyMSBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTg3LDMxICsxMDcsNDAgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotQ09ORklHX0tBTExTWU1TX1NUUklQX0dFTkVSQVRFRD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEyMyw2ICsxNTIsMTQgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTM0LDggKzE3MSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDMsMTkgKzE3OSw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0CiAKQEAgLTE3Niw2ICsyMzQsOCBAQAogIyBDT05GSUdfQVJDSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTllPTkxBTkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dMQUNJRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVEV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19FSUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDNDR4X1NJTVBMRSBpcyBub3Qgc2V0CkBAIC0yMTgsMTAgKzI3OCwxMiBAQAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjM3LDEwICsyOTksMTMgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1NUREJJTlVUSUxTPXkKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CkBAIC0yNjQsNiArMzI5LDcgQEAKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKQEAgLTI4MSwxNCArMzQ3LDEyIEBACiBDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKIENPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCiBDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKIENPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzI1LDYgKzM4OSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzM4LDYgKzQwMyw4IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNTAsOCArNDE3LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM2NCw2ICs0MzYsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC0zNzYsOSArNDQ5LDkgQEAKIENPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDUzLDcgKzUyNiw2IEBACiAjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKIAogIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKQEAgLTQ2OSw2ICs1NDEsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC00ODEsMTIgKzU1NCwxNyBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01MDYsNyArNTg0LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNTI3LDYgKzYwOSw4IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15CkBAIC01NDUsNyArNjI5LDEwIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTU1Myw2ICs2NDAsNyBAQAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01NjMsOSArNjUxLDEzIEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfTExfVEVNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNTc1LDYgKzY2Nyw3IEBACiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CkBAIC01ODQsMTQgKzY3NywxMyBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjA0LDYgKzY5Niw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC02NDksNiArNzQyLDcgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTY2NSw2ICs3NTksMTEgQEAKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNjg3LDI3ICs3ODYsMTMgQEAKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTczMiw3ICs4MTcsNyBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCkBAIC03NDgsNyArODMzLDEyIEBACiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTc1OSwxNCArODQ5LDE3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtNzc2LDYgKzg2OSwxMSBAQAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTg0MCw3ICs5MzgsNiBAQAogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC04NTYsNiArOTUzLDcgQEAKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC04NzEsMTEgKzk2OSwxMyBAQAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CitDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtODg1LDYgKzk4NSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg5MywxNiArOTk0LDIzIEBACiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAogQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTkxNCwzNSArMTAyMiw0NSBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CkBAIC05NTgsMTMgKzEwNzYsMTYgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtOTczLDEwICsxMDk0LDEyIEBACiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xMDA0LDExICsxMTI3LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMDQ1LDYgKzExNzAsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9laWdlcl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvZWlnZXJfZGVmY29uZmlnCmluZGV4IDAwN2YzYmQuLmUzMTQ5YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9laWdlcl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2VpZ2VyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzYKLSMgV2VkIEF1ZyAxOSAxMzowNjo1MCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCisjIE1vbiBKYW4gIDQgMTQ6MzM6MDQgMjAxMAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNCw3ICszNCw5IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CkBAIC01Nyw2ICs1OSw3IEBACiBDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0RUQz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRENSPXkKQEAgLTg0LDExICs4NywxMyBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC0xMjIsMjIgKzEyNywyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE0NSw2ICsxNDksOCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE3MCwxNCArMTc2LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKIApAQCAtMjQzLDEwICsyNzYsMTEgQEAKICMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYyLDggKzI5Niw3IEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19TVERCSU5VVElMUz15CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKQEAgLTM1OCw2ICszOTEsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4NywxNCArNDIxLDExIEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDA3LDYgKzQzOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQxOSw5ICs0NTEsOSBAQAogQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTUyMiw2ICs1NTQsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC01NzMsOCArNjA2LDExIEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKQEAgLTYxMSw3ICs2NDcsMTAgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTY4Miw3ICs3MjEsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTcxMSwxMiArNzUyLDExIEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC03MzAsNiArNzcwLDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTc3NSw2ICs4MTYsNyBAQAogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtNzkxLDYgKzgzMyw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODMxLDExICs4NzQsNiBAQAogIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKIAogIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKICMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCiAjCiAjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKQEAgLTg0NCwxMCArODgyLDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0RFQlVHX0NPUkU9eQogQ09ORklHX0kyQ19ERUJVR19BTEdPPXkKQEAgLTg2NSw3ICs4OTksNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODgzLDEwICs5MTYsMTMgQEAKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC04OTQsNiArOTMwLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtOTM1LDYgKzk3Miw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTk0Miw2ICs5ODAsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTAwMSw3ICsxMDQwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTA1OSw2ICsxMDk3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTA5NSwxMCArMTEzNCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMTIyLDEwICsxMTYzLDEwIEBACiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTExNDcsMTMgKzExODgsMTYgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xMTk3LDExICsxMjQxLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogQ09ORklHX0NSWVBUT19YQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19HSEFTSD15CiBDT05GSUdfQ1JZUFRPX01END15CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2thdG1haV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgva2F0bWFpX2RlZmNvbmZpZwppbmRleCBjMjNhNGVmLi5hZjI0NGUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgva2F0bWFpX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgva2F0bWFpX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBUdWUgSmFuIDIwIDA4OjIyOjM4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzUKKyMgVHVlIEphbiAyNiAxNDo0MDo1OCAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKQEAgLTE5LDYgKzE5LDcgQEAKIENPTkZJR19QVEVfNjRCSVQ9eQogQ09ORklHX1BIWVNfNjRCSVQ9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTMwLDE1ICszMSwxOCBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUyLDExICs1NiwxNSBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTcwLDkgKzc4LDIxIEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04Myw4ICsxMDMsMTMgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CkBAIC05NCwxOSArMTE5LDI1IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTExOCw2ICsxNDksMTMgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTI5LDggKzE2Nyw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xMzgsMTkgKzE3NSw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQogCkBAIC0xNzEsNiArMjMwLDggQEAKICMgQ09ORklHX0FSQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU5ZT05MQU5EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFRFdPT0QgaXMgbm90IHNldAorIyBDT05GSUdfRUlHRVIgaXMgbm90IHNldAogIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAogIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0NHhfU0lNUExFPXkKQEAgLTIxMiwxMCArMjczLDEyIEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIzMSwxMCArMjk0LDEzIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19TVERCSU5VVElMUz15CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKQEAgLTI1OSw2ICszMjUsNyBAQAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldApAQCAtMjc2LDE0ICszNDMsMTIgQEAKIENPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAogQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKIENPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAogQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zMjAsNiArMzg1LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zMzMsNiArMzk5LDggQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM0NSw4ICs0MTMsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzU5LDYgKzQzMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTM2OSw3ICs0NDMsOTAgQEAKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQogQ09ORklHX1BST0NfRVZFTlRTPXkKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQpAQCAtMzgwLDYgKzUzNyw3IEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTM5MiwxMiArNTUwLDE3IEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTQxNyw3ICs1ODAsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC00NDAsNiArNjA3LDggQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSUJNX05FV19FTUFDPXkKQEAgLTQ1OCw3ICs2MjcsMTAgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNDY2LDYgKzYzOCw3IEBACiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTQ3Niw5ICs2NDksMTMgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9MTF9URU1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CkBAIC00ODgsNiArNjY1LDcgQEAKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKQEAgLTQ5NywxNCArNjc1LDEzIEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC01MTcsNiArNjk0LDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTU2Miw2ICs3NDAsNyBAQAogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtNTc4LDEzICs3NTcsMTcgQEAKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjAxLDI3ICs3ODQsMTMgQEAKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtNjQ2LDcgKzgxNSw3IEBACiAjCiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKQEAgLTY2Miw3ICs4MzEsMTIgQEAKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtNjc2LDExICs4NTAsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC02OTAsNiArODY2LDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtNzIyLDYgKzkwMyw3IEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTc0Myw3ICs5MjUsNiBAQAogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC03NTksNiArOTQwLDcgQEAKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC03NzMsMTEgKzk1NSwxMyBAQAogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CitDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtNzg3LDYgKzk3MSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNzk1LDE2ICs5ODAsMjMgQEAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtODE2LDM1ICsxMDA4LDQzIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKQEAgLTg1OSwxMyArMTA1OSwxNiBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC04NzQsMTAgKzEwNzcsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTkwNSwxMSArMTExMCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtOTQ2LDYgKzExNTMsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTk1NCw1ICsxMTYyLDYgQEAKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFVl9QUEM0WFggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yYWluaWVyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yYWluaWVyX2RlZmNvbmZpZwppbmRleCBiMjVmYWQxLi44ZmVkM2IyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmFpbmllcl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JhaW5pZXJfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMyCi0jIFR1ZSBKYW4gMjAgMDg6MjI6NDEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQorIyBNb24gSmFuICA0IDE0OjU5OjEyIDIwMTAKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldApAQCAtMTksNiArMTksNyBAQAogQ09ORklHX1BURV82NEJJVD15CiBDT05GSUdfUEhZU182NEJJVD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMzAsMTUgKzMxLDE4IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfTlJfSVJRUz01MTIKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTEgKzU2LDE1IEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRENSPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzAsOSArNzgsMjEgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC04Nyw4ICsxMDcsMTIgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKQEAgLTk4LDE5ICsxMjIsMjUgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTIyLDYgKzE1MiwxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMzMsOCArMTcxLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE0MiwxOSArMTc5LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTIGlzIG5vdCBzZXQKIApAQCAtMTc1LDYgKzIzNCw4IEBACiAjIENPTkZJR19BUkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAogIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRURXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VJR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1lPU0VNSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDNDR4X1NJTVBMRT15CkBAIC0yMTYsMTAgKzI3NywxMiBAQAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjM1LDEwICsyOTgsMTMgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1NUREJJTlVUSUxTPXkKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19DTURMSU5FX0JPT0w9eQpAQCAtMjYzLDYgKzMyOSw3IEBACiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CkBAIC0yODAsMTQgKzM0NywxMiBAQAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCiBDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAogQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCiBDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTMyNCw2ICszODksNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTMzNyw2ICs0MDMsOCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzQ5LDggKzQxNywxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIwogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zNjMsNiArNDM2LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtMzc1LDkgKzQ0OSw5IEBACiBDT05GSUdfUFJPQ19FVkVOVFM9eQogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC00NTMsNyArNTI3LDYgQEAKICMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKICMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAogCiAjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwpAQCAtNDY5LDYgKzU0Miw3IEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTQ4MSwxMiArNTU1LDE3IEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTUwNiw3ICs1ODUsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC01MzMsNiArNjE2LDcgQEAKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNTQzLDkgKzYyNywxMyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0xMX1RFTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKQEAgLTU1NSw2ICs2NDMsNyBAQAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19OSVUgaXMgbm90IHNldApAQCAtNTY0LDE0ICs2NTMsMTMgQEAKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0FJUk8gaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTU4NCw2ICs2NzIsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNjI5LDYgKzcxOCw3IEBACiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC02NDUsNiArNzM1LDExIEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTY2NywyNyArNzYyLDEzIEBACiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTcxMiw3ICs3OTMsNyBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCkBAIC03MjgsNyArODA5LDEyIEBACiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTczOSwxNCArODI1LDE3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtNzU2LDYgKzg0NSwxMSBAQAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTgyMCw3ICs5MTQsNiBAQAogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC04MzYsNiArOTI5LDcgQEAKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC04NTEsMTEgKzk0NSwxMyBAQAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CitDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtODY1LDYgKzk2MSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg3MywxNiArOTcwLDIzIEBACiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAogQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTg5NCwzNSArOTk4LDQ1IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKQEAgLTk0Miw2ICsxMDU2LDcgQEAKIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4PXkKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180MHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0NQTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfVVNCR0VDS08gaXMgbm90IHNldAogQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHhfUEhZU0xPVz0weGVmNjAwMzAwCiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eF9QSFlTSElHSD0weDEKIApAQCAtOTUxLDEzICsxMDY2LDE2IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTk2NiwxMCArMTA4NCwxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtOTk3LDExICsxMTE3LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMDM4LDYgKzExNjAsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNDYsNSArMTE2OSw2IEBACiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmVkd29vZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmVkd29vZF9kZWZjb25maWcKaW5kZXggZWQzMWQ0Zi4uYTY3ZWM5MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JlZHdvb2RfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yZWR3b29kX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMwotIyBXZWQgRmViICA0IDE0OjMxOjA5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKKyMgTW9uIEphbiAgNCAxNTowNTowNSAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19QVEVfNjRCSVQ9eQogQ09ORklHX1BIWVNfNjRCSVQ9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTMxLDE1ICszMiwxOCBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUzLDExICs1NywxNSBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTcxLDYgKzc5LDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKQEAgLTc4LDExICs4NywxMyBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC05Myw4ICsxMDQsMTIgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKQEAgLTEwNCwxOSArMTE5LDI1IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEyOCw2ICsxNDksMTQgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTM5LDggKzE2OCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDgsMTQgKzE3Niw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUz15CiAKQEAgLTE3Nyw2ICsyMzIsNyBAQAogIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAogIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0CiBDT05GSUdfUkVEV09PRD15CisjIENPTkZJR19FSUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAogQ09ORklHX1BQQzQ0eF9TSU1QTEU9eQpAQCAtMjE5LDEwICsyNzUsMTIgQEAKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjM4LDEwICsyOTYsMTMgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1NUREJJTlVUSUxTPXkKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19DTURMSU5FX0JPT0w9eQpAQCAtMjYyLDEyICszMjMsMTUgQEAKIENPTkZJR19QQ0lfU1lTQ0FMTD15CiBDT05GSUdfUENJRVBPUlRCVVM9eQogQ09ORklHX1BDSUVBRVI9eQorIyBDT05GSUdfUENJRV9FQ1JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSUVBRVJfSU5KRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CiAjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKQEAgLTI4NSwxNCArMzQ5LDEyIEBACiBDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKIENPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCiBDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKIENPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzI5LDYgKzM5MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzQyLDYgKzQwNSw4IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNTQsMTMgKzQxOSwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM3Myw2ICs0MzgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC0zODUsOSArNDUxLDkgQEAKIENPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC00NjIsNyArNTI4LDYgQEAKICMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKICMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAogCiAjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwpAQCAtNDc5LDYgKzU0NCw3IEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTUxMiwxMCArNTc4LDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTUzMywyMyArNTk1LDMwIEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CkBAIC01NTgsNyArNjI3LDYgQEAKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldApAQCAtNTY5LDggKzYzNywxMiBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX0ZVU0lPTj15CkBAIC01ODYsNyArNjU4LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNjE0LDYgKzY5MCw4IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15CkBAIC02MzIsNyArNzEwLDEwIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTY0MCw2ICs3MjEsNyBAQAogQ09ORklHX0UxMDAwRT15CiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNjUwLDE5ICs3MzIsMjEgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9MTF9URU1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0FJUk8gaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTY3Niw2ICs3NjAsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNzIxLDYgKzgwNiw3IEBACiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC03MzcsNiArODIzLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03NzcsMTEgKzg2NCw2IEBACiAjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAogCiAjCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwogIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKICMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldApAQCAtNzkwLDI1ICs4NzIsMjMgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfREVCVUdfQ09SRT15CiBDT05GSUdfSTJDX0RFQlVHX0FMR089eQogQ09ORklHX0kyQ19ERUJVR19CVVM9eQogQ09ORklHX0kyQ19ERUJVR19DSElQPXkKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MjYsMzEgKzkwNiwyMSBAQAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0RBQj15CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC04NzYsNyArOTQ2LDEyIEBACiAjCiAjIERNQSBEZXZpY2VzCiAjCisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC04ODcsMTQgKzk2MiwxNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTkwNCw2ICs5ODIsMTEgQEAKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CkBAIC05NTgsNyArMTA0MSw2IEBACiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTk3NCw2ICsxMDU2LDcgQEAKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC05ODgsMTEgKzEwNzEsMTMgQEAKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEwMDIsNiArMTA4Nyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwMTAsMTYgKzEwOTYsMjMgQEAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTAzMSwzNSArMTEyNCw0NSBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CkBAIC0xMDc1LDEzICsxMTc4LDE2IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9eQpAQCAtMTA5MiwxMCArMTE5OCwxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORz15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPXkKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKIENPTkZJR19DUllQVE9fQ1JZUFREPXkKIENPTkZJR19DUllQVE9fQVVUSEVOQz15CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xMTIzLDExICsxMjMxLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogQ09ORklHX0NSWVBUT19YQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19HSEFTSD15CiBDT05GSUdfQ1JZUFRPX01END15CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTE2NCw2ICsxMjc0LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMTcyLDUgKzEyODMsNiBAQAogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1BQQzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3NhbTQ0MGVwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zYW00NDBlcF9kZWZjb25maWcKaW5kZXggZTE0ZTg5YS4uODg2Y2I2YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3NhbTQ0MGVwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvc2FtNDQwZXBfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMyCi0jIFR1ZSBKYW4gMjAgMDg6MjI6NDIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQorIyBNb24gSmFuICA0IDE1OjExOjI0IDIwMTAKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldApAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX1BURV82NEJJVD15CiBDT05GSUdfUEhZU182NEJJVD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMzEsMTUgKzMyLDE4IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfTlJfSVJRUz01MTIKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTMsMTEgKzU3LDE1IEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRENSPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzEsOSArNzksMjEgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKICMgQ09ORklHX0lLQ09ORklHX1BST0MgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTg5LDggKzEwOSwxMiBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtOTksMTkgKzEyMywyNSBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMjMsNiArMTUzLDEzIEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEzNCw4ICsxNzEsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDMsMTkgKzE3OSw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0CiAKQEAgLTE3Niw2ICsyMzQsOCBAQAogIyBDT05GSUdfQVJDSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTllPTkxBTkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dMQUNJRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVEV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19FSUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDNDR4X1NJTVBMRSBpcyBub3Qgc2V0CkBAIC0yMTgsMTAgKzI3OCwxMiBAQAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19TUEFSU0VfSVJRPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yMzcsMTAgKzI5OSwxMyBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfU1REQklOVVRJTFM9eQogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0NNRExJTkVfQk9PTD15CkBAIC0yNjQsNiArMzI5LDcgQEAKICMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CkBAIC0yODEsMTQgKzM0NywxMiBAQAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCiBDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAogQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCiBDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTMyNSw2ICszODksNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTMzOCw2ICs0MDMsOCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzUwLDggKzQxNywxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIwogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zNjQsNiArNDM2LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtMzg1LDYgKzQ1OCw3IEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldApAQCAtNDIwLDEwICs0OTQsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTQ0MCw4ICs1MTAsMTAgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKICMgQ09ORklHX1NBVEFfUE1QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTQ2Myw2ICs1MzUsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTQ4OCwxNCArNTYxLDE2IEBACiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CkBAIC01MDgsNyArNTgzLDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNTI5LDYgKzYwOCw4IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15CkBAIC01NDcsMTcgKzYyOCwxOSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0FJUk8gaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNTgwLDYgKzY2Myw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC01ODksNiArNjczLDcgQEAKIENPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTYwNSwyNSArNjkwLDMwIEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiBDT05GSUdfTU9VU0VfUFMyPXkKIENPTkZJR19NT1VTRV9QUzJfQUxQUz15CiBDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldApAQCAtNjM5LDYgKzcyOSw3IEBACiBDT05GSUdfU0VSSU9fTElCUFMyPXkKICMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNjc2LDYgKzc2Nyw3IEBACiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC02OTEsNiArNzgzLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiBDT05GSUdfSTJDX0FMR09CSVQ9eQpAQCAtNzMzLDExICs4MjYsNiBAQAogIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKIAogIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKICMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCiAjCiAjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKQEAgLTc0NiwyNyArODM0LDIzIEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc4NCwzMSArODY4LDIxIEBACiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtODcwLDYgKzk0NCw3IEBACiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CiAjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CkBAIC04OTksNyArOTc0LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC05MTIsMTUgKzk4NiwxOCBAQAogIwogIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCi1DT05GSUdfSElEX0NPTVBBVD15CiBDT05GSUdfSElEX0E0VEVDSD15CiBDT05GSUdfSElEX0FQUExFPXkKIENPTkZJR19ISURfQkVMS0lOPXkKIENPTkZJR19ISURfQ0hFUlJZPXkKIENPTkZJR19ISURfQ0hJQ09OWT15CiBDT05GSUdfSElEX0NZUFJFU1M9eQorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAogQ09ORklHX0hJRF9FWktFWT15CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CkBAIC05MzMsMTAgKzEwMTAsMTEgQEAKIENPTkZJR19ISURfU0FNU1VORz15CiBDT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKLSMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotQ09ORklHX1RIUlVTVE1BU1RFUl9GRj1tCi1DT05GSUdfWkVST1BMVVNfRkY9bQorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC05NjIsMTcgKzEwNDAsMjAgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD1tCiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19YUFNfVVNCX0hDRF9YSUxJTlggaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CkBAIC05OTIsMTEgKzEwNzMsMTEgQEAKICMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogQ09ORklHX1VTQl9TVE9SQUdFPW0KICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTEwMzgsNyArMTExOSw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtMTA1NCw2ICsxMTM0LDcgQEAKICMKICMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtMTA5MCw5ICsxMTcxLDExIEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfTTQxVDgwPXkKIENPTkZJR19SVENfRFJWX000MVQ4MF9XRFQ9eQorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTExMCwxNSArMTE5MywyMiBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfUlRDX0RSVl9QUEMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEzMCw2ICsxMjIwLDcgQEAKICMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKQEAgLTExNDIsMTAgKzEyMzMsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTE1NSw2ICsxMjQ5LDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKIENPTkZJR19JU085NjYwX0ZTPXkKQEAgLTEyNjcsNiArMTM2Niw3IEBACiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xMjgxLDExICsxMzgxLDEzIEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMjk1LDI3ICsxMzk3LDI5IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTEzMjYsNyArMTQzMCwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvc2VxdW9pYV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvc2VxdW9pYV9kZWZjb25maWcKaW5kZXggNjQwMGFhZS4uMWIyZjQxZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3NlcXVvaWFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zZXF1b2lhX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5Ci0jIFR1ZSBBcHIgIDcgMTc6MDQ6NTIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQorIyBNb24gSmFuICA0IDE1OjE1OjUxIDIwMTAKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldApAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX1BURV82NEJJVD15CiBDT05GSUdfUEhZU182NEJJVD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMzEsMTUgKzMyLDE4IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfTlJfSVJRUz01MTIKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTMsMTIgKzU3LDE1IEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRENSPXkKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzIsNiArNzksNyBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldApAQCAtNzksMTEgKzg3LDEzIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjEsNiArMTMxLDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKQEAgLTEyOSw3ICsxNDYsNiBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTEzNyw2ICsxNTMsMTMgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ5LDcgKzE3Miw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTU3LDE0ICsxODAsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0CiAKQEAgLTE4Niw2ICsyMzYsNyBAQAogIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAogIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRURXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VJR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1lPU0VNSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDNDR4X1NJTVBMRT15CkBAIC0yMjgsMTAgKzI3OSwxMiBAQAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19TUEFSU0VfSVJRPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDcsOSArMzAwLDggQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfU1REQklOVVRJTFM9eQogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTI5MywxMSArMzQ1LDExIEBACiAjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAogIwogQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19MT1dNRU1fQ0FNX05VTT0zCiBDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCiBDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAogQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zMzksNiArMzkxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNTMsNiArNDA2LDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNjUsNyArNDE5LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzc4LDYgKzQzOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTM5MCw5ICs0NTEsOSBAQAogQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDkzLDYgKzU1NCw3IEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTUxNSw2ICs1NzcsNyBAQAogIyBFRVBST00gc3VwcG9ydAogIwogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTUzNCwxNCArNTk3LDE3IEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU3Niw3ICs2NDIsMTAgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNTg0LDYgKzY1Myw3IEBACiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTU5NCw2ICs2NjQsOSBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0xMX1RFTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC02MTksMTIgKzY5MiwxMSBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjM3LDYgKzcwOSw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC02ODIsNiArNzU1LDcgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTY5OCw2ICs3NzIsMTEgQEAKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNzIwLDI3ICs3OTksMTMgQEAKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtNzgzLDYgKzg0OCwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC03OTMsMTQgKzg2MiwxNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTkxNiw2ICs5ODgsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC05MjUsNiArOTk4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTMzLDE2ICsxMDA3LDIzIEBACiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAogQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTk1NCwxMSArMTAzNSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC05NjgsMjcgKzEwNTAsMzAgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKQEAgLTEwMDQsMTMgKzEwODksMTYgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTA1MiwxMSArMTE0MCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3RhaXNoYW5fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3RhaXNoYW5fZGVmY29uZmlnCmluZGV4IGVmMzJjYzQuLjEyMDQxZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC90YWlzaGFuX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvdGFpc2hhbl9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKLSMgVHVlIEphbiAyMCAwODoyMjo0NyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCisjIE1vbiBKYW4gIDQgMTU6MjE6MDQgMjAxMAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi0jIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CkBAIC0xOSw2ICsxOSw3IEBACiBDT05GSUdfUFRFXzY0QklUPXkKIENPTkZJR19QSFlTXzY0QklUPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0zMCwxNSArMzEsMTggQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19OUl9JUlFTPTUxMgogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMSArNTYsMTUgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19QUENfRENSX05BVElWRT15CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03MCw5ICs3OCwyMSBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTg3LDggKzEwNywxMiBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtOTgsMTkgKzEyMiwyNSBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMjIsNiArMTUyLDE0IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEzMyw4ICsxNzEsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTQyLDE5ICsxNzksNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAogCkBAIC0xNzUsNiArMjM0LDggQEAKICMgQ09ORklHX0FSQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU5ZT05MQU5EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFRFdPT0QgaXMgbm90IHNldAorIyBDT05GSUdfRUlHRVIgaXMgbm90IHNldAogIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAogIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0NHhfU0lNUExFPXkKQEAgLTIxNiwxMCArMjc3LDEyIEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIzNSwxMCArMjk4LDEzIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19TVERCSU5VVElMUz15CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKQEAgLTI2Myw2ICszMjksNyBAQAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldApAQCAtMjgwLDE0ICszNDcsMTIgQEAKIENPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAogQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKIENPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAogQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zMjQsNiArMzg5LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zMzcsNiArNDAzLDggQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM0OSw4ICs0MTcsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzYzLDYgKzQzNiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTM3NSw5ICs0NDksOSBAQAogQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CkBAIC00NTMsNyArNTI3LDYgQEAKICMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKICMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAogCiAjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwpAQCAtNDY5LDYgKzU0Miw3IEBACiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTQ4MSwxMiArNTU1LDE3IEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTUwNiw3ICs1ODUsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC01MjksNiArNjEyLDggQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSUJNX05FV19FTUFDPXkKQEAgLTU0Nyw3ICs2MzIsMTAgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNTU1LDYgKzY0Myw3IEBACiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTU2NSw5ICs2NTQsMTMgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9MTF9URU1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CkBAIC01NzcsNiArNjcwLDcgQEAKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKQEAgLTU4NiwxNCArNjgwLDEzIEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02MDYsNiArNjk5LDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTY1MSw2ICs3NDUsNyBAQAogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtNjY3LDYgKzc2MiwxMSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC02ODksMjcgKzc4OSwxMyBAQAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0RBQj15CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC03MzQsNyArODIwLDcgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIApAQCAtNzUwLDcgKzgzNiwxMiBAQAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC03NjEsMTQgKzg1MiwxNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTc3OCw2ICs4NzIsMTEgQEAKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CkBAIC04MzIsNyArOTMxLDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtODQ4LDYgKzk0Niw3IEBACiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtODYyLDExICs5NjEsMTMgQEAKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTg3Niw2ICs5NzcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04ODQsMTYgKzk4NiwyMyBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC05MDUsMzUgKzEwMTQsNDUgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldApAQCAtOTQ5LDEzICsxMDY4LDE2IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTk2NCwxMCArMTA4NiwxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtOTk1LDExICsxMTE5LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMDM2LDYgKzExNjIsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNDQsNSArMTE3MSw2IEBACiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvd2FycF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvd2FycF9kZWZjb25maWcKaW5kZXggNzg3NjM1Zi4uOTllZmY0ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3dhcnBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC93YXJwX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFR1ZSBKdW4gIDkgMjM6MzU6MzYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQorIyBNb24gSmFuICA0IDE1OjI3OjQ2IDIwMTAKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldApAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX1BURV82NEJJVD15CiBDT05GSUdfUEhZU182NEJJVD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMzEsMTUgKzMyLDE4IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfTlJfSVJRUz01MTIKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldApAQCAtNTYsMTEgKzYwLDEzIEBACiBDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0RUQz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRENSPXkKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtODEsMTEgKzg3LDEzIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMTEsNyArMTE5LDYgQEAKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTI0LDYgKzEzMSwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CiBDT05GSUdfQ09NUEFUX0JSSz15CkBAIC0xMzEsNyArMTQ1LDYgQEAKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xMzksNiArMTUyLDEzIEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE1MSw3ICsxNzEsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTU5LDE0ICsxNzksNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTg3LDYgKzIzNCw3IEBACiAjIENPTkZJR19DQU5ZT05MQU5EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFRFdPT0QgaXMgbm90IHNldAorIyBDT05GSUdfRUlHRVIgaXMgbm90IHNldAogIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAogIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQzQ0eF9TSU1QTEUgaXMgbm90IHNldApAQCAtMjI5LDEwICsyNzcsMTIgQEAKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQ4LDkgKzI5OCw4IEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1NUREJJTlVUSUxTPXkKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNTYsNiArNDA1LDcgQEAKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzEsNiArNDIxLDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zODMsNyArNDM0LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzk2LDYgKzQ1Myw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDA3LDkgKzQ2NSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC01MTMsNiArNTcxLDEwIEBACiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTUyNCw5ICs1ODYsMTEgQEAKICMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogCiAjCkBAIC01MzQsNyArNTk4LDkgQEAKICMKIENPTkZJR19FRVBST01fQVQyND15CiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19JV01DMzIwMFRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTU3LDE1ICs2MjMsMTEgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfV0FJVF9TQ0FOIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCiAKICMKICMgU0NTSSBUcmFuc3BvcnRzCkBAIC01ODIsNyArNjQ0LDYgQEAKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTYwOSwxNCArNjcwLDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjc4LDYgKzczOSw3IEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC02OTMsNiArNzU1LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNzI1LDE3ICs3ODgsMTcgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CkBAIC03NjEsMTAgKzgyNCwxOSBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiBDT05GSUdfU0VOU09SU19BRDc0MTQ9eQogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTc4Nyw2ICs4NTksNyBAQAogIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKQEAgLTgxMiw2ICs4ODUsOCBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKQEAgLTgyMSw3ICs4OTYsNiBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKIENPTkZJR19USEVSTUFMX0hXTU9OPXkKIENPTkZJR19XQVRDSERPRz15CkBAIC04NTUsMjYgKzkyOSwxNSBAQAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTkxNywxMCArOTgwLDExIEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQogQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQpAQCAtOTg4LDYgKzEwNTIsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTAxNCw3ICsxMDc5LDggQEAKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfV0JTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1DX1BJS0FTRD15CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKQEAgLTEwMjUsOSArMTA5MSwxMCBAQAogQ09ORklHX0xFRFNfR1BJTz15CiAjIENPTkZJR19MRURTX0dQSU9fUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0xFRFNfR1BJT19PRj15Ci0jIENPTkZJR19MRURTX0xQNTUyMSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MVDM1OTMgaXMgbm90IHNldAogCiAjCiAjIExFRCBUcmlnZ2VycwpAQCAtMTA0OCw2ICsxMTE1LDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNjUsMTAgKzExMzYsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xMTQ1LDcgKzEyMTksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMjM1LDYgKzEzMDgsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMjQ0LDYgKzEzMTgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjYxLDEwICsxMzM2LDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTI3NiwxMSArMTM1NSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMjkwLDI3ICsxMzcwLDMwIEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CkBAIC0xMzI2LDEzICsxNDA5LDE2IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CkBAIC0xMzY2LDExICsxNDUyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZwppbmRleCBhODVmOTI3Li42MjJkODRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCkBAIC0xNTU3LDcgKzE1NTcsNTIgQEAKICMKICMgVEkgVkxZTlEKICMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorQ09ORklHX1NUQUdJTkc9eQorIyBDT05GSUdfU1RBR0lOR19FWENMVURFX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUMTMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRTQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUVJTEhBVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lQX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ0hPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTUVESSBpcyBub3Qgc2V0CisjIENPTkZJR19BU1VTX09MRUQgaXMgbm90IHNldAorIyBDT05GSUdfQUxURVJBX1BDSUVfQ0hETUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlNSU8gaXMgbm90IHNldAorIyBDT05GSUdfVFJBTlpQT1JUIGlzIG5vdCBzZXQKKworIworIyBBbmRyb2lkCisjCisjIENPTkZJR19BTkRST0lEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTVCBpcyBub3Qgc2V0CisjIENPTkZJR19QT0hNRUxGUyBpcyBub3Qgc2V0CisjIENPTkZJR19CM0RGRyBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfUEhJU09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMQU45QVVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19IRUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DUEMgaXMgbm90IHNldAorCisjCisjIFF1YWxjb21tIE1TTSBDYW1lcmEgQW5kIFZpZGVvCisjCisKKyMKKyMgQ2FtZXJhIFNlbnNvciBTZWxlY3Rpb24KKyMKKyMgQ09ORklHX0hZUEVSVl9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hZUEVSVl9CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19IWVBFUlZfTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19WTUVfQlVTPXkKKworIworIyBWTUUgQnJpZGdlIERyaXZlcnMKKyMKK0NPTkZJR19WTUVfVFNJMTQ4PXkKKworIworIyBWTUUgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1ZNRV9VU0VSIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCmluZGV4IDQ1NTRkOWIuLjYyYzJiODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZwpAQCAtMjY1LDcgKzI2NSw3IEBACiAjCiAjIEtlcm5lbCBvcHRpb25zCiAjCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19ISUdITUVNPXkKIENPTkZJR19USUNLX09ORVNIT1Q9eQogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CkBAIC02NTEsNyArNjUxLDcgQEAKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9PRl9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwpAQCAtNjcxLDEzICs2NzEsOSBAQAogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwogIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9KRURFQ1BST0JFPXkKIENPTkZJR19NVERfR0VOX1BST0JFPXkKLUNPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLSMgQ09ORklHX01URF9DRklfTk9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAogQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQpAQCAtNjg4LDcgKzY4NCw2IEBACiBDT05GSUdfTVREX0NGSV9JMj15CiAjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKQEAgLTE2NTIsNyArMTY0Nyw0NCBAQAogIwogIyBUSSBWTFlOUQogIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CitDT05GSUdfU1RBR0lORz15CisjIENPTkZJR19TVEFHSU5HX0VYQ0xVREVfQlVJTEQgaXMgbm90IHNldAorIyBDT05GSUdfRVQxMzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRUlMSEFVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVBfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDSE8gaXMgbm90IHNldAorIyBDT05GSUdfQ09NRURJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTVVNfT0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19BTFRFUkFfUENJRV9DSERNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSU1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFOWlBPUlQgaXMgbm90IHNldAorCisjCisjIEFuZHJvaWQKKyMKKyMgQ09ORklHX0FORFJPSUQgaXMgbm90IHNldAorIyBDT05GSUdfRFNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPSE1FTEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0IzREZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9QSElTT04gaXMgbm90IHNldAorIyBDT05GSUdfUExBTjlBVVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVlQ2NjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DUEMgaXMgbm90IHNldAorIyBDT05GSUdfUkRDXzE3RjMxMDFYIGlzIG5vdCBzZXQKK0NPTkZJR19WTUVfQlVTPXkKKworIworIyBWTUUgQnJpZGdlIERyaXZlcnMKKyMKKyMgQ09ORklHX1ZNRV9DQTkxQ1g0MiBpcyBub3Qgc2V0CitDT05GSUdfVk1FX1RTSTE0OD15CisKKyMKKyMgVk1FIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19WTUVfVVNFUiBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC0xNzI5LDcgKzE3NjEsMTcgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CkBAIC0xODc0LDYgKzE5MTYsNyBAQAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUxMnhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTEyeF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA0NzI3MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUxMnhfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTY5NCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjNgorIyBGcmkgRmViICA1IDExOjQ4OjI5IDIwMTAKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHX1BQQ19CT09LM1NfMzI9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKKyMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19OUl9JUlFTPTUxMgorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorQ09ORklHX1JEX0JaSVAyPXkKK0NPTkZJR19SRF9MWk1BPXkKK0NPTkZJR19SRF9MWk89eQorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCREFGPXkKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01QQzUxMng9eQorQ09ORklHX1BQQ19NUEM1MTIxPXkKK0NPTkZJR19NUEM1MTIxX0FEUz15CisjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQU9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15CitDT05GSUdfSVBJQz15CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19UQVUgaXMgbm90IHNldAorIyBDT05GSUdfUVVJQ0NfRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorQ09ORklHX0haPTEwMDAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfTUlHUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQorIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKK0NPTkZJR19DQU49eQorQ09ORklHX0NBTl9SQVc9eQorQ09ORklHX0NBTl9CQ009eQorCisjCisjIENBTiBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0NBTl9WQ0FOPXkKK0NPTkZJR19DQU5fREVWPXkKKyMgQ09ORklHX0NBTl9DQUxDX0JJVFRJTUlORyBpcyBub3Qgc2V0CitDT05GSUdfQ0FOX01TQ0FOPXkKKyMgQ09ORklHX0NBTl9TSkExMDAwIGlzIG5vdCBzZXQKKworIworIyBDQU4gVVNCIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0NBTl9FTVNfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19DQU5fREVCVUdfREVWSUNFUz15CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFOREFMT05FPXkKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorQ09ORklHX01URF9ST009eQorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9NUEM1MTIxX05GQz15CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCitDT05GSUdfTVREX1VCST15CitDT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgorQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQorIyBDT05GSUdfTVREX1VCSV9HTFVFQkkgaXMgbm90IHNldAorCisjCisjIFVCSSBkZWJ1Z2dpbmcgb3B0aW9ucworIworIyBDT05GSUdfTVREX1VCSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xCitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCitDT05GSUdfQkxLX0RFVl9YSVA9eQorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCitDT05GSUdfRUVQUk9NX0FUMjQ9eQorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfREFWSUNPTV9QSFk9eQorQ09ORklHX1FTRU1JX1BIWT15CitDT05GSUdfTFhUX1BIWT15CitDT05GSUdfQ0lDQURBX1BIWT15CitDT05GSUdfVklURVNTRV9QSFk9eQorQ09ORklHX1NNU0NfUEhZPXkKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorQ09ORklHX0lDUExVU19QSFk9eQorQ09ORklHX1JFQUxURUtfUEhZPXkKK0NPTkZJR19OQVRJT05BTF9QSFk9eQorQ09ORklHX1NURTEwWFA9eQorQ09ORklHX0xTSV9FVDEwMTFDX1BIWT15CitDT05GSUdfRklYRURfUEhZPXkKK0NPTkZJR19NRElPX0JJVEJBTkc9eQorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19GU19FTkVUPXkKK0NPTkZJR19GU19FTkVUX01QQzUxMjFfRkVDPXkKK0NPTkZJR19GU19FTkVUX0hBU19GRUM9eQorQ09ORklHX0ZTX0VORVRfTURJT19GRUM9eQorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX01QQzUyeHg9eQorQ09ORklHX1NFUklBTF9NUEM1Mnh4X0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9NUEM1Mnh4X0NPTlNPTEVfQkFVRD0xMTUyMDAKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9TVVBQT1JUPXkKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworQ09ORklHX1ZJREVPX0RFVj15CitDT05GSUdfVklERU9fVjRMMl9DT01NT049eQorIyBDT05GSUdfVklERU9fQUxMT1dfVjRMMSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX01FRElBPXkKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19JUl9DT1JFPXkKK0NPTkZJR19WSURFT19JUj15CisjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSPXkKKyMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlTRSBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVJfU0lNUExFPXkKK0NPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPXkKK0NPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PXkKK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxPXkKK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzY3PXkKK0NPTkZJR19NRURJQV9UVU5FUl9NVDIwWFg9eQorQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOD15CitDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwPXkKK0NPTkZJR19NRURJQV9UVU5FUl9NQzQ0UzgwMz15CitDT05GSUdfVklERU9fVjRMMj15CitDT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKK0NPTkZJR19WSURFT19BRFZfREVCVUc9eQorIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19JUl9JMkM9eQorCisjCisjIEVuY29kZXJzL2RlY29kZXJzIGFuZCBvdGhlciBoZWxwZXIgY2hpcHMKKyMKKworIworIyBBdWRpbyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fVFZBVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UREE3NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1REQTk4NDAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVERBOTg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19URUE2NDE1QyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19URUE2NDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01TUDM0MDAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1M1MzQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NTNTNMMzJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX001Mjc5MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UTFYzMjBBSUMyM0IgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fV004Nzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1dNODczOSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19WUDI3U01QWCBpcyBub3Qgc2V0CisKKyMKKyMgUkRTIGRlY29kZXJzCisjCisjIENPTkZJR19WSURFT19TQUE2NTg4IGlzIG5vdCBzZXQKKworIworIyBWaWRlbyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fQURWNzE4MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19CVDgxOSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19CVDg1NiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19CVDg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19LUzAxMjcgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1Y3NjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01UOVYwMTEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVENNODI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE3MTEwIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19TQUE3MTFYPXkKKyMgQ09ORklHX1ZJREVPX1NBQTcxN1ggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVFZQNTE0WCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UVlA1MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1ZQWDMyMjAgaXMgbm90IHNldAorCisjCisjIFZpZGVvIGFuZCBhdWRpbyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fQ1gyNTg0MCBpcyBub3Qgc2V0CisKKyMKKyMgTVBFRyB2aWRlbyBlbmNvZGVycworIworIyBDT05GSUdfVklERU9fQ1gyMzQxWCBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gZW5jb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX1NBQTcxMjcgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNzE4NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19BRFY3MTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0FEVjcxNzUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVEhTNzMwMyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19BRFY3MzQzIGlzIG5vdCBzZXQKKworIworIyBWaWRlbyBpbXByb3ZlbWVudCBjaGlwcworIworIyBDT05GSUdfVklERU9fVVBENjQwMzFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1VQRDY0MDgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBIGlzIG5vdCBzZXQKK0NPTkZJR19WNExfVVNCX0RSSVZFUlM9eQorIyBDT05GSUdfVVNCX1ZJREVPX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQorQ09ORklHX1VTQl9HU1BDQT1tCisjIENPTkZJR19VU0JfTTU2MDIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUVjA2WFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dMODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9DT05FWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfRVRPTVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0pFSUxJTkogaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX01BUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX01SOTczMTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9PVjUxOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfT1Y1MzQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1BBQzIwNyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfUEFDNzMwMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU045QzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU09OSVhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TT05JWEogaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NROTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUTkwNUMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NUSzAxNCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1RWMDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1VOUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfVDYxMyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfVFY4NTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9WQzAzMlggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1pDM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1BWUlVTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fSERQVlIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fRU0yOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NYMjMxWFggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVVNCVklTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FVDYxWDI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU045QzEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkMwMzAxIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX1VTQl9aUjM2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVEtXRUJDQU0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1MyMjU1IGlzIG5vdCBzZXQKK0NPTkZJR19SQURJT19BREFQVEVSUz15CisjIENPTkZJR19JMkNfU0k0NzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1NJNDcxMyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFNCUiBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19TSTQ3MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01SODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1RFQTU3NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fVEVGNjg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GU0xfRElVPXkKKyMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RSQUdPTlJJU0U9eQorIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfS1lFPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKK0NPTkZJR19ISURfS0VOU0lOR1RPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorQ09ORklHX0hJRF9OVFJJRz15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX0hJRF9HUkVFTkFTSUE9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1RPUFNFRUQ9eQorQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQorIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9eQorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0JJR19FTkRJQU5fTU1JTz15CitDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9ERVNDPXkKKyMgQ09ORklHX1hQU19VU0JfSENEX1hJTElOWCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfRlNMPXkKK0NPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisKKyMKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX000MVQ4MD15CisjIENPTkZJR19SVENfRFJWX000MVQ4MF9XRFQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfTVBDNTEyMT15CitDT05GSUdfRE1BREVWSUNFUz15CisKKyMKKyMgRE1BIERldmljZXMKKyMKKyMgQ09ORklHX0ZTTF9ETUEgaXMgbm90IHNldAorQ09ORklHX01QQzUxMlhfRE1BPXkKK0NPTkZJR19ETUFfRU5HSU5FPXkKKworIworIyBETUEgQ2xpZW50cworIworIyBDT05GSUdfTkVUX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19BU1lOQ19UWF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUMl9GU19YSVA9eQorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfWElQPXkKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfVUJJRlNfRlM9eQorIyBDT05GSUdfVUJJRlNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldAorQ09ORklHX1VCSUZTX0ZTX0xaTz15CitDT05GSUdfVUJJRlNfRlNfWkxJQj15CisjIENPTkZJR19VQklGU19GU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMxNj15CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CitDT05GSUdfREVDT01QUkVTU19MWk89eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKK0NPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19MWk89eQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfQ0xPQ0s9eQorQ09ORklHX1BQQ19MSUJfUkhFQVA9eQorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDB4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQweF9kZWZjb25maWcKaW5kZXggMzI2MjA1Yy4uMzViNjA2OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDB4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0MHhfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMyCi0jIEZyaSBKYW4gMjMgMDg6NDQ6MDMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQorIyBNb24gSmFuICA0IDEzOjU0OjA2IDIwMTAKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiBDT05GSUdfNDB4PXkKQEAgLTE2LDYgKzE2LDcgQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzR4eD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMjcsMTUgKzI4LDE4IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfTlJfSVJRUz01MTIKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldApAQCAtNTAsMTEgKzU0LDE1IEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0RUQz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTY4LDkgKzc2LDIxIEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtODUsMzEgKzEwNSw0MCBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfU1RSSVBfR0VORVJBVEVEPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTIxLDYgKzE1MCwxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMzIsOCArMTY5LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE0MSwxOSArMTc3LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUz15CiAKQEAgLTE2OCwxMiArMjI2LDE0IEBACiBDT05GSUdfQUNBRElBPXkKIENPTkZJR19FUDQwNT15CiBDT05GSUdfSENVND15CitDT05GSUdfSE9URk9PVD15CiBDT05GSUdfS0lMQVVFQT15CiBDT05GSUdfTUFLQUxVPXkKIENPTkZJR19XQUxOVVQ9eQogQ09ORklHX1hJTElOWF9WSVJURVhfR0VORVJJQ19CT0FSRD15CiBDT05GSUdfUFBDNDB4X1NJTVBMRT15CiBDT05GSUdfNDA1R1A9eQorQ09ORklHXzQwNUVQPXkKIENPTkZJR180MDVFWD15CiBDT05GSUdfNDA1RVo9eQogQ09ORklHXzQwNUdQUj15CkBAIC0xOTUsNiArMjU1LDcgQEAKICMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKIENPTkZJR19PRl9SVEM9eQogIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1BDSSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIG9wdGlvbnMKQEAgLTIxOCwxMCArMjc5LDEyIEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIzNywxMCArMzAwLDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CkBAIC0yNjUsNiArMzMwLDcgQEAKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKQEAgLTI4MiwxNCArMzQ4LDEyIEBACiBDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKIENPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCiBDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKIENPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzQxLDYgKzQwNSw3IEBACiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2X1NJVD1tCisjIENPTkZJR19JUFY2X1NJVF82UkQgaXMgbm90IHNldAogQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQogIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldApAQCAtMzQ5LDYgKzQxNCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzYyLDYgKzQyOCw4IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNzQsMTMgKzQ0MiwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5Myw2ICs0NjEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MDUsOSArNDc0LDkgQEAKIENPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTQ4Myw3ICs1NTIsNiBAQAogIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIwogIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CiAKICMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCkBAIC00OTEsNyArNTU5LDcgQEAKIENPTkZJR19NVERfVUJJPW0KIENPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2CiBDT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCi1DT05GSUdfTVREX1VCSV9HTFVFQkk9eQorQ09ORklHX01URF9VQklfR0xVRUJJPW0KIAogIwogIyBVQkkgZGVidWdnaW5nIG9wdGlvbnMKQEAgLTUwOSw2ICs1NzcsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC01MjAsMTQgKzU4OSwyNSBAQAogQ09ORklHX1hJTElOWF9TWVNBQ0U9bQogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTU0Nyw3ICs2MjcsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC01NjgsNiArNjUyLDggQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSUJNX05FV19FTUFDPXkKQEAgLTU4Niw3ICs2NzIsMTAgQEAKIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlI9eQogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTU5NCw2ICs2ODMsNyBAQAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC02MDQsOSArNjk0LDEzIEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfTExfVEVNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNjE2LDYgKzcxMCw3IEBACiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CkBAIC02MjUsMTQgKzcyMCwxMyBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjQ1LDYgKzczOSw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC02NjMsNiArNzU4LDcgQEAKICMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAogQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyPW0KKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC02OTcsNiArNzkzLDcgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTcxNCw2ICs4MTEsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9bQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiBDT05GSUdfSTJDX0FMR09CSVQ9bQpAQCAtNzU2LDExICs4NTQsNiBAQAogIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKIAogIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKICMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCiAjCiAjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKQEAgLTc2OSwyMCArODYyLDE3IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQpAQCAtODA0LDExICs4OTQsMTcgQEAKICMKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIworIyBDT05GSUdfR1BJT19DUzU1MzUgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CkBAIC04MzIsMjggKzkyOCwxNSBAQAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC05MDksNiArOTkyLDcgQEAKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC05MzAsNyArMTAxNCw3IEBACiAjCiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKQEAgLTk0Niw3ICsxMDMwLDEyIEBACiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTk1Niw2ICsxMDQ1LDcgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9bQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldApAQCAtOTY2LDExICsxMDU2LDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtOTgwLDYgKzEwNzIsMTEgQEAKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CkBAIC0xMDUzLDcgKzExNTAsNiBAQAogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xMTA4LDYgKzEyMDQsNyBAQAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTEyNSwxMSArMTIyMiwxMyBAQAogQ09ORklHX1pMSUJfREVGTEFURT1tCiBDT05GSUdfTFpPX0NPTVBSRVNTPW0KIENPTkZJR19MWk9fREVDT01QUkVTUz1tCi1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CitDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTEzOSw2ICsxMjM4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTE0NywxNiArMTI0NywyMyBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMTY4LDM1ICsxMjc1LDQ1IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKQEAgLTEyMTIsMTMgKzEzMjksMTYgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTIyNywxMCArMTM0NywxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtMTI1OCwxMSArMTM4MCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTI5OSw2ICsxNDIzLDcgQEAKICMgQ29tcHJlc3Npb24KICMKIENPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0xaTz1tCiAKICMKQEAgLTEzMDcsNSArMTQzMiw2IEBACiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0NHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDR4X2RlZmNvbmZpZwppbmRleCA1ZTZkNTVmLi40NmY1YzQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0NHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQ0eF9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKLSMgRnJpIEphbiAyMyAwODo0Mzo0NiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCisjIE1vbiBKYW4gIDQgMTM6NDI6MTcgMjAxMAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi0jIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfUFRFXzY0QklUPXkKIENPTkZJR19QSFlTXzY0QklUPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0zMSwxNSArMzIsMTggQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19OUl9JUlFTPTUxMgogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CkBAIC01NCwxMSArNTgsMTUgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfRFRDPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRENSPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzIsOSArODAsMjEgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC04OSwzMSArMTA5LDQwIEBACiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19TVFJJUF9HRU5FUkFURUQ9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMjUsNiArMTU0LDEzIEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEzNiw4ICsxNzIsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTQ1LDIwICsxODAsNDIgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKIENPTkZJR19QUkVFTVBUX05PVElGSUVSUz15Ci1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUz15CiAKQEAgLTE3OSw4ICsyMzYsMTEgQEAKIENPTkZJR19BUkNIRVM9eQogQ09ORklHX0NBTllPTkxBTkRTPXkKIENPTkZJR19HTEFDSUVSPXkKK0NPTkZJR19SRURXT09EPXkKK0NPTkZJR19FSUdFUj15CiBDT05GSUdfWU9TRU1JVEU9eQogQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRD15CisjIENPTkZJR19YSUxJTlhfTUw1MTAgaXMgbm90IHNldAogQ09ORklHX1BQQzQ0eF9TSU1QTEU9eQogQ09ORklHX1BQQzR4eF9HUElPPXkKIENPTkZJR180NDBFUD15CkBAIC0xOTAsNiArMjUwLDcgQEAKIENPTkZJR180NDBHWD15CiBDT05GSUdfNDQwU1BlPXkKIENPTkZJR180NjBFWD15CitDT05GSUdfNDYwU1g9eQogQ09ORklHX0lCTTQ0MEVQX0VSUjQyPXkKIENPTkZJR19YSUxJTlhfVklSVEVYPXkKIENPTkZJR19YSUxJTlhfVklSVEVYXzVfRlhUPXkKQEAgLTIwNyw2ICsyNjgsNyBAQAogIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAogQ09ORklHX09GX1JUQz15CiAjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfUENJIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgb3B0aW9ucwpAQCAtMjMwLDEwICsyOTIsMTIgQEAKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19NQVRIX0VNVUxBVElPTj15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0OSwxMCArMzEzLDEzIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19TVERCSU5VVElMUz15CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldApAQCAtMjc2LDYgKzM0Myw3IEBACiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CkBAIC0yOTMsMTQgKzM2MSwxMiBAQAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCiBDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAogQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCiBDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM1Miw2ICs0MTgsNyBAQAogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9TSVQ9bQorIyBDT05GSUdfSVBWNl9TSVRfNlJEIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTM2MCw2ICs0MjcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX1NUUD1tCkBAIC0zNzUsNiArNDQzLDggQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4Nyw4ICs0NTcsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDAxLDYgKzQ3Niw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQxMyw5ICs0ODksOSBAQAogQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC00OTAsNyArNTY2LDYgQEAKICMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKICMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAogCiAjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwpAQCAtNDk4LDcgKzU3Myw3IEBACiBDT05GSUdfTVREX1VCST1tCiBDT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgogQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQotQ09ORklHX01URF9VQklfR0xVRUJJPXkKK0NPTkZJR19NVERfVUJJX0dMVUVCST1tCiAKICMKICMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCkBAIC01MTYsNiArNTkxLDcgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKQEAgLTUyOCwxNCArNjA0LDI1IEBACiBDT05GSUdfWElMSU5YX1NZU0FDRT1tCiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTU4LDEwICs2NDUsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01NzgsNiArNjYxLDcgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CkBAIC01ODcsNyArNjcxLDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNjA4LDYgKzY5Niw4IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15CkBAIC02MjYsNyArNzE2LDEwIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTYzNCw2ICs3MjcsNyBAQAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC02NDQsOSArNzM4LDEzIEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfTExfVEVNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNjU2LDYgKzc1NCw3IEBACiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CkBAIC02NjUsMTQgKzc2NCwxNCBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02OTUsNiArNzk0LDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTcxMyw2ICs4MTMsNyBAQAogIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzI9bQorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTc0Nyw2ICs4NDgsNyBAQAogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtNzY0LDYgKzg2Niw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPW0KIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj1tCiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIENPTkZJR19JMkNfQUxHT0JJVD1tCkBAIC04MDcsMTEgKzkxMCw2IEBACiAjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAogCiAjCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwogIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKICMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldApAQCAtODIwLDIwICs5MTgsMTcgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CkBAIC04NTUsMTYgKzk1MCwyMSBAQAogIwogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCisjIENPTkZJR19HUElPX0NTNTUzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODg0LDI4ICs5ODQsMTUgQEAKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05NjEsNiArMTA0OCw3IEBACiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTk0LDE5ICsxMDgyLDIyIEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0JJR19FTkRJQU5fTU1JTz15CiBDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9ERVNDPXkKKyMgQ09ORklHX1hQU19VU0JfSENEX1hJTElOWCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CkBAIC0xMDMwLDExICsxMTIxLDExIEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKIENPTkZJR19VU0JfU1RPUkFHRT1tCiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMDc1LDcgKzExNjYsNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTEwODMsNiArMTE3Myw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xMDkxLDYgKzExODIsNyBAQAogIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKICMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKQEAgLTExMDAsNyArMTE5MiwxMiBAQAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC0xMTEwLDYgKzEyMDcsNyBAQAogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz1tCisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CkBAIC0xMTE5LDExICsxMjE3LDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTEzMyw2ICsxMjMzLDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtMTIwNiw3ICsxMzExLDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTI2MSw2ICsxMzY1LDcgQEAKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTEyNzgsMTEgKzEzODMsMTMgQEAKIENPTkZJR19aTElCX0RFRkxBVEU9eQogQ09ORklHX0xaT19DT01QUkVTUz1tCiBDT05GSUdfTFpPX0RFQ09NUFJFU1M9bQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEyOTIsNiArMTM5OSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTMwMCwxNiArMTQwOCwyMyBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMzIxLDM1ICsxNDM2LDQzIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKQEAgLTEzNjMsMTMgKzE0ODYsMTYgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTM3OCwxMCArMTUwNCwxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtMTQwOSwxMSArMTUzNywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTQ1MCw2ICsxNTgwLDcgQEAKICMgQ29tcHJlc3Npb24KICMKIENPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0xaTz1tCiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwppbmRleCA3YjM4MDRhLi5iNWIyNTk5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCkBAIC0xMzcsOCArMTM3LDkgQEAKIENPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19LUFJPQkVTPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQpAQCAtMTkxLDYgKzE5Miw3IEBACiBDT05GSUdfTFBBUkNGRz15CiBDT05GSUdfUFBDX1NNTFBBUj15CiBDT05GSUdfQ01NPXkKK0NPTkZJR19EVEw9eQogQ09ORklHX1BQQ19JU0VSSUVTPXkKIAogIwpAQCAtMzI4LDkgKzMzMCwxMCBAQAogQ09ORklHX0tFWEVDPXkKICMgQ09ORklHX1BIWVBfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKLSMgQ09ORklHX05VTUEgaXMgbm90IHNldAorQ09ORklHX05VTUE9eQorQ09ORklHX05PREVTX1NISUZUPTgKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MjU2CiBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKQEAgLTMzOSw2ICszNDIsNyBAQAogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CiBDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15CiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKQEAgLTM1NCwxMSArMzU4LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX05PREVTX1NQQU5fT1RIRVJfTk9ERVM9eQogQ09ORklHX0FSQ0hfTUVNT1JZX1BST0JFPXkKIENPTkZJR19QUENfSEFTX0hBU0hfNjRLPXkKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKLSMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfU01UPXkKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIENPTkZJR19FWFRSQV9UQVJHRVRTPSIiCkBAIC03OTAsMTIgKzc5NSwxMiBAQAogQ09ORklHX1NDU0lfSVBSX1RSQUNFPXkKIENPTkZJR19TQ1NJX0lQUl9EVU1QPXkKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUUxBX0ZDPW0KICMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xQRkM9bQogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotQ09ORklHX1NDU0lfREVCVUc9bQorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKQEAgLTg2Nyw5ICs4NzIsOCBAQAogQ09ORklHX01EX0xJTkVBUj15CiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKLUNPTkZJR19NRF9SQUlEMTA9eQotQ09ORklHX01EX1JBSUQ0NTY9eQotQ09ORklHX01EX1JBSUQ1X1JFU0hBUEU9eQorQ09ORklHX01EX1JBSUQxMD1tCitDT05GSUdfTURfUkFJRDQ1Nj1tCiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQogQ09ORklHX0JMS19ERVZfRE09eQpAQCAtOTg0LDcgKzk4OCw3IEBACiBDT05GSUdfQUNFTklDX09NSVRfVElHT05fST15CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorQ09ORklHX0UxMDAwRT1tCiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldApAQCAtMTAwNiwxOSArMTAxMCwxOSBAQAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QxPW0KK0NPTkZJR19DSEVMU0lPX1QzPW0KIENPTkZJR19FSEVBPW0KICMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorQ09ORklHX0lYR0JFPW0KIENPTkZJR19JWEdCPW0KLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CitDT05GSUdfUzJJTz1tCitDT05GSUdfTVlSSTEwR0U9bQorQ09ORklHX05FVFhFTl9OSUM9bQogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKIENPTkZJR19QQVNFTUlfTUFDPXkKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NTFg0X0VOPW0KK0NPTkZJR19NTFg0X0NPUkU9bQogIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldApAQCAtMTE2OSw3ICsxMTczLDcgQEAKIENPTkZJR19IQVNfVFhYOV9TRVJJQUw9eQogQ09ORklHX1NFUklBTF9UWFg5X05SX1VBUlRTPTYKIENPTkZJR19TRVJJQUxfVFhYOV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9KU009bQogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtMTU4Niw3ICsxNTkwLDcgQEAKIENPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049bQogIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CiAKQEAgLTE2ODYsMjEgKzE2OTAsMjIgQEAKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkQ9bQotIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX01BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEPW0KK0NPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTPW0KK0NPTkZJR19JTkZJTklCQU5EX1VTRVJfTUVNPXkKIENPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQogQ09ORklHX0lORklOSUJBTkRfTVRIQ0E9bQogQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUc9eQotIyBDT05GSUdfSU5GSU5JQkFORF9JUEFUSCBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUEFUSD1tCiBDT05GSUdfSU5GSU5JQkFORF9FSENBPW0KICMgQ09ORklHX0lORklOSUJBTkRfQU1TTzExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19NTFg0X0lORklOSUJBTkQ9bQogIyBDT05GSUdfSU5GSU5JQkFORF9ORVMgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQotIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTSBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTT15CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRz15CiAjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEEgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORF9TUlAgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfU1JQPW0KIENPTkZJR19JTkZJTklCQU5EX0lTRVI9bQogQ09ORklHX0VEQUM9eQogCkBAIC0xNzk4LDcgKzE4MDMsNyBAQAogQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQogQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKLUNPTkZJR19KRlNfRlM9eQorQ09ORklHX0pGU19GUz1tCiBDT05GSUdfSkZTX1BPU0lYX0FDTD15CiBDT05GSUdfSkZTX1NFQ1VSSVRZPXkKICMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CkBAIC0xODExLDE0ICsxODE2LDIyIEBACiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX09DRlMyX0ZTPW0KK0NPTkZJR19PQ0ZTMl9GU19PMkNCPW0KK0NPTkZJR19PQ0ZTMl9GU19TVEFUUz15CitDT05GSUdfT0NGUzJfREVCVUdfTUFTS0xPRz15CisjIENPTkZJR19PQ0ZTMl9ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9DT01QQVRfSkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CVFJGU19GUz1tCitDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19OSUxGUzJfRlM9bQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9bQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTRV9GUz1tCiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtMTg1MSw3ICsxODY0LDcgQEAKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfSFVHRVRMQkZTPXkKIENPTkZJR19IVUdFVExCX1BBR0U9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC0yMDc1LDcgKzIwODgsNyBAQAogQ09ORklHX1hNT05fRElTQVNTRU1CTFk9eQogQ09ORklHX0RFQlVHR0VSPXkKIENPTkZJR19JUlFTVEFDS1M9eQotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVklSUV9ERUJVRz15CiBDT05GSUdfQk9PVFhfVEVYVD15CiAjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCmluZGV4IGNhOWZmOWEuLjQxZGUzZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCkBAIC0xNTksNyArMTU5LDcgQEAKIENPTkZJR19LTU9EPXkKIENPTkZJR19TVE9QX01BQ0hJTkU9eQogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQogQ09ORklHX0JMS19ERVZfQlNHPXkKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DS19DT01QQVQ9eQpAQCAtMTkxLDYgKzE5MSw3IEBACiBDT05GSUdfTFBBUkNGRz15CiBDT05GSUdfUFBDX1NNTFBBUj15CiBDT05GSUdfQ01NPXkKK0NPTkZJR19EVEw9eQogIyBDT05GSUdfUFBDX0lTRVJJRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKQEAgLTI1NSw3ICsyNTYsOCBAQAogIyBDT05GSUdfUEhZUF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQogQ09ORklHX05VTUE9eQotQ09ORklHX05PREVTX1NISUZUPTQKK0NPTkZJR19OT0RFU19TSElGVD04CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTI1NgogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKQEAgLTI3MCw3ICsyNzIsOSBAQAogQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEU9eQogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQPXkKLSMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19NRU1PUllfSE9UUExVRz15CitDT05GSUdfTUVNT1JZX0hPVFBMVUdfU1BBUlNFPXkKK0NPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQpAQCAtNzA1LDcgKzcwOSw3IEBACiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKIENPTkZJR19NRF9SQUlEMTA9bQotIyBDT05GSUdfTURfUkFJRDQ1NiBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDQ1Nj1tCiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQogQ09ORklHX0JMS19ERVZfRE09eQpAQCAtODAwLDcgKzgwNCw3IEBACiBDT05GSUdfQUNFTklDX09NSVRfVElHT05fST15CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorQ09ORklHX0UxMDAwRT1tCiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldApAQCAtODE4LDE4ICs4MjIsMTggQEAKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UMT1tCitDT05GSUdfQ0hFTFNJT19UMz1tCiBDT05GSUdfRUhFQT15CiAjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKK0NPTkZJR19JWEdCRT1tCiBDT05GSUdfSVhHQj1tCiBDT05GSUdfUzJJTz1tCi0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKK0NPTkZJR19NWVJJMTBHRT1tCitDT05GSUdfTkVUWEVOX05JQz1tCiAjIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorQ09ORklHX01MWDRfRU49bQorQ09ORklHX01MWDRfQ09SRT1tCiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CkBAIC04OTQsNyArODk4LDcgQEAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPW0KICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI3MSw3ICsxMjc1LDcgQEAKIENPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKK0NPTkZJR19VU0JfTU9OPW0KICMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCkBAIC0xMzExLDcgKzEzMTUsNyBAQAogIwogIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCiAjCi1DT05GSUdfVVNCX1NUT1JBR0U9eQorQ09ORklHX1VTQl9TVE9SQUdFPW0KICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CkBAIC0xMzIyLDcgKzEzMjYsNyBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0g9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldApAQCAtMTM3NywxNyArMTM4MSwxNyBAQAogQ09ORklHX0lORklOSUJBTkRfQUREUl9UUkFOUz15CiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQT1tCiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRz15Ci0jIENPTkZJR19JTkZJTklCQU5EX0lQQVRIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0lQQVRIPW0KIENPTkZJR19JTkZJTklCQU5EX0VIQ0E9bQogIyBDT05GSUdfSU5GSU5JQkFORF9BTVNPMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0lORklOSUJBTkQgaXMgbm90IHNldAorQ09ORklHX01MWDRfSU5GSU5JQkFORD1tCiAjIENPTkZJR19JTkZJTklCQU5EX05FUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCi0jIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0NNIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0lQT0lCX0NNPXkKIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHPXkKICMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQSBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORF9TUlA9bQotIyBDT05GSUdfSU5GSU5JQkFORF9JU0VSIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0lTRVI9bQogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CkBAIC0xNDQzLDYgKzE0NDcsOSBAQAogQ09ORklHX09DRlMyX0RFQlVHX01BU0tMT0c9eQogIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfQ09NUEFUX0pCRCBpcyBub3Qgc2V0CitDT05GSUdfQlRSRlNfRlM9bQorQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfTklMRlMyX0ZTPW0KIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTQ1NSw4ICsxNDYyLDggQEAKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogQ09ORklHX0lTTzk2NjBfRlM9eQotQ09ORklHX0pPTElFVD15Ci1DT05GSUdfWklTT0ZTPXkKKyMgQ09ORklHX0pPTElFVCBpcyBub3Qgc2V0CisjIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAogQ09ORklHX1VERl9GUz1tCiBDT05GSUdfVURGX05MUz15CiAKQEAgLTE1MDgsMTQgKzE1MTUsMTQgQEAKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15Ci1DT05GSUdfTkZTRD15CitDT05GSUdfTkZTRD1tCiBDT05GSUdfTkZTRF9WMl9BQ0w9eQogQ09ORklHX05GU0RfVjM9eQogQ09ORklHX05GU0RfVjNfQUNMPXkKIENPTkZJR19ORlNEX1Y0PXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19FWFBPUlRGUz1tCiBDT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQpAQCAtMTY4MSwxMiArMTY4OCwxMiBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQ0FMTF9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKK0NPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUPXkKK0NPTkZJR19GVFJfRklYVVBfU0VMRlRFU1Q9eQorQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1Q9eQogQ09ORklHX1hNT049eQogQ09ORklHX1hNT05fREVGQVVMVD15CiBDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXNtLWNvbXBhdC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2FzbS1jb21wYXQuaAppbmRleCA4ZjBmZTc5Li5jMWI0NzVhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXNtLWNvbXBhdC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hc20tY29tcGF0LmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9BU01fUE9XRVJQQ19BU01fQ09NUEFUX0gKIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wcGMtb3Bjb2RlLmg+CiAKICNpZmRlZiBfX0FTU0VNQkxZX18KICMgIGRlZmluZSBzdHJpbmdpZnlfaW5fYyguLi4pCV9fVkFfQVJHU19fCkBAIC0yNCw3ICsyNSw3IEBACiAjZGVmaW5lIFBQQ19MT05HCXN0cmluZ2lmeV9pbl9jKC5sbG9uZykKICNkZWZpbmUgUFBDX0xPTkdfQUxJR04Jc3RyaW5naWZ5X2luX2MoLmJhbGlnbiA4KQogI2RlZmluZSBQUENfVExORUkJc3RyaW5naWZ5X2luX2ModGRuZWkpCi0jZGVmaW5lIFBQQ19MTEFSWAlzdHJpbmdpZnlfaW5fYyhsZGFyeCkKKyNkZWZpbmUgUFBDX0xMQVJYKHQsIGEsIGIsIGVoKQlQUENfTERBUlgodCwgYSwgYiwgZWgpCiAjZGVmaW5lIFBQQ19TVExDWAlzdHJpbmdpZnlfaW5fYyhzdGRjeC4pCiAjZGVmaW5lIFBQQ19DTlRMWkwJc3RyaW5naWZ5X2luX2MoY250bHpkKQogCkBAIC00Niw3ICs0Nyw3IEBACiAjZGVmaW5lIFBQQ19MT05HCXN0cmluZ2lmeV9pbl9jKC5sb25nKQogI2RlZmluZSBQUENfTE9OR19BTElHTglzdHJpbmdpZnlfaW5fYyguYmFsaWduIDQpCiAjZGVmaW5lIFBQQ19UTE5FSQlzdHJpbmdpZnlfaW5fYyh0d25laSkKLSNkZWZpbmUgUFBDX0xMQVJYCXN0cmluZ2lmeV9pbl9jKGx3YXJ4KQorI2RlZmluZSBQUENfTExBUlgodCwgYSwgYiwgZWgpCVBQQ19MV0FSWCh0LCBhLCBiLCBlaCkKICNkZWZpbmUgUFBDX1NUTENYCXN0cmluZ2lmeV9pbl9jKHN0d2N4LikKICNkZWZpbmUgUFBDX0NOVExaTAlzdHJpbmdpZnlfaW5fYyhjbnRsencpCiAjZGVmaW5lIFBQQ19NVE9DUkYJc3RyaW5naWZ5X2luX2MobXRjcmYpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggNDAxMjQ4My4uYjhmMTUyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtNDksMTMgKzQ5LDEzIEBACiAJaW50IHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTIJCSMgYXRvbWljX2FkZF9yZXR1cm5cblwKIAlhZGQJJTAsJTEsJTBcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMikKICIJc3R3Y3guCSUwLDAsJTIgXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAodCkKIAk6ICJyIiAoYSksICJyIiAoJnYtPmNvdW50ZXIpCiAJOiAiY2MiLCAibWVtb3J5Iik7CkBAIC04NSwxMyArODUsMTMgQEAKIAlpbnQgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbHdhcngJJTAsMCwlMgkJIyBhdG9taWNfc3ViX3JldHVyblxuXAogCXN1YmYJJTAsJTEsJTBcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMikKICIJc3R3Y3guCSUwLDAsJTIgXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAodCkKIAk6ICJyIiAoYSksICJyIiAoJnYtPmNvdW50ZXIpCiAJOiAiY2MiLCAibWVtb3J5Iik7CkBAIC0xMTksMTMgKzExOSwxMyBAQAogCWludCB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUxCQkjIGF0b21pY19pbmNfcmV0dXJuXG5cCiAJYWRkaWMJJTAsJTAsMVxuIgogCVBQQzQwNV9FUlI3NygwLCUxKQogIglzdHdjeC4JJTAsMCwlMSBcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiICh0KQogCTogInIiICgmdi0+Y291bnRlcikKIAk6ICJjYyIsICJ4ZXIiLCAibWVtb3J5Iik7CkBAIC0xNjMsMTMgKzE2MywxMyBAQAogCWludCB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUxCQkjIGF0b21pY19kZWNfcmV0dXJuXG5cCiAJYWRkaWMJJTAsJTAsLTFcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKICIJc3R3Y3guCSUwLDAsJTFcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiICh0KQogCTogInIiICgmdi0+Y291bnRlcikKIAk6ICJjYyIsICJ4ZXIiLCAibWVtb3J5Iik7CkBAIC0xOTQsNyArMTk0LDcgQEAKIAlpbnQgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTEJCSMgYXRvbWljX2FkZF91bmxlc3NcblwKIAljbXB3CTAsJTAsJTMgXG5cCiAJYmVxLQkyZiBcblwKQEAgLTIwMiw3ICsyMDIsNyBAQAogCVBQQzQwNV9FUlI3NygwLCUyKQogIglzdHdjeC4JJTAsMCwlMSBcblwKIAlibmUtCTFiIFxuIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKICIJc3ViZgklMCwlMiwlMCBcblwKIDI6IgogCTogIj0mciIgKHQpCkBAIC0yMjcsNyArMjI3LDcgQEAKIAlpbnQgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbHdhcngJJTAsMCwlMQkJIyBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlXG5cCiAJY21wd2kJJTAsMVxuXAogCWFkZGkJJTAsJTAsLTFcblwKQEAgLTIzNSw3ICsyMzUsNyBAQAogCVBQQzQwNV9FUlI3NygwLCUxKQogIglzdHdjeC4JJTAsMCwlMVxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCSJcblwKIDI6Igk6ICI9JmIiICh0KQogCTogInIiICgmdi0+Y291bnRlcikKQEAgLTI4NiwxMiArMjg2LDEyIEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsZGFyeAklMCwwLCUyCQkjIGF0b21pYzY0X2FkZF9yZXR1cm5cblwKIAlhZGQJJTAsJTEsJTBcblwKIAlzdGRjeC4JJTAsMCwlMiBcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiICh0KQogCTogInIiIChhKSwgInIiICgmdi0+Y291bnRlcikKIAk6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTMyMCwxMiArMzIwLDEyIEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsZGFyeAklMCwwLCUyCQkjIGF0b21pYzY0X3N1Yl9yZXR1cm5cblwKIAlzdWJmCSUwLCUxLCUwXG5cCiAJc3RkY3guCSUwLDAsJTIgXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAodCkKIAk6ICJyIiAoYSksICJyIiAoJnYtPmNvdW50ZXIpCiAJOiAiY2MiLCAibWVtb3J5Iik7CkBAIC0zNTIsMTIgKzM1MiwxMiBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbGRhcngJJTAsMCwlMQkJIyBhdG9taWM2NF9pbmNfcmV0dXJuXG5cCiAJYWRkaWMJJTAsJTAsMVxuXAogCXN0ZGN4LgklMCwwLCUxIFxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgInhlciIsICJtZW1vcnkiKTsKQEAgLTM5NCwxMiArMzk0LDEyIEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsZGFyeAklMCwwLCUxCQkjIGF0b21pYzY0X2RlY19yZXR1cm5cblwKIAlhZGRpYwklMCwlMCwtMVxuXAogCXN0ZGN4LgklMCwwLCUxXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAodCkKIAk6ICJyIiAoJnYtPmNvdW50ZXIpCiAJOiAiY2MiLCAieGVyIiwgIm1lbW9yeSIpOwpAQCAtNDE5LDEzICs0MTksMTMgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWxkYXJ4CSUwLDAsJTEJCSMgYXRvbWljNjRfZGVjX2lmX3Bvc2l0aXZlXG5cCiAJYWRkaWMuCSUwLCUwLC0xXG5cCiAJYmx0LQkyZlxuXAogCXN0ZGN4LgklMCwwLCUxXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJIlxuXAogMjoiCTogIj0mciIgKHQpCiAJOiAiciIgKCZ2LT5jb3VudGVyKQpAQCAtNDUxLDE0ICs0NTEsMTQgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsZGFyeAklMCwwLCUxCQkjIGF0b21pY19hZGRfdW5sZXNzXG5cCiAJY21wZAkwLCUwLCUzIFxuXAogCWJlcS0JMmYgXG5cCiAJYWRkCSUwLCUyLCUwIFxuIgogIglzdGRjeC4JJTAsMCwlMSBcblwKIAlibmUtCTFiIFxuIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKICIJc3ViZgklMCwlMiwlMCBcblwKIDI6IgogCTogIj0mciIgKHQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggNTZmMmYyZS4uMzA5NjRhZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtNjUsNyArNjUsNyBAQAogCXVuc2lnbmVkIGxvbmcgKnAgPSAodW5zaWduZWQgbG9uZyAqKV9wOwlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCVwKIAlwcmVmaXgJCQkJCVwKLSIxOiIJUFBDX0xMQVJYICIlMCwwLCUzXG4iCQkJXAorIjE6IglQUENfTExBUlgoJTAsMCwlMywwKSAiXG4iCQlcCiAJc3RyaW5naWZ5X2luX2Mob3ApICIlMCwlMCwlMlxuIgkJXAogCVBQQzQwNV9FUlI3NygwLCUzKQkJCVwKIAlQUENfU1RMQ1ggIiUwLDAsJTNcbiIJCQlcCkBAIC03OCw3ICs3OCw3IEBACiAKIERFRklORV9CSVRPUChzZXRfYml0cywgb3IsICIiLCAiIikKIERFRklORV9CSVRPUChjbGVhcl9iaXRzLCBhbmRjLCAiIiwgIiIpCi1ERUZJTkVfQklUT1AoY2xlYXJfYml0c191bmxvY2ssIGFuZGMsIExXU1lOQ19PTl9TTVAsICIiKQorREVGSU5FX0JJVE9QKGNsZWFyX2JpdHNfdW5sb2NrLCBhbmRjLCBQUENfUkVMRUFTRV9CQVJSSUVSLCAiIikKIERFRklORV9CSVRPUChjaGFuZ2VfYml0cywgeG9yLCAiIiwgIiIpCiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCkBAIC0xMDMsMzEgKzEwMywzNSBAQAogCiAvKiBMaWtlIERFRklORV9CSVRPUCgpLCB3aXRoIGNoYW5nZXMgdG8gdGhlIGFyZ3VtZW50cyB0byAnb3AnIGFuZCB0aGUgb3V0cHV0CiAgKiBvcGVyYW5kcy4gKi8KLSNkZWZpbmUgREVGSU5FX1RFU1RPUChmbiwgb3AsIHByZWZpeCwgcG9zdGZpeCkJXAotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBmbigJCVwKLQkJdW5zaWduZWQgbG9uZyBtYXNrLAkJXAotCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpfcCkJXAotewkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIG9sZCwgdDsJCQlcCi0JdW5zaWduZWQgbG9uZyAqcCA9ICh1bnNpZ25lZCBsb25nICopX3A7CVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJXAotCXByZWZpeAkJCQkJXAotIjE6IglQUENfTExBUlggIiUwLDAsJTNcbiIJCQlcCi0Jc3RyaW5naWZ5X2luX2Mob3ApICIlMSwlMCwlMlxuIgkJXAotCVBQQzQwNV9FUlI3NygwLCUzKQkJCVwKLQlQUENfU1RMQ1ggIiUxLDAsJTNcbiIJCQlcCi0JImJuZS0gMWJcbiIJCQkJXAotCXBvc3RmaXgJCQkJCVwKLQk6ICI9JnIiIChvbGQpLCAiPSZyIiAodCkJCVwKLQk6ICJyIiAobWFzayksICJyIiAocCkJCQlcCi0JOiAiY2MiLCAibWVtb3J5Iik7CQkJXAotCXJldHVybiAob2xkICYgbWFzayk7CQkJXAorI2RlZmluZSBERUZJTkVfVEVTVE9QKGZuLCBvcCwgcHJlZml4LCBwb3N0Zml4LCBlaCkJXAorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBmbigJCQlcCisJCXVuc2lnbmVkIGxvbmcgbWFzaywJCQlcCisJCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKl9wKQkJXAorewkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBvbGQsIHQ7CQkJCVwKKwl1bnNpZ25lZCBsb25nICpwID0gKHVuc2lnbmVkIGxvbmcgKilfcDsJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCVwKKwlwcmVmaXgJCQkJCQlcCisiMToiCVBQQ19MTEFSWCglMCwwLCUzLGVoKSAiXG4iCQkJXAorCXN0cmluZ2lmeV9pbl9jKG9wKSAiJTEsJTAsJTJcbiIJCQlcCisJUFBDNDA1X0VSUjc3KDAsJTMpCQkJCVwKKwlQUENfU1RMQ1ggIiUxLDAsJTNcbiIJCQkJXAorCSJibmUtIDFiXG4iCQkJCQlcCisJcG9zdGZpeAkJCQkJCVwKKwk6ICI9JnIiIChvbGQpLCAiPSZyIiAodCkJCQlcCisJOiAiciIgKG1hc2spLCAiciIgKHApCQkJCVwKKwk6ICJjYyIsICJtZW1vcnkiKTsJCQkJXAorCXJldHVybiAob2xkICYgbWFzayk7CQkJCVwKIH0KIAotREVGSU5FX1RFU1RPUCh0ZXN0X2FuZF9zZXRfYml0cywgb3IsIExXU1lOQ19PTl9TTVAsIElTWU5DX09OX1NNUCkKLURFRklORV9URVNUT1AodGVzdF9hbmRfc2V0X2JpdHNfbG9jaywgb3IsICIiLCBJU1lOQ19PTl9TTVApCi1ERUZJTkVfVEVTVE9QKHRlc3RfYW5kX2NsZWFyX2JpdHMsIGFuZGMsIExXU1lOQ19PTl9TTVAsIElTWU5DX09OX1NNUCkKLURFRklORV9URVNUT1AodGVzdF9hbmRfY2hhbmdlX2JpdHMsIHhvciwgTFdTWU5DX09OX1NNUCwgSVNZTkNfT05fU01QKQorREVGSU5FX1RFU1RPUCh0ZXN0X2FuZF9zZXRfYml0cywgb3IsIFBQQ19SRUxFQVNFX0JBUlJJRVIsCisJICAgICAgUFBDX0FDUVVJUkVfQkFSUklFUiwgMCkKK0RFRklORV9URVNUT1AodGVzdF9hbmRfc2V0X2JpdHNfbG9jaywgb3IsICIiLAorCSAgICAgIFBQQ19BQ1FVSVJFX0JBUlJJRVIsIDEpCitERUZJTkVfVEVTVE9QKHRlc3RfYW5kX2NsZWFyX2JpdHMsIGFuZGMsIFBQQ19SRUxFQVNFX0JBUlJJRVIsCisJICAgICAgUFBDX0FDUVVJUkVfQkFSUklFUiwgMCkKK0RFRklORV9URVNUT1AodGVzdF9hbmRfY2hhbmdlX2JpdHMsIHhvciwgUFBDX1JFTEVBU0VfQkFSUklFUiwKKwkgICAgICBQUENfQUNRVUlSRV9CQVJSSUVSLCAwKQogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfc2V0X2JpdCh1bnNpZ25lZCBsb25nIG5yLAogCQkJCSAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQpAQCAtMTU4LDcgKzE2Miw3IEBACiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19jbGVhcl9iaXRfdW5sb2NrKGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhMV1NZTkNfT05fU01QICIiIDo6OiAibWVtb3J5Iik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oUFBDX1JFTEVBU0VfQkFSUklFUiAiIiA6OjogIm1lbW9yeSIpOwogCV9fY2xlYXJfYml0KG5yLCBhZGRyKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaAppbmRleCA4MGYzMTVlLi5hYmI4MzNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaApAQCAtMzgxLDkgKzM4MSw5IEBACiAjZGVmaW5lIENQVV9GVFJTX0dFTkVSSUNfMzIJKENQVV9GVFJfQ09NTU9OIHwgQ1BVX0ZUUl9OT0RTSVNSQUxJR04pCiAKIC8qIDY0LWJpdCBDUFVzICovCi0jZGVmaW5lIENQVV9GVFJTX1BPV0VSMwkoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKKyNkZWZpbmUgQ1BVX0ZUUlNfUE9XRVIzCShDUFVfRlRSX1VTRV9UQiB8IFwKIAkgICAgQ1BVX0ZUUl9JQUJSIHwgQ1BVX0ZUUl9QUENfTEUpCi0jZGVmaW5lIENQVV9GVFJTX1JTNjQJKENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9MV1NZTkMgfCBcCisjZGVmaW5lIENQVV9GVFJTX1JTNjQJKENQVV9GVFJfVVNFX1RCIHwgXAogCSAgICBDUFVfRlRSX0lBQlIgfCBcCiAJICAgIENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX0NUUkwpCiAjZGVmaW5lIENQVV9GVFJTX1BPV0VSNAkoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0aW1lLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGltZS5oCmluZGV4IGZhMTlmM2YuLjhiZGM2YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRpbWUuaApAQCAtNzMsMTAgKzczLDkgQEAKIHN0YXRpYyBpbmxpbmUgY3B1dGltZV90IGNwdXRpbWVfdG9fc2NhbGVkKGNvbnN0IGNwdXRpbWVfdCBjdCkKIHsKIAlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU1BVUlIpICYmCi0JICAgIHBlcl9jcHUoY3B1dGltZV9sYXN0X2RlbHRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpKQotCQlyZXR1cm4gY3QgKgotCQkJcGVyX2NwdShjcHV0aW1lX3NjYWxlZF9sYXN0X2RlbHRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpLwotCQkJcGVyX2NwdShjcHV0aW1lX2xhc3RfZGVsdGEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJICAgIF9fZ2V0X2NwdV92YXIoY3B1dGltZV9sYXN0X2RlbHRhKSkKKwkJcmV0dXJuIGN0ICogX19nZXRfY3B1X3ZhcihjcHV0aW1lX3NjYWxlZF9sYXN0X2RlbHRhKSAvCisJCQkgICAgX19nZXRfY3B1X3ZhcihjcHV0aW1lX2xhc3RfZGVsdGEpOwogCXJldHVybiBjdDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IDE3ODI4YWQuLmMzNzZlZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTIzNSwxNCArMjM1LDEwIEBACiAjaWZkZWYgX19wb3dlcnBjNjRfXwogIyBkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KQkJCQkJXAogZG8gewkJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzID0gMDsJCQkJXAogCWlmICgoZXgpLmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpCQlcCi0JCW5ld19mbGFncyA9IF9USUZfMzJCSVQ7CQkJCVwKLQlpZiAoKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MgJiBfVElGXzMyQklUKQkJXAotCSAgICAhPSBuZXdfZmxhZ3MpCQkJCQlcCi0JCXNldF90aHJlYWRfZmxhZyhUSUZfQUJJX1BFTkRJTkcpOwkJXAorCQlzZXRfdGhyZWFkX2ZsYWcoVElGXzMyQklUKTsJCQlcCiAJZWxzZQkJCQkJCQlcCi0JCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9BQklfUEVORElORyk7CQlcCisJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl8zMkJJVCk7CQkJXAogCWlmIChwZXJzb25hbGl0eShjdXJyZW50LT5wZXJzb25hbGl0eSkgIT0gUEVSX0xJTlVYMzIpCVwKIAkJc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCB8CQkJXAogCQkJKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgKH5QRVJfTUFTSykpKTsJXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZlYXR1cmUtZml4dXBzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmVhdHVyZS1maXh1cHMuaAppbmRleCBjYmQ0ZGZhLi45NmE3ZDA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmVhdHVyZS1maXh1cHMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmVhdHVyZS1maXh1cHMuaApAQCAtMTY1LDcgKzE2NSw3IEBACiAJLnB1c2hzZWN0aW9uIHNlY3QsImEiOwkJCQlcCiAJLmFsaWduIDI7CQkJCQlcCiBsYWJlbCMjMzoJCQkJCSAgICAgICAJXAotCS5sb25nIGxhYmVsIyMxYi1sYWJlbCMjM2I7CQkJXAorCUZUUl9FTlRSWV9PRkZTRVQgbGFiZWwjIzFiLWxhYmVsIyMzYjsJCVwKIAkucG9wc2VjdGlvbjsKIAogI2VuZGlmIC8qIF9fQVNNX1BPV0VSUENfRkVBVFVSRV9GSVhVUFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Z1dGV4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnV0ZXguaAppbmRleCA5Njk2Y2MzLi43YzU4OWVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnV0ZXguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnV0ZXguaApAQCAtMTEsNyArMTEsNyBAQAogCiAjZGVmaW5lIF9fZnV0ZXhfYXRvbWljX29wKGluc24sIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpIFwKICAgX19hc21fXyBfX3ZvbGF0aWxlICggXAotCUxXU1lOQ19PTl9TTVAgXAorCVBQQ19SRUxFQVNFX0JBUlJJRVIgXAogIjE6CWx3YXJ4CSUwLDAsJTJcbiIgXAogCWluc24gXAogCVBQQzQwNV9FUlI3NygwLCAlMikgXApAQCAtOTAsMTQgKzkwLDE0IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgTFdTWU5DX09OX1NNUAorICAgICAgICBQUENfUkVMRUFTRV9CQVJSSUVSCiAiMTogICAgIGx3YXJ4ICAgJTAsMCwlMiAgICAgICAgICMgZnV0ZXhfYXRvbWljX2NtcHhjaGdfaW5hdG9taWNcblwKICAgICAgICAgY21wdyAgICAwLCUwLCUzXG5cCiAgICAgICAgIGJuZS0gICAgM2ZcbiIKICAgICAgICAgUFBDNDA1X0VSUjc3KDAsJTIpCiAiMjogICAgIHN0d2N4LiAgJTQsMCwlMlxuXAogICAgICAgICBibmUtICAgIDFiXG4iCi0gICAgICAgIElTWU5DX09OX1NNUAorICAgICAgICBQUENfQUNRVUlSRV9CQVJSSUVSCiAiMzoJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuXAogNDoJbGkJJTAsJTVcblwKIAliCTNiXG5cCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAppbmRleCBmYjNjMDVhLi4zMTQ3YTI5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGFyZGlycS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTEgKzEsMjkgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9oYXJkaXJxLmg+CisjaWZuZGVmIF9BU01fUE9XRVJQQ19IQVJESVJRX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX0hBUkRJUlFfSAorCisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOworCXVuc2lnbmVkIGludCB0aW1lcl9pcnFzOworCXVuc2lnbmVkIGludCBwbXVfaXJxczsKKwl1bnNpZ25lZCBpbnQgbWNlX2V4Y2VwdGlvbnM7CisJdW5zaWduZWQgaW50IHNwdXJpb3VzX2lycXM7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCitERUNMQVJFX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoaXJxX2NwdXN0YXRfdCwgaXJxX3N0YXQpOworCisjZGVmaW5lIF9fQVJDSF9JUlFfU1RBVAorCisjZGVmaW5lIGxvY2FsX3NvZnRpcnFfcGVuZGluZygpCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLl9fc29mdGlycV9wZW5kaW5nCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXByaW50ayhLRVJOX0NSSVQgInVuZXhwZWN0ZWQgSVJRIHRyYXAgYXQgdmVjdG9yICUwMnhcbiIsIGlycSk7Cit9CisKK2V4dGVybiB1NjQgYXJjaF9pcnFfc3RhdF9jcHUodW5zaWduZWQgaW50IGNwdSk7CisjZGVmaW5lIGFyY2hfaXJxX3N0YXRfY3B1CWFyY2hfaXJxX3N0YXRfY3B1CisKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbG9jYWwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9sb2NhbC5oCmluZGV4IDg0YjQ1N2EuLmNlNThjODAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9sb2NhbC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9sb2NhbC5oCkBAIC0yNCw3ICsyNCw3IEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToiCVBQQ19MTEFSWAkiJTAsMCwlMgkJIyBsb2NhbF9hZGRfcmV0dXJuXG5cCisiMToiCVBQQ19MTEFSWCglMCwwLCUyLDApICIJCQkjIGxvY2FsX2FkZF9yZXR1cm5cblwKIAlhZGQJJTAsJTEsJTBcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMikKIAlQUENfU1RMQ1gJIiUwLDAsJTIgXG5cCkBAIC00Myw3ICs0Myw3IEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToiCVBQQ19MTEFSWAkiJTAsMCwlMgkJIyBsb2NhbF9zdWJfcmV0dXJuXG5cCisiMToiCVBQQ19MTEFSWCglMCwwLCUyLDApICIJCQkjIGxvY2FsX3N1Yl9yZXR1cm5cblwKIAlzdWJmCSUwLCUxLCUwXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTIpCiAJUFBDX1NUTENYCSIlMCwwLCUyIFxuXApAQCAtNjAsNyArNjAsNyBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglQUENfTExBUlgJIiUwLDAsJTEJCSMgbG9jYWxfaW5jX3JldHVyblxuXAorIjE6IglQUENfTExBUlgoJTAsMCwlMSwwKSAiCQkJIyBsb2NhbF9pbmNfcmV0dXJuXG5cCiAJYWRkaWMJJTAsJTAsMVxuIgogCVBQQzQwNV9FUlI3NygwLCUxKQogCVBQQ19TVExDWAkiJTAsMCwlMSBcblwKQEAgLTg3LDcgKzg3LDcgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOiIJUFBDX0xMQVJYCSIlMCwwLCUxCQkjIGxvY2FsX2RlY19yZXR1cm5cblwKKyIxOiIJUFBDX0xMQVJYKCUwLDAsJTEsMCkgIgkJCSMgbG9jYWxfZGVjX3JldHVyblxuXAogCWFkZGljCSUwLCUwLC0xXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAJUFBDX1NUTENYCSIlMCwwLCUxXG5cCkBAIC0xMTcsNyArMTE3LDcgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0iMToiCVBQQ19MTEFSWAkiJTAsMCwlMQkJIyBsb2NhbF9hZGRfdW5sZXNzXG5cCisiMToiCVBQQ19MTEFSWCglMCwwLCUxLDApICIJCQkjIGxvY2FsX2FkZF91bmxlc3NcblwKIAljbXB3CTAsJTAsJTMgXG5cCiAJYmVxLQkyZiBcblwKIAlhZGQJJTAsJTIsJTAgXG4iCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOiIJUFBDX0xMQVJYCSIlMCwwLCUxCQkjIGxvY2FsX2RlY19pZl9wb3NpdGl2ZVxuXAorIjE6IglQUENfTExBUlgoJTAsMCwlMSwwKSAiCQkJIyBsb2NhbF9kZWNfaWZfcG9zaXRpdmVcblwKIAljbXB3aQklMCwxXG5cCiAJYWRkaQklMCwlMCwtMVxuXAogCWJsdC0JMmZcbiIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1MTIxLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTEyMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YTMwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTEyMS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBNUEM1MTIxIFByb3RvdHlwZXMgYW5kIGRlZmluaXRpb25zCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisjaWZuZGVmIF9fQVNNX1BPV0VSUENfTVBDNTEyMV9IX18KKyNkZWZpbmUgX19BU01fUE9XRVJQQ19NUEM1MTIxX0hfXworCisvKiBNUEM1MTJ4IFJlc2V0IG1vZHVsZSByZWdpc3RlcnMgKi8KK3N0cnVjdCBtcGM1MTJ4X3Jlc2V0X21vZHVsZSB7CisJdTMyCXJjd2xyOwkvKiBSZXNldCBDb25maWd1cmF0aW9uIFdvcmQgTG93IFJlZ2lzdGVyICovCisJdTMyCXJjd2hyOwkvKiBSZXNldCBDb25maWd1cmF0aW9uIFdvcmQgSGlnaCBSZWdpc3RlciAqLworCXUzMglyZXNlcnZlZDE7CisJdTMyCXJlc2VydmVkMjsKKwl1MzIJcnNyOwkvKiBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1MzIJcm1yOwkvKiBSZXNldCBNb2RlIFJlZ2lzdGVyICovCisJdTMyCXJwcjsJLyogUmVzZXQgUHJvdGVjdGlvbiBSZWdpc3RlciAqLworCXUzMglyY3I7CS8qIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl1MzIJcmNlcjsJLyogUmVzZXQgQ29udHJvbCBFbmFibGUgUmVnaXN0ZXIgKi8KK307CisKKyNlbmRpZiAvKiBfX0FTTV9QT1dFUlBDX01QQzUxMjFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eF9wc2MuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4X3BzYy5oCmluZGV4IGZiODQxMjAuLjQyNTYxZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4X3BzYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4X3BzYy5oCkBAIC0yNSw3ICsyNSwxMSBAQAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCiAvKiBNYXggbnVtYmVyIG9mIFBTQ3MgKi8KKyNpZmRlZiBDT05GSUdfUFBDX01QQzUxMngKKyNkZWZpbmUgTVBDNTJ4eF9QU0NfTUFYTlVNICAgICAxMgorI2Vsc2UKICNkZWZpbmUgTVBDNTJ4eF9QU0NfTUFYTlVNCTYKKyNlbmRpZgogCiAvKiBQcm9ncmFtbWFibGUgU2VyaWFsIENvbnRyb2xsZXIgKFBTQykgc3RhdHVzIHJlZ2lzdGVyIGJpdHMgKi8KICNkZWZpbmUgTVBDNTJ4eF9QU0NfU1JfVU5FWF9SWAkweDAwMDEKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBpYy5oCmluZGV4IGEwMDI2ODIuLjYxOTEzZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaApAQCAtMjg5LDcgKzI4OSw3IEBACiAjaWZkZWYgQ09ORklHX01QSUNfVTNfSFRfSVJRUwogCS8qIFRoZSBmaXh1cCB0YWJsZSAqLwogCXN0cnVjdCBtcGljX2lycV9maXh1cAkqZml4dXBzOwotCXNwaW5sb2NrX3QJCWZpeHVwX2xvY2s7CisJcmF3X3NwaW5sb2NrX3QJZml4dXBfbG9jazsKICNlbmRpZgogCiAJLyogUmVnaXN0ZXIgYWNjZXNzIG1ldGhvZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL211dGV4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXV0ZXguaAppbmRleCBkYWJjMDFjLi41Mzk5ZjdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXV0ZXguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXV0ZXguaApAQCAtMTUsNyArMTUsNyBAQAogCVBQQzQwNV9FUlI3NygwLCUxKQogIglzdHdjeC4JJTMsMCwlMVxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCSJcblwKIDI6IgogCTogIj0mciIgKHQpCkBAIC0zNSw3ICszNSw3IEBACiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAiCXN0d2N4LgklMCwwLCUxXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAodCkKIAk6ICJyIiAoJnYtPmNvdW50ZXIpCiAJOiAiY2MiLCAibWVtb3J5Iik7CkBAIC00OCw3ICs0OCw3IEBACiAJaW50IHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTEJCSMgbXV0ZXggdW5sb2NrXG5cCiAJYWRkaWMJJTAsJTAsMVxuIgogCVBQQzQwNV9FUlI3NygwLCUxKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhcmFtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYW0uaAppbmRleCAwOTRmNjNkLi45NjVkNDU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYW0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYW0uaApAQCAtMSwyMiArMSBAQAotI2lmbmRlZiBfQVNNX1BPV0VSUENfUEFSQU1fSAotI2RlZmluZSBfQVNNX1BPV0VSUENfUEFSQU1fSAotCi0jaWZkZWYgX19LRVJORUxfXwotI2RlZmluZSBIWgkJQ09ORklHX0haCS8qIGludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KLSNkZWZpbmUgVVNFUl9IWgkJMTAwCQkvKiBmb3IgdXNlciBpbnRlcmZhY2VzIGluICJ0aWNrcyIgKi8KLSNkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJKFVTRVJfSFopCS8qIGZyZXF1ZW5jeSBhdCB3aGljaCB0aW1lcygpIGNvdW50cyAqLwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2lmbmRlZiBIWgotI2RlZmluZSBIWiAxMDAKLSNlbmRpZgotCi0jZGVmaW5lIEVYRUNfUEFHRVNJWkUJNDA5NgotCi0jaWZuZGVmIE5PR1JPVVAKLSNkZWZpbmUgTk9HUk9VUAkJKC0xKQotI2VuZGlmCi0KLSNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLwotCi0jZW5kaWYJLyogX0FTTV9QT1dFUlBDX1BBUkFNX0ggKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYXJhbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMjEyMDdlNS4uODlmMTU4NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yMDksNyArMjA5LDcgQEAKICAqIGNvcnJlc3BvbmRpbmcgSFBURSBpbnRvIHRoZSBoYXNoIHRhYmxlIGFoZWFkIG9mIHRpbWUsIGluc3RlYWQgb2YKICAqIHdhaXRpbmcgZm9yIHRoZSBpbmV2aXRhYmxlIGV4dHJhIGhhc2gtdGFibGUgbWlzcyBleGNlcHRpb24uCiAgKi8KLWV4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90KTsKK2V4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90ICopOwogCiBleHRlcm4gaW50IGd1cF9odWdlcGQoaHVnZXBkX3QgKmh1Z2VwZCwgdW5zaWduZWQgcGRzaGlmdCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IHdyaXRlLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWFjX2ZlYXR1cmUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWFjX2ZlYXR1cmUuaAppbmRleCA4NzdjMzVhLi4wMGVlZGM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1hY19mZWF0dXJlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYWNfZmVhdHVyZS5oCkBAIC0zNzgsNyArMzc4LDcgQEAKICAqIFRob3NlIGFyZSBleHBvcnRlZCBieSBwbWFjIGZlYXR1cmUgZm9yIGludGVybmFsIHVzZSBieSBhcmNoIGNvZGUKICAqIG9ubHkgbGlrZSB0aGUgcGxhdGZvcm0gZnVuY3Rpb24gY2FsbGJhY2tzLCBkbyBub3QgdXNlIGRpcmVjdGx5IGluIGRyaXZlcnMKICAqLwotZXh0ZXJuIHNwaW5sb2NrX3QgZmVhdHVyZV9sb2NrOworZXh0ZXJuIHJhd19zcGlubG9ja190IGZlYXR1cmVfbG9jazsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKnVuaW5vcnRoX25vZGU7CiBleHRlcm4gdTMyIF9faW9tZW0gKnVuaW5vcnRoX2Jhc2U7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oCmluZGV4IGVmOWFhODQuLmFlYTcxNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaApAQCAtMjIsOCArMjIsMTAgQEAKICNkZWZpbmUgUFBDX0lOU1RfRENCWkwJCQkweDdjMjAwN2VjCiAjZGVmaW5lIFBQQ19JTlNUX0lTRUwJCQkweDdjMDAwMDFlCiAjZGVmaW5lIFBQQ19JTlNUX0lTRUxfTUFTSwkJMHhmYzAwMDAzZQorI2RlZmluZSBQUENfSU5TVF9MREFSWAkJCTB4N2MwMDAwYTgKICNkZWZpbmUgUFBDX0lOU1RfTFNXSQkJCTB4N2MwMDA0YWEKICNkZWZpbmUgUFBDX0lOU1RfTFNXWAkJCTB4N2MwMDA0MmEKKyNkZWZpbmUgUFBDX0lOU1RfTFdBUlgJCQkweDdjMDAwMDI5CiAjZGVmaW5lIFBQQ19JTlNUX0xXU1lOQwkJCTB4N2MyMDA0YWMKICNkZWZpbmUgUFBDX0lOU1RfTFhWRDJYCQkJMHg3YzAwMDY5OAogI2RlZmluZSBQUENfSU5TVF9NQ1JYUgkJCTB4N2MwMDA0MDAKQEAgLTU1LDE1ICs1NywzMSBAQAogI2RlZmluZSBfX1BQQ19SQShhKQkoKChhKSAmIDB4MWYpIDw8IDE2KQogI2RlZmluZSBfX1BQQ19SQihiKQkoKChiKSAmIDB4MWYpIDw8IDExKQogI2RlZmluZSBfX1BQQ19SUyhzKQkoKChzKSAmIDB4MWYpIDw8IDIxKQorI2RlZmluZSBfX1BQQ19SVChzKQlfX1BQQ19SUyhzKQogI2RlZmluZSBfX1BQQ19YUyhzKQkoKCgocykgJiAweDFmKSA8PCAyMSkgfCAoKChzKSAmIDB4MjApID4+IDUpKQogI2RlZmluZSBfX1BQQ19UX1RMQih0KQkoKCh0KSAmIDB4MykgPDwgMjEpCiAjZGVmaW5lIF9fUFBDX1dDKHcpCSgoKHcpICYgMHgzKSA8PCAyMSkKKy8qCisgKiBPbmx5IHVzZSB0aGUgbGFyeCBoaW50IGJpdCBvbiA2NGJpdCBDUFVzLiBPbmNlIHdlIHZlcmlmeSBpdCBkb2Vzbid0IGhhdmUKKyAqIGFueSBzaWRlIGVmZmVjdHMgb24gYWxsIDMyYml0IHByb2Nlc3NvcnMsIHdlIGNhbiBkbyB0aGlzIGFsbCB0aGUgdGltZS4KKyAqLworI2lmZGVmIENPTkZJR19QUEM2NAorI2RlZmluZSBfX1BQQ19FSChlaCkJKCgoZWgpICYgMHgxKSA8PCAwKQorI2Vsc2UKKyNkZWZpbmUgX19QUENfRUgoZWgpCTAKKyNlbmRpZgogCiAvKiBEZWFsIHdpdGggaW5zdHJ1Y3Rpb25zIHRoYXQgb2xkZXIgYXNzZW1ibGVycyBhcmVuJ3QgYXdhcmUgb2YgKi8KICNkZWZpbmUJUFBDX0RDQkFMKGEsIGIpCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9EQ0JBTCB8IFwKIAkJCQkJX19QUENfUkEoYSkgfCBfX1BQQ19SQihiKSkKICNkZWZpbmUJUFBDX0RDQlpMKGEsIGIpCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9EQ0JaTCB8IFwKIAkJCQkJX19QUENfUkEoYSkgfCBfX1BQQ19SQihiKSkKKyNkZWZpbmUgUFBDX0xEQVJYKHQsIGEsIGIsIGVoKQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9MREFSWCB8IFwKKwkJCQkJX19QUENfUlQodCkgfCBfX1BQQ19SQShhKSB8IFwKKwkJCQkJX19QUENfUkIoYikgfCBfX1BQQ19FSChlaCkpCisjZGVmaW5lIFBQQ19MV0FSWCh0LCBhLCBiLCBlaCkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfTFdBUlggfCBcCisJCQkJCV9fUFBDX1JUKHQpIHwgX19QUENfUkEoYSkgfCBcCisJCQkJCV9fUFBDX1JCKGIpIHwgX19QUENfRUgoZWgpKQogI2RlZmluZSBQUENfTVNHU05EKGIpCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9NU0dTTkQgfCBcCiAJCQkJCV9fUFBDX1JCKGIpKQogI2RlZmluZSBQUENfUkZDSQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfUkZDSSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtcGNpLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLXBjaS5oCmluZGV4IDI4MjhmOWQuLjQyZmRmZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtcGNpLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1wY2kuaApAQCAtMTM3LDYgKzEzNywxMSBAQAogdm9pZCBlZWhfc3lzZnNfYWRkX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiB2b2lkIGVlaF9zeXNmc19yZW1vdmVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIAorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICplZWhfcGNpX25hbWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpIAoreyAKKwlyZXR1cm4gcGRldiA/IHBjaV9uYW1lKHBkZXYpIDogIjxudWxsPiI7Cit9IAorCiAjZW5kaWYgLyogQ09ORklHX0VFSCAqLwogCiAjZWxzZSAvKiBDT05GSUdfUENJICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggOWVlZDI5ZS4uMjIxYmE2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMTYxLDkgKzE2MSw0MSBAQAogI2lmZGVmIENPTkZJR19QUEMzMgogCXZvaWQJCSpwZ2RpcjsJCS8qIHJvb3Qgb2YgcGFnZS10YWJsZSB0cmVlICovCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQgKENPTkZJR19CT09LRSkKLQl1bnNpZ25lZCBsb25nCWRiY3IwOwkJLyogZGVidWcgY29udHJvbCByZWdpc3RlciB2YWx1ZXMgKi8KKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGhlbHAgdG8gbWFuYWdlIHRoZSB1c2Ugb2YgRGVidWcgQ29udHJvbCBSZWdpc3RlcnMKKwkgKiBvbSB0aGUgQm9va0UgcGxhdGZvcm1zLgorCSAqLworCXVuc2lnbmVkIGxvbmcJZGJjcjA7CiAJdW5zaWduZWQgbG9uZwlkYmNyMTsKKyNpZmRlZiBDT05GSUdfQk9PS0UKKwl1bnNpZ25lZCBsb25nCWRiY3IyOworI2VuZGlmCisJLyoKKwkgKiBUaGUgc3RvcmVkIHZhbHVlIG9mIHRoZSBEQlNSIHJlZ2lzdGVyIHdpbGwgYmUgdGhlIHZhbHVlIGF0IHRoZQorCSAqIGxhc3QgZGVidWcgaW50ZXJydXB0LiBUaGlzIHJlZ2lzdGVyIGNhbiBvbmx5IGJlIHJlYWQgZnJvbSB0aGUKKwkgKiB1c2VyICh3aWxsIG5ldmVyIGJlIHdyaXR0ZW4gdG8pIGFuZCBoYXMgdmFsdWUgd2hpbGUgaGVscGluZyB0bworCSAqIGRlc2NyaWJlIHRoZSByZWFzb24gZm9yIHRoZSBsYXN0IGRlYnVnIHRyYXAuICBUb3JlegorCSAqLworCXVuc2lnbmVkIGxvbmcJZGJzcjsKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgd2lsbCBjb250YWluIGFkZHJlc3NlcyB1c2VkIGJ5IGRlYnVnIGFwcGxpY2F0aW9ucworCSAqIHRvIGhlbHAgdHJhY2UgYW5kIHRyYXAgb24gcGFydGljdWxhciBhZGRyZXNzIGxvY2F0aW9ucy4KKwkgKiBUaGUgYml0cyBpbiB0aGUgRGVidWcgQ29udHJvbCBSZWdpc3RlcnMgYWJvdmUgaGVscCBkZWZpbmUgd2hpY2gKKwkgKiBvZiB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyB3aWxsIGNvbnRhaW4gdmFsaWQgZGF0YSBhbmQvb3IgYWRkcmVzc2VzLgorCSAqLworCXVuc2lnbmVkIGxvbmcJaWFjMTsKKwl1bnNpZ25lZCBsb25nCWlhYzI7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUyA+IDIKKwl1bnNpZ25lZCBsb25nCWlhYzM7CisJdW5zaWduZWQgbG9uZwlpYWM0OworI2VuZGlmCisJdW5zaWduZWQgbG9uZwlkYWMxOworCXVuc2lnbmVkIGxvbmcJZGFjMjsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTID4gMAorCXVuc2lnbmVkIGxvbmcJZHZjMTsKKwl1bnNpZ25lZCBsb25nCWR2YzI7CisjZW5kaWYKICNlbmRpZgogCS8qIEZQIGFuZCBWU1ggMC0zMSByZWdpc3RlciBzZXQgKi8KIAlkb3VibGUJCWZwclszMl1bVFNfRlBSV0lEVEhdOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb20uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9tLmgKaW5kZXggMmFiOWNiZC4uZGRkNDA4YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb20uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvbS5oCkBAIC0yMywyMSArMjMsOCBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKLSNkZWZpbmUgT0ZfUk9PVF9OT0RFX0FERFJfQ0VMTFNfREVGQVVMVAkxCi0jZGVmaW5lIE9GX1JPT1RfTk9ERV9TSVpFX0NFTExTX0RFRkFVTFQJMQotCi0jZGVmaW5lIG9mX2NvbXBhdF9jbXAoczEsIHMyLCBsKQlzdHJjYXNlY21wKChzMSksIChzMikpCi0jZGVmaW5lIG9mX3Byb3BfY21wKHMxLCBzMikJCXN0cmNtcCgoczEpLCAoczIpKQotI2RlZmluZSBvZl9ub2RlX2NtcChzMSwgczIpCQlzdHJjYXNlY21wKChzMSksIChzMikpCi0KLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2Nob3NlbjsKLQogI2RlZmluZSBIQVZFX0FSQ0hfREVWVFJFRV9GSVhVUFMKIAotLyogRm9yIHVwZGF0aW5nIHRoZSBkZXZpY2UgdHJlZSBhdCBydW50aW1lICovCi1leHRlcm4gdm9pZCBvZl9hdHRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7Ci1leHRlcm4gdm9pZCBvZl9kZXRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7Ci0KICNpZmRlZiBDT05GSUdfUFBDMzIKIC8qCiAgKiBQQ0kgPC0+IE9GIG1hdGNoaW5nIGZ1bmN0aW9ucwpAQCAtNTIsMTEgKzM5LDYgQEAKIGV4dGVybiB2b2lkIHBjaV9jcmVhdGVfT0ZfYnVzX21hcCh2b2lkKTsKICNlbmRpZgogCi1leHRlcm4gc3RydWN0IHJlc291cmNlICpyZXF1ZXN0X09GX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSogbm9kZSwKLQkJCQlpbnQgaW5kZXgsIGNvbnN0IGNoYXIqIG5hbWVfcG9zdGZpeCk7Ci1leHRlcm4gaW50IHJlbGVhc2VfT0ZfcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlKiBub2RlLCBpbnQgaW5kZXgpOwotCi0KIC8qCiAgKiBPRiBhZGRyZXNzIHJldHJlaXZhbCAmIHRyYW5zbGF0aW9uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCBjYmQ3NTllLi5iNDUxMDgxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0yNCw2ICsyNCwxMiBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIHN0cnVjdCBwdF9yZWdzIHsKQEAgLTI5NCw0ICszMDAsNzUgQEAKIAogI2RlZmluZSBQVFJBQ0VfU0lOR0xFQkxPQ0sJMHgxMDAJLyogcmVzdW1lIGV4ZWN1dGlvbiB1bnRpbCBuZXh0IGJyYW5jaCAqLwogCisjZGVmaW5lIFBQQ19QVFJBQ0VfR0VUSFdEQkdJTkZPCTB4ODkKKyNkZWZpbmUgUFBDX1BUUkFDRV9TRVRIV0RFQlVHCTB4ODgKKyNkZWZpbmUgUFBDX1BUUkFDRV9ERUxIV0RFQlVHCTB4ODcKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IHBwY19kZWJ1Z19pbmZvIHsKKwl1aW50MzJfdCB2ZXJzaW9uOwkJLyogT25seSB2ZXJzaW9uIDEgZXhpc3RzIHRvIGRhdGUgKi8KKwl1aW50MzJfdCBudW1faW5zdHJ1Y3Rpb25fYnBzOworCXVpbnQzMl90IG51bV9kYXRhX2JwczsKKwl1aW50MzJfdCBudW1fY29uZGl0aW9uX3JlZ3M7CisJdWludDMyX3QgZGF0YV9icF9hbGlnbm1lbnQ7CisJdWludDMyX3Qgc2l6ZW9mX2NvbmRpdGlvbjsJLyogc2l6ZSBvZiB0aGUgRFZDIHJlZ2lzdGVyICovCisJdWludDY0X3QgZmVhdHVyZXM7Cit9OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBmZWF0dXJlcyB3aWxsIGhhdmUgYml0cyBpbmRpY2F0aW9uIHdoZXRoZXIgdGhlcmUgaXMgc3VwcG9ydCBmb3I6CisgKi8KKyNkZWZpbmUgUFBDX0RFQlVHX0ZFQVRVUkVfSU5TTl9CUF9SQU5HRQkJMHgwMDAwMDAwMDAwMDAwMDAxCisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0lOU05fQlBfTUFTSwkJMHgwMDAwMDAwMDAwMDAwMDAyCisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0RBVEFfQlBfUkFOR0UJCTB4MDAwMDAwMDAwMDAwMDAwNAorI2RlZmluZSBQUENfREVCVUdfRkVBVFVSRV9EQVRBX0JQX01BU0sJCTB4MDAwMDAwMDAwMDAwMDAwOAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQgeworCXVpbnQzMl90IHZlcnNpb247CQkvKiBjdXJyZW50bHksIHZlcnNpb24gbXVzdCBiZSAxICovCisJdWludDMyX3QgdHJpZ2dlcl90eXBlOwkJLyogb25seSBzb21lIGNvbWJpbmF0aW9ucyBhbGxvd2VkICovCisJdWludDMyX3QgYWRkcl9tb2RlOwkJLyogYWRkcmVzcyBtYXRjaCBtb2RlICovCisJdWludDMyX3QgY29uZGl0aW9uX21vZGU7CS8qIGJyZWFrL3dhdGNocG9pbnQgY29uZGl0aW9uIGZsYWdzICovCisJdWludDY0X3QgYWRkcjsJCQkvKiBicmVhay93YXRjaHBvaW50IGFkZHJlc3MgKi8KKwl1aW50NjRfdCBhZGRyMjsJCQkvKiByYW5nZSBlbmQgb3IgbWFzayAqLworCXVpbnQ2NF90IGNvbmRpdGlvbl92YWx1ZTsJLyogY29udGVudHMgb2YgdGhlIERWQyByZWdpc3RlciAqLworfTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogVHJpZ2dlciBUeXBlCisgKi8KKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9FWEVDVVRFCTB4MDAwMDAwMDEKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFECTB4MDAwMDAwMDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9XUklURQkweDAwMDAwMDA0CisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUlcJXAorCShQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JFQUQgfCBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1dSSVRFKQorCisvKgorICogQWRkcmVzcyBNb2RlCisgKi8KKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9FWEFDVAkJMHgwMDAwMDAwMAorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0lOQ0xVU0lWRQkweDAwMDAwMDAxCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX01PREVfUkFOR0VfRVhDTFVTSVZFCTB4MDAwMDAwMDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9NQVNLCQkweDAwMDAwMDAzCisKKy8qCisgKiBDb25kaXRpb24gTW9kZQorICovCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9NT0RFCTB4MDAwMDAwMDMKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX05PTkUJMHgwMDAwMDAwMAorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQU5ECTB4MDAwMDAwMDEKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0VYQUNUCVBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9BTkQKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX09SCTB4MDAwMDAwMDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0FORF9PUgkweDAwMDAwMDAzCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9CRV9BTEwJMHgwMGZmMDAwMAorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfU0hJRlQJMTYKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0JFKG4pCVwKKwkoMTw8KChuKStQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfU0hJRlQpKQorCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKaW5kZXggM2JmNzgzNS4uODgwOGQzMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaApAQCAtMjQ4LDYgKzI0OCw4IEBACiAjZGVmaW5lIERCU1JfUkVUCTB4MDAwMDgwMDAJLyogUmV0dXJuIERlYnVnIEV2ZW50ICovCiAjZGVmaW5lIERCU1JfQ0lSUFQJMHgwMDAwMDA0MAkvKiBDcml0aWNhbCBJbnRlcnJ1cHQgVGFrZW4gRXZlbnQgKi8KICNkZWZpbmUgREJTUl9DUkVUCTB4MDAwMDAwMjAJLyogQ3JpdGljYWwgUmV0dXJuIERlYnVnIEV2ZW50ICovCisjZGVmaW5lIERCU1JfSUFDMTJBVFMJMHgwMDAwMDAwMgkvKiBJbnN0ciBBZGRyZXNzIENvbXBhcmUgMS8yIFRvZ2dsZSAqLworI2RlZmluZSBEQlNSX0lBQzM0QVRTCTB4MDAwMDAwMDEJLyogSW5zdHIgQWRkcmVzcyBDb21wYXJlIDMvNCBUb2dnbGUgKi8KICNlbmRpZgogI2lmZGVmIENPTkZJR180MHgKICNkZWZpbmUgREJTUl9JQwkJMHg4MDAwMDAwMAkvKiBJbnN0cnVjdGlvbiBDb21wbGV0aW9uICovCkBAIC0zMTMsNiArMzE1LDM4IEBACiAjZGVmaW5lIERCQ1IwX0lBMTJUCTB4MDAwMDgwMDAJLyogSW5zdHIgQWRkciAxLTIgcmFuZ2UgVG9nZ2xlICovCiAjZGVmaW5lIERCQ1IwX0lBMzRUCTB4MDAwMDQwMDAJLyogSW5zdHIgQWRkciAzLTQgcmFuZ2UgVG9nZ2xlICovCiAjZGVmaW5lIERCQ1IwX0ZUCTB4MDAwMDAwMDEJLyogRnJlZXplIFRpbWVycyBvbiBkZWJ1ZyBldmVudCAqLworCisjZGVmaW5lIGRiY3JfaWFjX3JhbmdlKHRhc2spCSgodGFzayktPnRocmVhZC5kYmNyMCkKKyNkZWZpbmUgREJDUl9JQUMxMkkJREJDUjBfSUExMgkJCS8qIFJhbmdlIEluY2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzEyWAkoREJDUjBfSUExMiB8IERCQ1IwX0lBMTJYKQkvKiBSYW5nZSBFeGNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMxMk1PREUJKERCQ1IwX0lBMTIgfCBEQkNSMF9JQTEyWCkJLyogSUFDIDEtMiBNb2RlIEJpdHMgKi8KKyNkZWZpbmUgREJDUl9JQUMzNEkJREJDUjBfSUEzNAkJCS8qIFJhbmdlIEluY2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzM0WAkoREJDUjBfSUEzNCB8IERCQ1IwX0lBMzRYKQkvKiBSYW5nZSBFeGNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMzNE1PREUJKERCQ1IwX0lBMzQgfCBEQkNSMF9JQTM0WCkJLyogSUFDIDMtNCBNb2RlIEJpdHMgKi8KKworLyogQml0IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIERCQ1IxLiAqLworI2RlZmluZSBEQkNSMV9EQUMxUgkweDgwMDAwMDAwCS8qIERBQzEgUmVhZCBEZWJ1ZyBFdmVudCAqLworI2RlZmluZSBEQkNSMV9EQUMyUgkweDQwMDAwMDAwCS8qIERBQzIgUmVhZCBEZWJ1ZyBFdmVudCAqLworI2RlZmluZSBEQkNSMV9EQUMxVwkweDIwMDAwMDAwCS8qIERBQzEgV3JpdGUgRGVidWcgRXZlbnQgKi8KKyNkZWZpbmUgREJDUjFfREFDMlcJMHgxMDAwMDAwMAkvKiBEQUMyIFdyaXRlIERlYnVnIEV2ZW50ICovCisKKyNkZWZpbmUgZGJjcl9kYWModGFzaykJKCh0YXNrKS0+dGhyZWFkLmRiY3IxKQorI2RlZmluZSBEQkNSX0RBQzFSCURCQ1IxX0RBQzFSCisjZGVmaW5lIERCQ1JfREFDMVcJREJDUjFfREFDMVcKKyNkZWZpbmUgREJDUl9EQUMyUglEQkNSMV9EQUMyUgorI2RlZmluZSBEQkNSX0RBQzJXCURCQ1IxX0RBQzJXCisKKy8qCisgKiBBcmUgdGhlcmUgYW55IGFjdGl2ZSBEZWJ1ZyBFdmVudHMgcmVwcmVzZW50ZWQgaW4gdGhlCisgKiBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVycz8KKyAqLworI2RlZmluZSBEQkNSMF9BQ1RJVkVfRVZFTlRTCShEQkNSMF9JQ01QIHwgREJDUjBfSUFDMSB8IERCQ1IwX0lBQzIgfCBcCisJCQkJIERCQ1IwX0lBQzMgfCBEQkNSMF9JQUM0KQorI2RlZmluZSBEQkNSMV9BQ1RJVkVfRVZFTlRTCShEQkNSMV9EQUMxUiB8IERCQ1IxX0RBQzJSIHwgXAorCQkJCSBEQkNSMV9EQUMxVyB8IERCQ1IxX0RBQzJXKQorI2RlZmluZSBEQkNSX0FDVElWRV9FVkVOVFMoZGJjcjAsIGRiY3IxKSAgKCgoZGJjcjApICYgREJDUjBfQUNUSVZFX0VWRU5UUykgfHwgXAorCQkJCQkgICAoKGRiY3IxKSAmIERCQ1IxX0FDVElWRV9FVkVOVFMpKQorCiAjZWxpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKICNkZWZpbmUgREJDUjBfRURNCTB4ODAwMDAwMDAJLyogRXh0ZXJuYWwgRGVidWcgTW9kZSAqLwogI2RlZmluZSBEQkNSMF9JRE0JMHg0MDAwMDAwMAkvKiBJbnRlcm5hbCBEZWJ1ZyBNb2RlICovCkBAIC0zNDIsMTkgKzM3Niw3OSBAQAogI2RlZmluZSBEQkNSMF9DUkVUCTB4MDAwMDAwMjAJLyogQ3JpdGljYWwgUmV0dXJuIERlYnVnIEV2ZW50ICovCiAjZGVmaW5lIERCQ1IwX0ZUCTB4MDAwMDAwMDEJLyogRnJlZXplIFRpbWVycyBvbiBkZWJ1ZyBldmVudCAqLwogCisjZGVmaW5lIGRiY3JfZGFjKHRhc2spCSgodGFzayktPnRocmVhZC5kYmNyMCkKKyNkZWZpbmUgREJDUl9EQUMxUglEQkNSMF9EQUMxUgorI2RlZmluZSBEQkNSX0RBQzFXCURCQ1IwX0RBQzFXCisjZGVmaW5lIERCQ1JfREFDMlIJREJDUjBfREFDMlIKKyNkZWZpbmUgREJDUl9EQUMyVwlEQkNSMF9EQUMyVworCiAvKiBCaXQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgREJDUjEuICovCisjZGVmaW5lIERCQ1IxX0lBQzFVUwkweEMwMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDEgU3VwL1VzZXIgICAqLworI2RlZmluZSBEQkNSMV9JQUMxRVIJMHgzMDAwMDAwMAkvKiBJbnN0ciBBZGRyIENtcCAxIEVmZi9SZWFsICovCisjZGVmaW5lIERCQ1IxX0lBQzFFUl8wMQkweDEwMDAwMDAwCS8qIHJlc2VydmVkICovCisjZGVmaW5lIERCQ1IxX0lBQzFFUl8xMAkweDIwMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDEgRWZmL1JlYWwgTVNSW0lTXT0wICovCisjZGVmaW5lIERCQ1IxX0lBQzFFUl8xMQkweDMwMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDEgRWZmL1JlYWwgTVNSW0lTXT0xICovCisjZGVmaW5lIERCQ1IxX0lBQzJVUwkweDBDMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDIgU3VwL1VzZXIgICAqLworI2RlZmluZSBEQkNSMV9JQUMyRVIJMHgwMzAwMDAwMAkvKiBJbnN0ciBBZGRyIENtcCAyIEVmZi9SZWFsICovCisjZGVmaW5lIERCQ1IxX0lBQzJFUl8wMQkweDAxMDAwMDAwCS8qIHJlc2VydmVkICovCisjZGVmaW5lIERCQ1IxX0lBQzJFUl8xMAkweDAyMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDIgRWZmL1JlYWwgTVNSW0lTXT0wICovCisjZGVmaW5lIERCQ1IxX0lBQzJFUl8xMQkweDAzMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDIgRWZmL1JlYWwgTVNSW0lTXT0xICovCiAjZGVmaW5lIERCQ1IxX0lBQzEyTQkweDAwODAwMDAwCS8qIEluc3RyIEFkZHIgMS0yIHJhbmdlIGVuYWJsZSAqLwogI2RlZmluZSBEQkNSMV9JQUMxMk1YCTB4MDBDMDAwMDAJLyogSW5zdHIgQWRkciAxLTIgcmFuZ2UgZVhjbHVzaXZlICovCiAjZGVmaW5lIERCQ1IxX0lBQzEyQVQJMHgwMDAxMDAwMAkvKiBJbnN0ciBBZGRyIDEtMiByYW5nZSBUb2dnbGUgKi8KKyNkZWZpbmUgREJDUjFfSUFDM1VTCTB4MDAwMEMwMDAJLyogSW5zdHIgQWRkciBDbXAgMyBTdXAvVXNlciAgICovCisjZGVmaW5lIERCQ1IxX0lBQzNFUgkweDAwMDAzMDAwCS8qIEluc3RyIEFkZHIgQ21wIDMgRWZmL1JlYWwgKi8KKyNkZWZpbmUgREJDUjFfSUFDM0VSXzAxCTB4MDAwMDEwMDAJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgREJDUjFfSUFDM0VSXzEwCTB4MDAwMDIwMDAJLyogSW5zdHIgQWRkciBDbXAgMyBFZmYvUmVhbCBNU1JbSVNdPTAgKi8KKyNkZWZpbmUgREJDUjFfSUFDM0VSXzExCTB4MDAwMDMwMDAJLyogSW5zdHIgQWRkciBDbXAgMyBFZmYvUmVhbCBNU1JbSVNdPTEgKi8KKyNkZWZpbmUgREJDUjFfSUFDNFVTCTB4MDAwMDBDMDAJLyogSW5zdHIgQWRkciBDbXAgNCBTdXAvVXNlciAgICovCisjZGVmaW5lIERCQ1IxX0lBQzRFUgkweDAwMDAwMzAwCS8qIEluc3RyIEFkZHIgQ21wIDQgRWZmL1JlYWwgKi8KKyNkZWZpbmUgREJDUjFfSUFDNEVSXzAxCTB4MDAwMDAxMDAJLyogSW5zdHIgQWRkciBDbXAgNCBFZmYvUmVhbCBNU1JbSVNdPTAgKi8KKyNkZWZpbmUgREJDUjFfSUFDNEVSXzEwCTB4MDAwMDAyMDAJLyogSW5zdHIgQWRkciBDbXAgNCBFZmYvUmVhbCBNU1JbSVNdPTAgKi8KKyNkZWZpbmUgREJDUjFfSUFDNEVSXzExCTB4MDAwMDAzMDAJLyogSW5zdHIgQWRkciBDbXAgNCBFZmYvUmVhbCBNU1JbSVNdPTEgKi8KICNkZWZpbmUgREJDUjFfSUFDMzRNCTB4MDAwMDAwODAJLyogSW5zdHIgQWRkciAzLTQgcmFuZ2UgZW5hYmxlICovCiAjZGVmaW5lIERCQ1IxX0lBQzM0TVgJMHgwMDAwMDBDMAkvKiBJbnN0ciBBZGRyIDMtNCByYW5nZSBlWGNsdXNpdmUgKi8KICNkZWZpbmUgREJDUjFfSUFDMzRBVAkweDAwMDAwMDAxCS8qIEluc3RyIEFkZHIgMy00IHJhbmdlIFRvZ2dsZSAqLwogCisjZGVmaW5lIGRiY3JfaWFjX3JhbmdlKHRhc2spCSgodGFzayktPnRocmVhZC5kYmNyMSkKKyNkZWZpbmUgREJDUl9JQUMxMkkJREJDUjFfSUFDMTJNCS8qIFJhbmdlIEluY2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzEyWAlEQkNSMV9JQUMxMk1YCS8qIFJhbmdlIEV4Y2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzEyTU9ERQlEQkNSMV9JQUMxMk1YCS8qIElBQyAxLTIgTW9kZSBCaXRzICovCisjZGVmaW5lIERCQ1JfSUFDMzRJCURCQ1IxX0lBQzM0TQkvKiBSYW5nZSBJbmNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMzNFgJREJDUjFfSUFDMzRNWAkvKiBSYW5nZSBFeGNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMzNE1PREUJREJDUjFfSUFDMzRNWAkvKiBJQUMgMy00IE1vZGUgQml0cyAqLworCiAvKiBCaXQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgREJDUjIuICovCisjZGVmaW5lIERCQ1IyX0RBQzFVUwkweEMwMDAwMDAwCS8qIERhdGEgQWRkciBDbXAgMSBTdXAvVXNlciAgICovCisjZGVmaW5lIERCQ1IyX0RBQzFFUgkweDMwMDAwMDAwCS8qIERhdGEgQWRkciBDbXAgMSBFZmYvUmVhbCAqLworI2RlZmluZSBEQkNSMl9EQUMyVVMJMHgwMDAwMDAwMAkvKiBEYXRhIEFkZHIgQ21wIDIgU3VwL1VzZXIgICAqLworI2RlZmluZSBEQkNSMl9EQUMyRVIJMHgwMDAwMDAwMAkvKiBEYXRhIEFkZHIgQ21wIDIgRWZmL1JlYWwgKi8KICNkZWZpbmUgREJDUjJfREFDMTJNCTB4MDA4MDAwMDAJLyogREFDIDEtMiByYW5nZSBlbmFibGUgKi8KKyNkZWZpbmUgREJDUjJfREFDMTJNTQkweDAwNDAwMDAwCS8qIERBQyAxLTIgTWFzayBtb2RlKi8KICNkZWZpbmUgREJDUjJfREFDMTJNWAkweDAwQzAwMDAwCS8qIERBQyAxLTIgcmFuZ2UgZVhjbHVzaXZlICovCisjZGVmaW5lIERCQ1IyX0RBQzEyTU9ERQkweDAwQzAwMDAwCS8qIERBQyAxLTIgTW9kZSBCaXRzICovCiAjZGVmaW5lIERCQ1IyX0RBQzEyQQkweDAwMjAwMDAwCS8qIERBQyAxLTIgQXN5bmNocm9ub3VzICovCi0jZW5kaWYKKyNkZWZpbmUgREJDUjJfRFZDMU0JMHgwMDBDMDAwMAkvKiBEYXRhIFZhbHVlIENvbXAgMSBNb2RlICovCisjZGVmaW5lIERCQ1IyX0RWQzFNX1NISUZUCTE4CS8qICMgb2YgYml0cyB0byBzaGlmdCBEQkNSMl9EVkMxTSAqLworI2RlZmluZSBEQkNSMl9EVkMyTQkweDAwMDMwMDAwCS8qIERhdGEgVmFsdWUgQ29tcCAyIE1vZGUgKi8KKyNkZWZpbmUgREJDUjJfRFZDMk1fU0hJRlQJMTYJLyogIyBvZiBiaXRzIHRvIHNoaWZ0IERCQ1IyX0RWQzJNICovCisjZGVmaW5lIERCQ1IyX0RWQzFCRQkweDAwMDAwRjAwCS8qIERhdGEgVmFsdWUgQ29tcCAxIEJ5dGUgKi8KKyNkZWZpbmUgREJDUjJfRFZDMUJFX1NISUZUCTgJLyogIyBvZiBiaXRzIHRvIHNoaWZ0IERCQ1IyX0RWQzFCRSAqLworI2RlZmluZSBEQkNSMl9EVkMyQkUJMHgwMDAwMDAwRgkvKiBEYXRhIFZhbHVlIENvbXAgMiBCeXRlICovCisjZGVmaW5lIERCQ1IyX0RWQzJCRV9TSElGVAkwCS8qICMgb2YgYml0cyB0byBzaGlmdCBEQkNSMl9EVkMyQkUgKi8KKworLyoKKyAqIEFyZSB0aGVyZSBhbnkgYWN0aXZlIERlYnVnIEV2ZW50cyByZXByZXNlbnRlZCBpbiB0aGUKKyAqIERlYnVnIENvbnRyb2wgUmVnaXN0ZXJzPworICovCisjZGVmaW5lIERCQ1IwX0FDVElWRV9FVkVOVFMgIChEQkNSMF9JQ01QIHwgREJDUjBfSUFDMSB8IERCQ1IwX0lBQzIgfCBcCisJCQkgICAgICBEQkNSMF9JQUMzIHwgREJDUjBfSUFDNCB8IERCQ1IwX0RBQzFSIHwgXAorCQkJICAgICAgREJDUjBfREFDMVcgIHwgREJDUjBfREFDMlIgfCBEQkNSMF9EQUMyVykKKyNkZWZpbmUgREJDUjFfQUNUSVZFX0VWRU5UUwkwCisKKyNkZWZpbmUgREJDUl9BQ1RJVkVfRVZFTlRTKGRiY3IwLCBkYmNyMSkgICgoKGRiY3IwKSAmIERCQ1IwX0FDVElWRV9FVkVOVFMpIHx8IFwKKwkJCQkJICAgKChkYmNyMSkgJiBEQkNSMV9BQ1RJVkVfRVZFTlRTKSkKKyNlbmRpZiAvKiAjZWxpZiBkZWZpbmVkKENPTkZJR19CT09LRSkgKi8KIAogLyogQml0IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIFRDUi4gKi8KICNkZWZpbmUgVENSX1dQKHgpCSgoKHgpJjB4Myk8PDMwKQkvKiBXRFQgUGVyaW9kICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IDc2NDA5NGMuLmY5NjExYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgogI2luY2x1ZGUgPGFzbS9zeW5jaC5oPgorI2luY2x1ZGUgPGFzbS9wcGMtb3Bjb2RlLmg+CiAKICNkZWZpbmUgYXJjaF9zcGluX2lzX2xvY2tlZCh4KQkJKCh4KS0+c2xvY2sgIT0gMCkKIApAQCAtNjAsMTMgKzYxLDE0IEBACiAKIAl0b2tlbiA9IExPQ0tfVE9LRU47CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToJbHdhcngJCSUwLDAsJTJcblwKKyIxOgkiIFBQQ19MV0FSWCglMCwwLCUyLDEpICJcblwKIAljbXB3aQkJMCwlMCwwXG5cCiAJYm5lLQkJMmZcblwKIAlzdHdjeC4JCSUxLDAsJTJcblwKLQlibmUtCQkxYlxuXAotCWlzeW5jXG5cCi0yOiIJOiAiPSZyIiAodG1wKQorCWJuZS0JCTFiXG4iCisJUFBDX0FDUVVJUkVfQkFSUklFUgorIjI6IgorCTogIj0mciIgKHRtcCkKIAk6ICJyIiAodG9rZW4pLCAiciIgKCZsb2NrLT5zbG9jaykKIAk6ICJjcjAiLCAibWVtb3J5Iik7CiAKQEAgLTE0NCw3ICsxNDYsNyBAQAogewogCVNZTkNfSU87CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIiMgYXJjaF9zcGluX3VubG9ja1xuXHQiCi0JCQkJTFdTWU5DX09OX1NNUDogOiA6Im1lbW9yeSIpOworCQkJCVBQQ19SRUxFQVNFX0JBUlJJRVI6IDogOiJtZW1vcnkiKTsKIAlsb2NrLT5zbG9jayA9IDA7CiB9CiAKQEAgLTE4NiwxNSArMTg4LDE1IEBACiAJbG9uZyB0bXA7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOglsd2FyeAkJJTAsMCwlMVxuIgorIjE6CSIgUFBDX0xXQVJYKCUwLDAsJTEsMSkgIlxuIgogCV9fRE9fU0lHTl9FWFRFTkQKICIJYWRkaWMuCQklMCwlMCwxXG5cCiAJYmxlLQkJMmZcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKICIJc3R3Y3guCQklMCwwLCUxXG5cCi0JYm5lLQkJMWJcblwKLQlpc3luY1xuXAotMjoiCTogIj0mciIgKHRtcCkKKwlibmUtCQkxYlxuIgorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKKyIyOiIJOiAiPSZyIiAodG1wKQogCTogInIiICgmcnctPmxvY2spCiAJOiAiY3IwIiwgInhlciIsICJtZW1vcnkiKTsKIApAQCAtMjExLDE0ICsyMTMsMTQgQEAKIAogCXRva2VuID0gV1JMT0NLX1RPS0VOOwogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6CWx3YXJ4CQklMCwwLCUyXG5cCisiMToJIiBQUENfTFdBUlgoJTAsMCwlMiwxKSAiXG5cCiAJY21wd2kJCTAsJTAsMFxuXAogCWJuZS0JCTJmXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAiCXN0d2N4LgkJJTEsMCwlMlxuXAotCWJuZS0JCTFiXG5cCi0JaXN5bmNcblwKLTI6Igk6ICI9JnIiICh0bXApCisJYm5lLQkJMWJcbiIKKwlQUENfQUNRVUlSRV9CQVJSSUVSCisiMjoiCTogIj0mciIgKHRtcCkKIAk6ICJyIiAodG9rZW4pLCAiciIgKCZydy0+bG9jaykKIAk6ICJjcjAiLCAibWVtb3J5Iik7CiAKQEAgLTI2OSw3ICsyNzEsNyBAQAogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJIiMgcmVhZF91bmxvY2tcblx0IgotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbHdhcngJCSUwLDAsJTFcblwKIAlhZGRpYwkJJTAsJTAsLTFcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKQEAgLTI4Myw3ICsyODUsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfd3JpdGVfdW5sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKCIjIHdyaXRlX3VubG9ja1xuXHQiCi0JCQkJTFdTWU5DX09OX1NNUDogOiA6Im1lbW9yeSIpOworCQkJCVBQQ19SRUxFQVNFX0JBUlJJRVI6IDogOiJtZW1vcnkiKTsKIAlydy0+bG9jayA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeW5jaC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5bmNoLmgKaW5kZXggMjhmNmRkYi4uZDdjYWI0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5bmNoLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5bmNoLmgKQEAgLTM3LDExICszNywxNSBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIElTWU5DX09OX1NNUAkiXG5cdGlzeW5jXG4iCi0jZGVmaW5lIExXU1lOQ19PTl9TTVAJc3RyaW5naWZ5X2luX2MoTFdTWU5DKSAiXG4iCisjZGVmaW5lIF9fUFBDX0FDUVVJUkVfQkFSUklFUgkJCQlcCisJU1RBUlRfTFdTWU5DX1NFQ1RJT04oOTcpOwkJCVwKKwlpc3luYzsJCQkJCQlcCisJTUFLRV9MV1NZTkNfU0VDVElPTl9FTlRSWSg5NywgX19sd3N5bmNfZml4dXApOworI2RlZmluZSBQUENfQUNRVUlSRV9CQVJSSUVSCSJcbiIgc3RyaW5naWZ5X2luX2MoX19QUENfQUNRVUlSRV9CQVJSSUVSKQorI2RlZmluZSBQUENfUkVMRUFTRV9CQVJSSUVSCXN0cmluZ2lmeV9pbl9jKExXU1lOQykgIlxuIgogI2Vsc2UKLSNkZWZpbmUgSVNZTkNfT05fU01QCi0jZGVmaW5lIExXU1lOQ19PTl9TTVAKKyNkZWZpbmUgUFBDX0FDUVVJUkVfQkFSUklFUgorI2RlZmluZSBQUENfUkVMRUFTRV9CQVJSSUVSCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCBiYjhlMDA2Li5hNjI5N2M2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xMTIsOCArMTEyLDEzIEBACiAjZW5kaWYKIAogZXh0ZXJuIGludCBzZXRfZGFicih1bnNpZ25lZCBsb25nIGRhYnIpOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKK2V4dGVybiB2b2lkIGRvX3NlbmRfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwgaW50IHNpZ25hbF9jb2RlLCBpbnQgYnJrcHQpOworI2Vsc2UKIGV4dGVybiB2b2lkIGRvX2RhYnIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJICAgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSk7CisjZW5kaWYKIGV4dGVybiB2b2lkIHByaW50X2JhY2t0cmFjZSh1bnNpZ25lZCBsb25nICopOwogZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncyk7CiBleHRlcm4gdm9pZCBmbHVzaF9pbnN0cnVjdGlvbl9jYWNoZSh2b2lkKTsKQEAgLTIzMiwxMiArMjM3LDEyIEBACiAJdW5zaWduZWQgbG9uZyBwcmV2OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUyIFxuIgogCVBQQzQwNV9FUlI3NygwLCUyKQogIglzdHdjeC4JJTMsMCwlMiBcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiIChwcmV2KSwgIittIiAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilwKQogCTogInIiIChwKSwgInIiICh2YWwpCiAJOiAiY2MiLCAibWVtb3J5Iik7CkBAIC0yNzUsMTIgKzI4MCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgcHJldjsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbGRhcngJJTAsMCwlMiBcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMikKICIJc3RkY3guCSUzLDAsJTIgXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAocHJldiksICIrbSIgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKXApCiAJOiAiciIgKHApLCAiciIgKHZhbCkKIAk6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTM2NiwxNCArMzcxLDE0IEBACiAJdW5zaWduZWQgaW50IHByZXY7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUyCQkjIF9fY21weGNoZ191MzJcblwKIAljbXB3CTAsJTAsJTNcblwKIAlibmUtCTJmXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTIpCiAiCXN0d2N4LgklNCwwLCUyXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJIlxuXAogMjoiCiAJOiAiPSZyIiAocHJldiksICIrbSIgKCpwKQpAQCAtNDEyLDEzICs0MTcsMTMgQEAKIAl1bnNpZ25lZCBsb25nIHByZXY7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsZGFyeAklMCwwLCUyCQkjIF9fY21weGNoZ191NjRcblwKIAljbXBkCTAsJTAsJTNcblwKIAlibmUtCTJmXG5cCiAJc3RkY3guCSU0LDAsJTJcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAkiXG5cCiAyOiIKIAk6ICI9JnIiIChwcmV2KSwgIittIiAoKnApCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGM4YjMyOTIuLmFhOWQzODMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0xMTEsNyArMTExLDYgQEAKICNkZWZpbmUgVElGX05PVElGWV9SRVNVTUUJMTMJLyogY2FsbGJhY2sgYmVmb3JlIHJldHVybmluZyB0byB1c2VyICovCiAjZGVmaW5lIFRJRl9GUkVFWkUJCTE0CS8qIEZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAjZGVmaW5lIFRJRl9SVU5MQVRDSAkJMTUJLyogSXMgdGhlIHJ1bmxhdGNoIGVuYWJsZWQ/ICovCi0jZGVmaW5lIFRJRl9BQklfUEVORElORwkJMTYJLyogMzIvNjQgYml0IHN3aXRjaCBuZWVkZWQgKi8KIAogLyogYXMgYWJvdmUsIGJ1dCBhcyBiaXQgdmFsdWVzICovCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCkBAIC0xMjksNyArMTI4LDYgQEAKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKICNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxPDxUSUZfRlJFRVpFKQogI2RlZmluZSBfVElGX1JVTkxBVENICQkoMTw8VElGX1JVTkxBVENIKQotI2RlZmluZSBfVElGX0FCSV9QRU5ESU5HCSgxPDxUSUZfQUJJX1BFTkRJTkcpCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UX09SX0EJKF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NZU0NBTExfQVVESVR8X1RJRl9TRUNDT01QKQogCiAjZGVmaW5lIF9USUZfVVNFUl9XT1JLX01BU0sJKF9USUZfU0lHUEVORElORyB8IF9USUZfTkVFRF9SRVNDSEVEIHwgXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCBiYmY4OTcwLi44ZWFlYzMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtMzgsMjcgKzM4LDMzIEBACiAJCQkJIGNwdW1hc2tfb2Zfbm9kZShwY2lidXNfdG9fbm9kZShidXMpKSkKIAogLyogc2NoZWRfZG9tYWlucyBTRF9OT0RFX0lOSVQgZm9yIFBQQzY0IG1hY2hpbmVzICovCi0jZGVmaW5lIFNEX05PREVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJXAotCS5wYXJlbnQJCQk9IE5VTEwsCQkJXAotCS5jaGlsZAkJCT0gTlVMTCwJCQlcCi0JLmdyb3VwcwkJCT0gTlVMTCwJCQlcCi0JLm1pbl9pbnRlcnZhbAkJPSA4LAkJCVwKLQkubWF4X2ludGVydmFsCQk9IDMyLAkJCVwKLQkuYnVzeV9mYWN0b3IJCT0gMzIsCQkJXAotCS5pbWJhbGFuY2VfcGN0CQk9IDEyNSwJCQlcCi0JLmNhY2hlX25pY2VfdHJpZXMJPSAxLAkJCVwKLQkuYnVzeV9pZHgJCT0gMywJCQlcCi0JLmlkbGVfaWR4CQk9IDEsCQkJXAotCS5uZXdpZGxlX2lkeAkJPSAwLAkJCVwKLQkud2FrZV9pZHgJCT0gMCwJCQlcCi0JLmZsYWdzCQkJPSBTRF9MT0FEX0JBTEFOQ0UJXAotCQkJCXwgU0RfQkFMQU5DRV9FWEVDCVwKLQkJCQl8IFNEX0JBTEFOQ0VfRk9SSwlcCi0JCQkJfCBTRF9CQUxBTkNFX05FV0lETEUJXAotCQkJCXwgU0RfU0VSSUFMSVpFLAkJXAotCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCVwKLQkuYmFsYW5jZV9pbnRlcnZhbAk9IDEsCQkJXAotCS5ucl9iYWxhbmNlX2ZhaWxlZAk9IDAsCQkJXAorI2RlZmluZSBTRF9OT0RFX0lOSVQgKHN0cnVjdCBzY2hlZF9kb21haW4pIHsJCQkJXAorCS5taW5faW50ZXJ2YWwJCT0gOCwJCQkJCVwKKwkubWF4X2ludGVydmFsCQk9IDMyLAkJCQkJXAorCS5idXN5X2ZhY3RvcgkJPSAzMiwJCQkJCVwKKwkuaW1iYWxhbmNlX3BjdAkJPSAxMjUsCQkJCQlcCisJLmNhY2hlX25pY2VfdHJpZXMJPSAxLAkJCQkJXAorCS5idXN5X2lkeAkJPSAzLAkJCQkJXAorCS5pZGxlX2lkeAkJPSAxLAkJCQkJXAorCS5uZXdpZGxlX2lkeAkJPSAwLAkJCQkJXAorCS53YWtlX2lkeAkJPSAwLAkJCQkJXAorCS5mb3JrZXhlY19pZHgJCT0gMCwJCQkJCVwKKwkJCQkJCQkJCVwKKwkuZmxhZ3MJCQk9IDEqU0RfTE9BRF9CQUxBTkNFCQkJXAorCQkJCXwgMSpTRF9CQUxBTkNFX05FV0lETEUJCQlcCisJCQkJfCAxKlNEX0JBTEFOQ0VfRVhFQwkJCVwKKwkJCQl8IDEqU0RfQkFMQU5DRV9GT1JLCQkJXAorCQkJCXwgMCpTRF9CQUxBTkNFX1dBS0UJCQlcCisJCQkJfCAwKlNEX1dBS0VfQUZGSU5FCQkJXAorCQkJCXwgMCpTRF9QUkVGRVJfTE9DQUwJCQlcCisJCQkJfCAwKlNEX1NIQVJFX0NQVVBPV0VSCQkJXAorCQkJCXwgMCpTRF9QT1dFUlNBVklOR1NfQkFMQU5DRQkJXAorCQkJCXwgMCpTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCQlcCisJCQkJfCAxKlNEX1NFUklBTElaRQkJCVwKKwkJCQl8IDAqU0RfUFJFRkVSX1NJQkxJTkcJCQlcCisJCQkJLAkJCQkJXAorCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCQkJXAorCS5iYWxhbmNlX2ludGVydmFsCT0gMSwJCQkJCVwKIH0KIAogZXh0ZXJuIHZvaWQgX19pbml0IGR1bXBfbnVtYV9jcHVfdG9wb2xvZ3kodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggYmRjYjU1Ny4uMDcxMDlkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwpAQCAtNzkxLDkgKzc5MSw4IEBACiAJCiAgICAgICAgIGxpICAgICAgcjksMQogICAgICAgICBybGRpY3IgIHI5LHI5LE1TUl9TRl9MRywoNjMtTVNSX1NGX0xHKQotCW9yaQlyOSxyOSxNU1JfSVJ8TVNSX0RSfE1TUl9GRTB8TVNSX0ZFMXxNU1JfRlAKKwlvcmkJcjkscjksTVNSX0lSfE1TUl9EUnxNU1JfRkUwfE1TUl9GRTF8TVNSX0ZQfE1TUl9SSQogCWFuZGMJcjYscjAscjkKLQlvcmkJcjYscjYsTVNSX1JJCiAJc3luYwkJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgc28gU1JSMC8xICovCiAJbXRtc3JkCXIwCQkJLyogZG9uJ3QgZ2V0IHRyYXNoZWQgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jCmluZGV4IDE2NzlhNzAuLjZiMWY0MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZmlybXdhcmUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2Zpcm13YXJlLmMKQEAgLTE3LDUgKzE3LDUgQEAKIAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogCi11bnNpZ25lZCBsb25nIHBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXM7Cit1bnNpZ25lZCBsb25nIHBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXMgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKHBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCmluZGV4IDdmNGJkN2YuLjI1NzkzYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKQEAgLTIxNCwxMSArMjE0LDExIEBACiAJYmwJMWYJCS8qIEZpbmQgb3VyIGFkZHJlc3MgKi8KIDE6CW1mbHIJcjkKIAlybHdpbWkJcjcscjksMCwyMCwzMQotCWFkZGkJcjcscjcsMjQKKwlhZGRpCXI3LHI3LCgyZiAtIDFiKQogCW10c3ByCVNQUk5fU1JSMCxyNwogCW10c3ByCVNQUk5fU1JSMSxyNgogCXJmaQotCisyOgogLyogNC4gQ2xlYXIgb3V0IFBJRHMgJiBTZWFyY2ggaW5mbyAqLwogCWxpCXI2LDAKIAltdHNwciAgIFNQUk5fTUFTNixyNgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKaW5kZXggOTA0MDMzMC4uNjRmNmYyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCkBAIC03Myw4ICs3MywxMCBAQAogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCiAjaW5jbHVkZSA8YXNtL3RyYWNlLmg+CiAKK0RFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKGlycV9jcHVzdGF0X3QsIGlycV9zdGF0KTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChpcnFfc3RhdCk7CisKIGludCBfX2lycV9vZmZzZXRfdmFsdWU7Ci1zdGF0aWMgaW50IHBwY19zcHVyaW91c19pbnRlcnJ1cHRzOwogCiAjaWZkZWYgQ09ORklHX1BQQzMyCiBFWFBPUlRfU1lNQk9MKF9faXJxX29mZnNldF92YWx1ZSk7CkBAIC0xODAsMzAgKzE4Miw2NCBAQAogRVhQT1JUX1NZTUJPTChyYXdfbG9jYWxfaXJxX3Jlc3RvcmUpOwogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCitzdGF0aWMgaW50IHNob3dfb3RoZXJfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIGludCBwcmVjKQoreworCWludCBqOworCisjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmIGRlZmluZWQoQ09ORklHX1RBVV9JTlQpCisJaWYgKHRhdV9pbml0aWFsaXplZCkgeworCQlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJUQVUiKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCB0YXVfaW50ZXJydXB0cyhqKSk7CisJCXNlcV9wdXRzKHAsICIgIFBvd2VyUEMgICAgICAgICAgICAgVGhlcm1hbCBBc3Npc3QgKGNwdSB0ZW1wKVxuIik7CisJfQorI2VuZGlmIC8qIENPTkZJR19QUEMzMiAmJiBDT05GSUdfVEFVX0lOVCAqLworCisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiTE9DIik7CisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIHBlcl9jcHUoaXJxX3N0YXQsIGopLnRpbWVyX2lycXMpOworICAgICAgICBzZXFfcHJpbnRmKHAsICIgIExvY2FsIHRpbWVyIGludGVycnVwdHNcbiIpOworCisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiU1BVIik7CisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIHBlcl9jcHUoaXJxX3N0YXQsIGopLnNwdXJpb3VzX2lycXMpOworCXNlcV9wcmludGYocCwgIiAgU3B1cmlvdXMgaW50ZXJydXB0c1xuIik7CisKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJDTlQiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgcGVyX2NwdShpcnFfc3RhdCwgaikucG11X2lycXMpOworCXNlcV9wcmludGYocCwgIiAgUGVyZm9ybWFuY2UgbW9uaXRvcmluZyBpbnRlcnJ1cHRzXG4iKTsKKworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIk1DRSIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBwZXJfY3B1KGlycV9zdGF0LCBqKS5tY2VfZXhjZXB0aW9ucyk7CisJc2VxX3ByaW50ZihwLCAiICBNYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbnNcbiIpOworCisJcmV0dXJuIDA7Cit9CisKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQogewotCWludCBpID0gKihsb2ZmX3QgKil2LCBqOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGFueV9jb3VudCA9IDA7CisJaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBqLCBwcmVjOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChpID09IDApIHsKLQkJc2VxX3B1dHMocCwgIiAgICAgICAgICAgIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIkNQVSVkICAgICAgICIsIGopOwotCQlzZXFfcHV0YyhwLCAnXG4nKTsKLQl9IGVsc2UgaWYgKGkgPT0gbnJfaXJxcykgewotI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiBkZWZpbmVkKENPTkZJR19UQVVfSU5UKQotCQlpZiAodGF1X2luaXRpYWxpemVkKXsKLQkJCXNlcV9wdXRzKHAsICJUQVU6ICIpOwotCQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgdGF1X2ludGVycnVwdHMoaikpOwotCQkJc2VxX3B1dHMocCwgIiAgUG93ZXJQQyAgICAgICAgICAgICBUaGVybWFsIEFzc2lzdCAoY3B1IHRlbXApXG4iKTsKLQkJfQotI2VuZGlmIC8qIENPTkZJR19QUEMzMiAmJiBDT05GSUdfVEFVX0lOVCovCi0JCXNlcV9wcmludGYocCwgIkJBRDogJTEwdVxuIiwgcHBjX3NwdXJpb3VzX2ludGVycnVwdHMpOwotCisJaWYgKGkgPiBucl9pcnFzKQogCQlyZXR1cm4gMDsKKworCWZvciAocHJlYyA9IDMsIGogPSAxMDAwOyBwcmVjIDwgMTAgJiYgaiA8PSBucl9pcnFzOyArK3ByZWMpCisJCWogKj0gMTA7CisKKwlpZiAoaSA9PSBucl9pcnFzKQorCQlyZXR1cm4gc2hvd19vdGhlcl9pbnRlcnJ1cHRzKHAsIHByZWMpOworCisJLyogcHJpbnQgaGVhZGVyICovCisJaWYgKGkgPT0gMCkgeworCQlzZXFfcHJpbnRmKHAsICIlKnMiLCBwcmVjICsgOCwgIiIpOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCQlzZXFfcHJpbnRmKHAsICJDUFUlLThkIiwgaik7CisJCXNlcV9wdXRjKHAsICdcbicpOwogCX0KIAogCWRlc2MgPSBpcnFfdG9fZGVzYyhpKTsKQEAgLTIxMSwzNyArMjQ3LDQ4IEBACiAJCXJldHVybiAwOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0KKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCWFueV9jb3VudCB8PSBrc3RhdF9pcnFzX2NwdShpLCBqKTsKIAlhY3Rpb24gPSBkZXNjLT5hY3Rpb247Ci0JaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi0+aGFuZGxlcikKLQkJZ290byBza2lwOworCWlmICghYWN0aW9uICYmICFhbnlfY291bnQpCisJCWdvdG8gb3V0OwogCi0Jc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKLSNpZmRlZiBDT05GSUdfU01QCisJc2VxX3ByaW50ZihwLCAiJSpkOiAiLCBwcmVjLCBpKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwotI2Vsc2UKLQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogCWlmIChkZXNjLT5jaGlwKQotCQlzZXFfcHJpbnRmKHAsICIgJXMgIiwgZGVzYy0+Y2hpcC0+bmFtZSk7CisJCXNlcV9wcmludGYocCwgIiAgJS0xNnMiLCBkZXNjLT5jaGlwLT5uYW1lKTsKIAllbHNlCi0JCXNlcV9wdXRzKHAsICIgIE5vbmUgICAgICAiKTsKKwkJc2VxX3ByaW50ZihwLCAiICAlLTE2cyIsICJOb25lIik7CisJc2VxX3ByaW50ZihwLCAiICUtOHMiLCAoZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMKSA/ICJMZXZlbCIgOiAiRWRnZSIpOwogCi0Jc2VxX3ByaW50ZihwLCAiJXMiLCAoZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMKSA/ICJMZXZlbCAiIDogIkVkZ2UgICIpOwotCXNlcV9wcmludGYocCwgIiAgICAlcyIsIGFjdGlvbi0+bmFtZSk7CisJaWYgKGFjdGlvbikgeworCQlzZXFfcHJpbnRmKHAsICIgICAgICVzIiwgYWN0aW9uLT5uYW1lKTsKKwkJd2hpbGUgKChhY3Rpb24gPSBhY3Rpb24tPm5leHQpICE9IE5VTEwpCisJCQlzZXFfcHJpbnRmKHAsICIsICVzIiwgYWN0aW9uLT5uYW1lKTsKKwl9CiAKLQlmb3IgKGFjdGlvbiA9IGFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCi0JCXNlcV9wcmludGYocCwgIiwgJXMiLCBhY3Rpb24tPm5hbWUpOwogCXNlcV9wdXRjKHAsICdcbicpOwotCi1za2lwOgorb3V0OgogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIC9wcm9jL3N0YXQgaGVscGVycworICovCit1NjQgYXJjaF9pcnFfc3RhdF9jcHUodW5zaWduZWQgaW50IGNwdSkKK3sKKwl1NjQgc3VtID0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS50aW1lcl9pcnFzOworCisJc3VtICs9IHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkucG11X2lycXM7CisJc3VtICs9IHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkubWNlX2V4Y2VwdGlvbnM7CisJc3VtICs9IHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuc3B1cmlvdXNfaXJxczsKKworCXJldHVybiBzdW07Cit9CisKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHZvaWQgZml4dXBfaXJxcyhjcHVtYXNrX3QgbWFwKQogewpAQCAtMzUzLDggKzQwMCw3IEBACiAJaWYgKGlycSAhPSBOT19JUlEgJiYgaXJxICE9IE5PX0lSUV9JR05PUkUpCiAJCWhhbmRsZV9vbmVfaXJxKGlycSk7CiAJZWxzZSBpZiAoaXJxICE9IE5PX0lSUV9JR05PUkUpCi0JCS8qIFRoYXQncyBub3QgU01QIHNhZmUgLi4uIGJ1dCB3aG8gY2FyZXMgPyAqLwotCQlwcGNfc3B1cmlvdXNfaW50ZXJydXB0cysrOworCQlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5zcHVyaW91c19pcnFzKys7CiAKIAlpcnFfZXhpdCgpOwogCXNldF9pcnFfcmVncyhvbGRfcmVncyk7CkBAIC00NzQsNyArNTIwLDcgQEAKICAqLwogCiBzdGF0aWMgTElTVF9IRUFEKGlycV9ob3N0cyk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlycV9iaWdfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhpcnFfYmlnX2xvY2spOwogc3RhdGljIHVuc2lnbmVkIGludCByZXZtYXBfdHJlZXNfYWxsb2NhdGVkOwogc3RhdGljIERFRklORV9NVVRFWChyZXZtYXBfdHJlZXNfbXV0ZXgpOwogc3RydWN0IGlycV9tYXBfZW50cnkgaXJxX21hcFtOUl9JUlFTXTsKQEAgLTUyMCwxNCArNTY2LDE0IEBACiAJaWYgKGhvc3QtPm9wcy0+bWF0Y2ggPT0gTlVMTCkKIAkJaG9zdC0+b3BzLT5tYXRjaCA9IGRlZmF1bHRfaXJxX2hvc3RfbWF0Y2g7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAogCS8qIElmIGl0J3MgYSBsZWdhY3kgY29udHJvbGxlciwgY2hlY2sgZm9yIGR1cGxpY2F0ZXMgYW5kCiAJICogbWFyayBpdCBhcyBhbGxvY2F0ZWQgKHdlIHVzZSBpcnEgMCBob3N0IHBvaW50ZXIgZm9yIHRoYXQKIAkgKi8KIAlpZiAocmV2bWFwX3R5cGUgPT0gSVJRX0hPU1RfTUFQX0xFR0FDWSkgewogCQlpZiAoaXJxX21hcFswXS5ob3N0ICE9IE5VTEwpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCQkJLyogSWYgd2UgYXJlIGVhcmx5IGJvb3QsIHdlIGNhbid0IGZyZWUgdGhlIHN0cnVjdHVyZSwKIAkJCSAqIHRvbyBiYWQuLi4KIAkJCSAqIHRoaXMgd2lsbCBiZSBmaXhlZCBvbmNlIHNsYWIgaXMgbWFkZSBhdmFpbGFibGUgZWFybHkKQEAgLTU0MSw3ICs1ODcsNyBAQAogCX0KIAogCWxpc3RfYWRkKCZob3N0LT5saW5rLCAmaXJxX2hvc3RzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CiAKIAkvKiBBZGRpdGlvbmFsIHNldHVwcyBwZXIgcmV2bWFwIHR5cGUgKi8KIAlzd2l0Y2gocmV2bWFwX3R5cGUpIHsKQEAgLTU5MiwxMyArNjM4LDEzIEBACiAJICogdGhlIGFic2VuY2Ugb2YgYSBkZXZpY2Ugbm9kZS4gVGhpcyBpc24ndCBhIHByb2JsZW0gc28gZmFyCiAJICogeWV0IHRob3VnaC4uLgogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaCwgJmlycV9ob3N0cywgbGluaykKIAkJaWYgKGgtPm9wcy0+bWF0Y2goaCwgbm9kZSkpIHsKIAkJCWZvdW5kID0gaDsKIAkJCWJyZWFrOwogCQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCXJldHVybiBmb3VuZDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlycV9maW5kX2hvc3QpOwpAQCAtOTY3LDcgKzEwMTMsNyBAQAogCWlmIChjb3VudCA9PSAwIHx8IGNvdW50ID4gKGlycV92aXJxX2NvdW50IC0gTlVNX0lTQV9JTlRFUlJVUFRTKSkKIAkJcmV0dXJuIE5PX0lSUTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCiAJLyogVXNlIGhpbnQgZm9yIDEgaW50ZXJydXB0IGlmIGFueSAqLwogCWlmIChjb3VudCA9PSAxICYmIGhpbnQgPj0gTlVNX0lTQV9JTlRFUlJVUFRTICYmCkBAIC05OTEsNyArMTAzNyw3IEBACiAJCX0KIAl9CiAJaWYgKGZvdW5kID09IE5PX0lSUSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gTk9fSVJROwogCX0KICBoaW50X2ZvdW5kOgpAQCAtMTAwMCw3ICsxMDQ2LDcgQEAKIAkJc21wX3dtYigpOwogCQlpcnFfbWFwW2ldLmhvc3QgPSBob3N0OwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGZvdW5kOwogfQogCkBAIC0xMDEyLDcgKzEwNTgsNyBAQAogCVdBUk5fT04gKHZpcnEgPCBOVU1fSVNBX0lOVEVSUlVQVFMpOwogCVdBUk5fT04gKGNvdW50ID09IDAgfHwgKHZpcnEgKyBjb3VudCkgPiBpcnFfdmlycV9jb3VudCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSB2aXJxOyBpIDwgKHZpcnEgKyBjb3VudCk7IGkrKykgewogCQlzdHJ1Y3QgaXJxX2hvc3QgKmhvc3Q7CiAKQEAgLTEwMjUsNyArMTA3MSw3IEBACiAJCXNtcF93bWIoKTsKIAkJaXJxX21hcFtpXS5ob3N0ID0gTlVMTDsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogfQogCiBpbnQgYXJjaF9lYXJseV9pcnFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYwppbmRleCBiNmJkMWVhLi40MWJhZGEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYwpAQCAtMzMzLDcgKzMzMyw3IEBACiAJCWF0b21pY19zZXQoJmtnZGJfY3B1X2RvaW5nX3NpbmdsZV9zdGVwLCAtMSk7CiAJCS8qIHNldCB0aGUgdHJhY2UgYml0IGlmIHdlJ3JlIHN0ZXBwaW5nICovCiAJCWlmIChyZW1jb21faW5fYnVmZmVyWzBdID09ICdzJykgewotI2lmIGRlZmluZWQoQ09ORklHXzQweCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCQkJbXRzcHIoU1BSTl9EQkNSMCwKIAkJCSAgICAgIG1mc3ByKFNQUk5fREJDUjApIHwgREJDUjBfSUMgfCBEQkNSMF9JRE0pOwogCQkJbGludXhfcmVncy0+bXNyIHw9IE1TUl9ERTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggYzkzMjk3OC4uM2ZkMWFmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2lmZGVmIENPTkZJR19CT09LRQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKICNkZWZpbmUgTVNSX1NJTkdMRVNURVAJKE1TUl9ERSkKICNlbHNlCiAjZGVmaW5lIE1TUl9TSU5HTEVTVEVQCShNU1JfU0UpCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkgKiBsaWtlIERlY3JlbWVudGVyIG9yIEV4dGVybmFsIEludGVycnVwdCAqLwogCXJlZ3MtPm1zciAmPSB+TVNSX0VFOwogCXJlZ3MtPm1zciB8PSBNU1JfU0lOR0xFU1RFUDsKLSNpZmRlZiBDT05GSUdfQk9PS0UKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJcmVncy0+bXNyICY9IH5NU1JfQ0U7CiAJbXRzcHIoU1BSTl9EQkNSMCwgbWZzcHIoU1BSTl9EQkNSMCkgfCBEQkNSMF9JQyB8IERCQ1IwX0lETSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKaW5kZXggNzlhMDBiYi4uZDA5ZDFjNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKQEAgLTM1OSw3ICszNTksNyBAQAogCiAJdW5zaWduZWQgY2hhciAqbG9jYWxfYnVmZmVyID0ga21hbGxvYyhTUExQQVJfTUFYTEVOR1RILCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxvY2FsX2J1ZmZlcikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzICVzIGttYWxsb2MgZmFpbHVyZSBhdCBsaW5lICVkIFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyAlcyBrbWFsbG9jIGZhaWx1cmUgYXQgbGluZSAlZFxuIiwKIAkJICAgICAgIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCQlyZXR1cm47CiAJfQpAQCAtMzgzLDEzICszODMsMTMgQEAKIAkJaW50IGlkeCwgd19pZHg7CiAJCWNoYXIgKndvcmtidWZmZXIgPSBremFsbG9jKFNQTFBBUl9NQVhMRU5HVEgsIEdGUF9LRVJORUwpOwogCQlpZiAoIXdvcmtidWZmZXIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXMgJXMga21hbGxvYyBmYWlsdXJlIGF0IGxpbmUgJWQgXG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSICIlcyAlcyBrbWFsbG9jIGZhaWx1cmUgYXQgbGluZSAlZFxuIiwKIAkJCSAgICAgICBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKTsKIAkJCWtmcmVlKGxvY2FsX2J1ZmZlcik7CiAJCQlyZXR1cm47CiAJCX0KICNpZmRlZiBMUEFSQ0ZHX0RFQlVHCi0JCXByaW50ayhLRVJOX0lORk8gInN1Y2Nlc3MgY2FsbGluZyBnZXQtc3lzdGVtLXBhcmFtZXRlciBcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJzdWNjZXNzIGNhbGxpbmcgZ2V0LXN5c3RlbS1wYXJhbWV0ZXJcbiIpOwogI2VuZGlmCiAJCXNwbHBhcl9zdHJsZW4gPSBsb2NhbF9idWZmZXJbMF0gKiAyNTYgKyBsb2NhbF9idWZmZXJbMV07CiAJCWxvY2FsX2J1ZmZlciArPSAyOwkvKiBzdGVwIG92ZXIgc3RybGVuIHZhbHVlICovCkBAIC00NDAsNyArNDQwLDcgQEAKIAogCXdoaWxlICgoY3B1c19kbiA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKGNwdXNfZG4sICJjcHUiKSkpIHsKICNpZmRlZiBMUEFSQ0ZHX0RFQlVHCi0JCXByaW50ayhLRVJOX0VSUiAiY3B1c19kbiAlcCBcbiIsIGNwdXNfZG4pOworCQlwcmludGsoS0VSTl9FUlIgImNwdXNfZG4gJXBcbiIsIGNwdXNfZG4pOwogI2VuZGlmCiAJCWNvdW50Kys7CiAJfQpAQCAtNzI1LDcgKzcyNSw3IEBACiAJY29uc3QgdW5zaWduZWQgaW50ICpscF9pbmRleF9wdHI7CiAJdW5zaWduZWQgaW50IGxwX2luZGV4ID0gMDsKIAotCXNlcV9wcmludGYobSwgIiVzICVzIFxuIiwgTU9EVUxFX05BTUUsIE1PRFVMRV9WRVJTKTsKKwlzZXFfcHJpbnRmKG0sICIlcyAlc1xuIiwgTU9EVUxFX05BTUUsIE1PRFVMRV9WRVJTKTsKIAogCXJvb3RkbiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CiAJaWYgKHJvb3RkbikgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jCmluZGV4IGFkNDYxZTcuLjljZjE5N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMKQEAgLTMzOCw4ICszMzgsOCBAQAogCiAJcmMgPSBudnJhbV93cml0ZV9oZWFkZXIobmV3X3BhcnQpOwogCWlmIChyYyA8PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibnZyYW1fY3JlYXRlX29zX3BhcnRpdGlvbjogbnZyYW1fd3JpdGVfaGVhZGVyIFwKLQkJCQlmYWlsZWQgKCVkKVxuIiwgcmMpOworCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX2NyZWF0ZV9vc19wYXJ0aXRpb246IG52cmFtX3dyaXRlX2hlYWRlciAiCisJCQkJImZhaWxlZCAoJWQpXG4iLCByYyk7CiAJCXJldHVybiByYzsKIAl9CiAKQEAgLTM0OSw3ICszNDksNyBAQAogCXJjID0gcHBjX21kLm52cmFtX3dyaXRlKChjaGFyICopJnNlcV9pbml0LCBzaXplb2Yoc2VxX2luaXQpLCAmdG1wX2luZGV4KTsKIAlpZiAocmMgPD0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX2NyZWF0ZV9vc19wYXJ0aXRpb246IG52cmFtX3dyaXRlICIKLQkJCQkiZmFpbGVkICglZClcbiIsIHJjKTsKKwkJICAgICAgICJmYWlsZWQgKCVkKVxuIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9wbGF0Zm9ybS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9wbGF0Zm9ybS5jCmluZGV4IDFhNGZjMGQuLjY2NmQwOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfcGxhdGZvcm0uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL29mX3BsYXRmb3JtLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogc3RhdGljIGludCBvZl9kZXZfcGhhbmRsZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJcGhhbmRsZSAqcGggPSBkYXRhOwotCXJldHVybiB0b19vZl9kZXZpY2UoZGV2KS0+bm9kZS0+bGludXhfcGhhbmRsZSA9PSAqcGg7CisJcmV0dXJuIHRvX29mX2RldmljZShkZXYpLT5ub2RlLT5waGFuZGxlID09ICpwaDsKIH0KIAogc3RydWN0IG9mX2RldmljZSAqb2ZfZmluZF9kZXZpY2VfYnlfcGhhbmRsZShwaGFuZGxlIHBoKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwppbmRleCBjYWRiZWQ2Li4yNTk3Zjk1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwpAQCAtMTA0NywxMCArMTA0Nyw4IEBACiAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gYnVzLT5zZWxmOwogCi0JZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgKytpKSB7Ci0JCWlmICgocmVzID0gYnVzLT5yZXNvdXJjZVtpXSkgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXJlcy0+ZmxhZ3MpCisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaSkgeworCQlpZiAoIXJlcyB8fCAhcmVzLT5mbGFncykKIAkJCWNvbnRpbnVlOwogCQlpZiAoaSA+PSAzICYmIGJ1cy0+c2VsZi0+dHJhbnNwYXJlbnQpCiAJCQljb250aW51ZTsKQEAgLTExODEsMjEgKzExNzksMjAgQEAKICAqIGJ1dCB3ZSB3YW50IHRvIHRyeSB0byBhdm9pZCBhbGxvY2F0aW5nIGF0IDB4MjkwMC0weDJiZmYKICAqIHdoaWNoIG1pZ2h0IGhhdmUgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KLXZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRhdGE7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwotCiAJCWlmIChza2lwX2lzYV9pb3Jlc291cmNlX2FsaWduKGRldikpCi0JCQlyZXR1cm47Ci0JCWlmIChzdGFydCAmIDB4MzAwKSB7CisJCQlyZXR1cm4gc3RhcnQ7CisJCWlmIChzdGFydCAmIDB4MzAwKQogCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCX0KIAl9CisKKwlyZXR1cm4gc3RhcnQ7CiB9CiBFWFBPUlRfU1lNQk9MKHBjaWJpb3NfYWxpZ25fcmVzb3VyY2UpOwogCkBAIC0xMjc4LDkgKzEyNzUsOCBAQAogCXByX2RlYnVnKCJQQ0k6IEFsbG9jYXRpbmcgYnVzIHJlc291cmNlcyBmb3IgJTA0eDolMDJ4Li4uXG4iLAogCQkgcGNpX2RvbWFpbl9ucihidXMpLCBidXMtPm51bWJlcik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyArK2kpIHsKLQkJaWYgKChyZXMgPSBidXMtPnJlc291cmNlW2ldKSA9PSBOVUxMIHx8ICFyZXMtPmZsYWdzCi0JCSAgICB8fCByZXMtPnN0YXJ0ID4gcmVzLT5lbmQgfHwgcmVzLT5wYXJlbnQpCisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaSkgeworCQlpZiAoIXJlcyB8fCAhcmVzLT5mbGFncyB8fCByZXMtPnN0YXJ0ID4gcmVzLT5lbmQgfHwgcmVzLT5wYXJlbnQpCiAJCQljb250aW51ZTsKIAkJaWYgKGJ1cy0+cGFyZW50ID09IE5VTEwpCiAJCQlwciA9IChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgPwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKaW5kZXggY2NmNTZhYy4uZDQzZmM2NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAkgKiBHNSBtYWNoaW5lcy4uLiBTbyB3aGVuIHNvbWV0aGluZyBhc2tzIGZvciBidXMgMCBpbyBiYXNlCiAJICogKGJ1cyAwIGlzIEhUIHJvb3QpLCB3ZSByZXR1cm4gdGhlIEFHUCBvbmUgaW5zdGVhZC4KIAkgKi8KLQlpZiAoaW5fYnVzID09IDAgJiYgbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKSB7CisJaWYgKGluX2J1cyA9PSAwICYmIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkgewogCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmFncDsKIAogCQlhZ3AgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAidTMtYWdwIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9vZl9zY2FuLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9vZl9zY2FuLmMKaW5kZXggNzMxMWZkZi4uY2QxMWQ1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfb2Zfc2Nhbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX29mX3NjYW4uYwpAQCAtMTIzLDYgKzEyMyw3IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAljb25zdCBjaGFyICp0eXBlOworCXN0cnVjdCBwY2lfc2xvdCAqc2xvdDsKIAogCWRldiA9IGFsbG9jX3BjaV9kZXYoKTsKIAlpZiAoIWRldikKQEAgLTE0MCw2ICsxNDEsMTEgQEAKIAlkZXYtPmRldmZuID0gZGV2Zm47CiAJZGV2LT5tdWx0aWZ1bmN0aW9uID0gMDsJCS8qIG1heWJlIGEgbGllPyAqLwogCWRldi0+bmVlZHNfZnJlc2V0ID0gMDsJCS8qIHBjaWUgZnVuZGFtZW50YWwgcmVzZXQgcmVxdWlyZWQgKi8KKwlzZXRfcGNpZV9wb3J0X3R5cGUoZGV2KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2xvdCwgJmRldi0+YnVzLT5zbG90cywgbGlzdCkKKwkJaWYgKFBDSV9TTE9UKGRldi0+ZGV2Zm4pID09IHNsb3QtPm51bWJlcikKKwkJCWRldi0+c2xvdCA9IHNsb3Q7CiAKIAlkZXYtPnZlbmRvciA9IGdldF9pbnRfcHJvcChub2RlLCAidmVuZG9yLWlkIiwgMHhmZmZmKTsKIAlkZXYtPmRldmljZSA9IGdldF9pbnRfcHJvcChub2RlLCAiZGV2aWNlLWlkIiwgMHhmZmZmKTsKQEAgLTE2MCwxMCArMTY2LDE0IEBACiAJZGV2LT5lcnJvcl9zdGF0ZSA9IHBjaV9jaGFubmVsX2lvX25vcm1hbDsKIAlkZXYtPmRtYV9tYXNrID0gMHhmZmZmZmZmZjsKIAorCS8qIEVhcmx5IGZpeHVwcywgYmVmb3JlIHByb2JpbmcgdGhlIEJBUnMgKi8KKwlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9lYXJseSwgZGV2KTsKKwogCWlmICghc3RyY21wKHR5cGUsICJwY2kiKSB8fCAhc3RyY21wKHR5cGUsICJwY2lleCIpKSB7CiAJCS8qIGEgUENJLVBDSSBicmlkZ2UgKi8KIAkJZGV2LT5oZHJfdHlwZSA9IFBDSV9IRUFERVJfVFlQRV9CUklER0U7CiAJCWRldi0+cm9tX2Jhc2VfcmVnID0gUENJX1JPTV9BRERSRVNTMTsKKwkJc2V0X3BjaWVfaG90cGx1Z19icmlkZ2UoZGV2KTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgImNhcmRidXMiKSkgewogCQlkZXYtPmhkcl90eXBlID0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVM7CiAJfSBlbHNlIHsKQEAgLTI5NCw3ICszMDQsNyBAQAogCWludCByZWdsZW4sIGRldmZuOwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAKLQlwcl9kZWJ1Zygib2Zfc2Nhbl9idXMoJXMpIGJ1cyBubyAlZC4uLiBcbiIsCisJcHJfZGVidWcoIm9mX3NjYW5fYnVzKCVzKSBidXMgbm8gJWQuLi5cbiIsCiAJCSBub2RlLT5mdWxsX25hbWUsIGJ1cy0+bnVtYmVyKTsKIAogCS8qIFNjYW4gZGlyZWN0IGNoaWxkcmVuICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKaW5kZXggYTNjMTFjYS4uOTVhZDlkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYwpAQCAtNDk1LDkgKzQ5NSw2IEBACiAKIAllbnRyeS0+bnIgPSAwOwogCi0JaWYgKGN1cnJlbnQtPnBpZCA9PSAwKQkJLyogaWRsZSB0YXNrPyAqLwotCQlyZXR1cm4gZW50cnk7Ci0KIAlpZiAoIXVzZXJfbW9kZShyZWdzKSkgewogCQlwZXJmX2NhbGxjaGFpbl9rZXJuZWwocmVncywgZW50cnkpOwogCQlpZiAoY3VycmVudC0+bW0pCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDFlYjg1ZmIuLmI2Y2Y4ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC03MTgsMTAgKzcxOCwxMCBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgdm9pZCBldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBjcHUpCitzdGF0aWMgdm9pZCBldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkU7Ci0JZXZlbnQtPm9uY3B1ID0gY3B1OworCWV2ZW50LT5vbmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlldmVudC0+dHN0YW1wX3J1bm5pbmcgKz0gZXZlbnQtPmN0eC0+dGltZSAtIGV2ZW50LT50c3RhbXBfc3RvcHBlZDsKIAlpZiAoaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpKQogCQlldmVudC0+cG11LT5lbmFibGUoZXZlbnQpOwpAQCAtNzM1LDcgKzczNSw3IEBACiAgKi8KIGludCBod19wZXJmX2dyb3VwX3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9sZWFkZXIsCiAJICAgICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCi0JICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwgaW50IGNwdSkKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodzsKIAlsb25nIGksIG4sIG4wOwpAQCAtNzY2LDEwICs3NjYsMTAgQEAKIAkJY3B1aHctPmV2ZW50W2ldLT5ody5jb25maWcgPSBjcHVody0+ZXZlbnRzW2ldOwogCWNwdWN0eC0+YWN0aXZlX29uY3B1ICs9IG47CiAJbiA9IDE7Ci0JZXZlbnRfc2NoZWRfaW4oZ3JvdXBfbGVhZGVyLCBjcHUpOworCWV2ZW50X3NjaGVkX2luKGdyb3VwX2xlYWRlcik7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZncm91cF9sZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKIAkJaWYgKHN1Yi0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9PRkYpIHsKLQkJCWV2ZW50X3NjaGVkX2luKHN1YiwgY3B1KTsKKwkJCWV2ZW50X3NjaGVkX2luKHN1Yik7CiAJCQkrK247CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BtYy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wbWMuYwppbmRleCAwNTE2ZTJkLi40NjE0OTliIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BtYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG1jLmMKQEAgLTM3LDcgKzM3LDcgQEAKIH0KIAogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBtY19vd25lcl9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHBtY19vd25lcl9sb2NrKTsKIHN0YXRpYyB2b2lkICpwbWNfb3duZXJfY2FsbGVyOyAvKiBtb3N0bHkgZm9yIGRlYnVnZ2luZyAqLwogcGVyZl9pcnFfdCBwZXJmX2lycSA9IGR1bW15X3BlcmY7CiAKQEAgLTQ1LDcgKzQ1LDcgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAotCXNwaW5fbG9jaygmcG1jX293bmVyX2xvY2spOworCXJhd19zcGluX2xvY2soJnBtY19vd25lcl9sb2NrKTsKIAogCWlmIChwbWNfb3duZXJfY2FsbGVyKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJlc2VydmVfcG1jX2hhcmR3YXJlOiAiCkBAIC01OSwyMSArNTksMjEgQEAKIAlwZXJmX2lycSA9IG5ld19wZXJmX2lycSA/IG5ld19wZXJmX2lycSA6IGR1bW15X3BlcmY7CiAKICBvdXQ6Ci0Jc3Bpbl91bmxvY2soJnBtY19vd25lcl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnBtY19vd25lcl9sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVzZXJ2ZV9wbWNfaGFyZHdhcmUpOwogCiB2b2lkIHJlbGVhc2VfcG1jX2hhcmR3YXJlKHZvaWQpCiB7Ci0Jc3Bpbl9sb2NrKCZwbWNfb3duZXJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmcG1jX293bmVyX2xvY2spOwogCiAJV0FSTl9PTighIHBtY19vd25lcl9jYWxsZXIpOwogCiAJcG1jX293bmVyX2NhbGxlciA9IE5VTEw7CiAJcGVyZl9pcnEgPSBkdW1teV9wZXJmOwogCi0Jc3Bpbl91bmxvY2soJnBtY19vd25lcl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnBtY19vd25lcl9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlbGVhc2VfcG1jX2hhcmR3YXJlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwppbmRleCBjOTMwYWMzLi5lNGQ3MWNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjQ1LDYgKzI0NSwyNCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKK3ZvaWQgZG9fc2VuZF90cmFwKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCSAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLCBpbnQgc2lnbmFsX2NvZGUsIGludCBicmVha3B0KQoreworCXNpZ2luZm9fdCBpbmZvOworCisJaWYgKG5vdGlmeV9kaWUoRElFX0RBQlJfTUFUQ0gsICJkYWJyX21hdGNoIiwgcmVncywgZXJyb3JfY29kZSwKKwkJCTExLCBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKKwkJcmV0dXJuOworCisJLyogRGVsaXZlciB0aGUgc2lnbmFsIHRvIHVzZXJzcGFjZSAqLworCWluZm8uc2lfc2lnbm8gPSBTSUdUUkFQOworCWluZm8uc2lfZXJybm8gPSBicmVha3B0OwkvKiBicmVha3BvaW50IG9yIHdhdGNocG9pbnQgaWQgKi8KKwlpbmZvLnNpX2NvZGUgPSBzaWduYWxfY29kZTsKKwlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilhZGRyZXNzOworCWZvcmNlX3NpZ19pbmZvKFNJR1RSQVAsICZpbmZvLCBjdXJyZW50KTsKK30KKyNlbHNlCS8qICFDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCiB2b2lkIGRvX2RhYnIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJICAgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKIHsKQEAgLTI1NywxMiArMjc1LDYgQEAKIAlpZiAoZGVidWdnZXJfZGFicl9tYXRjaChyZWdzKSkKIAkJcmV0dXJuOwogCi0JLyogQ2xlYXIgdGhlIERBQyBhbmQgc3RydWN0IGVudHJpZXMuICBPbmUgc2hvdCB0cmlnZ2VyICovCi0jaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCi0JbXRzcHIoU1BSTl9EQkNSMCwgbWZzcHIoU1BSTl9EQkNSMCkgJiB+KERCU1JfREFDMVIgfCBEQlNSX0RBQzFXCi0JCQkJCQkJfCBEQkNSMF9JRE0pKTsKLSNlbmRpZgotCiAJLyogQ2xlYXIgdGhlIERBQlIgKi8KIAlzZXRfZGFicigwKTsKIApAQCAtMjczLDkgKzI4NSw4MiBAQAogCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKWFkZHJlc3M7CiAJZm9yY2Vfc2lnX2luZm8oU0lHVFJBUCwgJmluZm8sIGN1cnJlbnQpOwogfQorI2VuZGlmCS8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGN1cnJlbnRfZGFicik7CiAKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCisvKgorICogU2V0IHRoZSBkZWJ1ZyByZWdpc3RlcnMgYmFjayB0byB0aGVpciBkZWZhdWx0ICJzYWZlIiB2YWx1ZXMuCisgKi8KK3N0YXRpYyB2b2lkIHNldF9kZWJ1Z19yZWdfZGVmYXVsdHMoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCkKK3sKKwl0aHJlYWQtPmlhYzEgPSB0aHJlYWQtPmlhYzIgPSAwOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0lBQ1MgPiAyCisJdGhyZWFkLT5pYWMzID0gdGhyZWFkLT5pYWM0ID0gMDsKKyNlbmRpZgorCXRocmVhZC0+ZGFjMSA9IHRocmVhZC0+ZGFjMiA9IDA7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyA+IDAKKwl0aHJlYWQtPmR2YzEgPSB0aHJlYWQtPmR2YzIgPSAwOworI2VuZGlmCisJdGhyZWFkLT5kYmNyMCA9IDA7CisjaWZkZWYgQ09ORklHX0JPT0tFCisJLyoKKwkgKiBGb3JjZSBVc2VyL1N1cGVydmlzb3IgYml0cyB0byBiMTEgKHVzZXItb25seSBNU1JbUFJdPTEpCisJICovCisJdGhyZWFkLT5kYmNyMSA9IERCQ1IxX0lBQzFVUyB8IERCQ1IxX0lBQzJVUyB8CVwKKwkJCURCQ1IxX0lBQzNVUyB8IERCQ1IxX0lBQzRVUzsKKwkvKgorCSAqIEZvcmNlIERhdGEgQWRkcmVzcyBDb21wYXJlIFVzZXIvU3VwZXJ2aXNvciBiaXRzIHRvIGJlIFVzZXItb25seQorCSAqICgwYjExIE1TUltQUl09MSkgYW5kIHNldCBhbGwgb3RoZXIgYml0cyBpbiBEQkNSMiByZWdpc3RlciB0byBiZSAwLgorCSAqLworCXRocmVhZC0+ZGJjcjIgPSBEQkNSMl9EQUMxVVMgfCBEQkNSMl9EQUMyVVM7CisjZWxzZQorCXRocmVhZC0+ZGJjcjEgPSAwOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHByaW1lX2RlYnVnX3JlZ3Moc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCkKK3sKKwltdHNwcihTUFJOX0lBQzEsIHRocmVhZC0+aWFjMSk7CisJbXRzcHIoU1BSTl9JQUMyLCB0aHJlYWQtPmlhYzIpOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0lBQ1MgPiAyCisJbXRzcHIoU1BSTl9JQUMzLCB0aHJlYWQtPmlhYzMpOworCW10c3ByKFNQUk5fSUFDNCwgdGhyZWFkLT5pYWM0KTsKKyNlbmRpZgorCW10c3ByKFNQUk5fREFDMSwgdGhyZWFkLT5kYWMxKTsKKwltdHNwcihTUFJOX0RBQzIsIHRocmVhZC0+ZGFjMik7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyA+IDAKKwltdHNwcihTUFJOX0RWQzEsIHRocmVhZC0+ZHZjMSk7CisJbXRzcHIoU1BSTl9EVkMyLCB0aHJlYWQtPmR2YzIpOworI2VuZGlmCisJbXRzcHIoU1BSTl9EQkNSMCwgdGhyZWFkLT5kYmNyMCk7CisJbXRzcHIoU1BSTl9EQkNSMSwgdGhyZWFkLT5kYmNyMSk7CisjaWZkZWYgQ09ORklHX0JPT0tFCisJbXRzcHIoU1BSTl9EQkNSMiwgdGhyZWFkLT5kYmNyMik7CisjZW5kaWYKK30KKy8qCisgKiBVbmxlc3MgbmVpdGhlciB0aGUgb2xkIG9yIG5ldyB0aHJlYWQgYXJlIG1ha2luZyB1c2Ugb2YgdGhlCisgKiBkZWJ1ZyByZWdpc3RlcnMsIHNldCB0aGUgZGVidWcgcmVnaXN0ZXJzIGZyb20gdGhlIHZhbHVlcworICogc3RvcmVkIGluIHRoZSBuZXcgdGhyZWFkLgorICovCitzdGF0aWMgdm9pZCBzd2l0Y2hfYm9va2VfZGVidWdfcmVncyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqbmV3X3RocmVhZCkKK3sKKwlpZiAoKGN1cnJlbnQtPnRocmVhZC5kYmNyMCAmIERCQ1IwX0lETSkKKwkJfHwgKG5ld190aHJlYWQtPmRiY3IwICYgREJDUjBfSURNKSkKKwkJCXByaW1lX2RlYnVnX3JlZ3MobmV3X3RocmVhZCk7Cit9CisjZWxzZQkvKiAhQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLworc3RhdGljIHZvaWQgc2V0X2RlYnVnX3JlZ19kZWZhdWx0cyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkKQoreworCWlmICh0aHJlYWQtPmRhYnIpIHsKKwkJdGhyZWFkLT5kYWJyID0gMDsKKwkJc2V0X2RhYnIoMCk7CisJfQorfQorI2VuZGlmCS8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KKwogaW50IHNldF9kYWJyKHVuc2lnbmVkIGxvbmcgZGFicikKIHsKIAlfX2dldF9jcHVfdmFyKGN1cnJlbnRfZGFicikgPSBkYWJyOwpAQCAtMjg0LDcgKzM2OSw3IEBACiAJCXJldHVybiBwcGNfbWQuc2V0X2RhYnIoZGFicik7CiAKIAkvKiBYWFggc2hvdWxkIHdlIGhhdmUgYSBDUFVfRlRSX0hBU19EQUJSID8gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJbXRzcHIoU1BSTl9EQUMxLCBkYWJyKTsKICNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM1MpCiAJbXRzcHIoU1BSTl9EQUJSLCBkYWJyKTsKQEAgLTM3MSwxMCArNDU2LDggQEAKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKQotCS8qIElmIG5ldyB0aHJlYWQgREFDIChIVyBicmVha3BvaW50KSBpcyB0aGUgc2FtZSB0aGVuIGxlYXZlIGl0ICovCi0JaWYgKG5ldy0+dGhyZWFkLmRhYnIpCi0JCXNldF9kYWJyKG5ldy0+dGhyZWFkLmRhYnIpOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwlzd2l0Y2hfYm9va2VfZGVidWdfcmVncygmbmV3LT50aHJlYWQpOwogI2Vsc2UKIAlpZiAodW5saWtlbHkoX19nZXRfY3B1X3ZhcihjdXJyZW50X2RhYnIpICE9IG5ldy0+dGhyZWFkLmRhYnIpKQogCQlzZXRfZGFicihuZXctPnRocmVhZC5kYWJyKTsKQEAgLTUxNCw3ICs1OTcsNyBAQAogCXByaW50aygiICBDUjogJTA4bHggIFhFUjogJTA4bHhcbiIsIHJlZ3MtPmNjciwgcmVncy0+eGVyKTsKIAl0cmFwID0gVFJBUChyZWdzKTsKIAlpZiAodHJhcCA9PSAweDMwMCB8fCB0cmFwID09IDB4NjAwKQotI2lmIGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCQlwcmludGsoIkRFQVI6ICJSRUciLCBFU1I6ICJSRUciXG4iLCByZWdzLT5kYXIsIHJlZ3MtPmRzaXNyKTsKICNlbHNlCiAJCXByaW50aygiREFSOiAiUkVHIiwgRFNJU1I6ICJSRUciXG4iLCByZWdzLT5kYXIsIHJlZ3MtPmRzaXNyKTsKQEAgLTU1NCwyOCArNjM3LDkgQEAKIAogdm9pZCBmbHVzaF90aHJlYWQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfUFBDNjQKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7Ci0KLQlpZiAodGVzdF90aV90aHJlYWRfZmxhZyh0LCBUSUZfQUJJX1BFTkRJTkcpKSB7Ci0JCWNsZWFyX3RpX3RocmVhZF9mbGFnKHQsIFRJRl9BQklfUEVORElORyk7Ci0JCWlmICh0ZXN0X3RpX3RocmVhZF9mbGFnKHQsIFRJRl8zMkJJVCkpCi0JCQljbGVhcl90aV90aHJlYWRfZmxhZyh0LCBUSUZfMzJCSVQpOwotCQllbHNlCi0JCQlzZXRfdGlfdGhyZWFkX2ZsYWcodCwgVElGXzMyQklUKTsKLQl9Ci0jZW5kaWYKLQogCWRpc2NhcmRfbGF6eV9jcHVfc3RhdGUoKTsKIAotCWlmIChjdXJyZW50LT50aHJlYWQuZGFicikgewotCQljdXJyZW50LT50aHJlYWQuZGFiciA9IDA7Ci0JCXNldF9kYWJyKDApOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCi0JCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+KERCU1JfREFDMVIgfCBEQlNSX0RBQzFXKTsKLSNlbmRpZgotCX0KKwlzZXRfZGVidWdfcmVnX2RlZmF1bHRzKCZjdXJyZW50LT50aHJlYWQpOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCmluZGV4IDRlYzMwMDguLjQzMjM4YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCkBAIC02MSwzNjUgKzYxLDEyIEBACiAjZGVmaW5lIERCRyhmbXQuLi4pCiAjZW5kaWYKIAotCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgZHRfcm9vdF9hZGRyX2NlbGxzOwotc3RhdGljIGludCBfX2luaXRkYXRhIGR0X3Jvb3Rfc2l6ZV9jZWxsczsKLQogI2lmZGVmIENPTkZJR19QUEM2NAogaW50IF9faW5pdGRhdGEgaW9tbXVfaXNfb2ZmOwogaW50IF9faW5pdGRhdGEgaW9tbXVfZm9yY2Vfb247CiB1bnNpZ25lZCBsb25nIHRjZV9hbGxvY19zdGFydCwgdGNlX2FsbG9jX2VuZDsKICNlbmRpZgogCi10eXBlZGVmIHUzMiBjZWxsX3Q7Ci0KLSNpZiAwCi1zdGF0aWMgc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyICppbml0aWFsX2Jvb3RfcGFyYW1zIF9faW5pdGRhdGE7Ci0jZWxzZQotc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyICppbml0aWFsX2Jvb3RfcGFyYW1zOwotI2VuZGlmCi0KLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKmFsbG5vZGVzOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLwotCi1leHRlcm4gcndsb2NrX3QgZGV2dHJlZV9sb2NrOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLwotCi0vKiBleHBvcnQgdGhhdCB0byBvdXRzaWRlIHdvcmxkICovCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2Nob3NlbjsKLQotc3RhdGljIGlubGluZSBjaGFyICpmaW5kX2ZsYXRfZHRfc3RyaW5nKHUzMiBvZmZzZXQpCi17Ci0JcmV0dXJuICgoY2hhciAqKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cmluZ3MgKyBvZmZzZXQ7Ci19Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNjYW4gdGhlIGZsYXR0ZW5lZCBkZXZpY2UtdHJlZSwgaXQgaXMKLSAqIHVzZWQgdG8gZXh0cmFjdCB0aGUgbWVtb3J5IGluZm9ybWF0aW9ucyBhdCBib290IGJlZm9yZSB3ZSBjYW4KLSAqIHVuZmxhdHRlbiB0aGUgdHJlZQotICovCi1pbnQgX19pbml0IG9mX3NjYW5fZmxhdF9kdChpbnQgKCppdCkodW5zaWduZWQgbG9uZyBub2RlLAotCQkJCSAgICAgY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwKLQkJCQkgICAgIHZvaWQgKmRhdGEpLAotCQkJICAgdm9pZCAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIHAgPSAoKHVuc2lnbmVkIGxvbmcpaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RydWN0OwotCWludCByYyA9IDA7Ci0JaW50IGRlcHRoID0gLTE7Ci0KLQlkbyB7Ci0JCXUzMiB0YWcgPSAqKCh1MzIgKilwKTsKLQkJY2hhciAqcGF0aHA7Ci0JCQotCQlwICs9IDQ7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfRU5EX05PREUpIHsKLQkJCWRlcHRoIC0tOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHRhZyA9PSBPRl9EVF9OT1ApCi0JCQljb250aW51ZTsKLQkJaWYgKHRhZyA9PSBPRl9EVF9FTkQpCi0JCQlicmVhazsKLQkJaWYgKHRhZyA9PSBPRl9EVF9QUk9QKSB7Ci0JCQl1MzIgc3ogPSAqKCh1MzIgKilwKTsKLQkJCXAgKz0gODsKLQkJCWlmIChpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uIDwgMHgxMCkKLQkJCQlwID0gX0FMSUdOKHAsIHN6ID49IDggPyA4IDogNCk7Ci0JCQlwICs9IHN6OwotCQkJcCA9IF9BTElHTihwLCA0KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICh0YWcgIT0gT0ZfRFRfQkVHSU5fTk9ERSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW52YWxpZCB0YWcgJXggc2Nhbm5pbmcgZmxhdHRlbmVkIgotCQkJICAgICAgICIgZGV2aWNlIHRyZWUgIVxuIiwgdGFnKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWRlcHRoKys7Ci0JCXBhdGhwID0gKGNoYXIgKilwOwotCQlwID0gX0FMSUdOKHAgKyBzdHJsZW4ocGF0aHApICsgMSwgNCk7Ci0JCWlmICgoKnBhdGhwKSA9PSAnLycpIHsKLQkJCWNoYXIgKmxwLCAqbnA7Ci0JCQlmb3IgKGxwID0gTlVMTCwgbnAgPSBwYXRocDsgKm5wOyBucCsrKQotCQkJCWlmICgoKm5wKSA9PSAnLycpCi0JCQkJCWxwID0gbnArMTsKLQkJCWlmIChscCAhPSBOVUxMKQotCQkJCXBhdGhwID0gbHA7Ci0JCX0KLQkJcmMgPSBpdChwLCBwYXRocCwgZGVwdGgsIGRhdGEpOwotCQlpZiAocmMgIT0gMCkKLQkJCWJyZWFrOwkJCi0JfSB3aGlsZSgxKTsKLQotCXJldHVybiByYzsKLX0KLQotdW5zaWduZWQgbG9uZyBfX2luaXQgb2ZfZ2V0X2ZsYXRfZHRfcm9vdCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgcCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCi0JCWluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3Q7Ci0KLQl3aGlsZSgqKCh1MzIgKilwKSA9PSBPRl9EVF9OT1ApCi0JCXAgKz0gNDsKLQlCVUdfT04gKCooKHUzMiAqKXApICE9IE9GX0RUX0JFR0lOX05PREUpOwotCXAgKz0gNDsKLQlyZXR1cm4gX0FMSUdOKHAgKyBzdHJsZW4oKGNoYXIgKilwKSArIDEsIDQpOwotfQotCi0vKioKLSAqIFRoaXMgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHdpdGhpbiBzY2FuX2ZsYXR0ZW5lZF9kdCBjYWxsYmFjayB0byBnZXQKLSAqIGFjY2VzcyB0byBwcm9wZXJ0aWVzCi0gKi8KLXZvaWQqIF9faW5pdCBvZl9nZXRfZmxhdF9kdF9wcm9wKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgdW5zaWduZWQgbG9uZyAqc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHAgPSBub2RlOwotCi0JZG8gewotCQl1MzIgdGFnID0gKigodTMyICopcCk7Ci0JCXUzMiBzeiwgbm9mZjsKLQkJY29uc3QgY2hhciAqbnN0cjsKLQotCQlwICs9IDQ7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfTk9QKQotCQkJY29udGludWU7Ci0JCWlmICh0YWcgIT0gT0ZfRFRfUFJPUCkKLQkJCXJldHVybiBOVUxMOwotCi0JCXN6ID0gKigodTMyICopcCk7Ci0JCW5vZmYgPSAqKCh1MzIgKikocCArIDQpKTsKLQkJcCArPSA4OwotCQlpZiAoaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbiA8IDB4MTApCi0JCQlwID0gX0FMSUdOKHAsIHN6ID49IDggPyA4IDogNCk7Ci0KLQkJbnN0ciA9IGZpbmRfZmxhdF9kdF9zdHJpbmcobm9mZik7Ci0JCWlmIChuc3RyID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IGZpbmQgcHJvcGVydHkgaW5kZXgiCi0JCQkgICAgICAgIiBuYW1lICFcbiIpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJaWYgKHN0cmNtcChuYW1lLCBuc3RyKSA9PSAwKSB7Ci0JCQlpZiAoc2l6ZSkKLQkJCQkqc2l6ZSA9IHN6OwotCQkJcmV0dXJuICh2b2lkICopcDsKLQkJfQotCQlwICs9IHN6OwotCQlwID0gX0FMSUdOKHAsIDQpOwotCX0gd2hpbGUoMSk7Ci19Ci0KLWludCBfX2luaXQgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqY29tcGF0KQotewotCWNvbnN0IGNoYXIqIGNwOwotCXVuc2lnbmVkIGxvbmcgY3BsZW4sIGw7Ci0KLQljcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImNvbXBhdGlibGUiLCAmY3BsZW4pOwotCWlmIChjcCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQl3aGlsZSAoY3BsZW4gPiAwKSB7Ci0JCWlmIChzdHJuY2FzZWNtcChjcCwgY29tcGF0LCBzdHJsZW4oY29tcGF0KSkgPT0gMCkKLQkJCXJldHVybiAxOwotCQlsID0gc3RybGVuKGNwKSArIDE7Ci0JCWNwICs9IGw7Ci0JCWNwbGVuIC09IGw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkICpfX2luaXQgdW5mbGF0dGVuX2R0X2FsbG9jKHVuc2lnbmVkIGxvbmcgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFsaWduKQotewotCXZvaWQgKnJlczsKLQotCSptZW0gPSBfQUxJR04oKm1lbSwgYWxpZ24pOwotCXJlcyA9ICh2b2lkICopKm1lbTsKLQkqbWVtICs9IHNpemU7Ci0KLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgdW5mbGF0dGVuX2R0X25vZGUodW5zaWduZWQgbG9uZyBtZW0sCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnAsCi0JCQkJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGFkLAotCQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKioqYWxsbmV4dHBwLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGZwc2l6ZSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHAsICoqcHJldl9wcCA9IE5VTEw7Ci0JY2hhciAqcGF0aHA7Ci0JdTMyIHRhZzsKLQl1bnNpZ25lZCBpbnQgbCwgYWxsb2NsOwotCWludCBoYXNfbmFtZSA9IDA7Ci0JaW50IG5ld19mb3JtYXQgPSAwOwotCi0JdGFnID0gKigodTMyICopKCpwKSk7Ci0JaWYgKHRhZyAhPSBPRl9EVF9CRUdJTl9OT0RFKSB7Ci0JCXByaW50aygiV2VpcmQgdGFnIGF0IHN0YXJ0IG9mIG5vZGU6ICV4XG4iLCB0YWcpOwotCQlyZXR1cm4gbWVtOwotCX0KLQkqcCArPSA0OwotCXBhdGhwID0gKGNoYXIgKikqcDsKLQlsID0gYWxsb2NsID0gc3RybGVuKHBhdGhwKSArIDE7Ci0JKnAgPSBfQUxJR04oKnAgKyBsLCA0KTsKLQotCS8qIHZlcnNpb24gMHgxMCBoYXMgYSBtb3JlIGNvbXBhY3QgdW5pdCBuYW1lIGhlcmUgaW5zdGVhZCBvZiB0aGUgZnVsbAotCSAqIHBhdGguIHdlIGFjY3VtdWxhdGUgdGhlIGZ1bGwgcGF0aCBzaXplIHVzaW5nICJmcHNpemUiLCB3ZSdsbCByZWJ1aWxkCi0JICogaXQgbGF0ZXIuIFdlIGRldGVjdCB0aGlzIGJlY2F1c2UgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgbmFtZSBpcwotCSAqIG5vdCAnLycuCi0JICovCi0JaWYgKCgqcGF0aHApICE9ICcvJykgewotCQluZXdfZm9ybWF0ID0gMTsKLQkJaWYgKGZwc2l6ZSA9PSAwKSB7Ci0JCQkvKiByb290IG5vZGU6IHNwZWNpYWwgY2FzZS4gZnBzaXplIGFjY291bnRzIGZvciBwYXRoCi0JCQkgKiBwbHVzIHRlcm1pbmF0aW5nIHplcm8uIHJvb3Qgbm9kZSBvbmx5IGhhcyAnLycsIHNvCi0JCQkgKiBmcHNpemUgc2hvdWxkIGJlIDIsIGJ1dCB3ZSB3YW50IHRvIGF2b2lkIHRoZSBmaXJzdAotCQkJICogbGV2ZWwgbm9kZXMgdG8gaGF2ZSB0d28gJy8nIHNvIHdlIHVzZSBmcHNpemUgMSBoZXJlCi0JCQkgKi8KLQkJCWZwc2l6ZSA9IDE7Ci0JCQlhbGxvY2wgPSAyOwotCQl9IGVsc2UgewotCQkJLyogYWNjb3VudCBmb3IgJy8nIGFuZCBwYXRoIHNpemUgbWludXMgdGVybWluYWwgMAotCQkJICogYWxyZWFkeSBpbiAnbCcKLQkJCSAqLwotCQkJZnBzaXplICs9IGw7Ci0JCQlhbGxvY2wgPSBmcHNpemU7Ci0JCX0KLQl9Ci0KLQotCW5wID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgZGV2aWNlX25vZGUpICsgYWxsb2NsLAotCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBkZXZpY2Vfbm9kZSkpOwotCWlmIChhbGxuZXh0cHApIHsKLQkJbWVtc2V0KG5wLCAwLCBzaXplb2YoKm5wKSk7Ci0JCW5wLT5mdWxsX25hbWUgPSAoKGNoYXIqKW5wKSArIHNpemVvZihzdHJ1Y3QgZGV2aWNlX25vZGUpOwotCQlpZiAobmV3X2Zvcm1hdCkgewotCQkJY2hhciAqcCA9IG5wLT5mdWxsX25hbWU7Ci0JCQkvKiByZWJ1aWxkIGZ1bGwgcGF0aCBmb3IgbmV3IGZvcm1hdCAqLwotCQkJaWYgKGRhZCAmJiBkYWQtPnBhcmVudCkgewotCQkJCXN0cmNweShwLCBkYWQtPmZ1bGxfbmFtZSk7Ci0jaWZkZWYgREVCVUcKLQkJCQlpZiAoKHN0cmxlbihwKSArIGwgKyAxKSAhPSBhbGxvY2wpIHsKLQkJCQkJREJHKCIlczogcDogJWQsIGw6ICVkLCBhOiAlZFxuIiwKLQkJCQkJICAgIHBhdGhwLCAoaW50KXN0cmxlbihwKSwgbCwgYWxsb2NsKTsKLQkJCQl9Ci0jZW5kaWYKLQkJCQlwICs9IHN0cmxlbihwKTsKLQkJCX0KLQkJCSoocCsrKSA9ICcvJzsKLQkJCW1lbWNweShwLCBwYXRocCwgbCk7Ci0JCX0gZWxzZQotCQkJbWVtY3B5KG5wLT5mdWxsX25hbWUsIHBhdGhwLCBsKTsKLQkJcHJldl9wcCA9ICZucC0+cHJvcGVydGllczsKLQkJKiphbGxuZXh0cHAgPSBucDsKLQkJKmFsbG5leHRwcCA9ICZucC0+YWxsbmV4dDsKLQkJaWYgKGRhZCAhPSBOVUxMKSB7Ci0JCQlucC0+cGFyZW50ID0gZGFkOwotCQkJLyogd2UgdGVtcG9yYXJpbHkgdXNlIHRoZSBuZXh0IGZpZWxkIGFzIGBsYXN0X2NoaWxkJyovCi0JCQlpZiAoZGFkLT5uZXh0ID09IDApCi0JCQkJZGFkLT5jaGlsZCA9IG5wOwotCQkJZWxzZQotCQkJCWRhZC0+bmV4dC0+c2libGluZyA9IG5wOwotCQkJZGFkLT5uZXh0ID0gbnA7Ci0JCX0KLQkJa3JlZl9pbml0KCZucC0+a3JlZik7Ci0JfQotCXdoaWxlKDEpIHsKLQkJdTMyIHN6LCBub2ZmOwotCQljaGFyICpwbmFtZTsKLQotCQl0YWcgPSAqKCh1MzIgKikoKnApKTsKLQkJaWYgKHRhZyA9PSBPRl9EVF9OT1ApIHsKLQkJCSpwICs9IDQ7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAodGFnICE9IE9GX0RUX1BST1ApCi0JCQlicmVhazsKLQkJKnAgKz0gNDsKLQkJc3ogPSAqKCh1MzIgKikoKnApKTsKLQkJbm9mZiA9ICooKHUzMiAqKSgoKnApICsgNCkpOwotCQkqcCArPSA4OwotCQlpZiAoaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbiA8IDB4MTApCi0JCQkqcCA9IF9BTElHTigqcCwgc3ogPj0gOCA/IDggOiA0KTsKLQotCQlwbmFtZSA9IGZpbmRfZmxhdF9kdF9zdHJpbmcobm9mZik7Ci0JCWlmIChwbmFtZSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoIkNhbid0IGZpbmQgcHJvcGVydHkgbmFtZSBpbiBsaXN0ICFcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN0cmNtcChwbmFtZSwgIm5hbWUiKSA9PSAwKQotCQkJaGFzX25hbWUgPSAxOwotCQlsID0gc3RybGVuKHBuYW1lKSArIDE7Ci0JCXBwID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgcHJvcGVydHkpLAotCQkJCQlfX2FsaWdub2ZfXyhzdHJ1Y3QgcHJvcGVydHkpKTsKLQkJaWYgKGFsbG5leHRwcCkgewotCQkJaWYgKHN0cmNtcChwbmFtZSwgImxpbnV4LHBoYW5kbGUiKSA9PSAwKSB7Ci0JCQkJbnAtPm5vZGUgPSAqKCh1MzIgKikqcCk7Ci0JCQkJaWYgKG5wLT5saW51eF9waGFuZGxlID09IDApCi0JCQkJCW5wLT5saW51eF9waGFuZGxlID0gbnAtPm5vZGU7Ci0JCQl9Ci0JCQlpZiAoc3RyY21wKHBuYW1lLCAiaWJtLHBoYW5kbGUiKSA9PSAwKQotCQkJCW5wLT5saW51eF9waGFuZGxlID0gKigodTMyICopKnApOwotCQkJcHAtPm5hbWUgPSBwbmFtZTsKLQkJCXBwLT5sZW5ndGggPSBzejsKLQkJCXBwLT52YWx1ZSA9ICh2b2lkICopKnA7Ci0JCQkqcHJldl9wcCA9IHBwOwotCQkJcHJldl9wcCA9ICZwcC0+bmV4dDsKLQkJfQotCQkqcCA9IF9BTElHTigoKnApICsgc3osIDQpOwotCX0KLQkvKiB3aXRoIHZlcnNpb24gMHgxMCB3ZSBtYXkgbm90IGhhdmUgdGhlIG5hbWUgcHJvcGVydHksIHJlY3JlYXRlCi0JICogaXQgaGVyZSBmcm9tIHRoZSB1bml0IG5hbWUgaWYgYWJzZW50Ci0JICovCi0JaWYgKCFoYXNfbmFtZSkgewotCQljaGFyICpwID0gcGF0aHAsICpwcyA9IHBhdGhwLCAqcGEgPSBOVUxMOwotCQlpbnQgc3o7Ci0KLQkJd2hpbGUgKCpwKSB7Ci0JCQlpZiAoKCpwKSA9PSAnQCcpCi0JCQkJcGEgPSBwOwotCQkJaWYgKCgqcCkgPT0gJy8nKQotCQkJCXBzID0gcCArIDE7Ci0JCQlwKys7Ci0JCX0KLQkJaWYgKHBhIDwgcHMpCi0JCQlwYSA9IHA7Ci0JCXN6ID0gKHBhIC0gcHMpICsgMTsKLQkJcHAgPSB1bmZsYXR0ZW5fZHRfYWxsb2MoJm1lbSwgc2l6ZW9mKHN0cnVjdCBwcm9wZXJ0eSkgKyBzeiwKLQkJCQkJX19hbGlnbm9mX18oc3RydWN0IHByb3BlcnR5KSk7Ci0JCWlmIChhbGxuZXh0cHApIHsKLQkJCXBwLT5uYW1lID0gIm5hbWUiOwotCQkJcHAtPmxlbmd0aCA9IHN6OwotCQkJcHAtPnZhbHVlID0gcHAgKyAxOwotCQkJKnByZXZfcHAgPSBwcDsKLQkJCXByZXZfcHAgPSAmcHAtPm5leHQ7Ci0JCQltZW1jcHkocHAtPnZhbHVlLCBwcywgc3ogLSAxKTsKLQkJCSgoY2hhciAqKXBwLT52YWx1ZSlbc3ogLSAxXSA9IDA7Ci0JCQlEQkcoImZpeGVkIHVwIG5hbWUgZm9yICVzIC0+ICVzXG4iLCBwYXRocCwKLQkJCQkoY2hhciAqKXBwLT52YWx1ZSk7Ci0JCX0KLQl9Ci0JaWYgKGFsbG5leHRwcCkgewotCQkqcHJldl9wcCA9IE5VTEw7Ci0JCW5wLT5uYW1lID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAibmFtZSIsIE5VTEwpOwotCQlucC0+dHlwZSA9IG9mX2dldF9wcm9wZXJ0eShucCwgImRldmljZV90eXBlIiwgTlVMTCk7Ci0KLQkJaWYgKCFucC0+bmFtZSkKLQkJCW5wLT5uYW1lID0gIjxOVUxMPiI7Ci0JCWlmICghbnAtPnR5cGUpCi0JCQlucC0+dHlwZSA9ICI8TlVMTD4iOwotCX0KLQl3aGlsZSAodGFnID09IE9GX0RUX0JFR0lOX05PREUpIHsKLQkJbWVtID0gdW5mbGF0dGVuX2R0X25vZGUobWVtLCBwLCBucCwgYWxsbmV4dHBwLCBmcHNpemUpOwotCQl0YWcgPSAqKCh1MzIgKikoKnApKTsKLQl9Ci0JaWYgKHRhZyAhPSBPRl9EVF9FTkRfTk9ERSkgewotCQlwcmludGsoIldlaXJkIHRhZyBhdCBlbmQgb2Ygbm9kZTogJXhcbiIsIHRhZyk7Ci0JCXJldHVybiBtZW07Ci0JfQotCSpwICs9IDQ7Ci0JcmV0dXJuIG1lbTsKLX0KLQogc3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtKGNoYXIgKnApCiB7CiAJaWYgKCFwKQpAQCAtNDQ2LDcgKzkzLDcgQEAKIAlEQkcoIi0+IG1vdmVfZGV2aWNlX3RyZWVcbiIpOwogCiAJc3RhcnQgPSBfX3BhKGluaXRpYWxfYm9vdF9wYXJhbXMpOwotCXNpemUgPSBpbml0aWFsX2Jvb3RfcGFyYW1zLT50b3RhbHNpemU7CisJc2l6ZSA9IGJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPnRvdGFsc2l6ZSk7CiAKIAlpZiAoKG1lbW9yeV9saW1pdCAmJiAoc3RhcnQgKyBzaXplKSA+IG1lbW9yeV9saW1pdCkgfHwKIAkJCW92ZXJsYXBzX2NyYXNoa2VybmVsKHN0YXJ0LCBzaXplKSkgewpAQCAtNDU5LDU0ICsxMDYsNiBAQAogCURCRygiPC0gbW92ZV9kZXZpY2VfdHJlZVxuIik7CiB9CiAKLS8qKgotICogdW5mbGF0dGVucyB0aGUgZGV2aWNlLXRyZWUgcGFzc2VkIGJ5IHRoZSBmaXJtd2FyZSwgY3JlYXRpbmcgdGhlCi0gKiB0cmVlIG9mIHN0cnVjdCBkZXZpY2Vfbm9kZS4gSXQgYWxzbyBmaWxscyB0aGUgIm5hbWUiIGFuZCAidHlwZSIKLSAqIHBvaW50ZXJzIG9mIHRoZSBub2RlcyBzbyB0aGUgbm9ybWFsIGRldmljZS10cmVlIHdhbGtpbmcgZnVuY3Rpb25zCi0gKiBjYW4gYmUgdXNlZCAodGhpcyB1c2VkIHRvIGJlIGRvbmUgYnkgZmluaXNoX2RldmljZV90cmVlKQotICovCi12b2lkIF9faW5pdCB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBtZW0sIHNpemU7Ci0Jc3RydWN0IGRldmljZV9ub2RlICoqYWxsbmV4dHAgPSAmYWxsbm9kZXM7Ci0KLQlEQkcoIiAtPiB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUoKVxuIik7Ci0KLQkvKiBGaXJzdCBwYXNzLCBzY2FuIGZvciBzaXplICovCi0Jc3RhcnQgPSAoKHVuc2lnbmVkIGxvbmcpaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RydWN0OwotCXNpemUgPSB1bmZsYXR0ZW5fZHRfbm9kZSgwLCAmc3RhcnQsIE5VTEwsIE5VTEwsIDApOwotCXNpemUgPSAoc2l6ZSB8IDMpICsgMTsKLQotCURCRygiICBzaXplIGlzICVseCwgYWxsb2NhdGluZy4uLlxuIiwgc2l6ZSk7Ci0KLQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBleHBhbmRlZCBkZXZpY2UgdHJlZSAqLwotCW1lbSA9IGxtYl9hbGxvYyhzaXplICsgNCwgX19hbGlnbm9mX18oc3RydWN0IGRldmljZV9ub2RlKSk7Ci0JbWVtID0gKHVuc2lnbmVkIGxvbmcpIF9fdmEobWVtKTsKLQotCSgodTMyICopbWVtKVtzaXplIC8gNF0gPSAweGRlYWRiZWVmOwotCi0JREJHKCIgIHVuZmxhdHRlbmluZyAlbHguLi5cbiIsIG1lbSk7Ci0KLQkvKiBTZWNvbmQgcGFzcywgZG8gYWN0dWFsIHVuZmxhdHRlbmluZyAqLwotCXN0YXJ0ID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdDsKLQl1bmZsYXR0ZW5fZHRfbm9kZShtZW0sICZzdGFydCwgTlVMTCwgJmFsbG5leHRwLCAwKTsKLQlpZiAoKigodTMyICopc3RhcnQpICE9IE9GX0RUX0VORCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2VpcmQgdGFnIGF0IGVuZCBvZiB0cmVlOiAlMDh4XG4iLCAqKCh1MzIgKilzdGFydCkpOwotCWlmICgoKHUzMiAqKW1lbSlbc2l6ZSAvIDRdICE9IDB4ZGVhZGJlZWYpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkVuZCBvZiB0cmVlIG1hcmtlciBvdmVyd3JpdHRlbjogJTA4eFxuIiwKLQkJICAgICAgICgodTMyICopbWVtKVtzaXplIC8gNF0gKTsKLQkqYWxsbmV4dHAgPSBOVUxMOwotCi0JLyogR2V0IHBvaW50ZXIgdG8gT0YgIi9jaG9zZW4iIG5vZGUgZm9yIHVzZSBldmVyeXdoZXJlICovCi0Jb2ZfY2hvc2VuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jaG9zZW4iKTsKLQlpZiAob2ZfY2hvc2VuID09IE5VTEwpCi0JCW9mX2Nob3NlbiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvY2hvc2VuQDAiKTsKLQotCURCRygiIDwtIHVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpXG4iKTsKLX0KLQogLyoKICAqIGlibSxwYS1mZWF0dXJlcyBpcyBhIHBlci1jcHUgcHJvcGVydHkgdGhhdCBjb250YWlucyBhIHN0cmluZyBvZgogICogYXR0cmlidXRlIGRlc2NyaXB0b3JzLCBlYWNoIG9mIHdoaWNoIGhhcyBhIDIgYnl0ZSBoZWFkZXIgcGx1cyB1cApAQCAtNzYzLDQ4ICszNjIsOSBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkKHVuc2lnbmVkIGxvbmcgbm9kZSkKLXsKLQl1bnNpZ25lZCBsb25nIGw7Ci0JdTMyICpwcm9wOwotCi0JREJHKCJMb29raW5nIGZvciBpbml0cmQgcHJvcGVydGllcy4uLiAiKTsKLQotCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxpbml0cmQtc3RhcnQiLCAmbCk7Ci0JaWYgKHByb3ApIHsKLQkJaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShvZl9yZWFkX3Vsb25nKHByb3AsIGwvNCkpOwotCi0JCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxpbml0cmQtZW5kIiwgJmwpOwotCQlpZiAocHJvcCkgewotCQkJaW5pdHJkX2VuZCA9ICh1bnNpZ25lZCBsb25nKQotCQkJCQlfX3ZhKG9mX3JlYWRfdWxvbmcocHJvcCwgbC80KSk7Ci0JCQlpbml0cmRfYmVsb3dfc3RhcnRfb2sgPSAxOwotCQl9IGVsc2UgewotCQkJaW5pdHJkX3N0YXJ0ID0gMDsKLQkJfQotCX0KLQotCURCRygiaW5pdHJkX3N0YXJ0PTB4JWx4ICBpbml0cmRfZW5kPTB4JWx4XG4iLCBpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQodW5zaWduZWQgbG9uZyBub2RlKQotewotfQotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lOSVRSRCAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuKHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQkJICAgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCit2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuX2FyY2godW5zaWduZWQgbG9uZyBub2RlKQogewogCXVuc2lnbmVkIGxvbmcgKmxwcm9wOwotCXVuc2lnbmVkIGxvbmcgbDsKLQljaGFyICpwOwotCi0JREJHKCJzZWFyY2ggXCJjaG9zZW5cIiwgZGVwdGg6ICVkLCB1bmFtZTogJXNcbiIsIGRlcHRoLCB1bmFtZSk7Ci0KLQlpZiAoZGVwdGggIT0gMSB8fAotCSAgICAoc3RyY21wKHVuYW1lLCAiY2hvc2VuIikgIT0gMCAmJiBzdHJjbXAodW5hbWUsICJjaG9zZW5AMCIpICE9IDApKQotCQlyZXR1cm4gMDsKIAogI2lmZGVmIENPTkZJR19QUEM2NAogCS8qIGNoZWNrIGlmIGlvbW11IGlzIGZvcmNlZCBvbiBvciBvZmYgKi8KQEAgLTgxNSwxNyArMzc1LDE3IEBACiAjZW5kaWYKIAogCS8qIG1lbT14IG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgdGhlIHByZWZlcnJlZCBtZWNoYW5pc20gKi8KLSAJbHByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxtZW1vcnktbGltaXQiLCBOVUxMKTsKLSAJaWYgKGxwcm9wKQotIAkJbWVtb3J5X2xpbWl0ID0gKmxwcm9wOworCWxwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsbWVtb3J5LWxpbWl0IiwgTlVMTCk7CisJaWYgKGxwcm9wKQorCQltZW1vcnlfbGltaXQgPSAqbHByb3A7CiAKICNpZmRlZiBDT05GSUdfUFBDNjQKLSAJbHByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCx0Y2UtYWxsb2Mtc3RhcnQiLCBOVUxMKTsKLSAJaWYgKGxwcm9wKQotIAkJdGNlX2FsbG9jX3N0YXJ0ID0gKmxwcm9wOwotIAlscHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LHRjZS1hbGxvYy1lbmQiLCBOVUxMKTsKLSAJaWYgKGxwcm9wKQotIAkJdGNlX2FsbG9jX2VuZCA9ICpscHJvcDsKKwlscHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LHRjZS1hbGxvYy1zdGFydCIsIE5VTEwpOworCWlmIChscHJvcCkKKwkJdGNlX2FsbG9jX3N0YXJ0ID0gKmxwcm9wOworCWxwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsdGNlLWFsbG9jLWVuZCIsIE5VTEwpOworCWlmIChscHJvcCkKKwkJdGNlX2FsbG9jX2VuZCA9ICpscHJvcDsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0tFWEVDCkBAIC04MzcsNTEgKzM5Nyw2IEBACiAJaWYgKGxwcm9wKQogCQljcmFzaGtfcmVzLmVuZCA9IGNyYXNoa19yZXMuc3RhcnQgKyAqbHByb3AgLSAxOwogI2VuZGlmCi0KLQllYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQobm9kZSk7Ci0KLQkvKiBSZXRyZWl2ZSBjb21tYW5kIGxpbmUgKi8KLSAJcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImJvb3RhcmdzIiwgJmwpOwotCWlmIChwICE9IE5VTEwgJiYgbCA+IDApCi0JCXN0cmxjcHkoY21kX2xpbmUsIHAsIG1pbigoaW50KWwsIENPTU1BTkRfTElORV9TSVpFKSk7Ci0KLSNpZmRlZiBDT05GSUdfQ01ETElORQotCWlmIChwID09IE5VTEwgfHwgbCA9PSAwIHx8IChsID09IDEgJiYgKCpwKSA9PSAwKSkKLQkJc3RybGNweShjbWRfbGluZSwgQ09ORklHX0NNRExJTkUsIENPTU1BTkRfTElORV9TSVpFKTsKLSNlbmRpZiAvKiBDT05GSUdfQ01ETElORSAqLwotCi0JREJHKCJDb21tYW5kIGxpbmUgaXM6ICVzXG4iLCBjbWRfbGluZSk7Ci0KLQkvKiBicmVhayBub3cgKi8KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX3Jvb3QodW5zaWduZWQgbG9uZyBub2RlLAotCQkJCQkgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCi17Ci0JdTMyICpwcm9wOwotCi0JaWYgKGRlcHRoICE9IDApCi0JCXJldHVybiAwOwotCi0JcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgIiNzaXplLWNlbGxzIiwgTlVMTCk7Ci0JZHRfcm9vdF9zaXplX2NlbGxzID0gKHByb3AgPT0gTlVMTCkgPyAxIDogKnByb3A7Ci0JREJHKCJkdF9yb290X3NpemVfY2VsbHMgPSAleFxuIiwgZHRfcm9vdF9zaXplX2NlbGxzKTsKLQotCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICIjYWRkcmVzcy1jZWxscyIsIE5VTEwpOwotCWR0X3Jvb3RfYWRkcl9jZWxscyA9IChwcm9wID09IE5VTEwpID8gMiA6ICpwcm9wOwotCURCRygiZHRfcm9vdF9hZGRyX2NlbGxzID0gJXhcbiIsIGR0X3Jvb3RfYWRkcl9jZWxscyk7Ci0JCi0JLyogYnJlYWsgbm93ICovCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB1NjQgX19pbml0IGR0X21lbV9uZXh0X2NlbGwoaW50IHMsIGNlbGxfdCAqKmNlbGxwKQotewotCWNlbGxfdCAqcCA9ICpjZWxscDsKLQotCSpjZWxscCA9IHAgKyBzOwotCXJldHVybiBvZl9yZWFkX251bWJlcihwLCBzKTsKIH0KIAogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwpAQCAtODkzLDIyICs0MDgsMjIgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX2RyY29uZl9tZW1vcnkodW5zaWduZWQgbG9uZyBub2RlKQogewotCWNlbGxfdCAqZG0sICpscywgKnVzbTsKKwlfX2JlMzIgKmRtLCAqbHMsICp1c207CiAJdW5zaWduZWQgbG9uZyBsLCBuLCBmbGFnczsKIAl1NjQgYmFzZSwgc2l6ZSwgbG1iX3NpemU7CiAJdW5zaWduZWQgaW50IGlzX2tleGVjX2tkdW1wID0gMCwgcm5nczsKIAogCWxzID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiaWJtLGxtYi1zaXplIiwgJmwpOwotCWlmIChscyA9PSBOVUxMIHx8IGwgPCBkdF9yb290X3NpemVfY2VsbHMgKiBzaXplb2YoY2VsbF90KSkKKwlpZiAobHMgPT0gTlVMTCB8fCBsIDwgZHRfcm9vdF9zaXplX2NlbGxzICogc2l6ZW9mKF9fYmUzMikpCiAJCXJldHVybiAwOwogCWxtYl9zaXplID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X3NpemVfY2VsbHMsICZscyk7CiAKIAlkbSA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImlibSxkeW5hbWljLW1lbW9yeSIsICZsKTsKLQlpZiAoZG0gPT0gTlVMTCB8fCBsIDwgc2l6ZW9mKGNlbGxfdCkpCisJaWYgKGRtID09IE5VTEwgfHwgbCA8IHNpemVvZihfX2JlMzIpKQogCQlyZXR1cm4gMDsKIAogCW4gPSAqZG0rKzsJLyogbnVtYmVyIG9mIGVudHJpZXMgKi8KLQlpZiAobCA8IChuICogKGR0X3Jvb3RfYWRkcl9jZWxscyArIDQpICsgMSkgKiBzaXplb2YoY2VsbF90KSkKKwlpZiAobCA8IChuICogKGR0X3Jvb3RfYWRkcl9jZWxscyArIDQpICsgMSkgKiBzaXplb2YoX19iZTMyKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBjaGVjayBpZiB0aGlzIGlzIGEga2V4ZWMva2R1bXAga2VybmVsLiAqLwpAQCAtOTYzLDY2ICs0NzgsNDggQEAKICNkZWZpbmUgZWFybHlfaW5pdF9kdF9zY2FuX2RyY29uZl9tZW1vcnkobm9kZSkJMAogI2VuZGlmIC8qIENPTkZJR19QUENfUFNFUklFUyAqLwogCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5KHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQkJICAgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5X3BwYyh1bnNpZ25lZCBsb25nIG5vZGUsCisJCQkJCQljb25zdCBjaGFyICp1bmFtZSwKKwkJCQkJCWludCBkZXB0aCwgdm9pZCAqZGF0YSkKIHsKLQljaGFyICp0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKLQljZWxsX3QgKnJlZywgKmVuZHA7Ci0JdW5zaWduZWQgbG9uZyBsOwotCi0JLyogTG9vayBmb3IgdGhlIGlibSxkeW5hbWljLXJlY29uZmlndXJhdGlvbi1tZW1vcnkgbm9kZSAqLwogCWlmIChkZXB0aCA9PSAxICYmCiAJICAgIHN0cmNtcCh1bmFtZSwgImlibSxkeW5hbWljLXJlY29uZmlndXJhdGlvbi1tZW1vcnkiKSA9PSAwKQogCQlyZXR1cm4gZWFybHlfaW5pdF9kdF9zY2FuX2RyY29uZl9tZW1vcnkobm9kZSk7Ci0KLQkvKiBXZSBhcmUgc2Nhbm5pbmcgIm1lbW9yeSIgbm9kZXMgb25seSAqLwotCWlmICh0eXBlID09IE5VTEwpIHsKLQkJLyoKLQkJICogVGhlIGxvbmd0cmFpbCBkb2Vzbid0IGhhdmUgYSBkZXZpY2VfdHlwZSBvbiB0aGUKLQkJICogL21lbW9yeSBub2RlLCBzbyBsb29rIGZvciB0aGUgbm9kZSBjYWxsZWQgL21lbW9yeUAwLgotCQkgKi8KLQkJaWYgKGRlcHRoICE9IDEgfHwgc3RyY21wKHVuYW1lLCAibWVtb3J5QDAiKSAhPSAwKQotCQkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmIChzdHJjbXAodHlwZSwgIm1lbW9yeSIpICE9IDApCi0JCXJldHVybiAwOwotCi0JcmVnID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsdXNhYmxlLW1lbW9yeSIsICZsKTsKLQlpZiAocmVnID09IE5VTEwpCi0JCXJlZyA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgInJlZyIsICZsKTsKLQlpZiAocmVnID09IE5VTEwpCi0JCXJldHVybiAwOwotCi0JZW5kcCA9IHJlZyArIChsIC8gc2l6ZW9mKGNlbGxfdCkpOwotCi0JREJHKCJtZW1vcnkgc2NhbiBub2RlICVzLCByZWcgc2l6ZSAlbGQsIGRhdGE6ICV4ICV4ICV4ICV4LFxuIiwKLQkgICAgdW5hbWUsIGwsIHJlZ1swXSwgcmVnWzFdLCByZWdbMl0sIHJlZ1szXSk7Ci0KLQl3aGlsZSAoKGVuZHAgLSByZWcpID49IChkdF9yb290X2FkZHJfY2VsbHMgKyBkdF9yb290X3NpemVfY2VsbHMpKSB7Ci0JCXU2NCBiYXNlLCBzaXplOwotCi0JCWJhc2UgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3RfYWRkcl9jZWxscywgJnJlZyk7Ci0JCXNpemUgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3Rfc2l6ZV9jZWxscywgJnJlZyk7Ci0KLQkJaWYgKHNpemUgPT0gMCkKLQkJCWNvbnRpbnVlOwotCQlEQkcoIiAtICVsbHggLCAgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyliYXNlLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplKTsKLSNpZmRlZiBDT05GSUdfUFBDNjQKLQkJaWYgKGlvbW11X2lzX29mZikgewotCQkJaWYgKGJhc2UgPj0gMHg4MDAwMDAwMHVsKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKChiYXNlICsgc2l6ZSkgPiAweDgwMDAwMDAwdWwpCi0JCQkJc2l6ZSA9IDB4ODAwMDAwMDB1bCAtIGJhc2U7Ci0JCX0KLSNlbmRpZgotCQlsbWJfYWRkKGJhc2UsIHNpemUpOwotCi0JCW1lbXN0YXJ0X2FkZHIgPSBtaW4oKHU2NCltZW1zdGFydF9hZGRyLCBiYXNlKTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwkKKwlyZXR1cm4gZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeShub2RlLCB1bmFtZSwgZGVwdGgsIGRhdGEpOwogfQogCit2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X2FkZF9tZW1vcnlfYXJjaCh1NjQgYmFzZSwgdTY0IHNpemUpCit7CisjaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpCisJaWYgKGlvbW11X2lzX29mZikgeworCQlpZiAoYmFzZSA+PSAweDgwMDAwMDAwdWwpCisJCQlyZXR1cm47CisJCWlmICgoYmFzZSArIHNpemUpID4gMHg4MDAwMDAwMHVsKQorCQkJc2l6ZSA9IDB4ODAwMDAwMDB1bCAtIGJhc2U7CisJfQorI2VuZGlmCisKKwlsbWJfYWRkKGJhc2UsIHNpemUpOworCisJbWVtc3RhcnRfYWRkciA9IG1pbigodTY0KW1lbXN0YXJ0X2FkZHIsIGJhc2UpOworfQorCit1NjQgX19pbml0IGVhcmx5X2luaXRfZHRfYWxsb2NfbWVtb3J5X2FyY2godTY0IHNpemUsIHU2NCBhbGlnbikKK3sKKwlyZXR1cm4gbG1iX2FsbG9jKHNpemUsIGFsaWduKTsKK30KKworI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9zZXR1cF9pbml0cmRfYXJjaCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQl1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX3ZhKHN0YXJ0KTsKKwlpbml0cmRfZW5kID0gKHVuc2lnbmVkIGxvbmcpX192YShlbmQpOworCWluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X3Jlc2VydmVfbWVtKHZvaWQpCiB7CiAJdTY0IGJhc2UsIHNpemU7CkBAIC0xMTg2LDcgKzY4Myw3IEBACiAJLyogU2NhbiBtZW1vcnkgbm9kZXMgYW5kIHJlYnVpbGQgTE1CcyAqLwogCWxtYl9pbml0KCk7CiAJb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9yb290LCBOVUxMKTsKLQlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeSwgTlVMTCk7CisJb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9tZW1vcnlfcHBjLCBOVUxMKTsKIAogCS8qIFNhdmUgY29tbWFuZCBsaW5lIGZvciAvcHJvYy9jbWRsaW5lIGFuZCB0aGVuIHBhcnNlIHBhcmFtZXRlcnMgKi8KIAlzdHJsY3B5KGJvb3RfY29tbWFuZF9saW5lLCBjbWRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOwpAQCAtMTIzNCwyNSArNzMxLDYgQEAKIAlEQkcoIiA8LSBlYXJseV9pbml0X2RldnRyZWUoKVxuIik7CiB9CiAKLQotLyoqCi0gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcm9vdCBub2RlIGhhcyBhIGdpdmVuIHZhbHVlIGluIGl0cwotICogY29tcGF0aWJsZSBwcm9wZXJ0eS4KLSAqLwotaW50IG1hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpyb290OwotCWludCByYyA9IDA7Ci0KLQlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKLQlpZiAocm9vdCkgewotCQlyYyA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHJvb3QsIGNvbXBhdCk7Ci0JCW9mX25vZGVfcHV0KHJvb3QpOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci1FWFBPUlRfU1lNQk9MKG1hY2hpbmVfaXNfY29tcGF0aWJsZSk7Ci0KIC8qKioqKioqCiAgKgogICogTmV3IGltcGxlbWVudGF0aW9uIG9mIHRoZSBPRiAiZmluZCIgQVBJcywgcmV0dXJuIGEgcmVmY291bnRlZApAQCAtMTI2NSwyNyArNzQzLDYgQEAKICAqKioqKioqLwogCiAvKioKLSAqCW9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlIC0gRmluZCBhIG5vZGUgZ2l2ZW4gYSBwaGFuZGxlCi0gKglAaGFuZGxlOglwaGFuZGxlIG9mIHRoZSBub2RlIHRvIGZpbmQKLSAqCi0gKglSZXR1cm5zIGEgbm9kZSBwb2ludGVyIHdpdGggcmVmY291bnQgaW5jcmVtZW50ZWQsIHVzZQotICoJb2Zfbm9kZV9wdXQoKSBvbiBpdCB3aGVuIGRvbmUuCi0gKi8KLXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUocGhhbmRsZSBoYW5kbGUpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQotCXJlYWRfbG9jaygmZGV2dHJlZV9sb2NrKTsKLQlmb3IgKG5wID0gYWxsbm9kZXM7IG5wICE9IDA7IG5wID0gbnAtPmFsbG5leHQpCi0JCWlmIChucC0+bGludXhfcGhhbmRsZSA9PSBoYW5kbGUpCi0JCQlicmVhazsKLQlvZl9ub2RlX2dldChucCk7Ci0JcmVhZF91bmxvY2soJmRldnRyZWVfbG9jayk7Ci0JcmV0dXJuIG5wOwotfQotRVhQT1JUX1NZTUJPTChvZl9maW5kX25vZGVfYnlfcGhhbmRsZSk7Ci0KLS8qKgogICoJb2ZfZmluZF9uZXh0X2NhY2hlX25vZGUgLSBGaW5kIGEgbm9kZSdzIHN1YnNpZGlhcnkgY2FjaGUKICAqCUBucDoJbm9kZSBvZiB0eXBlICJjcHUiIG9yICJjYWNoZSIKICAqCkBAIC0xMzE2LDEzOCArNzczLDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyoqCi0gKglvZl9ub2RlX2dldCAtIEluY3JlbWVudCByZWZjb3VudCBvZiBhIG5vZGUKLSAqCUBub2RlOglOb2RlIHRvIGluYyByZWZjb3VudCwgTlVMTCBpcyBzdXBwb3J0ZWQgdG8KLSAqCQlzaW1wbGlmeSB3cml0aW5nIG9mIGNhbGxlcnMKLSAqCi0gKglSZXR1cm5zIG5vZGUuCi0gKi8KLXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZV9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQotewotCWlmIChub2RlKQotCQlrcmVmX2dldCgmbm9kZS0+a3JlZik7Ci0JcmV0dXJuIG5vZGU7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX25vZGVfZ2V0KTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBrcmVmX3RvX2RldmljZV9ub2RlKHN0cnVjdCBrcmVmICprcmVmKQotewotCXJldHVybiBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRldmljZV9ub2RlLCBrcmVmKTsKLX0KLQotLyoqCi0gKglvZl9ub2RlX3JlbGVhc2UgLSByZWxlYXNlIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG5vZGUKLSAqCUBrcmVmOiAga3JlZiBlbGVtZW50IG9mIHRoZSBub2RlIHRvIGJlIHJlbGVhc2VkCi0gKgotICoJSW4gb2Zfbm9kZV9wdXQoKSB0aGlzIGZ1bmN0aW9uIGlzIHBhc3NlZCB0byBrcmVmX3B1dCgpCi0gKglhcyB0aGUgZGVzdHJ1Y3Rvci4KLSAqLwotc3RhdGljIHZvaWQgb2Zfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IGtyZWZfdG9fZGV2aWNlX25vZGUoa3JlZik7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wID0gbm9kZS0+cHJvcGVydGllczsKLQotCS8qIFdlIHNob3VsZCBuZXZlciBiZSByZWxlYXNpbmcgbm9kZXMgdGhhdCBoYXZlbid0IGJlZW4gZGV0YWNoZWQuICovCi0JaWYgKCFvZl9ub2RlX2NoZWNrX2ZsYWcobm9kZSwgT0ZfREVUQUNIRUQpKSB7Ci0JCXByaW50aygiV0FSTklORzogQmFkIG9mX25vZGVfcHV0KCkgb24gJXNcbiIsIG5vZGUtPmZ1bGxfbmFtZSk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJa3JlZl9pbml0KCZub2RlLT5rcmVmKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX0RZTkFNSUMpKQotCQlyZXR1cm47Ci0KLQl3aGlsZSAocHJvcCkgewotCQlzdHJ1Y3QgcHJvcGVydHkgKm5leHQgPSBwcm9wLT5uZXh0OwotCQlrZnJlZShwcm9wLT5uYW1lKTsKLQkJa2ZyZWUocHJvcC0+dmFsdWUpOwotCQlrZnJlZShwcm9wKTsKLQkJcHJvcCA9IG5leHQ7Ci0KLQkJaWYgKCFwcm9wKSB7Ci0JCQlwcm9wID0gbm9kZS0+ZGVhZHByb3BzOwotCQkJbm9kZS0+ZGVhZHByb3BzID0gTlVMTDsKLQkJfQotCX0KLQlrZnJlZShub2RlLT5mdWxsX25hbWUpOwotCWtmcmVlKG5vZGUtPmRhdGEpOwotCWtmcmVlKG5vZGUpOwotfQotCi0vKioKLSAqCW9mX25vZGVfcHV0IC0gRGVjcmVtZW50IHJlZmNvdW50IG9mIGEgbm9kZQotICoJQG5vZGU6CU5vZGUgdG8gZGVjIHJlZmNvdW50LCBOVUxMIGlzIHN1cHBvcnRlZCB0bwotICoJCXNpbXBsaWZ5IHdyaXRpbmcgb2YgY2FsbGVycwotICoKLSAqLwotdm9pZCBvZl9ub2RlX3B1dChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCi17Ci0JaWYgKG5vZGUpCi0JCWtyZWZfcHV0KCZub2RlLT5rcmVmLCBvZl9ub2RlX3JlbGVhc2UpOwotfQotRVhQT1JUX1NZTUJPTChvZl9ub2RlX3B1dCk7Ci0KLS8qCi0gKiBQbHVnIGEgZGV2aWNlIG5vZGUgaW50byB0aGUgdHJlZSBhbmQgZ2xvYmFsIGxpc3QuCi0gKi8KLXZvaWQgb2ZfYXR0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQlucC0+c2libGluZyA9IG5wLT5wYXJlbnQtPmNoaWxkOwotCW5wLT5hbGxuZXh0ID0gYWxsbm9kZXM7Ci0JbnAtPnBhcmVudC0+Y2hpbGQgPSBucDsKLQlhbGxub2RlcyA9IG5wOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqICJVbnBsdWciIGEgbm9kZSBmcm9tIHRoZSBkZXZpY2UgdHJlZS4gIFRoZSBjYWxsZXIgbXVzdCBob2xkCi0gKiBhIHJlZmVyZW5jZSB0byB0aGUgbm9kZS4gIFRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlCi0gKiBpcyBub3QgZnJlZWQgdW50aWwgaXRzIHJlZmNvdW50IGdvZXMgdG8gemVyby4KLSAqLwotdm9pZCBvZl9kZXRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCi0JcGFyZW50ID0gbnAtPnBhcmVudDsKLQlpZiAoIXBhcmVudCkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JaWYgKGFsbG5vZGVzID09IG5wKQotCQlhbGxub2RlcyA9IG5wLT5hbGxuZXh0OwotCWVsc2UgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXY7Ci0JCWZvciAocHJldiA9IGFsbG5vZGVzOwotCQkgICAgIHByZXYtPmFsbG5leHQgIT0gbnA7Ci0JCSAgICAgcHJldiA9IHByZXYtPmFsbG5leHQpCi0JCQk7Ci0JCXByZXYtPmFsbG5leHQgPSBucC0+YWxsbmV4dDsKLQl9Ci0KLQlpZiAocGFyZW50LT5jaGlsZCA9PSBucCkKLQkJcGFyZW50LT5jaGlsZCA9IG5wLT5zaWJsaW5nOwotCWVsc2UgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXZzaWI7Ci0JCWZvciAocHJldnNpYiA9IG5wLT5wYXJlbnQtPmNoaWxkOwotCQkgICAgIHByZXZzaWItPnNpYmxpbmcgIT0gbnA7Ci0JCSAgICAgcHJldnNpYiA9IHByZXZzaWItPnNpYmxpbmcpCi0JCQk7Ci0JCXByZXZzaWItPnNpYmxpbmcgPSBucC0+c2libGluZzsKLQl9Ci0KLQlvZl9ub2RlX3NldF9mbGFnKG5wLCBPRl9ERVRBQ0hFRCk7Ci0KLW91dF91bmxvY2s6Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotfQotCiAjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCiAvKgogICogRml4IHVwIHRoZSB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBhIG5ldyBkZXZpY2Ugbm9kZToKQEAgLTE0NzksOSArODA0LDkgQEAKIAlpZiAobWFjaGluZV9pcyhwb3dlcm1hYykpCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogZml4IHVwIG5ldyBub2RlJ3MgbGludXhfcGhhbmRsZSBmaWVsZCAqLworCS8qIGZpeCB1cCBuZXcgbm9kZSdzIHBoYW5kbGUgZmllbGQgKi8KIAlpZiAoKGlibV9waGFuZGxlID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsICJpYm0scGhhbmRsZSIsIE5VTEwpKSkKLQkJbm9kZS0+bGludXhfcGhhbmRsZSA9ICppYm1fcGhhbmRsZTsKKwkJbm9kZS0+cGhhbmRsZSA9ICppYm1fcGhhbmRsZTsKIAogb3V0OgogCW9mX25vZGVfcHV0KHBhcmVudCk7CkBAIC0xNTIwLDEyMCArODQ1LDYgQEAKIF9faW5pdGNhbGwocHJvbV9yZWNvbmZpZ19zZXR1cCk7CiAjZW5kaWYKIAotLyoKLSAqIEFkZCBhIHByb3BlcnR5IHRvIGEgbm9kZQotICovCi1pbnQgcHJvbV9hZGRfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlKiBucCwgc3RydWN0IHByb3BlcnR5KiBwcm9wKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqKm5leHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXByb3AtPm5leHQgPSBOVUxMOwkKLQl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCW5leHQgPSAmbnAtPnByb3BlcnRpZXM7Ci0Jd2hpbGUgKCpuZXh0KSB7Ci0JCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgKCpuZXh0KS0+bmFtZSkgPT0gMCkgewotCQkJLyogZHVwbGljYXRlICEgZG9uJ3QgaW5zZXJ0IGl0ICovCi0JCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OwotCX0KLQkqbmV4dCA9IHByb3A7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCi0jaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQotCS8qIHRyeSB0byBhZGQgdG8gcHJvYyBhcyB3ZWxsIGlmIGl0IHdhcyBpbml0aWFsaXplZCAqLwotCWlmIChucC0+cGRlKQotCQlwcm9jX2RldmljZV90cmVlX2FkZF9wcm9wKG5wLT5wZGUsIHByb3ApOwotI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KLQotCXJldHVybiAwOwotfQotCi0vKgotICogUmVtb3ZlIGEgcHJvcGVydHkgZnJvbSBhIG5vZGUuICBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkKLSAqIHJlbW92ZSBpdCwgc2luY2Ugd2UgaGF2ZSBnaXZlbiBvdXQgd2hvLWtub3dzLWhvdy1tYW55IHBvaW50ZXJzCi0gKiB0byB0aGUgZGF0YSB1c2luZyBnZXQtcHJvcGVydHkuICBJbnN0ZWFkIHdlIGp1c3QgbW92ZSB0aGUgcHJvcGVydHkKLSAqIHRvIHRoZSAiZGVhZCBwcm9wZXJ0aWVzIiBsaXN0LCBzbyBpdCB3b24ndCBiZSBmb3VuZCBhbnkgbW9yZS4KLSAqLwotaW50IHByb21fcmVtb3ZlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGZvdW5kID0gMDsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JbmV4dCA9ICZucC0+cHJvcGVydGllczsKLQl3aGlsZSAoKm5leHQpIHsKLQkJaWYgKCpuZXh0ID09IHByb3ApIHsKLQkJCS8qIGZvdW5kIHRoZSBub2RlICovCi0JCQkqbmV4dCA9IHByb3AtPm5leHQ7Ci0JCQlwcm9wLT5uZXh0ID0gbnAtPmRlYWRwcm9wczsKLQkJCW5wLT5kZWFkcHJvcHMgPSBwcm9wOwotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OwotCX0KLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIWZvdW5kKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotI2lmZGVmIENPTkZJR19QUk9DX0RFVklDRVRSRUUKLQkvKiB0cnkgdG8gcmVtb3ZlIHRoZSBwcm9jIG5vZGUgYXMgd2VsbCAqLwotCWlmIChucC0+cGRlKQotCQlwcm9jX2RldmljZV90cmVlX3JlbW92ZV9wcm9wKG5wLT5wZGUsIHByb3ApOwotI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KLQotCXJldHVybiAwOwotfQotCi0vKgotICogVXBkYXRlIGEgcHJvcGVydHkgaW4gYSBub2RlLiAgTm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5Ci0gKiByZW1vdmUgaXQsIHNpbmNlIHdlIGhhdmUgZ2l2ZW4gb3V0IHdoby1rbm93cy1ob3ctbWFueSBwb2ludGVycwotICogdG8gdGhlIGRhdGEgdXNpbmcgZ2V0LXByb3BlcnR5LiAgSW5zdGVhZCB3ZSBqdXN0IG1vdmUgdGhlIHByb3BlcnR5Ci0gKiB0byB0aGUgImRlYWQgcHJvcGVydGllcyIgbGlzdCwgYW5kIGFkZCB0aGUgbmV3IHByb3BlcnR5IHRvIHRoZQotICogcHJvcGVydHkgbGlzdAotICovCi1pbnQgcHJvbV91cGRhdGVfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCSBzdHJ1Y3QgcHJvcGVydHkgKm5ld3Byb3AsCi0JCQkgc3RydWN0IHByb3BlcnR5ICpvbGRwcm9wKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqKm5leHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZm91bmQgPSAwOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQluZXh0ID0gJm5wLT5wcm9wZXJ0aWVzOwotCXdoaWxlICgqbmV4dCkgewotCQlpZiAoKm5leHQgPT0gb2xkcHJvcCkgewotCQkJLyogZm91bmQgdGhlIG5vZGUgKi8KLQkJCW5ld3Byb3AtPm5leHQgPSBvbGRwcm9wLT5uZXh0OwotCQkJKm5leHQgPSBuZXdwcm9wOwotCQkJb2xkcHJvcC0+bmV4dCA9IG5wLT5kZWFkcHJvcHM7Ci0JCQlucC0+ZGVhZHByb3BzID0gb2xkcHJvcDsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCW5leHQgPSAmKCpuZXh0KS0+bmV4dDsKLQl9Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCi0JaWYgKCFmb3VuZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFCi0JLyogdHJ5IHRvIGFkZCB0byBwcm9jIGFzIHdlbGwgaWYgaXQgd2FzIGluaXRpYWxpemVkICovCi0JaWYgKG5wLT5wZGUpCi0JCXByb2NfZGV2aWNlX3RyZWVfdXBkYXRlX3Byb3AobnAtPnBkZSwgbmV3cHJvcCwgb2xkcHJvcCk7Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfREVWSUNFVFJFRSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLQogLyogRmluZCB0aGUgZGV2aWNlIG5vZGUgZm9yIGEgZ2l2ZW4gbG9naWNhbCBjcHUgbnVtYmVyLCBhbHNvIHJldHVybnMgdGhlIGNwdQogICogbG9jYWwgdGhyZWFkIG51bWJlciAoaW5kZXggaW4gaWJtLGludGVycnVwdC1zZXJ2ZXIjcykgaWYgcmVsZXZhbnQgYW5kCiAgKiBhc2tlZCBmb3IgKG5vbiBOVUxMKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggYmFmYWMyZS4uNWYzMDZjNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCkBAIC02NTQsNiArNjU0LDkgQEAKICNkZWZpbmUgT1Y1X0NNTwkJCTB4MDAKICNlbmRpZgogCisvKiBPcHRpb24gVmVjdG9yIDY6IElCTSBQQVBSIGhpbnRzICovCisjZGVmaW5lIE9WNl9MSU5VWAkJMHgwMgkvKiBMaW51eCBpcyBvdXIgT1MgKi8KKwogLyoKICAqIFRoZSBhcmNoaXRlY3R1cmUgdmVjdG9yIGhhcyBhbiBhcnJheSBvZiBQVlIgbWFzay92YWx1ZSBwYWlycywKICAqIGZvbGxvd2VkIGJ5ICMgb3B0aW9uIHZlY3RvcnMgLSAxLCBmb2xsb3dlZCBieSB0aGUgb3B0aW9uIHZlY3RvcnMuCkBAIC02NjUsNyArNjY4LDcgQEAKIAlXKDB4ZmZmZmZmZmYpLCBXKDB4MGYwMDAwMDMpLAkvKiBhbGwgMi4wNi1jb21wbGlhbnQgKi8KIAlXKDB4ZmZmZmZmZmYpLCBXKDB4MGYwMDAwMDIpLAkvKiBhbGwgMi4wNS1jb21wbGlhbnQgKi8KIAlXKDB4ZmZmZmZmZmUpLCBXKDB4MGYwMDAwMDEpLAkvKiBhbGwgMi4wNC1jb21wbGlhbnQgYW5kIGVhcmxpZXIgKi8KLQk1IC0gMSwJCQkJLyogNSBvcHRpb24gdmVjdG9ycyAqLworCTYgLSAxLAkJCQkvKiA2IG9wdGlvbiB2ZWN0b3JzICovCiAKIAkvKiBvcHRpb24gdmVjdG9yIDE6IHByb2Nlc3NvciBhcmNoaXRlY3R1cmVzIHN1cHBvcnRlZCAqLwogCTMgLSAyLAkJCQkvKiBsZW5ndGggKi8KQEAgLTY5NywxMiArNzAwLDI5IEBACiAJMCwJCQkJLyogZG9uJ3QgaGFsdCAqLwogCiAJLyogb3B0aW9uIHZlY3RvciA1OiBQQVBSL09GIG9wdGlvbnMgKi8KLQk1IC0gMiwJCQkJLyogbGVuZ3RoICovCisJMTMgLSAyLAkJCQkvKiBsZW5ndGggKi8KIAkwLAkJCQkvKiBkb24ndCBpZ25vcmUsIGRvbid0IGhhbHQgKi8KIAlPVjVfTFBBUiB8IE9WNV9TUExQQVIgfCBPVjVfTEFSR0VfUEFHRVMgfCBPVjVfRFJDT05GX01FTU9SWSB8CiAJT1Y1X0RPTkFURV9ERURJQ0FURV9DUFUgfCBPVjVfTVNJLAogCTAsCiAJT1Y1X0NNTywKKwkwLAorCTAsCisJMCwKKwkwLAorCS8qIFdBUk5JTkc6IFRoZSBvZmZzZXQgb2YgdGhlICJudW1iZXIgb2YgY29yZXMiIGZpZWxkIGJlbG93CisJICogbXVzdCBtYXRjaCBieSB0aGUgbWFjcm8gYmVsb3cuIFVwZGF0ZSB0aGUgZGVmaW5pdGlvbiBpZgorCSAqIHRoZSBzdHJ1Y3R1cmUgbGF5b3V0IGNoYW5nZXMuCisJICovCisjZGVmaW5lIElCTV9BUkNIX1ZFQ19OUkNPUkVTX09GRlNFVAkxMDAKKwlXKE5SX0NQVVMpLAkJCS8qIG51bWJlciBvZiBjb3JlcyBzdXBwb3J0ZWQgKi8KKworCS8qIG9wdGlvbiB2ZWN0b3IgNjogSUJNIFBBUFIgaGludHMgKi8KKwk0IC0gMiwJCQkJLyogbGVuZ3RoICovCisJMCwKKwkwLAorCU9WNl9MSU5VWCwKKwogfTsKIAogLyogT2xkIG1ldGhvZCAtIEVMRiBoZWFkZXIgd2l0aCBQVF9OT1RFIHNlY3Rpb25zICovCkBAIC03OTIsMTMgKzgxMiw3MCBAQAogCX0KIH07CiAKK3N0YXRpYyBpbnQgX19pbml0IHByb21fY291bnRfc210X3RocmVhZHModm9pZCkKK3sKKwlwaGFuZGxlIG5vZGU7CisJY2hhciB0eXBlWzY0XTsKKwl1bnNpZ25lZCBpbnQgcGxlbjsKKworCS8qIFBpY2sgdXAgdGggZmlyc3QgQ1BVIG5vZGUgd2UgY2FuIGZpbmQgKi8KKwlmb3IgKG5vZGUgPSAwOyBwcm9tX25leHRfbm9kZSgmbm9kZSk7ICkgeworCQl0eXBlWzBdID0gMDsKKwkJcHJvbV9nZXRwcm9wKG5vZGUsICJkZXZpY2VfdHlwZSIsIHR5cGUsIHNpemVvZih0eXBlKSk7CisKKwkJaWYgKHN0cmNtcCh0eXBlLCBSRUxPQygiY3B1IikpKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIFRoZXJlIGlzIGFuIGVudHJ5IGZvciBlYWNoIHNtdCB0aHJlYWQsIGVhY2ggZW50cnkgYmVpbmcKKwkJICogNCBieXRlcyBsb25nLiAgQWxsIGNwdXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mCisJCSAqIHNtdCB0aHJlYWRzLCBzbyByZXR1cm4gYWZ0ZXIgZmluZGluZyB0aGUgZmlyc3QuCisJCSAqLworCQlwbGVuID0gcHJvbV9nZXRwcm9wbGVuKG5vZGUsICJpYm0scHBjLWludGVycnVwdC1zZXJ2ZXIjcyIpOworCQlpZiAocGxlbiA9PSBQUk9NX0VSUk9SKQorCQkJYnJlYWs7CisJCXBsZW4gPj49IDI7CisJCXByb21fZGVidWcoIkZvdW5kIDB4JXggc210IHRocmVhZHMgcGVyIGNvcmVcbiIsICh1bnNpZ25lZCBsb25nKXBsZW4pOworCisJCS8qIFNhbml0eSBjaGVjayAqLworCQlpZiAocGxlbiA8IDEgfHwgcGxlbiA+IDY0KSB7CisJCQlwcm9tX3ByaW50ZigiVGhyZWFkcyBwZXIgY29yZSAweCV4IG91dCBvZiBib3VuZHMsIGFzc3VtaW5nIDFcbiIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nKXBsZW4pOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIHBsZW47CisJfQorCXByb21fZGVidWcoIk5vIHRocmVhZHMgZm91bmQsIGFzc3VtaW5nIDEgcGVyIGNvcmVcbiIpOworCisJcmV0dXJuIDE7CisKK30KKworCiBzdGF0aWMgdm9pZCBfX2luaXQgcHJvbV9zZW5kX2NhcGFiaWxpdGllcyh2b2lkKQogewogCWloYW5kbGUgZWxmbG9hZGVyLCByb290OwogCXByb21fYXJnX3QgcmV0OworCXUzMiAqY29yZXM7CiAKIAlyb290ID0gY2FsbF9wcm9tKCJvcGVuIiwgMSwgMSwgQUREUigiLyIpKTsKIAlpZiAocm9vdCAhPSAwKSB7CisJCS8qIFdlIG5lZWQgdG8gdGVsbCB0aGUgRlcgYWJvdXQgdGhlIG51bWJlciBvZiBjb3JlcyB3ZSBzdXBwb3J0LgorCQkgKgorCQkgKiBUbyBkbyB0aGF0LCB3ZSBjb3VudCB0aGUgbnVtYmVyIG9mIHRocmVhZHMgb24gdGhlIGZpcnN0IGNvcmUKKwkJICogKHdlIGFzc3VtZSB0aGlzIGlzIHRoZSBzYW1lIGZvciBhbGwgY29yZXMpIGFuZCB1c2UgaXQgdG8KKwkJICogZGl2aWRlIE5SX0NQVVMuCisJCSAqLworCQljb3JlcyA9ICh1MzIgKilQVFJSRUxPQygmaWJtX2FyY2hpdGVjdHVyZV92ZWNbSUJNX0FSQ0hfVkVDX05SQ09SRVNfT0ZGU0VUXSk7CisJCWlmICgqY29yZXMgIT0gTlJfQ1BVUykgeworCQkJcHJvbV9wcmludGYoIldBUk5JTkcgISAiCisJCQkJICAgICJpYm1fYXJjaGl0ZWN0dXJlX3ZlYyBzdHJ1Y3R1cmUgaW5jb25zaXN0ZW50OiAweCV4ICFcbiIsCisJCQkJICAgICpjb3Jlcyk7CisJCX0gZWxzZSB7CisJCQkqY29yZXMgPSBOUl9DUFVTIC8gcHJvbV9jb3VudF9zbXRfdGhyZWFkcygpOworCQkJcHJvbV9wcmludGYoIk1heCBudW1iZXIgb2YgY29yZXMgcGFzc2VkIHRvIGZpcm13YXJlOiAweCV4XG4iLAorCQkJCSAgICAodW5zaWduZWQgbG9uZykqY29yZXMpOworCQl9CisKIAkJLyogdHJ5IGNhbGxpbmcgdGhlIGlibSxjbGllbnQtYXJjaGl0ZWN0dXJlLXN1cHBvcnQgbWV0aG9kICovCiAJCXByb21fcHJpbnRmKCJDYWxsaW5nIGlibSxjbGllbnQtYXJjaGl0ZWN0dXJlLXN1cHBvcnQuLi4iKTsKIAkJaWYgKGNhbGxfcHJvbV9yZXQoImNhbGwtbWV0aG9kIiwgMywgMiwgJnJldCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCmluZGV4IGVmMTQ5ODguLmQ5YjA1ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwpAQCAtNDYsNyArNDYsNyBAQAogLyoKICAqIFNldCBvZiBtc3IgYml0cyB0aGF0IGdkYiBjYW4gY2hhbmdlIG9uIGJlaGFsZiBvZiBhIHByb2Nlc3MuCiAgKi8KLSNpZiBkZWZpbmVkKENPTkZJR180MHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKICNkZWZpbmUgTVNSX0RFQlVHQ0hBTkdFCTAKICNlbHNlCiAjZGVmaW5lIE1TUl9ERUJVR0NIQU5HRQkoTVNSX1NFIHwgTVNSX0JFKQpAQCAtNzAzLDcgKzcwMyw3IEBACiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrLT50aHJlYWQucmVnczsKIAogCWlmIChyZWdzICE9IE5VTEwpIHsKLSNpZiBkZWZpbmVkKENPTkZJR180MHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAkJdGFzay0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9CVDsKIAkJdGFzay0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lETSB8IERCQ1IwX0lDOwogCQlyZWdzLT5tc3IgfD0gTVNSX0RFOwpAQCAtNzIwLDcgKzcyMCw3IEBACiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrLT50aHJlYWQucmVnczsKIAogCWlmIChyZWdzICE9IE5VTEwpIHsKLSNpZiBkZWZpbmVkKENPTkZJR180MHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAkJdGFzay0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQzsKIAkJdGFzay0+dGhyZWFkLmRiY3IwID0gREJDUjBfSURNIHwgREJDUjBfQlQ7CiAJCXJlZ3MtPm1zciB8PSBNU1JfREU7CkBAIC03MzcsMTcgKzczNywyNSBAQAogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFzay0+dGhyZWFkLnJlZ3M7CiAKIAlpZiAocmVncyAhPSBOVUxMKSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCi0JCS8qIElmIERBQyBkb24ndCBjbGVhciBEQkNST19JRE0gb3IgTVNSX0RFICovCi0JCWlmICh0YXNrLT50aHJlYWQuZGFicikKLQkJCXRhc2stPnRocmVhZC5kYmNyMCAmPSB+KERCQ1IwX0lDIHwgREJDUjBfQlQpOwotCQllbHNlIHsKLQkJCXRhc2stPnRocmVhZC5kYmNyMCAmPSB+KERCQ1IwX0lDIHwgREJDUjBfQlQgfCBEQkNSMF9JRE0pOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwkJLyoKKwkJICogVGhlIGxvZ2ljIHRvIGRpc2FibGUgc2luZ2xlIHN0ZXBwaW5nIHNob3VsZCBiZSBhcworCQkgKiBzaW1wbGUgYXMgdHVybmluZyBvZmYgdGhlIEluc3RydWN0aW9uIENvbXBsZXRlIGZsYWcuCisJCSAqIEFuZCwgYWZ0ZXIgZG9pbmcgc28sIGlmIGFsbCBkZWJ1ZyBmbGFncyBhcmUgb2ZmLCB0dXJuCisJCSAqIG9mZiBEQkNSMChJRE0pIGFuZCBNU1IoREUpIC4uLi4gVG9yZXoKKwkJICovCisJCXRhc2stPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUM7CisJCS8qCisJCSAqIFRlc3QgdG8gc2VlIGlmIGFueSBvZiB0aGUgREJDUl9BQ1RJVkVfRVZFTlRTIGJpdHMgYXJlIHNldC4KKwkJICovCisJCWlmICghREJDUl9BQ1RJVkVfRVZFTlRTKHRhc2stPnRocmVhZC5kYmNyMCwKKwkJCQkJdGFzay0+dGhyZWFkLmRiY3IxKSkgeworCQkJLyoKKwkJCSAqIEFsbCBkZWJ1ZyBldmVudHMgd2VyZSBvZmYuLi4uLgorCQkJICovCisJCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lETTsKIAkJCXJlZ3MtPm1zciAmPSB+TVNSX0RFOwogCQl9Ci0jZWxpZiBkZWZpbmVkKENPTkZJR180MHgpCi0JCXRhc2stPnRocmVhZC5kYmNyMCAmPSB+KERCQ1IwX0lDIHwgREJDUjBfQlQgfCBEQkNSMF9JRE0pOwotCQlyZWdzLT5tc3IgJj0gfk1TUl9ERTsKICNlbHNlCiAJCXJlZ3MtPm1zciAmPSB+KE1TUl9TRSB8IE1TUl9CRSk7CiAjZW5kaWYKQEAgLTc2OSw4ICs3NzcsNyBAQAogCWlmICgoZGF0YSAmIH4weDdVTCkgPj0gVEFTS19TSVpFKQogCQlyZXR1cm4gLUVJTzsKIAotI2lmbmRlZiBDT05GSUdfQk9PS0UKLQorI2lmbmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJLyogRm9yIHByb2Nlc3NvcnMgdXNpbmcgREFCUiAoaS5lLiA5NzApLCB0aGUgYm90dG9tIDMgYml0cyBhcmUgZmxhZ3MuCiAJICogIEl0IHdhcyBhc3N1bWVkLCBvbiBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbnMsIHRoYXQgMyBiaXRzIHdlcmUKIAkgKiAgcGFzc2VkIHRvZ2V0aGVyIHdpdGggdGhlIGRhdGEgYWRkcmVzcywgZml0dGluZyB0aGUgZGVzaWduIG9mIHRoZQpAQCAtNzg5LDIxICs3OTYsMjIgQEAKIAogCS8qIE1vdmUgY29udGVudHMgdG8gdGhlIERBQlIgcmVnaXN0ZXIgKi8KIAl0YXNrLT50aHJlYWQuZGFiciA9IGRhdGE7Ci0KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKQotCisjZWxzZSAvKiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCiAJLyogQXMgZGVzY3JpYmVkIGFib3ZlLCBpdCB3YXMgYXNzdW1lZCAzIGJpdHMgd2VyZSBwYXNzZWQgd2l0aCB0aGUgZGF0YQogCSAqICBhZGRyZXNzLCBidXQgd2Ugd2lsbCBhc3N1bWUgb25seSB0aGUgbW9kZSBiaXRzIHdpbGwgYmUgcGFzc2VkCiAJICogIGFzIHRvIG5vdCBjYXVzZSBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zIGZvciBEQUMtYmFzZWQgcHJvY2Vzc29ycy4KIAkgKi8KIAogCS8qIERBQydzIGhvbGQgdGhlIHdob2xlIGFkZHJlc3Mgd2l0aG91dCBhbnkgbW9kZSBmbGFncyAqLwotCXRhc2stPnRocmVhZC5kYWJyID0gZGF0YSAmIH4weDNVTDsKKwl0YXNrLT50aHJlYWQuZGFjMSA9IGRhdGEgJiB+MHgzVUw7CiAKLQlpZiAodGFzay0+dGhyZWFkLmRhYnIgPT0gMCkgewotCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfihEQlNSX0RBQzFSIHwgREJTUl9EQUMxVyB8IERCQ1IwX0lETSk7Ci0JCXRhc2stPnRocmVhZC5yZWdzLT5tc3IgJj0gfk1TUl9ERTsKKwlpZiAodGFzay0+dGhyZWFkLmRhYzEgPT0gMCkgeworCQlkYmNyX2RhYyh0YXNrKSAmPSB+KERCQ1JfREFDMVIgfCBEQkNSX0RBQzFXKTsKKwkJaWYgKCFEQkNSX0FDVElWRV9FVkVOVFModGFzay0+dGhyZWFkLmRiY3IwLAorCQkJCQl0YXNrLT50aHJlYWQuZGJjcjEpKSB7CisJCQl0YXNrLT50aHJlYWQucmVncy0+bXNyICY9IH5NU1JfREU7CisJCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lETTsKKwkJfQogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTgxNCwxNyArODIyLDE3IEBACiAKIAkvKiBTZXQgdGhlIEludGVybmFsIERlYnVnZ2luZyBmbGFnIChJRE0gYml0IDEpIGZvciB0aGUgREJDUjAKIAkgICByZWdpc3RlciAqLwotCXRhc2stPnRocmVhZC5kYmNyMCA9IERCQ1IwX0lETTsKKwl0YXNrLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSURNOwogCiAJLyogQ2hlY2sgZm9yIHdyaXRlIGFuZCByZWFkIGZsYWdzIGFuZCBzZXQgREJDUjAKIAkgICBhY2NvcmRpbmdseSAqLworCWRiY3JfZGFjKHRhc2spICY9IH4oREJDUl9EQUMxUnxEQkNSX0RBQzFXKTsKIAlpZiAoZGF0YSAmIDB4MVVMKQotCQl0YXNrLT50aHJlYWQuZGJjcjAgfD0gREJTUl9EQUMxUjsKKwkJZGJjcl9kYWModGFzaykgfD0gREJDUl9EQUMxUjsKIAlpZiAoZGF0YSAmIDB4MlVMKQotCQl0YXNrLT50aHJlYWQuZGJjcjAgfD0gREJTUl9EQUMxVzsKLQorCQlkYmNyX2RhYyh0YXNrKSB8PSBEQkNSX0RBQzFXOwogCXRhc2stPnRocmVhZC5yZWdzLT5tc3IgfD0gTVNSX0RFOwotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLwogCXJldHVybiAwOwogfQogCkBAIC04MzksNiArODQ3LDM5NCBAQAogCXVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChjaGlsZCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCitzdGF0aWMgbG9uZyBzZXRfaW50cnVjdGlvbl9icChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAorCQkJICAgICAgc3RydWN0IHBwY19od19icmVha3BvaW50ICpicF9pbmZvKQoreworCWludCBzbG90OworCWludCBzbG90MV9pbl91c2UgPSAoKGNoaWxkLT50aHJlYWQuZGJjcjAgJiBEQkNSMF9JQUMxKSAhPSAwKTsKKwlpbnQgc2xvdDJfaW5fdXNlID0gKChjaGlsZC0+dGhyZWFkLmRiY3IwICYgREJDUjBfSUFDMikgIT0gMCk7CisJaW50IHNsb3QzX2luX3VzZSA9ICgoY2hpbGQtPnRocmVhZC5kYmNyMCAmIERCQ1IwX0lBQzMpICE9IDApOworCWludCBzbG90NF9pbl91c2UgPSAoKGNoaWxkLT50aHJlYWQuZGJjcjAgJiBEQkNSMF9JQUM0KSAhPSAwKTsKKworCWlmIChkYmNyX2lhY19yYW5nZShjaGlsZCkgJiBEQkNSX0lBQzEyTU9ERSkKKwkJc2xvdDJfaW5fdXNlID0gMTsKKwlpZiAoZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICYgREJDUl9JQUMzNE1PREUpCisJCXNsb3Q0X2luX3VzZSA9IDE7CisKKwlpZiAoYnBfaW5mby0+YWRkciA+PSBUQVNLX1NJWkUpCisJCXJldHVybiAtRUlPOworCisJaWYgKGJwX2luZm8tPmFkZHJfbW9kZSAhPSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUKSB7CisKKwkJLyogTWFrZSBzdXJlIHJhbmdlIGlzIHZhbGlkLiAqLworCQlpZiAoYnBfaW5mby0+YWRkcjIgPj0gVEFTS19TSVpFKQorCQkJcmV0dXJuIC1FSU87CisKKwkJLyogV2UgbmVlZCBhIHBhaXIgb2YgSUFDIHJlZ3Npc3RlcnMgKi8KKwkJaWYgKCghc2xvdDFfaW5fdXNlKSAmJiAoIXNsb3QyX2luX3VzZSkpIHsKKwkJCXNsb3QgPSAxOworCQkJY2hpbGQtPnRocmVhZC5pYWMxID0gYnBfaW5mby0+YWRkcjsKKwkJCWNoaWxkLT50aHJlYWQuaWFjMiA9IGJwX2luZm8tPmFkZHIyOworCQkJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JQUMxOworCQkJaWYgKGJwX2luZm8tPmFkZHJfbW9kZSA9PQorCQkJCQlQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0VYQ0xVU0lWRSkKKwkJCQlkYmNyX2lhY19yYW5nZShjaGlsZCkgfD0gREJDUl9JQUMxMlg7CisJCQllbHNlCisJCQkJZGJjcl9pYWNfcmFuZ2UoY2hpbGQpIHw9IERCQ1JfSUFDMTJJOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0lBQ1MgPiAyCisJCX0gZWxzZSBpZiAoKCFzbG90M19pbl91c2UpICYmICghc2xvdDRfaW5fdXNlKSkgeworCQkJc2xvdCA9IDM7CisJCQljaGlsZC0+dGhyZWFkLmlhYzMgPSBicF9pbmZvLT5hZGRyOworCQkJY2hpbGQtPnRocmVhZC5pYWM0ID0gYnBfaW5mby0+YWRkcjI7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lBQzM7CisJCQlpZiAoYnBfaW5mby0+YWRkcl9tb2RlID09CisJCQkJCVBQQ19CUkVBS1BPSU5UX01PREVfUkFOR0VfRVhDTFVTSVZFKQorCQkJCWRiY3JfaWFjX3JhbmdlKGNoaWxkKSB8PSBEQkNSX0lBQzM0WDsKKwkJCWVsc2UKKwkJCQlkYmNyX2lhY19yYW5nZShjaGlsZCkgfD0gREJDUl9JQUMzNEk7CisjZW5kaWYKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVOT1NQQzsKKwl9IGVsc2UgeworCQkvKiBXZSBvbmx5IG5lZWQgb25lLiAgSWYgcG9zc2libGUgbGVhdmUgYSBwYWlyIGZyZWUgaW4KKwkJICogY2FzZSBhIHJhbmdlIGlzIG5lZWRlZCBsYXRlcgorCQkgKi8KKwkJaWYgKCFzbG90MV9pbl91c2UpIHsKKwkJCS8qCisJCQkgKiBEb24ndCB1c2UgaWFjMSBpZiBpYWMxLWlhYzIgYXJlIGZyZWUgYW5kIGVpdGhlcgorCQkJICogaWFjMyBvciBpYWM0IChidXQgbm90IGJvdGgpIGFyZSBmcmVlCisJCQkgKi8KKwkJCWlmIChzbG90Ml9pbl91c2UgfHwgKHNsb3QzX2luX3VzZSA9PSBzbG90NF9pbl91c2UpKSB7CisJCQkJc2xvdCA9IDE7CisJCQkJY2hpbGQtPnRocmVhZC5pYWMxID0gYnBfaW5mby0+YWRkcjsKKwkJCQljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lBQzE7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwkJaWYgKCFzbG90Ml9pbl91c2UpIHsKKwkJCXNsb3QgPSAyOworCQkJY2hpbGQtPnRocmVhZC5pYWMyID0gYnBfaW5mby0+YWRkcjsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSUFDMjsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19JQUNTID4gMgorCQl9IGVsc2UgaWYgKCFzbG90M19pbl91c2UpIHsKKwkJCXNsb3QgPSAzOworCQkJY2hpbGQtPnRocmVhZC5pYWMzID0gYnBfaW5mby0+YWRkcjsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSUFDMzsKKwkJfSBlbHNlIGlmICghc2xvdDRfaW5fdXNlKSB7CisJCQlzbG90ID0gNDsKKwkJCWNoaWxkLT50aHJlYWQuaWFjNCA9IGJwX2luZm8tPmFkZHI7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lBQzQ7CisjZW5kaWYKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVOT1NQQzsKKwl9CitvdXQ6CisJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JRE07CisJY2hpbGQtPnRocmVhZC5yZWdzLT5tc3IgfD0gTVNSX0RFOworCisJcmV0dXJuIHNsb3Q7Cit9CisKK3N0YXRpYyBpbnQgZGVsX2luc3RydWN0aW9uX2JwKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGludCBzbG90KQoreworCXN3aXRjaCAoc2xvdCkgeworCWNhc2UgMToKKwkJaWYgKGNoaWxkLT50aHJlYWQuaWFjMSA9PSAwKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisKKwkJaWYgKGRiY3JfaWFjX3JhbmdlKGNoaWxkKSAmIERCQ1JfSUFDMTJNT0RFKSB7CisJCQkvKiBhZGRyZXNzIHJhbmdlIC0gY2xlYXIgc2xvdHMgMSAmIDIgKi8KKwkJCWNoaWxkLT50aHJlYWQuaWFjMiA9IDA7CisJCQlkYmNyX2lhY19yYW5nZShjaGlsZCkgJj0gfkRCQ1JfSUFDMTJNT0RFOworCQl9CisJCWNoaWxkLT50aHJlYWQuaWFjMSA9IDA7CisJCWNoaWxkLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lBQzE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaWYgKGNoaWxkLT50aHJlYWQuaWFjMiA9PSAwKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisKKwkJaWYgKGRiY3JfaWFjX3JhbmdlKGNoaWxkKSAmIERCQ1JfSUFDMTJNT0RFKQorCQkJLyogdXNlZCBpbiBhIHJhbmdlICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2hpbGQtPnRocmVhZC5pYWMyID0gMDsKKwkJY2hpbGQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUFDMjsKKwkJYnJlYWs7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUyA+IDIKKwljYXNlIDM6CisJCWlmIChjaGlsZC0+dGhyZWFkLmlhYzMgPT0gMCkKKwkJCXJldHVybiAtRU5PRU5UOworCisJCWlmIChkYmNyX2lhY19yYW5nZShjaGlsZCkgJiBEQkNSX0lBQzM0TU9ERSkgeworCQkJLyogYWRkcmVzcyByYW5nZSAtIGNsZWFyIHNsb3RzIDMgJiA0ICovCisJCQljaGlsZC0+dGhyZWFkLmlhYzQgPSAwOworCQkJZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICY9IH5EQkNSX0lBQzM0TU9ERTsKKwkJfQorCQljaGlsZC0+dGhyZWFkLmlhYzMgPSAwOworCQljaGlsZC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQUMzOworCQlicmVhazsKKwljYXNlIDQ6CisJCWlmIChjaGlsZC0+dGhyZWFkLmlhYzQgPT0gMCkKKwkJCXJldHVybiAtRU5PRU5UOworCisJCWlmIChkYmNyX2lhY19yYW5nZShjaGlsZCkgJiBEQkNSX0lBQzM0TU9ERSkKKwkJCS8qIFVzZWQgaW4gYSByYW5nZSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNoaWxkLT50aHJlYWQuaWFjNCA9IDA7CisJCWNoaWxkLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lBQzQ7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9kYWMoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgc3RydWN0IHBwY19od19icmVha3BvaW50ICpicF9pbmZvKQoreworCWludCBieXRlX2VuYWJsZSA9CisJCShicF9pbmZvLT5jb25kaXRpb25fbW9kZSA+PiBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfU0hJRlQpCisJCSYgMHhmOworCWludCBjb25kaXRpb25fbW9kZSA9CisJCWJwX2luZm8tPmNvbmRpdGlvbl9tb2RlICYgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX01PREU7CisJaW50IHNsb3Q7CisKKwlpZiAoYnl0ZV9lbmFibGUgJiYgKGNvbmRpdGlvbl9tb2RlID09IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChicF9pbmZvLT5hZGRyID49IFRBU0tfU0laRSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoKGRiY3JfZGFjKGNoaWxkKSAmIChEQkNSX0RBQzFSIHwgREJDUl9EQUMxVykpID09IDApIHsKKwkJc2xvdCA9IDE7CisJCWlmIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JFQUQpCisJCQlkYmNyX2RhYyhjaGlsZCkgfD0gREJDUl9EQUMxUjsKKwkJaWYgKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfV1JJVEUpCisJCQlkYmNyX2RhYyhjaGlsZCkgfD0gREJDUl9EQUMxVzsKKwkJY2hpbGQtPnRocmVhZC5kYWMxID0gKHVuc2lnbmVkIGxvbmcpYnBfaW5mby0+YWRkcjsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTID4gMAorCQlpZiAoYnl0ZV9lbmFibGUpIHsKKwkJCWNoaWxkLT50aHJlYWQuZHZjMSA9CisJCQkJKHVuc2lnbmVkIGxvbmcpYnBfaW5mby0+Y29uZGl0aW9uX3ZhbHVlOworCQkJY2hpbGQtPnRocmVhZC5kYmNyMiB8PQorCQkJCSgoYnl0ZV9lbmFibGUgPDwgREJDUjJfRFZDMUJFX1NISUZUKSB8CisJCQkJIChjb25kaXRpb25fbW9kZSA8PCBEQkNSMl9EVkMxTV9TSElGVCkpOworCQl9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0UKKwl9IGVsc2UgaWYgKGNoaWxkLT50aHJlYWQuZGJjcjIgJiBEQkNSMl9EQUMxMk1PREUpIHsKKwkJLyogQm90aCBkYWMxIGFuZCBkYWMyIGFyZSBwYXJ0IG9mIGEgcmFuZ2UgKi8KKwkJcmV0dXJuIC1FTk9TUEM7CisjZW5kaWYKKwl9IGVsc2UgaWYgKChkYmNyX2RhYyhjaGlsZCkgJiAoREJDUl9EQUMyUiB8IERCQ1JfREFDMlcpKSA9PSAwKSB7CisJCXNsb3QgPSAyOworCQlpZiAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFEKQorCQkJZGJjcl9kYWMoY2hpbGQpIHw9IERCQ1JfREFDMlI7CisJCWlmIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1dSSVRFKQorCQkJZGJjcl9kYWMoY2hpbGQpIHw9IERCQ1JfREFDMlc7CisJCWNoaWxkLT50aHJlYWQuZGFjMiA9ICh1bnNpZ25lZCBsb25nKWJwX2luZm8tPmFkZHI7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyA+IDAKKwkJaWYgKGJ5dGVfZW5hYmxlKSB7CisJCQljaGlsZC0+dGhyZWFkLmR2YzIgPQorCQkJCSh1bnNpZ25lZCBsb25nKWJwX2luZm8tPmNvbmRpdGlvbl92YWx1ZTsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjIgfD0KKwkJCQkoKGJ5dGVfZW5hYmxlIDw8IERCQ1IyX0RWQzJCRV9TSElGVCkgfAorCQkJCSAoY29uZGl0aW9uX21vZGUgPDwgREJDUjJfRFZDMk1fU0hJRlQpKTsKKwkJfQorI2VuZGlmCisJfSBlbHNlCisJCXJldHVybiAtRU5PU1BDOworCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSURNOworCWNoaWxkLT50aHJlYWQucmVncy0+bXNyIHw9IE1TUl9ERTsKKworCXJldHVybiBzbG90ICsgNDsKK30KKworc3RhdGljIGludCBkZWxfZGFjKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGludCBzbG90KQoreworCWlmIChzbG90ID09IDEpIHsKKwkJaWYgKGNoaWxkLT50aHJlYWQuZGFjMSA9PSAwKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisKKwkJY2hpbGQtPnRocmVhZC5kYWMxID0gMDsKKwkJZGJjcl9kYWMoY2hpbGQpICY9IH4oREJDUl9EQUMxUiB8IERCQ1JfREFDMVcpOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX0RBQ19SQU5HRQorCQlpZiAoY2hpbGQtPnRocmVhZC5kYmNyMiAmIERCQ1IyX0RBQzEyTU9ERSkgeworCQkJY2hpbGQtPnRocmVhZC5kYWMyID0gMDsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjIgJj0gfkRCQ1IyX0RBQzEyTU9ERTsKKwkJfQorCQljaGlsZC0+dGhyZWFkLmRiY3IyICY9IH4oREJDUjJfRFZDMU0gfCBEQkNSMl9EVkMxQkUpOworI2VuZGlmCisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyA+IDAKKwkJY2hpbGQtPnRocmVhZC5kdmMxID0gMDsKKyNlbmRpZgorCX0gZWxzZSBpZiAoc2xvdCA9PSAyKSB7CisJCWlmIChjaGlsZC0+dGhyZWFkLmRhYzEgPT0gMCkKKwkJCXJldHVybiAtRU5PRU5UOworCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfREFDX1JBTkdFCisJCWlmIChjaGlsZC0+dGhyZWFkLmRiY3IyICYgREJDUjJfREFDMTJNT0RFKQorCQkJLyogUGFydCBvZiBhIHJhbmdlICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2hpbGQtPnRocmVhZC5kYmNyMiAmPSB+KERCQ1IyX0RWQzJNIHwgREJDUjJfRFZDMkJFKTsKKyNlbmRpZgorI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0RWQ1MgPiAwCisJCWNoaWxkLT50aHJlYWQuZHZjMiA9IDA7CisjZW5kaWYKKwkJY2hpbGQtPnRocmVhZC5kYWMyID0gMDsKKwkJZGJjcl9kYWMoY2hpbGQpICY9IH4oREJDUl9EQUMyUiB8IERCQ1JfREFDMlcpOworCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KKworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX0RBQ19SQU5HRQorc3RhdGljIGludCBzZXRfZGFjX3JhbmdlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCisJCQkgc3RydWN0IHBwY19od19icmVha3BvaW50ICpicF9pbmZvKQoreworCWludCBtb2RlID0gYnBfaW5mby0+YWRkcl9tb2RlICYgUFBDX0JSRUFLUE9JTlRfTU9ERV9NQVNLOworCisJLyogV2UgZG9uJ3QgYWxsb3cgcmFuZ2Ugd2F0Y2hwb2ludHMgdG8gYmUgdXNlZCB3aXRoIERWQyAqLworCWlmIChicF9pbmZvLT5jb25kaXRpb25fbW9kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIEJlc3QgZWZmb3J0IHRvIHZlcmlmeSB0aGUgYWRkcmVzcyByYW5nZS4gIFRoZSB1c2VyL3N1cGVydmlzb3IgYml0cworCSAqIHByZXZlbnQgdHJhcHBpbmcgaW4ga2VybmVsIHNwYWNlLCBidXQgbGV0J3MgZmFpbCBvbiBhbiBvYnZpb3VzIGJhZAorCSAqIHJhbmdlLiAgVGhlIHNpbXBsZSB0ZXN0IG9uIHRoZSBtYXNrIGlzIG5vdCBmb29sLXByb29mLCBhbmQgYW55CisJICogZXhjbHVzaXZlIHJhbmdlIHdpbGwgc3BpbGwgb3ZlciBpbnRvIGtlcm5lbCBzcGFjZS4KKwkgKi8KKwlpZiAoYnBfaW5mby0+YWRkciA+PSBUQVNLX1NJWkUpCisJCXJldHVybiAtRUlPOworCWlmIChtb2RlID09IFBQQ19CUkVBS1BPSU5UX01PREVfTUFTSykgeworCQkvKgorCQkgKiBkYWMyIGlzIGEgYml0bWFzay4gIERvbid0IGFsbG93IGEgbWFzayB0aGF0IG1ha2VzIGEKKwkJICoga2VybmVsIHNwYWNlIGFkZHJlc3MgZnJvbSBhIHZhbGlkIGRhYzEgdmFsdWUKKwkJICovCisJCWlmICh+KCh1bnNpZ25lZCBsb25nKWJwX2luZm8tPmFkZHIyKSA+PSBUQVNLX1NJWkUpCisJCQlyZXR1cm4gLUVJTzsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBGb3IgcmFuZ2UgYnJlYWtwb2ludHMsIGFkZHIyIG11c3QgYWxzbyBiZSBhIHZhbGlkIGFkZHJlc3MKKwkJICovCisJCWlmIChicF9pbmZvLT5hZGRyMiA+PSBUQVNLX1NJWkUpCisJCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoY2hpbGQtPnRocmVhZC5kYmNyMCAmCisJICAgIChEQkNSMF9EQUMxUiB8IERCQ1IwX0RBQzFXIHwgREJDUjBfREFDMlIgfCBEQkNSMF9EQUMyVykpCisJCXJldHVybiAtRU5PU1BDOworCisJaWYgKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUkVBRCkKKwkJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSAoREJDUjBfREFDMVIgfCBEQkNSMF9JRE0pOworCWlmIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1dSSVRFKQorCQljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IChEQkNSMF9EQUMxVyB8IERCQ1IwX0lETSk7CisJY2hpbGQtPnRocmVhZC5kYWMxID0gYnBfaW5mby0+YWRkcjsKKwljaGlsZC0+dGhyZWFkLmRhYzIgPSBicF9pbmZvLT5hZGRyMjsKKwlpZiAobW9kZSA9PSBQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0lOQ0xVU0lWRSkKKwkJY2hpbGQtPnRocmVhZC5kYmNyMiAgfD0gREJDUjJfREFDMTJNOworCWVsc2UgaWYgKG1vZGUgPT0gUFBDX0JSRUFLUE9JTlRfTU9ERV9SQU5HRV9FWENMVVNJVkUpCisJCWNoaWxkLT50aHJlYWQuZGJjcjIgIHw9IERCQ1IyX0RBQzEyTVg7CisJZWxzZQkvKiBQUENfQlJFQUtQT0lOVF9NT0RFX01BU0sgKi8KKwkJY2hpbGQtPnRocmVhZC5kYmNyMiAgfD0gREJDUjJfREFDMTJNTTsKKwljaGlsZC0+dGhyZWFkLnJlZ3MtPm1zciB8PSBNU1JfREU7CisKKwlyZXR1cm4gNTsKK30KKyNlbmRpZiAvKiBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0UgKi8KKworc3RhdGljIGxvbmcgcHBjX3NldF9od2RlYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCisJCSAgICAgc3RydWN0IHBwY19od19icmVha3BvaW50ICpicF9pbmZvKQoreworCWlmIChicF9pbmZvLT52ZXJzaW9uICE9IDEpCisJCXJldHVybiAtRU5PVFNVUFA7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworCS8qCisJICogQ2hlY2sgZm9yIGludmFsaWQgZmxhZ3MgYW5kIGNvbWJpbmF0aW9ucworCSAqLworCWlmICgoYnBfaW5mby0+dHJpZ2dlcl90eXBlID09IDApIHx8CisJICAgIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiB+KFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfRVhFQ1VURSB8CisJCQkJICAgICAgIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUlcpKSB8fAorCSAgICAoYnBfaW5mby0+YWRkcl9tb2RlICYgflBQQ19CUkVBS1BPSU5UX01PREVfTUFTSykgfHwKKwkgICAgKGJwX2luZm8tPmNvbmRpdGlvbl9tb2RlICYKKwkgICAgIH4oUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX01PREUgfAorCSAgICAgICBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfQUxMKSkpCisJCXJldHVybiAtRUlOVkFMOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0RWQ1MgPT0gMAorCWlmIChicF9pbmZvLT5jb25kaXRpb25fbW9kZSAhPSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTk9ORSkKKwkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKKworCWlmIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX0VYRUNVVEUpIHsKKwkJaWYgKChicF9pbmZvLT50cmlnZ2VyX3R5cGUgIT0gUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9FWEVDVVRFKSB8fAorCQkgICAgKGJwX2luZm8tPmNvbmRpdGlvbl9tb2RlICE9IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gc2V0X2ludHJ1Y3Rpb25fYnAoY2hpbGQsIGJwX2luZm8pOworCX0KKwlpZiAoYnBfaW5mby0+YWRkcl9tb2RlID09IFBQQ19CUkVBS1BPSU5UX01PREVfRVhBQ1QpCisJCXJldHVybiBzZXRfZGFjKGNoaWxkLCBicF9pbmZvKTsKKworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX0RBQ19SQU5HRQorCXJldHVybiBzZXRfZGFjX3JhbmdlKGNoaWxkLCBicF9pbmZvKTsKKyNlbHNlCisJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKKyNlbHNlIC8qICFDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTICovCisJLyoKKwkgKiBXZSBvbmx5IHN1cHBvcnQgb25lIGRhdGEgYnJlYWtwb2ludAorCSAqLworCWlmICgoKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUlcpID09IDApIHx8CisJICAgICgoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgflBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUlcpICE9IDApIHx8CisJICAgIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgIT0gUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9XUklURSkgfHwKKwkgICAgKGJwX2luZm8tPmFkZHJfbW9kZSAhPSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUKSB8fAorCSAgICAoYnBfaW5mby0+Y29uZGl0aW9uX21vZGUgIT0gUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX05PTkUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjaGlsZC0+dGhyZWFkLmRhYnIpCisJCXJldHVybiAtRU5PU1BDOworCisJaWYgKCh1bnNpZ25lZCBsb25nKWJwX2luZm8tPmFkZHIgPj0gVEFTS19TSVpFKQorCQlyZXR1cm4gLUVJTzsKKworCWNoaWxkLT50aHJlYWQuZGFiciA9ICh1bnNpZ25lZCBsb25nKWJwX2luZm8tPmFkZHI7CisKKwlyZXR1cm4gMTsKKyNlbmRpZiAvKiAhQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyAqLworfQorCitzdGF0aWMgbG9uZyBwcGNfZGVsX2h3ZGVidWcoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpCit7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworCWludCByYzsKKworCWlmIChkYXRhIDw9IDQpCisJCXJjID0gZGVsX2luc3RydWN0aW9uX2JwKGNoaWxkLCAoaW50KWRhdGEpOworCWVsc2UKKwkJcmMgPSBkZWxfZGFjKGNoaWxkLCAoaW50KWRhdGEgLSA0KTsKKworCWlmICghcmMpIHsKKwkJaWYgKCFEQkNSX0FDVElWRV9FVkVOVFMoY2hpbGQtPnRocmVhZC5kYmNyMCwKKwkJCQkJY2hpbGQtPnRocmVhZC5kYmNyMSkpIHsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lETTsKKwkJCWNoaWxkLT50aHJlYWQucmVncy0+bXNyICY9IH5NU1JfREU7CisJCX0KKwl9CisJcmV0dXJuIHJjOworI2Vsc2UKKwlpZiAoZGF0YSAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2hpbGQtPnRocmVhZC5kYWJyID09IDApCisJCXJldHVybiAtRU5PRU5UOworCisJY2hpbGQtPnRocmVhZC5kYWJyID0gMDsKKworCXJldHVybiAwOworI2VuZGlmCit9CisKIC8qCiAgKiBIZXJlIGFyZSB0aGUgb2xkICJsZWdhY3kiIHBvd2VycGMgc3BlY2lmaWMgZ2V0cmVncy9zZXRyZWdzIHB0cmFjZSBjYWxscywKICAqIHdlIG1hcmsgdGhlbSBhcyBvYnNvbGV0ZSBub3csIHRoZXkgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24KQEAgLTkzMiwxMyArMTMyOCw3NyBAQAogCQlicmVhazsKIAl9CiAKKwljYXNlIFBQQ19QVFJBQ0VfR0VUSFdEQkdJTkZPOiB7CisJCXN0cnVjdCBwcGNfZGVidWdfaW5mbyBkYmdpbmZvOworCisJCWRiZ2luZm8udmVyc2lvbiA9IDE7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworCQlkYmdpbmZvLm51bV9pbnN0cnVjdGlvbl9icHMgPSBDT05GSUdfUFBDX0FEVl9ERUJVR19JQUNTOworCQlkYmdpbmZvLm51bV9kYXRhX2JwcyA9IENPTkZJR19QUENfQURWX0RFQlVHX0RBQ1M7CisJCWRiZ2luZm8ubnVtX2NvbmRpdGlvbl9yZWdzID0gQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUzsKKwkJZGJnaW5mby5kYXRhX2JwX2FsaWdubWVudCA9IDQ7CisJCWRiZ2luZm8uc2l6ZW9mX2NvbmRpdGlvbiA9IDQ7CisJCWRiZ2luZm8uZmVhdHVyZXMgPSBQUENfREVCVUdfRkVBVFVSRV9JTlNOX0JQX1JBTkdFIHwKKwkJCQkgICBQUENfREVCVUdfRkVBVFVSRV9JTlNOX0JQX01BU0s7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfREFDX1JBTkdFCisJCWRiZ2luZm8uZmVhdHVyZXMgfD0KKwkJCQkgICBQUENfREVCVUdfRkVBVFVSRV9EQVRBX0JQX1JBTkdFIHwKKwkJCQkgICBQUENfREVCVUdfRkVBVFVSRV9EQVRBX0JQX01BU0s7CisjZW5kaWYKKyNlbHNlIC8qICFDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCisJCWRiZ2luZm8ubnVtX2luc3RydWN0aW9uX2JwcyA9IDA7CisJCWRiZ2luZm8ubnVtX2RhdGFfYnBzID0gMTsKKwkJZGJnaW5mby5udW1fY29uZGl0aW9uX3JlZ3MgPSAwOworI2lmZGVmIENPTkZJR19QUEM2NAorCQlkYmdpbmZvLmRhdGFfYnBfYWxpZ25tZW50ID0gODsKKyNlbHNlCisJCWRiZ2luZm8uZGF0YV9icF9hbGlnbm1lbnQgPSA0OworI2VuZGlmCisJCWRiZ2luZm8uc2l6ZW9mX2NvbmRpdGlvbiA9IDA7CisJCWRiZ2luZm8uZmVhdHVyZXMgPSAwOworI2VuZGlmIC8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KKworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGRhdGEsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwcGNfZGVidWdfaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldCA9IF9fY29weV90b191c2VyKChzdHJ1Y3QgcHBjX2RlYnVnX2luZm8gX191c2VyICopZGF0YSwKKwkJCQkgICAgICZkYmdpbmZvLCBzaXplb2Yoc3RydWN0IHBwY19kZWJ1Z19pbmZvKSkgPworCQkgICAgICAtRUZBVUxUIDogMDsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBQUENfUFRSQUNFX1NFVEhXREVCVUc6IHsKKwkJc3RydWN0IHBwY19od19icmVha3BvaW50IGJwX2luZm87CisKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGRhdGEsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldCA9IF9fY29weV9mcm9tX3VzZXIoJmJwX2luZm8sCisJCQkJICAgICAgIChzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQgX191c2VyICopZGF0YSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCkpID8KKwkJICAgICAgLUVGQVVMVCA6IDA7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcHBjX3NldF9od2RlYnVnKGNoaWxkLCAmYnBfaW5mbyk7CisJCWJyZWFrOworCX0KKworCWNhc2UgUFBDX1BUUkFDRV9ERUxIV0RFQlVHOiB7CisJCXJldCA9IHBwY19kZWxfaHdkZWJ1ZyhjaGlsZCwgYWRkciwgZGF0YSk7CisJCWJyZWFrOworCX0KKwogCWNhc2UgUFRSQUNFX0dFVF9ERUJVR1JFRzogewogCQlyZXQgPSAtRUlOVkFMOwogCQkvKiBXZSBvbmx5IHN1cHBvcnQgb25lIERBQlIgYW5kIG5vIElBQlJTIGF0IHRoZSBtb21lbnQgKi8KIAkJaWYgKGFkZHIgPiAwKQogCQkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworCQlyZXQgPSBwdXRfdXNlcihjaGlsZC0+dGhyZWFkLmRhYzEsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgX191c2VyICopZGF0YSk7CisjZWxzZQogCQlyZXQgPSBwdXRfdXNlcihjaGlsZC0+dGhyZWFkLmRhYnIsCiAJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgX191c2VyICopZGF0YSk7CisjZW5kaWYKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuYwppbmRleCAwMGI1MDc4Li5hMGFmYjU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmMKQEAgLTE0MCwxNyArMTQwLDE1IEBACiAJCXJldHVybiAwOyAgICAgICAgICAgICAgIC8qIG5vIHNpZ25hbHMgZGVsaXZlcmVkICovCiAJfQogCisjaWZuZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKICAgICAgICAgLyoKIAkgKiBSZWVuYWJsZSB0aGUgREFCUiBiZWZvcmUgZGVsaXZlcmluZyB0aGUgc2lnbmFsIHRvCiAJICogdXNlciBzcGFjZS4gVGhlIERBQlIgd2lsbCBoYXZlIGJlZW4gY2xlYXJlZCBpZiBpdAogCSAqIHRyaWdnZXJlZCBpbnNpZGUgdGhlIGtlcm5lbC4KIAkgKi8KLQlpZiAoY3VycmVudC0+dGhyZWFkLmRhYnIpIHsKKwlpZiAoY3VycmVudC0+dGhyZWFkLmRhYnIpCiAJCXNldF9kYWJyKGN1cnJlbnQtPnRocmVhZC5kYWJyKTsKLSNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKLQkJbXRzcHIoU1BSTl9EQkNSMCwgY3VycmVudC0+dGhyZWFkLmRiY3IwKTsKICNlbmRpZgotCX0KIAogCWlmIChpczMyKSB7CiAgICAgICAgIAlpZiAoa2Euc2Euc2FfZmxhZ3MgJiBTQV9TSUdJTkZPKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggZDY3MDQyOS4uMjY2NjEwMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCkBAIC0xMDc4LDcgKzEwNzgsNyBAQAogCWludCBpOwogCXVuc2lnbmVkIGNoYXIgdG1wOwogCXVuc2lnbmVkIGxvbmcgbmV3X21zciA9IHJlZ3MtPm1zcjsKLSNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAl1bnNpZ25lZCBsb25nIG5ld19kYmNyMCA9IGN1cnJlbnQtPnRocmVhZC5kYmNyMDsKICNlbmRpZgogCkBAIC0xMDg3LDEzICsxMDg3LDE3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJc3dpdGNoIChvcC5kYmdfdHlwZSkgewogCQljYXNlIFNJR19EQkdfU0lOR0xFX1NURVBQSU5HOgotI2lmIGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCQkJaWYgKG9wLmRiZ192YWx1ZSkgewogCQkJCW5ld19tc3IgfD0gTVNSX0RFOwogCQkJCW5ld19kYmNyMCB8PSAoREJDUjBfSURNIHwgREJDUjBfSUMpOwogCQkJfSBlbHNlIHsKLQkJCQluZXdfbXNyICY9IH5NU1JfREU7Ci0JCQkJbmV3X2RiY3IwICY9IH4oREJDUjBfSURNIHwgREJDUjBfSUMpOworCQkJCW5ld19kYmNyMCAmPSB+REJDUjBfSUM7CisJCQkJaWYgKCFEQkNSX0FDVElWRV9FVkVOVFMobmV3X2RiY3IwLAorCQkJCQkJY3VycmVudC0+dGhyZWFkLmRiY3IxKSkgeworCQkJCQluZXdfbXNyICY9IH5NU1JfREU7CisJCQkJCW5ld19kYmNyMCAmPSB+REJDUjBfSURNOworCQkJCX0KIAkJCX0KICNlbHNlCiAJCQlpZiAob3AuZGJnX3ZhbHVlKQpAQCAtMTEwMyw3ICsxMTA3LDcgQEAKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgU0lHX0RCR19CUkFOQ0hfVFJBQ0lORzoKLSNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAkJCXJldHVybiAtRUlOVkFMOwogI2Vsc2UKIAkJCWlmIChvcC5kYmdfdmFsdWUpCkBAIC0xMTI0LDcgKzExMjgsNyBAQAogCSAgIGZhaWx1cmUgaXMgYSBwcm9ibGVtLCBhbnl3YXksIGFuZCBpdCdzIHZlcnkgdW5saWtlbHkgdW5sZXNzCiAJICAgdGhlIHVzZXIgaXMgcmVhbGx5IGRvaW5nIHNvbWV0aGluZyB3cm9uZy4gKi8KIAlyZWdzLT5tc3IgPSBuZXdfbXNyOwotI2lmIGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCWN1cnJlbnQtPnRocmVhZC5kYmNyMCA9IG5ld19kYmNyMDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCmluZGV4IDZjNjA5M2QuLjFiMTZiOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCkBAIC0yNjUsOCArMjY1LDggQEAKIAkJYWNjb3VudF9zeXN0ZW1fdGltZSh0c2ssIDAsIGRlbHRhLCBkZWx0YXNjYWxlZCk7CiAJZWxzZQogCQlhY2NvdW50X2lkbGVfdGltZShkZWx0YSk7Ci0JcGVyX2NwdShjcHV0aW1lX2xhc3RfZGVsdGEsIHNtcF9wcm9jZXNzb3JfaWQoKSkgPSBkZWx0YTsKLQlwZXJfY3B1KGNwdXRpbWVfc2NhbGVkX2xhc3RfZGVsdGEsIHNtcF9wcm9jZXNzb3JfaWQoKSkgPSBkZWx0YXNjYWxlZDsKKwlfX2dldF9jcHVfdmFyKGNwdXRpbWVfbGFzdF9kZWx0YSkgPSBkZWx0YTsKKwlfX2dldF9jcHVfdmFyKGNwdXRpbWVfc2NhbGVkX2xhc3RfZGVsdGEpID0gZGVsdGFzY2FsZWQ7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWNjb3VudF9zeXN0ZW1fdnRpbWUpOwpAQCAtNTc1LDYgKzU3NSw4IEBACiAKIAl0cmFjZV90aW1lcl9pbnRlcnJ1cHRfZW50cnkocmVncyk7CiAKKwlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS50aW1lcl9pcnFzKys7CisKIAkvKiBFbnN1cmUgYSBwb3NpdGl2ZSB2YWx1ZSBpcyB3cml0dGVuIHRvIHRoZSBkZWNyZW1lbnRlciwgb3IgZWxzZQogCSAqIHNvbWUgQ1BVcyB3aWxsIGNvbnRpbnV1ZSB0byB0YWtlIGRlY3JlbWVudGVyIGV4Y2VwdGlvbnMgKi8KIAlzZXRfZGVjKERFQ1JFTUVOVEVSX01BWCk7CkBAIC05MzUsOCArOTM3LDggQEAKIAkqZGVjID0gZGVjcmVtZW50ZXJfY2xvY2tldmVudDsKIAlkZWMtPmNwdW1hc2sgPSBjcHVtYXNrX29mKGNwdSk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiY2xvY2tldmVudDogJXMgbXVsdFsleF0gc2hpZnRbJWRdIGNwdVslZF1cbiIsCi0JICAgICAgIGRlYy0+bmFtZSwgZGVjLT5tdWx0LCBkZWMtPnNoaWZ0LCBjcHUpOworCXByaW50a19vbmNlKEtFUk5fREVCVUcgImNsb2NrZXZlbnQ6ICVzIG11bHRbJXhdIHNoaWZ0WyVkXSBjcHVbJWRdXG4iLAorCQkgICAgZGVjLT5uYW1lLCBkZWMtPm11bHQsIGRlYy0+c2hpZnQsIGNwdSk7CiAKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoZGVjKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwppbmRleCBkMDY5ZmY4Li42OTY2MjZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCkBAIC02MCwxMyArNjAsMTMgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdHRVIpIHx8IGRlZmluZWQoQ09ORklHX0tFWEVDKQotaW50ICgqX19kZWJ1Z2dlcikoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotaW50ICgqX19kZWJ1Z2dlcl9pcGkpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWludCAoKl9fZGVidWdnZXJfYnB0KShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1pbnQgKCpfX2RlYnVnZ2VyX3NzdGVwKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1pbnQgKCpfX2RlYnVnZ2VyX2lhYnJfbWF0Y2gpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWludCAoKl9fZGVidWdnZXJfZGFicl9tYXRjaCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotaW50ICgqX19kZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitpbnQgKCpfX2RlYnVnZ2VyKShzdHJ1Y3QgcHRfcmVncyAqcmVncykgX19yZWFkX21vc3RseTsKK2ludCAoKl9fZGVidWdnZXJfaXBpKShzdHJ1Y3QgcHRfcmVncyAqcmVncykgX19yZWFkX21vc3RseTsKK2ludCAoKl9fZGVidWdnZXJfYnB0KShzdHJ1Y3QgcHRfcmVncyAqcmVncykgX19yZWFkX21vc3RseTsKK2ludCAoKl9fZGVidWdnZXJfc3N0ZXApKHN0cnVjdCBwdF9yZWdzICpyZWdzKSBfX3JlYWRfbW9zdGx5OworaW50ICgqX19kZWJ1Z2dlcl9pYWJyX21hdGNoKShzdHJ1Y3QgcHRfcmVncyAqcmVncykgX19yZWFkX21vc3RseTsKK2ludCAoKl9fZGVidWdnZXJfZGFicl9tYXRjaCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fcmVhZF9tb3N0bHk7CitpbnQgKCpfX2RlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIpKHN0cnVjdCBwdF9yZWdzICpyZWdzKSBfX3JlYWRfbW9zdGx5OwogCiBFWFBPUlRfU1lNQk9MKF9fZGVidWdnZXIpOwogRVhQT1JUX1NZTUJPTChfX2RlYnVnZ2VyX2lwaSk7CkBAIC0xMDIsMTEgKzEwMiwxMSBAQAogaW50IGRpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycikKIHsKIAlzdGF0aWMgc3RydWN0IHsKLQkJc3BpbmxvY2tfdCBsb2NrOworCQlyYXdfc3BpbmxvY2tfdCBsb2NrOwogCQl1MzIgbG9ja19vd25lcjsKIAkJaW50IGxvY2tfb3duZXJfZGVwdGg7CiAJfSBkaWUgPSB7Ci0JCS5sb2NrID0JCQlfX1NQSU5fTE9DS19VTkxPQ0tFRChkaWUubG9jayksCisJCS5sb2NrID0JCQlfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoZGllLmxvY2spLAogCQkubG9ja19vd25lciA9CQktMSwKIAkJLmxvY2tfb3duZXJfZGVwdGggPQkwCiAJfTsKQEAgLTEyMCw3ICsxMjAsNyBAQAogCiAJaWYgKGRpZS5sb2NrX293bmVyICE9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpIHsKIAkJY29uc29sZV92ZXJib3NlKCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkaWUubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRpZS5sb2NrLCBmbGFncyk7CiAJCWRpZS5sb2NrX293bmVyID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCQlkaWUubG9ja19vd25lcl9kZXB0aCA9IDA7CiAJCWJ1c3Rfc3BpbmxvY2tzKDEpOwpAQCAtMTQ2LDYgKzE0NiwxMSBAQAogI2VuZGlmCiAJCXByaW50aygiJXNcbiIsIHBwY19tZC5uYW1lID8gcHBjX21kLm5hbWUgOiAiIik7CiAKKwkJc3lzZnNfcHJpbnRrX2xhc3RfZmlsZSgpOworCQlpZiAobm90aWZ5X2RpZShESUVfT09QUywgc3RyLCByZWdzLCBlcnIsIDI1NSwKKwkJCSAgICAgICBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKKwkJCXJldHVybiAxOworCiAJCXByaW50X21vZHVsZXMoKTsKIAkJc2hvd19yZWdzKHJlZ3MpOwogCX0gZWxzZSB7CkBAIC0xNTUsNyArMTYwLDcgQEAKIAlidXN0X3NwaW5sb2NrcygwKTsKIAlkaWUubG9ja19vd25lciA9IC0xOwogCWFkZF90YWludChUQUlOVF9ESUUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpZS5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpZS5sb2NrLCBmbGFncyk7CiAKIAlpZiAoa2V4ZWNfc2hvdWxkX2NyYXNoKGN1cnJlbnQpIHx8CiAJCWtleGVjX3NyX2FjdGl2YXRlZChzbXBfcHJvY2Vzc29yX2lkKCkpKQpAQCAtMjk0LDcgKzI5OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIC8qIE9uIDR4eCwgdGhlIHJlYXNvbiBmb3IgdGhlIG1hY2hpbmUgY2hlY2sgb3IgcHJvZ3JhbSBleGNlcHRpb24KICAgIGlzIGluIHRoZSBFU1IuICovCiAjZGVmaW5lIGdldF9yZWFzb24ocmVncykJKChyZWdzKS0+ZHNpc3IpCkBAIC00NzgsNiArNDgzLDggQEAKIHsKIAlpbnQgcmVjb3ZlciA9IDA7CiAKKwlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5tY2VfZXhjZXB0aW9ucysrOworCiAJLyogU2VlIGlmIGFueSBtYWNoaW5lIGRlcGVuZGVudCBjYWxscy4gSW4gdGhlb3J5LCB3ZSB3b3VsZCB3YW50CiAJICogdG8gY2FsbCB0aGUgQ1BVIGZpcnN0LCBhbmQgY2FsbCB0aGUgcHBjX21kLiBvbmUgaWYgdGhlIENQVQogCSAqIG9uZSByZXR1cm5zIGEgcG9zaXRpdmUgbnVtYmVyLiBIb3dldmVyIHRoZXJlIGlzIGV4aXN0aW5nIGNvZGUKQEAgLTk2MCw2ICs5NjcsOCBAQAogCiB2b2lkIHBlcmZvcm1hbmNlX21vbml0b3JfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLnBtdV9pcnFzKys7CisKIAlwZXJmX2lycShyZWdzKTsKIH0KIApAQCAtMTAyNCwxMCArMTAzMyw2OSBAQAogfQogI2VuZGlmIC8qIENPTkZJR184eHggKi8KIAotI2lmIGRlZmluZWQoQ09ORklHXzQweCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworc3RhdGljIHZvaWQgaGFuZGxlX2RlYnVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGRlYnVnX3N0YXR1cykKK3sKKwlpbnQgY2hhbmdlZCA9IDA7CisJLyoKKwkgKiBEZXRlcm1pbmUgdGhlIGNhdXNlIG9mIHRoZSBkZWJ1ZyBldmVudCwgY2xlYXIgdGhlCisJICogZXZlbnQgZmxhZ3MgYW5kIHNlbmQgYSB0cmFwIHRvIHRoZSBoYW5kbGVyLiBUb3JlegorCSAqLworCWlmIChkZWJ1Z19zdGF0dXMgJiAoREJTUl9EQUMxUiB8IERCU1JfREFDMVcpKSB7CisJCWRiY3JfZGFjKGN1cnJlbnQpICY9IH4oREJDUl9EQUMxUiB8IERCQ1JfREFDMVcpOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX0RBQ19SQU5HRQorCQljdXJyZW50LT50aHJlYWQuZGJjcjIgJj0gfkRCQ1IyX0RBQzEyTU9ERTsKKyNlbmRpZgorCQlkb19zZW5kX3RyYXAocmVncywgbWZzcHIoU1BSTl9EQUMxKSwgZGVidWdfc3RhdHVzLCBUUkFQX0hXQktQVCwKKwkJCSAgICAgNSk7CisJCWNoYW5nZWQgfD0gMHgwMTsKKwl9ICBlbHNlIGlmIChkZWJ1Z19zdGF0dXMgJiAoREJTUl9EQUMyUiB8IERCU1JfREFDMlcpKSB7CisJCWRiY3JfZGFjKGN1cnJlbnQpICY9IH4oREJDUl9EQUMyUiB8IERCQ1JfREFDMlcpOworCQlkb19zZW5kX3RyYXAocmVncywgbWZzcHIoU1BSTl9EQUMyKSwgZGVidWdfc3RhdHVzLCBUUkFQX0hXQktQVCwKKwkJCSAgICAgNik7CisJCWNoYW5nZWQgfD0gMHgwMTsKKwl9ICBlbHNlIGlmIChkZWJ1Z19zdGF0dXMgJiBEQlNSX0lBQzEpIHsKKwkJY3VycmVudC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQUMxOworCQlkYmNyX2lhY19yYW5nZShjdXJyZW50KSAmPSB+REJDUl9JQUMxMk1PREU7CisJCWRvX3NlbmRfdHJhcChyZWdzLCBtZnNwcihTUFJOX0lBQzEpLCBkZWJ1Z19zdGF0dXMsIFRSQVBfSFdCS1BULAorCQkJICAgICAxKTsKKwkJY2hhbmdlZCB8PSAweDAxOworCX0gIGVsc2UgaWYgKGRlYnVnX3N0YXR1cyAmIERCU1JfSUFDMikgeworCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lBQzI7CisJCWRvX3NlbmRfdHJhcChyZWdzLCBtZnNwcihTUFJOX0lBQzIpLCBkZWJ1Z19zdGF0dXMsIFRSQVBfSFdCS1BULAorCQkJICAgICAyKTsKKwkJY2hhbmdlZCB8PSAweDAxOworCX0gIGVsc2UgaWYgKGRlYnVnX3N0YXR1cyAmIERCU1JfSUFDMykgeworCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lBQzM7CisJCWRiY3JfaWFjX3JhbmdlKGN1cnJlbnQpICY9IH5EQkNSX0lBQzM0TU9ERTsKKwkJZG9fc2VuZF90cmFwKHJlZ3MsIG1mc3ByKFNQUk5fSUFDMyksIGRlYnVnX3N0YXR1cywgVFJBUF9IV0JLUFQsCisJCQkgICAgIDMpOworCQljaGFuZ2VkIHw9IDB4MDE7CisJfSAgZWxzZSBpZiAoZGVidWdfc3RhdHVzICYgREJTUl9JQUM0KSB7CisJCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUFDNDsKKwkJZG9fc2VuZF90cmFwKHJlZ3MsIG1mc3ByKFNQUk5fSUFDNCksIGRlYnVnX3N0YXR1cywgVFJBUF9IV0JLUFQsCisJCQkgICAgIDQpOworCQljaGFuZ2VkIHw9IDB4MDE7CisJfQorCS8qCisJICogQXQgdGhlIHBvaW50IHRoaXMgcm91dGluZSB3YXMgY2FsbGVkLCB0aGUgTVNSKERFKSB3YXMgdHVybmVkIG9mZi4KKwkgKiBDaGVjayBhbGwgb3RoZXIgZGVidWcgZmxhZ3MgYW5kIHNlZSBpZiB0aGF0IGJpdCBuZWVkcyB0byBiZSB0dXJuZWQKKwkgKiBiYWNrIG9uIG9yIG5vdC4KKwkgKi8KKwlpZiAoREJDUl9BQ1RJVkVfRVZFTlRTKGN1cnJlbnQtPnRocmVhZC5kYmNyMCwgY3VycmVudC0+dGhyZWFkLmRiY3IxKSkKKwkJcmVncy0+bXNyIHw9IE1TUl9ERTsKKwllbHNlCisJCS8qIE1ha2Ugc3VyZSB0aGUgSURNIGZsYWcgaXMgb2ZmICovCisJCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSURNOworCisJaWYgKGNoYW5nZWQgJiAweDAxKQorCQltdHNwcihTUFJOX0RCQ1IwLCBjdXJyZW50LT50aHJlYWQuZGJjcjApOworfQogCiB2b2lkIF9fa3Byb2JlcyBEZWJ1Z0V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBkZWJ1Z19zdGF0dXMpCiB7CisJY3VycmVudC0+dGhyZWFkLmRic3IgPSBkZWJ1Z19zdGF0dXM7CisKIAkvKiBIYWNrIGFsZXJ0OiBPbiBCb29rRSwgQnJhbmNoIFRha2VuIHN0b3BzIG9uIHRoZSBicmFuY2ggaXRzZWxmLCB3aGlsZQogCSAqIG9uIHNlcnZlciwgaXQgc3RvcHMgb24gdGhlIHRhcmdldCBvZiB0aGUgYnJhbmNoLiBJbiBvcmRlciB0byBzaW11bGF0ZQogCSAqIHRoZSBzZXJ2ZXIgYmVoYXZpb3VyLCB3ZSB0aHVzIHJlc3RhcnQgcmlnaHQgYXdheSB3aXRoIGEgc2luZ2xlIHN0ZXAKQEAgLTEwNzEsMjkgKzExMzksMjMgQEAKIAkJaWYgKGRlYnVnZ2VyX3NzdGVwKHJlZ3MpKQogCQkJcmV0dXJuOwogCi0JCWlmICh1c2VyX21vZGUocmVncykpCi0JCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfihEQkNSMF9JQyk7CisJCWlmICh1c2VyX21vZGUocmVncykpIHsKKwkJCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUM7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworCQkJaWYgKERCQ1JfQUNUSVZFX0VWRU5UUyhjdXJyZW50LT50aHJlYWQuZGJjcjAsCisJCQkJCSAgICAgICBjdXJyZW50LT50aHJlYWQuZGJjcjEpKQorCQkJCXJlZ3MtPm1zciB8PSBNU1JfREU7CisJCQllbHNlCisJCQkJLyogTWFrZSBzdXJlIHRoZSBJRE0gYml0IGlzIG9mZiAqLworCQkJCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSURNOworI2VuZGlmCisJCX0KIAogCQlfZXhjZXB0aW9uKFNJR1RSQVAsIHJlZ3MsIFRSQVBfVFJBQ0UsIHJlZ3MtPm5pcCk7Ci0JfSBlbHNlIGlmIChkZWJ1Z19zdGF0dXMgJiAoREJTUl9EQUMxUiB8IERCU1JfREFDMVcpKSB7Ci0JCXJlZ3MtPm1zciAmPSB+TVNSX0RFOwotCi0JCWlmICh1c2VyX21vZGUocmVncykpIHsKLQkJCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+KERCU1JfREFDMVIgfCBEQlNSX0RBQzFXIHwKLQkJCQkJCQkJREJDUjBfSURNKTsKLQkJfSBlbHNlIHsKLQkJCS8qIERpc2FibGUgREFDIGludGVydXB0cyAqLwotCQkJbXRzcHIoU1BSTl9EQkNSMCwgbWZzcHIoU1BSTl9EQkNSMCkgJiB+KERCU1JfREFDMVIgfAotCQkJCQkJREJTUl9EQUMxVyB8IERCQ1IwX0lETSkpOwotCi0JCQkvKiBDbGVhciB0aGUgREFDIGV2ZW50ICovCi0JCQltdHNwcihTUFJOX0RCU1IsIChEQlNSX0RBQzFSIHwgREJTUl9EQUMxVykpOwotCQl9Ci0JCS8qIFNldHVwIGFuZCBzZW5kIHRoZSB0cmFwIHRvIHRoZSBoYW5kbGVyICovCi0JCWRvX2RhYnIocmVncywgbWZzcHIoU1BSTl9EQUMxKSwgZGVidWdfc3RhdHVzKTsKLQl9CisJfSBlbHNlCisJCWhhbmRsZV9kZWJ1ZyhyZWdzLCBkZWJ1Z19zdGF0dXMpOwogfQotI2VuZGlmIC8qIENPTkZJR180eHggfHwgQ09ORklHX0JPT0tFICovCisjZW5kaWYgLyogQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLwogCiAjaWYgIWRlZmluZWQoQ09ORklHX1RBVV9JTlQpCiB2b2lkIFRBVUV4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUyBiL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUwppbmRleCBlNjhiZWFjLi40ZDRlZWI5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9jb3B5cGFnZV82NC5TCkBAIC00Myw2MiArNDMsNjIgQEAKIAlsZAlyNywxNihyNCkKIAlsZHUJcjgsMjQocjQpCiAxOglzdGQJcjUsOChyMykKLQlsZAlyOSw4KHI0KQogCXN0ZAlyNiwxNihyMykKKwlsZAlyOSw4KHI0KQogCWxkCXIxMCwxNihyNCkKIAlzdGQJcjcsMjQocjMpCi0JbGQJcjExLDI0KHI0KQogCXN0ZAlyOCwzMihyMykKKwlsZAlyMTEsMjQocjQpCiAJbGQJcjEyLDMyKHI0KQogCXN0ZAlyOSw0MChyMykKLQlsZAlyNSw0MChyNCkKIAlzdGQJcjEwLDQ4KHIzKQorCWxkCXI1LDQwKHI0KQogCWxkCXI2LDQ4KHI0KQogCXN0ZAlyMTEsNTYocjMpCi0JbGQJcjcsNTYocjQpCiAJc3RkCXIxMiw2NChyMykKKwlsZAlyNyw1NihyNCkKIAlsZAlyOCw2NChyNCkKIAlzdGQJcjUsNzIocjMpCi0JbGQJcjksNzIocjQpCiAJc3RkCXI2LDgwKHIzKQorCWxkCXI5LDcyKHI0KQogCWxkCXIxMCw4MChyNCkKIAlzdGQJcjcsODgocjMpCi0JbGQJcjExLDg4KHI0KQogCXN0ZAlyOCw5NihyMykKKwlsZAlyMTEsODgocjQpCiAJbGQJcjEyLDk2KHI0KQogCXN0ZAlyOSwxMDQocjMpCi0JbGQJcjUsMTA0KHI0KQogCXN0ZAlyMTAsMTEyKHIzKQorCWxkCXI1LDEwNChyNCkKIAlsZAlyNiwxMTIocjQpCiAJc3RkCXIxMSwxMjAocjMpCi0JbGQJcjcsMTIwKHI0KQogCXN0ZHUJcjEyLDEyOChyMykKKwlsZAlyNywxMjAocjQpCiAJbGR1CXI4LDEyOChyNCkKIAliZG56CTFiCiAKIAlzdGQJcjUsOChyMykKLQlsZAlyOSw4KHI0KQogCXN0ZAlyNiwxNihyMykKKwlsZAlyOSw4KHI0KQogCWxkCXIxMCwxNihyNCkKIAlzdGQJcjcsMjQocjMpCi0JbGQJcjExLDI0KHI0KQogCXN0ZAlyOCwzMihyMykKKwlsZAlyMTEsMjQocjQpCiAJbGQJcjEyLDMyKHI0KQogCXN0ZAlyOSw0MChyMykKLQlsZAlyNSw0MChyNCkKIAlzdGQJcjEwLDQ4KHIzKQorCWxkCXI1LDQwKHI0KQogCWxkCXI2LDQ4KHI0KQogCXN0ZAlyMTEsNTYocjMpCi0JbGQJcjcsNTYocjQpCiAJc3RkCXIxMiw2NChyMykKKwlsZAlyNyw1NihyNCkKIAlsZAlyOCw2NChyNCkKIAlzdGQJcjUsNzIocjMpCi0JbGQJcjksNzIocjQpCiAJc3RkCXI2LDgwKHIzKQorCWxkCXI5LDcyKHI0KQogCWxkCXIxMCw4MChyNCkKIAlzdGQJcjcsODgocjMpCi0JbGQJcjExLDg4KHI0KQogCXN0ZAlyOCw5NihyMykKKwlsZAlyMTEsODgocjQpCiAJbGQJcjEyLDk2KHI0KQogCXN0ZAlyOSwxMDQocjMpCiAJc3RkCXIxMCwxMTIocjMpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2NvcHl1c2VyXzY0LlMgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHl1c2VyXzY0LlMKaW5kZXggNjkzYjE0YS4uNTc4YjYyNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5dXNlcl82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvY29weXVzZXJfNjQuUwpAQCAtNDQsMzcgKzQ0LDU1IEBACiAJYW5kaS4JcjAscjQsNwogCWJuZQkuTHNyY191bmFsaWduZWQKIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX1VOQUxJR05FRF9MRF9TVEQpCi0Jc3JkaQlyNyxyNSw0Ci0yMDoJbGQJcjksMChyNCkKLQlhZGRpCXI0LHI0LC04Ci0JbXRjdHIJcjcKLQlhbmRpLglyNSxyNSw3Ci0JYmYJY3I3KjQrMCwyMmYKLQlhZGRpCXIzLHIzLDgKLQlhZGRpCXI0LHI0LDgKLQltcglyOCxyOQotCWJsdAljcjEsNzJmCi0yMToJbGQJcjksOChyNCkKLTcwOglzdGQJcjgsOChyMykKLTIyOglsZHUJcjgsMTYocjQpCi03MToJc3RkdQlyOSwxNihyMykKLQliZG56CTIxYgotNzI6CXN0ZAlyOCw4KHIzKQotCWJlcSsJM2YKKwlibHQJY3IxLC5MZG9fdGFpbAkJLyogaWYgPCAxNiBieXRlcyB0byBjb3B5ICovCisJc3JkaQlyMCxyNSw1CisJY21wZGkJY3IxLHIwLDAKKzIwOglsZAlyNywwKHI0KQorMjIwOglsZAlyNiw4KHI0KQorCWFkZGkJcjQscjQsMTYKKwltdGN0cglyMAorCWFuZGkuCXIwLHI1LDB4MTAKKwliZXEJMjJmCiAJYWRkaQlyMyxyMywxNgorCWFkZGkJcjQscjQsLTE2CisJbXIJcjkscjcKKwltcglyOCxyNgorCWJlcQljcjEsNzJmCisyMToJbGQJcjcsMTYocjQpCisyMjE6CWxkCXI2LDI0KHI0KQorCWFkZGkJcjQscjQsMzIKKzcwOglzdGQJcjksMChyMykKKzI3MDoJc3RkCXI4LDgocjMpCisyMjoJbGQJcjksMChyNCkKKzIyMjoJbGQJcjgsOChyNCkKKzcxOglzdGQJcjcsMTYocjMpCisyNzE6CXN0ZAlyNiwyNChyMykKKwlhZGRpCXIzLHIzLDMyCisJYmRuegkyMWIKKzcyOglzdGQJcjksMChyMykKKzI3MjoJc3RkCXI4LDgocjMpCisJYW5kaS4JcjUscjUsMHhmCisJYmVxKwkzZgorCWFkZGkJcjQscjQsMTYKIC5MZG9fdGFpbDoKLQliZgljcjcqNCsxLDFmCi0yMzoJbHd6CXI5LDgocjQpCisJYWRkaQlyMyxyMywxNgorCWJmCWNyNyo0KzAsMjQ2ZgorMjQ0OglsZAlyOSwwKHI0KQorCWFkZGkJcjQscjQsOAorMjQ1OglzdGQJcjksMChyMykKKwlhZGRpCXIzLHIzLDgKKzI0NjoJYmYJY3I3KjQrMSwxZgorMjM6CWx3eglyOSwwKHI0KQogCWFkZGkJcjQscjQsNAogNzM6CXN0dwlyOSwwKHIzKQogCWFkZGkJcjMscjMsNAogMToJYmYJY3I3KjQrMiwyZgotNDQ6CWxoeglyOSw4KHI0KQorNDQ6CWxoeglyOSwwKHI0KQogCWFkZGkJcjQscjQsMgogNzQ6CXN0aAlyOSwwKHIzKQogCWFkZGkJcjMscjMsMgogMjoJYmYJY3I3KjQrMywzZgotNDU6CWxieglyOSw4KHI0KQorNDU6CWxieglyOSwwKHI0KQogNzU6CXN0YglyOSwwKHIzKQogMzoJbGkJcjMsMAogCWJscgpAQCAtMjIwLDcgKzIzOCw5IEBACiAxMzE6CiAJYWRkaQlyMyxyMyw4CiAxMjA6CiszMjA6CiAxMjI6CiszMjI6CiAxMjQ6CiAxMjU6CiAxMjY6CkBAIC0yMjksOSArMjQ5LDExIEBACiAxMjk6CiAxMzM6CiAJYWRkaQlyMyxyMyw4Ci0xMjE6CiAxMzI6CiAJYWRkaQlyMyxyMyw4CisxMjE6CiszMjE6CiszNDQ6CiAxMzQ6CiAxMzU6CiAxMzg6CkBAIC0zMDMsMTggKzMyNSwyMiBAQAogMTgzOgogCWFkZAlyMyxyMyxyNwogCWIJMWYKKzM3MToKIDE4MDoKIAlhZGRpCXIzLHIzLDgKIDE3MToKIDE3NzoKIAlhZGRpCXIzLHIzLDgKLTE3MDoKLTE3MjoKKzM3MDoKKzM3MjoKIDE3NjoKIDE3ODoKIAlhZGRpCXIzLHIzLDQKIDE4NToKIAlhZGRpCXIzLHIzLDQKKzE3MDoKKzE3MjoKKzM0NToKIDE3MzoKIDE3NDoKIDE3NToKQEAgLTM0MSwxMSArMzY3LDE5IEBACiAJLnNlY3Rpb24gX19leF90YWJsZSwiYSIKIAkuYWxpZ24JMwogCS5sbG9uZwkyMGIsMTIwYgorCS5sbG9uZwkyMjBiLDMyMGIKIAkubGxvbmcJMjFiLDEyMWIKKwkubGxvbmcJMjIxYiwzMjFiCiAJLmxsb25nCTcwYiwxNzBiCisJLmxsb25nCTI3MGIsMzcwYgogCS5sbG9uZwkyMmIsMTIyYgorCS5sbG9uZwkyMjJiLDMyMmIKIAkubGxvbmcJNzFiLDE3MWIKKwkubGxvbmcJMjcxYiwzNzFiCiAJLmxsb25nCTcyYiwxNzJiCisJLmxsb25nCTI3MmIsMzcyYgorCS5sbG9uZwkyNDRiLDM0NGIKKwkubGxvbmcJMjQ1YiwzNDViCiAJLmxsb25nCTIzYiwxMjNiCiAJLmxsb25nCTczYiwxNzNiCiAJLmxsb25nCTQ0YiwxNDRiCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLmMgYi9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLmMKaW5kZXggN2U4ODY1Yi4uZTY0MDE3NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvZmVhdHVyZS1maXh1cHMuYwpAQCAtMTEyLDcgKzExMiw4IEBACiAKIHZvaWQgZG9fbHdzeW5jX2ZpeHVwcyh1bnNpZ25lZCBsb25nIHZhbHVlLCB2b2lkICpmaXh1cF9zdGFydCwgdm9pZCAqZml4dXBfZW5kKQogewotCXVuc2lnbmVkIGludCAqc3RhcnQsICplbmQsICpkZXN0OworCWxvbmcgKnN0YXJ0LCAqZW5kOworCXVuc2lnbmVkIGludCAqZGVzdDsKIAogCWlmICghKHZhbHVlICYgQ1BVX0ZUUl9MV1NZTkMpKQogCQlyZXR1cm4gOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tLzQweF9tbXUuYyBiL2FyY2gvcG93ZXJwYy9tbS80MHhfbW11LmMKaW5kZXggMDhkZmE4ZS4uNjVhYmZjZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tLzQweF9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vNDB4X21tdS5jCkBAIC04NCw4ICs4NCw4IEBACiAJICogdmVjdG9ycyBhbmQgdGhlIGtlcm5lbCBsaXZlIGluIHJlYWwtbW9kZS4KIAkgKi8KIAotICAgICAgICBtdHNwcihTUFJOX0RDQ1IsIDB4RjAwMDAwMDApOwkvKiA1MTIgTUIgb2YgZGF0YSBzcGFjZSBhdCAweDAuICovCi0gICAgICAgIG10c3ByKFNQUk5fSUNDUiwgMHhGMDAwMDAwMCk7CS8qIDUxMiBNQiBvZiBpbnN0ci4gc3BhY2UgYXQgMHgwLiAqLworICAgICAgICBtdHNwcihTUFJOX0RDQ1IsIDB4RkZGRjAwMDApOwkvKiAyR0J5dGUgb2YgZGF0YSBzcGFjZSBhdCAweDAuICovCisgICAgICAgIG10c3ByKFNQUk5fSUNDUiwgMHhGRkZGMDAwMCk7CS8qIDJHQnl0ZSBvZiBpbnN0ci4gc3BhY2UgYXQgMHgwLiAqLwogfQogCiAjZGVmaW5lIExBUkdFX1BBR0VfU0laRV8xNk0JKDE8PDI0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9uYXRpdmVfNjQuYwppbmRleCAwNTZkMjNhLi43ODRhNDAwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9uYXRpdmVfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9uYXRpdmVfNjQuYwpAQCAtMzcsNyArMzcsNyBAQAogCiAjZGVmaW5lIEhQVEVfTE9DS19CSVQgMwogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5hdGl2ZV90bGJpZV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG5hdGl2ZV90bGJpZV9sb2NrKTsKIAogc3RhdGljIGlubGluZSB2b2lkIF9fdGxiaWUodW5zaWduZWQgbG9uZyB2YSwgaW50IHBzaXplLCBpbnQgc3NpemUpCiB7CkBAIC0xMDQsNyArMTA0LDcgQEAKIAlpZiAodXNlX2xvY2FsKQogCQl1c2VfbG9jYWwgPSBtbXVfcHNpemVfZGVmc1twc2l6ZV0udGxiaWVsOwogCWlmIChsb2NrX3RsYmllICYmICF1c2VfbG9jYWwpCi0JCXNwaW5fbG9jaygmbmF0aXZlX3RsYmllX2xvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CiAJYXNtIHZvbGF0aWxlKCJwdGVzeW5jIjogOiA6Im1lbW9yeSIpOwogCWlmICh1c2VfbG9jYWwpIHsKIAkJX190bGJpZWwodmEsIHBzaXplLCBzc2l6ZSk7CkBAIC0xMTQsNyArMTE0LDcgQEAKIAkJYXNtIHZvbGF0aWxlKCJlaWVpbzsgdGxic3luYzsgcHRlc3luYyI6IDogOiJtZW1vcnkiKTsKIAl9CiAJaWYgKGxvY2tfdGxiaWUgJiYgIXVzZV9sb2NhbCkKLQkJc3Bpbl91bmxvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfbG9ja19ocHRlKHN0cnVjdCBoYXNoX3B0ZSAqaHB0ZXApCkBAIC0xMjIsNyArMTIyLDcgQEAKIAl1bnNpZ25lZCBsb25nICp3b3JkID0gJmhwdGVwLT52OwogCiAJd2hpbGUgKDEpIHsKLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhQVEVfTE9DS19CSVQsIHdvcmQpKQorCQlpZiAoIXRlc3RfYW5kX3NldF9iaXRfbG9jayhIUFRFX0xPQ0tfQklULCB3b3JkKSkKIAkJCWJyZWFrOwogCQl3aGlsZSh0ZXN0X2JpdChIUFRFX0xPQ0tfQklULCB3b3JkKSkKIAkJCWNwdV9yZWxheCgpOwpAQCAtMTMzLDggKzEzMyw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyAqd29yZCA9ICZocHRlcC0+djsKIAotCWFzbSB2b2xhdGlsZSgibHdzeW5jIjo6OiJtZW1vcnkiKTsKLQljbGVhcl9iaXQoSFBURV9MT0NLX0JJVCwgd29yZCk7CisJY2xlYXJfYml0X3VubG9jayhIUFRFX0xPQ0tfQklULCB3b3JkKTsKIH0KIAogc3RhdGljIGxvbmcgbmF0aXZlX2hwdGVfaW5zZXJ0KHVuc2lnbmVkIGxvbmcgaHB0ZV9ncm91cCwgdW5zaWduZWQgbG9uZyB2YSwKQEAgLTQzNCw3ICs0MzMsNyBAQAogCS8qIHdlIHRha2UgdGhlIHRsYmllIGxvY2sgYW5kIGhvbGQgaXQuICBTb21lIGhhcmR3YXJlIHdpbGwKIAkgKiBkZWFkbG9jayBpZiB3ZSB0cnkgdG8gdGxiaWUgZnJvbSB0d28gcHJvY2Vzc29ycyBhdCBvbmNlLgogCSAqLwotCXNwaW5fbG9jaygmbmF0aXZlX3RsYmllX2xvY2spOworCXJhd19zcGluX2xvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKIAogCXNsb3RzID0gcHRlZ19jb3VudCAqIEhQVEVTX1BFUl9HUk9VUDsKIApAQCAtNDU4LDcgKzQ1Nyw3IEBACiAJfQogCiAJYXNtIHZvbGF0aWxlKCJlaWVpbzsgdGxic3luYzsgcHRlc3luYyI6OjoibWVtb3J5Iik7Ci0Jc3Bpbl91bmxvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTUyMSw3ICs1MjAsNyBAQAogCQlpbnQgbG9ja190bGJpZSA9ICFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRSk7CiAKIAkJaWYgKGxvY2tfdGxiaWUpCi0JCQlzcGluX2xvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKKwkJCXJhd19zcGluX2xvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKIAogCQlhc20gdm9sYXRpbGUoInB0ZXN5bmMiOjo6Im1lbW9yeSIpOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKQEAgLTUzNiw3ICs1MzUsNyBAQAogCQlhc20gdm9sYXRpbGUoImVpZWlvOyB0bGJzeW5jOyBwdGVzeW5jIjo6OiJtZW1vcnkiKTsKIAogCQlpZiAobG9ja190bGJpZSkKLQkJCXNwaW5fdW5sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CisJCQlyYXdfc3Bpbl91bmxvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKIAl9CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKaW5kZXggYjliMTUyNS4uMzExMjI0YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21lbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwpAQCAtNDk0LDEzICs0OTQsMTMgQEAKICAqIFRoaXMgbXVzdCBhbHdheXMgYmUgY2FsbGVkIHdpdGggdGhlIHB0ZSBsb2NrIGhlbGQuCiAgKi8KIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAotCQkgICAgICBwdGVfdCBwdGUpCisJCSAgICAgIHB0ZV90ICpwdGVwKQogewogI2lmZGVmIENPTkZJR19QUENfU1REX01NVQogCXVuc2lnbmVkIGxvbmcgYWNjZXNzID0gMCwgdHJhcDsKIAogCS8qIFdlIG9ubHkgd2FudCBIUFRFcyBmb3IgbGludXggUFRFcyB0aGF0IGhhdmUgX1BBR0VfQUNDRVNTRUQgc2V0ICovCi0JaWYgKCFwdGVfeW91bmcocHRlKSB8fCBhZGRyZXNzID49IFRBU0tfU0laRSkKKwlpZiAoIXB0ZV95b3VuZygqcHRlcCkgfHwgYWRkcmVzcyA+PSBUQVNLX1NJWkUpCiAJCXJldHVybjsKIAogCS8qIFdlIHRyeSB0byBmaWd1cmUgb3V0IGlmIHdlIGFyZSBjb21pbmcgZnJvbSBhbiBpbnN0cnVjdGlvbgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X2hhc2g2NC5jIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X2hhc2g2NC5jCmluZGV4IGI5MTBkMzcuLjUxNjIyZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9oYXNoNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfaGFzaDY0LmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAogc3RhdGljIERFRklORV9TUElOTE9DSyhtbXVfY29udGV4dF9sb2NrKTsKLXN0YXRpYyBERUZJTkVfSURSKG1tdV9jb250ZXh0X2lkcik7CitzdGF0aWMgREVGSU5FX0lEQShtbXVfY29udGV4dF9pZGEpOwogCiAvKgogICogVGhlIHByb3RvLVZTSUQgc3BhY2UgaGFzIDJeMzUgLSAxIHNlZ21lbnRzIGF2YWlsYWJsZSBmb3IgdXNlciBtYXBwaW5ncy4KQEAgLTM5LDExICszOSwxMSBAQAogCWludCBlcnI7CiAKIGFnYWluOgotCWlmICghaWRyX3ByZV9nZXQoJm1tdV9jb250ZXh0X2lkciwgR0ZQX0tFUk5FTCkpCisJaWYgKCFpZGFfcHJlX2dldCgmbW11X2NvbnRleHRfaWRhLCBHRlBfS0VSTkVMKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcGluX2xvY2soJm1tdV9jb250ZXh0X2xvY2spOwotCWVyciA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZtbXVfY29udGV4dF9pZHIsIE5VTEwsIDEsICZpbmRleCk7CisJZXJyID0gaWRhX2dldF9uZXdfYWJvdmUoJm1tdV9jb250ZXh0X2lkYSwgMSwgJmluZGV4KTsKIAlzcGluX3VubG9jaygmbW11X2NvbnRleHRfbG9jayk7CiAKIAlpZiAoZXJyID09IC1FQUdBSU4pCkBAIC01Myw3ICs1Myw3IEBACiAKIAlpZiAoaW5kZXggPiBNQVhfQ09OVEVYVCkgewogCQlzcGluX2xvY2soJm1tdV9jb250ZXh0X2xvY2spOwotCQlpZHJfcmVtb3ZlKCZtbXVfY29udGV4dF9pZHIsIGluZGV4KTsKKwkJaWRhX3JlbW92ZSgmbW11X2NvbnRleHRfaWRhLCBpbmRleCk7CiAJCXNwaW5fdW5sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtODUsNyArODUsNyBAQAogdm9pZCBfX2Rlc3Ryb3lfY29udGV4dChpbnQgY29udGV4dF9pZCkKIHsKIAlzcGluX2xvY2soJm1tdV9jb250ZXh0X2xvY2spOwotCWlkcl9yZW1vdmUoJm1tdV9jb250ZXh0X2lkciwgY29udGV4dF9pZCk7CisJaWRhX3JlbW92ZSgmbW11X2NvbnRleHRfaWRhLCBjb250ZXh0X2lkKTsKIAlzcGluX3VubG9jaygmbW11X2NvbnRleHRfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2Rlc3Ryb3lfY29udGV4dCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKaW5kZXggMTA0NGE2My4uZGJjNjkyMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYwpAQCAtNTYsNyArNTYsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgKmNvbnRleHRfbWFwOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgKnN0YWxlX21hcFtOUl9DUFVTXTsKIHN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICoqY29udGV4dF9tbTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY29udGV4dF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGNvbnRleHRfbG9jayk7CiAKICNkZWZpbmUgQ1RYX01BUF9TSVpFCVwKIAkoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogKGxhc3RfY29udGV4dCAvIEJJVFNfUEVSX0xPTkcgKyAxKSkKQEAgLTEyMSw5ICsxMjEsOSBAQAogCS8qIFRoaXMgd2lsbCBoYXBwZW4gaWYgeW91IGhhdmUgbW9yZSBDUFVzIHRoYW4gYXZhaWxhYmxlIGNvbnRleHRzLAogCSAqIGFsbCB3ZSBjYW4gZG8gaGVyZSBpcyB3YWl0IGEgYml0IGFuZCB0cnkgYWdhaW4KIAkgKi8KLQlzcGluX3VubG9jaygmY29udGV4dF9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmNvbnRleHRfbG9jayk7CiAJY3B1X3JlbGF4KCk7Ci0Jc3Bpbl9sb2NrKCZjb250ZXh0X2xvY2spOworCXJhd19zcGluX2xvY2soJmNvbnRleHRfbG9jayk7CiAKIAkvKiBUaGlzIHdpbGwgY2F1c2UgdGhlIGNhbGxlciB0byB0cnkgYWdhaW4gKi8KIAlyZXR1cm4gTU1VX05PX0NPTlRFWFQ7CkBAIC0xOTQsNyArMTk0LDcgQEAKIAl1bnNpZ25lZCBsb25nICptYXA7CiAKIAkvKiBObyBsb2NrbGVzcyBmYXN0IHBhdGggLi4geWV0ICovCi0Jc3Bpbl9sb2NrKCZjb250ZXh0X2xvY2spOworCXJhd19zcGluX2xvY2soJmNvbnRleHRfbG9jayk7CiAKIAlwcl9oYXJkKCJbJWRdIGFjdGl2YXRpbmcgY29udGV4dCBmb3IgbW0gQCVwLCBhY3RpdmU9JWQsIGlkPSVkIiwKIAkJY3B1LCBuZXh0LCBuZXh0LT5jb250ZXh0LmFjdGl2ZSwgbmV4dC0+Y29udGV4dC5pZCk7CkBAIC0yNzgsNyArMjc4LDcgQEAKIAkvKiBGbGljayB0aGUgTU1VIGFuZCByZWxlYXNlIGxvY2sgKi8KIAlwcl9oYXJkY29udCgiIC0+ICVkXG4iLCBpZCk7CiAJc2V0X2NvbnRleHQoaWQsIG5leHQtPnBnZCk7Ci0Jc3Bpbl91bmxvY2soJmNvbnRleHRfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZjb250ZXh0X2xvY2spOwogfQogCiAvKgpAQCAtMzA3LDcgKzMwNyw3IEBACiAKIAlXQVJOX09OKG1tLT5jb250ZXh0LmFjdGl2ZSAhPSAwKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjb250ZXh0X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmNvbnRleHRfbG9jaywgZmxhZ3MpOwogCWlkID0gbW0tPmNvbnRleHQuaWQ7CiAJaWYgKGlkICE9IE1NVV9OT19DT05URVhUKSB7CiAJCV9fY2xlYXJfYml0KGlkLCBjb250ZXh0X21hcCk7CkBAIC0zMTgsNyArMzE4LDcgQEAKIAkJY29udGV4dF9tbVtpZF0gPSBOVUxMOwogCQlucl9mcmVlX2NvbnRleHRzKys7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbnRleHRfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb250ZXh0X2xvY2ssIGZsYWdzKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2hhc2g2NC5jCmluZGV4IDI4MmQ5MzAuLjFlYzA2NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoNjQuYwpAQCAtNjMsMTUgKzYzLDIxIEBACiAJaWYgKGh1Z2UpIHsKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAJCXBzaXplID0gZ2V0X3NsaWNlX3BzaXplKG1tLCBhZGRyKTsKKwkJLyogTWFzayB0aGUgYWRkcmVzcyBmb3IgdGhlIGNvcnJlY3QgcGFnZSBzaXplICovCisJCWFkZHIgJj0gfigoMVVMIDw8IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdCkgLSAxKTsKICNlbHNlCiAJCUJVRygpOwogCQlwc2l6ZSA9IHB0ZV9wYWdlc2l6ZV9pbmRleChtbSwgYWRkciwgcHRlKTsgLyogc2h1dHVwIGdjYyAqLwogI2VuZGlmCi0JfSBlbHNlCisJfSBlbHNlIHsKIAkJcHNpemUgPSBwdGVfcGFnZXNpemVfaW5kZXgobW0sIGFkZHIsIHB0ZSk7CisJCS8qIE1hc2sgdGhlIGFkZHJlc3MgZm9yIHRoZSBzdGFuZGFyZCBwYWdlIHNpemUuICBJZiB3ZQorCQkgKiBoYXZlIGEgNjRrIHBhZ2Uga2VybmVsLCBidXQgdGhlIGhhcmR3YXJlIGRvZXMgbm90CisJCSAqIHN1cHBvcnQgNjRrIHBhZ2VzLCB0aGlzIG1pZ2h0IGJlIGRpZmZlcmVudCBmcm9tIHRoZQorCQkgKiBoYXJkd2FyZSBwYWdlIHNpemUgZW5jb2RlZCBpbiB0aGUgc2xpY2UgdGFibGUuICovCisJCWFkZHIgJj0gUEFHRV9NQVNLOworCX0KIAotCS8qIE1hc2sgdGhlIGFkZHJlc3MgZm9yIHRoZSBjb3JyZWN0IHBhZ2Ugc2l6ZSAqLwotCWFkZHIgJj0gfigoMVVMIDw8IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdCkgLSAxKTsKIAogCS8qIEJ1aWxkIGZ1bGwgdmFkZHIgKi8KIAlpZiAoIWlzX2tlcm5lbF9hZGRyKGFkZHIpKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCmluZGV4IGYyODgyNzkuLjhiMDRjNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBMb3cgbGV2ZSBUTEIgbWlzcyBoYW5kbGVycyBmb3IgQm9vazNFCisgKiAgTG93IGxldmVsIFRMQiBtaXNzIGhhbmRsZXJzIGZvciBCb29rM0UKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkKICAqICAgICAgQmVuLiBIZXJyZW5zY2htaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpLCBJQk0gQ29ycC4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaC5jCmluZGV4IDJmYmM2ODAuLmU4MWQ1ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2guYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAgKi8KICNpZmRlZiBDT05GSUdfU01QCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGxiaXZheF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHRsYml2YXhfbG9jayk7CiAKIHN0YXRpYyBpbnQgbW1faXNfY29yZV9sb2NhbChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKQEAgLTIzMiwxMCArMjMyLDEwIEBACiAJCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9VU0VfVExCSVZBWF9CQ0FTVCkpIHsKIAkJCWludCBsb2NrID0gbW11X2hhc19mZWF0dXJlKE1NVV9GVFJfTE9DS19CQ0FTVF9JTlZBTCk7CiAJCQlpZiAobG9jaykKLQkJCQlzcGluX2xvY2soJnRsYml2YXhfbG9jayk7CisJCQkJcmF3X3NwaW5fbG9jaygmdGxiaXZheF9sb2NrKTsKIAkJCV90bGJpdmF4X2JjYXN0KHZtYWRkciwgcGlkLCB0c2l6ZSwgaW5kKTsKIAkJCWlmIChsb2NrKQotCQkJCXNwaW5fdW5sb2NrKCZ0bGJpdmF4X2xvY2spOworCQkJCXJhd19zcGluX3VubG9jaygmdGxiaXZheF9sb2NrKTsKIAkJCWdvdG8gYmFpbDsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCB0bGJfZmx1c2hfcGFyYW0gcCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9jbG9jay5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMKaW5kZXggODQ1NDRkMC4uNGM0MjI0NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMKQEAgLTY5OCw4ICs2OTgsNyBAQAogCS5jbGtfZ2V0X3BhcmVudAkJPSBOVUxMLAogfTsKIAotc3RhdGljIGludAotbXBjNTEyMV9jbGtfaW5pdCh2b2lkKQoraW50IF9faW5pdCBtcGM1MTIxX2Nsa19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIApAQCAtNzI0LDYgKzcyMywzIEBACiAJY2xrX2Z1bmN0aW9ucyA9IG1wYzUxMjFfY2xrX2Z1bmN0aW9uczsKIAlyZXR1cm4gMDsKIH0KLQotCi1hcmNoX2luaXRjYWxsKG1wYzUxMjFfY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYwppbmRleCA0NDFhYmM0Li5lZTZhZTEyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYwpAQCAtNjQsOCArNjQsOSBAQAogCS5uYW1lCQkJPSAiTVBDNTEyMSBBRFMiLAogCS5wcm9iZQkJCT0gbXBjNTEyMV9hZHNfcHJvYmUsCiAJLnNldHVwX2FyY2gJCT0gbXBjNTEyMV9hZHNfc2V0dXBfYXJjaCwKLQkuaW5pdAkJCT0gbXBjNTEyeF9kZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMsCisJLmluaXQJCQk9IG1wYzUxMnhfaW5pdCwKIAkuaW5pdF9JUlEJCT0gbXBjNTEyMV9hZHNfaW5pdF9JUlEsCiAJLmdldF9pcnEJCT0gaXBpY19nZXRfaXJxLAogCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5yZXN0YXJ0CQk9IG1wYzUxMnhfcmVzdGFydCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHNfY3BsZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzX2NwbGQuYwppbmRleCBkYTliMjBhLi40ZWNmNGNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHNfY3BsZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkc19jcGxkLmMKQEAgLTc5LDcgKzc5LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjcGxkX3BpYyA9IHsKLQkubmFtZSA9ICIgQ1BMRCBQSUMgIiwKKwkubmFtZSA9ICJDUExEIFBJQyIsCiAJLm1hc2sgPSBjcGxkX21hc2tfaXJxLAogCS5hY2sgPSBjcGxkX21hc2tfaXJxLAogCS51bm1hc2sgPSBjcGxkX3VubWFza19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9nZW5lcmljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9nZW5lcmljLmMKaW5kZXggMjQ3OWRlOS4uYTZjMGUzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfZ2VuZXJpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2dlbmVyaWMuYwpAQCAtNTEsOCArNTEsOSBAQAogZGVmaW5lX21hY2hpbmUobXBjNTEyMV9nZW5lcmljKSB7CiAJLm5hbWUJCQk9ICJNUEM1MTIxIGdlbmVyaWMiLAogCS5wcm9iZQkJCT0gbXBjNTEyMV9nZW5lcmljX3Byb2JlLAotCS5pbml0CQkJPSBtcGM1MTJ4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcywKKwkuaW5pdAkJCT0gbXBjNTEyeF9pbml0LAogCS5pbml0X0lSUQkJPSBtcGM1MTJ4X2luaXRfSVJRLAogCS5nZXRfaXJxCQk9IGlwaWNfZ2V0X2lycSwKIAkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucmVzdGFydAkJPSBtcGM1MTJ4X3Jlc3RhcnQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnguaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTJ4LmgKaW5kZXggMjJhNTM1Mi4uYjJkYWNhMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnguaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeC5oCkBAIC0xMiw1ICsxMiw4IEBACiAjaWZuZGVmIF9fTVBDNTEyWF9IX18KICNkZWZpbmUgX19NUEM1MTJYX0hfXwogZXh0ZXJuIHZvaWQgX19pbml0IG1wYzUxMnhfaW5pdF9JUlEodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgbXBjNTEyeF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBfX2luaXQgbXBjNTEyMV9jbGtfaW5pdCh2b2lkKTsKIHZvaWQgX19pbml0IG1wYzUxMnhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpOworZXh0ZXJuIHZvaWQgbXBjNTEyeF9yZXN0YXJ0KGNoYXIgKmNtZCk7CiAjZW5kaWYJCQkJLyogX19NUEM1MTJYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnhfc2hhcmVkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeF9zaGFyZWQuYwppbmRleCA0MzRkNjgzLi5iN2Y1MThhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeF9zaGFyZWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeF9zaGFyZWQuYwpAQCAtMjEsOSArMjEsMzggQEAKICNpbmNsdWRlIDxhc20vaXBpYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbXBjNTEyMS5oPgogCiAjaW5jbHVkZSAibXBjNTEyeC5oIgogCitzdGF0aWMgc3RydWN0IG1wYzUxMnhfcmVzZXRfbW9kdWxlIF9faW9tZW0gKnJlc2V0X21vZHVsZV9iYXNlOworCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjNTEyeF9yZXN0YXJ0X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLG1wYzUxMjEtcmVzZXQiKTsKKwlpZiAoIW5wKQorCQlyZXR1cm47CisKKwlyZXNldF9tb2R1bGVfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKwlvZl9ub2RlX3B1dChucCk7Cit9CisKK3ZvaWQgbXBjNTEyeF9yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKwlpZiAocmVzZXRfbW9kdWxlX2Jhc2UpIHsKKwkJLyogRW5hYmxlIHNvZnR3YXJlIHJlc2V0ICJSU1RFIiAqLworCQlvdXRfYmUzMigmcmVzZXRfbW9kdWxlX2Jhc2UtPnJwciwgMHg1MjUzNTQ0NSk7CisJCS8qIFNldCBzb2Z0d2FyZSBoYXJkIHJlc2V0ICovCisJCW91dF9iZTMyKCZyZXNldF9tb2R1bGVfYmFzZS0+cmNyLCAweDIpOworCX0gZWxzZSB7CisJCXByX2VycigiUmVzdGFydCBtb2R1bGUgbm90IG1hcHBlZC5cbiIpOworCX0KKwlmb3IgKDs7KQorCQk7Cit9CisKIHZvaWQgX19pbml0IG1wYzUxMnhfaW5pdF9JUlEodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwpAQCAtNTMsOCArODIsMjIgQEAKIAogdm9pZCBfX2luaXQgbXBjNTEyeF9kZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXModm9pZCkKIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCiAJaWYgKG9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBvZl9idXNfaWRzLCBOVUxMKSkKIAkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6ICIKIAkJCSJFcnJvciB3aGlsZSBwcm9iaW5nIG9mX3BsYXRmb3JtIGJ1c1xuIik7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsbXBjNTEyMS1uZmMiKTsKKwlpZiAobnApIHsKKwkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgTlVMTCwgTlVMTCk7CisJCW9mX25vZGVfcHV0KG5wKTsKKwl9CiB9CiAKK3ZvaWQgX19pbml0IG1wYzUxMnhfaW5pdCh2b2lkKQoreworCW1wYzUxMnhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKCk7CisJbXBjNTEyMV9jbGtfaW5pdCgpOworCW1wYzUxMnhfcmVzdGFydF9pbml0KCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCmluZGV4IDIxZjYxYjguLjA0ZDEwNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCkBAIC0zMDIsMTEgKzMwMiwxNCBAQAogCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wscmFwaWRpby1kZWx0YSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1ndXRzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdwaW8tbGVkcyIsIH0sCiAJe30sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtcGM4NXh4X3B1Ymxpc2hfZGV2aWNlcyh2b2lkKQogeworCWlmIChtYWNoaW5lX2lzKG1wYzg1NjhfbWRzKSkKKwkJc2ltcGxlX2dwaW9jaGlwX2luaXQoImZzbCxtcGM4NTY4bWRzLWJjc3ItZ3BpbyIpOwogCWlmIChtYWNoaW5lX2lzKG1wYzg1NjlfbWRzKSkKIAkJc2ltcGxlX2dwaW9jaGlwX2luaXQoImZzbCxtcGM4NTY5bWRzLWJjc3ItZ3BpbyIpOwogCkBAIC0zMzgsNyArMzQxLDggQEAKIAl9CiAKIAltcGljID0gbXBpY19hbGxvYyhucCwgci5zdGFydCwKLQkJCU1QSUNfUFJJTUFSWSB8IE1QSUNfV0FOVFNfUkVTRVQgfCBNUElDX0JJR19FTkRJQU4sCisJCQlNUElDX1BSSU1BUlkgfCBNUElDX1dBTlRTX1JFU0VUIHwgTVBJQ19CSUdfRU5ESUFOIHwKKwkJCU1QSUNfQlJPS0VOX0ZSUl9OSVJRUywKIAkJCTAsIDI1NiwgIiBPcGVuUElDICAiKTsKIAlCVUdfT04obXBpYyA9PSBOVUxMKTsKIAlvZl9ub2RlX3B1dChucCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMKaW5kZXggMDQxNjBhNC4uYTE1ZjU4MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYwpAQCAtNDYsNiArNDYsNyBAQAogCV9faW9tZW0gdTMyICpicHRyX3ZhZGRyOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAJaW50IG4gPSAwOworCWludCBpb3JlbWFwcGFibGU7CiAKIAlXQVJOX09OIChuciA8IDAgfHwgbnIgPj0gTlJfQ1BVUyk7CiAKQEAgLTU5LDIxICs2MCwzNyBAQAogCQlyZXR1cm47CiAJfQogCisJLyoKKwkgKiBBIHNlY29uZGFyeSBjb3JlIGNvdWxkIGJlIGluIGEgc3Bpbmxvb3AgaW4gdGhlIGJvb3RwYWdlCisJICogKDB4ZmZmZmYwMDApLCBzb21ld2hlcmUgaW4gaGlnaG1lbSwgb3Igc29tZXdoZXJlIGluIGxvd21lbS4KKwkgKiBUaGUgYm9vdHBhZ2UgYW5kIGhpZ2htZW0gY2FuIGJlIGFjY2Vzc2VkIHZpYSBpb3JlbWFwKCksIGJ1dAorCSAqIHdlIG5lZWQgdG8gZGlyZWN0bHkgYWNjZXNzIHRoZSBzcGlubG9vcCBpZiBpdHMgaW4gbG93bWVtLgorCSAqLworCWlvcmVtYXBwYWJsZSA9ICpjcHVfcmVsX2FkZHIgPiB2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpOworCiAJLyogTWFwIHRoZSBzcGluIHRhYmxlICovCi0JYnB0cl92YWRkciA9IGlvcmVtYXAoKmNwdV9yZWxfYWRkciwgU0laRV9CT09UX0VOVFJZKTsKKwlpZiAoaW9yZW1hcHBhYmxlKQorCQlicHRyX3ZhZGRyID0gaW9yZW1hcCgqY3B1X3JlbF9hZGRyLCBTSVpFX0JPT1RfRU5UUlkpOworCWVsc2UKKwkJYnB0cl92YWRkciA9IHBoeXNfdG9fdmlydCgqY3B1X3JlbF9hZGRyKTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogCW91dF9iZTMyKGJwdHJfdmFkZHIgKyBCT09UX0VOVFJZX1BJUiwgbnIpOwogCW91dF9iZTMyKGJwdHJfdmFkZHIgKyBCT09UX0VOVFJZX0FERFJfTE9XRVIsIF9fcGEoX19lYXJseV9zdGFydCkpOwogCisJaWYgKCFpb3JlbWFwcGFibGUpCisJCWZsdXNoX2RjYWNoZV9yYW5nZSgodWxvbmcpYnB0cl92YWRkciwKKwkJCQkodWxvbmcpKGJwdHJfdmFkZHIgKyBTSVpFX0JPT1RfRU5UUlkpKTsKKwogCS8qIFdhaXQgYSBiaXQgZm9yIHRoZSBDUFUgdG8gYWNrLiAqLwogCXdoaWxlICgoX19zZWNvbmRhcnlfaG9sZF9hY2tub3dsZWRnZSAhPSBucikgJiYgKCsrbiA8IDEwMDApKQogCQltZGVsYXkoMSk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlpb3VubWFwKGJwdHJfdmFkZHIpOworCWlmIChpb3JlbWFwcGFibGUpCisJCWlvdW5tYXAoYnB0cl92YWRkcik7CiAKIAlwcl9kZWJ1Zygid2FpdGVkICVkIG1zZWNzIGZvciBDUFUgIyVkLlxuIiwgbiwgbnIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuYwppbmRleCBlNWRhNWY2Li40MmU4N2YwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuYwpAQCAtMjMyLDcgKzIzMiw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc29jcmF0ZXNfZnBnYV9waWNfY2hpcCA9IHsKLQkubmFtZQkJPSAiIEZQR0EtUElDICIsCisJLm5hbWUJCT0gIkZQR0EtUElDIiwKIAkuYWNrCQk9IHNvY3JhdGVzX2ZwZ2FfcGljX2FjaywKIAkubWFzayAgICAgICAgICAgPSBzb2NyYXRlc19mcGdhX3BpY19tYXNrLAogCS5tYXNrX2FjayAgICAgICA9IHNvY3JhdGVzX2ZwZ2FfcGljX21hc2tfYWNrLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMKaW5kZXggZjU1OTkxOC4uYmMzM2QxOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlwdmlkID0gbWZzcHIoU1BSTl9QVlIpOwogCXN2aWQgPSBtZnNwcihTUFJOX1NWUik7CiAKLQlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBSUEMgRWxlY3Ryb25pY3MgU1R4IFxuIik7CisJc2VxX3ByaW50ZihtLCAiVmVuZG9yXHRcdDogUlBDIEVsZWN0cm9uaWNzIFNUeFxuIik7CiAJc2VxX3ByaW50ZihtLCAiUFZSXHRcdDogMHgleFxuIiwgcHZpZCk7CiAJc2VxX3ByaW50ZihtLCAiU1ZSXHRcdDogMHgleFxuIiwgc3ZpZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC94ZXNfbXBjODV4eC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3hlc19tcGM4NXh4LmMKaW5kZXggMWI0MjYwNS4uMDEyNTYwNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3hlc19tcGM4NXh4LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3hlc19tcGM4NXh4LmMKQEAgLTgwLDggKzgwLDggQEAKIAlwcmludGsoS0VSTl9JTkZPICJ4ZXNfbXBjODV4eDogRW5hYmxpbmcgTDIgYXMgY2FjaGVcbiIpOwogCiAJY3RsID0gTVBDODV4eF9MMkNUTF9MMkUgfCBNUEM4NXh4X0wyQ1RMX0wySTsKLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJNUEM4NTQwIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJNUEM4NTYwIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTVBDODU0MCIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTVBDODU2MCIpKQogCQkvKgogCQkgKiBBc3N1bWUgTDIgU1JBTSBpcyB1c2VkIGZ1bGx5IGZvciBjYWNoZSwgc28gc2V0CiAJCSAqIEwyQkxLU1ogKGJpdHMgNDo1KSB0byBtYXRjaCBMMlNJWiAoYml0cyAyOjMpLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaHRhYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaHRhYi5jCmluZGV4IDM1YjFlYzQuLjI1MTZjMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2h0YWIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9odGFiLmMKQEAgLTQwLDcgKzQwLDcgQEAKICNkZWZpbmUgREJHX0xPVyhmbXQuLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJlYXRfaHRhYl9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGJlYXRfaHRhYl9sb2NrKTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmVhdF9yZWFkX21hc2sodW5zaWduZWQgaHB0ZV9ncm91cCkKIHsKQEAgLTExNCwxOCArMTE0LDE4IEBACiAJaWYgKHJmbGFncyAmIF9QQUdFX05PX0NBQ0hFKQogCQlocHRlX3IgJj0gfl9QQUdFX0NPSEVSRU5UOwogCi0Jc3Bpbl9sb2NrKCZiZWF0X2h0YWJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmYmVhdF9odGFiX2xvY2spOwogCWxwYXJfcmMgPSBiZWF0X3JlYWRfbWFzayhocHRlX2dyb3VwKTsKIAlpZiAobHBhcl9yYyA9PSAwKSB7CiAJCWlmICghKHZmbGFncyAmIEhQVEVfVl9CT0xURUQpKQogCQkJREJHX0xPVygiIGZ1bGxcbiIpOwotCQlzcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCWxwYXJfcmMgPSBiZWF0X2luc2VydF9odGFiX2VudHJ5KDAsIGhwdGVfZ3JvdXAsIGxwYXJfcmMgPDwgNDgsCiAJCWhwdGVfdiwgaHB0ZV9yLCAmc2xvdCk7Ci0Jc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKIAogCS8qCiAJICogU2luY2Ugd2UgdHJ5IGFuZCBpb3JlbWFwIFBIQnMgd2UgZG9uJ3Qgb3duLCB0aGUgcHRlIGluc2VydApAQCAtMTk4LDE3ICsxOTgsMTcgQEAKIAkJImF2cG52PSUwMTZseCwgc2xvdD0lMDE2bHgsIHBzaXplOiAlZCwgbmV3cHAgJTAxNmx4IC4uLiAiLAogCQl3YW50X3YgJiBIUFRFX1ZfQVZQTiwgc2xvdCwgcHNpemUsIG5ld3BwKTsKIAotCXNwaW5fbG9jaygmYmVhdF9odGFiX2xvY2spOworCXJhd19zcGluX2xvY2soJmJlYXRfaHRhYl9sb2NrKTsKIAlkdW1teTAgPSBiZWF0X2xwYXJfaHB0ZV9nZXR3b3JkMChzbG90KTsKIAlpZiAoKGR1bW15MCAmIH4weDdGVUwpICE9ICh3YW50X3YgJiB+MHg3RlVMKSkgewogCQlEQkdfTE9XKCJub3QgZm91bmQgIVxuIik7Ci0JCXNwaW5fdW5sb2NrKCZiZWF0X2h0YWJfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJbHBhcl9yYyA9IGJlYXRfd3JpdGVfaHRhYl9lbnRyeSgwLCBzbG90LCAwLCBuZXdwcCwgMCwgNywgJmR1bW15MCwKIAkJCQkJJmR1bW15MSk7Ci0Jc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKIAlpZiAobHBhcl9yYyAhPSAwIHx8IGR1bW15MCA9PSAwKSB7CiAJCURCR19MT1coIm5vdCBmb3VuZCAhXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMjYyLDEzICsyNjIsMTMgQEAKIAl2c2lkID0gZ2V0X2tlcm5lbF92c2lkKGVhLCBNTVVfU0VHU0laRV8yNTZNKTsKIAl2YSA9ICh2c2lkIDw8IDI4KSB8IChlYSAmIDB4MGZmZmZmZmYpOwogCi0Jc3Bpbl9sb2NrKCZiZWF0X2h0YWJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmYmVhdF9odGFiX2xvY2spOwogCXNsb3QgPSBiZWF0X2xwYXJfaHB0ZV9maW5kKHZhLCBwc2l6ZSk7CiAJQlVHX09OKHNsb3QgPT0gLTEpOwogCiAJbHBhcl9yYyA9IGJlYXRfd3JpdGVfaHRhYl9lbnRyeSgwLCBzbG90LCAwLCBuZXdwcCwgMCwgNywKIAkJJmR1bW15MCwgJmR1bW15MSk7Ci0Jc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKIAogCUJVR19PTihscGFyX3JjICE9IDApOwogfQpAQCAtMjg1LDE4ICsyODUsMTggQEAKIAkJc2xvdCwgdmEsIHBzaXplLCBsb2NhbCk7CiAJd2FudF92ID0gaHB0ZV9lbmNvZGVfdih2YSwgcHNpemUsIE1NVV9TRUdTSVpFXzI1Nk0pOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRfaHRhYl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZiZWF0X2h0YWJfbG9jaywgZmxhZ3MpOwogCWR1bW15MSA9IGJlYXRfbHBhcl9ocHRlX2dldHdvcmQwKHNsb3QpOwogCiAJaWYgKChkdW1teTEgJiB+MHg3RlVMKSAhPSAod2FudF92ICYgfjB4N0ZVTCkpIHsKIAkJREJHX0xPVygibm90IGZvdW5kICFcbiIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0X2h0YWJfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdF9odGFiX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAogCWxwYXJfcmMgPSBiZWF0X3dyaXRlX2h0YWJfZW50cnkoMCwgc2xvdCwgMCwgMCwgSFBURV9WX1ZBTElELCAwLAogCQkmZHVtbXkxLCAmZHVtbXkyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0X2h0YWJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0X2h0YWJfbG9jaywgZmxhZ3MpOwogCiAJQlVHX09OKGxwYXJfcmMgIT0gMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCmluZGV4IDM2MDUyYTkuLjY4MmFmOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiYmVhdF93cmFwcGVyLmgiCiAKICNkZWZpbmUJTUFYX0lSUVMJTlJfSVJRUwotc3RhdGljIERFRklORV9TUElOTE9DSyhiZWF0aWNfaXJxX21hc2tfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhiZWF0aWNfaXJxX21hc2tfbG9jayk7CiBzdGF0aWMgdWludDY0X3QJYmVhdGljX2lycV9tYXNrX2VuYWJsZVsoTUFYX0lSUVMrMjU1KS82NF07CiBzdGF0aWMgdWludDY0X3QJYmVhdGljX2lycV9tYXNrX2Fja1soTUFYX0lSUVMrMjU1KS82NF07CiAKQEAgLTY1LDMwICs2NSwzMCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CiAJYmVhdGljX2lycV9tYXNrX2VuYWJsZVtpcnFfcGx1Zy82NF0gJj0gfigxVUwgPDwgKDYzIC0gKGlycV9wbHVnJTY0KSkpOwogCWJlYXRpY191cGRhdGVfaXJxX21hc2soaXJxX3BsdWcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJlYXRpY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnFfcGx1ZykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogCWJlYXRpY19pcnFfbWFza19lbmFibGVbaXJxX3BsdWcvNjRdIHw9IDFVTCA8PCAoNjMgLSAoaXJxX3BsdWclNjQpKTsKIAliZWF0aWNfdXBkYXRlX2lycV9tYXNrKGlycV9wbHVnKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBiZWF0aWNfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxX3BsdWcpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIAliZWF0aWNfaXJxX21hc2tfYWNrW2lycV9wbHVnLzY0XSAmPSB+KDFVTCA8PCAoNjMgLSAoaXJxX3BsdWclNjQpKSk7CiAJYmVhdGljX3VwZGF0ZV9pcnFfbWFzayhpcnFfcGx1Zyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgYmVhdGljX2VuZF9pcnEodW5zaWduZWQgaW50IGlycV9wbHVnKQpAQCAtMTAzLDE0ICsxMDMsMTQgQEAKIAogCQlwcmludGsoS0VSTl9FUlIgIklSUSBvdmVyLWRvd25jb3VudGVkLCBwbHVnICVkXG4iLCBpcnFfcGx1Zyk7CiAJfQotCXNwaW5fbG9ja19pcnFzYXZlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIAliZWF0aWNfaXJxX21hc2tfYWNrW2lycV9wbHVnLzY0XSB8PSAxVUwgPDwgKDYzIC0gKGlycV9wbHVnJTY0KSk7CiAJYmVhdGljX3VwZGF0ZV9pcnFfbWFzayhpcnFfcGx1Zyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBiZWF0aWNfcGljID0gewotCS5uYW1lID0gIiBDRUxMLUJFQVQgIiwKKwkubmFtZSA9ICJDRUxMLUJFQVQiLAogCS51bm1hc2sgPSBiZWF0aWNfdW5tYXNrX2lycSwKIAkubWFzayA9IGJlYXRpY19tYXNrX2lycSwKIAkuZW9pID0gYmVhdGljX2VuZF9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2JlX3Bvd2VyYnV0dG9uLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2JlX3Bvd2VyYnV0dG9uLmMKaW5kZXggZGNkZGFhNS4uZjc1YTRkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV9wb3dlcmJ1dHRvbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jYmVfcG93ZXJidXR0b24uYwpAQCAtNDgsNyArNDgsNyBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKIAotCWlmICghbWFjaGluZV9pc19jb21wYXRpYmxlKCJJQk0sQ0JQTFVTLTEuMCIpKSB7CisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIklCTSxDQlBMVVMtMS4wIikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogTm90IGEgY2VsbCBibGFkZS5cbiIsIF9fZnVuY19fKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKaW5kZXggNjgyOWNmNy4uMTBlYjFhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYwpAQCAtODgsNyArODgsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlpY19jaGlwID0gewotCS5uYW1lID0gIiBDRUxMLUlJQyAiLAorCS5uYW1lID0gIkNFTEwtSUlDIiwKIAkubWFzayA9IGlpY19tYXNrLAogCS51bm1hc2sgPSBpaWNfdW5tYXNrLAogCS5lb2kgPSBpaWNfZW9pLApAQCAtMTMzLDcgKzEzMyw3IEBACiAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpaWNfaW9leGNfY2hpcCA9IHsKLQkubmFtZSA9ICIgQ0VMTC1JT0VYIiwKKwkubmFtZSA9ICJDRUxMLUlPRVgiLAogCS5tYXNrID0gaWljX21hc2ssCiAJLnVubWFzayA9IGlpY191bm1hc2ssCiAJLmVvaSA9IGlpY19pb2V4Y19lb2ksCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcmFzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcmFzLmMKaW5kZXggNWUwYTE5MS4uNjA4ZmQyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3Jhcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9yYXMuYwpAQCAtMjU1LDcgKzI1NSw3IEBACiB7CiAJc3RydWN0IGNiZV9wbWRfcmVncyBfX2lvbWVtICpyZWdzOwogCi0Jc3lzcmVzZXRfaGFjayA9IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiSUJNLENCUExVUy0xLjAiKTsKKwlzeXNyZXNldF9oYWNrID0gb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJJQk0sQ0JQTFVTLTEuMCIpOwogCWlmICghc3lzcmVzZXRfaGFjaykKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBpYy5jCmluZGV4IDAxMjQ0ZjIuLjU4NzZlODggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc3BpZGVyX3BpYyA9IHsKLQkubmFtZSA9ICIgU1BJREVSICAgIiwKKwkubmFtZSA9ICJTUElERVIiLAogCS51bm1hc2sgPSBzcGlkZXJfdW5tYXNrX2lycSwKIAkubWFzayA9IHNwaWRlcl9tYXNrX2lycSwKIAkuYWNrID0gc3BpZGVyX2Fja19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X21hbmFnZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9tYW5hZ2UuYwppbmRleCA0YzUwNmMxLi44OTFmMThlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X21hbmFnZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfbWFuYWdlLmMKQEAgLTQ1Nyw3ICs0NTcsNyBAQAogCQkJY29udGludWU7CiAJCXZpY19oYW5kbGVzID0gb2ZfZ2V0X3Byb3BlcnR5KHNwdV9kbiwgInZpY2luaXR5IiwgJmxlbnApOwogCQlmb3IgKGk9MDsgaSA8IChsZW5wIC8gc2l6ZW9mKHBoYW5kbGUpKTsgaSsrKSB7Ci0JCQlpZiAodmljX2hhbmRsZXNbaV0gPT0gdGFyZ2V0LT5saW51eF9waGFuZGxlKQorCQkJaWYgKHZpY19oYW5kbGVzW2ldID09IHRhcmdldC0+cGhhbmRsZSkKIAkJCQlyZXR1cm4gc3B1OwogCQl9CiAJfQpAQCAtNDk5LDcgKzQ5OSw3IEBACiAKIAkJCWlmIChzdHJjbXAobmFtZSwgInNwZSIpID09IDApIHsKIAkJCQlzcHUgPSBkZXZub2RlX3NwdShjYmUsIHZpY19kbik7Ci0JCQkJYXZvaWRfcGggPSBsYXN0X3NwdV9kbi0+bGludXhfcGhhbmRsZTsKKwkJCQlhdm9pZF9waCA9IGxhc3Rfc3B1X2RuLT5waGFuZGxlOwogCQkJfSBlbHNlIHsKIAkJCQkvKgogCQkJCSAqICJtaWMtdG0iIGFuZCAiYmlmMCIgbm9kZXMgZG8gbm90IGhhdmUKQEAgLTUxNCw3ICs1MTQsNyBAQAogCQkJCQlsYXN0X3NwdS0+aGFzX21lbV9hZmZpbml0eSA9IDE7CiAJCQkJCXNwdS0+aGFzX21lbV9hZmZpbml0eSA9IDE7CiAJCQkJfQotCQkJCWF2b2lkX3BoID0gdmljX2RuLT5saW51eF9waGFuZGxlOworCQkJCWF2b2lkX3BoID0gdmljX2RuLT5waGFuZGxlOwogCQkJfQogCiAJCQlsaXN0X2FkZF90YWlsKCZzcHUtPmFmZl9saXN0LCAmbGFzdF9zcHUtPmFmZl9saXN0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZnNsX3VsaTE1NzUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZnNsX3VsaTE1NzUuYwppbmRleCBmZDIzYTFkLi44YjBjMjA4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2ZzbF91bGkxNTc1LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9mc2xfdWxpMTU3NS5jCkBAIC0yMjIsNiArMjIyLDcgQEAKIAlpbnQgaTsKIAl1OCAqZHVtbXk7CiAJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGRldi0+YnVzOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXJlc291cmNlX3NpemVfdCBlbmQgPSAwOwogCiAJZm9yIChpID0gUENJX0JSSURHRV9SRVNPVVJDRVM7IGkgPCBQQ0lfQlJJREdFX1JFU09VUkNFUyszOyBpKyspIHsKQEAgLTIzMCwxMyArMjMxLDEyIEBACiAJCQllbmQgPSBwY2lfcmVzb3VyY2VfZW5kKGRldiwgaSk7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0JCWlmICgoYnVzLT5yZXNvdXJjZVtpXSkgJiYKLQkJCShidXMtPnJlc291cmNlW2ldLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSkgewotCQkJaWYgKGJ1cy0+cmVzb3VyY2VbaV0tPmVuZCA9PSBlbmQpCi0JCQkJZHVtbXkgPSBpb3JlbWFwKGJ1cy0+cmVzb3VyY2VbaV0tPnN0YXJ0LCAweDQpOworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIGkpIHsKKwkJaWYgKHJlcyAmJiByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKKwkJCWlmIChyZXMtPmVuZCA9PSBlbmQpCisJCQkJZHVtbXkgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIDB4NCk7CiAJCQllbHNlCi0JCQkJZHVtbXkgPSBpb3JlbWFwKGJ1cy0+cmVzb3VyY2VbaV0tPmVuZCAtIDMsIDB4NCk7CisJCQkJZHVtbXkgPSBpb3JlbWFwKHJlcy0+ZW5kIC0gMywgMHg0KTsKIAkJCWlmIChkdW1teSkgewogCQkJCWluXzgoZHVtbXkpOwogCQkJCWlvdW5tYXAoZHVtbXkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCmluZGV4IDg2YzRiMjkuLmJhNDQ2YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKQEAgLTI3Myw3ICsyNzMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlzZXJpZXNfcGljID0gewotCS5uYW1lCT0gImlTZXJpZXMgaXJxIGNvbnRyb2xsZXIiLAorCS5uYW1lCQk9ICJpU2VyaWVzIiwKIAkuc3RhcnR1cAk9IGlzZXJpZXNfc3RhcnR1cF9JUlEsCiAJLnNodXRkb3duCT0gaXNlcmllc19zaHV0ZG93bl9JUlEsCiAJLnVubWFzawkJPSBpc2VyaWVzX2VuYWJsZV9JUlEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvcHJvYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Byb2MuYwppbmRleCA5MWY0YzZjLi4wNjc2MzY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvcHJvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9wcm9jLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAogCQlzZXFfcHJpbnRmKG0sICIgIHRpdGFuIGVsYXBzZWQgPSAlbHUgdVNlY1xuIiwgdGl0YW5fdXNlYyk7CiAJCXNlcV9wcmludGYobSwgIiAgdGIgZWxhcHNlZCAgICA9ICVsdSB0aWNrc1xuIiwgdGJfdGlja3MpOwotCQlzZXFfcHJpbnRmKG0sICIgIHRpdGFuIGppZmZpZXMgPSAlbHUuJTA0bHUgXG4iLCB0aXRhbl9qaWZmaWVzLAorCQlzZXFfcHJpbnRmKG0sICIgIHRpdGFuIGppZmZpZXMgPSAlbHUuJTA0bHVcbiIsIHRpdGFuX2ppZmZpZXMsCiAJCQkgICB0aXRhbl9qaWZmX3JlbV91c2VjKTsKIAkJc2VxX3ByaW50ZihtLCAiICB0YiBqaWZmaWVzICAgID0gJWx1LiUwNGx1XG4iLCB0Yl9qaWZmaWVzLAogCQkJICAgdGJfamlmZl9yZW1fdXNlYyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCmluZGV4IGE2Y2QzMzkuLmIwODYzNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJbWVtX2Jsb2NrcyA9IGlTZXJpZXNfcHJvY2Vzc19Db25kb3JfbWFpbnN0b3JlX3ZwZChtYl9hcnJheSwKIAkJCQltYXhfZW50cmllcyk7CiAKLQlwcmludGsoIk1haW5zdG9yZV9WUEQ6IG51bU1lbW9yeUJsb2NrcyA9ICVsZCBcbiIsIG1lbV9ibG9ja3MpOworCXByaW50aygiTWFpbnN0b3JlX1ZQRDogbnVtTWVtb3J5QmxvY2tzID0gJWxkXG4iLCBtZW1fYmxvY2tzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbWVtX2Jsb2NrczsgKytpKSB7CiAJCXByaW50aygiTWFpbnN0b3JlX1ZQRDogYmxvY2sgJTNsZCBsb2dpY2FsIGNodW5rcyAlMDE2bHggLSAlMDE2bHhcbiIKIAkJICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFicyBjaHVua3MgJTAxNmx4IC0gJTAxNmx4XG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvY3B1ZnJlcS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvY3B1ZnJlcS5jCmluZGV4IGJlMjUyN2EuLmQzNWUwNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2NwdWZyZXEuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9jcHVmcmVxLmMKQEAgLTMwNCw4ICszMDQsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwYXNfY3B1ZnJlcV9pbml0KHZvaWQpCiB7Ci0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBBNlQtMTY4Mk0iKSAmJgotCSAgICAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJwYXNlbWkscHdyZmljaWVudCIpKQorCWlmICghb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQQTZULTE2ODJNIikgJiYKKwkgICAgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgicGFzZW1pLHB3cmZpY2llbnQiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJnBhc19jcHVmcmVxX2RyaXZlcik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2Jvb3R4X2luaXQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvYm9vdHhfaW5pdC5jCmluZGV4IDlkZDc4OWEuLjg0ZDdmZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvYm9vdHhfaW5pdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvYm9vdHhfaW5pdC5jCkBAIC01MzksNyArNTM5LDcgQEAKIAkJaWYgKG1vZGVsCiAJCSAgICAmJiAoc3RyY21wKG1vZGVsLCAiaU1hYywxIikgPT0gMAogCQkJfHwgc3RyY21wKG1vZGVsLCAiUG93ZXJNYWMxLDEiKSA9PSAwKSkgewotCQkJYm9vdHhfcHJpbnRmKCJpTWFjLDEgZGV0ZWN0ZWQsIHNodXR0aW5nIGRvd24gVVNCIFxuIik7CisJCQlib290eF9wcmludGYoImlNYWMsMSBkZXRlY3RlZCwgc2h1dHRpbmcgZG93biBVU0JcbiIpOwogCQkJb3V0X2xlMzIoKHVuc2lnbmVkIF9faW9tZW0gKikweDgwODgwMDA4LCAxKTsJLyogWFhYICovCiAJCX0KIAl9CkBAIC01NTQsNyArNTU0LDcgQEAKIAl9IGVsc2UKIAkJc3BhY2UgPSBiaS0+dG90YWxQYXJhbXNTaXplOwogCi0JYm9vdHhfcHJpbnRmKCJUb3RhbCBzcGFjZSB1c2VkIGJ5IHBhcmFtZXRlcnMgJiByYW1kaXNrOiAweCV4IFxuIiwgc3BhY2UpOworCWJvb3R4X3ByaW50ZigiVG90YWwgc3BhY2UgdXNlZCBieSBwYXJhbWV0ZXJzICYgcmFtZGlzazogMHgleFxuIiwgc3BhY2UpOwogCiAJLyogTmV3IEJvb3RYIHdpbGwgaGF2ZSBmbHVzaGVkIGFsbCBUTEJzIGFuZCBlbnRlcnMga2VybmVsIHdpdGgKIAkgKiBNTVUgc3dpdGNoZWQgT0ZGLCBzbyB0aGlzIHNob3VsZCBub3QgYmUgdXNlZnVsIGFueW1vcmUuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfMzIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jCmluZGV4IDA4ZDk0ZTQuLmQ0ZjEyN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jCkBAIC02NTcsMzEgKzY1NywzMSBAQAogCWN1cl9mcmVxID0gKCp2YWx1ZSkgLyAxMDAwOwogCiAJLyogIENoZWNrIGZvciA3NDQ3QSBiYXNlZCBNYWNSSVNDMyAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MzIikgJiYKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDMyIpICYmCiAJICAgIG9mX2dldF9wcm9wZXJ0eShjcHVub2RlLCAiZHluYW1pYy1wb3dlci1zdGVwIiwgTlVMTCkgJiYKIAkgICAgUFZSX1ZFUihtZnNwcihTUFJOX1BWUikpID09IDB4ODAwMykgewogCQlwbWFjX2NwdWZyZXFfaW5pdF83NDQ3QShjcHVub2RlKTsKIAkvKiBDaGVjayBmb3Igb3RoZXIgTWFjUklTQzMgbWFjaGluZXMgKi8KLQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMyw0IikgfHwKLQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDUiKSB8fAotCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MzIikpIHsKKwl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMyw0IikgfHwKKwkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDUiKSB8fAorCQkgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MzIikpIHsKIAkJcG1hY19jcHVmcmVxX2luaXRfTWFjUklTQzMoY3B1bm9kZSk7CiAJLyogRWxzZSBjaGVjayBmb3IgaUJvb2syIDUwMC82MDAgKi8KLQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwxIikpIHsKKwl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwxIikpIHsKIAkJaGlfZnJlcSA9IGN1cl9mcmVxOwogCQlsb3dfZnJlcSA9IDQwMDAwMDsKIAkJc2V0X3NwZWVkX3Byb2MgPSBwbXVfc2V0X2NwdV9zcGVlZDsKIAkJaXNfcG11X2Jhc2VkID0gMTsKIAl9CiAJLyogRWxzZSBjaGVjayBmb3IgVGlQYiA1NTAgKi8KLQllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMyIpICYmIGN1cl9mcmVxID09IDU1MDAwMCkgeworCWVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywzIikgJiYgY3VyX2ZyZXEgPT0gNTUwMDAwKSB7CiAJCWhpX2ZyZXEgPSBjdXJfZnJlcTsKIAkJbG93X2ZyZXEgPSA1MDAwMDA7CiAJCXNldF9zcGVlZF9wcm9jID0gcG11X3NldF9jcHVfc3BlZWQ7CiAJCWlzX3BtdV9iYXNlZCA9IDE7CiAJfQogCS8qIEVsc2UgY2hlY2sgZm9yIFRpUGIgNDAwICYgNTAwICovCi0JZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDIiKSkgeworCWVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywyIikpIHsKIAkJLyogV2Ugb25seSBrbm93IGFib3V0IHRoZSA0MDAgTUh6IGFuZCB0aGUgNTAwTWh6IG1vZGVsCiAJCSAqIHRoZXkgYm90aCBoYXZlIDMwMCBNSHogYXMgbG93IGZyZXF1ZW5jeQogCQkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzY0LmMKaW5kZXggNzA4Yzc1MS4uM2VkMjg4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzY0LmMKQEAgLTM5OCwxMSArMzk4LDExIEBACiAJaW50IHJjID0gLUVOT0RFVjsKIAogCS8qIENoZWNrIHN1cHBvcnRlZCBwbGF0Zm9ybXMgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMSIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDIiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOSwxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDEiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwyIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzksMSIpKQogCQl1c2Vfdm9sdHNfc211ID0gMTsKLQllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTEsMiIpKQorCWVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMSwyIikpCiAJCXVzZV92b2x0c192ZG5hcCA9IDE7CiAJZWxzZQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTcyOSw5ICs3MjksOSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKIAkJcmMgPSBnNV9wbTcyX2NwdWZyZXFfaW5pdChjcHVzKTsKICNpZmRlZiBDT05GSUdfUE1BQ19TTVUKIAllbHNlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jCmluZGV4IGZiYzliYmQuLjllMWI5ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jCkBAIC01OSwxMCArNTksMTAgQEAKICAqIFdlIHVzZSBhIHNpbmdsZSBnbG9iYWwgbG9jayB0byBwcm90ZWN0IGFjY2Vzc2VzLiBFYWNoIGRyaXZlciBoYXMKICAqIHRvIHRha2UgY2FyZSBvZiBpdHMgb3duIGxvY2tpbmcKICAqLwotREVGSU5FX1NQSU5MT0NLKGZlYXR1cmVfbG9jayk7CitERUZJTkVfUkFXX1NQSU5MT0NLKGZlYXR1cmVfbG9jayk7CiAKLSNkZWZpbmUgTE9DSyhmbGFncykJc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwotI2RlZmluZSBVTkxPQ0soZmxhZ3MpCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworI2RlZmluZSBMT0NLKGZsYWdzKQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworI2RlZmluZSBVTkxPQ0soZmxhZ3MpCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAogCiAvKgpAQCAtMjQyNiw3ICsyNDI2LDcgQEAKIAkgICAgfQogCX0KIAlmb3IoaT0wOyBpPEFSUkFZX1NJWkUocG1hY19tYl9kZWZzKTsgaSsrKSB7Ci0JICAgIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUocG1hY19tYl9kZWZzW2ldLm1vZGVsX3N0cmluZykpIHsKKwkgICAgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZShwbWFjX21iX2RlZnNbaV0ubW9kZWxfc3RyaW5nKSkgewogCQlwbWFjX21iID0gcG1hY19tYl9kZWZzW2ldOwogCQlnb3RvIGZvdW5kOwogCSAgICB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMKaW5kZXggYzZmMGY5ZS4uODBhNTI1OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9udnJhbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYwpAQCAtODAsNyArODAsNyBAQAogc3RhdGljIGludCBjb3JlOTlfYmFuayA9IDA7CiBzdGF0aWMgaW50IG52cmFtX3BhcnRpdGlvbnNbM107CiAvLyBYWFggVHVybiB0aGF0IGludG8gYSBzZW0KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobnZfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhudl9sb2NrKTsKIAogc3RhdGljIGludCAoKmNvcmU5OV93cml0ZV9iYW5rKShpbnQgYmFuaywgdTgqIGRhdGFzKTsKIHN0YXRpYyBpbnQgKCpjb3JlOTlfZXJhc2VfYmFuaykoaW50IGJhbmspOwpAQCAtMTY1LDEwICsxNjUsMTAgQEAKIAl1bnNpZ25lZCBjaGFyIHZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm52X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm52X2xvY2ssIGZsYWdzKTsKIAlvdXRfOChudnJhbV9hZGRyLCBhZGRyID4+IDUpOwogCXZhbCA9IGluXzgoJm52cmFtX2RhdGFbKGFkZHIgJiAweDFmKSA8PCA0XSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnZfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZudl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gdmFsOwogfQpAQCAtMTc3LDEwICsxNzcsMTAgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm52X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm52X2xvY2ssIGZsYWdzKTsKIAlvdXRfOChudnJhbV9hZGRyLCBhZGRyID4+IDUpOwogCW91dF84KCZudnJhbV9kYXRhWyhhZGRyICYgMHgxZikgPDwgNF0sIHZhbCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnZfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZudl9sb2NrLCBmbGFncyk7CiB9CiAKIApAQCAtNDgxLDcgKzQ4MSw3IEBACiAJaWYgKCFpc19jb3JlXzk5IHx8ICFudnJhbV9kYXRhIHx8ICFudnJhbV9pbWFnZSkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm52X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm52X2xvY2ssIGZsYWdzKTsKIAlpZiAoIW1lbWNtcChudnJhbV9pbWFnZSwgKHU4KiludnJhbV9kYXRhICsgY29yZTk5X2JhbmsqTlZSQU1fU0laRSwKIAkJTlZSQU1fU0laRSkpCiAJCWdvdG8gYmFpbDsKQEAgLTUwMyw3ICs1MDMsNyBAQAogCQlpZiAoY29yZTk5X3dyaXRlX2JhbmsoY29yZTk5X2JhbmssIG52cmFtX2ltYWdlKSkKIAkJCXByaW50aygibnZyYW06IEVycm9yIHdyaXRpbmcgYmFuayAlZFxuIiwgY29yZTk5X2JhbmspOwogIGJhaWw6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnZfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZudl9sb2NrLCBmbGFncyk7CiAKICNpZmRlZiBERUJVRwogICAgICAgIAltZGVsYXkoMjAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2Jhc2UuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfYmFzZS5jCmluZGV4IGRiMjBkZTUuLmY1ZTNjZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfYmFzZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfYmFzZS5jCkBAIC01MCwxMyArNTAsMTMgQEAKIAkJdmFsdWUgPSB+dmFsdWU7CiAKIAkvKiBUb2dnbGUgdGhlIEdQSU8gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAl0bXAgPSByZWFkYihhZGRyKTsKIAl0bXAgPSAodG1wICYgfm1hc2spIHwgKHZhbHVlICYgbWFzayk7CiAJREJHKCJEbyB3cml0ZSAweCUwMnggdG8gR1BJTyAlcyAoJXApXG4iLAogCSAgICB0bXAsIGZ1bmMtPm5vZGUtPmZ1bGxfbmFtZSwgYWRkcik7CiAJd3JpdGViKHRtcCwgYWRkcik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDUsOSArMTQ1LDkgQEAKIAlzdHJ1Y3QgbWFjaW9fY2hpcCAqbWFjaW8gPSBmdW5jLT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAJTUFDSU9fT1VUMzIob2Zmc2V0LCAoTUFDSU9fSU4zMihvZmZzZXQpICYgfm1hc2spIHwgKHZhbHVlICYgbWFzaykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY4LDkgKzE2OCw5IEBACiAJc3RydWN0IG1hY2lvX2NoaXAgKm1hY2lvID0gZnVuYy0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCU1BQ0lPX09VVDgob2Zmc2V0LCAoTUFDSU9fSU44KG9mZnNldCkgJiB+bWFzaykgfCAodmFsdWUgJiBtYXNrKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjMsMTIgKzIyMywxMiBAQAogCWlmIChhcmdzID09IE5VTEwgfHwgYXJncy0+Y291bnQgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAl0bXAgPSBNQUNJT19JTjMyKG9mZnNldCk7CiAJdmFsID0gYXJncy0+dVswXS52IDw8IHNoaWZ0OwogCXRtcCA9ICh0bXAgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CiAJTUFDSU9fT1VUMzIob2Zmc2V0LCB0bXApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQzLDEyICsyNDMsMTIgQEAKIAlpZiAoYXJncyA9PSBOVUxMIHx8IGFyZ3MtPmNvdW50ID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAJdG1wID0gTUFDSU9fSU44KG9mZnNldCk7CiAJdmFsID0gYXJncy0+dVswXS52IDw8IHNoaWZ0OwogCXRtcCA9ICh0bXAgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CiAJTUFDSU9fT1VUOChvZmZzZXQsIHRtcCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzgsMTIgKzI3OCwxMiBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAkvKiBUaGlzIGlzIGZhaXJseSBib2d1cyBpbiBkYXJ3aW4sIGJ1dCBpdCBzaG91bGQgd29yayBmb3Igb3VyIG5lZWRzCiAJICogaW1wbGVtZXRlZCB0aGF0IHdheToKIAkgKi8KIAlVTl9PVVQob2Zmc2V0LCAoVU5fSU4ob2Zmc2V0KSAmIH5tYXNrKSB8ICh2YWx1ZSAmIG1hc2spKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfY29yZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKaW5kZXggOTZkNWNlNS4uZWRlNDllNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKQEAgLTg0Miw3ICs4NDIsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZnVuYywgJmRldi0+ZnVuY3Rpb25zLCBsaW5rKSB7CiAJCWlmIChuYW1lICYmIHN0cmNtcChuYW1lLCBmdW5jLT5uYW1lKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoZnVuYy0+cGhhbmRsZSAmJiB0YXJnZXQtPm5vZGUgIT0gZnVuYy0+cGhhbmRsZSkKKwkJaWYgKGZ1bmMtPnBoYW5kbGUgJiYgdGFyZ2V0LT5waGFuZGxlICE9IGZ1bmMtPnBoYW5kbGUpCiAJCQljb250aW51ZTsKIAkJaWYgKChmdW5jLT5mbGFncyAmIGZsYWdzKSA9PSAwKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwppbmRleCAwOWU4MjcyLi42MzBhNTMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKQEAgLTU3LDcgKzU3LDcgQEAKIHN0YXRpYyBpbnQgbWF4X3JlYWxfaXJxczsKIHN0YXRpYyB1MzIgbGV2ZWxfbWFza1s0XTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhwbWFjX3BpY19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHBtYWNfcGljX2xvY2spOwogCiAjZGVmaW5lIE5SX01BU0tfV09SRFMJKChOUl9JUlFTICsgMzEpIC8gMzIpCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwcGNfbG9zdF9pbnRlcnJ1cHRzW05SX01BU0tfV09SRFNdOwpAQCAtODUsNyArODUsNyBAQAogICAgICAgICBpbnQgaSA9IHNyYyA+PiA1OwogICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKICAgICAgICAgX19jbGVhcl9iaXQoc3JjLCBwcGNfY2FjaGVkX2lycV9tYXNrKTsKICAgICAgICAgaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KHNyYywgcHBjX2xvc3RfaW50ZXJydXB0cykpCiAgICAgICAgICAgICAgICAgYXRvbWljX2RlYygmcHBjX25fbG9zdF9pbnRlcnJ1cHRzKTsKQEAgLTk3LDcgKzk3LDcgQEAKICAgICAgICAgICAgICAgICBtYigpOwogICAgICAgICB9IHdoaWxlKChpbl9sZTMyKCZwbWFjX2lycV9od1tpXS0+ZW5hYmxlKSAmIGJpdCkKICAgICAgICAgICAgICAgICAhPSAocHBjX2NhY2hlZF9pcnFfbWFza1tpXSAmIGJpdCkpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwbWFjX2Fja19pcnEodW5zaWduZWQgaW50IHZpcnEpCkBAIC0xMDcsMTIgKzEwNywxMiBAQAogICAgICAgICBpbnQgaSA9IHNyYyA+PiA1OwogICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCWlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChzcmMsIHBwY19sb3N0X2ludGVycnVwdHMpKQogICAgICAgICAgICAgICAgIGF0b21pY19kZWMoJnBwY19uX2xvc3RfaW50ZXJydXB0cyk7CiAgICAgICAgIG91dF9sZTMyKCZwbWFjX2lycV9od1tpXS0+YWNrLCBiaXQpOwogICAgICAgICAodm9pZClpbl9sZTMyKCZwbWFjX2lycV9od1tpXS0+YWNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgX19wbWFjX3NldF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxX25yLCBpbnQgbm9raWNrbG9zdCkKQEAgLTE1MiwxMiArMTUyLDEyIEBACiAgICAgICAgIHVuc2lnbmVkIGxvbmcgYml0ID0gMVVMIDw8IChzcmMgJiAweDFmKTsKICAgICAgICAgaW50IGkgPSBzcmMgPj4gNTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJaWYgKChpcnFfdG9fZGVzYyh2aXJxKS0+c3RhdHVzICYgSVJRX0xFVkVMKSA9PSAwKQogCQlvdXRfbGUzMigmcG1hY19pcnFfaHdbaV0tPmFjaywgYml0KTsKICAgICAgICAgX19zZXRfYml0KHNyYywgcHBjX2NhY2hlZF9pcnFfbWFzayk7CiAgICAgICAgIF9fcG1hY19zZXRfaXJxX21hc2soc3JjLCAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTY3LDEwICsxNjcsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBzcmMgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCi0gIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogICAgICAgICBfX2NsZWFyX2JpdChzcmMsIHBwY19jYWNoZWRfaXJxX21hc2spOwogICAgICAgICBfX3BtYWNfc2V0X2lycV9tYXNrKHNyYywgMSk7Ci0gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcG1hY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQpAQCAtMTc4LDI0ICsxNzgsMjQgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBzcmMgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlfX3NldF9iaXQoc3JjLCBwcGNfY2FjaGVkX2lycV9tYXNrKTsKICAgICAgICAgX19wbWFjX3NldF9pcnFfbWFzayhzcmMsIDApOwotICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgcG1hY19yZXRyaWdnZXIodW5zaWduZWQgaW50IHZpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotICAJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlfX3BtYWNfcmV0cmlnZ2VyKGlycV9tYXBbdmlycV0uaHdpcnEpOwotICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcG1hY19waWMgPSB7Ci0JLm5hbWUJCT0gIiBQTUFDLVBJQyAiLAorCS5uYW1lCQk9ICJQTUFDLVBJQyIsCiAJLnN0YXJ0dXAJPSBwbWFjX3N0YXJ0dXBfaXJxLAogCS5tYXNrCQk9IHBtYWNfbWFza19pcnEsCiAJLmFjawkJPSBwbWFjX2Fja19pcnEsCkBAIC0yMTAsNyArMjEwLDcgQEAKIAlpbnQgaXJxLCBiaXRzOwogCWludCByYyA9IElSUV9OT05FOwogCi0gIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCWZvciAoaXJxID0gbWF4X2lycXM7IChpcnEgLT0gMzIpID49IG1heF9yZWFsX2lycXM7ICkgewogCQlpbnQgaSA9IGlycSA+PiA1OwogCQliaXRzID0gaW5fbGUzMigmcG1hY19pcnFfaHdbaV0tPmV2ZW50KSB8IHBwY19sb3N0X2ludGVycnVwdHNbaV07CkBAIC0yMjAsMTIgKzIyMCwxMiBAQAogCQlpZiAoYml0cyA9PSAwKQogCQkJY29udGludWU7CiAJCWlycSArPSBfX2lsb2cyKGJpdHMpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAkJcmMgPSBJUlFfSEFORExFRDsKIAl9Ci0gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTI0NCw3ICsyNDQsNyBAQAogCQlyZXR1cm4gTk9fSVJRX0lHTk9SRTsJLyogaWdub3JlLCBhbHJlYWR5IGhhbmRsZWQgKi8KICAgICAgICAgfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLSAgCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJZm9yIChpcnEgPSBtYXhfcmVhbF9pcnFzOyAoaXJxIC09IDMyKSA+PSAwOyApIHsKIAkJaW50IGkgPSBpcnEgPj4gNTsKIAkJYml0cyA9IGluX2xlMzIoJnBtYWNfaXJxX2h3W2ldLT5ldmVudCkgfCBwcGNfbG9zdF9pbnRlcnJ1cHRzW2ldOwpAQCAtMjU2LDcgKzI1Niw3IEBACiAJCWlycSArPSBfX2lsb2cyKGJpdHMpOwogCQlicmVhazsKIAl9Ci0gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlpZiAodW5saWtlbHkoaXJxIDwgMCkpCiAJCXJldHVybiBOT19JUlE7CiAJcmV0dXJuIGlycV9saW5lYXJfcmV2bWFwKHBtYWNfcGljX2hvc3QsIGlycSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwppbmRleCBiNDBjMjJkLi42ODk4ZTgyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKQEAgLTY5Myw5ICs2OTMsOSBAQAogI2lmZGVmIENPTkZJR19QUEM2NAogCiAJLyogaTJjIGJhc2VkIEhXIHN5bmMgb24gc29tZSBHNXMgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKIAkJc21wX2NvcmU5OV9zZXR1cF9pMmNfaHdzeW5jKG5jcHVzKTsKIAogCS8qIHBmdW5jIGJhc2VkIEhXIHN5bmMgb24gcmVjZW50IEc1cyAqLwpAQCAtNzEzLDcgKzcxMyw3IEBACiAjZWxzZSAvKiBDT05GSUdfUFBDNjQgKi8KIAogCS8qIEdQSU8gYmFzZWQgSFcgc3luYyBvbiBwcGMzMiBDb3JlOTkgKi8KLQlpZiAocG1hY190Yl9mcmVlemUgPT0gTlVMTCAmJiAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKSB7CisJaWYgKHBtYWNfdGJfZnJlZXplID09IE5VTEwgJiYgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkgewogCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdTsKIAkJY29uc3QgdTMyICp0YnByb3AgPSBOVUxMOwogCkBAIC03NTAsNyArNzUwLDcgQEAKICNlbmRpZgogCiAJLyogMzIgYml0cyBTTVAgY2FuJ3QgTkFQICovCi0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpCisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpCiAJCXBvd2Vyc2F2ZV9uYXAgPSAwOwogfQogCkBAIC04NTIsNyArODUyLDcgQEAKIAkJLyogSWYgd2UgZGlkbid0IHN0YXJ0IHRoZSBzZWNvbmQgQ1BVLCB3ZSBtdXN0IHRha2UKIAkJICogaXQgb2ZmIHRoZSBidXMKIAkJICovCi0JCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikgJiYKKwkJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSAmJgogCQkgICAgbnVtX29ubGluZV9jcHVzKCkgPCAyKQkJCiAJCQlnNV9waHlfZGlzYWJsZV9jcHUxKCk7CiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jCmluZGV4IDE4MTBlNDIuLjQ4MjExY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jCkBAIC0zMTcsOSArMzE3LDkgQEAKIAkgKiBjYWxpYnJhdGlvbi4gVGhhdCdzIGJldHRlciBzaW5jZSB0aGUgVklBIGl0c2VsZiBzZWVtcwogCSAqIHRvIGJlIHNsaWdodGx5IG9mZi4gLS1CZW5ICiAJICovCi0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MyIikgJiYKLQkgICAgIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzMiKSAmJgotCSAgICAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKQorCWlmICghb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDMiIpICYmCisJICAgICFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MzIikgJiYKKwkgICAgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkKIAkJaWYgKHZpYV9jYWxpYnJhdGVfZGVjcigpKQogCQkJcmV0dXJuOwogCkBAIC0zMjgsNyArMzI4LDcgQEAKIAkgKiBwcm9iYWJseSBpbXBsZW1lbnQgY2FsaWJyYXRpb24gYmFzZWQgb24gdGhlIEtMIHRpbWVyIG9uIHRoZXNlCiAJICogbWFjaGluZXMgYW55d2F5Li4uIC1CZW5ICiAJICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMzLDUiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzMsNSIpKQogCQlpZiAodmlhX2NhbGlicmF0ZV9kZWNyKCkpCiAJCQlyZXR1cm47CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdWRiZ19zY2MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdWRiZ19zY2MuYwppbmRleCA5NDkwMTU3Li5kODMxMzVhOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdWRiZ19zY2MuYwpAQCAtMTMyLDkgKzEzMiw5IEBACiAJCXNjY19pbml0dGFiWzFdID0gaW5fOChzY2NjKTsKIAkJb3V0Xzgoc2NjYywgMTIpOwogCQlzY2NfaW5pdHRhYlszXSA9IGluXzgoc2NjYyk7Ci0JfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMxLDEiKQotCQkgICB8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMxLDIiKQotCQkgICB8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpIHsKKwl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMSIpCisJCSAgIHx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMiIpCisJCSAgIHx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkgewogCQkvKiBYc2VydmVzIGFuZCBHNXMgZGVmYXVsdCB0byA1NzYwMCAqLwogCQlzY2NfaW5pdHRhYlsxXSA9IDA7CiAJCXNjY19pbml0dGFiWzNdID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYwppbmRleCBjY2Q4ZGQwLi43ZGY3ZmJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIEVYUE9SVF9TWU1CT0woZWVoX3N1YnN5c3RlbV9lbmFibGVkKTsKIAogLyogTG9jayB0byBhdm9pZCByYWNlcyBkdWUgdG8gbXVsdGlwbGUgcmVwb3J0cyBvZiBhbiBlcnJvciAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhjb25maXJtX2Vycm9yX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soY29uZmlybV9lcnJvcl9sb2NrKTsKIAogLyogQnVmZmVyIGZvciByZXBvcnRpbmcgc2xvdC1lcnJvci1kZXRhaWwgcnRhcyBjYWxscy4gSXRzIGhlcmUKICAqIGluIEJTUywgYW5kIG5vdCBkeW5hbWljYWxseSBhbGxvY2VkLCBzbyB0aGF0IGl0IGVuZHMgdXAgaW4KQEAgLTQzNiw3ICs0MzYsNyBAQAogdm9pZCBlZWhfY2xlYXJfc2xvdCAoc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50IG1vZGVfZmxhZykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOwogCQogCWRuID0gZmluZF9kZXZpY2VfcGUgKGRuKTsKIAkKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCVBDSV9ETihkbiktPmVlaF9tb2RlICY9IH5tb2RlX2ZsYWc7CiAJUENJX0ROKGRuKS0+ZWVoX2NoZWNrX2NvdW50ID0gMDsKIAlfX2VlaF9jbGVhcl9zbG90KGRuLCBtb2RlX2ZsYWcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCkBAIC00OTEsNyArNDkxLDcgQEAKIAkgICAgcGRuLT5lZWhfbW9kZSAmIEVFSF9NT0RFX05PQ0hFQ0spIHsKIAkJaWdub3JlZF9jaGVjaysrOwogCQlwcl9kZWJ1ZygiRUVIOiBJZ25vcmVkIGNoZWNrICgleCkgZm9yICVzICVzXG4iLAotCQkJIHBkbi0+ZWVoX21vZGUsIHBjaV9uYW1lIChkZXYpLCBkbi0+ZnVsbF9uYW1lKTsKKwkJCSBwZG4tPmVlaF9tb2RlLCBlZWhfcGNpX25hbWUoZGV2KSwgZG4tPmZ1bGxfbmFtZSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTA2LDcgKzUwNiw3IEBACiAJICogaW4gb25lIHNsb3QgbWlnaHQgcmVwb3J0IGVycm9ycyBzaW11bHRhbmVvdXNseSwgYW5kIHdlCiAJICogb25seSB3YW50IG9uZSBlcnJvciByZWNvdmVyeSByb3V0aW5lIHJ1bm5pbmcuCiAJICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CiAJcmMgPSAxOwogCWlmIChwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfSVNPTEFURUQpIHsKIAkJcGRuLT5lZWhfY2hlY2tfY291bnQgKys7CkBAIC01MTUsNyArNTE1LDcgQEAKIAkJCXByaW50ayAoS0VSTl9FUlIgIkVFSDogJWQgcmVhZHMgaWdub3JlZCBmb3IgcmVjb3ZlcmluZyBkZXZpY2UgYXQgIgogCQkJCSJsb2NhdGlvbj0lcyBkcml2ZXI9JXMgcGNpIGFkZHI9JXNcbiIsCiAJCQkJcGRuLT5lZWhfY2hlY2tfY291bnQsIGxvY2F0aW9uLAotCQkJCWRldi0+ZHJpdmVyLT5uYW1lLCBwY2lfbmFtZShkZXYpKTsKKwkJCQlkZXYtPmRyaXZlci0+bmFtZSwgZWVoX3BjaV9uYW1lKGRldikpOwogCQkJcHJpbnRrIChLRVJOX0VSUiAiRUVIOiBNaWdodCBiZSBpbmZpbml0ZSBsb29wIGluICVzIGRyaXZlclxuIiwKIAkJCQlkZXYtPmRyaXZlci0+bmFtZSk7CiAJCQlkdW1wX3N0YWNrKCk7CkBAIC01NzUsNyArNTc1LDcgQEAKIAkgKiB3aXRoIG90aGVyIGZ1bmN0aW9ucyBvbiB0aGlzIGRldmljZSwgYW5kIGZ1bmN0aW9ucyB1bmRlcgogCSAqIGJyaWRnZXMuICovCiAJZWVoX21hcmtfc2xvdCAoZG4sIEVFSF9NT0RFX0lTT0xBVEVEKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CiAKIAllZWhfc2VuZF9mYWlsdXJlX2V2ZW50IChkbiwgZGV2KTsKIApAQCAtNTg2LDcgKzU4Niw3IEBACiAJcmV0dXJuIDE7CiAKIGRuX3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xMDY0LDcgKzEwNjQsNyBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGhiLCAqbnA7CiAJc3RydWN0IGVlaF9lYXJseV9lbmFibGVfaW5mbyBpbmZvOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmNvbmZpcm1fZXJyb3JfbG9jayk7CisJcmF3X3NwaW5fbG9ja19pbml0KCZjb25maXJtX2Vycm9yX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZzbG90X2VycmJ1Zl9sb2NrKTsKIAogCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9ydGFzIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwppbmRleCBlZjhlNDU0Li5iOGQ3MGY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKQEAgLTMzNyw3ICszMzcsNyBAQAogCQlsb2NhdGlvbiA9IGxvY2F0aW9uID8gbG9jYXRpb24gOiAidW5rbm93biI7CiAJCXByaW50ayhLRVJOX0VSUiAiRUVIOiBFcnJvcjogQ2Fubm90IGZpbmQgcGFydGl0aW9uIGVuZHBvaW50ICIKIAkJICAgICAgICAgICAgICAgICJmb3IgbG9jYXRpb249JXMgcGNpIGFkZHI9JXNcbiIsCi0JCSAgICAgICAgbG9jYXRpb24sIHBjaV9uYW1lKGV2ZW50LT5kZXYpKTsKKwkJICAgICAgICBsb2NhdGlvbiwgZWVoX3BjaV9uYW1lKGV2ZW50LT5kZXYpKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0zNjgsNyArMzY4LDcgQEAKIAkJcGNpX3N0ciA9IHBjaV9uYW1lIChmcm96ZW5fcGRuLT5wY2lkZXYpOwogCQlkcnZfc3RyID0gcGNpZF9uYW1lIChmcm96ZW5fcGRuLT5wY2lkZXYpOwogCX0gZWxzZSB7Ci0JCXBjaV9zdHIgPSBwY2lfbmFtZSAoZXZlbnQtPmRldik7CisJCXBjaV9zdHIgPSBlZWhfcGNpX25hbWUoZXZlbnQtPmRldik7CiAJCWRydl9zdHIgPSBwY2lkX25hbWUgKGV2ZW50LT5kZXYpOwogCX0KIAkKQEAgLTQ3OCw5ICs0NzgsOSBAQAogCSAqIGR1ZSB0byBhY3R1YWwsIGZhaWxlZCBjYXJkcy4KIAkgKi8KIAlwcmludGsoS0VSTl9FUlIKLQkgICAiRUVIOiBQQ0kgZGV2aWNlIGF0IGxvY2F0aW9uPSVzIGRyaXZlcj0lcyBwY2kgYWRkcj0lcyBcbiIKKwkgICAiRUVIOiBQQ0kgZGV2aWNlIGF0IGxvY2F0aW9uPSVzIGRyaXZlcj0lcyBwY2kgYWRkcj0lc1xuIgogCQkiaGFzIGZhaWxlZCAlZCB0aW1lcyBpbiB0aGUgbGFzdCBob3VyICIKLQkJImFuZCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC4gXG4iCisJCSJhbmQgaGFzIGJlZW4gcGVybWFuZW50bHkgZGlzYWJsZWQuXG4iCiAJCSJQbGVhc2UgdHJ5IHJlc2VhdGluZyB0aGlzIGRldmljZSBvciByZXBsYWNpbmcgaXQuXG4iLAogCQlsb2NhdGlvbiwgZHJ2X3N0ciwgcGNpX3N0ciwgZnJvemVuX3Bkbi0+ZWVoX2ZyZWV6ZV9jb3VudCk7CiAJZ290byBwZXJtX2Vycm9yOwpAQCAtNDg4LDcgKzQ4OCw3IEBACiBoYXJkX2ZhaWw6CiAJcHJpbnRrKEtFUk5fRVJSCiAJICAgIkVFSDogVW5hYmxlIHRvIHJlY292ZXIgZnJvbSBmYWlsdXJlIG9mIFBDSSBkZXZpY2UgIgotCSAgICJhdCBsb2NhdGlvbj0lcyBkcml2ZXI9JXMgcGNpIGFkZHI9JXMgXG4iCisJICAgImF0IGxvY2F0aW9uPSVzIGRyaXZlcj0lcyBwY2kgYWRkcj0lc1xuIgogCSAgICJQbGVhc2UgdHJ5IHJlc2VhdGluZyB0aGlzIGRldmljZSBvciByZXBsYWNpbmcgaXQuXG4iLAogCQlsb2NhdGlvbiwgZHJ2X3N0ciwgcGNpX3N0cik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZXZlbnQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZXZlbnQuYwppbmRleCBkZGI4MGY1Li5lYzVkZjhmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2V2ZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jCkBAIC04MCw3ICs4MCw3IEBACiAJZWVoX21hcmtfc2xvdChldmVudC0+ZG4sIEVFSF9NT0RFX1JFQ09WRVJJTkcpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiRUVIOiBEZXRlY3RlZCBQQ0kgYnVzIGVycm9yIG9uIGRldmljZSAlc1xuIiwKLQkgICAgICAgcGNpX25hbWUoZXZlbnQtPmRldikpOworCSAgICAgICBlZWhfcGNpX25hbWUoZXZlbnQtPmRldikpOwogCiAJcGRuID0gaGFuZGxlX2VlaF9ldmVudHMoZXZlbnQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1jcHUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jCmluZGV4IDZlYTQ2OTguLmQxYjEyNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jCkBAIC0zODcsMjQgKzM4NywxMiBAQAogCiBzdGF0aWMgaW50IHBhcnNlX2NlZGVfcGFyYW1ldGVycyh2b2lkKQogewotCWludCBjYWxsX3N0YXR1czsKLQogCW1lbXNldChjZWRlX3BhcmFtZXRlcnMsIDAsIENFREVfTEFURU5DWV9QQVJBTV9NQVhfTEVOR1RIKTsKLQljYWxsX3N0YXR1cyA9IHJ0YXNfY2FsbChydGFzX3Rva2VuKCJpYm0sZ2V0LXN5c3RlbS1wYXJhbWV0ZXIiKSwgMywgMSwKLQkJCQlOVUxMLAotCQkJCUNFREVfTEFURU5DWV9UT0tFTiwKLQkJCQlfX3BhKGNlZGVfcGFyYW1ldGVycyksCi0JCQkJQ0VERV9MQVRFTkNZX1BBUkFNX01BWF9MRU5HVEgpOwotCi0JaWYgKGNhbGxfc3RhdHVzICE9IDApCi0JCXByaW50ayhLRVJOX0lORk8gIkNFREVfTEFURU5DWTogXAotCQkJJXMgJXMgRXJyb3IgY2FsbGluZyBnZXQtc3lzdGVtLXBhcmFtZXRlcigweCV4KVxuIiwKLQkJCV9fRklMRV9fLCBfX2Z1bmNfXywgY2FsbF9zdGF0dXMpOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ0VERV9MQVRFTkNZOiBcCi0JCQlnZXQtc3lzdGVtLXBhcmFtZXRlciBzdWNjZXNzZnVsLlxuIik7Ci0KLQlyZXR1cm4gY2FsbF9zdGF0dXM7CisJcmV0dXJuIHJ0YXNfY2FsbChydGFzX3Rva2VuKCJpYm0sZ2V0LXN5c3RlbS1wYXJhbWV0ZXIiKSwgMywgMSwKKwkJCSBOVUxMLAorCQkJIENFREVfTEFURU5DWV9UT0tFTiwKKwkJCSBfX3BhKGNlZGVfcGFyYW1ldGVycyksCisJCQkgQ0VERV9MQVRFTkNZX1BBUkFNX01BWF9MRU5HVEgpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBwc2VyaWVzX2NwdV9ob3RwbHVnX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbF9pbnN0LmMKaW5kZXggMmY1OGM3MS4uMWZlZmFlNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbF9pbnN0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbF9pbnN0LmMKQEAgLTEyNCw4ICsxMjQsOCBAQAogCiAJaCA9ICZfX2dldF9jcHVfdmFyKGhjYWxsX3N0YXRzKVtvcGNvZGUgLyA0XTsKIAloLT5udW1fY2FsbHMrKzsKLQloLT50Yl90b3RhbCA9IG1mdGIoKSAtIGgtPnRiX3N0YXJ0OwotCWgtPnB1cnJfdG90YWwgPSBtZnNwcihTUFJOX1BVUlIpIC0gaC0+cHVycl9zdGFydDsKKwloLT50Yl90b3RhbCArPSBtZnRiKCkgLSBoLT50Yl9zdGFydDsKKwloLT5wdXJyX3RvdGFsICs9IG1mc3ByKFNQUk5fUFVSUikgLSBoLT5wdXJyX3N0YXJ0OwogCiAJcHV0X2NwdV92YXIoaGNhbGxfc3RhdHMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jCmluZGV4IGI2ZmEzZTQuLjRiN2EwNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCByYywgaTsKIAotCXByX2RlYnVnKCJQQ0k6IFJlbW92aW5nIFBIQiAlMDR4OiUwMnguLi4gXG4iLAorCXByX2RlYnVnKCJQQ0k6IFJlbW92aW5nIFBIQiAlMDR4OiUwMnguLi5cbiIsCiAJCSBwY2lfZG9tYWluX25yKGIpLCBiLT5udW1iZXIpOwogCiAJLyogV2UgY2Fubm90IHRvIHJlbW92ZSBhIHJvb3QgYnVzIHRoYXQgaGFzIGNoaWxkcmVuICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGh5cF9kdW1wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGh5cF9kdW1wLmMKaW5kZXggMTVlYjYxMC4uMjI1YTUwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BoeXBfZHVtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9waHlwX2R1bXAuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiTWF4IGF1dG8gdGltZT0gJWRcbiIsIHBoLT5tYXh0aW1lX3RvX2F1dG8pOwogCiAJLypzZXQgY3B1IHN0YXRlIGFuZCBocHRlIHN0YXRlcyBhcyB3ZWxsIHNjcmF0Y2ggcGFkIGFyZWEgKi8KLQlwcmludGsoS0VSTl9JTkZPICIgQ1BVIEFSRUEgXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICIgQ1BVIEFSRUFcbiIpOwogCXByaW50ayhLRVJOX0lORk8gImNwdSBkdW1wX2ZsYWdzID0lZFxuIiwgcGgtPmNwdV9kYXRhLmR1bXBfZmxhZ3MpOwogCXByaW50ayhLRVJOX0lORk8gImNwdSBzb3VyY2VfdHlwZSA9JWRcbiIsIHBoLT5jcHVfZGF0YS5zb3VyY2VfdHlwZSk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiY3B1IGVycm9yX2ZsYWdzID0lZFxuIiwgcGgtPmNwdV9kYXRhLmVycm9yX2ZsYWdzKTsKQEAgLTE2MSw3ICsxNjEsNyBAQAogCXByaW50ayhLRVJOX0lORk8gImNwdSBsZW5ndGhfY29waWVkID0lbGx4XG4iLAogCQlwaC0+Y3B1X2RhdGEubGVuZ3RoX2NvcGllZCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIgSFBURSBBUkVBIFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiIEhQVEUgQVJFQVxuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiSFBURSBkdW1wX2ZsYWdzID0lZFxuIiwgcGgtPmhwdGVfZGF0YS5kdW1wX2ZsYWdzKTsKIAlwcmludGsoS0VSTl9JTkZPICJIUFRFIHNvdXJjZV90eXBlID0lZFxuIiwgcGgtPmhwdGVfZGF0YS5zb3VyY2VfdHlwZSk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiSFBURSBlcnJvcl9mbGFncyA9JWRcbiIsIHBoLT5ocHRlX2RhdGEuZXJyb3JfZmxhZ3MpOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiSFBURSBsZW5ndGhfY29waWVkID0lbGx4XG4iLAogCQlwaC0+aHB0ZV9kYXRhLmxlbmd0aF9jb3BpZWQpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiIFNSU0QgQVJFQSBcbiIpOworCXByaW50ayhLRVJOX0lORk8gIiBTUlNEIEFSRUFcbiIpOwogCXByaW50ayhLRVJOX0lORk8gIlNSU0QgZHVtcF9mbGFncyA9JWRcbiIsIHBoLT5rZXJuZWxfZGF0YS5kdW1wX2ZsYWdzKTsKIAlwcmludGsoS0VSTl9JTkZPICJTUlNEIHNvdXJjZV90eXBlID0lZFxuIiwgcGgtPmtlcm5lbF9kYXRhLnNvdXJjZV90eXBlKTsKIAlwcmludGsoS0VSTl9JTkZPICJTUlNEIGVycm9yX2ZsYWdzID0lZFxuIiwgcGgtPmtlcm5lbF9kYXRhLmVycm9yX2ZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYwppbmRleCBiNDg4NjYzLi40ZTdmODlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCkBAIC0xNDQsOCArMTQ0LDggQEAKIAkJaGNwdWlkID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChucik7CiAJCXJjID0gcGxwYXJfaGNhbGxfbm9yZXRzKEhfUFJPRCwgaGNwdWlkKTsKIAkJaWYgKHJjICE9IEhfU1VDQ0VTUykKLQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IFByb2QgdG8gd2FrZSB1cCBwcm9jZXNzb3IgJWRcCi0JCQkJCQlSZXQ9ICVsZFxuIiwgbnIsIHJjKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IFByb2QgdG8gd2FrZSB1cCBwcm9jZXNzb3IgJWQgIgorCQkJCQkJIlJldD0gJWxkXG4iLCBuciwgcmMpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKaW5kZXggZDgwZjE5M2MuLjRjYTY0MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAKIAlscGFyX3JjID0gcGxwYXJfeGlycigmcmV0dXJuX3ZhbHVlKTsKIAlpZiAobHBhcl9yYyAhPSBIX1NVQ0NFU1MpCi0JCXBhbmljKCIgYmFkIHJldHVybiBjb2RlIHhpcnIgLSByYyA9ICVseCBcbiIsIGxwYXJfcmMpOworCQlwYW5pYygiIGJhZCByZXR1cm4gY29kZSB4aXJyIC0gcmMgPSAlbHhcbiIsIGxwYXJfcmMpOwogCXJldHVybiAodW5zaWduZWQgaW50KXJldHVybl92YWx1ZTsKIH0KIApAQCAtMTkxLDExICsxOTEsNyBAQAogCXJldHVybiBkZWZhdWx0X3NlcnZlcjsKIH0KICNlbHNlCi1zdGF0aWMgaW50IGdldF9pcnFfc2VydmVyKHVuc2lnbmVkIGludCB2aXJxLCBjcHVtYXNrX3QgY3B1bWFzaywKLQkJCSAgdW5zaWduZWQgaW50IHN0cmljdF9jaGVjaykKLXsKLQlyZXR1cm4gZGVmYXVsdF9zZXJ2ZXI7Ci19CisjZGVmaW5lIGdldF9pcnFfc2VydmVyKHZpcnEsIGNwdW1hc2ssIHN0cmljdF9jaGVjaykgKGRlZmF1bHRfc2VydmVyKQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHhpY3NfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKQEAgLTQyOCw3ICs0MjQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpY3NfcGljX2RpcmVjdCA9IHsKLQkubmFtZSA9ICIgWElDUyAgICAgIiwKKwkubmFtZSA9ICJYSUNTIiwKIAkuc3RhcnR1cCA9IHhpY3Nfc3RhcnR1cCwKIAkubWFzayA9IHhpY3NfbWFza19pcnEsCiAJLnVubWFzayA9IHhpY3NfdW5tYXNrX2lycSwKQEAgLTQzNyw3ICs0MzMsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4aWNzX3BpY19scGFyID0gewotCS5uYW1lID0gIiBYSUNTICAgICAiLAorCS5uYW1lID0gIlhJQ1MiLAogCS5zdGFydHVwID0geGljc19zdGFydHVwLAogCS5tYXNrID0geGljc19tYXNrX2lycSwKIAkudW5tYXNrID0geGljc191bm1hc2tfaXJxLApAQCAtNTE0LDE1ICs1MTAsMTMgQEAKIC8qCiAgKiBYSUNTIG9ubHkgaGFzIGEgc2luZ2xlIElQSSwgc28gZW5jb2RlIHRoZSBtZXNzYWdlcyBwZXIgQ1BVCiAgKi8KLXN0cnVjdCB4aWNzX2lwaV9zdHJ1Y3QgewotICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlOwotCX0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwotCi1zdGF0aWMgc3RydWN0IHhpY3NfaXBpX3N0cnVjdCB4aWNzX2lwaV9tZXNzYWdlW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CitzdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQodW5zaWduZWQgbG9uZywgeGljc19pcGlfbWVzc2FnZSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfeGljc19kb19tZXNzYWdlKGludCBjcHUsIGludCBtc2cpCiB7Ci0Jc2V0X2JpdChtc2csICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpOworCXVuc2lnbmVkIGxvbmcgKnRndCA9ICZwZXJfY3B1KHhpY3NfaXBpX21lc3NhZ2UsIGNwdSk7CisKKwlzZXRfYml0KG1zZywgdGd0KTsKIAltYigpOwogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQogCQlscGFyX3FpcnJfaW5mbyhjcHUsIElQSV9QUklPUklUWSk7CkBAIC01NDgsMjUgKzU0MiwyMyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgeGljc19pcGlfZGlzcGF0Y2goaW50IGNwdSkKIHsKKwl1bnNpZ25lZCBsb25nICp0Z3QgPSAmcGVyX2NwdSh4aWNzX2lwaV9tZXNzYWdlLCBjcHUpOworCiAJV0FSTl9PTihjcHVfaXNfb2ZmbGluZShjcHUpKTsKIAogCW1iKCk7CS8qIG9yZGVyIG1taW8gY2xlYXJpbmcgcWlyciAqLwotCXdoaWxlICh4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ1RJT04sCi0JCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7CisJd2hpbGUgKCp0Z3QpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ1RJT04sIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19DQUxMX0ZVTkNUSU9OKTsKIAkJfQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfUkVTQ0hFRFVMRSwKLQkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX1JFU0NIRURVTEUsIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19SRVNDSEVEVUxFKTsKIAkJfQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfQ0FMTF9GVU5DX1NJTkdMRSwKLQkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ19TSU5HTEUsIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19DQUxMX0ZVTkNfU0lOR0xFKTsKIAkJfQogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHR0VSKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0RFQlVHR0VSX0JSRUFLLAotCQkJCSAgICAgICAmeGljc19pcGlfbWVzc2FnZVtjcHVdLnZhbHVlKSkgeworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfREVCVUdHRVJfQlJFQUssIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19ERUJVR0dFUl9CUkVBSyk7CiAJCX0KICNlbmRpZgpAQCAtNzg4LDkgKzc4MCwxMyBAQAogewogCXN0cnVjdCB4aWNzX2NwcHIgKm9zX2NwcHIgPSAmX19nZXRfY3B1X3Zhcih4aWNzX2NwcHIpOwogCi0JQlVHX09OKG9zX2NwcHItPmluZGV4ICE9IDApOworCS8qCisJICogd2Ugb25seSByZWFsbHkgd2FudCB0byBzZXQgdGhlIHByaW9yaXR5IHdoZW4gdGhlcmUncworCSAqIGp1c3Qgb25lIGNwcHIgdmFsdWUgb24gdGhlIHN0YWNrCisJICovCisJV0FSTl9PTihvc19jcHByLT5pbmRleCAhPSAwKTsKIAotCW9zX2NwcHItPnN0YWNrW29zX2NwcHItPmluZGV4XSA9IGNwcHI7CisJb3NfY3Bwci0+c3RhY2tbMF0gPSBjcHByOwogCiAJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCiAJCWxwYXJfY3Bwcl9pbmZvKGNwcHIpOwpAQCAtODI1LDggKzgyMSwxNCBAQAogCiB2b2lkIHhpY3NfdGVhcmRvd25fY3B1KHZvaWQpCiB7CisJc3RydWN0IHhpY3NfY3BwciAqb3NfY3BwciA9ICZfX2dldF9jcHVfdmFyKHhpY3NfY3Bwcik7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAorCS8qCisJICogd2UgaGF2ZSB0byByZXNldCB0aGUgY3BwciBpbmRleCB0byAwIGJlY2F1c2Ugd2UncmUKKwkgKiBub3QgZ29pbmcgdG8gcmV0dXJuIGZyb20gdGhlIElQSQorCSAqLworCW9zX2NwcHItPmluZGV4ID0gMDsKIAl4aWNzX3NldF9jcHVfcHJpb3JpdHkoMCk7CiAKIAkvKiBDbGVhciBhbnkgcGVuZGluZyBJUEkgcmVxdWVzdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0xLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYwppbmRleCBhNGI0MWRiLi5lY2FkMTBkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYwpAQCAtNzcsNyArNzcsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwbV9waWMgPSB7Ci0JLm5hbWUgPSAiIENQTSBQSUMgIiwKKwkubmFtZSA9ICJDUE0gUElDIiwKIAkubWFzayA9IGNwbV9tYXNrX2lycSwKIAkudW5tYXNrID0gY3BtX3VubWFza19pcnEsCiAJLmVvaSA9IGNwbV9lbmRfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jCmluZGV4IDE3MDlhYzUuLmZjZWE0ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwbTJfcGljID0gewotCS5uYW1lID0gIiBDUE0yIFNJVSAiLAorCS5uYW1lID0gIkNQTTIgU0lVIiwKIAkubWFzayA9IGNwbTJfbWFza19pcnEsCiAJLnVubWFzayA9IGNwbTJfdW5tYXNrX2lycSwKIAkuYWNrID0gY3BtMl9hY2ssCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCmluZGV4IGM2ZTExYjAuLmUwOTQzNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJLm1hc2sJCT0gbWFza19tc2lfaXJxLAogCS51bm1hc2sJCT0gdW5tYXNrX21zaV9pcnEsCiAJLmFjawkJPSBmc2xfbXNpX2VuZF9pcnEsCi0JLm5hbWUJPSAiIEZTTC1NU0kgICIsCisJLm5hbWUJCT0gIkZTTC1NU0kiLAogfTsKIAogc3RhdGljIGludCBmc2xfbXNpX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2dyYWNrbGUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZ3JhY2tsZS5jCmluZGV4IDVkYTM3YzIuLmNmMjdkZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZ3JhY2tsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZ3JhY2tsZS5jCkBAIC01Niw5ICs1Niw5IEBACiB2b2lkIF9faW5pdCBzZXR1cF9ncmFja2xlKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKIHsKIAlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgMHhmZWMwMDAwMCwgMHhmZWUwMDAwMCwgMCk7Ci0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzEsMSIpKQogCQlwcGNfcGNpX2FkZF9mbGFncyhQUENfUENJX1JFQVNTSUdOX0FMTF9CVVMpOwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpKQogCQlncmFja2xlX3NldF9sb29wX3Nub29wKGhvc2UsIDEpOwogI2lmIDAJLyogRGlzYWJsZWQgZm9yIG5vdywgSFcgcHJvYmxlbXMgPz8/ICovCiAJZ3JhY2tsZV9zZXRfc3RnKGhvc2UsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jCmluZGV4IDBhNTVkYjguLjYzMjNlNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2k4MjU5LmMKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgY2FjaGVkX0ExIChjYWNoZWRfODI1OVswXSkKICNkZWZpbmUgY2FjaGVkXzIxIChjYWNoZWRfODI1OVsxXSkKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhpODI1OV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGk4MjU5X2xvY2spOwogCiBzdGF0aWMgc3RydWN0IGlycV9ob3N0ICppODI1OV9ob3N0OwogCkBAIC00Miw3ICs0Miw3IEBACiAJaWYgKHBjaV9pbnRhY2spCiAJCWlycSA9IHJlYWRiKHBjaV9pbnRhY2spOwogCWVsc2UgewotCQlzcGluX2xvY2soJmk4MjU5X2xvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZpODI1OV9sb2NrKTsKIAkJbG9jayA9IDE7CiAKIAkJLyogUGVyZm9ybSBhbiBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgY3ljbGUgb24gY29udHJvbGxlciAxLiAqLwpAQCAtNzQsNyArNzQsNyBAQAogCQlpcnEgPSBOT19JUlE7CiAKIAlpZiAobG9jaykKLQkJc3Bpbl91bmxvY2soJmk4MjU5X2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJmk4MjU5X2xvY2spOwogCXJldHVybiBpcnE7CiB9CiAKQEAgLTgyLDcgKzgyLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIAlpZiAoaXJxX25yID4gNykgewogCQljYWNoZWRfQTEgfD0gMSA8PCAoaXJxX25yLTgpOwogCQlpbmIoMHhBMSk7IAkvKiBEVU1NWSAqLwpAQCAtOTUsNyArOTUsNyBAQAogCQlvdXRiKGNhY2hlZF8yMSwgMHgyMSk7CiAJCW91dGIoMHgyMCwgMHgyMCk7CS8qIE5vbi1zcGVjaWZpYyBFT0kgKi8KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGk4MjU5X3NldF9pcnFfbWFzayhpbnQgaXJxX25yKQpAQCAtMTEwLDEzICsxMTAsMTMgQEAKIAogCXByX2RlYnVnKCJpODI1OV9tYXNrX2lycSglZClcbiIsIGlycV9ucik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlfbG9jaywgZmxhZ3MpOwogCWlmIChpcnFfbnIgPCA4KQogCQljYWNoZWRfMjEgfD0gMSA8PCBpcnFfbnI7CiAJZWxzZQogCQljYWNoZWRfQTEgfD0gMSA8PCAoaXJxX25yLTgpOwogCWk4MjU5X3NldF9pcnFfbWFzayhpcnFfbnIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBpODI1OV91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCkBAIC0xMjUsMTcgKzEyNSwxNyBAQAogCiAJcHJfZGVidWcoImk4MjU5X3VubWFza19pcnEoJWQpXG4iLCBpcnFfbnIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIAlpZiAoaXJxX25yIDwgOCkKIAkJY2FjaGVkXzIxICY9IH4oMSA8PCBpcnFfbnIpOwogCWVsc2UKIAkJY2FjaGVkX0ExICY9IH4oMSA8PCAoaXJxX25yLTgpKTsKIAlpODI1OV9zZXRfaXJxX21hc2soaXJxX25yKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpODI1OV9waWMgPSB7Ci0JLm5hbWUJCT0gIiBpODI1OSAgICAiLAorCS5uYW1lCQk9ICJpODI1OSIsCiAJLm1hc2sJCT0gaTgyNTlfbWFza19pcnEsCiAJLmRpc2FibGUJPSBpODI1OV9tYXNrX2lycSwKIAkudW5tYXNrCQk9IGk4MjU5X3VubWFza19pcnEsCkBAIC0yNDEsNyArMjQxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogaW5pdGlhbGl6ZSB0aGUgY29udHJvbGxlciAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OV9sb2NrLCBmbGFncyk7CiAKIAkvKiBNYXNrIGFsbCBmaXJzdCAqLwogCW91dGIoMHhmZiwgMHhBMSk7CkBAIC0yNzMsNyArMjczLDcgQEAKIAlvdXRiKGNhY2hlZF9BMSwgMHhBMSk7CiAJb3V0YihjYWNoZWRfMjEsIDB4MjEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7CiAKIAkvKiBjcmVhdGUgYSBsZWdhY3kgaG9zdCAqLwogCWk4MjU5X2hvc3QgPSBpcnFfYWxsb2NfaG9zdChub2RlLCBJUlFfSE9TVF9NQVBfTEVHQUNZLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwppbmRleCAyOGNkZGRkLi5kN2I5YjljIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwpAQCAtMzIsNyArMzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlwaWMgKiBwcmltYXJ5X2lwaWM7CiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlwaWNfbGV2ZWxfaXJxX2NoaXAsIGlwaWNfZWRnZV9pcnFfY2hpcDsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXBpY19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGlwaWNfbG9jayk7CiAKIHN0YXRpYyBzdHJ1Y3QgaXBpY19pbmZvIGlwaWNfaW5mb1tdID0gewogCVsxXSA9IHsKQEAgLTUzMCwxMyArNTMwLDEzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogCiAJdGVtcCA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5tYXNrKTsKIAl0ZW1wIHw9ICgxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOwogCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10ubWFzaywgdGVtcCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBpY19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwaWNfbWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCkBAIC01NDYsNyArNTQ2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXBpY19sb2NrLCBmbGFncyk7CiAKIAl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLm1hc2spOwogCXRlbXAgJj0gfigxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOwpAQCAtNTU2LDcgKzU1Niw3IEBACiAJICogZm9yIG5lYXJseSBhbGwgY2FzZXMuICovCiAJbWIoKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgaXBpY19hY2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQpAQCAtNTY2LDcgKzU2Niw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogCiAJdGVtcCA9IDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KTsKIAlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLmFjaywgdGVtcCk7CkBAIC01NzUsNyArNTc1LDcgQEAKIAkgKiBmb3IgbmVhcmx5IGFsbCBjYXNlcy4gKi8KIAltYigpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBpcGljX21hc2tfaXJxX2FuZF9hY2sodW5zaWduZWQgaW50IHZpcnEpCkBAIC01ODUsNyArNTg1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXBpY19sb2NrLCBmbGFncyk7CiAKIAl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLm1hc2spOwogCXRlbXAgJj0gfigxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOwpAQCAtNTk4LDcgKzU5OCw3IEBACiAJICogZm9yIG5lYXJseSBhbGwgY2FzZXMuICovCiAJbWIoKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBpcGljX3NldF9pcnFfdHlwZSh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKQEAgLTY2MCw3ICs2NjAsNyBAQAogCiAvKiBsZXZlbCBpbnRlcnJ1cHRzIGFuZCBlZGdlIGludGVycnVwdHMgaGF2ZSBkaWZmZXJlbnQgYWNrIG9wZXJhdGlvbnMgKi8KIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXBpY19sZXZlbF9pcnFfY2hpcCA9IHsKLQkubmFtZQkJPSAiIElQSUMgICIsCisJLm5hbWUJCT0gIklQSUMiLAogCS51bm1hc2sJCT0gaXBpY191bm1hc2tfaXJxLAogCS5tYXNrCQk9IGlwaWNfbWFza19pcnEsCiAJLm1hc2tfYWNrCT0gaXBpY19tYXNrX2lycSwKQEAgLTY2OCw3ICs2NjgsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcGljX2VkZ2VfaXJxX2NoaXAgPSB7Ci0JLm5hbWUJCT0gIiBJUElDICAiLAorCS5uYW1lCQk9ICJJUElDIiwKIAkudW5tYXNrCQk9IGlwaWNfdW5tYXNrX2lycSwKIAkubWFzawkJPSBpcGljX21hc2tfaXJxLAogCS5tYXNrX2Fjawk9IGlwaWNfbWFza19pcnFfYW5kX2FjaywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4X3BpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKaW5kZXggNjliZDZmNC4uOGMyN2QyNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKQEAgLTk0LDcgKzk0LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGM4eHhfcGljID0gewotCS5uYW1lID0gIiBNUEM4WFggU0lVICIsCisJLm5hbWUgPSAiTVBDOFhYIFNJVSIsCiAJLnVubWFzayA9IG1wYzh4eF91bm1hc2tfaXJxLAogCS5tYXNrID0gbXBjOHh4X21hc2tfaXJxLAogCS5hY2sgPSBtcGM4eHhfYWNrLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwppbmRleCA0NzBkYzZjMS4uMzM5ZThhMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBtcGljICptcGljczsKIHN0YXRpYyBzdHJ1Y3QgbXBpYyAqbXBpY19wcmltYXJ5Owotc3RhdGljIERFRklORV9TUElOTE9DSyhtcGljX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sobXBpY19sb2NrKTsKIAogI2lmZGVmIENPTkZJR19QUEMzMgkvKiBYWFggZm9yIG5vdyAqLwogI2lmZGVmIENPTkZJR19JUlFfQUxMX0NQVVMKQEAgLTM0NywxMCArMzQ3LDEwIEBACiAJCXVuc2lnbmVkIGludCBtYXNrID0gMVUgPDwgKGZpeHVwLT5pbmRleCAmIDB4MWYpOwogCQl3cml0ZWwobWFzaywgZml4dXAtPmFwcGxlYmFzZSArIHNvZmYpOwogCX0gZWxzZSB7Ci0JCXNwaW5fbG9jaygmbXBpYy0+Zml4dXBfbG9jayk7CisJCXJhd19zcGluX2xvY2soJm1waWMtPmZpeHVwX2xvY2spOwogCQl3cml0ZWIoMHgxMSArIDIgKiBmaXh1cC0+aW5kZXgsIGZpeHVwLT5iYXNlICsgMik7CiAJCXdyaXRlbChmaXh1cC0+ZGF0YSwgZml4dXAtPmJhc2UgKyA0KTsKLQkJc3Bpbl91bmxvY2soJm1waWMtPmZpeHVwX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJm1waWMtPmZpeHVwX2xvY2spOwogCX0KIH0KIApAQCAtMzY2LDcgKzM2Niw3IEBACiAKIAlEQkcoInN0YXJ0dXBfaHRfaW50ZXJydXB0KDB4JXgsIDB4JXgpIGluZGV4OiAlZFxuIiwKIAkgICAgc291cmNlLCBpcnFmbGFncywgZml4dXAtPmluZGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBpYy0+Zml4dXBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbXBpYy0+Zml4dXBfbG9jaywgZmxhZ3MpOwogCS8qIEVuYWJsZSBhbmQgY29uZmlndXJlICovCiAJd3JpdGViKDB4MTAgKyAyICogZml4dXAtPmluZGV4LCBmaXh1cC0+YmFzZSArIDIpOwogCXRtcCA9IHJlYWRsKGZpeHVwLT5iYXNlICsgNCk7CkBAIC0zNzQsNyArMzc0LDcgQEAKIAlpZiAoaXJxZmxhZ3MgJiBJUlFfTEVWRUwpCiAJCXRtcCB8PSAweDIyOwogCXdyaXRlbCh0bXAsIGZpeHVwLT5iYXNlICsgNCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpYy0+Zml4dXBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CiAKICNpZmRlZiBDT05GSUdfUE0KIAkvKiB1c2UgdGhlIGxvd2VzdCBiaXQgaW52ZXJ0ZWQgdG8gdGhlIGFjdHVhbCBIVywKQEAgLTM5NiwxMiArMzk2LDEyIEBACiAJREJHKCJzaHV0ZG93bl9odF9pbnRlcnJ1cHQoMHgleCwgMHgleClcbiIsIHNvdXJjZSwgaXJxZmxhZ3MpOwogCiAJLyogRGlzYWJsZSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CiAJd3JpdGViKDB4MTAgKyAyICogZml4dXAtPmluZGV4LCBmaXh1cC0+YmFzZSArIDIpOwogCXRtcCA9IHJlYWRsKGZpeHVwLT5iYXNlICsgNCk7CiAJdG1wIHw9IDE7CiAJd3JpdGVsKHRtcCwgZml4dXAtPmJhc2UgKyA0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWMtPmZpeHVwX2xvY2ssIGZsYWdzKTsKIAogI2lmZGVmIENPTkZJR19QTQogCS8qIHVzZSB0aGUgbG93ZXN0IGJpdCBpbnZlcnRlZCB0byB0aGUgYWN0dWFsIEhXLApAQCAtNTE1LDcgKzUxNSw3IEBACiAJQlVHX09OKG1waWMtPmZpeHVwcyA9PSBOVUxMKTsKIAogCS8qIEluaXQgc3BpbmxvY2sgKi8KLQlzcGluX2xvY2tfaW5pdCgmbXBpYy0+Zml4dXBfbG9jayk7CisJcmF3X3NwaW5fbG9ja19pbml0KCZtcGljLT5maXh1cF9sb2NrKTsKIAogCS8qIE1hcCBVMyBjb25maWcgc3BhY2UuIFdlIGFzc3VtZSBhbGwgSU8tQVBJQ3MgYXJlIG9uIHRoZSBwcmltYXJ5IGJ1cwogCSAqIHNvIHdlIG9ubHkgbmVlZCB0byBtYXAgNjRrQi4KQEAgLTU3MywxMiArNTczLDEyIEBACiAKIAlpZiAoY3B1bWFza19lcXVhbChtYXNrLCBjcHVfYWxsX21hc2spKSB7CiAJCXN0YXRpYyBpbnQgaXJxX3JvdmVyOwotCQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlycV9yb3Zlcl9sb2NrKTsKKwkJc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soaXJxX3JvdmVyX2xvY2spOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCS8qIFJvdW5kLXJvYmluIGRpc3RyaWJ1dGlvbi4uLiAqLwogCWRvX3JvdW5kX3JvYmluOgotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX3JvdmVyX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfcm92ZXJfbG9jaywgZmxhZ3MpOwogCiAJCXdoaWxlICghY3B1X29ubGluZShpcnFfcm92ZXIpKSB7CiAJCQlpZiAoKytpcnFfcm92ZXIgPj0gTlJfQ1BVUykKQEAgLTU5MCw3ICs1OTAsNyBAQAogCQkJCWlycV9yb3ZlciA9IDA7CiAJCX0gd2hpbGUgKCFjcHVfb25saW5lKGlycV9yb3ZlcikpOwogCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9yb3Zlcl9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfcm92ZXJfbG9jaywgZmxhZ3MpOwogCX0gZWxzZSB7CiAJCWNwdWlkID0gY3B1bWFza19maXJzdF9hbmQobWFzaywgY3B1X29ubGluZV9tYXNrKTsKIAkJaWYgKGNwdWlkID49IG5yX2NwdV9pZHMpCkBAIC0xMzY4LDE0ICsxMzY4LDE0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOwogCXYgPSBtcGljX3JlYWQobXBpYy0+Z3JlZ3MsIE1QSUNfR1JFR19HTE9CQUxfQ09ORl8xKTsKIAlpZiAoZW5hYmxlKQogCQl2IHw9IE1QSUNfR1JFR19HTE9CQUxfQ09ORl8xX1NJRTsKIAllbHNlCiAJCXYgJj0gfk1QSUNfR1JFR19HTE9CQUxfQ09ORl8xX1NJRTsKIAltcGljX3dyaXRlKG1waWMtPmdyZWdzLCBNUElDX0dSRUdfR0xPQkFMX0NPTkZfMSwgdik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIG1waWNfaXJxX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcHJpKQpAQCAtMTM4OCw3ICsxMzg4LDcgQEAKIAlpZiAoIW1waWMpCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOwogCWlmIChtcGljX2lzX2lwaShtcGljLCBpcnEpKSB7CiAJCXJlZyA9IG1waWNfaXBpX3JlYWQoc3JjIC0gbXBpYy0+aXBpX3ZlY3NbMF0pICYKIAkJCX5NUElDX1ZFQ1BSSV9QUklPUklUWV9NQVNLOwpAQCAtMTQwMCw3ICsxNDAwLDcgQEAKIAkJbXBpY19pcnFfd3JpdGUoc3JjLCBNUElDX0lORk8oSVJRX1ZFQ1RPUl9QUkkpLAogCQkJICAgICAgIHJlZyB8IChwcmkgPDwgTVBJQ19WRUNQUklfUFJJT1JJVFlfU0hJRlQpKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIG1waWNfc2V0dXBfdGhpc19jcHUodm9pZCkKQEAgLTE0MTUsNyArMTQxNSw3IEBACiAKIAlEQkcoIiVzOiBzZXR1cF90aGlzX2NwdSglZClcbiIsIG1waWMtPm5hbWUsIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOwogCiAgCS8qIGxldCB0aGUgbXBpYyBrbm93IHdlIHdhbnQgaW50cnMuIGRlZmF1bHQgYWZmaW5pdHkgaXMgMHhmZmZmZmZmZgogCSAqIHVudGlsIGNoYW5nZWQgdmlhIC9wcm9jLiBUaGF0J3MgaG93IGl0J3MgZG9uZSBvbiB4ODYuIElmIHdlIHdhbnQKQEAgLTE0MzEsNyArMTQzMSw3IEBACiAJLyogU2V0IGN1cnJlbnQgcHJvY2Vzc29yIHByaW9yaXR5IHRvIDAgKi8KIAltcGljX2NwdV93cml0ZShNUElDX0lORk8oQ1BVX0NVUlJFTlRfVEFTS19QUkkpLCAwKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljX2xvY2ssIGZsYWdzKTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiB9CiAKQEAgLTE0NjAsNyArMTQ2MCw3IEBACiAJQlVHX09OKG1waWMgPT0gTlVMTCk7CiAKIAlEQkcoIiVzOiB0ZWFyZG93bl90aGlzX2NwdSglZClcbiIsIG1waWMtPm5hbWUsIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKIAogCS8qIGxldCB0aGUgbXBpYyBrbm93IHdlIGRvbid0IHdhbnQgaW50cnMuICAqLwogCWZvciAoaSA9IDA7IGkgPCBtcGljLT5udW1fc291cmNlcyA7IGkrKykKQEAgLTE0NzQsNyArMTQ3NCw3IEBACiAJICovCiAJbXBpY19lb2kobXBpYyk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CiB9CiAKIApAQCAtMTU3NSw3ICsxNTc1LDcgQEAKIAlpbnQgaTsKIAlCVUdfT04obXBpYyA9PSBOVUxMKTsKIAotCXByaW50ayhLRVJOX0lORk8gIm1waWM6IHJlcXVlc3RpbmcgSVBJcyAuLi4gXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJtcGljOiByZXF1ZXN0aW5nIElQSXMuLi5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgdmlwaSA9IGlycV9jcmVhdGVfbWFwcGluZyhtcGljLT5pcnFob3N0LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMKaW5kZXggMGY2YWIwNi4uM2I2YTlhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jCkBAIC02MCw3ICs2MCw3IEBACiAJLmVvaQkJPSBtcGljX2VuZF9pcnEsCiAJLnNldF90eXBlCT0gbXBpY19zZXRfaXJxX3R5cGUsCiAJLnNldF9hZmZpbml0eQk9IG1waWNfc2V0X2FmZmluaXR5LAotCS5uYW1lCQk9ICJQQVNFTUktTVNJICIsCisJLm5hbWUJCT0gIlBBU0VNSS1NU0kiLAogfTsKIAogc3RhdGljIGludCBwYXNlbWlfbXNpX2NoZWNrX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMsIGludCB0eXBlKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX2Rldi5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX2Rldi5jCmluZGV4IGI2YmQ3NzUuLjMxYWNkM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9kZXYuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfZGV2LmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KIApAQCAtMTg5LDYgKzE5MCw3IEBACiAJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhNUFNDX0NUTFJfTkFNRSwgcG9ydF9udW1iZXIpOwogCWlmICghcGRldikKIAkJcmV0dXJuIC1FTk9NRU07CisJcGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAogCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHIsIDUpOwogCWlmIChlcnIpCkBAIC0zMDIsNiArMzA0LDcgQEAKIAlpZiAoIXBkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJcGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCByLCAxKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYwppbmRleCA2ZmY5ZDcxLi44YWEzMzAyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYwpAQCAtNTY5LDcgKzU2OSw4IEBACiAJaG9zZS0+bGFzdF9idXNubyA9IGJ1c19yYW5nZSA/IGJ1c19yYW5nZVsxXSA6IDB4ZmY7CiAKIAkvKiBTZXR1cCBjb25maWcgc3BhY2UgKi8KLQlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgcnNyY19jZmcuc3RhcnQsIHJzcmNfY2ZnLnN0YXJ0ICsgMHg0LCAwKTsKKwlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgcnNyY19jZmcuc3RhcnQsIHJzcmNfY2ZnLnN0YXJ0ICsgMHg0LAorCQkJCQlQUENfSU5ESVJFQ1RfVFlQRV9TRVRfQ0ZHX1RZUEUpOwogCiAJLyogRGlzYWJsZSBhbGwgd2luZG93cyAqLwogCXdyaXRlbCgwLCByZWcgKyBQQ0lYMF9QT00wU0EpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfc29jLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9zb2MuYwppbmRleCA1YjMyYWRjLi41YzAxNDM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9zb2MuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9zb2MuYwpAQCAtMTc0LDcgKzE3NCw4IEBACiAJCXwgTDJDX0NGR19DUElNIHwgTDJDX0NGR19UUElNIHwgTDJDX0NGR19MSU0gfCBMMkNfQ0ZHX1NNQ007CiAKIAkvKiBDaGVjayBmb3IgNDYwRVgvR1Qgc3BlY2lhbCBoYW5kbGluZyAqLwotCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImlibSxsMi1jYWNoZS00NjBleCIpKQorCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImlibSxsMi1jYWNoZS00NjBleCIpIHx8CisJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLGwyLWNhY2hlLTQ2MGd0IikpCiAJCXIgfD0gTDJDX0NGR19SREJXOwogCiAJbXRkY3IoZGNyYmFzZV9sMmMgKyBEQ1JOX0wyQzBfQ0ZHLCByKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pYy5jCmluZGV4IDJhY2M5MjguLmQ5MjdkYTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYwpAQCAtMjM3LDcgKzIzNyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcWVfaWNfaXJxX2NoaXAgPSB7Ci0JLm5hbWUgPSAiIFFFSUMgICIsCisJLm5hbWUgPSAiUUVJQyIsCiAJLnVubWFzayA9IHFlX2ljX3VubWFza19pcnEsCiAJLm1hc2sgPSBxZV9pY19tYXNrX2lycSwKIAkubWFza19hY2sgPSBxZV9pY19tYXNrX2lycSwKQEAgLTI1Niw3ICsyNTYsNyBAQAogCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDsKIAogCWlmIChxZV9pY19pbmZvW2h3XS5tYXNrID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBtYXAgcmVzZXJ2ZWQgSVJRIFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgbWFwIHJlc2VydmVkIElSUVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkvKiBEZWZhdWx0IGNoaXAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2lvLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pby5jCmluZGV4IDdjODc0NjAuLjc3ZTQ5MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2lvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaW8uYwpAQCAtMTU3LDEzICsxNTcsMTMgQEAKIAljb25zdCB1bnNpZ25lZCBpbnQgKnBpb19tYXA7CiAKIAlpZiAocGFyX2lvID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwYXJfaW8gbm90IGluaXRpYWxpemVkIFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAicGFyX2lvIG5vdCBpbml0aWFsaXplZFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlwaCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBpby1oYW5kbGUiLCBOVUxMKTsKIAlpZiAocGggPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInBpby1oYW5kbGUgbm90IGF2YWlsYWJsZSBcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInBpby1oYW5kbGUgbm90IGF2YWlsYWJsZVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE3MSwxMiArMTcxLDEyIEBACiAKIAlwaW9fbWFwID0gb2ZfZ2V0X3Byb3BlcnR5KHBpbywgInBpby1tYXAiLCAmcGlvX21hcF9sZW4pOwogCWlmIChwaW9fbWFwID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwaW8tbWFwIGlzIG5vdCBzZXQhIFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAicGlvLW1hcCBpcyBub3Qgc2V0IVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJcGlvX21hcF9sZW4gLz0gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAJaWYgKChwaW9fbWFwX2xlbiAlIDYpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwaW8tbWFwIGZvcm1hdCB3cm9uZyEgXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJwaW8tbWFwIGZvcm1hdCB3cm9uZyFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3VpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi91aWMuYwppbmRleCA2ZjIyMGE5Li4wMDM4ZmI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3VpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdWljLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHVpY19pcnFfY2hpcCA9IHsKLQkubmFtZQkJPSAiIFVJQyAgIiwKKwkubmFtZQkJPSAiVUlDIiwKIAkudW5tYXNrCQk9IHVpY191bm1hc2tfaXJxLAogCS5tYXNrCQk9IHVpY19tYXNrX2lycSwKICAJLm1hc2tfYWNrCT0gdWljX21hc2tfYWNrX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwppbmRleCA0ZTYxNTJjLi44YmFkN2Q1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCkBAIC02MSw3ICs2MSw3IEBACiBzdGF0aWMgaW50IHhtb25fZ2F0ZTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGluX3htb24gPSAwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5feG1vbiBfX3JlYWRfbW9zdGx5ID0gMDsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYWRyczsKIHN0YXRpYyBpbnQgc2l6ZSA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IGM4MDIzNTIuLjBkOGNkOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC01NCw2ICs1NCw5IEBACiAJZGVwZW5kcyBvbiBCVUcKIAlkZWZhdWx0IHkKIAorY29uZmlnIEdFTkVSSUNfQlVHX1JFTEFUSVZFX1BPSU5URVJTCisJZGVmX2Jvb2wgeQorCiBjb25maWcgTk9fSU9NRU0KIAlkZWZfYm9vbCB5CiAKQEAgLTg3LDYgKzkwLDcgQEAKIAlzZWxlY3QgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTCiAJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKKwlzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJCiAJc2VsZWN0IEhBVkVfREVGQVVMVF9OT19TUElOX01VVEVYRVMKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBIQVZFX0tQUk9CRVMKQEAgLTk1LDYgKzk5LDkgQEAKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCXNlbGVjdCBJTklUX0FMTF9QT1NTSUJMRQogCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCisJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKKwlzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDIKKwlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQQogCXNlbGVjdCBBUkNIX0lOTElORV9TUElOX1RSWUxPQ0sKIAlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9UUllMT0NLX0JICiAJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fTE9DSwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcuZGVidWcgYi9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZwppbmRleCAyMjgzOTMzLi40NWUwYzYxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZwpAQCAtNiw0ICs2LDE3IEBACiAKIHNvdXJjZSAibGliL0tjb25maWcuZGVidWciCiAKK2NvbmZpZyBERUJVR19TVFJJQ1RfVVNFUl9DT1BZX0NIRUNLUworCWJvb2wgIlN0cmljdCB1c2VyIGNvcHkgc2l6ZSBjaGVja3MiCisJLS0taGVscC0tLQorCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gdHVybnMgYSBjZXJ0YWluIHNldCBvZiBzYW5pdHkgY2hlY2tzIGZvciB1c2VyCisJICBjb3B5IG9wZXJhdGlvbnMgaW50byBjb21waWxlIHRpbWUgd2FybmluZ3MuCisKKwkgIFRoZSBjb3B5X2Zyb21fdXNlcigpIGV0YyBjaGVja3MgYXJlIHRoZXJlIHRvIGhlbHAgdGVzdCBpZiB0aGVyZQorCSAgYXJlIHN1ZmZpY2llbnQgc2VjdXJpdHkgY2hlY2tzIG9uIHRoZSBsZW5ndGggYXJndW1lbnQgb2YKKwkgIHRoZSBjb3B5IG9wZXJhdGlvbiwgYnkgaGF2aW5nIGdjYyBwcm92ZSB0aGF0IHRoZSBhcmd1bWVudCBpcworCSAgd2l0aGluIGJvdW5kcy4KKworCSAgSWYgdW5zdXJlLCBvciBpZiB5b3UgcnVuIGFuIG9sZGVyIChwcmUgNC40KSBnY2MsIHNheSBOLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvTWFrZWZpbGUgYi9hcmNoL3MzOTAvTWFrZWZpbGUKaW5kZXggZmM4ZmIyMC4uMGRhMTA3NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9NYWtlZmlsZQpAQCAtMTQsNiArMTQsNyBAQAogIwogCiBpZm5kZWYgQ09ORklHXzY0QklUCitMRF9CRkQJCTo9IGVsZjMyLXMzOTAKIExERkxBR1MJCTo9IC1tIGVsZl9zMzkwCiBLQlVJTERfQ0ZMQUdTCSs9IC1tMzEKIEtCVUlMRF9BRkxBR1MJKz0gLW0zMQpAQCAtMjEsNiArMjIsNyBAQAogU1RBQ0tfU0laRQk6PSA4MTkyCiBDSEVDS0ZMQUdTCSs9IC1EX19zMzkwX18gLW1zaXplLWxvbmcKIGVsc2UKK0xEX0JGRAkJOj0gZWxmNjQtczM5MAogTERGTEFHUwkJOj0gLW0gZWxmNjRfczM5MAogTU9ERkxBR1MJKz0gLWZwaWMgLURfX1BJQ19fCiBLQlVJTERfQ0ZMQUdTCSs9IC1tNjQKQEAgLTMwLDYgKzMyLDggQEAKIENIRUNLRkxBR1MJKz0gLURfX3MzOTBfXyAtRF9fczM5MHhfXwogZW5kaWYKIAorZXhwb3J0IExEX0JGRAorCiBjZmxhZ3MtJChDT05GSUdfTUFSQ0hfRzUpICAgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9ZzUpCiBjZmxhZ3MtJChDT05GSUdfTUFSQ0hfWjkwMCkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9ejkwMCkKIGNmbGFncy0kKENPTkZJR19NQVJDSF9aOTkwKSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD16OTkwKQpAQCAtODUsNyArODksOSBAQAogT0JKQ09QWUZMQUdTCTo9IC1PIGJpbmFyeQogTERGTEFHU192bWxpbnV4IDo9IC1lIHN0YXJ0CiAKLWhlYWQteQkJOj0gYXJjaC9zMzkwL2tlcm5lbC9oZWFkLm8gYXJjaC9zMzkwL2tlcm5lbC9pbml0X3Rhc2subworaGVhZC15CQk6PSBhcmNoL3MzOTAva2VybmVsL2hlYWQubworaGVhZC15CQkrPSBhcmNoL3MzOTAva2VybmVsLyQoaWYgJChDT05GSUdfNjRCSVQpLGhlYWQ2NC5vLGhlYWQzMS5vKQoraGVhZC15CQkrPSBhcmNoL3MzOTAva2VybmVsL2luaXRfdGFzay5vCiAKIGNvcmUteQkJKz0gYXJjaC9zMzkwL21tLyBhcmNoL3MzOTAva2VybmVsLyBhcmNoL3MzOTAvY3J5cHRvLyBcCiAJCSAgIGFyY2gvczM5MC9hcHBsZGF0YS8gYXJjaC9zMzkwL2h5cGZzLyBhcmNoL3MzOTAva3ZtLwpAQCAtOTksMTIgKzEwNSwxMiBAQAogCiBib290CQk6PSBhcmNoL3MzOTAvYm9vdAogCi1hbGw6IGltYWdlCithbGw6IGltYWdlIGJ6SW1hZ2UKIAogaW5zdGFsbDogdm1saW51eAogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgJEAKIAotaW1hZ2U6IHZtbGludXgKK2ltYWdlIGJ6SW1hZ2U6IHZtbGludXgKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpICQoYm9vdCkvJEAKIAogemZjcGR1bXA6CkBAIC0xMTYsNCArMTIyLDUgQEAKICMgRG9uJ3QgdXNlIHRhYnMgaW4gZWNobyBhcmd1bWVudHMKIGRlZmluZSBhcmNoaGVscAogICBlY2hvICAnKiBpbWFnZSAgICAgICAgICAgLSBLZXJuZWwgaW1hZ2UgZm9yIElQTCAoJChib290KS9pbWFnZSknCisgIGVjaG8JJyogYnpJbWFnZSAgICAgICAgIC0gQ29tcHJlc3NlZCBrZXJuZWwgaW1hZ2UgZm9yIElQTCAoJChib290KS9iekltYWdlKScKIGVuZGVmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZSBiL2FyY2gvczM5MC9ib290L01ha2VmaWxlCmluZGV4IDRkOTdlZWYuLjg4MDBjZjA5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZQpAQCAtOSwxMCArOSwxOCBAQAogRVhUUkFfQ0ZMQUdTICA6PSAtRENPTVBJTEVfVkVSU0lPTj0kKENPTVBJTEVfVkVSU0lPTikgLWdzdGFicyAtSS4KIAogdGFyZ2V0cyA6PSBpbWFnZQordGFyZ2V0cyArPSBiekltYWdlCitzdWJkaXItIDo9IGNvbXByZXNzZWQKIAogJChvYmopL2ltYWdlOiB2bWxpbnV4IEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKIAorJChvYmopL2J6SW1hZ2U6ICQob2JqKS9jb21wcmVzc2VkL3ZtbGludXggRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQorCiskKG9iaikvY29tcHJlc3NlZC92bWxpbnV4OiBGT1JDRQorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQob2JqKS9jb21wcmVzc2VkICRACisKIGluc3RhbGw6ICQoQ09ORklHVVJFKSAkKG9iaikvaW1hZ2UKIAlzaCAteCAgJChzcmN0cmVlKS8kKG9iaikvaW5zdGFsbC5zaCAkKEtFUk5FTFJFTEVBU0UpICQob2JqKS9pbWFnZSBcCiAJICAgICAgU3lzdGVtLm1hcCBLZXJudHlwZXMgIiQoSU5TVEFMTF9QQVRIKSIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNGE2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC0wLDAgKzEsNjAgQEAKKyMKKyMgbGludXgvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorIworIyBjcmVhdGUgYSBjb21wcmVzc2VkIHZtbGludXggaW1hZ2UgZnJvbSB0aGUgb3JpZ2luYWwgdm1saW51eAorIworCitCSVRTIDo9ICQoaWYgJChDT05GSUdfNjRCSVQpLDY0LDMxKQorCit0YXJnZXRzCTo9IHZtbGludXgubGRzIHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIFwKKwkgICB2bWxpbnV4LmJpbi5sem1hIG1pc2MubyBwaWdneS5vIHNpemVzLmggaGVhZCQoQklUUykubworCitLQlVJTERfQ0ZMQUdTIDo9IC1tJChCSVRTKSAtRF9fS0VSTkVMX18gJChMSU5VWF9JTkNMVURFKSAtTzIKK0tCVUlMRF9DRkxBR1MgKz0gJChjZmxhZ3MteSkKK0tCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtbXBhY2tlZC1zdGFjaykKK0tCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtZmZyZWVzdGFuZGluZykKKworR0NPVl9QUk9GSUxFIDo9IG4KKworT0JKRUNUUyA6PSAkKGFkZHByZWZpeCAkKG9ianRyZWUpL2FyY2gvczM5MC9rZXJuZWwvLCBoZWFkLm8gc2NscC5vIGViY2RpYy5vKQorT0JKRUNUUyArPSAkKG9iaikvaGVhZCQoQklUUykubyAkKG9iaikvbWlzYy5vICQob2JqKS9waWdneS5vCisKK0xERkxBR1Nfdm1saW51eCA6PSAtLW9mb3JtYXQgJChMRF9CRkQpIC1lIHN0YXJ0dXAgLVQKKyQob2JqKS92bWxpbnV4OiAkKG9iaikvdm1saW51eC5sZHMgJChPQkpFQ1RTKQorCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQorCUA6CisKK3NlZC1zaXplcyA6PSAtZSAncy9eXChbMC05YS1mQS1GXSpcKSAuIFwoX19ic3Nfc3RhcnRcfF9lbmRcKSQkL1wjZGVmaW5lIFNaXDIgMHhcMS9wJworCitxdWlldF9jbWRfc2l6ZXMgPSBHRU4gJEAKKyAgICAgIGNtZF9zaXplcyA9ICQoTk0pICQ8IHwgc2VkIC1uICQoc2VkLXNpemVzKSA+ICRACisKKyQob2JqKS9zaXplcy5oOiB2bWxpbnV4CisJJChjYWxsIGlmX2NoYW5nZWQsc2l6ZXMpCisKK0FGTEFHU19oZWFkJChCSVRTKS5vICs9IC1JJChvYmopCiskKG9iaikvaGVhZCQoQklUUykubzogJChvYmopL3NpemVzLmgKKworQ0ZMQUdTX21pc2MubyArPSAtSSQob2JqKQorJChvYmopL21pc2MubzogJChvYmopL3NpemVzLmgKKworT0JKQ09QWUZMQUdTX3ZtbGludXguYmluIDo9ICAtUiAuY29tbWVudCAtUworJChvYmopL3ZtbGludXguYmluOiB2bWxpbnV4CisJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKKwordm1saW51eC5iaW4uYWxsLXkgOj0gJChvYmopL3ZtbGludXguYmluCisKK3N1ZmZpeC0kKENPTkZJR19LRVJORUxfR1pJUCkgIDo9IGd6CitzdWZmaXgtJChDT05GSUdfS0VSTkVMX0JaSVAyKSA6PSBiejIKK3N1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpNQSkgIDo9IGx6bWEKKworJChvYmopL3ZtbGludXguYmluLmd6OiAkKHZtbGludXguYmluLmFsbC15KQorCSQoY2FsbCBpZl9jaGFuZ2VkLGd6aXApCiskKG9iaikvdm1saW51eC5iaW4uYnoyOiAkKHZtbGludXguYmluLmFsbC15KQorCSQoY2FsbCBpZl9jaGFuZ2VkLGJ6aXAyKQorJChvYmopL3ZtbGludXguYmluLmx6bWE6ICQodm1saW51eC5iaW4uYWxsLXkpCisJJChjYWxsIGlmX2NoYW5nZWQsbHptYSkKKworTERGTEFHU19waWdneS5vIDo9IC1yIC0tZm9ybWF0IGJpbmFyeSAtLW9mb3JtYXQgJChMRF9CRkQpIC1UCiskKG9iaikvcGlnZ3kubzogJChvYmopL3ZtbGludXguc2NyICQob2JqKS92bWxpbnV4LmJpbi4kKHN1ZmZpeC15KQorCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9oZWFkMzEuUyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvaGVhZDMxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE1NTIzYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvaGVhZDMxLlMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIFN0YXJ0dXAgZ2x1ZSBjb2RlIHRvIHVuY29tcHJlc3MgdGhlIGtlcm5lbAorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxMAorICoKKyAqICAgQXV0aG9yKHMpOglNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgInNpemVzLmgiCisKK19fSEVBRAorCS5nbG9ibAlzdGFydHVwX2NvbnRpbnVlCitzdGFydHVwX2NvbnRpbnVlOgorCWJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQorLkxQRzE6CisJIyBzZXR1cCBzdGFjaworCWwJJXIxNSwuTHN0YWNrLS5MUEcxKCVyMTMpCisJYWhpCSVyMTUsLTk2CisJbAklcjEsLkxkZWNvbXByZXNzLS5MUEcxKCVyMTMpCisJYmFzcgklcjE0LCVyMQorCSMgc2V0dXAgcmVnaXN0ZXJzIGZvciBtZW1vcnkgbW92ZXIgJiBicmFuY2ggdG8gdGFyZ2V0CisJbHIJJXI0LCVyMgorCWwJJXIyLC5Mb2Zmc2V0LS5MUEcxKCVyMTMpCisJbGEJJXI0LDAoJXIyLCVyNCkKKwlsCSVyMywuTG12c2l6ZS0uTFBHMSglcjEzKQorCWxyCSVyNSwlcjMKKwkjIG1vdmUgdGhlIG1lbW9yeSBtb3ZlciBzb21lcGxhY2Ugc2FmZQorCWxhCSVyMSwweDIwMAorCW12YwkwKG1vdmVyX2VuZC1tb3ZlciwlcjEpLG1vdmVyLS5MUEcxKCVyMTMpCisJIyBkZWNvbXByZXNzIGltYWdlIGlzIHN0YXJ0ZWQgYXQgMHgxMTAwMAorCWxyCSVyNiwlcjIKKwlicgklcjEKK21vdmVyOgorCW12Y2xlCSVyMiwlcjQsMAorCWpvCW1vdmVyCisJYnIJJXI2Cittb3Zlcl9lbmQ6CisKKwkuYWxpZ24JOAorLkxzdGFjazoKKwkubG9uZwkweDgwMDAgKyAoMTw8KFBBR0VfU0hJRlQrVEhSRUFEX09SREVSKSkKKy5MZGVjb21wcmVzczoKKwkubG9uZwlkZWNvbXByZXNzX2tlcm5lbAorLkxvZmZzZXQ6CisJLmxvbmcJMHgxMTAwMAorLkxtdnNpemU6CisJLmxvbmcJU1pfX2Jzc19zdGFydApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9oZWFkNjQuUyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvaGVhZDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4MmNiMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvaGVhZDY0LlMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIFN0YXJ0dXAgZ2x1ZSBjb2RlIHRvIHVuY29tcHJlc3MgdGhlIGtlcm5lbAorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxMAorICoKKyAqICAgQXV0aG9yKHMpOglNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgInNpemVzLmgiCisKK19fSEVBRAorCS5nbG9ibAlzdGFydHVwX2NvbnRpbnVlCitzdGFydHVwX2NvbnRpbnVlOgorCWJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQorLkxQRzE6CisJIyBzZXR1cCBzdGFjaworCWxnCSVyMTUsLkxzdGFjay0uTFBHMSglcjEzKQorCWFnaGkJJXIxNSwtMTYwCisJYnJhc2wJJXIxNCxkZWNvbXByZXNzX2tlcm5lbAorCSMgc2V0dXAgcmVnaXN0ZXJzIGZvciBtZW1vcnkgbW92ZXIgJiBicmFuY2ggdG8gdGFyZ2V0CisJbGdyCSVyNCwlcjIKKwlsZwklcjIsLkxvZmZzZXQtLkxQRzEoJXIxMykKKwlsYQklcjQsMCglcjIsJXI0KQorCWxnCSVyMywuTG12c2l6ZS0uTFBHMSglcjEzKQorCWxncgklcjUsJXIzCisJIyBtb3ZlIHRoZSBtZW1vcnkgbW92ZXIgc29tZXBsYWNlIHNhZmUKKwlsYQklcjEsMHgyMDAKKwltdmMJMChtb3Zlcl9lbmQtbW92ZXIsJXIxKSxtb3Zlci0uTFBHMSglcjEzKQorCSMgZGVjb21wcmVzcyBpbWFnZSBpcyBzdGFydGVkIGF0IDB4MTEwMDAKKwlsZ3IJJXI2LCVyMgorCWJyCSVyMQorbW92ZXI6CisJbXZjbGUJJXIyLCVyNCwwCisJam8JbW92ZXIKKwlicgklcjYKK21vdmVyX2VuZDoKKworCS5hbGlnbgk4CisuTHN0YWNrOgorCS5xdWFkCTB4ODAwMCArICgxPDwoUEFHRV9TSElGVCtUSFJFQURfT1JERVIpKQorLkxvZmZzZXQ6CisJLnF1YWQJMHgxMTAwMAorLkxtdnNpemU6CisJLnF1YWQJU1pfX2Jzc19zdGFydApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTdkNjk1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBEZWZpbml0aW9ucyBhbmQgd3JhcHBlciBmdW5jdGlvbnMgZm9yIGtlcm5lbCBkZWNvbXByZXNzb3IKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMTAKKyAqCisgKiBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KKyAqLworCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9pcGwuaD4KKyNpbmNsdWRlICJzaXplcy5oIgorCisvKgorICogZ3ppcCBkZWNsYXJhdGlvbnMKKyAqLworI2RlZmluZSBTVEFUSUMgc3RhdGljCisKKyN1bmRlZiBtZW1zZXQKKyN1bmRlZiBtZW1jcHkKKyN1bmRlZiBtZW1tb3ZlCisjZGVmaW5lIG1lbXplcm8ocywgbikgbWVtc2V0KChzKSwgMCwgKG4pKQorCisvKiBTeW1ib2xzIGRlZmluZWQgYnkgbGlua2VyIHNjcmlwdHMgKi8KK2V4dGVybiBjaGFyIGlucHV0X2RhdGFbXTsKK2V4dGVybiBpbnQgaW5wdXRfbGVuOworZXh0ZXJuIGludCBfdGV4dDsKK2V4dGVybiBpbnQgX2VuZDsKKworc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqbSk7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZyZWVfbWVtX3B0cjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZyZWVfbWVtX2VuZF9wdHI7CisKKyNpZmRlZiBDT05GSUdfSEFWRV9LRVJORUxfQlpJUDIKKyNkZWZpbmUgSEVBUF9TSVpFCTB4NDAwMDAwCisjZWxzZQorI2RlZmluZSBIRUFQX1NJWkUJMHgxMDAwMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0daSVAKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19pbmZsYXRlLmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19LRVJORUxfQlpJUDIKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19idW56aXAyLmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19LRVJORUxfTFpNQQorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHptYS5jIgorI2VuZGlmCisKK2V4dGVybiBfc2NscF9wcmludF9lYXJseShjb25zdCBjaGFyICopOworCitpbnQgcHV0cyhjb25zdCBjaGFyICpzKQoreworCV9zY2xwX3ByaW50X2Vhcmx5KHMpOworCXJldHVybiAwOworfQorCit2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKQoreworCWNoYXIgKnhzOworCisJaWYgKGMgPT0gMCkKKwkJcmV0dXJuIF9fYnVpbHRpbl9tZW1zZXQocywgMCwgbik7CisKKwl4cyA9IChjaGFyICopIHM7CisJaWYgKG4gPiAwKQorCQlkbyB7CisJCQkqeHMrKyA9IGM7CisJCX0gd2hpbGUgKC0tbiA+IDApOworCXJldHVybiBzOworfQorCit2b2lkICptZW1jcHkodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQoreworCXJldHVybiBfX2J1aWx0aW5fbWVtY3B5KF9fZGVzdCwgX19zcmMsIF9fbik7Cit9CisKK3ZvaWQgKm1lbW1vdmUodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQoreworCWNoYXIgKmQ7CisJY29uc3QgY2hhciAqczsKKworCWlmIChfX2Rlc3QgPD0gX19zcmMpCisJCXJldHVybiBfX2J1aWx0aW5fbWVtY3B5KF9fZGVzdCwgX19zcmMsIF9fbik7CisJZCA9IF9fZGVzdCArIF9fbjsKKwlzID0gX19zcmMgKyBfX247CisJd2hpbGUgKF9fbi0tKQorCQkqLS1kID0gKi0tczsKKwlyZXR1cm4gX19kZXN0OworfQorCitzdGF0aWMgdm9pZCBlcnJvcihjaGFyICp4KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBwc3cgPSAweDAwMGEwMDAwZGVhZGJlZWZVTEw7CisKKwlwdXRzKCJcblxuIik7CisJcHV0cyh4KTsKKwlwdXRzKCJcblxuIC0tIFN5c3RlbSBoYWx0ZWQiKTsKKworCWFzbSB2b2xhdGlsZSgibHBzdyAlMCIgOiA6ICJRIiAocHN3KSk7Cit9CisKKy8qCisgKiBTYWZlIGd1YXJkIHRoZSBpcGwgcGFyYW1ldGVyIGJsb2NrIGFnYWluc3QgYSBtZW1vcnkgYXJlYSB0aGF0IHdpbGwgYmUKKyAqIG92ZXJ3cml0dGVuLiBUaGUgdmFsaWRpdHkgY2hlY2sgZm9yIHRoZSBpcGwgcGFyYW1ldGVyIGJsb2NrIGlzIGNvbXBsZXgKKyAqIChzZWUgY2lvX2dldF9pcGxpbmZvIGFuZCBpcGxfc2F2ZV9wYXJhbWV0ZXJzKSBidXQgaWYgdGhlIHBvaW50ZXIgdG8KKyAqIHRoZSBpcGwgcGFyYW1ldGVyIGJsb2NrIGludGVyc2VjdHMgd2l0aCB0aGUgcGFzc2VkIG1lbW9yeSBhcmVhIHdlIGNhbgorICogc2FmZWx5IGFzc3VtZSB0aGF0IHdlIGNhbiByZWFkIGZyb20gdGhhdCBtZW1vcnkuIEluIHRoYXQgY2FzZSBqdXN0IGNvcHkKKyAqIHRoZSBtZW1vcnkgdG8gSVBMX1BBUk1CTE9DS19PUklHSU4gZXZlbiBpZiB0aGVyZSBpcyBubyBpcGwgcGFyYW1ldGVyCisgKiBibG9jay4KKyAqLworc3RhdGljIHZvaWQgY2hlY2tfaXBsX3Bhcm1ibG9jayh2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXZvaWQgKnNyYywgKmRzdDsKKworCXNyYyA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpIFMzOTBfbG93Y29yZS5pcGxfcGFybWJsb2NrX3B0cjsKKwlpZiAoc3JjICsgUEFHRV9TSVpFIDw9IHN0YXJ0IHx8IHNyYyA+PSBzdGFydCArIHNpemUpCisJCXJldHVybjsKKwlkc3QgPSAodm9pZCAqKSBJUExfUEFSTUJMT0NLX09SSUdJTjsKKwltZW1tb3ZlKGRzdCwgc3JjLCBQQUdFX1NJWkUpOworCVMzOTBfbG93Y29yZS5pcGxfcGFybWJsb2NrX3B0ciA9IElQTF9QQVJNQkxPQ0tfT1JJR0lOOworfQorCit1bnNpZ25lZCBsb25nIGRlY29tcHJlc3Nfa2VybmVsKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBvdXRwdXRfYWRkcjsKKwl1bnNpZ25lZCBjaGFyICpvdXRwdXQ7CisKKwlmcmVlX21lbV9wdHIgPSAodW5zaWduZWQgbG9uZykmX2VuZDsKKwlmcmVlX21lbV9lbmRfcHRyID0gZnJlZV9tZW1fcHRyICsgSEVBUF9TSVpFOworCW91dHB1dCA9ICh1bnNpZ25lZCBjaGFyICopICgoZnJlZV9tZW1fZW5kX3B0ciArIDQwOTVVTCkgJiAtNDA5NlVMKTsKKworCWNoZWNrX2lwbF9wYXJtYmxvY2soKHZvaWQgKikgMCwgKHVuc2lnbmVkIGxvbmcpIG91dHB1dCArIFNaX19ic3Nfc3RhcnQpOworCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECisJLyoKKwkgKiBNb3ZlIHRoZSBpbml0cmQgcmlnaHQgYmVoaW5kIHRoZSBlbmQgb2YgdGhlIGRlY29tcHJlc3NlZAorCSAqIGtlcm5lbCBpbWFnZS4KKwkgKi8KKwlpZiAoSU5JVFJEX1NUQVJUICYmIElOSVRSRF9TSVpFICYmCisJICAgIElOSVRSRF9TVEFSVCA8ICh1bnNpZ25lZCBsb25nKSBvdXRwdXQgKyBTWl9fYnNzX3N0YXJ0KSB7CisJCWNoZWNrX2lwbF9wYXJtYmxvY2sob3V0cHV0ICsgU1pfX2Jzc19zdGFydCwKKwkJCQkgICAgSU5JVFJEX1NUQVJUICsgSU5JVFJEX1NJWkUpOworCQltZW1tb3ZlKG91dHB1dCArIFNaX19ic3Nfc3RhcnQsCisJCQkodm9pZCAqKSBJTklUUkRfU1RBUlQsIElOSVRSRF9TSVpFKTsKKwkJSU5JVFJEX1NUQVJUID0gKHVuc2lnbmVkIGxvbmcpIG91dHB1dCArIFNaX19ic3Nfc3RhcnQ7CisJfQorI2VuZGlmCisKKwlwdXRzKCJVbmNvbXByZXNzaW5nIExpbnV4Li4uICIpOworCWRlY29tcHJlc3MoaW5wdXRfZGF0YSwgaW5wdXRfbGVuLCBOVUxMLCBOVUxMLCBvdXRwdXQsIE5VTEwsIGVycm9yKTsKKwlwdXRzKCJPaywgYm9vdGluZyB0aGUga2VybmVsLlxuIik7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKSBvdXRwdXQ7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODBmNzlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5TCkBAIC0wLDAgKzEsNTUgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorCisjaWZkZWYgQ09ORklHXzY0QklUCitPVVRQVVRfRk9STUFUKCJlbGY2NC1zMzkwIiwgImVsZjY0LXMzOTAiLCAiZWxmNjQtczM5MCIpCitPVVRQVVRfQVJDSChzMzkwOjY0LWJpdCkKKyNlbHNlCitPVVRQVVRfRk9STUFUKCJlbGYzMi1zMzkwIiwgImVsZjMyLXMzOTAiLCAiZWxmMzItczM5MCIpCitPVVRQVVRfQVJDSChzMzkwKQorI2VuZGlmCisKK0VOVFJZKHN0YXJ0dXApCisKK1NFQ1RJT05TCit7CisJLyogQmUgY2FyZWZ1bCBwYXJ0cyBvZiBoZWFkXzY0LlMgYXNzdW1lIHN0YXJ0dXBfMzIgaXMgYXQKKwkgKiBhZGRyZXNzIDAuCisJICovCisJLiA9IDA7CisJLmhlYWQudGV4dCA6IHsKKwkJX2hlYWQgPSAuIDsKKwkJSEVBRF9URVhUCisJCV9laGVhZCA9IC4gOworCX0KKwkucm9kYXRhLmNvbXByZXNzZWQgOiB7CisJCSooLnJvZGF0YS5jb21wcmVzc2VkKQorCX0KKwkudGV4dCA6CXsKKwkJX3RleHQgPSAuOwkvKiBUZXh0ICovCisJCSooLnRleHQpCisJCSooLnRleHQuKikKKwkJX2V0ZXh0ID0gLiA7CisJfQorCS5yb2RhdGEgOiB7CisJCV9yb2RhdGEgPSAuIDsKKwkJKigucm9kYXRhKQkgLyogcmVhZC1vbmx5IGRhdGEgKi8KKwkJKigucm9kYXRhLiopCisJCV9lcm9kYXRhID0gLiA7CisJfQorCS5kYXRhIDoJeworCQlfZGF0YSA9IC4gOworCQkqKC5kYXRhKQorCQkqKC5kYXRhLiopCisJCV9lZGF0YSA9IC4gOworCX0KKwkuID0gQUxJR04oMjU2KTsKKwkuYnNzIDogeworCQlfYnNzID0gLiA7CisJCSooLmJzcykKKwkJKiguYnNzLiopCisJCSooQ09NTU9OKQorCQkuID0gQUxJR04oOCk7CS8qIEZvciBjb252ZW5pZW5jZSBkdXJpbmcgemVyb2luZyAqLworCQlfZWJzcyA9IC47CisJfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4LnNjciBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvdm1saW51eC5zY3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyMzgyYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvdm1saW51eC5zY3IKQEAgLTAsMCArMSwxMCBAQAorU0VDVElPTlMKK3sKKyAgLnJvZGF0YS5jb21wcmVzc2VkIDogeworCWlucHV0X2xlbiA9IC47CisJTE9ORyhpbnB1dF9kYXRhX2VuZCAtIGlucHV0X2RhdGEpIGlucHV0X2RhdGEgPSAuOworCSooLmRhdGEpCisJb3V0cHV0X2xlbiA9IC4gLSA0OworCWlucHV0X2RhdGFfZW5kID0gLjsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMKaW5kZXggNmJlNDUwMy4uNThmNDY3MyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYwpAQCAtNzgsMTQgKzc4LDE0IEBACiAJc3RydWN0IHMzOTBfYWVzX2N0eCAqc2N0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJaW50IHJldDsKIAotCXNjdHgtPmZhbGxiYWNrLmJsay0+YmFzZS5jcnRfZmxhZ3MgJj0gfkNSWVBUT19URk1fUkVRX01BU0s7Ci0Jc2N0eC0+ZmFsbGJhY2suYmxrLT5iYXNlLmNydF9mbGFncyB8PSAodGZtLT5jcnRfZmxhZ3MgJgorCXNjdHgtPmZhbGxiYWNrLmNpcC0+YmFzZS5jcnRfZmxhZ3MgJj0gfkNSWVBUT19URk1fUkVRX01BU0s7CisJc2N0eC0+ZmFsbGJhY2suY2lwLT5iYXNlLmNydF9mbGFncyB8PSAodGZtLT5jcnRfZmxhZ3MgJgogCQkJQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CiAKIAlyZXQgPSBjcnlwdG9fY2lwaGVyX3NldGtleShzY3R4LT5mYWxsYmFjay5jaXAsIGluX2tleSwga2V5X2xlbik7CiAJaWYgKHJldCkgewogCQl0Zm0tPmNydF9mbGFncyAmPSB+Q1JZUFRPX1RGTV9SRVNfTUFTSzsKLQkJdGZtLT5jcnRfZmxhZ3MgfD0gKHNjdHgtPmZhbGxiYWNrLmJsay0+YmFzZS5jcnRfZmxhZ3MgJgorCQl0Zm0tPmNydF9mbGFncyB8PSAoc2N0eC0+ZmFsbGJhY2suY2lwLT5iYXNlLmNydF9mbGFncyAmCiAJCQkJQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CiAJfQogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvZGVmY29uZmlnIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwppbmRleCBiNDE2YWExLi43YWU3MWNjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvZGVmY29uZmlnCisrKyBiL2FyY2gvczM5MC9kZWZjb25maWcKQEAgLTM2LDYgKzM2LDEzIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKaW5kZXggMmI5MmQ1MC4uODdjZjUyMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCkBAIC00ODgsNyArNDg4LDcgQEAKIAogc3RhdGljIGludCBkaWFnMjI0KHZvaWQgKnB0cikKIHsKLQlpbnQgcmMgPSAtRU5PVFNVUFA7CisJaW50IHJjID0gLUVPUE5PVFNVUFA7CiAKIAlhc20gdm9sYXRpbGUoCiAJCSIJZGlhZwklMSwlMiwweDIyNFxuIgpAQCAtNTA3LDcgKzUwNyw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWlmIChkaWFnMjI0KGRpYWcyMjRfY3B1X25hbWVzKSkgewogCQlrZnJlZShkaWFnMjI0X2NwdV9uYW1lcyk7Ci0JCXJldHVybiAtRU5PVFNVUFA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAJRUJDQVNDKGRpYWcyMjRfY3B1X25hbWVzICsgMTYsICgqZGlhZzIyNF9jcHVfbmFtZXMgKyAxKSAqIDE2KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCAyYTExM2Q2Li40NTFiZmJiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC0xOCw4ICsxOCw2IEBACiAKICNkZWZpbmUgQVRPTUlDX0lOSVQoaSkgIHsgKGkpIH0KIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0KICNkZWZpbmUgX19DU19MT09QKHB0ciwgb3BfdmFsLCBvcF9zdHJpbmcpICh7CQkJCVwKIAlpbnQgb2xkX3ZhbCwgbmV3X3ZhbDsJCQkJCQlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCQlcCkBAIC0zNSwyNiArMzMsNiBAQAogCW5ld192YWw7CQkJCQkJCVwKIH0pCiAKLSNlbHNlIC8qIF9fR05VQ19fICovCi0KLSNkZWZpbmUgX19DU19MT09QKHB0ciwgb3BfdmFsLCBvcF9zdHJpbmcpICh7CQkJCVwKLQlpbnQgb2xkX3ZhbCwgbmV3X3ZhbDsJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCQlcCi0JCSIJbAklMCwwKCUzKVxuIgkJCQlcCi0JCSIwOglscgklMSwlMFxuIgkJCQlcCi0JCW9wX3N0cmluZyAiCSUxLCU0XG4iCQkJCVwKLQkJIgljcwklMCwlMSwwKCUzKVxuIgkJCQlcCi0JCSIJamwJMGIiCQkJCQlcCi0JCTogIj0mZCIgKG9sZF92YWwpLCAiPSZkIiAobmV3X3ZhbCksCQkJXAotCQkgICI9bSIgKCgoYXRvbWljX3QgKikocHRyKSktPmNvdW50ZXIpCQkJXAotCQk6ICJhIiAocHRyKSwgImQiIChvcF92YWwpLAkJCQlcCi0JCSAgIm0iICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQkJCVwKLQkJOiAiY2MiLCAibWVtb3J5Iik7CQkJCQlcCi0JbmV3X3ZhbDsJCQkJCQkJXAotfSkKLQotI2VuZGlmIC8qIF9fR05VQ19fICovCi0KIHN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19yZWFkKGNvbnN0IGF0b21pY190ICp2KQogewogCWJhcnJpZXIoKTsKQEAgLTEwMSwxOSArNzksMTEgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2NtcHhjaGcoYXRvbWljX3QgKnYsIGludCBvbGQsIGludCBuZXcpCiB7Ci0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKIAlhc20gdm9sYXRpbGUoCiAJCSIJY3MJJTAsJTIsJTEiCiAJCTogIitkIiAob2xkKSwgIj1RIiAodi0+Y291bnRlcikKIAkJOiAiZCIgKG5ldyksICJRIiAodi0+Y291bnRlcikKIAkJOiAiY2MiLCAibWVtb3J5Iik7Ci0jZWxzZSAvKiBfX0dOVUNfXyAqLwotCWFzbSB2b2xhdGlsZSgKLQkJIgljcwklMCwlMywwKCUyKSIKLQkJOiAiK2QiIChvbGQpLCAiPW0iICh2LT5jb3VudGVyKQotCQk6ICJhIiAodiksICJkIiAobmV3KSwgIm0iICh2LT5jb3VudGVyKQotCQk6ICJjYyIsICJtZW1vcnkiKTsKLSNlbmRpZiAvKiBfX0dOVUNfXyAqLwogCXJldHVybiBvbGQ7CiB9CiAKQEAgLTE0MCw4ICsxMTAsNiBAQAogCiAjaWZkZWYgQ09ORklHXzY0QklUCiAKLSNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQotCiAjZGVmaW5lIF9fQ1NHX0xPT1AocHRyLCBvcF92YWwsIG9wX3N0cmluZykgKHsJCQkJXAogCWxvbmcgbG9uZyBvbGRfdmFsLCBuZXdfdmFsOwkJCQkJXAogCWFzbSB2b2xhdGlsZSgJCQkJCQkJXApAQCAtMTU3LDI2ICsxMjUsNiBAQAogCW5ld192YWw7CQkJCQkJCVwKIH0pCiAKLSNlbHNlIC8qIF9fR05VQ19fICovCi0KLSNkZWZpbmUgX19DU0dfTE9PUChwdHIsIG9wX3ZhbCwgb3Bfc3RyaW5nKSAoewkJCQlcCi0JbG9uZyBsb25nIG9sZF92YWwsIG5ld192YWw7CQkJCQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCQlcCi0JCSIJbGcJJTAsMCglMylcbiIJCQkJXAotCQkiMDoJbGdyCSUxLCUwXG4iCQkJCVwKLQkJb3Bfc3RyaW5nICIJJTEsJTRcbiIJCQkJXAotCQkiCWNzZwklMCwlMSwwKCUzKVxuIgkJCQlcCi0JCSIJamwJMGIiCQkJCQlcCi0JCTogIj0mZCIgKG9sZF92YWwpLCAiPSZkIiAobmV3X3ZhbCksCQkJXAotCQkgICI9bSIgKCgoYXRvbWljX3QgKikocHRyKSktPmNvdW50ZXIpCQkJXAotCQk6ICJhIiAocHRyKSwgImQiIChvcF92YWwpLAkJCQlcCi0JCSAgIm0iICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQkJCVwKLQkJOiAiY2MiLCAibWVtb3J5Iik7CQkJCQlcCi0JbmV3X3ZhbDsJCQkJCQkJXAotfSkKLQotI2VuZGlmIC8qIF9fR05VQ19fICovCi0KIHN0YXRpYyBpbmxpbmUgbG9uZyBsb25nIGF0b21pYzY0X3JlYWQoY29uc3QgYXRvbWljNjRfdCAqdikKIHsKIAliYXJyaWVyKCk7CkBAIC0yMTQsMTkgKzE2MiwxMSBAQAogc3RhdGljIGlubGluZSBsb25nIGxvbmcgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICp2LAogCQkJCQkgICAgIGxvbmcgbG9uZyBvbGQsIGxvbmcgbG9uZyBuZXcpCiB7Ci0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKIAlhc20gdm9sYXRpbGUoCiAJCSIJY3NnCSUwLCUyLCUxIgogCQk6ICIrZCIgKG9sZCksICI9USIgKHYtPmNvdW50ZXIpCiAJCTogImQiIChuZXcpLCAiUSIgKHYtPmNvdW50ZXIpCiAJCTogImNjIiwgIm1lbW9yeSIpOwotI2Vsc2UgLyogX19HTlVDX18gKi8KLQlhc20gdm9sYXRpbGUoCi0JCSIJY3NnCSUwLCUzLDAoJTIpIgotCQk6ICIrZCIgKG9sZCksICI9bSIgKHYtPmNvdW50ZXIpCi0JCTogImEiICh2KSwgImQiIChuZXcpLCAibSIgKHYtPmNvdW50ZXIpCi0JCTogImNjIiwgIm1lbW9yeSIpOwotI2VuZGlmIC8qIF9fR05VQ19fICovCiAJcmV0dXJuIG9sZDsKIH0KIApAQCAtMjQzLDEwICsxODMsOCBAQAogCXJlZ2lzdGVyX3BhaXIgcnA7CiAKIAlhc20gdm9sYXRpbGUoCi0JCSIJbG0JJTAsJU4wLDAoJTEpIgotCQk6ICI9JmQiIChycCkKLQkJOiAiYSIgKCZ2LT5jb3VudGVyKSwgIm0iICh2LT5jb3VudGVyKQotCQkpOworCQkiCWxtCSUwLCVOMCwlMSIKKwkJOiAiPSZkIiAocnApIDogIlEiICh2LT5jb3VudGVyKQkpOwogCXJldHVybiBycC5wYWlyOwogfQogCkBAIC0yNTUsMTAgKzE5Myw4IEBACiAJcmVnaXN0ZXJfcGFpciBycCA9IHsucGFpciA9IGl9OwogCiAJYXNtIHZvbGF0aWxlKAotCQkiCXN0bQklMSwlTjEsMCglMikiCi0JCTogIj1tIiAodi0+Y291bnRlcikKLQkJOiAiZCIgKHJwKSwgImEiICgmdi0+Y291bnRlcikKLQkJKTsKKwkJIglzdG0JJTEsJU4xLCUwIgorCQk6ICI9USIgKHYtPmNvdW50ZXIpIDogImQiIChycCkgKTsKIH0KIAogc3RhdGljIGlubGluZSBsb25nIGxvbmcgYXRvbWljNjRfeGNoZyhhdG9taWM2NF90ICp2LCBsb25nIGxvbmcgbmV3KQpAQCAtMjY3LDExICsyMDMsMTEgQEAKIAlyZWdpc3Rlcl9wYWlyIHJwX29sZDsKIAogCWFzbSB2b2xhdGlsZSgKLQkJIglsbQklMCwlTjAsMCglMilcbiIKLQkJIjA6CWNkcwklMCwlMywwKCUyKVxuIgorCQkiCWxtCSUwLCVOMCwlMVxuIgorCQkiMDoJY2RzCSUwLCUyLCUxXG4iCiAJCSIJamwJMGJcbiIKLQkJOiAiPSZkIiAocnBfb2xkKSwgIittIiAodi0+Y291bnRlcikKLQkJOiAiYSIgKCZ2LT5jb3VudGVyKSwgImQiIChycF9uZXcpCisJCTogIj0mZCIgKHJwX29sZCksICI9USIgKHYtPmNvdW50ZXIpCisJCTogImQiIChycF9uZXcpLCAiUSIgKHYtPmNvdW50ZXIpCiAJCTogImNjIik7CiAJcmV0dXJuIHJwX29sZC5wYWlyOwogfQpAQCAtMjgzLDkgKzIxOSw5IEBACiAJcmVnaXN0ZXJfcGFpciBycF9uZXcgPSB7LnBhaXIgPSBuZXd9OwogCiAJYXNtIHZvbGF0aWxlKAotCQkiCWNkcwklMCwlMywwKCUyKSIKLQkJOiAiKyZkIiAocnBfb2xkKSwgIittIiAodi0+Y291bnRlcikKLQkJOiAiYSIgKCZ2LT5jb3VudGVyKSwgImQiIChycF9uZXcpCisJCSIJY2RzCSUwLCUyLCUxIgorCQk6ICIrJmQiIChycF9vbGQpLCAiPVEiICh2LT5jb3VudGVyKQorCQk6ICJkIiAocnBfbmV3KSwgIlEiICh2LT5jb3VudGVyKQogCQk6ICJjYyIpOwogCXJldHVybiBycF9vbGQucGFpcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCBiMzA2MDZmLi4yZTA1OTcyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC03MSw4ICs3MSw2IEBACiAjZGVmaW5lIF9fQklUT1BTX0FORAkJIm5yIgogI2RlZmluZSBfX0JJVE9QU19YT1IJCSJ4ciIKIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0KICNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCVwKIAkJIglsCSUwLCUyXG4iCQkJXApAQCAtODUsMjIgKzgzLDYgQEAKIAkJOiAiZCIgKF9fdmFsKSwgIlEiICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQlcCiAJCTogImNjIik7CiAKLSNlbHNlIC8qIF9fR05VQ19fICovCi0KLSNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIglsCSUwLDAoJTQpXG4iCQkJXAotCQkiMDoJbHIJJTEsJTBcbiIJCQlcCi0JCV9fb3Bfc3RyaW5nICIJJTEsJTNcbiIJCQlcCi0JCSIJY3MJJTAsJTEsMCglNClcbiIJCQlcCi0JCSIJamwJMGIiCQkJCVwKLQkJOiAiPSZkIiAoX19vbGQpLCAiPSZkIiAoX19uZXcpLAkJCVwKLQkJICAiPW0iICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQkJXAotCQk6ICJkIiAoX192YWwpLCAiYSIgKF9fYWRkciksCQkJXAotCQkgICJtIiAoKih1bnNpZ25lZCBsb25nICopIF9fYWRkcikgOiAiY2MiKTsKLQotI2VuZGlmIC8qIF9fR05VQ19fICovCi0KICNlbHNlIC8qIF9fczM5MHhfXyAqLwogCiAjZGVmaW5lIF9fQklUT1BTX0FMSUdOCQk3CkBAIC0xMDksOCArOTEsNiBAQAogI2RlZmluZSBfX0JJVE9QU19BTkQJCSJuZ3IiCiAjZGVmaW5lIF9fQklUT1BTX1hPUgkJInhnciIKIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0KICNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCVwKIAkJIglsZwklMCwlMlxuIgkJCVwKQEAgLTEyMywyMyArMTAzLDYgQEAKIAkJOiAiZCIgKF9fdmFsKSwgIlEiICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQlcCiAJCTogImNjIik7CiAKLSNlbHNlIC8qIF9fR05VQ19fICovCi0KLSNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIglsZwklMCwwKCU0KVxuIgkJCVwKLQkJIjA6CWxncgklMSwlMFxuIgkJCVwKLQkJX19vcF9zdHJpbmcgIgklMSwlM1xuIgkJCVwKLQkJIgljc2cJJTAsJTEsMCglNClcbiIJCQlcCi0JCSIJamwJMGIiCQkJCVwKLQkJOiAiPSZkIiAoX19vbGQpLCAiPSZkIiAoX19uZXcpLAkJCVwKLQkJICAiPW0iICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQkJXAotCQk6ICJkIiAoX192YWwpLCAiYSIgKF9fYWRkciksCQkJXAotCQkgICJtIiAoKih1bnNpZ25lZCBsb25nICopIF9fYWRkcikgOiAiY2MiKTsKLQotCi0jZW5kaWYgLyogX19HTlVDX18gKi8KLQogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCiAjZGVmaW5lIF9fQklUT1BTX1dPUkRTKGJpdHMpICgoKGJpdHMpK19fQklUT1BTX1dPUkRTSVpFLTEpL19fQklUT1BTX1dPUkRTSVpFKQpAQCAtMjYxLDkgKzIyNCw4IEBACiAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0ciArICgobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSkgPj4gMyk7CiAJYXNtIHZvbGF0aWxlKAotCQkiCW9jCTAoMSwlMSksMCglMikiCi0JCTogIj1tIiAoKihjaGFyICopIGFkZHIpIDogImEiIChhZGRyKSwKLQkJICAiYSIgKF9vaV9iaXRtYXAgKyAobnIgJiA3KSksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOworCQkiCW9jCSVPMCgxLCVSMCksJTEiCisJCTogIj1RIiAoKihjaGFyICopIGFkZHIpIDogIlEiIChfb2lfYml0bWFwW25yICYgN10pIDogImNjIiApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgCkBAIC0yOTAsOSArMjUyLDggQEAKIAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKIAlhc20gdm9sYXRpbGUoCi0JCSIJbmMJMCgxLCUxKSwwKCUyKSIKLQkJOiAiPW0iICgqKGNoYXIgKikgYWRkcikJOiAiYSIgKGFkZHIpLAotCQkgICJhIiAoX25pX2JpdG1hcCArIChuciAmIDcpKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiKTsKKwkJIgluYwklTzAoMSwlUjApLCUxIgorCQk6ICI9USIgKCooY2hhciAqKSBhZGRyKSA6ICJRIiAoX25pX2JpdG1hcFtuciAmIDddKSA6ICJjYyIgKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIApAQCAtMzE4LDkgKzI3OSw4IEBACiAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0ciArICgobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSkgPj4gMyk7CiAJYXNtIHZvbGF0aWxlKAotCQkiCXhjCTAoMSwlMSksMCglMikiCi0JCTogICI9bSIgKCooY2hhciAqKSBhZGRyKSA6ICJhIiAoYWRkciksCi0JCSAgICJhIiAoX29pX2JpdG1hcCArIChuciAmIDcpKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7CisJCSIJeGMJJU8wKDEsJVIwKSwlMSIKKwkJOiAiPVEiICgqKGNoYXIgKikgYWRkcikgOiAiUSIgKF9vaV9iaXRtYXBbbnIgJiA3XSkgOiAiY2MiICk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAKQEAgLTM0OSwxMCArMzA5LDkgQEAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0ciArICgobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSkgPj4gMyk7CiAJY2ggPSAqKHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKIAlhc20gdm9sYXRpbGUoCi0JCSIJb2MJMCgxLCUxKSwwKCUyKSIKLQkJOiAiPW0iICgqKGNoYXIgKikgYWRkcikKLQkJOiAiYSIgKGFkZHIpLCAiYSIgKF9vaV9iaXRtYXAgKyAobnIgJiA3KSksCi0JCSAgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiLCAibWVtb3J5Iik7CisJCSIJb2MJJU8wKDEsJVIwKSwlMSIKKwkJOiAiPVEiICgqKGNoYXIgKikgYWRkcikJOiAiUSIgKF9vaV9iaXRtYXBbbnIgJiA3XSkKKwkJOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIChjaCA+PiAobnIgJiA3KSkgJiAxOwogfQogI2RlZmluZSBfX3Rlc3RfYW5kX3NldF9iaXQoWCxZKQkJdGVzdF9hbmRfc2V0X2JpdF9zaW1wbGUoWCxZKQpAQCAtMzY5LDEwICszMjgsOSBAQAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKIAljaCA9ICoodW5zaWduZWQgY2hhciAqKSBhZGRyOwogCWFzbSB2b2xhdGlsZSgKLQkJIgluYwkwKDEsJTEpLDAoJTIpIgotCQk6ICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQk6ICJhIiAoYWRkciksICJhIiAoX25pX2JpdG1hcCArIChuciAmIDcpKSwKLQkJICAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIsICJtZW1vcnkiKTsKKwkJIgluYwklTzAoMSwlUjApLCUxIgorCQk6ICI9USIgKCooY2hhciAqKSBhZGRyKQk6ICJRIiAoX25pX2JpdG1hcFtuciAmIDddKQorCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gKGNoID4+IChuciAmIDcpKSAmIDE7CiB9CiAjZGVmaW5lIF9fdGVzdF9hbmRfY2xlYXJfYml0KFgsWSkJdGVzdF9hbmRfY2xlYXJfYml0X3NpbXBsZShYLFkpCkBAIC0zODksMTAgKzM0Nyw5IEBACiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHIgKyAoKG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCkpID4+IDMpOwogCWNoID0gKih1bnNpZ25lZCBjaGFyICopIGFkZHI7CiAJYXNtIHZvbGF0aWxlKAotCQkiCXhjCTAoMSwlMSksMCglMikiCi0JCTogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCTogImEiIChhZGRyKSwgImEiIChfb2lfYml0bWFwICsgKG5yICYgNykpLAotCQkgICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiwgIm1lbW9yeSIpOworCQkiCXhjCSVPMCgxLCVSMCksJTEiCisJCTogIj1RIiAoKihjaGFyICopIGFkZHIpCTogIlEiIChfb2lfYml0bWFwW25yICYgN10pCisJCTogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiAoY2ggPj4gKG5yICYgNykpICYgMTsKIH0KICNkZWZpbmUgX190ZXN0X2FuZF9jaGFuZ2VfYml0KFgsWSkJdGVzdF9hbmRfY2hhbmdlX2JpdF9zaW1wbGUoWCxZKQpAQCAtNTkxLDExICs1NDgsMTEgQEAKIAlwID0gKHVuc2lnbmVkIGxvbmcgKikoKHVuc2lnbmVkIGxvbmcpIHAgKyBvZmZzZXQpOwogI2lmbmRlZiBfX3MzOTB4X18KIAlhc20gdm9sYXRpbGUoCi0JCSIJaWMJJTAsMCglMSlcbiIKLQkJIglpY20JJTAsMiwxKCUxKVxuIgotCQkiCWljbQklMCw0LDIoJTEpXG4iCi0JCSIJaWNtCSUwLDgsMyglMSkiCi0JCTogIj0mZCIgKHdvcmQpIDogImEiIChwKSwgIm0iICgqcCkgOiAiY2MiKTsKKwkJIglpYwklMCwlTzEoJVIxKVxuIgorCQkiCWljbQklMCwyLCVPMSsxKCVSMSlcbiIKKwkJIglpY20JJTAsNCwlTzErMiglUjEpXG4iCisJCSIJaWNtCSUwLDgsJU8xKzMoJVIxKSIKKwkJOiAiPSZkIiAod29yZCkgOiAiUSIgKCpwKSA6ICJjYyIpOwogI2Vsc2UKIAlhc20gdm9sYXRpbGUoCiAJCSIJbHJ2ZwklMCwlMSIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9idWcuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9idWcuaAppbmRleCBiMTA2NmI5Li45YmVlYjlkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYnVnLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2J1Zy5oCkBAIC01LDEyICs1LDYgQEAKIAogI2lmZGVmIENPTkZJR19CVUcKIAotI2lmZGVmIENPTkZJR182NEJJVAotI2RlZmluZSBTMzkwX0xPTkcgIi5xdWFkIgotI2Vsc2UKLSNkZWZpbmUgUzM5MF9MT05HICIubG9uZyIKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKIAogI2RlZmluZSBfX0VNSVRfQlVHKHgpIGRvIHsJCQkJCVwKQEAgLTIxLDcgKzE1LDcgQEAKIAkJIjI6CS5hc2NpeglcIiJfX0ZJTEVfXyJcIlxuIgkJXAogCQkiLnByZXZpb3VzXG4iCQkJCQlcCiAJCSIuc2VjdGlvbiBfX2J1Z190YWJsZSxcImFcIlxuIgkJCVwKLQkJIjM6XHQiCVMzOTBfTE9ORyAiXHQxYiwyYlxuIgkJCVwKKwkJIjM6CS5sb25nCTFiLTNiLDJiLTNiXG4iCQkJXAogCQkiCS5zaG9ydAklMCwlMVxuIgkJCVwKIAkJIgkub3JnCTNiKyUyXG4iCQkJXAogCQkiLnByZXZpb3VzXG4iCQkJCQlcCkBAIC0zNyw3ICszMSw3IEBACiAJCSIwOglqCTBiKzJcbiIJCQlcCiAJCSIxOlxuIgkJCQkJXAogCQkiLnNlY3Rpb24gX19idWdfdGFibGUsXCJhXCJcbiIJCVwKLQkJIjI6XHQiCVMzOTBfTE9ORyAiXHQxYlxuIgkJXAorCQkiMjoJLmxvbmcJMWItMmJcbiIJCVwKIAkJIgkuc2hvcnQJJTBcbiIJCQlcCiAJCSIJLm9yZwkyYislMVxuIgkJXAogCQkiLnByZXZpb3VzXG4iCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaAppbmRleCAyMTg1YTZkLi43NDlhOTdlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3J3LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oCkBAIC0zMiw2ICszMiw3IEBACiBleHRlcm4gaW50IGNyd19yZWdpc3Rlcl9oYW5kbGVyKGludCByc2MsIGNyd19oYW5kbGVyX3QgaGFuZGxlcik7CiBleHRlcm4gdm9pZCBjcndfdW5yZWdpc3Rlcl9oYW5kbGVyKGludCByc2MpOwogZXh0ZXJuIHZvaWQgY3J3X2hhbmRsZV9jaGFubmVsX3JlcG9ydCh2b2lkKTsKK3ZvaWQgY3J3X3dhaXRfZm9yX2NoYW5uZWxfcmVwb3J0KHZvaWQpOwogCiAjZGVmaW5lIE5SX1JTQ1MgMTYKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2V0ci5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2V0ci5oCmluZGV4IDgwZWY1OGMuLjUzOGUxYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9ldHIuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZXRyLmgKQEAgLTE0NSwxMSArMTQ1LDExIEBACiAJaW50IHJjID0gLUVOT1NZUzsKIAogCWFzbSB2b2xhdGlsZSgKLQkJIgkuaW5zbglzLDB4YjIxNjAwMDAsMCglMilcbiIKKwkJIgkuaW5zbglzLDB4YjIxNjAwMDAsJTFcbiIKIAkJIjA6CWxhCSUwLDBcbiIKIAkJIjE6XG4iCiAJCUVYX1RBQkxFKDBiLDFiKQotCQk6ICIrZCIgKHJjKSA6ICJtIiAoKmN0cmwpLCAiYSIgKGN0cmwpKTsKKwkJOiAiK2QiIChyYykgOiAiUSIgKCpjdHJsKSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xNTksMTEgKzE1OSwxMSBAQAogCWludCByYyA9IC1FTk9TWVM7CiAKIAlhc20gdm9sYXRpbGUoCi0JCSIJLmluc24JcywweGIyMTcwMDAwLDAoJTIpXG4iCisJCSIJLmluc24JcywweGIyMTcwMDAwLCUxXG4iCiAJCSIwOglsYQklMCwwXG4iCiAJCSIxOlxuIgogCQlFWF9UQUJMRSgwYiwxYikKLQkJOiAiK2QiIChyYykgOiAibSIgKCphaWIpLCAiYSIgKGFpYikpOworCQk6ICIrZCIgKHJjKSA6ICJRIiAoKmFpYikpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTc0LDExICsxNzQsMTEgQEAKIAlpbnQgcmMgPSAtRU5PU1lTOwogCiAJYXNtIHZvbGF0aWxlKAotCQkiCS5pbnNuCXMsMHhiMmIzMDAwMCwwKCUyKVxuIgorCQkiCS5pbnNuCXMsMHhiMmIzMDAwMCwlMVxuIgogCQkiMDoJbGEJJTAsMFxuIgogCQkiMTpcbiIKIAkJRVhfVEFCTEUoMGIsMWIpCi0JCTogIitkIiAocmMpIDogIm0iICgqYWliKSwgImEiIChhaWIpLCAiZCIgKHJlZzApKTsKKwkJOiAiK2QiIChyYykgOiAiUSIgKCphaWIpLCAiZCIgKHJlZzApKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKaW5kZXggYzJmYjQzMmYuLjE1YjNhYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCkBAIC04LDggKzgsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0KIC8qIHN0b3JlIHRoZW4gb3Igc3lzdGVtIG1hc2suICovCiAjZGVmaW5lIF9fcmF3X2xvY2FsX2lycV9zdG9zbShfX29yKQkJCQkJXAogKHsJCQkJCQkJCQlcCkBAIC0zNiw0MCArMzQsNiBAQAogCWFzbSB2b2xhdGlsZSgic3NtICAgJTAiIDogOiAiUSIgKF9fbWFzaykgOiAibWVtb3J5Iik7CQlcCiB9KQogCi0jZWxzZSAvKiBfX0dOVUNfXyAqLwotCi0vKiBzdG9yZSB0aGVuIG9yIHN5c3RlbSBtYXNrLiAqLwotI2RlZmluZSBfX3Jhd19sb2NhbF9pcnFfc3Rvc20oX19vcikJCQkJCVwKLSh7CQkJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgX19tYXNrOwkJCQkJCVwKLQlhc20gdm9sYXRpbGUoCQkJCQkJCVwKLQkJIglzdG9zbQkwKCUxKSwlMiIJCQkJXAotCQk6ICI9bSIgKF9fbWFzaykJCQkJCQlcCi0JCTogImEiICgmX19tYXNrKSwgImkiIChfX29yKSA6ICJtZW1vcnkiKTsJCVwKLQlfX21hc2s7CQkJCQkJCQlcCi19KQotCi0vKiBzdG9yZSB0aGVuIGFuZCBzeXN0ZW0gbWFzay4gKi8KLSNkZWZpbmUgX19yYXdfbG9jYWxfaXJxX3N0bnNtKF9fYW5kKQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyBfX21hc2s7CQkJCQkJXAotCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAotCQkiCXN0bnNtCTAoJTEpLCUyIgkJCQlcCi0JCTogIj1tIiAoX19tYXNrKQkJCQkJCVwKLQkJOiAiYSIgKCZfX21hc2spLCAiaSIgKF9fYW5kKSA6ICJtZW1vcnkiKTsJCVwKLQlfX21hc2s7CQkJCQkJCQlcCi19KQotCi0vKiBzZXQgc3lzdGVtIG1hc2suICovCi0jZGVmaW5lIF9fcmF3X2xvY2FsX2lycV9zc20oX19tYXNrKQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCQlcCi0JCSIJc3NtCTAoJTApIgkJCQkJXAotCQk6IDogImEiICgmX19tYXNrKSwgIm0iIChfX21hc2spIDogIm1lbW9yeSIpOwkJXAotfSkKLQotI2VuZGlmIC8qIF9fR05VQ19fICovCi0KIC8qIGludGVycnVwdCBjb250cm9sLi4gKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByYXdfbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKaW5kZXggZjJlZjRiNi4uMDU1MjdjMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCkBAIC0xLDE0MSArMSwxNiBAQAogLyoKLSAqICBpbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaAotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTogSGFydG11dCBQZW5uZXIgKGhwQGRlLmlibS5jb20pLAotICogICAgICAgICAgICAgICBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pLAotICogICAgICAgICAgICAgICBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTksMjAxMAorICogICAgQXV0aG9yKHMpOiBIYXJ0bXV0IFBlbm5lciA8aHBAZGUuaWJtLmNvbT4sCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIERlbmlzIEpvc2VwaCBCYXJyb3csCiAgKi8KIAogI2lmbmRlZiBfQVNNX1MzOTBfTE9XQ09SRV9ICiAjZGVmaW5lIF9BU01fUzM5MF9MT1dDT1JFX0gKIAotI2RlZmluZSBfX0xDX0lQTF9QQVJNQkxPQ0tfUFRSCQkweDAwMTQKLSNkZWZpbmUgX19MQ19FWFRfUEFSQU1TCQkJMHgwMDgwCi0jZGVmaW5lIF9fTENfQ1BVX0FERFJFU1MJCTB4MDA4NAotI2RlZmluZSBfX0xDX0VYVF9JTlRfQ09ERQkJMHgwMDg2Ci0KLSNkZWZpbmUgX19MQ19TVkNfSUxDCQkJMHgwMDg4Ci0jZGVmaW5lIF9fTENfU1ZDX0lOVF9DT0RFCQkweDAwOGEKLSNkZWZpbmUgX19MQ19QR01fSUxDCQkJMHgwMDhjCi0jZGVmaW5lIF9fTENfUEdNX0lOVF9DT0RFCQkweDAwOGUKLQotI2RlZmluZSBfX0xDX1BFUl9BVE1JRAkJCTB4MDA5NgotI2RlZmluZSBfX0xDX1BFUl9BRERSRVNTCQkweDAwOTgKLSNkZWZpbmUgX19MQ19QRVJfQUNDRVNTX0lECQkweDAwYTEKLSNkZWZpbmUgX19MQ19BUl9NT0RFX0lECQkJMHgwMGEzCi0KLSNkZWZpbmUgX19MQ19TVUJDSEFOTkVMX0lECQkweDAwYjgKLSNkZWZpbmUgX19MQ19TVUJDSEFOTkVMX05SCQkweDAwYmEKLSNkZWZpbmUgX19MQ19JT19JTlRfUEFSTQkJMHgwMGJjCi0jZGVmaW5lIF9fTENfSU9fSU5UX1dPUkQJCTB4MDBjMAotI2RlZmluZSBfX0xDX1NURkxfRkFDX0xJU1QJCTB4MDBjOAotI2RlZmluZSBfX0xDX01DQ0tfQ09ERQkJCTB4MDBlOAotCi0jZGVmaW5lIF9fTENfRFVNUF9SRUlQTAkJCTB4MGUwMAotCi0jaWZuZGVmIF9fczM5MHhfXwotI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXCQkweDAwMTgKLSNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVwkJMHgwMDIwCi0jZGVmaW5lIF9fTENfUEdNX09MRF9QU1cJCTB4MDAyOAotI2RlZmluZSBfX0xDX01DS19PTERfUFNXCQkweDAwMzAKLSNkZWZpbmUgX19MQ19JT19PTERfUFNXCQkJMHgwMDM4Ci0jZGVmaW5lIF9fTENfRVhUX05FV19QU1cJCTB4MDA1OAotI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXCQkweDAwNjAKLSNkZWZpbmUgX19MQ19QR01fTkVXX1BTVwkJMHgwMDY4Ci0jZGVmaW5lIF9fTENfTUNLX05FV19QU1cJCTB4MDA3MAotI2RlZmluZSBfX0xDX0lPX05FV19QU1cJCQkweDAwNzgKLSNkZWZpbmUgX19MQ19TQVZFX0FSRUEJCQkweDAyMDAKLSNkZWZpbmUgX19MQ19SRVRVUk5fUFNXCQkJMHgwMjQwCi0jZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXCQkweDAyNDgKLSNkZWZpbmUgX19MQ19TWU5DX0VOVEVSX1RJTUVSCQkweDAyNTAKLSNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgwMjU4Ci0jZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MDI2MAotI2RlZmluZSBfX0xDX1VTRVJfVElNRVIJCQkweDAyNjgKLSNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MDI3MAotI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDAyNzgKLSNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9USU1FUgkJMHgwMjgwCi0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4MDI4OAotI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweDAyOTAKLSNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHgwMjk0Ci0jZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLCQkweDAyOTgKLSNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSwkJMHgwMjljCi0jZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sJCTB4MDJhMAotI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweDAyYTQKLSNkZWZpbmUgX19MQ19VU0VSX0FTQ0UJCQkweDAyYTgKLSNkZWZpbmUgX19MQ19VU0VSX0VYRUNfQVNDRQkJMHgwMmFjCi0jZGVmaW5lIF9fTENfQ1BVSUQJCQkweDAyYjAKLSNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweDAyYzgKLSNkZWZpbmUgX19MQ19NQUNISU5FX0ZMQUdTCQkweDAyZDgKLSNkZWZpbmUgX19MQ19GVFJBQ0VfRlVOQwkJMHgwMmRjCi0jZGVmaW5lIF9fTENfSVJCCQkJMHgwMzAwCi0jZGVmaW5lIF9fTENfUEZBVUxUX0lOVFBBUk0JCTB4MDA4MAotI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEJMHgwMGQ4Ci0jZGVmaW5lIF9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEJMHgwMGUwCi0jZGVmaW5lIF9fTENfUFNXX1NBVkVfQVJFQQkJMHgwMTAwCi0jZGVmaW5lIF9fTENfUFJFRklYX1NBVkVfQVJFQQkJMHgwMTA4Ci0jZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBCQkweDAxMjAKLSNkZWZpbmUgX19MQ19GUFJFR1NfU0FWRV9BUkVBCQkweDAxNjAKLSNkZWZpbmUgX19MQ19HUFJFR1NfU0FWRV9BUkVBCQkweDAxODAKLSNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEJCTB4MDFjMAotI2Vsc2UgLyogX19zMzkweF9fICovCi0jZGVmaW5lIF9fTENfTEFTVF9CUkVBSwkJCTB4MDExMAotI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXCQkweDAxMzAKLSNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVwkJMHgwMTQwCi0jZGVmaW5lIF9fTENfUEdNX09MRF9QU1cJCTB4MDE1MAotI2RlZmluZSBfX0xDX01DS19PTERfUFNXCQkweDAxNjAKLSNkZWZpbmUgX19MQ19JT19PTERfUFNXCQkJMHgwMTcwCi0jZGVmaW5lIF9fTENfUkVTVEFSVF9QU1cJCTB4MDFhMAotI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXCQkweDAxYjAKLSNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVwkJMHgwMWMwCi0jZGVmaW5lIF9fTENfUEdNX05FV19QU1cJCTB4MDFkMAotI2RlZmluZSBfX0xDX01DS19ORVdfUFNXCQkweDAxZTAKLSNkZWZpbmUgX19MQ19JT19ORVdfUFNXCQkJMHgwMWYwCi0jZGVmaW5lIF9fTENfU0FWRV9BUkVBCQkJMHgwMjAwCi0jZGVmaW5lIF9fTENfUkVUVVJOX1BTVwkJCTB4MDI4MAotI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVwkJMHgwMjkwCi0jZGVmaW5lIF9fTENfU1lOQ19FTlRFUl9USU1FUgkJMHgwMmEwCi0jZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MDJhOAotI2RlZmluZSBfX0xDX0VYSVRfVElNRVIJCQkweDAyYjAKLSNkZWZpbmUgX19MQ19VU0VSX1RJTUVSCQkJMHgwMmI4Ci0jZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDAyYzAKLSNkZWZpbmUgX19MQ19TVEVBTF9USU1FUgkJMHgwMmM4Ci0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfVElNRVIJCTB4MDJkMAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDAyZDgKLSNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHgwMmUwCi0jZGVmaW5lIF9fTENfVEhSRUFEX0lORk8JCTB4MDJlOAotI2RlZmluZSBfX0xDX0tFUk5FTF9TVEFDSwkJMHgwMmYwCi0jZGVmaW5lIF9fTENfQVNZTkNfU1RBQ0sJCTB4MDJmOAotI2RlZmluZSBfX0xDX1BBTklDX1NUQUNLCQkweDAzMDAKLSNkZWZpbmUgX19MQ19LRVJORUxfQVNDRQkJMHgwMzA4Ci0jZGVmaW5lIF9fTENfVVNFUl9BU0NFCQkJMHgwMzEwCi0jZGVmaW5lIF9fTENfVVNFUl9FWEVDX0FTQ0UJCTB4MDMxOAotI2RlZmluZSBfX0xDX0NQVUlECQkJMHgwMzIwCi0jZGVmaW5lIF9fTENfSU5UX0NMT0NLCQkJMHgwMzQwCi0jZGVmaW5lIF9fTENfVkRTT19QRVJfQ1BVCQkweDAzNTAKLSNkZWZpbmUgX19MQ19NQUNISU5FX0ZMQUdTCQkweDAzNTgKLSNkZWZpbmUgX19MQ19GVFJBQ0VfRlVOQwkJMHgwMzYwCi0jZGVmaW5lIF9fTENfSVJCCQkJMHgwMzgwCi0jZGVmaW5lIF9fTENfUEFTVEUJCQkweDAzYzAKLSNkZWZpbmUgX19MQ19QRkFVTFRfSU5UUEFSTQkJMHgxMWI4Ci0jZGVmaW5lIF9fTENfRlBSRUdTX1NBVkVfQVJFQQkJMHgxMjAwCi0jZGVmaW5lIF9fTENfR1BSRUdTX1NBVkVfQVJFQQkJMHgxMjgwCi0jZGVmaW5lIF9fTENfUFNXX1NBVkVfQVJFQQkJMHgxMzAwCi0jZGVmaW5lIF9fTENfUFJFRklYX1NBVkVfQVJFQQkJMHgxMzE4Ci0jZGVmaW5lIF9fTENfRlBfQ1JFR19TQVZFX0FSRUEJCTB4MTMxYwotI2RlZmluZSBfX0xDX1RPRFJFR19TQVZFX0FSRUEJCTB4MTMyNAotI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEJMHgxMzI4Ci0jZGVmaW5lIF9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEJMHgxMzMxCi0jZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBCQkweDEzNDAKLSNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEJCTB4MTM4MAotI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8YXNtL2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAKIHZvaWQgcmVzdGFydF9pbnRfaGFuZGxlcih2b2lkKTsKIHZvaWQgZXh0X2ludF9oYW5kbGVyKHZvaWQpOwpAQCAtMTQ0LDcgKzE5LDEyIEBACiB2b2lkIG1jY2tfaW50X2hhbmRsZXIodm9pZCk7CiB2b2lkIGlvX2ludF9oYW5kbGVyKHZvaWQpOwogCi1zdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTAgeworI2lmZGVmIENPTkZJR18zMkJJVAorCisjZGVmaW5lIExDX09SREVSIDAKKyNkZWZpbmUgTENfUEFHRVMgMQorCitzdHJ1Y3Qgc2F2ZV9hcmVhIHsKIAl1MzIJZXh0X3NhdmU7CiAJdTY0CXRpbWVyOwogCXU2NAljbGtfY21wOwpAQCAtMTU2LDU0ICszNiwxMyBAQAogCXU2NAlmcF9yZWdzWzRdOwogCXUzMglncF9yZWdzWzE2XTsKIAl1MzIJY3RybF9yZWdzWzE2XTsKLX0gIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAotc3RydWN0IHNhdmVfYXJlYV9zMzkweCB7Ci0JdTY0CWZwX3JlZ3NbMTZdOwotCXU2NAlncF9yZWdzWzE2XTsKLQl1OAlwc3dbMTZdOwotCXU4CXBhZDFbOF07Ci0JdTMyCXByZWZfcmVnOwotCXUzMglmcF9jdHJsX3JlZzsKLQl1OAlwYWQyWzRdOwotCXUzMgl0b2RfcmVnOwotCXU2NAl0aW1lcjsKLQl1NjQJY2xrX2NtcDsKLQl1OAlwYWQzWzhdOwotCXUzMglhY2NfcmVnc1sxNl07Ci0JdTY0CWN0cmxfcmVnc1sxNl07Ci19ICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotdW5pb24gc2F2ZV9hcmVhIHsKLQlzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTAJczM5MDsKLQlzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4CXMzOTB4OwotfTsKLQotI2RlZmluZSBTQVZFX0FSRUFfQkFTRV9TMzkwCTB4ZDQKLSNkZWZpbmUgU0FWRV9BUkVBX0JBU0VfUzM5MFgJMHgxMjAwCi0KLSNpZm5kZWYgX19zMzkweF9fCi0jZGVmaW5lIFNBVkVfQVJFQV9TSVpFIHNpemVvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTApCi0jZGVmaW5lIFNBVkVfQVJFQV9CQVNFIFNBVkVfQVJFQV9CQVNFX1MzOTAKLSNlbHNlCi0jZGVmaW5lIFNBVkVfQVJFQV9TSVpFIHNpemVvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4KQotI2RlZmluZSBTQVZFX0FSRUFfQkFTRSBTQVZFX0FSRUFfQkFTRV9TMzkwWAotI2VuZGlmCi0KLSNpZm5kZWYgX19zMzkweF9fCi0jZGVmaW5lIExDX09SREVSIDAKLSNlbHNlCi0jZGVmaW5lIExDX09SREVSIDEKLSNlbmRpZgotCi0jZGVmaW5lIExDX1BBR0VTICgxVUwgPDwgTENfT1JERVIpCi0KLXN0cnVjdCBfbG93Y29yZQotewotI2lmbmRlZiBfX3MzOTB4X18KLQkvKiAweDAwMDAgLSAweDAxZmY6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCitzdHJ1Y3QgX2xvd2NvcmUgewogCXBzd190CXJlc3RhcnRfcHN3OwkJCS8qIDB4MDAwMCAqLwotCV9fdTMyCWNjdzJbNF07CQkJLyogMHgwMDA4ICovCisJcHN3X3QJcmVzdGFydF9vbGRfcHN3OwkJLyogMHgwMDA4ICovCisJX191OAlwYWRfMHgwMDEwWzB4MDAxNC0weDAwMTBdOwkvKiAweDAwMTAgKi8KKwlfX3UzMglpcGxfcGFybWJsb2NrX3B0cjsJCS8qIDB4MDAxNCAqLwogCXBzd190CWV4dGVybmFsX29sZF9wc3c7CQkvKiAweDAwMTggKi8KIAlwc3dfdAlzdmNfb2xkX3BzdzsJCQkvKiAweDAwMjAgKi8KIAlwc3dfdAlwcm9ncmFtX29sZF9wc3c7CQkvKiAweDAwMjggKi8KQEAgLTIyOSw3ICs2OCw5IEBACiAJX191MzIJbW9uaXRvcl9jb2RlOwkJCS8qIDB4MDA5YyAqLwogCV9fdTgJZXhjX2FjY2Vzc19pZDsJCQkvKiAweDAwYTAgKi8KIAlfX3U4CXBlcl9hY2Nlc3NfaWQ7CQkJLyogMHgwMGExICovCi0JX191OAlwYWRfMHgwMGEyWzB4MDBiOC0weDAwYTJdOwkvKiAweDAwYTIgKi8KKwlfX3U4CW9wX2FjY2Vzc19pZDsJCQkvKiAweDAwYTIgKi8KKwlfX3U4CWFyX2FjY2Vzc19pZDsJCQkvKiAweDAwYTMgKi8KKwlfX3U4CXBhZF8weDAwYTRbMHgwMGI4LTB4MDBhNF07CS8qIDB4MDBhNCAqLwogCV9fdTE2CXN1YmNoYW5uZWxfaWQ7CQkJLyogMHgwMGI4ICovCiAJX191MTYJc3ViY2hhbm5lbF9ucjsJCQkvKiAweDAwYmEgKi8KIAlfX3UzMglpb19pbnRfcGFybTsJCQkvKiAweDAwYmMgKi8KQEAgLTI0NSw4ICs4Niw5IEBACiAJX191MzIJZXh0ZXJuYWxfZGFtYWdlX2NvZGU7CQkvKiAweDAwZjQgKi8KIAlfX3UzMglmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzczsJLyogMHgwMGY4ICovCiAJX191OAlwYWRfMHgwMGZjWzB4MDEwMC0weDAwZmNdOwkvKiAweDAwZmMgKi8KLQlfX3UzMglzdF9zdGF0dXNfZml4ZWRfbG9nb3V0WzRdOwkvKiAweDAxMDAgKi8KLQlfX3U4CXBhZF8weDAxMTBbMHgwMTIwLTB4MDExMF07CS8qIDB4MDExMCAqLworCXBzd190CXBzd19zYXZlX2FyZWE7CQkJLyogMHgwMTAwICovCisJX191MzIJcHJlZml4cmVnX3NhdmVfYXJlYTsJCS8qIDB4MDEwOCAqLworCV9fdTgJcGFkXzB4MDEwY1sweDAxMjAtMHgwMTBjXTsJLyogMHgwMTBjICovCiAKIAkvKiBDUFUgcmVnaXN0ZXIgc2F2ZSBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLwogCV9fdTMyCWFjY2Vzc19yZWdzX3NhdmVfYXJlYVsxNl07CS8qIDB4MDEyMCAqLwpAQCAtMjkzLDEyICsxMzUsMTIgQEAKIAlfX3U2NAljbG9ja19jb21wYXJhdG9yOwkJLyogMHgwMmQwICovCiAJX191MzIJbWFjaGluZV9mbGFnczsJCQkvKiAweDAyZDggKi8KIAlfX3UzMglmdHJhY2VfZnVuYzsJCQkvKiAweDAyZGMgKi8KLQlfX3U4CXBhZF8weDAyZjBbMHgwMzAwLTB4MDJmMF07CS8qIDB4MDJmMCAqLworCV9fdTgJcGFkXzB4MDJlMFsweDAzMDAtMHgwMmUwXTsJLyogMHgwMmUwICovCiAKIAkvKiBJbnRlcnJ1cHQgcmVzcG9uc2UgYmxvY2sgKi8KIAlfX3U4CWlyYls2NF07CQkJLyogMHgwMzAwICovCiAKLQlfX3U4CXBhZF8weDA0MDBbMHgwZTAwLTB4MDQwMF07CS8qIDB4MDQwMCAqLworCV9fdTgJcGFkXzB4MDM0MFsweDBlMDAtMHgwMzQwXTsJLyogMHgwMzQwICovCiAKIAkvKgogCSAqIDB4ZTAwIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBJUEwgUGFyYW1ldGVyIEluZm9ybWF0aW9uCkBAIC0zMTAsMTAgKzE1MiwzMiBAQAogCiAJLyogQWxpZ24gdG8gdGhlIHRvcCAxayBvZiBwcmVmaXggYXJlYSAqLwogCV9fdTgJcGFkXzB4MGUwOFsweDEwMDAtMHgwZTA4XTsJLyogMHgwZTA4ICovCi0jZWxzZSAvKiAhX19zMzkweF9fICovCi0JLyogMHgwMDAwIC0gMHgwMWZmOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLwotCV9fdTMyCWNjdzFbMl07CQkJLyogMHgwMDAwICovCi0JX191MzIJY2N3Mls0XTsJCQkvKiAweDAwMDggKi8KK30gX19wYWNrZWQ7CisKKyNlbHNlIC8qIENPTkZJR18zMkJJVCAqLworCisjZGVmaW5lIExDX09SREVSIDEKKyNkZWZpbmUgTENfUEFHRVMgMgorCitzdHJ1Y3Qgc2F2ZV9hcmVhIHsKKwl1NjQJZnBfcmVnc1sxNl07CisJdTY0CWdwX3JlZ3NbMTZdOworCXU4CXBzd1sxNl07CisJdTgJcGFkMVs4XTsKKwl1MzIJcHJlZl9yZWc7CisJdTMyCWZwX2N0cmxfcmVnOworCXU4CXBhZDJbNF07CisJdTMyCXRvZF9yZWc7CisJdTY0CXRpbWVyOworCXU2NAljbGtfY21wOworCXU4CXBhZDNbOF07CisJdTMyCWFjY19yZWdzWzE2XTsKKwl1NjQJY3RybF9yZWdzWzE2XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBfbG93Y29yZSB7CisJX191OAlwYWRfMHgwMDAwWzB4MDAxNC0weDAwMDBdOwkvKiAweDAwMDAgKi8KKwlfX3UzMglpcGxfcGFybWJsb2NrX3B0cjsJCS8qIDB4MDAxNCAqLwogCV9fdTgJcGFkXzB4MDAxOFsweDAwODAtMHgwMDE4XTsJLyogMHgwMDE4ICovCiAJX191MzIJZXh0X3BhcmFtczsJCQkvKiAweDAwODAgKi8KIAlfX3UxNgljcHVfYWRkcjsJCQkvKiAweDAwODQgKi8KQEAgLTM0NCw3ICsyMDgsOSBAQAogCV9fdTgJcGFkXzB4MDBmMFsweDAwZjQtMHgwMGYwXTsJLyogMHgwMGYwICovCiAJX191MzIJZXh0ZXJuYWxfZGFtYWdlX2NvZGU7CQkvKiAweDAwZjQgKi8KIAlhZGRyX3QJZmFpbGluZ19zdG9yYWdlX2FkZHJlc3M7CS8qIDB4MDBmOCAqLwotCV9fdTgJcGFkXzB4MDEwMFsweDAxMjAtMHgwMTAwXTsJLyogMHgwMTAwICovCisJX191OAlwYWRfMHgwMTAwWzB4MDExMC0weDAxMDBdOwkvKiAweDAxMDAgKi8KKwlfX3U2NAlicmVha2luZ19ldmVudF9hZGRyOwkJLyogMHgwMTEwICovCisJX191OAlwYWRfMHgwMTE4WzB4MDEyMC0weDAxMThdOwkvKiAweDAxMTggKi8KIAlwc3dfdAlyZXN0YXJ0X29sZF9wc3c7CQkvKiAweDAxMjAgKi8KIAlwc3dfdAlleHRlcm5hbF9vbGRfcHN3OwkJLyogMHgwMTMwICovCiAJcHN3X3QJc3ZjX29sZF9wc3c7CQkJLyogMHgwMTQwICovCkBAIC00MjUsNyArMjkxLDcgQEAKIAkvKiBDUFUgcmVnaXN0ZXIgc2F2ZSBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLwogCV9fdTY0CWZsb2F0aW5nX3B0X3NhdmVfYXJlYVsxNl07CS8qIDB4MTIwMCAqLwogCV9fdTY0CWdwcmVnc19zYXZlX2FyZWFbMTZdOwkJLyogMHgxMjgwICovCi0JX191MzIJc3Rfc3RhdHVzX2ZpeGVkX2xvZ291dFs0XTsJLyogMHgxMzAwICovCisJcHN3X3QJcHN3X3NhdmVfYXJlYTsJCQkvKiAweDEzMDAgKi8KIAlfX3U4CXBhZF8weDEzMTBbMHgxMzE4LTB4MTMxMF07CS8qIDB4MTMxMCAqLwogCV9fdTMyCXByZWZpeHJlZ19zYXZlX2FyZWE7CQkvKiAweDEzMTggKi8KIAlfX3UzMglmcHRfY3JlZ19zYXZlX2FyZWE7CQkvKiAweDEzMWMgKi8KQEAgLTQzOSwxMCArMzA1LDEyIEBACiAKIAkvKiBhbGlnbiB0byB0aGUgdG9wIG9mIHRoZSBwcmVmaXggYXJlYSAqLwogCV9fdTgJcGFkXzB4MTQwMFsweDIwMDAtMHgxNDAwXTsJLyogMHgxNDAwICovCi0jZW5kaWYgLyogIV9fczM5MHhfXyAqLwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgLyogRW5kIHN0cnVjdHVyZSovCit9IF9fcGFja2VkOworCisjZW5kaWYgLyogQ09ORklHXzMyQklUICovCiAKICNkZWZpbmUgUzM5MF9sb3djb3JlICgqKChzdHJ1Y3QgX2xvd2NvcmUgKikgMCkpCisKIGV4dGVybiBzdHJ1Y3QgX2xvd2NvcmUgKmxvd2NvcmVfcHRyW107CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHJlZml4KF9fdTMyIGFkZHJlc3MpCkBAIC00NTgsNiArMzI2LDQgQEAKIAlyZXR1cm4gYWRkcmVzczsKIH0KIAotI2VuZGlmCi0KLSNlbmRpZgorI2VuZGlmIC8qIF9BU01fUzM5MF9MT1dDT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDVlOWRhZjUuLmFmNjUwZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTA3LDkgKzEwNyw2IEBACiAjZGVmaW5lIF9fcGdkKHgpICAgICAgICAoKHBnZF90KSB7ICh4KSB9ICkKICNkZWZpbmUgX19wZ3Byb3QoeCkgICAgICgocGdwcm90X3QpIHsgKHgpIH0gKQogCi0vKiBkZWZhdWx0IHN0b3JhZ2Uga2V5IHVzZWQgZm9yIGFsbCBwYWdlcyAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBkZWZhdWx0X3N0b3JhZ2Vfa2V5OwotCiBzdGF0aWMgaW5saW5lIHZvaWQKIHBhZ2Vfc2V0X3N0b3JhZ2Vfa2V5KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IHNrZXkpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBlMmZhNzljLi45YjViOTE4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTQzLDcgKzQzLDcgQEAKICAqIFRoZSBTMzkwIGRvZXNuJ3QgaGF2ZSBhbnkgZXh0ZXJuYWwgTU1VIGluZm86IHRoZSBrZXJuZWwgcGFnZQogICogdGFibGVzIGNvbnRhaW4gYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCiAgKi8KLSNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZSkgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZXApICAgICBkbyB7IH0gd2hpbGUgKDApCiAKIC8qCiAgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGI0MjcxNTQuLjczZTI1OTggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGdldF9jcHVfaWQoc3RydWN0IGNwdWlkICpwdHIpCiB7Ci0JYXNtIHZvbGF0aWxlKCJzdGlkcCAwKCUxKSIgOiAiPW0iICgqcHRyKSA6ICJhIiAocHRyKSk7CisJYXNtIHZvbGF0aWxlKCJzdGlkcCAlMCIgOiAiPVEiICgqcHRyKSk7CiB9CiAKIGV4dGVybiB2b2lkIHMzOTBfYWRqdXN0X2ppZmZpZXModm9pZCk7CkBAIC0xODQsOSArMTg0LDkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2xvYWRfcHN3KHBzd190IHBzdykKIHsKICNpZm5kZWYgX19zMzkweF9fCi0JYXNtIHZvbGF0aWxlKCJscHN3ICAwKCUwKSIgOiA6ICJhIiAoJnBzdyksICJtIiAocHN3KSA6ICJjYyIpOworCWFzbSB2b2xhdGlsZSgibHBzdyAgJTAiIDogOiAiUSIgKHBzdykgOiAiY2MiKTsKICNlbHNlCi0JYXNtIHZvbGF0aWxlKCJscHN3ZSAwKCUwKSIgOiA6ICJhIiAoJnBzdyksICJtIiAocHN3KSA6ICJjYyIpOworCWFzbSB2b2xhdGlsZSgibHBzd2UgJTAiIDogOiAiUSIgKHBzdykgOiAiY2MiKTsKICNlbmRpZgogfQogCkBAIC0yMDYsMTcgKzIwNiwxNyBAQAogCWFzbSB2b2xhdGlsZSgKIAkJIgliYXNyCSUwLDBcbiIKIAkJIjA6CWFoaQklMCwxZi0wYlxuIgotCQkiCXN0CSUwLDQoJTEpXG4iCi0JCSIJbHBzdwkwKCUxKVxuIgorCQkiCXN0CSUwLCVPMSs0KCVSMSlcbiIKKwkJIglscHN3CSUxXG4iCiAJCSIxOiIKLQkJOiAiPSZkIiAoYWRkcikgOiAiYSIgKCZwc3cpLCAibSIgKHBzdykgOiAibWVtb3J5IiwgImNjIik7CisJCTogIj0mZCIgKGFkZHIpLCAiPVEiIChwc3cpIDogIlEiIChwc3cpIDogIm1lbW9yeSIsICJjYyIpOwogI2Vsc2UgLyogX19zMzkweF9fICovCiAJYXNtIHZvbGF0aWxlKAogCQkiCWxhcmwJJTAsMWZcbiIKLQkJIglzdGcJJTAsOCglMSlcbiIKLQkJIglscHN3ZQkwKCUxKVxuIgorCQkiCXN0ZwklMCwlTzErOCglUjEpXG4iCisJCSIJbHBzd2UJJTFcbiIKIAkJIjE6IgotCQk6ICI9JmQiIChhZGRyKSA6ICJhIiAoJnBzdyksICJtIiAocHN3KSA6ICJtZW1vcnkiLCAiY2MiKTsKKwkJOiAiPSZkIiAoYWRkciksICI9USIgKHBzdykgOiAiUSIgKHBzdykgOiAibWVtb3J5IiwgImNjIik7CiAjZW5kaWYgLyogX19zMzkweF9fICovCiB9CiAgCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggOTVkY2YxOC4uZGQyZDkxMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtNDkyLDEzICs0OTIsMjQgQEAKIHN0cnVjdCB0YXNrX3N0cnVjdDsKIGV4dGVybiB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKIAogI2RlZmluZSB1c2VyX21vZGUocmVncykgKCgocmVncyktPnBzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKSAhPSAwKQogI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPnBzdy5hZGRyICYgUFNXX0FERFJfSU5TTikKICNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKHJlZ3MpKChyZWdzKS0+Z3Byc1sxNV0pCiAjZGVmaW5lIHJlZ3NfcmV0dXJuX3ZhbHVlKHJlZ3MpKChyZWdzKS0+Z3Byc1syXSkKICNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCi1leHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKKworaW50IHJlZ3NfcXVlcnlfcmVnaXN0ZXJfb2Zmc2V0KGNvbnN0IGNoYXIgKm5hbWUpOworY29uc3QgY2hhciAqcmVnc19xdWVyeV9yZWdpc3Rlcl9uYW1lKHVuc2lnbmVkIGludCBvZmZzZXQpOwordW5zaWduZWQgbG9uZyByZWdzX2dldF9yZWdpc3RlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG9mZnNldCk7Cit1bnNpZ25lZCBsb25nIHJlZ3NfZ2V0X2tlcm5lbF9zdGFja19udGgoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBuKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGtlcm5lbF9zdGFja19wb2ludGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByZWdzLT5ncHJzWzE1XSAmIFBTV19BRERSX0lOU047Cit9CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCmluZGV4IDc5ZDg0OWYuLmM2NjZiZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaApAQCAtMTMsNyArMTMsOCBAQAogI2luY2x1ZGUgPGFzbS9jaW8uaD4KICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CiAKLSNkZWZpbmUgUURJT19NQVhfUVVFVUVTX1BFUl9JUlEJCTMyCisvKiBvbmx5IHVzZSA0IHF1ZXVlcyB0byBzYXZlIHNvbWUgY2FjaGVsaW5lcyAqLworI2RlZmluZSBRRElPX01BWF9RVUVVRVNfUEVSX0lSUQkJNAogI2RlZmluZSBRRElPX01BWF9CVUZGRVJTX1BFUl9RCQkxMjgKICNkZWZpbmUgUURJT19NQVhfQlVGRkVSU19NQVNLCQkoUURJT19NQVhfQlVGRkVSU19QRVJfUSAtIDEpCiAjZGVmaW5lIFFESU9fTUFYX0VMRU1FTlRTX1BFUl9CVUZGRVIJMTYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9yd3NlbS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3J3c2VtLmgKaW5kZXggOWQyYTE3OS4uNDIzZmRkYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3J3c2VtLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3J3c2VtLmgKQEAgLTEyNCwyMSArMTI0LDIxIEBACiAKIAlhc20gdm9sYXRpbGUoCiAjaWZuZGVmIF9fczM5MHhfXwotCQkiCWwJJTAsMCglMylcbiIKKwkJIglsCSUwLCUyXG4iCiAJCSIwOglscgklMSwlMFxuIgotCQkiCWFoaQklMSwlNVxuIgotCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJYWhpCSUxLCU0XG4iCisJCSIJY3MJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWxncgklMSwlMFxuIgotCQkiCWFnaGkJJTEsJTVcbiIKLQkJIgljc2cJJTAsJTEsMCglMylcbiIKKwkJIglhZ2hpCSUxLCU0XG4iCisJCSIJY3NnCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0JCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLAotCQkgICJpIiAoUldTRU1fQUNUSVZFX1JFQURfQklBUykgOiAiY2MiLCAibWVtb3J5Iik7CisJCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPVEiIChzZW0tPmNvdW50KQorCQk6ICJRIiAoc2VtLT5jb3VudCksICJpIiAoUldTRU1fQUNUSVZFX1JFQURfQklBUykKKwkJOiAiY2MiLCAibWVtb3J5Iik7CiAJaWYgKG9sZCA8IDApCiAJCXJ3c2VtX2Rvd25fcmVhZF9mYWlsZWQoc2VtKTsKIH0KQEAgLTE1MiwyNSArMTUyLDI1IEBACiAKIAlhc20gdm9sYXRpbGUoCiAjaWZuZGVmIF9fczM5MHhfXwotCQkiCWwJJTAsMCglMylcbiIKKwkJIglsCSUwLCUyXG4iCiAJCSIwOglsdHIJJTEsJTBcbiIKIAkJIglqbQkxZlxuIgotCQkiCWFoaQklMSwlNVxuIgotCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJYWhpCSUxLCU0XG4iCisJCSIJY3MJJTAsJTEsJTJcbiIKIAkJIglqbAkwYlxuIgogCQkiMToiCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLQkJIglsZwklMCwwKCUzKVxuIgorCQkiCWxnCSUwLCUyXG4iCiAJCSIwOglsdGdyCSUxLCUwXG4iCiAJCSIJam0JMWZcbiIKLQkJIglhZ2hpCSUxLCU1XG4iCi0JCSIJY3NnCSUwLCUxLDAoJTMpXG4iCisJCSIJYWdoaQklMSwlNFxuIgorCQkiCWNzZwklMCwlMSwlMlxuIgogCQkiCWpsCTBiXG4iCiAJCSIxOiIKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCi0JCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksCi0JCSAgImkiIChSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTKSA6ICJjYyIsICJtZW1vcnkiKTsKKwkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgImkiIChSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTKQorCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gb2xkID49IDAgPyAxIDogMDsKIH0KIApAQCAtMTg0LDIwICsxODQsMjAgQEAKIAl0bXAgPSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUzsKIAlhc20gdm9sYXRpbGUoCiAjaWZuZGVmIF9fczM5MHhfXwotCQkiCWwJJTAsMCglMylcbiIKKwkJIglsCSUwLCUyXG4iCiAJCSIwOglscgklMSwlMFxuIgotCQkiCWEJJTEsJTVcbiIKLQkJIgljcwklMCwlMSwwKCUzKVxuIgorCQkiCWEJJTEsJTRcbiIKKwkJIgljcwklMCwlMSwlMlxuIgogCQkiCWpsCTBiIgogI2Vsc2UgLyogX19zMzkweF9fICovCi0JCSIJbGcJJTAsMCglMylcbiIKKwkJIglsZwklMCwlMlxuIgogCQkiMDoJbGdyCSUxLCUwXG4iCi0JCSIJYWcJJTEsJTVcbiIKLQkJIgljc2cJJTAsJTEsMCglMylcbiIKKwkJIglhZwklMSwlNFxuIgorCQkiCWNzZwklMCwlMSwlMlxuIgogCQkiCWpsCTBiIgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKLQkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwgIm0iICh0bXApCisJCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPVEiIChzZW0tPmNvdW50KQorCQk6ICJRIiAoc2VtLT5jb3VudCksICJtIiAodG1wKQogCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlpZiAob2xkICE9IDApCiAJCXJ3c2VtX2Rvd25fd3JpdGVfZmFpbGVkKHNlbSk7CkBAIC0yMTcsMjIgKzIxNywyMiBAQAogCiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglsCSUwLDAoJTIpXG4iCisJCSIJbAklMCwlMVxuIgogCQkiMDoJbHRyCSUwLCUwXG4iCiAJCSIJam56CTFmXG4iCi0JCSIJY3MJJTAsJTQsMCglMilcbiIKKwkJIgljcwklMCwlMywlMVxuIgogCQkiCWpsCTBiXG4iCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLQkJIglsZwklMCwwKCUyKVxuIgorCQkiCWxnCSUwLCUxXG4iCiAJCSIwOglsdGdyCSUwLCUwXG4iCiAJCSIJam56CTFmXG4iCi0JCSIJY3NnCSUwLCU0LDAoJTIpXG4iCisJCSIJY3NnCSUwLCUzLCUxXG4iCiAJCSIJamwJMGJcbiIKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KIAkJIjE6IgotCQk6ICI9JmQiIChvbGQpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLAotCQkgICJkIiAoUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpIDogImNjIiwgIm1lbW9yeSIpOworCQk6ICI9JmQiIChvbGQpLCAiPVEiIChzZW0tPmNvdW50KQorCQk6ICJRIiAoc2VtLT5jb3VudCksICJkIiAoUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpCisJCTogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiAob2xkID09IFJXU0VNX1VOTE9DS0VEX1ZBTFVFKSA/IDEgOiAwOwogfQogCkBAIC0yNDUsMjEgKzI0NSwyMCBAQAogCiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglsCSUwLDAoJTMpXG4iCisJCSIJbAklMCwlMlxuIgogCQkiMDoJbHIJJTEsJTBcbiIKLQkJIglhaGkJJTEsJTVcbiIKLQkJIgljcwklMCwlMSwwKCUzKVxuIgorCQkiCWFoaQklMSwlNFxuIgorCQkiCWNzCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLQkJIglsZwklMCwwKCUzKVxuIgorCQkiCWxnCSUwLCUyXG4iCiAJCSIwOglsZ3IJJTEsJTBcbiIKLQkJIglhZ2hpCSUxLCU1XG4iCi0JCSIJY3NnCSUwLCUxLDAoJTMpXG4iCisJCSIJYWdoaQklMSwlNFxuIgorCQkiCWNzZwklMCwlMSwlMlxuIgogCQkiCWpsCTBiIgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKLQkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwKLQkJICAiaSIgKC1SV1NFTV9BQ1RJVkVfUkVBRF9CSUFTKQorCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1RIiAoc2VtLT5jb3VudCkKKwkJOiAiUSIgKHNlbS0+Y291bnQpLCAiaSIgKC1SV1NFTV9BQ1RJVkVfUkVBRF9CSUFTKQogCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlpZiAobmV3IDwgMCkKIAkJaWYgKChuZXcgJiBSV1NFTV9BQ1RJVkVfTUFTSykgPT0gMCkKQEAgLTI3NiwyMCArMjc1LDIwIEBACiAJdG1wID0gLVJXU0VNX0FDVElWRV9XUklURV9CSUFTOwogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJbAklMCwwKCUzKVxuIgorCQkiCWwJJTAsJTJcbiIKIAkJIjA6CWxyCSUxLCUwXG4iCi0JCSIJYQklMSwlNVxuIgotCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJYQklMSwlNFxuIgorCQkiCWNzCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLQkJIglsZwklMCwwKCUzKVxuIgorCQkiCWxnCSUwLCUyXG4iCiAJCSIwOglsZ3IJJTEsJTBcbiIKLQkJIglhZwklMSwlNVxuIgotCQkiCWNzZwklMCwlMSwwKCUzKVxuIgorCQkiCWFnCSUxLCU0XG4iCisJCSIJY3NnCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0JCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLCAibSIgKHRtcCkKKwkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgIm0iICh0bXApCiAJCTogImNjIiwgIm1lbW9yeSIpOwogCWlmIChuZXcgPCAwKQogCQlpZiAoKG5ldyAmIFJXU0VNX0FDVElWRV9NQVNLKSA9PSAwKQpAQCAtMzA2LDIwICszMDUsMjAgQEAKIAl0bXAgPSAtUldTRU1fV0FJVElOR19CSUFTOwogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJbAklMCwwKCUzKVxuIgorCQkiCWwJJTAsJTJcbiIKIAkJIjA6CWxyCSUxLCUwXG4iCi0JCSIJYQklMSwlNVxuIgotCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJYQklMSwlNFxuIgorCQkiCWNzCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLQkJIglsZwklMCwwKCUzKVxuIgorCQkiCWxnCSUwLCUyXG4iCiAJCSIwOglsZ3IJJTEsJTBcbiIKLQkJIglhZwklMSwlNVxuIgotCQkiCWNzZwklMCwlMSwwKCUzKVxuIgorCQkiCWFnCSUxLCU0XG4iCisJCSIJY3NnCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0JCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLCAibSIgKHRtcCkKKwkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgIm0iICh0bXApCiAJCTogImNjIiwgIm1lbW9yeSIpOwogCWlmIChuZXcgPiAxKQogCQlyd3NlbV9kb3duZ3JhZGVfd2FrZShzZW0pOwpAQCAtMzM0LDIwICszMzMsMjAgQEAKIAogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJbAklMCwwKCUzKVxuIgorCQkiCWwJJTAsJTJcbiIKIAkJIjA6CWxyCSUxLCUwXG4iCi0JCSIJYXIJJTEsJTVcbiIKLQkJIgljcwklMCwlMSwwKCUzKVxuIgorCQkiCWFyCSUxLCU0XG4iCisJCSIJY3MJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWxncgklMSwlMFxuIgotCQkiCWFncgklMSwlNVxuIgotCQkiCWNzZwklMCwlMSwwKCUzKVxuIgorCQkiCWFncgklMSwlNFxuIgorCQkiCWNzZwklMCwlMSwlMlxuIgogCQkiCWpsCTBiIgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKLQkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwgImQiIChkZWx0YSkKKwkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgImQiIChkZWx0YSkKIAkJOiAiY2MiLCAibWVtb3J5Iik7CiB9CiAKQEAgLTM2MCwyMCArMzU5LDIwIEBACiAKIAlhc20gdm9sYXRpbGUoCiAjaWZuZGVmIF9fczM5MHhfXwotCQkiCWwJJTAsMCglMylcbiIKKwkJIglsCSUwLCUyXG4iCiAJCSIwOglscgklMSwlMFxuIgotCQkiCWFyCSUxLCU1XG4iCi0JCSIJY3MJJTAsJTEsMCglMylcbiIKKwkJIglhcgklMSwlNFxuIgorCQkiCWNzCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLQkJIglsZwklMCwwKCUzKVxuIgorCQkiCWxnCSUwLCUyXG4iCiAJCSIwOglsZ3IJJTEsJTBcbiIKLQkJIglhZ3IJJTEsJTVcbiIKLQkJIgljc2cJJTAsJTEsMCglMylcbiIKKwkJIglhZ3IJJTEsJTRcbiIKKwkJIgljc2cJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCi0JCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksICJkIiAoZGVsdGEpCisJCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPVEiIChzZW0tPmNvdW50KQorCQk6ICJRIiAoc2VtLT5jb3VudCksICJkIiAoZGVsdGEpCiAJCTogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiBuZXc7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IDUyYTc3OWMuLjlhYjZiZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC0xNCwxNCArMTQsMTQgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KICNkZWZpbmUgUEFSTUFSRUEJCTB4MTA0MDAKICNkZWZpbmUgTUVNT1JZX0NIVU5LUwkJMjU2CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKKyNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCiAjaWZuZGVmIF9fczM5MHhfXwogI2RlZmluZSBJUExfREVWSUNFICAgICAgICAoKih1bnNpZ25lZCBsb25nICopICAoMHgxMDQwNCkpCiAjZGVmaW5lIElOSVRSRF9TVEFSVCAgICAgICgqKHVuc2lnbmVkIGxvbmcgKikgICgweDEwNDBDKSkKQEAgLTcxLDkgKzcxLDEyIEBACiAjZGVmaW5lIE1BQ0hJTkVfRkxBR19LVk0JKDFVTCA8PCA5KQogI2RlZmluZSBNQUNISU5FX0ZMQUdfSFBBR0UJKDFVTCA8PCAxMCkKICNkZWZpbmUgTUFDSElORV9GTEFHX1BGTUYJKDFVTCA8PCAxMSkKKyNkZWZpbmUgTUFDSElORV9GTEFHX0xQQVIJKDFVTCA8PCAxMikKIAogI2RlZmluZSBNQUNISU5FX0lTX1ZNCQkoUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgJiBNQUNISU5FX0ZMQUdfVk0pCiAjZGVmaW5lIE1BQ0hJTkVfSVNfS1ZNCQkoUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgJiBNQUNISU5FX0ZMQUdfS1ZNKQorI2RlZmluZSBNQUNISU5FX0lTX0xQQVIJCShTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyAmIE1BQ0hJTkVfRkxBR19MUEFSKQorCiAjZGVmaW5lIE1BQ0hJTkVfSEFTX0RJQUc5QwkoUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgJiBNQUNISU5FX0ZMQUdfRElBRzlDKQogCiAjaWZuZGVmIF9fczM5MHhfXwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NpZ3AuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zaWdwLmgKaW5kZXggZjcyZDYxMS4uZTNiZmZkNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NpZ3AuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2lncC5oCkBAIC0xLDI0ICsxLDE5IEBACiAvKgotICogIGluY2x1ZGUvYXNtLXMzOTAvc2lncC5oCisgKiAgUm91dGluZXMgYW5kIHN0cnVjdHVyZXMgZm9yIHNpZ25hbGxpbmcgb3RoZXIgcHJvY2Vzc29ycy4KICAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTkgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOiBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pLAotICogICAgICAgICAgICAgICBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCi0gKiAgICAgICAgICAgICAgIEhlaWtvIENhcnN0ZW5zIChoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tKQotICoKLSAqICBzaWdwLmggYnkgRC5KLiBCYXJyb3cgKGMpIElCTSAxOTk5Ci0gKiAgY29udGFpbnMgcm91dGluZXMgLyBzdHJ1Y3R1cmVzIGZvciBzaWduYWxsaW5nIG90aGVyIFMvMzkwIHByb2Nlc3NvcnMgaW4gYW4KLSAqICBTTVAgY29uZmlndXJhdGlvbi4KKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OSwyMDEwCisgKiAgICBBdXRob3Iocyk6IERlbmlzIEpvc2VwaCBCYXJyb3csCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKICAqLwogCi0jaWZuZGVmIF9fU0lHUF9fCi0jZGVmaW5lIF9fU0lHUF9fCisjaWZuZGVmIF9fQVNNX1NJR1BfSAorI2RlZmluZSBfX0FTTV9TSUdQX0gKIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotLyogZ2V0IHJlYWwgY3B1IGFkZHJlc3MgZnJvbSBsb2dpY2FsIGNwdSBudW1iZXIgKi8KLWV4dGVybiBpbnQgX19jcHVfbG9naWNhbF9tYXBbXTsKKy8qIEdldCByZWFsIGNwdSBhZGRyZXNzIGZyb20gbG9naWNhbCBjcHUgbnVtYmVyLiAqLworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IF9fY3B1X2xvZ2ljYWxfbWFwW107CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNwdV9sb2dpY2FsX21hcChpbnQgY3B1KQogewpAQCAtMjksMTA3ICsyNCwxMDggQEAKICNlbmRpZgogfQogCi10eXBlZGVmIGVudW0KLXsKLQlzaWdwX3VuYXNzaWduZWQ9MHgwLAotCXNpZ3Bfc2Vuc2UsCi0Jc2lncF9leHRlcm5hbF9jYWxsLAotCXNpZ3BfZW1lcmdlbmN5X3NpZ25hbCwKLQlzaWdwX3N0YXJ0LAotCXNpZ3Bfc3RvcCwKLQlzaWdwX3Jlc3RhcnQsCi0Jc2lncF91bmFzc2lnbmVkMSwKLQlzaWdwX3VuYXNzaWduZWQyLAotCXNpZ3Bfc3RvcF9hbmRfc3RvcmVfc3RhdHVzLAotCXNpZ3BfdW5hc3NpZ25lZDMsCi0Jc2lncF9pbml0aWFsX2NwdV9yZXNldCwKLQlzaWdwX2NwdV9yZXNldCwKLQlzaWdwX3NldF9wcmVmaXgsCi0Jc2lncF9zdG9yZV9zdGF0dXNfYXRfYWRkcmVzcywKLQlzaWdwX3N0b3JlX2V4dGVuZGVkX3N0YXR1c19hdF9hZGRyZXNzCi19IHNpZ3Bfb3JkZXJfY29kZTsKK2VudW0geworCXNpZ3Bfc2Vuc2UgPSAxLAorCXNpZ3BfZXh0ZXJuYWxfY2FsbCA9IDIsCisJc2lncF9lbWVyZ2VuY3lfc2lnbmFsID0gMywKKwlzaWdwX3N0YXJ0ID0gNCwKKwlzaWdwX3N0b3AgPSA1LAorCXNpZ3BfcmVzdGFydCA9IDYsCisJc2lncF9zdG9wX2FuZF9zdG9yZV9zdGF0dXMgPSA5LAorCXNpZ3BfaW5pdGlhbF9jcHVfcmVzZXQgPSAxMSwKKwlzaWdwX2NwdV9yZXNldCA9IDEyLAorCXNpZ3Bfc2V0X3ByZWZpeCA9IDEzLAorCXNpZ3Bfc3RvcmVfc3RhdHVzX2F0X2FkZHJlc3MgPSAxNCwKKwlzaWdwX3N0b3JlX2V4dGVuZGVkX3N0YXR1c19hdF9hZGRyZXNzID0gMTUsCisJc2lncF9zZXRfYXJjaGl0ZWN0dXJlID0gMTgsCisJc2lncF9jb25kaXRpb25hbF9lbWVyZ2VuY3lfc2lnbmFsID0gMTksCisJc2lncF9zZW5zZV9ydW5uaW5nID0gMjEsCit9OwogCi10eXBlZGVmIF9fdTMyIHNpZ3Bfc3RhdHVzX3dvcmQ7Ci0KLXR5cGVkZWYgZW51bQotewotICAgICAgICBzaWdwX29yZGVyX2NvZGVfYWNjZXB0ZWQ9MCwKLQlzaWdwX3N0YXR1c19zdG9yZWQsCi0Jc2lncF9idXN5LAotCXNpZ3Bfbm90X29wZXJhdGlvbmFsCi19IHNpZ3BfY2NvZGU7Ci0KK2VudW0geworCXNpZ3Bfb3JkZXJfY29kZV9hY2NlcHRlZCA9IDAsCisJc2lncF9zdGF0dXNfc3RvcmVkID0gMSwKKwlzaWdwX2J1c3kgPSAyLAorCXNpZ3Bfbm90X29wZXJhdGlvbmFsID0gMywKK307CiAKIC8qCi0gKiBEZWZpbml0aW9ucyBmb3IgdGhlIGV4dGVybmFsIGNhbGwKKyAqIERlZmluaXRpb25zIGZvciBleHRlcm5hbCBjYWxsLgogICovCi0KLS8qICdCaXQnIHNpZ25hbHMsIGFzeW5jaHJvbm91cyAqLwotdHlwZWRlZiBlbnVtCi17Ci0JZWNfc2NoZWR1bGU9MCwKK2VudW0geworCWVjX3NjaGVkdWxlID0gMCwKIAllY19jYWxsX2Z1bmN0aW9uLAogCWVjX2NhbGxfZnVuY3Rpb25fc2luZ2xlLAotCWVjX2JpdF9sYXN0Ci19IGVjX2JpdF9zaWc7Cit9OwogCiAvKgotICogU2lnbmFsIHByb2Nlc3NvcgorICogU2lnbmFsIHByb2Nlc3Nvci4KICAqLwotc3RhdGljIGlubGluZSBzaWdwX2Njb2RlCi1zaWduYWxfcHJvY2Vzc29yKF9fdTE2IGNwdV9hZGRyLCBzaWdwX29yZGVyX2NvZGUgb3JkZXJfY29kZSkKK3N0YXRpYyBpbmxpbmUgaW50IHJhd19zaWdwKHUxNiBjcHUsIGludCBvcmRlcikKIHsKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzEgYXNtICgiMSIpID0gMDsKLQlzaWdwX2Njb2RlIGNjb2RlOworCWludCBjY29kZTsKIAogCWFzbSB2b2xhdGlsZSgKIAkJIglzaWdwCSUxLCUyLDAoJTMpXG4iCiAJCSIJaXBtCSUwXG4iCiAJCSIJc3JsCSUwLDI4XG4iCiAJCToJIj1kIgkoY2NvZGUpCi0JCTogImQiIChyZWcxKSwgImQiIChjcHVfbG9naWNhbF9tYXAoY3B1X2FkZHIpKSwKLQkJICAiYSIgKG9yZGVyX2NvZGUpIDogImNjIiAsICJtZW1vcnkiKTsKKwkJOiAiZCIgKHJlZzEpLCAiZCIgKGNwdSksCisJCSAgImEiIChvcmRlcikgOiAiY2MiICwgIm1lbW9yeSIpOwogCXJldHVybiBjY29kZTsKIH0KIAogLyoKLSAqIFNpZ25hbCBwcm9jZXNzb3Igd2l0aCBwYXJhbWV0ZXIKKyAqIFNpZ25hbCBwcm9jZXNzb3Igd2l0aCBwYXJhbWV0ZXIuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc2lncF9jY29kZQotc2lnbmFsX3Byb2Nlc3Nvcl9wKF9fdTMyIHBhcmFtZXRlciwgX191MTYgY3B1X2FkZHIsIHNpZ3Bfb3JkZXJfY29kZSBvcmRlcl9jb2RlKQorc3RhdGljIGlubGluZSBpbnQgcmF3X3NpZ3BfcCh1MzIgcGFyYW1ldGVyLCB1MTYgY3B1LCBpbnQgb3JkZXIpCiB7CiAJcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlZzEgYXNtICgiMSIpID0gcGFyYW1ldGVyOwotCXNpZ3BfY2NvZGUgY2NvZGU7CisJaW50IGNjb2RlOwogCiAJYXNtIHZvbGF0aWxlKAogCQkiCXNpZ3AJJTEsJTIsMCglMylcbiIKIAkJIglpcG0JJTBcbiIKIAkJIglzcmwJJTAsMjhcbiIKIAkJOiAiPWQiIChjY29kZSkKLQkJOiAiZCIgKHJlZzEpLCAiZCIgKGNwdV9sb2dpY2FsX21hcChjcHVfYWRkcikpLAotCQkgICJhIiAob3JkZXJfY29kZSkgOiAiY2MiICwgIm1lbW9yeSIpOworCQk6ICJkIiAocmVnMSksICJkIiAoY3B1KSwKKwkJICAiYSIgKG9yZGVyKSA6ICJjYyIgLCAibWVtb3J5Iik7CiAJcmV0dXJuIGNjb2RlOwogfQogCiAvKgotICogU2lnbmFsIHByb2Nlc3NvciB3aXRoIHBhcmFtZXRlciBhbmQgcmV0dXJuIHN0YXR1cworICogU2lnbmFsIHByb2Nlc3NvciB3aXRoIHBhcmFtZXRlciBhbmQgcmV0dXJuIHN0YXR1cy4KICAqLwotc3RhdGljIGlubGluZSBzaWdwX2Njb2RlCi1zaWduYWxfcHJvY2Vzc29yX3BzKF9fdTMyICpzdGF0dXNwdHIsIF9fdTMyIHBhcmFtZXRlciwgX191MTYgY3B1X2FkZHIsCi0JCSAgICBzaWdwX29yZGVyX2NvZGUgb3JkZXJfY29kZSkKK3N0YXRpYyBpbmxpbmUgaW50IHJhd19zaWdwX3BzKHUzMiAqc3RhdHVzLCB1MzIgcGFybSwgdTE2IGNwdSwgaW50IG9yZGVyKQogewotCXJlZ2lzdGVyIHVuc2lnbmVkIGludCByZWcxIGFzbSAoIjEiKSA9IHBhcmFtZXRlcjsKLQlzaWdwX2Njb2RlIGNjb2RlOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCByZWcxIGFzbSAoIjEiKSA9IHBhcm07CisJaW50IGNjb2RlOwogCiAJYXNtIHZvbGF0aWxlKAogCQkiCXNpZ3AJJTEsJTIsMCglMylcbiIKIAkJIglpcG0JJTBcbiIKIAkJIglzcmwJJTAsMjhcbiIKIAkJOiAiPWQiIChjY29kZSksICIrZCIgKHJlZzEpCi0JCTogImQiIChjcHVfbG9naWNhbF9tYXAoY3B1X2FkZHIpKSwgImEiIChvcmRlcl9jb2RlKQorCQk6ICJkIiAoY3B1KSwgImEiIChvcmRlcikKIAkJOiAiY2MiICwgIm1lbW9yeSIpOwotCSpzdGF0dXNwdHIgPSByZWcxOworCSpzdGF0dXMgPSByZWcxOwogCXJldHVybiBjY29kZTsKIH0KIAotI2VuZGlmIC8qIF9fU0lHUF9fICovCitzdGF0aWMgaW5saW5lIGludCBzaWdwKGludCBjcHUsIGludCBvcmRlcikKK3sKKwlyZXR1cm4gcmF3X3NpZ3AoY3B1X2xvZ2ljYWxfbWFwKGNwdSksIG9yZGVyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2lncF9wKHUzMiBwYXJhbWV0ZXIsIGludCBjcHUsIGludCBvcmRlcikKK3sKKwlyZXR1cm4gcmF3X3NpZ3BfcChwYXJhbWV0ZXIsIGNwdV9sb2dpY2FsX21hcChjcHUpLCBvcmRlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNpZ3BfcHModTMyICpzdGF0dXMsIHUzMiBwYXJtLCBpbnQgY3B1LCBpbnQgb3JkZXIpCit7CisJcmV0dXJuIHJhd19zaWdwX3BzKHN0YXR1cywgcGFybSwgY3B1X2xvZ2ljYWxfbWFwKGNwdSksIG9yZGVyKTsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NJR1BfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCmluZGV4IDJhYjExNDEuLmVkYzAzY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKQEAgLTI5LDcgKzI5LDQzIEBACiBleHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spOwogCi1leHRlcm4gdW5pb24gc2F2ZV9hcmVhICp6ZmNwZHVtcF9zYXZlX2FyZWFzW05SX0NQVVMgKyAxXTsKK2V4dGVybiBzdHJ1Y3Qgc2F2ZV9hcmVhICp6ZmNwZHVtcF9zYXZlX2FyZWFzW05SX0NQVVMgKyAxXTsKKworZXh0ZXJuIHZvaWQgc21wX3N3aXRjaF90b19pcGxfY3B1KHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICopOworZXh0ZXJuIHZvaWQgc21wX3N3aXRjaF90b19jcHUodm9pZCAoKikodm9pZCAqKSwgdm9pZCAqLCB1bnNpZ25lZCBsb25nIHNwLAorCQkJICAgICAgaW50IGZyb20sIGludCB0byk7CitleHRlcm4gdm9pZCBzbXBfcmVzdGFydF9jcHUodm9pZCk7CisKKy8qCisgKiByZXR1cm5zIDEgaWYgKHZpcnR1YWwpIGNwdSBpcyBzY2hlZHVsZWQKKyAqIHJldHVybnMgMCBvdGhlcndpc2UKKyAqLworc3RhdGljIGlubGluZSBpbnQgc21wX3ZjcHVfc2NoZWR1bGVkKGludCBjcHUpCit7CisJdTMyIHN0YXR1czsKKworCXN3aXRjaCAoc2lncF9wcygmc3RhdHVzLCAwLCBjcHUsIHNpZ3Bfc2Vuc2VfcnVubmluZykpIHsKKwljYXNlIHNpZ3Bfc3RhdHVzX3N0b3JlZDoKKwkJLyogQ2hlY2sgZm9yIHJ1bm5pbmcgc3RhdHVzICovCisJCWlmIChzdGF0dXMgJiAweDQwMCkKKwkJCXJldHVybiAwOworCQlicmVhazsKKwljYXNlIHNpZ3Bfbm90X29wZXJhdGlvbmFsOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIDE7Cit9CisKKyNlbHNlIC8qIENPTkZJR19TTVAgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNtcF9zd2l0Y2hfdG9faXBsX2NwdSh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqZGF0YSkKK3sKKwlmdW5jKGRhdGEpOworfQorCisjZGVmaW5lIHNtcF92Y3B1X3NjaGVkdWxlZAkoMSkKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCBhNTg3OTA3Li41NjYxMmZjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMTMsOCArMTMsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKLSNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQotCiBzdGF0aWMgaW5saW5lIGludAogX3Jhd19jb21wYXJlX2FuZF9zd2FwKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqbG9jaywKIAkJICAgICAgdW5zaWduZWQgaW50IG9sZCwgdW5zaWduZWQgaW50IG5ldykKQEAgLTI3LDIyICsyNSw2IEBACiAJcmV0dXJuIG9sZDsKIH0KIAotI2Vsc2UgLyogX19HTlVDX18gKi8KLQotc3RhdGljIGlubGluZSBpbnQKLV9yYXdfY29tcGFyZV9hbmRfc3dhcCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmxvY2ssCi0JCSAgICAgIHVuc2lnbmVkIGludCBvbGQsIHVuc2lnbmVkIGludCBuZXcpCi17Ci0JYXNtIHZvbGF0aWxlKAotCQkiCWNzCSUwLCUzLDAoJTQpIgotCQk6ICI9ZCIgKG9sZCksICI9bSIgKCpsb2NrKQotCQk6ICIwIiAob2xkKSwgImQiIChuZXcpLCAiYSIgKGxvY2spLCAibSIgKCpsb2NrKQotCQk6ICJjYyIsICJtZW1vcnkiICk7Ci0JcmV0dXJuIG9sZDsKLX0KLQotI2VuZGlmIC8qIF9fR05VQ19fICovCi0KIC8qCiAgKiBTaW1wbGUgc3BpbiBsb2NrIG9wZXJhdGlvbnMuICBUaGVyZSBhcmUgdHdvIHZhcmlhbnRzLCBvbmUgY2xlYXJzIElSUSdzCiAgKiBvbiB0aGUgbG9jYWwgcHJvY2Vzc29yLCBvbmUgZG9lcyBub3QuCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCBlYjE4ZGMxLi42YmRlZTIxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTQ3LDExICs0NywxMSBAQAogCQogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJaWNtCSUwLDgsMyglMSlcbiIKLQkJIglpY20JJTAsNCwyKCUxKVxuIgotCQkiCWljbQklMCwyLDEoJTEpXG4iCi0JCSIJaWMJJTAsMCglMSkiCi0JCTogIj0mZCIgKHJlc3VsdCkgOiAiYSIgKHgpLCAibSIgKCp4KSA6ICJjYyIpOworCQkiCWljbQklMCw4LCVPMSszKCVSMSlcbiIKKwkJIglpY20JJTAsNCwlTzErMiglUjEpXG4iCisJCSIJaWNtCSUwLDIsJU8xKzEoJVIxKVxuIgorCQkiCWljCSUwLCUxIgorCQk6ICI9JmQiIChyZXN1bHQpIDogIlEiICgqeCkgOiAiY2MiKTsKICNlbHNlIC8qIF9fczM5MHhfXyAqLwogCQkiCWxydgklMCwlMSIKIAkJOiAiPWQiIChyZXN1bHQpIDogIm0iICgqeCkpOwpAQCAtNzcsOSArNzcsOSBAQAogCQogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJaWNtCSUwLDIsMSglMSlcbiIKLQkJIglpYwklMCwwKCUxKVxuIgotCQk6ICI9JmQiIChyZXN1bHQpIDogImEiICh4KSwgIm0iICgqeCkgOiAiY2MiKTsKKwkJIglpY20JJTAsMiwlTysxKCVSMSlcbiIKKwkJIglpYwklMCwlMVxuIgorCQk6ICI9JmQiIChyZXN1bHQpIDogIlEiICgqeCkgOiAiY2MiKTsKICNlbHNlIC8qIF9fczM5MHhfXyAqLwogCQkiCWxydmgJJTAsJTEiCiAJCTogIj1kIiAocmVzdWx0KSA6ICJtIiAoKngpKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IGUwYTczZDMuLjg0Mjk2ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMTUsNiArMTUsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAorLyoKKyAqIFRoZSBzeXNjYWxsIHRhYmxlIGFsd2F5cyBjb250YWlucyAzMiBiaXQgcG9pbnRlcnMgc2luY2Ugd2Uga25vdyB0aGF0IHRoZQorICogYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlzICh3YXkpIGJlbG93IDRHQi4gIFNvIHRoZSAiaW50IgorICogdHlwZSBoZXJlIGlzIHdoYXQgd2Ugd2FudCBbbmVlZF0gZm9yIGJvdGggMzIgYml0IGFuZCA2NCBiaXQgc3lzdGVtcy4KKyAqLworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBzeXNfY2FsbF90YWJsZVtdOworCiBzdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2luZm8uaAppbmRleCA5ZDcwMDU3Li4yMmJkYjJhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmgKQEAgLTg3LDcgKzg3LDggQEAKIAogc3RydWN0IHN5c2luZm9fM18yXzIgewogCWNoYXIgcmVzZXJ2ZWRfMFszMV07Ci0JdW5zaWduZWQgY2hhciBjb3VudDsKKwl1bnNpZ25lZCBjaGFyIDo0OworCXVuc2lnbmVkIGNoYXIgY291bnQ6NDsKIAlzdHJ1Y3QgewogCQljaGFyIHJlc2VydmVkXzBbNF07CiAJCXVuc2lnbmVkIHNob3J0IGNwdXNfdG90YWw7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggMzc5NjYxZC4uNjdlZTZjMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMjQsNjUgKzI0LDY1IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9mcF9yZWdzKHMzOTBfZnBfcmVncyAqZnByZWdzKQogewogCWFzbSB2b2xhdGlsZSgKLQkJIglzdGQJMCw4KCUxKVxuIgotCQkiCXN0ZAkyLDI0KCUxKVxuIgotCQkiCXN0ZAk0LDQwKCUxKVxuIgotCQkiCXN0ZAk2LDU2KCUxKSIKLQkJOiAiPW0iICgqZnByZWdzKSA6ICJhIiAoZnByZWdzKSwgIm0iICgqZnByZWdzKSA6ICJtZW1vcnkiKTsKKwkJIglzdGQJMCwlTzArOCglUjApXG4iCisJCSIJc3RkCTIsJU8wKzI0KCVSMClcbiIKKwkJIglzdGQJNCwlTzArNDAoJVIwKVxuIgorCQkiCXN0ZAk2LCVPMCs1NiglUjApIgorCQk6ICI9USIgKCpmcHJlZ3MpIDogIlEiICgqZnByZWdzKSk7CiAJaWYgKCFNQUNISU5FX0hBU19JRUVFKQogCQlyZXR1cm47CiAJYXNtIHZvbGF0aWxlKAotCQkiCXN0ZnBjCTAoJTEpXG4iCi0JCSIJc3RkCTEsMTYoJTEpXG4iCi0JCSIJc3RkCTMsMzIoJTEpXG4iCi0JCSIJc3RkCTUsNDgoJTEpXG4iCi0JCSIJc3RkCTcsNjQoJTEpXG4iCi0JCSIJc3RkCTgsNzIoJTEpXG4iCi0JCSIJc3RkCTksODAoJTEpXG4iCi0JCSIJc3RkCTEwLDg4KCUxKVxuIgotCQkiCXN0ZAkxMSw5NiglMSlcbiIKLQkJIglzdGQJMTIsMTA0KCUxKVxuIgotCQkiCXN0ZAkxMywxMTIoJTEpXG4iCi0JCSIJc3RkCTE0LDEyMCglMSlcbiIKLQkJIglzdGQJMTUsMTI4KCUxKVxuIgotCQk6ICI9bSIgKCpmcHJlZ3MpIDogImEiIChmcHJlZ3MpLCAibSIgKCpmcHJlZ3MpIDogIm1lbW9yeSIpOworCQkiCXN0ZnBjCSUwXG4iCisJCSIJc3RkCTEsJU8wKzE2KCVSMClcbiIKKwkJIglzdGQJMywlTzArMzIoJVIwKVxuIgorCQkiCXN0ZAk1LCVPMCs0OCglUjApXG4iCisJCSIJc3RkCTcsJU8wKzY0KCVSMClcbiIKKwkJIglzdGQJOCwlTzArNzIoJVIwKVxuIgorCQkiCXN0ZAk5LCVPMCs4MCglUjApXG4iCisJCSIJc3RkCTEwLCVPMCs4OCglUjApXG4iCisJCSIJc3RkCTExLCVPMCs5NiglUjApXG4iCisJCSIJc3RkCTEyLCVPMCsxMDQoJVIwKVxuIgorCQkiCXN0ZAkxMywlTzArMTEyKCVSMClcbiIKKwkJIglzdGQJMTQsJU8wKzEyMCglUjApXG4iCisJCSIJc3RkCTE1LCVPMCsxMjgoJVIwKVxuIgorCQk6ICI9USIgKCpmcHJlZ3MpIDogIlEiICgqZnByZWdzKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX2ZwX3JlZ3MoczM5MF9mcF9yZWdzICpmcHJlZ3MpCiB7CiAJYXNtIHZvbGF0aWxlKAotCQkiCWxkCTAsOCglMClcbiIKLQkJIglsZAkyLDI0KCUwKVxuIgotCQkiCWxkCTQsNDAoJTApXG4iCi0JCSIJbGQJNiw1NiglMCkiCi0JCTogOiAiYSIgKGZwcmVncyksICJtIiAoKmZwcmVncykpOworCQkiCWxkCTAsJU8wKzgoJVIwKVxuIgorCQkiCWxkCTIsJU8wKzI0KCVSMClcbiIKKwkJIglsZAk0LCVPMCs0MCglUjApXG4iCisJCSIJbGQJNiwlTzArNTYoJVIwKSIKKwkJOiA6ICJRIiAoKmZwcmVncykpOwogCWlmICghTUFDSElORV9IQVNfSUVFRSkKIAkJcmV0dXJuOwogCWFzbSB2b2xhdGlsZSgKLQkJIglsZnBjCTAoJTApXG4iCi0JCSIJbGQJMSwxNiglMClcbiIKLQkJIglsZAkzLDMyKCUwKVxuIgotCQkiCWxkCTUsNDgoJTApXG4iCi0JCSIJbGQJNyw2NCglMClcbiIKLQkJIglsZAk4LDcyKCUwKVxuIgotCQkiCWxkCTksODAoJTApXG4iCi0JCSIJbGQJMTAsODgoJTApXG4iCi0JCSIJbGQJMTEsOTYoJTApXG4iCi0JCSIJbGQJMTIsMTA0KCUwKVxuIgotCQkiCWxkCTEzLDExMiglMClcbiIKLQkJIglsZAkxNCwxMjAoJTApXG4iCi0JCSIJbGQJMTUsMTI4KCUwKVxuIgotCQk6IDogImEiIChmcHJlZ3MpLCAibSIgKCpmcHJlZ3MpKTsKKwkJIglsZnBjCSUwXG4iCisJCSIJbGQJMSwlTzArMTYoJVIwKVxuIgorCQkiCWxkCTMsJU8wKzMyKCVSMClcbiIKKwkJIglsZAk1LCVPMCs0OCglUjApXG4iCisJCSIJbGQJNywlTzArNjQoJVIwKVxuIgorCQkiCWxkCTgsJU8wKzcyKCVSMClcbiIKKwkJIglsZAk5LCVPMCs4MCglUjApXG4iCisJCSIJbGQJMTAsJU8wKzg4KCVSMClcbiIKKwkJIglsZAkxMSwlTzArOTYoJVIwKVxuIgorCQkiCWxkCTEyLCVPMCsxMDQoJVIwKVxuIgorCQkiCWxkCTEzLCVPMCsxMTIoJVIwKVxuIgorCQkiCWxkCTE0LCVPMCsxMjAoJVIwKVxuIgorCQkiCWxkCTE1LCVPMCsxMjgoJVIwKVxuIgorCQk6IDogIlEiICgqZnByZWdzKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX2FjY2Vzc19yZWdzKHVuc2lnbmVkIGludCAqYWNycykKIHsKLQlhc20gdm9sYXRpbGUoInN0YW0gMCwxNSwwKCUwKSIgOiA6ICJhIiAoYWNycykgOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKCJzdGFtIDAsMTUsJTAiIDogIj1RIiAoKmFjcnMpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfYWNjZXNzX3JlZ3ModW5zaWduZWQgaW50ICphY3JzKQogewotCWFzbSB2b2xhdGlsZSgibGFtIDAsMTUsMCglMCkiIDogOiAiYSIgKGFjcnMpKTsKKwlhc20gdm9sYXRpbGUoImxhbSAwLDE1LCUwIiA6IDogIlEiICgqYWNycykpOwogfQogCiAjZGVmaW5lIHN3aXRjaF90byhwcmV2LG5leHQsbGFzdCkgZG8gewkJCQkJICAgICBcCkBAIC0xMzksNDggKzEzOSw0OCBAQAogCQlzaGlmdCA9ICgzIF4gKGFkZHIgJiAzKSkgPDwgMzsKIAkJYWRkciBePSBhZGRyICYgMzsKIAkJYXNtIHZvbGF0aWxlKAotCQkJIglsCSUwLDAoJTQpXG4iCisJCQkiCWwJJTAsJTRcbiIKIAkJCSIwOglscgkwLCUwXG4iCiAJCQkiCW5yCTAsJTNcbiIKIAkJCSIJb3IJMCwlMlxuIgotCQkJIgljcwklMCwwLDAoJTQpXG4iCisJCQkiCWNzCSUwLDAsJTRcbiIKIAkJCSIJamwJMGJcbiIKLQkJCTogIj0mZCIgKG9sZCksICI9bSIgKCooaW50ICopIGFkZHIpCi0JCQk6ICJkIiAoeCA8PCBzaGlmdCksICJkIiAofigyNTUgPDwgc2hpZnQpKSwgImEiIChhZGRyKSwKLQkJCSAgIm0iICgqKGludCAqKSBhZGRyKSA6ICJtZW1vcnkiLCAiY2MiLCAiMCIpOworCQkJOiAiPSZkIiAob2xkKSwgIj1RIiAoKihpbnQgKikgYWRkcikKKwkJCTogImQiICh4IDw8IHNoaWZ0KSwgImQiICh+KDI1NSA8PCBzaGlmdCkpLAorCQkJICAiUSIgKCooaW50ICopIGFkZHIpIDogIm1lbW9yeSIsICJjYyIsICIwIik7CiAJCXJldHVybiBvbGQgPj4gc2hpZnQ7CiAJY2FzZSAyOgogCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0cjsKIAkJc2hpZnQgPSAoMiBeIChhZGRyICYgMikpIDw8IDM7CiAJCWFkZHIgXj0gYWRkciAmIDI7CiAJCWFzbSB2b2xhdGlsZSgKLQkJCSIJbAklMCwwKCU0KVxuIgorCQkJIglsCSUwLCU0XG4iCiAJCQkiMDoJbHIJMCwlMFxuIgogCQkJIglucgkwLCUzXG4iCiAJCQkiCW9yCTAsJTJcbiIKLQkJCSIJY3MJJTAsMCwwKCU0KVxuIgorCQkJIgljcwklMCwwLCU0XG4iCiAJCQkiCWpsCTBiXG4iCi0JCQk6ICI9JmQiIChvbGQpLCAiPW0iICgqKGludCAqKSBhZGRyKQotCQkJOiAiZCIgKHggPDwgc2hpZnQpLCAiZCIgKH4oNjU1MzUgPDwgc2hpZnQpKSwgImEiIChhZGRyKSwKLQkJCSAgIm0iICgqKGludCAqKSBhZGRyKSA6ICJtZW1vcnkiLCAiY2MiLCAiMCIpOworCQkJOiAiPSZkIiAob2xkKSwgIj1RIiAoKihpbnQgKikgYWRkcikKKwkJCTogImQiICh4IDw8IHNoaWZ0KSwgImQiICh+KDY1NTM1IDw8IHNoaWZ0KSksCisJCQkgICJRIiAoKihpbnQgKikgYWRkcikgOiAibWVtb3J5IiwgImNjIiwgIjAiKTsKIAkJcmV0dXJuIG9sZCA+PiBzaGlmdDsKIAljYXNlIDQ6CiAJCWFzbSB2b2xhdGlsZSgKLQkJCSIJbAklMCwwKCUzKVxuIgotCQkJIjA6CWNzCSUwLCUyLDAoJTMpXG4iCisJCQkiCWwJJTAsJTNcbiIKKwkJCSIwOgljcwklMCwlMiwlM1xuIgogCQkJIglqbAkwYlxuIgotCQkJOiAiPSZkIiAob2xkKSwgIj1tIiAoKihpbnQgKikgcHRyKQotCQkJOiAiZCIgKHgpLCAiYSIgKHB0ciksICJtIiAoKihpbnQgKikgcHRyKQorCQkJOiAiPSZkIiAob2xkKSwgIj1RIiAoKihpbnQgKikgcHRyKQorCQkJOiAiZCIgKHgpLCAiUSIgKCooaW50ICopIHB0cikKIAkJCTogIm1lbW9yeSIsICJjYyIpOwogCQlyZXR1cm4gb2xkOwogI2lmZGVmIF9fczM5MHhfXwogCWNhc2UgODoKIAkJYXNtIHZvbGF0aWxlKAotCQkJIglsZwklMCwwKCUzKVxuIgotCQkJIjA6CWNzZwklMCwlMiwwKCUzKVxuIgorCQkJIglsZwklMCwlM1xuIgorCQkJIjA6CWNzZwklMCwlMiwlM1xuIgogCQkJIglqbAkwYlxuIgogCQkJOiAiPSZkIiAob2xkKSwgIj1tIiAoKihsb25nICopIHB0cikKLQkJCTogImQiICh4KSwgImEiIChwdHIpLCAibSIgKCoobG9uZyAqKSBwdHIpCisJCQk6ICJkIiAoeCksICJRIiAoKihsb25nICopIHB0cikKIAkJCTogIm1lbW9yeSIsICJjYyIpOwogCQlyZXR1cm4gb2xkOwogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwpAQCAtMjE1LDIwICsyMTUsMjAgQEAKIAkJc2hpZnQgPSAoMyBeIChhZGRyICYgMykpIDw8IDM7CiAJCWFkZHIgXj0gYWRkciAmIDM7CiAJCWFzbSB2b2xhdGlsZSgKLQkJCSIJbAklMCwwKCU0KVxuIgorCQkJIglsCSUwLCUyXG4iCiAJCQkiMDoJbnIJJTAsJTVcbiIKIAkJCSIJbHIJJTEsJTBcbiIKIAkJCSIJb3IJJTAsJTJcbiIKIAkJCSIJb3IJJTEsJTNcbiIKLQkJCSIJY3MJJTAsJTEsMCglNClcbiIKKwkJCSIJY3MJJTAsJTEsJTJcbiIKIAkJCSIJam5sCTFmXG4iCiAJCQkiCXhyCSUxLCUwXG4iCiAJCQkiCW5yCSUxLCU1XG4iCiAJCQkiCWpuegkwYlxuIgogCQkJIjE6IgotCQkJOiAiPSZkIiAocHJldiksICI9JmQiICh0bXApCi0JCQk6ICJkIiAob2xkIDw8IHNoaWZ0KSwgImQiIChuZXcgPDwgc2hpZnQpLCAiYSIgKHB0ciksCi0JCQkgICJkIiAofigyNTUgPDwgc2hpZnQpKQorCQkJOiAiPSZkIiAocHJldiksICI9JmQiICh0bXApLCAiPVEiICgqKGludCAqKSBwdHIpCisJCQk6ICJkIiAob2xkIDw8IHNoaWZ0KSwgImQiIChuZXcgPDwgc2hpZnQpLAorCQkJICAiZCIgKH4oMjU1IDw8IHNoaWZ0KSksICJRIiAoKihpbnQgKikgcHRyKQogCQkJOiAibWVtb3J5IiwgImNjIik7CiAJCXJldHVybiBwcmV2ID4+IHNoaWZ0OwogCWNhc2UgMjoKQEAgLTIzNiwzMyArMjM2LDM1IEBACiAJCXNoaWZ0ID0gKDIgXiAoYWRkciAmIDIpKSA8PCAzOwogCQlhZGRyIF49IGFkZHIgJiAyOwogCQlhc20gdm9sYXRpbGUoCi0JCQkiCWwJJTAsMCglNClcbiIKKwkJCSIJbAklMCwlMlxuIgogCQkJIjA6CW5yCSUwLCU1XG4iCiAJCQkiCWxyCSUxLCUwXG4iCiAJCQkiCW9yCSUwLCUyXG4iCiAJCQkiCW9yCSUxLCUzXG4iCi0JCQkiCWNzCSUwLCUxLDAoJTQpXG4iCisJCQkiCWNzCSUwLCUxLCUyXG4iCiAJCQkiCWpubAkxZlxuIgogCQkJIgl4cgklMSwlMFxuIgogCQkJIglucgklMSwlNVxuIgogCQkJIglqbnoJMGJcbiIKIAkJCSIxOiIKLQkJCTogIj0mZCIgKHByZXYpLCAiPSZkIiAodG1wKQotCQkJOiAiZCIgKG9sZCA8PCBzaGlmdCksICJkIiAobmV3IDw8IHNoaWZ0KSwgImEiIChwdHIpLAotCQkJICAiZCIgKH4oNjU1MzUgPDwgc2hpZnQpKQorCQkJOiAiPSZkIiAocHJldiksICI9JmQiICh0bXApLCAiPVEiICgqKGludCAqKSBwdHIpCisJCQk6ICJkIiAob2xkIDw8IHNoaWZ0KSwgImQiIChuZXcgPDwgc2hpZnQpLAorCQkJICAiZCIgKH4oNjU1MzUgPDwgc2hpZnQpKSwgIlEiICgqKGludCAqKSBwdHIpCiAJCQk6ICJtZW1vcnkiLCAiY2MiKTsKIAkJcmV0dXJuIHByZXYgPj4gc2hpZnQ7CiAJY2FzZSA0OgogCQlhc20gdm9sYXRpbGUoCi0JCQkiCWNzCSUwLCUyLDAoJTMpXG4iCi0JCQk6ICI9JmQiIChwcmV2KSA6ICIwIiAob2xkKSwgImQiIChuZXcpLCAiYSIgKHB0cikKKwkJCSIJY3MJJTAsJTMsJTFcbiIKKwkJCTogIj0mZCIgKHByZXYpLCAiPVEiICgqKGludCAqKSBwdHIpCisJCQk6ICIwIiAob2xkKSwgImQiIChuZXcpLCAiUSIgKCooaW50ICopIHB0cikKIAkJCTogIm1lbW9yeSIsICJjYyIpOwogCQlyZXR1cm4gcHJldjsKICNpZmRlZiBfX3MzOTB4X18KIAljYXNlIDg6CiAJCWFzbSB2b2xhdGlsZSgKLQkJCSIJY3NnCSUwLCUyLDAoJTMpXG4iCi0JCQk6ICI9JmQiIChwcmV2KSA6ICIwIiAob2xkKSwgImQiIChuZXcpLCAiYSIgKHB0cikKKwkJCSIJY3NnCSUwLCUzLCUxXG4iCisJCQk6ICI9JmQiIChwcmV2KSwgIj1RIiAoKihsb25nICopIHB0cikKKwkJCTogIjAiIChvbGQpLCAiZCIgKG5ldyksICJRIiAoKihsb25nICopIHB0cikKIAkJCTogIm1lbW9yeSIsICJjYyIpOwogCQlyZXR1cm4gcHJldjsKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KQEAgLTMwMiwxNyArMzA0LDE3IEBACiAjZGVmaW5lIF9fY3RsX2xvYWQoYXJyYXksIGxvdywgaGlnaCkgKHsJCQkJXAogCXR5cGVkZWYgc3RydWN0IHsgY2hhciBfW3NpemVvZihhcnJheSldOyB9IGFkZHJ0eXBlOwlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIglsY3RsZwklMSwlMiwwKCUwKVxuIgkJCVwKLQkJOiA6ICJhIiAoJmFycmF5KSwgImkiIChsb3cpLCAiaSIgKGhpZ2gpLAlcCi0JCSAgICAibSIgKCooYWRkcnR5cGUgKikoJmFycmF5KSkpOwkJXAorCQkiCWxjdGxnCSUxLCUyLCUwXG4iCQkJXAorCQk6IDogIlEiICgqKGFkZHJ0eXBlICopKCZhcnJheSkpLAkJXAorCQkgICAgImkiIChsb3cpLCAiaSIgKGhpZ2gpKTsJCQlcCiAJfSkKIAogI2RlZmluZSBfX2N0bF9zdG9yZShhcnJheSwgbG93LCBoaWdoKSAoewkJCVwKIAl0eXBlZGVmIHN0cnVjdCB7IGNoYXIgX1tzaXplb2YoYXJyYXkpXTsgfSBhZGRydHlwZTsJXAogCWFzbSB2b2xhdGlsZSgJCQkJCQlcCi0JCSIJc3RjdGcJJTIsJTMsMCglMSlcbiIJCQlcCi0JCTogIj1tIiAoKihhZGRydHlwZSAqKSgmYXJyYXkpKQkJCVwKLQkJOiAiYSIgKCZhcnJheSksICJpIiAobG93KSwgImkiIChoaWdoKSk7CQlcCisJCSIJc3RjdGcJJTEsJTIsJTBcbiIJCQlcCisJCTogIj1RIiAoKihhZGRydHlwZSAqKSgmYXJyYXkpKQkJCVwKKwkJOiAiaSIgKGxvdyksICJpIiAoaGlnaCkpOwkJCVwKIAl9KQogCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KQEAgLTMyMCwxNyArMzIyLDE3IEBACiAjZGVmaW5lIF9fY3RsX2xvYWQoYXJyYXksIGxvdywgaGlnaCkgKHsJCQkJXAogCXR5cGVkZWYgc3RydWN0IHsgY2hhciBfW3NpemVvZihhcnJheSldOyB9IGFkZHJ0eXBlOwlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIglsY3RsCSUxLCUyLDAoJTApXG4iCQkJXAotCQk6IDogImEiICgmYXJyYXkpLCAiaSIgKGxvdyksICJpIiAoaGlnaCksCVwKLQkJICAgICJtIiAoKihhZGRydHlwZSAqKSgmYXJyYXkpKSk7CQlcCisJCSIJbGN0bAklMSwlMiwlMFxuIgkJCVwKKwkJOiA6ICJRIiAoKihhZGRydHlwZSAqKSgmYXJyYXkpKSwJCVwKKwkJICAgICJpIiAobG93KSwgImkiIChoaWdoKSk7CQkJXAogfSkKIAogI2RlZmluZSBfX2N0bF9zdG9yZShhcnJheSwgbG93LCBoaWdoKSAoewkJCVwKIAl0eXBlZGVmIHN0cnVjdCB7IGNoYXIgX1tzaXplb2YoYXJyYXkpXTsgfSBhZGRydHlwZTsJXAogCWFzbSB2b2xhdGlsZSgJCQkJCQlcCi0JCSIJc3RjdGwJJTIsJTMsMCglMSlcbiIJCQlcCi0JCTogIj1tIiAoKihhZGRydHlwZSAqKSgmYXJyYXkpKQkJCVwKLQkJOiAiYSIgKCZhcnJheSksICJpIiAobG93KSwgImkiIChoaWdoKSk7CQlcCisJCSIJc3RjdGwJJTEsJTIsJTBcbiIJCQlcCisJCTogIj1RIiAoKihhZGRydHlwZSAqKSgmYXJyYXkpKQkJCVwKKwkJOiAiaSIgKGxvdyksICJpIiAoaGlnaCkpOwkJCVwKIAl9KQogCiAjZW5kaWYgLyogX19zMzkweF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDY2MDY5ZTcuLjM0ZjA4NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC03Myw3ICs3Myw3IEBACiAvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQyAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnJlbnRfdGhyZWFkX2luZm8odm9pZCkKIHsKLQlyZXR1cm4gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSgoKih1bnNpZ25lZCBsb25nICopIF9fTENfS0VSTkVMX1NUQUNLKS1USFJFQURfU0laRSk7CisJcmV0dXJuIChzdHJ1Y3QgdGhyZWFkX2luZm8gKikoUzM5MF9sb3djb3JlLmtlcm5lbF9zdGFjayAtIFRIUkVBRF9TSVpFKTsKIH0KIAogI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUiBUSFJFQURfT1JERVIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aW1leC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RpbWV4LmgKaW5kZXggNjhkOWZlYS4uZjE3NGJkYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RpbWV4LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RpbWV4LmgKQEAgLTIwLDEwICsyMCwxMCBAQAogCWludCBjYzsKIAogCWFzbSB2b2xhdGlsZSgKLQkJIiAgIHNjayAgIDAoJTIpXG4iCisJCSIgICBzY2sgICAlMVxuIgogCQkiICAgaXBtICAgJTBcbiIKIAkJIiAgIHNybCAgICUwLDI4XG4iCi0JCTogIj1kIiAoY2MpIDogIm0iICh0aW1lKSwgImEiICgmdGltZSkgOiAiY2MiKTsKKwkJOiAiPWQiIChjYykgOiAiUSIgKHRpbWUpIDogImNjIik7CiAJcmV0dXJuIGNjOwogfQogCkBAIC0zMiwyMSArMzIsMjEgQEAKIAlpbnQgY2M7CiAKIAlhc20gdm9sYXRpbGUoCi0JCSIgICBzdGNrICAwKCUyKVxuIgorCQkiICAgc3RjayAgJTFcbiIKIAkJIiAgIGlwbSAgICUwXG4iCiAJCSIgICBzcmwgICAlMCwyOFxuIgotCQk6ICI9ZCIgKGNjKSwgIj1tIiAoKnRpbWUpIDogImEiICh0aW1lKSA6ICJjYyIpOworCQk6ICI9ZCIgKGNjKSwgIj1RIiAoKnRpbWUpIDogOiAiY2MiKTsKIAlyZXR1cm4gY2M7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY2xvY2tfY29tcGFyYXRvcihfX3U2NCB0aW1lKQogewotCWFzbSB2b2xhdGlsZSgic2NrYyAwKCUxKSIgOiA6ICJtIiAodGltZSksICJhIiAoJnRpbWUpKTsKKwlhc20gdm9sYXRpbGUoInNja2MgJTAiIDogOiAiUSIgKHRpbWUpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN0b3JlX2Nsb2NrX2NvbXBhcmF0b3IoX191NjQgKnRpbWUpCiB7Ci0JYXNtIHZvbGF0aWxlKCJzdGNrYyAwKCUxKSIgOiAiPW0iICgqdGltZSkgOiAiYSIgKHRpbWUpKTsKKwlhc20gdm9sYXRpbGUoInN0Y2tjICUwIiA6ICI9USIgKCp0aW1lKSk7CiB9CiAKICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTExOTMxODAgLyogVW5kZXJseWluZyBIWiAqLwpAQCAtNTcsMTEgKzU3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgY2xrOwogCi0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKIAlhc20gdm9sYXRpbGUoInN0Y2sgJTAiIDogIj1RIiAoY2xrKSA6IDogImNjIik7Ci0jZWxzZSAvKiBfX0dOVUNfXyAqLwotCWFzbSB2b2xhdGlsZSgic3RjayAwKCUxKSIgOiAiPW0iIChjbGspIDogImEiICgmY2xrKSA6ICJjYyIpOwotI2VuZGlmIC8qIF9fR05VQ19fICovCiAJcmV0dXJuIGNsazsKIH0KIApAQCAtNjksMTMgKzY1LDcgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIGNsa1sxNl07CiAKLSNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQogCWFzbSB2b2xhdGlsZSgic3Rja2UgJTAiIDogIj1RIiAoY2xrKSA6IDogImNjIik7Ci0jZWxzZSAvKiBfX0dOVUNfXyAqLwotCWFzbSB2b2xhdGlsZSgic3Rja2UgMCglMSkiIDogIj1tIiAoY2xrKQotCQkJCSAgIDogImEiIChjbGspIDogImNjIik7Ci0jZW5kaWYgLyogX19HTlVDX18gKi8KLQogCXJldHVybiAqKCh1bnNpZ25lZCBsb25nIGxvbmcgKikmY2xrWzFdKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggY2JmMGE4Ny4uZDZiMWVkMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC0yNjUsNiArMjY1LDEyIEBACiAJCXJldHVybiB1YWNjZXNzLmNvcHlfZnJvbV91c2VyKG4sIGZyb20sIHRvKTsKIH0KIAorZXh0ZXJuIHZvaWQgY29weV9mcm9tX3VzZXJfb3ZlcmZsb3codm9pZCkKKyNpZmRlZiBDT05GSUdfREVCVUdfU1RSSUNUX1VTRVJfQ09QWV9DSEVDS1MKK19fY29tcGlsZXRpbWVfd2FybmluZygiY29weV9mcm9tX3VzZXIoKSBidWZmZXIgc2l6ZSBpcyBub3QgcHJvdmFibHkgY29ycmVjdCIpCisjZW5kaWYKKzsKKwogLyoqCiAgKiBjb3B5X2Zyb21fdXNlcjogLSBDb3B5IGEgYmxvY2sgb2YgZGF0YSBmcm9tIHVzZXIgc3BhY2UuCiAgKiBAdG86ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLgpAQCAtMjg0LDcgKzI5MCwxMyBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjawogY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCiB7CisJdW5zaWduZWQgaW50IHN6ID0gX19jb21waWxldGltZV9vYmplY3Rfc2l6ZSh0byk7CisKIAltaWdodF9mYXVsdCgpOworCWlmICh1bmxpa2VseShzeiAhPSAtMSAmJiBzeiA8IG4pKSB7CisJCWNvcHlfZnJvbV91c2VyX292ZXJmbG93KCk7CisJCXJldHVybiBuOworCX0KIAlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcm9tLCBuKSkKIAkJbiA9IF9fY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pOwogCWVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92ZHNvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdmRzby5oCmluZGV4IDdiZGQ3YzguLjRhNzZkOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92ZHNvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Zkc28uaApAQCAtNyw3ICs3LDcgQEAKICNkZWZpbmUgVkRTTzMyX0xCQVNFCTAKICNkZWZpbmUgVkRTTzY0X0xCQVNFCTAKIAotI2RlZmluZSBWRFNPX1ZFUlNJT05fU1RSSU5HCUxJTlVYXzIuNi4yNgorI2RlZmluZSBWRFNPX1ZFUlNJT05fU1RSSU5HCUxJTlVYXzIuNi4yOQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQppbmRleCA2ODNmNjM4Li42NDIzMGJjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKQEAgLTI5LDkgKzI5LDEyIEBACiBvYmoteQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxyZWlwbDY0Lm8scmVpcGwubykKIAogZXh0cmEteQkJCQkrPSBoZWFkLm8gaW5pdF90YXNrLm8gdm1saW51eC5sZHMKK2V4dHJhLXkJCQkJKz0gJChpZiAkKENPTkZJR182NEJJVCksaGVhZDY0Lm8saGVhZDMxLm8pCiAKIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gczM5MF9rc3ltcy5vIG1vZHVsZS5vCiBvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8gdG9wb2xvZ3kubworb2JqLSQoQ09ORklHX1NNUCkJCSs9ICQoaWYgJChDT05GSUdfNjRCSVQpLHN3aXRjaF9jcHU2NC5vLCBcCisJCQkJCQkJc3dpdGNoX2NwdS5vKQogb2JqLSQoQ09ORklHX0hJQkVSTkFUSU9OKQkrPSBzdXNwZW5kLm8gc3dzdXNwX2FzbTY0Lm8KIG9iai0kKENPTkZJR19BVURJVCkJCSs9IGF1ZGl0Lm8KIGNvbXBhdC1vYmotJChDT05GSUdfQVVESVQpCSs9IGNvbXBhdF9hdWRpdC5vCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3MzOTAva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNjNlNDY0My4uMDhkYjczNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNCwxOCArNCwyNyBAQAogICogYW5kIGZvcm1hdCB0aGUgcmVxdWlyZWQgZGF0YS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNkZWZpbmUgQVNNX09GRlNFVFNfQworCiAjaW5jbHVkZSA8bGludXgva2J1aWxkLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vdmRzby5oPgogI2luY2x1ZGUgPGFzbS9zaWdwLmg+CiAKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCB0aGUgY29tcGlsZXIgaXMgbmV3IGVub3VnaC4gV2Ugd2FudCBhIGNvbXBpbGVyIHRoYXQKKyAqIGlzIGtub3duIHRvIHdvcmsgd2l0aCB0aGUgIlEiIGFzc2VtYmxlciBjb25zdHJhaW50LgorICovCisjaWYgX19HTlVDX18gPCAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fIDwgMykKKyNlcnJvciBZb3VyIGNvbXBpbGVyIGlzIHRvbyBvbGQ7IHBsZWFzZSB1c2UgdmVyc2lvbiAzLjMuMyBvciBuZXdlcgorI2VuZGlmCisKIGludCBtYWluKHZvaWQpCiB7CiAJREVGSU5FKF9fVEhSRUFEX2luZm8sIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgc3RhY2spKTsKIAlERUZJTkUoX19USFJFQURfa3NwLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5rc3ApKTsKIAlERUZJTkUoX19USFJFQURfcGVyLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5wZXJfaW5mbykpOwotCURFRklORShfX1RIUkVBRF9tbV9zZWdtZW50LAotCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5tbV9zZWdtZW50KSk7CisJREVGSU5FKF9fVEhSRUFEX21tX3NlZ21lbnQsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLm1tX3NlZ21lbnQpKTsKIAlCTEFOSygpOwogCURFRklORShfX1RBU0tfcGlkLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHBpZCkpOwogCUJMQU5LKCk7CkBAIC01MiwxOCArNjEsOTQgQEAKIAlERUZJTkUoX19WRFNPX1dUT01fTlNFQywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgd3RvbV9jbG9ja19uc2VjKSk7CiAJREVGSU5FKF9fVkRTT19USU1FWk9ORSwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdHpfbWludXRlc3dlc3QpKTsKIAlERUZJTkUoX19WRFNPX0VDVEdfT0ssIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIGVjdGdfYXZhaWxhYmxlKSk7Ci0JREVGSU5FKF9fVkRTT19FQ1RHX0JBU0UsCi0JICAgICAgIG9mZnNldG9mKHN0cnVjdCB2ZHNvX3Blcl9jcHVfZGF0YSwgZWN0Z190aW1lcl9iYXNlKSk7Ci0JREVGSU5FKF9fVkRTT19FQ1RHX1VTRVIsCi0JICAgICAgIG9mZnNldG9mKHN0cnVjdCB2ZHNvX3Blcl9jcHVfZGF0YSwgZWN0Z191c2VyX3RpbWUpKTsKKwlERUZJTkUoX19WRFNPX0VDVEdfQkFTRSwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fcGVyX2NwdV9kYXRhLCBlY3RnX3RpbWVyX2Jhc2UpKTsKKwlERUZJTkUoX19WRFNPX0VDVEdfVVNFUiwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fcGVyX2NwdV9kYXRhLCBlY3RnX3VzZXJfdGltZSkpOwogCS8qIGNvbnN0YW50cyB1c2VkIGJ5IHRoZSB2ZHNvICovCiAJREVGSU5FKENMT0NLX1JFQUxUSU1FLCBDTE9DS19SRUFMVElNRSk7CiAJREVGSU5FKENMT0NLX01PTk9UT05JQywgQ0xPQ0tfTU9OT1RPTklDKTsKIAlERUZJTkUoQ0xPQ0tfUkVBTFRJTUVfUkVTLCBNT05PVE9OSUNfUkVTX05TRUMpOworCUJMQU5LKCk7CiAJLyogY29uc3RhbnRzIGZvciBTSUdQICovCiAJREVGSU5FKF9fU0lHUF9TVE9QLCBzaWdwX3N0b3ApOwogCURFRklORShfX1NJR1BfUkVTVEFSVCwgc2lncF9yZXN0YXJ0KTsKIAlERUZJTkUoX19TSUdQX1NFTlNFLCBzaWdwX3NlbnNlKTsKIAlERUZJTkUoX19TSUdQX0lOSVRJQUxfQ1BVX1JFU0VULCBzaWdwX2luaXRpYWxfY3B1X3Jlc2V0KTsKKwlCTEFOSygpOworCS8qIGxvd2NvcmUgb2Zmc2V0cyAqLworCURFRklORShfX0xDX0VYVF9QQVJBTVMsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXh0X3BhcmFtcykpOworCURFRklORShfX0xDX0NQVV9BRERSRVNTLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGNwdV9hZGRyKSk7CisJREVGSU5FKF9fTENfRVhUX0lOVF9DT0RFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGV4dF9pbnRfY29kZSkpOworCURFRklORShfX0xDX1NWQ19JTEMsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ZjX2lsYykpOworCURFRklORShfX0xDX1NWQ19JTlRfQ09ERSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBzdmNfY29kZSkpOworCURFRklORShfX0xDX1BHTV9JTEMsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcGdtX2lsYykpOworCURFRklORShfX0xDX1BHTV9JTlRfQ09ERSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwZ21fY29kZSkpOworCURFRklORShfX0xDX1BFUl9BVE1JRCwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwZXJfcGVyY19hdG1pZCkpOworCURFRklORShfX0xDX1BFUl9BRERSRVNTLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBlcl9hZGRyZXNzKSk7CisJREVGSU5FKF9fTENfUEVSX0FDQ0VTU19JRCwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwZXJfYWNjZXNzX2lkKSk7CisJREVGSU5FKF9fTENfQVJfTU9ERV9JRCwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBhcl9hY2Nlc3NfaWQpKTsKKwlERUZJTkUoX19MQ19TVUJDSEFOTkVMX0lELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN1YmNoYW5uZWxfaWQpKTsKKwlERUZJTkUoX19MQ19TVUJDSEFOTkVMX05SLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN1YmNoYW5uZWxfbnIpKTsKKwlERUZJTkUoX19MQ19JT19JTlRfUEFSTSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBpb19pbnRfcGFybSkpOworCURFRklORShfX0xDX0lPX0lOVF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlvX2ludF93b3JkKSk7CisJREVGSU5FKF9fTENfU1RGTF9GQUNfTElTVCwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBzdGZsX2ZhY19saXN0KSk7CisJREVGSU5FKF9fTENfTUNDS19DT0RFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIG1jY2tfaW50ZXJydXB0aW9uX2NvZGUpKTsKKwlERUZJTkUoX19MQ19EVU1QX1JFSVBMLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlwaWIpKTsKKwlCTEFOSygpOworCURFRklORShfX0xDX1JTVF9ORVdfUFNXLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHJlc3RhcnRfcHN3KSk7CisJREVGSU5FKF9fTENfUlNUX09MRF9QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcmVzdGFydF9vbGRfcHN3KSk7CisJREVGSU5FKF9fTENfRVhUX09MRF9QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXh0ZXJuYWxfb2xkX3BzdykpOworCURFRklORShfX0xDX1NWQ19PTERfUFNXLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN2Y19vbGRfcHN3KSk7CisJREVGSU5FKF9fTENfUEdNX09MRF9QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcHJvZ3JhbV9vbGRfcHN3KSk7CisJREVGSU5FKF9fTENfTUNLX09MRF9QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgbWNja19vbGRfcHN3KSk7CisJREVGSU5FKF9fTENfSU9fT0xEX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBpb19vbGRfcHN3KSk7CisJREVGSU5FKF9fTENfRVhUX05FV19QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXh0ZXJuYWxfbmV3X3BzdykpOworCURFRklORShfX0xDX1NWQ19ORVdfUFNXLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN2Y19uZXdfcHN3KSk7CisJREVGSU5FKF9fTENfUEdNX05FV19QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcHJvZ3JhbV9uZXdfcHN3KSk7CisJREVGSU5FKF9fTENfTUNLX05FV19QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgbWNja19uZXdfcHN3KSk7CisJREVGSU5FKF9fTENfSU9fTkVXX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBpb19uZXdfcHN3KSk7CisJREVGSU5FKF9fTENfU0FWRV9BUkVBLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHNhdmVfYXJlYSkpOworCURFRklORShfX0xDX1JFVFVSTl9QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcmV0dXJuX3BzdykpOworCURFRklORShfX0xDX1JFVFVSTl9NQ0NLX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCByZXR1cm5fbWNja19wc3cpKTsKKwlERUZJTkUoX19MQ19TWU5DX0VOVEVSX1RJTUVSLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN5bmNfZW50ZXJfdGltZXIpKTsKKwlERUZJTkUoX19MQ19BU1lOQ19FTlRFUl9USU1FUiwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBhc3luY19lbnRlcl90aW1lcikpOworCURFRklORShfX0xDX0VYSVRfVElNRVIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXhpdF90aW1lcikpOworCURFRklORShfX0xDX1VTRVJfVElNRVIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgdXNlcl90aW1lcikpOworCURFRklORShfX0xDX1NZU1RFTV9USU1FUiwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBzeXN0ZW1fdGltZXIpKTsKKwlERUZJTkUoX19MQ19TVEVBTF9USU1FUiwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBzdGVhbF90aW1lcikpOworCURFRklORShfX0xDX0xBU1RfVVBEQVRFX1RJTUVSLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGxhc3RfdXBkYXRlX3RpbWVyKSk7CisJREVGSU5FKF9fTENfTEFTVF9VUERBVEVfQ0xPQ0ssIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgbGFzdF91cGRhdGVfY2xvY2spKTsKKwlERUZJTkUoX19MQ19DVVJSRU5ULCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGN1cnJlbnRfdGFzaykpOworCURFRklORShfX0xDX1RIUkVBRF9JTkZPLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHRocmVhZF9pbmZvKSk7CisJREVGSU5FKF9fTENfS0VSTkVMX1NUQUNLLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGtlcm5lbF9zdGFjaykpOworCURFRklORShfX0xDX0FTWU5DX1NUQUNLLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGFzeW5jX3N0YWNrKSk7CisJREVGSU5FKF9fTENfUEFOSUNfU1RBQ0ssIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcGFuaWNfc3RhY2spKTsKKwlERUZJTkUoX19MQ19LRVJORUxfQVNDRSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBrZXJuZWxfYXNjZSkpOworCURFRklORShfX0xDX1VTRVJfQVNDRSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCB1c2VyX2FzY2UpKTsKKwlERUZJTkUoX19MQ19VU0VSX0VYRUNfQVNDRSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCB1c2VyX2V4ZWNfYXNjZSkpOworCURFRklORShfX0xDX0NQVUlELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGNwdV9pZCkpOworCURFRklORShfX0xDX0lOVF9DTE9DSywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBpbnRfY2xvY2spKTsKKwlERUZJTkUoX19MQ19NQUNISU5FX0ZMQUdTLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIG1hY2hpbmVfZmxhZ3MpKTsKKwlERUZJTkUoX19MQ19GVFJBQ0VfRlVOQywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBmdHJhY2VfZnVuYykpOworCURFRklORShfX0xDX0lSQiwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBpcmIpKTsKKwlERUZJTkUoX19MQ19DUFVfVElNRVJfU0FWRV9BUkVBLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGNwdV90aW1lcl9zYXZlX2FyZWEpKTsKKwlERUZJTkUoX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBjbG9ja19jb21wX3NhdmVfYXJlYSkpOworCURFRklORShfX0xDX1BTV19TQVZFX0FSRUEsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcHN3X3NhdmVfYXJlYSkpOworCURFRklORShfX0xDX1BSRUZJWF9TQVZFX0FSRUEsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcHJlZml4cmVnX3NhdmVfYXJlYSkpOworCURFRklORShfX0xDX0FSRUdTX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBhY2Nlc3NfcmVnc19zYXZlX2FyZWEpKTsKKwlERUZJTkUoX19MQ19GUFJFR1NfU0FWRV9BUkVBLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGZsb2F0aW5nX3B0X3NhdmVfYXJlYSkpOworCURFRklORShfX0xDX0dQUkVHU19TQVZFX0FSRUEsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZ3ByZWdzX3NhdmVfYXJlYSkpOworCURFRklORShfX0xDX0NSRUdTX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBjcmVnc19zYXZlX2FyZWEpKTsKKyNpZmRlZiBDT05GSUdfMzJCSVQKKwlERUZJTkUoX19MQ19QRkFVTFRfSU5UUEFSTSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBleHRfcGFyYW1zKSk7CisJREVGSU5FKFNBVkVfQVJFQV9CQVNFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGV4dGVuZGVkX3NhdmVfYXJlYV9hZGRyKSk7CisjZWxzZSAvKiBDT05GSUdfMzJCSVQgKi8KKwlERUZJTkUoX19MQ19QRkFVTFRfSU5UUEFSTSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBleHRfcGFyYW1zMikpOworCURFRklORShfX0xDX0VYVF9QQVJBTVMyLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGV4dF9wYXJhbXMyKSk7CisJREVGSU5FKFNBVkVfQVJFQV9CQVNFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGZsb2F0aW5nX3B0X3NhdmVfYXJlYSkpOworCURFRklORShfX0xDX1BBU1RFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBhc3RlKSk7CisJREVGSU5FKF9fTENfRlBfQ1JFR19TQVZFX0FSRUEsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZnB0X2NyZWdfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfTEFTVF9CUkVBSywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBicmVha2luZ19ldmVudF9hZGRyKSk7CisJREVGSU5FKF9fTENfVkRTT19QRVJfQ1BVLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHZkc29fcGVyX2NwdV9kYXRhKSk7CisjZW5kaWYgLyogQ09ORklHXzMyQklUICovCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Jhc2UuUyBiL2FyY2gvczM5MC9rZXJuZWwvYmFzZS5TCmluZGV4IGRjN2U1MjUuLjE1ZTQ2Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvYmFzZS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvYmFzZS5TCkBAIC02LDggKzYsOCBAQAogICoJCSBNaWNoYWVsIEhvbHpoZXUgPGhvbHpoZXVAZGUuaWJtLmNvbT4KICAqLwogCisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAKICNpZmRlZiBDT05GSUdfNjRCSVQKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYyBiL2FyY2gvczM5MC9rZXJuZWwvZGlzLmMKaW5kZXggZGI5NDNhNy4uYjM5YjI3ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Rpcy5jCkBAIC04NiwxMCArODYsMTcgQEAKIAlVNF8xMiwJLyogNCBiaXQgdW5zaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMTIgKi8KIAlVNF8xNiwJLyogNCBiaXQgdW5zaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMTYgKi8KIAlVNF8yMCwJLyogNCBiaXQgdW5zaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMjAgKi8KKwlVNF8zMiwJLyogNCBiaXQgdW5zaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMzIgKi8KIAlVOF84LAkvKiA4IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCA4ICovCiAJVThfMTYsCS8qIDggYml0IHVuc2lnbmVkIHZhbHVlIHN0YXJ0aW5nIGF0IDE2ICovCisJVThfMjQsCS8qIDggYml0IHVuc2lnbmVkIHZhbHVlIHN0YXJ0aW5nIGF0IDI0ICovCisJVThfMzIsCS8qIDggYml0IHVuc2lnbmVkIHZhbHVlIHN0YXJ0aW5nIGF0IDMyICovCisJSThfOCwJLyogOCBiaXQgc2lnbmVkIHZhbHVlIHN0YXJ0aW5nIGF0IDggKi8KKwlJOF8zMiwJLyogOCBiaXQgc2lnbmVkIHZhbHVlIHN0YXJ0aW5nIGF0IDMyICovCiAJSTE2XzE2LAkvKiAxNiBiaXQgc2lnbmVkIHZhbHVlIHN0YXJ0aW5nIGF0IDE2ICovCisJSTE2XzMyLAkvKiAzMiBiaXQgc2lnbmVkIHZhbHVlIHN0YXJ0aW5nIGF0IDE2ICovCiAJVTE2XzE2LAkvKiAxNiBiaXQgdW5zaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMTYgKi8KKwlVMTZfMzIsCS8qIDMyIGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAxNiAqLwogCUoxNl8xNiwJLyogUEMgcmVsYXRpdmUganVtcCBvZmZzZXQgYXQgMTYgKi8KIAlKMzJfMTYsCS8qIFBDIHJlbGF0aXZlIGxvbmcgb2Zmc2V0IGF0IDE2ICovCiAJSTMyXzE2LAkvKiAzMiBiaXQgc2lnbmVkIHZhbHVlIHN0YXJ0aW5nIGF0IDE2ICovCkBAIC0xMDQsMjEgKzExMSwzNyBAQAogICovCiBlbnVtIHsKIAlJTlNUUl9JTlZBTElELAotCUlOU1RSX0UsIElOU1RSX1JJRV9SUlAsIElOU1RSX1JJTF9SSSwgSU5TVFJfUklMX1JQLCBJTlNUUl9SSUxfUlUsCi0JSU5TVFJfUklMX1VQLCBJTlNUUl9SSV9SSSwgSU5TVFJfUklfUlAsIElOU1RSX1JJX1JVLCBJTlNUUl9SSV9VUCwKKwlJTlNUUl9FLAorCUlOU1RSX1JJRV9SMElVLCBJTlNUUl9SSUVfUjBVVSwgSU5TVFJfUklFX1JSUCwgSU5TVFJfUklFX1JSUFUsCisJSU5TVFJfUklFX1JSVVVVLCBJTlNUUl9SSUVfUlVQSSwgSU5TVFJfUklFX1JVUFUsCisJSU5TVFJfUklMX1JJLCBJTlNUUl9SSUxfUlAsIElOU1RSX1JJTF9SVSwgSU5TVFJfUklMX1VQLAorCUlOU1RSX1JJU19SMFJEVSwgSU5TVFJfUklTX1IwVVUsIElOU1RSX1JJU19SVVJESSwgSU5TVFJfUklTX1JVUkRVLAorCUlOU1RSX1JJX1JJLCBJTlNUUl9SSV9SUCwgSU5TVFJfUklfUlUsIElOU1RSX1JJX1VQLAogCUlOU1RSX1JSRV8wMCwgSU5TVFJfUlJFXzBSLCBJTlNUUl9SUkVfQUEsIElOU1RSX1JSRV9BUiwgSU5TVFJfUlJFX0YwLAotCUlOU1RSX1JSRV9GRiwgSU5TVFJfUlJFX1IwLCBJTlNUUl9SUkVfUkEsIElOU1RSX1JSRV9SRiwgSU5TVFJfUlJFX1JSLAotCUlOU1RSX1JSRV9SUl9PUFQsIElOU1RSX1JSRl9GMEZGLCBJTlNUUl9SUkZfRlVGRiwgSU5TVFJfUlJGX00wUlIsCi0JSU5TVFJfUlJGX1IwUlIsIElOU1RSX1JSRl9SVVJSLCBJTlNUUl9SUkZfVTBGRiwgSU5TVFJfUlJGX1UwUkYsCisJSU5TVFJfUlJFX0ZGLCBJTlNUUl9SUkVfRlIsIElOU1RSX1JSRV9SMCwgSU5TVFJfUlJFX1JBLCBJTlNUUl9SUkVfUkYsCisJSU5TVFJfUlJFX1JSLCBJTlNUUl9SUkVfUlJfT1BULAorCUlOU1RSX1JSRl8wVUZGLCBJTlNUUl9SUkZfRjBGRiwgSU5TVFJfUlJGX0YwRkYyLCBJTlNUUl9SUkZfRjBGUiwKKwlJTlNUUl9SUkZfRkZSVSwgSU5TVFJfUlJGX0ZVRkYsIElOU1RSX1JSRl9NMFJSLCBJTlNUUl9SUkZfUjBSUiwKKwlJTlNUUl9SUkZfUlVSUiwgSU5TVFJfUlJGX1UwRkYsIElOU1RSX1JSRl9VMFJGLCBJTlNUUl9SUkZfVTBSUiwKKwlJTlNUUl9SUkZfVVVGRiwgSU5TVFJfUlJSX0YwRkYsIElOU1RSX1JSU19SUlJEVSwKIAlJTlNUUl9SUl9GRiwgSU5TVFJfUlJfUjAsIElOU1RSX1JSX1JSLCBJTlNUUl9SUl9VMCwgSU5TVFJfUlJfVVIsCi0JSU5TVFJfUlNFX0NDUkQsIElOU1RSX1JTRV9SUlJELCBJTlNUUl9SU0VfUlVSRCwgSU5TVFJfUlNJX1JSUCwKLQlJTlNUUl9SU0xfUjBSRCwgSU5TVFJfUlNZX0FBUkQsIElOU1RSX1JTWV9DQ1JELCBJTlNUUl9SU1lfUlJSRCwKLQlJTlNUUl9SU1lfUlVSRCwgSU5TVFJfUlNfQUFSRCwgSU5TVFJfUlNfQ0NSRCwgSU5TVFJfUlNfUjBSRCwKLQlJTlNUUl9SU19SUlJELCBJTlNUUl9SU19SVVJELCBJTlNUUl9SWEVfRlJSRCwgSU5TVFJfUlhFX1JSUkQsCi0JSU5TVFJfUlhGX0ZSUkRGLCBJTlNUUl9SWFlfRlJSRCwgSU5TVFJfUlhZX1JSUkQsIElOU1RSX1JYX0ZSUkQsCi0JSU5TVFJfUlhfUlJSRCwgSU5TVFJfUlhfVVJSRCwgSU5TVFJfU0lZX1VSRCwgSU5TVFJfU0lfVVJELAotCUlOU1RSX1NTRV9SRFJELCBJTlNUUl9TU0ZfUlJEUkQsIElOU1RSX1NTX0wwUkRSRCwgSU5TVFJfU1NfTElSRFJELAotCUlOU1RSX1NTX0xMUkRSRCwgSU5TVFJfU1NfUlJSRFJELCBJTlNUUl9TU19SUlJEUkQyLCBJTlNUUl9TU19SUlJEUkQzLAorCUlOU1RSX1JTRV9DQ1JELCBJTlNUUl9SU0VfUlJSRCwgSU5TVFJfUlNFX1JVUkQsCisJSU5TVFJfUlNJX1JSUCwKKwlJTlNUUl9SU0xfUjBSRCwKKwlJTlNUUl9SU1lfQUFSRCwgSU5TVFJfUlNZX0NDUkQsIElOU1RSX1JTWV9SUlJELCBJTlNUUl9SU1lfUlVSRCwKKwlJTlNUUl9SU19BQVJELCBJTlNUUl9SU19DQ1JELCBJTlNUUl9SU19SMFJELCBJTlNUUl9SU19SUlJELAorCUlOU1RSX1JTX1JVUkQsCisJSU5TVFJfUlhFX0ZSUkQsIElOU1RSX1JYRV9SUlJELAorCUlOU1RSX1JYRl9GUlJERiwKKwlJTlNUUl9SWFlfRlJSRCwgSU5TVFJfUlhZX1JSUkQsIElOU1RSX1JYWV9VUlJELAorCUlOU1RSX1JYX0ZSUkQsIElOU1RSX1JYX1JSUkQsIElOU1RSX1JYX1VSUkQsCisJSU5TVFJfU0lMX1JESSwgSU5TVFJfU0lMX1JEVSwKKwlJTlNUUl9TSVlfSVJELCBJTlNUUl9TSVlfVVJELAorCUlOU1RSX1NJX1VSRCwKKwlJTlNUUl9TU0VfUkRSRCwKKwlJTlNUUl9TU0ZfUlJEUkQsCisJSU5TVFJfU1NfTDBSRFJELCBJTlNUUl9TU19MSVJEUkQsIElOU1RSX1NTX0xMUkRSRCwgSU5TVFJfU1NfUlJSRFJELAorCUlOU1RSX1NTX1JSUkRSRDIsIElOU1RSX1NTX1JSUkRSRDMsCiAJSU5TVFJfU18wMCwgSU5TVFJfU19SRCwKIH07CiAKQEAgLTEyOSw3ICsxNTIsNyBAQAogfTsKIAogc3RydWN0IGluc24gewotCWNvbnN0IGNoYXIgbmFtZVs1XTsKKwljb25zdCBjaGFyIG5hbWVbNl07CiAJdW5zaWduZWQgY2hhciBvcGZyYWc7CiAJdW5zaWduZWQgY2hhciBmb3JtYXQ7CiB9OwpAQCAtMTcwLDExICsxOTMsMTYgQEAKIAlbVTRfMTJdICA9IHsgIDQsIDEyLCAwIH0sCiAJW1U0XzE2XSAgPSB7ICA0LCAxNiwgMCB9LAogCVtVNF8yMF0gID0geyAgNCwgMjAsIDAgfSwKKwlbVTRfMzJdICA9IHsgIDQsIDMyLCAwIH0sCiAJW1U4XzhdCSA9IHsgIDgsICA4LCAwIH0sCiAJW1U4XzE2XSAgPSB7ICA4LCAxNiwgMCB9LAorCVtVOF8yNF0gID0geyAgOCwgMjQsIDAgfSwKKwlbVThfMzJdICA9IHsgIDgsIDMyLCAwIH0sCiAJW0kxNl8xNl0gPSB7IDE2LCAxNiwgT1BFUkFORF9TSUdORUQgfSwKIAlbVTE2XzE2XSA9IHsgMTYsIDE2LCAwIH0sCisJW1UxNl8zMl0gPSB7IDE2LCAzMiwgMCB9LAogCVtKMTZfMTZdID0geyAxNiwgMTYsIE9QRVJBTkRfUENSRUwgfSwKKwlbSTE2XzMyXSA9IHsgMTYsIDMyLCBPUEVSQU5EX1NJR05FRCB9LAogCVtKMzJfMTZdID0geyAzMiwgMTYsIE9QRVJBTkRfUENSRUwgfSwKIAlbSTMyXzE2XSA9IHsgMzIsIDE2LCBPUEVSQU5EX1NJR05FRCB9LAogCVtVMzJfMTZdID0geyAzMiwgMTYsIDAgfSwKQEAgLTE4Myw4MiArMjExLDkzIEBACiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmb3JtYXRzW11bN10gPSB7Ci0JW0lOU1RSX0VdCSAgPSB7IDB4ZmYsIDAsMCwwLDAsMCwwIH0sCSAgICAgICAvKiBlLmcuIHByICAgICovCi0JW0lOU1RSX1JJRV9SUlBdCSAgPSB7IDB4ZmYsIFJfOCxSXzEyLEoxNl8xNiwwLDAsMCB9LCAgIC8qIGUuZy4gYnJ4aGcgKi8KLQlbSU5TVFJfUklMX1JQXQkgID0geyAweDBmLCBSXzgsSjMyXzE2LDAsMCwwLDAgfSwgICAgICAvKiBlLmcuIGJyYXNsICovCi0JW0lOU1RSX1JJTF9VUF0JICA9IHsgMHgwZiwgVTRfOCxKMzJfMTYsMCwwLDAsMCB9LCAgICAgLyogZS5nLiBicmNsICAqLwotCVtJTlNUUl9SSUxfUkldCSAgPSB7IDB4MGYsIFJfOCxJMzJfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gYWZpICAgKi8KLQlbSU5TVFJfUklMX1JVXQkgID0geyAweDBmLCBSXzgsVTMyXzE2LDAsMCwwLDAgfSwgICAgICAvKiBlLmcuIGFsZmkgICovCi0JW0lOU1RSX1JJX1JJXQkgID0geyAweDBmLCBSXzgsSTE2XzE2LDAsMCwwLDAgfSwgICAgICAvKiBlLmcuIGFoaSAgICovCi0JW0lOU1RSX1JJX1JQXQkgID0geyAweDBmLCBSXzgsSjE2XzE2LDAsMCwwLDAgfSwgICAgICAvKiBlLmcuIGJyY3QgICovCi0JW0lOU1RSX1JJX1JVXQkgID0geyAweDBmLCBSXzgsVTE2XzE2LDAsMCwwLDAgfSwgICAgICAvKiBlLmcuIHRtbCAgICovCi0JW0lOU1RSX1JJX1VQXQkgID0geyAweDBmLCBVNF84LEoxNl8xNiwwLDAsMCwwIH0sICAgICAvKiBlLmcuIGJyYyAgICovCi0JW0lOU1RSX1JSRV8wMF0JICA9IHsgMHhmZiwgMCwwLDAsMCwwLDAgfSwJICAgICAgIC8qIGUuZy4gcGFsYiAgKi8KLQlbSU5TVFJfUlJFXzBSXQkgID0geyAweGZmLCBSXzI4LDAsMCwwLDAsMCB9LAkgICAgICAgLyogZS5nLiB0YiAgICAqLwotCVtJTlNUUl9SUkVfQUFdCSAgPSB7IDB4ZmYsIEFfMjQsQV8yOCwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gY3B5YSAgKi8KLQlbSU5TVFJfUlJFX0FSXQkgID0geyAweGZmLCBBXzI0LFJfMjgsMCwwLDAsMCB9LCAgICAgICAvKiBlLmcuIHNhciAgICovCi0JW0lOU1RSX1JSRV9GMF0JICA9IHsgMHhmZiwgRl8yNCwwLDAsMCwwLDAgfSwJICAgICAgIC8qIGUuZy4gc3FlciAgKi8KLQlbSU5TVFJfUlJFX0ZGXQkgID0geyAweGZmLCBGXzI0LEZfMjgsMCwwLDAsMCB9LCAgICAgICAvKiBlLmcuIGRlYnIgICovCi0JW0lOU1RSX1JSRV9SMF0JICA9IHsgMHhmZiwgUl8yNCwwLDAsMCwwLDAgfSwJICAgICAgIC8qIGUuZy4gaXBtICAgKi8KLQlbSU5TVFJfUlJFX1JBXQkgID0geyAweGZmLCBSXzI0LEFfMjgsMCwwLDAsMCB9LCAgICAgICAvKiBlLmcuIGVhciAgICovCi0JW0lOU1RSX1JSRV9SRl0JICA9IHsgMHhmZiwgUl8yNCxGXzI4LDAsMCwwLDAgfSwgICAgICAgLyogZS5nLiBjZWZiciAqLwotCVtJTlNUUl9SUkVfUlJdCSAgPSB7IDB4ZmYsIFJfMjQsUl8yOCwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gbHVyYSAgKi8KLQlbSU5TVFJfUlJFX1JSX09QVF09IHsgMHhmZiwgUl8yNCxST18yOCwwLDAsMCwwIH0sICAgICAgLyogZWZwYywgc2ZwYyAqLwotCVtJTlNUUl9SUkZfRjBGRl0gID0geyAweGZmLCBGXzE2LEZfMjQsRl8yOCwwLDAsMCB9LCAgICAvKiBlLmcuIG1hZGJyICovCi0JW0lOU1RSX1JSRl9GVUZGXSAgPSB7IDB4ZmYsIEZfMjQsRl8xNixGXzI4LFU0XzIwLDAsMCB9LC8qIGUuZy4gZGlkYnIgKi8KLQlbSU5TVFJfUlJGX1JVUlJdICA9IHsgMHhmZiwgUl8yNCxSXzI4LFJfMTYsVTRfMjAsMCwwIH0sLyogZS5nLiAuaW5zbiAqLwotCVtJTlNUUl9SUkZfUjBSUl0gID0geyAweGZmLCBSXzI0LFJfMTYsUl8yOCwwLDAsMCB9LCAgICAvKiBlLmcuIGlkdGUgICovCi0JW0lOU1RSX1JSRl9VMEZGXSAgPSB7IDB4ZmYsIEZfMjQsVTRfMTYsRl8yOCwwLDAsMCB9LCAgIC8qIGUuZy4gZml4ciAgKi8KLQlbSU5TVFJfUlJGX1UwUkZdICA9IHsgMHhmZiwgUl8yNCxVNF8xNixGXzI4LDAsMCwwIH0sICAgLyogZS5nLiBjZmViciAqLwotCVtJTlNUUl9SUkZfTTBSUl0gID0geyAweGZmLCBSXzI0LFJfMjgsTV8xNiwwLDAsMCB9LCAgICAvKiBlLmcuIHNza2UgICovCi0JW0lOU1RSX1JSX0ZGXQkgID0geyAweGZmLCBGXzgsRl8xMiwwLDAsMCwwIH0sICAgICAgICAvKiBlLmcuIGFkciAgICovCi0JW0lOU1RSX1JSX1IwXQkgID0geyAweGZmLCBSXzgsIDAsMCwwLDAsMCB9LAkgICAgICAgLyogZS5nLiBzcG0gICAqLwotCVtJTlNUUl9SUl9SUl0JICA9IHsgMHhmZiwgUl84LFJfMTIsMCwwLDAsMCB9LCAgICAgICAgLyogZS5nLiBsciAgICAqLwotCVtJTlNUUl9SUl9VMF0JICA9IHsgMHhmZiwgVThfOCwgMCwwLDAsMCwwIH0sCSAgICAgICAvKiBlLmcuIHN2YyAgICovCi0JW0lOU1RSX1JSX1VSXQkgID0geyAweGZmLCBVNF84LFJfMTIsMCwwLDAsMCB9LCAgICAgICAvKiBlLmcuIGJjciAgICovCi0JW0lOU1RSX1JTRV9SUlJEXSAgPSB7IDB4ZmYsIFJfOCxSXzEyLERfMjAsQl8xNiwwLDAgfSwgIC8qIGUuZy4gbG1oICAgKi8KLQlbSU5TVFJfUlNFX0NDUkRdICA9IHsgMHhmZiwgQ184LENfMTIsRF8yMCxCXzE2LDAsMCB9LCAgLyogZS5nLiBsbWggICAqLwotCVtJTlNUUl9SU0VfUlVSRF0gID0geyAweGZmLCBSXzgsVTRfMTIsRF8yMCxCXzE2LDAsMCB9LCAvKiBlLmcuIGljbWggICovCi0JW0lOU1RSX1JTTF9SMFJEXSAgPSB7IDB4ZmYsIFJfOCxEXzIwLEJfMTYsMCwwLDAgfSwgICAgIC8qIGUuZy4gdHAgICAgKi8KLQlbSU5TVFJfUlNJX1JSUF0JICA9IHsgMHhmZiwgUl84LFJfMTIsSjE2XzE2LDAsMCwwIH0sICAgLyogZS5nLiBicnhoICAqLwotCVtJTlNUUl9SU1lfUlJSRF0gID0geyAweGZmLCBSXzgsUl8xMixEMjBfMjAsQl8xNiwwLDAgfSwvKiBlLmcuIHN0bXkgICovCisJW0lOU1RSX0VdCSAgPSB7IDB4ZmYsIDAsMCwwLDAsMCwwIH0sCisJW0lOU1RSX1JJRV9SMFVVXSAgPSB7IDB4ZmYsIFJfOCxVMTZfMTYsVTRfMzIsMCwwLDAgfSwKKwlbSU5TVFJfUklFX1JSUFVdICA9IHsgMHhmZiwgUl84LFJfMTIsVTRfMzIsSjE2XzE2LDAsMCB9LAorCVtJTlNUUl9SSUVfUlJQXQkgID0geyAweGZmLCBSXzgsUl8xMixKMTZfMTYsMCwwLDAgfSwKKwlbSU5TVFJfUklFX1JSVVVVXSA9IHsgMHhmZiwgUl84LFJfMTIsVThfMTYsVThfMjQsVThfMzIsMCB9LAorCVtJTlNUUl9SSUVfUlVQSV0gID0geyAweGZmLCBSXzgsSThfMzIsVTRfMTIsSjE2XzE2LDAsMCB9LAorCVtJTlNUUl9SSUxfUkldCSAgPSB7IDB4MGYsIFJfOCxJMzJfMTYsMCwwLDAsMCB9LAorCVtJTlNUUl9SSUxfUlBdCSAgPSB7IDB4MGYsIFJfOCxKMzJfMTYsMCwwLDAsMCB9LAorCVtJTlNUUl9SSUxfUlVdCSAgPSB7IDB4MGYsIFJfOCxVMzJfMTYsMCwwLDAsMCB9LAorCVtJTlNUUl9SSUxfVVBdCSAgPSB7IDB4MGYsIFU0XzgsSjMyXzE2LDAsMCwwLDAgfSwKKwlbSU5TVFJfUklTX1IwUkRVXSA9IHsgMHhmZiwgUl84LFU4XzMyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUklTX1JVUkRJXSA9IHsgMHhmZiwgUl84LEk4XzMyLFU0XzEyLERfMjAsQl8xNiwwIH0sCisJW0lOU1RSX1JJU19SVVJEVV0gPSB7IDB4ZmYsIFJfOCxVOF8zMixVNF8xMixEXzIwLEJfMTYsMCB9LAorCVtJTlNUUl9SSV9SSV0JICA9IHsgMHgwZiwgUl84LEkxNl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JJX1JQXQkgID0geyAweDBmLCBSXzgsSjE2XzE2LDAsMCwwLDAgfSwKKwlbSU5TVFJfUklfUlVdCSAgPSB7IDB4MGYsIFJfOCxVMTZfMTYsMCwwLDAsMCB9LAorCVtJTlNUUl9SSV9VUF0JICA9IHsgMHgwZiwgVTRfOCxKMTZfMTYsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfMDBdCSAgPSB7IDB4ZmYsIDAsMCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV8wUl0JICA9IHsgMHhmZiwgUl8yOCwwLDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFX0FBXQkgID0geyAweGZmLCBBXzI0LEFfMjgsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfQVJdCSAgPSB7IDB4ZmYsIEFfMjQsUl8yOCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV9GMF0JICA9IHsgMHhmZiwgRl8yNCwwLDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFX0ZGXQkgID0geyAweGZmLCBGXzI0LEZfMjgsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfRlJdCSAgPSB7IDB4ZmYsIEZfMjQsUl8yOCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV9SMF0JICA9IHsgMHhmZiwgUl8yNCwwLDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFX1JBXQkgID0geyAweGZmLCBSXzI0LEFfMjgsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfUkZdCSAgPSB7IDB4ZmYsIFJfMjQsRl8yOCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV9SUl0JICA9IHsgMHhmZiwgUl8yNCxSXzI4LDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFX1JSX09QVF09IHsgMHhmZiwgUl8yNCxST18yOCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRl8wVUZGXSAgPSB7IDB4ZmYsIEZfMjQsRl8yOCxVNF8yMCwwLDAsMCB9LAorCVtJTlNUUl9SUkZfRjBGRjJdID0geyAweGZmLCBGXzI0LEZfMTYsRl8yOCwwLDAsMCB9LAorCVtJTlNUUl9SUkZfRjBGRl0gID0geyAweGZmLCBGXzE2LEZfMjQsRl8yOCwwLDAsMCB9LAorCVtJTlNUUl9SUkZfRjBGUl0gID0geyAweGZmLCBGXzI0LEZfMTYsUl8yOCwwLDAsMCB9LAorCVtJTlNUUl9SUkZfRkZSVV0gID0geyAweGZmLCBGXzI0LEZfMTYsUl8yOCxVNF8yMCwwLDAgfSwKKwlbSU5TVFJfUlJGX0ZVRkZdICA9IHsgMHhmZiwgRl8yNCxGXzE2LEZfMjgsVTRfMjAsMCwwIH0sCisJW0lOU1RSX1JSRl9NMFJSXSAgPSB7IDB4ZmYsIFJfMjQsUl8yOCxNXzE2LDAsMCwwIH0sCisJW0lOU1RSX1JSRl9SMFJSXSAgPSB7IDB4ZmYsIFJfMjQsUl8xNixSXzI4LDAsMCwwIH0sCisJW0lOU1RSX1JSRl9SVVJSXSAgPSB7IDB4ZmYsIFJfMjQsUl8yOCxSXzE2LFU0XzIwLDAsMCB9LAorCVtJTlNUUl9SUkZfVTBGRl0gID0geyAweGZmLCBGXzI0LFU0XzE2LEZfMjgsMCwwLDAgfSwKKwlbSU5TVFJfUlJGX1UwUkZdICA9IHsgMHhmZiwgUl8yNCxVNF8xNixGXzI4LDAsMCwwIH0sCisJW0lOU1RSX1JSRl9VMFJSXSAgPSB7IDB4ZmYsIFJfMjQsUl8yOCxVNF8xNiwwLDAsMCB9LAorCVtJTlNUUl9SUkZfVVVGRl0gID0geyAweGZmLCBGXzI0LFU0XzE2LEZfMjgsVTRfMjAsMCwwIH0sCisJW0lOU1RSX1JSUl9GMEZGXSAgPSB7IDB4ZmYsIEZfMjQsRl8yOCxGXzE2LDAsMCwwIH0sCisJW0lOU1RSX1JSU19SUlJEVV0gPSB7IDB4ZmYsIFJfOCxSXzEyLFU0XzMyLERfMjAsQl8xNiwwIH0sCisJW0lOU1RSX1JSX0ZGXQkgID0geyAweGZmLCBGXzgsRl8xMiwwLDAsMCwwIH0sCisJW0lOU1RSX1JSX1IwXQkgID0geyAweGZmLCBSXzgsIDAsMCwwLDAsMCB9LAorCVtJTlNUUl9SUl9SUl0JICA9IHsgMHhmZiwgUl84LFJfMTIsMCwwLDAsMCB9LAorCVtJTlNUUl9SUl9VMF0JICA9IHsgMHhmZiwgVThfOCwgMCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSX1VSXQkgID0geyAweGZmLCBVNF84LFJfMTIsMCwwLDAsMCB9LAorCVtJTlNUUl9SU0VfQ0NSRF0gID0geyAweGZmLCBDXzgsQ18xMixEXzIwLEJfMTYsMCwwIH0sCisJW0lOU1RSX1JTRV9SUlJEXSAgPSB7IDB4ZmYsIFJfOCxSXzEyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlNFX1JVUkRdICA9IHsgMHhmZiwgUl84LFU0XzEyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlNJX1JSUF0JICA9IHsgMHhmZiwgUl84LFJfMTIsSjE2XzE2LDAsMCwwIH0sCisJW0lOU1RSX1JTTF9SMFJEXSAgPSB7IDB4ZmYsIERfMjAsTDRfOCxCXzE2LDAsMCwwIH0sCisJW0lOU1RSX1JTWV9BQVJEXSAgPSB7IDB4ZmYsIEFfOCxBXzEyLEQyMF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SU1lfQ0NSRF0gID0geyAweGZmLCBDXzgsQ18xMixEMjBfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlNZX1JSUkRdICA9IHsgMHhmZiwgUl84LFJfMTIsRDIwXzIwLEJfMTYsMCwwIH0sCiAJW0lOU1RSX1JTWV9SVVJEXSAgPSB7IDB4ZmYsIFJfOCxVNF8xMixEMjBfMjAsQl8xNiwwLDAgfSwKLQkJCQkJCQkgICAgICAgLyogZS5nLiBpY21oICAqLwotCVtJTlNUUl9SU1lfQUFSRF0gID0geyAweGZmLCBBXzgsQV8xMixEMjBfMjAsQl8xNiwwLDAgfSwvKiBlLmcuIGxhbXkgICovCi0JW0lOU1RSX1JTWV9DQ1JEXSAgPSB7IDB4ZmYsIENfOCxDXzEyLEQyMF8yMCxCXzE2LDAsMCB9LC8qIGUuZy4gbGFteSAgKi8KLQlbSU5TVFJfUlNfQUFSRF0JICA9IHsgMHhmZiwgQV84LEFfMTIsRF8yMCxCXzE2LDAsMCB9LCAgLyogZS5nLiBsYW0gICAqLwotCVtJTlNUUl9SU19DQ1JEXQkgID0geyAweGZmLCBDXzgsQ18xMixEXzIwLEJfMTYsMCwwIH0sICAvKiBlLmcuIGxjdGwgICovCi0JW0lOU1RSX1JTX1IwUkRdCSAgPSB7IDB4ZmYsIFJfOCxEXzIwLEJfMTYsMCwwLDAgfSwgICAgIC8qIGUuZy4gc2xsICAgKi8KLQlbSU5TVFJfUlNfUlJSRF0JICA9IHsgMHhmZiwgUl84LFJfMTIsRF8yMCxCXzE2LDAsMCB9LCAgLyogZS5nLiBjcyAgICAqLwotCVtJTlNUUl9SU19SVVJEXQkgID0geyAweGZmLCBSXzgsVTRfMTIsRF8yMCxCXzE2LDAsMCB9LCAvKiBlLmcuIGljbSAgICovCi0JW0lOU1RSX1JYRV9GUlJEXSAgPSB7IDB4ZmYsIEZfOCxEXzIwLFhfMTIsQl8xNiwwLDAgfSwgIC8qIGUuZy4gYXhiciAgKi8KLQlbSU5TVFJfUlhFX1JSUkRdICA9IHsgMHhmZiwgUl84LERfMjAsWF8xMixCXzE2LDAsMCB9LCAgLyogZS5nLiBsZyAgICAqLworCVtJTlNUUl9SU19BQVJEXQkgID0geyAweGZmLCBBXzgsQV8xMixEXzIwLEJfMTYsMCwwIH0sCisJW0lOU1RSX1JTX0NDUkRdCSAgPSB7IDB4ZmYsIENfOCxDXzEyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlNfUjBSRF0JICA9IHsgMHhmZiwgUl84LERfMjAsQl8xNiwwLDAsMCB9LAorCVtJTlNUUl9SU19SUlJEXQkgID0geyAweGZmLCBSXzgsUl8xMixEXzIwLEJfMTYsMCwwIH0sCisJW0lOU1RSX1JTX1JVUkRdCSAgPSB7IDB4ZmYsIFJfOCxVNF8xMixEXzIwLEJfMTYsMCwwIH0sCisJW0lOU1RSX1JYRV9GUlJEXSAgPSB7IDB4ZmYsIEZfOCxEXzIwLFhfMTIsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlhFX1JSUkRdICA9IHsgMHhmZiwgUl84LERfMjAsWF8xMixCXzE2LDAsMCB9LAogCVtJTlNUUl9SWEZfRlJSREZdID0geyAweGZmLCBGXzMyLEZfOCxEXzIwLFhfMTIsQl8xNiwwIH0sCi0JCQkJCQkJICAgICAgIC8qIGUuZy4gbWFkYiAgKi8KLQlbSU5TVFJfUlhZX1JSUkRdICA9IHsgMHhmZiwgUl84LEQyMF8yMCxYXzEyLEJfMTYsMCwwIH0sLyogZS5nLiBseSAgICAqLwotCVtJTlNUUl9SWFlfRlJSRF0gID0geyAweGZmLCBGXzgsRDIwXzIwLFhfMTIsQl8xNiwwLDAgfSwvKiBlLmcuIGxleSAgICovCi0JW0lOU1RSX1JYX0ZSUkRdCSAgPSB7IDB4ZmYsIEZfOCxEXzIwLFhfMTIsQl8xNiwwLDAgfSwgIC8qIGUuZy4gYWUgICAgKi8KLQlbSU5TVFJfUlhfUlJSRF0JICA9IHsgMHhmZiwgUl84LERfMjAsWF8xMixCXzE2LDAsMCB9LCAgLyogZS5nLiBsICAgICAqLwotCVtJTlNUUl9SWF9VUlJEXQkgID0geyAweGZmLCBVNF84LERfMjAsWF8xMixCXzE2LDAsMCB9LCAvKiBlLmcuIGJjICAgICovCi0JW0lOU1RSX1NJX1VSRF0JICA9IHsgMHhmZiwgRF8yMCxCXzE2LFU4XzgsMCwwLDAgfSwgICAgLyogZS5nLiBjbGkgICAqLwotCVtJTlNUUl9TSVlfVVJEXQkgID0geyAweGZmLCBEMjBfMjAsQl8xNixVOF84LDAsMCwwIH0sICAvKiBlLmcuIHRteSAgICovCi0JW0lOU1RSX1NTRV9SRFJEXSAgPSB7IDB4ZmYsIERfMjAsQl8xNixEXzM2LEJfMzIsMCwwIH0sIC8qIGUuZy4gbXZzZGsgKi8KLQlbSU5TVFJfU1NfTDBSRFJEXSA9IHsgMHhmZiwgRF8yMCxMOF84LEJfMTYsRF8zNixCXzMyLDAgfSwKLQkJCQkJCQkgICAgICAgLyogZS5nLiBtdmMgICAqLwotCVtJTlNUUl9TU19MSVJEUkRdID0geyAweGZmLCBEXzIwLEw0XzgsQl8xNixEXzM2LEJfMzIsVTRfMTIgfSwKLQkJCQkJCQkgICAgICAgLyogZS5nLiBzcnAgICAqLwotCVtJTlNUUl9TU19MTFJEUkRdID0geyAweGZmLCBEXzIwLEw0XzgsQl8xNixEXzM2LEw0XzEyLEJfMzIgfSwKLQkJCQkJCQkgICAgICAgLyogZS5nLiBwYWNrICAqLwotCVtJTlNUUl9TU19SUlJEUkRdID0geyAweGZmLCBEXzIwLFJfOCxCXzE2LERfMzYsQl8zMixSXzEyIH0sCi0JCQkJCQkJICAgICAgIC8qIGUuZy4gbXZjayAgKi8KLQlbSU5TVFJfU1NfUlJSRFJEMl09IHsgMHhmZiwgUl84LERfMjAsQl8xNixSXzEyLERfMzYsQl8zMiB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIHBsbyAgICovCi0JW0lOU1RSX1NTX1JSUkRSRDNdPSB7IDB4ZmYsIFJfOCxSXzEyLERfMjAsQl8xNixEXzM2LEJfMzIgfSwKLQkJCQkJCQkgICAgICAgLyogZS5nLiBsbWQgICAqLwotCVtJTlNUUl9TXzAwXQkgID0geyAweGZmLCAwLDAsMCwwLDAsMCB9LAkgICAgICAgLyogZS5nLiBoc2NoICAqLwotCVtJTlNUUl9TX1JEXQkgID0geyAweGZmLCBEXzIwLEJfMTYsMCwwLDAsMCB9LCAgICAgICAvKiBlLmcuIGxwc3cgICovCisJW0lOU1RSX1JYWV9GUlJEXSAgPSB7IDB4ZmYsIEZfOCxEMjBfMjAsWF8xMixCXzE2LDAsMCB9LAorCVtJTlNUUl9SWFlfUlJSRF0gID0geyAweGZmLCBSXzgsRDIwXzIwLFhfMTIsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlhZX1VSUkRdICA9IHsgMHhmZiwgVTRfOCxEMjBfMjAsWF8xMixCXzE2LDAsMCB9LAorCVtJTlNUUl9SWF9GUlJEXQkgID0geyAweGZmLCBGXzgsRF8yMCxYXzEyLEJfMTYsMCwwIH0sCisJW0lOU1RSX1JYX1JSUkRdCSAgPSB7IDB4ZmYsIFJfOCxEXzIwLFhfMTIsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlhfVVJSRF0JICA9IHsgMHhmZiwgVTRfOCxEXzIwLFhfMTIsQl8xNiwwLDAgfSwKKwlbSU5TVFJfU0lMX1JESV0gICA9IHsgMHhmZiwgRF8yMCxCXzE2LEkxNl8zMiwwLDAsMCB9LAorCVtJTlNUUl9TSUxfUkRVXSAgID0geyAweGZmLCBEXzIwLEJfMTYsVTE2XzMyLDAsMCwwIH0sCisJW0lOU1RSX1NJWV9JUkRdICAgPSB7IDB4ZmYsIEQyMF8yMCxCXzE2LEk4XzgsMCwwLDAgfSwKKwlbSU5TVFJfU0lZX1VSRF0JICA9IHsgMHhmZiwgRDIwXzIwLEJfMTYsVThfOCwwLDAsMCB9LAorCVtJTlNUUl9TSV9VUkRdCSAgPSB7IDB4ZmYsIERfMjAsQl8xNixVOF84LDAsMCwwIH0sCisJW0lOU1RSX1NTRV9SRFJEXSAgPSB7IDB4ZmYsIERfMjAsQl8xNixEXzM2LEJfMzIsMCwwIH0sCiAJW0lOU1RSX1NTRl9SUkRSRF0gPSB7IDB4MDAsIERfMjAsQl8xNixEXzM2LEJfMzIsUl84LDAgfSwKLQkJCQkJCQkgICAgICAgLyogZS5nLiBtdmNvcyAqLworCVtJTlNUUl9TU19MMFJEUkRdID0geyAweGZmLCBEXzIwLEw4XzgsQl8xNixEXzM2LEJfMzIsMCB9LAorCVtJTlNUUl9TU19MSVJEUkRdID0geyAweGZmLCBEXzIwLEw0XzgsQl8xNixEXzM2LEJfMzIsVTRfMTIgfSwKKwlbSU5TVFJfU1NfTExSRFJEXSA9IHsgMHhmZiwgRF8yMCxMNF84LEJfMTYsRF8zNixMNF8xMixCXzMyIH0sCisJW0lOU1RSX1NTX1JSUkRSRDJdPSB7IDB4ZmYsIFJfOCxEXzIwLEJfMTYsUl8xMixEXzM2LEJfMzIgfSwKKwlbSU5TVFJfU1NfUlJSRFJEM109IHsgMHhmZiwgUl84LFJfMTIsRF8yMCxCXzE2LERfMzYsQl8zMiB9LAorCVtJTlNUUl9TU19SUlJEUkRdID0geyAweGZmLCBEXzIwLFJfOCxCXzE2LERfMzYsQl8zMixSXzEyIH0sCisJW0lOU1RSX1NfMDBdCSAgPSB7IDB4ZmYsIDAsMCwwLDAsMCwwIH0sCisJW0lOU1RSX1NfUkRdCSAgPSB7IDB4ZmYsIERfMjAsQl8xNiwwLDAsMCwwIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGluc24gb3Bjb2RlW10gPSB7CkBAIC00NTQsNiArNDkzLDggQEAKIHN0YXRpYyBzdHJ1Y3QgaW5zbiBvcGNvZGVfMDFbXSA9IHsKICNpZmRlZiBDT05GSUdfNjRCSVQKIAl7ICJzYW02NCIsIDB4MGUsIElOU1RSX0UgfSwKKwl7ICJwZnBvIiwgMHgwYSwgSU5TVFJfRSB9LAorCXsgInB0ZmYiLCAweDA0LCBJTlNUUl9FIH0sCiAjZW5kaWYKIAl7ICJwciIsIDB4MDEsIElOU1RSX0UgfSwKIAl7ICJ1cHQiLCAweDAyLCBJTlNUUl9FIH0sCkBAIC01MTksNiArNTYwLDggQEAKIAl7ICJjdXRmdSIsIDB4YTcsIElOU1RSX1JSRl9NMFJSIH0sCiAJeyAic3RmbGUiLCAweGIwLCBJTlNUUl9TX1JEIH0sCiAJeyAibHBzd2UiLCAweGIyLCBJTlNUUl9TX1JEIH0sCisJeyAic3JubXQiLCAweGI5LCBJTlNUUl9TX1JEIH0sCisJeyAibGZhcyIsIDB4YmQsIElOU1RSX1NfUkQgfSwKICNlbmRpZgogCXsgInN0aWRwIiwgMHgwMiwgSU5TVFJfU19SRCB9LAogCXsgInNjayIsIDB4MDQsIElOU1RSX1NfUkQgfSwKQEAgLTU4OSw3ICs2MzIsNiBAQAogCXsgImNsc3QiLCAweDVkLCBJTlNUUl9SUkVfUlIgfSwKIAl7ICJzcnN0IiwgMHg1ZSwgSU5TVFJfUlJFX1JSIH0sCiAJeyAiY21wc2MiLCAweDYzLCBJTlNUUl9SUkVfUlIgfSwKLQl7ICJjbXBzYyIsIDB4NjMsIElOU1RSX1JSRV9SUiB9LAogCXsgInNpZ2EiLCAweDc0LCBJTlNUUl9TX1JEIH0sCiAJeyAieHNjaCIsIDB4NzYsIElOU1RSX1NfMDAgfSwKIAl7ICJycCIsIDB4NzcsIElOU1RSX1NfUkQgfSwKQEAgLTYzMCw2ICs2NzIsNTcgQEAKIAl7ICJjZ2VyIiwgMHhjOCwgSU5TVFJfUlJGX1UwUkYgfSwKIAl7ICJjZ2RyIiwgMHhjOSwgSU5TVFJfUlJGX1UwUkYgfSwKIAl7ICJjZ3hyIiwgMHhjYSwgSU5TVFJfUlJGX1UwUkYgfSwKKwl7ICJscGRmciIsIDB4NzAsIElOU1RSX1JSRV9GRiB9LAorCXsgImxuZGZyIiwgMHg3MSwgSU5TVFJfUlJFX0ZGIH0sCisJeyAiY3BzZHIiLCAweDcyLCBJTlNUUl9SUkZfRjBGRjIgfSwKKwl7ICJsY2RmciIsIDB4NzMsIElOU1RSX1JSRV9GRiB9LAorCXsgImxkZ3IiLCAweGMxLCBJTlNUUl9SUkVfRlIgfSwKKwl7ICJsZ2RyIiwgMHhjZCwgSU5TVFJfUlJFX1JGIH0sCisJeyAiYWR0ciIsIDB4ZDIsIElOU1RSX1JSUl9GMEZGIH0sCisJeyAiYXh0ciIsIDB4ZGEsIElOU1RSX1JSUl9GMEZGIH0sCisJeyAiY2R0ciIsIDB4ZTQsIElOU1RSX1JSRV9GRiB9LAorCXsgImN4dHIiLCAweGVjLCBJTlNUUl9SUkVfRkYgfSwKKwl7ICJrZHRyIiwgMHhlMCwgSU5TVFJfUlJFX0ZGIH0sCisJeyAia3h0ciIsIDB4ZTgsIElOU1RSX1JSRV9GRiB9LAorCXsgImNlZHRyIiwgMHhmNCwgSU5TVFJfUlJFX0ZGIH0sCisJeyAiY2V4dHIiLCAweGZjLCBJTlNUUl9SUkVfRkYgfSwKKwl7ICJjZGd0ciIsIDB4ZjEsIElOU1RSX1JSRV9GUiB9LAorCXsgImN4Z3RyIiwgMHhmOSwgSU5TVFJfUlJFX0ZSIH0sCisJeyAiY2RzdHIiLCAweGYzLCBJTlNUUl9SUkVfRlIgfSwKKwl7ICJjeHN0ciIsIDB4ZmIsIElOU1RSX1JSRV9GUiB9LAorCXsgImNkdXRyIiwgMHhmMiwgSU5TVFJfUlJFX0ZSIH0sCisJeyAiY3h1dHIiLCAweGZhLCBJTlNUUl9SUkVfRlIgfSwKKwl7ICJjZ2R0ciIsIDB4ZTEsIElOU1RSX1JSRl9VMFJGIH0sCisJeyAiY2d4dHIiLCAweGU5LCBJTlNUUl9SUkZfVTBSRiB9LAorCXsgImNzZHRyIiwgMHhlMywgSU5TVFJfUlJFX1JGIH0sCisJeyAiY3N4dHIiLCAweGViLCBJTlNUUl9SUkVfUkYgfSwKKwl7ICJjdWR0ciIsIDB4ZTIsIElOU1RSX1JSRV9SRiB9LAorCXsgImN1eHRyIiwgMHhlYSwgSU5TVFJfUlJFX1JGIH0sCisJeyAiZGR0ciIsIDB4ZDEsIElOU1RSX1JSUl9GMEZGIH0sCisJeyAiZHh0ciIsIDB4ZDksIElOU1RSX1JSUl9GMEZGIH0sCisJeyAiZWVkdHIiLCAweGU1LCBJTlNUUl9SUkVfUkYgfSwKKwl7ICJlZXh0ciIsIDB4ZWQsIElOU1RSX1JSRV9SRiB9LAorCXsgImVzZHRyIiwgMHhlNywgSU5TVFJfUlJFX1JGIH0sCisJeyAiZXN4dHIiLCAweGVmLCBJTlNUUl9SUkVfUkYgfSwKKwl7ICJpZWR0ciIsIDB4ZjYsIElOU1RSX1JSRl9GMEZSIH0sCisJeyAiaWV4dHIiLCAweGZlLCBJTlNUUl9SUkZfRjBGUiB9LAorCXsgImx0ZHRyIiwgMHhkNiwgSU5TVFJfUlJFX0ZGIH0sCisJeyAibHR4dHIiLCAweGRlLCBJTlNUUl9SUkVfRkYgfSwKKwl7ICJmaWR0ciIsIDB4ZDcsIElOU1RSX1JSRl9VVUZGIH0sCisJeyAiZml4dHIiLCAweGRmLCBJTlNUUl9SUkZfVVVGRiB9LAorCXsgImxkZXRyIiwgMHhkNCwgSU5TVFJfUlJGXzBVRkYgfSwKKwl7ICJseGR0ciIsIDB4ZGMsIElOU1RSX1JSRl8wVUZGIH0sCisJeyAibGVkdHIiLCAweGQ1LCBJTlNUUl9SUkZfVVVGRiB9LAorCXsgImxkeHRyIiwgMHhkZCwgSU5TVFJfUlJGX1VVRkYgfSwKKwl7ICJtZHRyIiwgMHhkMCwgSU5TVFJfUlJSX0YwRkYgfSwKKwl7ICJteHRyIiwgMHhkOCwgSU5TVFJfUlJSX0YwRkYgfSwKKwl7ICJxYWR0ciIsIDB4ZjUsIElOU1RSX1JSRl9GVUZGIH0sCisJeyAicWF4dHIiLCAweGZkLCBJTlNUUl9SUkZfRlVGRiB9LAorCXsgInJyZHRyIiwgMHhmNywgSU5TVFJfUlJGX0ZGUlUgfSwKKwl7ICJycnh0ciIsIDB4ZmYsIElOU1RSX1JSRl9GRlJVIH0sCisJeyAic2Zhc3IiLCAweDg1LCBJTlNUUl9SUkVfUjAgfSwKKwl7ICJzZHRyIiwgMHhkMywgSU5TVFJfUlJSX0YwRkYgfSwKKwl7ICJzeHRyIiwgMHhkYiwgSU5TVFJfUlJSX0YwRkYgfSwKICNlbmRpZgogCXsgImxwZWJyIiwgMHgwMCwgSU5TVFJfUlJFX0ZGIH0sCiAJeyAibG5lYnIiLCAweDAxLCBJTlNUUl9SUkVfRkYgfSwKQEAgLTc4MCw2ICs4NzMsMTQgQEAKIAl7ICJjdTI0IiwgMHhiMSwgSU5TVFJfUlJGX00wUlIgfSwKIAl7ICJjdTQxIiwgMHhiMiwgSU5TVFJfUlJGX00wUlIgfSwKIAl7ICJjdTQyIiwgMHhiMywgSU5TVFJfUlJGX00wUlIgfSwKKwl7ICJjcnQiLCAweDcyLCBJTlNUUl9SUkZfVTBSUiB9LAorCXsgImNncnQiLCAweDYwLCBJTlNUUl9SUkZfVTBSUiB9LAorCXsgImNscnQiLCAweDczLCBJTlNUUl9SUkZfVTBSUiB9LAorCXsgImNsZ3J0IiwgMHg2MSwgSU5TVFJfUlJGX1UwUlIgfSwKKwl7ICJwdGYiLCAweGEyLCBJTlNUUl9SUkVfUjAgfSwKKwl7ICJwZm1mIiwgMHhhZiwgSU5TVFJfUlJFX1JSIH0sCisJeyAidHJ0ZSIsIDB4YmYsIElOU1RSX1JSRl9NMFJSIH0sCisJeyAidHJ0cmUiLCAweGJkLCBJTlNUUl9SUkZfTTBSUiB9LAogI2VuZGlmCiAJeyAia21hYyIsIDB4MWUsIElOU1RSX1JSRV9SUiB9LAogCXsgImxydnIiLCAweDFmLCBJTlNUUl9SUkVfUlIgfSwKQEAgLTgzNSw2ICs5MzYsNDMgQEAKIAl7ICJjZmkiLCAweDBkLCBJTlNUUl9SSUxfUkkgfSwKIAl7ICJjbGdmaSIsIDB4MGUsIElOU1RSX1JJTF9SVSB9LAogCXsgImNsZmkiLCAweDBmLCBJTlNUUl9SSUxfUlUgfSwKKwl7ICJtc2ZpIiwgMHgwMSwgSU5TVFJfUklMX1JJIH0sCisJeyAibXNnZmkiLCAweDAwLCBJTlNUUl9SSUxfUkkgfSwKKyNlbmRpZgorCXsgIiIsIDAsIElOU1RSX0lOVkFMSUQgfQorfTsKKworc3RhdGljIHN0cnVjdCBpbnNuIG9wY29kZV9jNFtdID0geworI2lmZGVmIENPTkZJR182NEJJVAorCXsgImxybCIsIDB4MGQsIElOU1RSX1JJTF9SUCB9LAorCXsgImxncmwiLCAweDA4LCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJsZ2ZybCIsIDB4MGMsIElOU1RSX1JJTF9SUCB9LAorCXsgImxocmwiLCAweDA1LCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJsZ2hybCIsIDB4MDQsIElOU1RSX1JJTF9SUCB9LAorCXsgImxsZ2ZybCIsIDB4MGUsIElOU1RSX1JJTF9SUCB9LAorCXsgImxsaHJsIiwgMHgwMiwgSU5TVFJfUklMX1JQIH0sCisJeyAibGxnaHJsIiwgMHgwNiwgSU5TVFJfUklMX1JQIH0sCisJeyAic3RybCIsIDB4MGYsIElOU1RSX1JJTF9SUCB9LAorCXsgInN0Z3JsIiwgMHgwYiwgSU5TVFJfUklMX1JQIH0sCisJeyAic3RocmwiLCAweDA3LCBJTlNUUl9SSUxfUlAgfSwKKyNlbmRpZgorCXsgIiIsIDAsIElOU1RSX0lOVkFMSUQgfQorfTsKKworc3RhdGljIHN0cnVjdCBpbnNuIG9wY29kZV9jNltdID0geworI2lmZGVmIENPTkZJR182NEJJVAorCXsgImNybCIsIDB4MGQsIElOU1RSX1JJTF9SUCB9LAorCXsgImNncmwiLCAweDA4LCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJjZ2ZybCIsIDB4MGMsIElOU1RSX1JJTF9SUCB9LAorCXsgImNocmwiLCAweDA1LCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJjZ2hybCIsIDB4MDQsIElOU1RSX1JJTF9SUCB9LAorCXsgImNscmwiLCAweDBmLCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJjbGdybCIsIDB4MGEsIElOU1RSX1JJTF9SUCB9LAorCXsgImNsZ2ZybCIsIDB4MGUsIElOU1RSX1JJTF9SUCB9LAorCXsgImNsaHJsIiwgMHgwNywgSU5TVFJfUklMX1JQIH0sCisJeyAiY2xnaHJsIiwgMHgwNiwgSU5TVFJfUklMX1JQIH0sCisJeyAicGZkcmwiLCAweDAyLCBJTlNUUl9SSUxfVVAgfSwKKwl7ICJleHJsIiwgMHgwMCwgSU5TVFJfUklMX1JQIH0sCiAjZW5kaWYKIAl7ICIiLCAwLCBJTlNUUl9JTlZBTElEIH0KIH07CkBAIC04NDIsNiArOTgwLDggQEAKIHN0YXRpYyBzdHJ1Y3QgaW5zbiBvcGNvZGVfYzhbXSA9IHsKICNpZmRlZiBDT05GSUdfNjRCSVQKIAl7ICJtdmNvcyIsIDB4MDAsIElOU1RSX1NTRl9SUkRSRCB9LAorCXsgImVjdGciLCAweDAxLCBJTlNUUl9TU0ZfUlJEUkQgfSwKKwl7ICJjc3N0IiwgMHgwMiwgSU5TVFJfU1NGX1JSRFJEIH0sCiAjZW5kaWYKIAl7ICIiLCAwLCBJTlNUUl9JTlZBTElEIH0KIH07CkBAIC05MTcsNiArMTA1NywxMiBAQAogCXsgImxsZ2giLCAweDkxLCBJTlNUUl9SWFlfUlJSRCB9LAogCXsgImxsYyIsIDB4OTQsIElOU1RSX1JYWV9SUlJEIH0sCiAJeyAibGxoIiwgMHg5NSwgSU5TVFJfUlhZX1JSUkQgfSwKKwl7ICJjZ2giLCAweDM0LCBJTlNUUl9SWFlfUlJSRCB9LAorCXsgImxhZXkiLCAweDc1LCBJTlNUUl9SWFlfUlJSRCB9LAorCXsgImx0Z2YiLCAweDMyLCBJTlNUUl9SWFlfUlJSRCB9LAorCXsgIm1meSIsIDB4NWMsIElOU1RSX1JYWV9SUlJEIH0sCisJeyAibWh5IiwgMHg3YywgSU5TVFJfUlhZX1JSUkQgfSwKKwl7ICJwZmQiLCAweDM2LCBJTlNUUl9SWFlfVVJSRCB9LAogI2VuZGlmCiAJeyAibHJ2IiwgMHgxZSwgSU5TVFJfUlhZX1JSUkQgfSwKIAl7ICJscnZoIiwgMHgxZiwgSU5TVFJfUlhZX1JSUkQgfSwKQEAgLTkzMSw2ICsxMDc3LDE1IEBACiBzdGF0aWMgc3RydWN0IGluc24gb3Bjb2RlX2U1W10gPSB7CiAjaWZkZWYgQ09ORklHXzY0QklUCiAJeyAic3RyYWciLCAweDAyLCBJTlNUUl9TU0VfUkRSRCB9LAorCXsgImNoaHNpIiwgMHg1NCwgSU5TVFJfU0lMX1JESSB9LAorCXsgImNoc2kiLCAweDVjLCBJTlNUUl9TSUxfUkRJIH0sCisJeyAiY2doc2kiLCAweDU4LCBJTlNUUl9TSUxfUkRJIH0sCisJeyAiY2xoaHNpIiwgMHg1NSwgSU5TVFJfU0lMX1JEVSB9LAorCXsgImNsZmhzaSIsIDB4NWQsIElOU1RSX1NJTF9SRFUgfSwKKwl7ICJjbGdoc2kiLCAweDU5LCBJTlNUUl9TSUxfUkRVIH0sCisJeyAibXZoaGkiLCAweDQ0LCBJTlNUUl9TSUxfUkRJIH0sCisJeyAibXZoaSIsIDB4NGMsIElOU1RSX1NJTF9SREkgfSwKKwl7ICJtdmdoaSIsIDB4NDgsIElOU1RSX1NJTF9SREkgfSwKICNlbmRpZgogCXsgImxhc3AiLCAweDAwLCBJTlNUUl9TU0VfUkRSRCB9LAogCXsgInRwcm90IiwgMHgwMSwgSU5TVFJfU1NFX1JEUkQgfSwKQEAgLTk3Nyw2ICsxMTMyLDExIEBACiAJeyAibG15IiwgMHg5OCwgSU5TVFJfUlNZX1JSUkQgfSwKIAl7ICJsYW15IiwgMHg5YSwgSU5TVFJfUlNZX0FBUkQgfSwKIAl7ICJzdGFteSIsIDB4OWIsIElOU1RSX1JTWV9BQVJEIH0sCisJeyAiYXNpIiwgMHg2YSwgSU5TVFJfU0lZX0lSRCB9LAorCXsgImFnc2kiLCAweDdhLCBJTlNUUl9TSVlfSVJEIH0sCisJeyAiYWxzaSIsIDB4NmUsIElOU1RSX1NJWV9JUkQgfSwKKwl7ICJhbGdzaSIsIDB4N2UsIElOU1RSX1NJWV9JUkQgfSwKKwl7ICJlY2FnIiwgMHg0YywgSU5TVFJfUlNZX1JSUkQgfSwKICNlbmRpZgogCXsgInJsbCIsIDB4MWQsIElOU1RSX1JTWV9SUlJEIH0sCiAJeyAibXZjbHUiLCAweDhlLCBJTlNUUl9SU1lfUlJSRCB9LApAQCAtOTg4LDYgKzExNDgsMzAgQEAKICNpZmRlZiBDT05GSUdfNjRCSVQKIAl7ICJicnhoZyIsIDB4NDQsIElOU1RSX1JJRV9SUlAgfSwKIAl7ICJicnhsZyIsIDB4NDUsIElOU1RSX1JJRV9SUlAgfSwKKwl7ICJjcmIiLCAweGY2LCBJTlNUUl9SUlNfUlJSRFUgfSwKKwl7ICJjZ3JiIiwgMHhlNCwgSU5TVFJfUlJTX1JSUkRVIH0sCisJeyAiY3JqIiwgMHg3NiwgSU5TVFJfUklFX1JSUFUgfSwKKwl7ICJjZ3JqIiwgMHg2NCwgSU5TVFJfUklFX1JSUFUgfSwKKwl7ICJjaWIiLCAweGZlLCBJTlNUUl9SSVNfUlVSREkgfSwKKwl7ICJjZ2liIiwgMHhmYywgSU5TVFJfUklTX1JVUkRJIH0sCisJeyAiY2lqIiwgMHg3ZSwgSU5TVFJfUklFX1JVUEkgfSwKKwl7ICJjZ2lqIiwgMHg3YywgSU5TVFJfUklFX1JVUEkgfSwKKwl7ICJjaXQiLCAweDcyLCBJTlNUUl9SSUVfUjBJVSB9LAorCXsgImNnaXQiLCAweDcwLCBJTlNUUl9SSUVfUjBJVSB9LAorCXsgImNscmIiLCAweGY3LCBJTlNUUl9SUlNfUlJSRFUgfSwKKwl7ICJjbGdyYiIsIDB4ZTUsIElOU1RSX1JSU19SUlJEVSB9LAorCXsgImNscmoiLCAweDc3LCBJTlNUUl9SSUVfUlJQVSB9LAorCXsgImNsZ3JqIiwgMHg2NSwgSU5TVFJfUklFX1JSUFUgfSwKKwl7ICJjbGliIiwgMHhmZiwgSU5TVFJfUklTX1JVUkRVIH0sCisJeyAiY2xnaWIiLCAweGZkLCBJTlNUUl9SSVNfUlVSRFUgfSwKKwl7ICJjbGlqIiwgMHg3ZiwgSU5TVFJfUklFX1JVUFUgfSwKKwl7ICJjbGdpaiIsIDB4N2QsIElOU1RSX1JJRV9SVVBVIH0sCisJeyAiY2xmaXQiLCAweDczLCBJTlNUUl9SSUVfUjBVVSB9LAorCXsgImNsZ2l0IiwgMHg3MSwgSU5TVFJfUklFX1IwVVUgfSwKKwl7ICJybnNiZyIsIDB4NTQsIElOU1RSX1JJRV9SUlVVVSB9LAorCXsgInJ4c2JnIiwgMHg1NywgSU5TVFJfUklFX1JSVVVVIH0sCisJeyAicm9zYmciLCAweDU2LCBJTlNUUl9SSUVfUlJVVVUgfSwKKwl7ICJyaXNiZyIsIDB4NTUsIElOU1RSX1JJRV9SUlVVVSB9LAogI2VuZGlmCiAJeyAiIiwgMCwgSU5TVFJfSU5WQUxJRCB9CiB9OwpAQCAtMTAwNCw2ICsxMTg4LDE2IEBACiAJeyAibGR5IiwgMHg2NSwgSU5TVFJfUlhZX0ZSUkQgfSwKIAl7ICJzdGV5IiwgMHg2NiwgSU5TVFJfUlhZX0ZSUkQgfSwKIAl7ICJzdGR5IiwgMHg2NywgSU5TVFJfUlhZX0ZSUkQgfSwKKwl7ICJzbGR0IiwgMHg0MCwgSU5TVFJfUlhGX0ZSUkRGIH0sCisJeyAic2x4dCIsIDB4NDgsIElOU1RSX1JYRl9GUlJERiB9LAorCXsgInNyZHQiLCAweDQxLCBJTlNUUl9SWEZfRlJSREYgfSwKKwl7ICJzcnh0IiwgMHg0OSwgSU5TVFJfUlhGX0ZSUkRGIH0sCisJeyAidGRjZXQiLCAweDUwLCBJTlNUUl9SWEVfRlJSRCB9LAorCXsgInRkY2R0IiwgMHg1NCwgSU5TVFJfUlhFX0ZSUkQgfSwKKwl7ICJ0ZGN4dCIsIDB4NTgsIElOU1RSX1JYRV9GUlJEIH0sCisJeyAidGRnZXQiLCAweDUxLCBJTlNUUl9SWEVfRlJSRCB9LAorCXsgInRkZ2R0IiwgMHg1NSwgSU5TVFJfUlhFX0ZSUkQgfSwKKwl7ICJ0ZGd4dCIsIDB4NTksIElOU1RSX1JYRV9GUlJEIH0sCiAjZW5kaWYKIAl7ICJsZGViIiwgMHgwNCwgSU5TVFJfUlhFX0ZSUkQgfSwKIAl7ICJseGRiIiwgMHgwNSwgSU5TVFJfUlhFX0ZSUkQgfSwKQEAgLTEwMzcsNiArMTIzMSw3IEBACiAJeyAibWFlIiwgMHgyZSwgSU5TVFJfUlhGX0ZSUkRGIH0sCiAJeyAibXNlIiwgMHgyZiwgSU5TVFJfUlhGX0ZSUkRGIH0sCiAJeyAic3FlIiwgMHgzNCwgSU5TVFJfUlhFX0ZSUkQgfSwKKwl7ICJzcWQiLCAweDM1LCBJTlNUUl9SWEVfRlJSRCB9LAogCXsgIm1lZSIsIDB4MzcsIElOU1RSX1JYRV9GUlJEIH0sCiAJeyAibWFkIiwgMHgzZSwgSU5TVFJfUlhGX0ZSUkRGIH0sCiAJeyAibXNkIiwgMHgzZiwgSU5TVFJfUlhGX0ZSUkRGIH0sCkBAIC0xMTE3LDYgKzEzMTIsMTIgQEAKIAljYXNlIDB4YzI6CiAJCXRhYmxlID0gb3Bjb2RlX2MyOwogCQlicmVhazsKKwljYXNlIDB4YzQ6CisJCXRhYmxlID0gb3Bjb2RlX2M0OworCQlicmVhazsKKwljYXNlIDB4YzY6CisJCXRhYmxlID0gb3Bjb2RlX2M2OworCQlicmVhazsKIAljYXNlIDB4Yzg6CiAJCXRhYmxlID0gb3Bjb2RlX2M4OwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYyBiL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYwppbmRleCBlNDllOWUwLi4zMWQ2MThhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCkBAIC0yMTQsMTAgKzIxNCwxMyBAQAogCiBzdGF0aWMgbm9pbmxpbmUgX19pbml0IHZvaWQgZGV0ZWN0X21hY2hpbmVfdHlwZSh2b2lkKQogewotCS8qIE5vIFZNIGluZm9ybWF0aW9uPyBMb29rcyBsaWtlIExQQVIgKi8KLQlpZiAoc3RzaSgmdm1tcywgMywgMiwgMikgPT0gLUVOT1NZUykKKwkvKiBDaGVjayBjdXJyZW50LWNvbmZpZ3VyYXRpb24tbGV2ZWwgKi8KKwlpZiAoKHN0c2koTlVMTCwgMCwgMCwgMCkgPj4gMjgpIDw9IDIpIHsKKwkJUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX0xQQVI7CiAJCXJldHVybjsKLQlpZiAoIXZtbXMuY291bnQpCisJfQorCS8qIEdldCB2aXJ0dWFsLW1hY2hpbmUgY3B1IGluZm9ybWF0aW9uLiAqLworCWlmIChzdHNpKCZ2bW1zLCAzLCAyLCAyKSA9PSAtRU5PU1lTIHx8ICF2bW1zLmNvdW50KQogCQlyZXR1cm47CiAKIAkvKiBSdW5uaW5nIHVuZGVyIEtWTT8gSWYgbm90IHdlIGFzc3VtZSB6L1ZNICovCkBAIC00MDIsOCArNDA1LDE5IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbW1hbmRfbGluZSh2b2lkKQogeworCWludCBpOworCisJLyogY29udmVydCBhcmNoIGNvbW1hbmQgbGluZSB0byBhc2NpaSAqLworCWZvciAoaSA9IDA7IGkgPCBBUkNIX0NPTU1BTkRfTElORV9TSVpFOyBpKyspCisJCWlmIChDT01NQU5EX0xJTkVbaV0gJiAweDgwKQorCQkJYnJlYWs7CisJaWYgKGkgPCBBUkNIX0NPTU1BTkRfTElORV9TSVpFKQorCQlFQkNBU0MoQ09NTUFORF9MSU5FLCBBUkNIX0NPTU1BTkRfTElORV9TSVpFKTsKKwlDT01NQU5EX0xJTkVbQVJDSF9DT01NQU5EX0xJTkVfU0laRS0xXSA9IDA7CisKIAkvKiBjb3B5IGFyY2ggY29tbWFuZCBsaW5lICovCi0Jc3RybGNweShib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FLCBBUkNIX0NPTU1BTkRfTElORV9TSVpFKTsKKwlzdHJsY3B5KGJvb3RfY29tbWFuZF9saW5lLCBzdHJzdHJpcChDT01NQU5EX0xJTkUpLAorCQlBUkNIX0NPTU1BTkRfTElORV9TSVpFKTsKIAogCS8qIGFwcGVuZCBJUEwgUEFSTSBkYXRhIHRvIHRoZSBib290IGNvbW1hbmQgbGluZSAqLwogCWlmIChNQUNISU5FX0lTX1ZNKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCmluZGV4IGU4ZWYyMWMuLjQzNDhmOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgotI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwppbmRleCBmMzM2NThmLi4yOWZkMGYxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwpAQCAtOSwxMSArOSw5IEBACiAgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zeXMuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgotI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMKaW5kZXggNWE4MmJjNi4uNmE4M2QwNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDx0cmFjZS9zeXNjYWxsLmg+Ci0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCkBAIC0yMDAsMTMgKzIwMCwzIEBACiAJcmV0dXJuIHBhcmVudDsKIH0KICNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovCi0KLSNpZmRlZiBDT05GSUdfRlRSQUNFX1NZU0NBTExTCi0KLWV4dGVybiB1bnNpZ25lZCBpbnQgc3lzX2NhbGxfdGFibGVbXTsKLQotdW5zaWduZWQgbG9uZyBfX2luaXQgYXJjaF9zeXNjYWxsX2FkZHIoaW50IG5yKQotewotCXJldHVybiAodW5zaWduZWQgbG9uZylzeXNfY2FsbF90YWJsZVtucl07Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKaW5kZXggYzUyYjRmNy4uY2E0YTYyYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMDkKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OSwyMDEwCiAgKgogICogICAgQXV0aG9yKHMpOiBIYXJ0bXV0IFBlbm5lciA8aHBAZGUuaWJtLmNvbT4KICAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgpAQCAtMjIsMTIgKzIyLDkgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vY3B1Lmg+CiAKICNpZmRlZiBDT05GSUdfNjRCSVQKICNkZWZpbmUgQVJDSF9PRkZTRVQJNApAQCAtMjg4LDE5ICsyODUsNyBAQAogCWJ6CS5MYWdhaW4xCQkjIHNraXAgZGF0ZXNldCB0cmFpbGVyCiAJbGEJJXI1LDAoJXI0LCVyMikKIAlscgklcjMsJXIyCi0uTGlkZWJjOgotCXRtCTAoJXI1KSwweDgwCQkjIGhpZ2ggb3JkZXIgYml0IHNldCA/Ci0JYm8JLkxkb2N2CQkJIyAgeWVzIC0+IGNvbnZlcnQgZnJvbSBFQkNESUMKLQlhaGkJJXI1LC0xCi0JYmN0CSVyMywuTGlkZWJjCi0JYgkuTG5vY3YKLS5MZG9jdjoKLQlsCSVyMywuTGN2dGFiCi0JdHIJMCgyNTYsJXI0KSwwKCVyMykJIyBjb252ZXJ0IHBhcmFtZXRlcnMgdG8gYXNjaWkKLQl0cgkyNTYoMjU2LCVyNCksMCglcjMpCi0JdHIJNTEyKDI1NiwlcjQpLDAoJXIzKQotCXRyCTc2OCgxMjIsJXI0KSwwKCVyMykKLS5Mbm9jdjogbGEJJXIzLENPTU1BTkRfTElORS1QQVJNQVJFQSglcjEyKSAjIGxvYWQgYWRyLiBvZiBjb21tYW5kIGxpbmUKKwlsYQklcjMsQ09NTUFORF9MSU5FLVBBUk1BUkVBKCVyMTIpICMgbG9hZCBhZHIuIG9mIGNvbW1hbmQgbGluZQogCW12YwkwKDI1NiwlcjMpLDAoJXI0KQogCW12YwkyNTYoMjU2LCVyMyksMjU2KCVyNCkKIAltdmMJNTEyKDI1NiwlcjMpLDUxMiglcjQpCkBAIC0zODQsNyArMzY5LDYgQEAKIC5MaW5pdHJkOi5sb25nIF9lbmQgKyAweDQwMDAwMAkJIyBkZWZhdWx0IGFkZHJlc3Mgb2YgaW5pdHJkCiAuTHBhcm06CS5sb25nICBQQVJNQVJFQQogLkxzdGFydHVwOiAubG9uZyBzdGFydHVwCi0uTGN2dGFiOi5sb25nCV9lYmNhc2MgCQkjIGViY2RpYyB0byBhc2NpaSB0YWJsZQogLkxyZXNldDouYnl0ZQkweGMzLDB4YzgsMHhjMSwweGQ1LDB4YzcsMHhjNSwweDQwLDB4ZDksMHhjNCwweGQ5LDB4NDAKIAkuYnl0ZQkweGMxLDB4ZDMsMHhkMywweDQwLDB4ZDIsMHhjNSwweGM1LDB4ZDcsMHg0MCwweGQ1LDB4ZDYKIAkuYnl0ZQkweGM4LDB4ZDYsMHhkMywweGM0CSMgImNoYW5nZSByZHIgYWxsIGtlZXAgbm9ob2xkIgpAQCAtNDE3LDEzICs0MDEsMTAgQEAKIC5zazh4ODoKIAltdmMJMCgyNDAsJXI4KSwwKCVyOSkJIyBjb3B5IGlwbHBhcm1zIGludG8gYnVmZmVyCiAuZ290cjoKLQlsCSVyMTAsLnRibAkJIyBFQkNESUMgdG8gQVNDSUkgdGFibGUKLQl0cgkwKDI0MCwlcjgpLDAoJXIxMCkKIAlzbHIJJXIwLCVyMAogCXN0CSVyMCxJTklUUkRfU0laRStBUkNIX09GRlNFVC1QQVJNQVJFQSglcjExKQogCXN0CSVyMCxJTklUUkRfU1RBUlQrQVJDSF9PRkZTRVQtUEFSTUFSRUEoJXIxMSkKIAlqCXN0YXJ0dXAgCQkjIGNvbnRpbnVlIHdpdGggc3RhcnR1cAotLnRibDoJLmxvbmcJX2ViY2FzYwkJCSMgdHJhbnNsYXRlIHRhYmxlCiAuY21kOgkubG9uZwlDT01NQU5EX0xJTkUJCSMgYWRkcmVzcyBvZiBjb21tYW5kIGxpbmUgYnVmZmVyCiAucGFybToJLmxvbmcJUEFSTUFSRUEKIC5sb3djYXNlOgpAQCAtNDY3LDE2ICs0NDgsMTUgQEAKICMgb3IgbGlubG9hZCBvciBTQUxJUEwKICMKIAkub3JnCTB4MTAwMDAKLXN0YXJ0dXA6YmFzcgklcjEzLDAJCQkjIGdldCBiYXNlCisJLmdsb2JsCXN0YXJ0dXAKK3N0YXJ0dXA6CisJYmFzcgklcjEzLDAJCQkjIGdldCBiYXNlCiAuTFBHMDoKIAl4YwkweDIwMCgyNTYpLDB4MjAwCSMgcGFydGlhbGx5IGNsZWFyIGxvd2NvcmUKIAl4YwkweDMwMCgyNTYpLDB4MzAwCi0JbAklcjEsNWYtLkxQRzAoJXIxMykKLQlzdGNrCTAoJXIxKQotCXNwdAk2Zi0uTFBHMCglcjEzKQotCW12YwlfX0xDX0xBU1RfVVBEQVRFX0NMT0NLKDgpLDAoJXIxKQotCW12YwlfX0xDX0xBU1RfVVBEQVRFX1RJTUVSKDgpLDZmLS5MUEcwKCVyMTMpCi0JbXZjCV9fTENfRVhJVF9USU1FUig4KSw1Zi0uTFBHMCglcjEzKQorCXN0Y2sJX19MQ19MQVNUX1VQREFURV9DTE9DSworCXNwdAk1Zi0uTFBHMCglcjEzKQorCW12YwlfX0xDX0xBU1RfVVBEQVRFX1RJTUVSKDgpLDVmLS5MUEcwKCVyMTMpCiAjaWZuZGVmIENPTkZJR19NQVJDSF9HNQogCSMgY2hlY2sgY2FwYWJpbGl0aWVzIGFnYWluc3QgTUFSQ0hfe0c1LFo5MDAsWjk5MCxaOV8xMDksWjEwfQogCXhjCV9fTENfU1RGTF9GQUNfTElTVCg4KSxfX0xDX1NURkxfRkFDX0xJU1QKQEAgLTQ5NCw3ICs0NzQsNiBAQAogCWNsCSVyMCwyZisxMi0uTFBHMCglcjEzKQogCWplCTNmCiAxOglsCSVyMTUsLkxzdGFjay0uTFBHMCglcjEzKQotCWFoaQklcjE1LDE8PChQQUdFX1NISUZUK1RIUkVBRF9PUkRFUikgIyBpbml0X3Rhc2tfdW5pb24rVEhSRUFEX1NJWkUKIAlhaGkJJXIxNSwtOTYKIAlsYQklcjIsLkxhbHNfc3RyaW5nLS5MUEcwKCVyMTMpCiAJbAklcjMsLkxzY2xwX3ByaW50LS5MUEcwKCVyMTMpCkBAIC01MDUsNyArNDg0LDcgQEAKIC5Mc2NscF9wcmludDoKIAkubG9uZwlfc2NscF9wcmludF9lYXJseQogLkxzdGFjazoKLQkubG9uZwlpbml0X3RocmVhZF91bmlvbgorCS5sb25nCTB4ODAwMCArICgxPDwoUEFHRV9TSElGVCtUSFJFQURfT1JERVIpKQogCS5hbGlnbiAxNgogMjoJLmxvbmcJMHgwMDBhMDAwMCwweDhiYWRjY2NjCiAjaWYgZGVmaW5lZChDT05GSUdfNjRCSVQpCkBAIC01MzIsMTMgKzUxMSwyMiBAQAogMzoKICNlbmRpZgogCisjaWZkZWYgQ09ORklHXzY0QklUCisJbXZpCV9fTENfQVJfTU9ERV9JRCwxCSMgc2V0IGVzYW1lIGZsYWcKKwlzbHIJJXIwLCVyMCAJCSMgc2V0IGNwdWlkIHRvIHplcm8KKwlsaGkJJXIxLDIJCQkjIG1vZGUgMiA9IGVzYW1lIChkdW1wKQorCXNpZ3AJJXIxLCVyMCwweDEyCQkjIHN3aXRjaCB0byBlc2FtZSBtb2RlCisJc2FtNjQJCQkJIyBzd2l0Y2ggdG8gNjQgYml0IG1vZGUKKwlqZwlzdGFydHVwX2NvbnRpbnVlCisjZWxzZQorCW12aQlfX0xDX0FSX01PREVfSUQsMAkjIHNldCBFU0EgZmxhZyAobW9kZSAwKQogCWwJJXIxMyw0Zi0uTFBHMCglcjEzKQogCWIJMCglcjEzKQotCS5hbGlnbgk0Ci00OgkubG9uZwlzdGFydHVwX2NvbnRpbnVlCi01OgkubG9uZwlzY2hlZF9jbG9ja19iYXNlX2NjCiAJLmFsaWduCTgKLTY6CS5sb25nCTB4N2ZmZmZmZmYsMHhmZmZmZmZmZgorNDoJLmxvbmcJc3RhcnR1cF9jb250aW51ZQorI2VuZGlmCisJLmFsaWduCTgKKzU6CS5sb25nCTB4N2ZmZmZmZmYsMHhmZmZmZmZmZgogCiAjCiAjIHBhcmFtcyBhdCAxMDQwMCAoc2V0dXAuaCkKQEAgLTU1Miw4ICs1NDAsNCBAQAogCS5ieXRlCSJyb290PS9kZXYvcmFtMCBybyIKIAkuYnl0ZQkwCiAKLSNpZmRlZiBDT05GSUdfNjRCSVQKLSNpbmNsdWRlICJoZWFkNjQuUyIKLSNlbHNlCi0jaW5jbHVkZSAiaGVhZDMxLlMiCi0jZW5kaWYKKwkub3JnCTB4MTEwMDAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCmluZGV4IDYwMmI1MDguLjFiYmNjNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBhcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCiAgKgotICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycC4gMjAwNSwyMDA2CisgKiBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDA1LDIwMTAKICAqCiAgKiAgIEF1dGhvcihzKToJSGFydG11dCBQZW5uZXIgPGhwQGRlLmlibS5jb20+CiAgKgkJTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgpAQCAtMTAsMTMgKzEwLDE5IEBACiAgKgogICovCiAKLQkub3JnCTB4MTEwMDAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAorX19IRUFECisJLmdsb2JsCXN0YXJ0dXBfY29udGludWUKIHN0YXJ0dXBfY29udGludWU6CiAJYmFzcgklcjEzLDAJCQkjIGdldCBiYXNlCiAuTFBHMToKIAotCW12aQlfX0xDX0FSX01PREVfSUQsMAkjIHNldCBFU0EgZmxhZyAobW9kZSAwKQorCWwJJXIxLC5MYmFzZV9jYy0uTFBHMSglcjEzKQorCW12YwkwKDgsJXIxKSxfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCiAJbGN0bAklYzAsJWMxNSwuTGN0bC0uTFBHMSglcjEzKSAjIGxvYWQgY29udHJvbCByZWdpc3RlcnMKIAlsCSVyMTIsLkxwYXJtYWRkci0uTFBHMSglcjEzKSAjIHBvaW50ZXIgdG8gcGFyYW1ldGVyIGFyZWEKIAkJCQkJIyBtb3ZlIElQTCBkZXZpY2UgdG8gbG93Y29yZQpAQCAtNjksMTAgKzc1LDEyIEBACiAuTGR1YWxkOi5yZXB0CTgKIAkubG9uZwkweDgwMDAwMDAwLDAsMCwwCSMgaW52YWxpZCBhY2Nlc3MtbGlzdCBlbnRyaWVzCiAJLmVuZHIKKy5MYmFzZV9jYzoKKwkubG9uZwlzY2hlZF9jbG9ja19iYXNlX2NjCiAKLQkub3JnCTB4MTIwMDAKIAkuZ2xvYmwJX2VoZWFkCiBfZWhlYWQ6CisKICNpZmRlZiBDT05GSUdfU0hBUkVEX0tFUk5FTAogCS5vcmcJMHgxMDAwMDAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKaW5kZXggZDk4NGEyYS4uMzk1ODBlNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGFyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAxOTk5LDIwMDYKKyAqIENvcHlyaWdodCAoQykgSUJNIENvcnAuIDE5OTksMjAxMAogICoKICAqICAgQXV0aG9yKHMpOglIYXJ0bXV0IFBlbm5lciA8aHBAZGUuaWJtLmNvbT4KICAqCQlNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CkBAIC0xMCw4MCArMTAsMTcgQEAKICAqCiAgKi8KIAotCS5vcmcJMHgxMTAwMAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCitfX0hFQUQKKwkuZ2xvYmwJc3RhcnR1cF9jb250aW51ZQogc3RhcnR1cF9jb250aW51ZToKLQliYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKLS5MUEcxOglzbGwJJXIxMywxCQkJIyByZW1vdmUgaGlnaCBvcmRlciBiaXQKLQlzcmwJJXIxMywxCi0KLSNpZmRlZiBDT05GSUdfWkZDUERVTVAKLQotCSMgY2hlY2sgaWYgd2UgaGF2ZSBiZWVuIGlwbGVkIHVzaW5nIHpmY3AgZHVtcDoKLQotCXRtCTB4YjksMHgwMQkJIyB0ZXN0IGlmIHN1YmNoYW5uZWwgaXMgZW5hYmxlZAotCWpubwkubm9kdW1wCQkJIyBzdWJjaGFubmVsIGRpc2FibGVkCi0JbAklcjEsMHhiOAotCWxhCSVyNSwuTGlwbF9zY2hpYi0uTFBHMSglcjEzKQotCXN0c2NoCTAoJXI1KQkJCSMgZ2V0IHNjaGliIG9mIHN1YmNoYW5uZWwKLQlqbmUJLm5vZHVtcAkJCSMgc2NoaWIgbm90IGF2YWlsYWJsZQotCXRtCTUoJXI1KSwweDAxCQkjIGRldm5vIHZhbGlkPwotCWpubwkubm9kdW1wCi0JdG0JNCglcjUpLDB4ODAJCSMgcWRpbyBjYXBhYmxlIGRldmljZT8KLQlqbm8JLm5vZHVtcAotCWwJJXIyLDIwKCVyMCkJCSMgYWRkcmVzcyBvZiBpcGwgcGFyYW1ldGVyIGJsb2NrCi0JbGhpCSVyMywwCi0JaWMJJXIzLDB4MTQ4KCVyMikJCSMgZ2V0IG9wdCBmaWVsZAotCWNoaQklcjMsMHgyMAkJIyBsb2FkIHdpdGggZHVtcD8KLQlqbmUJLm5vZHVtcAotCi0JIyBzdG9yZSBhbGwgcHJlZml4IHJlZ2lzdGVycyBpbiBjYXNlIG9mIGxvYWQgd2l0aCBkdW1wOgotCi0JbGEJJXI3LDAJCQkjIGJhc2UgcmVnaXN0ZXIgZm9yIDAgcGFnZQotCWxhCSVyOCwwCQkJIyBmaXJzdCBjcHUKLQlsCSVyMTEsLkxwcmVmX2Fycl9wdHItLkxQRzEoJXIxMykJIyBhZGRyZXNzIG9mIHByZWZpeCBhcnJheQotCWFoaQklcjExLDQJCQkjIHNraXAgYm9vdCBjcHUKLQlscgklcjEyLCVyMTEKLQlhaGkJJXIxMiwoQ09ORklHX05SX0NQVVMqNCkJIyBlbmQgb2YgcHJlZml4IGFycmF5Ci0Jc3RhcAkuTGN1cnJlbnRfY3B1KzItLkxQRzEoJXIxMykJIyBzdG9yZSBjdXJyZW50IGNwdSBhZGRyCi0xOgotCWNsCSVyOCwuTGN1cnJlbnRfY3B1LS5MUEcxKCVyMTMpCSMgaXMgaXBsIGNwdSA/Ci0JamUJNGYJCQkJIyBpZiB5ZXMgZ2V0IG5leHQgY3B1Ci0yOgotCWxyCSVyOSwlcjcKLQlzaWdwCSVyOSwlcjgsMHg5CQkjIHN0b3AgJiBzdG9yZSBzdGF0dXMgb2YgY3B1Ci0JYnJjCTgsM2YJCQkjIGFjY2VwdGVkCi0JYnJjCTQsNGYJCQkjIHN0YXR1cyBzdG9yZWQ6IG5leHQgY3B1Ci0JYnJjCTIsMmIJCQkjIGJ1c3k6IAkgdHJ5IGFnYWluCi0JYnJjCTEsNGYJCQkjIG5vdCBvcDoJIG5leHQgY3B1Ci0zOgotCW12YwkwKDQsJXIxMSksMjY0KCVyNykJIyBjb3B5IHByZWZpeCByZWdpc3RlciB0byBwcmVmaXggYXJyYXkKLQlhaGkJJXIxMSw0CQkJIyBuZXh0IGVsZW1lbnQgaW4gcHJlZml4IGFycmF5Ci0JY2xyCSVyMTEsJXIxMgotCWplCTVmCQkJIyBubyBtb3JlIHNwYWNlIGluIHByZWZpeCBhcnJheQotNDoKLQlhaGkJJXI4LDEJCQkjIG5leHQgY3B1IChyOCArPSAxKQotCWNoaQklcjgsTUFYX0NQVV9BRERSRVNTCSMgaXMgbGFzdCBwb3NzaWJsZSBjcHUgPwotCWpsZQkxYgkJCSMganVtcCBpZiBub3QgbGFzdCBjcHUKLTU6Ci0JbGhpCSVyMSwyCQkJIyBtb2RlIDIgPSBlc2FtZSAoZHVtcCkKLQlqCTZmCi0JLmFsaWduIDQKLS5MaXBsX3NjaGliOgotCS5yZXB0IDEzCi0JLmxvbmcgMAotCS5lbmRyCi0ubm9kdW1wOgotCWxoaQklcjEsMQkJCSMgbW9kZSAxID0gZXNhbWUgKG5vcm1hbCBpcGwpCi02OgotI2Vsc2UKLQlsaGkJJXIxLDEJCQkjIG1vZGUgMSA9IGVzYW1lIChub3JtYWwgaXBsKQotI2VuZGlmIC8qIENPTkZJR19aRkNQRFVNUCAqLwotCW12aQlfX0xDX0FSX01PREVfSUQsMQkjIHNldCBlc2FtZSBmbGFnCi0Jc2xyCSVyMCwlcjAgCQkjIHNldCBjcHVpZCB0byB6ZXJvCi0Jc2lncAklcjEsJXIwLDB4MTIJCSMgc3dpdGNoIHRvIGVzYW1lIG1vZGUKLQlzYW02NAkJCQkjIHN3aXRjaCB0byA2NCBiaXQgbW9kZQotCWxsZ2ZyCSVyMTMsJXIxMwkJIyBjbGVhciBoaWdoLW9yZGVyIGhhbGYgb2YgYmFzZSByZWcKKwlsYXJsCSVyMSxzY2hlZF9jbG9ja19iYXNlX2NjCisJbXZjCTAoOCwlcjEpLF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sKKwlsYXJsCSVyMTMsLkxQRzEJCSMgZ2V0IGJhc2UKIAlsbWgJJXIwLCVyMTUsLkx6ZXJvNjQtLkxQRzEoJXIxMykJIyBjbGVhciBoaWdoLW9yZGVyIGhhbGYKIAlsY3RsZwklYzAsJWMxNSwuTGN0bC0uTFBHMSglcjEzKQkjIGxvYWQgY29udHJvbCByZWdpc3RlcnMKIAlsZwklcjEyLC5McGFybWFkZHItLkxQRzEoJXIxMykJIyBwb2ludGVyIHRvIHBhcmFtZXRlciBhcmVhCkBAIC0xMDgsNiArNDUsNyBAQAogCWxwc3dlCS5MZW50cnktLkxQRzEoMTMpCSMganVtcCB0byBfc3RleHQgaW4gcHJpbWFyeS1zcGFjZSwKIAkJCQkJIyB2aXJ0dWFsIGFuZCBuZXZlciByZXR1cm4gLi4uCiAJLmFsaWduCTE2CisuTFBHMToKIC5MZW50cnk6LnF1YWQJMHgwMDAwMDAwMTgwMDAwMDAwLF9zdGV4dAogLkxjdGw6CS5xdWFkCTB4MDQzNTAwMDIJCSMgY3IwOiB2YXJpb3VzIHRoaW5ncwogCS5xdWFkCTAJCQkjIGNyMTogcHJpbWFyeSBzcGFjZSBzZWdtZW50IHRhYmxlCkBAIC0xMzAsMTIgKzY4LDYgQEAKIC5Mc2NhbjJnOi5xdWFkCTB4ODAwMDAwMDAgKyAweDIwMDAwIC0gOAkjIDJHQiArIDEyOEsgLSA4CiAuTG5vcDoJLmxvbmcJMHgwNzAwMDcwMAogLkx6ZXJvNjQ6LmZpbGwJMTYsNCwweDAKLSNpZmRlZiBDT05GSUdfWkZDUERVTVAKLS5MY3VycmVudF9jcHU6Ci0JLmxvbmcgMHgwCi0uTHByZWZfYXJyX3B0cjoKLQkubG9uZyB6ZmNwZHVtcF9wcmVmaXhfYXJyYXkKLSNlbmRpZiAvKiBDT05GSUdfWkZDUERVTVAgKi8KIC5McGFybWFkZHI6CiAJLnF1YWQJUEFSTUFSRUEKIAkuYWxpZ24JNjQKQEAgLTE0Niw5ICs3OCw5IEBACiAJLmxvbmcJMHg4MDAwMDAwMCwwLDAsMAkjIGludmFsaWQgYWNjZXNzLWxpc3QgZW50cmllcwogCS5lbmRyCiAKLQkub3JnCTB4MTIwMDAKIAkuZ2xvYmwJX2VoZWFkCiBfZWhlYWQ6CisKICNpZmRlZiBDT05GSUdfU0hBUkVEX0tFUk5FTAogCS5vcmcJMHgxMDAwMDAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKaW5kZXggNGQ3MzI5Ni4uN2VlZGJiYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCkBAIC01NTMsNyArNTUzLDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIGlwbF9ydW4oc3RydWN0IHNodXRkb3duX3RyaWdnZXIgKnRyaWdnZXIpCitzdGF0aWMgdm9pZCBfX2lwbF9ydW4odm9pZCAqdW51c2VkKQogewogCWRpYWczMDgoRElBRzMwOF9JUEwsIE5VTEwpOwogCWlmIChNQUNISU5FX0lTX1ZNKQpAQCAtNTYyLDYgKzU2MiwxMSBAQAogCQlyZWlwbF9jY3dfZGV2KCZpcGxfaW5mby5kYXRhLmNjdy5kZXZfaWQpOwogfQogCitzdGF0aWMgdm9pZCBpcGxfcnVuKHN0cnVjdCBzaHV0ZG93bl90cmlnZ2VyICp0cmlnZ2VyKQoreworCXNtcF9zd2l0Y2hfdG9faXBsX2NwdShfX2lwbF9ydW4sIE5VTEwpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBpcGxfaW5pdCh2b2lkKQogewogCWludCByYzsKQEAgLTEwMzksNyArMTA0NCw3IEBACiAJCXNwcmludGYoZHN0ICsgcG9zLCAiIFBBUk0gJXMiLCB2bXBhcm0pOwogfQogCi1zdGF0aWMgdm9pZCByZWlwbF9ydW4oc3RydWN0IHNodXRkb3duX3RyaWdnZXIgKnRyaWdnZXIpCitzdGF0aWMgdm9pZCBfX3JlaXBsX3J1bih2b2lkICp1bnVzZWQpCiB7CiAJc3RydWN0IGNjd19kZXZfaWQgZGV2aWQ7CiAJc3RhdGljIGNoYXIgYnVmWzEyOF07CkBAIC0xMDg3LDYgKzEwOTIsMTEgQEAKIAlkaXNhYmxlZF93YWl0KCh1bnNpZ25lZCBsb25nKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogCitzdGF0aWMgdm9pZCByZWlwbF9ydW4oc3RydWN0IHNodXRkb3duX3RyaWdnZXIgKnRyaWdnZXIpCit7CisJc21wX3N3aXRjaF90b19pcGxfY3B1KF9fcmVpcGxfcnVuLCBOVUxMKTsKK30KKwogc3RhdGljIHZvaWQgcmVpcGxfYmxvY2tfY2N3X2luaXQoc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKmlwYikKIHsKIAlpcGItPmhkci5sZW4gPSBJUExfUEFSTV9CTEtfQ0NXX0xFTjsKQEAgLTEzNjksMjAgKzEzNzksMTggQEAKIAogc3RhdGljIHN0cnVjdCBrc2V0ICpkdW1wX2tzZXQ7CiAKLXN0YXRpYyB2b2lkIGR1bXBfcnVuKHN0cnVjdCBzaHV0ZG93bl90cmlnZ2VyICp0cmlnZ2VyKQorc3RhdGljIHZvaWQgX19kdW1wX3J1bih2b2lkICp1bnVzZWQpCiB7CiAJc3RydWN0IGNjd19kZXZfaWQgZGV2aWQ7CiAJc3RhdGljIGNoYXIgYnVmWzEwMF07CiAKIAlzd2l0Y2ggKGR1bXBfbWV0aG9kKSB7CiAJY2FzZSBEVU1QX01FVEhPRF9DQ1dfQ0lPOgotCQlzbXBfc2VuZF9zdG9wKCk7CiAJCWRldmlkLmRldm5vID0gZHVtcF9ibG9ja19jY3ctPmlwbF9pbmZvLmNjdy5kZXZubzsKIAkJZGV2aWQuc3NpZCAgPSAwOwogCQlyZWlwbF9jY3dfZGV2KCZkZXZpZCk7CiAJCWJyZWFrOwogCWNhc2UgRFVNUF9NRVRIT0RfQ0NXX1ZNOgotCQlzbXBfc2VuZF9zdG9wKCk7CiAJCXNwcmludGYoYnVmLCAiU1RPUkUgU1RBVFVTIik7CiAJCV9fY3BjbWQoYnVmLCBOVUxMLCAwLCBOVUxMKTsKIAkJc3ByaW50ZihidWYsICJJUEwgJVgiLCBkdW1wX2Jsb2NrX2Njdy0+aXBsX2luZm8uY2N3LmRldm5vKTsKQEAgLTEzOTYsMTAgKzE0MDQsMTcgQEAKIAkJZGlhZzMwOChESUFHMzA4X1NFVCwgZHVtcF9ibG9ja19mY3ApOwogCQlkaWFnMzA4KERJQUczMDhfRFVNUCwgTlVMTCk7CiAJCWJyZWFrOwotCWNhc2UgRFVNUF9NRVRIT0RfTk9ORToKLQkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KLQlwcmludGsoS0VSTl9FTUVSRyAiRHVtcCBmYWlsZWQhXG4iKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9ydW4oc3RydWN0IHNodXRkb3duX3RyaWdnZXIgKnRyaWdnZXIpCit7CisJaWYgKGR1bXBfbWV0aG9kID09IERVTVBfTUVUSE9EX05PTkUpCisJCXJldHVybjsKKwlzbXBfc2VuZF9zdG9wKCk7CisJc21wX3N3aXRjaF90b19pcGxfY3B1KF9fZHVtcF9ydW4sIE5VTEwpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBkdW1wX2Njd19pbml0KHZvaWQpCkBAIC0xNTc3LDcgKzE1OTIsNyBAQAogc3RhdGljIGludCB2bWNtZF9pbml0KHZvaWQpCiB7CiAJaWYgKCFNQUNISU5FX0lTX1ZNKQotCQlyZXR1cm4gLUVOT1RTVVBQOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJdm1jbWRfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoInZtY21kIiwgTlVMTCwgZmlybXdhcmVfa29iaik7CiAJaWYgKCF2bWNtZF9rc2V0KQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE1OTUsNyArMTYxMCw3IEBACiB7CiAJaWYgKHN0cmNtcCh0cmlnZ2VyLT5uYW1lLCBPTl9QQU5JQ19TVFIpID09IDApCiAJCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0Jd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApID09IHNpZ3BfYnVzeSkKKwl3aGlsZSAoc2lncChzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCkgPT0gc2lncF9idXN5KQogCQljcHVfcmVsYXgoKTsKIAlmb3IgKDs7KTsKIH0KQEAgLTE5MDIsNyArMTkxNyw2IEBACiB2b2lkIF9faW5pdCBpcGxfc2F2ZV9wYXJhbWV0ZXJzKHZvaWQpCiB7CiAJc3RydWN0IGNpb19pcGxpbmZvIGlwbGluZm87Ci0JdW5zaWduZWQgaW50ICppcGxfcHRyOwogCXZvaWQgKnNyYywgKmRzdDsKIAogCWlmIChjaW9fZ2V0X2lwbGluZm8oJmlwbGluZm8pKQpAQCAtMTkxMywxMSArMTkyNywxMCBAQAogCWlmICghaXBsaW5mby5pc19xZGlvKQogCQlyZXR1cm47CiAJaXBsX2ZsYWdzIHw9IElQTF9QQVJNQkxPQ0tfVkFMSUQ7Ci0JaXBsX3B0ciA9ICh1bnNpZ25lZCBpbnQgKilfX0xDX0lQTF9QQVJNQkxPQ0tfUFRSOwotCXNyYyA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKmlwbF9wdHI7CisJc3JjID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylTMzkwX2xvd2NvcmUuaXBsX3Bhcm1ibG9ja19wdHI7CiAJZHN0ID0gKHZvaWQgKilJUExfUEFSTUJMT0NLX09SSUdJTjsKIAltZW1tb3ZlKGRzdCwgc3JjLCBQQUdFX1NJWkUpOwotCSppcGxfcHRyID0gSVBMX1BBUk1CTE9DS19PUklHSU47CisJUzM5MF9sb3djb3JlLmlwbF9wYXJtYmxvY2tfcHRyID0gSVBMX1BBUk1CTE9DS19PUklHSU47CiB9CiAKIHN0YXRpYyBMSVNUX0hFQUQocmNhbGwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL3MzOTAva2VybmVsL21hY2hpbmVfa2V4ZWMuYwppbmRleCAxMzFkN2VlLi5hOTIyZDUxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL21hY2hpbmVfa2V4ZWMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtNTQsMTEgKzU0LDExIEBACiB7CiB9CiAKLXZvaWQgbWFjaGluZV9rZXhlYyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKK3N0YXRpYyB2b2lkIF9fbWFjaGluZV9rZXhlYyh2b2lkICpkYXRhKQogewogCXJlbG9jYXRlX2tlcm5lbF90IGRhdGFfbW92ZXI7CisJc3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBkYXRhOwogCi0Jc21wX3NlbmRfc3RvcCgpOwogCXBmYXVsdF9maW5pKCk7CiAJczM5MF9yZXNldF9zeXN0ZW0oKTsKIApAQCAtNjgsMyArNjgsOSBAQAogCSgqZGF0YV9tb3ZlcikoJmltYWdlLT5oZWFkLCBpbWFnZS0+c3RhcnQpOwogCWZvciAoOzspOwogfQorCit2b2lkIG1hY2hpbmVfa2V4ZWMoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCit7CisJc21wX3NlbmRfc3RvcCgpOworCXNtcF9zd2l0Y2hfdG9faXBsX2NwdShfX21hY2hpbmVfa2V4ZWMsIGltYWdlKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCmluZGV4IDdjZjQ2NDIuLjMzZmRjNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwpAQCAtOTkyLDMgKzk5Miw2MSBAQAogI2VuZGlmCiAJcmV0dXJuICZ1c2VyX3MzOTBfdmlldzsKIH0KKworc3RhdGljIGNvbnN0IGNoYXIgKmdwcl9uYW1lc1tOVU1fR1BSU10gPSB7CisJInIwIiwgInIxIiwgICJyMiIsICAicjMiLCAgInI0IiwgICJyNSIsICAicjYiLCAgInI3IiwKKwkicjgiLCAicjkiLCAicjEwIiwgInIxMSIsICJyMTIiLCAicjEzIiwgInIxNCIsICJyMTUiLAorfTsKKwordW5zaWduZWQgbG9uZyByZWdzX2dldF9yZWdpc3RlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlpZiAob2Zmc2V0ID49IE5VTV9HUFJTKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVncy0+Z3Byc1tvZmZzZXRdOworfQorCitpbnQgcmVnc19xdWVyeV9yZWdpc3Rlcl9vZmZzZXQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKworCWlmICghbmFtZSB8fCAqbmFtZSAhPSAncicpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChzdHJpY3Rfc3RydG91bChuYW1lICsgMSwgMTAsICZvZmZzZXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAob2Zmc2V0ID49IE5VTV9HUFJTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gb2Zmc2V0OworfQorCitjb25zdCBjaGFyICpyZWdzX3F1ZXJ5X3JlZ2lzdGVyX25hbWUodW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlpZiAob2Zmc2V0ID49IE5VTV9HUFJTKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gZ3ByX25hbWVzW29mZnNldF07Cit9CisKK3N0YXRpYyBpbnQgcmVnc193aXRoaW5fa2VybmVsX3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBrc3AgPSBrZXJuZWxfc3RhY2tfcG9pbnRlcihyZWdzKTsKKworCXJldHVybiAoYWRkciAmIH4oVEhSRUFEX1NJWkUgLSAxKSkgPT0gKGtzcCAmIH4oVEhSRUFEX1NJWkUgLSAxKSk7Cit9CisKKy8qKgorICogcmVnc19nZXRfa2VybmVsX3N0YWNrX250aCgpIC0gZ2V0IE50aCBlbnRyeSBvZiB0aGUgc3RhY2sKKyAqIEByZWdzOnB0X3JlZ3Mgd2hpY2ggY29udGFpbnMga2VybmVsIHN0YWNrIHBvaW50ZXIuCisgKiBAbjpzdGFjayBlbnRyeSBudW1iZXIuCisgKgorICogcmVnc19nZXRfa2VybmVsX3N0YWNrX250aCgpIHJldHVybnMgQG4gdGggZW50cnkgb2YgdGhlIGtlcm5lbCBzdGFjayB3aGljaAorICogaXMgc3BlY2lmaW5lZCBieSBAcmVncy4gSWYgdGhlIEBuIHRoIGVudHJ5IGlzIE5PVCBpbiB0aGUga2VybmVsIHN0YWNrLAorICogdGhpcyByZXR1cm5zIDAuCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmVnc19nZXRfa2VybmVsX3N0YWNrX250aChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG4pCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJYWRkciA9IGtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpICsgbiAqIHNpemVvZihsb25nKTsKKwlpZiAoIXJlZ3Nfd2l0aGluX2tlcm5lbF9zdGFjayhyZWdzLCBhZGRyKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICoodW5zaWduZWQgbG9uZyAqKWFkZHI7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsLlMgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsLlMKaW5kZXggMmY0ODFjYy4uY2I4OTlkOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGwuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsLlMKQEAgLTYsNyArNiw3IEBACiAgKiAgICBBdXRob3Iocyk6IEhvbGdlciBTbW9saW5za2kgKEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbSkKICAqLwogCi0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAogIwogIyBkb19yZWlwbF9hc20KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKaW5kZXggNzc0MTQ3OC4uNWU3M2RlZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKQEAgLTQsNyArNCw3IEBACiAgKgkJIERlbmlzIEpvc2VwaCBCYXJyb3csCiAgKi8KIAotI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKICMKICMgZG9fcmVpcGxfYXNtCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NjbHAuUyBiL2FyY2gvczM5MC9rZXJuZWwvc2NscC5TCmluZGV4IGUyN2NhNjMuLjI3YWYzYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2NscC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2NscC5TCkBAIC05LDggKzksMTAgQEAKICAqLwogCiBMQ19FWFRfTkVXX1BTVwkJPSAweDU4CQkJIyBhZGRyIG9mIGV4dCBpbnQgaGFuZGxlcgorTENfRVhUX05FV19QU1dfNjQJPSAweDFiMAkJCSMgYWRkciBvZiBleHQgaW50IGhhbmRsZXIgNjQgYml0CiBMQ19FWFRfSU5UX1BBUkFNCT0gMHg4MAkJCSMgYWRkciBvZiBleHQgaW50IHBhcmFtZXRlcgogTENfRVhUX0lOVF9DT0RFCQk9IDB4ODYJCQkjIGFkZHIgb2YgZXh0IGludCBjb2RlCitMQ19BUl9NT0RFX0lECQk9IDB4YTMKIAogIwogIyBTdWJyb3V0aW5lIHdoaWNoIHdhaXRzIHN5bmNocm9ub3VzbHkgdW50aWwgZWl0aGVyIGFuIGV4dGVybmFsIGludGVycnVwdGlvbgpAQCAtMzAsOCArMzIsMTYgQEAKIC5MYmFzZVMxOgogCWFoaQklcjE1LC05NgkJCSMgY3JlYXRlIHN0YWNrIGZyYW1lCiAJbGEJJXI4LExDX0VYVF9ORVdfUFNXCQkjIHJlZ2lzdGVyIGludCBoYW5kbGVyCi0JbXZjCS5Mb2xkcHN3UzEtLkxiYXNlUzEoOCwlcjEzKSwwKCVyOCkKLQltdmMJMCg4LCVyOCksLkxleHRwc3dTMS0uTGJhc2VTMSglcjEzKQorCWxhCSVyOSwuTGV4dHBzd1MxLS5MYmFzZVMxKCVyMTMpCisjaWZkZWYgQ09ORklHXzY0QklUCisJdG0JTENfQVJfTU9ERV9JRCwxCisJam5vCS5MZXNhMQorCWxhCSVyOCxMQ19FWFRfTkVXX1BTV182NAkJIyByZWdpc3RlciBpbnQgaGFuZGxlciA2NCBiaXQKKwlsYQklcjksLkxleHRwc3dTMV82NC0uTGJhc2VTMSglcjEzKQorLkxlc2ExOgorI2VuZGlmCisJbXZjCS5Mb2xkcHN3UzEtLkxiYXNlUzEoMTYsJXIxMyksMCglcjgpCisJbXZjCTAoMTYsJXI4KSwwKCVyOSkKIAlsaGkJJXI2LDB4MDIwMAkJCSMgY3IgbWFzayBmb3IgZXh0IGludCAoY3IwLjU0KQogCWx0cgklcjIsJXIyCiAJanoJLkxzZXRjdFMxCkBAIC02NCwxNSArNzQsMTkgQEAKIC5MdGltZW91dFMxOgogCWxjdGwJJWMwLCVjMCwuTGN0bFMxLS5MYmFzZVMxKCVyMTMpCSMgcmVzdG9yZSBpbnRlcnJ1cHQgc2V0dGluZwogCSMgcmVzdG9yZSBvbGQgaGFuZGxlcgotCW12YwkwKDgsJXI4KSwuTG9sZHBzd1MxLS5MYmFzZVMxKCVyMTMpCisJbXZjCTAoMTYsJXI4KSwuTG9sZHBzd1MxLS5MYmFzZVMxKCVyMTMpCiAJbG0JJXI2LCVyMTUsMTIwKCVyMTUpCQkjIHJlc3RvcmUgcmVnaXN0ZXJzCiAJYnIJJXIxNAkJCQkjIHJldHVybiB0byBjYWxsZXIKIAogCS5hbGlnbgk4CiAuTG9sZHBzd1MxOgotCS5sb25nCTAsIDAJCQkJIyBvbGQgZXh0IGludCBQU1cKKwkubG9uZwkwLCAwLCAwLCAwCQkJIyBvbGQgZXh0IGludCBQU1cKIC5MZXh0cHN3UzE6CiAJLmxvbmcJMHgwMDA4MDAwMCwgMHg4MDAwMDAwMCsuTHdhaXRTMQkjIFBTVyB0byBoYW5kbGUgZXh0IGludAorI2lmZGVmIENPTkZJR182NEJJVAorLkxleHRwc3dTMV82NDoKKwkucXVhZAkweDAwMDAwMDAxODAwMDAwMDAsIC5Md2FpdFMxCSMgUFNXIHRvIGhhbmRsZSBleHQgaW50LCA2NCBiaXQKKyNlbmRpZgogLkx3YWl0cHN3UzE6CiAJLmxvbmcJMHgwMTBhMDAwMCwgMHgwMDAwMDAwMCsuTGxvb3BTMQkjIFBTVyB0byB3YWl0IGZvciBleHQgaW50CiAuTHRpbWVTMToKQEAgLTI1MCw2ICsyNjQsMTMgQEAKIF9zY2xwX3ByaW50X2Vhcmx5OgogCXN0bQklcjYsJXIxNSwyNCglcjE1KQkJIyBzYXZlIHJlZ2lzdGVycwogCWFoaQklcjE1LC05NgkJCSMgY3JlYXRlIHN0YWNrIGZyYW1lCisjaWZkZWYgQ09ORklHXzY0QklUCisJdG0JTENfQVJfTU9ERV9JRCwxCisJam5vCS5MZXNhMgorCWFoaQklcjE1LC04MAorCXN0bWgJJXI2LCVyMTUsOTYoJXIxNSkJCSMgc3RvcmUgdXBwZXIgcmVnaXN0ZXIgaGFsdmVzCisuTGVzYTI6CisjZW5kaWYKIAlscgklcjEwLCVyMgkJCSMgc2F2ZSBzdHJpbmcgcG9pbnRlcgogCWxoaQklcjIsMAogCWJyYXMJJXIxNCxfc2NscF9zZXR1cAkJIyBlbmFibGUgY29uc29sZQpAQCAtMjYyLDYgKzI4MywxMyBAQAogCWxoaQklcjIsMQogCWJyYXMJJXIxNCxfc2NscF9zZXR1cAkJIyBkaXNhYmxlIGNvbnNvbGUKIC5MZW5kUzU6CisjaWZkZWYgQ09ORklHXzY0QklUCisJdG0JTENfQVJfTU9ERV9JRCwxCisJam5vCS5MZXNhMworCWxtaAklcjYsJXIxNSw5NiglcjE1KQkJIyBzdG9yZSB1cHBlciByZWdpc3RlciBoYWx2ZXMKKwlhaGkJJXIxNSw4MAorLkxlc2EzOgorI2VuZGlmCiAJbG0JJXI2LCVyMTUsMTIwKCVyMTUpCQkjIHJlc3RvcmUgcmVnaXN0ZXJzCiAJYnIJJXIxNAogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggOGQ4OTU3Yi4uNzdhNjNhZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtMzk2LDE1ICszOTYsMTIgQEAKIHNldHVwX2xvd2NvcmUodm9pZCkKIHsKIAlzdHJ1Y3QgX2xvd2NvcmUgKmxjOwotCWludCBsY19wYWdlczsKIAogCS8qCiAJICogU2V0dXAgbG93Y29yZSBmb3IgYm9vdCBjcHUKIAkgKi8KLQlsY19wYWdlcyA9IHNpemVvZih2b2lkICopID09IDggPyAyIDogMTsKLQlsYyA9IChzdHJ1Y3QgX2xvd2NvcmUgKikKLQkJX19hbGxvY19ib290bWVtKGxjX3BhZ2VzICogUEFHRV9TSVpFLCBsY19wYWdlcyAqIFBBR0VfU0laRSwgMCk7Ci0JbWVtc2V0KGxjLCAwLCBsY19wYWdlcyAqIFBBR0VfU0laRSk7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgX2xvd2NvcmUpICE9IExDX1BBR0VTICogNDA5Nik7CisJbGMgPSBfX2FsbG9jX2Jvb3RtZW0oTENfUEFHRVMgKiBQQUdFX1NJWkUsIExDX1BBR0VTICogUEFHRV9TSVpFLCAwKTsKIAlsYy0+cmVzdGFydF9wc3cubWFzayA9IFBTV19CQVNFX0JJVFMgfCBQU1dfREVGQVVMVF9LRVk7CiAJbGMtPnJlc3RhcnRfcHN3LmFkZHIgPQogCQlQU1dfQUREUl9BTU9ERSB8ICh1bnNpZ25lZCBsb25nKSByZXN0YXJ0X2ludF9oYW5kbGVyOwpAQCAtODA0LDcgKzgwMSw3IEBACiAJaWYgKE1BQ0hJTkVfSVNfVk0pCiAJCXByX2luZm8oIkxpbnV4IGlzIHJ1bm5pbmcgYXMgYSB6L1ZNICIKIAkJCSJndWVzdCBvcGVyYXRpbmcgc3lzdGVtIGluIDMxLWJpdCBtb2RlXG4iKTsKLQllbHNlCisJZWxzZSBpZiAoTUFDSElORV9JU19MUEFSKQogCQlwcl9pbmZvKCJMaW51eCBpcyBydW5uaW5nIG5hdGl2ZWx5IGluIDMxLWJpdCBtb2RlXG4iKTsKIAlpZiAoTUFDSElORV9IQVNfSUVFRSkKIAkJcHJfaW5mbygiVGhlIGhhcmR3YXJlIHN5c3RlbSBoYXMgSUVFRSBjb21wYXRpYmxlICIKQEAgLTgxOCw3ICs4MTUsNyBAQAogCQkJImd1ZXN0IG9wZXJhdGluZyBzeXN0ZW0gaW4gNjQtYml0IG1vZGVcbiIpOwogCWVsc2UgaWYgKE1BQ0hJTkVfSVNfS1ZNKQogCQlwcl9pbmZvKCJMaW51eCBpcyBydW5uaW5nIHVuZGVyIEtWTSBpbiA2NC1iaXQgbW9kZVxuIik7Ci0JZWxzZQorCWVsc2UgaWYgKE1BQ0hJTkVfSVNfTFBBUikKIAkJcHJfaW5mbygiTGludXggaXMgcnVubmluZyBuYXRpdmVseSBpbiA2NC1iaXQgbW9kZVxuIik7CiAjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IDc2YTZmZGQuLjhiMTAxMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9pcGwuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vc2lncC5oPgpAQCAtNTMsNyArNTQsNyBAQAogI2luY2x1ZGUgImVudHJ5LmgiCiAKIC8qIGxvZ2ljYWwgY3B1IHRvIGNwdSBhZGRyZXNzICovCi1pbnQgX19jcHVfbG9naWNhbF9tYXBbTlJfQ1BVU107Cit1bnNpZ25lZCBzaG9ydCBfX2NwdV9sb2dpY2FsX21hcFtOUl9DUFVTXTsKIAogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudF9zZXRbTlJfQ1BVU107CiAKQEAgLTcyLDEzICs3MywxMyBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdSwgY3B1X2RldmljZXMpOwogCi1zdGF0aWMgdm9pZCBzbXBfZXh0X2JpdGNhbGwoaW50LCBlY19iaXRfc2lnKTsKK3N0YXRpYyB2b2lkIHNtcF9leHRfYml0Y2FsbChpbnQsIGludCk7CiAKLXN0YXRpYyBpbnQgY3B1X3N0b3BwZWQoaW50IGNwdSkKK3N0YXRpYyBpbnQgcmF3X2NwdV9zdG9wcGVkKGludCBjcHUpCiB7Ci0JX191MzIgc3RhdHVzOworCXUzMiBzdGF0dXM7CiAKLQlzd2l0Y2ggKHNpZ25hbF9wcm9jZXNzb3JfcHMoJnN0YXR1cywgMCwgY3B1LCBzaWdwX3NlbnNlKSkgeworCXN3aXRjaCAocmF3X3NpZ3BfcHMoJnN0YXR1cywgMCwgY3B1LCBzaWdwX3NlbnNlKSkgewogCWNhc2Ugc2lncF9zdGF0dXNfc3RvcmVkOgogCQkvKiBDaGVjayBmb3Igc3RvcHBlZCBhbmQgY2hlY2sgc3RvcCBzdGF0ZSAqLwogCQlpZiAoc3RhdHVzICYgMHg1MCkKQEAgLTkwLDYgKzkxLDQ0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9zdG9wcGVkKGludCBjcHUpCit7CisJcmV0dXJuIHJhd19jcHVfc3RvcHBlZChjcHVfbG9naWNhbF9tYXAoY3B1KSk7Cit9CisKK3ZvaWQgc21wX3N3aXRjaF90b19pcGxfY3B1KHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBfbG93Y29yZSAqbGMsICpjdXJyZW50X2xjOworCXN0cnVjdCBzdGFja19mcmFtZSAqc2Y7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CisJdW5zaWduZWQgbG9uZyBzcDsKKworCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gMCkKKwkJZnVuYyhkYXRhKTsKKwlfX2xvYWRfcHN3X21hc2soUFNXX0JBU0VfQklUUyB8IFBTV19ERUZBVUxUX0tFWSk7CisJLyogRGlzYWJsZSBsb3djb3JlIHByb3RlY3Rpb24gKi8KKwlfX2N0bF9jbGVhcl9iaXQoMCwgMjgpOworCWN1cnJlbnRfbGMgPSBsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldOworCWxjID0gbG93Y29yZV9wdHJbMF07CisJaWYgKCFsYykKKwkJbGMgPSBjdXJyZW50X2xjOworCWxjLT5yZXN0YXJ0X3Bzdy5tYXNrID0gUFNXX0JBU0VfQklUUyB8IFBTV19ERUZBVUxUX0tFWTsKKwlsYy0+cmVzdGFydF9wc3cuYWRkciA9IFBTV19BRERSX0FNT0RFIHwgKHVuc2lnbmVkIGxvbmcpIHNtcF9yZXN0YXJ0X2NwdTsKKwlpZiAoIWNwdV9vbmxpbmUoMCkpCisJCXNtcF9zd2l0Y2hfdG9fY3B1KGZ1bmMsIGRhdGEsIDAsIHN0YXAoKSwgX19jcHVfbG9naWNhbF9tYXBbMF0pOworCXdoaWxlIChzaWdwKDAsIHNpZ3Bfc3RvcF9hbmRfc3RvcmVfc3RhdHVzKSA9PSBzaWdwX2J1c3kpCisJCWNwdV9yZWxheCgpOworCXNwID0gbGMtPnBhbmljX3N0YWNrOworCXNwIC09IHNpemVvZihzdHJ1Y3QgcHRfcmVncyk7CisJcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKSBzcDsKKwltZW1jcHkoJnJlZ3MtPmdwcnMsICZjdXJyZW50X2xjLT5ncHJlZ3Nfc2F2ZV9hcmVhLCBzaXplb2YocmVncy0+Z3BycykpOworCXJlZ3MtPnBzdyA9IGxjLT5wc3dfc2F2ZV9hcmVhOworCXNwIC09IFNUQUNLX0ZSQU1FX09WRVJIRUFEOworCXNmID0gKHN0cnVjdCBzdGFja19mcmFtZSAqKSBzcDsKKwlzZi0+YmFja19jaGFpbiA9IHJlZ3MtPmdwcnNbMTVdOworCXNtcF9zd2l0Y2hfdG9fY3B1KGZ1bmMsIGRhdGEsIHNwLCBzdGFwKCksIF9fY3B1X2xvZ2ljYWxfbWFwWzBdKTsKK30KKwogdm9pZCBzbXBfc2VuZF9zdG9wKHZvaWQpCiB7CiAJaW50IGNwdSwgcmM7CkBAIC0xMDMsNyArMTQyLDcgQEAKIAkJaWYgKGNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCiAJCQljb250aW51ZTsKIAkJZG8gewotCQkJcmMgPSBzaWduYWxfcHJvY2Vzc29yKGNwdSwgc2lncF9zdG9wKTsKKwkJCXJjID0gc2lncChjcHUsIHNpZ3Bfc3RvcCk7CiAJCX0gd2hpbGUgKHJjID09IHNpZ3BfYnVzeSk7CiAKIAkJd2hpbGUgKCFjcHVfc3RvcHBlZChjcHUpKQpAQCAtMTM5LDEzICsxNzgsMTMgQEAKICAqIFNlbmQgYW4gZXh0ZXJuYWwgY2FsbCBzaWdwIHRvIGFub3RoZXIgY3B1IGFuZCByZXR1cm4gd2l0aG91dCB3YWl0aW5nCiAgKiBmb3IgaXRzIGNvbXBsZXRpb24uCiAgKi8KLXN0YXRpYyB2b2lkIHNtcF9leHRfYml0Y2FsbChpbnQgY3B1LCBlY19iaXRfc2lnIHNpZykKK3N0YXRpYyB2b2lkIHNtcF9leHRfYml0Y2FsbChpbnQgY3B1LCBpbnQgc2lnKQogewogCS8qCiAJICogU2V0IHNpZ25hbGluZyBiaXQgaW4gbG93Y29yZSBvZiB0YXJnZXQgY3B1IGFuZCBraWNrIGl0CiAJICovCiAJc2V0X2JpdChzaWcsICh1bnNpZ25lZCBsb25nICopICZsb3djb3JlX3B0cltjcHVdLT5leHRfY2FsbF9mYXN0KTsKLQl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihjcHUsIHNpZ3BfZW1lcmdlbmN5X3NpZ25hbCkgPT0gc2lncF9idXN5KQorCXdoaWxlIChzaWdwKGNwdSwgc2lncF9lbWVyZ2VuY3lfc2lnbmFsKSA9PSBzaWdwX2J1c3kpCiAJCXVkZWxheSgxMCk7CiB9CiAKQEAgLTIzOSwyNCArMjc4LDggQEAKIH0KIEVYUE9SVF9TWU1CT0woc21wX2N0bF9jbGVhcl9iaXQpOwogCi0vKgotICogSW4gZWFybHkgaXBsIHN0YXRlIGEgdGVtcC4gbG9naWNhbGx5IGNwdSBudW1iZXIgaXMgbmVlZGVkLCBzbyB0aGUgc2lncAotICogZnVuY3Rpb25zIGNhbiBiZSB1c2VkIHRvIHNlbnNlIG90aGVyIGNwdXMuIFNpbmNlIE5SX0NQVVMgaXMgPj0gMiBvbgotICogQ09ORklHX1NNUCBhbmQgdGhlIGlwbCBjcHUgaXMgbG9naWNhbCBjcHUgMCwgaXQgbXVzdCBiZSAxLgotICovCi0jZGVmaW5lIENQVV9JTklUX05PCTEKLQogI2lmZGVmIENPTkZJR19aRkNQRFVNUAogCi0vKgotICogemZjcGR1bXBfcHJlZml4X2FycmF5IGhvbGRzIHByZWZpeCByZWdpc3RlcnMgZm9yIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW86Ci0gKiA2NCBiaXQgemZjcGR1bXAga2VybmVsIGFuZCAzMSBiaXQga2VybmVsIHdoaWNoIGlzIHRvIGJlIGR1bXBlZC4gV2UgaGF2ZSB0bwotICogc2F2ZSBpdHMgcHJlZml4IHJlZ2lzdGVycywgc2luY2UgdGhleSBnZXQgbG9zdCwgd2hlbiBzd2l0Y2hpbmcgZnJvbSAzMSBiaXQKLSAqIHRvIDY0IGJpdC4KLSAqLwotdW5zaWduZWQgaW50IHpmY3BkdW1wX3ByZWZpeF9hcnJheVtOUl9DUFVTICsgMV0gXAotCV9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YSIpKSk7Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBzbXBfZ2V0X3NhdmVfYXJlYSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgcGh5X2NwdSkKIHsKIAlpZiAoaXBsX2luZm8udHlwZSAhPSBJUExfVFlQRV9GQ1BfRFVNUCkKQEAgLTI2NiwyMSArMjg5LDE1IEBACiAJCQkgICAidGhlIGR1bXBcbiIsIGNwdSwgTlJfQ1BVUyAtIDEpOwogCQlyZXR1cm47CiAJfQotCXpmY3BkdW1wX3NhdmVfYXJlYXNbY3B1XSA9IGttYWxsb2Moc2l6ZW9mKHVuaW9uIHNhdmVfYXJlYSksIEdGUF9LRVJORUwpOwotCV9fY3B1X2xvZ2ljYWxfbWFwW0NQVV9JTklUX05PXSA9IChfX3UxNikgcGh5X2NwdTsKLQl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihDUFVfSU5JVF9OTywgc2lncF9zdG9wX2FuZF9zdG9yZV9zdGF0dXMpID09Ci0JICAgICAgIHNpZ3BfYnVzeSkKKwl6ZmNwZHVtcF9zYXZlX2FyZWFzW2NwdV0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2F2ZV9hcmVhKSwgR0ZQX0tFUk5FTCk7CisJd2hpbGUgKHJhd19zaWdwKHBoeV9jcHUsIHNpZ3Bfc3RvcF9hbmRfc3RvcmVfc3RhdHVzKSA9PSBzaWdwX2J1c3kpCiAJCWNwdV9yZWxheCgpOwogCW1lbWNweSh6ZmNwZHVtcF9zYXZlX2FyZWFzW2NwdV0sCiAJICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpIHN0b3JlX3ByZWZpeCgpICsgU0FWRV9BUkVBX0JBU0UsCi0JICAgICAgIFNBVkVfQVJFQV9TSVpFKTsKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQkvKiBjb3B5IG9yaWdpbmFsIHByZWZpeCByZWdpc3RlciAqLwotCXpmY3BkdW1wX3NhdmVfYXJlYXNbY3B1XS0+czM5MHgucHJlZl9yZWcgPSB6ZmNwZHVtcF9wcmVmaXhfYXJyYXlbY3B1XTsKLSNlbmRpZgorCSAgICAgICBzaXplb2Yoc3RydWN0IHNhdmVfYXJlYSkpOwogfQogCi11bmlvbiBzYXZlX2FyZWEgKnpmY3BkdW1wX3NhdmVfYXJlYXNbTlJfQ1BVUyArIDFdOworc3RydWN0IHNhdmVfYXJlYSAqemZjcGR1bXBfc2F2ZV9hcmVhc1tOUl9DUFVTICsgMV07CiBFWFBPUlRfU1lNQk9MX0dQTCh6ZmNwZHVtcF9zYXZlX2FyZWFzKTsKIAogI2Vsc2UKQEAgLTM4OSw4ICs0MDYsNyBAQAogCQlmb3IgKGNwdSA9IDA7IGNwdSA8PSBNQVhfQ1BVX0FERFJFU1M7IGNwdSsrKSB7CiAJCQlpZiAoY3B1ID09IGJvb3RfY3B1X2FkZHIpCiAJCQkJY29udGludWU7Ci0JCQlfX2NwdV9sb2dpY2FsX21hcFtDUFVfSU5JVF9OT10gPSBjcHU7Ci0JCQlpZiAoIWNwdV9zdG9wcGVkKENQVV9JTklUX05PKSkKKwkJCWlmICghcmF3X2NwdV9zdG9wcGVkKGNwdSkpCiAJCQkJY29udGludWU7CiAJCQlzbXBfZ2V0X3NhdmVfYXJlYShjX2NwdXMsIGNwdSk7CiAJCQljX2NwdXMrKzsKQEAgLTQxMyw4ICs0MjksNyBAQAogCQljcHVfYWRkciA9IGluZm8tPmNwdVtjcHVdLmFkZHJlc3M7CiAJCWlmIChjcHVfYWRkciA9PSBib290X2NwdV9hZGRyKQogCQkJY29udGludWU7Ci0JCV9fY3B1X2xvZ2ljYWxfbWFwW0NQVV9JTklUX05PXSA9IGNwdV9hZGRyOwotCQlpZiAoIWNwdV9zdG9wcGVkKENQVV9JTklUX05PKSkgeworCQlpZiAoIXJhd19jcHVfc3RvcHBlZChjcHVfYWRkcikpIHsKIAkJCXNfY3B1cysrOwogCQkJY29udGludWU7CiAJCX0KQEAgLTUzMywxOCArNTQ4LDE4IEBACiAvKiBVcHBpbmcgYW5kIGRvd25pbmcgb2YgQ1BVcyAqLwogaW50IF9fY3B1aW5pdCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZTsKIAlzdHJ1Y3QgX2xvd2NvcmUgKmNwdV9sb3djb3JlOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZTsKIAlzdHJ1Y3Qgc3RhY2tfZnJhbWUgKnNmOwotCXNpZ3BfY2NvZGUgY2NvZGU7CiAJdTMyIGxvd2NvcmU7CisJaW50IGNjb2RlOwogCiAJaWYgKHNtcF9jcHVfc3RhdGVbY3B1XSAhPSBDUFVfU1RBVEVfQ09ORklHVVJFRCkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKHNtcF9hbGxvY19sb3djb3JlKGNwdSkpCiAJCXJldHVybiAtRU5PTUVNOwogCWRvIHsKLQkJY2NvZGUgPSBzaWduYWxfcHJvY2Vzc29yKGNwdSwgc2lncF9pbml0aWFsX2NwdV9yZXNldCk7CisJCWNjb2RlID0gc2lncChjcHUsIHNpZ3BfaW5pdGlhbF9jcHVfcmVzZXQpOwogCQlpZiAoY2NvZGUgPT0gc2lncF9idXN5KQogCQkJdWRlbGF5KDEwKTsKIAkJaWYgKGNjb2RlID09IHNpZ3Bfbm90X29wZXJhdGlvbmFsKQpAQCAtNTUyLDcgKzU2Nyw3IEBACiAJfSB3aGlsZSAoY2NvZGUgPT0gc2lncF9idXN5KTsKIAogCWxvd2NvcmUgPSAodTMyKSh1bnNpZ25lZCBsb25nKWxvd2NvcmVfcHRyW2NwdV07Ci0Jd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3JfcChsb3djb3JlLCBjcHUsIHNpZ3Bfc2V0X3ByZWZpeCkgPT0gc2lncF9idXN5KQorCXdoaWxlIChzaWdwX3AobG93Y29yZSwgY3B1LCBzaWdwX3NldF9wcmVmaXgpID09IHNpZ3BfYnVzeSkKIAkJdWRlbGF5KDEwKTsKIAogCWlkbGUgPSBjdXJyZW50X3NldFtjcHVdOwpAQCAtNTc4LDcgKzU5Myw3IEBACiAJY3B1X2xvd2NvcmUtPmZ0cmFjZV9mdW5jID0gUzM5MF9sb3djb3JlLmZ0cmFjZV9mdW5jOwogCWVpZWlvKCk7CiAKLQl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihjcHUsIHNpZ3BfcmVzdGFydCkgPT0gc2lncF9idXN5KQorCXdoaWxlIChzaWdwKGNwdSwgc2lncF9yZXN0YXJ0KSA9PSBzaWdwX2J1c3kpCiAJCXVkZWxheSgxMCk7CiAKIAl3aGlsZSAoIWNwdV9vbmxpbmUoY3B1KSkKQEAgLTY0MCw3ICs2NTUsNyBAQAogCS8qIFdhaXQgdW50aWwgdGFyZ2V0IGNwdSBpcyBkb3duICovCiAJd2hpbGUgKCFjcHVfc3RvcHBlZChjcHUpKQogCQljcHVfcmVsYXgoKTsKLQl3aGlsZSAoc2lnbmFsX3Byb2Nlc3Nvcl9wKDAsIGNwdSwgc2lncF9zZXRfcHJlZml4KSA9PSBzaWdwX2J1c3kpCisJd2hpbGUgKHNpZ3BfcCgwLCBjcHUsIHNpZ3Bfc2V0X3ByZWZpeCkgPT0gc2lncF9idXN5KQogCQl1ZGVsYXkoMTApOwogCXNtcF9mcmVlX2xvd2NvcmUoY3B1KTsKIAlwcl9pbmZvKCJQcm9jZXNzb3IgJWQgc3RvcHBlZFxuIiwgY3B1KTsKQEAgLTY0OSw3ICs2NjQsNyBAQAogdm9pZCBjcHVfZGllKHZvaWQpCiB7CiAJaWRsZV90YXNrX2V4aXQoKTsKLQl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCkgPT0gc2lncF9idXN5KQorCXdoaWxlIChzaWdwKHNtcF9wcm9jZXNzb3JfaWQoKSwgc2lncF9zdG9wKSA9PSBzaWdwX2J1c3kpCiAJCWNwdV9yZWxheCgpOwogCWZvciAoOzspOwogfQpAQCAtNzY1LDcgKzc4MCw4IEBACiAJZ2V0X29ubGluZV9jcHVzKCk7CiAJbXV0ZXhfbG9jaygmc21wX2NwdV9zdGF0ZV9tdXRleCk7CiAJcmMgPSAtRUJVU1k7Ci0JaWYgKGNwdV9vbmxpbmUoY3B1KSkKKwkvKiBkaXNhbGxvdyBjb25maWd1cmF0aW9uIGNoYW5nZXMgb2Ygb25saW5lIGNwdXMgYW5kIGNwdSAwICovCisJaWYgKGNwdV9vbmxpbmUoY3B1KSB8fCBjcHUgPT0gMCkKIAkJZ290byBvdXQ7CiAJcmMgPSAwOwogCXN3aXRjaCAodmFsKSB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N3aXRjaF9jcHUuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3dpdGNoX2NwdS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OWYxMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAva2VybmVsL3N3aXRjaF9jcHUuUwpAQCAtMCwwICsxLDU4IEBACisvKgorICogMzEtYml0IHN3aXRjaCBjcHUgY29kZQorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOQorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisjIHNtcF9zd2l0Y2hfdG9fY3B1IHN3aXRjaGVzIHRvIGRlc3RpbmF0aW9uIGNwdSBhbmQgZXhlY3V0ZXMgdGhlIHBhc3NlZCBmdW5jdGlvbgorIyBQYXJhbWV0ZXI6ICVyMiAtIGZ1bmN0aW9uIHRvIGNhbGwKKyMJICAgICAlcjMgLSBmdW5jdGlvbiBwYXJhbWV0ZXIKKyMJICAgICAlcjQgLSBzdGFjayBwb2luZXIKKyMJICAgICAlcjUgLSBjdXJyZW50IGNwdQorIwkgICAgICVyNiAtIGRlc3RpbmF0aW9uIGNwdQorCisJLnNlY3Rpb24gLnRleHQKKwkuYWxpZ24gNAorCS5nbG9ibCBzbXBfc3dpdGNoX3RvX2NwdQorc21wX3N3aXRjaF90b19jcHU6CisJc3RtCSVyNiwlcjE1LF9fU0ZfR1BSUyglcjE1KQorCWxyCSVyMSwlcjE1CisJYWhpCSVyMTUsLVNUQUNLX0ZSQU1FX09WRVJIRUFECisJc3QJJXIxLF9fU0ZfQkFDS0NIQUlOKCVyMTUpCisJYmFzcgklcjEzLDAKKzA6CWxhCSVyMSwuZ3BycmVnc19hZGRyLTBiKCVyMTMpCisJbAklcjEsMCglcjEpCisJc3RtCSVyMCwlcjE1LDAoJXIxKQorMToJc2lncAklcjAsJXI2LF9fU0lHUF9SRVNUQVJUCS8qIHN0YXJ0IGRlc3RpbmF0aW9uIENQVSAqLworCWJyYwkyLDFiCQkJLyogYnVzeSwgdHJ5IGFnYWluICovCisyOglzaWdwCSVyMCwlcjUsX19TSUdQX1NUT1AJLyogc3RvcCBjdXJyZW50IENQVSAqLworCWJyYwkyLDJiCQkJLyogYnVzeSwgdHJ5IGFnYWluICovCiszOglqCTNiCisKKwkuZ2xvYmwJc21wX3Jlc3RhcnRfY3B1CitzbXBfcmVzdGFydF9jcHU6CisJYmFzcgklcjEzLDAKKzA6CWxhCSVyMSwuZ3BycmVnc19hZGRyLTBiKCVyMTMpCisJbAklcjEsMCglcjEpCisJbG0JJXIwLCVyMTUsMCglcjEpCisxOglzaWdwCSVyMCwlcjUsX19TSUdQX1NFTlNFCS8qIFdhaXQgZm9yIGNhbGxpbmcgQ1BVICovCisJYnJjCTEwLDFiCQkJLyogYnVzeSwgYWNjZXB0ZWQgKHN0YXR1cyAwKSwgcnVubmluZyAqLworCXRtbGwJJXIwLDB4NDAJCS8qIFRlc3QgaWYgY2FsbGluZyBDUFUgaXMgc3RvcHBlZCAqLworCWp6CTFiCisJbHRyCSVyNCwlcjQJCQkvKiBOZXcgc3RhY2sgPyAqLworCWp6CTFmCisJbHIJJXIxNSwlcjQKKzE6CWJhc3IJJXIxNCwlcjIKKworLmdwcnJlZ3NfYWRkcjoKKwkubG9uZwkuZ3BycmVncworCisJLnNlY3Rpb24gLmRhdGEsImF3IixAcHJvZ2JpdHMKKy5ncHJyZWdzOgorCS5yZXB0CTE2CisJLmxvbmcJMAorCS5lbmRyCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N3aXRjaF9jcHU2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9zd2l0Y2hfY3B1NjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTRhYWNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zd2l0Y2hfY3B1NjQuUwpAQCAtMCwwICsxLDUxIEBACisvKgorICogNjQtYml0IHN3aXRjaCBjcHUgY29kZQorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOQorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisjIHNtcF9zd2l0Y2hfdG9fY3B1IHN3aXRjaGVzIHRvIGRlc3RpbmF0aW9uIGNwdSBhbmQgZXhlY3V0ZXMgdGhlIHBhc3NlZCBmdW5jdGlvbgorIyBQYXJhbWV0ZXI6ICVyMiAtIGZ1bmN0aW9uIHRvIGNhbGwKKyMJICAgICAlcjMgLSBmdW5jdGlvbiBwYXJhbWV0ZXIKKyMJICAgICAlcjQgLSBzdGFjayBwb2luZXIKKyMJICAgICAlcjUgLSBjdXJyZW50IGNwdQorIwkgICAgICVyNiAtIGRlc3RpbmF0aW9uIGNwdQorCisJLnNlY3Rpb24gLnRleHQKKwkuYWxpZ24gNAorCS5nbG9ibCBzbXBfc3dpdGNoX3RvX2NwdQorc21wX3N3aXRjaF90b19jcHU6CisJc3RtZwklcjYsJXIxNSxfX1NGX0dQUlMoJXIxNSkKKwlsZ3IJJXIxLCVyMTUKKwlhZ2hpCSVyMTUsLVNUQUNLX0ZSQU1FX09WRVJIRUFECisJc3RnCSVyMSxfX1NGX0JBQ0tDSEFJTiglcjE1KQorCWxhcmwJJXIxLC5ncHJyZWdzCisJc3RtZwklcjAsJXIxNSwwKCVyMSkKKzE6CXNpZ3AJJXIwLCVyNixfX1NJR1BfUkVTVEFSVAkvKiBzdGFydCBkZXN0aW5hdGlvbiBDUFUgKi8KKwlicmMJMiwxYgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLworMjoJc2lncAklcjAsJXI1LF9fU0lHUF9TVE9QCS8qIHN0b3AgY3VycmVudCBDUFUgKi8KKwlicmMJMiwyYgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLworMzoJagkzYgorCisJLmdsb2JsCXNtcF9yZXN0YXJ0X2NwdQorc21wX3Jlc3RhcnRfY3B1OgorCWxhcmwJJXIxLC5ncHJyZWdzCisJbG1nCSVyMCwlcjE1LDAoJXIxKQorMToJc2lncAklcjAsJXI1LF9fU0lHUF9TRU5TRQkvKiBXYWl0IGZvciBjYWxsaW5nIENQVSAqLworCWJyYwkxMCwxYgkJCS8qIGJ1c3ksIGFjY2VwdGVkIChzdGF0dXMgMCksIHJ1bm5pbmcgKi8KKwl0bWxsCSVyMCwweDQwCQkvKiBUZXN0IGlmIGNhbGxpbmcgQ1BVIGlzIHN0b3BwZWQgKi8KKwlqegkxYgorCWx0Z3IJJXI0LCVyNAkJCS8qIE5ldyBzdGFjayA/ICovCisJanoJMWYKKwlsZ3IJJXIxNSwlcjQKKzE6CWJhc3IJJXIxNCwlcjIKKworCS5zZWN0aW9uIC5kYXRhLCJhdyIsQHByb2diaXRzCisuZ3BycmVnczoKKwkucmVwdAkxNgorCS5xdWFkCTAKKwkuZW5kcgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKaW5kZXggMGMyNmNjMS4uYjM1NDQyNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TCkBAIC0xNzYsNyArMTc2LDcgQEAKIAljZ3IJJXIxLCVyMgogCWplCXJlc3RvcmVfcmVnaXN0ZXJzCQkvKiByMSA9IHIyIC0+IG5vdGhpbmcgdG8gZG8gKi8KIAlsYXJsCSVyNCwuTHJlc3RhcnRfc3VzcGVuZF9wc3cJLyogU2V0IG5ldyByZXN0YXJ0IFBTVyAqLwotCW12YwlfX0xDX1JFU1RBUlRfUFNXKDE2LCVyMCksMCglcjQpCisJbXZjCV9fTENfUlNUX05FV19QU1coMTYsJXIwKSwwKCVyNCkKIDM6CiAJc2lncAklcjksJXIxLF9fU0lHUF9JTklUSUFMX0NQVV9SRVNFVAogCWJyYwk4LDRmCS8qIGFjY2VwdGVkICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCmluZGV4IDY1MDY1YWMuLmE4ZjkzZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCkBAIC01MSwxNCArNTEsNiBAQAogI2RlZmluZSBVU0VDU19QRVJfSklGRlkgICAgICgodW5zaWduZWQgbG9uZykgMTAwMDAwMC9IWikKICNkZWZpbmUgQ0xLX1RJQ0tTX1BFUl9KSUZGWSAoKHVuc2lnbmVkIGxvbmcpIFVTRUNTX1BFUl9KSUZGWSA8PCAxMikKIAotLyoKLSAqIENyZWF0ZSBhIHNtYWxsIHRpbWUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0aW1lciBpbnRlcnJ1cHRzCi0gKiBvbiB0aGUgZGlmZmVyZW50IGNwdXMgdG8gYXZvaWQgbG9jayBjb250ZW50aW9uLgotICovCi0jZGVmaW5lIENQVV9ERVZJQVRJT04gICAgICAgKHNtcF9wcm9jZXNzb3JfaWQoKSA8PCAxMikKLQotI2RlZmluZSBUSUNLX1NJWkUgdGljawotCiB1NjQgc2NoZWRfY2xvY2tfYmFzZV9jYyA9IC0xOwkvKiBGb3JjZSB0byBkYXRhIHNlY3Rpb24uICovCiBFWFBPUlRfU1lNQk9MX0dQTChzY2hlZF9jbG9ja19iYXNlX2NjKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMgYi9hcmNoL3MzOTAva2VybmVsL3Zkc28uYwppbmRleCA1Zjk5ZTY2Li42YmM5YzE5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Zkc28uYworKysgYi9hcmNoL3MzOTAva2VybmVsL3Zkc28uYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGlhZy5jIGIvYXJjaC9zMzkwL2t2bS9kaWFnLmMKaW5kZXggODMwMDMwOS4uOWU0Yzg0MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9kaWFnLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9kaWFnLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAkJdmNwdS0+cnVuLT5zMzkwX3Jlc2V0X2ZsYWdzID0gMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAogCWF0b21pY19jbGVhcl9tYXNrKENQVVNUQVRfUlVOTklORywgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5jcHVmbGFncyk7CkBAIC02Miw2ICs2Miw2IEBACiAJY2FzZSAweDMwODoKIAkJcmV0dXJuIF9fZGlhZ19pcGxfZnVuY3Rpb25zKHZjcHUpOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PVFNVUFA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYwppbmRleCBiNDAwOTY0Li4zZGRjMzA4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKQEAgLTMyLDcgKzMyLDcgQEAKIAogCXZjcHUtPnN0YXQuaW5zdHJ1Y3Rpb25fbGN0bGcrKzsKIAlpZiAoKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5pcGIgJiAweGZmKSAhPSAweDJmKQotCQlyZXR1cm4gLUVOT1RTVVBQOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAl1c2VyYWRkciA9IGRpc3AyOwogCWlmIChiYXNlMikKQEAgLTEzOCw3ICsxMzgsNyBAQAogCQlyYyA9IF9fa3ZtX3MzOTBfdmNwdV9zdG9yZV9zdGF0dXModmNwdSwKIAkJCQkJCSAgS1ZNX1MzOTBfU1RPUkVfU1RBVFVTX05PQUREUik7CiAJCWlmIChyYyA+PSAwKQotCQkJcmMgPSAtRU5PVFNVUFA7CisJCQlyYyA9IC1FT1BOT1RTVVBQOwogCX0KIAogCWlmICh2Y3B1LT5hcmNoLmxvY2FsX2ludC5hY3Rpb25fYml0cyAmIEFDVElPTl9SRUxPQURWQ1BVX09OX1NUT1ApIHsKQEAgLTE1MCw3ICsxNTAsNyBAQAogCWlmICh2Y3B1LT5hcmNoLmxvY2FsX2ludC5hY3Rpb25fYml0cyAmIEFDVElPTl9TVE9QX09OX1NUT1ApIHsKIAkJdmNwdS0+YXJjaC5sb2NhbF9pbnQuYWN0aW9uX2JpdHMgJj0gfkFDVElPTl9TVE9QX09OX1NUT1A7CiAJCVZDUFVfRVZFTlQodmNwdSwgMywgIiVzIiwgImNwdSBzdG9wcGVkIik7Ci0JCXJjID0gLUVOT1RTVVBQOworCQlyYyA9IC1FT1BOT1RTVVBQOwogCX0KIAogCXNwaW5fdW5sb2NrX2JoKCZ2Y3B1LT5hcmNoLmxvY2FsX2ludC5sb2NrKTsKQEAgLTE3MSw5ICsxNzEsOSBAQAogCQkJIDIqUEFHRV9TSVpFKTsKIAkJaWYgKHJjKQogCQkJLyogdXNlciB3aWxsIHJlY2VpdmUgc2lnc2VndiwgZXhpdCB0byB1c2VyICovCi0JCQlyYyA9IC1FTk9UU1VQUDsKKwkJCXJjID0gLUVPUE5PVFNVUFA7CiAJfSBlbHNlCi0JCXJjID0gLUVOT1RTVVBQOworCQlyYyA9IC1FT1BOT1RTVVBQOwogCiAJaWYgKHJjKQogCQlWQ1BVX0VWRU5UKHZjcHUsIDIsICJ1bmhhbmRsZWQgdmFsaWRpdHkgaW50ZXJjZXB0IGNvZGUgJWQiLApAQCAtMTg5LDcgKzE4OSw3IEBACiAJaGFuZGxlciA9IGluc3RydWN0aW9uX2hhbmRsZXJzW3ZjcHUtPmFyY2guc2llX2Jsb2NrLT5pcGEgPj4gOF07CiAJaWYgKGhhbmRsZXIpCiAJCXJldHVybiBoYW5kbGVyKHZjcHUpOwotCXJldHVybiAtRU5PVFNVUFA7CisJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCiBzdGF0aWMgaW50IGhhbmRsZV9wcm9nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTIwNiw3ICsyMDYsNyBAQAogCXJjID0gaGFuZGxlX2luc3RydWN0aW9uKHZjcHUpOwogCXJjMiA9IGhhbmRsZV9wcm9nKHZjcHUpOwogCi0JaWYgKHJjID09IC1FTk9UU1VQUCkKKwlpZiAocmMgPT0gLUVPUE5PVFNVUFApCiAJCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5pY3B0Y29kZSA9IDB4MDQ7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC0yMzEsOSArMjMxLDkgQEAKIAl1OCBjb2RlID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmljcHRjb2RlOwogCiAJaWYgKGNvZGUgJiAzIHx8IChjb2RlID4+IDIpID49IEFSUkFZX1NJWkUoaW50ZXJjZXB0X2Z1bmNzKSkKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWZ1bmMgPSBpbnRlcmNlcHRfZnVuY3NbY29kZSA+PiAyXTsKIAlpZiAoZnVuYykKIAkJcmV0dXJuIGZ1bmModmNwdSk7Ci0JcmV0dXJuIC1FTk9UU1VQUDsKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwppbmRleCA0MzQ4NmMyLi44MzQ3NzRkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKQEAgLTEwLDEyICsxMCwxMiBAQAogICogICAgQXV0aG9yKHMpOiBDYXJzdGVuIE90dGUgPGNvdHRlQGRlLmlibS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJrdm0tczM5MC5oIgogI2luY2x1ZGUgImdhY2Nlc3MuaCIKIApAQCAtMTg3LDggKzE4Nyw4IEBACiAJCWlmIChyYyA9PSAtRUZBVUxUKQogCQkJZXhjZXB0aW9uID0gMTsKIAotCQlyYyA9IHB1dF9ndWVzdF91NjQodmNwdSwgX19MQ19QRkFVTFRfSU5UUEFSTSwKLQkJCWludGktPmV4dC5leHRfcGFyYW1zMik7CisJCXJjID0gcHV0X2d1ZXN0X3U2NCh2Y3B1LCBfX0xDX0VYVF9QQVJBTVMyLAorCQkJCSAgIGludGktPmV4dC5leHRfcGFyYW1zMik7CiAJCWlmIChyYyA9PSAtRUZBVUxUKQogCQkJZXhjZXB0aW9uID0gMTsKIAkJYnJlYWs7CkBAIC0zNDIsNyArMzQyLDcgQEAKIAlpZiAocHN3X2ludGVycnVwdHNfZGlzYWJsZWQodmNwdSkpIHsKIAkJVkNQVV9FVkVOVCh2Y3B1LCAzLCAiJXMiLCAiZGlzYWJsZWQgd2FpdCIpOwogCQlfX3Vuc2V0X2NwdV9pZGxlKHZjcHUpOwotCQlyZXR1cm4gLUVOT1RTVVBQOyAvKiBkaXNhYmxlZCB3YWl0ICovCisJCXJldHVybiAtRU9QTk9UU1VQUDsgLyogZGlzYWJsZWQgd2FpdCAqLwogCX0KIAogCWlmIChwc3dfZXh0aW50X2Rpc2FibGVkKHZjcHUpIHx8CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKaW5kZXggZjhiY2FlZi4uM2ZhMGExMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbm1pLmg+CkBAIC01NDMsNyArNTQ0LDcgQEAKIAkJcmMgPSAtRUlOVFI7CiAJfQogCi0JaWYgKHJjID09IC1FTk9UU1VQUCkgeworCWlmIChyYyA9PSAtRU9QTk9UU1VQUCkgewogCQkvKiBpbnRlcmNlcHQgY2Fubm90IGJlIGhhbmRsZWQgaW4ta2VybmVsLCBwcmVwYXJlIGt2bS1ydW4gKi8KIAkJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gICAgICAgICA9IEtWTV9FWElUX1MzOTBfU0lFSUM7CiAJCWt2bV9ydW4tPnMzOTBfc2llaWMuaWNwdGNvZGUgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aWNwdGNvZGU7CkBAIC02MDMsNDUgKzYwNCw0NSBAQAogCX0gZWxzZQogCQlwcmVmaXggPSAwOwogCi0JaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4LCBmcF9yZWdzKSwKKwlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIGZwX3JlZ3MpLAogCQkJdmNwdS0+YXJjaC5ndWVzdF9mcHJlZ3MuZnBycywgMTI4LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgZ3BfcmVncyksCisJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBncF9yZWdzKSwKIAkJCXZjcHUtPmFyY2guZ3Vlc3RfZ3BycywgMTI4LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgcHN3KSwKKwlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIHBzdyksCiAJCQkmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3csIDE2LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgcHJlZl9yZWcpLAorCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYSwgcHJlZl9yZWcpLAogCQkJJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5wcmVmaXgsIDQsIHByZWZpeCkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsCi0JCQlhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgZnBfY3RybF9yZWcpLAorCQkJYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIGZwX2N0cmxfcmVnKSwKIAkJCSZ2Y3B1LT5hcmNoLmd1ZXN0X2ZwcmVncy5mcGMsIDQsIHByZWZpeCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4LCB0b2RfcmVnKSwKKwlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIHRvZF9yZWcpLAogCQkJJnZjcHUtPmFyY2guc2llX2Jsb2NrLT50b2RwciwgNCwgcHJlZml4KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MHgsIHRpbWVyKSwKKwlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIHRpbWVyKSwKIAkJCSZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y3B1dG0sIDgsIHByZWZpeCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4LCBjbGtfY21wKSwKKwlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIGNsa19jbXApLAogCQkJJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ja2MsIDgsIHByZWZpeCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4LCBhY2NfcmVncyksCisJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBhY2NfcmVncyksCiAJCQkmdmNwdS0+YXJjaC5ndWVzdF9hY3JzLCA2NCwgcHJlZml4KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoX19ndWVzdGNvcHkodmNwdSwKLQkJCWFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4LCBjdHJsX3JlZ3MpLAorCQkJYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIGN0cmxfcmVncyksCiAJCQkmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdjciwgMTI4LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmMKaW5kZXggZDQyNmFhYy4uMjhjNTU2NyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmMKKysrIGIvYXJjaC9zMzkwL2t2bS9wcml2LmMKQEAgLTMyMyw1ICszMjMsNSBAQAogCQllbHNlCiAJCQlyZXR1cm4gaGFuZGxlcih2Y3B1KTsKIAl9Ci0JcmV0dXJuIC1FTk9UU1VQUDsKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3NpZ3AuYyBiL2FyY2gvczM5MC9rdm0vc2lncC5jCmluZGV4IDE1ZWUxMTEuLjI0MWE0ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vc2lncC5jCisrKyBiL2FyY2gvczM5MC9rdm0vc2lncC5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAkJcmMgPSAwOyAvKiBvcmRlciBhY2NlcHRlZCAqLwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyYyA9IC1FTk9UU1VQUDsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKIAl9CiAJcmV0dXJuIHJjOwogfQpAQCAtMjkzLDcgKzI5Myw3IEBACiAJCXZjcHUtPnN0YXQuaW5zdHJ1Y3Rpb25fc2lncF9yZXN0YXJ0Kys7CiAJCS8qIHVzZXIgc3BhY2UgbXVzdCBrbm93IGFib3V0IHJlc3RhcnQgKi8KIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT1RTVVBQOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiAJaWYgKHJjIDwgMCkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvTWFrZWZpbGUgYi9hcmNoL3MzOTAvbGliL01ha2VmaWxlCmluZGV4IDk3OTc1ZWMuLmNkNTRhMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL2xpYi9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHMzOTAtc3BlY2lmaWMgbGlicmFyeSBmaWxlcy4uCiAjCiAKLWxpYi15ICs9IGRlbGF5Lm8gc3RyaW5nLm8gdWFjY2Vzc19zdGQubyB1YWNjZXNzX3B0Lm8KK2xpYi15ICs9IGRlbGF5Lm8gc3RyaW5nLm8gdWFjY2Vzc19zdGQubyB1YWNjZXNzX3B0Lm8gdXNlcmNvcHkubwogb2JqLSQoQ09ORklHXzMyQklUKSArPSBkaXY2NC5vIHFybm5kLm8gdWNtcGRpMi5vCiBsaWItJChDT05GSUdfNjRCSVQpICs9IHVhY2Nlc3NfbXZjb3MubwogbGliLSQoQ09ORklHX1NNUCkgKz0gc3BpbmxvY2subwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jIGIvYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jCmluZGV4IGNmZjMyN2YuLjkxNzU0ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvc3BpbmxvY2suYworKysgYi9hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMKQEAgLTQzLDE2ICs0MywyNCBAQAogewogCWludCBjb3VudCA9IHNwaW5fcmV0cnk7CiAJdW5zaWduZWQgaW50IGNwdSA9IH5zbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgaW50IG93bmVyOwogCiAJd2hpbGUgKDEpIHsKLQkJaWYgKGNvdW50LS0gPD0gMCkgewotCQkJdW5zaWduZWQgaW50IG93bmVyID0gbHAtPm93bmVyX2NwdTsKLQkJCWlmIChvd25lciAhPSAwKQotCQkJCV9yYXdfeWllbGRfY3B1KH5vd25lcik7Ci0JCQljb3VudCA9IHNwaW5fcmV0cnk7CisJCW93bmVyID0gbHAtPm93bmVyX2NwdTsKKwkJaWYgKCFvd25lciB8fCBzbXBfdmNwdV9zY2hlZHVsZWQofm93bmVyKSkgeworCQkJZm9yIChjb3VudCA9IHNwaW5fcmV0cnk7IGNvdW50ID4gMDsgY291bnQtLSkgeworCQkJCWlmIChhcmNoX3NwaW5faXNfbG9ja2VkKGxwKSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPm93bmVyX2NwdSwgMCwKKwkJCQkJCQkgIGNwdSkgPT0gMCkKKwkJCQkJcmV0dXJuOworCQkJfQorCQkJaWYgKE1BQ0hJTkVfSVNfTFBBUikKKwkJCQljb250aW51ZTsKIAkJfQotCQlpZiAoYXJjaF9zcGluX2lzX2xvY2tlZChscCkpCi0JCQljb250aW51ZTsKKwkJb3duZXIgPSBscC0+b3duZXJfY3B1OworCQlpZiAob3duZXIpCisJCQlfcmF3X3lpZWxkX2NwdSh+b3duZXIpOwogCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZscC0+b3duZXJfY3B1LCAwLCBjcHUpID09IDApCiAJCQlyZXR1cm47CiAJfQpAQCAtNjMsMTcgKzcxLDI3IEBACiB7CiAJaW50IGNvdW50ID0gc3Bpbl9yZXRyeTsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gfnNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBpbnQgb3duZXI7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJd2hpbGUgKDEpIHsKLQkJaWYgKGNvdW50LS0gPD0gMCkgewotCQkJdW5zaWduZWQgaW50IG93bmVyID0gbHAtPm93bmVyX2NwdTsKLQkJCWlmIChvd25lciAhPSAwKQotCQkJCV9yYXdfeWllbGRfY3B1KH5vd25lcik7Ci0JCQljb3VudCA9IHNwaW5fcmV0cnk7CisJCW93bmVyID0gbHAtPm93bmVyX2NwdTsKKwkJaWYgKCFvd25lciB8fCBzbXBfdmNwdV9zY2hlZHVsZWQofm93bmVyKSkgeworCQkJZm9yIChjb3VudCA9IHNwaW5fcmV0cnk7IGNvdW50ID4gMDsgY291bnQtLSkgeworCQkJCWlmIChhcmNoX3NwaW5faXNfbG9ja2VkKGxwKSkKKwkJCQkJY29udGludWU7CisJCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZscC0+b3duZXJfY3B1LCAwLAorCQkJCQkJCSAgY3B1KSA9PSAwKQorCQkJCQlyZXR1cm47CisJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJfQorCQkJaWYgKE1BQ0hJTkVfSVNfTFBBUikKKwkJCQljb250aW51ZTsKIAkJfQotCQlpZiAoYXJjaF9zcGluX2lzX2xvY2tlZChscCkpCi0JCQljb250aW51ZTsKKwkJb3duZXIgPSBscC0+b3duZXJfY3B1OworCQlpZiAob3duZXIpCisJCQlfcmF3X3lpZWxkX2NwdSh+b3duZXIpOwogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZscC0+b3duZXJfY3B1LCAwLCBjcHUpID09IDApCiAJCQlyZXR1cm47CkBAIC0xMDAsOCArMTE4LDExIEBACiB2b2lkIGFyY2hfc3Bpbl9yZWxheChhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IGxvY2stPm93bmVyX2NwdTsKLQlpZiAoY3B1ICE9IDApCi0JCV9yYXdfeWllbGRfY3B1KH5jcHUpOworCWlmIChjcHUgIT0gMCkgeworCQlpZiAoTUFDSElORV9JU19WTSB8fCBNQUNISU5FX0lTX0tWTSB8fAorCQkgICAgIXNtcF92Y3B1X3NjaGVkdWxlZCh+Y3B1KSkKKwkJCV9yYXdfeWllbGRfY3B1KH5jcHUpOworCX0KIH0KIEVYUE9SVF9TWU1CT0woYXJjaF9zcGluX3JlbGF4KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91c2VyY29weS5jIGIvYXJjaC9zMzkwL2xpYi91c2VyY29weS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YjM2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvbGliL3VzZXJjb3B5LmMKQEAgLTAsMCArMSw4IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisKK3ZvaWQgY29weV9mcm9tX3VzZXJfb3ZlcmZsb3codm9pZCkKK3sKKwlXQVJOKDEsICJCdWZmZXIgb3ZlcmZsb3cgZGV0ZWN0ZWQhXG4iKTsKK30KK0VYUE9SVF9TWU1CT0woY29weV9mcm9tX3VzZXJfb3ZlcmZsb3cpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2V4dG1lbS5jIGIvYXJjaC9zMzkwL21tL2V4dG1lbS5jCmluZGV4IDVjODQ1NzEuLjY0MDlmZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9leHRtZW0uYworKysgYi9hcmNoL3MzOTAvbW0vZXh0bWVtLmMKQEAgLTMwOSw3ICszMDksNyBAQAogCX0KICNlbmRpZgogCWlmIChxb3V0LT5zZWdjbnQgPiA2KSB7Ci0JCXJjID0gLUVOT1RTVVBQOworCQlyYyA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIApAQCAtMzI0LDExICszMjQsMTEgQEAKIAkJZm9yIChpPTA7IGk8cW91dC0+c2VnY250OyBpKyspIHsKIAkJCWlmICgoKHFvdXQtPnJhbmdlW2ldLnN0YXJ0ICYgMHhmZikgIT0gU0VHX1RZUEVfRVcpICYmCiAJCQkgICAgKChxb3V0LT5yYW5nZVtpXS5zdGFydCAmIDB4ZmYpICE9IFNFR19UWVBFX0VOKSkgewotCQkJCXJjID0gLUVOT1RTVVBQOworCQkJCXJjID0gLUVPUE5PVFNVUFA7CiAJCQkJZ290byBvdXRfZnJlZTsKIAkJCX0KIAkJCWlmIChzdGFydCAhPSBxb3V0LT5yYW5nZVtpXS5zdGFydCA+PiBQQUdFX1NISUZUKSB7Ci0JCQkJcmMgPSAtRU5PVFNVUFA7CisJCQkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJCQlnb3RvIG91dF9mcmVlOwogCQkJfQogCQkJc3RhcnQgPSAocW91dC0+cmFuZ2VbaV0uZW5kID4+IFBBR0VfU0hJRlQpICsgMTsKQEAgLTM1Nyw3ICszNTcsNyBAQAogICogLUVOT1NZUyAgOiB3ZSBhcmUgbm90IHJ1bm5pbmcgb24gVk0KICAqIC1FSU8gICAgIDogY291bGQgbm90IHBlcmZvcm0gcXVlcnkgZGlhZ25vc2UKICAqIC1FTk9FTlQgIDogbm8gc3VjaCBzZWdtZW50Ci0gKiAtRU5PVFNVUFA6IG11bHRpLXBhcnQgc2VnbWVudCBjYW5ub3QgYmUgdXNlZCB3aXRoIGxpbnV4CisgKiAtRU9QTk9UU1VQUDogbXVsdGktcGFydCBzZWdtZW50IGNhbm5vdCBiZSB1c2VkIHdpdGggbGludXgKICAqIC1FTk9NRU0gIDogb3V0IG9mIG1lbW9yeQogICogMCAuLiA2ICAgOiB0eXBlIG9mIHNlZ21lbnQgYXMgZGVmaW5lZCBpbiBpbmNsdWRlL2FzbS1zMzkwL2V4dG1lbS5oCiAgKi8KQEAgLTUxNSw3ICs1MTUsNyBAQAogICogLUVOT1NZUyAgOiB3ZSBhcmUgbm90IHJ1bm5pbmcgb24gVk0KICAqIC1FSU8gICAgIDogY291bGQgbm90IHBlcmZvcm0gcXVlcnkgb3IgbG9hZCBkaWFnbm9zZQogICogLUVOT0VOVCAgOiBubyBzdWNoIHNlZ21lbnQKLSAqIC1FTk9UU1VQUDogbXVsdGktcGFydCBzZWdtZW50IGNhbm5vdCBiZSB1c2VkIHdpdGggbGludXgKKyAqIC1FT1BOT1RTVVBQOiBtdWx0aS1wYXJ0IHNlZ21lbnQgY2Fubm90IGJlIHVzZWQgd2l0aCBsaW51eAogICogLUVOT1NQQyAgOiBzZWdtZW50IGNhbm5vdCBiZSB1c2VkIChvdmVybGFwcyB3aXRoIHN0b3JhZ2UpCiAgKiAtRUJVU1kgICA6IHNlZ21lbnQgY2FuIHRlbXBvcmFyaWx5IG5vdCBiZSB1c2VkIChvdmVybGFwcyB3aXRoIGRjc3MpCiAgKiAtRVJBTkdFICA6IHNlZ21lbnQgY2Fubm90IGJlIHVzZWQgKGV4Y2VlZHMga2VybmVsIG1hcHBpbmcgcmFuZ2UpCkBAIC03NDIsNyArNzQyLDcgQEAKIAkJcHJfZXJyKCJMb2FkaW5nIG9yIHF1ZXJ5aW5nIERDU1MgJXMgcmVzdWx0ZWQgaW4gYSAiCiAJCSAgICAgICAiaGFyZHdhcmUgZXJyb3JcbiIsIHNlZ19uYW1lKTsKIAkJYnJlYWs7Ci0JY2FzZSAtRU5PVFNVUFA6CisJY2FzZSAtRU9QTk9UU1VQUDoKIAkJcHJfZXJyKCJEQ1NTICVzIGhhcyBtdWx0aXBsZSBwYWdlIHJhbmdlcyBhbmQgY2Fubm90IGJlICIKIAkJICAgICAgICJsb2FkZWQgb3IgcXVlcmllZFxuIiwgc2VnX25hbWUpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggZmMxMDJlNy4uMzA0MGQ3YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vczM5MF9leHQuaD4KQEAgLTU5LDE1ICs2MCwxMyBAQAogewogCWludCByZXQgPSAwOwogCi0jaWZkZWYgQ09ORklHX0tQUk9CRVMKIAkvKiBrcHJvYmVfcnVubmluZygpIG5lZWRzIHNtcF9wcm9jZXNzb3JfaWQoKSAqLwotCWlmICghdXNlcl9tb2RlKHJlZ3MpKSB7CisJaWYgKGtwcm9iZXNfYnVpbHRfaW4oKSAmJiAhdXNlcl9tb2RlKHJlZ3MpKSB7CiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlpZiAoa3Byb2JlX3J1bm5pbmcoKSAmJiBrcHJvYmVfZmF1bHRfaGFuZGxlcihyZWdzLCAxNCkpCiAJCQlyZXQgPSAxOwogCQlwcmVlbXB0X2VuYWJsZSgpOwogCX0KLSNlbmRpZgogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9pbml0LmMgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCmluZGV4IDc2NTY0NzkuLmQ1ODY1ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9pbml0LmMKKysrIGIvYXJjaC9zMzkwL21tL2luaXQuYwpAQCAtMTQzLDMzICsxNDMsMzQgQEAKIH0KICNlbmRpZgogCi12b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQordm9pZCBmcmVlX2luaXRfcGFnZXMoY2hhciAqd2hhdCwgdW5zaWduZWQgbG9uZyBiZWdpbiwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBiZWdpbjsKIAotICAgICAgICBhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pOwotICAgICAgICBmb3IgKDsgYWRkciA8ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2VuZCk7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CisJaWYgKGJlZ2luID49IGVuZCkKKwkJcmV0dXJuOworCWZvciAoOyBhZGRyIDwgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwogCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpKTsKLQkJbWVtc2V0KCh2b2lkICopYWRkciwgUE9JU09OX0ZSRUVfSU5JVE1FTSwgUEFHRV9TSVpFKTsKKwkJbWVtc2V0KCh2b2lkICopKGFkZHIgJiBQQUdFX01BU0spLCBQT0lTT05fRlJFRV9JTklUTUVNLAorCQkgICAgICAgUEFHRV9TSVpFKTsKIAkJZnJlZV9wYWdlKGFkZHIpOwogCQl0b3RhbHJhbV9wYWdlcysrOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ayAoIkZyZWVpbmcgdW51c2VkIGtlcm5lbCBtZW1vcnk6ICVsZGsgZnJlZWRcbiIsCi0JCSgodW5zaWduZWQgbG9uZykmX19pbml0X2VuZCAtICh1bnNpZ25lZCBsb25nKSZfX2luaXRfYmVnaW4pID4+IDEwKTsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiRnJlZWluZyAlczogJWx1ayBmcmVlZFxuIiwgd2hhdCwgKGVuZCAtIGJlZ2luKSA+PiAxMCk7Cit9CisKK3ZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCit7CisJZnJlZV9pbml0X3BhZ2VzKCJ1bnVzZWQga2VybmVsIG1lbW9yeSIsCisJCQkodW5zaWduZWQgbG9uZykmX19pbml0X2JlZ2luLAorCQkJKHVuc2lnbmVkIGxvbmcpJl9faW5pdF9lbmQpOwogfQogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiB2b2lkIGZyZWVfaW5pdHJkX21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLSAgICAgICAgaWYgKHN0YXJ0IDwgZW5kKQotICAgICAgICAgICAgICAgIHByaW50ayAoIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWxkayBmcmVlZFxuIiwgKGVuZCAtIHN0YXJ0KSA+PiAxMCk7Ci0gICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gUEFHRV9TSVpFKSB7Ci0gICAgICAgICAgICAgICAgQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0gICAgICAgICAgICAgICAgaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCkpOwotICAgICAgICAgICAgICAgIGZyZWVfcGFnZShzdGFydCk7Ci0gICAgICAgICAgICAgICAgdG90YWxyYW1fcGFnZXMrKzsKLSAgICAgICAgfQorCWZyZWVfaW5pdF9wYWdlcygiaW5pdHJkIG1lbW9yeSIsIHN0YXJ0LCBlbmQpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggNjc0OTM0Yi4uY2NmMzhmMCAxMDA2NDQKLS0tIGEvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTI3Miw4ICsyNzIsOSBAQAogCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywJcHRlX3QgcHRlKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCisJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCkKIHsKKwlwdGVfdCBwdGUgPSAqcHRlcDsKIAlfX3VwZGF0ZV90bGIodm1hLCBhZGRyZXNzLCBwdGUpOwogCV9fdXBkYXRlX2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2NvcmUvbW0vaW5pdC5jIGIvYXJjaC9zY29yZS9tbS9pbml0LmMKaW5kZXggZGZhZjQ1OC4uN2YwMDFiYiAxMDA2NDQKLS0tIGEvYXJjaC9zY29yZS9tbS9pbml0LmMKKysrIGIvYXJjaC9zY29yZS9tbS9pbml0LmMKQEAgLTU5LDcgKzU5LDcgQEAKIH0KIAogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwotc3RhdGljIGludCBfX2luaXQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwYWdlbnIpCitpbnQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwYWdlbnIpCiB7CiAJaWYgKHBhZ2VuciA+PSBtaW5fbG93X3BmbiAmJiBwYWdlbnIgPCBtYXhfbG93X3BmbikKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggMjEyMWZiYi4uMDVjZWY1MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMTMsNyArMTMsNiBAQAogCXNlbGVjdCBIQVZFX0xNQgogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQKLQlzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QgaWYgTU1VCiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sKIAlzZWxlY3QgSEFWRV9ETUFfQVBJX0RFQlVHCiAJc2VsZWN0IEhBVkVfRE1BX0FUVFJTCkBAIC0yMiw2ICsyMSw3IEBACiAJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKIAlzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDIKIAlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQQorCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk8KIAlzZWxlY3QgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTCiAJc2VsZWN0IFJUQ19MSUIKIAlzZWxlY3QgR0VORVJJQ19BVE9NSUM2NApAQCAtMzUsNiArMzUsNyBAQAogCWRlZl9ib29sIEFSQ0ggPSAic2giCiAJc2VsZWN0IEhBVkVfS1BST0JFUwogCXNlbGVjdCBIQVZFX0tSRVRQUk9CRVMKKwlzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QgaWYgTU1VICYmICFYMlRMQgogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFUgogCXNlbGVjdCBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiAJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKQEAgLTQyLDYgKzQzLDggQEAKIAlzZWxlY3QgSEFWRV9GVFJBQ0VfTk1JX0VOVEVSIGlmIERZTkFNSUNfRlRSQUNFCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCisJc2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVAorCXNlbGVjdCBQRVJGX0VWRU5UUyBpZiBIQVZFX0hXX0JSRUFLUE9JTlQKIAlzZWxlY3QgQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpZiBNTVUKIAogY29uZmlnIFNVUEVSSDY0CkBAIC03OCwxMiArODEsMTMgQEAKIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBHRU5FUklDX0lSUV9QUk9CRQotCWRlZl9ib29sIHkKLQogY29uZmlnIElSUV9QRVJfQ1BVCiAJZGVmX2Jvb2wgeQogCitjb25maWcgU1BBUlNFX0lSUQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFNVUEVSSDMyCisKIGNvbmZpZyBHRU5FUklDX0dQSU8KIAlkZWZfYm9vbCBuCiAKQEAgLTU0OCw4ICs1NTIsNyBAQAogCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjAzIHx8IFwKIAkJCSAgICAgIENQVV9TVUJUWVBFX1NINzIwNiB8fCBcCiAJCQkgICAgICBDUFVfU1VCVFlQRV9TSDcyNjMgfHwgXAotCQkJICAgICAgQ1BVX1NVQlRZUEVfTVhHICAgIHx8IFwKLQkJCSAgICAgIENQVV9TVUJUWVBFX1NINzc4NgorCQkJICAgICAgQ1BVX1NVQlRZUEVfTVhHCiAJZGVmYXVsdCAiNjAwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzc1MSB8fCBDUFVfU1VCVFlQRV9TSDc3NTFSCiAJZGVmYXVsdCAiNjYwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINF8yMDIKIAlkZWZhdWx0ICI1MDAwMDAwMCIKQEAgLTU2Myw3ICs1NjYsOCBAQAogCiBjb25maWcgU0hfQ0xLX0NQR19MRUdBQ1kKIAlkZXBlbmRzIG9uIFNIX0NMS19DUEcKLQlkZWZfYm9vbCB5IGlmICFDUFVfU1VCVFlQRV9TSDc3ODUgJiYgIUFSQ0hfU0hNT0JJTEUKKwlkZWZfYm9vbCB5IGlmICFDUFVfU1VCVFlQRV9TSDc3ODUgJiYgIUFSQ0hfU0hNT0JJTEUgJiYgXAorCQkgICAgICAhQ1BVX1NVQlRZUEVfU0g3Nzg2CiAKIGNvbmZpZyBTSF9DTEtfTUQKIAlpbnQgIkNQVSBNb2RlIFBpbiBTZXR0aW5nIgpAQCAtNzI1LDE4ICs3MjksNiBAQAogCSAgTExTQywgdGhpcyBzaG91bGQgYmUgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb3RoZXIgYWx0ZXJuYXRpdmUgb2YKIAkgIGRpc2FibGluZyBpbnRlcnJ1cHRzIGFyb3VuZCB0aGUgYXRvbWljIHNlcXVlbmNlLgogCi1jb25maWcgU1BBUlNFX0lSUQotCWJvb2wgIlN1cHBvcnQgc3BhcnNlIGlycSBudW1iZXJpbmciCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3BhcnNlIGlycXMuIFRoaXMgaXMgdXNlZnVsIGluIGdlbmVyYWwKLQkgIGFzIG1vc3QgQ1BVcyBoYXZlIGEgZmFpcmx5IHNwYXJzZSBhcnJheSBvZiBJUlEgdmVjdG9ycywgd2hpY2gKLQkgIHRoZSBpcnFfZGVzYyB0aGVuIG1hcHMgZGlyZWN0bHkgb24gdG8uIFN5c3RlbXMgd2l0aCBhIGhpZ2gKLQkgIG51bWJlciBvZiBvZmYtY2hpcCBJUlFzIHdpbGwgd2FudCB0byB0cmVhdCB0aGlzIGFzCi0JICBleHBlcmltZW50YWwgdW50aWwgdGhleSBoYXZlIGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZC4KLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KLQogZW5kbWVudQogCiBtZW51ICJCb290IG9wdGlvbnMiCkBAIC04MjIsMTEgKzgxNCwxNSBAQAogY29uZmlnIFBDSQogCWJvb2wgIlBDSSBzdXBwb3J0IgogCWRlcGVuZHMgb24gU1lTX1NVUFBPUlRTX1BDSQorCXNlbGVjdCBQQ0lfRE9NQUlOUwogCWhlbHAKIAkgIEZpbmQgb3V0IHdoZXRoZXIgeW91IGhhdmUgYSBQQ0kgbW90aGVyYm9hcmQuIFBDSSBpcyB0aGUgbmFtZSBvZiBhCiAJICBidXMgc3lzdGVtLCBpLmUuIHRoZSB3YXkgdGhlIENQVSB0YWxrcyB0byB0aGUgb3RoZXIgc3R1ZmYgaW5zaWRlCiAJICB5b3VyIGJveC4gSWYgeW91IGhhdmUgUENJLCBzYXkgWSwgb3RoZXJ3aXNlIE4uCiAKK2NvbmZpZyBQQ0lfRE9NQUlOUworCWJvb2wKKwogc291cmNlICJkcml2ZXJzL3BjaS9wY2llL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9wY2kvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZy5jcHUgYi9hcmNoL3NoL0tjb25maWcuY3B1CmluZGV4IGNkNmUzZWEuLmRkZjA5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZy5jcHUKKysrIGIvYXJjaC9zaC9LY29uZmlnLmNwdQpAQCAtNjgsNyArNjgsOCBAQAogCiBjb25maWcgU1BFQ1VMQVRJVkVfRVhFQ1VUSU9OCiAJYm9vbCAiU3BlY3VsYXRpdmUgc3Vicm91dGluZSByZXR1cm4iCi0JZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3ODAgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg2CiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGEgc3BlY3VsYXRpdmUgaW5zdHJ1Y3Rpb24gZmV0Y2ggZm9yCiAJICBzdWJyb3V0aW5lIHJldHVybi4gVGhlcmUgYXJlIHZhcmlvdXMgcGl0ZmFsbHMgYXNzb2NpYXRlZCB3aXRoCmRpZmYgLS1naXQgYS9hcmNoL3NoL01ha2VmaWxlIGIvYXJjaC9zaC9NYWtlZmlsZQppbmRleCBkYjkxOTI1Li41ODg1NzlhIDEwMDY0NAotLS0gYS9hcmNoL3NoL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvTWFrZWZpbGUKQEAgLTgzLDYgKzgzLDcgQEAKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19TSF83NzI0X1NPTFVUSU9OX0VOR0lORSkJOj0gdUltYWdlCiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfNzIwNl9TT0xVVElPTl9FTkdJTkUpCTo9IHZtbGludXgKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19TSF83NjE5X1NPTFVUSU9OX0VOR0lORSkJOj0gdm1saW51eAorZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIX1NESzc3ODYpCQk6PSB2bWxpbnV4LmJpbgogCiAjIFNldCBzb21lIHNlbnNpYmxlIEtidWlsZCBkZWZhdWx0cwogS0JVSUxEX0lNQUdFCQk6PSAkKGRlZmF1bHRpbWFnZS15KQpAQCAtMTQzLDExICsxNDQsMTEgQEAKIG1hY2hkaXItJChDT05GSUdfU0hfS0ZSMlIwOSkJCQkrPSBtYWNoLWtmcjJyMDkKIG1hY2hkaXItJChDT05GSUdfU0hfRUNPVkVDKQkJCSs9IG1hY2gtZWNvdmVjMjQKIG1hY2hkaXItJChDT05GSUdfU0hfU0RLNzc4MCkJCQkrPSBtYWNoLXNkazc3ODAKK21hY2hkaXItJChDT05GSUdfU0hfU0RLNzc4NikJCQkrPSBtYWNoLXNkazc3ODYKIG1hY2hkaXItJChDT05GSUdfU0hfWDNQUk9UTykJCQkrPSBtYWNoLXgzcHJvdG8KIG1hY2hkaXItJChDT05GSUdfU0hfU0g3NzYzUkRQKQkJCSs9IG1hY2gtc2g3NzYzcmRwCiBtYWNoZGlyLSQoQ09ORklHX1NIX1NINDIwMl9NSUNST0RFVikJCSs9IG1hY2gtbWljcm9kZXYKIG1hY2hkaXItJChDT05GSUdfU0hfTEFORElTSykJCQkrPSBtYWNoLWxhbmRpc2sKLW1hY2hkaXItJChDT05GSUdfU0hfVElUQU4pCQkJKz0gbWFjaC10aXRhbgogbWFjaGRpci0kKENPTkZJR19TSF9MQk9YX1JFMikJCQkrPSBtYWNoLWxib3hyZTIKIG1hY2hkaXItJChDT05GSUdfU0hfQ0FZTUFOKQkJCSs9IG1hY2gtY2F5bWFuCiBtYWNoZGlyLSQoQ09ORklHX1NIX1JTSykJCQkrPSBtYWNoLXJzawpAQCAtMjAzLDggKzIwNCw5IEBACiBsaWJzLSQoQ09ORklHX1NVUEVSSDMyKQkJOj0gYXJjaC9zaC9saWIvCSQobGlicy15KQogbGlicy0kKENPTkZJR19TVVBFUkg2NCkJCTo9IGFyY2gvc2gvbGliNjQvICQobGlicy15KQogCi1CT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLnNyZWMgdUltYWdlLmJpbiBcCi0JICAgICAgIHpJbWFnZSB2bWxpbnV4LnNyZWMgcm9tSW1hZ2UKK0JPT1RfVEFSR0VUUyA9IHVJbWFnZSB1SW1hZ2UuYnoyIHVJbWFnZS5neiB1SW1hZ2UubHptYSB1SW1hZ2UubHpvIFwKKwkgICAgICAgdUltYWdlLnNyZWMgdUltYWdlLmJpbiB6SW1hZ2Ugdm1saW51eC5iaW4gdm1saW51eC5zcmVjIFwKKwkgICAgICAgcm9tSW1hZ2UKIFBIT05ZICs9ICQoQk9PVF9UQVJHRVRTKQogCiBhbGw6ICQoS0JVSUxEX0lNQUdFKQpAQCAtMjI1LDEwICsyMjcsMTIgQEAKIAlAZWNobyAnICB6SW1hZ2UgCSAgICAgICAgICAgLSBDb21wcmVzc2VkIGtlcm5lbCBpbWFnZScKIAlAZWNobyAnICByb21JbWFnZQkgICAgICAgICAgIC0gQ29tcHJlc3NlZCBST00gaW1hZ2UsIGlmIHN1cHBvcnRlZCcKIAlAZWNobyAnICB2bWxpbnV4LnNyZWMJICAgICAgICAgICAtIENyZWF0ZSBhbiBFTEYgUy1yZWNvcmQnCisJQGVjaG8gJyAgdm1saW51eC5iaW4JICAgICAgICAgICAtIENyZWF0ZSBhbiB1bmNvbXByZXNzZWQgYmluYXJ5IGltYWdlJwogCUBlY2hvICcqIHVJbWFnZSAgCSAgICAgICAgICAgLSBBbGlhcyB0byBib290YWJsZSBVLUJvb3QgaW1hZ2UnCiAJQGVjaG8gJyAgdUltYWdlLnNyZWMJICAgICAgICAgICAtIENyZWF0ZSBhbiBTLXJlY29yZCBmb3IgVS1Cb290JwogCUBlY2hvICcgIHVJbWFnZS5iaW4JICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGJpbiknCiAJQGVjaG8gJyogdUltYWdlLmd6CSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChnemlwKScKIAlAZWNobyAnICB1SW1hZ2UuYnoyCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChiemlwMiknCiAJQGVjaG8gJyAgdUltYWdlLmx6bWEJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGx6bWEpJworCUBlY2hvICcgIHVJbWFnZS5sem8JICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGx6byknCiBlbmRlZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZyBiL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKaW5kZXggYWVkZDlkZS4uOTM4ZTg3ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZworKysgYi9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCkBAIC0xNTAsNiArMTUwLDE0IEBACiAJICBTZWxlY3QgU0RLNzc4MCBpZiBjb25maWd1cmluZyBmb3IgYSBSZW5lc2FzIFNINzc4MCBTREs3NzgwUjMKIAkgIGV2YWx1YXRpb24gYm9hcmQuCiAKK2NvbmZpZyBTSF9TREs3Nzg2CisJYm9vbCAiU0RLNzc4NiIKKwlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc4NgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfUENJCisJaGVscAorCSAgU2VsZWN0IFNESzc3ODYgaWYgY29uZmlndXJpbmcgZm9yIGEgUmVuZXNhcyBUZWNobm9sb2d5IEV1cm9wZQorCSAgU0g3Nzg2LTY1bm0gYm9hcmQuCisKIGNvbmZpZyBTSF9ISUdITEFOREVSCiAJYm9vbCAiSGlnaGxhbmRlciIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKaW5kZXggY2UwZjI2My4uNGY5MGY5YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKQEAgLTgsMyArOCw0IEBACiBvYmotJChDT05GSUdfU0hfRURPU0s3NzYwKQkrPSBib2FyZC1lZG9zazc3NjAubwogb2JqLSQoQ09ORklHX1NIX0VTUFQpCQkrPSBib2FyZC1lc3B0Lm8KIG9iai0kKENPTkZJR19TSF9QT0xBUklTKQkrPSBib2FyZC1wb2xhcmlzLm8KK29iai0kKENPTkZJR19TSF9USVRBTikJCSs9IGJvYXJkLXRpdGFuLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKaW5kZXggOTlmZmM1Zi4uZWZiYTQ1MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CiAjaW5jbHVkZSA8Y3B1L3NoNzcyMC5oPgogCi0jZGVmaW5lIExBTjkxMTVfUkVBRFkJKGN0cmxfaW5sKDB4QTgwMDAwODRVTCkgJiAweDAwMDAwMDAxVUwpCisjZGVmaW5lIExBTjkxMTVfUkVBRFkJKF9fcmF3X3JlYWRsKDB4QTgwMDAwODRVTCkgJiAweDAwMDAwMDAxVUwpCiAKIC8qIFByZWZlciBjbWRsaW5lIG92ZXIgUmVkQm9vdCAqLwogc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCAiUmVkQm9vdCIsIE5VTEwgfTsKQEAgLTYwLDMzICs2MCwzMyBAQAogewogCS8qIENTMjogTEFOICgweDA4MDAwMDAwIC0gMHgwYmZmZmZmZikgKi8KIAkvKiBubyBpZGxlIGN5Y2xlcywgbm9ybWFsIHNwYWNlLCA4IGJpdCBkYXRhIGJ1cyAqLwotCWN0cmxfb3V0bCgweDM2ZGIwNDAwLCBDUzJCQ1IpOworCV9fcmF3X3dyaXRlbCgweDM2ZGIwNDAwLCBDUzJCQ1IpOwogCS8qIChTVzoxLjUgV1I6MyBIVzoxLjUpLCBleHQuIHdhaXQgKi8KLQljdHJsX291dGwoMHgwMDAwMDNjMCwgQ1MyV0NSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDNjMCwgQ1MyV0NSKTsKIAogCS8qIENTNDogQ0FOMSAoMHhiMDAwMDAwMCAtIDB4YjNmZmZmZmYpICovCiAJLyogbm8gaWRsZSBjeWNsZXMsIG5vcm1hbCBzcGFjZSwgOCBiaXQgZGF0YSBidXMgKi8KLQljdHJsX291dGwoMHgwMDAwMDIwMCwgQ1M0QkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDIwMCwgQ1M0QkNSKTsKIAkvKiAoU1c6MS41IFdSOjMgSFc6MS41KSwgZXh0LiB3YWl0ICovCi0JY3RybF9vdXRsKDB4MDAxMDA5ODEsIENTNFdDUik7CisJX19yYXdfd3JpdGVsKDB4MDAxMDA5ODEsIENTNFdDUik7CiAKIAkvKiBDUzVhOiBDQU4yICgweGI0MDAwMDAwIC0gMHhiNWZmZmZmZikgKi8KIAkvKiBubyBpZGxlIGN5Y2xlcywgbm9ybWFsIHNwYWNlLCA4IGJpdCBkYXRhIGJ1cyAqLwotCWN0cmxfb3V0bCgweDAwMDAwMjAwLCBDUzVBQkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDIwMCwgQ1M1QUJDUik7CiAJLyogKFNXOjEuNSBXUjozIEhXOjEuNSksIGV4dC4gd2FpdCAqLwotCWN0cmxfb3V0bCgweDAwMTAwOTgxLCBDUzVBV0NSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDEwMDk4MSwgQ1M1QVdDUik7CiAKIAkvKiBDUzViOiBDQU4zICgweGI2MDAwMDAwIC0gMHhiN2ZmZmZmZikgKi8KIAkvKiBubyBpZGxlIGN5Y2xlcywgbm9ybWFsIHNwYWNlLCA4IGJpdCBkYXRhIGJ1cyAqLwotCWN0cmxfb3V0bCgweDAwMDAwMjAwLCBDUzVCQkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDIwMCwgQ1M1QkJDUik7CiAJLyogKFNXOjEuNSBXUjozIEhXOjEuNSksIGV4dC4gd2FpdCAqLwotCWN0cmxfb3V0bCgweDAwMTAwOTgxLCBDUzVCV0NSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDEwMDk4MSwgQ1M1QldDUik7CiAKIAkvKiBDUzZhOiBSb3RhcnkgKDB4YjgwMDAwMDAgLSAweGI5ZmZmZmZmKSAqLwogCS8qIG5vIGlkbGUgY3ljbGVzLCBub3JtYWwgc3BhY2UsIDggYml0IGRhdGEgYnVzICovCi0JY3RybF9vdXRsKDB4MDAwMDAyMDAsIENTNkFCQ1IpOworCV9fcmF3X3dyaXRlbCgweDAwMDAwMjAwLCBDUzZBQkNSKTsKIAkvKiAoU1c6MS41IFdSOjMgSFc6MS41KSwgbm8gZXh0LiB3YWl0ICovCi0JY3RybF9vdXRsKDB4MDAxMDA5QzEsIENTNkFXQ1IpOworCV9fcmF3X3dyaXRlbCgweDAwMTAwOUMxLCBDUzZBV0NSKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3BvcnRfbXVsdGlwbGV4aW5nKHZvaWQpCkBAIC05NCw3MSArOTQsNzEgQEAKIAkvKiBBNyBHUE8oTEVEOCk7ICAgICBBNiBHUE8oTEVENyk7ICAgICBBNSBHUE8oTEVENik7CSAgQTQgR1BPKExFRDUpOwogCSAqIEEzIEdQTyhMRUQ0KTsgICAgIEEyIEdQTyhMRUQzKTsgICAgIEExIEdQTyhMRUQyKTsJICBBMCBHUE8oTEVEMSk7CiAJICovCi0JY3RybF9vdXR3KDB4NTU1NSwgUE9SVF9QQUNSKTsJLyogMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEgKi8KKwlfX3Jhd193cml0ZXcoMHg1NTU1LCBQT1JUX1BBQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSAqLwogCiAJLyogQjcgR1BPKFJTVDQpOyAgIEI2IEdQTyhSU1QzKTsgIEI1IEdQTyhSU1QyKTsgICAgQjQgR1BPKFJTVDEpOwogCSAqIEIzIEdQTyhQQjMpOwkgICBCMiBHUE8oUEIyKTsJICBCMSBHUE8oUEIxKTsJICAgQjAgR1BPKFBCMCk7CiAJICovCi0JY3RybF9vdXR3KDB4NTU1NSwgUE9SVF9QQkNSKTsJLyogMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEgKi8KKwlfX3Jhd193cml0ZXcoMHg1NTU1LCBQT1JUX1BCQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSAqLwogCiAJLyogQzcgR1BPKFBDNyk7CSAgQzYgR1BPKFBDNik7CSAgQzUgR1BPKFBDNSk7CSAgIEM0IEdQTyhQQzQpOwogCSAqIEMzIExDRF9EQVRBMzsgIEMyIExDRF9EQVRBMjsgICBDMSBMQ0RfREFUQTE7CSAgIEMwIExDRF9EQVRBMDsKIAkgKi8KLQljdHJsX291dHcoMHg1NTAwLCBQT1JUX1BDQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMCAwMCAwMCAwMCAqLworCV9fcmF3X3dyaXRldygweDU1MDAsIFBPUlRfUENDUik7CS8qIDAxIDAxIDAxIDAxIDAwIDAwIDAwIDAwICovCiAKIAkvKiBENyBHUE8oUEQ3KTsJRDYgR1BPKFBENik7CUQ1IEdQTyhQRDUpOwkgICBENCBHUE8oUEQ0KTsKIAkgKiBEMyBHUE8oUEQzKTsJRDIgR1BPKFBEMik7CUQxIEdQTyhQRDEpOwkgICBEMCBHUE8oUEQwKTsKIAkgKi8KLQljdHJsX291dHcoMHg1NTU1LCBQT1JUX1BEQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSAqLworCV9fcmF3X3dyaXRldygweDU1NTUsIFBPUlRfUERDUik7CS8qIDAxIDAxIDAxIDAxIDAxIDAxIDAxIDAxICovCiAKIAkvKiBFNyAoeCk7CSAgRTYgR1BJKG51KTsJIEU1IEdQSShudSk7CSAgRTQgTENEX01fRElTUDsKIAkgKiBFMyBMQ0RfQ0wxOwkgIEUyIExDRF9DTDI7CSBFMSBMQ0RfRE9OOwkgIEUwIExDRF9GTE07CiAJICovCi0JY3RybF9vdXR3KDB4M0MwMCwgUE9SVF9QRUNSKTsJLyogMDAgMTEgMTEgMDAgMDAgMDAgMDAgMDAgKi8KKwlfX3Jhd193cml0ZXcoMHgzQzAwLCBQT1JUX1BFQ1IpOwkvKiAwMCAxMSAxMSAwMCAwMCAwMCAwMCAwMCAqLwogCiAJLyogRjcgKHgpOwkgICAgIEY2IERBMShWTENEKTsgICAgIEY1IERBMChuYyk7CSAgRjQgQU4zOwogCSAqIEYzIEFOMihNSURfQUQpOyAgIEYyIEFOMShFQVJUSF9BRCk7IEYxIEFOMChURU1QKTsJICBGMCBHUEkrKG5jKTsKIAkgKi8KLQljdHJsX291dHcoMHgwMDAyLCBQT1JUX1BGQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAxMCAqLworCV9fcmF3X3dyaXRldygweDAwMDIsIFBPUlRfUEZDUik7CS8qIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDEwICovCiAKIAkvKiBHNyAoeCk7CSAgRzYgSVJRNShUT1VDSF9CVVNZKTsgRzUgSVJRNChUT1VDSF9JUlEpOyBHNCBHUEkoS0VZMik7CiAJICogRzMgR1BJKEtFWTEpOyAgRzIgR1BPKExFRDExKTsJRzEgR1BPKExFRDEwKTsgICAgIEcwIEdQTyhMRUQ5KTsKIAkgKi8KLQljdHJsX291dHcoMHgwM0Q1LCBQT1JUX1BHQ1IpOwkvKiAwMCAwMCAwMCAxMSAxMSAwMSAwMSAwMSAqLworCV9fcmF3X3dyaXRldygweDAzRDUsIFBPUlRfUEdDUik7CS8qIDAwIDAwIDAwIDExIDExIDAxIDAxIDAxICovCiAKIAkvKiBINyAoeCk7CSAgICAgIEg2IC9SQVMoQlJBUyk7CSAgSDUgL0NBUyhCQ0FTKTsgSDQgQ0tFKEJDS0UpOwogCSAqIEgzIEdQTyhFQVJUSF9PRkYpOyBIMiBHUE8oRUFSVEhfVEVTVCk7IEgxIFVTQjJfUFdSOwkgSDAgVVNCMV9QV1I7CiAJICovCi0JY3RybF9vdXR3KDB4MDA1MCwgUE9SVF9QSENSKTsJLyogMDAgMDAgMDAgMDAgMDEgMDEgMDAgMDAgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDUwLCBQT1JUX1BIQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMSAwMSAwMCAwMCAqLwogCiAJLyogSjcgKHgpOwkgIEo2IEFVRENLOwkgICBKNSBBU0VCUktBSzsJICAgIEo0IEFVREFUQTM7CiAJICogSjMgQVVEQVRBMjsJICBKMiBBVURBVEExOwkgICBKMSBBVURBVEEwOwkgICAgSjAgQVVEU1lOQzsKIAkgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BKQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUEpDUik7CS8qIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICovCiAKIAkvKiBLNyAoeCk7CSAgICBLNiAoeCk7CSAgICAgSzUgKHgpOwkgICBLNCAoeCk7CiAJICogSzMgUElOVDcoL1BXUjIpOyBLMiBQSU5UNigvUFdSMSk7IEsxIFBJTlQ1KG51KTsgSzAgUElOVDQoRkxBU0hfUkVBRFkpCiAJICovCi0JY3RybF9vdXR3KDB4MDBGRiwgUE9SVF9QS0NSKTsJLyogMDAgMDAgMDAgMDAgMTEgMTEgMTEgMTEgKi8KKwlfX3Jhd193cml0ZXcoMHgwMEZGLCBQT1JUX1BLQ1IpOwkvKiAwMCAwMCAwMCAwMCAxMSAxMSAxMSAxMSAqLwogCiAJLyogTDcgVFJTVDsJICAgTDYgVE1TOwkgICAgIEw1IFRETzsJCSAgTDQgVERJOwogCSAqIEwzIFRDSzsJICAgTDIgKHgpOwkgICAgIEwxICh4KTsJCSAgTDAgKHgpOwogCSAqLwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUExDUik7CS8qIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUE9SVF9QTENSKTsJLyogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgKi8KIAogCS8qIE03IEdQTyhDVVJSRU5UX1NJTkspOyAgICBNNiBHUE8oUFdSX1NXSVRDSCk7ICAgICBNNSBHUE8oTEFOX1NQRUVEKTsKIAkgKiBNNCBHUE8oTEFOX1JFU0VUKTsgICAgICAgTTMgR1BPKEJVWlpFUik7CSAgICBNMiBHUE8oTENEX0JMKTsKIAkgKiBNMSBDUzVCKENBTjNfQ1MpOwkgICAgTTAgR1BJKyhuYyk7CiAJICovCi0JY3RybF9vdXR3KDB4NTU1MiwgUE9SVF9QTUNSKTsJICAgLyogMDEgMDEgMDEgMDEgMDEgMDEgMDAgMTAgKi8KKwlfX3Jhd193cml0ZXcoMHg1NTUyLCBQT1JUX1BNQ1IpOwkgICAvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMCAxMCAqLwogCiAJLyogQ1VSUkVOVF9TSU5LPW9mZiwJUFdSX1NXSVRDSD1vZmYsIExBTl9TUEVFRD0xMDBNQml0LAogCSAqIExBTl9SRVNFVD1vZmYsCUJVWlpFUj1vZmYsCUxDRF9CTD1vZmYKIAkgKi8KICNpZiBDT05GSUdfU0hfTUFHSUNfUEFORUxfUjJfVkVSU0lPTiA9PSAyCi0JY3RybF9vdXRiKDB4MzAsIFBPUlRfUE1EUik7CisJX19yYXdfd3JpdGViKDB4MzAsIFBPUlRfUE1EUik7CiAjZWxpZiBDT05GSUdfU0hfTUFHSUNfUEFORUxfUjJfVkVSU0lPTiA9PSAzCi0JY3RybF9vdXRiKDB4RjAsIFBPUlRfUE1EUik7CisJX19yYXdfd3JpdGViKDB4RjAsIFBPUlRfUE1EUik7CiAjZWxzZQogI2Vycm9yIFVua25vd24gcmV2aXNpb24gb2YgUExBVEZPUk1fTVBfUjIKICNlbmRpZgpAQCAtMTY3LDggKzE2Nyw4IEBACiAJICogUDQgR1BPKG51KTsJICAgICAgIFAzIElSUTMoTEFOX0lSUSk7ICBQMiBJUlEyKENBTjNfSVJRKTsKIAkgKiBQMSBJUlExKENBTjJfSVJRKTsgIFAwIElSUTAoQ0FOMV9JUlEpCiAJICovCi0JY3RybF9vdXR3KDB4MDEwMCwgUE9SVF9QUENSKTsJLyogMDAgMDAgMDAgMDEgMDAgMDAgMDAgMDAgKi8KLQljdHJsX291dGIoMHgxMCwgUE9SVF9QUERSKTsKKwlfX3Jhd193cml0ZXcoMHgwMTAwLCBQT1JUX1BQQ1IpOwkvKiAwMCAwMCAwMCAwMSAwMCAwMCAwMCAwMCAqLworCV9fcmF3X3dyaXRlYigweDEwLCBQT1JUX1BQRFIpOwogCiAJLyogUjcgQTI1OwkgICAgIFI2IEEyNDsJICAgICBSNSBBMjM7CQkgIFI0IEEyMjsKIAkgKiBSMyBBMjE7CSAgICAgUjIgQTIwOwkgICAgIFIxIEExOTsJCSAgUjAgQTA7CkBAIC0xODUsMjIgKzE4NSwyMiBAQAogCS8qIFM3ICh4KTsJCVM2ICh4KTsgICAgICAgIFM1ICh4KTsJICAgICBTNCBHUE8oRUVQUk9NX0NTMik7CiAJICogUzMgR1BPKEVFUFJPTV9DUzEpOyAgUzIgU0lPRjBfVFhEOyAgUzEgU0lPRjBfUlhEOyBTMCBTSU9GMF9TQ0s7CiAJICovCi0JY3RybF9vdXR3KDB4MDE0MCwgUE9SVF9QU0NSKTsJLyogMDAgMDAgMDAgMDEgMDEgMDAgMDAgMDAgKi8KKwlfX3Jhd193cml0ZXcoMHgwMTQwLCBQT1JUX1BTQ1IpOwkvKiAwMCAwMCAwMCAwMSAwMSAwMCAwMCAwMCAqLwogCiAJLyogVDcgKHgpOwkgICBUNiAoeCk7CSAgVDUgKHgpOwkgIFQ0IENPTTFfQ1RTOwogCSAqIFQzIENPTTFfUlRTOwkgICBUMiBDT00xX1RYRDsJICBUMSBDT00xX1JYRDsJICBUMCBHUE8oV0RPRykKIAkgKi8KLQljdHJsX291dHcoMHgwMDAxLCBQT1JUX1BUQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMSAqLworCV9fcmF3X3dyaXRldygweDAwMDEsIFBPUlRfUFRDUik7CS8qIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAxICovCiAKIAkvKiBVNyAoeCk7CSAgICAgVTYgKHgpOwkgICBVNSAoeCk7CSAgVTQgR1BJKygvQUNfRkFVTFQpOwogCSAqIFUzIEdQTyhUT1VDSF9DUyk7IFUyIFRPVUNIX1RYRDsgVTEgVE9VQ0hfUlhEOyAgVTAgVE9VQ0hfU0NLOwogCSAqLwotCWN0cmxfb3V0dygweDAyNDAsIFBPUlRfUFVDUik7CS8qIDAwIDAwIDAwIDEwIDAxIDAwIDAwIDAwICovCisJX19yYXdfd3JpdGV3KDB4MDI0MCwgUE9SVF9QVUNSKTsJLyogMDAgMDAgMDAgMTAgMDEgMDAgMDAgMDAgKi8KIAogCS8qIFY3ICh4KTsJICBWNiAoeCk7CVY1ICh4KTsJCSAgVjQgR1BPKE1JRDIpOwogCSAqIFYzIEdQTyhNSUQxKTsgIFYyIENBUkRfVHhEOwlWMSBDQVJEX1J4RDsJICBWMCBHUEkrKC9CQVRfRkFVTFQpOwogCSAqLwotCWN0cmxfb3V0dygweDAxNDIsIFBPUlRfUFZDUik7CS8qIDAwIDAwIDAwIDAxIDAxIDAwIDAwIDEwICovCisJX19yYXdfd3JpdGV3KDB4MDE0MiwgUE9SVF9QVkNSKTsJLyogMDAgMDAgMDAgMDEgMDEgMDAgMDAgMTAgKi8KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG1wcjJfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKQEAgLTIwOSwyNCArMjA5LDI0IEBACiAJICogL1BDQ19DRDEsIC9QQ0NfQ0QyLCAgUENDX0JWRDEsIFBDQ19CVkQyLAogCSAqIC9JT0lTMTYsICBJUlE0LAlJUlE1LAkgIFVTQjFkX1NVU1BFTkQKIAkgKi8KLQljdHJsX291dHcoMHhBQUJDLCBQT1JUX1BTRUxBKTsKKwlfX3Jhd193cml0ZXcoMHhBQUJDLCBQT1JUX1BTRUxBKTsKIAkvKiBzZXQgUGluIFNlbGVjdCBSZWdpc3RlciBCOgogCSAqIC9TQ0lGMF9SVFMsIC9TQ0lGMF9DVFMsIExDRF9WQ1BXQywKIAkgKiBMQ0RfVkVQV0MsICBJSUNfU0RBLCAgICBJSUNfU0NMLCBSZXNlcnZlZAogCSAqLwotCWN0cmxfb3V0dygweDNDMDAsIFBPUlRfUFNFTEIpOworCV9fcmF3X3dyaXRldygweDNDMDAsIFBPUlRfUFNFTEIpOwogCS8qIHNldCBQaW4gU2VsZWN0IFJlZ2lzdGVyIEM6CiAJICogU0lPRjFfU0NLLCBTSU9GMV9SeEQsIFNDSUYxX1J4RCwgU0NJRjFfVHhELCBSZXNlcnZlZAogCSAqLwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUFNFTEMpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUFNFTEMpOwogCS8qIHNldCBQaW4gU2VsZWN0IFJlZ2lzdGVyIEQ6IFJlc2VydmVkLCBTSU9GMV9UeEQsIFJlc2VydmVkLCBTSU9GMV9NQ0xLLAogCSAqIFJlc2VydmVkLCBTSU9GMV9TWU5DLCBSZXNlcnZlZCwgU0NJRjFfU0NLLCBSZXNlcnZlZAogCSAqLwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUFNFTEQpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUFNFTEQpOwogCS8qIHNldCBVU0IgVHhSeCBDb250cm9sOiBSZXNlcnZlZCwgRFJWLCBSZXNlcnZlZCwgVVNCX1RSQU5TLCBVU0JfU0VMICovCi0JY3RybF9vdXR3KDB4MDEwMSwgUE9SVF9VVFJDVEwpOworCV9fcmF3X3dyaXRldygweDAxMDEsIFBPUlRfVVRSQ1RMKTsKIAkvKiBzZXQgVVNCIENsb2NrIENvbnRyb2w6IFVTU0NTLCBVU1NUQiwgUmVzZXJ2ZWQgKEhpZ2hCeXRlIGFsd2F5cyBBNSkgKi8KLQljdHJsX291dHcoMHhBNUMwLCBQT1JUX1VDTEtDUl9XKTsKKwlfX3Jhd193cml0ZXcoMHhBNUMwLCBQT1JUX1VDTEtDUl9XKTsKIAogCXNldHVwX2NoaXBfc2VsZWN0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXBvbGFyaXMuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXBvbGFyaXMuYwppbmRleCA2MjYwN2ViLi41OTQ4NjYzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1wb2xhcmlzLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcG9sYXJpcy5jCkBAIC01OSwxNSArNTksMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7CiAJLmJpdF9wb3MJPSBoZWFydGJlYXRfYml0X3BvcywKIAkubnJfYml0cwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X2JpdF9wb3MpLAotCS5yZWdzaXplCT0gOCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gUE9SVF9QQ0RSLAotCQkuZW5kCT0gUE9SVF9QQ0RSLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUE9SVF9QQ0RSLAorCS5lbmQJPSBQT1JUX1BDRFIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV84QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKQEAgLTc2LDggKzczLDggQEAKIAkuZGV2CT0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKIAl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBvbGFyaXNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CkBAIC05MiwxNSArODksMTUgQEAKIAlwcmludGsoS0VSTl9JTkZPICJDb25maWd1cmluZyBQb2xhcmlzIGV4dGVybmFsIGJ1c1xuIik7CiAKIAkvKiBDb25maWd1cmUgYXJlYSA1IHdpdGggMiB3YWl0IHN0YXRlcyAqLwotCXdjciA9IGN0cmxfaW53KFdDUjIpOworCXdjciA9IF9fcmF3X3JlYWR3KFdDUjIpOwogCXdjciAmPSAofkFSRUE1X1dBSVRfQ1RSTCk7CiAJd2NyIHw9IChXQUlUX1NUQVRFU18xMCA8PCAxMCk7Ci0JY3RybF9vdXR3KHdjciwgV0NSMik7CisJX19yYXdfd3JpdGV3KHdjciwgV0NSMik7CiAKIAkvKiBDb25maWd1cmUgYXJlYSA1IGZvciAzMi1iaXQgYWNjZXNzICovCi0JYmNyX21hc2sgPSBjdHJsX2ludyhCQ1IyKTsKKwliY3JfbWFzayA9IF9fcmF3X3JlYWR3KEJDUjIpOwogCWJjcl9tYXNrIHw9IDEgPDwgMTA7Ci0JY3RybF9vdXR3KGJjcl9tYXNrLCBCQ1IyKTsKKwlfX3Jhd193cml0ZXcoYmNyX21hc2ssIEJDUjIpOwogCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHBvbGFyaXNfZGV2aWNlcywKIAkJCQkgICAgQVJSQVlfU0laRShwb2xhcmlzX2RldmljZXMpKTsKQEAgLTEzMSwxMyArMTI4LDEzIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9wb2xhcmlzX2lycSh2b2lkKQogewogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KLQljdHJsX291dHcoMCwgQkNSX0lMQ1JBKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JCKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JDKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JEKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JFKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JGKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JHKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JBKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JCKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JDKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JEKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JFKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JGKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JHKTsKIAogCXJlZ2lzdGVyX2lwcl9jb250cm9sbGVyKCZpcHJfaXJxX2Rlc2MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwppbmRleCBlNWE4YTJmLi5mZTdlNjg2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLXBjYS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9yOGE2NjU5Ny5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxtYWNoL3NoNzc4NWxjci5oPgpAQCAtMzIsMjYgKzMzLDE3IEBACiAgKiBOT1RFOiBUaGlzIGJvYXJkIGhhcyAyIHBoeXNpY2FsIG1lbW9yeSBtYXBzLgogICoJIFBsZWFzZSBsb29rIGF0IGluY2x1ZGUvYXNtLXNoL3NoNzc4NWxjci5oIG9yIGhhcmR3YXJlIG1hbnVhbC4KICAqLwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBQTERfTEVEQ1IsCi0JCS5lbmQJPSBQTERfTEVEQ1IsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewotCS5yZWdzaXplID0gOCwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydAk9IFBMRF9MRURDUiwKKwkuZW5kCT0gUExEX0xFRENSLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fOEJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImhlYXJ0YmVhdCIsCiAJLmlkCQk9IC0xLAotCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbm9yX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKQEAgLTM0MSw4ICszMzMsMTQgQEAKIAlwbV9wb3dlcl9vZmYgPSBzaDc3ODVsY3JfcG93ZXJfb2ZmOwogCiAJLyogc201MDEgRFJBTSBjb25maWd1cmF0aW9uICovCi0Jc201MDFfcmVnID0gKHZvaWQgX19pb21lbSAqKTB4YjNlMDAwMDAgKyBTTTUwMV9EUkFNX0NPTlRST0w7Ci0Jd3JpdGVsKDB4MDAwMzA3YzIsIHNtNTAxX3JlZyk7CisJc201MDFfcmVnID0gaW9yZW1hcF9ub2NhY2hlKFNNMTA3X1JFR19BRERSLCBTTTUwMV9EUkFNX0NPTlRST0wpOworCWlmICghc201MDFfcmVnKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlvcmVtYXAgZXJyb3IuXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwl3cml0ZWwoMHgwMDAzMDdjMiwgc201MDFfcmVnICsgU001MDFfRFJBTV9DT05UUk9MKTsKKwlpb3VubWFwKHNtNTAxX3JlZyk7CiB9CiAKIC8qIFJldHVybiB0aGUgYm9hcmQgc3BlY2lmaWMgYm9vdCBtb2RlIHBpbiBjb25maWd1cmF0aW9uICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaG1pbi5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYwppbmRleCBiMWRjYmJjLi4zMjViZWQ1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaG1pbi5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNobWluLmMKQEAgLTE3LDggKzE3LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfc2htaW5faXJxKHZvaWQpCiB7Ci0JY3RybF9vdXR3KDB4MmEwMCwgUEZDX1BIQ1IpOwkvLyBJUlEwLTM9SVJRCi0JY3RybF9vdXR3KDB4MGFhYSwgSU5UQ19JQ1IxKTsJLy8gSVJRMC0zPUlSUS1tb2RlLExvdy1hY3RpdmUuCisJX19yYXdfd3JpdGV3KDB4MmEwMCwgUEZDX1BIQ1IpOwkvLyBJUlEwLTM9SVJRCisJX19yYXdfd3JpdGV3KDB4MGFhYSwgSU5UQ19JQ1IxKTsJLy8gSVJRMC0zPUlSUS1tb2RlLExvdy1hY3RpdmUuCiAJcGxhdF9pcnFfc2V0dXBfcGlucyhJUlFfTU9ERV9JUlEpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC10aXRhbi5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdGl0YW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGMzNmM3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXRpdGFuLmMKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIGFyY2gvc2gvYm9hcmRzL3RpdGFuL3NldHVwLmMgLSBTZXR1cCBmb3IgVGl0YW4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBKYW1pZSBMZW5laGFuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC90aXRhbi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF90aXRhbl9pcnEodm9pZCkKK3sKKwkvKiBlbmFibGUgaW5kaXZpZHVhbCBpbnRlcnJ1cHQgbW9kZSBmb3IgZXh0ZXJuYWxzICovCisJcGxhdF9pcnFfc2V0dXBfcGlucyhJUlFfTU9ERV9JUlEpOworfQorCitzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3RpdGFuIF9faW5pdG12ID0geworCS5tdl9uYW1lCT0gIlRpdGFuIiwKKwkubXZfaW5pdF9pcnEJPSBpbml0X3RpdGFuX2lycSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMKaW5kZXggMzZiOGJhYy4uYTliZDZlMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXVycXVlbGwuYwpAQCAtMiw3ICsyLDcgQEAKICAqIFJlbmVzYXMgVGVjaG5vbG9neSBDb3JwLiBTSDc3ODYgVXJxdWVsbCBTdXBwb3J0LgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCAgS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5ICBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgIFBhdWwgTXVuZHQKICAqCiAgKiBCYXNlZCBvbiBib2FyZC1zaDc3ODVsY3IuYwogICogQ29weXJpZ2h0IChDKSAyMDA4ICBZb3NoaWhpcm8gU2hpbW9kYQpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPG1hY2gvdXJxdWVsbC5oPgogI2luY2x1ZGUgPGNwdS9zaDc3ODYuaD4KICNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CkBAIC01MCwyNiArNTEsMTcgQEAKICAqLwogCiAvKiBIZWFydEJlYXQgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gQk9BUkRSRUcoU0xFRFIpLAotCQkuZW5kCT0gQk9BUkRSRUcoU0xFRFIpLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKLQkucmVnc2l6ZSA9IDE2LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gQk9BUkRSRUcoU0xFRFIpLAorCS5lbmQJPSBCT0FSRFJFRyhTTEVEUiksCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8xNkJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImhlYXJ0YmVhdCIsCiAJLmlkCQk9IC0xLAotCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiAvKiBMQU45MUMxMTEgKi8KQEAgLTE4NCw2ICsxNzYsMjcgQEAKIAlyZXR1cm4gX19yYXdfcmVhZHcoVUJPQVJEUkVHKE1EU1dNUikpOwogfQogCitzdGF0aWMgaW50IHVycXVlbGxfY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IHJldDsKKworCS8qCisJICogT25seSBoYW5kbGUgdGhlIEVYVEFMIGNhc2UsIGFueW9uZSBpbnRlcmZhY2luZyBhIGNyeXN0YWwKKwkgKiByZXNvbmF0b3Igd2lsbCBuZWVkIHRvIHByb3ZpZGUgdGhlaXIgb3duIGlucHV0IGNsb2NrLgorCSAqLworCWlmICh0ZXN0X21vZGVfcGluKE1PREVfUElOOSkpCisJCXJldHVybiAtRUlOVkFMOworCisJY2xrID0gY2xrX2dldChOVUxMLCAiZXh0YWwiKTsKKwlpZiAoIWNsayB8fCBJU19FUlIoY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKKwlyZXQgPSBjbGtfc2V0X3JhdGUoY2xrLCAzMzMzMzMzMyk7CisJY2xrX3B1dChjbGspOworCisJcmV0dXJuIHJldDsKK30KKwogLyogSW5pdGlhbGl6ZSB0aGUgYm9hcmQgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCB1cnF1ZWxsX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7CkBAIC0yMDAsNCArMjEzLDUgQEAKIAkubXZfc2V0dXAJPSB1cnF1ZWxsX3NldHVwLAogCS5tdl9pbml0X2lycQk9IHVycXVlbGxfaW5pdF9pcnEsCiAJLm12X21vZGVfcGlucwk9IHVycXVlbGxfbW9kZV9waW5zLAorCS5tdl9jbGtfaW5pdAk9IHVycXVlbGxfY2xrX2luaXQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1hcDMyNXJ4YS9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1hcDMyNXJ4YS9zZXR1cC5jCmluZGV4IDFmNWZhNWMuLjU3ZTM3ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMKQEAgLTE1OSwyMSArMTU5LDIxIEBACiAJbXNsZWVwKDEwMCk7CiAKIAkvKiBBU0QgQVAtMzIwLzMyNSBMQ0QgT04gKi8KLQljdHJsX291dHcoRlBHQV9MQ0RSRUdfVkFMLCBGUEdBX0xDRFJFRyk7CisJX19yYXdfd3JpdGV3KEZQR0FfTENEUkVHX1ZBTCwgRlBHQV9MQ0RSRUcpOwogCiAJLyogYmFja2xpZ2h0ICovCiAJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFMzLCAwKTsKLQljdHJsX291dHcoMHgxMDAsIEZQR0FfQktMUkVHKTsKKwlfX3Jhd193cml0ZXcoMHgxMDAsIEZQR0FfQktMUkVHKTsKIH0KIAogc3RhdGljIHZvaWQgYXAzMjBfd3ZnYV9wb3dlcl9vZmYodm9pZCAqYm9hcmRfZGF0YSkKIHsKIAkvKiBiYWNrbGlnaHQgKi8KLQljdHJsX291dHcoMCwgRlBHQV9CS0xSRUcpOworCV9fcmF3X3dyaXRldygwLCBGUEdBX0JLTFJFRyk7CiAJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFMzLCAxKTsKIAogCS8qIEFTRCBBUC0zMjAvMzI1IExDRCBPRkYgKi8KLQljdHJsX291dHcoMCwgRlBHQV9MQ0RSRUcpOworCV9fcmF3X3dyaXRldygwLCBGUEdBX0xDRFJFRyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfaW5mbyBsY2RjX2luZm8gPSB7CkBAIC00MjAsNyArNDIwLDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IDEwMSwKKwkJLnN0YXJ0CT0gMTAwLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC00NDMsNyArNDQzLDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IDI0LAorCQkuc3RhcnQJPSAyMywKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDcxLDggKzQ3MSw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbyBvdjc3MjVfaW5mbyA9IHsKLQkuYnVzd2lkdGgJPSBTT0NBTV9EQVRBV0lEVEhfOCwKLQkuZmxhZ3MJCT0gT1Y3NzJYX0ZMQUdfVkZMSVAgfCBPVjc3MlhfRkxBR19IRkxJUCwKKwkuZmxhZ3MJCT0gT1Y3NzJYX0ZMQUdfVkZMSVAgfCBPVjc3MlhfRkxBR19IRkxJUCB8IFwKKwkJCSAgT1Y3NzJYX0ZMQUdfOEJJVCwKIAkuZWRnZWN0cmwJPSBPVjc3MlhfQVVUT19FREdFQ1RSTCgweGYsIDApLAogfTsKIApAQCAtNTk1LDcgKzU5NSw3IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRaNCwgTlVMTCk7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRaNCwgMCk7IC8qIFNBRERSICovCiAKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSAmIH4weDAwMDEsIFBPUlRfTVNFTENSQik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfTVNFTENSQikgJiB+MHgwMDAxLCBQT1JUX01TRUxDUkIpOwogCiAJLyogRkxDVEwgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9GQ0UsIE5VTEwpOwpAQCAtNjEzLDkgKzYxMyw5IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRldFLCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9GUkIsIE5VTEwpOwogCi0JY3RybF9vdXR3KDAsIFBPUlRfSElaQ1JDKTsKLQljdHJsX291dHcoMHhGRkZGLCBQT1JUX0RSVkNSQSk7Ci0JY3RybF9vdXR3KDB4RkZGRiwgUE9SVF9EUlZDUkIpOworCV9fcmF3X3dyaXRldygwLCBQT1JUX0hJWkNSQyk7CisJX19yYXdfd3JpdGV3KDB4RkZGRiwgUE9SVF9EUlZDUkEpOworCV9fcmF3X3dyaXRldygweEZGRkYsIFBPUlRfRFJWQ1JCKTsKIAogCXBsYXRmb3JtX3Jlc291cmNlX3NldHVwX21lbW9yeSgmY2V1X2RldmljZSwgImNldSIsIDQgPDwgMjApOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWNheW1hbi9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtY2F5bWFuL2lycS5jCmluZGV4IDMzZjc3MDg1Li4xMzk0YjA3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWNheW1hbi9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWNheW1hbi9pcnEuYwpAQCAtNjYsOSArNjYsOSBAQAogCXJlZyA9IEVQTERfTUFTS19CQVNFICsgKChpcnEgLyA4KSA8PCAyKTsKIAliaXQgPSAxPDwoaXJxICUgOCk7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1hc2sgPSBjdHJsX2lubChyZWcpOworCW1hc2sgPSBfX3Jhd19yZWFkbChyZWcpOwogCW1hc2sgfD0gYml0OwotCWN0cmxfb3V0bChtYXNrLCByZWcpOworCV9fcmF3X3dyaXRlbChtYXNrLCByZWcpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtODMsOSArODMsOSBAQAogCXJlZyA9IEVQTERfTUFTS19CQVNFICsgKChpcnEgLyA4KSA8PCAyKTsKIAliaXQgPSAxPDwoaXJxICUgOCk7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1hc2sgPSBjdHJsX2lubChyZWcpOworCW1hc2sgPSBfX3Jhd19yZWFkbChyZWcpOwogCW1hc2sgJj0gfmJpdDsKLQljdHJsX291dGwobWFzaywgcmVnKTsKKwlfX3Jhd193cml0ZWwobWFzaywgcmVnKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTEwOSw4ICsxMDksOCBAQAogCQl1bnNpZ25lZCBsb25nIHN0YXR1czsKIAkJaW50IGk7CiAKLQkJc3RhdHVzID0gY3RybF9pbmwoRVBMRF9TVEFUVVNfQkFTRSkgJgotCQkJIGN0cmxfaW5sKEVQTERfTUFTS19CQVNFKSAmIDB4ZmY7CisJCXN0YXR1cyA9IF9fcmF3X3JlYWRsKEVQTERfU1RBVFVTX0JBU0UpICYKKwkJCSBfX3Jhd19yZWFkbChFUExEX01BU0tfQkFTRSkgJiAweGZmOwogCQlpZiAoc3RhdHVzID09IDApIHsKIAkJCWlycSA9IC0xOwogCQl9IGVsc2UgewpAQCAtMTI2LDggKzEyNiw4IEBACiAJCXVuc2lnbmVkIGxvbmcgc3RhdHVzOwogCQlpbnQgaTsKIAotCQlzdGF0dXMgPSBjdHJsX2lubChFUExEX1NUQVRVU19CQVNFICsgMyAqIHNpemVvZih1MzIpKSAmCi0JCQkgY3RybF9pbmwoRVBMRF9NQVNLX0JBU0UgKyAzICogc2l6ZW9mKHUzMikpICYgMHhmZjsKKwkJc3RhdHVzID0gX19yYXdfcmVhZGwoRVBMRF9TVEFUVVNfQkFTRSArIDMgKiBzaXplb2YodTMyKSkgJgorCQkJIF9fcmF3X3JlYWRsKEVQTERfTUFTS19CQVNFICsgMyAqIHNpemVvZih1MzIpKSAmIDB4ZmY7CiAJCWlmIChzdGF0dXMgPT0gMCkgewogCQkJaXJxID0gLTE7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jCmluZGV4IGY1NWZjOGUuLmQ5MzI2NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jCkBAIC0xMzUsMyArMTM1LDMwIEBACiAJLyogTm90IHJlYWNoZWQgKi8KIAlyZXR1cm4gaXJxOwogfQorCit2b2lkIHN5c3RlbWFzaWNfaXJxX2luaXQodm9pZCkKK3sKKwlpbnQgaSwgbmlkID0gY3B1X3RvX25vZGUoYm9vdF9jcHVfZGF0YSk7CisKKwkvKiBBc3NpZ24gYWxsIHZpcnR1YWwgSVJRcyB0byB0aGUgU3lzdGVtIEFTSUMgaW50LiBoYW5kbGVyICovCisJZm9yIChpID0gSFdfRVZFTlRfSVJRX0JBU0U7IGkgPCBIV19FVkVOVF9JUlFfTUFYOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGlycTsKKworCQlpcnEgPSBjcmVhdGVfaXJxX25yKGksIG5pZCk7CisJCWlmICh1bmxpa2VseShpcnEgPT0gMCkpIHsKKwkJCXByX2VycigiJXM6IGZhaWxlZCBob29raW5nIGlycSAlZCBmb3Igc3lzdGVtYXNpY1xuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaSk7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAodW5saWtlbHkoaXJxICE9IGkpKSB7CisJCQlwcl9lcnIoIiVzOiBnb3QgaXJxICVkIGJ1dCB3YW50ZWQgJWQsIGJhaWxpbmcuXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBpcnEsIGkpOworCQkJZGVzdHJveV9pcnEoaXJxKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmc3lzdGVtYXNpY19pbnQsCisJCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9ydGMuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3J0Yy5jCmluZGV4IGE3NDMzNjguLjA2MWQ2NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3J0Yy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3J0Yy5jCkBAIC0zNSwxMSArMzUsMTEgQEAKIAl1bnNpZ25lZCBsb25nIHZhbDEsIHZhbDI7CiAKIAlkbyB7Ci0JCXZhbDEgPSAoKGN0cmxfaW5sKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8Ci0JCQkoY3RybF9pbmwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CisJCXZhbDEgPSAoKF9fcmF3X3JlYWRsKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8CisJCQkoX19yYXdfcmVhZGwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CiAKLQkJdmFsMiA9ICgoY3RybF9pbmwoQUlDQV9SVENfU0VDU19IKSAmIDB4ZmZmZikgPDwgMTYpIHwKLQkJCShjdHJsX2lubChBSUNBX1JUQ19TRUNTX0wpICYgMHhmZmZmKTsKKwkJdmFsMiA9ICgoX19yYXdfcmVhZGwoQUlDQV9SVENfU0VDU19IKSAmIDB4ZmZmZikgPDwgMTYpIHwKKwkJCShfX3Jhd19yZWFkbChBSUNBX1JUQ19TRUNTX0wpICYgMHhmZmZmKTsKIAl9IHdoaWxlICh2YWwxICE9IHZhbDIpOwogCiAJdHMtPnR2X3NlYyA9IHZhbDEgLSBUV0VOVFlfWUVBUlM7CkBAIC02MCwxNCArNjAsMTQgQEAKIAl1bnNpZ25lZCBsb25nIGFkaiA9IHNlY3MgKyBUV0VOVFlfWUVBUlM7CiAKIAlkbyB7Ci0JCWN0cmxfb3V0bCgoYWRqICYgMHhmZmZmMDAwMCkgPj4gMTYsIEFJQ0FfUlRDX1NFQ1NfSCk7Ci0JCWN0cmxfb3V0bCgoYWRqICYgMHhmZmZmKSwgQUlDQV9SVENfU0VDU19MKTsKKwkJX19yYXdfd3JpdGVsKChhZGogJiAweGZmZmYwMDAwKSA+PiAxNiwgQUlDQV9SVENfU0VDU19IKTsKKwkJX19yYXdfd3JpdGVsKChhZGogJiAweGZmZmYpLCBBSUNBX1JUQ19TRUNTX0wpOwogCi0JCXZhbDEgPSAoKGN0cmxfaW5sKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8Ci0JCQkoY3RybF9pbmwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CisJCXZhbDEgPSAoKF9fcmF3X3JlYWRsKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8CisJCQkoX19yYXdfcmVhZGwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CiAKLQkJdmFsMiA9ICgoY3RybF9pbmwoQUlDQV9SVENfU0VDU19IKSAmIDB4ZmZmZikgPDwgMTYpIHwKLQkJCShjdHJsX2lubChBSUNBX1JUQ19TRUNTX0wpICYgMHhmZmZmKTsKKwkJdmFsMiA9ICgoX19yYXdfcmVhZGwoQUlDQV9SVENfU0VDU19IKSAmIDB4ZmZmZikgPDwgMTYpIHwKKwkJCShfX3Jhd19yZWFkbChBSUNBX1JUQ19TRUNTX0wpICYgMHhmZmZmKTsKIAl9IHdoaWxlICh2YWwxICE9IHZhbDIpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3Qvc2V0dXAuYwppbmRleCBhNGI3NDAyLi5hZDFhNGRiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3NldHVwLmMKQEAgLTI4LDI1ICsyOCw4IEBACiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxtYWNoL3N5c2FzaWMuaD4KIAotZXh0ZXJuIHN0cnVjdCBpcnFfY2hpcCBzeXN0ZW1hc2ljX2ludDsKLWV4dGVybiB2b2lkIGFpY2FfdGltZV9pbml0KHZvaWQpOwotZXh0ZXJuIGludCBzeXN0ZW1hc2ljX2lycV9kZW11eChpbnQpOwotCiBzdGF0aWMgdm9pZCBfX2luaXQgZHJlYW1jYXN0X3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JaW50IGk7Ci0KLQkvKiBNYXNrIGFsbCBoYXJkd2FyZSBldmVudHMgKi8KLQkvKiBYWFggKi8KLQotCS8qIEFja25vd2xlZGdlIGFueSBwcmV2aW91cyBldmVudHMgKi8KLQkvKiBYWFggKi8KLQotCS8qIEFzc2lnbiBhbGwgdmlydHVhbCBJUlFzIHRvIHRoZSBTeXN0ZW0gQVNJQyBpbnQuIGhhbmRsZXIgKi8KLQlmb3IgKGkgPSBIV19FVkVOVF9JUlFfQkFTRTsgaSA8IEhXX0VWRU5UX0lSUV9NQVg7IGkrKykKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZzeXN0ZW1hc2ljX2ludCwKLQkJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwotCiAJYm9hcmRfdGltZV9pbml0ID0gYWljYV90aW1lX2luaXQ7CiB9CiAKQEAgLTU0LDQgKzM3LDUgQEAKIAkubXZfbmFtZQkJPSAiU2VnYSBEcmVhbWNhc3QiLAogCS5tdl9zZXR1cAkJPSBkcmVhbWNhc3Rfc2V0dXAsCiAJLm12X2lycV9kZW11eAkJPSBzeXN0ZW1hc2ljX2lycV9kZW11eCwKKwkubXZfaW5pdF9pcnEJCT0gc3lzdGVtYXNpY19pcnFfaW5pdCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NkcmFtLlMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NkcmFtLlMKaW5kZXggODMzNDQwMC4uMzk2M2M2ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZHJhbS5TCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2RyYW0uUwpAQCAtMzcsNiArMzcsMTAgQEAKIAkuYmFsaWduIDQKIEVOVFJZKGVjb3ZlYzI0X3NkcmFtX2xlYXZlX3N0YXJ0KQogCisJbW92LmwJQChTSF9TTEVFUF9NT0RFLCByNSksIHIwCisJdHN0CSNTVVNQX1NIX1JTVEFOREJZLCByMAorCWJmCXJlc3VtZV9yc3RhbmRieQorCiAJLyogREJTQzogcHV0IG1lbW9yeSBpbiBhdXRvLXJlZnJlc2ggbW9kZSAqLwogCiAJRUQgMHhGRDAwMDA0MCwgMHgwMDAwMDAwMCAvKiBEQlJGUEROMCAqLwpAQCAtNDksNCArNTMsNTkgQEAKIAlydHMKIAkgbm9wCiAKK3Jlc3VtZV9yc3RhbmRieToKKworCS8qIERCU0M6IHJlLWluaXRpYWxpemUgYW5kIHB1dCBpbiBhdXRvLXJlZnJlc2ggKi8KKworCUVEIDB4RkQwMDAxMDgsIDB4MDAwMDAxODEgLyogREJQRENOVDAgKi8KKwlFRCAweEZEMDAwMDIwLCAweDAxNUIwMDAyIC8qIERCQ09ORiAqLworCUVEIDB4RkQwMDAwMzAsIDB4MDMwNzE1MDIgLyogREJUUjAgKi8KKwlFRCAweEZEMDAwMDM0LCAweDAyMDIwMTAyIC8qIERCVFIxICovCisJRUQgMHhGRDAwMDAzOCwgMHgwMTA5MDQwNSAvKiBEQlRSMiAqLworCUVEIDB4RkQwMDAwM0MsIDB4MDAwMDAwMDIgLyogREJUUjMgKi8KKwlFRCAweEZEMDAwMDA4LCAweDAwMDAwMDA1IC8qIERCS0lORCAqLworCUVEIDB4RkQwMDAwNDAsIDB4MDAwMDAwMDEgLyogREJSRlBETjAgKi8KKwlFRCAweEZEMDAwMDQwLCAweDAwMDAwMDAwIC8qIERCUkZQRE4wICovCisJRUQgMHhGRDAwMDAxOCwgMHgwMDAwMDAwMSAvKiBEQkNLRUNOVCAqLworCisJbW92CSMxMDAscjAKK1dBSVRfNDAwTlM6CisJZHQJcjAKKwliZglXQUlUXzQwME5TCisKKwlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDAyIC8qIERCQ01EQ05UIChQQUxMKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMjAwMDAgLyogREJNUkNOVCAoRU1SMikgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDMwMDAwIC8qIERCTVJDTlQgKEVNUjMpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAxMDAwNCAvKiBEQk1SQ05UIChFTVIpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAwMDUzMiAvKiBEQk1SQ05UIChNUlMpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwMiAvKiBEQkNNRENOVCAoUEFMTCkgKi8KKwlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDA0IC8qIERCQ01EQ05UIChSRUYpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwNCAvKiBEQkNNRENOVCAoUkVGKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMDA0MzIgLyogREJNUkNOVCAoTVJTKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMTAzYzAgLyogREJNUkNOVCAoRU1SKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMTAwNDAgLyogREJNUkNOVCAoRU1SKSAqLworCisJbW92CSMxMDAscjAKK1dBSVRfNDAwTlNfMjoKKwlkdAlyMAorCWJmCVdBSVRfNDAwTlNfMgorCisJRUQgMHhGRDAwMDAxMCwgMHgwMDAwMDAwMSAvKiBEQkVOICovCisJRUQgMHhGRDAwMDA0NCwgMHgwMDAwMDUwZiAvKiBEQlJGUEROMSAqLworCUVEIDB4RkQwMDAwNDgsIDB4MjM2ODAwZTYgLyogREJSRlBETjIgKi8KKworCW1vdi5sCURVTU1ZLHIwCisJbW92LmwJQHIwLCByMSAvKiBmb3JjZSBzaW5nbGUgZHVtbXkgcmVhZCAqLworCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwMiAvKiBEQkNNRENOVCAoUEFMTCkgKi8KKwlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDA0IC8qIERCQ01EQ05UIChSRUYpICovCisJRUQgMHhGRDAwMDEwOCwgMHgwMDAwMDA4MCAvKiBEQlBEQ05UMCAqLworCUVEIDB4RkQwMDAwNDAsIDB4MDAwMTAwMDAgLyogREJSRlBETjAgKi8KKworCXJ0cworCSBub3AKKworCS5iYWxpZ24gNAorRFVNTVk6CS5sb25nCTB4YWM0MDAwMDAKKwogRU5UUlkoZWNvdmVjMjRfc2RyYW1fbGVhdmVfZW5kKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCmluZGV4IDVjMjQ2MjguLjM5ZWQ4NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKQEAgLTY0LDE4ICs2NCwxNiBAQAogCiAvKiBIZWFydGJlYXQgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGxlZF9wb3NbXSA9IHsgMCwgMSwgMiwgMyB9OworCiBzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewotCS5yZWdzaXplID0gOCwKIAkubnJfYml0cyA9IDQsCiAJLmJpdF9wb3MgPSBsZWRfcG9zLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gMHhBNDA1MDEyQywgLyogUFRHICovCi0JCS5lbmQgICAgPSAweEE0MDUwMTJFIC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgID0gMHhBNDA1MDEyQywgLyogUFRHICovCisJLmVuZCAgICA9IDB4QTQwNTAxMkUgLSAxLAorCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzhCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewpAQCAtODQsOCArODIsOCBAQAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhID0gJmhlYXJ0YmVhdF9kYXRhLAogCX0sCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IDEsCisJLnJlc291cmNlICAgICAgID0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIC8qIE1URCAqLwpAQCAtNDU1LDcgKzQ1Myw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IDEwMSwKKwkJLnN0YXJ0ICA9IDEwMCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDkxLDcgKzQ4OSw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IDI0LAorCQkuc3RhcnQgID0gMjMsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTY5OCwxMyArNjk2LDEzIEBACiAjZGVmaW5lIEZDTEtCQ1IJCTB4YTQxNTAwMGMKIHN0YXRpYyB2b2lkIGZzaW1ja19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQl1MzIgc3RhdHVzID0gY3RybF9pbmwoY2xrLT5lbmFibGVfcmVnKTsKKwl1MzIgc3RhdHVzID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKIAogCS8qIHVzZSBleHRlcm5hbCBjbG9jayAqLwogCXN0YXR1cyAmPSB+MHgwMDAwMDBmZjsKIAlzdGF0dXMgfD0gMHgwMDAwMDA4MDsKIAotCWN0cmxfb3V0bChzdGF0dXMsIGNsay0+ZW5hYmxlX3JlZyk7CisJX19yYXdfd3JpdGVsKHN0YXR1cywgY2xrLT5lbmFibGVfcmVnKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIGZzaW1ja19jbGtfb3BzID0gewpAQCAtNzUzLDYgKzc1MSwyNiBAQAogCX0sCiB9OwogCisvKiBJckRBICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlyZGFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJJckRBIiwKKwkJLnN0YXJ0ICA9IDB4QTQ1RDAwMDAsCisJCS5lbmQgICAgPSAweEE0NUQwMDQ5LAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSAyMCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpcmRhX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic2hfc2lyIiwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGlyZGFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgICAgICAgPSBpcmRhX3Jlc291cmNlcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplY292ZWNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmhlYXJ0YmVhdF9kZXZpY2UsCiAJJm5vcl9mbGFzaF9kZXZpY2UsCkBAIC03NzMsOCArNzkxLDEwIEBACiAJJmNhbWVyYV9kZXZpY2VzWzFdLAogCSZjYW1lcmFfZGV2aWNlc1syXSwKIAkmZnNpX2RldmljZSwKKwkmaXJkYV9kZXZpY2UsCiB9OwogCisjaWZkZWYgQ09ORklHX0kyQwogI2RlZmluZSBFRVBST01fQUREUiAweDUwCiBzdGF0aWMgdTggbWFjX3JlYWQoc3RydWN0IGkyY19hZGFwdGVyICphLCB1OCBjb21tYW5kKQogewpAQCAtODE3LDYgKzgzNywxMiBAQAogCQltc2xlZXAoMTApOwogCX0KIH0KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgc2hfZXRoX2luaXQoc3RydWN0IHNoX2V0aF9wbGF0X2RhdGEgKnBkKQoreworCXByX2VycigidW5hYmxlIHRvIHJlYWQgc2hfZXRoIE1BQyBhZGRyZXNzXG4iKTsKK30KKyNlbmRpZgogCiAjZGVmaW5lIFBPUlRfSElaQSAweEE0MDUwMTU4CiAjZGVmaW5lIElPRFJJVkVBICAweEE0MDUwMThBCkBAIC04MzEsNyArODU3LDggQEAKIAlzdHJ1Y3QgY2xrICpjbGs7CiAKIAkvKiByZWdpc3RlciBib2FyZCBzcGVjaWZpYyBzZWxmLXJlZnJlc2ggY29kZSAqLwotCXNoX21vYmlsZV9yZWdpc3Rlcl9zZWxmX3JlZnJlc2goU1VTUF9TSF9TVEFOREJZIHwgU1VTUF9TSF9TRiwKKwlzaF9tb2JpbGVfcmVnaXN0ZXJfc2VsZl9yZWZyZXNoKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YgfAorCQkJCQlTVVNQX1NIX1JTVEFOREJZLAogCQkJCQkmZWNvdmVjMjRfc2RyYW1fZW50ZXJfc3RhcnQsCiAJCQkJCSZlY292ZWMyNF9zZHJhbV9lbnRlcl9lbmQsCiAJCQkJCSZlY292ZWMyNF9zZHJhbV9sZWF2ZV9zdGFydCwKQEAgLTg1NSw3ICs4ODIsNyBAQAogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BURzEsIDApOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BURzIsIDApOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BURzMsIDApOwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9ISVpBKSAmIH4oMHgxIDw8IDEpKSAsIFBPUlRfSElaQSk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX0hJWkEpICYgfigweDEgPDwgMSkpICwgUE9SVF9ISVpBKTsKIAogCS8qIGVuYWJsZSBTSC1FdGggKi8KIAlncGlvX3JlcXVlc3QoR1BJT19QVEExLCBOVUxMKTsKQEAgLTg3NSwxNiArOTAyLDE2IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTE5LU1RBLCAgICAgICBOVUxMKTsKIAogCS8qIGVuYWJsZSBVU0IgKi8KLQljdHJsX291dHcoMHgwMDAwLCAweEE0RDgwMDAwKTsKLQljdHJsX291dHcoMHgwMDAwLCAweEE0RDkwMDAwKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCAweEE0RDgwMDAwKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCAweEE0RDkwMDAwKTsKIAlncGlvX3JlcXVlc3QoR1BJT19QVEIzLCAgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRCNCwgIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX1BUQjUsICBOVUxMKTsKIAlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1BUQjMpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUQjQsIDApOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUQjUsIDApOwotCWN0cmxfb3V0dygweDA2MDAsIDB4YTQwNTAxZDQpOwotCWN0cmxfb3V0dygweDA2MDAsIDB4YTQwNTAxOTIpOworCV9fcmF3X3dyaXRldygweDA2MDAsIDB4YTQwNTAxZDQpOworCV9fcmF3X3dyaXRldygweDA2MDAsIDB4YTQwNTAxOTIpOwogCiAJaWYgKGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUFRCMykpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVVNCMSBmdW5jdGlvbiBpcyBzZWxlY3RlZFxuIik7CkBAIC05MjUsNyArOTUyLDcgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RWU1lOLCAgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERE9OLCAgIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRExDTEssICBOVUxMKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfSElaQSkgJiB+MHgwMDAxKSwgUE9SVF9ISVpBKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfSElaQSkgJiB+MHgwMDAxKSwgUE9SVF9ISVpBKTsKIAogCWdwaW9fcmVxdWVzdChHUElPX1BURTYsIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX1BUVTEsIE5VTEwpOwpAQCAtOTM3LDcgKzk2NCw3IEBACiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRBMiwgMCk7CiAKIAkvKiBJL08gYnVmZmVyIGRyaXZlIGFiaWxpdHkgaXMgaGlnaCAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoSU9EUklWRUEpICYgfjB4MDBjMCkgfCAweDAwODAgLCBJT0RSSVZFQSk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhJT0RSSVZFQSkgJiB+MHgwMGMwKSB8IDB4MDA4MCAsIElPRFJJVkVBKTsKIAogCWlmIChncGlvX2dldF92YWx1ZShHUElPX1BURTYpKSB7CiAJCS8qIERWSSAqLwpAQCAtMTA2OSw3ICsxMDk2LDcgQEAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEI3LCAwKTsKIAogCS8qIEkvTyBidWZmZXIgZHJpdmUgYWJpbGl0eSBpcyBoaWdoIGZvciBTREhJMSAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoSU9EUklWRUEpICYgfjB4MzAwMCkgfCAweDIwMDAgLCBJT0RSSVZFQSk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhJT0RSSVZFQSkgJiB+MHgzMDAwKSB8IDB4MjAwMCAsIElPRFJJVkVBKTsKICNlbHNlCiAJLyogZW5hYmxlIE1TSU9GMCBvbiBDTjExIChuZWVkcyBEUzIuNCBzZXQgdG8gT0ZGKSAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX01TSU9GMF9UWEQsIE5VTEwpOwpAQCAtMTEwNyw2ICsxMTM0LDExIEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJT0JMUkNLLCAgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQ0xLQVVESU9CTywgTlVMTCk7CiAKKwkvKiBzZXQgU1BVMiBjbG9jayB0byA4My40IE1IeiAqLworCWNsayA9IGNsa19nZXQoTlVMTCwgInNwdV9jbGsiKTsKKwljbGtfc2V0X3JhdGUoY2xrLCBjbGtfcm91bmRfcmF0ZShjbGssIDgzMzMzMzMzKSk7CisJY2xrX3B1dChjbGspOworCiAJLyogY2hhbmdlIHBhcmVudCBvZiBGU0kgQiAqLwogCWNsayA9IGNsa19nZXQoTlVMTCwgImZzaWJfY2xrIik7CiAJY2xrX3JlZ2lzdGVyKCZmc2ltY2tiX2Nsayk7CkBAIC0xMTIzLDYgKzExNTUsMTcgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JTlRDX0lSUTEsIE5VTEwpOwogCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fRk5fSU5UQ19JUlExKTsKIAorCS8qIHNldCBWUFUgY2xvY2sgdG8gMTY2IE1IeiAqLworCWNsayA9IGNsa19nZXQoTlVMTCwgInZwdV9jbGsiKTsKKwljbGtfc2V0X3JhdGUoY2xrLCBjbGtfcm91bmRfcmF0ZShjbGssIDE2NjAwMDAwMCkpOworCWNsa19wdXQoY2xrKTsKKworCS8qIGVuYWJsZSBJckRBICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJEQV9PVVQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSREFfSU4sICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QVFU1LCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFU1LCAwKTsKKwogCS8qIGVuYWJsZSBJMkMgZGV2aWNlICovCiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgaTJjMF9kZXZpY2VzLAogCQkJCUFSUkFZX1NJWkUoaTJjMF9kZXZpY2VzKSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBtcC5jCmluZGV4IDgzYzI4YmMuLjk4OTNmZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBtcC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBtcC5jCkBAIC02NCw3ICs2NCw3IEBACiAKIHVuc2lnbmVkIGNoYXIgKiBfX2luaXQgaGlnaGxhbmRlcl9wbGF0X2lycV9zZXR1cCh2b2lkKQogewotCWlmICgoY3RybF9pbncoMHhhNDAwMDcwMCkgJiAweGYwMDApID09IDB4MjAwMCkgeworCWlmICgoX19yYXdfcmVhZHcoMHhhNDAwMDcwMCkgJiAweGYwMDApID09IDB4MjAwMCkgewogCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyByNzc4MG1wIGludGVycnVwdCBjb250cm9sbGVyLlxuIik7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIAkJcmV0dXJuIGlybDJpcnE7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwcnAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jCmluZGV4IGI3MjFlODYuLjA4MDViMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAKIHVuc2lnbmVkIGNoYXIgKiBfX2luaXQgaGlnaGxhbmRlcl9wbGF0X2lycV9zZXR1cCh2b2lkKQogewotCWlmIChjdHJsX2ludygweGE1MDAwNjAwKSkgeworCWlmIChfX3Jhd19yZWFkdygweGE1MDAwNjAwKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyByNzc4MHJwIGludGVycnVwdCBjb250cm9sbGVyLlxuIik7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIAkJcmV0dXJuIGlybDJpcnE7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3Nzg1cnAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODVycC5jCmluZGV4IDM4MTFiMDYuLjU1OGIyNDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODVycC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODVycC5jCkBAIC02NiwyMCArNjYsMjAgQEAKIAogdW5zaWduZWQgY2hhciAqIF9faW5pdCBoaWdobGFuZGVyX3BsYXRfaXJxX3NldHVwKHZvaWQpCiB7Ci0JaWYgKChjdHJsX2ludygweGE0MDAwMTU4KSAmIDB4ZjAwMCkgIT0gMHgxMDAwKQorCWlmICgoX19yYXdfcmVhZHcoMHhhNDAwMDE1OCkgJiAweGYwMDApICE9IDB4MTAwMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlwcmludGsoS0VSTl9JTkZPICJVc2luZyByNzc4NXJwIGludGVycnVwdCBjb250cm9sbGVyLlxuIik7CiAKLQljdHJsX291dHcoMHgwMDAwLCBQQV9JUkxTU1IxKTsJLyogRlBHQSBJUkxTU1IxKENGX0NEIGNsZWFyKSAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIFBBX0lSTFNTUjEpOwkvKiBGUEdBIElSTFNTUjEoQ0ZfQ0QgY2xlYXIpICovCiAKIAkvKiBTZXR1cCB0aGUgRlBHQSBJUkwgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQQV9JUkxQUkEpOwkvKiBGUEdBIElSTEEgKi8KLQljdHJsX291dHcoMHhlNTk4LCBQQV9JUkxQUkIpOwkvKiBGUEdBIElSTEIgKi8KLQljdHJsX291dHcoMHg3MDYwLCBQQV9JUkxQUkMpOwkvKiBGUEdBIElSTEMgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQQV9JUkxQUkQpOwkvKiBGUEdBIElSTEQgKi8KLQljdHJsX291dHcoMHg0MzIxLCBQQV9JUkxQUkUpOwkvKiBGUEdBIElSTEUgKi8KLQljdHJsX291dHcoMHhkY2JhLCBQQV9JUkxQUkYpOwkvKiBGUEdBIElSTEYgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQQV9JUkxQUkEpOwkvKiBGUEdBIElSTEEgKi8KKwlfX3Jhd193cml0ZXcoMHhlNTk4LCBQQV9JUkxQUkIpOwkvKiBGUEdBIElSTEIgKi8KKwlfX3Jhd193cml0ZXcoMHg3MDYwLCBQQV9JUkxQUkMpOwkvKiBGUEdBIElSTEMgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQQV9JUkxQUkQpOwkvKiBGUEdBIElSTEQgKi8KKwlfX3Jhd193cml0ZXcoMHg0MzIxLCBQQV9JUkxQUkUpOwkvKiBGUEdBIElSTEUgKi8KKwlfX3Jhd193cml0ZXcoMHhkY2JhLCBQQV9JUkxQUkYpOwkvKiBGUEdBIElSTEYgKi8KIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIAlyZXR1cm4gaXJsMmlycTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9wc3cuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9wc3cuYwppbmRleCAzN2IxYTJlLi41MjI3ODYzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvcHN3LmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bzdy5jCkBAIC0yNCw3ICsyNCw3IEBACiAJdW5zaWduZWQgaW50IGwsIG1hc2s7CiAJaW50IHJldCA9IDA7CiAKLQlsID0gY3RybF9pbncoUEFfREJTVyk7CisJbCA9IF9fcmF3X3JlYWR3KFBBX0RCU1cpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSdzIG5vIHN0YXRlIGNoYW5nZSAqLwogCWlmIChwc3ctPnN0YXRlKSB7CkBAIC00NSw3ICs0NSw3IEBACiBvdXQ6CiAJLyogQ2xlYXIgdGhlIHN3aXRjaCBJUlFzICovCiAJbCB8PSAoMHg3IDw8IDEyKTsKLQljdHJsX291dHcobCwgUEFfREJTVyk7CisJX19yYXdfd3JpdGV3KGwsIFBBX0RCU1cpOwogCiAJcmV0dXJuIElSUV9SRVRWQUwocmV0KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMKaW5kZXggZjY2M2MxNC4uYWZmZDY2NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMKQEAgLTMxMSwxMyArMzExLDEzIEBACiAgKi8KIHN0YXRpYyBpbnQgaXZkcl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljdHJsX291dHcoY3RybF9pbncoUEFfSVZEUkNUTCkgfCAoMSA8PCBJVkRSX0NLX09OKSwgUEFfSVZEUkNUTCk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBBX0lWRFJDVEwpIHwgKDEgPDwgSVZEUl9DS19PTiksIFBBX0lWRFJDVEwpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBpdmRyX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljdHJsX291dHcoY3RybF9pbncoUEFfSVZEUkNUTCkgJiB+KDEgPDwgSVZEUl9DS19PTiksIFBBX0lWRFJDVEwpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQQV9JVkRSQ1RMKSAmIH4oMSA8PCBJVkRSX0NLX09OKSwgUEFfSVZEUkNUTCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBpdmRyX2Nsa19vcHMgPSB7CkBAIC0zMzcsNyArMzM3LDcgQEAKIHN0YXRpYyB2b2lkIHI3NzgwcnBfcG93ZXJfb2ZmKHZvaWQpCiB7CiAJaWYgKG1hY2hfaXNfcjc3ODBtcCgpIHx8IG1hY2hfaXNfcjc3ODVycCgpKQotCQljdHJsX291dHcoMHgwMDAxLCBQQV9QT0ZGKTsKKwkJX19yYXdfd3JpdGV3KDB4MDAwMSwgUEFfUE9GRik7CiB9CiAKIC8qCkBAIC0zNDUsNyArMzQ1LDcgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IGhpZ2hsYW5kZXJfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKLQl1MTYgdmVyID0gY3RybF9pbncoUEFfVkVSUkVHKTsKKwl1MTYgdmVyID0gX19yYXdfcmVhZHcoUEFfVkVSUkVHKTsKIAlpbnQgaTsKIAogCXByaW50ayhLRVJOX0lORk8gIlJlbmVzYXMgU29sdXRpb25zIEhpZ2hsYW5kZXIgJXMgc3VwcG9ydC5cbiIsCkBAIC0zNzAsMTIgKzM3MCwxMiBAQAogCQljbGtfZW5hYmxlKGNsayk7CiAJfQogCi0JY3RybF9vdXR3KDB4MDAwMCwgUEFfT0JMRUQpOwkvKiBDbGVhciBMRUQuICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUEFfT0JMRUQpOwkvKiBDbGVhciBMRUQuICovCiAKIAlpZiAobWFjaF9pc19yNzc4MHJwKCkpCi0JCWN0cmxfb3V0dygweDAwMDEsIFBBX1NEUE9XKTsJLyogU0QgUG93ZXIgT04gKi8KKwkJX19yYXdfd3JpdGV3KDB4MDAwMSwgUEFfU0RQT1cpOwkvKiBTRCBQb3dlciBPTiAqLwogCi0JY3RybF9vdXR3KGN0cmxfaW53KFBBX0lWRFJDVEwpIHwgMHgwMSwgUEFfSVZEUkNUTCk7CS8qIFNpMTMxMTIgKi8KKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUEFfSVZEUkNUTCkgfCAweDAxLCBQQV9JVkRSQ1RMKTsJLyogU2kxMzExMiAqLwogCiAJcG1fcG93ZXJfb2ZmID0gcjc3ODBycF9wb3dlcl9vZmY7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L2hwNnh4X2FwbS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9ocDZ4eF9hcG0uYwppbmRleCBlODUyMTJmLi5iNDk1MzVjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L2hwNnh4X2FwbS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvaHA2eHhfYXBtLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAlpbmZvLT5hY19saW5lX3N0YXR1cyA9IChiYXR0ZXJ5ID4gSFA2ODBfQkFUVEVSWV9BQ19PTikgPwogCQkJIEFQTV9BQ19PTkxJTkUgOiBBUE1fQUNfT0ZGTElORTsKIAotCXBnZHIgPSBjdHJsX2luYihQR0RSKTsKKwlwZ2RyID0gX19yYXdfcmVhZGIoUEdEUik7CiAJaWYgKHBnZHIgJiBQR0RSX01BSU5fQkFUVEVSWV9PVVQpIHsKIAkJaW5mby0+YmF0dGVyeV9zdGF0dXMJPSBBUE1fQkFUVEVSWV9TVEFUVVNfTk9UX1BSRVNFTlQ7CiAJCWluZm8tPmJhdHRlcnlfZmxhZwk9IDB4ODA7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtLmMKaW5kZXggZDkzNmMxYS4uNDQ5OWEzNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYwpAQCAtNTMsMTcgKzUzLDE3IEBACiAJc2hfd2R0X3dyaXRlX2NudCgwKTsKIAogCS8qIGRpc2FibGUgUExMMSAqLwotCWZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWZycWNyICY9IH4oRlJRQ1JfUExMRU4gfCBGUlFDUl9QU1RCWSk7Ci0JY3RybF9vdXR3KGZycWNyLCBGUlFDUik7CisJX19yYXdfd3JpdGV3KGZycWNyLCBGUlFDUik7CiAKIAkvKiBlbmFibGUgc3RhbmRieSAqLwotCXN0YmNyID0gY3RybF9pbmIoU1RCQ1IpOwotCWN0cmxfb3V0YihzdGJjciB8IFNUQkNSX1NUQlkgfCBTVEJDUl9NU1RQMiwgU1RCQ1IpOworCXN0YmNyID0gX19yYXdfcmVhZGIoU1RCQ1IpOworCV9fcmF3X3dyaXRlYihzdGJjciB8IFNUQkNSX1NUQlkgfCBTVEJDUl9NU1RQMiwgU1RCQ1IpOwogCiAJLyogc2V0IHNlbGYtcmVmcmVzaCAqLwotCW1jciA9IGN0cmxfaW53KE1DUik7Ci0JY3RybF9vdXR3KG1jciAmIH5NQ1JfUkZTSCwgTUNSKTsKKwltY3IgPSBfX3Jhd19yZWFkdyhNQ1IpOworCV9fcmF3X3dyaXRldyhtY3IgJiB+TUNSX1JGU0gsIE1DUik7CiAKIAkvKiBzZXQgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlhc20gdm9sYXRpbGUoInN0YyB2YnIsICUwIiA6ICI9ciIgKHZicl9vbGQpKTsKQEAgLTczLDggKzczLDggQEAKIAkgICAgICAgJndha2V1cF9zdGFydCwgJndha2V1cF9lbmQgLSAmd2FrZXVwX3N0YXJ0KTsKIAlhc20gdm9sYXRpbGUoImxkYyAlMCwgdmJyIiA6IDogInIiICh2YnJfbmV3KSk7CiAKLQljdHJsX291dHcoMCwgUlRDTlQpOwotCWN0cmxfb3V0dyhtY3IgfCBNQ1JfUkZTSCB8IE1DUl9STU9ERSwgTUNSKTsKKwlfX3Jhd193cml0ZXcoMCwgUlRDTlQpOworCV9fcmF3X3dyaXRldyhtY3IgfCBNQ1JfUkZTSCB8IE1DUl9STU9ERSwgTUNSKTsKIAogCWNwdV9zbGVlcCgpOwogCkBAIC04MywxNCArODMsMTQgQEAKIAlmcmVlX3BhZ2UodmJyX25ldyk7CiAKIAkvKiBlbmFibGUgUExMMSAqLwotCWZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWZycWNyIHw9IEZSUUNSX1BTVEJZOwotCWN0cmxfb3V0dyhmcnFjciwgRlJRQ1IpOworCV9fcmF3X3dyaXRldyhmcnFjciwgRlJRQ1IpOwogCXVkZWxheSg1MCk7CiAJZnJxY3IgfD0gRlJRQ1JfUExMRU47Ci0JY3RybF9vdXR3KGZycWNyLCBGUlFDUik7CisJX19yYXdfd3JpdGV3KGZycWNyLCBGUlFDUik7CiAKLQljdHJsX291dGIoc3RiY3IsIFNUQkNSKTsKKwlfX3Jhd193cml0ZWIoc3RiY3IsIFNUQkNSKTsKIAogCWNsZWFyX2JsX2JpdCgpOwogfQpAQCAtMTE1LDIxICsxMTUsMjEgQEAKIAlvdXR3KGhkNjQ0NjFfc3RiY3IsIEhENjQ0NjFfU1RCQ1IpOwogI2VuZGlmCiAKLQljdHJsX291dGIoMHgxZiwgREFDUik7CisJX19yYXdfd3JpdGViKDB4MWYsIERBQ1IpOwogCi0Jc3RiY3IgPSBjdHJsX2luYihTVEJDUik7Ci0JY3RybF9vdXRiKDB4MDEsIFNUQkNSKTsKKwlzdGJjciA9IF9fcmF3X3JlYWRiKFNUQkNSKTsKKwlfX3Jhd193cml0ZWIoMHgwMSwgU1RCQ1IpOwogCi0Jc3RiY3IyID0gY3RybF9pbmIoU1RCQ1IyKTsKLQljdHJsX291dGIoMHg3ZiAsIFNUQkNSMik7CisJc3RiY3IyID0gX19yYXdfcmVhZGIoU1RCQ1IyKTsKKwlfX3Jhd193cml0ZWIoMHg3ZiAsIFNUQkNSMik7CiAKIAlvdXR3KDB4ZjA3ZiwgSEQ2NDQ2MV9TQ1BVQ1IpOwogCiAJcG1fZW50ZXIoKTsKIAogCW91dHcoMCwgSEQ2NDQ2MV9TQ1BVQ1IpOwotCWN0cmxfb3V0YihzdGJjciwgU1RCQ1IpOwotCWN0cmxfb3V0YihzdGJjcjIsIFNUQkNSMik7CisJX19yYXdfd3JpdGViKHN0YmNyLCBTVEJDUik7CisJX19yYXdfd3JpdGViKHN0YmNyMiwgU1RCQ1IyKTsKIAogI2lmZGVmIENPTkZJR19IRDY0NDYxX0VOQUJMRVIKIAloZDY0NDYxX3N0YmNyID0gaW53KEhENjQ0NjFfU1RCQ1IpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCmluZGV4IGU2ZGQ1ZTkuLjhjOWFkZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKQEAgLTE0OSwxOSArMTQ5LDE5IEBACiAKIAlzaF9kYWNfb3V0cHV0KDAsIERBQ19TUEVBS0VSX1ZPTFVNRSk7CiAJc2hfZGFjX2Rpc2FibGUoREFDX1NQRUFLRVJfVk9MVU1FKTsKLQl2OCA9IGN0cmxfaW5iKERBQ1IpOworCXY4ID0gX19yYXdfcmVhZGIoREFDUik7CiAJdjggJj0gfkRBQ1JfREFFOwotCWN0cmxfb3V0Yih2OCxEQUNSKTsKKwlfX3Jhd193cml0ZWIodjgsREFDUik7CiAKLQl2OCA9IGN0cmxfaW5iKFNDUERSKTsKKwl2OCA9IF9fcmF3X3JlYWRiKFNDUERSKTsKIAl2OCB8PSBTQ1BEUl9UU19TQ0FOX1ggfCBTQ1BEUl9UU19TQ0FOX1k7CiAJdjggJj0gflNDUERSX1RTX1NDQU5fRU5BQkxFOwotCWN0cmxfb3V0Yih2OCwgU0NQRFIpOworCV9fcmF3X3dyaXRlYih2OCwgU0NQRFIpOwogCi0JdiA9IGN0cmxfaW53KFNDUENSKTsKKwl2ID0gX19yYXdfcmVhZHcoU0NQQ1IpOwogCXYgJj0gflNDUENSX1RTX01BU0s7CiAJdiB8PSBTQ1BDUl9UU19FTkFCTEU7Ci0JY3RybF9vdXR3KHYsIFNDUENSKTsKKwlfX3Jhd193cml0ZXcodiwgU0NQQ1IpOwogfQogZGV2aWNlX2luaXRjYWxsKGhwNnh4X2RldmljZXNfc2V0dXApOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWtmcjJyMDkvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gta2ZyMnIwOS9zZXR1cC5jCmluZGV4IDVkN2I1ZDkuLmIyY2QwZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gta2ZyMnIwOS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gta2ZyMnIwOS9zZXR1cC5jCkBAIC0yODIsNyArMjgyLDcgQEAKIAkJICogdXNlIDEuOCBWIGZvciBWY2NRX1ZJTwogCQkgKiB1c2UgMi44NVYgZm9yIFZjY1FfU1IKIAkJICovCi0JCWN0cmxfb3V0dygoY3RybF9pbncoRFJWQ1JCKSAmIH4weDAwMDMpIHwgMHgwMDAxLCBEUlZDUkIpOworCQlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KERSVkNSQikgJiB+MHgwMDAzKSB8IDB4MDAwMSwgRFJWQ1JCKTsKIAogCQkvKiByZXNldCBjbGVhciAqLwogCQlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19QVEI0LCBOVUxMKTsKQEAgLTM1MSw3ICszNTEsNyBAQAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydCAgPSAxMDEsCisJCS5zdGFydCAgPSAxMDAsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTQ5MiwxMyArNDkyLDEzIEBACiAJaWYgKGtmcjJyMDlfdXNiMF9nYWRnZXRfaTJjX3NldHVwKCkgIT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7IC8qIHVuYWJsZSB0byBjb25maWd1cmUgdXNpbmcgaTJjICovCiAKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfTVNFTENSQikgJiB+MHhjMDAwKSB8IDB4ODAwMCwgUE9SVF9NU0VMQ1JCKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfTVNFTENSQikgJiB+MHhjMDAwKSB8IDB4ODAwMCwgUE9SVF9NU0VMQ1JCKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9QRFNUQVRVUywgTlVMTCk7IC8qIFItc3RhbmRieSBkaXNhYmxlcyBVU0IgY2xvY2sgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19QVFY2LCBOVUxMKTsgLyogVVNCQ0xLX09OICovCiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRWNiwgMSk7IC8qIFVTQkNMS19PTiA9IEggKi8KIAltc2xlZXAoMjApOyAvKiB3YWl0IDIwbXMgdG8gbGV0IHRoZSBjbG9jayBzZXR0bGUgKi8KIAljbGtfZW5hYmxlKGNsa19nZXQoTlVMTCwgInVzYjAiKSk7Ci0JY3RybF9vdXR3KDB4MDYwMCwgMHhhNDA1MDFkNCk7CisJX19yYXdfd3JpdGV3KDB4MDYwMCwgMHhhNDA1MDFkNCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyNiwxMiArNTI2LDEyIEBACiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRHMywgMSk7IC8qIEhQT05fT04gPSBIICovCiAKIAkvKiBzZXR1cCBOT1IgZmxhc2ggYXQgQ1MwICovCi0JY3RybF9vdXRsKDB4MzZkYjA0MDAsIEJTQ19DUzBCQ1IpOwotCWN0cmxfb3V0bCgweDAwMDAwNTAwLCBCU0NfQ1MwV0NSKTsKKwlfX3Jhd193cml0ZWwoMHgzNmRiMDQwMCwgQlNDX0NTMEJDUik7CisJX19yYXdfd3JpdGVsKDB4MDAwMDA1MDAsIEJTQ19DUzBXQ1IpOwogCiAJLyogc2V0dXAgTkFORCBmbGFzaCBhdCBDUzQgKi8KLQljdHJsX291dGwoMHgzNmRiMDQwMCwgQlNDX0NTNEJDUik7Ci0JY3RybF9vdXRsKDB4MDAwMDA1MDAsIEJTQ19DUzRXQ1IpOworCV9fcmF3X3dyaXRlbCgweDM2ZGIwNDAwLCBCU0NfQ1M0QkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDUwMCwgQlNDX0NTNFdDUik7CiAKIAkvKiBzZXR1cCBLRVlTQyBwaW5zICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMCwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svZ2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svZ2lvLmMKaW5kZXggNTI4MDEzMS4uMDFlNmFiYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYwpAQCAtNzYsMzkgKzc2LDM5IEBACiAJCWJyZWFrOwogCiAJY2FzZSBHSU9EUlZfSU9DU0dJT0RBVEExOgkvKiB3cml0ZSBieXRlICovCi0JCWN0cmxfb3V0YigodW5zaWduZWQgY2hhcikoMHgwZmYgJiBkYXRhKSwgYWRkcik7CisJCV9fcmF3X3dyaXRlYigodW5zaWduZWQgY2hhcikoMHgwZmYgJiBkYXRhKSwgYWRkcik7CiAJCWJyZWFrOwogCiAJY2FzZSBHSU9EUlZfSU9DU0dJT0RBVEEyOgkvKiB3cml0ZSB3b3JkICovCiAJCWlmIChhZGRyICYgMHgwMSkgewogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KLQkJY3RybF9vdXR3KCh1bnNpZ25lZCBzaG9ydCBpbnQpKDB4MGZmZmYgJiBkYXRhKSwgYWRkcik7CisJCV9fcmF3X3dyaXRldygodW5zaWduZWQgc2hvcnQgaW50KSgweDBmZmZmICYgZGF0YSksIGFkZHIpOwogCQlicmVhazsKIAogCWNhc2UgR0lPRFJWX0lPQ1NHSU9EQVRBNDoJLyogd3JpdGUgbG9uZyAqLwogCQlpZiAoYWRkciAmIDB4MDMpIHsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9Ci0JCWN0cmxfb3V0bChkYXRhLCBhZGRyKTsKKwkJX19yYXdfd3JpdGVsKGRhdGEsIGFkZHIpOwogCQlicmVhazsKIAogCWNhc2UgR0lPRFJWX0lPQ0dHSU9EQVRBMToJLyogcmVhZCBieXRlICovCi0JCWRhdGEgPSBjdHJsX2luYihhZGRyKTsKKwkJZGF0YSA9IF9fcmF3X3JlYWRiKGFkZHIpOwogCQlicmVhazsKIAogCWNhc2UgR0lPRFJWX0lPQ0dHSU9EQVRBMjoJLyogcmVhZCB3b3JkICovCiAJCWlmIChhZGRyICYgMHgwMSkgewogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KLQkJZGF0YSA9IGN0cmxfaW53KGFkZHIpOworCQlkYXRhID0gX19yYXdfcmVhZHcoYWRkcik7CiAJCWJyZWFrOwogCiAJY2FzZSBHSU9EUlZfSU9DR0dJT0RBVEE0OgkvKiByZWFkIGxvbmcgKi8KIAkJaWYgKGFkZHIgJiAweDAzKSB7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQlkYXRhID0gY3RybF9pbmwoYWRkcik7CisJCWRhdGEgPSBfX3Jhd19yZWFkbChhZGRyKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svaXJxLmMKaW5kZXggN2IyODRjZC4uOTZmMzhhNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9pcnEuYwpAQCAtMjIsMTQgKzIyLDE0IEBACiB7CiAJdW5zaWduZWQgY2hhciBtYXNrID0gMHhmZiBeICgweDAxIDw8IChpcnEgLSA1KSk7CiAKLQljdHJsX291dGIoY3RybF9pbmIoUEFfSU1BU0spICYgbWFzaywgUEFfSU1BU0spOworCV9fcmF3X3dyaXRlYihfX3Jhd19yZWFkYihQQV9JTUFTSykgJiBtYXNrLCBQQV9JTUFTSyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9sYW5kaXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGNoYXIgdmFsdWUgPSAoMHgwMSA8PCAoaXJxIC0gNSkpOwogCi0JY3RybF9vdXRiKGN0cmxfaW5iKFBBX0lNQVNLKSB8IHZhbHVlLCBQQV9JTUFTSyk7CisJX19yYXdfd3JpdGViKF9fcmF3X3JlYWRiKFBBX0lNQVNLKSB8IHZhbHVlLCBQQV9JTUFTSyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbGFuZGlza19pcnFfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewpAQCAtNTIsNSArNTIsNSBAQAogCQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKIAkJZW5hYmxlX2xhbmRpc2tfaXJxKGkpOwogCX0KLQljdHJsX291dGIoMHgwMCwgUEFfUFdSSU5UX0NMUik7CisJX19yYXdfd3JpdGViKDB4MDAsIFBBX1BXUklOVF9DTFIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3Bzdy5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3Bzdy5jCmluZGV4IGU2YjBlZmEuLmJlZjgzNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9wc3cuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svcHN3LmMKQEAgLTI1LDcgKzI1LDcgQEAKIAl1bnNpZ25lZCBpbnQgc3dfdmFsdWU7CiAJaW50IHJldCA9IDA7CiAKLQlzd192YWx1ZSA9ICgweDBmZiAmICh+Y3RybF9pbmIoUEFfU1RBVFVTKSkpOworCXN3X3ZhbHVlID0gKDB4MGZmICYgKH5fX3Jhd19yZWFkYihQQV9TVEFUVVMpKSk7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlJ3Mgbm8gc3RhdGUgY2hhbmdlICovCiAJaWYgKHBzdy0+c3RhdGUpIHsKQEAgLTQyLDcgKzQyLDcgQEAKIAogb3V0OgogCS8qIENsZWFyIHRoZSBzd2l0Y2ggSVJRcyAqLwotCWN0cmxfb3V0YigweDAwLCBQQV9QV1JJTlRfQ0xSKTsKKwlfX3Jhd193cml0ZWIoMHgwMCwgUEFfUFdSSU5UX0NMUik7CiAKIAlyZXR1cm4gSVJRX1JFVFZBTChyZXQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svc2V0dXAuYwppbmRleCBkYjIyZWEyLi41MDMzN2FjYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3NldHVwLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAogc3RhdGljIHZvaWQgbGFuZGlza19wb3dlcl9vZmYodm9pZCkKIHsKLSAgICAgICAgY3RybF9vdXRiKDB4MDEsIFBBX1NIVVRET1dOKTsKKyAgICAgICAgX19yYXdfd3JpdGViKDB4MDEsIFBBX1NIVVRET1dOKTsKIH0KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZl9pZGVfcmVzb3VyY2VzWzNdOwpAQCAtNjMsNyArNjMsNyBAQAogCS8qIG9wZW4gSS9PIGFyZWEgd2luZG93ICovCiAJcGFkZHJiYXNlID0gdmlydF90b19waHlzKCh2b2lkICopUEFfQVJFQTVfSU8pOwogCXByb3QgPSBQQUdFX0tFUk5FTF9QQ0MoMSwgX1BBR0VfUENDX0lPMTYpOwotCWNmX2lkZV9iYXNlID0gcDNfaW9yZW1hcChwYWRkcmJhc2UsIFBBR0VfU0laRSwgcHJvdC5wZ3Byb3QpOworCWNmX2lkZV9iYXNlID0gaW9yZW1hcF9wcm90KHBhZGRyYmFzZSwgUEFHRV9TSVpFLCBwZ3Byb3RfdmFsKHByb3QpKTsKIAlpZiAoIWNmX2lkZV9iYXNlKSB7CiAJCXByaW50aygiYWxsb2NhdGVfY2ZfYXJlYSA6IGNhbid0IG9wZW4gQ0YgSS9PIHdpbmRvdyFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTg4LDcgKzg4LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBsYW5kaXNrX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAgICAgICAgIC8qIExFRCBPTiAqLwotCWN0cmxfb3V0YihjdHJsX2luYihQQV9MRUQpIHwgMHgwMywgUEFfTEVEKTsKKwlfX3Jhd193cml0ZWIoX19yYXdfcmVhZGIoUEFfTEVEKSB8IDB4MDMsIFBBX0xFRCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJJLU8gREFUQSBERVZJQ0UsIElOQy4gXCJMQU5ESVNLIFNlcmllc1wiIHN1cHBvcnQuXG4iKTsKIAlwbV9wb3dlcl9vZmYgPSBsYW5kaXNrX3Bvd2VyX29mZjsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL3NldHVwLmMKaW5kZXggMmIwYjU4MS4uNzliNGUwZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jCkBAIC01Niw4ICs1Niw4IEBACiAJLyogb3BlbiBJL08gYXJlYSB3aW5kb3cgKi8KIAlwYWRkcmJhc2UgPSB2aXJ0X3RvX3BoeXMoKHZvaWQqKVBBX0FSRUE1X0lPKTsKIAlwc2l6ZSA9IFBBR0VfU0laRTsKLQlwcm90ID0gUEFHRV9LRVJORUxfUENDKCAxICwgX1BBR0VfUENDX0lPMTYpOwotCWNmMF9pb19iYXNlID0gKHUzMilwM19pb3JlbWFwKHBhZGRyYmFzZSwgcHNpemUsIHByb3QucGdwcm90KTsKKwlwcm90ID0gUEFHRV9LRVJORUxfUENDKDEsIF9QQUdFX1BDQ19JTzE2KTsKKwljZjBfaW9fYmFzZSA9ICh1MzIpaW9yZW1hcF9wcm90KHBhZGRyYmFzZSwgcHNpemUsIHBncHJvdF92YWwocHJvdCkpOwogCWlmICghY2YwX2lvX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcyA6IGNhbid0IG9wZW4gQ0YgSS9PIHdpbmRvdyFcbiIgLCBfX2Z1bmNfXyApOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaW8uYwppbmRleCA1MmRkNzQ4Li4yOTYwYzY1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pby5jCkBAIC0xNDEsMTAgKzE0MSwxMCBAQAogI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKIAkvKiBTeXN0ZW0gYm9hcmQgcHJlc2VudCwganVzdCBtYWtlIGEgZHVtbXkgU1JBTSBhY2Nlc3MuICAoQ1MwIHdpbGwgYmUKIAkgICBtYXBwZWQgdG8gUENJIG1lbW9yeSwgcHJvYmFibHkgZ29vZCB0byBhdm9pZCBpdC4pICovCi0JY3RybF9pbncoMHhhNjgwMDAwMCk7CisJX19yYXdfcmVhZHcoMHhhNjgwMDAwMCk7CiAjZWxzZQogCS8qIENTMCB3aWxsIGJlIG1hcHBlZCB0byBmbGFzaCwgUk9NIGV0YyBzbyBzYWZlIHRvIGFjY2VzcyBpdC4gKi8KLQljdHJsX2ludygweGEwMDAwMDAwKTsKKwlfX3Jhd19yZWFkdygweGEwMDAwMDAwKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pcnEuYwppbmRleCBiNTUxOTYzLi5hMjZkMTY2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaXJxLmMKQEAgLTg4LDcgKzg4LDcgQEAKIAlmcGdhSXJxID0gZnBnYUlycVRhYmxlW2lycV0uZnBnYUlycTsKIAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgRlBHQSBJTlRDIHJlZ2lzdGVyICovCi0JY3RybF9vdXRsKE1JQ1JPREVWX0ZQR0FfSU5UQ19NQVNLKGZwZ2FJcnEpLCBNSUNST0RFVl9GUEdBX0lOVERTQl9SRUcpOworCV9fcmF3X3dyaXRlbChNSUNST0RFVl9GUEdBX0lOVENfTUFTSyhmcGdhSXJxKSwgTUlDUk9ERVZfRlBHQV9JTlREU0JfUkVHKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX21pY3JvZGV2X2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTA3LDEzICsxMDcsMTMgQEAKIAlwcmlvcml0eVJlZyA9IE1JQ1JPREVWX0ZQR0FfSU5UUFJJX1JFRyhmcGdhSXJxKTsKIAogCS8qIHNldCBwcmlvcml0eSBmb3IgdGhlIGludGVycnVwdCAqLwotCXByaW9yaXRpZXMgPSBjdHJsX2lubChwcmlvcml0eVJlZyk7CisJcHJpb3JpdGllcyA9IF9fcmF3X3JlYWRsKHByaW9yaXR5UmVnKTsKIAlwcmlvcml0aWVzICY9IH5NSUNST0RFVl9GUEdBX0lOVFBSSV9NQVNLKGZwZ2FJcnEpOwogCXByaW9yaXRpZXMgfD0gTUlDUk9ERVZfRlBHQV9JTlRQUklfTEVWRUwoZnBnYUlycSwgcHJpKTsKLQljdHJsX291dGwocHJpb3JpdGllcywgcHJpb3JpdHlSZWcpOworCV9fcmF3X3dyaXRlbChwcmlvcml0aWVzLCBwcmlvcml0eVJlZyk7CiAKIAkvKiBlbmFibGUgaW50ZXJydXB0cyBvbiB0aGUgRlBHQSBJTlRDIHJlZ2lzdGVyICovCi0JY3RybF9vdXRsKE1JQ1JPREVWX0ZQR0FfSU5UQ19NQVNLKGZwZ2FJcnEpLCBNSUNST0RFVl9GUEdBX0lOVEVOQl9SRUcpOworCV9fcmF3X3dyaXRlbChNSUNST0RFVl9GUEdBX0lOVENfTUFTSyhmcGdhSXJxKSwgTUlDUk9ERVZfRlBHQV9JTlRFTkJfUkVHKTsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBkZXNpcmVkIGlycSBoYW5kbGVyIHRvIGJlIGEgTWljcm9EZXYgdHlwZSAqLwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJaW50IGk7CiAKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIEZQR0EgSU5UQyByZWdpc3RlciAqLwotCWN0cmxfb3V0bCh+MHVsLCBNSUNST0RFVl9GUEdBX0lOVERTQl9SRUcpOworCV9fcmF3X3dyaXRlbCh+MHVsLCBNSUNST0RFVl9GUEdBX0lOVERTQl9SRUcpOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9FWFRFUk5BTF9JUlFTOyBpKyspCiAJCW1ha2VfbWljcm9kZXZfaXJxKGkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCmluZGV4IDUwN2M3N2IuLmJlMzAwYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKQEAgLTM5Nyw3ICszOTcsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CT0gMTAxLAorCQkuc3RhcnQJPSAxMDAsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTQzMSw3ICs0MzEsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvdjc3MnhfY2FtZXJhX2luZm8gb3Y3NzI1X2luZm8gPSB7Ci0JLmJ1c3dpZHRoCT0gU09DQU1fREFUQVdJRFRIXzgsCisJLmZsYWdzCQk9IE9WNzcyWF9GTEFHXzhCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBvdjc3MjVfbGluayA9IHsKQEAgLTQ5NiwyOCArNDk2LDE2IEBACiAJCQkJCSZtaWdvcl9zZHJhbV9lbnRlcl9lbmQsCiAJCQkJCSZtaWdvcl9zZHJhbV9sZWF2ZV9zdGFydCwKIAkJCQkJJm1pZ29yX3NkcmFtX2xlYXZlX2VuZCk7Ci0jaWZkZWYgQ09ORklHX1BNCiAJLyogTGV0IEQxMSBMRUQgc2hvdyBTVEFUVVMwICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU1RBVFVTMCwgTlVMTCk7CiAKIAkvKiBMaXQgRDEyIExFRCBzaG93IFBEU1RBVFVTICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUERTVEFUVVMsIE5VTEwpOwotI2Vsc2UKLQkvKiBMaXQgRDExIExFRCAqLwotCWdwaW9fcmVxdWVzdChHUElPX1BUSjcsIE5VTEwpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSjcsIDEpOwotCWdwaW9fZXhwb3J0KEdQSU9fUFRKNywgMCk7Ci0KLQkvKiBMaXQgRDEyIExFRCAqLwotCWdwaW9fcmVxdWVzdChHUElPX1BUSjUsIE5VTEwpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSjUsIDEpOwotCWdwaW9fZXhwb3J0KEdQSU9fUFRKNSwgMCk7Ci0jZW5kaWYKIAogCS8qIFNNQzkxQzExMSAtIEVuYWJsZSBJUlEwLCBTZXR1cCBDUzQgZm9yIDE2LWJpdCBmYXN0IGFjY2VzcyAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTAsIE5VTEwpOwotCWN0cmxfb3V0bCgweDAwMDAzNDAwLCBCU0NfQ1M0QkNSKTsKLQljdHJsX291dGwoMHgwMDExMDA4MCwgQlNDX0NTNFdDUik7CisJX19yYXdfd3JpdGVsKDB4MDAwMDM0MDAsIEJTQ19DUzRCQ1IpOworCV9fcmF3X3dyaXRlbCgweDAwMTEwMDgwLCBCU0NfQ1M0V0NSKTsKIAogCS8qIEtFWVNDICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMCwgTlVMTCk7CkBAIC01MzMsNyArNTIxLDcgQEAKIAogCS8qIE5BTkQgRmxhc2ggKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9DUzZBX0NFMkIsIE5VTEwpOwotCWN0cmxfb3V0bCgoY3RybF9pbmwoQlNDX0NTNkFCQ1IpICYgfjB4MDYwMCkgfCAweDAyMDAsIEJTQ19DUzZBQkNSKTsKKwlfX3Jhd193cml0ZWwoKF9fcmF3X3JlYWRsKEJTQ19DUzZBQkNSKSAmIH4weDA2MDApIHwgMHgwMjAwLCBCU0NfQ1M2QUJDUik7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRBMSwgTlVMTCk7CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QVEExKTsKIApAQCAtNjI3LDcgKzYxNSw3IEBACiAjZWxzZQogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUVDAsIDEpOwogI2VuZGlmCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfTVNFTENSQikgfCAweDIwMDAsIFBPUlRfTVNFTENSQik7IC8qIEQxNS0+RDggKi8KKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUE9SVF9NU0VMQ1JCKSB8IDB4MjAwMCwgUE9SVF9NU0VMQ1JCKTsgLyogRDE1LT5EOCAqLwogCiAJcGxhdGZvcm1fcmVzb3VyY2Vfc2V0dXBfbWVtb3J5KCZtaWdvcl9jZXVfZGV2aWNlLCAiY2V1IiwgNCA8PCAyMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvaXJxLmMKaW5kZXggNzhkN2IyNy4uNTc0ZjAwOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvaXJxLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogewogCXN0cnVjdCBpbnRjX2Rlc2MgKmQ7CiAKLQlzd2l0Y2ggKGN0cmxfaW53KFBBX1ZFUlJFRykgJiAweGYwKSB7CisJc3dpdGNoIChfX3Jhd19yZWFkdyhQQV9WRVJSRUcpICYgMHhmMCkgewogI2lmZGVmIENPTkZJR19SVFM3NzUxUjJEX1BMVVMKIAljYXNlIDB4MTA6CiAJCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIFIyRC1QTFVTIGludGVycnVwdCBjb250cm9sbGVyLlxuIik7CkBAIC0xNDcsNyArMTQ3LDcgQEAKICNlbmRpZgogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0lORk8gIlVua25vd24gUjJEIGludGVycnVwdCBjb250cm9sbGVyIDB4JTA0eFxuIiwKLQkJICAgICAgIGN0cmxfaW53KFBBX1ZFUlJFRykpOworCQkgICAgICAgX19yYXdfcmVhZHcoUEFfVkVSUkVHKSk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9zZXR1cC5jCmluZGV4IGE2MjVlY2IuLmI4NGRmNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvc2V0dXAuYwpAQCAtNzAsNyArNzAsNyBAQAogc3RhdGljIHZvaWQgcjJkX2NoaXBfc2VsZWN0KHN0cnVjdCBzaF9zcGlfaW5mbyAqc3BpLCBpbnQgY3MsIGludCBzdGF0ZSkKIHsKIAlCVUdfT04oY3MgIT0gMCk7ICAvKiBTaW5nbGUgRXBzb24gUlRDLTk3MDFKRSBhdHRhY2hlZCBvbiBDUzAgKi8KLQljdHJsX291dHcoc3RhdGUgPT0gQklUQkFOR19DU19BQ1RJVkUsIFBBX1JUQ0NFKTsKKwlfX3Jhd193cml0ZXcoc3RhdGUgPT0gQklUQkFOR19DU19BQ1RJVkUsIFBBX1JUQ0NFKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzaF9zcGlfaW5mbyBzcGlfaW5mbyA9IHsKQEAgLTI2Miw3ICsyNjIsNyBAQAogCiBzdGF0aWMgdm9pZCBydHM3NzUxcjJkX3Bvd2VyX29mZih2b2lkKQogewotCWN0cmxfb3V0dygweDAwMDEsIFBBX1BPV09GRik7CisJX19yYXdfd3JpdGV3KDB4MDAwMSwgUEFfUE9XT0ZGKTsKIH0KIAogLyoKQEAgLTI3MSwxNCArMjcxLDE0IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcnRzNzc1MXIyZF9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewogCXZvaWQgX19pb21lbSAqc201MDFfcmVnOwotCXUxNiB2ZXIgPSBjdHJsX2ludyhQQV9WRVJSRUcpOworCXUxNiB2ZXIgPSBfX3Jhd19yZWFkdyhQQV9WRVJSRUcpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUmVuZXNhcyBUZWNobm9sb2d5IFNhbGVzIFJUUzc3NTFSMkQgc3VwcG9ydC5cbiIpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiRlBHQSB2ZXJzaW9uOiVkIChyZXZpc2lvbjolZClcbiIsCiAJCQkJCSh2ZXIgPj4gNCkgJiAweGYsIHZlciAmIDB4Zik7CiAKLQljdHJsX291dHcoMHgwMDAwLCBQQV9PVVRQT1JUKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQQV9PVVRQT1JUKTsKIAlwbV9wb3dlcl9vZmYgPSBydHM3NzUxcjJkX3Bvd2VyX29mZjsKIAogCS8qIHNtNTAxIGRyYW0gY29uZmlndXJhdGlvbjoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMKaW5kZXggYzM3NjE3ZS4uNGZhMDhiYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9SWEQwLCBOVUxMKTsKIAogCS8qIFNldHVwIExBTjkxMTg6IENTMSBpbiAxNi1iaXQgQmlnIEVuZGlhbiBNb2RlLCBJUlEwIGF0IFBvcnQgQiAqLwotCWN0cmxfb3V0bCgweDM2ZGIwNDAwLCAweGZmZmMwMDA4KTsgLyogQ1MxQkNSICovCisJX19yYXdfd3JpdGVsKDB4MzZkYjA0MDAsIDB4ZmZmYzAwMDgpOyAvKiBDUzFCQ1IgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JUlEwX1BCLCBOVUxMKTsKIAogCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhyc2s3MjAzX2RldmljZXMsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvaXJxLmMKaW5kZXggODU1NTU4MS4uZTVmNzU2NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9pcnEuYwpAQCAtMzcsOSArMzcsOSBAQAogewogCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIFNESzc3ODAgaW50ZXJydXB0IGNvbnRyb2xsZXIuXG4iKTsKIAotCWN0cmxfb3V0dygweEZGRkYsIEZQR0FfSVJRME1SKTsKKwlfX3Jhd193cml0ZXcoMHhGRkZGLCBGUEdBX0lSUTBNUik7CiAJLyogU2V0dXAgSVJMIDAtMyAqLwotCWN0cmxfb3V0dygweDAwMDMsIEZQR0FfSU1TUik7CisJX19yYXdfd3JpdGV3KDB4MDAwMywgRlBHQV9JTVNSKTsKIAlwbGF0X2lycV9zZXR1cF9waW5zKElSUV9NT0RFX0lSTDMyMTApOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZmcGdhX2ludGNfZGVzYyk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCmluZGV4IGFhZDk0YTcuLjRkYTM4ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCkBAIC0yMCwyNyArMjAsMTggQEAKIAogI2RlZmluZSBHUElPX1BFQ1IgICAgICAgIDB4RkZFQTAwMDgKIAotLy8qIEhlYXJ0YmVhdCAqLwotc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKLQkucmVnc2l6ZSA9IDE2LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gUEFfTEVELAotCQkuZW5kICAgID0gUEFfTEVELAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKKy8qIEhlYXJ0YmVhdCAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ICA9IFBBX0xFRCwKKwkuZW5kICAgID0gUEFfTEVELAorCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzE2QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKIAkubmFtZSAgICAgICAgICAgPSAiaGVhcnRiZWF0IiwKIAkuaWQgICAgICAgICAgICAgPSAtMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZoZWFydGJlYXRfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlICAgICAgID0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyAgPSAxLAorCS5yZXNvdXJjZSAgICAgICA9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiAvKiBTTUM5MXggKi8KQEAgLTgzLDggKzc0LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHNkazc3ODBfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKLQl1MTYgdmVyID0gY3RybF9pbncoRlBHQV9GUFZFUlIpOwotCXUxNiBkYXRlU3RhbXAgPSBjdHJsX2ludyhGUEdBX0ZQREFURVIpOworCXUxNiB2ZXIgPSBfX3Jhd19yZWFkdyhGUEdBX0ZQVkVSUik7CisJdTE2IGRhdGVTdGFtcCA9IF9fcmF3X3JlYWR3KEZQR0FfRlBEQVRFUik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJSZW5lc2FzIFRlY2hub2xvZ3kgRXVyb3BlIFNESzc3ODAgc3VwcG9ydC5cbiIpOwogCXByaW50ayhLRVJOX0lORk8gIkJvYXJkIHZlcnNpb246ICVkIChyZXZpc2lvbiAlZCksICIKQEAgLTk0LDcgKzg1LDcgQEAKIAkJCSBkYXRlU3RhbXApOwogCiAJLyogU2V0dXAgcGluIG11eCdpbmcgZm9yIFBDSUMgKi8KLQljdHJsX291dHcoMHgwMDAwLCBHUElPX1BFQ1IpOworCV9fcmF3X3dyaXRldygweDAwMDAsIEdQSU9fUEVDUik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5ZjE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteQk6PSBzZXR1cC5vIGZwZ2EubyBpcnEubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L2ZwZ2EuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9mcGdhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0ZWM2NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9mcGdhLmMKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIFNESzc3ODYgRlBHQSBTdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8bWFjaC9mcGdhLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNkZWZpbmUgRlBHQV9SRUdTX09GRlNFVAkweDAzZmZmODAwCisjZGVmaW5lIEZQR0FfUkVHU19TSVpFCQkweDQ5MAorCisvKgorICogVGhlIEZQR0EgY2FuIGJlIG1hcHBlZCBpbiBhbnkgb2YgdGhlIGdlbmVyYWxseSBhdmFpbGFibGUgYXJlYXMsCisgKiBzbyB3ZSBhdHRlbXB0IHRvIHNjYW4gZm9yIGl0IHVzaW5nIHRoZSBmaXhlZCBTUlNUUiByZWFkIG1hZ2ljLgorICoKKyAqIE9uY2UgdGhlIEZQR0EgaXMgbG9jYXRlZCwgdGhlIHJlc3Qgb2YgdGhlIG1hcHBpbmcgZGF0YSBmb3IgdGhlIG90aGVyCisgKiBjb21wb25lbnRzIGNhbiBiZSBkZXRlcm1pbmVkIGR5bmFtaWNhbGx5IGZyb20gaXRzIHNlY3Rpb24gbWFwcGluZworICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBfX2lvbWVtICpzZGs3Nzg2X2ZwZ2FfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFyZWE7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJLyoKKwkgKiBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBhcmVhcyB3aGVyZSB0aGUgRlBHQSBjb3VsZCBiZSBtYXBwZWQuCisJICogVGhlIHBvc3NpYmxlIHJhbmdlIGlzIGFueXdoZXJlIGZyb20gYXJlYSAwIHRocm91Z2ggNiwgYXJlYSA3CisJICogaXMgcmVzZXJ2ZWQuCisJICovCisJZm9yIChhcmVhID0gUEFfQVJFQTA7IGFyZWEgPCBQQV9BUkVBNzsgYXJlYSArPSBTWl82NE0pIHsKKwkJYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShhcmVhICsgRlBHQV9SRUdTX09GRlNFVCwgRlBHQV9SRUdTX1NJWkUpOworCQlpZiAoIWJhc2UpIHsKKwkJCS8qIEZhaWxlZCB0byByZW1hcCB0aGlzIGFyZWEsIG1vdmUgYWxvbmcuICovCisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChpb3JlYWQxNihiYXNlICsgU1JTVFIpID09IFNSU1RSX01BR0lDKQorCQkJcmV0dXJuIGJhc2U7CS8qIEZvdW5kIGl0ISAqLworCisJCWlvdW5tYXAoYmFzZSk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgX19pb21lbSAqc2RrNzc4Nl9mcGdhX2Jhc2U7CisKK3ZvaWQgX19pbml0IHNkazc3ODZfZnBnYV9pbml0KHZvaWQpCit7CisJdTE2IHZlcnNpb24sIGRhdGU7CisKKwlzZGs3Nzg2X2ZwZ2FfYmFzZSA9IHNkazc3ODZfZnBnYV9wcm9iZSgpOworCWlmICh1bmxpa2VseSghc2RrNzc4Nl9mcGdhX2Jhc2UpKSB7CisJCXBhbmljKCJGUEdBIGRldGVjdGlvbiBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXZlcnNpb24gPSBmcGdhX3JlYWRfcmVnKEZQR0FWUik7CisJZGF0ZSA9IGZwZ2FfcmVhZF9yZWcoRlBHQURSKTsKKworCXByX2luZm8oIlx0RlBHQSB2ZXJzaW9uOlx0JWQuJWQgKGJ1aWx0IG9uICVkLyVkLyVkKVxuIiwKKwkJYmNkMmJpbih2ZXJzaW9uID4+IDgpICYgMHhmLCBiY2QyYmluKHZlcnNpb24gJiAweGYpLAorCQkoKGRhdGUgPj4gMTIpICYgMHhmKSArIDIwMDAsCisJCShkYXRlID4+IDgpICYgMHhmLCBiY2QyYmluKGRhdGUgJiAweGZmKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5NDNhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9pcnEuYwpAQCAtMCwwICsxLDQ4IEBACisvKgorICogU0RLNzc4NiBGUEdBIElSUSBDb250cm9sbGVyIFN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBNYXR0IEZsZW1pbmcKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9mcGdhLmg+CisjaW5jbHVkZSA8bWFjaC9pcnEuaD4KKworZW51bSB7CisJQVRBX0lSUV9CSVQJCT0gMSwKKwlTUElfQlVTWV9CSVQJCT0gMiwKKwlMSVJRNV9CSVQJCT0gMywKKwlMSVJRNl9CSVQJCT0gNCwKKwlMSVJRN19CSVQJCT0gNSwKKwlMSVJROF9CSVQJCT0gNiwKKwlLRVlfSVJRX0JJVAkJPSA3LAorCVBFTl9JUlFfQklUCQk9IDgsCisJRVRIX0lSUV9CSVQJCT0gOSwKKwlSVENfQUxBUk1fQklUCQk9IDEwLAorCUNSWVNUQUxfRkFJTF9CSVQJPSAxMiwKKwlFVEhfUE1FX0JJVAkJPSAxNCwKK307CisKK3ZvaWQgX19pbml0IHNkazc3ODZfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJLyogRW5hYmxlIHByaW9yaXR5IGVuY29kaW5nIGZvciBhbGwgSVJMcyAqLworCWZwZ2Ffd3JpdGVfcmVnKGZwZ2FfcmVhZF9yZWcoSU5UTVNSKSB8IDB4MDMwMywgSU5UTVNSKTsKKworCS8qIENsZWFyIEZQR0EgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKi8KKwlmcGdhX3dyaXRlX3JlZygweDAwMDAsIElOVEFTUik7CisJZnBnYV93cml0ZV9yZWcoMHgwMDAwLCBJTlRCU1IpOworCisJLyogVW5tYXNrIEZQR0EgaW50ZXJydXB0cyAqLworCXRtcCA9IGZwZ2FfcmVhZF9yZWcoSU5UQU1SKTsKKwl0bXAgJj0gfigxIDw8IEVUSF9JUlFfQklUKTsKKwlmcGdhX3dyaXRlX3JlZyh0bXAsIElOVEFNUik7CisKKwlwbGF0X2lycV9zZXR1cF9waW5zKElSUV9NT0RFX0lSTDc2NTRfTUFTSyk7CisJcGxhdF9pcnFfc2V0dXBfcGlucyhJUlFfTU9ERV9JUkwzMjEwX01BU0spOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDk0ZWEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L3NldHVwLmMKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBSZW5lc2FzIFRlY2hub2xvZ3kgRXVyb3BlIFNESzc3ODYgU3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hdHQgRmxlbWluZworICogQ29weXJpZ2h0IChDKSAyMDEwICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPG1hY2gvZnBnYS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKyNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gMHgwN2ZmZjhiMCwKKwkuZW5kCQk9IDB4MDdmZmY4YjAgKyBzaXplb2YodTE2KSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJoZWFydGJlYXQiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21zYzkxMXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAic21zYzkxMXgtbWVtb3J5IiwKKwkJLnN0YXJ0CQk9IDB4MDdmZmZmMDAsCisJCS5lbmQJCT0gMHgwN2ZmZmYwMCArIFNaXzI1NiAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUJCT0gInNtc2M5MTF4LWlycSIsCisJCS5zdGFydAkJPSBldnQyaXJxKDB4MmMwKSwKKwkJLmVuZAkJPSBldnQyaXJxKDB4MmMwKSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBzbXNjOTExeF9jb25maWcgPSB7CisJLmlycV9wb2xhcml0eQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9UWVBFX09QRU5fRFJBSU4sCisJLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCwKKwkucGh5X2ludGVyZmFjZQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbXNjOTExeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtc2M5MTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtc2M5MTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21zYzkxMXhfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNtc2M5MTF4X2NvbmZpZywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWJ1c19mcGdhX3Jlc291cmNlID0geworCS5zdGFydAkJPSAweDA3ZmZmOWUwLAorCS5lbmQJCT0gMHgwN2ZmZjllMCArIFNaXzMyIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWJ1c19mcGdhX2RldmljZSA9IHsKKwkubmFtZQkJPSAiaTJjLXNkazc3ODYiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmc21idXNfZnBnYV9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21idXNfcGNpZV9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gMHgwN2ZmZmMzMCwKKwkuZW5kCQk9IDB4MDdmZmZjMzAgKyBTWl8zMiAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21idXNfcGNpZV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImkyYy1zZGs3Nzg2IiwKKwkuaWQJCT0gMSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJnNtYnVzX3BjaWVfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgc2RrNzc4Nl9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oIm1heDY5MDAiLCAweDY4KSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc4Nl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmaGVhcnRiZWF0X2RldmljZSwKKwkmc21zYzkxMXhfZGV2aWNlLAorCSZzbWJ1c19mcGdhX2RldmljZSwKKwkmc21idXNfcGNpZV9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IHNkazc3ODZfaTJjX3NldHVwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qCisJICogSGFuZCBvdmVyIEkyQyBjb250cm9sIHRvIHRoZSBGUEdBLgorCSAqLworCXRtcCA9IGZwZ2FfcmVhZF9yZWcoU0JDUik7CisJdG1wICY9IH5TQ0JSX0kyQ0NFTjsKKwl0bXAgfD0gU0NCUl9JMkNNRU47CisJZnBnYV93cml0ZV9yZWcodG1wLCBTQkNSKTsKKworCXJldHVybiBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBzZGs3Nzg2X2kyY19kZXZpY2VzLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKHNkazc3ODZfaTJjX2RldmljZXMpKTsKK30KKworc3RhdGljIGludCBfX2luaXQgc2RrNzc4Nl9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNzc4Nl9kZXZpY2VzLCBBUlJBWV9TSVpFKHNoNzc4Nl9kZXZpY2VzKSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzZGs3Nzg2X2kyY19zZXR1cCgpOworfQorX19pbml0Y2FsbChzZGs3Nzg2X2RldmljZXNfc2V0dXApOworCitzdGF0aWMgaW50IHNkazc3ODZfbW9kZV9waW5zKHZvaWQpCit7CisJcmV0dXJuIGZwZ2FfcmVhZF9yZWcoTU9EU1dSKTsKK30KKworc3RhdGljIGludCBzZGs3Nzg2X2Nsa19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrOworCWludCByZXQ7CisKKwkvKgorCSAqIE9ubHkgaGFuZGxlIHRoZSBFWFRBTCBjYXNlLCBhbnlvbmUgaW50ZXJmYWNpbmcgYSBjcnlzdGFsCisJICogcmVzb25hdG9yIHdpbGwgbmVlZCB0byBwcm92aWRlIHRoZWlyIG93biBpbnB1dCBjbG9jay4KKwkgKi8KKwlpZiAodGVzdF9tb2RlX3BpbihNT0RFX1BJTjkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNsayA9IGNsa19nZXQoTlVMTCwgImV4dGFsIik7CisJaWYgKCFjbGsgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiBQVFJfRVJSKGNsayk7CisJcmV0ID0gY2xrX3NldF9yYXRlKGNsaywgMzMzMzMzMzMpOworCWNsa19wdXQoY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNkazc3ODZfcmVzdGFydChjaGFyICpjbWQpCit7CisJZnBnYV93cml0ZV9yZWcoMHhhNWE1LCBTUlNUUik7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGJvYXJkICovCitzdGF0aWMgdm9pZCBfX2luaXQgc2RrNzc4Nl9zZXR1cChjaGFyICoqY21kbGluZV9wKQoreworCXByX2luZm8oIlJlbmVzYXMgVGVjaG5vbG9neSBFdXJvcGUgU0RLNzc4NiBzdXBwb3J0OlxuIik7CisKKwlzZGs3Nzg2X2ZwZ2FfaW5pdCgpOworCisJcHJfaW5mbygiXHRQQ0IgcmV2aXNpb246XHQlZFxuIiwgZnBnYV9yZWFkX3JlZyhQQ0JSUikgJiAweGYpOworCisJbWFjaGluZV9vcHMucmVzdGFydCA9IHNkazc3ODZfcmVzdGFydDsKK30KKworLyoKKyAqIFRoZSBNYWNoaW5lIFZlY3RvcgorICovCitzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3Nkazc3ODYgX19pbml0bXYgPSB7CisJLm12X25hbWUJCT0gIlNESzc3ODYiLAorCS5tdl9zZXR1cAkJPSBzZGs3Nzg2X3NldHVwLAorCS5tdl9tb2RlX3BpbnMJCT0gc2RrNzc4Nl9tb2RlX3BpbnMsCisJLm12X2Nsa19pbml0CQk9IHNkazc3ODZfY2xrX2luaXQsCisJLm12X2luaXRfaXJxCQk9IHNkazc3ODZfaW5pdF9pcnEsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaW8uYwppbmRleCAxODA0NTU2Li5hZGFkYzc3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaW8uYwpAQCAtMTYsNyArMTYsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVsYXkodm9pZCkKIHsKLQljdHJsX2ludygweDIwMDAwMDAwKTsgIC8qIFAyIFJPTSBBcmVhICovCisJX19yYXdfcmVhZHcoMHgyMDAwMDAwMCk7ICAvKiBQMiBST00gQXJlYSAqLwogfQogCiAvKiBNUzc3NTAgcmVxdWlyZXMgc3BlY2lhbCB2ZXJzaW9ucyBvZiBpbiosIG91dCogcm91dGluZXMsIHNpbmNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaXJxLmMKaW5kZXggYWVmN2YwNS4uOGQ4MjE3NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9pcnEuYwpAQCAtMzIsMTIgKzMyLDEyIEBACiAJdW5zaWduZWQgc2hvcnQgbXNrMCxtc2sxOwogCiAJLyogU2V0IHRoZSBwcmlvcml0eSBpbiBJUFIgdG8gMCAqLwotCXZhbCA9IGN0cmxfaW53KElOVENfSVBSMDEpOworCXZhbCA9IF9fcmF3X3JlYWR3KElOVENfSVBSMDEpOwogCXZhbCAmPSBtYXNrOwotCWN0cmxfb3V0dyh2YWwsIElOVENfSVBSMDEpOworCV9fcmF3X3dyaXRldyh2YWwsIElOVENfSVBSMDEpOwogCS8qIEZQR0EgbWFzayBzZXQgKi8KLQltc2swID0gY3RybF9pbncoSU5UTVNLMCk7Ci0JbXNrMSA9IGN0cmxfaW53KElOVE1TSzEpOworCW1zazAgPSBfX3Jhd19yZWFkdyhJTlRNU0swKTsKKwltc2sxID0gX19yYXdfcmVhZHcoSU5UTVNLMSk7CiAKIAlzd2l0Y2ggKGlycSkgewogCWNhc2UgSVJRMF9JUlE6CkBAIC01MSw4ICs1MSw4IEBACiAJCW1zazEgfD0gMHgwMGZmOwogCQlicmVhazsKIAl9Ci0JY3RybF9vdXR3KG1zazAsIElOVE1TSzApOwotCWN0cmxfb3V0dyhtc2sxLCBJTlRNU0sxKTsKKwlfX3Jhd193cml0ZXcobXNrMCwgSU5UTVNLMCk7CisJX19yYXdfd3JpdGV3KG1zazEsIElOVE1TSzEpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfc2U3MjA2X2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtNjIsMTMgKzYyLDEzIEBACiAJdW5zaWduZWQgc2hvcnQgbXNrMCxtc2sxOwogCiAJLyogU2V0IHByaW9yaXR5IGluIElQUiBiYWNrIHRvIG9yaWdpbmFsIHZhbHVlICovCi0JdmFsID0gY3RybF9pbncoSU5UQ19JUFIwMSk7CisJdmFsID0gX19yYXdfcmVhZHcoSU5UQ19JUFIwMSk7CiAJdmFsIHw9IHZhbHVlOwotCWN0cmxfb3V0dyh2YWwsIElOVENfSVBSMDEpOworCV9fcmF3X3dyaXRldyh2YWwsIElOVENfSVBSMDEpOwogCiAJLyogRlBHQSBtYXNrIHJlc2V0ICovCi0JbXNrMCA9IGN0cmxfaW53KElOVE1TSzApOwotCW1zazEgPSBjdHJsX2ludyhJTlRNU0sxKTsKKwltc2swID0gX19yYXdfcmVhZHcoSU5UTVNLMCk7CisJbXNrMSA9IF9fcmF3X3JlYWR3KElOVE1TSzEpOwogCiAJc3dpdGNoIChpcnEpIHsKIAljYXNlIElSUTBfSVJROgpAQCAtODIsMTkgKzgyLDIwIEBACiAJCW1zazEgJj0gfjB4MDBmZjsKIAkJYnJlYWs7CiAJfQotCWN0cmxfb3V0dyhtc2swLCBJTlRNU0swKTsKLQljdHJsX291dHcobXNrMSwgSU5UTVNLMSk7CisJX19yYXdfd3JpdGV3KG1zazAsIElOVE1TSzApOworCV9fcmF3X3dyaXRldyhtc2sxLCBJTlRNU0sxKTsKIH0KIAogc3RhdGljIHZvaWQgZW9pX3NlNzIwNl9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBzaG9ydCBzdHMwLHN0czE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAotCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRHxJUlFfSU5QUk9HUkVTUykpKQorCWlmICghKGRlc2MtPnN0YXR1cyAmIChJUlFfRElTQUJMRUR8SVJRX0lOUFJPR1JFU1MpKSkKIAkJZW5hYmxlX3NlNzIwNl9pcnEoaXJxKTsKIAkvKiBGUEdBIGlzciBjbGVhciAqLwotCXN0czAgPSBjdHJsX2ludyhJTlRTVFMwKTsKLQlzdHMxID0gY3RybF9pbncoSU5UU1RTMSk7CisJc3RzMCA9IF9fcmF3X3JlYWR3KElOVFNUUzApOworCXN0czEgPSBfX3Jhd19yZWFkdyhJTlRTVFMxKTsKIAogCXN3aXRjaCAoaXJxKSB7CiAJY2FzZSBJUlEwX0lSUToKQEAgLTEwOCw4ICsxMDksOCBAQAogCQlzdHMxICY9IH4weDAwZmY7CiAJCWJyZWFrOwogCX0KLQljdHJsX291dHcoc3RzMCwgSU5UU1RTMCk7Ci0JY3RybF9vdXR3KHN0czEsIElOVFNUUzEpOworCV9fcmF3X3dyaXRldyhzdHMwLCBJTlRTVFMwKTsKKwlfX3Jhd193cml0ZXcoc3RzMSwgSU5UU1RTMSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc2U3MjA2X2lycV9jaGlwIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC0xMzYsMTEgKzEzNywxMSBAQAogCW1ha2Vfc2U3MjA2X2lycShJUlEwX0lSUSk7IC8qIFNNQzkxQzExMSAqLwogCW1ha2Vfc2U3MjA2X2lycShJUlExX0lSUSk7IC8qIEFUQSAqLwogCW1ha2Vfc2U3MjA2X2lycShJUlEzX0lSUSk7IC8qIFNMT1QgLyBQQ00gKi8KLQljdHJsX291dHcoaW53KElOVENfSUNSMSkgfCAweDAwMGIgLElOVENfSUNSMSApIDsgLyogSUNSMSAqLworCV9fcmF3X3dyaXRldyhpbncoSU5UQ19JQ1IxKSB8IDB4MDAwYiAsSU5UQ19JQ1IxICkgOyAvKiBJQ1IxICovCiAKIAkvKiBGUEdBIFN5c3RlbSByZWdpc3RlciBzZXR1cCovCi0JY3RybF9vdXR3KDB4MDAwMCxJTlRTVFMwKTsgLyogQ2xlYXIgSU5UU1RTMCAqLwotCWN0cmxfb3V0dygweDAwMDAsSU5UU1RTMSk7IC8qIENsZWFyIElOVFNUUzEgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLElOVFNUUzApOyAvKiBDbGVhciBJTlRTVFMwICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCxJTlRTVFMxKTsgLyogQ2xlYXIgSU5UU1RTMSAqLwogCS8qIElSUTA9TEFOLCBJUlExPUFUQSwgSVJRMz1TTFQsUENNICovCi0JY3RybF9vdXR3KDB4MDAwMSxJTlRTRUwpOworCV9fcmF3X3dyaXRldygweDAwMDEsSU5UU0VMKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L3NldHVwLmMKaW5kZXggZjU0NjYzODQuLjhmNWM2NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9zZXR1cC5jCkBAIC01MCwxNSArNTAsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7CiAJLmJpdF9wb3MJPSBoZWFydGJlYXRfYml0X3BvcywKIAkubnJfYml0cwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X2JpdF9wb3MpLAotCS5yZWdzaXplCT0gMzIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IFBBX0xFRCwKLQkJLmVuZAk9IFBBX0xFRCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydAk9IFBBX0xFRCwKKwkuZW5kCT0gUEFfTEVELAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewpAQCAtNjcsOCArNjQsOCBAQAogCS5kZXYJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAogCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2U3MjA2X2RldmljZXNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL2lycS5jCmluZGV4IDA1MWMyOWQuLmQ0MzA1YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzM0My9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzczNDMvaXJxLmMKQEAgLTE2LDE2ICsxNiwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bWFjaC1zZS9tYWNoL3NlNzM0My5oPgogCit1bnNpZ25lZCBpbnQgc2U3MzQzX2ZwZ2FfaXJxW1NFNzM0M19GUEdBX0lSUV9OUl0gPSB7IDAsIH07CisKIHN0YXRpYyB2b2lkIGRpc2FibGVfc2U3MzQzX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXVuc2lnbmVkIGludCBiaXQgPSBpcnEgLSBTRTczNDNfRlBHQV9JUlFfQkFTRTsKLQljdHJsX291dHcoY3RybF9pbncoUEFfQ1BMRF9JTVNLKSB8IDEgPDwgYml0LCBQQV9DUExEX0lNU0spOworCXVuc2lnbmVkIGludCBiaXQgPSAodW5zaWduZWQgaW50KWdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBBX0NQTERfSU1TSykgfCAxIDw8IGJpdCwgUEFfQ1BMRF9JTVNLKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX3NlNzM0M19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl1bnNpZ25lZCBpbnQgYml0ID0gaXJxIC0gU0U3MzQzX0ZQR0FfSVJRX0JBU0U7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBBX0NQTERfSU1TSykgJiB+KDEgPDwgYml0KSwgUEFfQ1BMRF9JTVNLKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gKHVuc2lnbmVkIGludClnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQQV9DUExEX0lNU0spICYgfigxIDw8IGJpdCksIFBBX0NQTERfSU1TSyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc2U3MzQzX2lycV9jaGlwIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC0zNywxOSArMzksMTYgQEAKIAogc3RhdGljIHZvaWQgc2U3MzQzX2lycV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JdW5zaWduZWQgc2hvcnQgaW50diA9IGN0cmxfaW53KFBBX0NQTERfU1QpOwotCXN0cnVjdCBpcnFfZGVzYyAqZXh0X2Rlc2M7Ci0JdW5zaWduZWQgaW50IGV4dF9pcnEgPSBTRTczNDNfRlBHQV9JUlFfQkFTRTsKKwl1bnNpZ25lZCBzaG9ydCBpbnR2ID0gX19yYXdfcmVhZHcoUEFfQ1BMRF9TVCk7CisJdW5zaWduZWQgaW50IGV4dF9pcnEgPSAwOwogCiAJaW50diAmPSAoMSA8PCBTRTczNDNfRlBHQV9JUlFfTlIpIC0gMTsKIAotCXdoaWxlIChpbnR2KSB7Ci0JCWlmIChpbnR2ICYgMSkgewotCQkJZXh0X2Rlc2MgPSBpcnFfZGVzYyArIGV4dF9pcnE7Ci0JCQloYW5kbGVfbGV2ZWxfaXJxKGV4dF9pcnEsIGV4dF9kZXNjKTsKLQkJfQotCQlpbnR2ID4+PSAxOwotCQlleHRfaXJxKys7CisJZm9yICg7IGludHY7IGludHYgPj49IDEsIGV4dF9pcnErKykgeworCQlpZiAoIShpbnR2ICYgMSkpCisJCQljb250aW51ZTsKKworCQlnZW5lcmljX2hhbmRsZV9pcnEoc2U3MzQzX2ZwZ2FfaXJxW2V4dF9pcnFdKTsKIAl9CiB9CiAKQEAgLTU4LDE2ICs1NywyNCBAQAogICovCiB2b2lkIF9faW5pdCBpbml0XzczNDNzZV9JUlEodm9pZCkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgaXJxOwogCi0JY3RybF9vdXR3KDAsIFBBX0NQTERfSU1TSyk7CS8qIGRpc2FibGUgYWxsIGlycXMgKi8KLQljdHJsX291dHcoMHgyMDAwLCAweGIwM2ZmZmVjKTsJLyogbXJzaHBjIGlycSBlbmFibGUgKi8KKwlfX3Jhd193cml0ZXcoMCwgUEFfQ1BMRF9JTVNLKTsJLyogZGlzYWJsZSBhbGwgaXJxcyAqLworCV9fcmF3X3dyaXRldygweDIwMDAsIDB4YjAzZmZmZWMpOwkvKiBtcnNocGMgaXJxIGVuYWJsZSAqLwogCi0JZm9yIChpID0gMDsgaSA8IFNFNzM0M19GUEdBX0lSUV9OUjsgaSsrKQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShTRTczNDNfRlBHQV9JUlFfQkFTRSArIGksCisJZm9yIChpID0gMDsgaSA8IFNFNzM0M19GUEdBX0lSUV9OUjsgaSsrKSB7CisJCWlycSA9IGNyZWF0ZV9pcnEoKTsKKwkJaWYgKGlycSA8IDApCisJCQlyZXR1cm47CisJCXNlNzM0M19mcGdhX2lycVtpXSA9IGlycTsKKworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShzZTczNDNfZnBnYV9pcnFbaV0sCiAJCQkJCSAgICAgICZzZTczNDNfaXJxX2NoaXAsCiAJCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOwogCisJCXNldF9pcnFfY2hpcF9kYXRhKHNlNzM0M19mcGdhX2lycVtpXSwgKHZvaWQgKilpKTsKKwl9CisKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlEwX0lSUSwgc2U3MzQzX2lycV9kZW11eCk7CiAJc2V0X2lycV90eXBlKElSUTBfSVJRLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUTFfSVJRLCBzZTczNDNfaXJxX2RlbXV4KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzM0My9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL3NldHVwLmMKaW5kZXggNGRlNTZmMy4uZDIzNzBhZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL3NldHVwLmMKQEAgLTExLDI2ICsxMSwxNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBQQV9MRUQsCi0JCS5lbmQJPSBQQV9MRUQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewotCS5yZWdzaXplID0gMTYsCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBQQV9MRUQsCisJLmVuZAk9IFBBX0xFRCwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzE2QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKIAkubmFtZQkJPSAiaGVhcnRiZWF0IiwKIAkuaWQJCT0gLTEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaGVhcnRiZWF0X2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBub3JfZmxhc2hfcGFydGl0aW9uc1tdID0gewpAQCAtODIsNyArNzMsNiBAQAogCQkubWFwYmFzZQk9IDB4MTYwMDAwMDAsCiAJCS5yZWdzaGlmdAk9IDEsCiAJCS5mbGFncwkJPSBTVDE2QzI1NTBDX0ZMQUdTLAotCQkuaXJxCQk9IFVBUlRBX0lSUSwKIAkJLnVhcnRjbGsJPSA3MzcyODAwLAogCX0sCiAJWzFdID0gewpAQCAtOTAsNyArODAsNiBAQAogCQkubWFwYmFzZQk9IDB4MTcwMDAwMDAsCiAJCS5yZWdzaGlmdAk9IDEsCiAJCS5mbGFncwkJPSBTVDE2QzI1NTBDX0ZMQUdTLAotCQkuaXJxCQk9IFVBUlRCX0lSUSwKIAkJLnVhcnRjbGsJPSA3MzcyODAwLAogCX0sCiAJeyB9LApAQCAtMTIxLDcgKzExMCw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsyXSA9IHsKLQkJLnN0YXJ0ICA9IFVTQl9JUlEsCisJCS8qIEZpbGxlZCBpbiBsYXRlciAqLwogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC0xMzgsOCArMTI3LDggQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHVzYl9kZXZpY2UgPSB7CiAJLm5hbWUJCQk9ICJpc3AxMTZ4LWhjZCIsCiAJLmlkCQkJPSAtMSwKLQkubnVtX3Jlc291cmNlcyAgCT0gQVJSQVlfU0laRSh1c2JfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgCT0gdXNiX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKHVzYl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSB1c2JfcmVzb3VyY2VzLAogCS5kZXYJCQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdXNiX3BsYXRmb3JtX2RhdGEsCiAJfSwKQEAgLTE1NSw2ICsxNDQsMTMgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2g3MzQzc2VfZGV2aWNlc19zZXR1cCh2b2lkKQogeworCS8qIFdpcmUtdXAgZHluYW1pYyB2ZWN0b3JzICovCisJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMF0uaXJxID0gc2U3MzQzX2ZwZ2FfaXJxW1NFNzM0M19GUEdBX0lSUV9VQVJUQV07CisJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMV0uaXJxID0gc2U3MzQzX2ZwZ2FfaXJxW1NFNzM0M19GUEdBX0lSUV9VQVJUQl07CisKKwl1c2JfcmVzb3VyY2VzWzJdLnN0YXJ0ID0gdXNiX3Jlc291cmNlc1syXS5lbmQgPQorCQlzZTczNDNfZnBnYV9pcnFbU0U3MzQzX0ZQR0FfSVJRX1VTQl07CisKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3MzQzc2VfcGxhdGZvcm1fZGV2aWNlcywKIAkJCQkgICAgQVJSQVlfU0laRShzaDczNDNzZV9wbGF0Zm9ybV9kZXZpY2VzKSk7CiB9CkBAIC0xNjUsMTAgKzE2MSwxMCBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgc2g3MzQzc2Vfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKLQljdHJsX291dHcoMHhmOTAwLCBGUEdBX09VVCk7CS8qIEZQR0EgKi8KKwlfX3Jhd193cml0ZXcoMHhmOTAwLCBGUEdBX09VVCk7CS8qIEZQR0EgKi8KIAotCWN0cmxfb3V0dygweDAwMDIsIFBPUlRfUEVDUik7CS8qIFBPUlQgRSAxID0gSVJRNSAqLwotCWN0cmxfb3V0dygweDAwMjAsIFBPUlRfUFNFTEQpOworCV9fcmF3X3dyaXRldygweDAwMDIsIFBPUlRfUEVDUik7CS8qIFBPUlQgRSAxID0gSVJRNSAqLworCV9fcmF3X3dyaXRldygweDAwMjAsIFBPUlRfUFNFTEQpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTVM3MzQzQ1AwMSBTZXR1cC4uLmRvbmVcbiIpOwogfQpAQCAtMTc5LDYgKzE3NSw1IEBACiBzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12XzczNDNzZSBfX2luaXRtdiA9IHsKIAkubXZfbmFtZSA9ICJTb2x1dGlvbkVuZ2luZSA3MzQzIiwKIAkubXZfc2V0dXAgPSBzaDczNDNzZV9zZXR1cCwKLQkubXZfbnJfaXJxcyA9IFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX05SLAogCS5tdl9pbml0X2lycSA9IGluaXRfNzM0M3NlX0lSUSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvaXJxLmMKaW5kZXggZWMxZmVhNS4uMTAyOGMxNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzB4L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcweC9pcnEuYwpAQCAtOTYsMTMgKzk2LDEzIEBACiB2b2lkIF9faW5pdCBpbml0X3NlX0lSUSh2b2lkKQogewogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KLQljdHJsX291dHcoMCwgQkNSX0lMQ1JBKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JCKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JDKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JEKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JFKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JGKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JHKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JBKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JCKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JDKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JEKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JFKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JGKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JHKTsKIAogCXJlZ2lzdGVyX2lwcl9jb250cm9sbGVyKCZpcHJfaXJxX2Rlc2MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzB4L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvc2V0dXAuYwppbmRleCA1MjdlYjZiLi42NmQzOWQxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvc2V0dXAuYwpAQCAtOTMsMTUgKzkzLDEyIEBACiBzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewogCS5iaXRfcG9zCT0gaGVhcnRiZWF0X2JpdF9wb3MsCiAJLm5yX2JpdHMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9iaXRfcG9zKSwKLQkucmVnc2l6ZQk9IDE2LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBQQV9MRUQsCi0JCS5lbmQJPSBQQV9MRUQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBQQV9MRUQsCisJLmVuZAk9IFBBX0xFRCwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzE2QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKQEAgLTExMCw4ICsxMDcsOCBAQAogCS5kZXYJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAogCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKSB8fFwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMS9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMS9pcnEuYwppbmRleCBiNDE3YWNjLi5kODUwMjJlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjEvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL2lycS5jCkBAIC0zOCw3ICszOCw3IEBACiB2b2lkIF9faW5pdCBpbml0X3NlNzcyMV9JUlEodm9pZCkKIHsKIAkvKiBQUENSICovCi0JY3RybF9vdXR3KGN0cmxfaW53KDB4YTQwNTAxMTgpICYgfjB4MDBmZiwgMHhhNDA1MDExOCk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KDB4YTQwNTAxMTgpICYgfjB4MDBmZiwgMHhhNDA1MDExOCk7CiAKIAlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7CiAJaW50Y19zZXRfcHJpb3JpdHkoTVJTSFBDX0lSUTAsIDB4ZiAtIE1SU0hQQ19JUlEwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMS9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL3NldHVwLmMKaW5kZXggNTVhZjRjMy4uNzQxNmFkNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL3NldHVwLmMKQEAgLTIzLDE1ICsyMywxMiBAQAogc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKIAkuYml0X3Bvcwk9IGhlYXJ0YmVhdF9iaXRfcG9zLAogCS5ucl9iaXRzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfYml0X3BvcyksCi0JLnJlZ3NpemUJPSAxNiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gUEFfTEVELAotCQkuZW5kCT0gUEFfTEVELAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUEFfTEVELAorCS5lbmQJPSBQQV9MRUQsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8xNkJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CkBAIC00MCw4ICszNyw4IEBACiAJLmRldgk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmaGVhcnRiZWF0X2RhdGEsCiAJfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2ZfaWRlX3Jlc291cmNlc1tdID0gewpAQCAtODMsMTAgKzgwLDEwIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc2U3NzIxX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJLyogZm9yIFVTQiAqLwotCWN0cmxfb3V0dygweDAwMDAsIDB4QTQwNTAxMEMpOwkvKiBQR0NSICovCi0JY3RybF9vdXR3KDB4MDAwMCwgMHhBNDA1MDEwRSk7CS8qIFBIQ1IgKi8KLQljdHJsX291dHcoMHgwMEFBLCAweEE0MDUwMTE4KTsJLyogUFBDUiAqLwotCWN0cmxfb3V0dygweDAwMDAsIDB4QTQwNTAxMjQpOwkvKiBQU0VMQSAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIDB4QTQwNTAxMEMpOwkvKiBQR0NSICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgMHhBNDA1MDEwRSk7CS8qIFBIQ1IgKi8KKwlfX3Jhd193cml0ZXcoMHgwMEFBLCAweEE0MDUwMTE4KTsJLyogUFBDUiAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIDB4QTQwNTAxMjQpOwkvKiBQU0VMQSAqLwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL2lycS5jCmluZGV4IGIyMjFiNjguLjYxNjA1ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjIvaXJxLmMKQEAgLTIxLDEzICsyMSwxMyBAQAogc3RhdGljIHZvaWQgZGlzYWJsZV9zZTc3MjJfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgaW50IGJpdCA9ICh1bnNpZ25lZCBpbnQpZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQljdHJsX291dHcoY3RybF9pbncoSVJRMDFfTUFTSykgfCAxIDw8IGJpdCwgSVJRMDFfTUFTSyk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KElSUTAxX01BU0spIHwgMSA8PCBiaXQsIElSUTAxX01BU0spOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfc2U3NzIyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGludCBiaXQgPSAodW5zaWduZWQgaW50KWdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KElSUTAxX01BU0spICYgfigxIDw8IGJpdCksIElSUTAxX01BU0spOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhJUlEwMV9NQVNLKSAmIH4oMSA8PCBiaXQpLCBJUlEwMV9NQVNLKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzZTc3MjJfaXJxX2NoaXAgX19yZWFkX21vc3RseSA9IHsKQEAgLTM5LDcgKzM5LDcgQEAKIAogc3RhdGljIHZvaWQgc2U3NzIyX2lycV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JdW5zaWduZWQgc2hvcnQgaW50diA9IGN0cmxfaW53KElSUTAxX1NUUyk7CisJdW5zaWduZWQgc2hvcnQgaW50diA9IF9fcmF3X3JlYWR3KElSUTAxX1NUUyk7CiAJdW5zaWduZWQgaW50IGV4dF9pcnEgPSAwOwogCiAJaW50diAmPSAoMSA8PCBTRTc3MjJfRlBHQV9JUlFfTlIpIC0gMTsKQEAgLTU5LDggKzU5LDggQEAKIHsKIAlpbnQgaSwgaXJxOwogCi0JY3RybF9vdXR3KDAsIElSUTAxX01BU0spOyAgICAgICAvKiBkaXNhYmxlIGFsbCBpcnFzICovCi0JY3RybF9vdXR3KDB4MjAwMCwgMHhiMDNmZmZlYyk7ICAvKiBtcnNocGMgaXJxIGVuYWJsZSAqLworCV9fcmF3X3dyaXRldygwLCBJUlEwMV9NQVNLKTsgICAgICAgLyogZGlzYWJsZSBhbGwgaXJxcyAqLworCV9fcmF3X3dyaXRldygweDIwMDAsIDB4YjAzZmZmZWMpOyAgLyogbXJzaHBjIGlycSBlbmFibGUgKi8KIAogCWZvciAoaSA9IDA7IGkgPCBTRTc3MjJfRlBHQV9JUlFfTlI7IGkrKykgewogCQlpcnEgPSBjcmVhdGVfaXJxKCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9zZXR1cC5jCmluZGV4IGIxY2I5NDIuLjgwYTRlNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9zZXR1cC5jCkBAIC0yNSwyNiArMjUsMTcgQEAKICNpbmNsdWRlIDxjcHUvc2g3NzIyLmg+CiAKIC8qIEhlYXJ0YmVhdCAqLwotc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKLQkucmVnc2l6ZSA9IDE2LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gUEFfTEVELAotCQkuZW5kICAgID0gUEFfTEVELAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydCAgPSBQQV9MRUQsCisJLmVuZCAgICA9IFBBX0xFRCwKKwkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8xNkJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CiAJLm5hbWUgICAgICAgICAgID0gImhlYXJ0YmVhdCIsCiAJLmlkICAgICAgICAgICAgID0gLTEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaGVhcnRiZWF0X2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSAgICAgICA9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgID0gMSwKKwkucmVzb3VyY2UgICAgICAgPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogLyogU01DOTF4ICovCkBAIC0xNjUsMzIgKzE1NiwzMiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2U3NzIyX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JY3RybF9vdXR3KDB4MDEwRCwgRlBHQV9PVVQpOyAgICAvKiBGUEdBICovCisJX19yYXdfd3JpdGV3KDB4MDEwRCwgRlBHQV9PVVQpOyAgICAvKiBGUEdBICovCiAKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BFQ1IpOyAgIC8qIFBPUlQgRSAxID0gSVJRNSAsRSAwID0gQlMgKi8KLQljdHJsX291dHcoMHgxMDAwLCBQT1JUX1BKQ1IpOyAgIC8qIFBPUlQgSiAxID0gSVJRMSxKIDAgPUlSUTAgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BFQ1IpOyAgIC8qIFBPUlQgRSAxID0gSVJRNSAsRSAwID0gQlMgKi8KKwlfX3Jhd193cml0ZXcoMHgxMDAwLCBQT1JUX1BKQ1IpOyAgIC8qIFBPUlQgSiAxID0gSVJRMSxKIDAgPUlSUTAgKi8KIAogCS8qIExDREMgSS9PICovCi0JY3RybF9vdXR3KDB4MDAyMCwgUE9SVF9QU0VMRCk7CisJX19yYXdfd3JpdGV3KDB4MDAyMCwgUE9SVF9QU0VMRCk7CiAKIAkvKiBTSU9GMSovCi0JY3RybF9vdXR3KDB4MDAwMywgUE9SVF9QU0VMQik7Ci0JY3RybF9vdXR3KDB4ZTAwMCwgUE9SVF9QU0VMQyk7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QS0NSKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAzLCBQT1JUX1BTRUxCKTsKKwlfX3Jhd193cml0ZXcoMHhlMDAwLCBQT1JUX1BTRUxDKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BLQ1IpOwogCiAJLyogTENEQyAqLwotCWN0cmxfb3V0dygweDQwMjAsIFBPUlRfUEhDUik7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QTENSKTsKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BNQ1IpOwotCWN0cmxfb3V0dygweDAwMDIsIFBPUlRfUFJDUik7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QWENSKTsgICAvKiBMQ0RDLENTNkEgKi8KKwlfX3Jhd193cml0ZXcoMHg0MDIwLCBQT1JUX1BIQ1IpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUExDUik7CisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUE9SVF9QTUNSKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAyLCBQT1JUX1BSQ1IpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUFhDUik7ICAgLyogTENEQyxDUzZBICovCiAKIAkvKiBLRVlTQyAqLwotCWN0cmxfb3V0dygweDBBMTAsIFBPUlRfUFNFTEEpOyAvKiBCUyxTSEhJRDIgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BZQ1IpOwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUFpDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfSElaQ1JBKSAmIH4weDQwMDAsIFBPUlRfSElaQ1JBKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9ISVpDUkMpICYgfjB4YzAwMCwgUE9SVF9ISVpDUkMpOworCV9fcmF3X3dyaXRldygweDBBMTAsIFBPUlRfUFNFTEEpOyAvKiBCUyxTSEhJRDIgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BZQ1IpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUFpDUik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfSElaQ1JBKSAmIH4weDQwMDAsIFBPUlRfSElaQ1JBKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUE9SVF9ISVpDUkMpICYgfjB4YzAwMCwgUE9SVF9ISVpDUkMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L2lycS5jCmluZGV4IGY3NmNmM2IuLjA5NDJiZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvaXJxLmMKQEAgLTcyLDE0ICs3MiwxNCBAQAogewogCXN0cnVjdCBmcGdhX2lycSBzZXQgPSBnZXRfZnBnYV9pcnEoZnBnYTJpcnEoaXJxKSk7CiAJdW5zaWduZWQgaW50IGJpdCA9IGlycSAtIHNldC5iYXNlOwotCWN0cmxfb3V0dyhjdHJsX2ludyhzZXQubXJhZGRyKSB8IDB4MDAwMSA8PCBiaXQsIHNldC5tcmFkZHIpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhzZXQubXJhZGRyKSB8IDB4MDAwMSA8PCBiaXQsIHNldC5tcmFkZHIpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfc2U3NzI0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXN0cnVjdCBmcGdhX2lycSBzZXQgPSBnZXRfZnBnYV9pcnEoZnBnYTJpcnEoaXJxKSk7CiAJdW5zaWduZWQgaW50IGJpdCA9IGlycSAtIHNldC5iYXNlOwotCWN0cmxfb3V0dyhjdHJsX2ludyhzZXQubXJhZGRyKSAmIH4oMHgwMDAxIDw8IGJpdCksIHNldC5tcmFkZHIpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhzZXQubXJhZGRyKSAmIH4oMHgwMDAxIDw8IGJpdCksIHNldC5tcmFkZHIpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNlNzcyNF9pcnFfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewpAQCAtOTIsMTkgKzkyLDE2IEBACiBzdGF0aWMgdm9pZCBzZTc3MjRfaXJxX2RlbXV4KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgZnBnYV9pcnEgc2V0ID0gZ2V0X2ZwZ2FfaXJxKGlycSk7Ci0JdW5zaWduZWQgc2hvcnQgaW50diA9IGN0cmxfaW53KHNldC5zcmFkZHIpOwotCXN0cnVjdCBpcnFfZGVzYyAqZXh0X2Rlc2M7CisJdW5zaWduZWQgc2hvcnQgaW50diA9IF9fcmF3X3JlYWR3KHNldC5zcmFkZHIpOwogCXVuc2lnbmVkIGludCBleHRfaXJxID0gc2V0LmJhc2U7CiAKIAlpbnR2ICY9IHNldC5tYXNrOwogCi0Jd2hpbGUgKGludHYpIHsKLQkJaWYgKGludHYgJiAweDAwMDEpIHsKLQkJCWV4dF9kZXNjID0gaXJxX2Rlc2MgKyBleHRfaXJxOwotCQkJaGFuZGxlX2xldmVsX2lycShleHRfaXJxLCBleHRfZGVzYyk7Ci0JCX0KLQkJaW50diA+Pj0gMTsKLQkJZXh0X2lycSsrOworCWZvciAoOyBpbnR2OyBpbnR2ID4+PSAxLCBleHRfaXJxKyspIHsKKwkJaWYgKCEoaW50diAmIDEpKQorCQkJY29udGludWU7CisKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGV4dF9pcnEpOwogCX0KIH0KIApAQCAtMTEzLDIwICsxMTAsMzkgQEAKICAqLwogdm9pZCBfX2luaXQgaW5pdF9zZTc3MjRfSVJRKHZvaWQpCiB7Ci0JaW50IGk7CisJaW50IGksIG5pZCA9IGNwdV90b19ub2RlKGJvb3RfY3B1X2RhdGEpOwogCi0JY3RybF9vdXR3KDB4ZmZmZiwgSVJRMF9NUik7ICAvKiBtYXNrIGFsbCAqLwotCWN0cmxfb3V0dygweGZmZmYsIElSUTFfTVIpOyAgLyogbWFzayBhbGwgKi8KLQljdHJsX291dHcoMHhmZmZmLCBJUlEyX01SKTsgIC8qIG1hc2sgYWxsICovCi0JY3RybF9vdXR3KDB4MDAwMCwgSVJRMF9TUik7ICAvKiBjbGVhciBpcnEgKi8KLQljdHJsX291dHcoMHgwMDAwLCBJUlExX1NSKTsgIC8qIGNsZWFyIGlycSAqLwotCWN0cmxfb3V0dygweDAwMDAsIElSUTJfU1IpOyAgLyogY2xlYXIgaXJxICovCi0JY3RybF9vdXR3KDB4MDAyYSwgSVJRX01PREUpOyAvKiBzZXQgaXJxIHR5cGUgKi8KKwlfX3Jhd193cml0ZXcoMHhmZmZmLCBJUlEwX01SKTsgIC8qIG1hc2sgYWxsICovCisJX19yYXdfd3JpdGV3KDB4ZmZmZiwgSVJRMV9NUik7ICAvKiBtYXNrIGFsbCAqLworCV9fcmF3X3dyaXRldygweGZmZmYsIElSUTJfTVIpOyAgLyogbWFzayBhbGwgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBJUlEwX1NSKTsgIC8qIGNsZWFyIGlycSAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIElSUTFfU1IpOyAgLyogY2xlYXIgaXJxICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgSVJRMl9TUik7ICAvKiBjbGVhciBpcnEgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDJhLCBJUlFfTU9ERSk7IC8qIHNldCBpcnEgdHlwZSAqLwogCi0JZm9yIChpID0gMDsgaSA8IFNFNzcyNF9GUEdBX0lSUV9OUjsgaSsrKQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShTRTc3MjRfRlBHQV9JUlFfQkFTRSArIGksCisJZm9yIChpID0gMDsgaSA8IFNFNzcyNF9GUEdBX0lSUV9OUjsgaSsrKSB7CisJCWludCBpcnEsIHdhbnRlZDsKKworCQl3YW50ZWQgPSBTRTc3MjRfRlBHQV9JUlFfQkFTRSArIGk7CisKKwkJaXJxID0gY3JlYXRlX2lycV9ucih3YW50ZWQsIG5pZCk7CisJCWlmICh1bmxpa2VseShpcnEgPT0gMCkpIHsKKwkJCXByX2VycigiJXM6IGZhaWxlZCBob29raW5nIGlycSAlZCBmb3IgRlBHQVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgd2FudGVkKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmICh1bmxpa2VseShpcnEgIT0gd2FudGVkKSkgeworCQkJcHJfZXJyKCIlczogZ290IGlycSAlZCBidXQgd2FudGVkICVkLCBiYWlsaW5nLlxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaXJxLCB3YW50ZWQpOworCQkJZGVzdHJveV9pcnEoaXJxKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKIAkJCQkJICAgICAgJnNlNzcyNF9pcnFfY2hpcCwKIAkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CisJfQogCiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRMF9JUlEsIHNlNzcyNF9pcnFfZGVtdXgpOwogCXNldF9pcnFfdHlwZShJUlEwX0lSUSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZHJhbS5TIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NkcmFtLlMKaW5kZXggOTA0MDE2Ny4uNmZhNDczNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NkcmFtLlMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NkcmFtLlMKQEAgLTM5LDYgKzM5LDEwIEBACiAKIAkvKiBEQlNDOiBwdXQgbWVtb3J5IGluIGF1dG8tcmVmcmVzaCBtb2RlICovCiAKKwltb3YubAlAKFNIX1NMRUVQX01PREUsIHI1KSwgcjAKKwl0c3QJI1NVU1BfU0hfUlNUQU5EQlksIHIwCisJYmYJcmVzdW1lX3JzdGFuZGJ5CisKIAlFRCAweEZEMDAwMDQwLCAweDAwMDAwMDAwIC8qIERCUkZQRE4wICovCiAJV0FJVCAxCiAJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwMiAvKiBEQkNNRENOVCAoUEFMTCkgKi8KQEAgLTQ5LDQgKzUzLDc5IEBACiAJcnRzCiAJIG5vcAogCityZXN1bWVfcnN0YW5kYnk6CisKKwkvKiBDUEc6IHNldHVwIGNsb2NrcyBiZWZvcmUgcmVzdGFydGluZyBleHRlcm5hbCBtZW1vcnkgKi8KKworCUVEIDB4QTQxNTAwMjQsIDB4MDAwMDQwMDAgLyogUExMQ1IgKi8KKworCW1vdi5sCUZSUUNSQSxyMAorCW1vdi5sCUByMCxyMworCW1vdi5sCUtJQ0sscjEKKwlvcglyMSwgcjMKKwltb3YubAlyMywgQHIwCisKKwltb3YubAlMU1RBVFMscjAKKwltb3YJIzEscjEKK1dBSVRfTFNUQVRTOgorCW1vdi5sCUByMCxyMworCXRzdAlyMSxyMworCWJmCVdBSVRfTFNUQVRTCisKKwkvKiBEQlNDOiByZS1pbml0aWFsaXplIGFuZCBwdXQgaW4gYXV0by1yZWZyZXNoICovCisKKwlFRCAweEZEMDAwMTA4LCAweDAwMDAwMTgxIC8qIERCUERDTlQwICovCisJRUQgMHhGRDAwMDAyMCwgMHgwMTVCMDAwMiAvKiBEQkNPTkYgKi8KKwlFRCAweEZEMDAwMDMwLCAweDAzMDcxNTAyIC8qIERCVFIwICovCisJRUQgMHhGRDAwMDAzNCwgMHgwMjAyMDEwMiAvKiBEQlRSMSAqLworCUVEIDB4RkQwMDAwMzgsIDB4MDEwOTA0MDUgLyogREJUUjIgKi8KKwlFRCAweEZEMDAwMDNDLCAweDAwMDAwMDAyIC8qIERCVFIzICovCisJRUQgMHhGRDAwMDAwOCwgMHgwMDAwMDAwNSAvKiBEQktJTkQgKi8KKwlFRCAweEZEMDAwMDQwLCAweDAwMDAwMDAxIC8qIERCUkZQRE4wICovCisJRUQgMHhGRDAwMDA0MCwgMHgwMDAwMDAwMCAvKiBEQlJGUEROMCAqLworCUVEIDB4RkQwMDAwMTgsIDB4MDAwMDAwMDEgLyogREJDS0VDTlQgKi8KKworCW1vdgkjMTAwLHIwCitXQUlUXzQwME5TOgorCWR0CXIwCisJYmYJV0FJVF80MDBOUworCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwMiAvKiBEQkNNRENOVCAoUEFMTCkgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDIwMDAwIC8qIERCTVJDTlQgKEVNUjIpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAzMDAwMCAvKiBEQk1SQ05UIChFTVIzKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMTAwMDQgLyogREJNUkNOVCAoRU1SKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMDA1MzIgLyogREJNUkNOVCAoTVJTKSAqLworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDIgLyogREJDTURDTlQgKFBBTEwpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwNCAvKiBEQkNNRENOVCAoUkVGKSAqLworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDQgLyogREJDTURDTlQgKFJFRikgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDAwNDMyIC8qIERCTVJDTlQgKE1SUykgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDEwM2MwIC8qIERCTVJDTlQgKEVNUikgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDEwMDQwIC8qIERCTVJDTlQgKEVNUikgKi8KKworCW1vdgkjMTAwLHIwCitXQUlUXzQwME5TXzI6CisJZHQJcjAKKwliZglXQUlUXzQwME5TXzIKKworCUVEIDB4RkQwMDAwMTAsIDB4MDAwMDAwMDEgLyogREJFTiAqLworCUVEIDB4RkQwMDAwNDQsIDB4MDAwMDA1MGYgLyogREJSRlBETjEgKi8KKwlFRCAweEZEMDAwMDQ4LCAweDIzNjgwMGU2IC8qIERCUkZQRE4yICovCisKKwltb3YubAlEVU1NWSxyMAorCW1vdi5sCUByMCwgcjEgLyogZm9yY2Ugc2luZ2xlIGR1bW15IHJlYWQgKi8KKworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDIgLyogREJDTURDTlQgKFBBTEwpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwNCAvKiBEQkNNRENOVCAoUkVGKSAqLworCUVEIDB4RkQwMDAxMDgsIDB4MDAwMDAwODAgLyogREJQRENOVDAgKi8KKwlFRCAweEZEMDAwMDQwLCAweDAwMDEwMDAwIC8qIERCUkZQRE4wICovCisKKwlydHMKKwkgbm9wCisKKwkuYmFsaWduIDQKK0RVTU1ZOgkubG9uZwkweGFjNDAwMDAwCitGUlFDUkE6CS5sb25nCTB4YTQxNTAwMDAKK0tJQ0s6CS5sb25nCTB4ODAwMDAwMDAKK0xTVEFUUzoJLmxvbmcJMHhhNDE1MDA2MAorCiBFTlRSWShtczc3MjRzZV9zZHJhbV9sZWF2ZV9lbmQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCmluZGV4IDg1OGVjYjIuLjY2Y2RiYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCkBAIC01MywyNiArNTMsMTcgQEAKICAqLwogCiAvKiBIZWFydGJlYXQgKi8KLXN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7Ci0JLnJlZ3NpemUgPSAxNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IFBBX0xFRCwKLQkJLmVuZCAgICA9IFBBX0xFRCwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgID0gUEFfTEVELAorCS5lbmQgICAgPSBQQV9MRUQsCisJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewogCS5uYW1lICAgICAgICAgICA9ICJoZWFydGJlYXQiLAogCS5pZCAgICAgICAgICAgICA9IC0xLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmhlYXJ0YmVhdF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IDEsCisJLnJlc291cmNlICAgICAgID0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIC8qIExBTjkxQzExMSAqLwpAQCAtMjY1LDEyICsyNTYsMTIgQEAKICNkZWZpbmUgRkNMS0FDUgkJMHhhNDE1MDAwOAogc3RhdGljIHZvaWQgZnNpbWNrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCXUzMiBzdGF0dXMgPSBjdHJsX2lubChjbGstPmVuYWJsZV9yZWcpOworCXUzMiBzdGF0dXMgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwogCiAJLyogdXNlIGV4dGVybmFsIGNsb2NrICovCiAJc3RhdHVzICY9IH4weDAwMDAwMGZmOwogCXN0YXR1cyB8PSAweDAwMDAwMDgwOwotCWN0cmxfb3V0bChzdGF0dXMsIGNsay0+ZW5hYmxlX3JlZyk7CisJX19yYXdfd3JpdGVsKHN0YXR1cywgY2xrLT5lbmFibGVfcmVnKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIGZzaW1ja19jbGtfb3BzID0gewpAQCAtMzIyLDcgKzMxMyw3IEBACiAvKiBLRVlTQyBpbiBTb0MgKE5lZWRzIFNXMzMtMiBzZXQgdG8gT04pICovCiBzdGF0aWMgc3RydWN0IHNoX2tleXNjX2luZm8ga2V5c2NfaW5mbyA9IHsKIAkubW9kZSA9IFNIX0tFWVNDX01PREVfMSwKLQkuc2Nhbl90aW1pbmcgPSAxMCwKKwkuc2Nhbl90aW1pbmcgPSAzLAogCS5kZWxheSA9IDUwLAogCS5rZXljb2RlcyA9IHsKIAkJS0VZXzEsIEtFWV8yLCBLRVlfMywgS0VZXzQsIEtFWV81LApAQCAtNDYwLDcgKzQ1MSw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IDEwMSwKKwkJLnN0YXJ0ICA9IDEwMCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDgzLDcgKzQ3NCw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IDI0LAorCQkuc3RhcnQgID0gMjMsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTQ5OCw2ICs0ODksMjYgQEAKIAl9LAogfTsKIAorLyogSXJEQSAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpcmRhX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiSXJEQSIsCisJCS5zdGFydCAgPSAweEE0NUQwMDAwLAorCQkuZW5kICAgID0gMHhBNDVEMDA0OSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMjAsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXJkYV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoX3NpciIsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpcmRhX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gaXJkYV9yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXM3NzI0c2VfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmhlYXJ0YmVhdF9kZXZpY2UsCiAJJnNtYzkxeF9ldGhfZGV2aWNlLApAQCAtNTEyLDYgKzUyMyw3IEBACiAJJmZzaV9kZXZpY2UsCiAJJnNkaGkwX2NuN19kZXZpY2UsCiAJJnNkaGkxX2NuOF9kZXZpY2UsCisJJmlyZGFfZGV2aWNlLAogfTsKIAogLyogSTJDIGRldmljZSAqLwpAQCAtNTMxLDcgKzU0Myw3IEBACiAJaW50IHQgPSAxMDAwMDsKIAogCXdoaWxlICh0LS0pIHsKLQkJaWYgKCFjdHJsX2ludyhFRVBST01fU1RBVCkpCisJCWlmICghX19yYXdfcmVhZHcoRUVQUk9NX1NUQVQpKQogCQkJcmV0dXJuIDE7CiAJCXVkZWxheSgxKTsKIAl9CkBAIC01NTEsMTMgKzU2MywxMyBAQAogCiAJLyogcmVhZCBNQUMgYWRkciBmcm9tIEVFUFJPTSAqLwogCWZvciAoaSA9IDAgOyBpIDwgMyA7IGkrKykgewotCQljdHJsX291dHcoMHgwLCBFRVBST01fT1ApOyAvKiByZWFkICovCi0JCWN0cmxfb3V0dyhpKjIsIEVFUFJPTV9BRFIpOwotCQljdHJsX291dHcoMHgxLCBFRVBST01fU1RSVCk7CisJCV9fcmF3X3dyaXRldygweDAsIEVFUFJPTV9PUCk7IC8qIHJlYWQgKi8KKwkJX19yYXdfd3JpdGV3KGkqMiwgRUVQUk9NX0FEUik7CisJCV9fcmF3X3dyaXRldygweDEsIEVFUFJPTV9TVFJUKTsKIAkJaWYgKCFzaF9ldGhfaXNfZWVwcm9tX3JlYWR5KCkpCiAJCQlyZXR1cm47CiAKLQkJbWFjID0gY3RybF9pbncoRUVQUk9NX0RBVEEpOworCQltYWMgPSBfX3Jhd19yZWFkdyhFRVBST01fREFUQSk7CiAJCXNoX2V0aF9wbGF0Lm1hY19hZGRyW2kgPDwgMV0gPSBtYWMgJiAweGZmOwogCQlzaF9ldGhfcGxhdC5tYWNfYWRkclsoaSA8PCAxKSArIDFdID0gbWFjID4+IDg7CiAJfQpAQCAtNTk0LDI4ICs2MDYsMjkgQEAKIAogc3RhdGljIGludCBfX2luaXQgZGV2aWNlc19zZXR1cCh2b2lkKQogewotCXUxNiBzdyA9IGN0cmxfaW53KFNXNDE0MCk7IC8qIHNlbGVjdCBjYW1lcmEsIG1vbml0b3IgKi8KLQlzdHJ1Y3QgY2xrICpmc2lhX2NsazsKKwl1MTYgc3cgPSBfX3Jhd19yZWFkdyhTVzQxNDApOyAvKiBzZWxlY3QgY2FtZXJhLCBtb25pdG9yICovCisJc3RydWN0IGNsayAqY2xrOwogCiAJLyogcmVnaXN0ZXIgYm9hcmQgc3BlY2lmaWMgc2VsZi1yZWZyZXNoIGNvZGUgKi8KLQlzaF9tb2JpbGVfcmVnaXN0ZXJfc2VsZl9yZWZyZXNoKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YsCisJc2hfbW9iaWxlX3JlZ2lzdGVyX3NlbGZfcmVmcmVzaChTVVNQX1NIX1NUQU5EQlkgfCBTVVNQX1NIX1NGIHwKKwkJCQkJU1VTUF9TSF9SU1RBTkRCWSwKIAkJCQkJJm1zNzcyNHNlX3NkcmFtX2VudGVyX3N0YXJ0LAogCQkJCQkmbXM3NzI0c2Vfc2RyYW1fZW50ZXJfZW5kLAogCQkJCQkmbXM3NzI0c2Vfc2RyYW1fbGVhdmVfc3RhcnQsCiAJCQkJCSZtczc3MjRzZV9zZHJhbV9sZWF2ZV9lbmQpOwogCS8qIFJlc2V0IFJlbGVhc2UgKi8KLQljdHJsX291dHcoY3RybF9pbncoRlBHQV9PVVQpICYKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoRlBHQV9PVVQpICYKIAkJICB+KCgxIDw8IDEpICB8IC8qIExBTiAqLwogCQkgICAgKDEgPDwgNikgIHwgLyogVklERU8gREFDICovCiAJCSAgICAoMSA8PCA3KSAgfCAvKiBBSzQ2NDMgKi8KKwkJICAgICgxIDw8IDgpICB8IC8qIElyREEgKi8KIAkJICAgICgxIDw8IDEyKSB8IC8qIFVTQjAgKi8KIAkJICAgICgxIDw8IDE0KSksIC8qIFJNSUkgKi8KIAkJICBGUEdBX09VVCk7CiAKIAkvKiB0dXJuIG9uIFVTQiBjbG9ja3MsIHVzZSBleHRlcm5hbCBjbG9jayAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSAmIH4weGMwMDApIHwgMHg4MDAwLCBQT1JUX01TRUxDUkIpOworCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoUE9SVF9NU0VMQ1JCKSAmIH4weGMwMDApIHwgMHg4MDAwLCBQT1JUX01TRUxDUkIpOwogCi0jaWZkZWYgQ09ORklHX1BNCiAJLyogTGV0IExFRDkgc2hvdyBTVEFUVVMyICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU1RBVFVTMiwgTlVMTCk7CiAKQEAgLTYyNCwyOCArNjM3LDEyIEBACiAKIAkvKiBMaXQgTEVEMTEgc2hvdyBQRFNUQVRVUyAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1BEU1RBVFVTLCBOVUxMKTsKLSNlbHNlCi0JLyogTGl0IExFRDkgKi8KLQlncGlvX3JlcXVlc3QoR1BJT19QVEo2LCBOVUxMKTsKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEo2LCAxKTsKLQlncGlvX2V4cG9ydChHUElPX1BUSjYsIDApOwotCi0JLyogTGl0IExFRDEwICovCi0JZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNSwgTlVMTCk7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNSwgMSk7Ci0JZ3Bpb19leHBvcnQoR1BJT19QVEo1LCAwKTsKLQotCS8qIExpdCBMRUQxMSAqLwotCWdwaW9fcmVxdWVzdChHUElPX1BUSjcsIE5VTEwpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSjcsIDEpOwotCWdwaW9fZXhwb3J0KEdQSU9fUFRKNywgMCk7Ci0jZW5kaWYKIAogCS8qIGVuYWJsZSBVU0IwIHBvcnQgKi8KLQljdHJsX291dHcoMHgwNjAwLCAweGE0MDUwMWQ0KTsKKwlfX3Jhd193cml0ZXcoMHgwNjAwLCAweGE0MDUwMWQ0KTsKIAogCS8qIGVuYWJsZSBVU0IxIHBvcnQgKi8KLQljdHJsX291dHcoMHgwNjAwLCAweGE0MDUwMTkyKTsKKwlfX3Jhd193cml0ZXcoMHgwNjAwLCAweGE0MDUwMTkyKTsKIAogCS8qIGVuYWJsZSBJUlEgMCwxLDIgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JTlRDX0lSUTAsIE5VTEwpOwpAQCAtNjkzLDcgKzY5MCw3IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEVkNQV0MsIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFJELCAgICBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RMQ0xLLCAgTlVMTCk7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX0hJWkEpICYgfjB4MDAwMSksIFBPUlRfSElaQSk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX0hJWkEpICYgfjB4MDAwMSksIFBPUlRfSElaQSk7CiAKIAkvKiBlbmFibGUgQ0VVMCAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJTzBfRDE1LCBOVUxMKTsKQEAgLTc2NCwxMyArNzYxLDE4IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQ0xLQVVESU9CTywgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJSUFTRCwgICAgTlVMTCk7CiAKKwkvKiBzZXQgU1BVMiBjbG9jayB0byA4My40IE1IeiAqLworCWNsayA9IGNsa19nZXQoTlVMTCwgInNwdV9jbGsiKTsKKwljbGtfc2V0X3JhdGUoY2xrLCBjbGtfcm91bmRfcmF0ZShjbGssIDgzMzMzMzMzKSk7CisJY2xrX3B1dChjbGspOworCiAJLyogY2hhbmdlIHBhcmVudCBvZiBGU0kgQSAqLwotCWZzaWFfY2xrID0gY2xrX2dldChOVUxMLCAiZnNpYV9jbGsiKTsKKwljbGsgPSBjbGtfZ2V0KE5VTEwsICJmc2lhX2NsayIpOwogCWNsa19yZWdpc3RlcigmZnNpbWNrYV9jbGspOwotCWNsa19zZXRfcGFyZW50KGZzaWFfY2xrLCAmZnNpbWNrYV9jbGspOwotCWNsa19zZXRfcmF0ZShmc2lhX2NsaywgMTEwMDApOworCWNsa19zZXRfcGFyZW50KGNsaywgJmZzaW1ja2FfY2xrKTsKKwljbGtfc2V0X3JhdGUoY2xrLCAxMTAwMCk7CiAJY2xrX3NldF9yYXRlKCZmc2ltY2thX2NsaywgMTEwMDApOwotCWNsa19wdXQoZnNpYV9jbGspOworCWNsa19wdXQoY2xrKTsKIAogCS8qIFNESEkwIGNvbm5lY3RlZCB0byBjbjcgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJMENELCBOVUxMKTsKQEAgLTc5Miw2ICs3OTQsMTAgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJMUNNRCwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISTFDTEssIE5VTEwpOwogCisJLyogZW5hYmxlIElyREEgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX09VVCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJEQV9JTiwgIE5VTEwpOworCiAJLyoKIAkgKiBlbmFibGUgU0gtRXRoCiAJICoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzc4MC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzc4MC9pcnEuYwppbmRleCAxMjE3NDRjLi5kNWM5ZWRjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzgwL2lycS5jCkBAIC0yNCwzMCArMjQsMzAgQEAKIHZvaWQgX19pbml0IGluaXRfc2U3NzgwX0lSUSh2b2lkKQogewogCS8qIGVuYWJsZSBhbGwgaW50ZXJydXB0IGF0IEZQR0EgKi8KLQljdHJsX291dHcoMCwgRlBHQV9JTlRNU0sxKTsKKwlfX3Jhd193cml0ZXcoMCwgRlBHQV9JTlRNU0sxKTsKIAkvKiBtYXNrIFNNNTAxIGludGVycnVwdCAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoRlBHQV9JTlRNU0sxKSB8IDB4MDAwMiksIEZQR0FfSU5UTVNLMSk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhGUEdBX0lOVE1TSzEpIHwgMHgwMDAyKSwgRlBHQV9JTlRNU0sxKTsKIAkvKiBlbmFibGUgYWxsIGludGVycnVwdCBhdCBGUEdBICovCi0JY3RybF9vdXR3KDAsIEZQR0FfSU5UTVNLMik7CisJX19yYXdfd3JpdGV3KDAsIEZQR0FfSU5UTVNLMik7CiAKIAkvKiBzZXQgRlBHQSBJTlRTRUwgcmVnaXN0ZXIgKi8KIAkvKiBGUEdBICsgMHgwNiAqLwotCWN0cmxfb3V0dyggKChJUlFQSU5fU001MDEgPDwgSVJRUE9TX1NNNTAxKSB8CisJX19yYXdfd3JpdGV3KCAoKElSUVBJTl9TTTUwMSA8PCBJUlFQT1NfU001MDEpIHwKIAkJKElSUVBJTl9TTUM5MUNYIDw8IElSUVBPU19TTUM5MUNYKSksIEZQR0FfSU5UU0VMMSk7CiAKIAkvKiBGUEdBICsgMHgwOCAqLwotCWN0cmxfb3V0dygoKElSUVBJTl9FWFRJTlQ0IDw8IElSUVBPU19FWFRJTlQ0KSB8CisJX19yYXdfd3JpdGV3KCgoSVJRUElOX0VYVElOVDQgPDwgSVJRUE9TX0VYVElOVDQpIHwKIAkJKElSUVBJTl9FWFRJTlQzIDw8IElSUVBPU19FWFRJTlQzKSB8CiAJCShJUlFQSU5fRVhUSU5UMiA8PCBJUlFQT1NfRVhUSU5UMikgfAogCQkoSVJRUElOX0VYVElOVDEgPDwgSVJRUE9TX0VYVElOVDEpKSwgRlBHQV9JTlRTRUwyKTsKIAogCS8qIEZQR0EgKyAweDBBICovCi0JY3RybF9vdXR3KChJUlFQSU5fUENDUFcgPDwgSVJRUE9TX1BDQ1BXKSwgRlBHQV9JTlRTRUwzKTsKKwlfX3Jhd193cml0ZXcoKElSUVBJTl9QQ0NQVyA8PCBJUlFQT1NfUENDUFcpLCBGUEdBX0lOVFNFTDMpOwogCiAJcGxhdF9pcnFfc2V0dXBfcGlucyhJUlFfTU9ERV9JUlEpOyAvKiBpbnN0YWxsIGhhbmRsZXJzIGZvciBJUlEwLTcgKi8KIAogCS8qIElDUjE6IGRldGVjdCBsb3cgbGV2ZWwoZm9yIDJuZGN1dCkgKi8KLQljdHJsX291dGwoMHhBQUFBMDAwMCwgSU5UQ19JQ1IxKTsKKwlfX3Jhd193cml0ZWwoMHhBQUFBMDAwMCwgSU5UQ19JQ1IxKTsKIAogCS8qCiAJICogRlBHQSBQQ0lTRUwgcmVnaXN0ZXIgaW5pdGlhbGl6ZQpAQCAtNjMsNiArNjMsNiBAQAogCSAqICBJTlREIHx8IElOVEQgIHwgSU5UQyAgfCAgLS0gICB8IElOVEEKIAkgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCSAqLwotCWN0cmxfb3V0dygweDAwMTMsIEZQR0FfUENJX0lOVFNFTDEpOwotCWN0cmxfb3V0dygweEU0MDIsIEZQR0FfUENJX0lOVFNFTDIpOworCV9fcmF3X3dyaXRldygweDAwMTMsIEZQR0FfUENJX0lOVFNFTDEpOworCV9fcmF3X3dyaXRldygweEU0MDIsIEZQR0FfUENJX0lOVFNFTDIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzgwL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvc2V0dXAuYwppbmRleCAxZDNhODY3Li42ZjdjMjA3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvc2V0dXAuYwpAQCAtMTcsMjYgKzE3LDE3IEBACiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgogCiAvKiBIZWFydGJlYXQgKi8KLXN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7Ci0JLnJlZ3NpemUgPSAxNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IFBBX0xFRCwKLQkJLmVuZCAgICA9IFBBX0xFRCwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgID0gUEFfTEVELAorCS5lbmQgICAgPSBQQV9MRUQsCisJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewogCS5uYW1lICAgICAgICAgICA9ICJoZWFydGJlYXQiLAogCS5pZCAgICAgICAgICAgICA9IC0xLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmhlYXJ0YmVhdF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IDEsCisJLnJlc291cmNlICAgICAgID0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIC8qIFNNQzkxeCAqLwpAQCAtODQsMTQgKzc1LDE0IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc2U3NzgwX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJLyogIlNILUxpbnV4IiBvbiBMRUQgRGlzcGxheSAqLwotCWN0cmxfb3V0dyggJ1MnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUwwX0FERFIgPDwgMSkgKTsKLQljdHJsX291dHcoICdIJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMMV9BRERSIDw8IDEpICk7Ci0JY3RybF9vdXR3KCAnLScgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDJfQUREUiA8PCAxKSApOwotCWN0cmxfb3V0dyggJ0wnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUwzX0FERFIgPDwgMSkgKTsKLQljdHJsX291dHcoICdpJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMNF9BRERSIDw8IDEpICk7Ci0JY3RybF9vdXR3KCAnbicgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDVfQUREUiA8PCAxKSApOwotCWN0cmxfb3V0dyggJ3UnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUw2X0FERFIgPDwgMSkgKTsKLQljdHJsX291dHcoICd4JyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMN19BRERSIDw8IDEpICk7CisJX19yYXdfd3JpdGV3KCAnUycgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDBfQUREUiA8PCAxKSApOworCV9fcmF3X3dyaXRldyggJ0gnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUwxX0FERFIgPDwgMSkgKTsKKwlfX3Jhd193cml0ZXcoICctJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMMl9BRERSIDw8IDEpICk7CisJX19yYXdfd3JpdGV3KCAnTCcgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDNfQUREUiA8PCAxKSApOworCV9fcmF3X3dyaXRldyggJ2knICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUw0X0FERFIgPDwgMSkgKTsKKwlfX3Jhd193cml0ZXcoICduJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMNV9BRERSIDw8IDEpICk7CisJX19yYXdfd3JpdGV3KCAndScgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDZfQUREUiA8PCAxKSApOworCV9fcmF3X3dyaXRldyggJ3gnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUw3X0FERFIgPDwgMSkgKTsKIAogCXByaW50ayhLRVJOX0lORk8gIkhpdGFjaGkgVUwgU29sdXRpb25zIEVuZ2luZSA3NzgwU0UwMyBzdXBwb3J0LlxuIik7CiAKQEAgLTEwMiwxNSArOTMsMTUgQEAKIAkgKiAgIFJFUTIvR05UMiAtPiBTZXJpYWwgQVRBCiAJICogICBSRVEzL0dOVDMgLT4gUENJIHNsb3QKIAkgKi8KLQljdHJsX291dHcoMHgwMjEzLCBGUEdBX1JFUVNFTCk7CisJX19yYXdfd3JpdGV3KDB4MDIxMywgRlBHQV9SRVFTRUwpOwogCiAJLyogR1BJTyBzZXR0aW5nICovCi0JY3RybF9vdXR3KDB4MDAwMCwgR1BJT19QRUNSKTsKLQljdHJsX291dHcoY3RybF9pbncoR1BJT19QSENSKSYweGZmZjMsIEdQSU9fUEhDUik7Ci0JY3RybF9vdXR3KDB4MGMwMCwgR1BJT19QTVNFTFIpOworCV9fcmF3X3dyaXRldygweDAwMDAsIEdQSU9fUEVDUik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KEdQSU9fUEhDUikmMHhmZmYzLCBHUElPX1BIQ1IpOworCV9fcmF3X3dyaXRldygweDBjMDAsIEdQSU9fUE1TRUxSKTsKIAogCS8qIGlWRFIgUG93ZXIgT04gKi8KLQljdHJsX291dHcoMHgwMDAxLCBGUEdBX0lWRFJQVyk7CisJX19yYXdfd3JpdGV3KDB4MDAwMSwgRlBHQV9JVkRSUFcpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDAzL3J0Yy5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDAzL3J0Yy5jCmluZGV4IGE4YjlmODQuLjFiMjAwOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9ydGMuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoMDMvcnRjLmMKQEAgLTQ0LDE1ICs0NCwxNSBAQAogCXNwaW5fbG9jaygmc2gwM19ydGNfbG9jayk7CiAgYWdhaW46CiAJZG8gewotCQlzZWMgID0gKGN0cmxfaW5iKFJUQ19TRUMxKSAmIDB4ZikgKyAoY3RybF9pbmIoUlRDX1NFQzEwKSAmIDB4NykgKiAxMDsKLQkJbWluICA9IChjdHJsX2luYihSVENfTUlOMSkgJiAweGYpICsgKGN0cmxfaW5iKFJUQ19NSU4xMCkgJiAweGYpICogMTA7Ci0JCWhvdXIgPSAoY3RybF9pbmIoUlRDX0hPVTEpICYgMHhmKSArIChjdHJsX2luYihSVENfSE9VMTApICYgMHhmKSAqIDEwOwotCQlkYXkgID0gKGN0cmxfaW5iKFJUQ19EQVkxKSAmIDB4ZikgKyAoY3RybF9pbmIoUlRDX0RBWTEwKSAmIDB4ZikgKiAxMDsKLQkJbW9uICA9IChjdHJsX2luYihSVENfTU9OMSkgJiAweGYpICsgKGN0cmxfaW5iKFJUQ19NT04xMCkgJiAweGYpICogMTA7Ci0JCXllYXIgPSAoY3RybF9pbmIoUlRDX1lFQTEpICYgMHhmKSArIChjdHJsX2luYihSVENfWUVBMTApICYgMHhmKSAqIDEwCi0JCSAgICAgKyAoY3RybF9pbmIoUlRDX1lFQTEwMCApICYgMHhmKSAqIDEwMAotCQkgICAgICsgKGN0cmxfaW5iKFJUQ19ZRUExMDAwKSAmIDB4ZikgKiAxMDAwOwotCX0gd2hpbGUgKHNlYyAhPSAoY3RybF9pbmIoUlRDX1NFQzEpICYgMHhmKSArIChjdHJsX2luYihSVENfU0VDMTApICYgMHg3KSAqIDEwKTsKKwkJc2VjICA9IChfX3Jhd19yZWFkYihSVENfU0VDMSkgJiAweGYpICsgKF9fcmF3X3JlYWRiKFJUQ19TRUMxMCkgJiAweDcpICogMTA7CisJCW1pbiAgPSAoX19yYXdfcmVhZGIoUlRDX01JTjEpICYgMHhmKSArIChfX3Jhd19yZWFkYihSVENfTUlOMTApICYgMHhmKSAqIDEwOworCQlob3VyID0gKF9fcmF3X3JlYWRiKFJUQ19IT1UxKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX0hPVTEwKSAmIDB4ZikgKiAxMDsKKwkJZGF5ICA9IChfX3Jhd19yZWFkYihSVENfREFZMSkgJiAweGYpICsgKF9fcmF3X3JlYWRiKFJUQ19EQVkxMCkgJiAweGYpICogMTA7CisJCW1vbiAgPSAoX19yYXdfcmVhZGIoUlRDX01PTjEpICYgMHhmKSArIChfX3Jhd19yZWFkYihSVENfTU9OMTApICYgMHhmKSAqIDEwOworCQl5ZWFyID0gKF9fcmF3X3JlYWRiKFJUQ19ZRUExKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX1lFQTEwKSAmIDB4ZikgKiAxMAorCQkgICAgICsgKF9fcmF3X3JlYWRiKFJUQ19ZRUExMDAgKSAmIDB4ZikgKiAxMDAKKwkJICAgICArIChfX3Jhd19yZWFkYihSVENfWUVBMTAwMCkgJiAweGYpICogMTAwMDsKKwl9IHdoaWxlIChzZWMgIT0gKF9fcmF3X3JlYWRiKFJUQ19TRUMxKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX1NFQzEwKSAmIDB4NykgKiAxMCk7CiAJaWYgKHllYXIgPT0gMCB8fCBtb24gPCAxIHx8IG1vbiA+IDEyIHx8IGRheSA+IDMxIHx8IGRheSA8IDEgfHwKIAkgICAgaG91ciA+IDIzIHx8IG1pbiA+IDU5IHx8IHNlYyA+IDU5KSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtNjAsMTYgKzYwLDE2IEBACiAJCXByaW50aygieWVhcj0lZCwgbW9uPSVkLCBkYXk9JWQsIGhvdXI9JWQsIG1pbj0lZCwgc2VjPSVkXG4iLAogCQkgICAgICAgeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKIAotCQljdHJsX291dGIoMCwgUlRDX1NFQzEpOyBjdHJsX291dGIoMCwgUlRDX1NFQzEwKTsKLQkJY3RybF9vdXRiKDAsIFJUQ19NSU4xKTsgY3RybF9vdXRiKDAsIFJUQ19NSU4xMCk7Ci0JCWN0cmxfb3V0YigwLCBSVENfSE9VMSk7IGN0cmxfb3V0YigwLCBSVENfSE9VMTApOwotCQljdHJsX291dGIoNiwgUlRDX1dFRTEpOwotCQljdHJsX291dGIoMSwgUlRDX0RBWTEpOyBjdHJsX291dGIoMCwgUlRDX0RBWTEwKTsKLQkJY3RybF9vdXRiKDEsIFJUQ19NT04xKTsgY3RybF9vdXRiKDAsIFJUQ19NT04xMCk7Ci0JCWN0cmxfb3V0YigwLCBSVENfWUVBMSk7IGN0cmxfb3V0YigwLCBSVENfWUVBMTApOwotCQljdHJsX291dGIoMCwgUlRDX1lFQTEwMCk7Ci0JCWN0cmxfb3V0YigyLCBSVENfWUVBMTAwMCk7Ci0JCWN0cmxfb3V0YigwLCBSVENfQ1RMKTsKKwkJX19yYXdfd3JpdGViKDAsIFJUQ19TRUMxKTsgX19yYXdfd3JpdGViKDAsIFJUQ19TRUMxMCk7CisJCV9fcmF3X3dyaXRlYigwLCBSVENfTUlOMSk7IF9fcmF3X3dyaXRlYigwLCBSVENfTUlOMTApOworCQlfX3Jhd193cml0ZWIoMCwgUlRDX0hPVTEpOyBfX3Jhd193cml0ZWIoMCwgUlRDX0hPVTEwKTsKKwkJX19yYXdfd3JpdGViKDYsIFJUQ19XRUUxKTsKKwkJX19yYXdfd3JpdGViKDEsIFJUQ19EQVkxKTsgX19yYXdfd3JpdGViKDAsIFJUQ19EQVkxMCk7CisJCV9fcmF3X3dyaXRlYigxLCBSVENfTU9OMSk7IF9fcmF3X3dyaXRlYigwLCBSVENfTU9OMTApOworCQlfX3Jhd193cml0ZWIoMCwgUlRDX1lFQTEpOyBfX3Jhd193cml0ZWIoMCwgUlRDX1lFQTEwKTsKKwkJX19yYXdfd3JpdGViKDAsIFJUQ19ZRUExMDApOworCQlfX3Jhd193cml0ZWIoMiwgUlRDX1lFQTEwMDApOworCQlfX3Jhd193cml0ZWIoMCwgUlRDX0NUTCk7CiAJCWdvdG8gYWdhaW47CiAJfQogCkBAIC05Myw5ICs5Myw5IEBACiAJLyogZ2V0cyByZWNhbGxlZCB3aXRoIGlycSBsb2NhbGx5IGRpc2FibGVkICovCiAJc3Bpbl9sb2NrKCZzaDAzX3J0Y19sb2NrKTsKIAlmb3IgKGkgPSAwIDsgaSA8IDEwMDAwMDAgOyBpKyspCS8qIG1heSB0YWtlIHVwIHRvIDEgc2Vjb25kLi4uICovCi0JCWlmICghKGN0cmxfaW5iKFJUQ19DVEwpICYgUlRDX0JVU1kpKQorCQlpZiAoIShfX3Jhd19yZWFkYihSVENfQ1RMKSAmIFJUQ19CVVNZKSkKIAkJCWJyZWFrOwotCWNtb3NfbWludXRlcyA9IChjdHJsX2luYihSVENfTUlOMSkgJiAweGYpICsgKGN0cmxfaW5iKFJUQ19NSU4xMCkgJiAweGYpICogMTA7CisJY21vc19taW51dGVzID0gKF9fcmF3X3JlYWRiKFJUQ19NSU4xKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX01JTjEwKSAmIDB4ZikgKiAxMDsKIAlyZWFsX3NlY29uZHMgPSBub3d0aW1lICUgNjA7CiAJcmVhbF9taW51dGVzID0gbm93dGltZSAvIDYwOwogCWlmICgoKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpICsgMTUpLzMwKSAmIDEpCkBAIC0xMDMsMTAgKzEwMywxMCBAQAogCXJlYWxfbWludXRlcyAlPSA2MDsKIAogCWlmIChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSA8IDMwKSB7Ci0JCWN0cmxfb3V0YihyZWFsX3NlY29uZHMgJSAxMCwgUlRDX1NFQzEpOwotCQljdHJsX291dGIocmVhbF9zZWNvbmRzIC8gMTAsIFJUQ19TRUMxMCk7Ci0JCWN0cmxfb3V0YihyZWFsX21pbnV0ZXMgJSAxMCwgUlRDX01JTjEpOwotCQljdHJsX291dGIocmVhbF9taW51dGVzIC8gMTAsIFJUQ19NSU4xMCk7CisJCV9fcmF3X3dyaXRlYihyZWFsX3NlY29uZHMgJSAxMCwgUlRDX1NFQzEpOworCQlfX3Jhd193cml0ZWIocmVhbF9zZWNvbmRzIC8gMTAsIFJUQ19TRUMxMCk7CisJCV9fcmF3X3dyaXRlYihyZWFsX21pbnV0ZXMgJSAxMCwgUlRDX01JTjEpOworCQlfX3Jhd193cml0ZWIocmVhbF9taW51dGVzIC8gMTAsIFJUQ19NSU4xMCk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgInNldF9ydGNfbW1zczogY2FuJ3QgdXBkYXRlIGZyb20gJWQgdG8gJWRcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoMDMvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9zZXR1cC5jCmluZGV4IDc0Y2ZiNGIuLmFmNGEwYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9zZXR1cC5jCkBAIC04Miw3ICs4Miw3IEBACiAJLyogb3BlbiBJL08gYXJlYSB3aW5kb3cgKi8KIAlwYWRkcmJhc2UgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKilQQV9BUkVBNV9JTyk7CiAJcHJvdCA9IFBBR0VfS0VSTkVMX1BDQygxLCBfUEFHRV9QQ0NfSU8xNik7Ci0JY2ZfaWRlX2Jhc2UgPSBwM19pb3JlbWFwKHBhZGRyYmFzZSwgUEFHRV9TSVpFLCBwcm90LnBncHJvdCk7CisJY2ZfaWRlX2Jhc2UgPSBpb3JlbWFwX3Byb3QocGFkZHJiYXNlLCBQQUdFX1NJWkUsIHBncHJvdF92YWwocHJvdCkpOwogCWlmICghY2ZfaWRlX2Jhc2UpIHsKIAkJcHJpbnRrKCJhbGxvY2F0ZV9jZl9hcmVhIDogY2FuJ3Qgb3BlbiBDRiBJL08gd2luZG93IVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9pcnEuYwppbmRleCBkOGViZmE3Li5hZGQ2OThjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9pcnEuYwpAQCAtMjgsMTggKzI4LDE4IEBACiB2b2lkIF9faW5pdCBpbml0X3NoNzc2M3JkcF9JUlEodm9pZCkKIHsKIAkvKiBHUElPIGVuYWJsZWQgKi8KLQljdHJsX291dGwoMSA8PCAyNSwgSU5UQ19JTlQyTVNLQ1IpOworCV9fcmF3X3dyaXRlbCgxIDw8IDI1LCBJTlRDX0lOVDJNU0tDUik7CiAKIAkvKiBlbmFibGUgR1BJTyBpbnRlcnJ1cHRzICovCi0JY3RybF9vdXRsKChjdHJsX2lubChJTlRDX0lOVDJQUkk3KSAmIDB4RkYwMEZGRkYpIHwgMHgwMDBGMDAwMCwKKwlfX3Jhd193cml0ZWwoKF9fcmF3X3JlYWRsKElOVENfSU5UMlBSSTcpICYgMHhGRjAwRkZGRikgfCAweDAwMEYwMDAwLAogCQkgIElOVENfSU5UMlBSSTcpOwogCiAJLyogVVNCSCBlbmFibGVkICovCi0JY3RybF9vdXRsKDEgPDwgMTcsIElOVENfSU5UMk1TS0NSMSk7CisJX19yYXdfd3JpdGVsKDEgPDwgMTcsIElOVENfSU5UMk1TS0NSMSk7CiAKIAkvKiBHRVRIRVIgZW5hYmxlZCAqLwotCWN0cmxfb3V0bCgxIDw8IDE2LCBJTlRDX0lOVDJNU0tDUjEpOworCV9fcmF3X3dyaXRlbCgxIDw8IDE2LCBJTlRDX0lOVDJNU0tDUjEpOwogCiAJLyogRE1BQyBlbmFibGVkICovCi0JY3RybF9vdXRsKDEgPDwgOCwgSU5UQ19JTlQyTVNLQ1IpOworCV9fcmF3X3dyaXRlbCgxIDw8IDgsIElOVENfSU5UMk1TS0NSKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jCmluZGV4IDM5MDUzNGEuLmY2NGE2OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYwpAQCAtMTU4LDUwICsxNTgsNTAgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzaDc3NjNyZHBfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKIAkvKiBCb2FyZCB2ZXJzaW9uIGNoZWNrICovCi0JaWYgKGN0cmxfaW53KENQTERfQk9BUkRfSURfRVJWX1JFRykgPT0gMHhFQ0IxKQorCWlmIChfX3Jhd19yZWFkdyhDUExEX0JPQVJEX0lEX0VSVl9SRUcpID09IDB4RUNCMSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUlRFIFN0YW5kYXJkIENvbmZpZ3VyYXRpb25cbiIpOwogCWVsc2UKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUlRBIFN0YW5kYXJkIENvbmZpZ3VyYXRpb25cbiIpOwogCiAJLyogVVNCIHBpbiBzZWxlY3QgYml0cyAoY2xlYXIgYml0IDUtMiB0byAwKSAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMMikgJiAweEZGQzMpLCBQT1JUX1BTRUwyKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDIpICYgMHhGRkMzKSwgUE9SVF9QU0VMMik7CiAJLyogVVNCSCBzZXR1cCBwb3J0IEkgY29udHJvbHMgdG8gb3RoZXIgKGNsZWFyIGJpdHMgNC05IHRvIDApICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUElDUikgJiAweEZDMEYsIFBPUlRfUElDUik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfUElDUikgJiAweEZDMEYsIFBPUlRfUElDUik7CiAKIAkvKiBTZWxlY3QgVVNCIEhvc3QgY29udHJvbGxlciAqLwotCWN0cmxfb3V0dygweDAwLCBVU0JfVVNCSFNDKTsKKwlfX3Jhd193cml0ZXcoMHgwMCwgVVNCX1VTQkhTQyk7CiAKIAkvKiBGb3IgTENEICovCiAJLyogc2V0IFBUSjctMSwgYml0cyAxNS0yIG9mIFBKQ1IgdG8gMCAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BKQ1IpICYgMHgwMDAzLCBQT1JUX1BKQ1IpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX1BKQ1IpICYgMHgwMDAzLCBQT1JUX1BKQ1IpOwogCS8qIHNldCBQVEk1LCBiaXRzIDExLTEwIG9mIFBJQ1IgdG8gMCAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BJQ1IpICYgMHhGM0ZGLCBQT1JUX1BJQ1IpOwotCWN0cmxfb3V0dygwLCBQT1JUX1BLQ1IpOwotCWN0cmxfb3V0dygwLCBQT1JUX1BMQ1IpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX1BJQ1IpICYgMHhGM0ZGLCBQT1JUX1BJQ1IpOworCV9fcmF3X3dyaXRldygwLCBQT1JUX1BLQ1IpOworCV9fcmF3X3dyaXRldygwLCBQT1JUX1BMQ1IpOwogCS8qIHNldCBQU0VMMiBiaXRzIDE0LTgsIDUtNCwgb2YgUFNFTDIgdG8gMCAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMMikgJiAweDAwQzApLCBQT1JUX1BTRUwyKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDIpICYgMHgwMEMwKSwgUE9SVF9QU0VMMik7CiAJLyogc2V0IFBTRUwzIGJpdHMgMTQtMTIsIDYtNCwgMi0wIG9mIFBTRUwzIHRvIDAgKi8KLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTDMpICYgMHgwNzAwKSwgUE9SVF9QU0VMMyk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX1BTRUwzKSAmIDB4MDcwMCksIFBPUlRfUFNFTDMpOwogCiAJLyogRm9yIEhBQyAqLwogCS8qIGJpdDMtMCAgMDEwMDpIQUMgJiBTU0kxIGVuYWJsZSAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMMSkgJiAweEZGRjApIHwgMHgwMDA0LCBQT1JUX1BTRUwxKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDEpICYgMHhGRkYwKSB8IDB4MDAwNCwgUE9SVF9QU0VMMSk7CiAJLyogYml0MTQgICAgICAxOlNTSV9IQUNfQ0xLIGVuYWJsZSAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BTRUw0KSB8IDB4NDAwMCwgUE9SVF9QU0VMNCk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfUFNFTDQpIHwgMHg0MDAwLCBQT1JUX1BTRUw0KTsKIAogCS8qIFNILUV0aGVyICovCi0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BTRUwxKSAmIH4weGZmMDApIHwgMHgyNDAwLCBQT1JUX1BTRUwxKTsKLQljdHJsX291dHcoMHgwLCBQT1JUX1BGQ1IpOwotCWN0cmxfb3V0dygweDAsIFBPUlRfUEZDUik7Ci0JY3RybF9vdXR3KDB4MCwgUE9SVF9QRkNSKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDEpICYgfjB4ZmYwMCkgfCAweDI0MDAsIFBPUlRfUFNFTDEpOworCV9fcmF3X3dyaXRldygweDAsIFBPUlRfUEZDUik7CisJX19yYXdfd3JpdGV3KDB4MCwgUE9SVF9QRkNSKTsKKwlfX3Jhd193cml0ZXcoMHgwLCBQT1JUX1BGQ1IpOwogCiAJLyogTU1DICovCiAJLypzZWxlY3RzIFNDSUYgYW5kIE1NQyBvdGhlciBmdW5jdGlvbnMgKi8KLQljdHJsX291dHcoMHgwMDAxLCBQT1JUX1BTRUwwKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAxLCBQT1JUX1BTRUwwKTsKIAkvKiBNTUMgY2xvY2sgb3BlcmF0ZXMgKi8KLQljdHJsX291dGwoY3RybF9pbmwoTVNUUENSMSkgJiB+MHg4LCBNU1RQQ1IxKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QQUNSKSAmIH4weDMwMDAsIFBPUlRfUEFDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUENDUikgJiB+MHhDRkMzLCBQT1JUX1BDQ1IpOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChNU1RQQ1IxKSAmIH4weDgsIE1TVFBDUjEpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX1BBQ1IpICYgfjB4MzAwMCwgUE9SVF9QQUNSKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUE9SVF9QQ0NSKSAmIH4weENGQzMsIFBPUlRfUENDUik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfc2g3NzYzcmRwIF9faW5pdG12ID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zbmFwZ2Vhci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zbmFwZ2Vhci9zZXR1cC5jCmluZGV4IGEzMjc3YTIuLjMzMTc0NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc25hcGdlYXIvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNuYXBnZWFyL3NldHVwLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogc3RhdGljIGlycXJldHVybl90IGVyYXNlY29uZmlnX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0JKHZvaWQpY3RybF9pbmIoMHhiODAwMDAwMCk7CS8qIGR1bW15IHJlYWQgKi8KKwkodm9pZClfX3Jhd19yZWFkYigweGI4MDAwMDAwKTsJLyogZHVtbXkgcmVhZCAqLwogCiAJcHJpbnRrKCJTbmFwR2VhcjogZXJhc2Ugc3dpdGNoIGludGVycnVwdCFcbiIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMKaW5kZXggOTg2YTBlNy4uNTIzYWVhNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pcnEuYwpAQCAtNDEsMTMgKzQxLDEzIEBACiAJCXVuc2lnbmVkIGxvbmcgdmFsLCBtYXNrID0gMHgwMSA8PCAxOwogCiAJCS8qIENsZWFyIHRoZSAiaXJxInRoIGJpdCBpbiB0aGUgbWFzayBhbmQgc2V0IGl0IGluIHRoZSByZXF1ZXN0ICovCi0JCXZhbCA9IGN0cmxfaW5sKCh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOworCQl2YWwgPSBfX3Jhd19yZWFkbCgodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9tYXNrX3JlZ2lzdGVyKTsKIAkJdmFsICY9IH5tYXNrOwotCQljdHJsX291dGwodmFsLCAodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9tYXNrX3JlZ2lzdGVyKTsKKwkJX19yYXdfd3JpdGVsKHZhbCwgKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfbWFza19yZWdpc3Rlcik7CiAKLQkJdmFsID0gY3RybF9pbmwoKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfcmVxdWVzdF9yZWdpc3Rlcik7CisJCXZhbCA9IF9fcmF3X3JlYWRsKCh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX3JlcXVlc3RfcmVnaXN0ZXIpOwogCQl2YWwgfD0gbWFzazsKLQkJY3RybF9vdXRsKHZhbCwgKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfcmVxdWVzdF9yZWdpc3Rlcik7CisJCV9fcmF3X3dyaXRlbCh2YWwsICh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX3JlcXVlc3RfcmVnaXN0ZXIpOwogCX0KIH0KIApAQCAtNTcsOSArNTcsOSBAQAogCQl1bnNpZ25lZCBsb25nIHZhbCwgbWFzayA9IDB4MDEgPDwgMTsKIAogCQkvKiBTZXQgImlycSJ0aCBiaXQgaW4gdGhlIG1hc2sgcmVnaXN0ZXIgKi8KLQkJdmFsID0gY3RybF9pbmwoKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfbWFza19yZWdpc3Rlcik7CisJCXZhbCA9IF9fcmF3X3JlYWRsKCh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOwogCQl2YWwgfD0gbWFzazsKLQkJY3RybF9vdXRsKHZhbCwgKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfbWFza19yZWdpc3Rlcik7CisJCV9fcmF3X3dyaXRlbCh2YWwsICh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZDc1MzcuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIE5pbWJsZSBNaWNyb3N5c3RlbXMgVElUQU4gc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAotIwotCi1vYmoteQkgOj0gc2V0dXAubyBpby5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL2lvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMzBlOTguLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9pby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKglJL08gcm91dGluZXMgZm9yIFRpdGFuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxtYWNoL3RpdGFuLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBvcnQyYWRyKHVuc2lnbmVkIGludCBwb3J0KQotewotICAgICAgICBtYXliZWJhZGlvKCh1bnNpZ25lZCBsb25nKXBvcnQpOwotICAgICAgICByZXR1cm4gcG9ydDsKLX0KLQotdTggdGl0YW5faW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2luYihwb3J0KTsKLSAgICAgICAgcmV0dXJuIGN0cmxfaW53KHBvcnQyYWRyKHBvcnQpKSAmIDB4ZmY7Ci19Ci0KLXU4IHRpdGFuX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgdTggdjsKLQotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgdiA9IGN0cmxfaW5iKHBvcnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdiA9IGN0cmxfaW53KHBvcnQyYWRyKHBvcnQpKSAmIDB4ZmY7Ci0gICAgICAgIGN0cmxfZGVsYXkoKTsKLSAgICAgICAgcmV0dXJuIHY7Ci19Ci0KLXUxNiB0aXRhbl9pbncodW5zaWduZWQgbG9uZyBwb3J0KQotewotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW53KHBvcnQpOwotICAgICAgICBlbHNlIGlmIChwb3J0ID49IDB4MjAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbncocG9ydDJhZHIocG9ydCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWF5YmViYWRpbyhwb3J0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLXUzMiB0aXRhbl9pbmwodW5zaWduZWQgbG9uZyBwb3J0KQotewotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5sKHBvcnQpOwotICAgICAgICBlbHNlIGlmIChwb3J0ID49IDB4MjAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbncocG9ydDJhZHIocG9ydCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWF5YmViYWRpbyhwb3J0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgdGl0YW5fb3V0Yih1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgY3RybF9vdXRiKHZhbHVlLCBwb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGN0cmxfb3V0dyh2YWx1ZSwgcG9ydDJhZHIocG9ydCkpOwotfQotCi12b2lkIHRpdGFuX291dGJfcCh1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgY3RybF9vdXRiKHZhbHVlLCBwb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGN0cmxfb3V0dyh2YWx1ZSwgcG9ydDJhZHIocG9ydCkpOwotICAgICAgICBjdHJsX2RlbGF5KCk7Ci19Ci0KLXZvaWQgdGl0YW5fb3V0dyh1MTYgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIGN0cmxfb3V0dyh2YWx1ZSwgcG9ydCk7Ci0gICAgICAgIGVsc2UgaWYgKHBvcnQgPj0gMHgyMDAwKQotICAgICAgICAgICAgICAgIGN0cmxfb3V0dyh2YWx1ZSwgcG9ydDJhZHIocG9ydCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWF5YmViYWRpbyhwb3J0KTsKLX0KLQotdm9pZCB0aXRhbl9vdXRsKHUzMiB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgY3RybF9vdXRsKHZhbHVlLCBwb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1heWJlYmFkaW8ocG9ydCk7Ci19Ci0KLXZvaWQgdGl0YW5faW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLSAgICAgICAgbWF5YmViYWRpbyhwb3J0KTsKLX0KLQotdm9pZCB0aXRhbl9vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLSAgICAgICAgbWF5YmViYWRpbyhwb3J0KTsKLX0KLQotdm9pZCBfX2lvbWVtICp0aXRhbl9pb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JaWYgKFBYU0VHKHBvcnQpKQotCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBvcnQ7Ci0KLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBvcnQyYWRyKHBvcnQpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWU3ZTBmLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBhcmNoL3NoL2JvYXJkcy90aXRhbi9zZXR1cC5jIC0gU2V0dXAgZm9yIFRpdGFuCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNiAgSmFtaWUgTGVuZWhhbgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPG1hY2gvdGl0YW4uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGl0YW5faXJxKHZvaWQpCi17Ci0JLyogZW5hYmxlIGluZGl2aWR1YWwgaW50ZXJydXB0IG1vZGUgZm9yIGV4dGVybmFscyAqLwotCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJRKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl90aXRhbiBfX2luaXRtdiA9IHsKLQkubXZfbmFtZSA9CSJUaXRhbiIsCi0KLQkubXZfaW5iID0JdGl0YW5faW5iLAotCS5tdl9pbncgPQl0aXRhbl9pbncsCi0JLm12X2lubCA9CXRpdGFuX2lubCwKLQkubXZfb3V0YiA9CXRpdGFuX291dGIsCi0JLm12X291dHcgPQl0aXRhbl9vdXR3LAotCS5tdl9vdXRsID0JdGl0YW5fb3V0bCwKLQotCS5tdl9pbmJfcCA9CXRpdGFuX2luYl9wLAotCS5tdl9pbndfcCA9CXRpdGFuX2ludywKLQkubXZfaW5sX3AgPQl0aXRhbl9pbmwsCi0JLm12X291dGJfcCA9CXRpdGFuX291dGJfcCwKLQkubXZfb3V0d19wID0JdGl0YW5fb3V0dywKLQkubXZfb3V0bF9wID0JdGl0YW5fb3V0bCwKLQotCS5tdl9pbnNsID0JdGl0YW5faW5zbCwKLQkubXZfb3V0c2wgPQl0aXRhbl9vdXRzbCwKLQotCS5tdl9pb3BvcnRfbWFwID0gdGl0YW5faW9wb3J0X21hcCwKLQotCS5tdl9pbml0X2lycSA9CWluaXRfdGl0YW5faXJxLAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9pbHNlbC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL2lsc2VsLmMKaW5kZXggYjVjNjczYy4uNWM5ODQyNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL2lsc2VsLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL2lsc2VsLmMKQEAgLTcwLDEwICs3MCwxMCBAQAogCXByX2RlYnVnKCIlczogYml0IyVkOiBhZGRyIC0gMHglMDhseCAoc2hpZnQgJWQsIHNldCAlZClcbiIsCiAJCSBfX2Z1bmNfXywgYml0LCBhZGRyLCBzaGlmdCwgc2V0KTsKIAotCXRtcCA9IGN0cmxfaW53KGFkZHIpOworCXRtcCA9IF9fcmF3X3JlYWR3KGFkZHIpOwogCXRtcCAmPSB+KDB4ZiA8PCBzaGlmdCk7CiAJdG1wIHw9IHNldCA8PCBzaGlmdDsKLQljdHJsX291dHcodG1wLCBhZGRyKTsKKwlfX3Jhd193cml0ZXcodG1wLCBhZGRyKTsKIH0KIAogLyoqCkBAIC0xNDIsOSArMTQyLDkgQEAKIAogCWFkZHIgPSBta19pbHNlbF9hZGRyKGlycSk7CiAKLQl0bXAgPSBjdHJsX2ludyhhZGRyKTsKKwl0bXAgPSBfX3Jhd19yZWFkdyhhZGRyKTsKIAl0bXAgJj0gfigweGYgPDwgbWtfaWxzZWxfc2hpZnQoaXJxKSk7Ci0JY3RybF9vdXR3KHRtcCwgYWRkcik7CisJX19yYXdfd3JpdGV3KHRtcCwgYWRkcik7CiAKIAljbGVhcl9iaXQoaXJxLCAmaWxzZWxfbGV2ZWxfbWFwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL3NldHVwLmMKaW5kZXggZWZlNGNiOS4uZTI4NDU5MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL3NldHVwLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJMMzIxMCk7CiAKIAkvKiBTZXQgSUNSMC5MVkxNT0RFICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKDB4ZmU0MTAwMDApIHwgKDEgPDwgMjEpLCAweGZlNDEwMDAwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoMHhmZTQxMDAwMCkgfCAoMSA8PCAyMSksIDB4ZmU0MTAwMDApOwogfQogCiBzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3gzcHJvdG8gX19pbml0bXYgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKaW5kZXggY2I4Y2Y1NS4uMWNlNjM2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQpAQCAtMjEsMTIgKzIxLDE1IEBACiBDT05GSUdfRU5UUllfT0ZGU0VUCT89IDB4MDAwMDEwMDAKIAogc3VmZml4LXkgOj0gYmluCi1zdWZmaXgtJChDT05GSUdfS0VSTkVMX0daSVApICA6PSBnegotc3VmZml4LSQoQ09ORklHX0tFUk5FTF9CWklQMikgOj0gYnoyCi1zdWZmaXgtJChDT05GSUdfS0VSTkVMX0xaTUEpICA6PSBsem1hCitzdWZmaXgtJChDT05GSUdfS0VSTkVMX0daSVApCTo9IGd6CitzdWZmaXgtJChDT05GSUdfS0VSTkVMX0JaSVAyKQk6PSBiejIKK3N1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpNQSkJOj0gbHptYQorc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWk8pCTo9IGx6bwogCi10YXJnZXRzIDo9IHpJbWFnZSB2bWxpbnV4LnNyZWMgcm9tSW1hZ2UgdUltYWdlIHVJbWFnZS5zcmVjIHVJbWFnZS5neiB1SW1hZ2UuYnoyIHVJbWFnZS5sem1hIHVJbWFnZS5iaW4KLWV4dHJhLXkgKz0gdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIHZtbGludXguYmluLmx6bWEKK3RhcmdldHMgOj0gekltYWdlIHZtbGludXguc3JlYyByb21JbWFnZSB1SW1hZ2UgdUltYWdlLnNyZWMgdUltYWdlLmd6IFwKKwkgICB1SW1hZ2UuYnoyIHVJbWFnZS5sem1hIHVJbWFnZS5sem8gdUltYWdlLmJpbgorZXh0cmEteSArPSB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiB2bWxpbnV4LmJpbi5iejIgdm1saW51eC5iaW4ubHptYSBcCisJICAgdm1saW51eC5iaW4ubHpvCiBzdWJkaXItIDo9IGNvbXByZXNzZWQgcm9taW1hZ2UKIAogJChvYmopL3pJbWFnZTogJChvYmopL2NvbXByZXNzZWQvdm1saW51eCBGT1JDRQpAQCAtNDMsMTUgKzQ2LDggQEAKICQob2JqKS9yb21pbWFnZS92bWxpbnV4OiAkKG9iaikvekltYWdlIEZPUkNFCiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChvYmopL3JvbWltYWdlICRACiAKLUtFUk5FTF9NRU1PUlkgOj0gMHgwMDAwMDAwMAotaWZlcSAoJChDT05GSUdfUE1CX0ZJWEVEKSx5KQotS0VSTkVMX01FTU9SWSA6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKK0tFUk5FTF9NRU1PUlkJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCiAJCSAgICAgJCRbJChDT05GSUdfTUVNT1JZX1NUQVJUKSAmIDB4MWZmZmZmZmZdJykKLWVuZGlmCi1pZmVxICgkKENPTkZJR18yOUJJVCkseSkKLUtFUk5FTF9NRU1PUlkgOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCi0JCSAgICAgJCRbJChDT05GSUdfTUVNT1JZX1NUQVJUKV0nKQotZW5kaWYKIAogS0VSTkVMX0xPQUQJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCiAJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKQEAgLTgwLDYgKzc2LDkgQEAKICQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsem1hKQogCiskKG9iaikvdm1saW51eC5iaW4ubHpvOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxsem8pCisKICQob2JqKS91SW1hZ2UuYnoyOiAkKG9iaikvdm1saW51eC5iaW4uYnoyCiAJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGJ6aXAyKQogCkBAIC04OSw2ICs4OCw5IEBACiAkKG9iaikvdUltYWdlLmx6bWE6ICQob2JqKS92bWxpbnV4LmJpbi5sem1hCiAJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGx6bWEpCiAKKyQob2JqKS91SW1hZ2UubHpvOiAkKG9iaikvdm1saW51eC5iaW4ubHpvCisJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGx6bykKKwogJChvYmopL3VJbWFnZS5iaW46ICQob2JqKS92bWxpbnV4LmJpbgogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxub25lKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDYxODJlY2EuLjVkNjYwYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC02LDE0ICs2LDExIEBACiAKIHRhcmdldHMJCTo9IHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogXAogCQkgICB2bWxpbnV4LmJpbi5iejIgdm1saW51eC5iaW4ubHptYSBcCisJCSAgIHZtbGludXguYmluLmx6byBcCiAJCSAgIGhlYWRfJChCSVRTKS5vIG1pc2MubyBwaWdneS5vCiAKIE9CSkVDVFMgPSAkKG9iaikvaGVhZF8kKEJJVFMpLm8gJChvYmopL21pc2MubyAkKG9iaikvY2FjaGUubwogCi1pZmRlZiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUwotT0JKRUNUUyArPSAkKG9iaikvLi4vLi4va2VybmVsL3NoX2Jpb3MubwotZW5kaWYKLQogIwogIyBJTUFHRV9PRkZTRVQgaXMgdGhlIGxvYWQgb2Zmc2V0IG9mIHRoZSBjb21wcmVzc2lvbiBsb2FkZXIKICMKQEAgLTQ3LDYgKzQ0LDggQEAKIAkkKGNhbGwgaWZfY2hhbmdlZCxiemlwMikKICQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKHZtbGludXguYmluLmFsbC15KSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bWEpCiskKG9iaikvdm1saW51eC5iaW4ubHpvOiAkKHZtbGludXguYmluLmFsbC15KSBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bykKIAogT0JKQ09QWUZMQUdTICs9IC1SIC5lbXB0eV96ZXJvX3BhZ2UKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jCmluZGV4IGI1MWIxZmMuLjI3MTQwYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+CiAKIC8qCiAgKiBnemlwIGRlY2xhcmF0aW9ucwpAQCAtNjIsMjkgKzYxLDE1IEBACiAjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem1hLmMiCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TCi1zaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKnMpCi17Ci0JaW50IGkgPSAwOworI2lmZGVmIENPTkZJR19LRVJORUxfTFpPCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem8uYyIKKyNlbmRpZgogCi0Jd2hpbGUgKCpzKyspCi0JCWkrKzsKLQlyZXR1cm4gaTsKLX0KLQotaW50IHB1dHMoY29uc3QgY2hhciAqcykKLXsKLQlpbnQgbGVuID0gc3RybGVuKHMpOwotCXNoX2Jpb3NfY29uc29sZV93cml0ZShzLCBsZW4pOwotCXJldHVybiBsZW47Ci19Ci0jZWxzZQogaW50IHB1dHMoY29uc3QgY2hhciAqcykKIHsKIAkvKiBUaGlzIHNob3VsZCBiZSB1cGRhdGVkIHRvIHVzZSB0aGUgc2gtc2NpIHJvdXRpbmVzICovCiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKIAogdm9pZCogbWVtc2V0KHZvaWQqIHMsIGludCBjLCBzaXplX3QgbikKIHsKQEAgLTEzMiw3ICsxMTcsNyBAQAogCW91dHB1dF9hZGRyID0gKENPTkZJR19NRU1PUllfU1RBUlQgKyAweDIwMDApOwogI2Vsc2UKIAlvdXRwdXRfYWRkciA9IF9fcGEoKHVuc2lnbmVkIGxvbmcpJl90ZXh0K1BBR0VfU0laRSk7Ci0jaWZkZWYgQ09ORklHXzI5QklUCisjaWYgZGVmaW5lZChDT05GSUdfMjlCSVQpCiAJb3V0cHV0X2FkZHIgfD0gUDJTRUc7CiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMgYi9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEuYwppbmRleCA1MGFhMGMxLi5iY2IzMWFlOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMKKysrIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMKQEAgLTU1LDI1ICs1NSwyMiBAQAogCiBzdGF0aWMgdm9pZCBoZDY0NDYxX2lycV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JdW5zaWduZWQgc2hvcnQgaW50diA9IGN0cmxfaW53KEhENjQ0NjFfTklSUik7Ci0Jc3RydWN0IGlycV9kZXNjICpleHRfZGVzYzsKKwl1bnNpZ25lZCBzaG9ydCBpbnR2ID0gX19yYXdfcmVhZHcoSEQ2NDQ2MV9OSVJSKTsKIAl1bnNpZ25lZCBpbnQgZXh0X2lycSA9IEhENjQ0NjFfSVJRQkFTRTsKIAogCWludHYgJj0gKDEgPDwgSEQ2NDQ2MV9JUlFfTlVNKSAtIDE7CiAKLQl3aGlsZSAoaW50dikgewotCQlpZiAoaW50diAmIDEpIHsKLQkJCWV4dF9kZXNjID0gaXJxX2Rlc2MgKyBleHRfaXJxOwotCQkJaGFuZGxlX2xldmVsX2lycShleHRfaXJxLCBleHRfZGVzYyk7Ci0JCX0KLQkJaW50diA+Pj0gMTsKLQkJZXh0X2lycSsrOworCWZvciAoOyBpbnR2OyBpbnR2ID4+PSAxLCBleHRfaXJxKyspIHsKKwkJaWYgKCEoaW50diAmIDEpKQorCQkJY29udGludWU7CisKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGV4dF9pcnEpOwogCX0KIH0KIAogaW50IF9faW5pdCBzZXR1cF9oZDY0NDYxKHZvaWQpCiB7Ci0JaW50IGk7CisJaW50IGksIG5pZCA9IGNwdV90b19ub2RlKGJvb3RfY3B1X2RhdGEpOwogCiAJaWYgKCFNQUNIX0hENjQ0NjEpCiAJCXJldHVybiAwOwpAQCAtOTAsOSArODcsMjYgQEAKIAlfX3Jhd193cml0ZXcoMHhmZmZmLCBIRDY0NDYxX05JTVIpOwogCiAJLyogIElSUSA4MCAtPiA5NSBiZWxvbmdzIHRvIEhENjQ0NjEgICovCi0JZm9yIChpID0gSEQ2NDQ2MV9JUlFCQVNFOyBpIDwgSEQ2NDQ2MV9JUlFCQVNFICsgMTY7IGkrKykKKwlmb3IgKGkgPSBIRDY0NDYxX0lSUUJBU0U7IGkgPCBIRDY0NDYxX0lSUUJBU0UgKyAxNjsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBpcnE7CisKKwkJaXJxID0gY3JlYXRlX2lycV9ucihpLCBuaWQpOworCQlpZiAodW5saWtlbHkoaXJxID09IDApKSB7CisJCQlwcl9lcnIoIiVzOiBmYWlsZWQgaG9va2luZyBpcnEgJWQgZm9yIEhENjQ0NjFcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGkpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCisJCWlmICh1bmxpa2VseShpcnEgIT0gaSkpIHsKKwkJCXByX2VycigiJXM6IGdvdCBpcnEgJWQgYnV0IHdhbnRlZCAlZCwgYmFpbGluZy5cbiIsCisJCQkgICAgICAgX19mdW5jX18sIGlycSwgaSk7CisJCQlkZXN0cm95X2lycShpcnEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmhkNjQ0NjFfaXJxX2NoaXAsCiAJCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKKwl9CiAKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihDT05GSUdfSEQ2NDQ2MV9JUlEsIGhkNjQ0NjFfaXJxX2RlbXV4KTsKIAlzZXRfaXJxX3R5cGUoQ09ORklHX0hENjQ0NjFfSVJRLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMzMxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4Nl9kZWZjb25maWcKQEAgLTAsMCArMSwxNzU0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmM3CisjIFR1ZSBGZWIgIDkgMTU6Mjc6MDYgMjAxMAorIworQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorIyBDT05GSUdfU1VQRVJINjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TUEFSU0VfSVJRPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CitDT05GSUdfU1lTX1NVUFBPUlRTX1NNUD15CitDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQorQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQorQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9DT0hFUkVOVD15CisjIENPTkZJR19ETUFfTk9OQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfVFJBQ0U9eQorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVX1RSQUNFPXkKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKK0NPTkZJR19SVF9HUk9VUF9TQ0hFRD15CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX0NHUk9VUFM9eQorIyBDT05GSUdfQ0dST1VQX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DR1JPVVBfTlM9eQorQ09ORklHX0NHUk9VUF9GUkVFWkVSPXkKK0NPTkZJR19DR1JPVVBfREVWSUNFPXkKKyMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorQ09ORklHX0NHUk9VUF9DUFVBQ0NUPXkKK0NPTkZJR19SRVNPVVJDRV9DT1VOVEVSUz15CitDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUj15CisjIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSX1NXQVAgaXMgbm90IHNldAorQ09ORklHX01NX09XTkVSPXkKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorQ09ORklHX1VUU19OUz15CitDT05GSUdfSVBDX05TPXkKK0NPTkZJR19VU0VSX05TPXkKK0NPTkZJR19QSURfTlM9eQorQ09ORklHX05FVF9OUz15CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CisjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVD15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0NHUk9VUD15CisjIENPTkZJR19ERUJVR19CTEtfQ0dST1VQIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfQ0ZRX0dST1VQX0lPU0NIRUQ9eQorIyBDT05GSUdfREVCVUdfQ0ZRX0lPU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0g0PXkKK0NPTkZJR19DUFVfU0g0QT15CitDT05GSUdfQ1BVX1NIWDM9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODY9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX01FTU9SWV9TVEFSVD0weDYwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgyMDAwMDAwMAorIyBDT05GSUdfMjlCSVQgaXMgbm90IHNldAorQ09ORklHXzMyQklUPXkKK0NPTkZJR19QTUI9eQorIyBDT05GSUdfUE1CX0xFR0FDWSBpcyBub3Qgc2V0CitDT05GSUdfWDJUTEI9eQorQ09ORklHX1ZTWVNDQUxMPXkKKyMgQ09ORklHX05VTUEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTEKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9NRU1PUllfUFJPQkU9eQorQ09ORklHX0lPUkVNQVBfRklYRUQ9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEsgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMjU2SyBpcyBub3Qgc2V0CitDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzRNQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NE1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzUxMk1CIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQorQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CitDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CitDT05GSUdfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRT15CitDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MQorQ09ORklHX0tTTT15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9GUFU9eQorQ09ORklHX1NIX1NUT1JFX1FVRVVFUz15CitDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQorQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorQ09ORklHX0NQVV9IQVNfUFRFQUVYPXkKK0NPTkZJR19DUFVfSEFTX0ZQVT15CisKKyMKKyMgQm9hcmQgc3VwcG9ydAorIworQ09ORklHX1NIX1NESzc3ODY9eQorIyBDT05GSUdfU0hfVVJRVUVMTCBpcyBub3Qgc2V0CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9USU1FUl9UTVU9eQorQ09ORklHX1NIX0NMS19DUEc9eQorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKKyMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT1tCitDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT1tCitDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPW0KK0NPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFPW0KK0NPTkZJR19TSF9DUFVfRlJFUT15CisKKyMKKyMgRE1BIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX0RNQSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIENoaXBzCisjCisKKyMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19IRUFSVEJFQVQ9eQorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfS0VYRUM9eQorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19HVVNBPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKK0NPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgZWFybHlwcmludGs9c2gtc2NpLjEsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIG5taV9kZWJ1Zz1zdGF0ZSxkZWJvdW5jZSByb290ZGVsYXk9MTAiCisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lFUE9SVEJVUz15CitDT05GSUdfUENJRUFFUj15CisjIENPTkZJR19QQ0lFX0VDUkMgaXMgbm90IHNldAorQ09ORklHX1BDSUVBRVJfSU5KRUNUPXkKK0NPTkZJR19QQ0lFQVNQTT15CitDT05GSUdfUENJRUFTUE1fREVCVUc9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0RFQlVHPXkKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfUE09eQorQ09ORklHX1BNX0RFQlVHPXkKK0NPTkZJR19QTV9WRVJCT1NFPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKK0NPTkZJR19DUFVfSURMRT15CitDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CitDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIworIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIworIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKK0NPTkZJR19TQVRBX1BNUD15CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorQ09ORklHX1NBVEFfU0lMMjQ9eQorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX1BMQVRGT1JNPXkKKyMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTURJT19CSVRCQU5HPXkKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDOTExWD15CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz02CitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TSF9NU0lPRiBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU0hfU0NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1dEVCBpcyBub3Qgc2V0CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX1ZHQV9BUkI9eQorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisKKyMKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9NNjY1OTI9eQorQ09ORklHX1VTQl9NNjY1OTI9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NQVNTX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX01VTFRJIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfTUFYNjkwMD15CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9TSD15CisjIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19VSU89bQorIyBDT05GSUdfVUlPX0NJRiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUERSViBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUERSVl9HRU5JUlEgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1NNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fQUVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19TRVJDT1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19QQ0lfR0VORVJJQyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19IVUdFVExCRlM9eQorQ09ORklHX0hVR0VUTEJfUEFHRT15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVCVUdfU0hJUlE9eQorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUFJFRU1QVD15CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfVk09eQorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKK0NPTkZJR19LU1lNX1RSQUNFUj15CisjIENPTkZJR19QUk9GSUxFX0tTWU1fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CisjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CitDT05GSUdfRFVNUF9DT0RFPXkKK0NPTkZJR19EV0FSRl9VTldJTkRFUj15CisjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorQ09ORklHX0JJTkFSWV9QUklOVEY9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CitDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXB2cjIuYyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXB2cjIuYwppbmRleCAzOTFjYmUxLi4zY2VlNThlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1wdnIyLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtcHZyMi5jCkBAIC00MCwxMCArNDAsMTAgQEAKIAogc3RhdGljIGludCBwdnIyX3JlcXVlc3RfZG1hKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKIHsKLQlpZiAoY3RybF9pbmwoUFZSMl9ETUFfTU9ERSkgIT0gMCkKKwlpZiAoX19yYXdfcmVhZGwoUFZSMl9ETUFfTU9ERSkgIT0gMCkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWN0cmxfb3V0bCgwLCBQVlIyX0RNQV9MTU1PREUwKTsKKwlfX3Jhd193cml0ZWwoMCwgUFZSMl9ETUFfTE1NT0RFMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYwLDkgKzYwLDkgQEAKIAogCXhmZXJfY29tcGxldGUgPSAwOwogCi0JY3RybF9vdXRsKGNoYW4tPmRhciwgUFZSMl9ETUFfQUREUik7Ci0JY3RybF9vdXRsKGNoYW4tPmNvdW50LCBQVlIyX0RNQV9DT1VOVCk7Ci0JY3RybF9vdXRsKGNoYW4tPm1vZGUgJiBETUFfTU9ERV9NQVNLLCBQVlIyX0RNQV9NT0RFKTsKKwlfX3Jhd193cml0ZWwoY2hhbi0+ZGFyLCBQVlIyX0RNQV9BRERSKTsKKwlfX3Jhd193cml0ZWwoY2hhbi0+Y291bnQsIFBWUjJfRE1BX0NPVU5UKTsKKwlfX3Jhd193cml0ZWwoY2hhbi0+bW9kZSAmIERNQV9NT0RFX01BU0ssIFBWUjJfRE1BX01PREUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYwppbmRleCAzN2ZiNWI4Li44MjcyMDg3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKQEAgLTUyLDExICs1MiwxNCBAQAogICoKICAqIGl0ZXJhdGlvbnMgdG8gY29tcGxldGUgdGhlIHRyYW5zZmVyLgogICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gPSBUU19TSElGVDsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNhbGNfeG1pdF9zaGlmdChzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCiB7Ci0JdTMyIGNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CisJdTMyIGNoY3IgPSBfX3Jhd19yZWFkbChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CisJaW50IGNudCA9ICgoY2hjciAmIENIQ1JfVFNfTE9XX01BU0spID4+IENIQ1JfVFNfTE9XX1NISUZUKSB8CisJCSgoY2hjciAmIENIQ1JfVFNfSElHSF9NQVNLKSA+PiBDSENSX1RTX0hJR0hfU0hJRlQpOwogCi0JcmV0dXJuIHRzX3NoaWZ0WyhjaGNyICYgQ0hDUl9UU19NQVNLKT4+Q0hDUl9UU19TSElGVF07CisJcmV0dXJuIHRzX3NoaWZ0W2NudF07CiB9CiAKIC8qCkBAIC03MCwxMyArNzMsMTMgQEAKIAlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4gPSBkZXZfaWQ7CiAJdTMyIGNoY3I7CiAKLQljaGNyID0gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOworCWNoY3IgPSBfX3Jhd19yZWFkbChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CiAKIAlpZiAoIShjaGNyICYgQ0hDUl9URSkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAogCWNoY3IgJj0gfihDSENSX0lFIHwgQ0hDUl9ERSk7Ci0JY3RybF9vdXRsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOworCV9fcmF3X3dyaXRlbChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKIAogCXdha2VfdXAoJmNoYW4tPndhaXRfcXVldWUpOwogCkBAIC0xMTUsNyArMTE4LDcgQEAKIAkJY2hhbi0+ZmxhZ3MgJj0gfkRNQV9URUlfQ0FQQUJMRTsKIAl9CiAKLQljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CisJX19yYXdfd3JpdGVsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogCiAJY2hhbi0+ZmxhZ3MgfD0gRE1BX0NPTkZJR1VSRUQ7CiAJcmV0dXJuIDA7CkBAIC0xMjYsMTMgKzEyOSwxMyBAQAogCWludCBpcnE7CiAJdTMyIGNoY3I7CiAKLQljaGNyID0gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOworCWNoY3IgPSBfX3Jhd19yZWFkbChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CiAJY2hjciB8PSBDSENSX0RFOwogCiAJaWYgKGNoYW4tPmZsYWdzICYgRE1BX1RFSV9DQVBBQkxFKQogCQljaGNyIHw9IENIQ1JfSUU7CiAKLQljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CisJX19yYXdfd3JpdGVsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogCiAJaWYgKGNoYW4tPmZsYWdzICYgRE1BX1RFSV9DQVBBQkxFKSB7CiAJCWlycSA9IGdldF9kbXRlX2lycShjaGFuLT5jaGFuKTsKQEAgLTE1MCw5ICsxNTMsOSBAQAogCQlkaXNhYmxlX2lycShpcnEpOwogCX0KIAotCWNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CisJY2hjciA9IF9fcmF3X3JlYWRsKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKIAljaGNyICY9IH4oQ0hDUl9ERSB8IENIQ1JfVEUgfCBDSENSX0lFKTsKLQljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CisJX19yYXdfd3JpdGVsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogfQogCiBzdGF0aWMgaW50IHNoX2RtYWNfeGZlcl9kbWEoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQpAQCAtMTgzLDEyICsxODYsMTIgQEAKIAkgKi8KIAlpZiAoY2hhbi0+c2FyIHx8IChtYWNoX2lzX2RyZWFtY2FzdCgpICYmCiAJCQkgIGNoYW4tPmNoYW4gPT0gUFZSMl9DQVNDQURFX0NIQU4pKQotCQljdHJsX291dGwoY2hhbi0+c2FyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXStTQVIpKTsKKwkJX19yYXdfd3JpdGVsKGNoYW4tPnNhciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0rU0FSKSk7CiAJaWYgKGNoYW4tPmRhciB8fCAobWFjaF9pc19kcmVhbWNhc3QoKSAmJgogCQkJICBjaGFuLT5jaGFuID09IFBWUjJfQ0FTQ0FERV9DSEFOKSkKLQkJY3RybF9vdXRsKGNoYW4tPmRhciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBEQVIpKTsKKwkJX19yYXdfd3JpdGVsKGNoYW4tPmRhciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBEQVIpKTsKIAotCWN0cmxfb3V0bChjaGFuLT5jb3VudCA+PiBjYWxjX3htaXRfc2hpZnQoY2hhbiksCisJX19yYXdfd3JpdGVsKGNoYW4tPmNvdW50ID4+IGNhbGNfeG1pdF9zaGlmdChjaGFuKSwKIAkJKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBUQ1IpKTsKIAogCXNoX2RtYWNfZW5hYmxlX2RtYShjaGFuKTsKQEAgLTE5OCwxMCArMjAxLDEwIEBACiAKIHN0YXRpYyBpbnQgc2hfZG1hY19nZXRfZG1hX3Jlc2lkdWUoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQogewotCWlmICghKGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSAmIENIQ1JfREUpKQorCWlmICghKF9fcmF3X3JlYWRsKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSAmIENIQ1JfREUpKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgVENSKQorCXJldHVybiBfX3Jhd19yZWFkbChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgVENSKQogCQkgPDwgY2FsY194bWl0X3NoaWZ0KGNoYW4pOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYWJyZy5jIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWFicmcuYwppbmRleCA1ZTIyNjg5Li43MjYyMmUzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYWJyZy5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hYnJnLmMKQEAgLTg2LDggKzg2LDggQEAKIAl1bnNpZ25lZCBsb25nIGRjcjsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWRjciA9IGN0cmxfaW5sKERNQUJSR0NSKTsKLQljdHJsX291dGwoZGNyICYgfjB4MDBmZjAwMDMsIERNQUJSR0NSKTsJLyogYWNrIGFsbCAqLworCWRjciA9IF9fcmF3X3JlYWRsKERNQUJSR0NSKTsKKwlfX3Jhd193cml0ZWwoZGNyICYgfjB4MDBmZjAwMDMsIERNQUJSR0NSKTsJLyogYWNrIGFsbCAqLwogCWRjciAmPSBkY3IgPj4gODsJLyogaWdub3JlIG1hc2tlZCAqLwogCiAJLyogVVNCIHN0dWZmLCBnZXQgaXQgb3V0IG9mIHRoZSB3YXkgZmlyc3QgKi8KQEAgLTEwOSwxNyArMTA5LDE3IEBACiBzdGF0aWMgdm9pZCBkbWFicmdfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGRtYWlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGRjcjsKLQlkY3IgPSBjdHJsX2lubChETUFCUkdDUik7CisJZGNyID0gX19yYXdfcmVhZGwoRE1BQlJHQ1IpOwogCWRjciAmPSB+KDEgPDwgKChkbWFpcnEgPiAxKSA/IGRtYWlycSArIDIyIDogZG1haXJxICsgOCkpOwotCWN0cmxfb3V0bChkY3IsIERNQUJSR0NSKTsKKwlfX3Jhd193cml0ZWwoZGNyLCBETUFCUkdDUik7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWJyZ19lbmFibGVfaXJxKHVuc2lnbmVkIGludCBkbWFpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBkY3I7Ci0JZGNyID0gY3RybF9pbmwoRE1BQlJHQ1IpOworCWRjciA9IF9fcmF3X3JlYWRsKERNQUJSR0NSKTsKIAlkY3IgfD0gKDEgPDwgKChkbWFpcnEgPiAxKSA/IGRtYWlycSArIDIyIDogZG1haXJxICsgOCkpOwotCWN0cmxfb3V0bChkY3IsIERNQUJSR0NSKTsKKwlfX3Jhd193cml0ZWwoZGNyLCBETUFCUkdDUik7CiB9CiAKIGludCBkbWFicmdfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGRtYWlycSwgdm9pZCgqaGFuZGxlcikodm9pZCopLApAQCAtMTY1LDEzICsxNjUsMTMgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BQlJHOiBETUFDIGNoMCBub3QgcmVzZXJ2ZWQhXG4iKTsKICNlbmRpZgogCi0JY3RybF9vdXRsKDAsIERNQUJSR0NSKTsKLQljdHJsX291dGwoMCwgRE1BQ0hDUjApOwotCWN0cmxfb3V0bCgweDk0MDAwMDAwLCBETUFSU1JBKTsJLyogZW5hYmxlIERNQUJSRyBpbiBETUFDIDAgKi8KKwlfX3Jhd193cml0ZWwoMCwgRE1BQlJHQ1IpOworCV9fcmF3X3dyaXRlbCgwLCBETUFDSENSMCk7CisJX19yYXdfd3JpdGVsKDB4OTQwMDAwMDAsIERNQVJTUkEpOwkvKiBlbmFibGUgRE1BQlJHIGluIERNQUMgMCAqLwogCiAJLyogZW5hYmxlIERNQUJSRyBtb2RlLCBlbmFibGUgdGhlIERNQUMgKi8KLQlvciA9IGN0cmxfaW5sKERNQU9SKTsKLQljdHJsX291dGwob3IgfCBETUFPUl9CUkcgfCBETUFPUl9ETUVOLCBETUFPUik7CisJb3IgPSBfX3Jhd19yZWFkbChETUFPUik7CisJX19yYXdfd3JpdGVsKG9yIHwgRE1BT1JfQlJHIHwgRE1BT1JfRE1FTiwgRE1BT1IpOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoRE1BQlJHSTAsIGRtYWJyZ19pcnEsIElSUUZfRElTQUJMRUQsCiAJCQkiRE1BQlJHIFVTQiBhZGRyZXNzIGVycm9yIiwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvaGVhcnRiZWF0LmMgYi9hcmNoL3NoL2RyaXZlcnMvaGVhcnRiZWF0LmMKaW5kZXggYTkzMzlhNi4uMmFjYmM3OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2hlYXJ0YmVhdC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9oZWFydGJlYXQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBHZW5lcmljIGhlYXJ0YmVhdCBkcml2ZXIgZm9yIHJlZ3VsYXIgTEVEIGJhbmtzCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3ICBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgLSAyMDEwICBQYXVsIE11bmR0CiAgKgogICogTW9zdCBTSCByZWZlcmVuY2UgYm9hcmRzIGluY2x1ZGUgYSBudW1iZXIgb2YgaW5kaXZpZHVhbCBMRURzIHRoYXQgY2FuCiAgKiBiZSBpbmRlcGVuZGVudGx5IGNvbnRyb2xsZWQgKGVpdGhlciB2aWEgYSBwcmUtZGVmaW5lZCBoYXJkd2FyZQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAiaGVhcnRiZWF0IgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4xLjEiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjEuMiIKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVmYXVsdF9iaXRfcG9zW10gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcgfTsKIApAQCAtOTgsNyArOTgsNyBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaGQtPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaGQtPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAodW5saWtlbHkoIWhkLT5iYXNlKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CiAKQEAgLTExNyw4ICsxMTcsMjAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaGQtPm5yX2JpdHM7IGkrKykKIAkJaGQtPm1hc2sgfD0gKDEgPDwgaGQtPmJpdF9wb3NbaV0pOwogCi0JaWYgKCFoZC0+cmVnc2l6ZSkKLQkJaGQtPnJlZ3NpemUgPSA4OwkvKiBkZWZhdWx0IGFjY2VzcyBzaXplICovCisJaWYgKCFoZC0+cmVnc2l6ZSkgeworCQlzd2l0Y2ggKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTV9UWVBFX01BU0spIHsKKwkJY2FzZSBJT1JFU09VUkNFX01FTV8zMkJJVDoKKwkJCWhkLT5yZWdzaXplID0gMzI7CisJCQlicmVhazsKKwkJY2FzZSBJT1JFU09VUkNFX01FTV8xNkJJVDoKKwkJCWhkLT5yZWdzaXplID0gMTY7CisJCQlicmVhazsKKwkJY2FzZSBJT1JFU09VUkNFX01FTV84QklUOgorCQlkZWZhdWx0OgorCQkJaGQtPnJlZ3NpemUgPSA4OworCQkJYnJlYWs7CisJCX0KKwl9CiAKIAlzZXR1cF90aW1lcigmaGQtPnRpbWVyLCBoZWFydGJlYXRfdGltZXIsICh1bnNpZ25lZCBsb25nKWhkKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBoZCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9NYWtlZmlsZQppbmRleCAwOGFmMWY0Li40YTU5ZTY4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvTWFrZWZpbGUKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBQQ0kgc3BlY2lmaWMga2VybmVsIGludGVyZmFjZSByb3V0aW5lcyB1bmRlciBMaW51eC4KICMKLW9iai15CQkJCQkrPSBwY2kubworb2JqLXkJCQkJCSs9IGNvbW1vbi5vIHBjaS5vCiAKIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEpCSs9IHBjaS1zaDc3NTEubyBvcHMtc2g0Lm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSKQkrPSBwY2ktc2g3NzUxLm8gb3BzLXNoNC5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKQkrPSBwY2ktc2g3NzgwLm8gb3BzLXNoNC5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQkrPSBwY2ktc2g3NzgwLm8gb3BzLXNoNC5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQkrPSBwY2ktc2g3NzgwLm8gb3BzLXNoNC5vCi1vYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQkrPSBvcHMtc2g3Nzg2Lm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCSs9IHBjaWUtc2g3Nzg2Lm8gb3BzLXNoNzc4Ni5vCiBvYmotJChDT05GSUdfQ1BVX1NINSkJCQkrPSBwY2ktc2g1Lm8gb3BzLXNoNS5vCiAKIG9iai0kKENPTkZJR19TSF9EUkVBTUNBU1QpCQkrPSBvcHMtZHJlYW1jYXN0Lm8gZml4dXBzLWRyZWFtY2FzdC5vIFwKQEAgLTI1LDQgKzI1LDMgQEAKIG9iai0kKENPTkZJR19TSF9MQU5ESVNLKQkJKz0gZml4dXBzLWxhbmRpc2subwogb2JqLSQoQ09ORklHX1NIX0xCT1hfUkUyKQkJKz0gZml4dXBzLXJ0czc3NTFyMmQubwogb2JqLSQoQ09ORklHX1NIX0NBWU1BTikJCQkrPSBmaXh1cHMtY2F5bWFuLm8KLW9iai0kKENPTkZJR19TSF9VUlFVRUxMKQkJKz0gcGNpZS1zaDc3ODYubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9jb21tb24uYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJmMTM4MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvY29tbW9uLmMKQEAgLTAsMCArMSwxNjIgQEAKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisvKgorICogVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGVhcmx5IG9uIGJlZm9yZSBQQ0kgc2Nhbm5pbmcgaXMgZG9uZQorICogYW5kIGFsbCBvZiB0aGUgcGNpX2RldiBhbmQgcGNpX2J1cyBzdHJ1Y3R1cmVzIGhhdmUgYmVlbiBjcmVhdGVkLgorICovCitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmZha2VfcGNpX2RldihzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsCisJaW50IHRvcF9idXMsIGludCBidXNuciwgaW50IGRldmZuKQoreworCXN0YXRpYyBzdHJ1Y3QgcGNpX2RldiBkZXY7CisJc3RhdGljIHN0cnVjdCBwY2lfYnVzIGJ1czsKKworCWRldi5idXMgPSAmYnVzOworCWRldi5zeXNkYXRhID0gaG9zZTsKKwlkZXYuZGV2Zm4gPSBkZXZmbjsKKwlidXMubnVtYmVyID0gYnVzbnI7CisJYnVzLnN5c2RhdGEgPSBob3NlOworCWJ1cy5vcHMgPSBob3NlLT5wY2lfb3BzOworCisJaWYoYnVzbnIgIT0gdG9wX2J1cykKKwkJLyogRmFrZSBhIHBhcmVudCBidXMgc3RydWN0dXJlLiAqLworCQlidXMucGFyZW50ID0gJmJ1czsKKwllbHNlCisJCWJ1cy5wYXJlbnQgPSBOVUxMOworCisJcmV0dXJuICZkZXY7Cit9CisKKyNkZWZpbmUgRUFSTFlfUENJX09QKHJ3LCBzaXplLCB0eXBlKQkJCQkJXAoraW50IF9faW5pdCBlYXJseV8jI3J3IyNfY29uZmlnXyMjc2l6ZShzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsCQlcCisJaW50IHRvcF9idXMsIGludCBidXMsIGludCBkZXZmbiwgaW50IG9mZnNldCwgdHlwZSB2YWx1ZSkJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gcGNpXyMjcncjI19jb25maWdfIyNzaXplKAkJCQlcCisJCWZha2VfcGNpX2Rldihob3NlLCB0b3BfYnVzLCBidXMsIGRldmZuKSwJCVwKKwkJb2Zmc2V0LCB2YWx1ZSk7CQkJCQkJXAorfQorCitFQVJMWV9QQ0lfT1AocmVhZCwgYnl0ZSwgdTggKikKK0VBUkxZX1BDSV9PUChyZWFkLCB3b3JkLCB1MTYgKikKK0VBUkxZX1BDSV9PUChyZWFkLCBkd29yZCwgdTMyICopCitFQVJMWV9QQ0lfT1Aod3JpdGUsIGJ5dGUsIHU4KQorRUFSTFlfUENJX09QKHdyaXRlLCB3b3JkLCB1MTYpCitFQVJMWV9QQ0lfT1Aod3JpdGUsIGR3b3JkLCB1MzIpCisKK2ludCBfX2luaXQgcGNpX2lzXzY2bWh6X2NhcGFibGUoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLAorCQkJCWludCB0b3BfYnVzLCBpbnQgY3VycmVudF9idXMpCit7CisJdTMyIHBjaV9kZXZmbjsKKwl1bnNpZ25lZCBzaG9ydCB2aWQ7CisJaW50IGNhcDY2ID0gLTE7CisJdTE2IHN0YXQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJQQ0k6IENoZWNraW5nIDY2TUh6IGNhcGFiaWxpdGllcy4uLlxuIik7CisKKwlmb3IgKHBjaV9kZXZmbiA9IDA7IHBjaV9kZXZmbiA8IDB4ZmY7IHBjaV9kZXZmbisrKSB7CisJCWlmIChQQ0lfRlVOQyhwY2lfZGV2Zm4pKQorCQkJY29udGludWU7CisJCWlmIChlYXJseV9yZWFkX2NvbmZpZ193b3JkKGhvc2UsIHRvcF9idXMsIGN1cnJlbnRfYnVzLAorCQkJCQkgICBwY2lfZGV2Zm4sIFBDSV9WRU5ET1JfSUQsICZ2aWQpICE9CisJCSAgICBQQ0lCSU9TX1NVQ0NFU1NGVUwpCisJCQljb250aW51ZTsKKwkJaWYgKHZpZCA9PSAweGZmZmYpCisJCQljb250aW51ZTsKKworCQkvKiBjaGVjayA2Nk1IeiBjYXBhYmlsaXR5ICovCisJCWlmIChjYXA2NiA8IDApCisJCQljYXA2NiA9IDE7CisJCWlmIChjYXA2NikgeworCQkJZWFybHlfcmVhZF9jb25maWdfd29yZChob3NlLCB0b3BfYnVzLCBjdXJyZW50X2J1cywKKwkJCQkJICAgICAgIHBjaV9kZXZmbiwgUENJX1NUQVRVUywgJnN0YXQpOworCQkJaWYgKCEoc3RhdCAmIFBDSV9TVEFUVVNfNjZNSFopKSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgIlBDSTogJTAyeDolMDJ4IG5vdCA2Nk1IeiBjYXBhYmxlLlxuIiwKKwkJCQkgICAgICAgY3VycmVudF9idXMsIHBjaV9kZXZmbik7CisJCQkJY2FwNjYgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIGNhcDY2ID4gMDsKK30KKworc3RhdGljIHZvaWQgcGNpYmlvc19lbmFibGVfZXJyKHVuc2lnbmVkIGxvbmcgX19kYXRhKQoreworCXN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSA9IChzdHJ1Y3QgcGNpX2NoYW5uZWwgKilfX2RhdGE7CisKKwlkZWxfdGltZXIoJmhvc2UtPmVycl90aW1lcik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogcmUtZW5hYmxpbmcgZXJyb3IgSVJRLlxuIik7CisJZW5hYmxlX2lycShob3NlLT5lcnJfaXJxKTsKK30KKworc3RhdGljIHZvaWQgcGNpYmlvc19lbmFibGVfc2Vycih1bnNpZ25lZCBsb25nIF9fZGF0YSkKK3sKKwlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UgPSAoc3RydWN0IHBjaV9jaGFubmVsICopX19kYXRhOworCisJZGVsX3RpbWVyKCZob3NlLT5zZXJyX3RpbWVyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiUENJOiByZS1lbmFibGluZyBzeXN0ZW0gZXJyb3IgSVJRLlxuIik7CisJZW5hYmxlX2lycShob3NlLT5zZXJyX2lycSk7Cit9CisKK3ZvaWQgcGNpYmlvc19lbmFibGVfdGltZXJzKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSkKK3sKKwlpZiAoaG9zZS0+ZXJyX2lycSkgeworCQlpbml0X3RpbWVyKCZob3NlLT5lcnJfdGltZXIpOworCQlob3NlLT5lcnJfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhvc2U7CisJCWhvc2UtPmVycl90aW1lci5mdW5jdGlvbiA9IHBjaWJpb3NfZW5hYmxlX2VycjsKKwl9CisKKwlpZiAoaG9zZS0+c2Vycl9pcnEpIHsKKwkJaW5pdF90aW1lcigmaG9zZS0+c2Vycl90aW1lcik7CisJCWhvc2UtPnNlcnJfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhvc2U7CisJCWhvc2UtPnNlcnJfdGltZXIuZnVuY3Rpb24gPSBwY2liaW9zX2VuYWJsZV9zZXJyOworCX0KK30KKworLyoKKyAqIEEgc2ltcGxlIGhhbmRsZXIgZm9yIHRoZSByZWd1bGFyIFBDSSBzdGF0dXMgZXJyb3JzLCBjYWxsZWQgZnJvbSBJUlEKKyAqIGNvbnRleHQuCisgKi8KK3Vuc2lnbmVkIGludCBwY2liaW9zX2hhbmRsZV9zdGF0dXNfZXJyb3JzKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJICB1bnNpZ25lZCBpbnQgc3RhdHVzLAorCQkJCQkgIHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSkKK3sKKwl1bnNpZ25lZCBpbnQgY21kID0gMDsKKworCWlmIChzdGF0dXMgJiBQQ0lfU1RBVFVTX1JFQ19NQVNURVJfQUJPUlQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogbWFzdGVyIGFib3J0LCBwYz0weCUwOGx4XG4iLCBhZGRyKTsKKwkJY21kIHw9IFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVDsKKwl9CisKKwlpZiAoc3RhdHVzICYgUENJX1NUQVRVU19SRUNfVEFSR0VUX0FCT1JUKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IHRhcmdldCBhYm9ydDogIik7CisJCXBjaWJpb3NfcmVwb3J0X3N0YXR1cyhQQ0lfU1RBVFVTX1JFQ19UQVJHRVRfQUJPUlQgfAorCQkJCSAgICAgIFBDSV9TVEFUVVNfU0lHX1RBUkdFVF9BQk9SVCB8CisJCQkJICAgICAgUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JULCAxKTsKKwkJcHJpbnRrKCJcbiIpOworCisJCWNtZCB8PSBQQ0lfU1RBVFVTX1JFQ19UQVJHRVRfQUJPUlQ7CisJfQorCisJaWYgKHN0YXR1cyAmIChQQ0lfU1RBVFVTX1BBUklUWSB8IFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBwYXJpdHkgZXJyb3IgZGV0ZWN0ZWQ6ICIpOworCQlwY2liaW9zX3JlcG9ydF9zdGF0dXMoUENJX1NUQVRVU19QQVJJVFkgfAorCQkJCSAgICAgIFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZLCAxKTsKKwkJcHJpbnRrKCJcbiIpOworCisJCWNtZCB8PSBQQ0lfU1RBVFVTX1BBUklUWSB8IFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZOworCisJCS8qIE5vdyBiYWNrIG9mZiBvZiB0aGUgSVJRIGZvciBhd2hpbGUgKi8KKwkJaWYgKGhvc2UtPmVycl9pcnEpIHsKKwkJCWRpc2FibGVfaXJxX25vc3luYyhob3NlLT5lcnJfaXJxKTsKKwkJCWhvc2UtPmVycl90aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOworCQkJYWRkX3RpbWVyKCZob3NlLT5lcnJfdGltZXIpOworCQl9CisJfQorCisJcmV0dXJuIGNtZDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLWRyZWFtY2FzdC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMKaW5kZXggZWQ3ZjQ4OS4uOTQyZWY0ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMKQEAgLTM5LDcgKzM5LDcgQEAKIAkJLyoKIAkJICogV2UgYWxzbyBhc3N1bWUgdGhhdCBkZXYtPmRldmZuID09IDAKIAkJICovCi0JCWRldi0+cmVzb3VyY2VbMV0uc3RhcnQJPSBwLT5pb19yZXNvdXJjZS0+c3RhcnQgICsgMHgxMDA7CisJCWRldi0+cmVzb3VyY2VbMV0uc3RhcnQJPSBwLT5yZXNvdXJjZXNbMF0uc3RhcnQgICsgMHgxMDA7CiAJCWRldi0+cmVzb3VyY2VbMV0uZW5kCT0gZGV2LT5yZXNvdXJjZVsxXS5zdGFydCArIDB4MjAwIC0gMTsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcjc3ODBycC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcjc3ODBycC5jCmluZGV4IDE1Y2E2NWMuLjA4YjJkODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXI3NzgwcnAuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1yNzc4MHJwLmMKQEAgLTIyLDE1ICsyMiwzIEBACiB7CiAJcmV0dXJuIGlycV90YWJbc2xvdF07CiB9Ci0KLWludCBwY2lfZml4dXBfcGNpYyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4pCi17Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDA0M2ZmLCBTSDRfUENJSU5UTSk7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDc3ODBfUENJSUJBUik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDA4MDAwMDAwLCBTSDc3ODBfUENJQ1NDUjApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAxYiwgU0g3NzgwX1BDSUNTQVIwKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4ZmQwMDAwMDAsIFNINzc4MF9QQ0lDU0NSMSk7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDBmLCBTSDc3ODBfUENJQ1NBUjEpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1ydHM3NzUxcjJkLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1ydHM3NzUxcjJkLmMKaW5kZXggNzg5OGYxNC4uZTI0ODUxNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcnRzNzc1MXIyZC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXJ0czc3NTFyMmQuYwpAQCAtNDMsNyArNDMsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgYmNyMSwgbWNyOwogCi0JYmNyMSA9IGN0cmxfaW5sKFNINzc1MV9CQ1IxKTsKKwliY3IxID0gX19yYXdfcmVhZGwoU0g3NzUxX0JDUjEpOwogCWJjcjEgfD0gMHg0MDA4MDAwMDsJLyogRW5hYmxlIEJpdCAxOSBCUkVRRU4sIHNldCBQQ0lDIHRvIHNsYXZlICovCiAJcGNpX3dyaXRlX3JlZyhjaGFuLCBiY3IxLCBTSDRfUENJQkNSMSk7CiAKQEAgLTU0LDcgKzU0LDcgQEAKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4ZmI5MDAwNDcsIFNINzc1MV9QQ0lDT05GMSk7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCAweGFiMDAwMDAxLCBTSDc3NTFfUENJQ09ORjQpOwogCi0JbWNyID0gY3RybF9pbmwoU0g3NzUxX01DUik7CisJbWNyID0gX19yYXdfcmVhZGwoU0g3NzUxX01DUik7CiAJbWNyID0gKG1jciAmIFBDSU1DUl9NUlNFVF9PRkYpICYgUENJTUNSX1JGU0hfT0ZGOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgbWNyLCBTSDRfUENJTUNSKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2RrNzc4MC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2RrNzc4MC5jCmluZGV4IDI1MGIwZWQuLjA5MzBmOTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNkazc3ODAuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZGs3NzgwLmMKQEAgLTMxLDIyICszMSwzIEBACiB7CiAgICAgICAgcmV0dXJuIHNkazc3ODBfaXJxX3RhYltwaW4tMV1bc2xvdF07CiB9Ci1pbnQgcGNpX2ZpeHVwX3BjaWMoc3RydWN0IHBjaV9jaGFubmVsICpjaGFuKQotewotCS8qIEVuYWJsZSBhbGwgaW50ZXJydXB0cywgc28gd2Uga25vdyB3aGF0IHRvIGZpeCAqLwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwQzNGRiwgU0g3NzgwX1BDSUlNUik7Ci0KLQkvKiBTZXQgdXAgc3RhbmRhcmQgUENJIGNvbmZpZyByZWdpc3RlcnMgKi8KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDgwMDAwMDAsIFNINzc4MF9QQ0lNQkFSMCk7CS8qIFBDSSAqLwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwODAwMDAwMCwgU0g0X1BDSUxBUjApOwkvKiBTSHd5ICovCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDA3RjAwMDAxLCBTSDRfUENJTFNSMCk7CS8qIHNpemUgMTI4TSB3LyBNQkFSICovCi0KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINzc4MF9QQ0lNQkFSMSk7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRfUENJTEFSMSk7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRfUENJTFNSMSk7Ci0KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4QUIwMDA4MDEsIFNINzc4MF9QQ0lJQkFSKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4QTUwMDBDMDEsIFNINF9QQ0lDUik7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNlNzc1MS5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2U3NzUxLmMKaW5kZXggNDc1ZmE5Zi4uYTRjN2QzYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2U3NzUxLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2U3NzUxLmMKQEAgLTk3LDEyICs5NywxMiBAQAogCSogbWVhbmluZyBhbGwgY2FsbHMgZ28gc3RyYWlnaHQgdGhyb3VnaC4uLiB1c2UgQlVHX09OIHRvCiAJKiBjYXRjaCBlcnJvbmVvdXMgYXNzdW1wdGlvbi4KIAkqLwotCUJVR19PTihjaGFuLT5tZW1fcmVzb3VyY2UtPnN0YXJ0ICE9IFNINzc1MV9QQ0lfTUVNT1JZX0JBU0UpOworCUJVR19PTihjaGFuLT5yZXNvdXJjZXNbMV0uc3RhcnQgIT0gU0g3NzUxX1BDSV9NRU1PUllfQkFTRSk7CiAKLQlQQ0lDX1dSSVRFKFNINzc1MV9QQ0lNQlIsIGNoYW4tPm1lbV9yZXNvdXJjZS0+c3RhcnQpOworCVBDSUNfV1JJVEUoU0g3NzUxX1BDSU1CUiwgY2hhbi0+cmVzb3VyY2VzWzFdLnN0YXJ0KTsKIAogCS8qIFNldCBJT0JSIGZvciB3aW5kb3cgY29udGFpbmluZyBhcmVhIHNwZWNpZmllZCBpbiBwY2kuaCAqLwotCVBDSUNfV1JJVEUoU0g3NzUxX1BDSUlPQlIsIChjaGFuLT5pb19yZXNvdXJjZS0+c3RhcnQgJiBTSDc3NTFfUENJSU9CUl9NQVNLKSk7CisJUENJQ19XUklURShTSDc3NTFfUENJSU9CUiwgKGNoYW4tPnJlc291cmNlc1swXS5zdGFydCAmIFNINzc1MV9QQ0lJT0JSX01BU0spKTsKIAogCS8qIEFsbCBkb25lLCBtYXkgYXMgd2VsbCBzYXkgc28uLi4gKi8KIAlwcmludGsoIlNINzc1MSBQQ0k6IEZpbmlzaGVkIGluaXRpYWxpemF0aW9uIG9mIHRoZSBQQ0kgY29udHJvbGxlclxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zaDQuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNoNC5jCmluZGV4IDc4YmViZWIuLjBiODE5OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNoNC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNoNC5jCkBAIC0xNiw3ICsxNiw3IEBACiAgKiBEaXJlY3QgYWNjZXNzIHRvIFBDSSBoYXJkd2FyZS4uLgogICovCiAjZGVmaW5lIENPTkZJR19DTUQoYnVzLCBkZXZmbiwgd2hlcmUpIFwKLQkoUDFTRUcgfCAoYnVzLT5udW1iZXIgPDwgMTYpIHwgKGRldmZuIDw8IDgpIHwgKHdoZXJlICYgfjMpKQorCSgweDgwMDAwMDAwIHwgKGJ1cy0+bnVtYmVyIDw8IDE2KSB8IChkZXZmbiA8PCA4KSB8ICh3aGVyZSAmIH4zKSkKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhzaDRfcGNpX2xvY2spOwogCkBAIC0xMDIsMzQgKzEwMiw2IEBACiAJLndyaXRlCQk9IHNoNF9wY2lfd3JpdGUsCiB9OwogCi0vKgotICogTm90IHJlYWxseSByZWxhdGVkIHRvIHBjaV9vcHMsIGJ1dCBpdCdzIGNvbW1vbiBhbmQgbm90IHdvcnRoIHNob3ZpbmcKLSAqIHNvbWV3aGVyZSBlbHNlIGZvciBub3cuLgotICovCi1pbnQgX19pbml0IHNoNF9wY2lfY2hlY2tfZGlyZWN0KHN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbikKLXsKLQkvKgotCSAqIENoZWNrIGlmIGNvbmZpZ3VyYXRpb24gd29ya3MuCi0JICovCi0JdW5zaWduZWQgaW50IHRtcCA9IHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRfUENJUEFSKTsKLQotCXBjaV93cml0ZV9yZWcoY2hhbiwgUDFTRUcsIFNINF9QQ0lQQVIpOwotCi0JaWYgKHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRfUENJUEFSKSA9PSBQMVNFRykgewotCQlwY2lfd3JpdGVfcmVnKGNoYW4sIHRtcCwgU0g0X1BDSVBBUik7Ci0JCXByaW50ayhLRVJOX0lORk8gIlBDSTogVXNpbmcgY29uZmlndXJhdGlvbiB0eXBlIDFcbiIpOwotCQlyZXF1ZXN0X3JlZ2lvbihjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lQQVIsIDgsCi0JCQkgICAgICAgIlBDSSBjb25mMSIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIHRtcCwgU0g0X1BDSVBBUik7Ci0KLQlwcmludGsoS0VSTl9FUlIgIlBDSTogJXMgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQogaW50IF9fYXR0cmlidXRlX18oKHdlYWspKSBwY2lfZml4dXBfcGNpYyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4pCiB7CiAJLyogTm90aGluZyB0byBkby4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLWRyZWFtY2FzdC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktZHJlYW1jYXN0LmMKaW5kZXggMjEwZjlkNC4uNjMzNjk0MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktZHJlYW1jYXN0LmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktZHJlYW1jYXN0LmMKQEAgLTI1LDI1ICsyNSwyNSBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL3BjaS5oPgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGdhcHNwY2lfaW9fcmVzb3VyY2UgPSB7Ci0JLm5hbWUJPSAiR0FQU1BDSSBJTyIsCi0JLnN0YXJ0CT0gR0FQU1BDSV9CQkFfQ09ORklHLAotCS5lbmQJPSBHQVBTUENJX0JCQV9DT05GSUcgKyBHQVBTUENJX0JCQV9DT05GSUdfU0laRSAtIDEsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZ2Fwc3BjaV9tZW1fcmVzb3VyY2UgPSB7Ci0JLm5hbWUJPSAiR0FQU1BDSSBtZW0iLAotCS5zdGFydAk9IEdBUFNQQ0lfRE1BX0JBU0UsCi0JLmVuZAk9IEdBUFNQQ0lfRE1BX0JBU0UgKyBHQVBTUENJX0RNQV9TSVpFIC0gMSwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZ2Fwc3BjaV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIkdBUFNQQ0kgSU8iLAorCQkuc3RhcnQJPSBHQVBTUENJX0JCQV9DT05GSUcsCisJCS5lbmQJPSBHQVBTUENJX0JCQV9DT05GSUcgKyBHQVBTUENJX0JCQV9DT05GSUdfU0laRSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwgIHsKKwkJLm5hbWUJPSAiR0FQU1BDSSBtZW0iLAorCQkuc3RhcnQJPSBHQVBTUENJX0RNQV9CQVNFLAorCQkuZW5kCT0gR0FQU1BDSV9ETUFfQkFTRSArIEdBUFNQQ0lfRE1BX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfY2hhbm5lbCBkcmVhbWNhc3RfcGNpX2NvbnRyb2xsZXIgPSB7CiAJLnBjaV9vcHMJPSAmZ2Fwc3BjaV9wY2lfb3BzLAotCS5pb19yZXNvdXJjZQk9ICZnYXBzcGNpX2lvX3Jlc291cmNlLAorCS5yZXNvdXJjZXMJPSBnYXBzcGNpX3Jlc291cmNlcywKKwkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShnYXBzcGNpX3Jlc291cmNlcyksCiAJLmlvX29mZnNldAk9IDB4MDAwMDAwMDAsCi0JLm1lbV9yZXNvdXJjZQk9ICZnYXBzcGNpX21lbV9yZXNvdXJjZSwKIAkubWVtX29mZnNldAk9IDB4MDAwMDAwMDAsCiB9OwogCkBAIC05NSw4ICs5NSw2IEBACiAJb3V0bCgweDAwMDAyMDAxLCBHQVBTUENJX0JCQV9DT05GSUcrMHgxMCk7CiAJb3V0bCgweDAxMDAwMDAwLCBHQVBTUENJX0JCQV9DT05GSUcrMHgxNCk7CiAKLQlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmZHJlYW1jYXN0X3BjaV9jb250cm9sbGVyKTsKLQotCXJldHVybiAwOworCXJldHVybiByZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmZHJlYW1jYXN0X3BjaV9jb250cm9sbGVyKTsKIH0KIGFyY2hfaW5pdGNhbGwoZ2Fwc3BjaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNC5oIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g0LmgKaW5kZXggM2Q1Mjk2Yy4uY2JmNzYzYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g0LmgKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g0LmgKQEAgLTQ5LDYgKzQ5LDE3IEBACiAgICNkZWZpbmUgU0g0X1BDSUlOVF9NV1BECSAgMHgwMDAwMDAwMgkvKiBNYXN0ZXIgV3JpdGUgUEVSUiBEZXRlY3QgKi8KICAgI2RlZmluZSBTSDRfUENJSU5UX01SUEQJICAweDAwMDAwMDAxCS8qIE1hc3RlciBSZWFkIFBFUlIgRGV0ZWN0ICovCiAjZGVmaW5lIFNINF9QQ0lJTlRNCQkweDExOAkJLyogUENJIEludGVycnVwdCBNYXNrICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fVFRBRElNCSAgQklUKDE0KQkvKiBUYXJnZXQtdGFyZ2V0IGFib3J0IGludGVycnVwdCAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX1RNVE9JTQkgIEJJVCg5KQkvKiBUYXJnZXQgcmV0cnkgdGltZW91dCAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX01ERUlNCSAgQklUKDgpCS8qIE1hc3RlciBmdW5jdGlvbiBkaXNhYmxlIGVycm9yICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fQVBFRElNCSAgQklUKDcpCS8qIEFkZHJlc3MgcGFyaXR5IGVycm9yIGRldGVjdGlvbiAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX1NESU0JICBCSVQoNikJLyogU0VSUiBkZXRlY3Rpb24gKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9EUEVJVFdNCSAgQklUKDUpCS8qIERhdGEgcGFyaXR5IGVycm9yIGZvciB0YXJnZXQgd3JpdGUgKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9QRURJVFJNCSAgQklUKDQpCS8qIFBFUlIgZGV0ZWN0aW9uIGZvciB0YXJnZXQgcmVhZCAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX1RBRElNTQkgIEJJVCgzKQkvKiBUYXJnZXQgYWJvcnQgZm9yIG1hc3RlciAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX01BRElNTQkgIEJJVCgyKQkvKiBNYXN0ZXIgYWJvcnQgZm9yIG1hc3RlciAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX01XUERJTQkgIEJJVCgxKQkvKiBNYXN0ZXIgd3JpdGUgZGF0YSBwYXJpdHkgZXJyb3IgKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9NUkRQRUlNCSAgQklUKDApCS8qIE1hc3RlciByZWFkIGRhdGEgcGFyaXR5IGVycm9yICovCiAjZGVmaW5lIFNINF9QQ0lBTFIJCTB4MTFDCQkvKiBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNINF9QQ0lDTFIJCTB4MTIwCQkvKiBFcnJvciBDb21tYW5kL0RhdGEgKi8KICAgI2RlZmluZSBTSDRfUENJQ0xSX01QSU8JICAweDgwMDAwMDAwCkBAIC02MSw3ICs3Miw3IEBACiAjZGVmaW5lIFNINF9QQ0lBSU5UCQkweDEzMAkJLyogQXJiaXRlciBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KICAgI2RlZmluZSBTSDRfUENJQUlOVF9NQktOCSAgMHgwMDAwMjAwMAkvKiBNYXN0ZXIgQnJva2VuIEludGVycnVwdCAqLwogICAjZGVmaW5lIFNINF9QQ0lBSU5UX1RCVE8JICAweDAwMDAxMDAwCS8qIFRhcmdldCBCdXMgVGltZSBPdXQgKi8KLSAgI2RlZmluZSBTSDRfUENJQUlOVF9NQlRPCSAgMHgwMDAwMTAwMAkvKiBNYXN0ZXIgQnVzIFRpbWUgT3V0ICovCisgICNkZWZpbmUgU0g0X1BDSUFJTlRfTUJUTwkgIDB4MDAwMDA4MDAJLyogTWFzdGVyIEJ1cyBUaW1lIE91dCAqLwogICAjZGVmaW5lIFNINF9QQ0lBSU5UX1RBQlQJICAweDAwMDAwMDA4CS8qIFRhcmdldCBBYm9ydCAqLwogICAjZGVmaW5lIFNINF9QQ0lBSU5UX01BQlQJICAweDAwMDAwMDA0CS8qIE1hc3RlciBBYm9ydCAqLwogICAjZGVmaW5lIFNINF9QQ0lBSU5UX1JEUEUJICAweDAwMDAwMDAyCS8qIFJlYWQgRGF0YSBQYXJpdHkgRXJyb3IgKi8KQEAgLTE1MSw3ICsxNjIsNiBAQAogCiAvKiBhcmNoL3NoL2tlcm5lbC9kcml2ZXJzL3BjaS9vcHMtc2g0LmMgKi8KIGV4dGVybiBzdHJ1Y3QgcGNpX29wcyBzaDRfcGNpX29wczsKLWludCBzaDRfcGNpX2NoZWNrX2RpcmVjdChzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4pOwogaW50IHBjaV9maXh1cF9wY2ljKHN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbik7CiAKIHN0cnVjdCBzaDRfcGNpX2FkZHJlc3Nfc3BhY2UgewpAQCAtMTY3LDEzICsxNzcsMTMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfd3JpdGVfcmVnKHN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbiwKIAkJCQkgdW5zaWduZWQgbG9uZyB2YWwsIHVuc2lnbmVkIGxvbmcgcmVnKQogewotCWN0cmxfb3V0bCh2YWwsIGNoYW4tPnJlZ19iYXNlICsgcmVnKTsKKwlfX3Jhd193cml0ZWwodmFsLCBjaGFuLT5yZWdfYmFzZSArIHJlZyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwY2lfcmVhZF9yZWcoc3RydWN0IHBjaV9jaGFubmVsICpjaGFuLAogCQkJCQkgdW5zaWduZWQgbG9uZyByZWcpCiB7Ci0JcmV0dXJuIGN0cmxfaW5sKGNoYW4tPnJlZ19iYXNlICsgcmVnKTsKKwlyZXR1cm4gX19yYXdfcmVhZGwoY2hhbi0+cmVnX2Jhc2UgKyByZWcpOwogfQogCiAjZW5kaWYgLyogX19QQ0lfU0g0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNS5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g1LmMKaW5kZXggODczZWQyYi4uMGJmMjk2YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g1LmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g1LmMKQEAgLTg5LDE0ICs4OSwxMyBAQAogCXJldHVybiBJUlFfTk9ORTsKIH0KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDVfaW9fcmVzb3VyY2UgPSB7IC8qIHBsYWNlIGhvbGRlciAqLyB9Owotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDVfbWVtX3Jlc291cmNlID0geyAvKiBwbGFjZSBob2xkZXIgKi8gfTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g1X3BjaV9yZXNvdXJjZXNbMl07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2NoYW5uZWwgc2g1cGNpX2NvbnRyb2xsZXIgPSB7CiAJLnBjaV9vcHMJCT0gJnNoNV9wY2lfb3BzLAotCS5tZW1fcmVzb3VyY2UJCT0gJnNoNV9tZW1fcmVzb3VyY2UsCisJLnJlc291cmNlcwkJPSBzaDVfcGNpX3Jlc291cmNlcywKKwkubnJfcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUoc2g1X3BjaV9yZXNvdXJjZXMpLAogCS5tZW1fb2Zmc2V0CQk9IDB4MDAwMDAwMDAsCi0JLmlvX3Jlc291cmNlCQk9ICZzaDVfaW9fcmVzb3VyY2UsCiAJLmlvX29mZnNldAkJPSAweDAwMDAwMDAwLAogfTsKIApAQCAtMjEwLDE0ICsyMDksMTIgQEAKICAgICAgICAgU0g1UENJX1dSSVRFKEFJTlRNLCB+MCk7CiAgICAgICAgIFNINVBDSV9XUklURShQSU5UTSwgfjApOwogCi0Jc2g1X2lvX3Jlc291cmNlLnN0YXJ0ID0gUENJX0lPX0FSRUE7Ci0Jc2g1X2lvX3Jlc291cmNlLmVuZCA9IFBDSV9JT19BUkVBICsgMHgxMDAwMDsKKwlzaDVfcGNpX3Jlc291cmNlc1swXS5zdGFydCA9IFBDSV9JT19BUkVBOworCXNoNV9wY2lfcmVzb3VyY2VzWzBdLmVuZCA9IFBDSV9JT19BUkVBICsgMHgxMDAwMDsKIAotCXNoNV9tZW1fcmVzb3VyY2Uuc3RhcnQgPSBtZW1TdGFydDsKLQlzaDVfbWVtX3Jlc291cmNlLmVuZCA9IG1lbVN0YXJ0ICsgbWVtU2l6ZTsKKwlzaDVfcGNpX3Jlc291cmNlc1sxXS5zdGFydCA9IG1lbVN0YXJ0OworCXNoNV9wY2lfcmVzb3VyY2VzWzFdLmVuZCA9IG1lbVN0YXJ0ICsgbWVtU2l6ZTsKIAotCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZzaDVwY2lfY29udHJvbGxlcik7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoJnNoNXBjaV9jb250cm9sbGVyKTsKIH0KIGFyY2hfaW5pdGNhbGwoc2g1cGNpX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g1LmggYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDUuaAppbmRleCBmMjc3NjI4Li4zZjAxZGVjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDUuaAorKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDUuaApAQCAtODYsMTQgKzg2LDE0IEBACiAvKiAjZGVmaW5lIFBDSVNINV9WQ1JfUkVHKHgpICAgICAgICAgICAgICAgICggU0g1UENJX1ZDUl9CQVNFIChQQ0lTSDVfVkNSXyMjeCkpICovCiAKIC8qIFdyaXRlIEkvTyBmdW5jdGlvbnMgKi8KLSNkZWZpbmUgU0g1UENJX1dSSVRFKHJlZyx2YWwpICAgICAgICBjdHJsX291dGwoKHUzMikodmFsKSxQQ0lTSDVfSUNSX1JFRyhyZWcpKQotI2RlZmluZSBTSDVQQ0lfV1JJVEVfU0hPUlQocmVnLHZhbCkgIGN0cmxfb3V0dygodTE2KSh2YWwpLFBDSVNINV9JQ1JfUkVHKHJlZykpCi0jZGVmaW5lIFNINVBDSV9XUklURV9CWVRFKHJlZyx2YWwpICAgY3RybF9vdXRiKCh1OCkodmFsKSxQQ0lTSDVfSUNSX1JFRyhyZWcpKQorI2RlZmluZSBTSDVQQ0lfV1JJVEUocmVnLHZhbCkgICAgICAgIF9fcmF3X3dyaXRlbCgodTMyKSh2YWwpLFBDSVNINV9JQ1JfUkVHKHJlZykpCisjZGVmaW5lIFNINVBDSV9XUklURV9TSE9SVChyZWcsdmFsKSAgX19yYXdfd3JpdGV3KCh1MTYpKHZhbCksUENJU0g1X0lDUl9SRUcocmVnKSkKKyNkZWZpbmUgU0g1UENJX1dSSVRFX0JZVEUocmVnLHZhbCkgICBfX3Jhd193cml0ZWIoKHU4KSh2YWwpLFBDSVNINV9JQ1JfUkVHKHJlZykpCiAKIC8qIFJlYWQgSS9PIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBTSDVQQ0lfUkVBRChyZWcpICAgICAgICAgICAgIGN0cmxfaW5sKFBDSVNINV9JQ1JfUkVHKHJlZykpCi0jZGVmaW5lIFNINVBDSV9SRUFEX1NIT1JUKHJlZykgICAgICAgY3RybF9pbncoUENJU0g1X0lDUl9SRUcocmVnKSkKLSNkZWZpbmUgU0g1UENJX1JFQURfQllURShyZWcpICAgICAgICBjdHJsX2luYihQQ0lTSDVfSUNSX1JFRyhyZWcpKQorI2RlZmluZSBTSDVQQ0lfUkVBRChyZWcpICAgICAgICAgICAgIF9fcmF3X3JlYWRsKFBDSVNINV9JQ1JfUkVHKHJlZykpCisjZGVmaW5lIFNINVBDSV9SRUFEX1NIT1JUKHJlZykgICAgICAgX19yYXdfcmVhZHcoUENJU0g1X0lDUl9SRUcocmVnKSkKKyNkZWZpbmUgU0g1UENJX1JFQURfQllURShyZWcpICAgICAgICBfX3Jhd19yZWFkYihQQ0lTSDVfSUNSX1JFRyhyZWcpKQogCiAvKiBTZXQgUENJIGNvbmZpZyBiaXRzICovCiAjZGVmaW5lIFNFVF9DT05GSUdfQklUUyhidXMsZGV2Zm4sd2hlcmUpICAoKCgoYnVzKSA8PCAxNikgfCAoKGRldmZuKSA8PCA4KSB8ICgod2hlcmUpICYgfjMpKSB8IDB4ODAwMDAwMDApCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5jCmluZGV4IDcwYzE5OTkuLjE3ODExZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5jCkBAIC00NCwyNSArNDQsMjUgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3NTFfaW9fcmVzb3VyY2UgPSB7Ci0JLm5hbWUJPSAiU0g3NzUxX0lPIiwKLQkuc3RhcnQJPSBTSDc3NTFfUENJX0lPX0JBU0UsCi0JLmVuZAk9IFNINzc1MV9QQ0lfSU9fQkFTRSArIFNINzc1MV9QQ0lfSU9fU0laRSAtIDEsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9JTwotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3NTFfbWVtX3Jlc291cmNlID0gewotCS5uYW1lCT0gIlNINzc1MV9tZW0iLAotCS5zdGFydAk9IFNINzc1MV9QQ0lfTUVNT1JZX0JBU0UsCi0JLmVuZAk9IFNINzc1MV9QQ0lfTUVNT1JZX0JBU0UgKyBTSDc3NTFfUENJX01FTV9TSVpFIC0gMSwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3NTFfcGNpX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAiU0g3NzUxX0lPIiwKKwkJLnN0YXJ0CT0gU0g3NzUxX1BDSV9JT19CQVNFLAorCQkuZW5kCT0gU0g3NzUxX1BDSV9JT19CQVNFICsgU0g3NzUxX1BDSV9JT19TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTworCX0sIHsKKwkJLm5hbWUJPSAiU0g3NzUxX21lbSIsCisJCS5zdGFydAk9IFNINzc1MV9QQ0lfTUVNT1JZX0JBU0UsCisJCS5lbmQJPSBTSDc3NTFfUENJX01FTU9SWV9CQVNFICsgU0g3NzUxX1BDSV9NRU1fU0laRSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2NoYW5uZWwgc2g3NzUxX3BjaV9jb250cm9sbGVyID0gewogCS5wY2lfb3BzCT0gJnNoNF9wY2lfb3BzLAotCS5tZW1fcmVzb3VyY2UJPSAmc2g3NzUxX21lbV9yZXNvdXJjZSwKKwkucmVzb3VyY2VzCT0gc2g3NzUxX3BjaV9yZXNvdXJjZXMsCisJLm5yX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3NzUxX3BjaV9yZXNvdXJjZXMpLAogCS5tZW1fb2Zmc2V0CT0gMHgwMDAwMDAwMCwKLQkuaW9fcmVzb3VyY2UJPSAmc2g3NzUxX2lvX3Jlc291cmNlLAogCS5pb19vZmZzZXQJPSAweDAwMDAwMDAwLAogCS5pb19tYXBfYmFzZQk9IFNINzc1MV9QQ0lfSU9fQkFTRSwKIH07CkBAIC03OSw3ICs3OSw2IEBACiAJc3RydWN0IHBjaV9jaGFubmVsICpjaGFuID0gJnNoNzc1MV9wY2lfY29udHJvbGxlcjsKIAl1bnNpZ25lZCBpbnQgaWQ7CiAJdTMyIHdvcmQsIHJlZzsKLQlpbnQgcmV0OwogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJQQ0k6IFN0YXJ0aW5nIGludGlhbGl6YXRpb24uXG4iKTsKIApAQCAtOTMsMTMgKzkyLDEwIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmICgocmV0ID0gc2g0X3BjaV9jaGVja19kaXJlY3QoY2hhbikpICE9IDApCi0JCXJldHVybiByZXQ7Ci0KIAkvKiBTZXQgdGhlIEJDUidzIHRvIGVuYWJsZSBQQ0kgYWNjZXNzICovCi0JcmVnID0gY3RybF9pbmwoU0g3NzUxX0JDUjEpOworCXJlZyA9IF9fcmF3X3JlYWRsKFNINzc1MV9CQ1IxKTsKIAlyZWcgfD0gMHg4MDAwMDsKLQljdHJsX291dGwocmVnLCBTSDc3NTFfQkNSMSk7CisJX19yYXdfd3JpdGVsKHJlZywgU0g3NzUxX0JDUjEpOwogCiAJLyogVHVybiB0aGUgY2xvY2tzIGJhY2sgb24gKG5vdCBkb25lIGluIHJlc2V0KSovCiAJcGNpX3dyaXRlX3JlZyhjaGFuLCAwLCBTSDRfUENJQ0xLUik7CkBAIC0xMzIsMTMgKzEyOCwxMyBAQAogCS8qIFNldCB0aGUgbG9jYWwgMTZNQiBQQ0kgbWVtb3J5IHNwYWNlIHdpbmRvdyB0bwogCSAqIHRoZSBsb3dlc3QgUENJIG1hcHBlZCBhZGRyZXNzCiAJICovCi0Jd29yZCA9IGNoYW4tPm1lbV9yZXNvdXJjZS0+c3RhcnQgJiBTSDRfUENJTUJSX01BU0s7CisJd29yZCA9IGNoYW4tPnJlc291cmNlc1sxXS5zdGFydCAmIFNINF9QQ0lNQlJfTUFTSzsKIAlwcl9kZWJ1ZygiUENJOiBTZXR0aW5nIHVwcGVyIGJpdHMgb2YgTWVtb3J5IHdpbmRvdyB0byAweCV4XG4iLCB3b3JkKTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIHdvcmQgLCBTSDRfUENJTUJSKTsKIAogCS8qIE1ha2Ugc3VyZSB0aGUgTVNCJ3Mgb2YgSU8gd2luZG93IGFyZSBzZXQgdG8gYWNjZXNzIFBDSSBzcGFjZQogCSAqIGNvcnJlY3RseSAqLwotCXdvcmQgPSBjaGFuLT5pb19yZXNvdXJjZS0+c3RhcnQgJiBTSDRfUENJSU9CUl9NQVNLOworCXdvcmQgPSBjaGFuLT5yZXNvdXJjZXNbMF0uc3RhcnQgJiBTSDRfUENJSU9CUl9NQVNLOwogCXByX2RlYnVnKCJQQ0k6IFNldHRpbmcgdXBwZXIgYml0cyBvZiBJTyB3aW5kb3cgdG8gMHgleFxuIiwgd29yZCk7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCB3b3JkLCBTSDRfUENJSU9CUik7CiAKQEAgLTE1OSwxMyArMTU1LDEzIEBACiAJCXJldHVybiAtMTsKIAogCS8qIGNvbmZpZ3VyZSB0aGUgd2FpdCBjb250cm9sIHJlZ2lzdGVycyAqLwotCXdvcmQgPSBjdHJsX2lubChTSDc3NTFfV0NSMSk7CisJd29yZCA9IF9fcmF3X3JlYWRsKFNINzc1MV9XQ1IxKTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIHdvcmQsIFNINF9QQ0lXQ1IxKTsKLQl3b3JkID0gY3RybF9pbmwoU0g3NzUxX1dDUjIpOworCXdvcmQgPSBfX3Jhd19yZWFkbChTSDc3NTFfV0NSMik7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCB3b3JkLCBTSDRfUENJV0NSMik7Ci0Jd29yZCA9IGN0cmxfaW5sKFNINzc1MV9XQ1IzKTsKKwl3b3JkID0gX19yYXdfcmVhZGwoU0g3NzUxX1dDUjMpOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgd29yZCwgU0g0X1BDSVdDUjMpOwotCXdvcmQgPSBjdHJsX2lubChTSDc3NTFfTUNSKTsKKwl3b3JkID0gX19yYXdfcmVhZGwoU0g3NzUxX01DUik7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCB3b3JkLCBTSDRfUENJTUNSKTsKIAogCS8qIE5PVEU6IEknbSBpZ25vcmluZyB0aGUgUENJIGVycm9yIElSUXMgZm9yIG5vdy4uCkBAIC0xODAsOCArMTc2LDYgQEAKIAl3b3JkID0gU0g0X1BDSUNSX1BSRUZJWCB8IFNINF9QQ0lDUl9DRklOIHwgU0g0X1BDSUNSX0FSQk07CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCB3b3JkLCBTSDRfUENJQ1IpOwogCi0JcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoY2hhbik7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoY2hhbik7CiB9CiBhcmNoX2luaXRjYWxsKHNoNzc1MV9wY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCmluZGV4IDMyM2I5MmQuLmZmZGNiZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIExvdy1MZXZlbCBQQ0kgU3VwcG9ydCBmb3IgdGhlIFNINzc4MAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xMSw1MiArMTEsMjQwIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlICJwY2ktc2g0LmgiCisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4NV9pb19yZXNvdXJjZSA9IHsKLQkubmFtZQk9ICJTSDc3ODVfSU8iLAotCS5zdGFydAk9IFNINzc4MF9QQ0lfSU9fQkFTRSwKLQkuZW5kCT0gU0g3NzgwX1BDSV9JT19CQVNFICsgU0g3NzgwX1BDSV9JT19TSVpFIC0gMSwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4NV9tZW1fcmVzb3VyY2UgPSB7Ci0JLm5hbWUJPSAiU0g3Nzg1X21lbSIsCi0JLnN0YXJ0CT0gU0g3NzgwX1BDSV9NRU1PUllfQkFTRSwKLQkuZW5kCT0gU0g3NzgwX1BDSV9NRU1PUllfQkFTRSArIFNINzc4MF9QQ0lfTUVNX1NJWkUgLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4NV9wY2lfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJQQ0kgSU8iLAorCQkuc3RhcnQJPSAweDEwMDAsCisJCS5lbmQJPSBTWl80TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwgeworCQkubmFtZQk9ICJQQ0kgTUVNIDAiLAorCQkuc3RhcnQJPSAweGZkMDAwMDAwLAorCQkuZW5kCT0gMHhmZDAwMDAwMCArIFNaXzE2TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLm5hbWUJPSAiUENJIE1FTSAxIiwKKwkJLnN0YXJ0CT0gMHgxMDAwMDAwMCwKKwkJLmVuZAk9IDB4MTAwMDAwMDAgKyBTWl82NE0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS8qCisJCSAqIDMyLWJpdCBvbmx5IHJlc291cmNlcyBtdXN0IGJlIGxhc3QuCisJCSAqLworCQkubmFtZQk9ICJQQ0kgTUVNIDIiLAorCQkuc3RhcnQJPSAweGMwMDAwMDAwLAorCQkuZW5kCT0gMHhjMDAwMDAwMCArIFNaXzUxMk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzMyQklULAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9jaGFubmVsIHNoNzc4MF9wY2lfY29udHJvbGxlciA9IHsKIAkucGNpX29wcwk9ICZzaDRfcGNpX29wcywKLQkubWVtX3Jlc291cmNlCT0gJnNoNzc4NV9tZW1fcmVzb3VyY2UsCi0JLm1lbV9vZmZzZXQJPSAweDAwMDAwMDAwLAotCS5pb19yZXNvdXJjZQk9ICZzaDc3ODVfaW9fcmVzb3VyY2UsCi0JLmlvX29mZnNldAk9IDB4MDAwMDAwMDAsCi0JLmlvX21hcF9iYXNlCT0gU0g3NzgwX1BDSV9JT19CQVNFLAorCS5yZXNvdXJjZXMJPSBzaDc3ODVfcGNpX3Jlc291cmNlcywKKwkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzaDc3ODVfcGNpX3Jlc291cmNlcyksCisJLmlvX29mZnNldAk9IDAsCisJLm1lbV9vZmZzZXQJPSAwLAorCS5pb19tYXBfYmFzZQk9IDB4ZmUyMDAwMDAsCisJLnNlcnJfaXJxCT0gZXZ0MmlycSgweGEwMCksCisJLmVycl9pcnEJPSBldnQyaXJxKDB4YWEwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2g0X3BjaV9hZGRyZXNzX21hcCBzaDc3ODBfcGNpX21hcCA9IHsKLQkud2luZG93MAk9IHsKLSNpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkKLQkJLmJhc2UJPSBTSDc3ODBfMzJCSVRfRERSX0JBU0VfQUREUiwKLQkJLnNpemUJPSAweDQwMDAwMDAwLAotI2Vsc2UKLQkJLmJhc2UJPSBTSDc3ODBfQ1MwX0JBU0VfQUREUiwKLQkJLnNpemUJPSAweDIwMDAwMDAwLAotI2VuZGlmCi0JfSwKK3N0cnVjdCBwY2lfZXJyb3JzIHsKKwl1bnNpZ25lZCBpbnQJbWFzazsKKwljb25zdCBjaGFyCSpzdHI7Cit9IHBjaV9hcmJpdGVyX2Vycm9yc1tdID0geworCXsgU0g0X1BDSUFJTlRfTUJLTiwJIm1hc3RlciBicm9rZW4iIH0sCisJeyBTSDRfUENJQUlOVF9UQlRPLAkidGFyZ2V0IGJ1cyB0aW1lIG91dCIgfSwKKwl7IFNINF9QQ0lBSU5UX01CVE8sCSJtYXN0ZXIgYnVzIHRpbWUgb3V0IiB9LAorCXsgU0g0X1BDSUFJTlRfVEFCVCwJInRhcmdldCBhYm9ydCIgfSwKKwl7IFNINF9QQ0lBSU5UX01BQlQsCSJtYXN0ZXIgYWJvcnQiIH0sCisJeyBTSDRfUENJQUlOVF9SRFBFLAkicmVhZCBkYXRhIHBhcml0eSBlcnJvciIgfSwKKwl7IFNINF9QQ0lBSU5UX1dEUEUsCSJ3cml0ZSBkYXRhIHBhcml0eSBlcnJvciIgfSwKK30sIHBjaV9pbnRlcnJ1cHRfZXJyb3JzW10gPSB7CisJeyBTSDRfUENJSU5UX01MQ0ssCSJtYXN0ZXIgbG9jayBlcnJvciIgfSwKKwl7IFNINF9QQ0lJTlRfVEFCVCwJInRhcmdldC10YXJnZXQgYWJvcnQiIH0sCisJeyBTSDRfUENJSU5UX1RSRVQsCSJ0YXJnZXQgcmV0cnkgdGltZSBvdXQiIH0sCisJeyBTSDRfUENJSU5UX01GREUsCSJtYXN0ZXIgZnVuY3Rpb24gZGlzYWJsZSBlcm9yciIgfSwKKwl7IFNINF9QQ0lJTlRfUFJUWSwJImFkZHJlc3MgcGFyaXR5IGVycm9yIiB9LAorCXsgU0g0X1BDSUlOVF9TRVJSLAkiU0VSUiIgfSwKKwl7IFNINF9QQ0lJTlRfVFdEUCwJImRhdGEgcGFyaXR5IGVycm9yIGZvciB0YXJnZXQgd3JpdGUiIH0sCisJeyBTSDRfUENJSU5UX1RSRFAsCSJQRVJSIGRldGVjdGVkIGZvciB0YXJnZXQgcmVhZCIgfSwKKwl7IFNINF9QQ0lJTlRfTVRBQlQsCSJ0YXJnZXQgYWJvcnQgZm9yIG1hc3RlciIgfSwKKwl7IFNINF9QQ0lJTlRfTU1BQlQsCSJtYXN0ZXIgYWJvcnQgZm9yIG1hc3RlciIgfSwKKwl7IFNINF9QQ0lJTlRfTVdQRCwJIm1hc3RlciB3cml0ZSBkYXRhIHBhcml0eSBlcnJvciIgfSwKKwl7IFNINF9QQ0lJTlRfTVJQRCwJIm1hc3RlciByZWFkIGRhdGEgcGFyaXR5IGVycm9yIiB9LAogfTsKIAorc3RhdGljIGlycXJldHVybl90IHNoNzc4MF9wY2lfZXJyX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gZGV2X2lkOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBjbWQ7CisJaW50IGk7CisKKwlhZGRyID0gX19yYXdfcmVhZGwoaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJQUxSKTsKKworCS8qCisJICogSGFuZGxlIHN0YXR1cyBlcnJvcnMuCisJICovCisJc3RhdHVzID0gX19yYXdfcmVhZHcoaG9zZS0+cmVnX2Jhc2UgKyBQQ0lfU1RBVFVTKTsKKwlpZiAoc3RhdHVzICYgKFBDSV9TVEFUVVNfUEFSSVRZIHwKKwkJICAgICAgUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkgfAorCQkgICAgICBQQ0lfU1RBVFVTX1NJR19UQVJHRVRfQUJPUlQgfAorCQkgICAgICBQQ0lfU1RBVFVTX1JFQ19UQVJHRVRfQUJPUlQgfAorCQkgICAgICBQQ0lfU1RBVFVTX1JFQ19NQVNURVJfQUJPUlQpKSB7CisJCWNtZCA9IHBjaWJpb3NfaGFuZGxlX3N0YXR1c19lcnJvcnMoYWRkciwgc3RhdHVzLCBob3NlKTsKKwkJaWYgKGxpa2VseShjbWQpKQorCQkJX19yYXdfd3JpdGV3KGNtZCwgaG9zZS0+cmVnX2Jhc2UgKyBQQ0lfU1RBVFVTKTsKKwl9CisKKwkvKgorCSAqIEhhbmRsZSBhcmJpdGVyIGVycm9ycy4KKwkgKi8KKwlzdGF0dXMgPSBfX3Jhd19yZWFkbChob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lBSU5UKTsKKwlmb3IgKGkgPSBjbWQgPSAwOyBpIDwgQVJSQVlfU0laRShwY2lfYXJiaXRlcl9lcnJvcnMpOyBpKyspIHsKKwkJaWYgKHN0YXR1cyAmIHBjaV9hcmJpdGVyX2Vycm9yc1tpXS5tYXNrKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiAlcywgYWRkcj0lMDhseFxuIiwKKwkJCSAgICAgICBwY2lfYXJiaXRlcl9lcnJvcnNbaV0uc3RyLCBhZGRyKTsKKwkJCWNtZCB8PSBwY2lfYXJiaXRlcl9lcnJvcnNbaV0ubWFzazsKKwkJfQorCX0KKwlfX3Jhd193cml0ZWwoY21kLCBob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lBSU5UKTsKKworCS8qCisJICogSGFuZGxlIHRoZSByZW1haW5pbmcgUENJIGVycm9ycy4KKwkgKi8KKwlzdGF0dXMgPSBfX3Jhd19yZWFkbChob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lJTlQpOworCWZvciAoaSA9IGNtZCA9IDA7IGkgPCBBUlJBWV9TSVpFKHBjaV9pbnRlcnJ1cHRfZXJyb3JzKTsgaSsrKSB7CisJCWlmIChzdGF0dXMgJiBwY2lfaW50ZXJydXB0X2Vycm9yc1tpXS5tYXNrKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiAlcywgYWRkcj0lMDhseFxuIiwKKwkJCSAgICAgICBwY2lfaW50ZXJydXB0X2Vycm9yc1tpXS5zdHIsIGFkZHIpOworCQkJY21kIHw9IHBjaV9pbnRlcnJ1cHRfZXJyb3JzW2ldLm1hc2s7CisJCX0KKwl9CisJX19yYXdfd3JpdGVsKGNtZCwgaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJSU5UKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoNzc4MF9wY2lfc2Vycl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSA9IGRldl9pZDsKKworCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IHN5c3RlbSBlcnJvciByZWNlaXZlZDogIik7CisJcGNpYmlvc19yZXBvcnRfc3RhdHVzKFBDSV9TVEFUVVNfU0lHX1NZU1RFTV9FUlJPUiwgMSk7CisJcHJpbnRrKCJcbiIpOworCisJLyogRGVhc3NlcnQgU0VSUiAqLworCV9fcmF3X3dyaXRlbChTSDRfUENJSU5UTV9TRElNLCBob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lJTlRNKTsKKworCS8qIEJhY2sgb2ZmIHRoZSBJUlEgZm9yIGF3aGlsZSAqLworCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCWhvc2UtPnNlcnJfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWjsKKwlhZGRfdGltZXIoJmhvc2UtPnNlcnJfdGltZXIpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzaDc3ODBfcGNpX3NldHVwX2lycXMoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKQoreworCWludCByZXQ7CisKKwkvKiBDbGVhciBvdXQgUENJIGFyYml0ZXIgSVJRcyAqLworCV9fcmF3X3dyaXRlbCgwLCBob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lBSU5UKTsKKworCS8qIENsZWFyIGFsbCBlcnJvciBjb25kaXRpb25zICovCisJX19yYXdfd3JpdGV3KFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZICB8IFwKKwkJICAgICBQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IgfCBcCisJCSAgICAgUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUIHwgXAorCQkgICAgIFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCB8IFwKKwkJICAgICBQQ0lfU1RBVFVTX1NJR19UQVJHRVRfQUJPUlQgfCBcCisJCSAgICAgUENJX1NUQVRVU19QQVJJVFksIGhvc2UtPnJlZ19iYXNlICsgUENJX1NUQVRVUyk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShob3NlLT5zZXJyX2lycSwgc2g3NzgwX3BjaV9zZXJyX2lycSwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgIlBDSSBTRVJSIGludGVycnVwdCIsIGhvc2UpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBGYWlsZWQgaG9va2luZyBTRVJSIElSUVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBUaGUgUENJIEVSUiBJUlEgbmVlZHMgdG8gYmUgSVJRRl9TSEFSRUQgc2luY2UgYWxsIG9mIHRoZSBwb3dlcgorCSAqIGRvd24gSVJRIHZlY3RvcnMgYXJlIHJvdXRlZCB0aHJvdWdoIHRoZSBFUlIgSVJRIHZlY3Rvci4gV2UKKwkgKiBvbmx5IHJlcXVlc3RfaXJxKCkgb25jZSBhcyB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIG1hc2tpbmcKKwkgKiBzb3VyY2UgZm9yIG11bHRpcGxlIGV2ZW50cy4KKwkgKi8KKwlyZXQgPSByZXF1ZXN0X2lycShob3NlLT5lcnJfaXJxLCBzaDc3ODBfcGNpX2Vycl9pcnEsIElSUUZfU0hBUkVELAorCQkJICAiUENJIEVSUiBpbnRlcnJ1cHQiLCBob3NlKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlmcmVlX2lycShob3NlLT5zZXJyX2lycSwgaG9zZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogVW5tYXNrIGFsbCBvZiB0aGUgYXJiaXRlciBJUlFzLiAqLworCV9fcmF3X3dyaXRlbChTSDRfUENJQUlOVF9NQktOIHwgU0g0X1BDSUFJTlRfVEJUTyB8IFNINF9QQ0lBSU5UX01CVE8gfCBcCisJCSAgICAgU0g0X1BDSUFJTlRfVEFCVCB8IFNINF9QQ0lBSU5UX01BQlQgfCBTSDRfUENJQUlOVF9SRFBFIHwgXAorCQkgICAgIFNINF9QQ0lBSU5UX1dEUEUsIGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUFJTlRNKTsKKworCS8qIFVubWFzayBhbGwgb2YgdGhlIFBDSSBJUlFzICovCisJX19yYXdfd3JpdGVsKFNINF9QQ0lJTlRNX1RUQURJTSAgfCBTSDRfUENJSU5UTV9UTVRPSU0gIHwgXAorCQkgICAgIFNINF9QQ0lJTlRNX01ERUlNICAgfCBTSDRfUENJSU5UTV9BUEVESU0gIHwgXAorCQkgICAgIFNINF9QQ0lJTlRNX1NESU0gICAgfCBTSDRfUENJSU5UTV9EUEVJVFdNIHwgXAorCQkgICAgIFNINF9QQ0lJTlRNX1BFRElUUk0gfCBTSDRfUENJSU5UTV9UQURJTU0gIHwgXAorCQkgICAgIFNINF9QQ0lJTlRNX01BRElNTSAgfCBTSDRfUENJSU5UTV9NV1BESU0gIHwgXAorCQkgICAgIFNINF9QQ0lJTlRNX01SRFBFSU0sIGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUlOVE0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzaDc3ODBfcGNpX3RlYXJkb3duX2lycXMoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKQoreworCWZyZWVfaXJxKGhvc2UtPmVycl9pcnEsIGhvc2UpOworCWZyZWVfaXJxKGhvc2UtPnNlcnJfaXJxLCBob3NlKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNoNzc4MF9wY2k2Nl9pbml0KHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKCFwY2lfaXNfNjZtaHpfY2FwYWJsZShob3NlLCAwLCAwKSkKKwkJcmV0dXJuOworCisJLyogRW5hYmxlIHJlZ2lzdGVyIGFjY2VzcyAqLworCXRtcCA9IF9fcmF3X3JlYWRsKGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUNSKTsKKwl0bXAgfD0gU0g0X1BDSUNSX1BSRUZJWDsKKwlfX3Jhd193cml0ZWwodG1wLCBob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lDUik7CisKKwkvKiBFbmFibGUgNjZNSHogb3BlcmF0aW9uICovCisJdG1wID0gX19yYXdfcmVhZHcoaG9zZS0+cmVnX2Jhc2UgKyBQQ0lfU1RBVFVTKTsKKwl0bXAgfD0gUENJX1NUQVRVU182Nk1IWjsKKwlfX3Jhd193cml0ZXcodG1wLCBob3NlLT5yZWdfYmFzZSArIFBDSV9TVEFUVVMpOworCisJLyogRG9uZSAqLworCXRtcCA9IF9fcmF3X3JlYWRsKGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUNSKTsKKwl0bXAgfD0gU0g0X1BDSUNSX1BSRUZJWCB8IFNINF9QQ0lDUl9DRklOOworCV9fcmF3X3dyaXRlbCh0bXAsIGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUNSKTsKK30KKwogc3RhdGljIGludCBfX2luaXQgc2g3NzgwX3BjaV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHBjaV9jaGFubmVsICpjaGFuID0gJnNoNzc4MF9wY2lfY29udHJvbGxlcjsKKwlwaHlzX2FkZHJfdCBtZW1waHlzOworCXNpemVfdCBtZW1zaXplOwogCXVuc2lnbmVkIGludCBpZDsKLQljb25zdCBjaGFyICp0eXBlID0gTlVMTDsKLQlpbnQgcmV0OwotCXUzMiB3b3JkOworCWNvbnN0IGNoYXIgKnR5cGU7CisJaW50IHJldCwgaTsKIAogCXByaW50ayhLRVJOX05PVElDRSAiUENJOiBTdGFydGluZyBpbnRpYWxpemF0aW9uLlxuIik7CiAKQEAgLTY1LDE3ICsyNTMsMjggQEAKIAkvKiBFbmFibGUgQ1BVIGFjY2VzcyB0byB0aGUgUENJQyByZWdpc3RlcnMuICovCiAJX19yYXdfd3JpdGVsKFBDSUVDUl9FTkJMLCBQQ0lFQ1IpOwogCi0JaWQgPSBfX3Jhd19yZWFkdyhjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lWSUQpOwotCWlmIChpZCAhPSBTSDc3ODBfVkVORE9SX0lEKSB7CisJLyogUmVzZXQgKi8KKwlfX3Jhd193cml0ZWwoU0g0X1BDSUNSX1BSRUZJWCB8IFNINF9QQ0lDUl9QUlNULAorCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUNSKTsKKworCS8qCisJICogV2FpdCBmb3IgaXQgdG8gY29tZSBiYWNrIHVwLiBUaGUgc3BlYyBzYXlzIHRvIGFsbG93IGZvciB1cCB0bworCSAqIDEgc2Vjb25kIGFmdGVyIHRvZ2dsaW5nIHRoZSByZXNldCBwaW4sIGJ1dCBpbiBwcmFjdGljZSAxMDBtcworCSAqIGlzIG1vcmUgdGhhbiBlbm91Z2guCisJICovCisJbWRlbGF5KDEwMCk7CisKKwlpZCA9IF9fcmF3X3JlYWR3KGNoYW4tPnJlZ19iYXNlICsgUENJX1ZFTkRPUl9JRCk7CisJaWYgKGlkICE9IFBDSV9WRU5ET1JfSURfUkVORVNBUykgewogCQlwcmludGsoS0VSTl9FUlIgIlBDSTogVW5rbm93biB2ZW5kb3IgSUQgMHglMDR4LlxuIiwgaWQpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZCA9IF9fcmF3X3JlYWR3KGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSURJRCk7Ci0JdHlwZSA9IChpZCA9PSBTSDc3NjNfREVWSUNFX0lEKQk/ICJTSDc3NjMiIDoKLQkgICAgICAgKGlkID09IFNINzc4MF9ERVZJQ0VfSUQpID8gIlNINzc4MCIgOgotCSAgICAgICAoaWQgPT0gU0g3NzgxX0RFVklDRV9JRCkgPyAiU0g3NzgxIiA6Ci0JICAgICAgIChpZCA9PSBTSDc3ODVfREVWSUNFX0lEKSA/ICJTSDc3ODUiIDoKKwlpZCA9IF9fcmF3X3JlYWR3KGNoYW4tPnJlZ19iYXNlICsgUENJX0RFVklDRV9JRCk7CisJdHlwZSA9IChpZCA9PSBQQ0lfREVWSUNFX0lEX1JFTkVTQVNfU0g3NzYzKSA/ICJTSDc3NjMiIDoKKwkgICAgICAgKGlkID09IFBDSV9ERVZJQ0VfSURfUkVORVNBU19TSDc3ODApID8gIlNINzc4MCIgOgorCSAgICAgICAoaWQgPT0gUENJX0RFVklDRV9JRF9SRU5FU0FTX1NINzc4MSkgPyAiU0g3NzgxIiA6CisJICAgICAgIChpZCA9PSBQQ0lfREVWSUNFX0lEX1JFTkVTQVNfU0g3Nzg1KSA/ICJTSDc3ODUiIDoKIAkJCQkJICBOVUxMOwogCWlmICh1bmxpa2VseSghdHlwZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IEZvdW5kIGFuIHVuc3VwcG9ydGVkIFJlbmVzYXMgaG9zdCAiCkBAIC04NSw2MiArMjg0LDExOSBAQAogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJQQ0k6IEZvdW5kIGEgUmVuZXNhcyAlcyBob3N0ICIKIAkgICAgICAgImNvbnRyb2xsZXIsIHJldmlzaW9uICVkLlxuIiwgdHlwZSwKLQkgICAgICAgX19yYXdfcmVhZGIoY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJUklEKSk7CisJICAgICAgIF9fcmF3X3JlYWRiKGNoYW4tPnJlZ19iYXNlICsgUENJX1JFVklTSU9OX0lEKSk7CiAKLQlpZiAoKHJldCA9IHNoNF9wY2lfY2hlY2tfZGlyZWN0KGNoYW4pKSAhPSAwKQorCS8qCisJICogTm93IHRocm93IGl0IGluIHRvIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uIG1vZGUgYW5kCisJICogc3RhcnQgdGhlIHJlYWwgd29yay4KKwkgKi8KKwlfX3Jhd193cml0ZWwoU0g0X1BDSUNSX1BSRUZJWCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDRfUENJQ1IpOworCisJbWVtcGh5cyA9IF9fcGEobWVtb3J5X3N0YXJ0KTsKKwltZW1zaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKG1lbW9yeV9lbmQgLSBtZW1vcnlfc3RhcnQpOworCisJLyoKKwkgKiBJZiB0aGVyZSdzIG1vcmUgdGhhbiA1MTJNQiBvZiBtZW1vcnksIHdlIG5lZWQgdG8gcm9sbCBvdmVyIHRvCisJICogTEFSMS9MU1IxLgorCSAqLworCWlmIChtZW1zaXplID4gU1pfNTEyTSkgeworCQlfX3Jhd193cml0ZWwobWVtcGh5cyArIFNaXzUxMk0sIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUxBUjEpOworCQlfX3Jhd193cml0ZWwoKCgobWVtc2l6ZSAtIFNaXzUxMk0pIC0gU1pfMU0pICYgMHgxZmYwMDAwMCkgfCAxLAorCQkJICAgICBjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lMU1IxKTsKKwkJbWVtc2l6ZSA9IFNaXzUxMk07CisJfSBlbHNlIHsKKwkJLyoKKwkJICogT3RoZXJ3aXNlIGp1c3QgemVybyBpdCBvdXQgYW5kIGRpc2FibGUgaXQuCisJCSAqLworCQlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDRfUENJTEFSMSk7CisJCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lMU1IxKTsKKwl9CisKKwkvKgorCSAqIExBUjAvTFNSMCBjb3ZlcnMgdXAgdG8gdGhlIGZpcnN0IDUxMk1CLCB3aGljaCBpcyBlbm91Z2ggdG8KKwkgKiBjb3ZlciBhbGwgb2YgbG93bWVtIG9uIG1vc3QgcGxhdGZvcm1zLgorCSAqLworCV9fcmF3X3dyaXRlbChtZW1waHlzLCBjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lMQVIwKTsKKwlfX3Jhd193cml0ZWwoKChtZW1zaXplIC0gU1pfMU0pICYgMHgxZmYwMDAwMCkgfCAxLAorCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUxTUjApOworCisJLyoKKwkgKiBIb29rIHVwIHRoZSBFUlIgYW5kIFNFUlIgSVJRcy4KKwkgKi8KKwlyZXQgPSBzaDc3ODBfcGNpX3NldHVwX2lycXMoY2hhbik7CisJaWYgKHVubGlrZWx5KHJldCkpCiAJCXJldHVybiByZXQ7CiAKIAkvKgotCSAqIFNldCB0aGUgY2xhc3MgYW5kIHN1Yi1jbGFzcyBjb2Rlcy4KKwkgKiBEaXNhYmxlIHRoZSBjYWNoZSBzbm9vcCBjb250cm9sbGVyIGZvciBub24tY29oZXJlbnQgRE1BLgogCSAqLwotCV9fcmF3X3dyaXRlYihQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgPj4gOCwKLQkJICAgICBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lCQ0MpOwotCV9fcmF3X3dyaXRlYihQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgJiAweGZmLAotCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSVNVQik7CisJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSUNTQ1IwKTsKKwlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJQ1NBUjApOworCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lDU0NSMSk7CisJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSUNTQVIxKTsKIAogCS8qCi0JICogU2V0IElPIGFuZCBNZW0gd2luZG93cyB0byBsb2NhbCBhZGRyZXNzCi0JICogTWFrZSBQQ0kgYW5kIGxvY2FsIGFkZHJlc3MgdGhlIHNhbWUgZm9yIGVhc3kgMSB0byAxIG1hcHBpbmcKKwkgKiBTZXR1cCB0aGUgbWVtb3J5IEJBUnMKIAkgKi8KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIHNoNzc4MF9wY2lfbWFwLndpbmRvdzAuc2l6ZSAtIDB4ZmZmZmYsIFNINF9QQ0lMU1IwKTsKLQkvKiBTZXQgdGhlIHZhbHVlcyBvbiB3aW5kb3cgMCBQQ0kgY29uZmlnIHJlZ2lzdGVycyAqLwotCXBjaV93cml0ZV9yZWcoY2hhbiwgc2g3NzgwX3BjaV9tYXAud2luZG93MC5iYXNlLCBTSDRfUENJTEFSMCk7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCBzaDc3ODBfcGNpX21hcC53aW5kb3cwLmJhc2UsIFNINzc4MF9QQ0lNQkFSMCk7CisJZm9yIChpID0gMTsgaSA8IGNoYW4tPm5yX3Jlc291cmNlczsgaSsrKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gY2hhbi0+cmVzb3VyY2VzICsgaTsKKwkJcmVzb3VyY2Vfc2l6ZV90IHNpemU7CiAKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDM4MGYsIFNINF9QQ0lBSU5UTSk7CisJCWlmICh1bmxpa2VseShyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykpCisJCQljb250aW51ZTsKIAotCS8qIFNldCB1cCBzdGFuZGFyZCBQQ0kgY29uZmlnIHJlZ2lzdGVycyAqLwotCV9fcmF3X3dyaXRldygweEZCMDAsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSVNUQVRVUyk7Ci0JX19yYXdfd3JpdGV3KDB4MDA0NywgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJQ01EKTsKLQlfX3Jhd193cml0ZXcoMHgxOTEyLCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lTVklEKTsKLQlfX3Jhd193cml0ZXcoMHgwMDAxLCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lTSUQpOworCQkvKgorCQkgKiBNYWtlIHN1cmUgd2UncmUgaW4gdGhlIHJpZ2h0IHBoeXNpY2FsIGFkZHJlc3NpbmcgbW9kZQorCQkgKiBmb3IgZGVhbGluZyB3aXRoIHRoZSByZXNvdXJjZS4KKwkJICovCisJCWlmICgocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNXzMyQklUKSAmJiBfX2luXzI5Yml0X21vZGUoKSkgeworCQkJY2hhbi0+bnJfcmVzb3VyY2VzLS07CisJCQljb250aW51ZTsKKwkJfQogCi0JX19yYXdfd3JpdGViKDB4MDAsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSVBJRik7CisJCXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CiAKLQkvKiBBcHBseSBhbnkgbGFzdC1taW51dGUgUENJQyBmaXh1cHMgKi8KLQlwY2lfZml4dXBfcGNpYyhjaGFuKTsKKwkJLyoKKwkJICogVGhlIE1CTVIgbWFzayBpcyBjYWxjdWxhdGVkIGluIHVuaXRzIG9mIDI1NmtCLCB3aGljaAorCQkgKiBrZWVwcyB0aGluZ3MgcHJldHR5IHNpbXBsZS4KKwkJICovCisJCV9fcmF3X3dyaXRlbCgoKHJvdW5kdXBfcG93X29mX3R3byhzaXplKSAvIFNaXzI1NkspIC0gMSkgPDwgMTgsCisJCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSU1CTVIoaSAtIDEpKTsKKwkJX19yYXdfd3JpdGVsKHJlcy0+c3RhcnQsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSU1CUihpIC0gMSkpOworCX0KIAotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHhmZDAwMDAwMCwgU0g3NzgwX1BDSU1CUjApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMGZjMDAwMCwgU0g3NzgwX1BDSU1CTVIwKTsKKwkvKgorCSAqIEFuZCBJL08uCisJICovCisJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgUENJX0JBU0VfQUREUkVTU18wKTsKKwlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJSU9CUik7CisJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSUlPQk1SKTsKIAotI2lmZGVmIENPTkZJR18zMkJJVAotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHhjMDAwMDAwMCwgU0g3NzgwX1BDSU1CUjIpOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgyMDAwMDAwMCAtIFNINzc4MF9QQ0lfSU9fU0laRSwgU0g3NzgwX1BDSU1CTVIyKTsKLSNlbmRpZgorCV9fcmF3X3dyaXRldyhQQ0lfQ09NTUFORF9TRVJSICAgfCBQQ0lfQ09NTUFORF9XQUlUICAgfCBcCisJCSAgICAgUENJX0NPTU1BTkRfUEFSSVRZIHwgUENJX0NPTU1BTkRfTUFTVEVSIHwgXAorCQkgICAgIFBDSV9DT01NQU5EX01FTU9SWSwgY2hhbi0+cmVnX2Jhc2UgKyBQQ0lfQ09NTUFORCk7CiAKLQkvKiBTZXQgSU9CUiBmb3Igd2luZG93cyBjb250YWluaW5nIGFyZWEgc3BlY2lmaWVkIGluIHBjaS5oICovCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCBjaGFuLT5pb19yZXNvdXJjZS0+c3RhcnQgJiB+KFNINzc4MF9QQ0lfSU9fU0laRS0xKSwKLQkJICAgICAgU0g3NzgwX1BDSUlPQlIpOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgKChTSDc3ODBfUENJX0lPX1NJWkUtMSkgJiAoNzw8MTgpKSwKLQkJICAgICAgU0g3NzgwX1BDSUlPQk1SKTsKKwkvKgorCSAqIEluaXRpYWxpemF0aW9uIG1vZGUgY29tcGxldGUsIHJlbGVhc2UgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgYW5kCisJICogZW5hYmxlIHJvdW5kIHJvYmluIG1vZGUgdG8gc3RvcCBkZXZpY2Ugb3ZlcnJ1bnMvc3RhcnZhdGlvbi4KKwkgKi8KKwlfX3Jhd193cml0ZWwoU0g0X1BDSUNSX1BSRUZJWCB8IFNINF9QQ0lDUl9DRklOIHwgU0g0X1BDSUNSX0ZUTywKKwkJICAgICBjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lDUik7CiAKLQkvKiBTSDc3ODAgaW5pdCBkb25lLCBzZXQgY2VudHJhbCBmdW5jdGlvbiBpbml0IGNvbXBsZXRlICovCi0JLyogdXNlIHJvdW5kIHJvYmluIG1vZGUgdG8gc3RvcCBhIGRldmljZSBzdGFydmluZy9vdmVycnVuaW5nICovCi0Jd29yZCA9IFNINF9QQ0lDUl9QUkVGSVggfCBTSDRfUENJQ1JfQ0ZJTiB8IFNINF9QQ0lDUl9GVE87Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCB3b3JkLCBTSDRfUENJQ1IpOworCXJldCA9IHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKGNoYW4pOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGVycjsKIAotCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKGNoYW4pOworCXNoNzc4MF9wY2k2Nl9pbml0KGNoYW4pOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJQQ0k6IFJ1bm5pbmcgYXQgJWRNSHouXG4iLAorCSAgICAgICAoX19yYXdfcmVhZHcoY2hhbi0+cmVnX2Jhc2UgKyBQQ0lfU1RBVFVTKSAmIFBDSV9TVEFUVVNfNjZNSFopID8KKwkgICAgICAgNjYgOiAzMyk7CiAKIAlyZXR1cm4gMDsKKworZXJyOgorCXNoNzc4MF9wY2lfdGVhcmRvd25faXJxcyhjaGFuKTsKKwlyZXR1cm4gcmV0OwogfQogYXJjaF9pbml0Y2FsbChzaDc3ODBfcGNpX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmggYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuaAppbmRleCA0YTUyNDc4Li4yMDVkY2JlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuaAorKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuaApAQCAtMTIsMTIgKzEyLDExIEBACiAjaWZuZGVmIF9QQ0lfU0g3NzgwX0hfCiAjZGVmaW5lIF9QQ0lfU0g3NzgwX0hfCiAKLS8qIFBsYXRmb3JtIFNwZWNpZmljIFZhbHVlcyAqLwotI2RlZmluZSBTSDc3ODBfVkVORE9SX0lECTB4MTkxMgotI2RlZmluZSBTSDc3ODFfREVWSUNFX0lECTB4MDAwMQotI2RlZmluZSBTSDc3ODBfREVWSUNFX0lECTB4MDAwMgotI2RlZmluZSBTSDc3NjNfREVWSUNFX0lECTB4MDAwNAotI2RlZmluZSBTSDc3ODVfREVWSUNFX0lECTB4MDAwNworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1JFTkVTQVMJCTB4MTkxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JFTkVTQVNfU0g3NzgxCTB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JFTkVTQVNfU0g3NzgwCTB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JFTkVTQVNfU0g3NzYzCTB4MDAwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JFTkVTQVNfU0g3Nzg1CTB4MDAwNwogCiAvKiBTSDc3ODAgQ29udHJvbCBSZWdpc3RlcnMgKi8KICNkZWZpbmUJUENJRUNSCQkJMHhGRTAwMDAwOApAQCAtMjcsNDQgKzI2LDkgQEAKICNkZWZpbmUgU0g3NzgwX1BDSV9DT05GSUdfQkFTRQkweEZEMDAwMDAwCS8qIENvbmZpZyBzcGFjZSBiYXNlIGFkZHIgKi8KICNkZWZpbmUgU0g3NzgwX1BDSV9DT05GSUdfU0laRQkweDAxMDAwMDAwCS8qIENvbmZpZyBzcGFjZSBzaXplICovCiAKLSNkZWZpbmUgU0g3NzgwX1BDSV9NRU1PUllfQkFTRQkweEZEMDAwMDAwCS8qIE1lbW9yeSBzcGFjZSBiYXNlIGFkZHIgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSV9NRU1fU0laRQkweDAxMDAwMDAwCS8qIFNpemUgb2YgTWVtb3J5IHdpbmRvdyAqLwotCi0jZGVmaW5lIFNINzc4MF9QQ0lfSU9fQkFTRQkweEZFMjAwMDAwCS8qIElPIHNwYWNlIGJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBTSDc3ODBfUENJX0lPX1NJWkUJMHgwMDQwMDAwMAkvKiBTaXplIG9mIElPIHdpbmRvdyAqLwotCiAjZGVmaW5lIFNINzc4MF9QQ0lSRUdfQkFTRQkweEZFMDQwMDAwCS8qIFBDSSByZWdzIGJhc2UgYWRkcmVzcyAqLwogCiAvKiBTSDc3ODAgUENJIENvbmZpZyBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSVZJRAkJMHgwMDAJCS8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBTSDc3ODBfUENJRElECQkweDAwMgkJLyogRGV2aWNlIElEICovCi0jZGVmaW5lIFNINzc4MF9QQ0lDTUQJCTB4MDA0CQkvKiBDb21tYW5kICovCi0jZGVmaW5lIFNINzc4MF9QQ0lTVEFUVVMJMHgwMDYJCS8qIFN0YXR1cyAqLwotI2RlZmluZSBTSDc3ODBfUENJUklECQkweDAwOAkJLyogUmV2aXNpb24gSUQgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSVBJRgkJMHgwMDkJCS8qIFByb2dyYW0gSW50ZXJmYWNlICovCi0jZGVmaW5lIFNINzc4MF9QQ0lTVUIJCTB4MDBhCQkvKiBTdWIgY2xhc3MgY29kZSAqLwotI2RlZmluZSBTSDc3ODBfUENJQkNDCQkweDAwYgkJLyogQmFzZSBjbGFzcyBjb2RlICovCi0jZGVmaW5lIFNINzc4MF9QQ0lDTFMJCTB4MDBjCQkvKiBDYWNoZSBsaW5lIHNpemUgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUxUTQkJMHgwMGQJCS8qIGxhdGVuY3kgdGltZXIgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUhEUgkJMHgwMGUJCS8qIEhlYWRlciB0eXBlICovCi0jZGVmaW5lIFNINzc4MF9QQ0lCSVNUCQkweDAwZgkJLyogQklTVCAqLwotI2RlZmluZSBTSDc3ODBfUENJSUJBUgkJMHgwMTAJCS8qIElPIEJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBTSDc3ODBfUENJTUJBUjAJCTB4MDE0CQkvKiBNZW1vcnkgYmFzZSBhZGRyZXNzMCAqLwotI2RlZmluZSBTSDc3ODBfUENJTUJBUjEJCTB4MDE4CQkvKiBNZW1vcnkgYmFzZSBhZGRyZXNzMSAqLwotI2RlZmluZSBTSDc3ODBfUENJU1ZJRAkJMHgwMmMJCS8qIFN1YiBzeXN0ZW0gdmVuZG9yIElEICovCi0jZGVmaW5lIFNINzc4MF9QQ0lTSUQJCTB4MDJlCQkvKiBTdWIgc3lzdGVtIElEICovCi0jZGVmaW5lIFNINzc4MF9QQ0lDUAkJMHgwMzQKLSNkZWZpbmUgU0g3NzgwX1BDSUlOVExJTkUJMHgwM2MJCS8qIEludGVycnVwdCBsaW5lICovCi0jZGVmaW5lIFNINzc4MF9QQ0lJTlRQSU4JMHgwM2QJCS8qIEludGVycnVwdCBwaW4gKi8KLSNkZWZpbmUgU0g3NzgwX1BDSU1JTkdOVAkweDAzZQkJLyogTWludW11bSBncmFuZCAqLwotI2RlZmluZSBTSDc3ODBfUENJTUFYTEFUCTB4MDNmCQkvKiBNYXhtdW0gbGF0ZW5jeSAqLwotI2RlZmluZSBTSDc3ODBfUENJQ0lECQkweDA0MAotI2RlZmluZSBTSDc3ODBfUENJTklQCQkweDA0MQotI2RlZmluZSBTSDc3ODBfUENJUE1DCQkweDA0MgotI2RlZmluZSBTSDc3ODBfUENJUE1DU1IJCTB4MDQ0Ci0jZGVmaW5lIFNINzc4MF9QQ0lQTUNTUl9CU0UJMHgwNDYKLSNkZWZpbmUgU0g3NzgwX1BDSUNERAkJMHgwNDcKLQogI2RlZmluZSBTSDc3ODBfUENJSVIJCTB4MTE0CQkvKiBQQ0kgSW50ZXJydXB0IFJlZ2lzdGVyICovCiAjZGVmaW5lIFNINzc4MF9QQ0lJTVIJCTB4MTE4CQkvKiBQQ0kgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU0g3NzgwX1BDSUFJUgkJMHgxMUMJCS8qIEVycm9yIEFkZHJlc3MgUmVnaXN0ZXIgKi8KQEAgLTc2LDEwICs0MCw4IEBACiAjZGVmaW5lIFNINzc4MF9QQ0lQSU5UCQkweDFDQwkJLyogUG93ZXIgTWdtbnQgSW50LiBSZWdpc3RlciAqLwogI2RlZmluZSBTSDc3ODBfUENJUElOVE0JCTB4MUQwCQkvKiBQb3dlciBNZ21udCBNYXNrIFJlZ2lzdGVyICovCiAKLSNkZWZpbmUgU0g3NzgwX1BDSU1CUjAJCTB4MUUwCi0jZGVmaW5lIFNINzc4MF9QQ0lNQk1SMAkJMHgxRTQKLSNkZWZpbmUgU0g3NzgwX1BDSU1CUjIJCTB4MUYwCi0jZGVmaW5lIFNINzc4MF9QQ0lNQk1SMgkJMHgxRjQKKyNkZWZpbmUgU0g3NzgwX1BDSU1CUih4KQkoMHgxRTAgKyAoKHgpICogOCkpCisjZGVmaW5lIFNINzc4MF9QQ0lNQk1SKHgpCSgweDFFNCArICgoeCkgKiA4KSkKICNkZWZpbmUgU0g3NzgwX1BDSUlPQlIJCTB4MUY4CiAjZGVmaW5lIFNINzc4MF9QQ0lJT0JNUgkJMHgxRkMKICNkZWZpbmUgU0g3NzgwX1BDSUNTQ1IwCQkweDIxMAkJLyogQ2FjaGUgU25vb3AxIENudC4gUmVnaXN0ZXIgKi8KQEAgLTg3LDE2ICs0OSw0IEBACiAjZGVmaW5lIFNINzc4MF9QQ0lDU0FSMAkJMHgyMTgJLyogQ2FjaGUgU25vb3AxIEFkZHIuIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNINzc4MF9QQ0lDU0FSMQkJMHgyMUMJLyogQ2FjaGUgU25vb3AyIEFkZHIuIFJlZ2lzdGVyICovCiAKLS8qIEdlbmVyYWwgTWVtb3J5IENvbmZpZyBBZGRyZXNzZXMgKi8KLSNkZWZpbmUgU0g3NzgwX0NTMF9CQVNFX0FERFIJMHgwCi0jZGVmaW5lIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUJMHgwNDAwMDAwMAotI2RlZmluZSBTSDc3ODBfQ1MxX0JBU0VfQUREUgkoU0g3NzgwX0NTMF9CQVNFX0FERFIgKyBTSDc3ODBfTUVNX1JFR0lPTl9TSVpFKQotI2RlZmluZSBTSDc3ODBfQ1MyX0JBU0VfQUREUgkoU0g3NzgwX0NTMV9CQVNFX0FERFIgKyBTSDc3ODBfTUVNX1JFR0lPTl9TSVpFKQotI2RlZmluZSBTSDc3ODBfQ1MzX0JBU0VfQUREUgkoU0g3NzgwX0NTMl9CQVNFX0FERFIgKyBTSDc3ODBfTUVNX1JFR0lPTl9TSVpFKQotI2RlZmluZSBTSDc3ODBfQ1M0X0JBU0VfQUREUgkoU0g3NzgwX0NTM19CQVNFX0FERFIgKyBTSDc3ODBfTUVNX1JFR0lPTl9TSVpFKQotI2RlZmluZSBTSDc3ODBfQ1M1X0JBU0VfQUREUgkoU0g3NzgwX0NTNF9CQVNFX0FERFIgKyBTSDc3ODBfTUVNX1JFR0lPTl9TSVpFKQotI2RlZmluZSBTSDc3ODBfQ1M2X0JBU0VfQUREUgkoU0g3NzgwX0NTNV9CQVNFX0FERFIgKyBTSDc3ODBfTUVNX1JFR0lPTl9TSVpFKQotCi0jZGVmaW5lIFNINzc4MF8zMkJJVF9ERFJfQkFTRV9BRERSCTB4NDAwMDAwMDAKLQogI2VuZGlmIC8qIF9QQ0lfU0g3NzgwX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCBjNDgxZGY2Li45NTNhZjEzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTMzLDE1ICszMywyMiBAQAogc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaWJpb3Nfc2NhbmJ1cyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpCiB7CiAJc3RhdGljIGludCBuZXh0X2J1c25vOworCXN0YXRpYyBpbnQgbmVlZF9kb21haW5faW5mbzsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwogCiAJYnVzID0gcGNpX3NjYW5fYnVzKG5leHRfYnVzbm8sIGhvc2UtPnBjaV9vcHMsIGhvc2UpOworCWhvc2UtPmJ1cyA9IGJ1czsKKworCW5lZWRfZG9tYWluX2luZm8gPSBuZWVkX2RvbWFpbl9pbmZvIHx8IGhvc2UtPmluZGV4OworCWhvc2UtPm5lZWRfZG9tYWluX2luZm8gPSBuZWVkX2RvbWFpbl9pbmZvOwogCWlmIChidXMpIHsKIAkJbmV4dF9idXNubyA9IGJ1cy0+c3Vib3JkaW5hdGUgKyAxOwogCQkvKiBEb24ndCBhbGxvdyA4LWJpdCBidXMgbnVtYmVyIG92ZXJmbG93IGluc2lkZSB0aGUgaG9zZSAtCiAJCSAgIHJlc2VydmUgc29tZSBzcGFjZSBmb3IgYnJpZGdlcy4gKi8KLQkJaWYgKG5leHRfYnVzbm8gPiAyMjQpCisJCWlmIChuZXh0X2J1c25vID4gMjI0KSB7CiAJCQluZXh0X2J1c25vID0gMDsKKwkJCW5lZWRfZG9tYWluX2luZm8gPSAxOworCQl9CiAKIAkJcGNpX2J1c19zaXplX2JyaWRnZXMoYnVzKTsKIAkJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cyk7CkBAIC01MSwxMCArNTgsMjEgQEAKIAogc3RhdGljIERFRklORV9NVVRFWChwY2lfc2Nhbl9tdXRleCk7CiAKLXZvaWQgX19kZXZpbml0IHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSkKK2ludCBfX2RldmluaXQgcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKQogewotCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCBob3NlLT5tZW1fcmVzb3VyY2UpOwotCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgaG9zZS0+aW9fcmVzb3VyY2UpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGhvc2UtPm5yX3Jlc291cmNlczsgaSsrKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gaG9zZS0+cmVzb3VyY2VzICsgaTsKKworCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKKwkJCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsIHJlcykgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9IGVsc2UgeworCQkJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCByZXMpIDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCX0KIAogCSpob3NlX3RhaWwgPSBob3NlOwogCWhvc2VfdGFpbCA9ICZob3NlLT5uZXh0OwpAQCAtNjgsNiArODYsMTEgQEAKIAl9CiAKIAkvKgorCSAqIFNldHVwIHRoZSBFUlIvUEVSUiBhbmQgU0VSUiB0aW1lcnMsIGlmIGF2YWlsYWJsZS4KKwkgKi8KKwlwY2liaW9zX2VuYWJsZV90aW1lcnMoaG9zZSk7CisKKwkvKgogCSAqIFNjYW4gdGhlIGJ1cyBpZiBpdCBpcyByZWdpc3RlciBhZnRlciB0aGUgUENJIHN1YnN5c3RlbQogCSAqIGluaXRpYWxpemF0aW9uLgogCSAqLwpAQCAtNzYsNiArOTksMTUgQEAKIAkJcGNpYmlvc19zY2FuYnVzKGhvc2UpOwogCQltdXRleF91bmxvY2soJnBjaV9zY2FuX211dGV4KTsKIAl9CisKKwlyZXR1cm4gMDsKKworb3V0OgorCWZvciAoLS1pOyBpID49IDA7IGktLSkKKwkJcmVsZWFzZV9yZXNvdXJjZSgmaG9zZS0+cmVzb3VyY2VzW2ldKTsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIlNraXBwaW5nIFBDSSBidXMgc2NhbiBkdWUgdG8gcmVzb3VyY2UgY29uZmxpY3RcbiIpOworCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgcGNpYmlvc19pbml0KHZvaWQpCkBAIC0xMjcsMTEgKzE1OSwxMyBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBidXMtPnNlbGY7CiAJc3RydWN0IGxpc3RfaGVhZCAqbG47Ci0Jc3RydWN0IHBjaV9jaGFubmVsICpjaGFuID0gYnVzLT5zeXNkYXRhOworCXN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSA9IGJ1cy0+c3lzZGF0YTsKIAogCWlmICghZGV2KSB7Ci0JCWJ1cy0+cmVzb3VyY2VbMF0gPSBjaGFuLT5pb19yZXNvdXJjZTsKLQkJYnVzLT5yZXNvdXJjZVsxXSA9IGNoYW4tPm1lbV9yZXNvdXJjZTsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGhvc2UtPm5yX3Jlc291cmNlczsgaSsrKQorCQkJYnVzLT5yZXNvdXJjZVtpXSA9IGhvc2UtPnJlc291cmNlcyArIGk7CiAJfQogCiAJZm9yIChsbiA9IGJ1cy0+ZGV2aWNlcy5uZXh0OyBsbiAhPSAmYnVzLT5kZXZpY2VzOyBsbiA9IGxuLT5uZXh0KSB7CkBAIC0xNDgsMzQgKzE4MiwyOSBAQAogICogYWRkcmVzc2VzIHRvIGJlIGFsbG9jYXRlZCBpbiB0aGUgMHgwMDAtMHgwZmYgcmVnaW9uCiAgKiBtb2R1bG8gMHg0MDAuCiAgKi8KLXZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQorcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4gPSBkZXYtPnN5c2RhdGE7CisJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gZGV2LT5zeXNkYXRhOwogCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJaWYgKHN0YXJ0IDwgUENJQklPU19NSU5fSU8gKyBjaGFuLT5pb19yZXNvdXJjZS0+c3RhcnQpCi0JCQlzdGFydCA9IFBDSUJJT1NfTUlOX0lPICsgY2hhbi0+aW9fcmVzb3VyY2UtPnN0YXJ0OworCQlpZiAoc3RhcnQgPCBQQ0lCSU9TX01JTl9JTyArIGhvc2UtPnJlc291cmNlc1swXS5zdGFydCkKKwkJCXN0YXJ0ID0gUENJQklPU19NSU5fSU8gKyBob3NlLT5yZXNvdXJjZXNbMF0uc3RhcnQ7CiAKIAkJLyoKICAgICAgICAgICAgICAgICAgKiBQdXQgZXZlcnl0aGluZyBpbnRvIDB4MDAtMHhmZiByZWdpb24gbW9kdWxvIDB4NDAwLgogCQkgKi8KLQkJaWYgKHN0YXJ0ICYgMHgzMDApIHsKKwkJaWYgKHN0YXJ0ICYgMHgzMDApCiAJCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKLQkJCXJlcy0+c3RhcnQgPSBzdGFydDsKLQkJfQotCX0gZWxzZSBpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7Ci0JCWlmIChzdGFydCA8IFBDSUJJT1NfTUlOX01FTSArIGNoYW4tPm1lbV9yZXNvdXJjZS0+c3RhcnQpCi0JCQlzdGFydCA9IFBDSUJJT1NfTUlOX01FTSArIGNoYW4tPm1lbV9yZXNvdXJjZS0+c3RhcnQ7CiAJfQogCi0JcmVzLT5zdGFydCA9IHN0YXJ0OworCXJldHVybiBzdGFydDsKIH0KIAogdm9pZCBwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbiwKLQkJCSBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKKwkJCSAgICAgc3RydWN0IHJlc291cmNlICpyZXMpCiB7CiAJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gZGV2LT5zeXNkYXRhOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKQEAgLTE4OSw5ICsyMTgsOCBAQAogCXJlZ2lvbi0+ZW5kID0gcmVzLT5lbmQgLSBvZmZzZXQ7CiB9CiAKLXZvaWQgX19kZXZpbml0Ci1wY2liaW9zX2J1c190b19yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uKQordm9pZCBwY2liaW9zX2J1c190b19yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCSAgICAgc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24pCiB7CiAJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gZGV2LT5zeXNkYXRhOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKQEAgLTI3NCw2ICszMDIsODYgQEAKIAlyZXR1cm4gc3RyOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQKK3BjaWJpb3NfYnVzX3JlcG9ydF9zdGF0dXNfZWFybHkoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLAorCQkJCWludCB0b3BfYnVzLCBpbnQgY3VycmVudF9idXMsCisJCQkJdW5zaWduZWQgaW50IHN0YXR1c19tYXNrLCBpbnQgd2FybikKK3sKKwl1bnNpZ25lZCBpbnQgcGNpX2RldmZuOworCXUxNiBzdGF0dXM7CisJaW50IHJldDsKKworCWZvciAocGNpX2RldmZuID0gMDsgcGNpX2RldmZuIDwgMHhmZjsgcGNpX2RldmZuKyspIHsKKwkJaWYgKFBDSV9GVU5DKHBjaV9kZXZmbikpCisJCQljb250aW51ZTsKKwkJcmV0ID0gZWFybHlfcmVhZF9jb25maWdfd29yZChob3NlLCB0b3BfYnVzLCBjdXJyZW50X2J1cywKKwkJCQkJICAgICBwY2lfZGV2Zm4sIFBDSV9TVEFUVVMsICZzdGF0dXMpOworCQlpZiAocmV0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3RhdHVzID09IDB4ZmZmZikKKwkJCWNvbnRpbnVlOworCisJCWVhcmx5X3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIHRvcF9idXMsIGN1cnJlbnRfYnVzLAorCQkJCQlwY2lfZGV2Zm4sIFBDSV9TVEFUVVMsCisJCQkJCXN0YXR1cyAmIHN0YXR1c19tYXNrKTsKKwkJaWYgKHdhcm4pCisJCQlwcmludGsoIiglMDJ4OiUwMng6ICUwNFgpICIsIGN1cnJlbnRfYnVzLAorCQkJICAgICAgIHBjaV9kZXZmbiwgc3RhdHVzKTsKKwl9Cit9CisKKy8qCisgKiBXZSBjYW4ndCB1c2UgcGNpX2ZpbmRfZGV2aWNlKCkgaGVyZSBzaW5jZSB3ZSBhcmUKKyAqIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCBfX2luaXRfcmVmb2sKK3BjaWJpb3NfYnVzX3JlcG9ydF9zdGF0dXMoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IHN0YXR1c19tYXNrLAorCQkJICBpbnQgd2FybikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCXUxNiBzdGF0dXM7CisKKwkJLyoKKwkJICogaWdub3JlIGhvc3QgYnJpZGdlIC0gd2UgaGFuZGxlCisJCSAqIHRoYXQgc2VwYXJhdGVseQorCQkgKi8KKwkJaWYgKGRldi0+YnVzLT5udW1iZXIgPT0gMCAmJiBkZXYtPmRldmZuID09IDApCisJCQljb250aW51ZTsKKworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9TVEFUVVMsICZzdGF0dXMpOworCQlpZiAoc3RhdHVzID09IDB4ZmZmZikKKwkJCWNvbnRpbnVlOworCisJCWlmICgoc3RhdHVzICYgc3RhdHVzX21hc2spID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBjbGVhciB0aGUgc3RhdHVzIGVycm9ycyAqLworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfU1RBVFVTLCBzdGF0dXMgJiBzdGF0dXNfbWFzayk7CisKKwkJaWYgKHdhcm4pCisJCQlwcmludGsoIiglczogJTA0WCkgIiwgcGNpX25hbWUoZGV2KSwgc3RhdHVzKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpCisJCWlmIChkZXYtPnN1Ym9yZGluYXRlKQorCQkJcGNpYmlvc19idXNfcmVwb3J0X3N0YXR1cyhkZXYtPnN1Ym9yZGluYXRlLCBzdGF0dXNfbWFzaywgd2Fybik7Cit9CisKK3ZvaWQgX19pbml0X3JlZm9rIHBjaWJpb3NfcmVwb3J0X3N0YXR1cyh1bnNpZ25lZCBpbnQgc3RhdHVzX21hc2ssIGludCB3YXJuKQoreworCXN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZTsKKworCWZvciAoaG9zZSA9IGhvc2VfaGVhZDsgaG9zZTsgaG9zZSA9IGhvc2UtPm5leHQpIHsKKwkJaWYgKHVubGlrZWx5KCFob3NlLT5idXMpKQorCQkJcGNpYmlvc19idXNfcmVwb3J0X3N0YXR1c19lYXJseShob3NlLCBob3NlX2hlYWQtPmluZGV4LAorCQkJCQlob3NlLT5pbmRleCwgc3RhdHVzX21hc2ssIHdhcm4pOworCQllbHNlCisJCQlwY2liaW9zX2J1c19yZXBvcnRfc3RhdHVzKGhvc2UtPmJ1cywgc3RhdHVzX21hc2ssIHdhcm4pOworCX0KK30KKwogaW50IHBjaV9tbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQllbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfc3RhdGUsIGludCB3cml0ZV9jb21iaW5lKQogewpAQCAtMzAyLDkgKzQxMCwxNSBAQAogewogCXN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbiA9IGRldi0+c3lzZGF0YTsKIAotCWlmICghY2hhbi0+aW9fbWFwX2Jhc2UpCisJaWYgKHVubGlrZWx5KCFjaGFuLT5pb19tYXBfYmFzZSkpIHsKIAkJY2hhbi0+aW9fbWFwX2Jhc2UgPSBnZW5lcmljX2lvX2Jhc2U7CiAKKwkJaWYgKHBjaV9kb21haW5zX3N1cHBvcnRlZCkKKwkJCXBhbmljKCJUbyBhdm9pZCBkYXRhIGNvcnJ1cHRpb24gaW9fbWFwX2Jhc2UgTVVTVCBiZSAiCisJCQkgICAgICAic2V0IHdpdGggbXVsdGlwbGUgUENJIGRvbWFpbnMuIik7CisJfQorCisKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShjaGFuLT5pb19tYXBfYmFzZSArIHBvcnQpOwogfQogCkBAIC0zMjEsMjAgKzQzNSw5IEBACiAKIAlpZiAoZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQogCQlyZXR1cm4gaW9wb3J0X21hcF9wY2koZGV2LCBzdGFydCwgbGVuKTsKLQotCS8qCi0JICogUHJlc2VudGx5IHRoZSBJT1JFU09VUkNFX01FTSBjYXNlIGlzIGEgYml0IHNwZWNpYWwsIG1vc3QKLQkgKiBTSDc3NTEgc3R5bGUgUENJIGNvbnRyb2xsZXJzIGhhdmUgUENJIG1lbW9yeSBhdCBhIGZpeGVkCi0JICogbG9jYXRpb24gaW4gdGhlIGFkZHJlc3Mgc3BhY2Ugd2hlcmUgbm8gcmVtYXBwaW5nIGlzIGRlc2lyZWQuCi0JICogV2l0aCB0aGUgSU9SRVNPVVJDRV9NRU0gY2FzZSBtb3JlIGNhcmUgaGFzIHRvIGJlIHRha2VuCi0JICogdG8gaW5oaWJpdCBwYWdlIHRhYmxlIG1hcHBpbmcgZm9yIGxlZ2FjeSBjb3JlcywgYnV0IHRoaXMgaXMKLQkgKiBwdW50ZWQgb2ZmIHRvIF9faW9yZW1hcCgpLgotCSAqCQkJCQktLSBQRk0uCi0JICovCiAJaWYgKGZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKIAkJaWYgKGZsYWdzICYgSU9SRVNPVVJDRV9DQUNIRUFCTEUpCiAJCQlyZXR1cm4gaW9yZW1hcChzdGFydCwgbGVuKTsKLQogCQlyZXR1cm4gaW9yZW1hcF9ub2NhY2hlKHN0YXJ0LCBsZW4pOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2llLXNoNzc4Ni5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2llLXNoNzc4Ni5jCmluZGV4IGFjMzdlZTguLmFlOTFhMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpZS1zaDc3ODYuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaWUtc2g3Nzg2LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogTG93LUxldmVsIFBDSSBFeHByZXNzIFN1cHBvcnQgZm9yIHRoZSBTSDc3ODYKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxMCAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0zMCw2MCArMzAsODQgQEAKIAlpbnQgKCpwb3J0X2luaXRfaHcpKHN0cnVjdCBzaDc3ODZfcGNpZV9wb3J0ICpwb3J0KTsKIH0gKnNoNzc4Nl9wY2llX2h3b3BzOwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4Nl9wY2lfMzJiaXRfbWVtX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODZfcGNpMF9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5uYW1lCT0gInBjaTBfbWVtIiwKLQkJLnN0YXJ0CT0gU0g0QV9QQ0lNRU1fQkFTRUEsCi0JCS5lbmQJPSBTSDRBX1BDSU1FTV9CQVNFQSArIFNaXzY0TSAtIDEsCisJCS5uYW1lCT0gIlBDSWUwIElPIiwKKwkJLnN0YXJ0CT0gMHhmZDAwMDAwMCwKKwkJLmVuZAk9IDB4ZmQwMDAwMDAgKyBTWl84TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwgeworCQkubmFtZQk9ICJQQ0llMCBNRU0gMCIsCisJCS5zdGFydAk9IDB4YzAwMDAwMDAsCisJCS5lbmQJPSAweGMwMDAwMDAwICsgU1pfNTEyTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCisJfSwgeworCQkubmFtZQk9ICJQQ0llMCBNRU0gMSIsCisJCS5zdGFydAk9IDB4MTAwMDAwMDAsCisJCS5lbmQJPSAweDEwMDAwMDAwICsgU1pfNjRNIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewotCQkubmFtZQk9ICJwY2kxX21lbSIsCi0JCS5zdGFydAk9IFNINEFfUENJTUVNX0JBU0VBMSwKLQkJLmVuZAk9IFNINEFfUENJTUVNX0JBU0VBMSArIFNaXzY0TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLm5hbWUJPSAicGNpMl9tZW0iLAotCQkuc3RhcnQJPSBTSDRBX1BDSU1FTV9CQVNFQTIsCi0JCS5lbmQJPSBTSDRBX1BDSU1FTV9CQVNFQTIgKyBTWl82NE0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLm5hbWUJPSAiUENJZTAgTUVNIDIiLAorCQkuc3RhcnQJPSAweGZlMTAwMDAwLAorCQkuZW5kCT0gMHhmZTEwMDAwMCArIFNaXzFNIC0gMSwKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODZfcGNpXzI5Yml0X21lbV9yZXNvdXJjZSA9IHsKLQkuc3RhcnQJPSBTSDRBX1BDSU1FTV9CQVNFLAotCS5lbmQJPSBTSDRBX1BDSU1FTV9CQVNFICsgU1pfNjRNIC0gMSwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3Nzg2X3BjaTFfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJQQ0llMSBJTyIsCisJCS5zdGFydAk9IDB4ZmQ4MDAwMDAsCisJCS5lbmQJPSAweGZkODAwMDAwICsgU1pfOE0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCX0sIHsKKwkJLm5hbWUJPSAiUENJZTEgTUVNIDAiLAorCQkuc3RhcnQJPSAweGEwMDAwMDAwLAorCQkuZW5kCT0gMHhhMDAwMDAwMCArIFNaXzUxMk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzMyQklULAorCX0sIHsKKwkJLm5hbWUJPSAiUENJZTEgTUVNIDEiLAorCQkuc3RhcnQJPSAweDMwMDAwMDAwLAorCQkuZW5kCT0gMHgzMDAwMDAwMCArIFNaXzI1Nk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzMyQklULAorCX0sIHsKKwkJLm5hbWUJPSAiUENJZTEgTUVNIDIiLAorCQkuc3RhcnQJPSAweGZlMzAwMDAwLAorCQkuZW5kCT0gMHhmZTMwMDAwMCArIFNaXzFNIC0gMSwKKwl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODZfcGNpX2lvX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODZfcGNpMl9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5uYW1lCT0gInBjaTBfaW8iLAotCQkuc3RhcnQJPSBTSDRBX1BDSUlPX0JBU0UsCi0JCS5lbmQJPSBTSDRBX1BDSUlPX0JBU0UgKyBTWl84TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJCS5uYW1lCT0gIlBDSWUyIElPIiwKKwkJLnN0YXJ0CT0gMHhmYzgwMDAwMCwKKwkJLmVuZAk9IDB4ZmM4MDAwMDAgKyBTWl80TSAtIDEsCiAJfSwgewotCQkubmFtZQk9ICJwY2kxX2lvIiwKLQkJLnN0YXJ0CT0gU0g0QV9QQ0lJT19CQVNFMSwKLQkJLmVuZAk9IFNINEFfUENJSU9fQkFTRTEgKyBTWl84TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJCS5uYW1lCT0gIlBDSWUyIE1FTSAwIiwKKwkJLnN0YXJ0CT0gMHg4MDAwMDAwMCwKKwkJLmVuZAk9IDB4ODAwMDAwMDAgKyBTWl81MTJNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8zMkJJVCwKIAl9LCB7Ci0JCS5uYW1lCT0gInBjaTJfaW8iLAotCQkuc3RhcnQJPSBTSDRBX1BDSUlPX0JBU0UyLAotCQkuZW5kCT0gU0g0QV9QQ0lJT19CQVNFMiArIFNaXzRNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwkJLm5hbWUJPSAiUENJZTIgTUVNIDEiLAorCQkuc3RhcnQJPSAweDIwMDAwMDAwLAorCQkuZW5kCT0gMHgyMDAwMDAwMCArIFNaXzI1Nk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzMyQklULAorCX0sIHsKKwkJLm5hbWUJPSAiUENJZTIgTUVNIDIiLAorCQkuc3RhcnQJPSAweGZjZDAwMDAwLAorCQkuZW5kCT0gMHhmY2QwMDAwMCArIFNaXzFNIC0gMSwKIAl9LAogfTsKIAogZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIHNoNzc4Nl9wY2lfb3BzOwogCi0jZGVmaW5lIERFRklORV9DT05UUk9MTEVSKHN0YXJ0LCBpZHgpCQkJCVwKLXsJCQkJCQkJCVwKLQkucGNpX29wcwk9ICZzaDc3ODZfcGNpX29wcywJCQlcCi0JLnJlZ19iYXNlCT0gc3RhcnQsCQkJCVwKLQkvKiBtZW1fcmVzb3VyY2UgZmlsbGVkIGluIGF0IHByb2JlIHRpbWUgKi8JCVwKLQkubWVtX29mZnNldAk9IDAsCQkJCQlcCi0JLmlvX3Jlc291cmNlCT0gJnNoNzc4Nl9wY2lfaW9fcmVzb3VyY2VzW2lkeF0sCVwKLQkuaW9fb2Zmc2V0CT0gMCwJCQkJCVwKKyNkZWZpbmUgREVGSU5FX0NPTlRST0xMRVIoc3RhcnQsIGlkeCkJCQkJCVwKK3sJCQkJCQkJCQlcCisJLnBjaV9vcHMJPSAmc2g3Nzg2X3BjaV9vcHMsCQkJCVwKKwkucmVzb3VyY2VzCT0gc2g3Nzg2X3BjaSMjaWR4IyNfcmVzb3VyY2VzLAkJCVwKKwkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzaDc3ODZfcGNpIyNpZHgjI19yZXNvdXJjZXMpLAlcCisJLnJlZ19iYXNlCT0gc3RhcnQsCQkJCQlcCisJLm1lbV9vZmZzZXQJPSAwLAkJCQkJCVwKKwkuaW9fb2Zmc2V0CT0gMCwJCQkJCQlcCiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2NoYW5uZWwgc2g3Nzg2X3BjaV9jaGFubmVsc1tdID0gewpAQCAtMTgwLDcgKzIwNCw5IEBACiB7CiAJc3RydWN0IHBjaV9jaGFubmVsICpjaGFuID0gcG9ydC0+aG9zZTsKIAl1bnNpZ25lZCBpbnQgZGF0YTsKLQlpbnQgcmV0OworCXBoeXNfYWRkcl90IG1lbXBoeXM7CisJc2l6ZV90IG1lbXNpemU7CisJaW50IHJldCwgaTsKIAogCS8qIEJlZ2luIGluaXRpYWxpemF0aW9uICovCiAJcGNpX3dyaXRlX3JlZyhjaGFuLCAwLCBTSDRBX1BDSUVUQ1RMUik7CkBAIC0yMDMsMTUgKzIyOSwyNCBAQAogCWRhdGEgfD0gUENJX0NBUF9JRF9FWFA7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCBkYXRhLCBTSDRBX1BDSUVFWFBDQVAwKTsKIAotCS8qIEVuYWJsZSB4NCBsaW5rIHdpZHRoIGFuZCBleHRlbmRlZCBzeW5jLiAqLworCS8qIEVuYWJsZSBkYXRhIGxpbmsgbGF5ZXIgYWN0aXZlIHN0YXRlIHJlcG9ydGluZyAqLworCXBjaV93cml0ZV9yZWcoY2hhbiwgUENJX0VYUF9MTktDQVBfRExMTEFSQywgU0g0QV9QQ0lFRVhQQ0FQMyk7CisKKwkvKiBFbmFibGUgZXh0ZW5kZWQgc3luYyBhbmQgQVNQTSBMMHMgc3VwcG9ydCAqLwogCWRhdGEgPSBwY2lfcmVhZF9yZWcoY2hhbiwgU0g0QV9QQ0lFRVhQQ0FQNCk7Ci0JZGF0YSAmPSB+KFBDSV9FWFBfTE5LU1RBX05MVyA8PCAxNik7Ci0JZGF0YSB8PSAoMSA8PCAyMikgfCBQQ0lfRVhQX0xOS0NUTF9FUzsKKwlkYXRhICY9IH5QQ0lfRVhQX0xOS0NUTF9BU1BNQzsKKwlkYXRhIHw9IFBDSV9FWFBfTE5LQ1RMX0VTIHwgMTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIGRhdGEsIFNINEFfUENJRUVYUENBUDQpOwogCisJLyogV3JpdGUgb3V0IHRoZSBwaHlzaWNhbCBzbG90IG51bWJlciAqLworCWRhdGEgPSBwY2lfcmVhZF9yZWcoY2hhbiwgU0g0QV9QQ0lFRVhQQ0FQNSk7CisJZGF0YSAmPSB+UENJX0VYUF9TTFRDQVBfUFNOOworCWRhdGEgfD0gKHBvcnQtPmluZGV4ICsgMSkgPDwgMTk7CisJcGNpX3dyaXRlX3JlZyhjaGFuLCBkYXRhLCBTSDRBX1BDSUVFWFBDQVA1KTsKKwogCS8qIFNldCB0aGUgY29tcGxldGlvbiB0aW1lciB0aW1lb3V0IHRvIHRoZSBtYXhpbXVtIDMybXMuICovCiAJZGF0YSA9IHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRBX1BDSUVUTENUTFIpOwotCWRhdGEgJj0gfjB4ZmZmZjsKKwlkYXRhICY9IH4weDNmMDA7CiAJZGF0YSB8PSAweDMyIDw8IDg7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCBkYXRhLCBTSDRBX1BDSUVUTENUTFIpOwogCkBAIC0yMjQsNiArMjU5LDMzIEBACiAJZGF0YSB8PSAoMHhmZiA8PCAxNik7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCBkYXRhLCBTSDRBX1BDSUVNQUNDVExSKTsKIAorCW1lbXBoeXMgPSBfX3BhKG1lbW9yeV9zdGFydCk7CisJbWVtc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhtZW1vcnlfZW5kIC0gbWVtb3J5X3N0YXJ0KTsKKworCS8qCisJICogSWYgdGhlcmUncyBtb3JlIHRoYW4gNTEyTUIgb2YgbWVtb3J5LCB3ZSBuZWVkIHRvIHJvbGwgb3ZlciB0bworCSAqIExBUjEvTEFNUjEuCisJICovCisJaWYgKG1lbXNpemUgPiBTWl81MTJNKSB7CisJCV9fcmF3X3dyaXRlbChtZW1waHlzICsgU1pfNTEyTSwgY2hhbi0+cmVnX2Jhc2UgKyBTSDRBX1BDSUVMQVIxKTsKKwkJX19yYXdfd3JpdGVsKCgobWVtc2l6ZSAtIFNaXzUxMk0pIC0gU1pfMjU2KSB8IDEsCisJCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g0QV9QQ0lFTEFNUjEpOworCQltZW1zaXplID0gU1pfNTEyTTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBPdGhlcndpc2UganVzdCB6ZXJvIGl0IG91dCBhbmQgZGlzYWJsZSBpdC4KKwkJICovCisJCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINEFfUENJRUxBUjEpOworCQlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDRBX1BDSUVMQU1SMSk7CisJfQorCisJLyoKKwkgKiBMQVIwL0xBTVIwIGNvdmVycyB1cCB0byB0aGUgZmlyc3QgNTEyTUIsIHdoaWNoIGlzIGVub3VnaCB0bworCSAqIGNvdmVyIGFsbCBvZiBsb3dtZW0gb24gbW9zdCBwbGF0Zm9ybXMuCisJICovCisJX19yYXdfd3JpdGVsKG1lbXBoeXMsIGNoYW4tPnJlZ19iYXNlICsgU0g0QV9QQ0lFTEFSMCk7CisJX19yYXdfd3JpdGVsKChtZW1zaXplIC0gU1pfMjU2KSB8IDEsIGNoYW4tPnJlZ19iYXNlICsgU0g0QV9QQ0lFTEFNUjApOworCiAJLyogRmluaXNoIGluaXRpYWxpemF0aW9uICovCiAJZGF0YSA9IHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRBX1BDSUVUQ1RMUik7CiAJZGF0YSB8PSAweDE7CkBAIC0yNDMsMTAgKzMwNSwxNCBAQAogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMTAwMDA3LCBTSDRBX1BDSUVQQ0lDT05GMSk7CisJZGF0YSA9IHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRBX1BDSUVQQ0lDT05GMSk7CisJZGF0YSAmPSB+KFBDSV9TVEFUVVNfREVWU0VMX01BU0sgPDwgMTYpOworCWRhdGEgfD0gUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lfQ09NTUFORF9NQVNURVIgfAorCQkoUENJX1NUQVRVU19DQVBfTElTVCB8IFBDSV9TVEFUVVNfREVWU0VMX0ZBU1QpIDw8IDE2OworCXBjaV93cml0ZV9yZWcoY2hhbiwgZGF0YSwgU0g0QV9QQ0lFUENJQ09ORjEpOworCiAJcGNpX3dyaXRlX3JlZyhjaGFuLCAweDgwODg4MDAwLCBTSDRBX1BDSUVUWFZDMERDVExSKTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAyMjIwMDAsIFNINEFfUENJRVJYVkMwRENUTFIpOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwNTBBMCwgU0g0QV9QQ0lFRVhQQ0FQMik7CiAKIAl3bWIoKTsKIApAQCAtMjU0LDE1ICszMjAsMzIgQEAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIlBDSTogUENJZSMlZCBsaW5rIHdpZHRoICVkXG4iLAogCSAgICAgICBwb3J0LT5pbmRleCwgKGRhdGEgPj4gMjApICYgMHgzZik7CiAKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDA3YzAwMDAsIFNINEFfUENJRVBBTVIwKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINEFfUENJRVBBUkgwKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINEFfUENJRVBBUkwwKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4ODAwMDAxMDAsIFNINEFfUENJRVBUQ1RMUjApOwogCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAzZmMwMDAwLCBTSDRBX1BDSUVQQU1SMik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRBX1BDSUVQQVJIMik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRBX1BDSUVQQVJMMik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDgwMDAwMDAwLCBTSDRBX1BDSUVQVENUTFIyKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2hhbi0+bnJfcmVzb3VyY2VzOyBpKyspIHsKKwkJc3RydWN0IHJlc291cmNlICpyZXMgPSBjaGFuLT5yZXNvdXJjZXMgKyBpOworCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZTsKKwkJdTMyIGVuYWJsZV9tYXNrOworCisJCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g0QV9QQ0lFUFRDVExSKGkpKTsKKworCQlzaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOworCisJCS8qCisJCSAqIFRoZSBQQU1SIG1hc2sgaXMgY2FsY3VsYXRlZCBpbiB1bml0cyBvZiAyNTZrQiwgd2hpY2gKKwkJICoga2VlcHMgdGhpbmdzIHByZXR0eSBzaW1wbGUuCisJCSAqLworCQlfX3Jhd193cml0ZWwoKChyb3VuZHVwX3Bvd19vZl90d28oc2l6ZSkgLyBTWl8yNTZLKSAtIDEpIDw8IDE4LAorCQkJICAgICBjaGFuLT5yZWdfYmFzZSArIFNINEFfUENJRVBBTVIoaSkpOworCisJCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g0QV9QQ0lFUEFSSChpKSk7CisJCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g0QV9QQ0lFUEFSTChpKSk7CisKKwkJZW5hYmxlX21hc2sgPSBNQVNLX1BBUkU7CisJCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwkJCWVuYWJsZV9tYXNrIHw9IE1BU0tfU1BDOworCisJCXBjaV93cml0ZV9yZWcoY2hhbiwgZW5hYmxlX21hc2ssIFNINEFfUENJRVBUQ1RMUihpKSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTYsOSArMzc5LDcgQEAKIAlpZiAodW5saWtlbHkocmV0IDwgMCkpCiAJCXJldHVybiByZXQ7CiAKLQlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcihwb3J0LT5ob3NlKTsKLQotCXJldHVybiAwOworCXJldHVybiByZWdpc3Rlcl9wY2lfY29udHJvbGxlcihwb3J0LT5ob3NlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzaDc3ODZfcGNpZV9od29wcyBzaDc3ODZfNjVubV9wY2llX2h3b3BzIF9faW5pdGRhdGEgPSB7CkBAIC0zMzIsMTcgKzQxMyw3IEBACiAKIAkJcG9ydC0+aW5kZXgJCT0gaTsKIAkJcG9ydC0+aG9zZQkJPSBzaDc3ODZfcGNpX2NoYW5uZWxzICsgaTsKLQkJcG9ydC0+aG9zZS0+aW9fbWFwX2Jhc2UJPSBwb3J0LT5ob3NlLT5pb19yZXNvdXJjZS0+c3RhcnQ7Ci0KLQkJLyoKLQkJICogQ2hlY2sgaWYgd2UgYXJlIGJvb3RpbmcgaW4gMjkgb3IgMzItYml0IG1vZGUKLQkJICoKLQkJICogMzItYml0IG1vZGUgcHJvdmlkZXMgZWFjaCBjb250cm9sbGVyIHdpdGggaXRzIG93bgotCQkgKiBtZW1vcnkgd2luZG93LCB3aGlsZSAyOS1iaXQgbW9kZSB1c2VzIGEgc2hhcmVkIG9uZS4KLQkJICovCi0JCXBvcnQtPmhvc2UtPm1lbV9yZXNvdXJjZSA9IHRlc3RfbW9kZV9waW4oTU9ERV9QSU4xMCkgPwotCQkJJnNoNzc4Nl9wY2lfMzJiaXRfbWVtX3Jlc291cmNlc1tpXSA6Ci0JCQkmc2g3Nzg2X3BjaV8yOWJpdF9tZW1fcmVzb3VyY2U7CisJCXBvcnQtPmhvc2UtPmlvX21hcF9iYXNlCT0gcG9ydC0+aG9zZS0+cmVzb3VyY2VzWzBdLnN0YXJ0OwogCiAJCXJldCB8PSBzaDc3ODZfcGNpZV9od29wcy0+cG9ydF9pbml0X2h3KHBvcnQpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpZS1zaDc3ODYuaCBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpZS1zaDc3ODYuaAppbmRleCBjNjU1MjkwLi45MGE2OTkyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaWUtc2g3Nzg2LmgKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2llLXNoNzc4Ni5oCkBAIC0zMCw0NyArMzAsOSBAQAogICogZm9yIG90aGVyKE1heCBQYXlsb2FkIFNpemU9NDA5NkIsUENJSU9fU0laRT04TSkKICAqLwogCi0vKiBQQ0kwLTA6IFBDSSBJL08gc3BhY2UgKi8KLSNkZWZpbmUgU0g0QV9QQ0lJT19CQVNFCQkweEZEMDAwMDAwCS8qIFBDSSBJL08gZm9yIGNvbnRyb2xsZXIgMCAqLwotI2RlZmluZSBTSDRBX1BDSUlPX0JBU0UxCTB4RkQ4MDAwMDAJLyogUENJIEkvTyBmb3IgY29udHJvbGxlciAxIChSZXYxLjE0KSovCi0jZGVmaW5lIFNINEFfUENJSU9fQkFTRTIJMHhGQzgwMDAwMAkvKiBQQ0kgSS9PIGZvciBjb250cm9sbGVyIDIgKFJldjEuMTcxKSovCi0KLSNkZWZpbmUgU0g0QV9QQ0lJT19TSVpFNjQJMHgwMDAxMDAwMAkvKiBQTFggYWxsb3dzIG9ubHkgNjRLICovCi0jZGVmaW5lIFNINEFfUENJSU9fU0laRQkJMHgwMDgwMDAwMAkvKiA4TSAqLwotI2RlZmluZSBTSDRBX1BDSUlPX1NJWkUyCTB4MDA0MDAwMDAJLyogNE0gKFJldjEuMTcxKSovCi0KLS8qIFBDSTAtMTogUENJIG1lbW9yeSBzcGFjZSAyOS1iaXQgYWRkcmVzcyAqLwotI2RlZmluZSBTSDRBX1BDSU1FTV9CQVNFCTB4MTAwMDAwMDAKLSNkZWZpbmUgU0g0QV9QQ0lNRU1fU0laRQkweDA0MDAwMDAwCS8qIDY0TSAqLwotCi0vKiBQQ0kwLTI6IFBDSSBtZW1vcnkgc3BhY2UgMzItYml0IGFkZHJlc3MgKi8KLSNkZWZpbmUgU0g0QV9QQ0lNRU1fQkFTRUEJMHhDMDAwMDAwMAkvKiAgZm9yIGNvbnRyb2xsZXIgMCAqLwotI2RlZmluZSBTSDRBX1BDSU1FTV9CQVNFQTEJMHhBMDAwMDAwMAkvKiAgZm9yIGNvbnRyb2xsZXIgMSAoUmV2MS4xNCkqLwotI2RlZmluZSBTSDRBX1BDSU1FTV9CQVNFQTIJMHg4MDAwMDAwMAkvKiAgZm9yIGNvbnRyb2xsZXIgMiAoUmV2MS4xNzEpKi8KLSNkZWZpbmUgU0g0QV9QQ0lNRU1fU0laRUEJMHgyMDAwMDAwMAkvKiA1MTJNICovCi0KIC8qIFBDSTA6IFBDSSBtZW1vcnkgdGFyZ2V0IHRyYW5zZmVyIDMyLWJpdCBhZGRyZXNzIHRyYW5zbGF0aW9uIHZhbHVlKFJldjEuMTFUKSovCiAjZGVmaW5lIFNINEFfUENJQk1TVFJfVFJBTlNMQVRJT04JMHgyMDAwMDAwMAogCi0jZGVmaW5lIFNINEFfUENJX0RFVklDRV9JRAkJMHgwMDAyCi0jZGVmaW5lIFNINEFfUENJX1ZFTkRPUl9JRAkJMHgxOTEyCi0KLS8vIFBDSSBjb21wYXRpYmxlIDAwMC0wM2YKLSNkZWZpbmUgUENJX0NNRAkJMHgwMDQKLSNkZWZpbmUgUENJX1JJRAkJMHgwMDgKLSNkZWZpbmUgUENJX0lCQVIJMHgwMTAKLSNkZWZpbmUgUENJX01CQVIwCTB4MDE0Ci0jZGVmaW5lIFBDSV9NQkFSMQkweDAxOAotCi0vKiBQQ0kgcG93ZXIgbWFuYWdlbWVudC9NU0kvY2FwYWJsaXR5IDA0MC0wZmYgKi8KLS8qIFBDSUUgZXh0ZW5kZWQgMTAwLWZmZiAqLwotCi0vKiBTSDc3ODYgZGV2aWNlIGlkZW50aWZpY2F0aW9uICovCS8vIFJldjEuMTcxCi0jZGVmaW5lIFNINEFfUFZSCQkoMHhGRjAwMDAzMCkKLSNkZWZpbmUgU0g0QV9QVlJfU0hYMwkJKDB4MTA0MDAwMDApCi0jZGVmaW5lIFNINEFfUFJSCQkoMHhGRjAwMDA0NCkKLSNkZWZpbmUgU0g0QV9QUlJfU0g3Nzg2CQkoMHgwMDAwMDQwMCkJLy8gUmV2MS4xNzEKLQogLyoJU1BWQ1IwCQkqLwogI2RlZmluZQlTSDRBX1BDSUVWQ1IwCQkoMHgwMDAwMDApCS8qIFIgLSAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQkJQklUU19UT1BfTUIJKDI0KQpAQCAtMzUwLDIzICszMTIsMjMgQEAKICNkZWZpbmUJU0g0QV9QQ0lFQ1NBUjUJCSgweDAyMDJCNCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQlTSDRBX1BDSUVTVENUTFI1CSgweDAyMDJCOCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogCi0vKglQQ0lFUEFSTDAJKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFSTDAJCSgweDAyMDQwMCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLworLyoJUENJRVBBUkwJKi8KKyNkZWZpbmUJU0g0QV9QQ0lFUEFSTCh4KQkoMHgwMjA0MDAgKyAoKHgpICogMHgyMCkpIC8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KICNkZWZpbmUJCUJJVFNfUEFMCSgxOCkKICNkZWZpbmUJCU1BU0tfUEFMCSgweDNmZmY8PEJJVFNfUEFMKQogCi0vKglQQ0lFUEFSSDAJKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFSSDAJCSgweDAyMDQwNCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLworLyoJUENJRVBBUkgJKi8KKyNkZWZpbmUJU0g0QV9QQ0lFUEFSSCh4KQkoMHgwMjA0MDQgKyAoKHgpICogMHgyMCkpIC8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KICNkZWZpbmUJCUJJVFNfUEFICSgwKQogI2RlZmluZQkJTUFTS19QQUgJKDB4ZmZmZmZmZmY8PEJJVFNfUEFIKQogCi0vKglQQ0lFUEFNUjAJICovCi0jZGVmaW5lCVNINEFfUENJRVBBTVIwCQkoMHgwMjA0MDgpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KKy8qCVBDSUVQQU1SCSAqLworI2RlZmluZQlTSDRBX1BDSUVQQU1SKHgpCSgweDAyMDQwOCArICgoeCkgKiAweDIwKSkgLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQkJQklUU19QQU0JKDE4KQogI2RlZmluZQkJTUFTS19QQU0JKDB4M2ZmZjw8QklUU19QQU0pCiAKLS8qCVBDSUVQVENUTFIwCSovCi0jZGVmaW5lCVNINEFfUENJRVBUQ1RMUjAJKDB4MDIwNDBDKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCisvKglQQ0lFUFRDVExSCSovCisjZGVmaW5lIFNINEFfUENJRVBUQ1RMUih4KQkoMHgwMjA0MEMgKyAoKHgpICogMHgyMCkpCiAjZGVmaW5lCQlCSVRTX1BBUkUJKDMxKQogI2RlZmluZQkJTUFTS19QQVJFCSgweDE8PEJJVFNfUEFSRSkKICNkZWZpbmUJCUJJVFNfVEMJCSgyMCkKQEAgLTM3OCwyNiArMzQwLDYgQEAKICNkZWZpbmUJCUJJVFNfU1BDCSg4KQogI2RlZmluZQkJTUFTS19TUEMJKDB4MTw8QklUU19TUEMpCiAKLSNkZWZpbmUJU0g0QV9QQ0lFUEFSTDEJCSgweDAyMDQyMCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJIMQkJKDB4MDIwNDI0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBTVIxCQkoMHgwMjA0MjgpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUFRDVExSMQkoMHgwMjA0MkMpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFSTDIJCSgweDAyMDQ0MCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJIMgkJKDB4MDIwNDQ0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBTVIyCQkoMHgwMjA0NDgpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUFRDVExSMgkoMHgwMjA0NEMpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFSTDMJCSgweDAyMDQ2MCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJIMwkJKDB4MDIwNDY0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBTVIzCQkoMHgwMjA0NjgpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUFRDVExSMwkoMHgwMjA0NkMpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFSTDQJCSgweDAyMDQ4MCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJINAkJKDB4MDIwNDg0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBTVI0CQkoMHgwMjA0ODgpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUFRDVExSNAkoMHgwMjA0OEMpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFSTDUJCSgweDAyMDRBMCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJINQkJKDB4MDIwNEE0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBTVI1CQkoMHgwMjA0QTgpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUFRDVExSNQkoMHgwMjA0QUMpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KICNkZWZpbmUJU0g0QV9QQ0lFRE1BT1IJCSgweDAyMTAwMCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQlTSDRBX1BDSUVETVNBUjAJCSgweDAyMTEwMCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQlTSDRBX1BDSUVETVNBSFIwCSgweDAyMTEwNCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3N1cGVyaHl3YXkvb3BzLXNoNC0yMDIuYyBiL2FyY2gvc2gvZHJpdmVycy9zdXBlcmh5d2F5L29wcy1zaDQtMjAyLmMKaW5kZXggM2IxNGJmOC4uNmRhNjJlOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3N1cGVyaHl3YXkvb3BzLXNoNC0yMDIuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvc3VwZXJoeXdheS9vcHMtc2g0LTIwMi5jCkBAIC0xMzQsOCArMTM0LDggQEAKIAkgKgogCSAqIERvIG5vdCB0cnVzdCB0aGUgZG9jdW1lbnRhdGlvbiwgZm9yIGl0IGlzIGV2aWwuCiAJICovCi0JdmNyaCA9IGN0cmxfaW5sKGJhc2UpOwotCXZjcmwgPSBjdHJsX2lubChiYXNlICsgc2l6ZW9mKHUzMikpOworCXZjcmggPSBfX3Jhd19yZWFkbChiYXNlKTsKKwl2Y3JsID0gX19yYXdfcmVhZGwoYmFzZSArIHNpemVvZih1MzIpKTsKIAogCXRtcCA9ICgodTY0KXZjcmggPDwgMzIpIHwgdmNybDsKIAltZW1jcHkodmNyLCAmdG1wLCBzaXplb2YodTY0KSk7CkBAIC0xNDcsOCArMTQ3LDggQEAKIHsKIAl1NjQgdG1wID0gKih1NjQgKikmdmNyOwogCi0JY3RybF9vdXRsKCh0bXAgPj4gMzIpICYgMHhmZmZmZmZmZiwgYmFzZSk7Ci0JY3RybF9vdXRsKHRtcCAmIDB4ZmZmZmZmZmYsIGJhc2UgKyBzaXplb2YodTMyKSk7CisJX19yYXdfd3JpdGVsKCh0bXAgPj4gMzIpICYgMHhmZmZmZmZmZiwgYmFzZSk7CisJX19yYXdfd3JpdGVsKHRtcCAmIDB4ZmZmZmZmZmYsIGJhc2UgKyBzaXplb2YodTMyKSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vS2J1aWxkIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9LYnVpbGQKaW5kZXggZTEyMWMzMC4uNDZjYjkzNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9LYnVpbGQKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9LYnVpbGQKQEAgLTEsNiArMSw4IEBACiBpbmNsdWRlIGluY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbQogCi1oZWFkZXIteSArPSBjYWNoZWN0bC5oIGNwdS1mZWF0dXJlcy5oCitoZWFkZXIteSArPSBjYWNoZWN0bC5oCitoZWFkZXIteSArPSBjcHUtZmVhdHVyZXMuaAoraGVhZGVyLXkgKz0gaHdfYnJlYWtwb2ludC5oCiAKIHVuaWZkZWYteSArPSB1bmlzdGRfMzIuaAogdW5pZmRlZi15ICs9IHVuaXN0ZF82NC5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2FkZHJzcGFjZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hZGRyc3BhY2UuaAppbmRleCA5OWQ2YjNlLi40NDZiMzgzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2FkZHJzcGFjZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmgKQEAgLTI4LDcgKzI4LDcgQEAKIC8qIFJldHVybnMgdGhlIHByaXZpbGVnZWQgc2VnbWVudCBiYXNlIG9mIGEgZ2l2ZW4gYWRkcmVzcyAgKi8KICNkZWZpbmUgUFhTRUcoYSkJKCgodW5zaWduZWQgbG9uZykoYSkpICYgMHhlMDAwMDAwMCkKIAotI2lmIGRlZmluZWQoQ09ORklHXzI5QklUKSB8fCBkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCisjaWZkZWYgQ09ORklHXzI5QklUCiAvKgogICogTWFwIGFuIGFkZHJlc3MgdG8gYSBjZXJ0YWluIHByaXZpbGVnZWQgc2VnbWVudAogICovCkBAIC00MCw3ICs0MCwxNSBAQAogCSgoX190eXBlb2ZfXyhhKSkoKCh1bnNpZ25lZCBsb25nKShhKSAmIDB4MWZmZmZmZmYpIHwgUDNTRUcpKQogI2RlZmluZSBQNFNFR0FERFIoYSkJXAogCSgoX190eXBlb2ZfXyhhKSkoKCh1bnNpZ25lZCBsb25nKShhKSAmIDB4MWZmZmZmZmYpIHwgUDRTRUcpKQotI2VuZGlmIC8qIDI5QklUIHx8IFBNQl9GSVhFRCAqLworI2Vsc2UKKy8qCisgKiBUaGVzZSB3aWxsIG5ldmVyIHdvcmsgaW4gMzItYml0LCBkb24ndCBldmVuIGJvdGhlci4KKyAqLworI2RlZmluZSBQMVNFR0FERFIoYSkJX19mdXRpbGVfcmVtYXBwaW5nX2F0dGVtcHQKKyNkZWZpbmUgUDJTRUdBRERSKGEpCV9fZnV0aWxlX3JlbWFwcGluZ19hdHRlbXB0CisjZGVmaW5lIFAzU0VHQUREUihhKQlfX2Z1dGlsZV9yZW1hcHBpbmdfYXR0ZW1wdAorI2RlZmluZSBQNFNFR0FERFIoYSkJX19mdXRpbGVfcmVtYXBwaW5nX2F0dGVtcHQKKyNlbmRpZgogI2VuZGlmIC8qIFAxU0VHICovCiAKIC8qIENoZWNrIGlmIGFuIGFkZHJlc3MgY2FuIGJlIHJlYWNoZWQgaW4gMjkgYml0cyAqLwpAQCAtNTcsMTEgKzY1LDUgQEAKICNkZWZpbmUgUDNfQUREUl9NQVgJCVA0U0VHCiAjZW5kaWYKIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpZmRlZiBDT05GSUdfUE1CCi1leHRlcm4gaW50IF9faW5fMjliaXRfbW9kZSh2b2lkKTsKLSNlbmRpZiAvKiBDT05GSUdfUE1CICovCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19BU01fU0hfQUREUlNQQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYWxpZ25tZW50LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2FsaWdubWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMmVmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2FsaWdubWVudC5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX19BU01fU0hfQUxJR05NRU5UX0gKKyNkZWZpbmUgX19BU01fU0hfQUxJR05NRU5UX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2V4dGVybiB2b2lkIGluY191bmFsaWduZWRfYnl0ZV9hY2Nlc3Modm9pZCk7CitleHRlcm4gdm9pZCBpbmNfdW5hbGlnbmVkX3dvcmRfYWNjZXNzKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5jX3VuYWxpZ25lZF9kd29yZF9hY2Nlc3Modm9pZCk7CitleHRlcm4gdm9pZCBpbmNfdW5hbGlnbmVkX211bHRpX2FjY2Vzcyh2b2lkKTsKK2V4dGVybiB2b2lkIGluY191bmFsaWduZWRfdXNlcl9hY2Nlc3Modm9pZCk7CitleHRlcm4gdm9pZCBpbmNfdW5hbGlnbmVkX2tlcm5lbF9hY2Nlc3Modm9pZCk7CisKKyNkZWZpbmUgVU1fV0FSTgkJKDEgPDwgMCkKKyNkZWZpbmUgVU1fRklYVVAJKDEgPDwgMSkKKyNkZWZpbmUgVU1fU0lHTkFMCSgxIDw8IDIpCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdW5hbGlnbmVkX3VzZXJfYWN0aW9uKHZvaWQpOworCitleHRlcm4gdm9pZCB1bmFsaWduZWRfZml4dXBzX25vdGlmeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW5zbl9zaXplX3QsIHN0cnVjdCBwdF9yZWdzICopOworCisjZW5kaWYgLyogX19BU01fU0hfQUxJR05NRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWdyYi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtZ3JiLmgKaW5kZXggNGM1YjdkYi4uYTI3M2M4OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtZ3JiLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtZ3JiLmgKQEAgLTEyMCw1MCArMTIwLDQgQEAKIAkJOiAibWVtb3J5IiAsICJyMCIsICJyMSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG9sZCwgaW50IG5ldykKLXsKLQlpbnQgcmV0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiICAgLmFsaWduIDIJCVxuXHQiCi0JCSIgICBtb3ZhICAgICAxZiwgIHIwCVxuXHQiCi0JCSIgICBub3AJCQlcblx0IgotCQkiICAgbW92ICAgICByMTUsICByMQlcblx0IgotCQkiICAgbW92ICAgICMtOCwgIHIxNQlcblx0IgotCQkiICAgbW92LmwgICBAJTEsICAlMAlcblx0IgotCQkiICAgY21wL2VxICAgJTIsICAlMAlcblx0IgotCQkiICAgYmYJICAgICAxZgkJXG5cdCIKLQkJIiAgIG1vdi5sICAgICUzLCBAJTEJXG5cdCIKLQkJIjE6IG1vdiAgICAgIHIxLCAgcjE1CVxuXHQiCi0JCTogIj0mciIgKHJldCkKLQkJOiAiciIgKHYpLCAiciIgKG9sZCksICJyIiAobmV3KQotCQk6ICJtZW1vcnkiICwgInIwIiwgInIxIiAsICJ0Iik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQotewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIgICAuYWxpZ24gMgkJXG5cdCIKLQkJIiAgIG1vdmEgICAgMWYsICAgcjAJXG5cdCIKLQkJIiAgIG5vcAkJCVxuXHQiCi0JCSIgICBtb3YgICAgcjE1LCAgIHIxCVxuXHQiCi0JCSIgICBtb3YgICAgIy0xMiwgIHIxNQlcblx0IgotCQkiICAgbW92LmwgIEAlMiwgICAlMQlcblx0IgotCQkiICAgbW92CSAgICAlMSwgICAlMCAgICBcblx0IgotCQkiICAgY21wL2VxICAlNCwgICAlMAlcblx0IgotCQkiICAgYnQvcyAgICAxZgkJXG5cdCIKLQkJIiAgICBhZGQgICAgJTMsICAgJTEJXG5cdCIKLQkJIiAgIG1vdi5sICAgJTEsICBAJTIJXG5cdCIKLQkJIjE6IG1vdiAgICAgcjEsICAgcjE1CVxuXHQiCi0JCTogIj0mciIgKHJldCksICI9JnIiICh0bXApCi0JCTogInIiICh2KSwgInIiIChhKSwgInIiICh1KQotCQk6ICJtZW1vcnkiICwgInIwIiwgInIxIiAsICJ0Iik7Ci0KLQlyZXR1cm4gcmV0ICE9IHU7Ci19CiAjZW5kaWYgLyogX19BU01fU0hfQVRPTUlDX0dSQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1sbHNjLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1sbHNjLmgKaW5kZXggYjA0MGUxZS4uNGIwMGI3OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtbGxzYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWxsc2MuaApAQCAtMTA0LDMxICsxMDQsNCBAQAogCTogInQiKTsKIH0KIAotI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvLCBuKSAoY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKLQotLyoqCi0gKiBhdG9taWNfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgotICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCi0gKgotICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCi0gKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKLXsKLQlpbnQgYywgb2xkOwotCWMgPSBhdG9taWNfcmVhZCh2KTsKLQlmb3IgKDs7KSB7Ci0JCWlmICh1bmxpa2VseShjID09ICh1KSkpCi0JCQlicmVhazsKLQkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKLQkJaWYgKGxpa2VseShvbGQgPT0gYykpCi0JCQlicmVhazsKLQkJYyA9IG9sZDsKLQl9Ci0KLQlyZXR1cm4gYyAhPSAodSk7Ci19Ci0KICNlbmRpZiAvKiBfX0FTTV9TSF9BVE9NSUNfTExTQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCBiMTYzODhkLi4yNzVhNDQ4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTI1LDU4ICsyNSw0MyBAQAogI2VuZGlmCiAKICNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShhLCB2KQkoYXRvbWljX2FkZF9yZXR1cm4oKGEpLCAodikpIDwgMCkKKyNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikJCWF0b21pY19zdWJfcmV0dXJuKDEsICh2KSkKKyNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikJCWF0b21pY19hZGRfcmV0dXJuKDEsICh2KSkKKyNkZWZpbmUgYXRvbWljX2luY19hbmRfdGVzdCh2KQkJKGF0b21pY19pbmNfcmV0dXJuKHYpID09IDApCisjZGVmaW5lIGF0b21pY19zdWJfYW5kX3Rlc3QoaSx2KQkoYXRvbWljX3N1Yl9yZXR1cm4oKGkpLCAodikpID09IDApCisjZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QodikJCShhdG9taWNfc3ViX3JldHVybigxLCAodikpID09IDApCisjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikJCWF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKIAotI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KSBhdG9taWNfc3ViX3JldHVybigxLCh2KSkKLSNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgYXRvbWljX2FkZF9yZXR1cm4oMSwodikpCisjZGVmaW5lIGF0b21pY19pbmModikJCQlhdG9taWNfYWRkKDEsICh2KSkKKyNkZWZpbmUgYXRvbWljX2RlYyh2KQkJCWF0b21pY19zdWIoMSwgKHYpKQogCi0vKgotICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAorI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpCQkoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCisjZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG8sIG4pCQkoY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKKworLyoqCisgKiBhdG9taWNfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCiAgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgorICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCiAgKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKLSAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KKyAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgorICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCiAgKi8KLSNkZWZpbmUgYXRvbWljX2luY19hbmRfdGVzdCh2KSAoYXRvbWljX2luY19yZXR1cm4odikgPT0gMCkKLQotI2RlZmluZSBhdG9taWNfc3ViX2FuZF90ZXN0KGksdikgKGF0b21pY19zdWJfcmV0dXJuKChpKSwgKHYpKSA9PSAwKQotI2RlZmluZSBhdG9taWNfZGVjX2FuZF90ZXN0KHYpIChhdG9taWNfc3ViX3JldHVybigxLCAodikpID09IDApCi0KLSNkZWZpbmUgYXRvbWljX2luYyh2KSBhdG9taWNfYWRkKDEsKHYpKQotI2RlZmluZSBhdG9taWNfZGVjKHYpIGF0b21pY19zdWIoMSwodikpCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfR1VTQV9SQikgJiYgIWRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2NtcHhjaGcoYXRvbWljX3QgKnYsIGludCBvbGQsIGludCBuZXcpCi17Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXJldCA9IHYtPmNvdW50ZXI7Ci0JaWYgKGxpa2VseShyZXQgPT0gb2xkKSkKLQkJdi0+Y291bnRlciA9IG5ldzsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQogewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgYywgb2xkOworCWMgPSBhdG9taWNfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JcmV0ID0gdi0+Y291bnRlcjsKLQlpZiAocmV0ICE9IHUpCi0JCXYtPmNvdW50ZXIgKz0gYTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gcmV0ICE9IHU7CisJcmV0dXJuIGMgIT0gKHUpOwogfQotI2VuZGlmIC8qICFDT05GSUdfR1VTQV9SQiAmJiAhQ09ORklHX0NQVV9TSDRBICovCi0KLSNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCi0jZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQogCiAjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbWIoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQlzbXBfbWIoKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCBkZGE5NmViLi5kYTNlYmVjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtNjMsNiArNjMsMTQgQEAKIAlpZiAoYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzICYmIFBhZ2VBbm9uKHBhZ2UpKQogCQlfX2ZsdXNoX2Fub25fcGFnZShwYWdlLCB2bWFkZHIpOwogfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2tlcm5lbF92bWFwX3JhbmdlKHZvaWQgKmFkZHIsIGludCBzaXplKQoreworCV9fZmx1c2hfd2JhY2tfcmVnaW9uKGFkZHIsIHNpemUpOworfQorc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqYWRkciwgaW50IHNpemUpCit7CisJX19mbHVzaF9pbnZhbGlkYXRlX3JlZ2lvbihhZGRyLCBzaXplKTsKK30KIAogI2RlZmluZSBBUkNIX0hBU19GTFVTSF9LRVJORUxfRENBQ0hFX1BBR0UKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9rZXJuZWxfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKaW5kZXggOWZlN2Q3Zi4uMTFkYTRjNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaApAQCAtMTQ2LDggKzE0NiwxNyBAQAogCS5mbGFncyA9IF9mbGFncywJCQkJCQlcCiB9CiAKK3N0cnVjdCBjbGtfZGl2NF90YWJsZSB7CisJc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSAqZGl2X211bHRfdGFibGU7CisJdm9pZCAoKmtpY2spKHN0cnVjdCBjbGsgKmNsayk7Cit9OworCiBpbnQgc2hfY2xrX2RpdjRfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAotCQkJIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgKnRhYmxlKTsKKwkJCSBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgKnRhYmxlKTsKK2ludCBzaF9jbGtfZGl2NF9lbmFibGVfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAorCQkJIHN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUpOworaW50IHNoX2Nsa19kaXY0X3JlcGFyZW50X3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsa3MsIGludCBuciwKKwkJCSBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgKnRhYmxlKTsKIAogI2RlZmluZSBTSF9DTEtfRElWNihfbmFtZSwgX3BhcmVudCwgX3JlZywgX2ZsYWdzKQlcCiB7CQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1ncmIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1ncmIuaAppbmRleCBlMjY4MWFiLi40Njc2YmY1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctZ3JiLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWdyYi5oCkBAIC01NywxMSArNTcsMTAgQEAKIAkJIiAgIG1vdi5sICBAJTEsICAgJTAgICAgICBcblx0IiAvKiBsb2FkICBvbGQgdmFsdWUgKi8KIAkJIiAgIGNtcC9lcSAgJTAsICAgJTIgICAgICBcblx0IgogCQkiICAgYmYgICAgICAgICAgICAxZiAgICAgIFxuXHQiIC8qIGlmIG5vdCBlcXVhbCAqLwotCQkiICAgbW92LmwgICAlMiwgICBAJTEgICAgIFxuXHQiIC8qIHN0b3JlIG5ldyB2YWx1ZSAqLworCQkiICAgbW92LmwgICAlMywgICBAJTEgICAgIFxuXHQiIC8qIHN0b3JlIG5ldyB2YWx1ZSAqLwogCQkiMTogbW92ICAgICByMSwgICByMTUgICAgIFxuXHQiIC8qIExPR09VVCAqLwotCQk6ICI9JnIiIChyZXR2YWwpLAotCQkgICIrciIgIChtKQotCQk6ICJyIiAgIChuZXcpCisJCTogIj0mciIgKHJldHZhbCkKKwkJOiAgInIiICAobSksICJyIiAgKG9sZCksICJyIiAgKG5ldykKIAkJOiAibWVtb3J5IiAsICJyMCIsICJyMSIsICJ0Iik7CiAKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDg3Y2VkMTMuLmJlYTMzMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTg5LDggKzg5LDYgQEAKIHsKIAlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKLQlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CS8qIGZvciBwb3J0YWJpbGl0eSAqLwotCiAJaWYgKGRtYV9yZWxlYXNlX2Zyb21fY29oZXJlbnQoZGV2LCBnZXRfb3JkZXIoc2l6ZSksIHZhZGRyKSkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaAppbmRleCA3OGVlZDNlMC4uZTkzNGEyZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oCkBAIC0yMCwxNCArMjAsMTQgQEAKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCXx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCiAjZGVmaW5lIGRtYW9yX3JlYWRfcmVnKG4pIFwKLSAgICAobiA/IGN0cmxfaW53KFNIX0RNQUNfQkFTRTEgKyBETUFPUikgXAotCTogY3RybF9pbncoU0hfRE1BQ19CQVNFMCArIERNQU9SKSkKKyAgICAobiA/IF9fcmF3X3JlYWR3KFNIX0RNQUNfQkFTRTEgKyBETUFPUikgXAorCTogX19yYXdfcmVhZHcoU0hfRE1BQ19CQVNFMCArIERNQU9SKSkKICNkZWZpbmUgZG1hb3Jfd3JpdGVfcmVnKG4sIGRhdGEpIFwKLSAgICAobiA/IGN0cmxfb3V0dyhkYXRhLCBTSF9ETUFDX0JBU0UxICsgRE1BT1IpIFwKLSAgICA6IGN0cmxfb3V0dyhkYXRhLCBTSF9ETUFDX0JBU0UwICsgRE1BT1IpKQorICAgIChuID8gX19yYXdfd3JpdGV3KGRhdGEsIFNIX0RNQUNfQkFTRTEgKyBETUFPUikgXAorICAgIDogX19yYXdfd3JpdGV3KGRhdGEsIFNIX0RNQUNfQkFTRTAgKyBETUFPUikpCiAjZWxzZSAvKiBPdGhlciBDUFUgKi8KLSNkZWZpbmUgZG1hb3JfcmVhZF9yZWcobikgY3RybF9pbncoU0hfRE1BQ19CQVNFMCArIERNQU9SKQotI2RlZmluZSBkbWFvcl93cml0ZV9yZWcobiwgZGF0YSkgY3RybF9vdXR3KGRhdGEsIFNIX0RNQUNfQkFTRTAgKyBETUFPUikKKyNkZWZpbmUgZG1hb3JfcmVhZF9yZWcobikgX19yYXdfcmVhZHcoU0hfRE1BQ19CQVNFMCArIERNQU9SKQorI2RlZmluZSBkbWFvcl93cml0ZV9yZWcobiwgZGF0YSkgX19yYXdfd3JpdGV3KGRhdGEsIFNIX0RNQUNfQkFTRTAgKyBETUFPUikKICNlbmRpZgogCiBzdGF0aWMgaW50IGRtdGVfaXJxX21hcFtdIF9fbWF5YmVfdW51c2VkID0gewpAQCAtNjQsOCArNjQsMTAgQEAKICNkZWZpbmUgQUNLX0wJMHgwMDAxMDAwMAogI2RlZmluZSBETV9JTkMJMHgwMDAwNDAwMAogI2RlZmluZSBETV9ERUMJMHgwMDAwODAwMAorI2RlZmluZSBETV9GSVgJMHgwMDAwYzAwMAogI2RlZmluZSBTTV9JTkMJMHgwMDAwMTAwMAogI2RlZmluZSBTTV9ERUMJMHgwMDAwMjAwMAorI2RlZmluZSBTTV9GSVgJMHgwMDAwMzAwMAogI2RlZmluZSBSU19JTgkweDAwMDAwMjAwCiAjZGVmaW5lIFJTX09VVAkweDAwMDAwMzAwCiAjZGVmaW5lIFRTX0JMSwkweDAwMDAwMDQwCkBAIC04Myw3ICs4NSw3IEBACiAgKiBEZWZpbmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZHVhbCBhZGRyZXNzIG1lbW9yeS1tZW1vcnkgdHJhbnNmZXIuCiAgKiBUaGUgMHg0MDAgdmFsdWUgcmVwcmVzZW50cyBhdXRvLXJlcXVlc3QsIGV4dGVybmFsLT5leHRlcm5hbC4KICAqLwotI2RlZmluZSBSU19EVUFMCShETV9JTkMgfCBTTV9JTkMgfCAweDQwMCB8IFRTXzMyKQorI2RlZmluZSBSU19EVUFMCShETV9JTkMgfCBTTV9JTkMgfCAweDQwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzMyQklUKSkKIAogLyogRE1BIGJhc2UgYWRkcmVzcyAqLwogc3RhdGljIHUzMiBkbWFfYmFzZV9hZGRyW10gX19tYXliZV91bnVzZWQgPSB7CkBAIC0xMjMsMTAgKzEyNSw0NyBAQAogICovCiAjZGVmaW5lIFNIRE1BX01JWF9JUlEJKDEgPDwgMSkKICNkZWZpbmUgU0hETUFfRE1BT1IxCSgxIDw8IDIpCi0jZGVmaW5lIFNIRE1BX0RNQUUxCQkoMSA8PCAzKQorI2RlZmluZSBTSERNQV9ETUFFMQkoMSA8PCAzKQorCitlbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZCB7CisJU0hETUFfU0xBVkVfU0NJRjBfVFgsCisJU0hETUFfU0xBVkVfU0NJRjBfUlgsCisJU0hETUFfU0xBVkVfU0NJRjFfVFgsCisJU0hETUFfU0xBVkVfU0NJRjFfUlgsCisJU0hETUFfU0xBVkVfU0NJRjJfVFgsCisJU0hETUFfU0xBVkVfU0NJRjJfUlgsCisJU0hETUFfU0xBVkVfU0NJRjNfVFgsCisJU0hETUFfU0xBVkVfU0NJRjNfUlgsCisJU0hETUFfU0xBVkVfU0NJRjRfVFgsCisJU0hETUFfU0xBVkVfU0NJRjRfUlgsCisJU0hETUFfU0xBVkVfU0NJRjVfVFgsCisJU0hETUFfU0xBVkVfU0NJRjVfUlgsCisJU0hETUFfU0xBVkVfU0lVQV9UWCwKKwlTSERNQV9TTEFWRV9TSVVBX1JYLAorCVNIRE1BX1NMQVZFX1NJVUJfVFgsCisJU0hETUFfU0xBVkVfU0lVQl9SWCwKKwlTSERNQV9TTEFWRV9OVU1CRVIsCS8qIE11c3Qgc3RheSBsYXN0ICovCit9OworCitzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZV9jb25maWcgeworCWVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkCXNsYXZlX2lkOworCWRtYV9hZGRyX3QJCQlhZGRyOworCXUzMgkJCQljaGNyOworCWNoYXIJCQkJbWlkX3JpZDsKK307CiAKIHN0cnVjdCBzaF9kbWFlX3BkYXRhIHsKIAl1bnNpZ25lZCBpbnQgbW9kZTsKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZV9jb25maWcgKmNvbmZpZzsKKwlpbnQgY29uZmlnX251bTsKK307CisKK3N0cnVjdCBkZXZpY2U7CisKK3N0cnVjdCBzaF9kbWFlX3NsYXZlIHsKKwllbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZAlzbGF2ZV9pZDsgLyogU2V0IGJ5IHRoZSBwbGF0Zm9ybSAqLworCXN0cnVjdCBkZXZpY2UJCQkqZG1hX2RldjsgLyogU2V0IGJ5IHRoZSBwbGF0Zm9ybSAqLworCXN0cnVjdCBzaF9kbWFlX3NsYXZlX2NvbmZpZwkqY29uZmlnOyAgLyogU2V0IGJ5IHRoZSBkcml2ZXIgKi8KIH07CiAKICNlbmRpZiAvKiBfX0RNQV9TSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2R3YXJmLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2R3YXJmLmgKaW5kZXggYmRjY2JiZi4uZDYyYWJkMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kd2FyZi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZHdhcmYuaApAQCAtMjQzLDE2ICsyNDMsMTMgQEAKIAogCXVuc2lnbmVkIGxvbmcgY2llX3BvaW50ZXI7CiAKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7Ci0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogI2RlZmluZSBEV0FSRl9DSUVfWl9BVUdNRU5UQVRJT04JKDEgPDwgMCkKIAotCS8qCi0JICogJ21vZCcgd2lsbCBiZSBub24tTlVMTCBpZiB0aGlzIENJRSBjYW1lIGZyb20gYSBtb2R1bGUncwotCSAqIC5laF9mcmFtZSBzZWN0aW9uLgotCSAqLwotCXN0cnVjdCBtb2R1bGUgKm1vZDsKKwkvKiBsaW5rZWQtbGlzdCBlbnRyeSBpZiB0aGlzIENJRSBpcyBmcm9tIGEgbW9kdWxlICovCisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCisJc3RydWN0IHJiX25vZGUgbm9kZTsKIH07CiAKIC8qKgpAQCAtMjY2LDEzICsyNjMsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3NfcmFuZ2U7CiAJdW5zaWduZWQgY2hhciAqaW5zdHJ1Y3Rpb25zOwogCXVuc2lnbmVkIGNoYXIgKmVuZDsKKworCS8qIGxpbmtlZC1saXN0IGVudHJ5IGlmIHRoaXMgRkRFIGlzIGZyb20gYSBtb2R1bGUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CiAKLQkvKgotCSAqICdtb2QnIHdpbGwgYmUgbm9uLU5VTEwgaWYgdGhpcyBGREUgY2FtZSBmcm9tIGEgbW9kdWxlJ3MKLQkgKiAuZWhfZnJhbWUgc2VjdGlvbi4KLQkgKi8KLQlzdHJ1Y3QgbW9kdWxlICptb2Q7CisJc3RydWN0IHJiX25vZGUgbm9kZTsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZml4bWFwLmgKaW5kZXggNWFjMWU0MC4uNmU3Y2VhNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC01NSwxNiArNTUsMjkgQEAKICNkZWZpbmUgRklYX05fQ09MT1VSUyA4CiAJRklYX0NNQVBfQkVHSU4sCiAJRklYX0NNQVBfRU5EID0gRklYX0NNQVBfQkVHSU4gKyAoRklYX05fQ09MT1VSUyAqIE5SX0NQVVMpIC0gMSwKLQlGSVhfVU5DQUNIRUQsCisKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCUZJWF9LTUFQX0JFR0lOLAkvKiByZXNlcnZlZCBwdGUncyBmb3IgdGVtcG9yYXJ5IGtlcm5lbCBtYXBwaW5ncyAqLwogCUZJWF9LTUFQX0VORCA9IEZJWF9LTUFQX0JFR0lOKyhLTV9UWVBFX05SKk5SX0NQVVMpLTEsCiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19JT1JFTUFQX0ZJWEVECisJLyoKKwkgKiBGSVhfSU9SRU1BUCBlbnRyaWVzIGFyZSB1c2VmdWwgZm9yIG1hcHBpbmcgcGh5c2ljYWwgYWRkcmVzcworCSAqIHNwYWNlIGJlZm9yZSBpb3JlbWFwKCkgaXMgdXNlYWJsZSwgZS5nLiByZWFsbHkgZWFybHkgaW4gYm9vdAorCSAqIGJlZm9yZSBrbWFsbG9jKCkgaXMgd29ya2luZy4KKwkgKi8KKyNkZWZpbmUgRklYX05fSU9SRU1BUFMJMzIKKwlGSVhfSU9SRU1BUF9CRUdJTiwKKwlGSVhfSU9SRU1BUF9FTkQgPSBGSVhfSU9SRU1BUF9CRUdJTiArIEZJWF9OX0lPUkVNQVBTLAorI2VuZGlmCisKIAlfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMKIH07CiAKIGV4dGVybiB2b2lkIF9fc2V0X2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsCiAJCQkgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBmbGFncyk7CitleHRlcm4gdm9pZCBfX2NsZWFyX2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsIHBncHJvdF90IGZsYWdzKTsKIAogI2RlZmluZSBzZXRfZml4bWFwKGlkeCwgcGh5cykgXAogCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZnB1LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZwdS5oCmluZGV4IGZiNmJiYjkuLjA2YzQyODEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZnB1LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9mcHUuaApAQCAtMiw4ICsyLDggQEAKICNkZWZpbmUgX19BU01fU0hfRlBVX0gKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKICNpZmRlZiBDT05GSUdfU0hfRlBVCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9mcHUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0xNiwyMiArMTYsMjMgQEAKIAlyZWdzLT5zciAmPSB+U1JfRkQ7CiB9CiAKLXN0cnVjdCB0YXNrX3N0cnVjdDsKLQogZXh0ZXJuIHZvaWQgc2F2ZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICpfX3Rzayk7Ci12b2lkIGZwdV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIHJlc3RvcmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqX190c2spOworZXh0ZXJuIHZvaWQgZnB1X3N0YXRlX3Jlc3RvcmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgX19mcHVfc3RhdGVfcmVzdG9yZSh2b2lkKTsKICNlbHNlCi0KLSNkZWZpbmUgc2F2ZV9mcHUodHNrKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSByZWxlYXNlX2ZwdShyZWdzKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGdyYWJfZnB1KHJlZ3MpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZwdV9zdGF0ZV9yZXN0b3JlKHJlZ3MpCWRvIHsgfSB3aGlsZSAoMCkKLQorI2RlZmluZSBzYXZlX2ZwdSh0c2spCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSByZXN0b3JlX2ZwdSh0c2spCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJlbGVhc2VfZnB1KHJlZ3MpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGdyYWJfZnB1KHJlZ3MpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmcHVfc3RhdGVfcmVzdG9yZShyZWdzKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2ZwdV9zdGF0ZV9yZXN0b3JlKHJlZ3MpCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiBzdHJ1Y3QgdXNlcl9yZWdzZXQ7CiAKIGV4dGVybiBpbnQgZG9fZnB1X2luc3QodW5zaWduZWQgc2hvcnQsIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGludCBpbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKIGV4dGVybiBpbnQgZnByZWdzX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKIAkJICAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCkBAIC02NSwxOCArNjYsNiBAQAogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGluaXRfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWlmICh0c2tfdXNlZF9tYXRoKHRzaykpIHsKLQkJaWYgKChib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpICYmIHRzayA9PSBjdXJyZW50KQotCQkJdW5sYXp5X2ZwdSh0c2ssIHRhc2tfcHRfcmVncyh0c2spKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKHRzayk7Ci0JcmV0dXJuIDA7Ci19Ci0KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fQVNNX1NIX0ZQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9pbnQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NWRkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9pbnQuaApAQCAtMCwwICsxLDY3IEBACisjaWZuZGVmIF9fQVNNX1NIX0hXX0JSRUFLUE9JTlRfSAorI2RlZmluZSBfX0FTTV9TSF9IV19CUkVBS1BPSU5UX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19BUkNIX0hXX0JSRUFLUE9JTlRfSAorCisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCB7CisJY2hhcgkJKm5hbWU7IC8qIENvbnRhaW5zIG5hbWUgb2YgdGhlIHN5bWJvbCB0byBzZXQgYmtwdCAqLworCXVuc2lnbmVkIGxvbmcJYWRkcmVzczsKKwl1MTYJCWxlbjsKKwl1MTYJCXR5cGU7Cit9OworCitlbnVtIHsKKwlTSF9CUkVBS1BPSU5UX1JFQUQJPSAoMSA8PCAxKSwKKwlTSF9CUkVBS1BPSU5UX1dSSVRFCT0gKDEgPDwgMiksCisJU0hfQlJFQUtQT0lOVF9SVwk9IFNIX0JSRUFLUE9JTlRfUkVBRCB8IFNIX0JSRUFLUE9JTlRfV1JJVEUsCisKKwlTSF9CUkVBS1BPSU5UX0xFTl8xCT0gKDEgPDwgMTIpLAorCVNIX0JSRUFLUE9JTlRfTEVOXzIJPSAoMSA8PCAxMyksCisJU0hfQlJFQUtQT0lOVF9MRU5fNAk9IFNIX0JSRUFLUE9JTlRfTEVOXzEgfCBTSF9CUkVBS1BPSU5UX0xFTl8yLAorCVNIX0JSRUFLUE9JTlRfTEVOXzgJPSAoMSA8PCAxNCksCit9OworCitzdHJ1Y3Qgc2hfdWJjIHsKKwljb25zdCBjaGFyCSpuYW1lOworCXVuc2lnbmVkIGludAludW1fZXZlbnRzOworCXVuc2lnbmVkIGludAl0cmFwX25yOworCXZvaWQJCSgqZW5hYmxlKShzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICosIGludCk7CisJdm9pZAkJKCpkaXNhYmxlKShzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICosIGludCk7CisJdm9pZAkJKCplbmFibGVfYWxsKSh1bnNpZ25lZCBsb25nKTsKKwl2b2lkCQkoKmRpc2FibGVfYWxsKSh2b2lkKTsKKwl1bnNpZ25lZCBsb25nCSgqYWN0aXZlX21hc2spKHZvaWQpOworCXVuc2lnbmVkIGxvbmcJKCp0cmlnZ2VyZWRfbWFzaykodm9pZCk7CisJdm9pZAkJKCpjbGVhcl90cmlnZ2VyZWRfbWFzaykodW5zaWduZWQgbG9uZyk7CisJc3RydWN0IGNsawkqY2xrOwkvKiBvcHRpb25hbCBpbnRlcmZhY2UgY2xvY2sgLyBNU1RQIGJpdCAqLworfTsKKworc3RydWN0IHBlcmZfZXZlbnQ7CitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CitzdHJ1Y3QgcG11OworCisvKiBNYXhpbXVtIG51bWJlciBvZiBVQkMgY2hhbm5lbHMgKi8KKyNkZWZpbmUgSEJQX05VTQkJMgorCisvKiBhcmNoL3NoL2tlcm5lbC9od19icmVha3BvaW50LmMgKi8KK2V4dGVybiBpbnQgYXJjaF9jaGVja192YV9pbl91c2Vyc3BhY2UodW5zaWduZWQgbG9uZyB2YSwgdTE2IGhicF9sZW4pOworZXh0ZXJuIGludCBhcmNoX3ZhbGlkYXRlX2h3YmtwdF9zZXR0aW5ncyhzdHJ1Y3QgcGVyZl9ldmVudCAqYnAsCisJCQkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CitleHRlcm4gaW50IGh3X2JyZWFrcG9pbnRfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKTsKKworaW50IGFyY2hfaW5zdGFsbF9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7Cit2b2lkIGFyY2hfdW5pbnN0YWxsX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKK3ZvaWQgaHdfYnJlYWtwb2ludF9wbXVfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOwordm9pZCBod19icmVha3BvaW50X3BtdV91bnRocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7CisKK2V4dGVybiB2b2lkIGFyY2hfZmlsbF9wZXJmX2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfc2hfdWJjKHN0cnVjdCBzaF91YmMgKik7CisKK2V4dGVybiBzdHJ1Y3QgcG11IHBlcmZfb3BzX2JwOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1NIX0hXX0JSRUFLUE9JTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDAyNmRkNjUuLjdkYWI3YjIzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCkBAIC0yMiw2ICsyMiw3IEBACiAgKiBmb3Igb2xkIGNvbXBhdCBjb2RlIGZvciBJL08gb2Zmc2V0aW5nIHRvIFN1cGVySU9zLCBhbGwgb2Ygd2hpY2ggYXJlCiAgKiBiZXR0ZXIgaGFuZGxlZCB0aHJvdWdoIHRoZSBtYWNodmVjIGlvcG9ydCBtYXBwaW5nIHJvdXRpbmVzIHRoZXNlIGRheXMuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CkBAIC03OSwxNiArODAsNTEgQEAKICNkZWZpbmUgd3JpdGVsKHYsYSkJCSh7IF9fcmF3X3dyaXRlbCgodiksKGEpKTsgbWIoKTsgfSkKICNkZWZpbmUgd3JpdGVxKHYsYSkJCSh7IF9fcmF3X3dyaXRlcSgodiksKGEpKTsgbWIoKTsgfSkKIAotLyogU3VwZXJIIG9uLWNoaXAgSS9PIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBjdHJsX2luYgkJX19yYXdfcmVhZGIKLSNkZWZpbmUgY3RybF9pbncJCV9fcmF3X3JlYWR3Ci0jZGVmaW5lIGN0cmxfaW5sCQlfX3Jhd19yZWFkbAotI2RlZmluZSBjdHJsX2lucQkJX19yYXdfcmVhZHEKKy8qCisgKiBMZWdhY3kgU3VwZXJIIG9uLWNoaXAgSS9PIGZ1bmN0aW9ucworICoKKyAqIFRoZXNlIGFyZSBhbGwgZGVwcmVjYXRlZCwgYWxsIG5ldyAoYW5kIGVzcGVjaWFsbHkgY3Jvc3MtcGxhdGZvcm0pIGNvZGUKKyAqIHNob3VsZCBiZSB1c2luZyB0aGUgX19yYXdfeHh4KCkgcm91dGluZXMgZGlyZWN0bHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTggX19kZXByZWNhdGVkIGN0cmxfaW5iKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGIoYWRkcik7Cit9CiAKLSNkZWZpbmUgY3RybF9vdXRiCQlfX3Jhd193cml0ZWIKLSNkZWZpbmUgY3RybF9vdXR3CQlfX3Jhd193cml0ZXcKLSNkZWZpbmUgY3RybF9vdXRsCQlfX3Jhd193cml0ZWwKLSNkZWZpbmUgY3RybF9vdXRxCQlfX3Jhd193cml0ZXEKK3N0YXRpYyBpbmxpbmUgdTE2IF9fZGVwcmVjYXRlZCBjdHJsX2ludyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIF9fcmF3X3JlYWR3KGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBfX2RlcHJlY2F0ZWQgY3RybF9pbmwodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBfX3Jhd19yZWFkbChhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1NjQgX19kZXByZWNhdGVkIGN0cmxfaW5xKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gX19yYXdfcmVhZHEoYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RlcHJlY2F0ZWQgY3RybF9vdXRiKHU4IHYsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX3Jhd193cml0ZWIodiwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RlcHJlY2F0ZWQgY3RybF9vdXR3KHUxNiB2LCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19yYXdfd3JpdGV3KHYsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZXByZWNhdGVkIGN0cmxfb3V0bCh1MzIgdiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fcmF3X3dyaXRlbCh2LCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZGVwcmVjYXRlZCBjdHJsX291dHEodTY0IHYsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX3Jhd193cml0ZXEodiwgYWRkcik7Cit9CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGdlbmVyaWNfaW9fYmFzZTsKIApAQCAtOTcsNiArMTMzLDI4IEBACiAJX19yYXdfcmVhZHcoZ2VuZXJpY19pb19iYXNlKTsKIH0KIAorI2RlZmluZSBfX0JVSUxEX1VOQ0FDSEVEX0lPKGJ3bHEsIHR5cGUpCQkJCQlcCitzdGF0aWMgaW5saW5lIHR5cGUgcmVhZCMjYndscSMjX3VuY2FjaGVkKHVuc2lnbmVkIGxvbmcgYWRkcikJCVwKK3sJCQkJCQkJCQlcCisJdHlwZSByZXQ7CQkJCQkJCVwKKwlqdW1wX3RvX3VuY2FjaGVkKCk7CQkJCQkJXAorCXJldCA9IF9fcmF3X3JlYWQjI2J3bHEoYWRkcik7CQkJCQlcCisJYmFja190b19jYWNoZWQoKTsJCQkJCQlcCisJcmV0dXJuIHJldDsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZSMjYndscSMjX3VuY2FjaGVkKHR5cGUgdiwgdW5zaWduZWQgbG9uZyBhZGRyKQlcCit7CQkJCQkJCQkJXAorCWp1bXBfdG9fdW5jYWNoZWQoKTsJCQkJCQlcCisJX19yYXdfd3JpdGUjI2J3bHEodiwgYWRkcik7CQkJCQlcCisJYmFja190b19jYWNoZWQoKTsJCQkJCQlcCit9CisKK19fQlVJTERfVU5DQUNIRURfSU8oYiwgdTgpCitfX0JVSUxEX1VOQ0FDSEVEX0lPKHcsIHUxNikKK19fQlVJTERfVU5DQUNIRURfSU8obCwgdTMyKQorX19CVUlMRF9VTkNBQ0hFRF9JTyhxLCB1NjQpCisKICNkZWZpbmUgX19CVUlMRF9NRU1PUllfU1RSSU5HKGJ3bHEsIHR5cGUpCQkJCVwKIAkJCQkJCQkJCVwKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZXMjI2J3bHEodm9sYXRpbGUgdm9pZCBfX2lvbWVtICptZW0sCVwKQEAgLTIzNCwyOCArMjkyLDIxIEBACiAgKi8KICNpZmRlZiBDT05GSUdfTU1VCiB2b2lkIF9faW9tZW0gKl9faW9yZW1hcF9jYWxsZXIodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpOworCQkJICAgICAgIHBncHJvdF90IHByb3QsIHZvaWQgKmNhbGxlcik7CiB2b2lkIF9faW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCi1fX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK19faW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQogewotCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKG9mZnNldCwgc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIob2Zmc2V0LCBzaXplLCBwcm90LCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCi1fX2lvcmVtYXBfbW9kZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorX19pb3JlbWFwXzI5Yml0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIMzIpICYmICFkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpICYmICFkZWZpbmVkKENPTkZJR19QTUIpCisjaWZkZWYgQ09ORklHXzI5QklUCiAJdW5zaWduZWQgbG9uZyBsYXN0X2FkZHIgPSBvZmZzZXQgKyBzaXplIC0gMTsKLSNlbmRpZgotCXZvaWQgX19pb21lbSAqcmV0OwogCi0JcmV0ID0gX19pb3JlbWFwX3RyYXBwZWQob2Zmc2V0LCBzaXplKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0jaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIMzIpICYmICFkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpICYmICFkZWZpbmVkKENPTkZJR19QTUIpCiAJLyoKIAkgKiBGb3IgUDEgYW5kIFAyIHNwYWNlIHRoaXMgaXMgdHJpdmlhbCwgYXMgZXZlcnl0aGluZyBpcyBhbHJlYWR5CiAJICogbWFwcGVkLiBVbmNhY2hlZCBhY2Nlc3MgZm9yIFAxIGFkZHJlc3NlcyBhcmUgZG9uZSB0aHJvdWdoIFAyLgpAQCAtMjYzLDcgKzMxNCw3IEBACiAJICogbWFwcGluZyBtdXN0IGJlIGRvbmUgYnkgdGhlIFBNQiBvciBieSB1c2luZyBwYWdlIHRhYmxlcy4KIAkgKi8KIAlpZiAobGlrZWx5KFBYU0VHKG9mZnNldCkgPCBQM1NFRyAmJiBQWFNFRyhsYXN0X2FkZHIpIDwgUDNTRUcpKSB7Ci0JCWlmICh1bmxpa2VseShmbGFncyAmIF9QQUdFX0NBQ0hBQkxFKSkKKwkJaWYgKHVubGlrZWx5KHBncHJvdF92YWwocHJvdCkgJiBfUEFHRV9DQUNIQUJMRSkpCiAJCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKVAxU0VHQUREUihvZmZzZXQpOwogCiAJCXJldHVybiAodm9pZCBfX2lvbWVtICopUDJTRUdBRERSKG9mZnNldCk7CkBAIC0yNzQsMjYgKzMyNSw3MCBAQAogCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKVA0U0VHQUREUihvZmZzZXQpOwogI2VuZGlmCiAKLQlyZXR1cm4gX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgZmxhZ3MpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitfX2lvcmVtYXBfbW9kZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQoreworCXZvaWQgX19pb21lbSAqcmV0OworCisJcmV0ID0gX19pb3JlbWFwX3RyYXBwZWQob2Zmc2V0LCBzaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gX19pb3JlbWFwXzI5Yml0KG9mZnNldCwgc2l6ZSwgcHJvdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBwcm90KTsKIH0KICNlbHNlCi0jZGVmaW5lIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIGZsYWdzKQkJKCh2b2lkIF9faW9tZW0gKikob2Zmc2V0KSkKLSNkZWZpbmUgX19pb3JlbWFwX21vZGUob2Zmc2V0LCBzaXplLCBmbGFncykJKCh2b2lkIF9faW9tZW0gKikob2Zmc2V0KSkKKyNkZWZpbmUgX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgcHJvdCkJCSgodm9pZCBfX2lvbWVtICopKG9mZnNldCkpCisjZGVmaW5lIF9faW9yZW1hcF9tb2RlKG9mZnNldCwgc2l6ZSwgcHJvdCkJKCh2b2lkIF9faW9tZW0gKikob2Zmc2V0KSkKICNkZWZpbmUgX19pb3VubWFwKGFkZHIpCQkJCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAKLSNkZWZpbmUgaW9yZW1hcChvZmZzZXQsIHNpemUpCQkJCVwKLQlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCAwKQotI2RlZmluZSBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKQkJCVwKLQlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCAwKQotI2RlZmluZSBpb3JlbWFwX2NhY2hlKG9mZnNldCwgc2l6ZSkJCQlcCi0JX19pb3JlbWFwX21vZGUoKG9mZnNldCksIChzaXplKSwgX1BBR0VfQ0FDSEFCTEUpCi0jZGVmaW5lIHAzX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBmbGFncykJCQlcCi0JX19pb3JlbWFwKChvZmZzZXQpLCAoc2l6ZSksIChmbGFncykpCi0jZGVmaW5lIGlvcmVtYXBfcHJvdChvZmZzZXQsIHNpemUsIGZsYWdzKQkJXAotCV9faW9yZW1hcF9tb2RlKChvZmZzZXQpLCAoc2l6ZSksIChmbGFncykpCi0jZGVmaW5lIGlvdW5tYXAoYWRkcikJCQkJCVwKLQlfX2lvdW5tYXAoKGFkZHIpKQorc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgoraW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXBfbW9kZShvZmZzZXQsIHNpemUsIFBBR0VfS0VSTkVMX05PQ0FDSEUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitpb3JlbWFwX2NhY2hlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcF9tb2RlKG9mZnNldCwgc2l6ZSwgUEFHRV9LRVJORUwpOworfQorCisjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitpb3JlbWFwX3Byb3QocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiBfX2lvcmVtYXBfbW9kZShvZmZzZXQsIHNpemUsIF9fcGdwcm90KGZsYWdzKSk7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JT1JFTUFQX0ZJWEVECitleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX2ZpeGVkKHJlc291cmNlX3NpemVfdCwgdW5zaWduZWQgbG9uZywKKwkJCQkgICB1bnNpZ25lZCBsb25nLCBwZ3Byb3RfdCk7CitleHRlcm4gaW50IGlvdW5tYXBfZml4ZWQodm9pZCBfX2lvbWVtICopOworZXh0ZXJuIHZvaWQgaW9yZW1hcF9maXhlZF9pbml0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKK2lvcmVtYXBfZml4ZWQocmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQoreworCUJVRygpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9yZW1hcF9maXhlZF9pbml0KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSBpbnQgaW91bm1hcF9maXhlZCh2b2lkIF9faW9tZW0gKmFkZHIpIHsgcmV0dXJuIC1FSU5WQUw7IH0KKyNlbmRpZgorCisjZGVmaW5lIGlvcmVtYXBfbm9jYWNoZQlpb3JlbWFwCisjZGVmaW5lIGlvdW5tYXAJCV9faW91bm1hcAogCiAjZGVmaW5lIG1heWJlYmFkaW8ocG9ydCkgXAogCXByaW50ayhLRVJOX0VSUiAiYmFkIFBDLWxpa2UgaW8gJXM6JXUgZm9yIHBvcnQgMHglbHggYXQgMHglMDh4XG4iLCBcCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2tkZWJ1Zy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9rZGVidWcuaAppbmRleCA5ODUyMTlmLi41ZjZkMmU5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2tkZWJ1Zy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20va2RlYnVnLmgKQEAgLTYsNiArNiw4IEBACiAJRElFX1RSQVAsCiAJRElFX05NSSwKIAlESUVfT09QUywKKwlESUVfQlJFQUtQT0lOVCwKKwlESUVfU1NURVAsCiB9OwogCiAjZW5kaWYgLyogX19BU01fU0hfS0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IGM3NDI2YWQuLjE1YTA1YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXUuaApAQCAtMTEsNyArMTEsOSBAQAogCiAjZGVmaW5lIFBNQl9BRERSCQkweGY2MTAwMDAwCiAjZGVmaW5lIFBNQl9EQVRBCQkweGY3MTAwMDAwCi0jZGVmaW5lIFBNQl9FTlRSWV9NQVgJCTE2CisKKyNkZWZpbmUgTlJfUE1CX0VOVFJJRVMJCTE2CisKICNkZWZpbmUgUE1CX0VfTUFTSwkJMHgwMDAwMDAwZgogI2RlZmluZSBQTUJfRV9TSElGVAkJOAogCkBAIC0yNSwxMSArMjcsMTUgQEAKICNkZWZpbmUgUE1CX0MJCQkweDAwMDAwMDA4CiAjZGVmaW5lIFBNQl9XVAkJCTB4MDAwMDAwMDEKICNkZWZpbmUgUE1CX1VCCQkJMHgwMDAwMDIwMAorI2RlZmluZSBQTUJfQ0FDSEVfTUFTSwkJKFBNQl9DIHwgUE1CX1dUIHwgUE1CX1VCKQogI2RlZmluZSBQTUJfVgkJCTB4MDAwMDAxMDAKIAogI2RlZmluZSBQTUJfTk9fRU5UUlkJCSgtMSkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAvKiBEZWZhdWx0ICJ1bnNpZ25lZCBsb25nIiBjb250ZXh0ICovCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1fY29udGV4dF9pZF90W05SX0NQVVNdOwpAQCAtNDcsMjkgKzUzLDMwIEBACiAjZW5kaWYKIH0gbW1fY29udGV4dF90OwogCi1zdHJ1Y3QgcG1iX2VudHJ5OwotCi1zdHJ1Y3QgcG1iX2VudHJ5IHsKLQl1bnNpZ25lZCBsb25nIHZwbjsKLQl1bnNpZ25lZCBsb25nIHBwbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKiAwIC4uIE5SX1BNQl9FTlRSSUVTIGZvciBzcGVjaWZpYyBlbnRyeSBzZWxlY3Rpb24sIG9yCi0JICogUE1CX05PX0VOVFJZIHRvIHNlYXJjaCBmb3IgYSBmcmVlIG9uZQotCSAqLwotCWludCBlbnRyeTsKLQotCXN0cnVjdCBwbWJfZW50cnkgKm5leHQ7Ci0JLyogQWRqYWNlbnQgZW50cnkgbGluayBmb3IgY29udGlndW91cyBtdWx0aS1lbnRyeSBtYXBwaW5ncyAqLwotCXN0cnVjdCBwbWJfZW50cnkgKmxpbms7Ci19OwotCisjaWZkZWYgQ09ORklHX1BNQgogLyogYXJjaC9zaC9tbS9wbWIuYyAqLwogbG9uZyBwbWJfcmVtYXAodW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIHBoeXMsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CisJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCk7CiB2b2lkIHBtYl91bm1hcCh1bnNpZ25lZCBsb25nIGFkZHIpOwotaW50IHBtYl9pbml0KHZvaWQpOwordm9pZCBwbWJfaW5pdCh2b2lkKTsKK2Jvb2wgX19pbl8yOWJpdF9tb2RlKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgbG9uZyBwbWJfcmVtYXAodW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIHBoeXMsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworI2RlZmluZSBwbWJfdW5tYXAoYWRkcikJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcG1iX2luaXQoYWRkcikJCWRvIHsgfSB3aGlsZSAoMCkKKworI2lmZGVmIENPTkZJR18yOUJJVAorI2RlZmluZSBfX2luXzI5Yml0X21vZGUoKQkoMSkKKyNlbHNlCisjZGVmaW5lIF9faW5fMjliaXRfbW9kZSgpCSgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfUE1CICovCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfX01NVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggNDEwODBiMS4uMzg0Yzc0NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMTU4LDcgKzE1OCw3IEBACiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCS8qIEVuYWJsZSBNTVUgKi8KLQljdHJsX291dGwoTU1VX0NPTlRST0xfSU5JVCwgTU1VQ1IpOworCV9fcmF3X3dyaXRlbChNTVVfQ09OVFJPTF9JTklULCBNTVVDUik7CiAJY3RybF9iYXJyaWVyKCk7CiAKIAlpZiAoYXNpZF9jYWNoZShjcHUpID09IE5PX0NPTlRFWFQpCkBAIC0xNzEsOSArMTcxLDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGNyOwogCi0JY3IgPSBjdHJsX2lubChNTVVDUik7CisJY3IgPSBfX3Jhd19yZWFkbChNTVVDUik7CiAJY3IgJj0gfk1NVV9DT05UUk9MX0lOSVQ7Ci0JY3RybF9vdXRsKGNyLCBNTVVDUik7CisJX19yYXdfd3JpdGVsKGNyLCBNTVVDUik7CiAKIAljdHJsX2JhcnJpZXIoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaAppbmRleCA4ZWY4MDBjLi4xMGUyZTE3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oCkBAIC00OSwxMSArNDksMTEgQEAKIC8qIE1NVV9UVEIgaXMgdXNlZCBmb3Igb3B0aW1pemluZyB0aGUgZmF1bHQgaGFuZGxpbmcuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X1RUQihwZ2RfdCAqcGdkKQogewotCWN0cmxfb3V0bCgodW5zaWduZWQgbG9uZylwZ2QsIE1NVV9UVEIpOworCV9fcmF3X3dyaXRlbCgodW5zaWduZWQgbG9uZylwZ2QsIE1NVV9UVEIpOwogfQogCiBzdGF0aWMgaW5saW5lIHBnZF90ICpnZXRfVFRCKHZvaWQpCiB7Ci0JcmV0dXJuIChwZ2RfdCAqKWN0cmxfaW5sKE1NVV9UVEIpOworCXJldHVybiAocGdkX3QgKilfX3Jhd19yZWFkbChNTVVfVFRCKTsKIH0KICNlbmRpZiAvKiBfX0FTTV9TSF9NTVVfQ09OVEVYVF8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tb2R1bGUuaAppbmRleCAwNjhiZjE2Li5iNzkyN2RlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21vZHVsZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW9kdWxlLmgKQEAgLTEsNyArMSwyMiBAQAogI2lmbmRlZiBfQVNNX1NIX01PRFVMRV9ICiAjZGVmaW5lIF9BU01fU0hfTU9EVUxFX0gKIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21vZHVsZS5oPgorc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsKKyNpZmRlZiBDT05GSUdfRFdBUkZfVU5XSU5ERVIKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZkZV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgY2llX2xpc3Q7CisjZW5kaWYKK307CisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgRWxmX1NoZHIgRWxmNjRfU2hkcgorI2RlZmluZSBFbGZfU3ltIEVsZjY0X1N5bQorI2RlZmluZSBFbGZfRWhkciBFbGY2NF9FaGRyCisjZWxzZQorI2RlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCisjZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCisjZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOCiAjIGlmZGVmIENPTkZJR19DUFVfU0gyCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDgxYmZmYzAuLmQ3MWZlYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC00NSw2ICs0NSw3IEBACiAjZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vdW5jYWNoZWQuaD4KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2htX2FsaWduX21hc2s7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbG93X3BmbiwgbWluX2xvd19wZm47CkBAIC01Niw3ICs1Nyw2IEBACiAJcmV0dXJuIChhZGRyMSBeIGFkZHIyKSAmIHNobV9hbGlnbl9tYXNrOwogfQogCi0KICNkZWZpbmUgY2xlYXJfcGFnZShwYWdlKQltZW1zZXQoKHZvaWQgKikocGFnZSksIDAsIFBBR0VfU0laRSkKIGV4dGVybiB2b2lkIGNvcHlfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSk7CiAKQEAgLTg4LDcgKzg4LDcgQEAKICNkZWZpbmUgX19wdGUoeCkJKChwdGVfdCkgeyAoeCkgfSApCiAjZWxzZQogdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGxvbmcgcHRlX2xvdzsgfSBwdGVfdDsKLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7CiB0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OwogI2RlZmluZSBwdGVfdmFsKHgpCSgoeCkucHRlX2xvdykKICNkZWZpbmUgX19wdGUoeCkJKChwdGVfdCkgeyAoeCkgfSApCkBAIC0xMjcsMTIgKzEyNyw3IEBACiAgKiBpcyBub3QgdmlzaWJsZSAoaXQgaXMgcGFydCBvZiB0aGUgUE1CIG1hcHBpbmcpIGFuZCBzbyBuZWVkcyB0byBiZQogICogYWRkZWQgb3Igc3VidHJhY3RlZCBhcyByZXF1aXJlZC4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkKLS8qIHBoeXMgPSB2aXJ0IC0gUEFHRV9PRkZTRVQgLSAoX19NRU1PUllfU1RBUlQgJiAweGUwMDAwMDAwKSAqLwotI2RlZmluZSBQTUJfT0ZGU0VUCShQQUdFX09GRlNFVCAtIFBYU0VHKF9fTUVNT1JZX1NUQVJUKSkKLSNkZWZpbmUgX19wYSh4KQkoKHVuc2lnbmVkIGxvbmcpKHgpIC0gUE1CX09GRlNFVCkKLSNkZWZpbmUgX192YSh4KQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpICsgUE1CX09GRlNFVCkpCi0jZWxpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkKKyNpZmRlZiBDT05GSUdfUE1CCiAjZGVmaW5lIF9fcGEoeCkJKCh1bnNpZ25lZCBsb25nKSh4KS1QQUdFX09GRlNFVCtfX01FTU9SWV9TVEFSVCkKICNkZWZpbmUgX192YSh4KQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpK1BBR0VfT0ZGU0VULV9fTUVNT1JZX1NUQVJUKSkKICNlbHNlCkBAIC0xNDAsNiArMTM1LDE0IEBACiAjZGVmaW5lIF9fdmEoeCkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KStQQUdFX09GRlNFVCkpCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19VTkNBQ0hFRF9NQVBQSU5HCisjZGVmaW5lIFVOQ0FDX0FERFIoYWRkcikJKChhZGRyKSAtIFBBR0VfT0ZGU0VUICsgdW5jYWNoZWRfc3RhcnQpCisjZGVmaW5lIENBQ19BRERSKGFkZHIpCQkoKGFkZHIpIC0gdW5jYWNoZWRfc3RhcnQgKyBQQUdFX09GRlNFVCkKKyNlbHNlCisjZGVmaW5lIFVOQ0FDX0FERFIoYWRkcikJKChhZGRyKSkKKyNkZWZpbmUgQ0FDX0FERFIoYWRkcikJCSgoYWRkcikpCisjZW5kaWYKKwogI2RlZmluZSBwZm5fdG9fa2FkZHIocGZuKQlfX3ZhKChwZm4pIDw8IFBBR0VfU0hJRlQpCiAjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkocGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggNjdmMzk5OS4uMTA0MmY3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BjaS5oCkBAIC0xNSwyMCArMTUsNDkgQEAKICAqLwogc3RydWN0IHBjaV9jaGFubmVsIHsKIAlzdHJ1Y3QgcGNpX2NoYW5uZWwJKm5leHQ7CisJc3RydWN0IHBjaV9idXMJCSpidXM7CiAKIAlzdHJ1Y3QgcGNpX29wcwkJKnBjaV9vcHM7Ci0Jc3RydWN0IHJlc291cmNlCQkqaW9fcmVzb3VyY2U7Ci0Jc3RydWN0IHJlc291cmNlCQkqbWVtX3Jlc291cmNlOworCisJc3RydWN0IHJlc291cmNlCQkqcmVzb3VyY2VzOworCXVuc2lnbmVkIGludAkJbnJfcmVzb3VyY2VzOwogCiAJdW5zaWduZWQgbG9uZwkJaW9fb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcJCW1lbV9vZmZzZXQ7CiAKIAl1bnNpZ25lZCBsb25nCQlyZWdfYmFzZTsKLQogCXVuc2lnbmVkIGxvbmcJCWlvX21hcF9iYXNlOworCisJdW5zaWduZWQgaW50CQlpbmRleDsKKwl1bnNpZ25lZCBpbnQJCW5lZWRfZG9tYWluX2luZm87CisKKwkvKiBPcHRpb25hbCBlcnJvciBoYW5kbGluZyAqLworCXN0cnVjdCB0aW1lcl9saXN0CWVycl90aW1lciwgc2Vycl90aW1lcjsKKwl1bnNpZ25lZCBpbnQJCWVycl9pcnEsIHNlcnJfaXJxOwogfTsKIAotZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKTsKKy8qIGFyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMgKi8KK2V4dGVybiBpbnQgcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKTsKK2V4dGVybiB2b2lkIHBjaWJpb3NfcmVwb3J0X3N0YXR1cyh1bnNpZ25lZCBpbnQgc3RhdHVzX21hc2ssIGludCB3YXJuKTsKKworLyogYXJjaC9zaC9kcml2ZXJzL3BjaS9jb21tb24uYyAqLworZXh0ZXJuIGludCBlYXJseV9yZWFkX2NvbmZpZ19ieXRlKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwgaW50IHRvcF9idXMsCisJCQkJICBpbnQgYnVzLCBpbnQgZGV2Zm4sIGludCBvZmZzZXQsIHU4ICp2YWx1ZSk7CitleHRlcm4gaW50IGVhcmx5X3JlYWRfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLCBpbnQgdG9wX2J1cywKKwkJCQkgIGludCBidXMsIGludCBkZXZmbiwgaW50IG9mZnNldCwgdTE2ICp2YWx1ZSk7CitleHRlcm4gaW50IGVhcmx5X3JlYWRfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwgaW50IHRvcF9idXMsCisJCQkJICAgaW50IGJ1cywgaW50IGRldmZuLCBpbnQgb2Zmc2V0LCB1MzIgKnZhbHVlKTsKK2V4dGVybiBpbnQgZWFybHlfd3JpdGVfY29uZmlnX2J5dGUoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLCBpbnQgdG9wX2J1cywKKwkJCQkgICBpbnQgYnVzLCBpbnQgZGV2Zm4sIGludCBvZmZzZXQsIHU4IHZhbHVlKTsKK2V4dGVybiBpbnQgZWFybHlfd3JpdGVfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLCBpbnQgdG9wX2J1cywKKwkJCQkgICBpbnQgYnVzLCBpbnQgZGV2Zm4sIGludCBvZmZzZXQsIHUxNiB2YWx1ZSk7CitleHRlcm4gaW50IGVhcmx5X3dyaXRlX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsIGludCB0b3BfYnVzLAorCQkJCSAgICBpbnQgYnVzLCBpbnQgZGV2Zm4sIGludCBvZmZzZXQsIHUzMiB2YWx1ZSk7CitleHRlcm4gdm9pZCBwY2liaW9zX2VuYWJsZV90aW1lcnMoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcGNpYmlvc19oYW5kbGVfc3RhdHVzX2Vycm9ycyh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJIHVuc2lnbmVkIGludCBzdGF0dXMsIHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSk7CitleHRlcm4gaW50IHBjaV9pc182Nm1oel9jYXBhYmxlKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwKKwkJCQlpbnQgdG9wX2J1cywgaW50IGN1cnJlbnRfYnVzKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgUENJQklPU19NSU5fSU8sIFBDSUJJT1NfTUlOX01FTTsKIApAQCAtOTksMjAgKzEyOCw2IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TVVBFUkgzMgotLyoKLSAqIElmIHdlJ3JlIG9uIGFuIFNINzc1MSBvciBTSDc3ODAgUENJIGNvbnRyb2xsZXIsIFBDSSBtZW1vcnkgaXMgbWFwcGVkCi0gKiBhdCB0aGUgZW5kIG9mIHRoZSBhZGRyZXNzIHNwYWNlIGluIGEgc3BlY2lhbCBub24tdHJhbnNsYXRhYmxlIGFyZWEuCi0gKi8KLSNkZWZpbmUgUENJX01FTV9GSVhFRF9TVEFSVAkweGZkMDAwMDAwCi0jZGVmaW5lIFBDSV9NRU1fRklYRURfRU5ECShQQ0lfTUVNX0ZJWEVEX1NUQVJUICsgMHgwMTAwMDAwMCkKLQotI2RlZmluZSBpc19wY2lfbWVtb3J5X2ZpeGVkX3JhbmdlKHMsIGUpCVwKLQkoKHMpID49IFBDSV9NRU1fRklYRURfU1RBUlQgJiYgKGUpIDwgUENJX01FTV9GSVhFRF9FTkQpCi0jZWxzZQotI2RlZmluZSBpc19wY2lfbWVtb3J5X2ZpeGVkX3JhbmdlKHMsIGUpCSgwKQotI2VuZGlmCi0KIC8qIEJvYXJkLXNwZWNpZmljIGZpeHVwIHJvdXRpbmVzLiAqLwogaW50IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pOwogCkBAIC0xMjIsNiArMTM3LDE0IEBACiBleHRlcm4gdm9pZCBwY2liaW9zX2J1c190b19yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJCQkgICAgc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24pOwogCisjZGVmaW5lIHBjaV9kb21haW5fbnIoYnVzKSAoKHN0cnVjdCBwY2lfY2hhbm5lbCAqKShidXMpLT5zeXNkYXRhKS0+aW5kZXgKKworc3RhdGljIGlubGluZSBpbnQgcGNpX3Byb2NfZG9tYWluKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gYnVzLT5zeXNkYXRhOworCXJldHVybiBob3NlLT5uZWVkX2RvbWFpbl9pbmZvOworfQorCiAvKiBDaGFuY2VzIGFyZSB0aGlzIGludGVycnVwdCBpcyB3aXJlZCBQQy1zdHlsZSAuLi4gICovCiBzdGF0aWMgaW5saW5lIGludCBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjaGFubmVsKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCA2M2NhMzdiLi44YzAwNzg1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtNCw4ICs0LDE2IEBACiAjaW5jbHVkZSA8bGludXgvcXVpY2tsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAotI2RlZmluZSBRVUlDS19QR0QgMAkvKiBXZSBwcmVzZXJ2ZSBzcGVjaWFsIG1hcHBpbmdzIG92ZXIgZnJlZSAqLwotI2RlZmluZSBRVUlDS19QVCAxCS8qIE90aGVyIHBhZ2UgdGFibGUgcGFnZXMgdGhhdCBhcmUgemVybyBvbiBmcmVlICovCisjZGVmaW5lIFFVSUNLX1BUIDAJLyogT3RoZXIgcGFnZSB0YWJsZSBwYWdlcyB0aGF0IGFyZSB6ZXJvIG9uIGZyZWUgKi8KKworZXh0ZXJuIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTsKKworI2lmIFBBR0VUQUJMRV9MRVZFTFMgPiAyCitleHRlcm4gdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWRwLCBwbWRfdCAqcG1kKTsKK2V4dGVybiBwbWRfdCAqcG1kX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK2V4dGVybiB2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKTsKKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKIAkJCQkgICAgICAgcHRlX3QgKnB0ZSkKQEAgLTIwLDI4ICsyOCw5IEBACiB9CiAjZGVmaW5lIHBtZF9wZ3RhYmxlKHBtZCkgcG1kX3BhZ2UocG1kKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGdkX2N0b3Iodm9pZCAqeCkKLXsKLQlwZ2RfdCAqcGdkID0geDsKLQotCW1lbWNweShwZ2QgKyBVU0VSX1BUUlNfUEVSX1BHRCwKLQkgICAgICAgc3dhcHBlcl9wZ19kaXIgKyBVU0VSX1BUUlNfUEVSX1BHRCwKLQkgICAgICAgKFBUUlNfUEVSX1BHRCAtIFVTRVJfUFRSU19QRVJfUEdEKSAqIHNpemVvZihwZ2RfdCkpOwotfQotCiAvKgogICogQWxsb2NhdGUgYW5kIGZyZWUgcGFnZSB0YWJsZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlyZXR1cm4gcXVpY2tsaXN0X2FsbG9jKFFVSUNLX1BHRCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFUEVBVCwgcGdkX2N0b3IpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpCi17Ci0JcXVpY2tsaXN0X2ZyZWUoUVVJQ0tfUEdELCBOVUxMLCBwZ2QpOwotfQotCiBzdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CkBAIC04MSw3ICs3MCw2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19wZ3RfY2FjaGUodm9pZCkKIHsKLQlxdWlja2xpc3RfdHJpbShRVUlDS19QR0QsIE5VTEwsIDI1LCAxNik7CiAJcXVpY2tsaXN0X3RyaW0oUVVJQ0tfUFQsIE5VTEwsIDI1LCAxNik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWJkODlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX19BU01fU0hfUEdUQUJMRV8yTEVWRUxfSAorI2RlZmluZSBfX0FTTV9TSF9QR1RBQkxFXzJMRVZFTF9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmg+CisKKy8qCisgKiB0cmFkaXRpb25hbCB0d28tbGV2ZWwgcGFnaW5nIHN0cnVjdHVyZQorICovCisjZGVmaW5lIFBBR0VUQUJMRV9MRVZFTFMJMgorCisvKiBQVEUgYml0cyAqLworI2RlZmluZSBQVEVfTUFHTklUVURFCQkyCS8qIDMyLWJpdCBQVEVzICovCisKKyNkZWZpbmUgUFRFX1NISUZUCQlQQUdFX1NISUZUCisjZGVmaW5lIFBURV9CSVRTCQkoUFRFX1NISUZUIC0gUFRFX01BR05JVFVERSkKKworLyogUEdEIGJpdHMgKi8KKyNkZWZpbmUgUEdESVJfU0hJRlQJCShQVEVfU0hJRlQgKyBQVEVfQklUUykKKworI2RlZmluZSBQVFJTX1BFUl9QR0QJCShQQUdFX1NJWkUgLyAoMSA8PCBQVEVfTUFHTklUVURFKSkKKyNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJKFRBU0tfU0laRS9QR0RJUl9TSVpFKQorCisjZW5kaWYgLyogX19BU01fU0hfUEdUQUJMRV8yTEVWRUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OWE5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBfX0FTTV9TSF9QR1RBQkxFXzNMRVZFTF9ICisjZGVmaW5lIF9fQVNNX1NIX1BHVEFCTEVfM0xFVkVMX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKworLyoKKyAqIFNvbWUgY29yZXMgbmVlZCBhIDMtbGV2ZWwgcGFnZSB0YWJsZSBsYXlvdXQsIGZvciBleGFtcGxlIHdoZW4gdXNpbmcKKyAqIDY0LWJpdCBQVEVzIGFuZCA0SyBwYWdlcy4KKyAqLworI2RlZmluZSBQQUdFVEFCTEVfTEVWRUxTCTMKKworI2RlZmluZSBQVEVfTUFHTklUVURFCQkzCS8qIDY0LWJpdCBQVEVzIG9uIFNILVgyIFRMQiAqLworCisvKiBQR0QgYml0cyAqLworI2RlZmluZSBQR0RJUl9TSElGVAkJMzAKKworI2RlZmluZSBQVFJTX1BFUl9QR0QJCTQKKyNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJMgorCisvKiBQTUQgYml0cyAqLworI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyAoUEFHRV9TSElGVCAtIFBURV9NQUdOSVRVREUpKQorI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKKyNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCisKKyNkZWZpbmUgUFRSU19QRVJfUE1ECSgoMSA8PCBQR0RJUl9TSElGVCkgLyBQTURfU0laRSkKKworI2RlZmluZSBwbWRfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwbWQgJTAxNmxseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcG1kX3ZhbChlKSkKKwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGxvbmcgcG1kOyB9IHBtZF90OworI2RlZmluZSBwbWRfdmFsKHgpCSgoeCkucG1kKQorI2RlZmluZSBfX3BtZCh4KQkoKHBtZF90KSB7ICh4KSB9ICkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB1ZF9wYWdlX3ZhZGRyKHB1ZF90IHB1ZCkKK3sKKwlyZXR1cm4gcHVkX3ZhbChwdWQpOworfQorCisjZGVmaW5lIHBtZF9pbmRleChhZGRyZXNzKQkoKChhZGRyZXNzKSA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRC0xKSkKK3N0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9vZmZzZXQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAocG1kX3QgKilwdWRfcGFnZV92YWRkcigqcHVkKSArIHBtZF9pbmRleChhZGRyZXNzKTsKK30KKworI2RlZmluZSBwdWRfbm9uZSh4KQkoIXB1ZF92YWwoeCkpCisjZGVmaW5lIHB1ZF9wcmVzZW50KHgpCShwdWRfdmFsKHgpKQorI2RlZmluZSBwdWRfY2xlYXIoeHApCWRvIHsgc2V0X3B1ZCh4cCwgX19wdWQoMCkpOyB9IHdoaWxlICgwKQorI2RlZmluZQlwdWRfYmFkKHgpCShwdWRfdmFsKHgpICYgflBBR0VfTUFTSykKKworLyoKKyAqIChwdWRzIGFyZSBmb2xkZWQgaW50byBwZ2RzIHNvIHRoaXMgZG9lc24ndCBnZXQgYWN0dWFsbHkgY2FsbGVkLAorICogYnV0IHRoZSBkZWZpbmUgaXMgbmVlZGVkIGZvciBhIGdlbmVyaWMgaW5saW5lIGZ1bmN0aW9uLikKKyAqLworI2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKSBkbyB7ICoocHVkcHRyKSA9IChwdWR2YWwpOyB9IHdoaWxlKDApCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9QR1RBQkxFXzNMRVZFTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGJhMzA0NmUuLjAyZjc3NDUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xMiw3ICsxMiwxMSBAQAogI2lmbmRlZiBfX0FTTV9TSF9QR1RBQkxFX0gKICNkZWZpbmUgX19BU01fU0hfUEdUQUJMRV9ICiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmg+CisjaWZkZWYgQ09ORklHX1gyVExCCisjaW5jbHVkZSA8YXNtL3BndGFibGUtM2xldmVsLmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLTJsZXZlbC5oPgorI2VuZGlmCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KQEAgLTUxLDI4ICs1NSwxMiBAQAogI2RlZmluZQlOUEhZU19TSUdOCSgxTEwgPDwgKE5QSFlTIC0gMSkpCiAjZGVmaW5lCU5QSFlTX01BU0sJKC0xTEwgPDwgTlBIWVMpCiAKLS8qCi0gKiB0cmFkaXRpb25hbCB0d28tbGV2ZWwgcGFnaW5nIHN0cnVjdHVyZQotICovCi0vKiBQVEUgYml0cyAqLwotI2lmIGRlZmluZWQoQ09ORklHX1gyVExCKSB8fCBkZWZpbmVkKENPTkZJR19TVVBFUkg2NCkKLSMgZGVmaW5lIFBURV9NQUdOSVRVREUJMwkvKiA2NC1iaXQgUFRFcyBvbiBleHRlbmRlZCBtb2RlIFNILVgyIFRMQiAqLwotI2Vsc2UKLSMgZGVmaW5lIFBURV9NQUdOSVRVREUJMgkvKiAzMi1iaXQgUFRFcyAqLwotI2VuZGlmCi0jZGVmaW5lIFBURV9TSElGVAlQQUdFX1NISUZUCi0jZGVmaW5lIFBURV9CSVRTCShQVEVfU0hJRlQgLSBQVEVfTUFHTklUVURFKQotCi0vKiBQR0QgYml0cyAqLwotI2RlZmluZSBQR0RJUl9TSElGVAkoUFRFX1NISUZUICsgUFRFX0JJVFMpCiAjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKICNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQogCiAvKiBFbnRyaWVzIHBlciBsZXZlbCAqLwogI2RlZmluZSBQVFJTX1BFUl9QVEUJKFBBR0VfU0laRSAvICgxIDw8IFBURV9NQUdOSVRVREUpKQotI2RlZmluZSBQVFJTX1BFUl9QR0QJKFBBR0VfU0laRSAvIHNpemVvZihwZ2RfdCkpCiAKLSNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJKFRBU0tfU0laRS9QR0RJUl9TSVpFKQogI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAogCiAjZGVmaW5lIFBIWVNfQUREUl9NQVNLMjkJCTB4MWZmZmZmZmYKQEAgLTE1Myw5ICsxNDEsOSBAQAogI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCgoeCkucHRlX2xvdyA+PiBQQUdFX1NISUZUKSkpCiAKIC8qCi0gKiBObyBwYWdlIHRhYmxlIGNhY2hlcyB0byBpbml0aWFsaXNlCisgKiBJbml0aWFsaXNlIHRoZSBwYWdlIHRhYmxlIGNhY2hlcwogICovCi0jZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpCWRvIHsgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKTsKIAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwogCkBAIC0xNjUsOCArMTUzLDkgQEAKIAkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCit1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogeworCXB0ZV90IHB0ZSA9ICpwdGVwOwogCV9fdXBkYXRlX2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKTsKIAlfX3VwZGF0ZV90bGIodm1hLCBhZGRyZXNzLCBwdGUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAppbmRleCA1MDAzZWU4Li5lMTcyZDY5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaApAQCAtNzEsNiArNzEsOCBAQAogI2RlZmluZSBfUEFHRV9FWFRfS0VSTl9XUklURQkweDEwMDAJLyogRVBSNC1iaXQ6IEtlcm5lbCBzcGFjZSB3cml0YWJsZSAqLwogI2RlZmluZSBfUEFHRV9FWFRfS0VSTl9SRUFECTB4MjAwMAkvKiBFUFI1LWJpdDogS2VybmVsIHNwYWNlIHJlYWRhYmxlICovCiAKKyNkZWZpbmUgX1BBR0VfRVhUX1dJUkVECQkweDQwMDAJLyogc29mdHdhcmU6IFdpcmUgVExCIGVudHJ5ICovCisKIC8qIFdyYXBwZXIgZm9yIGV4dGVuZGVkIG1vZGUgcGdwcm90IHR3aWRkbGluZyAqLwogI2RlZmluZSBfUEFHRV9FWFQoeCkJCSgodW5zaWduZWQgbG9uZyBsb25nKSh4KSA8PCAzMikKIApAQCAtMTQxLDEyICsxNDMsMTQgQEAKICMgZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NE1CKQogIyAgZGVmaW5lIF9QQUdFX1NaSFVHRQkoX1BBR0VfRVhUX0VTWjIgfCBfUEFHRV9FWFRfRVNaMykKICMgZW5kaWYKKyMgZGVmaW5lIF9QQUdFX1dJUkVECShfUEFHRV9FWFQoX1BBR0VfRVhUX1dJUkVEKSkKICNlbHNlCiAjIGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0SykKICMgIGRlZmluZSBfUEFHRV9TWkhVR0UJKF9QQUdFX1NaMSkKICMgZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV8xTUIpCiAjICBkZWZpbmUgX1BBR0VfU1pIVUdFCShfUEFHRV9TWjAgfCBfUEFHRV9TWjEpCiAjIGVuZGlmCisjIGRlZmluZSBfUEFHRV9XSVJFRAkoMCkKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAppbmRleCAxN2NkYmVjLi4wZWU0Njc3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaApAQCAtNDMsMTEgKzQzLDYgQEAKIH0KICNkZWZpbmUgc2V0X3B0ZV9hdChtbSxhZGRyLHB0ZXAscHRldmFsKSBzZXRfcHRlKHB0ZXAscHRldmFsKQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHBtZF9zZXQocG1kX3QgKnBtZHAscHRlX3QgKnB0ZXApCi17Ci0JcG1kX3ZhbCgqcG1kcCkgPSAodW5zaWduZWQgbG9uZykgcHRlcDsKLX0KLQogLyoKICAqIFBHRCBkZWZpbmVzLiBUb3AgbGV2ZWwuCiAgKi8KQEAgLTEyOCw4ICsxMjMsMjEgQEAKICNkZWZpbmUgX1BBR0VfRElSVFkJMHg0MDAgIC8qIHNvZnR3YXJlOiBwYWdlIGFjY2Vzc2VkIGluIHdyaXRlICovCiAjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4ODAwICAvKiBzb2Z0d2FyZTogcGFnZSByZWZlcmVuY2VkICovCiAKKy8qIFdyYXBwZXIgZm9yIGV4dGVuZGVkIG1vZGUgcGdwcm90IHR3aWRkbGluZyAqLworI2RlZmluZSBfUEFHRV9FWFQoeCkJCSgodW5zaWduZWQgbG9uZyBsb25nKSh4KSA8PCAzMikKKworLyoKKyAqIFdlIGNhbiB1c2UgdGhlIHNpZ24tZXh0ZW5kZWQgYml0cyBpbiB0aGUgUFRFTCB0byBnZXQgMzIgYml0cyBvZgorICogc29mdHdhcmUgZmxhZ3MuIFRoaXMgd29ya3MgZm9yIG5vdyBiZWNhdXNlIG5vIGltcGxlbWVudGF0aW9ucyB1c2VzCisgKiBhbnl0aGluZyBhYm92ZSB0aGUgUFBOIGZpZWxkLgorICovCisjZGVmaW5lIF9QQUdFX1dJUkVECV9QQUdFX0VYVCgweDAwMSkgLyogc29mdHdhcmU6IHdpcmUgdGhlIHRsYiBlbnRyeSAqLworCisjZGVmaW5lIF9QQUdFX0NMRUFSX0ZMQUdTCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfRklMRSB8IF9QQUdFX1NIQVJFRCB8IFwKKwkJCQkgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1dJUkVEKQorCiAvKiBNYXNrIHdoaWNoIGRyb3BzIHNvZnR3YXJlIGZsYWdzICovCi0jZGVmaW5lIF9QQUdFX0ZMQUdTX0hBUkRXQVJFX01BU0sJMHhmZmZmZmZmZmZmZmZmM2RiTEwKKyNkZWZpbmUgX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSwkoTkVGRl9NQVNLICYgfihfUEFHRV9DTEVBUl9GTEFHUykpCiAKIC8qCiAgKiBIdWdlVExCIHN1cHBvcnQKQEAgLTIwMywxMiArMjExLDYgQEAKICNkZWZpbmUgcGdwcm90X3dyaXRlY29tYmluZShwcm90KSBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpICYgfl9QQUdFX0NBQ0hBQkxFKQogCiAvKgotICogSGFuZGxpbmcgYWxsb2NhdGlvbiBmYWlsdXJlcyBkdXJpbmcgcGFnZSB0YWJsZSBzZXR1cC4KLSAqLwotZXh0ZXJuIHZvaWQgX19oYW5kbGVfYmFkX3BtZF9rZXJuZWwocG1kX3QgKiBwbWQpOwotI2RlZmluZSBfX2hhbmRsZV9iYWRfcG1kKHgpCV9faGFuZGxlX2JhZF9wbWRfa2VybmVsKHgpCi0KLS8qCiAgKiBQVEUgbGV2ZWwgYWNjZXNzIHJvdXRpbmVzLgogICoKICAqIE5vdGUxOgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggMDE3ZTBjMS4uOTYwNWUwNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtOTgsMTMgKzk4LDM0IEBACiAKIC8qIEZvcndhcmQgZGVjbCAqLwogc3RydWN0IHNlcV9vcGVyYXRpb25zOworc3RydWN0IHRhc2tfc3RydWN0OwogCiBleHRlcm4gc3RydWN0IHB0X3JlZ3MgZmFrZV9zd2FwcGVyX3JlZ3M7CiAKKy8qIGFyY2gvc2gva2VybmVsL3Byb2Nlc3MuYyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCB4c3RhdGVfc2l6ZTsKK2V4dGVybiB2b2lkIGZyZWVfdGhyZWFkX3hzdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKnRhc2tfeHN0YXRlX2NhY2hlcDsKKworLyogYXJjaC9zaC9tbS9hbGlnbm1lbnQuYyAqLworZXh0ZXJuIGludCBnZXRfdW5hbGlnbl9jdGwoc3RydWN0IHRhc2tfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gaW50IHNldF91bmFsaWduX2N0bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdW5zaWduZWQgaW50IHZhbCk7CisKKyNkZWZpbmUgR0VUX1VOQUxJR05fQ1RMKHRzaywgYWRkcikJZ2V0X3VuYWxpZ25fY3RsKCh0c2spLCAoYWRkcikpCisjZGVmaW5lIFNFVF9VTkFMSUdOX0NUTCh0c2ssIHZhbCkJc2V0X3VuYWxpZ25fY3RsKCh0c2spLCAodmFsKSkKKworLyogYXJjaC9zaC9tbS9pbml0LmMgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgbWVtX2luaXRfZG9uZTsKKwogLyogYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyAqLwogY29uc3QgY2hhciAqZ2V0X2NwdV9zdWJ0eXBlKHN0cnVjdCBzaF9jcHVpbmZvICpjKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcDsKIAorLyogdGhyZWFkX3N0cnVjdCBmbGFncyAqLworI2RlZmluZSBTSF9USFJFQURfVUFDX05PUFJJTlQJKDEgPDwgMCkKKyNkZWZpbmUgU0hfVEhSRUFEX1VBQ19TSUdCVVMJKDEgPDwgMSkKKyNkZWZpbmUgU0hfVEhSRUFEX1VBQ19NQVNLCShTSF9USFJFQURfVUFDX05PUFJJTlQgfCBTSF9USFJFQURfVUFDX1NJR0JVUykKKwogLyogcHJvY2Vzc29yIGJvb3QgbW9kZSBjb25maWd1cmF0aW9uICovCiAjZGVmaW5lIE1PREVfUElOMCAoMSA8PCAwKQogI2RlZmluZSBNT0RFX1BJTjEgKDEgPDwgMSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCmluZGV4IDFmM2Q2ZmEuLjU3MmI0ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9od19icmVha3BvaW50Lmg+CiAKIC8qCiAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CkBAIC05MCw5ICs5MSw5IEBACiAJdW5zaWduZWQgbG9uZyBlbnRyeV9wYzsKIH07CiAKLXVuaW9uIHNoX2ZwdV91bmlvbiB7Ci0Jc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCBoYXJkOwotCXN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3Qgc29mdDsKK3VuaW9uIHRocmVhZF94c3RhdGUgeworCXN0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QgaGFyZGZwdTsKKwlzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0IHNvZnRmcHU7CiB9OwogCiBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CkBAIC0xMDAsMzggKzEwMSwzMCBAQAogCXVuc2lnbmVkIGxvbmcgc3A7CiAJdW5zaWduZWQgbG9uZyBwYzsKIAotCS8qIEhhcmR3YXJlIGRlYnVnZ2luZyByZWdpc3RlcnMgKi8KLQl1bnNpZ25lZCBsb25nIHViY19wYzsKKwkvKiBWYXJpb3VzIHRocmVhZCBmbGFncywgc2VlIFNIX1RIUkVBRF94eHggKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogZmxvYXRpbmcgcG9pbnQgaW5mbyAqLwotCXVuaW9uIHNoX2ZwdV91bmlvbiBmcHU7CisJLyogU2F2ZSBtaWRkbGUgc3RhdGVzIG9mIHB0cmFjZSBicmVha3BvaW50cyAqLworCXN0cnVjdCBwZXJmX2V2ZW50ICpwdHJhY2VfYnBzW0hCUF9OVU1dOwogCiAjaWZkZWYgQ09ORklHX1NIX0RTUAogCS8qIERzcCBzdGF0dXMgaW5mb3JtYXRpb24gKi8KIAlzdHJ1Y3Qgc2hfZHNwX3N0cnVjdCBkc3Bfc3RhdHVzOwogI2VuZGlmCi19OwogCi0vKiBDb3VudCBvZiBhY3RpdmUgdGFza3Mgd2l0aCBVQkMgc2V0dGluZ3MgKi8KLWV4dGVybiBpbnQgdWJjX3VzZXJjbnQ7CisJLyogRXh0ZW5kZWQgcHJvY2Vzc29yIHN0YXRlICovCisJdW5pb24gdGhyZWFkX3hzdGF0ZSAqeHN0YXRlOworfTsKIAogI2RlZmluZSBJTklUX1RIUkVBRCAgewkJCQkJCVwKIAkuc3AgPSBzaXplb2YoaW5pdF9zdGFjaykgKyAobG9uZykgJmluaXRfc3RhY2ssCQlcCisJLmZsYWdzID0gMCwJCQkJCQlcCiB9CiAKLS8qCi0gKiBEbyBuZWNlc3Nhcnkgc2V0dXAgdG8gc3RhcnQgdXAgYSBuZXdseSBleGVjdXRlZCB0aHJlYWQuCi0gKi8KLSNkZWZpbmUgc3RhcnRfdGhyZWFkKF9yZWdzLCBuZXdfcGMsIG5ld19zcCkJIFwKLQlzZXRfZnMoVVNFUl9EUyk7CQkJIFwKLQlfcmVncy0+cHIgPSAwOwkJCQkgXAotCV9yZWdzLT5zciA9IFNSX0ZEOwkvKiBVc2VyIG1vZGUuICovIFwKLQlfcmVncy0+cGMgPSBuZXdfcGM7CQkJIFwKLQlfcmVncy0+cmVnc1sxNV0gPSBuZXdfc3AKLQogLyogRm9yd2FyZCBkZWNsYXJhdGlvbiwgYSBzdHJhbmdlIEMgdGhpbmcgKi8KIHN0cnVjdCB0YXNrX3N0cnVjdDsKLXN0cnVjdCBtbV9zdHJ1Y3Q7CisKK2V4dGVybiB2b2lkIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBuZXdfcGMsIHVuc2lnbmVkIGxvbmcgbmV3X3NwKTsKIAogLyogRnJlZSBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgYSB0aHJlYWQuICovCiBleHRlcm4gdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaAppbmRleCA1NzI3ZDMxLi42MjFiYzQ2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKQEAgLTg3LDI2ICs4NywzMSBAQAogCS8qIGxvbmcgc3RhdHVzOyAqIHNvZnR3YXJlIHN0YXR1cyBpbmZvcm1hdGlvbiAqLwogfTsKIAotI2lmIDAKIC8qIER1bW15IGZwdSBlbXVsYXRvciAgKi8KIHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgbG9uZyBmcF9yZWdzWzMyXTsKKwl1bnNpZ25lZCBsb25nIGZwX3JlZ3NbNjRdOwogCXVuc2lnbmVkIGludCBmcHNjcjsKIAl1bnNpZ25lZCBjaGFyIGxvb2thaGVhZDsKIAl1bnNpZ25lZCBsb25nIGVudHJ5X3BjOwogfTsKLSNlbmRpZgogCi11bmlvbiBzaF9mcHVfdW5pb24gewotCXN0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QgaGFyZDsKLQkvKiAnaGFyZCcgaXRzZWxmIG9ubHkgcHJvZHVjZXMgMzIgYml0IGFsaWdubWVudCwgeWV0IHdlIG5lZWQKLQkgICB0byBhY2Nlc3MgaXQgdXNpbmcgNjQgYml0IGxvYWQvc3RvcmUgYXMgd2VsbC4gKi8KK3VuaW9uIHRocmVhZF94c3RhdGUgeworCXN0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QgaGFyZGZwdTsKKwlzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0IHNvZnRmcHU7CisJLyoKKwkgKiBUaGUgc3RydWN0dXJlIGRlZmluaXRpb25zIG9ubHkgcHJvZHVjZSAzMiBiaXQgYWxpZ25tZW50LCB5ZXQgd2UgbmVlZAorCSAqIHRvIGFjY2VzcyB0aGVtIHVzaW5nIDY0IGJpdCBsb2FkL3N0b3JlIGFzIHdlbGwuCisJICovCiAJdW5zaWduZWQgbG9uZyBsb25nIGFsaWdubWVudF9kdW1teTsKIH07CiAKIHN0cnVjdCB0aHJlYWRfc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIHNwOwogCXVuc2lnbmVkIGxvbmcgcGM7CisKKwkvKiBWYXJpb3VzIHRocmVhZCBmbGFncywgc2VlIFNIX1RIUkVBRF94eHggKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJLyogVGhpcyBzdG9yZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHB0X3JlZ3MgYnVpbHQgZHVyaW5nIGEgY29udGV4dAogCSAgIHN3aXRjaCwgb3Igb2YgdGhlIHJlZ2lzdGVyIHNhdmUgYXJlYSBidWlsdCBmb3IgYSBrZXJuZWwgbW9kZQogCSAgIGV4Y2VwdGlvbi4gIEl0IGlzIHVzZWQgZm9yIGJhY2t0cmFjaW5nIHRoZSBzdGFjayBvZiBhIHNsZWVwaW5nIHRhc2sKQEAgLTEyMiw3ICsxMjcsNyBAQAogCS8qIEhhcmR3YXJlIGRlYnVnZ2luZyByZWdpc3RlcnMgbWF5IGNvbWUgaGVyZSAqLwogCiAJLyogZmxvYXRpbmcgcG9pbnQgaW5mbyAqLwotCXVuaW9uIHNoX2ZwdV91bmlvbiBmcHU7CisJdW5pb24gdGhyZWFkX3hzdGF0ZSAqeHN0YXRlOwogfTsKIAogI2RlZmluZSBJTklUX01NQVAgXApAQCAtMTM3LDcgKzE0Miw3IEBACiAJLnRyYXBfbm8JPSAwLAkJCVwKIAkuZXJyb3JfY29kZQk9IDAsCQkJXAogCS5hZGRyZXNzCT0gMCwJCQlcCi0JLmZwdQkJPSB7IHsgeyAwLCB9IH0sIH0JXAorCS5mbGFncwkJPSAwLAkJCVwKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDFkYzEyY2IuLmUxMWIxNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMTAyLDEzICsxMDIsMTUgQEAKICNkZWZpbmUJUFRSQUNFX0dFVERTUFJFR1MJNTUJLyogRFNQIHJlZ2lzdGVycyAqLwogI2RlZmluZQlQVFJBQ0VfU0VURFNQUkVHUwk1NgogCi0jZGVmaW5lIFBUX1RFWFRfRU5EX0FERFIgCTI0MAotI2RlZmluZSBQVF9URVhUX0FERFIgCQkyNDQJLyogJihzdHJ1Y3QgdXNlciktPnN0YXJ0X2NvZGUgKi8KLSNkZWZpbmUgUFRfREFUQV9BRERSIAkJMjQ4CS8qICYoc3RydWN0IHVzZXIpLT5zdGFydF9kYXRhICovCisjZGVmaW5lIFBUX1RFWFRfRU5EX0FERFIJMjQwCisjZGVmaW5lIFBUX1RFWFRfQUREUgkJMjQ0CS8qICYoc3RydWN0IHVzZXIpLT5zdGFydF9jb2RlICovCisjZGVmaW5lIFBUX0RBVEFfQUREUgkJMjQ4CS8qICYoc3RydWN0IHVzZXIpLT5zdGFydF9kYXRhICovCiAjZGVmaW5lIFBUX1RFWFRfTEVOCQkyNTIKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpCQkJKCgocmVncyktPnNyICYgMHg0MDAwMDAwMCk9PTApCiAjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykJKCh1bnNpZ25lZCBsb25nKShyZWdzKS0+cGMpCkBAIC0xMjQsNiArMTI2LDEyIEBACiBleHRlcm4gdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOwogCitzdHJ1Y3QgcGVyZl9ldmVudDsKK3N0cnVjdCBwZXJmX3NhbXBsZV9kYXRhOworCitleHRlcm4gdm9pZCBwdHJhY2VfdHJpZ2dlcmVkKHN0cnVjdCBwZXJmX2V2ZW50ICpicCwgaW50IG5taSwKKwkJICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwogI2RlZmluZSB0YXNrX3B0X3JlZ3ModGFzaykgXAogCSgoc3RydWN0IHB0X3JlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFKSAtIDEpCiAKQEAgLTEzMSwxMCArMTM5LDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIHBjID0gaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKIAotI2lmZGVmIFAyU0VHCi0JaWYgKHBjID49IFAyU0VHICYmIHBjIDwgUDNTRUcpCi0JCXBjIC09IDB4MjAwMDAwMDA7Ci0jZW5kaWYKKwlpZiAodmlydF9hZGRyX3VuY2FjaGVkKHBjKSkKKwkJcmV0dXJuIENBQ19BRERSKHBjKTsKIAogCXJldHVybiBwYzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcmVib290LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3JlYm9vdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZGEwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3JlYm9vdC5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX19BU01fU0hfUkVCT09UX0gKKyNkZWZpbmUgX19BU01fU0hfUkVCT09UX0gKKworI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworc3RydWN0IG1hY2hpbmVfb3BzIHsKKwl2b2lkICgqcmVzdGFydCkoY2hhciAqY21kKTsKKwl2b2lkICgqaGFsdCkodm9pZCk7CisJdm9pZCAoKnBvd2VyX29mZikodm9pZCk7CisJdm9pZCAoKnNodXRkb3duKSh2b2lkKTsKKwl2b2lkICgqY3Jhc2hfc2h1dGRvd24pKHN0cnVjdCBwdF9yZWdzICopOworfTsKKworZXh0ZXJuIHN0cnVjdCBtYWNoaW5lX29wcyBtYWNoaW5lX29wczsKKworLyogYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jICovCit2b2lkIG5hdGl2ZV9tYWNoaW5lX2NyYXNoX3NodXRkb3duKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX1JFQk9PVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggY2UzNzQzNS4uNDc1ODMyNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMTgsNyArMTgsNiBAQAogLyogLi4uICovCiAjZGVmaW5lIENPTU1BTkRfTElORSAoKGNoYXIgKikgKFBBUkFNKzB4MTAwKSkKIAotaW50IHNldHVwX2Vhcmx5X3ByaW50ayhjaGFyICopOwogdm9pZCBzaF9tdl9zZXR1cCh2b2lkKTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfYmlvcy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaF9iaW9zLmgKaW5kZXggZDljOTZkNy4uOTU3MTRjMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaF9iaW9zLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaF9iaW9zLmgKQEAgLTEsMTggKzEsMjcgQEAKICNpZm5kZWYgX19BU01fU0hfQklPU19ICiAjZGVmaW5lIF9fQVNNX1NIX0JJT1NfSAogCisjaWZkZWYgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MKKwogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMCBHcmVnIEJhbmtzLCBNaXRjaCBEYXZpcwogICogQyBBUEkgdG8gaW50ZXJmYWNlIHRvIHRoZSBzdGFuZGFyZCBMaW51eFNIIEJJT1MKICAqIHVzdWFsbHkgZnJvbSB3aXRoaW4gdGhlIGVhcmx5IHN0YWdlcyBvZiBrZXJuZWwgYm9vdC4KICAqLwotCi0KIGV4dGVybiB2b2lkIHNoX2Jpb3NfY29uc29sZV93cml0ZShjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pOwotZXh0ZXJuIHZvaWQgc2hfYmlvc19jaGFyX291dChjaGFyIGNoKTsKIGV4dGVybiB2b2lkIHNoX2Jpb3NfZ2RiX2RldGFjaCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgc2hfYmlvc19nZXRfbm9kZV9hZGRyKHVuc2lnbmVkIGNoYXIgKm5vZGVfYWRkcik7CiBleHRlcm4gdm9pZCBzaF9iaW9zX3NodXRkb3duKHVuc2lnbmVkIGludCBob3cpOwogCitleHRlcm4gdm9pZCBzaF9iaW9zX3Zicl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgc2hfYmlvc192YnJfcmVsb2FkKHZvaWQpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2hfYmlvc192YnJfaW5pdCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzaF9iaW9zX3Zicl9yZWxvYWQodm9pZCkgeyB9CisKKyNlbmRpZiAvKiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyAqLworCiAjZW5kaWYgLyogX19BU01fU0hfQklPU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NpdS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzU2NWEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaXUuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogcGxhdGZvcm0gaGVhZGVyIGZvciB0aGUgU0lVIEFTb0MgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIEFTTV9TSVVfSAorI2RlZmluZSBBU01fU0lVX0gKKworI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KKworc3RydWN0IGRldmljZTsKKworc3RydWN0IHNpdV9wbGF0Zm9ybSB7CisJc3RydWN0IGRldmljZSAqZG1hX2RldjsKKwllbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZCBkbWFfc2xhdmVfdHhfYTsKKwllbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZCBkbWFfc2xhdmVfcnhfYTsKKwllbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZCBkbWFfc2xhdmVfdHhfYjsKKwllbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZCBkbWFfc2xhdmVfcnhfYjsKK307CisKKyNlbmRpZiAvKiBBU01fU0lVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3VzcGVuZC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmgKaW5kZXggZmU5YzJhMS4uNjRlYjQxYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmgKQEAgLTkyLDUgKzkyLDYgQEAKICNkZWZpbmUgU1VTUF9TSF9VU1RBTkRCWQkoMSA8PCAzKSAvKiBTSC1Nb2JpbGUgVS1zdGFuZGJ5IG1vZGUgKi8KICNkZWZpbmUgU1VTUF9TSF9TRgkJKDEgPDwgNCkgLyogRW5hYmxlIHNlbGYtcmVmcmVzaCAqLwogI2RlZmluZSBTVVNQX1NIX01NVQkJKDEgPDwgNSkgLyogU2F2ZS9yZXN0b3JlIE1NVSBhbmQgY2FjaGUgKi8KKyNkZWZpbmUgU1VTUF9TSF9SRUdTCQkoMSA8PCA2KSAvKiBTYXZlL3Jlc3RvcmUgcmVnaXN0ZXJzICovCiAKICNlbmRpZiAvKiBfQVNNX1NIX1NVU1BFTkRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaAppbmRleCA2YTM4MTQyLi5hYTc3NzdiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX19BU01fU0hfU1lTQ0FMTF9ICiAjZGVmaW5lIF9fQVNNX1NIX1NZU0NBTExfSAogCitleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBzeXNfY2FsbF90YWJsZVtdOworCiAjaWZkZWYgQ09ORklHX1NVUEVSSDMyCiAjIGluY2x1ZGUgInN5c2NhbGxfMzIuaCIKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCBjMTU0MTViLi4wYmQ3YTE3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKICNkZWZpbmUgQVRfVkVDVE9SX1NJWkVfQVJDSCA1IC8qIGVudHJpZXMgaW4gQVJDSF9ETElORk8gKi8KIApAQCAtMzIsNyArMzEsNyBAQAogI2RlZmluZSBtYigpCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmNvIjogOiA6Im1lbW9yeSIpCiAjZGVmaW5lIHJtYigpCQltYigpCiAjZGVmaW5lIHdtYigpCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmNvIjogOiA6Im1lbW9yeSIpCi0jZGVmaW5lIGN0cmxfYmFycmllcigpCV9faWNiaSgweGE4MDAwMDAwKQorI2RlZmluZSBjdHJsX2JhcnJpZXIoKQlfX2ljYmkoUEFHRV9PRkZTRVQpCiAjZGVmaW5lIHJlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlKDApCiAjZWxzZQogI2RlZmluZSBtYigpCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiI6IDogOiJtZW1vcnkiKQpAQCAtMTE0LDYgKzExMyw4IEBACiAJCQkJICAgICh1bnNpZ25lZCBsb25nKV9uXywgc2l6ZW9mKCoocHRyKSkpOyBcCiAgIH0pCiAKK3N0cnVjdCBwdF9yZWdzOworCiBleHRlcm4gdm9pZCBkaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwogdm9pZCBmcmVlX2luaXRtZW0odm9pZCk7CiB2b2lkIGZyZWVfaW5pdHJkX21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CkBAIC0xMzcsMTQgKzEzOCwxNCBAQAogI2VuZGlmCiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGNhY2hlZF90b191bmNhY2hlZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHVuY2FjaGVkX3NpemU7CiAKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICpzaF9kZWJ1Z2ZzX3Jvb3Q7CiAKIHZvaWQgcGVyX2NwdV90cmFwX2luaXQodm9pZCk7CiB2b2lkIGRlZmF1bHRfaWRsZSh2b2lkKTsKIHZvaWQgY3B1X2lkbGVfd2FpdCh2b2lkKTsKLQotYXNtbGlua2FnZSB2b2lkIGJyZWFrX3BvaW50X3RyYXAodm9pZCk7Cit2b2lkIHN0b3BfdGhpc19jcHUodm9pZCAqKTsKIAogI2lmZGVmIENPTkZJR19TVVBFUkgzMgogI2RlZmluZSBCVUlMRF9UUkFQX0hBTkRMRVIobmFtZSkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCmluZGV4IDA2ODE0ZjUuLjUxMjk2YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX19BU01fU0hfU1lTVEVNXzMyX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgogCiAjaWZkZWYgQ09ORklHX1NIX0RTUAogCkBAIC0xNDQsOSArMTQ1LDYgQEAKIAkJX19yZXN0b3JlX2RzcChwcmV2KTsJCQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBfX3VzZXNfanVtcF90b191bmNhY2hlZCBcCi0Jbm9pbmxpbmUgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLnVuY2FjaGVkLnRleHQiKSkpCi0KIC8qCiAgKiBKdW1wIHRvIHVuY2FjaGVkIGFyZWEuCiAgKiBXaGVuIGhhbmRsaW5nIFRMQiBvciBjYWNoZXMsIHdlIG5lZWQgdG8gZG8gaXQgZnJvbSBhbiB1bmNhY2hlZCBhcmVhLgpAQCAtMjE2LDYgKzIxNCwxNyBAQAogaW50IGhhbmRsZV91bmFsaWduZWRfYWNjZXNzKGluc25fc2l6ZV90IGluc3RydWN0aW9uLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCSAgICBzdHJ1Y3QgbWVtX2FjY2VzcyAqbWEsIGludCk7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmlnZ2VyX2FkZHJlc3NfZXJyb3Iodm9pZCkKK3sKKwlpZiAoX19pbl8yOWJpdF9tb2RlKCkpCisJCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJCSJsZGMgJTAsIHNyXG5cdCIKKwkJCSJtb3YubCBAJTEsICUwIgorCQkJOgorCQkJOiAiciIgKDB4MTAwMDAwMDApLCAiciIgKDB4ODAwMDAwMDEpCisJCSk7Cit9CisKIGFzbWxpbmthZ2Ugdm9pZCBkb19hZGRyZXNzX2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJCSB1bnNpZ25lZCBsb25nIHdyaXRlYWNjZXNzLAogCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKaW5kZXggYWIxZGQ5MS4uMzYzMzg2NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCkBAIC0xOCw2ICsxOCw3IEBACiAvKgogICoJc3dpdGNoX3RvKCkgc2hvdWxkIHN3aXRjaCB0YXNrcyB0byB0YXNrIG5yIG4sIGZpcnN0CiAgKi8KK3N0cnVjdCB0aHJlYWRfc3RydWN0Owogc3RydWN0IHRhc2tfc3RydWN0ICpzaDY0X3N3aXRjaF90byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCiAJCQkJICAgc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnByZXZfdGhyZWFkLAogCQkJCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwKQEAgLTMzLDggKzM0LDYgQEAKIAkJCSAgICAgICZuZXh0LT50aHJlYWQpOwkJCVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQKLQogI2RlZmluZSBqdW1wX3RvX3VuY2FjaGVkKCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBiYWNrX3RvX2NhY2hlZCgpCWRvIHsgfSB3aGlsZSAoMCkKIApAQCAtNDgsNiArNDcsMTMgQEAKIAlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZykoc2lnbmVkIGxvbmcgbG9uZykoc2lnbmVkIGxvbmcpdmFsOwogfQogCitleHRlcm4gdm9pZCBwaHlzX3N0ZXh0KHZvaWQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgdHJpZ2dlcl9hZGRyZXNzX2Vycm9yKHZvaWQpCit7CisJcGh5c19zdGV4dCgpOworfQorCiAjZGVmaW5lIFNSX0JMX0xMCTB4MDAwMDAwMDAxMDAwMDAwMExMCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYmxfYml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggMWYzZDkyNy4uNTVhMzZmZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtOTMsMTQgKzkzLDE2IEBACiAKICNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIJKFRIUkVBRF9TSElGVCAtIFBBR0VfU0hJRlQpCiAKLSNlbHNlIC8qIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQgKi8KLQotI2RlZmluZSBfX0hBVkVfQVJDSF9USFJFQURfSU5GT19BTExPQ0FUT1IKKyNlbmRpZgogCiBleHRlcm4gc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiBleHRlcm4gdm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGkpOworZXh0ZXJuIHZvaWQgYXJjaF90YXNrX2NhY2hlX2luaXQodm9pZCk7CisjZGVmaW5lIGFyY2hfdGFza19jYWNoZV9pbml0IGFyY2hfdGFza19jYWNoZV9pbml0CitleHRlcm4gaW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYyk7CitleHRlcm4gdm9pZCBpbml0X3RocmVhZF94c3RhdGUodm9pZCk7CiAKLSNlbmRpZiAvKiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUICovCisjZGVmaW5lIF9fSEFWRV9BUkNIX1RIUkVBRF9JTkZPX0FMTE9DQVRPUgogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IGRhOGZlN2EuLjc1YWJiMzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaApAQCAtMTEsNiArMTEsNyBAQAogI2lmZGVmIENPTkZJR19NTVUKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogCiAvKgogICogVExCIGhhbmRsaW5nLiAgVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHBhZ2VzIGZyb20gdGhlIHBhZ2UKQEAgLTk3LDYgKzk4LDIyIEBACiAKICNkZWZpbmUgdGxiX21pZ3JhdGVfZmluaXNoKG1tKQkJZG8geyB9IHdoaWxlICgwKQogCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkgfHwgZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCitleHRlcm4gdm9pZCB0bGJfd2lyZV9lbnRyeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QpOworZXh0ZXJuIHZvaWQgdGxiX3Vud2lyZV9lbnRyeSh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3dpcmVfZW50cnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgLAorCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bGJfdW53aXJlX2VudHJ5KHZvaWQpCit7CisJQlVHKCk7Cit9CisjZW5kaWYKKwogI2Vsc2UgLyogQ09ORklHX01NVSAqLwogCiAjZGVmaW5lIHRsYl9zdGFydF92bWEodGxiLCB2bWEpCQkJCWRvIHsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdWJjLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3ViYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmY5NjE2Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdWJjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tc2gvdWJjLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmlpYmUgWXV0YWthCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgUGF1bCBNdW5kdAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9fQVNNX1NIX1VCQ19ICi0jZGVmaW5lIF9fQVNNX1NIX1VCQ19ICi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8Y3B1L3ViYy5oPgotCi0vKiBVc2VyIEJyZWFrIENvbnRyb2xsZXIgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKLSNkZWZpbmUgVUJDX1RZUEVfU0g3NzI5CShjdXJyZW50X2NwdV9kYXRhLnR5cGUgPT0gQ1BVX1NINzcyOSkKLSNlbHNlCi0jZGVmaW5lIFVCQ19UWVBFX1NINzcyOQkwCi0jZW5kaWYKLQotI2RlZmluZSBCQU1SX0FTSUQJCSgxIDw8IDIpCi0jZGVmaW5lIEJBTVJfTk9ORQkJMAotI2RlZmluZSBCQU1SXzEwCQkJMHgxCi0jZGVmaW5lIEJBTVJfMTIJCQkweDIKLSNkZWZpbmUgQkFNUl9BTEwJCTB4MwotI2RlZmluZSBCQU1SXzE2CQkJMHg4Ci0jZGVmaW5lIEJBTVJfMjAJCQkweDkKLQotI2RlZmluZSBCQlJfSU5TVAkJKDEgPDwgNCkKLSNkZWZpbmUgQkJSX0RBVEEJCSgyIDw8IDQpCi0jZGVmaW5lIEJCUl9SRUFECQkoMSA8PCAyKQotI2RlZmluZSBCQlJfV1JJVEUJCSgyIDw8IDIpCi0jZGVmaW5lIEJCUl9CWVRFCQkweDEKLSNkZWZpbmUgQkJSX0hBTEYJCTB4MgotI2RlZmluZSBCQlJfTE9ORwkJMHgzCi0jZGVmaW5lIEJCUl9RVUFECQkoMSA8PCA2KQkvKiBTSDc3NTAgKi8KLSNkZWZpbmUgQkJSX0NQVQkJCSgxIDw8IDYpCS8qIFNINzcwOUEsU0g3NzI5ICovCi0jZGVmaW5lIEJCUl9ETUEJCQkoMiA8PCA2KQkvKiBTSDc3MDlBLFNINzcyOSAqLwotCi0jZGVmaW5lIEJSQ1JfQ01GQQkJKDEgPDwgMTUpCi0jZGVmaW5lIEJSQ1JfQ01GQgkJKDEgPDwgMTQpCi0KLSNpZiBkZWZpbmVkIENPTkZJR19DUFVfU0gyQQotI2RlZmluZSBCUkNSX0NNRkNBCQkoMSA8PCAxNSkKLSNkZWZpbmUgQlJDUl9DTUZDQgkJKDEgPDwgMTQpCi0jZGVmaW5lIEJSQ1JfQ01GREEJCSgxIDw8IDEzKQotI2RlZmluZSBCUkNSX0NNRkRCCQkoMSA8PCAxMikKLSNkZWZpbmUgQlJDUl9QQ0JCCQkoMSA8PCA2KQkvKiAxOiBhZnRlciBleGVjdXRpb24gKi8KLSNkZWZpbmUgQlJDUl9QQ0JBCQkoMSA8PCA1KQkvKiAxOiBhZnRlciBleGVjdXRpb24gKi8KLSNkZWZpbmUgQlJDUl9QQ1RFCQkwCi0jZWxzZQotI2RlZmluZSBCUkNSX1BDVEUJCSgxIDw8IDExKQotI2RlZmluZSBCUkNSX1BDQkEJCSgxIDw8IDEwKQkvKiAxOiBhZnRlciBleGVjdXRpb24gKi8KLSNkZWZpbmUgQlJDUl9EQkVCCQkoMSA8PCA3KQotI2RlZmluZSBCUkNSX1BDQkIJCSgxIDw8IDYpCi0jZGVmaW5lIEJSQ1JfU0VRCQkoMSA8PCAzKQotI2RlZmluZSBCUkNSX1VCREUJCSgxIDw8IDApCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfX0FTTV9TSF9VQkNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmNhY2hlZC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmNhY2hlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDE5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuY2FjaGVkLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBfX0FTTV9TSF9VTkNBQ0hFRF9ICisjZGVmaW5lIF9fQVNNX1NIX1VOQ0FDSEVEX0gKKworI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorCisjaWZkZWYgQ09ORklHX1VOQ0FDSEVEX01BUFBJTkcKK2V4dGVybiB1bnNpZ25lZCBsb25nIHVuY2FjaGVkX3N0YXJ0LCB1bmNhY2hlZF9lbmQ7CisKK2V4dGVybiBpbnQgdmlydF9hZGRyX3VuY2FjaGVkKHVuc2lnbmVkIGxvbmcga2FkZHIpOworZXh0ZXJuIHZvaWQgdW5jYWNoZWRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHVuY2FjaGVkX3Jlc2l6ZSh1bnNpZ25lZCBsb25nIHNpemUpOworI2Vsc2UKKyNkZWZpbmUgdmlydF9hZGRyX3VuY2FjaGVkKGthZGRyKQkoMCkKKyNkZWZpbmUgdW5jYWNoZWRfaW5pdCgpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB1bmNhY2hlZF9yZXNpemUoc2l6ZSkJCUJVRygpCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1NIX1VOQ0FDSEVEX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdm1saW51eC5sZHMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdm1saW51eC5sZHMuaAppbmRleCAyNDRlYzRhLi5kNThhZDQ5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3ZtbGludXgubGRzLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS92bWxpbnV4Lmxkcy5oCkBAIC0xNCw0ICsxNCwxMiBAQAogI2RlZmluZSBEV0FSRl9FSF9GUkFNRQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU1VQRVJINjQKKyNkZWZpbmUgRVhUUkFfVEVYVAkJXAorCSooLnRleHQ2NCkJCVwKKwkqKC50ZXh0Li5TSG1lZGlhMzIpCisjZWxzZQorI2RlZmluZSBFWFRSQV9URVhUCisjZW5kaWYKKwogI2VuZGlmIC8qIF9fQVNNX1NIX1ZNTElOVVhfTERTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vd2F0Y2hkb2cuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vd2F0Y2hkb2cuaAppbmRleCAxOWRmZmY1Li44NWE3YWNhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3dhdGNoZG9nLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS93YXRjaGRvZy5oCkBAIC03MCw3ICs3MCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgX191MzIgc2hfd2R0X3JlYWRfY250KHZvaWQpCiB7Ci0JcmV0dXJuIGN0cmxfaW5sKFdUQ05UX1IpOworCXJldHVybiBfX3Jhd19yZWFkbChXVENOVF9SKTsKIH0KIAogLyoqCkBAIC04Miw3ICs4Miw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF93ZHRfd3JpdGVfY250KF9fdTMyIHZhbCkKIHsKLQljdHJsX291dGwoKFdUQ05UX0hJR0ggPDwgMjQpIHwgKF9fdTMyKXZhbCwgV1RDTlQpOworCV9fcmF3X3dyaXRlbCgoV1RDTlRfSElHSCA8PCAyNCkgfCAoX191MzIpdmFsLCBXVENOVCk7CiB9CiAKIC8qKgpAQCAtOTQsNyArOTQsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hfd2R0X3dyaXRlX2JzdChfX3UzMiB2YWwpCiB7Ci0JY3RybF9vdXRsKChXVEJTVF9ISUdIIDw8IDI0KSB8IChfX3UzMil2YWwsIFdUQlNUKTsKKwlfX3Jhd193cml0ZWwoKFdUQlNUX0hJR0ggPDwgMjQpIHwgKF9fdTMyKXZhbCwgV1RCU1QpOwogfQogLyoqCiAgKiAJc2hfd2R0X3JlYWRfY3NyIC0gUmVhZCBmcm9tIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyCkBAIC0xMDMsNyArMTAzLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBfX3UzMiBzaF93ZHRfcmVhZF9jc3Iodm9pZCkKIHsKLQlyZXR1cm4gY3RybF9pbmwoV1RDU1JfUik7CisJcmV0dXJuIF9fcmF3X3JlYWRsKFdUQ1NSX1IpOwogfQogCiAvKioKQEAgLTExNSw3ICsxMTUsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hfd2R0X3dyaXRlX2NzcihfX3UzMiB2YWwpCiB7Ci0JY3RybF9vdXRsKChXVENTUl9ISUdIIDw8IDI0KSB8IChfX3UzMil2YWwsIFdUQ1NSKTsKKwlfX3Jhd193cml0ZWwoKFdUQ1NSX0hJR0ggPDwgMjQpIHwgKF9fdTMyKXZhbCwgV1RDU1IpOwogfQogI2Vsc2UKIC8qKgpAQCAtMTI0LDcgKzEyNCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgX191OCBzaF93ZHRfcmVhZF9jbnQodm9pZCkKIHsKLQlyZXR1cm4gY3RybF9pbmIoV1RDTlRfUik7CisJcmV0dXJuIF9fcmF3X3JlYWRiKFdUQ05UX1IpOwogfQogCiAvKioKQEAgLTEzNiw3ICsxMzYsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hfd2R0X3dyaXRlX2NudChfX3U4IHZhbCkKIHsKLQljdHJsX291dHcoKFdUQ05UX0hJR0ggPDwgOCkgfCAoX191MTYpdmFsLCBXVENOVCk7CisJX19yYXdfd3JpdGV3KChXVENOVF9ISUdIIDw8IDgpIHwgKF9fdTE2KXZhbCwgV1RDTlQpOwogfQogCiAvKioKQEAgLTE0Niw3ICsxNDYsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIF9fdTggc2hfd2R0X3JlYWRfY3NyKHZvaWQpCiB7Ci0JcmV0dXJuIGN0cmxfaW5iKFdUQ1NSX1IpOworCXJldHVybiBfX3Jhd19yZWFkYihXVENTUl9SKTsKIH0KIAogLyoqCkBAIC0xNTgsNyArMTU4LDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHNoX3dkdF93cml0ZV9jc3IoX191OCB2YWwpCiB7Ci0JY3RybF9vdXR3KChXVENTUl9ISUdIIDw8IDgpIHwgKF9fdTE2KXZhbCwgV1RDU1IpOworCV9fcmF3X3dyaXRldygoV1RDU1JfSElHSCA8PCA4KSB8IChfX3UxNil2YWwsIFdUQ1NSKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IHx8IENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgKi8KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMi9jcHUvdWJjLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMi9jcHUvdWJjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMGU4N2YuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDIvY3B1L3ViYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXNoL2NwdS1zaDIvdWJjLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgUGF1bCBNdW5kdAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9fQVNNX0NQVV9TSDJfVUJDX0gKLSNkZWZpbmUgX19BU01fQ1BVX1NIMl9VQkNfSAotCi0jZGVmaW5lIFVCQ19CQVJBICAgICAgICAgICAgICAgIDB4ZmZmZmZmNDAKLSNkZWZpbmUgVUJDX0JBTVJBICAgICAgICAgICAgICAgMHhmZmZmZmY0NAotI2RlZmluZSBVQkNfQkJSQSAgICAgICAgICAgICAgICAweGZmZmZmZjQ4Ci0jZGVmaW5lIFVCQ19CQVJCICAgICAgICAgICAgICAgIDB4ZmZmZmZmNjAKLSNkZWZpbmUgVUJDX0JBTVJCICAgICAgICAgICAgICAgMHhmZmZmZmY2NAotI2RlZmluZSBVQkNfQkJSQiAgICAgICAgICAgICAgICAweGZmZmZmZjY4Ci0jZGVmaW5lIFVCQ19CRFJCICAgICAgICAgICAgICAgIDB4ZmZmZmZmNzAKLSNkZWZpbmUgVUJDX0JETVJCICAgICAgICAgICAgICAgMHhmZmZmZmY3NAotI2RlZmluZSBVQkNfQlJDUiAgICAgICAgICAgICAgICAweGZmZmZmZjc4Ci0KLS8qCi0gKiBXZSBkb24ndCBoYXZlIGFueSBBU0lEIGNoYW5nZXMgdG8gbWFrZSBpbiB0aGUgVUJDIG9uIHRoZSBTSC0yLgotICoKLSAqIE1ha2UgdGhlc2UgcHVycG9zZWx5IGludmFsaWQgdG8gdHJhY2sgbWlzdXNlLgotICovCi0jZGVmaW5lIFVCQ19CQVNSQQkJMHgwMDAwMDAwMAotI2RlZmluZSBVQkNfQkFTUkIJCTB4MDAwMDAwMDAKLQotI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDJfVUJDX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDIvY3B1L3dhdGNoZG9nLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMi9jcHUvd2F0Y2hkb2cuaAppbmRleCAzOTMxNjFjLi4xZWFiOGFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMi9jcHUvd2F0Y2hkb2cuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMi9jcHUvd2F0Y2hkb2cuaApAQCAtNDQsNyArNDQsNyBAQAogCS8qCiAJICogU2FtZSByZWFkL3dyaXRlIGJyYWluLWRhbWFnZSBhcyBmb3IgV1RDTlQgaGVyZS4uCiAJICovCi0JcmV0dXJuIGN0cmxfaW5iKFJTVENTUl9SKTsKKwlyZXR1cm4gX19yYXdfcmVhZGIoUlNUQ1NSX1IpOwogfQogCiAvKioKQEAgLTYyLDcgKzYyLDcgQEAKIAkgKiB3ZSBjYW4ndCBwcmVzZW50bHkgdG91Y2ggdGhlIFdPVkYgYml0LCBzaW5jZSB0aGUgdXBwZXIgYnl0ZQogCSAqIGhhcyB0byBiZSBzd2FwcGVkIGZvciB0aGlzLiBTbyBqdXN0IGxlYXZlIGl0IGFsb25lLi4KIAkgKi8KLQljdHJsX291dHcoKFdUQ05UX0hJR0ggPDwgOCkgfCAoX191MTYpdmFsLCBSU1RDU1IpOworCV9fcmF3X3dyaXRlYigoV1RDTlRfSElHSCA8PCA4KSB8IChfX3UxNil2YWwsIFJTVENTUik7CiB9CiAKICNlbmRpZiAvKiBfX0FTTV9DUFVfU0gyX1dBVENIRE9HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kYWMuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kYWMuaAppbmRleCAwNWZkYTgzLi45OGYxZDE1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZGFjLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RhYy5oCkBAIC0xNywyNSArMTcsMjUgQEAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2hfZGFjX2VuYWJsZShpbnQgY2hhbm5lbCkKIHsKIAl1bnNpZ25lZCBjaGFyIHY7Ci0JdiA9IGN0cmxfaW5iKERBQ1IpOworCXYgPSBfX3Jhd19yZWFkYihEQUNSKTsKIAlpZihjaGFubmVsKSB2IHw9IERBQ1JfREFPRTE7CiAJZWxzZSB2IHw9IERBQ1JfREFPRTA7Ci0JY3RybF9vdXRiKHYsREFDUik7CisJX19yYXdfd3JpdGViKHYsREFDUik7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2hfZGFjX2Rpc2FibGUoaW50IGNoYW5uZWwpCiB7CiAJdW5zaWduZWQgY2hhciB2OwotCXYgPSBjdHJsX2luYihEQUNSKTsKKwl2ID0gX19yYXdfcmVhZGIoREFDUik7CiAJaWYoY2hhbm5lbCkgdiAmPSB+REFDUl9EQU9FMTsKIAllbHNlIHYgJj0gfkRBQ1JfREFPRTA7Ci0JY3RybF9vdXRiKHYsREFDUik7CisJX19yYXdfd3JpdGViKHYsREFDUik7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2hfZGFjX291dHB1dCh1OCB2YWx1ZSwgaW50IGNoYW5uZWwpCiB7Ci0JaWYoY2hhbm5lbCkgY3RybF9vdXRiKHZhbHVlLERBRFIxKTsKLQllbHNlIGN0cmxfb3V0Yih2YWx1ZSxEQURSMCk7CisJaWYoY2hhbm5lbCkgX19yYXdfd3JpdGViKHZhbHVlLERBRFIxKTsKKwllbHNlIF9fcmF3X3dyaXRlYih2YWx1ZSxEQURSMCk7CiB9CiAKICNlbmRpZiAvKiBfX0FTTV9DUFVfU0gzX0RBQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmgKaW5kZXggMGVhMTVmMy4uMjA3ODExYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaApAQCAtMjAsOCArMjAsMTAgQEAKICNkZWZpbmUgVFNfMzIJCTB4MDAwMDAwMTAKICNkZWZpbmUgVFNfMTI4CQkweDAwMDAwMDE4CiAKLSNkZWZpbmUgQ0hDUl9UU19NQVNLCTB4MTgKLSNkZWZpbmUgQ0hDUl9UU19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKIAogI2RlZmluZSBETUFPUl9JTklUCURNQU9SX0RNRQogCkBAIC0zNiwxMSArMzgsMTMgQEAKIAlYTUlUX1NaXzEyOEJJVCwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSBfX21heWJlX3VudXNlZCA9IHsKLQlbWE1JVF9TWl84QklUXQkJPSAwLAotCVtYTUlUX1NaXzE2QklUXQkJPSAxLAotCVtYTUlUX1NaXzMyQklUXQkJPSAyLAotCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAotfTsKKyNkZWZpbmUgVFNfU0hJRlQgewkJCVwKKwlbWE1JVF9TWl84QklUXQkJPSAwLAlcCisJW1hNSVRfU1pfMTZCSVRdCQk9IDEsCVwKKwlbWE1JVF9TWl8zMkJJVF0JCT0gMiwJXAorCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAlcCit9CisKKyNkZWZpbmUgVFNfSU5ERVgyVkFMKGkpCSgoKGkpICYgMykgPDwgQ0hDUl9UU19MT1dfU0hJRlQpCiAKICNlbmRpZiAvKiBfX0FTTV9DUFVfU0gzX0RNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvdWJjLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvdWJjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNjM4MWQuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L3ViYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXNoL2NwdS1zaDMvdWJjLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmlpYmUgWXV0YWthCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgUGF1bCBNdW5kdAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9fQVNNX0NQVV9TSDNfVUJDX0gKLSNkZWZpbmUgX19BU01fQ1BVX1NIM19VQkNfSAotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKQotI2RlZmluZSBVQkNfQkFSQQkJMHhhNGZmZmZiMAotI2RlZmluZSBVQkNfQkFNUkEJCTB4YTRmZmZmYjQKLSNkZWZpbmUgVUJDX0JCUkEJCTB4YTRmZmZmYjgKLSNkZWZpbmUgVUJDX0JBU1JBCQkweGZmZmZmZmU0Ci0jZGVmaW5lIFVCQ19CQVJCCQkweGE0ZmZmZmEwCi0jZGVmaW5lIFVCQ19CQU1SQgkJMHhhNGZmZmZhNAotI2RlZmluZSBVQkNfQkJSQgkJMHhhNGZmZmZhOAotI2RlZmluZSBVQkNfQkFTUkIJCTB4ZmZmZmZmZTgKLSNkZWZpbmUgVUJDX0JEUkIJCTB4YTRmZmZmOTAKLSNkZWZpbmUgVUJDX0JETVJCCQkweGE0ZmZmZjk0Ci0jZGVmaW5lIFVCQ19CUkNSCQkweGE0ZmZmZjk4Ci0jZWxzZQotI2RlZmluZSBVQkNfQkFSQSAgICAgICAgICAgICAgICAweGZmZmZmZmIwCi0jZGVmaW5lIFVCQ19CQU1SQSAgICAgICAgICAgICAgIDB4ZmZmZmZmYjQKLSNkZWZpbmUgVUJDX0JCUkEgICAgICAgICAgICAgICAgMHhmZmZmZmZiOAotI2RlZmluZSBVQkNfQkFTUkEgICAgICAgICAgICAgICAweGZmZmZmZmU0Ci0jZGVmaW5lIFVCQ19CQVJCICAgICAgICAgICAgICAgIDB4ZmZmZmZmYTAKLSNkZWZpbmUgVUJDX0JBTVJCICAgICAgICAgICAgICAgMHhmZmZmZmZhNAotI2RlZmluZSBVQkNfQkJSQiAgICAgICAgICAgICAgICAweGZmZmZmZmE4Ci0jZGVmaW5lIFVCQ19CQVNSQiAgICAgICAgICAgICAgIDB4ZmZmZmZmZTgKLSNkZWZpbmUgVUJDX0JEUkIgICAgICAgICAgICAgICAgMHhmZmZmZmY5MAotI2RlZmluZSBVQkNfQkRNUkIgICAgICAgICAgICAgICAweGZmZmZmZjk0Ci0jZGVmaW5lIFVCQ19CUkNSICAgICAgICAgICAgICAgIDB4ZmZmZmZmOTgKLSNlbmRpZgotCi0jZW5kaWYgLyogX19BU01fQ1BVX1NIM19VQkNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2FkZHJzcGFjZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2FkZHJzcGFjZS5oCmluZGV4IGEzZmE3MzMuLmQ1MWRhMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9hZGRyc3BhY2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvYWRkcnNwYWNlLmgKQEAgLTI4LDYgKzI4LDE1IEBACiAjZGVmaW5lIFA0U0VHX1RMQl9EQVRBCTB4ZjcwMDAwMDAKICNkZWZpbmUgUDRTRUdfUkVHX0JBU0UJMHhmZjAwMDAwMAogCisjZGVmaW5lIFBBX0FSRUEwCTB4MDAwMDAwMDAKKyNkZWZpbmUgUEFfQVJFQTEJMHgwNDAwMDAwMAorI2RlZmluZSBQQV9BUkVBMgkweDA4MDAwMDAwCisjZGVmaW5lIFBBX0FSRUEzCTB4MGMwMDAwMDAKKyNkZWZpbmUgUEFfQVJFQTQJMHgxMDAwMDAwMAorI2RlZmluZSBQQV9BUkVBNQkweDE0MDAwMDAwCisjZGVmaW5lIFBBX0FSRUE2CTB4MTgwMDAwMDAKKyNkZWZpbmUgUEFfQVJFQTcJMHgxYzAwMDAwMAorCiAjZGVmaW5lIFBBX0FSRUE1X0lPCTB4YjQwMDAwMDAJLyogQXJlYSA1IElPIE1lbW9yeSAqLwogI2RlZmluZSBQQV9BUkVBNl9JTwkweGI4MDAwMDAwCS8qIEFyZWEgNiBJTyBNZW1vcnkgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaAppbmRleCBjNGVkNjYwLi5lNzM0ZWE0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaApAQCAtMiwyMiArMiwzOCBAQAogI2RlZmluZSBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSAogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKSB8fCBcCiAJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzMwKQogI2RlZmluZSBETVRFMF9JUlEJNDgKICNkZWZpbmUgRE1URTRfSVJRCTc2CiAjZGVmaW5lIERNQUUwX0lSUQk3OAkvKiBETUEgRXJyb3IgSVJRKi8KICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZFMDA4MDIwCi0jZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGRTAwOTAwMAorI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZFMDA5MDAwCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikKKyNkZWZpbmUgRE1URTBfSVJRCTQ4CisjZGVmaW5lIERNVEU0X0lSUQk3NgorI2RlZmluZSBETUFFMF9JUlEJNzgJLyogRE1BIEVycm9yIElSUSovCisjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRTAwODAyMAorI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZFMDA5MDAwCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTB4MDAzMDAwMDAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTIwCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjQpCiAjZGVmaW5lIERNVEUwX0lSUQkzNAogI2RlZmluZSBETVRFNF9JUlEJNDQKICNkZWZpbmUgRE1BRTBfSVJRCTM4CiAjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRjYwODAyMAotI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkY2MDkwMDAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0KQorI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZGNjA5MDAwCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykKICNkZWZpbmUgRE1URTBfSVJRCTQ4CS8qIERNQUMwQSovCiAjZGVmaW5lIERNVEU0X0lSUQk3NgkvKiBETUFDMEIgKi8KICNkZWZpbmUgRE1URTZfSVJRCTQwCkBAIC0yOSw3ICs0NSwyOSBAQAogI2RlZmluZSBETUFFMV9JUlEJNzQJLyogRE1BIEVycm9yIElSUSovCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRTAwODAyMAogI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkRDMDgwMjAKLSNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZEQzA5MDAwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkRDMDkwMDAKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0KQorI2RlZmluZSBETVRFMF9JUlEJNDgJLyogRE1BQzBBKi8KKyNkZWZpbmUgRE1URTRfSVJRCTc2CS8qIERNQUMwQiAqLworI2RlZmluZSBETVRFNl9JUlEJNDAKKyNkZWZpbmUgRE1URThfSVJRCTQyCS8qIERNQUMxQSAqLworI2RlZmluZSBETVRFOV9JUlEJNDMKKyNkZWZpbmUgRE1URTEwX0lSUQk3MgkvKiBETUFDMUIgKi8KKyNkZWZpbmUgRE1URTExX0lSUQk3MworI2RlZmluZSBETUFFMF9JUlEJNzgJLyogRE1BIEVycm9yIElSUSovCisjZGVmaW5lIERNQUUxX0lSUQk3NAkvKiBETUEgRXJyb3IgSVJRKi8KKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZFMDA4MDIwCisjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGREMwODAyMAorI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZFMDA5MDAwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UxCTB4RkRDMDkwMDAKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMHgwMDYwMDAwMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMjEKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKICNkZWZpbmUgRE1URTBfSVJRCTM0CiAjZGVmaW5lIERNVEU0X0lSUQk0NApAQCAtNDEsNyArNzksMTEgQEAKICNkZWZpbmUgRE1BRTBfSVJRCTM4CS8qIERNQSBFcnJvciBJUlEgKi8KICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZDODA4MDIwCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGQzgxODAyMAotI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkM4MDkwMDAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRTAJMHhGQzgwOTAwMAorI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCiAjZWxzZSAvKiBTSDc3ODUgKi8KICNkZWZpbmUgRE1URTBfSVJRCTMzCiAjZGVmaW5lIERNVEU0X0lSUQkzNwpAQCAtNTQsMTggKzk2LDE3IEBACiAjZGVmaW5lIERNQUUxX0lSUQk1OAkvKiBETUEgRXJyb3IgSVJRMSAqLwogI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkM4MDgwMjAKICNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweEZDQzA4MDIwCi0jZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGQzgwOTAwMAorI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZDODA5MDAwCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKICNlbmRpZgogCi0jZGVmaW5lIFJFUV9IRQkweDAwMDAwMEMwCi0jZGVmaW5lIFJFUV9ICTB4MDAwMDAwODAKLSNkZWZpbmUgUkVRX0xFCTB4MDAwMDAwNDAKLSNkZWZpbmUgVE1fQlVSU1QgMHgwMDAwMDIwCi0jZGVmaW5lIFRTXzgJMHgwMDAwMDAwMAotI2RlZmluZSBUU18xNgkweDAwMDAwMDA4Ci0jZGVmaW5lIFRTXzMyCTB4MDAwMDAwMTAKLSNkZWZpbmUgVFNfMTZCTEsJMHgwMDAwMDAxOAotI2RlZmluZSBUU18zMkJMSwkweDAwMTAwMDAwCisjZGVmaW5lIFJFUV9IRQkJMHgwMDAwMDBDMAorI2RlZmluZSBSRVFfSAkJMHgwMDAwMDA4MAorI2RlZmluZSBSRVFfTEUJCTB4MDAwMDAwNDAKKyNkZWZpbmUgVE1fQlVSU1QJMHgwMDAwMDAyMAogCiAvKgogICogVGhlIFN1cGVySCBETUFDIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHRyYW5zbWl0IHNpemVzLCB3ZSBsaXN0IHRoZW0gaGVyZSwKQEAgLTc0LDIyICsxMTUsMzEgQEAKICAqIERlZmF1bHRzIHRvIGEgNjQtYml0IHRyYW5zZmVyIHNpemUuCiAgKi8KIGVudW0gewotCVhNSVRfU1pfOEJJVCwKLQlYTUlUX1NaXzE2QklULAotCVhNSVRfU1pfMzJCSVQsCi0JWE1JVF9TWl8xMjhCSVQsCi0JWE1JVF9TWl8yNTZCSVQsCisJWE1JVF9TWl84QklUCQk9IDAsCisJWE1JVF9TWl8xNkJJVAkJPSAxLAorCVhNSVRfU1pfMzJCSVQJCT0gMiwKKwlYTUlUX1NaXzY0QklUCQk9IDcsCisJWE1JVF9TWl8xMjhCSVQJCT0gMywKKwlYTUlUX1NaXzI1NkJJVAkJPSA0LAorCVhNSVRfU1pfMTI4QklUX0JMSwk9IDB4YiwKKwlYTUlUX1NaXzI1NkJJVF9CTEsJPSAweGMsCiB9OwogCiAvKgogICogVGhlIERNQSBjb3VudCBpcyBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSBfX21heWJlX3VudXNlZCA9IHsKLQlbWE1JVF9TWl84QklUXQkJPSAwLAotCVtYTUlUX1NaXzE2QklUXQkJPSAxLAotCVtYTUlUX1NaXzMyQklUXQkJPSAyLAotCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAotCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAotfTsKKyNkZWZpbmUgVFNfU0hJRlQgewkJCVwKKwlbWE1JVF9TWl84QklUXQkJPSAwLAlcCisJW1hNSVRfU1pfMTZCSVRdCQk9IDEsCVwKKwlbWE1JVF9TWl8zMkJJVF0JCT0gMiwJXAorCVtYTUlUX1NaXzY0QklUXQkJPSAzLAlcCisJW1hNSVRfU1pfMTI4QklUXQk9IDQsCVwKKwlbWE1JVF9TWl8yNTZCSVRdCT0gNSwJXAorCVtYTUlUX1NaXzEyOEJJVF9CTEtdCT0gNCwJXAorCVtYTUlUX1NaXzI1NkJJVF9CTEtdCT0gNSwJXAorfQorCisjZGVmaW5lIFRTX0lOREVYMlZBTChpKQkoKCgoaSkgJiAzKSA8PCBDSENSX1RTX0xPV19TSElGVCkgfCBcCisJCQkgKCgoKGkpID4+IDIpICYgMykgPDwgQ0hDUl9UU19ISUdIX1NISUZUKSkKIAogI2VuZGlmIC8qIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmgKaW5kZXggYmNiMzAyNC4uMTE0YTM2OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaApAQCAtNiw4ICs2LDYgQEAKICNpZmRlZiBDT05GSUdfQ1BVX1NINEEKIAogI2RlZmluZSBETUFPUl9JTklUCShETUFPUl9ETUUpCi0jZGVmaW5lIENIQ1JfVFNfTUFTSwkweDE4Ci0jZGVmaW5lIENIQ1JfVFNfU0hJRlQJMwogCiAjaW5jbHVkZSA8Y3B1L2RtYS1zaDRhLmg+CiAjZWxzZSAvKiBDT05GSUdfQ1BVX1NINEEgKi8KQEAgLTI5LDggKzI3LDEwIEBACiAjZGVmaW5lIFRTXzMyCQkweDAwMDAwMDMwCiAjZGVmaW5lIFRTXzY0CQkweDAwMDAwMDAwCiAKLSNkZWZpbmUgQ0hDUl9UU19NQVNLCTB4NzAKLSNkZWZpbmUgQ0hDUl9UU19TSElGVAk0CisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHg3MAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAk0CisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKIAogI2RlZmluZSBETUFPUl9DT0QJMHgwMDAwMDAwOAogCkBAIC00MSwyMyArNDEsMjYgQEAKICAqIERlZmF1bHRzIHRvIGEgNjQtYml0IHRyYW5zZmVyIHNpemUuCiAgKi8KIGVudW0gewotCVhNSVRfU1pfNjRCSVQsCi0JWE1JVF9TWl84QklULAotCVhNSVRfU1pfMTZCSVQsCi0JWE1JVF9TWl8zMkJJVCwKLQlYTUlUX1NaXzI1NkJJVCwKKwlYTUlUX1NaXzhCSVQJPSAxLAorCVhNSVRfU1pfMTZCSVQJPSAyLAorCVhNSVRfU1pfMzJCSVQJPSAzLAorCVhNSVRfU1pfNjRCSVQJPSAwLAorCVhNSVRfU1pfMjU2QklUCT0gNCwKIH07CiAKIC8qCiAgKiBUaGUgRE1BIGNvdW50IGlzIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2Zlci4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdIF9fbWF5YmVfdW51c2VkID0gewotCVtYTUlUX1NaXzY0QklUXQkJPSAzLAotCVtYTUlUX1NaXzhCSVRdCQk9IDAsCi0JW1hNSVRfU1pfMTZCSVRdCQk9IDEsCi0JW1hNSVRfU1pfMzJCSVRdCQk9IDIsCi0JW1hNSVRfU1pfMjU2QklUXQk9IDUsCi19OworI2RlZmluZSBUU19TSElGVCB7CQkJXAorCVtYTUlUX1NaXzhCSVRdCQk9IDAsCVwKKwlbWE1JVF9TWl8xNkJJVF0JCT0gMSwJXAorCVtYTUlUX1NaXzMyQklUXQkJPSAyLAlcCisJW1hNSVRfU1pfNjRCSVRdCQk9IDMsCVwKKwlbWE1JVF9TWl8yNTZCSVRdCT0gNSwJXAorfQorCisjZGVmaW5lIFRTX0lOREVYMlZBTChpKQkoKChpKSAmIDcpIDw8IENIQ1JfVFNfTE9XX1NISUZUKQorCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDRfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9tbXVfY29udGV4dC5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKaW5kZXggM2NlN2VmNi4uMDNlYTc1YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmgKQEAgLTI1LDYgKzI1LDEwIEBACiAKICNkZWZpbmUgTU1VQ1JfVEkJCSgxPDwyKQogCisjZGVmaW5lIE1NVUNSX1VSQgkJMHgwMEZDMDAwMAorI2RlZmluZSBNTVVDUl9VUkJfU0hJRlQJCTE4CisjZGVmaW5lIE1NVUNSX1VSQl9ORU5UUklFUwk2NAorCiAjaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpICYmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NUNDApCiAjZGVmaW5lIE1NVUNSX1NFCQkoMSA8PCA0KQogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zcS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NxLmgKaW5kZXggNTg2ZDY0OS4uNzQ3MTZiYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NxLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NxLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNkZWZpbmUgX19BU01fQ1BVX1NINF9TUV9ICiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogLyoKICAqIFN0b3JlIHF1ZXVlcyByYW5nZSBmcm9tIGUwMDAwMDAwLWUzZmZmZmZjLCBhbGxvd2luZyBhcHByb3guIDY0TUIgdG8gYmUKQEAgLTI4LDcgKzI5LDcgQEAKIAogLyogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jICovCiB1bnNpZ25lZCBsb25nIHNxX3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgaW50IHNpemUsCi0JCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHBncHJvdF90IHByb3QpOwogdm9pZCBzcV91bm1hcCh1bnNpZ25lZCBsb25nIHZhZGRyKTsKIHZvaWQgc3FfZmx1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgaW50IGxlbik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS91YmMuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS91YmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg2ZTE3MC4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvdWJjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tc2gvY3B1LXNoNC91YmMuaAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBOaWliZSBZdXRha2EKLSAqIENvcHlyaWdodCAoQykgMjAwMyBQYXVsIE11bmR0Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGluZW8gU29sdXRpb25zIEluYy4gc3VwcG9ydCBTSDRBIFVCQwotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9fQVNNX0NQVV9TSDRfVUJDX0gKLSNkZWZpbmUgX19BU01fQ1BVX1NINF9VQkNfSAotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0jZGVmaW5lIFVCQ19DQlIwCQkweGZmMjAwMDAwCi0jZGVmaW5lIFVCQ19DUlIwCQkweGZmMjAwMDA0Ci0jZGVmaW5lIFVCQ19DQVIwCQkweGZmMjAwMDA4Ci0jZGVmaW5lIFVCQ19DQU1SMAkJMHhmZjIwMDAwYwotI2RlZmluZSBVQkNfQ0JSMQkJMHhmZjIwMDAyMAotI2RlZmluZSBVQkNfQ1JSMQkJMHhmZjIwMDAyNAotI2RlZmluZSBVQkNfQ0FSMQkJMHhmZjIwMDAyOAotI2RlZmluZSBVQkNfQ0FNUjEJCTB4ZmYyMDAwMmMKLSNkZWZpbmUgVUJDX0NEUjEJCTB4ZmYyMDAwMzAKLSNkZWZpbmUgVUJDX0NETVIxCQkweGZmMjAwMDM0Ci0jZGVmaW5lIFVCQ19DRVRSMQkJMHhmZjIwMDAzOAotI2RlZmluZSBVQkNfQ0NNRlIJCTB4ZmYyMDA2MDAKLSNkZWZpbmUgVUJDX0NCQ1IJCTB4ZmYyMDA2MjAKLQotLyogQ0JSCSovCi0jZGVmaW5lIFVCQ19DQlJfQUlFCQkoMHgwMTw8MzApCi0jZGVmaW5lIFVCQ19DQlJfSURfSU5TVAkJKDB4MDE8PDQpCi0jZGVmaW5lIFVCQ19DQlJfUldfUkVBRAkJKDB4MDE8PDEpCi0jZGVmaW5lIFVCQ19DQlJfQ0UJCSgweDAxKQotCi0jZGVmaW5lCVVCQ19DQlJfQUlWX01BU0sJKDB4MDBGRjAwMDApCi0jZGVmaW5lCVVCQ19DQlJfQUlWX1NISUZUCSgxNikKLSNkZWZpbmUgVUJDX0NCUl9BSVZfU0VUKGFzaWQpCSgoKGFzaWQpPDxVQkNfQ0JSX0FJVl9TSElGVCkgJiBVQkNfQ0JSX0FJVl9NQVNLKQotCi0jZGVmaW5lIFVCQ19DQlJfSU5JVAkJMHgyMDAwMDAwMAotCi0vKiBDUlIJKi8KLSNkZWZpbmUgVUJDX0NSUl9SRVMJCSgweDAxPDwxMykKLSNkZWZpbmUgVUJDX0NSUl9QQ0IJCSgweDAxPDwxKQotI2RlZmluZSBVQkNfQ1JSX0JJRQkJKDB4MDEpCi0KLSNkZWZpbmUgVUJDX0NSUl9JTklUCQkweDAwMDAyMDAwCi0KLSNlbHNlCS8qIENPTkZJR19DUFVfU0g0ICovCi0jZGVmaW5lIFVCQ19CQVJBCQkweGZmMjAwMDAwCi0jZGVmaW5lIFVCQ19CQU1SQQkJMHhmZjIwMDAwNAotI2RlZmluZSBVQkNfQkJSQQkJMHhmZjIwMDAwOAotI2RlZmluZSBVQkNfQkFTUkEJCTB4ZmYwMDAwMTQKLSNkZWZpbmUgVUJDX0JBUkIJCTB4ZmYyMDAwMGMKLSNkZWZpbmUgVUJDX0JBTVJCCQkweGZmMjAwMDEwCi0jZGVmaW5lIFVCQ19CQlJCCQkweGZmMjAwMDE0Ci0jZGVmaW5lIFVCQ19CQVNSQgkJMHhmZjAwMDAxOAotI2RlZmluZSBVQkNfQkRSQgkJMHhmZjIwMDAxOAotI2RlZmluZSBVQkNfQkRNUkIJCTB4ZmYyMDAwMWMKLSNkZWZpbmUgVUJDX0JSQ1IJCTB4ZmYyMDAwMjAKLSNlbmRpZgkvKiBDT05GSUdfQ1BVX1NINCAqLwotCi0jZW5kaWYgLyogX19BU01fQ1BVX1NINF9VQkNfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9tYWdpY3BhbmVscjIuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21hZ2ljcGFuZWxyMi5oCmluZGV4IGM2NDRhNzcuLjE4M2EyZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21hZ2ljcGFuZWxyMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21hZ2ljcGFuZWxyMi5oCkBAIC0xOSwxMiArMTksMTIgQEAKICNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgogCiAKLSNkZWZpbmUgU0VUQklUU19PVVRCKG1hc2ssIHJlZykgICBjdHJsX291dGIoY3RybF9pbmIocmVnKSB8IG1hc2ssIHJlZykKLSNkZWZpbmUgU0VUQklUU19PVVRXKG1hc2ssIHJlZykgICBjdHJsX291dHcoY3RybF9pbncocmVnKSB8IG1hc2ssIHJlZykKLSNkZWZpbmUgU0VUQklUU19PVVRMKG1hc2ssIHJlZykgICBjdHJsX291dGwoY3RybF9pbmwocmVnKSB8IG1hc2ssIHJlZykKLSNkZWZpbmUgQ0xSQklUU19PVVRCKG1hc2ssIHJlZykgICBjdHJsX291dGIoY3RybF9pbmIocmVnKSAmIH5tYXNrLCByZWcpCi0jZGVmaW5lIENMUkJJVFNfT1VUVyhtYXNrLCByZWcpICAgY3RybF9vdXR3KGN0cmxfaW53KHJlZykgJiB+bWFzaywgcmVnKQotI2RlZmluZSBDTFJCSVRTX09VVEwobWFzaywgcmVnKSAgIGN0cmxfb3V0bChjdHJsX2lubChyZWcpICYgfm1hc2ssIHJlZykKKyNkZWZpbmUgU0VUQklUU19PVVRCKG1hc2ssIHJlZykgICBfX3Jhd193cml0ZWIoX19yYXdfcmVhZGIocmVnKSB8IG1hc2ssIHJlZykKKyNkZWZpbmUgU0VUQklUU19PVVRXKG1hc2ssIHJlZykgICBfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcocmVnKSB8IG1hc2ssIHJlZykKKyNkZWZpbmUgU0VUQklUU19PVVRMKG1hc2ssIHJlZykgICBfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocmVnKSB8IG1hc2ssIHJlZykKKyNkZWZpbmUgQ0xSQklUU19PVVRCKG1hc2ssIHJlZykgICBfX3Jhd193cml0ZWIoX19yYXdfcmVhZGIocmVnKSAmIH5tYXNrLCByZWcpCisjZGVmaW5lIENMUkJJVFNfT1VUVyhtYXNrLCByZWcpICAgX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KHJlZykgJiB+bWFzaywgcmVnKQorI2RlZmluZSBDTFJCSVRTX09VVEwobWFzaywgcmVnKSAgIF9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChyZWcpICYgfm1hc2ssIHJlZykKIAogCiAjZGVmaW5lIFBBX0xFRCAgICAgICAgICBQT1JUX1BBRFIgICAgICAvKiBMRUQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWRyZWFtY2FzdC9tYWNoL3N5c2FzaWMuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWRyZWFtY2FzdC9tYWNoL3N5c2FzaWMuaAppbmRleCBmMzM0MjY2Li41OGY3MTBlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1kcmVhbWNhc3QvbWFjaC9zeXNhc2ljLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtZHJlYW1jYXN0L21hY2gvc3lzYXNpYy5oCkBAIC0zOSw1ICszOSwxMCBAQAogCiAjZGVmaW5lIEhXX0VWRU5UX0lSUV9NQVggKEhXX0VWRU5UX0lSUV9CQVNFICsgOTUpCiAKKy8qIGFyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jICovCitleHRlcm4gaW50IHN5c3RlbWFzaWNfaXJxX2RlbXV4KGludCk7CitleHRlcm4gdm9pZCBzeXN0ZW1hc2ljX2lycV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgYWljYV90aW1lX2luaXQodm9pZCk7CisKICNlbmRpZiAvKiBfX0FTTV9TSF9EUkVBTUNBU1RfU1lTQVNJQ19IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNkazc3ODYvbWFjaC9mcGdhLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZGs3Nzg2L21hY2gvZnBnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMjBkNjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZGs3Nzg2L21hY2gvZnBnYS5oCkBAIC0wLDAgKzEsMTE0IEBACisjaWZuZGVmIF9fTUFDSF9TREs3Nzg2X0ZQR0FfSAorI2RlZmluZSBfX01BQ0hfU0RLNzc4Nl9GUEdBX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2RlZmluZSBTUlNUUgkJMHgwMDAKKyNkZWZpbmUgIFNSU1RSX01BR0lDCTB4MTk3MQkvKiBGaXhlZCBtYWdpY2FsIHJlYWQgdmFsdWUgKi8KKworI2RlZmluZSBJTlRBU1IJCTB4MDEwCisjZGVmaW5lIElOVEFNUgkJMHgwMjAKKyNkZWZpbmUgTU9EU1dSCQkweDAzMAorI2RlZmluZSBJTlRURVNUUgkweDA0MAorI2RlZmluZSBTWVNTUgkJMHgwNTAKKyNkZWZpbmUgTlJHUFIJCTB4MDYwCisjZGVmaW5lIE5NSVNSCQkweDA3MAorCisjZGVmaW5lIE5NSU1SCQkweDA4MAorI2RlZmluZSAgTk1JTVJfTUFOX05NSU0JQklUKDApCS8qIE1hbnVhbCBOTUkgbWFzayAqLworI2RlZmluZSAgTk1JTVJfQVVYX05NSU0JQklUKDEpCS8qIEF1eGlsaWFyeSBOTUkgbWFzayAqLworCisjZGVmaW5lIElOVEJTUgkJMHgwOTAKKyNkZWZpbmUgSU5UQk1SCQkweDBhMAorI2RlZmluZSBVU1JMRURSCQkweDBiMAorI2RlZmluZSBNQVBTV1IJCTB4MGMwCisjZGVmaW5lIEZQR0FWUgkJMHgwZDAKKyNkZWZpbmUgRlBHQURSCQkweDBlMAorI2RlZmluZSBQQ0JSUgkJMHgwZjAKKyNkZWZpbmUgUlNSCQkweDEwMAorI2RlZmluZSBFWFRBU1IJCTB4MTEwCisjZGVmaW5lIFNQQ0FSCQkweDEyMAorI2RlZmluZSBJTlRNU1IJCTB4MTMwCisjZGVmaW5lIFBDSUVDUgkJMHgxNDAKKyNkZWZpbmUgRkFFUgkJMHgxNTAKKyNkZWZpbmUgVVNSR1BJUgkJMHgxNjAKKy8qIDB4MTcwIHJlc2VydmVkICovCisjZGVmaW5lIExDTEFTUgkJMHgxODAKKworI2RlZmluZSBTQkNSCQkweDE5MAorI2RlZmluZSAgU0NCUl9JMkNNRU4JQklUKDApCS8qIEZQR0EgSTJDIG1hc3RlciBlbmFibGUgKi8KKyNkZWZpbmUgIFNDQlJfSTJDQ0VOCUJJVCgxKQkvKiBDUFUgSTJDIG1hc3RlciBlbmFibGUgKi8KKworI2RlZmluZSBQV1JDUgkJMHgxYTAKKyNkZWZpbmUgU1BDQlIJCTB4MWIwCisjZGVmaW5lIFNQSUNSCQkweDFjMAorI2RlZmluZSBTUElEUgkJMHgxZDAKKyNkZWZpbmUgSTJDQ1IJCTB4MWUwCisjZGVmaW5lIEkyQ0RSCQkweDFmMAorI2RlZmluZSBGUEdBQ1IJCTB4MjAwCisjZGVmaW5lIElBU0VMUjEJCTB4MjEwCisjZGVmaW5lIElBU0VMUjIJCTB4MjIwCisjZGVmaW5lIElBU0VMUjMJCTB4MjMwCisjZGVmaW5lIElBU0VMUjQJCTB4MjQwCisjZGVmaW5lIElBU0VMUjUJCTB4MjUwCisjZGVmaW5lIElBU0VMUjYJCTB4MjYwCisjZGVmaW5lIElBU0VMUjcJCTB4MjcwCisjZGVmaW5lIElBU0VMUjgJCTB4MjgwCisjZGVmaW5lIElBU0VMUjkJCTB4MjkwCisjZGVmaW5lIElBU0VMUjEwCTB4MmEwCisjZGVmaW5lIElBU0VMUjExCTB4MmIwCisjZGVmaW5lIElBU0VMUjEyCTB4MmMwCisjZGVmaW5lIElBU0VMUjEzCTB4MmQwCisjZGVmaW5lIElBU0VMUjE0CTB4MmUwCisjZGVmaW5lIElBU0VMUjE1CTB4MmYwCisvKiAweDMwMCByZXNlcnZlZCAqLworI2RlZmluZSBJQlNFTFIxCQkweDMxMAorI2RlZmluZSBJQlNFTFIyCQkweDMyMAorI2RlZmluZSBJQlNFTFIzCQkweDMzMAorI2RlZmluZSBJQlNFTFI0CQkweDM0MAorI2RlZmluZSBJQlNFTFI1CQkweDM1MAorI2RlZmluZSBJQlNFTFI2CQkweDM2MAorI2RlZmluZSBJQlNFTFI3CQkweDM3MAorI2RlZmluZSBJQlNFTFI4CQkweDM4MAorI2RlZmluZSBJQlNFTFI5CQkweDM5MAorI2RlZmluZSBJQlNFTFIxMAkweDNhMAorI2RlZmluZSBJQlNFTFIxMQkweDNiMAorI2RlZmluZSBJQlNFTFIxMgkweDNjMAorI2RlZmluZSBJQlNFTFIxMwkweDNkMAorI2RlZmluZSBJQlNFTFIxNAkweDNlMAorI2RlZmluZSBJQlNFTFIxNQkweDNmMAorI2RlZmluZSBVU1JBQ1IJCTB4NDAwCisjZGVmaW5lIEJFRVBSCQkweDQxMAorI2RlZmluZSBVU1JMQ0RSCQkweDQyMAorI2RlZmluZSBTTUJDUgkJMHg0MzAKKyNkZWZpbmUgU01CRFIJCTB4NDQwCisjZGVmaW5lIFVTQkNSCQkweDQ1MAorI2RlZmluZSBBTVNSCQkweDQ2MAorI2RlZmluZSBBQ0NSCQkweDQ3MAorI2RlZmluZSBTRElGQ1IJCTB4NDgwCisKKy8qIGFyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9mcGdhLmMgKi8KK2V4dGVybiB2b2lkIF9faW9tZW0gKnNkazc3ODZfZnBnYV9iYXNlOworZXh0ZXJuIHZvaWQgc2RrNzc4Nl9mcGdhX2luaXQodm9pZCk7CisKKyNkZWZpbmUgU0RLNzc4Nl9GUEdBX1JFR0FERFIocmVnKQkoc2RrNzc4Nl9mcGdhX2Jhc2UgKyAocmVnKSkKKworLyoKKyAqIEEgY29udmVuaWVuY2Ugd3JhcHBlciBmcm9tIHJlZ2lzdGVyIG9mZnNldCB0byBpbnRlcm5hbCBJMkMgYWRkcmVzcywKKyAqIHdoZW4gdGhlIEZQR0EgaXMgaW4gSTJDIHNsYXZlIG1vZGUuCisgKi8KKyNkZWZpbmUgU0RLNzc4Nl9GUEdBX0kyQ0FERFIocmVnKQkoKHJlZykgPj4gMykKKworc3RhdGljIGlubGluZSB1MTYgZnBnYV9yZWFkX3JlZyh1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiBpb3JlYWQxNihzZGs3Nzg2X2ZwZ2FfYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcGdhX3dyaXRlX3JlZyh1MTYgdmFsLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCWlvd3JpdGUxNih2YWwsIHNkazc3ODZfZnBnYV9iYXNlICsgcmVnKTsKK30KKworI2VuZGlmIC8qIF9fTUFDSF9TREs3Nzg2X0ZQR0FfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtc2RrNzc4Ni9tYWNoL2lycS5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtc2RrNzc4Ni9tYWNoL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNTg0NjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZGs3Nzg2L21hY2gvaXJxLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fTUFDSF9TREs3Nzg2X0lSUV9ICisjZGVmaW5lIF9fTUFDSF9TREs3Nzg2X0lSUV9ICisKKy8qIGFyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9pcnEuYyAqLworZXh0ZXJuIHZvaWQgc2RrNzc4Nl9pbml0X2lycSh2b2lkKTsKKworI2VuZGlmIC8qIF9fTUFDSF9TREs3Nzg2X0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZS9tYWNoL3NlNzM0My5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtc2UvbWFjaC9zZTczNDMuaAppbmRleCA3NDk5MTRiLi44ZDgxNzBkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZS9tYWNoL3NlNzM0My5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNlL21hY2gvc2U3MzQzLmgKQEAgLTk0LDI2ICs5NCwyNiBAQAogCiAjZGVmaW5lIFBPUlRfRFJWQ1IJMHhBNDA1MDE4MAogCi0jZGVmaW5lIFBPUlRfUEFEUiAgCTB4QTQwNTAxMjAKLSNkZWZpbmUgUE9SVF9QQkRSICAJMHhBNDA1MDEyMgotI2RlZmluZSBQT1JUX1BDRFIgIAkweEE0MDUwMTI0Ci0jZGVmaW5lIFBPUlRfUEREUiAgCTB4QTQwNTAxMjYKLSNkZWZpbmUgUE9SVF9QRURSICAJMHhBNDA1MDEyOAotI2RlZmluZSBQT1JUX1BGRFIgIAkweEE0MDUwMTJBCi0jZGVmaW5lIFBPUlRfUEdEUiAgCTB4QTQwNTAxMkMKLSNkZWZpbmUgUE9SVF9QSERSICAJMHhBNDA1MDEyRQotI2RlZmluZSBQT1JUX1BKRFIgIAkweEE0MDUwMTMwCi0jZGVmaW5lIFBPUlRfUEtEUiAgCTB4QTQwNTAxMzIKLSNkZWZpbmUgUE9SVF9QTERSICAJMHhBNDA1MDEzNAotI2RlZmluZSBQT1JUX1BNRFIgIAkweEE0MDUwMTM2Ci0jZGVmaW5lIFBPUlRfUE5EUiAgCTB4QTQwNTAxMzgKLSNkZWZpbmUgUE9SVF9QUURSICAJMHhBNDA1MDEzQQotI2RlZmluZSBQT1JUX1BSRFIgIAkweEE0MDUwMTNDCi0jZGVmaW5lIFBPUlRfUFREUiAgCTB4QTQwNTAxNjAKLSNkZWZpbmUgUE9SVF9QVURSICAJMHhBNDA1MDE2MgotI2RlZmluZSBQT1JUX1BWRFIgIAkweEE0MDUwMTY0Ci0jZGVmaW5lIFBPUlRfUFdEUiAgCTB4QTQwNTAxNjYKLSNkZWZpbmUgUE9SVF9QWURSICAJMHhBNDA1MDE2OAorI2RlZmluZSBQT1JUX1BBRFIJMHhBNDA1MDEyMAorI2RlZmluZSBQT1JUX1BCRFIJMHhBNDA1MDEyMgorI2RlZmluZSBQT1JUX1BDRFIJMHhBNDA1MDEyNAorI2RlZmluZSBQT1JUX1BERFIJMHhBNDA1MDEyNgorI2RlZmluZSBQT1JUX1BFRFIJMHhBNDA1MDEyOAorI2RlZmluZSBQT1JUX1BGRFIJMHhBNDA1MDEyQQorI2RlZmluZSBQT1JUX1BHRFIJMHhBNDA1MDEyQworI2RlZmluZSBQT1JUX1BIRFIJMHhBNDA1MDEyRQorI2RlZmluZSBQT1JUX1BKRFIJMHhBNDA1MDEzMAorI2RlZmluZSBQT1JUX1BLRFIJMHhBNDA1MDEzMgorI2RlZmluZSBQT1JUX1BMRFIJMHhBNDA1MDEzNAorI2RlZmluZSBQT1JUX1BNRFIJMHhBNDA1MDEzNgorI2RlZmluZSBQT1JUX1BORFIJMHhBNDA1MDEzOAorI2RlZmluZSBQT1JUX1BRRFIJMHhBNDA1MDEzQQorI2RlZmluZSBQT1JUX1BSRFIJMHhBNDA1MDEzQworI2RlZmluZSBQT1JUX1BURFIJMHhBNDA1MDE2MAorI2RlZmluZSBQT1JUX1BVRFIJMHhBNDA1MDE2MgorI2RlZmluZSBQT1JUX1BWRFIJMHhBNDA1MDE2NAorI2RlZmluZSBQT1JUX1BXRFIJMHhBNDA1MDE2NgorI2RlZmluZSBQT1JUX1BZRFIJMHhBNDA1MDE2OAogCiAjZGVmaW5lIEZQR0FfSU4JCTB4YjE0MDAwMDAKICNkZWZpbmUgRlBHQV9PVVQJMHhiMTQwMDAwMgpAQCAtMTMzLDE4ICsxMzMsMTAgQEAKICNkZWZpbmUgU0U3MzQzX0ZQR0FfSVJRX1VBUlRCCTExCiAKICNkZWZpbmUgU0U3MzQzX0ZQR0FfSVJRX05SCTEyCi0jZGVmaW5lIFNFNzM0M19GUEdBX0lSUV9CQVNFCTEyMAotCi0jZGVmaW5lIE1SU0hQQ19JUlEzICAgIAkoU0U3MzQzX0ZQR0FfSVJRX0JBU0UgKyBTRTczNDNfRlBHQV9JUlFfTVJTSFBDMykKLSNkZWZpbmUgTVJTSFBDX0lSUTIgICAgCShTRTczNDNfRlBHQV9JUlFfQkFTRSArIFNFNzM0M19GUEdBX0lSUV9NUlNIUEMyKQotI2RlZmluZSBNUlNIUENfSVJRMSAgICAJKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX01SU0hQQzEpCi0jZGVmaW5lIE1SU0hQQ19JUlEwICAgIAkoU0U3MzQzX0ZQR0FfSVJRX0JBU0UgKyBTRTczNDNfRlBHQV9JUlFfTVJTSFBDMCkKLSNkZWZpbmUgU01DX0lSUQkJKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX1NNQykKLSNkZWZpbmUgVVNCX0lSUQkJKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX1VTQikKLSNkZWZpbmUgVUFSVEFfSVJRCShTRTczNDNfRlBHQV9JUlFfQkFTRSArIFNFNzM0M19GUEdBX0lSUV9VQVJUQSkKLSNkZWZpbmUgVUFSVEJfSVJRCShTRTczNDNfRlBHQV9JUlFfQkFTRSArIFNFNzM0M19GUEdBX0lSUV9VQVJUQikKIAogLyogYXJjaC9zaC9ib2FyZHMvc2UvNzM0My9pcnEuYyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBzZTczNDNfZnBnYV9pcnFbXTsKKwogdm9pZCBpbml0XzczNDNzZV9JUlEodm9pZCk7CiAKICNlbmRpZiAgLyogX19BU01fU0hfSElUQUNISV9TRTczNDNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZQppbmRleCAwZDU4N2RhLi4wMmZkM2FlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTMsOCArMTMsOSBAQAogCiBvYmoteQk6PSBkZWJ1Z3RyYXBzLm8gZG1hLW5vbW11Lm8gZHVtcHN0YWNrLm8gCQkJXAogCSAgIGlkbGUubyBpby5vIGlvX2dlbmVyaWMubyBpcnEubwkJCQlcCi0JICAgaXJxXyQoQklUUykubyBtYWNodmVjLm8gbm1pX2RlYnVnLm8gcHJvY2Vzc18kKEJJVFMpLm8gCVwKLQkgICBwdHJhY2VfJChCSVRTKS5vIHJldHVybl9hZGRyZXNzLm8JCQkJXAorCSAgIGlycV8kKEJJVFMpLm8gbWFjaHZlYy5vIG5taV9kZWJ1Zy5vIHByb2Nlc3MubwkJXAorCSAgIHByb2Nlc3NfJChCSVRTKS5vIHB0cmFjZV8kKEJJVFMpLm8JCQkJXAorCSAgIHJlYm9vdC5vIHJldHVybl9hZGRyZXNzLm8JCQkJCVwKIAkgICBzZXR1cC5vIHNpZ25hbF8kKEJJVFMpLm8gc3lzX3NoLm8gc3lzX3NoJChCSVRTKS5vCQlcCiAJICAgc3lzY2FsbHNfJChCSVRTKS5vIHRpbWUubyB0b3BvbG9neS5vIHRyYXBzLm8JCQlcCiAJICAgdHJhcHNfJChCSVRTKS5vIHVud2luZGVyLm8KQEAgLTIyLDcgKzIzLDcgQEAKIG9iai15CQkJCSs9IGNwdS8KIG9iai0kKENPTkZJR19WU1lTQ0FMTCkJCSs9IHZzeXNjYWxsLwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCi1vYmotJChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykJKz0gc2hfYmlvcy5vIGVhcmx5X3ByaW50ay5vCitvYmotJChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykJKz0gc2hfYmlvcy5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubwogb2JqLSQoQ09ORklHX1NIX0NQVV9GUkVRKQkrPSBjcHVmcmVxLm8KIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gc2hfa3N5bXNfJChCSVRTKS5vIG1vZHVsZS5vCkBAIC0zOSw2ICs0MCw3IEBACiBvYmotJChDT05GSUdfRFdBUkZfVU5XSU5ERVIpCSs9IGR3YXJmLm8KIG9iai0kKENPTkZJR19QRVJGX0VWRU5UUykJKz0gcGVyZl9ldmVudC5vIHBlcmZfY2FsbGNoYWluLm8KIAorb2JqLSQoQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCkJCSs9IGh3X2JyZWFrcG9pbnQubwogb2JqLSQoQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUKQkrPSBsb2NhbHRpbWVyLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQppbmRleCBkOTdjODAzLi4wZTQ4YmM2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCkBAIC0xNyw1ICsxNyw3IEBACiAKIG9iai0kKENPTkZJR19TSF9BREMpCQkrPSBhZGMubwogb2JqLSQoQ09ORklHX1NIX0NMS19DUEcpCSs9IGNsb2NrLWNwZy5vCitvYmotJChDT05GSUdfU0hfRlBVKQkJKz0gZnB1Lm8KK29iai0kKENPTkZJR19TSF9GUFVfRU1VKQkrPSBmcHUubwogCiBvYmoteQkrPSBpcnEvIGluaXQubyBjbG9jay5vIGh3YmxrLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9hZGMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9hZGMuYwppbmRleCBkYTNkNjg3Li5kMzA3NTcxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvYWRjLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2FkYy5jCkBAIC0xOCwxOSArMTgsMTkgQEAKIAogCW9mZiA9IChjaGFubmVsICYgMHgwMykgPDwgMjsKIAotCWNzciA9IGN0cmxfaW5iKEFEQ1NSKTsKKwljc3IgPSBfX3Jhd19yZWFkYihBRENTUik7CiAJY3NyID0gY2hhbm5lbCB8IEFEQ1NSX0FEU1QgfCBBRENTUl9DS1M7Ci0JY3RybF9vdXRiKGNzciwgQURDU1IpOworCV9fcmF3X3dyaXRlYihjc3IsIEFEQ1NSKTsKIAogCWRvIHsKLQkJY3NyID0gY3RybF9pbmIoQURDU1IpOworCQljc3IgPSBfX3Jhd19yZWFkYihBRENTUik7CiAJfSB3aGlsZSAoKGNzciAmIEFEQ1NSX0FERikgPT0gMCk7CiAKIAljc3IgJj0gfihBRENTUl9BREYgfCBBRENTUl9BRFNUKTsKLQljdHJsX291dGIoY3NyLCBBRENTUik7CisJX19yYXdfd3JpdGViKGNzciwgQURDU1IpOwogCi0JcmV0dXJuICgoKGN0cmxfaW5iKEFERFJBSCArIG9mZikgPDwgOCkgfAotCQljdHJsX2luYihBRERSQUwgKyBvZmYpKSA+PiA2KTsKKwlyZXR1cm4gKCgoX19yYXdfcmVhZGIoQUREUkFIICsgb2ZmKSA8PCA4KSB8CisJCV9fcmF3X3JlYWRiKEFERFJBTCArIG9mZikpID4+IDYpOwogfQogCiBFWFBPUlRfU1lNQk9MKGFkY19zaW5nbGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLWNwZy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLWNwZy5jCmluZGV4IDZkZmUyY2MuLmVlZDVlYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay1jcGcuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2stY3BnLmMKQEAgLTE0OSw3ICsxNDksOCBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaF9jbGtfZGl2NF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCXN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgKnRhYmxlID0gY2xrLT5wcml2OworCXN0cnVjdCBjbGtfZGl2NF90YWJsZSAqZDR0ID0gY2xrLT5wcml2OworCXN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgKnRhYmxlID0gZDR0LT5kaXZfbXVsdF90YWJsZTsKIAl1bnNpZ25lZCBpbnQgaWR4OwogCiAJY2xrX3JhdGVfdGFibGVfYnVpbGQoY2xrLCBjbGstPmZyZXFfdGFibGUsIHRhYmxlLT5ucl9kaXZpc29ycywKQEAgLTE2MCwxNyArMTYxLDkwIEBACiAJcmV0dXJuIGNsay0+ZnJlcV90YWJsZVtpZHhdLmZyZXF1ZW5jeTsKIH0KIAorc3RhdGljIGludCBzaF9jbGtfZGl2NF9zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCXN0cnVjdCBjbGtfZGl2NF90YWJsZSAqZDR0ID0gY2xrLT5wcml2OworCXN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgKnRhYmxlID0gZDR0LT5kaXZfbXVsdF90YWJsZTsKKwl1MzIgdmFsdWU7CisJaW50IHJldDsKKworCWlmICghc3RyY21wKCJwbGxfY2xrIiwgcGFyZW50LT5uYW1lKSkKKwkJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpICYgfigxIDw8IDcpOworCWVsc2UKKwkJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpIHwgKDEgPDwgNyk7CisKKwlyZXQgPSBjbGtfcmVwYXJlbnQoY2xrLCBwYXJlbnQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJX19yYXdfd3JpdGVsKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOworCisJLyogUmViaXVsZCB0aGUgZnJlcXVlbmN5IHRhYmxlICovCisJY2xrX3JhdGVfdGFibGVfYnVpbGQoY2xrLCBjbGstPmZyZXFfdGFibGUsIHRhYmxlLT5ucl9kaXZpc29ycywKKwkJCSAgICAgdGFibGUsICZjbGstPmFyY2hfZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfY2xrX2RpdjRfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUsIGludCBhbGdvX2lkKQoreworCXN0cnVjdCBjbGtfZGl2NF90YWJsZSAqZDR0ID0gY2xrLT5wcml2OworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJaW50IGlkeCA9IGNsa19yYXRlX3RhYmxlX2ZpbmQoY2xrLCBjbGstPmZyZXFfdGFibGUsIHJhdGUpOworCWlmIChpZHggPCAwKQorCQlyZXR1cm4gaWR4OworCisJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXZhbHVlICY9IH4oMHhmIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJdmFsdWUgfD0gKGlkeCA8PCBjbGstPmVuYWJsZV9iaXQpOworCV9fcmF3X3dyaXRlbCh2YWx1ZSwgY2xrLT5lbmFibGVfcmVnKTsKKworCWlmIChkNHQtPmtpY2spCisJCWQ0dC0+a2ljayhjbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfY2xrX2RpdjRfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKSAmIH4oMSA8PCA4KSwgY2xrLT5lbmFibGVfcmVnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hfY2xrX2RpdjRfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgfCAoMSA8PCA4KSwgY2xrLT5lbmFibGVfcmVnKTsKK30KKwogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoX2Nsa19kaXY0X2Nsa19vcHMgPSB7CiAJLnJlY2FsYwkJPSBzaF9jbGtfZGl2NF9yZWNhbGMsCisJLnNldF9yYXRlCT0gc2hfY2xrX2RpdjRfc2V0X3JhdGUsCiAJLnJvdW5kX3JhdGUJPSBzaF9jbGtfZGl2X3JvdW5kX3JhdGUsCiB9OwogCi1pbnQgX19pbml0IHNoX2Nsa19kaXY0X3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsa3MsIGludCBuciwKLQkJCQlzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlICp0YWJsZSkKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaF9jbGtfZGl2NF9lbmFibGVfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IHNoX2Nsa19kaXY0X3JlY2FsYywKKwkuc2V0X3JhdGUJPSBzaF9jbGtfZGl2NF9zZXRfcmF0ZSwKKwkucm91bmRfcmF0ZQk9IHNoX2Nsa19kaXZfcm91bmRfcmF0ZSwKKwkuZW5hYmxlCQk9IHNoX2Nsa19kaXY0X2VuYWJsZSwKKwkuZGlzYWJsZQk9IHNoX2Nsa19kaXY0X2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2hfY2xrX2RpdjRfcmVwYXJlbnRfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IHNoX2Nsa19kaXY0X3JlY2FsYywKKwkuc2V0X3JhdGUJPSBzaF9jbGtfZGl2NF9zZXRfcmF0ZSwKKwkucm91bmRfcmF0ZQk9IHNoX2Nsa19kaXZfcm91bmRfcmF0ZSwKKwkuZW5hYmxlCQk9IHNoX2Nsa19kaXY0X2VuYWJsZSwKKwkuZGlzYWJsZQk9IHNoX2Nsa19kaXY0X2Rpc2FibGUsCisJLnNldF9wYXJlbnQJPSBzaF9jbGtfZGl2NF9zZXRfcGFyZW50LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2hfY2xrX2RpdjRfcmVnaXN0ZXJfb3BzKHN0cnVjdCBjbGsgKmNsa3MsIGludCBuciwKKwkJCXN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUsIHN0cnVjdCBjbGtfb3BzICpvcHMpCiB7CiAJc3RydWN0IGNsayAqY2xrcDsKIAl2b2lkICpmcmVxX3RhYmxlOwotCWludCBucl9kaXZzID0gdGFibGUtPm5yX2Rpdmlzb3JzOworCWludCBucl9kaXZzID0gdGFibGUtPmRpdl9tdWx0X3RhYmxlLT5ucl9kaXZpc29yczsKIAlpbnQgZnJlcV90YWJsZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSk7CiAJaW50IHJldCA9IDA7CiAJaW50IGs7CkBAIC0xODUsNyArMjU5LDcgQEAKIAlmb3IgKGsgPSAwOyAhcmV0ICYmIChrIDwgbnIpOyBrKyspIHsKIAkJY2xrcCA9IGNsa3MgKyBrOwogCi0JCWNsa3AtPm9wcyA9ICZzaF9jbGtfZGl2NF9jbGtfb3BzOworCQljbGtwLT5vcHMgPSBvcHM7CiAJCWNsa3AtPmlkID0gLTE7CiAJCWNsa3AtPnByaXYgPSB0YWJsZTsKIApAQCAtMTk4LDYgKzI3MiwyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCBfX2luaXQgc2hfY2xrX2RpdjRfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAorCQkJCXN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUpCit7CisJcmV0dXJuIHNoX2Nsa19kaXY0X3JlZ2lzdGVyX29wcyhjbGtzLCBuciwgdGFibGUsICZzaF9jbGtfZGl2NF9jbGtfb3BzKTsKK30KKworaW50IF9faW5pdCBzaF9jbGtfZGl2NF9lbmFibGVfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAorCQkJCXN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUpCit7CisJcmV0dXJuIHNoX2Nsa19kaXY0X3JlZ2lzdGVyX29wcyhjbGtzLCBuciwgdGFibGUsCisJCQkJCSZzaF9jbGtfZGl2NF9lbmFibGVfY2xrX29wcyk7Cit9CisKK2ludCBfX2luaXQgc2hfY2xrX2RpdjRfcmVwYXJlbnRfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAorCQkJCXN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUpCit7CisJcmV0dXJuIHNoX2Nsa19kaXY0X3JlZ2lzdGVyX29wcyhjbGtzLCBuciwgdGFibGUsCisJCQkJCSZzaF9jbGtfZGl2NF9yZXBhcmVudF9jbGtfb3BzKTsKK30KKwogI2lmZGVmIENPTkZJR19TSF9DTEtfQ1BHX0xFR0FDWQogc3RhdGljIHN0cnVjdCBjbGsgbWFzdGVyX2NsayA9IHsKIAkubmFtZQkJPSAibWFzdGVyX2NsayIsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCmluZGV4IGYzYTQ2YmUuLjgzZGE1ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCkBAIC01OTgsNyArNTk4LDcgQEAKIHN0YXRpYyBpbnQgY2xrX2RlYnVnZnNfcmVnaXN0ZXJfb25lKHN0cnVjdCBjbGsgKmMpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgZGVudHJ5ICpkLCAqY2hpbGQ7CisJc3RydWN0IGRlbnRyeSAqZCwgKmNoaWxkLCAqY2hpbGRfdG1wOwogCXN0cnVjdCBjbGsgKnBhID0gYy0+cGFyZW50OwogCWNoYXIgc1syNTVdOwogCWNoYXIgKnAgPSBzOwpAQCAtNjMwLDcgKzYzMCw3IEBACiAKIGVycl9vdXQ6CiAJZCA9IGMtPmRlbnRyeTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmZC0+ZF9zdWJkaXJzLCBkX3UuZF9jaGlsZCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGQsIGNoaWxkX3RtcCwgJmQtPmRfc3ViZGlycywgZF91LmRfY2hpbGQpCiAJCWRlYnVnZnNfcmVtb3ZlKGNoaWxkKTsKIAlkZWJ1Z2ZzX3JlbW92ZShjLT5kZW50cnkpOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvZnB1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvZnB1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1OWVkNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9mcHUuYwpAQCAtMCwwICsxLDg0IEBACisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2ZwdS5oPgorCitpbnQgaW5pdF9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKHRza191c2VkX21hdGgodHNrKSkgeworCQlpZiAoKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkgJiYgdHNrID09IGN1cnJlbnQpCisJCQl1bmxhenlfZnB1KHRzaywgdGFza19wdF9yZWdzKHRzaykpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIE1lbW9yeSBhbGxvY2F0aW9uIGF0IHRoZSBmaXJzdCB1c2FnZSBvZiB0aGUgRlBVIGFuZCBvdGhlciBzdGF0ZS4KKwkgKi8KKwlpZiAoIXRzay0+dGhyZWFkLnhzdGF0ZSkgeworCQl0c2stPnRocmVhZC54c3RhdGUgPSBrbWVtX2NhY2hlX2FsbG9jKHRhc2tfeHN0YXRlX2NhY2hlcCwKKwkJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIXRzay0+dGhyZWFkLnhzdGF0ZSkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpIHsKKwkJc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCAqZnAgPSAmdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1OworCQltZW1zZXQoZnAsIDAsIHhzdGF0ZV9zaXplKTsKKwkJZnAtPmZwc2NyID0gRlBTQ1JfSU5JVDsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcCA9ICZ0c2stPnRocmVhZC54c3RhdGUtPnNvZnRmcHU7CisJCW1lbXNldChmcCwgMCwgeHN0YXRlX3NpemUpOworCQlmcC0+ZnBzY3IgPSBGUFNDUl9JTklUOworCX0KKworCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0c2spOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1NIX0ZQVQordm9pZCBfX2ZwdV9zdGF0ZV9yZXN0b3JlKHZvaWQpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCisJcmVzdG9yZV9mcHUodHNrKTsKKworCXRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzIHw9IFRTX1VTRURGUFU7CisJdHNrLT5mcHVfY291bnRlcisrOworfQorCit2b2lkIGZwdV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCWlmICh1bmxpa2VseSghdXNlcl9tb2RlKHJlZ3MpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkJVRzogRlBVIGlzIHVzZWQgaW4ga2VybmVsIG1vZGUuXG4iKTsKKwkJQlVHKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXRza191c2VkX21hdGgodHNrKSkgeworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCS8qCisJCSAqIGRvZXMgYSBzbGFiIGFsbG9jIHdoaWNoIGNhbiBzbGVlcAorCQkgKi8KKwkJaWYgKGluaXRfZnB1KHRzaykpIHsKKwkJCS8qCisJCQkgKiByYW4gb3V0IG9mIG1lbW9yeSEKKwkJCSAqLworCQkJZG9fZ3JvdXBfZXhpdChTSUdLSUxMKTsKKwkJCXJldHVybjsKKwkJfQorCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCX0KKworCWdyYWJfZnB1KHJlZ3MpOworCisJX19mcHVfc3RhdGVfcmVzdG9yZSgpOworfQorCitCVUlMRF9UUkFQX0hBTkRMRVIoZnB1X3N0YXRlX3Jlc3RvcmUpCit7CisJVFJBUF9IQU5ETEVSX0RFQ0w7CisKKwlmcHVfc3RhdGVfcmVzdG9yZShyZWdzKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfU0hfRlBVICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaW5pdC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2luaXQuYwppbmRleCA4OWI0Yjc2Li5jNzM2NDIyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaW5pdC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pbml0LmMKQEAgLTI0LDIyICsyNCwzMiBAQAogI2luY2x1ZGUgPGFzbS9lbGYuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaWZkZWYgQ09ORklHX1NVUEVSSDMyCi0jaW5jbHVkZSA8YXNtL3ViYy5oPgorI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+CisKKyNpZmRlZiBDT05GSUdfU0hfRlBVCisjZGVmaW5lIGNwdV9oYXNfZnB1CTEKKyNlbHNlCisjZGVmaW5lIGNwdV9oYXNfZnB1CTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NIX0RTUAorI2RlZmluZSBjcHVfaGFzX2RzcAkxCisjZWxzZQorI2RlZmluZSBjcHVfaGFzX2RzcAkwCiAjZW5kaWYKIAogLyoKICAqIEdlbmVyaWMgd3JhcHBlciBmb3IgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBkaXNhYmxlIG9uLWNoaXAKICAqIHBlcmlwaGVyYWxzIChub2ZwdSwgbm9kc3AsIGFuZCBzbyBmb3J0aCkuCiAgKi8KLSNkZWZpbmUgb25jaGlwX3NldHVwKHgpCQkJCVwKLXN0YXRpYyBpbnQgeCMjX2Rpc2FibGVkIF9faW5pdGRhdGEgPSAwOwkJXAotCQkJCQkJXAotc3RhdGljIGludCBfX2luaXQgeCMjX3NldHVwKGNoYXIgKm9wdHMpCQlcCi17CQkJCQkJXAotCXgjI19kaXNhYmxlZCA9IDE7CQkJXAotCXJldHVybiAxOwkJCQlcCi19CQkJCQkJXAorI2RlZmluZSBvbmNoaXBfc2V0dXAoeCkJCQkJCVwKK3N0YXRpYyBpbnQgeCMjX2Rpc2FibGVkIF9faW5pdGRhdGEgPSAhY3B1X2hhc18jI3g7CVwKKwkJCQkJCQlcCitzdGF0aWMgaW50IF9faW5pdCB4IyNfc2V0dXAoY2hhciAqb3B0cykJCQlcCit7CQkJCQkJCVwKKwl4IyNfZGlzYWJsZWQgPSAxOwkJCQlcCisJcmV0dXJuIDE7CQkJCQlcCit9CQkJCQkJCVwKIF9fc2V0dXAoIm5vIiBfX3N0cmluZ2lmeSh4KSwgeCMjX3NldHVwKTsKIAogb25jaGlwX3NldHVwKGZwdSk7CkBAIC01MiwxMCArNjIsMTAgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzcGVjdWxhdGl2ZV9leGVjdXRpb25faW5pdCh2b2lkKQogewogCS8qIENsZWFyIFJBQkQgKi8KLQljdHJsX291dGwoY3RybF9pbmwoQ1BVT1BNKSAmIH5DUFVPUE1fUkFCRCwgQ1BVT1BNKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoQ1BVT1BNKSAmIH5DUFVPUE1fUkFCRCwgQ1BVT1BNKTsKIAogCS8qIEZsdXNoIHRoZSB1cGRhdGUgKi8KLQkodm9pZCljdHJsX2lubChDUFVPUE0pOworCSh2b2lkKV9fcmF3X3JlYWRsKENQVU9QTSk7CiAJY3RybF9iYXJyaWVyKCk7CiB9CiAjZWxzZQpAQCAtODksNyArOTksNyBAQAogI2VuZGlmCiAKIC8qIDJuZC1sZXZlbCBjYWNoZSBpbml0ICovCi12b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIF9fYXR0cmlidXRlX18gKCh3ZWFrKSkgbDJfY2FjaGVfaW5pdCh2b2lkKQordm9pZCBfX2F0dHJpYnV0ZV9fICgod2VhaykpIGwyX2NhY2hlX2luaXQodm9pZCkKIHsKIH0KIApAQCAtOTcsMTIgKzEwNywxMiBAQAogICogR2VuZXJpYyBmaXJzdC1sZXZlbCBjYWNoZSBpbml0CiAgKi8KICNpZmRlZiBDT05GSUdfU1VQRVJIMzIKLXN0YXRpYyB2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGNhY2hlX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIGNhY2hlX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGNjciwgZmxhZ3M7CiAKIAlqdW1wX3RvX3VuY2FjaGVkKCk7Ci0JY2NyID0gY3RybF9pbmwoQ0NSKTsKKwljY3IgPSBfX3Jhd19yZWFkbChDQ1IpOwogCiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50IHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgY2FjaGUgaXMgZW5hYmxlZCBvciBub3QgLSBhCkBAIC0xNDYsNyArMTU2LDcgQEAKIAkJCWZvciAoYWRkciA9IGFkZHJzdGFydDsKIAkJCSAgICAgYWRkciA8IGFkZHJzdGFydCArIHdheXNpemU7CiAJCQkgICAgIGFkZHIgKz0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGUubGluZXN6KQotCQkJCWN0cmxfb3V0bCgwLCBhZGRyKTsKKwkJCQlfX3Jhd193cml0ZWwoMCwgYWRkcik7CiAKIAkJCWFkZHJzdGFydCArPSBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlfaW5jcjsKIAkJfSB3aGlsZSAoLS13YXlzKTsKQEAgLTE3OSw3ICsxODksNyBAQAogCiAJbDJfY2FjaGVfaW5pdCgpOwogCi0JY3RybF9vdXRsKGZsYWdzLCBDQ1IpOworCV9fcmF3X3dyaXRlbChmbGFncywgQ0NSKTsKIAliYWNrX3RvX2NhY2hlZCgpOwogfQogI2Vsc2UKQEAgLTIwNyw2ICsyMTcsMTggQEAKIAkJbDJfY2FjaGVfc2hhcGUgPSAtMTsgLyogTm8gUy1jYWNoZSAqLwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgZnB1X2luaXQodm9pZCkKK3sKKwkvKiBEaXNhYmxlIHRoZSBGUFUgKi8KKwlpZiAoZnB1X2Rpc2FibGVkICYmIChjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKSB7CisJCXByaW50aygiRlBVIERpc2FibGVkXG4iKTsKKwkJY3VycmVudF9jcHVfZGF0YS5mbGFncyAmPSB+Q1BVX0hBU19GUFU7CisJfQorCisJZGlzYWJsZV9mcHUoKTsKKwljbGVhcl91c2VkX21hdGgoKTsKK30KKwogI2lmZGVmIENPTkZJR19TSF9EU1AKIHN0YXRpYyB2b2lkIF9faW5pdCByZWxlYXNlX2RzcCh2b2lkKQogewpAQCAtMjQ0LDI4ICsyNjYsMzUgQEAKIAlpZiAoc3IgJiBTUl9EU1ApCiAJCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19EU1A7CiAKKwkvKiBEaXNhYmxlIHRoZSBEU1AgKi8KKwlpZiAoZHNwX2Rpc2FibGVkICYmIChjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19EU1ApKSB7CisJCXByaW50aygiRFNQIERpc2FibGVkXG4iKTsKKwkJY3VycmVudF9jcHVfZGF0YS5mbGFncyAmPSB+Q1BVX0hBU19EU1A7CisJfQorCiAJLyogTm93IHRoYXQgd2UndmUgZGV0ZXJtaW5lZCB0aGUgRFNQIHN0YXR1cywgY2xlYXIgdGhlIERTUCBiaXQuICovCiAJcmVsZWFzZV9kc3AoKTsKIH0KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGRzcF9pbml0KHZvaWQpIHsgfQogI2VuZGlmIC8qIENPTkZJR19TSF9EU1AgKi8KIAogLyoqCiAgKiBzaF9jcHVfaW5pdAogICoKLSAqIFRoaXMgaXMgb3VyIGluaXRpYWwgZW50cnkgcG9pbnQgZm9yIGVhY2ggQ1BVLCBhbmQgaXMgaW52b2tlZCBvbiB0aGUgYm9vdAotICogQ1BVIHByaW9yIHRvIGNhbGxpbmcgc3RhcnRfa2VybmVsKCkuIEZvciBTTVAsIGEgY29tYmluYXRpb24gb2YgdGhpcyBhbmQKLSAqIHN0YXJ0X3NlY29uZGFyeSgpIHdpbGwgYnJpbmcgdXAgZWFjaCBwcm9jZXNzb3IgdG8gYSByZWFkeSBzdGF0ZSBwcmlvcgotICogdG8gaGFuZCBmb3JraW5nIHRoZSBpZGxlIGxvb3AuCisgKiBUaGlzIGlzIG91ciBpbml0aWFsIGVudHJ5IHBvaW50IGZvciBlYWNoIENQVSwgYW5kIGlzIGludm9rZWQgb24gdGhlCisgKiBib290IENQVSBwcmlvciB0byBjYWxsaW5nIHN0YXJ0X2tlcm5lbCgpLiBGb3IgU01QLCBhIGNvbWJpbmF0aW9uIG9mCisgKiB0aGlzIGFuZCBzdGFydF9zZWNvbmRhcnkoKSB3aWxsIGJyaW5nIHVwIGVhY2ggcHJvY2Vzc29yIHRvIGEgcmVhZHkKKyAqIHN0YXRlIHByaW9yIHRvIGhhbmQgZm9ya2luZyB0aGUgaWRsZSBsb29wLgogICoKLSAqIFdlIGRvIGFsbCBvZiB0aGUgYmFzaWMgcHJvY2Vzc29yIGluaXQgaGVyZSwgaW5jbHVkaW5nIHNldHRpbmcgdXAgdGhlCi0gKiBjYWNoZXMsIEZQVSwgRFNQLCBraWNraW5nIHRoZSBVQkMsIGV0Yy4gQnkgdGhlIHRpbWUgc3RhcnRfa2VybmVsKCkgaXMKLSAqIGhpdCAoYW5kIHN1YnNlcXVlbnRseSBwbGF0Zm9ybV9zZXR1cCgpKSB0aGluZ3MgbGlrZSBkZXRlcm1pbmluZyB0aGUKLSAqIENQVSBzdWJ0eXBlIGFuZCBpbml0aWFsIGNvbmZpZ3VyYXRpb24gd2lsbCBhbGwgYmUgZG9uZS4KKyAqIFdlIGRvIGFsbCBvZiB0aGUgYmFzaWMgcHJvY2Vzc29yIGluaXQgaGVyZSwgaW5jbHVkaW5nIHNldHRpbmcgdXAKKyAqIHRoZSBjYWNoZXMsIEZQVSwgRFNQLCBldGMuIEJ5IHRoZSB0aW1lIHN0YXJ0X2tlcm5lbCgpIGlzIGhpdCAoYW5kCisgKiBzdWJzZXF1ZW50bHkgcGxhdGZvcm1fc2V0dXAoKSkgdGhpbmdzIGxpa2UgZGV0ZXJtaW5pbmcgdGhlIENQVQorICogc3VidHlwZSBhbmQgaW5pdGlhbCBjb25maWd1cmF0aW9uIHdpbGwgYWxsIGJlIGRvbmUuCiAgKgogICogRWFjaCBwcm9jZXNzb3IgZmFtaWx5IGlzIHN0aWxsIHJlc3BvbnNpYmxlIGZvciBkb2luZyBpdHMgb3duIHByb2JpbmcKICAqIGFuZCBjYWNoZSBjb25maWd1cmF0aW9uIGluIGRldGVjdF9jcHVfYW5kX2NhY2hlX3N5c3RlbSgpLgogICovCi0KIGFzbWxpbmthZ2Ugdm9pZCBfX2luaXQgc2hfY3B1X2luaXQodm9pZCkKIHsKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwpAQCAtMzAyLDE4ICszMzEsOCBAQAogCQlkZXRlY3RfY2FjaGVfc2hhcGUoKTsKIAl9CiAKLQkvKiBEaXNhYmxlIHRoZSBGUFUgKi8KLQlpZiAoZnB1X2Rpc2FibGVkKSB7Ci0JCXByaW50aygiRlBVIERpc2FibGVkXG4iKTsKLQkJY3VycmVudF9jcHVfZGF0YS5mbGFncyAmPSB+Q1BVX0hBU19GUFU7Ci0JfQotCi0JLyogRlBVIGluaXRpYWxpemF0aW9uICovCi0JZGlzYWJsZV9mcHUoKTsKLQlpZiAoKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpIHsKLQkJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJj0gflRTX1VTRURGUFU7Ci0JCWNsZWFyX3VzZWRfbWF0aCgpOwotCX0KKwlmcHVfaW5pdCgpOworCWRzcF9pbml0KCk7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHBlci1DUFUgQVNJRCBjYWNoZSB2ZXJ5IGVhcmx5LCBzaW5jZSB0aGUKQEAgLTMyMSwxOCArMzQwLDI0IEBACiAJICovCiAJY3VycmVudF9jcHVfZGF0YS5hc2lkX2NhY2hlID0gTk9fQ09OVEVYVDsKIAotI2lmZGVmIENPTkZJR19TSF9EU1AKLQkvKiBQcm9iZSBmb3IgRFNQICovCi0JZHNwX2luaXQoKTsKLQotCS8qIERpc2FibGUgdGhlIERTUCAqLwotCWlmIChkc3BfZGlzYWJsZWQpIHsKLQkJcHJpbnRrKCJEU1AgRGlzYWJsZWRcbiIpOwotCQljdXJyZW50X2NwdV9kYXRhLmZsYWdzICY9IH5DUFVfSEFTX0RTUDsKLQkJcmVsZWFzZV9kc3AoKTsKLQl9Ci0jZW5kaWYKLQogCXNwZWN1bGF0aXZlX2V4ZWN1dGlvbl9pbml0KCk7CiAJZXhwbWFza19pbml0KCk7CisKKwkvKiBEbyB0aGUgcmVzdCBvZiB0aGUgYm9vdCBwcm9jZXNzb3Igc2V0dXAgKi8KKwlpZiAocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSA9PSAwKSB7CisJCS8qIFNhdmUgb2ZmIHRoZSBCSU9TIFZCUiwgaWYgdGhlcmUgaXMgb25lICovCisJCXNoX2Jpb3NfdmJyX2luaXQoKTsKKworCQkvKgorCQkgKiBTZXR1cCBWQlIgZm9yIGJvb3QgQ1BVLiBTZWNvbmRhcnkgQ1BVcyBkbyB0aGlzIHRocm91Z2gKKwkJICogc3RhcnRfc2Vjb25kYXJ5KCkuCisJCSAqLworCQlwZXJfY3B1X3RyYXBfaW5pdCgpOworCisJCS8qCisJCSAqIEJvb3QgcHJvY2Vzc29yIHRvIHNldHVwIHRoZSBGUCBhbmQgZXh0ZW5kZWQgc3RhdGUKKwkJICogY29udGV4dCBpbmZvLgorCQkgKi8KKwkJaW5pdF90aHJlYWRfeHN0YXRlKCk7CisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjLXNoNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjLXNoNS5jCmluZGV4IDA2ZTdlMjkuLjk2YTIzOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy1zaDUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMtc2g1LmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCQliaXRtYXNrID0gMSA8PCAoaXJxIC0gMzIpOwogCX0KIAotCWN0cmxfb3V0bChiaXRtYXNrLCByZWcpOworCV9fcmF3X3dyaXRlbChiaXRtYXNrLCByZWcpOwogfQogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX2ludGNfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0xMzksNyArMTM5LDcgQEAKIAkJYml0bWFzayA9IDEgPDwgKGlycSAtIDMyKTsKIAl9CiAKLQljdHJsX291dGwoYml0bWFzaywgcmVnKTsKKwlfX3Jhd193cml0ZWwoYml0bWFzaywgcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX2ludGModW5zaWduZWQgaW50IGlycSkKQEAgLTE3MCwxMSArMTcwLDExIEBACiAKIAogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgYW5kIHNldCBhbGwgcHJpb3JpdGllcyB0byAwIHRvIGF2b2lkIHRyb3VibGUgKi8KLQljdHJsX291dGwoLTEsIElOVENfSU5URFNCXzApOwotCWN0cmxfb3V0bCgtMSwgSU5UQ19JTlREU0JfMSk7CisJX19yYXdfd3JpdGVsKC0xLCBJTlRDX0lOVERTQl8wKTsKKwlfX3Jhd193cml0ZWwoLTEsIElOVENfSU5URFNCXzEpOwogCiAJZm9yIChyZWcgPSBJTlRDX0lOVFBSSV8wLCBpID0gMDsgaSA8IElOVENfSU5UUFJJX1BSRUdTOyBpKyssIHJlZyArPSA4KQotCQljdHJsX291dGwoIE5PX1BSSU9SSVRZLCByZWcpOworCQlfX3Jhd193cml0ZWwoIE5PX1BSSU9SSVRZLCByZWcpOwogCiAKICNpZmRlZiBDT05GSUdfU0hfQ0FZTUFOCkBAIC0xOTksNyArMTk5LDcgQEAKIAkJCXJlZyA9IElOVENfSUNSX1NFVDsKIAkJCWkgPSBJUlFfSVJMMDsKIAkJfQotCQljdHJsX291dGwoSU5UQ19JQ1JfSVJMTSwgcmVnKTsKKwkJX19yYXdfd3JpdGVsKElOVENfSUNSX0lSTE0sIHJlZyk7CiAKIAkJLyogU2V0IGludGVycnVwdCBwcmlvcml0aWVzIGFjY29yZGluZyB0byBwbGF0Zm9ybSBkZXNjcmlwdGlvbiAqLwogCQlmb3IgKGRhdGEgPSAwLCByZWcgPSBJTlRDX0lOVFBSSV8wOyBpIDwgTlJfSU5UQ19JUlFTOyBpKyspIHsKQEAgLTIwNyw3ICsyMDcsNyBAQAogCQkJCSgoaSAlIElOVENfSU5UUFJJX1BQUkVHKSAqIDQpOwogCQkJaWYgKChpICUgSU5UQ19JTlRQUklfUFBSRUcpID09IChJTlRDX0lOVFBSSV9QUFJFRyAtIDEpKSB7CiAJCQkJLyogVXBvbiB0aGUgN3RoLCBzZXQgUHJpb3JpdHkgUmVnaXN0ZXIgKi8KLQkJCQljdHJsX291dGwoZGF0YSwgcmVnKTsKKwkJCQlfX3Jhd193cml0ZWwoZGF0YSwgcmVnKTsKIAkJCQlkYXRhID0gMDsKIAkJCQlyZWcgKz0gODsKIAkJCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvY2xvY2stc2g3NjE5LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL2Nsb2NrLXNoNzYxOS5jCmluZGV4IDRmZTg2MzEuLjBjOWYyNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvY2xvY2stc2g3NjE5LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9jbG9jay1zaDc2MTkuYwpAQCAtMzEsNyArMzEsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBQTEwyICogcGxsMXJhdGVbKGN0cmxfaW53KEZSRVFDUikgPj4gOCkgJiA3XTsKKwljbGstPnJhdGUgKj0gUExMMiAqIHBsbDFyYXRlWyhfX3Jhd19yZWFkdyhGUkVRQ1IpID4+IDgpICYgN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc2MTlfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC00MCw3ICs0MCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTUwLDcgKzUwLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBsbDFyYXRlWyhjdHJsX2ludyhGUkVRQ1IpID4+IDgpICYgN107CisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiA3XTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzYxOV9idXNfY2xrX29wcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwMS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAxLmMKaW5kZXggNzgxNGM3Ni4uYjI2MjY0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAxLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQlyZXR1cm4gMTAwMDAwMDAgKiBQTEwyICogcGxsMXJhdGVbKGN0cmxfaW53KEZSRVFDUikgPj4gOCkgJiAweDAwMDddOworCXJldHVybiAxMDAwMDAwMCAqIFBMTDIgKiBwbGwxcmF0ZVsoX19yYXdfcmVhZHcoRlJFUUNSKSA+PiA4KSAmIDB4MDAwN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDcyMDFfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC00Myw3ICs0Myw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTUzLDcgKzUzLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJFUUNSKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUkVRQ1IpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNjMsNyArNjMsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbncoRlJFUUNSKSA+PiA0KSAmIDB4MDAwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZHcoRlJFUUNSKSA+PiA0KSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAzLmMKaW5kZXggOTQwOTg2OS4uN2U3NWQ4ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAzLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gcGxsMXJhdGVbKGN0cmxfaW53KEZSRVFDUikgPj4gOCkgJiAweDAwMDNdICogUExMMiA7CisJY2xrLT5yYXRlICo9IHBsbDFyYXRlWyhfX3Jhd19yZWFkdyhGUkVRQ1IpID4+IDgpICYgMHgwMDAzXSAqIFBMTDIgOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3MjAzX21hc3Rlcl9jbGtfb3BzID0gewpAQCAtNDgsNyArNDgsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUkVRQ1IpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSRVFDUikgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01OCw3ICs1OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeC0yXTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjA2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDYuYwppbmRleCBjMjI2OGJkLi5iMjdhNWUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDYuYwpAQCAtMzQsNyArMzQsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBQTEwyICogcGxsMXJhdGVbKGN0cmxfaW53KEZSRVFDUikgPj4gOCkgJiAweDAwMDddOworCWNsay0+cmF0ZSAqPSBQTEwyICogcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiAweDAwMDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3MjA2X21hc3Rlcl9jbGtfb3BzID0gewpAQCAtNDMsNyArNDMsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUkVRQ1IpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSRVFDUikgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01Myw3ICs1Myw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwbGwxcmF0ZVsoY3RybF9pbncoRlJFUUNSKSA+PiA4KSAmIDB4MDAwN107CisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiAweDAwMDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3MjA2X2J1c19jbGtfb3BzID0gewpAQCAtNjIsNyArNjIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUkVRQ1IpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSRVFDUikgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9mcHUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2ZwdS5jCmluZGV4IGQzOTVjZTUuLjQ4OGQyNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2ZwdS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2ZwdS5jCkBAIC0yNiw4ICsyNiw3IEBACiAvKgogICogU2F2ZSBGUFUgcmVnaXN0ZXJzIG9udG8gdGFzayBzdHJ1Y3R1cmUuCiAgKi8KLXZvaWQKLXNhdmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQordm9pZCBzYXZlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAl1bnNpZ25lZCBsb25nIGR1bW15OwogCkBAIC01Miw3ICs1MSw3IEBACiAJCSAgICAgImZtb3YucwlmcjAsIEAtJTBcblx0IgogCQkgICAgICJsZHMJJTMsIGZwc2NyXG5cdCIKIAkJICAgICA6ICI9ciIgKGR1bW15KQotCQkgICAgIDogIjAiICgoY2hhciAqKSgmdHNrLT50aHJlYWQuZnB1LmhhcmQuc3RhdHVzKSksCisJCSAgICAgOiAiMCIgKChjaGFyICopKCZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuc3RhdHVzKSksCiAJCSAgICAgICAiciIgKEZQU0NSX1JDSEcpLAogCQkgICAgICAgInIiIChGUFNDUl9JTklUKQogCQkgICAgIDogIm1lbW9yeSIpOwpAQCAtNjAsOCArNTksNyBAQAogCWRpc2FibGVfZnB1KCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1yZXN0b3JlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3ZvaWQgcmVzdG9yZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJdW5zaWduZWQgbG9uZyBkdW1teTsKIApAQCAtODUsNDUgKzgzLDEyIEBACiAJCSAgICAgImxkcy5sCUAlMCssIGZwc2NyXG5cdCIKIAkJICAgICAibGRzLmwJQCUwKywgZnB1bFxuXHQiCiAJCSAgICAgOiAiPXIiIChkdW1teSkKLQkJICAgICA6ICIwIiAoJnRzay0+dGhyZWFkLmZwdSksICJyIiAoRlBTQ1JfUkNIRykKKwkJICAgICA6ICIwIiAodHNrLT50aHJlYWQueHN0YXRlKSwgInIiIChGUFNDUl9SQ0hHKQogCQkgICAgIDogIm1lbW9yeSIpOwogCWRpc2FibGVfZnB1KCk7CiB9CiAKIC8qCi0gKiBMb2FkIHRoZSBGUFUgd2l0aCBzaWduYWxsaW5nIE5BTlMuICBUaGlzIGJpdCBwYXR0ZXJuIHdlJ3JlIHVzaW5nCi0gKiBoYXMgdGhlIHByb3BlcnR5IHRoYXQgbm8gbWF0dGVyIHdldGhlciBjb25zaWRlcmVkIGFzIHNpbmdsZSBvciBhcwotICogZG91YmxlIHByZWNpc3Npb24gcmVwcmVzZW50cyBzaWduYWxpbmcgTkFOUy4KLSAqLwotCi1zdGF0aWMgdm9pZAotZnB1X2luaXQodm9pZCkKLXsKLQllbmFibGVfZnB1KCk7Ci0JYXNtIHZvbGF0aWxlKCJsZHMJJTAsIGZwdWxcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyMFxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIxXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjJcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyM1xuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnI0XG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjVcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyNlxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnI3XG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjhcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyOVxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIxMFxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIxMVxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIxMlxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIxM1xuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIxNFxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIxNVxuXHQiCi0JCSAgICAgImxkcwklMiwgZnBzY3Jcblx0IgotCQkgICAgIDogLyogbm8gb3V0cHV0ICovCi0JCSAgICAgOiAiciIgKDApLCAiciIgKEZQU0NSX1JDSEcpLCAiciIgKEZQU0NSX0lOSVQpKTsKLQlkaXNhYmxlX2ZwdSgpOwotfQotCi0vKgogICoJRW11bGF0ZSBhcml0aG1ldGljIG9wcyBvbiBkZW5vcm1hbGl6ZWQgbnVtYmVyIGZvciBzb21lIEZQVSBpbnNucy4KICAqLwogCkBAIC00OTAsOSArNDU1LDkgQEAKIAlpZiAoKGZpbnNuICYgMHhmMWZmKSA9PSAweGYwYWQpIHsgLyogZmNudnNkICovCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAotCQlpZiAoKHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyICYgRlBTQ1JfRlBVX0VSUk9SKSkgeworCQlpZiAoKHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjciAmIEZQU0NSX0ZQVV9FUlJPUikpIHsKIAkJCS8qIEZQVSBlcnJvciAqLwotCQkJZGVub3JtYWxfdG9fZG91YmxlICgmdHNrLT50aHJlYWQuZnB1LmhhcmQsCisJCQlkZW5vcm1hbF90b19kb3VibGUgKCZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsCiAJCQkJCSAgICAoZmluc24gPj4gOCkgJiAweGYpOwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwpAQCAtNTA3LDkgKzQ3Miw5IEBACiAKIAkJbiA9IChmaW5zbiA+PiA4KSAmIDB4ZjsKIAkJbSA9IChmaW5zbiA+PiA0KSAmIDB4ZjsKLQkJaHggPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dOwotCQloeSA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV07Ci0JCWZwc2NyID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3I7CisJCWh4ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl07CisJCWh5ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbV07CisJCWZwc2NyID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyOwogCQlwcmVjID0gZnBzY3IgJiAoMSA8PCAxOSk7CiAKIAkJaWYgKChmcHNjciAmIEZQU0NSX0ZQVV9FUlJPUikKQEAgLTUxOSwxNSArNDg0LDE1IEBACiAKIAkJCS8qIEZQVSBlcnJvciBiZWNhdXNlIG9mIGRlbm9ybWFsICovCiAJCQlsbHggPSAoKGxvbmcgbG9uZykgaHggPDwgMzIpCi0JCQkgICAgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24rMV07CisJCQkgICAgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuKzFdOwogCQkJbGx5ID0gKChsb25nIGxvbmcpIGh5IDw8IDMyKQotCQkJICAgICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttKzFdOworCQkJICAgICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbSsxXTsKIAkJCWlmICgoaHggJiAweDdmZmZmZmZmKSA+PSAweDAwMTAwMDAwKQogCQkJCWxseCA9IGRlbm9ybWFsX211bGQobGx5LCBsbHgpOwogCQkJZWxzZQogCQkJCWxseCA9IGRlbm9ybWFsX211bGQobGx4LCBsbHkpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbisxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24rMV0gPSBsbHggJiAweGZmZmZmZmZmOwogCQl9IGVsc2UgaWYgKChmcHNjciAmIEZQU0NSX0ZQVV9FUlJPUikKIAkJICAgICAmJiAoIXByZWMgJiYgKChoeCAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMAogCQkJCSAgIHx8IChoeSAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMCkpKSB7CkBAIC01MzYsNyArNTAxLDcgQEAKIAkJCQloeCA9IGRlbm9ybWFsX211bGYoaHksIGh4KTsKIAkJCWVsc2UKIAkJCQloeCA9IGRlbm9ybWFsX211bGYoaHgsIGh5KTsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBoeDsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dID0gaHg7CiAJCX0gZWxzZQogCQkJcmV0dXJuIDA7CiAKQEAgLTU1MCw5ICs1MTUsOSBAQAogCiAJCW4gPSAoZmluc24gPj4gOCkgJiAweGY7CiAJCW0gPSAoZmluc24gPj4gNCkgJiAweGY7Ci0JCWh4ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXTsKLQkJaHkgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW21dOwotCQlmcHNjciA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyOworCQloeCA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dOworCQloeSA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW21dOworCQlmcHNjciA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjcjsKIAkJcHJlYyA9IGZwc2NyICYgKDEgPDwgMTkpOwogCiAJCWlmICgoZnBzY3IgJiBGUFNDUl9GUFVfRVJST1IpCkBAIC01NjIsMTUgKzUyNywxNSBAQAogCiAJCQkvKiBGUFUgZXJyb3IgYmVjYXVzZSBvZiBkZW5vcm1hbCAqLwogCQkJbGx4ID0gKChsb25nIGxvbmcpIGh4IDw8IDMyKQotCQkJICAgICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuKzFdOworCQkJICAgICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbisxXTsKIAkJCWxseSA9ICgobG9uZyBsb25nKSBoeSA8PCAzMikKLQkJCSAgICAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbSsxXTsKKwkJCSAgICAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW20rMV07CiAJCQlpZiAoKGZpbnNuICYgMHhmMDBmKSA9PSAweGYwMDApCiAJCQkJbGx4ID0gZGVub3JtYWxfYWRkZChsbHgsIGxseSk7CiAJCQllbHNlCiAJCQkJbGx4ID0gZGVub3JtYWxfYWRkZChsbHgsIGxseSBeICgxTEwgPDwgNjMpKTsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBsbHggPj4gMzI7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24rMV0gPSBsbHggJiAweGZmZmZmZmZmOworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl0gPSBsbHggPj4gMzI7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuKzFdID0gbGx4ICYgMHhmZmZmZmZmZjsKIAkJfSBlbHNlIGlmICgoZnBzY3IgJiBGUFNDUl9GUFVfRVJST1IpCiAJCSAgICAgJiYgKCFwcmVjICYmICgoaHggJiAweDdmZmZmZmZmKSA8IDB4MDA4MDAwMDAKIAkJCQkgICB8fCAoaHkgJiAweDdmZmZmZmZmKSA8IDB4MDA4MDAwMDApKSkgewpAQCAtNTc5LDcgKzU0NCw3IEBACiAJCQkJaHggPSBkZW5vcm1hbF9hZGRmKGh4LCBoeSk7CiAJCQllbHNlCiAJCQkJaHggPSBkZW5vcm1hbF9hZGRmKGh4LCBoeSBeIDB4ODAwMDAwMDApOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGh4OworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl0gPSBoeDsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gMDsKIApAQCAtNTk3LDcgKzU2Miw3IEBACiAKIAlfX3VubGF6eV9mcHUodHNrLCByZWdzKTsKIAlpZiAoaWVlZV9mcGVfaGFuZGxlcihyZWdzKSkgewotCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciAmPQorCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgJj0KIAkJCX4oRlBTQ1JfQ0FVU0VfTUFTSyB8IEZQU0NSX0ZMQUdfTUFTSyk7CiAJCWdyYWJfZnB1KHJlZ3MpOwogCQlyZXN0b3JlX2ZwdSh0c2spOwpAQCAtNjA3LDMzICs1NzIsMyBAQAogCiAJZm9yY2Vfc2lnKFNJR0ZQRSwgdHNrKTsKIH0KLQotdm9pZCBmcHVfc3RhdGVfcmVzdG9yZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0KLQlncmFiX2ZwdShyZWdzKTsKLQlpZiAodW5saWtlbHkoIXVzZXJfbW9kZShyZWdzKSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJCVUc6IEZQVSBpcyB1c2VkIGluIGtlcm5lbCBtb2RlLlxuIik7Ci0JCUJVRygpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGxpa2VseSh1c2VkX21hdGgoKSkpIHsKLQkJLyogVXNpbmcgdGhlIEZQVSBhZ2Fpbi4gICovCi0JCXJlc3RvcmVfZnB1KHRzayk7Ci0JfSBlbHNlCXsKLQkJLyogRmlyc3QgdGltZSBGUFUgdXNlci4gICovCi0JCWZwdV9pbml0KCk7Ci0JCXNldF91c2VkX21hdGgoKTsKLQl9Ci0JdGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgfD0gVFNfVVNFREZQVTsKLQl0c2stPmZwdV9jb3VudGVyKys7Ci19Ci0KLUJVSUxEX1RSQVBfSEFORExFUihmcHVfc3RhdGVfcmVzdG9yZSkKLXsKLQlUUkFQX0hBTkRMRVJfREVDTDsKLQotCWZwdV9zdGF0ZV9yZXN0b3JlKHJlZ3MpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2gzLmMKaW5kZXggMjdiODczOC4uYjc4Mzg0YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoMy5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4MjAwMCkgPj4gMTEpIHwgKGZycWNyICYgMHgwMDAzKTsKIAogCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbaWR4XTsKQEAgLTQwLDcgKzQwLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9ICgoZnJxY3IgJiAweDIwMDApID4+IDExKSB8IChmcnFjciAmIDB4MDAwMyk7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKQEAgLTUyLDcgKzUyLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9ICgoZnJxY3IgJiAweDgwMDApID4+IDEzKSB8ICgoZnJxY3IgJiAweDAwMzApID4+IDQpOwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gc3RjX211bHRpcGxpZXJzW2lkeF07CkBAIC02NCw3ICs2NCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHg0MDAwKSA+PiAxMikgfCAoKGZycWNyICYgMHgwMDBjKSA+PiAyKTsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA1LmMKaW5kZXggMGNhOGYyYy4uMGVjZWExNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNS5jCkBAIC0zMiw3ICszMiw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tjdHJsX2ludyhGUlFDUikgJiAweDAwMDNdOworCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDAzXTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzcwNV9tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTQxLDcgKzQxLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSBjdHJsX2ludyhGUlFDUikgJiAweDAwMDM7CisJaW50IGlkeCA9IF9fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDAwMzsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNTEsNyArNTEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUlFDUikgJiAweDAzMDApID4+IDg7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUlFDUikgJiAweDAzMDApID4+IDg7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gc3RjX211bHRpcGxpZXJzW2lkeF07CiB9CiAKQEAgLTYxLDcgKzYxLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpICYgMHgwMDMwKSA+PiA0OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDMwKSA+PiA0OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDYuYwppbmRleCA0YmY3ODg3Li42ZjlmZjhiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA2LmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHgyMDAwKSA+PiAxMSkgfCAoZnJxY3IgJiAweDAwMDMpOwogCiAJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tpZHhdOwpAQCAtMzYsNyArMzYsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4MjAwMCkgPj4gMTEpIHwgKGZycWNyICYgMHgwMDAzKTsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwpAQCAtNDgsNyArNDgsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4ODAwMCkgPj4gMTMpIHwgKChmcnFjciAmIDB4MDAzMCkgPj4gNCk7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBzdGNfbXVsdGlwbGllcnNbaWR4XTsKQEAgLTYwLDcgKzYwLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9ICgoZnJxY3IgJiAweDQwMDApID4+IDEyKSB8ICgoZnJxY3IgJiAweDAwMGMpID4+IDIpOwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwOS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDkuYwppbmRleCBlODc0OTUwLi5mMzAyYmEwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwOS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA5LmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHgyMDAwKSA+PiAxMSkgfCAoZnJxY3IgJiAweDAwMDMpOwogCiAJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tpZHhdOwpAQCAtMzYsNyArMzYsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4MjAwMCkgPj4gMTEpIHwgKGZycWNyICYgMHgwMDAzKTsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwpAQCAtNDgsNyArNDgsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKGZycWNyICYgMHgwMDgwKSA/CiAJCSgoZnJxY3IgJiAweDgwMDApID4+IDEzKSB8ICgoZnJxY3IgJiAweDAwMzApID4+IDQpIDogMTsKIApAQCAtNjEsNyArNjEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4NDAwMCkgPj4gMTIpIHwgKChmcnFjciAmIDB4MDAwYykgPj4gMik7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzEwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcxMC5jCmluZGV4IDAzMGE1OGIuLjI5YTg3ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzEwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MTAuYwpAQCAtMjYsNyArMjYsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBtZF90YWJsZVtjdHJsX2ludyhGUlFDUikgJiAweDAwMDddOworCWNsay0+cmF0ZSAqPSBtZF90YWJsZVtfX3Jhd19yZWFkdyhGUlFDUikgJiAweDAwMDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzEwX21hc3Rlcl9jbGtfb3BzID0gewpAQCAtMzUsNyArMzUsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUlFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBtZF90YWJsZVtpZHhdOwogfQogCkBAIC00NSw3ICs0NSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSAmIDB4MDcwMCkgPj4gODsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDcwMCkgPj4gODsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBtZF90YWJsZVtpZHhdOwogfQogCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSAmIDB4MDA3MCkgPj4gNDsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDA3MCkgPj4gNDsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBtZF90YWJsZVtpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcxMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MTIuYwppbmRleCA2NDI4ZWU2Yy4uYjBkMGM1MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MTIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcxMi5jCkBAIC0yMyw3ICsyMyw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKGZycWNyICYgMHgwMzAwKSA+PiA4OwogCiAJY2xrLT5yYXRlICo9IG11bHRpcGxpZXJzW2lkeF07CkBAIC0zNSw3ICszNSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSBmcnFjciAmIDB4MDAwNzsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGRpdmlzb3JzW2lkeF07CkBAIC00Nyw3ICs0Nyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoZnJxY3IgJiAweDAwMzApID4+IDQ7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXZpc29yc1tpZHhdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCmluZGV4IDNmN2UyYTIuLmY2YTM4OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKQEAgLTEzMiw3ICsxMzIsNiBAQAogCSBtb3YJIzEsIHI1CiAKIGNhbGxfaGFuZGxlX3RsYm1pc3M6Ci0Jc2V0dXBfZnJhbWVfcmVnCiAJbW92LmwJMWYsIHIwCiAJbW92CXI1LCByOAogCW1vdi5sCUByMCwgcjYKQEAgLTM2NSw2ICszNjQsOCBAQAogCSBtb3YubAlAazIsIGsyCQkhIHJlYWQgb3V0IHZlY3RvciBhbmQga2VlcCBpbiBrMgogCiBoYW5kbGVfZXhjZXB0aW9uX3NwZWNpYWw6CisJc2V0dXBfZnJhbWVfcmVnCisKIAkhIFNldHVwIHJldHVybiBhZGRyZXNzIGFuZCBqdW1wIHRvIGV4Y2VwdGlvbiBoYW5kbGVyCiAJbW92LmwJN2YsIHI5CQkhIGZldGNoIHJldHVybiBhZGRyZXNzCiAJc3RjCXIyX2JhbmssIHIwCSEgazIgKHZlY3RvcikKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZXguUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZXguUwppbmRleCA0NjYxMGMzLi45OWI0ZDAyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2V4LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9leC5TCkBAIC00OSw3ICs0OSw3IEBACiAJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCSEgcmVzZXJ2ZWRfaW5zdHJ1Y3Rpb24gKGZpbGxlZCBieSB0cmFwX2luaXQpIC8qIDE4MCAqLwogCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgkhIGlsbGVnYWxfc2xvdF9pbnN0cnVjdGlvbiAoZmlsbGVkIGJ5IHRyYXBfaW5pdCkgLyoxQTAqLwogCS5sb25nCW5taV90cmFwX2hhbmRsZXIJLyogMUMwICovCSEgQWxsb3cgdHJhcCB0byBkZWJ1Z2dlcgotCS5sb25nCWJyZWFrX3BvaW50X3RyYXAJLyogMUUwICovCisJLmxvbmcJYnJlYWtwb2ludF90cmFwX2hhbmRsZXIJLyogMUUwICovCiAKIAkvKgogCSAqIFBhZCB0aGUgcmVtYWluZGVyIG9mIHRoZSB0YWJsZSBvdXQsIGV4Y2VwdGlvbnMgcmVzaWRpbmcgaW4gZmFyCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Byb2JlLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Byb2JlLmMKaW5kZXggZjljN2RmNi4uMjk1ZWM0YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9wcm9iZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvcHJvYmUuYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1pbnQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgZGV0ZWN0X2NwdV9hbmRfY2FjaGVfc3lzdGVtKHZvaWQpCitpbnQgZGV0ZWN0X2NwdV9hbmRfY2FjaGVfc3lzdGVtKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyMCwgYWRkcjEsIGRhdGEwLCBkYXRhMSwgZGF0YTIsIGRhdGEzOwogCkBAIC0zMCwyMyArMzAsMjMgQEAKIAlhZGRyMSA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVkgKyAoMSA8PCAxMik7CiAKIAkvKiBGaXJzdCwgd3JpdGUgYmFjayAmIGludmFsaWRhdGUgKi8KLQlkYXRhMCAgPSBjdHJsX2lubChhZGRyMCk7Ci0JY3RybF9vdXRsKGRhdGEwJn4oU0hfQ0FDSEVfVkFMSUR8U0hfQ0FDSEVfVVBEQVRFRCksIGFkZHIwKTsKLQlkYXRhMSAgPSBjdHJsX2lubChhZGRyMSk7Ci0JY3RybF9vdXRsKGRhdGExJn4oU0hfQ0FDSEVfVkFMSUR8U0hfQ0FDSEVfVVBEQVRFRCksIGFkZHIxKTsKKwlkYXRhMCAgPSBfX3Jhd19yZWFkbChhZGRyMCk7CisJX19yYXdfd3JpdGVsKGRhdGEwJn4oU0hfQ0FDSEVfVkFMSUR8U0hfQ0FDSEVfVVBEQVRFRCksIGFkZHIwKTsKKwlkYXRhMSAgPSBfX3Jhd19yZWFkbChhZGRyMSk7CisJX19yYXdfd3JpdGVsKGRhdGExJn4oU0hfQ0FDSEVfVkFMSUR8U0hfQ0FDSEVfVVBEQVRFRCksIGFkZHIxKTsKIAogCS8qIE5leHQsIGNoZWNrIGlmIHRoZXJlJ3Mgc2hhZG93IG9yIG5vdCAqLwotCWRhdGEwID0gY3RybF9pbmwoYWRkcjApOworCWRhdGEwID0gX19yYXdfcmVhZGwoYWRkcjApOwogCWRhdGEwIF49IFNIX0NBQ0hFX1ZBTElEOwotCWN0cmxfb3V0bChkYXRhMCwgYWRkcjApOwotCWRhdGExID0gY3RybF9pbmwoYWRkcjEpOworCV9fcmF3X3dyaXRlbChkYXRhMCwgYWRkcjApOworCWRhdGExID0gX19yYXdfcmVhZGwoYWRkcjEpOwogCWRhdGEyID0gZGF0YTEgXiBTSF9DQUNIRV9WQUxJRDsKLQljdHJsX291dGwoZGF0YTIsIGFkZHIxKTsKLQlkYXRhMyA9IGN0cmxfaW5sKGFkZHIwKTsKKwlfX3Jhd193cml0ZWwoZGF0YTIsIGFkZHIxKTsKKwlkYXRhMyA9IF9fcmF3X3JlYWRsKGFkZHIwKTsKIAogCS8qIExhc3RseSwgaW52YWxpYXRlIHRoZW0uICovCi0JY3RybF9vdXRsKGRhdGEwJn5TSF9DQUNIRV9WQUxJRCwgYWRkcjApOwotCWN0cmxfb3V0bChkYXRhMiZ+U0hfQ0FDSEVfVkFMSUQsIGFkZHIxKTsKKwlfX3Jhd193cml0ZWwoZGF0YTAmflNIX0NBQ0hFX1ZBTElELCBhZGRyMCk7CisJX19yYXdfd3JpdGVsKGRhdGEyJn5TSF9DQUNIRV9WQUxJRCwgYWRkcjEpOwogCiAJYmFja190b19jYWNoZWQoKTsKIApAQCAtOTQsOSArOTQsOSBAQAogCQlib290X2NwdV9kYXRhLmRjYWNoZS53YXlfaW5jcgk9ICgxIDw8IDEzKTsKIAkJYm9vdF9jcHVfZGF0YS5kY2FjaGUuZW50cnlfbWFzawk9IDB4MWZmMDsKIAkJYm9vdF9jcHVfZGF0YS5kY2FjaGUuc2V0cwk9IDUxMjsKLQkJY3RybF9vdXRsKENDUl9DQUNIRV8zMktCLCBDQ1IzX1JFRyk7CisJCV9fcmF3X3dyaXRlbChDQ1JfQ0FDSEVfMzJLQiwgQ0NSM19SRUcpOwogI2Vsc2UKLQkJY3RybF9vdXRsKENDUl9DQUNIRV8xNktCLCBDQ1IzX1JFRyk7CisJCV9fcmF3X3dyaXRlbChDQ1JfQ0FDSEVfMTZLQiwgQ0NSM19SRUcpOwogI2VuZGlmCiAjZW5kaWYKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDMuYwppbmRleCBjOTg4NDY4Li41M2JlNzBiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoMy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2gzLmMKQEAgLTU4LDcgKzU4LDcgQEAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwX3BpbnMoaW50IG1vZGUpCiB7CiAJaWYgKG1vZGUgPT0gSVJRX01PREVfSVJRKSB7Ci0JCWN0cmxfb3V0dyhjdHJsX2ludyhJTlRDX0lDUjEpICYgfklOVENfSUNSMV9JUlFMVkwsIElOVENfSUNSMSk7CisJCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhJTlRDX0lDUjEpICYgfklOVENfSUNSMV9JUlFMVkwsIElOVENfSUNSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTAxMjMpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQtMjAyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYwppbmRleCAyMTQyMWUzLi42YjgwODUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYwpAQCAtMjMsNyArMjMsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBlbWlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IGN0cmxfaW5sKENQRzJfRlJRQ1IzKSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gX19yYXdfcmVhZGwoQ1BHMl9GUlFDUjMpICYgMHgwMDA3OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGZycWNyM19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01Miw3ICs1Miw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZlbWlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChDUEcyX0ZSUUNSMykgPj4gMykgJiAweDAwMDc7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkbChDUEcyX0ZSUUNSMykgPj4gMykgJiAweDAwMDc7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gZnJxY3IzX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTkyLDcgKzkyLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hvY19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW5sKENQRzJfRlJRQ1IzKSA+PiA2KSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWRsKENQRzJfRlJRQ1IzKSA+PiA2KSAmIDB4MDAwNzsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBmcnFjcjNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtMTIyLDEwICsxMjIsMTAgQEAKIAogCXRtcCA9IGZycWNyM19sb29rdXAoY2xrLCByYXRlKTsKIAotCWZycWNyMyA9IGN0cmxfaW5sKENQRzJfRlJRQ1IzKTsKKwlmcnFjcjMgPSBfX3Jhd19yZWFkbChDUEcyX0ZSUUNSMyk7CiAJZnJxY3IzICY9IH4oMHgwMDA3IDw8IDYpOwogCWZycWNyMyB8PSB0bXAgPDwgNjsKLQljdHJsX291dGwoZnJxY3IzLCBDUEcyX0ZSUUNSMyk7CisJX19yYXdfd3JpdGVsKGZycWNyMywgQ1BHMl9GUlFDUjMpOwogCiAJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBmcnFjcjNfZGl2aXNvcnNbdG1wXTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g0LmMKaW5kZXggNzMyOTRkOS4uNWFkZDc1YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tjdHJsX2ludyhGUlFDUikgJiAweDAwMDddOworCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDA3XTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNF9tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTM3LDcgKzM3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpID4+IDMpICYgMHgwMDA3OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJRQ1IpID4+IDMpICYgMHgwMDA3OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01Nyw3ICs1Nyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSA+PiA2KSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSUUNSKSA+PiA2KSAmIDB4MDAwNzsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZnB1LmMKaW5kZXggZTk3ODU3YS4uNDQ3NDgyZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2ZwdS5jCkBAIC04NSwxNCArODUsMTQgQEAKIAkJICAgICAgImZtb3YucwlmcjEsIEAtJTBcblx0IgogCQkgICAgICAiZm1vdi5zCWZyMCwgQC0lMFxuXHQiCiAJCSAgICAgICJsZHMJJTMsIGZwc2NyXG5cdCI6Ij1yIiAoZHVtbXkpCi0JCSAgICAgIDoiMCIoKGNoYXIgKikoJnRzay0+dGhyZWFkLmZwdS5oYXJkLnN0YXR1cykpLAorCQkgICAgICA6IjAiKChjaGFyICopKCZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuc3RhdHVzKSksCiAJCSAgICAgICJyIihGUFNDUl9SQ0hHKSwgInIiKEZQU0NSX0lOSVQpCiAJCSAgICAgIDoibWVtb3J5Iik7CiAKIAlkaXNhYmxlX2ZwdSgpOwogfQogCi1zdGF0aWMgdm9pZCByZXN0b3JlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3ZvaWQgcmVzdG9yZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJdW5zaWduZWQgbG9uZyBkdW1teTsKIApAQCAtMTM1LDYyICsxMzUsMTEgQEAKIAkJICAgICAgImxkcy5sCUAlMCssIGZwc2NyXG5cdCIKIAkJICAgICAgImxkcy5sCUAlMCssIGZwdWxcblx0IgogCQkgICAgICA6Ij1yIiAoZHVtbXkpCi0JCSAgICAgIDoiMCIoJnRzay0+dGhyZWFkLmZwdSksICJyIihGUFNDUl9SQ0hHKQorCQkgICAgICA6IjAiICh0c2stPnRocmVhZC54c3RhdGUpLCAiciIgKEZQU0NSX1JDSEcpCiAJCSAgICAgIDoibWVtb3J5Iik7CiAJZGlzYWJsZV9mcHUoKTsKIH0KIAotLyoKLSAqIExvYWQgdGhlIEZQVSB3aXRoIHNpZ25hbGxpbmcgTkFOUy4gIFRoaXMgYml0IHBhdHRlcm4gd2UncmUgdXNpbmcKLSAqIGhhcyB0aGUgcHJvcGVydHkgdGhhdCBubyBtYXR0ZXIgd2V0aGVyIGNvbnNpZGVyZWQgYXMgc2luZ2xlIG9yIGFzCi0gKiBkb3VibGUgcHJlY2lzaW9uIHJlcHJlc2VudHMgc2lnbmFsaW5nIE5BTlMuCi0gKi8KLQotc3RhdGljIHZvaWQgZnB1X2luaXQodm9pZCkKLXsKLQllbmFibGVfZnB1KCk7Ci0JYXNtIHZvbGF0aWxlICgJImxkcwklMCwgZnB1bFxuXHQiCi0JCQkibGRzCSUxLCBmcHNjclxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjBcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMlxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjNcblx0IgotCQkJImZzdHMJZnB1bCwgZnI0XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyNVxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjZcblx0IgotCQkJImZzdHMJZnB1bCwgZnI3XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyOFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjlcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxMFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjExXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTJcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxM1xuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjE0XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTVcblx0IgotCQkJImZyY2hnXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjFcblx0IgotCQkJImZzdHMJZnB1bCwgZnIyXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyM1xuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjRcblx0IgotCQkJImZzdHMJZnB1bCwgZnI1XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyNlxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjdcblx0IgotCQkJImZzdHMJZnB1bCwgZnI4XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyOVxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjEwXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTFcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxMlxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjEzXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTRcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxNVxuXHQiCi0JCQkiZnJjaGdcblx0IgotCQkJImxkcwklMiwgZnBzY3Jcblx0IgotCQkJOgkvKiBubyBvdXRwdXQgKi8KLQkJCToiciIgKDApLCAiciIoRlBTQ1JfUkNIRyksICJyIihGUFNDUl9JTklUKSk7Ci0JZGlzYWJsZV9mcHUoKTsKLX0KLQogLyoqCiAgKiAgICAgIGRlbm9ybWFsX3RvX2RvdWJsZSAtIEdpdmVuIGRlbm9ybWFsaXplZCBmbG9hdCBudW1iZXIsCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlIGRvdWJsZSBmbG9hdApAQCAtMjgyLDkgKzIzMSw5IEBACiAJCS8qIGZjbnZzZCAqLwogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAKLQkJaWYgKCh0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKSkKKwkJaWYgKCh0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikpCiAJCQkvKiBGUFUgZXJyb3IgKi8KLQkJCWRlbm9ybWFsX3RvX2RvdWJsZSgmdHNrLT50aHJlYWQuZnB1LmhhcmQsCisJCQlkZW5vcm1hbF90b19kb3VibGUoJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwKIAkJCQkJICAgKGZpbnNuID4+IDgpICYgMHhmKTsKIAkJZWxzZQogCQkJcmV0dXJuIDA7CkBAIC0zMDAsOSArMjQ5LDkgQEAKIAogCQluID0gKGZpbnNuID4+IDgpICYgMHhmOwogCQltID0gKGZpbnNuID4+IDQpICYgMHhmOwotCQloeCA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl07Ci0JCWh5ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttXTsKLQkJZnBzY3IgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjcjsKKwkJaHggPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXTsKKwkJaHkgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttXTsKKwkJZnBzY3IgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3I7CiAJCXByZWMgPSBmcHNjciAmIEZQU0NSX0RCTF9QUkVDSVNJT047CiAKIAkJaWYgKChmcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKQpAQCAtMzEyLDE4ICsyNjEsMTggQEAKIAogCQkJLyogRlBVIGVycm9yIGJlY2F1c2Ugb2YgZGVub3JtYWwgKGRvdWJsZXMpICovCiAJCQlsbHggPSAoKGxvbmcgbG9uZyloeCA8PCAzMikKLQkJCSAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbiArIDFdOworCQkJICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbiArIDFdOwogCQkJbGx5ID0gKChsb25nIGxvbmcpaHkgPDwgMzIpCi0JCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20gKyAxXTsKKwkJCSAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW20gKyAxXTsKIAkJCWxseCA9IGZsb2F0NjRfbXVsKGxseCwgbGx5KTsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBsbHggPj4gMzI7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24gKyAxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24gKyAxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CiAJCX0gZWxzZSBpZiAoKGZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpCiAJCQkgICAmJiAoIXByZWMgJiYgKChoeCAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMAogCQkJCQkgfHwgKGh5ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwKSkpIHsKIAkJCS8qIEZQVSBlcnJvciBiZWNhdXNlIG9mIGRlbm9ybWFsIChmbG9hdHMpICovCiAJCQloeCA9IGZsb2F0MzJfbXVsKGh4LCBoeSk7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gaHg7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGh4OwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwogCkBAIC0zMzgsOSArMjg3LDkgQEAKIAogCQluID0gKGZpbnNuID4+IDgpICYgMHhmOwogCQltID0gKGZpbnNuID4+IDQpICYgMHhmOwotCQloeCA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl07Ci0JCWh5ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttXTsKLQkJZnBzY3IgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjcjsKKwkJaHggPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXTsKKwkJaHkgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttXTsKKwkJZnBzY3IgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3I7CiAJCXByZWMgPSBmcHNjciAmIEZQU0NSX0RCTF9QUkVDSVNJT047CiAKIAkJaWYgKChmcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKQpAQCAtMzUwLDE1ICsyOTksMTUgQEAKIAogCQkJLyogRlBVIGVycm9yIGJlY2F1c2Ugb2YgZGVub3JtYWwgKGRvdWJsZXMpICovCiAJCQlsbHggPSAoKGxvbmcgbG9uZyloeCA8PCAzMikKLQkJCSAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbiArIDFdOworCQkJICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbiArIDFdOwogCQkJbGx5ID0gKChsb25nIGxvbmcpaHkgPDwgMzIpCi0JCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20gKyAxXTsKKwkJCSAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW20gKyAxXTsKIAkJCWlmICgoZmluc24gJiAweGYwMGYpID09IDB4ZjAwMCkKIAkJCQlsbHggPSBmbG9hdDY0X2FkZChsbHgsIGxseSk7CiAJCQllbHNlCiAJCQkJbGx4ID0gZmxvYXQ2NF9zdWIobGx4LCBsbHkpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbiArIDFdID0gbGx4ICYgMHhmZmZmZmZmZjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dID0gbGx4ID4+IDMyOworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbiArIDFdID0gbGx4ICYgMHhmZmZmZmZmZjsKIAkJfSBlbHNlIGlmICgoZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKIAkJCSAgICYmICghcHJlYyAmJiAoKGh4ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwCiAJCQkJCSB8fCAoaHkgJiAweDdmZmZmZmZmKSA8IDB4MDA4MDAwMDApKSkgewpAQCAtMzY3LDcgKzMxNiw3IEBACiAJCQkJaHggPSBmbG9hdDMyX2FkZChoeCwgaHkpOwogCQkJZWxzZQogCQkJCWh4ID0gZmxvYXQzMl9zdWIoaHgsIGh5KTsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBoeDsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dID0gaHg7CiAJCX0gZWxzZQogCQkJcmV0dXJuIDA7CiAKQEAgLTM4Miw5ICszMzEsOSBAQAogCiAJCW4gPSAoZmluc24gPj4gOCkgJiAweGY7CiAJCW0gPSAoZmluc24gPj4gNCkgJiAweGY7Ci0JCWh4ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXTsKLQkJaHkgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW21dOwotCQlmcHNjciA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyOworCQloeCA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dOworCQloeSA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW21dOworCQlmcHNjciA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjcjsKIAkJcHJlYyA9IGZwc2NyICYgRlBTQ1JfREJMX1BSRUNJU0lPTjsKIAogCQlpZiAoKGZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpCkBAIC0zOTQsMjAgKzM0MywyMCBAQAogCiAJCQkvKiBGUFUgZXJyb3IgYmVjYXVzZSBvZiBkZW5vcm1hbCAoZG91YmxlcykgKi8KIAkJCWxseCA9ICgobG9uZyBsb25nKWh4IDw8IDMyKQotCQkJICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuICsgMV07CisJCQkgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuICsgMV07CiAJCQlsbHkgPSAoKGxvbmcgbG9uZyloeSA8PCAzMikKLQkJCSAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbSArIDFdOworCQkJICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbSArIDFdOwogCiAJCQlsbHggPSBmbG9hdDY0X2RpdihsbHgsIGxseSk7CiAKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBsbHggPj4gMzI7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24gKyAxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24gKyAxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CiAJCX0gZWxzZSBpZiAoKGZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpCiAJCQkgICAmJiAoIXByZWMgJiYgKChoeCAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMAogCQkJCQkgfHwgKGh5ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwKSkpIHsKIAkJCS8qIEZQVSBlcnJvciBiZWNhdXNlIG9mIGRlbm9ybWFsIChmbG9hdHMpICovCiAJCQloeCA9IGZsb2F0MzJfZGl2KGh4LCBoeSk7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gaHg7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGh4OwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwogCkBAIC00MjAsMTcgKzM2OSwxNyBAQAogCQl1bnNpZ25lZCBpbnQgaHg7CiAKIAkJbSA9IChmaW5zbiA+PiA4KSAmIDB4NzsKLQkJaHggPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW21dOworCQloeCA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW21dOwogCi0JCWlmICgodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKKwkJaWYgKCh0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKIAkJCSYmICgoaHggJiAweDdmZmZmZmZmKSA8IDB4MDAxMDAwMDApKSB7CiAJCQkvKiBzdWJub3JtYWwgZG91YmxlIHRvIGZsb2F0IGNvbnZlcnNpb24gKi8KIAkJCWxvbmcgbG9uZyBsbHg7CiAKLQkJCWxseCA9ICgobG9uZyBsb25nKXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV0gPDwgMzIpCi0JCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20gKyAxXTsKKwkJCWxseCA9ICgobG9uZyBsb25nKXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW21dIDw8IDMyKQorCQkJICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbSArIDFdOwogCi0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcHVsID0gZmxvYXQ2NF90b19mbG9hdDMyKGxseCk7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnB1bCA9IGZsb2F0NjRfdG9fZmxvYXQzMihsbHgpOwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwogCkBAIC00NDksNyArMzk4LDcgQEAKIGludCBmbG9hdF9yb3VuZGluZ19tb2RlKHZvaWQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCWludCByb3VuZGluZ01vZGUgPSBGUFNDUl9ST1VORElOR19NT0RFKHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyKTsKKwlpbnQgcm91bmRpbmdNb2RlID0gRlBTQ1JfUk9VTkRJTkdfTU9ERSh0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IpOwogCXJldHVybiByb3VuZGluZ01vZGU7CiB9CiAKQEAgLTQ2MSwxNiArNDEwLDE2IEBACiAJX191bmxhenlfZnB1KHRzaywgcmVncyk7CiAJZnB1X2V4Y2VwdGlvbl9mbGFncyA9IDA7CiAJaWYgKGllZWVfZnBlX2hhbmRsZXIocmVncykpIHsKLQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJj0KKwkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyICY9CiAJCSAgICB+KEZQU0NSX0NBVVNFX01BU0sgfCBGUFNDUl9GTEFHX01BU0spOwotCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciB8PSBmcHVfZXhjZXB0aW9uX2ZsYWdzOworCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgfD0gZnB1X2V4Y2VwdGlvbl9mbGFnczsKIAkJLyogU2V0IHRoZSBGUFNDUiBmbGFnIGFzIHdlbGwgYXMgY2F1c2UgYml0cyAtIHNpbXBseQogCQkgKiByZXBsaWNhdGUgdGhlIGNhdXNlICovCi0JCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyIHw9IChmcHVfZXhjZXB0aW9uX2ZsYWdzID4+IDEwKTsKKwkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyIHw9IChmcHVfZXhjZXB0aW9uX2ZsYWdzID4+IDEwKTsKIAkJZ3JhYl9mcHUocmVncyk7CiAJCXJlc3RvcmVfZnB1KHRzayk7CiAJCXRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzIHw9IFRTX1VTRURGUFU7Ci0JCWlmICgoKCh0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciAmIEZQU0NSX0VOQUJMRV9NQVNLKSA+PiA3KSAmCisJCWlmICgoKCh0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgJiBGUFNDUl9FTkFCTEVfTUFTSykgPj4gNykgJgogCQkgICAgIChmcHVfZXhjZXB0aW9uX2ZsYWdzID4+IDIpKSA9PSAwKSB7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTQ3OCwzMyArNDI3LDMgQEAKIAogCWZvcmNlX3NpZyhTSUdGUEUsIHRzayk7CiB9Ci0KLXZvaWQgZnB1X3N0YXRlX3Jlc3RvcmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCi0JZ3JhYl9mcHUocmVncyk7Ci0JaWYgKHVubGlrZWx5KCF1c2VyX21vZGUocmVncykpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQlVHOiBGUFUgaXMgdXNlZCBpbiBrZXJuZWwgbW9kZS5cbiIpOwotCQlCVUcoKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChsaWtlbHkodXNlZF9tYXRoKCkpKSB7Ci0JCS8qIFVzaW5nIHRoZSBGUFUgYWdhaW4uICAqLwotCQlyZXN0b3JlX2ZwdSh0c2spOwotCX0gZWxzZSB7Ci0JCS8qIEZpcnN0IHRpbWUgRlBVIHVzZXIuICAqLwotCQlmcHVfaW5pdCgpOwotCQlzZXRfdXNlZF9tYXRoKCk7Ci0JfQotCXRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzIHw9IFRTX1VTRURGUFU7Ci0JdHNrLT5mcHVfY291bnRlcisrOwotfQotCi1CVUlMRF9UUkFQX0hBTkRMRVIoZnB1X3N0YXRlX3Jlc3RvcmUpCi17Ci0JVFJBUF9IQU5ETEVSX0RFQ0w7Ci0KLQlmcHVfc3RhdGVfcmVzdG9yZShyZWdzKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYwppbmRleCBkMzZmMGM0Li44MjI5NzdhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCkBAIC0yOCw5ICsyOCw5IEBACiAJCVs5XSA9ICgxIDw8IDE2KQogCX07CiAKLQlwdnIgPSAoY3RybF9pbmwoQ0NOX1BWUikgPj4gOCkgJiAweGZmZmZmZjsKLQlwcnIgPSAoY3RybF9pbmwoQ0NOX1BSUikgPj4gNCkgJiAweGZmOwotCWN2ciA9IChjdHJsX2lubChDQ05fQ1ZSKSk7CisJcHZyID0gKF9fcmF3X3JlYWRsKENDTl9QVlIpID4+IDgpICYgMHhmZmZmZmY7CisJcHJyID0gKF9fcmF3X3JlYWRsKENDTl9QUlIpID4+IDQpICYgMHhmZjsKKwljdnIgPSAoX19yYXdfcmVhZGwoQ0NOX0NWUikpOwogCiAJLyoKIAkgKiBTZXR1cCBzb21lIHNhbmUgU0gtNCBkZWZhdWx0cyBmb3IgdGhlIGljYWNoZQpAQCAtNzEsMTEgKzcxLDExIEBACiAJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheXMgPSA0OwogCX0gZWxzZSB7CiAJCS8qIEFuZCBzb21lIFNILTQgZGVmYXVsdHMuLiAqLwotCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfUFRFQTsKKwkJYm9vdF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX1BURUEgfCBDUFVfSEFTX0ZQVTsKIAkJYm9vdF9jcHVfZGF0YS5mYW1pbHkgPSBDUFVfRkFNSUxZX1NINDsKIAl9CiAKLQkvKiBGUFUgZGV0ZWN0aW9uIHdvcmtzIGZvciBldmVyeW9uZSAqLworCS8qIEZQVSBkZXRlY3Rpb24gd29ya3MgZm9yIGFsbW9zdCBldmVyeW9uZSAqLwogCWlmICgoY3ZyICYgMHgyMDAwMDAwMCkpCiAJCWJvb3RfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19GUFU7CiAKQEAgLTEyNCw2ICsxMjQsNyBAQAogCQlib290X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0g3Nzg1OwogCQlicmVhazsKIAljYXNlIDB4NDAwNDoKKwljYXNlIDB4NDAwNToKIAkJYm9vdF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINzc4NjsKIAkJYm9vdF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX1BURUFFWCB8IENQVV9IQVNfTDJfQ0FDSEU7CiAJCWJyZWFrOwpAQCAtMTYwLDYgKzE2MSw3IEBACiAJCWJyZWFrOwogCWNhc2UgMHg3MDA6CiAJCWJvb3RfY3B1X2RhdGEudHlwZSA9IENQVV9TSDRfNTAxOworCQlib290X2NwdV9kYXRhLmZsYWdzICY9IH5DUFVfSEFTX0ZQVTsKIAkJYm9vdF9jcHVfZGF0YS5pY2FjaGUud2F5cyA9IDI7CiAJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheXMgPSAyOwogCQlicmVhazsKQEAgLTIyNyw3ICsyMjksNyBAQAogCQkJICogU2l6ZSBjYWxjdWxhdGlvbiBpcyBtdWNoIG1vcmUgc2Vuc2libGUKIAkJCSAqIHRoYW4gaXQgaXMgZm9yIHRoZSBMMS4KIAkJCSAqCi0JCQkgKiBTaXplcyBhcmUgMTI4S0IsIDI1OEtCLCA1MTJLQiwgYW5kIDFNQi4KKwkJCSAqIFNpemVzIGFyZSAxMjhLQiwgMjU2S0IsIDUxMktCLCBhbmQgMU1CLgogCQkJICovCiAJCQlzaXplID0gKGN2ciAmIDB4ZikgPDwgMTc7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g0LTIwMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDQtMjAyLmMKaW5kZXggNGI3MzM3MS4uYjliN2UxMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDQtMjAyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDQtMjAyLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogewogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgSVJRX01PREVfSVJROiAvKiBpbmRpdmlkdWFsIGludGVycnVwdCBtb2RlIGZvciBJUkwzLTAgKi8KLQkJY3RybF9vdXR3KGN0cmxfaW53KElOVENfSUNSKSB8IElOVENfSUNSX0lSTE0sIElOVENfSUNSKTsKKwkJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KElOVENfSUNSKSB8IElOVENfSUNSX0lSTE0sIElOVENfSUNSKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsbSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwppbmRleCBiMmE5ZGYxLi5mZmQ3OWU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKQEAgLTQ0Miw3ICs0NDIsNyBAQAogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE6IC8qIGluZGl2aWR1YWwgaW50ZXJydXB0IG1vZGUgZm9yIElSTDMtMCAqLwotCQljdHJsX291dHcoY3RybF9pbncoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOworCQlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmxtKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCmluZGV4IDViNzRjYzAuLmExNmViMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYwpAQCAtMzE5LDcgKzMxOSw3IEBACiB7CiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE6Ci0JCWN0cmxfb3V0dyhjdHJsX2ludyhJTlRDX0lDUikgfCBJTlRDX0lDUl9JUkxNLCBJTlRDX0lDUik7CisJCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhJTlRDX0lDUikgfCBJTlRDX0lDUl9JUkxNLCBJTlRDX0lDUik7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMKaW5kZXggOGE4YTk5My4uZmMwNjVmOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYwpAQCAtNDMsOSArNDMsOSBAQAogCiAjZGVmaW5lIHN0b3JlX3F1ZXVlX2JhcnJpZXIoKQkJCVwKIGRvIHsJCQkJCQlcCi0JKHZvaWQpY3RybF9pbmwoUDRTRUdfU1RPUkVfUVVFKTsJXAotCWN0cmxfb3V0bCgwLCBQNFNFR19TVE9SRV9RVUUgKyAwKTsJXAotCWN0cmxfb3V0bCgwLCBQNFNFR19TVE9SRV9RVUUgKyA4KTsJXAorCSh2b2lkKV9fcmF3X3JlYWRsKFA0U0VHX1NUT1JFX1FVRSk7CVwKKwlfX3Jhd193cml0ZWwoMCwgUDRTRUdfU1RPUkVfUVVFICsgMCk7CVwKKwlfX3Jhd193cml0ZWwoMCwgUDRTRUdfU1RPUkVfUVVFICsgOCk7CVwKIH0gd2hpbGUgKDApOwogCiAvKioKQEAgLTEwMCw3ICsxMDAsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmc3FfbWFwcGluZ19sb2NrKTsKIH0KIAotc3RhdGljIGludCBfX3NxX3JlbWFwKHN0cnVjdCBzcV9tYXBwaW5nICptYXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCitzdGF0aWMgaW50IF9fc3FfcmVtYXAoc3RydWN0IHNxX21hcHBpbmcgKm1hcCwgcGdwcm90X3QgcHJvdCkKIHsKICNpZiBkZWZpbmVkKENPTkZJR19NTVUpCiAJc3RydWN0IHZtX3N0cnVjdCAqdm1hOwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIAlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXZtYS0+YWRkciwKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZyl2bWEtPmFkZHIgKyBtYXAtPnNpemUsCi0JCQkgICAgICAgdm1hLT5waHlzX2FkZHIsIF9fcGdwcm90KGZsYWdzKSkpIHsKKwkJCSAgICAgICB2bWEtPnBoeXNfYWRkciwgcHJvdCkpIHsKIAkJdnVubWFwKHZtYS0+YWRkcik7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KQEAgLTEyMyw4ICsxMjMsOCBAQAogCSAqIHN0cmFpZ2h0Zm9yd2FyZCwgYXMgd2UgY2FuIGp1c3QgbG9hZCB1cCBlYWNoIHF1ZXVlJ3MgUUFDUiB3aXRoCiAJICogdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXBwcm9wcmlhdGVseSBtYXNrZWQuCiAJICovCi0JY3RybF9vdXRsKCgobWFwLT5hZGRyID4+IDI2KSA8PCAyKSAmIDB4MWMsIFNRX1FBQ1IwKTsKLQljdHJsX291dGwoKChtYXAtPmFkZHIgPj4gMjYpIDw8IDIpICYgMHgxYywgU1FfUUFDUjEpOworCV9fcmF3X3dyaXRlbCgoKG1hcC0+YWRkciA+PiAyNikgPDwgMikgJiAweDFjLCBTUV9RQUNSMCk7CisJX19yYXdfd3JpdGVsKCgobWFwLT5hZGRyID4+IDI2KSA8PCAyKSAmIDB4MWMsIFNRX1FBQ1IxKTsKICNlbmRpZgogCiAJcmV0dXJuIDA7CkBAIC0xMzUsMTQgKzEzNSwxNCBAQAogICogQHBoeXM6IFBoeXNpY2FsIGFkZHJlc3Mgb2YgbWFwcGluZy4KICAqIEBzaXplOiBMZW5ndGggb2YgbWFwcGluZy4KICAqIEBuYW1lOiBVc2VyIGludm9raW5nIG1hcHBpbmcuCi0gKiBAZmxhZ3M6IFByb3RlY3Rpb24gZmxhZ3MuCisgKiBAcHJvdDogUHJvdGVjdGlvbiBiaXRzLgogICoKICAqIFJlbWFwcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBAcGh5cyB0aHJvdWdoIHRoZSBuZXh0IGF2YWlsYWJsZSBzdG9yZSBxdWV1ZQogICogYWRkcmVzcyBvZiBAc2l6ZSBsZW5ndGguIEBuYW1lIGlzIGxvZ2dlZCBhdCBib290IHRpbWUgYXMgd2VsbCBhcyB0aHJvdWdoCiAgKiB0aGUgc3lzZnMgaW50ZXJmYWNlLgogICovCiB1bnNpZ25lZCBsb25nIHNxX3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgaW50IHNpemUsCi0JCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgcGdwcm90X3QgcHJvdCkKIHsKIAlzdHJ1Y3Qgc3FfbWFwcGluZyAqbWFwOwogCXVuc2lnbmVkIGxvbmcgZW5kOwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAKIAltYXAtPnNxX2FkZHIgPSBQNFNFR19TVE9SRV9RVUUgKyAocGFnZSA8PCBQQUdFX1NISUZUKTsKIAotCXJldCA9IF9fc3FfcmVtYXAobWFwLCBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMX05PQ0FDSEUpIHwgZmxhZ3MpOworCXJldCA9IF9fc3FfcmVtYXAobWFwLCBwcm90KTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKIApAQCAtMzA5LDggKzMwOSw3IEBACiAJCXJldHVybiAtRUlPOwogCiAJaWYgKGxpa2VseShsZW4pKSB7Ci0JCWludCByZXQgPSBzcV9yZW1hcChiYXNlLCBsZW4sICJVc2Vyc3BhY2UiLAotCQkJCSAgIHBncHJvdF92YWwoUEFHRV9TSEFSRUQpKTsKKwkJaW50IHJldCA9IHNxX3JlbWFwKGJhc2UsIGxlbiwgIlVzZXJzcGFjZSIsIFBBR0VfU0hBUkVEKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQppbmRleCAzM2JhYjQ3Li5iMTQ0ZThhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQpAQCAtNDEsNyArNDEsOCBAQAogcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkJOj0gcGlubXV4LXNoNzc4NS5vCiBwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQk6PSBwaW5tdXgtc2g3Nzg2Lm8KIAotb2JqLXkJCQkJKz0gJChjbG9jay15KQotb2JqLSQoQ09ORklHX1NNUCkJCSs9ICQoc21wLXkpCi1vYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkrPSAkKHBpbm11eC15KQotb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKQkrPSBwZXJmX2V2ZW50Lm8KK29iai15CQkJCQkrPSAkKGNsb2NrLXkpCitvYmotJChDT05GSUdfU01QKQkJCSs9ICQoc21wLXkpCitvYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkJKz0gJChwaW5tdXgteSkKK29iai0kKENPTkZJR19QRVJGX0VWRU5UUykJCSs9IHBlcmZfZXZlbnQubworb2JqLSQoQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCkJKz0gdWJjLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzM0My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKaW5kZXggMGVlM2VlOC4uMmMxNmRmMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKQEAgLTEwNywxMyArMTA3LDE3IEBACiBzdGF0aWMgaW50IG11bHRpcGxpZXJzW10gPSB7IDEsIDIsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfTsKIHN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMSwgMywgMiwgNSwgMywgNCwgNSwgNiwgOCwgMTAsIDEyLCAxNiwgMjAgfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF90YWJsZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CiAJLmRpdmlzb3JzID0gZGl2aXNvcnMsCiAJLm5yX2Rpdmlzb3JzID0gQVJSQVlfU0laRShkaXZpc29ycyksCiAJLm11bHRpcGxpZXJzID0gbXVsdGlwbGllcnMsCiAJLm5yX211bHRpcGxpZXJzID0gQVJSQVlfU0laRShtdWx0aXBsaWVycyksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsa19kaXY0X3RhYmxlIGRpdjRfdGFibGUgPSB7CisJLmRpdl9tdWx0X3RhYmxlID0gJmRpdjRfZGl2X211bHRfdGFibGUsCit9OworCiBlbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9CMywgRElWNF9QLAogICAgICAgIERJVjRfU0lVQSwgRElWNF9TSVVCLCBESVY0X05SIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzM2Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMKaW5kZXggYTk1ZWJhYi4uOTE1ODhkMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMKQEAgLTExMCwxMyArMTEwLDE3IEBACiBzdGF0aWMgaW50IG11bHRpcGxpZXJzW10gPSB7IDEsIDIsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfTsKIHN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMSwgMywgMiwgNSwgMywgNCwgNSwgNiwgOCwgMTAsIDEyLCAxNiwgMjAgfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF90YWJsZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CiAJLmRpdmlzb3JzID0gZGl2aXNvcnMsCiAJLm5yX2Rpdmlzb3JzID0gQVJSQVlfU0laRShkaXZpc29ycyksCiAJLm11bHRpcGxpZXJzID0gbXVsdGlwbGllcnMsCiAJLm5yX211bHRpcGxpZXJzID0gQVJSQVlfU0laRShtdWx0aXBsaWVycyksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsa19kaXY0X3RhYmxlIGRpdjRfdGFibGUgPSB7CisJLmRpdl9tdWx0X3RhYmxlID0gJmRpdjRfZGl2X211bHRfdGFibGUsCit9OworCiBlbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9CMywgRElWNF9QLAogICAgICAgIERJVjRfU0lVQSwgRElWNF9TSVVCLCBESVY0X05SIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMKaW5kZXggZWEzOGI1NS4uMTVkYjZkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMKQEAgLTExMCwxOSArMTEwLDIyIEBACiBzdGF0aWMgaW50IG11bHRpcGxpZXJzW10gPSB7IDEsIDIsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfTsKIHN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMSwgMywgMiwgNSwgMywgNCwgNSwgNiwgOCwgMTAsIDEyLCAxNiwgMjAgfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF90YWJsZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CiAJLmRpdmlzb3JzID0gZGl2aXNvcnMsCiAJLm5yX2Rpdmlzb3JzID0gQVJSQVlfU0laRShkaXZpc29ycyksCiAJLm11bHRpcGxpZXJzID0gbXVsdGlwbGllcnMsCiAJLm5yX211bHRpcGxpZXJzID0gQVJSQVlfU0laRShtdWx0aXBsaWVycyksCiB9OwogCi1lbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9CMywgRElWNF9QLAotICAgICAgIERJVjRfU0lVQSwgRElWNF9TSVVCLCBESVY0X0lSREEsIERJVjRfTlIgfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgZGl2NF90YWJsZSA9IHsKKwkuZGl2X211bHRfdGFibGUgPSAmZGl2NF9kaXZfbXVsdF90YWJsZSwKK307CiAKICNkZWZpbmUgRElWNChfc3RyLCBfcmVnLCBfYml0LCBfbWFzaywgX2ZsYWdzKSBcCiAgIFNIX0NMS19ESVY0KF9zdHIsICZwbGxfY2xrLCBfcmVnLCBfYml0LCBfbWFzaywgX2ZsYWdzKQogCitlbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9CMywgRElWNF9QLCBESVY0X05SIH07CisKIHN0cnVjdCBjbGsgZGl2NF9jbGtzW0RJVjRfTlJdID0gewogCVtESVY0X0ldID0gRElWNCgiY3B1X2NsayIsIEZSUUNSLCAyMCwgMHgxZmVmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAogCVtESVY0X1VdID0gRElWNCgidW1lbV9jbGsiLCBGUlFDUiwgMTYsIDB4MWZmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKQEAgLTEzMCw5ICsxMzMsMTkgQEAKIAlbRElWNF9CXSA9IERJVjQoImJ1c19jbGsiLCBGUlFDUiwgOCwgMHgxZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAogCVtESVY0X0IzXSA9IERJVjQoImIzX2NsayIsIEZSUUNSLCA0LCAweDFmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfUF0gPSBESVY0KCJwZXJpcGhlcmFsX2NsayIsIEZSUUNSLCAwLCAweDFmZmYsIDApLAorfTsKKworZW51bSB7IERJVjRfSVJEQSwgRElWNF9FTkFCTEVfTlIgfTsKKworc3RydWN0IGNsayBkaXY0X2VuYWJsZV9jbGtzW0RJVjRfRU5BQkxFX05SXSA9IHsKKwlbRElWNF9JUkRBXSA9IERJVjQoImlyZGFfY2xrIiwgSVJEQUNMS0NSLCAwLCAweDFmZmYsIDApLAorfTsKKworZW51bSB7IERJVjRfU0lVQSwgRElWNF9TSVVCLCBESVY0X1JFUEFSRU5UX05SIH07CisKK3N0cnVjdCBjbGsgZGl2NF9yZXBhcmVudF9jbGtzW0RJVjRfUkVQQVJFTlRfTlJdID0gewogCVtESVY0X1NJVUFdID0gRElWNCgic2l1YV9jbGsiLCBTQ0xLQUNSLCAwLCAweDFmZmYsIDApLAogCVtESVY0X1NJVUJdID0gRElWNCgic2l1Yl9jbGsiLCBTQ0xLQkNSLCAwLCAweDFmZmYsIDApLAotCVtESVY0X0lSREFdID0gRElWNCgiaXJkYV9jbGsiLCBJUkRBQ0xLQ1IsIDAsIDB4MWZmZiwgMCksCiB9OwogCiBzdHJ1Y3QgY2xrIGRpdjZfY2xrc1tdID0gewpAQCAtMTg5LDYgKzIwMiwxNCBAQAogCQlyZXQgPSBzaF9jbGtfZGl2NF9yZWdpc3RlcihkaXY0X2Nsa3MsIERJVjRfTlIsICZkaXY0X3RhYmxlKTsKIAogCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9lbmFibGVfcmVnaXN0ZXIoZGl2NF9lbmFibGVfY2xrcywKKwkJCQkJRElWNF9FTkFCTEVfTlIsICZkaXY0X3RhYmxlKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9yZXBhcmVudF9yZWdpc3RlcihkaXY0X3JlcGFyZW50X2Nsa3MsCisJCQkJCURJVjRfUkVQQVJFTlRfTlIsICZkaXY0X3RhYmxlKTsKKworCWlmICghcmV0KQogCQlyZXQgPSBzaF9jbGtfZGl2Nl9yZWdpc3RlcihkaXY2X2Nsa3MsIEFSUkFZX1NJWkUoZGl2Nl9jbGtzKSk7CiAKIAlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIzLmMKaW5kZXggMjBhMzFjMi4uNTBiYWJlMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIzLmMKQEAgLTExMCwxNSArMTEwLDE4IEBACiBzdGF0aWMgaW50IG11bHRpcGxpZXJzW10gPSB7IDEsIDIsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfTsKIHN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMSwgMywgMiwgNSwgMywgNCwgNSwgNiwgOCwgMTAsIDEyLCAxNiwgMjAgfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF90YWJsZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CiAJLmRpdmlzb3JzID0gZGl2aXNvcnMsCiAJLm5yX2Rpdmlzb3JzID0gQVJSQVlfU0laRShkaXZpc29ycyksCiAJLm11bHRpcGxpZXJzID0gbXVsdGlwbGllcnMsCiAJLm5yX211bHRpcGxpZXJzID0gQVJSQVlfU0laRShtdWx0aXBsaWVycyksCiB9OwogCi1lbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9CMywgRElWNF9QLAotICAgICAgIERJVjRfU0lVQSwgRElWNF9TSVVCLCBESVY0X0lSREEsIERJVjRfTlIgfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgZGl2NF90YWJsZSA9IHsKKwkuZGl2X211bHRfdGFibGUgPSAmZGl2NF9kaXZfbXVsdF90YWJsZSwKK307CisKK2VudW0geyBESVY0X0ksIERJVjRfVSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0IzLCBESVY0X1AsIERJVjRfTlIgfTsKIAogI2RlZmluZSBESVY0KF9zdHIsIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpIFwKICAgU0hfQ0xLX0RJVjQoX3N0ciwgJnBsbF9jbGssIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpCkBAIC0xMzAsMTEgKzEzMywyMCBAQAogCVtESVY0X0JdID0gRElWNCgiYnVzX2NsayIsIEZSUUNSLCA4LCAweDBkYmYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfQjNdID0gRElWNCgiYjNfY2xrIiwgRlJRQ1IsIDQsIDB4MGRiNCwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIAlbRElWNF9QXSA9IERJVjQoInBlcmlwaGVyYWxfY2xrIiwgRlJRQ1IsIDAsIDB4MGRiZiwgMCksCi0JW0RJVjRfU0lVQV0gPSBESVY0KCJzaXVhX2NsayIsIFNDTEtBQ1IsIDAsIDB4MGRiZiwgMCksCi0JW0RJVjRfU0lVQl0gPSBESVY0KCJzaXViX2NsayIsIFNDTEtCQ1IsIDAsIDB4MGRiZiwgMCksCit9OworCitlbnVtIHsgRElWNF9JUkRBLCBESVY0X0VOQUJMRV9OUiB9OworCitzdHJ1Y3QgY2xrIGRpdjRfZW5hYmxlX2Nsa3NbRElWNF9FTkFCTEVfTlJdID0gewogCVtESVY0X0lSREFdID0gRElWNCgiaXJkYV9jbGsiLCBJUkRBQ0xLQ1IsIDAsIDB4MGRiZiwgMCksCiB9OwogCitlbnVtIHsgRElWNF9TSVVBLCBESVY0X1NJVUIsIERJVjRfUkVQQVJFTlRfTlIgfTsKKworc3RydWN0IGNsayBkaXY0X3JlcGFyZW50X2Nsa3NbRElWNF9SRVBBUkVOVF9OUl0gPSB7CisJW0RJVjRfU0lVQV0gPSBESVY0KCJzaXVhX2NsayIsIFNDTEtBQ1IsIDAsIDB4MGRiZiwgMCksCisJW0RJVjRfU0lVQl0gPSBESVY0KCJzaXViX2NsayIsIFNDTEtCQ1IsIDAsIDB4MGRiZiwgMCksCit9Owogc3RydWN0IGNsayBkaXY2X2Nsa3NbXSA9IHsKIAlTSF9DTEtfRElWNigidmlkZW9fY2xrIiwgJnBsbF9jbGssIFZDTEtDUiwgMCksCiB9OwpAQCAtMjE2LDYgKzIyOCwxNCBAQAogCQlyZXQgPSBzaF9jbGtfZGl2NF9yZWdpc3RlcihkaXY0X2Nsa3MsIERJVjRfTlIsICZkaXY0X3RhYmxlKTsKIAogCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9lbmFibGVfcmVnaXN0ZXIoZGl2NF9lbmFibGVfY2xrcywKKwkJCQkJRElWNF9FTkFCTEVfTlIsICZkaXY0X3RhYmxlKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9yZXBhcmVudF9yZWdpc3RlcihkaXY0X3JlcGFyZW50X2Nsa3MsCisJCQkJCURJVjRfUkVQQVJFTlRfTlIsICZkaXY0X3RhYmxlKTsKKworCWlmICghcmV0KQogCQlyZXQgPSBzaF9jbGtfZGl2Nl9yZWdpc3RlcihkaXY2X2Nsa3MsIEFSUkFZX1NJWkUoZGl2Nl9jbGtzKSk7CiAKIAlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyNC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMKaW5kZXggOWRiNzQzOC4uNjcwNzA2MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMKQEAgLTEyNywxMyArMTI3LDI4IEBACiAJJmRpdjNfY2xrLAogfTsKIAorc3RhdGljIHZvaWQgZGl2NF9raWNrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCisJLyogc2V0IEtJQ0sgYml0IGluIEZSUUNSQSB0byB1cGRhdGUgaGFyZHdhcmUgc2V0dGluZyAqLworCXZhbHVlID0gX19yYXdfcmVhZGwoRlJRQ1JBKTsKKwl2YWx1ZSB8PSAoMSA8PCAzMSk7CisJX19yYXdfd3JpdGVsKHZhbHVlLCBGUlFDUkEpOworfQorCiBzdGF0aWMgaW50IGRpdmlzb3JzW10gPSB7IDIsIDMsIDQsIDYsIDgsIDEyLCAxNiwgMCwgMjQsIDMyLCAzNiwgNDgsIDAsIDcyIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfdGFibGUgPSB7CitzdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X2Rpdl9tdWx0X3RhYmxlID0gewogCS5kaXZpc29ycyA9IGRpdmlzb3JzLAogCS5ucl9kaXZpc29ycyA9IEFSUkFZX1NJWkUoZGl2aXNvcnMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGtfZGl2NF90YWJsZSBkaXY0X3RhYmxlID0geworCS5kaXZfbXVsdF90YWJsZSA9ICZkaXY0X2Rpdl9tdWx0X3RhYmxlLAorCS5raWNrID0gZGl2NF9raWNrLAorfTsKKwogZW51bSB7IERJVjRfSSwgRElWNF9TSCwgRElWNF9CLCBESVY0X1AsIERJVjRfTTEsIERJVjRfTlIgfTsKIAogI2RlZmluZSBESVY0KF9zdHIsIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpIFwKQEAgLTE0NCw3ICsxNTksNyBAQAogCVtESVY0X1NIXSA9IERJVjQoInNoeXdheV9jbGsiLCBGUlFDUkEsIDEyLCAweDJmN2MsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfQl0gPSBESVY0KCJidXNfY2xrIiwgRlJRQ1JBLCA4LCAweDJmN2MsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfUF0gPSBESVY0KCJwZXJpcGhlcmFsX2NsayIsIEZSUUNSQSwgMCwgMHgyZjdjLCAwKSwKLQlbRElWNF9NMV0gPSBESVY0KCJ2cHVfY2xrIiwgRlJRQ1JCLCA0LCAweDJmN2MsIDApLAorCVtESVY0X00xXSA9IERJVjQoInZwdV9jbGsiLCBGUlFDUkIsIDQsIDB4MmY3YywgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIH07CiAKIHN0cnVjdCBjbGsgZGl2Nl9jbGtzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NTcuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc1Ny5jCmluZGV4IGRkYzIzNWMuLjg2YWFlNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc1Ny5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc1Ny5jCkBAIC0zNSw3ICszNSw3IEBACiAKIHN0YXRpYyB2b2lkIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gY3RybF9pbmwoRlJRQ1IpICYgMHgwMDAwMDAwZjsKKwlpbnQgaWR4ID0gX19yYXdfcmVhZGwoRlJRQ1IpICYgMHgwMDAwMDAwZjsKIAljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIHAxZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNDUsNyArNDUsNyBAQAogCiBzdGF0aWMgdm9pZCBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgPj4gOCkgJiAweDAwMDAwMDBmOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDgpICYgMHgwMDAwMDAwZjsKIAljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyB2b2lkIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW5sKEZSUUNSKSA+PiAyMCkgJiAweDAwMDAwMDBmOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDIwKSAmIDB4MDAwMDAwMGY7CiAJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNzgsNyArNzgsNyBAQAogCiBzdGF0aWMgdm9pZCBzaHl3YXlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgPj4gMTIpICYgMHgwMDAwMDAwZjsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiAxMikgJiAweDAwMDAwMDBmOwogCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gc2ZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc2My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzYzLmMKaW5kZXggMzcwY2Q0Ny4uOWY0MDExNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzYzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzYzLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gcDBmY19kaXZpc29yc1soY3RybF9pbmwoRlJRQ1IpID4+IDQpICYgMHgwN107CisJY2xrLT5yYXRlICo9IHAwZmNfZGl2aXNvcnNbKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiA0KSAmIDB4MDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzYzX21hc3Rlcl9jbGtfb3BzID0gewpAQCAtMzEsNyArMzEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDQpICYgMHgwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDQpICYgMHgwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcDBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC00MSw3ICs0MSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMTYpICYgMHgwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDE2KSAmIDB4MDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC02OCw3ICs2OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNoeXdheV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMjApICYgMHgwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDIwKSAmIDB4MDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGNmY19kaXZpc29yc1tpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NzAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc3MC5jCmluZGV4IGUwYjg5NjcuLjllMzM1NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc3MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc3MC5jCkBAIC0yMSw3ICsyMSw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1soY3RybF9pbmwoRlJRQ1IpID4+IDI4KSAmIDB4MDAwZl07CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1soX19yYXdfcmVhZGwoRlJRQ1IpID4+IDI4KSAmIDB4MDAwZl07CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3NzBfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC0zMCw3ICszMCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMjgpICYgMHgwMDBmKTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gMjgpICYgMHgwMDBmKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNDAsNyArNDAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgJiAweDAwMGYpOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpICYgMHgwMDBmKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBiZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNTAsNyArNTAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDI0KSAmIDB4MDAwZik7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDI0KSAmIDB4MDAwZik7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKaW5kZXggYTI0OWQ4Mi4uMTUwOTYzYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2N0cmxfaW5sKEZSUUNSKSAmIDB4MDAwM107CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tfX3Jhd19yZWFkbChGUlFDUikgJiAweDAwMDNdOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzgwX21hc3Rlcl9jbGtfb3BzID0gewpAQCAtMzEsNyArMzEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgJiAweDAwMDMpOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpICYgMHgwMDAzKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNDEsNyArNDEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDE2KSAmIDB4MDAwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDE2KSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gYmZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTUxLDcgKzUxLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiAyNCkgJiAweDAwMDEpOworCWludCBpZHggPSAoKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiAyNCkgJiAweDAwMDEpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC03NCw3ICs3NCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNoeXdheV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMjApICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gMjApICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBjZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODUuYwppbmRleCA3M2FiZmJmLi5kOTk3ZjBhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODUuYwpAQCAtNTcsMTEgKzU3LDE1IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGRpdjJbXSA9IHsgMSwgMiwgNCwgNiwgOCwgMTIsIDE2LCAxOCwKIAkJCSAgICAgICAyNCwgMzIsIDM2LCA0OCB9OwogCi1zdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X3RhYmxlID0geworc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKIAkuZGl2aXNvcnMgPSBkaXYyLAogCS5ucl9kaXZpc29ycyA9IEFSUkFZX1NJWkUoZGl2MiksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsa19kaXY0X3RhYmxlIGRpdjRfdGFibGUgPSB7CisJLmRpdl9tdWx0X3RhYmxlID0gJmRpdjRfZGl2X211bHRfdGFibGUsCit9OworCiBlbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9ERFIsIERJVjRfR0EsCiAJRElWNF9EVSwgRElWNF9QLCBESVY0X05SIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKaW5kZXggYTBlODg2OS4uYWY2OWZkNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKQEAgLTMsMTEgKzMsNyBAQAogICoKICAqIFNINzc4NiBzdXBwb3J0IGZvciB0aGUgY2xvY2sgZnJhbWV3b3JrCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgotICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgotICoKLSAqIEJhc2VkIG9uIFNINzc4NQotICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAxMCAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xNSwxMjcgKzExLDEyNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2ZyZXEuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotc3RhdGljIGludCBpZmNfZGl2aXNvcnNbXSA9IHsgMSwgMiwgNCwgMSB9Owotc3RhdGljIGludCBzZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgNCwgMSB9Owotc3RhdGljIGludCBiZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgMSwgMSwgMSwgMTIsIDE2LCAxLAotCQkJICAgICAyNCwgMzIsIDEsIDEsIDEsIDEsIDEsIDEgfTsKLXN0YXRpYyBpbnQgbWZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDQsIDEgfTsKLXN0YXRpYyBpbnQgcGZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDEsIDEsIDEsIDEsIDE2LCAxLAotCQkJICAgICAgMjQsIDMyLCAxLCA0OCwgMSwgMSwgMSwgMSB9OwotCi1zdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQotewotCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbY3RybF9pbmwoRlJRTVIxKSAmIDB4MDAwZl07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfbWFzdGVyX2Nsa19vcHMgPSB7Ci0JLmluaXQJCT0gbWFzdGVyX2Nsa19pbml0LAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCWludCBpZHggPSAoY3RybF9pbmwoRlJRTVIxKSAmIDB4MDAwZik7Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfbW9kdWxlX2Nsa19vcHMgPSB7Ci0JLnJlY2FsYwkJPSBtb2R1bGVfY2xrX3JlY2FsYywKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDE2KSAmIDB4MDAwZik7Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gYmZjX2Rpdmlzb3JzW2lkeF07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfYnVzX2Nsa19vcHMgPSB7Ci0JLnJlY2FsYwkJPSBidXNfY2xrX3JlY2FsYywKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDI4KSAmIDB4MDAwMyk7Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfY3B1X2Nsa19vcHMgPSB7Ci0JLnJlY2FsYwkJPSBjcHVfY2xrX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyAqc2g3Nzg2X2Nsa19vcHNbXSA9IHsKLQkmc2g3Nzg2X21hc3Rlcl9jbGtfb3BzLAotCSZzaDc3ODZfbW9kdWxlX2Nsa19vcHMsCi0JJnNoNzc4Nl9idXNfY2xrX29wcywKLQkmc2g3Nzg2X2NwdV9jbGtfb3BzLAotfTsKLQotdm9pZCBfX2luaXQgYXJjaF9pbml0X2Nsa19vcHMoc3RydWN0IGNsa19vcHMgKipvcHMsIGludCBpZHgpCi17Ci0JaWYgKGlkeCA8IEFSUkFZX1NJWkUoc2g3Nzg2X2Nsa19vcHMpKQotCQkqb3BzID0gc2g3Nzg2X2Nsa19vcHNbaWR4XTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2h5d2F5X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMjApICYgMHgwMDAzKTsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBzZmNfZGl2aXNvcnNbaWR4XTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9zaHl3YXlfY2xrX29wcyA9IHsKLQkucmVjYWxjCQk9IHNoeXdheV9jbGtfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2g3Nzg2X3NoeXdheV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNoeXdheV9jbGsiLAotCS5mbGFncwkJPSBDTEtfRU5BQkxFX09OX0lOSVQsCi0JLm9wcwkJPSAmc2g3Nzg2X3NoeXdheV9jbGtfb3BzLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZGRyX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMTIpICYgMHgwMDAzKTsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBtZmNfZGl2aXNvcnNbaWR4XTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9kZHJfY2xrX29wcyA9IHsKLQkucmVjYWxjCQk9IGRkcl9jbGtfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2g3Nzg2X2Rkcl9jbGsgPSB7Ci0JLm5hbWUJCT0gImRkcl9jbGsiLAotCS5mbGFncwkJPSBDTEtfRU5BQkxFX09OX0lOSVQsCi0JLm9wcwkJPSAmc2g3Nzg2X2Rkcl9jbGtfb3BzLAotfTsKIAogLyoKLSAqIEFkZGl0aW9uYWwgU0g3Nzg2LXNwZWNpZmljIG9uLWNoaXAgY2xvY2tzIHRoYXQgYXJlbid0IGFscmVhZHkgcGFydCBvZiB0aGUKLSAqIGNsb2NrIGZyYW1ld29yaworICogRGVmYXVsdCByYXRlIGZvciB0aGUgcm9vdCBpbnB1dCBjbG9jaywgcmVzZXQgdGhpcyB3aXRoIGNsa19zZXRfcmF0ZSgpCisgKiBmcm9tIHRoZSBwbGF0Zm9ybSBjb2RlLgogICovCi1zdGF0aWMgc3RydWN0IGNsayAqc2g3Nzg2X29uY2hpcF9jbG9ja3NbXSA9IHsKLQkmc2g3Nzg2X3NoeXdheV9jbGssCi0JJnNoNzc4Nl9kZHJfY2xrLAorc3RhdGljIHN0cnVjdCBjbGsgZXh0YWxfY2xrID0geworCS5uYW1lCQk9ICJleHRhbCIsCisJLmlkCQk9IC0xLAorCS5yYXRlCQk9IDMzMzMzMzMzLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGxsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IG11bHRpcGxpZXI7CisKKwkvKgorCSAqIENsb2NrIG1vZGVzIDAsIDEsIGFuZCAyIHVzZSBhbiB4NjQgbXVsdGlwbGllciBhZ2FpbnN0IFBMTDEsCisJICogd2hpbGUgbW9kZXMgMywgNCwgYW5kIDUgdXNlIGFuIHgzMi4KKwkgKi8KKwltdWx0aXBsaWVyID0gKHNoX212Lm12X21vZGVfcGlucygpICYgMHhmKSA8IDMgPyA2NCA6IDMyOworCisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlICogbXVsdGlwbGllcjsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHBsbF9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gcGxsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbF9jbGsgPSB7CisJLm5hbWUJCT0gInBsbF9jbGsiLAorCS5pZAkJPSAtMSwKKwkub3BzCQk9ICZwbGxfY2xrX29wcywKKwkucGFyZW50CQk9ICZleHRhbF9jbGssCisJLmZsYWdzCQk9IENMS19FTkFCTEVfT05fSU5JVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzW10gPSB7CisJJmV4dGFsX2NsaywKKwkmcGxsX2NsaywKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGl2MltdID0geyAxLCAyLCA0LCA2LCA4LCAxMiwgMTYsIDE4LAorCQkJICAgICAgIDI0LCAzMiwgMzYsIDQ4IH07CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CisJLmRpdmlzb3JzID0gZGl2MiwKKwkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdjIpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfZGl2NF90YWJsZSBkaXY0X3RhYmxlID0geworCS5kaXZfbXVsdF90YWJsZSA9ICZkaXY0X2Rpdl9tdWx0X3RhYmxlLAorfTsKKworZW51bSB7IERJVjRfSSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0REUiwgRElWNF9EVSwgRElWNF9QLCBESVY0X05SIH07CisKKyNkZWZpbmUgRElWNChfc3RyLCBfYml0LCBfbWFzaywgX2ZsYWdzKSBcCisgIFNIX0NMS19ESVY0KF9zdHIsICZwbGxfY2xrLCBGUlFNUjEsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpCisKK3N0cnVjdCBjbGsgZGl2NF9jbGtzW0RJVjRfTlJdID0geworCVtESVY0X1BdID0gRElWNCgicGVyaXBoZXJhbF9jbGsiLCAwLCAweDBiNDAsIDApLAorCVtESVY0X0RVXSA9IERJVjQoImR1X2NsayIsIDQsIDB4MDAxMCwgMCksCisJW0RJVjRfRERSXSA9IERJVjQoImRkcl9jbGsiLCAxMiwgMHgwMDAyLCBDTEtfRU5BQkxFX09OX0lOSVQpLAorCVtESVY0X0JdID0gRElWNCgiYnVzX2NsayIsIDE2LCAweDAzNjAsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfU0hdID0gRElWNCgic2h5d2F5X2NsayIsIDIwLCAweDAwMDIsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfSV0gPSBESVY0KCJjcHVfY2xrIiwgMjgsIDB4MDAwNiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKK307CisKKyNkZWZpbmUgTVNUUENSMAkJMHhmZmM0MDAzMAorI2RlZmluZSBNU1RQQ1IxCQkweGZmYzQwMDM0CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zdHBfY2xrc1tdID0geworCS8qIE1TVFBDUjAgKi8KKwlTSF9DTEtfTVNUUDMyKCJzY2lmX2ZjayIsIDUsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMjksIDApLAorCVNIX0NMS19NU1RQMzIoInNjaWZfZmNrIiwgNCwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyOCwgMCksCisJU0hfQ0xLX01TVFAzMigic2NpZl9mY2siLCAzLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDI3LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzY2lmX2ZjayIsIDIsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMjYsIDApLAorCVNIX0NMS19NU1RQMzIoInNjaWZfZmNrIiwgMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyNSwgMCksCisJU0hfQ0xLX01TVFAzMigic2NpZl9mY2siLCAwLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDI0LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzc2lfZmNrIiwgMywgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyMywgMCksCisJU0hfQ0xLX01TVFAzMigic3NpX2ZjayIsIDIsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMjIsIDApLAorCVNIX0NMS19NU1RQMzIoInNzaV9mY2siLCAxLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDIxLCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzc2lfZmNrIiwgMCwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyMCwgMCksCisJU0hfQ0xLX01TVFAzMigiaGFjX2ZjayIsIDEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMTcsIDApLAorCVNIX0NMS19NU1RQMzIoImhhY19mY2siLCAwLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDE2LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJpMmNfZmNrIiwgMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAxNSwgMCksCisJU0hfQ0xLX01TVFAzMigiaTJjX2ZjayIsIDAsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMTQsIDApLAorCVNIX0NMS19NU1RQMzIoInRtdTlfMTFfZmNrIiwgLTEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMTEsIDApLAorCVNIX0NMS19NU1RQMzIoInRtdTY3OF9mY2siLCAtMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAxMCwgMCksCisJU0hfQ0xLX01TVFAzMigidG11MzQ1X2ZjayIsIC0xLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDksIDApLAorCVNIX0NMS19NU1RQMzIoInRtdTAxMl9mY2siLCAtMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCA4LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzZGlmX2ZjayIsIDEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgNSwgMCksCisJU0hfQ0xLX01TVFAzMigic2RpZl9mY2siLCAwLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDQsIDApLAorCVNIX0NMS19NU1RQMzIoImhzcGlfZmNrIiwgLTEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMiwgMCksCisKKwkvKiBNU1RQQ1IxICovCisJU0hfQ0xLX01TVFAzMigidXNiX2ZjayIsIC0xLCBOVUxMLCBNU1RQQ1IxLCAxMiwgMCksCisJU0hfQ0xLX01TVFAzMigicGNpZV9mY2siLCAyLCBOVUxMLCBNU1RQQ1IxLCAxMCwgMCksCisJU0hfQ0xLX01TVFAzMigicGNpZV9mY2siLCAxLCBOVUxMLCBNU1RQQ1IxLCA5LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJwY2llX2ZjayIsIDAsIE5VTEwsIE1TVFBDUjEsIDgsIDApLAorCVNIX0NMS19NU1RQMzIoImRtYWNfMTFfNl9mY2siLCAtMSwgTlVMTCwgTVNUUENSMSwgNSwgMCksCisJU0hfQ0xLX01TVFAzMigiZG1hY181XzBfZmNrIiwgLTEsIE5VTEwsIE1TVFBDUjEsIDQsIDApLAorCVNIX0NMS19NU1RQMzIoImR1X2ZjayIsIC0xLCBOVUxMLCBNU1RQQ1IxLCAzLCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJldGhlcl9mY2siLCAtMSwgTlVMTCwgTVNUUENSMSwgMiwgMCksCiB9OwogCiBpbnQgX19pbml0IGFyY2hfY2xrX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CiAJaW50IGksIHJldCA9IDA7CiAKLQljcGdfY2xrX2luaXQoKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbGtzKTsgaSsrKQorCQlyZXQgfD0gY2xrX3JlZ2lzdGVyKGNsa3NbaV0pOwogCi0JY2xrID0gY2xrX2dldChOVUxMLCAibWFzdGVyX2NsayIpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNoNzc4Nl9vbmNoaXBfY2xvY2tzKTsgaSsrKSB7Ci0JCXN0cnVjdCBjbGsgKmNsa3AgPSBzaDc3ODZfb25jaGlwX2Nsb2Nrc1tpXTsKLQotCQljbGtwLT5wYXJlbnQgPSBjbGs7Ci0JCXJldCB8PSBjbGtfcmVnaXN0ZXIoY2xrcCk7Ci0JfQotCi0JY2xrX3B1dChjbGspOworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9yZWdpc3RlcihkaXY0X2Nsa3MsIEFSUkFZX1NJWkUoZGl2NF9jbGtzKSwKKwkJCQkJICAgJmRpdjRfdGFibGUpOworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfbXN0cDMyX3JlZ2lzdGVyKG1zdHBfY2xrcywgQVJSQVlfU0laRShtc3RwX2Nsa3MpKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaHgzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaHgzLmMKaW5kZXggMjNjMjdkMy4uZTc1YzU3YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2h4My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoeDMuYwpAQCAtMzMsNyArMzMsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbKGN0cmxfaW5sKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0tdOworCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0tdOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2h4M19tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTQyLDcgKzQyLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0spOworCWludCBpZHggPSAoKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0spOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01Miw3ICs1Miw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gQkZDX1BPUykgJiBCRkNfTVNLKTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gQkZDX1BPUykgJiBCRkNfTVNLKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBiZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNjIsNyArNjIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IElGQ19QT1MpICYgSUZDX01TSyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IElGQ19QT1MpICYgSUZDX01TSyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTg1LDcgKzg1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2h5d2F5X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiBDRkNfUE9TKSAmIENGQ19NU0spOworCWludCBpZHggPSAoKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiBDRkNfUE9TKSAmIENGQ19NU0spOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGNmY19kaXZpc29yc1tpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3NzIyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3NzIyLmMKaW5kZXggY2I5ZDA3Yi4uMDY4OGE3NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzcyMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3MjIuYwpAQCAtMjc4LDYgKzI3OCw3IEBACiAJSElaQThfTENEQywgSElaQThfSElaLAogCUhJWkE3X0xDREMsIEhJWkE3X0hJWiwKIAlISVpBNl9MQ0RDLCBISVpBNl9ISVosCisJSElaQjRfU0lVQSwgSElaQjRfSElaLAogCUhJWkIxX1ZJTywgSElaQjFfSElaLAogCUhJWkIwX1ZJTywgSElaQjBfSElaLAogCUhJWkMxNV9JUlE3LCBISVpDMTVfSElaLApAQCAtNTQ2LDcgKzU0Nyw3IEBACiAJUElOTVVYX0RBVEEoVklPX1ZEMl9NQVJLLCBQU0UzX1ZJTywgTVNFTEI5X1ZJTzIsCiAJCSAgICBISVpCMF9WSU8sIEZPRV9WSU9fVkQyKSwKIAlQSU5NVVhfREFUQShWSU9fSEQyX01BUkssIFBTRTNfVklPLCBNU0VMQjlfVklPMiwKLQkJICAgIEhJWkIxX1ZJTywgSElaQjFfVklPLCBGQ0VfVklPX0hEMiksCisJCSAgICBISVpCMV9WSU8sIEZDRV9WSU9fSEQyKSwKIAlQSU5NVVhfREFUQShWSU9fQ0xLMl9NQVJLLCBQU0UzX1ZJTywgTVNFTEI5X1ZJTzIsCiAJCSAgICBISVpCMV9WSU8sIEZSQl9WSU9fQ0xLMiksCiAKQEAgLTY1OCwxNCArNjU5LDE0IEBACiAJUElOTVVYX0RBVEEoU0RISUNMS19NQVJLLCBTREhJQ0xLKSwKIAogCS8qIFNJVSAtIFBvcnQgQSAqLwotCVBJTk1VWF9EQVRBKFNJVUFPTFJfTUFSSywgUFNDMTNfU0lVQU9MUiwgU0lVQU9MUl9TSU9GMV9TWU5DKSwKLQlQSU5NVVhfREFUQShTSVVBT0JUX01BUkssIFBTQzE0X1NJVUFPQlQsIFNJVUFPQlRfU0lPRjFfU0NLKSwKLQlQSU5NVVhfREFUQShTSVVBSVNMRF9NQVJLLCBQU0MxNV9TSVVBSVNMRCwgU0lVQUlTTERfU0lPRjFfUlhEKSwKLQlQSU5NVVhfREFUQShTSVVBSUxSX01BUkssIFBTQzExX1NJVUFJTFIsIFNJVUFJTFJfU0lPRjFfU1MyKSwKLQlQSU5NVVhfREFUQShTSVVBSUJUX01BUkssIFBTQzEyX1NJVUFJQlQsIFNJVUFJQlRfU0lPRjFfU1MxKSwKLQlQSU5NVVhfREFUQShTSVVBT1NMRF9NQVJLLCBQU0IwX1NJVUFPU0xELCBTSVVBT1NMRF9TSU9GMV9UWEQpLAotCVBJTk1VWF9EQVRBKFNJVU1DS0FfTUFSSywgUFNFMTFfU0lVTUNLQV9TSU9GMV9NQ0ssIFBTQjFfU0lVTUNLQSwgUFRLMCksCi0JUElOTVVYX0RBVEEoU0lVRkNLQV9NQVJLLCBQU0UxMV9TSVVGQ0tBLCBQVEswKSwKKwlQSU5NVVhfREFUQShTSVVBT0xSX01BUkssIFBTQzEzX1NJVUFPTFIsIEhJWkI0X1NJVUEsIFNJVUFPTFJfU0lPRjFfU1lOQyksCisJUElOTVVYX0RBVEEoU0lVQU9CVF9NQVJLLCBQU0MxNF9TSVVBT0JULCBISVpCNF9TSVVBLCBTSVVBT0JUX1NJT0YxX1NDSyksCisJUElOTVVYX0RBVEEoU0lVQUlTTERfTUFSSywgUFNDMTVfU0lVQUlTTEQsIEhJWkI0X1NJVUEsIFNJVUFJU0xEX1NJT0YxX1JYRCksCisJUElOTVVYX0RBVEEoU0lVQUlMUl9NQVJLLCBQU0MxMV9TSVVBSUxSLCBISVpCNF9TSVVBLCBTSVVBSUxSX1NJT0YxX1NTMiksCisJUElOTVVYX0RBVEEoU0lVQUlCVF9NQVJLLCBQU0MxMl9TSVVBSUJULCBISVpCNF9TSVVBLCBTSVVBSUJUX1NJT0YxX1NTMSksCisJUElOTVVYX0RBVEEoU0lVQU9TTERfTUFSSywgUFNCMF9TSVVBT1NMRCwgSElaQjRfU0lVQSwgU0lVQU9TTERfU0lPRjFfVFhEKSwKKwlQSU5NVVhfREFUQShTSVVNQ0tBX01BUkssIFBTRTExX1NJVU1DS0FfU0lPRjFfTUNLLCBISVpCNF9TSVVBLCBQU0IxX1NJVU1DS0EsIFBUSzApLAorCVBJTk1VWF9EQVRBKFNJVUZDS0FfTUFSSywgUFNFMTFfU0lVRkNLQSwgSElaQjRfU0lVQSwgUFRLMCksCiAKIAkvKiBTSVUgLSBQb3J0IEIgKi8KIAlQSU5NVVhfREFUQShTSVVCT0xSX01BUkssIFBTQjExX1NJVUJPTFIsIFNJT1NUUkIxX1NJVUJPTFIpLApAQCAtMTYxMiw3ICsxNjEzLDcgQEAKIAkJMCwgMCwKIAkJMCwgMCwKIAkJMCwgMCwKLQkJMCwgMCwKKwkJSElaQjRfU0lVQSwgSElaQjRfSElaLAogCQkwLCAwLAogCQkwLCAwLAogCQlISVpCMV9WSU8sIEhJWkIxX0hJWiwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKaW5kZXggYjUzMzViNS4uZWYzZjk3OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKQEAgLTQ0Niw2ICs0NDYsOCBAQAogCiBlbnVtIHsKIAlVTlVTRUQ9MCwKKwlFTkFCTEVELAorCURJU0FCTEVELAogCiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LApAQCAtNDYxLDcgKzQ2Myw2IEBACiAJU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0lPRjAsIFNJT0YxLCBTSU8sCiAJRkxDVExfRkxTVEVJLCBGTENUTF9GTEVOREksIEZMQ1RMX0ZMVFJFUTBJLCBGTENUTF9GTFRSRVExSSwKIAlJMkNfQUxJLCBJMkNfVEFDS0ksIEkyQ19XQUlUSSwgSTJDX0RURUksCi0JU0RISTAsIFNESEkxLCBTREhJMiwgU0RISTMsCiAJQ01ULCBUU0lGLCBTSVUsIFRXT0RHLAogCVRNVTAsIFRNVTEsIFRNVTIsCiAJSVJEQSwgSlBVLCBMQ0RDLApAQCAtNDk0LDggKzQ5NSw4IEBACiAJSU5UQ19WRUNUKEZMQ1RMX0ZMVFJFUTBJLCAweGRjMCksIElOVENfVkVDVChGTENUTF9GTFRSRVExSSwgMHhkZTApLAogCUlOVENfVkVDVChJMkNfQUxJLCAweGUwMCksIElOVENfVkVDVChJMkNfVEFDS0ksIDB4ZTIwKSwKIAlJTlRDX1ZFQ1QoSTJDX1dBSVRJLCAweGU0MCksIElOVENfVkVDVChJMkNfRFRFSSwgMHhlNjApLAotCUlOVENfVkVDVChTREhJMCwgMHhlODApLCBJTlRDX1ZFQ1QoU0RISTEsIDB4ZWEwKSwKLQlJTlRDX1ZFQ1QoU0RISTIsIDB4ZWMwKSwgSU5UQ19WRUNUKFNESEkzLCAweGVlMCksCisJSU5UQ19WRUNUKFNESEksIDB4ZTgwKSwgSU5UQ19WRUNUKFNESEksIDB4ZWEwKSwKKwlJTlRDX1ZFQ1QoU0RISSwgMHhlYzApLCBJTlRDX1ZFQ1QoU0RISSwgMHhlZTApLAogCUlOVENfVkVDVChDTVQsIDB4ZjAwKSwgSU5UQ19WRUNUKFRTSUYsIDB4ZjIwKSwKIAlJTlRDX1ZFQ1QoU0lVLCAweGY4MCksIElOVENfVkVDVChUV09ERywgMHhmYTApLAogCUlOVENfVkVDVChUTVUwLCAweDQwMCksIElOVENfVkVDVChUTVUxLCAweDQyMCksCkBAIC01MTMsNyArNTE0LDYgQEAKIAlJTlRDX0dST1VQKEZMQ1RMLCBGTENUTF9GTFNURUksIEZMQ1RMX0ZMRU5ESSwKIAkJICAgRkxDVExfRkxUUkVRMEksIEZMQ1RMX0ZMVFJFUTFJKSwKIAlJTlRDX0dST1VQKEkyQywgSTJDX0FMSSwgSTJDX1RBQ0tJLCBJMkNfV0FJVEksIEkyQ19EVEVJKSwKLQlJTlRDX0dST1VQKFNESEksIFNESEkwLCBTREhJMSwgU0RISTIsIFNESEkzKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBtYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC01MzUsNyArNTM1LDcgQEAKIAkgIHsgSTJDX0RURUksIEkyQ19XQUlUSSwgSTJDX1RBQ0tJLCBJMkNfQUxJLAogCSAgICBGTENUTF9GTFRSRVExSSwgRkxDVExfRkxUUkVRMEksIEZMQ1RMX0ZMRU5ESSwgRkxDVExfRkxTVEVJIH0gfSwKIAl7IDB4YTQwODAwYTAsIDB4YTQwODAwZTAsIDgsIC8qIElNUjggLyBJTUNSOCAqLwotCSAgeyBTREhJMywgU0RISTIsIFNESEkxLCBTREhJMCwgMCwgMCwgVFdPREcsIFNJVSB9IH0sCisJICB7IERJU0FCTEVELCBESVNBQkxFRCwgRU5BQkxFRCwgRU5BQkxFRCwgMCwgMCwgVFdPREcsIFNJVSB9IH0sCiAJeyAweGE0MDgwMGE0LCAweGE0MDgwMGU0LCA4LCAvKiBJTVI5IC8gSU1DUjkgKi8KIAkgIHsgMCwgMCwgMCwgQ01ULCAwLCBVU0JfVVNCSTEsIFVTQl9VU0JJMCwgfSB9LAogCXsgMHhhNDA4MDBhOCwgMHhhNDA4MDBlOCwgOCwgLyogSU1SMTAgLyBJTUNSMTAgKi8KQEAgLTU3Myw5ICs1NzMsMTMgQEAKIAkgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0NfQUNLKGludGNfZGVzYywgInNoNzcyMiIsIHZlY3RvcnMsIGdyb3VwcywKLQkJCSAgICAgbWFza19yZWdpc3RlcnMsIHByaW9fcmVnaXN0ZXJzLCBzZW5zZV9yZWdpc3RlcnMsCi0JCQkgICAgIGFja19yZWdpc3RlcnMpOworc3RhdGljIHN0cnVjdCBpbnRjX2Rlc2MgaW50Y19kZXNjIF9faW5pdGRhdGEgPSB7CisJLm5hbWUgPSAic2g3NzIyIiwKKwkuZm9yY2VfZW5hYmxlID0gRU5BQkxFRCwKKwkuZm9yY2VfZGlzYWJsZSA9IERJU0FCTEVELAorCS5odyA9IElOVENfSFdfREVTQyh2ZWN0b3JzLCBncm91cHMsIG1hc2tfcmVnaXN0ZXJzLAorCQkJICAgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywgYWNrX3JlZ2lzdGVycyksCit9OwogCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYwppbmRleCA3NzJiOTI2Li44NWM2MWY2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYwpAQCAtNTkyLDE0ICs1OTIsMTcgQEAKICNkZWZpbmUgUkFNQ1JfQ0FDSEVfTDJGQwkweDAwMDIKICNkZWZpbmUgUkFNQ1JfQ0FDSEVfTDJFCQkweDAwMDEKICNkZWZpbmUgTDJfQ0FDSEVfRU5BQkxFCQkoUkFNQ1JfQ0FDSEVfTDJFfFJBTUNSX0NBQ0hFX0wyRkMpCi12b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGwyX2NhY2hlX2luaXQodm9pZCkKKwordm9pZCBsMl9jYWNoZV9pbml0KHZvaWQpCiB7CiAJLyogRW5hYmxlIEwyIGNhY2hlICovCi0JY3RybF9vdXRsKEwyX0NBQ0hFX0VOQUJMRSwgUkFNQ1IpOworCV9fcmF3X3dyaXRlbChMMl9DQUNIRV9FTkFCTEUsIFJBTUNSKTsKIH0KIAogZW51bSB7CiAJVU5VU0VEPTAsCisJRU5BQkxFRCwKKwlESVNBQkxFRCwKIAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKQEAgLTYyMiw3ICs2MjUsNiBAQAogCVNDSUZBX1NDSUZBMSwKIAlGTENUTF9GTFNURUksRkxDVExfRkxURU5ESSxGTENUTF9GTFRSRVEwSSxGTENUTF9GTFRSRVExSSwKIAlJMkNfQUxJLEkyQ19UQUNLSSxJMkNfV0FJVEksSTJDX0RURUksCi0JU0RISTBfU0RISUkwLFNESEkwX1NESElJMSxTREhJMF9TREhJSTIsCiAJQ01UX0NNVEksCiAJVFNJRl9UU0lGSSwKIAlTSVVfU0lVSSwKQEAgLTYzMCw3ICs2MzIsNiBAQAogCVRNVTBfVFVOSTAsIFRNVTBfVFVOSTEsIFRNVTBfVFVOSTIsCiAJSVJEQV9JUkRBSSwKIAlBVEFQSV9BVEFQSUksCi0JU0RISTFfU0RISUkwLFNESEkxX1NESElJMSxTREhJMV9TREhJSTIsCiAJVkVVMkgxX1ZFVTJISSwKIAlMQ0RDX0xDRENJLAogCVRNVTFfVFVOSTAsVE1VMV9UVU5JMSxUTVUxX1RVTkkyLApAQCAtNzAxLDkgKzcwMiw5IEBACiAJSU5UQ19WRUNUKEkyQ19XQUlUSSwweEU0MCksCiAJSU5UQ19WRUNUKEkyQ19EVEVJLDB4RTYwKSwKIAotCUlOVENfVkVDVChTREhJMF9TREhJSTAsMHhFODApLAotCUlOVENfVkVDVChTREhJMF9TREhJSTEsMHhFQTApLAotCUlOVENfVkVDVChTREhJMF9TREhJSTIsMHhFQzApLAorCUlOVENfVkVDVChTREhJMCwgMHhFODApLAorCUlOVENfVkVDVChTREhJMCwgMHhFQTApLAorCUlOVENfVkVDVChTREhJMCwgMHhFQzApLAogCiAJSU5UQ19WRUNUKENNVF9DTVRJLDB4RjAwKSwKIAlJTlRDX1ZFQ1QoVFNJRl9UU0lGSSwweEYyMCksCkBAIC03MTcsOSArNzE4LDkgQEAKIAlJTlRDX1ZFQ1QoSVJEQV9JUkRBSSwweDQ4MCksCiAJSU5UQ19WRUNUKEFUQVBJX0FUQVBJSSwweDRBMCksCiAKLQlJTlRDX1ZFQ1QoU0RISTFfU0RISUkwLDB4NEUwKSwKLQlJTlRDX1ZFQ1QoU0RISTFfU0RISUkxLDB4NTAwKSwKLQlJTlRDX1ZFQ1QoU0RISTFfU0RISUkyLDB4NTIwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NEUwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NTAwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NTIwKSwKIAogCUlOVENfVkVDVChWRVUySDFfVkVVMkhJLDB4NTYwKSwKIAlJTlRDX1ZFQ1QoTENEQ19MQ0RDSSwweDU4MCksCkBAIC03MzgsMTUgKzczOSwxNCBAQAogCUlOVENfR1JPVVAoRkxDVEwsRkxDVExfRkxTVEVJLEZMQ1RMX0ZMVEVOREksRkxDVExfRkxUUkVRMEksRkxDVExfRkxUUkVRMUkpLAogCUlOVENfR1JPVVAoSTJDLEkyQ19BTEksSTJDX1RBQ0tJLEkyQ19XQUlUSSxJMkNfRFRFSSksCiAJSU5UQ19HUk9VUChfMkRHLCBfMkRHX1RSSSxfMkRHX0lOSSxfMkRHX0NFSSksCi0JSU5UQ19HUk9VUChTREhJMSwgU0RISTFfU0RISUkwLFNESEkxX1NESElJMSxTREhJMV9TREhJSTIpLAogCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLFJUQ19QUkksUlRDX0NVSSksCiAJSU5UQ19HUk9VUChETUFDMUIsIERNQUMxQl9ERUk0LERNQUMxQl9ERUk1LERNQUMxQl9EQURFUlIpLAotCUlOVENfR1JPVVAoU0RISTAsU0RISTBfU0RISUkwLFNESEkwX1NESElJMSxTREhJMF9TREhJSTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4YTQwODAwODAsIDB4YTQwODAwYzAsIDgsIC8qIElNUjAgLyBJTUNSMCAqLwotCSAgeyAwLCAgVE1VMV9UVU5JMixUTVUxX1RVTkkxLFRNVTFfVFVOSTAsMCxTREhJMV9TREhJSTIsU0RISTFfU0RISUkxLFNESEkxX1NESElJMH0gfSwKKwkgIHsgMCwgVE1VMV9UVU5JMiwgVE1VMV9UVU5JMSwgVE1VMV9UVU5JMCwKKwkgICAgMCwgRElTQUJMRUQsIEVOQUJMRUQsIEVOQUJMRUQgfSB9LAogCXsgMHhhNDA4MDA4NCwgMHhhNDA4MDBjNCwgOCwgLyogSU1SMSAvIElNQ1IxICovCiAJICB7IFZJT19WT1VJLCBWSU9fVkVVMkhJLFZJT19CRVVJLFZJT19DRVVJLERNQUMwQV9ERUkzLERNQUMwQV9ERUkyLERNQUMwQV9ERUkxLERNQUMwQV9ERUkwIH0gfSwKIAl7IDB4YTQwODAwODgsIDB4YTQwODAwYzgsIDgsIC8qIElNUjIgLyBJTUNSMiAqLwpAQCAtNzYzLDcgKzc2Myw4IEBACiAJICB7IEkyQ19EVEVJLCBJMkNfV0FJVEksIEkyQ19UQUNLSSwgSTJDX0FMSSwKIAkgICAgRkxDVExfRkxUUkVRMUksIEZMQ1RMX0ZMVFJFUTBJLCBGTENUTF9GTFRFTkRJLCBGTENUTF9GTFNURUkgfSB9LAogCXsgMHhhNDA4MDBhMCwgMHhhNDA4MDBlMCwgOCwgLyogSU1SOCAvIElNQ1I4ICovCi0JICB7IDAsU0RISTBfU0RISUkyLFNESEkwX1NESElJMSxTREhJMF9TREhJSTAsMCwwLFNDSUZBX1NDSUZBMixTSVVfU0lVSSB9IH0sCisJICB7IDAsIERJU0FCTEVELCBFTkFCTEVELCBFTkFCTEVELAorCSAgICAwLCAwLCBTQ0lGQV9TQ0lGQTIsIFNJVV9TSVVJIH0gfSwKIAl7IDB4YTQwODAwYTQsIDB4YTQwODAwZTQsIDgsIC8qIElNUjkgLyBJTUNSOSAqLwogCSAgeyAwLCAwLCAwLCBDTVRfQ01USSwgMCwgMCwgVVNCX1VTSTAsMCB9IH0sCiAJeyAweGE0MDgwMGE4LCAweGE0MDgwMGU4LCA4LCAvKiBJTVIxMCAvIElNQ1IxMCAqLwpAQCAtODAzLDkgKzgwNCwxMyBAQAogCSAgeyBJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQ19BQ0soaW50Y19kZXNjLCAic2g3NzIzIiwgdmVjdG9ycywgZ3JvdXBzLAotCQkJICAgICBtYXNrX3JlZ2lzdGVycywgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywKLQkJCSAgICAgYWNrX3JlZ2lzdGVycyk7CitzdGF0aWMgc3RydWN0IGludGNfZGVzYyBpbnRjX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkubmFtZSA9ICJzaDc3MjMiLAorCS5mb3JjZV9lbmFibGUgPSBFTkFCTEVELAorCS5mb3JjZV9kaXNhYmxlID0gRElTQUJMRUQsCisJLmh3ID0gSU5UQ19IV19ERVNDKHZlY3RvcnMsIGdyb3VwcywgbWFza19yZWdpc3RlcnMsCisJCQkgICBwcmlvX3JlZ2lzdGVycywgc2Vuc2VfcmVnaXN0ZXJzLCBhY2tfcmVnaXN0ZXJzKSwKK307CiAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCmluZGV4IGQzMmY5NmMuLjMxZTM0NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCkBAIC03MTQsMTQgKzcxNCwxNyBAQAogI2RlZmluZSBSQU1DUl9DQUNIRV9MMkZDCTB4MDAwMgogI2RlZmluZSBSQU1DUl9DQUNIRV9MMkUJCTB4MDAwMQogI2RlZmluZSBMMl9DQUNIRV9FTkFCTEUJCShSQU1DUl9DQUNIRV9MMkV8UkFNQ1JfQ0FDSEVfTDJGQykKLXZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgbDJfY2FjaGVfaW5pdCh2b2lkKQorCit2b2lkIGwyX2NhY2hlX2luaXQodm9pZCkKIHsKIAkvKiBFbmFibGUgTDIgY2FjaGUgKi8KLQljdHJsX291dGwoTDJfQ0FDSEVfRU5BQkxFLCBSQU1DUik7CisJX19yYXdfd3JpdGVsKEwyX0NBQ0hFX0VOQUJMRSwgUkFNQ1IpOwogfQogCiBlbnVtIHsKIAlVTlVTRUQgPSAwLAorCUVOQUJMRUQsCisJRElTQUJMRUQsCiAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCkBAIC03NTAsMTQgKzc1MywxMiBAQAogCUVUSEksCiAJSTJDMV9BTEksIEkyQzFfVEFDS0ksIEkyQzFfV0FJVEksIEkyQzFfRFRFSSwKIAlJMkMwX0FMSSwgSTJDMF9UQUNLSSwgSTJDMF9XQUlUSSwgSTJDMF9EVEVJLAotCVNESEkwX1NESElJMCwgU0RISTBfU0RISUkxLCBTREhJMF9TREhJSTIsIFNESEkwX1NESElJMywKIAlDTVQsCiAJVFNJRiwKIAlGU0ksCiAJU0NJRkE1LAogCVRNVTBfVFVOSTAsIFRNVTBfVFVOSTEsIFRNVTBfVFVOSTIsCiAJSVJEQSwKLQlTREhJMV9TREhJSTAsIFNESEkxX1NESElJMSwgU0RISTFfU0RISUkyLAogCUpQVSwKIAlfMkRETUFDLAogCU1NQ19NTUMySSwgTU1DX01NQzNJLApAQCAtODM5LDEwICs4NDAsMTAgQEAKIAlJTlRDX1ZFQ1QoSTJDMF9XQUlUSSwgMHhFNDApLAogCUlOVENfVkVDVChJMkMwX0RURUksIDB4RTYwKSwKIAotCUlOVENfVkVDVChTREhJMF9TREhJSTAsIDB4RTgwKSwKLQlJTlRDX1ZFQ1QoU0RISTBfU0RISUkxLCAweEVBMCksCi0JSU5UQ19WRUNUKFNESEkwX1NESElJMiwgMHhFQzApLAotCUlOVENfVkVDVChTREhJMF9TREhJSTMsIDB4RUUwKSwKKwlJTlRDX1ZFQ1QoU0RISTAsIDB4RTgwKSwKKwlJTlRDX1ZFQ1QoU0RISTAsIDB4RUEwKSwKKwlJTlRDX1ZFQ1QoU0RISTAsIDB4RUMwKSwKKwlJTlRDX1ZFQ1QoU0RISTAsIDB4RUUwKSwKIAogCUlOVENfVkVDVChDTVQsICAgIDB4RjAwKSwKIAlJTlRDX1ZFQ1QoVFNJRiwgICAweEYyMCksCkBAIC04NTUsOSArODU2LDkgQEAKIAogCUlOVENfVkVDVChJUkRBLCAgICAweDQ4MCksCiAKLQlJTlRDX1ZFQ1QoU0RISTFfU0RISUkwLCAweDRFMCksCi0JSU5UQ19WRUNUKFNESEkxX1NESElJMSwgMHg1MDApLAotCUlOVENfVkVDVChTREhJMV9TREhJSTIsIDB4NTIwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NEUwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NTAwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NTIwKSwKIAogCUlOVENfVkVDVChKUFUsIDB4NTYwKSwKIAlJTlRDX1ZFQ1QoXzJERE1BQywgMHg0QTApLApAQCAtODgzLDggKzg4NCw2IEBACiAJSU5UQ19HUk9VUChETUFDMEIsIERNQUMwQl9ERUk0LCBETUFDMEJfREVJNSwgRE1BQzBCX0RBREVSUiksCiAJSU5UQ19HUk9VUChJMkMwLCBJMkMwX0FMSSwgSTJDMF9UQUNLSSwgSTJDMF9XQUlUSSwgSTJDMF9EVEVJKSwKIAlJTlRDX0dST1VQKEkyQzEsIEkyQzFfQUxJLCBJMkMxX1RBQ0tJLCBJMkMxX1dBSVRJLCBJMkMxX0RURUkpLAotCUlOVENfR1JPVVAoU0RISTAsIFNESEkwX1NESElJMCwgU0RISTBfU0RISUkxLCBTREhJMF9TREhJSTIsIFNESEkwX1NESElJMyksCi0JSU5UQ19HUk9VUChTREhJMSwgU0RISTFfU0RISUkwLCBTREhJMV9TREhJSTEsIFNESEkxX1NESElJMiksCiAJSU5UQ19HUk9VUChTUFUsIFNQVV9TUFVJMCwgU1BVX1NQVUkxKSwKIAlJTlRDX0dST1VQKE1NQ0lGLCBNTUNfTU1DMkksIE1NQ19NTUMzSSksCiB9OwpAQCAtODkyLDcgKzg5MSw3IEBACiBzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewogCXsgMHhhNDA4MDA4MCwgMHhhNDA4MDBjMCwgOCwgLyogSU1SMCAvIElNQ1IwICovCiAJICB7IDAsIFRNVTFfVFVOSTIsIFRNVTFfVFVOSTEsIFRNVTFfVFVOSTAsCi0JICAgIDAsIFNESEkxX1NESElJMiwgU0RISTFfU0RISUkxLCBTREhJMV9TREhJSTAgfSB9LAorCSAgICAwLCBESVNBQkxFRCwgRU5BQkxFRCwgRU5BQkxFRCB9IH0sCiAJeyAweGE0MDgwMDg0LCAweGE0MDgwMGM0LCA4LCAvKiBJTVIxIC8gSU1DUjEgKi8KIAkgIHsgVklPX1ZPVSwgVklPX1ZFVTEsIFZJT19CRVUwLCBWSU9fQ0VVMCwKIAkgICAgRE1BQzBBX0RFSTMsIERNQUMwQV9ERUkyLCBETUFDMEFfREVJMSwgRE1BQzBBX0RFSTAgfSB9LApAQCAtOTE0LDcgKzkxMyw3IEBACiAJICB7IEkyQzBfRFRFSSwgSTJDMF9XQUlUSSwgSTJDMF9UQUNLSSwgSTJDMF9BTEksCiAJICAgIEkyQzFfRFRFSSwgSTJDMV9XQUlUSSwgSTJDMV9UQUNLSSwgSTJDMV9BTEkgfSB9LAogCXsgMHhhNDA4MDBhMCwgMHhhNDA4MDBlMCwgOCwgLyogSU1SOCAvIElNQ1I4ICovCi0JICB7IFNESEkwX1NESElJMywgU0RISTBfU0RISUkyLCBTREhJMF9TREhJSTEsIFNESEkwX1NESElJMCwKKwkgIHsgRElTQUJMRUQsIERJU0FCTEVELCBFTkFCTEVELCBFTkFCTEVELAogCSAgICAwLCAwLCBTQ0lGQTUsIEZTSSB9IH0sCiAJeyAweGE0MDgwMGE0LCAweGE0MDgwMGU0LCA4LCAvKiBJTVI5IC8gSU1DUjkgKi8KIAkgIHsgMCwgMCwgMCwgQ01ULCAwLCBVU0IxLCBVU0IwLCAwIH0gfSwKQEAgLTk2MSw5ICs5NjAsMTMgQEAKIAkgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0NfQUNLKGludGNfZGVzYywgInNoNzcyNCIsIHZlY3RvcnMsIGdyb3VwcywKLQkJCSAgICAgbWFza19yZWdpc3RlcnMsIHByaW9fcmVnaXN0ZXJzLCBzZW5zZV9yZWdpc3RlcnMsCi0JCQkgICAgIGFja19yZWdpc3RlcnMpOworc3RhdGljIHN0cnVjdCBpbnRjX2Rlc2MgaW50Y19kZXNjIF9faW5pdGRhdGEgPSB7CisJLm5hbWUgPSAic2g3NzI0IiwKKwkuZm9yY2VfZW5hYmxlID0gRU5BQkxFRCwKKwkuZm9yY2VfZGlzYWJsZSA9IERJU0FCTEVELAorCS5odyA9IElOVENfSFdfREVTQyh2ZWN0b3JzLCBncm91cHMsIG1hc2tfcmVnaXN0ZXJzLAorCQkJICAgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywgYWNrX3JlZ2lzdGVycyksCit9OwogCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzU3LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NTcuYwppbmRleCAzN2UzMmVmLi5lNzVlZGY1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NTcuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NTcuYwpAQCAtNDg3LDE3ICs0ODcsMTcgQEAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCiB7CiAJLyogZGlzYWJsZSBJUlEzLTAgKyBJUlE3LTQgKi8KLQljdHJsX291dGwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKKwlfX3Jhd193cml0ZWwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKIAogCS8qIGRpc2FibGUgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7Ci0JY3RybF9vdXRsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CisJX19yYXdfd3JpdGVsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7CisJX19yYXdfd3JpdGVsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CiAKIAkvKiBzZWxlY3QgSVJMIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCS8qIGRpc2FibGUgaG9sZGluZyBmdW5jdGlvbiwgaWUgZW5hYmxlICJTSC00IE1vZGUiICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwMjAwMDAwLCBJTlRDX0lDUjApOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDIwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIH0KQEAgLTUwNywzMiArNTA3LDMyIEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE3NjU0OgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDctNCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA0MDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDQwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxNDU2Nyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJRMzIxMDoKIAkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkwzLTAgKi8KLQkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwODAwMDAwLCBJTlRDX0lDUjApOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDA4MDAwMDAsIElOVENfSUNSMCk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTAxMjMpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTQ6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMDoKIAkJLyogZW5hYmxlIElSTDAtMyBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0X01BU0s6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybDQ1NjcpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTBfTUFTSzoKIAkJLyogZW5hYmxlIElSTDAtMyBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsMDEyMyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCmluZGV4IDZhYmEyNmYuLjdmNmIwYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCkBAIC01MzgsMTEgKzUzOCwxMSBAQAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKIAkvKiBkaXNhYmxlIElSUTctMCAqLwotCWN0cmxfb3V0bCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOworCV9fcmF3X3dyaXRlbCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOwogCiAJLyogZGlzYWJsZSBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKLQljdHJsX291dGwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKKwlfX3Jhd193cml0ZWwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIH0KQEAgLTU1MiwyNyArNTUyLDI3IEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE6CiAJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMMy0wICsgSVJMNy00ICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwYzAwMDAwLCBJTlRDX0lDUjApOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfaXJxX2Rlc2MpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTQ6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMDoKIAkJLyogZW5hYmxlIElSTDAtMyBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0X01BU0s6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19pcmw3NjU0X2Rlc2MpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTBfTUFTSzoKIAkJLyogZW5hYmxlIElSTDAtMyBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2lybDMyMTBfZGVzYyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NzAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jCmluZGV4IGMxNjQzYmMuLjg2ZDY4MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jCkBAIC02OTQsMTcgKzY5NCwxNyBAQAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKIAkvKiBkaXNhYmxlIElSUTctMCAqLwotCWN0cmxfb3V0bCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOworCV9fcmF3X3dyaXRlbCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOwogCiAJLyogZGlzYWJsZSBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKLQljdHJsX291dGwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKKwlfX3Jhd193cml0ZWwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKIAogCS8qIHNlbGVjdCBJUkwgbW9kZSBmb3IgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOwogCiAJLyogZGlzYWJsZSBob2xkaW5nIGZ1bmN0aW9uLCBpZSBlbmFibGUgIlNILTQgTW9kZSIgKi8KLQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDAyMDAwMDAsIElOVENfSUNSMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwMjAwMDAwLCBJTlRDX0lDUjApOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogfQpAQCAtNzE0LDI3ICs3MTQsMjcgQEAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIElSUV9NT0RFX0lSUToKIAkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkwzLTAgKyBJUkw3LTQgKi8KLQkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwYzAwMDAwLCBJTlRDX0lDUjApOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDBjMDAwMDAsIElOVENfSUNSMCk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19pcnFfZGVzYyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NDoKIAkJLyogZW5hYmxlIElSTDctNCBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwOgogCQkvKiBlbmFibGUgSVJMMC0zIGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTRfTUFTSzoKIAkJLyogZW5hYmxlIElSTDctNCBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2lybDc2NTRfZGVzYyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMF9NQVNLOgogCQkvKiBlbmFibGUgSVJMMC0zIGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfaXJsMzIxMF9kZXNjKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKaW5kZXggYzMxMDU1OC4uZjhmMjE2MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKQEAgLTQ2MSwxNyArNDYxLDE3IEBACiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQogewogCS8qIGRpc2FibGUgSVJRNy0wICovCi0JY3RybF9vdXRsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CisJX19yYXdfd3JpdGVsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CiAKIAkvKiBkaXNhYmxlIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOwotCWN0cmxfb3V0bCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOworCV9fcmF3X3dyaXRlbCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOworCV9fcmF3X3dyaXRlbCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOwogCiAJLyogc2VsZWN0IElSTCBtb2RlIGZvciBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CiAKIAkvKiBkaXNhYmxlIGhvbGRpbmcgZnVuY3Rpb24sIGllIGVuYWJsZSAiU0gtNCBNb2RlIiAqLwotCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDIwMDAwMCwgSU5UQ19JQ1IwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDAyMDAwMDAsIElOVENfSUNSMCk7CiAKIAlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7CiB9CkBAIC00ODEsMjcgKzQ4MSwyNyBAQAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgSVJRX01PREVfSVJROgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2lycV9kZXNjKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0OgogCQkvKiBlbmFibGUgSVJMNy00IGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTA6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NF9NQVNLOgogCQkvKiBlbmFibGUgSVJMNy00IGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfaXJsNzY1NF9kZXNjKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwX01BU0s6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19pcmwzMjEwX2Rlc2MpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwppbmRleCBmNjg1YjliLi4yMzQ0OGQ4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwpAQCAtNTQxLDE3ICs1NDEsMTcgQEAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCiB7CiAJLyogZGlzYWJsZSBJUlEzLTAgKyBJUlE3LTQgKi8KLQljdHJsX291dGwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKKwlfX3Jhd193cml0ZWwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKIAogCS8qIGRpc2FibGUgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7Ci0JY3RybF9vdXRsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CisJX19yYXdfd3JpdGVsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7CisJX19yYXdfd3JpdGVsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CiAKIAkvKiBzZWxlY3QgSVJMIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCS8qIGRpc2FibGUgaG9sZGluZyBmdW5jdGlvbiwgaWUgZW5hYmxlICJTSC00IE1vZGUiICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwMjAwMDAwLCBJTlRDX0lDUjApOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDIwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIH0KQEAgLTU2MSwzMiArNTYxLDMyIEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE3NjU0OgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDctNCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA0MDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDQwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxNDU2Nyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJRMzIxMDoKIAkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkwzLTAgKi8KLQkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwODAwMDAwLCBJTlRDX0lDUjApOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDA4MDAwMDAsIElOVENfSUNSMCk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTAxMjMpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTQ6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMDoKIAkJLyogZW5hYmxlIElSTDAtMyBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0X01BU0s6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybDQ1NjcpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTBfTUFTSzoKIAkJLyogZW5hYmxlIElSTDAtMyBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsMDEyMyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCmluZGV4IDcxNjczNDguLjdlNTg1MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCkBAIC04NjcsMTQgKzg2NywxNCBAQAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKIAkvKiBkaXNhYmxlIElSUTMtMCArIElSUTctNCAqLwotCWN0cmxfb3V0bCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOworCV9fcmF3X3dyaXRlbCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOwogCiAJLyogZGlzYWJsZSBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKLQljdHJsX291dGwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKKwlfX3Jhd193cml0ZWwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKIAogCS8qIHNlbGVjdCBJUkwgbW9kZSBmb3IgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogfQpAQCAtODg0LDMyICs4ODQsMzIgQEAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIElSUV9NT0RFX0lSUTc2NTQ6CiAJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMNy00ICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDQwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwNDAwMDAwLCBJTlRDX0lDUjApOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnE0NTY3KTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUlEzMjEwOgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDMtMCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA4MDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDgwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxMDEyMyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NDoKIAkJLyogZW5hYmxlIElSTDctNCBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwOgogCQkvKiBlbmFibGUgSVJMMC0zIGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTRfTUFTSzoKIAkJLyogZW5hYmxlIElSTDctNCBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsNDU2Nyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMF9NQVNLOgogCQkvKiBlbmFibGUgSVJMMC0zIGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmwwMTIzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NtcC1zaHgzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbXAtc2h4My5jCmluZGV4IDU4NjNlMGMuLjExYmY0YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NtcC1zaHgzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc21wLXNoeDMuYwpAQCAtNzgsNyArNzgsMTAgQEAKIAogdm9pZCBwbGF0X3N0YXJ0X2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGVudHJ5X3BvaW50KQogewotCV9fcmF3X3dyaXRlbChlbnRyeV9wb2ludCwgUkVTRVRfUkVHKGNwdSkpOworCWlmIChfX2luXzI5Yml0X21vZGUoKSkKKwkJX19yYXdfd3JpdGVsKGVudHJ5X3BvaW50LCBSRVNFVF9SRUcoY3B1KSk7CisJZWxzZQorCQlfX3Jhd193cml0ZWwodmlydF90b19waHlzKGVudHJ5X3BvaW50KSwgUkVTRVRfUkVHKGNwdSkpOwogCiAJaWYgKCEoX19yYXdfcmVhZGwoU1RCQ1JfUkVHKGNwdSkpICYgU1RCQ1JfTVNUUCkpCiAJCV9fcmF3X3dyaXRlbChTVEJDUl9NU1RQLCBTVEJDUl9SRUcoY3B1KSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS91YmMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3ViYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjI3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS91YmMuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9zaDRhL3ViYy5jCisgKgorICogT24tY2hpcCBVQkMgc3VwcG9ydCBmb3IgU0gtNEEgQ1BVcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDEwICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vaHdfYnJlYWtwb2ludC5oPgorCisjZGVmaW5lIFVCQ19DQlIoaWR4KQkoMHhmZjIwMDAwMCArICgweDIwICogaWR4KSkKKyNkZWZpbmUgVUJDX0NSUihpZHgpCSgweGZmMjAwMDA0ICsgKDB4MjAgKiBpZHgpKQorI2RlZmluZSBVQkNfQ0FSKGlkeCkJKDB4ZmYyMDAwMDggKyAoMHgyMCAqIGlkeCkpCisjZGVmaW5lIFVCQ19DQU1SKGlkeCkJKDB4ZmYyMDAwMGMgKyAoMHgyMCAqIGlkeCkpCisKKyNkZWZpbmUgVUJDX0NDTUZSCTB4ZmYyMDA2MDAKKyNkZWZpbmUgVUJDX0NCQ1IJMHhmZjIwMDYyMAorCisvKiBDUlIgKi8KKyNkZWZpbmUgVUJDX0NSUl9QQ0IJKDEgPDwgMSkKKyNkZWZpbmUgVUJDX0NSUl9CSUUJKDEgPDwgMCkKKworLyogQ0JSICovCisjZGVmaW5lIFVCQ19DQlJfQ0UJKDEgPDwgMCkKKworc3RhdGljIHN0cnVjdCBzaF91YmMgc2g0YV91YmM7CisKK3N0YXRpYyB2b2lkIHNoNGFfdWJjX2VuYWJsZShzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvLCBpbnQgaWR4KQoreworCV9fcmF3X3dyaXRlbChVQkNfQ0JSX0NFIHwgaW5mby0+bGVuIHwgaW5mby0+dHlwZSwgVUJDX0NCUihpZHgpKTsKKwlfX3Jhd193cml0ZWwoaW5mby0+YWRkcmVzcywgVUJDX0NBUihpZHgpKTsKK30KKworc3RhdGljIHZvaWQgc2g0YV91YmNfZGlzYWJsZShzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvLCBpbnQgaWR4KQoreworCV9fcmF3X3dyaXRlbCgwLCBVQkNfQ0JSKGlkeCkpOworCV9fcmF3X3dyaXRlbCgwLCBVQkNfQ0FSKGlkeCkpOworfQorCitzdGF0aWMgdm9pZCBzaDRhX3ViY19lbmFibGVfYWxsKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaDRhX3ViYy5udW1fZXZlbnRzOyBpKyspCisJCWlmIChtYXNrICYgKDEgPDwgaSkpCisJCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoVUJDX0NCUihpKSkgfCBVQkNfQ0JSX0NFLAorCQkJCSAgICAgVUJDX0NCUihpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoNGFfdWJjX2Rpc2FibGVfYWxsKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2g0YV91YmMubnVtX2V2ZW50czsgaSsrKQorCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoVUJDX0NCUihpKSkgJiB+VUJDX0NCUl9DRSwKKwkJCSAgICAgVUJDX0NCUihpKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNoNGFfdWJjX2FjdGl2ZV9tYXNrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBhY3RpdmUgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNoNGFfdWJjLm51bV9ldmVudHM7IGkrKykKKwkJaWYgKF9fcmF3X3JlYWRsKFVCQ19DQlIoaSkpICYgVUJDX0NCUl9DRSkKKwkJCWFjdGl2ZSB8PSAoMSA8PCBpKTsKKworCXJldHVybiBhY3RpdmU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNoNGFfdWJjX3RyaWdnZXJlZF9tYXNrKHZvaWQpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKFVCQ19DQ01GUik7Cit9CisKK3N0YXRpYyB2b2lkIHNoNGFfdWJjX2NsZWFyX3RyaWdnZXJlZF9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoVUJDX0NDTUZSKSAmIH5tYXNrLCBVQkNfQ0NNRlIpOworfQorCitzdGF0aWMgc3RydWN0IHNoX3ViYyBzaDRhX3ViYyA9IHsKKwkubmFtZQkJCT0gIlNILTRBIiwKKwkubnVtX2V2ZW50cwkJPSAyLAorCS50cmFwX25yCQk9IDB4MWUwLAorCS5lbmFibGUJCQk9IHNoNGFfdWJjX2VuYWJsZSwKKwkuZGlzYWJsZQkJPSBzaDRhX3ViY19kaXNhYmxlLAorCS5lbmFibGVfYWxsCQk9IHNoNGFfdWJjX2VuYWJsZV9hbGwsCisJLmRpc2FibGVfYWxsCQk9IHNoNGFfdWJjX2Rpc2FibGVfYWxsLAorCS5hY3RpdmVfbWFzawkJPSBzaDRhX3ViY19hY3RpdmVfbWFzaywKKwkudHJpZ2dlcmVkX21hc2sJCT0gc2g0YV91YmNfdHJpZ2dlcmVkX21hc2ssCisJLmNsZWFyX3RyaWdnZXJlZF9tYXNrCT0gc2g0YV91YmNfY2xlYXJfdHJpZ2dlcmVkX21hc2ssCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaDRhX3ViY19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqdWJjX2ljbGsgPSBjbGtfZ2V0KE5VTEwsICJ1YmMwIik7CisJaW50IGk7CisKKwkvKgorCSAqIFRoZSBVQkMgTVNUUCBiaXQgaXMgb3B0aW9uYWwsIGFzIG5vdCBhbGwgcGxhdGZvcm1zIHdpbGwgaGF2ZQorCSAqIGl0LiBKdXN0IGlnbm9yZSBpdCBpZiB3ZSBjYW4ndCBmaW5kIGl0LgorCSAqLworCWlmIChJU19FUlIodWJjX2ljbGspKQorCQl1YmNfaWNsayA9IE5VTEw7CisKKwljbGtfZW5hYmxlKHViY19pY2xrKTsKKworCV9fcmF3X3dyaXRlbCgwLCBVQkNfQ0JDUik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2g0YV91YmMubnVtX2V2ZW50czsgaSsrKSB7CisJCV9fcmF3X3dyaXRlbCgwLCBVQkNfQ0FNUihpKSk7CisJCV9fcmF3X3dyaXRlbCgwLCBVQkNfQ0JSKGkpKTsKKworCQlfX3Jhd193cml0ZWwoVUJDX0NSUl9CSUUgfCBVQkNfQ1JSX1BDQiwgVUJDX0NSUihpKSk7CisKKwkJLyogZHVtbXkgcmVhZCBmb3Igd3JpdGUgcG9zdGluZyAqLworCQkodm9pZClfX3Jhd19yZWFkbChVQkNfQ1JSKGkpKTsKKwl9CisKKwljbGtfZGlzYWJsZSh1YmNfaWNsayk7CisKKwlzaDRhX3ViYy5jbGsgPSB1YmNfaWNsazsKKworCXJldHVybiByZWdpc3Rlcl9zaF91YmMoJnNoNGFfdWJjKTsKK30KK2FyY2hfaW5pdGNhbGwoc2g0YV91YmNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2Nsb2NrLXNoNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYwppbmRleCA3Zjg2NGViLi45Y2ZjMTliIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2Nsb2NrLXNoNS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvY2xvY2stc2g1LmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW5sKGNwcmNfYmFzZSArIDB4MDApID4+IDYpICYgMHgwMDA3OworCWludCBpZHggPSAoX19yYXdfcmVhZGwoY3ByY19iYXNlICsgMHgwMCkgPj4gNikgJiAweDAwMDc7CiAJY2xrLT5yYXRlICo9IGlmY190YWJsZVtpZHhdOwogfQogCkBAIC0zNCw3ICszNCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KGNwcmNfYmFzZSkgPj4gMTIpICYgMHgwMDA3OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoY3ByY19iYXNlKSA+PiAxMikgJiAweDAwMDc7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX3RhYmxlW2lkeF07CiB9CiAKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoY3ByY19iYXNlKSA+PiAzKSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KGNwcmNfYmFzZSkgPj4gMykgJiAweDAwMDc7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX3RhYmxlW2lkeF07CiB9CiAKQEAgLTU0LDcgKzU0LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoY3ByY19iYXNlKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhjcHJjX2Jhc2UpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfdGFibGVbaWR4XTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9lbnRyeS5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9lbnRyeS5TCmluZGV4IDhmMTNmNzMuLjZiODAyOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZW50cnkuUworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2VudHJ5LlMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCS5yZXB0IDYKIAkJLmxvbmcgZG9fZXhjZXB0aW9uX2Vycm9yCS8qIDB4ODgwIC0gMHg5MjAgKi8KIAkuZW5kcgotCS5sb25nCWRvX3NvZnR3YXJlX2JyZWFrX3BvaW50CS8qIDB4OTQwICovCisJLmxvbmcJYnJlYWtwb2ludF90cmFwX2hhbmRsZXIJLyogMHg5NDAgKi8KIAkubG9uZwlkb19leGNlcHRpb25fZXJyb3IJCS8qIDB4OTYwICovCiAJLmxvbmcJZG9fc2luZ2xlX3N0ZXAJCS8qIDB4OTgwICovCiAKQEAgLTExMjQsNyArMTEyNCw3IEBACiAJcHRhCWl0c19JUlEsIHRyMAogCWJlcWkvbAlyNCwgRVZFTlRfSU5URVJSVVBULCB0cjAKICNpZmRlZiBDT05GSUdfU0hfRlBVCi0JbW92aQlkb19mcHVfc3RhdGVfcmVzdG9yZSwgcjYKKwltb3ZpCWZwdV9zdGF0ZV9yZXN0b3JlX3RyYXBfaGFuZGxlciwgcjYKICNlbHNlCiAJbW92aQlkb19leGNlcHRpb25fZXJyb3IsIHI2CiAjZW5kaWYKQEAgLTExMzUsNyArMTEzNSw3IEBACiAJcHRhCWl0c19JUlEsIHRyMAogCWJlcWkvbAlyNCwgRVZFTlRfSU5URVJSVVBULCB0cjAKICNpZmRlZiBDT05GSUdfU0hfRlBVCi0JbW92aQlkb19mcHVfc3RhdGVfcmVzdG9yZSwgcjYKKwltb3ZpCWZwdV9zdGF0ZV9yZXN0b3JlX3RyYXBfaGFuZGxlciwgcjYKICNlbHNlCiAJbW92aQlkb19leGNlcHRpb25fZXJyb3IsIHI2CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZnB1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2ZwdS5jCmluZGV4IDQ2NDhjY2UuLjRiM2JiMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZnB1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9mcHUuYwpAQCAtMTUsMjQgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vdXNlci5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9mcHUuaD4KLQotLyoKLSAqIEluaXRpYWxseSBsb2FkIHRoZSBGUFUgd2l0aCBzaWduYWxsaW5nIE5BTlMuICBUaGlzIGJpdCBwYXR0ZXJuCi0gKiBoYXMgdGhlIHByb3BlcnR5IHRoYXQgbm8gbWF0dGVyIHdoZXRoZXIgY29uc2lkZXJlZCBhcyBzaW5nbGUgb3IgYXMKLSAqIGRvdWJsZSBwcmVjaXNpb24sIGl0IHN0aWxsIHJlcHJlc2VudHMgYSBzaWduYWxsaW5nIE5BTi4KLSAqLwotI2RlZmluZSBzTkFONjQJCTB4RkZGRkZGRkZGRkZGRkZGRlVMTAotI2RlZmluZSBzTkFOMzIJCTB4RkZGRkZGRkZVTAotCi1zdGF0aWMgdW5pb24gc2hfZnB1X3VuaW9uIGluaXRfZnB1cmVncyA9IHsKLQkuaGFyZCA9IHsKLQkJLmZwX3JlZ3MgPSB7IFswIC4uLiA2M10gPSBzTkFOMzIgfSwKLQkJLmZwc2NyID0gRlBTQ1JfSU5JVAotCX0KLX07CiAKIHZvaWQgc2F2ZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CkBAIC03MiwxMiArNTQsMTEgQEAKIAkJICAgICAiZmdldHNjciAgIGZyNjNcblx0IgogCQkgICAgICJmc3QucyAgICAgJTAsICgzMio4KSwgZnI2M1xuXHQiCiAJCTogLyogbm8gb3V0cHV0ICovCi0JCTogInIiICgmdHNrLT50aHJlYWQuZnB1LmhhcmQpCisJCTogInIiICgmdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1KQogCQk6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1mcGxvYWQoc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCAqZnByZWdzKQordm9pZCByZXN0b3JlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlhc20gdm9sYXRpbGUoImZsZC5wICAgICAlMCwgKDAqOCksIGZwMFxuXHQiCiAJCSAgICAgImZsZC5wICAgICAlMCwgKDEqOCksIGZwMlxuXHQiCkBAIC0xMTYsMTYgKzk3LDExIEBACiAKIAkJICAgICAiZmxkLnAgICAgICUwLCAoMzEqOCksIGZwNjJcblx0IgogCQk6IC8qIG5vIG91dHB1dCAqLwotCQk6ICJyIiAoZnByZWdzKSApOworCQk6ICJyIiAoJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSkKKwkJOiAibWVtb3J5Iik7CiB9CiAKLXZvaWQgZnBpbml0KHN0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QgKmZwcmVncykKLXsKLQkqZnByZWdzID0gaW5pdF9mcHVyZWdzLmhhcmQ7Ci19Ci0KLWFzbWxpbmthZ2Ugdm9pZAotZG9fZnB1X2Vycm9yKHVuc2lnbmVkIGxvbmcgZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSB2b2lkIGRvX2ZwdV9lcnJvcih1bnNpZ25lZCBsb25nIGV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAKQEAgLTEzMywzNSArMTA5LDYgQEAKIAogCXRzay0+dGhyZWFkLnRyYXBfbm8gPSAxMTsKIAl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gMDsKKwogCWZvcmNlX3NpZyhTSUdGUEUsIHRzayk7CiB9Ci0KLQotYXNtbGlua2FnZSB2b2lkCi1kb19mcHVfc3RhdGVfcmVzdG9yZSh1bnNpZ25lZCBsb25nIGV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl2b2lkIGRpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycik7Ci0KLQlpZiAoISB1c2VyX21vZGUocmVncykpCi0JCWRpZSgiRlBVIHVzZWQgaW4ga2VybmVsIiwgcmVncywgZXgpOwotCi0JcmVncy0+c3IgJj0gflNSX0ZEOwotCi0JaWYgKGxhc3RfdGFza191c2VkX21hdGggPT0gY3VycmVudCkKLQkJcmV0dXJuOwotCi0JZW5hYmxlX2ZwdSgpOwotCWlmIChsYXN0X3Rhc2tfdXNlZF9tYXRoICE9IE5VTEwpCi0JCS8qIE90aGVyIHByb2Nlc3NlcyBmcHUgc3RhdGUsIHNhdmUgYXdheSAqLwotCQlzYXZlX2ZwdShsYXN0X3Rhc2tfdXNlZF9tYXRoKTsKLQotICAgICAgICBsYXN0X3Rhc2tfdXNlZF9tYXRoID0gY3VycmVudDsKLSAgICAgICAgaWYgKHVzZWRfbWF0aCgpKSB7Ci0gICAgICAgICAgICAgICAgZnBsb2FkKCZjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQpOwotICAgICAgICB9IGVsc2UgewotCQkvKiBGaXJzdCB0aW1lIEZQVSB1c2VyLiAgKi8KLQkJZnBsb2FkKCZpbml0X2ZwdXJlZ3MuaGFyZCk7Ci0gICAgICAgICAgICAgICAgc2V0X3VzZWRfbWF0aCgpOwotICAgICAgICB9Ci0JZGlzYWJsZV9mcHUoKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtLmMKaW5kZXggY2EwMjlhNC4uZTU1OTY4NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtLmMKQEAgLTMzLDcgKzMzLDggQEAKICNkZWZpbmUgU1VTUF9NT0RFX1NMRUVQCQkoU1VTUF9TSF9TTEVFUCkKICNkZWZpbmUgU1VTUF9NT0RFX1NMRUVQX1NGCShTVVNQX1NIX1NMRUVQIHwgU1VTUF9TSF9TRikKICNkZWZpbmUgU1VTUF9NT0RFX1NUQU5EQllfU0YJKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YpCi0jZGVmaW5lIFNVU1BfTU9ERV9SU1RBTkRCWQkoU1VTUF9TSF9SU1RBTkRCWSB8IFNVU1BfU0hfTU1VIHwgU1VTUF9TSF9TRikKKyNkZWZpbmUgU1VTUF9NT0RFX1JTVEFOREJZX1NGIFwKKwkoU1VTUF9TSF9SU1RBTkRCWSB8IFNVU1BfU0hfTU1VIHwgU1VTUF9TSF9SRUdTIHwgU1VTUF9TSF9TRikKICAvKgogICAqIFUtc3RhbmRieSBtb2RlIGlzIHVuc3VwcG9ydGVkIHNpbmNlIGl0IG5lZWRzIGJvb3Rsb2FkZXIgaGFja3MKICAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9zbGVlcC5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMKaW5kZXggZTlkZDdmYS4uZTZhYWM2NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMKQEAgLTQ4LDggKzQ4LDQ4IEBACiAJc3RjCXNyLCByMAogCW1vdi5sCXIwLCBAKFNIX1NMRUVQX1NSLCByNSkKIAotCS8qIHNhdmUgc3AgKi8KKwkvKiBzYXZlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgdG8gc3RhY2sgaWYgbmVlZGVkICovCisJbW92LmwJQChTSF9TTEVFUF9NT0RFLCByNSksIHIwCisJdHN0CSNTVVNQX1NIX1JFR1MsIHIwCisJYnQJc2tpcF9yZWdzX3NhdmUKKworCXN0cy5sCXByLCBALXIxNQorCW1vdi5sCXIxNCwgQC1yMTUKKwltb3YubAlyMTMsIEAtcjE1CisJbW92LmwJcjEyLCBALXIxNQorCW1vdi5sCXIxMSwgQC1yMTUKKwltb3YubAlyMTAsIEAtcjE1CisJbW92LmwJcjksIEAtcjE1CisJbW92LmwJcjgsIEAtcjE1CisKKwkvKiBtYWtlIHN1cmUgYmFuazAgaXMgc2VsZWN0ZWQsIHNhdmUgbG93IHJlZ2lzdGVycyAqLworCW1vdi5sCXJiX2JpdCwgcjkKKwlub3QJcjksIHI5CisJYnNyCXNldF9zcgorCSBtb3YJIzAsIHIxMAorCisJYnNyCXNhdmVfbG93X3JlZ3MKKwkgbm9wCisKKwkvKiBzd2l0Y2ggdG8gYmFuayAxLCBzYXZlIGxvdyByZWdpc3RlcnMgKi8KKwltb3YubAlyYl9iaXQsIHIxMAorCWJzcglzZXRfc3IKKwkgbW92CSMtMSwgcjkKKworCWJzcglzYXZlX2xvd19yZWdzCisJIG5vcAorCisJLyogc3dpdGNoIGJhY2sgdG8gYmFuayAwICovCisJbW92LmwJcmJfYml0LCByOQorCW5vdAlyOSwgcjkKKwlic3IJc2V0X3NyCisJIG1vdgkjMCwgcjEwCisKK3NraXBfcmVnc19zYXZlOgorCisJLyogc2F2ZSBzcCwgYWxzbyBzZXQgdG8gaW50ZXJuYWwgcmFtICovCiAJbW92LmwJcjE1LCBAKFNIX1NMRUVQX1NQLCByNSkKKwltb3YJcjUsIHIxNQogCiAJLyogc2F2ZSBzdGJjciAqLwogCWJzciAgICAgc2F2ZV9yZWdpc3RlcgpAQCAtNjAsNyArMTAwLDcgQEAKIAl0c3QJI1NVU1BfU0hfTU1VLCByMAogCWJ0CXNraXBfbW11X3NhdmVfZGlzYWJsZQogCi0gICAgICAgLyogc2F2ZSBtbXUgc3RhdGUgKi8KKwkvKiBzYXZlIG1tdSBzdGF0ZSAqLwogCWJzcglzYXZlX3JlZ2lzdGVyCiAJIG1vdgkjU0hfU0xFRVBfUkVHX1BURUgsIHIwCiAKQEAgLTE3Nyw2ICsyMTcsMjkgQEAKIAltb3YubAlAKHIwLCByNSksIHIwCiAJcnRzCiAJIG5vcAorCitzZXRfc3I6CisJc3RjCXNyLCByOAorCWFuZAlyOSwgcjgKKwlvcglyMTAsIHI4CisJbGRjCXI4LCBzcgorCXJ0cworCSBub3AKKworc2F2ZV9sb3dfcmVnczoKKwltb3YubAlyNywgQC1yMTUKKwltb3YubAlyNiwgQC1yMTUKKwltb3YubAlyNSwgQC1yMTUKKwltb3YubAlyNCwgQC1yMTUKKwltb3YubAlyMywgQC1yMTUKKwltb3YubAlyMiwgQC1yMTUKKwltb3YubAlyMSwgQC1yMTUKKwlydHMKKwkgbW92LmwJcjAsIEAtcjE1CisKKwkuYmFsaWduIDQKK3JiX2JpdDoJLmxvbmcJMHgyMDAwMDAwMCAhIFJCPTEKKwogRU5UUlkoc2hfbW9iaWxlX3NsZWVwX2VudGVyX2VuZCkKIAogCS5iYWxpZ24gNApAQCAtMjcwLDYgKzMzMyw0MCBAQAogCWljYmkJQHIwCiAKIHNraXBfcmVzdG9yZV9tbXU6CisKKwkvKiByZXN0b3JlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgaWYgbmVlZGVkICovCisJbW92LmwJQChTSF9TTEVFUF9NT0RFLCByNSksIHIwCisJdHN0CSNTVVNQX1NIX1JFR1MsIHIwCisJYnQJc2tpcF9yZXN0b3JlX3JlZ3MKKworCS8qIHN3aXRjaCB0byBiYW5rIDEsIHJlc3RvcmUgbG93IHJlZ2lzdGVycyAqLworCW1vdi5sCV9yYl9iaXQsIHIxMAorCWJzcglfc2V0X3NyCisJIG1vdgkjLTEsIHI5CisKKwlic3IJcmVzdG9yZV9sb3dfcmVncworCSBub3AKKworCS8qIHN3aXRjaCB0byBiYW5rMCwgcmVzdG9yZSBsb3cgcmVnaXN0ZXJzICovCisJbW92LmwJX3JiX2JpdCwgcjkKKwlub3QJcjksIHI5CisJYnNyCV9zZXRfc3IKKwkgbW92CSMwLCByMTAKKworCWJzcglyZXN0b3JlX2xvd19yZWdzCisJIG5vcAorCisJLyogcmVzdG9yZSB0aGUgcmVzdCBvZiB0aGUgcmVnaXN0ZXJzICovCisJbW92LmwJQHIxNSssIHI4CisJbW92LmwJQHIxNSssIHI5CisJbW92LmwJQHIxNSssIHIxMAorCW1vdi5sCUByMTUrLCByMTEKKwltb3YubAlAcjE1KywgcjEyCisJbW92LmwJQHIxNSssIHIxMworCW1vdi5sCUByMTUrLCByMTQKKwlsZHMubAlAcjE1KywgcHIKKworc2tpcF9yZXN0b3JlX3JlZ3M6CiAJcnRlCiAJIG5vcAogCkBAIC0yODMsNiArMzgwLDI2IEBACiAJcnRzCiAJIG5vcAogCitfc2V0X3NyOgorCXN0YwlzciwgcjgKKwlhbmQJcjksIHI4CisJb3IJcjEwLCByOAorCWxkYwlyOCwgc3IKKwlydHMKKwkgbm9wCisKK3Jlc3RvcmVfbG93X3JlZ3M6CisJbW92LmwJQHIxNSssIHIwCisJbW92LmwJQHIxNSssIHIxCisJbW92LmwJQHIxNSssIHIyCisJbW92LmwJQHIxNSssIHIzCisJbW92LmwJQHIxNSssIHI0CisJbW92LmwJQHIxNSssIHI1CisJbW92LmwJQHIxNSssIHI2CisJcnRzCisJIG1vdi5sCUByMTUrLCByNworCiAJLmJhbGlnbiA0CitfcmJfYml0OgkubG9uZwkweDIwMDAwMDAwICEgUkI9MQogMToJLmxvbmcJfjB4N2ZmCiBFTlRSWShzaF9tb2JpbGVfc2xlZXBfcmVzdW1lX2VuZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2RlYnVndHJhcHMuUyBiL2FyY2gvc2gva2VybmVsL2RlYnVndHJhcHMuUwppbmRleCA1OTE3NDEzLi43YTFiNDZmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9kZWJ1Z3RyYXBzLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZGVidWd0cmFwcy5TCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiAjaWYgIWRlZmluZWQoQ09ORklHX0tHREIpCi0jZGVmaW5lIGJyZWFrcG9pbnRfdHJhcF9oYW5kbGVyCQlkZWJ1Z190cmFwX2hhbmRsZXIKICNkZWZpbmUgc2luZ2xlc3RlcF90cmFwX2hhbmRsZXIJCWRlYnVnX3RyYXBfaGFuZGxlcgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2R3YXJmLmMgYi9hcmNoL3NoL2tlcm5lbC9kd2FyZi5jCmluZGV4IDM1NzZiNzAuLmJkMWM0OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2R3YXJmLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYwpAQCAtMzksMTAgKzM5LDEwIEBACiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmR3YXJmX3JlZ19jYWNoZXA7CiBzdGF0aWMgbWVtcG9vbF90ICpkd2FyZl9yZWdfcG9vbDsKIAotc3RhdGljIExJU1RfSEVBRChkd2FyZl9jaWVfbGlzdCk7CitzdGF0aWMgc3RydWN0IHJiX3Jvb3QgY2llX3Jvb3Q7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGR3YXJmX2NpZV9sb2NrKTsKIAotc3RhdGljIExJU1RfSEVBRChkd2FyZl9mZGVfbGlzdCk7CitzdGF0aWMgc3RydWN0IHJiX3Jvb3QgZmRlX3Jvb3Q7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGR3YXJmX2ZkZV9sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBkd2FyZl9jaWUgKmNhY2hlZF9jaWU7CkBAIC0zMDEsNyArMzAxLDggQEAKICAqLwogc3RhdGljIHN0cnVjdCBkd2FyZl9jaWUgKmR3YXJmX2xvb2t1cF9jaWUodW5zaWduZWQgbG9uZyBjaWVfcHRyKQogewotCXN0cnVjdCBkd2FyZl9jaWUgKmNpZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqKnJiX25vZGUgPSAmY2llX3Jvb3QucmJfbm9kZTsKKwlzdHJ1Y3QgZHdhcmZfY2llICpjaWUgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHdhcmZfY2llX2xvY2ssIGZsYWdzKTsKQEAgLTMxNSwxNiArMzE2LDI0IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2llLCAmZHdhcmZfY2llX2xpc3QsIGxpbmspIHsKLQkJaWYgKGNpZS0+Y2llX3BvaW50ZXIgPT0gY2llX3B0cikgewotCQkJY2FjaGVkX2NpZSA9IGNpZTsKLQkJCWJyZWFrOworCXdoaWxlICgqcmJfbm9kZSkgeworCQlzdHJ1Y3QgZHdhcmZfY2llICpjaWVfdG1wOworCisJCWNpZV90bXAgPSByYl9lbnRyeSgqcmJfbm9kZSwgc3RydWN0IGR3YXJmX2NpZSwgbm9kZSk7CisJCUJVR19PTighY2llX3RtcCk7CisKKwkJaWYgKGNpZV9wdHIgPT0gY2llX3RtcC0+Y2llX3BvaW50ZXIpIHsKKwkJCWNpZSA9IGNpZV90bXA7CisJCQljYWNoZWRfY2llID0gY2llX3RtcDsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgeworCQkJaWYgKGNpZV9wdHIgPCBjaWVfdG1wLT5jaWVfcG9pbnRlcikKKwkJCQlyYl9ub2RlID0gJigqcmJfbm9kZSktPnJiX2xlZnQ7CisJCQllbHNlCisJCQkJcmJfbm9kZSA9ICYoKnJiX25vZGUpLT5yYl9yaWdodDsKIAkJfQogCX0KIAotCS8qIENvdWxkbid0IGZpbmQgdGhlIGVudHJ5IGluIHRoZSBsaXN0LiAqLwotCWlmICgmY2llLT5saW5rID09ICZkd2FyZl9jaWVfbGlzdCkKLQkJY2llID0gTlVMTDsKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd2FyZl9jaWVfbG9jaywgZmxhZ3MpOwogCXJldHVybiBjaWU7CkBAIC0zMzYsMjUgKzM0NSwzNCBAQAogICovCiBzdHJ1Y3QgZHdhcmZfZmRlICpkd2FyZl9sb29rdXBfZmRlKHVuc2lnbmVkIGxvbmcgcGMpCiB7Ci0Jc3RydWN0IGR3YXJmX2ZkZSAqZmRlOworCXN0cnVjdCByYl9ub2RlICoqcmJfbm9kZSA9ICZmZGVfcm9vdC5yYl9ub2RlOworCXN0cnVjdCBkd2FyZl9mZGUgKmZkZSA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkd2FyZl9mZGVfbG9jaywgZmxhZ3MpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShmZGUsICZkd2FyZl9mZGVfbGlzdCwgbGluaykgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisJd2hpbGUgKCpyYl9ub2RlKSB7CisJCXN0cnVjdCBkd2FyZl9mZGUgKmZkZV90bXA7CisJCXVuc2lnbmVkIGxvbmcgdG1wX3N0YXJ0LCB0bXBfZW5kOwogCi0JCXN0YXJ0ID0gZmRlLT5pbml0aWFsX2xvY2F0aW9uOwotCQllbmQgPSBmZGUtPmluaXRpYWxfbG9jYXRpb24gKyBmZGUtPmFkZHJlc3NfcmFuZ2U7CisJCWZkZV90bXAgPSByYl9lbnRyeSgqcmJfbm9kZSwgc3RydWN0IGR3YXJmX2ZkZSwgbm9kZSk7CisJCUJVR19PTighZmRlX3RtcCk7CiAKLQkJaWYgKHBjID49IHN0YXJ0ICYmIHBjIDwgZW5kKQotCQkJYnJlYWs7CisJCXRtcF9zdGFydCA9IGZkZV90bXAtPmluaXRpYWxfbG9jYXRpb247CisJCXRtcF9lbmQgPSBmZGVfdG1wLT5pbml0aWFsX2xvY2F0aW9uICsgZmRlX3RtcC0+YWRkcmVzc19yYW5nZTsKKworCQlpZiAocGMgPCB0bXBfc3RhcnQpIHsKKwkJCXJiX25vZGUgPSAmKCpyYl9ub2RlKS0+cmJfbGVmdDsKKwkJfSBlbHNlIHsKKwkJCWlmIChwYyA8IHRtcF9lbmQpIHsKKwkJCQlmZGUgPSBmZGVfdG1wOworCQkJCWdvdG8gb3V0OworCQkJfSBlbHNlCisJCQkJcmJfbm9kZSA9ICYoKnJiX25vZGUpLT5yYl9yaWdodDsKKwkJfQogCX0KIAotCS8qIENvdWxkbid0IGZpbmQgdGhlIGVudHJ5IGluIHRoZSBsaXN0LiAqLwotCWlmICgmZmRlLT5saW5rID09ICZkd2FyZl9mZGVfbGlzdCkKLQkJZmRlID0gTlVMTDsKLQorb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3YXJmX2ZkZV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gZmRlOwpAQCAtNTQwLDYgKzU1OCw4IEBACiAJbWVtcG9vbF9mcmVlKGZyYW1lLCBkd2FyZl9mcmFtZV9wb29sKTsKIH0KIAorZXh0ZXJuIHZvaWQgcmV0X2Zyb21faXJxKHZvaWQpOworCiAvKioKICAqCWR3YXJmX3Vud2luZF9zdGFjayAtIHVud2luZCB0aGUgc3RhY2sKICAqCkBAIC01NTAsOCArNTcwLDggQEAKICAqCW9uIHRoZSBjYWxsc3RhY2suIEVhY2ggb2YgdGhlIGxvd2VyIChvbGRlcikgc3RhY2sgZnJhbWVzIGFyZQogICoJbGlua2VkIHZpYSB0aGUgInByZXYiIG1lbWJlci4KICAqLwotc3RydWN0IGR3YXJmX2ZyYW1lICogZHdhcmZfdW53aW5kX3N0YWNrKHVuc2lnbmVkIGxvbmcgcGMsCi0JCQkJCXN0cnVjdCBkd2FyZl9mcmFtZSAqcHJldikKK3N0cnVjdCBkd2FyZl9mcmFtZSAqZHdhcmZfdW53aW5kX3N0YWNrKHVuc2lnbmVkIGxvbmcgcGMsCisJCQkJICAgICAgIHN0cnVjdCBkd2FyZl9mcmFtZSAqcHJldikKIHsKIAlzdHJ1Y3QgZHdhcmZfZnJhbWUgKmZyYW1lOwogCXN0cnVjdCBkd2FyZl9jaWUgKmNpZTsKQEAgLTY3OCw2ICs2OTgsMjQgQEAKIAlhZGRyID0gZnJhbWUtPmNmYSArIHJlZy0+YWRkcjsKIAlmcmFtZS0+cmV0dXJuX2FkZHIgPSBfX3Jhd19yZWFkbChhZGRyKTsKIAorCS8qCisJICogQWgsIHRoZSBqb3lzIG9mIHVud2luZGluZyB0aHJvdWdoIGludGVycnVwdHMuCisJICoKKwkgKiBJbnRlcnJ1cHRzIGFyZSB0cmlja3kgLSB0aGUgRFdBUkYgaW5mbyBuZWVkcyB0byBiZSBfcmVhbGx5XworCSAqIGFjY3VyYXRlIGFuZCB1bmZvcnR1bmF0ZWx5IEknbSBzZWVpbmcgYSBsb3Qgb2YgYm9ndXMgRFdBUkYKKwkgKiBpbmZvLiBGb3IgZXhhbXBsZSwgSSd2ZSBzZWVuIGludGVycnVwdHMgb2NjdXIgaW4gZXBpbG9ndWVzCisJICoganVzdCBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciAocjE0KSBoYWQgYmVlbiByZXN0b3JlZC4gVGhlCisJICogcHJvYmxlbSB3YXMgdGhhdCB0aGUgRFdBUkYgaW5mbyBjbGFpbWVkIHRoYXQgdGhlIENGQSBjb3VsZCBiZQorCSAqIHJlYWNoZWQgYnkgdXNpbmcgdGhlIHZhbHVlIG9mIHRoZSBmcmFtZSBwb2ludGVyIGJlZm9yZSBpdCB3YXMKKwkgKiByZXN0b3JlZC4KKwkgKgorCSAqIFNvIHVudGlsIHRoZSBjb21waWxlciBjYW4gYmUgdHJ1c3RlZCB0byBwcm9kdWNlIHJlbGlhYmxlCisJICogRFdBUkYgaW5mbyB3aGVuIGl0IHJlYWxseSBtYXR0ZXJzLCBsZXQncyBzdG9wIHVud2luZGluZyBvbmNlCisJICogd2UndmUgY2FsY3VsYXRlZCB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgaW50ZXJydXB0ZWQuCisJICovCisJaWYgKHByZXYgJiYgcHJldi0+cGMgPT0gKHVuc2lnbmVkIGxvbmcpcmV0X2Zyb21faXJxKQorCQlmcmFtZS0+cmV0dXJuX2FkZHIgPSAwOworCiAJcmV0dXJuIGZyYW1lOwogCiBiYWlsOgpAQCAtNjg4LDYgKzcyNiw4IEBACiBzdGF0aWMgaW50IGR3YXJmX3BhcnNlX2NpZSh2b2lkICplbnRyeSwgdm9pZCAqcCwgdW5zaWduZWQgbG9uZyBsZW4sCiAJCQkgICB1bnNpZ25lZCBjaGFyICplbmQsIHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKKwlzdHJ1Y3QgcmJfbm9kZSAqKnJiX25vZGUgPSAmY2llX3Jvb3QucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50OwogCXN0cnVjdCBkd2FyZl9jaWUgKmNpZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjb3VudDsKQEAgLTc4MiwxMSArODIyLDMwIEBACiAJY2llLT5pbml0aWFsX2luc3RydWN0aW9ucyA9IHA7CiAJY2llLT5pbnN0cnVjdGlvbnNfZW5kID0gZW5kOwogCi0JY2llLT5tb2QgPSBtb2Q7Ci0KIAkvKiBBZGQgdG8gbGlzdCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkd2FyZl9jaWVfbG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkX3RhaWwoJmNpZS0+bGluaywgJmR3YXJmX2NpZV9saXN0KTsKKworCXdoaWxlICgqcmJfbm9kZSkgeworCQlzdHJ1Y3QgZHdhcmZfY2llICpjaWVfdG1wOworCisJCWNpZV90bXAgPSByYl9lbnRyeSgqcmJfbm9kZSwgc3RydWN0IGR3YXJmX2NpZSwgbm9kZSk7CisKKwkJcGFyZW50ID0gKnJiX25vZGU7CisKKwkJaWYgKGNpZS0+Y2llX3BvaW50ZXIgPCBjaWVfdG1wLT5jaWVfcG9pbnRlcikKKwkJCXJiX25vZGUgPSAmcGFyZW50LT5yYl9sZWZ0OworCQllbHNlIGlmIChjaWUtPmNpZV9wb2ludGVyID49IGNpZV90bXAtPmNpZV9wb2ludGVyKQorCQkJcmJfbm9kZSA9ICZwYXJlbnQtPnJiX3JpZ2h0OworCQllbHNlCisJCQlXQVJOX09OKDEpOworCX0KKworCXJiX2xpbmtfbm9kZSgmY2llLT5ub2RlLCBwYXJlbnQsIHJiX25vZGUpOworCXJiX2luc2VydF9jb2xvcigmY2llLT5ub2RlLCAmY2llX3Jvb3QpOworCisJaWYgKG1vZCAhPSBOVUxMKQorCQlsaXN0X2FkZF90YWlsKCZjaWUtPmxpbmssICZtb2QtPmFyY2guY2llX2xpc3QpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdhcmZfY2llX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtNzk2LDYgKzg1NSw4IEBACiAJCQkgICB2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sCiAJCQkgICB1bnNpZ25lZCBjaGFyICplbmQsIHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKKwlzdHJ1Y3QgcmJfbm9kZSAqKnJiX25vZGUgPSAmZmRlX3Jvb3QucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50OwogCXN0cnVjdCBkd2FyZl9mZGUgKmZkZTsKIAlzdHJ1Y3QgZHdhcmZfY2llICpjaWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTg0MywxMSArOTA0LDM4IEBACiAJZmRlLT5pbnN0cnVjdGlvbnMgPSBwOwogCWZkZS0+ZW5kID0gZW5kOwogCi0JZmRlLT5tb2QgPSBtb2Q7Ci0KIAkvKiBBZGQgdG8gbGlzdC4gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHdhcmZfZmRlX2xvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZmZGUtPmxpbmssICZkd2FyZl9mZGVfbGlzdCk7CisKKwl3aGlsZSAoKnJiX25vZGUpIHsKKwkJc3RydWN0IGR3YXJmX2ZkZSAqZmRlX3RtcDsKKwkJdW5zaWduZWQgbG9uZyB0bXBfc3RhcnQsIHRtcF9lbmQ7CisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKworCQlmZGVfdG1wID0gcmJfZW50cnkoKnJiX25vZGUsIHN0cnVjdCBkd2FyZl9mZGUsIG5vZGUpOworCisJCXN0YXJ0ID0gZmRlLT5pbml0aWFsX2xvY2F0aW9uOworCQllbmQgPSBmZGUtPmluaXRpYWxfbG9jYXRpb24gKyBmZGUtPmFkZHJlc3NfcmFuZ2U7CisKKwkJdG1wX3N0YXJ0ID0gZmRlX3RtcC0+aW5pdGlhbF9sb2NhdGlvbjsKKwkJdG1wX2VuZCA9IGZkZV90bXAtPmluaXRpYWxfbG9jYXRpb24gKyBmZGVfdG1wLT5hZGRyZXNzX3JhbmdlOworCisJCXBhcmVudCA9ICpyYl9ub2RlOworCisJCWlmIChzdGFydCA8IHRtcF9zdGFydCkKKwkJCXJiX25vZGUgPSAmcGFyZW50LT5yYl9sZWZ0OworCQllbHNlIGlmIChzdGFydCA+PSB0bXBfZW5kKQorCQkJcmJfbm9kZSA9ICZwYXJlbnQtPnJiX3JpZ2h0OworCQllbHNlCisJCQlXQVJOX09OKDEpOworCX0KKworCXJiX2xpbmtfbm9kZSgmZmRlLT5ub2RlLCBwYXJlbnQsIHJiX25vZGUpOworCXJiX2luc2VydF9jb2xvcigmZmRlLT5ub2RlLCAmZmRlX3Jvb3QpOworCisJaWYgKG1vZCAhPSBOVUxMKQorCQlsaXN0X2FkZF90YWlsKCZmZGUtPmxpbmssICZtb2QtPmFyY2guZmRlX2xpc3QpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdhcmZfZmRlX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtODkyLDE5ICs5ODAsMjkgQEAKIAogc3RhdGljIHZvaWQgZHdhcmZfdW53aW5kZXJfY2xlYW51cCh2b2lkKQogewotCXN0cnVjdCBkd2FyZl9jaWUgKmNpZTsKLQlzdHJ1Y3QgZHdhcmZfZmRlICpmZGU7CisJc3RydWN0IHJiX25vZGUgKipmZGVfcmJfbm9kZSA9ICZmZGVfcm9vdC5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICoqY2llX3JiX25vZGUgPSAmY2llX3Jvb3QucmJfbm9kZTsKIAogCS8qCiAJICogRGVhbGxvY2F0ZSBhbGwgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBEV0FSRiB1bndpbmRlci4KIAkgKiBUcmF2ZXJzZSBhbGwgdGhlIEZERS9DSUUgbGlzdHMgYW5kIHJlbW92ZSBhbmQgZnJlZSBhbGwgdGhlCiAJICogbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aG9zZSBkYXRhIHN0cnVjdHVyZXMuCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjaWUsICZkd2FyZl9jaWVfbGlzdCwgbGluaykKLQkJa2ZyZWUoY2llKTsKKwl3aGlsZSAoKmZkZV9yYl9ub2RlKSB7CisJCXN0cnVjdCBkd2FyZl9mZGUgKmZkZTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZmRlLCAmZHdhcmZfZmRlX2xpc3QsIGxpbmspCisJCWZkZSA9IHJiX2VudHJ5KCpmZGVfcmJfbm9kZSwgc3RydWN0IGR3YXJmX2ZkZSwgbm9kZSk7CisJCXJiX2VyYXNlKCpmZGVfcmJfbm9kZSwgJmZkZV9yb290KTsKIAkJa2ZyZWUoZmRlKTsKKwl9CisKKwl3aGlsZSAoKmNpZV9yYl9ub2RlKSB7CisJCXN0cnVjdCBkd2FyZl9jaWUgKmNpZTsKKworCQljaWUgPSByYl9lbnRyeSgqY2llX3JiX25vZGUsIHN0cnVjdCBkd2FyZl9jaWUsIG5vZGUpOworCQlyYl9lcmFzZSgqY2llX3JiX25vZGUsICZjaWVfcm9vdCk7CisJCWtmcmVlKGNpZSk7CisJfQogCiAJa21lbV9jYWNoZV9kZXN0cm95KGR3YXJmX3JlZ19jYWNoZXApOwogCWttZW1fY2FjaGVfZGVzdHJveShkd2FyZl9mcmFtZV9jYWNoZXApOwpAQCAtMTAwNCw2ICsxMTAyLDggQEAKIAogCS8qIERpZCB3ZSBmaW5kIHRoZSAuZWhfZnJhbWUgc2VjdGlvbj8gKi8KIAlpZiAoaSAhPSBoZHItPmVfc2hudW0pIHsKKwkJSU5JVF9MSVNUX0hFQUQoJm1lLT5hcmNoLmNpZV9saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJm1lLT5hcmNoLmZkZV9saXN0KTsKIAkJZXJyID0gZHdhcmZfcGFyc2Vfc2VjdGlvbigoY2hhciAqKXN0YXJ0LCAoY2hhciAqKWVuZCwgbWUpOwogCQlpZiAoZXJyKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbGVkIHRvIHBhcnNlIERXQVJGIGluZm9cbiIsCkBAIC0xMDI0LDM4ICsxMTI0LDI2IEBACiAgKi8KIHZvaWQgbW9kdWxlX2R3YXJmX2NsZWFudXAoc3RydWN0IG1vZHVsZSAqbW9kKQogewotCXN0cnVjdCBkd2FyZl9mZGUgKmZkZTsKLQlzdHJ1Y3QgZHdhcmZfY2llICpjaWU7CisJc3RydWN0IGR3YXJmX2ZkZSAqZmRlLCAqZnRtcDsKKwlzdHJ1Y3QgZHdhcmZfY2llICpjaWUsICpjdG1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHdhcmZfY2llX2xvY2ssIGZsYWdzKTsKIAotYWdhaW5fY2llOgotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2llLCAmZHdhcmZfY2llX2xpc3QsIGxpbmspIHsKLQkJaWYgKGNpZS0+bW9kID09IG1vZCkKLQkJCWJyZWFrOwotCX0KLQotCWlmICgmY2llLT5saW5rICE9ICZkd2FyZl9jaWVfbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaWUsIGN0bXAsICZtb2QtPmFyY2guY2llX2xpc3QsIGxpbmspIHsKIAkJbGlzdF9kZWwoJmNpZS0+bGluayk7CisJCXJiX2VyYXNlKCZjaWUtPm5vZGUsICZjaWVfcm9vdCk7CiAJCWtmcmVlKGNpZSk7Ci0JCWdvdG8gYWdhaW5fY2llOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3YXJmX2NpZV9sb2NrLCBmbGFncyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHdhcmZfZmRlX2xvY2ssIGZsYWdzKTsKIAotYWdhaW5fZmRlOgotCWxpc3RfZm9yX2VhY2hfZW50cnkoZmRlLCAmZHdhcmZfZmRlX2xpc3QsIGxpbmspIHsKLQkJaWYgKGZkZS0+bW9kID09IG1vZCkKLQkJCWJyZWFrOwotCX0KLQotCWlmICgmZmRlLT5saW5rICE9ICZkd2FyZl9mZGVfbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmZGUsIGZ0bXAsICZtb2QtPmFyY2guZmRlX2xpc3QsIGxpbmspIHsKIAkJbGlzdF9kZWwoJmZkZS0+bGluayk7CisJCXJiX2VyYXNlKCZmZGUtPm5vZGUsICZmZGVfcm9vdCk7CiAJCWtmcmVlKGZkZSk7Ci0JCWdvdG8gYWdhaW5fZmRlOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3YXJmX2ZkZV9sb2NrLCBmbGFncyk7CkBAIC0xMDc0LDggKzExNjIsNiBAQAogc3RhdGljIGludCBfX2luaXQgZHdhcmZfdW53aW5kZXJfaW5pdCh2b2lkKQogewogCWludCBlcnI7Ci0JSU5JVF9MSVNUX0hFQUQoJmR3YXJmX2NpZV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmZHdhcmZfZmRlX2xpc3QpOwogCiAJZHdhcmZfZnJhbWVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImR3YXJmX2ZyYW1lcyIsCiAJCQlzaXplb2Yoc3RydWN0IGR3YXJmX2ZyYW1lKSwgMCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC9zaC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4YmI1MGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgotICogYXJjaC9zaC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBOaWliZSBZdXRha2EKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgIE0uIFIuIEJyb3duCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNyAgUGF1bCBNdW5kdAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLSNpbmNsdWRlIDxhc20vc2hfYmlvcy5oPgotCi0vKgotICoJUHJpbnQgYSBzdHJpbmcgdGhyb3VnaCB0aGUgQklPUwotICovCi1zdGF0aWMgdm9pZCBzaF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKLQkJCQkgdW5zaWduZWQgY291bnQpCi17Ci0Jc2hfYmlvc19jb25zb2xlX3dyaXRlKHMsIGNvdW50KTsKLX0KLQotLyoKLSAqCVNldHVwIGluaXRpYWwgYmF1ZC9iaXRzL3Bhcml0eS4gV2UgZG8gdHdvIHRoaW5ncyBoZXJlOgotICoJLSBjb25zdHJ1Y3QgYSBjZmxhZyBzZXR0aW5nIGZvciB0aGUgZmlyc3QgcnNfb3BlbigpCi0gKgktIGluaXRpYWxpemUgdGhlIHNlcmlhbCBwb3J0Ci0gKglSZXR1cm4gbm9uLXplcm8gaWYgd2UgZGlkbid0IGZpbmQgYSBzZXJpYWwgcG9ydC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgc2hfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCi17Ci0JaW50CWNmbGFnID0gQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKLQotCS8qCi0JICoJTm93IGNvbnN0cnVjdCBhIGNmbGFnIHNldHRpbmcuCi0JICoJVE9ETzogdGhpcyBpcyBhIHRvdGFsbHkgYm9ndXMgY2ZsYWcsIGFzIHdlIGhhdmUKLQkgKglubyBpZGVhIHdoYXQgc2VyaWFsIHNldHRpbmdzIHRoZSBCSU9TIGlzIHVzaW5nLCBvcgotCSAqCWV2ZW4gaWYgaXRzIHVzaW5nIHRoZSBzZXJpYWwgcG9ydCBhdCBhbGwuCi0JICovCi0JY2ZsYWcgfD0gQjExNTIwMCB8IENTOCB8IC8qbm8gcGFyaXR5Ki8wOwotCi0JY28tPmNmbGFnID0gY2ZsYWc7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjb25zb2xlIGJpb3NfY29uc29sZSA9IHsKLQkubmFtZQkJPSAiYmlvcyIsCi0JLndyaXRlCQk9IHNoX2NvbnNvbGVfd3JpdGUsCi0JLnNldHVwCQk9IHNoX2NvbnNvbGVfc2V0dXAsCi0JLmZsYWdzCQk9IENPTl9QUklOVEJVRkZFUiwKLQkuaW5kZXgJCT0gLTEsCi19OwotCi1zdGF0aWMgc3RydWN0IGNvbnNvbGUgKmVhcmx5X2NvbnNvbGU7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNldHVwX2Vhcmx5X3ByaW50ayhjaGFyICpidWYpCi17Ci0JaW50IGtlZXBfZWFybHkgPSAwOwotCi0JaWYgKCFidWYpCi0JCXJldHVybiAwOwotCi0JaWYgKHN0cnN0cihidWYsICJrZWVwIikpCi0JCWtlZXBfZWFybHkgPSAxOwotCi0JaWYgKCFzdHJuY21wKGJ1ZiwgImJpb3MiLCA0KSkKLQkJZWFybHlfY29uc29sZSA9ICZiaW9zX2NvbnNvbGU7Ci0KLQlpZiAobGlrZWx5KGVhcmx5X2NvbnNvbGUpKSB7Ci0JCWlmIChrZWVwX2Vhcmx5KQotCQkJZWFybHlfY29uc29sZS0+ZmxhZ3MgJj0gfkNPTl9CT09UOwotCQllbHNlCi0JCQllYXJseV9jb25zb2xlLT5mbGFncyB8PSBDT05fQk9PVDsKLQkJcmVnaXN0ZXJfY29uc29sZShlYXJseV9jb25zb2xlKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJlYXJseXByaW50ayIsIHNldHVwX2Vhcmx5X3ByaW50ayk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TCmluZGV4IGYwYWJkNTguLjJiMTVhZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TCisrKyBiL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC03MCw4ICs3MCwxNCBAQAogCUNGSV9TVEFSVFBST0Mgc2ltcGxlCiAJQ0ZJX0RFRl9DRkEgcjE0LCAwCiAJQ0ZJX1JFTF9PRkZTRVQgMTcsIDY0Ci0JQ0ZJX1JFTF9PRkZTRVQgMTUsIDAKKwlDRklfUkVMX09GRlNFVCAxNSwgNjAKIAlDRklfUkVMX09GRlNFVCAxNCwgNTYKKwlDRklfUkVMX09GRlNFVCAxMywgNTIKKwlDRklfUkVMX09GRlNFVCAxMiwgNDgKKwlDRklfUkVMX09GRlNFVCAxMSwgNDQKKwlDRklfUkVMX09GRlNFVCAxMCwgNDAKKwlDRklfUkVMX09GRlNFVCA5LCAzNgorCUNGSV9SRUxfT0ZGU0VUIDgsIDMyCiAJcHJlZW1wdF9zdG9wKCkKIEVOVFJZKHJldF9mcm9tX2lycSkKIAkhCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jCmluZGV4IGE0OGNkZWQuLjMwZTEzMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jCkBAIC0zOTksMTIgKzM5OSwzIEBACiAJfQogfQogI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KLQotI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKLWV4dGVybiB1bnNpZ25lZCBsb25nICpzeXNfY2FsbF90YWJsZTsKLQotdW5zaWduZWQgbG9uZyBfX2luaXQgYXJjaF9zeXNjYWxsX2FkZHIoaW50IG5yKQotewotCXJldHVybiAodW5zaWduZWQgbG9uZylzeXNfY2FsbF90YWJsZVtucl07Ci19Ci0jZW5kaWYgLyogQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC9zaC9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IDExNTFlY2QuLmZlMGI3NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3NoL2tlcm5lbC9oZWFkXzMyLlMKQEAgLTMsNiArMyw3IEBACiAgKiAgYXJjaC9zaC9rZXJuZWwvaGVhZC5TCiAgKgogICogIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgTmlpYmUgWXV0YWthICYgS2F6IEtvamltYQorICogIENvcHlyaWdodCAoQykgMjAxMCAgTWF0dCBGbGVtaW5nCiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTEzLDYgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKyNpbmNsdWRlIDxjcHUvbW11X2NvbnRleHQuaD4KIAogI2lmZGVmIENPTkZJR19DUFVfU0g0QQogI2RlZmluZSBTWU5DTygpCQlzeW5jbwpAQCAtMzMsNyArMzYsNyBAQAogCS5sb25nCTEJCS8qIExPQURFUl9UWVBFICovCiAJLmxvbmcJMHgwMDAwMDAwMAkvKiBJTklUUkRfU1RBUlQgKi8KIAkubG9uZwkweDAwMDAwMDAwCS8qIElOSVRSRF9TSVpFICovCi0jaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpICYmIGRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkKKyNpZmRlZiBDT05GSUdfMzJCSVQKIAkubG9uZwkweDUzNDUzZjAwICsgMzIJLyogIlNFPyIgPSAzMiBiaXQgKi8KICNlbHNlCiAJLmxvbmcJMHg1MzQ1M2YwMCArIDI5CS8qICJTRT8iID0gMjkgYml0ICovCkBAIC04Miw2ICs4NSwyMDkgQEAKIAlsZGMJcjAsIHI3X2JhbmsJISAuLi4gYW5kIGluaXRpYWwgdGhyZWFkX2luZm8KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BNQgorLyoKKyAqIFJlY29uZmlndXJlIHRoZSBpbml0aWFsIFBNQiBtYXBwaW5ncyBzZXR1cCBieSB0aGUgaGFyZHdhcmUuCisgKgorICogV2hlbiB3ZSBib290IGluIDMyLWJpdCBNTVUgbW9kZSB0aGVyZSBhcmUgMiBQTUIgZW50cmllcyBhbHJlYWR5CisgKiBzZXR1cCBmb3IgdXMuCisgKgorICogRW50cnkgICAgICAgVlBOCSAgIFBQTgkgICAgVglTWglDCVVCCVdUCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgMAkgICAgMHg4MDAwMDAwMCAweDAwMDAwMDAwICAgMSAgNTEyTUIJMQkwCTEKKyAqICAgMQkgICAgMHhBMDAwMDAwMCAweDAwMDAwMDAwICAgMSAgNTEyTUIJMAkwCTAKKyAqCisgKiBCdXQgd2UgcmVwcm9ncmFtIHRoZW0gaGVyZSBiZWNhdXNlIHdlIHdhbnQgY29tcGxldGUgY29udHJvbCBvdmVyCisgKiBvdXIgYWRkcmVzcyBzcGFjZSBhbmQgdGhlIGluaXRpYWwgbWFwcGluZ3MgbWF5IG5vdCBtYXAgUEFHRV9PRkZTRVQKKyAqIHRvIF9fTUVNT1JZX1NUQVJUIChvciBldmVuIG1hcCBhbGwgb2Ygb3VyIFJBTSkuCisgKgorICogT25jZSB3ZSd2ZSBzZXR1cCBjYWNoZWQgYW5kIHVuY2FjaGVkIG1hcHBpbmdzIHdlIGNsZWFyIHRoZSByZXN0IG9mIHRoZQorICogUE1CIGVudHJpZXMuIFRoaXMgY2xlYXJpbmcgYWxzbyBkZWFscyB3aXRoIHRoZSBmYWN0IHRoYXQgUE1CIGVudHJpZXMKKyAqIGNhbiBwZXJzaXN0IGFjcm9zcyByZWJvb3RzLiBUaGUgUE1CIGNvdWxkIGhhdmUgYmVlbiBsZWZ0IGluIGFueSBzdGF0ZQorICogd2hlbiB0aGUgcmVib290IG9jY3VycmVkLCBzbyB0byBiZSBzYWZlIHdlIGNsZWFyIGFsbCBlbnRyaWVzIGFuZCBzdGFydAorICogd2l0aCB3aXRoIGEgY2xlYW4gc2xhdGUuCisgKgorICogVGhlIHVuY2FjaGVkIG1hcHBpbmcgaXMgY29uc3RydWN0ZWQgdXNpbmcgdGhlIHNtYWxsZXN0IHBvc3NpYmxlCisgKiBtYXBwaW5nIHdpdGggYSBzaW5nbGUgdW5idWZmZXJhYmxlIHBhZ2UuIE9ubHkgdGhlIGtlcm5lbCB0ZXh0IG5lZWRzIHRvCisgKiBiZSBjb3ZlcmVkIHZpYSB0aGUgdW5jYWNoZWQgbWFwcGluZyBzbyB0aGF0IGNlcnRhaW4gZnVuY3Rpb25zIGNhbiBiZQorICogcnVuIHVuY2FjaGVkLgorICoKKyAqIERyaXZlcnMgYW5kIHRoZSBsaWtlIHRoYXQgaGF2ZSBwcmV2aW91c2x5IGFidXNlZCB0aGUgMToxIGlkZW50aXR5CisgKiBtYXBwaW5nIGFyZSB1bnN1cHBvcnRlZCBpbiAzMi1iaXQgbW9kZSBhbmQgbXVzdCBzcGVjaWZ5IHRoZWlyIGNhY2hpbmcKKyAqIHByZWZlcmVuY2Ugd2hlbiBwYWdlIHRhYmxlcyBhcmUgY29uc3RydWN0ZWQuCisgKgorICogVGhpcyBmcmVlcyB1cCB0aGUgUDIgc3BhY2UgZm9yIG1vcmUgbmVmYXJpb3VzIHB1cnBvc2VzLgorICoKKyAqIFJlZ2lzdGVyIHV0aWxpemF0aW9uIGlzIGFzIGZvbGxvd3M6CisgKgorICoJcjAgPSBQTUJfREFUQSBkYXRhIGZpZWxkCisgKglyMSA9IFBNQl9EQVRBIGFkZHJlc3MgZmllbGQKKyAqCXIyID0gUE1CX0FERFIgZGF0YSBmaWVsZAorICoJcjMgPSBQTUJfQUREUiBhZGRyZXNzIGZpZWxkCisgKglyNCA9IFBNQl9FX1NISUZUCisgKglyNSA9IHJlbWFpbmluZyBhbW91bnQgb2YgUkFNIHRvIG1hcAorICoJcjYgPSBQTUIgbWFwcGluZyBzaXplIHdlJ3JlIHRyeWluZyB0byB1c2UKKyAqCXI3ID0gY2FjaGVkX3RvX3VuY2FjaGVkCisgKglyOCA9IHNjcmF0Y2ggcmVnaXN0ZXIKKyAqCXI5ID0gc2NyYXRjaCByZWdpc3RlcgorICoJcjEwID0gbnVtYmVyIG9mIFBNQiBlbnRyaWVzIHdlJ3ZlIHNldHVwCisgKi8KKworCW1vdi5sCS5MTU1VQ1IsIHIxCS8qIEZsdXNoIHRoZSBUTEIgKi8KKwltb3YubAlAcjEsIHIwCisJb3IJI01NVUNSX1RJLCByMAorCW1vdi5sCXIwLCBAcjEKKworCW1vdi5sCS5MTUVNT1JZX1NJWkUsIHI1CisKKwltb3YJI1BNQl9FX1NISUZULCByMAorCW1vdgkjMHgxLCByNAorCXNobGQJcjAsIHI0CisKKwltb3YubAkuTEZJUlNUX0RBVEFfRU5UUlksIHIwCisJbW92LmwJLkxQTUJfREFUQSwgcjEKKwltb3YubAkuTEZJUlNUX0FERFJfRU5UUlksIHIyCisJbW92LmwJLkxQTUJfQUREUiwgcjMKKworCS8qCisJICogRmlyc3Qgd2UgbmVlZCB0byB3YWxrIHRoZSBQTUIgYW5kIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueQorCSAqIGV4aXN0aW5nIG1hcHBpbmdzIHRoYXQgbWF0Y2ggdGhlIGluaXRpYWwgbWFwcGluZ3MgVlBOL1BQTi4KKwkgKiBJZiB0aGVzZSBoYXZlIGFscmVhZHkgYmVlbiBlc3RhYmxpc2hlZCBieSB0aGUgYm9vdGxvYWRlciwgd2UKKwkgKiBkb24ndCBib3RoZXIgc2V0dGluZyB1cCBuZXcgZW50cmllcyBoZXJlLCBhbmQgbGV0IHRoZSBsYXRlIFBNQgorCSAqIGluaXRpYWxpemF0aW9uIHRha2UgY2FyZSBvZiB0aGluZ3MgaW5zdGVhZC4KKwkgKgorCSAqIE5vdGUgdGhhdCB3ZSBtYXkgbmVlZCB0byBjb2FsZXNjZSBhbmQgbWVyZ2UgZW50cmllcyBpbiBvcmRlcgorCSAqIHRvIHJlY2xhaW0gbW9yZSBhdmFpbGFibGUgUE1CIHNsb3RzLCB3aGljaCBpcyBtdWNoIG1vcmUgdGhhbgorCSAqIHdlIHdhbnQgdG8gZG8gYXQgdGhpcyBlYXJseSBzdGFnZS4KKwkgKi8KKwltb3YJIzAsIHIxMAorCW1vdgkjTlJfUE1CX0VOVFJJRVMsIHI5CisKKwltb3YJcjEsIHI3CQkvKiB0ZW1wb3JhcnkgUE1CX0RBVEEgaXRlciAqLworCisuTHZhbGlkYXRlX2V4aXN0aW5nX21hcHBpbmdzOgorCisJbW92LmwJQHI3LCByOAorCWFuZAlyMCwgcjgKKwljbXAvZXEJcjAsIHI4CQkvKiBDaGVjayBmb3IgdmFsaWQgX19NRU1PUllfU1RBUlQgbWFwcGluZ3MgKi8KKwlidAkuTHBtYl9kb25lCisKKwlhZGQJIzEsIHIxMAkJLyogSW5jcmVtZW50IHRoZSBsb29wIGNvdW50ZXIgKi8KKwljbXAvZXEJcjksIHIxMAorCWJmL3MJLkx2YWxpZGF0ZV9leGlzdGluZ19tYXBwaW5ncworCSBhZGQJcjQsIHI3CQkvKiBJbmNyZW1lbnQgdG8gdGhlIG5leHQgUE1CX0RBVEEgZW50cnkgKi8KKworCS8qCisJICogSWYgd2UndmUgZmFsbGVuIHRocm91Z2gsIGNvbnRpbnVlIHdpdGggc2V0dGluZyB1cCB0aGUgaW5pdGlhbAorCSAqIG1hcHBpbmdzLgorCSAqLworCisJbW92CXI1LCByNwkJLyogY2FjaGVkX3RvX3VuY2FjaGVkICovCisJbW92CSMwLCByMTAKKworI2lmZGVmIENPTkZJR19VTkNBQ0hFRF9NQVBQSU5HCisJLyoKKwkgKiBVbmNhY2hlZCBtYXBwaW5nCisJICovCisJbW92CSMoUE1CX1NaXzE2TSA+PiAyKSwgcjkKKwlzaGxsMglyOQorCisJbW92CSMoUE1CX1VCID4+IDgpLCByOAorCXNobGw4CXI4CisKKwlvcglyMCwgcjgKKwlvcglyOSwgcjgKKwltb3YubAlyOCwgQHIxCisJbW92CXIyLCByOAorCWFkZAlyNywgcjgKKwltb3YubAlyOCwgQHIzCisKKwlhZGQJcjQsIHIxCisJYWRkCXI0LCByMworCWFkZAkjMSwgcjEwCisjZW5kaWYKKworLyoKKyAqIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIGF2YWlsYWJsZSBzaXplcyBmcm9tIGxhcmdlc3QgdG8KKyAqIHNtYWxsZXN0IGZvciBjb25zdHJ1Y3RpbmcgdGhlIGNhY2hlZCBtYXBwaW5nLgorICovCisjZGVmaW5lIF9fUE1CX0lURVJfQllfU0laRShzaXplKQkJCVwKKy5MIyNzaXplOgkJCQkJCVwKKwltb3YJIyhzaXplID4+IDQpLCByNjsJCQlcCisJc2hsbDE2CXI2OwkJCQkJXAorCXNobGw4CXI2OwkJCQkJXAorCQkJCQkJCVwKKwljbXAvaGkJcjUsIHI2OwkJCQkJXAorCWJ0CTk5OTlmOwkJCQkJXAorCQkJCQkJCVwKKwltb3YJIyhQTUJfU1pfIyNzaXplIyNNID4+IDIpLCByOTsJCVwKKwlzaGxsMglyOTsJCQkJCVwKKwkJCQkJCQlcCisJLyoJCQkJCQlcCisJICogQ2FjaGVkIG1hcHBpbmcJCQkJXAorCSAqLwkJCQkJCVwKKwltb3YJI1BNQl9DLCByODsJCQkJXAorCW9yCXIwLCByODsJCQkJCVwKKwlvcglyOSwgcjg7CQkJCQlcCisJbW92LmwJcjgsIEByMTsJCQkJXAorCW1vdi5sCXIyLCBAcjM7CQkJCVwKKwkJCQkJCQlcCisJLyogSW5jcmVtZW50IHRvIHRoZSBuZXh0IFBNQl9EQVRBIGVudHJ5ICovCVwKKwlhZGQJcjQsIHIxOwkJCQkJXAorCS8qIEluY3JlbWVudCB0byB0aGUgbmV4dCBQTUJfQUREUiBlbnRyeSAqLwlcCisJYWRkCXI0LCByMzsJCQkJCVwKKwkvKiBJbmNyZW1lbnQgbnVtYmVyIG9mIFBNQiBlbnRyaWVzICovCQlcCisJYWRkCSMxLCByMTA7CQkJCVwKKwkJCQkJCQlcCisJc3ViCXI2LCByNTsJCQkJCVwKKwlhZGQJcjYsIHIwOwkJCQkJXAorCWFkZAlyNiwgcjI7CQkJCQlcCisJCQkJCQkJXAorCWJyYQkuTCMjc2l6ZTsJCQkJXAorOTk5OToKKworCV9fUE1CX0lURVJfQllfU0laRSg1MTIpCisJX19QTUJfSVRFUl9CWV9TSVpFKDEyOCkKKwlfX1BNQl9JVEVSX0JZX1NJWkUoNjQpCisJX19QTUJfSVRFUl9CWV9TSVpFKDE2KQorCisjaWZkZWYgQ09ORklHX1VOQ0FDSEVEX01BUFBJTkcKKwkvKgorCSAqIE5vdyB0aGF0IHdlIGNhbiBhY2Nlc3MgaXQsIHVwZGF0ZSBjYWNoZWRfdG9fdW5jYWNoZWQgYW5kCisJICogdW5jYWNoZWRfc2l6ZS4KKwkgKi8KKwltb3YubAkuTGNhY2hlZF90b191bmNhY2hlZCwgcjAKKwltb3YubAlyNywgQHIwCisKKwltb3YubAkuTHVuY2FjaGVkX3NpemUsIHIwCisJbW92CSMxLCByNworCXNobGwxNglyNworCXNobGw4CXI3CisJbW92LmwJcjcsIEByMAorI2VuZGlmCisKKwkvKgorCSAqIENsZWFyIHRoZSByZW1haW5pbmcgUE1CIGVudHJpZXMuCisJICoKKwkgKiByMyA9IGVudHJ5IHRvIGJlZ2luIGNsZWFyaW5nIGZyb20KKwkgKiByMTAgPSBudW1iZXIgb2YgZW50cmllcyB3ZSd2ZSBzZXR1cCBzbyBmYXIKKwkgKi8KKwltb3YJIzAsIHIxCisJbW92CSNOUl9QTUJfRU5UUklFUywgcjAKKworLkxhZ2FpbjoKKwltb3YubAlyMSwgQHIzCQkvKiBDbGVhciBQTUJfQUREUiBlbnRyeSAqLworCWFkZAkjMSwgcjEwCQkvKiBJbmNyZW1lbnQgdGhlIGxvb3AgY291bnRlciAqLworCWNtcC9lcQlyMCwgcjEwCisJYmYvcwkuTGFnYWluCisJIGFkZAlyNCwgcjMJCS8qIEluY3JlbWVudCB0byB0aGUgbmV4dCBQTUJfQUREUiBlbnRyeSAqLworCisJbW92LmwJNmYsIHIwCisJaWNiaQlAcjAKKworLkxwbWJfZG9uZToKKyNlbmRpZiAvKiBDT05GSUdfUE1CICovCisKICNpZm5kZWYgQ09ORklHX1NIX05PX0JTU19JTklUCiAJLyoKIAkgKiBEb24ndCBjbGVhciBCU1MgaWYgcnVubmluZyBvbiBzbG93IHBsYXRmb3JtcyBzdWNoIGFzIGFuIFJUTCBzaW11bGF0aW9uLApAQCAtMTMxLDMgKzMzNywxNiBAQAogNToJLmxvbmcJc3RhcnRfa2VybmVsCiA2OgkubG9uZwlzaF9jcHVfaW5pdAogNzoJLmxvbmcJaW5pdF90aHJlYWRfdW5pb24KKworI2lmZGVmIENPTkZJR19QTUIKKy5MUE1CX0FERFI6CQkubG9uZwlQTUJfQUREUgorLkxQTUJfREFUQToJCS5sb25nCVBNQl9EQVRBCisuTEZJUlNUX0FERFJfRU5UUlk6CS5sb25nCVBBR0VfT0ZGU0VUIHwgUE1CX1YKKy5MRklSU1RfREFUQV9FTlRSWToJLmxvbmcJX19NRU1PUllfU1RBUlQgfCBQTUJfVgorLkxNTVVDUjoJCS5sb25nCU1NVUNSCisuTE1FTU9SWV9TSVpFOgkJLmxvbmcJX19NRU1PUllfU0laRQorI2lmZGVmIENPTkZJR19VTkNBQ0hFRF9NQVBQSU5HCisuTGNhY2hlZF90b191bmNhY2hlZDoJLmxvbmcJY2FjaGVkX3RvX3VuY2FjaGVkCisuTHVuY2FjaGVkX3NpemU6CS5sb25nCXVuY2FjaGVkX3NpemUKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9oZWFkXzY0LlMgYi9hcmNoL3NoL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggM2VhNzY1OC4uZGVmZDg1MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaGVhZF82NC5TCisrKyBiL2FyY2gvc2gva2VybmVsL2hlYWRfNjQuUwpAQCAtMjIwLDcgKzIyMCw2IEBACiAJYWRkLmwJcjIyLCByNjMsIHIyMgkJLyogU2lnbiBleHRlbmQgKi8KIAlwdXRjZmcJcjIxLCAwLCByMjIJCS8qIFNldCBNTVVEUlswXS5QVEVIICovCiAKLSNpZmRlZiBDT05GSUdfRUFSTFlfUFJJTlRLCiAJLyoKIAkgKiBTZXR1cCBhIERUTEIgdHJhbnNsYXRpb24gZm9yIFNDSUYgcGh5cy4KIAkgKi8KQEAgLTIzMSw3ICsyMzAsNiBAQAogCW1vdmkgICAgMHhmYTAzLCByMjIJLyogMHhmYTAzMDAwMCwgZml4ZWQgU0NJRiB2aXJ0ICovCiAJc2hvcmkgICAweDAwMDMsIHIyMgogCXB1dGNmZyAgcjIxLCAwLCByMjIJLyogUFRFSCBsYXN0ICovCi0jZW5kaWYKIAogCS8qCiAJICogU2V0IGNhY2hlIGJlaGF2aW91cnMuCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9od19icmVha3BvaW50LmMgYi9hcmNoL3NoL2tlcm5lbC9od19icmVha3BvaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmMTc1MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2h3X2JyZWFrcG9pbnQuYwpAQCAtMCwwICsxLDQ2MyBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2h3X2JyZWFrcG9pbnQuYworICoKKyAqIFVuaWZpZWQga2VybmVsL3VzZXItc3BhY2UgaGFyZHdhcmUgYnJlYWtwb2ludCBmYWNpbGl0eSBmb3IgdGhlIG9uLWNoaXAgVUJDLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTAgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisjaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxhc20vaHdfYnJlYWtwb2ludC5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyoKKyAqIFN0b3JlcyB0aGUgYnJlYWtwb2ludHMgY3VycmVudGx5IGluIHVzZSBvbiBlYWNoIGJyZWFrcG9pbnQgYWRkcmVzcworICogcmVnaXN0ZXIgZm9yIGVhY2ggY3B1cworICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfZXZlbnQgKiwgYnBfcGVyX3JlZ1tIQlBfTlVNXSk7CisKKy8qCisgKiBBIGR1bW15IHBsYWNlaG9sZGVyIGZvciBlYXJseSBhY2Nlc3NlcyB1bnRpbCB0aGUgQ1BVcyBnZXQgYSBjaGFuY2UgdG8KKyAqIHJlZ2lzdGVyIHRoZWlyIFVCQ3MgbGF0ZXIgaW4gdGhlIGJvb3QgcHJvY2Vzcy4KKyAqLworc3RhdGljIHN0cnVjdCBzaF91YmMgdWJjX2R1bW15ID0geyAubnVtX2V2ZW50cyA9IDAgfTsKKworc3RhdGljIHN0cnVjdCBzaF91YmMgKnNoX3ViYyBfX3JlYWRfbW9zdGx5ID0gJnViY19kdW1teTsKKworLyoKKyAqIEluc3RhbGwgYSBwZXJmIGNvdW50ZXIgYnJlYWtwb2ludC4KKyAqCisgKiBXZSBzZWVrIGEgZnJlZSBVQkMgY2hhbm5lbCBhbmQgdXNlIGl0IGZvciB0aGlzIGJyZWFrcG9pbnQuCisgKgorICogQXRvbWljOiB3ZSBob2xkIHRoZSBjb3VudGVyLT5jdHgtPmxvY2sgYW5kIHdlIG9ubHkgaGFuZGxlIHZhcmlhYmxlcworICogYW5kIHJlZ2lzdGVycyBsb2NhbCB0byB0aGlzIGNwdS4KKyAqLworaW50IGFyY2hfaW5zdGFsbF9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvID0gY291bnRlcl9hcmNoX2JwKGJwKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaF91YmMtPm51bV9ldmVudHM7IGkrKykgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqKnNsb3QgPSAmX19nZXRfY3B1X3ZhcihicF9wZXJfcmVnW2ldKTsKKworCQlpZiAoISpzbG90KSB7CisJCQkqc2xvdCA9IGJwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoV0FSTl9PTkNFKGkgPT0gc2hfdWJjLT5udW1fZXZlbnRzLCAiQ2FuJ3QgZmluZCBhbnkgYnJlYWtwb2ludCBzbG90IikpCisJCXJldHVybiAtRUJVU1k7CisKKwljbGtfZW5hYmxlKHNoX3ViYy0+Y2xrKTsKKwlzaF91YmMtPmVuYWJsZShpbmZvLCBpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVW5pbnN0YWxsIHRoZSBicmVha3BvaW50IGNvbnRhaW5lZCBpbiB0aGUgZ2l2ZW4gY291bnRlci4KKyAqCisgKiBGaXJzdCB3ZSBzZWFyY2ggdGhlIGRlYnVnIGFkZHJlc3MgcmVnaXN0ZXIgaXQgdXNlcyBhbmQgdGhlbiB3ZSBkaXNhYmxlCisgKiBpdC4KKyAqCisgKiBBdG9taWM6IHdlIGhvbGQgdGhlIGNvdW50ZXItPmN0eC0+bG9jayBhbmQgd2Ugb25seSBoYW5kbGUgdmFyaWFibGVzCisgKiBhbmQgcmVnaXN0ZXJzIGxvY2FsIHRvIHRoaXMgY3B1LgorICovCit2b2lkIGFyY2hfdW5pbnN0YWxsX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm8gPSBjb3VudGVyX2FyY2hfYnAoYnApOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNoX3ViYy0+bnVtX2V2ZW50czsgaSsrKSB7CisJCXN0cnVjdCBwZXJmX2V2ZW50ICoqc2xvdCA9ICZfX2dldF9jcHVfdmFyKGJwX3Blcl9yZWdbaV0pOworCisJCWlmICgqc2xvdCA9PSBicCkgeworCQkJKnNsb3QgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoV0FSTl9PTkNFKGkgPT0gc2hfdWJjLT5udW1fZXZlbnRzLCAiQ2FuJ3QgZmluZCBhbnkgYnJlYWtwb2ludCBzbG90IikpCisJCXJldHVybjsKKworCXNoX3ViYy0+ZGlzYWJsZShpbmZvLCBpKTsKKwljbGtfZGlzYWJsZShzaF91YmMtPmNsayk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2hicF9sZW4odTE2IGhicF9sZW4pCit7CisJdW5zaWduZWQgaW50IGxlbl9pbl9ieXRlcyA9IDA7CisKKwlzd2l0Y2ggKGhicF9sZW4pIHsKKwljYXNlIFNIX0JSRUFLUE9JTlRfTEVOXzE6CisJCWxlbl9pbl9ieXRlcyA9IDE7CisJCWJyZWFrOworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fMjoKKwkJbGVuX2luX2J5dGVzID0gMjsKKwkJYnJlYWs7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl80OgorCQlsZW5faW5fYnl0ZXMgPSA0OworCQlicmVhazsKKwljYXNlIFNIX0JSRUFLUE9JTlRfTEVOXzg6CisJCWxlbl9pbl9ieXRlcyA9IDg7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gbGVuX2luX2J5dGVzOworfQorCisvKgorICogQ2hlY2sgZm9yIHZpcnR1YWwgYWRkcmVzcyBpbiB1c2VyIHNwYWNlLgorICovCitpbnQgYXJjaF9jaGVja192YV9pbl91c2Vyc3BhY2UodW5zaWduZWQgbG9uZyB2YSwgdTE2IGhicF9sZW4pCit7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWxlbiA9IGdldF9oYnBfbGVuKGhicF9sZW4pOworCisJcmV0dXJuICh2YSA8PSBUQVNLX1NJWkUgLSBsZW4pOworfQorCisvKgorICogQ2hlY2sgZm9yIHZpcnR1YWwgYWRkcmVzcyBpbiBrZXJuZWwgc3BhY2UuCisgKi8KK3N0YXRpYyBpbnQgYXJjaF9jaGVja192YV9pbl9rZXJuZWxzcGFjZSh1bnNpZ25lZCBsb25nIHZhLCB1OCBoYnBfbGVuKQoreworCXVuc2lnbmVkIGludCBsZW47CisKKwlsZW4gPSBnZXRfaGJwX2xlbihoYnBfbGVuKTsKKworCXJldHVybiAodmEgPj0gVEFTS19TSVpFKSAmJiAoKHZhICsgbGVuIC0gMSkgPj0gVEFTS19TSVpFKTsKK30KKworLyoKKyAqIFN0b3JlIGEgYnJlYWtwb2ludCdzIGVuY29kZWQgYWRkcmVzcywgbGVuZ3RoLCBhbmQgdHlwZS4KKyAqLworc3RhdGljIGludCBhcmNoX3N0b3JlX2luZm8oc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm8gPSBjb3VudGVyX2FyY2hfYnAoYnApOworCisJLyoKKwkgKiBVc2VyLXNwYWNlIHJlcXVlc3RzIHdpbGwgYWx3YXlzIGhhdmUgdGhlIGFkZHJlc3MgZmllbGQgcG9wdWxhdGVkCisJICogRm9yIGtlcm5lbC1hZGRyZXNzZXMsIGVpdGhlciB0aGUgYWRkcmVzcyBvciBzeW1ib2wgbmFtZSBjYW4gYmUKKwkgKiBzcGVjaWZpZWQuCisJICovCisJaWYgKGluZm8tPm5hbWUpCisJCWluZm8tPmFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylrYWxsc3ltc19sb29rdXBfbmFtZShpbmZvLT5uYW1lKTsKKwlpZiAoaW5mby0+YWRkcmVzcykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworaW50IGFyY2hfYnBfZ2VuZXJpY19maWVsZHMoaW50IHNoX2xlbiwgaW50IHNoX3R5cGUsCisJCQkgICBpbnQgKmdlbl9sZW4sIGludCAqZ2VuX3R5cGUpCit7CisJLyogTGVuICovCisJc3dpdGNoIChzaF9sZW4pIHsKKwljYXNlIFNIX0JSRUFLUE9JTlRfTEVOXzE6CisJCSpnZW5fbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fMTsKKwkJYnJlYWs7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl8yOgorCQkqZ2VuX2xlbiA9IEhXX0JSRUFLUE9JTlRfTEVOXzI7CisJCWJyZWFrOworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fNDoKKwkJKmdlbl9sZW4gPSBIV19CUkVBS1BPSU5UX0xFTl80OworCQlicmVhazsKKwljYXNlIFNIX0JSRUFLUE9JTlRfTEVOXzg6CisJCSpnZW5fbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVHlwZSAqLworCXN3aXRjaCAoc2hfdHlwZSkgeworCWNhc2UgU0hfQlJFQUtQT0lOVF9SRUFEOgorCQkqZ2VuX3R5cGUgPSBIV19CUkVBS1BPSU5UX1I7CisJY2FzZSBTSF9CUkVBS1BPSU5UX1dSSVRFOgorCQkqZ2VuX3R5cGUgPSBIV19CUkVBS1BPSU5UX1c7CisJCWJyZWFrOworCWNhc2UgU0hfQlJFQUtQT0lOVF9SVzoKKwkJKmdlbl90eXBlID0gSFdfQlJFQUtQT0lOVF9XIHwgSFdfQlJFQUtQT0lOVF9SOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcmNoX2J1aWxkX2JwX2luZm8oc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm8gPSBjb3VudGVyX2FyY2hfYnAoYnApOworCisJaW5mby0+YWRkcmVzcyA9IGJwLT5hdHRyLmJwX2FkZHI7CisKKwkvKiBMZW4gKi8KKwlzd2l0Y2ggKGJwLT5hdHRyLmJwX2xlbikgeworCWNhc2UgSFdfQlJFQUtQT0lOVF9MRU5fMToKKwkJaW5mby0+bGVuID0gU0hfQlJFQUtQT0lOVF9MRU5fMTsKKwkJYnJlYWs7CisJY2FzZSBIV19CUkVBS1BPSU5UX0xFTl8yOgorCQlpbmZvLT5sZW4gPSBTSF9CUkVBS1BPSU5UX0xFTl8yOworCQlicmVhazsKKwljYXNlIEhXX0JSRUFLUE9JTlRfTEVOXzQ6CisJCWluZm8tPmxlbiA9IFNIX0JSRUFLUE9JTlRfTEVOXzQ7CisJCWJyZWFrOworCWNhc2UgSFdfQlJFQUtQT0lOVF9MRU5fODoKKwkJaW5mby0+bGVuID0gU0hfQlJFQUtQT0lOVF9MRU5fODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVHlwZSAqLworCXN3aXRjaCAoYnAtPmF0dHIuYnBfdHlwZSkgeworCWNhc2UgSFdfQlJFQUtQT0lOVF9SOgorCQlpbmZvLT50eXBlID0gU0hfQlJFQUtQT0lOVF9SRUFEOworCQlicmVhazsKKwljYXNlIEhXX0JSRUFLUE9JTlRfVzoKKwkJaW5mby0+dHlwZSA9IFNIX0JSRUFLUE9JTlRfV1JJVEU7CisJCWJyZWFrOworCWNhc2UgSFdfQlJFQUtQT0lOVF9XIHwgSFdfQlJFQUtQT0lOVF9SOgorCQlpbmZvLT50eXBlID0gU0hfQlJFQUtQT0lOVF9SVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBWYWxpZGF0ZSB0aGUgYXJjaC1zcGVjaWZpYyBIVyBCcmVha3BvaW50IHJlZ2lzdGVyIHNldHRpbmdzCisgKi8KK2ludCBhcmNoX3ZhbGlkYXRlX2h3YmtwdF9zZXR0aW5ncyhzdHJ1Y3QgcGVyZl9ldmVudCAqYnAsCisJCQkJICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvID0gY291bnRlcl9hcmNoX2JwKGJwKTsKKwl1bnNpZ25lZCBpbnQgYWxpZ247CisJaW50IHJldDsKKworCXJldCA9IGFyY2hfYnVpbGRfYnBfaW5mbyhicCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IC1FSU5WQUw7CisKKwlzd2l0Y2ggKGluZm8tPmxlbikgeworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fMToKKwkJYWxpZ24gPSAwOworCQlicmVhazsKKwljYXNlIFNIX0JSRUFLUE9JTlRfTEVOXzI6CisJCWFsaWduID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl80OgorCQlhbGlnbiA9IDM7CisJCWJyZWFrOworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fODoKKwkJYWxpZ24gPSA3OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGFyY2hfc3RvcmVfaW5mbyhicCk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgbG93LW9yZGVyIGJpdHMgb2YgdGhlIGFkZHJlc3MgYXJlIGFwcHJvcHJpYXRlCisJICogZm9yIHRoZSBhbGlnbm1lbnQgaW1wbGllZCBieSBsZW4uCisJICovCisJaWYgKGluZm8tPmFkZHJlc3MgJiBhbGlnbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBDaGVjayB0aGF0IHRoZSB2aXJ0dWFsIGFkZHJlc3MgaXMgaW4gdGhlIHByb3BlciByYW5nZSAqLworCWlmICh0c2spIHsKKwkJaWYgKCFhcmNoX2NoZWNrX3ZhX2luX3VzZXJzcGFjZShpbmZvLT5hZGRyZXNzLCBpbmZvLT5sZW4pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJaWYgKCFhcmNoX2NoZWNrX3ZhX2luX2tlcm5lbHNwYWNlKGluZm8tPmFkZHJlc3MsIGluZm8tPmxlbikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbGVhc2UgdGhlIHVzZXIgYnJlYWtwb2ludHMgdXNlZCBieSBwdHJhY2UKKyAqLwordm9pZCBmbHVzaF9wdHJhY2VfaHdfYnJlYWtwb2ludChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZ0c2stPnRocmVhZDsKKworCWZvciAoaSA9IDA7IGkgPCBzaF91YmMtPm51bV9ldmVudHM7IGkrKykgeworCQl1bnJlZ2lzdGVyX2h3X2JyZWFrcG9pbnQodC0+cHRyYWNlX2Jwc1tpXSk7CisJCXQtPnB0cmFjZV9icHNbaV0gPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBfX2twcm9iZXMgaHdfYnJlYWtwb2ludF9oYW5kbGVyKHN0cnVjdCBkaWVfYXJncyAqYXJncykKK3sKKwlpbnQgY3B1LCBpLCByYyA9IE5PVElGWV9TVE9QOworCXN0cnVjdCBwZXJmX2V2ZW50ICpicDsKKwl1bnNpZ25lZCBpbnQgY21mLCByZXN1bWVfbWFzazsKKworCS8qCisJICogRG8gYW4gZWFybHkgcmV0dXJuIGlmIG5vbmUgb2YgdGhlIGNoYW5uZWxzIHRyaWdnZXJlZC4KKwkgKi8KKwljbWYgPSBzaF91YmMtPnRyaWdnZXJlZF9tYXNrKCk7CisJaWYgKHVubGlrZWx5KCFjbWYpKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwkvKgorCSAqIEJ5IGRlZmF1bHQsIHJlc3VtZSBhbGwgb2YgdGhlIGFjdGl2ZSBjaGFubmVscy4KKwkgKi8KKwlyZXN1bWVfbWFzayA9IHNoX3ViYy0+YWN0aXZlX21hc2soKTsKKworCS8qCisJICogRGlzYWJsZSBicmVha3BvaW50cyBkdXJpbmcgZXhjZXB0aW9uIGhhbmRsaW5nLgorCSAqLworCXNoX3ViYy0+ZGlzYWJsZV9hbGwoKTsKKworCWNwdSA9IGdldF9jcHUoKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2hfdWJjLT5udW1fZXZlbnRzOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBldmVudF9tYXNrID0gKDEgPDwgaSk7CisKKwkJaWYgKGxpa2VseSghKGNtZiAmIGV2ZW50X21hc2spKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFRoZSBjb3VudGVyIG1heSBiZSBjb25jdXJyZW50bHkgcmVsZWFzZWQgYnV0IHRoYXQgY2FuIG9ubHkKKwkJICogb2NjdXIgZnJvbSBhIGNhbGxfcmN1KCkgcGF0aC4gV2UgY2FuIHRoZW4gc2FmZWx5IGZldGNoCisJCSAqIHRoZSBicmVha3BvaW50LCB1c2UgaXRzIGNhbGxiYWNrLCB0b3VjaCBpdHMgY291bnRlcgorCQkgKiB3aGlsZSB3ZSBhcmUgaW4gYW4gcmN1X3JlYWRfbG9jaygpIHBhdGguCisJCSAqLworCQlyY3VfcmVhZF9sb2NrKCk7CisKKwkJYnAgPSBwZXJfY3B1KGJwX3Blcl9yZWdbaV0sIGNwdSk7CisJCWlmIChicCkKKwkJCXJjID0gTk9USUZZX0RPTkU7CisKKwkJLyoKKwkJICogUmVzZXQgdGhlIGNvbmRpdGlvbiBtYXRjaCBmbGFnIHRvIGRlbm90ZSBjb21wbGV0aW9uIG9mCisJCSAqIGV4Y2VwdGlvbiBoYW5kbGluZy4KKwkJICovCisJCXNoX3ViYy0+Y2xlYXJfdHJpZ2dlcmVkX21hc2soZXZlbnRfbWFzayk7CisKKwkJLyoKKwkJICogYnAgY2FuIGJlIE5VTEwgZHVlIHRvIGNvbmN1cnJlbnQgcGVyZiBjb3VudGVyCisJCSAqIHJlbW92aW5nLgorCQkgKi8KKwkJaWYgKCFicCkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIERvbid0IHJlc3RvcmUgdGhlIGNoYW5uZWwgaWYgdGhlIGJyZWFrcG9pbnQgaXMgZnJvbQorCQkgKiBwdHJhY2UsIGFzIGl0IGFsd2F5cyBvcGVyYXRlcyBpbiBvbmUtc2hvdCBtb2RlLgorCQkgKi8KKwkJaWYgKGJwLT5vdmVyZmxvd19oYW5kbGVyID09IHB0cmFjZV90cmlnZ2VyZWQpCisJCQlyZXN1bWVfbWFzayAmPSB+KDEgPDwgaSk7CisKKwkJcGVyZl9icF9ldmVudChicCwgYXJncy0+cmVncyk7CisKKwkJLyogRGVsaXZlciB0aGUgc2lnbmFsIHRvIHVzZXJzcGFjZSAqLworCQlpZiAoYXJjaF9jaGVja192YV9pbl91c2Vyc3BhY2UoYnAtPmF0dHIuYnBfYWRkciwKKwkJCQkJICAgICAgIGJwLT5hdHRyLmJwX2xlbikpIHsKKwkJCXNpZ2luZm9fdCBpbmZvOworCisJCQlpbmZvLnNpX3NpZ25vID0gYXJncy0+c2lnbnI7CisJCQlpbmZvLnNpX2Vycm5vID0gbm90aWZpZXJfdG9fZXJybm8ocmMpOworCQkJaW5mby5zaV9jb2RlID0gVFJBUF9IV0JLUFQ7CisKKwkJCWZvcmNlX3NpZ19pbmZvKGFyZ3MtPnNpZ25yLCAmaW5mbywgY3VycmVudCk7CisJCX0KKworCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CisKKwlpZiAoY21mID09IDApCisJCXJjID0gTk9USUZZX0RPTkU7CisKKwlzaF91YmMtPmVuYWJsZV9hbGwocmVzdW1lX21hc2spOworCisJcHV0X2NwdSgpOworCisJcmV0dXJuIHJjOworfQorCitCVUlMRF9UUkFQX0hBTkRMRVIoYnJlYWtwb2ludCkKK3sKKwl1bnNpZ25lZCBsb25nIGV4ID0gbG9va3VwX2V4Y2VwdGlvbl92ZWN0b3IoKTsKKwlUUkFQX0hBTkRMRVJfREVDTDsKKworCW5vdGlmeV9kaWUoRElFX0JSRUFLUE9JTlQsICJicmVha3BvaW50IiwgcmVncywgMCwgZXgsIFNJR1RSQVApOworfQorCisvKgorICogSGFuZGxlIGRlYnVnIGV4Y2VwdGlvbiBub3RpZmljYXRpb25zLgorICovCitpbnQgX19rcHJvYmVzIGh3X2JyZWFrcG9pbnRfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IGRhdGE7CisKKwlpZiAodmFsICE9IERJRV9CUkVBS1BPSU5UKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwkvKgorCSAqIElmIHRoZSBicmVha3BvaW50IGhhc24ndCBiZWVuIHRyaWdnZXJlZCBieSB0aGUgVUJDLCBpdCdzCisJICogcHJvYmFibHkgZnJvbSBhIGRlYnVnZ2VyLCBzbyBkb24ndCBkbyBhbnl0aGluZyBtb3JlIGhlcmUuCisJICoKKwkgKiBUaGlzIGFsc28gcGVybWl0cyB0aGUgVUJDIGludGVyZmFjZSBjbG9jayB0byByZW1haW4gb2ZmIGZvcgorCSAqIG5vbi1VQkMgYnJlYWtwb2ludHMsIGFzIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIHRyaWdnZXJlZAorCSAqIG9yIGFjdGl2ZSBjaGFubmVsIG1hc2tzLgorCSAqLworCWlmIChhcmdzLT50cmFwbnIgIT0gc2hfdWJjLT50cmFwX25yKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlyZXR1cm4gaHdfYnJlYWtwb2ludF9oYW5kbGVyKGRhdGEpOworfQorCit2b2lkIGh3X2JyZWFrcG9pbnRfcG11X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCS8qIFRPRE8gKi8KK30KKwordm9pZCBod19icmVha3BvaW50X3BtdV91bnRocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwkvKiBUT0RPICovCit9CisKK2ludCByZWdpc3Rlcl9zaF91YmMoc3RydWN0IHNoX3ViYyAqdWJjKQoreworCS8qIEJhaWwgaWYgaXQncyBhbHJlYWR5IGFzc2lnbmVkICovCisJaWYgKHNoX3ViYyAhPSAmdWJjX2R1bW15KQorCQlyZXR1cm4gLUVCVVNZOworCXNoX3ViYyA9IHViYzsKKworCXByX2luZm8oIkhXIEJyZWFrcG9pbnRzOiAlcyBVQkMgc3VwcG9ydCByZWdpc3RlcmVkXG4iLCB1YmMtPm5hbWUpOworCisJV0FSTl9PTih1YmMtPm51bV9ldmVudHMgPiBIQlBfTlVNKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaWRsZS5jIGIvYXJjaC9zaC9rZXJuZWwvaWRsZS5jCmluZGV4IDZiM2Q3MDYuLjBmZDdiNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lkbGUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pZGxlLmMKQEAgLTIwLDEwICsyMCw5IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAotc3RhdGljIGludCBobHRfY291bnRlcjsKIHZvaWQgKCpwbV9pZGxlKSh2b2lkKSA9IE5VTEw7Ci12b2lkICgqcG1fcG93ZXJfb2ZmKSh2b2lkKTsKLUVYUE9SVF9TWU1CT0wocG1fcG93ZXJfb2ZmKTsKKworc3RhdGljIGludCBobHRfY291bnRlcjsKIAogc3RhdGljIGludCBfX2luaXQgbm9obHRfc2V0dXAoY2hhciAqX191bnVzZWQpCiB7CkBAIC0xMzEsNiArMTMwLDE1IEBACiB7CiB9CiAKK3ZvaWQgc3RvcF90aGlzX2NwdSh2b2lkICp1bnVzZWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7CisKKwlmb3IgKDs7KQorCQljcHVfc2xlZXAoKTsKK30KKwogLyoKICAqIGNwdV9pZGxlX3dhaXQgLSBVc2VkIHRvIGVuc3VyZSB0aGF0IGFsbCB0aGUgQ1BVcyBkaXNjYXJkIG9sZCB2YWx1ZSBvZgogICogcG1faWRsZSBhbmQgdXBkYXRlIHRvIG5ldyBwbV9pZGxlIHZhbHVlLiBSZXF1aXJlZCB3aGlsZSBjaGFuZ2luZyBwbV9pZGxlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pb190cmFwcGVkLmMgYi9hcmNoL3NoL2tlcm5lbC9pb190cmFwcGVkLmMKaW5kZXggNjliZTYwMy4uNGE4YmI0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaW9fdHJhcHBlZC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lvX3RyYXBwZWQuYwpAQCAtMTg0LDMxICsxODQsMzEgQEAKIAogCXN3aXRjaCAoc3JjX2xlbikgewogCWNhc2UgMToKLQkJdG1wID0gY3RybF9pbmIoc3JjX2FkZHIpOworCQl0bXAgPSBfX3Jhd19yZWFkYihzcmNfYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJdG1wID0gY3RybF9pbncoc3JjX2FkZHIpOworCQl0bXAgPSBfX3Jhd19yZWFkdyhzcmNfYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgNDoKLQkJdG1wID0gY3RybF9pbmwoc3JjX2FkZHIpOworCQl0bXAgPSBfX3Jhd19yZWFkbChzcmNfYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgODoKLQkJdG1wID0gY3RybF9pbnEoc3JjX2FkZHIpOworCQl0bXAgPSBfX3Jhd19yZWFkcShzcmNfYWRkcik7CiAJCWJyZWFrOwogCX0KIAogCXN3aXRjaCAoZHN0X2xlbikgewogCWNhc2UgMToKLQkJY3RybF9vdXRiKHRtcCwgZHN0X2FkZHIpOworCQlfX3Jhd193cml0ZWIodG1wLCBkc3RfYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJY3RybF9vdXR3KHRtcCwgZHN0X2FkZHIpOworCQlfX3Jhd193cml0ZXcodG1wLCBkc3RfYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgNDoKLQkJY3RybF9vdXRsKHRtcCwgZHN0X2FkZHIpOworCQlfX3Jhd193cml0ZWwodG1wLCBkc3RfYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgODoKLQkJY3RybF9vdXRxKHRtcCwgZHN0X2FkZHIpOworCQlfX3Jhd193cml0ZXEodG1wLCBkc3RfYWRkcik7CiAJCWJyZWFrOwogCX0KIApAQCAtMjcxLDYgKzI3MSw4IEBACiAJaW5zbl9zaXplX3QgaW5zdHJ1Y3Rpb247CiAJaW50IHRtcDsKIAorCWlmICh0cmFwcGVkX2lvX2Rpc2FibGUpCisJCXJldHVybiAwOwogCWlmICghbG9va3VwX3Rpb3AoYWRkcmVzcykpCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9rZ2RiLmMgYi9hcmNoL3NoL2tlcm5lbC9rZ2RiLmMKaW5kZXggM2U1MzJkMC4uNzBjNjk2NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwva2dkYi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2tnZGIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBTdXBlckggS0dEQiBzdXBwb3J0CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4ICBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggLSAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogU2luZ2xlIHN0ZXBwaW5nIHRha2VuIGZyb20gdGhlIG9sZCBzdHViIGJ5IEhlbnJ5IEJlbGwgYW5kIEplcmVteSBTaWVnZWwuCiAgKgpAQCAtMjUxLDI0ICsyNTEsNjAgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgX19rZ2RiX25vdGlmeShzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MsIHVuc2lnbmVkIGxvbmcgY21kKQoreworCWludCByZXQ7CiAKLUJVSUxEX1RSQVBfSEFORExFUihicmVha3BvaW50KQorCXN3aXRjaCAoY21kKSB7CisJY2FzZSBESUVfQlJFQUtQT0lOVDoKKwkJLyoKKwkJICogVGhpcyBtZWFucyBhIHVzZXIgdGhyZWFkIGlzIHNpbmdsZSBzdGVwcGluZworCQkgKiBhIHN5c3RlbSBjYWxsIHdoaWNoIHNob3VsZCBiZSBpZ25vcmVkCisJCSAqLworCQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkpCisJCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwkJcmV0ID0ga2dkYl9oYW5kbGVfZXhjZXB0aW9uKGFyZ3MtPnRyYXBuciAmIDB4ZmYsIGFyZ3MtPnNpZ25yLAorCQkJCQkgICAgYXJncy0+ZXJyLCBhcmdzLT5yZWdzKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiBOT1RJRllfRE9ORTsKKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gTk9USUZZX1NUT1A7Cit9CisKK3N0YXRpYyBpbnQKK2tnZGJfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKnB0cikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCVRSQVBfSEFORExFUl9ERUNMOworCWludCByZXQ7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0Ja2dkYl9oYW5kbGVfZXhjZXB0aW9uKHZlYyA+PiAyLCBTSUdUUkFQLCAwLCByZWdzKTsKKwlyZXQgPSBfX2tnZGJfbm90aWZ5KHB0ciwgY21kKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGtnZGJfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwJPSBrZ2RiX25vdGlmeSwKKworCS8qCisJICogTG93ZXN0LXByaW8gbm90aWZpZXIgcHJpb3JpdHksIHdlIHdhbnQgdG8gYmUgbm90aWZpZWQgbGFzdDoKKwkgKi8KKwkucHJpb3JpdHkJPSAtSU5UX01BWCwKK307CisKIGludCBrZ2RiX2FyY2hfaW5pdCh2b2lkKQogewotCXJldHVybiAwOworCXJldHVybiByZWdpc3Rlcl9kaWVfbm90aWZpZXIoJmtnZGJfbm90aWZpZXIpOwogfQogCiB2b2lkIGtnZGJfYXJjaF9leGl0KHZvaWQpCiB7CisJdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoJmtnZGJfbm90aWZpZXIpOwogfQogCiBzdHJ1Y3Qga2dkYl9hcmNoIGFyY2hfa2dkYl9vcHMgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKaW5kZXggNzZmMjgwMi4uNzY3MjE0MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCisrKyBiL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3NoX2Jpb3MuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAKIHR5cGVkZWYgdm9pZCAoKnJlbG9jYXRlX25ld19rZXJuZWxfdCkodW5zaWduZWQgbG9uZyBpbmRpcmVjdGlvbl9wYWdlLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmVib290X2NvZGVfYnVmZmVyLApAQCAtMjgsMTUgKzMwLDExIEBACiAKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHJlbG9jYXRlX25ld19rZXJuZWxbXTsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgcmVsb2NhdGVfbmV3X2tlcm5lbF9zaXplOwotZXh0ZXJuIHZvaWQgKmdkYl92YnJfdmVjdG9yOwogZXh0ZXJuIHZvaWQgKnZicl9iYXNlOwogCi12b2lkIG1hY2hpbmVfc2h1dGRvd24odm9pZCkKK3ZvaWQgbmF0aXZlX21hY2hpbmVfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci19Ci0KLXZvaWQgbWFjaGluZV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKKwkvKiBOb3RoaW5nIHRvIGRvIGZvciBVUCwgYnV0IGRlZmluaXRlbHkgYnJva2VuIGZvciBTTVAuLiAqLwogfQogCiAvKgpAQCAtMTE3LDExICsxMTUsNyBAQAogCWtleGVjX2luZm8oaW1hZ2UpOwogCWZsdXNoX2NhY2hlX2FsbCgpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykKLQlhc20gdm9sYXRpbGUoImxkYyAlMCwgdmJyIiA6Ci0JCSAgICAgOiAiciIgKCgodW5zaWduZWQgbG9uZykgZ2RiX3Zicl92ZWN0b3IpIC0gMHgxMDApCi0JCSAgICAgOiAibWVtb3J5Iik7Ci0jZW5kaWYKKwlzaF9iaW9zX3Zicl9yZWxvYWQoKTsKIAogCS8qIG5vdyBjYWxsIGl0ICovCiAJcm5rID0gKHJlbG9jYXRlX25ld19rZXJuZWxfdCkgcmVib290X2NvZGVfYnVmZmVyOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYyBiL2FyY2gvc2gva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKaW5kZXggMjRlYTgzNy4uYTlkZDNhYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYworKysgYi9hcmNoL3NoL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCkBAIC02OCw5ICs2OCw2IEBACiAKIAlpc191c2VyID0gdXNlcl9tb2RlKHJlZ3MpOwogCi0JaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQtPnBpZCA9PSAwKQotCQlyZXR1cm47Ci0KIAlpZiAoaXNfdXNlciAmJiBjdXJyZW50LT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYWRkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTAsMCArMSwxMDAgQEAKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKK3N0cnVjdCBrbWVtX2NhY2hlICp0YXNrX3hzdGF0ZV9jYWNoZXAgPSBOVUxMOwordW5zaWduZWQgaW50IHhzdGF0ZV9zaXplOworCitpbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKQoreworCSpkc3QgPSAqc3JjOworCisJaWYgKHNyYy0+dGhyZWFkLnhzdGF0ZSkgeworCQlkc3QtPnRocmVhZC54c3RhdGUgPSBrbWVtX2NhY2hlX2FsbG9jKHRhc2tfeHN0YXRlX2NhY2hlcCwKKwkJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIWRzdC0+dGhyZWFkLnhzdGF0ZSkKKwkJCXJldHVybiAtRU5PTUVNOworCQltZW1jcHkoZHN0LT50aHJlYWQueHN0YXRlLCBzcmMtPnRocmVhZC54c3RhdGUsIHhzdGF0ZV9zaXplKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmcmVlX3RocmVhZF94c3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKHRzay0+dGhyZWFkLnhzdGF0ZSkgeworCQlrbWVtX2NhY2hlX2ZyZWUodGFza194c3RhdGVfY2FjaGVwLCB0c2stPnRocmVhZC54c3RhdGUpOworCQl0c2stPnRocmVhZC54c3RhdGUgPSBOVUxMOworCX0KK30KKworI2lmIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdGhyZWFkX2luZm9fY2FjaGU7CisKK3N0cnVjdCB0aHJlYWRfaW5mbyAqYWxsb2NfdGhyZWFkX2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aTsKKworCXRpID0ga21lbV9jYWNoZV9hbGxvYyh0aHJlYWRfaW5mb19jYWNoZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KHRpID09IE5VTEwpKQorCQlyZXR1cm4gTlVMTDsKKyNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKKwltZW1zZXQodGksIDAsIFRIUkVBRF9TSVpFKTsKKyNlbmRpZgorCXJldHVybiB0aTsKK30KKwordm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGkpCit7CisJZnJlZV90aHJlYWRfeHN0YXRlKHRpLT50YXNrKTsKKwlrbWVtX2NhY2hlX2ZyZWUodGhyZWFkX2luZm9fY2FjaGUsIHRpKTsKK30KKwordm9pZCB0aHJlYWRfaW5mb19jYWNoZV9pbml0KHZvaWQpCit7CisJdGhyZWFkX2luZm9fY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgidGhyZWFkX2luZm8iLCBUSFJFQURfU0laRSwKKwkJCQkJICAgICAgVEhSRUFEX1NJWkUsIFNMQUJfUEFOSUMsIE5VTEwpOworfQorI2Vsc2UKK3N0cnVjdCB0aHJlYWRfaW5mbyAqYWxsb2NfdGhyZWFkX2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFCisJZ2ZwX3QgbWFzayA9IEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPOworI2Vsc2UKKwlnZnBfdCBtYXNrID0gR0ZQX0tFUk5FTDsKKyNlbmRpZgorCXJldHVybiAoc3RydWN0IHRocmVhZF9pbmZvICopX19nZXRfZnJlZV9wYWdlcyhtYXNrLCBUSFJFQURfU0laRV9PUkRFUik7Cit9CisKK3ZvaWQgZnJlZV90aHJlYWRfaW5mbyhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKQoreworCWZyZWVfdGhyZWFkX3hzdGF0ZSh0aS0+dGFzayk7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl0aSwgVEhSRUFEX1NJWkVfT1JERVIpOworfQorI2VuZGlmIC8qIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQgKi8KKwordm9pZCBhcmNoX3Rhc2tfY2FjaGVfaW5pdCh2b2lkKQoreworCWlmICgheHN0YXRlX3NpemUpCisJCXJldHVybjsKKworCXRhc2tfeHN0YXRlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJ0YXNrX3hzdGF0ZSIsIHhzdGF0ZV9zaXplLAorCQkJCQkgICAgICAgX19hbGlnbm9mX18odW5pb24gdGhyZWFkX3hzdGF0ZSksCisJCQkJCSAgICAgICBTTEFCX1BBTklDIHwgU0xBQl9OT1RSQUNLLCBOVUxMKTsKK30KKworI2lmZGVmIENPTkZJR19TSF9GUFVfRU1VCisjIGRlZmluZSBIQVZFX1NPRlRGUAkxCisjZWxzZQorIyBkZWZpbmUgSEFWRV9TT0ZURlAJMAorI2VuZGlmCisKK3ZvaWQgaW5pdF90aHJlYWRfeHN0YXRlKHZvaWQpCit7CisJaWYgKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkKKwkJeHN0YXRlX3NpemUgPSBzaXplb2Yoc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCk7CisJZWxzZSBpZiAoSEFWRV9TT0ZURlApCisJCXhzdGF0ZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QpOworCWVsc2UKKwkJeHN0YXRlX3NpemUgPSAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IGQ4YWY4ODkuLjNjYjg4ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKQEAgLTE2LDY1ICsxNiwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgotI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgotI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KKyNpbmNsdWRlIDxsaW51eC9od19icmVha3BvaW50Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vdWJjLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogI2luY2x1ZGUgPGFzbS9zeXNjYWxscy5oPgotI2luY2x1ZGUgPGFzbS93YXRjaGRvZy5oPgotCi1pbnQgdWJjX3VzZXJjbnQgPSAwOwotCi0jaWZkZWYgQ09ORklHXzMyQklUCi1zdGF0aWMgdm9pZCB3YXRjaGRvZ190cmlnZ2VyX2ltbWVkaWF0ZSh2b2lkKQotewotCXNoX3dkdF93cml0ZV9jbnQoMHhGRik7Ci0Jc2hfd2R0X3dyaXRlX2NzcigweEMyKTsKLX0KLQotdm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqIF9fdW51c2VkKQotewotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0KLQkvKiBVc2Ugd2F0Y2hkb2cgdGltZXIgdG8gdHJpZ2dlciByZXNldCAqLwotCXdhdGNoZG9nX3RyaWdnZXJfaW1tZWRpYXRlKCk7Ci0KLQl3aGlsZSAoMSkKLQkJY3B1X3NsZWVwKCk7Ci19Ci0jZWxzZQotdm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqIF9fdW51c2VkKQotewotCS8qIFNSLkJMPTEgYW5kIGludm9rZSBhZGRyZXNzIGVycm9yIHRvIGxldCBDUFUgcmVzZXQgKG1hbnVhbCByZXNldCkgKi8KLQlhc20gdm9sYXRpbGUoImxkYyAlMCwgc3Jcblx0IgotCQkgICAgICJtb3YubCBAJTEsICUwIiA6IDogInIiICgweDEwMDAwMDAwKSwgInIiICgweDgwMDAwMDAxKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBtYWNoaW5lX2hhbHQodm9pZCkKLXsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCi0Jd2hpbGUgKDEpCi0JCWNwdV9zbGVlcCgpOwotfQotCi12b2lkIG1hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCi17Ci0JaWYgKHBtX3Bvd2VyX29mZikKLQkJcG1fcG93ZXJfb2ZmKCk7Ci19CiAKIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKQEAgLTkxLDcgKzQxLDcgQEAKIAlwcmludGsoIlBDICA6ICUwOGx4IFNQICA6ICUwOGx4IFNSICA6ICUwOGx4ICIsCiAJICAgICAgIHJlZ3MtPnBjLCByZWdzLT5yZWdzWzE1XSwgcmVncy0+c3IpOwogI2lmZGVmIENPTkZJR19NTVUKLQlwcmludGsoIlRFQSA6ICUwOHhcbiIsIGN0cmxfaW5sKE1NVV9URUEpKTsKKwlwcmludGsoIlRFQSA6ICUwOHhcbiIsIF9fcmF3X3JlYWRsKE1NVV9URUEpKTsKICNlbHNlCiAJcHJpbnRrKCJcbiIpOwogI2VuZGlmCkBAIC0xNDcsMjEgKzk3LDM0IEBACiB9CiBFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwogCit2b2lkIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBuZXdfcGMsCisJCSAgdW5zaWduZWQgbG9uZyBuZXdfc3ApCit7CisJc2V0X2ZzKFVTRVJfRFMpOworCisJcmVncy0+cHIgPSAwOworCXJlZ3MtPnNyID0gU1JfRkQ7CisJcmVncy0+cGMgPSBuZXdfcGM7CisJcmVncy0+cmVnc1sxNV0gPSBuZXdfc3A7CisKKwlmcmVlX3RocmVhZF94c3RhdGUoY3VycmVudCk7Cit9CitFWFBPUlRfU1lNQk9MKHN0YXJ0X3RocmVhZCk7CisKIC8qCiAgKiBGcmVlIGN1cnJlbnQgdGhyZWFkIGRhdGEgc3RydWN0dXJlcyBldGMuLgogICovCiB2b2lkIGV4aXRfdGhyZWFkKHZvaWQpCiB7Ci0JaWYgKGN1cnJlbnQtPnRocmVhZC51YmNfcGMpIHsKLQkJY3VycmVudC0+dGhyZWFkLnViY19wYyA9IDA7Ci0JCXViY191c2VyY250IC09IDE7Ci0JfQogfQogCiB2b2lkIGZsdXNoX3RocmVhZCh2b2lkKQogewotI2lmIGRlZmluZWQoQ09ORklHX1NIX0ZQVSkKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisKKwlmbHVzaF9wdHJhY2VfaHdfYnJlYWtwb2ludCh0c2spOworCisjaWYgZGVmaW5lZChDT05GSUdfU0hfRlBVKQogCS8qIEZvcmdldCBsYXp5IEZQVSBzdGF0ZSAqLwogCWNsZWFyX2ZwdSh0c2ssIHRhc2tfcHRfcmVncyh0c2spKTsKIAljbGVhcl91c2VkX21hdGgoKTsKQEAgLTIwOSwxMSArMTcyLDEwIEBACiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IHRhc2tfdGhyZWFkX2luZm8ocCk7CiAJc3RydWN0IHB0X3JlZ3MgKmNoaWxkcmVnczsKLSNpZiBkZWZpbmVkKENPTkZJR19TSF9EU1ApCi0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19TSF9EU1ApCisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCiAJaWYgKGlzX2RzcF9lbmFibGVkKHRzaykpIHsKIAkJLyogV2UgY2FuIHVzZSB0aGUgX19zYXZlX2RzcCBvciBqdXN0IGNvcHkgdGhlIHN0cnVjdDoKIAkJICogX19zYXZlX2RzcChwKTsKQEAgLTI0NCw1MyArMjA2LDExIEBACiAJcC0+dGhyZWFkLnNwID0gKHVuc2lnbmVkIGxvbmcpIGNoaWxkcmVnczsKIAlwLT50aHJlYWQucGMgPSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fZm9yazsKIAotCXAtPnRocmVhZC51YmNfcGMgPSAwOworCW1lbXNldChwLT50aHJlYWQucHRyYWNlX2JwcywgMCwgc2l6ZW9mKHAtPnRocmVhZC5wdHJhY2VfYnBzKSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyogVHJhY2luZyBieSB1c2VyIGJyZWFrIGNvbnRyb2xsZXIuICAqLwotc3RhdGljIHZvaWQgdWJjX3NldF90cmFjaW5nKGludCBhc2lkLCB1bnNpZ25lZCBsb25nIHBjKQotewotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotCXVuc2lnbmVkIGxvbmcgdmFsOwotCi0JdmFsID0gKFVCQ19DQlJfSURfSU5TVCB8IFVCQ19DQlJfUldfUkVBRCB8IFVCQ19DQlJfQ0UpOwotCXZhbCB8PSAoVUJDX0NCUl9BSUUgfCBVQkNfQ0JSX0FJVl9TRVQoYXNpZCkpOwotCi0JY3RybF9vdXRsKHZhbCwgVUJDX0NCUjApOwotCWN0cmxfb3V0bChwYywgIFVCQ19DQVIwKTsKLQljdHJsX291dGwoMHgwLCBVQkNfQ0FNUjApOwotCWN0cmxfb3V0bCgweDAsIFVCQ19DQkNSKTsKLQotCXZhbCA9IChVQkNfQ1JSX1JFUyB8IFVCQ19DUlJfUENCIHwgVUJDX0NSUl9CSUUpOwotCWN0cmxfb3V0bCh2YWwsIFVCQ19DUlIwKTsKLQotCS8qIFJlYWQgVUJDIHJlZ2lzdGVyIHRoYXQgd2Ugd3JvdGUgbGFzdCwgZm9yIGNoZWNraW5nIHVwZGF0ZSAqLwotCXZhbCA9IGN0cmxfaW5sKFVCQ19DUlIwKTsKLQotI2Vsc2UJLyogQ09ORklHX0NQVV9TSDRBICovCi0JY3RybF9vdXRsKHBjLCBVQkNfQkFSQSk7Ci0KLSNpZmRlZiBDT05GSUdfTU1VCi0JY3RybF9vdXRiKGFzaWQsIFVCQ19CQVNSQSk7Ci0jZW5kaWYKLQotCWN0cmxfb3V0bCgwLCBVQkNfQkFNUkEpOwotCi0JaWYgKGN1cnJlbnRfY3B1X2RhdGEudHlwZSA9PSBDUFVfU0g3NzI5IHx8Ci0JICAgIGN1cnJlbnRfY3B1X2RhdGEudHlwZSA9PSBDUFVfU0g3NzEwIHx8Ci0JICAgIGN1cnJlbnRfY3B1X2RhdGEudHlwZSA9PSBDUFVfU0g3NzEyIHx8Ci0JICAgIGN1cnJlbnRfY3B1X2RhdGEudHlwZSA9PSBDUFVfU0g3MjAzKXsKLQkJY3RybF9vdXR3KEJCUl9JTlNUIHwgQkJSX1JFQUQgfCBCQlJfQ1BVLCBVQkNfQkJSQSk7Ci0JCWN0cmxfb3V0bChCUkNSX1BDQkEgfCBCUkNSX1BDVEUsIFVCQ19CUkNSKTsKLQl9IGVsc2UgewotCQljdHJsX291dHcoQkJSX0lOU1QgfCBCQlJfUkVBRCwgVUJDX0JCUkEpOwotCQljdHJsX291dHcoQlJDUl9QQ0JBLCBVQkNfQlJDUik7Ci0JfQotI2VuZGlmCS8qIENPTkZJR19DUFVfU0g0QSAqLwotfQotCiAvKgogICoJc3dpdGNoX3RvKHgseSkgc2hvdWxkIHN3aXRjaCB0YXNrcyBmcm9tIHggdG8geS4KICAqCkBAIC0zMDQsNyArMjI0LDcgQEAKIAogCS8qIHdlJ3JlIGdvaW5nIHRvIHVzZSB0aGlzIHNvb24sIGFmdGVyIGEgZmV3IGV4cGVuc2l2ZSB0aGluZ3MgKi8KIAlpZiAobmV4dC0+ZnB1X2NvdW50ZXIgPiA1KQotCQlwcmVmZXRjaCgmbmV4dF90LT5mcHUuaGFyZCk7CisJCXByZWZldGNoKG5leHRfdC0+eHN0YXRlKTsKIAogI2lmZGVmIENPTkZJR19NTVUKIAkvKgpAQCAtMzE2LDMyICsyMzYsMTMgQEAKIAkJICAgICA6ICJyIiAodGFza190aHJlYWRfaW5mbyhuZXh0KSkpOwogI2VuZGlmCiAKLQkvKiBJZiBubyB0YXNrcyBhcmUgdXNpbmcgdGhlIFVCQywgd2UncmUgZG9uZSAqLwotCWlmICh1YmNfdXNlcmNudCA9PSAwKQotCQkvKiBJZiBubyB0YXNrcyBhcmUgdXNpbmcgdGhlIFVCQywgd2UncmUgZG9uZSAqLzsKLQllbHNlIGlmIChuZXh0LT50aHJlYWQudWJjX3BjICYmIG5leHQtPm1tKSB7Ci0JCWludCBhc2lkID0gMDsKLSNpZmRlZiBDT05GSUdfTU1VCi0JCWFzaWQgfD0gY3B1X2FzaWQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBuZXh0LT5tbSk7Ci0jZW5kaWYKLQkJdWJjX3NldF90cmFjaW5nKGFzaWQsIG5leHQtPnRocmVhZC51YmNfcGMpOwotCX0gZWxzZSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0JCWN0cmxfb3V0bChVQkNfQ0JSX0lOSVQsIFVCQ19DQlIwKTsKLQkJY3RybF9vdXRsKFVCQ19DUlJfSU5JVCwgVUJDX0NSUjApOwotI2Vsc2UKLQkJY3RybF9vdXR3KDAsIFVCQ19CQlJBKTsKLQkJY3RybF9vdXR3KDAsIFVCQ19CQlJCKTsKLSNlbmRpZgotCX0KLQogCS8qCiAJICogSWYgdGhlIHRhc2sgaGFzIHVzZWQgZnB1IHRoZSBsYXN0IDUgdGltZXNsaWNlcywganVzdCBkbyBhIGZ1bGwKIAkgKiByZXN0b3JlIG9mIHRoZSBtYXRoIHN0YXRlIGltbWVkaWF0ZWx5IHRvIGF2b2lkIHRoZSB0cmFwOyB0aGUKIAkgKiBjaGFuY2VzIG9mIG5lZWRpbmcgRlBVIHNvb24gYXJlIG9idmlvdXNseSBoaWdoIG5vdwogCSAqLwogCWlmIChuZXh0LT5mcHVfY291bnRlciA+IDUpCi0JCWZwdV9zdGF0ZV9yZXN0b3JlKHRhc2tfcHRfcmVncyhuZXh0KSk7CisJCV9fZnB1X3N0YXRlX3Jlc3RvcmUoKTsKIAogCXJldHVybiBwcmV2OwogfQpAQCAtNDM0LDIwICszMzUsMyBAQAogCiAJcmV0dXJuIHBjOwogfQotCi1hc21saW5rYWdlIHZvaWQgYnJlYWtfcG9pbnRfdHJhcCh2b2lkKQotewotCS8qIENsZWFyIHRyYWNpbmcuICAqLwotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotCWN0cmxfb3V0bChVQkNfQ0JSX0lOSVQsIFVCQ19DQlIwKTsKLQljdHJsX291dGwoVUJDX0NSUl9JTklULCBVQkNfQ1JSMCk7Ci0jZWxzZQotCWN0cmxfb3V0dygwLCBVQkNfQkJSQSk7Ci0JY3RybF9vdXR3KDAsIFVCQ19CQlJCKTsKLQljdHJsX291dGwoMCwgVUJDX0JSQ1IpOwotI2VuZGlmCi0JY3VycmVudC0+dGhyZWFkLnViY19wYyA9IDA7Ci0JdWJjX3VzZXJjbnQgLT0gMTsKLQotCWZvcmNlX3NpZyhTSUdUUkFQLCBjdXJyZW50KTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCBlYzc5ZmFmLi5jOTA5NTdhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jCkBAIC0zMiwzMCArMzIsNyBAQAogCiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxhc3RfdGFza191c2VkX21hdGggPSBOVUxMOwogCi12b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICogX191bnVzZWQpCi17Ci0JZXh0ZXJuIHZvaWQgcGh5c19zdGV4dCh2b2lkKTsKLQotCXBoeXNfc3RleHQoKTsKLX0KLQotdm9pZCBtYWNoaW5lX2hhbHQodm9pZCkKLXsKLQlmb3IgKDs7KTsKLX0KLQotdm9pZCBtYWNoaW5lX3Bvd2VyX29mZih2b2lkKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJInNsZWVwXG5cdCIKLQkJInN5bmNpXG5cdCIKLQkJIm5vcDtub3A7bm9wO25vcFxuXHQiCi0JKTsKLQotCXBhbmljKCJVbmV4cGVjdGVkIHdha2V1cCFcbiIpOwotfQotCi12b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCit2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgYWgsIGFsLCBiaCwgYmwsIGNoLCBjbDsKIApAQCAtNDEwLDcgKzM4Nyw3IEBACiAJCQlyZWdzLT5zciB8PSBTUl9GRDsKIAkJfQogCi0JCW1lbWNweShmcHUsICZ0c2stPnRocmVhZC5mcHUuaGFyZCwgc2l6ZW9mKCpmcHUpKTsKKwkJbWVtY3B5KGZwdSwgJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwgc2l6ZW9mKCpmcHUpKTsKIAl9CiAKIAlyZXR1cm4gZnB2YWxpZDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMKaW5kZXggOWJlMzVmMy4uYzYyNWNkYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMKQEAgLTIsNyArMiw3IEBACiAgKiBTdXBlckggcHJvY2VzcyB0cmFjaW5nCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBLYXogS29qaW1hICYgTmlpYmUgWXV0YWthCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA4ICBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogQXVkaXQgc3VwcG9ydCBieSBZdWljaGkgTmFrYW11cmEgPHluYWthbUBoaXRhY2hpc29mdC5qcD4KICAqCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8bGludXgvcmVnc2V0Lmg+CisjaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC02MywzMyArNjQsNjQgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBwdHJhY2VfdHJpZ2dlcmVkKHN0cnVjdCBwZXJmX2V2ZW50ICpicCwgaW50IG5taSwKKwkJICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKKworCS8qCisJICogRGlzYWJsZSB0aGUgYnJlYWtwb2ludCByZXF1ZXN0IGhlcmUgc2luY2UgcHRyYWNlIGhhcyBkZWZpbmVkIGEKKwkgKiBvbmUtc2hvdCBiZWhhdmlvdXIgZm9yIGJyZWFrcG9pbnQgZXhjZXB0aW9ucy4KKwkgKi8KKwlhdHRyID0gYnAtPmF0dHI7CisJYXR0ci5kaXNhYmxlZCA9IHRydWU7CisJbW9kaWZ5X3VzZXJfaHdfYnJlYWtwb2ludChicCwgJmF0dHIpOworfQorCitzdGF0aWMgaW50IHNldF9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQgPSAmdHNrLT50aHJlYWQ7CisJc3RydWN0IHBlcmZfZXZlbnQgKmJwOworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKKworCWJwID0gdGhyZWFkLT5wdHJhY2VfYnBzWzBdOworCWlmICghYnApIHsKKwkJaHdfYnJlYWtwb2ludF9pbml0KCZhdHRyKTsKKworCQlhdHRyLmJwX2FkZHIgPSBhZGRyOworCQlhdHRyLmJwX2xlbiA9IEhXX0JSRUFLUE9JTlRfTEVOXzI7CisJCWF0dHIuYnBfdHlwZSA9IEhXX0JSRUFLUE9JTlRfUjsKKworCQlicCA9IHJlZ2lzdGVyX3VzZXJfaHdfYnJlYWtwb2ludCgmYXR0ciwgcHRyYWNlX3RyaWdnZXJlZCwgdHNrKTsKKwkJaWYgKElTX0VSUihicCkpCisJCQlyZXR1cm4gUFRSX0VSUihicCk7CisKKwkJdGhyZWFkLT5wdHJhY2VfYnBzWzBdID0gYnA7CisJfSBlbHNlIHsKKwkJaW50IGVycjsKKworCQlhdHRyID0gYnAtPmF0dHI7CisJCWF0dHIuYnBfYWRkciA9IGFkZHI7CisJCWVyciA9IG1vZGlmeV91c2VyX2h3X2JyZWFrcG9pbnQoYnAsICZhdHRyKTsKKwkJaWYgKHVubGlrZWx5KGVycikpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCiB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7Ci0JLyogTmV4dCBzY2hlZHVsaW5nIHdpbGwgc2V0IHVwIFVCQyAqLwotCWlmIChjaGlsZC0+dGhyZWFkLnViY19wYyA9PSAwKQotCQl1YmNfdXNlcmNudCArPSAxOwotCi0JY2hpbGQtPnRocmVhZC51YmNfcGMgPSBnZXRfc3RhY2tfbG9uZyhjaGlsZCwKLQkJCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpKTsKKwl1bnNpZ25lZCBsb25nIHBjID0gZ2V0X3N0YWNrX2xvbmcoY2hpbGQsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwYykpOwogCiAJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NJTkdMRVNURVApOworCisJc2V0X3NpbmdsZV9zdGVwKGNoaWxkLCBwYyk7CiB9CiAKIHZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7CiAJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU0lOR0xFU1RFUCk7Ci0KLQkvKgotCSAqIEVuc3VyZSB0aGUgVUJDIGlzIG5vdCBwcm9ncmFtbWVkIGF0IHRoZSBuZXh0IGNvbnRleHQgc3dpdGNoLgotCSAqCi0JICogTm9ybWFsbHkgdGhpcyBpcyBub3QgbmVlZGVkIGJ1dCB0aGVyZSBhcmUgc2VxdWVuY2VzIHN1Y2ggYXMKLQkgKiBzaW5nbGVzdGVwLCBzaWduYWwgZGVsaXZlcnksIGFuZCBjb250aW51ZSB0aGF0IGxlYXZlIHRoZQotCSAqIHViY19wYyBub24temVybyBsZWFkaW5nIHRvIHNwdXJpb3VzIFNJR1RSQVBzLgotCSAqLwotCWlmIChjaGlsZC0+dGhyZWFkLnViY19wYyAhPSAwKSB7Ci0JCXViY191c2VyY250IC09IDE7Ci0JCWNoaWxkLT50aHJlYWQudWJjX3BjID0gMDsKLQl9CiB9CiAKIC8qCkBAIC0xNjMsMTAgKzE5NSwxMCBAQAogCiAJaWYgKChib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKQogCQlyZXR1cm4gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKLQkJCQkJICAgJnRhcmdldC0+dGhyZWFkLmZwdS5oYXJkLCAwLCAtMSk7CisJCQkJCSAgICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsIDAsIC0xKTsKIAogCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAotCQkJCSAgICZ0YXJnZXQtPnRocmVhZC5mcHUuc29mdCwgMCwgLTEpOworCQkJCSAgICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPnNvZnRmcHUsIDAsIC0xKTsKIH0KIAogc3RhdGljIGludCBmcHJlZ3Nfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LApAQCAtMTg0LDEwICsyMTYsMTAgQEAKIAogCWlmICgoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKIAkJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKLQkJCQkJICAmdGFyZ2V0LT50aHJlYWQuZnB1LmhhcmQsIDAsIC0xKTsKKwkJCQkJICAmdGFyZ2V0LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LCAwLCAtMSk7CiAKIAlyZXR1cm4gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAotCQkJCSAgJnRhcmdldC0+dGhyZWFkLmZwdS5zb2Z0LCAwLCAtMSk7CisJCQkJICAmdGFyZ2V0LT50aHJlYWQueHN0YXRlLT5zb2Z0ZnB1LCAwLCAtMSk7CiB9CiAKIHN0YXRpYyBpbnQgZnByZWdzX2FjdGl2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKQEAgLTMzMyw3ICszNjUsNyBAQAogCQkJCWVsc2UKIAkJCQkJdG1wID0gMDsKIAkJCX0gZWxzZQotCQkJCXRtcCA9ICgobG9uZyAqKSZjaGlsZC0+dGhyZWFkLmZwdSkKKwkJCQl0bXAgPSAoKGxvbmcgKiljaGlsZC0+dGhyZWFkLnhzdGF0ZSkKIAkJCQkJWyhhZGRyIC0gKGxvbmcpJmR1bW15LT5mcHUpID4+IDJdOwogCQl9IGVsc2UgaWYgKGFkZHIgPT0gKGxvbmcpICZkdW1teS0+dV9mcHZhbGlkKQogCQkJdG1wID0gISF0c2tfdXNlZF9tYXRoKGNoaWxkKTsKQEAgLTM2Miw3ICszOTQsNyBAQAogCQllbHNlIGlmIChhZGRyID49IChsb25nKSAmZHVtbXktPmZwdSAmJgogCQkJIGFkZHIgPCAobG9uZykgJmR1bW15LT51X2ZwdmFsaWQpIHsKIAkJCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aChjaGlsZCk7Ci0JCQkoKGxvbmcgKikmY2hpbGQtPnRocmVhZC5mcHUpCisJCQkoKGxvbmcgKiljaGlsZC0+dGhyZWFkLnhzdGF0ZSkKIAkJCQlbKGFkZHIgLSAobG9uZykmZHVtbXktPmZwdSkgPj4gMl0gPSBkYXRhOwogCQkJcmV0ID0gMDsKIAkJfSBlbHNlIGlmIChhZGRyID09IChsb25nKSAmZHVtbXktPnVfZnB2YWxpZCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYwppbmRleCA4NzNlYmRjLi41ZmQ2NDRkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYwpAQCAtODgsNyArODgsNyBAQAogCQlyZWdzLT5zciB8PSBTUl9GRDsKIAl9CiAKLQl0bXAgPSAoKGxvbmcgKikmdGFzay0+dGhyZWFkLmZwdSlbYWRkciAvIHNpemVvZih1bnNpZ25lZCBsb25nKV07CisJdG1wID0gKChsb25nICopdGFzay0+dGhyZWFkLnhzdGF0ZSlbYWRkciAvIHNpemVvZih1bnNpZ25lZCBsb25nKV07CiAJcmV0dXJuIHRtcDsKIH0KIApAQCAtMTE0LDggKzExNCw3IEBACiAJcmVncyA9IChzdHJ1Y3QgcHRfcmVncyopKCh1bnNpZ25lZCBjaGFyICopdGFzayArIFRIUkVBRF9TSVpFKSAtIDE7CiAKIAlpZiAoIXRza191c2VkX21hdGgodGFzaykpIHsKLQkJZnBpbml0KCZ0YXNrLT50aHJlYWQuZnB1LmhhcmQpOwotCQlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgodGFzayk7CisJCWluaXRfZnB1KHRhc2spOwogCX0gZWxzZSBpZiAobGFzdF90YXNrX3VzZWRfbWF0aCA9PSB0YXNrKSB7CiAJCWVuYWJsZV9mcHUoKTsKIAkJc2F2ZV9mcHUodGFzayk7CkBAIC0xMjQsNyArMTIzLDcgQEAKIAkJcmVncy0+c3IgfD0gU1JfRkQ7CiAJfQogCi0JKChsb25nICopJnRhc2stPnRocmVhZC5mcHUpW2FkZHIgLyBzaXplb2YodW5zaWduZWQgbG9uZyldID0gZGF0YTsKKwkoKGxvbmcgKil0YXNrLT50aHJlYWQueHN0YXRlKVthZGRyIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXSA9IGRhdGE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzMyw2ICsxMzIsOCBAQAogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gY2hpbGQtPnRocmVhZC51cmVnczsKIAogCXJlZ3MtPnNyIHw9IFNSX1NTVEVQOwkvKiBhdXRvLXJlc2V0dGluZyB1cG9uIGV4Y2VwdGlvbiAqLworCisJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NJTkdMRVNURVApOwogfQogCiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQpAQCAtMTQwLDYgKzE0MSw4IEBACiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBjaGlsZC0+dGhyZWFkLnVyZWdzOwogCiAJcmVncy0+c3IgJj0gflNSX1NTVEVQOworCisJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU0lOR0xFU1RFUCk7CiB9CiAKIHN0YXRpYyBpbnQgZ2VucmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCkBAIC0yMjIsNyArMjI1LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAotCQkJCSAgICZ0YXJnZXQtPnRocmVhZC5mcHUuaGFyZCwgMCwgLTEpOworCQkJCSAgICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsIDAsIC0xKTsKIH0KIAogc3RhdGljIGludCBmcHJlZ3Nfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LApAQCAtMjM5LDcgKzI0Miw3IEBACiAJc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKHRhcmdldCk7CiAKIAlyZXR1cm4gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAotCQkJCSAgJnRhcmdldC0+dGhyZWFkLmZwdS5oYXJkLCAwLCAtMSk7CisJCQkJICAmdGFyZ2V0LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LCAwLCAtMSk7CiB9CiAKIHN0YXRpYyBpbnQgZnByZWdzX2FjdGl2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKQEAgLTQ1NCw2ICs0NTcsOCBAQAogCiBhc21saW5rYWdlIHZvaWQgZG9fc3lzY2FsbF90cmFjZV9sZWF2ZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwlpbnQgc3RlcDsKKwogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKIAkJYXVkaXRfc3lzY2FsbF9leGl0KEFVRElUU0NfUkVTVUxUKHJlZ3MtPnJlZ3NbOV0pLAogCQkJCSAgIHJlZ3MtPnJlZ3NbOV0pOwpAQCAtNDYxLDggKzQ2Niw5IEBACiAJaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0VQT0lOVCkpKQogCQl0cmFjZV9zeXNfZXhpdChyZWdzLCByZWdzLT5yZWdzWzldKTsKIAotCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKLQkJdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7CisJc3RlcCA9IHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApOworCWlmIChzdGVwIHx8IHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQorCQl0cmFjZWhvb2tfcmVwb3J0X3N5c2NhbGxfZXhpdChyZWdzLCBzdGVwKTsKIH0KIAogLyogQ2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLwpAQCAtNDc5LDkgKzQ4NSwxMCBAQAogfQogCiAvKiBDYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICovCi1hc21saW5rYWdlIHZvaWQgZG9fc29mdHdhcmVfYnJlYWtfcG9pbnQodW5zaWduZWQgbG9uZyBsb25nIHZlYywKLQkJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitCVUlMRF9UUkFQX0hBTkRMRVIoYnJlYWtwb2ludCkKIHsKKwlUUkFQX0hBTkRMRVJfREVDTDsKKwogCS8qIFdlIG5lZWQgdG8gZm9yd2FyZCBzdGVwIHRoZSBQQywgdG8gY291bnRlcmFjdCB0aGUgYmFja3N0ZXAgZG9uZQogCSAgIGluIHNpZ25hbC5jLiAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3JlYm9vdC5jIGIvYXJjaC9zaC9rZXJuZWwvcmVib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmY2E2NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL3JlYm9vdC5jCkBAIC0wLDAgKzEsOTggQEAKKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaWZkZWYgQ09ORklHX1NVUEVSSDMyCisjaW5jbHVkZSA8YXNtL3dhdGNoZG9nLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKwordm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCk7CitFWFBPUlRfU1lNQk9MKHBtX3Bvd2VyX29mZik7CisKKyNpZmRlZiBDT05GSUdfU1VQRVJIMzIKK3N0YXRpYyB2b2lkIHdhdGNoZG9nX3RyaWdnZXJfaW1tZWRpYXRlKHZvaWQpCit7CisJc2hfd2R0X3dyaXRlX2NudCgweEZGKTsKKwlzaF93ZHRfd3JpdGVfY3NyKDB4QzIpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIG5hdGl2ZV9tYWNoaW5lX3Jlc3RhcnQoY2hhciAqIF9fdW51c2VkKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwkvKiBBZGRyZXNzIGVycm9yIHdpdGggU1IuQkw9MSBmaXJzdC4gKi8KKwl0cmlnZ2VyX2FkZHJlc3NfZXJyb3IoKTsKKworI2lmZGVmIENPTkZJR19TVVBFUkgzMgorCS8qIElmIHRoYXQgZmFpbHMgb3IgaXMgdW5zdXBwb3J0ZWQsIGdvIGZvciB0aGUgd2F0Y2hkb2cgbmV4dC4gKi8KKwl3YXRjaGRvZ190cmlnZ2VyX2ltbWVkaWF0ZSgpOworI2VuZGlmCisKKwkvKgorCSAqIEdpdmUgdXAgYW5kIHNsZWVwLgorCSAqLworCXdoaWxlICgxKQorCQljcHVfc2xlZXAoKTsKK30KKworc3RhdGljIHZvaWQgbmF0aXZlX21hY2hpbmVfc2h1dGRvd24odm9pZCkKK3sKKwlzbXBfc2VuZF9zdG9wKCk7Cit9CisKK3N0YXRpYyB2b2lkIG5hdGl2ZV9tYWNoaW5lX3Bvd2VyX29mZih2b2lkKQoreworCWlmIChwbV9wb3dlcl9vZmYpCisJCXBtX3Bvd2VyX29mZigpOworfQorCitzdGF0aWMgdm9pZCBuYXRpdmVfbWFjaGluZV9oYWx0KHZvaWQpCit7CisJLyogc3RvcCBvdGhlciBjcHVzICovCisJbWFjaGluZV9zaHV0ZG93bigpOworCisJLyogc3RvcCB0aGlzIGNwdSAqLworCXN0b3BfdGhpc19jcHUoTlVMTCk7Cit9CisKK3N0cnVjdCBtYWNoaW5lX29wcyBtYWNoaW5lX29wcyA9IHsKKwkucG93ZXJfb2ZmCT0gbmF0aXZlX21hY2hpbmVfcG93ZXJfb2ZmLAorCS5zaHV0ZG93bgk9IG5hdGl2ZV9tYWNoaW5lX3NodXRkb3duLAorCS5yZXN0YXJ0CT0gbmF0aXZlX21hY2hpbmVfcmVzdGFydCwKKwkuaGFsdAkJPSBuYXRpdmVfbWFjaGluZV9oYWx0LAorI2lmZGVmIENPTkZJR19LRVhFQworCS5jcmFzaF9zaHV0ZG93biA9IG5hdGl2ZV9tYWNoaW5lX2NyYXNoX3NodXRkb3duLAorI2VuZGlmCit9OworCit2b2lkIG1hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCit7CisJbWFjaGluZV9vcHMucG93ZXJfb2ZmKCk7Cit9CisKK3ZvaWQgbWFjaGluZV9zaHV0ZG93bih2b2lkKQoreworCW1hY2hpbmVfb3BzLnNodXRkb3duKCk7Cit9CisKK3ZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKwltYWNoaW5lX29wcy5yZXN0YXJ0KGNtZCk7Cit9CisKK3ZvaWQgbWFjaGluZV9oYWx0KHZvaWQpCit7CisJbWFjaGluZV9vcHMuaGFsdCgpOworfQorCisjaWZkZWYgQ09ORklHX0tFWEVDCit2b2lkIG1hY2hpbmVfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJbWFjaGluZV9vcHMuY3Jhc2hfc2h1dGRvd24ocmVncyk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IDhiMGU2OTcuLjM0NTllNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtNDIxLDYgKzQyMSw4IEBACiAKIAlwYXJzZV9lYXJseV9wYXJhbSgpOwogCisJdW5jYWNoZWRfaW5pdCgpOworCiAJcGxhdF9lYXJseV9kZXZpY2Vfc2V0dXAoKTsKIAogCS8qIExldCBlYXJseXByaW50ayBvdXRwdXQgZWFybHkgY29uc29sZSBtZXNzYWdlcyAqLwpAQCAtNDQ5LDE3ICs0NTEsMTUgQEAKICNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQogCWNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOwogI2VuZGlmCisJcGFnaW5nX2luaXQoKTsKKwlwbWJfaW5pdCgpOworCisJaW9yZW1hcF9maXhlZF9pbml0KCk7CiAKIAkvKiBQZXJmb3JtIHRoZSBtYWNoaW5lIHNwZWNpZmljIGluaXRpYWxpc2F0aW9uICovCiAJaWYgKGxpa2VseShzaF9tdi5tdl9zZXR1cCkpCiAJCXNoX212Lm12X3NldHVwKGNtZGxpbmVfcCk7CiAKLQlwYWdpbmdfaW5pdCgpOwotCi0jaWZkZWYgQ09ORklHX1BNQl9FTkFCTEUKLQlwbWJfaW5pdCgpOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfU01QCiAJcGxhdF9zbXBfc2V0dXAoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2hfYmlvcy5jIGIvYXJjaC9zaC9rZXJuZWwvc2hfYmlvcy5jCmluZGV4IGM4NTJmNzguLjQ3NDc1Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NoX2Jpb3MuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaF9iaW9zLmMKQEAgLTEsMTkgKzEsMzAgQEAKIC8qCi0gKiAgbGludXgvYXJjaC9zaC9rZXJuZWwvc2hfYmlvcy5jCiAgKiAgQyBpbnRlcmZhY2UgZm9yIHRyYXBwaW5nIGludG8gdGhlIHN0YW5kYXJkIExpbnV4U0ggQklPUy4KICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEdyZWcgQmFua3MsIE1pdGNoIERhdmlzCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBOaWliZSBZdXRha2EKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgIE0uIFIuIEJyb3duCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAxMCAgUGF1bCBNdW5kdAogICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL3NoX2Jpb3MuaD4KIAogI2RlZmluZSBCSU9TX0NBTExfQ09OU09MRV9XUklURQkJMAogI2RlZmluZSBCSU9TX0NBTExfRVRIX05PREVfQUREUgkJMTAKICNkZWZpbmUgQklPU19DQUxMX1NIVVRET1dOCQkxMQotI2RlZmluZSBCSU9TX0NBTExfQ0hBUl9PVVQJCTB4MWYJLyogVE9ETzogaGFjayAqLwogI2RlZmluZSBCSU9TX0NBTExfR0RCX0RFVEFDSAkJMHhmZgogCit2b2lkICpnZGJfdmJyX3ZlY3RvciA9IE5VTEw7CisKIHN0YXRpYyBpbmxpbmUgbG9uZyBzaF9iaW9zX2NhbGwobG9uZyBmdW5jLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLAogCQkJCSAgICBsb25nIGFyZzMpCiB7CkBAIC0yMyw2ICszNCw5IEBACiAJcmVnaXN0ZXIgbG9uZyByNiBfX2FzbV9fKCJyNiIpID0gYXJnMjsKIAlyZWdpc3RlciBsb25nIHI3IF9fYXNtX18oInI3IikgPSBhcmczOwogCisJaWYgKCFnZGJfdmJyX3ZlY3RvcikKKwkJcmV0dXJuIC1FTk9TWVM7CisKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygidHJhcGEJIzB4M2YiOiI9eiIocjApCiAJCQkgICAgIDoiMCIocjApLCAiciIocjQpLCAiciIocjUpLCAiciIocjYpLCAiciIocjcpCiAJCQkgICAgIDoibWVtb3J5Iik7CkBAIC0zNCwxMSArNDgsNiBAQAogCXNoX2Jpb3NfY2FsbChCSU9TX0NBTExfQ09OU09MRV9XUklURSwgKGxvbmcpYnVmLCAobG9uZylsZW4sIDAsIDApOwogfQogCi12b2lkIHNoX2Jpb3NfY2hhcl9vdXQoY2hhciBjaCkKLXsKLQlzaF9iaW9zX2NhbGwoQklPU19DQUxMX0NIQVJfT1VULCBjaCwgMCwgMCwgMCk7Ci19Ci0KIHZvaWQgc2hfYmlvc19nZGJfZGV0YWNoKHZvaWQpCiB7CiAJc2hfYmlvc19jYWxsKEJJT1NfQ0FMTF9HREJfREVUQUNILCAwLCAwLCAwLCAwKTsKQEAgLTU1LDMgKzY0LDEwOSBAQAogewogCXNoX2Jpb3NfY2FsbChCSU9TX0NBTExfU0hVVERPV04sIGhvdywgMCwgMCwgMCk7CiB9CisKKy8qCisgKiBSZWFkIHRoZSBvbGQgdmFsdWUgb2YgdGhlIFZCUiByZWdpc3RlciB0byBpbml0aWFsaXNlIHRoZSB2ZWN0b3IKKyAqIHRocm91Z2ggd2hpY2ggZGVidWcgYW5kIEJJT1MgdHJhcHMgYXJlIGRlbGVnYXRlZCBieSB0aGUgTGludXggdHJhcAorICogaGFuZGxlci4KKyAqLwordm9pZCBzaF9iaW9zX3Zicl9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YnI7CisKKwlpZiAodW5saWtlbHkoZ2RiX3Zicl92ZWN0b3IpKQorCQlyZXR1cm47CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0YyB2YnIsICUwIiA6ICI9ciIgKHZicikpOworCisJaWYgKHZicikgeworCQlnZGJfdmJyX3ZlY3RvciA9ICh2b2lkICopKHZiciArIDB4MTAwKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJTZXR0aW5nIEdEQiB0cmFwIHZlY3RvciB0byAlcFxuIiwKKwkJICAgICAgIGdkYl92YnJfdmVjdG9yKTsKKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJTSC1CSU9TIG5vdCBkZXRlY3RlZFxuIik7Cit9CisKKy8qKgorICogc2hfYmlvc192YnJfcmVsb2FkIC0gUmUtbG9hZCB0aGUgc3lzdGVtIFZCUiBmcm9tIHRoZSBCSU9TIHZlY3Rvci4KKyAqCisgKiBUaGlzIGNhbiBiZSB1c2VkIGJ5IHNhdmUvcmVzdG9yZSBjb2RlIHRvIHJlaW5pdGlhbGl6ZSB0aGUgc3lzdGVtIFZCUgorICogZnJvbSB0aGUgZml4ZWQgQklPUyBWQlIuIEEgbm8tb3AgaWYgbm8gQklPUyBWQlIgaXMga25vd24uCisgKi8KK3ZvaWQgc2hfYmlvc192YnJfcmVsb2FkKHZvaWQpCit7CisJaWYgKGdkYl92YnJfdmVjdG9yKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCQkibGRjICUwLCB2YnIiCisJCQk6CisJCQk6ICJyIiAoKCh1bnNpZ25lZCBsb25nKSBnZGJfdmJyX3ZlY3RvcikgLSAweDEwMCkKKwkJCTogIm1lbW9yeSIKKwkJKTsKK30KKworLyoKKyAqCVByaW50IGEgc3RyaW5nIHRocm91Z2ggdGhlIEJJT1MKKyAqLworc3RhdGljIHZvaWQgc2hfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsCisJCQkJIHVuc2lnbmVkIGNvdW50KQoreworCXNoX2Jpb3NfY29uc29sZV93cml0ZShzLCBjb3VudCk7Cit9CisKKy8qCisgKglTZXR1cCBpbml0aWFsIGJhdWQvYml0cy9wYXJpdHkuIFdlIGRvIHR3byB0aGluZ3MgaGVyZToKKyAqCS0gY29uc3RydWN0IGEgY2ZsYWcgc2V0dGluZyBmb3IgdGhlIGZpcnN0IHJzX29wZW4oKQorICoJLSBpbml0aWFsaXplIHRoZSBzZXJpYWwgcG9ydAorICoJUmV0dXJuIG5vbi16ZXJvIGlmIHdlIGRpZG4ndCBmaW5kIGEgc2VyaWFsIHBvcnQuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNoX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQoreworCWludAljZmxhZyA9IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisKKwkvKgorCSAqCU5vdyBjb25zdHJ1Y3QgYSBjZmxhZyBzZXR0aW5nLgorCSAqCVRPRE86IHRoaXMgaXMgYSB0b3RhbGx5IGJvZ3VzIGNmbGFnLCBhcyB3ZSBoYXZlCisJICoJbm8gaWRlYSB3aGF0IHNlcmlhbCBzZXR0aW5ncyB0aGUgQklPUyBpcyB1c2luZywgb3IKKwkgKglldmVuIGlmIGl0cyB1c2luZyB0aGUgc2VyaWFsIHBvcnQgYXQgYWxsLgorCSAqLworCWNmbGFnIHw9IEIxMTUyMDAgfCBDUzggfCAvKm5vIHBhcml0eSovMDsKKworCWNvLT5jZmxhZyA9IGNmbGFnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBiaW9zX2NvbnNvbGUgPSB7CisJLm5hbWUJCT0gImJpb3MiLAorCS53cml0ZQkJPSBzaF9jb25zb2xlX3dyaXRlLAorCS5zZXR1cAkJPSBzaF9jb25zb2xlX3NldHVwLAorCS5mbGFncwkJPSBDT05fUFJJTlRCVUZGRVIsCisJLmluZGV4CQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBjb25zb2xlICplYXJseV9jb25zb2xlOworCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9lYXJseV9wcmludGsoY2hhciAqYnVmKQoreworCWludCBrZWVwX2Vhcmx5ID0gMDsKKworCWlmICghYnVmKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJzdHIoYnVmLCAia2VlcCIpKQorCQlrZWVwX2Vhcmx5ID0gMTsKKworCWlmICghc3RybmNtcChidWYsICJiaW9zIiwgNCkpCisJCWVhcmx5X2NvbnNvbGUgPSAmYmlvc19jb25zb2xlOworCisJaWYgKGxpa2VseShlYXJseV9jb25zb2xlKSkgeworCQlpZiAoa2VlcF9lYXJseSkKKwkJCWVhcmx5X2NvbnNvbGUtPmZsYWdzICY9IH5DT05fQk9PVDsKKwkJZWxzZQorCQkJZWFybHlfY29uc29sZS0+ZmxhZ3MgfD0gQ09OX0JPT1Q7CisJCXJlZ2lzdGVyX2NvbnNvbGUoZWFybHlfY29uc29sZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgiZWFybHlwcmludGsiLCBzZXR1cF9lYXJseV9wcmludGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYwppbmRleCAxMjgxNWNlLi41NzljZDJjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJCXJldHVybiAwOwogCiAJc2V0X3VzZWRfbWF0aCgpOwotCXJldHVybiBfX2NvcHlfZnJvbV91c2VyKCZ0c2stPnRocmVhZC5mcHUuaGFyZCwgJnNjLT5zY19mcHJlZ3NbMF0sCisJcmV0dXJuIF9fY29weV9mcm9tX3VzZXIoJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwgJnNjLT5zY19mcHJlZ3NbMF0sCiAJCQkJc2l6ZW9mKGxvbmcpKigxNioyKzIpKTsKIH0KIApAQCAtMTc1LDcgKzE3NSw3IEBACiAJY2xlYXJfdXNlZF9tYXRoKCk7CiAKIAl1bmxhenlfZnB1KHRzaywgcmVncyk7Ci0JcmV0dXJuIF9fY29weV90b191c2VyKCZzYy0+c2NfZnByZWdzWzBdLCAmdHNrLT50aHJlYWQuZnB1LmhhcmQsCisJcmV0dXJuIF9fY29weV90b191c2VyKCZzYy0+c2NfZnByZWdzWzBdLCAmdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LAogCQkJICAgICAgc2l6ZW9mKGxvbmcpKigxNioyKzIpKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfU0hfRlBVICovCkBAIC01MjgsNyArNTI4LDcgQEAKIAkJLyogZmFsbHRocm91Z2ggKi8KIAkJY2FzZSAtRVJFU1RBUlROT0lOVFI6CiAJCQlyZWdzLT5yZWdzWzBdID0gc2F2ZV9yMDsKLQkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoY3RybF9pbncocmVncy0+cGMgLSA0KSk7CisJCQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKF9fcmF3X3JlYWR3KHJlZ3MtPnBjIC0gNCkpOwogCQkJYnJlYWs7CiAJfQogfQpAQCAtNjI2LDkgKzYyNiw5IEBACiAJCSAgICByZWdzLT5yZWdzWzBdID09IC1FUkVTVEFSVFNZUyB8fAogCQkgICAgcmVncy0+cmVnc1swXSA9PSAtRVJFU1RBUlROT0lOVFIpIHsKIAkJCXJlZ3MtPnJlZ3NbMF0gPSBzYXZlX3IwOwotCQkJcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZShjdHJsX2ludyhyZWdzLT5wYyAtIDQpKTsKKwkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoX19yYXdfcmVhZHcocmVncy0+cGMgLSA0KSk7CiAJCX0gZWxzZSBpZiAocmVncy0+cmVnc1swXSA9PSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLKSB7Ci0JCQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKGN0cmxfaW53KHJlZ3MtPnBjIC0gNCkpOworCQkJcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZShfX3Jhd19yZWFkdyhyZWdzLT5wYyAtIDQpKTsKIAkJCXJlZ3MtPnJlZ3NbM10gPSBfX05SX3Jlc3RhcnRfc3lzY2FsbDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF82NC5jIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzY0LmMKaW5kZXggY2U3NmRiZC4uNWE5ZjFmMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzY0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzY0LmMKQEAgLTExOCw3ICsxMTgsOSBAQAogCQkJICogY2xlYXIgdGhlIFRTX1JFU1RPUkVfU0lHTUFTSyBmbGFnLgogCQkJICovCiAJCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyAmPSB+VFNfUkVTVE9SRV9TSUdNQVNLOwotCQkJdHJhY2Vob29rX3NpZ25hbF9oYW5kbGVyKHNpZ25yLCAmaW5mbywgJmthLCByZWdzLCAwKTsKKworCQkJdHJhY2Vob29rX3NpZ25hbF9oYW5kbGVyKHNpZ25yLCAmaW5mbywgJmthLCByZWdzLAorCQkJCQl0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVTVEVQKSk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0KQEAgLTI5NSw3ICsyOTcsNyBAQAogCQlyZWdzLT5zciB8PSBTUl9GRDsKIAl9CiAKLQllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigmY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLCAmc2MtPnNjX2ZwcmVnc1swXSwKKwllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigmY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwgJnNjLT5zY19mcHJlZ3NbMF0sCiAJCQkJKHNpemVvZihsb25nIGxvbmcpICogMzIpICsgKHNpemVvZihpbnQpICogMSkpOwogCiAJcmV0dXJuIGVycjsKQEAgLTMyMCw3ICszMjIsNyBAQAogCQlyZWdzLT5zciB8PSBTUl9GRDsKIAl9CiAKLQllcnIgfD0gX19jb3B5X3RvX3VzZXIoJnNjLT5zY19mcHJlZ3NbMF0sICZjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQsCisJZXJyIHw9IF9fY29weV90b191c2VyKCZzYy0+c2NfZnByZWdzWzBdLCAmY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwKIAkJCSAgICAgIChzaXplb2YobG9uZyBsb25nKSAqIDMyKSArIChzaXplb2YoaW50KSAqIDEpKTsKIAljbGVhcl91c2VkX21hdGgoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc21wLmMgYi9hcmNoL3NoL2tlcm5lbC9zbXAuYwppbmRleCA5ODNlMDc5Li5lMTI0Y2Y3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zbXAuYwpAQCAtMTYxLDE1ICsxNjEsNiBAQAogCXBsYXRfc2VuZF9pcGkoY3B1LCBTTVBfTVNHX1JFU0NIRURVTEUpOwogfQogCi1zdGF0aWMgdm9pZCBzdG9wX3RoaXNfY3B1KHZvaWQgKnVudXNlZCkKLXsKLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotCWZvciAoOzspCi0JCWNwdV9yZWxheCgpOwotfQotCiB2b2lkIHNtcF9zZW5kX3N0b3Aodm9pZCkKIHsKIAlzbXBfY2FsbF9mdW5jdGlvbihzdG9wX3RoaXNfY3B1LCAwLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RyYXBzLmMgYi9hcmNoL3NoL2tlcm5lbC90cmFwcy5jCmluZGV4IDdiMDM2MzMuLjA4MzBjMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYwpAQCAtNTgsNyArNTgsNyBAQAogCVRSQVBfSEFORExFUl9ERUNMOwogCiAJLyogUmV3aW5kICovCi0JcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZShjdHJsX2ludyhyZWdzLT5wYyAtIDQpKTsKKwlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKF9fcmF3X3JlYWR3KHJlZ3MtPnBjIC0gNCkpOwogCiAJaWYgKG5vdGlmeV9kaWUoRElFX1RSQVAsICJkZWJ1ZyB0cmFwIiwgcmVncywgMCwgdmVjICYgMHhmZiwKIAkJICAgICAgIFNJR1RSQVApID09IE5PVElGWV9TVE9QKQpAQCAtNzUsNyArNzUsNyBAQAogCVRSQVBfSEFORExFUl9ERUNMOwogCiAJLyogUmV3aW5kICovCi0JcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZShjdHJsX2ludyhyZWdzLT5wYyAtIDQpKTsKKwlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKF9fcmF3X3JlYWR3KHJlZ3MtPnBjIC0gNCkpOwogCiAJaWYgKG5vdGlmeV9kaWUoRElFX1RSQVAsICJidWcgdHJhcCIsIHJlZ3MsIDAsIFRSQVBBX0JVR19PUENPREUgJiAweGZmLAogCQkgICAgICAgU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYwppbmRleCA4NjYzOWJlLi5jM2Q4NmZhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKQEAgLTI0LDExICsyNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2FsaWdubWVudC5oPgogI2luY2x1ZGUgPGFzbS9mcHUuaD4KICNpbmNsdWRlIDxhc20va3Byb2Jlcy5oPgogCkBAIC00Nyw3MyArNDYsNiBAQAogI2RlZmluZSBUUkFQX0lMTEVHQUxfU0xPVF9JTlNUCTEzCiAjZW5kaWYKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2VfdXNlcjsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlX3N5czsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlX2hhbGY7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZV93b3JkOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2VfZHdvcmQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZV9tdWx0aTsKLS8qIGJpdGZpZWxkOiAxOiB3YXJuIDI6IGZpeHVwIDQ6IHNpZ25hbCAtPiBjb21iaW5hdGlvbnMgMnw0ICYmIDF8Mnw0IGFyZSBub3QKLSAgIHZhbGlkISAqLwotc3RhdGljIGludCBzZV91c2VybW9kZSA9IDM7Ci0vKiAwOiBubyB3YXJuaW5nIDE6IHByaW50IGEgd2FybmluZyBtZXNzYWdlLCBkaXNhYmxlZCBieSBkZWZhdWx0ICovCi1zdGF0aWMgaW50IHNlX2tlcm5tb2RlX3dhcm47Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIGNvbnN0IGNoYXIgKnNlX3VzZXJtb2RlX2FjdGlvbltdID0gewotCSJpZ25vcmVkIiwKLQkid2FybiIsCi0JImZpeHVwIiwKLQkiZml4dXArd2FybiIsCi0JInNpZ25hbCIsCi0JInNpZ25hbCt3YXJuIgotfTsKLQotc3RhdGljIGludCBhbGlnbm1lbnRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQlzZXFfcHJpbnRmKG0sICJVc2VyOlx0XHQlbHVcbiIsIHNlX3VzZXIpOwotCXNlcV9wcmludGYobSwgIlN5c3RlbTpcdFx0JWx1XG4iLCBzZV9zeXMpOwotCXNlcV9wcmludGYobSwgIkhhbGY6XHRcdCVsdVxuIiwgc2VfaGFsZik7Ci0Jc2VxX3ByaW50ZihtLCAiV29yZDpcdFx0JWx1XG4iLCBzZV93b3JkKTsKLQlzZXFfcHJpbnRmKG0sICJEV29yZDpcdFx0JWx1XG4iLCBzZV9kd29yZCk7Ci0Jc2VxX3ByaW50ZihtLCAiTXVsdGk6XHRcdCVsdVxuIiwgc2VfbXVsdGkpOwotCXNlcV9wcmludGYobSwgIlVzZXIgZmF1bHRzOlx0JWkgKCVzKVxuIiwgc2VfdXNlcm1vZGUsCi0JCQlzZV91c2VybW9kZV9hY3Rpb25bc2VfdXNlcm1vZGVdKTsKLQlzZXFfcHJpbnRmKG0sICJLZXJuZWwgZmF1bHRzOlx0JWkgKGZpeHVwJXMpXG4iLCBzZV9rZXJubW9kZV93YXJuLAotCQkJc2Vfa2Vybm1vZGVfd2FybiA/ICIrd2FybiIgOiAiIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWxpZ25tZW50X3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYWxpZ25tZW50X3Byb2Nfc2hvdywgTlVMTCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFsaWdubWVudF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAotCQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQotewotCWludCAqZGF0YSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKLQljaGFyIG1vZGU7Ci0KLQlpZiAoY291bnQgPiAwKSB7Ci0JCWlmIChnZXRfdXNlcihtb2RlLCBidWZmZXIpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChtb2RlID49ICcwJyAmJiBtb2RlIDw9ICc1JykKLQkJCSpkYXRhID0gbW9kZSAtICcwJzsKLQl9Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhbGlnbm1lbnRfcHJvY19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSBhbGlnbm1lbnRfcHJvY19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCi0JLndyaXRlCQk9IGFsaWdubWVudF9wcm9jX3dyaXRlLAotfTsKLSNlbmRpZgotCiBzdGF0aWMgdm9pZCBkdW1wX21lbShjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgYm90dG9tLCB1bnNpZ25lZCBsb25nIHRvcCkKIHsKIAl1bnNpZ25lZCBsb25nIHA7CkBAIC0yNjUsMTAgKzE5NywxMCBAQAogCWNvdW50ID0gMTw8KGluc3RydWN0aW9uJjMpOwogCiAJc3dpdGNoIChjb3VudCkgewotCWNhc2UgMTogc2VfaGFsZiAgKz0gMTsgYnJlYWs7Ci0JY2FzZSAyOiBzZV93b3JkICArPSAxOyBicmVhazsKLQljYXNlIDQ6IHNlX2R3b3JkICs9IDE7IGJyZWFrOwotCWNhc2UgODogc2VfbXVsdGkgKz0gMTsgYnJlYWs7IC8qID8/PyAqLworCWNhc2UgMTogaW5jX3VuYWxpZ25lZF9ieXRlX2FjY2VzcygpOyBicmVhazsKKwljYXNlIDI6IGluY191bmFsaWduZWRfd29yZF9hY2Nlc3MoKTsgYnJlYWs7CisJY2FzZSA0OiBpbmNfdW5hbGlnbmVkX2R3b3JkX2FjY2VzcygpOyBicmVhazsKKwljYXNlIDg6IGluY191bmFsaWduZWRfbXVsdGlfYWNjZXNzKCk7IGJyZWFrOwogCX0KIAogCXJldCA9IC1FRkFVTFQ7CkBAIC00NTIsMTggKzM4NCw4IEBACiAJcm0gPSByZWdzLT5yZWdzW2luZGV4XTsKIAogCS8qIHNob3V0IGFib3V0IGZpeHVwcyAqLwotCWlmICghZXhwZWN0ZWQpIHsKLQkJaWYgKHVzZXJfbW9kZShyZWdzKSAmJiAoc2VfdXNlcm1vZGUgJiAxKSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCi0JCQlwcl9ub3RpY2UoIkZpeGluZyB1cCB1bmFsaWduZWQgdXNlcnNwYWNlIGFjY2VzcyAiCi0JCQkJICAiaW4gXCIlc1wiIHBpZD0lZCBwYz0weCVwIGlucz0weCUwNGh4XG4iLAotCQkJCSAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksCi0JCQkJICAodm9pZCAqKXJlZ3MtPnBjLCBpbnN0cnVjdGlvbik7Ci0JCWVsc2UgaWYgKHNlX2tlcm5tb2RlX3dhcm4gJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQotCQkJcHJfbm90aWNlKCJGaXhpbmcgdXAgdW5hbGlnbmVkIGtlcm5lbCBhY2Nlc3MgIgotCQkJCSAgImluIFwiJXNcIiBwaWQ9JWQgcGM9MHglcCBpbnM9MHglMDRoeFxuIiwKLQkJCQkgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLAotCQkJCSAgKHZvaWQgKilyZWdzLT5wYywgaW5zdHJ1Y3Rpb24pOwotCX0KKwlpZiAoIWV4cGVjdGVkKQorCQl1bmFsaWduZWRfZml4dXBzX25vdGlmeShjdXJyZW50LCBpbnN0cnVjdGlvbiwgcmVncyk7CiAKIAlyZXQgPSAtRUZBVUxUOwogCXN3aXRjaCAoaW5zdHJ1Y3Rpb24mMHhGMDAwKSB7CkBAIC02MTYsMTAgKzUzOCwxMCBAQAogCiAJaWYgKHVzZXJfbW9kZShyZWdzKSkgewogCQlpbnQgc2lfY29kZSA9IEJVU19BRFJFUlI7CisJCXVuc2lnbmVkIGludCB1c2VyX2FjdGlvbjsKIAogCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KLQkJc2VfdXNlciArPSAxOworCQlpbmNfdW5hbGlnbmVkX3VzZXJfYWNjZXNzKCk7CiAKIAkJc2V0X2ZzKFVTRVJfRFMpOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJmluc3RydWN0aW9uLCAoaW5zbl9zaXplX3QgKikocmVncy0+cGMgJiB+MSksCkBAIC02MzAsMTYgKzU1MiwxMiBAQAogCQlzZXRfZnMob2xkZnMpOwogCiAJCS8qIHNob3V0IGFib3V0IHVzZXJzcGFjZSBmaXh1cHMgKi8KLQkJaWYgKHNlX3VzZXJtb2RlICYgMSkKLQkJCXByaW50ayhLRVJOX05PVElDRSAiVW5hbGlnbmVkIHVzZXJzcGFjZSBhY2Nlc3MgIgotCQkJICAgICAgICJpbiBcIiVzXCIgcGlkPSVkIHBjPTB4JXAgaW5zPTB4JTA0aHhcbiIsCi0JCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAodm9pZCAqKXJlZ3MtPnBjLAotCQkJICAgICAgIGluc3RydWN0aW9uKTsKKwkJdW5hbGlnbmVkX2ZpeHVwc19ub3RpZnkoY3VycmVudCwgaW5zdHJ1Y3Rpb24sIHJlZ3MpOwogCi0JCWlmIChzZV91c2VybW9kZSAmIDIpCisJCXVzZXJfYWN0aW9uID0gdW5hbGlnbmVkX3VzZXJfYWN0aW9uKCk7CisJCWlmICh1c2VyX2FjdGlvbiAmIFVNX0ZJWFVQKQogCQkJZ290byBmaXh1cDsKLQotCQlpZiAoc2VfdXNlcm1vZGUgJiA0KQorCQlpZiAodXNlcl9hY3Rpb24gJiBVTV9TSUdOQUwpCiAJCQlnb3RvIHVzcGFjZV9zZWd2OwogCQllbHNlIHsKIAkJCS8qIGlnbm9yZSAqLwpAQCAtNjU5LDcgKzU3Nyw3IEBACiAJCQkJCSAgICAgICZ1c2VyX21lbV9hY2Nlc3MsIDApOwogCQlzZXRfZnMob2xkZnMpOwogCi0JCWlmICh0bXA9PTApCisJCWlmICh0bXAgPT0gMCkKIAkJCXJldHVybjsgLyogc29ydGVkICovCiB1c3BhY2Vfc2VndjoKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJTZW5kaW5nIFNJR0JVUyB0byBcIiVzXCIgZHVlIHRvIHVuYWxpZ25lZCAiCkBAIC02NzIsNyArNTkwLDcgQEAKIAkJaW5mby5zaV9hZGRyID0gKHZvaWQgX191c2VyICopYWRkcmVzczsKIAkJZm9yY2Vfc2lnX2luZm8oU0lHQlVTLCAmaW5mbywgY3VycmVudCk7CiAJfSBlbHNlIHsKLQkJc2Vfc3lzICs9IDE7CisJCWluY191bmFsaWduZWRfa2VybmVsX2FjY2VzcygpOwogCiAJCWlmIChyZWdzLT5wYyAmIDEpCiAJCQlkaWUoInVuYWxpZ25lZCBwcm9ncmFtIGNvdW50ZXIiLCByZWdzLCBlcnJvcl9jb2RlKTsKQEAgLTY4NywxMSArNjA1LDcgQEAKIAkJCWRpZSgiaW5zbiBmYXVsdGluZyBpbiBkb19hZGRyZXNzX2Vycm9yIiwgcmVncywgMCk7CiAJCX0KIAotCQlpZiAoc2Vfa2Vybm1vZGVfd2FybikKLQkJCXByaW50ayhLRVJOX05PVElDRSAiVW5hbGlnbmVkIGtlcm5lbCBhY2Nlc3MgIgotCQkJICAgICAgICJvbiBiZWhhbGYgb2YgXCIlc1wiIHBpZD0lZCBwYz0weCVwIGlucz0weCUwNGh4XG4iLAotCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgKHZvaWQgKilyZWdzLT5wYywKLQkJCSAgICAgICBpbnN0cnVjdGlvbik7CisJCXVuYWxpZ25lZF9maXh1cHNfbm90aWZ5KGN1cnJlbnQsIGluc3RydWN0aW9uLCByZWdzKTsKIAogCQloYW5kbGVfdW5hbGlnbmVkX2FjY2VzcyhpbnN0cnVjdGlvbiwgcmVncywKIAkJCQkJJnVzZXJfbWVtX2FjY2VzcywgMCk7CkBAIC04NzYsMzUgKzc5MCwxMCBAQAogCWRpZV9pZl9rZXJuZWwoImV4Y2VwdGlvbiIsIHJlZ3MsIGV4KTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpCi12b2lkICpnZGJfdmJyX3ZlY3RvcjsKLQotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBnZGJfdmJyX2luaXQodm9pZCkKLXsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHZicjsKLQotCS8qCi0JICogUmVhZCB0aGUgb2xkIHZhbHVlIG9mIHRoZSBWQlIgcmVnaXN0ZXIgdG8gaW5pdGlhbGlzZQotCSAqIHRoZSB2ZWN0b3IgdGhyb3VnaCB3aGljaCBkZWJ1ZyBhbmQgQklPUyB0cmFwcyBhcmUKLQkgKiBkZWxlZ2F0ZWQgYnkgdGhlIExpbnV4IHRyYXAgaGFuZGxlci4KLQkgKi8KLQlhc20gdm9sYXRpbGUoInN0YyB2YnIsICUwIiA6ICI9ciIgKHZicikpOwotCi0JZ2RiX3Zicl92ZWN0b3IgPSAodm9pZCAqKSh2YnIgKyAweDEwMCk7Ci0JcHJpbnRrKCJTZXR0aW5nIEdEQiB0cmFwIHZlY3RvciB0byAweCUwOGx4XG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylnZGJfdmJyX3ZlY3Rvcik7Ci19Ci0jZW5kaWYKLQogdm9pZCBfX2NwdWluaXQgcGVyX2NwdV90cmFwX2luaXQodm9pZCkKIHsKIAlleHRlcm4gdm9pZCAqdmJyX2Jhc2U7CiAKLSNpZmRlZiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUwotCWlmIChyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpID09IDApCi0JCWdkYl92YnJfaW5pdCgpOwotI2VuZGlmCi0KIAkvKiBOT1RFOiBUaGUgVkJSIHZhbHVlIHNob3VsZCBiZSBhdCBQMQogCSAgIChvciBQMiwgdmlydHVyYWwgImZpeGVkIiBhZGRyZXNzIHNwYWNlKS4KIAkgICBJdCdzIGRlZmluaXRlbHkgc2hvdWxkIG5vdCBpbiBwaHlzaWNhbCBhZGRyZXNzLiAgKi8KQEAgLTk1NiwxMSArODQ1LDggQEAKICNlbmRpZgogCiAjaWZkZWYgVFJBUF9VQkMKLQlzZXRfZXhjZXB0aW9uX3RhYmxlX3ZlYyhUUkFQX1VCQywgYnJlYWtfcG9pbnRfdHJhcCk7CisJc2V0X2V4Y2VwdGlvbl90YWJsZV92ZWMoVFJBUF9VQkMsIGJyZWFrcG9pbnRfdHJhcF9oYW5kbGVyKTsKICNlbmRpZgotCi0JLyogU2V0dXAgVkJSIGZvciBib290IGNwdSAqLwotCXBlcl9jcHVfdHJhcF9pbml0KCk7CiB9CiAKIHZvaWQgc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyAqc3ApCkBAIC05ODUsMzQgKzg3MSwzIEBACiAJc2hvd19zdGFjayhOVUxMLCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0woZHVtcF9zdGFjayk7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotLyoKLSAqIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciBzeXNjdGxfaW5pdCwgb3RoZXJ3aXNlIHN5cy8gd2lsbCBiZQotICogb3ZlcndyaXR0ZW4uICBBY3R1YWxseSwgdGhpcyBzaG91bGRuJ3QgYmUgaW4gc3lzLyBhdCBhbGwgc2luY2UKLSAqIGl0IGlzbid0IGEgc3lzY3RsLCBhbmQgaXQgZG9lc24ndCBjb250YWluIHN5c2N0bCBpbmZvcm1hdGlvbi4KLSAqIFdlIG5vdyBsb2NhdGUgaXQgaW4gL3Byb2MvY3B1L2FsaWdubWVudCBpbnN0ZWFkLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhbGlnbm1lbnRfaW5pdCh2b2lkKQotewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyLCAqcmVzOwotCi0JZGlyID0gcHJvY19ta2RpcigiY3B1IiwgTlVMTCk7Ci0JaWYgKCFkaXIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmVzID0gcHJvY19jcmVhdGVfZGF0YSgiYWxpZ25tZW50IiwgU19JV1VTUiB8IFNfSVJVR08sIGRpciwKLQkJCSAgICAgICAmYWxpZ25tZW50X3Byb2NfZm9wcywgJnNlX3VzZXJtb2RlKTsKLQlpZiAoIXJlcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLSAgICAgICAgcmVzID0gcHJvY19jcmVhdGVfZGF0YSgia2VybmVsX2FsaWdubWVudCIsIFNfSVdVU1IgfCBTX0lSVUdPLCBkaXIsCi0JCQkgICAgICAgJmFsaWdubWVudF9wcm9jX2ZvcHMsICZzZV9rZXJubW9kZV93YXJuKTsKLSAgICAgICAgaWYgKCFyZXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXR1cm4gMDsKLX0KLQotZnNfaW5pdGNhbGwoYWxpZ25tZW50X2luaXQpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90cmFwc182NC5jIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfNjQuYwppbmRleCBkODZmNTMxLi5lM2Y5MmViIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90cmFwc182NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzY0LmMKQEAgLTYxMSwxOSArNjExLDE5IEBACiAKIAkJc3dpdGNoICh3aWR0aF9zaGlmdCkgewogCQljYXNlIDI6Ci0JCQljdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tkZXN0cmVnXSA9IGJ1ZmxvOworCQkJY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW2Rlc3RyZWddID0gYnVmbG87CiAJCQlicmVhazsKIAkJY2FzZSAzOgogCQkJaWYgKGRvX3BhaXJlZF9sb2FkKSB7Ci0JCQkJY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbZGVzdHJlZ10gPSBidWZsbzsKLQkJCQljdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tkZXN0cmVnKzFdID0gYnVmaGk7CisJCQkJY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW2Rlc3RyZWddID0gYnVmbG87CisJCQkJY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW2Rlc3RyZWcrMV0gPSBidWZoaTsKIAkJCX0gZWxzZSB7CiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4pCi0JCQkJY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbZGVzdHJlZ10gPSBidWZoaTsKLQkJCQljdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tkZXN0cmVnKzFdID0gYnVmbG87CisJCQkJY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW2Rlc3RyZWddID0gYnVmaGk7CisJCQkJY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW2Rlc3RyZWcrMV0gPSBidWZsbzsKICNlbHNlCi0JCQkJY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbZGVzdHJlZ10gPSBidWZsbzsKLQkJCQljdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tkZXN0cmVnKzFdID0gYnVmaGk7CisJCQkJY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW2Rlc3RyZWddID0gYnVmbG87CisJCQkJY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW2Rlc3RyZWcrMV0gPSBidWZoaTsKICNlbmRpZgogCQkJfQogCQkJYnJlYWs7CkBAIC02ODEsMTkgKzY4MSwxOSBAQAogCiAJCXN3aXRjaCAod2lkdGhfc2hpZnQpIHsKIAkJY2FzZSAyOgotCQkJYnVmbG8gPSBjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tzcmNyZWddOworCQkJYnVmbG8gPSBjdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbc3JjcmVnXTsKIAkJCWJyZWFrOwogCQljYXNlIDM6CiAJCQlpZiAoZG9fcGFpcmVkX2xvYWQpIHsKLQkJCQlidWZsbyA9IGN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW3NyY3JlZ107Ci0JCQkJYnVmaGkgPSBjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tzcmNyZWcrMV07CisJCQkJYnVmbG8gPSBjdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbc3JjcmVnXTsKKwkJCQlidWZoaSA9IGN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tzcmNyZWcrMV07CiAJCQl9IGVsc2UgewogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOKQotCQkJCWJ1ZmhpID0gY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbc3JjcmVnXTsKLQkJCQlidWZsbyA9IGN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW3NyY3JlZysxXTsKKwkJCQlidWZoaSA9IGN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tzcmNyZWddOworCQkJCWJ1ZmxvID0gY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW3NyY3JlZysxXTsKICNlbHNlCi0JCQkJYnVmbG8gPSBjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tzcmNyZWddOwotCQkJCWJ1ZmhpID0gY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbc3JjcmVnKzFdOworCQkJCWJ1ZmxvID0gY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW3NyY3JlZ107CisJCQkJYnVmaGkgPSBjdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbc3JjcmVnKzFdOwogI2VuZGlmCiAJCQl9CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3NoL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGExZTRlYzIuLjdmOGE3MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMyw3ICszLDcgQEAKICAqIFdyaXR0ZW4gYnkgTmlpYmUgWXV0YWthIGFuZCBQYXVsIE11bmR0CiAgKi8KICNpZmRlZiBDT05GSUdfU1VQRVJINjQKLSNkZWZpbmUgTE9BRF9PRkZTRVQJQ09ORklHX1BBR0VfT0ZGU0VUCisjZGVmaW5lIExPQURfT0ZGU0VUCVBBR0VfT0ZGU0VUCiBPVVRQVVRfQVJDSChzaDpzaDUpCiAjZWxzZQogI2RlZmluZSBMT0FEX09GRlNFVAkwCkBAIC0xNCwxNyArMTQsMTYgQEAKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vdm1saW51eC5sZHMuaD4KIAorI2lmZGVmIENPTkZJR19QTUIKKyAjZGVmaW5lIE1FTU9SWV9PRkZTRVQJMAorI2Vsc2UKKyAjZGVmaW5lIE1FTU9SWV9PRkZTRVQJX19NRU1PUllfU1RBUlQKKyNlbmRpZgorCiBFTlRSWShfc3RhcnQpCiBTRUNUSU9OUwogewotI2lmZGVmIENPTkZJR19QTUJfRklYRUQKLQkuID0gQ09ORklHX1BBR0VfT0ZGU0VUICsgKENPTkZJR19NRU1PUllfU1RBUlQgJiAweDFmZmZmZmZmKSArCi0JICAgIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOwotI2VsaWYgZGVmaW5lZChDT05GSUdfMzJCSVQpCi0JLiA9IENPTkZJR19QQUdFX09GRlNFVCArIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOwotI2Vsc2UKLQkuID0gQ09ORklHX1BBR0VfT0ZGU0VUICsgQ09ORklHX01FTU9SWV9TVEFSVCArIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOwotI2VuZGlmCisJLiA9IFBBR0VfT0ZGU0VUICsgTUVNT1JZX09GRlNFVCArIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOwogCiAJX3RleHQgPSAuOwkJLyogVGV4dCBhbmQgcmVhZC1vbmx5IGRhdGEgKi8KIApAQCAtMzUsMTIgKzM0LDcgQEAKIAkudGV4dCA6IEFUKEFERFIoLnRleHQpIC0gTE9BRF9PRkZTRVQpIHsKIAkJSEVBRF9URVhUCiAJCVRFWFRfVEVYVAotCi0jaWZkZWYgQ09ORklHX1NVUEVSSDY0Ci0JCSooLnRleHQ2NCkKLQkJKigudGV4dC4uU0htZWRpYTMyKQotI2VuZGlmCi0KKwkJRVhUUkFfVEVYVAogCQlTQ0hFRF9URVhUCiAJCUxPQ0tfVEVYVAogCQlLUFJPQkVTX1RFWFQKQEAgLTUxLDI0ICs0NSwxMiBAQAogCX0gPSAweDAwMDkKIAogCUVYQ0VQVElPTl9UQUJMRSgxNikKLQogCU5PVEVTCisKKwlfc2RhdGEgPSAuOwogCVJPX0RBVEEoUEFHRV9TSVpFKQotCi0JLyoKLQkgKiBDb2RlIHdoaWNoIG11c3QgYmUgZXhlY3V0ZWQgdW5jYWNoZWQgYW5kIHRoZSBhc3NvY2lhdGVkIGRhdGEKLQkgKi8KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkudW5jYWNoZWQgOiBBVChBRERSKC51bmNhY2hlZCkgLSBMT0FEX09GRlNFVCkgewotCQlfX3VuY2FjaGVkX3N0YXJ0ID0gLjsKLQkJKigudW5jYWNoZWQudGV4dCkKLQkJKigudW5jYWNoZWQuZGF0YSkKLQkJX191bmNhY2hlZF9lbmQgPSAuOwotCX0KLQogCVJXX0RBVEFfU0VDVElPTihMMV9DQUNIRV9CWVRFUywgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKLQotCV9lZGF0YSA9IC47CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLworCV9lZGF0YSA9IC47CiAKIAlEV0FSRl9FSF9GUkFNRQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL21hdGgtZW11L21hdGguYyBiL2FyY2gvc2gvbWF0aC1lbXUvbWF0aC5jCmluZGV4IGQ2YzE1Y2EuLjFmY2RiMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbWF0aC1lbXUvbWF0aC5jCisrKyBiL2FyY2gvc2gvbWF0aC1lbXUvbWF0aC5jCkBAIC00NzEsMTAgKzQ3MSwxMCBAQAogICoJZGVub3JtYWxfdG9fZG91YmxlIC0gR2l2ZW4gZGVub3JtYWxpemVkIGZsb2F0IG51bWJlciwKICAqCSAgICAgICAgICAgICAgICAgICAgIHN0b3JlIGRvdWJsZSBmbG9hdAogICoKLSAqCUBmcHU6IFBvaW50ZXIgdG8gc2hfZnB1X2hhcmQgc3RydWN0dXJlCisgKglAZnB1OiBQb2ludGVyIHRvIHNoX2ZwdV9zb2Z0IHN0cnVjdHVyZQogICoJQG46IEluZGV4IHRvIEZQIHJlZ2lzdGVyCiAgKi8KLXN0YXRpYyB2b2lkIGRlbm9ybWFsX3RvX2RvdWJsZShzdHJ1Y3Qgc2hfZnB1X2hhcmRfc3RydWN0ICpmcHUsIGludCBuKQorc3RhdGljIHZvaWQgZGVub3JtYWxfdG9fZG91YmxlKHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZwdSwgaW50IG4pCiB7CiAJdW5zaWduZWQgbG9uZyBkdSwgZGw7CiAJdW5zaWduZWQgbG9uZyB4ID0gZnB1LT5mcHVsOwpAQCAtNTUyLDExICs1NTIsMTEgQEAKIAlpZiAoKGZpbnNuICYgMHhmMWZmKSA9PSAweGYwYWQpIHsgLyogZmNudnNkICovCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAotCQlpZiAoKHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyICYgKDEgPDwgMTcpKSkgeworCQlpZiAoKHRzay0+dGhyZWFkLnhzdGF0ZS0+c29mdGZwdS5mcHNjciAmICgxIDw8IDE3KSkpIHsKIAkJCS8qIEZQVSBlcnJvciAqLwotCQkJZGVub3JtYWxfdG9fZG91YmxlICgmdHNrLT50aHJlYWQuZnB1LmhhcmQsCisJCQlkZW5vcm1hbF90b19kb3VibGUgKCZ0c2stPnRocmVhZC54c3RhdGUtPnNvZnRmcHUsCiAJCQkJCSAgICAoZmluc24gPj4gOCkgJiAweGYpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJj0KKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+c29mdGZwdS5mcHNjciAmPQogCQkJCX4oRlBTQ1JfQ0FVU0VfTUFTSyB8IEZQU0NSX0ZMQUdfTUFTSyk7CiAJCQl0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyB8PSBUU19VU0VERlBVOwogCQl9IGVsc2UgewpAQCAtNjE3LDcgKzYxNyw3IEBACiBpbnQgZG9fZnB1X2luc3QodW5zaWduZWQgc2hvcnQgaW5zdCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCXN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZwdSA9ICYodHNrLT50aHJlYWQuZnB1LnNvZnQpOworCXN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZwdSA9ICYodHNrLT50aHJlYWQueHN0YXRlLT5zb2Z0ZnB1KTsKIAogCWlmICghKHRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzICYgVFNfVVNFREZQVSkpIHsKIAkJLyogaW5pdGlhbGl6ZSBvbmNlLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9LY29uZmlnIGIvYXJjaC9zaC9tbS9LY29uZmlnCmluZGV4IDk4NmE3MWIuLjE0NDVjYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vS2NvbmZpZworKysgYi9hcmNoL3NoL21tL0tjb25maWcKQEAgLTc1LDUyICs3NSwyNSBAQAogY29uZmlnIDI5QklUCiAJZGVmX2Jvb2wgITMyQklUCiAJZGVwZW5kcyBvbiBTVVBFUkgzMgorCXNlbGVjdCBVTkNBQ0hFRF9NQVBQSU5HCiAKIGNvbmZpZyAzMkJJVAogCWJvb2wKIAlkZWZhdWx0IHkgaWYgQ1BVX1NINQogCi1jb25maWcgUE1CX0VOQUJMRQorY29uZmlnIFBNQgogCWJvb2wgIlN1cHBvcnQgMzItYml0IHBoeXNpY2FsIGFkZHJlc3NpbmcgdGhyb3VnaCBQTUIiCiAJZGVwZW5kcyBvbiBNTVUgJiYgRVhQRVJJTUVOVEFMICYmIENQVV9TSDRBICYmICFDUFVfU0g0QUxfRFNQCi0JaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUsIHBoeXNpY2FsIGFkZHJlc3Npbmcgd2lsbCBiZSBleHRlbmRlZCB0bwotCSAgMzItYml0cyB0aHJvdWdoIHRoZSBTSC00QSBQTUIuIElmIHRoaXMgaXMgbm90IHNldCwgbGVnYWN5Ci0JICAyOS1iaXQgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIHVzZWQuCi0KLWNob2ljZQotCXByb21wdCAiUE1CIGhhbmRsaW5nIHR5cGUiCi0JZGVwZW5kcyBvbiBQTUJfRU5BQkxFCi0JZGVmYXVsdCBQTUJfRklYRUQKLQotY29uZmlnIFBNQgotCWJvb2wgIlBNQiIKLQlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgQ1BVX1NINEEgJiYgIUNQVV9TSDRBTF9EU1AKLQloZWxwCi0JICBJZiB5b3Ugc2F5IFkgaGVyZSwgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIGV4dGVuZGVkIHRvCi0JICAzMi1iaXRzIHRocm91Z2ggdGhlIFNILTRBIFBNQi4gSWYgdGhpcyBpcyBub3Qgc2V0LCBsZWdhY3kKLQkgIDI5LWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgdXNlZC4KLQotY29uZmlnIFBNQl9GSVhFRAotCWJvb2wgImZpeGVkIFBNQiIKLQlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgQ1BVX1NINEEgJiYgIUNQVV9TSDRBTF9EU1AKIAlzZWxlY3QgMzJCSVQKKwlzZWxlY3QgVU5DQUNIRURfTUFQUElORwogCWhlbHAKLQkgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIGZpeGVkIFBNQiBtYXBwaW5ncyBhcmUgaW5oZXJpdGVkCi0JICBmcm9tIHRoZSBib290IGxvYWRlciwgYW5kIHRoZSBrZXJuZWwgZG9lcyBub3QgYXR0ZW1wdCBkeW5hbWljCi0JICBtYW5hZ2VtZW50LiBUaGlzIGlzIHRoZSBjbG9zZXN0IHRvIGxlZ2FjeSAyOS1iaXQgcGh5c2ljYWwgbW9kZSwKLQkgIGFuZCBhbGxvd3Mgc3lzdGVtcyB0byBzdXBwb3J0IHVwIHRvIDUxMk1pQiBvZiBzeXN0ZW0gbWVtb3J5LgotCi1lbmRjaG9pY2UKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgZXh0ZW5kZWQgdG8KKwkgIDMyLWJpdHMgdGhyb3VnaCB0aGUgU0gtNEEgUE1CLiBJZiB0aGlzIGlzIG5vdCBzZXQsIGxlZ2FjeQorCSAgMjktYml0IHBoeXNpY2FsIGFkZHJlc3Npbmcgd2lsbCBiZSB1c2VkLgogCiBjb25maWcgWDJUTEIKLQlib29sICJFbmFibGUgZXh0ZW5kZWQgVExCIG1vZGUiCi0JZGVwZW5kcyBvbiAoQ1BVX1NIWDIgfHwgQ1BVX1NIWDMpICYmIE1NVSAmJiBFWFBFUklNRU5UQUwKLQloZWxwCi0JICBTZWxlY3RpbmcgdGhpcyBvcHRpb24gd2lsbCBlbmFibGUgdGhlIGV4dGVuZGVkIG1vZGUgb2YgdGhlIFNILVgyCi0JICBUTEIuIEZvciBsZWdhY3kgU0gtWCBiZWhhdmlvdXIgYW5kIGludGVyb3BlcmFiaWxpdHksIHNheSBOLiBGb3IKLQkgIGFsbCBvZiB0aGUgZnVuIG5ldyBmZWF0dXJlcyBhbmQgYSB3aWxsaW5nbGVzcyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCi0JICBzYXkgWS4KKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiAoQ1BVX1NIWDIgfHwgQ1BVX1NIWDMpICYmIE1NVQogCiBjb25maWcgVlNZU0NBTEwKIAlib29sICJTdXBwb3J0IHZzeXNjYWxsIHBhZ2UiCkBAIC0xODgsMTQgKzE2MSwxOSBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHCiAKK2NvbmZpZyBJT1JFTUFQX0ZJWEVECisgICAgICAgZGVmX2Jvb2wgeQorICAgICAgIGRlcGVuZHMgb24gWDJUTEIgfHwgU1VQRVJINjQKKworY29uZmlnIFVOQ0FDSEVEX01BUFBJTkcKKwlib29sCisKIGNob2ljZQogCXByb21wdCAiS2VybmVsIHBhZ2Ugc2l6ZSIKLQlkZWZhdWx0IFBBR0VfU0laRV84S0IgaWYgWDJUTEIKIAlkZWZhdWx0IFBBR0VfU0laRV80S0IKIAogY29uZmlnIFBBR0VfU0laRV80S0IKIAlib29sICI0a0IiCi0JZGVwZW5kcyBvbiAhTU1VIHx8ICFYMlRMQgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGRlZmF1bHQgcGFnZSBzaXplIHVzZWQgYnkgYWxsIFN1cGVySCBDUFVzLgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL01ha2VmaWxlIGIvYXJjaC9zaC9tbS9NYWtlZmlsZQppbmRleCA4YTcwNTM1Li4zZGM4YThhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvbW0vTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgTGludXggU3VwZXJILXNwZWNpZmljIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlci4KICMKIAotb2JqLXkJCQk6PSBjYWNoZS5vIGluaXQubyBjb25zaXN0ZW50Lm8gbW1hcC5vCitvYmoteQkJCTo9IGFsaWdubWVudC5vIGNhY2hlLm8gaW5pdC5vIGNvbnNpc3RlbnQubyBtbWFwLm8KIAogY2FjaGVvcHMtJChDT05GSUdfQ1BVX1NIMikJCTo9IGNhY2hlLXNoMi5vCiBjYWNoZW9wcy0kKENPTkZJR19DUFVfU0gyQSkJCTo9IGNhY2hlLXNoMmEubwpAQCAtMTUsNyArMTUsNyBAQAogCiBtbXUteQkJCTo9IG5vbW11Lm8gZXh0YWJsZV8zMi5vCiBtbXUtJChDT05GSUdfTU1VKQk6PSBleHRhYmxlXyQoQklUUykubyBmYXVsdF8kKEJJVFMpLm8gXAotCQkJICAgaW9yZW1hcF8kKEJJVFMpLm8ga21hcC5vIHRsYmZsdXNoXyQoQklUUykubworCQkJICAgaW9yZW1hcC5vIGttYXAubyBwZ3RhYmxlLm8gdGxiZmx1c2hfJChCSVRTKS5vCiAKIG9iai15CQkJKz0gJChtbXUteSkKIG9iai0kKENPTkZJR19ERUJVR19GUykJKz0gYXNpZHMtZGVidWdmcy5vCkBAIC0yNiwxNSArMjYsMTcgQEAKIAogaWZkZWYgQ09ORklHX01NVQogdGxiLSQoQ09ORklHX0NQVV9TSDMpCQk6PSB0bGItc2gzLm8KLXRsYi0kKENPTkZJR19DUFVfU0g0KQkJOj0gdGxiLXNoNC5vCit0bGItJChDT05GSUdfQ1BVX1NINCkJCTo9IHRsYi1zaDQubyB0bGItdXJiLm8KIHRsYi0kKENPTkZJR19DUFVfU0g1KQkJOj0gdGxiLXNoNS5vCi10bGItJChDT05GSUdfQ1BVX0hBU19QVEVBRVgpCTo9IHRsYi1wdGVhZXgubwordGxiLSQoQ09ORklHX0NQVV9IQVNfUFRFQUVYKQk6PSB0bGItcHRlYWV4Lm8gdGxiLXVyYi5vCiBvYmoteQkJCQkrPSAkKHRsYi15KQogZW5kaWYKIAogb2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkJKz0gaHVnZXRsYnBhZ2Uubwotb2JqLSQoQ09ORklHX1BNQl9FTkFCTEUpCSs9IHBtYi5vCitvYmotJChDT05GSUdfUE1CKQkJKz0gcG1iLm8KIG9iai0kKENPTkZJR19OVU1BKQkJKz0gbnVtYS5vCitvYmotJChDT05GSUdfSU9SRU1BUF9GSVhFRCkJKz0gaW9yZW1hcF9maXhlZC5vCitvYmotJChDT05GSUdfVU5DQUNIRURfTUFQUElORykJKz0gdW5jYWNoZWQubwogCiAjIFNwZWNpYWwgZmxhZ3MgZm9yIGZhdWx0XzY0Lm8uICBUaGlzIHB1dHMgcmVzdHJpY3Rpb25zIG9uIHRoZSBudW1iZXIgb2YKICMgY2FsbGVyLXNhdmUgcmVnaXN0ZXJzIHRoYXQgdGhlIGNvbXBpbGVyIGNhbiB0YXJnZXQgd2hlbiBidWlsZGluZyB0aGlzIGZpbGUuCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2FsaWdubWVudC5jIGIvYXJjaC9zaC9tbS9hbGlnbm1lbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjU5NWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9tbS9hbGlnbm1lbnQuYwpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIEFsaWdubWVudCBhY2Nlc3MgY291bnRlcnMgYW5kIGNvcnJlc3BvbmRpbmcgdXNlci1zcGFjZSBpbnRlcmZhY2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTVCBNaWNyb2VsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDEwIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vYWxpZ25tZW50Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZV91c2VyOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Vfc3lzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2VfaGFsZjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNlX3dvcmQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZV9kd29yZDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNlX211bHRpOworLyogYml0ZmllbGQ6IDE6IHdhcm4gMjogZml4dXAgNDogc2lnbmFsIC0+IGNvbWJpbmF0aW9ucyAyfDQgJiYgMXwyfDQgYXJlIG5vdAorICAgdmFsaWQhICovCitzdGF0aWMgaW50IHNlX3VzZXJtb2RlID0gVU1fV0FSTiB8IFVNX0ZJWFVQOworLyogMDogbm8gd2FybmluZyAxOiBwcmludCBhIHdhcm5pbmcgbWVzc2FnZSwgZGlzYWJsZWQgYnkgZGVmYXVsdCAqLworc3RhdGljIGludCBzZV9rZXJubW9kZV93YXJuOworCitjb3JlX3BhcmFtKGFsaWdubWVudCwgc2VfdXNlcm1vZGUsIGludCwgMDYwMCk7CisKK3ZvaWQgaW5jX3VuYWxpZ25lZF9ieXRlX2FjY2Vzcyh2b2lkKQoreworCXNlX2hhbGYrKzsKK30KKwordm9pZCBpbmNfdW5hbGlnbmVkX3dvcmRfYWNjZXNzKHZvaWQpCit7CisJc2Vfd29yZCsrOworfQorCit2b2lkIGluY191bmFsaWduZWRfZHdvcmRfYWNjZXNzKHZvaWQpCit7CisJc2VfZHdvcmQrKzsKK30KKwordm9pZCBpbmNfdW5hbGlnbmVkX211bHRpX2FjY2Vzcyh2b2lkKQoreworCXNlX211bHRpKys7Cit9CisKK3ZvaWQgaW5jX3VuYWxpZ25lZF91c2VyX2FjY2Vzcyh2b2lkKQoreworCXNlX3VzZXIrKzsKK30KKwordm9pZCBpbmNfdW5hbGlnbmVkX2tlcm5lbF9hY2Nlc3Modm9pZCkKK3sKKwlzZV9zeXMrKzsKK30KKworLyoKKyAqIFRoaXMgZGVmYXVsdHMgdG8gdGhlIGdsb2JhbCBwb2xpY3kgd2hpY2ggY2FuIGJlIHNldCBmcm9tIHRoZSBjb21tYW5kCisgKiBsaW5lLCB3aGlsZSBwcm9jZXNzZXMgY2FuIG92ZXJsb2FkIHRoZWlyIHByZWZlcmVuY2VzIHZpYSBwcmN0bCgpLgorICovCit1bnNpZ25lZCBpbnQgdW5hbGlnbmVkX3VzZXJfYWN0aW9uKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGFjdGlvbiA9IHNlX3VzZXJtb2RlOworCisJaWYgKGN1cnJlbnQtPnRocmVhZC5mbGFncyAmIFNIX1RIUkVBRF9VQUNfU0lHQlVTKSB7CisJCWFjdGlvbiAmPSB+VU1fRklYVVA7CisJCWFjdGlvbiB8PSBVTV9TSUdOQUw7CisJfQorCisJaWYgKGN1cnJlbnQtPnRocmVhZC5mbGFncyAmIFNIX1RIUkVBRF9VQUNfTk9QUklOVCkKKwkJYWN0aW9uICY9IH5VTV9XQVJOOworCisJcmV0dXJuIGFjdGlvbjsKK30KKworaW50IGdldF91bmFsaWduX2N0bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBwdXRfdXNlcih0c2stPnRocmVhZC5mbGFncyAmIFNIX1RIUkVBRF9VQUNfTUFTSywKKwkJCSh1bnNpZ25lZCBpbnQgX191c2VyICopYWRkcik7Cit9CisKK2ludCBzZXRfdW5hbGlnbl9jdGwoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGludCB2YWwpCit7CisJdHNrLT50aHJlYWQuZmxhZ3MgPSAodHNrLT50aHJlYWQuZmxhZ3MgJiB+U0hfVEhSRUFEX1VBQ19NQVNLKSB8CisJCQkgICAgKHZhbCAmIFNIX1RIUkVBRF9VQUNfTUFTSyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdW5hbGlnbmVkX2ZpeHVwc19ub3RpZnkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGluc25fc2l6ZV90IGluc24sCisJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmICh1c2VyX21vZGUocmVncykgJiYgKHNlX3VzZXJtb2RlICYgVU1fV0FSTikgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlwcl9ub3RpY2UoIkZpeGluZyB1cCB1bmFsaWduZWQgdXNlcnNwYWNlIGFjY2VzcyAiCisJCQkgICJpbiBcIiVzXCIgcGlkPSVkIHBjPTB4JXAgaW5zPTB4JTA0aHhcbiIsCisJCQkgIHRzay0+Y29tbSwgdGFza19waWRfbnIodHNrKSwKKwkJCSAgKHZvaWQgKilpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpLCBpbnNuKTsKKwllbHNlIGlmIChzZV9rZXJubW9kZV93YXJuICYmIHByaW50a19yYXRlbGltaXQoKSkKKwkJcHJfbm90aWNlKCJGaXhpbmcgdXAgdW5hbGlnbmVkIGtlcm5lbCBhY2Nlc3MgIgorCQkJICAiaW4gXCIlc1wiIHBpZD0lZCBwYz0weCVwIGlucz0weCUwNGh4XG4iLAorCQkJICB0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksCisJCQkgICh2b2lkICopaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSwgaW5zbik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzZV91c2VybW9kZV9hY3Rpb25bXSA9IHsKKwkiaWdub3JlZCIsCisJIndhcm4iLAorCSJmaXh1cCIsCisJImZpeHVwK3dhcm4iLAorCSJzaWduYWwiLAorCSJzaWduYWwrd2FybiIKK307CisKK3N0YXRpYyBpbnQgYWxpZ25tZW50X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc2VxX3ByaW50ZihtLCAiVXNlcjpcdFx0JWx1XG4iLCBzZV91c2VyKTsKKwlzZXFfcHJpbnRmKG0sICJTeXN0ZW06XHRcdCVsdVxuIiwgc2Vfc3lzKTsKKwlzZXFfcHJpbnRmKG0sICJIYWxmOlx0XHQlbHVcbiIsIHNlX2hhbGYpOworCXNlcV9wcmludGYobSwgIldvcmQ6XHRcdCVsdVxuIiwgc2Vfd29yZCk7CisJc2VxX3ByaW50ZihtLCAiRFdvcmQ6XHRcdCVsdVxuIiwgc2VfZHdvcmQpOworCXNlcV9wcmludGYobSwgIk11bHRpOlx0XHQlbHVcbiIsIHNlX211bHRpKTsKKwlzZXFfcHJpbnRmKG0sICJVc2VyIGZhdWx0czpcdCVpICglcylcbiIsIHNlX3VzZXJtb2RlLAorCQkJc2VfdXNlcm1vZGVfYWN0aW9uW3NlX3VzZXJtb2RlXSk7CisJc2VxX3ByaW50ZihtLCAiS2VybmVsIGZhdWx0czpcdCVpIChmaXh1cCVzKVxuIiwgc2Vfa2Vybm1vZGVfd2FybiwKKwkJCXNlX2tlcm5tb2RlX3dhcm4gPyAiK3dhcm4iIDogIiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsaWdubWVudF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGFsaWdubWVudF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBhbGlnbm1lbnRfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKK3sKKwlpbnQgKmRhdGEgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CisJY2hhciBtb2RlOworCisJaWYgKGNvdW50ID4gMCkgeworCQlpZiAoZ2V0X3VzZXIobW9kZSwgYnVmZmVyKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAobW9kZSA+PSAnMCcgJiYgbW9kZSA8PSAnNScpCisJCQkqZGF0YSA9IG1vZGUgLSAnMCc7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWxpZ25tZW50X3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gYWxpZ25tZW50X3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBhbGlnbm1lbnRfcHJvY193cml0ZSwKK307CisKKy8qCisgKiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgYWZ0ZXIgc3lzY3RsX2luaXQsIG90aGVyd2lzZSBzeXMvIHdpbGwgYmUKKyAqIG92ZXJ3cml0dGVuLiAgQWN0dWFsbHksIHRoaXMgc2hvdWxkbid0IGJlIGluIHN5cy8gYXQgYWxsIHNpbmNlCisgKiBpdCBpc24ndCBhIHN5c2N0bCwgYW5kIGl0IGRvZXNuJ3QgY29udGFpbiBzeXNjdGwgaW5mb3JtYXRpb24uCisgKiBXZSBub3cgbG9jYXRlIGl0IGluIC9wcm9jL2NwdS9hbGlnbm1lbnQgaW5zdGVhZC4KKyAqLworc3RhdGljIGludCBfX2luaXQgYWxpZ25tZW50X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRpciwgKnJlczsKKworCWRpciA9IHByb2NfbWtkaXIoImNwdSIsIE5VTEwpOworCWlmICghZGlyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcyA9IHByb2NfY3JlYXRlX2RhdGEoImFsaWdubWVudCIsIFNfSVdVU1IgfCBTX0lSVUdPLCBkaXIsCisJCQkgICAgICAgJmFsaWdubWVudF9wcm9jX2ZvcHMsICZzZV91c2VybW9kZSk7CisJaWYgKCFyZXMpCisJCXJldHVybiAtRU5PTUVNOworCisgICAgICAgIHJlcyA9IHByb2NfY3JlYXRlX2RhdGEoImtlcm5lbF9hbGlnbm1lbnQiLCBTX0lXVVNSIHwgU19JUlVHTywgZGlyLAorCQkJICAgICAgICZhbGlnbm1lbnRfcHJvY19mb3BzLCAmc2Vfa2Vybm1vZGVfd2Fybik7CisgICAgICAgIGlmICghcmVzKQorICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9Citmc19pbml0Y2FsbChhbGlnbm1lbnRfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYyBiL2FyY2gvc2gvbW0vY2FjaGUtZGVidWdmcy5jCmluZGV4IDViYTA2N2IuLjY5MGVkMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtZGVidWdmcy5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUtZGVidWdmcy5jCkBAIC0yMiw4ICsyMiw3IEBACiAJQ0FDSEVfVFlQRV9VTklGSUVELAogfTsKIAotc3RhdGljIGludCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBjYWNoZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsCi0JCQkJCQkgIHZvaWQgKml0ZXIpCitzdGF0aWMgaW50IGNhY2hlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqaXRlcikKIHsKIAl1bnNpZ25lZCBpbnQgY2FjaGVfdHlwZSA9ICh1bnNpZ25lZCBpbnQpZmlsZS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY2FjaGVfaW5mbyAqY2FjaGU7CkBAIC0zNyw3ICszNiw3IEBACiAJICovCiAJanVtcF90b191bmNhY2hlZCgpOwogCi0JY2NyID0gY3RybF9pbmwoQ0NSKTsKKwljY3IgPSBfX3Jhd19yZWFkbChDQ1IpOwogCWlmICgoY2NyICYgQ0NSX0NBQ0hFX0VOQUJMRSkgPT0gMCkgewogCQliYWNrX3RvX2NhY2hlZCgpOwogCkBAIC05MCw3ICs4OSw3IEBACiAJCWZvciAoYWRkciA9IGFkZHJzdGFydCwgbGluZSA9IDA7CiAJCSAgICAgYWRkciA8IGFkZHJzdGFydCArIHdheXNpemU7CiAJCSAgICAgYWRkciArPSBjYWNoZS0+bGluZXN6LCBsaW5lKyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgZGF0YSA9IGN0cmxfaW5sKGFkZHIpOworCQkJdW5zaWduZWQgbG9uZyBkYXRhID0gX19yYXdfcmVhZGwoYWRkcik7CiAKIAkJCS8qIENoZWNrIHRoZSBWIGJpdCwgaWdub3JlIGludmFsaWQgY2FjaGVsaW5lcyAqLwogCQkJaWYgKChkYXRhICYgMSkgPT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2gyLmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoMi5jCmluZGV4IDY5OWE3MWYuLmRlZmNmNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2gyLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDIuYwpAQCAtMjgsMTAgKzI4LDEwIEBACiAJCXVuc2lnbmVkIGxvbmcgYWRkciA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAodiAmIDB4MDAwMDBmZjApOwogCQlpbnQgd2F5OwogCQlmb3IgKHdheSA9IDA7IHdheSA8IDQ7IHdheSsrKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGRhdGEgPSAgY3RybF9pbmwoYWRkciB8ICh3YXkgPDwgMTIpKTsKKwkJCXVuc2lnbmVkIGxvbmcgZGF0YSA9ICBfX3Jhd19yZWFkbChhZGRyIHwgKHdheSA8PCAxMikpOwogCQkJaWYgKChkYXRhICYgQ0FDSEVfUEhZU0FERFJfTUFTSykgPT0gKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSkgewogCQkJCWRhdGEgJj0gflNIX0NBQ0hFX1VQREFURUQ7Ci0JCQkJY3RybF9vdXRsKGRhdGEsIGFkZHIgfCAod2F5IDw8IDEyKSk7CisJCQkJX19yYXdfd3JpdGVsKGRhdGEsIGFkZHIgfCAod2F5IDw8IDEyKSk7CiAJCQl9CiAJCX0KIAl9CkBAIC00Nyw3ICs0Nyw3IEBACiAJCSYgfihMMV9DQUNIRV9CWVRFUy0xKTsKIAogCWZvciAodiA9IGJlZ2luOyB2IDwgZW5kOyB2Kz1MMV9DQUNIRV9CWVRFUykKLQkJY3RybF9vdXRsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCisJCV9fcmF3X3dyaXRlbCgodiAmIENBQ0hFX1BIWVNBRERSX01BU0spLAogCQkJICBDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgKHYgJiAweDAwMDAwZmYwKSB8IDB4MDAwMDAwMDgpOwogfQogCkBAIC02Myw5ICs2Myw5IEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWp1bXBfdG9fdW5jYWNoZWQoKTsKIAotCWNjciA9IGN0cmxfaW5sKENDUik7CisJY2NyID0gX19yYXdfcmVhZGwoQ0NSKTsKIAljY3IgfD0gQ0NSX0NBQ0hFX0lOVkFMSURBVEU7Ci0JY3RybF9vdXRsKGNjciwgQ0NSKTsKKwlfX3Jhd193cml0ZWwoY2NyLCBDQ1IpOwogCiAJYmFja190b19jYWNoZWQoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC03OCw3ICs3OCw3IEBACiAJCSYgfihMMV9DQUNIRV9CWVRFUy0xKTsKIAogCWZvciAodiA9IGJlZ2luOyB2IDwgZW5kOyB2Kz1MMV9DQUNIRV9CWVRFUykKLQkJY3RybF9vdXRsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCisJCV9fcmF3X3dyaXRlbCgodiAmIENBQ0hFX1BIWVNBRERSX01BU0spLAogCQkJICBDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgKHYgJiAweDAwMDAwZmYwKSB8IDB4MDAwMDAwMDgpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLXNoMmEuYyBiL2FyY2gvc2gvbW0vY2FjaGUtc2gyYS5jCmluZGV4IDk3NTg5OWQuLjFmNTEyMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2gyYS5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUtc2gyYS5jCkBAIC0zMiwxMCArMzIsMTAgQEAKIAkJdW5zaWduZWQgbG9uZyBhZGRyID0gQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8ICh2ICYgMHgwMDAwMDdmMCk7CiAJCWludCB3YXk7CiAJCWZvciAod2F5ID0gMDsgd2F5IDwgNDsgd2F5KyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgZGF0YSA9ICBjdHJsX2lubChhZGRyIHwgKHdheSA8PCAxMSkpOworCQkJdW5zaWduZWQgbG9uZyBkYXRhID0gIF9fcmF3X3JlYWRsKGFkZHIgfCAod2F5IDw8IDExKSk7CiAJCQlpZiAoKGRhdGEgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSA9PSAodiAmIENBQ0hFX1BIWVNBRERSX01BU0spKSB7CiAJCQkJZGF0YSAmPSB+U0hfQ0FDSEVfVVBEQVRFRDsKLQkJCQljdHJsX291dGwoZGF0YSwgYWRkciB8ICh3YXkgPDwgMTEpKTsKKwkJCQlfX3Jhd193cml0ZWwoZGF0YSwgYWRkciB8ICh3YXkgPDwgMTEpKTsKIAkJCX0KIAkJfQogCX0KQEAgLTU4LDcgKzU4LDcgQEAKIAlqdW1wX3RvX3VuY2FjaGVkKCk7CiAKIAlmb3IgKHYgPSBiZWdpbjsgdiA8IGVuZDsgdis9TDFfQ0FDSEVfQllURVMpIHsKLQkJY3RybF9vdXRsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCisJCV9fcmF3X3dyaXRlbCgodiAmIENBQ0hFX1BIWVNBRERSX01BU0spLAogCQkJICBDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgKHYgJiAweDAwMDAwN2YwKSB8IDB4MDAwMDAwMDgpOwogCX0KIAliYWNrX3RvX2NhY2hlZCgpOwpAQCAtNzgsMTcgKzc4LDE3IEBACiAJanVtcF90b191bmNhY2hlZCgpOwogCiAjaWZkZWYgQ09ORklHX0NBQ0hFX1dSSVRFQkFDSwotCWN0cmxfb3V0bChjdHJsX2lubChDQ1IpIHwgQ0NSX09DQUNIRV9JTlZBTElEQVRFLCBDQ1IpOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChDQ1IpIHwgQ0NSX09DQUNIRV9JTlZBTElEQVRFLCBDQ1IpOwogCS8qIEktY2FjaGUgaW52YWxpZGF0ZSAqLwogCWZvciAodiA9IGJlZ2luOyB2IDwgZW5kOyB2Kz1MMV9DQUNIRV9CWVRFUykgewotCQljdHJsX291dGwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKKwkJX19yYXdfd3JpdGVsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCiAJCQkgIENBQ0hFX0lDX0FERFJFU1NfQVJSQVkgfCAodiAmIDB4MDAwMDA3ZjApIHwgMHgwMDAwMDAwOCk7CiAJfQogI2Vsc2UKIAlmb3IgKHYgPSBiZWdpbjsgdiA8IGVuZDsgdis9TDFfQ0FDSEVfQllURVMpIHsKLQkJY3RybF9vdXRsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCisJCV9fcmF3X3dyaXRlbCgodiAmIENBQ0hFX1BIWVNBRERSX01BU0spLAogCQkJICBDQUNIRV9JQ19BRERSRVNTX0FSUkFZIHwgKHYgJiAweDAwMDAwN2YwKSB8IDB4MDAwMDAwMDgpOwotCQljdHJsX291dGwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKKwkJX19yYXdfd3JpdGVsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCiAJCQkgIENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAodiAmIDB4MDAwMDA3ZjApIHwgMHgwMDAwMDAwOCk7CiAJfQogI2VuZGlmCkBAIC0xMTUsMTQgKzExNSwxNCBAQAogCQlpbnQgd2F5OwogCQkvKiBPLUNhY2hlIHdyaXRlYmFjayAqLwogCQlmb3IgKHdheSA9IDA7IHdheSA8IDQ7IHdheSsrKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGRhdGEgPSAgY3RybF9pbmwoQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IGFkZHIgfCAod2F5IDw8IDExKSk7CisJCQl1bnNpZ25lZCBsb25nIGRhdGEgPSAgX19yYXdfcmVhZGwoQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IGFkZHIgfCAod2F5IDw8IDExKSk7CiAJCQlpZiAoKGRhdGEgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSA9PSAodiAmIENBQ0hFX1BIWVNBRERSX01BU0spKSB7CiAJCQkJZGF0YSAmPSB+U0hfQ0FDSEVfVVBEQVRFRDsKLQkJCQljdHJsX291dGwoZGF0YSwgQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IGFkZHIgfCAod2F5IDw8IDExKSk7CisJCQkJX19yYXdfd3JpdGVsKGRhdGEsIENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCBhZGRyIHwgKHdheSA8PCAxMSkpOwogCQkJfQogCQl9CiAJCS8qIEktQ2FjaGUgaW52YWxpZGF0ZSAqLwotCQljdHJsX291dGwoYWRkciwKKwkJX19yYXdfd3JpdGVsKGFkZHIsCiAJCQkgIENBQ0hFX0lDX0FERFJFU1NfQVJSQVkgfCBhZGRyIHwgMHgwMDAwMDAwOCk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLXNoMy5jIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDMuYwppbmRleCBmYWVmODBjLi5lMzc1MjNmIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLXNoMy5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUtc2gzLmMKQEAgLTUwLDEyICs1MCwxMiBAQAogCQkJcCA9IF9fcGEodik7CiAJCQlhZGRyID0gYWRkcnN0YXJ0IHwgKHYgJiBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5lbnRyeV9tYXNrKTsKIAkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJCWRhdGEgPSBjdHJsX2lubChhZGRyKTsKKwkJCWRhdGEgPSBfX3Jhd19yZWFkbChhZGRyKTsKIAogCQkJaWYgKChkYXRhICYgQ0FDSEVfUEhZU0FERFJfTUFTSykgPT0KIAkJCSAgICAocCAmIENBQ0hFX1BIWVNBRERSX01BU0spKSB7CiAJCQkJZGF0YSAmPSB+U0hfQ0FDSEVfVVBEQVRFRDsKLQkJCQljdHJsX291dGwoZGF0YSwgYWRkcik7CisJCQkJX19yYXdfd3JpdGVsKGRhdGEsIGFkZHIpOwogCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTg2LDcgKzg2LDcgQEAKIAkJZGF0YSA9ICh2ICYgMHhmZmZmZmMwMCk7IC8qIF9WaXJ0dWFsXyBhZGRyZXNzLCB+VSwgflYgKi8KIAkJYWRkciA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfAogCQkJKHYgJiBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5lbnRyeV9tYXNrKSB8IFNIX0NBQ0hFX0FTU09DOwotCQljdHJsX291dGwoZGF0YSwgYWRkcik7CisJCV9fcmF3X3dyaXRlbChkYXRhLCBhZGRyKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCmluZGV4IDU2MGRkYjYuLjJjZmFlODEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYwpAQCAtMzYsNyArMzYsNyBAQAogICogQ2FsbGVkIGZyb20ga2VybmVsL21vZHVsZS5jOnN5c19pbml0X21vZHVsZSBhbmQgcm91dGluZSBmb3IgYS5vdXQgZm9ybWF0LAogICogc2lnbmFsIGhhbmRsZXIgY29kZSBhbmQga3Byb2JlcyBjb2RlCiAgKi8KLXN0YXRpYyB2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIHNoNF9mbHVzaF9pY2FjaGVfcmFuZ2Uodm9pZCAqYXJncykKK3N0YXRpYyB2b2lkIHNoNF9mbHVzaF9pY2FjaGVfcmFuZ2Uodm9pZCAqYXJncykKIHsKIAlzdHJ1Y3QgZmx1c2hlcl9kYXRhICpkYXRhID0gYXJnczsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CkBAIC0xMDksNiArMTA5LDcgQEAKIHN0YXRpYyB2b2lkIHNoNF9mbHVzaF9kY2FjaGVfcGFnZSh2b2lkICphcmcpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhcmc7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwogI2lmbmRlZiBDT05GSUdfU01QCiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7CiAKQEAgLTExNiwyMiArMTE3LDE0IEBACiAJCXNldF9iaXQoUEdfZGNhY2hlX2RpcnR5LCAmcGFnZS0+ZmxhZ3MpOwogCWVsc2UKICNlbmRpZgotCXsKLQkJdW5zaWduZWQgbG9uZyBwaHlzID0gcGFnZV90b19waHlzKHBhZ2UpOwotCQl1bnNpZ25lZCBsb25nIGFkZHIgPSBDQUNIRV9PQ19BRERSRVNTX0FSUkFZOwotCQlpbnQgaSwgbjsKLQotCQkvKiBMb29wIGFsbCB0aGUgRC1jYWNoZSAqLwotCQluID0gYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzOwotCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrLCBhZGRyICs9IFBBR0VfU0laRSkKLQkJCWZsdXNoX2NhY2hlX29uZShhZGRyLCBwaHlzKTsKLQl9CisJCWZsdXNoX2NhY2hlX29uZShDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwKKwkJCQkoYWRkciAmIHNobV9hbGlnbl9tYXNrKSwgcGFnZV90b19waHlzKHBhZ2UpKTsKIAogCXdtYigpOwogfQogCiAvKiBUT0RPOiBTZWxlY3RpdmUgaWNhY2hlIGludmFsaWRhdGlvbiB0aHJvdWdoIElDIGFkZHJlc3MgYXJyYXkuLiAqLwotc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgZmx1c2hfaWNhY2hlX2FsbCh2b2lkKQorc3RhdGljIHZvaWQgZmx1c2hfaWNhY2hlX2FsbCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNjcjsKIApAQCAtMTM5LDkgKzEzMiw5IEBACiAJanVtcF90b191bmNhY2hlZCgpOwogCiAJLyogRmx1c2ggSS1jYWNoZSAqLwotCWNjciA9IGN0cmxfaW5sKENDUik7CisJY2NyID0gX19yYXdfcmVhZGwoQ0NSKTsKIAljY3IgfD0gQ0NSX0NBQ0hFX0lDSTsKLQljdHJsX291dGwoY2NyLCBDQ1IpOworCV9fcmF3X3dyaXRlbChjY3IsIENDUik7CiAKIAkvKgogCSAqIGJhY2tfdG9fY2FjaGVkKCkgd2lsbCB0YWtlIGNhcmUgb2YgdGhlIGJhcnJpZXIgZm9yIHVzLCBkb24ndCBhZGQKQEAgLTM4NCw5ICszNzcsOSBAQAogdm9pZCBfX2luaXQgc2g0X2NhY2hlX2luaXQodm9pZCkKIHsKIAlwcmludGsoIlBWUj0lMDh4IENWUj0lMDh4IFBSUj0lMDh4XG4iLAotCQljdHJsX2lubChDQ05fUFZSKSwKLQkJY3RybF9pbmwoQ0NOX0NWUiksCi0JCWN0cmxfaW5sKENDTl9QUlIpKTsKKwkJX19yYXdfcmVhZGwoQ0NOX1BWUiksCisJCV9fcmF3X3JlYWRsKENDTl9DVlIpLAorCQlfX3Jhd19yZWFkbChDQ05fUFJSKSk7CiAKIAlsb2NhbF9mbHVzaF9pY2FjaGVfcmFuZ2UJPSBzaDRfZmx1c2hfaWNhY2hlX3JhbmdlOwogCWxvY2FsX2ZsdXNoX2RjYWNoZV9wYWdlCQk9IHNoNF9mbHVzaF9kY2FjaGVfcGFnZTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoNzcwNS5jCmluZGV4IGY1MjdmYjcuLmY0OThkYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDc3MDUuYwpAQCAtNDgsMTAgKzQ4LDEwIEBACiAJCQl1bnNpZ25lZCBsb25nIGRhdGE7CiAJCQlpbnQgdiA9IFNIX0NBQ0hFX1VQREFURUQgfCBTSF9DQUNIRV9WQUxJRDsKIAotCQkJZGF0YSA9IGN0cmxfaW5sKGFkZHIpOworCQkJZGF0YSA9IF9fcmF3X3JlYWRsKGFkZHIpOwogCiAJCQlpZiAoKGRhdGEgJiB2KSA9PSB2KQotCQkJCWN0cmxfb3V0bChkYXRhICYgfnYsIGFkZHIpOworCQkJCV9fcmF3X3dyaXRlbChkYXRhICYgfnYsIGFkZHIpOwogCiAJCX0KIApAQCAtNzgsNyArNzgsNyBAQAogLyoKICAqIFdyaXRlYmFjayZJbnZhbGlkYXRlIHRoZSBELWNhY2hlIG9mIHRoZSBwYWdlCiAgKi8KLXN0YXRpYyB2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIF9fZmx1c2hfZGNhY2hlX3BhZ2UodW5zaWduZWQgbG9uZyBwaHlzKQorc3RhdGljIHZvaWQgX19mbHVzaF9kY2FjaGVfcGFnZSh1bnNpZ25lZCBsb25nIHBoeXMpCiB7CiAJdW5zaWduZWQgbG9uZyB3YXlzLCB3YXlzaXplLCBhZGRyc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTExNSwxMCArMTE1LDEwIEBACiAJCSAgICAgYWRkciArPSBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5saW5lc3opIHsKIAkJCXVuc2lnbmVkIGxvbmcgZGF0YTsKIAotCQkJZGF0YSA9IGN0cmxfaW5sKGFkZHIpICYgKDB4MWZmZmZDMDAgfCBTSF9DQUNIRV9WQUxJRCk7CisJCQlkYXRhID0gX19yYXdfcmVhZGwoYWRkcikgJiAoMHgxZmZmZkMwMCB8IFNIX0NBQ0hFX1ZBTElEKTsKIAkJICAgICAgICBpZiAoZGF0YSA9PSBwaHlzKSB7CiAJCQkJZGF0YSAmPSB+KFNIX0NBQ0hFX1ZBTElEIHwgU0hfQ0FDSEVfVVBEQVRFRCk7Ci0JCQkJY3RybF9vdXRsKGRhdGEsIGFkZHIpOworCQkJCV9fcmF3X3dyaXRlbChkYXRhLCBhZGRyKTsKIAkJCX0KIAkJfQogCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAkJX19mbHVzaF9kY2FjaGVfcGFnZShfX3BhKHBhZ2VfYWRkcmVzcyhwYWdlKSkpOwogfQogCi1zdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBzaDc3MDVfZmx1c2hfY2FjaGVfYWxsKHZvaWQgKmFyZ3MpCitzdGF0aWMgdm9pZCBzaDc3MDVfZmx1c2hfY2FjaGVfYWxsKHZvaWQgKmFyZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS5jIGIvYXJjaC9zaC9tbS9jYWNoZS5jCmluZGV4IGI4NjA3ZmEuLjBmNDA5NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLmMKQEAgLTIsNyArMiw3IEBACiAgKiBhcmNoL3NoL21tL2NhY2hlLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDIgIE5paWJlIFl1dGFrYQotICogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwOSAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAxMCAgUGF1bCBNdW5kdAogICoKICAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgogICovCkBAIC00MSw4ICs0MSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2FpdCkKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQlzbXBfY2FsbF9mdW5jdGlvbihmdW5jLCBpbmZvLCB3YWl0KTsKKworCS8qCisJICogSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgZ2V0cyBjYWxsZWQgZWFybHkgb24gd2hlbiBJUlFzIGFyZQorCSAqIHN0aWxsIGRpc2FibGVkIGR1ZSB0byBpb3JlbWFwcGluZyBieSB0aGUgYm9vdCBDUFUsIHNvIGRvbid0CisJICogZXZlbiBhdHRlbXB0IElQSXMgdW5sZXNzIHRoZXJlIGFyZSBvdGhlciBDUFVzIG9ubGluZS4KKwkgKi8KKwlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKQorCQlzbXBfY2FsbF9mdW5jdGlvbihmdW5jLCBpbmZvLCB3YWl0KTsKKwogCWZ1bmMoaW5mbyk7CisKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2ZhdWx0XzMyLmMgYi9hcmNoL3NoL21tL2ZhdWx0XzMyLmMKaW5kZXggNDc1MzAxMC4uOGJmNzllMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9mYXVsdF8zMi5jCisrKyBiL2FyY2gvc2gvbW0vZmF1bHRfMzIuYwpAQCAtNTMsNiArNTMsOSBAQAogCWlmICghcHVkX3ByZXNlbnQoKnB1ZF9rKSkKIAkJcmV0dXJuIE5VTEw7CiAKKwlpZiAoIXB1ZF9wcmVzZW50KCpwdWQpKQorCSAgICBzZXRfcHVkKHB1ZCwgKnB1ZF9rKTsKKwogCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKIAlwbWRfayA9IHBtZF9vZmZzZXQocHVkX2ssIGFkZHJlc3MpOwogCWlmICghcG1kX3ByZXNlbnQoKnBtZF9rKSkKQEAgLTM3MSw3ICszNzQsNyBAQAogCQlsb2NhbF9mbHVzaF90bGJfb25lKGdldF9hc2lkKCksIGFkZHJlc3MgJiBQQUdFX01BU0spOwogI2VuZGlmCiAKLQl1cGRhdGVfbW11X2NhY2hlKE5VTEwsIGFkZHJlc3MsIGVudHJ5KTsKKwl1cGRhdGVfbW11X2NhY2hlKE5VTEwsIGFkZHJlc3MsIHB0ZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaW5pdC5jIGIvYXJjaC9zaC9tbS9pbml0LmMKaW5kZXggNDMyYWNkMC4uNjgwMjhlOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9pbml0LmMKKysrIGIvYXJjaC9zaC9tbS9pbml0LmMKQEAgLTIxLDI1ICsyMSwxMyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOwogCi0jaWZkZWYgQ09ORklHX1NVUEVSSDMyCi0vKgotICogSGFuZGxlIHRyaXZpYWwgdHJhbnNpdGlvbnMgYmV0d2VlbiBjYWNoZWQgYW5kIHVuY2FjaGVkCi0gKiBzZWdtZW50cywgbWFraW5nIHVzZSBvZiB0aGUgMToxIG1hcHBpbmcgcmVsYXRpb25zaGlwIGluCi0gKiA1MTJNQiBsb3dtZW0uCi0gKgotICogVGhpcyBpcyB0aGUgb2Zmc2V0IG9mIHRoZSB1bmNhY2hlZCBzZWN0aW9uIGZyb20gaXRzIGNhY2hlZCBhbGlhcy4KLSAqIERlZmF1bHQgdmFsdWUgb25seSB2YWxpZCBpbiAyOSBiaXQgbW9kZSwgaW4gMzJiaXQgbW9kZSB3aWxsIGJlCi0gKiBvdmVycmlkZGVuIGluIHBtYl9pbml0LgotICovCi11bnNpZ25lZCBsb25nIGNhY2hlZF90b191bmNhY2hlZCA9IFAyU0VHIC0gUDFTRUc7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19NTVUKLXN0YXRpYyB2b2lkIHNldF9wdGVfcGh5cyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgcHJvdCkKK3N0YXRpYyBwdGVfdCAqX19nZXRfcHRlX3BoeXModW5zaWduZWQgbG9uZyBhZGRyKQogewogCXBnZF90ICpwZ2Q7CiAJcHVkX3QgKnB1ZDsKQEAgLTQ5LDIyICszNywzMCBAQAogCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKIAlpZiAocGdkX25vbmUoKnBnZCkpIHsKIAkJcGdkX0VSUk9SKCpwZ2QpOwotCQlyZXR1cm47CisJCXJldHVybiBOVUxMOwogCX0KIAogCXB1ZCA9IHB1ZF9hbGxvYyhOVUxMLCBwZ2QsIGFkZHIpOwogCWlmICh1bmxpa2VseSghcHVkKSkgewogCQlwdWRfRVJST1IoKnB1ZCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJcG1kID0gcG1kX2FsbG9jKE5VTEwsIHB1ZCwgYWRkcik7CiAJaWYgKHVubGlrZWx5KCFwbWQpKSB7CiAJCXBtZF9FUlJPUigqcG1kKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHIpOworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9wdGVfcGh5cyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgcHJvdCkKK3sKKwlwdGVfdCAqcHRlOworCisJcHRlID0gX19nZXRfcHRlX3BoeXMoYWRkcik7CiAJaWYgKCFwdGVfbm9uZSgqcHRlKSkgewogCQlwdGVfRVJST1IoKnB0ZSk7CiAJCXJldHVybjsKQEAgLTcyLDIzICs2OCwyNCBAQAogCiAJc2V0X3B0ZShwdGUsIHBmbl9wdGUocGh5cyA+PiBQQUdFX1NISUZULCBwcm90KSk7CiAJbG9jYWxfZmx1c2hfdGxiX29uZShnZXRfYXNpZCgpLCBhZGRyKTsKKworCWlmIChwZ3Byb3RfdmFsKHByb3QpICYgX1BBR0VfV0lSRUQpCisJCXRsYl93aXJlX2VudHJ5KE5VTEwsIGFkZHIsICpwdGUpOwogfQogCi0vKgotICogQXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG90aGVyIHBsYXRmb3JtcyBwcmVzZXJ2ZSB0aGUgZml4bWFwIG1hcHBpbmcKLSAqIGFjcm9zcyBhIGNvbnRleHQgc3dpdGNoLCB3ZSBkb24ndCBwcmVzZW50bHkgZG8gdGhpcywgYnV0IHRoaXMgY291bGQgYmUgZG9uZQotICogaW4gYSBzaW1pbGFyIGZhc2hpb24gYXMgdG8gdGhlIHdpcmVkIFRMQiBpbnRlcmZhY2UgdGhhdCBzaDY0IHVzZXMgKGJ5IHdheQotICogb2YgdGhlIG1lbW9yeSBtYXBwZWQgVVRMQiBjb25maWd1cmF0aW9uKSAtLSB0aGlzIHVuZm9ydHVuYXRlbHkgZm9yY2VzIHVzIHRvCi0gKiBnaXZlIHVwIGEgVExCIGVudHJ5IGZvciBlYWNoIG1hcHBpbmcgd2Ugd2FudCB0byBwcmVzZXJ2ZS4gV2hpbGUgdGhpcyBtYXkgYmUKLSAqIHZpYWJsZSBmb3IgYSBzbWFsbCBudW1iZXIgb2YgZml4bWFwcywgaXQncyBub3QgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IKLSAqIGV2ZXJ5dGhpbmcgYW5kIG5lZWRzIHRvIGJlIGNhcmVmdWxseSBldmFsdWF0ZWQuIChpZSwgd2UgbWF5IHdhbnQgdGhpcyBmb3IKLSAqIHRoZSB2c3lzY2FsbCBwYWdlKS4KLSAqCi0gKiBYWFg6IFBlcmhhcHMgYWRkIGEgX1BBR0VfV0lSRUQgZmxhZyBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IHdlIGNhbiBwYXNzCi0gKiBpbiBhdCBfX3NldF9maXhtYXAoKSB0aW1lIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgYmVoYXZpb3IgdG8gZm9sbG93LgotICoKLSAqCQkJCQkgLS0gUEZNLgotICovCitzdGF0aWMgdm9pZCBjbGVhcl9wdGVfcGh5cyh1bnNpZ25lZCBsb25nIGFkZHIsIHBncHJvdF90IHByb3QpCit7CisJcHRlX3QgKnB0ZTsKKworCXB0ZSA9IF9fZ2V0X3B0ZV9waHlzKGFkZHIpOworCisJaWYgKHBncHJvdF92YWwocHJvdCkgJiBfUEFHRV9XSVJFRCkKKwkJdGxiX3Vud2lyZV9lbnRyeSgpOworCisJc2V0X3B0ZShwdGUsIHBmbl9wdGUoMCwgX19wZ3Byb3QoMCkpKTsKKwlsb2NhbF9mbHVzaF90bGJfb25lKGdldF9hc2lkKCksIGFkZHIpOworfQorCiB2b2lkIF9fc2V0X2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsIHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgcHJvdCkKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSBfX2ZpeF90b192aXJ0KGlkeCk7CkBAIC0xMDEsNiArOTgsMTggQEAKIAlzZXRfcHRlX3BoeXMoYWRkcmVzcywgcGh5cywgcHJvdCk7CiB9CiAKK3ZvaWQgX19jbGVhcl9maXhtYXAoZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4LCBwZ3Byb3RfdCBwcm90KQoreworCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IF9fZml4X3RvX3ZpcnQoaWR4KTsKKworCWlmIChpZHggPj0gX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzKSB7CisJCUJVRygpOworCQlyZXR1cm47CisJfQorCisJY2xlYXJfcHRlX3BoeXMoYWRkcmVzcywgcHJvdCk7Cit9CisKIHZvaWQgX19pbml0IHBhZ2VfdGFibGVfcmFuZ2VfaW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCQkJIHBnZF90ICpwZ2RfYmFzZSkKIHsKQEAgLTEyMCw3ICsxMjksMTMgQEAKIAlmb3IgKCA7IChpIDwgUFRSU19QRVJfUEdEKSAmJiAodmFkZHIgIT0gZW5kKTsgcGdkKyssIGkrKykgewogCQlwdWQgPSAocHVkX3QgKilwZ2Q7CiAJCWZvciAoIDsgKGogPCBQVFJTX1BFUl9QVUQpICYmICh2YWRkciAhPSBlbmQpOyBwdWQrKywgaisrKSB7CisjaWZkZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogCQkJcG1kID0gKHBtZF90ICopcHVkOworI2Vsc2UKKwkJCXBtZCA9IChwbWRfdCAqKWFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CisJCQlwdWRfcG9wdWxhdGUoJmluaXRfbW0sIHB1ZCwgcG1kKTsKKwkJCXBtZCArPSBrOworI2VuZGlmCiAJCQlmb3IgKDsgKGsgPCBQVFJTX1BFUl9QTUQpICYmICh2YWRkciAhPSBlbmQpOyBwbWQrKywgaysrKSB7CiAJCQkJaWYgKHBtZF9ub25lKCpwbWQpKSB7CiAJCQkJCXB0ZSA9IChwdGVfdCAqKSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOwpAQCAtMTgyLDkgKzE5Nyw2IEBACiAJfQogCiAJZnJlZV9hcmVhX2luaXRfbm9kZXMobWF4X3pvbmVfcGZucyk7Ci0KLQkvKiBTZXQgdXAgdGhlIHVuY2FjaGVkIGZpeG1hcCAqLwotCXNldF9maXhtYXBfbm9jYWNoZShGSVhfVU5DQUNIRUQsIF9fcGEoJl9fdW5jYWNoZWRfc3RhcnQpKTsKIH0KIAogLyoKQEAgLTE5NSw2ICsyMDcsOCBAQAogCW5vX2lvbW11X2luaXQoKTsKIH0KIAordW5zaWduZWQgaW50IG1lbV9pbml0X2RvbmUgPSAwOworCiB2b2lkIF9faW5pdCBtZW1faW5pdCh2b2lkKQogewogCWludCBjb2Rlc2l6ZSwgZGF0YXNpemUsIGluaXRzaXplOwpAQCAtMjMxLDYgKzI0NSw4IEBACiAJbWVtc2V0KGVtcHR5X3plcm9fcGFnZSwgMCwgUEFHRV9TSVpFKTsKIAlfX2ZsdXNoX3diYWNrX3JlZ2lvbihlbXB0eV96ZXJvX3BhZ2UsIFBBR0VfU0laRSk7CiAKKwl2c3lzY2FsbF9pbml0KCk7CisKIAljb2Rlc2l6ZSA9ICAodW5zaWduZWQgbG9uZykgJl9ldGV4dCAtICh1bnNpZ25lZCBsb25nKSAmX3RleHQ7CiAJZGF0YXNpemUgPSAgKHVuc2lnbmVkIGxvbmcpICZfZWRhdGEgLSAodW5zaWduZWQgbG9uZykgJl9ldGV4dDsKIAlpbml0c2l6ZSA9ICAodW5zaWduZWQgbG9uZykgJl9faW5pdF9lbmQgLSAodW5zaWduZWQgbG9uZykgJl9faW5pdF9iZWdpbjsKQEAgLTI0Myw4ICsyNTksNDggQEAKIAkJZGF0YXNpemUgPj4gMTAsCiAJCWluaXRzaXplID4+IDEwKTsKIAotCS8qIEluaXRpYWxpemUgdGhlIHZEU08gKi8KLQl2c3lzY2FsbF9pbml0KCk7CisJcHJpbnRrKEtFUk5fSU5GTyAidmlydHVhbCBrZXJuZWwgbWVtb3J5IGxheW91dDpcbiIKKwkJIiAgICBmaXhtYXAgIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBrQilcbiIKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCQkiICAgIHBrbWFwICAgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIGtCKVxuIgorI2VuZGlmCisJCSIgICAgdm1hbGxvYyA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQgTUIpXG4iCisJCSIgICAgbG93bWVtICA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQgTUIpIChjYWNoZWQpXG4iCisjaWZkZWYgQ09ORklHX1VOQ0FDSEVEX01BUFBJTkcKKwkJIiAgICAgICAgICAgIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBNQikgKHVuY2FjaGVkKVxuIgorI2VuZGlmCisJCSIgICAgICAuaW5pdCA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQga0IpXG4iCisJCSIgICAgICAuZGF0YSA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQga0IpXG4iCisJCSIgICAgICAudGV4dCA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQga0IpXG4iLAorCQlGSVhBRERSX1NUQVJULCBGSVhBRERSX1RPUCwKKwkJKEZJWEFERFJfVE9QIC0gRklYQUREUl9TVEFSVCkgPj4gMTAsCisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCQlQS01BUF9CQVNFLCBQS01BUF9CQVNFK0xBU1RfUEtNQVAqUEFHRV9TSVpFLAorCQkoTEFTVF9QS01BUCpQQUdFX1NJWkUpID4+IDEwLAorI2VuZGlmCisKKwkJKHVuc2lnbmVkIGxvbmcpVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCisJCShWTUFMTE9DX0VORCAtIFZNQUxMT0NfU1RBUlQpID4+IDIwLAorCisJCSh1bnNpZ25lZCBsb25nKW1lbW9yeV9zdGFydCwgKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnksCisJCSgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSAtICh1bnNpZ25lZCBsb25nKW1lbW9yeV9zdGFydCkgPj4gMjAsCisKKyNpZmRlZiBDT05GSUdfVU5DQUNIRURfTUFQUElORworCQl1bmNhY2hlZF9zdGFydCwgdW5jYWNoZWRfZW5kLCB1bmNhY2hlZF9zaXplID4+IDIwLAorI2VuZGlmCisKKwkJKHVuc2lnbmVkIGxvbmcpJl9faW5pdF9iZWdpbiwgKHVuc2lnbmVkIGxvbmcpJl9faW5pdF9lbmQsCisJCSgodW5zaWduZWQgbG9uZykmX19pbml0X2VuZCAtCisJCSAodW5zaWduZWQgbG9uZykmX19pbml0X2JlZ2luKSA+PiAxMCwKKworCQkodW5zaWduZWQgbG9uZykmX2V0ZXh0LCAodW5zaWduZWQgbG9uZykmX2VkYXRhLAorCQkoKHVuc2lnbmVkIGxvbmcpJl9lZGF0YSAtICh1bnNpZ25lZCBsb25nKSZfZXRleHQpID4+IDEwLAorCisJCSh1bnNpZ25lZCBsb25nKSZfdGV4dCwgKHVuc2lnbmVkIGxvbmcpJl9ldGV4dCwKKwkJKCh1bnNpZ25lZCBsb25nKSZfZXRleHQgLSAodW5zaWduZWQgbG9uZykmX3RleHQpID4+IDEwKTsKKworCW1lbV9pbml0X2RvbmUgPSAxOwogfQogCiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQpAQCAtMjc3LDM1ICszMzMsNiBAQAogfQogI2VuZGlmCiAKLSNpZiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUCi1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnRocmVhZF9pbmZvX2NhY2hlOwotCi1zdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7Ci0KLQl0aSA9IGttZW1fY2FjaGVfYWxsb2ModGhyZWFkX2luZm9fY2FjaGUsIEdGUF9LRVJORUwpOwotCWlmICh1bmxpa2VseSh0aSA9PSBOVUxMKSkKLQkJcmV0dXJuIE5VTEw7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFCi0JbWVtc2V0KHRpLCAwLCBUSFJFQURfU0laRSk7Ci0jZW5kaWYKLQlyZXR1cm4gdGk7Ci19Ci0KLXZvaWQgZnJlZV90aHJlYWRfaW5mbyhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKQotewotCWttZW1fY2FjaGVfZnJlZSh0aHJlYWRfaW5mb19jYWNoZSwgdGkpOwotfQotCi12b2lkIHRocmVhZF9pbmZvX2NhY2hlX2luaXQodm9pZCkKLXsKLQl0aHJlYWRfaW5mb19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJ0aHJlYWRfaW5mbyIsIFRIUkVBRF9TSVpFLAotCQkJCQkgICAgICBUSFJFQURfU0laRSwgMCwgTlVMTCk7Ci0JQlVHX09OKHRocmVhZF9pbmZvX2NhY2hlID09IE5VTEwpOwotfQotI2VuZGlmIC8qIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQgKi8KLQogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwogaW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplKQogewpAQCAtMzM2LDEwICszNjMsMyBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KLQotI2lmZGVmIENPTkZJR19QTUIKLWludCBfX2luXzI5Yml0X21vZGUodm9pZCkKLXsKLQlyZXR1cm4gIShjdHJsX2lubChQTUJfUEFTQ1IpICYgUEFTQ1JfU0UpOwotfQotI2VuZGlmIC8qIENPTkZJR19QTUIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jIGIvYXJjaC9zaC9tbS9pb3JlbWFwLmMKc2ltaWxhcml0eSBpbmRleCA3OCUKcmVuYW1lIGZyb20gYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMKcmVuYW1lIHRvIGFyY2gvc2gvbW0vaW9yZW1hcC5jCmluZGV4IDIxNDFiZWYuLmM2OGQyZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCisrKyBiL2FyY2gvc2gvbW0vaW9yZW1hcC5jCkBAIC0xLDEzICsxLDEzIEBACiAvKgogICogYXJjaC9zaC9tbS9pb3JlbWFwLmMKICAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTUgMTk5NiBMaW51cyBUb3J2YWxkcworICogKEMpIENvcHlyaWdodCAyMDA1IC0gMjAxMCAgUGF1bCBNdW5kdAorICoKICAqIFJlLW1hcCBJTyBtZW1vcnkgdG8ga2VybmVsIGFkZHJlc3Mgc3BhY2Ugc28gdGhhdCB3ZSBjYW4gYWNjZXNzIGl0LgogICogVGhpcyBpcyBuZWVkZWQgZm9yIGhpZ2ggUENJIGFkZHJlc3NlcyB0aGF0IGFyZW4ndCBtYXBwZWQgaW4gdGhlCiAgKiA2NDBrLTFNQiBJTyBtZW1vcnkgYXJlYSBvbiBQQydzCiAgKgotICogKEMpIENvcHlyaWdodCAxOTk1IDE5OTYgTGludXMgVG9ydmFsZHMKLSAqIChDKSBDb3B5cmlnaHQgMjAwNSwgMjAwNiBQYXVsIE11bmR0Ci0gKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAogICogUHVibGljIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKICAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KQEAgLTMzLDEyICszMywxMiBAQAogICogaGF2ZSB0byBjb252ZXJ0IHRoZW0gaW50byBhbiBvZmZzZXQgaW4gYSBwYWdlLWFsaWduZWQgbWFwcGluZywgYnV0IHRoZQogICogY2FsbGVyIHNob3VsZG4ndCBuZWVkIHRvIGtub3cgdGhhdCBzbWFsbCBkZXRhaWwuCiAgKi8KLXZvaWQgX19pb21lbSAqX19pb3JlbWFwX2NhbGxlcih1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmNhbGxlcikKK3ZvaWQgX19pb21lbSAqIF9faW5pdF9yZWZvaworX19pb3JlbWFwX2NhbGxlcih1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgcGdwcm90X3QgcGdwcm90LCB2b2lkICpjYWxsZXIpCiB7CiAJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCwgbGFzdF9hZGRyLCBhZGRyLCBvcmlnX2FkZHI7Ci0JcGdwcm90X3QgcGdwcm90OwogCiAJLyogRG9uJ3QgYWxsb3cgd3JhcGFyb3VuZCBvciB6ZXJvIHNpemUgKi8KIAlsYXN0X2FkZHIgPSBwaHlzX2FkZHIgKyBzaXplIC0gMTsKQEAgLTQ2LDE4ICs0Niw2IEBACiAJCXJldHVybiBOVUxMOwogCiAJLyoKLQkgKiBJZiB3ZSdyZSBpbiB0aGUgZml4ZWQgUENJIG1lbW9yeSByYW5nZSwgbWFwcGluZyB0aHJvdWdoIHBhZ2UKLQkgKiB0YWJsZXMgaXMgbm90IG9ubHkgcG9pbnRsZXNzLCBidXQgYWxzbyBmdW5kYW1lbnRhbGx5IGJyb2tlbi4KLQkgKiBKdXN0IHJldHVybiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpbnN0ZWFkLgotCSAqCi0JICogRm9yIGJvYXJkcyB0aGF0IG1hcCBhIHNtYWxsIFBDSSBtZW1vcnkgYXBlcnR1cmUgc29tZXdoZXJlIGluCi0JICogUDEvUDIgc3BhY2UsIGlvcmVtYXAoKSB3aWxsIGFscmVhZHkgZG8gdGhlIHJpZ2h0IHRoaW5nLAotCSAqIGFuZCB3ZSdsbCBuZXZlciBnZXQgdGhpcyBmYXIuCi0JICovCi0JaWYgKGlzX3BjaV9tZW1vcnlfZml4ZWRfcmFuZ2UocGh5c19hZGRyLCBzaXplKSkKLQkJcmV0dXJuICh2b2lkIF9faW9tZW0gKilwaHlzX2FkZHI7Ci0KLQkvKgogCSAqIE1hcHBpbmdzIGhhdmUgdG8gYmUgcGFnZS1hbGlnbmVkCiAJICovCiAJb2Zmc2V0ID0gcGh5c19hZGRyICYgflBBR0VfTUFTSzsKQEAgLTY1LDYgKzUzLDEyIEBACiAJc2l6ZSA9IFBBR0VfQUxJR04obGFzdF9hZGRyKzEpIC0gcGh5c19hZGRyOwogCiAJLyoKKwkgKiBJZiB3ZSBjYW4ndCB5ZXQgdXNlIHRoZSByZWd1bGFyIGFwcHJvYWNoLCBnbyB0aGUgZml4bWFwIHJvdXRlLgorCSAqLworCWlmICghbWVtX2luaXRfZG9uZSkKKwkJcmV0dXJuIGlvcmVtYXBfZml4ZWQocGh5c19hZGRyLCBvZmZzZXQsIHNpemUsIHBncHJvdCk7CisKKwkvKgogCSAqIE9rLCBnbyBmb3IgaXQuLgogCSAqLwogCWFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgVk1fSU9SRU1BUCwgY2FsbGVyKTsKQEAgLTg0LDggKzc4LDkgQEAKIAkgKiBQTUIgZW50cmllcyBhcmUgYWxsIHByZS1mYXVsdGVkLgogCSAqLwogCWlmICh1bmxpa2VseShwaHlzX2FkZHIgPj0gUDFTRUcpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbWFwcGVkID0gcG1iX3JlbWFwKGFkZHIsIHBoeXNfYWRkciwgc2l6ZSwgZmxhZ3MpOworCQl1bnNpZ25lZCBsb25nIG1hcHBlZDsKIAorCQltYXBwZWQgPSBwbWJfcmVtYXAoYWRkciwgcGh5c19hZGRyLCBzaXplLCBwZ3Byb3QpOwogCQlpZiAobGlrZWx5KG1hcHBlZCkpIHsKIAkJCWFkZHIJCSs9IG1hcHBlZDsKIAkJCXBoeXNfYWRkcgkrPSBtYXBwZWQ7CkBAIC05NCw3ICs4OSw2IEBACiAJfQogI2VuZGlmCiAKLQlwZ3Byb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMX05PQ0FDSEUpIHwgZmxhZ3MpOwogCWlmIChsaWtlbHkoc2l6ZSkpCiAJCWlmIChpb3JlbWFwX3BhZ2VfcmFuZ2UoYWRkciwgYWRkciArIHNpemUsIHBoeXNfYWRkciwgcGdwcm90KSkgewogCQkJdnVubWFwKCh2b2lkICopb3JpZ19hZGRyKTsKQEAgLTEwNSwxNSArOTksMzggQEAKIH0KIEVYUE9SVF9TWU1CT0woX19pb3JlbWFwX2NhbGxlcik7CiAKKy8qCisgKiBTaW1wbGUgY2hlY2tzIGZvciBub24tdHJhbnNsYXRhYmxlIG1hcHBpbmdzLgorICovCitzdGF0aWMgaW5saW5lIGludCBpb21hcHBpbmdfbm9udHJhbnNsYXRhYmxlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworI2lmZGVmIENPTkZJR18yOUJJVAorCS8qCisJICogSW4gMjktYml0IG1vZGUgdGhpcyBpbmNsdWRlcyB0aGUgZml4ZWQgUDEvUDIgYXJlYXMsIGFzIHdlbGwgYXMKKwkgKiBwYXJ0cyBvZiBQMy4KKwkgKi8KKwlpZiAoUFhTRUcob2Zmc2V0KSA8IFAzU0VHIHx8IG9mZnNldCA+PSBQM19BRERSX01BWCkKKwkJcmV0dXJuIDE7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCiB2b2lkIF9faW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcjsKLQl1bnNpZ25lZCBsb25nIHNlZyA9IFBYU0VHKHZhZGRyKTsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICpwOwogCi0JaWYgKHNlZyA8IFAzU0VHIHx8IHZhZGRyID49IFAzX0FERFJfTUFYKQorCS8qCisJICogTm90aGluZyB0byBkbyBpZiB0aGVyZSBpcyBubyB0cmFuc2xhdGFibGUgbWFwcGluZy4KKwkgKi8KKwlpZiAoaW9tYXBwaW5nX25vbnRyYW5zbGF0YWJsZSh2YWRkcikpCiAJCXJldHVybjsKLQlpZiAoaXNfcGNpX21lbW9yeV9maXhlZF9yYW5nZSh2YWRkciwgMCkpCisKKwkvKgorCSAqIFRoZXJlJ3Mgbm8gVk1BIGlmIGl0J3MgZnJvbSBhbiBlYXJseSBmaXhlZCBtYXBwaW5nLgorCSAqLworCWlmIChpb3VubWFwX2ZpeGVkKGFkZHIpID09IDApCiAJCXJldHVybjsKIAogI2lmZGVmIENPTkZJR19QTUIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaW9yZW1hcF82NC5jIGIvYXJjaC9zaC9tbS9pb3JlbWFwXzY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNDM0NjUuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9tbS9pb3JlbWFwXzY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjYgKzAsMCBAQAotLyoKLSAqIGFyY2gvc2gvbW0vaW9yZW1hcF82NC5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDcgIFBhdWwgTXVuZHQKLSAqCi0gKiBNb3N0bHkgZGVyaXZlZCBmcm9tIGFyY2gvc2gvbW0vaW9yZW1hcC5jIHdoaWNoLCBpbiB0dXJuIGlzIG1vc3RseQotICogZGVyaXZlZCBmcm9tIGFyY2gvaTM4Ni9tbS9pb3JlbWFwLmMgLgotICoKLSAqICAgKEMpIENvcHlyaWdodCAxOTk1IDE5OTYgTGludXMgVG9ydmFsZHMKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9tbXUuaD4KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaG1lZGlhX2lvbWFwID0gewotCS5uYW1lCT0gInNobWVkaWFfaW9tYXAiLAotCS5zdGFydAk9IElPQkFTRV9WQUREUiArIFBBR0VfU0laRSwKLQkuZW5kCT0gSU9CQVNFX0VORCAtIDEsCi19OwotCi1zdGF0aWMgdm9pZCBzaG1lZGlhX21hcGlvYWRkcih1bnNpZ25lZCBsb25nIHBhLCB1bnNpZ25lZCBsb25nIHZhLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci1zdGF0aWMgdm9pZCBzaG1lZGlhX3VubWFwaW9hZGRyKHVuc2lnbmVkIGxvbmcgdmFkZHIpOwotc3RhdGljIHZvaWQgX19pb21lbSAqc2htZWRpYV9pb3JlbWFwKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgcGEsCi0JCQkJICAgICBpbnQgc3osIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotCi0vKgotICogV2UgaGF2ZSB0aGUgc2FtZSBwcm9ibGVtIGFzIHRoZSBTUEFSQywgc28gbGV0cyBoYXZlIHRoZSBzYW1lIGNvbW1lbnQ6Ci0gKiBPdXIgbWluaS1hbGxvY2F0b3IuLi4KLSAqIEJveSB0aGlzIGlzIGdyb3NzISBXZSBuZWVkIGl0IGJlY2F1c2Ugd2UgbXVzdCBtYXAgSS9PIGZvcgotICogdGltZXJzIGFuZCBpbnRlcnJ1cHQgY29udHJvbGxlciBiZWZvcmUgdGhlIGttYWxsb2MgaXMgYXZhaWxhYmxlLgotICovCi0KLSNkZWZpbmUgWE5NTE4gIDE1Ci0jZGVmaW5lIFhOUkVTICAxMAotCi1zdHJ1Y3QgeHJlc291cmNlIHsKLQlzdHJ1Y3QgcmVzb3VyY2UgeHJlczsgICAvKiBNdXN0IGJlIGZpcnN0ICovCi0JaW50IHhmbGFnOyAgICAgICAgICAgICAgLyogMSA9PSB1c2VkICovCi0JY2hhciB4bmFtZVtYTk1MTisxXTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgeHJlc291cmNlIHhyZXN2W1hOUkVTXTsKLQotc3RhdGljIHN0cnVjdCB4cmVzb3VyY2UgKnhyZXNfYWxsb2Modm9pZCkKLXsKLQlzdHJ1Y3QgeHJlc291cmNlICp4cnA7Ci0JaW50IG47Ci0KLQl4cnAgPSB4cmVzdjsKLQlmb3IgKG4gPSAwOyBuIDwgWE5SRVM7IG4rKykgewotCQlpZiAoeHJwLT54ZmxhZyA9PSAwKSB7Ci0JCQl4cnAtPnhmbGFnID0gMTsKLQkJCXJldHVybiB4cnA7Ci0JCX0KLQkJeHJwKys7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCB4cmVzX2ZyZWUoc3RydWN0IHhyZXNvdXJjZSAqeHJwKQotewotCXhycC0+eGZsYWcgPSAwOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlICpzaG1lZGlhX2ZpbmRfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyb290LAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHZhZGRyKQotewotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCi0JZm9yIChyZXMgPSByb290LT5jaGlsZDsgcmVzOyByZXMgPSByZXMtPnNpYmxpbmcpCi0JCWlmIChyZXMtPnN0YXJ0IDw9IHZhZGRyICYmIHJlcy0+ZW5kID49IHZhZGRyKQotCQkJcmV0dXJuIHJlczsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpzaG1lZGlhX2FsbG9jX2lvKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0Jc3RydWN0IHhyZXNvdXJjZSAqeHJlczsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQljaGFyICp0YWNrOwotCWludCB0bGVuOwotCi0JaWYgKG5hbWUgPT0gTlVMTCkKLQkJbmFtZSA9ICI/Pz8iOwotCi0JeHJlcyA9IHhyZXNfYWxsb2MoKTsKLQlpZiAoeHJlcyAhPSAwKSB7Ci0JCXRhY2sgPSB4cmVzLT54bmFtZTsKLQkJcmVzID0gJnhyZXMtPnhyZXM7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrX29uY2UoS0VSTl9OT1RJQ0UgIiVzOiBkb25lIHdpdGggc3RhdGljcywgIgotCQkJICAgICAgICJzd2l0Y2hpbmcgdG8ga21hbGxvY1xuIiwgX19mdW5jX18pOwotCQl0bGVuID0gc3RybGVuKG5hbWUpOwotCQl0YWNrID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSArIHRsZW4gKyAxLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0YWNrKQotCQkJcmV0dXJuIE5VTEw7Ci0JCW1lbXNldCh0YWNrLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7Ci0JCXJlcyA9IChzdHJ1Y3QgcmVzb3VyY2UgKikgdGFjazsKLQkJdGFjayArPSBzaXplb2Yoc3RydWN0IHJlc291cmNlKTsKLQl9Ci0KLQlzdHJuY3B5KHRhY2ssIG5hbWUsIFhOTUxOKTsKLQl0YWNrW1hOTUxOXSA9IDA7Ci0JcmVzLT5uYW1lID0gdGFjazsKLQotCXJldHVybiBzaG1lZGlhX2lvcmVtYXAocmVzLCBwaHlzLCBzaXplLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW9tZW0gKnNobWVkaWFfaW9yZW1hcChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyIHBhLCBpbnQgc3osCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gKCh1bnNpZ25lZCBsb25nKSBwYSkgJiAoflBBR0VfTUFTSyk7Ci0JdW5zaWduZWQgbG9uZyByb3VuZF9zeiA9IChvZmZzZXQgKyBzeiArIFBBR0VfU0laRS0xKSAmIFBBR0VfTUFTSzsKLQl1bnNpZ25lZCBsb25nIHZhOwotCXVuc2lnbmVkIGludCBwc3o7Ci0KLQlpZiAoYWxsb2NhdGVfcmVzb3VyY2UoJnNobWVkaWFfaW9tYXAsIHJlcywgcm91bmRfc3osCi0JCQkgICAgICBzaG1lZGlhX2lvbWFwLnN0YXJ0LCBzaG1lZGlhX2lvbWFwLmVuZCwKLQkJCSAgICAgIFBBR0VfU0laRSwgTlVMTCwgTlVMTCkgIT0gMCkgewotCQlwYW5pYygiYWxsb2NfaW9fcmVzKCVzKTogY2Fubm90IG9jY3VweVxuIiwKLQkJICAgICAgKHJlcy0+bmFtZSAhPSBOVUxMKSA/IHJlcy0+bmFtZSA6ICI/Pz8iKTsKLQl9Ci0KLQl2YSA9IHJlcy0+c3RhcnQ7Ci0JcGEgJj0gUEFHRV9NQVNLOwotCi0JcHN6ID0gKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIChQQUdFX1NJWkUgLSAxKSkgLyBQQUdFX1NJWkU7Ci0KLQlmb3IgKHBzeiA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7IHBzeiAhPSAwOyBwc3ogLT0gUEFHRV9TSVpFKSB7Ci0JCXNobWVkaWFfbWFwaW9hZGRyKHBhLCB2YSwgZmxhZ3MpOwotCQl2YSArPSBQQUdFX1NJWkU7Ci0JCXBhICs9IFBBR0VfU0laRTsKLQl9Ci0KLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSh1bnNpZ25lZCBsb25nKShyZXMtPnN0YXJ0ICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgc2htZWRpYV9mcmVlX2lvKHN0cnVjdCByZXNvdXJjZSAqcmVzKQotewotCXVuc2lnbmVkIGxvbmcgbGVuID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKLQotCUJVR19PTigobGVuICYgKFBBR0VfU0laRSAtIDEpKSAhPSAwKTsKLQotCXdoaWxlIChsZW4pIHsKLQkJbGVuIC09IFBBR0VfU0laRTsKLQkJc2htZWRpYV91bm1hcGlvYWRkcihyZXMtPnN0YXJ0ICsgbGVuKTsKLQl9Ci0KLQlyZWxlYXNlX3Jlc291cmNlKHJlcyk7Ci19Ci0KLXN0YXRpYyBfX2luaXRfcmVmb2sgdm9pZCAqc2g2NF9nZXRfcGFnZSh2b2lkKQotewotCXZvaWQgKnBhZ2U7Ci0KLQlpZiAoc2xhYl9pc19hdmFpbGFibGUoKSkKLQkJcGFnZSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCWVsc2UKLQkJcGFnZSA9IGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKLQotCWlmICghcGFnZSB8fCAoKHVuc2lnbmVkIGxvbmcpcGFnZSAmIH5QQUdFX01BU0spKQotCQlwYW5pYygic2g2NF9nZXRfcGFnZTogT3V0IG9mIG1lbW9yeSBhbHJlYWR5P1xuIik7Ci0KLQlyZXR1cm4gcGFnZTsKLX0KLQotc3RhdGljIHZvaWQgc2htZWRpYV9tYXBpb2FkZHIodW5zaWduZWQgbG9uZyBwYSwgdW5zaWduZWQgbG9uZyB2YSwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JcGdkX3QgKnBnZHA7Ci0JcHVkX3QgKnB1ZHA7Ci0JcG1kX3QgKnBtZHA7Ci0JcHRlX3QgKnB0ZXAsIHB0ZTsKLQlwZ3Byb3RfdCBwcm90OwotCi0JcHJfZGVidWcoInNobWVkaWFfbWFwaW9wYWdlIHBhICUwOGx4IHZhICUwOGx4XG4iLCAgcGEsIHZhKTsKLQotCWlmICghZmxhZ3MpCi0JCWZsYWdzID0gMTsgLyogMSA9IENCMC0xIGRldmljZSAqLwotCi0JcGdkcCA9IHBnZF9vZmZzZXRfayh2YSk7Ci0JaWYgKHBnZF9ub25lKCpwZ2RwKSB8fCAhcGdkX3ByZXNlbnQoKnBnZHApKSB7Ci0JCXB1ZHAgPSAocHVkX3QgKilzaDY0X2dldF9wYWdlKCk7Ci0JCXNldF9wZ2QocGdkcCwgX19wZ2QoKHVuc2lnbmVkIGxvbmcpcHVkcCB8IF9LRVJOUEdfVEFCTEUpKTsKLQl9Ci0KLQlwdWRwID0gcHVkX29mZnNldChwZ2RwLCB2YSk7Ci0JaWYgKHB1ZF9ub25lKCpwdWRwKSB8fCAhcHVkX3ByZXNlbnQoKnB1ZHApKSB7Ci0JCXBtZHAgPSAocG1kX3QgKilzaDY0X2dldF9wYWdlKCk7Ci0JCXNldF9wdWQocHVkcCwgX19wdWQoKHVuc2lnbmVkIGxvbmcpcG1kcCB8IF9LRVJOUEdfVEFCTEUpKTsKLQl9Ci0KLQlwbWRwID0gcG1kX29mZnNldChwdWRwLCB2YSk7Ci0JaWYgKHBtZF9ub25lKCpwbWRwKSB8fCAhcG1kX3ByZXNlbnQoKnBtZHApKSB7Ci0JCXB0ZXAgPSAocHRlX3QgKilzaDY0X2dldF9wYWdlKCk7Ci0JCXNldF9wbWQocG1kcCwgX19wbWQoKHVuc2lnbmVkIGxvbmcpcHRlcCArIF9QQUdFX1RBQkxFKSk7Ci0JfQotCi0JcHJvdCA9IF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEICAgICB8IF9QQUdFX1dSSVRFICB8Ci0JCQlfUEFHRV9ESVJUWSAgIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9TSEFSRUQgfCBmbGFncyk7Ci0KLQlwdGUgPSBwZm5fcHRlKHBhID4+IFBBR0VfU0hJRlQsIHByb3QpOwotCXB0ZXAgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCB2YSk7Ci0KLQlpZiAoIXB0ZV9ub25lKCpwdGVwKSAmJgotCSAgICBwdGVfdmFsKCpwdGVwKSAhPSBwdGVfdmFsKHB0ZSkpCi0JCXB0ZV9FUlJPUigqcHRlcCk7Ci0KLQlzZXRfcHRlKHB0ZXAsIHB0ZSk7Ci0KLQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKHZhLCBQQUdFX1NJWkUpOwotfQotCi1zdGF0aWMgdm9pZCBzaG1lZGlhX3VubWFwaW9hZGRyKHVuc2lnbmVkIGxvbmcgdmFkZHIpCi17Ci0JcGdkX3QgKnBnZHA7Ci0JcHVkX3QgKnB1ZHA7Ci0JcG1kX3QgKnBtZHA7Ci0JcHRlX3QgKnB0ZXA7Ci0KLQlwZ2RwID0gcGdkX29mZnNldF9rKHZhZGRyKTsKLQlpZiAocGdkX25vbmUoKnBnZHApIHx8IHBnZF9iYWQoKnBnZHApKQotCQlyZXR1cm47Ci0KLQlwdWRwID0gcHVkX29mZnNldChwZ2RwLCB2YWRkcik7Ci0JaWYgKHB1ZF9ub25lKCpwdWRwKSB8fCBwdWRfYmFkKCpwdWRwKSkKLQkJcmV0dXJuOwotCi0JcG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgdmFkZHIpOwotCWlmIChwbWRfbm9uZSgqcG1kcCkgfHwgcG1kX2JhZCgqcG1kcCkpCi0JCXJldHVybjsKLQotCXB0ZXAgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCB2YWRkcik7Ci0KLQlpZiAocHRlX25vbmUoKnB0ZXApIHx8ICFwdGVfcHJlc2VudCgqcHRlcCkpCi0JCXJldHVybjsKLQotCWNsZWFyX3BhZ2UoKHZvaWQgKilwdGVwKTsKLQlwdGVfY2xlYXIoJmluaXRfbW0sIHZhZGRyLCBwdGVwKTsKLX0KLQotdm9pZCBfX2lvbWVtICpfX2lvcmVtYXBfY2FsbGVyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqY2FsbGVyKQotewotCWNoYXIgbmFtZVsxNF07Ci0KLQlzcHJpbnRmKG5hbWUsICJwaHlzXyUwOHgiLCAodTMyKW9mZnNldCk7Ci0JcmV0dXJuIHNobWVkaWFfYWxsb2NfaW8ob2Zmc2V0LCBzaXplLCBuYW1lLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9faW9yZW1hcF9jYWxsZXIpOwotCi12b2lkIF9faW91bm1hcCh2b2lkIF9faW9tZW0gKnZpcnR1YWwpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWRkciA9ICh1bnNpZ25lZCBsb25nKXZpcnR1YWwgJiBQQUdFX01BU0s7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0JdW5zaWduZWQgaW50IHBzejsKLQotCXJlcyA9IHNobWVkaWFfZmluZF9yZXNvdXJjZSgmc2htZWRpYV9pb21hcCwgdmFkZHIpOwotCWlmICghcmVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBmcmVlIDB4JTA4bHhcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgdmFkZHIpOwotCQlyZXR1cm47Ci0JfQotCi0JcHN6ID0gKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIChQQUdFX1NJWkUgLSAxKSkgLyBQQUdFX1NJWkU7Ci0KLQlzaG1lZGlhX2ZyZWVfaW8ocmVzKTsKLQotCWlmICgoY2hhciAqKXJlcyA+PSAoY2hhciAqKXhyZXN2ICYmCi0JICAgIChjaGFyICopcmVzIDwgIChjaGFyICopJnhyZXN2W1hOUkVTXSkgewotCQl4cmVzX2ZyZWUoKHN0cnVjdCB4cmVzb3VyY2UgKilyZXMpOwotCX0gZWxzZSB7Ci0JCWtmcmVlKHJlcyk7Ci0JfQotfQotRVhQT1JUX1NZTUJPTChfX2lvdW5tYXApOwotCi1zdGF0aWMgaW50Ci1pb3JlbWFwX3Byb2NfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3QgZnBvcywgaW50IGxlbmd0aCwgaW50ICplb2YsCi0JCSAgdm9pZCAqZGF0YSkKLXsKLQljaGFyICpwID0gYnVmLCAqZSA9IGJ1ZiArIGxlbmd0aDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnI7Ci0JY29uc3QgY2hhciAqbm07Ci0KLQlmb3IgKHIgPSAoKHN0cnVjdCByZXNvdXJjZSAqKWRhdGEpLT5jaGlsZDsgciAhPSBOVUxMOyByID0gci0+c2libGluZykgewotCQlpZiAocCArIDMyID49IGUpICAgICAgICAvKiBCZXR0ZXIgdGhhbiBub3RoaW5nICovCi0JCQlicmVhazsKLQkJbm0gPSByLT5uYW1lOwotCQlpZiAobm0gPT0gTlVMTCkKLQkJCW5tID0gIj8/PyI7Ci0KLQkJcCArPSBzcHJpbnRmKHAsICIlMDhseC0lMDhseDogJXNcbiIsCi0JCQkgICAgICh1bnNpZ25lZCBsb25nKXItPnN0YXJ0LAotCQkJICAgICAodW5zaWduZWQgbG9uZylyLT5lbmQsIG5tKTsKLQl9Ci0KLQlyZXR1cm4gcC1idWY7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHJlZ2lzdGVyX3Byb2Nfb25jaGlwKHZvaWQpCi17Ci0JY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiaW9fbWFwIiwgMCwgMCwgaW9yZW1hcF9wcm9jX2luZm8sCi0JCQkgICAgICAgJnNobWVkaWFfaW9tYXApOwotCXJldHVybiAwOwotfQotbGF0ZV9pbml0Y2FsbChyZWdpc3Rlcl9wcm9jX29uY2hpcCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2lvcmVtYXBfZml4ZWQuYyBiL2FyY2gvc2gvbW0vaW9yZW1hcF9maXhlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNzhiMWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21tL2lvcmVtYXBfZml4ZWQuYwpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIFJlLW1hcCBJTyBtZW1vcnkgdG8ga2VybmVsIGFkZHJlc3Mgc3BhY2Ugc28gdGhhdCB3ZSBjYW4gYWNjZXNzIGl0LgorICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMgbmVjZXNzYXJ5IHRvIG1hcCBhCisgKiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIGludG8gdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlIGJlZm9yZSBpb3JlbWFwKCkKKyAqIGNhbiBiZSB1c2VkLCBlLmcuIGVhcmx5IGluIGJvb3QgYmVmb3JlIHBhZ2luZ19pbml0KCkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBNYXR0IEZsZW1pbmcKKyAqLworCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKworc3RydWN0IGlvcmVtYXBfbWFwIHsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGxvbmcgZml4bWFwX2FkZHI7Cit9OworCitzdGF0aWMgc3RydWN0IGlvcmVtYXBfbWFwIGlvcmVtYXBfbWFwc1tGSVhfTl9JT1JFTUFQU107CisKK3ZvaWQgX19pbml0IGlvcmVtYXBfZml4ZWRfaW5pdCh2b2lkKQoreworCXN0cnVjdCBpb3JlbWFwX21hcCAqbWFwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEZJWF9OX0lPUkVNQVBTOyBpKyspIHsKKwkJbWFwID0gJmlvcmVtYXBfbWFwc1tpXTsKKwkJbWFwLT5maXhtYXBfYWRkciA9IF9fZml4X3RvX3ZpcnQoRklYX0lPUkVNQVBfQkVHSU4gKyBpKTsKKwl9Cit9CisKK3ZvaWQgX19pbml0IF9faW9tZW0gKgoraW9yZW1hcF9maXhlZChyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCit7CisJZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4MCwgaWR4OworCXN0cnVjdCBpb3JlbWFwX21hcCAqbWFwOworCXVuc2lnbmVkIGludCBucnBhZ2VzOworCWludCBpLCBzbG90OworCisJc2xvdCA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBGSVhfTl9JT1JFTUFQUzsgaSsrKSB7CisJCW1hcCA9ICZpb3JlbWFwX21hcHNbaV07CisJCWlmICghbWFwLT5hZGRyKSB7CisJCQltYXAtPnNpemUgPSBzaXplOworCQkJc2xvdCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChzbG90IDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIE1hcHBpbmdzIGhhdmUgdG8gZml0IGluIHRoZSBGSVhfSU9SRU1BUCBhcmVhLgorCSAqLworCW5ycGFnZXMgPSBzaXplID4+IFBBR0VfU0hJRlQ7CisJaWYgKG5ycGFnZXMgPiBGSVhfTl9JT1JFTUFQUykKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIE9rLCBnbyBmb3IgaXQuLgorCSAqLworCWlkeDAgPSBGSVhfSU9SRU1BUF9CRUdJTiArIHNsb3Q7CisJaWR4ID0gaWR4MDsKKwl3aGlsZSAobnJwYWdlcyA+IDApIHsKKwkJcGdwcm90X3ZhbChwcm90KSB8PSBfUEFHRV9XSVJFRDsKKwkJX19zZXRfZml4bWFwKGlkeCwgcGh5c19hZGRyLCBwcm90KTsKKwkJcGh5c19hZGRyICs9IFBBR0VfU0laRTsKKwkJaWR4Kys7CisJCS0tbnJwYWdlczsKKwl9CisKKwltYXAtPmFkZHIgPSAodm9pZCBfX2lvbWVtICopKG9mZnNldCArIG1hcC0+Zml4bWFwX2FkZHIpOworCXJldHVybiBtYXAtPmFkZHI7Cit9CisKK2ludCBpb3VubWFwX2ZpeGVkKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwllbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHg7CisJc3RydWN0IGlvcmVtYXBfbWFwICptYXA7CisJdW5zaWduZWQgaW50IG5ycGFnZXM7CisJaW50IGksIHNsb3Q7CisKKwlzbG90ID0gLTE7CisJZm9yIChpID0gMDsgaSA8IEZJWF9OX0lPUkVNQVBTOyBpKyspIHsKKwkJbWFwID0gJmlvcmVtYXBfbWFwc1tpXTsKKwkJaWYgKG1hcC0+YWRkciA9PSBhZGRyKSB7CisJCQlzbG90ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBtYXRjaCwgaXQncyBub3QgZm9yIHVzLgorCSAqLworCWlmIChzbG90IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlucnBhZ2VzID0gbWFwLT5zaXplID4+IFBBR0VfU0hJRlQ7CisKKwlpZHggPSBGSVhfSU9SRU1BUF9CRUdJTiArIHNsb3QgKyBucnBhZ2VzIC0gMTsKKwl3aGlsZSAobnJwYWdlcyA+IDApIHsKKwkJX19jbGVhcl9maXhtYXAoaWR4LCBfX3BncHJvdChfUEFHRV9XSVJFRCkpOworCQktLWlkeDsKKwkJLS1ucnBhZ2VzOworCX0KKworCW1hcC0+c2l6ZSA9IDA7CisJbWFwLT5hZGRyID0gTlVMTDsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9ub21tdS5jIGIvYXJjaC9zaC9tbS9ub21tdS5jCmluZGV4IGFjMTZjMDUuLjc2OTRmNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vbm9tbXUuYworKysgYi9hcmNoL3NoL21tL25vbW11LmMKQEAgLTk0LDMgKzk0LDcgQEAKIHZvaWQgX19zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBwcm90KQogewogfQorCit2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3NoL21tL3BndGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjIxZmIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9tbS9wZ3RhYmxlLmMKQEAgLTAsMCArMSw1NiBAQAorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNkZWZpbmUgUEdBTExPQ19HRlAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFUEVBVCB8IF9fR0ZQX1pFUk8KKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwZ2RfY2FjaGVwOworI2lmIFBBR0VUQUJMRV9MRVZFTFMgPiAyCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBtZF9jYWNoZXA7CisjZW5kaWYKKwordm9pZCBwZ2RfY3Rvcih2b2lkICp4KQoreworCXBnZF90ICpwZ2QgPSB4OworCisJbWVtY3B5KHBnZCArIFVTRVJfUFRSU19QRVJfUEdELAorCSAgICAgICBzd2FwcGVyX3BnX2RpciArIFVTRVJfUFRSU19QRVJfUEdELAorCSAgICAgICAoUFRSU19QRVJfUEdEIC0gVVNFUl9QVFJTX1BFUl9QR0QpICogc2l6ZW9mKHBnZF90KSk7Cit9CisKK3ZvaWQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpCit7CisJcGdkX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJwZ2RfY2FjaGUiLAorCQkJCSAgICAgICBQVFJTX1BFUl9QR0QgKiAoMTw8UFRFX01BR05JVFVERSksCisJCQkJICAgICAgIFBBR0VfU0laRSwgU0xBQl9QQU5JQywgcGdkX2N0b3IpOworI2lmIFBBR0VUQUJMRV9MRVZFTFMgPiAyCisJcG1kX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJwbWRfY2FjaGUiLAorCQkJCSAgICAgICBQVFJTX1BFUl9QTUQgKiAoMTw8UFRFX01BR05JVFVERSksCisJCQkJICAgICAgIFBBR0VfU0laRSwgU0xBQl9QQU5JQywgTlVMTCk7CisjZW5kaWYKK30KKworcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhwZ2RfY2FjaGVwLCBQR0FMTE9DX0dGUCk7Cit9CisKK3ZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpCit7CisJa21lbV9jYWNoZV9mcmVlKHBnZF9jYWNoZXAsIHBnZCk7Cit9CisKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID4gMgordm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpCit7CisJc2V0X3B1ZChwdWQsIF9fcHVkKCh1bnNpZ25lZCBsb25nKXBtZCkpOworfQorCitwbWRfdCAqcG1kX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKHBtZF9jYWNoZXAsIFBHQUxMT0NfR0ZQKTsKK30KKwordm9pZCBwbWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUocG1kX2NhY2hlcCwgcG1kKTsKK30KKyNlbmRpZiAvKiBQQUdFVEFCTEVfTEVWRUxTID4gMiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wbWIuYyBiL2FyY2gvc2gvbW0vcG1iLmMKaW5kZXggMjgwZjZhMS4uMTk4YmNmZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9wbWIuYworKysgYi9hcmNoL3NoL21tL3BtYi5jCkBAIC0zLDExICszLDggQEAKICAqCiAgKiBQcml2aWxlZ2VkIFNwYWNlIE1hcHBpbmcgQnVmZmVyIChQTUIpIFN1cHBvcnQuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IFBhdWwgTXVuZHQKLSAqCi0gKiBQMS9QMiBTZWN0aW9uIG1hcHBpbmcgZGVmaW5pdGlvbnMgZnJvbSBtYXAzMi5oLCB3aGljaCB3YXM6Ci0gKgotICoJQ29weXJpZ2h0IDIwMDMgKGMpIExpbmVvIFNvbHV0aW9ucyxJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwICBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hdHQgRmxlbWluZwogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0yNCw0NyArMjEsNjcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3J3bG9jay5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKLSNkZWZpbmUgTlJfUE1CX0VOVFJJRVMJMTYKK3N0cnVjdCBwbWJfZW50cnk7CiAKLXN0YXRpYyB2b2lkIF9fcG1iX3VubWFwKHN0cnVjdCBwbWJfZW50cnkgKik7CitzdHJ1Y3QgcG1iX2VudHJ5IHsKKwl1bnNpZ25lZCBsb25nIHZwbjsKKwl1bnNpZ25lZCBsb25nIHBwbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAorCXNwaW5sb2NrX3QgbG9jazsKKworCS8qCisJICogMCAuLiBOUl9QTUJfRU5UUklFUyBmb3Igc3BlY2lmaWMgZW50cnkgc2VsZWN0aW9uLCBvcgorCSAqIFBNQl9OT19FTlRSWSB0byBzZWFyY2ggZm9yIGEgZnJlZSBvbmUKKwkgKi8KKwlpbnQgZW50cnk7CisKKwkvKiBBZGphY2VudCBlbnRyeSBsaW5rIGZvciBjb250aWd1b3VzIG11bHRpLWVudHJ5IG1hcHBpbmdzICovCisJc3RydWN0IHBtYl9lbnRyeSAqbGluazsKK307CisKK3N0YXRpYyB2b2lkIHBtYl91bm1hcF9lbnRyeShzdHJ1Y3QgcG1iX2VudHJ5ICosIGludCBkZXB0aCk7CisKK3N0YXRpYyBERUZJTkVfUldMT0NLKHBtYl9yd2xvY2spOwogc3RhdGljIHN0cnVjdCBwbWJfZW50cnkgcG1iX2VudHJ5X2xpc3RbTlJfUE1CX0VOVFJJRVNdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcG1iX21hcDsKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChwbWJfbWFwLCBOUl9QTUJfRU5UUklFUyk7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBta19wbWJfZW50cnkodW5zaWduZWQgaW50IGVudHJ5KQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIG1rX3BtYl9lbnRyeSh1bnNpZ25lZCBpbnQgZW50cnkpCiB7CiAJcmV0dXJuIChlbnRyeSAmIFBNQl9FX01BU0spIDw8IFBNQl9FX1NISUZUOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWtfcG1iX2FkZHIodW5zaWduZWQgaW50IGVudHJ5KQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIG1rX3BtYl9hZGRyKHVuc2lnbmVkIGludCBlbnRyeSkKIHsKIAlyZXR1cm4gbWtfcG1iX2VudHJ5KGVudHJ5KSB8IFBNQl9BRERSOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWtfcG1iX2RhdGEodW5zaWduZWQgaW50IGVudHJ5KQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIG1rX3BtYl9kYXRhKHVuc2lnbmVkIGludCBlbnRyeSkKIHsKIAlyZXR1cm4gbWtfcG1iX2VudHJ5KGVudHJ5KSB8IFBNQl9EQVRBOwogfQogCiBzdGF0aWMgaW50IHBtYl9hbGxvY19lbnRyeSh2b2lkKQogewotCXVuc2lnbmVkIGludCBwb3M7CisJaW50IHBvczsKIAotcmVwZWF0OgotCXBvcyA9IGZpbmRfZmlyc3RfemVyb19iaXQoJnBtYl9tYXAsIE5SX1BNQl9FTlRSSUVTKTsKLQotCWlmICh1bmxpa2VseShwb3MgPiBOUl9QTUJfRU5UUklFUykpCi0JCXJldHVybiAtRU5PU1BDOwotCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQocG9zLCAmcG1iX21hcCkpCi0JCWdvdG8gcmVwZWF0OworCXBvcyA9IGZpbmRfZmlyc3RfemVyb19iaXQocG1iX21hcCwgTlJfUE1CX0VOVFJJRVMpOworCWlmIChwb3MgPj0gMCAmJiBwb3MgPCBOUl9QTUJfRU5UUklFUykKKwkJX19zZXRfYml0KHBvcywgcG1iX21hcCk7CisJZWxzZQorCQlwb3MgPSAtRU5PU1BDOwogCiAJcmV0dXJuIHBvczsKIH0KQEAgLTczLDIxICs5MCwzNCBAQAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBlbnRyeSkKIHsKIAlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJdm9pZCAqcmV0ID0gTlVMTDsKIAlpbnQgcG9zOwogCisJd3JpdGVfbG9ja19pcnFzYXZlKCZwbWJfcndsb2NrLCBpcnFmbGFncyk7CisKIAlpZiAoZW50cnkgPT0gUE1CX05PX0VOVFJZKSB7CiAJCXBvcyA9IHBtYl9hbGxvY19lbnRyeSgpOwotCQlpZiAocG9zIDwgMCkKLQkJCXJldHVybiBFUlJfUFRSKHBvcyk7CisJCWlmICh1bmxpa2VseShwb3MgPCAwKSkgeworCQkJcmV0ID0gRVJSX1BUUihwb3MpOworCQkJZ290byBvdXQ7CisJCX0KIAl9IGVsc2UgewotCQlpZiAodGVzdF9iaXQoZW50cnksICZwbWJfbWFwKSkKLQkJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOworCQlpZiAoX190ZXN0X2FuZF9zZXRfYml0KGVudHJ5LCBwbWJfbWFwKSkgeworCQkJcmV0ID0gRVJSX1BUUigtRU5PU1BDKTsKKwkJCWdvdG8gb3V0OworCQl9CisKIAkJcG9zID0gZW50cnk7CiAJfQogCisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnBtYl9yd2xvY2ssIGlycWZsYWdzKTsKKwogCXBtYmUgPSAmcG1iX2VudHJ5X2xpc3RbcG9zXTsKLQlpZiAoIXBtYmUpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJbWVtc2V0KHBtYmUsIDAsIHNpemVvZihzdHJ1Y3QgcG1iX2VudHJ5KSk7CisKKwlzcGluX2xvY2tfaW5pdCgmcG1iZS0+bG9jayk7CiAKIAlwbWJlLT52cG4JPSB2cG47CiAJcG1iZS0+cHBuCT0gcHBuOwpAQCAtOTUsMTAxICsxMjUsMTEzIEBACiAJcG1iZS0+ZW50cnkJPSBwb3M7CiAKIAlyZXR1cm4gcG1iZTsKKworb3V0OgorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwbWJfcndsb2NrLCBpcnFmbGFncyk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcG1iX2ZyZWUoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKIHsKLQlpbnQgcG9zID0gcG1iZS0+ZW50cnk7CisJX19jbGVhcl9iaXQocG1iZS0+ZW50cnksIHBtYl9tYXApOwogCi0JcG1iZS0+dnBuCT0gMDsKLQlwbWJlLT5wcG4JPSAwOwotCXBtYmUtPmZsYWdzCT0gMDsKLQlwbWJlLT5lbnRyeQk9IDA7Ci0KLQljbGVhcl9iaXQocG9zLCAmcG1iX21hcCk7CisJcG1iZS0+ZW50cnkJPSBQTUJfTk9fRU5UUlk7CisJcG1iZS0+bGluawk9IE5VTEw7CiB9CiAKIC8qCi0gKiBNdXN0IGJlIGluIFAyIGZvciBfX3NldF9wbWJfZW50cnkoKQorICogRW5zdXJlIHRoYXQgdGhlIFBNQiBlbnRyaWVzIG1hdGNoIG91ciBjYWNoZSBjb25maWd1cmF0aW9uLgorICoKKyAqIFdoZW4gd2UgYXJlIGluIDMyLWJpdCBhZGRyZXNzIGV4dGVuZGVkIG1vZGUsIENDUi5DQiBiZWNvbWVzCisgKiBpbnZhbGlkLCBzbyBjYXJlIG11c3QgYmUgdGFrZW4gdG8gbWFudWFsbHkgYWRqdXN0IGNhY2hlYWJsZQorICogdHJhbnNsYXRpb25zLgogICovCi1zdGF0aWMgdm9pZCBfX3NldF9wbWJfZW50cnkodW5zaWduZWQgbG9uZyB2cG4sIHVuc2lnbmVkIGxvbmcgcHBuLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwb3MpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1iX2NhY2hlX2ZsYWdzKHZvaWQpCiB7Ci0JY3RybF9vdXRsKHZwbiB8IFBNQl9WLCBta19wbWJfYWRkcihwb3MpKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAotI2lmZGVmIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0gKLQkvKgotCSAqIFdoZW4gd2UgYXJlIGluIDMyLWJpdCBhZGRyZXNzIGV4dGVuZGVkIG1vZGUsIENDUi5DQiBiZWNvbWVzCi0JICogaW52YWxpZCwgc28gY2FyZSBtdXN0IGJlIHRha2VuIHRvIG1hbnVhbGx5IGFkanVzdCBjYWNoZWFibGUKLQkgKiB0cmFuc2xhdGlvbnMuCi0JICovCi0JaWYgKGxpa2VseShmbGFncyAmIFBNQl9DKSkKLQkJZmxhZ3MgfD0gUE1CX1dUOworI2lmIGRlZmluZWQoQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCkKKwlmbGFncyB8PSBQTUJfQyB8IFBNQl9XVCB8IFBNQl9VQjsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NBQ0hFX1dSSVRFQkFDSykKKwlmbGFncyB8PSBQTUJfQzsKICNlbmRpZgogCi0JY3RybF9vdXRsKHBwbiB8IGZsYWdzIHwgUE1CX1YsIG1rX3BtYl9kYXRhKHBvcykpOworCXJldHVybiBmbGFnczsKIH0KIAotc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgc2V0X3BtYl9lbnRyeShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQorLyoKKyAqIE11c3QgYmUgcnVuIHVuY2FjaGVkLgorICovCitzdGF0aWMgdm9pZCBfX3NldF9wbWJfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKIHsKLQlqdW1wX3RvX3VuY2FjaGVkKCk7Ci0JX19zZXRfcG1iX2VudHJ5KHBtYmUtPnZwbiwgcG1iZS0+cHBuLCBwbWJlLT5mbGFncywgcG1iZS0+ZW50cnkpOwotCWJhY2tfdG9fY2FjaGVkKCk7CisJd3JpdGVsX3VuY2FjaGVkKHBtYmUtPnZwbiB8IFBNQl9WLCBta19wbWJfYWRkcihwbWJlLT5lbnRyeSkpOworCXdyaXRlbF91bmNhY2hlZChwbWJlLT5wcG4gfCBwbWJlLT5mbGFncyB8IFBNQl9WLAorCQkJbWtfcG1iX2RhdGEocG1iZS0+ZW50cnkpKTsKIH0KIAotc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgY2xlYXJfcG1iX2VudHJ5KHN0cnVjdCBwbWJfZW50cnkgKnBtYmUpCitzdGF0aWMgdm9pZCBfX2NsZWFyX3BtYl9lbnRyeShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQogewotCXVuc2lnbmVkIGludCBlbnRyeSA9IHBtYmUtPmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGFkZHIsIGRhdGE7CisJdW5zaWduZWQgbG9uZyBhZGRyX3ZhbCwgZGF0YV92YWw7CiAKLQlpZiAodW5saWtlbHkoZW50cnkgPj0gTlJfUE1CX0VOVFJJRVMpKQotCQlyZXR1cm47CisJYWRkciA9IG1rX3BtYl9hZGRyKHBtYmUtPmVudHJ5KTsKKwlkYXRhID0gbWtfcG1iX2RhdGEocG1iZS0+ZW50cnkpOwogCi0JanVtcF90b191bmNhY2hlZCgpOworCWFkZHJfdmFsID0gX19yYXdfcmVhZGwoYWRkcik7CisJZGF0YV92YWwgPSBfX3Jhd19yZWFkbChkYXRhKTsKIAogCS8qIENsZWFyIFYtYml0ICovCi0JYWRkciA9IG1rX3BtYl9hZGRyKGVudHJ5KTsKLQljdHJsX291dGwoY3RybF9pbmwoYWRkcikgJiB+UE1CX1YsIGFkZHIpOwotCi0JYWRkciA9IG1rX3BtYl9kYXRhKGVudHJ5KTsKLQljdHJsX291dGwoY3RybF9pbmwoYWRkcikgJiB+UE1CX1YsIGFkZHIpOwotCi0JYmFja190b19jYWNoZWQoKTsKKwl3cml0ZWxfdW5jYWNoZWQoYWRkcl92YWwgJiB+UE1CX1YsIGFkZHIpOworCXdyaXRlbF91bmNhY2hlZChkYXRhX3ZhbCAmIH5QTUJfViwgZGF0YSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldF9wbWJfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYmUtPmxvY2ssIGZsYWdzKTsKKwlfX3NldF9wbWJfZW50cnkocG1iZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1iZS0+bG9jaywgZmxhZ3MpOworfQogCiBzdGF0aWMgc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJaW50IGZsYWc7CiB9IHBtYl9zaXplc1tdID0gewotCXsgLnNpemUJPSAweDIwMDAwMDAwLCAuZmxhZyA9IFBNQl9TWl81MTJNLCB9LAotCXsgLnNpemUgPSAweDA4MDAwMDAwLCAuZmxhZyA9IFBNQl9TWl8xMjhNLCB9LAotCXsgLnNpemUgPSAweDA0MDAwMDAwLCAuZmxhZyA9IFBNQl9TWl82NE0sICB9LAotCXsgLnNpemUgPSAweDAxMDAwMDAwLCAuZmxhZyA9IFBNQl9TWl8xNk0sICB9LAorCXsgLnNpemUJPSBTWl81MTJNLCAuZmxhZyA9IFBNQl9TWl81MTJNLCB9LAorCXsgLnNpemUgPSBTWl8xMjhNLCAuZmxhZyA9IFBNQl9TWl8xMjhNLCB9LAorCXsgLnNpemUgPSBTWl82NE0sICAuZmxhZyA9IFBNQl9TWl82NE0sICB9LAorCXsgLnNpemUgPSBTWl8xNk0sICAuZmxhZyA9IFBNQl9TWl8xNk0sICB9LAogfTsKIAogbG9uZyBwbWJfcmVtYXAodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLAotCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKIHsKIAlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJwLCAqcG1iZTsKIAl1bnNpZ25lZCBsb25nIHdhbnRlZDsKIAlpbnQgcG1iX2ZsYWdzLCBpOwogCWxvbmcgZXJyOworCXU2NCBmbGFnczsKKworCWZsYWdzID0gcGdwcm90X3ZhbChwcm90KTsKKworCXBtYl9mbGFncyA9IFBNQl9XVCB8IFBNQl9VQjsKIAogCS8qIENvbnZlcnQgdHlwaWNhbCBwZ3Byb3QgdmFsdWUgdG8gdGhlIFBNQiBlcXVpdmFsZW50ICovCiAJaWYgKGZsYWdzICYgX1BBR0VfQ0FDSEFCTEUpIHsKLQkJaWYgKGZsYWdzICYgX1BBR0VfV1QpCi0JCQlwbWJfZmxhZ3MgPSBQTUJfV1Q7Ci0JCWVsc2UKLQkJCXBtYl9mbGFncyA9IFBNQl9DOwotCX0gZWxzZQotCQlwbWJfZmxhZ3MgPSBQTUJfV1QgfCBQTUJfVUI7CisJCXBtYl9mbGFncyB8PSBQTUJfQzsKKworCQlpZiAoKGZsYWdzICYgX1BBR0VfV1QpID09IDApCisJCQlwbWJfZmxhZ3MgJj0gfihQTUJfV1QgfCBQTUJfVUIpOworCX0KIAogCXBtYnAgPSBOVUxMOwogCXdhbnRlZCA9IHNpemU7CiAKIGFnYWluOgogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9zaXplcyk7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJCWlmIChzaXplIDwgcG1iX3NpemVzW2ldLnNpemUpCiAJCQljb250aW51ZTsKIApAQCAtMjAwLDE4ICsyNDIsMjUgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJc2V0X3BtYl9lbnRyeShwbWJlKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYmUtPmxvY2ssIGZsYWdzKTsKKworCQlfX3NldF9wbWJfZW50cnkocG1iZSk7CiAKIAkJcGh5cwkrPSBwbWJfc2l6ZXNbaV0uc2l6ZTsKIAkJdmFkZHIJKz0gcG1iX3NpemVzW2ldLnNpemU7CiAJCXNpemUJLT0gcG1iX3NpemVzW2ldLnNpemU7CiAKKwkJcG1iZS0+c2l6ZSA9IHBtYl9zaXplc1tpXS5zaXplOworCiAJCS8qCiAJCSAqIExpbmsgYWRqYWNlbnQgZW50cmllcyB0aGF0IHNwYW4gbXVsdGlwbGUgUE1CIGVudHJpZXMKIAkJICogZm9yIGVhc2llciB0ZWFyLWRvd24uCiAJCSAqLwotCQlpZiAobGlrZWx5KHBtYnApKQorCQlpZiAobGlrZWx5KHBtYnApKSB7CisJCQlzcGluX2xvY2soJnBtYnAtPmxvY2spOwogCQkJcG1icC0+bGluayA9IHBtYmU7CisJCQlzcGluX3VubG9jaygmcG1icC0+bG9jayk7CisJCX0KIAogCQlwbWJwID0gcG1iZTsKIApAQCAtMjIxLDE2ICsyNzAsMTcgQEAKIAkJICogcG1iX3NpemVzW2ldLnNpemUgYWdhaW4uCiAJCSAqLwogCQlpLS07CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1iZS0+bG9jaywgZmxhZ3MpOwogCX0KIAotCWlmIChzaXplID49IDB4MTAwMDAwMCkKKwlpZiAoc2l6ZSA+PSBTWl8xNk0pCiAJCWdvdG8gYWdhaW47CiAKIAlyZXR1cm4gd2FudGVkIC0gc2l6ZTsKIAogb3V0OgotCWlmIChwbWJwKQotCQlfX3BtYl91bm1hcChwbWJwKTsKKwlwbWJfdW5tYXBfZW50cnkocG1icCwgTlJfUE1CX0VOVFJJRVMpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTI0MCwyNCArMjkwLDUyIEBACiAJc3RydWN0IHBtYl9lbnRyeSAqcG1iZSA9IE5VTEw7CiAJaW50IGk7CiAKKwlyZWFkX2xvY2soJnBtYl9yd2xvY2spOworCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX2VudHJ5X2xpc3QpOyBpKyspIHsKLQkJaWYgKHRlc3RfYml0KGksICZwbWJfbWFwKSkgeworCQlpZiAodGVzdF9iaXQoaSwgcG1iX21hcCkpIHsKIAkJCXBtYmUgPSAmcG1iX2VudHJ5X2xpc3RbaV07CiAJCQlpZiAocG1iZS0+dnBuID09IGFkZHIpCiAJCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQlpZiAodW5saWtlbHkoIXBtYmUpKQotCQlyZXR1cm47CisJcmVhZF91bmxvY2soJnBtYl9yd2xvY2spOwogCi0JX19wbWJfdW5tYXAocG1iZSk7CisJcG1iX3VubWFwX2VudHJ5KHBtYmUsIE5SX1BNQl9FTlRSSUVTKTsKIH0KIAotc3RhdGljIHZvaWQgX19wbWJfdW5tYXAoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKK3N0YXRpYyBib29sIHBtYl9jYW5fbWVyZ2Uoc3RydWN0IHBtYl9lbnRyeSAqYSwgc3RydWN0IHBtYl9lbnRyeSAqYikKIHsKLQlCVUdfT04oIXRlc3RfYml0KHBtYmUtPmVudHJ5LCAmcG1iX21hcCkpOworCXJldHVybiAoYi0+dnBuID09IChhLT52cG4gKyBhLT5zaXplKSkgJiYKKwkgICAgICAgKGItPnBwbiA9PSAoYS0+cHBuICsgYS0+c2l6ZSkpICYmCisJICAgICAgIChiLT5mbGFncyA9PSBhLT5mbGFncyk7Cit9CiAKK3N0YXRpYyBib29sIHBtYl9zaXplX3ZhbGlkKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9zaXplcyk7IGkrKykKKwkJaWYgKHBtYl9zaXplc1tpXS5zaXplID09IHNpemUpCisJCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCBwbWJfc2l6ZV90b19mbGFncyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfc2l6ZXMpOyBpKyspCisJCWlmIChwbWJfc2l6ZXNbaV0uc2l6ZSA9PSBzaXplKQorCQkJcmV0dXJuIHBtYl9zaXplc1tpXS5mbGFnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fcG1iX3VubWFwX2VudHJ5KHN0cnVjdCBwbWJfZW50cnkgKnBtYmUsIGludCBkZXB0aCkKK3sKIAlkbyB7CiAJCXN0cnVjdCBwbWJfZW50cnkgKnBtYmxpbmsgPSBwbWJlOwogCkBAIC0yNjgsMTAyICszNDYsMzEyIEBACiAJCSAqIHRoaXMgZW50cnkgaW4gcG1iX2FsbG9jKCkgKGV2ZW4gaWYgd2UgaGF2ZW4ndCBmaWxsZWQKIAkJICogaXQgeWV0KS4KIAkJICoKLQkJICogVGhlcmVmb3JlLCBjYWxsaW5nIGNsZWFyX3BtYl9lbnRyeSgpIGlzIHNhZmUgYXMgbm8KKwkJICogVGhlcmVmb3JlLCBjYWxsaW5nIF9fY2xlYXJfcG1iX2VudHJ5KCkgaXMgc2FmZSBhcyBubwogCQkgKiBvdGhlciBtYXBwaW5nIGNhbiBiZSB1c2luZyB0aGF0IHNsb3QuCiAJCSAqLwotCQljbGVhcl9wbWJfZW50cnkocG1iZSk7CisJCV9fY2xlYXJfcG1iX2VudHJ5KHBtYmUpOwogCiAJCXBtYmUgPSBwbWJsaW5rLT5saW5rOwogCiAJCXBtYl9mcmVlKHBtYmxpbmspOwotCX0gd2hpbGUgKHBtYmUpOworCX0gd2hpbGUgKHBtYmUgJiYgLS1kZXB0aCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE1CCi1pbnQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgcG1iX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIHBtYl91bm1hcF9lbnRyeShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlLCBpbnQgZGVwdGgpCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0JbG9uZyBzaXplLCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWp1bXBfdG9fdW5jYWNoZWQoKTsKKwlpZiAodW5saWtlbHkoIXBtYmUpKQorCQlyZXR1cm47CiAKLQkvKgotCSAqIEluc2VydCBQTUIgZW50cmllcyBmb3IgdGhlIFAxIGFuZCBQMiBhcmVhcyBzbyB0aGF0LCBhZnRlcgotCSAqIHdlJ3ZlIHN3aXRjaGVkIHRoZSBNTVUgdG8gMzItYml0IG1vZGUsIHRoZSBzZW1hbnRpY3Mgb2YgUDEKLQkgKiBhbmQgUDIgYXJlIHRoZSBzYW1lIGFzIGluIDI5LWJpdCBtb2RlLCBlLmcuCi0JICoKLQkgKglQMSAtIHByb3ZpZGVzIGEgY2FjaGVkIHdpbmRvdyBvbnRvIHBoeXNpY2FsIG1lbW9yeQotCSAqCVAyIC0gcHJvdmlkZXMgYW4gdW5jYWNoZWQgd2luZG93IG9udG8gcGh5c2ljYWwgbWVtb3J5Ci0JICovCi0Jc2l6ZSA9IF9fTUVNT1JZX1NUQVJUICsgX19NRU1PUllfU0laRTsKLQotCXJldCA9IHBtYl9yZW1hcChQMVNFRywgMHgwMDAwMDAwMCwgc2l6ZSwgUE1CX0MpOwotCUJVR19PTihyZXQgIT0gc2l6ZSk7Ci0KLQlyZXQgPSBwbWJfcmVtYXAoUDJTRUcsIDB4MDAwMDAwMDAsIHNpemUsIFBNQl9XVCB8IFBNQl9VQik7Ci0JQlVHX09OKHJldCAhPSBzaXplKTsKLQotCWN0cmxfb3V0bCgwLCBQTUJfSVJNQ1IpOwotCi0JLyogUE1CLlNFIGFuZCBVQls3XSAqLwotCWN0cmxfb3V0bChQQVNDUl9TRSB8ICgxIDw8IDcpLCBQTUJfUEFTQ1IpOwotCi0JLyogRmx1c2ggb3V0IHRoZSBUTEIgKi8KLQlpID0gIGN0cmxfaW5sKE1NVUNSKTsKLQlpIHw9IE1NVUNSX1RJOwotCWN0cmxfb3V0bChpLCBNTVVDUik7Ci0KLQliYWNrX3RvX2NhY2hlZCgpOwotCi0JcmV0dXJuIDA7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZwbWJfcndsb2NrLCBmbGFncyk7CisJX19wbWJfdW5tYXBfZW50cnkocG1iZSwgZGVwdGgpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwbWJfcndsb2NrLCBmbGFncyk7CiB9Ci0jZWxzZQotaW50IF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIHBtYl9pbml0KHZvaWQpCisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50IHBtYl9wcG5faW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwcG4pCit7CisJcmV0dXJuIHBwbiA+PSBfX3BhKG1lbW9yeV9zdGFydCkgJiYgcHBuIDwgX19wYShtZW1vcnlfZW5kKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHBtYl9ub3RpZnkodm9pZCkKIHsKIAlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGFkZHIsIGRhdGE7CiAKLQlqdW1wX3RvX3VuY2FjaGVkKCk7CisJcHJfaW5mbygiUE1COiBib290IG1hcHBpbmdzOlxuIik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgUE1CX0VOVFJZX01BWDsgaSsrKSB7CisJcmVhZF9sb2NrKCZwbWJfcndsb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9lbnRyeV9saXN0KTsgaSsrKSB7CiAJCXN0cnVjdCBwbWJfZW50cnkgKnBtYmU7Ci0JCXVuc2lnbmVkIGxvbmcgdnBuLCBwcG4sIGZsYWdzOwogCi0JCWFkZHIgPSBQTUJfREFUQSArIChpIDw8IFBNQl9FX1NISUZUKTsKLQkJZGF0YSA9IGN0cmxfaW5sKGFkZHIpOwotCQlpZiAoIShkYXRhICYgUE1CX1YpKQorCQlpZiAoIXRlc3RfYml0KGksIHBtYl9tYXApKQogCQkJY29udGludWU7CiAKLQkJaWYgKGRhdGEgJiBQTUJfQykgewotI2lmIGRlZmluZWQoQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCkKLQkJCWRhdGEgfD0gUE1CX1dUOwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ0FDSEVfV1JJVEVCQUNLKQotCQkJZGF0YSAmPSB+UE1CX1dUOwotI2Vsc2UKLQkJCWRhdGEgJj0gfihQTUJfQyB8IFBNQl9XVCk7Ci0jZW5kaWYKLQkJfQotCQljdHJsX291dGwoZGF0YSwgYWRkcik7CisJCXBtYmUgPSAmcG1iX2VudHJ5X2xpc3RbaV07CiAKLQkJcHBuID0gZGF0YSAmIFBNQl9QRk5fTUFTSzsKLQotCQlmbGFncyA9IGRhdGEgJiAoUE1CX0MgfCBQTUJfV1QgfCBQTUJfVUIpOwotCQlmbGFncyB8PSBkYXRhICYgUE1CX1NaX01BU0s7Ci0KLQkJYWRkciA9IFBNQl9BRERSICsgKGkgPDwgUE1CX0VfU0hJRlQpOwotCQlkYXRhID0gY3RybF9pbmwoYWRkcik7Ci0KLQkJdnBuID0gZGF0YSAmIFBNQl9QRk5fTUFTSzsKLQotCQlwbWJlID0gcG1iX2FsbG9jKHZwbiwgcHBuLCBmbGFncywgaSk7Ci0JCVdBUk5fT04oSVNfRVJSKHBtYmUpKTsKKwkJcHJfaW5mbygiICAgICAgIDB4JTA4bHggLT4gMHglMDhseCBbICU0bGRNQiAlMnNjYWNoZWQgXVxuIiwKKwkJCXBtYmUtPnZwbiA+PiBQQUdFX1NISUZULCBwbWJlLT5wcG4gPj4gUEFHRV9TSElGVCwKKwkJCXBtYmUtPnNpemUgPj4gMjAsIChwbWJlLT5mbGFncyAmIFBNQl9DKSA/ICIiIDogInVuIik7CiAJfQogCi0JYmFja190b19jYWNoZWQoKTsKLQotCXJldHVybiAwOworCXJlYWRfdW5sb2NrKCZwbWJfcndsb2NrKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUE1CICovCisKKy8qCisgKiBTeW5jIG91ciBzb2Z0d2FyZSBjb3B5IG9mIHRoZSBQTUIgbWFwcGluZ3Mgd2l0aCB0aG9zZSBpbiBoYXJkd2FyZS4gVGhlCisgKiBtYXBwaW5ncyBpbiB0aGUgaGFyZHdhcmUgUE1CIHdlcmUgZWl0aGVyIHNldCB1cCBieSB0aGUgYm9vdGxvYWRlciBvcgorICogdmVyeSBlYXJseSBvbiBieSB0aGUga2VybmVsLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcG1iX3N5bmNocm9uaXplKHZvaWQpCit7CisJc3RydWN0IHBtYl9lbnRyeSAqcG1icCA9IE5VTEw7CisJaW50IGksIGo7CisKKwkvKgorCSAqIFJ1biB0aHJvdWdoIHRoZSBpbml0aWFsIGJvb3QgbWFwcGluZ3MsIGxvZyB0aGUgZXN0YWJsaXNoZWQKKwkgKiBvbmVzLCBhbmQgYmxvdyBhd2F5IGFueXRoaW5nIHRoYXQgZmFsbHMgb3V0c2lkZSBvZiB0aGUgdmFsaWQKKwkgKiBQUE4gcmFuZ2UuIFNwZWNpZmljYWxseSwgd2Ugb25seSBjYXJlIGFib3V0IGV4aXN0aW5nIG1hcHBpbmdzCisJICogdGhhdCBpbXBhY3QgdGhlIGNhY2hlZC91bmNhY2hlZCBzZWN0aW9ucy4KKwkgKgorCSAqIE5vdGUgdGhhdCB0b3VjaGluZyB0aGVzZSBjYW4gYmUgYSBiaXQgb2YgYSBtaW5lZmllbGQ7IHRoZSBib290CisJICogbG9hZGVyIGNhbiBlc3RhYmxpc2ggbXVsdGktcGFnZSBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIGNhY2hpbmcKKwkgKiBhdHRyaWJ1dGVzLCBzbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIGFyZW4ndCBtb2RpZnlpbmcgYQorCSAqIG1hcHBpbmcgdGhhdCB3ZSdyZSBwcmVzZW50bHkgZXhlY3V0aW5nIGZyb20sIG9yIG1heSBleGVjdXRlCisJICogZnJvbSBpbiB0aGUgY2FzZSBvZiBzdHJhZGRsaW5nIHBhZ2UgYm91bmRhcmllcy4KKwkgKgorCSAqIEluIHRoZSBmdXR1cmUgd2Ugd2lsbCBoYXZlIHRvIHRpZHkgdXAgYWZ0ZXIgdGhlIGJvb3QgbG9hZGVyIGJ5CisJICoganVtcGluZyBiZXR3ZWVuIHRoZSBjYWNoZWQgYW5kIHVuY2FjaGVkIG1hcHBpbmdzIGFuZCB0ZWFyaW5nCisJICogZG93biBhbHRlcm5hdGluZyBtYXBwaW5ncyB3aGlsZSBleGVjdXRpbmcgZnJvbSB0aGUgb3RoZXIuCisJICovCisJZm9yIChpID0gMDsgaSA8IE5SX1BNQl9FTlRSSUVTOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBhZGRyLCBkYXRhOworCQl1bnNpZ25lZCBsb25nIGFkZHJfdmFsLCBkYXRhX3ZhbDsKKwkJdW5zaWduZWQgbG9uZyBwcG4sIHZwbiwgZmxhZ3M7CisJCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJCXVuc2lnbmVkIGludCBzaXplOworCQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlOworCisJCWFkZHIgPSBta19wbWJfYWRkcihpKTsKKwkJZGF0YSA9IG1rX3BtYl9kYXRhKGkpOworCisJCWFkZHJfdmFsID0gX19yYXdfcmVhZGwoYWRkcik7CisJCWRhdGFfdmFsID0gX19yYXdfcmVhZGwoZGF0YSk7CisKKwkJLyoKKwkJICogU2tpcCBvdmVyIGFueSBib2d1cyBlbnRyaWVzCisJCSAqLworCQlpZiAoIShkYXRhX3ZhbCAmIFBNQl9WKSB8fCAhKGFkZHJfdmFsICYgUE1CX1YpKQorCQkJY29udGludWU7CisKKwkJcHBuID0gZGF0YV92YWwgJiBQTUJfUEZOX01BU0s7CisJCXZwbiA9IGFkZHJfdmFsICYgUE1CX1BGTl9NQVNLOworCisJCS8qCisJCSAqIE9ubHkgcHJlc2VydmUgaW4tcmFuZ2UgbWFwcGluZ3MuCisJCSAqLworCQlpZiAoIXBtYl9wcG5faW5fcmFuZ2UocHBuKSkgeworCQkJLyoKKwkJCSAqIEludmFsaWRhdGUgYW55dGhpbmcgb3V0IG9mIGJvdW5kcy4KKwkJCSAqLworCQkJd3JpdGVsX3VuY2FjaGVkKGFkZHJfdmFsICYgflBNQl9WLCBhZGRyKTsKKwkJCXdyaXRlbF91bmNhY2hlZChkYXRhX3ZhbCAmIH5QTUJfViwgZGF0YSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFVwZGF0ZSB0aGUgY2FjaGluZyBhdHRyaWJ1dGVzIGlmIG5lY2Vzc2FyeQorCQkgKi8KKwkJaWYgKGRhdGFfdmFsICYgUE1CX0MpIHsKKwkJCWRhdGFfdmFsICY9IH5QTUJfQ0FDSEVfTUFTSzsKKwkJCWRhdGFfdmFsIHw9IHBtYl9jYWNoZV9mbGFncygpOworCisJCQl3cml0ZWxfdW5jYWNoZWQoZGF0YV92YWwsIGRhdGEpOworCQl9CisKKwkJc2l6ZSA9IGRhdGFfdmFsICYgUE1CX1NaX01BU0s7CisJCWZsYWdzID0gc2l6ZSB8IChkYXRhX3ZhbCAmIFBNQl9DQUNIRV9NQVNLKTsKKworCQlwbWJlID0gcG1iX2FsbG9jKHZwbiwgcHBuLCBmbGFncywgaSk7CisJCWlmIChJU19FUlIocG1iZSkpIHsKKwkJCVdBUk5fT05fT05DRSgxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYmUtPmxvY2ssIGlycWZsYWdzKTsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShwbWJfc2l6ZXMpOyBqKyspCisJCQlpZiAocG1iX3NpemVzW2pdLmZsYWcgPT0gc2l6ZSkKKwkJCQlwbWJlLT5zaXplID0gcG1iX3NpemVzW2pdLnNpemU7CisKKwkJaWYgKHBtYnApIHsKKwkJCXNwaW5fbG9jaygmcG1icC0+bG9jayk7CisKKwkJCS8qCisJCQkgKiBDb21wYXJlIHRoZSBwcmV2aW91cyBlbnRyeSBhZ2FpbnN0IHRoZSBjdXJyZW50IG9uZSB0bworCQkJICogc2VlIGlmIHRoZSBlbnRyaWVzIHNwYW4gYSBjb250aWd1b3VzIG1hcHBpbmcuIElmIHNvLAorCQkJICogc2V0dXAgdGhlIGVudHJ5IGxpbmtzIGFjY29yZGluZ2x5LiBDb21wb3VuZCBtYXBwaW5ncworCQkJICogYXJlIGxhdGVyIGNvYWxlc2NlZC4KKwkJCSAqLworCQkJaWYgKHBtYl9jYW5fbWVyZ2UocG1icCwgcG1iZSkpCisJCQkJcG1icC0+bGluayA9IHBtYmU7CisKKwkJCXNwaW5fdW5sb2NrKCZwbWJwLT5sb2NrKTsKKwkJfQorCisJCXBtYnAgPSBwbWJlOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYmUtPmxvY2ssIGlycWZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwbWJfbWVyZ2Uoc3RydWN0IHBtYl9lbnRyeSAqaGVhZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNwYW4sIG5ld3NpemU7CisJc3RydWN0IHBtYl9lbnRyeSAqdGFpbDsKKwlpbnQgaSA9IDEsIGRlcHRoID0gMDsKKworCXNwYW4gPSBuZXdzaXplID0gaGVhZC0+c2l6ZTsKKworCXRhaWwgPSBoZWFkLT5saW5rOworCXdoaWxlICh0YWlsKSB7CisJCXNwYW4gKz0gdGFpbC0+c2l6ZTsKKworCQlpZiAocG1iX3NpemVfdmFsaWQoc3BhbikpIHsKKwkJCW5ld3NpemUgPSBzcGFuOworCQkJZGVwdGggPSBpOworCQl9CisKKwkJLyogVGhpcyBpcyB0aGUgZW5kIG9mIHRoZSBsaW5lLi4gKi8KKwkJaWYgKCF0YWlsLT5saW5rKQorCQkJYnJlYWs7CisKKwkJdGFpbCA9IHRhaWwtPmxpbms7CisJCWkrKzsKKwl9CisKKwkvKgorCSAqIFRoZSBtZXJnZWQgcGFnZSBzaXplIG11c3QgYmUgdmFsaWQuCisJICovCisJaWYgKCFwbWJfc2l6ZV92YWxpZChuZXdzaXplKSkKKwkJcmV0dXJuOworCisJaGVhZC0+ZmxhZ3MgJj0gflBNQl9TWl9NQVNLOworCWhlYWQtPmZsYWdzIHw9IHBtYl9zaXplX3RvX2ZsYWdzKG5ld3NpemUpOworCisJaGVhZC0+c2l6ZSA9IG5ld3NpemU7CisKKwlfX3BtYl91bm1hcF9lbnRyeShoZWFkLT5saW5rLCBkZXB0aCk7CisJX19zZXRfcG1iX2VudHJ5KGhlYWQpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcG1iX2NvYWxlc2NlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcG1iX3J3bG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX2VudHJ5X2xpc3QpOyBpKyspIHsKKwkJc3RydWN0IHBtYl9lbnRyeSAqcG1iZTsKKworCQlpZiAoIXRlc3RfYml0KGksIHBtYl9tYXApKQorCQkJY29udGludWU7CisKKwkJcG1iZSA9ICZwbWJfZW50cnlfbGlzdFtpXTsKKworCQkvKgorCQkgKiBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gY29tcG91bmQgbWFwcGluZ3MKKwkJICovCisJCWlmICghcG1iZS0+bGluaykKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIE5vdGhpbmcgdG8gZG8gaWYgaXQgYWxyZWFkeSB1c2VzIHRoZSBsYXJnZXN0IHBvc3NpYmxlCisJCSAqIHBhZ2Ugc2l6ZS4KKwkJICovCisJCWlmIChwbWJlLT5zaXplID09IFNaXzUxMk0pCisJCQljb250aW51ZTsKKworCQlwbWJfbWVyZ2UocG1iZSk7CisJfQorCisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnBtYl9yd2xvY2ssIGZsYWdzKTsKK30KKworI2lmZGVmIENPTkZJR19VTkNBQ0hFRF9NQVBQSU5HCitzdGF0aWMgdm9pZCBfX2luaXQgcG1iX3Jlc2l6ZSh2b2lkKQoreworCWludCBpOworCisJLyoKKwkgKiBJZiB0aGUgdW5jYWNoZWQgbWFwcGluZyB3YXMgY29uc3RydWN0ZWQgYnkgdGhlIGtlcm5lbCwgaXQgd2lsbAorCSAqIGFscmVhZHkgYmUgYSByZWFzb25hYmxlIHNpemUuCisJICovCisJaWYgKHVuY2FjaGVkX3NpemUgPT0gU1pfMTZNKQorCQlyZXR1cm47CisKKwlyZWFkX2xvY2soJnBtYl9yd2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX2VudHJ5X2xpc3QpOyBpKyspIHsKKwkJc3RydWN0IHBtYl9lbnRyeSAqcG1iZTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlpZiAoIXRlc3RfYml0KGksIHBtYl9tYXApKQorCQkJY29udGludWU7CisKKwkJcG1iZSA9ICZwbWJfZW50cnlfbGlzdFtpXTsKKworCQlpZiAocG1iZS0+dnBuICE9IHVuY2FjaGVkX3N0YXJ0KQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogRm91bmQgaXQsIG5vdyByZXNpemUgaXQuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1iZS0+bG9jaywgZmxhZ3MpOworCisJCXBtYmUtPnNpemUgPSBTWl8xNk07CisJCXBtYmUtPmZsYWdzICY9IH5QTUJfU1pfTUFTSzsKKwkJcG1iZS0+ZmxhZ3MgfD0gcG1iX3NpemVfdG9fZmxhZ3MocG1iZS0+c2l6ZSk7CisKKwkJdW5jYWNoZWRfcmVzaXplKHBtYmUtPnNpemUpOworCisJCV9fc2V0X3BtYl9lbnRyeShwbWJlKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWJlLT5sb2NrLCBmbGFncyk7CisJfQorCisJcmVhZF9sb2NrKCZwbWJfcndsb2NrKTsKK30KKyNlbmRpZgorCit2b2lkIF9faW5pdCBwbWJfaW5pdCh2b2lkKQoreworCS8qIFN5bmNocm9uaXplIHNvZnR3YXJlIHN0YXRlICovCisJcG1iX3N5bmNocm9uaXplKCk7CisKKwkvKiBBdHRlbXB0IHRvIGNvbWJpbmUgY29tcG91bmQgbWFwcGluZ3MgKi8KKwlwbWJfY29hbGVzY2UoKTsKKworI2lmZGVmIENPTkZJR19VTkNBQ0hFRF9NQVBQSU5HCisJLyogUmVzaXplIGluaXRpYWwgbWFwcGluZ3MsIGlmIG5lY2Vzc2FyeSAqLworCXBtYl9yZXNpemUoKTsKKyNlbmRpZgorCisJLyogTG9nIHRoZW0gKi8KKwlwbWJfbm90aWZ5KCk7CisKKwl3cml0ZWxfdW5jYWNoZWQoMCwgUE1CX0lSTUNSKTsKKworCS8qIEZsdXNoIG91dCB0aGUgVExCICovCisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKE1NVUNSKSB8IE1NVUNSX1RJLCBNTVVDUik7CisJY3RybF9iYXJyaWVyKCk7Cit9CisKK2Jvb2wgX19pbl8yOWJpdF9tb2RlKHZvaWQpCit7CisgICAgICAgIHJldHVybiAoX19yYXdfcmVhZGwoUE1CX1BBU0NSKSAmIFBBU0NSX1NFKSA9PSAwOworfQogCiBzdGF0aWMgaW50IHBtYl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIHZvaWQgKml0ZXIpCiB7CkBAIC0zNzgsOCArNjY2LDggQEAKIAkJdW5zaWduZWQgaW50IHNpemU7CiAJCWNoYXIgKnN6X3N0ciA9IE5VTEw7CiAKLQkJYWRkciA9IGN0cmxfaW5sKG1rX3BtYl9hZGRyKGkpKTsKLQkJZGF0YSA9IGN0cmxfaW5sKG1rX3BtYl9kYXRhKGkpKTsKKwkJYWRkciA9IF9fcmF3X3JlYWRsKG1rX3BtYl9hZGRyKGkpKTsKKwkJZGF0YSA9IF9fcmF3X3JlYWRsKG1rX3BtYl9kYXRhKGkpKTsKIAogCQlzaXplID0gZGF0YSAmIFBNQl9TWl9NQVNLOwogCQlzel9zdHIgPSAoc2l6ZSA9PSBQTUJfU1pfMTZNKSAgPyAiIDE2TUIiOgpAQCAtNDM3LDE0ICs3MjUsMjEgQEAKIAlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfT04gJiYKIAkgICAgcHJldl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpIHsKIAkJc3RydWN0IHBtYl9lbnRyeSAqcG1iZTsKKworCQlyZWFkX2xvY2soJnBtYl9yd2xvY2spOworCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9lbnRyeV9saXN0KTsgaSsrKSB7Ci0JCQlpZiAodGVzdF9iaXQoaSwgJnBtYl9tYXApKSB7CisJCQlpZiAodGVzdF9iaXQoaSwgcG1iX21hcCkpIHsKIAkJCQlwbWJlID0gJnBtYl9lbnRyeV9saXN0W2ldOwogCQkJCXNldF9wbWJfZW50cnkocG1iZSk7CiAJCQl9CiAJCX0KKworCQlyZWFkX3VubG9jaygmcG1iX3J3bG9jayk7CiAJfQorCiAJcHJldl9zdGF0ZSA9IHN0YXRlOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ2Miw2ICs3NTcsNSBAQAogewogCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZjcHVfc3lzZGV2X2NsYXNzLCAmcG1iX3N5c2Rldl9kcml2ZXIpOwogfQotCiBzdWJzeXNfaW5pdGNhbGwocG1iX3N5c2Rldl9pbml0KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS90bGItcHRlYWV4LmMgYi9hcmNoL3NoL21tL3RsYi1wdGVhZXguYwppbmRleCA0MDliN2MyLi4zMmRjNjc0IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3RsYi1wdGVhZXguYworKysgYi9hcmNoL3NoL21tL3RsYi1wdGVhZXguYwpAQCAtNjgsOCArNjgsNyBAQAogICogaW4gZXh0ZW5kZWQgbW9kZSwgdGhlIGxlZ2FjeSA4LWJpdCBBU0lEIGZpZWxkIGluIGFkZHJlc3MgYXJyYXkgMSBoYXMKICAqIHVuZGVmaW5lZCBiZWhhdmlvdXIuCiAgKi8KLXZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgbG9jYWxfZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFzaWQsCi0JCQkJCQkgdW5zaWduZWQgbG9uZyBwYWdlKQordm9pZCBsb2NhbF9mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYXNpZCwgdW5zaWduZWQgbG9uZyBwYWdlKQogewogCWp1bXBfdG9fdW5jYWNoZWQoKTsKIAlfX3Jhd193cml0ZWwocGFnZSwgTU1VX1VUTEJfQUREUkVTU19BUlJBWSB8IE1NVV9QQUdFX0FTU09DX0JJVCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYi1zaDMuYyBiL2FyY2gvc2gvbW0vdGxiLXNoMy5jCmluZGV4IGFjZThlNmQuLjRmNWY3Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vdGxiLXNoMy5jCisrKyBiL2FyY2gvc2gvbW0vdGxiLXNoMy5jCkBAIC00MSwxNCArNDEsMTQgQEAKIAogCS8qIFNldCBQVEVIIHJlZ2lzdGVyICovCiAJdnBuID0gKGFkZHJlc3MgJiBNTVVfVlBOX01BU0spIHwgZ2V0X2FzaWQoKTsKLQljdHJsX291dGwodnBuLCBNTVVfUFRFSCk7CisJX19yYXdfd3JpdGVsKHZwbiwgTU1VX1BURUgpOwogCiAJcHRldmFsID0gcHRlX3ZhbChwdGUpOwogCiAJLyogU2V0IFBURUwgcmVnaXN0ZXIgKi8KIAlwdGV2YWwgJj0gX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSzsgLyogZHJvcCBzb2Z0d2FyZSBmbGFncyAqLwogCS8qIGNvbnZlbmllbnRseSwgd2Ugd2FudCBhbGwgdGhlIHNvZnR3YXJlIGZsYWdzIHRvIGJlIDAgYW55d2F5ICovCi0JY3RybF9vdXRsKHB0ZXZhbCwgTU1VX1BURUwpOworCV9fcmF3X3dyaXRlbChwdGV2YWwsIE1NVV9QVEVMKTsKIAogCS8qIExvYWQgdGhlIFRMQiAqLwogCWFzbSB2b2xhdGlsZSgibGR0bGIiOiAvKiBubyBvdXRwdXQgKi8gOiAvKiBubyBpbnB1dCAqLyA6ICJtZW1vcnkiKTsKQEAgLTc1LDUgKzc1LDUgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgd2F5czsgaSsrKQotCQljdHJsX291dGwoZGF0YSwgYWRkciArIChpIDw8IDgpKTsKKwkJX19yYXdfd3JpdGVsKGRhdGEsIGFkZHIgKyAoaSA8PCA4KSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYi1zaDQuYyBiL2FyY2gvc2gvbW0vdGxiLXNoNC5jCmluZGV4IDhjZjU1MGUuLmNjYWM3N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vdGxiLXNoNC5jCisrKyBiL2FyY2gvc2gvbW0vdGxiLXNoNC5jCkBAIC0yOSw3ICsyOSw3IEBACiAKIAkvKiBTZXQgUFRFSCByZWdpc3RlciAqLwogCXZwbiA9IChhZGRyZXNzICYgTU1VX1ZQTl9NQVNLKSB8IGdldF9hc2lkKCk7Ci0JY3RybF9vdXRsKHZwbiwgTU1VX1BURUgpOworCV9fcmF3X3dyaXRlbCh2cG4sIE1NVV9QVEVIKTsKIAogCXB0ZXZhbCA9IHB0ZS5wdGVfbG93OwogCkBAIC00MSwxMyArNDEsMTMgQEAKIAkgKiB0aGUgcHJvdGVjdGlvbiBiaXRzICh3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGNvbXBhdC1tb2RlIFNaCiAJICogYW5kIFBSIGJpdHMsIHdoaWNoIGFyZSBjbGVhcmVkKSBiZWluZyB3cml0dGVuIG91dCBpbiBQVEVMLgogCSAqLwotCWN0cmxfb3V0bChwdGUucHRlX2hpZ2gsIE1NVV9QVEVBKTsKKwlfX3Jhd193cml0ZWwocHRlLnB0ZV9oaWdoLCBNTVVfUFRFQSk7CiAjZWxzZQogCWlmIChjcHVfZGF0YS0+ZmxhZ3MgJiBDUFVfSEFTX1BURUEpIHsKIAkJLyogVGhlIGxhc3QgMyBiaXRzIGFuZCB0aGUgZmlyc3Qgb25lIG9mIHB0ZXZhbCBjb250YWlucwogCQkgKiB0aGUgUFRFQSB0aW1pbmcgY29udHJvbCBhbmQgc3BhY2UgYXR0cmlidXRlIGJpdHMKIAkJICovCi0JCWN0cmxfb3V0bChjb3B5X3B0ZWFfYXR0cmlidXRlcyhwdGV2YWwpLCBNTVVfUFRFQSk7CisJCV9fcmF3X3dyaXRlbChjb3B5X3B0ZWFfYXR0cmlidXRlcyhwdGV2YWwpLCBNTVVfUFRFQSk7CiAJfQogI2VuZGlmCiAKQEAgLTU3LDE1ICs1NywxNCBAQAogCXB0ZXZhbCB8PSBfUEFHRV9XVDsKICNlbmRpZgogCS8qIGNvbnZlbmllbnRseSwgd2Ugd2FudCBhbGwgdGhlIHNvZnR3YXJlIGZsYWdzIHRvIGJlIDAgYW55d2F5ICovCi0JY3RybF9vdXRsKHB0ZXZhbCwgTU1VX1BURUwpOworCV9fcmF3X3dyaXRlbChwdGV2YWwsIE1NVV9QVEVMKTsKIAogCS8qIExvYWQgdGhlIFRMQiAqLwogCWFzbSB2b2xhdGlsZSgibGR0bGIiOiAvKiBubyBvdXRwdXQgKi8gOiAvKiBubyBpbnB1dCAqLyA6ICJtZW1vcnkiKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgbG9jYWxfZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFzaWQsCi0JCQkJCQkgdW5zaWduZWQgbG9uZyBwYWdlKQordm9pZCBsb2NhbF9mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYXNpZCwgdW5zaWduZWQgbG9uZyBwYWdlKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciwgZGF0YTsKIApAQCAtNzgsNiArNzcsNiBAQAogCWFkZHIgPSBNTVVfVVRMQl9BRERSRVNTX0FSUkFZIHwgTU1VX1BBR0VfQVNTT0NfQklUOwogCWRhdGEgPSBwYWdlIHwgYXNpZDsgLyogVkFMSUQgYml0IGlzIG9mZiAqLwogCWp1bXBfdG9fdW5jYWNoZWQoKTsKLQljdHJsX291dGwoZGF0YSwgYWRkcik7CisJX19yYXdfd3JpdGVsKGRhdGEsIGFkZHIpOwogCWJhY2tfdG9fY2FjaGVkKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYi1zaDUuYyBiL2FyY2gvc2gvbW0vdGxiLXNoNS5jCmluZGV4IGZkYjY0ZTQuLmYyN2RiZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vdGxiLXNoNS5jCisrKyBiL2FyY2gvc2gvbW0vdGxiLXNoNS5jCkBAIC0xNDMsMyArMTQzLDQyIEBACiAgKi8KIHZvaWQgc2g2NF90ZWFyZG93bl90bGJfc2xvdCh1bnNpZ25lZCBsb25nIGxvbmcgY29uZmlnX2FkZHIpCiAJX19hdHRyaWJ1dGVfXyAoKGFsaWFzKCJfX2ZsdXNoX3RsYl9zbG90IikpKTsKKworc3RhdGljIGludCBkdGxiX2VudHJ5Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBkdGxiX2VudHJpZXNbNjRdOworCit2b2lkIHRsYl93aXJlX2VudHJ5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgZW50cnk7CisJdW5zaWduZWQgbG9uZyBwYWRkciwgZmxhZ3M7CisKKwlCVUdfT04oZHRsYl9lbnRyeSA9PSBBUlJBWV9TSVpFKGR0bGJfZW50cmllcykpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJZW50cnkgPSBzaDY0X2dldF93aXJlZF9kdGxiX2VudHJ5KCk7CisJZHRsYl9lbnRyaWVzW2R0bGJfZW50cnkrK10gPSBlbnRyeTsKKworCXBhZGRyID0gcHRlX3ZhbChwdGUpICYgX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSzsKKwlwYWRkciAmPSB+UEFHRV9NQVNLOworCisJc2g2NF9zZXR1cF90bGJfc2xvdChlbnRyeSwgYWRkciwgZ2V0X2FzaWQoKSwgcGFkZHIpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCit2b2lkIHRsYl91bndpcmVfZW50cnkodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgZW50cnk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUJVR19PTighZHRsYl9lbnRyeSk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZW50cnkgPSBkdGxiX2VudHJpZXNbZHRsYl9lbnRyeS0tXTsKKworCXNoNjRfdGVhcmRvd25fdGxiX3Nsb3QoZW50cnkpOworCXNoNjRfcHV0X3dpcmVkX2R0bGJfZW50cnkoZW50cnkpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS90bGItdXJiLmMgYi9hcmNoL3NoL21tL3RsYi11cmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjViOTA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9tbS90bGItdXJiLmMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIGFyY2gvc2gvbW0vdGxiLXVyYi5jCisgKgorICogVExCIGVudHJ5IHdpcmluZyBoZWxwZXJzIGZvciBVUkItZXF1aXBwZWQgcGFydHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBNYXR0IEZsZW1pbmcKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vdGxiLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisKKy8qCisgKiBMb2FkIHRoZSBlbnRyeSBmb3IgJ2FkZHInIGludG8gdGhlIFRMQiBhbmQgd2lyZSB0aGUgZW50cnkuCisgKi8KK3ZvaWQgdGxiX3dpcmVfZW50cnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgc3RhdHVzLCBmbGFnczsKKwlpbnQgdXJiOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogTG9hZCB0aGUgZW50cnkgaW50byB0aGUgVExCICovCisJX191cGRhdGVfdGxiKHZtYSwgYWRkciwgcHRlKTsKKworCS8qIC4uLiBhbmQgd2lyZSBpdCB1cC4gKi8KKwlzdGF0dXMgPSBfX3Jhd19yZWFkbChNTVVDUik7CisJdXJiID0gKHN0YXR1cyAmIE1NVUNSX1VSQikgPj4gTU1VQ1JfVVJCX1NISUZUOworCXN0YXR1cyAmPSB+TU1VQ1JfVVJCOworCisJLyoKKwkgKiBNYWtlIHN1cmUgd2UncmUgbm90IHRyeWluZyB0byB3aXJlIHRoZSBsYXN0IFRMQiBlbnRyeSBzbG90LgorCSAqLworCUJVR19PTighLS11cmIpOworCisJdXJiID0gdXJiICUgTU1VQ1JfVVJCX05FTlRSSUVTOworCisJc3RhdHVzIHw9ICh1cmIgPDwgTU1VQ1JfVVJCX1NISUZUKTsKKwlfX3Jhd193cml0ZWwoc3RhdHVzLCBNTVVDUik7CisJY3RybF9iYXJyaWVyKCk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBVbndpcmUgdGhlIGxhc3Qgd2lyZWQgVExCIGVudHJ5LgorICoKKyAqIEl0IHNob3VsZCBhbHNvIGJlIG5vdGVkIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHdpcmUgYW5kIHVud2lyZQorICogVExCIGVudHJpZXMgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyLiBJZiB5b3Ugd2lyZSBUTEIgZW50cnkgTiwgZm9sbG93ZWQKKyAqIGJ5IGVudHJ5IE4rMSwgeW91IG11c3QgdW53aXJlIGVudHJ5IE4rMSBmaXJzdCwgdGhlbiBlbnRyeSBOLiBJbiB0aGlzCisgKiByZXNwZWN0LCBpdCB3b3JrcyBsaWtlIGEgc3RhY2sgb3IgTElGTyBxdWV1ZS4KKyAqLwordm9pZCB0bGJfdW53aXJlX2VudHJ5KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzdGF0dXMsIGZsYWdzOworCWludCB1cmI7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzdGF0dXMgPSBfX3Jhd19yZWFkbChNTVVDUik7CisJdXJiID0gKHN0YXR1cyAmIE1NVUNSX1VSQikgPj4gTU1VQ1JfVVJCX1NISUZUOworCXN0YXR1cyAmPSB+TU1VQ1JfVVJCOworCisJLyoKKwkgKiBNYWtlIHN1cmUgd2UncmUgbm90IHRyeWluZyB0byB1bndpcmUgYSBUTEIgZW50cnkgd2hlbiBub25lCisJICogaGF2ZSBiZWVuIHdpcmVkLgorCSAqLworCUJVR19PTih1cmIrKyA9PSBNTVVDUl9VUkJfTkVOVFJJRVMpOworCisJdXJiID0gdXJiICUgTU1VQ1JfVVJCX05FTlRSSUVTOworCisJc3RhdHVzIHw9ICh1cmIgPDwgTU1VQ1JfVVJCX1NISUZUKTsKKwlfX3Jhd193cml0ZWwoc3RhdHVzLCBNTVVDUik7CisJY3RybF9iYXJyaWVyKCk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYmZsdXNoXzMyLmMgYi9hcmNoL3NoL21tL3RsYmZsdXNoXzMyLmMKaW5kZXggNmY0NWMxZi4uMDA0YmIzZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS90bGJmbHVzaF8zMi5jCisrKyBiL2FyY2gvc2gvbW0vdGxiZmx1c2hfMzIuYwpAQCAtMTMyLDkgKzEzMiw5IEBACiAJICogICAgICBJdCdzIHNhbWUgcG9zaXRpb24sIGJpdCAjMi4KIAkgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0Jc3RhdHVzID0gY3RybF9pbmwoTU1VQ1IpOworCXN0YXR1cyA9IF9fcmF3X3JlYWRsKE1NVUNSKTsKIAlzdGF0dXMgfD0gMHgwNDsKLQljdHJsX291dGwoc3RhdHVzLCBNTVVDUik7CisJX19yYXdfd3JpdGVsKHN0YXR1cywgTU1VQ1IpOwogCWN0cmxfYmFycmllcigpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiZmx1c2hfNjQuYyBiL2FyY2gvc2gvbW0vdGxiZmx1c2hfNjQuYwppbmRleCBkZTBiMGU4OC4uNzA2ZGExZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS90bGJmbHVzaF82NC5jCisrKyBiL2FyY2gvc2gvbW0vdGxiZmx1c2hfNjQuYwpAQCAtMzYsNyArMzYsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfcHJvdHMocGdwcm90X3QgcHJvdCkKIHsKLQlwcmludGsoInByb3QgaXMgMHglMDhseFxuIixwZ3Byb3RfdmFsKHByb3QpKTsKKwlwcmludGsoInByb3QgaXMgMHglMDE2bGx4XG4iLHBncHJvdF92YWwocHJvdCkpOwogCiAJcHJpbnRrKCIlcyAlcyAlcyAlcyAlc1xuIixQUFJPVChfUEFHRV9TSEFSRUQpLFBQUk9UKF9QQUdFX1JFQUQpLAogCSAgICAgICBQUFJPVChfUEFHRV9FWEVDVVRFKSxQUFJPVChfUEFHRV9XUklURSksUFBST1QoX1BBR0VfVVNFUikpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS91bmNhY2hlZC5jIGIvYXJjaC9zaC9tbS91bmNhY2hlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMjBhNWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21tL3VuY2FjaGVkLmMKQEAgLTAsMCArMSwzNCBAQAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKgorICogVGhpcyBpcyB0aGUgb2Zmc2V0IG9mIHRoZSB1bmNhY2hlZCBzZWN0aW9uIGZyb20gaXRzIGNhY2hlZCBhbGlhcy4KKyAqCisgKiBMZWdhY3kgcGxhdGZvcm1zIGhhbmRsZSB0cml2aWFsIHRyYW5zaXRpb25zIGJldHdlZW4gY2FjaGVkIGFuZAorICogdW5jYWNoZWQgc2VnbWVudHMgYnkgbWFraW5nIHVzZSBvZiB0aGUgMToxIG1hcHBpbmcgcmVsYXRpb25zaGlwIGluCisgKiA1MTJNQiBsb3dtZW0sIG90aGVycyB2aWEgYSBzcGVjaWFsIHVuY2FjaGVkIG1hcHBpbmcuCisgKgorICogRGVmYXVsdCB2YWx1ZSBvbmx5IHZhbGlkIGluIDI5IGJpdCBtb2RlLCBpbiAzMmJpdCBtb2RlIHRoaXMgd2lsbCBiZQorICogdXBkYXRlZCBieSB0aGUgZWFybHkgUE1CIGluaXRpYWxpemF0aW9uIGNvZGUuCisgKi8KK3Vuc2lnbmVkIGxvbmcgY2FjaGVkX3RvX3VuY2FjaGVkID0gU1pfNTEyTTsKK3Vuc2lnbmVkIGxvbmcgdW5jYWNoZWRfc2l6ZSA9IFNaXzUxMk07Cit1bnNpZ25lZCBsb25nIHVuY2FjaGVkX3N0YXJ0LCB1bmNhY2hlZF9lbmQ7CisKK2ludCB2aXJ0X2FkZHJfdW5jYWNoZWQodW5zaWduZWQgbG9uZyBrYWRkcikKK3sKKwlyZXR1cm4gKGthZGRyID49IHVuY2FjaGVkX3N0YXJ0KSAmJiAoa2FkZHIgPCB1bmNhY2hlZF9lbmQpOworfQorCit2b2lkIF9faW5pdCB1bmNhY2hlZF9pbml0KHZvaWQpCit7CisJdW5jYWNoZWRfc3RhcnQgPSBtZW1vcnlfZW5kOworCXVuY2FjaGVkX2VuZCA9IHVuY2FjaGVkX3N0YXJ0ICsgdW5jYWNoZWRfc2l6ZTsKK30KKwordm9pZCBfX2luaXQgdW5jYWNoZWRfcmVzaXplKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bmNhY2hlZF9zaXplID0gc2l6ZTsKKwl1bmNhY2hlZF9lbmQgPSB1bmNhY2hlZF9zdGFydCArIHVuY2FjaGVkX3NpemU7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKaW5kZXggNjYzOWIyNS4uYjI1YWE1NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcwpAQCAtMzIsNiArMzIsNyBAQAogU05BUEdFQVIJCVNIX1NFQ1VSRUVER0U1NDEwCiBFRE9TSzc3MDUJCVNIX0VET1NLNzcwNQogRURPU0s3NzYwCQlTSF9FRE9TSzc3NjAKK1NESzc3ODYJCQlTSF9TREs3Nzg2CiBTSDQyMDJfTUlDUk9ERVYJCVNIX1NINDIwMl9NSUNST0RFVgogU0gwMwkJCVNIX1NIMDMKIExBTkRJU0sJCQlTSF9MQU5ESVNLCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IGUwY2FiZTcuLjc3ZjkwNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCkBAIC0zMzAsOSArMzMwLDkgQEAKICNkZWZpbmUgRkFVTFRfQ09ERV9XUklURSAgICAweDIKICNkZWZpbmUgRkFVTFRfQ09ERV9VU0VSICAgICAweDQKIAotQlRGSVhVUERFRl9DQUxMKHZvaWQsIHVwZGF0ZV9tbXVfY2FjaGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCkKK0JURklYVVBERUZfQ0FMTCh2b2lkLCB1cGRhdGVfbW11X2NhY2hlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKikKIAotI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSxhZGRyLHB0ZSkgQlRGSVhVUF9DQUxMKHVwZGF0ZV9tbXVfY2FjaGUpKHZtYSxhZGRyLHB0ZSkKKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsYWRkcixwdGVwKSBCVEZJWFVQX0NBTEwodXBkYXRlX21tdV9jYWNoZSkodm1hLGFkZHIscHRlcCkKIAogQlRGSVhVUERFRl9DQUxMKHZvaWQsIHNwYXJjX21hcGlvcmFuZ2UsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZywKICAgICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCmluZGV4IGYzY2I3OTAuLmY1YjVmYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCkBAIC03MDYsNyArNzA2LDcgQEAKICNkZWZpbmUgbW11X3VubG9ja2FyZWEodmFkZHIsIGxlbikJCWRvIHsgfSB3aGlsZSgwKQogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7Ci1leHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCk7CitleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqKTsKIAogLyogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAqLwogI2RlZmluZSBfX3N3cF90eXBlKGVudHJ5KQkoKChlbnRyeSkudmFsID4+IFBBR0VfU0hJRlQpICYgMHhmZlVMKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zdGF0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXQuaAppbmRleCA1NWRiNWVjLi4zOTMyN2Q2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXQuaApAQCAtNTMsOCArNTMsOCBAQAogCWlub190CQlzdF9pbm87CiAJbW9kZV90CQlzdF9tb2RlOwogCXNob3J0CQlzdF9ubGluazsKLQl1aWRfdAkJc3RfdWlkOwotCWdpZF90CQlzdF9naWQ7CisJdWlkMTZfdAkJc3RfdWlkOworCWdpZDE2X3QJCXN0X2dpZDsKIAl1bnNpZ25lZCBzaG9ydAlzdF9yZGV2OwogCW9mZl90CQlzdF9zaXplOwogCXRpbWVfdAkJc3RfYXRpbWU7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IDc0ODZjNjAuLjAyNWEwMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzY2FsbC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzY2FsbC5oCkBAIC01LDYgKzUsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAorLyoKKyAqIFRoZSBzeXNjYWxsIHRhYmxlIGFsd2F5cyBjb250YWlucyAzMiBiaXQgcG9pbnRlcnMgc2luY2Ugd2Uga25vdyB0aGF0IHRoZQorICogYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlzICh3YXkpIGJlbG93IDRHQi4gIFNvIHRoZSAiaW50IgorICogdHlwZSBoZXJlIGlzIHdoYXQgd2Ugd2FudCBbbmVlZF0gZm9yIGJvdGggMzIgYml0IGFuZCA2NCBiaXQgc3lzdGVtcy4KKyAqLworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBzeXNfY2FsbF90YWJsZVtdOworCiAvKiBUaGUgc3lzdGVtIGNhbGwgbnVtYmVyIGlzIGdpdmVuIGJ5IHRoZSB1c2VyIGluICVnMSAqLwogc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvZGV2aWNlcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvZGV2aWNlcy5jCmluZGV4IGIxNzFhZTguLmIwNjJkZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2RldmljZXMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9kZXZpY2VzLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAogCWN1cl9pbnN0ID0gMDsKIAlmb3JfZWFjaF9ub2RlX2J5X3R5cGUoZHAsICJjcHUiKSB7Ci0JCWludCBlcnIgPSBjaGVja19jcHVfbm9kZShkcC0+bm9kZSwgJmN1cl9pbnN0LAorCQlpbnQgZXJyID0gY2hlY2tfY3B1X25vZGUoZHAtPnBoYW5kbGUsICZjdXJfaW5zdCwKIAkJCQkJIGNvbXBhcmUsIGNvbXBhcmVfYXJnLAogCQkJCQkgcHJvbV9ub2RlLCBtaWQpOwogCQlpZiAoIWVycikgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYwppbmRleCAyOTk3M2RhLi45MTAzYTU2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYwpAQCAtOTEsMTQgKzkxLDMgQEAKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwotCi1leHRlcm4gdW5zaWduZWQgaW50IHN5c19jYWxsX3RhYmxlW107Ci0KLXVuc2lnbmVkIGxvbmcgX19pbml0IGFyY2hfc3lzY2FsbF9hZGRyKGludCBucikKLXsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc3lzX2NhbGxfdGFibGVbbnJdOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2tzdGFjay5oIGIvYXJjaC9zcGFyYy9rZXJuZWwva3N0YWNrLmgKaW5kZXggNDI0OGQ5Ni4uNTI0NzI4MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwva3N0YWNrLmgKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwva3N0YWNrLmgKQEAgLTExLDYgKzExLDEwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBiYXNlID0gKHVuc2lnbmVkIGxvbmcpIHRwOwogCisJLyogU3RhY2sgcG9pbnRlciBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25lZC4gICovCisJaWYgKHNwICYgKDE2VUwgLSAxKSkKKwkJcmV0dXJuIGZhbHNlOworCiAJaWYgKHNwID49IChiYXNlICsgc2l6ZW9mKHN0cnVjdCB0aHJlYWRfaW5mbykpICYmCiAJICAgIHNwIDw9IChiYXNlICsgVEhSRUFEX1NJWkUgLSBzaXplb2Yoc3RydWN0IHNwYXJjX3N0YWNrZikpKQogCQlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKaW5kZXggNGMyNmViNS4uZGE1MjdiMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV8zMi5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAogc3RhdGljIGludCBvZl9idXNfYW1iYXBwX21hdGNoKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7Ci0JcmV0dXJuICFzdHJjbXAobnAtPm5hbWUsICJhbWJhcHAiKTsKKwlyZXR1cm4gIXN0cmNtcChucC0+dHlwZSwgImFtYmFwcCIpOwogfQogCiBzdGF0aWMgdm9pZCBvZl9idXNfYW1iYXBwX2NvdW50X2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQsCkBAIC00MzMsNyArNDMzLDcgQEAKIAlpZiAoIXBhcmVudCkKIAkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAicm9vdCIpOwogCWVsc2UKLQkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAiJTA4eCIsIGRwLT5ub2RlKTsKKwkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAiJTA4eCIsIGRwLT5waGFuZGxlKTsKIAogCWlmIChvZl9kZXZpY2VfcmVnaXN0ZXIob3ApKSB7CiAJCXByaW50aygiJXM6IENvdWxkIG5vdCByZWdpc3RlciBvZiBkZXZpY2UuXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfNjQuYwppbmRleCAwYTZmMmQxLi5iM2Q0Y2I1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfNjQuYwpAQCAtNjc2LDcgKzY3Niw3IEBACiAJaWYgKCFwYXJlbnQpCiAJCWRldl9zZXRfbmFtZSgmb3AtPmRldiwgInJvb3QiKTsKIAllbHNlCi0JCWRldl9zZXRfbmFtZSgmb3AtPmRldiwgIiUwOHgiLCBkcC0+bm9kZSk7CisJCWRldl9zZXRfbmFtZSgmb3AtPmRldiwgIiUwOHgiLCBkcC0+cGhhbmRsZSk7CiAKIAlpZiAob2ZfZGV2aWNlX3JlZ2lzdGVyKG9wKSkgewogCQlwcmludGsoIiVzOiBDb3VsZCBub3QgcmVnaXN0ZXIgb2YgZGV2aWNlLlxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BjaS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMKaW5kZXggNTM5ZTgzZi4uMzdiNjZjNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMKQEAgLTI0Nyw2ICsyNDcsNyBAQAogCQkJCQkgc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IGRldmZuKQogewogCXN0cnVjdCBkZXZfYXJjaGRhdGEgKnNkOworCXN0cnVjdCBwY2lfc2xvdCAqc2xvdDsKIAlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcDsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCWNvbnN0IGNoYXIgKnR5cGU7CkBAIC0yODYsNiArMjg3LDExIEBACiAJZGV2LT5kZXYuYnVzID0gJnBjaV9idXNfdHlwZTsKIAlkZXYtPmRldmZuID0gZGV2Zm47CiAJZGV2LT5tdWx0aWZ1bmN0aW9uID0gMDsJCS8qIG1heWJlIGEgbGllPyAqLworCXNldF9wY2llX3BvcnRfdHlwZShkZXYpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzbG90LCAmZGV2LT5idXMtPnNsb3RzLCBsaXN0KQorCQlpZiAoUENJX1NMT1QoZGV2LT5kZXZmbikgPT0gc2xvdC0+bnVtYmVyKQorCQkJZGV2LT5zbG90ID0gc2xvdDsKIAogCWRldi0+dmVuZG9yID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KG5vZGUsICJ2ZW5kb3ItaWQiLCAweGZmZmYpOwogCWRldi0+ZGV2aWNlID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KG5vZGUsICJkZXZpY2UtaWQiLCAweGZmZmYpOwpAQCAtMzIyLDYgKzMyOCw3IEBACiAKIAlkZXYtPmN1cnJlbnRfc3RhdGUgPSA0OwkJLyogdW5rbm93biBwb3dlciBzdGF0ZSAqLwogCWRldi0+ZXJyb3Jfc3RhdGUgPSBwY2lfY2hhbm5lbF9pb19ub3JtYWw7CisJZGV2LT5kbWFfbWFzayA9IDB4ZmZmZmZmZmY7CiAKIAlpZiAoIXN0cmNtcChub2RlLT5uYW1lLCAicGNpIikpIHsKIAkJLyogYSBQQ0ktUENJIGJyaWRnZSAqLwpAQCAtNzE1LDkgKzcyMiwxMCBAQAogewogfQogCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CisJcmV0dXJuIHJlcy0+c3RhcnQ7CiB9CiAKIGludCBwY2liaW9zX2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG1hc2spCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMKaW5kZXggNGUyNzI0ZS4uNzVlODhjMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMKQEAgLTc2OCw5ICs3NjgsMTAgQEAKIAlyZXR1cm4gc3RyOwogfQogCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CisJcmV0dXJuIHJlcy0+c3RhcnQ7CiB9CiAKIGludCBwY2liaW9zX2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtYXNrKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IGU4NTY0NTYuLjlmMmIyYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTk4MCwxMCArOTgwLDEwIEBACiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyB2b2lkIGV2ZW50X3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGNwdSkKK3N0YXRpYyB2b2lkIGV2ZW50X3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRTsKLQlldmVudC0+b25jcHUgPSBjcHU7CisJZXZlbnQtPm9uY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWV2ZW50LT50c3RhbXBfcnVubmluZyArPSBldmVudC0+Y3R4LT50aW1lIC0gZXZlbnQtPnRzdGFtcF9zdG9wcGVkOwogCWlmIChpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCiAJCWV2ZW50LT5wbXUtPmVuYWJsZShldmVudCk7CkBAIC05OTEsNyArOTkxLDcgQEAKIAogaW50IGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmdyb3VwX2xlYWRlciwKIAkJCSAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCi0JCQkgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsIGludCBjcHUpCisJCQkgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCiB7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqc3ViOwpAQCAtMTAxNSwxMCArMTAxNSwxMCBAQAogCiAJY3B1Y3R4LT5hY3RpdmVfb25jcHUgKz0gbjsKIAluID0gMTsKLQlldmVudF9zY2hlZF9pbihncm91cF9sZWFkZXIsIGNwdSk7CisJZXZlbnRfc2NoZWRfaW4oZ3JvdXBfbGVhZGVyKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YiwgJmdyb3VwX2xlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgewogCQlpZiAoc3ViLT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX09GRikgewotCQkJZXZlbnRfc2NoZWRfaW4oc3ViLCBjcHUpOworCQkJZXZlbnRfc2NoZWRfaW4oc3ViKTsKIAkJCW4rKzsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYwppbmRleCAyODMwYjQxLi5jNDk4NjViIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC01MjYsNyArNTI2LDcgQEAKIAkJCSAqIFNldCBzb21lIHZhbGlkIHN0YWNrIGZyYW1lcyB0byBnaXZlIHRvIHRoZSBjaGlsZC4KIAkJCSAqLwogCQkJY2hpbGRzdGFjayA9IChzdHJ1Y3Qgc3BhcmNfc3RhY2tmIF9fdXNlciAqKQotCQkJCShzcCAmIH4weDdVTCk7CisJCQkJKHNwICYgfjB4ZlVMKTsKIAkJCXBhcmVudHN0YWNrID0gKHN0cnVjdCBzcGFyY19zdGFja2YgX191c2VyICopCiAJCQkJcmVncy0+dV9yZWdzW1VSRUdfRlBdOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMKaW5kZXggYzNmMWNjZS4uY2I3MDQ3NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtMzk4LDExICszOTgsMTEgQEAKIAl9IGVsc2UKIAkJX19nZXRfdXNlcihmcCwgJigoKHN0cnVjdCByZWdfd2luZG93MzIgX191c2VyICopcHNwKS0+aW5zWzZdKSk7CiAKLQkvKiBOb3cgOC1ieXRlIGFsaWduIHRoZSBzdGFjayBhcyB0aGlzIGlzIG1hbmRhdG9yeSBpbiB0aGUKLQkgKiBTcGFyYyBBQkkgZHVlIHRvIGhvdyByZWdpc3RlciB3aW5kb3dzIHdvcmsuICBUaGlzIGhpZGVzCi0JICogdGhlIHJlc3RyaWN0aW9uIGZyb20gdGhyZWFkIGxpYnJhcmllcyBldGMuICAtRGF2ZU0KKwkvKiBOb3cgYWxpZ24gdGhlIHN0YWNrIGFzIHRoaXMgaXMgbWFuZGF0b3J5IGluIHRoZSBTcGFyYyBBQkkKKwkgKiBkdWUgdG8gaG93IHJlZ2lzdGVyIHdpbmRvd3Mgd29yay4gIFRoaXMgaGlkZXMgdGhlCisJICogcmVzdHJpY3Rpb24gZnJvbSB0aHJlYWQgbGlicmFyaWVzIGV0Yy4KIAkgKi8KLQljc3AgJj0gfjdVTDsKKwljc3AgJj0gfjE1VUw7CiAKIAlkaXN0YW5jZSA9IGZwIC0gcHNwOwogCXJ2YWwgPSAoY3NwIC0gZGlzdGFuY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbS5oIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbS5oCmluZGV4IDQ1MzM5N2YuLmE4NTkxZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb20uaAorKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tLmgKQEAgLTQsOSArNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogCi1leHRlcm4gc3RydWN0IGRldmljZV9ub2RlICphbGxub2RlczsJLyogdGVtcG9yYXJ5IHdoaWxlIG1lcmdpbmcgKi8KLWV4dGVybiByd2xvY2tfdCBkZXZ0cmVlX2xvY2s7CS8qIHRlbXBvcmFyeSB3aGlsZSBtZXJnaW5nICovCi0KIGV4dGVybiB2b2lkICogcHJvbV9lYXJseV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpOwogZXh0ZXJuIHZvaWQgaXJxX3RyYW5zX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCmluZGV4IGQ4MGE2NWQuLjU3YWM5ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYwpAQCAtMzcsMTggKzM3LDYgQEAKIGNoYXIgKm9mX2NvbnNvbGVfb3B0aW9uczsKIEVYUE9SVF9TWU1CT0wob2ZfY29uc29sZV9vcHRpb25zKTsKIAotc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX25vZGVfYnlfcGhhbmRsZShwaGFuZGxlIGhhbmRsZSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JZm9yIChucCA9IGFsbG5vZGVzOyBucDsgbnAgPSBucC0+YWxsbmV4dCkKLQkJaWYgKG5wLT5ub2RlID09IGhhbmRsZSkKLQkJCWJyZWFrOwotCi0JcmV0dXJuIG5wOwotfQotRVhQT1JUX1NZTUJPTChvZl9maW5kX25vZGVfYnlfcGhhbmRsZSk7Ci0KIGludCBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGRlZikKIHsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CkBAIC04OSw3ICs3Nyw3IEBACiAJCQl2b2lkICpvbGRfdmFsID0gcHJvcC0+dmFsdWU7CiAJCQlpbnQgcmV0OwogCi0JCQlyZXQgPSBwcm9tX3NldHByb3AoZHAtPm5vZGUsIG5hbWUsIHZhbCwgbGVuKTsKKwkJCXJldCA9IHByb21fc2V0cHJvcChkcC0+cGhhbmRsZSwgbmFtZSwgdmFsLCBsZW4pOwogCiAJCQllcnIgPSAtRUlOVkFMOwogCQkJaWYgKHJldCA+PSAwKSB7CkBAIC0yMzYsNyArMjI0LDcgQEAKIAogCWRwLT5uYW1lID0gZ2V0X29uZV9wcm9wZXJ0eShub2RlLCAibmFtZSIpOwogCWRwLT50eXBlID0gZ2V0X29uZV9wcm9wZXJ0eShub2RlLCAiZGV2aWNlX3R5cGUiKTsKLQlkcC0+bm9kZSA9IG5vZGU7CisJZHAtPnBoYW5kbGUgPSBub2RlOwogCiAJZHAtPnByb3BlcnRpZXMgPSBidWlsZF9wcm9wX2xpc3Qobm9kZSk7CiAKQEAgLTMxMyw3ICszMDEsNyBAQAogCiAJbmV4dHAgPSAmYWxsbm9kZXMtPmFsbG5leHQ7CiAJYWxsbm9kZXMtPmNoaWxkID0gcHJvbV9idWlsZF90cmVlKGFsbG5vZGVzLAotCQkJCQkgIHByb21fZ2V0Y2hpbGQoYWxsbm9kZXMtPm5vZGUpLAorCQkJCQkgIHByb21fZ2V0Y2hpbGQoYWxsbm9kZXMtPnBoYW5kbGUpLAogCQkJCQkgICZuZXh0cCk7CiAJb2ZfY29uc29sZV9pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbDMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWwzMi5jCmluZGV4IGJhNWIwOWEuLmVhMjJjZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbDMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsMzIuYwpAQCAtMTIwLDggKzEyMCw4IEBACiB9OwogCiAvKiBBbGlnbiBtYWNyb3MgKi8KLSNkZWZpbmUgU0ZfQUxJR05FRFNaICAoKChzaXplb2Yoc3RydWN0IHNpZ25hbF9mcmFtZTMyKSArIDcpICYgKH43KSkpCi0jZGVmaW5lIFJUX0FMSUdORURTWiAgKCgoc2l6ZW9mKHN0cnVjdCBydF9zaWduYWxfZnJhbWUzMikgKyA3KSAmICh+NykpKQorI2RlZmluZSBTRl9BTElHTkVEU1ogICgoKHNpemVvZihzdHJ1Y3Qgc2lnbmFsX2ZyYW1lMzIpICsgMTUpICYgKH4xNSkpKQorI2RlZmluZSBSVF9BTElHTkVEU1ogICgoKHNpemVvZihzdHJ1Y3QgcnRfc2lnbmFsX2ZyYW1lMzIpICsgMTUpICYgKH4xNSkpKQogCiBpbnQgY29weV9zaWdpbmZvX3RvX3VzZXIzMihjb21wYXRfc2lnaW5mb190IF9fdXNlciAqdG8sIHNpZ2luZm9fdCAqZnJvbSkKIHsKQEAgLTQyMCwxNSArNDIwLDE3IEBACiAJCQlzcCA9IGN1cnJlbnQtPnNhc19zc19zcCArIGN1cnJlbnQtPnNhc19zc19zaXplOwogCX0KIAorCXNwIC09IGZyYW1lc2l6ZTsKKwogCS8qIEFsd2F5cyBhbGlnbiB0aGUgc3RhY2sgZnJhbWUuICBUaGlzIGhhbmRsZXMgdHdvIGNhc2VzLiAgRmlyc3QsCiAJICogc2lnYWx0c3RhY2sgbmVlZCBub3QgYmUgbWluZGZ1bCBvZiBwbGF0Zm9ybSBzcGVjaWZpYyBzdGFjawogCSAqIGFsaWdubWVudC4gIFNlY29uZCwgaWYgd2UgdG9vayB0aGlzIHNpZ25hbCBiZWNhdXNlIHRoZSBzdGFjawogCSAqIGlzIG5vdCBhbGlnbmVkIHByb3Blcmx5LCB3ZSdkIGxpa2UgdG8gdGFrZSB0aGUgc2lnbmFsIGNsZWFubHkKIAkgKiBhbmQgcmVwb3J0IHRoYXQuCiAJICovCi0Jc3AgJj0gfjdVTDsKKwlzcCAmPSB+MTVVTDsKIAotCXJldHVybiAodm9pZCBfX3VzZXIgKikoc3AgLSBmcmFtZXNpemUpOworCXJldHVybiAodm9pZCBfX3VzZXIgKikgc3A7CiB9CiAKIHN0YXRpYyBpbnQgc2F2ZV9mcHVfc3RhdGUzMihzdHJ1Y3QgcHRfcmVncyAqcmVncywgX19zaWdpbmZvX2ZwdV90IF9fdXNlciAqZnB1KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWxfMzIuYwppbmRleCA3Y2UxYTEwLi45ODgyZGY5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWxfMzIuYwpAQCAtMjY3LDE1ICsyNjcsMTcgQEAKIAkJCXNwID0gY3VycmVudC0+c2FzX3NzX3NwICsgY3VycmVudC0+c2FzX3NzX3NpemU7CiAJfQogCisJc3AgLT0gZnJhbWVzaXplOworCiAJLyogQWx3YXlzIGFsaWduIHRoZSBzdGFjayBmcmFtZS4gIFRoaXMgaGFuZGxlcyB0d28gY2FzZXMuICBGaXJzdCwKIAkgKiBzaWdhbHRzdGFjayBuZWVkIG5vdCBiZSBtaW5kZnVsIG9mIHBsYXRmb3JtIHNwZWNpZmljIHN0YWNrCiAJICogYWxpZ25tZW50LiAgU2Vjb25kLCBpZiB3ZSB0b29rIHRoaXMgc2lnbmFsIGJlY2F1c2UgdGhlIHN0YWNrCiAJICogaXMgbm90IGFsaWduZWQgcHJvcGVybHksIHdlJ2QgbGlrZSB0byB0YWtlIHRoZSBzaWduYWwgY2xlYW5seQogCSAqIGFuZCByZXBvcnQgdGhhdC4KIAkgKi8KLQlzcCAmPSB+N1VMOworCXNwICY9IH4xNVVMOwogCi0JcmV0dXJuICh2b2lkIF9fdXNlciAqKShzcCAtIGZyYW1lc2l6ZSk7CisJcmV0dXJuICh2b2lkIF9fdXNlciAqKSBzcDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbF82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsXzY0LmMKaW5kZXggNjQ3YWZiZC4uOWZhNDhjMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsXzY0LmMKQEAgLTM1Myw3ICszNTMsNyBAQAogLyogQ2hlY2tzIGlmIHRoZSBmcCBpcyB2YWxpZCAqLwogc3RhdGljIGludCBpbnZhbGlkX2ZyYW1lX3BvaW50ZXIodm9pZCBfX3VzZXIgKmZwLCBpbnQgZnBsZW4pCiB7Ci0JaWYgKCgodW5zaWduZWQgbG9uZykgZnApICYgNykKKwlpZiAoKCh1bnNpZ25lZCBsb25nKSBmcCkgJiAxNSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0zOTYsMTUgKzM5NiwxNyBAQAogCQkJc3AgPSBjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZTsKIAl9CiAKKwlzcCAtPSBmcmFtZXNpemU7CisKIAkvKiBBbHdheXMgYWxpZ24gdGhlIHN0YWNrIGZyYW1lLiAgVGhpcyBoYW5kbGVzIHR3byBjYXNlcy4gIEZpcnN0LAogCSAqIHNpZ2FsdHN0YWNrIG5lZWQgbm90IGJlIG1pbmRmdWwgb2YgcGxhdGZvcm0gc3BlY2lmaWMgc3RhY2sKIAkgKiBhbGlnbm1lbnQuICBTZWNvbmQsIGlmIHdlIHRvb2sgdGhpcyBzaWduYWwgYmVjYXVzZSB0aGUgc3RhY2sKIAkgKiBpcyBub3QgYWxpZ25lZCBwcm9wZXJseSwgd2UnZCBsaWtlIHRvIHRha2UgdGhlIHNpZ25hbCBjbGVhbmx5CiAJICogYW5kIHJlcG9ydCB0aGF0LgogCSAqLwotCXNwICY9IH43VUw7CisJc3AgJj0gfjE1VUw7CiAKLQlyZXR1cm4gKHZvaWQgX191c2VyICopKHNwIC0gZnJhbWVzaXplKTsKKwlyZXR1cm4gKHZvaWQgX191c2VyICopIHNwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKaW5kZXggYWEzNjIyMy4uZWIxNDg0NCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKQEAgLTM3MCw3ICszNzAsNyBAQAogCX0gZWxzZSB7CiAJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvZl9maW5kX25vZGVfYnlfY3B1aWQoY3B1KTsKIAotCQlwcm9tX3N0YXJ0Y3B1KGRwLT5ub2RlLCBlbnRyeSwgY29va2llKTsKKwkJcHJvbV9zdGFydGNwdShkcC0+cGhhbmRsZSwgZW50cnksIGNvb2tpZSk7CiAJfQogCiAJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDUwMDAwOyB0aW1lb3V0KyspIHsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3RzYi5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHNiLlMKaW5kZXggOGM5MWQ5Yi4uZGIxNWQxMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdHNiLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHNiLlMKQEAgLTE5MSwxMCArMTkxLDEyIEBACiAKIHRzYl9pdGxiX2xvYWQ6CiAJLyogRXhlY3V0YWJsZSBiaXQgbXVzdCBiZSBzZXQuICAqLwotNjYxOglhbmRjYwkJJWc1LCBfUEFHRV9FWEVDXzRVLCAlZzAKLQkuc2VjdGlvbgkuc3VuNHZfMWluc25fcGF0Y2gsICJheCIKKzY2MToJc2V0aGkJCSVoaShfUEFHRV9FWEVDXzRVKSwgJWc0CisJYW5kY2MJCSVnNSwgJWc0LCAlZzAKKwkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsICJheCIKIAkud29yZAkJNjYxYgogCWFuZGNjCQklZzUsIF9QQUdFX0VYRUNfNFYsICVnMAorCW5vcAogCS5wcmV2aW91cwogCiAJYmUscG4JCSV4Y2MsIHRzYl9kb19mYXVsdApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9mYXVsdF8zMi5jIGIvYXJjaC9zcGFyYy9tbS9mYXVsdF8zMi5jCmluZGV4IGEzNDEzYWMuLjNmYTA5YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYworKysgYi9hcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMKQEAgLTM3OCw3ICszNzgsNyBAQAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlleHRlcm4gdm9pZCBzdW40Y191cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLAotCQkJCQkgICB1bnNpZ25lZCBsb25nLHB0ZV90KTsKKwkJCQkJICAgdW5zaWduZWQgbG9uZyxwdGVfdCAqKTsKIAlleHRlcm4gcHRlX3QgKnN1bjRjX3B0ZV9vZmZzZXRfa2VybmVsKHBtZF90ICosdW5zaWduZWQgbG9uZyk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLT5tbTsKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCQkgKiAgICAgICBvbiB0aGUgQ1BVIGFuZCBkb2luZyBhIHNocmlua19tbWFwKCkgb24gdGhpcyB2bWEuCiAJCSAqLwogCQlzdW40Y191cGRhdGVfbW11X2NhY2hlIChmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcmVzcyksIGFkZHJlc3MsCi0JCQkJCSpwdGVwKTsKKwkJCQkJcHRlcCk7CiAJZWxzZQogCQlkb19zcGFyY19mYXVsdChyZWdzLCB0ZXh0X2ZhdWx0LCB3cml0ZSwgYWRkcmVzcyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2luaXRfNjQuYyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCmluZGV4IDE4ODZkMzcuLjkyNDVhODIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCkBAIC0yODksMTIgKzI4OSwxMyBAQAogCX0KIH0KIAotdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKK3ZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCkKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3QgdHNiICp0c2I7CiAJdW5zaWduZWQgbG9uZyB0YWcsIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgdHNiX2luZGV4LCB0c2JfaGFzaF9zaGlmdDsKKwlwdGVfdCBwdGUgPSAqcHRlcDsKIAogCWlmICh0bGJfdHlwZSAhPSBoeXBlcnZpc29yKSB7CiAJCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihwdGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9ub3N1bjRjLmMgYi9hcmNoL3NwYXJjL21tL25vc3VuNGMuYwppbmRleCAxOTYyNjNmLi40ZTYyYzI3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL25vc3VuNGMuYworKysgYi9hcmNoL3NwYXJjL21tL25vc3VuNGMuYwpAQCAtNjIsNyArNjIsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi12b2lkIHN1bjRjX3VwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQordm9pZCBzdW40Y191cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogewogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3NybW11LmMgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKaW5kZXggMzY3MzIxYS4uZGY0OWIyMCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCisrKyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwpAQCAtNjk0LDcgKzY5NCw3IEBACiAgKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYSBkZWFkd29vZCB0aGF0IG1heSBiZSBuZWNlc3Nhcnkgd2hlbgogICogd2Ugc3RhcnQgdG8gbWFrZSBwcmVjaXNlIHBhZ2UgZmx1c2hlcyBhZ2Fpbi4gLS16YWl0Y2V2CiAgKi8KLXN0YXRpYyB2b2lkIHN3aWZ0X3VwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKK3N0YXRpYyB2b2lkIHN3aWZ0X3VwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogewogI2lmIDAKIAlzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0OwpAQCAtNzAzLDEwICs3MDMsMTAgQEAKIAogCWlmIChhZGRyZXNzID09IGxhc3QpIHsKIAkJdmFsID0gc3JtbXVfaHdwcm9iZShhZGRyZXNzKTsKLQkJaWYgKHZhbCAhPSAwICYmIHB0ZV92YWwocHRlKSAhPSB2YWwpIHsKKwkJaWYgKHZhbCAhPSAwICYmIHB0ZV92YWwoKnB0ZXApICE9IHZhbCkgewogCQkJcHJpbnRrKCJzd2lmdF91cGRhdGVfbW11X2NhY2hlOiAiCiAJCQkgICAgImFkZHIgJWx4IHB1dCAlMDh4IHByb2JlZCAlMDh4IGZyb20gJXBcbiIsCi0JCQkgICAgYWRkcmVzcywgcHRlX3ZhbChwdGUpLCB2YWwsCisJCQkgICAgYWRkcmVzcywgcHRlX3ZhbCgqcHRlcCksIHZhbCwKIAkJCSAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCQkJc3JtbXVfZmx1c2hfd2hvbGVfdGxiKCk7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vc3VuNGMuYyBiL2FyY2gvc3BhcmMvbW0vc3VuNGMuYwppbmRleCBhODliYWYwLi4xODY1MjUzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL3N1bjRjLmMKKysrIGIvYXJjaC9zcGFyYy9tbS9zdW40Yy5jCkBAIC0xODg3LDcgKzE4ODcsNyBAQAogLyogQW4gZXhwZXJpbWVudCwgdHVybiBvZmYgYnkgZGVmYXVsdCBmb3Igbm93Li4uIC1EYXZlTSAqLwogI2RlZmluZSBTVU40Q19QUkVMT0FEX1BTRUcKIAotdm9pZCBzdW40Y191cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKK3ZvaWQgc3VuNGNfdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBwc2VnOwpAQCAtMTkyOSw3ICsxOTI5LDcgQEAKIAkJCXN0YXJ0ICs9IFBBR0VfU0laRTsKIAkJfQogI2lmbmRlZiBTVU40Q19QUkVMT0FEX1BTRUcKLQkJc3VuNGNfcHV0X3B0ZShhZGRyZXNzLCBwdGVfdmFsKHB0ZSkpOworCQlzdW40Y19wdXRfcHRlKGFkZHJlc3MsIHB0ZV92YWwoKnB0ZXApKTsKICNlbmRpZgogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXJldHVybjsKQEAgLTE5NDAsNyArMTk0MCw3IEBACiAJCWFkZF9scnUoZW50cnkpOwogCX0KIAotCXN1bjRjX3B1dF9wdGUoYWRkcmVzcywgcHRlX3ZhbChwdGUpKTsKKwlzdW40Y19wdXRfcHRlKGFkZHJlc3MsIHB0ZV92YWwoKnB0ZXApKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKaW5kZXggNWZmNTU0Ni4uYzFmZjY5MCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKQEAgLTc0Nyw3ICs3NDcsNyBAQAogCXViZF9kZXYtPmZkID0gZmQ7CiAKIAlpZih1YmRfZGV2LT5jb3cuZmlsZSAhPSBOVUxMKXsKLQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHViZF9kZXYtPnF1ZXVlLCA4ICogc2l6ZW9mKGxvbmcpKTsKKwkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHViZF9kZXYtPnF1ZXVlLCA4ICogc2l6ZW9mKGxvbmcpKTsKIAogCQllcnIgPSAtRU5PTUVNOwogCQl1YmRfZGV2LT5jb3cuYml0bWFwID0gdm1hbGxvYyh1YmRfZGV2LT5jb3cuYml0bWFwX2xlbik7CkBAIC04NDksNyArODQ5LDcgQEAKIAl9CiAJdWJkX2Rldi0+cXVldWUtPnF1ZXVlZGF0YSA9IHViZF9kZXY7CiAKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHViZF9kZXYtPnF1ZXVlLCBNQVhfU0cpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHModWJkX2Rldi0+cXVldWUsIE1BWF9TRyk7CiAJZXJyID0gdWJkX2Rpc2tfcmVnaXN0ZXIoVUJEX01BSk9SLCB1YmRfZGV2LT5zaXplLCBuLCAmdWJkX2dlbmRpc2tbbl0pOwogCWlmKGVycil7CiAJCSplcnJvcl9vdXQgPSAiRmFpbGVkIHRvIHJlZ2lzdGVyIGRldmljZSI7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDljZTNmMTYuLmE5ZjcyNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0zNDUsNyArMzQ1LDcgQEAKIHN0cnVjdCBtbV9zdHJ1Y3Q7CiBleHRlcm4gcHRlX3QgKnZpcnRfdG9fcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOwogCi0jZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLGFkZHJlc3MscHRlKSBkbyA7IHdoaWxlICgwKQorI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSxhZGRyZXNzLHB0ZXApIGRvIDsgd2hpbGUgKDApCiAKIC8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKi8KICNkZWZpbmUgX19zd3BfdHlwZSh4KQkJCSgoKHgpLnZhbCA+PiA0KSAmIDB4M2YpCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUgYi9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUKaW5kZXggMjIwMWU5Yy4uYzFlYTllYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9NYWtlZmlsZQpAQCAtOCw3ICs4LDggQEAKIAlzZXRqbXAubyBzaWduYWwubyBzdHViLm8gc3R1Yl9zZWd2Lm8gc3lzY2FsbHMubyBzeXNjYWxsX3RhYmxlLm8gXAogCXN5c3JxLm8ga3N5bXMubyB0bHMubwogCi1zdWJhcmNoLW9iai15ID0gbGliL2NzdW0tcGFydGlhbF82NC5vIGxpYi9tZW1jcHlfNjQubyBsaWIvdGh1bmtfNjQubworc3ViYXJjaC1vYmoteSA9IGxpYi9jc3VtLXBhcnRpYWxfNjQubyBsaWIvbWVtY3B5XzY0Lm8gbGliL3RodW5rXzY0Lm8gXAorCQlsaWIvcndzZW1fNjQubwogc3ViYXJjaC1vYmotJChDT05GSUdfTU9EVUxFUykgKz0ga2VybmVsL21vZHVsZS5vCiAKIGxkdC15ID0gLi4vc3lzLWkzODYvbGR0Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGViNDA5MjUuLjA4OTYwMDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtNDUsNiArNDUsNyBAQAogCXNlbGVjdCBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlmIFg4Nl8zMgogCXNlbGVjdCBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTCiAJc2VsZWN0IFVTRVJfU1RBQ0tUUkFDRV9TVVBQT1JUCisJc2VsZWN0IEhBVkVfUkVHU19BTkRfU1RBQ0tfQUNDRVNTX0FQSQogCXNlbGVjdCBIQVZFX0RNQV9BUElfREVCVUcKIAlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAogCXNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZy5jcHUgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQppbmRleCBmMjBkZGY4Li5hMTk4MjkzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQpAQCAtMzE5LDcgKzMxOSw3IEBACiAKIGNvbmZpZyBYODZfWEFERAogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiAhTTM4NgorCWRlcGVuZHMgb24gWDg2XzY0IHx8ICFNMzg2CiAKIGNvbmZpZyBYODZfUFBST19GRU5DRQogCWJvb2wgIlBlbnRpdW1Qcm8gbWVtb3J5IG9yZGVyaW5nIGVycmF0YSB3b3JrYXJvdW5kIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvTWFrZWZpbGUgYi9hcmNoL3g4Ni9NYWtlZmlsZQppbmRleCA3OGIzMmJlLi4wYTQzZGM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9NYWtlZmlsZQpAQCAtMTM1LDkgKzEzNSw3IEBACiAjIHN1c3BlbmQgYW5kIGhpYmVybmF0aW9uIHN1cHBvcnQKIGRyaXZlcnMtJChDT05GSUdfUE0pICs9IGFyY2gveDg2L3Bvd2VyLwogCi1pZmVxICgkKENPTkZJR19YODZfMzIpLHkpCiBkcml2ZXJzLSQoQ09ORklHX0ZCKSArPSBhcmNoL3g4Ni92aWRlby8KLWVuZGlmCiAKICMjIyMKICMgYm9vdCBsb2FkZXIgc3VwcG9ydC4gU2V2ZXJhbCB0YXJnZXRzIGFyZSBrZXB0IGZvciBsZWdhY3kgcHVycG9zZXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCmluZGV4IDNiMjJmZTguLjUxZTI0MDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMTksMTEgKzE5LDYgQEAKICNkZWZpbmUgX0FTTV9YODZfREVTQ19IIDEKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2RlZmluZSBfTElOVVhfU1RSSU5HX0hfIDEKLSNkZWZpbmUgX19MSU5VWF9CSVRNQVBfSCAxCi0jZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgpAQCAtMTMxLDggKzEyNiw4IEBACiBzdGF0aWMgc3RydWN0IGJvb3RfcGFyYW1zICpyZWFsX21vZGU7CQkvKiBQb2ludGVyIHRvIHJlYWwtbW9kZSBkYXRhICovCiBzdGF0aWMgaW50IHF1aWV0OwogCi1zdGF0aWMgdm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCB1bnNpZ25lZCBuKTsKLXZvaWQgKm1lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIG4pOwordm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7Cit2b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbik7CiAKIHN0YXRpYyB2b2lkIF9fcHV0c3RyKGludCwgY29uc3QgY2hhciAqKTsKICNkZWZpbmUgcHV0c3RyKF9feCkgIF9fcHV0c3RyKDAsIF9feCkKQEAgLTE4NSwxMSArMTgwLDkgQEAKIAkJcmV0dXJuOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiAJaWYgKHJlYWxfbW9kZS0+c2NyZWVuX2luZm8ub3JpZ192aWRlb19tb2RlID09IDAgJiYKIAkgICAgbGluZXMgPT0gMCAmJiBjb2xzID09IDApCiAJCXJldHVybjsKLSNlbmRpZgogCiAJeCA9IHJlYWxfbW9kZS0+c2NyZWVuX2luZm8ub3JpZ194OwogCXkgPSByZWFsX21vZGUtPnNjcmVlbl9pbmZvLm9yaWdfeTsKQEAgLTIyMyw3ICsyMTYsNyBAQAogCW91dGIoMHhmZiAmIChwb3MgPj4gMSksIHZpZHBvcnQrMSk7CiB9CiAKLXN0YXRpYyB2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHVuc2lnbmVkIG4pCit2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKQogewogCWludCBpOwogCWNoYXIgKnNzID0gczsKQEAgLTIzMyw3ICsyMjYsNyBAQAogCXJldHVybiBzOwogfQogCi12b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBuKQordm9pZCAqbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCiB7CiAJaW50IGk7CiAJY29uc3QgY2hhciAqcyA9IHNyYzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvbWtjcHVzdHIuYyBiL2FyY2gveDg2L2Jvb3QvbWtjcHVzdHIuYwppbmRleCA4ZWY2MGYyLi45MTkyNTdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L21rY3B1c3RyLmMKKysrIGIvYXJjaC94ODYvYm9vdC9ta2NwdXN0ci5jCkBAIC0yMiw3ICsyMiw3IEBACiAJaW50IGksIGo7CiAJY29uc3QgY2hhciAqc3RyOwogCi0JcHJpbnRmKCJzdGF0aWMgY29uc3QgY2hhciB4ODZfY2FwX3N0cnNbXSA9IFxuIik7CisJcHJpbnRmKCJzdGF0aWMgY29uc3QgY2hhciB4ODZfY2FwX3N0cnNbXSA9XG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOQ0FQSU5UUzsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jIGIvYXJjaC94ODYvYm9vdC92aWRlby12Z2EuYwppbmRleCA4MTljYWExLi5lZDdhZWZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMKQEAgLTQyLDIyICs0MiwxNSBAQAogewogCXN0cnVjdCBiaW9zcmVncyBpcmVnLCBvcmVnOwogCXUxNiBheDsKLQl1OCByb3dzOwogCXU4IG1vZGU7CiAKIAlpbml0cmVncygmaXJlZyk7CiAKKwkvKiBRdWVyeSBjdXJyZW50IG1vZGUgKi8KIAlheCA9IDB4MGYwMDsKIAlpbnRjYWxsKDB4MTAsICZpcmVnLCAmb3JlZyk7CiAJbW9kZSA9IG9yZWcuYWw7CiAKLQlzZXRfZnMoMCk7Ci0Jcm93cyA9IHJkZnM4KDB4NDg0KTsJLyogcm93cyBtaW51cyBvbmUgKi8KLQotCWlmICgob3JlZy5heCA9PSAweDUwMDMgfHwgb3JlZy5heCA9PSAweDUwMDcpICYmCi0JICAgIChyb3dzID09IDAgfHwgcm93cyA9PSAyNCkpCi0JCXJldHVybiBtb2RlOwotCiAJaWYgKG1vZGUgIT0gMyAmJiBtb2RlICE9IDcpCiAJCW1vZGUgPSAzOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLmMKaW5kZXggZjc2NzE2NC4uNDNlZGEyOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC92aWRlby5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8uYwpAQCAtMjk4LDExICsyOTgsMTggQEAKIAl9CiAKIAkvKiBSZXN0b3JlIGN1cnNvciBwb3NpdGlvbiAqLworCWlmIChzYXZlZC5jdXJ4ID49IHhzKQorCQlzYXZlZC5jdXJ4ID0geHMtMTsKKwlpZiAoc2F2ZWQuY3VyeSA+PSB5cykKKwkJc2F2ZWQuY3VyeSA9IHlzLTE7CisKIAlpbml0cmVncygmaXJlZyk7CiAJaXJlZy5haCA9IDB4MDI7CQkvKiBTZXQgY3Vyc29yIHBvc2l0aW9uICovCiAJaXJlZy5kaCA9IHNhdmVkLmN1cnk7CiAJaXJlZy5kbCA9IHNhdmVkLmN1cng7CiAJaW50Y2FsbCgweDEwLCAmaXJlZywgTlVMTCk7CisKKwlzdG9yZV9jdXJzb3JfcG9zaXRpb24oKTsKIH0KIAogdm9pZCBzZXRfdmlkZW8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMl9hb3V0LmMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJfYW91dC5jCmluZGV4IGY5ZjQ3MjQuLjkwNDZlNGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvaWEzMl9hb3V0LmMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyX2FvdXQuYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJICogc2l6ZSBsaW1pdHMgaW1wb3NlZCBvbiB0aGVtIGJ5IGNyZWF0aW5nIHByb2dyYW1zIHdpdGggbGFyZ2UKIAkgKiBhcnJheXMgaW4gdGhlIGRhdGEgb3IgYnNzLgogCSAqLwotCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0RBVEFdLnJsaW1fY3VyOworCXJsaW0gPSBybGltaXQoUkxJTUlUX0RBVEEpOwogCWlmIChybGltID49IFJMSU1fSU5GSU5JVFkpCiAJCXJsaW0gPSB+MDsKIAlpZiAoZXguYV9kYXRhICsgZXguYV9ic3MgPiBybGltKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKaW5kZXggNjliNzRhNy4uZjFlMjUzYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCkBAIC02NSwxMiArNjUsMTcgQEAKIAkJCQkJdm9pZCAqdGV4dCwgdm9pZCAqdGV4dF9lbmQpOwogZXh0ZXJuIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfZGVsKHN0cnVjdCBtb2R1bGUgKm1vZCk7CiBleHRlcm4gdm9pZCBhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaChpbnQgc21wKTsKK2V4dGVybiBpbnQgYWx0ZXJuYXRpdmVzX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGFsdGVybmF0aXZlc19zbXBfbW9kdWxlX2FkZChzdHJ1Y3QgbW9kdWxlICptb2QsIGNoYXIgKm5hbWUsCiAJCQkJCSAgICAgICB2b2lkICpsb2Nrcywgdm9pZCAqbG9ja3NfZW5kLAogCQkJCQkgICAgICAgdm9pZCAqdGV4dCwgdm9pZCAqdGV4dF9lbmQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfZGVsKHN0cnVjdCBtb2R1bGUgKm1vZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaChpbnQgc21wKSB7fQorc3RhdGljIGlubGluZSBpbnQgYWx0ZXJuYXRpdmVzX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZgkvKiBDT05GSUdfU01QICovCiAKIC8qIGFsdGVybmF0aXZlIGFzc2VtYmx5IHByaW1pdGl2ZTogKi8KQEAgLTEyNSwxMSArMTMwLDE2IEBACiAJYXNtIHZvbGF0aWxlIChBTFRFUk5BVElWRShvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUpCQlcCiAJCTogb3V0cHV0IDogImkiICgwKSwgIyMgaW5wdXQpCiAKKy8qIExpa2UgYWx0ZXJuYXRpdmVfaW8sIGJ1dCBmb3IgcmVwbGFjaW5nIGEgZGlyZWN0IGNhbGwgd2l0aCBhbm90aGVyIG9uZS4gKi8KKyNkZWZpbmUgYWx0ZXJuYXRpdmVfY2FsbChvbGRmdW5jLCBuZXdmdW5jLCBmZWF0dXJlLCBvdXRwdXQsIGlucHV0Li4uKQlcCisJYXNtIHZvbGF0aWxlIChBTFRFUk5BVElWRSgiY2FsbCAlUFtvbGRdIiwgImNhbGwgJVBbbmV3XSIsIGZlYXR1cmUpIFwKKwkJOiBvdXRwdXQgOiBbb2xkXSAiaSIgKG9sZGZ1bmMpLCBbbmV3XSAiaSIgKG5ld2Z1bmMpLCAjIyBpbnB1dCkKKwogLyoKICAqIHVzZSB0aGlzIG1hY3JvKHMpIGlmIHlvdSBuZWVkIG1vcmUgdGhhbiBvbmUgb3V0cHV0IHBhcmFtZXRlcgogICogaW4gYWx0ZXJuYXRpdmVfaW8KICAqLwotI2RlZmluZSBBU01fT1VUUFVUMihhLCBiKSBhLCBiCisjZGVmaW5lIEFTTV9PVVRQVVQyKGEuLi4pIGEKIAogc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGU7CiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXVfcHJvdG8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdV9wcm90by5oCmluZGV4IDRkODE3ZjkuLmQyNTQ0ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdV9wcm90by5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdV9wcm90by5oCkBAIC0zMSw2ICszMSw3IEBACiBleHRlcm4gaW50IGFtZF9pb21tdV9pbml0X2RldmljZXModm9pZCk7CiBleHRlcm4gdm9pZCBhbWRfaW9tbXVfdW5pbml0X2RldmljZXModm9pZCk7CiBleHRlcm4gdm9pZCBhbWRfaW9tbXVfaW5pdF9ub3RpZmllcih2b2lkKTsKK2V4dGVybiB2b2lkIGFtZF9pb21tdV9pbml0X2FwaSh2b2lkKTsKICNpZm5kZWYgQ09ORklHX0FNRF9JT01NVV9TVEFUUwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYW1kX2lvbW11X3N0YXRzX2luaXQodm9pZCkgeyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDRlMWI4ODcuLjhmODIxN2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC0xLDUgKzEsMzAwIEBACi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJhdG9taWNfMzIuaCIKLSNlbHNlCi0jIGluY2x1ZGUgImF0b21pY182NC5oIgorI2lmbmRlZiBfQVNNX1g4Nl9BVE9NSUNfSAorI2RlZmluZSBfQVNNX1g4Nl9BVE9NSUNfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhc20vY21weGNoZy5oPgorCisvKgorICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKKyAqIHJlc291cmNlIGNvdW50aW5nIGV0Yy4uCisgKi8KKworI2RlZmluZSBBVE9NSUNfSU5JVChpKQl7IChpKSB9CisKKy8qKgorICogYXRvbWljX3JlYWQgLSByZWFkIGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgcmVhZHMgdGhlIHZhbHVlIG9mIEB2LgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfcmVhZChjb25zdCBhdG9taWNfdCAqdikKK3sKKwlyZXR1cm4gdi0+Y291bnRlcjsKK30KKworLyoqCisgKiBhdG9taWNfc2V0IC0gc2V0IGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogQGk6IHJlcXVpcmVkIHZhbHVlCisgKgorICogQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBAdiB0byBAaS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19zZXQoYXRvbWljX3QgKnYsIGludCBpKQoreworCXYtPmNvdW50ZXIgPSBpOworfQorCisvKioKKyAqIGF0b21pY19hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWMgdmFyaWFibGUKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMSwlMCIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAiaXIiIChpKSk7Cit9CisKKy8qKgorICogYXRvbWljX3N1YiAtIHN1YnRyYWN0IGludGVnZXIgZnJvbSBhdG9taWMgdmFyaWFibGUKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VibCAlMSwlMCIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAiaXIiIChpKSk7Cit9CisKKy8qKgorICogYXRvbWljX3N1Yl9hbmRfdGVzdCAtIHN1YnRyYWN0IHZhbHVlIGZyb20gdmFyaWFibGUgYW5kIHRlc3QgcmVzdWx0CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKKyAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9hbmRfdGVzdChpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJsICUyLCUwOyBzZXRlICUxIgorCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImlyIiAoaSkgOiAibWVtb3J5Iik7CisJcmV0dXJuIGM7Cit9CisKKy8qKgorICogYXRvbWljX2luYyAtIGluY3JlbWVudCBhdG9taWMgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19pbmMoYXRvbWljX3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNsICUwIgorCQkgICAgIDogIittIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pY19kZWMgLSBkZWNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfZGVjKGF0b21pY190ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMCIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyoqCisgKiBhdG9taWNfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEgYW5kCisgKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCisgKiBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2RlY19hbmRfdGVzdChhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY2wgJTA7IHNldGUgJTEiCisJCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYyAhPSAwOworfQorCisvKioKKyAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfaW5jX2FuZF90ZXN0KGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jbCAlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6IDogIm1lbW9yeSIpOworCXJldHVybiBjICE9IDA7Cit9CisKKy8qKgorICogYXRvbWljX2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIHRydWUKKyAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KKyAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9uZWdhdGl2ZShpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUyLCUwOyBzZXRzICUxIgorCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImlyIiAoaSkgOiAibWVtb3J5Iik7CisJcmV0dXJuIGM7Cit9CisKKy8qKgorICogYXRvbWljX2FkZF9yZXR1cm4gLSBhZGQgaW50ZWdlciBhbmQgcmV0dXJuCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgQGkgKyBAdgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJaW50IF9faTsKKyNpZmRlZiBDT05GSUdfTTM4NgorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaWYgKHVubGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2IDw9IDMpKQorCQlnb3RvIG5vX3hhZGQ7CiAjZW5kaWYKKwkvKiBNb2Rlcm4gNDg2KyBwcm9jZXNzb3IgKi8KKwlfX2kgPSBpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAieGFkZGwgJTAsICUxIgorCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gaSArIF9faTsKKworI2lmZGVmIENPTkZJR19NMzg2Citub194YWRkOiAvKiBMZWdhY3kgMzg2IHByb2Nlc3NvciAqLworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19pID0gYXRvbWljX3JlYWQodik7CisJYXRvbWljX3NldCh2LCBpICsgX19pKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiBpICsgX19pOworI2VuZGlmCit9CisKKy8qKgorICogYXRvbWljX3N1Yl9yZXR1cm4gLSBzdWJ0cmFjdCBpbnRlZ2VyIGFuZCByZXR1cm4KKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucyBAdiAtIEBpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlyZXR1cm4gYXRvbWljX2FkZF9yZXR1cm4oLWksIHYpOworfQorCisjZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpICAoYXRvbWljX2FkZF9yZXR1cm4oMSwgdikpCisjZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpICAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgdikpCisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19jbXB4Y2hnKGF0b21pY190ICp2LCBpbnQgb2xkLCBpbnQgbmV3KQoreworCXJldHVybiBjbXB4Y2hnKCZ2LT5jb3VudGVyLCBvbGQsIG5ldyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY194Y2hnKGF0b21pY190ICp2LCBpbnQgbmV3KQoreworCXJldHVybiB4Y2hnKCZ2LT5jb3VudGVyLCBuZXcpOworfQorCisvKioKKyAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGFscmVhZHkgYSBnaXZlbiB2YWx1ZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KKyAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBAdiB3YXMgbm90IGFscmVhZHkgQHUuCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKK3sKKwlpbnQgYywgb2xkOworCWMgPSBhdG9taWNfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CisJcmV0dXJuIGMgIT0gKHUpOworfQorCisjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQorCisvKioKKyAqIGF0b21pY19pbmNfc2hvcnQgLSBpbmNyZW1lbnQgb2YgYSBzaG9ydCBpbnRlZ2VyCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGludAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyAxIHRvIEB2CisgKiBSZXR1cm5zIHRoZSBuZXcgdmFsdWUgb2YgQHUKKyAqLworc3RhdGljIGlubGluZSBzaG9ydCBpbnQgYXRvbWljX2luY19zaG9ydChzaG9ydCBpbnQgKnYpCit7CisJYXNtKExPQ0tfUFJFRklYICJhZGR3ICQxLCAlMCIgOiAiK20iICgqdikpOworCXJldHVybiAqdjsKK30KKworI2lmZGVmIENPTkZJR19YODZfNjQKKy8qKgorICogYXRvbWljX29yX2xvbmcgLSBPUiBvZiB0d28gbG9uZyBpbnRlZ2VycworICogQHYxOiBwb2ludGVyIHRvIHR5cGUgdW5zaWduZWQgbG9uZworICogQHYyOiBwb2ludGVyIHRvIHR5cGUgdW5zaWduZWQgbG9uZworICoKKyAqIEF0b21pY2FsbHkgT1JzIEB2MSBhbmQgQHYyCisgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIE9SCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfb3JfbG9uZyh1bnNpZ25lZCBsb25nICp2MSwgdW5zaWduZWQgbG9uZyB2MikKK3sKKwlhc20oTE9DS19QUkVGSVggIm9ycSAlMSwgJTAiIDogIittIiAoKnYxKSA6ICJyIiAodjIpKTsKK30KKyNlbmRpZgorCisvKiBUaGVzZSBhcmUgeDg2LXNwZWNpZmljLCB1c2VkIGJ5IHNvbWUgaGVhZGVyIGZpbGVzICovCisjZGVmaW5lIGF0b21pY19jbGVhcl9tYXNrKG1hc2ssIGFkZHIpCQkJCVwKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFuZGwgJTAsJTEiCQkJXAorCQkgICAgIDogOiAiciIgKH4obWFzaykpLCAibSIgKCooYWRkcikpIDogIm1lbW9yeSIpCisKKyNkZWZpbmUgYXRvbWljX3NldF9tYXNrKG1hc2ssIGFkZHIpCQkJCVwKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIm9ybCAlMCwlMSIJCQlcCisJCSAgICAgOiA6ICJyIiAoKHVuc2lnbmVkKShtYXNrKSksICJtIiAoKihhZGRyKSkJXAorCQkgICAgIDogIm1lbW9yeSIpCisKKy8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nIG9uIHg4NiAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorIyBpbmNsdWRlICJhdG9taWM2NF8zMi5oIgorI2Vsc2UKKyMgaW5jbHVkZSAiYXRvbWljNjRfNjQuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLWxvbmcuaD4KKyNlbmRpZiAvKiBfQVNNX1g4Nl9BVE9NSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljNjRfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYzY0XzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwMjdiZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYzY0XzMyLmgKQEAgLTAsMCArMSwxNjAgQEAKKyNpZm5kZWYgX0FTTV9YODZfQVRPTUlDNjRfMzJfSAorI2RlZmluZSBfQVNNX1g4Nl9BVE9NSUM2NF8zMl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorLy8jaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KKworLyogQW4gNjRiaXQgYXRvbWljIHR5cGUgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXU2NCBfX2FsaWduZWQoOCkgY291bnRlcjsKK30gYXRvbWljNjRfdDsKKworI2RlZmluZSBBVE9NSUM2NF9JTklUKHZhbCkJeyAodmFsKSB9CisKK2V4dGVybiB1NjQgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICpwdHIsIHU2NCBvbGRfdmFsLCB1NjQgbmV3X3ZhbCk7CisKKy8qKgorICogYXRvbWljNjRfeGNoZyAtIHhjaGcgYXRvbWljNjQgdmFyaWFibGUKKyAqIEBwdHI6ICAgICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqIEBuZXdfdmFsOiAgdmFsdWUgdG8gYXNzaWduCisgKgorICogQXRvbWljYWxseSB4Y2hncyB0aGUgdmFsdWUgb2YgQHB0ciB0byBAbmV3X3ZhbCBhbmQgcmV0dXJucworICogdGhlIG9sZCB2YWx1ZS4KKyAqLworZXh0ZXJuIHU2NCBhdG9taWM2NF94Y2hnKGF0b21pYzY0X3QgKnB0ciwgdTY0IG5ld192YWwpOworCisvKioKKyAqIGF0b21pYzY0X3NldCAtIHNldCBhdG9taWM2NCB2YXJpYWJsZQorICogQHB0cjogICAgICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICogQG5ld192YWw6ICB2YWx1ZSB0byBhc3NpZ24KKyAqCisgKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEBwdHIgdG8gQG5ld192YWwuCisgKi8KK2V4dGVybiB2b2lkIGF0b21pYzY0X3NldChhdG9taWM2NF90ICpwdHIsIHU2NCBuZXdfdmFsKTsKKworLyoqCisgKiBhdG9taWM2NF9yZWFkIC0gcmVhZCBhdG9taWM2NCB2YXJpYWJsZQorICogQHB0cjogICAgICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgcmVhZHMgdGhlIHZhbHVlIG9mIEBwdHIgYW5kIHJldHVybnMgaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0IGF0b21pYzY0X3JlYWQoYXRvbWljNjRfdCAqcHRyKQoreworCXU2NCByZXM7CisKKwkvKgorCSAqIE5vdGUsIHdlIGlubGluZSB0aGlzIGF0b21pYzY0X3QgcHJpbWl0aXZlIGJlY2F1c2UKKwkgKiBpdCBvbmx5IGNsb2JiZXJzIEVBWC9FRFggYW5kIGxlYXZlcyB0aGUgb3RoZXJzCisJICogdW50b3VjaGVkLiBXZSBhbHNvIChzb21ld2hhdCBzdWJ0bHkpIHJlbHkgb24gdGhlCisJICogZmFjdCB0aGF0IGNtcHhjaGc4YiByZXR1cm5zIHRoZSBjdXJyZW50IDY0LWJpdCB2YWx1ZQorCSAqIG9mIHRoZSBtZW1vcnkgbG9jYXRpb24gd2UgYXJlIHRvdWNoaW5nOgorCSAqLworCWFzbSB2b2xhdGlsZSgKKwkJIm1vdiAlJWVieCwgJSVlYXhcblx0IgorCQkibW92ICUlZWN4LCAlJWVkeFxuXHQiCisJCUxPQ0tfUFJFRklYICJjbXB4Y2hnOGIgJTFcbiIKKwkJCTogIj0mQSIgKHJlcykKKwkJCTogIm0iICgqcHRyKQorCQkpOworCisJcmV0dXJuIHJlczsKK30KKworZXh0ZXJuIHU2NCBhdG9taWM2NF9yZWFkKGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfYWRkX3JldHVybiAtIGFkZCBhbmQgcmV0dXJuCisgKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBhZGRzIEBkZWx0YSB0byBAcHRyIGFuZCByZXR1cm5zIEBkZWx0YSArICpAcHRyCisgKi8KK2V4dGVybiB1NjQgYXRvbWljNjRfYWRkX3JldHVybih1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7CisKKy8qCisgKiBPdGhlciB2YXJpYW50cyB3aXRoIGRpZmZlcmVudCBhcml0aG1ldGljIG9wZXJhdG9yczoKKyAqLworZXh0ZXJuIHU2NCBhdG9taWM2NF9zdWJfcmV0dXJuKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKK2V4dGVybiB1NjQgYXRvbWljNjRfaW5jX3JldHVybihhdG9taWM2NF90ICpwdHIpOworZXh0ZXJuIHU2NCBhdG9taWM2NF9kZWNfcmV0dXJuKGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljNjQgdmFyaWFibGUKKyAqIEBkZWx0YTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEBwdHI6ICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGRlbHRhIHRvIEBwdHIuCisgKi8KK2V4dGVybiB2b2lkIGF0b21pYzY0X2FkZCh1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEBwdHI6ICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAZGVsdGEgZnJvbSBAcHRyLgorICovCitleHRlcm4gdm9pZCBhdG9taWM2NF9zdWIodTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOworCisvKioKKyAqIGF0b21pYzY0X3N1Yl9hbmRfdGVzdCAtIHN1YnRyYWN0IHZhbHVlIGZyb20gdmFyaWFibGUgYW5kIHRlc3QgcmVzdWx0CisgKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEBwdHI6ICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAZGVsdGEgZnJvbSBAcHRyIGFuZCByZXR1cm5zCisgKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KK2V4dGVybiBpbnQgYXRvbWljNjRfc3ViX2FuZF90ZXN0KHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9pbmMgLSBpbmNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKKyAqIEBwdHI6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEBwdHIgYnkgMS4KKyAqLworZXh0ZXJuIHZvaWQgYXRvbWljNjRfaW5jKGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfZGVjIC0gZGVjcmVtZW50IGF0b21pYzY0IHZhcmlhYmxlCisgKiBAcHRyOiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAcHRyIGJ5IDEuCisgKi8KK2V4dGVybiB2b2lkIGF0b21pYzY0X2RlYyhhdG9taWM2NF90ICpwdHIpOworCisvKioKKyAqIGF0b21pYzY0X2RlY19hbmRfdGVzdCAtIGRlY3JlbWVudCBhbmQgdGVzdAorICogQHB0cjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHB0ciBieSAxIGFuZAorICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBvdGhlcgorICogY2FzZXMuCisgKi8KK2V4dGVybiBpbnQgYXRvbWljNjRfZGVjX2FuZF90ZXN0KGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisgKiBAcHRyOiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAcHRyIGJ5IDEKKyAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworZXh0ZXJuIGludCBhdG9taWM2NF9pbmNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKKyAqIEBkZWx0YTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEBwdHI6ICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGRlbHRhIHRvIEBwdHIgYW5kIHJldHVybnMgdHJ1ZQorICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgorICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgorICovCitleHRlcm4gaW50IGF0b21pYzY0X2FkZF9uZWdhdGl2ZSh1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9BVE9NSUM2NF8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWM2NF82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljNjRfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWM1YjQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljNjRfNjQuaApAQCAtMCwwICsxLDIyNCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9BVE9NSUM2NF82NF9ICisjZGVmaW5lIF9BU01fWDg2X0FUT01JQzY0XzY0X0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CisjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KKworLyogVGhlIDY0LWJpdCBhdG9taWMgdHlwZSAqLworCisjZGVmaW5lIEFUT01JQzY0X0lOSVQoaSkJeyAoaSkgfQorCisvKioKKyAqIGF0b21pYzY0X3JlYWQgLSByZWFkIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KKyAqIERvZXNuJ3QgaW1wbHkgYSByZWFkIG1lbW9yeSBiYXJyaWVyLgorICovCitzdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfcmVhZChjb25zdCBhdG9taWM2NF90ICp2KQoreworCXJldHVybiB2LT5jb3VudGVyOworfQorCisvKioKKyAqIGF0b21pYzY0X3NldCAtIHNldCBhdG9taWM2NCB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKiBAaTogcmVxdWlyZWQgdmFsdWUKKyAqCisgKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfc2V0KGF0b21pYzY0X3QgKnYsIGxvbmcgaSkKK3sKKwl2LT5jb3VudGVyID0gaTsKK30KKworLyoqCisgKiBhdG9taWM2NF9hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWM2NCB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9hZGQobG9uZyBpLCBhdG9taWM2NF90ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkcSAlMSwlMCIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljNjRfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X3N1Yihsb25nIGksIGF0b21pYzY0X3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJxICUxLCUwIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJlciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyoqCisgKiBhdG9taWM2NF9zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKKyAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfc3ViX2FuZF90ZXN0KGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YnEgJTIsJTA7IHNldGUgJTEiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYzsKK30KKworLyoqCisgKiBhdG9taWM2NF9pbmMgLSBpbmNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfaW5jKGF0b21pYzY0X3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNxICUwIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pYzY0X2RlYyAtIGRlY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9kZWMoYXRvbWljNjRfdCAqdikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY3EgJTAiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQorCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljNjRfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKKyAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKKyAqIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9kZWNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY3EgJTA7IHNldGUgJTEiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjICE9IDA7Cit9CisKKy8qKgorICogYXRvbWljNjRfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9pbmNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY3EgJTA7IHNldGUgJTEiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjICE9IDA7Cit9CisKKy8qKgorICogYXRvbWljNjRfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyB0cnVlCisgKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCisgKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF9uZWdhdGl2ZShsb25nIGksIGF0b21pYzY0X3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRxICUyLCUwOyBzZXRzICUxIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImVyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CisJcmV0dXJuIGM7Cit9CisKKy8qKgorICogYXRvbWljNjRfYWRkX3JldHVybiAtIGFkZCBhbmQgcmV0dXJuCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyBAaSArIEB2CisgKi8KK3N0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIF9faSA9IGk7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkcSAlMCwgJTE7IgorCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gaSArIF9faTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X3N1Yl9yZXR1cm4obG9uZyBpLCBhdG9taWM2NF90ICp2KQoreworCXJldHVybiBhdG9taWM2NF9hZGRfcmV0dXJuKC1pLCB2KTsKK30KKworI2RlZmluZSBhdG9taWM2NF9pbmNfcmV0dXJuKHYpICAoYXRvbWljNjRfYWRkX3JldHVybigxLCAodikpKQorI2RlZmluZSBhdG9taWM2NF9kZWNfcmV0dXJuKHYpICAoYXRvbWljNjRfc3ViX3JldHVybigxLCAodikpKQorCitzdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICp2LCBsb25nIG9sZCwgbG9uZyBuZXcpCit7CisJcmV0dXJuIGNtcHhjaGcoJnYtPmNvdW50ZXIsIG9sZCwgbmV3KTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X3hjaGcoYXRvbWljNjRfdCAqdiwgbG9uZyBuZXcpCit7CisJcmV0dXJuIHhjaGcoJnYtPmNvdW50ZXIsIG5ldyk7Cit9CisKKy8qKgorICogYXRvbWljNjRfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKKyAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCisgKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KKyAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9hZGRfdW5sZXNzKGF0b21pYzY0X3QgKnYsIGxvbmcgYSwgbG9uZyB1KQoreworCWxvbmcgYywgb2xkOworCWMgPSBhdG9taWM2NF9yZWFkKHYpOworCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKKwkJCWJyZWFrOworCQlvbGQgPSBhdG9taWM2NF9jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7CisJCWlmIChsaWtlbHkob2xkID09IGMpKQorCQkJYnJlYWs7CisJCWMgPSBvbGQ7CisJfQorCXJldHVybiBjICE9ICh1KTsKK30KKworI2RlZmluZSBhdG9taWM2NF9pbmNfbm90X3plcm8odikgYXRvbWljNjRfYWRkX3VubGVzcygodiksIDEsIDApCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9BVE9NSUM2NF82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWNfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pY18zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzVhNjY3Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pY18zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDE1ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfQVRPTUlDXzMyX0gKLSNkZWZpbmUgX0FTTV9YODZfQVRPTUlDXzMyX0gKLQotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KLQotLyoKLSAqIEF0b21pYyBvcGVyYXRpb25zIHRoYXQgQyBjYW4ndCBndWFyYW50ZWUgdXMuICBVc2VmdWwgZm9yCi0gKiByZXNvdXJjZSBjb3VudGluZyBldGMuLgotICovCi0KLSNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJeyAoaSkgfQotCi0vKioKLSAqIGF0b21pY19yZWFkIC0gcmVhZCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3JlYWQoY29uc3QgYXRvbWljX3QgKnYpCi17Ci0JcmV0dXJuIHYtPmNvdW50ZXI7Ci19Ci0KLS8qKgotICogYXRvbWljX3NldCAtIHNldCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBpOiByZXF1aXJlZCB2YWx1ZQotICoKLSAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHYgdG8gQGkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2V0KGF0b21pY190ICp2LCBpbnQgaSkKLXsKLQl2LT5jb3VudGVyID0gaTsKLX0KLQotLyoqCi0gKiBhdG9taWNfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljIHZhcmlhYmxlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfYWRkKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTEsJTAiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKQotCQkgICAgIDogImlyIiAoaSkpOwotfQotCi0vKioKLSAqIGF0b21pY19zdWIgLSBzdWJ0cmFjdCBpbnRlZ2VyIGZyb20gYXRvbWljIHZhcmlhYmxlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc3ViKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YmwgJTEsJTAiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKQotCQkgICAgIDogImlyIiAoaSkpOwotfQotCi0vKioKLSAqIGF0b21pY19zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zCi0gKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAotICogb3RoZXIgY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfYW5kX3Rlc3QoaW50IGksIGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VibCAlMiwlMDsgc2V0ZSAlMSIKLQkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJpciIgKGkpIDogIm1lbW9yeSIpOwotCXJldHVybiBjOwotfQotCi0vKioKLSAqIGF0b21pY19pbmMgLSBpbmNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jbCAlMCIKLQkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfZGVjIC0gZGVjcmVtZW50IGF0b21pYyB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2RlYyhhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY2wgJTAiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljX2RlY19hbmRfdGVzdCAtIGRlY3JlbWVudCBhbmQgdGVzdAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxIGFuZAotICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBvdGhlcgotICogY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNsICUwOyBzZXRlICUxIgotCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGMgIT0gMDsKLX0KLQotLyoqCi0gKiBhdG9taWNfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKLSAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYyAhPSAwOwotfQotCi0vKioKLSAqIGF0b21pY19hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyB0cnVlCi0gKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCi0gKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfbmVnYXRpdmUoaW50IGksIGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMiwlMDsgc2V0cyAlMSIKLQkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJpciIgKGkpIDogIm1lbW9yeSIpOwotCXJldHVybiBjOwotfQotCi0vKioKLSAqIGF0b21pY19hZGRfcmV0dXJuIC0gYWRkIGludGVnZXIgYW5kIHJldHVybgotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIEBpICsgQHYKLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQotewotCWludCBfX2k7Ci0jaWZkZWYgQ09ORklHX00zODYKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWlmICh1bmxpa2VseShib290X2NwdV9kYXRhLng4NiA8PSAzKSkKLQkJZ290byBub194YWRkOwotI2VuZGlmCi0JLyogTW9kZXJuIDQ4NisgcHJvY2Vzc29yICovCi0JX19pID0gaTsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInhhZGRsICUwLCAlMSIKLQkJICAgICA6ICIrciIgKGkpLCAiK20iICh2LT5jb3VudGVyKQotCQkgICAgIDogOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGkgKyBfX2k7Ci0KLSNpZmRlZiBDT05GSUdfTTM4Ngotbm9feGFkZDogLyogTGVnYWN5IDM4NiBwcm9jZXNzb3IgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19pID0gYXRvbWljX3JlYWQodik7Ci0JYXRvbWljX3NldCh2LCBpICsgX19pKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIGkgKyBfX2k7Ci0jZW5kaWYKLX0KLQotLyoqCi0gKiBhdG9taWNfc3ViX3JldHVybiAtIHN1YnRyYWN0IGludGVnZXIgYW5kIHJldHVybgotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zIEB2IC0gQGkKLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQotewotCXJldHVybiBhdG9taWNfYWRkX3JldHVybigtaSwgdik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19jbXB4Y2hnKGF0b21pY190ICp2LCBpbnQgb2xkLCBpbnQgbmV3KQotewotCXJldHVybiBjbXB4Y2hnKCZ2LT5jb3VudGVyLCBvbGQsIG5ldyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY194Y2hnKGF0b21pY190ICp2LCBpbnQgbmV3KQotewotCXJldHVybiB4Y2hnKCZ2LT5jb3VudGVyLCBuZXcpOwotfQotCi0vKioKLSAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGFscmVhZHkgYSBnaXZlbiB2YWx1ZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KLSAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBAdiB3YXMgbm90IGFscmVhZHkgQHUuCi0gKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKLXsKLQlpbnQgYywgb2xkOwotCWMgPSBhdG9taWNfcmVhZCh2KTsKLQlmb3IgKDs7KSB7Ci0JCWlmICh1bmxpa2VseShjID09ICh1KSkpCi0JCQlicmVhazsKLQkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKLQkJaWYgKGxpa2VseShvbGQgPT0gYykpCi0JCQlicmVhazsKLQkJYyA9IG9sZDsKLQl9Ci0JcmV0dXJuIGMgIT0gKHUpOwotfQotCi0jZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQotCi0jZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpICAoYXRvbWljX2FkZF9yZXR1cm4oMSwgdikpCi0jZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpICAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgdikpCi0KLS8qIFRoZXNlIGFyZSB4ODYtc3BlY2lmaWMsIHVzZWQgYnkgc29tZSBoZWFkZXIgZmlsZXMgKi8KLSNkZWZpbmUgYXRvbWljX2NsZWFyX21hc2sobWFzaywgYWRkcikJCQkJXAotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYW5kbCAlMCwlMSIJCQlcCi0JCSAgICAgOiA6ICJyIiAofihtYXNrKSksICJtIiAoKihhZGRyKSkgOiAibWVtb3J5IikKLQotI2RlZmluZSBhdG9taWNfc2V0X21hc2sobWFzaywgYWRkcikJCQkJXAotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAib3JsICUwLCUxIgkJCQlcCi0JCSAgICAgOiA6ICJyIiAobWFzayksICJtIiAoKihhZGRyKSkgOiAibWVtb3J5IikKLQotLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgb24geDg2ICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCi0KLS8qIEFuIDY0Yml0IGF0b21pYyB0eXBlICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1NjQgX19hbGlnbmVkKDgpIGNvdW50ZXI7Ci19IGF0b21pYzY0X3Q7Ci0KLSNkZWZpbmUgQVRPTUlDNjRfSU5JVCh2YWwpCXsgKHZhbCkgfQotCi1leHRlcm4gdTY0IGF0b21pYzY0X2NtcHhjaGcoYXRvbWljNjRfdCAqcHRyLCB1NjQgb2xkX3ZhbCwgdTY0IG5ld192YWwpOwotCi0vKioKLSAqIGF0b21pYzY0X3hjaGcgLSB4Y2hnIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAcHRyOiAgICAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKiBAbmV3X3ZhbDogIHZhbHVlIHRvIGFzc2lnbgotICoKLSAqIEF0b21pY2FsbHkgeGNoZ3MgdGhlIHZhbHVlIG9mIEBwdHIgdG8gQG5ld192YWwgYW5kIHJldHVybnMKLSAqIHRoZSBvbGQgdmFsdWUuCi0gKi8KLWV4dGVybiB1NjQgYXRvbWljNjRfeGNoZyhhdG9taWM2NF90ICpwdHIsIHU2NCBuZXdfdmFsKTsKLQotLyoqCi0gKiBhdG9taWM2NF9zZXQgLSBzZXQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEBwdHI6ICAgICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqIEBuZXdfdmFsOiAgdmFsdWUgdG8gYXNzaWduCi0gKgotICogQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBAcHRyIHRvIEBuZXdfdmFsLgotICovCi1leHRlcm4gdm9pZCBhdG9taWM2NF9zZXQoYXRvbWljNjRfdCAqcHRyLCB1NjQgbmV3X3ZhbCk7Ci0KLS8qKgotICogYXRvbWljNjRfcmVhZCAtIHJlYWQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEBwdHI6ICAgICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAcHRyIGFuZCByZXR1cm5zIGl0LgotICovCi1zdGF0aWMgaW5saW5lIHU2NCBhdG9taWM2NF9yZWFkKGF0b21pYzY0X3QgKnB0cikKLXsKLQl1NjQgcmVzOwotCi0JLyoKLQkgKiBOb3RlLCB3ZSBpbmxpbmUgdGhpcyBhdG9taWM2NF90IHByaW1pdGl2ZSBiZWNhdXNlCi0JICogaXQgb25seSBjbG9iYmVycyBFQVgvRURYIGFuZCBsZWF2ZXMgdGhlIG90aGVycwotCSAqIHVudG91Y2hlZC4gV2UgYWxzbyAoc29tZXdoYXQgc3VidGx5KSByZWx5IG9uIHRoZQotCSAqIGZhY3QgdGhhdCBjbXB4Y2hnOGIgcmV0dXJucyB0aGUgY3VycmVudCA2NC1iaXQgdmFsdWUKLQkgKiBvZiB0aGUgbWVtb3J5IGxvY2F0aW9uIHdlIGFyZSB0b3VjaGluZzoKLQkgKi8KLQlhc20gdm9sYXRpbGUoCi0JCSJtb3YgJSVlYngsICUlZWF4XG5cdCIKLQkJIm1vdiAlJWVjeCwgJSVlZHhcblx0IgotCQlMT0NLX1BSRUZJWCAiY21weGNoZzhiICUxXG4iCi0JCQk6ICI9JkEiIChyZXMpCi0JCQk6ICJtIiAoKnB0cikKLQkJKTsKLQotCXJldHVybiByZXM7Ci19Ci0KLWV4dGVybiB1NjQgYXRvbWljNjRfcmVhZChhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X2FkZF9yZXR1cm4gLSBhZGQgYW5kIHJldHVybgotICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAZGVsdGEgdG8gQHB0ciBhbmQgcmV0dXJucyBAZGVsdGEgKyAqQHB0cgotICovCi1leHRlcm4gdTY0IGF0b21pYzY0X2FkZF9yZXR1cm4odTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOwotCi0vKgotICogT3RoZXIgdmFyaWFudHMgd2l0aCBkaWZmZXJlbnQgYXJpdGhtZXRpYyBvcGVyYXRvcnM6Ci0gKi8KLWV4dGVybiB1NjQgYXRvbWljNjRfc3ViX3JldHVybih1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7Ci1leHRlcm4gdTY0IGF0b21pYzY0X2luY19yZXR1cm4oYXRvbWljNjRfdCAqcHRyKTsKLWV4dGVybiB1NjQgYXRvbWljNjRfZGVjX3JldHVybihhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X2FkZCAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBkZWx0YSB0byBAcHRyLgotICovCi1leHRlcm4gdm9pZCBhdG9taWM2NF9hZGQodTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X3N1YiAtIHN1YnRyYWN0IHRoZSBhdG9taWM2NCB2YXJpYWJsZQotICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGRlbHRhIGZyb20gQHB0ci4KLSAqLwotZXh0ZXJuIHZvaWQgYXRvbWljNjRfc3ViKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKLQotLyoqCi0gKiBhdG9taWM2NF9zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAotICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGRlbHRhIGZyb20gQHB0ciBhbmQgcmV0dXJucwotICogdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1leHRlcm4gaW50IGF0b21pYzY0X3N1Yl9hbmRfdGVzdCh1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7Ci0KLS8qKgotICogYXRvbWljNjRfaW5jIC0gaW5jcmVtZW50IGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAcHRyOiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAcHRyIGJ5IDEuCi0gKi8KLWV4dGVybiB2b2lkIGF0b21pYzY0X2luYyhhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X2RlYyAtIGRlY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQotICogQHB0cjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHB0ciBieSAxLgotICovCi1leHRlcm4gdm9pZCBhdG9taWM2NF9kZWMoYXRvbWljNjRfdCAqcHRyKTsKLQotLyoqCi0gKiBhdG9taWM2NF9kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKLSAqIEBwdHI6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEBwdHIgYnkgMSBhbmQKLSAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKLSAqIGNhc2VzLgotICovCi1leHRlcm4gaW50IGF0b21pYzY0X2RlY19hbmRfdGVzdChhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAotICogQHB0cjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHB0ciBieSAxCi0gKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAotICogb3RoZXIgY2FzZXMuCi0gKi8KLWV4dGVybiBpbnQgYXRvbWljNjRfaW5jX2FuZF90ZXN0KGF0b21pYzY0X3QgKnB0cik7Ci0KLS8qKgotICogYXRvbWljNjRfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCi0gKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBkZWx0YSB0byBAcHRyIGFuZCByZXR1cm5zIHRydWUKLSAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KLSAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KLSAqLwotZXh0ZXJuIGludCBhdG9taWM2NF9hZGRfbmVnYXRpdmUodTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLWxvbmcuaD4KLSNlbmRpZiAvKiBfQVNNX1g4Nl9BVE9NSUNfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWNfNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYwNWRjMi4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWNfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4NSArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0FUT01JQ182NF9ICi0jZGVmaW5lIF9BU01fWDg2X0FUT01JQ182NF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgotI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+Ci0KLS8qCi0gKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLiAgVXNlZnVsIGZvcgotICogcmVzb3VyY2UgY291bnRpbmcgZXRjLi4KLSAqLwotCi0jZGVmaW5lIEFUT01JQ19JTklUKGkpCXsgKGkpIH0KLQotLyoqCi0gKiBhdG9taWNfcmVhZCAtIHJlYWQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19yZWFkKGNvbnN0IGF0b21pY190ICp2KQotewotCXJldHVybiB2LT5jb3VudGVyOwotfQotCi0vKioKLSAqIGF0b21pY19zZXQgLSBzZXQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiBAaTogcmVxdWlyZWQgdmFsdWUKLSAqCi0gKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3NldChhdG9taWNfdCAqdiwgaW50IGkpCi17Ci0Jdi0+Y291bnRlciA9IGk7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZCAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYyB2YXJpYWJsZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUxLCUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYyB2YXJpYWJsZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJsICUxLCUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucwotICogdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfc3ViX2FuZF90ZXN0KGludCBpLCBhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YmwgJTIsJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYzsKLX0KLQotLyoqCi0gKiBhdG9taWNfaW5jIC0gaW5jcmVtZW50IGF0b21pYyB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luYyhhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTAiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQotCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljX2RlYyAtIGRlY3JlbWVudCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19kZWMoYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNsICUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pY19kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKLSAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKLSAqIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfZGVjX2FuZF90ZXN0KGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMDsgc2V0ZSAlMSIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGMgIT0gMDsKLX0KLQotLyoqCi0gKiBhdG9taWNfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKLSAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIHRydWUKLSAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KLSAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9uZWdhdGl2ZShpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUyLCUwOyBzZXRzICUxIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGM7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZF9yZXR1cm4gLSBhZGQgYW5kIHJldHVybgotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIEBpICsgQHYKLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQotewotCWludCBfX2kgPSBpOwotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAieGFkZGwgJTAsICUxIgotCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gaSArIF9faTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQotewotCXJldHVybiBhdG9taWNfYWRkX3JldHVybigtaSwgdik7Ci19Ci0KLSNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgIChhdG9taWNfYWRkX3JldHVybigxLCB2KSkKLSNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikgIChhdG9taWNfc3ViX3JldHVybigxLCB2KSkKLQotLyogVGhlIDY0LWJpdCBhdG9taWMgdHlwZSAqLwotCi0jZGVmaW5lIEFUT01JQzY0X0lOSVQoaSkJeyAoaSkgfQotCi0vKioKLSAqIGF0b21pYzY0X3JlYWQgLSByZWFkIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KLSAqIERvZXNuJ3QgaW1wbHkgYSByZWFkIG1lbW9yeSBiYXJyaWVyLgotICovCi1zdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfcmVhZChjb25zdCBhdG9taWM2NF90ICp2KQotewotCXJldHVybiB2LT5jb3VudGVyOwotfQotCi0vKioKLSAqIGF0b21pYzY0X3NldCAtIHNldCBhdG9taWM2NCB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKiBAaTogcmVxdWlyZWQgdmFsdWUKLSAqCi0gKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfc2V0KGF0b21pYzY0X3QgKnYsIGxvbmcgaSkKLXsKLQl2LT5jb3VudGVyID0gaTsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWM2NCB2YXJpYWJsZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9hZGQobG9uZyBpLCBhdG9taWM2NF90ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkcSAlMSwlMCIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X3N1Yihsb25nIGksIGF0b21pYzY0X3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJxICUxLCUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJlciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKLSAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfc3ViX2FuZF90ZXN0KGxvbmcgaSwgYXRvbWljNjRfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YnEgJTIsJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYzsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9pbmMgLSBpbmNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfaW5jKGF0b21pYzY0X3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNxICUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pYzY0X2RlYyAtIGRlY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9kZWMoYXRvbWljNjRfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY3EgJTAiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQotCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKLSAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKLSAqIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9kZWNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY3EgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQotICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9pbmNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY3EgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyB0cnVlCi0gKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCi0gKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF9uZWdhdGl2ZShsb25nIGksIGF0b21pYzY0X3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRxICUyLCUwOyBzZXRzICUxIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogImVyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGM7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfYWRkX3JldHVybiAtIGFkZCBhbmQgcmV0dXJuCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyBAaSArIEB2Ci0gKi8KLXN0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKLXsKLQlsb25nIF9faSA9IGk7Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkcSAlMCwgJTE7IgotCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gaSArIF9faTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X3N1Yl9yZXR1cm4obG9uZyBpLCBhdG9taWM2NF90ICp2KQotewotCXJldHVybiBhdG9taWM2NF9hZGRfcmV0dXJuKC1pLCB2KTsKLX0KLQotI2RlZmluZSBhdG9taWM2NF9pbmNfcmV0dXJuKHYpICAoYXRvbWljNjRfYWRkX3JldHVybigxLCAodikpKQotI2RlZmluZSBhdG9taWM2NF9kZWNfcmV0dXJuKHYpICAoYXRvbWljNjRfc3ViX3JldHVybigxLCAodikpKQotCi1zdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICp2LCBsb25nIG9sZCwgbG9uZyBuZXcpCi17Ci0JcmV0dXJuIGNtcHhjaGcoJnYtPmNvdW50ZXIsIG9sZCwgbmV3KTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X3hjaGcoYXRvbWljNjRfdCAqdiwgbG9uZyBuZXcpCi17Ci0JcmV0dXJuIHhjaGcoJnYtPmNvdW50ZXIsIG5ldyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG9sZCwgaW50IG5ldykKLXsKLQlyZXR1cm4gY21weGNoZygmdi0+Y291bnRlciwgb2xkLCBuZXcpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljX3hjaGcoYXRvbWljX3QgKnYsIGludCBuZXcpCi17Ci0JcmV0dXJuIHhjaGcoJnYtPmNvdW50ZXIsIG5ldyk7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KLSAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgotICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCi17Ci0JaW50IGMsIG9sZDsKLQljID0gYXRvbWljX3JlYWQodik7Ci0JZm9yICg7OykgewotCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQotCQkJYnJlYWs7Ci0JCW9sZCA9IGF0b21pY19jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7Ci0JCWlmIChsaWtlbHkob2xkID09IGMpKQotCQkJYnJlYWs7Ci0JCWMgPSBvbGQ7Ci0JfQotCXJldHVybiBjICE9ICh1KTsKLX0KLQotI2RlZmluZSBhdG9taWNfaW5jX25vdF96ZXJvKHYpIGF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKLQotLyoqCi0gKiBhdG9taWM2NF9hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAotICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KLSAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgotICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF91bmxlc3MoYXRvbWljNjRfdCAqdiwgbG9uZyBhLCBsb25nIHUpCi17Ci0JbG9uZyBjLCBvbGQ7Ci0JYyA9IGF0b21pYzY0X3JlYWQodik7Ci0JZm9yICg7OykgewotCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQotCQkJYnJlYWs7Ci0JCW9sZCA9IGF0b21pYzY0X2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKLQkJaWYgKGxpa2VseShvbGQgPT0gYykpCi0JCQlicmVhazsKLQkJYyA9IG9sZDsKLQl9Ci0JcmV0dXJuIGMgIT0gKHUpOwotfQotCi0vKioKLSAqIGF0b21pY19pbmNfc2hvcnQgLSBpbmNyZW1lbnQgb2YgYSBzaG9ydCBpbnRlZ2VyCi0gKiBAdjogcG9pbnRlciB0byB0eXBlIGludAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyAxIHRvIEB2Ci0gKiBSZXR1cm5zIHRoZSBuZXcgdmFsdWUgb2YgQHUKLSAqLwotc3RhdGljIGlubGluZSBzaG9ydCBpbnQgYXRvbWljX2luY19zaG9ydChzaG9ydCBpbnQgKnYpCi17Ci0JYXNtKExPQ0tfUFJFRklYICJhZGR3ICQxLCAlMCIgOiAiK20iICgqdikpOwotCXJldHVybiAqdjsKLX0KLQotLyoqCi0gKiBhdG9taWNfb3JfbG9uZyAtIE9SIG9mIHR3byBsb25nIGludGVnZXJzCi0gKiBAdjE6IHBvaW50ZXIgdG8gdHlwZSB1bnNpZ25lZCBsb25nCi0gKiBAdjI6IHBvaW50ZXIgdG8gdHlwZSB1bnNpZ25lZCBsb25nCi0gKgotICogQXRvbWljYWxseSBPUnMgQHYxIGFuZCBAdjIKLSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgT1IKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19vcl9sb25nKHVuc2lnbmVkIGxvbmcgKnYxLCB1bnNpZ25lZCBsb25nIHYyKQotewotCWFzbShMT0NLX1BSRUZJWCAib3JxICUxLCAlMCIgOiAiK20iICgqdjEpIDogInIiICh2MikpOwotfQotCi0jZGVmaW5lIGF0b21pYzY0X2luY19ub3RfemVybyh2KSBhdG9taWM2NF9hZGRfdW5sZXNzKCh2KSwgMSwgMCkKLQotLyogVGhlc2UgYXJlIHg4Ni1zcGVjaWZpYywgdXNlZCBieSBzb21lIGhlYWRlciBmaWxlcyAqLwotI2RlZmluZSBhdG9taWNfY2xlYXJfbWFzayhtYXNrLCBhZGRyKQkJCQkJXAotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYW5kbCAlMCwlMSIJCQkJXAotCQkgICAgIDogOiAiciIgKH4obWFzaykpLCAibSIgKCooYWRkcikpIDogIm1lbW9yeSIpCi0KLSNkZWZpbmUgYXRvbWljX3NldF9tYXNrKG1hc2ssIGFkZHIpCQkJCQlcCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJvcmwgJTAsJTEiCQkJCVwKLQkJICAgICA6IDogInIiICgodW5zaWduZWQpKG1hc2spKSwgIm0iICgqKGFkZHIpKQkJXAotCQkgICAgIDogIm1lbW9yeSIpCi0KLS8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nIG9uIHg4NiAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLWxvbmcuaD4KLSNlbmRpZiAvKiBfQVNNX1g4Nl9BVE9NSUNfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCmluZGV4IDYzN2UxZWMuLjBjZDgyZDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKQEAgLTE2OCw2ICsxNjgsMTAgQEAKICNkZWZpbmUgWDg2X0ZFQVRVUkVfRkxFWFBSSU9SSVRZICg4KjMyKyAyKSAvKiBJbnRlbCBGbGV4UHJpb3JpdHkgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfRVBUICAgICAgICAgKDgqMzIrIDMpIC8qIEludGVsIEV4dGVuZGVkIFBhZ2UgVGFibGUgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfVlBJRCAgICAgICAgKDgqMzIrIDQpIC8qIEludGVsIFZpcnR1YWwgUHJvY2Vzc29yIElEICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX05QVAkJKDgqMzIrNSkgIC8qIEFNRCBOZXN0ZWQgUGFnZSBUYWJsZSBzdXBwb3J0ICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0xCUlYJKDgqMzIrNikgIC8qIEFNRCBMQlIgVmlydHVhbGl6YXRpb24gc3VwcG9ydCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9TVk1MCSg4KjMyKzcpICAvKiAic3ZtX2xvY2siIEFNRCBTVk0gbG9ja2luZyBNU1IgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTlJJUFMJKDgqMzIrOCkgIC8qICJucmlwX3NhdmUiIEFNRCBTVk0gbmV4dF9yaXAgc2F2ZSAqLwogCiAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RlYnVncmVnLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZWJ1Z3JlZy5oCmluZGV4IDgyNDBmNzYuLmI4MTAwMmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RlYnVncmVnLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVidWdyZWcuaApAQCAtMTQsNiArMTQsOSBAQAogICAgd2hpY2ggZGVidWdnaW5nIHJlZ2lzdGVyIHdhcyByZXNwb25zaWJsZSBmb3IgdGhlIHRyYXAuICBUaGUgb3RoZXIgYml0cwogICAgYXJlIGVpdGhlciByZXNlcnZlZCBvciBub3Qgb2YgaW50ZXJlc3QgdG8gdXMuICovCiAKKy8qIERlZmluZSByZXNlcnZlZCBiaXRzIGluIERSNiB3aGljaCBhcmUgYWx3YXlzIHNldCB0byAxICovCisjZGVmaW5lIERSNl9SRVNFUlZFRAkoMHhGRkZGMEZGMCkKKwogI2RlZmluZSBEUl9UUkFQMAkoMHgxKQkJLyogZGIwICovCiAjZGVmaW5lIERSX1RSQVAxCSgweDIpCQkvKiBkYjEgKi8KICNkZWZpbmUgRFJfVFJBUDIJKDB4NCkJCS8qIGRiMiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCAxOTk0ZDNmLi5mMmFkMjE2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMTcwLDEwICsxNzAsNyBAQAogfQogCiAjZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJCQlcCi1kbyB7CQkJCQkJCVwKLQllbGZfY29tbW9uX2luaXQoJmN1cnJlbnQtPnRocmVhZCwgX3IsIDApOwlcCi0JY2xlYXJfdGhyZWFkX2ZsYWcoVElGX0lBMzIpOwkJCVwKLX0gd2hpbGUgKDApCisJZWxmX2NvbW1vbl9pbml0KCZjdXJyZW50LT50aHJlYWQsIF9yLCAwKQogCiAjZGVmaW5lCUNPTVBBVF9FTEZfUExBVF9JTklUKHJlZ3MsIGxvYWRfYWRkcikJCVwKIAllbGZfY29tbW9uX2luaXQoJmN1cnJlbnQtPnRocmVhZCwgcmVncywgX19VU0VSX0RTKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZmIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZiLmgKaW5kZXggNTMwMTg0Ni4uMjUxOWQwNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZmIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mYi5oCkBAIC0xMiwxMCArMTIsNiBAQAogCQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSB8PSBfUEFHRV9QQ0Q7CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiBleHRlcm4gaW50IGZiX2lzX3ByaW1hcnlfZGV2aWNlKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBmYl9pc19wcmltYXJ5X2RldmljZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykgeyByZXR1cm4gMDsgfQotI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9GQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IDE0Zjk4OTAuLjYzNWYwM2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC0xMTgsMTQgKzExOCwyMCBAQAogCSAqIDI1NiB0ZW1wb3JhcnkgYm9vdC10aW1lIG1hcHBpbmdzLCB1c2VkIGJ5IGVhcmx5X2lvcmVtYXAoKSwKIAkgKiBiZWZvcmUgaW9yZW1hcCgpIGlzIGZ1bmN0aW9uYWwuCiAJICoKLQkgKiBXZSByb3VuZCBpdCB1cCB0byB0aGUgbmV4dCAyNTYgcGFnZXMgYm91bmRhcnkgc28gdGhhdCB3ZQotCSAqIGNhbiBoYXZlIGEgc2luZ2xlIHBnZCBlbnRyeSBhbmQgYSBzaW5nbGUgcHRlIHRhYmxlOgorCSAqIElmIG5lY2Vzc2FyeSB3ZSByb3VuZCBpdCB1cCB0byB0aGUgbmV4dCAyNTYgcGFnZXMgYm91bmRhcnkgc28KKwkgKiB0aGF0IHdlIGNhbiBoYXZlIGEgc2luZ2xlIHBnZCBlbnRyeSBhbmQgYSBzaW5nbGUgcHRlIHRhYmxlOgogCSAqLwogI2RlZmluZSBOUl9GSVhfQlRNQVBTCQk2NAogI2RlZmluZSBGSVhfQlRNQVBTX1NMT1RTCTQKLQlGSVhfQlRNQVBfRU5EID0gX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyArIDI1NiAtCi0JCQkoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyAmIDI1NSksCi0JRklYX0JUTUFQX0JFR0lOID0gRklYX0JUTUFQX0VORCArIE5SX0ZJWF9CVE1BUFMqRklYX0JUTUFQU19TTE9UUyAtIDEsCisjZGVmaW5lIFRPVEFMX0ZJWF9CVE1BUFMJKE5SX0ZJWF9CVE1BUFMgKiBGSVhfQlRNQVBTX1NMT1RTKQorCUZJWF9CVE1BUF9FTkQgPQorCSAoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyBeCisJICAoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyArIFRPVEFMX0ZJWF9CVE1BUFMgLSAxKSkgJgorCSAtUFRSU19QRVJfUFRFCisJID8gX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyArIFRPVEFMX0ZJWF9CVE1BUFMgLQorCSAgIChfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICYgKFRPVEFMX0ZJWF9CVE1BUFMgLSAxKSkKKwkgOiBfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzLAorCUZJWF9CVE1BUF9CRUdJTiA9IEZJWF9CVE1BUF9FTkQgKyBUT1RBTF9GSVhfQlRNQVBTIC0gMSwKICNpZmRlZiBDT05GSUdfUFJPVklERV9PSENJMTM5NF9ETUFfSU5JVAogCUZJWF9PSENJMTM5NF9CQVNFLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmgKaW5kZXggZWJmYjhhOS4uZGEyOTMwOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaTM4Ny5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaApAQCAtMzMsOCArMzMsMTYgQEAKIGV4dGVybiBpbnQgZHVtcF9mcHUoc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgKik7CiAKIGV4dGVybiB1c2VyX3JlZ3NldF9hY3RpdmVfZm4gZnByZWdzX2FjdGl2ZSwgeGZwcmVnc19hY3RpdmU7Ci1leHRlcm4gdXNlcl9yZWdzZXRfZ2V0X2ZuIGZwcmVnc19nZXQsIHhmcHJlZ3NfZ2V0LCBmcHJlZ3Nfc29mdF9nZXQ7Ci1leHRlcm4gdXNlcl9yZWdzZXRfc2V0X2ZuIGZwcmVnc19zZXQsIHhmcHJlZ3Nfc2V0LCBmcHJlZ3Nfc29mdF9zZXQ7CitleHRlcm4gdXNlcl9yZWdzZXRfZ2V0X2ZuIGZwcmVnc19nZXQsIHhmcHJlZ3NfZ2V0LCBmcHJlZ3Nfc29mdF9nZXQsCisJCQkJeHN0YXRlcmVnc19nZXQ7CitleHRlcm4gdXNlcl9yZWdzZXRfc2V0X2ZuIGZwcmVnc19zZXQsIHhmcHJlZ3Nfc2V0LCBmcHJlZ3Nfc29mdF9zZXQsCisJCQkJIHhzdGF0ZXJlZ3Nfc2V0OworCisvKgorICogeHN0YXRlcmVnc19hY3RpdmUgPT0gZnByZWdzX2FjdGl2ZS4gUGxlYXNlIHJlZmVyIHRvIHRoZSBjb21tZW50CisgKiBhdCB0aGUgZGVmaW5pdGlvbiBvZiBmcHJlZ3NfYWN0aXZlLgorICovCisjZGVmaW5lIHhzdGF0ZXJlZ3NfYWN0aXZlCWZwcmVnc19hY3RpdmUKIAogZXh0ZXJuIHN0cnVjdCBfZnB4X3N3X2J5dGVzIGZ4X3N3X3Jlc2VydmVkOwogI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggNzM3MzkzMi4uYTFkY2ZhMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oCkBAIC0xLDggKzEsNDIgQEAKICNpZm5kZWYgX0FTTV9YODZfSU9fSAogI2RlZmluZSBfQVNNX1g4Nl9JT19ICiAKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgeDg2IElPIGluc3RydWN0aW9ucworICogaW5iL2ludy9pbmwvb3V0Yi9vdXR3L291dGwgYW5kIHRoZSAic3RyaW5nIHZlcnNpb25zIiBvZiB0aGUgc2FtZQorICogKGluc2IvaW5zdy9pbnNsL291dHNiL291dHN3L291dHNsKS4gWW91IGNhbiBhbHNvIHVzZSAicGF1c2luZyIKKyAqIHZlcnNpb25zIG9mIHRoZSBzaW5nbGUtSU8gaW5zdHJ1Y3Rpb25zIChpbmJfcC9pbndfcC8uLikuCisgKgorICogVGhpcyBmaWxlIGlzIG5vdCBtZWFudCB0byBiZSBvYmZ1c2NhdGluZzogaXQncyBqdXN0IGNvbXBsaWNhdGVkCisgKiB0byAoYSkgaGFuZGxlIGl0IGFsbCBpbiBhIHdheSB0aGF0IG1ha2VzIGdjYyBhYmxlIHRvIG9wdGltaXplIGl0CisgKiBhcyB3ZWxsIGFzIHBvc3NpYmxlIGFuZCAoYikgdHJ5aW5nIHRvIGF2b2lkIHdyaXRpbmcgdGhlIHNhbWUgdGhpbmcKKyAqIG92ZXIgYW5kIG92ZXIgYWdhaW4gd2l0aCBzbGlnaHQgdmFyaWF0aW9ucyBhbmQgcG9zc2libHkgbWFraW5nIGEKKyAqIG1pc3Rha2Ugc29tZXdoZXJlLgorICovCisKKy8qCisgKiBUaGFua3MgdG8gSmFtZXMgdmFuIEFydHNkYWxlbiBmb3IgYSBiZXR0ZXIgdGltaW5nLWZpeCB0aGFuCisgKiB0aGUgdHdvIHNob3J0IGp1bXBzOiB1c2luZyBvdXRiJ3MgdG8gYSBub25leGlzdGVudCBwb3J0IHNlZW1zCisgKiB0byBndWFyYW50ZWUgYmV0dGVyIHRpbWluZ3MgZXZlbiBvbiBmYXN0IG1hY2hpbmVzLgorICoKKyAqIE9uIHRoZSBvdGhlciBoYW5kLCBJJ2QgbGlrZSB0byBiZSBzdXJlIG9mIGEgbm9uLWV4aXN0ZW50IHBvcnQ6CisgKiBJIGZlZWwgYSBiaXQgdW5zYWZlIGFib3V0IHVzaW5nIDB4ODAgKHNob3VsZCBiZSBzYWZlLCB0aG91Z2gpCisgKgorICoJCUxpbnVzCisgKi8KKworIC8qCisgICogIEJpdCBzaW1wbGlmaWVkIGFuZCBvcHRpbWl6ZWQgYnkgSmFuIEh1Ymlja2EKKyAgKiAgU3VwcG9ydCBvZiBCSUdNRU0gYWRkZWQgYnkgR2VyaGFyZCBXaWNoZXJ0LCBTaWVtZW5zIEFHLCBKdWx5IDE5OTkuCisgICoKKyAgKiAgaXNhX21lbXNldF9pbywgaXNhX21lbWNweV9mcm9taW8sIGlzYV9tZW1jcHlfdG9pbyBhZGRlZCwKKyAgKiAgaXNhX3JlYWRbd2xdIGFuZCBpc2Ffd3JpdGVbd2xdIGZpeGVkCisgICogIC0gQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisgICovCisKICNkZWZpbmUgQVJDSF9IQVNfSU9SRU1BUF9XQwogCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0xNzMsMTEgKzIwNywxMjYgQEAKIGV4dGVybiB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKIAogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJpb18zMi5oIgotI2Vsc2UKLSMgaW5jbHVkZSAiaW9fNjQuaCIKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgorCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgorICovCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgY2hhciB2YWwsIHNpemVfdCBjb3VudCkKK3sKKwltZW1zZXQoKHZvaWQgX19mb3JjZSAqKWFkZHIsIHZhbCwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK21lbWNweV9mcm9taW8odm9pZCAqZHN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywgc2l6ZV90IGNvdW50KQoreworCW1lbWNweShkc3QsIChjb25zdCB2b2lkIF9fZm9yY2UgKilzcmMsIGNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCittZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpCit7CisJbWVtY3B5KCh2b2lkIF9fZm9yY2UgKilkc3QsIHNyYywgY291bnQpOworfQorCisvKgorICogSVNBIHNwYWNlIGlzICdhbHdheXMgbWFwcGVkJyBvbiBhIHR5cGljYWwgeDg2IHN5c3RlbSwgbm8gbmVlZCB0bworICogZXhwbGljaXRseSBpb3JlbWFwKCkgaXQuIFRoZSBmYWN0IHRoYXQgdGhlIElTQSBJTyBzcGFjZSBpcyBtYXBwZWQKKyAqIHRvIFBBR0VfT0ZGU0VUIGlzIHB1cmUgY29pbmNpZGVuY2UgLSBpdCBkb2VzIG5vdCBtZWFuIElTQSB2YWx1ZXMKKyAqIGFyZSBwaHlzaWNhbCBhZGRyZXNzZXMuIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgcG9pbnRlciBjYW4gYmUKKyAqIHVzZWQgYXMgdGhlIElPLWFyZWEgcG9pbnRlciAoaXQgY2FuIGJlIGlvdW5tYXBwZWQgYXMgd2VsbCwgc28gdGhlCisgKiBhbmFsb2d5IHdpdGggUENJIGlzIHF1aXRlIGxhcmdlKToKKyAqLworI2RlZmluZSBfX0lTQV9JT19iYXNlICgoY2hhciBfX2lvbWVtICopKFBBR0VfT0ZGU0VUKSkKKworLyoKKyAqCUNhY2hlIG1hbmFnZW1lbnQKKyAqCisgKglUaGlzIG5lZWRlZCBmb3IgdHdvIGNhc2VzCisgKgkxLiBPdXQgb2Ygb3JkZXIgYXdhcmUgcHJvY2Vzc29ycworICoJMi4gQWNjaWRlbnRhbGx5IG91dCBvZiBvcmRlciBwcm9jZXNzb3JzIChQUHJvIGVycmF0YSAjNTEpCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3dyaXRlX2J1ZmZlcnModm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfT09TVE9SRSkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BQUk9fRkVOQ0UpCisJYXNtIHZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIjogOiA6Im1lbW9yeSIpOwogI2VuZGlmCit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKK2V4dGVybiB2b2lkIG5hdGl2ZV9pb19kZWxheSh2b2lkKTsKKworZXh0ZXJuIGludCBpb19kZWxheV90eXBlOworZXh0ZXJuIHZvaWQgaW9fZGVsYXlfaW5pdCh2b2lkKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1BBUkFWSVJUKQorI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHNsb3dfZG93bl9pbyh2b2lkKQoreworCW5hdGl2ZV9pb19kZWxheSgpOworI2lmZGVmIFJFQUxMWV9TTE9XX0lPCisJbmF0aXZlX2lvX2RlbGF5KCk7CisJbmF0aXZlX2lvX2RlbGF5KCk7CisJbmF0aXZlX2lvX2RlbGF5KCk7CisjZW5kaWYKK30KKworI2VuZGlmCisKKyNkZWZpbmUgQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJCVwKK3sJCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJvdXQiICNid2wgIiAlIiAjYncgIjAsICV3MSIJCQlcCisJCSAgICAgOiA6ICJhIih2YWx1ZSksICJOZCIocG9ydCkpOwkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bChpbnQgcG9ydCkJCQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCB0eXBlIHZhbHVlOwkJCQkJCVwKKwlhc20gdm9sYXRpbGUoImluIiAjYndsICIgJXcxLCAlIiAjYncgIjAiCQkJXAorCQkgICAgIDogIj1hIih2YWx1ZSkgOiAiTmQiKHBvcnQpKTsJCQlcCisJcmV0dXJuIHZhbHVlOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIG91dCMjYndsIyNfcCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJCVwKK3sJCQkJCQkJCQlcCisJb3V0IyNid2wodmFsdWUsIHBvcnQpOwkJCQkJCVwKKwlzbG93X2Rvd25faW8oKTsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsIyNfcChpbnQgcG9ydCkJCQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIHR5cGUgdmFsdWUgPSBpbiMjYndsKHBvcnQpOwkJCQlcCisJc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKKwlyZXR1cm4gdmFsdWU7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0cyMjYndsKGludCBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSBcCit7CQkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSgicmVwOyBvdXRzIiAjYndsCQkJCQlcCisJCSAgICAgOiAiK1MiKGFkZHIpLCAiK2MiKGNvdW50KSA6ICJkIihwb3J0KSk7CQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIGlucyMjYndsKGludCBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQlcCit7CQkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSgicmVwOyBpbnMiICNid2wJCQkJCVwKKwkJICAgICA6ICIrRCIoYWRkciksICIrYyIoY291bnQpIDogImQiKHBvcnQpKTsJCVwKK30KKworQlVJTERJTyhiLCBiLCBjaGFyKQorQlVJTERJTyh3LCB3LCBzaG9ydCkKK0JVSUxESU8obCwgLCBpbnQpCiAKIGV4dGVybiB2b2lkICp4bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMpOwogZXh0ZXJuIHZvaWQgdW54bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMsIHZvaWQgKmFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyOTk5MDAuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0lPXzMyX0gKLSNkZWZpbmUgX0FTTV9YODZfSU9fMzJfSAotCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSB4ODYgSU8gaW5zdHJ1Y3Rpb25zCi0gKiBpbmIvaW53L2lubC9vdXRiL291dHcvb3V0bCBhbmQgdGhlICJzdHJpbmcgdmVyc2lvbnMiIG9mIHRoZSBzYW1lCi0gKiAoaW5zYi9pbnN3L2luc2wvb3V0c2Ivb3V0c3cvb3V0c2wpLiBZb3UgY2FuIGFsc28gdXNlICJwYXVzaW5nIgotICogdmVyc2lvbnMgb2YgdGhlIHNpbmdsZS1JTyBpbnN0cnVjdGlvbnMgKGluYl9wL2lud19wLy4uKS4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbm90IG1lYW50IHRvIGJlIG9iZnVzY2F0aW5nOiBpdCdzIGp1c3QgY29tcGxpY2F0ZWQKLSAqIHRvIChhKSBoYW5kbGUgaXQgYWxsIGluIGEgd2F5IHRoYXQgbWFrZXMgZ2NjIGFibGUgdG8gb3B0aW1pemUgaXQKLSAqIGFzIHdlbGwgYXMgcG9zc2libGUgYW5kIChiKSB0cnlpbmcgdG8gYXZvaWQgd3JpdGluZyB0aGUgc2FtZSB0aGluZwotICogb3ZlciBhbmQgb3ZlciBhZ2FpbiB3aXRoIHNsaWdodCB2YXJpYXRpb25zIGFuZCBwb3NzaWJseSBtYWtpbmcgYQotICogbWlzdGFrZSBzb21ld2hlcmUuCi0gKi8KLQotLyoKLSAqIFRoYW5rcyB0byBKYW1lcyB2YW4gQXJ0c2RhbGVuIGZvciBhIGJldHRlciB0aW1pbmctZml4IHRoYW4KLSAqIHRoZSB0d28gc2hvcnQganVtcHM6IHVzaW5nIG91dGIncyB0byBhIG5vbmV4aXN0ZW50IHBvcnQgc2VlbXMKLSAqIHRvIGd1YXJhbnRlZSBiZXR0ZXIgdGltaW5ncyBldmVuIG9uIGZhc3QgbWFjaGluZXMuCi0gKgotICogT24gdGhlIG90aGVyIGhhbmQsIEknZCBsaWtlIHRvIGJlIHN1cmUgb2YgYSBub24tZXhpc3RlbnQgcG9ydDoKLSAqIEkgZmVlbCBhIGJpdCB1bnNhZmUgYWJvdXQgdXNpbmcgMHg4MCAoc2hvdWxkIGJlIHNhZmUsIHRob3VnaCkKLSAqCi0gKgkJTGludXMKLSAqLwotCi0gLyoKLSAgKiAgQml0IHNpbXBsaWZpZWQgYW5kIG9wdGltaXplZCBieSBKYW4gSHViaWNrYQotICAqICBTdXBwb3J0IG9mIEJJR01FTSBhZGRlZCBieSBHZXJoYXJkIFdpY2hlcnQsIFNpZW1lbnMgQUcsIEp1bHkgMTk5OS4KLSAgKgotICAqICBpc2FfbWVtc2V0X2lvLCBpc2FfbWVtY3B5X2Zyb21pbywgaXNhX21lbWNweV90b2lvIGFkZGVkLAotICAqICBpc2FfcmVhZFt3bF0gYW5kIGlzYV93cml0ZVt3bF0gZml4ZWQKLSAgKiAgLSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KLSAgKi8KLQotI2RlZmluZSBYUVVBRF9QT1JUSU9fQkFTRSAweGZlNDAwMDAwCi0jZGVmaW5lIFhRVUFEX1BPUlRJT19RVUFEIDB4NDAwMDAgIC8qIDI1NmsgcGVyIHF1YWQuICovCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgotCi0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotCi0vKgotICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgotICovCi0jZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgY2hhciB2YWwsIGludCBjb3VudCkKLXsKLQltZW1zZXQoKHZvaWQgX19mb3JjZSAqKWFkZHIsIHZhbCwgY291bnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1lbWNweV9mcm9taW8odm9pZCAqZHN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywgaW50IGNvdW50KQotewotCV9fbWVtY3B5KGRzdCwgKGNvbnN0IHZvaWQgX19mb3JjZSAqKXNyYywgY291bnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZHN0LCBjb25zdCB2b2lkICpzcmMsIGludCBjb3VudCkKLXsKLQlfX21lbWNweSgodm9pZCBfX2ZvcmNlICopZHN0LCBzcmMsIGNvdW50KTsKLX0KLQotLyoKLSAqIElTQSBzcGFjZSBpcyAnYWx3YXlzIG1hcHBlZCcgb24gYSB0eXBpY2FsIHg4NiBzeXN0ZW0sIG5vIG5lZWQgdG8KLSAqIGV4cGxpY2l0bHkgaW9yZW1hcCgpIGl0LiBUaGUgZmFjdCB0aGF0IHRoZSBJU0EgSU8gc3BhY2UgaXMgbWFwcGVkCi0gKiB0byBQQUdFX09GRlNFVCBpcyBwdXJlIGNvaW5jaWRlbmNlIC0gaXQgZG9lcyBub3QgbWVhbiBJU0EgdmFsdWVzCi0gKiBhcmUgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHBvaW50ZXIgY2FuIGJlCi0gKiB1c2VkIGFzIHRoZSBJTy1hcmVhIHBvaW50ZXIgKGl0IGNhbiBiZSBpb3VubWFwcGVkIGFzIHdlbGwsIHNvIHRoZQotICogYW5hbG9neSB3aXRoIFBDSSBpcyBxdWl0ZSBsYXJnZSk6Ci0gKi8KLSNkZWZpbmUgX19JU0FfSU9fYmFzZSAoKGNoYXIgX19pb21lbSAqKShQQUdFX09GRlNFVCkpCi0KLS8qCi0gKglDYWNoZSBtYW5hZ2VtZW50Ci0gKgotICoJVGhpcyBuZWVkZWQgZm9yIHR3byBjYXNlcwotICoJMS4gT3V0IG9mIG9yZGVyIGF3YXJlIHByb2Nlc3NvcnMKLSAqCTIuIEFjY2lkZW50YWxseSBvdXQgb2Ygb3JkZXIgcHJvY2Vzc29ycyAoUFBybyBlcnJhdGEgIzUxKQotICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfT09TVE9SRSkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BQUk9fRkVOQ0UpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF93cml0ZV9idWZmZXJzKHZvaWQpCi17Ci0JYXNtIHZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIjogOiA6Im1lbW9yeSIpOwotfQotCi0jZWxzZQotCi0jZGVmaW5lIGZsdXNoX3dyaXRlX2J1ZmZlcnMoKSBkbyB7IH0gd2hpbGUgKDApCi0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi1leHRlcm4gdm9pZCBuYXRpdmVfaW9fZGVsYXkodm9pZCk7Ci0KLWV4dGVybiBpbnQgaW9fZGVsYXlfdHlwZTsKLWV4dGVybiB2b2lkIGlvX2RlbGF5X2luaXQodm9pZCk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19QQVJBVklSVCkKLSNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbG93X2Rvd25faW8odm9pZCkKLXsKLQluYXRpdmVfaW9fZGVsYXkoKTsKLSNpZmRlZiBSRUFMTFlfU0xPV19JTwotCW5hdGl2ZV9pb19kZWxheSgpOwotCW5hdGl2ZV9pb19kZWxheSgpOwotCW5hdGl2ZV9pb19kZWxheSgpOwotI2VuZGlmCi19Ci0KLSNlbmRpZgotCi0jZGVmaW5lIF9fQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCVwKLXsJCQkJCQkJCVwKLQlvdXQjI2J3bCMjX2xvY2FsKHZhbHVlLCBwb3J0KTsJCQkJXAotfQkJCQkJCQkJXAotCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bChpbnQgcG9ydCkJCQlcCi17CQkJCQkJCQlcCi0JcmV0dXJuIGluIyNid2wjI19sb2NhbChwb3J0KTsJCQkJXAotfQotCi0jZGVmaW5lIEJVSUxESU8oYndsLCBidywgdHlwZSkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wjI19sb2NhbCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoIm91dCIgI2J3bCAiICUiICNidyAiMCwgJXcxIgkJXAotCQkgICAgIDogOiAiYSIodmFsdWUpLCAiTmQiKHBvcnQpKTsJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB1bnNpZ25lZCB0eXBlIGluIyNid2wjI19sb2NhbChpbnQgcG9ydCkJCQlcCi17CQkJCQkJCQkJXAotCXVuc2lnbmVkIHR5cGUgdmFsdWU7CQkJCQkJXAotCWFzbSB2b2xhdGlsZSgiaW4iICNid2wgIiAldzEsICUiICNidyAiMCIJCVwKLQkJICAgICA6ICI9YSIodmFsdWUpIDogIk5kIihwb3J0KSk7CQkJXAotCXJldHVybiB2YWx1ZTsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX2xvY2FsX3AodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCVwKLXsJCQkJCQkJCQlcCi0Jb3V0IyNid2wjI19sb2NhbCh2YWx1ZSwgcG9ydCk7CQkJCQlcCi0Jc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX2xvY2FsX3AoaW50IHBvcnQpCQkJXAotewkJCQkJCQkJCVwKLQl1bnNpZ25lZCB0eXBlIHZhbHVlID0gaW4jI2J3bCMjX2xvY2FsKHBvcnQpOwkJCVwKLQlzbG93X2Rvd25faW8oKTsJCQkJCQkJXAotCXJldHVybiB2YWx1ZTsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLV9fQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX3AodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCQlcCi17CQkJCQkJCQkJXAotCW91dCMjYndsKHZhbHVlLCBwb3J0KTsJCQkJCQlcCi0Jc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX3AoaW50IHBvcnQpCQkJXAotewkJCQkJCQkJCVwKLQl1bnNpZ25lZCB0eXBlIHZhbHVlID0gaW4jI2J3bChwb3J0KTsJCQkJXAotCXNsb3dfZG93bl9pbygpOwkJCQkJCQlcCi0JcmV0dXJuIHZhbHVlOwkJCQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIG91dHMjI2J3bChpbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoInJlcDsgb3V0cyIgI2J3bAkJCQkJXAotCQkgICAgIDogIitTIihhZGRyKSwgIitjIihjb3VudCkgOiAiZCIocG9ydCkpOwkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnMjI2J3bChpbnQgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoInJlcDsgaW5zIiAjYndsCQkJCQlcCi0JCSAgICAgOiAiK0QiKGFkZHIpLCAiK2MiKGNvdW50KSA6ICJkIihwb3J0KSk7CQlcCi19Ci0KLUJVSUxESU8oYiwgYiwgY2hhcikKLUJVSUxESU8odywgdywgc2hvcnQpCi1CVUlMRElPKGwsICwgaW50KQotCi0jZW5kaWYgLyogX0FTTV9YODZfSU9fMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NDA2NzguLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0lPXzY0X0gKLSNkZWZpbmUgX0FTTV9YODZfSU9fNjRfSAotCi0KLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgeDg2IElPIGluc3RydWN0aW9ucwotICogaW5iL2ludy9pbmwvb3V0Yi9vdXR3L291dGwgYW5kIHRoZSAic3RyaW5nIHZlcnNpb25zIiBvZiB0aGUgc2FtZQotICogKGluc2IvaW5zdy9pbnNsL291dHNiL291dHN3L291dHNsKS4gWW91IGNhbiBhbHNvIHVzZSAicGF1c2luZyIKLSAqIHZlcnNpb25zIG9mIHRoZSBzaW5nbGUtSU8gaW5zdHJ1Y3Rpb25zIChpbmJfcC9pbndfcC8uLikuCi0gKgotICogVGhpcyBmaWxlIGlzIG5vdCBtZWFudCB0byBiZSBvYmZ1c2NhdGluZzogaXQncyBqdXN0IGNvbXBsaWNhdGVkCi0gKiB0byAoYSkgaGFuZGxlIGl0IGFsbCBpbiBhIHdheSB0aGF0IG1ha2VzIGdjYyBhYmxlIHRvIG9wdGltaXplIGl0Ci0gKiBhcyB3ZWxsIGFzIHBvc3NpYmxlIGFuZCAoYikgdHJ5aW5nIHRvIGF2b2lkIHdyaXRpbmcgdGhlIHNhbWUgdGhpbmcKLSAqIG92ZXIgYW5kIG92ZXIgYWdhaW4gd2l0aCBzbGlnaHQgdmFyaWF0aW9ucyBhbmQgcG9zc2libHkgbWFraW5nIGEKLSAqIG1pc3Rha2Ugc29tZXdoZXJlLgotICovCi0KLS8qCi0gKiBUaGFua3MgdG8gSmFtZXMgdmFuIEFydHNkYWxlbiBmb3IgYSBiZXR0ZXIgdGltaW5nLWZpeCB0aGFuCi0gKiB0aGUgdHdvIHNob3J0IGp1bXBzOiB1c2luZyBvdXRiJ3MgdG8gYSBub25leGlzdGVudCBwb3J0IHNlZW1zCi0gKiB0byBndWFyYW50ZWUgYmV0dGVyIHRpbWluZ3MgZXZlbiBvbiBmYXN0IG1hY2hpbmVzLgotICoKLSAqIE9uIHRoZSBvdGhlciBoYW5kLCBJJ2QgbGlrZSB0byBiZSBzdXJlIG9mIGEgbm9uLWV4aXN0ZW50IHBvcnQ6Ci0gKiBJIGZlZWwgYSBiaXQgdW5zYWZlIGFib3V0IHVzaW5nIDB4ODAgKHNob3VsZCBiZSBzYWZlLCB0aG91Z2gpCi0gKgotICoJCUxpbnVzCi0gKi8KLQotIC8qCi0gICogIEJpdCBzaW1wbGlmaWVkIGFuZCBvcHRpbWl6ZWQgYnkgSmFuIEh1Ymlja2EKLSAgKiAgU3VwcG9ydCBvZiBCSUdNRU0gYWRkZWQgYnkgR2VyaGFyZCBXaWNoZXJ0LCBTaWVtZW5zIEFHLCBKdWx5IDE5OTkuCi0gICoKLSAgKiAgaXNhX21lbXNldF9pbywgaXNhX21lbWNweV9mcm9taW8sIGlzYV9tZW1jcHlfdG9pbyBhZGRlZCwKLSAgKiAgaXNhX3JlYWRbd2xdIGFuZCBpc2Ffd3JpdGVbd2xdIGZpeGVkCi0gICogIC0gQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+Ci0gICovCi0KLWV4dGVybiB2b2lkIG5hdGl2ZV9pb19kZWxheSh2b2lkKTsKLQotZXh0ZXJuIGludCBpb19kZWxheV90eXBlOwotZXh0ZXJuIHZvaWQgaW9fZGVsYXlfaW5pdCh2b2lkKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1BBUkFWSVJUKQotI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIHNsb3dfZG93bl9pbyh2b2lkKQotewotCW5hdGl2ZV9pb19kZWxheSgpOwotI2lmZGVmIFJFQUxMWV9TTE9XX0lPCi0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi0vKgotICogVGFsayBhYm91dCBtaXN1c2luZyBtYWNyb3MuLgotICovCi0jZGVmaW5lIF9fT1VUMShzLCB4KQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNzKHVuc2lnbmVkIHggdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsKLQotI2RlZmluZSBfX09VVDIocywgczEsIHMyKQkJCQlcCi1hc20gdm9sYXRpbGUgKCJvdXQiICNzICIgJSIgczEgIjAsJSIgczIgIjEiCi0KLSNpZm5kZWYgUkVBTExZX1NMT1dfSU8KLSNkZWZpbmUgUkVBTExZX1NMT1dfSU8KLSNkZWZpbmUgVU5TRVRfUkVBTExZX1NMT1dfSU8KLSNlbmRpZgotCi0jZGVmaW5lIF9fT1VUKHMsIHMxLCB4KQkJCQkJCQlcCi0JX19PVVQxKHMsIHgpIF9fT1VUMihzLCBzMSwgInciKSA6IDogImEiICh2YWx1ZSksICJOZCIgKHBvcnQpKTsJXAotCX0JCQkJCQkJCVwKLQlfX09VVDEocyMjX3AsIHgpIF9fT1VUMihzLCBzMSwgInciKSA6IDogImEiICh2YWx1ZSksICJOZCIgKHBvcnQpKTsgXAotCXNsb3dfZG93bl9pbygpOwkJCQkJCQlcCi19Ci0KLSNkZWZpbmUgX19JTjEocykJCQkJCQkJXAotc3RhdGljIGlubGluZSBSRVRVUk5fVFlQRSBpbiMjcyh1bnNpZ25lZCBzaG9ydCBwb3J0KQkJCVwKLXsJCQkJCQkJCQlcCi0JUkVUVVJOX1RZUEUgX3Y7Ci0KLSNkZWZpbmUgX19JTjIocywgczEsIHMyKQkJCQkJCVwKLQlhc20gdm9sYXRpbGUgKCJpbiIgI3MgIiAlIiBzMiAiMSwlIiBzMSAiMCIKLQotI2RlZmluZSBfX0lOKHMsIHMxLCBpLi4uKQkJCQkJCVwKLQlfX0lOMShzKSBfX0lOMihzLCBzMSwgInciKSA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpLCAjI2kpOwlcCi0JcmV0dXJuIF92OwkJCQkJCQlcCi0JfQkJCQkJCQkJXAotCV9fSU4xKHMjI19wKSBfX0lOMihzLCBzMSwgInciKSA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpLCAjI2kpOwlcCi0Jc2xvd19kb3duX2lvKCk7IFwKLQlyZXR1cm4gX3Y7IH0KLQotI2lmZGVmIFVOU0VUX1JFQUxMWV9TTE9XX0lPCi0jdW5kZWYgUkVBTExZX1NMT1dfSU8KLSNlbmRpZgotCi0jZGVmaW5lIF9fSU5TKHMpCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnMjI3ModW5zaWduZWQgc2hvcnQgcG9ydCwgdm9pZCAqYWRkciwJCVwKLQkJCSAgdW5zaWduZWQgbG9uZyBjb3VudCkJCQkJXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUgKCJyZXAgOyBpbnMiICNzCQkJCQlcCi0JCSAgICAgIDogIj1EIiAoYWRkciksICI9YyIgKGNvdW50KQkJCVwKLQkJICAgICAgOiAiZCIgKHBvcnQpLCAiMCIgKGFkZHIpLCAiMSIgKGNvdW50KSk7CQlcCi19Ci0KLSNkZWZpbmUgX19PVVRTKHMpCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRzIyNzKHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsCVwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQpCQkJCVwKLXsJCQkJCQkJCQlcCi0JYXNtIHZvbGF0aWxlICgicmVwIDsgb3V0cyIgI3MJCQkJCVwKLQkJICAgICAgOiAiPVMiIChhZGRyKSwgIj1jIiAoY291bnQpCQkJXAotCQkgICAgICA6ICJkIiAocG9ydCksICIwIiAoYWRkciksICIxIiAoY291bnQpKTsJCVwKLX0KLQotI2RlZmluZSBSRVRVUk5fVFlQRSB1bnNpZ25lZCBjaGFyCi1fX0lOKGIsICIiKQotI3VuZGVmIFJFVFVSTl9UWVBFCi0jZGVmaW5lIFJFVFVSTl9UWVBFIHVuc2lnbmVkIHNob3J0Ci1fX0lOKHcsICIiKQotI3VuZGVmIFJFVFVSTl9UWVBFCi0jZGVmaW5lIFJFVFVSTl9UWVBFIHVuc2lnbmVkIGludAotX19JTihsLCAiIikKLSN1bmRlZiBSRVRVUk5fVFlQRQotCi1fX09VVChiLCAiYiIsIGNoYXIpCi1fX09VVCh3LCAidyIsIHNob3J0KQotX19PVVQobCwgLCBpbnQpCi0KLV9fSU5TKGIpCi1fX0lOUyh3KQotX19JTlMobCkKLQotX19PVVRTKGIpCi1fX09VVFModykKLV9fT1VUUyhsKQotCi0jaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pCi0KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgotCi12b2lkIF9fbWVtY3B5X2Zyb21pbyh2b2lkICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkKTsKLXZvaWQgX19tZW1jcHlfdG9pbyh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICosIHVuc2lnbmVkKTsKLQotc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mcm9taW8odm9pZCAqdG8sIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwKLQkJCQkgdW5zaWduZWQgbGVuKQotewotCV9fbWVtY3B5X2Zyb21pbyh0bywgKHVuc2lnbmVkIGxvbmcpZnJvbSwgbGVuKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqdG8sIGNvbnN0IHZvaWQgKmZyb20sCi0JCQkgICAgICAgdW5zaWduZWQgbGVuKQotewotCV9fbWVtY3B5X3RvaW8oKHVuc2lnbmVkIGxvbmcpdG8sIGZyb20sIGxlbik7Ci19Ci0KLXZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYSwgaW50IGIsIHNpemVfdCBjKTsKLQotLyoKLSAqIElTQSBzcGFjZSBpcyAnYWx3YXlzIG1hcHBlZCcgb24gYSB0eXBpY2FsIHg4NiBzeXN0ZW0sIG5vIG5lZWQgdG8KLSAqIGV4cGxpY2l0bHkgaW9yZW1hcCgpIGl0LiBUaGUgZmFjdCB0aGF0IHRoZSBJU0EgSU8gc3BhY2UgaXMgbWFwcGVkCi0gKiB0byBQQUdFX09GRlNFVCBpcyBwdXJlIGNvaW5jaWRlbmNlIC0gaXQgZG9lcyBub3QgbWVhbiBJU0EgdmFsdWVzCi0gKiBhcmUgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHBvaW50ZXIgY2FuIGJlCi0gKiB1c2VkIGFzIHRoZSBJTy1hcmVhIHBvaW50ZXIgKGl0IGNhbiBiZSBpb3VubWFwcGVkIGFzIHdlbGwsIHNvIHRoZQotICogYW5hbG9neSB3aXRoIFBDSSBpcyBxdWl0ZSBsYXJnZSk6Ci0gKi8KLSNkZWZpbmUgX19JU0FfSU9fYmFzZSAoKGNoYXIgX19pb21lbSAqKShQQUdFX09GRlNFVCkpCi0KLSNkZWZpbmUgZmx1c2hfd3JpdGVfYnVmZmVycygpCi0KLS8qCi0gKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCi0gKi8KLSNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIF9BU01fWDg2X0lPXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzY0LmgKaW5kZXggYTI5ZjQ4Yy4uMjg4Yjk2ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzY0LmgKQEAgLTM5LDExICszOSw1IEBACiAjZGVmaW5lIG5vZGVfc3RhcnRfcGZuKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbikKICNkZWZpbmUgbm9kZV9lbmRfcGZuKG5pZCkgICAgICAgKE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbiArCVwKIAkJCQkgTk9ERV9EQVRBKG5pZCktPm5vZGVfc3Bhbm5lZF9wYWdlcykKLQotI2lmZGVmIENPTkZJR19OVU1BX0VNVQotI2RlZmluZSBGQUtFX05PREVfTUlOX1NJWkUJKDY0ICogMTAyNCAqIDEwMjQpCi0jZGVmaW5lIEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLCSh+KEZBS0VfTk9ERV9NSU5fU0laRSAtIDFVTCkpCi0jZW5kaWYKLQogI2VuZGlmCiAjZW5kaWYgLyogX0FTTV9YODZfTU1aT05FXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL25taS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKaW5kZXggMTM5ZDRjMS4uOTNkYTljMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKQEAgLTE5LDcgKzE5LDYgQEAKIGV4dGVybiBpbnQgY2hlY2tfbm1pX3dhdGNoZG9nKHZvaWQpOwogZXh0ZXJuIGludCBubWlfd2F0Y2hkb2dfZW5hYmxlZDsKIGV4dGVybiBpbnQgYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWlfYml0KHVuc2lnbmVkIGludCk7Ci1leHRlcm4gaW50IGF2YWlsX3RvX3Jlc3J2X3BlcmZjdHJfbm1pKHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IHJlc2VydmVfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIHJlbGVhc2VfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgcmVzZXJ2ZV9ldm50c2VsX25taSh1bnNpZ25lZCBpbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV82NC5oCmluZGV4IGM0YWU4MjIuLjgyM2UwNzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzY0LmgKQEAgLTM2LDYgKzM2LDExIEBACiBleHRlcm4gdm9pZCBfX2NwdWluaXQgbnVtYV9jbGVhcl9ub2RlKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgX19jcHVpbml0IG51bWFfYWRkX2NwdShpbnQgY3B1KTsKIGV4dGVybiB2b2lkIF9fY3B1aW5pdCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSk7CisKKyNpZmRlZiBDT05GSUdfTlVNQV9FTVUKKyNkZWZpbmUgRkFLRV9OT0RFX01JTl9TSVpFCSgodTY0KTY0IDw8IDIwKQorI2RlZmluZSBGQUtFX05PREVfTUlOX0hBU0hfTUFTSwkofihGQUtFX05PREVfTUlOX1NJWkUgLSAxVUwpKQorI2VuZGlmIC8qIENPTkZJR19OVU1BX0VNVSAqLwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2NwdV90b19ub2RlKHZvaWQpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1hX3NldF9ub2RlKGludCBjcHUsIGludCBub2RlKQl7IH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS5oCmluZGV4IDlmMGE1ZjUuLjEzMzcwYjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEuaApAQCAtMzMsNiArMzMsMTAgQEAKIAogZXh0ZXJuIHZvaWQgKnhxdWFkX3BvcnRpbzsKIAorI2RlZmluZSBYUVVBRF9QT1JUSU9fQkFTRSAweGZlNDAwMDAwCisjZGVmaW5lIFhRVUFEX1BPUlRJT19RVUFEIDB4NDAwMDAgIC8qIDI1NmsgcGVyIHF1YWQuICovCisjZGVmaW5lIFhRVUFEX1BPUlRfQUREUihwb3J0LCBxdWFkKSAoeHF1YWRfcG9ydGlvICsgKFhRVUFEX1BPUlRJT19RVUFEKnF1YWQpICsgcG9ydCkKKwogLyoKICAqIFNZU19DRkdfREFUQV9QUklWX0FERFIsIHN0cnVjdCBlYWNocXVhZG1lbSwgYW5kIHN0cnVjdCBzeXNfY2ZnX2RhdGEgYXJlIHRoZQogICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmgKaW5kZXggNjQyZmUzNC4uYTY2N2YyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaApAQCAtNDAsNyArNDAsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi1leHRlcm4gaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKTsKIGV4dGVybiBpbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbG93X3Bmbl9tYXBwZWQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmgKaW5kZXggYjRiZjlhOS4uMDViNThjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpX3g4Ni5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV94ODYuaApAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBQQ0lfQ0hFQ0tfRU5BQkxFX0FNRF9NTUNPTkYJMHgyMDAwMAogI2RlZmluZSBQQ0lfSEFTX0lPX0VDUwkJMHg0MDAwMAogI2RlZmluZSBQQ0lfTk9BU1NJR05fUk9NUwkweDgwMDAwCisjZGVmaW5lIFBDSV9ST09UX05PX0NSUwkJMHgxMDAwMDAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBwY2lfcHJvYmU7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBwaXJxX3RhYmxlX2FkZHI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggMTM4MDM2Ny4uYmVmZDE3MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtMjcsNyArMjcsMTQgQEAKIC8qCiAgKiBJbmNsdWRlcyBldmVudHNlbCBhbmQgdW5pdCBtYXNrIGFzIHdlbGw6CiAgKi8KLSNkZWZpbmUgQVJDSF9QRVJGTU9OX0VWRU5UX01BU0sJCQkJICAgIDB4ZmZmZgorCisKKyNkZWZpbmUgSU5URUxfQVJDSF9FVlRTRUxfTUFTSwkJMHgwMDAwMDBGRlVMTAorI2RlZmluZSBJTlRFTF9BUkNIX1VOSVRfTUFTSwkJMHgwMDAwRkYwMFVMTAorI2RlZmluZSBJTlRFTF9BUkNIX0VER0VfTUFTSwkJMHgwMDA0MDAwMFVMTAorI2RlZmluZSBJTlRFTF9BUkNIX0lOVl9NQVNLCQkweDAwODAwMDAwVUxMCisjZGVmaW5lIElOVEVMX0FSQ0hfQ05UX01BU0sJCTB4RkYwMDAwMDBVTEwKKyNkZWZpbmUgSU5URUxfQVJDSF9FVkVOVF9NQVNLCShJTlRFTF9BUkNIX1VOSVRfTUFTS3xJTlRFTF9BUkNIX0VWVFNFTF9NQVNLKQogCiAvKgogICogZmlsdGVyIG1hc2sgdG8gdmFsaWRhdGUgZml4ZWQgY291bnRlciBldmVudHMuCkBAIC0zOCw3ICs0NSwxMiBAQAogICogIFRoZSBvdGhlciBmaWx0ZXJzIGFyZSBzdXBwb3J0ZWQgYnkgZml4ZWQgY291bnRlcnMuCiAgKiAgVGhlIGFueS10aHJlYWQgb3B0aW9uIGlzIHN1cHBvcnRlZCBzdGFydGluZyB3aXRoIHYzLgogICovCi0jZGVmaW5lIEFSQ0hfUEVSRk1PTl9FVkVOVF9GSUxURVJfTUFTSwkJCTB4ZmY4NDAwMDAKKyNkZWZpbmUgSU5URUxfQVJDSF9GSVhFRF9NQVNLIFwKKwkoSU5URUxfQVJDSF9DTlRfTUFTS3wgXAorCSBJTlRFTF9BUkNIX0lOVl9NQVNLfCBcCisJIElOVEVMX0FSQ0hfRURHRV9NQVNLfFwKKwkgSU5URUxfQVJDSF9VTklUX01BU0t8XAorCSBJTlRFTF9BUkNIX0VWVFNFTF9NQVNLKQogCiAjZGVmaW5lIEFSQ0hfUEVSRk1PTl9VTkhBTFRFRF9DT1JFX0NZQ0xFU19TRUwJCSAgICAgIDB4M2MKICNkZWZpbmUgQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX1VNQVNLCQkoMHgwMCA8PCA4KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDBlOGMyYTAuLjI3MWRlOTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTIzLDYgKzIzLDExIEBACiAjZW5kaWYKIAogLyoKKyAqIEZsYWdzIHRvIHVzZSB3aGVuIGFsbG9jYXRpbmcgYSB1c2VyIHBhZ2UgdGFibGUgcGFnZS4KKyAqLworZXh0ZXJuIGdmcF90IF9fdXNlcnB0ZV9hbGxvY19nZnA7CisKKy8qCiAgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4KICAqLwogZXh0ZXJuIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAppbmRleCAwMWZkOTQ2Li5hMjg2NjgzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCkBAIC04MCw3ICs4MCw3IEBACiAgKiBUaGUgaTM4NiBkb2Vzbid0IGhhdmUgYW55IGV4dGVybmFsIE1NVSBpbmZvOiB0aGUga2VybmVsIHBhZ2UKICAqIHRhYmxlcyBjb250YWluIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLgogICovCi0jZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGUpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZXApIGRvIHsgfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCmluZGV4IGM1N2EzMDEuLjE4MWJlNTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKQEAgLTEyOSw3ICsxMjksNyBAQAogI2RlZmluZSBwdGVfdW5tYXAocHRlKSAvKiBOT1AgKi8KICNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpIC8qIE5PUCAqLwogCi0jZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGUpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZXApIGRvIHsgfSB3aGlsZSAoMCkKIAogLyogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAqLwogI2lmIF9QQUdFX0JJVF9GSUxFIDwgX1BBR0VfQklUX1BST1ROT05FCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGZjODAxYmEuLmI3NTNlYTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC00NTAsNiArNDUwLDggQEAKIAlzdHJ1Y3QgcGVyZl9ldmVudAkqcHRyYWNlX2Jwc1tIQlBfTlVNXTsKIAkvKiBEZWJ1ZyBzdGF0dXMgdXNlZCBmb3IgdHJhcHMsIHNpbmdsZSBzdGVwcywgZXRjLi4uICovCiAJdW5zaWduZWQgbG9uZyAgICAgICAgICAgZGVidWdyZWc2OworCS8qIEtlZXAgdHJhY2sgb2YgdGhlIGV4YWN0IGRyNyB2YWx1ZSBzZXQgYnkgdGhlIHVzZXIgKi8KKwl1bnNpZ25lZCBsb25nICAgICAgICAgICBwdHJhY2VfZHI3OwogCS8qIEZhdWx0IGluZm86ICovCiAJdW5zaWduZWQgbG9uZwkJY3IyOwogCXVuc2lnbmVkIGxvbmcJCXRyYXBfbm87CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDlkMzY5ZjYuLjIwMTAyODAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0yNzQsMTAgKzI3NCw2IEBACiAJCXJldHVybiAwOwogfQogCi0vKiBHZXQgTnRoIGFyZ3VtZW50IGF0IGZ1bmN0aW9uIGNhbGwgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIHJlZ3NfZ2V0X2FyZ3VtZW50X250aChzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCQkJICAgdW5zaWduZWQgaW50IG4pOwotCiAvKgogICogVGhlc2UgYXJlIGRlZmluZWQgYXMgcGVyIGxpbnV4L3B0cmFjZS5oLCB3aGljaCBzZWUuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3J3c2VtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yd3NlbS5oCmluZGV4IGNhNzUxN2QuLjYwNmVkZTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3J3c2VtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcndzZW0uaApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KKyNpbmNsdWRlIDxhc20vYXNtLmg+CiAKIHN0cnVjdCByd3NlbV93YWl0ZXI7CiAKQEAgLTU1LDE3ICs1NiwyOCBAQAogCiAvKgogICogdGhlIHNlbWFwaG9yZSBkZWZpbml0aW9uCisgKgorICogVGhlIGJpYXMgdmFsdWVzIGFuZCB0aGUgY291bnRlciB0eXBlIGxpbWl0cyB0aGUgbnVtYmVyIG9mCisgKiBwb3RlbnRpYWwgcmVhZGVycy93cml0ZXJzIHRvIDMyNzY3IGZvciAzMiBiaXRzIGFuZCAyMTQ3NDgzNjQ3CisgKiBmb3IgNjQgYml0cy4KICAqLwogCi0jZGVmaW5lIFJXU0VNX1VOTE9DS0VEX1ZBTFVFCQkweDAwMDAwMDAwCi0jZGVmaW5lIFJXU0VNX0FDVElWRV9CSUFTCQkweDAwMDAwMDAxCi0jZGVmaW5lIFJXU0VNX0FDVElWRV9NQVNLCQkweDAwMDBmZmZmCi0jZGVmaW5lIFJXU0VNX1dBSVRJTkdfQklBUwkJKC0weDAwMDEwMDAwKQorI2lmZGVmIENPTkZJR19YODZfNjQKKyMgZGVmaW5lIFJXU0VNX0FDVElWRV9NQVNLCQkweGZmZmZmZmZmTAorI2Vsc2UKKyMgZGVmaW5lIFJXU0VNX0FDVElWRV9NQVNLCQkweDAwMDBmZmZmTAorI2VuZGlmCisKKyNkZWZpbmUgUldTRU1fVU5MT0NLRURfVkFMVUUJCTB4MDAwMDAwMDBMCisjZGVmaW5lIFJXU0VNX0FDVElWRV9CSUFTCQkweDAwMDAwMDAxTAorI2RlZmluZSBSV1NFTV9XQUlUSU5HX0JJQVMJCSgtUldTRU1fQUNUSVZFX01BU0stMSkKICNkZWZpbmUgUldTRU1fQUNUSVZFX1JFQURfQklBUwkJUldTRU1fQUNUSVZFX0JJQVMKICNkZWZpbmUgUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMJCShSV1NFTV9XQUlUSU5HX0JJQVMgKyBSV1NFTV9BQ1RJVkVfQklBUykKIAordHlwZWRlZiBzaWduZWQgbG9uZyByd3NlbV9jb3VudF90OworCiBzdHJ1Y3Qgcndfc2VtYXBob3JlIHsKLQlzaWduZWQgbG9uZwkJY291bnQ7CisJcndzZW1fY291bnRfdAkJY291bnQ7CiAJc3BpbmxvY2tfdAkJd2FpdF9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJd2FpdF9saXN0OwogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCkBAIC0xMDUsNyArMTE3LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7CiAJYXNtIHZvbGF0aWxlKCIjIGJlZ2lubmluZyBkb3duX3JlYWRcblx0IgotCQkgICAgIExPQ0tfUFJFRklYICIgIGluY2wgICAgICAoJSVlYXgpXG5cdCIKKwkJICAgICBMT0NLX1BSRUZJWCBfQVNNX0lOQyAiKCUxKVxuXHQiCiAJCSAgICAgLyogYWRkcyAweDAwMDAwMDAxLCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgKi8KIAkJICAgICAiICBqbnMgICAgICAgIDFmXG4iCiAJCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX2Rvd25fcmVhZF9mYWlsZWRcbiIKQEAgLTEyMSwxNCArMTMzLDE0IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IF9fZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewotCV9fczMyIHJlc3VsdCwgdG1wOworCXJ3c2VtX2NvdW50X3QgcmVzdWx0LCB0bXA7CiAJYXNtIHZvbGF0aWxlKCIjIGJlZ2lubmluZyBfX2Rvd25fcmVhZF90cnlsb2NrXG5cdCIKLQkJICAgICAiICBtb3ZsICAgICAgJTAsJTFcblx0IgorCQkgICAgICIgIG1vdiAgICAgICAgICAlMCwlMVxuXHQiCiAJCSAgICAgIjE6XG5cdCIKLQkJICAgICAiICBtb3ZsCSAgICAgJTEsJTJcblx0IgotCQkgICAgICIgIGFkZGwgICAgICAlMywlMlxuXHQiCisJCSAgICAgIiAgbW92ICAgICAgICAgICUxLCUyXG5cdCIKKwkJICAgICAiICBhZGQgICAgICAgICAgJTMsJTJcblx0IgogCQkgICAgICIgIGpsZQkgICAgIDJmXG5cdCIKLQkJICAgICBMT0NLX1BSRUZJWCAiICBjbXB4Y2hnbCAgJTIsJTBcblx0IgorCQkgICAgIExPQ0tfUFJFRklYICIgIGNtcHhjaGcgICUyLCUwXG5cdCIKIAkJICAgICAiICBqbnoJICAgICAxYlxuXHQiCiAJCSAgICAgIjI6XG5cdCIKIAkJICAgICAiIyBlbmRpbmcgX19kb3duX3JlYWRfdHJ5bG9ja1xuXHQiCkBAIC0xNDMsMTMgKzE1NSwxMyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3dyaXRlX25lc3RlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0sIGludCBzdWJjbGFzcykKIHsKLQlpbnQgdG1wOworCXJ3c2VtX2NvdW50X3QgdG1wOwogCiAJdG1wID0gUldTRU1fQUNUSVZFX1dSSVRFX0JJQVM7CiAJYXNtIHZvbGF0aWxlKCIjIGJlZ2lubmluZyBkb3duX3dyaXRlXG5cdCIKLQkJICAgICBMT0NLX1BSRUZJWCAiICB4YWRkICAgICAgJSVlZHgsKCUlZWF4KVxuXHQiCisJCSAgICAgTE9DS19QUkVGSVggIiAgeGFkZCAgICAgICUxLCglMilcblx0IgogCQkgICAgIC8qIHN1YnRyYWN0IDB4MDAwMGZmZmYsIHJldHVybnMgdGhlIG9sZCB2YWx1ZSAqLwotCQkgICAgICIgIHRlc3RsICAgICAlJWVkeCwlJWVkeFxuXHQiCisJCSAgICAgIiAgdGVzdCAgICAgICUxLCUxXG5cdCIKIAkJICAgICAvKiB3YXMgdGhlIGNvdW50IDAgYmVmb3JlPyAqLwogCQkgICAgICIgIGp6ICAgICAgICAxZlxuIgogCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV9kb3duX3dyaXRlX2ZhaWxlZFxuIgpAQCAtMTcwLDkgKzE4Miw5IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IF9fZG93bl93cml0ZV90cnlsb2NrKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKLQlzaWduZWQgbG9uZyByZXQgPSBjbXB4Y2hnKCZzZW0tPmNvdW50LAotCQkJCSAgUldTRU1fVU5MT0NLRURfVkFMVUUsCi0JCQkJICBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUyk7CisJcndzZW1fY291bnRfdCByZXQgPSBjbXB4Y2hnKCZzZW0tPmNvdW50LAorCQkJCSAgICBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwKKwkJCQkgICAgUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpOwogCWlmIChyZXQgPT0gUldTRU1fVU5MT0NLRURfVkFMVUUpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwpAQCAtMTgzLDkgKzE5NSw5IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewotCV9fczMyIHRtcCA9IC1SV1NFTV9BQ1RJVkVfUkVBRF9CSUFTOworCXJ3c2VtX2NvdW50X3QgdG1wID0gLVJXU0VNX0FDVElWRV9SRUFEX0JJQVM7CiAJYXNtIHZvbGF0aWxlKCIjIGJlZ2lubmluZyBfX3VwX3JlYWRcblx0IgotCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlJWVkeCwoJSVlYXgpXG5cdCIKKwkJICAgICBMT0NLX1BSRUZJWCAiICB4YWRkICAgICAgJTEsKCUyKVxuXHQiCiAJCSAgICAgLyogc3VidHJhY3RzIDEsIHJldHVybnMgdGhlIG9sZCB2YWx1ZSAqLwogCQkgICAgICIgIGpucyAgICAgICAgMWZcblx0IgogCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV93YWtlXG4iCkBAIC0yMDEsMTggKzIxMywxOCBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX191cF93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7CisJcndzZW1fY291bnRfdCB0bXA7CiAJYXNtIHZvbGF0aWxlKCIjIGJlZ2lubmluZyBfX3VwX3dyaXRlXG5cdCIKLQkJICAgICAiICBtb3ZsICAgICAgJTIsJSVlZHhcblx0IgotCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGRsICAgICAlJWVkeCwoJSVlYXgpXG5cdCIKKwkJICAgICBMT0NLX1BSRUZJWCAiICB4YWRkICAgICAgJTEsKCUyKVxuXHQiCiAJCSAgICAgLyogdHJpZXMgdG8gdHJhbnNpdGlvbgogCQkJMHhmZmZmMDAwMSAtPiAweDAwMDAwMDAwICovCiAJCSAgICAgIiAganogICAgICAgMWZcbiIKIAkJICAgICAiICBjYWxsIGNhbGxfcndzZW1fd2FrZVxuIgogCQkgICAgICIxOlxuXHQiCiAJCSAgICAgIiMgZW5kaW5nIF9fdXBfd3JpdGVcbiIKLQkJICAgICA6ICIrbSIgKHNlbS0+Y291bnQpCi0JCSAgICAgOiAiYSIgKHNlbSksICJpIiAoLVJXU0VNX0FDVElWRV9XUklURV9CSUFTKQotCQkgICAgIDogIm1lbW9yeSIsICJjYyIsICJlZHgiKTsKKwkJICAgICA6ICIrbSIgKHNlbS0+Y291bnQpLCAiPWQiICh0bXApCisJCSAgICAgOiAiYSIgKHNlbSksICIxIiAoLVJXU0VNX0FDVElWRV9XUklURV9CSUFTKQorCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwogfQogCiAvKgpAQCAtMjIxLDMzICsyMzMsMzggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25ncmFkZV93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7CiAJYXNtIHZvbGF0aWxlKCIjIGJlZ2lubmluZyBfX2Rvd25ncmFkZV93cml0ZVxuXHQiCi0JCSAgICAgTE9DS19QUkVGSVggIiAgYWRkbCAgICAgICUyLCglJWVheClcblx0IgotCQkgICAgIC8qIHRyYW5zaXRpb25zIDB4WlpaWjAwMDEgLT4gMHhZWVlZMDAwMSAqLworCQkgICAgIExPQ0tfUFJFRklYIF9BU01fQUREICIlMiwoJTEpXG5cdCIKKwkJICAgICAvKgorCQkgICAgICAqIHRyYW5zaXRpb25zIDB4WlpaWjAwMDEgLT4gMHhZWVlZMDAwMSAoaTM4NikKKwkJICAgICAgKiAgICAgMHhaWlpaWlpaWjAwMDAwMDAxIC0+IDB4WVlZWVlZWVkwMDAwMDAwMSAoeDg2XzY0KQorCQkgICAgICAqLwogCQkgICAgICIgIGpucyAgICAgICAxZlxuXHQiCiAJCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX2Rvd25ncmFkZV93YWtlXG4iCiAJCSAgICAgIjE6XG5cdCIKIAkJICAgICAiIyBlbmRpbmcgX19kb3duZ3JhZGVfd3JpdGVcbiIKIAkJICAgICA6ICIrbSIgKHNlbS0+Y291bnQpCi0JCSAgICAgOiAiYSIgKHNlbSksICJpIiAoLVJXU0VNX1dBSVRJTkdfQklBUykKKwkJICAgICA6ICJhIiAoc2VtKSwgImVyIiAoLVJXU0VNX1dBSVRJTkdfQklBUykKIAkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKIH0KIAogLyoKICAqIGltcGxlbWVudCBhdG9taWMgYWRkIGZ1bmN0aW9uYWxpdHkKICAqLwotc3RhdGljIGlubGluZSB2b2lkIHJ3c2VtX2F0b21pY19hZGQoaW50IGRlbHRhLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCitzdGF0aWMgaW5saW5lIHZvaWQgcndzZW1fYXRvbWljX2FkZChyd3NlbV9jb3VudF90IGRlbHRhLAorCQkJCSAgICBzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUxLCUwIgorCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCBfQVNNX0FERCAiJTEsJTAiCiAJCSAgICAgOiAiK20iIChzZW0tPmNvdW50KQotCQkgICAgIDogImlyIiAoZGVsdGEpKTsKKwkJICAgICA6ICJlciIgKGRlbHRhKSk7CiB9CiAKIC8qCiAgKiBpbXBsZW1lbnQgZXhjaGFuZ2UgYW5kIGFkZCBmdW5jdGlvbmFsaXR5CiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHJ3c2VtX2F0b21pY191cGRhdGUoaW50IGRlbHRhLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCitzdGF0aWMgaW5saW5lIHJ3c2VtX2NvdW50X3QgcndzZW1fYXRvbWljX3VwZGF0ZShyd3NlbV9jb3VudF90IGRlbHRhLAorCQkJCQkJc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewotCWludCB0bXAgPSBkZWx0YTsKKwlyd3NlbV9jb3VudF90IHRtcCA9IGRlbHRhOwogCiAJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkICUwLCUxIgogCQkgICAgIDogIityIiAodG1wKSwgIittIiAoc2VtLT5jb3VudCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggMWU3OTY3OC4uNGNmYzkwOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKQEAgLTEzNSw2ICsxMzUsOCBAQAogdm9pZCBuYXRpdmVfY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KTsKIHZvaWQgbmF0aXZlX3BsYXlfZGVhZCh2b2lkKTsKIHZvaWQgcGxheV9kZWFkX2NvbW1vbih2b2lkKTsKK3ZvaWQgd2JpbnZkX29uX2NwdShpbnQgY3B1KTsKK2ludCB3YmludmRfb25fYWxsX2NwdXModm9pZCk7CiAKIHZvaWQgbmF0aXZlX3NlbmRfY2FsbF9mdW5jX2lwaShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CiB2b2lkIG5hdGl2ZV9zZW5kX2NhbGxfZnVuY19zaW5nbGVfaXBpKGludCBjcHUpOwpAQCAtMTQ3LDYgKzE0OSwxMyBAQAogewogCXJldHVybiBjcHVtYXNrX3dlaWdodChjcHVfY2FsbG91dF9tYXNrKTsKIH0KKyNlbHNlIC8qICFDT05GSUdfU01QICovCisjZGVmaW5lIHdiaW52ZF9vbl9jcHUoY3B1KSAgICAgd2JpbnZkKCkKK3N0YXRpYyBpbmxpbmUgaW50IHdiaW52ZF9vbl9hbGxfY3B1cyh2b2lkKQoreworCXdiaW52ZCgpOworCXJldHVybiAwOworfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogZXh0ZXJuIHVuc2lnbmVkIGRpc2FibGVkX2NwdXMgX19jcHVpbml0ZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaAppbmRleCAzNWU4OTEyLi40ZGFiNzhlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCkBAIC0zLDggKzMsNiBAQAogCiBleHRlcm4gaW50IGtzdGFja19kZXB0aF90b19wcmludDsKIAotaW50IHg4Nl9pc19zdGFja19pZChpbnQgaWQsIGNoYXIgKm5hbWUpOwotCiBzdHJ1Y3QgdGhyZWFkX2luZm87CiBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHM7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaAppbmRleCA4ZDMzYmM1Li5jNGEzNDhmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbC5oCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAorZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgc3lzX2NhbGxfdGFibGVbXTsKKwogLyoKICAqIE9ubHkgdGhlIGxvdyAzMiBiaXRzIG9mIG9yaWdfYXggYXJlIG1lYW5pbmdmdWwsIHNvIHdlIHJldHVybiBpbnQuCiAgKiBUaGlzIGltcG9ydGFudGx5IGlnbm9yZXMgdGhlIGhpZ2ggYml0cyBvbiA2NC1iaXQsIHNvIGNvbXBhcmlzb25zCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IGVjYjU0NGUuLmUwNDc0MGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xMSw5ICsxMSw5IEBACiAjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KIAogLyogZW50cmllcyBpbiBBUkNIX0RMSU5GTzogKi8KLSNpZmRlZiBDT05GSUdfSUEzMl9FTVVMQVRJT04KKyNpZiBkZWZpbmVkKENPTkZJR19JQTMyX0VNVUxBVElPTikgfHwgIWRlZmluZWQoQ09ORklHX1g4Nl82NCkKICMgZGVmaW5lIEFUX1ZFQ1RPUl9TSVpFX0FSQ0ggMgotI2Vsc2UKKyNlbHNlIC8qIGVsc2UgaXQncyBub24tY29tcGF0IHg4Ni02NCAqLwogIyBkZWZpbmUgQVRfVkVDVE9SX1NJWkVfQVJDSCAxCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCmluZGV4IDUzNWU0MjE0Li4zMTY3MDhkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCkBAIC04LDYgKzgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAvKgpAQCAtMTYsNyArMTgsMjQgQEAKIAogLyogSGFuZGxlcyBleGNlcHRpb25zIGluIGJvdGggdG8gYW5kIGZyb20sIGJ1dCBkb2Vzbid0IGRvIGFjY2Vzc19vayAqLwogX19tdXN0X2NoZWNrIHVuc2lnbmVkIGxvbmcKLWNvcHlfdXNlcl9nZW5lcmljKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsZW4pOworY29weV91c2VyX2dlbmVyaWNfc3RyaW5nKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsZW4pOworX19tdXN0X2NoZWNrIHVuc2lnbmVkIGxvbmcKK2NvcHlfdXNlcl9nZW5lcmljX3Vucm9sbGVkKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsZW4pOworCitzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBsb25nCitjb3B5X3VzZXJfZ2VuZXJpYyh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbGVuKQoreworCXVuc2lnbmVkIHJldDsKKworCWFsdGVybmF0aXZlX2NhbGwoY29weV91c2VyX2dlbmVyaWNfdW5yb2xsZWQsCisJCQkgY29weV91c2VyX2dlbmVyaWNfc3RyaW5nLAorCQkJIFg4Nl9GRUFUVVJFX1JFUF9HT09ELAorCQkJIEFTTV9PVVRQVVQyKCI9YSIgKHJldCksICI9RCIgKHRvKSwgIj1TIiAoZnJvbSksCisJCQkJICAgICAiPWQiIChsZW4pKSwKKwkJCSAiMSIgKHRvKSwgIjIiIChmcm9tKSwgIjMiIChsZW4pCisJCQkgOiAibWVtb3J5IiwgInJjeCIsICJyOCIsICJyOSIsICJyMTAiLCAicjExIik7CisJcmV0dXJuIHJldDsKK30KIAogX19tdXN0X2NoZWNrIHVuc2lnbmVkIGxvbmcKIF9jb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsZW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXNlci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXNlci5oCmluZGV4IDk5OTg3M2IuLjI0NTMyYzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VzZXIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91c2VyLmgKQEAgLTEsNSArMSw2MyBAQAorI2lmbmRlZiBfQVNNX1g4Nl9VU0VSX0gKKyNkZWZpbmUgX0FTTV9YODZfVVNFUl9ICisKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAjIGluY2x1ZGUgInVzZXJfMzIuaCIKICNlbHNlCiAjIGluY2x1ZGUgInVzZXJfNjQuaCIKICNlbmRpZgorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKK3N0cnVjdCB1c2VyX3ltbWhfcmVncyB7CisJLyogMTYgKiAxNiBieXRlcyBmb3IgZWFjaCBZTU1ILXJlZyAqLworCV9fdTMyIHltbWhfc3BhY2VbNjRdOworfTsKKworc3RydWN0IHVzZXJfeHNhdmVfaGRyIHsKKwlfX3U2NCB4c3RhdGVfYnY7CisJX191NjQgcmVzZXJ2ZWQxWzJdOworCV9fdTY0IHJlc2VydmVkMls1XTsKK307CisKKy8qCisgKiBUaGUgc3RydWN0dXJlIGxheW91dCBvZiB1c2VyX3hzdGF0ZXJlZ3MsIHVzZWQgZm9yIGV4cG9ydGluZyB0aGUKKyAqIGV4dGVuZGVkIHJlZ2lzdGVyIHN0YXRlIHRocm91Z2ggcHRyYWNlIGFuZCBjb3JlLWR1bXAgKE5UX1g4Nl9YU1RBVEUgbm90ZSkKKyAqIGludGVyZmFjZXMgd2lsbCBiZSBzYW1lIGFzIHRoZSBtZW1vcnkgbGF5b3V0IG9mIHhzYXZlIHVzZWQgYnkgdGhlIHByb2Nlc3NvcgorICogKGV4Y2VwdCBmb3IgdGhlIGJ5dGVzIDQ2NC4uNTExLCB3aGljaCBjYW4gYmUgdXNlZCBieSB0aGUgc29mdHdhcmUpIGFuZCBoZW5jZQorICogdGhlIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZQorICogcHJvY2Vzc29yIGFuZCBPUy4gVGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSB0aGF0IHVzZXJzIG5lZWQgdG8gdXNlIGNhbiBiZQorICogb2J0YWluZWQgYnkgZG9pbmc6CisgKiAgICAgY3B1aWRfY291bnQoMHhkLCAwLCAmZWF4LCAmcHRyYWNlX3hzdGF0ZXJlZ3Nfc3RydWN0X3NpemUsICZlY3gsICZlZHgpOworICogaS5lLiwgY3B1aWQuKGVheD0weGQsZWN4PTApLmVieCB3aWxsIGJlIHRoZSBzaXplIHRoYXQgdXNlciAoZGVidWdnZXJzLCBldGMuKQorICogbmVlZCB0byB1c2UuCisgKgorICogRm9yIG5vdywgb25seSB0aGUgZmlyc3QgOCBieXRlcyBvZiB0aGUgc29mdHdhcmUgdXNhYmxlIGJ5dGVzWzQ2NC4uNDcxXSB3aWxsCisgKiBiZSB1c2VkIGFuZCB3aWxsIGJlIHNldCB0byBPUyBlbmFibGVkIHhzdGF0ZSBtYXNrICh3aGljaCBpcyBzYW1lIGFzIHRoZQorICogNjRiaXQgbWFzayByZXR1cm5lZCBieSB0aGUgeGdldGJ2J3MgeENSMCkuICBVc2VycyAoYW5hbHl6aW5nIGNvcmUgZHVtcAorICogcmVtb3RlbHksIGV0Yy4pIGNhbiB1c2UgdGhpcyBtYXNrIGFzIHdlbGwgYXMgdGhlIG1hc2sgc2F2ZWQgaW4gdGhlCisgKiB4c3RhdGVfaGRyIGJ5dGVzIGFuZCBpbnRlcnByZXQgd2hhdCBzdGF0ZXMgdGhlIHByb2Nlc3Nvci9PUyBzdXBwb3J0cworICogYW5kIHdoYXQgc3RhdGVzIGFyZSBpbiBtb2RpZmllZC9pbml0aWFsaXplZCBjb25kaXRpb25zIGZvciB0aGUKKyAqIHBhcnRpY3VsYXIgcHJvY2Vzcy90aHJlYWQuCisgKgorICogQWxzbyB3aGVuIHRoZSB1c2VyIG1vZGlmaWVzIGNlcnRhaW4gc3RhdGUgRlAvU1NFL2V0YyB0aHJvdWdoIHRoZQorICogcHRyYWNlIGludGVyZmFjZSwgdGhleSBtdXN0IGVuc3VyZSB0aGF0IHRoZSB4c2F2ZV9oZHIueHN0YXRlX2J2CisgKiBieXRlc1s1MTIuLjUxOV0gb2YgdGhlIG1lbW9yeSBsYXlvdXQgYXJlIHVwZGF0ZWQgY29ycmVzcG9uZGluZ2x5LgorICogaS5lLiwgZm9yIGV4YW1wbGUgd2hlbiBGUCBzdGF0ZSBpcyBtb2RpZmllZCB0byBhIG5vbi1pbml0IHN0YXRlLAorICogeHNhdmVfaGRyLnhzdGF0ZV9ididzIGJpdCAwIG11c3QgYmUgc2V0IHRvICcxJywgd2hlbiBTU0UgaXMgbW9kaWZpZWQgdG8KKyAqIG5vbi1pbml0IHN0YXRlLCB4c2F2ZV9oZHIueHN0YXRlX2J2J3MgYml0IDEgbXVzdCB0byBiZSBzZXQgdG8gJzEnLCBldGMuCisgKi8KKyNkZWZpbmUgVVNFUl9YU1RBVEVfRlhfU1dfV09SRFMgNgorI2RlZmluZSBVU0VSX1hTVEFURV9YQ1IwX1dPUkQJMAorCitzdHJ1Y3QgdXNlcl94c3RhdGVyZWdzIHsKKwlzdHJ1Y3QgeworCQlfX3U2NCBmcHhfc3BhY2VbNThdOworCQlfX3U2NCB4c3RhdGVfZnhfc3dbVVNFUl9YU1RBVEVfRlhfU1dfV09SRFNdOworCX0gaTM4NzsKKwlzdHJ1Y3QgdXNlcl94c2F2ZV9oZHIgeHNhdmVfaGRyOworCXN0cnVjdCB1c2VyX3ltbWhfcmVncyB5bW1oOworCS8qIGZ1cnRoZXIgcHJvY2Vzc29yIHN0YXRlIGV4dGVuc2lvbnMgZ28gaGVyZSAqLworfTsKKworI2VuZGlmIC8qIF9BU01fWDg2X1VTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvYmlvcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvYmlvcy5oCmluZGV4IDI3NTFmMzAuLjcxNjA1YzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L2Jpb3MuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di9iaW9zLmgKQEAgLTE4LDggKzE4LDggQEAKICAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKGMpIFJ1c3MgQW5kZXJzb24KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoYykgUnVzcyBBbmRlcnNvbiA8cmphQHNnaS5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgpAQCAtMzYsNyArMzYsOCBAQAogCVVWX0JJT1NfV0FUQ0hMSVNUX0FMTE9DLAogCVVWX0JJT1NfV0FUQ0hMSVNUX0ZSRUUsCiAJVVZfQklPU19NRU1QUk9URUNULAotCVVWX0JJT1NfR0VUX1BBUlRJVElPTl9BRERSCisJVVZfQklPU19HRVRfUEFSVElUSU9OX0FERFIsCisJVVZfQklPU19TRVRfTEVHQUNZX1ZHQV9UQVJHRVQKIH07CiAKIC8qCkBAIC04OSwxMyArOTAsMTQgQEAKIGV4dGVybiBzNjQgdXZfYmlvc19jYWxsX2lycXNhdmUoZW51bSB1dl9iaW9zX2NtZCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQpOwogZXh0ZXJuIHM2NCB1dl9iaW9zX2NhbGxfcmVlbnRyYW50KGVudW0gdXZfYmlvc19jbWQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKIAotZXh0ZXJuIHM2NCB1dl9iaW9zX2dldF9zbl9pbmZvKGludCwgaW50ICosIGxvbmcgKiwgbG9uZyAqLCBsb25nICopOworZXh0ZXJuIHM2NCB1dl9iaW9zX2dldF9zbl9pbmZvKGludCwgaW50ICosIGxvbmcgKiwgbG9uZyAqLCBsb25nICosIGxvbmcgKik7CiBleHRlcm4gczY0IHV2X2Jpb3NfZnJlcV9iYXNlKHU2NCwgdTY0ICopOwogZXh0ZXJuIGludCB1dl9iaW9zX21xX3dhdGNobGlzdF9hbGxvYyh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQsCiAJCQkJCXVuc2lnbmVkIGxvbmcgKik7CiBleHRlcm4gaW50IHV2X2Jpb3NfbXFfd2F0Y2hsaXN0X2ZyZWUoaW50LCBpbnQpOwogZXh0ZXJuIHM2NCB1dl9iaW9zX2NoYW5nZV9tZW1wcm90ZWN0KHU2NCwgdTY0LCBlbnVtIHV2X21lbXByb3RlY3QpOwogZXh0ZXJuIHM2NCB1dl9iaW9zX3Jlc2VydmVkX3BhZ2VfcGEodTY0LCB1NjQgKiwgdTY0ICosIHU2NCAqKTsKK2V4dGVybiBpbnQgdXZfYmlvc19zZXRfbGVnYWN5X3ZnYV90YXJnZXQoYm9vbCBkZWNvZGUsIGludCBkb21haW4sIGludCBidXMpOwogCiBleHRlcm4gdm9pZCB1dl9iaW9zX2luaXQodm9pZCk7CiAKQEAgLTEwNCw2ICsxMDYsNyBAQAogZXh0ZXJuIGxvbmcgc25fcGFydGl0aW9uX2lkOwogZXh0ZXJuIGxvbmcgc25fY29oZXJlbmN5X2lkOwogZXh0ZXJuIGxvbmcgc25fcmVnaW9uX3NpemU7CitleHRlcm4gbG9uZyBzeXN0ZW1fc2VyaWFsX251bWJlcjsKICNkZWZpbmUgcGFydGl0aW9uX2NvaGVyZW5jZV9pZCgpCShzbl9jb2hlcmVuY3lfaWQpCiAKIGV4dGVybiBzdHJ1Y3Qga29iamVjdCAqc2dpX3V2X2tvYmo7CS8qIC9zeXMvZmlybXdhcmUvc2dpX3V2ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91di5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXYuaAppbmRleCBjMGEwMWI1Li4zYmI5NDkxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91di5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2LmgKQEAgLTExLDYgKzExLDcgQEAKIGV4dGVybiBlbnVtIHV2X3N5c3RlbV90eXBlIGdldF91dl9zeXN0ZW1fdHlwZSh2b2lkKTsKIGV4dGVybiBpbnQgaXNfdXZfc3lzdGVtKHZvaWQpOwogZXh0ZXJuIHZvaWQgdXZfY3B1X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB1dl9ubWlfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHV2X3N5c3RlbV9pbml0KHZvaWQpOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBjcHVtYXNrICp1dl9mbHVzaF90bGJfb3RoZXJzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAogCQkJCQkJIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAppbmRleCA0MGJlODEzLi4xNGNjNzRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaApAQCAtMzI5LDcgKzMyOSw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1dl9nbG9iYWxfZ3J1X21tcl9hZGRyZXNzKGludCBwbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7Ci0JcmV0dXJuIFVWX0dMT0JBTF9HUlVfTU1SX0JBU0UgfCBvZmZzZXQgfCAocG5vZGUgPDwgdXZfaHViX2luZm8tPm1fdmFsKTsKKwlyZXR1cm4gVVZfR0xPQkFMX0dSVV9NTVJfQkFTRSB8IG9mZnNldCB8CisJCSgodW5zaWduZWQgbG9uZylwbm9kZSA8PCB1dl9odWJfaW5mby0+bV92YWwpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXZfd3JpdGVfZ2xvYmFsX21tcjgoaW50IHBub2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgY2hhciB2YWwpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaAppbmRleCBlYTBlOGVhLi42MGNjMzUyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKQEAgLTEyNiw2ICsxMjYsNyBAQAogICogQGdldF93YWxsY2xvY2s6CQlnZXQgdGltZSBmcm9tIEhXIGNsb2NrIGxpa2UgUlRDIGV0Yy4KICAqIEBzZXRfd2FsbGNsb2NrOgkJc2V0IHRpbWUgYmFjayB0byBIVyBjbG9jawogICogQGlzX3VudHJhY2tlZF9wYXRfcmFuZ2UJZXhjbHVkZSBmcm9tIFBBVCBsb2dpYworICogQG5taV9pbml0CQkJZW5hYmxlIE5NSSBvbiBjcHVzCiAgKi8KIHN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIHsKIAl1bnNpZ25lZCBsb25nICgqY2FsaWJyYXRlX3RzYykodm9pZCk7CkBAIC0xMzMsNiArMTM0LDcgQEAKIAlpbnQgKCpzZXRfd2FsbGNsb2NrKSh1bnNpZ25lZCBsb25nIG5vd3RpbWUpOwogCXZvaWQgKCppb21tdV9zaHV0ZG93bikodm9pZCk7CiAJYm9vbCAoKmlzX3VudHJhY2tlZF9wYXRfcmFuZ2UpKHU2NCBzdGFydCwgdTY0IGVuZCk7CisJdm9pZCAoKm5taV9pbml0KSh2b2lkKTsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgeDg2X2luaXRfb3BzIHg4Nl9pbml0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veHNhdmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hzYXZlLmgKaW5kZXggNzI3YWNjMS4uZGRjMDRjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veHNhdmUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94c2F2ZS5oCkBAIC0yNyw5ICsyNywxMSBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCB4c3RhdGVfc2l6ZTsKIGV4dGVybiB1NjQgcGNudHh0X21hc2s7CiBleHRlcm4gc3RydWN0IHhzYXZlX3N0cnVjdCAqaW5pdF94c3RhdGVfYnVmOworZXh0ZXJuIHU2NCB4c3RhdGVfZnhfc3dfYnl0ZXNbVVNFUl9YU1RBVEVfRlhfU1dfV09SRFNdOwogCiBleHRlcm4gdm9pZCB4c2F2ZV9jbnR4dF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgeHNhdmVfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHVwZGF0ZV9yZWdzZXRfeHN0YXRlX2luZm8odW5zaWduZWQgaW50IHNpemUsIHU2NCB4c3RhdGVfbWFzayk7CiBleHRlcm4gaW50IGluaXRfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwogZXh0ZXJuIGludCBjaGVja19mb3JfeHN0YXRlKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgX191c2VyICpidWYsCiAJCQkgICAgdm9pZCBfX3VzZXIgKmZwc3RhdGUsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKaW5kZXggMDM2ZDI4YS4uZjk1NzAzMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwpAQCAtNDksNiArNDksNyBAQAogCiAjaWZkZWYJQ09ORklHX1g4Nl82NAogIyBpbmNsdWRlIDxhc20vcHJvdG8uaD4KKyMgaW5jbHVkZSA8YXNtL251bWFfNjQuaD4KICNlbmRpZgkJCQkvKiBYODYgKi8KIAogI2RlZmluZSBCQURfTUFEVF9FTlRSWShlbnRyeSwgZW5kKSAoCQkJCQkgICAgXApAQCAtNDgyLDYgKzQ4MywyNSBAQAogICovCiAjaWZkZWYgQ09ORklHX0FDUElfSE9UUExVR19DUFUKIAorc3RhdGljIHZvaWQgYWNwaV9tYXBfY3B1Mm5vZGUoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgY3B1LCBpbnQgcGh5c2lkKQoreworI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKKwlpbnQgbmlkOworCisJbmlkID0gYWNwaV9nZXRfbm9kZShoYW5kbGUpOworCWlmIChuaWQgPT0gLTEgfHwgIW5vZGVfb25saW5lKG5pZCkpCisJCXJldHVybjsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJYXBpY2lkX3RvX25vZGVbcGh5c2lkXSA9IG5pZDsKKwludW1hX3NldF9ub2RlKGNwdSwgbmlkKTsKKyNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KKwlhcGljaWRfMl9ub2RlW3BoeXNpZF0gPSBuaWQ7CisJY3B1X3RvX25vZGVfbWFwW2NwdV0gPSBuaWQ7CisjZW5kaWYKKworI2VuZGlmCit9CisKIHN0YXRpYyBpbnQgX19jcHVpbml0IF9hY3BpX21hcF9sc2FwaWMoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgKnBjcHUpCiB7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKQEAgLTU0MCw2ICs1NjAsNyBAQAogCX0KIAogCWNwdSA9IGNwdW1hc2tfZmlyc3QobmV3X21hcCk7CisJYWNwaV9tYXBfY3B1Mm5vZGUoaGFuZGxlLCBjcHUsIHBoeXNpZCk7CiAKIAkqcGNwdSA9IGNwdTsKIAlyZXR2YWwgPSAwOwpAQCAtMTE4NSw5ICsxMjA2LDYgQEAKIAkJaWYgKCFlcnJvcikgewogCQkJYWNwaV9sYXBpYyA9IDE7CiAKLSNpZmRlZiBDT05GSUdfWDg2X0JJR1NNUAotCQkJZ2VuZXJpY19iaWdzbXBfcHJvYmUoKTsKLSNlbmRpZgogCQkJLyoKIAkJCSAqIFBhcnNlIE1BRFQgSU8tQVBJQyBlbnRyaWVzCiAJCQkgKi8KQEAgLTExOTcsOCArMTIxNSw2IEBACiAJCQkJYWNwaV9pb2FwaWMgPSAxOwogCiAJCQkJc21wX2ZvdW5kX2NvbmZpZyA9IDE7Ci0JCQkJaWYgKGFwaWMtPnNldHVwX2FwaWNfcm91dGluZykKLQkJCQkJYXBpYy0+c2V0dXBfYXBpY19yb3V0aW5nKCk7CiAJCQl9CiAJCX0KIAkJaWYgKGVycm9yID09IC1FSU5WQUwpIHsKQEAgLTEzNDksMTQgKzEzNjUsNiBAQAogCSB9LAogCXsKIAkgLmNhbGxiYWNrID0gZm9yY2VfYWNwaV9odCwKLQkgLmlkZW50ID0gIkFTVVMgUDJCLURTIiwKLQkgLm1hdGNoZXMgPSB7Ci0JCSAgICAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJBU1VTVGVLIENvbXB1dGVyIElOQy4iKSwKLQkJICAgICBETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJQMkItRFMiKSwKLQkJICAgICB9LAotCSB9LAotCXsKLQkgLmNhbGxiYWNrID0gZm9yY2VfYWNwaV9odCwKIAkgLmlkZW50ID0gIkFTVVMgQ1VSLURMUyIsCiAJIC5tYXRjaGVzID0gewogCQkgICAgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiQVNVU1RlSyBDb21wdXRlciBJTkMuIiksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCmluZGV4IGRlNzM1M2MuLmU2ZWEwMzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAkJCQkJIHN0cnVjdCBhbHRfaW5zdHIgKmVuZCkKIHsKIAlzdHJ1Y3QgYWx0X2luc3RyICphOwotCWNoYXIgaW5zbmJ1ZltNQVhfUEFUQ0hfTEVOXTsKKwl1OCBpbnNuYnVmW01BWF9QQVRDSF9MRU5dOwogCiAJRFBSSU5USygiJXM6IGFsdCB0YWJsZSAlcCAtPiAlcFxuIiwgX19mdW5jX18sIHN0YXJ0LCBlbmQpOwogCWZvciAoYSA9IHN0YXJ0OyBhIDwgZW5kOyBhKyspIHsKQEAgLTIyMyw2ICsyMjMsOCBAQAogCQl9CiAjZW5kaWYKIAkJbWVtY3B5KGluc25idWYsIGEtPnJlcGxhY2VtZW50LCBhLT5yZXBsYWNlbWVudGxlbik7CisJCWlmICgqaW5zbmJ1ZiA9PSAweGU4ICYmIGEtPnJlcGxhY2VtZW50bGVuID09IDUpCisJCSAgICAqKHMzMiAqKShpbnNuYnVmICsgMSkgKz0gYS0+cmVwbGFjZW1lbnQgLSBhLT5pbnN0cjsKIAkJYWRkX25vcHMoaW5zbmJ1ZiArIGEtPnJlcGxhY2VtZW50bGVuLAogCQkJIGEtPmluc3RybGVuIC0gYS0+cmVwbGFjZW1lbnRsZW4pOwogCQl0ZXh0X3Bva2VfZWFybHkoaW5zdHIsIGluc25idWYsIGEtPmluc3RybGVuKTsKQEAgLTM5MCw2ICszOTIsMjQgQEAKIAltdXRleF91bmxvY2soJnNtcF9hbHQpOwogfQogCisvKiBSZXR1cm4gMSBpZiB0aGUgYWRkcmVzcyByYW5nZSBpcyByZXNlcnZlZCBmb3Igc21wLWFsdGVybmF0aXZlcyAqLworaW50IGFsdGVybmF0aXZlc190ZXh0X3Jlc2VydmVkKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit7CisJc3RydWN0IHNtcF9hbHRfbW9kdWxlICptb2Q7CisJdTggKipwdHI7CisJdTggKnRleHRfc3RhcnQgPSBzdGFydDsKKwl1OCAqdGV4dF9lbmQgPSBlbmQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZCwgJnNtcF9hbHRfbW9kdWxlcywgbmV4dCkgeworCQlpZiAobW9kLT50ZXh0ID4gdGV4dF9lbmQgfHwgbW9kLT50ZXh0X2VuZCA8IHRleHRfc3RhcnQpCisJCQljb250aW51ZTsKKwkJZm9yIChwdHIgPSBtb2QtPmxvY2tzOyBwdHIgPCBtb2QtPmxvY2tzX2VuZDsgcHRyKyspCisJCQlpZiAodGV4dF9zdGFydCA8PSAqcHRyICYmIHRleHRfZW5kID49ICpwdHIpCisJCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QQVJBVklSVApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCmluZGV4IDIzODI0ZmUuLmFkYjBiYTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKQEAgLTk4MCw3ICs5ODAsNyBAQAogewogCWludCBpbmRleCA9IGRtYV9kb20tPmFwZXJ0dXJlX3NpemUgPj4gQVBFUlRVUkVfUkFOR0VfU0hJRlQ7CiAJc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7Ci0JaW50IGk7CisJdW5zaWduZWQgbG9uZyBpOwogCiAjaWZkZWYgQ09ORklHX0lPTU1VX1NUUkVTUwogCXBvcHVsYXRlID0gZmFsc2U7CkBAIC0xNDg5LDExICsxNDg5LDE0IEBACiB7CiAJc3RydWN0IGlvbW11X2Rldl9kYXRhICpkZXZfZGF0YSA9IGdldF9kZXZfZGF0YShkZXYpOwogCXN0cnVjdCBpb21tdV9kZXZfZGF0YSAqYWxpYXNfZGF0YTsKKwlzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJQlVHX09OKCFkZXZfZGF0YS0+ZG9tYWluKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfZGF0YS0+ZG9tYWluLT5sb2NrLCBmbGFncyk7CisJZG9tYWluID0gZGV2X2RhdGEtPmRvbWFpbjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIAogCWlmIChkZXZfZGF0YS0+YWxpYXMgIT0gZGV2KSB7CiAJCWFsaWFzX2RhdGEgPSBnZXRfZGV2X2RhdGEoZGV2X2RhdGEtPmFsaWFzKTsKQEAgLTE1MDQsMTMgKzE1MDcsMTUgQEAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2X2RhdGEtPmJpbmQpKQogCQlkb19kZXRhY2goZGV2KTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9kYXRhLT5kb21haW4tPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIAogCS8qCiAJICogSWYgd2UgcnVuIGluIHBhc3N0aHJvdWdoIG1vZGUgdGhlIGRldmljZSBtdXN0IGJlIGFzc2lnbmVkIHRvIHRoZQotCSAqIHBhc3N0aHJvdWdoIGRvbWFpbiBpZiBpdCBpcyBkZXRhY2hlZCBmcm9tIGFueSBvdGhlciBkb21haW4KKwkgKiBwYXNzdGhyb3VnaCBkb21haW4gaWYgaXQgaXMgZGV0YWNoZWQgZnJvbSBhbnkgb3RoZXIgZG9tYWluLgorCSAqIE1ha2Ugc3VyZSB3ZSBjYW4gZGVhc3NpZ24gZnJvbSB0aGUgcHRfZG9tYWluIGl0c2VsZi4KIAkgKi8KLQlpZiAoaW9tbXVfcGFzc190aHJvdWdoICYmIGRldl9kYXRhLT5kb21haW4gPT0gTlVMTCkKKwlpZiAoaW9tbXVfcGFzc190aHJvdWdoICYmCisJICAgIChkZXZfZGF0YS0+ZG9tYWluID09IE5VTEwgJiYgZG9tYWluICE9IHB0X2RvbWFpbikpCiAJCV9fYXR0YWNoX2RldmljZShkZXYsIHB0X2RvbWFpbik7CiB9CiAKQEAgLTIyMTgsNiArMjIyMywxMiBAQAogLyoKICAqIFRoZSBmdW5jdGlvbiB3aGljaCBjbHVlcyB0aGUgQU1EIElPTU1VIGRyaXZlciBpbnRvIGRtYV9vcHMuCiAgKi8KKwordm9pZCBfX2luaXQgYW1kX2lvbW11X2luaXRfYXBpKHZvaWQpCit7CisJcmVnaXN0ZXJfaW9tbXUoJmFtZF9pb21tdV9vcHMpOworfQorCiBpbnQgX19pbml0IGFtZF9pb21tdV9pbml0X2RtYV9vcHModm9pZCkKIHsKIAlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKQEAgLTIyNTMsOCArMjI2NCw2IEBACiAJLyogTWFrZSB0aGUgZHJpdmVyIGZpbmFsbHkgdmlzaWJsZSB0byB0aGUgZHJpdmVycyAqLwogCWRtYV9vcHMgPSAmYW1kX2lvbW11X2RtYV9vcHM7CiAKLQlyZWdpc3Rlcl9pb21tdSgmYW1kX2lvbW11X29wcyk7Ci0KIAlhbWRfaW9tbXVfc3RhdHNfaW5pdCgpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCmluZGV4IGZiNDkwY2UuLjlkYzkxYjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCkBAIC0xMjkyLDkgKzEyOTIsMTIgQEAKIAkJcmV0ID0gYW1kX2lvbW11X2luaXRfcGFzc3Rocm91Z2goKTsKIAllbHNlCiAJCXJldCA9IGFtZF9pb21tdV9pbml0X2RtYV9vcHMoKTsKKwogCWlmIChyZXQpCiAJCWdvdG8gZnJlZTsKIAorCWFtZF9pb21tdV9pbml0X2FwaSgpOworCiAJYW1kX2lvbW11X2luaXRfbm90aWZpZXIoKTsKIAogCWVuYWJsZV9pb21tdXMoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwppbmRleCAzOTg3ZTQ0Li42ZTI5YjJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCkBAIC01ODEsNyArNTgxLDcgQEAKIAkJcmVzID0gKCgodTY0KSgqZGVsdGF0c2MpKSAqIHBtXzEwMG1zKTsKIAkJZG9fZGl2KHJlcywgZGVsdGFwbSk7CiAJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlRTQyBkZWx0YSBhZGp1c3RlZCB0byAiCi0JCQkJCSAgIlBNLVRpbWVyOiAlbHUgKCVsZCkgXG4iLAorCQkJCQkgICJQTS1UaW1lcjogJWx1ICglbGQpXG4iLAogCQkJCQkodW5zaWduZWQgbG9uZylyZXMsICpkZWx0YXRzYyk7CiAJCSpkZWx0YXRzYyA9IChsb25nKXJlczsKIAl9CkBAIC0xNjQxLDkgKzE2NDEsNyBAQAogI2VuZGlmCiAKIAllbmFibGVfSVJfeDJhcGljKCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAogCWRlZmF1bHRfc2V0dXBfYXBpY19yb3V0aW5nKCk7Ci0jZW5kaWYKIAogCXZlcmlmeV9sb2NhbF9BUElDKCk7CiAJY29ubmVjdF9ic3BfQVBJQygpOwpAQCAtMTg5MSwyMSArMTg4OSw2IEBACiAJaWYgKGFwaWNpZCA+IG1heF9waHlzaWNhbF9hcGljaWQpCiAJCW1heF9waHlzaWNhbF9hcGljaWQgPSBhcGljaWQ7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaWYgKG51bV9wcm9jZXNzb3JzID4gOCkgewotCQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewotCQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6Ci0JCQlpZiAoIUFQSUNfWEFQSUModmVyc2lvbikpIHsKLQkJCQlkZWZfdG9fYmlnc21wID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCS8qIElmIFA0IGFuZCBhYm92ZSBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBYODZfVkVORE9SX0FNRDoKLQkJCWRlZl90b19iaWdzbXAgPSAxOwotCQl9Ci0JfQotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX1g4Nl82NCkKIAllYXJseV9wZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpID0gYXBpY2lkOwogCWVhcmx5X3Blcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KSA9IGFwaWNpZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwppbmRleCA1MzI0M2NhLi42YmRkMmM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCkBAIC0xNjQ3LDcgKzE2NDcsNyBAQAogCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIElSUSByZWRpcmVjdGlvbiB0YWJsZTpcbiIpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiBOUiBEc3QgTWFzayBUcmlnIElSUiBQb2wiCi0JCQkgICIgU3RhdCBEbW9kIERlbGkgVmVjdDogICBcbiIpOworCQkJICAiIFN0YXQgRG1vZCBEZWxpIFZlY3Q6XG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPD0gcmVnXzAxLmJpdHMuZW50cmllczsgaSsrKSB7CiAJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMKaW5kZXggOThjNDY2NS4uNDdkZDg1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIAogCW1wY19yZWNvcmQgPSAwOwogCXByaW50ayhLRVJOX0lORk8KLQkJIkZvdW5kIGFuIE9FTSBNUEMgdGFibGUgYXQgJThwIC0gcGFyc2luZyBpdCAuLi4gXG4iLCBvZW10YWJsZSk7CisJCSJGb3VuZCBhbiBPRU0gTVBDIHRhYmxlIGF0ICU4cCAtIHBhcnNpbmcgaXQuLi5cbiIsIG9lbXRhYmxlKTsKIAogCWlmIChtZW1jbXAob2VtdGFibGUtPnNpZ25hdHVyZSwgTVBDX09FTV9TSUdOQVRVUkUsIDQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV8zMi5jCmluZGV4IDFhNjU1OWYuLjk5ZDJmZTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfMzIuYwpAQCAtNTIsNyArNTIsMzIgQEAKIH0KIGxhdGVfaW5pdGNhbGwocHJpbnRfaXBpX21vZGUpOwogCi12b2lkIGRlZmF1bHRfc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpCit2b2lkIF9faW5pdCBkZWZhdWx0X3NldHVwX2FwaWNfcm91dGluZyh2b2lkKQoreworCWludCB2ZXJzaW9uID0gYXBpY192ZXJzaW9uW2Jvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZF07CisKKwlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDgpIHsKKwkJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKKwkJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQkJaWYgKCFBUElDX1hBUElDKHZlcnNpb24pKSB7CisJCQkJZGVmX3RvX2JpZ3NtcCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBJZiBQNCBhbmQgYWJvdmUgZmFsbCB0aHJvdWdoICovCisJCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCQlkZWZfdG9fYmlnc21wID0gMTsKKwkJfQorCX0KKworI2lmZGVmIENPTkZJR19YODZfQklHU01QCisJZ2VuZXJpY19iaWdzbXBfcHJvYmUoKTsKKyNlbmRpZgorCisJaWYgKGFwaWMtPnNldHVwX2FwaWNfcm91dGluZykKKwkJYXBpYy0+c2V0dXBfYXBpY19yb3V0aW5nKCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2FwaWNfZmxhdF9yb3V0aW5nKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJcHJpbnRrKEtFUk5fSU5GTwpAQCAtMTAzLDcgKzEyOCw3IEBACiAJLmluaXRfYXBpY19sZHIJCQk9IGRlZmF1bHRfaW5pdF9hcGljX2xkciwKIAogCS5pb2FwaWNfcGh5c19pZF9tYXAJCT0gZGVmYXVsdF9pb2FwaWNfcGh5c19pZF9tYXAsCi0JLnNldHVwX2FwaWNfcm91dGluZwkJPSBkZWZhdWx0X3NldHVwX2FwaWNfcm91dGluZywKKwkuc2V0dXBfYXBpY19yb3V0aW5nCQk9IHNldHVwX2FwaWNfZmxhdF9yb3V0aW5nLAogCS5tdWx0aV90aW1lcl9jaGVjawkJPSBOVUxMLAogCS5hcGljaWRfdG9fbm9kZQkJCT0gZGVmYXVsdF9hcGljaWRfdG9fbm9kZSwKIAkuY3B1X3RvX2xvZ2ljYWxfYXBpY2lkCQk9IGRlZmF1bHRfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzY0LmMKaW5kZXggNDUwZmUyMC4uODNlOWJlNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV82NC5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJfQogI2VuZGlmCiAKLQlpZiAoYXBpYyA9PSAmYXBpY19mbGF0ICYmIG51bV9wcm9jZXNzb3JzID4gOCkKKwlpZiAoYXBpYyA9PSAmYXBpY19mbGF0ICYmIG51bV9wb3NzaWJsZV9jcHVzKCkgPiA4KQogCQkJYXBpYyA9ICZhcGljX3BoeXNmbGF0OwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiU2V0dGluZyBBUElDIHJvdXRpbmcgdG8gJXNcbiIsIGFwaWMtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKaW5kZXggMjFkYjNjYi4uMzc0MGM4YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIFNHSSBVViBBUElDIGZ1bmN0aW9ucyAobm90ZTogbm90IGFuIEludGVsIGNvbXBhdGlibGUgQVBJQykKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgpAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL3V2L3V2X21tcnMuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfaHViLmg+CkBAIC0zNCwxMCArMzYsMTMgQEAKIAogREVGSU5FX1BFUl9DUFUoaW50LCB4MmFwaWNfZXh0cmFfYml0cyk7CiAKKyNkZWZpbmUgUFJfREVWRUwoZm10LCBhcmdzLi4uKQlwcl9kZXZlbCgiJXM6ICIgZm10LCBfX2Z1bmNfXywgYXJncykKKwogc3RhdGljIGVudW0gdXZfc3lzdGVtX3R5cGUgdXZfc3lzdGVtX3R5cGU7CiBzdGF0aWMgdTY0IGdydV9zdGFydF9wYWRkciwgZ3J1X2VuZF9wYWRkcjsKIGludCB1dl9taW5faHViX3JldmlzaW9uX2lkOwogRVhQT1JUX1NZTUJPTF9HUEwodXZfbWluX2h1Yl9yZXZpc2lvbl9pZCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHV2X25taV9sb2NrKTsKIAogc3RhdGljIGlubGluZSBib29sIGlzX0dSVV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBlbmQpCiB7CkBAIC03MSw2ICs3Niw3IEBACiAJaWYgKCFzdHJjbXAob2VtX2lkLCAiU0dJIikpIHsKIAkJbm9kZWlkID0gZWFybHlfZ2V0X25vZGVpZCgpOwogCQl4ODZfcGxhdGZvcm0uaXNfdW50cmFja2VkX3BhdF9yYW5nZSA9ICB1dl9pc191bnRyYWNrZWRfcGF0X3JhbmdlOworCQl4ODZfcGxhdGZvcm0ubm1pX2luaXQgPSB1dl9ubWlfaW5pdDsKIAkJaWYgKCFzdHJjbXAob2VtX3RhYmxlX2lkLCAiVVZMIikpCiAJCQl1dl9zeXN0ZW1fdHlwZSA9IFVWX0xFR0FDWV9BUElDOwogCQllbHNlIGlmICghc3RyY21wKG9lbV90YWJsZV9pZCwgIlVWWCIpKQpAQCAtNDgyLDcgKzQ4OCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCB1dl9oZWFydGJlYXRfZW5hYmxlKGludCBjcHUpCiB7Ci0JaWYgKCF1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5lbmFibGVkKSB7CisJd2hpbGUgKCF1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5lbmFibGVkKSB7CiAJCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciA9ICZ1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci50aW1lcjsKIAogCQl1dl9zZXRfY3B1X3NjaXJfYml0cyhjcHUsIFNDSVJfQ1BVX0hFQVJUQkVBVHxTQ0lSX0NQVV9BQ1RJVklUWSk7CkBAIC00OTAsMTEgKzQ5NiwxMCBAQAogCQl0aW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyBTQ0lSX0NQVV9IQl9JTlRFUlZBTDsKIAkJYWRkX3RpbWVyX29uKHRpbWVyLCBjcHUpOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5lbmFibGVkID0gMTsKLQl9CiAKLQkvKiBjaGVjayBib290IGNwdSAqLwotCWlmICghdXZfY3B1X2h1Yl9pbmZvKDApLT5zY2lyLmVuYWJsZWQpCi0JCXV2X2hlYXJ0YmVhdF9lbmFibGUoMCk7CisJCS8qIGFsc28gZW5zdXJlIHRoYXQgYm9vdCBjcHUgaXMgZW5hYmxlZCAqLworCQljcHUgPSAwOworCX0KIH0KIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQpAQCAtNTUzLDYgKzU1OCwzMCBAQAogCiAjZW5kaWYgLyogIUNPTkZJR19IT1RQTFVHX0NQVSAqLwogCisvKiBEaXJlY3QgTGVnYWN5IFZHQSBJL08gdHJhZmZpYyB0byBkZXNpZ25hdGVkIElPSCAqLworaW50IHV2X3NldF92Z2Ffc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgZGVjb2RlLAorCQkgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZF9iaXRzLCBib29sIGNoYW5nZV9icmlkZ2UpCit7CisJaW50IGRvbWFpbiwgYnVzLCByYzsKKworCVBSX0RFVkVMKCJkZXZmbiAleCBkZWNvZGUgJWQgY21kICV4IGNoZ19icmRnICVkXG4iLAorCQkJcGRldi0+ZGV2Zm4sIGRlY29kZSwgY29tbWFuZF9iaXRzLCBjaGFuZ2VfYnJpZGdlKTsKKworCWlmICghY2hhbmdlX2JyaWRnZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGNvbW1hbmRfYml0cyAmIFBDSV9DT01NQU5EX0lPKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWRvbWFpbiA9IHBjaV9kb21haW5fbnIocGRldi0+YnVzKTsKKwlidXMgPSBwZGV2LT5idXMtPm51bWJlcjsKKworCXJjID0gdXZfYmlvc19zZXRfbGVnYWN5X3ZnYV90YXJnZXQoZGVjb2RlLCBkb21haW4sIGJ1cyk7CisJUFJfREVWRUwoInZnYSBkZWNvZGUgJWQgJXg6JXgsIHJjOiAlZFxuIiwgZGVjb2RlLCBkb21haW4sIGJ1cywgcmMpOworCisJcmV0dXJuIHJjOworfQorCiAvKgogICogQ2FsbGVkIG9uIGVhY2ggY3B1IHRvIGluaXRpYWxpemUgdGhlIHBlcl9jcHUgVVYgZGF0YSBhcmVhLgogICogRklYTUU6IGhvdHBsdWcgbm90IHN1cHBvcnRlZCB5ZXQKQEAgLTU2OSw2ICs1OTgsNDYgQEAKIAkJc2V0X3gyYXBpY19leHRyYV9iaXRzKHV2X2h1Yl9pbmZvLT5wbm9kZSk7CiB9CiAKKy8qCisgKiBXaGVuIE5NSSBpcyByZWNlaXZlZCwgcHJpbnQgYSBzdGFjayB0cmFjZS4KKyAqLworaW50IHV2X2hhbmRsZV9ubWkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqZGF0YSkKK3sKKwlpZiAocmVhc29uICE9IERJRV9OTUlfSVBJKQorCQlyZXR1cm4gTk9USUZZX09LOworCS8qCisJICogVXNlIGEgbG9jayBzbyBvbmx5IG9uZSBjcHUgcHJpbnRzIGF0IGEgdGltZQorCSAqIHRvIHByZXZlbnQgaW50ZXJtaXhlZCBvdXRwdXQuCisJICovCisJc3Bpbl9sb2NrKCZ1dl9ubWlfbG9jayk7CisJcHJfaW5mbygiTk1JIHN0YWNrIGR1bXAgY3B1ICV1OlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlkdW1wX3N0YWNrKCk7CisJc3Bpbl91bmxvY2soJnV2X25taV9sb2NrKTsKKworCXJldHVybiBOT1RJRllfU1RPUDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB1dl9kdW1wX3N0YWNrX25taV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbAk9IHV2X2hhbmRsZV9ubWkKK307CisKK3ZvaWQgdXZfcmVnaXN0ZXJfbm1pX25vdGlmaWVyKHZvaWQpCit7CisJaWYgKHJlZ2lzdGVyX2RpZV9ub3RpZmllcigmdXZfZHVtcF9zdGFja19ubWlfbmIpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJVViBOTUkgaGFuZGxlciBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIpOworfQorCit2b2lkIHV2X25taV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJLyoKKwkgKiBVbm1hc2sgTk1JIG9uIGFsbCBjcHVzCisJICovCisJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQxKSB8IEFQSUNfRE1fTk1JOworCXZhbHVlICY9IH5BUElDX0xWVF9NQVNLRUQ7CisJYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKK30KIAogdm9pZCBfX2luaXQgdXZfc3lzdGVtX2luaXQodm9pZCkKIHsKQEAgLTYzNCw4ICs3MDMsOCBAQAogCX0KIAogCXV2X2Jpb3NfaW5pdCgpOwotCXV2X2Jpb3NfZ2V0X3NuX2luZm8oMCwgJnV2X3R5cGUsICZzbl9wYXJ0aXRpb25faWQsCi0JCQkgICAgJnNuX2NvaGVyZW5jeV9pZCwgJnNuX3JlZ2lvbl9zaXplKTsKKwl1dl9iaW9zX2dldF9zbl9pbmZvKDAsICZ1dl90eXBlLCAmc25fcGFydGl0aW9uX2lkLCAmc25fY29oZXJlbmN5X2lkLAorCQkJICAgICZzbl9yZWdpb25fc2l6ZSwgJnN5c3RlbV9zZXJpYWxfbnVtYmVyKTsKIAl1dl9ydGNfaW5pdCgpOwogCiAJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7CkBAIC02OTAsNSArNzU5LDkgQEAKIAogCXV2X2NwdV9pbml0KCk7CiAJdXZfc2Npcl9yZWdpc3Rlcl9jcHVfbm90aWZpZXIoKTsKKwl1dl9yZWdpc3Rlcl9ubWlfbm90aWZpZXIoKTsKIAlwcm9jX21rZGlyKCJzZ2lfdXYiLCBOVUxMKTsKKworCS8qIHJlZ2lzdGVyIExlZ2FjeSBWR0EgSS9PIHJlZGlyZWN0aW9uIGhhbmRsZXIgKi8KKwlwY2lfcmVnaXN0ZXJfc2V0X3ZnYV9zdGF0ZSh1dl9zZXRfdmdhX3N0YXRlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwppbmRleCBiNWI2YjIzLi4wMzFhYTg4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCkBAIC0xOTkyLDggKzE5OTIsOCBAQAogCQlhcG1faW5mby5kaXNhYmxlZCA9IDE7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzIG1hY2hpbmUgZGV0ZWN0ZWQuICIKIAkJICAgICAgICJEaXNhYmxpbmcgQVBNLlxuIiwgZC0+aWRlbnQpOwotCQlwcmludGsoS0VSTl9JTkZPICJUaGlzIGJ1ZyBpcyBmaXhlZCBpbiBiaW9zIFAxNSB3aGljaCBpcyBhdmFpbGFibGUgZm9yIFxuIik7Ci0JCXByaW50ayhLRVJOX0lORk8gImRvd25sb2FkIGZyb20gc3VwcG9ydC5pbnRlbC5jb20gXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVGhpcyBidWcgaXMgZml4ZWQgaW4gYmlvcyBQMTUgd2hpY2ggaXMgYXZhaWxhYmxlIGZvclxuIik7CisJCXByaW50ayhLRVJOX0lORk8gImRvd25sb2FkIGZyb20gc3VwcG9ydC5pbnRlbC5jb21cbiIpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYmlvc191di5jCmluZGV4IGIwMjA2YTIuLjhiYzU3YmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Jpb3NfdXYuYwpAQCAtMTUsOCArMTUsOCBAQAogICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogIENvcHlyaWdodCAoYykgUnVzcyBBbmRlcnNvbgorICogIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChjKSBSdXNzIEFuZGVyc29uIDxyamFAc2dpLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CkBAIC0zMCw2ICszMCw3IEBACiBzNjQgdXZfYmlvc19jYWxsKGVudW0gdXZfYmlvc19jbWQgd2hpY2gsIHU2NCBhMSwgdTY0IGEyLCB1NjQgYTMsIHU2NCBhNCwgdTY0IGE1KQogewogCXN0cnVjdCB1dl9zeXN0YWIgKnRhYiA9ICZ1dl9zeXN0YWI7CisJczY0IHJldDsKIAogCWlmICghdGFiLT5mdW5jdGlvbikKIAkJLyoKQEAgLTM3LDkgKzM4LDExIEBACiAJCSAqLwogCQlyZXR1cm4gQklPU19TVEFUVVNfVU5JTVBMRU1FTlRFRDsKIAotCXJldHVybiBlZmlfY2FsbDYoKHZvaWQgKilfX3ZhKHRhYi0+ZnVuY3Rpb24pLAotCQkJCQkodTY0KXdoaWNoLCBhMSwgYTIsIGEzLCBhNCwgYTUpOworCXJldCA9IGVmaV9jYWxsNigodm9pZCAqKV9fdmEodGFiLT5mdW5jdGlvbiksICh1NjQpd2hpY2gsCisJCQlhMSwgYTIsIGEzLCBhNCwgYTUpOworCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1dl9iaW9zX2NhbGwpOwogCiBzNjQgdXZfYmlvc19jYWxsX2lycXNhdmUoZW51bSB1dl9iaW9zX2NtZCB3aGljaCwgdTY0IGExLCB1NjQgYTIsIHU2NCBhMywKIAkJCQkJdTY0IGE0LCB1NjQgYTUpCkBAIC03MywxMSArNzYsMTQgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHNuX2NvaGVyZW5jeV9pZCk7CiBsb25nIHNuX3JlZ2lvbl9zaXplOwogRVhQT1JUX1NZTUJPTF9HUEwoc25fcmVnaW9uX3NpemUpOworbG9uZyBzeXN0ZW1fc2VyaWFsX251bWJlcjsKK0VYUE9SVF9TWU1CT0xfR1BMKHN5c3RlbV9zZXJpYWxfbnVtYmVyKTsKIGludCB1dl90eXBlOworRVhQT1JUX1NZTUJPTF9HUEwodXZfdHlwZSk7CiAKIAogczY0IHV2X2Jpb3NfZ2V0X3NuX2luZm8oaW50IGZjLCBpbnQgKnV2dHlwZSwgbG9uZyAqcGFydGlkLCBsb25nICpjb2hlciwKLQkJbG9uZyAqcmVnaW9uKQorCQlsb25nICpyZWdpb24sIGxvbmcgKnNzbikKIHsKIAlzNjQgcmV0OwogCXU2NCB2MCwgdjE7CkBAIC05Nyw4ICsxMDMsMTEgQEAKIAkJKmNvaGVyID0gcGFydC5jb2hlcmVuY2VfaWQ7CiAJaWYgKHJlZ2lvbikKIAkJKnJlZ2lvbiA9IHBhcnQucmVnaW9uX3NpemU7CisJaWYgKHNzbikKKwkJKnNzbiA9IHYxOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1dl9iaW9zX2dldF9zbl9pbmZvKTsKIAogaW50CiB1dl9iaW9zX21xX3dhdGNobGlzdF9hbGxvYyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBtcV9zaXplLApAQCAtMTU0LDYgKzE2MywyNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXZfYmlvc19mcmVxX2Jhc2UpOwogCisvKgorICogdXZfYmlvc19zZXRfbGVnYWN5X3ZnYV90YXJnZXQgLSBTZXQgTGVnYWN5IFZHQSBJL08gVGFyZ2V0CisgKiBAZGVjb2RlOiB0cnVlIHRvIGVuYWJsZSB0YXJnZXQsIGZhbHNlIHRvIGRpc2FibGUgdGFyZ2V0CisgKiBAZG9tYWluOiBQQ0kgZG9tYWluIG51bWJlcgorICogQGJ1czogUENJIGJ1cyBudW1iZXIKKyAqCisgKiBSZXR1cm5zOgorICogICAgMDogU3VjY2VzcworICogICAgLUVJTlZBTDogSW52YWxpZCBkb21haW4gb3IgYnVzIG51bWJlcgorICogICAgLUVOT1NZUzogQ2FwYWJpbGl0eSBub3QgYXZhaWxhYmxlCisgKiAgICAtRUJVU1k6IExlZ2FjeSBWR0EgSS9PIGNhbm5vdCBiZSByZXRhcmdldGVkIGF0IHRoaXMgdGltZQorICovCitpbnQgdXZfYmlvc19zZXRfbGVnYWN5X3ZnYV90YXJnZXQoYm9vbCBkZWNvZGUsIGludCBkb21haW4sIGludCBidXMpCit7CisJcmV0dXJuIHV2X2Jpb3NfY2FsbChVVl9CSU9TX1NFVF9MRUdBQ1lfVkdBX1RBUkdFVCwKKwkJCQkodTY0KWRlY29kZSwgKHU2NClkb21haW4sICh1NjQpYnVzLCAwLCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV2X2Jpb3Nfc2V0X2xlZ2FjeV92Z2FfdGFyZ2V0KTsKKwogCiAjaWZkZWYgQ09ORklHX0VGSQogdm9pZCB1dl9iaW9zX2luaXQodm9pZCkKQEAgLTE4NSw0ICsyMTMsMyBAQAogCiB2b2lkIHV2X2Jpb3NfaW5pdCh2b2lkKSB7IH0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMKaW5kZXggNDY4NDg5Yi4uOTdhZDc5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWRkb25fY3B1aWRfZmVhdHVyZXMuYwpAQCAtMzIsNiArMzIsMTAgQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBfX2NwdWluaXRjb25zdCBjcHVpZF9iaXRzW10gPSB7CiAJCXsgWDg2X0ZFQVRVUkVfSURBLCBDUl9FQVgsIDEsIDB4MDAwMDAwMDYgfSwKIAkJeyBYODZfRkVBVFVSRV9BUkFULCBDUl9FQVgsIDIsIDB4MDAwMDAwMDYgfSwKKwkJeyBYODZfRkVBVFVSRV9OUFQsICAgQ1JfRURYLCAwLCAweDgwMDAwMDBhIH0sCisJCXsgWDg2X0ZFQVRVUkVfTEJSViwgIENSX0VEWCwgMSwgMHg4MDAwMDAwYSB9LAorCQl7IFg4Nl9GRUFUVVJFX1NWTUwsICBDUl9FRFgsIDIsIDB4ODAwMDAwMGEgfSwKKwkJeyBYODZfRkVBVFVSRV9OUklQUywgQ1JfRURYLCAzLCAweDgwMDAwMDBhIH0sCiAJCXsgMCwgMCwgMCwgMCB9CiAJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCBmMTI1ZTVjLi5kMzYwYjU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtODA2LDcgKzgwNiw3IEBACiBzdGF0aWMgdm9pZCBwb3dlcm5vd19rOF9hY3BpX3BzdF92YWx1ZXMoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCiAJCXVuc2lnbmVkIGludCBpbmRleCkKIHsKLQlhY3BpX2ludGVnZXIgY29udHJvbDsKKwl1NjQgY29udHJvbDsKIAogCWlmICghZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50IHx8IChjcHVfZmFtaWx5ID09IENQVV9IV19QU1RBVEUpKQogCQlyZXR1cm47CkBAIC04MjQsNyArODI0LDcgQEAKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlOwogCWludCByZXRfdmFsID0gLUVOT0RFVjsKLQlhY3BpX2ludGVnZXIgY29udHJvbCwgc3RhdHVzOworCXU2NCBjb250cm9sLCBzdGF0dXM7CiAKIAlpZiAoYWNwaV9wcm9jZXNzb3JfcmVnaXN0ZXJfcGVyZm9ybWFuY2UoJmRhdGEtPmFjcGlfZGF0YSwgZGF0YS0+Y3B1KSkgewogCQlkcHJpbnRrKCJyZWdpc3RlciBwZXJmb3JtYW5jZSBmYWlsZWQ6IGJhZCBBQ1BJIGRhdGFcbiIpOwpAQCAtOTQ4LDcgKzk0OCw3IEBACiAJCXUzMiBmaWQ7CiAJCXUzMiB2aWQ7CiAJCXUzMiBmcmVxLCBpbmRleDsKLQkJYWNwaV9pbnRlZ2VyIHN0YXR1cywgY29udHJvbDsKKwkJdTY0IHN0YXR1cywgY29udHJvbDsKIAogCQlpZiAoZGF0YS0+ZXh0dHlwZSkgewogCQkJc3RhdHVzID0gIGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uc3RhdHVzOwpAQCAtMTM1Niw2ICsxMzU2LDcgQEAKIAogCWtmcmVlKGRhdGEtPnBvd2Vybm93X3RhYmxlKTsKIAlrZnJlZShkYXRhKTsKKwlwZXJfY3B1KHBvd2Vybm93X2RhdGEsIHBvbC0+Y3B1KSA9IE5VTEw7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNzUsNyArMTM3Niw3IEBACiAJaW50IGVycjsKIAogCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOwogCiAJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgcXVlcnlfdmFsdWVzX29uX2NwdSwgJmVyciwgdHJ1ZSk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCmluZGV4IGZjNmM4ZWYuLmVkZGIxYmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxhc20vazguaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNkZWZpbmUgTFZMXzFfSU5TVAkxCiAjZGVmaW5lIExWTF8xX0RBVEEJMgpAQCAtMzEsNiArMzIsOCBAQAogCXNob3J0IHNpemU7CiB9OwogCisjZGVmaW5lIE1CKHgpCSgoeCkgKiAxMDI0KQorCiAvKiBBbGwgdGhlIGNhY2hlIGRlc2NyaXB0b3IgdHlwZXMgd2UgY2FyZSBhYm91dCAobm8gVExCIG9yCiAgICB0cmFjZSBjYWNoZSBlbnRyaWVzKSAqLwogCkBAIC00NCw5ICs0Nyw5IEBACiAJeyAweDBkLCBMVkxfMV9EQVRBLCAxNiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDIxLCBMVkxfMiwgICAgICAyNTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHgyMiwgTFZMXzMsICAgICAgNTEyIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDIzLCBMVkxfMywgICAgICAxMDI0IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDI1LCBMVkxfMywgICAgICAyMDQ4IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDI5LCBMVkxfMywgICAgICA0MDk2IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDIzLCBMVkxfMywgICAgICBNQigxKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHgyNSwgTFZMXzMsICAgICAgTUIoMikgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4MjksIExWTF8zLCAgICAgIE1CKDQpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDJjLCBMVkxfMV9EQVRBLCAzMiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDMwLCBMVkxfMV9JTlNULCAzMiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDM5LCBMVkxfMiwgICAgICAxMjggfSwJLyogNC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KQEAgLTU5LDE2ICs2MiwxNiBAQAogCXsgMHg0MSwgTFZMXzIsICAgICAgMTI4IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NDIsIExWTF8yLCAgICAgIDI1NiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDQzLCBMVkxfMiwgICAgICA1MTIgfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg0NCwgTFZMXzIsICAgICAgMTAyNCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDQ1LCBMVkxfMiwgICAgICAyMDQ4IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NDYsIExWTF8zLCAgICAgIDQwOTYgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg0NywgTFZMXzMsICAgICAgODE5MiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDQ5LCBMVkxfMywgICAgICA0MDk2IH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDRhLCBMVkxfMywgICAgICA2MTQ0IH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDRiLCBMVkxfMywgICAgICA4MTkyIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDRjLCBMVkxfMywgICAgIDEyMjg4IH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDRkLCBMVkxfMywgICAgIDE2Mzg0IH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDRlLCBMVkxfMiwgICAgICA2MTQ0IH0sCS8qIDI0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDQ0LCBMVkxfMiwgICAgICBNQigxKSB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCisJeyAweDQ1LCBMVkxfMiwgICAgICBNQigyKSB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCisJeyAweDQ2LCBMVkxfMywgICAgICBNQig0KSB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDQ3LCBMVkxfMywgICAgICBNQig4KSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDQ5LCBMVkxfMywgICAgICBNQig0KSB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0YSwgTFZMXzMsICAgICAgTUIoNikgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NGIsIExWTF8zLCAgICAgIE1CKDgpIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDRjLCBMVkxfMywgICAgICBNQigxMikgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NGQsIExWTF8zLCAgICAgIE1CKDE2KSB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0ZSwgTFZMXzIsICAgICAgTUIoNikgfSwJLyogMjQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NjAsIExWTF8xX0RBVEEsIDE2IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDY2LCBMVkxfMV9EQVRBLCA4IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDY3LCBMVkxfMV9EQVRBLCAxNiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwpAQCAtNzcsMzQgKzgwLDM0IEBACiAJeyAweDcxLCBMVkxfVFJBQ0UsICAxNiB9LAkvKiA4LXdheSBzZXQgYXNzb2MgKi8KIAl7IDB4NzIsIExWTF9UUkFDRSwgIDMyIH0sCS8qIDgtd2F5IHNldCBhc3NvYyAqLwogCXsgMHg3MywgTFZMX1RSQUNFLCAgNjQgfSwJLyogOC13YXkgc2V0IGFzc29jICovCi0JeyAweDc4LCBMVkxfMiwgICAgMTAyNCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDc5LCBMVkxfMiwgICAgIDEyOCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg3YSwgTFZMXzIsICAgICAyNTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4N2IsIExWTF8yLCAgICAgNTEyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDdjLCBMVkxfMiwgICAgMTAyNCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg3ZCwgTFZMXzIsICAgIDIwNDggfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg3ZiwgTFZMXzIsICAgICA1MTIgfSwJLyogMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg4MiwgTFZMXzIsICAgICAyNTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg4MywgTFZMXzIsICAgICA1MTIgfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg4NCwgTFZMXzIsICAgIDEwMjQgfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg4NSwgTFZMXzIsICAgIDIwNDggfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg4NiwgTFZMXzIsICAgICA1MTIgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg4NywgTFZMXzIsICAgIDEwMjQgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhkMCwgTFZMXzMsICAgICA1MTIgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhkMSwgTFZMXzMsICAgIDEwMjQgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhkMiwgTFZMXzMsICAgIDIwNDggfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhkNiwgTFZMXzMsICAgIDEwMjQgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhkNywgTFZMXzMsICAgIDIwNDggfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhkOCwgTFZMXzMsICAgIDQwOTYgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZGMsIExWTF8zLCAgICAyMDQ4IH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGRkLCBMVkxfMywgICAgNDA5NiB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhkZSwgTFZMXzMsICAgIDgxOTIgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZTIsIExWTF8zLCAgICAyMDQ4IH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGUzLCBMVkxfMywgICAgNDA5NiB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhlNCwgTFZMXzMsICAgIDgxOTIgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZWEsIExWTF8zLCAgICAxMjI4OCB9LAkvKiAyNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhlYiwgTFZMXzMsICAgIDE4NDMyIH0sCS8qIDI0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGVjLCBMVkxfMywgICAgMjQ1NzYgfSwJLyogMjQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NzgsIExWTF8yLCAgICAgIE1CKDEpIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NzksIExWTF8yLCAgICAgIDEyOCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg3YSwgTFZMXzIsICAgICAgMjU2IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDdiLCBMVkxfMiwgICAgICA1MTIgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4N2MsIExWTF8yLCAgICAgIE1CKDEpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDdkLCBMVkxfMiwgICAgICBNQigyKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDdmLCBMVkxfMiwgICAgICA1MTIgfSwJLyogMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg4MiwgTFZMXzIsICAgICAgMjU2IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ODMsIExWTF8yLCAgICAgIDUxMiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCisJeyAweDg0LCBMVkxfMiwgICAgICBNQigxKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCisJeyAweDg1LCBMVkxfMiwgICAgICBNQigyKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCisJeyAweDg2LCBMVkxfMiwgICAgICA1MTIgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg4NywgTFZMXzIsICAgICAgTUIoMSkgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkMCwgTFZMXzMsICAgICAgNTEyIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZDEsIExWTF8zLCAgICAgIE1CKDEpIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZDIsIExWTF8zLCAgICAgIE1CKDIpIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZDYsIExWTF8zLCAgICAgIE1CKDEpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZDcsIExWTF8zLCAgICAgIE1CKDIpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZDgsIExWTF8zLCAgICAgIE1CKDQpIH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGRjLCBMVkxfMywgICAgICBNQigyKSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkZCwgTFZMXzMsICAgICAgTUIoNCkgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZGUsIExWTF8zLCAgICAgIE1CKDgpIH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGUyLCBMVkxfMywgICAgICBNQigyKSB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhlMywgTFZMXzMsICAgICAgTUIoNCkgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZTQsIExWTF8zLCAgICAgIE1CKDgpIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGVhLCBMVkxfMywgICAgICBNQigxMikgfSwJLyogMjQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZWIsIExWTF8zLCAgICAgIE1CKDE4KSB9LAkvKiAyNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhlYywgTFZMXzMsICAgICAgTUIoMjQpIH0sCS8qIDI0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDAwLCAwLCAwfQogfTsKIApAQCAtMTUwLDcgKzE1Myw4IEBACiAJdW5pb24gX2NwdWlkNF9sZWFmX2VieCBlYng7CiAJdW5pb24gX2NwdWlkNF9sZWFmX2VjeCBlY3g7CiAJdW5zaWduZWQgbG9uZyBzaXplOwotCXVuc2lnbmVkIGxvbmcgY2FuX2Rpc2FibGU7CisJYm9vbCBjYW5fZGlzYWJsZTsKKwl1bnNpZ25lZCBpbnQgbDNfaW5kaWNlczsKIAlERUNMQVJFX0JJVE1BUChzaGFyZWRfY3B1X21hcCwgTlJfQ1BVUyk7CiB9OwogCkBAIC0xNjAsNyArMTY0LDggQEAKIAl1bmlvbiBfY3B1aWQ0X2xlYWZfZWJ4IGVieDsKIAl1bmlvbiBfY3B1aWQ0X2xlYWZfZWN4IGVjeDsKIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0JdW5zaWduZWQgbG9uZyBjYW5fZGlzYWJsZTsKKwlib29sIGNhbl9kaXNhYmxlOworCXVuc2lnbmVkIGludCBsM19pbmRpY2VzOwogfTsKIAogdW5zaWduZWQgc2hvcnQJCQludW1fY2FjaGVfbGVhdmVzOwpAQCAtMjkwLDYgKzI5NSwzNiBAQAogCQkoZWJ4LT5zcGxpdC53YXlzX29mX2Fzc29jaWF0aXZpdHkgKyAxKSAtIDE7CiB9CiAKK3N0cnVjdCBfY2FjaGVfYXR0ciB7CisJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgX2NwdWlkNF9pbmZvICosIGNoYXIgKik7CisJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgX2NwdWlkNF9pbmZvICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90IGNvdW50KTsKK307CisKKyNpZmRlZiBDT05GSUdfQ1BVX1NVUF9BTUQKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19jcHVpbml0IGFtZF9jYWxjX2wzX2luZGljZXModm9pZCkKK3sKKwkvKgorCSAqIFdlJ3JlIGNhbGxlZCBvdmVyIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSgpIGFuZCB0aGVyZWZvcmUKKwkgKiBhcmUgb24gdGhlIGNvcnJlY3QgY3B1LgorCSAqLworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IG5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBub2RlX3RvX2s4X25iX21pc2Mobm9kZSk7CisJdW5zaWduZWQgaW50IHNjMCwgc2MxLCBzYzIsIHNjMzsKKwl1MzIgdmFsID0gMDsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4MUM0LCAmdmFsKTsKKworCS8qIGNhbGN1bGF0ZSBzdWJjYWNoZSBzaXplcyAqLworCXNjMCA9ICEodmFsICYgQklUKDApKTsKKwlzYzEgPSAhKHZhbCAmIEJJVCg0KSk7CisJc2MyID0gISh2YWwgJiBCSVQoOCkpICArICEodmFsICYgQklUKDkpKTsKKwlzYzMgPSAhKHZhbCAmIEJJVCgxMikpICsgISh2YWwgJiBCSVQoMTMpKTsKKworCXJldHVybiAobWF4KG1heChtYXgoc2MwLCBzYzEpLCBzYzIpLCBzYzMpIDw8IDEwKSAtIDE7Cit9CisKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdAogYW1kX2NoZWNrX2wzX2Rpc2FibGUoaW50IGluZGV4LCBzdHJ1Y3QgX2NwdWlkNF9pbmZvX3JlZ3MgKnRoaXNfbGVhZikKIHsKQEAgLTI5OSwxMyArMzM0LDEwNCBAQAogCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweDExKQogCQlyZXR1cm47CiAKLQkvKiBzZWUgZXJyYXR1bSAjMzgyICovCi0JaWYgKChib290X2NwdV9kYXRhLng4NiA9PSAweDEwKSAmJiAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPCAweDgpKQorCS8qIHNlZSBlcnJhdGEgIzM4MiBhbmQgIzM4OCAqLworCWlmICgoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHgxMCkgJiYKKwkgICAgKChib290X2NwdV9kYXRhLng4Nl9tb2RlbCA8IDB4OCkgfHwKKwkgICAgIChib290X2NwdV9kYXRhLng4Nl9tYXNrICA8IDB4MSkpKQogCQlyZXR1cm47CiAKLQl0aGlzX2xlYWYtPmNhbl9kaXNhYmxlID0gMTsKKwl0aGlzX2xlYWYtPmNhbl9kaXNhYmxlID0gdHJ1ZTsKKwl0aGlzX2xlYWYtPmwzX2luZGljZXMgID0gYW1kX2NhbGNfbDNfaW5kaWNlcygpOwogfQogCitzdGF0aWMgc3NpemVfdCBzaG93X2NhY2hlX2Rpc2FibGUoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLCBjaGFyICpidWYsCisJCQkJICB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJaW50IGNwdSA9IGNwdW1hc2tfZmlyc3QodG9fY3B1bWFzayh0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKSk7CisJaW50IG5vZGUgPSBhbWRfZ2V0X25iX2lkKGNwdSk7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IG5vZGVfdG9fazhfbmJfbWlzYyhub2RlKTsKKwl1bnNpZ25lZCBpbnQgcmVnID0gMDsKKworCWlmICghdGhpc19sZWFmLT5jYW5fZGlzYWJsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDFCQyArIGluZGV4ICogNCwgJnJlZyk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDh4XG4iLCByZWcpOworfQorCisjZGVmaW5lIFNIT1dfQ0FDSEVfRElTQUJMRShpbmRleCkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCitzaG93X2NhY2hlX2Rpc2FibGVfIyNpbmRleChzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsIGNoYXIgKmJ1ZikJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gc2hvd19jYWNoZV9kaXNhYmxlKHRoaXNfbGVhZiwgYnVmLCBpbmRleCk7CQlcCit9CitTSE9XX0NBQ0hFX0RJU0FCTEUoMCkKK1NIT1dfQ0FDSEVfRElTQUJMRSgxKQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9jYWNoZV9kaXNhYmxlKHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwKKwljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgaW50IGluZGV4KQoreworCWludCBjcHUgPSBjcHVtYXNrX2ZpcnN0KHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkpOworCWludCBub2RlID0gYW1kX2dldF9uYl9pZChjcHUpOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBub2RlX3RvX2s4X25iX21pc2Mobm9kZSk7CisJdW5zaWduZWQgbG9uZyB2YWwgPSAwOworCisjZGVmaW5lIFNVQkNBQ0hFX01BU0sJKDNVTCA8PCAyMCkKKyNkZWZpbmUgU1VCQ0FDSEVfSU5ERVgJMHhmZmYKKworCWlmICghdGhpc19sZWFmLT5jYW5fZGlzYWJsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGRvIG5vdCBhbGxvdyB3cml0ZXMgb3V0c2lkZSBvZiBhbGxvd2VkIGJpdHMgKi8KKwlpZiAoKHZhbCAmIH4oU1VCQ0FDSEVfTUFTSyB8IFNVQkNBQ0hFX0lOREVYKSkgfHwKKwkgICAgKCh2YWwgJiBTVUJDQUNIRV9JTkRFWCkgPiB0aGlzX2xlYWYtPmwzX2luZGljZXMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCB8PSBCSVQoMzApOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDFCQyArIGluZGV4ICogNCwgdmFsKTsKKwkvKgorCSAqIFdlIG5lZWQgdG8gV0JJTlZEIG9uIGEgY29yZSBvbiB0aGUgbm9kZSBjb250YWluaW5nIHRoZSBMMyBjYWNoZSB3aGljaAorCSAqIGluZGljZXMgd2UgZGlzYWJsZSB0aGVyZWZvcmUgYSBzaW1wbGUgd2JpbnZkKCkgaXMgbm90IHN1ZmZpY2llbnQuCisJICovCisJd2JpbnZkX29uX2NwdShjcHUpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDFCQyArIGluZGV4ICogNCwgdmFsIHwgQklUKDMxKSk7CisJcmV0dXJuIGNvdW50OworfQorCisjZGVmaW5lIFNUT1JFX0NBQ0hFX0RJU0FCTEUoaW5kZXgpCQkJCQlcCitzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAorc3RvcmVfY2FjaGVfZGlzYWJsZV8jI2luZGV4KHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwJCVwKKwkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJCVwKK3sJCQkJCQkJCQlcCisJcmV0dXJuIHN0b3JlX2NhY2hlX2Rpc2FibGUodGhpc19sZWFmLCBidWYsIGNvdW50LCBpbmRleCk7CVwKK30KK1NUT1JFX0NBQ0hFX0RJU0FCTEUoMCkKK1NUT1JFX0NBQ0hFX0RJU0FCTEUoMSkKKworc3RhdGljIHN0cnVjdCBfY2FjaGVfYXR0ciBjYWNoZV9kaXNhYmxlXzAgPSBfX0FUVFIoY2FjaGVfZGlzYWJsZV8wLCAwNjQ0LAorCQlzaG93X2NhY2hlX2Rpc2FibGVfMCwgc3RvcmVfY2FjaGVfZGlzYWJsZV8wKTsKK3N0YXRpYyBzdHJ1Y3QgX2NhY2hlX2F0dHIgY2FjaGVfZGlzYWJsZV8xID0gX19BVFRSKGNhY2hlX2Rpc2FibGVfMSwgMDY0NCwKKwkJc2hvd19jYWNoZV9kaXNhYmxlXzEsIHN0b3JlX2NhY2hlX2Rpc2FibGVfMSk7CisKKyNlbHNlCS8qIENPTkZJR19DUFVfU1VQX0FNRCAqLworc3RhdGljIHZvaWQgX19jcHVpbml0CithbWRfY2hlY2tfbDNfZGlzYWJsZShpbnQgaW5kZXgsIHN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyAqdGhpc19sZWFmKQoreworfTsKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX1NVUF9BTUQgKi8KKwogc3RhdGljIGludAogX19jcHVpbml0IGNwdWlkNF9jYWNoZV9sb29rdXBfcmVncyhpbnQgaW5kZXgsCiAJCQkJICAgc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICp0aGlzX2xlYWYpCkBAIC03MTEsODIgKzgzNyw2IEBACiAjZGVmaW5lIHRvX29iamVjdChrKQljb250YWluZXJfb2Yoaywgc3RydWN0IF9pbmRleF9rb2JqZWN0LCBrb2JqKQogI2RlZmluZSB0b19hdHRyKGEpCWNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgX2NhY2hlX2F0dHIsIGF0dHIpCiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfY2FjaGVfZGlzYWJsZShzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsIGNoYXIgKmJ1ZiwKLQkJCQkgIHVuc2lnbmVkIGludCBpbmRleCkKLXsKLQlpbnQgY3B1ID0gY3B1bWFza19maXJzdCh0b19jcHVtYXNrKHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApKTsKLQlpbnQgbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IG5vZGVfdG9fazhfbmJfbWlzYyhub2RlKTsKLQl1bnNpZ25lZCBpbnQgcmVnID0gMDsKLQotCWlmICghdGhpc19sZWFmLT5jYW5fZGlzYWJsZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWRldikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDFCQyArIGluZGV4ICogNCwgJnJlZyk7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXhcbiIsIHJlZyk7Ci19Ci0KLSNkZWZpbmUgU0hPV19DQUNIRV9ESVNBQkxFKGluZGV4KQkJCQkJXAotc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXNob3dfY2FjaGVfZGlzYWJsZV8jI2luZGV4KHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwgY2hhciAqYnVmKSAgCVwKLXsJCQkJCQkJCQlcCi0JcmV0dXJuIHNob3dfY2FjaGVfZGlzYWJsZSh0aGlzX2xlYWYsIGJ1ZiwgaW5kZXgpOwkJXAotfQotU0hPV19DQUNIRV9ESVNBQkxFKDApCi1TSE9XX0NBQ0hFX0RJU0FCTEUoMSkKLQotc3RhdGljIHNzaXplX3Qgc3RvcmVfY2FjaGVfZGlzYWJsZShzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsCi0JY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGludCBpbmRleCkKLXsKLQlpbnQgY3B1ID0gY3B1bWFza19maXJzdCh0b19jcHVtYXNrKHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApKTsKLQlpbnQgbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IG5vZGVfdG9fazhfbmJfbWlzYyhub2RlKTsKLQl1bnNpZ25lZCBsb25nIHZhbCA9IDA7Ci0JdW5zaWduZWQgaW50IHNjcnViYmVyID0gMDsKLQotCWlmICghdGhpc19sZWFmLT5jYW5fZGlzYWJsZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpZiAoIWRldikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXZhbCB8PSAweGMwMDAwMDAwOwotCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg1OCwgJnNjcnViYmVyKTsKLQlzY3J1YmJlciAmPSB+MHgxZjAwMDAwMDsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg1OCwgc2NydWJiZXIpOwotCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4MUJDICsgaW5kZXggKiA0LCB2YWwgJiB+MHg0MDAwMDAwMCk7Ci0Jd2JpbnZkKCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4MUJDICsgaW5kZXggKiA0LCB2YWwpOwotCXJldHVybiBjb3VudDsKLX0KLQotI2RlZmluZSBTVE9SRV9DQUNIRV9ESVNBQkxFKGluZGV4KQkJCQkJXAotc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXN0b3JlX2NhY2hlX2Rpc2FibGVfIyNpbmRleChzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsCSAgICAgCVwKLQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJCVwKLXsJCQkJCQkJCQlcCi0JcmV0dXJuIHN0b3JlX2NhY2hlX2Rpc2FibGUodGhpc19sZWFmLCBidWYsIGNvdW50LCBpbmRleCk7CVwKLX0KLVNUT1JFX0NBQ0hFX0RJU0FCTEUoMCkKLVNUT1JFX0NBQ0hFX0RJU0FCTEUoMSkKLQotc3RydWN0IF9jYWNoZV9hdHRyIHsKLQlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Ci0Jc3NpemVfdCAoKnNob3cpKHN0cnVjdCBfY3B1aWQ0X2luZm8gKiwgY2hhciAqKTsKLQlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBfY3B1aWQ0X2luZm8gKiwgY29uc3QgY2hhciAqLCBzaXplX3QgY291bnQpOwotfTsKLQogI2RlZmluZSBkZWZpbmVfb25lX3JvKF9uYW1lKSBcCiBzdGF0aWMgc3RydWN0IF9jYWNoZV9hdHRyIF9uYW1lID0gXAogCV9fQVRUUihfbmFtZSwgMDQ0NCwgc2hvd18jI19uYW1lLCBOVUxMKQpAQCAtODAxLDIzICs4NTEsMjggQEAKIGRlZmluZV9vbmVfcm8oc2hhcmVkX2NwdV9tYXApOwogZGVmaW5lX29uZV9ybyhzaGFyZWRfY3B1X2xpc3QpOwogCi1zdGF0aWMgc3RydWN0IF9jYWNoZV9hdHRyIGNhY2hlX2Rpc2FibGVfMCA9IF9fQVRUUihjYWNoZV9kaXNhYmxlXzAsIDA2NDQsCi0JCXNob3dfY2FjaGVfZGlzYWJsZV8wLCBzdG9yZV9jYWNoZV9kaXNhYmxlXzApOwotc3RhdGljIHN0cnVjdCBfY2FjaGVfYXR0ciBjYWNoZV9kaXNhYmxlXzEgPSBfX0FUVFIoY2FjaGVfZGlzYWJsZV8xLCAwNjQ0LAotCQlzaG93X2NhY2hlX2Rpc2FibGVfMSwgc3RvcmVfY2FjaGVfZGlzYWJsZV8xKTsKKyNkZWZpbmUgREVGQVVMVF9TWVNGU19DQUNIRV9BVFRSUwlcCisJJnR5cGUuYXR0ciwJCQlcCisJJmxldmVsLmF0dHIsCQkJXAorCSZjb2hlcmVuY3lfbGluZV9zaXplLmF0dHIsCVwKKwkmcGh5c2ljYWxfbGluZV9wYXJ0aXRpb24uYXR0ciwJXAorCSZ3YXlzX29mX2Fzc29jaWF0aXZpdHkuYXR0ciwJXAorCSZudW1iZXJfb2Zfc2V0cy5hdHRyLAkJXAorCSZzaXplLmF0dHIsCQkJXAorCSZzaGFyZWRfY3B1X21hcC5hdHRyLAkJXAorCSZzaGFyZWRfY3B1X2xpc3QuYXR0cgogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGVmYXVsdF9hdHRyc1tdID0gewotCSZ0eXBlLmF0dHIsCi0JJmxldmVsLmF0dHIsCi0JJmNvaGVyZW5jeV9saW5lX3NpemUuYXR0ciwKLQkmcGh5c2ljYWxfbGluZV9wYXJ0aXRpb24uYXR0ciwKLQkmd2F5c19vZl9hc3NvY2lhdGl2aXR5LmF0dHIsCi0JJm51bWJlcl9vZl9zZXRzLmF0dHIsCi0JJnNpemUuYXR0ciwKLQkmc2hhcmVkX2NwdV9tYXAuYXR0ciwKLQkmc2hhcmVkX2NwdV9saXN0LmF0dHIsCisJREVGQVVMVF9TWVNGU19DQUNIRV9BVFRSUywKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGVmYXVsdF9sM19hdHRyc1tdID0geworCURFRkFVTFRfU1lTRlNfQ0FDSEVfQVRUUlMsCisjaWZkZWYgQ09ORklHX0NQVV9TVVBfQU1ECiAJJmNhY2hlX2Rpc2FibGVfMC5hdHRyLAogCSZjYWNoZV9kaXNhYmxlXzEuYXR0ciwKKyNlbmRpZgogCU5VTEwKIH07CiAKQEAgLTkwOCw2ICs5NjMsNyBAQAogCXVuc2lnbmVkIGludCBjcHUgPSBzeXNfZGV2LT5pZDsKIAl1bnNpZ25lZCBsb25nIGksIGo7CiAJc3RydWN0IF9pbmRleF9rb2JqZWN0ICp0aGlzX29iamVjdDsKKwlzdHJ1Y3QgX2NwdWlkNF9pbmZvICAgKnRoaXNfbGVhZjsKIAlpbnQgcmV0dmFsOwogCiAJcmV0dmFsID0gY3B1aWQ0X2NhY2hlX3N5c2ZzX2luaXQoY3B1KTsKQEAgLTkyNiw2ICs5ODIsMTQgQEAKIAkJdGhpc19vYmplY3QgPSBJTkRFWF9LT0JKRUNUX1BUUihjcHUsIGkpOwogCQl0aGlzX29iamVjdC0+Y3B1ID0gY3B1OwogCQl0aGlzX29iamVjdC0+aW5kZXggPSBpOworCisJCXRoaXNfbGVhZiA9IENQVUlENF9JTkZPX0lEWChjcHUsIGkpOworCisJCWlmICh0aGlzX2xlYWYtPmNhbl9kaXNhYmxlKQorCQkJa3R5cGVfY2FjaGUuZGVmYXVsdF9hdHRycyA9IGRlZmF1bHRfbDNfYXR0cnM7CisJCWVsc2UKKwkJCWt0eXBlX2NhY2hlLmRlZmF1bHRfYXR0cnMgPSBkZWZhdWx0X2F0dHJzOworCiAJCXJldHZhbCA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKCYodGhpc19vYmplY3QtPmtvYmopLAogCQkJCQkgICAgICAma3R5cGVfY2FjaGUsCiAJCQkJCSAgICAgIHBlcl9jcHUoaWNpX2NhY2hlX2tvYmplY3QsIGNwdSksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvTWFrZWZpbGUKaW5kZXggZjQzNjFiNS4uYWQ5ZTVlZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9NYWtlZmlsZQpAQCAtMSwzICsxLDMgQEAKLW9iai15CQk6PSBtYWluLm8gaWYubyBnZW5lcmljLm8gc3RhdGUubyBjbGVhbnVwLm8KK29iai15CQk6PSBtYWluLm8gaWYubyBnZW5lcmljLm8gY2xlYW51cC5vCiBvYmotJChDT05GSUdfWDg2XzMyKSArPSBhbWQubyBjeXJpeC5vIGNlbnRhdXIubwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvYW1kLmMKaW5kZXggMzNhZjE0MS4uOTJiYTljZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9hbWQuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbXRycl9vcHMgYW1kX210cnJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtdHJyX29wcyBhbWRfbXRycl9vcHMgPSB7CiAJLnZlbmRvciAgICAgICAgICAgID0gWDg2X1ZFTkRPUl9BTUQsCiAJLnNldCAgICAgICAgICAgICAgID0gYW1kX3NldF9tdHJyLAogCS5nZXQgICAgICAgICAgICAgICA9IGFtZF9nZXRfbXRyciwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jZW50YXVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2VudGF1ci5jCmluZGV4IGRlODlmMTQuLjMxNmZlM2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jZW50YXVyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NlbnRhdXIuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbXRycl9vcHMgY2VudGF1cl9tdHJyX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRycl9vcHMgY2VudGF1cl9tdHJyX29wcyA9IHsKIAkudmVuZG9yICAgICAgICAgICAgPSBYODZfVkVORE9SX0NFTlRBVVIsCiAJLnNldCAgICAgICAgICAgICAgID0gY2VudGF1cl9zZXRfbWNyLAogCS5nZXQgICAgICAgICAgICAgICA9IGNlbnRhdXJfZ2V0X21jciwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jeXJpeC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2N5cml4LmMKaW5kZXggMjI4ZDk4Mi4uNjhhMzM0MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2N5cml4LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2N5cml4LmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCXBvc3Rfc2V0KCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbXRycl9vcHMgY3lyaXhfbXRycl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG10cnJfb3BzIGN5cml4X210cnJfb3BzID0gewogCS52ZW5kb3IgICAgICAgICAgICA9IFg4Nl9WRU5ET1JfQ1lSSVgsCiAJLnNldF9hbGwJICAgPSBjeXJpeF9zZXRfYWxsLAogCS5zZXQgICAgICAgICAgICAgICA9IGN5cml4X3NldF9hcnIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYwppbmRleCA1NWRhMGM1Li45YWE1ZGM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCQl0bXAgfD0gfigoMTw8KGhpIC0gMSkpIC0gMSk7CiAKIAkJaWYgKHRtcCAhPSBtYXNrX2xvKSB7Ci0JCQlXQVJOX09OQ0UoMSwgS0VSTl9JTkZPICJtdHJyOiB5b3VyIEJJT1MgaGFzIHNldCB1cCBhbiBpbmNvcnJlY3QgbWFzaywgZml4aW5nIGl0IHVwLlxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJtdHJyOiB5b3VyIEJJT1MgaGFzIGNvbmZpZ3VyZWQgYW4gaW5jb3JyZWN0IG1hc2ssIGZpeGluZyBpdC5cbiIpOwogCQkJbWFza19sbyA9IHRtcDsKIAkJfQogCX0KQEAgLTU3MCw3ICs1NzAsNyBAQAogCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNyNDsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2V0X2F0b21pY2l0eV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHNldF9hdG9taWNpdHlfbG9jayk7CiAKIC8qCiAgKiBTaW5jZSB3ZSBhcmUgZGlzYWJsaW5nIHRoZSBjYWNoZSBkb24ndCBhbGxvdyBhbnkgaW50ZXJydXB0cywKQEAgLTU5MCw3ICs1OTAsNyBAQAogCSAqIGNoYW5nZXMgdG8gdGhlIHdheSB0aGUga2VybmVsIGJvb3RzCiAJICovCiAKLQlzcGluX2xvY2soJnNldF9hdG9taWNpdHlfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmc2V0X2F0b21pY2l0eV9sb2NrKTsKIAogCS8qIEVudGVyIHRoZSBuby1maWxsIChDRD0xLCBOVz0wKSBjYWNoZSBtb2RlIGFuZCBmbHVzaCBjYWNoZXMuICovCiAJY3IwID0gcmVhZF9jcjAoKSB8IFg4Nl9DUjBfQ0Q7CkBAIC02MjcsNyArNjI3LDcgQEAKIAkvKiBSZXN0b3JlIHZhbHVlIG9mIENSNCAqLwogCWlmIChjcHVfaGFzX3BnZSkKIAkJd3JpdGVfY3I0KGNyNCk7Ci0Jc3Bpbl91bmxvY2soJnNldF9hdG9taWNpdHlfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZzZXRfYXRvbWljaXR5X2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBnZW5lcmljX3NldF9hbGwodm9pZCkKQEAgLTc1Miw3ICs3NTIsNyBAQAogLyoKICAqIEdlbmVyaWMgc3RydWN0dXJlLi4uCiAgKi8KLXN0cnVjdCBtdHJyX29wcyBnZW5lcmljX210cnJfb3BzID0geworY29uc3Qgc3RydWN0IG10cnJfb3BzIGdlbmVyaWNfbXRycl9vcHMgPSB7CiAJLnVzZV9pbnRlbF9pZgkJPSAxLAogCS5zZXRfYWxsCQk9IGdlbmVyaWNfc2V0X2FsbCwKIAkuZ2V0CQkJPSBnZW5lcmljX2dldF9tdHJyLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKaW5kZXggODRlODNkZS4uZmU0NjIyZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCkBAIC02MCwxNCArNjAsMTQgQEAKIHU2NCBzaXplX29yX21hc2ssIHNpemVfYW5kX21hc2s7CiBzdGF0aWMgYm9vbCBtdHJyX2Fwc19kZWxheWVkX2luaXQ7CiAKLXN0YXRpYyBzdHJ1Y3QgbXRycl9vcHMgKm10cnJfb3BzW1g4Nl9WRU5ET1JfTlVNXTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRycl9vcHMgKm10cnJfb3BzW1g4Nl9WRU5ET1JfTlVNXTsKIAotc3RydWN0IG10cnJfb3BzICptdHJyX2lmOworY29uc3Qgc3RydWN0IG10cnJfb3BzICptdHJyX2lmOwogCiBzdGF0aWMgdm9pZCBzZXRfbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBtdHJyX3R5cGUgdHlwZSk7CiAKLXZvaWQgc2V0X210cnJfb3BzKHN0cnVjdCBtdHJyX29wcyAqb3BzKQordm9pZCBzZXRfbXRycl9vcHMoY29uc3Qgc3RydWN0IG10cnJfb3BzICpvcHMpCiB7CiAJaWYgKG9wcy0+dmVuZG9yICYmIG9wcy0+dmVuZG9yIDwgWDg2X1ZFTkRPUl9OVU0pCiAJCW10cnJfb3BzW29wcy0+dmVuZG9yXSA9IG9wczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tdHJyLmggYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oCmluZGV4IGE1MDFkZWUuLmRmNWU0MWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tdHJyLmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL210cnIuaApAQCAtMzIsNyArMzIsNyBAQAogZXh0ZXJuIGludCBnZW5lcmljX3ZhbGlkYXRlX2FkZF9wYWdlKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSAgICAgdW5zaWduZWQgaW50IHR5cGUpOwogCi1leHRlcm4gc3RydWN0IG10cnJfb3BzIGdlbmVyaWNfbXRycl9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IG10cnJfb3BzIGdlbmVyaWNfbXRycl9vcHM7CiAKIGV4dGVybiBpbnQgcG9zaXRpdmVfaGF2ZV93cmNvbWIodm9pZCk7CiAKQEAgLTUzLDEwICs1MywxMCBAQAogCQl1MzIgYmFzZV9sbywgdTMyIGJhc2VfaGksIHUzMiBtYXNrX2xvLCB1MzIgbWFza19oaSk7CiB2b2lkIGdldF9tdHJyX3N0YXRlKHZvaWQpOwogCi1leHRlcm4gdm9pZCBzZXRfbXRycl9vcHMoc3RydWN0IG10cnJfb3BzICpvcHMpOworZXh0ZXJuIHZvaWQgc2V0X210cnJfb3BzKGNvbnN0IHN0cnVjdCBtdHJyX29wcyAqb3BzKTsKIAogZXh0ZXJuIHU2NCBzaXplX29yX21hc2ssIHNpemVfYW5kX21hc2s7Ci1leHRlcm4gc3RydWN0IG10cnJfb3BzICptdHJyX2lmOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBtdHJyX29wcyAqbXRycl9pZjsKIAogI2RlZmluZSBpc19jcHUodm5kKQkobXRycl9pZiAmJiBtdHJyX2lmLT52ZW5kb3IgPT0gWDg2X1ZFTkRPUl8jI3ZuZCkKICNkZWZpbmUgdXNlX2ludGVsKCkJKG10cnJfaWYgJiYgbXRycl9pZi0+dXNlX2ludGVsX2lmID09IDEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvc3RhdGUuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9zdGF0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmM4MGI0Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9zdGF0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWN5cml4Lmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgotI2luY2x1ZGUgPGFzbS9tdHJyLmg+Ci0jaW5jbHVkZSA8YXNtL21zci5oPgotCi0jaW5jbHVkZSAibXRyci5oIgotCi0vKiBQdXQgdGhlIHByb2Nlc3NvciBpbnRvIGEgc3RhdGUgd2hlcmUgTVRSUnMgY2FuIGJlIHNhZmVseSBzZXQgKi8KLXZvaWQgc2V0X210cnJfcHJlcGFyZV9zYXZlKHN0cnVjdCBzZXRfbXRycl9jb250ZXh0ICpjdHh0KQotewotCXVuc2lnbmVkIGludCBjcjA7Ci0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMgbG9jYWxseSAqLwotCWxvY2FsX2lycV9zYXZlKGN0eHQtPmZsYWdzKTsKLQotCWlmICh1c2VfaW50ZWwoKSB8fCBpc19jcHUoQ1lSSVgpKSB7Ci0KLQkJLyogU2F2ZSB2YWx1ZSBvZiBDUjQgYW5kIGNsZWFyIFBhZ2UgR2xvYmFsIEVuYWJsZSAoYml0IDcpICovCi0JCWlmIChjcHVfaGFzX3BnZSkgewotCQkJY3R4dC0+Y3I0dmFsID0gcmVhZF9jcjQoKTsKLQkJCXdyaXRlX2NyNChjdHh0LT5jcjR2YWwgJiB+WDg2X0NSNF9QR0UpOwotCQl9Ci0KLQkJLyoKLQkJICogRGlzYWJsZSBhbmQgZmx1c2ggY2FjaGVzLiBOb3RlIHRoYXQgd2JpbnZkIGZsdXNoZXMgdGhlIFRMQnMKLQkJICogYXMgYSBzaWRlLWVmZmVjdAotCQkgKi8KLQkJY3IwID0gcmVhZF9jcjAoKSB8IFg4Nl9DUjBfQ0Q7Ci0JCXdiaW52ZCgpOwotCQl3cml0ZV9jcjAoY3IwKTsKLQkJd2JpbnZkKCk7Ci0KLQkJaWYgKHVzZV9pbnRlbCgpKSB7Ci0JCQkvKiBTYXZlIE1UUlIgc3RhdGUgKi8KLQkJCXJkbXNyKE1TUl9NVFJSZGVmVHlwZSwgY3R4dC0+ZGVmdHlwZV9sbywgY3R4dC0+ZGVmdHlwZV9oaSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogQ3lyaXggQVJScyAtCi0JCQkgKiBldmVyeXRoaW5nIGVsc2Ugd2VyZSBleGNsdWRlZCBhdCB0aGUgdG9wCi0JCQkgKi8KLQkJCWN0eHQtPmNjcjMgPSBnZXRDeDg2KENYODZfQ0NSMyk7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgc2V0X210cnJfY2FjaGVfZGlzYWJsZShzdHJ1Y3Qgc2V0X210cnJfY29udGV4dCAqY3R4dCkKLXsKLQlpZiAodXNlX2ludGVsKCkpIHsKLQkJLyogRGlzYWJsZSBNVFJScywgYW5kIHNldCB0aGUgZGVmYXVsdCB0eXBlIHRvIHVuY2FjaGVkICovCi0JCW10cnJfd3Jtc3IoTVNSX01UUlJkZWZUeXBlLCBjdHh0LT5kZWZ0eXBlX2xvICYgMHhmMzAwVUwsCi0JCSAgICAgIGN0eHQtPmRlZnR5cGVfaGkpOwotCX0gZWxzZSB7Ci0JCWlmIChpc19jcHUoQ1lSSVgpKSB7Ci0JCQkvKiBDeXJpeCBBUlJzIC0gZXZlcnl0aGluZyBlbHNlIHdlcmUgZXhjbHVkZWQgYXQgdGhlIHRvcCAqLwotCQkJc2V0Q3g4NihDWDg2X0NDUjMsIChjdHh0LT5jY3IzICYgMHgwZikgfCAweDEwKTsKLQkJfQotCX0KLX0KLQotLyogUmVzdG9yZSB0aGUgcHJvY2Vzc29yIGFmdGVyIGEgc2V0X210cnJfcHJlcGFyZSAqLwotdm9pZCBzZXRfbXRycl9kb25lKHN0cnVjdCBzZXRfbXRycl9jb250ZXh0ICpjdHh0KQotewotCWlmICh1c2VfaW50ZWwoKSB8fCBpc19jcHUoQ1lSSVgpKSB7Ci0KLQkJLyogRmx1c2ggY2FjaGVzIGFuZCBUTEJzICovCi0JCXdiaW52ZCgpOwotCi0JCS8qIFJlc3RvcmUgTVRSUmRlZlR5cGUgKi8KLQkJaWYgKHVzZV9pbnRlbCgpKSB7Ci0JCQkvKiBJbnRlbCAoUDYpIHN0YW5kYXJkIE1UUlJzICovCi0JCQltdHJyX3dybXNyKE1TUl9NVFJSZGVmVHlwZSwgY3R4dC0+ZGVmdHlwZV9sbywKLQkJCQkgICBjdHh0LT5kZWZ0eXBlX2hpKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBDeXJpeCBBUlJzIC0KLQkJCSAqIGV2ZXJ5dGhpbmcgZWxzZSB3YXMgZXhjbHVkZWQgYXQgdGhlIHRvcAotCQkJICovCi0JCQlzZXRDeDg2KENYODZfQ0NSMywgY3R4dC0+Y2NyMyk7Ci0JCX0KLQotCQkvKiBFbmFibGUgY2FjaGVzICovCi0JCXdyaXRlX2NyMChyZWFkX2NyMCgpICYgMHhiZmZmZmZmZik7Ci0KLQkJLyogUmVzdG9yZSB2YWx1ZSBvZiBDUjQgKi8KLQkJaWYgKGNwdV9oYXNfcGdlKQotCQkJd3JpdGVfY3I0KGN0eHQtPmNyNHZhbCk7Ci0JfQotCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzIGxvY2FsbHkgKGlmIGVuYWJsZWQgcHJldmlvdXNseSkgKi8KLQlsb2NhbF9pcnFfcmVzdG9yZShjdHh0LT5mbGFncyk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCmluZGV4IDhjMWMwNzAuLjY0MWNjYjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCkBAIC03LDYgKzcsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuLCBSb2JlcnQgUmljaHRlcgogICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgogICogIENvcHlyaWdodCAoQykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbiwgPG1hcmt1cy50Lm1ldHpnZXJAaW50ZWwuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4sIFN0ZXBoYW5lIEVyYW5pYW4KICAqCiAgKiAgRm9yIGxpY2VuY2luZyBkZXRhaWxzIHNlZSBrZXJuZWwtYmFzZS9DT1BZSU5HCiAgKi8KQEAgLTIyLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgpAQCAtNjgsMjYgKzcwLDU5IEBACiAJdTY0CXBlYnNfZXZlbnRfcmVzZXRbTUFYX1BFQlNfRVZFTlRTXTsKIH07CiAKK3N0cnVjdCBldmVudF9jb25zdHJhaW50IHsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcJaWR4bXNrW0JJVFNfVE9fTE9OR1MoWDg2X1BNQ19JRFhfTUFYKV07CisJCXU2NAkJaWR4bXNrNjRbMV07CisJfTsKKwlpbnQJY29kZTsKKwlpbnQJY21hc2s7CisJaW50CXdlaWdodDsKK307CisKK3N0cnVjdCBhbWRfbmIgeworCWludCBuYl9pZDsgIC8qIE5vcnRoQnJpZGdlIGlkICovCisJaW50IHJlZmNudDsgLyogcmVmZXJlbmNlIGNvdW50ICovCisJc3RydWN0IHBlcmZfZXZlbnQgKm93bmVyc1tYODZfUE1DX0lEWF9NQVhdOworCXN0cnVjdCBldmVudF9jb25zdHJhaW50IGV2ZW50X2NvbnN0cmFpbnRzW1g4Nl9QTUNfSURYX01BWF07Cit9OworCiBzdHJ1Y3QgY3B1X2h3X2V2ZW50cyB7Ci0Jc3RydWN0IHBlcmZfZXZlbnQJKmV2ZW50c1tYODZfUE1DX0lEWF9NQVhdOwotCXVuc2lnbmVkIGxvbmcJCXVzZWRfbWFza1tCSVRTX1RPX0xPTkdTKFg4Nl9QTUNfSURYX01BWCldOworCXN0cnVjdCBwZXJmX2V2ZW50CSpldmVudHNbWDg2X1BNQ19JRFhfTUFYXTsgLyogaW4gY291bnRlciBvcmRlciAqLwogCXVuc2lnbmVkIGxvbmcJCWFjdGl2ZV9tYXNrW0JJVFNfVE9fTE9OR1MoWDg2X1BNQ19JRFhfTUFYKV07CiAJdW5zaWduZWQgbG9uZwkJaW50ZXJydXB0czsKIAlpbnQJCQllbmFibGVkOwogCXN0cnVjdCBkZWJ1Z19zdG9yZQkqZHM7CisKKwlpbnQJCQluX2V2ZW50czsKKwlpbnQJCQluX2FkZGVkOworCWludAkJCWFzc2lnbltYODZfUE1DX0lEWF9NQVhdOyAvKiBldmVudCB0byBjb3VudGVyIGFzc2lnbm1lbnQgKi8KKwl1NjQJCQl0YWdzW1g4Nl9QTUNfSURYX01BWF07CisJc3RydWN0IHBlcmZfZXZlbnQJKmV2ZW50X2xpc3RbWDg2X1BNQ19JRFhfTUFYXTsgLyogaW4gZW5hYmxlZCBvcmRlciAqLworCXN0cnVjdCBhbWRfbmIJCSphbWRfbmI7CiB9OwogCi1zdHJ1Y3QgZXZlbnRfY29uc3RyYWludCB7Ci0JdW5zaWduZWQgbG9uZwlpZHhtc2tbQklUU19UT19MT05HUyhYODZfUE1DX0lEWF9NQVgpXTsKLQlpbnQJCWNvZGU7Ci19OworI2RlZmluZSBfX0VWRU5UX0NPTlNUUkFJTlQoYywgbiwgbSwgdykge1wKKwl7IC5pZHhtc2s2NFswXSA9IChuKSB9LAkJXAorCS5jb2RlID0gKGMpLAkJCVwKKwkuY21hc2sgPSAobSksCQkJXAorCS53ZWlnaHQgPSAodyksCQkJXAorfQogCi0jZGVmaW5lIEVWRU5UX0NPTlNUUkFJTlQoYywgbSkgeyAuY29kZSA9IChjKSwgLmlkeG1za1swXSA9IChtKSB9Ci0jZGVmaW5lIEVWRU5UX0NPTlNUUkFJTlRfRU5EICB7IC5jb2RlID0gMCwgLmlkeG1za1swXSA9IDAgfQorI2RlZmluZSBFVkVOVF9DT05TVFJBSU5UKGMsIG4sIG0pCVwKKwlfX0VWRU5UX0NPTlNUUkFJTlQoYywgbiwgbSwgSFdFSUdIVChuKSkKIAotI2RlZmluZSBmb3JfZWFjaF9ldmVudF9jb25zdHJhaW50KGUsIGMpIFwKLQlmb3IgKChlKSA9IChjKTsgKGUpLT5pZHhtc2tbMF07IChlKSsrKQorI2RlZmluZSBJTlRFTF9FVkVOVF9DT05TVFJBSU5UKGMsIG4pCVwKKwlFVkVOVF9DT05TVFJBSU5UKGMsIG4sIElOVEVMX0FSQ0hfRVZUU0VMX01BU0spCiAKKyNkZWZpbmUgRklYRURfRVZFTlRfQ09OU1RSQUlOVChjLCBuKQlcCisJRVZFTlRfQ09OU1RSQUlOVChjLCBuLCBJTlRFTF9BUkNIX0ZJWEVEX01BU0spCisKKyNkZWZpbmUgRVZFTlRfQ09OU1RSQUlOVF9FTkQJCVwKKwlFVkVOVF9DT05TVFJBSU5UKDAsIDAsIDApCisKKyNkZWZpbmUgZm9yX2VhY2hfZXZlbnRfY29uc3RyYWludChlLCBjKQlcCisJZm9yICgoZSkgPSAoYyk7IChlKS0+Y21hc2s7IChlKSsrKQogCiAvKgogICogc3RydWN0IHg4Nl9wbXUgLSBnZW5lcmljIHg4NiBwbXUKQEAgLTExNCw4ICsxNDksMTQgQEAKIAl1NjQJCWludGVsX2N0cmw7CiAJdm9pZAkJKCplbmFibGVfYnRzKSh1NjQgY29uZmlnKTsKIAl2b2lkCQkoKmRpc2FibGVfYnRzKSh2b2lkKTsKLQlpbnQJCSgqZ2V0X2V2ZW50X2lkeCkoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsCi0JCQkJCSBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjKTsKKworCXN0cnVjdCBldmVudF9jb25zdHJhaW50ICoKKwkJCSgqZ2V0X2V2ZW50X2NvbnN0cmFpbnRzKShzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJCQkJCSBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworCisJdm9pZAkJKCpwdXRfZXZlbnRfY29uc3RyYWludHMpKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLAorCQkJCQkJIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CisJc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKmV2ZW50X2NvbnN0cmFpbnRzOwogfTsKIAogc3RhdGljIHN0cnVjdCB4ODZfcG11IHg4Nl9wbXUgX19yZWFkX21vc3RseTsKQEAgLTEyNCwxMTEgKzE2NSw4IEBACiAJLmVuYWJsZWQgPSAxLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBldmVudF9jb25zdHJhaW50ICpldmVudF9jb25zdHJhaW50czsKLQotLyoKLSAqIE5vdCBzdXJlIGFib3V0IHNvbWUgb2YgdGhlc2UKLSAqLwotc3RhdGljIGNvbnN0IHU2NCBwNl9wZXJmbW9uX2V2ZW50X21hcFtdID0KLXsKLSAgW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JCT0gMHgwMDc5LAotICBbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCQk9IDB4MDBjMCwKLSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10JPSAweDBmMmUsCi0gIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JCT0gMHgwMTJlLAotICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXQk9IDB4MDBjNCwKLSAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JCT0gMHgwMGM1LAotICBbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkJPSAweDAwNjIsCi19OwotCi1zdGF0aWMgdTY0IHA2X3BtdV9ldmVudF9tYXAoaW50IGh3X2V2ZW50KQotewotCXJldHVybiBwNl9wZXJmbW9uX2V2ZW50X21hcFtod19ldmVudF07Ci19Ci0KLS8qCi0gKiBFdmVudCBzZXR0aW5nIHRoYXQgaXMgc3BlY2lmaWVkIG5vdCB0byBjb3VudCBhbnl0aGluZy4KLSAqIFdlIHVzZSB0aGlzIHRvIGVmZmVjdGl2ZWx5IGRpc2FibGUgYSBjb3VudGVyLgotICoKLSAqIEwyX1JRU1RTIHdpdGggMCBNRVNJIHVuaXQgbWFzay4KLSAqLwotI2RlZmluZSBQNl9OT1BfRVZFTlQJCQkweDAwMDAwMDJFVUxMCi0KLXN0YXRpYyB1NjQgcDZfcG11X3Jhd19ldmVudCh1NjQgaHdfZXZlbnQpCi17Ci0jZGVmaW5lIFA2X0VWTlRTRUxfRVZFTlRfTUFTSwkJMHgwMDAwMDBGRlVMTAotI2RlZmluZSBQNl9FVk5UU0VMX1VOSVRfTUFTSwkJMHgwMDAwRkYwMFVMTAotI2RlZmluZSBQNl9FVk5UU0VMX0VER0VfTUFTSwkJMHgwMDA0MDAwMFVMTAotI2RlZmluZSBQNl9FVk5UU0VMX0lOVl9NQVNLCQkweDAwODAwMDAwVUxMCi0jZGVmaW5lIFA2X0VWTlRTRUxfUkVHX01BU0sJCTB4RkYwMDAwMDBVTEwKLQotI2RlZmluZSBQNl9FVk5UU0VMX01BU0sJCQlcCi0JKFA2X0VWTlRTRUxfRVZFTlRfTUFTSyB8CVwKLQkgUDZfRVZOVFNFTF9VTklUX01BU0sgIHwJXAotCSBQNl9FVk5UU0VMX0VER0VfTUFTSyAgfAlcCi0JIFA2X0VWTlRTRUxfSU5WX01BU0sgICB8CVwKLQkgUDZfRVZOVFNFTF9SRUdfTUFTSykKLQotCXJldHVybiBod19ldmVudCAmIFA2X0VWTlRTRUxfTUFTSzsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX3A2X2V2ZW50X2NvbnN0cmFpbnRzW10gPQotewotCUVWRU5UX0NPTlNUUkFJTlQoMHhjMSwgMHgxKSwJLyogRkxPUFMgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTAsIDB4MSksCS8qIEZQX0NPTVBfT1BTX0VYRSAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxMSwgMHgxKSwJLyogRlBfQVNTSVNUICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDEyLCAweDIpLAkvKiBNVUwgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTMsIDB4MiksCS8qIERJViAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxNCwgMHgxKSwJLyogQ1lDTEVTX0RJVl9CVVNZICovCi0JRVZFTlRfQ09OU1RSQUlOVF9FTkQKLX07Ci0KLS8qCi0gKiBJbnRlbCBQZXJmTW9uIHYzLiBVc2VkIG9uIENvcmUyIGFuZCBsYXRlci4KLSAqLwotc3RhdGljIGNvbnN0IHU2NCBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtdID0KLXsKLSAgW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JCT0gMHgwMDNjLAotICBbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCQk9IDB4MDBjMCwKLSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10JPSAweDRmMmUsCi0gIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JCT0gMHg0MTJlLAotICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXQk9IDB4MDBjNCwKLSAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JCT0gMHgwMGM1LAotICBbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkJPSAweDAxM2MsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfY29yZV9ldmVudF9jb25zdHJhaW50c1tdID0KLXsKLQlFVkVOVF9DT05TVFJBSU5UKDB4MTAsIDB4MSksCS8qIEZQX0NPTVBfT1BTX0VYRSAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxMSwgMHgyKSwJLyogRlBfQVNTSVNUICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDEyLCAweDIpLAkvKiBNVUwgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTMsIDB4MiksCS8qIERJViAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxNCwgMHgxKSwJLyogQ1lDTEVTX0RJVl9CVVNZICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDE4LCAweDEpLAkvKiBJRExFX0RVUklOR19ESVYgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTksIDB4MiksCS8qIERFTEFZRURfQllQQVNTICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweGExLCAweDEpLAkvKiBSU19VT1BTX0RJU1BBVENIX0NZQ0xFUyAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHhjYiwgMHgxKSwJLyogTUVNX0xPQURfUkVUSVJFRCAqLwotCUVWRU5UX0NPTlNUUkFJTlRfRU5ECi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfbmVoYWxlbV9ldmVudF9jb25zdHJhaW50c1tdID0KLXsKLQlFVkVOVF9DT05TVFJBSU5UKDB4NDAsIDB4MyksCS8qIEwxRF9DQUNIRV9MRCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHg0MSwgMHgzKSwJLyogTDFEX0NBQ0hFX1NUICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDQyLCAweDMpLAkvKiBMMURfQ0FDSEVfTE9DSyAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHg0MywgMHgzKSwJLyogTDFEX0FMTF9SRUYgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4NGUsIDB4MyksCS8qIEwxRF9QUkVGRVRDSCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHg0YywgMHgzKSwJLyogTE9BRF9ISVRfUFJFICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDUxLCAweDMpLAkvKiBMMUQgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4NTIsIDB4MyksCS8qIEwxRF9DQUNIRV9QUkVGRVRDSF9MT0NLX0ZCX0hJVCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHg1MywgMHgzKSwJLyogTDFEX0NBQ0hFX0xPQ0tfRkJfSElUICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweGM1LCAweDMpLAkvKiBDQUNIRV9MT0NLX0NZQ0xFUyAqLwotCUVWRU5UX0NPTlNUUkFJTlRfRU5ECi19OwotCi1zdGF0aWMgdTY0IGludGVsX3BtdV9ldmVudF9tYXAoaW50IGh3X2V2ZW50KQotewotCXJldHVybiBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtod19ldmVudF07Ci19CitzdGF0aWMgaW50IHg4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2Qoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJICAgICBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KTsKIAogLyoKICAqIEdlbmVyYWxpemVkIGh3IGNhY2hpbmcgcmVsYXRlZCBod19ldmVudCB0YWJsZSwgZmlsbGVkCkBAIC0yNDUsNDI0ICsxODMsNiBAQAogCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXTsKIAotc3RhdGljIF9faW5pdGNvbnN0IHU2NCBuZWhhbGVtX2h3X2NhY2hlX2V2ZW50X2lkcwotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPQotewotIFsgQyhMMUQpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQwLCAvKiBMMURfQ0FDSEVfTEQuSV9TVEFURSAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQxLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQxLCAvKiBMMURfQ0FDSEVfU1QuSV9TVEFURSAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMTRlLCAvKiBMMURfUFJFRkVUQ0guUkVRVUVTVFMgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjRlLCAvKiBMMURfUFJFRkVUQ0guTUlTUyAgICAgICAgICAgICovCi0JfSwKLSB9LAotIFsgQyhMMUkgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDM4MCwgLyogTDFJLlJFQURTICAgICAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI4MCwgLyogTDFJLk1JU1NFUyAgICAgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAsCi0JfSwKLSB9LAotIFsgQyhMTCAgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDMyNCwgLyogTDJfUlFTVFMuTE9BRFMgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDIyNCwgLyogTDJfUlFTVFMuTERfTUlTUyAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGMyNCwgLyogTDJfUlFTVFMuUkZPUyAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDgyNCwgLyogTDJfUlFTVFMuUkZPX01JU1MgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyZSwgLyogTExDIFJlZmVyZW5jZSAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyZSwgLyogTExDIE1pc3NlcyAgICAgICAgICAgICAgICAgICAqLwotCX0sCi0gfSwKLSBbIEMoRFRMQikgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAgKGFsaWFzKSAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxMDgsIC8qIERUTEJfTE9BRF9NSVNTRVMuQU5ZICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgKGFsaWFzKSAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxMGMsIC8qIE1FTV9TVE9SRV9SRVRJUkVELkRUTEJfTUlTUyAgKi8KLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwLAotCX0sCi0gfSwKLSBbIEMoSVRMQikgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYzAsIC8qIElOU1RfUkVUSVJFRC5BTllfUCAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDIwYzgsIC8qIElUTEJfTUlTU19SRVRJUkVEICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi0gWyBDKEJQVSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGM0LCAvKiBCUl9JTlNUX1JFVElSRUQuQUxMX0JSQU5DSEVTICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwM2U4LCAvKiBCUFVfQ0xFQVJTLkFOWSAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLSB9LAotfTsKLQotc3RhdGljIF9faW5pdGNvbnN0IHU2NCBjb3JlMl9od19jYWNoZV9ldmVudF9pZHMKLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KLXsKLSBbIEMoTDFEKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDAsIC8qIEwxRF9DQUNIRV9MRC5JX1NUQVRFICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQxLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MSwgLyogTDFEX0NBQ0hFX1NULklfU1RBVEUgICAgICAgKi8KLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDEwNGUsIC8qIEwxRF9QUkVGRVRDSC5SRVFVRVNUUyAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKEwxSSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA4MSwgLyogTDFJLk1JU1NFUyAgICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhMTCAgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyOSwgLyogTDJfTEQuTUVTSSAgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMjksIC8qIEwyX0xELklTVEFURSAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJBLCAvKiBMMl9TVC5NRVNJICAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyQSwgLyogTDJfU1QuSVNUQVRFICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhEVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgIChhbGlhcykgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyMDgsIC8qIERUTEJfTUlTU0VTLk1JU1NfTEQgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQxLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgKGFsaWFzKSAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDgwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19TVCAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhJVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDEyODIsIC8qIElUTEJNSVNTRVMgICAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLSB9LAotIFsgQyhCUFUgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjNCwgLyogQlJfSU5TVF9SRVRJUkVELkFOWSAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwYzUsIC8qIEJQX0lOU1RfUkVUSVJFRC5NSVNQUkVEICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLSB9LAotfTsKLQotc3RhdGljIF9faW5pdGNvbnN0IHU2NCBhdG9tX2h3X2NhY2hlX2V2ZW50X2lkcwotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPQotewotIFsgQyhMMUQpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgyMTQwLCAvKiBMMURfQ0FDSEUuTEQgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgyMjQwLCAvKiBMMURfQ0FDSEUuU1QgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhMMUkgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDM4MCwgLyogTDFJLlJFQURTICAgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyODAsIC8qIEwxSS5NSVNTRVMgICAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoTEwgICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMjksIC8qIEwyX0xELk1FU0kgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTI5LCAvKiBMMl9MRC5JU1RBVEUgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyQSwgLyogTDJfU1QuTUVTSSAgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMkEsIC8qIEwyX1NULklTVEFURSAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoRFRMQikgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIxNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAoYWxpYXMpICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwNTA4LCAvKiBEVExCX01JU1NFUy5NSVNTX0xEICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjI0MCwgLyogTDFEX0NBQ0hFX1NULk1FU0kgIChhbGlhcykgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA2MDgsIC8qIERUTEJfTUlTU0VTLk1JU1NfU1QgICAgICAgICovCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoSVRMQikgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzAsIC8qIElOU1RfUkVUSVJFRC5BTllfUCAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjgyLCAvKiBJVExCLk1JU1NFUyAgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0gfSwKLSBbIEMoQlBVICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzQsIC8qIEJSX0lOU1RfUkVUSVJFRC5BTlkgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMGM1LCAvKiBCUF9JTlNUX1JFVElSRUQuTUlTUFJFRCAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0gfSwKLX07Ci0KLXN0YXRpYyB1NjQgaW50ZWxfcG11X3Jhd19ldmVudCh1NjQgaHdfZXZlbnQpCi17Ci0jZGVmaW5lIENPUkVfRVZOVFNFTF9FVkVOVF9NQVNLCQkweDAwMDAwMEZGVUxMCi0jZGVmaW5lIENPUkVfRVZOVFNFTF9VTklUX01BU0sJCTB4MDAwMEZGMDBVTEwKLSNkZWZpbmUgQ09SRV9FVk5UU0VMX0VER0VfTUFTSwkJMHgwMDA0MDAwMFVMTAotI2RlZmluZSBDT1JFX0VWTlRTRUxfSU5WX01BU0sJCTB4MDA4MDAwMDBVTEwKLSNkZWZpbmUgQ09SRV9FVk5UU0VMX1JFR19NQVNLCQkweEZGMDAwMDAwVUxMCi0KLSNkZWZpbmUgQ09SRV9FVk5UU0VMX01BU0sJCVwKLQkoQ09SRV9FVk5UU0VMX0VWRU5UX01BU0sgfAlcCi0JIENPUkVfRVZOVFNFTF9VTklUX01BU0sgIHwJXAotCSBDT1JFX0VWTlRTRUxfRURHRV9NQVNLICB8CVwKLQkgQ09SRV9FVk5UU0VMX0lOVl9NQVNLICB8CVwKLQkgQ09SRV9FVk5UU0VMX1JFR19NQVNLKQotCi0JcmV0dXJuIGh3X2V2ZW50ICYgQ09SRV9FVk5UU0VMX01BU0s7Ci19Ci0KLXN0YXRpYyBfX2luaXRjb25zdCB1NjQgYW1kX2h3X2NhY2hlX2V2ZW50X2lkcwotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPQotewotIFsgQyhMMUQpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDQwLCAvKiBEYXRhIENhY2hlIEFjY2Vzc2VzICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA0MSwgLyogRGF0YSBDYWNoZSBNaXNzZXMgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNDIsIC8qIERhdGEgQ2FjaGUgUmVmaWxscyA6c3lzdGVtICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAyNjcsIC8qIERhdGEgUHJlZmV0Y2hlciA6YXR0ZW1wdHMgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTY3LCAvKiBEYXRhIFByZWZldGNoZXIgOmNhbmNlbGxlZCAqLwotCX0sCi0gfSwKLSBbIEMoTDFJICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwODAsIC8qIEluc3RydWN0aW9uIGNhY2hlIGZldGNoZXMgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDgxLCAvKiBJbnN0cnVjdGlvbiBjYWNoZSBtaXNzZXMgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0QiwgLyogUHJlZmV0Y2ggSW5zdHJ1Y3Rpb25zIDpMb2FkICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKExMICApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzdELCAvKiBSZXF1ZXN0cyB0byBMMiBDYWNoZSA6SUMrREMgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAzN0UsIC8qIEwyIENhY2hlIE1pc3NlcyA6IElDK0RDICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE3RiwgLyogTDIgRmlsbC9Xcml0ZWJhY2sgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhEVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA0MCwgLyogRGF0YSBDYWNoZSBBY2Nlc3NlcyAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwNDYsIC8qIEwxIERUTEIgYW5kIEwyIERMVEIgTWlzcyAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKElUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDgwLCAvKiBJbnN0cnVjdGlvbiBmZWN0aGVzICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA4NSwgLyogSW5zdHIuIGZldGNoIElUTEIgbWlzc2VzICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi0gWyBDKEJQVSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGMyLCAvKiBSZXRpcmVkIEJyYW5jaCBJbnN0ci4gICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDBjMywgLyogUmV0aXJlZCBNaXNwcmVkaWN0ZWQgQkkgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi19OwotCi0vKgotICogQU1EIFBlcmZvcm1hbmNlIE1vbml0b3IgSzcgYW5kIGxhdGVyLgotICovCi1zdGF0aWMgY29uc3QgdTY0IGFtZF9wZXJmbW9uX2V2ZW50X21hcFtdID0KLXsKLSAgW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JCT0gMHgwMDc2LAotICBbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCQk9IDB4MDBjMCwKLSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10JPSAweDAwODAsCi0gIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JCT0gMHgwMDgxLAotICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXQk9IDB4MDBjNCwKLSAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JCT0gMHgwMGM1LAotfTsKLQotc3RhdGljIHU2NCBhbWRfcG11X2V2ZW50X21hcChpbnQgaHdfZXZlbnQpCi17Ci0JcmV0dXJuIGFtZF9wZXJmbW9uX2V2ZW50X21hcFtod19ldmVudF07Ci19Ci0KLXN0YXRpYyB1NjQgYW1kX3BtdV9yYXdfZXZlbnQodTY0IGh3X2V2ZW50KQotewotI2RlZmluZSBLN19FVk5UU0VMX0VWRU5UX01BU0sJMHg3MDAwMDAwRkZVTEwKLSNkZWZpbmUgSzdfRVZOVFNFTF9VTklUX01BU0sJMHgwMDAwMEZGMDBVTEwKLSNkZWZpbmUgSzdfRVZOVFNFTF9FREdFX01BU0sJMHgwMDAwNDAwMDBVTEwKLSNkZWZpbmUgSzdfRVZOVFNFTF9JTlZfTUFTSwkweDAwMDgwMDAwMFVMTAotI2RlZmluZSBLN19FVk5UU0VMX1JFR19NQVNLCTB4MEZGMDAwMDAwVUxMCi0KLSNkZWZpbmUgSzdfRVZOVFNFTF9NQVNLCQkJXAotCShLN19FVk5UU0VMX0VWRU5UX01BU0sgfAlcCi0JIEs3X0VWTlRTRUxfVU5JVF9NQVNLICB8CVwKLQkgSzdfRVZOVFNFTF9FREdFX01BU0sgIHwJXAotCSBLN19FVk5UU0VMX0lOVl9NQVNLICAgfAlcCi0JIEs3X0VWTlRTRUxfUkVHX01BU0spCi0KLQlyZXR1cm4gaHdfZXZlbnQgJiBLN19FVk5UU0VMX01BU0s7Ci19Ci0KIC8qCiAgKiBQcm9wYWdhdGUgZXZlbnQgZWxhcHNlZCB0aW1lIGludG8gdGhlIGdlbmVyaWMgZXZlbnQuCiAgKiBDYW4gb25seSBiZSBleGVjdXRlZCBvbiB0aGUgQ1BVIHdoZXJlIHRoZSBldmVudCBpcyBhY3RpdmUuCkBAIC05MTQsNDIgKzQzNCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX3BtdV9lbmFibGVfYnRzKHU2NCBjb25maWcpCi17Ci0JdW5zaWduZWQgbG9uZyBkZWJ1Z2N0bG1zcjsKLQotCWRlYnVnY3RsbXNyID0gZ2V0X2RlYnVnY3RsbXNyKCk7Ci0KLQlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfVFI7Ci0JZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUUzsKLQlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRJTlQ7Ci0KLQlpZiAoIShjb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MpKQotCQlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRTX09GRl9PUzsKLQotCWlmICghKGNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9VU1IpKQotCQlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRTX09GRl9VU1I7Ci0KLQl1cGRhdGVfZGVidWdjdGxtc3IoZGVidWdjdGxtc3IpOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfZGlzYWJsZV9idHModm9pZCkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCXVuc2lnbmVkIGxvbmcgZGVidWdjdGxtc3I7Ci0KLQlpZiAoIWNwdWMtPmRzKQotCQlyZXR1cm47Ci0KLQlkZWJ1Z2N0bG1zciA9IGdldF9kZWJ1Z2N0bG1zcigpOwotCi0JZGVidWdjdGxtc3IgJj0KLQkJfihYODZfREVCVUdDVExfVFIgfCBYODZfREVCVUdDVExfQlRTIHwgWDg2X0RFQlVHQ1RMX0JUSU5UIHwKLQkJICBYODZfREVCVUdDVExfQlRTX09GRl9PUyB8IFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX1VTUik7Ci0KLQl1cGRhdGVfZGVidWdjdGxtc3IoZGVidWdjdGxtc3IpOwotfQotCiAvKgogICogU2V0dXAgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gZm9yIGEgZ2l2ZW4gYXR0cl90eXBlCiAgKi8KQEAgLTk4OCw2ICs0NzIsOCBAQAogCWh3Yy0+Y29uZmlnID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0lOVDsKIAogCWh3Yy0+aWR4ID0gLTE7CisJaHdjLT5sYXN0X2NwdSA9IC0xOworCWh3Yy0+bGFzdF90YWcgPSB+MFVMTDsKIAogCS8qCiAJICogQ291bnQgdXNlciBhbmQgT1MgZXZlbnRzIHVubGVzcyByZXF1ZXN0ZWQgbm90IHRvLgpAQCAtMTA1NiwxMjYgKzU0Miw0NiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBwNl9wbXVfZGlzYWJsZV9hbGwodm9pZCkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCXU2NCB2YWw7Ci0KLQlpZiAoIWNwdWMtPmVuYWJsZWQpCi0JCXJldHVybjsKLQotCWNwdWMtPmVuYWJsZWQgPSAwOwotCWJhcnJpZXIoKTsKLQotCS8qIHA2IG9ubHkgaGFzIG9uZSBlbmFibGUgcmVnaXN0ZXIgKi8KLQlyZG1zcmwoTVNSX1A2X0VWTlRTRUwwLCB2YWwpOwotCXZhbCAmPSB+QVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7Ci0Jd3Jtc3JsKE1TUl9QNl9FVk5UU0VMMCwgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfcG11X2Rpc2FibGVfYWxsKHZvaWQpCi17Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQotCWlmICghY3B1Yy0+ZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JY3B1Yy0+ZW5hYmxlZCA9IDA7Ci0JYmFycmllcigpOwotCi0Jd3Jtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIDApOwotCi0JaWYgKHRlc3RfYml0KFg4Nl9QTUNfSURYX0ZJWEVEX0JUUywgY3B1Yy0+YWN0aXZlX21hc2spKQotCQlpbnRlbF9wbXVfZGlzYWJsZV9idHMoKTsKLX0KLQotc3RhdGljIHZvaWQgYW1kX3BtdV9kaXNhYmxlX2FsbCh2b2lkKQorc3RhdGljIHZvaWQgeDg2X3BtdV9kaXNhYmxlX2FsbCh2b2lkKQogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAJaW50IGlkeDsKIAotCWlmICghY3B1Yy0+ZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JY3B1Yy0+ZW5hYmxlZCA9IDA7Ci0JLyoKLQkgKiBlbnN1cmUgd2Ugd3JpdGUgdGhlIGRpc2FibGUgYmVmb3JlIHdlIHN0YXJ0IGRpc2FibGluZyB0aGUKLQkgKiBldmVudHMgcHJvcGVyLCBzbyB0aGF0IGFtZF9wbXVfZW5hYmxlX2V2ZW50KCkgZG9lcyB0aGUKLQkgKiByaWdodCB0aGluZy4KLQkgKi8KLQliYXJyaWVyKCk7Ci0KIAlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaWR4KyspIHsKIAkJdTY0IHZhbDsKIAogCQlpZiAoIXRlc3RfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spKQogCQkJY29udGludWU7Ci0JCXJkbXNybChNU1JfSzdfRVZOVFNFTDAgKyBpZHgsIHZhbCk7CisJCXJkbXNybCh4ODZfcG11LmV2ZW50c2VsICsgaWR4LCB2YWwpOwogCQlpZiAoISh2YWwgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRSkpCiAJCQljb250aW51ZTsKIAkJdmFsICY9IH5BUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKLQkJd3Jtc3JsKE1TUl9LN19FVk5UU0VMMCArIGlkeCwgdmFsKTsKKwkJd3Jtc3JsKHg4Nl9wbXUuZXZlbnRzZWwgKyBpZHgsIHZhbCk7CiAJfQogfQogCiB2b2lkIGh3X3BlcmZfZGlzYWJsZSh2b2lkKQogeworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKIAlpZiAoIXg4Nl9wbXVfaW5pdGlhbGl6ZWQoKSkKIAkJcmV0dXJuOwotCXJldHVybiB4ODZfcG11LmRpc2FibGVfYWxsKCk7Ci19CiAKLXN0YXRpYyB2b2lkIHA2X3BtdV9lbmFibGVfYWxsKHZvaWQpCi17Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQotCWlmIChjcHVjLT5lbmFibGVkKQorCWlmICghY3B1Yy0+ZW5hYmxlZCkKIAkJcmV0dXJuOwogCi0JY3B1Yy0+ZW5hYmxlZCA9IDE7CisJY3B1Yy0+bl9hZGRlZCA9IDA7CisJY3B1Yy0+ZW5hYmxlZCA9IDA7CiAJYmFycmllcigpOwogCi0JLyogcDYgb25seSBoYXMgb25lIGVuYWJsZSByZWdpc3RlciAqLwotCXJkbXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7Ci0JdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwotCXdybXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7CisJeDg2X3BtdS5kaXNhYmxlX2FsbCgpOwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2FsbCh2b2lkKQotewotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0KLQlpZiAoY3B1Yy0+ZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JY3B1Yy0+ZW5hYmxlZCA9IDE7Ci0JYmFycmllcigpOwotCi0Jd3Jtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIHg4Nl9wbXUuaW50ZWxfY3RybCk7Ci0KLQlpZiAodGVzdF9iaXQoWDg2X1BNQ19JRFhfRklYRURfQlRTLCBjcHVjLT5hY3RpdmVfbWFzaykpIHsKLQkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0KLQkJCWNwdWMtPmV2ZW50c1tYODZfUE1DX0lEWF9GSVhFRF9CVFNdOwotCi0JCWlmIChXQVJOX09OX09OQ0UoIWV2ZW50KSkKLQkJCXJldHVybjsKLQotCQlpbnRlbF9wbXVfZW5hYmxlX2J0cyhldmVudC0+aHcuY29uZmlnKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGFtZF9wbXVfZW5hYmxlX2FsbCh2b2lkKQorc3RhdGljIHZvaWQgeDg2X3BtdV9lbmFibGVfYWxsKHZvaWQpCiB7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAlpbnQgaWR4OwogCi0JaWYgKGNwdWMtPmVuYWJsZWQpCi0JCXJldHVybjsKLQotCWNwdWMtPmVuYWJsZWQgPSAxOwotCWJhcnJpZXIoKTsKLQogCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpZHgrKykgewogCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbaWR4XTsKIAkJdTY0IHZhbDsKQEAgLTExODUsMzIgKzU5MSwyNjYgQEAKIAogCQl2YWwgPSBldmVudC0+aHcuY29uZmlnOwogCQl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7Ci0JCXdybXNybChNU1JfSzdfRVZOVFNFTDAgKyBpZHgsIHZhbCk7CisJCXdybXNybCh4ODZfcG11LmV2ZW50c2VsICsgaWR4LCB2YWwpOwogCX0KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgcG11OworCitzdGF0aWMgaW5saW5lIGludCBpc194ODZfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBldmVudC0+cG11ID09ICZwbXU7Cit9CisKK3N0YXRpYyBpbnQgeDg2X3NjaGVkdWxlX2V2ZW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywgaW50IG4sIGludCAqYXNzaWduKQoreworCXN0cnVjdCBldmVudF9jb25zdHJhaW50ICpjLCAqY29uc3RyYWludHNbWDg2X1BNQ19JRFhfTUFYXTsKKwl1bnNpZ25lZCBsb25nIHVzZWRfbWFza1tCSVRTX1RPX0xPTkdTKFg4Nl9QTUNfSURYX01BWCldOworCWludCBpLCBqLCB3LCB3bWF4LCBudW0gPSAwOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2M7CisKKwliaXRtYXBfemVybyh1c2VkX21hc2ssIFg4Nl9QTUNfSURYX01BWCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWNvbnN0cmFpbnRzW2ldID0KKwkJICB4ODZfcG11LmdldF9ldmVudF9jb25zdHJhaW50cyhjcHVjLCBjcHVjLT5ldmVudF9saXN0W2ldKTsKKwl9CisKKwkvKgorCSAqIGZhc3RwYXRoLCB0cnkgdG8gcmV1c2UgcHJldmlvdXMgcmVnaXN0ZXIKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWh3YyA9ICZjcHVjLT5ldmVudF9saXN0W2ldLT5odzsKKwkJYyA9IGNvbnN0cmFpbnRzW2ldOworCisJCS8qIG5ldmVyIGFzc2lnbmVkICovCisJCWlmIChod2MtPmlkeCA9PSAtMSkKKwkJCWJyZWFrOworCisJCS8qIGNvbnN0cmFpbnQgc3RpbGwgaG9ub3JlZCAqLworCQlpZiAoIXRlc3RfYml0KGh3Yy0+aWR4LCBjLT5pZHhtc2spKQorCQkJYnJlYWs7CisKKwkJLyogbm90IGFscmVhZHkgdXNlZCAqLworCQlpZiAodGVzdF9iaXQoaHdjLT5pZHgsIHVzZWRfbWFzaykpCisJCQlicmVhazsKKworCQlzZXRfYml0KGh3Yy0+aWR4LCB1c2VkX21hc2spOworCQlpZiAoYXNzaWduKQorCQkJYXNzaWduW2ldID0gaHdjLT5pZHg7CisJfQorCWlmIChpID09IG4pCisJCWdvdG8gZG9uZTsKKworCS8qCisJICogYmVnaW4gc2xvdyBwYXRoCisJICovCisKKwliaXRtYXBfemVybyh1c2VkX21hc2ssIFg4Nl9QTUNfSURYX01BWCk7CisKKwkvKgorCSAqIHdlaWdodCA9IG51bWJlciBvZiBwb3NzaWJsZSBjb3VudGVycworCSAqCisJICogMSAgICA9IG1vc3QgY29uc3RyYWluZWQsIG9ubHkgd29ya3Mgb24gb25lIGNvdW50ZXIKKwkgKiB3bWF4ID0gbGVhc3QgY29uc3RyYWluZWQsIHdvcmtzIG9uIGFueSBjb3VudGVyCisJICoKKwkgKiBhc3NpZ24gZXZlbnRzIHRvIGNvdW50ZXJzIHN0YXJ0aW5nIHdpdGggbW9zdAorCSAqIGNvbnN0cmFpbmVkIGV2ZW50cy4KKwkgKi8KKwl3bWF4ID0geDg2X3BtdS5udW1fZXZlbnRzOworCisJLyoKKwkgKiB3aGVuIGZpeGVkIGV2ZW50IGNvdW50ZXJzIGFyZSBwcmVzZW50LAorCSAqIHdtYXggaXMgaW5jcmVtZW50ZWQgYnkgMSB0byBhY2NvdW50CisJICogZm9yIG9uZSBtb3JlIGNob2ljZQorCSAqLworCWlmICh4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQpCisJCXdtYXgrKzsKKworCWZvciAodyA9IDEsIG51bSA9IG47IG51bSAmJiB3IDw9IHdtYXg7IHcrKykgeworCQkvKiBmb3IgZWFjaCBldmVudCAqLworCQlmb3IgKGkgPSAwOyBudW0gJiYgaSA8IG47IGkrKykgeworCQkJYyA9IGNvbnN0cmFpbnRzW2ldOworCQkJaHdjID0gJmNwdWMtPmV2ZW50X2xpc3RbaV0tPmh3OworCisJCQlpZiAoYy0+d2VpZ2h0ICE9IHcpCisJCQkJY29udGludWU7CisKKwkJCWZvcl9lYWNoX2JpdChqLCBjLT5pZHhtc2ssIFg4Nl9QTUNfSURYX01BWCkgeworCQkJCWlmICghdGVzdF9iaXQoaiwgdXNlZF9tYXNrKSkKKwkJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChqID09IFg4Nl9QTUNfSURYX01BWCkKKwkJCQlicmVhazsKKworCQkJc2V0X2JpdChqLCB1c2VkX21hc2spOworCisJCQlpZiAoYXNzaWduKQorCQkJCWFzc2lnbltpXSA9IGo7CisJCQludW0tLTsKKwkJfQorCX0KK2RvbmU6CisJLyoKKwkgKiBzY2hlZHVsaW5nIGZhaWxlZCBvciBpcyBqdXN0IGEgc2ltdWxhdGlvbiwKKwkgKiBmcmVlIHJlc291cmNlcyBpZiBuZWNlc3NhcnkKKwkgKi8KKwlpZiAoIWFzc2lnbiB8fCBudW0pIHsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkJaWYgKHg4Nl9wbXUucHV0X2V2ZW50X2NvbnN0cmFpbnRzKQorCQkJCXg4Nl9wbXUucHV0X2V2ZW50X2NvbnN0cmFpbnRzKGNwdWMsIGNwdWMtPmV2ZW50X2xpc3RbaV0pOworCQl9CisJfQorCXJldHVybiBudW0gPyAtRU5PU1BDIDogMDsKK30KKworLyoKKyAqIGRvZ3JwOiB0cnVlIGlmIG11c3QgY29sbGVjdCBzaWJsaW5ncyBldmVudHMgKGdyb3VwKQorICogcmV0dXJucyB0b3RhbCBudW1iZXIgb2YgZXZlbnRzIGFuZCBlcnJvciBjb2RlCisgKi8KK3N0YXRpYyBpbnQgY29sbGVjdF9ldmVudHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBwZXJmX2V2ZW50ICpsZWFkZXIsIGJvb2wgZG9ncnApCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCWludCBuLCBtYXhfY291bnQ7CisKKwltYXhfY291bnQgPSB4ODZfcG11Lm51bV9ldmVudHMgKyB4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQ7CisKKwkvKiBjdXJyZW50IG51bWJlciBvZiBldmVudHMgYWxyZWFkeSBhY2NlcHRlZCAqLworCW4gPSBjcHVjLT5uX2V2ZW50czsKKworCWlmIChpc194ODZfZXZlbnQobGVhZGVyKSkgeworCQlpZiAobiA+PSBtYXhfY291bnQpCisJCQlyZXR1cm4gLUVOT1NQQzsKKwkJY3B1Yy0+ZXZlbnRfbGlzdFtuXSA9IGxlYWRlcjsKKwkJbisrOworCX0KKwlpZiAoIWRvZ3JwKQorCQlyZXR1cm4gbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZsZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJaWYgKCFpc194ODZfZXZlbnQoZXZlbnQpIHx8CisJCSAgICBldmVudC0+c3RhdGUgPD0gUEVSRl9FVkVOVF9TVEFURV9PRkYpCisJCQljb250aW51ZTsKKworCQlpZiAobiA+PSBtYXhfY291bnQpCisJCQlyZXR1cm4gLUVOT1NQQzsKKworCQljcHVjLT5ldmVudF9saXN0W25dID0gZXZlbnQ7CisJCW4rKzsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ODZfYXNzaWduX2h3X2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywgaW50IGkpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisKKwlod2MtPmlkeCA9IGNwdWMtPmFzc2lnbltpXTsKKwlod2MtPmxhc3RfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWh3Yy0+bGFzdF90YWcgPSArK2NwdWMtPnRhZ3NbaV07CisKKwlpZiAoaHdjLT5pZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKSB7CisJCWh3Yy0+Y29uZmlnX2Jhc2UgPSAwOworCQlod2MtPmV2ZW50X2Jhc2UJPSAwOworCX0gZWxzZSBpZiAoaHdjLT5pZHggPj0gWDg2X1BNQ19JRFhfRklYRUQpIHsKKwkJaHdjLT5jb25maWdfYmFzZSA9IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkw7CisJCS8qCisJCSAqIFdlIHNldCBpdCBzbyB0aGF0IGV2ZW50X2Jhc2UgKyBpZHggaW4gd3Jtc3IvcmRtc3IgbWFwcyB0bworCQkgKiBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgLi4uIENUUjI6CisJCSAqLworCQlod2MtPmV2ZW50X2Jhc2UgPQorCQkJTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwIC0gWDg2X1BNQ19JRFhfRklYRUQ7CisJfSBlbHNlIHsKKwkJaHdjLT5jb25maWdfYmFzZSA9IHg4Nl9wbXUuZXZlbnRzZWw7CisJCWh3Yy0+ZXZlbnRfYmFzZSAgPSB4ODZfcG11LnBlcmZjdHI7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBtYXRjaF9wcmV2X2Fzc2lnbm1lbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywKKwkJCQkJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsCisJCQkJCWludCBpKQoreworCXJldHVybiBod2MtPmlkeCA9PSBjcHVjLT5hc3NpZ25baV0gJiYKKwkJaHdjLT5sYXN0X2NwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkgJiYKKwkJaHdjLT5sYXN0X3RhZyA9PSBjcHVjLT50YWdzW2ldOworfQorCitzdGF0aWMgdm9pZCB4ODZfcG11X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKKwogdm9pZCBod19wZXJmX2VuYWJsZSh2b2lkKQogeworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2M7CisJaW50IGk7CisKIAlpZiAoIXg4Nl9wbXVfaW5pdGlhbGl6ZWQoKSkKIAkJcmV0dXJuOworCisJaWYgKGNwdWMtPmVuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChjcHVjLT5uX2FkZGVkKSB7CisJCS8qCisJCSAqIGFwcGx5IGFzc2lnbm1lbnQgb2J0YWluZWQgZWl0aGVyIGZyb20KKwkJICogaHdfcGVyZl9ncm91cF9zY2hlZF9pbigpIG9yIHg4Nl9wbXVfZW5hYmxlKCkKKwkJICoKKwkJICogc3RlcDE6IHNhdmUgZXZlbnRzIG1vdmluZyB0byBuZXcgY291bnRlcnMKKwkJICogc3RlcDI6IHJlcHJvZ3JhbSBtb3ZlZCBldmVudHMgaW50byBuZXcgY291bnRlcnMKKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBjcHVjLT5uX2V2ZW50czsgaSsrKSB7CisKKwkJCWV2ZW50ID0gY3B1Yy0+ZXZlbnRfbGlzdFtpXTsKKwkJCWh3YyA9ICZldmVudC0+aHc7CisKKwkJCS8qCisJCQkgKiB3ZSBjYW4gYXZvaWQgcmVwcm9ncmFtbWluZyBjb3VudGVyIGlmOgorCQkJICogLSBhc3NpZ25lZCBzYW1lIGNvdW50ZXIgYXMgbGFzdCB0aW1lCisJCQkgKiAtIHJ1bm5pbmcgb24gc2FtZSBDUFUgYXMgbGFzdCB0aW1lCisJCQkgKiAtIG5vIG90aGVyIGV2ZW50IGhhcyB1c2VkIHRoZSBjb3VudGVyIHNpbmNlCisJCQkgKi8KKwkJCWlmIChod2MtPmlkeCA9PSAtMSB8fAorCQkJICAgIG1hdGNoX3ByZXZfYXNzaWdubWVudChod2MsIGNwdWMsIGkpKQorCQkJCWNvbnRpbnVlOworCisJCQl4ODZfcG11X3N0b3AoZXZlbnQpOworCisJCQlod2MtPmlkeCA9IC0xOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IGNwdWMtPm5fZXZlbnRzOyBpKyspIHsKKworCQkJZXZlbnQgPSBjcHVjLT5ldmVudF9saXN0W2ldOworCQkJaHdjID0gJmV2ZW50LT5odzsKKworCQkJaWYgKGh3Yy0+aWR4ID09IC0xKSB7CisJCQkJeDg2X2Fzc2lnbl9od19ldmVudChldmVudCwgY3B1YywgaSk7CisJCQkJeDg2X3BlcmZfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBod2MtPmlkeCk7CisJCQl9CisJCQkvKgorCQkJICogbmVlZCB0byBtYXJrIGFzIGFjdGl2ZSBiZWNhdXNlIHg4Nl9wbXVfZGlzYWJsZSgpCisJCQkgKiBjbGVhciBhY3RpdmVfbWFzayBhbmQgZXZlbnRzW10geWV0IGl0IHByZXNlcnZlcworCQkJICogaWR4CisJCQkgKi8KKwkJCXNldF9iaXQoaHdjLT5pZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKTsKKwkJCWNwdWMtPmV2ZW50c1tod2MtPmlkeF0gPSBldmVudDsKKworCQkJeDg2X3BtdS5lbmFibGUoaHdjLCBod2MtPmlkeCk7CisJCQlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CisJCX0KKwkJY3B1Yy0+bl9hZGRlZCA9IDA7CisJCXBlcmZfZXZlbnRzX2xhcGljX2luaXQoKTsKKwl9CisKKwljcHVjLT5lbmFibGVkID0gMTsKKwliYXJyaWVyKCk7CisKIAl4ODZfcG11LmVuYWJsZV9hbGwoKTsKIH0KIAotc3RhdGljIGlubGluZSB1NjQgaW50ZWxfcG11X2dldF9zdGF0dXModm9pZCkKLXsKLQl1NjQgc3RhdHVzOwotCi0JcmRtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgc3RhdHVzKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9wbXVfYWNrX3N0YXR1cyh1NjQgYWNrKQotewotCXdybXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTCwgYWNrKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHg4Nl9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCitzdGF0aWMgaW5saW5lIHZvaWQgX194ODZfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQogewogCSh2b2lkKWNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlICsgaWR4LAogCQkJICAgICAgaHdjLT5jb25maWcgfCBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRSk7CkBAIC0xMjIxLDUzICs4NjEsNiBAQAogCSh2b2lkKWNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlICsgaWR4LCBod2MtPmNvbmZpZyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotaW50ZWxfcG11X2Rpc2FibGVfZml4ZWQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IF9faWR4KQotewotCWludCBpZHggPSBfX2lkeCAtIFg4Nl9QTUNfSURYX0ZJWEVEOwotCXU2NCBjdHJsX3ZhbCwgbWFzazsKLQotCW1hc2sgPSAweGZVTEwgPDwgKGlkeCAqIDQpOwotCi0JcmRtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UsIGN0cmxfdmFsKTsKLQljdHJsX3ZhbCAmPSB+bWFzazsKLQkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXA2X3BtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCi17Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQl1NjQgdmFsID0gUDZfTk9QX0VWRU5UOwotCi0JaWYgKGNwdWMtPmVuYWJsZWQpCi0JCXZhbCB8PSBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKLQotCSh2b2lkKWNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlICsgaWR4LCB2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWludGVsX3BtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCi17Ci0JaWYgKHVubGlrZWx5KGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpKSB7Ci0JCWludGVsX3BtdV9kaXNhYmxlX2J0cygpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHVubGlrZWx5KGh3Yy0+Y29uZmlnX2Jhc2UgPT0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFJfQ1RSTCkpIHsKLQkJaW50ZWxfcG11X2Rpc2FibGVfZml4ZWQoaHdjLCBpZHgpOwotCQlyZXR1cm47Ci0JfQotCi0JeDg2X3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1hbWRfcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKLXsKLQl4ODZfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOwotfQotCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodTY0IFtYODZfUE1DX0lEWF9NQVhdLCBwbWNfcHJldl9sZWZ0KTsKIAogLyoKQEAgLTEzMjYsMjIwICs5MTksNjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWludGVsX3BtdV9lbmFibGVfZml4ZWQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IF9faWR4KQotewotCWludCBpZHggPSBfX2lkeCAtIFg4Nl9QTUNfSURYX0ZJWEVEOwotCXU2NCBjdHJsX3ZhbCwgYml0cywgbWFzazsKLQlpbnQgZXJyOwotCi0JLyoKLQkgKiBFbmFibGUgSVJRIGdlbmVyYXRpb24gKDB4OCksCi0JICogYW5kIGVuYWJsZSByaW5nLTMgY291bnRpbmcgKDB4MikgYW5kIHJpbmctMCBjb3VudGluZyAoMHgxKQotCSAqIGlmIHJlcXVlc3RlZDoKLQkgKi8KLQliaXRzID0gMHg4VUxMOwotCWlmIChod2MtPmNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9VU1IpCi0JCWJpdHMgfD0gMHgyOwotCWlmIChod2MtPmNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUykKLQkJYml0cyB8PSAweDE7Ci0KLQkvKgotCSAqIEFOWSBiaXQgaXMgc3VwcG9ydGVkIGluIHYzIGFuZCB1cAotCSAqLwotCWlmICh4ODZfcG11LnZlcnNpb24gPiAyICYmIGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0FOWSkKLQkJYml0cyB8PSAweDQ7Ci0KLQliaXRzIDw8PSAoaWR4ICogNCk7Ci0JbWFzayA9IDB4ZlVMTCA8PCAoaWR4ICogNCk7Ci0KLQlyZG1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOwotCWN0cmxfdmFsICY9IH5tYXNrOwotCWN0cmxfdmFsIHw9IGJpdHM7Ci0JZXJyID0gY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UsIGN0cmxfdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgcDZfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQorc3RhdGljIHZvaWQgeDg2X3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKIHsKIAlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCXU2NCB2YWw7Ci0KLQl2YWwgPSBod2MtPmNvbmZpZzsKIAlpZiAoY3B1Yy0+ZW5hYmxlZCkKLQkJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwotCi0JKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsIHZhbCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgaW50ZWxfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQotewotCWlmICh1bmxpa2VseShpZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKSkgewotCQlpZiAoIV9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cykuZW5hYmxlZCkKLQkJCXJldHVybjsKLQotCQlpbnRlbF9wbXVfZW5hYmxlX2J0cyhod2MtPmNvbmZpZyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAodW5saWtlbHkoaHdjLT5jb25maWdfYmFzZSA9PSBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUl9DVFJMKSkgewotCQlpbnRlbF9wbXVfZW5hYmxlX2ZpeGVkKGh3YywgaWR4KTsKLQkJcmV0dXJuOwotCX0KLQotCXg4Nl9wbXVfZW5hYmxlX2V2ZW50KGh3YywgaWR4KTsKLX0KLQotc3RhdGljIHZvaWQgYW1kX3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCi0JaWYgKGNwdWMtPmVuYWJsZWQpCi0JCXg4Nl9wbXVfZW5hYmxlX2V2ZW50KGh3YywgaWR4KTsKLX0KLQotc3RhdGljIGludCBmaXhlZF9tb2RlX2lkeChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjKQotewotCXVuc2lnbmVkIGludCBod19ldmVudDsKLQotCWh3X2V2ZW50ID0gaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRfTUFTSzsKLQotCWlmICh1bmxpa2VseSgoaHdfZXZlbnQgPT0KLQkJICAgICAgeDg2X3BtdS5ldmVudF9tYXAoUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TKSkgJiYKLQkJICAgICAoaHdjLT5zYW1wbGVfcGVyaW9kID09IDEpKSkKLQkJcmV0dXJuIFg4Nl9QTUNfSURYX0ZJWEVEX0JUUzsKLQotCWlmICgheDg2X3BtdS5udW1fZXZlbnRzX2ZpeGVkKQotCQlyZXR1cm4gLTE7Ci0KLQkvKgotCSAqIGZpeGVkIGNvdW50ZXJzIGRvIG5vdCB0YWtlIGFsbCBwb3NzaWJsZSBmaWx0ZXJzCi0JICovCi0JaWYgKGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UX0ZJTFRFUl9NQVNLKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAodW5saWtlbHkoaHdfZXZlbnQgPT0geDg2X3BtdS5ldmVudF9tYXAoUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlMpKSkKLQkJcmV0dXJuIFg4Nl9QTUNfSURYX0ZJWEVEX0lOU1RSVUNUSU9OUzsKLQlpZiAodW5saWtlbHkoaHdfZXZlbnQgPT0geDg2X3BtdS5ldmVudF9tYXAoUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTKSkpCi0JCXJldHVybiBYODZfUE1DX0lEWF9GSVhFRF9DUFVfQ1lDTEVTOwotCWlmICh1bmxpa2VseShod19ldmVudCA9PSB4ODZfcG11LmV2ZW50X21hcChQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVMpKSkKLQkJcmV0dXJuIFg4Nl9QTUNfSURYX0ZJWEVEX0JVU19DWUNMRVM7Ci0KLQlyZXR1cm4gLTE7CisJCV9feDg2X3BtdV9lbmFibGVfZXZlbnQoaHdjLCBpZHgpOwogfQogCiAvKgotICogZ2VuZXJpYyBjb3VudGVyIGFsbG9jYXRvcjogZ2V0IG5leHQgZnJlZSBjb3VudGVyCi0gKi8KLXN0YXRpYyBpbnQKLWdlbl9nZXRfZXZlbnRfaWR4KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjKQotewotCWludCBpZHg7Ci0KLQlpZHggPSBmaW5kX2ZpcnN0X3plcm9fYml0KGNwdWMtPnVzZWRfbWFzaywgeDg2X3BtdS5udW1fZXZlbnRzKTsKLQlyZXR1cm4gaWR4ID09IHg4Nl9wbXUubnVtX2V2ZW50cyA/IC0xIDogaWR4OwotfQotCi0vKgotICogaW50ZWwtc3BlY2lmaWMgY291bnRlciBhbGxvY2F0b3I6IGNoZWNrIGV2ZW50IGNvbnN0cmFpbnRzCi0gKi8KLXN0YXRpYyBpbnQKLWludGVsX2dldF9ldmVudF9pZHgoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpCi17Ci0JY29uc3Qgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKmV2ZW50X2NvbnN0cmFpbnQ7Ci0JaW50IGksIGNvZGU7Ci0KLQlpZiAoIWV2ZW50X2NvbnN0cmFpbnRzKQotCQlnb3RvIHNraXA7Ci0KLQljb2RlID0gaHdjLT5jb25maWcgJiBDT1JFX0VWTlRTRUxfRVZFTlRfTUFTSzsKLQotCWZvcl9lYWNoX2V2ZW50X2NvbnN0cmFpbnQoZXZlbnRfY29uc3RyYWludCwgZXZlbnRfY29uc3RyYWludHMpIHsKLQkJaWYgKGNvZGUgPT0gZXZlbnRfY29uc3RyYWludC0+Y29kZSkgewotCQkJZm9yX2VhY2hfYml0KGksIGV2ZW50X2NvbnN0cmFpbnQtPmlkeG1zaywgWDg2X1BNQ19JRFhfTUFYKSB7Ci0JCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGksIGNwdWMtPnVzZWRfbWFzaykpCi0JCQkJCXJldHVybiBpOwotCQkJfQotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotc2tpcDoKLQlyZXR1cm4gZ2VuX2dldF9ldmVudF9pZHgoY3B1YywgaHdjKTsKLX0KLQotc3RhdGljIGludAoteDg2X3NjaGVkdWxlX2V2ZW50KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjKQotewotCWludCBpZHg7Ci0KLQlpZHggPSBmaXhlZF9tb2RlX2lkeChod2MpOwotCWlmIChpZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKSB7Ci0JCS8qIEJUUyBpcyBhbHJlYWR5IG9jY3VwaWVkLiAqLwotCQlpZiAodGVzdF9hbmRfc2V0X2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzaykpCi0JCQlyZXR1cm4gLUVBR0FJTjsKLQotCQlod2MtPmNvbmZpZ19iYXNlCT0gMDsKLQkJaHdjLT5ldmVudF9iYXNlCQk9IDA7Ci0JCWh3Yy0+aWR4CQk9IGlkeDsKLQl9IGVsc2UgaWYgKGlkeCA+PSAwKSB7Ci0JCS8qCi0JCSAqIFRyeSB0byBnZXQgdGhlIGZpeGVkIGV2ZW50LCBpZiB0aGF0IGlzIGFscmVhZHkgdGFrZW4KLQkJICogdGhlbiB0cnkgdG8gZ2V0IGEgZ2VuZXJpYyBldmVudDoKLQkJICovCi0JCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKSkKLQkJCWdvdG8gdHJ5X2dlbmVyaWM7Ci0KLQkJaHdjLT5jb25maWdfYmFzZSA9IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkw7Ci0JCS8qCi0JCSAqIFdlIHNldCBpdCBzbyB0aGF0IGV2ZW50X2Jhc2UgKyBpZHggaW4gd3Jtc3IvcmRtc3IgbWFwcyB0bwotCQkgKiBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgLi4uIENUUjI6Ci0JCSAqLwotCQlod2MtPmV2ZW50X2Jhc2UgPQotCQkJTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwIC0gWDg2X1BNQ19JRFhfRklYRUQ7Ci0JCWh3Yy0+aWR4ID0gaWR4OwotCX0gZWxzZSB7Ci0JCWlkeCA9IGh3Yy0+aWR4OwotCQkvKiBUcnkgdG8gZ2V0IHRoZSBwcmV2aW91cyBnZW5lcmljIGV2ZW50IGFnYWluICovCi0JCWlmIChpZHggPT0gLTEgfHwgdGVzdF9hbmRfc2V0X2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzaykpIHsKLXRyeV9nZW5lcmljOgotCQkJaWR4ID0geDg2X3BtdS5nZXRfZXZlbnRfaWR4KGNwdWMsIGh3Yyk7Ci0JCQlpZiAoaWR4ID09IC0xKQotCQkJCXJldHVybiAtRUFHQUlOOwotCi0JCQlzZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKTsKLQkJCWh3Yy0+aWR4ID0gaWR4OwotCQl9Ci0JCWh3Yy0+Y29uZmlnX2Jhc2UgPSB4ODZfcG11LmV2ZW50c2VsOwotCQlod2MtPmV2ZW50X2Jhc2UgID0geDg2X3BtdS5wZXJmY3RyOwotCX0KLQotCXJldHVybiBpZHg7Ci19Ci0KLS8qCi0gKiBGaW5kIGEgUE1DIHNsb3QgZm9yIHRoZSBmcmVzaGx5IGVuYWJsZWQgLyBzY2hlZHVsZWQgaW4gZXZlbnQ6CisgKiBhY3RpdmF0ZSBhIHNpbmdsZSBldmVudAorICoKKyAqIFRoZSBldmVudCBpcyBhZGRlZCB0byB0aGUgZ3JvdXAgb2YgZW5hYmxlZCBldmVudHMKKyAqIGJ1dCBvbmx5IGlmIGl0IGNhbiBiZSBzY2VoZHVsZWQgd2l0aCBleGlzdGluZyBldmVudHMuCisgKgorICogQ2FsbGVkIHdpdGggUE1VIGRpc2FibGVkLiBJZiBzdWNjZXNzZnVsIGFuZCByZXR1cm4gdmFsdWUgMSwKKyAqIHRoZW4gZ3VhcmFudGVlZCB0byBjYWxsIHBlcmZfZW5hYmxlKCkgYW5kIGh3X3BlcmZfZW5hYmxlKCkKICAqLwogc3RhdGljIGludCB4ODZfcG11X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCWludCBhc3NpZ25bWDg2X1BNQ19JRFhfTUFYXTsKKwlpbnQgbiwgbjAsIHJldDsKKworCWh3YyA9ICZldmVudC0+aHc7CisKKwluMCA9IGNwdWMtPm5fZXZlbnRzOworCW4gPSBjb2xsZWN0X2V2ZW50cyhjcHVjLCBldmVudCwgZmFsc2UpOworCWlmIChuIDwgMCkKKwkJcmV0dXJuIG47CisKKwlyZXQgPSB4ODZfc2NoZWR1bGVfZXZlbnRzKGNwdWMsIG4sIGFzc2lnbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwkvKgorCSAqIGNvcHkgbmV3IGFzc2lnbm1lbnQsIG5vdyB3ZSBrbm93IGl0IGlzIHBvc3NpYmxlCisJICogd2lsbCBiZSB1c2VkIGJ5IGh3X3BlcmZfZW5hYmxlKCkKKwkgKi8KKwltZW1jcHkoY3B1Yy0+YXNzaWduLCBhc3NpZ24sIG4qc2l6ZW9mKGludCkpOworCisJY3B1Yy0+bl9ldmVudHMgPSBuOworCWNwdWMtPm5fYWRkZWQgID0gbiAtIG4wOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeDg2X3BtdV9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Ci0JaW50IGlkeDsKIAotCWlkeCA9IHg4Nl9zY2hlZHVsZV9ldmVudChjcHVjLCBod2MpOwotCWlmIChpZHggPCAwKQotCQlyZXR1cm4gaWR4OworCWlmIChod2MtPmlkeCA9PSAtMSkKKwkJcmV0dXJuIC1FQUdBSU47CiAKLQlwZXJmX2V2ZW50c19sYXBpY19pbml0KCk7Ci0KLQl4ODZfcG11LmRpc2FibGUoaHdjLCBpZHgpOwotCi0JY3B1Yy0+ZXZlbnRzW2lkeF0gPSBldmVudDsKLQlzZXRfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spOwotCi0JeDg2X3BlcmZfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBpZHgpOwotCXg4Nl9wbXUuZW5hYmxlKGh3YywgaWR4KTsKLQotCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKKwl4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGh3Yy0+aWR4KTsKKwl4ODZfcG11LmVuYWJsZShod2MsIGh3Yy0+aWR4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTU4Myw3ICsxMDE2LDcgQEAKIAkJcHJfaW5mbygiQ1BVIyVkOiBvdmVyZmxvdzogICAlMDE2bGx4XG4iLCBjcHUsIG92ZXJmbG93KTsKIAkJcHJfaW5mbygiQ1BVIyVkOiBmaXhlZDogICAgICAlMDE2bGx4XG4iLCBjcHUsIGZpeGVkKTsKIAl9Ci0JcHJfaW5mbygiQ1BVIyVkOiB1c2VkOiAgICAgICAlMDE2bGx4XG4iLCBjcHUsICoodTY0ICopY3B1Yy0+dXNlZF9tYXNrKTsKKwlwcl9pbmZvKCJDUFUjJWQ6IGFjdGl2ZTogICAgICAgJTAxNmxseFxuIiwgY3B1LCAqKHU2NCAqKWNwdWMtPmFjdGl2ZV9tYXNrKTsKIAogCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpZHgrKykgewogCQlyZG1zcmwoeDg2X3BtdS5ldmVudHNlbCArIGlkeCwgcG1jX2N0cmwpOwpAQCAtMTYwNyw2NyArMTA0MCw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YykKLXsKLQlzdHJ1Y3QgZGVidWdfc3RvcmUgKmRzID0gY3B1Yy0+ZHM7Ci0Jc3RydWN0IGJ0c19yZWNvcmQgewotCQl1NjQJZnJvbTsKLQkJdTY0CXRvOwotCQl1NjQJZmxhZ3M7Ci0JfTsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbWDg2X1BNQ19JRFhfRklYRURfQlRTXTsKLQlzdHJ1Y3QgYnRzX3JlY29yZCAqYXQsICp0b3A7Ci0Jc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSBoYW5kbGU7Ci0Jc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKLQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwotCXN0cnVjdCBwdF9yZWdzIHJlZ3M7Ci0KLQlpZiAoIWV2ZW50KQotCQlyZXR1cm47Ci0KLQlpZiAoIWRzKQotCQlyZXR1cm47Ci0KLQlhdCAgPSAoc3RydWN0IGJ0c19yZWNvcmQgKikodW5zaWduZWQgbG9uZylkcy0+YnRzX2J1ZmZlcl9iYXNlOwotCXRvcCA9IChzdHJ1Y3QgYnRzX3JlY29yZCAqKSh1bnNpZ25lZCBsb25nKWRzLT5idHNfaW5kZXg7Ci0KLQlpZiAodG9wIDw9IGF0KQotCQlyZXR1cm47Ci0KLQlkcy0+YnRzX2luZGV4ID0gZHMtPmJ0c19idWZmZXJfYmFzZTsKLQotCi0JZGF0YS5wZXJpb2QJPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7Ci0JZGF0YS5hZGRyCT0gMDsKLQlkYXRhLnJhdwk9IE5VTEw7Ci0JcmVncy5pcAkJPSAwOwotCi0JLyoKLQkgKiBQcmVwYXJlIGEgZ2VuZXJpYyBzYW1wbGUsIGkuZS4gZmlsbCBpbiB0aGUgaW52YXJpYW50IGZpZWxkcy4KLQkgKiBXZSB3aWxsIG92ZXJ3cml0ZSB0aGUgZnJvbSBhbmQgdG8gYWRkcmVzcyBiZWZvcmUgd2Ugb3V0cHV0Ci0JICogdGhlIHNhbXBsZS4KLQkgKi8KLQlwZXJmX3ByZXBhcmVfc2FtcGxlKCZoZWFkZXIsICZkYXRhLCBldmVudCwgJnJlZ3MpOwotCi0JaWYgKHBlcmZfb3V0cHV0X2JlZ2luKCZoYW5kbGUsIGV2ZW50LAotCQkJICAgICAgaGVhZGVyLnNpemUgKiAodG9wIC0gYXQpLCAxLCAxKSkKLQkJcmV0dXJuOwotCi0JZm9yICg7IGF0IDwgdG9wOyBhdCsrKSB7Ci0JCWRhdGEuaXAJCT0gYXQtPmZyb207Ci0JCWRhdGEuYWRkcgk9IGF0LT50bzsKLQotCQlwZXJmX291dHB1dF9zYW1wbGUoJmhhbmRsZSwgJmhlYWRlciwgJmRhdGEsIGV2ZW50KTsKLQl9Ci0KLQlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7Ci0KLQkvKiBUaGVyZSdzIG5ldyBkYXRhIGF2YWlsYWJsZS4gKi8KLQlldmVudC0+aHcuaW50ZXJydXB0cysrOwotCWV2ZW50LT5wZW5kaW5nX2tpbGwgPSBQT0xMX0lOOwotfQotCi1zdGF0aWMgdm9pZCB4ODZfcG11X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQorc3RhdGljIHZvaWQgeDg2X3BtdV9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwpAQCAtMTY4MSw3MyArMTA1NCwzOCBAQAogCXg4Nl9wbXUuZGlzYWJsZShod2MsIGlkeCk7CiAKIAkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgY2xlYXJlZCBwb2ludGVyIGJlY29tZXMgdmlzaWJsZSBiZWZvcmUgd2UKLQkgKiAocG90ZW50aWFsbHkpIGZyZWUgdGhlIGV2ZW50OgotCSAqLwotCWJhcnJpZXIoKTsKLQotCS8qCiAJICogRHJhaW4gdGhlIHJlbWFpbmluZyBkZWx0YSBjb3VudCBvdXQgb2YgYSBldmVudAogCSAqIHRoYXQgd2UgYXJlIGRpc2FibGluZzoKIAkgKi8KIAl4ODZfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKIAotCS8qIERyYWluIHRoZSByZW1haW5pbmcgQlRTIHJlY29yZHMuICovCi0JaWYgKHVubGlrZWx5KGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpKQotCQlpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcihjcHVjKTsKLQogCWNwdWMtPmV2ZW50c1tpZHhdID0gTlVMTDsKLQljbGVhcl9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spOworfQogCitzdGF0aWMgdm9pZCB4ODZfcG11X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJaW50IGk7CisKKwl4ODZfcG11X3N0b3AoZXZlbnQpOworCisJZm9yIChpID0gMDsgaSA8IGNwdWMtPm5fZXZlbnRzOyBpKyspIHsKKwkJaWYgKGV2ZW50ID09IGNwdWMtPmV2ZW50X2xpc3RbaV0pIHsKKworCQkJaWYgKHg4Nl9wbXUucHV0X2V2ZW50X2NvbnN0cmFpbnRzKQorCQkJCXg4Nl9wbXUucHV0X2V2ZW50X2NvbnN0cmFpbnRzKGNwdWMsIGV2ZW50KTsKKworCQkJd2hpbGUgKCsraSA8IGNwdWMtPm5fZXZlbnRzKQorCQkJCWNwdWMtPmV2ZW50X2xpc3RbaS0xXSA9IGNwdWMtPmV2ZW50X2xpc3RbaV07CisKKwkJCS0tY3B1Yy0+bl9ldmVudHM7CisJCQlicmVhazsKKwkJfQorCX0KIAlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CiB9CiAKLS8qCi0gKiBTYXZlIGFuZCByZXN0YXJ0IGFuIGV4cGlyZWQgZXZlbnQuIENhbGxlZCBieSBOTUkgY29udGV4dHMsCi0gKiBzbyBpdCBoYXMgdG8gYmUgY2FyZWZ1bCBhYm91dCBwcmVlbXB0aW5nIG5vcm1hbCBldmVudCBvcHM6Ci0gKi8KLXN0YXRpYyBpbnQgaW50ZWxfcG11X3NhdmVfYW5kX3Jlc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQotewotCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwotCWludCBpZHggPSBod2MtPmlkeDsKLQlpbnQgcmV0OwotCi0JeDg2X3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7Ci0JcmV0ID0geDg2X3BlcmZfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBpZHgpOwotCi0JaWYgKGV2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkKLQkJaW50ZWxfcG11X2VuYWJsZV9ldmVudChod2MsIGlkeCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfcmVzZXQodm9pZCkKLXsKLQlzdHJ1Y3QgZGVidWdfc3RvcmUgKmRzID0gX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKS5kczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpZHg7Ci0KLQlpZiAoIXg4Nl9wbXUubnVtX2V2ZW50cykKLQkJcmV0dXJuOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JcHJpbnRrKCJjbGVhcmluZyBQTVUgc3RhdGUgb24gQ1BVIyVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCi0JZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHM7IGlkeCsrKSB7Ci0JCWNoZWNraW5nX3dybXNybCh4ODZfcG11LmV2ZW50c2VsICsgaWR4LCAwdWxsKTsKLQkJY2hlY2tpbmdfd3Jtc3JsKHg4Nl9wbXUucGVyZmN0ciAgKyBpZHgsIDB1bGwpOwotCX0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50c19maXhlZDsgaWR4KyspIHsKLQkJY2hlY2tpbmdfd3Jtc3JsKE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCArIGlkeCwgMHVsbCk7Ci0JfQotCWlmIChkcykKLQkJZHMtPmJ0c19pbmRleCA9IGRzLT5idHNfYnVmZmVyX2Jhc2U7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgcDZfcG11X2hhbmRsZV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaW50IHg4Nl9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOwpAQCAtMTc4MiwxMTcgKzExMjAsNyBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsICZkYXRhLCByZWdzKSkKLQkJCXA2X3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKLQl9Ci0KLQlpZiAoaGFuZGxlZCkKLQkJaW5jX2lycV9zdGF0KGFwaWNfcGVyZl9pcnFzKTsKLQotCXJldHVybiBoYW5kbGVkOwotfQotCi0vKgotICogVGhpcyBoYW5kbGVyIGlzIHRyaWdnZXJlZCBieSB0aGUgbG9jYWwgQVBJQywgc28gdGhlIEFQSUMgSVJRIGhhbmRsaW5nCi0gKiBydWxlcyBhcHBseToKLSAqLwotc3RhdGljIGludCBpbnRlbF9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOwotCWludCBiaXQsIGxvb3BzOwotCXU2NCBhY2ssIHN0YXR1czsKLQotCWRhdGEuYWRkciA9IDA7Ci0JZGF0YS5yYXcgPSBOVUxMOwotCi0JY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCi0JcGVyZl9kaXNhYmxlKCk7Ci0JaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoY3B1Yyk7Ci0Jc3RhdHVzID0gaW50ZWxfcG11X2dldF9zdGF0dXMoKTsKLQlpZiAoIXN0YXR1cykgewotCQlwZXJmX2VuYWJsZSgpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlsb29wcyA9IDA7Ci1hZ2FpbjoKLQlpZiAoKytsb29wcyA+IDEwMCkgewotCQlXQVJOX09OQ0UoMSwgInBlcmZldmVudHM6IGlycSBsb29wIHN0dWNrIVxuIik7Ci0JCXBlcmZfZXZlbnRfcHJpbnRfZGVidWcoKTsKLQkJaW50ZWxfcG11X3Jlc2V0KCk7Ci0JCXBlcmZfZW5hYmxlKCk7Ci0JCXJldHVybiAxOwotCX0KLQotCWluY19pcnFfc3RhdChhcGljX3BlcmZfaXJxcyk7Ci0JYWNrID0gc3RhdHVzOwotCWZvcl9lYWNoX2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopJnN0YXR1cywgWDg2X1BNQ19JRFhfTUFYKSB7Ci0JCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tiaXRdOwotCi0JCWNsZWFyX2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopICZzdGF0dXMpOwotCQlpZiAoIXRlc3RfYml0KGJpdCwgY3B1Yy0+YWN0aXZlX21hc2spKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFpbnRlbF9wbXVfc2F2ZV9hbmRfcmVzdGFydChldmVudCkpCi0JCQljb250aW51ZTsKLQotCQlkYXRhLnBlcmlvZCA9IGV2ZW50LT5ody5sYXN0X3BlcmlvZDsKLQotCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgJmRhdGEsIHJlZ3MpKQotCQkJaW50ZWxfcG11X2Rpc2FibGVfZXZlbnQoJmV2ZW50LT5odywgYml0KTsKLQl9Ci0KLQlpbnRlbF9wbXVfYWNrX3N0YXR1cyhhY2spOwotCi0JLyoKLQkgKiBSZXBlYXQgaWYgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGJlIGRvbmU6Ci0JICovCi0Jc3RhdHVzID0gaW50ZWxfcG11X2dldF9zdGF0dXMoKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGFnYWluOwotCi0JcGVyZl9lbmFibGUoKTsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IGFtZF9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOwotCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKLQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOwotCWludCBpZHgsIGhhbmRsZWQgPSAwOwotCXU2NCB2YWw7Ci0KLQlkYXRhLmFkZHIgPSAwOwotCWRhdGEucmF3ID0gTlVMTDsKLQotCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpZHgrKykgewotCQlpZiAoIXRlc3RfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spKQotCQkJY29udGludWU7Ci0KLQkJZXZlbnQgPSBjcHVjLT5ldmVudHNbaWR4XTsKLQkJaHdjID0gJmV2ZW50LT5odzsKLQotCQl2YWwgPSB4ODZfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKLQkJaWYgKHZhbCAmICgxVUxMIDw8ICh4ODZfcG11LmV2ZW50X2JpdHMgLSAxKSkpCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBldmVudCBvdmVyZmxvdwotCQkgKi8KLQkJaGFuZGxlZAkJPSAxOwotCQlkYXRhLnBlcmlvZAk9IGV2ZW50LT5ody5sYXN0X3BlcmlvZDsKLQotCQlpZiAoIXg4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2QoZXZlbnQsIGh3YywgaWR4KSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCAmZGF0YSwgcmVncykpCi0JCQlhbWRfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOworCQkJeDg2X3BtdS5kaXNhYmxlKGh3YywgaWR4KTsKIAl9CiAKIAlpZiAoaGFuZGxlZCkKQEAgLTE5NzUsMTk1ICsxMjAzLDEzOCBAQAogCS5wcmlvcml0eQkJPSAxCiB9OwogCi1zdGF0aWMgX19pbml0Y29uc3Qgc3RydWN0IHg4Nl9wbXUgcDZfcG11ID0gewotCS5uYW1lCQkJPSAicDYiLAotCS5oYW5kbGVfaXJxCQk9IHA2X3BtdV9oYW5kbGVfaXJxLAotCS5kaXNhYmxlX2FsbAkJPSBwNl9wbXVfZGlzYWJsZV9hbGwsCi0JLmVuYWJsZV9hbGwJCT0gcDZfcG11X2VuYWJsZV9hbGwsCi0JLmVuYWJsZQkJCT0gcDZfcG11X2VuYWJsZV9ldmVudCwKLQkuZGlzYWJsZQkJPSBwNl9wbXVfZGlzYWJsZV9ldmVudCwKLQkuZXZlbnRzZWwJCT0gTVNSX1A2X0VWTlRTRUwwLAotCS5wZXJmY3RyCQk9IE1TUl9QNl9QRVJGQ1RSMCwKLQkuZXZlbnRfbWFwCQk9IHA2X3BtdV9ldmVudF9tYXAsCi0JLnJhd19ldmVudAkJPSBwNl9wbXVfcmF3X2V2ZW50LAotCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUocDZfcGVyZm1vbl9ldmVudF9tYXApLAotCS5hcGljCQkJPSAxLAotCS5tYXhfcGVyaW9kCQk9ICgxVUxMIDw8IDMxKSAtIDEsCi0JLnZlcnNpb24JCT0gMCwKLQkubnVtX2V2ZW50cwkJPSAyLAotCS8qCi0JICogRXZlbnRzIGhhdmUgNDAgYml0cyBpbXBsZW1lbnRlZC4gSG93ZXZlciB0aGV5IGFyZSBkZXNpZ25lZCBzdWNoCi0JICogdGhhdCBiaXRzIFszMi0zOV0gYXJlIHNpZ24gZXh0ZW5zaW9ucyBvZiBiaXQgMzEuIEFzIHN1Y2ggdGhlCi0JICogZWZmZWN0aXZlIHdpZHRoIG9mIGEgZXZlbnQgZm9yIFA2LWxpa2UgUE1VIGlzIDMyIGJpdHMgb25seS4KLQkgKgotCSAqIFNlZSBJQS0zMiBJbnRlbCBBcmNoaXRlY3R1cmUgU29mdHdhcmUgZGV2ZWxvcGVyIG1hbnVhbCBWb2wgM0IKLQkgKi8KLQkuZXZlbnRfYml0cwkJPSAzMiwKLQkuZXZlbnRfbWFzawkJPSAoMVVMTCA8PCAzMikgLSAxLAotCS5nZXRfZXZlbnRfaWR4CQk9IGludGVsX2dldF9ldmVudF9pZHgsCi19Oworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IHVuY29uc3RyYWluZWQ7CitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgZW1wdHljb25zdHJhaW50OwogCi1zdGF0aWMgX19pbml0Y29uc3Qgc3RydWN0IHg4Nl9wbXUgaW50ZWxfcG11ID0gewotCS5uYW1lCQkJPSAiSW50ZWwiLAotCS5oYW5kbGVfaXJxCQk9IGludGVsX3BtdV9oYW5kbGVfaXJxLAotCS5kaXNhYmxlX2FsbAkJPSBpbnRlbF9wbXVfZGlzYWJsZV9hbGwsCi0JLmVuYWJsZV9hbGwJCT0gaW50ZWxfcG11X2VuYWJsZV9hbGwsCi0JLmVuYWJsZQkJCT0gaW50ZWxfcG11X2VuYWJsZV9ldmVudCwKLQkuZGlzYWJsZQkJPSBpbnRlbF9wbXVfZGlzYWJsZV9ldmVudCwKLQkuZXZlbnRzZWwJCT0gTVNSX0FSQ0hfUEVSRk1PTl9FVkVOVFNFTDAsCi0JLnBlcmZjdHIJCT0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCwKLQkuZXZlbnRfbWFwCQk9IGludGVsX3BtdV9ldmVudF9tYXAsCi0JLnJhd19ldmVudAkJPSBpbnRlbF9wbXVfcmF3X2V2ZW50LAotCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUoaW50ZWxfcGVyZm1vbl9ldmVudF9tYXApLAotCS5hcGljCQkJPSAxLAotCS8qCi0JICogSW50ZWwgUE1DcyBjYW5ub3QgYmUgYWNjZXNzZWQgc2FuZWx5IGFib3ZlIDMyIGJpdCB3aWR0aCwKLQkgKiBzbyB3ZSBpbnN0YWxsIGFuIGFydGlmaWNpYWwgMTw8MzEgcGVyaW9kIHJlZ2FyZGxlc3Mgb2YKLQkgKiB0aGUgZ2VuZXJpYyBldmVudCBwZXJpb2Q6Ci0JICovCi0JLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgMzEpIC0gMSwKLQkuZW5hYmxlX2J0cwkJPSBpbnRlbF9wbXVfZW5hYmxlX2J0cywKLQkuZGlzYWJsZV9idHMJCT0gaW50ZWxfcG11X2Rpc2FibGVfYnRzLAotCS5nZXRfZXZlbnRfaWR4CQk9IGludGVsX2dldF9ldmVudF9pZHgsCi19OwotCi1zdGF0aWMgX19pbml0Y29uc3Qgc3RydWN0IHg4Nl9wbXUgYW1kX3BtdSA9IHsKLQkubmFtZQkJCT0gIkFNRCIsCi0JLmhhbmRsZV9pcnEJCT0gYW1kX3BtdV9oYW5kbGVfaXJxLAotCS5kaXNhYmxlX2FsbAkJPSBhbWRfcG11X2Rpc2FibGVfYWxsLAotCS5lbmFibGVfYWxsCQk9IGFtZF9wbXVfZW5hYmxlX2FsbCwKLQkuZW5hYmxlCQkJPSBhbWRfcG11X2VuYWJsZV9ldmVudCwKLQkuZGlzYWJsZQkJPSBhbWRfcG11X2Rpc2FibGVfZXZlbnQsCi0JLmV2ZW50c2VsCQk9IE1TUl9LN19FVk5UU0VMMCwKLQkucGVyZmN0cgkJPSBNU1JfSzdfUEVSRkNUUjAsCi0JLmV2ZW50X21hcAkJPSBhbWRfcG11X2V2ZW50X21hcCwKLQkucmF3X2V2ZW50CQk9IGFtZF9wbXVfcmF3X2V2ZW50LAotCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUoYW1kX3BlcmZtb25fZXZlbnRfbWFwKSwKLQkubnVtX2V2ZW50cwkJPSA0LAotCS5ldmVudF9iaXRzCQk9IDQ4LAotCS5ldmVudF9tYXNrCQk9ICgxVUxMIDw8IDQ4KSAtIDEsCi0JLmFwaWMJCQk9IDEsCi0JLyogdXNlIGhpZ2hlc3QgYml0IHRvIGRldGVjdCBvdmVyZmxvdyAqLwotCS5tYXhfcGVyaW9kCQk9ICgxVUxMIDw8IDQ3KSAtIDEsCi0JLmdldF9ldmVudF9pZHgJCT0gZ2VuX2dldF9ldmVudF9pZHgsCi19OwotCi1zdGF0aWMgX19pbml0IGludCBwNl9wbXVfaW5pdCh2b2lkKQorc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50ICoKK3g4Nl9nZXRfZXZlbnRfY29uc3RyYWludHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsKSB7Ci0JY2FzZSAxOgotCWNhc2UgMzogIC8qIFBlbnRpdW0gUHJvICovCi0JY2FzZSA1OgotCWNhc2UgNjogIC8qIFBlbnRpdW0gSUkgKi8KLQljYXNlIDc6Ci0JY2FzZSA4OgotCWNhc2UgMTE6IC8qIFBlbnRpdW0gSUlJICovCi0JCWV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfcDZfZXZlbnRfY29uc3RyYWludHM7Ci0JCWJyZWFrOwotCWNhc2UgOToKLQljYXNlIDEzOgotCQkvKiBQZW50aXVtIE0gKi8KLQkJZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF9wNl9ldmVudF9jb25zdHJhaW50czsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfY29udCgidW5zdXBwb3J0ZWQgcDYgQ1BVIG1vZGVsICVkICIsCi0JCQlib290X2NwdV9kYXRhLng4Nl9tb2RlbCk7Ci0JCXJldHVybiAtRU5PREVWOworCXN0cnVjdCBldmVudF9jb25zdHJhaW50ICpjOworCisJaWYgKHg4Nl9wbXUuZXZlbnRfY29uc3RyYWludHMpIHsKKwkJZm9yX2VhY2hfZXZlbnRfY29uc3RyYWludChjLCB4ODZfcG11LmV2ZW50X2NvbnN0cmFpbnRzKSB7CisJCQlpZiAoKGV2ZW50LT5ody5jb25maWcgJiBjLT5jbWFzaykgPT0gYy0+Y29kZSkKKwkJCQlyZXR1cm4gYzsKKwkJfQogCX0KIAotCXg4Nl9wbXUgPSBwNl9wbXU7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gJnVuY29uc3RyYWluZWQ7CiB9CiAKLXN0YXRpYyBfX2luaXQgaW50IGludGVsX3BtdV9pbml0KHZvaWQpCitzdGF0aWMgaW50IHg4Nl9ldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgpCiB7Ci0JdW5pb24gY3B1aWQxMF9lZHggZWR4OwotCXVuaW9uIGNwdWlkMTBfZWF4IGVheDsKLQl1bnNpZ25lZCBpbnQgdW51c2VkOwotCXVuc2lnbmVkIGludCBlYng7Ci0JaW50IHZlcnNpb247CisJaW50IHJldCA9IDA7CiAKLQlpZiAoIWNwdV9oYXMoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FSQ0hfUEVSRk1PTikpIHsKLQkJLyogY2hlY2sgZm9yIFA2IHByb2Nlc3NvciBmYW1pbHkgKi8KLQkgICBpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNikgewotCQlyZXR1cm4gcDZfcG11X2luaXQoKTsKLQkgICB9IGVsc2UgewotCQlyZXR1cm4gLUVOT0RFVjsKLQkgICB9Ci0JfQorCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFOworCWV2ZW50LT5vbmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlldmVudC0+dHN0YW1wX3J1bm5pbmcgKz0gZXZlbnQtPmN0eC0+dGltZSAtIGV2ZW50LT50c3RhbXBfc3RvcHBlZDsKIAotCS8qCi0JICogQ2hlY2sgd2hldGhlciB0aGUgQXJjaGl0ZWN0dXJhbCBQZXJmTW9uIHN1cHBvcnRzCi0JICogQnJhbmNoIE1pc3NlcyBSZXRpcmVkIGh3X2V2ZW50IG9yIG5vdC4KLQkgKi8KLQljcHVpZCgxMCwgJmVheC5mdWxsLCAmZWJ4LCAmdW51c2VkLCAmZWR4LmZ1bGwpOwotCWlmIChlYXguc3BsaXQubWFza19sZW5ndGggPD0gQVJDSF9QRVJGTU9OX0JSQU5DSF9NSVNTRVNfUkVUSVJFRCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFpc194ODZfZXZlbnQoZXZlbnQpKQorCQlyZXQgPSBldmVudC0+cG11LT5lbmFibGUoZXZlbnQpOwogCi0JdmVyc2lvbiA9IGVheC5zcGxpdC52ZXJzaW9uX2lkOwotCWlmICh2ZXJzaW9uIDwgMikKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFyZXQgJiYgIWlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSkKKwkJY3B1Y3R4LT5hY3RpdmVfb25jcHUrKzsKIAotCXg4Nl9wbXUJCQkJPSBpbnRlbF9wbXU7Ci0JeDg2X3BtdS52ZXJzaW9uCQkJPSB2ZXJzaW9uOwotCXg4Nl9wbXUubnVtX2V2ZW50cwkJPSBlYXguc3BsaXQubnVtX2V2ZW50czsKLQl4ODZfcG11LmV2ZW50X2JpdHMJCT0gZWF4LnNwbGl0LmJpdF93aWR0aDsKLQl4ODZfcG11LmV2ZW50X21hc2sJCT0gKDFVTEwgPDwgZWF4LnNwbGl0LmJpdF93aWR0aCkgLSAxOworCWlmICghcmV0ICYmIGV2ZW50LT5hdHRyLmV4Y2x1c2l2ZSkKKwkJY3B1Y3R4LT5leGNsdXNpdmUgPSAxOwogCi0JLyoKLQkgKiBRdWlyazogdjIgcGVyZm1vbiBkb2VzIG5vdCByZXBvcnQgZml4ZWQtcHVycG9zZSBldmVudHMsIHNvCi0JICogYXNzdW1lIGF0IGxlYXN0IDMgZXZlbnRzOgotCSAqLwotCXg4Nl9wbXUubnVtX2V2ZW50c19maXhlZAk9IG1heCgoaW50KWVkeC5zcGxpdC5udW1fZXZlbnRzX2ZpeGVkLCAzKTsKLQotCS8qCi0JICogSW5zdGFsbCB0aGUgaHctY2FjaGUtZXZlbnRzIHRhYmxlOgotCSAqLwotCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpIHsKLQljYXNlIDE1OiAvKiBvcmlnaW5hbCA2NSBubSBjZWxlcm9uL3BlbnRpdW0vY29yZTIveGVvbiwgIk1lcm9tIi8iQ29ucm9lIiAqLwotCWNhc2UgMjI6IC8qIHNpbmdsZS1jb3JlIDY1IG5tIGNlbGVyb24vY29yZTJzb2xvICJNZXJvbS1MIi8iQ29ucm9lLUwiICovCi0JY2FzZSAyMzogLyogY3VycmVudCA0NSBubSBjZWxlcm9uL2NvcmUyL3hlb24gIlBlbnJ5biIvIldvbGZkYWxlIiAqLwotCWNhc2UgMjk6IC8qIHNpeC1jb3JlIDQ1IG5tIHhlb24gIkR1bm5pbmd0b24iICovCi0JCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIGNvcmUyX2h3X2NhY2hlX2V2ZW50X2lkcywKLQkJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKLQotCQlwcl9jb250KCJDb3JlMiBldmVudHMsICIpOwotCQlldmVudF9jb25zdHJhaW50cyA9IGludGVsX2NvcmVfZXZlbnRfY29uc3RyYWludHM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JY2FzZSAyNjoKLQkJbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgbmVoYWxlbV9od19jYWNoZV9ldmVudF9pZHMsCi0JCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7Ci0KLQkJZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF9uZWhhbGVtX2V2ZW50X2NvbnN0cmFpbnRzOwotCQlwcl9jb250KCJOZWhhbGVtL0NvcmVpNyBldmVudHMsICIpOwotCQlicmVhazsKLQljYXNlIDI4OgotCQltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBhdG9tX2h3X2NhY2hlX2V2ZW50X2lkcywKLQkJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKLQotCQlwcl9jb250KCJBdG9tIGV2ZW50cywgIik7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgX19pbml0IGludCBhbWRfcG11X2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIHg4Nl9ldmVudF9zY2hlZF9vdXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgpCiB7Ci0JLyogUGVyZm9ybWFuY2UtbW9uaXRvcmluZyBzdXBwb3J0ZWQgZnJvbSBLNyBhbmQgbGF0ZXI6ICovCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2IDwgNikKLQkJcmV0dXJuIC1FTk9ERVY7CisJZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRTsKKwlldmVudC0+b25jcHUgPSAtMTsKIAotCXg4Nl9wbXUgPSBhbWRfcG11OworCWlmICghaXNfeDg2X2V2ZW50KGV2ZW50KSkKKwkJZXZlbnQtPnBtdS0+ZGlzYWJsZShldmVudCk7CiAKLQkvKiBFdmVudHMgYXJlIGNvbW1vbiBmb3IgYWxsIEFNRHMgKi8KLQltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBhbWRfaHdfY2FjaGVfZXZlbnRfaWRzLAotCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CisJZXZlbnQtPnRzdGFtcF9ydW5uaW5nIC09IGV2ZW50LT5jdHgtPnRpbWUgLSBldmVudC0+dHN0YW1wX3N0b3BwZWQ7CiAKLQlyZXR1cm4gMDsKKwlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSkKKwkJY3B1Y3R4LT5hY3RpdmVfb25jcHUtLTsKKworCWlmIChldmVudC0+YXR0ci5leGNsdXNpdmUgfHwgIWNwdWN0eC0+YWN0aXZlX29uY3B1KQorCQljcHVjdHgtPmV4Y2x1c2l2ZSA9IDA7CiB9CiAKKy8qCisgKiBDYWxsZWQgdG8gZW5hYmxlIGEgd2hvbGUgZ3JvdXAgb2YgZXZlbnRzLgorICogUmV0dXJucyAxIGlmIHRoZSBncm91cCB3YXMgZW5hYmxlZCwgb3IgLUVBR0FJTiBpZiBpdCBjb3VsZCBub3QgYmUuCisgKiBBc3N1bWVzIHRoZSBjYWxsZXIgaGFzIGRpc2FibGVkIGludGVycnVwdHMgYW5kIGhhcworICogZnJvemVuIHRoZSBQTVUgd2l0aCBod19wZXJmX3NhdmVfZGlzYWJsZS4KKyAqCisgKiBjYWxsZWQgd2l0aCBQTVUgZGlzYWJsZWQuIElmIHN1Y2Nlc3NmdWwgYW5kIHJldHVybiB2YWx1ZSAxLAorICogdGhlbiBndWFyYW50ZWVkIHRvIGNhbGwgcGVyZl9lbmFibGUoKSBhbmQgaHdfcGVyZl9lbmFibGUoKQorICovCitpbnQgaHdfcGVyZl9ncm91cF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqbGVhZGVyLAorCSAgICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqc3ViOworCWludCBhc3NpZ25bWDg2X1BNQ19JRFhfTUFYXTsKKwlpbnQgbjAsIG4xLCByZXQ7CisKKwkvKiBuMCA9IHRvdGFsIG51bWJlciBvZiBldmVudHMgKi8KKwluMCA9IGNvbGxlY3RfZXZlbnRzKGNwdWMsIGxlYWRlciwgdHJ1ZSk7CisJaWYgKG4wIDwgMCkKKwkJcmV0dXJuIG4wOworCisJcmV0ID0geDg2X3NjaGVkdWxlX2V2ZW50cyhjcHVjLCBuMCwgYXNzaWduKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0geDg2X2V2ZW50X3NjaGVkX2luKGxlYWRlciwgY3B1Y3R4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbjEgPSAxOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmIChzdWItPnN0YXRlID4gUEVSRl9FVkVOVF9TVEFURV9PRkYpIHsKKwkJCXJldCA9IHg4Nl9ldmVudF9zY2hlZF9pbihzdWIsIGNwdWN0eCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gdW5kbzsKKwkJCSsrbjE7CisJCX0KKwl9CisJLyoKKwkgKiBjb3B5IG5ldyBhc3NpZ25tZW50LCBub3cgd2Uga25vdyBpdCBpcyBwb3NzaWJsZQorCSAqIHdpbGwgYmUgdXNlZCBieSBod19wZXJmX2VuYWJsZSgpCisJICovCisJbWVtY3B5KGNwdWMtPmFzc2lnbiwgYXNzaWduLCBuMCpzaXplb2YoaW50KSk7CisKKwljcHVjLT5uX2V2ZW50cyAgPSBuMDsKKwljcHVjLT5uX2FkZGVkICAgPSBuMTsKKwljdHgtPm5yX2FjdGl2ZSArPSBuMTsKKworCS8qCisJICogMSBtZWFucyBzdWNjZXNzZnVsIGFuZCBldmVudHMgYXJlIGFjdGl2ZQorCSAqIFRoaXMgaXMgbm90IHF1aXRlIHRydWUgYmVjYXVzZSB3ZSBkZWZlcgorCSAqIGFjdHVhbCBhY3RpdmF0aW9uIHVudGlsIGh3X3BlcmZfZW5hYmxlKCkgYnV0CisJICogdGhpcyB3YXkgd2UqIGVuc3VyZSBjYWxsZXIgd29uJ3QgdHJ5IHRvIGVuYWJsZQorCSAqIGluZGl2aWR1YWwgZXZlbnRzCisJICovCisJcmV0dXJuIDE7Cit1bmRvOgorCXg4Nl9ldmVudF9zY2hlZF9vdXQobGVhZGVyLCBjcHVjdHgpOworCW4wICA9IDE7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZsZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJaWYgKHN1Yi0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpIHsKKwkJCXg4Nl9ldmVudF9zY2hlZF9vdXQoc3ViLCBjcHVjdHgpOworCQkJaWYgKCsrbjAgPT0gbjEpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworI2luY2x1ZGUgInBlcmZfZXZlbnRfYW1kLmMiCisjaW5jbHVkZSAicGVyZl9ldmVudF9wNi5jIgorI2luY2x1ZGUgInBlcmZfZXZlbnRfaW50ZWwuYyIKKwogc3RhdGljIHZvaWQgX19pbml0IHBtdV9jaGVja19hcGljKHZvaWQpCiB7CiAJaWYgKGNwdV9oYXNfYXBpYykKQEAgLTIyMjAsNiArMTM5MSwxMCBAQAogCXBlcmZfZXZlbnRzX2xhcGljX2luaXQoKTsKIAlyZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnBlcmZfZXZlbnRfbm1pX25vdGlmaWVyKTsKIAorCXVuY29uc3RyYWluZWQgPSAoc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQpCisJCV9fRVZFTlRfQ09OU1RSQUlOVCgwLCAoMVVMTCA8PCB4ODZfcG11Lm51bV9ldmVudHMpIC0gMSwKKwkJCQkgICAwLCB4ODZfcG11Lm51bV9ldmVudHMpOworCiAJcHJfaW5mbygiLi4uIHZlcnNpb246ICAgICAgICAgICAgICAgICVkXG4iLCAgICAgeDg2X3BtdS52ZXJzaW9uKTsKIAlwcl9pbmZvKCIuLi4gYml0IHdpZHRoOiAgICAgICAgICAgICAgJWRcbiIsICAgICB4ODZfcG11LmV2ZW50X2JpdHMpOwogCXByX2luZm8oIi4uLiBnZW5lcmljIHJlZ2lzdGVyczogICAgICAlZFxuIiwgICAgIHg4Nl9wbXUubnVtX2V2ZW50cyk7CkBAIC0yMjM3LDUwICsxNDEyLDc5IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHBtdSBwbXUgPSB7CiAJLmVuYWJsZQkJPSB4ODZfcG11X2VuYWJsZSwKIAkuZGlzYWJsZQk9IHg4Nl9wbXVfZGlzYWJsZSwKKwkuc3RhcnQJCT0geDg2X3BtdV9zdGFydCwKKwkuc3RvcAkJPSB4ODZfcG11X3N0b3AsCiAJLnJlYWQJCT0geDg2X3BtdV9yZWFkLAogCS51bnRocm90dGxlCT0geDg2X3BtdV91bnRocm90dGxlLAogfTsKIAotc3RhdGljIGludAotdmFsaWRhdGVfZXZlbnQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKLXsKLQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCBmYWtlX2V2ZW50ID0gZXZlbnQtPmh3OwotCi0JaWYgKGV2ZW50LT5wbXUgJiYgZXZlbnQtPnBtdSAhPSAmcG11KQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB4ODZfc2NoZWR1bGVfZXZlbnQoY3B1YywgJmZha2VfZXZlbnQpID49IDA7Ci19Ci0KKy8qCisgKiB2YWxpZGF0ZSBhIHNpbmdsZSBldmVudCBncm91cAorICoKKyAqIHZhbGlkYXRpb24gaW5jbHVkZToKKyAqCS0gY2hlY2sgZXZlbnRzIGFyZSBjb21wYXRpYmxlIHdoaWNoIGVhY2ggb3RoZXIKKyAqCS0gZXZlbnRzIGRvIG5vdCBjb21wZXRlIGZvciB0aGUgc2FtZSBjb3VudGVyCisgKgktIG51bWJlciBvZiBldmVudHMgPD0gbnVtYmVyIG9mIGNvdW50ZXJzCisgKgorICogdmFsaWRhdGlvbiBlbnN1cmVzIHRoZSBncm91cCBjYW4gYmUgbG9hZGVkIG9udG8gdGhlCisgKiBQTVUgaWYgaXQgd2FzIHRoZSBvbmx5IGdyb3VwIGF2YWlsYWJsZS4KKyAqLwogc3RhdGljIGludCB2YWxpZGF0ZV9ncm91cChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0Jc3RydWN0IHBlcmZfZXZlbnQgKnNpYmxpbmcsICpsZWFkZXIgPSBldmVudC0+Z3JvdXBfbGVhZGVyOwotCXN0cnVjdCBjcHVfaHdfZXZlbnRzIGZha2VfcG11OworCXN0cnVjdCBwZXJmX2V2ZW50ICpsZWFkZXIgPSBldmVudC0+Z3JvdXBfbGVhZGVyOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpmYWtlX2NwdWM7CisJaW50IHJldCwgbjsKIAotCW1lbXNldCgmZmFrZV9wbXUsIDAsIHNpemVvZihmYWtlX3BtdSkpOworCXJldCA9IC1FTk9NRU07CisJZmFrZV9jcHVjID0ga21hbGxvYyhzaXplb2YoKmZha2VfY3B1YyksIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKwlpZiAoIWZha2VfY3B1YykKKwkJZ290byBvdXQ7CiAKLQlpZiAoIXZhbGlkYXRlX2V2ZW50KCZmYWtlX3BtdSwgbGVhZGVyKSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJLyoKKwkgKiB0aGUgZXZlbnQgaXMgbm90IHlldCBjb25uZWN0ZWQgd2l0aCBpdHMKKwkgKiBzaWJsaW5ncyB0aGVyZWZvcmUgd2UgbXVzdCBmaXJzdCBjb2xsZWN0CisJICogZXhpc3Rpbmcgc2libGluZ3MsIHRoZW4gYWRkIHRoZSBuZXcgZXZlbnQKKwkgKiBiZWZvcmUgd2UgY2FuIHNpbXVsYXRlIHRoZSBzY2hlZHVsaW5nCisJICovCisJcmV0ID0gLUVOT1NQQzsKKwluID0gY29sbGVjdF9ldmVudHMoZmFrZV9jcHVjLCBsZWFkZXIsIHRydWUpOworCWlmIChuIDwgMCkKKwkJZ290byBvdXRfZnJlZTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2libGluZywgJmxlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgewotCQlpZiAoIXZhbGlkYXRlX2V2ZW50KCZmYWtlX3BtdSwgc2libGluZykpCi0JCQlyZXR1cm4gLUVOT1NQQzsKLQl9CisJZmFrZV9jcHVjLT5uX2V2ZW50cyA9IG47CisJbiA9IGNvbGxlY3RfZXZlbnRzKGZha2VfY3B1YywgZXZlbnQsIGZhbHNlKTsKKwlpZiAobiA8IDApCisJCWdvdG8gb3V0X2ZyZWU7CiAKLQlpZiAoIXZhbGlkYXRlX2V2ZW50KCZmYWtlX3BtdSwgZXZlbnQpKQotCQlyZXR1cm4gLUVOT1NQQzsKKwlmYWtlX2NwdWMtPm5fZXZlbnRzID0gbjsKIAotCXJldHVybiAwOworCXJldCA9IHg4Nl9zY2hlZHVsZV9ldmVudHMoZmFrZV9jcHVjLCBuLCBOVUxMKTsKKworb3V0X2ZyZWU6CisJa2ZyZWUoZmFrZV9jcHVjKTsKK291dDoKKwlyZXR1cm4gcmV0OwogfQogCiBjb25zdCBzdHJ1Y3QgcG11ICpod19wZXJmX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogeworCWNvbnN0IHN0cnVjdCBwbXUgKnRtcDsKIAlpbnQgZXJyOwogCiAJZXJyID0gX19od19wZXJmX2V2ZW50X2luaXQoZXZlbnQpOwogCWlmICghZXJyKSB7CisJCS8qCisJCSAqIHdlIHRlbXBvcmFyaWx5IGNvbm5lY3QgZXZlbnQgdG8gaXRzIHBtdQorCQkgKiBzdWNoIHRoYXQgdmFsaWRhdGVfZ3JvdXAoKSBjYW4gY2xhc3NpZnkKKwkJICogaXQgYXMgYW4geDg2IGV2ZW50IHVzaW5nIGlzX3g4Nl9ldmVudCgpCisJCSAqLworCQl0bXAgPSBldmVudC0+cG11OworCQlldmVudC0+cG11ID0gJnBtdTsKKwogCQlpZiAoZXZlbnQtPmdyb3VwX2xlYWRlciAhPSBldmVudCkKIAkJCWVyciA9IHZhbGlkYXRlX2dyb3VwKGV2ZW50KTsKKworCQlldmVudC0+cG11ID0gdG1wOwogCX0KIAlpZiAoZXJyKSB7CiAJCWlmIChldmVudC0+ZGVzdHJveSkKQEAgLTIzMDQsNyArMTUwOCw2IEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnksIHBtY19pcnFfZW50cnkpOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSwgcG1jX25taV9lbnRyeSk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBpbl9pZ25vcmVkX2ZyYW1lKTsKIAogCiBzdGF0aWMgdm9pZApAQCAtMjMyMCwxMCArMTUyMyw2IEBACiAKIHN0YXRpYyBpbnQgYmFja3RyYWNlX3N0YWNrKHZvaWQgKmRhdGEsIGNoYXIgKm5hbWUpCiB7Ci0JcGVyX2NwdShpbl9pZ25vcmVkX2ZyYW1lLCBzbXBfcHJvY2Vzc29yX2lkKCkpID0KLQkJCXg4Nl9pc19zdGFja19pZChOTUlfU1RBQ0ssIG5hbWUpIHx8Ci0JCQl4ODZfaXNfc3RhY2tfaWQoREVCVUdfU1RBQ0ssIG5hbWUpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzMzEsOSArMTUzMCw2IEBACiB7CiAJc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSA9IGRhdGE7CiAKLQlpZiAocGVyX2NwdShpbl9pZ25vcmVkX2ZyYW1lLCBzbXBfcHJvY2Vzc29yX2lkKCkpKQotCQlyZXR1cm47Ci0KIAlpZiAocmVsaWFibGUpCiAJCWNhbGxjaGFpbl9zdG9yZShlbnRyeSwgYWRkcik7CiB9CkBAIC0yNDQwLDkgKzE2MzYsNiBAQAogCiAJaXNfdXNlciA9IHVzZXJfbW9kZShyZWdzKTsKIAotCWlmICghY3VycmVudCB8fCBjdXJyZW50LT5waWQgPT0gMCkKLQkJcmV0dXJuOwotCiAJaWYgKGlzX3VzZXIgJiYgY3VycmVudC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HKQogCQlyZXR1cm47CiAKQEAgLTI0NzIsNCArMTY2NSwyNSBAQAogdm9pZCBod19wZXJmX2V2ZW50X3NldHVwX29ubGluZShpbnQgY3B1KQogewogCWluaXRfZGVidWdfc3RvcmVfb25fY3B1KGNwdSk7CisKKwlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgeworCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCWFtZF9wbXVfY3B1X29ubGluZShjcHUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorfQorCit2b2lkIGh3X3BlcmZfZXZlbnRfc2V0dXBfb2ZmbGluZShpbnQgY3B1KQoreworCWluaXRfZGVidWdfc3RvcmVfb25fY3B1KGNwdSk7CisKKwlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgeworCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCWFtZF9wbXVfY3B1X29mZmxpbmUoY3B1KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9hbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjNkYmZkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9hbWQuYwpAQCAtMCwwICsxLDQxNiBAQAorI2lmZGVmIENPTkZJR19DUFVfU1VQX0FNRAorCitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhhbWRfbmJfbG9jayk7CisKK3N0YXRpYyBfX2luaXRjb25zdCB1NjQgYW1kX2h3X2NhY2hlX2V2ZW50X2lkcworCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPQoreworIFsgQyhMMUQpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDQwLCAvKiBEYXRhIENhY2hlIEFjY2Vzc2VzICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA0MSwgLyogRGF0YSBDYWNoZSBNaXNzZXMgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNDIsIC8qIERhdGEgQ2FjaGUgUmVmaWxscyA6c3lzdGVtICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAyNjcsIC8qIERhdGEgUHJlZmV0Y2hlciA6YXR0ZW1wdHMgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTY3LCAvKiBEYXRhIFByZWZldGNoZXIgOmNhbmNlbGxlZCAqLworCX0sCisgfSwKKyBbIEMoTDFJICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwODAsIC8qIEluc3RydWN0aW9uIGNhY2hlIGZldGNoZXMgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDgxLCAvKiBJbnN0cnVjdGlvbiBjYWNoZSBtaXNzZXMgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0QiwgLyogUHJlZmV0Y2ggSW5zdHJ1Y3Rpb25zIDpMb2FkICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKExMICApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzdELCAvKiBSZXF1ZXN0cyB0byBMMiBDYWNoZSA6SUMrREMgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAzN0UsIC8qIEwyIENhY2hlIE1pc3NlcyA6IElDK0RDICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE3RiwgLyogTDIgRmlsbC9Xcml0ZWJhY2sgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhEVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA0MCwgLyogRGF0YSBDYWNoZSBBY2Nlc3NlcyAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwNDYsIC8qIEwxIERUTEIgYW5kIEwyIERMVEIgTWlzcyAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKElUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDgwLCAvKiBJbnN0cnVjdGlvbiBmZWN0aGVzICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA4NSwgLyogSW5zdHIuIGZldGNoIElUTEIgbWlzc2VzICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCisgWyBDKEJQVSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGMyLCAvKiBSZXRpcmVkIEJyYW5jaCBJbnN0ci4gICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDBjMywgLyogUmV0aXJlZCBNaXNwcmVkaWN0ZWQgQkkgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCit9OworCisvKgorICogQU1EIFBlcmZvcm1hbmNlIE1vbml0b3IgSzcgYW5kIGxhdGVyLgorICovCitzdGF0aWMgY29uc3QgdTY0IGFtZF9wZXJmbW9uX2V2ZW50X21hcFtdID0KK3sKKyAgW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JCT0gMHgwMDc2LAorICBbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCQk9IDB4MDBjMCwKKyAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10JPSAweDAwODAsCisgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JCT0gMHgwMDgxLAorICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXQk9IDB4MDBjNCwKKyAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JCT0gMHgwMGM1LAorfTsKKworc3RhdGljIHU2NCBhbWRfcG11X2V2ZW50X21hcChpbnQgaHdfZXZlbnQpCit7CisJcmV0dXJuIGFtZF9wZXJmbW9uX2V2ZW50X21hcFtod19ldmVudF07Cit9CisKK3N0YXRpYyB1NjQgYW1kX3BtdV9yYXdfZXZlbnQodTY0IGh3X2V2ZW50KQoreworI2RlZmluZSBLN19FVk5UU0VMX0VWRU5UX01BU0sJMHhGMDAwMDAwRkZVTEwKKyNkZWZpbmUgSzdfRVZOVFNFTF9VTklUX01BU0sJMHgwMDAwMEZGMDBVTEwKKyNkZWZpbmUgSzdfRVZOVFNFTF9FREdFX01BU0sJMHgwMDAwNDAwMDBVTEwKKyNkZWZpbmUgSzdfRVZOVFNFTF9JTlZfTUFTSwkweDAwMDgwMDAwMFVMTAorI2RlZmluZSBLN19FVk5UU0VMX1JFR19NQVNLCTB4MEZGMDAwMDAwVUxMCisKKyNkZWZpbmUgSzdfRVZOVFNFTF9NQVNLCQkJXAorCShLN19FVk5UU0VMX0VWRU5UX01BU0sgfAlcCisJIEs3X0VWTlRTRUxfVU5JVF9NQVNLICB8CVwKKwkgSzdfRVZOVFNFTF9FREdFX01BU0sgIHwJXAorCSBLN19FVk5UU0VMX0lOVl9NQVNLICAgfAlcCisJIEs3X0VWTlRTRUxfUkVHX01BU0spCisKKwlyZXR1cm4gaHdfZXZlbnQgJiBLN19FVk5UU0VMX01BU0s7Cit9CisKKy8qCisgKiBBTUQ2NCBldmVudHMgYXJlIGRldGVjdGVkIGJhc2VkIG9uIHRoZWlyIGV2ZW50IGNvZGVzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhbWRfaXNfbmJfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YykKK3sKKwlyZXR1cm4gKGh3Yy0+Y29uZmlnICYgMHhlMCkgPT0gMHhlMDsKK30KKworc3RhdGljIHZvaWQgYW1kX3B1dF9ldmVudF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJCQkgICAgICBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJc3RydWN0IGFtZF9uYiAqbmIgPSBjcHVjLT5hbWRfbmI7CisJaW50IGk7CisKKwkvKgorCSAqIG9ubHkgY2FyZSBhYm91dCBOQiBldmVudHMKKwkgKi8KKwlpZiAoIShuYiAmJiBhbWRfaXNfbmJfZXZlbnQoaHdjKSkpCisJCXJldHVybjsKKworCS8qCisJICogbmVlZCB0byBzY2FuIHdob2xlIGxpc3QgYmVjYXVzZSBldmVudCBtYXkgbm90IGhhdmUKKwkgKiBiZWVuIGFzc2lnbmVkIGR1cmluZyBzY2hlZHVsaW5nCisJICoKKwkgKiBubyByYWNlIGNvbmRpdGlvbiBwb3NzaWJsZSBiZWNhdXNlIGV2ZW50IGNhbiBvbmx5CisJICogYmUgcmVtb3ZlZCBvbiBvbmUgQ1BVIGF0IGEgdGltZSBBTkQgUE1VIGlzIGRpc2FibGVkCisJICogd2hlbiB3ZSBjb21lIGhlcmUKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpKyspIHsKKwkJaWYgKG5iLT5vd25lcnNbaV0gPT0gZXZlbnQpIHsKKwkJCWNtcHhjaGcobmItPm93bmVycytpLCBldmVudCwgTlVMTCk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworIC8qCisgICogQU1ENjQgTm9ydGhCcmlkZ2UgZXZlbnRzIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgYmVjYXVzZQorICAqIGNvdW50ZXIgYWNjZXNzIG5lZWRzIHRvIGJlIHN5bmNocm9uaXplZCBhY3Jvc3MgYWxsIGNvcmVzCisgICogb2YgYSBwYWNrYWdlLiBSZWZlciB0byBCS0RHIHNlY3Rpb24gMy4xMgorICAqCisgICogTkIgZXZlbnRzIGFyZSBldmVudHMgbWVhc3VyaW5nIEwzIGNhY2hlLCBIeXBlcnRyYW5zcG9ydAorICAqIHRyYWZmaWMuIFRoZXkgYXJlIGlkZW50aWZpZWQgYnkgYW4gZXZlbnQgY29kZSA+PSAweGUwMC4KKyAgKiBUaGV5IG1lYXN1cmUgZXZlbnRzIG9uIHRoZSBOb3J0aEJyaWRlIHdoaWNoIGlzIHNoYXJlZAorICAqIGJ5IGFsbCBjb3JlcyBvbiBhIHBhY2thZ2UuIE5CIGV2ZW50cyBhcmUgY291bnRlZCBvbiBhCisgICogc2hhcmVkIHNldCBvZiBjb3VudGVycy4gV2hlbiBhIE5CIGV2ZW50IGlzIHByb2dyYW1tZWQKKyAgKiBpbiBhIGNvdW50ZXIsIHRoZSBkYXRhIGFjdHVhbGx5IGNvbWVzIGZyb20gYSBzaGFyZWQKKyAgKiBjb3VudGVyLiBUaHVzLCBhY2Nlc3MgdG8gdGhvc2UgY291bnRlcnMgbmVlZHMgdG8gYmUKKyAgKiBzeW5jaHJvbml6ZWQuCisgICoKKyAgKiBXZSBpbXBsZW1lbnQgdGhlIHN5bmNocm9uaXphdGlvbiBzdWNoIHRoYXQgbm8gdHdvIGNvcmVzCisgICogY2FuIGJlIG1lYXN1cmluZyBOQiBldmVudHMgdXNpbmcgdGhlIHNhbWUgY291bnRlcnMuIFRodXMsCisgICogd2UgbWFpbnRhaW4gYSBwZXItTkIgYWxsb2NhdGlvbiB0YWJsZS4gVGhlIGF2YWlsYWJsZSBzbG90CisgICogaXMgcHJvcGFnYXRlZCB1c2luZyB0aGUgZXZlbnRfY29uc3RyYWludCBzdHJ1Y3R1cmUuCisgICoKKyAgKiBXZSBwcm92aWRlIG9ubHkgb25lIGNob2ljZSBmb3IgZWFjaCBOQiBldmVudCBiYXNlZCBvbgorICAqIHRoZSBmYWN0IHRoYXQgb25seSBOQiBldmVudHMgaGF2ZSByZXN0cmljdGlvbnMuIENvbnNlcXVlbnRseSwKKyAgKiBpZiBhIGNvdW50ZXIgaXMgYXZhaWxhYmxlLCB0aGVyZSBpcyBhIGd1YXJhbnRlZSB0aGUgTkIgZXZlbnQKKyAgKiB3aWxsIGJlIGFzc2lnbmVkIHRvIGl0LiBJZiBubyBzbG90IGlzIGF2YWlsYWJsZSwgYW4gZW1wdHkKKyAgKiBjb25zdHJhaW50IGlzIHJldHVybmVkIGFuZCBzY2hlZHVsaW5nIHdpbGwgZXZlbnR1YWxseSBmYWlsCisgICogZm9yIHRoaXMgZXZlbnQuCisgICoKKyAgKiBOb3RlIHRoYXQgYWxsIGNvcmVzIGF0dGFjaGVkIHRoZSBzYW1lIE5CIGNvbXBldGUgZm9yIHRoZSBzYW1lCisgICogY291bnRlcnMgdG8gaG9zdCBOQiBldmVudHMsIHRoaXMgaXMgd2h5IHdlIHVzZSBhdG9taWMgb3BzLiBTb21lCisgICogbXVsdGktY2hpcCBDUFVzIG1heSBoYXZlIG1vcmUgdGhhbiBvbmUgTkIuCisgICoKKyAgKiBHaXZlbiB0aGF0IHJlc291cmNlcyBhcmUgYWxsb2NhdGVkIChjbXB4Y2hnKSwgdGhleSBtdXN0IGJlCisgICogZXZlbnR1YWxseSBmcmVlZCBmb3Igb3RoZXJzIHRvIHVzZS4gVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkKKyAgKiBjYWxsaW5nIGFtZF9wdXRfZXZlbnRfY29uc3RyYWludHMoKS4KKyAgKgorICAqIE5vbiBOQiBldmVudHMgYXJlIG5vdCBpbXBhY3RlZCBieSB0aGlzIHJlc3RyaWN0aW9uLgorICAqLworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50ICoKK2FtZF9nZXRfZXZlbnRfY29uc3RyYWludHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlzdHJ1Y3QgYW1kX25iICpuYiA9IGNwdWMtPmFtZF9uYjsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqb2xkID0gTlVMTDsKKwlpbnQgbWF4ID0geDg2X3BtdS5udW1fZXZlbnRzOworCWludCBpLCBqLCBrID0gLTE7CisKKwkvKgorCSAqIGlmIG5vdCBOQiBldmVudCBvciBubyBOQiwgdGhlbiBubyBjb25zdHJhaW50cworCSAqLworCWlmICghKG5iICYmIGFtZF9pc19uYl9ldmVudChod2MpKSkKKwkJcmV0dXJuICZ1bmNvbnN0cmFpbmVkOworCisJLyoKKwkgKiBkZXRlY3QgaWYgYWxyZWFkeSBwcmVzZW50LCBpZiBzbyByZXVzZQorCSAqCisJICogY2Fubm90IG1lcmdlIHdpdGggYWN0dWFsIGFsbG9jYXRpb24KKwkgKiBiZWNhdXNlIG9mIHBvc3NpYmxlIGhvbGVzCisJICoKKwkgKiBldmVudCBjYW4gYWxyZWFkeSBiZSBwcmVzZW50IHlldCBub3QgYXNzaWduZWQgKGluIGh3Yy0+aWR4KQorCSAqIGJlY2F1c2Ugb2Ygc3VjY2Vzc2l2ZSBjYWxscyB0byB4ODZfc2NoZWR1bGVfZXZlbnRzKCkgZnJvbQorCSAqIGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oKSB3aXRob3V0IGh3X3BlcmZfZW5hYmxlKCkKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKKwkJLyoKKwkJICoga2VlcCB0cmFjayBvZiBmaXJzdCBmcmVlIHNsb3QKKwkJICovCisJCWlmIChrID09IC0xICYmICFuYi0+b3duZXJzW2ldKQorCQkJayA9IGk7CisKKwkJLyogYWxyZWFkeSBwcmVzZW50LCByZXVzZSAqLworCQlpZiAobmItPm93bmVyc1tpXSA9PSBldmVudCkKKwkJCWdvdG8gZG9uZTsKKwl9CisJLyoKKwkgKiBub3QgcHJlc2VudCwgc28gZ3JhYiBhIG5ldyBzbG90CisJICogc3RhcnRpbmcgZWl0aGVyIGF0OgorCSAqLworCWlmIChod2MtPmlkeCAhPSAtMSkgeworCQkvKiBwcmV2aW91cyBhc3NpZ25tZW50ICovCisJCWkgPSBod2MtPmlkeDsKKwl9IGVsc2UgaWYgKGsgIT0gLTEpIHsKKwkJLyogc3RhcnQgZnJvbSBmcmVlIHNsb3QgZm91bmQgKi8KKwkJaSA9IGs7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogZXZlbnQgbm90IGZvdW5kLCBubyBzbG90IGZvdW5kIGluCisJCSAqIGZpcnN0IHBhc3MsIHRyeSBhZ2FpbiBmcm9tIHRoZQorCQkgKiBiZWdpbm5pbmcKKwkJICovCisJCWkgPSAwOworCX0KKwlqID0gaTsKKwlkbyB7CisJCW9sZCA9IGNtcHhjaGcobmItPm93bmVycytpLCBOVUxMLCBldmVudCk7CisJCWlmICghb2xkKQorCQkJYnJlYWs7CisJCWlmICgrK2kgPT0gbWF4KQorCQkJaSA9IDA7CisJfSB3aGlsZSAoaSAhPSBqKTsKK2RvbmU6CisJaWYgKCFvbGQpCisJCXJldHVybiAmbmItPmV2ZW50X2NvbnN0cmFpbnRzW2ldOworCisJcmV0dXJuICZlbXB0eWNvbnN0cmFpbnQ7Cit9CisKK3N0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBhbWRfcG11ID0geworCS5uYW1lCQkJPSAiQU1EIiwKKwkuaGFuZGxlX2lycQkJPSB4ODZfcG11X2hhbmRsZV9pcnEsCisJLmRpc2FibGVfYWxsCQk9IHg4Nl9wbXVfZGlzYWJsZV9hbGwsCisJLmVuYWJsZV9hbGwJCT0geDg2X3BtdV9lbmFibGVfYWxsLAorCS5lbmFibGUJCQk9IHg4Nl9wbXVfZW5hYmxlX2V2ZW50LAorCS5kaXNhYmxlCQk9IHg4Nl9wbXVfZGlzYWJsZV9ldmVudCwKKwkuZXZlbnRzZWwJCT0gTVNSX0s3X0VWTlRTRUwwLAorCS5wZXJmY3RyCQk9IE1TUl9LN19QRVJGQ1RSMCwKKwkuZXZlbnRfbWFwCQk9IGFtZF9wbXVfZXZlbnRfbWFwLAorCS5yYXdfZXZlbnQJCT0gYW1kX3BtdV9yYXdfZXZlbnQsCisJLm1heF9ldmVudHMJCT0gQVJSQVlfU0laRShhbWRfcGVyZm1vbl9ldmVudF9tYXApLAorCS5udW1fZXZlbnRzCQk9IDQsCisJLmV2ZW50X2JpdHMJCT0gNDgsCisJLmV2ZW50X21hc2sJCT0gKDFVTEwgPDwgNDgpIC0gMSwKKwkuYXBpYwkJCT0gMSwKKwkvKiB1c2UgaGlnaGVzdCBiaXQgdG8gZGV0ZWN0IG92ZXJmbG93ICovCisJLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgNDcpIC0gMSwKKwkuZ2V0X2V2ZW50X2NvbnN0cmFpbnRzCT0gYW1kX2dldF9ldmVudF9jb25zdHJhaW50cywKKwkucHV0X2V2ZW50X2NvbnN0cmFpbnRzCT0gYW1kX3B1dF9ldmVudF9jb25zdHJhaW50cworfTsKKworc3RhdGljIHN0cnVjdCBhbWRfbmIgKmFtZF9hbGxvY19uYihpbnQgY3B1LCBpbnQgbmJfaWQpCit7CisJc3RydWN0IGFtZF9uYiAqbmI7CisJaW50IGk7CisKKwluYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbWRfbmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5iKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChuYiwgMCwgc2l6ZW9mKCpuYikpOworCW5iLT5uYl9pZCA9IG5iX2lkOworCisJLyoKKwkgKiBpbml0aWFsaXplIGFsbCBwb3NzaWJsZSBOQiBjb25zdHJhaW50cworCSAqLworCWZvciAoaSA9IDA7IGkgPCB4ODZfcG11Lm51bV9ldmVudHM7IGkrKykgeworCQlzZXRfYml0KGksIG5iLT5ldmVudF9jb25zdHJhaW50c1tpXS5pZHhtc2spOworCQluYi0+ZXZlbnRfY29uc3RyYWludHNbaV0ud2VpZ2h0ID0gMTsKKwl9CisJcmV0dXJuIG5iOworfQorCitzdGF0aWMgdm9pZCBhbWRfcG11X2NwdV9vbmxpbmUoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1MSwgKmNwdTI7CisJc3RydWN0IGFtZF9uYiAqbmIgPSBOVUxMOworCWludCBpLCBuYl9pZDsKKworCWlmIChib290X2NwdV9kYXRhLng4Nl9tYXhfY29yZXMgPCAyKQorCQlyZXR1cm47CisKKwkvKgorCSAqIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgdG9vIGVhcmx5IGluIHRoZQorCSAqIGJvb3QgcHJvY2VzcywgaW4gd2hpY2ggY2FzZSBuYl9pZCBpcyBib2d1cworCSAqLworCW5iX2lkID0gYW1kX2dldF9uYl9pZChjcHUpOworCWlmIChuYl9pZCA9PSBCQURfQVBJQ0lEKQorCQlyZXR1cm47CisKKwljcHUxID0gJnBlcl9jcHUoY3B1X2h3X2V2ZW50cywgY3B1KTsKKwljcHUxLT5hbWRfbmIgPSBOVUxMOworCisJcmF3X3NwaW5fbG9jaygmYW1kX25iX2xvY2spOworCisJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCWNwdTIgPSAmcGVyX2NwdShjcHVfaHdfZXZlbnRzLCBpKTsKKwkJbmIgPSBjcHUyLT5hbWRfbmI7CisJCWlmICghbmIpCisJCQljb250aW51ZTsKKwkJaWYgKG5iLT5uYl9pZCA9PSBuYl9pZCkKKwkJCWdvdG8gZm91bmQ7CisJfQorCisJbmIgPSBhbWRfYWxsb2NfbmIoY3B1LCBuYl9pZCk7CisJaWYgKCFuYikgeworCQlwcl9lcnIoInBlcmZfZXZlbnRzOiBmYWlsZWQgTkIgYWxsb2NhdGlvbiBmb3IgQ1BVJWRcbiIsIGNwdSk7CisJCXJhd19zcGluX3VubG9jaygmYW1kX25iX2xvY2spOworCQlyZXR1cm47CisJfQorZm91bmQ6CisJbmItPnJlZmNudCsrOworCWNwdTEtPmFtZF9uYiA9IG5iOworCisJcmF3X3NwaW5fdW5sb2NrKCZhbWRfbmJfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGFtZF9wbXVfY3B1X29mZmxpbmUoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1aHc7CisKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfbWF4X2NvcmVzIDwgMikKKwkJcmV0dXJuOworCisJY3B1aHcgPSAmcGVyX2NwdShjcHVfaHdfZXZlbnRzLCBjcHUpOworCisJcmF3X3NwaW5fbG9jaygmYW1kX25iX2xvY2spOworCisJaWYgKC0tY3B1aHctPmFtZF9uYi0+cmVmY250ID09IDApCisJCWtmcmVlKGNwdWh3LT5hbWRfbmIpOworCisJY3B1aHctPmFtZF9uYiA9IE5VTEw7CisKKwlyYXdfc3Bpbl91bmxvY2soJmFtZF9uYl9sb2NrKTsKK30KKworc3RhdGljIF9faW5pdCBpbnQgYW1kX3BtdV9pbml0KHZvaWQpCit7CisJLyogUGVyZm9ybWFuY2UtbW9uaXRvcmluZyBzdXBwb3J0ZWQgZnJvbSBLNyBhbmQgbGF0ZXI6ICovCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2IDwgNikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl4ODZfcG11ID0gYW1kX3BtdTsKKworCS8qIEV2ZW50cyBhcmUgY29tbW9uIGZvciBhbGwgQU1EcyAqLworCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIGFtZF9od19jYWNoZV9ldmVudF9pZHMsCisJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKKworCS8qCisJICogZXhwbGljaXRseSBpbml0aWFsaXplIHRoZSBib290IGNwdSwgb3RoZXIgY3B1cyB3aWxsIGdldAorCSAqIHRoZSBjcHUgaG90cGx1ZyBjYWxsYmFja3MgZnJvbSBzbXBfaW5pdCgpCisJICovCisJYW1kX3BtdV9jcHVfb25saW5lKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qIENPTkZJR19DUFVfU1VQX0FNRCAqLworCitzdGF0aWMgaW50IGFtZF9wbXVfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhbWRfcG11X2NwdV9vbmxpbmUoaW50IGNwdSkKK3sKK30KKworc3RhdGljIHZvaWQgYW1kX3BtdV9jcHVfb2ZmbGluZShpbnQgY3B1KQoreworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y2NTkwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCkBAIC0wLDAgKzEsOTcxIEBACisjaWZkZWYgQ09ORklHX0NQVV9TVVBfSU5URUwKKworLyoKKyAqIEludGVsIFBlcmZNb24gdjMuIFVzZWQgb24gQ29yZTIgYW5kIGxhdGVyLgorICovCitzdGF0aWMgY29uc3QgdTY0IGludGVsX3BlcmZtb25fZXZlbnRfbWFwW10gPQoreworICBbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkJPSAweDAwM2MsCisgIFtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JCT0gMHgwMGMwLAorICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXQk9IDB4NGYyZSwKKyAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkJPSAweDQxMmUsCisgIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdCT0gMHgwMGM0LAorICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkJPSAweDAwYzUsCisgIFtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCQk9IDB4MDEzYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9jb3JlX2V2ZW50X2NvbnN0cmFpbnRzW10gPQoreworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMSwgMHgyKSwgLyogRlBfQVNTSVNUICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEyLCAweDIpLCAvKiBNVUwgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTMsIDB4MiksIC8qIERJViAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxNCwgMHgxKSwgLyogQ1lDTEVTX0RJVl9CVVNZICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDE5LCAweDIpLCAvKiBERUxBWUVEX0JZUEFTUyAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjMSwgMHgxKSwgLyogRlBfQ09NUF9JTlNUUl9SRVQgKi8KKwlFVkVOVF9DT05TVFJBSU5UX0VORAorfTsKKworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX2NvcmUyX2V2ZW50X2NvbnN0cmFpbnRzW10gPQoreworCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHhjMCwgKDB4M3woMVVMTDw8MzIpKSksIC8qIElOU1RSVUNUSU9OU19SRVRJUkVEICovCisJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweDNjLCAoMHgzfCgxVUxMPDwzMykpKSwgLyogVU5IQUxURURfQ09SRV9DWUNMRVMgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTAsIDB4MSksIC8qIEZQX0NPTVBfT1BTX0VYRSAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMSwgMHgyKSwgLyogRlBfQVNTSVNUICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEyLCAweDIpLCAvKiBNVUwgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTMsIDB4MiksIC8qIERJViAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxNCwgMHgxKSwgLyogQ1lDTEVTX0RJVl9CVVNZICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDE4LCAweDEpLCAvKiBJRExFX0RVUklOR19ESVYgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTksIDB4MiksIC8qIERFTEFZRURfQllQQVNTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGExLCAweDEpLCAvKiBSU19VT1BTX0RJU1BBVENIX0NZQ0xFUyAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjYiwgMHgxKSwgLyogTUVNX0xPQURfUkVUSVJFRCAqLworCUVWRU5UX0NPTlNUUkFJTlRfRU5ECit9OworCitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfbmVoYWxlbV9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4YzAsICgweGZ8KDFVTEw8PDMyKSkpLCAvKiBJTlNUUlVDVElPTlNfUkVUSVJFRCAqLworCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgzYywgKDB4ZnwoMVVMTDw8MzMpKSksIC8qIFVOSEFMVEVEX0NPUkVfQ1lDTEVTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDQwLCAweDMpLCAvKiBMMURfQ0FDSEVfTEQgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NDEsIDB4MyksIC8qIEwxRF9DQUNIRV9TVCAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg0MiwgMHgzKSwgLyogTDFEX0NBQ0hFX0xPQ0sgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NDMsIDB4MyksIC8qIEwxRF9BTExfUkVGICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDQ4LCAweDMpLCAvKiBMMURfUEVORF9NSVNTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDRlLCAweDMpLCAvKiBMMURfUFJFRkVUQ0ggKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NTEsIDB4MyksIC8qIEwxRCAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg2MywgMHgzKSwgLyogQ0FDSEVfTE9DS19DWUNMRVMgKi8KKwlFVkVOVF9DT05TVFJBSU5UX0VORAorfTsKKworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX3dlc3RtZXJlX2V2ZW50X2NvbnN0cmFpbnRzW10gPQoreworCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHhjMCwgKDB4ZnwoMVVMTDw8MzIpKSksIC8qIElOU1RSVUNUSU9OU19SRVRJUkVEICovCisJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweDNjLCAoMHhmfCgxVUxMPDwzMykpKSwgLyogVU5IQUxURURfQ09SRV9DWUNMRVMgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NTEsIDB4MyksIC8qIEwxRCAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg2MCwgMHgxKSwgLyogT0ZGQ09SRV9SRVFVRVNUU19PVVRTVEFORElORyAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg2MywgMHgzKSwgLyogQ0FDSEVfTE9DS19DWUNMRVMgKi8KKwlFVkVOVF9DT05TVFJBSU5UX0VORAorfTsKKworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX2dlbl9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4YzAsICgweDN8KDFVTEw8PDMyKSkpLCAvKiBJTlNUUlVDVElPTlNfUkVUSVJFRCAqLworCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgzYywgKDB4M3woMVVMTDw8MzMpKSksIC8qIFVOSEFMVEVEX0NPUkVfQ1lDTEVTICovCisJRVZFTlRfQ09OU1RSQUlOVF9FTkQKK307CisKK3N0YXRpYyB1NjQgaW50ZWxfcG11X2V2ZW50X21hcChpbnQgaHdfZXZlbnQpCit7CisJcmV0dXJuIGludGVsX3BlcmZtb25fZXZlbnRfbWFwW2h3X2V2ZW50XTsKK30KKworc3RhdGljIF9faW5pdGNvbnN0IHU2NCB3ZXN0bWVyZV9od19jYWNoZV9ldmVudF9pZHMKKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KK3sKKyBbIEMoTDFEKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDEwYiwgLyogTUVNX0lOU1RfUkVUSVJFRC5MT0FEUyAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE1MSwgLyogTDFELlJFUEwgICAgICAgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDIwYiwgLyogTUVNX0lOU1RfUkVUVVJFRC5TVE9SRVMgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI1MSwgLyogTDFELk1fUkVQTCAgICAgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0ZSwgLyogTDFEX1BSRUZFVENILlJFUVVFU1RTICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI0ZSwgLyogTDFEX1BSRUZFVENILk1JU1MgICAgICAgICAgICAqLworCX0sCisgfSwKKyBbIEMoTDFJICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyODAsIC8qIEwxSS5NSVNTRVMgICAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwLAorCX0sCisgfSwKKyBbIEMoTEwgICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzMjQsIC8qIEwyX1JRU1RTLkxPQURTICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyMjQsIC8qIEwyX1JRU1RTLkxEX01JU1MgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBjMjQsIC8qIEwyX1JRU1RTLlJGT1MgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA4MjQsIC8qIEwyX1JRU1RTLlJGT19NSVNTICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMmUsIC8qIExMQyBSZWZlcmVuY2UgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMmUsIC8qIExMQyBNaXNzZXMgICAgICAgICAgICAgICAgICAgKi8KKwl9LAorIH0sCisgWyBDKERUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMTBiLCAvKiBNRU1fSU5TVF9SRVRJUkVELkxPQURTICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTA4LCAvKiBEVExCX0xPQURfTUlTU0VTLkFOWSAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMjBiLCAvKiBNRU1fSU5TVF9SRVRVUkVELlNUT1JFUyAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTBjLCAvKiBNRU1fU1RPUkVfUkVUSVJFRC5EVExCX01JU1MgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MCwKKwl9LAorIH0sCisgWyBDKElUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTg1LCAvKiBJVExCX01JU1NFUy5BTlkgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorIFsgQyhCUFUgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjNCwgLyogQlJfSU5TVF9SRVRJUkVELkFMTF9CUkFOQ0hFUyAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDNlOCwgLyogQlBVX0NMRUFSUy5BTlkgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKK307CisKK3N0YXRpYyBfX2luaXRjb25zdCB1NjQgbmVoYWxlbV9od19jYWNoZV9ldmVudF9pZHMKKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KK3sKKyBbIEMoTDFEKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MCwgLyogTDFEX0NBQ0hFX0xELklfU1RBVEUgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MSwgLyogTDFEX0NBQ0hFX1NULklfU1RBVEUgICAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0ZSwgLyogTDFEX1BSRUZFVENILlJFUVVFU1RTICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI0ZSwgLyogTDFEX1BSRUZFVENILk1JU1MgICAgICAgICAgICAqLworCX0sCisgfSwKKyBbIEMoTDFJICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyODAsIC8qIEwxSS5NSVNTRVMgICAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwLAorCX0sCisgfSwKKyBbIEMoTEwgICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzMjQsIC8qIEwyX1JRU1RTLkxPQURTICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyMjQsIC8qIEwyX1JRU1RTLkxEX01JU1MgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBjMjQsIC8qIEwyX1JRU1RTLlJGT1MgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA4MjQsIC8qIEwyX1JRU1RTLlJGT19NSVNTICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMmUsIC8qIExMQyBSZWZlcmVuY2UgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMmUsIC8qIExMQyBNaXNzZXMgICAgICAgICAgICAgICAgICAgKi8KKwl9LAorIH0sCisgWyBDKERUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgIChhbGlhcykgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTA4LCAvKiBEVExCX0xPQURfTUlTU0VTLkFOWSAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQxLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgIChhbGlhcykgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTBjLCAvKiBNRU1fU1RPUkVfUkVUSVJFRC5EVExCX01JU1MgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MCwKKwl9LAorIH0sCisgWyBDKElUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgyMGM4LCAvKiBJVExCX01JU1NfUkVUSVJFRCAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorIFsgQyhCUFUgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjNCwgLyogQlJfSU5TVF9SRVRJUkVELkFMTF9CUkFOQ0hFUyAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDNlOCwgLyogQlBVX0NMRUFSUy5BTlkgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKK307CisKK3N0YXRpYyBfX2luaXRjb25zdCB1NjQgY29yZTJfaHdfY2FjaGVfZXZlbnRfaWRzCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Cit7CisgWyBDKEwxRCkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQwLCAvKiBMMURfQ0FDSEVfTEQuSV9TVEFURSAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDEsIC8qIEwxRF9DQUNIRV9TVC5JX1NUQVRFICAgICAgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgxMDRlLCAvKiBMMURfUFJFRkVUQ0guUkVRVUVTVFMgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhMMUkgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA4MCwgLyogTDFJLlJFQURTICAgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwODEsIC8qIEwxSS5NSVNTRVMgICAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoTEwgICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMjksIC8qIEwyX0xELk1FU0kgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTI5LCAvKiBMMl9MRC5JU1RBVEUgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyQSwgLyogTDJfU1QuTUVTSSAgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMkEsIC8qIEwyX1NULklTVEFURSAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoRFRMQikgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAoYWxpYXMpICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjA4LCAvKiBEVExCX01JU1NFUy5NSVNTX0xEICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgIChhbGlhcykgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA4MDgsIC8qIERUTEJfTUlTU0VTLk1JU1NfU1QgICAgICAgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoSVRMQikgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzAsIC8qIElOU1RfUkVUSVJFRC5BTllfUCAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgxMjgyLCAvKiBJVExCTUlTU0VTICAgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKKyBbIEMoQlBVICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzQsIC8qIEJSX0lOU1RfUkVUSVJFRC5BTlkgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMGM1LCAvKiBCUF9JTlNUX1JFVElSRUQuTUlTUFJFRCAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKK307CisKK3N0YXRpYyBfX2luaXRjb25zdCB1NjQgYXRvbV9od19jYWNoZV9ldmVudF9pZHMKKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KK3sKKyBbIEMoTDFEKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjE0MCwgLyogTDFEX0NBQ0hFLkxEICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjI0MCwgLyogTDFEX0NBQ0hFLlNUICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoTDFJICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjgwLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKExMICApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjI5LCAvKiBMMl9MRC5NRVNJICAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyOSwgLyogTDJfTEQuSVNUQVRFICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMkEsIC8qIEwyX1NULk1FU0kgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJBLCAvKiBMMl9TVC5JU1RBVEUgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKERUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgyMTQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgKGFsaWFzKSAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDUwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19MRCAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIyNDAsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAoYWxpYXMpICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwNjA4LCAvKiBEVExCX01JU1NFUy5NSVNTX1NUICAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKElUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI4MiwgLyogSVRMQi5NSVNTRVMgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCisgWyBDKEJQVSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGM0LCAvKiBCUl9JTlNUX1JFVElSRUQuQU5ZICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDBjNSwgLyogQlBfSU5TVF9SRVRJUkVELk1JU1BSRUQgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCit9OworCitzdGF0aWMgdTY0IGludGVsX3BtdV9yYXdfZXZlbnQodTY0IGh3X2V2ZW50KQoreworI2RlZmluZSBDT1JFX0VWTlRTRUxfRVZFTlRfTUFTSwkJMHgwMDAwMDBGRlVMTAorI2RlZmluZSBDT1JFX0VWTlRTRUxfVU5JVF9NQVNLCQkweDAwMDBGRjAwVUxMCisjZGVmaW5lIENPUkVfRVZOVFNFTF9FREdFX01BU0sJCTB4MDAwNDAwMDBVTEwKKyNkZWZpbmUgQ09SRV9FVk5UU0VMX0lOVl9NQVNLCQkweDAwODAwMDAwVUxMCisjZGVmaW5lIENPUkVfRVZOVFNFTF9SRUdfTUFTSwkJMHhGRjAwMDAwMFVMTAorCisjZGVmaW5lIENPUkVfRVZOVFNFTF9NQVNLCQlcCisJKElOVEVMX0FSQ0hfRVZUU0VMX01BU0sgfAlcCisJIElOVEVMX0FSQ0hfVU5JVF9NQVNLICAgfAlcCisJIElOVEVMX0FSQ0hfRURHRV9NQVNLICAgfAlcCisJIElOVEVMX0FSQ0hfSU5WX01BU0sgICAgfAlcCisJIElOVEVMX0FSQ0hfQ05UX01BU0spCisKKwlyZXR1cm4gaHdfZXZlbnQgJiBDT1JFX0VWTlRTRUxfTUFTSzsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfcG11X2VuYWJsZV9idHModTY0IGNvbmZpZykKK3sKKwl1bnNpZ25lZCBsb25nIGRlYnVnY3RsbXNyOworCisJZGVidWdjdGxtc3IgPSBnZXRfZGVidWdjdGxtc3IoKTsKKworCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9UUjsKKwlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRTOworCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVElOVDsKKworCWlmICghKGNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUykpCisJCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX09TOworCisJaWYgKCEoY29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VTUikpCisJCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX1VTUjsKKworCXVwZGF0ZV9kZWJ1Z2N0bG1zcihkZWJ1Z2N0bG1zcik7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3BtdV9kaXNhYmxlX2J0cyh2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJdW5zaWduZWQgbG9uZyBkZWJ1Z2N0bG1zcjsKKworCWlmICghY3B1Yy0+ZHMpCisJCXJldHVybjsKKworCWRlYnVnY3RsbXNyID0gZ2V0X2RlYnVnY3RsbXNyKCk7CisKKwlkZWJ1Z2N0bG1zciAmPQorCQl+KFg4Nl9ERUJVR0NUTF9UUiB8IFg4Nl9ERUJVR0NUTF9CVFMgfCBYODZfREVCVUdDVExfQlRJTlQgfAorCQkgIFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX09TIHwgWDg2X0RFQlVHQ1RMX0JUU19PRkZfVVNSKTsKKworCXVwZGF0ZV9kZWJ1Z2N0bG1zcihkZWJ1Z2N0bG1zcik7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3BtdV9kaXNhYmxlX2FsbCh2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKKwl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgMCk7CisKKwlpZiAodGVzdF9iaXQoWDg2X1BNQ19JRFhfRklYRURfQlRTLCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCWludGVsX3BtdV9kaXNhYmxlX2J0cygpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2FsbCh2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKKwl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgeDg2X3BtdS5pbnRlbF9jdHJsKTsKKworCWlmICh0ZXN0X2JpdChYODZfUE1DX0lEWF9GSVhFRF9CVFMsIGNwdWMtPmFjdGl2ZV9tYXNrKSkgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPQorCQkJY3B1Yy0+ZXZlbnRzW1g4Nl9QTUNfSURYX0ZJWEVEX0JUU107CisKKwkJaWYgKFdBUk5fT05fT05DRSghZXZlbnQpKQorCQkJcmV0dXJuOworCisJCWludGVsX3BtdV9lbmFibGVfYnRzKGV2ZW50LT5ody5jb25maWcpOworCX0KK30KKworc3RhdGljIGlubGluZSB1NjQgaW50ZWxfcG11X2dldF9zdGF0dXModm9pZCkKK3sKKwl1NjQgc3RhdHVzOworCisJcmRtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9wbXVfYWNrX3N0YXR1cyh1NjQgYWNrKQoreworCXdybXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTCwgYWNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpbnRlbF9wbXVfZGlzYWJsZV9maXhlZChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgX19pZHgpCit7CisJaW50IGlkeCA9IF9faWR4IC0gWDg2X1BNQ19JRFhfRklYRUQ7CisJdTY0IGN0cmxfdmFsLCBtYXNrOworCisJbWFzayA9IDB4ZlVMTCA8PCAoaWR4ICogNCk7CisKKwlyZG1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOworCWN0cmxfdmFsICY9IH5tYXNrOworCSh2b2lkKWNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKHZvaWQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgZGVidWdfc3RvcmUgKmRzID0gY3B1Yy0+ZHM7CisJc3RydWN0IGJ0c19yZWNvcmQgeworCQl1NjQJZnJvbTsKKwkJdTY0CXRvOworCQl1NjQJZmxhZ3M7CisJfTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbWDg2X1BNQ19JRFhfRklYRURfQlRTXTsKKwlzdHJ1Y3QgYnRzX3JlY29yZCAqYXQsICp0b3A7CisJc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSBoYW5kbGU7CisJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOworCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm47CisKKwlpZiAoIWRzKQorCQlyZXR1cm47CisKKwlhdCAgPSAoc3RydWN0IGJ0c19yZWNvcmQgKikodW5zaWduZWQgbG9uZylkcy0+YnRzX2J1ZmZlcl9iYXNlOworCXRvcCA9IChzdHJ1Y3QgYnRzX3JlY29yZCAqKSh1bnNpZ25lZCBsb25nKWRzLT5idHNfaW5kZXg7CisKKwlpZiAodG9wIDw9IGF0KQorCQlyZXR1cm47CisKKwlkcy0+YnRzX2luZGV4ID0gZHMtPmJ0c19idWZmZXJfYmFzZTsKKworCisJZGF0YS5wZXJpb2QJPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7CisJZGF0YS5hZGRyCT0gMDsKKwlkYXRhLnJhdwk9IE5VTEw7CisJcmVncy5pcAkJPSAwOworCisJLyoKKwkgKiBQcmVwYXJlIGEgZ2VuZXJpYyBzYW1wbGUsIGkuZS4gZmlsbCBpbiB0aGUgaW52YXJpYW50IGZpZWxkcy4KKwkgKiBXZSB3aWxsIG92ZXJ3cml0ZSB0aGUgZnJvbSBhbmQgdG8gYWRkcmVzcyBiZWZvcmUgd2Ugb3V0cHV0CisJICogdGhlIHNhbXBsZS4KKwkgKi8KKwlwZXJmX3ByZXBhcmVfc2FtcGxlKCZoZWFkZXIsICZkYXRhLCBldmVudCwgJnJlZ3MpOworCisJaWYgKHBlcmZfb3V0cHV0X2JlZ2luKCZoYW5kbGUsIGV2ZW50LAorCQkJICAgICAgaGVhZGVyLnNpemUgKiAodG9wIC0gYXQpLCAxLCAxKSkKKwkJcmV0dXJuOworCisJZm9yICg7IGF0IDwgdG9wOyBhdCsrKSB7CisJCWRhdGEuaXAJCT0gYXQtPmZyb207CisJCWRhdGEuYWRkcgk9IGF0LT50bzsKKworCQlwZXJmX291dHB1dF9zYW1wbGUoJmhhbmRsZSwgJmhlYWRlciwgJmRhdGEsIGV2ZW50KTsKKwl9CisKKwlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7CisKKwkvKiBUaGVyZSdzIG5ldyBkYXRhIGF2YWlsYWJsZS4gKi8KKwlldmVudC0+aHcuaW50ZXJydXB0cysrOworCWV2ZW50LT5wZW5kaW5nX2tpbGwgPSBQT0xMX0lOOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2ludGVsX3BtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCit7CisJaWYgKHVubGlrZWx5KGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpKSB7CisJCWludGVsX3BtdV9kaXNhYmxlX2J0cygpOworCQlpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcigpOworCQlyZXR1cm47CisJfQorCisJaWYgKHVubGlrZWx5KGh3Yy0+Y29uZmlnX2Jhc2UgPT0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFJfQ1RSTCkpIHsKKwkJaW50ZWxfcG11X2Rpc2FibGVfZml4ZWQoaHdjLCBpZHgpOworCQlyZXR1cm47CisJfQorCisJeDg2X3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpbnRlbF9wbXVfZW5hYmxlX2ZpeGVkKHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBfX2lkeCkKK3sKKwlpbnQgaWR4ID0gX19pZHggLSBYODZfUE1DX0lEWF9GSVhFRDsKKwl1NjQgY3RybF92YWwsIGJpdHMsIG1hc2s7CisJaW50IGVycjsKKworCS8qCisJICogRW5hYmxlIElSUSBnZW5lcmF0aW9uICgweDgpLAorCSAqIGFuZCBlbmFibGUgcmluZy0zIGNvdW50aW5nICgweDIpIGFuZCByaW5nLTAgY291bnRpbmcgKDB4MSkKKwkgKiBpZiByZXF1ZXN0ZWQ6CisJICovCisJYml0cyA9IDB4OFVMTDsKKwlpZiAoaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVVNSKQorCQliaXRzIHw9IDB4MjsKKwlpZiAoaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MpCisJCWJpdHMgfD0gMHgxOworCisJLyoKKwkgKiBBTlkgYml0IGlzIHN1cHBvcnRlZCBpbiB2MyBhbmQgdXAKKwkgKi8KKwlpZiAoeDg2X3BtdS52ZXJzaW9uID4gMiAmJiBod2MtPmNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9BTlkpCisJCWJpdHMgfD0gMHg0OworCisJYml0cyA8PD0gKGlkeCAqIDQpOworCW1hc2sgPSAweGZVTEwgPDwgKGlkeCAqIDQpOworCisJcmRtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UsIGN0cmxfdmFsKTsKKwljdHJsX3ZhbCAmPSB+bWFzazsKKwljdHJsX3ZhbCB8PSBiaXRzOworCWVyciA9IGNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3sKKwlpZiAodW5saWtlbHkoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykpIHsKKwkJaWYgKCFfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpLmVuYWJsZWQpCisJCQlyZXR1cm47CisKKwkJaW50ZWxfcG11X2VuYWJsZV9idHMoaHdjLT5jb25maWcpOworCQlyZXR1cm47CisJfQorCisJaWYgKHVubGlrZWx5KGh3Yy0+Y29uZmlnX2Jhc2UgPT0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFJfQ1RSTCkpIHsKKwkJaW50ZWxfcG11X2VuYWJsZV9maXhlZChod2MsIGlkeCk7CisJCXJldHVybjsKKwl9CisKKwlfX3g4Nl9wbXVfZW5hYmxlX2V2ZW50KGh3YywgaWR4KTsKK30KKworLyoKKyAqIFNhdmUgYW5kIHJlc3RhcnQgYW4gZXhwaXJlZCBldmVudC4gQ2FsbGVkIGJ5IE5NSSBjb250ZXh0cywKKyAqIHNvIGl0IGhhcyB0byBiZSBjYXJlZnVsIGFib3V0IHByZWVtcHRpbmcgbm9ybWFsIGV2ZW50IG9wczoKKyAqLworc3RhdGljIGludCBpbnRlbF9wbXVfc2F2ZV9hbmRfcmVzdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJaW50IGlkeCA9IGh3Yy0+aWR4OworCWludCByZXQ7CisKKwl4ODZfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKKwlyZXQgPSB4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfcmVzZXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVidWdfc3RvcmUgKmRzID0gX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKS5kczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpZHg7CisKKwlpZiAoIXg4Nl9wbXUubnVtX2V2ZW50cykKKwkJcmV0dXJuOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJcHJpbnRrKCJjbGVhcmluZyBQTVUgc3RhdGUgb24gQ1BVIyVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHM7IGlkeCsrKSB7CisJCWNoZWNraW5nX3dybXNybCh4ODZfcG11LmV2ZW50c2VsICsgaWR4LCAwdWxsKTsKKwkJY2hlY2tpbmdfd3Jtc3JsKHg4Nl9wbXUucGVyZmN0ciAgKyBpZHgsIDB1bGwpOworCX0KKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50c19maXhlZDsgaWR4KyspIHsKKwkJY2hlY2tpbmdfd3Jtc3JsKE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCArIGlkeCwgMHVsbCk7CisJfQorCWlmIChkcykKKwkJZHMtPmJ0c19pbmRleCA9IGRzLT5idHNfYnVmZmVyX2Jhc2U7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGhhbmRsZXIgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBsb2NhbCBBUElDLCBzbyB0aGUgQVBJQyBJUlEgaGFuZGxpbmcKKyAqIHJ1bGVzIGFwcGx5OgorICovCitzdGF0aWMgaW50IGludGVsX3BtdV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWM7CisJaW50IGJpdCwgbG9vcHM7CisJdTY0IGFjaywgc3RhdHVzOworCisJZGF0YS5hZGRyID0gMDsKKwlkYXRhLnJhdyA9IE5VTEw7CisKKwljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKKwlwZXJmX2Rpc2FibGUoKTsKKwlpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcigpOworCXN0YXR1cyA9IGludGVsX3BtdV9nZXRfc3RhdHVzKCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJcGVyZl9lbmFibGUoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbG9vcHMgPSAwOworYWdhaW46CisJaWYgKCsrbG9vcHMgPiAxMDApIHsKKwkJV0FSTl9PTkNFKDEsICJwZXJmZXZlbnRzOiBpcnEgbG9vcCBzdHVjayFcbiIpOworCQlwZXJmX2V2ZW50X3ByaW50X2RlYnVnKCk7CisJCWludGVsX3BtdV9yZXNldCgpOworCQlwZXJmX2VuYWJsZSgpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpbmNfaXJxX3N0YXQoYXBpY19wZXJmX2lycXMpOworCWFjayA9IHN0YXR1czsKKwlmb3JfZWFjaF9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSZzdGF0dXMsIFg4Nl9QTUNfSURYX01BWCkgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbYml0XTsKKworCQljbGVhcl9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSAmc3RhdHVzKTsKKwkJaWYgKCF0ZXN0X2JpdChiaXQsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghaW50ZWxfcG11X3NhdmVfYW5kX3Jlc3RhcnQoZXZlbnQpKQorCQkJY29udGludWU7CisKKwkJZGF0YS5wZXJpb2QgPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7CisKKwkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsICZkYXRhLCByZWdzKSkKKwkJCWludGVsX3BtdV9kaXNhYmxlX2V2ZW50KCZldmVudC0+aHcsIGJpdCk7CisJfQorCisJaW50ZWxfcG11X2Fja19zdGF0dXMoYWNrKTsKKworCS8qCisJICogUmVwZWF0IGlmIHRoZXJlIGlzIG1vcmUgd29yayB0byBiZSBkb25lOgorCSAqLworCXN0YXR1cyA9IGludGVsX3BtdV9nZXRfc3RhdHVzKCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBhZ2FpbjsKKworCXBlcmZfZW5hYmxlKCk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGJ0c19jb25zdHJhaW50ID0KKwlFVkVOVF9DT05TVFJBSU5UKDAsIDFVTEwgPDwgWDg2X1BNQ19JRFhfRklYRURfQlRTLCAwKTsKKworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50ICoKK2ludGVsX3NwZWNpYWxfY29uc3RyYWludHMoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXVuc2lnbmVkIGludCBod19ldmVudDsKKworCWh3X2V2ZW50ID0gZXZlbnQtPmh3LmNvbmZpZyAmIElOVEVMX0FSQ0hfRVZFTlRfTUFTSzsKKworCWlmICh1bmxpa2VseSgoaHdfZXZlbnQgPT0KKwkJICAgICAgeDg2X3BtdS5ldmVudF9tYXAoUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TKSkgJiYKKwkJICAgICAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QgPT0gMSkpKSB7CisKKwkJcmV0dXJuICZidHNfY29uc3RyYWludDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqCitpbnRlbF9nZXRfZXZlbnRfY29uc3RyYWludHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqYzsKKworCWMgPSBpbnRlbF9zcGVjaWFsX2NvbnN0cmFpbnRzKGV2ZW50KTsKKwlpZiAoYykKKwkJcmV0dXJuIGM7CisKKwlyZXR1cm4geDg2X2dldF9ldmVudF9jb25zdHJhaW50cyhjcHVjLCBldmVudCk7Cit9CisKK3N0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBjb3JlX3BtdSA9IHsKKwkubmFtZQkJCT0gImNvcmUiLAorCS5oYW5kbGVfaXJxCQk9IHg4Nl9wbXVfaGFuZGxlX2lycSwKKwkuZGlzYWJsZV9hbGwJCT0geDg2X3BtdV9kaXNhYmxlX2FsbCwKKwkuZW5hYmxlX2FsbAkJPSB4ODZfcG11X2VuYWJsZV9hbGwsCisJLmVuYWJsZQkJCT0geDg2X3BtdV9lbmFibGVfZXZlbnQsCisJLmRpc2FibGUJCT0geDg2X3BtdV9kaXNhYmxlX2V2ZW50LAorCS5ldmVudHNlbAkJPSBNU1JfQVJDSF9QRVJGTU9OX0VWRU5UU0VMMCwKKwkucGVyZmN0cgkJPSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwLAorCS5ldmVudF9tYXAJCT0gaW50ZWxfcG11X2V2ZW50X21hcCwKKwkucmF3X2V2ZW50CQk9IGludGVsX3BtdV9yYXdfZXZlbnQsCisJLm1heF9ldmVudHMJCT0gQVJSQVlfU0laRShpbnRlbF9wZXJmbW9uX2V2ZW50X21hcCksCisJLmFwaWMJCQk9IDEsCisJLyoKKwkgKiBJbnRlbCBQTUNzIGNhbm5vdCBiZSBhY2Nlc3NlZCBzYW5lbHkgYWJvdmUgMzIgYml0IHdpZHRoLAorCSAqIHNvIHdlIGluc3RhbGwgYW4gYXJ0aWZpY2lhbCAxPDwzMSBwZXJpb2QgcmVnYXJkbGVzcyBvZgorCSAqIHRoZSBnZW5lcmljIGV2ZW50IHBlcmlvZDoKKwkgKi8KKwkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCAzMSkgLSAxLAorCS5nZXRfZXZlbnRfY29uc3RyYWludHMJPSBpbnRlbF9nZXRfZXZlbnRfY29uc3RyYWludHMsCisJLmV2ZW50X2NvbnN0cmFpbnRzCT0gaW50ZWxfY29yZV9ldmVudF9jb25zdHJhaW50cywKK307CisKK3N0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBpbnRlbF9wbXUgPSB7CisJLm5hbWUJCQk9ICJJbnRlbCIsCisJLmhhbmRsZV9pcnEJCT0gaW50ZWxfcG11X2hhbmRsZV9pcnEsCisJLmRpc2FibGVfYWxsCQk9IGludGVsX3BtdV9kaXNhYmxlX2FsbCwKKwkuZW5hYmxlX2FsbAkJPSBpbnRlbF9wbXVfZW5hYmxlX2FsbCwKKwkuZW5hYmxlCQkJPSBpbnRlbF9wbXVfZW5hYmxlX2V2ZW50LAorCS5kaXNhYmxlCQk9IGludGVsX3BtdV9kaXNhYmxlX2V2ZW50LAorCS5ldmVudHNlbAkJPSBNU1JfQVJDSF9QRVJGTU9OX0VWRU5UU0VMMCwKKwkucGVyZmN0cgkJPSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwLAorCS5ldmVudF9tYXAJCT0gaW50ZWxfcG11X2V2ZW50X21hcCwKKwkucmF3X2V2ZW50CQk9IGludGVsX3BtdV9yYXdfZXZlbnQsCisJLm1heF9ldmVudHMJCT0gQVJSQVlfU0laRShpbnRlbF9wZXJmbW9uX2V2ZW50X21hcCksCisJLmFwaWMJCQk9IDEsCisJLyoKKwkgKiBJbnRlbCBQTUNzIGNhbm5vdCBiZSBhY2Nlc3NlZCBzYW5lbHkgYWJvdmUgMzIgYml0IHdpZHRoLAorCSAqIHNvIHdlIGluc3RhbGwgYW4gYXJ0aWZpY2lhbCAxPDwzMSBwZXJpb2QgcmVnYXJkbGVzcyBvZgorCSAqIHRoZSBnZW5lcmljIGV2ZW50IHBlcmlvZDoKKwkgKi8KKwkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCAzMSkgLSAxLAorCS5lbmFibGVfYnRzCQk9IGludGVsX3BtdV9lbmFibGVfYnRzLAorCS5kaXNhYmxlX2J0cwkJPSBpbnRlbF9wbXVfZGlzYWJsZV9idHMsCisJLmdldF9ldmVudF9jb25zdHJhaW50cwk9IGludGVsX2dldF9ldmVudF9jb25zdHJhaW50cworfTsKKworc3RhdGljIF9faW5pdCBpbnQgaW50ZWxfcG11X2luaXQodm9pZCkKK3sKKwl1bmlvbiBjcHVpZDEwX2VkeCBlZHg7CisJdW5pb24gY3B1aWQxMF9lYXggZWF4OworCXVuc2lnbmVkIGludCB1bnVzZWQ7CisJdW5zaWduZWQgaW50IGVieDsKKwlpbnQgdmVyc2lvbjsKKworCWlmICghY3B1X2hhcygmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVJDSF9QRVJGTU9OKSkgeworCQkvKiBjaGVjayBmb3IgUDYgcHJvY2Vzc29yIGZhbWlseSAqLworCSAgIGlmIChib290X2NwdV9kYXRhLng4NiA9PSA2KSB7CisJCXJldHVybiBwNl9wbXVfaW5pdCgpOworCSAgIH0gZWxzZSB7CisJCXJldHVybiAtRU5PREVWOworCSAgIH0KKwl9CisKKwkvKgorCSAqIENoZWNrIHdoZXRoZXIgdGhlIEFyY2hpdGVjdHVyYWwgUGVyZk1vbiBzdXBwb3J0cworCSAqIEJyYW5jaCBNaXNzZXMgUmV0aXJlZCBod19ldmVudCBvciBub3QuCisJICovCisJY3B1aWQoMTAsICZlYXguZnVsbCwgJmVieCwgJnVudXNlZCwgJmVkeC5mdWxsKTsKKwlpZiAoZWF4LnNwbGl0Lm1hc2tfbGVuZ3RoIDw9IEFSQ0hfUEVSRk1PTl9CUkFOQ0hfTUlTU0VTX1JFVElSRUQpCisJCXJldHVybiAtRU5PREVWOworCisJdmVyc2lvbiA9IGVheC5zcGxpdC52ZXJzaW9uX2lkOworCWlmICh2ZXJzaW9uIDwgMikKKwkJeDg2X3BtdSA9IGNvcmVfcG11OworCWVsc2UKKwkJeDg2X3BtdSA9IGludGVsX3BtdTsKKworCXg4Nl9wbXUudmVyc2lvbgkJCT0gdmVyc2lvbjsKKwl4ODZfcG11Lm51bV9ldmVudHMJCT0gZWF4LnNwbGl0Lm51bV9ldmVudHM7CisJeDg2X3BtdS5ldmVudF9iaXRzCQk9IGVheC5zcGxpdC5iaXRfd2lkdGg7CisJeDg2X3BtdS5ldmVudF9tYXNrCQk9ICgxVUxMIDw8IGVheC5zcGxpdC5iaXRfd2lkdGgpIC0gMTsKKworCS8qCisJICogUXVpcms6IHYyIHBlcmZtb24gZG9lcyBub3QgcmVwb3J0IGZpeGVkLXB1cnBvc2UgZXZlbnRzLCBzbworCSAqIGFzc3VtZSBhdCBsZWFzdCAzIGV2ZW50czoKKwkgKi8KKwlpZiAodmVyc2lvbiA+IDEpCisJCXg4Nl9wbXUubnVtX2V2ZW50c19maXhlZCA9IG1heCgoaW50KWVkeC5zcGxpdC5udW1fZXZlbnRzX2ZpeGVkLCAzKTsKKworCS8qCisJICogSW5zdGFsbCB0aGUgaHctY2FjaGUtZXZlbnRzIHRhYmxlOgorCSAqLworCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpIHsKKwljYXNlIDE0OiAvKiA2NSBubSBjb3JlIHNvbG8vZHVvLCAiWW9uYWgiICovCisJCXByX2NvbnQoIkNvcmUgZXZlbnRzLCAiKTsKKwkJYnJlYWs7CisKKwljYXNlIDE1OiAvKiBvcmlnaW5hbCA2NSBubSBjZWxlcm9uL3BlbnRpdW0vY29yZTIveGVvbiwgIk1lcm9tIi8iQ29ucm9lIiAqLworCWNhc2UgMjI6IC8qIHNpbmdsZS1jb3JlIDY1IG5tIGNlbGVyb24vY29yZTJzb2xvICJNZXJvbS1MIi8iQ29ucm9lLUwiICovCisJY2FzZSAyMzogLyogY3VycmVudCA0NSBubSBjZWxlcm9uL2NvcmUyL3hlb24gIlBlbnJ5biIvIldvbGZkYWxlIiAqLworCWNhc2UgMjk6IC8qIHNpeC1jb3JlIDQ1IG5tIHhlb24gIkR1bm5pbmd0b24iICovCisJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIGNvcmUyX2h3X2NhY2hlX2V2ZW50X2lkcywKKwkJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKKworCQl4ODZfcG11LmV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfY29yZTJfZXZlbnRfY29uc3RyYWludHM7CisJCXByX2NvbnQoIkNvcmUyIGV2ZW50cywgIik7CisJCWJyZWFrOworCisJY2FzZSAyNjogLyogNDUgbm0gbmVoYWxlbSwgIkJsb29tZmllbGQiICovCisJY2FzZSAzMDogLyogNDUgbm0gbmVoYWxlbSwgIkx5bm5maWVsZCIgKi8KKwkJbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgbmVoYWxlbV9od19jYWNoZV9ldmVudF9pZHMsCisJCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CisKKwkJeDg2X3BtdS5ldmVudF9jb25zdHJhaW50cyA9IGludGVsX25laGFsZW1fZXZlbnRfY29uc3RyYWludHM7CisJCXByX2NvbnQoIk5laGFsZW0vQ29yZWk3IGV2ZW50cywgIik7CisJCWJyZWFrOworCWNhc2UgMjg6CisJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIGF0b21faHdfY2FjaGVfZXZlbnRfaWRzLAorCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOworCisJCXg4Nl9wbXUuZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF9nZW5fZXZlbnRfY29uc3RyYWludHM7CisJCXByX2NvbnQoIkF0b20gZXZlbnRzLCAiKTsKKwkJYnJlYWs7CisKKwljYXNlIDM3OiAvKiAzMiBubSBuZWhhbGVtLCAiQ2xhcmtkYWxlIiAqLworCWNhc2UgNDQ6IC8qIDMyIG5tIG5laGFsZW0sICJHdWxmdG93biIgKi8KKwkJbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgd2VzdG1lcmVfaHdfY2FjaGVfZXZlbnRfaWRzLAorCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOworCisJCXg4Nl9wbXUuZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF93ZXN0bWVyZV9ldmVudF9jb25zdHJhaW50czsKKwkJcHJfY29udCgiV2VzdG1lcmUgZXZlbnRzLCAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogZGVmYXVsdCBjb25zdHJhaW50cyBmb3IgdjIgYW5kIHVwCisJCSAqLworCQl4ODZfcG11LmV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfZ2VuX2V2ZW50X2NvbnN0cmFpbnRzOworCQlwcl9jb250KCJnZW5lcmljIGFyY2hpdGVjdGVkIHBlcmZtb24sICIpOworCX0KKwlyZXR1cm4gMDsKK30KKworI2Vsc2UgLyogQ09ORklHX0NQVV9TVVBfSU5URUwgKi8KKworc3RhdGljIGludCBpbnRlbF9wbXVfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX0NQVV9TVVBfSU5URUwgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhNWJhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNi5jCkBAIC0wLDAgKzEsMTU3IEBACisjaWZkZWYgQ09ORklHX0NQVV9TVVBfSU5URUwKKworLyoKKyAqIE5vdCBzdXJlIGFib3V0IHNvbWUgb2YgdGhlc2UKKyAqLworc3RhdGljIGNvbnN0IHU2NCBwNl9wZXJmbW9uX2V2ZW50X21hcFtdID0KK3sKKyAgW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JCT0gMHgwMDc5LAorICBbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCQk9IDB4MDBjMCwKKyAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10JPSAweDBmMmUsCisgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JCT0gMHgwMTJlLAorICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXQk9IDB4MDBjNCwKKyAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JCT0gMHgwMGM1LAorICBbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkJPSAweDAwNjIsCit9OworCitzdGF0aWMgdTY0IHA2X3BtdV9ldmVudF9tYXAoaW50IGh3X2V2ZW50KQoreworCXJldHVybiBwNl9wZXJmbW9uX2V2ZW50X21hcFtod19ldmVudF07Cit9CisKKy8qCisgKiBFdmVudCBzZXR0aW5nIHRoYXQgaXMgc3BlY2lmaWVkIG5vdCB0byBjb3VudCBhbnl0aGluZy4KKyAqIFdlIHVzZSB0aGlzIHRvIGVmZmVjdGl2ZWx5IGRpc2FibGUgYSBjb3VudGVyLgorICoKKyAqIEwyX1JRU1RTIHdpdGggMCBNRVNJIHVuaXQgbWFzay4KKyAqLworI2RlZmluZSBQNl9OT1BfRVZFTlQJCQkweDAwMDAwMDJFVUxMCisKK3N0YXRpYyB1NjQgcDZfcG11X3Jhd19ldmVudCh1NjQgaHdfZXZlbnQpCit7CisjZGVmaW5lIFA2X0VWTlRTRUxfRVZFTlRfTUFTSwkJMHgwMDAwMDBGRlVMTAorI2RlZmluZSBQNl9FVk5UU0VMX1VOSVRfTUFTSwkJMHgwMDAwRkYwMFVMTAorI2RlZmluZSBQNl9FVk5UU0VMX0VER0VfTUFTSwkJMHgwMDA0MDAwMFVMTAorI2RlZmluZSBQNl9FVk5UU0VMX0lOVl9NQVNLCQkweDAwODAwMDAwVUxMCisjZGVmaW5lIFA2X0VWTlRTRUxfUkVHX01BU0sJCTB4RkYwMDAwMDBVTEwKKworI2RlZmluZSBQNl9FVk5UU0VMX01BU0sJCQlcCisJKFA2X0VWTlRTRUxfRVZFTlRfTUFTSyB8CVwKKwkgUDZfRVZOVFNFTF9VTklUX01BU0sgIHwJXAorCSBQNl9FVk5UU0VMX0VER0VfTUFTSyAgfAlcCisJIFA2X0VWTlRTRUxfSU5WX01BU0sgICB8CVwKKwkgUDZfRVZOVFNFTF9SRUdfTUFTSykKKworCXJldHVybiBod19ldmVudCAmIFA2X0VWTlRTRUxfTUFTSzsKK30KKworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IHA2X2V2ZW50X2NvbnN0cmFpbnRzW10gPQoreworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhjMSwgMHgxKSwJLyogRkxPUFMgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTAsIDB4MSksCS8qIEZQX0NPTVBfT1BTX0VYRSAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMSwgMHgxKSwJLyogRlBfQVNTSVNUICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEyLCAweDIpLAkvKiBNVUwgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTMsIDB4MiksCS8qIERJViAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxNCwgMHgxKSwJLyogQ1lDTEVTX0RJVl9CVVNZICovCisJRVZFTlRfQ09OU1RSQUlOVF9FTkQKK307CisKK3N0YXRpYyB2b2lkIHA2X3BtdV9kaXNhYmxlX2FsbCh2b2lkKQoreworCXU2NCB2YWw7CisKKwkvKiBwNiBvbmx5IGhhcyBvbmUgZW5hYmxlIHJlZ2lzdGVyICovCisJcmRtc3JsKE1TUl9QNl9FVk5UU0VMMCwgdmFsKTsKKwl2YWwgJj0gfkFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOworCXdybXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHA2X3BtdV9lbmFibGVfYWxsKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwkvKiBwNiBvbmx5IGhhcyBvbmUgZW5hYmxlIHJlZ2lzdGVyICovCisJcmRtc3JsKE1TUl9QNl9FVk5UU0VMMCwgdmFsKTsKKwl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7CisJd3Jtc3JsKE1TUl9QNl9FVk5UU0VMMCwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwNl9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJdTY0IHZhbCA9IFA2X05PUF9FVkVOVDsKKworCWlmIChjcHVjLT5lbmFibGVkKQorCQl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7CisKKwkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgcDZfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJdTY0IHZhbDsKKworCXZhbCA9IGh3Yy0+Y29uZmlnOworCWlmIChjcHVjLT5lbmFibGVkKQorCQl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7CisKKwkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwgdmFsKTsKK30KKworc3RhdGljIF9faW5pdGNvbnN0IHN0cnVjdCB4ODZfcG11IHA2X3BtdSA9IHsKKwkubmFtZQkJCT0gInA2IiwKKwkuaGFuZGxlX2lycQkJPSB4ODZfcG11X2hhbmRsZV9pcnEsCisJLmRpc2FibGVfYWxsCQk9IHA2X3BtdV9kaXNhYmxlX2FsbCwKKwkuZW5hYmxlX2FsbAkJPSBwNl9wbXVfZW5hYmxlX2FsbCwKKwkuZW5hYmxlCQkJPSBwNl9wbXVfZW5hYmxlX2V2ZW50LAorCS5kaXNhYmxlCQk9IHA2X3BtdV9kaXNhYmxlX2V2ZW50LAorCS5ldmVudHNlbAkJPSBNU1JfUDZfRVZOVFNFTDAsCisJLnBlcmZjdHIJCT0gTVNSX1A2X1BFUkZDVFIwLAorCS5ldmVudF9tYXAJCT0gcDZfcG11X2V2ZW50X21hcCwKKwkucmF3X2V2ZW50CQk9IHA2X3BtdV9yYXdfZXZlbnQsCisJLm1heF9ldmVudHMJCT0gQVJSQVlfU0laRShwNl9wZXJmbW9uX2V2ZW50X21hcCksCisJLmFwaWMJCQk9IDEsCisJLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgMzEpIC0gMSwKKwkudmVyc2lvbgkJPSAwLAorCS5udW1fZXZlbnRzCQk9IDIsCisJLyoKKwkgKiBFdmVudHMgaGF2ZSA0MCBiaXRzIGltcGxlbWVudGVkLiBIb3dldmVyIHRoZXkgYXJlIGRlc2lnbmVkIHN1Y2gKKwkgKiB0aGF0IGJpdHMgWzMyLTM5XSBhcmUgc2lnbiBleHRlbnNpb25zIG9mIGJpdCAzMS4gQXMgc3VjaCB0aGUKKwkgKiBlZmZlY3RpdmUgd2lkdGggb2YgYSBldmVudCBmb3IgUDYtbGlrZSBQTVUgaXMgMzIgYml0cyBvbmx5LgorCSAqCisJICogU2VlIElBLTMyIEludGVsIEFyY2hpdGVjdHVyZSBTb2Z0d2FyZSBkZXZlbG9wZXIgbWFudWFsIFZvbCAzQgorCSAqLworCS5ldmVudF9iaXRzCQk9IDMyLAorCS5ldmVudF9tYXNrCQk9ICgxVUxMIDw8IDMyKSAtIDEsCisJLmdldF9ldmVudF9jb25zdHJhaW50cwk9IHg4Nl9nZXRfZXZlbnRfY29uc3RyYWludHMsCisJLmV2ZW50X2NvbnN0cmFpbnRzCT0gcDZfZXZlbnRfY29uc3RyYWludHMsCit9OworCitzdGF0aWMgX19pbml0IGludCBwNl9wbXVfaW5pdCh2b2lkKQoreworCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpIHsKKwljYXNlIDE6CisJY2FzZSAzOiAgLyogUGVudGl1bSBQcm8gKi8KKwljYXNlIDU6CisJY2FzZSA2OiAgLyogUGVudGl1bSBJSSAqLworCWNhc2UgNzoKKwljYXNlIDg6CisJY2FzZSAxMTogLyogUGVudGl1bSBJSUkgKi8KKwljYXNlIDk6CisJY2FzZSAxMzoKKwkJLyogUGVudGl1bSBNICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2NvbnQoInVuc3VwcG9ydGVkIHA2IENQVSBtb2RlbCAlZCAiLAorCQkJYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl4ODZfcG11ID0gcDZfcG11OworCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX1NVUF9JTlRFTCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYwppbmRleCA4OThkZjk3Li43NGY0ZTg1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYwpAQCAtMTE1LDE3ICsxMTUsNiBAQAogCiAJcmV0dXJuICF0ZXN0X2JpdChjb3VudGVyLCBwZXJmY3RyX25taV9vd25lcik7CiB9Ci0KLS8qIGNoZWNrcyB0aGUgYW4gbXNyIGZvciBhdmFpbGFiaWxpdHkgKi8KLWludCBhdmFpbF90b19yZXNydl9wZXJmY3RyX25taSh1bnNpZ25lZCBpbnQgbXNyKQotewotCXVuc2lnbmVkIGludCBjb3VudGVyOwotCi0JY291bnRlciA9IG5taV9wZXJmY3RyX21zcl90b19iaXQobXNyKTsKLQlCVUdfT04oY291bnRlciA+IE5NSV9NQVhfQ09VTlRFUl9CSVRTKTsKLQotCXJldHVybiAhdGVzdF9iaXQoY291bnRlciwgcGVyZmN0cl9ubWlfb3duZXIpOwotfQogRVhQT1JUX1NZTUJPTChhdmFpbF90b19yZXNydl9wZXJmY3RyX25taV9iaXQpOwogCiBpbnQgcmVzZXJ2ZV9wZXJmY3RyX25taSh1bnNpZ25lZCBpbnQgbXNyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCmluZGV4IGFlNzc1Y2EuLjExNTQwYTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKQEAgLTE4LDExICsxOCw2IEBACiAKICNpbmNsdWRlICJkdW1wc3RhY2suaCIKIAotLyogSnVzdCBhIHN0dWIgZm9yIG5vdyAqLwotaW50IHg4Nl9pc19zdGFja19pZChpbnQgaWQsIGNoYXIgKm5hbWUpCi17Ci0JcmV0dXJuIDA7Ci19CiAKIHZvaWQgZHVtcF90cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwppbmRleCAwYWQ5NTk3Li5kY2U5OWFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCkBAIC0zMywxMSArMzMsNiBAQAogI2VuZGlmCiB9OwogCi1pbnQgeDg2X2lzX3N0YWNrX2lkKGludCBpZCwgY2hhciAqbmFtZSkKLXsKLQlyZXR1cm4geDg2X3N0YWNrX2lkc1tpZCAtIDFdID09IG5hbWU7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nICppbl9leGNlcHRpb25fc3RhY2sodW5zaWduZWQgY3B1LCB1bnNpZ25lZCBsb25nIHN0YWNrLAogCQkJCQkgdW5zaWduZWQgKnVzZWRwLCBjaGFyICoqaWRwKQogewpAQCAtMjkxLDYgKzI4Niw3IEBACiAKIAlzcCA9IHJlZ3MtPnNwOwogCXByaW50aygiQ1BVICVkICIsIGNwdSk7CisJcHJpbnRfbW9kdWxlcygpOwogCV9fc2hvd19yZWdzKHJlZ3MsIDEpOwogCXByaW50aygiUHJvY2VzcyAlcyAocGlkOiAlZCwgdGhyZWFkaW5mbyAlcCwgdGFzayAlcClcbiIsCiAJCWN1ci0+Y29tbSwgY3VyLT5waWQsIHRhc2tfdGhyZWFkX2luZm8oY3VyKSwgY3VyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCmluZGV4IGExYTc4NzYuLmE5NjZiNzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwpAQCAtNTE3LDExICs1MTcsMTkgQEAKIAkJCSAgICAgaW50IGNoZWNrdHlwZSkKIHsKIAlpbnQgaTsKKwl1NjQgZW5kOwogCXU2NCByZWFsX3JlbW92ZWRfc2l6ZSA9IDA7CiAKIAlpZiAoc2l6ZSA+IChVTExPTkdfTUFYIC0gc3RhcnQpKQogCQlzaXplID0gVUxMT05HX01BWCAtIHN0YXJ0OwogCisJZW5kID0gc3RhcnQgKyBzaXplOworCXByaW50ayhLRVJOX0RFQlVHICJlODIwIHJlbW92ZSByYW5nZTogJTAxNkx4IC0gJTAxNkx4ICIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGFydCwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGVuZCk7CisJZTgyMF9wcmludF90eXBlKG9sZF90eXBlKTsKKwlwcmludGsoS0VSTl9DT05UICJcbiIpOworCiAJZm9yIChpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKyspIHsKIAkJc3RydWN0IGU4MjBlbnRyeSAqZWkgPSAmZTgyMC5tYXBbaV07CiAJCXU2NCBmaW5hbF9zdGFydCwgZmluYWxfZW5kOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VmaS5jIGIvYXJjaC94ODYva2VybmVsL2VmaS5jCmluZGV4IGNkY2ZiMTIuLmMyZmE5YjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKQEAgLTM2Miw3ICszNjIsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZCBub3QgbWFwIHRoZSBmaXJtd2FyZSB2ZW5kb3IhXG4iKTsKIAllYXJseV9pb3VubWFwKHRtcCwgMik7CiAKLQlwcmludGsoS0VSTl9JTkZPICJFRkkgdiV1LiUuMDJ1IGJ5ICVzIFxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJFRkkgdiV1LiUuMDJ1IGJ5ICVzXG4iLAogCSAgICAgICBlZmkuc3lzdGFiLT5oZHIucmV2aXNpb24gPj4gMTYsCiAJICAgICAgIGVmaS5zeXN0YWItPmhkci5yZXZpc2lvbiAmIDB4ZmZmZiwgdmVuZG9yKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCmluZGV4IDMwOTY4OTIuLmNkMzc0NjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKQEAgLTMwLDE0ICszMCwzMiBAQAogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAKKy8qCisgKiBtb2RpZnlpbmdfY29kZSBpcyBzZXQgdG8gbm90aWZ5IE5NSXMgdGhhdCB0aGV5IG5lZWQgdG8gdXNlCisgKiBtZW1vcnkgYmFycmllcnMgd2hlbiBlbnRlcmluZyBvciBleGl0aW5nLiBCdXQgd2UgZG9uJ3Qgd2FudAorICogdG8gYnVyZGVuIE5NSXMgd2l0aCB1bm5lY2Vzc2FyeSBtZW1vcnkgYmFycmllcnMgd2hlbiBjb2RlCisgKiBtb2RpZmljYXRpb24gaXMgbm90IGJlaW5nIGRvbmUgKHdoaWNoIGlzIG1vc3Qgb2YgdGhlIHRpbWUpLgorICoKKyAqIEEgbXV0ZXggaXMgYWxyZWFkeSBoZWxkIHdoZW4gZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcHJlcGFyZQorICogYW5kIHBvc3RfcHJvY2VzcyBhcmUgY2FsbGVkLiBObyBsb2NrcyBuZWVkIHRvIGJlIHRha2VuIGhlcmUuCisgKgorICogU3RvcCBtYWNoaW5lIHdpbGwgbWFrZSBzdXJlIGN1cnJlbnRseSBydW5uaW5nIE5NSXMgYXJlIGRvbmUKKyAqIGFuZCBuZXcgTk1JcyB3aWxsIHNlZSB0aGUgdXBkYXRlZCB2YXJpYWJsZSBiZWZvcmUgd2UgbmVlZAorICogdG8gd29ycnkgYWJvdXQgTk1JcyBkb2luZyBtZW1vcnkgYmFycmllcnMuCisgKi8KK3N0YXRpYyBpbnQgbW9kaWZ5aW5nX2NvZGUgX19yZWFkX21vc3RseTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHNhdmVfbW9kaWZ5aW5nX2NvZGUpOworCiBpbnQgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcHJlcGFyZSh2b2lkKQogewogCXNldF9rZXJuZWxfdGV4dF9ydygpOworCW1vZGlmeWluZ19jb2RlID0gMTsKIAlyZXR1cm4gMDsKIH0KIAogaW50IGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3Bvc3RfcHJvY2Vzcyh2b2lkKQogeworCW1vZGlmeWluZ19jb2RlID0gMDsKIAlzZXRfa2VybmVsX3RleHRfcm8oKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE0OSw2ICsxNjcsMTEgQEAKIAogdm9pZCBmdHJhY2Vfbm1pX2VudGVyKHZvaWQpCiB7CisJX19nZXRfY3B1X3ZhcihzYXZlX21vZGlmeWluZ19jb2RlKSA9IG1vZGlmeWluZ19jb2RlOworCisJaWYgKCFfX2dldF9jcHVfdmFyKHNhdmVfbW9kaWZ5aW5nX2NvZGUpKQorCQlyZXR1cm47CisKIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJm5taV9ydW5uaW5nKSAmIE1PRF9DT0RFX1dSSVRFX0ZMQUcpIHsKIAkJc21wX3JtYigpOwogCQlmdHJhY2VfbW9kX2NvZGUoKTsKQEAgLTE2MCw2ICsxODMsOSBAQAogCiB2b2lkIGZ0cmFjZV9ubWlfZXhpdCh2b2lkKQogeworCWlmICghX19nZXRfY3B1X3ZhcihzYXZlX21vZGlmeWluZ19jb2RlKSkKKwkJcmV0dXJuOworCiAJLyogRmluaXNoIGFsbCBleGVjdXRpb25zIGJlZm9yZSBjbGVhcmluZyBubWlfcnVubmluZyAqLwogCXNtcF9tYigpOwogCWF0b21pY19kZWMoJm5taV9ydW5uaW5nKTsKQEAgLTQ4NCwxMyArNTEwLDMgQEAKIAl9CiB9CiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwotCi0jaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyAqc3lzX2NhbGxfdGFibGU7Ci0KLXVuc2lnbmVkIGxvbmcgX19pbml0IGFyY2hfc3lzY2FsbF9hZGRyKGludCBucikKLXsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpKCZzeXNfY2FsbF90YWJsZSlbbnJdOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jIGIvYXJjaC94ODYva2VybmVsL2hwZXQuYwppbmRleCBhZDgwYTFjLi5lZTRmYTFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKQEAgLTI2Niw3ICsyNjYsNyBAQAogCWZvcmNlX2hwZXRfcmVzdW1lKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGhwZXRfcmVzdW1lX2NvdW50ZXIodm9pZCkKK3N0YXRpYyB2b2lkIGhwZXRfcmVzdW1lX2NvdW50ZXIoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKIAlocGV0X3Jlc3VtZV9kZXZpY2UoKTsKIAlocGV0X3Jlc3RhcnRfY291bnRlcigpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2h3X2JyZWFrcG9pbnQuYyBiL2FyY2gveDg2L2tlcm5lbC9od19icmVha3BvaW50LmMKaW5kZXggMDVkNWZlYy4uZGNhMjgwMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2h3X2JyZWFrcG9pbnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCkBAIC0yMTIsMjUgKzIxMiw2IEBACiAJcmV0dXJuICh2YSA+PSBUQVNLX1NJWkUpICYmICgodmEgKyBsZW4gLSAxKSA+PSBUQVNLX1NJWkUpOwogfQogCi0vKgotICogU3RvcmUgYSBicmVha3BvaW50J3MgZW5jb2RlZCBhZGRyZXNzLCBsZW5ndGgsIGFuZCB0eXBlLgotICovCi1zdGF0aWMgaW50IGFyY2hfc3RvcmVfaW5mbyhzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCi17Ci0Jc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbyA9IGNvdW50ZXJfYXJjaF9icChicCk7Ci0JLyoKLQkgKiBGb3Iga2VybmVsLWFkZHJlc3NlcywgZWl0aGVyIHRoZSBhZGRyZXNzIG9yIHN5bWJvbCBuYW1lIGNhbiBiZQotCSAqIHNwZWNpZmllZC4KLQkgKi8KLQlpZiAoaW5mby0+bmFtZSkKLQkJaW5mby0+YWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKQotCQkJCWthbGxzeW1zX2xvb2t1cF9uYW1lKGluZm8tPm5hbWUpOwotCWlmIChpbmZvLT5hZGRyZXNzKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAtRUlOVkFMOwotfQotCiBpbnQgYXJjaF9icF9nZW5lcmljX2ZpZWxkcyhpbnQgeDg2X2xlbiwgaW50IHg4Nl90eXBlLAogCQkJICAgaW50ICpnZW5fbGVuLCBpbnQgKmdlbl90eXBlKQogewpAQCAtMzYyLDEwICszNDMsMTMgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBhcmNoX3N0b3JlX2luZm8oYnApOwotCi0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CisJLyoKKwkgKiBGb3Iga2VybmVsLWFkZHJlc3NlcywgZWl0aGVyIHRoZSBhZGRyZXNzIG9yIHN5bWJvbCBuYW1lIGNhbiBiZQorCSAqIHNwZWNpZmllZC4KKwkgKi8KKwlpZiAoaW5mby0+bmFtZSkKKwkJaW5mby0+YWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKQorCQkJCWthbGxzeW1zX2xvb2t1cF9uYW1lKGluZm8tPm5hbWUpOwogCS8qCiAJICogQ2hlY2sgdGhhdCB0aGUgbG93LW9yZGVyIGJpdHMgb2YgdGhlIGFkZHJlc3MgYXJlIGFwcHJvcHJpYXRlCiAJICogZm9yIHRoZSBhbGlnbm1lbnQgaW1wbGllZCBieSBsZW4uCkBAIC01MDIsOCArNDg2LDYgQEAKIAkJcmN1X3JlYWRfbG9jaygpOwogCiAJCWJwID0gcGVyX2NwdShicF9wZXJfcmVnW2ldLCBjcHUpOwotCQlpZiAoYnApCi0JCQlyYyA9IE5PVElGWV9ET05FOwogCQkvKgogCQkgKiBSZXNldCB0aGUgJ2kndGggVFJBUCBiaXQgaW4gZHI2IHRvIGRlbm90ZSBjb21wbGV0aW9uIG9mCiAJCSAqIGV4Y2VwdGlvbiBoYW5kbGluZwpAQCAtNTIyLDcgKzUwNCwxMyBAQAogCiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KLQlpZiAoZHI2ICYgKH5EUl9UUkFQX0JJVFMpKQorCS8qCisJICogRnVydGhlciBwcm9jZXNzaW5nIGluIGRvX2RlYnVnKCkgaXMgbmVlZGVkIGZvciBhKSB1c2VyLXNwYWNlCisJICogYnJlYWtwb2ludHMgKHRvIGdlbmVyYXRlIHNpZ25hbHMpIGFuZCBiKSB3aGVuIHRoZSBzeXN0ZW0gaGFzCisJICogdGFrZW4gZXhjZXB0aW9uIGR1ZSB0byBtdWx0aXBsZSBjYXVzZXMKKwkgKi8KKwlpZiAoKGN1cnJlbnQtPnRocmVhZC5kZWJ1Z3JlZzYgJiBEUl9UUkFQX0JJVFMpIHx8CisJICAgIChkcjYgJiAofkRSX1RSQVBfQklUUykpKQogCQlyYyA9IE5PVElGWV9ET05FOwogCiAJc2V0X2RlYnVncmVnKGRyNywgNyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaTM4Ny5jIGIvYXJjaC94ODYva2VybmVsL2kzODcuYwppbmRleCBmMmY4NTQwLi5jMDFhMmI4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaTM4Ny5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pMzg3LmMKQEAgLTE2NCw2ICsxNjQsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFRoZSB4c3RhdGVyZWdzX2FjdGl2ZSgpIHJvdXRpbmUgaXMgdGhlIHNhbWUgYXMgdGhlIGZwcmVnc19hY3RpdmUoKSByb3V0aW5lLAorICogYXMgdGhlICJyZWdzZXQtPm4iIGZvciB0aGUgeHN0YXRlIHJlZ3NldCB3aWxsIGJlIHVwZGF0ZWQgYmFzZWQgb24gdGhlIGZlYXR1cmUKKyAqIGNhcGFiaWxpdGVzIHN1cHBvcnRlZCBieSB0aGUgeHNhdmUuCisgKi8KIGludCBmcHJlZ3NfYWN0aXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCkKIHsKIAlyZXR1cm4gdHNrX3VzZWRfbWF0aCh0YXJnZXQpID8gcmVnc2V0LT5uIDogMDsKQEAgLTIwNCw4ICsyMDksNiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgodGFyZ2V0KTsKLQogCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKIAkJCQkgJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlLCAwLCAtMSk7CiAKQEAgLTIyNCw2ICsyMjcsNjggQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgeHN0YXRlcmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQl1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCXZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQoreworCWludCByZXQ7CisKKwlpZiAoIWNwdV9oYXNfeHNhdmUpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gaW5pdF9mcHUodGFyZ2V0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBDb3B5IHRoZSA0OGJ5dGVzIGRlZmluZWQgYnkgdGhlIHNvZnR3YXJlIGZpcnN0IGludG8gdGhlIHhzdGF0ZQorCSAqIG1lbW9yeSBsYXlvdXQgaW4gdGhlIHRocmVhZCBzdHJ1Y3QsIHNvIHRoYXQgd2UgY2FuIGNvcHkgdGhlIGVudGlyZQorCSAqIHhzdGF0ZXJlZ3MgdG8gdGhlIHVzZXIgdXNpbmcgb25lIHVzZXJfcmVnc2V0X2NvcHlvdXQoKS4KKwkgKi8KKwltZW1jcHkoJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlLnN3X3Jlc2VydmVkLAorCSAgICAgICB4c3RhdGVfZnhfc3dfYnl0ZXMsIHNpemVvZih4c3RhdGVfZnhfc3dfYnl0ZXMpKTsKKworCS8qCisJICogQ29weSB0aGUgeHN0YXRlIG1lbW9yeSBsYXlvdXQuCisJICovCisJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkgICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPnhzYXZlLCAwLCAtMSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHhzdGF0ZXJlZ3Nfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCSAgY29uc3Qgdm9pZCAqa2J1ZiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgeHNhdmVfaGRyX3N0cnVjdCAqeHNhdmVfaGRyOworCisJaWYgKCFjcHVfaGFzX3hzYXZlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IGluaXRfZnB1KHRhcmdldCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkgJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+eHNhdmUsIDAsIC0xKTsKKworCS8qCisJICogbXhjc3IgcmVzZXJ2ZWQgYml0cyBtdXN0IGJlIG1hc2tlZCB0byB6ZXJvIGZvciBzZWN1cml0eSByZWFzb25zLgorCSAqLworCXRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlLm14Y3NyICY9IG14Y3NyX2ZlYXR1cmVfbWFzazsKKworCXhzYXZlX2hkciA9ICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPnhzYXZlLnhzYXZlX2hkcjsKKworCXhzYXZlX2hkci0+eHN0YXRlX2J2ICY9IHBjbnR4dF9tYXNrOworCS8qCisJICogVGhlc2UgYml0cyBtdXN0IGJlIHplcm8uCisJICovCisJeHNhdmVfaGRyLT5yZXNlcnZlZDFbMF0gPSB4c2F2ZV9oZHItPnJlc2VydmVkMVsxXSA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCiAjaWYgZGVmaW5lZCBDT05GSUdfWDg2XzMyIHx8IGRlZmluZWQgQ09ORklHX0lBMzJfRU1VTEFUSU9OCiAKIC8qCkBAIC00MDQsOCArNDY5LDYgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0Jc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKHRhcmdldCk7Ci0KIAlpZiAoIUhBVkVfSFdGUCkKIAkJcmV0dXJuIGZwcmVnc19zb2Z0X3NldCh0YXJnZXQsIHJlZ3NldCwgcG9zLCBjb3VudCwga2J1ZiwgdWJ1Zik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rZ2RiLmMgYi9hcmNoL3g4Ni9rZXJuZWwva2dkYi5jCmluZGV4IGRkNzRmZTcyLi5iZmJhNjAxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva2dkYi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rZ2RiLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CisjaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgogCiAjaW5jbHVkZSA8YXNtL2RlYnVncmVnLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KQEAgLTIwNCw0MCArMjA1LDgxIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaHdfYnJlYWtwb2ludCB7CiAJdW5zaWduZWQJCWVuYWJsZWQ7Ci0JdW5zaWduZWQJCXR5cGU7Ci0JdW5zaWduZWQJCWxlbjsKIAl1bnNpZ25lZCBsb25nCQlhZGRyOworCWludAkJCWxlbjsKKwlpbnQJCQl0eXBlOworCXN0cnVjdCBwZXJmX2V2ZW50CSoqcGV2OwogfSBicmVha2luZm9bNF07CiAKIHN0YXRpYyB2b2lkIGtnZGJfY29ycmVjdF9od19icmVhayh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZHI3OwotCWludCBjb3JyZWN0aXQgPSAwOwotCWludCBicmVha2JpdDsKIAlpbnQgYnJlYWtubzsKIAotCWdldF9kZWJ1Z3JlZyhkcjcsIDcpOwogCWZvciAoYnJlYWtubyA9IDA7IGJyZWFrbm8gPCA0OyBicmVha25vKyspIHsKLQkJYnJlYWtiaXQgPSAyIDw8IChicmVha25vIDw8IDEpOwotCQlpZiAoIShkcjcgJiBicmVha2JpdCkgJiYgYnJlYWtpbmZvW2JyZWFrbm9dLmVuYWJsZWQpIHsKLQkJCWNvcnJlY3RpdCA9IDE7Ci0JCQlkcjcgfD0gYnJlYWtiaXQ7Ci0JCQlkcjcgJj0gfigweGYwMDAwIDw8IChicmVha25vIDw8IDIpKTsKLQkJCWRyNyB8PSAoKGJyZWFraW5mb1ticmVha25vXS5sZW4gPDwgMikgfAotCQkJCSBicmVha2luZm9bYnJlYWtub10udHlwZSkgPDwKLQkJCSAgICAgICAoKGJyZWFrbm8gPDwgMikgKyAxNik7Ci0JCQlzZXRfZGVidWdyZWcoYnJlYWtpbmZvW2JyZWFrbm9dLmFkZHIsIGJyZWFrbm8pOwotCi0JCX0gZWxzZSB7Ci0JCQlpZiAoKGRyNyAmIGJyZWFrYml0KSAmJiAhYnJlYWtpbmZvW2JyZWFrbm9dLmVuYWJsZWQpIHsKLQkJCQljb3JyZWN0aXQgPSAxOwotCQkJCWRyNyAmPSB+YnJlYWtiaXQ7Ci0JCQkJZHI3ICY9IH4oMHhmMDAwMCA8PCAoYnJlYWtubyA8PCAyKSk7Ci0JCQl9Ci0JCX0KKwkJc3RydWN0IHBlcmZfZXZlbnQgKmJwOworCQlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvOworCQlpbnQgdmFsOworCQlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwkJaWYgKCFicmVha2luZm9bYnJlYWtub10uZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCQlicCA9ICpwZXJfY3B1X3B0cihicmVha2luZm9bYnJlYWtub10ucGV2LCBjcHUpOworCQlpbmZvID0gY291bnRlcl9hcmNoX2JwKGJwKTsKKwkJaWYgKGJwLT5hdHRyLmRpc2FibGVkICE9IDEpCisJCQljb250aW51ZTsKKwkJYnAtPmF0dHIuYnBfYWRkciA9IGJyZWFraW5mb1ticmVha25vXS5hZGRyOworCQlicC0+YXR0ci5icF9sZW4gPSBicmVha2luZm9bYnJlYWtub10ubGVuOworCQlicC0+YXR0ci5icF90eXBlID0gYnJlYWtpbmZvW2JyZWFrbm9dLnR5cGU7CisJCWluZm8tPmFkZHJlc3MgPSBicmVha2luZm9bYnJlYWtub10uYWRkcjsKKwkJaW5mby0+bGVuID0gYnJlYWtpbmZvW2JyZWFrbm9dLmxlbjsKKwkJaW5mby0+dHlwZSA9IGJyZWFraW5mb1ticmVha25vXS50eXBlOworCQl2YWwgPSBhcmNoX2luc3RhbGxfaHdfYnJlYWtwb2ludChicCk7CisJCWlmICghdmFsKQorCQkJYnAtPmF0dHIuZGlzYWJsZWQgPSAwOwogCX0KLQlpZiAoY29ycmVjdGl0KQotCQlzZXRfZGVidWdyZWcoZHI3LCA3KTsKKwlod19icmVha3BvaW50X3Jlc3RvcmUoKTsKK30KKworc3RhdGljIGludCBod19icmVha19yZXNlcnZlX3Nsb3QoaW50IGJyZWFrbm8pCit7CisJaW50IGNwdTsKKwlpbnQgY250ID0gMDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqKnBldmVudDsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWNudCsrOworCQlwZXZlbnQgPSBwZXJfY3B1X3B0cihicmVha2luZm9bYnJlYWtub10ucGV2LCBjcHUpOworCQlpZiAoZGJnX3Jlc2VydmVfYnBfc2xvdCgqcGV2ZW50KSkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQljbnQtLTsKKwkJaWYgKCFjbnQpCisJCQlicmVhazsKKwkJcGV2ZW50ID0gcGVyX2NwdV9wdHIoYnJlYWtpbmZvW2JyZWFrbm9dLnBldiwgY3B1KTsKKwkJZGJnX3JlbGVhc2VfYnBfc2xvdCgqcGV2ZW50KTsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGh3X2JyZWFrX3JlbGVhc2Vfc2xvdChpbnQgYnJlYWtubykKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqKnBldmVudDsKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJcGV2ZW50ID0gcGVyX2NwdV9wdHIoYnJlYWtpbmZvW2JyZWFrbm9dLnBldiwgY3B1KTsKKwkJaWYgKGRiZ19yZWxlYXNlX2JwX3Nsb3QoKnBldmVudCkpCisJCQkvKgorCQkJICogVGhlIGRlYnVnZ2VyIGlzIHJlc3BvbmlzYmxlIGZvciBoYW5kaW5nIHRoZSByZXRyeSBvbgorCQkJICogcmVtb3ZlIGZhaWx1cmUuCisJCQkgKi8KKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI1MSw2ICsyOTMsMTAgQEAKIAlpZiAoaSA9PSA0KQogCQlyZXR1cm4gLTE7CiAKKwlpZiAoaHdfYnJlYWtfcmVsZWFzZV9zbG90KGkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IHJlbW92ZSBodyBicmVha3BvaW50IGF0ICVseFxuIiwgYWRkcik7CisJCXJldHVybiAtMTsKKwl9CiAJYnJlYWtpbmZvW2ldLmVuYWJsZWQgPSAwOwogCiAJcmV0dXJuIDA7CkBAIC0yNTksMTUgKzMwNSwyMyBAQAogc3RhdGljIHZvaWQga2dkYl9yZW1vdmVfYWxsX2h3X2JyZWFrKHZvaWQpCiB7CiAJaW50IGk7CisJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IHBlcmZfZXZlbnQgKmJwOwogCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJbWVtc2V0KCZicmVha2luZm9baV0sIDAsIHNpemVvZihzdHJ1Y3QgaHdfYnJlYWtwb2ludCkpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKCFicmVha2luZm9baV0uZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCQlicCA9ICpwZXJfY3B1X3B0cihicmVha2luZm9baV0ucGV2LCBjcHUpOworCQlpZiAoYnAtPmF0dHIuZGlzYWJsZWQgPT0gMSkKKwkJCWNvbnRpbnVlOworCQlhcmNoX3VuaW5zdGFsbF9od19icmVha3BvaW50KGJwKTsKKwkJYnAtPmF0dHIuZGlzYWJsZWQgPSAxOworCX0KIH0KIAogc3RhdGljIGludAoga2dkYl9zZXRfaHdfYnJlYWsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuLCBlbnVtIGtnZGJfYnB0eXBlIGJwdHlwZSkKIHsKLQl1bnNpZ25lZCB0eXBlOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKQEAgLTI3OCwyNyArMzMyLDQyIEBACiAKIAlzd2l0Y2ggKGJwdHlwZSkgewogCWNhc2UgQlBfSEFSRFdBUkVfQlJFQUtQT0lOVDoKLQkJdHlwZSA9IDA7Ci0JCWxlbiAgPSAxOworCQlsZW4gPSAxOworCQlicmVha2luZm9baV0udHlwZSA9IFg4Nl9CUkVBS1BPSU5UX0VYRUNVVEU7CiAJCWJyZWFrOwogCWNhc2UgQlBfV1JJVEVfV0FUQ0hQT0lOVDoKLQkJdHlwZSA9IDE7CisJCWJyZWFraW5mb1tpXS50eXBlID0gWDg2X0JSRUFLUE9JTlRfV1JJVEU7CiAJCWJyZWFrOwogCWNhc2UgQlBfQUNDRVNTX1dBVENIUE9JTlQ6Ci0JCXR5cGUgPSAzOworCQlicmVha2luZm9baV0udHlwZSA9IFg4Nl9CUkVBS1BPSU5UX1JXOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLTE7CiAJfQotCi0JaWYgKGxlbiA9PSAxIHx8IGxlbiA9PSAyIHx8IGxlbiA9PSA0KQotCQlicmVha2luZm9baV0ubGVuICA9IGxlbiAtIDE7Ci0JZWxzZQorCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQlicmVha2luZm9baV0ubGVuID0gWDg2X0JSRUFLUE9JTlRfTEVOXzE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYnJlYWtpbmZvW2ldLmxlbiA9IFg4Nl9CUkVBS1BPSU5UX0xFTl8yOworCQlicmVhazsKKwljYXNlIDQ6CisJCWJyZWFraW5mb1tpXS5sZW4gPSBYODZfQlJFQUtQT0lOVF9MRU5fNDsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWNhc2UgODoKKwkJYnJlYWtpbmZvW2ldLmxlbiA9IFg4Nl9CUkVBS1BPSU5UX0xFTl84OworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CiAJCXJldHVybiAtMTsKLQotCWJyZWFraW5mb1tpXS5lbmFibGVkID0gMTsKKwl9CiAJYnJlYWtpbmZvW2ldLmFkZHIgPSBhZGRyOwotCWJyZWFraW5mb1tpXS50eXBlID0gdHlwZTsKKwlpZiAoaHdfYnJlYWtfcmVzZXJ2ZV9zbG90KGkpKSB7CisJCWJyZWFraW5mb1tpXS5hZGRyID0gMDsKKwkJcmV0dXJuIC0xOworCX0KKwlicmVha2luZm9baV0uZW5hYmxlZCA9IDE7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMxMyw4ICszODIsMjEgQEAKICAqLwogdm9pZCBrZ2RiX2Rpc2FibGVfaHdfZGVidWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJaW50IGk7CisJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IHBlcmZfZXZlbnQgKmJwOworCiAJLyogRGlzYWJsZSBoYXJkd2FyZSBkZWJ1Z2dpbmcgd2hpbGUgd2UgYXJlIGluIGtnZGI6ICovCiAJc2V0X2RlYnVncmVnKDBVTCwgNyk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpZiAoIWJyZWFraW5mb1tpXS5lbmFibGVkKQorCQkJY29udGludWU7CisJCWJwID0gKnBlcl9jcHVfcHRyKGJyZWFraW5mb1tpXS5wZXYsIGNwdSk7CisJCWlmIChicC0+YXR0ci5kaXNhYmxlZCA9PSAxKQorCQkJY29udGludWU7CisJCWFyY2hfdW5pbnN0YWxsX2h3X2JyZWFrcG9pbnQoYnApOworCQlicC0+YXR0ci5kaXNhYmxlZCA9IDE7CisJfQogfQogCiAvKioKQEAgLTM3OCw3ICs0NjAsNiBAQAogCQkJICAgICAgIHN0cnVjdCBwdF9yZWdzICpsaW51eF9yZWdzKQogewogCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQl1bnNpZ25lZCBsb25nIGRyNjsKIAljaGFyICpwdHI7CiAJaW50IG5ld1BDOwogCkBAIC00MDQsMjAgKzQ4NSw2IEBACiAJCQkJICAgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CiAJCX0KIAotCQlnZXRfZGVidWdyZWcoZHI2LCA2KTsKLQkJaWYgKCEoZHI2ICYgMHg0MDAwKSkgewotCQkJaW50IGJyZWFrbm87Ci0KLQkJCWZvciAoYnJlYWtubyA9IDA7IGJyZWFrbm8gPCA0OyBicmVha25vKyspIHsKLQkJCQlpZiAoZHI2ICYgKDEgPDwgYnJlYWtubykgJiYKLQkJCQkgICAgYnJlYWtpbmZvW2JyZWFrbm9dLnR5cGUgPT0gMCkgewotCQkJCQkvKiBTZXQgcmVzdG9yZSBmbGFnOiAqLwotCQkJCQlsaW51eF9yZWdzLT5mbGFncyB8PSBYODZfRUZMQUdTX1JGOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJc2V0X2RlYnVncmVnKDBVTCwgNik7CiAJCWtnZGJfY29ycmVjdF9od19icmVhaygpOwogCiAJCXJldHVybiAwOwpAQCAtNDg1LDggKzU1Miw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBESUVfREVCVUc6Ci0JCWlmIChhdG9taWNfcmVhZCgma2dkYl9jcHVfZG9pbmdfc2luZ2xlX3N0ZXApID09Ci0JCSAgICByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CisJCWlmIChhdG9taWNfcmVhZCgma2dkYl9jcHVfZG9pbmdfc2luZ2xlX3N0ZXApICE9IC0xKSB7CiAJCQlpZiAodXNlcl9tb2RlKHJlZ3MpKQogCQkJCXJldHVybiBzaW5nbGVfc3RlcF9jb250KHJlZ3MsIGFyZ3MpOwogCQkJYnJlYWs7CkBAIC01MzksNyArNjA1LDQyIEBACiAgKi8KIGludCBrZ2RiX2FyY2hfaW5pdCh2b2lkKQogewotCXJldHVybiByZWdpc3Rlcl9kaWVfbm90aWZpZXIoJmtnZGJfbm90aWZpZXIpOworCWludCBpLCBjcHU7CisJaW50IHJldDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7CisJc3RydWN0IHBlcmZfZXZlbnQgKipwZXZlbnQ7CisKKwlyZXQgPSByZWdpc3Rlcl9kaWVfbm90aWZpZXIoJmtnZGJfbm90aWZpZXIpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKwkvKgorCSAqIFByZS1hbGxvY2F0ZSB0aGUgaHcgYnJlYWtwb2ludCBzdHJ1Y3Rpb25zIGluIHRoZSBub24tYXRvbWljCisJICogcG9ydGlvbiBvZiBrZ2RiIGJlY2F1c2UgdGhpcyBvcGVyYXRpb24gcmVxdWlyZXMgbXV0ZXhzIHRvCisJICogY29tcGxldGUuCisJICovCisJYXR0ci5icF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpa2dkYl9hcmNoX2luaXQ7CisJYXR0ci50eXBlID0gUEVSRl9UWVBFX0JSRUFLUE9JTlQ7CisJYXR0ci5icF9sZW4gPSBIV19CUkVBS1BPSU5UX0xFTl8xOworCWF0dHIuYnBfdHlwZSA9IEhXX0JSRUFLUE9JTlRfVzsKKwlhdHRyLmRpc2FibGVkID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWJyZWFraW5mb1tpXS5wZXYgPSByZWdpc3Rlcl93aWRlX2h3X2JyZWFrcG9pbnQoJmF0dHIsIE5VTEwpOworCQlpZiAoSVNfRVJSKGJyZWFraW5mb1tpXS5wZXYpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImtnZGI6IENvdWxkIG5vdCBhbGxvY2F0ZSBodyBicmVha3BvaW50c1xuIik7CisJCQlicmVha2luZm9baV0ucGV2ID0gTlVMTDsKKwkJCWtnZGJfYXJjaF9leGl0KCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJCXBldmVudCA9IHBlcl9jcHVfcHRyKGJyZWFraW5mb1tpXS5wZXYsIGNwdSk7CisJCQlwZXZlbnRbMF0tPmh3LnNhbXBsZV9wZXJpb2QgPSAxOworCQkJaWYgKHBldmVudFswXS0+ZGVzdHJveSAhPSBOVUxMKSB7CisJCQkJcGV2ZW50WzBdLT5kZXN0cm95ID0gTlVMTDsKKwkJCQlyZWxlYXNlX2JwX3Nsb3QoKnBldmVudCk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC01NTAsNiArNjUxLDEzIEBACiAgKi8KIHZvaWQga2dkYl9hcmNoX2V4aXQodm9pZCkKIHsKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWlmIChicmVha2luZm9baV0ucGV2KSB7CisJCQl1bnJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludChicmVha2luZm9baV0ucGV2KTsKKwkJCWJyZWFraW5mb1tpXS5wZXYgPSBOVUxMOworCQl9CisJfQogCXVucmVnaXN0ZXJfZGllX25vdGlmaWVyKCZrZ2RiX25vdGlmaWVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggNWI4Yzc1MC4uNWRlOWY0YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC0zMzcsNiArMzM3LDkgQEAKIAogaW50IF9fa3Byb2JlcyBhcmNoX3ByZXBhcmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCiB7CisJaWYgKGFsdGVybmF0aXZlc190ZXh0X3Jlc2VydmVkKHAtPmFkZHIsIHAtPmFkZHIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmICghY2FuX3Byb2JlKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIpKQogCQlyZXR1cm4gLUVJTFNFUTsKIAkvKiBpbnNuOiBtdXN0IGJlIG9uIHNwZWNpYWwgZXhlY3V0YWJsZSBwYWdlIG9uIHg4Ni4gKi8KQEAgLTQyOSw3ICs0MzIsNyBAQAogc3RhdGljIHZvaWQgX19rcHJvYmVzIHNldHVwX3NpbmdsZXN0ZXAoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJICAgICAgIHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7Ci0jaWYgIWRlZmluZWQoQ09ORklHX1BSRUVNUFQpIHx8IGRlZmluZWQoQ09ORklHX0ZSRUVaRVIpCisjaWYgIWRlZmluZWQoQ09ORklHX1BSRUVNUFQpCiAJaWYgKHAtPmFpbnNuLmJvb3N0YWJsZSA9PSAxICYmICFwLT5wb3N0X2hhbmRsZXIpIHsKIAkJLyogQm9vc3QgdXAgLS0gd2UgY2FuIGV4ZWN1dGUgY29waWVkIGluc3RydWN0aW9ucyBkaXJlY3RseSAqLwogCQlyZXNldF9jdXJyZW50X2twcm9iZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9pbnRlbC5jCmluZGV4IGViZDE5M2UuLjg1YTM0M2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMKQEAgLTMyOCw3ICszMjgsNyBAQAogCQkgICAgICAgY3B1X251bSwgbWNfaW50ZWwtPmhkci5yZXYpOwogCQlyZXR1cm4gLTE7CiAJfQotCXByX2luZm8oIkNQVSVkIHVwZGF0ZWQgdG8gcmV2aXNpb24gMHgleCwgZGF0ZSA9ICUwNHgtJTAyeC0lMDJ4IFxuIiwKKwlwcl9pbmZvKCJDUFUlZCB1cGRhdGVkIHRvIHJldmlzaW9uIDB4JXgsIGRhdGUgPSAlMDR4LSUwMngtJTAyeFxuIiwKIAkJY3B1X251bSwgdmFsWzFdLAogCQltY19pbnRlbC0+aGRyLmRhdGUgJiAweGZmZmYsCiAJCW1jX2ludGVsLT5oZHIuZGF0ZSA+PiAyNCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCmluZGV4IDQwYjU0Y2UuLmEyYzFlZGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYwpAQCAtMzU5LDEzICszNTksNiBAQAogCQl4ODZfaW5pdC5tcHBhcnNlLm1wY19yZWNvcmQoMSk7CiAJfQogCi0jaWZkZWYgQ09ORklHX1g4Nl9CSUdTTVAKLQlnZW5lcmljX2JpZ3NtcF9wcm9iZSgpOwotI2VuZGlmCi0KLQlpZiAoYXBpYy0+c2V0dXBfYXBpY19yb3V0aW5nKQotCQlhcGljLT5zZXR1cF9hcGljX3JvdXRpbmcoKTsKLQogCWlmICghbnVtX3Byb2Nlc3NvcnMpCiAJCXByaW50ayhLRVJOX0VSUiAiTVBUQUJMRTogbm8gcHJvY2Vzc29ycyByZWdpc3RlcmVkIVxuIik7CiAJcmV0dXJuIG51bV9wcm9jZXNzb3JzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYzliMzUyMi4uMDJkNjc4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC05Miw2ICs5MiwxMyBAQAogCX0KIH0KIAordm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc2hvd19yZWdpc3RlcnMocmVncyk7CisJc2hvd190cmFjZShOVUxMLCByZWdzLCAodW5zaWduZWQgbG9uZyAqKWtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpLAorCQkgICByZWdzLT5icCk7Cit9CisKIHZvaWQgc2hvd19yZWdzX2NvbW1vbih2b2lkKQogewogCWNvbnN0IGNoYXIgKmJvYXJkLCAqcHJvZHVjdDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IDM3YWQxZTAuLmY2YzYyNjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYwpAQCAtMTc0LDEyICsxNzQsNiBAQAogCQkJZDYsIGQ3KTsKIH0KIAotdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc2hvd19yZWdpc3RlcnMocmVncyk7Ci0Jc2hvd190cmFjZShOVUxMLCByZWdzLCAmcmVncy0+c3AsIHJlZ3MtPmJwKTsKLX0KLQogdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRlYWRfdGFzaykKIHsKIAlCVUdfT04oZGVhZF90YXNrLT5tbSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCA0MWEyNmE4Li5kYzk2OTBiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTIxMSwxMiArMjExLDYgQEAKIAlwcmludGsoS0VSTl9ERUZBVUxUICJEUjM6ICUwMTZseCBEUjY6ICUwMTZseCBEUjc6ICUwMTZseFxuIiwgZDMsIGQ2LCBkNyk7CiB9CiAKLXZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXNob3dfcmVnaXN0ZXJzKHJlZ3MpOwotCXNob3dfdHJhY2UoTlVMTCwgcmVncywgKHZvaWQgKikocmVncyArIDEpLCByZWdzLT5icCk7Ci19Ci0KIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpkZWFkX3Rhc2spCiB7CiAJaWYgKGRlYWRfdGFzay0+bW0pIHsKQEAgLTUyNyw2ICs1MjEsNyBAQAogCiAJLyogTWFrZSBzdXJlIHRvIGJlIGluIDMyYml0IG1vZGUgKi8KIAlzZXRfdGhyZWFkX2ZsYWcoVElGX0lBMzIpOworCWN1cnJlbnQtPnBlcnNvbmFsaXR5IHw9IGZvcmNlX3BlcnNvbmFsaXR5MzI7CiAKIAkvKiBQcmVwYXJlIHRoZSBmaXJzdCAicmV0dXJuIiB0byB1c2VyIHNwYWNlICovCiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgfD0gVFNfQ09NUEFUOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCmluZGV4IDAxN2Q5MzcuLjJkOTZhYWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKIAlSRUdTRVRfRlAsCiAJUkVHU0VUX1hGUCwKIAlSRUdTRVRfSU9QRVJNNjQgPSBSRUdTRVRfWEZQLAorCVJFR1NFVF9YU1RBVEUsCiAJUkVHU0VUX1RMUywKIAlSRUdTRVRfSU9QRVJNMzIsCiB9OwpAQCAtMTQwLDMwICsxNDEsNiBAQAogI2VuZGlmCiB9OwogCi0vKioKLSAqIHJlZ3NfZ2V0X2FyZ3VtZW50X250aCgpIC0gZ2V0IE50aCBhcmd1bWVudCBhdCBmdW5jdGlvbiBjYWxsCi0gKiBAcmVnczoJcHRfcmVncyB3aGljaCBjb250YWlucyByZWdpc3RlcnMgYXQgZnVuY3Rpb24gZW50cnkuCi0gKiBAbjoJCWFyZ3VtZW50IG51bWJlci4KLSAqCi0gKiByZWdzX2dldF9hcmd1bWVudF9udGgoKSByZXR1cm5zIEBuIHRoIGFyZ3VtZW50IG9mIGEgZnVuY3Rpb24gY2FsbC4KLSAqIFNpbmNlIHVzdWFsbHkgdGhlIGtlcm5lbCBzdGFjayB3aWxsIGJlIGNoYW5nZWQgcmlnaHQgYWZ0ZXIgZnVuY3Rpb24gZW50cnksCi0gKiB5b3UgbXVzdCB1c2UgdGhpcyBhdCBmdW5jdGlvbiBlbnRyeS4gSWYgdGhlIEBuIHRoIGVudHJ5IGlzIE5PVCBpbiB0aGUKLSAqIGtlcm5lbCBzdGFjayBvciBwdF9yZWdzLCB0aGlzIHJldHVybnMgMC4KLSAqLwotdW5zaWduZWQgbG9uZyByZWdzX2dldF9hcmd1bWVudF9udGgoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBuKQotewotCWlmIChuIDwgQVJSQVlfU0laRShhcmdfb2Zmc190YWJsZSkpCi0JCXJldHVybiAqKHVuc2lnbmVkIGxvbmcgKikoKGNoYXIgKilyZWdzICsgYXJnX29mZnNfdGFibGVbbl0pOwotCWVsc2UgewotCQkvKgotCQkgKiBUaGUgdHlwaWNhbCBjYXNlOiBhcmcgbiBpcyBvbiB0aGUgc3RhY2suCi0JCSAqIChOb3RlOiBzdGFja1swXSA9IHJldHVybiBhZGRyZXNzLCBzbyBza2lwIGl0KQotCQkgKi8KLQkJbiAtPSBBUlJBWV9TSVpFKGFyZ19vZmZzX3RhYmxlKTsKLQkJcmV0dXJuIHJlZ3NfZ2V0X2tlcm5lbF9zdGFja19udGgocmVncywgMSArIG4pOwotCX0KLX0KLQogLyoKICAqIGRvZXMgbm90IHlldCBjYXRjaCBzaWduYWxzIHNlbnQgd2hlbiB0aGUgY2hpbGQgZGllcy4KICAqIGluIGV4aXQuYyBvciBpbiBzaWduYWwuYy4KQEAgLTcwMiw3ICs2NzksNyBAQAogCX0gZWxzZSBpZiAobiA9PSA2KSB7CiAJCXZhbCA9IHRocmVhZC0+ZGVidWdyZWc2OwogCSB9IGVsc2UgaWYgKG4gPT0gNykgewotCQl2YWwgPSBwdHJhY2VfZ2V0X2RyNyh0aHJlYWQtPnB0cmFjZV9icHMpOworCQl2YWwgPSB0aHJlYWQtPnB0cmFjZV9kcjc7CiAJfQogCXJldHVybiB2YWw7CiB9CkBAIC03NzgsOCArNzU1LDExIEBACiAJCQlyZXR1cm4gcmM7CiAJfQogCS8qIEFsbCB0aGF0J3MgbGVmdCBpcyBEUjcgKi8KLQlpZiAobiA9PSA3KQorCWlmIChuID09IDcpIHsKIAkJcmMgPSBwdHJhY2Vfd3JpdGVfZHI3KHRzaywgdmFsKTsKKwkJaWYgKCFyYykKKwkJCXRocmVhZC0+cHRyYWNlX2RyNyA9IHZhbDsKKwl9CiAKIHJldF9wYXRoOgogCXJldHVybiByYzsKQEAgLTE1ODQsNyArMTU2NCw3IEBACiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgeDg2XzY0X3JlZ3NldHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNlcl9yZWdzZXQgeDg2XzY0X3JlZ3NldHNbXSBfX3JlYWRfbW9zdGx5ID0gewogCVtSRUdTRVRfR0VORVJBTF0gPSB7CiAJCS5jb3JlX25vdGVfdHlwZSA9IE5UX1BSU1RBVFVTLAogCQkubiA9IHNpemVvZihzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCkgLyBzaXplb2YobG9uZyksCkBAIC0xNTk3LDYgKzE1NzcsMTIgQEAKIAkJLnNpemUgPSBzaXplb2YobG9uZyksIC5hbGlnbiA9IHNpemVvZihsb25nKSwKIAkJLmFjdGl2ZSA9IHhmcHJlZ3NfYWN0aXZlLCAuZ2V0ID0geGZwcmVnc19nZXQsIC5zZXQgPSB4ZnByZWdzX3NldAogCX0sCisJW1JFR1NFVF9YU1RBVEVdID0geworCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9YODZfWFNUQVRFLAorCQkuc2l6ZSA9IHNpemVvZih1NjQpLCAuYWxpZ24gPSBzaXplb2YodTY0KSwKKwkJLmFjdGl2ZSA9IHhzdGF0ZXJlZ3NfYWN0aXZlLCAuZ2V0ID0geHN0YXRlcmVnc19nZXQsCisJCS5zZXQgPSB4c3RhdGVyZWdzX3NldAorCX0sCiAJW1JFR1NFVF9JT1BFUk02NF0gPSB7CiAJCS5jb3JlX25vdGVfdHlwZSA9IE5UXzM4Nl9JT1BFUk0sCiAJCS5uID0gSU9fQklUTUFQX0xPTkdTLApAQCAtMTYyMiw3ICsxNjA4LDcgQEAKICNlbmRpZgkvKiBDT05GSUdfWDg2XzY0ICovCiAKICNpZiBkZWZpbmVkIENPTkZJR19YODZfMzIgfHwgZGVmaW5lZCBDT05GSUdfSUEzMl9FTVVMQVRJT04KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgeDg2XzMyX3JlZ3NldHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNlcl9yZWdzZXQgeDg2XzMyX3JlZ3NldHNbXSBfX3JlYWRfbW9zdGx5ID0gewogCVtSRUdTRVRfR0VORVJBTF0gPSB7CiAJCS5jb3JlX25vdGVfdHlwZSA9IE5UX1BSU1RBVFVTLAogCQkubiA9IHNpemVvZihzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdDMyKSAvIHNpemVvZih1MzIpLApAQCAtMTY0MSw2ICsxNjI3LDEyIEBACiAJCS5zaXplID0gc2l6ZW9mKHUzMiksIC5hbGlnbiA9IHNpemVvZih1MzIpLAogCQkuYWN0aXZlID0geGZwcmVnc19hY3RpdmUsIC5nZXQgPSB4ZnByZWdzX2dldCwgLnNldCA9IHhmcHJlZ3Nfc2V0CiAJfSwKKwlbUkVHU0VUX1hTVEFURV0gPSB7CisJCS5jb3JlX25vdGVfdHlwZSA9IE5UX1g4Nl9YU1RBVEUsCisJCS5zaXplID0gc2l6ZW9mKHU2NCksIC5hbGlnbiA9IHNpemVvZih1NjQpLAorCQkuYWN0aXZlID0geHN0YXRlcmVnc19hY3RpdmUsIC5nZXQgPSB4c3RhdGVyZWdzX2dldCwKKwkJLnNldCA9IHhzdGF0ZXJlZ3Nfc2V0CisJfSwKIAlbUkVHU0VUX1RMU10gPSB7CiAJCS5jb3JlX25vdGVfdHlwZSA9IE5UXzM4Nl9UTFMsCiAJCS5uID0gR0RUX0VOVFJZX1RMU19FTlRSSUVTLCAuYmlhcyA9IEdEVF9FTlRSWV9UTFNfTUlOLApAQCAtMTY2Myw2ICsxNjU1LDIzIEBACiB9OwogI2VuZGlmCiAKKy8qCisgKiBUaGlzIHJlcHJlc2VudHMgYnl0ZXMgNDY0Li41MTEgaW4gdGhlIG1lbW9yeSBsYXlvdXQgZXhwb3J0ZWQgdGhyb3VnaAorICogdGhlIFJFR1NFVF9YU1RBVEUgaW50ZXJmYWNlLgorICovCit1NjQgeHN0YXRlX2Z4X3N3X2J5dGVzW1VTRVJfWFNUQVRFX0ZYX1NXX1dPUkRTXTsKKwordm9pZCB1cGRhdGVfcmVnc2V0X3hzdGF0ZV9pbmZvKHVuc2lnbmVkIGludCBzaXplLCB1NjQgeHN0YXRlX21hc2spCit7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXg4Nl82NF9yZWdzZXRzW1JFR1NFVF9YU1RBVEVdLm4gPSBzaXplIC8gc2l6ZW9mKHU2NCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkIENPTkZJR19YODZfMzIgfHwgZGVmaW5lZCBDT05GSUdfSUEzMl9FTVVMQVRJT04KKwl4ODZfMzJfcmVnc2V0c1tSRUdTRVRfWFNUQVRFXS5uID0gc2l6ZSAvIHNpemVvZih1NjQpOworI2VuZGlmCisJeHN0YXRlX2Z4X3N3X2J5dGVzW1VTRVJfWFNUQVRFX1hDUjBfV09SRF0gPSB4c3RhdGVfbWFzazsKK30KKwogY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0X3ZpZXcgKnRhc2tfdXNlcl9yZWdzZXRfdmlldyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAjaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKaW5kZXggMTU0NWJjMC4uNzA0YmRkYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwpAQCAtMjAzLDYgKzIwMywxNSBAQAogCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiMFQ2NTZGIiksCiAJCX0sCiAJfSwKKwl7CS8qIEhhbmRsZSBwcm9ibGVtcyB3aXRoIHJlYm9vdGluZyBvbiBEZWxsIE9wdGlQbGV4IDc2MCB3aXRoIDBHOTE5RyovCisJCS5jYWxsYmFjayA9IHNldF9iaW9zX3JlYm9vdCwKKwkJLmlkZW50ID0gIkRlbGwgT3B0aVBsZXggNzYwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiT3B0aVBsZXggNzYwIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICIwRzkxOUciKSwKKwkJfSwKKwl9LAogCXsJLyogSGFuZGxlIHByb2JsZW1zIHdpdGggcmVib290aW5nIG9uIERlbGwgMjQwMCdzICovCiAJCS5jYWxsYmFjayA9IHNldF9iaW9zX3JlYm9vdCwKIAkJLmlkZW50ID0gIkRlbGwgUG93ZXJFZGdlIDI0MDAiLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCBmN2I4Yjk4Li5jYjQyMTA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtMTIxLDcgKzEyMSw5IEBACiB1bnNpZ25lZCBsb25nIG1heF9sb3dfcGZuX21hcHBlZDsKIHVuc2lnbmVkIGxvbmcgbWF4X3Bmbl9tYXBwZWQ7CiAKKyNpZmRlZiBDT05GSUdfRE1JCiBSRVNFUlZFX0JSSyhkbWlfYWxsb2MsIDY1NTM2KTsKKyNlbmRpZgogCiB1bnNpZ25lZCBpbnQgYm9vdF9jcHVfaWQgX19yZWFkX21vc3RseTsKIApAQCAtNjQyLDIzICs2NDQsNDggQEAKIAkJCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJQaG9lbml4L01TQyIpLAogCQl9LAogCX0sCi0JewogCS8qCi0JICogQU1JIEJJT1Mgd2l0aCBsb3cgbWVtb3J5IGNvcnJ1cHRpb24gd2FzIGZvdW5kIG9uIEludGVsIERHNDVJRCBib2FyZC4KLQkgKiBJdCBoYXNlIGRpZmZlcmVudCBETUlfQklPU19WRU5ET1IgPSAiSW50ZWwgQ29ycC4iLCBmb3Igbm93IHdlIHdpbGwKKwkgKiBBTUkgQklPUyB3aXRoIGxvdyBtZW1vcnkgY29ycnVwdGlvbiB3YXMgZm91bmQgb24gSW50ZWwgREc0NUlEIGFuZAorCSAqIERHNDVGQyBib2FyZHMuCisJICogSXQgaGFzIGEgZGlmZmVyZW50IERNSV9CSU9TX1ZFTkRPUiA9ICJJbnRlbCBDb3JwLiIsIGZvciBub3cgd2Ugd2lsbAogCSAqIG1hdGNoIG9ubHkgRE1JX0JPQVJEX05BTUUgYW5kIHNlZSBpZiB0aGVyZSBpcyBtb3JlIGJhZCBwcm9kdWN0cwogCSAqIHdpdGggdGhpcyB2ZW5kb3IuCiAJICovCisJewogCQkuY2FsbGJhY2sgPSBkbWlfbG93X21lbW9yeV9jb3JydXB0aW9uLAogCQkuaWRlbnQgPSAiQU1JIEJJT1MiLAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIkRHNDVJRCIpLAogCQl9LAogCX0sCisJeworCQkuY2FsbGJhY2sgPSBkbWlfbG93X21lbW9yeV9jb3JydXB0aW9uLAorCQkuaWRlbnQgPSAiQU1JIEJJT1MiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIkRHNDVGQyIpLAorCQl9LAorCX0sCiAjZW5kaWYKIAl7fQogfTsKIAorc3RhdGljIHZvaWQgX19pbml0IHRyaW1fYmlvc19yYW5nZSh2b2lkKQoreworCS8qCisJICogQSBzcGVjaWFsIGNhc2UgaXMgdGhlIGZpcnN0IDRLYiBvZiBtZW1vcnk7CisJICogVGhpcyBpcyBhIEJJT1Mgb3duZWQgYXJlYSwgbm90IGtlcm5lbCByYW0sIGJ1dCBnZW5lcmFsbHkKKwkgKiBub3QgbGlzdGVkIGFzIHN1Y2ggaW4gdGhlIEU4MjAgdGFibGUuCisJICovCisJZTgyMF91cGRhdGVfcmFuZ2UoMCwgUEFHRV9TSVpFLCBFODIwX1JBTSwgRTgyMF9SRVNFUlZFRCk7CisJLyoKKwkgKiBzcGVjaWFsIGNhc2U6IFNvbWUgQklPU2VuIHJlcG9ydCB0aGUgUEMgQklPUworCSAqIGFyZWEgKDY0MC0+MU1iKSBhcyByYW0gZXZlbiB0aG91Z2ggaXQgaXMgbm90LgorCSAqIHRha2UgdGhlbSBvdXQuCisJICovCisJZTgyMF9yZW1vdmVfcmFuZ2UoQklPU19CRUdJTiwgQklPU19FTkQgLSBCSU9TX0JFR0lOLCBFODIwX1JBTSwgMSk7CisJc2FuaXRpemVfZTgyMF9tYXAoZTgyMC5tYXAsIEFSUkFZX1NJWkUoZTgyMC5tYXApLCAmZTgyMC5ucl9tYXApOworfQorCiAvKgogICogRGV0ZXJtaW5lIGlmIHdlIHdlcmUgbG9hZGVkIGJ5IGFuIEVGSSBsb2FkZXIuICBJZiBzbywgdGhlbiB3ZSBoYXZlIGFsc28gYmVlbgogICogcGFzc2VkIHRoZSBlZmkgbWVtbWFwLCBzeXN0YWIsIGV0Yy4sIHNvIHdlIHNob3VsZCB1c2UgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzCkBAIC04MjIsNyArODQ5LDcgQEAKIAlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmZGF0YV9yZXNvdXJjZSk7CiAJaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmJzc19yZXNvdXJjZSk7CiAKLQorCXRyaW1fYmlvc19yYW5nZSgpOwogI2lmZGVmIENPTkZJR19YODZfMzIKIAlpZiAocHByb193aXRoX3JhbV9idWcoKSkgewogCQllODIwX3VwZGF0ZV9yYW5nZSgweDcwMDAwMDAwVUxMLCAweDQwMDAwVUxMLCBFODIwX1JBTSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDY3OGQwYjguLjliNDQwMTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtMzIwLDYgKzMyMCw3IEBACiAJdW5sb2NrX3ZlY3Rvcl9sb2NrKCk7CiAJaXBpX2NhbGxfdW5sb2NrKCk7CiAJcGVyX2NwdShjcHVfc3RhdGUsIHNtcF9wcm9jZXNzb3JfaWQoKSkgPSBDUFVfT05MSU5FOworCXg4Nl9wbGF0Zm9ybS5ubWlfaW5pdCgpOwogCiAJLyogZW5hYmxlIGxvY2FsIGludGVycnVwdHMgKi8KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC0xMDgzLDkgKzEwODQsNyBAQAogCXNldF9jcHVfc2libGluZ19tYXAoMCk7CiAKIAllbmFibGVfSVJfeDJhcGljKCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAogCWRlZmF1bHRfc2V0dXBfYXBpY19yb3V0aW5nKCk7Ci0jZW5kaWYKIAogCWlmIChzbXBfc2FuaXR5X2NoZWNrKG1heF9jcHVzKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiU01QIGRpc2FibGVkXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggMzMzOTkxNy4uMTE2OGU0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTUzNCw2ICs1MzQsOSBAQAogCiAJZ2V0X2RlYnVncmVnKGRyNiwgNik7CiAKKwkvKiBGaWx0ZXIgb3V0IGFsbCB0aGUgcmVzZXJ2ZWQgYml0cyB3aGljaCBhcmUgcHJlc2V0IHRvIDEgKi8KKwlkcjYgJj0gfkRSNl9SRVNFUlZFRDsKKwogCS8qIENhdGNoIGttZW1jaGVjayBjb25kaXRpb25zIGZpcnN0IG9mIGFsbCEgKi8KIAlpZiAoKGRyNiAmIERSX1NURVApICYmIGttZW1jaGVja190cmFwKHJlZ3MpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKaW5kZXggNTk3NjgzYS4uMjA4YTg1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwpAQCAtNzQwLDcgKzc0MCw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgcmVzdW1lX3RzYyh2b2lkKQorc3RhdGljIHZvaWQgcmVzdW1lX3RzYyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewogCWNsb2Nrc291cmNlX3RzYy5jeWNsZV9sYXN0ID0gMDsKIH0KQEAgLTgwNiw3ICs4MDYsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmVzX2xvdywgcmVzX2hpZ2g7CiAKIAlyZG1zcl9zYWZlKE1TUl9HRU9ERV9CVVNDT05UX0NPTkYwLCAmcmVzX2xvdywgJnJlc19oaWdoKTsKLQkvKiBHZW9kZV9MWCAtIHRoZSBPTFBDIENQVSBoYXMgYSBwb3NzaWJseSBhIHZlcnkgcmVsaWFibGUgVFNDICovCisJLyogR2VvZGVfTFggLSB0aGUgT0xQQyBDUFUgaGFzIGEgdmVyeSByZWxpYWJsZSBUU0MgKi8KIAlpZiAocmVzX2xvdyAmIFJUU0NfU1VTUCkKIAkJdHNjX2Nsb2Nrc291cmNlX3JlbGlhYmxlID0gMTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3V2X3N5c2ZzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfc3lzZnMuYwppbmRleCAzNmFmYjk4Li4zMDljNzBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdXZfc3lzZnMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfc3lzZnMuYwpAQCAtNTQsMTkgKzU0LDE5IEBACiAJaWYgKCFzZ2lfdXZfa29iaikKIAkJc2dpX3V2X2tvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCJzZ2lfdXYiLCBmaXJtd2FyZV9rb2JqKTsKIAlpZiAoIXNnaV91dl9rb2JqKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImtvYmplY3RfY3JlYXRlX2FuZF9hZGQgc2dpX3V2IGZhaWxlZCBcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkIHNnaV91diBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShzZ2lfdXZfa29iaiwgJnBhcnRpdGlvbl9pZF9hdHRyLmF0dHIpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAic3lzZnNfY3JlYXRlX2ZpbGUgcGFydGl0aW9uX2lkIGZhaWxlZCBcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzeXNmc19jcmVhdGVfZmlsZSBwYXJ0aXRpb25faWQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShzZ2lfdXZfa29iaiwgJmNvaGVyZW5jZV9pZF9hdHRyLmF0dHIpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAic3lzZnNfY3JlYXRlX2ZpbGUgY29oZXJlbmNlX2lkIGZhaWxlZCBcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzeXNmc19jcmVhdGVfZmlsZSBjb2hlcmVuY2VfaWQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC91dl90aW1lLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfdGltZS5jCmluZGV4IDNjODRhYTAuLjJiNzVlZjYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdXZfdGltZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC91dl90aW1lLmMKQEAgLTI4MiwxMCArMjgyLDIxIEBACiAKIC8qCiAgKiBSZWFkIHRoZSBSVEMuCisgKgorICogU3RhcnRpbmcgd2l0aCBIVUIgcmV2IDIuMCwgdGhlIFVWIFJUQyByZWdpc3RlciBpcyByZXBsaWNhdGVkIGFjcm9zcyBhbGwKKyAqIGNhY2hlbGluZXMgb2YgaXQncyBvd24gcGFnZS4gIFRoaXMgYWxsb3dzIGZhc3RlciBzaW11bHRhbmVvdXMgcmVhZHMKKyAqIGZyb20gYSBnaXZlbiBzb2NrZXQuCiAgKi8KIHN0YXRpYyBjeWNsZV90IHV2X3JlYWRfcnRjKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7Ci0JcmV0dXJuIChjeWNsZV90KXV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SVEMpOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCisJaWYgKHV2X2dldF9taW5faHViX3JldmlzaW9uX2lkKCkgPT0gMSkKKwkJb2Zmc2V0ID0gMDsKKwllbHNlCisJCW9mZnNldCA9ICh1dl9ibGFkZV9wcm9jZXNzb3JfaWQoKSAqIEwxX0NBQ0hFX0JZVEVTKSAlIFBBR0VfU0laRTsKKworCXJldHVybiAoY3ljbGVfdCl1dl9yZWFkX2xvY2FsX21tcihVVkhfUlRDIHwgb2Zmc2V0KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC94ODY2NF9rc3ltc182NC5jIGIvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMKaW5kZXggNjE5ZjdmOC4uNjkzOTIwYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMKQEAgLTI2LDcgKzI2LDggQEAKIEVYUE9SVF9TWU1CT0woX19wdXRfdXNlcl80KTsKIEVYUE9SVF9TWU1CT0woX19wdXRfdXNlcl84KTsKIAotRVhQT1JUX1NZTUJPTChjb3B5X3VzZXJfZ2VuZXJpYyk7CitFWFBPUlRfU1lNQk9MKGNvcHlfdXNlcl9nZW5lcmljX3N0cmluZyk7CitFWFBPUlRfU1lNQk9MKGNvcHlfdXNlcl9nZW5lcmljX3Vucm9sbGVkKTsKIEVYUE9SVF9TWU1CT0woX19jb3B5X3VzZXJfbm9jYWNoZSk7CiBFWFBPUlRfU1lNQk9MKF9jb3B5X2Zyb21fdXNlcik7CiBFWFBPUlRfU1lNQk9MKF9jb3B5X3RvX3VzZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwppbmRleCBjY2QxNzlkLi5lZTU3NDZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwpAQCAtNzYsMTAgKzc2LDEzIEBACiAJLnNldHVwX3BlcmNwdV9jbG9ja2V2CQk9IHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrLAogfTsKIAorc3RhdGljIHZvaWQgZGVmYXVsdF9ubWlfaW5pdCh2b2lkKSB7IH07CisKIHN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIHg4Nl9wbGF0Zm9ybSA9IHsKIAkuY2FsaWJyYXRlX3RzYwkJCT0gbmF0aXZlX2NhbGlicmF0ZV90c2MsCiAJLmdldF93YWxsY2xvY2sJCQk9IG1hY2hfZ2V0X2Ntb3NfdGltZSwKIAkuc2V0X3dhbGxjbG9jawkJCT0gbWFjaF9zZXRfcnRjX21tc3MsCiAJLmlvbW11X3NodXRkb3duCQkJPSBpb21tdV9zaHV0ZG93bl9ub29wLAogCS5pc191bnRyYWNrZWRfcGF0X3JhbmdlCQk9IGlzX0lTQV9yYW5nZSwKKwkubm1pX2luaXQJCQk9IGRlZmF1bHRfbm1pX2luaXQKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYyBiL2FyY2gveDg2L2tlcm5lbC94c2F2ZS5jCmluZGV4IGM1ZWUxN2UuLjc4MmMzYTM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYwpAQCAtMzM3LDYgKzMzNyw3IEBACiAJY3B1aWRfY291bnQoMHhkLCAwLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKIAl4c3RhdGVfc2l6ZSA9IGVieDsKIAorCXVwZGF0ZV9yZWdzZXRfeHN0YXRlX2luZm8oeHN0YXRlX3NpemUsIHBjbnR4dF9tYXNrKTsKIAlwcmVwYXJlX2Z4X3N3X2ZyYW1lKCk7CiAKIAlzZXR1cF94c3RhdGVfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmMgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwppbmRleCAyOTZhYmE0Li4xNTU3OGYxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYworKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwpAQCAtNDY3LDYgKzQ2Nyw5IEBACiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWFkZHIgJj0gS1ZNX1BJVF9DSEFOTkVMX01BU0s7CisJaWYgKGFkZHIgPT0gMykKKwkJcmV0dXJuIDA7CisKIAlzID0gJnBpdF9zdGF0ZS0+Y2hhbm5lbHNbYWRkcl07CiAKIAltdXRleF9sb2NrKCZwaXRfc3RhdGUtPmxvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDFkZGNhZDQuLmExZTFiYzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTY3MCw3ICs2NzAsNyBAQAogewogCXN0YXRpYyBpbnQgdmVyc2lvbjsKIAlzdHJ1Y3QgcHZjbG9ja193YWxsX2Nsb2NrIHdjOwotCXN0cnVjdCB0aW1lc3BlYyBub3csIHN5cywgYm9vdDsKKwlzdHJ1Y3QgdGltZXNwZWMgYm9vdDsKIAogCWlmICghd2FsbF9jbG9jaykKIAkJcmV0dXJuOwpAQCAtNjg1LDkgKzY4NSw3IEBACiAJICogd2FsbCBjbG9jayBzcGVjaWZpZWQgaGVyZS4gIGd1ZXN0IHN5c3RlbSB0aW1lIGVxdWFscyBob3N0CiAJICogc3lzdGVtIHRpbWUgZm9yIHVzLCB0aHVzIHdlIG11c3QgZmlsbCBpbiBob3N0IGJvb3QgdGltZSBoZXJlLgogCSAqLwotCW5vdyA9IGN1cnJlbnRfa2VybmVsX3RpbWUoKTsKLQlrdGltZV9nZXRfdHMoJnN5cyk7Ci0JYm9vdCA9IG5zX3RvX3RpbWVzcGVjKHRpbWVzcGVjX3RvX25zKCZub3cpIC0gdGltZXNwZWNfdG9fbnMoJnN5cykpOworCWdldGJvb3R0aW1lKCZib290KTsKIAogCXdjLnNlYyA9IGJvb3QudHZfc2VjOwogCXdjLm5zZWMgPSBib290LnR2X25zZWM7CkBAIC03NjIsNiArNzYwLDcgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJa3ZtX2dldF9tc3IodiwgTVNSX0lBMzJfVFNDLCAmdmNwdS0+aHZfY2xvY2sudHNjX3RpbWVzdGFtcCk7CiAJa3RpbWVfZ2V0X3RzKCZ0cyk7CisJbW9ub3RvbmljX3RvX2Jvb3RiYXNlZCgmdHMpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCS8qIFdpdGggYWxsIHRoZSBpbmZvIHdlIGdvdCwgZmlsbCBpbiB0aGUgdmFsdWVzICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvTWFrZWZpbGUgYi9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKaW5kZXggY2ZmZDc1NGYuLjQxOTM4NmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKQEAgLTE0LDcgKzE0LDcgQEAKIAogY2xlYW4tZmlsZXMgOj0gaW5hdC10YWJsZXMuYwogCi1vYmotJChDT05GSUdfU01QKSArPSBtc3Itc21wLm8KK29iai0kKENPTkZJR19TTVApICs9IG1zci1zbXAubyBjYWNoZS1zbXAubwogCiBsaWIteSA6PSBkZWxheS5vCiBsaWIteSArPSB0aHVua18kKEJJVFMpLm8KQEAgLTM0LDkgKzM0LDEwIEBACiBlbmRpZgogICAgICAgICBsaWItJChDT05GSUdfWDg2X1VTRV8zRE5PVykgKz0gbW14XzMyLm8KIGVsc2UKLSAgICAgICAgb2JqLXkgKz0gaW9fNjQubyBpb21hcF9jb3B5XzY0Lm8KKyAgICAgICAgb2JqLXkgKz0gaW9tYXBfY29weV82NC5vCiAgICAgICAgIGxpYi15ICs9IGNzdW0tcGFydGlhbF82NC5vIGNzdW0tY29weV82NC5vIGNzdW0td3JhcHBlcnNfNjQubwogICAgICAgICBsaWIteSArPSB0aHVua182NC5vIGNsZWFyX3BhZ2VfNjQubyBjb3B5X3BhZ2VfNjQubwogICAgICAgICBsaWIteSArPSBtZW1tb3ZlXzY0Lm8gbWVtc2V0XzY0Lm8KICAgICAgICAgbGliLXkgKz0gY29weV91c2VyXzY0Lm8gcndsb2NrXzY0Lm8gY29weV91c2VyX25vY2FjaGVfNjQubworCWxpYi0kKENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSkgKz0gcndzZW1fNjQubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9jYWNoZS1zbXAuYyBiL2FyY2gveDg2L2xpYi9jYWNoZS1zbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2M2Njg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbGliL2NhY2hlLXNtcC5jCkBAIC0wLDAgKzEsMTkgQEAKKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworc3RhdGljIHZvaWQgX193YmludmQodm9pZCAqZHVtbXkpCit7CisJd2JpbnZkKCk7Cit9CisKK3ZvaWQgd2JpbnZkX29uX2NwdShpbnQgY3B1KQoreworCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fd2JpbnZkLCBOVUxMLCAxKTsKK30KK0VYUE9SVF9TWU1CT0wod2JpbnZkX29uX2NwdSk7CisKK2ludCB3YmludmRfb25fYWxsX2NwdXModm9pZCkKK3sKKwlyZXR1cm4gb25fZWFjaF9jcHUoX193YmludmQsIE5VTEwsIDEpOworfQorRVhQT1JUX1NZTUJPTCh3YmludmRfb25fYWxsX2NwdXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2NvcHlfdXNlcl82NC5TIGIvYXJjaC94ODYvbGliL2NvcHlfdXNlcl82NC5TCmluZGV4IGNmODg5ZDQuLjcxMTAwYzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUworKysgYi9hcmNoL3g4Ni9saWIvY29weV91c2VyXzY0LlMKQEAgLTkwLDEyICs5MCw2IEBACiAJQ0ZJX0VORFBST0MKIEVORFBST0MoX2NvcHlfZnJvbV91c2VyKQogCi1FTlRSWShjb3B5X3VzZXJfZ2VuZXJpYykKLQlDRklfU1RBUlRQUk9DCi0JQUxURVJOQVRJVkVfSlVNUCBYODZfRkVBVFVSRV9SRVBfR09PRCxjb3B5X3VzZXJfZ2VuZXJpY191bnJvbGxlZCxjb3B5X3VzZXJfZ2VuZXJpY19zdHJpbmcKLQlDRklfRU5EUFJPQwotRU5EUFJPQyhjb3B5X3VzZXJfZ2VuZXJpYykKLQogCS5zZWN0aW9uIC5maXh1cCwiYXgiCiAJLyogbXVzdCB6ZXJvIGRlc3QgKi8KIEVOVFJZKGJhZF9mcm9tX3VzZXIpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvaW9fNjQuYyBiL2FyY2gveDg2L2xpYi9pb182NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjFlYjU5Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2xpYi9pb182NC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi12b2lkIF9fbWVtY3B5X3RvaW8odW5zaWduZWQgbG9uZyBkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbGVuKQotewotCV9faW5saW5lX21lbWNweSgodm9pZCAqKWRzdCwgc3JjLCBsZW4pOwotfQotRVhQT1JUX1NZTUJPTChfX21lbWNweV90b2lvKTsKLQotdm9pZCBfX21lbWNweV9mcm9taW8odm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIHNyYywgdW5zaWduZWQgbGVuKQotewotCV9faW5saW5lX21lbWNweShkc3QsIChjb25zdCB2b2lkICopc3JjLCBsZW4pOwotfQotRVhQT1JUX1NZTUJPTChfX21lbWNweV9mcm9taW8pOwotCi12b2lkIG1lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmEsIGludCBiLCBzaXplX3QgYykKLXsKLQkvKgotCSAqIFRPRE86IG1lbXNldCBjYW4gbWFuZ2xlIHRoZSBJTyBwYXR0ZXJucyBxdWl0ZSBhIGJpdC4KLQkgKiBwZXJoYXBzIGl0IHdvdWxkIGJlIGJldHRlciB0byB1c2UgYSBkdW1iIG9uZToKLQkgKi8KLQltZW1zZXQoKHZvaWQgKilhLCBiLCBjKTsKLX0KLUVYUE9SVF9TWU1CT0wobWVtc2V0X2lvKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUyBiL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUwppbmRleCBhZDU0NDFlLi5mODJlODg0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKKysrIGIvYXJjaC94ODYvbGliL21lbWNweV82NC5TCkBAIC0yMCwxMiArMjAsMTEgQEAKIC8qCiAgKiBtZW1jcHlfYygpIC0gZmFzdCBzdHJpbmcgb3BzIChSRVAgTU9WU1EpIGJhc2VkIHZhcmlhbnQuCiAgKgotICogQ2FsbHMgdG8gdGhpcyBnZXQgcGF0Y2hlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UgdmlhIHRoZQorICogVGhpcyBnZXRzIHBhdGNoZWQgb3ZlciB0aGUgdW5yb2xsZWQgdmFyaWFudCAoYmVsb3cpIHZpYSB0aGUKICAqIGFsdGVybmF0aXZlIGluc3RydWN0aW9ucyBmcmFtZXdvcms6CiAgKi8KLQlBTElHTgotbWVtY3B5X2M6Ci0JQ0ZJX1NUQVJUUFJPQworCS5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgImF4IiwgQHByb2diaXRzCisuTG1lbWNweV9jOgogCW1vdnEgJXJkaSwgJXJheAogCiAJbW92bCAlZWR4LCAlZWN4CkBAIC0zNSw4ICszNCw4IEBACiAJbW92bCAlZWR4LCAlZWN4CiAJcmVwIG1vdnNiCiAJcmV0Ci0JQ0ZJX0VORFBST0MKLUVORFBST0MobWVtY3B5X2MpCisuTG1lbWNweV9lOgorCS5wcmV2aW91cwogCiBFTlRSWShfX21lbWNweSkKIEVOVFJZKG1lbWNweSkKQEAgLTEyOCwxNiArMTI3LDEwIEBACiAJICogSXQgaXMgYWxzbyBhIGxvdCBzaW1wbGVyLiBVc2UgdGhpcyB3aGVuIHBvc3NpYmxlOgogCSAqLwogCi0JLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCAiYXgiCi0xOgkuYnl0ZSAweGViCQkJCS8qIGptcCA8ZGlzcDg+ICovCi0JLmJ5dGUgKG1lbWNweV9jIC0gbWVtY3B5KSAtICgyZiAtIDFiKQkvKiBvZmZzZXQgKi8KLTI6Ci0JLnByZXZpb3VzCi0KIAkuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLCAiYSIKIAkuYWxpZ24gOAogCS5xdWFkIG1lbWNweQotCS5xdWFkIDFiCisJLnF1YWQgLkxtZW1jcHlfYwogCS5ieXRlIFg4Nl9GRUFUVVJFX1JFUF9HT09ECiAKIAkvKgpAQCAtMTQ1LDYgKzEzOCw2IEBACiAJICogc28gaXQgaXMgc2lsbHkgdG8gb3ZlcndyaXRlIGl0c2VsZiB3aXRoIG5vcHMgLSByZWJvb3QgaXMgdGhlCiAJICogb25seSBvdXRjb21lLi4uCiAJICovCi0JLmJ5dGUgMmIgLSAxYgotCS5ieXRlIDJiIC0gMWIKKwkuYnl0ZSAuTG1lbWNweV9lIC0gLkxtZW1jcHlfYworCS5ieXRlIC5MbWVtY3B5X2UgLSAuTG1lbWNweV9jCiAJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvbWVtc2V0XzY0LlMgYi9hcmNoL3g4Ni9saWIvbWVtc2V0XzY0LlMKaW5kZXggMmM1OTQ4MS4uZTg4ZDNiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL21lbXNldF82NC5TCisrKyBiL2FyY2gveDg2L2xpYi9tZW1zZXRfNjQuUwpAQCAtMTIsOSArMTIsOCBAQAogICogCiAgKiByYXggICBvcmlnaW5hbCBkZXN0aW5hdGlvbgogICovCQotCUFMSUdOCi1tZW1zZXRfYzoKLQlDRklfU1RBUlRQUk9DCisJLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCAiYXgiLCBAcHJvZ2JpdHMKKy5MbWVtc2V0X2M6CiAJbW92cSAlcmRpLCVyOQogCW1vdmwgJWVkeCwlcjhkCiAJYW5kbCAkNywlcjhkCkBAIC0yOSw4ICsyOCw4IEBACiAJcmVwIHN0b3NiCiAJbW92cSAlcjksJXJheAogCXJldAotCUNGSV9FTkRQUk9DCi1FTkRQUk9DKG1lbXNldF9jKQorLkxtZW1zZXRfZToKKwkucHJldmlvdXMKIAogRU5UUlkobWVtc2V0KQogRU5UUlkoX19tZW1zZXQpCkBAIC0xMTgsMTYgKzExNywxMSBAQAogCiAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KIAotCS5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwiYXgiCi0xOgkuYnl0ZSAweGViCQkJCS8qIGptcCA8ZGlzcDg+ICovCi0JLmJ5dGUgKG1lbXNldF9jIC0gbWVtc2V0KSAtICgyZiAtIDFiKQkvKiBvZmZzZXQgKi8KLTI6Ci0JLnByZXZpb3VzCiAJLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucywiYSIKIAkuYWxpZ24gOAogCS5xdWFkIG1lbXNldAotCS5xdWFkIDFiCisJLnF1YWQgLkxtZW1zZXRfYwogCS5ieXRlIFg4Nl9GRUFUVVJFX1JFUF9HT09ECiAJLmJ5dGUgLkxmaW5hbCAtIG1lbXNldAotCS5ieXRlIDJiIC0gMWIKKwkuYnl0ZSAuTG1lbXNldF9lIC0gLkxtZW1zZXRfYwogCS5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL3J3c2VtXzY0LlMgYi9hcmNoL3g4Ni9saWIvcndzZW1fNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWFjZWNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbGliL3J3c2VtXzY0LlMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIHg4Ni02NCByd3NlbSB3cmFwcGVycworICoKKyAqIFRoaXMgaW50ZXJmYWNlcyB0aGUgaW5saW5lIGFzbSBjb2RlIHRvIHRoZSBzbG93LXBhdGgKKyAqIEMgcm91dGluZXMuIFdlIG5lZWQgdG8gc2F2ZSB0aGUgY2FsbC1jbG9iYmVyZWQgcmVncworICogdGhhdCB0aGUgYXNtIGRvZXMgbm90IG1hcmsgYXMgY2xvYmJlcmVkLCBhbmQgbW92ZSB0aGUKKyAqIGFyZ3VtZW50IGZyb20gJXJheCB0byAlcmRpLgorICoKKyAqIE5PVEUhIFdlIGRvbid0IG5lZWQgdG8gc2F2ZSAlcmF4LCBiZWNhdXNlIHRoZSBmdW5jdGlvbnMKKyAqIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgc2VtYXBob3JlIHBvaW50ZXIgaW4gJXJheCAod2hpY2gKKyAqIGlzIGFsc28gdGhlIGlucHV0IGFyZ3VtZW50IHRvIHRoZXNlIGhlbHBlcnMpCisgKgorICogVGhlIGZvbGxvd2luZyBjYW4gY2xvYmJlciAlcmR4IGJlY2F1c2UgdGhlIGFzbSBjbG9iYmVycyBpdDoKKyAqICAgY2FsbF9yd3NlbV9kb3duX3dyaXRlX2ZhaWxlZAorICogICBjYWxsX3J3c2VtX3dha2UKKyAqIGJ1dCAlcmRpLCAlcnNpLCAlcmN4LCAlcjgtcjExIGFsd2F5cyBuZWVkIHNhdmluZy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9yd2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUtYXNtLmg+CisjaW5jbHVkZSA8YXNtL2ZyYW1lLmg+CisjaW5jbHVkZSA8YXNtL2R3YXJmMi5oPgorCisjZGVmaW5lIHNhdmVfY29tbW9uX3JlZ3MgXAorCXB1c2hxICVyZGk7IFwKKwlwdXNocSAlcnNpOyBcCisJcHVzaHEgJXJjeDsgXAorCXB1c2hxICVyODsgXAorCXB1c2hxICVyOTsgXAorCXB1c2hxICVyMTA7IFwKKwlwdXNocSAlcjExCisKKyNkZWZpbmUgcmVzdG9yZV9jb21tb25fcmVncyBcCisJcG9wcSAlcjExOyBcCisJcG9wcSAlcjEwOyBcCisJcG9wcSAlcjk7IFwKKwlwb3BxICVyODsgXAorCXBvcHEgJXJjeDsgXAorCXBvcHEgJXJzaTsgXAorCXBvcHEgJXJkaQorCisvKiBGaXggdXAgc3BlY2lhbCBjYWxsaW5nIGNvbnZlbnRpb25zICovCitFTlRSWShjYWxsX3J3c2VtX2Rvd25fcmVhZF9mYWlsZWQpCisJc2F2ZV9jb21tb25fcmVncworCXB1c2hxICVyZHgKKwltb3ZxICVyYXgsJXJkaQorCWNhbGwgcndzZW1fZG93bl9yZWFkX2ZhaWxlZAorCXBvcHEgJXJkeAorCXJlc3RvcmVfY29tbW9uX3JlZ3MKKwlyZXQKKwlFTkRQUk9DKGNhbGxfcndzZW1fZG93bl9yZWFkX2ZhaWxlZCkKKworRU5UUlkoY2FsbF9yd3NlbV9kb3duX3dyaXRlX2ZhaWxlZCkKKwlzYXZlX2NvbW1vbl9yZWdzCisJbW92cSAlcmF4LCVyZGkKKwljYWxsIHJ3c2VtX2Rvd25fd3JpdGVfZmFpbGVkCisJcmVzdG9yZV9jb21tb25fcmVncworCXJldAorCUVORFBST0MoY2FsbF9yd3NlbV9kb3duX3dyaXRlX2ZhaWxlZCkKKworRU5UUlkoY2FsbF9yd3NlbV93YWtlKQorCWRlY3cgJWR4ICAgIC8qIGRvIG5vdGhpbmcgaWYgc3RpbGwgb3V0c3RhbmRpbmcgYWN0aXZlIHJlYWRlcnMgKi8KKwlqbnogMWYKKwlzYXZlX2NvbW1vbl9yZWdzCisJbW92cSAlcmF4LCVyZGkKKwljYWxsIHJ3c2VtX3dha2UKKwlyZXN0b3JlX2NvbW1vbl9yZWdzCisxOglyZXQKKwlFTkRQUk9DKGNhbGxfcndzZW1fd2FrZSkKKworLyogRml4IHVwIHNwZWNpYWwgY2FsbGluZyBjb252ZW50aW9ucyAqLworRU5UUlkoY2FsbF9yd3NlbV9kb3duZ3JhZGVfd2FrZSkKKwlzYXZlX2NvbW1vbl9yZWdzCisJcHVzaHEgJXJkeAorCW1vdnEgJXJheCwlcmRpCisJY2FsbCByd3NlbV9kb3duZ3JhZGVfd2FrZQorCXBvcHEgJXJkeAorCXJlc3RvcmVfY29tbW9uX3JlZ3MKKwlyZXQKKwlFTkRQUk9DKGNhbGxfcndzZW1fZG93bmdyYWRlX3dha2UpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9ndXAuYyBiL2FyY2gveDg2L21tL2d1cC5jCmluZGV4IDcxZGExYmMuLjczOGU2NTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2d1cC5jCisrKyBiL2FyY2gveDg2L21tL2d1cC5jCkBAIC0xOCw3ICsxOCw3IEBACiAjZWxzZQogCS8qCiAJICogV2l0aCBnZXRfdXNlcl9wYWdlc19mYXN0LCB3ZSB3YWxrIGRvd24gdGhlIHBhZ2V0YWJsZXMgd2l0aG91dCB0YWtpbmcKLQkgKiBhbnkgbG9ja3MuICBGb3IgdGhpcyB3ZSB3b3VsZCBsaWtlIHRvIGxvYWQgdGhlIHBvaW50ZXJzIGF0b2ltY2FsbHksCisJICogYW55IGxvY2tzLiAgRm9yIHRoaXMgd2Ugd291bGQgbGlrZSB0byBsb2FkIHRoZSBwb2ludGVycyBhdG9taWNhbGx5LAogCSAqIGJ1dCB0aGF0IGlzIG5vdCBwb3NzaWJsZSAod2l0aG91dCBleHBlbnNpdmUgY21weGNoZzhiKSBvbiBQQUUuICBXaGF0CiAJICogd2UgZG8gaGF2ZSBpcyB0aGUgZ3VhcmFudGVlIHRoYXQgYSBwdGUgd2lsbCBvbmx5IGVpdGhlciBnbyBmcm9tIG5vdAogCSAqIHByZXNlbnQgdG8gcHJlc2VudCwgb3IgcHJlc2VudCB0byBub3QgcHJlc2VudCBvciBib3RoIC0tIGl0IHdpbGwgbm90CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0LmMgYi9hcmNoL3g4Ni9tbS9pbml0LmMKaW5kZXggZDQwNmM1Mi4uZTcxYzVjYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdC5jCisrKyBiL2FyY2gveDg2L21tL2luaXQuYwpAQCAtMjY2LDE2ICsyNjYsOSBAQAogCWlmICghYWZ0ZXJfYm9vdG1lbSkKIAkJZmluZF9lYXJseV90YWJsZV9zcGFjZShlbmQsIHVzZV9wc2UsIHVzZV9nYnBhZ2VzKTsKIAotI2lmZGVmIENPTkZJR19YODZfMzIKLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKLQkJa2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdChtcltpXS5zdGFydCwgbXJbaV0uZW5kLAotCQkJCQkgICAgIG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrKTsKLQlyZXQgPSBlbmQ7Ci0jZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCiAJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCiAJCXJldCA9IGtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQobXJbaV0uc3RhcnQsIG1yW2ldLmVuZCwKIAkJCQkJCSAgIG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrKTsKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWVhcmx5X2lvcmVtYXBfcGFnZV90YWJsZV9yYW5nZV9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKaW5kZXggOWEwYzI1OC4uMjIyNmYyYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwpAQCAtMjQxLDYgKzI0MSw3IEBACiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2spCiB7CiAJaW50IHVzZV9wc2UgPSBwYWdlX3NpemVfbWFzayA9PSAoMTw8UEdfTEVWRUxfMk0pOworCXVuc2lnbmVkIGxvbmcgbGFzdF9tYXBfYWRkciA9IGVuZDsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKIAlwZ2RfdCAqcGdkX2Jhc2UgPSBzd2FwcGVyX3BnX2RpcjsKIAlpbnQgcGdkX2lkeCwgcG1kX2lkeCwgcHRlX29mczsKQEAgLTM0MSw5ICszNDIsMTAgQEAKIAkJCQkJcHJvdCA9IFBBR0VfS0VSTkVMX0VYRUM7CiAKIAkJCQlwYWdlc180aysrOwotCQkJCWlmIChtYXBwaW5nX2l0ZXIgPT0gMSkKKwkJCQlpZiAobWFwcGluZ19pdGVyID09IDEpIHsKIAkJCQkJc2V0X3B0ZShwdGUsIHBmbl9wdGUocGZuLCBpbml0X3Byb3QpKTsKLQkJCQllbHNlCisJCQkJCWxhc3RfbWFwX2FkZHIgPSAocGZuIDw8IFBBR0VfU0hJRlQpICsgUEFHRV9TSVpFOworCQkJCX0gZWxzZQogCQkJCQlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTsKIAkJCX0KIAkJfQpAQCAtMzY4LDcgKzM3MCw3IEBACiAJCW1hcHBpbmdfaXRlciA9IDI7CiAJCWdvdG8gcmVwZWF0OwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gbGFzdF9tYXBfYWRkcjsKIH0KIAogcHRlX3QgKmttYXBfcHRlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdF82NC5jIGIvYXJjaC94ODYvbW0vaW5pdF82NC5jCmluZGV4IDUxOThiOWIuLjY5ZGRmYmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDxhc20vbnVtYS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRtYV9yZXNlcnZlIF9faW5pdGRhdGE7CiAKQEAgLTYxNiw2ICs2MTcsMjEgQEAKICAqLwogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwogLyoKKyAqIEFmdGVyIG1lbW9yeSBob3RwbHVnIHRoZSB2YXJpYWJsZXMgbWF4X3BmbiwgbWF4X2xvd19wZm4gYW5kIGhpZ2hfbWVtb3J5IG5lZWQKKyAqIHVwZGF0aW5nLgorICovCitzdGF0aWMgdm9pZCAgdXBkYXRlX2VuZF9vZl9tZW1vcnlfdmFycyh1NjQgc3RhcnQsIHU2NCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgZW5kX3BmbiA9IFBGTl9VUChzdGFydCArIHNpemUpOworCisJaWYgKGVuZF9wZm4gPiBtYXhfcGZuKSB7CisJCW1heF9wZm4gPSBlbmRfcGZuOworCQltYXhfbG93X3BmbiA9IGVuZF9wZm47CisJCWhpZ2hfbWVtb3J5ID0gKHZvaWQgKilfX3ZhKG1heF9wZm4gKiBQQUdFX1NJWkUgLSAxKSArIDE7CisJfQorfQorCisvKgogICogTWVtb3J5IGlzIGFkZGVkIGFsd2F5cyB0byBOT1JNQUwgem9uZS4gVGhpcyBtZWFucyB5b3Ugd2lsbCBuZXZlciBnZXQKICAqIGFkZGl0aW9uYWwgRE1BL0RNQTMyIG1lbW9yeS4KICAqLwpAQCAtNjM0LDYgKzY1MCw5IEBACiAJcmV0ID0gX19hZGRfcGFnZXMobmlkLCB6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTsKIAlXQVJOX09OX09OQ0UocmV0KTsKIAorCS8qIHVwZGF0ZSBtYXhfcGZuLCBtYXhfbG93X3BmbiBhbmQgaGlnaF9tZW1vcnkgKi8KKwl1cGRhdGVfZW5kX29mX21lbW9yeV92YXJzKHN0YXJ0LCBzaXplKTsKKwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhcmNoX2FkZF9tZW1vcnkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCmluZGV4IGMyNDZkMjUuLjVlYjFiYTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2lvcmVtYXAuYworKysgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKQEAgLTI0LDQzICsyNCw2IEBACiAKICNpbmNsdWRlICJwaHlzYWRkci5oIgogCi1pbnQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwYWdlbnIpCi17Ci0JcmVzb3VyY2Vfc2l6ZV90IGFkZHIsIGVuZDsKLQlpbnQgaTsKLQotCS8qCi0JICogQSBzcGVjaWFsIGNhc2UgaXMgdGhlIGZpcnN0IDRLYiBvZiBtZW1vcnk7Ci0JICogVGhpcyBpcyBhIEJJT1Mgb3duZWQgYXJlYSwgbm90IGtlcm5lbCByYW0sIGJ1dCBnZW5lcmFsbHkKLQkgKiBub3QgbGlzdGVkIGFzIHN1Y2ggaW4gdGhlIEU4MjAgdGFibGUuCi0JICovCi0JaWYgKHBhZ2VuciA9PSAwKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogU2Vjb25kIHNwZWNpYWwgY2FzZTogU29tZSBCSU9TZW4gcmVwb3J0IHRoZSBQQyBCSU9TCi0JICogYXJlYSAoNjQwLT4xTWIpIGFzIHJhbSBldmVuIHRob3VnaCBpdCBpcyBub3QuCi0JICovCi0JaWYgKHBhZ2VuciA+PSAoQklPU19CRUdJTiA+PiBQQUdFX1NISUZUKSAmJgotCQkgICAgcGFnZW5yIDwgKEJJT1NfRU5EID4+IFBBR0VfU0hJRlQpKQotCQlyZXR1cm4gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7Ci0JCS8qCi0JCSAqIE5vdCB1c2FibGUgbWVtb3J5OgotCQkgKi8KLQkJaWYgKGU4MjAubWFwW2ldLnR5cGUgIT0gRTgyMF9SQU0pCi0JCQljb250aW51ZTsKLQkJYWRkciA9IChlODIwLm1hcFtpXS5hZGRyICsgUEFHRV9TSVpFLTEpID4+IFBBR0VfU0hJRlQ7Ci0JCWVuZCA9IChlODIwLm1hcFtpXS5hZGRyICsgZTgyMC5tYXBbaV0uc2l6ZSkgPj4gUEFHRV9TSElGVDsKLQotCi0JCWlmICgocGFnZW5yID49IGFkZHIpICYmIChwYWdlbnIgPCBlbmQpKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKgogICogRml4IHVwIHRoZSBsaW5lYXIgZGlyZWN0IG1hcHBpbmcgb2YgdGhlIGtlcm5lbCB0byBhdm9pZCBjYWNoZSBhdHRyaWJ1dGUKICAqIGNvbmZsaWN0cy4KQEAgLTQyMiw2ICszODUsMTAgQEAKIAkgKiBUaGUgYm9vdC1pb3JlbWFwIHJhbmdlIHNwYW5zIG11bHRpcGxlIHBtZHMsIGZvciB3aGljaAogCSAqIHdlIGFyZSBub3QgcHJlcGFyZWQ6CiAJICovCisjZGVmaW5lIF9fRklYQUREUl9UT1AgKC1QQUdFX1NJWkUpCisJQlVJTERfQlVHX09OKChfX2ZpeF90b192aXJ0KEZJWF9CVE1BUF9CRUdJTikgPj4gUE1EX1NISUZUKQorCQkgICAgICE9IChfX2ZpeF90b192aXJ0KEZJWF9CVE1BUF9FTkQpID4+IFBNRF9TSElGVCkpOworI3VuZGVmIF9fRklYQUREUl9UT1AKIAlpZiAocG1kICE9IGVhcmx5X2lvcmVtYXBfcG1kKGZpeF90b192aXJ0KEZJWF9CVE1BUF9FTkQpKSkgewogCQlXQVJOX09OKDEpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbWQgJXAgIT0gJXBcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2sva21lbWNoZWNrLmMgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2sva21lbWNoZWNrLmMKaW5kZXggOGNjMTgzMy4uYjNiNTMxYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0va21lbWNoZWNrL2ttZW1jaGVjay5jCisrKyBiL2FyY2gveDg2L21tL2ttZW1jaGVjay9rbWVtY2hlY2suYwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJaWYgKCFzaGFkb3cpCiAJCXJldHVybiB0cnVlOwogCi0Jc3RhdHVzID0ga21lbWNoZWNrX3NoYWRvd190ZXN0KHNoYWRvdywgc2l6ZSk7CisJc3RhdHVzID0ga21lbWNoZWNrX3NoYWRvd190ZXN0X2FsbChzaGFkb3csIHNpemUpOwogCiAJcmV0dXJuIHN0YXR1cyA9PSBLTUVNQ0hFQ0tfU0hBRE9XX0lOSVRJQUxJWkVEOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5jIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5jCmluZGV4IDNmNjZiODIuLmFlYzEyNDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuYworKysgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmMKQEAgLTEyNSwxMiArMTI1LDEyIEBACiAKIGVudW0ga21lbWNoZWNrX3NoYWRvdyBrbWVtY2hlY2tfc2hhZG93X3Rlc3Qodm9pZCAqc2hhZG93LCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKKyNpZmRlZiBDT05GSUdfS01FTUNIRUNLX1BBUlRJQUxfT0sKIAl1aW50OF90ICp4OwogCXVuc2lnbmVkIGludCBpOwogCiAJeCA9IHNoYWRvdzsKIAotI2lmZGVmIENPTkZJR19LTUVNQ0hFQ0tfUEFSVElBTF9PSwogCS8qCiAJICogTWFrZSBzdXJlIF9zb21lXyBieXRlcyBhcmUgaW5pdGlhbGl6ZWQuIEdjYyBmcmVxdWVudGx5IGdlbmVyYXRlcwogCSAqIGNvZGUgdG8gYWNjZXNzIG5laWdoYm9yaW5nIGJ5dGVzLgpAQCAtMTM5LDEzICsxMzksMjUgQEAKIAkJaWYgKHhbaV0gPT0gS01FTUNIRUNLX1NIQURPV19JTklUSUFMSVpFRCkKIAkJCXJldHVybiB4W2ldOwogCX0KKworCXJldHVybiB4WzBdOwogI2Vsc2UKKwlyZXR1cm4ga21lbWNoZWNrX3NoYWRvd190ZXN0X2FsbChzaGFkb3csIHNpemUpOworI2VuZGlmCit9CisKK2VudW0ga21lbWNoZWNrX3NoYWRvdyBrbWVtY2hlY2tfc2hhZG93X3Rlc3RfYWxsKHZvaWQgKnNoYWRvdywgdW5zaWduZWQgaW50IHNpemUpCit7CisJdWludDhfdCAqeDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXggPSBzaGFkb3c7CisKIAkvKiBBbGwgYnl0ZXMgbXVzdCBiZSBpbml0aWFsaXplZC4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAJCWlmICh4W2ldICE9IEtNRU1DSEVDS19TSEFET1dfSU5JVElBTElaRUQpCiAJCQlyZXR1cm4geFtpXTsKIAl9Ci0jZW5kaWYKIAogCXJldHVybiB4WzBdOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5oIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5oCmluZGV4IGFmNDZkOWEuLmZmMGIyZjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuaAorKysgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmgKQEAgLTExLDYgKzExLDggQEAKIHZvaWQgKmttZW1jaGVja19zaGFkb3dfbG9va3VwKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiAKIGVudW0ga21lbWNoZWNrX3NoYWRvdyBrbWVtY2hlY2tfc2hhZG93X3Rlc3Qodm9pZCAqc2hhZG93LCB1bnNpZ25lZCBpbnQgc2l6ZSk7CitlbnVtIGttZW1jaGVja19zaGFkb3cga21lbWNoZWNrX3NoYWRvd190ZXN0X2FsbCh2b2lkICpzaGFkb3csCisJCQkJCQl1bnNpZ25lZCBpbnQgc2l6ZSk7CiB2b2lkIGttZW1jaGVja19zaGFkb3dfc2V0KHZvaWQgKnNoYWRvdywgdW5zaWduZWQgaW50IHNpemUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL21tYXAuYyBiL2FyY2gveDg2L21tL21tYXAuYwppbmRleCBjODE5MWRlLi4xZGFiNTE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9tbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vbW1hcC5jCkBAIC03MSw3ICs3MSw3IEBACiAJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgQUREUl9DT01QQVRfTEFZT1VUKQogCQlyZXR1cm4gMTsKIAotCWlmIChjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX1NUQUNLXS5ybGltX2N1ciA9PSBSTElNX0lORklOSVRZKQorCWlmIChybGltaXQoUkxJTUlUX1NUQUNLKSA9PSBSTElNX0lORklOSVRZKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiBzeXNjdGxfbGVnYWN5X3ZhX2xheW91dDsKQEAgLTk2LDcgKzk2LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW1hcF9iYXNlKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBnYXAgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX1NUQUNLXS5ybGltX2N1cjsKKwl1bnNpZ25lZCBsb25nIGdhcCA9IHJsaW1pdChSTElNSVRfU1RBQ0spOwogCiAJaWYgKGdhcCA8IE1JTl9HQVApCiAJCWdhcCA9IE1JTl9HQVA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hXzY0LmMgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKaW5kZXggODNiYmM3MC4uMzMwN2VhOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbnVtYV82NC5jCisrKyBiL2FyY2gveDg2L21tL251bWFfNjQuYwpAQCAtNDI3LDcgKzQyNyw3IEBACiAJICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgYmlnIG5vZGVzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZCBhcyBhIHJlc3VsdAogCSAqIG9mIGNvbnNvbGlkYXRpbmcgdGhlIHJlbWFpbmRlci4KIAkgKi8KLQliaWcgPSAoKHNpemUgJiB+RkFLRV9OT0RFX01JTl9IQVNIX01BU0spICYgbnJfbm9kZXMpIC8KKwliaWcgPSAoKHNpemUgJiB+RkFLRV9OT0RFX01JTl9IQVNIX01BU0spICogbnJfbm9kZXMpIC8KIAkJRkFLRV9OT0RFX01JTl9TSVpFOwogCiAJc2l6ZSAmPSBGQUtFX05PREVfTUlOX0hBU0hfTUFTSzsKQEAgLTUwMiw3NyArNTAyLDk5IEBACiB9CiAKIC8qCi0gKiBTcGxpdHMgbnVtX25vZGVzIG5vZGVzIHVwIGVxdWFsbHkgc3RhcnRpbmcgYXQgbm9kZV9zdGFydC4gIFRoZSByZXR1cm4gdmFsdWUKLSAqIGlzIHRoZSBudW1iZXIgb2Ygbm9kZXMgc3BsaXQgdXAgYW5kIGFkZHIgaXMgYWRqdXN0ZWQgdG8gYmUgYXQgdGhlIGVuZCBvZiB0aGUKLSAqIGxhc3Qgbm9kZSBhbGxvY2F0ZWQuCisgKiBSZXR1cm5zIHRoZSBlbmQgYWRkcmVzcyBvZiBhIG5vZGUgc28gdGhhdCB0aGVyZSBpcyBhdCBsZWFzdCBgc2l6ZScgYW1vdW50IG9mCisgKiBub24tcmVzZXJ2ZWQgbWVtb3J5IG9yIGBtYXhfYWRkcicgaXMgcmVhY2hlZC4KICAqLwotc3RhdGljIGludCBfX2luaXQgc3BsaXRfbm9kZXNfZXF1YWxseSh1NjQgKmFkZHIsIHU2NCBtYXhfYWRkciwgaW50IG5vZGVfc3RhcnQsCi0JCQkJICAgICAgaW50IG51bV9ub2RlcykKK3N0YXRpYyB1NjQgX19pbml0IGZpbmRfZW5kX29mX25vZGUodTY0IHN0YXJ0LCB1NjQgbWF4X2FkZHIsIHU2NCBzaXplKQogewotCXVuc2lnbmVkIGludCBiaWc7Ci0JdTY0IHNpemU7Ci0JaW50IGk7CisJdTY0IGVuZCA9IHN0YXJ0ICsgc2l6ZTsKIAotCWlmIChudW1fbm9kZXMgPD0gMCkKLQkJcmV0dXJuIC0xOwotCWlmIChudW1fbm9kZXMgPiBNQVhfTlVNTk9ERVMpCi0JCW51bV9ub2RlcyA9IE1BWF9OVU1OT0RFUzsKLQlzaXplID0gKG1heF9hZGRyIC0gKmFkZHIgLSBlODIwX2hvbGVfc2l6ZSgqYWRkciwgbWF4X2FkZHIpKSAvCi0JICAgICAgIG51bV9ub2RlczsKLQkvKgotCSAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJpZyBub2RlcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgYXMgYSByZXN1bHQKLQkgKiBvZiBjb25zb2xpZGF0aW5nIHRoZSBsZWZ0b3ZlcnMuCi0JICovCi0JYmlnID0gKChzaXplICYgfkZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLKSAqIG51bV9ub2RlcykgLwotCSAgICAgIEZBS0VfTk9ERV9NSU5fU0laRTsKLQotCS8qIFJvdW5kIGRvd24gdG8gbmVhcmVzdCBGQUtFX05PREVfTUlOX1NJWkUuICovCi0Jc2l6ZSAmPSBGQUtFX05PREVfTUlOX0hBU0hfTUFTSzsKLQlpZiAoIXNpemUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgZWFjaCBub2RlLiAgIgotCQkgICAgICAgIk5VTUEgZW11bGF0aW9uIGRpc2FibGVkLlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlmb3IgKGkgPSBub2RlX3N0YXJ0OyBpIDwgbnVtX25vZGVzICsgbm9kZV9zdGFydDsgaSsrKSB7Ci0JCXU2NCBlbmQgPSAqYWRkciArIHNpemU7Ci0KLQkJaWYgKGkgPCBiaWcpCi0JCQllbmQgKz0gRkFLRV9OT0RFX01JTl9TSVpFOwotCQkvKgotCQkgKiBUaGUgZmluYWwgbm9kZSBjYW4gaGF2ZSB0aGUgcmVtYWluaW5nIHN5c3RlbSBSQU0uICBPdGhlcgotCQkgKiBub2RlcyByZWNlaXZlIHJvdWdobHkgdGhlIHNhbWUgYW1vdW50IG9mIGF2YWlsYWJsZSBwYWdlcy4KLQkJICovCi0JCWlmIChpID09IG51bV9ub2RlcyArIG5vZGVfc3RhcnQgLSAxKQorCXdoaWxlIChlbmQgLSBzdGFydCAtIGU4MjBfaG9sZV9zaXplKHN0YXJ0LCBlbmQpIDwgc2l6ZSkgeworCQllbmQgKz0gRkFLRV9OT0RFX01JTl9TSVpFOworCQlpZiAoZW5kID4gbWF4X2FkZHIpIHsKIAkJCWVuZCA9IG1heF9hZGRyOwotCQllbHNlCi0JCQl3aGlsZSAoZW5kIC0gKmFkZHIgLSBlODIwX2hvbGVfc2l6ZSgqYWRkciwgZW5kKSA8Ci0JCQkgICAgICAgc2l6ZSkgewotCQkJCWVuZCArPSBGQUtFX05PREVfTUlOX1NJWkU7Ci0JCQkJaWYgKGVuZCA+IG1heF9hZGRyKSB7Ci0JCQkJCWVuZCA9IG1heF9hZGRyOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCWlmIChzZXR1cF9ub2RlX3JhbmdlKGksIGFkZHIsIGVuZCAtICphZGRyLCBtYXhfYWRkcikgPCAwKQogCQkJYnJlYWs7CisJCX0KIAl9Ci0JcmV0dXJuIGkgLSBub2RlX3N0YXJ0ICsgMTsKKwlyZXR1cm4gZW5kOwogfQogCiAvKgotICogU3BsaXRzIHRoZSByZW1haW5pbmcgc3lzdGVtIFJBTSBpbnRvIGNodW5rcyBvZiBzaXplLiAgVGhlIHJlbWFpbmluZyBtZW1vcnkgaXMKLSAqIGFsd2F5cyBhc3NpZ25lZCB0byBhIGZpbmFsIG5vZGUgYW5kIGNhbiBiZSBhc3ltbWV0cmljLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mCi0gKiBub2RlcyBzcGxpdC4KKyAqIFNldHMgdXAgZmFrZSBub2RlcyBvZiBgc2l6ZScgaW50ZXJsZWF2ZWQgb3ZlciBwaHlzaWNhbCBub2RlcyByYW5naW5nIGZyb20KKyAqIGBhZGRyJyB0byBgbWF4X2FkZHInLiAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIG5vZGVzIGFsbG9jYXRlZC4KICAqLwotc3RhdGljIGludCBfX2luaXQgc3BsaXRfbm9kZXNfYnlfc2l6ZSh1NjQgKmFkZHIsIHU2NCBtYXhfYWRkciwgaW50IG5vZGVfc3RhcnQsCi0JCQkJICAgICAgdTY0IHNpemUpCitzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9ub2Rlc19zaXplX2ludGVybGVhdmUodTY0IGFkZHIsIHU2NCBtYXhfYWRkciwgdTY0IHNpemUpCiB7Ci0JaW50IGkgPSBub2RlX3N0YXJ0OwotCXNpemUgPSAoc2l6ZSA8PCAyMCkgJiBGQUtFX05PREVfTUlOX0hBU0hfTUFTSzsKLQl3aGlsZSAoIXNldHVwX25vZGVfcmFuZ2UoaSsrLCBhZGRyLCBzaXplLCBtYXhfYWRkcikpCi0JCTsKLQlyZXR1cm4gaSAtIG5vZGVfc3RhcnQ7CisJbm9kZW1hc2tfdCBwaHlzbm9kZV9tYXNrID0gTk9ERV9NQVNLX05PTkU7CisJdTY0IG1pbl9zaXplOworCWludCByZXQgPSAwOworCWludCBpOworCisJaWYgKCFzaXplKQorCQlyZXR1cm4gLTE7CisJLyoKKwkgKiBUaGUgbGltaXQgb24gZW11bGF0ZWQgbm9kZXMgaXMgTUFYX05VTU5PREVTLCBzbyB0aGUgc2l6ZSBwZXIgbm9kZSBpcworCSAqIGluY3JlYXNlZCBhY2NvcmRpbmdseSBpZiB0aGUgcmVxdWVzdGVkIHNpemUgaXMgdG9vIHNtYWxsLiAgVGhpcworCSAqIGNyZWF0ZXMgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBvZiBub2RlIHNpemVzIGFjcm9zcyB0aGUgZW50aXJlCisJICogbWFjaGluZSAoYnV0IG5vdCBuZWNlc3NhcmlseSBvdmVyIHBoeXNpY2FsIG5vZGVzKS4KKwkgKi8KKwltaW5fc2l6ZSA9IChtYXhfYWRkciAtIGFkZHIgLSBlODIwX2hvbGVfc2l6ZShhZGRyLCBtYXhfYWRkcikpIC8KKwkJCQkJCU1BWF9OVU1OT0RFUzsKKwltaW5fc2l6ZSA9IG1heChtaW5fc2l6ZSwgRkFLRV9OT0RFX01JTl9TSVpFKTsKKwlpZiAoKG1pbl9zaXplICYgRkFLRV9OT0RFX01JTl9IQVNIX01BU0spIDwgbWluX3NpemUpCisJCW1pbl9zaXplID0gKG1pbl9zaXplICsgRkFLRV9OT0RFX01JTl9TSVpFKSAmCisJCQkJCQlGQUtFX05PREVfTUlOX0hBU0hfTUFTSzsKKwlpZiAoc2l6ZSA8IG1pbl9zaXplKSB7CisJCXByX2VycigiRmFrZSBub2RlIHNpemUgJUx1TUIgdG9vIHNtYWxsLCBpbmNyZWFzaW5nIHRvICVMdU1CXG4iLAorCQkJc2l6ZSA+PiAyMCwgbWluX3NpemUgPj4gMjApOworCQlzaXplID0gbWluX3NpemU7CisJfQorCXNpemUgJj0gRkFLRV9OT0RFX01JTl9IQVNIX01BU0s7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTU5PREVTOyBpKyspCisJCWlmIChwaHlzbm9kZXNbaV0uc3RhcnQgIT0gcGh5c25vZGVzW2ldLmVuZCkKKwkJCW5vZGVfc2V0KGksIHBoeXNub2RlX21hc2spOworCS8qCisJICogRmlsbCBwaHlzaWNhbCBub2RlcyB3aXRoIGZha2Ugbm9kZXMgb2Ygc2l6ZSB1bnRpbCB0aGVyZSBpcyBubyBtZW1vcnkKKwkgKiBsZWZ0IG9uIGFueSBvZiB0aGVtLgorCSAqLworCXdoaWxlIChub2Rlc193ZWlnaHQocGh5c25vZGVfbWFzaykpIHsKKwkJZm9yX2VhY2hfbm9kZV9tYXNrKGksIHBoeXNub2RlX21hc2spIHsKKwkJCXU2NCBkbWEzMl9lbmQgPSBNQVhfRE1BMzJfUEZOIDw8IFBBR0VfU0hJRlQ7CisJCQl1NjQgZW5kOworCisJCQllbmQgPSBmaW5kX2VuZF9vZl9ub2RlKHBoeXNub2Rlc1tpXS5zdGFydCwKKwkJCQkJCXBoeXNub2Rlc1tpXS5lbmQsIHNpemUpOworCQkJLyoKKwkJCSAqIElmIHRoZXJlIHdvbid0IGJlIGF0IGxlYXN0IEZBS0VfTk9ERV9NSU5fU0laRSBvZgorCQkJICogbm9uLXJlc2VydmVkIG1lbW9yeSBpbiBaT05FX0RNQTMyIGZvciB0aGUgbmV4dCBub2RlLAorCQkJICogdGhpcyBvbmUgbXVzdCBleHRlbmQgdG8gdGhlIGJvdW5kYXJ5LgorCQkJICovCisJCQlpZiAoZW5kIDwgZG1hMzJfZW5kICYmIGRtYTMyX2VuZCAtIGVuZCAtCisJCQkgICAgZTgyMF9ob2xlX3NpemUoZW5kLCBkbWEzMl9lbmQpIDwgRkFLRV9OT0RFX01JTl9TSVpFKQorCQkJCWVuZCA9IGRtYTMyX2VuZDsKKworCQkJLyoKKwkJCSAqIElmIHRoZXJlIHdvbid0IGJlIGVub3VnaCBub24tcmVzZXJ2ZWQgbWVtb3J5IGZvciB0aGUKKwkJCSAqIG5leHQgbm9kZSwgdGhpcyBvbmUgbXVzdCBleHRlbmQgdG8gdGhlIGVuZCBvZiB0aGUKKwkJCSAqIHBoeXNpY2FsIG5vZGUuCisJCQkgKi8KKwkJCWlmIChwaHlzbm9kZXNbaV0uZW5kIC0gZW5kIC0KKwkJCSAgICBlODIwX2hvbGVfc2l6ZShlbmQsIHBoeXNub2Rlc1tpXS5lbmQpIDwgc2l6ZSkKKwkJCQllbmQgPSBwaHlzbm9kZXNbaV0uZW5kOworCisJCQkvKgorCQkJICogU2V0dXAgdGhlIGZha2Ugbm9kZSB0aGF0IHdpbGwgYmUgYWxsb2NhdGVkIGFzIGJvb3RtZW0KKwkJCSAqIGxhdGVyLiAgSWYgc2V0dXBfbm9kZV9yYW5nZSgpIHJldHVybnMgbm9uLXplcm8sIHRoZXJlCisJCQkgKiBpcyBubyBtb3JlIG1lbW9yeSBhdmFpbGFibGUgb24gdGhpcyBwaHlzaWNhbCBub2RlLgorCQkJICovCisJCQlpZiAoc2V0dXBfbm9kZV9yYW5nZShyZXQrKywgJnBoeXNub2Rlc1tpXS5zdGFydCwKKwkJCQkJCWVuZCAtIHBoeXNub2Rlc1tpXS5zdGFydCwKKwkJCQkJCXBoeXNub2Rlc1tpXS5lbmQpIDwgMCkKKwkJCQlub2RlX2NsZWFyKGksIHBoeXNub2RlX21hc2spOworCQl9CisJfQorCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC01ODIsODcgKzYwNCwzMiBAQAogc3RhdGljIGludCBfX2luaXQgbnVtYV9lbXVsYXRpb24odW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCiAJCQl1bnNpZ25lZCBsb25nIGxhc3RfcGZuLCBpbnQgYWNwaSwgaW50IGs4KQogewotCXU2NCBzaXplLCBhZGRyID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJdTY0IGFkZHIgPSBzdGFydF9wZm4gPDwgUEFHRV9TSElGVDsKIAl1NjQgbWF4X2FkZHIgPSBsYXN0X3BmbiA8PCBQQUdFX1NISUZUOwotCWludCBudW1fbm9kZXMgPSAwLCBudW0gPSAwLCBjb2VmZl9mbGFnLCBjb2VmZiA9IC0xLCBpOwogCWludCBudW1fcGh5c19ub2RlczsKKwlpbnQgbnVtX25vZGVzOworCWludCBpOwogCiAJbnVtX3BoeXNfbm9kZXMgPSBzZXR1cF9waHlzbm9kZXMoYWRkciwgbWF4X2FkZHIsIGFjcGksIGs4KTsKIAkvKgotCSAqIElmIHRoZSBudW1hPWZha2UgY29tbWFuZC1saW5lIGlzIGp1c3QgYSBzaW5nbGUgbnVtYmVyIE4sIHNwbGl0IHRoZQotCSAqIHN5c3RlbSBSQU0gaW50byBOIGZha2Ugbm9kZXMuCisJICogSWYgdGhlIG51bWE9ZmFrZSBjb21tYW5kLWxpbmUgY29udGFpbnMgYSAnTScgb3IgJ0cnLCBpdCByZXByZXNlbnRzCisJICogdGhlIGZpeGVkIG5vZGUgc2l6ZS4gIE90aGVyd2lzZSwgaWYgaXQgaXMganVzdCBhIHNpbmdsZSBudW1iZXIgTiwKKwkgKiBzcGxpdCB0aGUgc3lzdGVtIFJBTSBpbnRvIE4gZmFrZSBub2Rlcy4KIAkgKi8KLQlpZiAoIXN0cmNocihjbWRsaW5lLCAnKicpICYmICFzdHJjaHIoY21kbGluZSwgJywnKSkgewotCQlsb25nIG4gPSBzaW1wbGVfc3RydG9sKGNtZGxpbmUsIE5VTEwsIDApOworCWlmIChzdHJjaHIoY21kbGluZSwgJ00nKSB8fCBzdHJjaHIoY21kbGluZSwgJ0cnKSkgeworCQl1NjQgc2l6ZTsKIAotCQludW1fbm9kZXMgPSBzcGxpdF9ub2Rlc19pbnRlcmxlYXZlKGFkZHIsIG1heF9hZGRyLAotCQkJCQkJCW51bV9waHlzX25vZGVzLCBuKTsKLQkJaWYgKG51bV9ub2RlcyA8IDApCi0JCQlyZXR1cm4gbnVtX25vZGVzOwotCQlnb3RvIG91dDsKKwkJc2l6ZSA9IG1lbXBhcnNlKGNtZGxpbmUsICZjbWRsaW5lKTsKKwkJbnVtX25vZGVzID0gc3BsaXRfbm9kZXNfc2l6ZV9pbnRlcmxlYXZlKGFkZHIsIG1heF9hZGRyLCBzaXplKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIG47CisKKwkJbiA9IHNpbXBsZV9zdHJ0b3VsKGNtZGxpbmUsIE5VTEwsIDApOworCQludW1fbm9kZXMgPSBzcGxpdF9ub2Rlc19pbnRlcmxlYXZlKGFkZHIsIG1heF9hZGRyLCBudW1fcGh5c19ub2Rlcywgbik7CiAJfQogCi0JLyogUGFyc2UgdGhlIGNvbW1hbmQgbGluZS4gKi8KLQlmb3IgKGNvZWZmX2ZsYWcgPSAwOyA7IGNtZGxpbmUrKykgewotCQlpZiAoKmNtZGxpbmUgJiYgaXNkaWdpdCgqY21kbGluZSkpIHsKLQkJCW51bSA9IG51bSAqIDEwICsgKmNtZGxpbmUgLSAnMCc7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoKmNtZGxpbmUgPT0gJyonKSB7Ci0JCQlpZiAobnVtID4gMCkKLQkJCQljb2VmZiA9IG51bTsKLQkJCWNvZWZmX2ZsYWcgPSAxOwotCQl9Ci0JCWlmICghKmNtZGxpbmUgfHwgKmNtZGxpbmUgPT0gJywnKSB7Ci0JCQlpZiAoIWNvZWZmX2ZsYWcpCi0JCQkJY29lZmYgPSAxOwotCQkJLyoKLQkJCSAqIFJvdW5kIGRvd24gdG8gdGhlIG5lYXJlc3QgRkFLRV9OT0RFX01JTl9TSVpFLgotCQkJICogQ29tbWFuZC1saW5lIGNvZWZmaWNpZW50cyBhcmUgaW4gbWVnYWJ5dGVzLgotCQkJICovCi0JCQlzaXplID0gKCh1NjQpbnVtIDw8IDIwKSAmIEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLOwotCQkJaWYgKHNpemUpCi0JCQkJZm9yIChpID0gMDsgaSA8IGNvZWZmOyBpKyssIG51bV9ub2RlcysrKQotCQkJCQlpZiAoc2V0dXBfbm9kZV9yYW5nZShudW1fbm9kZXMsICZhZGRyLAotCQkJCQkJc2l6ZSwgbWF4X2FkZHIpIDwgMCkKLQkJCQkJCWdvdG8gZG9uZTsKLQkJCWlmICghKmNtZGxpbmUpCi0JCQkJYnJlYWs7Ci0JCQljb2VmZl9mbGFnID0gMDsKLQkJCWNvZWZmID0gLTE7Ci0JCX0KLQkJbnVtID0gMDsKLQl9Ci1kb25lOgotCWlmICghbnVtX25vZGVzKQotCQlyZXR1cm4gLTE7Ci0JLyogRmlsbCByZW1haW5kZXIgb2Ygc3lzdGVtIFJBTSwgaWYgYXBwcm9wcmlhdGUuICovCi0JaWYgKGFkZHIgPCBtYXhfYWRkcikgewotCQlpZiAoY29lZmZfZmxhZyAmJiBjb2VmZiA8IDApIHsKLQkJCS8qIFNwbGl0IHJlbWFpbmluZyBub2RlcyBpbnRvIG51bS1zaXplZCBjaHVua3MgKi8KLQkJCW51bV9ub2RlcyArPSBzcGxpdF9ub2Rlc19ieV9zaXplKCZhZGRyLCBtYXhfYWRkciwKLQkJCQkJCQkgbnVtX25vZGVzLCBudW0pOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJc3dpdGNoICgqKGNtZGxpbmUgLSAxKSkgewotCQljYXNlICcqJzoKLQkJCS8qIFNwbGl0IHJlbWFpbmluZyBub2RlcyBpbnRvIGNvZWZmIGNodW5rcyAqLwotCQkJaWYgKGNvZWZmIDw9IDApCi0JCQkJYnJlYWs7Ci0JCQludW1fbm9kZXMgKz0gc3BsaXRfbm9kZXNfZXF1YWxseSgmYWRkciwgbWF4X2FkZHIsCi0JCQkJCQkJIG51bV9ub2RlcywgY29lZmYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgJywnOgotCQkJLyogRG8gbm90IGFsbG9jYXRlIHJlbWFpbmluZyBzeXN0ZW0gUkFNICovCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIEdpdmUgb25lIGZpbmFsIG5vZGUgKi8KLQkJCXNldHVwX25vZGVfcmFuZ2UobnVtX25vZGVzLCAmYWRkciwgbWF4X2FkZHIgLSBhZGRyLAotCQkJCQkgbWF4X2FkZHIpOwotCQkJbnVtX25vZGVzKys7Ci0JCX0KLQl9Ci1vdXQ6CisJaWYgKG51bV9ub2RlcyA8IDApCisJCXJldHVybiBudW1fbm9kZXM7CiAJbWVtbm9kZV9zaGlmdCA9IGNvbXB1dGVfaGFzaF9zaGlmdChub2RlcywgbnVtX25vZGVzLCBOVUxMKTsKIAlpZiAobWVtbm9kZV9zaGlmdCA8IDApIHsKIAkJbWVtbm9kZV9zaGlmdCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMKaW5kZXggZWQzNGY1ZS4uYzliYTlkZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gveDg2L21tL3BndGFibGUuYwpAQCAtNiw2ICs2LDE0IEBACiAKICNkZWZpbmUgUEdBTExPQ19HRlAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PVFJBQ0sgfCBfX0dGUF9SRVBFQVQgfCBfX0dGUF9aRVJPCiAKKyNpZmRlZiBDT05GSUdfSElHSFBURQorI2RlZmluZSBQR0FMTE9DX1VTRVJfR0ZQIF9fR0ZQX0hJR0hNRU0KKyNlbHNlCisjZGVmaW5lIFBHQUxMT0NfVVNFUl9HRlAgMAorI2VuZGlmCisKK2dmcF90IF9fdXNlcnB0ZV9hbGxvY19nZnAgPSBQR0FMTE9DX0dGUCB8IFBHQUxMT0NfVVNFUl9HRlA7CisKIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCXJldHVybiAocHRlX3QgKilfX2dldF9mcmVlX3BhZ2UoUEdBTExPQ19HRlApOwpAQCAtMTUsMTYgKzIzLDI5IEBACiB7CiAJc3RydWN0IHBhZ2UgKnB0ZTsKIAotI2lmZGVmIENPTkZJR19ISUdIUFRFCi0JcHRlID0gYWxsb2NfcGFnZXMoUEdBTExPQ19HRlAgfCBfX0dGUF9ISUdITUVNLCAwKTsKLSNlbHNlCi0JcHRlID0gYWxsb2NfcGFnZXMoUEdBTExPQ19HRlAsIDApOwotI2VuZGlmCisJcHRlID0gYWxsb2NfcGFnZXMoX191c2VycHRlX2FsbG9jX2dmcCwgMCk7CiAJaWYgKHB0ZSkKIAkJcGd0YWJsZV9wYWdlX2N0b3IocHRlKTsKIAlyZXR1cm4gcHRlOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF91c2VycHRlKGNoYXIgKmFyZykKK3sKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqICJ1c2VycHRlPW5vaGlnaCIgZGlzYWJsZXMgYWxsb2NhdGlvbiBvZiB1c2VyIHBhZ2V0YWJsZXMgaW4KKwkgKiBoaWdoIG1lbW9yeS4KKwkgKi8KKwlpZiAoc3RyY21wKGFyZywgIm5vaGlnaCIpID09IDApCisJCV9fdXNlcnB0ZV9hbGxvY19nZnAgJj0gfl9fR0ZQX0hJR0hNRU07CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJ1c2VycHRlIiwgc2V0dXBfdXNlcnB0ZSk7CisKIHZvaWQgX19fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwdGUpCiB7CiAJcGd0YWJsZV9wYWdlX2R0b3IocHRlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3RsYi5jIGIvYXJjaC94ODYvbW0vdGxiLmMKaW5kZXggNjViNThlNC4uNDI2ZjNhMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vdGxiLmMKKysrIGIvYXJjaC94ODYvbW0vdGxiLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgbW1fc3RydWN0ICpmbHVzaF9tbTsKIAkJdW5zaWduZWQgbG9uZyBmbHVzaF92YTsKLQkJc3BpbmxvY2tfdCB0bGJzdGF0ZV9sb2NrOworCQlyYXdfc3BpbmxvY2tfdCB0bGJzdGF0ZV9sb2NrOwogCQlERUNMQVJFX0JJVE1BUChmbHVzaF9jcHVtYXNrLCBOUl9DUFVTKTsKIAl9OwogCWNoYXIgcGFkW0lOVEVSTk9ERV9DQUNIRV9CWVRFU107CkBAIC0xODEsNyArMTgxLDcgQEAKIAkgKiBudW1fb25saW5lX2NwdXMoKSA8PSBOVU1fSU5WQUxJREFURV9UTEJfVkVDVE9SUywgYnV0IGl0IGlzCiAJICogcHJvYmFibHkgbm90IHdvcnRoIGNoZWNraW5nIHRoaXMgZm9yIGEgY2FjaGUtaG90IGxvY2suCiAJICovCi0Jc3Bpbl9sb2NrKCZmLT50bGJzdGF0ZV9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZmLT50bGJzdGF0ZV9sb2NrKTsKIAogCWYtPmZsdXNoX21tID0gbW07CiAJZi0+Zmx1c2hfdmEgPSB2YTsKQEAgLTE5OSw3ICsxOTksNyBAQAogCiAJZi0+Zmx1c2hfbW0gPSBOVUxMOwogCWYtPmZsdXNoX3ZhID0gMDsKLQlzcGluX3VubG9jaygmZi0+dGxic3RhdGVfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZmLT50bGJzdGF0ZV9sb2NrKTsKIH0KIAogdm9pZCBuYXRpdmVfZmx1c2hfdGxiX290aGVycyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKQEAgLTIyMyw3ICsyMjMsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmx1c2hfc3RhdGUpOyBpKyspCi0JCXNwaW5fbG9ja19pbml0KCZmbHVzaF9zdGF0ZVtpXS50bGJzdGF0ZV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9ja19pbml0KCZmbHVzaF9zdGF0ZVtpXS50bGJzdGF0ZV9sb2NrKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCmluZGV4IGNiODhiMWEuLjJjNTA1ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMKQEAgLTE1OSw3ICsxNTksNyBAQAogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJcGVyX2NwdShjcHVfbXNycywgaSkubXVsdGlwbGV4ID0KLQkJCWttYWxsb2MobXVsdGlwbGV4X3NpemUsIEdGUF9LRVJORUwpOworCQkJa3phbGxvYyhtdWx0aXBsZXhfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcGVyX2NwdShjcHVfbXNycywgaSkubXVsdGlwbGV4KQogCQkJcmV0dXJuIDA7CiAJfQpAQCAtMTc5LDcgKzE3OSw2IEBACiAJCWlmIChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKSB7CiAJCQltdWx0aXBsZXhbaV0uc2F2ZWQgPSAtKHU2NCljb3VudGVyX2NvbmZpZ1tpXS5jb3VudDsKIAkJfSBlbHNlIHsKLQkJCW11bHRpcGxleFtpXS5hZGRyICA9IDA7CiAJCQltdWx0aXBsZXhbaV0uc2F2ZWQgPSAwOwogCQl9CiAJfQpAQCAtMTg5LDI1ICsxODgsMjcgQEAKIAogc3RhdGljIHZvaWQgbm1pX2NwdV9zYXZlX21weF9yZWdpc3RlcnMoc3RydWN0IG9wX21zcnMgKm1zcnMpCiB7CisJc3RydWN0IG9wX21zciAqY291bnRlcnMgPSBtc3JzLT5jb3VudGVyczsKIAlzdHJ1Y3Qgb3BfbXNyICptdWx0aXBsZXggPSBtc3JzLT5tdWx0aXBsZXg7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbW9kZWwtPm51bV9jb3VudGVyczsgKytpKSB7CiAJCWludCB2aXJ0ID0gb3BfeDg2X3BoeXNfdG9fdmlydChpKTsKLQkJaWYgKG11bHRpcGxleFt2aXJ0XS5hZGRyKQotCQkJcmRtc3JsKG11bHRpcGxleFt2aXJ0XS5hZGRyLCBtdWx0aXBsZXhbdmlydF0uc2F2ZWQpOworCQlpZiAoY291bnRlcnNbaV0uYWRkcikKKwkJCXJkbXNybChjb3VudGVyc1tpXS5hZGRyLCBtdWx0aXBsZXhbdmlydF0uc2F2ZWQpOwogCX0KIH0KIAogc3RhdGljIHZvaWQgbm1pX2NwdV9yZXN0b3JlX21weF9yZWdpc3RlcnMoc3RydWN0IG9wX21zcnMgKm1zcnMpCiB7CisJc3RydWN0IG9wX21zciAqY291bnRlcnMgPSBtc3JzLT5jb3VudGVyczsKIAlzdHJ1Y3Qgb3BfbXNyICptdWx0aXBsZXggPSBtc3JzLT5tdWx0aXBsZXg7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbW9kZWwtPm51bV9jb3VudGVyczsgKytpKSB7CiAJCWludCB2aXJ0ID0gb3BfeDg2X3BoeXNfdG9fdmlydChpKTsKLQkJaWYgKG11bHRpcGxleFt2aXJ0XS5hZGRyKQotCQkJd3Jtc3JsKG11bHRpcGxleFt2aXJ0XS5hZGRyLCBtdWx0aXBsZXhbdmlydF0uc2F2ZWQpOworCQlpZiAoY291bnRlcnNbaV0uYWRkcikKKwkJCXdybXNybChjb3VudGVyc1tpXS5hZGRyLCBtdWx0aXBsZXhbdmlydF0uc2F2ZWQpOwogCX0KIH0KIApAQCAtMjIyLDcgKzIyMyw3IEBACiAKIAkvKiBtb3ZlIHRvIG5leHQgc2V0ICovCiAJc2kgKz0gbW9kZWwtPm51bV9jb3VudGVyczsKLQlpZiAoKHNpID4gbW9kZWwtPm51bV92aXJ0X2NvdW50ZXJzKSB8fCAoY291bnRlcl9jb25maWdbc2ldLmNvdW50ID09IDApKQorCWlmICgoc2kgPj0gbW9kZWwtPm51bV92aXJ0X2NvdW50ZXJzKSB8fCAoY291bnRlcl9jb25maWdbc2ldLmNvdW50ID09IDApKQogCQlwZXJfY3B1KHN3aXRjaF9pbmRleCwgY3B1KSA9IDA7CiAJZWxzZQogCQlwZXJfY3B1KHN3aXRjaF9pbmRleCwgY3B1KSA9IHNpOwpAQCAtMzAzLDExICszMDQsMTEgQEAKIAogCWludCBpOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCXBlcl9jcHUoY3B1X21zcnMsIGkpLmNvdW50ZXJzID0ga21hbGxvYyhjb3VudGVyc19zaXplLAorCQlwZXJfY3B1KGNwdV9tc3JzLCBpKS5jb3VudGVycyA9IGt6YWxsb2MoY291bnRlcnNfc2l6ZSwKIAkJCQkJCQlHRlBfS0VSTkVMKTsKIAkJaWYgKCFwZXJfY3B1KGNwdV9tc3JzLCBpKS5jb3VudGVycykKIAkJCXJldHVybiAwOwotCQlwZXJfY3B1KGNwdV9tc3JzLCBpKS5jb250cm9scyA9IGttYWxsb2MoY29udHJvbHNfc2l6ZSwKKwkJcGVyX2NwdShjcHVfbXNycywgaSkuY29udHJvbHMgPSBremFsbG9jKGNvbnRyb2xzX3NpemUsCiAJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmICghcGVyX2NwdShjcHVfbXNycywgaSkuY29udHJvbHMpCiAJCQlyZXR1cm4gMDsKQEAgLTU5OCw2ICs1OTksNyBAQAogCWNhc2UgMTU6IGNhc2UgMjM6CiAJCSpjcHVfdHlwZSA9ICJpMzg2L2NvcmVfMiI7CiAJCWJyZWFrOworCWNhc2UgMHgyZToKIAljYXNlIDI2OgogCQlzcGVjID0gJm9wX2FyY2hfcGVyZm1vbl9zcGVjOwogCQkqY3B1X3R5cGUgPSAiaTM4Ni9jb3JlX2k3IjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfYW1kLmMKaW5kZXggMzk2ODZjMi4uNmE1ODI1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfYW1kLmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfYW1kLmMKQEAgLTIyLDYgKzIyLDkgQEAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9ubWkuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogCiAjaW5jbHVkZSAib3BfeDg2X21vZGVsLmgiCiAjaW5jbHVkZSAib3BfY291bnRlci5oIgpAQCAtNDMsMTUgKzQ2LDEzIEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJlc2V0X3ZhbHVlW05VTV9WSVJUX0NPVU5URVJTXTsKIAotI2lmZGVmIENPTkZJR19PUFJPRklMRV9JQlMKLQogLyogSWJzRmV0Y2hDdGwgYml0cy9tYXNrcyAqLwogI2RlZmluZSBJQlNfRkVUQ0hfUkFORF9FTgkJKDFVTEw8PDU3KQogI2RlZmluZSBJQlNfRkVUQ0hfVkFMCQkJKDFVTEw8PDQ5KQogI2RlZmluZSBJQlNfRkVUQ0hfRU5BQkxFCQkoMVVMTDw8NDgpCiAjZGVmaW5lIElCU19GRVRDSF9DTlRfTUFTSwkJMHhGRkZGMDAwMFVMTAogCi0vKklic09wQ3RsIGJpdHMgKi8KKy8qIElic09wQ3RsIGJpdHMgKi8KICNkZWZpbmUgSUJTX09QX0NOVF9DVEwJCQkoMVVMTDw8MTkpCiAjZGVmaW5lIElCU19PUF9WQUwJCQkoMVVMTDw8MTgpCiAjZGVmaW5lIElCU19PUF9FTkFCTEUJCQkoMVVMTDw8MTcpCkBAIC01OSw3ICs2MCw3IEBACiAjZGVmaW5lIElCU19GRVRDSF9TSVpFCQkJNgogI2RlZmluZSBJQlNfT1BfU0laRQkJCTEyCiAKLXN0YXRpYyBpbnQgaGFzX2liczsJLyogQU1EIEZhbWlseTEwaCBhbmQgbGF0ZXIgKi8KK3N0YXRpYyB1MzIgaWJzX2NhcHM7CiAKIHN0cnVjdCBvcF9pYnNfY29uZmlnIHsKIAl1bnNpZ25lZCBsb25nIG9wX2VuYWJsZWQ7CkBAIC03MSwyNCArNzIsNTIgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb3BfaWJzX2NvbmZpZyBpYnNfY29uZmlnOworc3RhdGljIHU2NCBpYnNfb3BfY3RsOwogCi0jZW5kaWYKKy8qCisgKiBJQlMgY3B1aWQgZmVhdHVyZSBkZXRlY3Rpb24KKyAqLworCisjZGVmaW5lIElCU19DUFVJRF9GRUFUVVJFUyAgICAgIDB4ODAwMDAwMWIKKworLyoKKyAqIFNhbWUgYml0IG1hc2sgYXMgZm9yIElCUyBjcHVpZCBmZWF0dXJlIGZsYWdzIChGbjgwMDBfMDAxQl9FQVgpLCBidXQKKyAqIGJpdCAwIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGV4aXN0ZW5jZSBvZiBJQlMuCisgKi8KKyNkZWZpbmUgSUJTX0NBUFNfQVZBSUwJCQkoMUxMPDwwKQorI2RlZmluZSBJQlNfQ0FQU19SRFdST1BDTlQJCSgxTEw8PDMpCisjZGVmaW5lIElCU19DQVBTX09QQ05UCQkJKDFMTDw8NCkKKworLyoKKyAqIElCUyByYW5kb21pemF0aW9uIG1hY3JvcworICovCisjZGVmaW5lIElCU19SQU5ET01fQklUUwkJCTEyCisjZGVmaW5lIElCU19SQU5ET01fTUFTSwkJCSgoMVVMTCA8PCBJQlNfUkFORE9NX0JJVFMpIC0gMSkKKyNkZWZpbmUgSUJTX1JBTkRPTV9NQVhDTlRfT0ZGU0VUCSgxVUxMIDw8IChJQlNfUkFORE9NX0JJVFMgLSA1KSkKKworc3RhdGljIHUzMiBnZXRfaWJzX2NhcHModm9pZCkKK3sKKwl1MzIgaWJzX2NhcHM7CisJdW5zaWduZWQgaW50IG1heF9sZXZlbDsKKworCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0lCUykpCisJCXJldHVybiAwOworCisJLyogY2hlY2sgSUJTIGNwdWlkIGZlYXR1cmUgZmxhZ3MgKi8KKwltYXhfbGV2ZWwgPSBjcHVpZF9lYXgoMHg4MDAwMDAwMCk7CisJaWYgKG1heF9sZXZlbCA8IElCU19DUFVJRF9GRUFUVVJFUykKKwkJcmV0dXJuIElCU19DQVBTX0FWQUlMOworCisJaWJzX2NhcHMgPSBjcHVpZF9lYXgoSUJTX0NQVUlEX0ZFQVRVUkVTKTsKKwlpZiAoIShpYnNfY2FwcyAmIElCU19DQVBTX0FWQUlMKSkKKwkJLyogY3B1aWQgZmxhZ3Mgbm90IHZhbGlkICovCisJCXJldHVybiBJQlNfQ0FQU19BVkFJTDsKKworCXJldHVybiBpYnNfY2FwczsKK30KIAogI2lmZGVmIENPTkZJR19PUFJPRklMRV9FVkVOVF9NVUxUSVBMRVgKIAotc3RhdGljIHZvaWQgb3BfbXV4X2ZpbGxfaW5fYWRkcmVzc2VzKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fVklSVF9DT1VOVEVSUzsgaSsrKSB7Ci0JCWludCBod19jb3VudGVyID0gb3BfeDg2X3ZpcnRfdG9fcGh5cyhpKTsKLQkJaWYgKHJlc2VydmVfcGVyZmN0cl9ubWkoTVNSX0s3X1BFUkZDVFIwICsgaSkpCi0JCQltc3JzLT5tdWx0aXBsZXhbaV0uYWRkciA9IE1TUl9LN19QRVJGQ1RSMCArIGh3X2NvdW50ZXI7Ci0JCWVsc2UKLQkJCW1zcnMtPm11bHRpcGxleFtpXS5hZGRyID0gMDsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIG9wX211eF9zd2l0Y2hfY3RybChzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3QgKm1vZGVsLAogCQkJICAgICAgIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKIHsKQEAgLTk4LDcgKzEyNyw3IEBACiAJLyogZW5hYmxlIGFjdGl2ZSBjb3VudGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgewogCQlpbnQgdmlydCA9IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaSk7Ci0JCWlmICghY291bnRlcl9jb25maWdbdmlydF0uZW5hYmxlZCkKKwkJaWYgKCFyZXNldF92YWx1ZVt2aXJ0XSkKIAkJCWNvbnRpbnVlOwogCQlyZG1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKIAkJdmFsICY9IG1vZGVsLT5yZXNlcnZlZDsKQEAgLTEwNywxMCArMTM2LDYgQEAKIAl9CiB9CiAKLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvcF9tdXhfZmlsbF9pbl9hZGRyZXNzZXMoc3RydWN0IG9wX21zcnMgKiBjb25zdCBtc3JzKSB7IH0KLQogI2VuZGlmCiAKIC8qIGZ1bmN0aW9ucyBmb3Igb3BfYW1kX3NwZWMgKi8KQEAgLTEyMiwxOCArMTQ3LDEyIEBACiAJZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgaSsrKSB7CiAJCWlmIChyZXNlcnZlX3BlcmZjdHJfbm1pKE1TUl9LN19QRVJGQ1RSMCArIGkpKQogCQkJbXNycy0+Y291bnRlcnNbaV0uYWRkciA9IE1TUl9LN19QRVJGQ1RSMCArIGk7Ci0JCWVsc2UKLQkJCW1zcnMtPmNvdW50ZXJzW2ldLmFkZHIgPSAwOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09OVFJPTFM7IGkrKykgewogCQlpZiAocmVzZXJ2ZV9ldm50c2VsX25taShNU1JfSzdfRVZOVFNFTDAgKyBpKSkKIAkJCW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIgPSBNU1JfSzdfRVZOVFNFTDAgKyBpOwotCQllbHNlCi0JCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gMDsKIAl9Ci0KLQlvcF9tdXhfZmlsbF9pbl9hZGRyZXNzZXMobXNycyk7CiB9CiAKIHN0YXRpYyB2b2lkIG9wX2FtZF9zZXR1cF9jdHJzKHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCAqbW9kZWwsCkBAIC0xNDQsNyArMTYzLDggQEAKIAogCS8qIHNldHVwIHJlc2V0X3ZhbHVlICovCiAJZm9yIChpID0gMDsgaSA8IE5VTV9WSVJUX0NPVU5URVJTOyArK2kpIHsKLQkJaWYgKGNvdW50ZXJfY29uZmlnW2ldLmVuYWJsZWQpCisJCWlmIChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkCisJCSAgICAmJiBtc3JzLT5jb3VudGVyc1tvcF94ODZfdmlydF90b19waHlzKGkpXS5hZGRyKQogCQkJcmVzZXRfdmFsdWVbaV0gPSBjb3VudGVyX2NvbmZpZ1tpXS5jb3VudDsKIAkJZWxzZQogCQkJcmVzZXRfdmFsdWVbaV0gPSAwOwpAQCAtMTUyLDkgKzE3MiwxOCBAQAogCiAJLyogY2xlYXIgYWxsIGNvdW50ZXJzICovCiAJZm9yIChpID0gMDsgaSA8IE5VTV9DT05UUk9MUzsgKytpKSB7Ci0JCWlmICh1bmxpa2VseSghbXNycy0+Y29udHJvbHNbaV0uYWRkcikpCisJCWlmICh1bmxpa2VseSghbXNycy0+Y29udHJvbHNbaV0uYWRkcikpIHsKKwkJCWlmIChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkICYmICFzbXBfcHJvY2Vzc29yX2lkKCkpCisJCQkJLyoKKwkJCQkgKiBjb3VudGVyIGlzIHJlc2VydmVkLCB0aGlzIGlzIG9uIGFsbAorCQkJCSAqIGNwdXMsIHNvIHJlcG9ydCBvbmx5IGZvciBjcHUgIzAKKwkJCQkgKi8KKwkJCQlvcF94ODZfd2Fybl9yZXNlcnZlZChpKTsKIAkJCWNvbnRpbnVlOworCQl9CiAJCXJkbXNybChtc3JzLT5jb250cm9sc1tpXS5hZGRyLCB2YWwpOworCQlpZiAodmFsICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEUpCisJCQlvcF94ODZfd2Fybl9pbl91c2UoaSk7CiAJCXZhbCAmPSBtb2RlbC0+cmVzZXJ2ZWQ7CiAJCXdybXNybChtc3JzLT5jb250cm9sc1tpXS5hZGRyLCB2YWwpOwogCX0KQEAgLTE2OSw5ICsxOTgsNyBAQAogCS8qIGVuYWJsZSBhY3RpdmUgY291bnRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKIAkJaW50IHZpcnQgPSBvcF94ODZfcGh5c190b192aXJ0KGkpOwotCQlpZiAoIWNvdW50ZXJfY29uZmlnW3ZpcnRdLmVuYWJsZWQpCi0JCQljb250aW51ZTsKLQkJaWYgKCFtc3JzLT5jb3VudGVyc1tpXS5hZGRyKQorCQlpZiAoIXJlc2V0X3ZhbHVlW3ZpcnRdKQogCQkJY29udGludWU7CiAKIAkJLyogc2V0dXAgY291bnRlciByZWdpc3RlcnMgKi8KQEAgLTE4NSw3ICsyMTIsNjAgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfT1BST0ZJTEVfSUJTCisvKgorICogMTYtYml0IExpbmVhciBGZWVkYmFjayBTaGlmdCBSZWdpc3RlciAoTEZTUikKKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTYgICAxNCAgIDEzICAgIDExCisgKiBGZWVkYmFjayBwb2x5bm9taWFsID0gWCAgKyBYICArIFggICsgIFggICsgMQorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGxmc3JfcmFuZG9tKHZvaWQpCit7CisJc3RhdGljIHVuc2lnbmVkIGludCBsZnNyX3ZhbHVlID0gMHhGMDBEOworCXVuc2lnbmVkIGludCBiaXQ7CisKKwkvKiBDb21wdXRlIG5leHQgYml0IHRvIHNoaWZ0IGluICovCisJYml0ID0gKChsZnNyX3ZhbHVlID4+IDApIF4KKwkgICAgICAgKGxmc3JfdmFsdWUgPj4gMikgXgorCSAgICAgICAobGZzcl92YWx1ZSA+PiAzKSBeCisJICAgICAgIChsZnNyX3ZhbHVlID4+IDUpKSAmIDB4MDAwMTsKKworCS8qIEFkdmFuY2UgdG8gbmV4dCByZWdpc3RlciB2YWx1ZSAqLworCWxmc3JfdmFsdWUgPSAobGZzcl92YWx1ZSA+PiAxKSB8IChiaXQgPDwgMTUpOworCisJcmV0dXJuIGxmc3JfdmFsdWU7Cit9CisKKy8qCisgKiBJQlMgc29mdHdhcmUgcmFuZG9taXphdGlvbgorICoKKyAqIFRoZSBJQlMgcGVyaW9kaWMgb3AgY291bnRlciBpcyByYW5kb21pemVkIGluIHNvZnR3YXJlLiBUaGUgbG93ZXIgMTIKKyAqIGJpdHMgb2YgdGhlIDIwIGJpdCBjb3VudGVyIGFyZSByYW5kb21pemVkLiBJYnNPcEN1ckNudCBpcworICogaW5pdGlhbGl6ZWQgd2l0aCBhIDEyIGJpdCByYW5kb20gdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0IG9wX2FtZF9yYW5kb21pemVfaWJzX29wKHU2NCB2YWwpCit7CisJdW5zaWduZWQgaW50IHJhbmRvbSA9IGxmc3JfcmFuZG9tKCk7CisKKwlpZiAoIShpYnNfY2FwcyAmIElCU19DQVBTX1JEV1JPUENOVCkpCisJCS8qCisJCSAqIFdvcmsgYXJvdW5kIGlmIHRoZSBodyBjYW4gbm90IHdyaXRlIHRvIElic09wQ3VyQ250CisJCSAqCisJCSAqIFJhbmRvbWl6ZSB0aGUgbG93ZXIgOCBiaXRzIG9mIHRoZSAxNiBiaXQKKwkJICogSWJzT3BNYXhDbnQgWzE1OjBdIHZhbHVlIGluIHRoZSByYW5nZSBvZiAtMTI4IHRvCisJCSAqICsxMjcgYnkgYWRkaW5nL3N1YnRyYWN0aW5nIGFuIG9mZnNldCB0byB0aGUKKwkJICogbWF4aW11bSBjb3VudCAoSWJzT3BNYXhDbnQpLgorCQkgKgorCQkgKiBUbyBhdm9pZCBvdmVyIG9yIHVuZGVyZmxvd3MgYW5kIHByb3RlY3QgdXBwZXIgYml0cworCQkgKiBzdGFydGluZyBhdCBiaXQgMTYsIHRoZSBpbml0aWFsIHZhbHVlIGZvcgorCQkgKiBJYnNPcE1heENudCBtdXN0IGZpdCBpbiB0aGUgcmFuZ2UgZnJvbSAweDAwODEgdG8KKwkJICogMHhmZjgwLgorCQkgKi8KKwkJdmFsICs9IChzOCkocmFuZG9tID4+IDQpOworCWVsc2UKKwkJdmFsIHw9ICh1NjQpKHJhbmRvbSAmIElCU19SQU5ET01fTUFTSykgPDwgMzI7CisKKwlyZXR1cm4gdmFsOworfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIG9wX2FtZF9oYW5kbGVfaWJzKHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncywKQEAgLTE5NCw3ICsyNzQsNyBAQAogCXU2NCB2YWwsIGN0bDsKIAlzdHJ1Y3Qgb3BfZW50cnkgZW50cnk7CiAKLQlpZiAoIWhhc19pYnMpCisJaWYgKCFpYnNfY2FwcykKIAkJcmV0dXJuOwogCiAJaWYgKGlic19jb25maWcuZmV0Y2hfZW5hYmxlZCkgewpAQCAtMjM2LDggKzMxNiw3IEBACiAJCQlvcHJvZmlsZV93cml0ZV9jb21taXQoJmVudHJ5KTsKIAogCQkJLyogcmVlbmFibGUgdGhlIElSUSAqLwotCQkJY3RsICY9IH5JQlNfT1BfVkFMICYgMHhGRkZGRkZGRjsKLQkJCWN0bCB8PSBJQlNfT1BfRU5BQkxFOworCQkJY3RsID0gb3BfYW1kX3JhbmRvbWl6ZV9pYnNfb3AoaWJzX29wX2N0bCk7CiAJCQl3cm1zcmwoTVNSX0FNRDY0X0lCU09QQ1RMLCBjdGwpOwogCQl9CiAJfQpAQCAtMjQ2LDQxICszMjUsNTcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvcF9hbWRfc3RhcnRfaWJzKHZvaWQpCiB7CiAJdTY0IHZhbDsKLQlpZiAoaGFzX2licyAmJiBpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQpIHsKKworCWlmICghaWJzX2NhcHMpCisJCXJldHVybjsKKworCWlmIChpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQpIHsKIAkJdmFsID0gKGlic19jb25maWcubWF4X2NudF9mZXRjaCA+PiA0KSAmIDB4RkZGRjsKIAkJdmFsIHw9IGlic19jb25maWcucmFuZF9lbiA/IElCU19GRVRDSF9SQU5EX0VOIDogMDsKIAkJdmFsIHw9IElCU19GRVRDSF9FTkFCTEU7CiAJCXdybXNybChNU1JfQU1ENjRfSUJTRkVUQ0hDVEwsIHZhbCk7CiAJfQogCi0JaWYgKGhhc19pYnMgJiYgaWJzX2NvbmZpZy5vcF9lbmFibGVkKSB7Ci0JCXZhbCA9IChpYnNfY29uZmlnLm1heF9jbnRfb3AgPj4gNCkgJiAweEZGRkY7Ci0JCXZhbCB8PSBpYnNfY29uZmlnLmRpc3BhdGNoZWRfb3BzID8gSUJTX09QX0NOVF9DVEwgOiAwOwotCQl2YWwgfD0gSUJTX09QX0VOQUJMRTsKKwlpZiAoaWJzX2NvbmZpZy5vcF9lbmFibGVkKSB7CisJCWlic19vcF9jdGwgPSBpYnNfY29uZmlnLm1heF9jbnRfb3AgPj4gNDsKKwkJaWYgKCEoaWJzX2NhcHMgJiBJQlNfQ0FQU19SRFdST1BDTlQpKSB7CisJCQkvKgorCQkJICogSWJzT3BDdXJDbnQgbm90IHN1cHBvcnRlZC4gIFNlZQorCQkJICogb3BfYW1kX3JhbmRvbWl6ZV9pYnNfb3AoKSBmb3IgZGV0YWlscy4KKwkJCSAqLworCQkJaWJzX29wX2N0bCA9IGNsYW1wKGlic19vcF9jdGwsIDB4MDA4MVVMTCwgMHhGRjgwVUxMKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBUaGUgc3RhcnQgdmFsdWUgaXMgcmFuZG9taXplZCB3aXRoIGEKKwkJCSAqIHBvc2l0aXZlIG9mZnNldCwgd2UgbmVlZCB0byBjb21wZW5zYXRlIGl0CisJCQkgKiB3aXRoIHRoZSBoYWxmIG9mIHRoZSByYW5kb21pemVkIHJhbmdlLiBBbHNvCisJCQkgKiBhdm9pZCB1bmRlcmZsb3dzLgorCQkJICovCisJCQlpYnNfb3BfY3RsID0gbWluKGlic19vcF9jdGwgKyBJQlNfUkFORE9NX01BWENOVF9PRkZTRVQsCisJCQkJCSAweEZGRkZVTEwpOworCQl9CisJCWlmIChpYnNfY2FwcyAmIElCU19DQVBTX09QQ05UICYmIGlic19jb25maWcuZGlzcGF0Y2hlZF9vcHMpCisJCQlpYnNfb3BfY3RsIHw9IElCU19PUF9DTlRfQ1RMOworCQlpYnNfb3BfY3RsIHw9IElCU19PUF9FTkFCTEU7CisJCXZhbCA9IG9wX2FtZF9yYW5kb21pemVfaWJzX29wKGlic19vcF9jdGwpOwogCQl3cm1zcmwoTVNSX0FNRDY0X0lCU09QQ1RMLCB2YWwpOwogCX0KIH0KIAogc3RhdGljIHZvaWQgb3BfYW1kX3N0b3BfaWJzKHZvaWQpCiB7Ci0JaWYgKGhhc19pYnMgJiYgaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkKQorCWlmICghaWJzX2NhcHMpCisJCXJldHVybjsKKworCWlmIChpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQpCiAJCS8qIGNsZWFyIG1heCBjb3VudCBhbmQgZW5hYmxlICovCiAJCXdybXNybChNU1JfQU1ENjRfSUJTRkVUQ0hDVEwsIDApOwogCi0JaWYgKGhhc19pYnMgJiYgaWJzX2NvbmZpZy5vcF9lbmFibGVkKQorCWlmIChpYnNfY29uZmlnLm9wX2VuYWJsZWQpCiAJCS8qIGNsZWFyIG1heCBjb3VudCBhbmQgZW5hYmxlICovCiAJCXdybXNybChNU1JfQU1ENjRfSUJTT1BDVEwsIDApOwogfQogCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb3BfYW1kX2hhbmRsZV9pYnMoc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLAotCQkJCSAgICBzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIG9wX2FtZF9zdGFydF9pYnModm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgb3BfYW1kX3N0b3BfaWJzKHZvaWQpIHsgfQotCi0jZW5kaWYKLQogc3RhdGljIGludCBvcF9hbWRfY2hlY2tfY3RycyhzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsCiAJCQkgICAgIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKIHsKQEAgLTM1NSw4ICs0NTAsNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19PUFJPRklMRV9JQlMKLQogc3RhdGljIHU4IGlic19laWx2dF9vZmY7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2luaXRfaWJzX25taV9wZXJfY3B1KHZvaWQgKmFyZykKQEAgLTQwNSw0NSArNDk4LDM2IEBACiAJCXJldHVybiAxOwogCX0KIAotI2lmZGVmIENPTkZJR19OVU1BCi0JLyogU2FuaXR5IGNoZWNrICovCi0JLyogV29ya3Mgb25seSBmb3IgNjRiaXQgd2l0aCBwcm9wZXIgbnVtYSBpbXBsZW1lbnRhdGlvbi4gKi8KLQlpZiAobm9kZXMgIT0gbnVtX3Bvc3NpYmxlX25vZGVzKCkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkZhaWxlZCB0byBzZXR1cCBDUFUgbm9kZShzKSBmb3IgSUJTLCAiCi0JCQkiZm91bmQ6ICVkLCBleHBlY3RlZCAlZCIsCi0JCQlub2RlcywgbnVtX3Bvc3NpYmxlX25vZGVzKCkpOwotCQlyZXR1cm4gMTsKLQl9Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KIAogLyogdW5pbml0aWFsaXplIHRoZSBBUElDIGZvciB0aGUgSUJTIGludGVycnVwdHMgaWYgbmVlZGVkICovCiBzdGF0aWMgdm9pZCBjbGVhcl9pYnNfbm1pKHZvaWQpCiB7Ci0JaWYgKGhhc19pYnMpCisJaWYgKGlic19jYXBzKQogCQlvbl9lYWNoX2NwdShhcGljX2NsZWFyX2lic19ubWlfcGVyX2NwdSwgTlVMTCwgMSk7CiB9CiAKIC8qIGluaXRpYWxpemUgdGhlIEFQSUMgZm9yIHRoZSBJQlMgaW50ZXJydXB0cyBpZiBhdmFpbGFibGUgKi8KIHN0YXRpYyB2b2lkIGlic19pbml0KHZvaWQpCiB7Ci0JaGFzX2licyA9IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlMpOworCWlic19jYXBzID0gZ2V0X2lic19jYXBzKCk7CiAKLQlpZiAoIWhhc19pYnMpCisJaWYgKCFpYnNfY2FwcykKIAkJcmV0dXJuOwogCiAJaWYgKGluaXRfaWJzX25taSgpKSB7Ci0JCWhhc19pYnMgPSAwOworCQlpYnNfY2FwcyA9IDA7CiAJCXJldHVybjsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJvcHJvZmlsZTogQU1EIElCUyBkZXRlY3RlZFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAib3Byb2ZpbGU6IEFNRCBJQlMgZGV0ZWN0ZWQgKDB4JTA4eClcbiIsCisJICAgICAgICh1bnNpZ25lZClpYnNfY2Fwcyk7CiB9CiAKIHN0YXRpYyB2b2lkIGlic19leGl0KHZvaWQpCiB7Ci0JaWYgKCFoYXNfaWJzKQorCWlmICghaWJzX2NhcHMpCiAJCXJldHVybjsKIAogCWNsZWFyX2lic19ubWkoKTsKQEAgLTQ2Myw3ICs1NDcsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoIWhhc19pYnMpCisJaWYgKCFpYnNfY2FwcykKIAkJcmV0dXJuIHJldDsKIAogCS8qIG1vZGVsIHNwZWNpZmljIGZpbGVzICovCkBAIC00NzMsNyArNTU3LDcgQEAKIAlpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQgPSAwOwogCWlic19jb25maWcubWF4X2NudF9vcCA9IDI1MDAwMDsKIAlpYnNfY29uZmlnLm9wX2VuYWJsZWQgPSAwOwotCWlic19jb25maWcuZGlzcGF0Y2hlZF9vcHMgPSAxOworCWlic19jb25maWcuZGlzcGF0Y2hlZF9vcHMgPSAwOwogCiAJZGlyID0gb3Byb2ZpbGVmc19ta2RpcihzYiwgcm9vdCwgImlic19mZXRjaCIpOwogCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJlbmFibGUiLApAQCAtNDg4LDggKzU3Miw5IEBACiAJCQkJJmlic19jb25maWcub3BfZW5hYmxlZCk7CiAJb3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIGRpciwgIm1heF9jb3VudCIsCiAJCQkJJmlic19jb25maWcubWF4X2NudF9vcCk7Ci0Jb3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIGRpciwgImRpc3BhdGNoZWRfb3BzIiwKLQkJCQkmaWJzX2NvbmZpZy5kaXNwYXRjaGVkX29wcyk7CisJaWYgKGlic19jYXBzICYgSUJTX0NBUFNfT1BDTlQpCisJCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJkaXNwYXRjaGVkX29wcyIsCisJCQkJCSZpYnNfY29uZmlnLmRpc3BhdGNoZWRfb3BzKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTA3LDE5ICs1OTIsNiBAQAogCWlic19leGl0KCk7CiB9CiAKLSNlbHNlCi0KLS8qIG5vIElCUyBzdXBwb3J0ICovCi0KLXN0YXRpYyBpbnQgb3BfYW1kX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgb3BfYW1kX2V4aXQodm9pZCkge30KLQotI2VuZGlmIC8qIENPTkZJR19PUFJPRklMRV9JQlMgKi8KLQogc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIG9wX2FtZF9zcGVjID0gewogCS5udW1fY291bnRlcnMJCT0gTlVNX0NPVU5URVJTLAogCS5udW1fY29udHJvbHMJCT0gTlVNX0NPTlRST0xTLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMKaW5kZXggYWM2YjM1NC4uZTZhMTYwYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wNC5jCkBAIC0zOTQsMTIgKzM5NCw2IEBACiAJc2V0dXBfbnVtX2NvdW50ZXJzKCk7CiAJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CiAKLQkvKiBpbml0aWFsaXplIHNvbWUgcmVnaXN0ZXJzICovCi0JZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKQotCQltc3JzLT5jb3VudGVyc1tpXS5hZGRyID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvbnRyb2xzOyArK2kpCi0JCW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIgPSAwOwotCiAJLyogdGhlIGNvdW50ZXIgJiBjY2NyIHJlZ2lzdGVycyB3ZSBwYXkgYXR0ZW50aW9uIHRvICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7CiAJCWFkZHIgPSBwNF9jb3VudGVyc1tWSVJUX0NUUihzdGFnLCBpKV0uY291bnRlcl9hZGRyZXNzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCmluZGV4IDhlYjA1ODcuLjVkMTcyN2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMKQEAgLTM3LDE1ICszNywxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7IGkrKykgewogCQlpZiAocmVzZXJ2ZV9wZXJmY3RyX25taShNU1JfUDZfUEVSRkNUUjAgKyBpKSkKIAkJCW1zcnMtPmNvdW50ZXJzW2ldLmFkZHIgPSBNU1JfUDZfUEVSRkNUUjAgKyBpOwotCQllbHNlCi0JCQltc3JzLT5jb3VudGVyc1tpXS5hZGRyID0gMDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyBpKyspIHsKIAkJaWYgKHJlc2VydmVfZXZudHNlbF9ubWkoTVNSX1A2X0VWTlRTRUwwICsgaSkpCiAJCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gTVNSX1A2X0VWTlRTRUwwICsgaTsKLQkJZWxzZQotCQkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IDA7CiAJfQogfQogCkBAIC01Nyw3ICs1Myw3IEBACiAJaW50IGk7CiAKIAlpZiAoIXJlc2V0X3ZhbHVlKSB7Ci0JCXJlc2V0X3ZhbHVlID0ga21hbGxvYyhzaXplb2YocmVzZXRfdmFsdWVbMF0pICogbnVtX2NvdW50ZXJzLAorCQlyZXNldF92YWx1ZSA9IGt6YWxsb2Moc2l6ZW9mKHJlc2V0X3ZhbHVlWzBdKSAqIG51bV9jb3VudGVycywKIAkJCQkJR0ZQX0FUT01JQyk7CiAJCWlmICghcmVzZXRfdmFsdWUpCiAJCQlyZXR1cm47CkBAIC04Miw5ICs3OCwxOCBAQAogCiAJLyogY2xlYXIgYWxsIGNvdW50ZXJzICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7Ci0JCWlmICh1bmxpa2VseSghbXNycy0+Y29udHJvbHNbaV0uYWRkcikpCisJCWlmICh1bmxpa2VseSghbXNycy0+Y29udHJvbHNbaV0uYWRkcikpIHsKKwkJCWlmIChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkICYmICFzbXBfcHJvY2Vzc29yX2lkKCkpCisJCQkJLyoKKwkJCQkgKiBjb3VudGVyIGlzIHJlc2VydmVkLCB0aGlzIGlzIG9uIGFsbAorCQkJCSAqIGNwdXMsIHNvIHJlcG9ydCBvbmx5IGZvciBjcHUgIzAKKwkJCQkgKi8KKwkJCQlvcF94ODZfd2Fybl9yZXNlcnZlZChpKTsKIAkJCWNvbnRpbnVlOworCQl9CiAJCXJkbXNybChtc3JzLT5jb250cm9sc1tpXS5hZGRyLCB2YWwpOworCQlpZiAodmFsICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEUpCisJCQlvcF94ODZfd2Fybl9pbl91c2UoaSk7CiAJCXZhbCAmPSBtb2RlbC0+cmVzZXJ2ZWQ7CiAJCXdybXNybChtc3JzLT5jb250cm9sc1tpXS5hZGRyLCB2YWwpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmgKaW5kZXggN2I4ZTc1ZC4uZmY4MmE3NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmgKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmgKQEAgLTU3LDYgKzU3LDI2IEBACiAKIHN0cnVjdCBvcF9jb3VudGVyX2NvbmZpZzsKIAorc3RhdGljIGlubGluZSB2b2lkIG9wX3g4Nl93YXJuX2luX3VzZShpbnQgY291bnRlcikKK3sKKwkvKgorCSAqIFRoZSB3YXJuaW5nIGluZGljYXRlcyBhbiBhbHJlYWR5IHJ1bm5pbmcgY291bnRlci4gSWYKKwkgKiBvcHJvZmlsZSBkb2Vzbid0IGNvbGxlY3QgZGF0YSwgdGhlbiB0cnkgdXNpbmcgYSBkaWZmZXJlbnQKKwkgKiBwZXJmb3JtYW5jZSBjb3VudGVyIG9uIHlvdXIgcGxhdGZvcm0gdG8gbW9uaXRvciB0aGUgZGVzaXJlZAorCSAqIGV2ZW50LiBEZWxldGUgY291bnRlciAjJWQgZnJvbSB0aGUgZGVzaXJlZCBldmVudCBieSBlZGl0aW5nCisJICogdGhlIC91c3Ivc2hhcmUvb3Byb2ZpbGUvJXMvPGNwdT4vZXZlbnRzIGZpbGUuIElmIHRoZSBldmVudAorCSAqIGNhbm5vdCBiZSBtb25pdG9yZWQgYnkgYW55IG90aGVyIGNvdW50ZXIsIGNvbnRhY3QgeW91cgorCSAqIGhhcmR3YXJlIG9yIEJJT1MgdmVuZG9yLgorCSAqLworCXByX3dhcm5pbmcoIm9wcm9maWxlOiBjb3VudGVyICMlZCBvbiBjcHUgIyVkIG1heSBhbHJlYWR5IGJlIHVzZWRcbiIsCisJCSAgIGNvdW50ZXIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvcF94ODZfd2Fybl9yZXNlcnZlZChpbnQgY291bnRlcikKK3sKKwlwcl93YXJuaW5nKCJvcHJvZmlsZTogY291bnRlciAjJWQgaXMgYWxyZWFkeSByZXNlcnZlZFxuIiwgY291bnRlcik7Cit9CisKIGV4dGVybiB1NjQgb3BfeDg2X2dldF9jdHJsKHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCAqbW9kZWwsCiAJCQkgICBzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgKmNvdW50ZXJfY29uZmlnKTsKIGV4dGVybiBpbnQgb3BfeDg2X3BoeXNfdG9fdmlydChpbnQgcGh5cyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvYWNwaS5jIGIvYXJjaC94ODYvcGNpL2FjcGkuYwppbmRleCA5NTllNTQ4Li41ZjExZmY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvYWNwaS5jCisrKyBiL2FyY2gveDg2L3BjaS9hY3BpLmMKQEAgLTE1LDYgKzE1LDUxIEBACiAJaW50IGJ1c251bTsKIH07CiAKK3N0YXRpYyBib29sIHBjaV91c2VfY3JzID0gdHJ1ZTsKKworc3RhdGljIGludCBfX2luaXQgc2V0X3VzZV9jcnMoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQoreworCXBjaV91c2VfY3JzID0gdHJ1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIHBjaV91c2VfY3JzX3RhYmxlW10gX19pbml0Y29uc3QgPSB7CisJLyogaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTgzICovCisJeworCQkuY2FsbGJhY2sgPSBzZXRfdXNlX2NycywKKwkJLmlkZW50ID0gIklCTSBTeXN0ZW0geDM4MDAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIklCTSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJ4MzgwMCIpLAorCQl9LAorCX0sCisJe30KK307CisKK3ZvaWQgX19pbml0IHBjaV9hY3BpX2Nyc19xdWlya3Modm9pZCkKK3sKKwlpbnQgeWVhcjsKKworCWlmIChkbWlfZ2V0X2RhdGUoRE1JX0JJT1NfREFURSwgJnllYXIsIE5VTEwsIE5VTEwpICYmIHllYXIgPCAyMDA4KQorCQlwY2lfdXNlX2NycyA9IGZhbHNlOworCisJZG1pX2NoZWNrX3N5c3RlbShwY2lfdXNlX2Nyc190YWJsZSk7CisKKwkvKgorCSAqIElmIHRoZSB1c2VyIHNwZWNpZmllcyAicGNpPXVzZV9jcnMiIG9yICJwY2k9bm9jcnMiIGV4cGxpY2l0bHksIHRoYXQKKwkgKiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYW55dGhpbmcgd2UgZmlndXJlZCBvdXQgYWJvdmUuCisJICovCisJaWYgKHBjaV9wcm9iZSAmIFBDSV9ST09UX05PX0NSUykKKwkJcGNpX3VzZV9jcnMgPSBmYWxzZTsKKwllbHNlIGlmIChwY2lfcHJvYmUgJiBQQ0lfVVNFX19DUlMpCisJCXBjaV91c2VfY3JzID0gdHJ1ZTsKKworCXByaW50ayhLRVJOX0lORk8gIlBDSTogJXMgaG9zdCBicmlkZ2Ugd2luZG93cyBmcm9tIEFDUEk7ICIKKwkgICAgICAgImlmIG5lY2Vzc2FyeSwgdXNlIFwicGNpPSVzXCIgYW5kIHJlcG9ydCBhIGJ1Z1xuIiwKKwkgICAgICAgcGNpX3VzZV9jcnMgPyAiVXNpbmciIDogIklnbm9yaW5nIiwKKwkgICAgICAgcGNpX3VzZV9jcnMgPyAibm9jcnMiIDogInVzZV9jcnMiKTsKK30KKwogc3RhdGljIGFjcGlfc3RhdHVzCiByZXNvdXJjZV90b19hZGRyKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwKIAkJCXN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3M2NCAqYWRkcikKQEAgLTQ1LDIwICs5MCw2IEBACiAJcmV0dXJuIEFFX09LOwogfQogCi1zdGF0aWMgaW50Ci1idXNfaGFzX3RyYW5zcGFyZW50X2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKLQkJdTE2IGNsYXNzID0gZGV2LT5jbGFzcyA+PiA4OwotCi0JCWlmIChjbGFzcyA9PSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSAmJiBkZXYtPnRyYW5zcGFyZW50KQotCQkJcmV0dXJuIHRydWU7Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQogc3RhdGljIHZvaWQKIGFsaWduX3Jlc291cmNlKHN0cnVjdCBhY3BpX2RldmljZSAqYnJpZGdlLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKIHsKQEAgLTkyLDEyICsxMjMsOCBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByZXNvdXJjZSAqcm9vdDsKLQlpbnQgbWF4X3Jvb3RfYnVzX3Jlc291cmNlcyA9IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsKIAl1NjQgc3RhcnQsIGVuZDsKIAotCWlmIChidXNfaGFzX3RyYW5zcGFyZW50X2JyaWRnZShpbmZvLT5idXMpKQotCQltYXhfcm9vdF9idXNfcmVzb3VyY2VzIC09IDM7Ci0KIAlzdGF0dXMgPSByZXNvdXJjZV90b19hZGRyKGFjcGlfcmVzLCAmYWRkcik7CiAJaWYgKCFBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKIAkJcmV0dXJuIEFFX09LOwpAQCAtMTE1LDE1ICsxNDIsNiBAQAogCiAJc3RhcnQgPSBhZGRyLm1pbmltdW0gKyBhZGRyLnRyYW5zbGF0aW9uX29mZnNldDsKIAllbmQgPSBzdGFydCArIGFkZHIuYWRkcmVzc19sZW5ndGggLSAxOwotCWlmIChpbmZvLT5yZXNfbnVtID49IG1heF9yb290X2J1c19yZXNvdXJjZXMpIHsKLQkJaWYgKHBjaV9wcm9iZSAmIFBDSV9VU0VfX0NSUykKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogRmFpbGVkIHRvIGFsbG9jYXRlICIKLQkJCSAgICAgICAiMHglbHgtMHglbHggZnJvbSAlcyBmb3IgJXMgZHVlIHRvIF9DUlMgIgotCQkJICAgICAgICJyZXR1cm5pbmcgbW9yZSB0aGFuICVkIHJlc291cmNlIGRlc2NyaXB0b3JzXG4iLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSBzdGFydCwgKHVuc2lnbmVkIGxvbmcpIGVuZCwKLQkJCSAgICAgICByb290LT5uYW1lLCBpbmZvLT5uYW1lLCBtYXhfcm9vdF9idXNfcmVzb3VyY2VzKTsKLQkJcmV0dXJuIEFFX09LOwotCX0KIAogCXJlcyA9ICZpbmZvLT5yZXNbaW5mby0+cmVzX251bV07CiAJcmVzLT5uYW1lID0gaW5mby0+bmFtZTsKQEAgLTEzMyw3ICsxNTEsNyBAQAogCXJlcy0+Y2hpbGQgPSBOVUxMOwogCWFsaWduX3Jlc291cmNlKGluZm8tPmJyaWRnZSwgcmVzKTsKIAotCWlmICghKHBjaV9wcm9iZSAmIFBDSV9VU0VfX0NSUykpIHsKKwlpZiAoIXBjaV91c2VfY3JzKSB7CiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmluZm8tPmJyaWRnZS0+ZGV2LAogCQkJICAgImhvc3QgYnJpZGdlIHdpbmRvdyAlcFIgKGlnbm9yZWQpXG4iLCByZXMpOwogCQlyZXR1cm4gQUVfT0s7CkBAIC0xNDMsNyArMTYxLDcgQEAKIAkJZGV2X2VycigmaW5mby0+YnJpZGdlLT5kZXYsCiAJCQkiY2FuJ3QgYWxsb2NhdGUgaG9zdCBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKIAl9IGVsc2UgewotCQlpbmZvLT5idXMtPnJlc291cmNlW2luZm8tPnJlc19udW1dID0gcmVzOworCQlwY2lfYnVzX2FkZF9yZXNvdXJjZShpbmZvLT5idXMsIHJlcywgMCk7CiAJCWluZm8tPnJlc19udW0rKzsKIAkJaWYgKGFkZHIudHJhbnNsYXRpb25fb2Zmc2V0KQogCQkJZGV2X2luZm8oJmluZm8tPmJyaWRnZS0+ZGV2LCAiaG9zdCBicmlkZ2Ugd2luZG93ICVwUiAiCkBAIC0xNjQsMTAgKzE4Miw4IEBACiAJc3RydWN0IHBjaV9yb290X2luZm8gaW5mbzsKIAlzaXplX3Qgc2l6ZTsKIAotCWlmICghKHBjaV9wcm9iZSAmIFBDSV9VU0VfX0NSUykpCi0JCWRldl9pbmZvKCZkZXZpY2UtPmRldiwKLQkJCSAiaWdub3JpbmcgaG9zdCBicmlkZ2Ugd2luZG93cyBmcm9tIEFDUEk7ICIKLQkJCSAiYm9vdCB3aXRoIFwicGNpPXVzZV9jcnNcIiB0byB1c2UgdGhlbVxuIik7CisJaWYgKHBjaV91c2VfY3JzKQorCQlwY2lfYnVzX3JlbW92ZV9yZXNvdXJjZXMoYnVzKTsKIAogCWluZm8uYnJpZGdlID0gZGV2aWNlOwogCWluZm8uYnVzID0gYnVzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2J1c19udW1hLmMgYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuYwppbmRleCBmOTM5ZDYwLi4xMmQ1NGZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvYnVzX251bWEuYworKysgYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuYwpAQCAtMzYsMTMgKzM2LDE0IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogcGVlciByb290IGJ1cyAlMDJ4IHJlcyB1cGRhdGVkIGZyb20gcGNpIGNvbmZcbiIsCiAJCQliLT5udW1iZXIpOwogCisJcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKGIpOwogCWluZm8gPSAmcGNpX3Jvb3RfaW5mb1tpXTsKIAlmb3IgKGogPSAwOyBqIDwgaW5mby0+cmVzX251bTsgaisrKSB7CiAJCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCQlzdHJ1Y3QgcmVzb3VyY2UgKnJvb3Q7CiAKIAkJcmVzID0gJmluZm8tPnJlc1tqXTsKLQkJYi0+cmVzb3VyY2Vbal0gPSByZXM7CisJCXBjaV9idXNfYWRkX3Jlc291cmNlKGIsIHJlcywgMCk7CiAJCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKIAkJCXJvb3QgPSAmaW9wb3J0X3Jlc291cmNlOwogCQllbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvYnVzX251bWEuaCBiL2FyY2gveDg2L3BjaS9idXNfbnVtYS5oCmluZGV4IGFkYmMyM2ZlLi43MzFiNjRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvYnVzX251bWEuaAorKysgYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuaApAQCAtMiw4ICsyLDcgQEAKIAogLyoKICAqIHN1YiBidXMgKHRyYW5zcGFyZW50KSB3aWxsIHVzZSBlbnRyZXMgZnJvbSAzIHRvIHN0b3JlIGV4dHJhIGZyb20KLSAqIHJvb3QsIHNvIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHNsb3QgdGhlcmUsIFNob3VsZCB3ZQotICogaW5jcmVhc2UgUENJX0JVU19OVU1fUkVTT1VSQ0VTPworICogcm9vdCwgc28gbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggc2xvdCB0aGVyZS4KICAqLwogI2RlZmluZSBSRVNfTlVNIDE2CiBzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvY29tbW9uLmMgYi9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKaW5kZXggZDI1NTJjNi4uMzczNjE3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L3BjaS9jb21tb24uYwpAQCAtNTIwLDYgKzUyMCw5IEBACiAJfSBlbHNlIGlmICghc3RyY21wKHN0ciwgInVzZV9jcnMiKSkgewogCQlwY2lfcHJvYmUgfD0gUENJX1VTRV9fQ1JTOwogCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAibm9jcnMiKSkgeworCQlwY2lfcHJvYmUgfD0gUENJX1JPT1RfTk9fQ1JTOworCQlyZXR1cm4gTlVMTDsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAiZWFybHlkdW1wIikpIHsKIAkJcGNpX2Vhcmx5X2R1bXBfcmVncyA9IDE7CiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2kzODYuYyBiL2FyY2gveDg2L3BjaS9pMzg2LmMKaW5kZXggNWRjOWU4Yy4uNWE4ZmJmOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2kzODYuYworKysgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCkBAIC02MCwyMiArNjAsMjAgQEAKICAqIGJ1dCB3ZSB3YW50IHRvIHRyeSB0byBhdm9pZCBhbGxvY2F0aW5nIGF0IDB4MjkwMC0weDJiZmYKICAqIHdoaWNoIG1pZ2h0IGhhdmUgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KLXZvaWQKLXBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCityZXNvdXJjZV9zaXplX3QKK3BjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKLQogCQlpZiAoc2tpcF9pc2FfaW9yZXNvdXJjZV9hbGlnbihkZXYpKQotCQkJcmV0dXJuOwotCQlpZiAoc3RhcnQgJiAweDMwMCkgeworCQkJcmV0dXJuIHN0YXJ0OworCQlpZiAoc3RhcnQgJiAweDMwMCkKIAkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwotCQkJcmVzLT5zdGFydCA9IHN0YXJ0OwotCQl9CiAJfQorCXJldHVybiBzdGFydDsKIH0KIEVYUE9SVF9TWU1CT0wocGNpYmlvc19hbGlnbl9yZXNvdXJjZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pcnEuYyBiL2FyY2gveDg2L3BjaS9pcnEuYwppbmRleCAwNjk2ZDUwLi5iMDJmNmQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvaXJxLmMKKysrIGIvYXJjaC94ODYvcGNpL2lycS5jCkBAIC01OTAsNiArNTkwLDggQEAKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMToKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMjoKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMzoKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfQ1BUX0xQQzE6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NQVF9MUEMyOgogCQlyLT5uYW1lID0gIlBJSVgvSUNIIjsKIAkJci0+Z2V0ID0gcGlycV9waWl4X2dldDsKIAkJci0+c2V0ID0gcGlycV9waWl4X3NldDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9tbWNvbmZpZy1zaGFyZWQuYyBiL2FyY2gveDg2L3BjaS9tbWNvbmZpZy1zaGFyZWQuYwppbmRleCBiMTlkMWU1Li44ZjNmOWE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMKKysrIGIvYXJjaC94ODYvcGNpL21tY29uZmlnLXNoYXJlZC5jCkBAIC0zMDMsMjIgKzMwMywxNyBAQAogewogCXN0cnVjdCBwY2lfbW1jZmdfcmVnaW9uICpjZmcsICpjZmd4OwogCi0JLyogbGFzdCBvbmUqLwotCWNmZyA9IGxpc3RfZW50cnkocGNpX21tY2ZnX2xpc3QucHJldiwgdHlwZW9mKCpjZmcpLCBsaXN0KTsKLQlpZiAoY2ZnKQotCQlpZiAoY2ZnLT5lbmRfYnVzIDwgY2ZnLT5zdGFydF9idXMpCi0JCQljZmctPmVuZF9idXMgPSAyNTU7Ci0KLQlpZiAobGlzdF9pc19zaW5ndWxhcigmcGNpX21tY2ZnX2xpc3QpKQotCQlyZXR1cm47Ci0KLQkvKiBkb24ndCBvdmVybGFwIHBsZWFzZSAqLworCS8qIEZpeHVwIG92ZXJsYXBzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjZmcsICZwY2lfbW1jZmdfbGlzdCwgbGlzdCkgewogCQlpZiAoY2ZnLT5lbmRfYnVzIDwgY2ZnLT5zdGFydF9idXMpCiAJCQljZmctPmVuZF9idXMgPSAyNTU7CiAKKwkJLyogRG9uJ3QgYWNjZXNzIHRoZSBsaXN0IGhlYWQgISAqLworCQlpZiAoY2ZnLT5saXN0Lm5leHQgPT0gJnBjaV9tbWNmZ19saXN0KQorCQkJYnJlYWs7CisKIAkJY2ZneCA9IGxpc3RfZW50cnkoY2ZnLT5saXN0Lm5leHQsIHR5cGVvZigqY2ZnKSwgbGlzdCk7Ci0JCWlmIChjZmcgIT0gY2ZneCAmJiBjZmctPmVuZF9idXMgPj0gY2ZneC0+c3RhcnRfYnVzKQorCQlpZiAoY2ZnLT5lbmRfYnVzID49IGNmZ3gtPnN0YXJ0X2J1cykKIAkJCWNmZy0+ZW5kX2J1cyA9IGNmZ3gtPnN0YXJ0X2J1cyAtIDE7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL251bWFxXzMyLmMgYi9hcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYwppbmRleCA4ZWIyOTVlLi44ODg0YTFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYworKysgYi9hcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYwpAQCAtOCw5ICs4LDcgQEAKICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KICNpbmNsdWRlIDxhc20vcGNpX3g4Ni5oPgotCi0jZGVmaW5lIFhRVUFEX1BPUlRJT19CQVNFIDB4ZmU0MDAwMDAKLSNkZWZpbmUgWFFVQURfUE9SVElPX1FVQUQgMHg0MDAwMCAgLyogMjU2ayBwZXIgcXVhZC4gKi8KKyNpbmNsdWRlIDxhc20vbnVtYXEuaD4KIAogI2RlZmluZSBCVVMyUVVBRChnbG9iYWwpIChtcF9idXNfaWRfdG9fbm9kZVtnbG9iYWxdKQogCkBAIC0xOCw4ICsxNiw2IEBACiAKICNkZWZpbmUgUVVBRExPQ0FMMkJVUyhxdWFkLGxvY2FsKSAocXVhZF9sb2NhbF90b19tcF9idXNfaWRbcXVhZF1bbG9jYWxdKQogCi0jZGVmaW5lIFhRVUFEX1BPUlRfQUREUihwb3J0LCBxdWFkKSAoeHF1YWRfcG9ydGlvICsgKFhRVUFEX1BPUlRJT19RVUFEKnF1YWQpICsgcG9ydCkKLQogI2RlZmluZSBQQ0lfQ09ORjFfTVFfQUREUkVTUyhidXMsIGRldmZuLCByZWcpIFwKIAkoMHg4MDAwMDAwMCB8IChCVVMyTE9DQUwoYnVzKSA8PCAxNikgfCAoZGV2Zm4gPDwgOCkgfCAocmVnICYgfjMpKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4uYyBiL2FyY2gveDg2L3Rvb2xzL3Rlc3RfZ2V0X2xlbi5jCmluZGV4IGJlZThkNmEuLjEzNDAzZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Rvb2xzL3Rlc3RfZ2V0X2xlbi5jCisrKyBiL2FyY2gveDg2L3Rvb2xzL3Rlc3RfZ2V0X2xlbi5jCkBAIC00Myw3ICs0Myw3IEBACiBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogewogCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IG9iamR1bXAgLWQgYS5vdXQgfCBhd2sgLWYgZGlzdGlsbC5hd2sgfCIKLQkJIiAlcyBbLXl8LW5dIFstdl0gXG4iLCBwcm9nKTsKKwkJIiAlcyBbLXl8LW5dIFstdl1cbiIsIHByb2cpOwogCWZwcmludGYoc3RkZXJyLCAiXHQteQk2NGJpdCBtb2RlXG4iKTsKIAlmcHJpbnRmKHN0ZGVyciwgIlx0LW4JMzJiaXQgbW9kZVxuIik7CiAJZnByaW50ZihzdGRlcnIsICJcdC12CXZlcmJvc2UgbW9kZVxuIik7CkBAIC02OSw3ICs2OSw3IEBACiAKIHN0YXRpYyB2b2lkIGR1bXBfaW5zbihGSUxFICpmcCwgc3RydWN0IGluc24gKmluc24pCiB7Ci0JZnByaW50ZihmcCwgIkluc3RydWN0aW9uID0geyBcbiIpOworCWZwcmludGYoZnAsICJJbnN0cnVjdGlvbiA9IHtcbiIpOwogCWR1bXBfZmllbGQoZnAsICJwcmVmaXhlcyIsICJcdCIsCSZpbnNuLT5wcmVmaXhlcyk7CiAJZHVtcF9maWVsZChmcCwgInJleF9wcmVmaXgiLCAiXHQiLAkmaW5zbi0+cmV4X3ByZWZpeCk7CiAJZHVtcF9maWVsZChmcCwgInZleF9wcmVmaXgiLCAiXHQiLAkmaW5zbi0+dmV4X3ByZWZpeCk7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYTEzODc3MC4uNzZiZjM1NSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMzk0LDcgKzM5NCw3IEBACiAjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkoMSkKIAogZXh0ZXJuICB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpOworCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCk7CiAKIC8qCiAgKiByZW1hcCBhIHBoeXNpY2FsIHBhZ2UgYHBmbicgb2Ygc2l6ZSBgc2l6ZScgd2l0aCBwYWdlIHByb3RlY3Rpb24gYHByb3QnCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcGNpLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcGNpLmMKaW5kZXggYjdjMDczNC4uY2QxMDI2OSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3BjaS5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wY2kuYwpAQCAtNjksMjYgKzY5LDI1IEBACiAgKiBidXQgd2Ugd2FudCB0byB0cnkgdG8gYXZvaWQgYWxsb2NhdGluZyBhdCAweDI5MDAtMHgyYmZmCiAgKiB3aGljaCBtaWdodCBoYXZlIGJlIG1pcnJvcmVkIGF0IDB4MDEwMC0weDAzZmYuLgogICovCi12b2lkCi1wY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKLSAgICAJCSAgICAgICByZXNvdXJjZV9zaXplX3QgYWxpZ24pCityZXNvdXJjZV9zaXplX3QKK3BjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCisJCSAgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKLQogCQlpZiAoc2l6ZSA+IDB4MTAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlBDSTogSS9PIFJlZ2lvbiAlcy8lZCB0b28gbGFyZ2UiCiAJCQkgICAgICAgIiAoJWxkIGJ5dGVzKVxuIiwgcGNpX25hbWUoZGV2KSwKIAkJCSAgICAgICBkZXYtPnJlc291cmNlIC0gcmVzLCBzaXplKTsKIAkJfQogCi0JCWlmIChzdGFydCAmIDB4MzAwKSB7CisJCWlmIChzdGFydCAmIDB4MzAwKQogCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCX0KIAl9CisKKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIGludApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvbW0vY2FjaGUuYyBiL2FyY2gveHRlbnNhL21tL2NhY2hlLmMKaW5kZXggM2JhOTkwYy4uODVkZjQ2NSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbW0vY2FjaGUuYworKysgYi9hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jCkBAIC0xNDcsOSArMTQ3LDkgQEAKICNlbmRpZgogCiB2b2lkCi11cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpCit1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKIHsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4oKnB0ZXApOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCiAJaWYgKCFwZm5fdmFsaWQocGZuKSkKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jZ3JvdXAuYyBiL2Jsb2NrL2Jsay1jZ3JvdXAuYwppbmRleCAxZmEyNjU0Li5jODVkNzRjIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY2dyb3VwLmMKKysrIGIvYmxvY2svYmxrLWNncm91cC5jCkBAIC0yMywyMCArMjMsNiBAQAogc3RydWN0IGJsa2lvX2Nncm91cCBibGtpb19yb290X2Nncm91cCA9IHsgLndlaWdodCA9IDIqQkxLSU9fV0VJR0hUX0RFRkFVTFQgfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGJsa2lvX3Jvb3RfY2dyb3VwKTsKIAotYm9vbCBibGtpb2NnX2Nzc190cnlnZXQoc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2cpCi17Ci0JaWYgKCFjc3NfdHJ5Z2V0KCZibGtjZy0+Y3NzKSkKLQkJcmV0dXJuIGZhbHNlOwotCXJldHVybiB0cnVlOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoYmxraW9jZ19jc3NfdHJ5Z2V0KTsKLQotdm9pZCBibGtpb2NnX2Nzc19wdXQoc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2cpCi17Ci0JY3NzX3B1dCgmYmxrY2ctPmNzcyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChibGtpb2NnX2Nzc19wdXQpOwotCiBzdHJ1Y3QgYmxraW9fY2dyb3VwICpjZ3JvdXBfdG9fYmxraW9fY2dyb3VwKHN0cnVjdCBjZ3JvdXAgKmNncm91cCkKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGNncm91cF9zdWJzeXNfc3RhdGUoY2dyb3VwLCBibGtpb19zdWJzeXNfaWQpLApAQCAtMTQ3LDE2ICsxMzMsMTYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlibGtjZyA9IGNncm91cF90b19ibGtpb19jZ3JvdXAoY2dyb3VwKTsKKwlzcGluX2xvY2soJmJsa2lvX2xpc3RfbG9jayk7CiAJc3Bpbl9sb2NrX2lycSgmYmxrY2ctPmxvY2spOwogCWJsa2NnLT53ZWlnaHQgPSAodW5zaWduZWQgaW50KXZhbDsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShibGtnLCBuLCAmYmxrY2ctPmJsa2dfbGlzdCwgYmxrY2dfbm9kZSkgewotCQlzcGluX2xvY2soJmJsa2lvX2xpc3RfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxraW9wLCAmYmxraW9fbGlzdCwgbGlzdCkKIAkJCWJsa2lvcC0+b3BzLmJsa2lvX3VwZGF0ZV9ncm91cF93ZWlnaHRfZm4oYmxrZywKIAkJCQkJYmxrY2ctPndlaWdodCk7Ci0JCXNwaW5fdW5sb2NrKCZibGtpb19saXN0X2xvY2spOwogCX0KIAlzcGluX3VubG9ja19pcnEoJmJsa2NnLT5sb2NrKTsKKwlzcGluX3VubG9jaygmYmxraW9fbGlzdF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5oIGIvYmxvY2svYmxrLWNncm91cC5oCmluZGV4IDRkMzE2ZGYuLjg0YmY3NDUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuaAorKysgYi9ibG9jay9ibGstY2dyb3VwLmgKQEAgLTQzLDkgKzQzLDYgQEAKIAl1bnNpZ25lZCBsb25nIHNlY3RvcnM7CiB9OwogCi1leHRlcm4gYm9vbCBibGtpb2NnX2Nzc190cnlnZXQoc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2cpOwotZXh0ZXJuIHZvaWQgYmxraW9jZ19jc3NfcHV0KHN0cnVjdCBibGtpb19jZ3JvdXAgKmJsa2NnKTsKLQogdHlwZWRlZiB2b2lkIChibGtpb191bmxpbmtfZ3JvdXBfZm4pICh2b2lkICprZXksIHN0cnVjdCBibGtpb19ncm91cCAqYmxrZyk7CiB0eXBlZGVmIHZvaWQgKGJsa2lvX3VwZGF0ZV9ncm91cF93ZWlnaHRfZm4pIChzdHJ1Y3QgYmxraW9fZ3JvdXAgKmJsa2csCiAJCQkJCQl1bnNpZ25lZCBpbnQgd2VpZ2h0KTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDcxODg5N2U2Li45ZmUxNzRkIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCisrKyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTExNDcsNyArMTE0Nyw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBxdWV1ZV9zaG91bGRfcGx1ZyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKLQlyZXR1cm4gIShibGtfcXVldWVfbm9ucm90KHEpICYmIGJsa19xdWV1ZV9xdWV1aW5nKHEpKTsKKwlyZXR1cm4gIShibGtfcXVldWVfbm9ucm90KHEpICYmIGJsa19xdWV1ZV90YWdnZWQocSkpOwogfQogCiBzdGF0aWMgaW50IF9fbWFrZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCkBAIC0xNDkwLDkgKzE0OTAsOSBAQAogLyoKICAqIFdlIG9ubHkgd2FudCBvbmUgLT5tYWtlX3JlcXVlc3RfZm4gdG8gYmUgYWN0aXZlIGF0IGEgdGltZSwKICAqIGVsc2Ugc3RhY2sgdXNhZ2Ugd2l0aCBzdGFja2VkIGRldmljZXMgY291bGQgYmUgYSBwcm9ibGVtLgotICogU28gdXNlIGN1cnJlbnQtPmJpb197bGlzdCx0YWlsfSB0byBrZWVwIGEgbGlzdCBvZiByZXF1ZXN0cworICogU28gdXNlIGN1cnJlbnQtPmJpb19saXN0IHRvIGtlZXAgYSBsaXN0IG9mIHJlcXVlc3RzCiAgKiBzdWJtaXRlZCBieSBhIG1ha2VfcmVxdWVzdF9mbiBmdW5jdGlvbi4KLSAqIGN1cnJlbnQtPmJpb190YWlsIGlzIGFsc28gdXNlZCBhcyBhIGZsYWcgdG8gc2F5IGlmCisgKiBjdXJyZW50LT5iaW9fbGlzdCBpcyBhbHNvIHVzZWQgYXMgYSBmbGFnIHRvIHNheSBpZgogICogZ2VuZXJpY19tYWtlX3JlcXVlc3QgaXMgY3VycmVudGx5IGFjdGl2ZSBpbiB0aGlzIHRhc2sgb3Igbm90LgogICogSWYgaXQgaXMgTlVMTCwgdGhlbiBubyBtYWtlX3JlcXVlc3QgaXMgYWN0aXZlLiAgSWYgaXQgaXMgbm9uLU5VTEwsCiAgKiB0aGVuIGEgbWFrZV9yZXF1ZXN0IGlzIGFjdGl2ZSwgYW5kIG5ldyByZXF1ZXN0cyBzaG91bGQgYmUgYWRkZWQKQEAgLTE1MDAsMTEgKzE1MDAsMTEgQEAKICAqLwogdm9pZCBnZW5lcmljX21ha2VfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JaWYgKGN1cnJlbnQtPmJpb190YWlsKSB7CisJc3RydWN0IGJpb19saXN0IGJpb19saXN0X29uX3N0YWNrOworCisJaWYgKGN1cnJlbnQtPmJpb19saXN0KSB7CiAJCS8qIG1ha2VfcmVxdWVzdCBpcyBhY3RpdmUgKi8KLQkJKihjdXJyZW50LT5iaW9fdGFpbCkgPSBiaW87Ci0JCWJpby0+YmlfbmV4dCA9IE5VTEw7Ci0JCWN1cnJlbnQtPmJpb190YWlsID0gJmJpby0+YmlfbmV4dDsKKwkJYmlvX2xpc3RfYWRkKGN1cnJlbnQtPmJpb19saXN0LCBiaW8pOwogCQlyZXR1cm47CiAJfQogCS8qIGZvbGxvd2luZyBsb29wIG1heSBiZSBhIGJpdCBub24tb2J2aW91cywgYW5kIHNvIGRlc2VydmVzIHNvbWUKQEAgLTE1MTIsMzAgKzE1MTIsMjcgQEAKIAkgKiBCZWZvcmUgZW50ZXJpbmcgdGhlIGxvb3AsIGJpby0+YmlfbmV4dCBpcyBOVUxMIChhcyBhbGwgY2FsbGVycwogCSAqIGVuc3VyZSB0aGF0KSBzbyB3ZSBoYXZlIGEgbGlzdCB3aXRoIGEgc2luZ2xlIGJpby4KIAkgKiBXZSBwcmV0ZW5kIHRoYXQgd2UgaGF2ZSBqdXN0IHRha2VuIGl0IG9mZiBhIGxvbmdlciBsaXN0LCBzbwotCSAqIHdlIGFzc2lnbiBiaW9fbGlzdCB0byB0aGUgbmV4dCAod2hpY2ggaXMgTlVMTCkgYW5kIGJpb190YWlsCi0JICogdG8gJmJpb19saXN0LCB0aHVzIGluaXRpYWxpc2luZyB0aGUgYmlvX2xpc3Qgb2YgbmV3IGJpb3MgdG8gYmUKKwkgKiB3ZSBhc3NpZ24gYmlvX2xpc3QgdG8gYSBwb2ludGVyIHRvIHRoZSBiaW9fbGlzdF9vbl9zdGFjaywKKwkgKiB0aHVzIGluaXRpYWxpc2luZyB0aGUgYmlvX2xpc3Qgb2YgbmV3IGJpb3MgdG8gYmUKIAkgKiBhZGRlZC4gIF9fZ2VuZXJpY19tYWtlX3JlcXVlc3QgbWF5IGluZGVlZCBhZGQgc29tZSBtb3JlIGJpb3MKIAkgKiB0aHJvdWdoIGEgcmVjdXJzaXZlIGNhbGwgdG8gZ2VuZXJpY19tYWtlX3JlcXVlc3QuICBJZiBpdAogCSAqIGRpZCwgd2UgZmluZCBhIG5vbi1OVUxMIHZhbHVlIGluIGJpb19saXN0IGFuZCByZS1lbnRlciB0aGUgbG9vcAogCSAqIGZyb20gdGhlIHRvcC4gIEluIHRoaXMgY2FzZSB3ZSByZWFsbHkgZGlkIGp1c3QgdGFrZSB0aGUgYmlvCi0JICogb2YgdGhlIHRvcCBvZiB0aGUgbGlzdCAobm8gcHJldGVuZGluZykgYW5kIHNvIGZpeHVwIGJpb19saXN0IGFuZAotCSAqIGJpb190YWlsIG9yIGJpX25leHQsIGFuZCBjYWxsIGludG8gX19nZW5lcmljX21ha2VfcmVxdWVzdCBhZ2Fpbi4KKwkgKiBvZiB0aGUgdG9wIG9mIHRoZSBsaXN0IChubyBwcmV0ZW5kaW5nKSBhbmQgc28gcmVtb3ZlIGl0IGZyb20KKwkgKiBiaW9fbGlzdCwgYW5kIGNhbGwgaW50byBfX2dlbmVyaWNfbWFrZV9yZXF1ZXN0IGFnYWluLgogCSAqCiAJICogVGhlIGxvb3Agd2FzIHN0cnVjdHVyZWQgbGlrZSB0aGlzIHRvIG1ha2Ugb25seSBvbmUgY2FsbCB0bwogCSAqIF9fZ2VuZXJpY19tYWtlX3JlcXVlc3QgKHdoaWNoIGlzIGltcG9ydGFudCBhcyBpdCBpcyBsYXJnZSBhbmQKIAkgKiBpbmxpbmVkKSBhbmQgdG8ga2VlcCB0aGUgc3RydWN0dXJlIHNpbXBsZS4KIAkgKi8KIAlCVUdfT04oYmlvLT5iaV9uZXh0KTsKKwliaW9fbGlzdF9pbml0KCZiaW9fbGlzdF9vbl9zdGFjayk7CisJY3VycmVudC0+YmlvX2xpc3QgPSAmYmlvX2xpc3Rfb25fc3RhY2s7CiAJZG8gewotCQljdXJyZW50LT5iaW9fbGlzdCA9IGJpby0+YmlfbmV4dDsKLQkJaWYgKGJpby0+YmlfbmV4dCA9PSBOVUxMKQotCQkJY3VycmVudC0+YmlvX3RhaWwgPSAmY3VycmVudC0+YmlvX2xpc3Q7Ci0JCWVsc2UKLQkJCWJpby0+YmlfbmV4dCA9IE5VTEw7CiAJCV9fZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKLQkJYmlvID0gY3VycmVudC0+YmlvX2xpc3Q7CisJCWJpbyA9IGJpb19saXN0X3BvcChjdXJyZW50LT5iaW9fbGlzdCk7CiAJfSB3aGlsZSAoYmlvKTsKLQljdXJyZW50LT5iaW9fdGFpbCA9IE5VTEw7IC8qIGRlYWN0aXZhdGUgKi8KKwljdXJyZW50LT5iaW9fbGlzdCA9IE5VTEw7IC8qIGRlYWN0aXZhdGUgKi8KIH0KIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19tYWtlX3JlcXVlc3QpOwogCkBAIC0xNjE3LDggKzE2MTQsNyBAQAogCSAqIGxpbWl0YXRpb24uCiAJICovCiAJYmxrX3JlY2FsY19ycV9zZWdtZW50cyhycSk7Ci0JaWYgKHJxLT5ucl9waHlzX3NlZ21lbnRzID4gcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSkgfHwKLQkgICAgcnEtPm5yX3BoeXNfc2VnbWVudHMgPiBxdWV1ZV9tYXhfaHdfc2VnbWVudHMocSkpIHsKKwlpZiAocnEtPm5yX3BoeXNfc2VnbWVudHMgPiBxdWV1ZV9tYXhfc2VnbWVudHMocSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogb3ZlciBtYXggc2VnbWVudHMgbGltaXQuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTE4NTksMTUgKzE4NTUsOCBAQAogCSAqIGFuZCB0byBpdCBpcyBmcmVlZCBpcyBhY2NvdW50ZWQgYXMgaW8gdGhhdCBpcyBpbiBwcm9ncmVzcyBhdAogCSAqIHRoZSBkcml2ZXIgc2lkZS4KIAkgKi8KLQlpZiAoYmxrX2FjY291bnRfcnEocnEpKSB7CisJaWYgKGJsa19hY2NvdW50X3JxKHJxKSkKIAkJcS0+aW5fZmxpZ2h0W3JxX2lzX3N5bmMocnEpXSsrOwotCQkvKgotCQkgKiBNYXJrIHRoaXMgZGV2aWNlIGFzIHN1cHBvcnRpbmcgaGFyZHdhcmUgcXVldWluZywgaWYKLQkJICogd2UgaGF2ZSBtb3JlIElPcyBpbiBmbGlnaHQgdGhhbiA0LgotCQkgKi8KLQkJaWYgKCFibGtfcXVldWVfcXVldWluZyhxKSAmJiBxdWV1ZV9pbl9mbGlnaHQocSkgPiA0KQotCQkJc2V0X2JpdChRVUVVRV9GTEFHX0NRLCAmcS0+cXVldWVfZmxhZ3MpOwotCX0KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9ibG9jay9ibGstaW9jLmMgYi9ibG9jay9ibGstaW9jLmMKaW5kZXggOThlNmJmNi4uM2Y2NWM4YSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWlvYy5jCisrKyBiL2Jsb2NrL2Jsay1pb2MuYwpAQCAtOTEsNyArOTEsNyBAQAogCQlzcGluX2xvY2tfaW5pdCgmcmV0LT5sb2NrKTsKIAkJcmV0LT5pb3ByaW9fY2hhbmdlZCA9IDA7CiAJCXJldC0+aW9wcmlvID0gMDsKLQkJcmV0LT5sYXN0X3dhaXRlZCA9IGppZmZpZXM7IC8qIGRvZXNuJ3QgbWF0dGVyLi4uICovCisJCXJldC0+bGFzdF93YWl0ZWQgPSAwOyAvKiBkb2Vzbid0IG1hdHRlci4uLiAqLwogCQlyZXQtPm5yX2JhdGNoX3JlcXVlc3RzID0gMDsgLyogYmVjYXVzZSB0aGlzIGlzIDAgKi8KIAkJSU5JVF9SQURJWF9UUkVFKCZyZXQtPnJhZGl4X3Jvb3QsIEdGUF9BVE9NSUMgfCBfX0dGUF9ISUdIKTsKIAkJSU5JVF9ITElTVF9IRUFEKCZyZXQtPmNpY19saXN0KTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tZXJnZS5jIGIvYmxvY2svYmxrLW1lcmdlLmMKaW5kZXggOTljYjVjZi4uNWU3ZGM5OSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1lcmdlLmMKKysrIGIvYmxvY2svYmxrLW1lcmdlLmMKQEAgLTIwNiw4ICsyMDYsNyBAQAogewogCWludCBucl9waHlzX3NlZ3MgPSBiaW9fcGh5c19zZWdtZW50cyhxLCBiaW8pOwogCi0JaWYgKHJlcS0+bnJfcGh5c19zZWdtZW50cyArIG5yX3BoeXNfc2VncyA+IHF1ZXVlX21heF9od19zZWdtZW50cyhxKSB8fAotCSAgICByZXEtPm5yX3BoeXNfc2VnbWVudHMgKyBucl9waHlzX3NlZ3MgPiBxdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxKSkgeworCWlmIChyZXEtPm5yX3BoeXNfc2VnbWVudHMgKyBucl9waHlzX3NlZ3MgPiBxdWV1ZV9tYXhfc2VnbWVudHMocSkpIHsKIAkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX05PTUVSR0U7CiAJCWlmIChyZXEgPT0gcS0+bGFzdF9tZXJnZSkKIAkJCXEtPmxhc3RfbWVyZ2UgPSBOVUxMOwpAQCAtMzAwLDEwICsyOTksNyBAQAogCQl0b3RhbF9waHlzX3NlZ21lbnRzLS07CiAJfQogCi0JaWYgKHRvdGFsX3BoeXNfc2VnbWVudHMgPiBxdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAodG90YWxfcGh5c19zZWdtZW50cyA+IHF1ZXVlX21heF9od19zZWdtZW50cyhxKSkKKwlpZiAodG90YWxfcGh5c19zZWdtZW50cyA+IHF1ZXVlX21heF9zZWdtZW50cyhxKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBNZXJnZSBpcyBPSy4uLiAqLwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXNldHRpbmdzLmMgYi9ibG9jay9ibGstc2V0dGluZ3MuYwppbmRleCA1ZWViOWUwLi4zMWU3YTkzIDEwMDY0NAotLS0gYS9ibG9jay9ibGstc2V0dGluZ3MuYworKysgYi9ibG9jay9ibGstc2V0dGluZ3MuYwpAQCAtOTEsMTAgKzkxLDkgQEAKICAqLwogdm9pZCBibGtfc2V0X2RlZmF1bHRfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKLQlsaW0tPm1heF9waHlzX3NlZ21lbnRzID0gTUFYX1BIWVNfU0VHTUVOVFM7Ci0JbGltLT5tYXhfaHdfc2VnbWVudHMgPSBNQVhfSFdfU0VHTUVOVFM7CisJbGltLT5tYXhfc2VnbWVudHMgPSBCTEtfTUFYX1NFR01FTlRTOwogCWxpbS0+c2VnX2JvdW5kYXJ5X21hc2sgPSBCTEtfU0VHX0JPVU5EQVJZX01BU0s7Ci0JbGltLT5tYXhfc2VnbWVudF9zaXplID0gTUFYX1NFR01FTlRfU0laRTsKKwlsaW0tPm1heF9zZWdtZW50X3NpemUgPSBCTEtfTUFYX1NFR01FTlRfU0laRTsKIAlsaW0tPm1heF9zZWN0b3JzID0gQkxLX0RFRl9NQVhfU0VDVE9SUzsKIAlsaW0tPm1heF9od19zZWN0b3JzID0gSU5UX01BWDsKIAlsaW0tPm1heF9kaXNjYXJkX3NlY3RvcnMgPSAwOwpAQCAtMTU0LDcgKzE1Myw3IEBACiAJcS0+dW5wbHVnX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylxOwogCiAJYmxrX3NldF9kZWZhdWx0X2xpbWl0cygmcS0+bGltaXRzKTsKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocSwgU0FGRV9NQVhfU0VDVE9SUyk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHEsIEJMS19TQUZFX01BWF9TRUNUT1JTKTsKIAogCS8qCiAJICogSWYgdGhlIGNhbGxlciBkaWRuJ3Qgc3VwcGx5IGEgbG9jaywgZmFsbCBiYWNrIHRvIG91ciBlbWJlZGRlZApAQCAtMjEwLDM3ICsyMDksMzIgQEAKIEVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX2JvdW5jZV9saW1pdCk7CiAKIC8qKgotICogYmxrX3F1ZXVlX21heF9zZWN0b3JzIC0gc2V0IG1heCBzZWN0b3JzIGZvciBhIHJlcXVlc3QgZm9yIHRoaXMgcXVldWUKKyAqIGJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyAtIHNldCBtYXggc2VjdG9ycyBmb3IgYSByZXF1ZXN0IGZvciB0aGlzIHF1ZXVlCiAgKiBAcTogIHRoZSByZXF1ZXN0IHF1ZXVlIGZvciB0aGUgZGV2aWNlCi0gKiBAbWF4X3NlY3RvcnM6ICBtYXggc2VjdG9ycyBpbiB0aGUgdXN1YWwgNTEyYiB1bml0CisgKiBAbWF4X2h3X3NlY3RvcnM6ICBtYXggaGFyZHdhcmUgc2VjdG9ycyBpbiB0aGUgdXN1YWwgNTEyYiB1bml0CiAgKgogICogRGVzY3JpcHRpb246Ci0gKiAgICBFbmFibGVzIGEgbG93IGxldmVsIGRyaXZlciB0byBzZXQgYW4gdXBwZXIgbGltaXQgb24gdGhlIHNpemUgb2YKLSAqICAgIHJlY2VpdmVkIHJlcXVlc3RzLgorICogICAgRW5hYmxlcyBhIGxvdyBsZXZlbCBkcml2ZXIgdG8gc2V0IGEgaGFyZCB1cHBlciBsaW1pdCwKKyAqICAgIG1heF9od19zZWN0b3JzLCBvbiB0aGUgc2l6ZSBvZiByZXF1ZXN0cy4gIG1heF9od19zZWN0b3JzIGlzIHNldCBieQorICogICAgdGhlIGRldmljZSBkcml2ZXIgYmFzZWQgdXBvbiB0aGUgY29tYmluZWQgY2FwYWJpbGl0aWVzIG9mIEkvTworICogICAgY29udHJvbGxlciBhbmQgc3RvcmFnZSBkZXZpY2UuCisgKgorICogICAgbWF4X3NlY3RvcnMgaXMgYSBzb2Z0IGxpbWl0IGltcG9zZWQgYnkgdGhlIGJsb2NrIGxheWVyIGZvcgorICogICAgZmlsZXN5c3RlbSB0eXBlIHJlcXVlc3RzLiAgVGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBvbiBhCisgKiAgICBwZXItZGV2aWNlIGJhc2lzIGluIC9zeXMvYmxvY2svPGRldmljZT4vcXVldWUvbWF4X3NlY3RvcnNfa2IuCisgKiAgICBUaGUgc29mdCBsaW1pdCBjYW4gbm90IGV4Y2VlZCBtYXhfaHdfc2VjdG9ycy4KICAqKi8KLXZvaWQgYmxrX3F1ZXVlX21heF9zZWN0b3JzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgbWF4X3NlY3RvcnMpCit2b2lkIGJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgaW50IG1heF9od19zZWN0b3JzKQogewotCWlmICgobWF4X3NlY3RvcnMgPDwgOSkgPCBQQUdFX0NBQ0hFX1NJWkUpIHsKLQkJbWF4X3NlY3RvcnMgPSAxIDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gOSk7CisJaWYgKChtYXhfaHdfc2VjdG9ycyA8PCA5KSA8IFBBR0VfQ0FDSEVfU0laRSkgeworCQltYXhfaHdfc2VjdG9ycyA9IDEgPDwgKFBBR0VfQ0FDSEVfU0hJRlQgLSA5KTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNldCB0byBtaW5pbXVtICVkXG4iLAotCQkgICAgICAgX19mdW5jX18sIG1heF9zZWN0b3JzKTsKKwkJICAgICAgIF9fZnVuY19fLCBtYXhfaHdfc2VjdG9ycyk7CiAJfQogCi0JaWYgKEJMS19ERUZfTUFYX1NFQ1RPUlMgPiBtYXhfc2VjdG9ycykKLQkJcS0+bGltaXRzLm1heF9od19zZWN0b3JzID0gcS0+bGltaXRzLm1heF9zZWN0b3JzID0gbWF4X3NlY3RvcnM7Ci0JZWxzZSB7Ci0JCXEtPmxpbWl0cy5tYXhfc2VjdG9ycyA9IEJMS19ERUZfTUFYX1NFQ1RPUlM7Ci0JCXEtPmxpbWl0cy5tYXhfaHdfc2VjdG9ycyA9IG1heF9zZWN0b3JzOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX21heF9zZWN0b3JzKTsKLQotdm9pZCBibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGludCBtYXhfc2VjdG9ycykKLXsKLQlpZiAoQkxLX0RFRl9NQVhfU0VDVE9SUyA+IG1heF9zZWN0b3JzKQotCQlxLT5saW1pdHMubWF4X2h3X3NlY3RvcnMgPSBCTEtfREVGX01BWF9TRUNUT1JTOwotCWVsc2UKLQkJcS0+bGltaXRzLm1heF9od19zZWN0b3JzID0gbWF4X3NlY3RvcnM7CisJcS0+bGltaXRzLm1heF9od19zZWN0b3JzID0gbWF4X2h3X3NlY3RvcnM7CisJcS0+bGltaXRzLm1heF9zZWN0b3JzID0gbWluX3QodW5zaWduZWQgaW50LCBtYXhfaHdfc2VjdG9ycywKKwkJCQkgICAgICBCTEtfREVGX01BWF9TRUNUT1JTKTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKTsKIApAQCAtMjU3LDE3ICsyNTEsMTUgQEAKIEVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX21heF9kaXNjYXJkX3NlY3RvcnMpOwogCiAvKioKLSAqIGJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyAtIHNldCBtYXggcGh5cyBzZWdtZW50cyBmb3IgYSByZXF1ZXN0IGZvciB0aGlzIHF1ZXVlCisgKiBibGtfcXVldWVfbWF4X3NlZ21lbnRzIC0gc2V0IG1heCBodyBzZWdtZW50cyBmb3IgYSByZXF1ZXN0IGZvciB0aGlzIHF1ZXVlCiAgKiBAcTogIHRoZSByZXF1ZXN0IHF1ZXVlIGZvciB0aGUgZGV2aWNlCiAgKiBAbWF4X3NlZ21lbnRzOiAgbWF4IG51bWJlciBvZiBzZWdtZW50cwogICoKICAqIERlc2NyaXB0aW9uOgogICogICAgRW5hYmxlcyBhIGxvdyBsZXZlbCBkcml2ZXIgdG8gc2V0IGFuIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YKLSAqICAgIHBoeXNpY2FsIGRhdGEgc2VnbWVudHMgaW4gYSByZXF1ZXN0LiAgVGhpcyB3b3VsZCBiZSB0aGUgbGFyZ2VzdCBzaXplZAotICogICAgc2NhdHRlciBsaXN0IHRoZSBkcml2ZXIgY291bGQgaGFuZGxlLgorICogICAgaHcgZGF0YSBzZWdtZW50cyBpbiBhIHJlcXVlc3QuCiAgKiovCi12b2lkIGJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKLQkJCQkgdW5zaWduZWQgc2hvcnQgbWF4X3NlZ21lbnRzKQordm9pZCBibGtfcXVldWVfbWF4X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBzaG9ydCBtYXhfc2VnbWVudHMpCiB7CiAJaWYgKCFtYXhfc2VnbWVudHMpIHsKIAkJbWF4X3NlZ21lbnRzID0gMTsKQEAgLTI3NSwzMyArMjY3LDkgQEAKIAkJICAgICAgIF9fZnVuY19fLCBtYXhfc2VnbWVudHMpOwogCX0KIAotCXEtPmxpbWl0cy5tYXhfcGh5c19zZWdtZW50cyA9IG1heF9zZWdtZW50czsKKwlxLT5saW1pdHMubWF4X3NlZ21lbnRzID0gbWF4X3NlZ21lbnRzOwogfQotRVhQT1JUX1NZTUJPTChibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMpOwotCi0vKioKLSAqIGJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMgLSBzZXQgbWF4IGh3IHNlZ21lbnRzIGZvciBhIHJlcXVlc3QgZm9yIHRoaXMgcXVldWUKLSAqIEBxOiAgdGhlIHJlcXVlc3QgcXVldWUgZm9yIHRoZSBkZXZpY2UKLSAqIEBtYXhfc2VnbWVudHM6ICBtYXggbnVtYmVyIG9mIHNlZ21lbnRzCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAgICBFbmFibGVzIGEgbG93IGxldmVsIGRyaXZlciB0byBzZXQgYW4gdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZgotICogICAgaHcgZGF0YSBzZWdtZW50cyBpbiBhIHJlcXVlc3QuICBUaGlzIHdvdWxkIGJlIHRoZSBsYXJnZXN0IG51bWJlciBvZgotICogICAgYWRkcmVzcy9sZW5ndGggcGFpcnMgdGhlIGhvc3QgYWRhcHRlciBjYW4gYWN0dWFsbHkgZ2l2ZSBhdCBvbmNlCi0gKiAgICB0byB0aGUgZGV2aWNlLgotICoqLwotdm9pZCBibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IG1heF9zZWdtZW50cykKLXsKLQlpZiAoIW1heF9zZWdtZW50cykgewotCQltYXhfc2VnbWVudHMgPSAxOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogc2V0IHRvIG1pbmltdW0gJWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgbWF4X3NlZ21lbnRzKTsKLQl9Ci0KLQlxLT5saW1pdHMubWF4X2h3X3NlZ21lbnRzID0gbWF4X3NlZ21lbnRzOwotfQotRVhQT1JUX1NZTUJPTChibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKTsKK0VYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX21heF9zZWdtZW50cyk7CiAKIC8qKgogICogYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUgLSBzZXQgbWF4IHNlZ21lbnQgc2l6ZSBmb3IgYmxrX3JxX21hcF9zZwpAQCAtNTA3LDcgKzQ3NSw3IEBACiAgKiBibGtfc3RhY2tfbGltaXRzIC0gYWRqdXN0IHF1ZXVlX2xpbWl0cyBmb3Igc3RhY2tlZCBkZXZpY2VzCiAgKiBAdDoJdGhlIHN0YWNraW5nIGRyaXZlciBsaW1pdHMgKHRvcCBkZXZpY2UpCiAgKiBAYjogIHRoZSB1bmRlcmx5aW5nIHF1ZXVlIGxpbWl0cyAoYm90dG9tLCBjb21wb25lbnQgZGV2aWNlKQotICogQG9mZnNldDogIG9mZnNldCB0byBiZWdpbm5pbmcgb2YgZGF0YSB3aXRoaW4gY29tcG9uZW50IGRldmljZQorICogQHN0YXJ0OiAgZmlyc3QgZGF0YSBzZWN0b3Igd2l0aGluIGNvbXBvbmVudCBkZXZpY2UKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBzdGFja2luZyBkcml2ZXJzIGxpa2UgTUQgYW5kIERNIHRvIGVuc3VyZQpAQCAtNTI1LDEwICs0OTMsOSBAQAogICogICAgdGhlIGFsaWdubWVudF9vZmZzZXQgaXMgdW5kZWZpbmVkLgogICovCiBpbnQgYmxrX3N0YWNrX2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICp0LCBzdHJ1Y3QgcXVldWVfbGltaXRzICpiLAotCQkgICAgIHNlY3Rvcl90IG9mZnNldCkKKwkJICAgICBzZWN0b3JfdCBzdGFydCkKIHsKLQlzZWN0b3JfdCBhbGlnbm1lbnQ7Ci0JdW5zaWduZWQgaW50IHRvcCwgYm90dG9tLCByZXQgPSAwOworCXVuc2lnbmVkIGludCB0b3AsIGJvdHRvbSwgYWxpZ25tZW50LCByZXQgPSAwOwogCiAJdC0+bWF4X3NlY3RvcnMgPSBtaW5fbm90X3plcm8odC0+bWF4X3NlY3RvcnMsIGItPm1heF9zZWN0b3JzKTsKIAl0LT5tYXhfaHdfc2VjdG9ycyA9IG1pbl9ub3RfemVybyh0LT5tYXhfaHdfc2VjdG9ycywgYi0+bWF4X2h3X3NlY3RvcnMpOwpAQCAtNTM3LDE4ICs1MDQsMTQgQEAKIAl0LT5zZWdfYm91bmRhcnlfbWFzayA9IG1pbl9ub3RfemVybyh0LT5zZWdfYm91bmRhcnlfbWFzaywKIAkJCQkJICAgIGItPnNlZ19ib3VuZGFyeV9tYXNrKTsKIAotCXQtPm1heF9waHlzX3NlZ21lbnRzID0gbWluX25vdF96ZXJvKHQtPm1heF9waHlzX3NlZ21lbnRzLAotCQkJCQkgICAgYi0+bWF4X3BoeXNfc2VnbWVudHMpOwotCi0JdC0+bWF4X2h3X3NlZ21lbnRzID0gbWluX25vdF96ZXJvKHQtPm1heF9od19zZWdtZW50cywKLQkJCQkJICBiLT5tYXhfaHdfc2VnbWVudHMpOworCXQtPm1heF9zZWdtZW50cyA9IG1pbl9ub3RfemVybyh0LT5tYXhfc2VnbWVudHMsIGItPm1heF9zZWdtZW50cyk7CiAKIAl0LT5tYXhfc2VnbWVudF9zaXplID0gbWluX25vdF96ZXJvKHQtPm1heF9zZWdtZW50X3NpemUsCiAJCQkJCSAgIGItPm1heF9zZWdtZW50X3NpemUpOwogCiAJdC0+bWlzYWxpZ25lZCB8PSBiLT5taXNhbGlnbmVkOwogCi0JYWxpZ25tZW50ID0gcXVldWVfbGltaXRfYWxpZ25tZW50X29mZnNldChiLCBvZmZzZXQpOworCWFsaWdubWVudCA9IHF1ZXVlX2xpbWl0X2FsaWdubWVudF9vZmZzZXQoYiwgc3RhcnQpOwogCiAJLyogQm90dG9tIGRldmljZSBoYXMgZGlmZmVyZW50IGFsaWdubWVudC4gIENoZWNrIHRoYXQgaXQgaXMKIAkgKiBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgdG9wIGFsaWdubWVudC4KQEAgLTYxMSwxMSArNTc0LDcgQEAKIAogCS8qIERpc2NhcmQgYWxpZ25tZW50IGFuZCBncmFudWxhcml0eSAqLwogCWlmIChiLT5kaXNjYXJkX2dyYW51bGFyaXR5KSB7Ci0JCXVuc2lnbmVkIGludCBncmFudWxhcml0eSA9IGItPmRpc2NhcmRfZ3JhbnVsYXJpdHk7Ci0JCW9mZnNldCAmPSBncmFudWxhcml0eSAtIDE7Ci0KLQkJYWxpZ25tZW50ID0gKGdyYW51bGFyaXR5ICsgYi0+ZGlzY2FyZF9hbGlnbm1lbnQgLSBvZmZzZXQpCi0JCQkmIChncmFudWxhcml0eSAtIDEpOworCQlhbGlnbm1lbnQgPSBxdWV1ZV9saW1pdF9kaXNjYXJkX2FsaWdubWVudChiLCBzdGFydCk7CiAKIAkJaWYgKHQtPmRpc2NhcmRfZ3JhbnVsYXJpdHkgIT0gMCAmJgogCQkgICAgdC0+ZGlzY2FyZF9hbGlnbm1lbnQgIT0gYWxpZ25tZW50KSB7CkBAIC02NTcsNyArNjE2LDcgQEAKIAogCXN0YXJ0ICs9IGdldF9zdGFydF9zZWN0KGJkZXYpOwogCi0JcmV0dXJuIGJsa19zdGFja19saW1pdHModCwgJmJxLT5saW1pdHMsIHN0YXJ0IDw8IDkpOworCXJldHVybiBibGtfc3RhY2tfbGltaXRzKHQsICZicS0+bGltaXRzLCBzdGFydCk7CiB9CiBFWFBPUlRfU1lNQk9MKGJkZXZfc3RhY2tfbGltaXRzKTsKIApAQCAtNjY4LDkgKzYyNyw4IEBACiAgKiBAb2Zmc2V0OiAgb2Zmc2V0IHRvIGJlZ2lubmluZyBvZiBkYXRhIHdpdGhpbiBjb21wb25lbnQgZGV2aWNlCiAgKgogICogRGVzY3JpcHRpb246Ci0gKiAgICBNZXJnZXMgdGhlIGxpbWl0cyBmb3IgdHdvIHF1ZXVlcy4gIFJldHVybnMgMCBpZiBhbGlnbm1lbnQKLSAqICAgIGRpZG4ndCBjaGFuZ2UuICBSZXR1cm5zIC0xIGlmIGFkZGluZyB0aGUgYm90dG9tIGRldmljZSBjYXVzZWQKLSAqICAgIG1pc2FsaWdubWVudC4KKyAqICAgIE1lcmdlcyB0aGUgbGltaXRzIGZvciBhIHRvcCBsZXZlbCBnZW5kaXNrIGFuZCBhIGJvdHRvbSBsZXZlbAorICogICAgYmxvY2tfZGV2aWNlLgogICovCiB2b2lkIGRpc2tfc3RhY2tfbGltaXRzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAogCQkgICAgICAgc2VjdG9yX3Qgb2Zmc2V0KQpAQCAtNjc4LDkgKzYzNiw3IEBACiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnQgPSBkaXNrLT5xdWV1ZTsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqYiA9IGJkZXZfZ2V0X3F1ZXVlKGJkZXYpOwogCi0Jb2Zmc2V0ICs9IGdldF9zdGFydF9zZWN0KGJkZXYpIDw8IDk7Ci0KLQlpZiAoYmxrX3N0YWNrX2xpbWl0cygmdC0+bGltaXRzLCAmYi0+bGltaXRzLCBvZmZzZXQpIDwgMCkgeworCWlmIChiZGV2X3N0YWNrX2xpbWl0cygmdC0+bGltaXRzLCBiZGV2LCBvZmZzZXQgPj4gOSkgPCAwKSB7CiAJCWNoYXIgdG9wW0JERVZOQU1FX1NJWkVdLCBib3R0b21bQkRFVk5BTUVfU0laRV07CiAKIAkJZGlza19uYW1lKGRpc2ssIDAsIHRvcCk7CkBAIC03NTIsMjIgKzcwOCwxOSBAQAogICogZG9lcyBpcyBhZGp1c3QgdGhlIHF1ZXVlIHNvIHRoYXQgdGhlIGJ1ZiBpcyBhbHdheXMgYXBwZW5kZWQKICAqIHNpbGVudGx5IHRvIHRoZSBzY2F0dGVybGlzdC4KICAqCi0gKiBOb3RlOiBUaGlzIHJvdXRpbmUgYWRqdXN0cyBtYXhfaHdfc2VnbWVudHMgdG8gbWFrZSByb29tIGZvcgotICogYXBwZW5kaW5nIHRoZSBkcmFpbiBidWZmZXIuICBJZiB5b3UgY2FsbAotICogYmxrX3F1ZXVlX21heF9od19zZWdtZW50cygpIG9yIGJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cygpIGFmdGVyCi0gKiBjYWxsaW5nIHRoaXMgcm91dGluZSwgeW91IG11c3Qgc2V0IHRoZSBsaW1pdCB0byBvbmUgZmV3ZXIgdGhhbiB5b3VyCi0gKiBkZXZpY2UgY2FuIHN1cHBvcnQgb3RoZXJ3aXNlIHRoZXJlIHdvbid0IGJlIHJvb20gZm9yIHRoZSBkcmFpbgotICogYnVmZmVyLgorICogTm90ZTogVGhpcyByb3V0aW5lIGFkanVzdHMgbWF4X2h3X3NlZ21lbnRzIHRvIG1ha2Ugcm9vbSBmb3IgYXBwZW5kaW5nCisgKiB0aGUgZHJhaW4gYnVmZmVyLiAgSWYgeW91IGNhbGwgYmxrX3F1ZXVlX21heF9zZWdtZW50cygpIGFmdGVyIGNhbGxpbmcKKyAqIHRoaXMgcm91dGluZSwgeW91IG11c3Qgc2V0IHRoZSBsaW1pdCB0byBvbmUgZmV3ZXIgdGhhbiB5b3VyIGRldmljZQorICogY2FuIHN1cHBvcnQgb3RoZXJ3aXNlIHRoZXJlIHdvbid0IGJlIHJvb20gZm9yIHRoZSBkcmFpbiBidWZmZXIuCiAgKi8KIGludCBibGtfcXVldWVfZG1hX2RyYWluKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCQkJICAgICAgIGRtYV9kcmFpbl9uZWVkZWRfZm4gKmRtYV9kcmFpbl9uZWVkZWQsCiAJCQkgICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKLQlpZiAocXVldWVfbWF4X2h3X3NlZ21lbnRzKHEpIDwgMiB8fCBxdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxKSA8IDIpCisJaWYgKHF1ZXVlX21heF9zZWdtZW50cyhxKSA8IDIpCiAJCXJldHVybiAtRUlOVkFMOwogCS8qIG1ha2Ugcm9vbSBmb3IgYXBwZW5kaW5nIHRoZSBkcmFpbiAqLwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEpIC0gMSk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEsIHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpIC0gMSk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxLCBxdWV1ZV9tYXhfc2VnbWVudHMocSkgLSAxKTsKIAlxLT5kbWFfZHJhaW5fbmVlZGVkID0gZG1hX2RyYWluX25lZWRlZDsKIAlxLT5kbWFfZHJhaW5fYnVmZmVyID0gYnVmOwogCXEtPmRtYV9kcmFpbl9zaXplID0gc2l6ZTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zeXNmcy5jIGIvYmxvY2svYmxrLXN5c2ZzLmMKaW5kZXggODYwNmM5NS4uZTg1NDQyNCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXN5c2ZzLmMKKysrIGIvYmxvY2svYmxrLXN5c2ZzLmMKQEAgLTE4OSw3ICsxODksOCBAQAogCiBzdGF0aWMgc3NpemVfdCBxdWV1ZV9ub21lcmdlc19zaG93KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpwYWdlKQogewotCXJldHVybiBxdWV1ZV92YXJfc2hvdyhibGtfcXVldWVfbm9tZXJnZXMocSksIHBhZ2UpOworCXJldHVybiBxdWV1ZV92YXJfc2hvdygoYmxrX3F1ZXVlX25vbWVyZ2VzKHEpIDw8IDEpIHwKKwkJCSAgICAgICBibGtfcXVldWVfbm94bWVyZ2VzKHEpLCBwYWdlKTsKIH0KIAogc3RhdGljIHNzaXplX3QgcXVldWVfbm9tZXJnZXNfc3RvcmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNvbnN0IGNoYXIgKnBhZ2UsCkBAIC0xOTksMTAgKzIwMCwxMiBAQAogCXNzaXplX3QgcmV0ID0gcXVldWVfdmFyX3N0b3JlKCZubSwgcGFnZSwgY291bnQpOwogCiAJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKLQlpZiAobm0pCisJcXVldWVfZmxhZ19jbGVhcihRVUVVRV9GTEFHX05PTUVSR0VTLCBxKTsKKwlxdWV1ZV9mbGFnX2NsZWFyKFFVRVVFX0ZMQUdfTk9YTUVSR0VTLCBxKTsKKwlpZiAobm0gPT0gMikKIAkJcXVldWVfZmxhZ19zZXQoUVVFVUVfRkxBR19OT01FUkdFUywgcSk7Ci0JZWxzZQotCQlxdWV1ZV9mbGFnX2NsZWFyKFFVRVVFX0ZMQUdfTk9NRVJHRVMsIHEpOworCWVsc2UgaWYgKG5tKQorCQlxdWV1ZV9mbGFnX3NldChRVUVVRV9GTEFHX05PWE1FUkdFUywgcSk7CiAJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IGVlMTMwZjEuLmRlZTlkOTMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMTksNyArMTksNyBAQAogICogdHVuYWJsZXMKICAqLwogLyogbWF4IHF1ZXVlIGluIG9uZSByb3VuZCBvZiBzZXJ2aWNlICovCi1zdGF0aWMgY29uc3QgaW50IGNmcV9xdWFudHVtID0gNDsKK3N0YXRpYyBjb25zdCBpbnQgY2ZxX3F1YW50dW0gPSA4Owogc3RhdGljIGNvbnN0IGludCBjZnFfZmlmb19leHBpcmVbMl0gPSB7IEhaIC8gNCwgSFogLyA4IH07CiAvKiBtYXhpbXVtIGJhY2t3YXJkcyBzZWVrLCBpbiBLaUIgKi8KIHN0YXRpYyBjb25zdCBpbnQgY2ZxX2JhY2tfbWF4ID0gMTYgKiAxMDI0OwpAQCAtNDIsMTYgKzQyLDE0IEBACiAgKi8KICNkZWZpbmUgQ0ZRX01JTl9UVAkJKDIpCiAKLS8qCi0gKiBBbGxvdyBtZXJnZWQgY2ZxcXMgdG8gcGVyZm9ybSB0aGlzIGFtb3VudCBvZiBzZWVreSBJL08gYmVmb3JlCi0gKiBkZWNpZGluZyB0byBicmVhayB0aGUgcXVldWVzIHVwIGFnYWluLgotICovCi0jZGVmaW5lIENGUVFfQ09PUF9UT1VUCQkoSFopCi0KICNkZWZpbmUgQ0ZRX1NMSUNFX1NDQUxFCQkoNSkKICNkZWZpbmUgQ0ZRX0hXX1FVRVVFX01JTgkoNSkKICNkZWZpbmUgQ0ZRX1NFUlZJQ0VfU0hJRlQgICAgICAgMTIKIAorI2RlZmluZSBDRlFRX1NFRUtfVEhSCQkoc2VjdG9yX3QpKDggKiAxMDApCisjZGVmaW5lIENGUVFfU0VDVF9USFJfTk9OUk9UCShzZWN0b3JfdCkoMiAqIDMyKQorI2RlZmluZSBDRlFRX1NFRUtZKGNmcXEpCShod2VpZ2h0MzIoY2ZxcS0+c2Vla19oaXN0b3J5KSA+IDMyLzgpCisKICNkZWZpbmUgUlFfQ0lDKHJxKQkJXAogCSgoc3RydWN0IGNmcV9pb19jb250ZXh0ICopIChycSktPmVsZXZhdG9yX3ByaXZhdGUpCiAjZGVmaW5lIFJRX0NGUVEocnEpCQkoc3RydWN0IGNmcV9xdWV1ZSAqKSAoKHJxKS0+ZWxldmF0b3JfcHJpdmF0ZTIpCkBAIC04MCwxMSArNzgsMTIgQEAKIAlzdHJ1Y3QgcmJfcm9vdCByYjsKIAlzdHJ1Y3QgcmJfbm9kZSAqbGVmdDsKIAl1bnNpZ25lZCBjb3VudDsKKwl1bnNpZ25lZCB0b3RhbF93ZWlnaHQ7CiAJdTY0IG1pbl92ZGlza3RpbWU7CiAJc3RydWN0IHJiX25vZGUgKmFjdGl2ZTsKLQl1bnNpZ25lZCB0b3RhbF93ZWlnaHQ7CiB9OwotI2RlZmluZSBDRlFfUkJfUk9PVAkoc3RydWN0IGNmcV9yYl9yb290KSB7IFJCX1JPT1QsIE5VTEwsIDAsIDAsIH0KKyNkZWZpbmUgQ0ZRX1JCX1JPT1QJKHN0cnVjdCBjZnFfcmJfcm9vdCkgeyAucmIgPSBSQl9ST09ULCAubGVmdCA9IE5VTEwsIFwKKwkJCS5jb3VudCA9IDAsIC5taW5fdmRpc2t0aW1lID0gMCwgfQogCiAvKgogICogUGVyIHByb2Nlc3MtZ3JvdXBpbmcgc3RydWN0dXJlCkBAIC0xMTgsMTEgKzExNywxMSBAQAogCS8qIHRpbWUgd2hlbiBxdWV1ZSBnb3Qgc2NoZWR1bGVkIGluIHRvIGRpc3BhdGNoIGZpcnN0IHJlcXVlc3QuICovCiAJdW5zaWduZWQgbG9uZyBkaXNwYXRjaF9zdGFydDsKIAl1bnNpZ25lZCBpbnQgYWxsb2NhdGVkX3NsaWNlOworCXVuc2lnbmVkIGludCBzbGljZV9kaXNwYXRjaDsKIAkvKiB0aW1lIHdoZW4gZmlyc3QgcmVxdWVzdCBmcm9tIHF1ZXVlIGNvbXBsZXRlZCBhbmQgc2xpY2Ugc3RhcnRlZC4gKi8KIAl1bnNpZ25lZCBsb25nIHNsaWNlX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgc2xpY2VfZW5kOwogCWxvbmcgc2xpY2VfcmVzaWQ7Ci0JdW5zaWduZWQgaW50IHNsaWNlX2Rpc3BhdGNoOwogCiAJLyogcGVuZGluZyBtZXRhZGF0YSByZXF1ZXN0cyAqLwogCWludCBtZXRhX3BlbmRpbmc7CkBAIC0xMzMsMTQgKzEzMiwxMSBAQAogCXVuc2lnbmVkIHNob3J0IGlvcHJpbywgb3JnX2lvcHJpbzsKIAl1bnNpZ25lZCBzaG9ydCBpb3ByaW9fY2xhc3MsIG9yZ19pb3ByaW9fY2xhc3M7CiAKLQl1bnNpZ25lZCBpbnQgc2Vla19zYW1wbGVzOwotCXU2NCBzZWVrX3RvdGFsOwotCXNlY3Rvcl90IHNlZWtfbWVhbjsKLQlzZWN0b3JfdCBsYXN0X3JlcXVlc3RfcG9zOwotCXVuc2lnbmVkIGxvbmcgc2Vla3lfc3RhcnQ7Ci0KIAlwaWRfdCBwaWQ7CiAKKwl1MzIgc2Vla19oaXN0b3J5OworCXNlY3Rvcl90IGxhc3RfcmVxdWVzdF9wb3M7CisKIAlzdHJ1Y3QgY2ZxX3JiX3Jvb3QgKnNlcnZpY2VfdHJlZTsKIAlzdHJ1Y3QgY2ZxX3F1ZXVlICpuZXdfY2ZxcTsKIAlzdHJ1Y3QgY2ZxX2dyb3VwICpjZnFnOwpAQCAtMjI3LDggKzIyMyw4IEBACiAKIAl1bnNpZ25lZCBpbnQgYnVzeV9xdWV1ZXM7CiAKLQlpbnQgcnFfaW5fZHJpdmVyWzJdOwotCWludCBzeW5jX2ZsaWdodDsKKwlpbnQgcnFfaW5fZHJpdmVyOworCWludCBycV9pbl9mbGlnaHRbMl07CiAKIAkvKgogCSAqIHF1ZXVlLWRlcHRoIGRldGVjdGlvbgpAQCAtMzE0LDYgKzMxMCw3IEBACiAJQ0ZRX0NGUVFfRkxBR19zbGljZV9uZXcsCS8qIG5vIHJlcXVlc3RzIGRpc3BhdGNoZWQgaW4gc2xpY2UgKi8KIAlDRlFfQ0ZRUV9GTEFHX3N5bmMsCQkvKiBzeW5jaHJvbm91cyBxdWV1ZSAqLwogCUNGUV9DRlFRX0ZMQUdfY29vcCwJCS8qIGNmcXEgaXMgc2hhcmVkICovCisJQ0ZRX0NGUVFfRkxBR19zcGxpdF9jb29wLAkvKiBzaGFyZWQgY2ZxcSB3aWxsIGJlIHNwbGl0dGVkICovCiAJQ0ZRX0NGUVFfRkxBR19kZWVwLAkJLyogc3luYyBjZnFxIGV4cGVyaWVuY2VkIGxhcmdlIGRlcHRoICovCiAJQ0ZRX0NGUVFfRkxBR193YWl0X2J1c3ksCS8qIFdhaXRpbmcgZm9yIG5leHQgcmVxdWVzdCAqLwogfTsKQEAgLTM0Miw2ICszMzksNyBAQAogQ0ZRX0NGUVFfRk5TKHNsaWNlX25ldyk7CiBDRlFfQ0ZRUV9GTlMoc3luYyk7CiBDRlFfQ0ZRUV9GTlMoY29vcCk7CitDRlFfQ0ZRUV9GTlMoc3BsaXRfY29vcCk7CiBDRlFfQ0ZRUV9GTlMoZGVlcCk7CiBDRlFfQ0ZRUV9GTlMod2FpdF9idXN5KTsKICN1bmRlZiBDRlFfQ0ZRUV9GTlMKQEAgLTQxOSwxMSArNDE3LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNmcV9jaWNfbG9va3VwKHN0cnVjdCBjZnFfZGF0YSAqLAogCQkJCQkJc3RydWN0IGlvX2NvbnRleHQgKik7CiAKLXN0YXRpYyBpbmxpbmUgaW50IHJxX2luX2RyaXZlcihzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQpCi17Ci0JcmV0dXJuIGNmcWQtPnJxX2luX2RyaXZlclswXSArIGNmcWQtPnJxX2luX2RyaXZlclsxXTsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZxX3F1ZXVlICpjaWNfdG9fY2ZxcShzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYywKIAkJCQkJICAgIGJvb2wgaXNfc3luYykKIHsKQEAgLTk1MywxMCArOTQ2LDYgQEAKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gJmNmcWQtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvOwogCXVuc2lnbmVkIGludCBtYWpvciwgbWlub3I7CiAKLQkvKiBEbyB3ZSBuZWVkIHRvIHRha2UgdGhpcyByZWZlcmVuY2UgKi8KLQlpZiAoIWJsa2lvY2dfY3NzX3RyeWdldChibGtjZykpCi0JCXJldHVybiBOVUxMOzsKLQogCWNmcWcgPSBjZnFnX29mX2Jsa2coYmxraW9jZ19sb29rdXBfZ3JvdXAoYmxrY2csIGtleSkpOwogCWlmIChjZnFnIHx8ICFjcmVhdGUpCiAJCWdvdG8gZG9uZTsKQEAgLTk4Nyw3ICs5NzYsNiBAQAogCWhsaXN0X2FkZF9oZWFkKCZjZnFnLT5jZnFkX25vZGUsICZjZnFkLT5jZnFnX2xpc3QpOwogCiBkb25lOgotCWJsa2lvY2dfY3NzX3B1dChibGtjZyk7CiAJcmV0dXJuIGNmcWc7CiB9CiAKQEAgLTE0MjIsOSArMTQxMCw5IEBACiB7CiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7CiAKLQljZnFkLT5ycV9pbl9kcml2ZXJbcnFfaXNfc3luYyhycSldKys7CisJY2ZxZC0+cnFfaW5fZHJpdmVyKys7CiAJY2ZxX2xvZ19jZnFxKGNmcWQsIFJRX0NGUVEocnEpLCAiYWN0aXZhdGUgcnEsIGRydj0lZCIsCi0JCQkJCQlycV9pbl9kcml2ZXIoY2ZxZCkpOworCQkJCQkJY2ZxZC0+cnFfaW5fZHJpdmVyKTsKIAogCWNmcWQtPmxhc3RfcG9zaXRpb24gPSBibGtfcnFfcG9zKHJxKSArIGJsa19ycV9zZWN0b3JzKHJxKTsKIH0KQEAgLTE0MzIsMTIgKzE0MjAsMTEgQEAKIHN0YXRpYyB2b2lkIGNmcV9kZWFjdGl2YXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsKLQljb25zdCBpbnQgc3luYyA9IHJxX2lzX3N5bmMocnEpOwogCi0JV0FSTl9PTighY2ZxZC0+cnFfaW5fZHJpdmVyW3N5bmNdKTsKLQljZnFkLT5ycV9pbl9kcml2ZXJbc3luY10tLTsKKwlXQVJOX09OKCFjZnFkLT5ycV9pbl9kcml2ZXIpOworCWNmcWQtPnJxX2luX2RyaXZlci0tOwogCWNmcV9sb2dfY2ZxcShjZnFkLCBSUV9DRlFRKHJxKSwgImRlYWN0aXZhdGUgcnEsIGRydj0lZCIsCi0JCQkJCQlycV9pbl9kcml2ZXIoY2ZxZCkpOworCQkJCQkJY2ZxZC0+cnFfaW5fZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgY2ZxX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSkKQEAgLTE1NjYsNiArMTU1MywxNSBAQAogCWNmcV9jbGVhcl9jZnFxX3dhaXRfYnVzeShjZnFxKTsKIAogCS8qCisJICogSWYgdGhpcyBjZnFxIGlzIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIHByb2Nlc3NlcywgY2hlY2sgdG8KKwkgKiBtYWtlIHN1cmUgdGhhdCB0aG9zZSBwcm9jZXNzZXMgYXJlIHN0aWxsIGlzc3VpbmcgSS9PcyB3aXRoaW4KKwkgKiB0aGUgbWVhbiBzZWVrIGRpc3RhbmNlLiAgSWYgbm90LCBpdCBtYXkgYmUgdGltZSB0byBicmVhayB0aGUKKwkgKiBxdWV1ZXMgYXBhcnQgYWdhaW4uCisJICovCisJaWYgKGNmcV9jZnFxX2Nvb3AoY2ZxcSkgJiYgQ0ZRUV9TRUVLWShjZnFxKSkKKwkJY2ZxX21hcmtfY2ZxcV9zcGxpdF9jb29wKGNmcXEpOworCisJLyoKIAkgKiBzdG9yZSB3aGF0IHdhcyBsZWZ0IG9mIHRoaXMgc2xpY2UsIGlmIHRoZSBxdWV1ZSBpZGxlZC90aW1lZCBvdXQKIAkgKi8KIAlpZiAodGltZWRfb3V0ICYmICFjZnFfY2ZxcV9zbGljZV9uZXcoY2ZxcSkpIHsKQEAgLTE2NjMsMjIgKzE2NTksMTAgQEAKIAkJcmV0dXJuIGNmcWQtPmxhc3RfcG9zaXRpb24gLSBibGtfcnFfcG9zKHJxKTsKIH0KIAotI2RlZmluZSBDRlFRX1NFRUtfVEhSCQk4ICogMTAyNAotI2RlZmluZSBDRlFRX1NFRUtZKGNmcXEpCSgoY2ZxcSktPnNlZWtfbWVhbiA+IENGUVFfU0VFS19USFIpCi0KIHN0YXRpYyBpbmxpbmUgaW50IGNmcV9ycV9jbG9zZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEsCiAJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJxLCBib29sIGZvcl9wcmVlbXB0KQogewotCXNlY3Rvcl90IHNkaXN0ID0gY2ZxcS0+c2Vla19tZWFuOwotCi0JaWYgKCFzYW1wbGVfdmFsaWQoY2ZxcS0+c2Vla19zYW1wbGVzKSkKLQkJc2Rpc3QgPSBDRlFRX1NFRUtfVEhSOwotCi0JLyogaWYgc2Vla19tZWFuIGlzIGJpZywgdXNpbmcgaXQgYXMgY2xvc2UgY3JpdGVyaWEgaXMgbWVhbmluZ2xlc3MgKi8KLQlpZiAoc2Rpc3QgPiBDRlFRX1NFRUtfVEhSICYmICFmb3JfcHJlZW1wdCkKLQkJc2Rpc3QgPSBDRlFRX1NFRUtfVEhSOwotCi0JcmV0dXJuIGNmcV9kaXN0X2Zyb21fbGFzdChjZnFkLCBycSkgPD0gc2Rpc3Q7CisJcmV0dXJuIGNmcV9kaXN0X2Zyb21fbGFzdChjZnFkLCBycSkgPD0gQ0ZRUV9TRUVLX1RIUjsKIH0KIAogc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKmNmcXFfY2xvc2Uoc3RydWN0IGNmcV9kYXRhICpjZnFkLApAQCAtMTgwMyw3ICsxNzg3LDcgQEAKIAkgKiBPdGhlcndpc2UsIHdlIGRvIG9ubHkgaWYgdGhleSBhcmUgdGhlIGxhc3Qgb25lcwogCSAqIGluIHRoZWlyIHNlcnZpY2UgdHJlZS4KIAkgKi8KLQlyZXR1cm4gc2VydmljZV90cmVlLT5jb3VudCA9PSAxOworCXJldHVybiBzZXJ2aWNlX3RyZWUtPmNvdW50ID09IDEgJiYgY2ZxX2NmcXFfc3luYyhjZnFxKTsKIH0KIAogc3RhdGljIHZvaWQgY2ZxX2FybV9zbGljZV90aW1lcihzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQpCkBAIC0xODc0LDggKzE4NTgsNyBAQAogCWNmcXEtPmRpc3BhdGNoZWQrKzsKIAllbHZfZGlzcGF0Y2hfc29ydChxLCBycSk7CiAKLQlpZiAoY2ZxX2NmcXFfc3luYyhjZnFxKSkKLQkJY2ZxZC0+c3luY19mbGlnaHQrKzsKKwljZnFkLT5ycV9pbl9mbGlnaHRbY2ZxX2NmcXFfc3luYyhjZnFxKV0rKzsKIAljZnFxLT5ucl9zZWN0b3JzICs9IGJsa19ycV9zZWN0b3JzKHJxKTsKIH0KIApAQCAtMjIxNSw2ICsyMTk4LDE5IEBACiAJcmV0dXJuIGRpc3BhdGNoZWQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBjZnFfc2xpY2VfdXNlZF9zb29uKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwKKwlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQoreworCS8qIHRoZSBxdWV1ZSBoYXNuJ3QgZmluaXNoZWQgYW55IHJlcXVlc3QsIGNhbid0IGVzdGltYXRlICovCisJaWYgKGNmcV9jZnFxX3NsaWNlX25ldyhjZnFxKSkKKwkJcmV0dXJuIDE7CisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcyArIGNmcWQtPmNmcV9zbGljZV9pZGxlICogY2ZxcS0+ZGlzcGF0Y2hlZCwKKwkJY2ZxcS0+c2xpY2VfZW5kKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGJvb2wgY2ZxX21heV9kaXNwYXRjaChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCiB7CiAJdW5zaWduZWQgaW50IG1heF9kaXNwYXRjaDsKQEAgLTIyMjIsMTYgKzIyMTgsMTYgQEAKIAkvKgogCSAqIERyYWluIGFzeW5jIHJlcXVlc3RzIGJlZm9yZSB3ZSBzdGFydCBzeW5jIElPCiAJICovCi0JaWYgKGNmcV9zaG91bGRfaWRsZShjZnFkLCBjZnFxKSAmJiBjZnFkLT5ycV9pbl9kcml2ZXJbQkxLX1JXX0FTWU5DXSkKKwlpZiAoY2ZxX3Nob3VsZF9pZGxlKGNmcWQsIGNmcXEpICYmIGNmcWQtPnJxX2luX2ZsaWdodFtCTEtfUldfQVNZTkNdKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgogCSAqIElmIHRoaXMgaXMgYW4gYXN5bmMgcXVldWUgYW5kIHdlIGhhdmUgc3luYyBJTyBpbiBmbGlnaHQsIGxldCBpdCB3YWl0CiAJICovCi0JaWYgKGNmcWQtPnN5bmNfZmxpZ2h0ICYmICFjZnFfY2ZxcV9zeW5jKGNmcXEpKQorCWlmIChjZnFkLT5ycV9pbl9mbGlnaHRbQkxLX1JXX1NZTkNdICYmICFjZnFfY2ZxcV9zeW5jKGNmcXEpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQltYXhfZGlzcGF0Y2ggPSBjZnFkLT5jZnFfcXVhbnR1bTsKKwltYXhfZGlzcGF0Y2ggPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGNmcWQtPmNmcV9xdWFudHVtIC8gMiwgMSk7CiAJaWYgKGNmcV9jbGFzc19pZGxlKGNmcXEpKQogCQltYXhfZGlzcGF0Y2ggPSAxOwogCkBAIC0yMjQ4LDEzICsyMjQ0LDIyIEBACiAJCS8qCiAJCSAqIFdlIGhhdmUgb3RoZXIgcXVldWVzLCBkb24ndCBhbGxvdyBtb3JlIElPIGZyb20gdGhpcyBvbmUKIAkJICovCi0JCWlmIChjZnFkLT5idXN5X3F1ZXVlcyA+IDEpCisJCWlmIChjZnFkLT5idXN5X3F1ZXVlcyA+IDEgJiYgY2ZxX3NsaWNlX3VzZWRfc29vbihjZnFkLCBjZnFxKSkKIAkJCXJldHVybiBmYWxzZTsKIAogCQkvKgogCQkgKiBTb2xlIHF1ZXVlIHVzZXIsIG5vIGxpbWl0CiAJCSAqLwotCQltYXhfZGlzcGF0Y2ggPSAtMTsKKwkJaWYgKGNmcWQtPmJ1c3lfcXVldWVzID09IDEpCisJCQltYXhfZGlzcGF0Y2ggPSAtMTsKKwkJZWxzZQorCQkJLyoKKwkJCSAqIE5vcm1hbGx5IHdlIHN0YXJ0IHRocm90dGxpbmcgY2ZxcSB3aGVuIGNmcV9xdWFudHVtLzIKKwkJCSAqIHJlcXVlc3RzIGhhdmUgYmVlbiBkaXNwYXRjaGVkLiBCdXQgd2UgY2FuIGRyaXZlCisJCQkgKiBkZWVwZXIgcXVldWUgZGVwdGhzIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc2xpY2UKKwkJCSAqIHN1YmplY3RlZCB0byB1cHBlciBsaW1pdCBvZiBjZnFfcXVhbnR1bS4KKwkJCSAqICovCisJCQltYXhfZGlzcGF0Y2ggPSBjZnFkLT5jZnFfcXVhbnR1bTsKIAl9CiAKIAkvKgpAQCAtMjk3Niw0MyArMjk4MSwyMCBAQAogY2ZxX3VwZGF0ZV9pb19zZWVrdGltZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEsCiAJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0Jc2VjdG9yX3Qgc2Rpc3Q7Ci0JdTY0IHRvdGFsOwotCi0JaWYgKCFjZnFxLT5sYXN0X3JlcXVlc3RfcG9zKQotCQlzZGlzdCA9IDA7Ci0JZWxzZSBpZiAoY2ZxcS0+bGFzdF9yZXF1ZXN0X3BvcyA8IGJsa19ycV9wb3MocnEpKQotCQlzZGlzdCA9IGJsa19ycV9wb3MocnEpIC0gY2ZxcS0+bGFzdF9yZXF1ZXN0X3BvczsKLQllbHNlCi0JCXNkaXN0ID0gY2ZxcS0+bGFzdF9yZXF1ZXN0X3BvcyAtIGJsa19ycV9wb3MocnEpOwotCi0JLyoKLQkgKiBEb24ndCBhbGxvdyB0aGUgc2VlayBkaXN0YW5jZSB0byBnZXQgdG9vIGxhcmdlIGZyb20gdGhlCi0JICogb2RkIGZyYWdtZW50LCBwYWdlaW4sIGV0YwotCSAqLwotCWlmIChjZnFxLT5zZWVrX3NhbXBsZXMgPD0gNjApIC8qIHNlY29uZCZ0aGlyZCBzZWVrICovCi0JCXNkaXN0ID0gbWluKHNkaXN0LCAoY2ZxcS0+c2Vla19tZWFuICogNCkgKyAyKjEwMjQqMTAyNCk7Ci0JZWxzZQotCQlzZGlzdCA9IG1pbihzZGlzdCwgKGNmcXEtPnNlZWtfbWVhbiAqIDQpICsgMioxMDI0KjY0KTsKLQotCWNmcXEtPnNlZWtfc2FtcGxlcyA9ICg3KmNmcXEtPnNlZWtfc2FtcGxlcyArIDI1NikgLyA4OwotCWNmcXEtPnNlZWtfdG90YWwgPSAoNypjZnFxLT5zZWVrX3RvdGFsICsgKHU2NCkyNTYqc2Rpc3QpIC8gODsKLQl0b3RhbCA9IGNmcXEtPnNlZWtfdG90YWwgKyAoY2ZxcS0+c2Vla19zYW1wbGVzLzIpOwotCWRvX2Rpdih0b3RhbCwgY2ZxcS0+c2Vla19zYW1wbGVzKTsKLQljZnFxLT5zZWVrX21lYW4gPSAoc2VjdG9yX3QpdG90YWw7Ci0KLQkvKgotCSAqIElmIHRoaXMgY2ZxcSBpcyBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBwcm9jZXNzZXMsIGNoZWNrIHRvCi0JICogbWFrZSBzdXJlIHRoYXQgdGhvc2UgcHJvY2Vzc2VzIGFyZSBzdGlsbCBpc3N1aW5nIEkvT3Mgd2l0aGluCi0JICogdGhlIG1lYW4gc2VlayBkaXN0YW5jZS4gIElmIG5vdCwgaXQgbWF5IGJlIHRpbWUgdG8gYnJlYWsgdGhlCi0JICogcXVldWVzIGFwYXJ0IGFnYWluLgotCSAqLwotCWlmIChjZnFfY2ZxcV9jb29wKGNmcXEpKSB7Ci0JCWlmIChDRlFRX1NFRUtZKGNmcXEpICYmICFjZnFxLT5zZWVreV9zdGFydCkKLQkJCWNmcXEtPnNlZWt5X3N0YXJ0ID0gamlmZmllczsKLQkJZWxzZSBpZiAoIUNGUVFfU0VFS1koY2ZxcSkpCi0JCQljZnFxLT5zZWVreV9zdGFydCA9IDA7CisJc2VjdG9yX3Qgc2Rpc3QgPSAwOworCXNlY3Rvcl90IG5fc2VjID0gYmxrX3JxX3NlY3RvcnMocnEpOworCWlmIChjZnFxLT5sYXN0X3JlcXVlc3RfcG9zKSB7CisJCWlmIChjZnFxLT5sYXN0X3JlcXVlc3RfcG9zIDwgYmxrX3JxX3BvcyhycSkpCisJCQlzZGlzdCA9IGJsa19ycV9wb3MocnEpIC0gY2ZxcS0+bGFzdF9yZXF1ZXN0X3BvczsKKwkJZWxzZQorCQkJc2Rpc3QgPSBjZnFxLT5sYXN0X3JlcXVlc3RfcG9zIC0gYmxrX3JxX3BvcyhycSk7CiAJfQorCisJY2ZxcS0+c2Vla19oaXN0b3J5IDw8PSAxOworCWlmIChibGtfcXVldWVfbm9ucm90KGNmcWQtPnF1ZXVlKSkKKwkJY2ZxcS0+c2Vla19oaXN0b3J5IHw9IChuX3NlYyA8IENGUVFfU0VDVF9USFJfTk9OUk9UKTsKKwllbHNlCisJCWNmcXEtPnNlZWtfaGlzdG9yeSB8PSAoc2Rpc3QgPiBDRlFRX1NFRUtfVEhSKTsKIH0KIAogLyoKQEAgLTMwMzcsOCArMzAxOSw3IEBACiAJCWNmcV9tYXJrX2NmcXFfZGVlcChjZnFxKTsKIAogCWlmICghYXRvbWljX3JlYWQoJmNpYy0+aW9jLT5ucl90YXNrcykgfHwgIWNmcWQtPmNmcV9zbGljZV9pZGxlIHx8Ci0JICAgICghY2ZxX2NmcXFfZGVlcChjZnFxKSAmJiBzYW1wbGVfdmFsaWQoY2ZxcS0+c2Vla19zYW1wbGVzKQotCSAgICAgJiYgQ0ZRUV9TRUVLWShjZnFxKSkpCisJICAgICghY2ZxX2NmcXFfZGVlcChjZnFxKSAmJiBDRlFRX1NFRUtZKGNmcXEpKSkKIAkJZW5hYmxlX2lkbGUgPSAwOwogCWVsc2UgaWYgKHNhbXBsZV92YWxpZChjaWMtPnR0aW1lX3NhbXBsZXMpKSB7CiAJCWlmIChjaWMtPnR0aW1lX21lYW4gPiBjZnFkLT5jZnFfc2xpY2VfaWRsZSkKQEAgLTMyMjQsMTQgKzMyMDUsMTQgQEAKIHsKIAlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxID0gY2ZxZC0+YWN0aXZlX3F1ZXVlOwogCi0JaWYgKHJxX2luX2RyaXZlcihjZnFkKSA+IGNmcWQtPmh3X3RhZ19lc3RfZGVwdGgpCi0JCWNmcWQtPmh3X3RhZ19lc3RfZGVwdGggPSBycV9pbl9kcml2ZXIoY2ZxZCk7CisJaWYgKGNmcWQtPnJxX2luX2RyaXZlciA+IGNmcWQtPmh3X3RhZ19lc3RfZGVwdGgpCisJCWNmcWQtPmh3X3RhZ19lc3RfZGVwdGggPSBjZnFkLT5ycV9pbl9kcml2ZXI7CiAKIAlpZiAoY2ZxZC0+aHdfdGFnID09IDEpCiAJCXJldHVybjsKIAogCWlmIChjZnFkLT5ycV9xdWV1ZWQgPD0gQ0ZRX0hXX1FVRVVFX01JTiAmJgotCSAgICBycV9pbl9kcml2ZXIoY2ZxZCkgPD0gQ0ZRX0hXX1FVRVVFX01JTikKKwkgICAgY2ZxZC0+cnFfaW5fZHJpdmVyIDw9IENGUV9IV19RVUVVRV9NSU4pCiAJCXJldHVybjsKIAogCS8qCkBAIC0zMjQxLDcgKzMyMjIsNyBAQAogCSAqLwogCWlmIChjZnFxICYmIGNmcV9jZnFxX2lkbGVfd2luZG93KGNmcXEpICYmCiAJICAgIGNmcXEtPmRpc3BhdGNoZWQgKyBjZnFxLT5xdWV1ZWRbMF0gKyBjZnFxLT5xdWV1ZWRbMV0gPAotCSAgICBDRlFfSFdfUVVFVUVfTUlOICYmIHJxX2luX2RyaXZlcihjZnFkKSA8IENGUV9IV19RVUVVRV9NSU4pCisJICAgIENGUV9IV19RVUVVRV9NSU4gJiYgY2ZxZC0+cnFfaW5fZHJpdmVyIDwgQ0ZRX0hXX1FVRVVFX01JTikKIAkJcmV0dXJuOwogCiAJaWYgKGNmcWQtPmh3X3RhZ19zYW1wbGVzKysgPCA1MCkKQEAgLTMyOTQsMTMgKzMyNzUsMTIgQEAKIAogCWNmcV91cGRhdGVfaHdfdGFnKGNmcWQpOwogCi0JV0FSTl9PTighY2ZxZC0+cnFfaW5fZHJpdmVyW3N5bmNdKTsKKwlXQVJOX09OKCFjZnFkLT5ycV9pbl9kcml2ZXIpOwogCVdBUk5fT04oIWNmcXEtPmRpc3BhdGNoZWQpOwotCWNmcWQtPnJxX2luX2RyaXZlcltzeW5jXS0tOworCWNmcWQtPnJxX2luX2RyaXZlci0tOwogCWNmcXEtPmRpc3BhdGNoZWQtLTsKIAotCWlmIChjZnFfY2ZxcV9zeW5jKGNmcXEpKQotCQljZnFkLT5zeW5jX2ZsaWdodC0tOworCWNmcWQtPnJxX2luX2ZsaWdodFtjZnFfY2ZxcV9zeW5jKGNmcXEpXS0tOwogCiAJaWYgKHN5bmMpIHsKIAkJUlFfQ0lDKHJxKS0+bGFzdF9lbmRfcmVxdWVzdCA9IG5vdzsKQEAgLTMzNTQsNyArMzMzNCw3IEBACiAJCX0KIAl9CiAKLQlpZiAoIXJxX2luX2RyaXZlcihjZnFkKSkKKwlpZiAoIWNmcWQtPnJxX2luX2RyaXZlcikKIAkJY2ZxX3NjaGVkdWxlX2Rpc3BhdGNoKGNmcWQpOwogfQogCkBAIC0zNDUzLDE0ICszNDMzLDYgQEAKIAlyZXR1cm4gY2ljX3RvX2NmcXEoY2ljLCAxKTsKIH0KIAotc3RhdGljIGludCBzaG91bGRfc3BsaXRfY2ZxcShzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQotewotCWlmIChjZnFxLT5zZWVreV9zdGFydCAmJgotCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGNmcXEtPnNlZWt5X3N0YXJ0ICsgQ0ZRUV9DT09QX1RPVVQpKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFJldHVybnMgTlVMTCBpZiBhIG5ldyBjZnFxIHNob3VsZCBiZSBhbGxvY2F0ZWQsIG9yIHRoZSBvbGQgY2ZxcSBpZiB0aGlzCiAgKiB3YXMgdGhlIGxhc3QgcHJvY2VzcyByZWZlcnJpbmcgdG8gc2FpZCBjZnFxLgpAQCAtMzQ2OSw5ICszNDQxLDkgQEAKIHNwbGl0X2NmcXEoc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCiB7CiAJaWYgKGNmcXFfcHJvY2Vzc19yZWZzKGNmcXEpID09IDEpIHsKLQkJY2ZxcS0+c2Vla3lfc3RhcnQgPSAwOwogCQljZnFxLT5waWQgPSBjdXJyZW50LT5waWQ7CiAJCWNmcV9jbGVhcl9jZnFxX2Nvb3AoY2ZxcSk7CisJCWNmcV9jbGVhcl9jZnFxX3NwbGl0X2Nvb3AoY2ZxcSk7CiAJCXJldHVybiBjZnFxOwogCX0KIApAQCAtMzUxMCw3ICszNDgyLDcgQEAKIAkJLyoKIAkJICogSWYgdGhlIHF1ZXVlIHdhcyBzZWVreSBmb3IgdG9vIGxvbmcsIGJyZWFrIGl0IGFwYXJ0LgogCQkgKi8KLQkJaWYgKGNmcV9jZnFxX2Nvb3AoY2ZxcSkgJiYgc2hvdWxkX3NwbGl0X2NmcXEoY2ZxcSkpIHsKKwkJaWYgKGNmcV9jZnFxX2Nvb3AoY2ZxcSkgJiYgY2ZxX2NmcXFfc3BsaXRfY29vcChjZnFxKSkgewogCQkJY2ZxX2xvZ19jZnFxKGNmcWQsIGNmcXEsICJicmVha2luZyBhcGFydCBjZnFxIik7CiAJCQljZnFxID0gc3BsaXRfY2ZxcShjaWMsIGNmcXEpOwogCQkJaWYgKCFjZnFxKQpkaWZmIC0tZ2l0IGEvYmxvY2svZWxldmF0b3IuYyBiL2Jsb2NrL2VsZXZhdG9yLmMKaW5kZXggOWFkNWNjYy4uZWUzYTg4MyAxMDA2NDQKLS0tIGEvYmxvY2svZWxldmF0b3IuYworKysgYi9ibG9jay9lbGV2YXRvci5jCkBAIC00NzQsNiArNDc0LDE1IEBACiAJaW50IHJldDsKIAogCS8qCisJICogTGV2ZWxzIG9mIG1lcmdlczoKKwkgKiAJbm9tZXJnZXM6ICBObyBtZXJnZXMgYXQgYWxsIGF0dGVtcHRlZAorCSAqIAlub3htZXJnZXM6IE9ubHkgc2ltcGxlIG9uZS1oaXQgY2FjaGUgdHJ5CisJICogCW1lcmdlczoJICAgQWxsIG1lcmdlIHRyaWVzIGF0dGVtcHRlZAorCSAqLworCWlmIChibGtfcXVldWVfbm9tZXJnZXMocSkpCisJCXJldHVybiBFTEVWQVRPUl9OT19NRVJHRTsKKworCS8qCiAJICogRmlyc3QgdHJ5IG9uZS1oaXQgY2FjaGUuCiAJICovCiAJaWYgKHEtPmxhc3RfbWVyZ2UpIHsKQEAgLTQ4NCw3ICs0OTMsNyBAQAogCQl9CiAJfQogCi0JaWYgKGJsa19xdWV1ZV9ub21lcmdlcyhxKSkKKwlpZiAoYmxrX3F1ZXVlX25veG1lcmdlcyhxKSkKIAkJcmV0dXJuIEVMRVZBVE9SX05PX01FUkdFOwogCiAJLyoKZGlmZiAtLWdpdCBhL2NyeXB0by9LY29uZmlnIGIvY3J5cHRvL0tjb25maWcKaW5kZXggODFjMTg1YS4uNmEyZTI5NSAxMDA2NDQKLS0tIGEvY3J5cHRvL0tjb25maWcKKysrIGIvY3J5cHRvL0tjb25maWcKQEAgLTExNCw2ICsxMTQsMTYgQEAKIAloZWxwCiAJICBUaGVzZSBhcmUgJ051bGwnIGFsZ29yaXRobXMsIHVzZWQgYnkgSVBzZWMsIHdoaWNoIGRvIG5vdGhpbmcuCiAKK2NvbmZpZyBDUllQVE9fUENSWVBUCisJdHJpc3RhdGUgIlBhcmFsbGVsIGNyeXB0byBlbmdpbmUgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBTTVAgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IFBBREFUQQorCXNlbGVjdCBDUllQVE9fTUFOQUdFUgorCXNlbGVjdCBDUllQVE9fQUVBRAorCWhlbHAKKwkgIFRoaXMgY29udmVydHMgYW4gYXJiaXRyYXJ5IGNyeXB0byBhbGdvcml0aG0gaW50byBhIHBhcmFsbGVsCisJICBhbGdvcml0aG0gdGhhdCBleGVjdXRlcyBpbiBrZXJuZWwgdGhyZWFkcy4KKwogY29uZmlnIENSWVBUT19XT1JLUVVFVUUKICAgICAgICB0cmlzdGF0ZQogCmRpZmYgLS1naXQgYS9jcnlwdG8vTWFrZWZpbGUgYi9jcnlwdG8vTWFrZWZpbGUKaW5kZXggOWU4ZjYxOS4uZDdlNjQ0MSAxMDA2NDQKLS0tIGEvY3J5cHRvL01ha2VmaWxlCisrKyBiL2NyeXB0by9NYWtlZmlsZQpAQCAtNTYsNiArNTYsNyBAQAogb2JqLSQoQ09ORklHX0NSWVBUT19DVFIpICs9IGN0ci5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0dDTSkgKz0gZ2NtLm8KIG9iai0kKENPTkZJR19DUllQVE9fQ0NNKSArPSBjY20ubworb2JqLSQoQ09ORklHX0NSWVBUT19QQ1JZUFQpICs9IHBjcnlwdC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0NSWVBURCkgKz0gY3J5cHRkLm8KIG9iai0kKENPTkZJR19DUllQVE9fREVTKSArPSBkZXNfZ2VuZXJpYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0ZDUllQVCkgKz0gZmNyeXB0Lm8KZGlmZiAtLWdpdCBhL2NyeXB0by9hYmxrY2lwaGVyLmMgYi9jcnlwdG8vYWJsa2NpcGhlci5jCmluZGV4IGY2ZjA4MzMuLmZlOTgwZGEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hYmxrY2lwaGVyLmMKKysrIGIvY3J5cHRvL2FibGtjaXBoZXIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBBc3luY2hyb25vdXMgYmxvY2sgY2hhaW5pbmcgY2lwaGVyIG9wZXJhdGlvbnMuCi0gKiAKKyAqCiAgKiBUaGlzIGlzIHRoZSBhc3luY2hyb25vdXMgdmVyc2lvbiBvZiBibGtjaXBoZXIuYyBpbmRpY2F0aW5nIGNvbXBsZXRpb24KICAqIHZpYSBhIGNhbGxiYWNrLgogICoKQEAgLTgsNyArOCw3IEBACiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVhZC5jIGIvY3J5cHRvL2FlYWQuYwppbmRleCAwYTU1ZGE3Li42NzI5ZThmIDEwMDY0NAotLS0gYS9jcnlwdG8vYWVhZC5jCisrKyBiL2NyeXB0by9hZWFkLmMKQEAgLTEsMTMgKzEsMTMgQEAKIC8qCiAgKiBBRUFEOiBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSAqIAorICoKICAqIFRoaXMgZmlsZSBwcm92aWRlcyBBUEkgc3VwcG9ydCBmb3IgQUVBRCBhbGdvcml0aG1zLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwNyBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzX2dlbmVyaWMuYyBiL2NyeXB0by9hZXNfZ2VuZXJpYy5jCmluZGV4IGU3OGI3ZWUuLmE2OGM3M2QgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZXNfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9hZXNfZ2VuZXJpYy5jCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogQ3J5cHRvZ3JhcGhpYyBBUEkuCiAgKgogICogQUVTIENpcGhlciBBbGdvcml0aG0uCkBAIC0xMTI3LDcgKzExMjcsNyBAQAogCiAjZGVmaW5lIHN0YXJfeCh4KSAoKCh4KSAmIDB4N2Y3ZjdmN2YpIDw8IDEpIF4gKCgoKHgpICYgMHg4MDgwODA4MCkgPj4gNykgKiAweDFiKQogCi0jZGVmaW5lIGltaXhfY29sKHkseCkJZG8gewkJXAorI2RlZmluZSBpbWl4X2NvbCh5LCB4KQlkbyB7CQlcCiAJdQk9IHN0YXJfeCh4KTsJCVwKIAl2CT0gc3Rhcl94KHUpOwkJXAogCXcJPSBzdGFyX3godik7CQlcCmRpZmYgLS1naXQgYS9jcnlwdG8vYWxnYXBpLmMgYi9jcnlwdG8vYWxnYXBpLmMKaW5kZXggZjE0OWIxYy4uM2U0NTI0ZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FsZ2FwaS5jCisrKyBiL2NyeXB0by9hbGdhcGkuYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJbGlzdF9hZGQoJmFsZy0+Y3JhX2xpc3QsICZjcnlwdG9fYWxnX2xpc3QpOwogCWxpc3RfYWRkKCZsYXJ2YWwtPmFsZy5jcmFfbGlzdCwgJmNyeXB0b19hbGdfbGlzdCk7CiAKLW91dDoJCitvdXQ6CiAJcmV0dXJuIGxhcnZhbDsKIAogZnJlZV9sYXJ2YWw6CkBAIC0zODgsNyArMzg4LDcgQEAKIHsKIAlpbnQgcmV0OwogCUxJU1RfSEVBRChsaXN0KTsKLQkKKwogCWRvd25fd3JpdGUoJmNyeXB0b19hbGdfc2VtKTsKIAlyZXQgPSBjcnlwdG9fcmVtb3ZlX2FsZyhhbGcsICZsaXN0KTsKIAl1cF93cml0ZSgmY3J5cHRvX2FsZ19zZW0pOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FudWJpcy5jIGIvY3J5cHRvL2FudWJpcy5jCmluZGV4IGU0MmMzYTguLjc3NTMwZDUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hbnViaXMuYworKysgYi9jcnlwdG8vYW51YmlzLmMKQEAgLTQ2OSwxNCArNDY5LDEzIEBACiAJdTMyIGthcHBhW0FOVUJJU19NQVhfTl07CiAJdTMyIGludGVyW0FOVUJJU19NQVhfTl07CiAKLQlzd2l0Y2ggKGtleV9sZW4pCi0JeworCXN3aXRjaCAoa2V5X2xlbikgewogCQljYXNlIDE2OiBjYXNlIDIwOiBjYXNlIDI0OiBjYXNlIDI4OgogCQljYXNlIDMyOiBjYXNlIDM2OiBjYXNlIDQwOgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47Ci0JCQlyZXR1cm4gLSBFSU5WQUw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAljdHgtPmtleV9sZW4gPSBrZXlfbGVuICogODsKQEAgLTUzMCwyMyArNTI5LDI0IEBACiAJCS8qCiAJCSAqIGNvbXB1dGUga2FwcGFee3IrMX0gZnJvbSBrYXBwYV5yOgogCQkgKi8KLQkJaWYgKHIgPT0gUikgeworCQlpZiAociA9PSBSKQogCQkJYnJlYWs7Ci0JCX0KIAkJZm9yIChpID0gMDsgaSA8IE47IGkrKykgewogCQkJaW50IGogPSBpOwogCQkJaW50ZXJbaV0gID0gVDBbKGthcHBhW2otLV0gPj4gMjQpICAgICAgIF07Ci0JCQlpZiAoaiA8IDApIGogPSBOIC0gMTsKKwkJCWlmIChqIDwgMCkKKwkJCQlqID0gTiAtIDE7CiAJCQlpbnRlcltpXSBePSBUMVsoa2FwcGFbai0tXSA+PiAxNikgJiAweGZmXTsKLQkJCWlmIChqIDwgMCkgaiA9IE4gLSAxOworCQkJaWYgKGogPCAwKQorCQkJCWogPSBOIC0gMTsKIAkJCWludGVyW2ldIF49IFQyWyhrYXBwYVtqLS1dID4+ICA4KSAmIDB4ZmZdOwotCQkJaWYgKGogPCAwKSBqID0gTiAtIDE7CisJCQlpZiAoaiA8IDApCisJCQkJaiA9IE4gLSAxOwogCQkJaW50ZXJbaV0gXj0gVDNbKGthcHBhW2ogIF0gICAgICApICYgMHhmZl07CiAJCX0KIAkJa2FwcGFbMF0gPSBpbnRlclswXSBeIHJjW3JdOwotCQlmb3IgKGkgPSAxOyBpIDwgTjsgaSsrKSB7CisJCWZvciAoaSA9IDE7IGkgPCBOOyBpKyspCiAJCQlrYXBwYVtpXSA9IGludGVyW2ldOwotCQl9CiAJfQogCiAJLyoKQEAgLTY5MCw3ICs2OTAsNyBAQAogc3RhdGljIGludCBfX2luaXQgYW51YmlzX21vZF9pbml0KHZvaWQpCiB7CiAJaW50IHJldCA9IDA7Ci0JCisKIAlyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbnViaXNfYWxnKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FwaS5jIGIvY3J5cHRvL2FwaS5jCmluZGV4IDc5ODUyNmQuLjAzM2E3MTQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hcGkuYworKysgYi9jcnlwdG8vYXBpLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KQEAgLTI4OCwxMSArMjg4LDExIEBACiAKIAljYXNlIENSWVBUT19BTEdfVFlQRV9DT01QUkVTUzoKIAkJcmV0dXJuIGNyeXB0b19pbml0X2NvbXByZXNzX29wcyh0Zm0pOwotCQorCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQotCQorCiAJQlVHKCk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0zMTUsMTAgKzMxNSw5IEBACiAJY2FzZSBDUllQVE9fQUxHX1RZUEVfQ09NUFJFU1M6CiAJCWNyeXB0b19leGl0X2NvbXByZXNzX29wcyh0Zm0pOwogCQlicmVhazsKLQkKKwogCWRlZmF1bHQ6CiAJCUJVRygpOwotCQkKIAl9CiB9CiAKQEAgLTU5MywxMiArNTkyLDEyIEBACiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZyA9IGNyeXB0b19hbGdfbW9kX2xvb2t1cChuYW1lLCB0eXBlLCBtYXNrKTsKLQkKKwogCWlmICghSVNfRVJSKGFsZykpIHsKIAkJY3J5cHRvX21vZF9wdXQoYWxnKTsKIAkJcmV0ID0gMTsKIAl9Ci0JCisKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2hhc19hbGcpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2F1dGhlbmMuYyBiL2NyeXB0by9hdXRoZW5jLmMKaW5kZXggNGQ2ZjQ5YS4uMTg4NzA5MCAxMDA2NDQKLS0tIGEvY3J5cHRvL2F1dGhlbmMuYworKysgYi9jcnlwdG8vYXV0aGVuYy5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkoaWhhc2gsIGFyZXFfY3R4LT5zZywgYXJlcV9jdHgtPmNyeXB0bGVuLAogCQkJCSBhdXRoc2l6ZSwgMCk7CiAKLQllcnIgPSBtZW1jbXAoaWhhc2gsIGFocmVxLT5yZXN1bHQsIGF1dGhzaXplKSA/IC1FQkFETVNHOiAwOworCWVyciA9IG1lbWNtcChpaGFzaCwgYWhyZXEtPnJlc3VsdCwgYXV0aHNpemUpID8gLUVCQURNU0cgOiAwOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0yMzEsNyArMjMxLDcgQEAKIAlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkoaWhhc2gsIGFyZXFfY3R4LT5zZywgYXJlcV9jdHgtPmNyeXB0bGVuLAogCQkJCSBhdXRoc2l6ZSwgMCk7CiAKLQllcnIgPSBtZW1jbXAoaWhhc2gsIGFocmVxLT5yZXN1bHQsIGF1dGhzaXplKSA/IC1FQkFETVNHOiAwOworCWVyciA9IG1lbWNtcChpaGFzaCwgYWhyZXEtPnJlc3VsdCwgYXV0aHNpemUpID8gLUVCQURNU0cgOiAwOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC00NjQsNyArNDY0LDcgQEAKIAlpaGFzaCA9IG9oYXNoICsgYXV0aHNpemU7CiAJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KGloYXNoLCBhcmVxX2N0eC0+c2csIGFyZXFfY3R4LT5jcnlwdGxlbiwKIAkJCQkgYXV0aHNpemUsIDApOwotCXJldHVybiBtZW1jbXAoaWhhc2gsIG9oYXNoLCBhdXRoc2l6ZSkgPyAtRUJBRE1TRzogMDsKKwlyZXR1cm4gbWVtY21wKGloYXNoLCBvaGFzaCwgYXV0aHNpemUpID8gLUVCQURNU0cgOiAwOwogfQogCiBzdGF0aWMgaW50IGNyeXB0b19hdXRoZW5jX2l2ZXJpZnkoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxLCB1OCAqaXYsCkBAIC01NTcsMTEgKzU1NywxMSBAQAogCiAJY3R4LT5hdXRoID0gYXV0aDsKIAljdHgtPmVuYyA9IGVuYzsKLQkKKwogCXRmbS0+Y3J0X2FlYWQucmVxc2l6ZSA9IG1heF90KHVuc2lnbmVkIGludCwKIAkJCQljcnlwdG9fYWhhc2hfcmVxc2l6ZShhdXRoKSArIGN0eC0+cmVxb2ZmICsKIAkJCQlzaXplb2Yoc3RydWN0IGF1dGhlbmNfcmVxdWVzdF9jdHgpICsKLQkJCQlzaXplb2Yoc3RydWN0IGFoYXNoX3JlcXVlc3QpLCAKKwkJCQlzaXplb2Yoc3RydWN0IGFoYXNoX3JlcXVlc3QpLAogCQkJCXNpemVvZihzdHJ1Y3Qgc2tjaXBoZXJfZ2l2Y3J5cHRfcmVxdWVzdCkgKwogCQkJCWNyeXB0b19hYmxrY2lwaGVyX3JlcXNpemUoZW5jKSArCiAJCQkJY3J5cHRvX2FibGtjaXBoZXJfaXZzaXplKGVuYykpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jsb3dmaXNoLmMgYi9jcnlwdG8vYmxvd2Zpc2guYwppbmRleCA2ZjViNDg3Li5hNjdkNTJlIDEwMDY0NAotLS0gYS9jcnlwdG8vYmxvd2Zpc2guYworKysgYi9jcnlwdG8vYmxvd2Zpc2guYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIENyeXB0b2dyYXBoaWMgQVBJLgogICoKICAqIEJsb3dmaXNoIENpcGhlciBBbGdvcml0aG0sIGJ5IEJydWNlIFNjaG5laWVyLgpAQCAtMjk5LDcgKzI5OSw3IEBACiAJMHhiNzRlNjEzMiwgMHhjZTc3ZTI1YiwgMHg1NzhmZGZlMywgMHgzYWMzNzJlNiwKIH07CiAKLS8qIAorLyoKICAqIFJvdW5kIGxvb3AgdW5yb2xsaW5nIG1hY3JvcywgUyBpcyBhIHBvaW50ZXIgdG8gYSBTLUJveCBhcnJheQogICogb3JnYW5pemVkIGluIDQgdW5zaWduZWQgbG9uZ3MgYXQgYSByb3cuCiAgKi8KQEAgLTMxNSw3ICszMTUsNyBAQAogCiAvKgogICogVGhlIGJsb3dmaXNoIGVuY2lwaGVyLCBwcm9jZXNzZXMgNjQtYml0IGJsb2Nrcy4KLSAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gTVVTVE4nVCByZXNwZWN0IGVuZGlhbmVzcyAKKyAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gTVVTVE4nVCByZXNwZWN0IGVuZGlhbmVzcwogICovCiBzdGF0aWMgdm9pZCBlbmNyeXB0X2Jsb2NrKHN0cnVjdCBiZl9jdHggKmJjdHgsIHUzMiAqZHN0LCB1MzIgKnNyYykKIHsKQEAgLTM5NSw3ICszOTUsNyBAQAogCW91dF9ibGtbMV0gPSBjcHVfdG9fYmUzMih5bCk7CiB9CiAKLS8qIAorLyoKICAqIENhbGN1bGF0ZXMgdGhlIGJsb3dmaXNoIFMgYW5kIFAgYm94ZXMgZm9yIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24uCiAgKi8KIHN0YXRpYyBpbnQgYmZfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCkBAIC00MTcsMTAgKzQxNywxMCBAQAogCiAJLyogQWN0dWFsIHN1YmtleSBnZW5lcmF0aW9uICovCiAJZm9yIChqID0gMCwgaSA9IDA7IGkgPCAxNiArIDI7IGkrKykgewotCQl0ZW1wID0gKCgodTMyIClrZXlbal0gPDwgMjQpIHwKLQkJCSgodTMyIClrZXlbKGogKyAxKSAlIGtleWxlbl0gPDwgMTYpIHwKLQkJCSgodTMyIClrZXlbKGogKyAyKSAlIGtleWxlbl0gPDwgOCkgfAotCQkJKCh1MzIgKWtleVsoaiArIDMpICUga2V5bGVuXSkpOworCQl0ZW1wID0gKCgodTMyKWtleVtqXSA8PCAyNCkgfAorCQkJKCh1MzIpa2V5WyhqICsgMSkgJSBrZXlsZW5dIDw8IDE2KSB8CisJCQkoKHUzMilrZXlbKGogKyAyKSAlIGtleWxlbl0gPDwgOCkgfAorCQkJKCh1MzIpa2V5WyhqICsgMykgJSBrZXlsZW5dKSk7CiAKIAkJUFtpXSA9IFBbaV0gXiB0ZW1wOwogCQlqID0gKGogKyA0KSAlIGtleWxlbjsKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCQkJU1tjb3VudCArIDFdID0gZGF0YVsxXTsKIAkJfQogCX0KLQkKKwogCS8qIEJydWNlIHNheXMgbm90IHRvIGJvdGhlciB3aXRoIHRoZSB3ZWFrIGtleSBjaGVjay4gKi8KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2NyeXB0by9jYW1lbGxpYS5jIGIvY3J5cHRvL2NhbWVsbGlhLmMKaW5kZXggOTY0NjM1ZC4uNjRjZmY0NiAxMDA2NDQKLS0tIGEvY3J5cHRvL2NhbWVsbGlhLmMKKysrIGIvY3J5cHRvL2NhbWVsbGlhLmMKQEAgLTM5LDI3MSArMzksMjcxIEBACiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiBzdGF0aWMgY29uc3QgdTMyIGNhbWVsbGlhX3NwMTExMFsyNTZdID0gewotCTB4NzA3MDcwMDAsMHg4MjgyODIwMCwweDJjMmMyYzAwLDB4ZWNlY2VjMDAsCi0JMHhiM2IzYjMwMCwweDI3MjcyNzAwLDB4YzBjMGMwMDAsMHhlNWU1ZTUwMCwKLQkweGU0ZTRlNDAwLDB4ODU4NTg1MDAsMHg1NzU3NTcwMCwweDM1MzUzNTAwLAotCTB4ZWFlYWVhMDAsMHgwYzBjMGMwMCwweGFlYWVhZTAwLDB4NDE0MTQxMDAsCi0JMHgyMzIzMjMwMCwweGVmZWZlZjAwLDB4NmI2YjZiMDAsMHg5MzkzOTMwMCwKLQkweDQ1NDU0NTAwLDB4MTkxOTE5MDAsMHhhNWE1YTUwMCwweDIxMjEyMTAwLAotCTB4ZWRlZGVkMDAsMHgwZTBlMGUwMCwweDRmNGY0ZjAwLDB4NGU0ZTRlMDAsCi0JMHgxZDFkMWQwMCwweDY1NjU2NTAwLDB4OTI5MjkyMDAsMHhiZGJkYmQwMCwKLQkweDg2ODY4NjAwLDB4YjhiOGI4MDAsMHhhZmFmYWYwMCwweDhmOGY4ZjAwLAotCTB4N2M3YzdjMDAsMHhlYmViZWIwMCwweDFmMWYxZjAwLDB4Y2VjZWNlMDAsCi0JMHgzZTNlM2UwMCwweDMwMzAzMDAwLDB4ZGNkY2RjMDAsMHg1ZjVmNWYwMCwKLQkweDVlNWU1ZTAwLDB4YzVjNWM1MDAsMHgwYjBiMGIwMCwweDFhMWExYTAwLAotCTB4YTZhNmE2MDAsMHhlMWUxZTEwMCwweDM5MzkzOTAwLDB4Y2FjYWNhMDAsCi0JMHhkNWQ1ZDUwMCwweDQ3NDc0NzAwLDB4NWQ1ZDVkMDAsMHgzZDNkM2QwMCwKLQkweGQ5ZDlkOTAwLDB4MDEwMTAxMDAsMHg1YTVhNWEwMCwweGQ2ZDZkNjAwLAotCTB4NTE1MTUxMDAsMHg1NjU2NTYwMCwweDZjNmM2YzAwLDB4NGQ0ZDRkMDAsCi0JMHg4YjhiOGIwMCwweDBkMGQwZDAwLDB4OWE5YTlhMDAsMHg2NjY2NjYwMCwKLQkweGZiZmJmYjAwLDB4Y2NjY2NjMDAsMHhiMGIwYjAwMCwweDJkMmQyZDAwLAotCTB4NzQ3NDc0MDAsMHgxMjEyMTIwMCwweDJiMmIyYjAwLDB4MjAyMDIwMDAsCi0JMHhmMGYwZjAwMCwweGIxYjFiMTAwLDB4ODQ4NDg0MDAsMHg5OTk5OTkwMCwKLQkweGRmZGZkZjAwLDB4NGM0YzRjMDAsMHhjYmNiY2IwMCwweGMyYzJjMjAwLAotCTB4MzQzNDM0MDAsMHg3ZTdlN2UwMCwweDc2NzY3NjAwLDB4MDUwNTA1MDAsCi0JMHg2ZDZkNmQwMCwweGI3YjdiNzAwLDB4YTlhOWE5MDAsMHgzMTMxMzEwMCwKLQkweGQxZDFkMTAwLDB4MTcxNzE3MDAsMHgwNDA0MDQwMCwweGQ3ZDdkNzAwLAotCTB4MTQxNDE0MDAsMHg1ODU4NTgwMCwweDNhM2EzYTAwLDB4NjE2MTYxMDAsCi0JMHhkZWRlZGUwMCwweDFiMWIxYjAwLDB4MTExMTExMDAsMHgxYzFjMWMwMCwKLQkweDMyMzIzMjAwLDB4MGYwZjBmMDAsMHg5YzljOWMwMCwweDE2MTYxNjAwLAotCTB4NTM1MzUzMDAsMHgxODE4MTgwMCwweGYyZjJmMjAwLDB4MjIyMjIyMDAsCi0JMHhmZWZlZmUwMCwweDQ0NDQ0NDAwLDB4Y2ZjZmNmMDAsMHhiMmIyYjIwMCwKLQkweGMzYzNjMzAwLDB4YjViNWI1MDAsMHg3YTdhN2EwMCwweDkxOTE5MTAwLAotCTB4MjQyNDI0MDAsMHgwODA4MDgwMCwweGU4ZThlODAwLDB4YThhOGE4MDAsCi0JMHg2MDYwNjAwMCwweGZjZmNmYzAwLDB4Njk2OTY5MDAsMHg1MDUwNTAwMCwKLQkweGFhYWFhYTAwLDB4ZDBkMGQwMDAsMHhhMGEwYTAwMCwweDdkN2Q3ZDAwLAotCTB4YTFhMWExMDAsMHg4OTg5ODkwMCwweDYyNjI2MjAwLDB4OTc5Nzk3MDAsCi0JMHg1NDU0NTQwMCwweDViNWI1YjAwLDB4MWUxZTFlMDAsMHg5NTk1OTUwMCwKLQkweGUwZTBlMDAwLDB4ZmZmZmZmMDAsMHg2NDY0NjQwMCwweGQyZDJkMjAwLAotCTB4MTAxMDEwMDAsMHhjNGM0YzQwMCwweDAwMDAwMDAwLDB4NDg0ODQ4MDAsCi0JMHhhM2EzYTMwMCwweGY3ZjdmNzAwLDB4NzU3NTc1MDAsMHhkYmRiZGIwMCwKLQkweDhhOGE4YTAwLDB4MDMwMzAzMDAsMHhlNmU2ZTYwMCwweGRhZGFkYTAwLAotCTB4MDkwOTA5MDAsMHgzZjNmM2YwMCwweGRkZGRkZDAwLDB4OTQ5NDk0MDAsCi0JMHg4Nzg3ODcwMCwweDVjNWM1YzAwLDB4ODM4MzgzMDAsMHgwMjAyMDIwMCwKLQkweGNkY2RjZDAwLDB4NGE0YTRhMDAsMHg5MDkwOTAwMCwweDMzMzMzMzAwLAotCTB4NzM3MzczMDAsMHg2NzY3NjcwMCwweGY2ZjZmNjAwLDB4ZjNmM2YzMDAsCi0JMHg5ZDlkOWQwMCwweDdmN2Y3ZjAwLDB4YmZiZmJmMDAsMHhlMmUyZTIwMCwKLQkweDUyNTI1MjAwLDB4OWI5YjliMDAsMHhkOGQ4ZDgwMCwweDI2MjYyNjAwLAotCTB4YzhjOGM4MDAsMHgzNzM3MzcwMCwweGM2YzZjNjAwLDB4M2IzYjNiMDAsCi0JMHg4MTgxODEwMCwweDk2OTY5NjAwLDB4NmY2ZjZmMDAsMHg0YjRiNGIwMCwKLQkweDEzMTMxMzAwLDB4YmViZWJlMDAsMHg2MzYzNjMwMCwweDJlMmUyZTAwLAotCTB4ZTllOWU5MDAsMHg3OTc5NzkwMCwweGE3YTdhNzAwLDB4OGM4YzhjMDAsCi0JMHg5ZjlmOWYwMCwweDZlNmU2ZTAwLDB4YmNiY2JjMDAsMHg4ZThlOGUwMCwKLQkweDI5MjkyOTAwLDB4ZjVmNWY1MDAsMHhmOWY5ZjkwMCwweGI2YjZiNjAwLAotCTB4MmYyZjJmMDAsMHhmZGZkZmQwMCwweGI0YjRiNDAwLDB4NTk1OTU5MDAsCi0JMHg3ODc4NzgwMCwweDk4OTg5ODAwLDB4MDYwNjA2MDAsMHg2YTZhNmEwMCwKLQkweGU3ZTdlNzAwLDB4NDY0NjQ2MDAsMHg3MTcxNzEwMCwweGJhYmFiYTAwLAotCTB4ZDRkNGQ0MDAsMHgyNTI1MjUwMCwweGFiYWJhYjAwLDB4NDI0MjQyMDAsCi0JMHg4ODg4ODgwMCwweGEyYTJhMjAwLDB4OGQ4ZDhkMDAsMHhmYWZhZmEwMCwKLQkweDcyNzI3MjAwLDB4MDcwNzA3MDAsMHhiOWI5YjkwMCwweDU1NTU1NTAwLAotCTB4ZjhmOGY4MDAsMHhlZWVlZWUwMCwweGFjYWNhYzAwLDB4MGEwYTBhMDAsCi0JMHgzNjM2MzYwMCwweDQ5NDk0OTAwLDB4MmEyYTJhMDAsMHg2ODY4NjgwMCwKLQkweDNjM2MzYzAwLDB4MzgzODM4MDAsMHhmMWYxZjEwMCwweGE0YTRhNDAwLAotCTB4NDA0MDQwMDAsMHgyODI4MjgwMCwweGQzZDNkMzAwLDB4N2I3YjdiMDAsCi0JMHhiYmJiYmIwMCwweGM5YzljOTAwLDB4NDM0MzQzMDAsMHhjMWMxYzEwMCwKLQkweDE1MTUxNTAwLDB4ZTNlM2UzMDAsMHhhZGFkYWQwMCwweGY0ZjRmNDAwLAotCTB4Nzc3Nzc3MDAsMHhjN2M3YzcwMCwweDgwODA4MDAwLDB4OWU5ZTllMDAsCisJMHg3MDcwNzAwMCwgMHg4MjgyODIwMCwgMHgyYzJjMmMwMCwgMHhlY2VjZWMwMCwKKwkweGIzYjNiMzAwLCAweDI3MjcyNzAwLCAweGMwYzBjMDAwLCAweGU1ZTVlNTAwLAorCTB4ZTRlNGU0MDAsIDB4ODU4NTg1MDAsIDB4NTc1NzU3MDAsIDB4MzUzNTM1MDAsCisJMHhlYWVhZWEwMCwgMHgwYzBjMGMwMCwgMHhhZWFlYWUwMCwgMHg0MTQxNDEwMCwKKwkweDIzMjMyMzAwLCAweGVmZWZlZjAwLCAweDZiNmI2YjAwLCAweDkzOTM5MzAwLAorCTB4NDU0NTQ1MDAsIDB4MTkxOTE5MDAsIDB4YTVhNWE1MDAsIDB4MjEyMTIxMDAsCisJMHhlZGVkZWQwMCwgMHgwZTBlMGUwMCwgMHg0ZjRmNGYwMCwgMHg0ZTRlNGUwMCwKKwkweDFkMWQxZDAwLCAweDY1NjU2NTAwLCAweDkyOTI5MjAwLCAweGJkYmRiZDAwLAorCTB4ODY4Njg2MDAsIDB4YjhiOGI4MDAsIDB4YWZhZmFmMDAsIDB4OGY4ZjhmMDAsCisJMHg3YzdjN2MwMCwgMHhlYmViZWIwMCwgMHgxZjFmMWYwMCwgMHhjZWNlY2UwMCwKKwkweDNlM2UzZTAwLCAweDMwMzAzMDAwLCAweGRjZGNkYzAwLCAweDVmNWY1ZjAwLAorCTB4NWU1ZTVlMDAsIDB4YzVjNWM1MDAsIDB4MGIwYjBiMDAsIDB4MWExYTFhMDAsCisJMHhhNmE2YTYwMCwgMHhlMWUxZTEwMCwgMHgzOTM5MzkwMCwgMHhjYWNhY2EwMCwKKwkweGQ1ZDVkNTAwLCAweDQ3NDc0NzAwLCAweDVkNWQ1ZDAwLCAweDNkM2QzZDAwLAorCTB4ZDlkOWQ5MDAsIDB4MDEwMTAxMDAsIDB4NWE1YTVhMDAsIDB4ZDZkNmQ2MDAsCisJMHg1MTUxNTEwMCwgMHg1NjU2NTYwMCwgMHg2YzZjNmMwMCwgMHg0ZDRkNGQwMCwKKwkweDhiOGI4YjAwLCAweDBkMGQwZDAwLCAweDlhOWE5YTAwLCAweDY2NjY2NjAwLAorCTB4ZmJmYmZiMDAsIDB4Y2NjY2NjMDAsIDB4YjBiMGIwMDAsIDB4MmQyZDJkMDAsCisJMHg3NDc0NzQwMCwgMHgxMjEyMTIwMCwgMHgyYjJiMmIwMCwgMHgyMDIwMjAwMCwKKwkweGYwZjBmMDAwLCAweGIxYjFiMTAwLCAweDg0ODQ4NDAwLCAweDk5OTk5OTAwLAorCTB4ZGZkZmRmMDAsIDB4NGM0YzRjMDAsIDB4Y2JjYmNiMDAsIDB4YzJjMmMyMDAsCisJMHgzNDM0MzQwMCwgMHg3ZTdlN2UwMCwgMHg3Njc2NzYwMCwgMHgwNTA1MDUwMCwKKwkweDZkNmQ2ZDAwLCAweGI3YjdiNzAwLCAweGE5YTlhOTAwLCAweDMxMzEzMTAwLAorCTB4ZDFkMWQxMDAsIDB4MTcxNzE3MDAsIDB4MDQwNDA0MDAsIDB4ZDdkN2Q3MDAsCisJMHgxNDE0MTQwMCwgMHg1ODU4NTgwMCwgMHgzYTNhM2EwMCwgMHg2MTYxNjEwMCwKKwkweGRlZGVkZTAwLCAweDFiMWIxYjAwLCAweDExMTExMTAwLCAweDFjMWMxYzAwLAorCTB4MzIzMjMyMDAsIDB4MGYwZjBmMDAsIDB4OWM5YzljMDAsIDB4MTYxNjE2MDAsCisJMHg1MzUzNTMwMCwgMHgxODE4MTgwMCwgMHhmMmYyZjIwMCwgMHgyMjIyMjIwMCwKKwkweGZlZmVmZTAwLCAweDQ0NDQ0NDAwLCAweGNmY2ZjZjAwLCAweGIyYjJiMjAwLAorCTB4YzNjM2MzMDAsIDB4YjViNWI1MDAsIDB4N2E3YTdhMDAsIDB4OTE5MTkxMDAsCisJMHgyNDI0MjQwMCwgMHgwODA4MDgwMCwgMHhlOGU4ZTgwMCwgMHhhOGE4YTgwMCwKKwkweDYwNjA2MDAwLCAweGZjZmNmYzAwLCAweDY5Njk2OTAwLCAweDUwNTA1MDAwLAorCTB4YWFhYWFhMDAsIDB4ZDBkMGQwMDAsIDB4YTBhMGEwMDAsIDB4N2Q3ZDdkMDAsCisJMHhhMWExYTEwMCwgMHg4OTg5ODkwMCwgMHg2MjYyNjIwMCwgMHg5Nzk3OTcwMCwKKwkweDU0NTQ1NDAwLCAweDViNWI1YjAwLCAweDFlMWUxZTAwLCAweDk1OTU5NTAwLAorCTB4ZTBlMGUwMDAsIDB4ZmZmZmZmMDAsIDB4NjQ2NDY0MDAsIDB4ZDJkMmQyMDAsCisJMHgxMDEwMTAwMCwgMHhjNGM0YzQwMCwgMHgwMDAwMDAwMCwgMHg0ODQ4NDgwMCwKKwkweGEzYTNhMzAwLCAweGY3ZjdmNzAwLCAweDc1NzU3NTAwLCAweGRiZGJkYjAwLAorCTB4OGE4YThhMDAsIDB4MDMwMzAzMDAsIDB4ZTZlNmU2MDAsIDB4ZGFkYWRhMDAsCisJMHgwOTA5MDkwMCwgMHgzZjNmM2YwMCwgMHhkZGRkZGQwMCwgMHg5NDk0OTQwMCwKKwkweDg3ODc4NzAwLCAweDVjNWM1YzAwLCAweDgzODM4MzAwLCAweDAyMDIwMjAwLAorCTB4Y2RjZGNkMDAsIDB4NGE0YTRhMDAsIDB4OTA5MDkwMDAsIDB4MzMzMzMzMDAsCisJMHg3MzczNzMwMCwgMHg2NzY3NjcwMCwgMHhmNmY2ZjYwMCwgMHhmM2YzZjMwMCwKKwkweDlkOWQ5ZDAwLCAweDdmN2Y3ZjAwLCAweGJmYmZiZjAwLCAweGUyZTJlMjAwLAorCTB4NTI1MjUyMDAsIDB4OWI5YjliMDAsIDB4ZDhkOGQ4MDAsIDB4MjYyNjI2MDAsCisJMHhjOGM4YzgwMCwgMHgzNzM3MzcwMCwgMHhjNmM2YzYwMCwgMHgzYjNiM2IwMCwKKwkweDgxODE4MTAwLCAweDk2OTY5NjAwLCAweDZmNmY2ZjAwLCAweDRiNGI0YjAwLAorCTB4MTMxMzEzMDAsIDB4YmViZWJlMDAsIDB4NjM2MzYzMDAsIDB4MmUyZTJlMDAsCisJMHhlOWU5ZTkwMCwgMHg3OTc5NzkwMCwgMHhhN2E3YTcwMCwgMHg4YzhjOGMwMCwKKwkweDlmOWY5ZjAwLCAweDZlNmU2ZTAwLCAweGJjYmNiYzAwLCAweDhlOGU4ZTAwLAorCTB4MjkyOTI5MDAsIDB4ZjVmNWY1MDAsIDB4ZjlmOWY5MDAsIDB4YjZiNmI2MDAsCisJMHgyZjJmMmYwMCwgMHhmZGZkZmQwMCwgMHhiNGI0YjQwMCwgMHg1OTU5NTkwMCwKKwkweDc4Nzg3ODAwLCAweDk4OTg5ODAwLCAweDA2MDYwNjAwLCAweDZhNmE2YTAwLAorCTB4ZTdlN2U3MDAsIDB4NDY0NjQ2MDAsIDB4NzE3MTcxMDAsIDB4YmFiYWJhMDAsCisJMHhkNGQ0ZDQwMCwgMHgyNTI1MjUwMCwgMHhhYmFiYWIwMCwgMHg0MjQyNDIwMCwKKwkweDg4ODg4ODAwLCAweGEyYTJhMjAwLCAweDhkOGQ4ZDAwLCAweGZhZmFmYTAwLAorCTB4NzI3MjcyMDAsIDB4MDcwNzA3MDAsIDB4YjliOWI5MDAsIDB4NTU1NTU1MDAsCisJMHhmOGY4ZjgwMCwgMHhlZWVlZWUwMCwgMHhhY2FjYWMwMCwgMHgwYTBhMGEwMCwKKwkweDM2MzYzNjAwLCAweDQ5NDk0OTAwLCAweDJhMmEyYTAwLCAweDY4Njg2ODAwLAorCTB4M2MzYzNjMDAsIDB4MzgzODM4MDAsIDB4ZjFmMWYxMDAsIDB4YTRhNGE0MDAsCisJMHg0MDQwNDAwMCwgMHgyODI4MjgwMCwgMHhkM2QzZDMwMCwgMHg3YjdiN2IwMCwKKwkweGJiYmJiYjAwLCAweGM5YzljOTAwLCAweDQzNDM0MzAwLCAweGMxYzFjMTAwLAorCTB4MTUxNTE1MDAsIDB4ZTNlM2UzMDAsIDB4YWRhZGFkMDAsIDB4ZjRmNGY0MDAsCisJMHg3Nzc3NzcwMCwgMHhjN2M3YzcwMCwgMHg4MDgwODAwMCwgMHg5ZTllOWUwMCwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgY2FtZWxsaWFfc3AwMjIyWzI1Nl0gPSB7Ci0JMHgwMGUwZTBlMCwweDAwMDUwNTA1LDB4MDA1ODU4NTgsMHgwMGQ5ZDlkOSwKLQkweDAwNjc2NzY3LDB4MDA0ZTRlNGUsMHgwMDgxODE4MSwweDAwY2JjYmNiLAotCTB4MDBjOWM5YzksMHgwMDBiMGIwYiwweDAwYWVhZWFlLDB4MDA2YTZhNmEsCi0JMHgwMGQ1ZDVkNSwweDAwMTgxODE4LDB4MDA1ZDVkNWQsMHgwMDgyODI4MiwKLQkweDAwNDY0NjQ2LDB4MDBkZmRmZGYsMHgwMGQ2ZDZkNiwweDAwMjcyNzI3LAotCTB4MDA4YThhOGEsMHgwMDMyMzIzMiwweDAwNGI0YjRiLDB4MDA0MjQyNDIsCi0JMHgwMGRiZGJkYiwweDAwMWMxYzFjLDB4MDA5ZTllOWUsMHgwMDljOWM5YywKLQkweDAwM2EzYTNhLDB4MDBjYWNhY2EsMHgwMDI1MjUyNSwweDAwN2I3YjdiLAotCTB4MDAwZDBkMGQsMHgwMDcxNzE3MSwweDAwNWY1ZjVmLDB4MDAxZjFmMWYsCi0JMHgwMGY4ZjhmOCwweDAwZDdkN2Q3LDB4MDAzZTNlM2UsMHgwMDlkOWQ5ZCwKLQkweDAwN2M3YzdjLDB4MDA2MDYwNjAsMHgwMGI5YjliOSwweDAwYmViZWJlLAotCTB4MDBiY2JjYmMsMHgwMDhiOGI4YiwweDAwMTYxNjE2LDB4MDAzNDM0MzQsCi0JMHgwMDRkNGQ0ZCwweDAwYzNjM2MzLDB4MDA3MjcyNzIsMHgwMDk1OTU5NSwKLQkweDAwYWJhYmFiLDB4MDA4ZThlOGUsMHgwMGJhYmFiYSwweDAwN2E3YTdhLAotCTB4MDBiM2IzYjMsMHgwMDAyMDIwMiwweDAwYjRiNGI0LDB4MDBhZGFkYWQsCi0JMHgwMGEyYTJhMiwweDAwYWNhY2FjLDB4MDBkOGQ4ZDgsMHgwMDlhOWE5YSwKLQkweDAwMTcxNzE3LDB4MDAxYTFhMWEsMHgwMDM1MzUzNSwweDAwY2NjY2NjLAotCTB4MDBmN2Y3ZjcsMHgwMDk5OTk5OSwweDAwNjE2MTYxLDB4MDA1YTVhNWEsCi0JMHgwMGU4ZThlOCwweDAwMjQyNDI0LDB4MDA1NjU2NTYsMHgwMDQwNDA0MCwKLQkweDAwZTFlMWUxLDB4MDA2MzYzNjMsMHgwMDA5MDkwOSwweDAwMzMzMzMzLAotCTB4MDBiZmJmYmYsMHgwMDk4OTg5OCwweDAwOTc5Nzk3LDB4MDA4NTg1ODUsCi0JMHgwMDY4Njg2OCwweDAwZmNmY2ZjLDB4MDBlY2VjZWMsMHgwMDBhMGEwYSwKLQkweDAwZGFkYWRhLDB4MDA2ZjZmNmYsMHgwMDUzNTM1MywweDAwNjI2MjYyLAotCTB4MDBhM2EzYTMsMHgwMDJlMmUyZSwweDAwMDgwODA4LDB4MDBhZmFmYWYsCi0JMHgwMDI4MjgyOCwweDAwYjBiMGIwLDB4MDA3NDc0NzQsMHgwMGMyYzJjMiwKLQkweDAwYmRiZGJkLDB4MDAzNjM2MzYsMHgwMDIyMjIyMiwweDAwMzgzODM4LAotCTB4MDA2NDY0NjQsMHgwMDFlMWUxZSwweDAwMzkzOTM5LDB4MDAyYzJjMmMsCi0JMHgwMGE2YTZhNiwweDAwMzAzMDMwLDB4MDBlNWU1ZTUsMHgwMDQ0NDQ0NCwKLQkweDAwZmRmZGZkLDB4MDA4ODg4ODgsMHgwMDlmOWY5ZiwweDAwNjU2NTY1LAotCTB4MDA4Nzg3ODcsMHgwMDZiNmI2YiwweDAwZjRmNGY0LDB4MDAyMzIzMjMsCi0JMHgwMDQ4NDg0OCwweDAwMTAxMDEwLDB4MDBkMWQxZDEsMHgwMDUxNTE1MSwKLQkweDAwYzBjMGMwLDB4MDBmOWY5ZjksMHgwMGQyZDJkMiwweDAwYTBhMGEwLAotCTB4MDA1NTU1NTUsMHgwMGExYTFhMSwweDAwNDE0MTQxLDB4MDBmYWZhZmEsCi0JMHgwMDQzNDM0MywweDAwMTMxMzEzLDB4MDBjNGM0YzQsMHgwMDJmMmYyZiwKLQkweDAwYThhOGE4LDB4MDBiNmI2YjYsMHgwMDNjM2MzYywweDAwMmIyYjJiLAotCTB4MDBjMWMxYzEsMHgwMGZmZmZmZiwweDAwYzhjOGM4LDB4MDBhNWE1YTUsCi0JMHgwMDIwMjAyMCwweDAwODk4OTg5LDB4MDAwMDAwMDAsMHgwMDkwOTA5MCwKLQkweDAwNDc0NzQ3LDB4MDBlZmVmZWYsMHgwMGVhZWFlYSwweDAwYjdiN2I3LAotCTB4MDAxNTE1MTUsMHgwMDA2MDYwNiwweDAwY2RjZGNkLDB4MDBiNWI1YjUsCi0JMHgwMDEyMTIxMiwweDAwN2U3ZTdlLDB4MDBiYmJiYmIsMHgwMDI5MjkyOSwKLQkweDAwMGYwZjBmLDB4MDBiOGI4YjgsMHgwMDA3MDcwNywweDAwMDQwNDA0LAotCTB4MDA5YjliOWIsMHgwMDk0OTQ5NCwweDAwMjEyMTIxLDB4MDA2NjY2NjYsCi0JMHgwMGU2ZTZlNiwweDAwY2VjZWNlLDB4MDBlZGVkZWQsMHgwMGU3ZTdlNywKLQkweDAwM2IzYjNiLDB4MDBmZWZlZmUsMHgwMDdmN2Y3ZiwweDAwYzVjNWM1LAotCTB4MDBhNGE0YTQsMHgwMDM3MzczNywweDAwYjFiMWIxLDB4MDA0YzRjNGMsCi0JMHgwMDkxOTE5MSwweDAwNmU2ZTZlLDB4MDA4ZDhkOGQsMHgwMDc2NzY3NiwKLQkweDAwMDMwMzAzLDB4MDAyZDJkMmQsMHgwMGRlZGVkZSwweDAwOTY5Njk2LAotCTB4MDAyNjI2MjYsMHgwMDdkN2Q3ZCwweDAwYzZjNmM2LDB4MDA1YzVjNWMsCi0JMHgwMGQzZDNkMywweDAwZjJmMmYyLDB4MDA0ZjRmNGYsMHgwMDE5MTkxOSwKLQkweDAwM2YzZjNmLDB4MDBkY2RjZGMsMHgwMDc5Nzk3OSwweDAwMWQxZDFkLAotCTB4MDA1MjUyNTIsMHgwMGViZWJlYiwweDAwZjNmM2YzLDB4MDA2ZDZkNmQsCi0JMHgwMDVlNWU1ZSwweDAwZmJmYmZiLDB4MDA2OTY5NjksMHgwMGIyYjJiMiwKLQkweDAwZjBmMGYwLDB4MDAzMTMxMzEsMHgwMDBjMGMwYywweDAwZDRkNGQ0LAotCTB4MDBjZmNmY2YsMHgwMDhjOGM4YywweDAwZTJlMmUyLDB4MDA3NTc1NzUsCi0JMHgwMGE5YTlhOSwweDAwNGE0YTRhLDB4MDA1NzU3NTcsMHgwMDg0ODQ4NCwKLQkweDAwMTExMTExLDB4MDA0NTQ1NDUsMHgwMDFiMWIxYiwweDAwZjVmNWY1LAotCTB4MDBlNGU0ZTQsMHgwMDBlMGUwZSwweDAwNzM3MzczLDB4MDBhYWFhYWEsCi0JMHgwMGYxZjFmMSwweDAwZGRkZGRkLDB4MDA1OTU5NTksMHgwMDE0MTQxNCwKLQkweDAwNmM2YzZjLDB4MDA5MjkyOTIsMHgwMDU0NTQ1NCwweDAwZDBkMGQwLAotCTB4MDA3ODc4NzgsMHgwMDcwNzA3MCwweDAwZTNlM2UzLDB4MDA0OTQ5NDksCi0JMHgwMDgwODA4MCwweDAwNTA1MDUwLDB4MDBhN2E3YTcsMHgwMGY2ZjZmNiwKLQkweDAwNzc3Nzc3LDB4MDA5MzkzOTMsMHgwMDg2ODY4NiwweDAwODM4MzgzLAotCTB4MDAyYTJhMmEsMHgwMGM3YzdjNywweDAwNWI1YjViLDB4MDBlOWU5ZTksCi0JMHgwMGVlZWVlZSwweDAwOGY4ZjhmLDB4MDAwMTAxMDEsMHgwMDNkM2QzZCwKKwkweDAwZTBlMGUwLCAweDAwMDUwNTA1LCAweDAwNTg1ODU4LCAweDAwZDlkOWQ5LAorCTB4MDA2NzY3NjcsIDB4MDA0ZTRlNGUsIDB4MDA4MTgxODEsIDB4MDBjYmNiY2IsCisJMHgwMGM5YzljOSwgMHgwMDBiMGIwYiwgMHgwMGFlYWVhZSwgMHgwMDZhNmE2YSwKKwkweDAwZDVkNWQ1LCAweDAwMTgxODE4LCAweDAwNWQ1ZDVkLCAweDAwODI4MjgyLAorCTB4MDA0NjQ2NDYsIDB4MDBkZmRmZGYsIDB4MDBkNmQ2ZDYsIDB4MDAyNzI3MjcsCisJMHgwMDhhOGE4YSwgMHgwMDMyMzIzMiwgMHgwMDRiNGI0YiwgMHgwMDQyNDI0MiwKKwkweDAwZGJkYmRiLCAweDAwMWMxYzFjLCAweDAwOWU5ZTllLCAweDAwOWM5YzljLAorCTB4MDAzYTNhM2EsIDB4MDBjYWNhY2EsIDB4MDAyNTI1MjUsIDB4MDA3YjdiN2IsCisJMHgwMDBkMGQwZCwgMHgwMDcxNzE3MSwgMHgwMDVmNWY1ZiwgMHgwMDFmMWYxZiwKKwkweDAwZjhmOGY4LCAweDAwZDdkN2Q3LCAweDAwM2UzZTNlLCAweDAwOWQ5ZDlkLAorCTB4MDA3YzdjN2MsIDB4MDA2MDYwNjAsIDB4MDBiOWI5YjksIDB4MDBiZWJlYmUsCisJMHgwMGJjYmNiYywgMHgwMDhiOGI4YiwgMHgwMDE2MTYxNiwgMHgwMDM0MzQzNCwKKwkweDAwNGQ0ZDRkLCAweDAwYzNjM2MzLCAweDAwNzI3MjcyLCAweDAwOTU5NTk1LAorCTB4MDBhYmFiYWIsIDB4MDA4ZThlOGUsIDB4MDBiYWJhYmEsIDB4MDA3YTdhN2EsCisJMHgwMGIzYjNiMywgMHgwMDAyMDIwMiwgMHgwMGI0YjRiNCwgMHgwMGFkYWRhZCwKKwkweDAwYTJhMmEyLCAweDAwYWNhY2FjLCAweDAwZDhkOGQ4LCAweDAwOWE5YTlhLAorCTB4MDAxNzE3MTcsIDB4MDAxYTFhMWEsIDB4MDAzNTM1MzUsIDB4MDBjY2NjY2MsCisJMHgwMGY3ZjdmNywgMHgwMDk5OTk5OSwgMHgwMDYxNjE2MSwgMHgwMDVhNWE1YSwKKwkweDAwZThlOGU4LCAweDAwMjQyNDI0LCAweDAwNTY1NjU2LCAweDAwNDA0MDQwLAorCTB4MDBlMWUxZTEsIDB4MDA2MzYzNjMsIDB4MDAwOTA5MDksIDB4MDAzMzMzMzMsCisJMHgwMGJmYmZiZiwgMHgwMDk4OTg5OCwgMHgwMDk3OTc5NywgMHgwMDg1ODU4NSwKKwkweDAwNjg2ODY4LCAweDAwZmNmY2ZjLCAweDAwZWNlY2VjLCAweDAwMGEwYTBhLAorCTB4MDBkYWRhZGEsIDB4MDA2ZjZmNmYsIDB4MDA1MzUzNTMsIDB4MDA2MjYyNjIsCisJMHgwMGEzYTNhMywgMHgwMDJlMmUyZSwgMHgwMDA4MDgwOCwgMHgwMGFmYWZhZiwKKwkweDAwMjgyODI4LCAweDAwYjBiMGIwLCAweDAwNzQ3NDc0LCAweDAwYzJjMmMyLAorCTB4MDBiZGJkYmQsIDB4MDAzNjM2MzYsIDB4MDAyMjIyMjIsIDB4MDAzODM4MzgsCisJMHgwMDY0NjQ2NCwgMHgwMDFlMWUxZSwgMHgwMDM5MzkzOSwgMHgwMDJjMmMyYywKKwkweDAwYTZhNmE2LCAweDAwMzAzMDMwLCAweDAwZTVlNWU1LCAweDAwNDQ0NDQ0LAorCTB4MDBmZGZkZmQsIDB4MDA4ODg4ODgsIDB4MDA5ZjlmOWYsIDB4MDA2NTY1NjUsCisJMHgwMDg3ODc4NywgMHgwMDZiNmI2YiwgMHgwMGY0ZjRmNCwgMHgwMDIzMjMyMywKKwkweDAwNDg0ODQ4LCAweDAwMTAxMDEwLCAweDAwZDFkMWQxLCAweDAwNTE1MTUxLAorCTB4MDBjMGMwYzAsIDB4MDBmOWY5ZjksIDB4MDBkMmQyZDIsIDB4MDBhMGEwYTAsCisJMHgwMDU1NTU1NSwgMHgwMGExYTFhMSwgMHgwMDQxNDE0MSwgMHgwMGZhZmFmYSwKKwkweDAwNDM0MzQzLCAweDAwMTMxMzEzLCAweDAwYzRjNGM0LCAweDAwMmYyZjJmLAorCTB4MDBhOGE4YTgsIDB4MDBiNmI2YjYsIDB4MDAzYzNjM2MsIDB4MDAyYjJiMmIsCisJMHgwMGMxYzFjMSwgMHgwMGZmZmZmZiwgMHgwMGM4YzhjOCwgMHgwMGE1YTVhNSwKKwkweDAwMjAyMDIwLCAweDAwODk4OTg5LCAweDAwMDAwMDAwLCAweDAwOTA5MDkwLAorCTB4MDA0NzQ3NDcsIDB4MDBlZmVmZWYsIDB4MDBlYWVhZWEsIDB4MDBiN2I3YjcsCisJMHgwMDE1MTUxNSwgMHgwMDA2MDYwNiwgMHgwMGNkY2RjZCwgMHgwMGI1YjViNSwKKwkweDAwMTIxMjEyLCAweDAwN2U3ZTdlLCAweDAwYmJiYmJiLCAweDAwMjkyOTI5LAorCTB4MDAwZjBmMGYsIDB4MDBiOGI4YjgsIDB4MDAwNzA3MDcsIDB4MDAwNDA0MDQsCisJMHgwMDliOWI5YiwgMHgwMDk0OTQ5NCwgMHgwMDIxMjEyMSwgMHgwMDY2NjY2NiwKKwkweDAwZTZlNmU2LCAweDAwY2VjZWNlLCAweDAwZWRlZGVkLCAweDAwZTdlN2U3LAorCTB4MDAzYjNiM2IsIDB4MDBmZWZlZmUsIDB4MDA3ZjdmN2YsIDB4MDBjNWM1YzUsCisJMHgwMGE0YTRhNCwgMHgwMDM3MzczNywgMHgwMGIxYjFiMSwgMHgwMDRjNGM0YywKKwkweDAwOTE5MTkxLCAweDAwNmU2ZTZlLCAweDAwOGQ4ZDhkLCAweDAwNzY3Njc2LAorCTB4MDAwMzAzMDMsIDB4MDAyZDJkMmQsIDB4MDBkZWRlZGUsIDB4MDA5Njk2OTYsCisJMHgwMDI2MjYyNiwgMHgwMDdkN2Q3ZCwgMHgwMGM2YzZjNiwgMHgwMDVjNWM1YywKKwkweDAwZDNkM2QzLCAweDAwZjJmMmYyLCAweDAwNGY0ZjRmLCAweDAwMTkxOTE5LAorCTB4MDAzZjNmM2YsIDB4MDBkY2RjZGMsIDB4MDA3OTc5NzksIDB4MDAxZDFkMWQsCisJMHgwMDUyNTI1MiwgMHgwMGViZWJlYiwgMHgwMGYzZjNmMywgMHgwMDZkNmQ2ZCwKKwkweDAwNWU1ZTVlLCAweDAwZmJmYmZiLCAweDAwNjk2OTY5LCAweDAwYjJiMmIyLAorCTB4MDBmMGYwZjAsIDB4MDAzMTMxMzEsIDB4MDAwYzBjMGMsIDB4MDBkNGQ0ZDQsCisJMHgwMGNmY2ZjZiwgMHgwMDhjOGM4YywgMHgwMGUyZTJlMiwgMHgwMDc1NzU3NSwKKwkweDAwYTlhOWE5LCAweDAwNGE0YTRhLCAweDAwNTc1NzU3LCAweDAwODQ4NDg0LAorCTB4MDAxMTExMTEsIDB4MDA0NTQ1NDUsIDB4MDAxYjFiMWIsIDB4MDBmNWY1ZjUsCisJMHgwMGU0ZTRlNCwgMHgwMDBlMGUwZSwgMHgwMDczNzM3MywgMHgwMGFhYWFhYSwKKwkweDAwZjFmMWYxLCAweDAwZGRkZGRkLCAweDAwNTk1OTU5LCAweDAwMTQxNDE0LAorCTB4MDA2YzZjNmMsIDB4MDA5MjkyOTIsIDB4MDA1NDU0NTQsIDB4MDBkMGQwZDAsCisJMHgwMDc4Nzg3OCwgMHgwMDcwNzA3MCwgMHgwMGUzZTNlMywgMHgwMDQ5NDk0OSwKKwkweDAwODA4MDgwLCAweDAwNTA1MDUwLCAweDAwYTdhN2E3LCAweDAwZjZmNmY2LAorCTB4MDA3Nzc3NzcsIDB4MDA5MzkzOTMsIDB4MDA4Njg2ODYsIDB4MDA4MzgzODMsCisJMHgwMDJhMmEyYSwgMHgwMGM3YzdjNywgMHgwMDViNWI1YiwgMHgwMGU5ZTllOSwKKwkweDAwZWVlZWVlLCAweDAwOGY4ZjhmLCAweDAwMDEwMTAxLCAweDAwM2QzZDNkLAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBjYW1lbGxpYV9zcDMwMzNbMjU2XSA9IHsKLQkweDM4MDAzODM4LDB4NDEwMDQxNDEsMHgxNjAwMTYxNiwweDc2MDA3Njc2LAotCTB4ZDkwMGQ5ZDksMHg5MzAwOTM5MywweDYwMDA2MDYwLDB4ZjIwMGYyZjIsCi0JMHg3MjAwNzI3MiwweGMyMDBjMmMyLDB4YWIwMGFiYWIsMHg5YTAwOWE5YSwKLQkweDc1MDA3NTc1LDB4MDYwMDA2MDYsMHg1NzAwNTc1NywweGEwMDBhMGEwLAotCTB4OTEwMDkxOTEsMHhmNzAwZjdmNywweGI1MDBiNWI1LDB4YzkwMGM5YzksCi0JMHhhMjAwYTJhMiwweDhjMDA4YzhjLDB4ZDIwMGQyZDIsMHg5MDAwOTA5MCwKLQkweGY2MDBmNmY2LDB4MDcwMDA3MDcsMHhhNzAwYTdhNywweDI3MDAyNzI3LAotCTB4OGUwMDhlOGUsMHhiMjAwYjJiMiwweDQ5MDA0OTQ5LDB4ZGUwMGRlZGUsCi0JMHg0MzAwNDM0MywweDVjMDA1YzVjLDB4ZDcwMGQ3ZDcsMHhjNzAwYzdjNywKLQkweDNlMDAzZTNlLDB4ZjUwMGY1ZjUsMHg4ZjAwOGY4ZiwweDY3MDA2NzY3LAotCTB4MWYwMDFmMWYsMHgxODAwMTgxOCwweDZlMDA2ZTZlLDB4YWYwMGFmYWYsCi0JMHgyZjAwMmYyZiwweGUyMDBlMmUyLDB4ODUwMDg1ODUsMHgwZDAwMGQwZCwKLQkweDUzMDA1MzUzLDB4ZjAwMGYwZjAsMHg5YzAwOWM5YywweDY1MDA2NTY1LAotCTB4ZWEwMGVhZWEsMHhhMzAwYTNhMywweGFlMDBhZWFlLDB4OWUwMDllOWUsCi0JMHhlYzAwZWNlYywweDgwMDA4MDgwLDB4MmQwMDJkMmQsMHg2YjAwNmI2YiwKLQkweGE4MDBhOGE4LDB4MmIwMDJiMmIsMHgzNjAwMzYzNiwweGE2MDBhNmE2LAotCTB4YzUwMGM1YzUsMHg4NjAwODY4NiwweDRkMDA0ZDRkLDB4MzMwMDMzMzMsCi0JMHhmZDAwZmRmZCwweDY2MDA2NjY2LDB4NTgwMDU4NTgsMHg5NjAwOTY5NiwKLQkweDNhMDAzYTNhLDB4MDkwMDA5MDksMHg5NTAwOTU5NSwweDEwMDAxMDEwLAotCTB4NzgwMDc4NzgsMHhkODAwZDhkOCwweDQyMDA0MjQyLDB4Y2MwMGNjY2MsCi0JMHhlZjAwZWZlZiwweDI2MDAyNjI2LDB4ZTUwMGU1ZTUsMHg2MTAwNjE2MSwKLQkweDFhMDAxYTFhLDB4M2YwMDNmM2YsMHgzYjAwM2IzYiwweDgyMDA4MjgyLAotCTB4YjYwMGI2YjYsMHhkYjAwZGJkYiwweGQ0MDBkNGQ0LDB4OTgwMDk4OTgsCi0JMHhlODAwZThlOCwweDhiMDA4YjhiLDB4MDIwMDAyMDIsMHhlYjAwZWJlYiwKLQkweDBhMDAwYTBhLDB4MmMwMDJjMmMsMHgxZDAwMWQxZCwweGIwMDBiMGIwLAotCTB4NmYwMDZmNmYsMHg4ZDAwOGQ4ZCwweDg4MDA4ODg4LDB4MGUwMDBlMGUsCi0JMHgxOTAwMTkxOSwweDg3MDA4Nzg3LDB4NGUwMDRlNGUsMHgwYjAwMGIwYiwKLQkweGE5MDBhOWE5LDB4MGMwMDBjMGMsMHg3OTAwNzk3OSwweDExMDAxMTExLAotCTB4N2YwMDdmN2YsMHgyMjAwMjIyMiwweGU3MDBlN2U3LDB4NTkwMDU5NTksCi0JMHhlMTAwZTFlMSwweGRhMDBkYWRhLDB4M2QwMDNkM2QsMHhjODAwYzhjOCwKLQkweDEyMDAxMjEyLDB4MDQwMDA0MDQsMHg3NDAwNzQ3NCwweDU0MDA1NDU0LAotCTB4MzAwMDMwMzAsMHg3ZTAwN2U3ZSwweGI0MDBiNGI0LDB4MjgwMDI4MjgsCi0JMHg1NTAwNTU1NSwweDY4MDA2ODY4LDB4NTAwMDUwNTAsMHhiZTAwYmViZSwKLQkweGQwMDBkMGQwLDB4YzQwMGM0YzQsMHgzMTAwMzEzMSwweGNiMDBjYmNiLAotCTB4MmEwMDJhMmEsMHhhZDAwYWRhZCwweDBmMDAwZjBmLDB4Y2EwMGNhY2EsCi0JMHg3MDAwNzA3MCwweGZmMDBmZmZmLDB4MzIwMDMyMzIsMHg2OTAwNjk2OSwKLQkweDA4MDAwODA4LDB4NjIwMDYyNjIsMHgwMDAwMDAwMCwweDI0MDAyNDI0LAotCTB4ZDEwMGQxZDEsMHhmYjAwZmJmYiwweGJhMDBiYWJhLDB4ZWQwMGVkZWQsCi0JMHg0NTAwNDU0NSwweDgxMDA4MTgxLDB4NzMwMDczNzMsMHg2ZDAwNmQ2ZCwKLQkweDg0MDA4NDg0LDB4OWYwMDlmOWYsMHhlZTAwZWVlZSwweDRhMDA0YTRhLAotCTB4YzMwMGMzYzMsMHgyZTAwMmUyZSwweGMxMDBjMWMxLDB4MDEwMDAxMDEsCi0JMHhlNjAwZTZlNiwweDI1MDAyNTI1LDB4NDgwMDQ4NDgsMHg5OTAwOTk5OSwKLQkweGI5MDBiOWI5LDB4YjMwMGIzYjMsMHg3YjAwN2I3YiwweGY5MDBmOWY5LAotCTB4Y2UwMGNlY2UsMHhiZjAwYmZiZiwweGRmMDBkZmRmLDB4NzEwMDcxNzEsCi0JMHgyOTAwMjkyOSwweGNkMDBjZGNkLDB4NmMwMDZjNmMsMHgxMzAwMTMxMywKLQkweDY0MDA2NDY0LDB4OWIwMDliOWIsMHg2MzAwNjM2MywweDlkMDA5ZDlkLAotCTB4YzAwMGMwYzAsMHg0YjAwNGI0YiwweGI3MDBiN2I3LDB4YTUwMGE1YTUsCi0JMHg4OTAwODk4OSwweDVmMDA1ZjVmLDB4YjEwMGIxYjEsMHgxNzAwMTcxNywKLQkweGY0MDBmNGY0LDB4YmMwMGJjYmMsMHhkMzAwZDNkMywweDQ2MDA0NjQ2LAotCTB4Y2YwMGNmY2YsMHgzNzAwMzczNywweDVlMDA1ZTVlLDB4NDcwMDQ3NDcsCi0JMHg5NDAwOTQ5NCwweGZhMDBmYWZhLDB4ZmMwMGZjZmMsMHg1YjAwNWI1YiwKLQkweDk3MDA5Nzk3LDB4ZmUwMGZlZmUsMHg1YTAwNWE1YSwweGFjMDBhY2FjLAotCTB4M2MwMDNjM2MsMHg0YzAwNGM0YywweDAzMDAwMzAzLDB4MzUwMDM1MzUsCi0JMHhmMzAwZjNmMywweDIzMDAyMzIzLDB4YjgwMGI4YjgsMHg1ZDAwNWQ1ZCwKLQkweDZhMDA2YTZhLDB4OTIwMDkyOTIsMHhkNTAwZDVkNSwweDIxMDAyMTIxLAotCTB4NDQwMDQ0NDQsMHg1MTAwNTE1MSwweGM2MDBjNmM2LDB4N2QwMDdkN2QsCi0JMHgzOTAwMzkzOSwweDgzMDA4MzgzLDB4ZGMwMGRjZGMsMHhhYTAwYWFhYSwKLQkweDdjMDA3YzdjLDB4NzcwMDc3NzcsMHg1NjAwNTY1NiwweDA1MDAwNTA1LAotCTB4MWIwMDFiMWIsMHhhNDAwYTRhNCwweDE1MDAxNTE1LDB4MzQwMDM0MzQsCi0JMHgxZTAwMWUxZSwweDFjMDAxYzFjLDB4ZjgwMGY4ZjgsMHg1MjAwNTI1MiwKLQkweDIwMDAyMDIwLDB4MTQwMDE0MTQsMHhlOTAwZTllOSwweGJkMDBiZGJkLAotCTB4ZGQwMGRkZGQsMHhlNDAwZTRlNCwweGExMDBhMWExLDB4ZTAwMGUwZTAsCi0JMHg4YTAwOGE4YSwweGYxMDBmMWYxLDB4ZDYwMGQ2ZDYsMHg3YTAwN2E3YSwKLQkweGJiMDBiYmJiLDB4ZTMwMGUzZTMsMHg0MDAwNDA0MCwweDRmMDA0ZjRmLAorCTB4MzgwMDM4MzgsIDB4NDEwMDQxNDEsIDB4MTYwMDE2MTYsIDB4NzYwMDc2NzYsCisJMHhkOTAwZDlkOSwgMHg5MzAwOTM5MywgMHg2MDAwNjA2MCwgMHhmMjAwZjJmMiwKKwkweDcyMDA3MjcyLCAweGMyMDBjMmMyLCAweGFiMDBhYmFiLCAweDlhMDA5YTlhLAorCTB4NzUwMDc1NzUsIDB4MDYwMDA2MDYsIDB4NTcwMDU3NTcsIDB4YTAwMGEwYTAsCisJMHg5MTAwOTE5MSwgMHhmNzAwZjdmNywgMHhiNTAwYjViNSwgMHhjOTAwYzljOSwKKwkweGEyMDBhMmEyLCAweDhjMDA4YzhjLCAweGQyMDBkMmQyLCAweDkwMDA5MDkwLAorCTB4ZjYwMGY2ZjYsIDB4MDcwMDA3MDcsIDB4YTcwMGE3YTcsIDB4MjcwMDI3MjcsCisJMHg4ZTAwOGU4ZSwgMHhiMjAwYjJiMiwgMHg0OTAwNDk0OSwgMHhkZTAwZGVkZSwKKwkweDQzMDA0MzQzLCAweDVjMDA1YzVjLCAweGQ3MDBkN2Q3LCAweGM3MDBjN2M3LAorCTB4M2UwMDNlM2UsIDB4ZjUwMGY1ZjUsIDB4OGYwMDhmOGYsIDB4NjcwMDY3NjcsCisJMHgxZjAwMWYxZiwgMHgxODAwMTgxOCwgMHg2ZTAwNmU2ZSwgMHhhZjAwYWZhZiwKKwkweDJmMDAyZjJmLCAweGUyMDBlMmUyLCAweDg1MDA4NTg1LCAweDBkMDAwZDBkLAorCTB4NTMwMDUzNTMsIDB4ZjAwMGYwZjAsIDB4OWMwMDljOWMsIDB4NjUwMDY1NjUsCisJMHhlYTAwZWFlYSwgMHhhMzAwYTNhMywgMHhhZTAwYWVhZSwgMHg5ZTAwOWU5ZSwKKwkweGVjMDBlY2VjLCAweDgwMDA4MDgwLCAweDJkMDAyZDJkLCAweDZiMDA2YjZiLAorCTB4YTgwMGE4YTgsIDB4MmIwMDJiMmIsIDB4MzYwMDM2MzYsIDB4YTYwMGE2YTYsCisJMHhjNTAwYzVjNSwgMHg4NjAwODY4NiwgMHg0ZDAwNGQ0ZCwgMHgzMzAwMzMzMywKKwkweGZkMDBmZGZkLCAweDY2MDA2NjY2LCAweDU4MDA1ODU4LCAweDk2MDA5Njk2LAorCTB4M2EwMDNhM2EsIDB4MDkwMDA5MDksIDB4OTUwMDk1OTUsIDB4MTAwMDEwMTAsCisJMHg3ODAwNzg3OCwgMHhkODAwZDhkOCwgMHg0MjAwNDI0MiwgMHhjYzAwY2NjYywKKwkweGVmMDBlZmVmLCAweDI2MDAyNjI2LCAweGU1MDBlNWU1LCAweDYxMDA2MTYxLAorCTB4MWEwMDFhMWEsIDB4M2YwMDNmM2YsIDB4M2IwMDNiM2IsIDB4ODIwMDgyODIsCisJMHhiNjAwYjZiNiwgMHhkYjAwZGJkYiwgMHhkNDAwZDRkNCwgMHg5ODAwOTg5OCwKKwkweGU4MDBlOGU4LCAweDhiMDA4YjhiLCAweDAyMDAwMjAyLCAweGViMDBlYmViLAorCTB4MGEwMDBhMGEsIDB4MmMwMDJjMmMsIDB4MWQwMDFkMWQsIDB4YjAwMGIwYjAsCisJMHg2ZjAwNmY2ZiwgMHg4ZDAwOGQ4ZCwgMHg4ODAwODg4OCwgMHgwZTAwMGUwZSwKKwkweDE5MDAxOTE5LCAweDg3MDA4Nzg3LCAweDRlMDA0ZTRlLCAweDBiMDAwYjBiLAorCTB4YTkwMGE5YTksIDB4MGMwMDBjMGMsIDB4NzkwMDc5NzksIDB4MTEwMDExMTEsCisJMHg3ZjAwN2Y3ZiwgMHgyMjAwMjIyMiwgMHhlNzAwZTdlNywgMHg1OTAwNTk1OSwKKwkweGUxMDBlMWUxLCAweGRhMDBkYWRhLCAweDNkMDAzZDNkLCAweGM4MDBjOGM4LAorCTB4MTIwMDEyMTIsIDB4MDQwMDA0MDQsIDB4NzQwMDc0NzQsIDB4NTQwMDU0NTQsCisJMHgzMDAwMzAzMCwgMHg3ZTAwN2U3ZSwgMHhiNDAwYjRiNCwgMHgyODAwMjgyOCwKKwkweDU1MDA1NTU1LCAweDY4MDA2ODY4LCAweDUwMDA1MDUwLCAweGJlMDBiZWJlLAorCTB4ZDAwMGQwZDAsIDB4YzQwMGM0YzQsIDB4MzEwMDMxMzEsIDB4Y2IwMGNiY2IsCisJMHgyYTAwMmEyYSwgMHhhZDAwYWRhZCwgMHgwZjAwMGYwZiwgMHhjYTAwY2FjYSwKKwkweDcwMDA3MDcwLCAweGZmMDBmZmZmLCAweDMyMDAzMjMyLCAweDY5MDA2OTY5LAorCTB4MDgwMDA4MDgsIDB4NjIwMDYyNjIsIDB4MDAwMDAwMDAsIDB4MjQwMDI0MjQsCisJMHhkMTAwZDFkMSwgMHhmYjAwZmJmYiwgMHhiYTAwYmFiYSwgMHhlZDAwZWRlZCwKKwkweDQ1MDA0NTQ1LCAweDgxMDA4MTgxLCAweDczMDA3MzczLCAweDZkMDA2ZDZkLAorCTB4ODQwMDg0ODQsIDB4OWYwMDlmOWYsIDB4ZWUwMGVlZWUsIDB4NGEwMDRhNGEsCisJMHhjMzAwYzNjMywgMHgyZTAwMmUyZSwgMHhjMTAwYzFjMSwgMHgwMTAwMDEwMSwKKwkweGU2MDBlNmU2LCAweDI1MDAyNTI1LCAweDQ4MDA0ODQ4LCAweDk5MDA5OTk5LAorCTB4YjkwMGI5YjksIDB4YjMwMGIzYjMsIDB4N2IwMDdiN2IsIDB4ZjkwMGY5ZjksCisJMHhjZTAwY2VjZSwgMHhiZjAwYmZiZiwgMHhkZjAwZGZkZiwgMHg3MTAwNzE3MSwKKwkweDI5MDAyOTI5LCAweGNkMDBjZGNkLCAweDZjMDA2YzZjLCAweDEzMDAxMzEzLAorCTB4NjQwMDY0NjQsIDB4OWIwMDliOWIsIDB4NjMwMDYzNjMsIDB4OWQwMDlkOWQsCisJMHhjMDAwYzBjMCwgMHg0YjAwNGI0YiwgMHhiNzAwYjdiNywgMHhhNTAwYTVhNSwKKwkweDg5MDA4OTg5LCAweDVmMDA1ZjVmLCAweGIxMDBiMWIxLCAweDE3MDAxNzE3LAorCTB4ZjQwMGY0ZjQsIDB4YmMwMGJjYmMsIDB4ZDMwMGQzZDMsIDB4NDYwMDQ2NDYsCisJMHhjZjAwY2ZjZiwgMHgzNzAwMzczNywgMHg1ZTAwNWU1ZSwgMHg0NzAwNDc0NywKKwkweDk0MDA5NDk0LCAweGZhMDBmYWZhLCAweGZjMDBmY2ZjLCAweDViMDA1YjViLAorCTB4OTcwMDk3OTcsIDB4ZmUwMGZlZmUsIDB4NWEwMDVhNWEsIDB4YWMwMGFjYWMsCisJMHgzYzAwM2MzYywgMHg0YzAwNGM0YywgMHgwMzAwMDMwMywgMHgzNTAwMzUzNSwKKwkweGYzMDBmM2YzLCAweDIzMDAyMzIzLCAweGI4MDBiOGI4LCAweDVkMDA1ZDVkLAorCTB4NmEwMDZhNmEsIDB4OTIwMDkyOTIsIDB4ZDUwMGQ1ZDUsIDB4MjEwMDIxMjEsCisJMHg0NDAwNDQ0NCwgMHg1MTAwNTE1MSwgMHhjNjAwYzZjNiwgMHg3ZDAwN2Q3ZCwKKwkweDM5MDAzOTM5LCAweDgzMDA4MzgzLCAweGRjMDBkY2RjLCAweGFhMDBhYWFhLAorCTB4N2MwMDdjN2MsIDB4NzcwMDc3NzcsIDB4NTYwMDU2NTYsIDB4MDUwMDA1MDUsCisJMHgxYjAwMWIxYiwgMHhhNDAwYTRhNCwgMHgxNTAwMTUxNSwgMHgzNDAwMzQzNCwKKwkweDFlMDAxZTFlLCAweDFjMDAxYzFjLCAweGY4MDBmOGY4LCAweDUyMDA1MjUyLAorCTB4MjAwMDIwMjAsIDB4MTQwMDE0MTQsIDB4ZTkwMGU5ZTksIDB4YmQwMGJkYmQsCisJMHhkZDAwZGRkZCwgMHhlNDAwZTRlNCwgMHhhMTAwYTFhMSwgMHhlMDAwZTBlMCwKKwkweDhhMDA4YThhLCAweGYxMDBmMWYxLCAweGQ2MDBkNmQ2LCAweDdhMDA3YTdhLAorCTB4YmIwMGJiYmIsIDB4ZTMwMGUzZTMsIDB4NDAwMDQwNDAsIDB4NGYwMDRmNGYsCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGNhbWVsbGlhX3NwNDQwNFsyNTZdID0gewotCTB4NzA3MDAwNzAsMHgyYzJjMDAyYywweGIzYjMwMGIzLDB4YzBjMDAwYzAsCi0JMHhlNGU0MDBlNCwweDU3NTcwMDU3LDB4ZWFlYTAwZWEsMHhhZWFlMDBhZSwKLQkweDIzMjMwMDIzLDB4NmI2YjAwNmIsMHg0NTQ1MDA0NSwweGE1YTUwMGE1LAotCTB4ZWRlZDAwZWQsMHg0ZjRmMDA0ZiwweDFkMWQwMDFkLDB4OTI5MjAwOTIsCi0JMHg4Njg2MDA4NiwweGFmYWYwMGFmLDB4N2M3YzAwN2MsMHgxZjFmMDAxZiwKLQkweDNlM2UwMDNlLDB4ZGNkYzAwZGMsMHg1ZTVlMDA1ZSwweDBiMGIwMDBiLAotCTB4YTZhNjAwYTYsMHgzOTM5MDAzOSwweGQ1ZDUwMGQ1LDB4NWQ1ZDAwNWQsCi0JMHhkOWQ5MDBkOSwweDVhNWEwMDVhLDB4NTE1MTAwNTEsMHg2YzZjMDA2YywKLQkweDhiOGIwMDhiLDB4OWE5YTAwOWEsMHhmYmZiMDBmYiwweGIwYjAwMGIwLAotCTB4NzQ3NDAwNzQsMHgyYjJiMDAyYiwweGYwZjAwMGYwLDB4ODQ4NDAwODQsCi0JMHhkZmRmMDBkZiwweGNiY2IwMGNiLDB4MzQzNDAwMzQsMHg3Njc2MDA3NiwKLQkweDZkNmQwMDZkLDB4YTlhOTAwYTksMHhkMWQxMDBkMSwweDA0MDQwMDA0LAotCTB4MTQxNDAwMTQsMHgzYTNhMDAzYSwweGRlZGUwMGRlLDB4MTExMTAwMTEsCi0JMHgzMjMyMDAzMiwweDljOWMwMDljLDB4NTM1MzAwNTMsMHhmMmYyMDBmMiwKLQkweGZlZmUwMGZlLDB4Y2ZjZjAwY2YsMHhjM2MzMDBjMywweDdhN2EwMDdhLAotCTB4MjQyNDAwMjQsMHhlOGU4MDBlOCwweDYwNjAwMDYwLDB4Njk2OTAwNjksCi0JMHhhYWFhMDBhYSwweGEwYTAwMGEwLDB4YTFhMTAwYTEsMHg2MjYyMDA2MiwKLQkweDU0NTQwMDU0LDB4MWUxZTAwMWUsMHhlMGUwMDBlMCwweDY0NjQwMDY0LAotCTB4MTAxMDAwMTAsMHgwMDAwMDAwMCwweGEzYTMwMGEzLDB4NzU3NTAwNzUsCi0JMHg4YThhMDA4YSwweGU2ZTYwMGU2LDB4MDkwOTAwMDksMHhkZGRkMDBkZCwKLQkweDg3ODcwMDg3LDB4ODM4MzAwODMsMHhjZGNkMDBjZCwweDkwOTAwMDkwLAotCTB4NzM3MzAwNzMsMHhmNmY2MDBmNiwweDlkOWQwMDlkLDB4YmZiZjAwYmYsCi0JMHg1MjUyMDA1MiwweGQ4ZDgwMGQ4LDB4YzhjODAwYzgsMHhjNmM2MDBjNiwKLQkweDgxODEwMDgxLDB4NmY2ZjAwNmYsMHgxMzEzMDAxMywweDYzNjMwMDYzLAotCTB4ZTllOTAwZTksMHhhN2E3MDBhNywweDlmOWYwMDlmLDB4YmNiYzAwYmMsCi0JMHgyOTI5MDAyOSwweGY5ZjkwMGY5LDB4MmYyZjAwMmYsMHhiNGI0MDBiNCwKLQkweDc4NzgwMDc4LDB4MDYwNjAwMDYsMHhlN2U3MDBlNywweDcxNzEwMDcxLAotCTB4ZDRkNDAwZDQsMHhhYmFiMDBhYiwweDg4ODgwMDg4LDB4OGQ4ZDAwOGQsCi0JMHg3MjcyMDA3MiwweGI5YjkwMGI5LDB4ZjhmODAwZjgsMHhhY2FjMDBhYywKLQkweDM2MzYwMDM2LDB4MmEyYTAwMmEsMHgzYzNjMDAzYywweGYxZjEwMGYxLAotCTB4NDA0MDAwNDAsMHhkM2QzMDBkMywweGJiYmIwMGJiLDB4NDM0MzAwNDMsCi0JMHgxNTE1MDAxNSwweGFkYWQwMGFkLDB4Nzc3NzAwNzcsMHg4MDgwMDA4MCwKLQkweDgyODIwMDgyLDB4ZWNlYzAwZWMsMHgyNzI3MDAyNywweGU1ZTUwMGU1LAotCTB4ODU4NTAwODUsMHgzNTM1MDAzNSwweDBjMGMwMDBjLDB4NDE0MTAwNDEsCi0JMHhlZmVmMDBlZiwweDkzOTMwMDkzLDB4MTkxOTAwMTksMHgyMTIxMDAyMSwKLQkweDBlMGUwMDBlLDB4NGU0ZTAwNGUsMHg2NTY1MDA2NSwweGJkYmQwMGJkLAotCTB4YjhiODAwYjgsMHg4ZjhmMDA4ZiwweGViZWIwMGViLDB4Y2VjZTAwY2UsCi0JMHgzMDMwMDAzMCwweDVmNWYwMDVmLDB4YzVjNTAwYzUsMHgxYTFhMDAxYSwKLQkweGUxZTEwMGUxLDB4Y2FjYTAwY2EsMHg0NzQ3MDA0NywweDNkM2QwMDNkLAotCTB4MDEwMTAwMDEsMHhkNmQ2MDBkNiwweDU2NTYwMDU2LDB4NGQ0ZDAwNGQsCi0JMHgwZDBkMDAwZCwweDY2NjYwMDY2LDB4Y2NjYzAwY2MsMHgyZDJkMDAyZCwKLQkweDEyMTIwMDEyLDB4MjAyMDAwMjAsMHhiMWIxMDBiMSwweDk5OTkwMDk5LAotCTB4NGM0YzAwNGMsMHhjMmMyMDBjMiwweDdlN2UwMDdlLDB4MDUwNTAwMDUsCi0JMHhiN2I3MDBiNywweDMxMzEwMDMxLDB4MTcxNzAwMTcsMHhkN2Q3MDBkNywKLQkweDU4NTgwMDU4LDB4NjE2MTAwNjEsMHgxYjFiMDAxYiwweDFjMWMwMDFjLAotCTB4MGYwZjAwMGYsMHgxNjE2MDAxNiwweDE4MTgwMDE4LDB4MjIyMjAwMjIsCi0JMHg0NDQ0MDA0NCwweGIyYjIwMGIyLDB4YjViNTAwYjUsMHg5MTkxMDA5MSwKLQkweDA4MDgwMDA4LDB4YThhODAwYTgsMHhmY2ZjMDBmYywweDUwNTAwMDUwLAotCTB4ZDBkMDAwZDAsMHg3ZDdkMDA3ZCwweDg5ODkwMDg5LDB4OTc5NzAwOTcsCi0JMHg1YjViMDA1YiwweDk1OTUwMDk1LDB4ZmZmZjAwZmYsMHhkMmQyMDBkMiwKLQkweGM0YzQwMGM0LDB4NDg0ODAwNDgsMHhmN2Y3MDBmNywweGRiZGIwMGRiLAotCTB4MDMwMzAwMDMsMHhkYWRhMDBkYSwweDNmM2YwMDNmLDB4OTQ5NDAwOTQsCi0JMHg1YzVjMDA1YywweDAyMDIwMDAyLDB4NGE0YTAwNGEsMHgzMzMzMDAzMywKLQkweDY3NjcwMDY3LDB4ZjNmMzAwZjMsMHg3ZjdmMDA3ZiwweGUyZTIwMGUyLAotCTB4OWI5YjAwOWIsMHgyNjI2MDAyNiwweDM3MzcwMDM3LDB4M2IzYjAwM2IsCi0JMHg5Njk2MDA5NiwweDRiNGIwMDRiLDB4YmViZTAwYmUsMHgyZTJlMDAyZSwKLQkweDc5NzkwMDc5LDB4OGM4YzAwOGMsMHg2ZTZlMDA2ZSwweDhlOGUwMDhlLAotCTB4ZjVmNTAwZjUsMHhiNmI2MDBiNiwweGZkZmQwMGZkLDB4NTk1OTAwNTksCi0JMHg5ODk4MDA5OCwweDZhNmEwMDZhLDB4NDY0NjAwNDYsMHhiYWJhMDBiYSwKLQkweDI1MjUwMDI1LDB4NDI0MjAwNDIsMHhhMmEyMDBhMiwweGZhZmEwMGZhLAotCTB4MDcwNzAwMDcsMHg1NTU1MDA1NSwweGVlZWUwMGVlLDB4MGEwYTAwMGEsCi0JMHg0OTQ5MDA0OSwweDY4NjgwMDY4LDB4MzgzODAwMzgsMHhhNGE0MDBhNCwKLQkweDI4MjgwMDI4LDB4N2I3YjAwN2IsMHhjOWM5MDBjOSwweGMxYzEwMGMxLAotCTB4ZTNlMzAwZTMsMHhmNGY0MDBmNCwweGM3YzcwMGM3LDB4OWU5ZTAwOWUsCisJMHg3MDcwMDA3MCwgMHgyYzJjMDAyYywgMHhiM2IzMDBiMywgMHhjMGMwMDBjMCwKKwkweGU0ZTQwMGU0LCAweDU3NTcwMDU3LCAweGVhZWEwMGVhLCAweGFlYWUwMGFlLAorCTB4MjMyMzAwMjMsIDB4NmI2YjAwNmIsIDB4NDU0NTAwNDUsIDB4YTVhNTAwYTUsCisJMHhlZGVkMDBlZCwgMHg0ZjRmMDA0ZiwgMHgxZDFkMDAxZCwgMHg5MjkyMDA5MiwKKwkweDg2ODYwMDg2LCAweGFmYWYwMGFmLCAweDdjN2MwMDdjLCAweDFmMWYwMDFmLAorCTB4M2UzZTAwM2UsIDB4ZGNkYzAwZGMsIDB4NWU1ZTAwNWUsIDB4MGIwYjAwMGIsCisJMHhhNmE2MDBhNiwgMHgzOTM5MDAzOSwgMHhkNWQ1MDBkNSwgMHg1ZDVkMDA1ZCwKKwkweGQ5ZDkwMGQ5LCAweDVhNWEwMDVhLCAweDUxNTEwMDUxLCAweDZjNmMwMDZjLAorCTB4OGI4YjAwOGIsIDB4OWE5YTAwOWEsIDB4ZmJmYjAwZmIsIDB4YjBiMDAwYjAsCisJMHg3NDc0MDA3NCwgMHgyYjJiMDAyYiwgMHhmMGYwMDBmMCwgMHg4NDg0MDA4NCwKKwkweGRmZGYwMGRmLCAweGNiY2IwMGNiLCAweDM0MzQwMDM0LCAweDc2NzYwMDc2LAorCTB4NmQ2ZDAwNmQsIDB4YTlhOTAwYTksIDB4ZDFkMTAwZDEsIDB4MDQwNDAwMDQsCisJMHgxNDE0MDAxNCwgMHgzYTNhMDAzYSwgMHhkZWRlMDBkZSwgMHgxMTExMDAxMSwKKwkweDMyMzIwMDMyLCAweDljOWMwMDljLCAweDUzNTMwMDUzLCAweGYyZjIwMGYyLAorCTB4ZmVmZTAwZmUsIDB4Y2ZjZjAwY2YsIDB4YzNjMzAwYzMsIDB4N2E3YTAwN2EsCisJMHgyNDI0MDAyNCwgMHhlOGU4MDBlOCwgMHg2MDYwMDA2MCwgMHg2OTY5MDA2OSwKKwkweGFhYWEwMGFhLCAweGEwYTAwMGEwLCAweGExYTEwMGExLCAweDYyNjIwMDYyLAorCTB4NTQ1NDAwNTQsIDB4MWUxZTAwMWUsIDB4ZTBlMDAwZTAsIDB4NjQ2NDAwNjQsCisJMHgxMDEwMDAxMCwgMHgwMDAwMDAwMCwgMHhhM2EzMDBhMywgMHg3NTc1MDA3NSwKKwkweDhhOGEwMDhhLCAweGU2ZTYwMGU2LCAweDA5MDkwMDA5LCAweGRkZGQwMGRkLAorCTB4ODc4NzAwODcsIDB4ODM4MzAwODMsIDB4Y2RjZDAwY2QsIDB4OTA5MDAwOTAsCisJMHg3MzczMDA3MywgMHhmNmY2MDBmNiwgMHg5ZDlkMDA5ZCwgMHhiZmJmMDBiZiwKKwkweDUyNTIwMDUyLCAweGQ4ZDgwMGQ4LCAweGM4YzgwMGM4LCAweGM2YzYwMGM2LAorCTB4ODE4MTAwODEsIDB4NmY2ZjAwNmYsIDB4MTMxMzAwMTMsIDB4NjM2MzAwNjMsCisJMHhlOWU5MDBlOSwgMHhhN2E3MDBhNywgMHg5ZjlmMDA5ZiwgMHhiY2JjMDBiYywKKwkweDI5MjkwMDI5LCAweGY5ZjkwMGY5LCAweDJmMmYwMDJmLCAweGI0YjQwMGI0LAorCTB4Nzg3ODAwNzgsIDB4MDYwNjAwMDYsIDB4ZTdlNzAwZTcsIDB4NzE3MTAwNzEsCisJMHhkNGQ0MDBkNCwgMHhhYmFiMDBhYiwgMHg4ODg4MDA4OCwgMHg4ZDhkMDA4ZCwKKwkweDcyNzIwMDcyLCAweGI5YjkwMGI5LCAweGY4ZjgwMGY4LCAweGFjYWMwMGFjLAorCTB4MzYzNjAwMzYsIDB4MmEyYTAwMmEsIDB4M2MzYzAwM2MsIDB4ZjFmMTAwZjEsCisJMHg0MDQwMDA0MCwgMHhkM2QzMDBkMywgMHhiYmJiMDBiYiwgMHg0MzQzMDA0MywKKwkweDE1MTUwMDE1LCAweGFkYWQwMGFkLCAweDc3NzcwMDc3LCAweDgwODAwMDgwLAorCTB4ODI4MjAwODIsIDB4ZWNlYzAwZWMsIDB4MjcyNzAwMjcsIDB4ZTVlNTAwZTUsCisJMHg4NTg1MDA4NSwgMHgzNTM1MDAzNSwgMHgwYzBjMDAwYywgMHg0MTQxMDA0MSwKKwkweGVmZWYwMGVmLCAweDkzOTMwMDkzLCAweDE5MTkwMDE5LCAweDIxMjEwMDIxLAorCTB4MGUwZTAwMGUsIDB4NGU0ZTAwNGUsIDB4NjU2NTAwNjUsIDB4YmRiZDAwYmQsCisJMHhiOGI4MDBiOCwgMHg4ZjhmMDA4ZiwgMHhlYmViMDBlYiwgMHhjZWNlMDBjZSwKKwkweDMwMzAwMDMwLCAweDVmNWYwMDVmLCAweGM1YzUwMGM1LCAweDFhMWEwMDFhLAorCTB4ZTFlMTAwZTEsIDB4Y2FjYTAwY2EsIDB4NDc0NzAwNDcsIDB4M2QzZDAwM2QsCisJMHgwMTAxMDAwMSwgMHhkNmQ2MDBkNiwgMHg1NjU2MDA1NiwgMHg0ZDRkMDA0ZCwKKwkweDBkMGQwMDBkLCAweDY2NjYwMDY2LCAweGNjY2MwMGNjLCAweDJkMmQwMDJkLAorCTB4MTIxMjAwMTIsIDB4MjAyMDAwMjAsIDB4YjFiMTAwYjEsIDB4OTk5OTAwOTksCisJMHg0YzRjMDA0YywgMHhjMmMyMDBjMiwgMHg3ZTdlMDA3ZSwgMHgwNTA1MDAwNSwKKwkweGI3YjcwMGI3LCAweDMxMzEwMDMxLCAweDE3MTcwMDE3LCAweGQ3ZDcwMGQ3LAorCTB4NTg1ODAwNTgsIDB4NjE2MTAwNjEsIDB4MWIxYjAwMWIsIDB4MWMxYzAwMWMsCisJMHgwZjBmMDAwZiwgMHgxNjE2MDAxNiwgMHgxODE4MDAxOCwgMHgyMjIyMDAyMiwKKwkweDQ0NDQwMDQ0LCAweGIyYjIwMGIyLCAweGI1YjUwMGI1LCAweDkxOTEwMDkxLAorCTB4MDgwODAwMDgsIDB4YThhODAwYTgsIDB4ZmNmYzAwZmMsIDB4NTA1MDAwNTAsCisJMHhkMGQwMDBkMCwgMHg3ZDdkMDA3ZCwgMHg4OTg5MDA4OSwgMHg5Nzk3MDA5NywKKwkweDViNWIwMDViLCAweDk1OTUwMDk1LCAweGZmZmYwMGZmLCAweGQyZDIwMGQyLAorCTB4YzRjNDAwYzQsIDB4NDg0ODAwNDgsIDB4ZjdmNzAwZjcsIDB4ZGJkYjAwZGIsCisJMHgwMzAzMDAwMywgMHhkYWRhMDBkYSwgMHgzZjNmMDAzZiwgMHg5NDk0MDA5NCwKKwkweDVjNWMwMDVjLCAweDAyMDIwMDAyLCAweDRhNGEwMDRhLCAweDMzMzMwMDMzLAorCTB4Njc2NzAwNjcsIDB4ZjNmMzAwZjMsIDB4N2Y3ZjAwN2YsIDB4ZTJlMjAwZTIsCisJMHg5YjliMDA5YiwgMHgyNjI2MDAyNiwgMHgzNzM3MDAzNywgMHgzYjNiMDAzYiwKKwkweDk2OTYwMDk2LCAweDRiNGIwMDRiLCAweGJlYmUwMGJlLCAweDJlMmUwMDJlLAorCTB4Nzk3OTAwNzksIDB4OGM4YzAwOGMsIDB4NmU2ZTAwNmUsIDB4OGU4ZTAwOGUsCisJMHhmNWY1MDBmNSwgMHhiNmI2MDBiNiwgMHhmZGZkMDBmZCwgMHg1OTU5MDA1OSwKKwkweDk4OTgwMDk4LCAweDZhNmEwMDZhLCAweDQ2NDYwMDQ2LCAweGJhYmEwMGJhLAorCTB4MjUyNTAwMjUsIDB4NDI0MjAwNDIsIDB4YTJhMjAwYTIsIDB4ZmFmYTAwZmEsCisJMHgwNzA3MDAwNywgMHg1NTU1MDA1NSwgMHhlZWVlMDBlZSwgMHgwYTBhMDAwYSwKKwkweDQ5NDkwMDQ5LCAweDY4NjgwMDY4LCAweDM4MzgwMDM4LCAweGE0YTQwMGE0LAorCTB4MjgyODAwMjgsIDB4N2I3YjAwN2IsIDB4YzljOTAwYzksIDB4YzFjMTAwYzEsCisJMHhlM2UzMDBlMywgMHhmNGY0MDBmNCwgMHhjN2M3MDBjNywgMHg5ZTllMDA5ZSwKIH07CiAKIApAQCAtMzQ0LDcgKzM0NCw3IEBACiAJbHIgPSAobHIgPDwgYml0cykgKyAocmwgPj4gKDMyIC0gYml0cykpOwlcCiAJcmwgPSAocmwgPDwgYml0cykgKyAocnIgPj4gKDMyIC0gYml0cykpOwlcCiAJcnIgPSAocnIgPDwgYml0cykgKyAodzAgPj4gKDMyIC0gYml0cykpOwlcCi0gICAgfSB3aGlsZSgwKQorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgUk9MRFFvMzIobGwsIGxyLCBybCwgcnIsIHcwLCB3MSwgYml0cykJCVwKICAgICBkbyB7CQkJCQkJXApAQCAtMzU0LDcgKzM1NCw3IEBACiAJbHIgPSAocmwgPDwgKGJpdHMgLSAzMikpICsgKHJyID4+ICg2NCAtIGJpdHMpKTsJXAogCXJsID0gKHJyIDw8IChiaXRzIC0gMzIpKSArICh3MCA+PiAoNjQgLSBiaXRzKSk7CVwKIAlyciA9ICh3MCA8PCAoYml0cyAtIDMyKSkgKyAodzEgPj4gKDY0IC0gYml0cykpOwlcCi0gICAgfSB3aGlsZSgwKQorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgQ0FNRUxMSUFfRih4bCwgeHIsIGtsLCBrciwgeWwsIHlyLCBpbCwgaXIsIHQwLCB0MSkJXAogICAgIGRvIHsJCQkJCQkJXApAQCAtMzczLDcgKzM3Myw3IEBACiAJeWwgXj0geXI7CQkJCQkJXAogCXlyID0gcm9yMzIoeXIsIDgpOwkJCQkJXAogCXlyIF49IHlsOwkJCQkJCVwKLSAgICB9IHdoaWxlKDApCisgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBTVUJLRVlfTChJTkRFWCkgKHN1YmtleVsoSU5ERVgpKjJdKQogI2RlZmluZSBTVUJLRVlfUihJTkRFWCkgKHN1YmtleVsoSU5ERVgpKjIgKyAxXSkKQEAgLTgzNSw3ICs4MzUsNyBAQAogc3RhdGljIHZvaWQgY2FtZWxsaWFfc2V0dXAxOTIoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1MzIgKnN1YmtleSkKIHsKIAl1bnNpZ25lZCBjaGFyIGtrWzMyXTsKLQl1MzIga3JsbCwga3Jsciwga3JybCxrcnJyOworCXUzMiBrcmxsLCBrcmxyLCBrcnJsLCBrcnJyOwogCiAJbWVtY3B5KGtrLCBrZXksIDI0KTsKIAltZW1jcHkoKHVuc2lnbmVkIGNoYXIgKikma3JsbCwga2V5KzE2LCA0KTsKQEAgLTg2NSw3ICs4NjUsNyBAQAogCXQxIHw9IGxyOwkJCQkJCQlcCiAJbGwgXj0gdDE7CQkJCQkJCVwKIAlyciBePSByb2wzMih0MywgMSk7CQkJCQkJXAotICAgIH0gd2hpbGUoMCkKKyAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIENBTUVMTElBX1JPVU5EU00oeGwsIHhyLCBrbCwga3IsIHlsLCB5ciwgaWwsIGlyKQkJXAogICAgIGRvIHsJCQkJCQkJCVwKQEAgLTg4MSwxMiArODgxLDEyIEBACiAJaXIgXj0gaWwgXiBrcjsJCQkJCQkJXAogCXlsIF49IGlyOwkJCQkJCQlcCiAJeXIgXj0gcm9yMzIoaWwsIDgpIF4gaXI7CQkJCQkJXAotICAgIH0gd2hpbGUoMCkKKyAgICB9IHdoaWxlICgwKQogCiAvKiBtYXggPSAyNDogMTI4Yml0IGVuY3J5cHQsIG1heCA9IDMyOiAyNTZiaXQgZW5jcnlwdCAqLwogc3RhdGljIHZvaWQgY2FtZWxsaWFfZG9fZW5jcnlwdChjb25zdCB1MzIgKnN1YmtleSwgdTMyICppbywgdW5zaWduZWQgbWF4KQogewotCXUzMiBpbCxpcix0MCx0MTsgICAgICAgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGVzICovCisJdTMyIGlsLCBpciwgdDAsIHQxOyAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZXMgKi8KIAogCS8qIHByZSB3aGl0ZW5pbmcgYnV0IGFic29yYiBrdzIgKi8KIAlpb1swXSBePSBTVUJLRVlfTCgwKTsKQEAgLTg5NCwzMCArODk0LDMwIEBACiAKIAkvKiBtYWluIGl0ZXJhdGlvbiAqLwogI2RlZmluZSBST1VORFMoaSkgZG8geyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwgXAotCQkJIFNVQktFWV9MKGkgKyAyKSxTVUJLRVlfUihpICsgMiksIFwKLQkJCSBpb1syXSxpb1szXSxpbCxpcik7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLCBcCi0JCQkgU1VCS0VZX0woaSArIDMpLFNVQktFWV9SKGkgKyAzKSwgXAotCQkJIGlvWzBdLGlvWzFdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sIFwKLQkJCSBTVUJLRVlfTChpICsgNCksU1VCS0VZX1IoaSArIDQpLCBcCi0JCQkgaW9bMl0saW9bM10saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwgXAotCQkJIFNVQktFWV9MKGkgKyA1KSxTVUJLRVlfUihpICsgNSksIFwKLQkJCSBpb1swXSxpb1sxXSxpbCxpcik7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLCBcCi0JCQkgU1VCS0VZX0woaSArIDYpLFNVQktFWV9SKGkgKyA2KSwgXAotCQkJIGlvWzJdLGlvWzNdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sIFwKLQkJCSBTVUJLRVlfTChpICsgNyksU1VCS0VZX1IoaSArIDcpLCBcCi0JCQkgaW9bMF0saW9bMV0saWwsaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1swXSwgaW9bMV0sIFwKKwkJCSBTVUJLRVlfTChpICsgMiksIFNVQktFWV9SKGkgKyAyKSwgXAorCQkJIGlvWzJdLCBpb1szXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMl0sIGlvWzNdLCBcCisJCQkgU1VCS0VZX0woaSArIDMpLCBTVUJLRVlfUihpICsgMyksIFwKKwkJCSBpb1swXSwgaW9bMV0sIGlsLCBpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzBdLCBpb1sxXSwgXAorCQkJIFNVQktFWV9MKGkgKyA0KSwgU1VCS0VZX1IoaSArIDQpLCBcCisJCQkgaW9bMl0sIGlvWzNdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1syXSwgaW9bM10sIFwKKwkJCSBTVUJLRVlfTChpICsgNSksIFNVQktFWV9SKGkgKyA1KSwgXAorCQkJIGlvWzBdLCBpb1sxXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMF0sIGlvWzFdLCBcCisJCQkgU1VCS0VZX0woaSArIDYpLCBTVUJLRVlfUihpICsgNiksIFwKKwkJCSBpb1syXSwgaW9bM10sIGlsLCBpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzJdLCBpb1szXSwgXAorCQkJIFNVQktFWV9MKGkgKyA3KSwgU1VCS0VZX1IoaSArIDcpLCBcCisJCQkgaW9bMF0sIGlvWzFdLCBpbCwgaXIpOyBcCiB9IHdoaWxlICgwKQogI2RlZmluZSBGTFMoaSkgZG8geyBcCi0JQ0FNRUxMSUFfRkxTKGlvWzBdLGlvWzFdLGlvWzJdLGlvWzNdLCBcCi0JCSAgICAgU1VCS0VZX0woaSArIDApLFNVQktFWV9SKGkgKyAwKSwgXAotCQkgICAgIFNVQktFWV9MKGkgKyAxKSxTVUJLRVlfUihpICsgMSksIFwKLQkJICAgICB0MCx0MSxpbCxpcik7IFwKKwlDQU1FTExJQV9GTFMoaW9bMF0sIGlvWzFdLCBpb1syXSwgaW9bM10sIFwKKwkJICAgICBTVUJLRVlfTChpICsgMCksIFNVQktFWV9SKGkgKyAwKSwgXAorCQkgICAgIFNVQktFWV9MKGkgKyAxKSwgU1VCS0VZX1IoaSArIDEpLCBcCisJCSAgICAgdDAsIHQxLCBpbCwgaXIpOyBcCiB9IHdoaWxlICgwKQogCiAJUk9VTkRTKDApOwpAQCAtOTQxLDcgKzk0MSw3IEBACiAKIHN0YXRpYyB2b2lkIGNhbWVsbGlhX2RvX2RlY3J5cHQoY29uc3QgdTMyICpzdWJrZXksIHUzMiAqaW8sIHVuc2lnbmVkIGkpCiB7Ci0JdTMyIGlsLGlyLHQwLHQxOyAgICAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZXMgKi8KKwl1MzIgaWwsIGlyLCB0MCwgdDE7ICAgICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlcyAqLwogCiAJLyogcHJlIHdoaXRlbmluZyBidXQgYWJzb3JiIGt3MiAqLwogCWlvWzBdIF49IFNVQktFWV9MKGkpOwpAQCAtOTQ5LDMwICs5NDksMzAgQEAKIAogCS8qIG1haW4gaXRlcmF0aW9uICovCiAjZGVmaW5lIFJPVU5EUyhpKSBkbyB7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLCBcCi0JCQkgU1VCS0VZX0woaSArIDcpLFNVQktFWV9SKGkgKyA3KSwgXAotCQkJIGlvWzJdLGlvWzNdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sIFwKLQkJCSBTVUJLRVlfTChpICsgNiksU1VCS0VZX1IoaSArIDYpLCBcCi0JCQkgaW9bMF0saW9bMV0saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwgXAotCQkJIFNVQktFWV9MKGkgKyA1KSxTVUJLRVlfUihpICsgNSksIFwKLQkJCSBpb1syXSxpb1szXSxpbCxpcik7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLCBcCi0JCQkgU1VCS0VZX0woaSArIDQpLFNVQktFWV9SKGkgKyA0KSwgXAotCQkJIGlvWzBdLGlvWzFdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sIFwKLQkJCSBTVUJLRVlfTChpICsgMyksU1VCS0VZX1IoaSArIDMpLCBcCi0JCQkgaW9bMl0saW9bM10saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwgXAotCQkJIFNVQktFWV9MKGkgKyAyKSxTVUJLRVlfUihpICsgMiksIFwKLQkJCSBpb1swXSxpb1sxXSxpbCxpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzBdLCBpb1sxXSwgXAorCQkJIFNVQktFWV9MKGkgKyA3KSwgU1VCS0VZX1IoaSArIDcpLCBcCisJCQkgaW9bMl0sIGlvWzNdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1syXSwgaW9bM10sIFwKKwkJCSBTVUJLRVlfTChpICsgNiksIFNVQktFWV9SKGkgKyA2KSwgXAorCQkJIGlvWzBdLCBpb1sxXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMF0sIGlvWzFdLCBcCisJCQkgU1VCS0VZX0woaSArIDUpLCBTVUJLRVlfUihpICsgNSksIFwKKwkJCSBpb1syXSwgaW9bM10sIGlsLCBpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzJdLCBpb1szXSwgXAorCQkJIFNVQktFWV9MKGkgKyA0KSwgU1VCS0VZX1IoaSArIDQpLCBcCisJCQkgaW9bMF0sIGlvWzFdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1swXSwgaW9bMV0sIFwKKwkJCSBTVUJLRVlfTChpICsgMyksIFNVQktFWV9SKGkgKyAzKSwgXAorCQkJIGlvWzJdLCBpb1szXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMl0sIGlvWzNdLCBcCisJCQkgU1VCS0VZX0woaSArIDIpLCBTVUJLRVlfUihpICsgMiksIFwKKwkJCSBpb1swXSwgaW9bMV0sIGlsLCBpcik7IFwKIH0gd2hpbGUgKDApCiAjZGVmaW5lIEZMUyhpKSBkbyB7IFwKLQlDQU1FTExJQV9GTFMoaW9bMF0saW9bMV0saW9bMl0saW9bM10sIFwKLQkJICAgICBTVUJLRVlfTChpICsgMSksU1VCS0VZX1IoaSArIDEpLCBcCi0JCSAgICAgU1VCS0VZX0woaSArIDApLFNVQktFWV9SKGkgKyAwKSwgXAotCQkgICAgIHQwLHQxLGlsLGlyKTsgXAorCUNBTUVMTElBX0ZMUyhpb1swXSwgaW9bMV0sIGlvWzJdLCBpb1szXSwgXAorCQkgICAgIFNVQktFWV9MKGkgKyAxKSwgU1VCS0VZX1IoaSArIDEpLCBcCisJCSAgICAgU1VCS0VZX0woaSArIDApLCBTVUJLRVlfUihpICsgMCksIFwKKwkJICAgICB0MCwgdDEsIGlsLCBpcik7IFwKIH0gd2hpbGUgKDApCiAKIAlpZiAoaSA9PSAzMikgewpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Nhc3Q1LmMgYi9jcnlwdG8vY2FzdDUuYwppbmRleCA4Y2JlMjhmLi5hMWQyMjk0IDEwMDY0NAotLS0gYS9jcnlwdG8vY2FzdDUuYworKysgYi9jcnlwdG8vY2FzdDUuYwpAQCAtNTY5LDEyICs1NjksMTIgQEAKIAkweGVhZWU2ODAxLCAweDhkYjJhMjgzLCAweGVhOGJmNTllCiB9OwogCi0jZGVmaW5lIEYxKEQsbSxyKSAgKCAgKEkgPSAoKG0pICsgKEQpKSksIChJPXJvbDMyKEksKHIpKSksICAgXAotICAgICgoKHMxW0kgPj4gMjRdIF4gczJbKEk+PjE2KSYweGZmXSkgLSBzM1soST4+OCkmMHhmZl0pICsgczRbSSYweGZmXSkgKQotI2RlZmluZSBGMihELG0scikgICggIChJID0gKChtKSBeIChEKSkpLCAoST1yb2wzMihJLChyKSkpLCAgIFwKLSAgICAoKChzMVtJID4+IDI0XSAtIHMyWyhJPj4xNikmMHhmZl0pICsgczNbKEk+PjgpJjB4ZmZdKSBeIHM0W0kmMHhmZl0pICkKLSNkZWZpbmUgRjMoRCxtLHIpICAoICAoSSA9ICgobSkgLSAoRCkpKSwgKEk9cm9sMzIoSSwocikpKSwgICBcCi0gICAgKCgoczFbSSA+PiAyNF0gKyBzMlsoST4+MTYpJjB4ZmZdKSBeIHMzWyhJPj44KSYweGZmXSkgLSBzNFtJJjB4ZmZdKSApCisjZGVmaW5lIEYxKEQsIG0sIHIpICAoKEkgPSAoKG0pICsgKEQpKSksIChJID0gcm9sMzIoSSwgKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdIF4gczJbKEk+PjE2KSYweGZmXSkgLSBzM1soST4+OCkmMHhmZl0pICsgczRbSSYweGZmXSkpCisjZGVmaW5lIEYyKEQsIG0sIHIpICAoKEkgPSAoKG0pIF4gKEQpKSksIChJID0gcm9sMzIoSSwgKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdIC0gczJbKEk+PjE2KSYweGZmXSkgKyBzM1soST4+OCkmMHhmZl0pIF4gczRbSSYweGZmXSkpCisjZGVmaW5lIEYzKEQsIG0sIHIpICAoKEkgPSAoKG0pIC0gKEQpKSksIChJID0gcm9sMzIoSSwgKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdICsgczJbKEk+PjE2KSYweGZmXSkgXiBzM1soST4+OCkmMHhmZl0pIC0gczRbSSYweGZmXSkpCiAKIAogc3RhdGljIHZvaWQgY2FzdDVfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0YnVmLCBjb25zdCB1OCAqaW5idWYpCkBAIC02OTQsNyArNjk0LDcgQEAKIAlkc3RbMV0gPSBjcHVfdG9fYmUzMihsKTsKIH0KIAotc3RhdGljIHZvaWQga2V5X3NjaGVkdWxlKHUzMiAqIHgsIHUzMiAqIHosIHUzMiAqIGspCitzdGF0aWMgdm9pZCBrZXlfc2NoZWR1bGUodTMyICp4LCB1MzIgKnosIHUzMiAqaykKIHsKIAogI2RlZmluZSB4aShpKSAgICgoeFsoaSkvNF0gPj4gKDgqKDMtKChpKSU0KSkpKSAmIDB4ZmYpCmRpZmYgLS1naXQgYS9jcnlwdG8vY2FzdDYuYyBiL2NyeXB0by9jYXN0Ni5jCmluZGV4IDAwN2QwMmIuLmUwYzE1YTYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jYXN0Ni5jCisrKyBiL2NyeXB0by9jYXN0Ni5jCkBAIC0xMSw3ICsxMSw3IEBACiAgKiB1bmRlciB0aGUgdGVybXMgb2YgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCiAgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQpAQCAtMzUsMTIgKzM1LDEyIEBACiAJdTggS3JbMTJdWzRdOwogfTsKIAotI2RlZmluZSBGMShELHIsbSkgICggIChJID0gKChtKSArIChEKSkpLCAoST1yb2wzMihJLChyKSkpLCAgIFwKLSAgICAoKChzMVtJID4+IDI0XSBeIHMyWyhJPj4xNikmMHhmZl0pIC0gczNbKEk+PjgpJjB4ZmZdKSArIHM0W0kmMHhmZl0pICkKLSNkZWZpbmUgRjIoRCxyLG0pICAoICAoSSA9ICgobSkgXiAoRCkpKSwgKEk9cm9sMzIoSSwocikpKSwgICBcCi0gICAgKCgoczFbSSA+PiAyNF0gLSBzMlsoST4+MTYpJjB4ZmZdKSArIHMzWyhJPj44KSYweGZmXSkgXiBzNFtJJjB4ZmZdKSApCi0jZGVmaW5lIEYzKEQscixtKSAgKCAgKEkgPSAoKG0pIC0gKEQpKSksIChJPXJvbDMyKEksKHIpKSksICAgXAotICAgICgoKHMxW0kgPj4gMjRdICsgczJbKEk+PjE2KSYweGZmXSkgXiBzM1soST4+OCkmMHhmZl0pIC0gczRbSSYweGZmXSkgKQorI2RlZmluZSBGMShELCByLCBtKSAgKChJID0gKChtKSArIChEKSkpLCAoSSA9IHJvbDMyKEksIChyKSkpLCAgIFwKKyAgICAoKChzMVtJID4+IDI0XSBeIHMyWyhJPj4xNikmMHhmZl0pIC0gczNbKEk+PjgpJjB4ZmZdKSArIHM0W0kmMHhmZl0pKQorI2RlZmluZSBGMihELCByLCBtKSAgKChJID0gKChtKSBeIChEKSkpLCAoSSA9IHJvbDMyKEksIChyKSkpLCAgIFwKKyAgICAoKChzMVtJID4+IDI0XSAtIHMyWyhJPj4xNikmMHhmZl0pICsgczNbKEk+PjgpJjB4ZmZdKSBeIHM0W0kmMHhmZl0pKQorI2RlZmluZSBGMyhELCByLCBtKSAgKChJID0gKChtKSAtIChEKSkpLCAoSSA9IHJvbDMyKEksIChyKSkpLCAgIFwKKyAgICAoKChzMVtJID4+IDI0XSArIHMyWyhJPj4xNikmMHhmZl0pIF4gczNbKEk+PjgpJjB4ZmZdKSAtIHM0W0kmMHhmZl0pKQogCiBzdGF0aWMgY29uc3QgdTMyIHMxWzI1Nl0gPSB7CiAJMHgzMGZiNDBkNCwgMHg5ZmEwZmYwYiwgMHg2YmVjY2QyZiwgMHgzZjI1OGM3YSwgMHgxZTIxM2YyZiwKQEAgLTMxMiw3ICszMTIsNyBAQAogCiBzdGF0aWMgY29uc3QgdTMyIFRtWzI0XVs4XSA9IHsKIAl7IDB4NWE4Mjc5OTksIDB4Yzk1YzY1M2EsIDB4MzgzNjUwZGIsIDB4YTcxMDNjN2MsIDB4MTVlYTI4MWQsCi0JCTB4ODRjNDEzYmUsIDB4ZjM5ZGZmNWYsIDB4NjI3N2ViMDAgfSAsIAorCQkweDg0YzQxM2JlLCAweGYzOWRmZjVmLCAweDYyNzdlYjAwIH0gLAogCXsgMHhkMTUxZDZhMSwgMHg0MDJiYzI0MiwgMHhhZjA1YWRlMywgMHgxZGRmOTk4NCwgMHg4Y2I5ODUyNSwKIAkJMHhmYjkzNzBjNiwgMHg2YTZkNWM2NywgMHhkOTQ3NDgwOCB9ICwKIAl7IDB4NDgyMTMzYTksIDB4YjZmYjFmNGEsIDB4MjVkNTBhZWIsIDB4OTRhZWY2OGMsIDB4MDM4OGUyMmQsCkBAIC0zNjksNyArMzY5LDggQEAKIH07CiAKIC8qIGZvcndhcmQgb2N0YXZlICovCi1zdGF0aWMgdm9pZCBXKHUzMiAqa2V5LCB1bnNpZ25lZCBpbnQgaSkgeworc3RhdGljIHZvaWQgVyh1MzIgKmtleSwgdW5zaWduZWQgaW50IGkpCit7CiAJdTMyIEk7CiAJa2V5WzZdIF49IEYxKGtleVs3XSwgVHJbaSAlIDRdWzBdLCBUbVtpXVswXSk7CiAJa2V5WzVdIF49IEYyKGtleVs2XSwgVHJbaSAlIDRdWzFdLCBUbVtpXVsxXSk7CkBAIC0zNzcsNyArMzc4LDcgQEAKIAlrZXlbM10gXj0gRjEoa2V5WzRdLCBUcltpICUgNF1bM10sIFRtW2ldWzNdKTsKIAlrZXlbMl0gXj0gRjIoa2V5WzNdLCBUcltpICUgNF1bNF0sIFRtW2ldWzRdKTsKIAlrZXlbMV0gXj0gRjMoa2V5WzJdLCBUcltpICUgNF1bNV0sIFRtW2ldWzVdKTsKLQlrZXlbMF0gXj0gRjEoa2V5WzFdLCBUcltpICUgNF1bNl0sIFRtW2ldWzZdKTsJCisJa2V5WzBdIF49IEYxKGtleVsxXSwgVHJbaSAlIDRdWzZdLCBUbVtpXVs2XSk7CiAJa2V5WzddIF49IEYyKGtleVswXSwgVHJbaSAlIDRdWzddLCBUbVtpXVs3XSk7CiB9CiAKQEAgLTM5MywxMSArMzk0LDExIEBACiAJaWYgKGtleV9sZW4gJSA0ICE9IDApIHsKIAkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOOwogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CQorCX0KIAotCW1lbXNldCAocF9rZXksIDAsIDMyKTsKLQltZW1jcHkgKHBfa2V5LCBpbl9rZXksIGtleV9sZW4pOwotCQorCW1lbXNldChwX2tleSwgMCwgMzIpOworCW1lbWNweShwX2tleSwgaW5fa2V5LCBrZXlfbGVuKTsKKwogCWtleVswXSA9IGJlMzJfdG9fY3B1KHBfa2V5WzBdKTsJCS8qIEEgKi8KIAlrZXlbMV0gPSBiZTMyX3RvX2NwdShwX2tleVsxXSk7CQkvKiBCICovCiAJa2V5WzJdID0gYmUzMl90b19jcHUocF9rZXlbMl0pOwkJLyogQyAqLwpAQCAtNDA2LDE4ICs0MDcsMTYgQEAKIAlrZXlbNV0gPSBiZTMyX3RvX2NwdShwX2tleVs1XSk7CQkvKiBGICovCiAJa2V5WzZdID0gYmUzMl90b19jcHUocF9rZXlbNl0pOwkJLyogRyAqLwogCWtleVs3XSA9IGJlMzJfdG9fY3B1KHBfa2V5WzddKTsJCS8qIEggKi8KLQkKLQogCiAJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKLQkJVyAoa2V5LCAyICogaSk7Ci0JCVcgKGtleSwgMiAqIGkgKyAxKTsKLQkJCisJCVcoa2V5LCAyICogaSk7CisJCVcoa2V5LCAyICogaSArIDEpOworCiAJCWMtPktyW2ldWzBdID0ga2V5WzBdICYgMHgxZjsKIAkJYy0+S3JbaV1bMV0gPSBrZXlbMl0gJiAweDFmOwogCQljLT5LcltpXVsyXSA9IGtleVs0XSAmIDB4MWY7CiAJCWMtPktyW2ldWzNdID0ga2V5WzZdICYgMHgxZjsKLQkJCisKIAkJYy0+S21baV1bMF0gPSBrZXlbN107CiAJCWMtPkttW2ldWzFdID0ga2V5WzVdOwogCQljLT5LbVtpXVsyXSA9IGtleVszXTsKQEAgLTQyOCwyMSArNDI3LDIzIEBACiB9CiAKIC8qZm9yd2FyZCBxdWFkIHJvdW5kKi8KLXN0YXRpYyB2b2lkIFEgKHUzMiAqIGJsb2NrLCB1OCAqIEtyLCB1MzIgKiBLbSkgeworc3RhdGljIHZvaWQgUSh1MzIgKmJsb2NrLCB1OCAqS3IsIHUzMiAqS20pCit7CiAJdTMyIEk7CiAJYmxvY2tbMl0gXj0gRjEoYmxvY2tbM10sIEtyWzBdLCBLbVswXSk7CiAJYmxvY2tbMV0gXj0gRjIoYmxvY2tbMl0sIEtyWzFdLCBLbVsxXSk7CiAJYmxvY2tbMF0gXj0gRjMoYmxvY2tbMV0sIEtyWzJdLCBLbVsyXSk7Ci0JYmxvY2tbM10gXj0gRjEoYmxvY2tbMF0sIEtyWzNdLCBLbVszXSk7CQkKKwlibG9ja1szXSBePSBGMShibG9ja1swXSwgS3JbM10sIEttWzNdKTsKIH0KIAogLypyZXZlcnNlIHF1YWQgcm91bmQqLwotc3RhdGljIHZvaWQgUUJBUiAodTMyICogYmxvY2ssIHU4ICogS3IsIHUzMiAqIEttKSB7CitzdGF0aWMgdm9pZCBRQkFSKHUzMiAqYmxvY2ssIHU4ICpLciwgdTMyICpLbSkKK3sKIAl1MzIgSTsKLSAgICAgICAgYmxvY2tbM10gXj0gRjEoYmxvY2tbMF0sIEtyWzNdLCBLbVszXSk7Ci0gICAgICAgIGJsb2NrWzBdIF49IEYzKGJsb2NrWzFdLCBLclsyXSwgS21bMl0pOwotICAgICAgICBibG9ja1sxXSBePSBGMihibG9ja1syXSwgS3JbMV0sIEttWzFdKTsKLSAgICAgICAgYmxvY2tbMl0gXj0gRjEoYmxvY2tbM10sIEtyWzBdLCBLbVswXSk7CisJYmxvY2tbM10gXj0gRjEoYmxvY2tbMF0sIEtyWzNdLCBLbVszXSk7CisJYmxvY2tbMF0gXj0gRjMoYmxvY2tbMV0sIEtyWzJdLCBLbVsyXSk7CisJYmxvY2tbMV0gXj0gRjIoYmxvY2tbMl0sIEtyWzFdLCBLbVsxXSk7CisJYmxvY2tbMl0gXj0gRjEoYmxvY2tbM10sIEtyWzBdLCBLbVswXSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhc3Q2X2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dGJ1ZiwgY29uc3QgdTggKmluYnVmKQpAQCAtNDUxLDY0ICs0NTIsNjUgQEAKIAljb25zdCBfX2JlMzIgKnNyYyA9IChjb25zdCBfX2JlMzIgKilpbmJ1ZjsKIAlfX2JlMzIgKmRzdCA9IChfX2JlMzIgKilvdXRidWY7CiAJdTMyIGJsb2NrWzRdOwotCXUzMiAqIEttOyAKLQl1OCAqIEtyOworCXUzMiAqS207CisJdTggKktyOwogCiAJYmxvY2tbMF0gPSBiZTMyX3RvX2NwdShzcmNbMF0pOwogCWJsb2NrWzFdID0gYmUzMl90b19jcHUoc3JjWzFdKTsKIAlibG9ja1syXSA9IGJlMzJfdG9fY3B1KHNyY1syXSk7CiAJYmxvY2tbM10gPSBiZTMyX3RvX2NwdShzcmNbM10pOwogCi0JS20gPSBjLT5LbVswXTsgS3IgPSBjLT5LclswXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsxXTsgS3IgPSBjLT5LclsxXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsyXTsgS3IgPSBjLT5LclsyXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVszXTsgS3IgPSBjLT5LclszXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs0XTsgS3IgPSBjLT5Lcls0XTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs1XTsgS3IgPSBjLT5Lcls1XTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs2XTsgS3IgPSBjLT5Lcls2XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs3XTsgS3IgPSBjLT5Lcls3XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs4XTsgS3IgPSBjLT5Lcls4XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs5XTsgS3IgPSBjLT5Lcls5XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzExXTsgS3IgPSBjLT5LclsxMV07IFFCQVIgKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bMF07IEtyID0gYy0+S3JbMF07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsxXTsgS3IgPSBjLT5LclsxXTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzJdOyBLciA9IGMtPktyWzJdOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bM107IEtyID0gYy0+S3JbM107IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs0XTsgS3IgPSBjLT5Lcls0XTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzVdOyBLciA9IGMtPktyWzVdOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bNl07IEtyID0gYy0+S3JbNl07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs3XTsgS3IgPSBjLT5Lcls3XTsgUUJBUihibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzhdOyBLciA9IGMtPktyWzhdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bOV07IEtyID0gYy0+S3JbOV07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bMTFdOyBLciA9IGMtPktyWzExXTsgUUJBUihibG9jaywgS3IsIEttKTsKIAogCWRzdFswXSA9IGNwdV90b19iZTMyKGJsb2NrWzBdKTsKIAlkc3RbMV0gPSBjcHVfdG9fYmUzMihibG9ja1sxXSk7CiAJZHN0WzJdID0gY3B1X3RvX2JlMzIoYmxvY2tbMl0pOwogCWRzdFszXSA9IGNwdV90b19iZTMyKGJsb2NrWzNdKTsKLX0JCit9CiAKLXN0YXRpYyB2b2lkIGNhc3Q2X2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dGJ1ZiwgY29uc3QgdTggKmluYnVmKSB7Ci0Jc3RydWN0IGNhc3Q2X2N0eCAqIGMgPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworc3RhdGljIHZvaWQgY2FzdDZfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0YnVmLCBjb25zdCB1OCAqaW5idWYpCit7CisJc3RydWN0IGNhc3Q2X2N0eCAqYyA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJY29uc3QgX19iZTMyICpzcmMgPSAoY29uc3QgX19iZTMyICopaW5idWY7CiAJX19iZTMyICpkc3QgPSAoX19iZTMyICopb3V0YnVmOwogCXUzMiBibG9ja1s0XTsKLQl1MzIgKiBLbTsgCi0JdTggKiBLcjsKKwl1MzIgKkttOworCXU4ICpLcjsKIAogCWJsb2NrWzBdID0gYmUzMl90b19jcHUoc3JjWzBdKTsKIAlibG9ja1sxXSA9IGJlMzJfdG9fY3B1KHNyY1sxXSk7CiAJYmxvY2tbMl0gPSBiZTMyX3RvX2NwdShzcmNbMl0pOwogCWJsb2NrWzNdID0gYmUzMl90b19jcHUoc3JjWzNdKTsKIAotCUttID0gYy0+S21bMTFdOyBLciA9IGMtPktyWzExXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzldOyBLciA9IGMtPktyWzldOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzhdOyBLciA9IGMtPktyWzhdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzddOyBLciA9IGMtPktyWzddOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzZdOyBLciA9IGMtPktyWzZdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzVdOyBLciA9IGMtPktyWzVdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzRdOyBLciA9IGMtPktyWzRdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzNdOyBLciA9IGMtPktyWzNdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzJdOyBLciA9IGMtPktyWzJdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzFdOyBLciA9IGMtPktyWzFdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzBdOyBLciA9IGMtPktyWzBdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQkKKwlLbSA9IGMtPkttWzExXTsgS3IgPSBjLT5LclsxMV07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bOV07IEtyID0gYy0+S3JbOV07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs4XTsgS3IgPSBjLT5Lcls4XTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzddOyBLciA9IGMtPktyWzddOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bNl07IEtyID0gYy0+S3JbNl07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs1XTsgS3IgPSBjLT5Lcls1XTsgUUJBUihibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzRdOyBLciA9IGMtPktyWzRdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bM107IEtyID0gYy0+S3JbM107IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsyXTsgS3IgPSBjLT5LclsyXTsgUUJBUihibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzFdOyBLciA9IGMtPktyWzFdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bMF07IEtyID0gYy0+S3JbMF07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisKIAlkc3RbMF0gPSBjcHVfdG9fYmUzMihibG9ja1swXSk7CiAJZHN0WzFdID0gY3B1X3RvX2JlMzIoYmxvY2tbMV0pOwogCWRzdFsyXSA9IGNwdV90b19iZTMyKGJsb2NrWzJdKTsKIAlkc3RbM10gPSBjcHVfdG9fYmUzMihibG9ja1szXSk7Ci19CQorfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWxnID0gewogCS5jcmFfbmFtZSA9ICJjYXN0NiIsCmRpZmYgLS1naXQgYS9jcnlwdG8vY2lwaGVyLmMgYi9jcnlwdG8vY2lwaGVyLmMKaW5kZXggOWExYTczMS4uMzk1NDFlMCAxMDA2NDQKLS0tIGEvY3J5cHRvL2NpcGhlci5jCisrKyBiL2NyeXB0by9jaXBoZXIuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9jb21wcmVzcy5jIGIvY3J5cHRvL2NvbXByZXNzLmMKaW5kZXggMWVlMzU3MC4uYzMzZjA3NiAxMDA2NDQKLS0tIGEvY3J5cHRvL2NvbXByZXNzLmMKKysrIGIvY3J5cHRvL2NvbXByZXNzLmMKQEAgLTcsNyArNyw3IEBACiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCkBAIC0zOSw3ICszOSw3IEBACiAKIAlvcHMtPmNvdF9jb21wcmVzcyA9IGNyeXB0b19jb21wcmVzczsKIAlvcHMtPmNvdF9kZWNvbXByZXNzID0gY3J5cHRvX2RlY29tcHJlc3M7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyYzMyYy5jIGIvY3J5cHRvL2NyYzMyYy5jCmluZGV4IDk3M2JjMmMuLmRlOWU1NWMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jcmMzMmMuYworKysgYi9jcnlwdG8vY3JjMzJjLmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBDcnlwdG9ncmFwaGljIEFQSS4KICAqCiAgKiBDUkMzMkMgY2hrc3VtCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCkBAIC0xNDIsNyArMTQyLDcgQEAKIH0KIAogLyoKLSAqIFN0ZXBzIHRocm91Z2ggYnVmZmVyIG9uZSBieXRlIGF0IGF0IHRpbWUsIGNhbGN1bGF0ZXMgcmVmbGVjdGVkIAorICogU3RlcHMgdGhyb3VnaCBidWZmZXIgb25lIGJ5dGUgYXQgYXQgdGltZSwgY2FsY3VsYXRlcyByZWZsZWN0ZWQKICAqIGNyYyB1c2luZyB0YWJsZS4KICAqLwogCmRpZmYgLS1naXQgYS9jcnlwdG8vY3J5cHRvX251bGwuYyBiL2NyeXB0by9jcnlwdG9fbnVsbC5jCmluZGV4IGNiNzFjOTEuLjA3YThhOTYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jcnlwdG9fbnVsbC5jCisrKyBiL2NyeXB0by9jcnlwdG9fbnVsbC5jCkBAIC0xLDExICsxLDExIEBACi0vKiAKKy8qCiAgKiBDcnlwdG9ncmFwaGljIEFQSS4KICAqCiAgKiBOdWxsIGFsZ29yaXRobXMsIGFrYSBNdWNoIEFkbyBBYm91dCBOb3RoaW5nLgogICoKICAqIFRoZXNlIGFyZSBuZWVkZWQgZm9yIElQc2VjLCBhbmQgbWF5IGJlIHVzZWZ1bCBpbiBnZW5lcmFsIGZvcgogICogdGVzdGluZyAmIGRlYnVnZ2luZy4KLSAqIAorICoKICAqIFRoZSBudWxsIGNpcGhlciBpcyBjb21wbGlhbnQgd2l0aCBSRkMyNDEwLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMiBKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4KQEAgLTE2Myw3ICsxNjMsNyBAQAogc3RhdGljIGludCBfX2luaXQgY3J5cHRvX251bGxfbW9kX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKLQkKKwogCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmNpcGhlcl9udWxsKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CkBAIC0xODAsNyArMTgwLDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfdW5yZWdpc3Rlcl9kaWdlc3Q7CiAKLW91dDoJCitvdXQ6CiAJcmV0dXJuIHJldDsKIAogb3V0X3VucmVnaXN0ZXJfZGlnZXN0OgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2RlZmxhdGUuYyBiL2NyeXB0by9kZWZsYXRlLmMKaW5kZXggOTEyOGRhNC4uNDYzZGM4NSAxMDA2NDQKLS0tIGEvY3J5cHRvL2RlZmxhdGUuYworKysgYi9jcnlwdG8vZGVmbGF0ZS5jCkBAIC0xLDE0ICsxLDE0IEBACi0vKiAKKy8qCiAgKiBDcnlwdG9ncmFwaGljIEFQSS4KICAqCiAgKiBEZWZsYXRlIGFsZ29yaXRobSAoUkZDIDE5NTEpLCBpbXBsZW1lbnRlZCBoZXJlIHByaW1hcmlseSBmb3IgdXNlCiAgKiBieSBJUENPTVAgKFJGQyAzMTczICYgUkZDIDIzOTQpLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMyBKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSAKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqIEZJWE1FOiBkZWZsYXRlIHRyYW5zZm9ybXMgd2lsbCByZXF1aXJlIHVwIHRvIGEgdG90YWwgb2YgYWJvdXQgNDM2ayBvZiBrZXJuZWwKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmN0eC0+Y29tcF9zdHJlYW07CiAKIAlzdHJlYW0tPndvcmtzcGFjZSA9IHZtYWxsb2MoemxpYl9kZWZsYXRlX3dvcmtzcGFjZXNpemUoKSk7Ci0JaWYgKCFzdHJlYW0tPndvcmtzcGFjZSApIHsKKwlpZiAoIXN0cmVhbS0+d29ya3NwYWNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTYxLDcgKzYxLDcgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfZnJlZTsKIAl9Ci1vdXQ6CQorb3V0OgogCXJldHVybiByZXQ7CiBvdXRfZnJlZToKIAl2ZnJlZShzdHJlYW0tPndvcmtzcGFjZSk7CkBAIC03NCw3ICs3NCw3IEBACiAJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZjdHgtPmRlY29tcF9zdHJlYW07CiAKIAlzdHJlYW0tPndvcmtzcGFjZSA9IGt6YWxsb2MoemxpYl9pbmZsYXRlX3dvcmtzcGFjZXNpemUoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdHJlYW0tPndvcmtzcGFjZSApIHsKKwlpZiAoIXN0cmVhbS0+d29ya3NwYWNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEwNiw3ICsxMDYsNyBAQAogewogCXN0cnVjdCBkZWZsYXRlX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAlpbnQgcmV0OwotCQorCiAJcmV0ID0gZGVmbGF0ZV9jb21wX2luaXQoY3R4KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKQEAgLTE1MywxMSArMTUzLDExIEBACiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KLSAKKwogc3RhdGljIGludCBkZWZsYXRlX2RlY29tcHJlc3Moc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKnNyYywKIAkJCSAgICAgIHVuc2lnbmVkIGludCBzbGVuLCB1OCAqZHN0LCB1bnNpZ25lZCBpbnQgKmRsZW4pCiB7Ci0JCisKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgZGVmbGF0ZV9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmZGN0eC0+ZGVjb21wX3N0cmVhbTsKQEAgLTE4Miw3ICsxODIsNyBAQAogCWlmIChyZXQgPT0gWl9PSyAmJiAhc3RyZWFtLT5hdmFpbF9pbiAmJiBzdHJlYW0tPmF2YWlsX291dCkgewogCQl1OCB6ZXJvc3R1ZmYgPSAwOwogCQlzdHJlYW0tPm5leHRfaW4gPSAmemVyb3N0dWZmOwotCQlzdHJlYW0tPmF2YWlsX2luID0gMTsgCisJCXN0cmVhbS0+YXZhaWxfaW4gPSAxOwogCQlyZXQgPSB6bGliX2luZmxhdGUoc3RyZWFtLCBaX0ZJTklTSCk7CiAJfQogCWlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKSB7CmRpZmYgLS1naXQgYS9jcnlwdG8vZGVzX2dlbmVyaWMuYyBiL2NyeXB0by9kZXNfZ2VuZXJpYy5jCmluZGV4IDViZDNlZTMuLjI0OWY5MDMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kZXNfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9kZXNfZ2VuZXJpYy5jCkBAIC04NjksOCArODY5LDcgQEAKIAogCWlmICh1bmxpa2VseSghKChLWzBdIF4gS1syXSkgfCAoS1sxXSBeIEtbM10pKSB8fAogCQkgICAgICEoKEtbMl0gXiBLWzRdKSB8IChLWzNdIF4gS1s1XSkpKSAmJgotCQkgICAgICgqZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSkpCi0JeworCQkgICAgICgqZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSkpIHsKIAkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX1dFQUtfS0VZOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZWNiLmMgYi9jcnlwdG8vZWNiLmMKaW5kZXggYTQ2ODM4ZS4uOTM1Y2ZlZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjYi5jCisrKyBiL2NyeXB0by9lY2IuYwpAQCAtNTUsNyArNTUsNyBAQAogCiAJCWRvIHsKIAkJCWZuKGNyeXB0b19jaXBoZXJfdGZtKHRmbSksIHdkc3QsIHdzcmMpOwotCQorCiAJCQl3c3JjICs9IGJzaXplOwogCQkJd2RzdCArPSBic2l6ZTsKIAkJfSB3aGlsZSAoKG5ieXRlcyAtPSBic2l6ZSkgPj0gYnNpemUpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2ZjcnlwdC5jIGIvY3J5cHRvL2ZjcnlwdC5jCmluZGV4IGI4MmQ2MWYuLmMzMzEwN2UgMTAwNjQ0Ci0tLSBhL2NyeXB0by9mY3J5cHQuYworKysgYi9jcnlwdG8vZmNyeXB0LmMKQEAgLTYwLDEzICs2MCwxMyBAQAogCXUzMiB0ID0gbG8gJiAoKDEgPDwgbikgLSAxKTsJCQkJXAogCWxvID0gKGxvID4+IG4pIHwgKChoaSAmICgoMSA8PCBuKSAtIDEpKSA8PCAoMzIgLSBuKSk7CVwKIAloaSA9IChoaSA+PiBuKSB8ICh0IDw8ICgyNC1uKSk7CQkJCVwKLX0gd2hpbGUoMCkKK30gd2hpbGUgKDApCiAKIC8qIFJvdGF0ZSByaWdodCBvbmUgNjQgYml0IG51bWJlciBhcyBhIDU2IGJpdCBudW1iZXIgKi8KICNkZWZpbmUgcm9yNTZfNjQoaywgbikJCQkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJayA9IChrID4+IG4pIHwgKChrICYgKCgxIDw8IG4pIC0gMSkpIDw8ICg1NiAtIG4pKTsJXAotfSB3aGlsZSgwKQorfSB3aGlsZSAoMCkKIAogLyoKICAqIFNib3hlcyBmb3IgRmVpc3RlbCBuZXR3b3JrIGRlcml2ZWQgZnJvbQpAQCAtMjI4LDcgKzIyOCw3IEBACiAJdW5pb24gbGM0IHsgX19iZTMyIGw7IHU4IGNbNF07IH0gdTsJCQkJXAogCXUubCA9IHNjaGVkIF4gUjsJCQkJCQlcCiAJTCBePSBzYm94MFt1LmNbMF1dIF4gc2JveDFbdS5jWzFdXSBeIHNib3gyW3UuY1syXV0gXiBzYm94M1t1LmNbM11dOyBcCi19IHdoaWxlKDApCit9IHdoaWxlICgwKQogCiAvKgogICogZW5jcnlwdG9yCmRpZmYgLS1naXQgYS9jcnlwdG8vZ2NtLmMgYi9jcnlwdG8vZ2NtLmMKaW5kZXggYzY1NDcxMy4uMmY1ZmJiYSAxMDA2NDQKLS0tIGEvY3J5cHRvL2djbS5jCisrKyBiL2NyeXB0by9nY20uYwpAQCAtMzcsNiArMzcsMTkgQEAKIAl1OCBub25jZVs0XTsKIH07CiAKK3N0cnVjdCBjcnlwdG9fcmZjNDU0M19jdHggeworCXN0cnVjdCBjcnlwdG9fYWVhZCAqY2hpbGQ7CisJdTggbm9uY2VbNF07Cit9OworCitzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfcmVxX2N0eCB7CisJdTggYXV0aF90YWdbMTZdOworCXN0cnVjdCBzY2F0dGVybGlzdCBjaXBoZXJbMV07CisJc3RydWN0IHNjYXR0ZXJsaXN0IHBheWxvYWRbMl07CisJc3RydWN0IHNjYXR0ZXJsaXN0IGFzc29jWzJdOworCXN0cnVjdCBhZWFkX3JlcXVlc3Qgc3VicmVxOworfTsKKwogc3RydWN0IGNyeXB0b19nY21fZ2hhc2hfY3R4IHsKIAl1bnNpZ25lZCBpbnQgY3J5cHRsZW47CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmM7CkBAIC0xMDQ3LDYgKzEwNjAsMjcyIEBACiAJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfcmVxX2N0eCAqY3J5cHRvX3JmYzQ1NDNfcmVxY3R4KAorCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKK3sKKwl1bnNpZ25lZCBsb25nIGFsaWduID0gY3J5cHRvX2FlYWRfYWxpZ25tYXNrKGNyeXB0b19hZWFkX3JlcXRmbShyZXEpKTsKKworCXJldHVybiAodm9pZCAqKVBUUl9BTElHTigodTggKilhZWFkX3JlcXVlc3RfY3R4KHJlcSksIGFsaWduICsgMSk7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX3JmYzQ1NDNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fYWVhZCAqcGFyZW50LCBjb25zdCB1OCAqa2V5LAorCQkJCSB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXN0cnVjdCBjcnlwdG9fcmZjNDU0M19jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChwYXJlbnQpOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqY2hpbGQgPSBjdHgtPmNoaWxkOworCWludCBlcnI7CisKKwlpZiAoa2V5bGVuIDwgNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrZXlsZW4gLT0gNDsKKwltZW1jcHkoY3R4LT5ub25jZSwga2V5ICsga2V5bGVuLCA0KTsKKworCWNyeXB0b19hZWFkX2NsZWFyX2ZsYWdzKGNoaWxkLCBDUllQVE9fVEZNX1JFUV9NQVNLKTsKKwljcnlwdG9fYWVhZF9zZXRfZmxhZ3MoY2hpbGQsIGNyeXB0b19hZWFkX2dldF9mbGFncyhwYXJlbnQpICYKKwkJCQkgICAgIENSWVBUT19URk1fUkVRX01BU0spOworCWVyciA9IGNyeXB0b19hZWFkX3NldGtleShjaGlsZCwga2V5LCBrZXlsZW4pOworCWNyeXB0b19hZWFkX3NldF9mbGFncyhwYXJlbnQsIGNyeXB0b19hZWFkX2dldF9mbGFncyhjaGlsZCkgJgorCQkJCSAgICAgIENSWVBUT19URk1fUkVTX01BU0spOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjcnlwdG9fcmZjNDU0M19zZXRhdXRoc2l6ZShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnBhcmVudCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgYXV0aHNpemUpCit7CisJc3RydWN0IGNyeXB0b19yZmM0NTQzX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KHBhcmVudCk7CisKKwlpZiAoYXV0aHNpemUgIT0gMTYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGNyeXB0b19hZWFkX3NldGF1dGhzaXplKGN0eC0+Y2hpbGQsIGF1dGhzaXplKTsKK30KKworLyogdGhpcyBpcyB0aGUgc2FtZSBhcyBjcnlwdG9fYXV0aGVuY19jaGFpbiAqLworc3RhdGljIHZvaWQgY3J5cHRvX3JmYzQ1NDNfY2hhaW4oc3RydWN0IHNjYXR0ZXJsaXN0ICpoZWFkLAorCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgY2hhaW4pCit7CisJaWYgKGNoYWluKSB7CisJCWhlYWQtPmxlbmd0aCArPSBzZy0+bGVuZ3RoOworCQlzZyA9IHNjYXR0ZXJ3YWxrX3NnX25leHQoc2cpOworCX0KKworCWlmIChzZykKKwkJc2NhdHRlcndhbGtfc2dfY2hhaW4oaGVhZCwgMiwgc2cpOworCWVsc2UKKwkJc2dfbWFya19lbmQoaGVhZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpjcnlwdG9fcmZjNDU0M19jcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEsCisJCQkJCQkgaW50IGVuYykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQgPSBjcnlwdG9fYWVhZF9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYWVhZCk7CisJc3RydWN0IGNyeXB0b19yZmM0NTQzX3JlcV9jdHggKnJjdHggPSBjcnlwdG9fcmZjNDU0M19yZXFjdHgocmVxKTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpzdWJyZXEgPSAmcmN0eC0+c3VicmVxOworCXN0cnVjdCBzY2F0dGVybGlzdCAqZHN0ID0gcmVxLT5kc3Q7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpjaXBoZXIgPSByY3R4LT5jaXBoZXI7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpwYXlsb2FkID0gcmN0eC0+cGF5bG9hZDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmFzc29jID0gcmN0eC0+YXNzb2M7CisJdW5zaWduZWQgaW50IGF1dGhzaXplID0gY3J5cHRvX2FlYWRfYXV0aHNpemUoYWVhZCk7CisJdW5zaWduZWQgaW50IGFzc29jbGVuID0gcmVxLT5hc3NvY2xlbjsKKwlzdHJ1Y3QgcGFnZSAqZHN0cDsKKwl1OCAqdmRzdDsKKwl1OCAqaXYgPSBQVFJfQUxJR04oKHU4ICopKHJjdHggKyAxKSArIGNyeXB0b19hZWFkX3JlcXNpemUoY3R4LT5jaGlsZCksCisJCQkgICBjcnlwdG9fYWVhZF9hbGlnbm1hc2soY3R4LT5jaGlsZCkgKyAxKTsKKworCW1lbWNweShpdiwgY3R4LT5ub25jZSwgNCk7CisJbWVtY3B5KGl2ICsgNCwgcmVxLT5pdiwgOCk7CisKKwkvKiBjb25zdHJ1Y3QgY2lwaGVyL3BsYWludGV4dCAqLworCWlmIChlbmMpCisJCW1lbXNldChyY3R4LT5hdXRoX3RhZywgMCwgYXV0aHNpemUpOworCWVsc2UKKwkJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KHJjdHgtPmF1dGhfdGFnLCBkc3QsCisJCQkJCSByZXEtPmNyeXB0bGVuIC0gYXV0aHNpemUsCisJCQkJCSBhdXRoc2l6ZSwgMCk7CisKKwlzZ19pbml0X29uZShjaXBoZXIsIHJjdHgtPmF1dGhfdGFnLCBhdXRoc2l6ZSk7CisKKwkvKiBjb25zdHJ1Y3QgdGhlIGFhZCAqLworCWRzdHAgPSBzZ19wYWdlKGRzdCk7CisJdmRzdCA9IFBhZ2VIaWdoTWVtKGRzdHApID8gTlVMTCA6IHBhZ2VfYWRkcmVzcyhkc3RwKSArIGRzdC0+b2Zmc2V0OworCisJc2dfaW5pdF90YWJsZShwYXlsb2FkLCAyKTsKKwlzZ19zZXRfYnVmKHBheWxvYWQsIHJlcS0+aXYsIDgpOworCWNyeXB0b19yZmM0NTQzX2NoYWluKHBheWxvYWQsIGRzdCwgdmRzdCA9PSByZXEtPml2ICsgOCk7CisJYXNzb2NsZW4gKz0gOCArIHJlcS0+Y3J5cHRsZW4gLSAoZW5jID8gMCA6IGF1dGhzaXplKTsKKworCXNnX2luaXRfdGFibGUoYXNzb2MsIDIpOworCXNnX3NldF9wYWdlKGFzc29jLCBzZ19wYWdlKHJlcS0+YXNzb2MpLCByZXEtPmFzc29jLT5sZW5ndGgsCisJCSAgICByZXEtPmFzc29jLT5vZmZzZXQpOworCWNyeXB0b19yZmM0NTQzX2NoYWluKGFzc29jLCBwYXlsb2FkLCAwKTsKKworCWFlYWRfcmVxdWVzdF9zZXRfdGZtKHN1YnJlcSwgY3R4LT5jaGlsZCk7CisJYWVhZF9yZXF1ZXN0X3NldF9jYWxsYmFjayhzdWJyZXEsIHJlcS0+YmFzZS5mbGFncywgcmVxLT5iYXNlLmNvbXBsZXRlLAorCQkJCSAgcmVxLT5iYXNlLmRhdGEpOworCWFlYWRfcmVxdWVzdF9zZXRfY3J5cHQoc3VicmVxLCBjaXBoZXIsIGNpcGhlciwgZW5jID8gMCA6IGF1dGhzaXplLCBpdik7CisJYWVhZF9yZXF1ZXN0X3NldF9hc3NvYyhzdWJyZXEsIGFzc29jLCBhc3NvY2xlbik7CisKKwlyZXR1cm4gc3VicmVxOworfQorCitzdGF0aWMgaW50IGNyeXB0b19yZmM0NTQzX2VuY3J5cHQoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCXN0cnVjdCBjcnlwdG9fcmZjNDU0M19yZXFfY3R4ICpyY3R4ID0gY3J5cHRvX3JmYzQ1NDNfcmVxY3R4KHJlcSk7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqc3VicmVxOworCWludCBlcnI7CisKKwlzdWJyZXEgPSBjcnlwdG9fcmZjNDU0M19jcnlwdChyZXEsIDEpOworCWVyciA9IGNyeXB0b19hZWFkX2VuY3J5cHQoc3VicmVxKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KHJjdHgtPmF1dGhfdGFnLCByZXEtPmRzdCwgcmVxLT5jcnlwdGxlbiwKKwkJCQkgY3J5cHRvX2FlYWRfYXV0aHNpemUoYWVhZCksIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX3JmYzQ1NDNfZGVjcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCit7CisJcmVxID0gY3J5cHRvX3JmYzQ1NDNfY3J5cHQocmVxLCAwKTsKKworCXJldHVybiBjcnlwdG9fYWVhZF9kZWNyeXB0KHJlcSk7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX3JmYzQ1NDNfaW5pdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0ID0gKHZvaWQgKil0Zm0tPl9fY3J0X2FsZzsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWRfc3Bhd24gKnNwYXduID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwlzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZDsKKwl1bnNpZ25lZCBsb25nIGFsaWduOworCisJYWVhZCA9IGNyeXB0b19zcGF3bl9hZWFkKHNwYXduKTsKKwlpZiAoSVNfRVJSKGFlYWQpKQorCQlyZXR1cm4gUFRSX0VSUihhZWFkKTsKKworCWN0eC0+Y2hpbGQgPSBhZWFkOworCisJYWxpZ24gPSBjcnlwdG9fYWVhZF9hbGlnbm1hc2soYWVhZCk7CisJYWxpZ24gJj0gfihjcnlwdG9fdGZtX2N0eF9hbGlnbm1lbnQoKSAtIDEpOworCXRmbS0+Y3J0X2FlYWQucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfcmVxX2N0eCkgKworCQkJCUFMSUdOKGNyeXB0b19hZWFkX3JlcXNpemUoYWVhZCksCisJCQkJICAgICAgY3J5cHRvX3RmbV9jdHhfYWxpZ25tZW50KCkpICsKKwkJCQlhbGlnbiArIDE2OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0b19yZmM0NTQzX2V4aXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0b19yZmM0NTQzX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCWNyeXB0b19mcmVlX2FlYWQoY3R4LT5jaGlsZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdG9fcmZjNDU0M19hbGxvYyhzdHJ1Y3QgcnRhdHRyICoqdGIpCit7CisJc3RydWN0IGNyeXB0b19hdHRyX3R5cGUgKmFsZ3Q7CisJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdDsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWRfc3Bhd24gKnNwYXduOworCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CisJY29uc3QgY2hhciAqY2NtX25hbWU7CisJaW50IGVycjsKKworCWFsZ3QgPSBjcnlwdG9fZ2V0X2F0dHJfdHlwZSh0Yik7CisJZXJyID0gUFRSX0VSUihhbGd0KTsKKwlpZiAoSVNfRVJSKGFsZ3QpKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJaWYgKChhbGd0LT50eXBlIF4gQ1JZUFRPX0FMR19UWVBFX0FFQUQpICYgYWxndC0+bWFzaykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwljY21fbmFtZSA9IGNyeXB0b19hdHRyX2FsZ19uYW1lKHRiWzFdKTsKKwllcnIgPSBQVFJfRVJSKGNjbV9uYW1lKTsKKwlpZiAoSVNfRVJSKGNjbV9uYW1lKSkKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKworCWluc3QgPSBremFsbG9jKHNpemVvZigqaW5zdCkgKyBzaXplb2YoKnNwYXduKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnN0KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXNwYXduID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwljcnlwdG9fc2V0X2FlYWRfc3Bhd24oc3Bhd24sIGluc3QpOworCWVyciA9IGNyeXB0b19ncmFiX2FlYWQoc3Bhd24sIGNjbV9uYW1lLCAwLAorCQkJICAgICAgIGNyeXB0b19yZXF1aXJlc19zeW5jKGFsZ3QtPnR5cGUsIGFsZ3QtPm1hc2spKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2luc3Q7CisKKwlhbGcgPSBjcnlwdG9fYWVhZF9zcGF3bl9hbGcoc3Bhd24pOworCisJZXJyID0gLUVJTlZBTDsKKworCS8qIFdlIG9ubHkgc3VwcG9ydCAxNi1ieXRlIGJsb2Nrcy4gKi8KKwlpZiAoYWxnLT5jcmFfYWVhZC5pdnNpemUgIT0gMTYpCisJCWdvdG8gb3V0X2Ryb3BfYWxnOworCisJLyogTm90IGEgc3RyZWFtIGNpcGhlcj8gKi8KKwlpZiAoYWxnLT5jcmFfYmxvY2tzaXplICE9IDEpCisJCWdvdG8gb3V0X2Ryb3BfYWxnOworCisJZXJyID0gLUVOQU1FVE9PTE9ORzsKKwlpZiAoc25wcmludGYoaW5zdC0+YWxnLmNyYV9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLAorCQkgICAgICJyZmM0NTQzKCVzKSIsIGFsZy0+Y3JhX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUgfHwKKwkgICAgc25wcmludGYoaW5zdC0+YWxnLmNyYV9kcml2ZXJfbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSwKKwkJICAgICAicmZjNDU0MyglcykiLCBhbGctPmNyYV9kcml2ZXJfbmFtZSkgPj0KKwkgICAgQ1JZUFRPX01BWF9BTEdfTkFNRSkKKwkJZ290byBvdXRfZHJvcF9hbGc7CisKKwlpbnN0LT5hbGcuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19UWVBFX0FFQUQ7CisJaW5zdC0+YWxnLmNyYV9mbGFncyB8PSBhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfQVNZTkM7CisJaW5zdC0+YWxnLmNyYV9wcmlvcml0eSA9IGFsZy0+Y3JhX3ByaW9yaXR5OworCWluc3QtPmFsZy5jcmFfYmxvY2tzaXplID0gMTsKKwlpbnN0LT5hbGcuY3JhX2FsaWdubWFzayA9IGFsZy0+Y3JhX2FsaWdubWFzazsKKwlpbnN0LT5hbGcuY3JhX3R5cGUgPSAmY3J5cHRvX25pdmFlYWRfdHlwZTsKKworCWluc3QtPmFsZy5jcmFfYWVhZC5pdnNpemUgPSA4OworCWluc3QtPmFsZy5jcmFfYWVhZC5tYXhhdXRoc2l6ZSA9IDE2OworCisJaW5zdC0+YWxnLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fcmZjNDU0M19jdHgpOworCisJaW5zdC0+YWxnLmNyYV9pbml0ID0gY3J5cHRvX3JmYzQ1NDNfaW5pdF90Zm07CisJaW5zdC0+YWxnLmNyYV9leGl0ID0gY3J5cHRvX3JmYzQ1NDNfZXhpdF90Zm07CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuc2V0a2V5ID0gY3J5cHRvX3JmYzQ1NDNfc2V0a2V5OworCWluc3QtPmFsZy5jcmFfYWVhZC5zZXRhdXRoc2l6ZSA9IGNyeXB0b19yZmM0NTQzX3NldGF1dGhzaXplOworCWluc3QtPmFsZy5jcmFfYWVhZC5lbmNyeXB0ID0gY3J5cHRvX3JmYzQ1NDNfZW5jcnlwdDsKKwlpbnN0LT5hbGcuY3JhX2FlYWQuZGVjcnlwdCA9IGNyeXB0b19yZmM0NTQzX2RlY3J5cHQ7CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuZ2VuaXYgPSAic2VxaXYiOworCitvdXQ6CisJcmV0dXJuIGluc3Q7CisKK291dF9kcm9wX2FsZzoKKwljcnlwdG9fZHJvcF9hZWFkKHNwYXduKTsKK291dF9mcmVlX2luc3Q6CisJa2ZyZWUoaW5zdCk7CisJaW5zdCA9IEVSUl9QVFIoZXJyKTsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvX3JmYzQ1NDNfZnJlZShzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KQoreworCWNyeXB0b19kcm9wX3NwYXduKGNyeXB0b19pbnN0YW5jZV9jdHgoaW5zdCkpOworCWtmcmVlKGluc3QpOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b190ZW1wbGF0ZSBjcnlwdG9fcmZjNDU0M190bXBsID0geworCS5uYW1lID0gInJmYzQ1NDMiLAorCS5hbGxvYyA9IGNyeXB0b19yZmM0NTQzX2FsbG9jLAorCS5mcmVlID0gY3J5cHRvX3JmYzQ1NDNfZnJlZSwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBjcnlwdG9fZ2NtX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKQEAgLTEwNjcsOCArMTM0NiwxNCBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VuZG9fZ2NtOwogCisJZXJyID0gY3J5cHRvX3JlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fcmZjNDU0M190bXBsKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF91bmRvX3JmYzQxMDY7CisKIAlyZXR1cm4gMDsKIAorb3V0X3VuZG9fcmZjNDEwNjoKKwljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX3JmYzQxMDZfdG1wbCk7CiBvdXRfdW5kb19nY206CiAJY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0b19nY21fdG1wbCk7CiBvdXRfdW5kb19iYXNlOgpAQCAtMTA4MSw2ICsxMzY2LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjcnlwdG9fZ2NtX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJa2ZyZWUoZ2NtX3plcm9lcyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0b19yZmM0NTQzX3RtcGwpOwogCWNyeXB0b191bnJlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fcmZjNDEwNl90bXBsKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2djbV90bXBsKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2djbV9iYXNlX3RtcGwpOwpAQCAtMTA5NCwzICsxMzgwLDQgQEAKIE1PRFVMRV9BVVRIT1IoIk1pa2tvIEhlcnJhbmVuIDxtaDFAaWtpLmZpPiIpOwogTU9EVUxFX0FMSUFTKCJnY21fYmFzZSIpOwogTU9EVUxFX0FMSUFTKCJyZmM0MTA2Iik7CitNT0RVTEVfQUxJQVMoInJmYzQ1NDMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9tZDUuYyBiL2NyeXB0by9tZDUuYwppbmRleCA4M2ViNTI5Li45ZmRhMjEzIDEwMDY0NAotLS0gYS9jcnlwdG8vbWQ1LmMKKysrIGIvY3J5cHRvL21kNS5jCkBAIC0xNiwxNyArMTYsMTMgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorI2luY2x1ZGUgPGNyeXB0by9tZDUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKLSNkZWZpbmUgTUQ1X0RJR0VTVF9TSVpFCQkxNgotI2RlZmluZSBNRDVfSE1BQ19CTE9DS19TSVpFCTY0Ci0jZGVmaW5lIE1ENV9CTE9DS19XT1JEUwkJMTYKLSNkZWZpbmUgTUQ1X0hBU0hfV09SRFMJCTQKLQogI2RlZmluZSBGMSh4LCB5LCB6KQkoeiBeICh4ICYgKHkgXiB6KSkpCiAjZGVmaW5lIEYyKHgsIHksIHopCUYxKHosIHgsIHkpCiAjZGVmaW5lIEYzKHgsIHksIHopCSh4IF4geSBeIHopCkBAIC0zNSwxMiArMzEsNiBAQAogI2RlZmluZSBNRDVTVEVQKGYsIHcsIHgsIHksIHosIGluLCBzKSBcCiAJKHcgKz0gZih4LCB5LCB6KSArIGluLCB3ID0gKHc8PHMgfCB3Pj4oMzItcykpICsgeCkKIAotc3RydWN0IG1kNV9jdHggewotCXUzMiBoYXNoW01ENV9IQVNIX1dPUkRTXTsKLQl1MzIgYmxvY2tbTUQ1X0JMT0NLX1dPUkRTXTsKLQl1NjQgYnl0ZV9jb3VudDsKLX07Ci0KIHN0YXRpYyB2b2lkIG1kNV90cmFuc2Zvcm0odTMyICpoYXNoLCB1MzIgY29uc3QgKmluKQogewogCXUzMiBhLCBiLCBjLCBkOwpAQCAtMTQxLDcgKzEzMSw3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWQ1X3RyYW5zZm9ybV9oZWxwZXIoc3RydWN0IG1kNV9jdHggKmN0eCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZDVfdHJhbnNmb3JtX2hlbHBlcihzdHJ1Y3QgbWQ1X3N0YXRlICpjdHgpCiB7CiAJbGUzMl90b19jcHVfYXJyYXkoY3R4LT5ibG9jaywgc2l6ZW9mKGN0eC0+YmxvY2spIC8gc2l6ZW9mKHUzMikpOwogCW1kNV90cmFuc2Zvcm0oY3R4LT5oYXNoLCBjdHgtPmJsb2NrKTsKQEAgLTE0OSw3ICsxMzksNyBAQAogCiBzdGF0aWMgaW50IG1kNV9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBtZDVfY3R4ICptY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJc3RydWN0IG1kNV9zdGF0ZSAqbWN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCiAJbWN0eC0+aGFzaFswXSA9IDB4Njc0NTIzMDE7CiAJbWN0eC0+aGFzaFsxXSA9IDB4ZWZjZGFiODk7CkBAIC0xNjIsNyArMTUyLDcgQEAKIAogc3RhdGljIGludCBtZDVfdXBkYXRlKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlzdHJ1Y3QgbWQ1X2N0eCAqbWN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXN0cnVjdCBtZDVfc3RhdGUgKm1jdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAljb25zdCB1MzIgYXZhaWwgPSBzaXplb2YobWN0eC0+YmxvY2spIC0gKG1jdHgtPmJ5dGVfY291bnQgJiAweDNmKTsKIAogCW1jdHgtPmJ5dGVfY291bnQgKz0gbGVuOwpAQCAtMTk0LDcgKzE4NCw3IEBACiAKIHN0YXRpYyBpbnQgbWQ1X2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KQogewotCXN0cnVjdCBtZDVfY3R4ICptY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJc3RydWN0IG1kNV9zdGF0ZSAqbWN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCWNvbnN0IHVuc2lnbmVkIGludCBvZmZzZXQgPSBtY3R4LT5ieXRlX2NvdW50ICYgMHgzZjsKIAljaGFyICpwID0gKGNoYXIgKiltY3R4LT5ibG9jayArIG9mZnNldDsKIAlpbnQgcGFkZGluZyA9IDU2IC0gKG9mZnNldCArIDEpOwpAQCAtMjIwLDEyICsyMTAsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtZDVfZXhwb3J0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB2b2lkICpvdXQpCit7CisJc3RydWN0IG1kNV9zdGF0ZSAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisKKwltZW1jcHkob3V0LCBjdHgsIHNpemVvZigqY3R4KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWQ1X2ltcG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3Qgdm9pZCAqaW4pCit7CisJc3RydWN0IG1kNV9zdGF0ZSAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisKKwltZW1jcHkoY3R4LCBpbiwgc2l6ZW9mKCpjdHgpKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0gewogCS5kaWdlc3RzaXplCT0JTUQ1X0RJR0VTVF9TSVpFLAogCS5pbml0CQk9CW1kNV9pbml0LAogCS51cGRhdGUJCT0JbWQ1X3VwZGF0ZSwKIAkuZmluYWwJCT0JbWQ1X2ZpbmFsLAotCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgbWQ1X2N0eCksCisJLmV4cG9ydAkJPQltZDVfZXhwb3J0LAorCS5pbXBvcnQJCT0JbWQ1X2ltcG9ydCwKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IG1kNV9zdGF0ZSksCiAJLmJhc2UJCT0JewogCQkuY3JhX25hbWUJPQkibWQ1IiwKIAkJLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9TSEFTSCwKZGlmZiAtLWdpdCBhL2NyeXB0by9wY3J5cHQuYyBiL2NyeXB0by9wY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDIwMTI0Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3BjcnlwdC5jCkBAIC0wLDAgKzEsNDQ1IEBACisvKgorICogcGNyeXB0IC0gUGFyYWxsZWwgY3J5cHRvIHdyYXBwZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IHNlY3VuZXQgU2VjdXJpdHkgTmV0d29ya3MgQUcKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTdGVmZmVuIEtsYXNzZXJ0IDxzdGVmZmVuLmtsYXNzZXJ0QHNlY3VuZXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvYWVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3BjcnlwdC5oPgorCitzdGF0aWMgc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGNyeXB0X2VuY19wYWRhdGE7CitzdGF0aWMgc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGNyeXB0X2RlY19wYWRhdGE7CitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmVuY3dxOworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkZWN3cTsKKworc3RydWN0IHBjcnlwdF9pbnN0YW5jZV9jdHggeworCXN0cnVjdCBjcnlwdG9fc3Bhd24gc3Bhd247CisJdW5zaWduZWQgaW50IHRmbV9jb3VudDsKK307CisKK3N0cnVjdCBwY3J5cHRfYWVhZF9jdHggeworCXN0cnVjdCBjcnlwdG9fYWVhZCAqY2hpbGQ7CisJdW5zaWduZWQgaW50IGNiX2NwdTsKK307CisKK3N0YXRpYyBpbnQgcGNyeXB0X2RvX3BhcmFsbGVsKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhLCB1bnNpZ25lZCBpbnQgKmNiX2NwdSwKKwkJCSAgICAgIHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KQoreworCXVuc2lnbmVkIGludCBjcHVfaW5kZXgsIGNwdSwgaTsKKworCWNwdSA9ICpjYl9jcHU7CisKKwlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9hY3RpdmVfbWFzaykpCisJCQlnb3RvIG91dDsKKworCWNwdV9pbmRleCA9IGNwdSAlIGNwdW1hc2tfd2VpZ2h0KGNwdV9hY3RpdmVfbWFzayk7CisKKwljcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdV9hY3RpdmVfbWFzayk7CisJZm9yIChpID0gMDsgaSA8IGNwdV9pbmRleDsgaSsrKQorCQljcHUgPSBjcHVtYXNrX25leHQoY3B1LCBjcHVfYWN0aXZlX21hc2spOworCisJKmNiX2NwdSA9IGNwdTsKKworb3V0OgorCXJldHVybiBwYWRhdGFfZG9fcGFyYWxsZWwocGluc3QsIHBhZGF0YSwgY3B1KTsKK30KKworc3RhdGljIGludCBwY3J5cHRfYWVhZF9zZXRrZXkoc3RydWN0IGNyeXB0b19hZWFkICpwYXJlbnQsCisJCQkgICAgICBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXN0cnVjdCBwY3J5cHRfYWVhZF9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChwYXJlbnQpOworCisJcmV0dXJuIGNyeXB0b19hZWFkX3NldGtleShjdHgtPmNoaWxkLCBrZXksIGtleWxlbik7Cit9CisKK3N0YXRpYyBpbnQgcGNyeXB0X2FlYWRfc2V0YXV0aHNpemUoc3RydWN0IGNyeXB0b19hZWFkICpwYXJlbnQsCisJCQkJICAgdW5zaWduZWQgaW50IGF1dGhzaXplKQoreworCXN0cnVjdCBwY3J5cHRfYWVhZF9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChwYXJlbnQpOworCisJcmV0dXJuIGNyeXB0b19hZWFkX3NldGF1dGhzaXplKGN0eC0+Y2hpbGQsIGF1dGhzaXplKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfc2VyaWFsKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKQoreworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IHBjcnlwdF9wYWRhdGFfcmVxdWVzdChwYWRhdGEpOworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSA9IHBjcnlwdF9yZXF1ZXN0X2N0eChwcmVxKTsKKworCWFlYWRfcmVxdWVzdF9jb21wbGV0ZShyZXEtPmJhc2UuZGF0YSwgcGFkYXRhLT5pbmZvKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZ2l2X3NlcmlhbChzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSkKK3sKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBwY3J5cHRfcGFkYXRhX3JlcXVlc3QocGFkYXRhKTsKKwlzdHJ1Y3QgYWVhZF9naXZjcnlwdF9yZXF1ZXN0ICpyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisKKwlhZWFkX3JlcXVlc3RfY29tcGxldGUocmVxLT5hcmVxLmJhc2UuZGF0YSwgcGFkYXRhLT5pbmZvKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsIGludCBlcnIpCit7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gYXJlcS0+ZGF0YTsKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBhZWFkX3JlcXVlc3RfY3R4KHJlcSk7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEgPSBwY3J5cHRfcmVxdWVzdF9wYWRhdGEocHJlcSk7CisKKwlwYWRhdGEtPmluZm8gPSBlcnI7CisJcmVxLT5iYXNlLmZsYWdzICY9IH5DUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CisKKwlwYWRhdGFfZG9fc2VyaWFsKHBhZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHBjcnlwdF9hZWFkX2VuYyhzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSkKK3sKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBwY3J5cHRfcGFkYXRhX3JlcXVlc3QocGFkYXRhKTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisKKwlwYWRhdGEtPmluZm8gPSBjcnlwdG9fYWVhZF9lbmNyeXB0KHJlcSk7CisKKwlpZiAocGFkYXRhLT5pbmZvID09IC1FSU5QUk9HUkVTUykKKwkJcmV0dXJuOworCisJcGFkYXRhX2RvX3NlcmlhbChwYWRhdGEpOworfQorCitzdGF0aWMgaW50IHBjcnlwdF9hZWFkX2VuY3J5cHQoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxKQoreworCWludCBlcnI7CisJc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpwcmVxID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKmNyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEgPSBwY3J5cHRfcmVxdWVzdF9wYWRhdGEocHJlcSk7CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSk7CisJc3RydWN0IHBjcnlwdF9hZWFkX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KGFlYWQpOworCXUzMiBmbGFncyA9IGFlYWRfcmVxdWVzdF9mbGFncyhyZXEpOworCisJbWVtc2V0KHBhZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwYWRhdGFfcHJpdikpOworCisJcGFkYXRhLT5wYXJhbGxlbCA9IHBjcnlwdF9hZWFkX2VuYzsKKwlwYWRhdGEtPnNlcmlhbCA9IHBjcnlwdF9hZWFkX3NlcmlhbDsKKworCWFlYWRfcmVxdWVzdF9zZXRfdGZtKGNyZXEsIGN0eC0+Y2hpbGQpOworCWFlYWRfcmVxdWVzdF9zZXRfY2FsbGJhY2soY3JlcSwgZmxhZ3MgJiB+Q1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQLAorCQkJCSAgcGNyeXB0X2FlYWRfZG9uZSwgcmVxKTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2NyeXB0KGNyZXEsIHJlcS0+c3JjLCByZXEtPmRzdCwKKwkJCSAgICAgICByZXEtPmNyeXB0bGVuLCByZXEtPml2KTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2Fzc29jKGNyZXEsIHJlcS0+YXNzb2MsIHJlcS0+YXNzb2NsZW4pOworCisJZXJyID0gcGNyeXB0X2RvX3BhcmFsbGVsKHBhZGF0YSwgJmN0eC0+Y2JfY3B1LCBwY3J5cHRfZW5jX3BhZGF0YSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllbHNlCisJCWVyciA9IGNyeXB0b19hZWFkX2VuY3J5cHQoY3JlcSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBwY3J5cHRfYWVhZF9kZWMoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpCit7CisJc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpwcmVxID0gcGNyeXB0X3BhZGF0YV9yZXF1ZXN0KHBhZGF0YSk7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gcGNyeXB0X3JlcXVlc3RfY3R4KHByZXEpOworCisJcGFkYXRhLT5pbmZvID0gY3J5cHRvX2FlYWRfZGVjcnlwdChyZXEpOworCisJaWYgKHBhZGF0YS0+aW5mbyA9PSAtRUlOUFJPR1JFU1MpCisJCXJldHVybjsKKworCXBhZGF0YV9kb19zZXJpYWwocGFkYXRhKTsKK30KKworc3RhdGljIGludCBwY3J5cHRfYWVhZF9kZWNyeXB0KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IGFlYWRfcmVxdWVzdF9jdHgocmVxKTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpjcmVxID0gcGNyeXB0X3JlcXVlc3RfY3R4KHByZXEpOworCXN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhID0gcGNyeXB0X3JlcXVlc3RfcGFkYXRhKHByZXEpOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCXN0cnVjdCBwY3J5cHRfYWVhZF9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhZWFkKTsKKwl1MzIgZmxhZ3MgPSBhZWFkX3JlcXVlc3RfZmxhZ3MocmVxKTsKKworCW1lbXNldChwYWRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcGFkYXRhX3ByaXYpKTsKKworCXBhZGF0YS0+cGFyYWxsZWwgPSBwY3J5cHRfYWVhZF9kZWM7CisJcGFkYXRhLT5zZXJpYWwgPSBwY3J5cHRfYWVhZF9zZXJpYWw7CisKKwlhZWFkX3JlcXVlc3Rfc2V0X3RmbShjcmVxLCBjdHgtPmNoaWxkKTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKGNyZXEsIGZsYWdzICYgfkNSWVBUT19URk1fUkVRX01BWV9TTEVFUCwKKwkJCQkgIHBjcnlwdF9hZWFkX2RvbmUsIHJlcSk7CisJYWVhZF9yZXF1ZXN0X3NldF9jcnlwdChjcmVxLCByZXEtPnNyYywgcmVxLT5kc3QsCisJCQkgICAgICAgcmVxLT5jcnlwdGxlbiwgcmVxLT5pdik7CisJYWVhZF9yZXF1ZXN0X3NldF9hc3NvYyhjcmVxLCByZXEtPmFzc29jLCByZXEtPmFzc29jbGVuKTsKKworCWVyciA9IHBjcnlwdF9kb19wYXJhbGxlbChwYWRhdGEsICZjdHgtPmNiX2NwdSwgcGNyeXB0X2RlY19wYWRhdGEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZWxzZQorCQllcnIgPSBjcnlwdG9fYWVhZF9kZWNyeXB0KGNyZXEpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZ2l2ZW5jKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKQoreworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IHBjcnlwdF9wYWRhdGFfcmVxdWVzdChwYWRhdGEpOworCXN0cnVjdCBhZWFkX2dpdmNyeXB0X3JlcXVlc3QgKnJlcSA9IHBjcnlwdF9yZXF1ZXN0X2N0eChwcmVxKTsKKworCXBhZGF0YS0+aW5mbyA9IGNyeXB0b19hZWFkX2dpdmVuY3J5cHQocmVxKTsKKworCWlmIChwYWRhdGEtPmluZm8gPT0gLUVJTlBST0dSRVNTKQorCQlyZXR1cm47CisKKwlwYWRhdGFfZG9fc2VyaWFsKHBhZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgcGNyeXB0X2FlYWRfZ2l2ZW5jcnlwdChzdHJ1Y3QgYWVhZF9naXZjcnlwdF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICphcmVxID0gJnJlcS0+YXJlcTsKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBhZWFkX3JlcXVlc3RfY3R4KGFyZXEpOworCXN0cnVjdCBhZWFkX2dpdmNyeXB0X3JlcXVlc3QgKmNyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEgPSBwY3J5cHRfcmVxdWVzdF9wYWRhdGEocHJlcSk7CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gYWVhZF9naXZjcnlwdF9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgcGNyeXB0X2FlYWRfY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYWVhZCk7CisJdTMyIGZsYWdzID0gYWVhZF9yZXF1ZXN0X2ZsYWdzKGFyZXEpOworCisJbWVtc2V0KHBhZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwYWRhdGFfcHJpdikpOworCisJcGFkYXRhLT5wYXJhbGxlbCA9IHBjcnlwdF9hZWFkX2dpdmVuYzsKKwlwYWRhdGEtPnNlcmlhbCA9IHBjcnlwdF9hZWFkX2dpdl9zZXJpYWw7CisKKwlhZWFkX2dpdmNyeXB0X3NldF90Zm0oY3JlcSwgY3R4LT5jaGlsZCk7CisJYWVhZF9naXZjcnlwdF9zZXRfY2FsbGJhY2soY3JlcSwgZmxhZ3MgJiB+Q1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQLAorCQkJCSAgIHBjcnlwdF9hZWFkX2RvbmUsIGFyZXEpOworCWFlYWRfZ2l2Y3J5cHRfc2V0X2NyeXB0KGNyZXEsIGFyZXEtPnNyYywgYXJlcS0+ZHN0LAorCQkJCWFyZXEtPmNyeXB0bGVuLCBhcmVxLT5pdik7CisJYWVhZF9naXZjcnlwdF9zZXRfYXNzb2MoY3JlcSwgYXJlcS0+YXNzb2MsIGFyZXEtPmFzc29jbGVuKTsKKwlhZWFkX2dpdmNyeXB0X3NldF9naXYoY3JlcSwgcmVxLT5naXYsIHJlcS0+c2VxKTsKKworCWVyciA9IHBjcnlwdF9kb19wYXJhbGxlbChwYWRhdGEsICZjdHgtPmNiX2NwdSwgcGNyeXB0X2VuY19wYWRhdGEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZWxzZQorCQllcnIgPSBjcnlwdG9fYWVhZF9naXZlbmNyeXB0KGNyZXEpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwY3J5cHRfYWVhZF9pbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCWludCBjcHUsIGNwdV9pbmRleDsKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0ID0gY3J5cHRvX3RmbV9hbGdfaW5zdGFuY2UodGZtKTsKKwlzdHJ1Y3QgcGNyeXB0X2luc3RhbmNlX2N0eCAqaWN0eCA9IGNyeXB0b19pbnN0YW5jZV9jdHgoaW5zdCk7CisJc3RydWN0IHBjcnlwdF9hZWFkX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmNpcGhlcjsKKworCWljdHgtPnRmbV9jb3VudCsrOworCisJY3B1X2luZGV4ID0gaWN0eC0+dGZtX2NvdW50ICUgY3B1bWFza193ZWlnaHQoY3B1X2FjdGl2ZV9tYXNrKTsKKworCWN0eC0+Y2JfY3B1ID0gY3B1bWFza19maXJzdChjcHVfYWN0aXZlX21hc2spOworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2luZGV4OyBjcHUrKykKKwkJY3R4LT5jYl9jcHUgPSBjcHVtYXNrX25leHQoY3R4LT5jYl9jcHUsIGNwdV9hY3RpdmVfbWFzayk7CisKKwljaXBoZXIgPSBjcnlwdG9fc3Bhd25fYWVhZChjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpKTsKKworCWlmIChJU19FUlIoY2lwaGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2lwaGVyKTsKKworCWN0eC0+Y2hpbGQgPSBjaXBoZXI7CisJdGZtLT5jcnRfYWVhZC5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBwY3J5cHRfcmVxdWVzdCkKKwkJKyBzaXplb2Yoc3RydWN0IGFlYWRfZ2l2Y3J5cHRfcmVxdWVzdCkKKwkJKyBjcnlwdG9fYWVhZF9yZXFzaXplKGNpcGhlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZXhpdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgcGNyeXB0X2FlYWRfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJY3J5cHRvX2ZyZWVfYWVhZChjdHgtPmNoaWxkKTsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKnBjcnlwdF9hbGxvY19pbnN0YW5jZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CisJc3RydWN0IHBjcnlwdF9pbnN0YW5jZV9jdHggKmN0eDsKKwlpbnQgZXJyOworCisJaW5zdCA9IGt6YWxsb2Moc2l6ZW9mKCppbnN0KSArIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnN0KSB7CisJCWluc3QgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSAtRU5BTUVUT09MT05HOworCWlmIChzbnByaW50ZihpbnN0LT5hbGcuY3JhX2RyaXZlcl9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLAorCQkgICAgICJwY3J5cHQoJXMpIiwgYWxnLT5jcmFfZHJpdmVyX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUpCisJCWdvdG8gb3V0X2ZyZWVfaW5zdDsKKworCW1lbWNweShpbnN0LT5hbGcuY3JhX25hbWUsIGFsZy0+Y3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUpOworCisJY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwllcnIgPSBjcnlwdG9faW5pdF9zcGF3bigmY3R4LT5zcGF3biwgYWxnLCBpbnN0LAorCQkJCUNSWVBUT19BTEdfVFlQRV9NQVNLKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2luc3Q7CisKKwlpbnN0LT5hbGcuY3JhX3ByaW9yaXR5ID0gYWxnLT5jcmFfcHJpb3JpdHkgKyAxMDA7CisJaW5zdC0+YWxnLmNyYV9ibG9ja3NpemUgPSBhbGctPmNyYV9ibG9ja3NpemU7CisJaW5zdC0+YWxnLmNyYV9hbGlnbm1hc2sgPSBhbGctPmNyYV9hbGlnbm1hc2s7CisKK291dDoKKwlyZXR1cm4gaW5zdDsKKworb3V0X2ZyZWVfaW5zdDoKKwlrZnJlZShpbnN0KTsKKwlpbnN0ID0gRVJSX1BUUihlcnIpOworCWdvdG8gb3V0OworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqcGNyeXB0X2FsbG9jX2FlYWQoc3RydWN0IHJ0YXR0ciAqKnRiKQoreworCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKKwlzdHJ1Y3QgY3J5cHRvX2F0dHJfdHlwZSAqYWxndDsKKworCWFsZ3QgPSBjcnlwdG9fZ2V0X2F0dHJfdHlwZSh0Yik7CisKKwlhbGcgPSBjcnlwdG9fZ2V0X2F0dHJfYWxnKHRiLCBhbGd0LT50eXBlLAorCQkJCSAgKGFsZ3QtPm1hc2sgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykpOworCWlmIChJU19FUlIoYWxnKSkKKwkJcmV0dXJuIEVSUl9DQVNUKGFsZyk7CisKKwlpbnN0ID0gcGNyeXB0X2FsbG9jX2luc3RhbmNlKGFsZyk7CisJaWYgKElTX0VSUihpbnN0KSkKKwkJZ290byBvdXRfcHV0X2FsZzsKKworCWluc3QtPmFsZy5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX1RZUEVfQUVBRCB8IENSWVBUT19BTEdfQVNZTkM7CisJaW5zdC0+YWxnLmNyYV90eXBlID0gJmNyeXB0b19hZWFkX3R5cGU7CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuaXZzaXplID0gYWxnLT5jcmFfYWVhZC5pdnNpemU7CisJaW5zdC0+YWxnLmNyYV9hZWFkLmdlbml2ID0gYWxnLT5jcmFfYWVhZC5nZW5pdjsKKwlpbnN0LT5hbGcuY3JhX2FlYWQubWF4YXV0aHNpemUgPSBhbGctPmNyYV9hZWFkLm1heGF1dGhzaXplOworCisJaW5zdC0+YWxnLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBwY3J5cHRfYWVhZF9jdHgpOworCisJaW5zdC0+YWxnLmNyYV9pbml0ID0gcGNyeXB0X2FlYWRfaW5pdF90Zm07CisJaW5zdC0+YWxnLmNyYV9leGl0ID0gcGNyeXB0X2FlYWRfZXhpdF90Zm07CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuc2V0a2V5ID0gcGNyeXB0X2FlYWRfc2V0a2V5OworCWluc3QtPmFsZy5jcmFfYWVhZC5zZXRhdXRoc2l6ZSA9IHBjcnlwdF9hZWFkX3NldGF1dGhzaXplOworCWluc3QtPmFsZy5jcmFfYWVhZC5lbmNyeXB0ID0gcGNyeXB0X2FlYWRfZW5jcnlwdDsKKwlpbnN0LT5hbGcuY3JhX2FlYWQuZGVjcnlwdCA9IHBjcnlwdF9hZWFkX2RlY3J5cHQ7CisJaW5zdC0+YWxnLmNyYV9hZWFkLmdpdmVuY3J5cHQgPSBwY3J5cHRfYWVhZF9naXZlbmNyeXB0OworCitvdXRfcHV0X2FsZzoKKwljcnlwdG9fbW9kX3B1dChhbGcpOworCXJldHVybiBpbnN0OworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqcGNyeXB0X2FsbG9jKHN0cnVjdCBydGF0dHIgKip0YikKK3sKKwlzdHJ1Y3QgY3J5cHRvX2F0dHJfdHlwZSAqYWxndDsKKworCWFsZ3QgPSBjcnlwdG9fZ2V0X2F0dHJfdHlwZSh0Yik7CisJaWYgKElTX0VSUihhbGd0KSkKKwkJcmV0dXJuIEVSUl9DQVNUKGFsZ3QpOworCisJc3dpdGNoIChhbGd0LT50eXBlICYgYWxndC0+bWFzayAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSB7CisJY2FzZSBDUllQVE9fQUxHX1RZUEVfQUVBRDoKKwkJcmV0dXJuIHBjcnlwdF9hbGxvY19hZWFkKHRiKTsKKwl9CisKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2ZyZWUoc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCkKK3sKKwlzdHJ1Y3QgcGNyeXB0X2luc3RhbmNlX2N0eCAqY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKworCWNyeXB0b19kcm9wX3NwYXduKCZjdHgtPnNwYXduKTsKKwlrZnJlZShpbnN0KTsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgcGNyeXB0X3RtcGwgPSB7CisJLm5hbWUgPSAicGNyeXB0IiwKKwkuYWxsb2MgPSBwY3J5cHRfYWxsb2MsCisJLmZyZWUgPSBwY3J5cHRfZnJlZSwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwY3J5cHRfaW5pdCh2b2lkKQoreworCWVuY3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgicGVuY3J5cHQiKTsKKwlpZiAoIWVuY3dxKQorCQlnb3RvIGVycjsKKworCWRlY3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgicGRlY3J5cHQiKTsKKwlpZiAoIWRlY3dxKQorCQlnb3RvIGVycl9kZXN0cm95X2VuY3dxOworCisKKwlwY3J5cHRfZW5jX3BhZGF0YSA9IHBhZGF0YV9hbGxvYyhjcHVfcG9zc2libGVfbWFzaywgZW5jd3EpOworCWlmICghcGNyeXB0X2VuY19wYWRhdGEpCisJCWdvdG8gZXJyX2Rlc3Ryb3lfZGVjd3E7CisKKwlwY3J5cHRfZGVjX3BhZGF0YSA9IHBhZGF0YV9hbGxvYyhjcHVfcG9zc2libGVfbWFzaywgZGVjd3EpOworCWlmICghcGNyeXB0X2RlY19wYWRhdGEpCisJCWdvdG8gZXJyX2ZyZWVfcGFkYXRhOworCisJcGFkYXRhX3N0YXJ0KHBjcnlwdF9lbmNfcGFkYXRhKTsKKwlwYWRhdGFfc3RhcnQocGNyeXB0X2RlY19wYWRhdGEpOworCisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl90ZW1wbGF0ZSgmcGNyeXB0X3RtcGwpOworCitlcnJfZnJlZV9wYWRhdGE6CisJcGFkYXRhX2ZyZWUocGNyeXB0X2VuY19wYWRhdGEpOworCitlcnJfZGVzdHJveV9kZWN3cToKKwlkZXN0cm95X3dvcmtxdWV1ZShkZWN3cSk7CisKK2Vycl9kZXN0cm95X2VuY3dxOgorCWRlc3Ryb3lfd29ya3F1ZXVlKGVuY3dxKTsKKworZXJyOgorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGNyeXB0X2V4aXQodm9pZCkKK3sKKwlwYWRhdGFfc3RvcChwY3J5cHRfZW5jX3BhZGF0YSk7CisJcGFkYXRhX3N0b3AocGNyeXB0X2RlY19wYWRhdGEpOworCisJZGVzdHJveV93b3JrcXVldWUoZW5jd3EpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGRlY3dxKTsKKworCXBhZGF0YV9mcmVlKHBjcnlwdF9lbmNfcGFkYXRhKTsKKwlwYWRhdGFfZnJlZShwY3J5cHRfZGVjX3BhZGF0YSk7CisKKwljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmcGNyeXB0X3RtcGwpOworfQorCittb2R1bGVfaW5pdChwY3J5cHRfaW5pdCk7Cittb2R1bGVfZXhpdChwY3J5cHRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlN0ZWZmZW4gS2xhc3NlcnQgPHN0ZWZmZW4ua2xhc3NlcnRAc2VjdW5ldC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBhcmFsbGVsIGNyeXB0byB3cmFwcGVyIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vdGVzdG1nci5jIGIvY3J5cHRvL3Rlc3RtZ3IuYwppbmRleCA3NjIwYmZjLi5jNDk0ZDc2IDEwMDY0NAotLS0gYS9jcnlwdG8vdGVzdG1nci5jCisrKyBiL2NyeXB0by90ZXN0bWdyLmMKQEAgLTE0NzcsOSArMTQ3Nyw1NCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgYWxnX3Rlc3RfbnVsbChjb25zdCBzdHJ1Y3QgYWxnX3Rlc3RfZGVzYyAqZGVzYywKKwkJCSAgICAgY29uc3QgY2hhciAqZHJpdmVyLCB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJcmV0dXJuIDA7Cit9CisKIC8qIFBsZWFzZSBrZWVwIHRoaXMgbGlzdCBzb3J0ZWQgYnkgYWxnb3JpdGhtIG5hbWUuICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFsZ190ZXN0X2Rlc2MgYWxnX3Rlc3RfZGVzY3NbXSA9IHsKIAl7CisJCS5hbGcgPSAiX19kcml2ZXItY2JjLWFlcy1hZXNuaSIsCisJCS50ZXN0ID0gYWxnX3Rlc3RfbnVsbCwKKwkJLnN1aXRlID0geworCQkJLmNpcGhlciA9IHsKKwkJCQkuZW5jID0geworCQkJCQkudmVjcyA9IE5VTEwsCisJCQkJCS5jb3VudCA9IDAKKwkJCQl9LAorCQkJCS5kZWMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0KKwkJCX0KKwkJfQorCX0sIHsKKwkJLmFsZyA9ICJfX2RyaXZlci1lY2ItYWVzLWFlc25pIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9udWxsLAorCQkuc3VpdGUgPSB7CisJCQkuY2lwaGVyID0geworCQkJCS5lbmMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0sCisJCQkJLmRlYyA9IHsKKwkJCQkJLnZlY3MgPSBOVUxMLAorCQkJCQkuY291bnQgPSAwCisJCQkJfQorCQkJfQorCQl9CisJfSwgeworCQkuYWxnID0gIl9fZ2hhc2gtcGNsbXVscWRxbmkiLAorCQkudGVzdCA9IGFsZ190ZXN0X251bGwsCisJCS5zdWl0ZSA9IHsKKwkJCS5oYXNoID0geworCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkuY291bnQgPSAwCisJCQl9CisJCX0KKwl9LCB7CiAJCS5hbGcgPSAiYW5zaV9jcHJuZyIsCiAJCS50ZXN0ID0gYWxnX3Rlc3RfY3BybmcsCiAJCS5maXBzX2FsbG93ZWQgPSAxLApAQCAtMTYyMyw2ICsxNjY4LDMwIEBACiAJCQl9CiAJCX0KIAl9LCB7CisJCS5hbGcgPSAiY3J5cHRkKF9fZHJpdmVyLWVjYi1hZXMtYWVzbmkpIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9udWxsLAorCQkuc3VpdGUgPSB7CisJCQkuY2lwaGVyID0geworCQkJCS5lbmMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0sCisJCQkJLmRlYyA9IHsKKwkJCQkJLnZlY3MgPSBOVUxMLAorCQkJCQkuY291bnQgPSAwCisJCQkJfQorCQkJfQorCQl9CisJfSwgeworCQkuYWxnID0gImNyeXB0ZChfX2doYXNoLXBjbG11bHFkcW5pKSIsCisJCS50ZXN0ID0gYWxnX3Rlc3RfbnVsbCwKKwkJLnN1aXRlID0geworCQkJLmhhc2ggPSB7CisJCQkJLnZlY3MgPSBOVUxMLAorCQkJCS5jb3VudCA9IDAKKwkJCX0KKwkJfQorCX0sIHsKIAkJLmFsZyA9ICJjdHIoYWVzKSIsCiAJCS50ZXN0ID0gYWxnX3Rlc3Rfc2tjaXBoZXIsCiAJCS5maXBzX2FsbG93ZWQgPSAxLApAQCAtMTY2OSw2ICsxNzM4LDIxIEBACiAJCQl9CiAJCX0KIAl9LCB7CisJCS5hbGcgPSAiZWNiKF9fYWVzLWFlc25pKSIsCisJCS50ZXN0ID0gYWxnX3Rlc3RfbnVsbCwKKwkJLnN1aXRlID0geworCQkJLmNpcGhlciA9IHsKKwkJCQkuZW5jID0geworCQkJCQkudmVjcyA9IE5VTEwsCisJCQkJCS5jb3VudCA9IDAKKwkJCQl9LAorCQkJCS5kZWMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0KKwkJCX0KKwkJfQorCX0sIHsKIAkJLmFsZyA9ICJlY2IoYWVzKSIsCiAJCS50ZXN0ID0gYWxnX3Rlc3Rfc2tjaXBoZXIsCiAJCS5maXBzX2FsbG93ZWQgPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbW1vbi5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbW1vbi5oCmluZGV4IDNiMjA3ODYuLjNlNTBjNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb21tb24uaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29tbW9uLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmgKaW5kZXggYTQ0NzFlMy4uMzMxODFhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNkZWJ1Zy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2RlYnVnLmgKaW5kZXggYTRmYjAwMS4uNDhmYWYzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2RlYnVnLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2RlYnVnLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZGlzcGF0LmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZGlzcGF0LmgKaW5kZXggNjI5MTkwNC4uODk0YTBmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2Rpc3BhdC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNkaXNwYXQuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNldmVudHMuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNldmVudHMuaAppbmRleCAwYmJhMTQ4Li4zZTZiYTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZXZlbnRzLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2V2ZW50cy5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzYsMTIgKzc2LDkgQEAKICAqIGV2Z3BlIC0gR1BFIGhhbmRsaW5nIGFuZCBkaXNwYXRjaAogICovCiBhY3BpX3N0YXR1cwotYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sCi0JCQkJdTggdHlwZSk7CithY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbyk7CiAKLWFjcGlfc3RhdHVzCi1hY3BpX2V2X2VuYWJsZV9ncGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvLAotCQkgICB1OCB3cml0ZV90b19oYXJkd2FyZSk7CithY3BpX3N0YXR1cyBhY3BpX2V2X2VuYWJsZV9ncGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvKTsKIAogYWNwaV9zdGF0dXMgYWNwaV9ldl9kaXNhYmxlX2dwZShzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8pOwogCkBAIC0xMjIsOSArMTE5LDYgQEAKIHUzMiBhY3BpX2V2X2dwZV9kZXRlY3Qoc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8gKmdwZV94cnVwdF9saXN0KTsKIAogYWNwaV9zdGF0dXMKLWFjcGlfZXZfc2V0X2dwZV90eXBlKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbywgdTggdHlwZSk7Ci0KLWFjcGlfc3RhdHVzCiBhY3BpX2V2X2NoZWNrX2Zvcl93YWtlX29ubHlfZ3BlKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbyk7CiAKIGFjcGlfc3RhdHVzIGFjcGlfZXZfZ3BlX2luaXRpYWxpemUodm9pZCk7CkBAIC0xMzksOCArMTMzLDcgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX2V2X2FkZHJlc3Nfc3BhY2VfZGlzcGF0Y2godW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmVnaW9uX29iaiwKIAkJCSAgICAgICB1MzIgZnVuY3Rpb24sCi0JCQkgICAgICAgdTMyIHJlZ2lvbl9vZmZzZXQsCi0JCQkgICAgICAgdTMyIGJpdF93aWR0aCwgYWNwaV9pbnRlZ2VyICogdmFsdWUpOworCQkJICAgICAgIHUzMiByZWdpb25fb2Zmc2V0LCB1MzIgYml0X3dpZHRoLCB1NjQgKnZhbHVlKTsKIAogYWNwaV9zdGF0dXMKIGFjcGlfZXZfYXR0YWNoX3JlZ2lvbih1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpoYW5kbGVyX29iaiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaAppbmRleCAyOWJhNjZkLi5mOGRkOGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZ2xvYmFsLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2dsb2JhbC5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2h3YXJlLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaAppbmRleCAzNjE5MmYxLi41OTAwZjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNpbnRlcnAuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNpbnRlcnAuaAppbmRleCA1ZGI5ZjI5Li42ZGYzZjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaW50ZXJwLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2ludGVycC5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTI5LDE4ICsxMjksMTcgQEAKIAogYWNwaV9zdGF0dXMKIGFjcGlfZXhfd3JpdGVfd2l0aF91cGRhdGVfcnVsZSh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywKLQkJCSAgICAgICBhY3BpX2ludGVnZXIgbWFzaywKLQkJCSAgICAgICBhY3BpX2ludGVnZXIgZmllbGRfdmFsdWUsCi0JCQkgICAgICAgdTMyIGZpZWxkX2RhdHVtX2J5dGVfb2Zmc2V0KTsKKwkJCSAgICAgICB1NjQgbWFzaywKKwkJCSAgICAgICB1NjQgZmllbGRfdmFsdWUsIHUzMiBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCk7CiAKIHZvaWQKLWFjcGlfZXhfZ2V0X2J1ZmZlcl9kYXR1bShhY3BpX2ludGVnZXIgKiBkYXR1bSwKK2FjcGlfZXhfZ2V0X2J1ZmZlcl9kYXR1bSh1NjQgKmRhdHVtLAogCQkJIHZvaWQgKmJ1ZmZlciwKIAkJCSB1MzIgYnVmZmVyX2xlbmd0aCwKIAkJCSB1MzIgYnl0ZV9ncmFudWxhcml0eSwgdTMyIGJ1ZmZlcl9vZmZzZXQpOwogCiB2b2lkCi1hY3BpX2V4X3NldF9idWZmZXJfZGF0dW0oYWNwaV9pbnRlZ2VyIG1lcmdlZF9kYXR1bSwKK2FjcGlfZXhfc2V0X2J1ZmZlcl9kYXR1bSh1NjQgbWVyZ2VkX2RhdHVtLAogCQkJIHZvaWQgKmJ1ZmZlciwKIAkJCSB1MzIgYnVmZmVyX2xlbmd0aCwKIAkJCSB1MzIgYnl0ZV9ncmFudWxhcml0eSwgdTMyIGJ1ZmZlcl9vZmZzZXQpOwpAQCAtMTY4LDggKzE2Nyw3IEBACiAKIGFjcGlfc3RhdHVzCiBhY3BpX2V4X2FjY2Vzc19yZWdpb24odW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsCi0JCSAgICAgIHUzMiBmaWVsZF9kYXR1bV9ieXRlX29mZnNldCwKLQkJICAgICAgYWNwaV9pbnRlZ2VyICogdmFsdWUsIHUzMiByZWFkX3dyaXRlKTsKKwkJICAgICAgdTMyIGZpZWxkX2RhdHVtX2J5dGVfb2Zmc2V0LCB1NjQgKnZhbHVlLCB1MzIgcmVhZF93cml0ZSk7CiAKIC8qCiAgKiBleG1pc2MgLSBtaXNjIHN1cHBvcnQgcm91dGluZXMKQEAgLTE5MywxNiArMTkxLDE0IEBACiAKIGFjcGlfc3RhdHVzCiBhY3BpX2V4X2RvX2xvZ2ljYWxfbnVtZXJpY19vcCh1MTYgb3Bjb2RlLAotCQkJICAgICAgYWNwaV9pbnRlZ2VyIGludGVnZXIwLAotCQkJICAgICAgYWNwaV9pbnRlZ2VyIGludGVnZXIxLCB1OCAqIGxvZ2ljYWxfcmVzdWx0KTsKKwkJCSAgICAgIHU2NCBpbnRlZ2VyMCwgdTY0IGludGVnZXIxLCB1OCAqbG9naWNhbF9yZXN1bHQpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9leF9kb19sb2dpY2FsX29wKHUxNiBvcGNvZGUsCiAJCSAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9wZXJhbmQwLAotCQkgICAgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvcGVyYW5kMSwgdTggKiBsb2dpY2FsX3Jlc3VsdCk7CisJCSAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9wZXJhbmQxLCB1OCAqbG9naWNhbF9yZXN1bHQpOwogCi1hY3BpX2ludGVnZXIKLWFjcGlfZXhfZG9fbWF0aF9vcCh1MTYgb3Bjb2RlLCBhY3BpX2ludGVnZXIgb3BlcmFuZDAsIGFjcGlfaW50ZWdlciBvcGVyYW5kMSk7Cit1NjQgYWNwaV9leF9kb19tYXRoX29wKHUxNiBvcGNvZGUsIHU2NCBvcGVyYW5kMCwgdTY0IG9wZXJhbmQxKTsKIAogYWNwaV9zdGF0dXMgYWNwaV9leF9jcmVhdGVfbXV0ZXgoc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqd2Fsa19zdGF0ZSk7CiAKQEAgLTI3OCw3ICsyNzQsNyBAQAogYWNwaV9leF9zeXN0ZW1fZG9fbm90aWZ5X29wKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnZhbHVlLAogCQkJICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjKTsKIAotYWNwaV9zdGF0dXMgYWNwaV9leF9zeXN0ZW1fZG9fc3VzcGVuZChhY3BpX2ludGVnZXIgdGltZSk7CithY3BpX3N0YXR1cyBhY3BpX2V4X3N5c3RlbV9kb19zdXNwZW5kKHU2NCB0aW1lKTsKIAogYWNwaV9zdGF0dXMgYWNwaV9leF9zeXN0ZW1fZG9fc3RhbGwodTMyIHRpbWUpOwogCkBAIC00NjEsOSArNDU3LDkgQEAKIAogdm9pZCBhY3BpX2V4X3JlbGVhc2VfZ2xvYmFsX2xvY2sodTMyIHJ1bGUpOwogCi12b2lkIGFjcGlfZXhfZWlzYV9pZF90b19zdHJpbmcoY2hhciAqZGVzdCwgYWNwaV9pbnRlZ2VyIGNvbXByZXNzZWRfaWQpOwordm9pZCBhY3BpX2V4X2Vpc2FfaWRfdG9fc3RyaW5nKGNoYXIgKmRlc3QsIHU2NCBjb21wcmVzc2VkX2lkKTsKIAotdm9pZCBhY3BpX2V4X2ludGVnZXJfdG9fc3RyaW5nKGNoYXIgKmRlc3QsIGFjcGlfaW50ZWdlciB2YWx1ZSk7Cit2b2lkIGFjcGlfZXhfaW50ZWdlcl90b19zdHJpbmcoY2hhciAqZGVzdCwgdTY0IHZhbHVlKTsKIAogLyoKICAqIGV4cmVnaW9uIC0gZGVmYXVsdCBvcF9yZWdpb24gaGFuZGxlcnMKQEAgLTQ3Miw3ICs0NjgsNyBAQAogYWNwaV9leF9zeXN0ZW1fbWVtb3J5X3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJCSAgICBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCQkgICAgdTMyIGJpdF93aWR0aCwKLQkJCQkgICAgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkJICAgIHU2NCAqdmFsdWUsCiAJCQkJICAgIHZvaWQgKmhhbmRsZXJfY29udGV4dCwKIAkJCQkgICAgdm9pZCAqcmVnaW9uX2NvbnRleHQpOwogCkBAIC00ODAsMzUgKzQ3NiwzNSBAQAogYWNwaV9leF9zeXN0ZW1faW9fc3BhY2VfaGFuZGxlcih1MzIgZnVuY3Rpb24sCiAJCQkJYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MsCiAJCQkJdTMyIGJpdF93aWR0aCwKLQkJCQlhY3BpX2ludGVnZXIgKiB2YWx1ZSwKKwkJCQl1NjQgKnZhbHVlLAogCQkJCXZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9leF9wY2lfY29uZmlnX3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJCSBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCQkgdTMyIGJpdF93aWR0aCwKLQkJCQkgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkJIHU2NCAqdmFsdWUsCiAJCQkJIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9leF9jbW9zX3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJICAgYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MsCiAJCQkgICB1MzIgYml0X3dpZHRoLAotCQkJICAgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkgICB1NjQgKnZhbHVlLAogCQkJICAgdm9pZCAqaGFuZGxlcl9jb250ZXh0LCB2b2lkICpyZWdpb25fY29udGV4dCk7CiAKIGFjcGlfc3RhdHVzCiBhY3BpX2V4X3BjaV9iYXJfc3BhY2VfaGFuZGxlcih1MzIgZnVuY3Rpb24sCiAJCQkgICAgICBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCSAgICAgIHUzMiBiaXRfd2lkdGgsCi0JCQkgICAgICBhY3BpX2ludGVnZXIgKiB2YWx1ZSwKKwkJCSAgICAgIHU2NCAqdmFsdWUsCiAJCQkgICAgICB2b2lkICpoYW5kbGVyX2NvbnRleHQsIHZvaWQgKnJlZ2lvbl9jb250ZXh0KTsKIAogYWNwaV9zdGF0dXMKIGFjcGlfZXhfZW1iZWRkZWRfY29udHJvbGxlcl9zcGFjZV9oYW5kbGVyKHUzMiBmdW5jdGlvbiwKIAkJCQkJICBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCQkJICB1MzIgYml0X3dpZHRoLAotCQkJCQkgIGFjcGlfaW50ZWdlciAqIHZhbHVlLAorCQkJCQkgIHU2NCAqdmFsdWUsCiAJCQkJCSAgdm9pZCAqaGFuZGxlcl9jb250ZXh0LAogCQkJCQkgIHZvaWQgKnJlZ2lvbl9jb250ZXh0KTsKIApAQCAtNTE2LDE0ICs1MTIsMTQgQEAKIGFjcGlfZXhfc21fYnVzX3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJICAgICBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCSAgICAgdTMyIGJpdF93aWR0aCwKLQkJCSAgICAgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkgICAgIHU2NCAqdmFsdWUsCiAJCQkgICAgIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9leF9kYXRhX3RhYmxlX3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJCSBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCQkgdTMyIGJpdF93aWR0aCwKLQkJCQkgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkJIHU2NCAqdmFsdWUsCiAJCQkJIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpOwogCiAjZW5kaWYJCQkJLyogX19JTlRFUlBfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oCmluZGV4IDgxZTY0ZjQ3Li4yNGI4ZmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM3NCw2ICszNzQsNyBAQAogc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhIHsKIAljaGFyICpwYXRobmFtZTsKIAljb25zdCB1bmlvbiBhY3BpX3ByZWRlZmluZWRfaW5mbyAqcHJlZGVmaW5lZDsKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpwYXJlbnRfcGFja2FnZTsKIAl1MzIgZmxhZ3M7CiAJdTggbm9kZV9mbGFnczsKIH07CkBAIC00MjYsNiArNDI3LDggQEAKIAlzdHJ1Y3QgYWNwaV9ncGVfcmVnaXN0ZXJfaW5mbyAqcmVnaXN0ZXJfaW5mbzsJLyogQmFja3BvaW50ZXIgdG8gcmVnaXN0ZXIgaW5mbyAqLwogCXU4IGZsYWdzOwkJLyogTWlzYyBpbmZvIGFib3V0IHRoaXMgR1BFICovCiAJdTggZ3BlX251bWJlcjsJCS8qIFRoaXMgR1BFICovCisJdTggcnVudGltZV9jb3VudDsKKwl1OCB3YWtldXBfY291bnQ7CiB9OwogCiAvKiBJbmZvcm1hdGlvbiBhYm91dCBhIEdQRSByZWdpc3RlciBwYWlyLCBvbmUgcGVyIGVhY2ggc3RhdHVzL2VuYWJsZSBwYWlyIGluIGFuIGFycmF5ICovCkBAIC02NDksOCArNjUyLDcgQEAKIH07CiAKIHVuaW9uIGFjcGlfcGFyc2VfdmFsdWUgewotCWFjcGlfaW50ZWdlciBpbnRlZ2VyOwkvKiBJbnRlZ2VyIGNvbnN0YW50IChVcCB0byA2NCBiaXRzKSAqLwotCXN0cnVjdCB1aW50NjRfc3RydWN0IGludGVnZXI2NDsJLyogU3RydWN0dXJlIG92ZXJsYXkgZm9yIDIgMzItYml0IER3b3JkcyAqLworCXU2NCBpbnRlZ2VyOwkJLyogSW50ZWdlciBjb25zdGFudCAoVXAgdG8gNjQgYml0cykgKi8KIAl1MzIgc2l6ZTsJCS8qIGJ5dGVsaXN0IG9yIGZpZWxkIHNpemUgKi8KIAljaGFyICpzdHJpbmc7CQkvKiBOVUxMIHRlcm1pbmF0ZWQgc3RyaW5nICovCiAJdTggKmJ1ZmZlcjsJCS8qIGJ1ZmZlciBvciBzdHJpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNtYWNyb3MuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNtYWNyb3MuaAppbmRleCA3ZDliYTZlLi45ODk0OTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbWFjcm9zLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY21hY3Jvcy5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcyLDggKzI3Miw4IEBACiAgKiBNQVNLX0JJVFNfQUJPVkUgY3JlYXRlcyBhIG1hc2sgc3RhcnRpbmcgQVQgdGhlIHBvc2l0aW9uIGFuZCBhYm92ZQogICogTUFTS19CSVRTX0JFTE9XIGNyZWF0ZXMgYSBtYXNrIHN0YXJ0aW5nIG9uZSBiaXQgQkVMT1cgdGhlIHBvc2l0aW9uCiAgKi8KLSNkZWZpbmUgQUNQSV9NQVNLX0JJVFNfQUJPVkUocG9zaXRpb24pICAgICAgKH4oKEFDUElfSU5URUdFUl9NQVgpIDw8ICgodTMyKSAocG9zaXRpb24pKSkpCi0jZGVmaW5lIEFDUElfTUFTS19CSVRTX0JFTE9XKHBvc2l0aW9uKSAgICAgICgoQUNQSV9JTlRFR0VSX01BWCkgPDwgKCh1MzIpIChwb3NpdGlvbikpKQorI2RlZmluZSBBQ1BJX01BU0tfQklUU19BQk9WRShwb3NpdGlvbikgICAgICAofigoQUNQSV9VSU5UNjRfTUFYKSA8PCAoKHUzMikgKHBvc2l0aW9uKSkpKQorI2RlZmluZSBBQ1BJX01BU0tfQklUU19CRUxPVyhwb3NpdGlvbikgICAgICAoKEFDUElfVUlOVDY0X01BWCkgPDwgKCh1MzIpIChwb3NpdGlvbikpKQogCiAvKiBCaXRmaWVsZHMgd2l0aGluIEFDUEkgcmVnaXN0ZXJzICovCiAKQEAgLTQxNCwxNiArNDE0LDE2IEBACiAJCQkJCQkJCQkJCWFjcGlfdXRfcHRyX2V4aXQgKEFDUElfREVCVUdfUEFSQU1FVEVSUywgKHU4ICopIF9zKTsgXAogCQkJCQkJCQkJCQlyZXR1cm4gKF9zKTsgfSkKICNkZWZpbmUgcmV0dXJuX1ZBTFVFKHMpICAgICAgICAgICAgICAgICBBQ1BJX0RPX1dISUxFMCAoeyBcCi0JCQkJCQkJCQkJCXJlZ2lzdGVyIGFjcGlfaW50ZWdlciBfcyA9IChzKTsgXAorCQkJCQkJCQkJCQlyZWdpc3RlciB1NjQgX3MgPSAocyk7IFwKIAkJCQkJCQkJCQkJYWNwaV91dF92YWx1ZV9leGl0IChBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsIF9zKTsgXAogCQkJCQkJCQkJCQlyZXR1cm4gKF9zKTsgfSkKICNkZWZpbmUgcmV0dXJuX1VJTlQ4KHMpICAgICAgICAgICAgICAgICBBQ1BJX0RPX1dISUxFMCAoeyBcCiAJCQkJCQkJCQkJCXJlZ2lzdGVyIHU4IF9zID0gKHU4KSAocyk7IFwKLQkJCQkJCQkJCQkJYWNwaV91dF92YWx1ZV9leGl0IChBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsIChhY3BpX2ludGVnZXIpIF9zKTsgXAorCQkJCQkJCQkJCQlhY3BpX3V0X3ZhbHVlX2V4aXQgKEFDUElfREVCVUdfUEFSQU1FVEVSUywgKHU2NCkgX3MpOyBcCiAJCQkJCQkJCQkJCXJldHVybiAoX3MpOyB9KQogI2RlZmluZSByZXR1cm5fVUlOVDMyKHMpICAgICAgICAgICAgICAgIEFDUElfRE9fV0hJTEUwICh7IFwKIAkJCQkJCQkJCQkJcmVnaXN0ZXIgdTMyIF9zID0gKHUzMikgKHMpOyBcCi0JCQkJCQkJCQkJCWFjcGlfdXRfdmFsdWVfZXhpdCAoQUNQSV9ERUJVR19QQVJBTUVURVJTLCAoYWNwaV9pbnRlZ2VyKSBfcyk7IFwKKwkJCQkJCQkJCQkJYWNwaV91dF92YWx1ZV9leGl0IChBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsICh1NjQpIF9zKTsgXAogCQkJCQkJCQkJCQlyZXR1cm4gKF9zKTsgfSkKICNlbHNlCQkJCS8qIFVzZSBvcmlnaW5hbCBsZXNzLXNhZmUgbWFjcm9zICovCiAKQEAgLTQzNCw3ICs0MzQsNyBAQAogCQkJCQkJCQkJCQlhY3BpX3V0X3B0cl9leGl0IChBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsICh1OCAqKSAocykpOyBcCiAJCQkJCQkJCQkJCXJldHVybigocykpOyB9KQogI2RlZmluZSByZXR1cm5fVkFMVUUocykgICAgICAgICAgICAgICAgIEFDUElfRE9fV0hJTEUwICh7IFwKLQkJCQkJCQkJCQkJYWNwaV91dF92YWx1ZV9leGl0IChBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsIChhY3BpX2ludGVnZXIpIChzKSk7IFwKKwkJCQkJCQkJCQkJYWNwaV91dF92YWx1ZV9leGl0IChBQ1BJX0RFQlVHX1BBUkFNRVRFUlMsICh1NjQpIChzKSk7IFwKIAkJCQkJCQkJCQkJcmV0dXJuKChzKSk7IH0pCiAjZGVmaW5lIHJldHVybl9VSU5UOChzKSAgICAgICAgICAgICAgICAgcmV0dXJuX1ZBTFVFKHMpCiAjZGVmaW5lIHJldHVybl9VSU5UMzIocykgICAgICAgICAgICAgICAgcmV0dXJuX1ZBTFVFKHMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbmFtZXNwLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbmFtZXNwLmgKaW5kZXggNjFlZGIxNS4uMjU4MTU5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY25hbWVzcC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNuYW1lc3AuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI4Niw2ICsyODYsMTcgQEAKIGFjcGlfbnNfcmVwYWlyX3BhY2thZ2VfbGlzdChzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCiAJCQkgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKm9ial9kZXNjX3B0cik7CiAKK2FjcGlfc3RhdHVzCithY3BpX25zX3JlcGFpcl9udWxsX2VsZW1lbnQoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAorCQkJICAgIHUzMiBleHBlY3RlZF9idHlwZXMsCisJCQkgICAgdTMyIHBhY2thZ2VfaW5kZXgsCisJCQkgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9vYmplY3RfcHRyKTsKKwordm9pZAorYWNwaV9uc19yZW1vdmVfbnVsbF9lbGVtZW50cyhzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCisJCQkgICAgIHU4IHBhY2thZ2VfdHlwZSwKKwkJCSAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MpOworCiAvKgogICogbnNyZXBhaXIyIC0gUmV0dXJuIG9iamVjdCByZXBhaXIgZm9yIHNwZWNpZmljCiAgKiBwcmVkZWZpbmVkIG1ldGhvZHMvb2JqZWN0cwpAQCAtMjk2LDExICszMDcsNiBAQAogCQkJYWNwaV9zdGF0dXMgdmFsaWRhdGVfc3RhdHVzLAogCQkJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9vYmplY3RfcHRyKTsKIAotdm9pZAotYWNwaV9uc19yZW1vdmVfbnVsbF9lbGVtZW50cyhzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCi0JCQkgICAgIHU4IHBhY2thZ2VfdHlwZSwKLQkJCSAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MpOwotCiAvKgogICogbnNzZWFyY2ggLSBOYW1lc3BhY2Ugc2VhcmNoaW5nIGFuZCBlbnRyeQogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmgKaW5kZXggNjQwNjJiMS4uY2RlMThlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaApAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTExMSw3ICsxMTEsNyBAQAogCiBzdHJ1Y3QgYWNwaV9vYmplY3RfaW50ZWdlciB7CiAJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiB1OCBmaWxsWzNdOwkvKiBQcmV2ZW50IHdhcm5pbmcgb24gc29tZSBjb21waWxlcnMgKi8KLQlhY3BpX2ludGVnZXIgdmFsdWU7CisJdTY0IHZhbHVlOwogfTsKIAogLyoKQEAgLTI4Nyw4ICsyODcsMTAgQEAKIAogc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyIHsKIAlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwkvKiBQYXJlbnQgZGV2aWNlICovCisJdTMyIGhhbmRsZXJfdHlwZTsKIAlhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXI7CiAJdm9pZCAqY29udGV4dDsKKwlzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKm5leHQ7CiB9OwogCiBzdHJ1Y3QgYWNwaV9vYmplY3RfYWRkcl9oYW5kbGVyIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvcGNvZGUuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvcGNvZGUuaAppbmRleCBkZmRmNjMzLi44YzE1ZmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb3Bjb2RlLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY29wY29kZS5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3BhcnNlci5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3BhcnNlci5oCmluZGV4IDIyODgxZTguLmQwYmIwZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwYXJzZXIuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcGFyc2VyLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcHJlZGVmLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcHJlZGVmLmgKaW5kZXggNTdiZGFmNi4uOTcxMTYwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwcmVkZWYuaApAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNyZXNyYy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3Jlc3JjLmgKaW5kZXggZWVmNWJkNy4uNTI4YmNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3Jlc3JjLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3Jlc3JjLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjc3RydWN0LmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjc3RydWN0LmgKaW5kZXggNzk4MGEyNi4uMTYxYmMwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3N0cnVjdC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNzdHJ1Y3QuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN0YWJsZXMuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN0YWJsZXMuaAppbmRleCAwMWM3NmI4Li44ZmYzYjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdGFibGVzLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3RhYmxlcy5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3V0aWxzLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdXRpbHMuaAppbmRleCAzYTQ1MWEyLi4zNWRmNzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdXRpbHMuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdXRpbHMuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEzNCw3ICsxMzQsNyBAQAogCiBjaGFyICphY3BpX3V0X2dldF9ldmVudF9uYW1lKHUzMiBldmVudF9pZCk7CiAKLWNoYXIgYWNwaV91dF9oZXhfdG9fYXNjaWlfY2hhcihhY3BpX2ludGVnZXIgaW50ZWdlciwgdTMyIHBvc2l0aW9uKTsKK2NoYXIgYWNwaV91dF9oZXhfdG9fYXNjaWlfY2hhcih1NjQgaW50ZWdlciwgdTMyIHBvc2l0aW9uKTsKIAogdTggYWNwaV91dF92YWxpZF9vYmplY3RfdHlwZShhY3BpX29iamVjdF90eXBlIHR5cGUpOwogCkBAIC0yNzksOCArMjc5LDcgQEAKIHZvaWQKIGFjcGlfdXRfdmFsdWVfZXhpdCh1MzIgbGluZV9udW1iZXIsCiAJCSAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25hbWUsCi0JCSAgIGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLAotCQkgICB1MzIgY29tcG9uZW50X2lkLCBhY3BpX2ludGVnZXIgdmFsdWUpOworCQkgICBjb25zdCBjaGFyICptb2R1bGVfbmFtZSwgdTMyIGNvbXBvbmVudF9pZCwgdTY0IHZhbHVlKTsKIAogdm9pZAogYWNwaV91dF9wdHJfZXhpdCh1MzIgbGluZV9udW1iZXIsCkBAIC0zMjQsNyArMzIzLDcgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX3V0X2V2YWx1YXRlX251bWVyaWNfb2JqZWN0KGNoYXIgKm9iamVjdF9uYW1lLAogCQkJCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwKLQkJCQlhY3BpX2ludGVnZXIgKnZhbHVlKTsKKwkJCQl1NjQgKnZhbHVlKTsKIAogYWNwaV9zdGF0dXMKIGFjcGlfdXRfZXhlY3V0ZV9TVEEoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlLCB1MzIgKnN0YXR1c19mbGFncyk7CkBAIC00MzcsMTQgKzQzNiwxMiBAQAogICogdXRtYXRoCiAgKi8KIGFjcGlfc3RhdHVzCi1hY3BpX3V0X2RpdmlkZShhY3BpX2ludGVnZXIgaW5fZGl2aWRlbmQsCi0JICAgICAgIGFjcGlfaW50ZWdlciBpbl9kaXZpc29yLAotCSAgICAgICBhY3BpX2ludGVnZXIgKiBvdXRfcXVvdGllbnQsIGFjcGlfaW50ZWdlciAqIG91dF9yZW1haW5kZXIpOworYWNwaV91dF9kaXZpZGUodTY0IGluX2RpdmlkZW5kLAorCSAgICAgICB1NjQgaW5fZGl2aXNvciwgdTY0ICpvdXRfcXVvdGllbnQsIHU2NCAqb3V0X3JlbWFpbmRlcik7CiAKIGFjcGlfc3RhdHVzCi1hY3BpX3V0X3Nob3J0X2RpdmlkZShhY3BpX2ludGVnZXIgaW5fZGl2aWRlbmQsCi0JCSAgICAgdTMyIGRpdmlzb3IsCi0JCSAgICAgYWNwaV9pbnRlZ2VyICogb3V0X3F1b3RpZW50LCB1MzIgKiBvdXRfcmVtYWluZGVyKTsKK2FjcGlfdXRfc2hvcnRfZGl2aWRlKHU2NCBpbl9kaXZpZGVuZCwKKwkJICAgICB1MzIgZGl2aXNvciwgdTY0ICpvdXRfcXVvdGllbnQsIHUzMiAqb3V0X3JlbWFpbmRlcik7CiAKIC8qCiAgKiB1dG1pc2MKQEAgLTQ3NCw4ICs0NzEsNyBAQAogCiB1OCBhY3BpX3V0X3ZhbGlkX2FjcGlfY2hhcihjaGFyIGNoYXJhY3RlciwgdTMyIHBvc2l0aW9uKTsKIAotYWNwaV9zdGF0dXMKLWFjcGlfdXRfc3RydG91bDY0KGNoYXIgKnN0cmluZywgdTMyIGJhc2UsIGFjcGlfaW50ZWdlciAqIHJldF9pbnRlZ2VyKTsKK2FjcGlfc3RhdHVzIGFjcGlfdXRfc3RydG91bDY0KGNoYXIgKnN0cmluZywgdTMyIGJhc2UsIHU2NCAqIHJldF9pbnRlZ2VyKTsKIAogdm9pZCBBQ1BJX0lOVEVSTkFMX1ZBUl9YRkFDRQogYWNwaV91dF9wcmVkZWZpbmVkX3dhcm5pbmcoY29uc3QgY2hhciAqbW9kdWxlX25hbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FtbGNvZGUuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1sY29kZS5oCmluZGV4IDQ5NDAyNDkuLjFmNDg0YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1sY29kZS5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1sY29kZS5oCkBAIC03LDcgKzcsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hbWxyZXNyYy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hbWxyZXNyYy5oCmluZGV4IDdiMDcwZTQuLjBlNTc5OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1scmVzcmMuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FtbHJlc3JjLmgKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzZmllbGQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNmaWVsZC5jCmluZGV4IDU0YTIyNWUuLmJiMTM4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNmaWVsZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNmaWVsZC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjIwLDcgKzIyMCw3IEBACiAJCQl1bmlvbiBhY3BpX3BhcnNlX29iamVjdCAqYXJnKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlhY3BpX2ludGVnZXIgcG9zaXRpb247CisJdTY0IHBvc2l0aW9uOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfZ2V0X2ZpZWxkX25hbWVzLCBpbmZvKTsKIApAQCAtMjQwLDggKzI0MCw4IEBACiAJCXN3aXRjaCAoYXJnLT5jb21tb24uYW1sX29wY29kZSkgewogCQljYXNlIEFNTF9JTlRfUkVTRVJWRURGSUVMRF9PUDoKIAotCQkJcG9zaXRpb24gPSAoYWNwaV9pbnRlZ2VyKSBpbmZvLT5maWVsZF9iaXRfcG9zaXRpb24KLQkJCSAgICArIChhY3BpX2ludGVnZXIpIGFyZy0+Y29tbW9uLnZhbHVlLnNpemU7CisJCQlwb3NpdGlvbiA9ICh1NjQpIGluZm8tPmZpZWxkX2JpdF9wb3NpdGlvbgorCQkJICAgICsgKHU2NCkgYXJnLT5jb21tb24udmFsdWUuc2l6ZTsKIAogCQkJaWYgKHBvc2l0aW9uID4gQUNQSV9VSU5UMzJfTUFYKSB7CiAJCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKQEAgLTMwNSw4ICszMDUsOCBAQAogCiAJCQkvKiBLZWVwIHRyYWNrIG9mIGJpdCBwb3NpdGlvbiBmb3IgdGhlIG5leHQgZmllbGQgKi8KIAotCQkJcG9zaXRpb24gPSAoYWNwaV9pbnRlZ2VyKSBpbmZvLT5maWVsZF9iaXRfcG9zaXRpb24KLQkJCSAgICArIChhY3BpX2ludGVnZXIpIGFyZy0+Y29tbW9uLnZhbHVlLnNpemU7CisJCQlwb3NpdGlvbiA9ICh1NjQpIGluZm8tPmZpZWxkX2JpdF9wb3NpdGlvbgorCQkJICAgICsgKHU2NCkgYXJnLT5jb21tb24udmFsdWUuc2l6ZTsKIAogCQkJaWYgKHBvc2l0aW9uID4gQUNQSV9VSU5UMzJfTUFYKSB7CiAJCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNpbml0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzaW5pdC5jCmluZGV4IGYyM2ZhMGIuLmFiZTE0MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc2luaXQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtZXRob2QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtZXRob2QuYwppbmRleCBlNzg2ZjlmLi43MjEwMzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbWV0aG9kLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc21ldGhvZC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc210aGRhdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc210aGRhdC5jCmluZGV4IDBiYTE5ZjguLmNjMzQzYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtdGhkYXQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbXRoZGF0LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc29iamVjdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc29iamVjdC5jCmluZGV4IDliYzFiYTAuLjg5MWUwOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvYmplY3QuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb2JqZWN0LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02ODQsNyArNjg0LDcgQEAKIAogCQkJY2FzZSBBTUxfT05FU19PUDoKIAotCQkJCW9ial9kZXNjLT5pbnRlZ2VyLnZhbHVlID0gQUNQSV9JTlRFR0VSX01BWDsKKwkJCQlvYmpfZGVzYy0+aW50ZWdlci52YWx1ZSA9IEFDUElfVUlOVDY0X01BWDsKIAogCQkJCS8qIFRydW5jYXRlIHZhbHVlIGlmIHdlIGFyZSBleGVjdXRpbmcgZnJvbSBhIDMyLWJpdCBBQ1BJIHRhYmxlICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvcGNvZGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvcGNvZGUuYwppbmRleCBiNzk5NzhmLi5iZjk4MGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb3Bjb2RlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc29wY29kZS5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzdXRpbHMuYwppbmRleCBkZmExMDQxLi4zMDZjNjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzdXRpbHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2V4ZWMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3ZXhlYy5jCmluZGV4IGYwMjgwODUuLjZiNzZjNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3ZXhlYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3ZXhlYy5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dsb2FkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2xvYWQuYwppbmRleCBiNDA1MTNkLi4xNDBhOWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2xvYWQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2xvYWQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3c2NvcGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3c2NvcGUuYwppbmRleCA5MDg2NDVlLi5kMWU3MDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd3Njb3BlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dzY29wZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dzdGF0ZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dzdGF0ZS5jCmluZGV4IGU0NmM4MjEuLjA1MGRmODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3c3RhdGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd3N0YXRlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2ZXZlbnQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZldmVudC5jCmluZGV4IGNkNTVjNzcuLmMxZTZmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZldmVudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZldmVudC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jCmluZGV4IGFmYWNmNDQuLjgzN2RlNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01NCw1NCArNTQsOSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX2V2X3NldF9ncGVfdHlwZQotICoKLSAqIFBBUkFNRVRFUlM6ICBncGVfZXZlbnRfaW5mbyAgICAgICAgICAtIEdQRSB0byBzZXQKLSAqICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgICAtIE5ldyB0eXBlCi0gKgotICogUkVUVVJOOiAgICAgIFN0YXR1cwotICoKLSAqIERFU0NSSVBUSU9OOiBTZXRzIHRoZSBuZXcgdHlwZSBmb3IgdGhlIEdQRSAod2FrZSwgcnVuLCBvciB3YWtlL3J1bikKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1hY3BpX3N0YXR1cwotYWNwaV9ldl9zZXRfZ3BlX3R5cGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvLCB1OCB0eXBlKQotewotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfc2V0X2dwZV90eXBlKTsKLQotCS8qIFZhbGlkYXRlIHR5cGUgYW5kIHVwZGF0ZSByZWdpc3RlciBlbmFibGUgbWFza3MgKi8KLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgQUNQSV9HUEVfVFlQRV9XQUtFOgotCWNhc2UgQUNQSV9HUEVfVFlQRV9SVU5USU1FOgotCWNhc2UgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTjoKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7Ci0JfQotCi0JLyogRGlzYWJsZSB0aGUgR1BFIGlmIGN1cnJlbnRseSBlbmFibGVkICovCi0KLQlzdGF0dXMgPSBhY3BpX2V2X2Rpc2FibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKLQotCS8qIENsZWFyIHRoZSB0eXBlIGJpdHMgYW5kIGluc2VydCB0aGUgbmV3IFR5cGUgKi8KLQotCWdwZV9ldmVudF9pbmZvLT5mbGFncyAmPSB+QUNQSV9HUEVfVFlQRV9NQVNLOwotCWdwZV9ldmVudF9pbmZvLT5mbGFncyB8PSB0eXBlOwotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzCiAgKgogICogUEFSQU1FVEVSUzogIGdwZV9ldmVudF9pbmZvICAgICAgICAgIC0gR1BFIHRvIHVwZGF0ZQotICogICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgIC0gV2hhdCB0byBkbzogQUNQSV9HUEVfRElTQUJMRSBvcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSV9HUEVfRU5BQkxFCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKQEAgLTExMCw4ICs2NSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBhY3BpX3N0YXR1cwotYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sCi0JCQkJdTggdHlwZSkKK2FjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3Moc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvKQogewogCXN0cnVjdCBhY3BpX2dwZV9yZWdpc3Rlcl9pbmZvICpncGVfcmVnaXN0ZXJfaW5mbzsKIAl1OCByZWdpc3Rlcl9iaXQ7CkBAIC0xMjcsMzcgKzgxLDE0IEBACiAJICAgICgxIDw8CiAJICAgICAoZ3BlX2V2ZW50X2luZm8tPmdwZV9udW1iZXIgLSBncGVfcmVnaXN0ZXJfaW5mby0+YmFzZV9ncGVfbnVtYmVyKSk7CiAKLQkvKiAxKSBEaXNhYmxlIGNhc2UuIFNpbXBseSBjbGVhciBhbGwgZW5hYmxlIGJpdHMgKi8KKwlBQ1BJX0NMRUFSX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl93YWtlLCByZWdpc3Rlcl9iaXQpOworCUFDUElfQ0xFQVJfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwgcmVnaXN0ZXJfYml0KTsKIAotCWlmICh0eXBlID09IEFDUElfR1BFX0RJU0FCTEUpIHsKLQkJQUNQSV9DTEVBUl9CSVQoZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9mb3Jfd2FrZSwKLQkJCSAgICAgICByZWdpc3Rlcl9iaXQpOwotCQlBQ1BJX0NMRUFSX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl9ydW4sIHJlZ2lzdGVyX2JpdCk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7Ci0JfQotCi0JLyogMikgRW5hYmxlIGNhc2UuIFNldC9DbGVhciB0aGUgYXBwcm9wcmlhdGUgZW5hYmxlIGJpdHMgKi8KLQotCXN3aXRjaCAoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfVFlQRV9NQVNLKSB7Ci0JY2FzZSBBQ1BJX0dQRV9UWVBFX1dBS0U6Ci0JCUFDUElfU0VUX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl93YWtlLCByZWdpc3Rlcl9iaXQpOwotCQlBQ1BJX0NMRUFSX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl9ydW4sIHJlZ2lzdGVyX2JpdCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBBQ1BJX0dQRV9UWVBFX1JVTlRJTUU6Ci0JCUFDUElfQ0xFQVJfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3dha2UsCi0JCQkgICAgICAgcmVnaXN0ZXJfYml0KTsKKwlpZiAoZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQpCiAJCUFDUElfU0VUX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl9ydW4sIHJlZ2lzdGVyX2JpdCk7Ci0JCWJyZWFrOwogCi0JY2FzZSBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOOgorCWlmIChncGVfZXZlbnRfaW5mby0+d2FrZXVwX2NvdW50KQogCQlBQ1BJX1NFVF9CSVQoZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9mb3Jfd2FrZSwgcmVnaXN0ZXJfYml0KTsKLQkJQUNQSV9TRVRfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwgcmVnaXN0ZXJfYml0KTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7Ci0JfQogCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KQEAgLTE2Nyw4ICs5OCw2IEBACiAgKiBGVU5DVElPTjogICAgYWNwaV9ldl9lbmFibGVfZ3BlCiAgKgogICogUEFSQU1FVEVSUzogIGdwZV9ldmVudF9pbmZvICAgICAgICAgIC0gR1BFIHRvIGVuYWJsZQotICogICAgICAgICAgICAgIHdyaXRlX3RvX2hhcmR3YXJlICAgICAgIC0gRW5hYmxlIG5vdywgb3IganVzdCBtYXJrIGRhdGEgc3RydWN0cwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdBS0UgR1BFcyBzaG91bGQgYmUgZGVmZXJyZWQpCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKQEAgLTE3Niw5ICsxMDUsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWFjcGlfc3RhdHVzCi1hY3BpX2V2X2VuYWJsZV9ncGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvLAotCQkgICB1OCB3cml0ZV90b19oYXJkd2FyZSkKK2FjcGlfc3RhdHVzIGFjcGlfZXZfZW5hYmxlX2dwZShzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8pCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCkBAIC0xODYsNDcgKzExMywyMCBAQAogCiAJLyogTWFrZSBzdXJlIEhXIGVuYWJsZSBtYXNrcyBhcmUgdXBkYXRlZCAqLwogCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbywgQUNQSV9HUEVfRU5BQkxFKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwlzdGF0dXMgPSBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KIAogCS8qIE1hcmsgd2FrZS1lbmFibGVkIG9yIEhXIGVuYWJsZSwgb3IgYm90aCAqLwogCi0Jc3dpdGNoIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9UWVBFX01BU0spIHsKLQljYXNlIEFDUElfR1BFX1RZUEVfV0FLRToKKwlpZiAoZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQpIHsKKwkJLyogQ2xlYXIgdGhlIEdQRSAob2Ygc3RhbGUgZXZlbnRzKSwgdGhlbiBlbmFibGUgaXQgKi8KKwkJc3RhdHVzID0gYWNwaV9od19jbGVhcl9ncGUoZ3BlX2V2ZW50X2luZm8pOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAotCQlBQ1BJX1NFVF9CSVQoZ3BlX2V2ZW50X2luZm8tPmZsYWdzLCBBQ1BJX0dQRV9XQUtFX0VOQUJMRUQpOwotCQlicmVhazsKLQotCWNhc2UgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTjoKLQotCQlBQ1BJX1NFVF9CSVQoZ3BlX2V2ZW50X2luZm8tPmZsYWdzLCBBQ1BJX0dQRV9XQUtFX0VOQUJMRUQpOwotCi0JCS8qbGludCAtZmFsbHRocm91Z2ggKi8KLQotCWNhc2UgQUNQSV9HUEVfVFlQRV9SVU5USU1FOgotCi0JCUFDUElfU0VUX0JJVChncGVfZXZlbnRfaW5mby0+ZmxhZ3MsIEFDUElfR1BFX1JVTl9FTkFCTEVEKTsKLQotCQlpZiAod3JpdGVfdG9faGFyZHdhcmUpIHsKLQotCQkJLyogQ2xlYXIgdGhlIEdQRSAob2Ygc3RhbGUgZXZlbnRzKSwgdGhlbiBlbmFibGUgaXQgKi8KLQotCQkJc3RhdHVzID0gYWNwaV9od19jbGVhcl9ncGUoZ3BlX2V2ZW50X2luZm8pOwotCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JCQl9Ci0KLQkJCS8qIEVuYWJsZSB0aGUgcmVxdWVzdGVkIHJ1bnRpbWUgR1BFICovCi0KLQkJCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGVfZ3BlX2VuYWJsZV9yZWcoZ3BlX2V2ZW50X2luZm8pOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOworCQkvKiBFbmFibGUgdGhlIHJlcXVlc3RlZCBydW50aW1lIEdQRSAqLworCQlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlX2dwZV9lbmFibGVfcmVnKGdwZV9ldmVudF9pbmZvKTsKIAl9CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpAQCAtMjUyLDM0ICsxNTIsOSBAQAogCiAJLyogTWFrZSBzdXJlIEhXIGVuYWJsZSBtYXNrcyBhcmUgdXBkYXRlZCAqLwogCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbywgQUNQSV9HUEVfRElTQUJMRSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJc3RhdHVzID0gYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbyk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQl9Ci0KLQkvKiBDbGVhciB0aGUgYXBwcm9wcmlhdGUgZW5hYmxlZCBmbGFncyBmb3IgdGhpcyBHUEUgKi8KLQotCXN3aXRjaCAoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfVFlQRV9NQVNLKSB7Ci0JY2FzZSBBQ1BJX0dQRV9UWVBFX1dBS0U6Ci0JCUFDUElfQ0xFQVJfQklUKGdwZV9ldmVudF9pbmZvLT5mbGFncywgQUNQSV9HUEVfV0FLRV9FTkFCTEVEKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFDUElfR1BFX1RZUEVfV0FLRV9SVU46Ci0JCUFDUElfQ0xFQVJfQklUKGdwZV9ldmVudF9pbmZvLT5mbGFncywgQUNQSV9HUEVfV0FLRV9FTkFCTEVEKTsKLQotCQkvKiBmYWxsdGhyb3VnaCAqLwotCi0JY2FzZSBBQ1BJX0dQRV9UWVBFX1JVTlRJTUU6Ci0KLQkJLyogRGlzYWJsZSB0aGUgcmVxdWVzdGVkIHJ1bnRpbWUgR1BFICovCi0KLQkJQUNQSV9DTEVBUl9CSVQoZ3BlX2V2ZW50X2luZm8tPmZsYWdzLCBBQ1BJX0dQRV9SVU5fRU5BQkxFRCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQogCiAJLyoKIAkgKiBFdmVuIGlmIHdlIGRvbid0IGtub3cgdGhlIEdQRSB0eXBlLCBtYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMKQEAgLTUyMSw3ICszOTYsNyBAQAogCiAJLyogU2V0IHRoZSBHUEUgZmxhZ3MgZm9yIHJldHVybiB0byBlbmFibGVkIHN0YXRlICovCiAKLQkodm9pZClhY3BpX2V2X2VuYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8sIEZBTFNFKTsKKwkodm9pZClhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvKTsKIAogCS8qCiAJICogVGFrZSBhIHNuYXBzaG90IG9mIHRoZSBHUEUgaW5mbyBmb3IgdGhpcyBsZXZlbCAtIHdlIGNvcHkgdGhlIGluZm8gdG8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYwppbmRleCAyNDc5MjA5Li5mZWY3MjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlYmxrLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjU4LDcgKzI1OCw2IEBACiAJdTMyIGdwZV9udW1iZXI7CiAJY2hhciBuYW1lW0FDUElfTkFNRV9TSVpFICsgMV07CiAJdTggdHlwZTsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X3NhdmVfbWV0aG9kX2luZm8pOwogCkBAIC0zMjUsMjYgKzMyNCwyMCBAQAogCiAJLyoKIAkgKiBOb3cgd2UgY2FuIGFkZCB0aGlzIGluZm9ybWF0aW9uIHRvIHRoZSBncGVfZXZlbnRfaW5mbyBibG9jayBmb3IgdXNlCi0JICogZHVyaW5nIGRpc3BhdGNoIG9mIHRoaXMgR1BFLiBEZWZhdWx0IHR5cGUgaXMgUlVOVElNRSwgYWx0aG91Z2ggdGhpcyBtYXkKLQkgKiBjaGFuZ2Ugd2hlbiB0aGUgX1BSVyBtZXRob2RzIGFyZSBleGVjdXRlZCBsYXRlci4KKwkgKiBkdXJpbmcgZGlzcGF0Y2ggb2YgdGhpcyBHUEUuCiAJICovCiAJZ3BlX2V2ZW50X2luZm8gPQogCSAgICAmZ3BlX2Jsb2NrLT5ldmVudF9pbmZvW2dwZV9udW1iZXIgLSBncGVfYmxvY2stPmJsb2NrX2Jhc2VfbnVtYmVyXTsKIAotCWdwZV9ldmVudF9pbmZvLT5mbGFncyA9ICh1OCkKLQkgICAgKHR5cGUgfCBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QgfCBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOworCWdwZV9ldmVudF9pbmZvLT5mbGFncyA9ICh1OCkgKHR5cGUgfCBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QpOwogCiAJZ3BlX2V2ZW50X2luZm8tPmRpc3BhdGNoLm1ldGhvZF9ub2RlID0KIAkgICAgKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICopb2JqX2hhbmRsZTsKIAotCS8qIFVwZGF0ZSBlbmFibGUgbWFzaywgYnV0IGRvbid0IGVuYWJsZSB0aGUgSFcgR1BFIGFzIG9mIHlldCAqLwotCi0Jc3RhdHVzID0gYWNwaV9ldl9lbmFibGVfZ3BlKGdwZV9ldmVudF9pbmZvLCBGQUxTRSk7Ci0KIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0xPQUQsCiAJCQkgICJSZWdpc3RlcmVkIEdQRSBtZXRob2QgJXMgYXMgR1BFIG51bWJlciAweCUuMlhcbiIsCiAJCQkgIG5hbWUsIGdwZV9udW1iZXIpKTsKLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDU0LDIwICs0NDcsNyBAQAogCQkJCQkJCWdwZV9ibG9jay0+CiAJCQkJCQkJYmxvY2tfYmFzZV9udW1iZXJdOwogCi0JCS8qIE1hcmsgR1BFIGZvciBXQUtFLU9OTFkgYnV0IFdBS0VfRElTQUJMRUQgKi8KLQotCQlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJj0KLQkJICAgIH4oQUNQSV9HUEVfV0FLRV9FTkFCTEVEIHwgQUNQSV9HUEVfUlVOX0VOQUJMRUQpOwotCi0JCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2V2X3NldF9ncGVfdHlwZShncGVfZXZlbnRfaW5mbywgQUNQSV9HUEVfVFlQRV9XQUtFKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlnb3RvIGNsZWFudXA7Ci0JCX0KLQotCQlzdGF0dXMgPQotCQkgICAgYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbywKLQkJCQkJCSAgICBBQ1BJX0dQRV9ESVNBQkxFKTsKKwkJZ3BlX2V2ZW50X2luZm8tPmZsYWdzIHw9IEFDUElfR1BFX0NBTl9XQUtFOwogCX0KIAogICAgICAgY2xlYW51cDoKQEAgLTk4OSw3ICs5NjksNiBAQAogYWNwaV9ldl9pbml0aWFsaXplX2dwZV9ibG9jayhzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqZ3BlX2RldmljZSwKIAkJCSAgICAgc3RydWN0IGFjcGlfZ3BlX2Jsb2NrX2luZm8gKmdwZV9ibG9jaykKIHsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOwogCXN0cnVjdCBhY3BpX2dwZV93YWxrX2luZm8gZ3BlX2luZm87CiAJdTMyIHdha2VfZ3BlX2NvdW50OwpAQCAtMTAxOSw0MiArOTk4LDUwIEBACiAJCWdwZV9pbmZvLmdwZV9ibG9jayA9IGdwZV9ibG9jazsKIAkJZ3BlX2luZm8uZ3BlX2RldmljZSA9IGdwZV9kZXZpY2U7CiAKLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfbnNfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgQUNQSV9ST09UX09CSkVDVCwKKwkJYWNwaV9uc193YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfREVWSUNFLCBBQ1BJX1JPT1RfT0JKRUNULAogCQkJCQkgICBBQ1BJX1VJTlQzMl9NQVgsIEFDUElfTlNfV0FMS19VTkxPQ0ssCiAJCQkJCSAgIGFjcGlfZXZfbWF0Y2hfcHJ3X2FuZF9ncGUsIE5VTEwsCiAJCQkJCSAgICZncGVfaW5mbywgTlVMTCk7CiAJfQogCiAJLyoKLQkgKiBFbmFibGUgYWxsIEdQRXMgaW4gdGhpcyBibG9jayB0aGF0IGhhdmUgdGhlc2UgYXR0cmlidXRlczoKLQkgKiAxKSBhcmUgInJ1bnRpbWUiIG9yICJydW4vd2FrZSIgR1BFcywgYW5kCi0JICogMikgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgX0x4eCBvciBfRXh4IG1ldGhvZAotCSAqCi0JICogQW55IG90aGVyIEdQRXMgd2l0aGluIHRoaXMgYmxvY2sgbXVzdCBiZSBlbmFibGVkIHZpYSB0aGUKLQkgKiBhY3BpX2VuYWJsZV9ncGUoKSBleHRlcm5hbCBpbnRlcmZhY2UuCisJICogRW5hYmxlIGFsbCBHUEVzIHRoYXQgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgbWV0aG9kIGFuZCBhcmVuJ3QKKwkgKiBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgd2FrZXVwcy4gQW55IG90aGVyIEdQRXMgd2l0aGluIHRoaXMgYmxvY2sKKwkgKiBtdXN0IGJlIGVuYWJsZWQgdmlhIHRoZSBhY3BpX2VuYWJsZV9ncGUoKSBpbnRlcmZhY2UuCiAJICovCiAJd2FrZV9ncGVfY291bnQgPSAwOwogCWdwZV9lbmFibGVkX2NvdW50ID0gMDsKKwlpZiAoZ3BlX2RldmljZSA9PSBhY3BpX2dibF9mYWR0X2dwZV9kZXZpY2UpCisJCWdwZV9kZXZpY2UgPSBOVUxMOwogCiAJZm9yIChpID0gMDsgaSA8IGdwZV9ibG9jay0+cmVnaXN0ZXJfY291bnQ7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisJCWZvciAoaiA9IDA7IGogPCBBQ1BJX0dQRV9SRUdJU1RFUl9XSURUSDsgaisrKSB7CisJCQlhY3BpX3N0YXR1cyBzdGF0dXM7CisJCQlhY3BpX3NpemUgZ3BlX2luZGV4OworCQkJaW50IGdwZV9udW1iZXI7CiAKIAkJCS8qIEdldCB0aGUgaW5mbyBibG9jayBmb3IgdGhpcyBwYXJ0aWN1bGFyIEdQRSAqLworCQkJZ3BlX2luZGV4ID0gKGFjcGlfc2l6ZSlpICogQUNQSV9HUEVfUkVHSVNURVJfV0lEVEggKyBqOworCQkJZ3BlX2V2ZW50X2luZm8gPSAmZ3BlX2Jsb2NrLT5ldmVudF9pbmZvW2dwZV9pbmRleF07CiAKLQkJCWdwZV9ldmVudF9pbmZvID0gJmdwZV9ibG9jay0+ZXZlbnRfaW5mb1soKGFjcGlfc2l6ZSkgaSAqCi0JCQkJCQkJCSBBQ1BJX0dQRV9SRUdJU1RFUl9XSURUSCkKLQkJCQkJCQkJKyBqXTsKLQotCQkJaWYgKCgoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfRElTUEFUQ0hfTUFTSykgPT0KLQkJCSAgICAgQUNQSV9HUEVfRElTUEFUQ0hfTUVUSE9EKSAmJgotCQkJICAgIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpKSB7Ci0JCQkJZ3BlX2VuYWJsZWRfY291bnQrKzsKLQkJCX0KLQotCQkJaWYgKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX1RZUEVfV0FLRSkgeworCQkJaWYgKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0NBTl9XQUtFKSB7CiAJCQkJd2FrZV9ncGVfY291bnQrKzsKKwkJCQlpZiAoYWNwaV9nYmxfbGVhdmVfd2FrZV9ncGVzX2Rpc2FibGVkKQorCQkJCQljb250aW51ZTsKIAkJCX0KKworCQkJaWYgKCEoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfRElTUEFUQ0hfTUVUSE9EKSkKKwkJCQljb250aW51ZTsKKworCQkJZ3BlX251bWJlciA9IGdwZV9pbmRleCArIGdwZV9ibG9jay0+YmxvY2tfYmFzZV9udW1iZXI7CisJCQlzdGF0dXMgPSBhY3BpX2VuYWJsZV9ncGUoZ3BlX2RldmljZSwgZ3BlX251bWJlciwKKwkJCQkJCUFDUElfR1BFX1RZUEVfUlVOVElNRSk7CisJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKKwkJCQkJCSJGYWlsZWQgdG8gZW5hYmxlIEdQRSAlMDJYXG4iLAorCQkJCQkJZ3BlX251bWJlcikpOworCQkJZWxzZQorCQkJCWdwZV9lbmFibGVkX2NvdW50Kys7CiAJCX0KIAl9CiAKQEAgLTEwNjIsMTUgKzEwNDksNyBAQAogCQkJICAiRm91bmQgJXUgV2FrZSwgRW5hYmxlZCAldSBSdW50aW1lIEdQRXMgaW4gdGhpcyBibG9ja1xuIiwKIAkJCSAgd2FrZV9ncGVfY291bnQsIGdwZV9lbmFibGVkX2NvdW50KSk7CiAKLQkvKiBFbmFibGUgYWxsIHZhbGlkIHJ1bnRpbWUgR1BFcyBmb3VuZCBhYm92ZSAqLwotCi0Jc3RhdHVzID0gYWNwaV9od19lbmFibGVfcnVudGltZV9ncGVfYmxvY2soTlVMTCwgZ3BlX2Jsb2NrLCBOVUxMKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkNvdWxkIG5vdCBlbmFibGUgR1BFcyBpbiBHcGVCbG9jayAlcCIsCi0JCQkgICAgZ3BlX2Jsb2NrKSk7Ci0JfQotCi0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZtaXNjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2bWlzYy5jCmluZGV4IGNlMjI0ZTEuLjlhM2NiNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZtaXNjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldm1pc2MuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI1OSw5ICsyNTksMTUgQEAKIAogCWhhbmRsZXJfb2JqID0gbm90aWZ5X2luZm8tPm5vdGlmeS5oYW5kbGVyX29iajsKIAlpZiAoaGFuZGxlcl9vYmopIHsKLQkJaGFuZGxlcl9vYmotPm5vdGlmeS5oYW5kbGVyKG5vdGlmeV9pbmZvLT5ub3RpZnkubm9kZSwKLQkJCQkJICAgIG5vdGlmeV9pbmZvLT5ub3RpZnkudmFsdWUsCi0JCQkJCSAgICBoYW5kbGVyX29iai0+bm90aWZ5LmNvbnRleHQpOworCQlzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKm5vdGlmaWVyOworCisJCW5vdGlmaWVyID0gJmhhbmRsZXJfb2JqLT5ub3RpZnk7CisJCXdoaWxlIChub3RpZmllcikgeworCQkJbm90aWZpZXItPmhhbmRsZXIobm90aWZ5X2luZm8tPm5vdGlmeS5ub2RlLAorCQkJCQkgIG5vdGlmeV9pbmZvLT5ub3RpZnkudmFsdWUsCisJCQkJCSAgbm90aWZpZXItPmNvbnRleHQpOworCQkJbm90aWZpZXIgPSBub3RpZmllci0+bmV4dDsKKwkJfQogCX0KIAogCS8qIEFsbCBkb25lIHdpdGggdGhlIGluZm8gb2JqZWN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmVnaW9uLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmVnaW9uLmMKaW5kZXggNTMzNmQ5MS4uOThmZDIxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJlZ2lvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZWdpb24uYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMyOSw3ICszMjksNyBAQAogICogICAgICAgICAgICAgIHJlZ2lvbl9vZmZzZXQgICAgICAgLSBXaGVyZSBpbiB0aGUgcmVnaW9uIHRvIHJlYWQgb3Igd3JpdGUKICAqICAgICAgICAgICAgICBiaXRfd2lkdGggICAgICAgICAgIC0gRmllbGQgd2lkdGggaW4gYml0cyAoOCwgMTYsIDMyLCBvciA2NCkKICAqICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byBpbiBvciBvdXQgdmFsdWUsIG11c3QgYmUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbCA2NC1iaXQgYWNwaV9pbnRlZ2VyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZnVsbCA2NC1iaXQgaW50ZWdlcgogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCkBAIC0zNDEsOCArMzQxLDcgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX2V2X2FkZHJlc3Nfc3BhY2VfZGlzcGF0Y2godW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmVnaW9uX29iaiwKIAkJCSAgICAgICB1MzIgZnVuY3Rpb24sCi0JCQkgICAgICAgdTMyIHJlZ2lvbl9vZmZzZXQsCi0JCQkgICAgICAgdTMyIGJpdF93aWR0aCwgYWNwaV9pbnRlZ2VyICogdmFsdWUpCisJCQkgICAgICAgdTMyIHJlZ2lvbl9vZmZzZXQsIHUzMiBiaXRfd2lkdGgsIHU2NCAqdmFsdWUpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfYWRyX3NwYWNlX2hhbmRsZXIgaGFuZGxlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZ25pbmkuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZ25pbmkuYwppbmRleCBmZjE2ODA1Li4yZTNiMDMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmduaW5pLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJnbmluaS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTY4LDcgKzE2OCw3IEBACiAJCQkJdm9pZCAqaGFuZGxlcl9jb250ZXh0LCB2b2lkICoqcmVnaW9uX2NvbnRleHQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0JYWNwaV9pbnRlZ2VyIHBjaV92YWx1ZTsKKwl1NjQgcGNpX3ZhbHVlOwogCXN0cnVjdCBhY3BpX3BjaV9pZCAqcGNpX2lkID0gKnJlZ2lvbl9jb250ZXh0OwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKmhhbmRsZXJfb2JqOwogCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwYXJlbnRfbm9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZzY2kuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZzY2kuYwppbmRleCA1NjdiMzU2Li44ZGZiYWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2c2NpLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnNjaS5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmYWNlLmMKaW5kZXggMmZlMDgwOS4uYjQwNzU3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmYWNlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMTgsNiArMjE4LDcyIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgorICogRlVOQ1RJT046ICAgIGFjcGlfcG9wdWxhdGVfaGFuZGxlcl9vYmplY3QKKyAqCisgKiBQQVJBTUVURVJTOiAgaGFuZGxlcl9vYmogICAgICAgIC0gSGFuZGxlciBvYmplY3QgdG8gcG9wdWxhdGUKKyAqICAgICAgICAgICAgICBoYW5kbGVyX3R5cGUgICAgICAgLSBUaGUgdHlwZSBvZiBoYW5kbGVyOgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSV9TWVNURU1fTk9USUZZOiBzeXN0ZW1faGFuZGxlciAoMDAtN2YpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX0RFVklDRV9OT1RJRlk6IGRyaXZlcl9oYW5kbGVyICg4MC1mZikKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUElfQUxMX05PVElGWTogIGJvdGggc3lzdGVtIGFuZCBkZXZpY2UKKyAqICAgICAgICAgICAgICBoYW5kbGVyICAgICAgICAgICAgLSBBZGRyZXNzIG9mIHRoZSBoYW5kbGVyCisgKiAgICAgICAgICAgICAgY29udGV4dCAgICAgICAgICAgIC0gVmFsdWUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIG9uIGVhY2ggR1BFCisgKiAgICAgICAgICAgICAgbmV4dCAgICAgICAgICAgICAgIC0gQWRkcmVzcyBvZiBhIGhhbmRsZXIgb2JqZWN0IHRvIGxpbmsgdG8KKyAqCisgKiBSRVRVUk46ICAgICAgTm9uZQorICoKKyAqIERFU0NSSVBUSU9OOiBQb3B1bGF0ZSBhIGhhbmRsZXIgb2JqZWN0LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZAorYWNwaV9wb3B1bGF0ZV9oYW5kbGVyX29iamVjdChzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKmhhbmRsZXJfb2JqLAorCQkJICAgICB1MzIgaGFuZGxlcl90eXBlLAorCQkJICAgICBhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIsIHZvaWQgKmNvbnRleHQsCisJCQkgICAgIHN0cnVjdCBhY3BpX29iamVjdF9ub3RpZnlfaGFuZGxlciAqbmV4dCkKK3sKKwloYW5kbGVyX29iai0+aGFuZGxlcl90eXBlID0gaGFuZGxlcl90eXBlOworCWhhbmRsZXJfb2JqLT5oYW5kbGVyID0gaGFuZGxlcjsKKwloYW5kbGVyX29iai0+Y29udGV4dCA9IGNvbnRleHQ7CisJaGFuZGxlcl9vYmotPm5leHQgPSBuZXh0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2FkZF9oYW5kbGVyX29iamVjdAorICoKKyAqIFBBUkFNRVRFUlM6ICBwYXJlbnRfb2JqICAgICAgICAgLSBQYXJlbnQgb2YgdGhlIG5ldyBvYmplY3QKKyAqICAgICAgICAgICAgICBoYW5kbGVyICAgICAgICAgICAgLSBBZGRyZXNzIG9mIHRoZSBoYW5kbGVyCisgKiAgICAgICAgICAgICAgY29udGV4dCAgICAgICAgICAgIC0gVmFsdWUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIG9uIGVhY2ggR1BFCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBDcmVhdGUgYSBuZXcgaGFuZGxlciBvYmplY3QgYW5kIHBvcHVsYXRlIGl0LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfYWRkX2hhbmRsZXJfb2JqZWN0KHN0cnVjdCBhY3BpX29iamVjdF9ub3RpZnlfaGFuZGxlciAqcGFyZW50X29iaiwKKwkJCWFjcGlfbm90aWZ5X2hhbmRsZXIgaGFuZGxlciwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKmhhbmRsZXJfb2JqOworCisJLyogVGhlIHBhcmVudCBtdXN0IG5vdCBiZSBhIGRlZmljZSBub3RpZnkgaGFuZGxlciBvYmplY3QuICovCisJaWYgKHBhcmVudF9vYmotPmhhbmRsZXJfdHlwZSAmIEFDUElfREVWSUNFX05PVElGWSkKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CisKKwloYW5kbGVyX29iaiA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZigqaGFuZGxlcl9vYmopKTsKKwlpZiAoIWhhbmRsZXJfb2JqKQorCQlyZXR1cm4gQUVfTk9fTUVNT1JZOworCisJYWNwaV9wb3B1bGF0ZV9oYW5kbGVyX29iamVjdChoYW5kbGVyX29iaiwKKwkJCQkJQUNQSV9TWVNURU1fTk9USUZZLAorCQkJCQloYW5kbGVyLCBjb250ZXh0LAorCQkJCQlwYXJlbnRfb2JqLT5uZXh0KTsKKwlwYXJlbnRfb2JqLT5uZXh0ID0gaGFuZGxlcl9vYmo7CisKKwlyZXR1cm4gQUVfT0s7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogRlVOQ1RJT046ICAgIGFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcgogICoKICAqIFBBUkFNRVRFUlM6ICBEZXZpY2UgICAgICAgICAgLSBUaGUgZGV2aWNlIGZvciB3aGljaCBub3RpZmllcyB3aWxsIGJlIGhhbmRsZWQKQEAgLTMxNiwxNSArMzgyLDMyIEBACiAJCW9ial9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwogCQlpZiAob2JqX2Rlc2MpIHsKIAotCQkJLyogT2JqZWN0IGV4aXN0cyAtIG1ha2Ugc3VyZSB0aGVyZSdzIG5vIGhhbmRsZXIgKi8KKwkJCS8qIE9iamVjdCBleGlzdHMuICovCiAKLQkJCWlmICgoKGhhbmRsZXJfdHlwZSAmIEFDUElfU1lTVEVNX05PVElGWSkgJiYKLQkJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuc3lzdGVtX25vdGlmeSkgfHwKLQkJCSAgICAoKGhhbmRsZXJfdHlwZSAmIEFDUElfREVWSUNFX05PVElGWSkgJiYKLQkJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuZGV2aWNlX25vdGlmeSkpIHsKKwkJCS8qIEZvciBhIGRldmljZSBub3RpZnksIG1ha2Ugc3VyZSB0aGVyZSdzIG5vIGhhbmRsZXIuICovCisJCQlpZiAoKGhhbmRsZXJfdHlwZSAmIEFDUElfREVWSUNFX05PVElGWSkgJiYKKwkJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuZGV2aWNlX25vdGlmeSkgewogCQkJCXN0YXR1cyA9IEFFX0FMUkVBRFlfRVhJU1RTOwogCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQkJfQorCisJCQkvKiBTeXN0ZW0gbm90aWZpZXMgbWF5IGhhdmUgbW9yZSBoYW5kbGVycyBpbnN0YWxsZWQuICovCisJCQlub3RpZnlfb2JqID0gb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuc3lzdGVtX25vdGlmeTsKKworCQkJaWYgKChoYW5kbGVyX3R5cGUgJiBBQ1BJX1NZU1RFTV9OT1RJRlkpICYmIG5vdGlmeV9vYmopIHsKKwkJCQlzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKnBhcmVudF9vYmo7CisKKwkJCQlpZiAoaGFuZGxlcl90eXBlICYgQUNQSV9ERVZJQ0VfTk9USUZZKSB7CisJCQkJCXN0YXR1cyA9IEFFX0FMUkVBRFlfRVhJU1RTOworCQkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJCQl9CisKKwkJCQlwYXJlbnRfb2JqID0gJm5vdGlmeV9vYmotPm5vdGlmeTsKKwkJCQlzdGF0dXMgPSBhY3BpX2FkZF9oYW5kbGVyX29iamVjdChwYXJlbnRfb2JqLAorCQkJCQkJCQkgaGFuZGxlciwKKwkJCQkJCQkJIGNvbnRleHQpOworCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCQkJfQogCQl9IGVsc2UgewogCQkJLyogQ3JlYXRlIGEgbmV3IG9iamVjdCAqLwogCkBAIC0zNTYsOSArNDM5LDEwIEBACiAJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJfQogCi0JCW5vdGlmeV9vYmotPm5vdGlmeS5ub2RlID0gbm9kZTsKLQkJbm90aWZ5X29iai0+bm90aWZ5LmhhbmRsZXIgPSBoYW5kbGVyOwotCQlub3RpZnlfb2JqLT5ub3RpZnkuY29udGV4dCA9IGNvbnRleHQ7CisJCWFjcGlfcG9wdWxhdGVfaGFuZGxlcl9vYmplY3QoJm5vdGlmeV9vYmotPm5vdGlmeSwKKwkJCQkJCWhhbmRsZXJfdHlwZSwKKwkJCQkJCWhhbmRsZXIsIGNvbnRleHQsCisJCQkJCQlOVUxMKTsKIAogCQlpZiAoaGFuZGxlcl90eXBlICYgQUNQSV9TWVNURU1fTk9USUZZKSB7CiAJCQlvYmpfZGVzYy0+Y29tbW9uX25vdGlmeS5zeXN0ZW1fbm90aWZ5ID0gbm90aWZ5X29iajsKQEAgLTQxOCw2ICs1MDIsMTAgQEAKIAkJZ290byBleGl0OwogCX0KIAorCisJLyogTWFrZSBzdXJlIGFsbCBkZWZlcnJlZCB0YXNrcyBhcmUgY29tcGxldGVkICovCisJYWNwaV9vc193YWl0X2V2ZW50c19jb21wbGV0ZShOVUxMKTsKKwogCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlnb3RvIGV4aXQ7CkBAIC00NDUsMTUgKzUzMyw2IEBACiAJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJfQogCi0JCS8qIE1ha2Ugc3VyZSBhbGwgZGVmZXJyZWQgdGFza3MgYXJlIGNvbXBsZXRlZCAqLwotCi0JCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwotCQlhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKE5VTEwpOwotCQlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQogCQlpZiAoaGFuZGxlcl90eXBlICYgQUNQSV9TWVNURU1fTk9USUZZKSB7CiAJCQlhY3BpX2dibF9zeXN0ZW1fbm90aWZ5Lm5vZGUgPSBOVUxMOwogCQkJYWNwaV9nYmxfc3lzdGVtX25vdGlmeS5oYW5kbGVyID0gTlVMTDsKQEAgLTQ4OCwyOCArNTY3LDYwIEBACiAJCS8qIE9iamVjdCBleGlzdHMgLSBtYWtlIHN1cmUgdGhlcmUncyBhbiBleGlzdGluZyBoYW5kbGVyICovCiAKIAkJaWYgKGhhbmRsZXJfdHlwZSAmIEFDUElfU1lTVEVNX05PVElGWSkgeworCQkJc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyICpoYW5kbGVyX29iajsKKwkJCXN0cnVjdCBhY3BpX29iamVjdF9ub3RpZnlfaGFuZGxlciAqcGFyZW50X29iajsKKwogCQkJbm90aWZ5X29iaiA9IG9ial9kZXNjLT5jb21tb25fbm90aWZ5LnN5c3RlbV9ub3RpZnk7CiAJCQlpZiAoIW5vdGlmeV9vYmopIHsKIAkJCQlzdGF0dXMgPSBBRV9OT1RfRVhJU1Q7CiAJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9CiAKLQkJCWlmIChub3RpZnlfb2JqLT5ub3RpZnkuaGFuZGxlciAhPSBoYW5kbGVyKSB7CisJCQloYW5kbGVyX29iaiA9ICZub3RpZnlfb2JqLT5ub3RpZnk7CisJCQlwYXJlbnRfb2JqID0gTlVMTDsKKwkJCXdoaWxlIChoYW5kbGVyX29iai0+aGFuZGxlciAhPSBoYW5kbGVyKSB7CisJCQkJaWYgKGhhbmRsZXJfb2JqLT5uZXh0KSB7CisJCQkJCXBhcmVudF9vYmogPSBoYW5kbGVyX29iajsKKwkJCQkJaGFuZGxlcl9vYmogPSBoYW5kbGVyX29iai0+bmV4dDsKKwkJCQl9IGVsc2UgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChoYW5kbGVyX29iai0+aGFuZGxlciAhPSBoYW5kbGVyKSB7CiAJCQkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKIAkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJCX0KLQkJCS8qIE1ha2Ugc3VyZSBhbGwgZGVmZXJyZWQgdGFza3MgYXJlIGNvbXBsZXRlZCAqLwogCi0JCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJCWFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUoTlVMTCk7Ci0JCQlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJCWdvdG8gZXhpdDsKKwkJCS8qCisJCQkgKiBSZW1vdmUgdGhlIGhhbmRsZXIuICBUaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgY2FzZXMuCisJCQkgKiBGaXJzdCwgd2UgbWF5IG5lZWQgdG8gcmVtb3ZlIGEgbm9uLWVtYmVkZGVkIG9iamVjdC4KKwkJCSAqIFNlY29uZCwgd2UgbWF5IG5lZWQgdG8gcmVtb3ZlIHRoZSBlbWJlZGRlZCBvYmplY3QncworCQkJICogaGFuZGxlciBkYXRhLCB3aGlsZSBub24tZW1iZWRkZWQgb2JqZWN0cyBleGlzdC4KKwkJCSAqIEZpbmFsbHksIHdlIG1heSBuZWVkIHRvIHJlbW92ZSB0aGUgZW1iZWRkZWQgb2JqZWN0CisJCQkgKiBlbnRpcmVseSBhbG9uZyB3aXRoIGl0cyBjb250YWluZXIuCisJCQkgKi8KKwkJCWlmIChwYXJlbnRfb2JqKSB7CisJCQkJLyogTm9uLWVtYmVkZGVkIG9iamVjdCBpcyBiZWluZyByZW1vdmVkLiAqLworCQkJCXBhcmVudF9vYmotPm5leHQgPSBoYW5kbGVyX29iai0+bmV4dDsKKwkJCQlBQ1BJX0ZSRUUoaGFuZGxlcl9vYmopOworCQkJfSBlbHNlIGlmIChub3RpZnlfb2JqLT5ub3RpZnkubmV4dCkgeworCQkJCS8qCisJCQkJICogVGhlIGhhbmRsZXIgbWF0Y2hlcyB0aGUgZW1iZWRkZWQgb2JqZWN0LCBidXQKKwkJCQkgKiB0aGVyZSBhcmUgbW9yZSBoYW5kbGVyIG9iamVjdHMgaW4gdGhlIGxpc3QuCisJCQkJICogUmVwbGFjZSB0aGUgZW1iZWRkZWQgb2JqZWN0J3MgZGF0YSB3aXRoIHRoZQorCQkJCSAqIGZpcnN0IG5leHQgb2JqZWN0J3MgZGF0YSBhbmQgcmVtb3ZlIHRoYXQKKwkJCQkgKiBvYmplY3QuCisJCQkJICovCisJCQkJcGFyZW50X29iaiA9ICZub3RpZnlfb2JqLT5ub3RpZnk7CisJCQkJaGFuZGxlcl9vYmogPSBub3RpZnlfb2JqLT5ub3RpZnkubmV4dDsKKwkJCQkqcGFyZW50X29iaiA9ICpoYW5kbGVyX29iajsKKwkJCQlBQ1BJX0ZSRUUoaGFuZGxlcl9vYmopOworCQkJfSBlbHNlIHsKKwkJCQkvKiBObyBtb3JlIGhhbmRsZXIgb2JqZWN0cyBpbiB0aGUgbGlzdC4gKi8KKwkJCQlvYmpfZGVzYy0+Y29tbW9uX25vdGlmeS5zeXN0ZW1fbm90aWZ5ID0gTlVMTDsKKwkJCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2Uobm90aWZ5X29iaik7CiAJCQl9Ci0KLQkJCS8qIFJlbW92ZSB0aGUgaGFuZGxlciAqLwotCQkJb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuc3lzdGVtX25vdGlmeSA9IE5VTEw7Ci0JCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2Uobm90aWZ5X29iaik7CiAJCX0KIAogCQlpZiAoaGFuZGxlcl90eXBlICYgQUNQSV9ERVZJQ0VfTk9USUZZKSB7CkBAIC01MjMsMTQgKzYzNCw2IEBACiAJCQkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKIAkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJCX0KLQkJCS8qIE1ha2Ugc3VyZSBhbGwgZGVmZXJyZWQgdGFza3MgYXJlIGNvbXBsZXRlZCAqLwotCi0JCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJCWFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUoTlVMTCk7Ci0JCQlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJCWdvdG8gZXhpdDsKLQkJCX0KIAogCQkJLyogUmVtb3ZlIHRoZSBoYW5kbGVyICovCiAJCQlvYmpfZGVzYy0+Y29tbW9uX25vdGlmeS5kZXZpY2Vfbm90aWZ5ID0gTlVMTDsKQEAgLTYxNywxMyArNzIwLDYgQEAKIAloYW5kbGVyLT5jb250ZXh0ID0gY29udGV4dDsKIAloYW5kbGVyLT5tZXRob2Rfbm9kZSA9IGdwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC5tZXRob2Rfbm9kZTsKIAotCS8qIERpc2FibGUgdGhlIEdQRSBiZWZvcmUgaW5zdGFsbGluZyB0aGUgaGFuZGxlciAqLwotCi0Jc3RhdHVzID0gYWNwaV9ldl9kaXNhYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWdvdG8gdW5sb2NrX2FuZF9leGl0OwotCX0KLQogCS8qIEluc3RhbGwgdGhlIGhhbmRsZXIgKi8KIAogCWZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2spOwpAQCAtNzA3LDEzICs4MDMsNiBAQAogCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAl9CiAKLQkvKiBEaXNhYmxlIHRoZSBHUEUgYmVmb3JlIHJlbW92aW5nIHRoZSBoYW5kbGVyICovCi0KLQlzdGF0dXMgPSBhY3BpX2V2X2Rpc2FibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7Ci0JfQotCiAJLyogTWFrZSBzdXJlIGFsbCBkZWZlcnJlZCB0YXNrcyBhcmUgY29tcGxldGVkICovCiAKIAkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfRVZFTlRTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmV2bnQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmV2bnQuYwppbmRleCBlZWQ3YTM4Li41ZmYzMmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZXZudC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjAxLDY3ICsyMDEsMjUgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9zZXRfZ3BlX3R5cGUKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3NldF9ncGUKICAqCiAgKiBQQVJBTUVURVJTOiAgZ3BlX2RldmljZSAgICAgIC0gUGFyZW50IEdQRSBEZXZpY2UKICAqICAgICAgICAgICAgICBncGVfbnVtYmVyICAgICAgLSBHUEUgbGV2ZWwgd2l0aGluIHRoZSBHUEUgYmxvY2sKLSAqICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgLSBOZXcgR1BFIHR5cGUKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IFNldCB0aGUgdHlwZSBvZiBhbiBpbmRpdmlkdWFsIEdQRQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1hY3BpX3N0YXR1cyBhY3BpX3NldF9ncGVfdHlwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTggdHlwZSkKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87Ci0KLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfc2V0X2dwZV90eXBlKTsKLQotCS8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBHUEUgbnVtYmVyICovCi0KLQlncGVfZXZlbnRfaW5mbyA9IGFjcGlfZXZfZ2V0X2dwZV9ldmVudF9pbmZvKGdwZV9kZXZpY2UsIGdwZV9udW1iZXIpOwotCWlmICghZ3BlX2V2ZW50X2luZm8pIHsKLQkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKLQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7Ci0JfQotCi0JaWYgKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9UWVBFX01BU0spID09IHR5cGUpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKLQl9Ci0KLQkvKiBTZXQgdGhlIG5ldyB0eXBlICh3aWxsIGRpc2FibGUgR1BFIGlmIGN1cnJlbnRseSBlbmFibGVkKSAqLwotCi0Jc3RhdHVzID0gYWNwaV9ldl9zZXRfZ3BlX3R5cGUoZ3BlX2V2ZW50X2luZm8sIHR5cGUpOwotCi0gICAgICB1bmxvY2tfYW5kX2V4aXQ6Ci0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci19Ci0KLUFDUElfRVhQT1JUX1NZTUJPTChhY3BpX3NldF9ncGVfdHlwZSkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9lbmFibGVfZ3BlCi0gKgotICogUEFSQU1FVEVSUzogIGdwZV9kZXZpY2UgICAgICAtIFBhcmVudCBHUEUgRGV2aWNlCi0gKiAgICAgICAgICAgICAgZ3BlX251bWJlciAgICAgIC0gR1BFIGxldmVsIHdpdGhpbiB0aGUgR1BFIGJsb2NrCi0gKiAgICAgICAgICAgICAgRmxhZ3MgICAgICAgICAgIC0gSnVzdCBlbmFibGUsIG9yIGFsc28gd2FrZSBlbmFibGU/CisgKiAgICAgICAgICAgICAgYWN0aW9uICAgICAgICAgIC0gRW5hYmxlIG9yIGRpc2FibGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsZWQgZnJvbSBJU1Igb3Igbm90CiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBFbmFibGUgYW4gQUNQSSBldmVudCAoZ2VuZXJhbCBwdXJwb3NlKQorICogREVTQ1JJUFRJT046IEVuYWJsZSBvciBkaXNhYmxlIGFuIEFDUEkgZXZlbnQgKGdlbmVyYWwgcHVycG9zZSkKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotYWNwaV9zdGF0dXMgYWNwaV9lbmFibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyKQorYWNwaV9zdGF0dXMgYWNwaV9zZXRfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCBhY3Rpb24pCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJYWNwaV9jcHVfZmxhZ3MgZmxhZ3M7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2VuYWJsZV9ncGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9zZXRfZ3BlKTsKIAogCWZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2spOwogCkBAIC0yNzMsMTUgKzIzMSw5MCBAQAogCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAl9CiAKLQkvKiBQZXJmb3JtIHRoZSBlbmFibGUgKi8KKwkvKiBQZXJmb3JtIHRoZSBhY3Rpb24gKi8KIAotCXN0YXR1cyA9IGFjcGlfZXZfZW5hYmxlX2dwZShncGVfZXZlbnRfaW5mbywgVFJVRSk7CisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIEFDUElfR1BFX0VOQUJMRToKKwkJc3RhdHVzID0gYWNwaV9ldl9lbmFibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKKwkJYnJlYWs7CisKKwljYXNlIEFDUElfR1BFX0RJU0FCTEU6CisJCXN0YXR1cyA9IGFjcGlfZXZfZGlzYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIGFjdGlvblxuIikpOworCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOworCQlicmVhazsKKwl9CiAKICAgICAgIHVubG9ja19hbmRfZXhpdDoKIAlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9ncGVfbG9jaywgZmxhZ3MpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9zZXRfZ3BlKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2VuYWJsZV9ncGUKKyAqCisgKiBQQVJBTUVURVJTOiAgZ3BlX2RldmljZSAgICAgIC0gUGFyZW50IEdQRSBEZXZpY2UKKyAqICAgICAgICAgICAgICBncGVfbnVtYmVyICAgICAgLSBHUEUgbGV2ZWwgd2l0aGluIHRoZSBHUEUgYmxvY2sKKyAqICAgICAgICAgICAgICB0eXBlICAgICAgICAgICAgLSBQdXJwb3NlIHRoZSBHUEUgd2lsbCBiZSB1c2VkIGZvcgorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogVGFrZSBhIHJlZmVyZW5jZSB0byBhIEdQRSBhbmQgZW5hYmxlIGl0IGlmIG5lY2Vzc2FyeQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCithY3BpX3N0YXR1cyBhY3BpX2VuYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IHR5cGUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisJYWNwaV9jcHVfZmxhZ3MgZmxhZ3M7CisJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOworCisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2VuYWJsZV9ncGUpOworCisJaWYgKHR5cGUgJiB+QUNQSV9HUEVfVFlQRV9XQUtFX1JVTikKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOworCisJZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9ncGVfbG9jayk7CisKKwkvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgR1BFIG51bWJlciAqLworCisJZ3BlX2V2ZW50X2luZm8gPSBhY3BpX2V2X2dldF9ncGVfZXZlbnRfaW5mbyhncGVfZGV2aWNlLCBncGVfbnVtYmVyKTsKKwlpZiAoIWdwZV9ldmVudF9pbmZvKSB7CisJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CisJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCX0KKworCWlmICh0eXBlICYgQUNQSV9HUEVfVFlQRV9SVU5USU1FKSB7CisJCWlmICgrK2dwZV9ldmVudF9pbmZvLT5ydW50aW1lX2NvdW50ID09IDEpIHsKKwkJCXN0YXR1cyA9IGFjcGlfZXZfZW5hYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7CisJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQkJZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQtLTsKKwkJfQorCX0KKworCWlmICh0eXBlICYgQUNQSV9HUEVfVFlQRV9XQUtFKSB7CisJCWlmICghKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0NBTl9XQUtFKSkgeworCQkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKKwkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCQl9CisKKwkJLyoKKwkJICogV2FrZS11cCBHUEVzIGFyZSBvbmx5IGVuYWJsZWQgcmlnaHQgcHJpb3IgdG8gcHV0dGluZyB0aGUKKwkJICogc3lzdGVtIGludG8gYSBzbGVlcCBzdGF0ZS4KKwkJICovCisJCWlmICgrK2dwZV9ldmVudF9pbmZvLT53YWtldXBfY291bnQgPT0gMSkKKwkJCWFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3MoZ3BlX2V2ZW50X2luZm8pOworCX0KKwordW5sb2NrX2FuZF9leGl0OgorCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Cit9CiBBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9lbmFibGVfZ3BlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjkwLDE1ICszMjMsMTQgQEAKICAqCiAgKiBQQVJBTUVURVJTOiAgZ3BlX2RldmljZSAgICAgIC0gUGFyZW50IEdQRSBEZXZpY2UKICAqICAgICAgICAgICAgICBncGVfbnVtYmVyICAgICAgLSBHUEUgbGV2ZWwgd2l0aGluIHRoZSBHUEUgYmxvY2sKLSAqICAgICAgICAgICAgICBGbGFncyAgICAgICAgICAgLSBKdXN0IGRpc2FibGUsIG9yIGFsc28gd2FrZSBkaXNhYmxlPwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxlZCBmcm9tIElTUiBvciBub3QKKyAqICAgICAgICAgICAgICB0eXBlICAgICAgICAgICAgLSBQdXJwb3NlIHRoZSBHUEUgd29uJ3QgYmUgdXNlZCBmb3IgYW55IG1vcmUKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgotICogREVTQ1JJUFRJT046IERpc2FibGUgYW4gQUNQSSBldmVudCAoZ2VuZXJhbCBwdXJwb3NlKQorICogREVTQ1JJUFRJT046IFJlbGVhc2UgYSByZWZlcmVuY2UgdG8gYSBHUEUgYW5kIGRpc2FibGUgaXQgaWYgbmVjZXNzYXJ5CiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWFjcGlfc3RhdHVzIGFjcGlfZGlzYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIpCithY3BpX3N0YXR1cyBhY3BpX2Rpc2FibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCB0eXBlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOwpAQCAtMzA2LDYgKzMzOCw5IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZGlzYWJsZV9ncGUpOwogCisJaWYgKHR5cGUgJiB+QUNQSV9HUEVfVFlQRV9XQUtFX1JVTikKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOworCiAJZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9ncGVfbG9jayk7CiAJLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIEdQRSBudW1iZXIgKi8KIApAQCAtMzE1LDEzICszNTAsMjQgQEAKIAkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJfQogCi0Jc3RhdHVzID0gYWNwaV9ldl9kaXNhYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7CisJaWYgKCh0eXBlICYgQUNQSV9HUEVfVFlQRV9SVU5USU1FKSAmJiBncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCkgeworCQlpZiAoLS1ncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCA9PSAwKQorCQkJc3RhdHVzID0gYWNwaV9ldl9kaXNhYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7CisJfQorCisJaWYgKCh0eXBlICYgQUNQSV9HUEVfVFlQRV9XQUtFKSAmJiBncGVfZXZlbnRfaW5mby0+d2FrZXVwX2NvdW50KSB7CisJCS8qCisJCSAqIFdha2UtdXAgR1BFcyBhcmUgbm90IGVuYWJsZWQgYWZ0ZXIgbGVhdmluZyBzeXN0ZW0gc2xlZXAKKwkJICogc3RhdGVzLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRpc2FibGUgdGhlbSBoZXJlLgorCQkgKi8KKwkJaWYgKC0tZ3BlX2V2ZW50X2luZm8tPndha2V1cF9jb3VudCA9PSAwKQorCQkJYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbyk7CisJfQogCiB1bmxvY2tfYW5kX2V4aXQ6CiAJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KLQogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZGlzYWJsZV9ncGUpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZyZWduLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZyZWduLmMKaW5kZXggYzk4YWE3Yy4uNTQxY2JjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmcmVnbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZnJlZ24uYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb25maWcuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb25maWcuYwppbmRleCA0NmFkZmE1Li43ZThiM2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29uZmlnLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbmZpZy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjg0LDcgKzI4NCw3IEBACiBhY3BpX2V4X3JlZ2lvbl9yZWFkKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjLCB1MzIgbGVuZ3RoLCB1OCAqYnVmZmVyKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlhY3BpX2ludGVnZXIgdmFsdWU7CisJdTY0IHZhbHVlOwogCXUzMiByZWdpb25fb2Zmc2V0ID0gMDsKIAl1MzIgaTsKIApAQCAtNDkwLDcgKzQ5MCwxMSBAQAogCiAJc3RhdHVzID0gYWNwaV90Yl9hZGRfdGFibGUoJnRhYmxlX2Rlc2MsICZ0YWJsZV9pbmRleCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWdvdG8gY2xlYW51cDsKKworCQkvKiBEZWxldGUgYWxsb2NhdGVkIHRhYmxlIGJ1ZmZlciAqLworCisJCWFjcGlfdGJfZGVsZXRlX3RhYmxlKCZ0YWJsZV9kZXNjKTsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCiAJLyoKQEAgLTUzMywxMyArNTM3LDYgQEAKIAkJCQkJICAgICBhY3BpX2dibF90YWJsZV9oYW5kbGVyX2NvbnRleHQpOwogCX0KIAotICAgICAgY2xlYW51cDoKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQotCQkvKiBEZWxldGUgYWxsb2NhdGVkIHRhYmxlIGJ1ZmZlciAqLwotCi0JCWFjcGlfdGJfZGVsZXRlX3RhYmxlKCZ0YWJsZV9kZXNjKTsKLQl9CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb252cnQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb252cnQuYwppbmRleCA1MWQ1ZjIyLi5iZGE3YWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29udnJ0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbnZydC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTEsOCArNTEsNyBAQAogCiAvKiBMb2NhbCBwcm90b3R5cGVzICovCiBzdGF0aWMgdTMyCi1hY3BpX2V4X2NvbnZlcnRfdG9fYXNjaWkoYWNwaV9pbnRlZ2VyIGludGVnZXIsCi0JCQkgdTE2IGJhc2UsIHU4ICogc3RyaW5nLCB1OCBtYXhfbGVuZ3RoKTsKK2FjcGlfZXhfY29udmVydF90b19hc2NpaSh1NjQgaW50ZWdlciwgdTE2IGJhc2UsIHU4ICpzdHJpbmcsIHU4IG1heF9sZW5ndGgpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTc1LDcgKzc0LDcgQEAKIHsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fZGVzYzsKIAl1OCAqcG9pbnRlcjsKLQlhY3BpX2ludGVnZXIgcmVzdWx0OworCXU2NCByZXN1bHQ7CiAJdTMyIGk7CiAJdTMyIGNvdW50OwogCWFjcGlfc3RhdHVzIHN0YXR1czsKQEAgLTE1NSw3ICsxNTQsNyBAQAogCQkJICogTGl0dGxlIGVuZGlhbiBpcyB1c2VkLCBtZWFuaW5nIHRoYXQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGJ1ZmZlcgogCQkJICogaXMgdGhlIExTQiBvZiB0aGUgaW50ZWdlcgogCQkJICovCi0JCQlyZXN1bHQgfD0gKCgoYWNwaV9pbnRlZ2VyKSBwb2ludGVyW2ldKSA8PCAoaSAqIDgpKTsKKwkJCXJlc3VsdCB8PSAoKCh1NjQpIHBvaW50ZXJbaV0pIDw8IChpICogOCkpOwogCQl9CiAJCWJyZWFrOwogCkBAIC0yODUsMTAgKzI4NCw5IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdTMyCi1hY3BpX2V4X2NvbnZlcnRfdG9fYXNjaWkoYWNwaV9pbnRlZ2VyIGludGVnZXIsCi0JCQkgdTE2IGJhc2UsIHU4ICogc3RyaW5nLCB1OCBkYXRhX3dpZHRoKQorYWNwaV9leF9jb252ZXJ0X3RvX2FzY2lpKHU2NCBpbnRlZ2VyLCB1MTYgYmFzZSwgdTggKnN0cmluZywgdTggZGF0YV93aWR0aCkKIHsKLQlhY3BpX2ludGVnZXIgZGlnaXQ7CisJdTY0IGRpZ2l0OwogCXUzMiBpOwogCXUzMiBqOwogCXUzMiBrID0gMDsKQEAgLTUzMSwxMCArNTI5LDkgQEAKIAkJICogKHNlcGFyYXRlZCBieSBjb21tYXMgb3Igc3BhY2VzKQogCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8IG9ial9kZXNjLT5idWZmZXIubGVuZ3RoOyBpKyspIHsKLQkJCW5ld19idWYgKz0gYWNwaV9leF9jb252ZXJ0X3RvX2FzY2lpKChhY3BpX2ludGVnZXIpCi0JCQkJCQkJICAgIG9ial9kZXNjLT5idWZmZXIuCi0JCQkJCQkJICAgIHBvaW50ZXJbaV0sIGJhc2UsCi0JCQkJCQkJICAgIG5ld19idWYsIDEpOworCQkJbmV3X2J1ZiArPSBhY3BpX2V4X2NvbnZlcnRfdG9fYXNjaWkoKHU2NCkgb2JqX2Rlc2MtPgorCQkJCQkJCSAgICBidWZmZXIucG9pbnRlcltpXSwKKwkJCQkJCQkgICAgYmFzZSwgbmV3X2J1ZiwgMSk7CiAJCQkqbmV3X2J1ZisrID0gc2VwYXJhdG9yOwkvKiBlYWNoIHNlcGFyYXRlZCBieSBhIGNvbW1hIG9yIHNwYWNlICovCiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGNyZWF0ZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGNyZWF0ZS5jCmluZGV4IDAyYjI1ZDIuLjBhYTU3ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjcmVhdGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y3JlYXRlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZHVtcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGR1bXAuYwppbmRleCBkZTM0NDYzLi5kMzlkNDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZHVtcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhkdW1wLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmllbGQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmaWVsZC5jCmluZGV4IDE1ODhhMmQuLjZjNzlmZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmaWVsZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmaWVsZC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTMwLDcgKzEzMCw3IEBACiAJCS8qIENhbGwgdGhlIHJlZ2lvbiBoYW5kbGVyIGZvciB0aGUgcmVhZCAqLwogCiAJCXN0YXR1cyA9IGFjcGlfZXhfYWNjZXNzX3JlZ2lvbihvYmpfZGVzYywgMCwKLQkJCQkJICAgICAgIEFDUElfQ0FTVF9QVFIoYWNwaV9pbnRlZ2VyLAorCQkJCQkgICAgICAgQUNQSV9DQVNUX1BUUih1NjQsCiAJCQkJCQkJICAgICBidWZmZXJfZGVzYy0+CiAJCQkJCQkJICAgICBidWZmZXIucG9pbnRlciksCiAJCQkJCSAgICAgICBmdW5jdGlvbik7CkBAIC0xNDEsNyArMTQxLDcgQEAKIAkvKgogCSAqIEFsbG9jYXRlIGEgYnVmZmVyIGZvciB0aGUgY29udGVudHMgb2YgdGhlIGZpZWxkLgogCSAqCi0JICogSWYgdGhlIGZpZWxkIGlzIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIGFuIGFjcGlfaW50ZWdlciwgY3JlYXRlCisJICogSWYgdGhlIGZpZWxkIGlzIGxhcmdlciB0aGFuIHRoZSBjdXJyZW50IGludGVnZXIgd2lkdGgsIGNyZWF0ZQogCSAqIGEgQlVGRkVSIHRvIGhvbGQgaXQuICBPdGhlcndpc2UsIHVzZSBhbiBJTlRFR0VSLiAgVGhpcyBhbGxvd3MKIAkgKiB0aGUgdXNlIG9mIGFyaXRobWV0aWMgb3BlcmF0b3JzIG9uIHRoZSByZXR1cm5lZCB2YWx1ZSBpZiB0aGUKIAkgKiBmaWVsZCBzaXplIGlzIGVxdWFsIG9yIHNtYWxsZXIgdGhhbiBhbiBJbnRlZ2VyLgpAQCAtMzA2LDggKzMwNiw3IEBACiAJCSAqIHNhbWUgYnVmZmVyKQogCQkgKi8KIAkJc3RhdHVzID0gYWNwaV9leF9hY2Nlc3NfcmVnaW9uKG9ial9kZXNjLCAwLAotCQkJCQkgICAgICAgKGFjcGlfaW50ZWdlciAqKSBidWZmZXIsCi0JCQkJCSAgICAgICBmdW5jdGlvbik7CisJCQkJCSAgICAgICAodTY0ICopIGJ1ZmZlciwgZnVuY3Rpb24pOwogCQlhY3BpX2V4X3JlbGVhc2VfZ2xvYmFsX2xvY2sob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5maWVsZF9mbGFncyk7CiAKIAkJKnJlc3VsdF9kZXNjID0gYnVmZmVyX2Rlc2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmxkaW8uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCmluZGV4IGQ3YjNiNDEuLmY2OGEyMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTUsMTEgKzU1LDEwIEBACiBzdGF0aWMgYWNwaV9zdGF0dXMKIGFjcGlfZXhfZmllbGRfZGF0dW1faW8odW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsCiAJCSAgICAgICB1MzIgZmllbGRfZGF0dW1fYnl0ZV9vZmZzZXQsCi0JCSAgICAgICBhY3BpX2ludGVnZXIgKiB2YWx1ZSwgdTMyIHJlYWRfd3JpdGUpOworCQkgICAgICAgdTY0ICp2YWx1ZSwgdTMyIHJlYWRfd3JpdGUpOwogCiBzdGF0aWMgdTgKLWFjcGlfZXhfcmVnaXN0ZXJfb3ZlcmZsb3codW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsCi0JCQkgIGFjcGlfaW50ZWdlciB2YWx1ZSk7CithY3BpX2V4X3JlZ2lzdGVyX292ZXJmbG93KHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjLCB1NjQgdmFsdWUpOwogCiBzdGF0aWMgYWNwaV9zdGF0dXMKIGFjcGlfZXhfc2V0dXBfcmVnaW9uKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjLApAQCAtMjEyLDcgKzIxMSw3IEBACiAgKiAgICAgICAgICAgICAgZmllbGRfZGF0dW1fYnl0ZV9vZmZzZXQgLSBCeXRlIG9mZnNldCBvZiB0aGlzIGRhdHVtIHdpdGhpbiB0aGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCBmaWVsZAogICogICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICAgICAgIC0gV2hlcmUgdG8gc3RvcmUgdmFsdWUgKG11c3QgYXQgbGVhc3QKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzaXplIG9mIGFjcGlfaW50ZWdlcikKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0IGJpdHMpCiAgKiAgICAgICAgICAgICAgRnVuY3Rpb24gICAgICAgICAgICAgICAgLSBSZWFkIG9yIFdyaXRlIGZsYWcgcGx1cyBvdGhlciByZWdpb24tCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnQgZmxhZ3MKICAqCkBAIC0yMjQsOCArMjIzLDcgQEAKIAogYWNwaV9zdGF0dXMKIGFjcGlfZXhfYWNjZXNzX3JlZ2lvbih1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywKLQkJICAgICAgdTMyIGZpZWxkX2RhdHVtX2J5dGVfb2Zmc2V0LAotCQkgICAgICBhY3BpX2ludGVnZXIgKiB2YWx1ZSwgdTMyIGZ1bmN0aW9uKQorCQkgICAgICB1MzIgZmllbGRfZGF0dW1fYnl0ZV9vZmZzZXQsIHU2NCAqdmFsdWUsIHUzMiBmdW5jdGlvbikKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmduX2Rlc2M7CkBAIC0zMTcsOCArMzE1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyB1OAotYWNwaV9leF9yZWdpc3Rlcl9vdmVyZmxvdyh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywKLQkJCSAgYWNwaV9pbnRlZ2VyIHZhbHVlKQorYWNwaV9leF9yZWdpc3Rlcl9vdmVyZmxvdyh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywgdTY0IHZhbHVlKQogewogCiAJaWYgKG9ial9kZXNjLT5jb21tb25fZmllbGQuYml0X2xlbmd0aCA+PSBBQ1BJX0lOVEVHRVJfQklUX1NJWkUpIHsKQEAgLTMyOSw3ICszMjYsNyBAQAogCQlyZXR1cm4gKEZBTFNFKTsKIAl9CiAKLQlpZiAodmFsdWUgPj0gKChhY3BpX2ludGVnZXIpIDEgPDwgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5iaXRfbGVuZ3RoKSkgeworCWlmICh2YWx1ZSA+PSAoKHU2NCkgMSA8PCBvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmJpdF9sZW5ndGgpKSB7CiAJCS8qCiAJCSAqIFRoZSBWYWx1ZSBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSB0aGF0IGNhbiBmaXQgaW50bwogCQkgKiB0aGUgcmVnaXN0ZXIuCkBAIC0zNjIsMTEgKzM1OSwxMCBAQAogCiBzdGF0aWMgYWNwaV9zdGF0dXMKIGFjcGlfZXhfZmllbGRfZGF0dW1faW8odW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsCi0JCSAgICAgICB1MzIgZmllbGRfZGF0dW1fYnl0ZV9vZmZzZXQsCi0JCSAgICAgICBhY3BpX2ludGVnZXIgKiB2YWx1ZSwgdTMyIHJlYWRfd3JpdGUpCisJCSAgICAgICB1MzIgZmllbGRfZGF0dW1fYnl0ZV9vZmZzZXQsIHU2NCAqdmFsdWUsIHUzMiByZWFkX3dyaXRlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlhY3BpX2ludGVnZXIgbG9jYWxfdmFsdWU7CisJdTY0IGxvY2FsX3ZhbHVlOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoZXhfZmllbGRfZGF0dW1faW8sIGZpZWxkX2RhdHVtX2J5dGVfb2Zmc2V0KTsKIApAQCAtNDM5LDggKzQzNSw4IEBACiAJCSAqIHRoZSByZWdpc3RlcgogCQkgKi8KIAkJaWYgKGFjcGlfZXhfcmVnaXN0ZXJfb3ZlcmZsb3cob2JqX2Rlc2MtPmJhbmtfZmllbGQuYmFua19vYmosCi0JCQkJCSAgICAgIChhY3BpX2ludGVnZXIpIG9ial9kZXNjLT4KLQkJCQkJICAgICAgYmFua19maWVsZC52YWx1ZSkpIHsKKwkJCQkJICAgICAgKHU2NCkgb2JqX2Rlc2MtPmJhbmtfZmllbGQuCisJCQkJCSAgICAgIHZhbHVlKSkgewogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9SRUdJU1RFUl9MSU1JVCk7CiAJCX0KIApAQCAtNDgxLDggKzQ3Nyw4IEBACiAJCSAqIHRoZSByZWdpc3RlcgogCQkgKi8KIAkJaWYgKGFjcGlfZXhfcmVnaXN0ZXJfb3ZlcmZsb3cob2JqX2Rlc2MtPmluZGV4X2ZpZWxkLmluZGV4X29iaiwKLQkJCQkJICAgICAgKGFjcGlfaW50ZWdlcikgb2JqX2Rlc2MtPgotCQkJCQkgICAgICBpbmRleF9maWVsZC52YWx1ZSkpIHsKKwkJCQkJICAgICAgKHU2NCkgb2JqX2Rlc2MtPmluZGV4X2ZpZWxkLgorCQkJCQkgICAgICB2YWx1ZSkpIHsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfUkVHSVNURVJfTElNSVQpOwogCQl9CiAKQEAgLTUxMiw3ICs1MDgsNyBAQAogCQkJc3RhdHVzID0KIAkJCSAgICBhY3BpX2V4X2V4dHJhY3RfZnJvbV9maWVsZChvYmpfZGVzYy0+aW5kZXhfZmllbGQuCiAJCQkJCQkgICAgICAgZGF0YV9vYmosIHZhbHVlLAotCQkJCQkJICAgICAgIHNpemVvZihhY3BpX2ludGVnZXIpKTsKKwkJCQkJCSAgICAgICBzaXplb2YodTY0KSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBXcml0ZSB0aGUgZGF0dW0gdG8gdGhlIGRhdGFfcmVnaXN0ZXIgKi8KIApAQCAtNTIzLDcgKzUxOSw3IEBACiAJCQlzdGF0dXMgPQogCQkJICAgIGFjcGlfZXhfaW5zZXJ0X2ludG9fZmllbGQob2JqX2Rlc2MtPmluZGV4X2ZpZWxkLgogCQkJCQkJICAgICAgZGF0YV9vYmosIHZhbHVlLAotCQkJCQkJICAgICAgc2l6ZW9mKGFjcGlfaW50ZWdlcikpOworCQkJCQkJICAgICAgc2l6ZW9mKHU2NCkpOwogCQl9CiAJCWJyZWFrOwogCkBAIC01NzEsMTMgKzU2NywxMiBAQAogCiBhY3BpX3N0YXR1cwogYWNwaV9leF93cml0ZV93aXRoX3VwZGF0ZV9ydWxlKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjLAotCQkJICAgICAgIGFjcGlfaW50ZWdlciBtYXNrLAotCQkJICAgICAgIGFjcGlfaW50ZWdlciBmaWVsZF92YWx1ZSwKLQkJCSAgICAgICB1MzIgZmllbGRfZGF0dW1fYnl0ZV9vZmZzZXQpCisJCQkgICAgICAgdTY0IG1hc2ssCisJCQkgICAgICAgdTY0IGZpZWxkX3ZhbHVlLCB1MzIgZmllbGRfZGF0dW1fYnl0ZV9vZmZzZXQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0JYWNwaV9pbnRlZ2VyIG1lcmdlZF92YWx1ZTsKLQlhY3BpX2ludGVnZXIgY3VycmVudF92YWx1ZTsKKwl1NjQgbWVyZ2VkX3ZhbHVlOworCXU2NCBjdXJyZW50X3ZhbHVlOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIoZXhfd3JpdGVfd2l0aF91cGRhdGVfcnVsZSwgbWFzayk7CiAKQEAgLTU4Nyw3ICs1ODIsNyBAQAogCiAJLyogSWYgdGhlIG1hc2sgaXMgYWxsIG9uZXMsIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIHVwZGF0ZSBydWxlICovCiAKLQlpZiAobWFzayAhPSBBQ1BJX0lOVEVHRVJfTUFYKSB7CisJaWYgKG1hc2sgIT0gQUNQSV9VSU5UNjRfTUFYKSB7CiAKIAkJLyogRGVjb2RlIHRoZSB1cGRhdGUgcnVsZSAqLwogCkBAIC02NzgsOCArNjczLDggQEAKIAkJCSAgIHZvaWQgKmJ1ZmZlciwgdTMyIGJ1ZmZlcl9sZW5ndGgpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCWFjcGlfaW50ZWdlciByYXdfZGF0dW07Ci0JYWNwaV9pbnRlZ2VyIG1lcmdlZF9kYXR1bTsKKwl1NjQgcmF3X2RhdHVtOworCXU2NCBtZXJnZWRfZGF0dW07CiAJdTMyIGZpZWxkX29mZnNldCA9IDA7CiAJdTMyIGJ1ZmZlcl9vZmZzZXQgPSAwOwogCXUzMiBidWZmZXJfdGFpbF9iaXRzOwpAQCAtODA0LDEwICs3OTksMTAgQEAKIAkJCSAgdm9pZCAqYnVmZmVyLCB1MzIgYnVmZmVyX2xlbmd0aCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JYWNwaV9pbnRlZ2VyIG1hc2s7Ci0JYWNwaV9pbnRlZ2VyIHdpZHRoX21hc2s7Ci0JYWNwaV9pbnRlZ2VyIG1lcmdlZF9kYXR1bTsKLQlhY3BpX2ludGVnZXIgcmF3X2RhdHVtID0gMDsKKwl1NjQgbWFzazsKKwl1NjQgd2lkdGhfbWFzazsKKwl1NjQgbWVyZ2VkX2RhdHVtOworCXU2NCByYXdfZGF0dW0gPSAwOwogCXUzMiBmaWVsZF9vZmZzZXQgPSAwOwogCXUzMiBidWZmZXJfb2Zmc2V0ID0gMDsKIAl1MzIgYnVmZmVyX3RhaWxfYml0czsKQEAgLTg1NSw3ICs4NTAsNyBAQAogCSAqIHNoaWZ0IG9wZXJhdG9yCiAJICovCiAJaWYgKG9ial9kZXNjLT5jb21tb25fZmllbGQuYWNjZXNzX2JpdF93aWR0aCA9PSBBQ1BJX0lOVEVHRVJfQklUX1NJWkUpIHsKLQkJd2lkdGhfbWFzayA9IEFDUElfSU5URUdFUl9NQVg7CisJCXdpZHRoX21hc2sgPSBBQ1BJX1VJTlQ2NF9NQVg7CiAJfSBlbHNlIHsKIAkJd2lkdGhfbWFzayA9CiAJCSAgICBBQ1BJX01BU0tfQklUU19BQk9WRShvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG1pc2MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtaXNjLmMKaW5kZXggOTk4ZWFjMy4uYzViYjFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bWlzYy5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDA5LDggKzQwOSw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotYWNwaV9pbnRlZ2VyCi1hY3BpX2V4X2RvX21hdGhfb3AodTE2IG9wY29kZSwgYWNwaV9pbnRlZ2VyIGludGVnZXIwLCBhY3BpX2ludGVnZXIgaW50ZWdlcjEpCit1NjQgYWNwaV9leF9kb19tYXRoX29wKHUxNiBvcGNvZGUsIHU2NCBpbnRlZ2VyMCwgdTY0IGludGVnZXIxKQogewogCiAJQUNQSV9GVU5DVElPTl9FTlRSWSgpOwpAQCAtNDk4LDggKzQ5Nyw3IEBACiAKIGFjcGlfc3RhdHVzCiBhY3BpX2V4X2RvX2xvZ2ljYWxfbnVtZXJpY19vcCh1MTYgb3Bjb2RlLAotCQkJICAgICAgYWNwaV9pbnRlZ2VyIGludGVnZXIwLAotCQkJICAgICAgYWNwaV9pbnRlZ2VyIGludGVnZXIxLCB1OCAqIGxvZ2ljYWxfcmVzdWx0KQorCQkJICAgICAgdTY0IGludGVnZXIwLCB1NjQgaW50ZWdlcjEsIHU4ICpsb2dpY2FsX3Jlc3VsdCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1OCBsb2NhbF9yZXN1bHQgPSBGQUxTRTsKQEAgLTU2NCw4ICs1NjIsOCBAQAogCQkgICAgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvcGVyYW5kMSwgdTggKiBsb2dpY2FsX3Jlc3VsdCkKIHsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpsb2NhbF9vcGVyYW5kMSA9IG9wZXJhbmQxOwotCWFjcGlfaW50ZWdlciBpbnRlZ2VyMDsKLQlhY3BpX2ludGVnZXIgaW50ZWdlcjE7CisJdTY0IGludGVnZXIwOworCXU2NCBpbnRlZ2VyMTsKIAl1MzIgbGVuZ3RoMDsKIAl1MzIgbGVuZ3RoMTsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtdXRleC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG11dGV4LmMKaW5kZXggM2M0NTZiZC4uY2M4YTEwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG11dGV4LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG11dGV4LmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bmFtZXMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhuYW1lcy5jCmluZGV4IGZmZGFlMTIuLjY3OWYzMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhuYW1lcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhuYW1lcy5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMS5jCmluZGV4IDc1MmZlNDguLjk5YWRiYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzEuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcxLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNjEsOCArMjYxLDggQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fZGVzYzIgPSBOVUxMOwogCXUzMiB0ZW1wMzI7CiAJdTMyIGk7Ci0JYWNwaV9pbnRlZ2VyIHBvd2VyX29mX3RlbjsKLQlhY3BpX2ludGVnZXIgZGlnaXQ7CisJdTY0IHBvd2VyX29mX3RlbjsKKwl1NjQgZGlnaXQ7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihleF9vcGNvZGVfMUFfMVRfMVIsCiAJCQkJYWNwaV9wc19nZXRfb3Bjb2RlX25hbWUod2Fsa19zdGF0ZS0+b3Bjb2RlKSk7CkBAIC0zNjIsNyArMzYyLDcgQEAKIAkJCQkvKiBTdW0gdGhlIGRpZ2l0IGludG8gdGhlIHJlc3VsdCB3aXRoIHRoZSBjdXJyZW50IHBvd2VyIG9mIDEwICovCiAKIAkJCQlyZXR1cm5fZGVzYy0+aW50ZWdlci52YWx1ZSArPQotCQkJCSAgICAoKChhY3BpX2ludGVnZXIpIHRlbXAzMikgKiBwb3dlcl9vZl90ZW4pOworCQkJCSAgICAoKCh1NjQpIHRlbXAzMikgKiBwb3dlcl9vZl90ZW4pOwogCiAJCQkJLyogU2hpZnQgdG8gbmV4dCBCQ0QgZGlnaXQgKi8KIApAQCAtMzkyLDcgKzM5Miw3IEBACiAJCQkJICogcmVtYWluZGVyIGZyb20gYWJvdmUKIAkJCQkgKi8KIAkJCQlyZXR1cm5fZGVzYy0+aW50ZWdlci52YWx1ZSB8PQotCQkJCSAgICAoKChhY3BpX2ludGVnZXIpIHRlbXAzMikgPDwgQUNQSV9NVUxfNChpKSk7CisJCQkJICAgICgoKHU2NCkgdGVtcDMyKSA8PCBBQ1BJX01VTF80KGkpKTsKIAkJCX0KIAogCQkJLyogT3ZlcmZsb3cgaWYgdGhlcmUgaXMgYW55IGRhdGEgbGVmdCBpbiBEaWdpdCAqLwpAQCAtNDM5LDcgKzQzOSw3IEBACiAKIAkJCS8qIFRoZSBvYmplY3QgZXhpc3RzIGluIHRoZSBuYW1lc3BhY2UsIHJldHVybiBUUlVFICovCiAKLQkJCXJldHVybl9kZXNjLT5pbnRlZ2VyLnZhbHVlID0gQUNQSV9JTlRFR0VSX01BWDsKKwkJCXJldHVybl9kZXNjLT5pbnRlZ2VyLnZhbHVlID0gQUNQSV9VSU5UNjRfTUFYOwogCQkJZ290byBjbGVhbnVwOwogCiAJCWRlZmF1bHQ6CkBAIC01ODksNyArNTg5LDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fZGVzYyA9IE5VTEw7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdTMyIHR5cGU7Ci0JYWNwaV9pbnRlZ2VyIHZhbHVlOworCXU2NCB2YWx1ZTsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0VfU1RSKGV4X29wY29kZV8xQV8wVF8xUiwKIAkJCQlhY3BpX3BzX2dldF9vcGNvZGVfbmFtZSh3YWxrX3N0YXRlLT5vcGNvZGUpKTsKQEAgLTYxMCw3ICs2MTAsNyBAQAogCQkgKiByZXR1cm5fZGVzYy0+SW50ZWdlci5WYWx1ZSBpcyBpbml0aWFsbHkgPT0gMCAoRkFMU0UpIGZyb20gYWJvdmUuCiAJCSAqLwogCQlpZiAoIW9wZXJhbmRbMF0tPmludGVnZXIudmFsdWUpIHsKLQkJCXJldHVybl9kZXNjLT5pbnRlZ2VyLnZhbHVlID0gQUNQSV9JTlRFR0VSX01BWDsKKwkJCXJldHVybl9kZXNjLT5pbnRlZ2VyLnZhbHVlID0gQUNQSV9VSU5UNjRfTUFYOwogCQl9CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcyLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcyLmMKaW5kZXggODVkOTVjOS4uMjI4NDFiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzIuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI4Miw3ICsyODIsNyBAQAogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipvcGVyYW5kID0gJndhbGtfc3RhdGUtPm9wZXJhbmRzWzBdOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9kZXNjID0gTlVMTDsKLQlhY3BpX2ludGVnZXIgaW5kZXg7CisJdTY0IGluZGV4OwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCWFjcGlfc2l6ZSBsZW5ndGg7CiAKQEAgLTU4NCw3ICs1ODQsNyBAQAogCSAqIERlZmF1bHQgaXMgRkFMU0UgKHplcm8pCiAJICovCiAJaWYgKGxvZ2ljYWxfcmVzdWx0KSB7Ci0JCXJldHVybl9kZXNjLT5pbnRlZ2VyLnZhbHVlID0gQUNQSV9JTlRFR0VSX01BWDsKKwkJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSBBQ1BJX1VJTlQ2NF9NQVg7CiAJfQogCiAgICAgICBjbGVhbnVwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMy5jCmluZGV4IDI1M2Y5ZTEuLjhiYjEwMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmczLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDgsNyArMTQ4LDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fZGVzYyA9IE5VTEw7CiAJY2hhciAqYnVmZmVyID0gTlVMTDsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQlhY3BpX2ludGVnZXIgaW5kZXg7CisJdTY0IGluZGV4OwogCWFjcGlfc2l6ZSBsZW5ndGg7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1NUUihleF9vcGNvZGVfM0FfMVRfMVIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3Bhcmc2LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3Bhcmc2LmMKaW5kZXggMjk1NTQyZS4uZjI1NmI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnNi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzYuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIxOCw3ICsyMTgsNyBAQAogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipvcGVyYW5kID0gJndhbGtfc3RhdGUtPm9wZXJhbmRzWzBdOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9kZXNjID0gTlVMTDsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQlhY3BpX2ludGVnZXIgaW5kZXg7CisJdTY0IGluZGV4OwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnRoaXNfZWxlbWVudDsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0VfU1RSKGV4X29wY29kZV82QV8wVF8xUiwKQEAgLTI1Myw5ICsyNTMsOSBAQAogCQl9CiAKIAkJLyogQ3JlYXRlIGFuIGludGVnZXIgZm9yIHRoZSByZXR1cm4gdmFsdWUgKi8KLQkJLyogRGVmYXVsdCByZXR1cm4gdmFsdWUgaXMgQUNQSV9JTlRFR0VSX01BWCBpZiBubyBtYXRjaCBmb3VuZCAqLworCQkvKiBEZWZhdWx0IHJldHVybiB2YWx1ZSBpcyBBQ1BJX1VJTlQ2NF9NQVggaWYgbm8gbWF0Y2ggZm91bmQgKi8KIAotCQlyZXR1cm5fZGVzYyA9IGFjcGlfdXRfY3JlYXRlX2ludGVnZXJfb2JqZWN0KEFDUElfSU5URUdFUl9NQVgpOworCQlyZXR1cm5fZGVzYyA9IGFjcGlfdXRfY3JlYXRlX2ludGVnZXJfb2JqZWN0KEFDUElfVUlOVDY0X01BWCk7CiAJCWlmICghcmV0dXJuX2Rlc2MpIHsKIAkJCXN0YXR1cyA9IEFFX05PX01FTU9SWTsKIAkJCWdvdG8gY2xlYW51cDsKQEAgLTI3MCw3ICsyNzAsNyBAQAogCQkgKgogCQkgKiBVcG9uIGZpbmRpbmcgYSBtYXRjaCwgdGhlIGxvb3Agd2lsbCB0ZXJtaW5hdGUgdmlhICJicmVhayIgYXQKIAkJICogdGhlIGJvdHRvbS4gIElmIGl0IHRlcm1pbmF0ZXMgIm5vcm1hbGx5IiwgbWF0Y2hfdmFsdWUgd2lsbCBiZQotCQkgKiBBQ1BJX0lOVEVHRVJfTUFYIChPbmVzKSAoaXRzIGluaXRpYWwgdmFsdWUpIGluZGljYXRpbmcgdGhhdCBubworCQkgKiBBQ1BJX1VJTlQ2NF9NQVggKE9uZXMpIChpdHMgaW5pdGlhbCB2YWx1ZSkgaW5kaWNhdGluZyB0aGF0IG5vCiAJCSAqIG1hdGNoIHdhcyBmb3VuZC4KIAkJICovCiAJCWZvciAoOyBpbmRleCA8IG9wZXJhbmRbMF0tPnBhY2thZ2UuY291bnQ7IGluZGV4KyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhwcmVwLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cHJlcC5jCmluZGV4IDUyZmVjMDcuLmVkZjYyYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhwcmVwLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHByZXAuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYwppbmRleCAyYmQ4M2FjLi40ODZiMmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVnaW9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzAsNyArNzAsNyBAQAogYWNwaV9leF9zeXN0ZW1fbWVtb3J5X3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJCSAgICBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCQkgICAgdTMyIGJpdF93aWR0aCwKLQkJCQkgICAgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkJICAgIHU2NCAqdmFsdWUsCiAJCQkJICAgIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CkBAIC0xMTUsOCArMTE1LDcgQEAKIAkgKiBIYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IG5vbi1hbGlnbmVkIGRhdGEgdHJhbnNmZXJzLCB3ZSBtdXN0IHZlcmlmeQogCSAqIHRoZSByZXF1ZXN0LgogCSAqLwotCSh2b2lkKWFjcGlfdXRfc2hvcnRfZGl2aWRlKChhY3BpX2ludGVnZXIpIGFkZHJlc3MsIGxlbmd0aCwgTlVMTCwKLQkJCQkgICAmcmVtYWluZGVyKTsKKwkodm9pZClhY3BpX3V0X3Nob3J0X2RpdmlkZSgodTY0KSBhZGRyZXNzLCBsZW5ndGgsIE5VTEwsICZyZW1haW5kZXIpOwogCWlmIChyZW1haW5kZXIgIT0gMCkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX0FMSUdOTUVOVCk7CiAJfQpAQCAtMTI4LDEwICsxMjcsOSBAQAogCSAqICAgIDIpIEFkZHJlc3MgYmV5b25kIHRoZSBjdXJyZW50IG1hcHBpbmc/CiAJICovCiAJaWYgKChhZGRyZXNzIDwgbWVtX2luZm8tPm1hcHBlZF9waHlzaWNhbF9hZGRyZXNzKSB8fAotCSAgICAoKChhY3BpX2ludGVnZXIpIGFkZHJlc3MgKyBsZW5ndGgpID4gKChhY3BpX2ludGVnZXIpCi0JCQkJCQkgIG1lbV9pbmZvLT4KLQkJCQkJCSAgbWFwcGVkX3BoeXNpY2FsX2FkZHJlc3MgKwotCQkJCQkJICBtZW1faW5mby0+bWFwcGVkX2xlbmd0aCkpKSB7CisJICAgICgoKHU2NCkgYWRkcmVzcyArIGxlbmd0aCkgPiAoKHU2NCkKKwkJCQkJIG1lbV9pbmZvLT5tYXBwZWRfcGh5c2ljYWxfYWRkcmVzcyArCisJCQkJCSBtZW1faW5mby0+bWFwcGVkX2xlbmd0aCkpKSB7CiAJCS8qCiAJCSAqIFRoZSByZXF1ZXN0IGNhbm5vdCBiZSByZXNvbHZlZCBieSB0aGUgY3VycmVudCBtZW1vcnkgbWFwcGluZzsKIAkJICogRGVsZXRlIHRoZSBleGlzdGluZyBtYXBwaW5nIGFuZCBjcmVhdGUgYSBuZXcgb25lLgpAQCAtMTkzLDggKzE5MSw3IEBACiAJICogYWNjZXNzCiAJICovCiAJbG9naWNhbF9hZGRyX3B0ciA9IG1lbV9pbmZvLT5tYXBwZWRfbG9naWNhbF9hZGRyZXNzICsKLQkgICAgKChhY3BpX2ludGVnZXIpIGFkZHJlc3MgLQotCSAgICAgKGFjcGlfaW50ZWdlcikgbWVtX2luZm8tPm1hcHBlZF9waHlzaWNhbF9hZGRyZXNzKTsKKwkgICAgKCh1NjQpIGFkZHJlc3MgLSAodTY0KSBtZW1faW5mby0+bWFwcGVkX3BoeXNpY2FsX2FkZHJlc3MpOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJICAiU3lzdGVtLU1lbW9yeSAod2lkdGggJWQpIFIvVyAlZCBBZGRyZXNzPSU4LjhYJTguOFhcbiIsCkBAIC0yMTUsMTkgKzIxMiwxOSBAQAogCQkqdmFsdWUgPSAwOwogCQlzd2l0Y2ggKGJpdF93aWR0aCkgewogCQljYXNlIDg6Ci0JCQkqdmFsdWUgPSAoYWNwaV9pbnRlZ2VyKSBBQ1BJX0dFVDgobG9naWNhbF9hZGRyX3B0cik7CisJCQkqdmFsdWUgPSAodTY0KSBBQ1BJX0dFVDgobG9naWNhbF9hZGRyX3B0cik7CiAJCQlicmVhazsKIAogCQljYXNlIDE2OgotCQkJKnZhbHVlID0gKGFjcGlfaW50ZWdlcikgQUNQSV9HRVQxNihsb2dpY2FsX2FkZHJfcHRyKTsKKwkJCSp2YWx1ZSA9ICh1NjQpIEFDUElfR0VUMTYobG9naWNhbF9hZGRyX3B0cik7CiAJCQlicmVhazsKIAogCQljYXNlIDMyOgotCQkJKnZhbHVlID0gKGFjcGlfaW50ZWdlcikgQUNQSV9HRVQzMihsb2dpY2FsX2FkZHJfcHRyKTsKKwkJCSp2YWx1ZSA9ICh1NjQpIEFDUElfR0VUMzIobG9naWNhbF9hZGRyX3B0cik7CiAJCQlicmVhazsKIAogCQljYXNlIDY0OgotCQkJKnZhbHVlID0gKGFjcGlfaW50ZWdlcikgQUNQSV9HRVQ2NChsb2dpY2FsX2FkZHJfcHRyKTsKKwkJCSp2YWx1ZSA9ICh1NjQpIEFDUElfR0VUNjQobG9naWNhbF9hZGRyX3B0cik7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgpAQCAtMjkxLDcgKzI4OCw3IEBACiBhY3BpX2V4X3N5c3RlbV9pb19zcGFjZV9oYW5kbGVyKHUzMiBmdW5jdGlvbiwKIAkJCQlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCQl1MzIgYml0X3dpZHRoLAotCQkJCWFjcGlfaW50ZWdlciAqIHZhbHVlLAorCQkJCXU2NCAqdmFsdWUsCiAJCQkJdm9pZCAqaGFuZGxlcl9jb250ZXh0LCB2b2lkICpyZWdpb25fY29udGV4dCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKQEAgLTM1MCw3ICszNDcsNyBAQAogYWNwaV9leF9wY2lfY29uZmlnX3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLAogCQkJCSBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKIAkJCQkgdTMyIGJpdF93aWR0aCwKLQkJCQkgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkJIHU2NCAqdmFsdWUsCiAJCQkJIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CkBAIC00MjUsNyArNDIyLDcgQEAKIGFjcGlfZXhfY21vc19zcGFjZV9oYW5kbGVyKHUzMiBmdW5jdGlvbiwKIAkJCSAgIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAogCQkJICAgdTMyIGJpdF93aWR0aCwKLQkJCSAgIGFjcGlfaW50ZWdlciAqIHZhbHVlLAorCQkJICAgdTY0ICp2YWx1ZSwKIAkJCSAgIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CkBAIC00NTcsNyArNDU0LDcgQEAKIGFjcGlfZXhfcGNpX2Jhcl9zcGFjZV9oYW5kbGVyKHUzMiBmdW5jdGlvbiwKIAkJCSAgICAgIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAogCQkJICAgICAgdTMyIGJpdF93aWR0aCwKLQkJCSAgICAgIGFjcGlfaW50ZWdlciAqIHZhbHVlLAorCQkJICAgICAgdTY0ICp2YWx1ZSwKIAkJCSAgICAgIHZvaWQgKmhhbmRsZXJfY29udGV4dCwgdm9pZCAqcmVnaW9uX2NvbnRleHQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CkBAIC00ODksNyArNDg2LDcgQEAKIGFjcGlfZXhfZGF0YV90YWJsZV9zcGFjZV9oYW5kbGVyKHUzMiBmdW5jdGlvbiwKIAkJCQkgYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MsCiAJCQkJIHUzMiBiaXRfd2lkdGgsCi0JCQkJIGFjcGlfaW50ZWdlciAqIHZhbHVlLAorCQkJCSB1NjQgKnZhbHVlLAogCQkJCSB2b2lkICpoYW5kbGVyX2NvbnRleHQsIHZvaWQgKnJlZ2lvbl9jb250ZXh0KQogewogCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfZGF0YV90YWJsZV9zcGFjZV9oYW5kbGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNudGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNudGUuYwppbmRleCA2MDc5NThmLi5mZGMxYjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzbnRlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc250ZS5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc29sdi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc29sdi5jCmluZGV4IGM5M2I1NGMuLmZkZDZhNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvbHYuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzb2x2LmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzb3AuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvcC5jCmluZGV4IDVjNzI5YTkuLmM1ZWNkNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvcC5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmUuYwppbmRleCA2ZWZkMDdhLi43MDJiOWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmUuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yZW4uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yZW4uYwppbmRleCA2MDhlODM4Li5kNGFmNjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmVuLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3Jlbi5jCkBAIC03LDcgKzcsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JvYi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JvYi5jCmluZGV4IDI1NzcwNmUuLmU5NzJiNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yb2IuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3Rvcm9iLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3lzdGVtLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3lzdGVtLmMKaW5kZXggM2QwMGI5My4uZTExYjZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHN5c3RlbS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzeXN0ZW0uYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE5Myw3ICsxOTMsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWFjcGlfc3RhdHVzIGFjcGlfZXhfc3lzdGVtX2RvX3N1c3BlbmQoYWNwaV9pbnRlZ2VyIGhvd19sb25nKQorYWNwaV9zdGF0dXMgYWNwaV9leF9zeXN0ZW1fZG9fc3VzcGVuZCh1NjQgaG93X2xvbmcpCiB7CiAJQUNQSV9GVU5DVElPTl9FTlRSWSgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4dXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jCmluZGV4IDdkNDFmOTkuLjc0YzI0ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjcsNyArNjcsNyBAQAogQUNQSV9NT0RVTEVfTkFNRSgiZXh1dGlscyIpCiAKIC8qIExvY2FsIHByb3RvdHlwZXMgKi8KLXN0YXRpYyB1MzIgYWNwaV9leF9kaWdpdHNfbmVlZGVkKGFjcGlfaW50ZWdlciB2YWx1ZSwgdTMyIGJhc2UpOworc3RhdGljIHUzMiBhY3BpX2V4X2RpZ2l0c19uZWVkZWQodTY0IHZhbHVlLCB1MzIgYmFzZSk7CiAKICNpZm5kZWYgQUNQSV9OT19NRVRIT0RfRVhFQ1VUSU9OCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjMwLDcgKzIzMCw3IEBACiAJCSAqIFdlIGFyZSBydW5uaW5nIGEgbWV0aG9kIHRoYXQgZXhpc3RzIGluIGEgMzItYml0IEFDUEkgdGFibGUuCiAJCSAqIFRydW5jYXRlIHRoZSB2YWx1ZSB0byAzMiBiaXRzIGJ5IHplcm9pbmcgb3V0IHRoZSB1cHBlciAzMi1iaXQgZmllbGQKIAkJICovCi0JCW9ial9kZXNjLT5pbnRlZ2VyLnZhbHVlICY9IChhY3BpX2ludGVnZXIpIEFDUElfVUlOVDMyX01BWDsKKwkJb2JqX2Rlc2MtPmludGVnZXIudmFsdWUgJj0gKHU2NCkgQUNQSV9VSU5UMzJfTUFYOwogCX0KIH0KIApAQCAtMzI3LDE0ICszMjcsMTQgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdTMyIGFjcGlfZXhfZGlnaXRzX25lZWRlZChhY3BpX2ludGVnZXIgdmFsdWUsIHUzMiBiYXNlKQorc3RhdGljIHUzMiBhY3BpX2V4X2RpZ2l0c19uZWVkZWQodTY0IHZhbHVlLCB1MzIgYmFzZSkKIHsKIAl1MzIgbnVtX2RpZ2l0czsKLQlhY3BpX2ludGVnZXIgY3VycmVudF92YWx1ZTsKKwl1NjQgY3VycmVudF92YWx1ZTsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfZGlnaXRzX25lZWRlZCk7CiAKLQkvKiBhY3BpX2ludGVnZXIgaXMgdW5zaWduZWQsIHNvIHdlIGRvbid0IHdvcnJ5IGFib3V0IGEgJy0nIHByZWZpeCAqLworCS8qIHU2NCBpcyB1bnNpZ25lZCwgc28gd2UgZG9uJ3Qgd29ycnkgYWJvdXQgYSAnLScgcHJlZml4ICovCiAKIAlpZiAodmFsdWUgPT0gMCkgewogCQlyZXR1cm5fVUlOVDMyKDEpOwpAQCAtMzcwLDcgKzM3MCw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBhY3BpX2V4X2Vpc2FfaWRfdG9fc3RyaW5nKGNoYXIgKm91dF9zdHJpbmcsIGFjcGlfaW50ZWdlciBjb21wcmVzc2VkX2lkKQordm9pZCBhY3BpX2V4X2Vpc2FfaWRfdG9fc3RyaW5nKGNoYXIgKm91dF9zdHJpbmcsIHU2NCBjb21wcmVzc2VkX2lkKQogewogCXUzMiBzd2FwcGVkX2lkOwogCkBAIC0zOTQsMTAgKzM5NCwxMCBAQAogCSAgICAoY2hhcikoMHg0MCArICgoKHVuc2lnbmVkIGxvbmcpc3dhcHBlZF9pZCA+PiAyNikgJiAweDFGKSk7CiAJb3V0X3N0cmluZ1sxXSA9IChjaGFyKSgweDQwICsgKChzd2FwcGVkX2lkID4+IDIxKSAmIDB4MUYpKTsKIAlvdXRfc3RyaW5nWzJdID0gKGNoYXIpKDB4NDAgKyAoKHN3YXBwZWRfaWQgPj4gMTYpICYgMHgxRikpOwotCW91dF9zdHJpbmdbM10gPSBhY3BpX3V0X2hleF90b19hc2NpaV9jaGFyKChhY3BpX2ludGVnZXIpc3dhcHBlZF9pZCwgMTIpOwotCW91dF9zdHJpbmdbNF0gPSBhY3BpX3V0X2hleF90b19hc2NpaV9jaGFyKChhY3BpX2ludGVnZXIpc3dhcHBlZF9pZCwgOCk7Ci0Jb3V0X3N0cmluZ1s1XSA9IGFjcGlfdXRfaGV4X3RvX2FzY2lpX2NoYXIoKGFjcGlfaW50ZWdlcilzd2FwcGVkX2lkLCA0KTsKLQlvdXRfc3RyaW5nWzZdID0gYWNwaV91dF9oZXhfdG9fYXNjaWlfY2hhcigoYWNwaV9pbnRlZ2VyKXN3YXBwZWRfaWQsIDApOworCW91dF9zdHJpbmdbM10gPSBhY3BpX3V0X2hleF90b19hc2NpaV9jaGFyKCh1NjQpIHN3YXBwZWRfaWQsIDEyKTsKKwlvdXRfc3RyaW5nWzRdID0gYWNwaV91dF9oZXhfdG9fYXNjaWlfY2hhcigodTY0KSBzd2FwcGVkX2lkLCA4KTsKKwlvdXRfc3RyaW5nWzVdID0gYWNwaV91dF9oZXhfdG9fYXNjaWlfY2hhcigodTY0KSBzd2FwcGVkX2lkLCA0KTsKKwlvdXRfc3RyaW5nWzZdID0gYWNwaV91dF9oZXhfdG9fYXNjaWlfY2hhcigodTY0KSBzd2FwcGVkX2lkLCAwKTsKIAlvdXRfc3RyaW5nWzddID0gMDsKIH0KIApAQCAtNDE4LDcgKzQxOCw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBhY3BpX2V4X2ludGVnZXJfdG9fc3RyaW5nKGNoYXIgKm91dF9zdHJpbmcsIGFjcGlfaW50ZWdlciB2YWx1ZSkKK3ZvaWQgYWNwaV9leF9pbnRlZ2VyX3RvX3N0cmluZyhjaGFyICpvdXRfc3RyaW5nLCB1NjQgdmFsdWUpCiB7CiAJdTMyIGNvdW50OwogCXUzMiBkaWdpdHNfbmVlZGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2FjcGkuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdhY3BpLmMKaW5kZXggOWFmMzYxYS4uNjc5YTExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2FjcGkuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3YWNwaS5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2dwZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od2dwZS5jCmluZGV4IGMyOGM0MWIuLmJkNzIzMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdncGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMjQsNyArMjI0LDcgQEAKIAogCXN0YXR1cyA9IGFjcGlfaHdfcmVhZCgmaW5fYnl0ZSwgJmdwZV9yZWdpc3Rlcl9pbmZvLT5zdGF0dXNfYWRkcmVzcyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCQlyZXR1cm4gKHN0YXR1cyk7CiAJfQogCiAJaWYgKHJlZ2lzdGVyX2JpdCAmIGluX2J5dGUpIHsKQEAgLTIzNCw5ICsyMzQsNyBAQAogCS8qIFNldCByZXR1cm4gdmFsdWUgKi8KIAogCSgqZXZlbnRfc3RhdHVzKSA9IGxvY2FsX2V2ZW50X3N0YXR1czsKLQotICAgICAgdW5sb2NrX2FuZF9leGl0OgotCXJldHVybiAoc3RhdHVzKTsKKwlyZXR1cm4gKEFFX09LKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3JlZ3MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdyZWdzLmMKaW5kZXggMTVjOWVkMi4uZWM3ZmMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3JlZ3MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3cmVncy5jCkBAIC03LDcgKzcsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdzbGVlcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3NsZWVwLmMKaW5kZXggY2MyMmY5YS4uNWU2ZDRkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3NsZWVwLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3NsZWVwLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3dGltZXIuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd0aW1lci5jCmluZGV4IDZiMjgyZTguLjFlZjhlMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd0aW1lci5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd0aW1lci5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTQwLDcgKzE0MCw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXUzMiBkZWx0YV90aWNrczsKLQlhY3BpX2ludGVnZXIgcXVvdGllbnQ7CisJdTY0IHF1b3RpZW50OwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2dldF90aW1lcl9kdXJhdGlvbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd2YWxpZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3ZhbGlkLmMKaW5kZXggZWMzM2YyNy4uZTI2YzE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3ZhbGlkLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3ZhbGlkLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA5LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZmFjZS5jCmluZGV4IDY0N2M3YjYuLjUwY2MzYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZmFjZS5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FjY2Vzcy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FjY2Vzcy5jCmluZGV4IGQ2MjJiYTcuLmFhMmI4MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhY2Nlc3MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWNjZXNzLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FsbG9jLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWxsb2MuYwppbmRleCA4YTU4YTFiLi45ODIyNjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWxsb2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWxsb2MuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXAuYwppbmRleCBlMzc4MzZlLi4wNjg5ZDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcGR2LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcGR2LmMKaW5kZXggMzZiZTdmMC4uZDJhOTc5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXBkdi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wZHYuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZXZhbC5jCmluZGV4IGFmOWZlOTEuLmY1MjgyOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2V2YWwuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2luaXQuYwppbmRleCA0ZjhhYmFjLi45YmQ2ZjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNpbml0LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbG9hZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2xvYWQuYwppbmRleCBhNzIzNGU2Li5kZjE4YmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbG9hZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNsb2FkLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbmFtZXMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNuYW1lcy5jCmluZGV4IDhmOWE0ODcuLjk1OTM3MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNuYW1lcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNuYW1lcy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNvYmplY3QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNvYmplY3QuYwppbmRleCA2MGYzYWYwLi40MWE5MjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zb2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc29iamVjdC5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwYXJzZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3BhcnNlLmMKaW5kZXggNjYyYTRiZC4uMjdjZGE1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3BhcnNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3BhcnNlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlZGVmLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlZGVmLmMKaW5kZXggZDM0ZmE1OS4uNzA5NmJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3ByZWRlZi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwcmVkZWYuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIzMSw2ICsyMzEsNyBAQAogCSAqIE5vdGU6IFBhY2thZ2UgbWF5IGhhdmUgYmVlbiBuZXdseSBjcmVhdGVkIGJ5IGNhbGwgYWJvdmUuCiAJICovCiAJaWYgKCgqcmV0dXJuX29iamVjdF9wdHIpLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCQlkYXRhLT5wYXJlbnRfcGFja2FnZSA9ICpyZXR1cm5fb2JqZWN0X3B0cjsKIAkJc3RhdHVzID0gYWNwaV9uc19jaGVja19wYWNrYWdlKGRhdGEsIHJldHVybl9vYmplY3RfcHRyKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlnb3RvIGV4aXQ7CkBAIC03MTAsNiArNzExLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlzdWJfcGFja2FnZSA9ICplbGVtZW50czsKIAkJc3ViX2VsZW1lbnRzID0gc3ViX3BhY2thZ2UtPnBhY2thZ2UuZWxlbWVudHM7CisJCWRhdGEtPnBhcmVudF9wYWNrYWdlID0gc3ViX3BhY2thZ2U7CiAKIAkJLyogRWFjaCBzdWItb2JqZWN0IG11c3QgYmUgb2YgdHlwZSBQYWNrYWdlICovCiAKQEAgLTcyMSw2ICs3MjMsNyBAQAogCiAJCS8qIEV4YW1pbmUgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBleHBlY3RlZCBzdWItcGFja2FnZXMgKi8KIAorCQlkYXRhLT5wYXJlbnRfcGFja2FnZSA9IHN1Yl9wYWNrYWdlOwogCQlzd2l0Y2ggKHBhY2thZ2UtPnJldF9pbmZvLnR5cGUpIHsKIAkJY2FzZSBBQ1BJX1BUWVBFMjoKIAkJY2FzZSBBQ1BJX1BUWVBFMl9QS0dfQ09VTlQ6CkBAIC04MDAsNyArODAzLDcgQEAKIAogCQkJLyoKIAkJCSAqIEZpcnN0IGVsZW1lbnQgaXMgdGhlIChJbnRlZ2VyKSBjb3VudCBvZiBlbGVtZW50cywgaW5jbHVkaW5nCi0JCQkgKiB0aGUgY291bnQgZmllbGQuCisJCQkgKiB0aGUgY291bnQgZmllbGQgKHRoZSBBQ1BJIG5hbWUgaXMgbnVtX2VsZW1lbnRzKQogCQkJICovCiAJCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKGRhdGEsIHN1Yl9lbGVtZW50cywKIAkJCQkJCQkgICBBQ1BJX1JUWVBFX0lOVEVHRVIsCkBAIC04MjIsNiArODI1LDE2IEBACiAJCQkJZXhwZWN0ZWRfY291bnQgPSBwYWNrYWdlLT5yZXRfaW5mby5jb3VudDE7CiAJCQkJZ290byBwYWNrYWdlX3Rvb19zbWFsbDsKIAkJCX0KKwkJCWlmIChleHBlY3RlZF9jb3VudCA9PSAwKSB7CisJCQkJLyoKKwkJCQkgKiBFaXRoZXIgdGhlIG51bV9lbnRyaWVzIGVsZW1lbnQgd2FzIG9yaWdpbmFsbHkgemVybyBvciBpdCB3YXMKKwkJCQkgKiBhIE5VTEwgZWxlbWVudCBhbmQgcmVwYWlyZWQgdG8gYW4gSW50ZWdlciBvZiB2YWx1ZSB6ZXJvLgorCQkJCSAqIEluIGVpdGhlciBjYXNlLCByZXBhaXIgaXQgYnkgc2V0dGluZyBudW1fZW50cmllcyB0byBiZSB0aGUKKwkJCQkgKiBhY3R1YWwgc2l6ZSBvZiB0aGUgc3VicGFja2FnZS4KKwkJCQkgKi8KKwkJCQlleHBlY3RlZF9jb3VudCA9IHN1Yl9wYWNrYWdlLT5wYWNrYWdlLmNvdW50OworCQkJCSgqc3ViX2VsZW1lbnRzKS0+aW50ZWdlci52YWx1ZSA9IGV4cGVjdGVkX2NvdW50OworCQkJfQogCiAJCQkvKiBDaGVjayB0aGUgdHlwZSBvZiBlYWNoIHN1Yi1wYWNrYWdlIGVsZW1lbnQgKi8KIApAQCAtOTQ1LDEwICs5NTgsMTggQEAKIAljaGFyIHR5cGVfYnVmZmVyWzQ4XTsJLyogUm9vbSBmb3IgNSB0eXBlcyAqLwogCiAJLyoKLQkgKiBJZiB3ZSBnZXQgYSBOVUxMIHJldHVybl9vYmplY3QgaGVyZSwgaXQgaXMgYSBOVUxMIHBhY2thZ2UgZWxlbWVudCwKLQkgKiBhbmQgdGhpcyBpcyBhbHdheXMgYW4gZXJyb3IuCisJICogSWYgd2UgZ2V0IGEgTlVMTCByZXR1cm5fb2JqZWN0IGhlcmUsIGl0IGlzIGEgTlVMTCBwYWNrYWdlIGVsZW1lbnQuCisJICogU2luY2UgYWxsIGV4dHJhbmVvdXMgTlVMTCBwYWNrYWdlIGVsZW1lbnRzIHdlcmUgcmVtb3ZlZCBlYXJsaWVyIGJ5IGEKKwkgKiBjYWxsIHRvIGFjcGlfbnNfcmVtb3ZlX251bGxfZWxlbWVudHMsIHRoaXMgaXMgYW4gdW5leHBlY3RlZCBOVUxMIGVsZW1lbnQuCisJICogV2Ugd2lsbCBhdHRlbXB0IHRvIHJlcGFpciBpdC4KIAkgKi8KIAlpZiAoIXJldHVybl9vYmplY3QpIHsKKwkJc3RhdHVzID0gYWNwaV9uc19yZXBhaXJfbnVsbF9lbGVtZW50KGRhdGEsIGV4cGVjdGVkX2J0eXBlcywKKwkJCQkJCSAgICAgcGFja2FnZV9pbmRleCwKKwkJCQkJCSAgICAgcmV0dXJuX29iamVjdF9wdHIpOworCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJCXJldHVybiAoQUVfT0spOwkvKiBSZXBhaXIgd2FzIHN1Y2Nlc3NmdWwgKi8KKwkJfQogCQlnb3RvIHR5cGVfZXJyb3JfZXhpdDsKIAl9CiAKQEAgLTEwMDAsMjcgKzEwMjEsMjUgQEAKIAogCS8qIElzIHRoZSBvYmplY3Qgb25lIG9mIHRoZSBleHBlY3RlZCB0eXBlcz8gKi8KIAotCWlmICghKHJldHVybl9idHlwZSAmIGV4cGVjdGVkX2J0eXBlcykpIHsKKwlpZiAocmV0dXJuX2J0eXBlICYgZXhwZWN0ZWRfYnR5cGVzKSB7CiAKLQkJLyogVHlwZSBtaXNtYXRjaCAtLSBhdHRlbXB0IHJlcGFpciBvZiB0aGUgcmV0dXJuZWQgb2JqZWN0ICovCisJCS8qIEZvciByZWZlcmVuY2Ugb2JqZWN0cywgY2hlY2sgdGhhdCB0aGUgcmVmZXJlbmNlIHR5cGUgaXMgY29ycmVjdCAqLwogCi0JCXN0YXR1cyA9IGFjcGlfbnNfcmVwYWlyX29iamVjdChkYXRhLCBleHBlY3RlZF9idHlwZXMsCi0JCQkJCSAgICAgICBwYWNrYWdlX2luZGV4LAotCQkJCQkgICAgICAgcmV0dXJuX29iamVjdF9wdHIpOwotCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJCXJldHVybiAoQUVfT0spOwkvKiBSZXBhaXIgd2FzIHN1Y2Nlc3NmdWwgKi8KKwkJaWYgKHJldHVybl9vYmplY3QtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpIHsKKwkJCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfcmVmZXJlbmNlKGRhdGEsIHJldHVybl9vYmplY3QpOwogCQl9Ci0JCWdvdG8gdHlwZV9lcnJvcl9leGl0OworCisJCXJldHVybiAoc3RhdHVzKTsKIAl9CiAKLQkvKiBGb3IgcmVmZXJlbmNlIG9iamVjdHMsIGNoZWNrIHRoYXQgdGhlIHJlZmVyZW5jZSB0eXBlIGlzIGNvcnJlY3QgKi8KKwkvKiBUeXBlIG1pc21hdGNoIC0tIGF0dGVtcHQgcmVwYWlyIG9mIHRoZSByZXR1cm5lZCBvYmplY3QgKi8KIAotCWlmIChyZXR1cm5fb2JqZWN0LT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKSB7Ci0JCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfcmVmZXJlbmNlKGRhdGEsIHJldHVybl9vYmplY3QpOworCXN0YXR1cyA9IGFjcGlfbnNfcmVwYWlyX29iamVjdChkYXRhLCBleHBlY3RlZF9idHlwZXMsCisJCQkJICAgICAgIHBhY2thZ2VfaW5kZXgsIHJldHVybl9vYmplY3RfcHRyKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJcmV0dXJuIChBRV9PSyk7CS8qIFJlcGFpciB3YXMgc3VjY2Vzc2Z1bCAqLwogCX0KIAotCXJldHVybiAoc3RhdHVzKTsKLQogICAgICAgdHlwZV9lcnJvcl9leGl0OgogCiAJLyogQ3JlYXRlIGEgc3RyaW5nIHdpdGggYWxsIGV4cGVjdGVkIHR5cGVzIGZvciB0aGlzIHByZWRlZmluZWQgb2JqZWN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyLmMKaW5kZXggNGZkMWJkYi4uZDRiZTM3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3JlcGFpci5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDksIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJhY2NvbW1vbi5oIgogI2luY2x1ZGUgImFjbmFtZXNwLmgiCiAjaW5jbHVkZSAiYWNpbnRlcnAuaCIKKyNpbmNsdWRlICJhY3ByZWRlZi5oIgogCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9OQU1FU1BBQ0UKIEFDUElfTU9EVUxFX05BTUUoIm5zcmVwYWlyIikKQEAgLTcxLDYgKzcyLDEyIEBACiAgKiBCdWZmZXIgIC0+IFBhY2thZ2Ugb2YgSW50ZWdlcnMKICAqIFBhY2thZ2UgLT4gUGFja2FnZSBvZiBvbmUgUGFja2FnZQogICoKKyAqIEFkZGl0aW9uYWwgcG9zc2libGUgcmVwYWlyczoKKyAqCisgKiBPcHRpb25hbC91bm5lY2Vzc2FyeSBOVUxMIHBhY2thZ2UgZWxlbWVudHMgcmVtb3ZlZAorICogUmVxdWlyZWQgcGFja2FnZSBlbGVtZW50cyB0aGF0IGFyZSBOVUxMIHJlcGxhY2VkIGJ5IEludGVnZXIvU3RyaW5nL0J1ZmZlcgorICogSW5jb3JyZWN0IHN0YW5kYWxvbmUgcGFja2FnZSB3cmFwcGVkIHdpdGggcmVxdWlyZWQgb3V0ZXIgcGFja2FnZQorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBMb2NhbCBwcm90b3R5cGVzICovCiBzdGF0aWMgYWNwaV9zdGF0dXMKQEAgLTUwNiw2ICs1MTMsMTcyIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfcmVwYWlyX251bGxfZWxlbWVudAorICoKKyAqIFBBUkFNRVRFUlM6ICBEYXRhICAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byB2YWxpZGF0aW9uIGRhdGEgc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgZXhwZWN0ZWRfYnR5cGVzICAgICAtIE9iamVjdCB0eXBlcyBleHBlY3RlZAorICogICAgICAgICAgICAgIHBhY2thZ2VfaW5kZXggICAgICAgLSBJbmRleCBvZiBvYmplY3Qgd2l0aGluIHBhcmVudCBwYWNrYWdlIChpZgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhYmxlIC0gQUNQSV9OT1RfUEFDS0FHRV9FTEVNRU5UCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSkKKyAqICAgICAgICAgICAgICByZXR1cm5fb2JqZWN0X3B0ciAgIC0gUG9pbnRlciB0byB0aGUgb2JqZWN0IHJldHVybmVkIGZyb20gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRpb24gb2YgYSBtZXRob2Qgb3Igb2JqZWN0CisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cy4gQUVfT0sgaWYgcmVwYWlyIHdhcyBzdWNjZXNzZnVsLgorICoKKyAqIERFU0NSSVBUSU9OOiBBdHRlbXB0IHRvIHJlcGFpciBhIE5VTEwgZWxlbWVudCBvZiBhIHJldHVybmVkIFBhY2thZ2Ugb2JqZWN0LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2FjcGlfc3RhdHVzCithY3BpX25zX3JlcGFpcl9udWxsX2VsZW1lbnQoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAorCQkJICAgIHUzMiBleHBlY3RlZF9idHlwZXMsCisJCQkgICAgdTMyIHBhY2thZ2VfaW5kZXgsCisJCQkgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9vYmplY3RfcHRyKQoreworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9vYmplY3QgPSAqcmV0dXJuX29iamVjdF9wdHI7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbmV3X29iamVjdDsKKworCUFDUElfRlVOQ1RJT05fTkFNRShuc19yZXBhaXJfbnVsbF9lbGVtZW50KTsKKworCS8qIE5vIHJlcGFpciBuZWVkZWQgaWYgcmV0dXJuIG9iamVjdCBpcyBub24tTlVMTCAqLworCisJaWYgKHJldHVybl9vYmplY3QpIHsKKwkJcmV0dXJuIChBRV9PSyk7CisJfQorCisJLyoKKwkgKiBBdHRlbXB0IHRvIHJlcGFpciBhIE5VTEwgZWxlbWVudCBvZiBhIFBhY2thZ2Ugb2JqZWN0LiBUaGlzIGFwcGxpZXMgdG8KKwkgKiBwcmVkZWZpbmVkIG5hbWVzIHRoYXQgcmV0dXJuIGEgZml4ZWQtbGVuZ3RoIHBhY2thZ2UgYW5kIGVhY2ggZWxlbWVudAorCSAqIGlzIHJlcXVpcmVkLiBJdCBkb2VzIG5vdCBhcHBseSB0byB2YXJpYWJsZS1sZW5ndGggcGFja2FnZXMgd2hlcmUgTlVMTAorCSAqIGVsZW1lbnRzIGFyZSBhbGxvd2VkLCBlc3BlY2lhbGx5IGF0IHRoZSBlbmQgb2YgdGhlIHBhY2thZ2UuCisJICovCisJaWYgKGV4cGVjdGVkX2J0eXBlcyAmIEFDUElfUlRZUEVfSU5URUdFUikgeworCisJCS8qIE5lZWQgYW4gSW50ZWdlciAtIGNyZWF0ZSBhIHplcm8tdmFsdWUgaW50ZWdlciAqLworCisJCW5ld19vYmplY3QgPSBhY3BpX3V0X2NyZWF0ZV9pbnRlZ2VyX29iamVjdCgwKTsKKwl9IGVsc2UgaWYgKGV4cGVjdGVkX2J0eXBlcyAmIEFDUElfUlRZUEVfU1RSSU5HKSB7CisKKwkJLyogTmVlZCBhIFN0cmluZyAtIGNyZWF0ZSBhIE5VTEwgc3RyaW5nICovCisKKwkJbmV3X29iamVjdCA9IGFjcGlfdXRfY3JlYXRlX3N0cmluZ19vYmplY3QoMCk7CisJfSBlbHNlIGlmIChleHBlY3RlZF9idHlwZXMgJiBBQ1BJX1JUWVBFX0JVRkZFUikgeworCisJCS8qIE5lZWQgYSBCdWZmZXIgLSBjcmVhdGUgYSB6ZXJvLWxlbmd0aCBidWZmZXIgKi8KKworCQluZXdfb2JqZWN0ID0gYWNwaV91dF9jcmVhdGVfYnVmZmVyX29iamVjdCgwKTsKKwl9IGVsc2UgeworCQkvKiBFcnJvciBmb3IgYWxsIG90aGVyIGV4cGVjdGVkIHR5cGVzICovCisKKwkJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKKwl9CisKKwlpZiAoIW5ld19vYmplY3QpIHsKKwkJcmV0dXJuIChBRV9OT19NRU1PUlkpOworCX0KKworCS8qIFNldCB0aGUgcmVmZXJlbmNlIGNvdW50IGFjY29yZGluZyB0byB0aGUgcGFyZW50IFBhY2thZ2Ugb2JqZWN0ICovCisKKwluZXdfb2JqZWN0LT5jb21tb24ucmVmZXJlbmNlX2NvdW50ID0KKwkgICAgZGF0YS0+cGFyZW50X3BhY2thZ2UtPmNvbW1vbi5yZWZlcmVuY2VfY291bnQ7CisKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1JFUEFJUiwKKwkJCSAgIiVzOiBDb252ZXJ0ZWQgTlVMTCBwYWNrYWdlIGVsZW1lbnQgdG8gZXhwZWN0ZWQgJXMgYXQgaW5kZXggJXVcbiIsCisJCQkgIGRhdGEtPnBhdGhuYW1lLAorCQkJICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKG5ld19vYmplY3QpLAorCQkJICBwYWNrYWdlX2luZGV4KSk7CisKKwkqcmV0dXJuX29iamVjdF9wdHIgPSBuZXdfb2JqZWN0OworCWRhdGEtPmZsYWdzIHw9IEFDUElfT0JKRUNUX1JFUEFJUkVEOworCXJldHVybiAoQUVfT0spOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfcmVtb3ZlX251bGxfZWxlbWVudHMKKyAqCisgKiBQQVJBTUVURVJTOiAgRGF0YSAgICAgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdmFsaWRhdGlvbiBkYXRhIHN0cnVjdHVyZQorICogICAgICAgICAgICAgIHBhY2thZ2VfdHlwZSAgICAgICAgLSBBbiBhY3BpX3JldHVybl9wYWNrYWdlX3R5cGVzIHZhbHVlCisgKiAgICAgICAgICAgICAgb2JqX2Rlc2MgICAgICAgICAgICAtIEEgUGFja2FnZSBvYmplY3QKKyAqCisgKiBSRVRVUk46ICAgICAgTm9uZS4KKyAqCisgKiBERVNDUklQVElPTjogUmVtb3ZlIGFsbCBOVUxMIHBhY2thZ2UgZWxlbWVudHMgZnJvbSBwYWNrYWdlcyB0aGF0IGNvbnRhaW4KKyAqICAgICAgICAgICAgICBhIHZhcmlhYmxlIG51bWJlciBvZiBzdWItcGFja2FnZXMuIEZvciB0aGVzZSB0eXBlcyBvZgorICogICAgICAgICAgICAgIHBhY2thZ2VzLCBOVUxMIGVsZW1lbnRzIGNhbiBiZSBzYWZlbHkgcmVtb3ZlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQKK2FjcGlfbnNfcmVtb3ZlX251bGxfZWxlbWVudHMoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAorCQkJICAgICB1OCBwYWNrYWdlX3R5cGUsCisJCQkgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjKQoreworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipzb3VyY2U7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKmRlc3Q7CisJdTMyIGNvdW50OworCXUzMiBuZXdfY291bnQ7CisJdTMyIGk7CisKKwlBQ1BJX0ZVTkNUSU9OX05BTUUobnNfcmVtb3ZlX251bGxfZWxlbWVudHMpOworCisJLyoKKwkgKiBQVFlQRTEgcGFja2FnZXMgY29udGFpbiBubyBzdWJwYWNrYWdlcy4KKwkgKiBQVFlQRTIgcGFja2FnZXMgY29udGFpbiBhIHZhcmlhYmxlIG51bWJlciBvZiBzdWItcGFja2FnZXMuIFdlIGNhbgorCSAqIHNhZmVseSByZW1vdmUgYWxsIE5VTEwgZWxlbWVudHMgZnJvbSB0aGUgUFRZUEUyIHBhY2thZ2VzLgorCSAqLworCXN3aXRjaCAocGFja2FnZV90eXBlKSB7CisJY2FzZSBBQ1BJX1BUWVBFMV9GSVhFRDoKKwljYXNlIEFDUElfUFRZUEUxX1ZBUjoKKwljYXNlIEFDUElfUFRZUEUxX09QVElPTjoKKwkJcmV0dXJuOworCisJY2FzZSBBQ1BJX1BUWVBFMjoKKwljYXNlIEFDUElfUFRZUEUyX0NPVU5UOgorCWNhc2UgQUNQSV9QVFlQRTJfUEtHX0NPVU5UOgorCWNhc2UgQUNQSV9QVFlQRTJfRklYRUQ6CisJY2FzZSBBQ1BJX1BUWVBFMl9NSU46CisJY2FzZSBBQ1BJX1BUWVBFMl9SRVZfRklYRUQ6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCWNvdW50ID0gb2JqX2Rlc2MtPnBhY2thZ2UuY291bnQ7CisJbmV3X2NvdW50ID0gY291bnQ7CisKKwlzb3VyY2UgPSBvYmpfZGVzYy0+cGFja2FnZS5lbGVtZW50czsKKwlkZXN0ID0gc291cmNlOworCisJLyogRXhhbWluZSBhbGwgZWxlbWVudHMgb2YgdGhlIHBhY2thZ2Ugb2JqZWN0LCByZW1vdmUgbnVsbHMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmICghKnNvdXJjZSkgeworCQkJbmV3X2NvdW50LS07CisJCX0gZWxzZSB7CisJCQkqZGVzdCA9ICpzb3VyY2U7CisJCQlkZXN0Kys7CisJCX0KKwkJc291cmNlKys7CisJfQorCisJLyogVXBkYXRlIHBhcmVudCBwYWNrYWdlIGlmIGFueSBudWxsIGVsZW1lbnRzIHdlcmUgcmVtb3ZlZCAqLworCisJaWYgKG5ld19jb3VudCA8IGNvdW50KSB7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUkVQQUlSLAorCQkJCSAgIiVzOiBGb3VuZCBhbmQgcmVtb3ZlZCAldSBOVUxMIGVsZW1lbnRzXG4iLAorCQkJCSAgZGF0YS0+cGF0aG5hbWUsIChjb3VudCAtIG5ld19jb3VudCkpKTsKKworCQkvKiBOVUxMIHRlcm1pbmF0ZSBsaXN0IGFuZCB1cGRhdGUgdGhlIHBhY2thZ2UgY291bnQgKi8KKworCQkqZGVzdCA9IE5VTEw7CisJCW9ial9kZXNjLT5wYWNrYWdlLmNvdW50ID0gbmV3X2NvdW50OworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9uc19yZXBhaXJfcGFja2FnZV9saXN0CiAgKgogICogUEFSQU1FVEVSUzogIERhdGEgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHZhbGlkYXRpb24gZGF0YSBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIyLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyMi5jCmluZGV4IGYxMzY5MWMuLjYxYmQwZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIyLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3JlcGFpcjIuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDksIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KICNpbmNsdWRlICJhY2NvbW1vbi5oIgogI2luY2x1ZGUgImFjbmFtZXNwLmgiCi0jaW5jbHVkZSAiYWNwcmVkZWYuaCIKIAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfTkFNRVNQQUNFCiBBQ1BJX01PRFVMRV9OQU1FKCJuc3JlcGFpcjIiKQpAQCAtOTMsNyArOTIsNyBAQAogCQkJICB1MzIgc29ydF9pbmRleCwKIAkJCSAgdTggc29ydF9kaXJlY3Rpb24sIGNoYXIgKnNvcnRfa2V5X25hbWUpOwogCi1zdGF0aWMgYWNwaV9zdGF0dXMKK3N0YXRpYyB2b2lkCiBhY3BpX25zX3NvcnRfbGlzdCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqZWxlbWVudHMsCiAJCSAgdTMyIGNvdW50LCB1MzIgaW5kZXgsIHU4IHNvcnRfZGlyZWN0aW9uKTsKIApAQCAtNDQzLDcgKzQ0Miw2IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAJdTMyIGk7CiAJdTMyIHByZXZpb3VzX3ZhbHVlOwotCWFjcGlfc3RhdHVzIHN0YXR1czsKIAogCUFDUElfRlVOQ1RJT05fTkFNRShuc19jaGVja19zb3J0ZWRfbGlzdCk7CiAKQEAgLTQ5NCwxOSArNDkyLDE1IEBACiAKIAkJLyoKIAkJICogVGhlIGxpc3QgbXVzdCBiZSBzb3J0ZWQgaW4gdGhlIHNwZWNpZmllZCBvcmRlci4gSWYgd2UgZGV0ZWN0IGEKLQkJICogZGlzY3JlcGFuY3ksIGlzc3VlIGEgd2FybmluZyBhbmQgc29ydCB0aGUgZW50aXJlIGxpc3QKKwkJICogZGlzY3JlcGFuY3ksIHNvcnQgdGhlIGVudGlyZSBsaXN0LgogCQkgKi8KIAkJaWYgKCgoc29ydF9kaXJlY3Rpb24gPT0gQUNQSV9TT1JUX0FTQ0VORElORykgJiYKIAkJICAgICAob2JqX2Rlc2MtPmludGVnZXIudmFsdWUgPCBwcmV2aW91c192YWx1ZSkpIHx8CiAJCSAgICAoKHNvcnRfZGlyZWN0aW9uID09IEFDUElfU09SVF9ERVNDRU5ESU5HKSAmJgogCQkgICAgIChvYmpfZGVzYy0+aW50ZWdlci52YWx1ZSA+IHByZXZpb3VzX3ZhbHVlKSkpIHsKLQkJCXN0YXR1cyA9Ci0JCQkgICAgYWNwaV9uc19zb3J0X2xpc3QocmV0dXJuX29iamVjdC0+cGFja2FnZS5lbGVtZW50cywKLQkJCQkJICAgICAgb3V0ZXJfZWxlbWVudF9jb3VudCwgc29ydF9pbmRleCwKLQkJCQkJICAgICAgc29ydF9kaXJlY3Rpb24pOwotCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQkJcmV0dXJuIChzdGF0dXMpOwotCQkJfQorCQkJYWNwaV9uc19zb3J0X2xpc3QocmV0dXJuX29iamVjdC0+cGFja2FnZS5lbGVtZW50cywKKwkJCQkJICBvdXRlcl9lbGVtZW50X2NvdW50LCBzb3J0X2luZGV4LAorCQkJCQkgIHNvcnRfZGlyZWN0aW9uKTsKIAogCQkJZGF0YS0+ZmxhZ3MgfD0gQUNQSV9PQkpFQ1RfUkVQQUlSRUQ7CiAKQEAgLTUyNSw4OSArNTE5LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX25zX3JlbW92ZV9udWxsX2VsZW1lbnRzCi0gKgotICogUEFSQU1FVEVSUzogIERhdGEgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHZhbGlkYXRpb24gZGF0YSBzdHJ1Y3R1cmUKLSAqICAgICAgICAgICAgICBwYWNrYWdlX3R5cGUgICAgICAgIC0gQW4gYWNwaV9yZXR1cm5fcGFja2FnZV90eXBlcyB2YWx1ZQotICogICAgICAgICAgICAgIG9ial9kZXNjICAgICAgICAgICAgLSBBIFBhY2thZ2Ugb2JqZWN0Ci0gKgotICogUkVUVVJOOiAgICAgIE5vbmUuCi0gKgotICogREVTQ1JJUFRJT046IFJlbW92ZSBhbGwgTlVMTCBwYWNrYWdlIGVsZW1lbnRzIGZyb20gcGFja2FnZXMgdGhhdCBjb250YWluCi0gKiAgICAgICAgICAgICAgYSB2YXJpYWJsZSBudW1iZXIgb2Ygc3ViLXBhY2thZ2VzLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdm9pZAotYWNwaV9uc19yZW1vdmVfbnVsbF9lbGVtZW50cyhzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCi0JCQkgICAgIHU4IHBhY2thZ2VfdHlwZSwKLQkJCSAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MpCi17Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnNvdXJjZTsKLQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqZGVzdDsKLQl1MzIgY291bnQ7Ci0JdTMyIG5ld19jb3VudDsKLQl1MzIgaTsKLQotCUFDUElfRlVOQ1RJT05fTkFNRShuc19yZW1vdmVfbnVsbF9lbGVtZW50cyk7Ci0KLQkvKgotCSAqIFBUWVBFMSBwYWNrYWdlcyBjb250YWluIG5vIHN1YnBhY2thZ2VzLgotCSAqIFBUWVBFMiBwYWNrYWdlcyBjb250YWluIGEgdmFyaWFibGUgbnVtYmVyIG9mIHN1Yi1wYWNrYWdlcy4gV2UgY2FuCi0JICogc2FmZWx5IHJlbW92ZSBhbGwgTlVMTCBlbGVtZW50cyBmcm9tIHRoZSBQVFlQRTIgcGFja2FnZXMuCi0JICovCi0Jc3dpdGNoIChwYWNrYWdlX3R5cGUpIHsKLQljYXNlIEFDUElfUFRZUEUxX0ZJWEVEOgotCWNhc2UgQUNQSV9QVFlQRTFfVkFSOgotCWNhc2UgQUNQSV9QVFlQRTFfT1BUSU9OOgotCQlyZXR1cm47Ci0KLQljYXNlIEFDUElfUFRZUEUyOgotCWNhc2UgQUNQSV9QVFlQRTJfQ09VTlQ6Ci0JY2FzZSBBQ1BJX1BUWVBFMl9QS0dfQ09VTlQ6Ci0JY2FzZSBBQ1BJX1BUWVBFMl9GSVhFRDoKLQljYXNlIEFDUElfUFRZUEUyX01JTjoKLQljYXNlIEFDUElfUFRZUEUyX1JFVl9GSVhFRDoKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0JY291bnQgPSBvYmpfZGVzYy0+cGFja2FnZS5jb3VudDsKLQluZXdfY291bnQgPSBjb3VudDsKLQotCXNvdXJjZSA9IG9ial9kZXNjLT5wYWNrYWdlLmVsZW1lbnRzOwotCWRlc3QgPSBzb3VyY2U7Ci0KLQkvKiBFeGFtaW5lIGFsbCBlbGVtZW50cyBvZiB0aGUgcGFja2FnZSBvYmplY3QsIHJlbW92ZSBudWxscyAqLwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJaWYgKCEqc291cmNlKSB7Ci0JCQluZXdfY291bnQtLTsKLQkJfSBlbHNlIHsKLQkJCSpkZXN0ID0gKnNvdXJjZTsKLQkJCWRlc3QrKzsKLQkJfQotCQlzb3VyY2UrKzsKLQl9Ci0KLQkvKiBVcGRhdGUgcGFyZW50IHBhY2thZ2UgaWYgYW55IG51bGwgZWxlbWVudHMgd2VyZSByZW1vdmVkICovCi0KLQlpZiAobmV3X2NvdW50IDwgY291bnQpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9SRVBBSVIsCi0JCQkJICAiJXM6IEZvdW5kIGFuZCByZW1vdmVkICV1IE5VTEwgZWxlbWVudHNcbiIsCi0JCQkJICBkYXRhLT5wYXRobmFtZSwgKGNvdW50IC0gbmV3X2NvdW50KSkpOwotCi0JCS8qIE5VTEwgdGVybWluYXRlIGxpc3QgYW5kIHVwZGF0ZSB0aGUgcGFja2FnZSBjb3VudCAqLwotCi0JCSpkZXN0ID0gTlVMTDsKLQkJb2JqX2Rlc2MtPnBhY2thZ2UuY291bnQgPSBuZXdfY291bnQ7Ci0JfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgogICogRlVOQ1RJT046ICAgIGFjcGlfbnNfc29ydF9saXN0CiAgKgogICogUEFSQU1FVEVSUzogIEVsZW1lbnRzICAgICAgICAgICAgLSBQYWNrYWdlIG9iamVjdCBlbGVtZW50IGxpc3QKQEAgLTYxNSwxNSArNTI2LDE2IEBACiAgKiAgICAgICAgICAgICAgSW5kZXggICAgICAgICAgICAgICAtIFNvcnQgYnkgd2hpY2ggcGFja2FnZSBlbGVtZW50CiAgKiAgICAgICAgICAgICAgc29ydF9kaXJlY3Rpb24gICAgICAtIEFzY2VuZGluZyBvciBEZXNjZW5kaW5nIHNvcnQKICAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKiBSRVRVUk46ICAgICAgTm9uZQogICoKICAqIERFU0NSSVBUSU9OOiBTb3J0IHRoZSBvYmplY3RzIHRoYXQgYXJlIGluIGEgcGFja2FnZSBlbGVtZW50IGxpc3QuCiAgKgotICogTk9URTogQXNzdW1lcyB0aGF0IGFsbCBOVUxMIGVsZW1lbnRzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHBhY2thZ2UuCisgKiBOT1RFOiBBc3N1bWVzIHRoYXQgYWxsIE5VTEwgZWxlbWVudHMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcGFja2FnZSwKKyAqICAgICAgIGFuZCB0aGF0IGFsbCBlbGVtZW50cyBoYXZlIGJlZW4gdmVyaWZpZWQgdG8gYmUgb2YgdHlwZSBJbnRlZ2VyLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGFjcGlfc3RhdHVzCitzdGF0aWMgdm9pZAogYWNwaV9uc19zb3J0X2xpc3QodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKmVsZW1lbnRzLAogCQkgIHUzMiBjb3VudCwgdTMyIGluZGV4LCB1OCBzb3J0X2RpcmVjdGlvbikKIHsKQEAgLTY1Miw2ICs1NjQsNCBAQAogCQkJfQogCQl9CiAJfQotCi0JcmV0dXJuIChBRV9PSyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zc2VhcmNoLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zc2VhcmNoLmMKaW5kZXggN2U4NjU2My4uMDhmOGIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3NlYXJjaC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNzZWFyY2guYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCmluZGV4IDQ3ZDkxZTYuLjI0ZDA1YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3dhbGsuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN3YWxrLmMKaW5kZXggZDdlNmI1Mi4uMDBlNzlmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3dhbGsuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zd2Fsay5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmZXZhbC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmZXZhbC5jCmluZGV4IGYwYzA4OTIuLmViZWY4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4ZmV2YWwuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZldmFsLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTYyLDI1ICs1NjIsMjAgQEAKIAkJcmV0dXJuIChBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKLQkvKiBSdW4gX1NUQSB0byBkZXRlcm1pbmUgaWYgZGV2aWNlIGlzIHByZXNlbnQgKi8KLQotCXN0YXR1cyA9IGFjcGlfdXRfZXhlY3V0ZV9TVEEobm9kZSwgJmZsYWdzKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuIChBRV9DVFJMX0RFUFRIKTsKLQl9Ci0KLQlpZiAoIShmbGFncyAmIEFDUElfU1RBX0RFVklDRV9QUkVTRU5UKSAmJgotCSAgICAhKGZsYWdzICYgQUNQSV9TVEFfREVWSUNFX0ZVTkNUSU9OSU5HKSkgewotCQkvKgotCQkgKiBEb24ndCBleGFtaW5lIHRoZSBjaGlsZHJlbiBvZiB0aGUgZGV2aWNlIG9ubHkgd2hlbiB0aGUKLQkJICogZGV2aWNlIGlzIG5laXRoZXIgcHJlc2VudCBub3IgZnVuY3Rpb25hbC4gU2VlIEFDUEkgc3BlYywKLQkJICogZGVzY3JpcHRpb24gb2YgX1NUQSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQkJICovCi0JCXJldHVybiAoQUVfQ1RSTF9ERVBUSCk7Ci0JfQotCi0JLyogRmlsdGVyIGJhc2VkIG9uIGRldmljZSBISUQgJiBDSUQgKi8KLQorCS8qCisJICogRmlyc3QsIGZpbHRlciBiYXNlZCBvbiB0aGUgZGV2aWNlIEhJRCBhbmQgQ0lELgorCSAqCisJICogMDEvMjAxMDogRm9yIHRoaXMgY2FzZSB3aGVyZSBhIHNwZWNpZmljIEhJRCBpcyByZXF1ZXN0ZWQsIHdlIGRvbid0CisJICogd2FudCB0byBydW4gX1NUQSB1bnRpbCB3ZSBoYXZlIGFuIGFjdHVhbCBISUQgbWF0Y2guIFRodXMsIHdlIHdpbGwKKwkgKiBub3QgdW5uZWNlc3NhcmlseSBleGVjdXRlIF9TVEEgb24gZGV2aWNlcyBmb3Igd2hpY2ggdGhlIGNhbGxlcgorCSAqIGRvZXNuJ3QgY2FyZSBhYm91dC4gUHJldmlvdXNseSwgX1NUQSB3YXMgZXhlY3V0ZWQgdW5jb25kaXRpb25hbGx5CisJICogb24gYWxsIGRldmljZXMgZm91bmQgaGVyZS4KKwkgKgorCSAqIEEgc2lkZS1lZmZlY3Qgb2YgdGhpcyBjaGFuZ2UgaXMgdGhhdCBub3cgd2Ugd2lsbCBjb250aW51ZSB0byBzZWFyY2gKKwkgKiBmb3IgYSBtYXRjaGluZyBISUQgZXZlbiB1bmRlciBkZXZpY2UgdHJlZXMgd2hlcmUgdGhlIHBhcmVudCBkZXZpY2UKKwkgKiB3b3VsZCBoYXZlIHJldHVybmVkIGEgX1NUQSB0aGF0IGluZGljYXRlcyBpdCBpcyBub3QgcHJlc2VudCBvcgorCSAqIG5vdCBmdW5jdGlvbmluZyAodGh1cyBhYm9ydGluZyB0aGUgc2VhcmNoIG9uIHRoYXQgYnJhbmNoKS4KKwkgKi8KIAlpZiAoaW5mby0+aGlkICE9IE5VTEwpIHsKIAkJc3RhdHVzID0gYWNwaV91dF9leGVjdXRlX0hJRChub2RlLCAmaGlkKTsKIAkJaWYgKHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpIHsKQEAgLTYyMCw2ICs2MTUsMjUgQEAKIAkJfQogCX0KIAorCS8qIFJ1biBfU1RBIHRvIGRldGVybWluZSBpZiBkZXZpY2UgaXMgcHJlc2VudCAqLworCisJc3RhdHVzID0gYWNwaV91dF9leGVjdXRlX1NUQShub2RlLCAmZmxhZ3MpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm4gKEFFX0NUUkxfREVQVEgpOworCX0KKworCWlmICghKGZsYWdzICYgQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQpICYmCisJICAgICEoZmxhZ3MgJiBBQ1BJX1NUQV9ERVZJQ0VfRlVOQ1RJT05JTkcpKSB7CisJCS8qCisJCSAqIERvbid0IGV4YW1pbmUgdGhlIGNoaWxkcmVuIG9mIHRoZSBkZXZpY2Ugb25seSB3aGVuIHRoZQorCQkgKiBkZXZpY2UgaXMgbmVpdGhlciBwcmVzZW50IG5vciBmdW5jdGlvbmFsLiBTZWUgQUNQSSBzcGVjLAorCQkgKiBkZXNjcmlwdGlvbiBvZiBfU1RBIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCQkgKi8KKwkJcmV0dXJuIChBRV9DVFJMX0RFUFRIKTsKKwl9CisKKwkvKiBXZSBoYXZlIGEgdmFsaWQgZGV2aWNlLCBpbnZva2UgdGhlIHVzZXIgZnVuY3Rpb24gKi8KKwogCXN0YXR1cyA9IGluZm8tPnVzZXJfZnVuY3Rpb24ob2JqX2hhbmRsZSwgbmVzdGluZ19sZXZlbCwgaW5mby0+Y29udGV4dCwKIAkJCQkgICAgIHJldHVybl92YWx1ZSk7CiAJcmV0dXJuIChzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmbmFtZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmbmFtZS5jCmluZGV4IGU2MTFkZDkuLmIwMWU0NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm5hbWUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZuYW1lLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZvYmouYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm9iai5jCmluZGV4IDBjYzZiYTAuLmVhZmVmMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm9iai5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm9iai5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNhcmdzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzYXJncy5jCmluZGV4IGIxNjFmMzUuLjAwNDkzZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNhcmdzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc2FyZ3MuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQwMyw3ICs0MDMsNyBAQAogCQkvKiBHZXQgMSBieXRlIGZyb20gdGhlIEFNTCBzdHJlYW0gKi8KIAogCQlvcGNvZGUgPSBBTUxfQllURV9PUDsKLQkJYXJnLT5jb21tb24udmFsdWUuaW50ZWdlciA9IChhY3BpX2ludGVnZXIpICogYW1sOworCQlhcmctPmNvbW1vbi52YWx1ZS5pbnRlZ2VyID0gKHU2NCkgKmFtbDsKIAkJbGVuZ3RoID0gMTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNsb29wLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzbG9vcC5jCmluZGV4IDA5ODhlNGEuLjU5YWFiYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNsb29wLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc2xvb3AuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNvcGNvZGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNvcGNvZGUuYwppbmRleCAzYmMzYTYwLi4yYjBjM2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzb3Bjb2RlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc29wY29kZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3BhcnNlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzcGFyc2UuYwppbmRleCA0ZGY4ZjEzLi44ZDgxNTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzcGFyc2UuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzcGFyc2UuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNzY29wZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3Njb3BlLmMKaW5kZXggMmZlY2E1Yy4uNDBlMmIyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3Njb3BlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3Njb3BlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzdHJlZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3RyZWUuYwppbmRleCA0ZDMzODkxLi5kNGI5NzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzdHJlZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN0cmVlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzdXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN1dGlscy5jCmluZGV4IGU2MzZlMDcuLmZlMjllZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN1dGlscy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3dhbGsuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN3YWxrLmMKaW5kZXggNzhiOGI3OS4uOGFiYjk2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3dhbGsuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzd2Fsay5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3hmYWNlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzeGZhY2UuYwppbmRleCBkMGMxYjkxLi42MDY0ZGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzeGZhY2UuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzeGZhY2UuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNhZGRyLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzYWRkci5jCmluZGV4IDFlNDM3YmYuLjIyNmM4MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNhZGRyLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2FkZHIuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzY2FsYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NhbGMuYwppbmRleCAzYzRkY2MzLi5kNmViZjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzY2FsYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjYWxjLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NyZWF0ZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NyZWF0ZS5jCmluZGV4IGEzYzIzZDYuLmYyZWUzYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjcmVhdGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzY3JlYXRlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTgyLDcgKzE4Miw3IEBACiAKIAkvKgogCSAqIExvb3AgdGhyb3VnaCB0aGUgQUNQSV9JTlRFUk5BTF9PQkpFQ1RTIC0gRWFjaCBvYmplY3Qgc2hvdWxkIGJlIGEKLQkgKiBwYWNrYWdlIHRoYXQgaW4gdHVybiBjb250YWlucyBhbiBhY3BpX2ludGVnZXIgQWRkcmVzcywgYSB1OCBQaW4sCisJICogcGFja2FnZSB0aGF0IGluIHR1cm4gY29udGFpbnMgYW4gdTY0IEFkZHJlc3MsIGEgdTggUGluLAogCSAqIGEgTmFtZSwgYW5kIGEgdTggc291cmNlX2luZGV4LgogCSAqLwogCXRvcF9vYmplY3RfbGlzdCA9IHBhY2thZ2Vfb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2R1bXAuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNkdW1wLmMKaW5kZXggM2YwY2E1YS4uZjg1OWIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2R1bXAuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzZHVtcC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpbmZvLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzaW5mby5jCmluZGV4IDc3YjI1ZmQuLjFmZDg2OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpbmZvLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2luZm8uYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzaW8uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpby5jCmluZGV4IDM1YTQ5YWEuLjMzYmZmMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpby5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpby5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpcnEuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpcnEuYwppbmRleCAyZTAyNTY5Li41NDVkYTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzaXJxLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2lycS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNsaXN0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbGlzdC5jCmluZGV4IDFiMWRiYzYuLmZkMDU3YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNsaXN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2xpc3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbWVtb3J5LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbWVtb3J5LmMKaW5kZXggZGRjNzZjZS4uODg3YjhiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc21lbW9yeS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNtZW1vcnkuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbWlzYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc21pc2MuYwppbmRleCA1YmM0OWE1Li4wN2RlMzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbWlzYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNtaXNjLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzdXRpbHMuYwppbmRleCBiYzAzZDU5Li4yMmNmY2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzdXRpbHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzeGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnN4ZmFjZS5jCmluZGV4IGYyN2ZlYjQuLjlmNmE2ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnN4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnN4ZmFjZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmYWR0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZmFkdC5jCmluZGV4IGMwMTYzMzUuLmY0M2ZiZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmYWR0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YmZhZHQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmaW5kLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZmluZC5jCmluZGV4IDEwNTRkZmQuLmUyNTIxODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmaW5kLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YmZpbmQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJpbnN0YWwuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJpbnN0YWwuYwppbmRleCA2M2U4MjMyLi43ZWMwMmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiaW5zdGFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90Ymluc3RhbC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS90YnV0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RidXRpbHMuYwppbmRleCAxZjE1NDk3Li4wMjcyM2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RidXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RidXRpbHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YnhmYWNlLmMKaW5kZXggYTg4ZjAyYi4uNTIxN2E2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90YnhmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YnhmYWNlLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZyb290LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZyb290LmMKaW5kZXggODVlYTgzNC4uZGRhNmU4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90Ynhmcm9vdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZnJvb3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRhbGxvYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGFsbG9jLmMKaW5kZXggNzU4MGY2Yi4uM2Q3MDZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGFsbG9jLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGFsbG9jLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Y29weS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGNvcHkuYwppbmRleCBmODU3YzVlLi45N2VjMzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Y29weS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRjb3B5LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVidWcuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWJ1Zy5jCmluZGV4IDUyN2Q3MjkuLjk4MzUxMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWJ1Zy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWJ1Zy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDYwLDggKzQ2MCw3IEBACiB2b2lkCiBhY3BpX3V0X3ZhbHVlX2V4aXQodTMyIGxpbmVfbnVtYmVyLAogCQkgICBjb25zdCBjaGFyICpmdW5jdGlvbl9uYW1lLAotCQkgICBjb25zdCBjaGFyICptb2R1bGVfbmFtZSwKLQkJICAgdTMyIGNvbXBvbmVudF9pZCwgYWNwaV9pbnRlZ2VyIHZhbHVlKQorCQkgICBjb25zdCBjaGFyICptb2R1bGVfbmFtZSwgdTMyIGNvbXBvbmVudF9pZCwgdTY0IHZhbHVlKQogewogCiAJYWNwaV9kZWJ1Z19wcmludChBQ1BJX0xWX0ZVTkNUSU9OUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWxldGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWxldGUuYwppbmRleCA5NmUyNmU3Li4xNmI1MWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVsZXRlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlbGV0ZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRldmFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZXZhbC5jCmluZGV4IDVkNTRlMzYuLjdmNWU3MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGV2YWwuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM0OCw3ICszNDgsNyBAQAogYWNwaV9zdGF0dXMKIGFjcGlfdXRfZXZhbHVhdGVfbnVtZXJpY19vYmplY3QoY2hhciAqb2JqZWN0X25hbWUsCiAJCQkJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlLAotCQkJCWFjcGlfaW50ZWdlciAqdmFsdWUpCisJCQkJdTY0ICp2YWx1ZSkKIHsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYzsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Z2xvYmFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Z2xvYmFsLmMKaW5kZXggM2YyYzY4Zi4uZWRhM2U2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGdsb2JhbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRnbG9iYWwuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIzNCw3ICsyMzQsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWNoYXIgYWNwaV91dF9oZXhfdG9fYXNjaWlfY2hhcihhY3BpX2ludGVnZXIgaW50ZWdlciwgdTMyIHBvc2l0aW9uKQorY2hhciBhY3BpX3V0X2hleF90b19hc2NpaV9jaGFyKHU2NCBpbnRlZ2VyLCB1MzIgcG9zaXRpb24pCiB7CiAKIAlyZXR1cm4gKGFjcGlfZ2JsX2hleF90b19hc2NpaVsoaW50ZWdlciA+PiBwb3NpdGlvbikgJiAweEZdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpZHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpZHMuYwppbmRleCA1MmVhYWU0Li4xMzk3ZmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0aWRzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGlkcy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOSwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGluaXQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpbml0LmMKaW5kZXggOWQwOTE5ZWIuLmEzOWM5M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGluaXQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRsb2NrLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bG9jay5jCmluZGV4IDI1ZTAzMTIuLmIwODFjZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRsb2NrLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGxvY2suYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDksIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtYXRoLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bWF0aC5jCmluZGV4IGM5ZjY4MmQuLjM1MDU5YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtYXRoLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG1hdGguYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03MCw5ICs3MCw4IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGFjcGlfc3RhdHVzCi1hY3BpX3V0X3Nob3J0X2RpdmlkZShhY3BpX2ludGVnZXIgZGl2aWRlbmQsCi0JCSAgICAgdTMyIGRpdmlzb3IsCi0JCSAgICAgYWNwaV9pbnRlZ2VyICogb3V0X3F1b3RpZW50LCB1MzIgKiBvdXRfcmVtYWluZGVyKQorYWNwaV91dF9zaG9ydF9kaXZpZGUodTY0IGRpdmlkZW5kLAorCQkgICAgIHUzMiBkaXZpc29yLCB1NjQgKm91dF9xdW90aWVudCwgdTMyICpvdXRfcmVtYWluZGVyKQogewogCXVuaW9uIHVpbnQ2NF9vdmVybGF5IGRpdmlkZW5kX292bDsKIAl1bmlvbiB1aW50NjRfb3ZlcmxheSBxdW90aWVudDsKQEAgLTEyNiw5ICsxMjUsOCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogYWNwaV9zdGF0dXMKLWFjcGlfdXRfZGl2aWRlKGFjcGlfaW50ZWdlciBpbl9kaXZpZGVuZCwKLQkgICAgICAgYWNwaV9pbnRlZ2VyIGluX2Rpdmlzb3IsCi0JICAgICAgIGFjcGlfaW50ZWdlciAqIG91dF9xdW90aWVudCwgYWNwaV9pbnRlZ2VyICogb3V0X3JlbWFpbmRlcikKK2FjcGlfdXRfZGl2aWRlKHU2NCBpbl9kaXZpZGVuZCwKKwkgICAgICAgdTY0IGluX2Rpdmlzb3IsIHU2NCAqb3V0X3F1b3RpZW50LCB1NjQgKm91dF9yZW1haW5kZXIpCiB7CiAJdW5pb24gdWludDY0X292ZXJsYXkgZGl2aWRlbmQ7CiAJdW5pb24gdWludDY0X292ZXJsYXkgZGl2aXNvcjsKQEAgLTE5OSw5ICsxOTcsOCBAQAogCQkgKiBUaGUgNjQtYml0IHJlbWFpbmRlciBtdXN0IGJlIGdlbmVyYXRlZC4KIAkJICovCiAJCXBhcnRpYWwxID0gcXVvdGllbnQucGFydC5sbyAqIGRpdmlzb3IucGFydC5oaTsKLQkJcGFydGlhbDIuZnVsbCA9Ci0JCSAgICAoYWNwaV9pbnRlZ2VyKSBxdW90aWVudC5wYXJ0LmxvICogZGl2aXNvci5wYXJ0LmxvOwotCQlwYXJ0aWFsMy5mdWxsID0gKGFjcGlfaW50ZWdlcikgcGFydGlhbDIucGFydC5oaSArIHBhcnRpYWwxOworCQlwYXJ0aWFsMi5mdWxsID0gKHU2NCkgcXVvdGllbnQucGFydC5sbyAqIGRpdmlzb3IucGFydC5sbzsKKwkJcGFydGlhbDMuZnVsbCA9ICh1NjQpIHBhcnRpYWwyLnBhcnQuaGkgKyBwYXJ0aWFsMTsKIAogCQlyZW1haW5kZXIucGFydC5oaSA9IHBhcnRpYWwzLnBhcnQubG87CiAJCXJlbWFpbmRlci5wYXJ0LmxvID0gcGFydGlhbDIucGFydC5sbzsKQEAgLTI1Nyw5ICsyNTQsOCBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBhY3BpX3N0YXR1cwotYWNwaV91dF9zaG9ydF9kaXZpZGUoYWNwaV9pbnRlZ2VyIGluX2RpdmlkZW5kLAotCQkgICAgIHUzMiBkaXZpc29yLAotCQkgICAgIGFjcGlfaW50ZWdlciAqIG91dF9xdW90aWVudCwgdTMyICogb3V0X3JlbWFpbmRlcikKK2FjcGlfdXRfc2hvcnRfZGl2aWRlKHU2NCBpbl9kaXZpZGVuZCwKKwkJICAgICB1MzIgZGl2aXNvciwgdTY0ICpvdXRfcXVvdGllbnQsIHUzMiAqb3V0X3JlbWFpbmRlcikKIHsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfc2hvcnRfZGl2aWRlKTsKQEAgLTI4NCw5ICsyODAsOCBAQAogfQogCiBhY3BpX3N0YXR1cwotYWNwaV91dF9kaXZpZGUoYWNwaV9pbnRlZ2VyIGluX2RpdmlkZW5kLAotCSAgICAgICBhY3BpX2ludGVnZXIgaW5fZGl2aXNvciwKLQkgICAgICAgYWNwaV9pbnRlZ2VyICogb3V0X3F1b3RpZW50LCBhY3BpX2ludGVnZXIgKiBvdXRfcmVtYWluZGVyKQorYWNwaV91dF9kaXZpZGUodTY0IGluX2RpdmlkZW5kLAorCSAgICAgICB1NjQgaW5fZGl2aXNvciwgdTY0ICpvdXRfcXVvdGllbnQsIHU2NCAqb3V0X3JlbWFpbmRlcikKIHsKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X2RpdmlkZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtaXNjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bWlzYy5jCmluZGV4IDZjNmE1MTMuLjMyOTgyZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtaXNjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG1pc2MuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03MjQsMTMgKzcyNCwxMiBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWFjcGlfc3RhdHVzCi1hY3BpX3V0X3N0cnRvdWw2NChjaGFyICpzdHJpbmcsIHUzMiBiYXNlLCBhY3BpX2ludGVnZXIgKiByZXRfaW50ZWdlcikKK2FjcGlfc3RhdHVzIGFjcGlfdXRfc3RydG91bDY0KGNoYXIgKnN0cmluZywgdTMyIGJhc2UsIHU2NCAqIHJldF9pbnRlZ2VyKQogewogCXUzMiB0aGlzX2RpZ2l0ID0gMDsKLQlhY3BpX2ludGVnZXIgcmV0dXJuX3ZhbHVlID0gMDsKLQlhY3BpX2ludGVnZXIgcXVvdGllbnQ7Ci0JYWNwaV9pbnRlZ2VyIGRpdmlkZW5kOworCXU2NCByZXR1cm5fdmFsdWUgPSAwOworCXU2NCBxdW90aWVudDsKKwl1NjQgZGl2aWRlbmQ7CiAJdTMyIHRvX2ludGVnZXJfb3AgPSAoYmFzZSA9PSBBQ1BJX0FOWV9CQVNFKTsKIAl1MzIgbW9kZTMyID0gKGFjcGlfZ2JsX2ludGVnZXJfYnl0ZV93aWR0aCA9PSA0KTsKIAl1OCB2YWxpZF9kaWdpdHMgPSAwOwpAQCAtODQ0LDkgKzg0Myw4IEBACiAKIAkJLyogRGl2aWRlIHRoZSBkaWdpdCBpbnRvIHRoZSBjb3JyZWN0IHBvc2l0aW9uICovCiAKLQkJKHZvaWQpCi0JCSAgICBhY3BpX3V0X3Nob3J0X2RpdmlkZSgoZGl2aWRlbmQgLSAoYWNwaV9pbnRlZ2VyKSB0aGlzX2RpZ2l0KSwKLQkJCQkJIGJhc2UsICZxdW90aWVudCwgTlVMTCk7CisJCSh2b2lkKWFjcGlfdXRfc2hvcnRfZGl2aWRlKChkaXZpZGVuZCAtICh1NjQpIHRoaXNfZGlnaXQpLAorCQkJCQkgICBiYXNlLCAmcXVvdGllbnQsIE5VTEwpOwogCiAJCWlmIChyZXR1cm5fdmFsdWUgPiBxdW90aWVudCkgewogCQkJaWYgKHRvX2ludGVnZXJfb3ApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtdXRleC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG11dGV4LmMKaW5kZXggODBiYjY1MS4uNTVkMDE0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG11dGV4LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG11dGV4LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTAsNyArNTAsNyBAQAogLyogTG9jYWwgcHJvdG90eXBlcyAqLwogc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfdXRfY3JlYXRlX211dGV4KGFjcGlfbXV0ZXhfaGFuZGxlIG11dGV4X2lkKTsKIAotc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfdXRfZGVsZXRlX211dGV4KGFjcGlfbXV0ZXhfaGFuZGxlIG11dGV4X2lkKTsKK3N0YXRpYyB2b2lkIGFjcGlfdXRfZGVsZXRlX211dGV4KGFjcGlfbXV0ZXhfaGFuZGxlIG11dGV4X2lkKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xMTQsNyArMTE0LDcgQEAKIAkvKiBEZWxldGUgZWFjaCBwcmVkZWZpbmVkIG11dGV4IG9iamVjdCAqLwogCiAJZm9yIChpID0gMDsgaSA8IEFDUElfTlVNX01VVEVYOyBpKyspIHsKLQkJKHZvaWQpYWNwaV91dF9kZWxldGVfbXV0ZXgoaSk7CisJCWFjcGlfdXRfZGVsZXRlX211dGV4KGkpOwogCX0KIAogCS8qIERlbGV0ZSB0aGUgc3BpbmxvY2tzICovCkBAIC0xNDYsMTAgKzE0Niw2IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMih1dF9jcmVhdGVfbXV0ZXgsIG11dGV4X2lkKTsKIAotCWlmIChtdXRleF9pZCA+IEFDUElfTUFYX01VVEVYKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKLQl9Ci0KIAlpZiAoIWFjcGlfZ2JsX211dGV4X2luZm9bbXV0ZXhfaWRdLm11dGV4KSB7CiAJCXN0YXR1cyA9CiAJCSAgICBhY3BpX29zX2NyZWF0ZV9tdXRleCgmYWNwaV9nYmxfbXV0ZXhfaW5mb1ttdXRleF9pZF0ubXV0ZXgpOwpAQCAtMTczLDIxICsxNjksMTUgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV91dF9kZWxldGVfbXV0ZXgoYWNwaV9tdXRleF9oYW5kbGUgbXV0ZXhfaWQpCitzdGF0aWMgdm9pZCBhY3BpX3V0X2RlbGV0ZV9tdXRleChhY3BpX211dGV4X2hhbmRsZSBtdXRleF9pZCkKIHsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKHV0X2RlbGV0ZV9tdXRleCwgbXV0ZXhfaWQpOwogCi0JaWYgKG11dGV4X2lkID4gQUNQSV9NQVhfTVVURVgpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwotCX0KLQogCWFjcGlfb3NfZGVsZXRlX211dGV4KGFjcGlfZ2JsX211dGV4X2luZm9bbXV0ZXhfaWRdLm11dGV4KTsKIAogCWFjcGlfZ2JsX211dGV4X2luZm9bbXV0ZXhfaWRdLm11dGV4ID0gTlVMTDsKIAlhY3BpX2dibF9tdXRleF9pbmZvW211dGV4X2lkXS50aHJlYWRfaWQgPSBBQ1BJX01VVEVYX05PVF9BQ1FVSVJFRDsKLQotCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0b2JqZWN0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0b2JqZWN0LmMKaW5kZXggNDJlNjU4Yi4uMzM1NmYwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG9iamVjdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRvYmplY3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRyZXNyYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHJlc3JjLmMKaW5kZXggOTFiN2MwMC4uNzk2NTkxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHJlc3JjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHJlc3JjLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHN0YXRlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0c3RhdGUuYwppbmRleCAwNDQwYzk1Li5kMzVkMTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0c3RhdGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0c3RhdGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jCmluZGV4IGIxZjVmNjguLmRiOWQ4Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggY2FkYTczZi4uNThkMmM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC0zMjQsOCArMzI0LDggQEAKIAkJCQlzdHJuY3B5KHB0ciwgZWxlbWVudC0+c3RyaW5nLnBvaW50ZXIsIDMyKTsKIAkJCWVsc2UgaWYgKGVsZW1lbnQtPnR5cGUgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKIAkJCQlzdHJuY3B5KHB0ciwgKHU4ICopJmVsZW1lbnQtPmludGVnZXIudmFsdWUsCi0JCQkJCXNpemVvZihhY3BpX2ludGVnZXIpKTsKLQkJCQlwdHJbc2l6ZW9mKGFjcGlfaW50ZWdlcildID0gMDsKKwkJCQkJc2l6ZW9mKHU2NCkpOworCQkJCXB0cltzaXplb2YodTY0KV0gPSAwOwogCQkJfSBlbHNlCiAJCQkJKnB0ciA9IDA7IC8qIGRvbid0IGhhdmUgdmFsdWUgKi8KIAkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXR0b24uYyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwppbmRleCA4YTk1ZTgzLi5mNTNmYmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCkBAIC00MjIsMTEgKzQyMiwxMCBAQAogCiAJaWYgKGRldmljZS0+d2FrZXVwLmZsYWdzLnZhbGlkKSB7CiAJCS8qIEJ1dHRvbidzIEdQRSBpcyBydW4td2FrZSBHUEUgKi8KLQkJYWNwaV9zZXRfZ3BlX3R5cGUoZGV2aWNlLT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQkgIGRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJICBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOKTsKIAkJYWNwaV9lbmFibGVfZ3BlKGRldmljZS0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJZGV2aWNlLT53YWtldXAuZ3BlX251bWJlcik7CisJCQkJZGV2aWNlLT53YWtldXAuZ3BlX251bWJlciwKKwkJCQlBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOKTsKKwkJZGV2aWNlLT53YWtldXAucnVuX3dha2VfY291bnQrKzsKIAkJZGV2aWNlLT53YWtldXAuc3RhdGUuZW5hYmxlZCA9IDE7CiAJfQogCkBAIC00NDYsNiArNDQ1LDE0IEBACiB7CiAJc3RydWN0IGFjcGlfYnV0dG9uICpidXR0b24gPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKKwlpZiAoZGV2aWNlLT53YWtldXAuZmxhZ3MudmFsaWQpIHsKKwkJYWNwaV9kaXNhYmxlX2dwZShkZXZpY2UtPndha2V1cC5ncGVfZGV2aWNlLAorCQkJCWRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJQUNQSV9HUEVfVFlQRV9XQUtFX1JVTik7CisJCWRldmljZS0+d2FrZXVwLnJ1bl93YWtlX2NvdW50LS07CisJCWRldmljZS0+d2FrZXVwLnN0YXRlLmVuYWJsZWQgPSAwOworCX0KKwogCWFjcGlfYnV0dG9uX3JlbW92ZV9mcyhkZXZpY2UpOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGJ1dHRvbi0+aW5wdXQpOwogCWtmcmVlKGJ1dHRvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZG9jay5jIGIvZHJpdmVycy9hY3BpL2RvY2suYwppbmRleCBiYmMyYzEzLi5iMjU4NmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZG9jay5jCisrKyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKQEAgLTkzNSw2ICs5MzUsNyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRkOwogCiAJaWQgPSBkb2NrX3N0YXRpb25fY291bnQ7CisJbWVtc2V0KCZkcywgMCwgc2l6ZW9mKGRzKSk7CiAJZGQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShOVUxMLCAiZG9jayIsIGlkLCAmZHMsIHNpemVvZihkcykpOwogCWlmIChJU19FUlIoZGQpKQogCQlyZXR1cm4gUFRSX0VSUihkZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZWMuYyBiL2RyaXZlcnMvYWNwaS9lYy5jCmluZGV4IGQ2NDcxYmIuLmQ3YTZiYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9lYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9lYy5jCkBAIC0zMDcsNyArMzA3LDExIEBACiAJcHJfZGVidWcoUFJFRklYICJ0cmFuc2FjdGlvbiBzdGFydFxuIik7CiAJLyogZGlzYWJsZSBHUEUgZHVyaW5nIHRyYW5zYWN0aW9uIGlmIHN0b3JtIGlzIGRldGVjdGVkICovCiAJaWYgKHRlc3RfYml0KEVDX0ZMQUdTX0dQRV9TVE9STSwgJmVjLT5mbGFncykpIHsKLQkJYWNwaV9kaXNhYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKKwkJLyoKKwkJICogSXQgaGFzIHRvIGJlIGRpc2FibGVkIGF0IHRoZSBoYXJkd2FyZSBsZXZlbCByZWdhcmRsZXNzIG9mIHRoZQorCQkgKiBHUEUgcmVmZXJlbmNlIGNvdW50aW5nLCBzbyB0aGF0IGl0IGRvZXNuJ3QgdHJpZ2dlci4KKwkJICovCisJCWFjcGlfc2V0X2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9ESVNBQkxFKTsKIAl9CiAKIAlzdGF0dXMgPSBhY3BpX2VjX3RyYW5zYWN0aW9uX3VubG9ja2VkKGVjLCB0KTsKQEAgLTMxNiw4ICszMjAsMTIgQEAKIAllY19jaGVja19zY2lfc3luYyhlYywgYWNwaV9lY19yZWFkX3N0YXR1cyhlYykpOwogCWlmICh0ZXN0X2JpdChFQ19GTEFHU19HUEVfU1RPUk0sICZlYy0+ZmxhZ3MpKSB7CiAJCW1zbGVlcCgxKTsKLQkJLyogaXQgaXMgc2FmZSB0byBlbmFibGUgR1BFIG91dHNpZGUgb2YgdHJhbnNhY3Rpb24gKi8KLQkJYWNwaV9lbmFibGVfZ3BlKE5VTEwsIGVjLT5ncGUpOworCQkvKgorCQkgKiBJdCBpcyBzYWZlIHRvIGVuYWJsZSB0aGUgR1BFIG91dHNpZGUgb2YgdGhlIHRyYW5zYWN0aW9uLiAgVXNlCisJCSAqIGFjcGlfc2V0X2dwZSgpIGZvciB0aGF0LCBzaW5jZSB3ZSB1c2VkIGl0IHRvIGRpc2FibGUgdGhlIEdQRQorCQkgKiBhYm92ZS4KKwkJICovCisJCWFjcGlfc2V0X2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9FTkFCTEUpOwogCX0gZWxzZSBpZiAodC0+aXJxX2NvdW50ID4gQUNQSV9FQ19TVE9STV9USFJFU0hPTEQpIHsKIAkJcHJfaW5mbyhQUkVGSVggIkdQRSBzdG9ybSBkZXRlY3RlZCwgIgogCQkJInRyYW5zYWN0aW9ucyB3aWxsIHVzZSBwb2xsaW5nIG1vZGVcbiIpOwpAQCAtNTg5LDcgKzU5Nyw3IEBACiAKIHN0YXRpYyBhY3BpX3N0YXR1cwogYWNwaV9lY19zcGFjZV9oYW5kbGVyKHUzMiBmdW5jdGlvbiwgYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MsCi0JCSAgICAgIHUzMiBiaXRzLCBhY3BpX2ludGVnZXIgKnZhbHVlLAorCQkgICAgICB1MzIgYml0cywgdTY0ICp2YWx1ZSwKIAkJICAgICAgdm9pZCAqaGFuZGxlcl9jb250ZXh0LCB2b2lkICpyZWdpb25fY29udGV4dCkKIHsKIAlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSBoYW5kbGVyX2NvbnRleHQ7CkBAIC02MjAsNyArNjI4LDcgQEAKIAkJKythZGRyZXNzOwogCQlpZiAoZnVuY3Rpb24gPT0gQUNQSV9SRUFEKSB7CiAJCQlyZXN1bHQgPSBhY3BpX2VjX3JlYWQoZWMsIGFkZHJlc3MsICZ0ZW1wKTsKLQkJCSgqdmFsdWUpIHw9ICgoYWNwaV9pbnRlZ2VyKXRlbXApIDw8IGk7CisJCQkoKnZhbHVlKSB8PSAoKHU2NCl0ZW1wKSA8PCBpOwogCQl9IGVsc2UgewogCQkJdGVtcCA9IDB4ZmYgJiAoKCp2YWx1ZSkgPj4gaSk7CiAJCQlyZXN1bHQgPSBhY3BpX2VjX3dyaXRlKGVjLCBhZGRyZXNzLCB0ZW1wKTsKQEAgLTc4OCw4ICs3OTYsOCBAQAogCQkJCSAgJmFjcGlfZWNfZ3BlX2hhbmRsZXIsIGVjKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybiAtRU5PREVWOwotCWFjcGlfc2V0X2dwZV90eXBlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7Ci0JYWNwaV9lbmFibGVfZ3BlKE5VTEwsIGVjLT5ncGUpOworCisJYWNwaV9lbmFibGVfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7CiAJc3RhdHVzID0gYWNwaV9pbnN0YWxsX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcihlYy0+aGFuZGxlLAogCQkJCQkJICAgIEFDUElfQURSX1NQQUNFX0VDLAogCQkJCQkJICAgICZhY3BpX2VjX3NwYWNlX2hhbmRsZXIsCkBAIC04MDYsNiArODE0LDcgQEAKIAkJfSBlbHNlIHsKIAkJCWFjcGlfcmVtb3ZlX2dwZV9oYW5kbGVyKE5VTEwsIGVjLT5ncGUsCiAJCQkJJmFjcGlfZWNfZ3BlX2hhbmRsZXIpOworCQkJYWNwaV9kaXNhYmxlX2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CkBAIC04MTYsNiArODI1LDcgQEAKIAogc3RhdGljIHZvaWQgZWNfcmVtb3ZlX2hhbmRsZXJzKHN0cnVjdCBhY3BpX2VjICplYykKIHsKKwlhY3BpX2Rpc2FibGVfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7CiAJaWYgKEFDUElfRkFJTFVSRShhY3BpX3JlbW92ZV9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoZWMtPmhhbmRsZSwKIAkJCQlBQ1BJX0FEUl9TUEFDRV9FQywgJmFjcGlfZWNfc3BhY2VfaGFuZGxlcikpKQogCQlwcl9lcnIoUFJFRklYICJmYWlsZWQgdG8gcmVtb3ZlIHNwYWNlIGhhbmRsZXJcbiIpOwpAQCAtMTA1NywxNiArMTA2NywxNiBAQAogc3RhdGljIGludCBhY3BpX2VjX3N1c3BlbmQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7Ci0JLyogU3RvcCB1c2luZyBHUEUgKi8KLQlhY3BpX2Rpc2FibGVfZ3BlKE5VTEwsIGVjLT5ncGUpOworCS8qIFN0b3AgdXNpbmcgdGhlIEdQRSwgYnV0IGtlZXAgaXQgcmVmZXJlbmNlIGNvdW50ZWQuICovCisJYWNwaV9zZXRfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX0RJU0FCTEUpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfZWNfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBhY3BpX2VjICplYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKLQkvKiBFbmFibGUgdXNlIG9mIEdQRSBiYWNrICovCi0JYWNwaV9lbmFibGVfZ3BlKE5VTEwsIGVjLT5ncGUpOworCS8qIEVuYWJsZSB0aGUgR1BFIGFnYWluLCBidXQgZG9uJ3QgcmVmZXJlbmNlIGNvdW50IGl0IG9uY2UgbW9yZS4gKi8KKwlhY3BpX3NldF9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfRU5BQkxFKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2dsdWUuYyBiL2RyaXZlcnMvYWNwaS9nbHVlLmMKaW5kZXggNGM4ZmNmZi4uNmQ1YjY0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2dsdWUuYworKysgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCkBAIC04Nyw3ICs4Nyw3IEBACiAvKiBHZXQgZGV2aWNlJ3MgaGFuZGxlciBwZXIgaXRzIGFkZHJlc3MgdW5kZXIgaXRzIHBhcmVudCAqLwogc3RydWN0IGFjcGlfZmluZF9jaGlsZCB7CiAJYWNwaV9oYW5kbGUgaGFuZGxlOwotCWFjcGlfaW50ZWdlciBhZGRyZXNzOworCXU2NCBhZGRyZXNzOwogfTsKIAogc3RhdGljIGFjcGlfc3RhdHVzCkBAIC0xMDYsNyArMTA2LDcgQEAKIAlyZXR1cm4gQUVfT0s7CiB9CiAKLWFjcGlfaGFuZGxlIGFjcGlfZ2V0X2NoaWxkKGFjcGlfaGFuZGxlIHBhcmVudCwgYWNwaV9pbnRlZ2VyIGFkZHJlc3MpCithY3BpX2hhbmRsZSBhY3BpX2dldF9jaGlsZChhY3BpX2hhbmRsZSBwYXJlbnQsIHU2NCBhZGRyZXNzKQogewogCXN0cnVjdCBhY3BpX2ZpbmRfY2hpbGQgZmluZCA9IHsgTlVMTCwgYWRkcmVzcyB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaCBiL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCmluZGV4IGNiMjhlMDUuLjljNGM5NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCkBAIC0zNiw4ICszNiw2IEBACiBpbnQgYWNwaV9wb3dlcl9pbml0KHZvaWQpOwogaW50IGFjcGlfZGV2aWNlX3NsZWVwX3dha2Uoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5hYmxlLCBpbnQgc2xlZXBfc3RhdGUsIGludCBkZXZfc3RhdGUpOwotaW50IGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsIGludCBzbGVlcF9zdGF0ZSk7Ci1pbnQgYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYpOwogaW50IGFjcGlfcG93ZXJfZ2V0X2luZmVycmVkX3N0YXRlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIGludCBhY3BpX3Bvd2VyX3RyYW5zaXRpb24oc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCBzdGF0ZSk7CiBleHRlcm4gaW50IGFjcGlfcG93ZXJfbm9jaGVjazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9vc2wuYyBiL2RyaXZlcnMvYWNwaS9vc2wuYwppbmRleCAwMmU4NDY0Li44ZTZkODY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvb3NsLmMKKysrIGIvZHJpdmVycy9hY3BpL29zbC5jCkBAIC00MzYsNyArNDM2LDcgQEAKICAqIFJ1bm5pbmcgaW4gaW50ZXJwcmV0ZXIgdGhyZWFkIGNvbnRleHQsIHNhZmUgdG8gc2xlZXAKICAqLwogCi12b2lkIGFjcGlfb3Nfc2xlZXAoYWNwaV9pbnRlZ2VyIG1zKQordm9pZCBhY3BpX29zX3NsZWVwKHU2NCBtcykKIHsKIAlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyhtcykpOwogfQpAQCAtNjAzLDcgKzYwMyw3IEBACiAKIGFjcGlfc3RhdHVzCiBhY3BpX29zX3dyaXRlX3BjaV9jb25maWd1cmF0aW9uKHN0cnVjdCBhY3BpX3BjaV9pZCAqIHBjaV9pZCwgdTMyIHJlZywKLQkJCQlhY3BpX2ludGVnZXIgdmFsdWUsIHUzMiB3aWR0aCkKKwkJCQl1NjQgdmFsdWUsIHUzMiB3aWR0aCkKIHsKIAlpbnQgcmVzdWx0LCBzaXplOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX2JpbmQuYyBiL2RyaXZlcnMvYWNwaS9wY2lfYmluZC5jCmluZGV4IGE1YTc3YjcuLjJlZjA0MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfYmluZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfYmluZC5jCkBAIC0yNiw3ICsyNiw5IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKQEAgLTM4LDcgKzQwLDEzIEBACiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAogCWRldiA9IGFjcGlfZ2V0X3BjaV9kZXYoZGV2aWNlLT5oYW5kbGUpOwotCWlmICghZGV2IHx8ICFkZXYtPnN1Ym9yZGluYXRlKQorCWlmICghZGV2KQorCQlnb3RvIG91dDsKKworCWRldmljZV9zZXRfcnVuX3dha2UoJmRldi0+ZGV2LCBmYWxzZSk7CisJcGNpX2FjcGlfcmVtb3ZlX3BtX25vdGlmaWVyKGRldmljZSk7CisKKwlpZiAoIWRldi0+c3Vib3JkaW5hdGUpCiAJCWdvdG8gb3V0OwogCiAJYWNwaV9wY2lfaXJxX2RlbF9wcnQoZGV2LT5zdWJvcmRpbmF0ZSk7CkBAIC02Miw2ICs3MCwxMCBAQAogCWlmICghZGV2KQogCQlyZXR1cm4gMDsKIAorCXBjaV9hY3BpX2FkZF9wbV9ub3RpZmllcihkZXZpY2UsIGRldik7CisJaWYgKGRldmljZS0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlKQorCQlkZXZpY2Vfc2V0X3J1bl93YWtlKCZkZXYtPmRldiwgdHJ1ZSk7CisKIAkvKgogCSAqIEluc3RhbGwgdGhlICdiaW5kJyBmdW5jdGlvbiB0byBmYWNpbGl0YXRlIGNhbGxiYWNrcyBmb3IKIAkgKiBjaGlsZHJlbiBvZiB0aGUgUDJQIGJyaWRnZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKaW5kZXggNjRmNTViNi4uZDcyNDczNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KQEAgLTUyOCw2ICs1MjksMTAgQEAKIAlpZiAoZmxhZ3MgIT0gYmFzZV9mbGFncykKIAkJYWNwaV9wY2lfb3NjX3N1cHBvcnQocm9vdCwgZmxhZ3MpOwogCisJcGNpX2FjcGlfYWRkX2J1c19wbV9ub3RpZmllcihkZXZpY2UsIHJvb3QtPmJ1cyk7CisJaWYgKGRldmljZS0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlKQorCQlkZXZpY2Vfc2V0X3J1bl93YWtlKHJvb3QtPmJ1cy0+YnJpZGdlLCB0cnVlKTsKKwogCXJldHVybiAwOwogCiBlbmQ6CkBAIC01NDksNiArNTU0LDkgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9wY2lfcm9vdCAqcm9vdCA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAorCWRldmljZV9zZXRfcnVuX3dha2Uocm9vdC0+YnVzLT5icmlkZ2UsIGZhbHNlKTsKKwlwY2lfYWNwaV9yZW1vdmVfYnVzX3BtX25vdGlmaWVyKGRldmljZSk7CisKIAlrZnJlZShyb290KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU1OCw2ICs1NjYsNyBAQAogCWlmIChhY3BpX3BjaV9kaXNhYmxlZCkKIAkJcmV0dXJuIDA7CiAKKwlwY2lfYWNwaV9jcnNfcXVpcmtzKCk7CiAJaWYgKGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9wY2lfcm9vdF9kcml2ZXIpIDwgMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wb3dlcl9tZXRlci5jIGIvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMKaW5kZXggZGM0ZmZhZC4uODM0YzVhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMKKysrIGIvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMKQEAgLTcxLDE3ICs3MSwxNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBwb3dlcl9tZXRlcl9pZHMpOwogCiBzdHJ1Y3QgYWNwaV9wb3dlcl9tZXRlcl9jYXBhYmlsaXRpZXMgewotCWFjcGlfaW50ZWdlcgkJZmxhZ3M7Ci0JYWNwaV9pbnRlZ2VyCQl1bml0czsKLQlhY3BpX2ludGVnZXIJCXR5cGU7Ci0JYWNwaV9pbnRlZ2VyCQlhY2N1cmFjeTsKLQlhY3BpX2ludGVnZXIJCXNhbXBsaW5nX3RpbWU7Ci0JYWNwaV9pbnRlZ2VyCQltaW5fYXZnX2ludGVydmFsOwotCWFjcGlfaW50ZWdlcgkJbWF4X2F2Z19pbnRlcnZhbDsKLQlhY3BpX2ludGVnZXIJCWh5c3RlcmVzaXM7Ci0JYWNwaV9pbnRlZ2VyCQljb25maWd1cmFibGVfY2FwOwotCWFjcGlfaW50ZWdlcgkJbWluX2NhcDsKLQlhY3BpX2ludGVnZXIJCW1heF9jYXA7CisJdTY0CQlmbGFnczsKKwl1NjQJCXVuaXRzOworCXU2NAkJdHlwZTsKKwl1NjQJCWFjY3VyYWN5OworCXU2NAkJc2FtcGxpbmdfdGltZTsKKwl1NjQJCW1pbl9hdmdfaW50ZXJ2YWw7CisJdTY0CQltYXhfYXZnX2ludGVydmFsOworCXU2NAkJaHlzdGVyZXNpczsKKwl1NjQJCWNvbmZpZ3VyYWJsZV9jYXA7CisJdTY0CQltaW5fY2FwOworCXU2NAkJbWF4X2NhcDsKIH07CiAKIHN0cnVjdCBhY3BpX3Bvd2VyX21ldGVyX3Jlc291cmNlIHsKQEAgLTkzLDkgKzkzLDkgQEAKIAlhY3BpX3N0cmluZwkJbW9kZWxfbnVtYmVyOwogCWFjcGlfc3RyaW5nCQlzZXJpYWxfbnVtYmVyOwogCWFjcGlfc3RyaW5nCQlvZW1faW5mbzsKLQlhY3BpX2ludGVnZXIJCXBvd2VyOwotCWFjcGlfaW50ZWdlcgkJY2FwOwotCWFjcGlfaW50ZWdlcgkJYXZnX2ludGVydmFsOworCXU2NAkJcG93ZXI7CisJdTY0CQljYXA7CisJdTY0CQlhdmdfaW50ZXJ2YWw7CiAJaW50CQkJc2Vuc29yc192YWxpZDsKIAl1bnNpZ25lZCBsb25nCQlzZW5zb3JzX2xhc3RfdXBkYXRlZDsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUJc2Vuc29yc1tOVU1fU0VOU09SU107CkBAIC00MDIsNyArNDAyLDcgQEAKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldiA9IHRvX2FjcGlfZGV2aWNlKGRldik7CiAJc3RydWN0IGFjcGlfcG93ZXJfbWV0ZXJfcmVzb3VyY2UgKnJlc291cmNlID0gYWNwaV9kZXYtPmRyaXZlcl9kYXRhOwotCWFjcGlfaW50ZWdlciB2YWwgPSAwOworCXU2NCB2YWwgPSAwOwogCiAJc3dpdGNoIChhdHRyLT5pbmRleCkgewogCWNhc2UgMDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKaW5kZXggN2MwNDQxZi4uMzdkZmNlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKQEAgLTExMCw2ICsxMTAsMTQgQEAKIAkgIERNSV9NQVRDSChETUlfQklPU19WRU5ET1IsIlBob2VuaXggVGVjaG5vbG9naWVzIExURCIpLAogCSAgRE1JX01BVENIKERNSV9CSU9TX1ZFUlNJT04sIlNIRTg0NU0wLjg2Qy4wMDEzLkQuMDMwMjEzMTMwNyIpfSwKIAkgKHZvaWQgKikyfSwKKwl7IHNldF9tYXhfY3N0YXRlLCAiUGF2aWxpb24genY1MDAwIiwgeworCSAgRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSGV3bGV0dC1QYWNrYXJkIiksCisJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiUGF2aWxpb24genY1MDAwIChEUzUwMkEjQUJBKSIpfSwKKwkgKHZvaWQgKikxfSwKKwl7IHNldF9tYXhfY3N0YXRlLCAiQXN1cyBMODQwMEIiLCB7CisJICBETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBU1VTVGVLIENvbXB1dGVyIEluYy4iKSwKKwkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJMODQwMEIgc2VyaWVzIE5vdGVib29rIFBDIil9LAorCSAodm9pZCAqKTF9LAogCXt9LAogfTsKIApAQCAtMzUyLDcgKzM2MCw3IEBACiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2dldF9wb3dlcl9pbmZvX2NzdChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7Ci0JYWNwaV9pbnRlZ2VyIGNvdW50OworCXU2NCBjb3VudDsKIAlpbnQgY3VycmVudF9jb3VudDsKIAlpbnQgaTsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwpAQCAtODcyLDEyICs4ODAsMTQgQEAKIAkJcmV0dXJuKGFjcGlfaWRsZV9lbnRlcl9jMShkZXYsIHN0YXRlKSk7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICY9IH5UU19QT0xMSU5HOwotCS8qCi0JICogVFNfUE9MTElORy1jbGVhcmVkIHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdGVzdAotCSAqIE5FRURfUkVTQ0hFRDoKLQkgKi8KLQlzbXBfbWIoKTsKKwlpZiAoY3gtPmVudHJ5X21ldGhvZCAhPSBBQ1BJX0NTVEFURV9GRkgpIHsKKwkJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJj0gflRTX1BPTExJTkc7CisJCS8qCisJCSAqIFRTX1BPTExJTkctY2xlYXJlZCBzdGF0ZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlIHRlc3QKKwkJICogTkVFRF9SRVNDSEVEOgorCQkgKi8KKwkJc21wX21iKCk7CisJfQogCiAJaWYgKHVubGlrZWx5KG5lZWRfcmVzY2hlZCgpKSkgewogCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyB8PSBUU19QT0xMSU5HOwpAQCAtOTU3LDEyICs5NjcsMTQgQEAKIAl9CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICY9IH5UU19QT0xMSU5HOwotCS8qCi0JICogVFNfUE9MTElORy1jbGVhcmVkIHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdGVzdAotCSAqIE5FRURfUkVTQ0hFRDoKLQkgKi8KLQlzbXBfbWIoKTsKKwlpZiAoY3gtPmVudHJ5X21ldGhvZCAhPSBBQ1BJX0NTVEFURV9GRkgpIHsKKwkJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJj0gflRTX1BPTExJTkc7CisJCS8qCisJCSAqIFRTX1BPTExJTkctY2xlYXJlZCBzdGF0ZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlIHRlc3QKKwkJICogTkVFRF9SRVNDSEVEOgorCQkgKi8KKwkJc21wX21iKCk7CisJfQogCiAJaWYgKHVubGlrZWx5KG5lZWRfcmVzY2hlZCgpKSkgewogCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyB8PSBUU19QT0xMSU5HOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZGMuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGRjLmMKaW5kZXggNzI0NzgxOS4uZTMwNmJhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZGMuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BkYy5jCkBAIC0xMjUsNiArMTI1LDggQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgaW50IGVhcmx5X3BkY19kb25lOworCiB2b2lkIGFjcGlfcHJvY2Vzc29yX3NldF9wZGMoYWNwaV9oYW5kbGUgaGFuZGxlKQogewogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0ICpvYmpfbGlzdDsKQEAgLTEzMiw2ICsxMzQsOSBAQAogCWlmIChhcmNoX2hhc19hY3BpX3BkYygpID09IGZhbHNlKQogCQlyZXR1cm47CiAKKwlpZiAoZWFybHlfcGRjX2RvbmUpCisJCXJldHVybjsKKwogCW9ial9saXN0ID0gYWNwaV9wcm9jZXNzb3JfYWxsb2NfcGRjKCk7CiAJaWYgKCFvYmpfbGlzdCkKIAkJcmV0dXJuOwpAQCAtMTUxLDYgKzE1NiwxMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBhcmFtX2Vhcmx5X3BkY19vcHRpbihjaGFyICpzKQoreworCWVhcmx5X3BkY19vcHRpbiA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJhY3BpX2Vhcmx5X3BkY19ldmFsIiwgcGFyYW1fZWFybHlfcGRjX29wdGluKTsKKwogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9fY3B1aW5pdGRhdGEgZWFybHlfcGRjX29wdGluX3RhYmxlW10gPSB7CiAJewogCXNldF9lYXJseV9wZGNfb3B0aW4sICJIUCBFbnZ5IiwgewpAQCAtMTkyLDQgKzIwNCw2IEBACiAJYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfUFJPQ0VTU09SLCBBQ1BJX1JPT1RfT0JKRUNULAogCQkJICAgIEFDUElfVUlOVDMyX01BWCwKIAkJCSAgICBlYXJseV9pbml0X3BkYywgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwllYXJseV9wZGNfZG9uZSA9IDE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCmluZGV4IDJjYWJhZGMuLmE5NTlmNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCkBAIC00MTMsNyArNDEzLDExIEBACiAJaWYgKHJlc3VsdCkKIAkJZ290byB1cGRhdGVfYmlvczsKIAotCXJldHVybiAwOworCS8qIFdlIG5lZWQgdG8gY2FsbCBfUFBDIG9uY2Ugd2hlbiBjcHVmcmVxIHN0YXJ0cyAqLworCWlmIChpZ25vcmVfcHBjICE9IDEpCisJCXJlc3VsdCA9IGFjcGlfcHJvY2Vzc29yX2dldF9wbGF0Zm9ybV9saW1pdChwcik7CisKKwlyZXR1cm4gcmVzdWx0OwogCiAJLyoKIAkgKiBIYXZpbmcgX1BQQyBidXQgbWlzc2luZyBmcmVxdWVuY2llcyAoX1BTUywgX1BDVCkgaXMgYSB2ZXJ5IGdvb2QgaGludCB0aGF0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCmluZGV4IDFjNWQ3YTguLjdkZWQ3NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCkBAIC02NjAsNyArNjYwLDcgQEAKIAogI2lmZGVmIENPTkZJR19YODYKIHN0YXRpYyBpbnQgYWNwaV90aHJvdHRsaW5nX3JkbXNyKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCi0JCQkJCWFjcGlfaW50ZWdlciAqIHZhbHVlKQorCQkJCQl1NjQgKnZhbHVlKQogewogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYzsKIAl1NjQgbXNyX2hpZ2gsIG1zcl9sb3c7CkBAIC02ODEsMTMgKzY4MSwxMyBAQAogCQlyZG1zcl9zYWZlKE1TUl9JQTMyX1RIRVJNX0NPTlRST0wsCiAJCQkodTMyICopJm1zcl9sb3cgLCAodTMyICopICZtc3JfaGlnaCk7CiAJCW1zciA9IChtc3JfaGlnaCA8PCAzMikgfCBtc3JfbG93OwotCQkqdmFsdWUgPSAoYWNwaV9pbnRlZ2VyKSBtc3I7CisJCSp2YWx1ZSA9ICh1NjQpIG1zcjsKIAkJcmV0ID0gMDsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhY3BpX3Rocm90dGxpbmdfd3Jtc3Ioc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciwgYWNwaV9pbnRlZ2VyIHZhbHVlKQorc3RhdGljIGludCBhY3BpX3Rocm90dGxpbmdfd3Jtc3Ioc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciwgdTY0IHZhbHVlKQogewogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYzsKIAl1bnNpZ25lZCBpbnQgY3B1OwpAQCAtNzExLDE0ICs3MTEsMTQgQEAKIH0KICNlbHNlCiBzdGF0aWMgaW50IGFjcGlfdGhyb3R0bGluZ19yZG1zcihzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLAotCQkJCWFjcGlfaW50ZWdlciAqIHZhbHVlKQorCQkJCXU2NCAqdmFsdWUpCiB7CiAJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAogCQkiSEFSRFdBUkUgYWRkciBzcGFjZSxOT1Qgc3VwcG9ydGVkIHlldFxuIik7CiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IGFjcGlfdGhyb3R0bGluZ193cm1zcihzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLCBhY3BpX2ludGVnZXIgdmFsdWUpCitzdGF0aWMgaW50IGFjcGlfdGhyb3R0bGluZ193cm1zcihzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLCB1NjQgdmFsdWUpCiB7CiAJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAogCQkiSEFSRFdBUkUgYWRkciBzcGFjZSxOT1Qgc3VwcG9ydGVkIHlldFxuIik7CkBAIC03MjcsNyArNzI3LDcgQEAKICNlbmRpZgogCiBzdGF0aWMgaW50IGFjcGlfcmVhZF90aHJvdHRsaW5nX3N0YXR1cyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLAotCQkJCQlhY3BpX2ludGVnZXIgKnZhbHVlKQorCQkJCQl1NjQgKnZhbHVlKQogewogCXUzMiBiaXRfd2lkdGgsIGJpdF9vZmZzZXQ7CiAJdTY0IHB0Y192YWx1ZTsKQEAgLTc0Niw3ICs3NDYsNyBAQAogCQkJCSAgYWRkcmVzcywgKHUzMiAqKSAmcHRjX3ZhbHVlLAogCQkJCSAgKHUzMikgKGJpdF93aWR0aCArIGJpdF9vZmZzZXQpKTsKIAkJcHRjX21hc2sgPSAoMSA8PCBiaXRfd2lkdGgpIC0gMTsKLQkJKnZhbHVlID0gKGFjcGlfaW50ZWdlcikgKChwdGNfdmFsdWUgPj4gYml0X29mZnNldCkgJiBwdGNfbWFzayk7CisJCSp2YWx1ZSA9ICh1NjQpICgocHRjX3ZhbHVlID4+IGJpdF9vZmZzZXQpICYgcHRjX21hc2spOwogCQlyZXQgPSAwOwogCQlicmVhazsKIAljYXNlIEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFOgpAQCAtNzYwLDcgKzc2MCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgYWNwaV93cml0ZV90aHJvdHRsaW5nX3N0YXRlKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCi0JCQkJYWNwaV9pbnRlZ2VyIHZhbHVlKQorCQkJCXU2NCB2YWx1ZSkKIHsKIAl1MzIgYml0X3dpZHRoLCBiaXRfb2Zmc2V0OwogCXU2NCBwdGNfdmFsdWU7CkBAIC03OTMsNyArNzkzLDcgQEAKIH0KIAogc3RhdGljIGludCBhY3BpX2dldF90aHJvdHRsaW5nX3N0YXRlKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCi0JCQkJYWNwaV9pbnRlZ2VyIHZhbHVlKQorCQkJCXU2NCB2YWx1ZSkKIHsKIAlpbnQgaTsKIApAQCAtODA4LDcgKzgwOCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9nZXRfdGhyb3R0bGluZ192YWx1ZShzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLAotCQkJaW50IHN0YXRlLCBhY3BpX2ludGVnZXIgKnZhbHVlKQorCQkJaW50IHN0YXRlLCB1NjQgKnZhbHVlKQogewogCWludCByZXQgPSAtMTsKIApAQCAtODI2LDcgKzgyNiw3IEBACiB7CiAJaW50IHN0YXRlID0gMDsKIAlpbnQgcmV0OwotCWFjcGlfaW50ZWdlciB2YWx1ZTsKKwl1NjQgdmFsdWU7CiAKIAlpZiAoIXByKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk5Myw3ICs5OTMsNyBAQAogCQkJCQkgICAgIGludCBzdGF0ZSwgYm9vbCBmb3JjZSkKIHsKIAlpbnQgcmV0OwotCWFjcGlfaW50ZWdlciB2YWx1ZTsKKwl1NjQgdmFsdWU7CiAKIAlpZiAoIXByKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zY2FuLmMgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCmluZGV4IGZmOWY2MjIuLmZiN2ZjMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zY2FuLmMKKysrIGIvZHJpdmVycy9hY3BpL3NjYW4uYwpAQCAtNzQxLDE5ICs3NDEsNDAgQEAKIAlyZXR1cm4gQUVfT0s7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9idXNfZ2V0X3dha2V1cF9kZXZpY2VfZmxhZ3Moc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgdm9pZCBhY3BpX2J1c19zZXRfcnVuX3dha2VfZmxhZ3Moc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwotCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrYWdlID0gTlVMTDsKLQlpbnQgcHN3X2Vycm9yOwotCiAJc3RydWN0IGFjcGlfZGV2aWNlX2lkIGJ1dHRvbl9kZXZpY2VfaWRzW10gPSB7CiAJCXsiUE5QMEMwRCIsIDB9LAogCQl7IlBOUDBDMEMiLCAwfSwKIAkJeyJQTlAwQzBFIiwgMH0sCiAJCXsiIiwgMH0sCiAJfTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9ldmVudF9zdGF0dXMgZXZlbnRfc3RhdHVzOworCisJZGV2aWNlLT53YWtldXAucnVuX3dha2VfY291bnQgPSAwOworCWRldmljZS0+d2FrZXVwLmZsYWdzLm5vdGlmaWVyX3ByZXNlbnQgPSAwOworCisJLyogUG93ZXIgYnV0dG9uLCBMaWQgc3dpdGNoIGFsd2F5cyBlbmFibGUgd2FrZXVwICovCisJaWYgKCFhY3BpX21hdGNoX2RldmljZV9pZHMoZGV2aWNlLCBidXR0b25fZGV2aWNlX2lkcykpIHsKKwkJZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UgPSAxOworCQlkZXZpY2UtPndha2V1cC5mbGFncy5hbHdheXNfZW5hYmxlZCA9IDE7CisJCXJldHVybjsKKwl9CisKKwlzdGF0dXMgPSBhY3BpX2dldF9ncGVfc3RhdHVzKE5VTEwsIGRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJCUFDUElfTk9UX0lTUiwgJmV2ZW50X3N0YXR1cyk7CisJaWYgKHN0YXR1cyA9PSBBRV9PSykKKwkJZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UgPQorCQkJCSEhKGV2ZW50X3N0YXR1cyAmIEFDUElfRVZFTlRfRkxBR19IQU5ETEUpOworfQorCitzdGF0aWMgaW50IGFjcGlfYnVzX2dldF93YWtldXBfZGV2aWNlX2ZsYWdzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwl1bmlvbiBhY3BpX29iamVjdCAqcGFja2FnZSA9IE5VTEw7CisJaW50IHBzd19lcnJvcjsKIAogCS8qIF9QUlcgKi8KIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXZpY2UtPmhhbmRsZSwgIl9QUlciLCBOVUxMLCAmYnVmZmVyKTsKQEAgLTc3Myw2ICs3OTQsNyBAQAogCiAJZGV2aWNlLT53YWtldXAuZmxhZ3MudmFsaWQgPSAxOwogCWRldmljZS0+d2FrZXVwLnByZXBhcmVfY291bnQgPSAwOworCWFjcGlfYnVzX3NldF9ydW5fd2FrZV9mbGFncyhkZXZpY2UpOwogCS8qIENhbGwgX1BTVy9fRFNXIG9iamVjdCB0byBkaXNhYmxlIGl0cyBhYmlsaXR5IHRvIHdha2UgdGhlIHNsZWVwaW5nCiAJICogc3lzdGVtIGZvciB0aGUgQUNQSSBkZXZpY2Ugd2l0aCB0aGUgX1BSVyBvYmplY3QuCiAJICogVGhlIF9QU1cgb2JqZWN0IGlzIGRlcHJlY2lhdGVkIGluIEFDUEkgMy4wIGFuZCBpcyByZXBsYWNlZCBieSBfRFNXLgpAQCAtNzg0LDEwICs4MDYsNiBAQAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCiAJCQkJImVycm9yIGluIF9EU1cgb3IgX1BTVyBldmFsdWF0aW9uXG4iKSk7CiAKLQkvKiBQb3dlciBidXR0b24sIExpZCBzd2l0Y2ggYWx3YXlzIGVuYWJsZSB3YWtldXAgKi8KLQlpZiAoIWFjcGlfbWF0Y2hfZGV2aWNlX2lkcyhkZXZpY2UsIGJ1dHRvbl9kZXZpY2VfaWRzKSkKLQkJZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UgPSAxOwotCiBlbmQ6CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlkZXZpY2UtPmZsYWdzLndha2VfY2FwYWJsZSA9IDA7CkBAIC0xMzM2LDkgKzEzNTQsMjUgQEAKIAogCWlmIChjaGlsZCkKIAkJKmNoaWxkID0gZGV2aWNlOwotCXJldHVybiAwOworCisJaWYgKGRldmljZSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLUVOT0RFVjsKIH0KIAorLyoKKyAqIGFjcGlfYnVzX2FkZCBhbmQgYWNwaV9idXNfc3RhcnQKKyAqCisgKiBzY2FuIGEgZ2l2ZW4gQUNQSSB0cmVlIGFuZCAocHJvYmFibHkgcmVjZW50bHkgaG90LXBsdWdnZWQpCisgKiBjcmVhdGUgYW5kIGFkZCBvciBzdGFydHMgZm91bmQgZGV2aWNlcy4KKyAqCisgKiBJZiBubyBkZXZpY2VzIHdlcmUgZm91bmQgLUVOT0RFViBpcyByZXR1cm5lZCB3aGljaCBkb2VzIG5vdAorICogbWVhbiB0aGF0IHRoaXMgaXMgYSByZWFsIGVycm9yLCB0aGVyZSBqdXN0IGhhdmUgYmVlbiBubyBzdWl0YWJsZQorICogQUNQSSBvYmplY3RzIGluIHRoZSB0YWJsZSB0cnVuayBmcm9tIHdoaWNoIHRoZSBrZXJuZWwgY291bGQgY3JlYXRlCisgKiBhIGRldmljZSBhbmQgYWRkL3N0YXJ0IGFuIGFwcHJvcHJpYXRlIGRyaXZlci4KKyAqLworCiBpbnQKIGFjcGlfYnVzX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKipjaGlsZCwKIAkgICAgIHN0cnVjdCBhY3BpX2RldmljZSAqcGFyZW50LCBhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlKQpAQCAtMTM0OCw4ICsxMzgyLDcgQEAKIAltZW1zZXQoJm9wcywgMCwgc2l6ZW9mKG9wcykpOwogCW9wcy5hY3BpX29wX2FkZCA9IDE7CiAKLQlhY3BpX2J1c19zY2FuKGhhbmRsZSwgJm9wcywgY2hpbGQpOwotCXJldHVybiAwOworCXJldHVybiBhY3BpX2J1c19zY2FuKGhhbmRsZSwgJm9wcywgY2hpbGQpOwogfQogRVhQT1JUX1NZTUJPTChhY3BpX2J1c19hZGQpOwogCkBAIC0xMzU3LDExICsxMzkwLDEzIEBACiB7CiAJc3RydWN0IGFjcGlfYnVzX29wcyBvcHM7CiAKKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltZW1zZXQoJm9wcywgMCwgc2l6ZW9mKG9wcykpOwogCW9wcy5hY3BpX29wX3N0YXJ0ID0gMTsKIAotCWFjcGlfYnVzX3NjYW4oZGV2aWNlLT5oYW5kbGUsICZvcHMsIE5VTEwpOwotCXJldHVybiAwOworCXJldHVybiBhY3BpX2J1c19zY2FuKGRldmljZS0+aGFuZGxlLCAmb3BzLCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0woYWNwaV9idXNfc3RhcnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAuYyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCmluZGV4IDc5ZDMzZDkuLjNiZGU1OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCkBAIC03NDUsOSArNzQ1LDE4IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWVycm9yID0gZW5hYmxlID8KLQkJYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wb3dlcihhZGV2LCBhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSkgOgotCQlhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihhZGV2KTsKKwlpZiAoZW5hYmxlKSB7CisJCWVycm9yID0gYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wb3dlcihhZGV2LAorCQkJCQkJYWNwaV90YXJnZXRfc2xlZXBfc3RhdGUpOworCQlpZiAoIWVycm9yKQorCQkJYWNwaV9lbmFibGVfZ3BlKGFkZXYtPndha2V1cC5ncGVfZGV2aWNlLAorCQkJCQlhZGV2LT53YWtldXAuZ3BlX251bWJlciwKKwkJCQkJQUNQSV9HUEVfVFlQRV9XQUtFKTsKKwl9IGVsc2UgeworCQlhY3BpX2Rpc2FibGVfZ3BlKGFkZXYtPndha2V1cC5ncGVfZGV2aWNlLCBhZGV2LT53YWtldXAuZ3BlX251bWJlciwKKwkJCQlBQ1BJX0dQRV9UWVBFX1dBS0UpOworCQllcnJvciA9IGFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGFkZXYpOworCX0KIAlpZiAoIWVycm9yKQogCQlkZXZfaW5mbyhkZXYsICJ3YWtlLXVwIGNhcGFiaWxpdHkgJXMgYnkgQUNQSVxuIiwKIAkJCQllbmFibGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYyBiL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYwppbmRleCBkMTEyODI5Li5hMjA2YTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKKysrIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCkBAIC0zODcsMTAgKzM4NywxMCBAQAogCWlmIChpbmRleCA8IG51bV9ncGVzKSB7CiAJCWlmICghc3RyY21wKGJ1ZiwgImRpc2FibGVcbiIpICYmCiAJCQkJKHN0YXR1cyAmIEFDUElfRVZFTlRfRkxBR19FTkFCTEVEKSkKLQkJCXJlc3VsdCA9IGFjcGlfZGlzYWJsZV9ncGUoaGFuZGxlLCBpbmRleCk7CisJCQlyZXN1bHQgPSBhY3BpX3NldF9ncGUoaGFuZGxlLCBpbmRleCwgQUNQSV9HUEVfRElTQUJMRSk7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiZW5hYmxlXG4iKSAmJgogCQkJCSEoc3RhdHVzICYgQUNQSV9FVkVOVF9GTEFHX0VOQUJMRUQpKQotCQkJcmVzdWx0ID0gYWNwaV9lbmFibGVfZ3BlKGhhbmRsZSwgaW5kZXgpOworCQkJcmVzdWx0ID0gYWNwaV9zZXRfZ3BlKGhhbmRsZSwgaW5kZXgsIEFDUElfR1BFX0VOQUJMRSk7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiY2xlYXJcbiIpICYmCiAJCQkJKHN0YXR1cyAmIEFDUElfRVZFTlRfRkxBR19TRVQpKQogCQkJcmVzdWx0ID0gYWNwaV9jbGVhcl9ncGUoaGFuZGxlLCBpbmRleCwgQUNQSV9OT1RfSVNSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90YWJsZXMuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMuYwppbmRleCBmMzM2YmNhNy4uOGEwZWQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJdW5zaWduZWQgbG9uZyB0YWJsZV9lbmQ7CiAJYWNwaV9zaXplIHRibF9zaXplOwogCi0JaWYgKGFjcGlfZGlzYWJsZWQpCisJaWYgKGFjcGlfZGlzYWJsZWQgJiYgIWFjcGlfaHQpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKCFoYW5kbGVyKQpAQCAtMjgwLDcgKzI4MCw3IEBACiAJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7CiAJYWNwaV9zaXplIHRibF9zaXplOwogCi0JaWYgKGFjcGlfZGlzYWJsZWQpCisJaWYgKGFjcGlfZGlzYWJsZWQgJiYgIWFjcGlfaHQpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKCFoYW5kbGVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvdXRpbHMuYwppbmRleCA4MTFmZWMxLi4xMTg4MmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbHMuYwpAQCAtMTA3LDEyICsxMDcsMTIgQEAKIAkJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAkJCXN3aXRjaCAoZm9ybWF0X3N0cmluZ1tpXSkgewogCQkJY2FzZSAnTic6Ci0JCQkJc2l6ZV9yZXF1aXJlZCArPSBzaXplb2YoYWNwaV9pbnRlZ2VyKTsKLQkJCQl0YWlsX29mZnNldCArPSBzaXplb2YoYWNwaV9pbnRlZ2VyKTsKKwkJCQlzaXplX3JlcXVpcmVkICs9IHNpemVvZih1NjQpOworCQkJCXRhaWxfb2Zmc2V0ICs9IHNpemVvZih1NjQpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAnUyc6CiAJCQkJc2l6ZV9yZXF1aXJlZCArPQotCQkJCSAgICBzaXplb2YoY2hhciAqKSArIHNpemVvZihhY3BpX2ludGVnZXIpICsKKwkJCQkgICAgc2l6ZW9mKGNoYXIgKikgKyBzaXplb2YodTY0KSArCiAJCQkJICAgIHNpemVvZihjaGFyKTsKIAkJCQl0YWlsX29mZnNldCArPSBzaXplb2YoY2hhciAqKTsKIAkJCQlicmVhazsKQEAgLTE5MywxNyArMTkzLDE3IEBACiAJCWNhc2UgQUNQSV9UWVBFX0lOVEVHRVI6CiAJCQlzd2l0Y2ggKGZvcm1hdF9zdHJpbmdbaV0pIHsKIAkJCWNhc2UgJ04nOgotCQkJCSooKGFjcGlfaW50ZWdlciAqKSBoZWFkKSA9CisJCQkJKigodTY0ICopIGhlYWQpID0KIAkJCQkgICAgZWxlbWVudC0+aW50ZWdlci52YWx1ZTsKLQkJCQloZWFkICs9IHNpemVvZihhY3BpX2ludGVnZXIpOworCQkJCWhlYWQgKz0gc2l6ZW9mKHU2NCk7CiAJCQkJYnJlYWs7CiAJCQljYXNlICdTJzoKIAkJCQlwb2ludGVyID0gKHU4ICoqKSBoZWFkOwogCQkJCSpwb2ludGVyID0gdGFpbDsKLQkJCQkqKChhY3BpX2ludGVnZXIgKikgdGFpbCkgPQorCQkJCSooKHU2NCAqKSB0YWlsKSA9CiAJCQkJICAgIGVsZW1lbnQtPmludGVnZXIudmFsdWU7Ci0JCQkJaGVhZCArPSBzaXplb2YoYWNwaV9pbnRlZ2VyICopOwotCQkJCXRhaWwgKz0gc2l6ZW9mKGFjcGlfaW50ZWdlcik7CisJCQkJaGVhZCArPSBzaXplb2YodTY0ICopOworCQkJCXRhaWwgKz0gc2l6ZW9mKHU2NCk7CiAJCQkJLyogTlVMTCB0ZXJtaW5hdGUgc3RyaW5nICovCiAJCQkJKnRhaWwgPSAoY2hhcikwOwogCQkJCXRhaWwgKz0gc2l6ZW9mKGNoYXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCBiNzY1NzkwLi42ZTliNDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtNzU5LDcgKzc1OSw3IEBACiBzdGF0aWMgaW50CiBhY3BpX3ZpZGVvX2J1c19ET1Moc3RydWN0IGFjcGlfdmlkZW9fYnVzICp2aWRlbywgaW50IGJpb3NfZmxhZywgaW50IGxjZF9mbGFnKQogewotCWFjcGlfaW50ZWdlciBzdGF0dXMgPSAwOworCXU2NCBzdGF0dXMgPSAwOwogCXVuaW9uIGFjcGlfb2JqZWN0IGFyZzAgPSB7IEFDUElfVFlQRV9JTlRFR0VSIH07CiAJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJncyA9IHsgMSwgJmFyZzAgfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3dha2V1cC5jIGIvZHJpdmVycy9hY3BpL3dha2V1cC5jCmluZGV4IGUwZWUwYzAuLjRiOWQzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS93YWtldXAuYworKysgYi9kcml2ZXJzL2FjcGkvd2FrZXVwLmMKQEAgLTIxLDEyICsyMSwxMiBAQAogQUNQSV9NT0RVTEVfTkFNRSgid2FrZXVwX2RldmljZXMiKQogCiAvKioKLSAqIGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcHJlcCAtIHByZXBhcmUgd2FrZXVwIGRldmljZXMKLSAqCUBzbGVlcF9zdGF0ZToJQUNQSSBzdGF0ZQotICogRW5hYmxlIGFsbCB3YWt1cCBkZXZpY2VzIHBvd2VyIGlmIHRoZSBkZXZpY2VzJyB3YWtldXAgbGV2ZWwKLSAqIGlzIGhpZ2hlciB0aGFuIHJlcXVlc3RlZCBzbGVlcCBsZXZlbAorICogYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wcmVwIC0gUHJlcGFyZSB3YWtlLXVwIGRldmljZXMuCisgKiBAc2xlZXBfc3RhdGU6IEFDUEkgc3lzdGVtIHNsZWVwIHN0YXRlLgorICoKKyAqIEVuYWJsZSBhbGwgd2FrZS11cCBkZXZpY2VzJyBwb3dlciwgdW5sZXNzIHRoZSByZXF1ZXN0ZWQgc3lzdGVtIHNsZWVwIHN0YXRlIGlzCisgKiB0b28gZGVlcC4KICAqLwotCiB2b2lkIGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcHJlcCh1OCBzbGVlcF9zdGF0ZSkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKQEAgLTM2LDkgKzM2LDggQEAKIAkJCQkJCSAgICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UsCiAJCQkJCQkgICAgICAgd2FrZXVwX2xpc3QpOwogCi0JCWlmICghZGV2LT53YWtldXAuZmxhZ3MudmFsaWQgfHwKLQkJICAgICFkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkIHx8Ci0JCSAgICAoc2xlZXBfc3RhdGUgPiAodTMyKSBkZXYtPndha2V1cC5zbGVlcF9zdGF0ZSkpCisJCWlmICghZGV2LT53YWtldXAuZmxhZ3MudmFsaWQgfHwgIWRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQKKwkJICAgIHx8IChzbGVlcF9zdGF0ZSA+ICh1MzIpIGRldi0+d2FrZXVwLnNsZWVwX3N0YXRlKSkKIAkJCWNvbnRpbnVlOwogCiAJCWFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoZGV2LCBzbGVlcF9zdGF0ZSk7CkBAIC00Niw5ICs0NSwxMiBAQAogfQogCiAvKioKLSAqIGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2UgLSBlbmFibGUgd2FrZXVwIGRldmljZXMKLSAqCUBzbGVlcF9zdGF0ZToJQUNQSSBzdGF0ZQotICogRW5hYmxlIGFsbCB3YWt1cCBkZXZpY2VzJ3MgR1BFCisgKiBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlIC0gRW5hYmxlIHdha2UtdXAgZGV2aWNlIEdQRXMuCisgKiBAc2xlZXBfc3RhdGU6IEFDUEkgc3lzdGVtIHNsZWVwIHN0YXRlLgorICoKKyAqIEVuYWJsZSBhbGwgd2FrZS11cCBkZXZpY2VzJyBHUEVzLCB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQKKyAqIGFjcGlfZGlzYWJsZV9hbGxfZ3BlcygpIHdhcyBleGVjdXRlZCBiZWZvcmUsIHNvIHdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBhbnkKKyAqIEdQRXMgaGVyZS4KICAqLwogdm9pZCBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlKHU4IHNsZWVwX3N0YXRlKQogewpAQCAtNjUsMjkgKzY3LDIyIEBACiAJCWlmICghZGV2LT53YWtldXAuZmxhZ3MudmFsaWQpCiAJCQljb250aW51ZTsKIAotCQkvKiBJZiB1c2VycyB3YW50IHRvIGRpc2FibGUgcnVuLXdha2UgR1BFLAotCQkgKiB3ZSBvbmx5IGRpc2FibGUgaXQgZm9yIHdha2UgYW5kIGxlYXZlIGl0IGZvciBydW50aW1lCi0JCSAqLwogCQlpZiAoKCFkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkICYmICFkZXYtPndha2V1cC5wcmVwYXJlX2NvdW50KQotCQkgICAgfHwgc2xlZXBfc3RhdGUgPiAodTMyKSBkZXYtPndha2V1cC5zbGVlcF9zdGF0ZSkgewotCQkJaWYgKGRldi0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlKSB7Ci0JCQkJLyogc2V0X2dwZV90eXBlIHdpbGwgZGlzYWJsZSBHUEUsIGxlYXZlIGl0IGxpa2UgdGhhdCAqLwotCQkJCWFjcGlfc2V0X2dwZV90eXBlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJCQkgIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJCQkgIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7Ci0JCQl9CisJCSAgICB8fCBzbGVlcF9zdGF0ZSA+ICh1MzIpIGRldi0+d2FrZXVwLnNsZWVwX3N0YXRlKQogCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFkZXYtPndha2V1cC5mbGFncy5ydW5fd2FrZSkKLQkJCWFjcGlfZW5hYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyKTsKKworCQkvKiBUaGUgd2FrZS11cCBwb3dlciBzaG91bGQgaGF2ZSBiZWVuIGVuYWJsZWQgYWxyZWFkeS4gKi8KKwkJYWNwaV9zZXRfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJQUNQSV9HUEVfRU5BQkxFKTsKIAl9CiB9CiAKIC8qKgotICogYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2UgLSBkaXNhYmxlIGRldmljZXMnIHdha2V1cCBjYXBhYmlsaXR5Ci0gKglAc2xlZXBfc3RhdGU6CUFDUEkgc3RhdGUKLSAqIERpc2FibGUgYWxsIHdha3VwIGRldmljZXMncyBHUEUgYW5kIHdha2V1cCBjYXBhYmlsaXR5CisgKiBhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZSAtIERpc2FibGUgZGV2aWNlcycgd2FrZXVwIGNhcGFiaWxpdHkuCisgKiBAc2xlZXBfc3RhdGU6IEFDUEkgc3lzdGVtIHNsZWVwIHN0YXRlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gb25seSBhZmZlY3RzIGRldmljZXMgd2l0aCB3YWtldXAuc3RhdGUuZW5hYmxlZCBzZXQsIHdoaWNoIG1lYW5zCisgKiB0aGF0IGl0IHJldmVyc2VzIHRoZSBjaGFuZ2VzIG1hZGUgYnkgYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wcmVwKCkuCiAgKi8KIHZvaWQgYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2UodTggc2xlZXBfc3RhdGUpCiB7CkBAIC05NywzMCArOTIsMTEgQEAKIAkJc3RydWN0IGFjcGlfZGV2aWNlICpkZXYgPQogCQkJY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBhY3BpX2RldmljZSwgd2FrZXVwX2xpc3QpOwogCi0JCWlmICghZGV2LT53YWtldXAuZmxhZ3MudmFsaWQpCisJCWlmICghZGV2LT53YWtldXAuZmxhZ3MudmFsaWQgfHwgIWRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQKKwkJICAgIHx8IChzbGVlcF9zdGF0ZSA+ICh1MzIpIGRldi0+d2FrZXVwLnNsZWVwX3N0YXRlKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgoIWRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQgJiYgIWRldi0+d2FrZXVwLnByZXBhcmVfY291bnQpCi0JCSAgICB8fCBzbGVlcF9zdGF0ZSA+ICh1MzIpIGRldi0+d2FrZXVwLnNsZWVwX3N0YXRlKSB7Ci0JCQlpZiAoZGV2LT53YWtldXAuZmxhZ3MucnVuX3dha2UpIHsKLQkJCQlhY3BpX3NldF9ncGVfdHlwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCQkJICBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAotCQkJCQkJICBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOKTsKLQkJCQkvKiBSZS1lbmFibGUgaXQsIHNpbmNlIHNldF9ncGVfdHlwZSB3aWxsIGRpc2FibGUgaXQgKi8KLQkJCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQkJCWRldi0+d2FrZXVwLmdwZV9udW1iZXIpOwotCQkJfQotCQkJY29udGludWU7Ci0JCX0KLQogCQlhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihkZXYpOwotCQkvKiBOZXZlciBkaXNhYmxlIHJ1bi13YWtlIEdQRSAqLwotCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlKSB7Ci0JCQlhY3BpX2Rpc2FibGVfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJCSBkZXYtPndha2V1cC5ncGVfbnVtYmVyKTsKLQkJCWFjcGlfY2xlYXJfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJICAgICAgIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsIEFDUElfTk9UX0lTUik7Ci0JCX0KIAl9CiB9CiAKQEAgLTEzNCwxMyArMTEwLDExIEBACiAJCQkJCQkgICAgICAgc3RydWN0IGFjcGlfZGV2aWNlLAogCQkJCQkJICAgICAgIHdha2V1cF9saXN0KTsKIAkJLyogSW4gY2FzZSB1c2VyIGRvZXNuJ3QgbG9hZCBidXR0b24gZHJpdmVyICovCi0JCWlmICghZGV2LT53YWtldXAuZmxhZ3MucnVuX3dha2UgfHwgZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZCkKKwkJaWYgKCFkZXYtPndha2V1cC5mbGFncy5hbHdheXNfZW5hYmxlZCB8fAorCQkgICAgZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZCkKIAkJCWNvbnRpbnVlOwotCQlhY3BpX3NldF9ncGVfdHlwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCSAgZGV2LT53YWtldXAuZ3BlX251bWJlciwKLQkJCQkgIEFDUElfR1BFX1RZUEVfV0FLRV9SVU4pOwotCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyKTsKKyAJCWFjcGlfZW5hYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLCBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAorIAkJCQlBQ1BJX0dQRV9UWVBFX1dBS0UpOwogCQlkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkID0gMTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL0tjb25maWcgYi9kcml2ZXJzL2F0YS9LY29uZmlnCmluZGV4IDU2YzYzNzQuLjAxYzUyYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL0tjb25maWcKKysrIGIvZHJpdmVycy9hdGEvS2NvbmZpZwpAQCAtNDQ2LDkgKzQ0Niw5IEBACiAKIGNvbmZpZyBQQVRBX0xFR0FDWQogCXRyaXN0YXRlICJMZWdhY3kgSVNBIFBBVEEgc3VwcG9ydCAoRXhwZXJpbWVudGFsKSIKLQlkZXBlbmRzIG9uIElTQSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIChJU0EgfHwgUENJKSAgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBJU0EvVkxCIGJ1cyBsZWdhY3kgUEFUQQorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBJU0EvVkxCL1BDSSBidXMgbGVnYWN5IFBBVEEKIAkgIHBvcnRzIGFuZCBhbGxvd3MgdGhlbSB0byBiZSBhY2Nlc3NlZCB2aWEgdGhlIG5ldyBBVEEgbGF5ZXIuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggYjhiZWExMC4uNmJkOTMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtOTMsNiArOTMsOSBAQAogCUFIQ0lfQ01EX1RCTF9BUl9TWgk9IEFIQ0lfQ01EX1RCTF9TWiAqIEFIQ0lfTUFYX0NNRFMsCiAJQUhDSV9QT1JUX1BSSVZfRE1BX1NaCT0gQUhDSV9DTURfU0xPVF9TWiArIEFIQ0lfQ01EX1RCTF9BUl9TWiArCiAJCQkJICBBSENJX1JYX0ZJU19TWiwKKwlBSENJX1BPUlRfUFJJVl9GQlNfRE1BX1NaCT0gQUhDSV9DTURfU0xPVF9TWiArCisJCQkJCSAgQUhDSV9DTURfVEJMX0FSX1NaICsKKwkJCQkJICAoQUhDSV9SWF9GSVNfU1ogKiAxNiksCiAJQUhDSV9JUlFfT05fU0cJCT0gKDEgPDwgMzEpLAogCUFIQ0lfQ01EX0FUQVBJCQk9ICgxIDw8IDUpLAogCUFIQ0lfQ01EX1dSSVRFCQk9ICgxIDw8IDYpLApAQCAtMTcwLDYgKzE3Myw3IEBACiAJUE9SVF9TQ1JfRVJSCQk9IDB4MzAsIC8qIFNBVEEgcGh5IHJlZ2lzdGVyOiBTRXJyb3IgKi8KIAlQT1JUX1NDUl9BQ1QJCT0gMHgzNCwgLyogU0FUQSBwaHkgcmVnaXN0ZXI6IFNBY3RpdmUgKi8KIAlQT1JUX1NDUl9OVEYJCT0gMHgzYywgLyogU0FUQSBwaHkgcmVnaXN0ZXI6IFNOb3RpZmljYXRpb24gKi8KKwlQT1JUX0ZCUwkJPSAweDQwLCAvKiBGSVMtYmFzZWQgU3dpdGNoaW5nICovCiAKIAkvKiBQT1JUX0lSUV97U1RBVCxNQVNLfSBiaXRzICovCiAJUE9SVF9JUlFfQ09MRF9QUkVTCT0gKDEgPDwgMzEpLCAvKiBjb2xkIHByZXNlbmNlIGRldGVjdCAqLwpAQCAtMjA4LDYgKzIxMiw3IEBACiAJUE9SVF9DTURfQVNQCQk9ICgxIDw8IDI3KSwgLyogQWdncmVzc2l2ZSBTbHVtYmVyL1BhcnRpYWwgKi8KIAlQT1JUX0NNRF9BTFBFCQk9ICgxIDw8IDI2KSwgLyogQWdncmVzc2l2ZSBMaW5rIFBNIGVuYWJsZSAqLwogCVBPUlRfQ01EX0FUQVBJCQk9ICgxIDw8IDI0KSwgLyogRGV2aWNlIGlzIEFUQVBJICovCisJUE9SVF9DTURfRkJTQ1AJCT0gKDEgPDwgMjIpLCAvKiBGQlMgQ2FwYWJsZSBQb3J0ICovCiAJUE9SVF9DTURfUE1QCQk9ICgxIDw8IDE3KSwgLyogUE1QIGF0dGFjaGVkICovCiAJUE9SVF9DTURfTElTVF9PTgk9ICgxIDw8IDE1KSwgLyogY21kIGxpc3QgRE1BIGVuZ2luZSBydW5uaW5nICovCiAJUE9SVF9DTURfRklTX09OCQk9ICgxIDw8IDE0KSwgLyogRklTIERNQSBlbmdpbmUgcnVubmluZyAqLwpAQCAtMjIyLDYgKzIyNywxNCBAQAogCVBPUlRfQ01EX0lDQ19QQVJUSUFMCT0gKDB4MiA8PCAyOCksIC8qIFB1dCBpL2YgaW4gcGFydGlhbCBzdGF0ZSAqLwogCVBPUlRfQ01EX0lDQ19TTFVNQkVSCT0gKDB4NiA8PCAyOCksIC8qIFB1dCBpL2YgaW4gc2x1bWJlciBzdGF0ZSAqLwogCisJUE9SVF9GQlNfRFdFX09GRlNFVAk9IDE2LCAvKiBGQlMgZGV2aWNlIHdpdGggZXJyb3Igb2Zmc2V0ICovCisJUE9SVF9GQlNfQURPX09GRlNFVAk9IDEyLCAvKiBGQlMgYWN0aXZlIGRldiBvcHRpbWl6YXRpb24gb2Zmc2V0ICovCisJUE9SVF9GQlNfREVWX09GRlNFVAk9IDgsICAvKiBGQlMgZGV2aWNlIHRvIGlzc3VlIG9mZnNldCAqLworCVBPUlRfRkJTX0RFVl9NQVNLCT0gKDB4ZiA8PCBQT1JUX0ZCU19ERVZfT0ZGU0VUKSwgIC8qIEZCUy5ERVYgKi8KKwlQT1JUX0ZCU19TREUJCT0gKDEgPDwgMiksIC8qIEZCUyBzaW5nbGUgZGV2aWNlIGVycm9yICovCisJUE9SVF9GQlNfREVDCQk9ICgxIDw8IDEpLCAvKiBGQlMgZGV2aWNlIGVycm9yIGNsZWFyICovCisJUE9SVF9GQlNfRU4JCT0gKDEgPDwgMCksIC8qIEVuYWJsZSBGQlMgKi8KKwogCS8qIGhwcml2LT5mbGFncyBiaXRzICovCiAJQUhDSV9IRkxBR19OT19OQ1EJCT0gKDEgPDwgMCksCiAJQUhDSV9IRkxBR19JR05fSVJRX0lGX0VSUgk9ICgxIDw8IDEpLCAvKiBpZ25vcmUgSVJRX0lGX0VSUiAqLwpAQCAtMzA0LDYgKzMxNyw5IEBACiAJdW5zaWduZWQgaW50CQluY3Ffc2F3X2RtYXM6MTsKIAl1bnNpZ25lZCBpbnQJCW5jcV9zYXdfc2RiOjE7CiAJdTMyIAkJCWludHJfbWFzazsJLyogaW50ZXJydXB0cyB0byBlbmFibGUgKi8KKwlib29sCQkJZmJzX3N1cHBvcnRlZDsJLyogc2V0IGlmZiBGQlMgaXMgc3VwcG9ydGVkICovCisJYm9vbAkJCWZic19lbmFibGVkOwkvKiBzZXQgaWZmIEZCUyBpcyBlbmFibGVkICovCisJaW50CQkJZmJzX2xhc3RfZGV2OwkvKiBzYXZlIEZCUy5ERVYgb2YgbGFzdCBGSVMgKi8KIAkvKiBlbmNsb3N1cmUgbWFuYWdlbWVudCBpbmZvIHBlciBQTSBzbG90ICovCiAJc3RydWN0IGFoY2lfZW1fcHJpdgllbV9wcml2W0VNX01BWF9TTE9UU107CiB9OwpAQCAtMzE1LDkgKzMzMSwxMiBAQAogc3RhdGljIGJvb2wgYWhjaV9xY19maWxsX3J0ZihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIHN0YXRpYyBpbnQgYWhjaV9wb3J0X3N0YXJ0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgYWhjaV9wb3J0X3N0b3Aoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgaW50IGFoY2lfcG1wX3FjX2RlZmVyKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIHZvaWQgYWhjaV9xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIHZvaWQgYWhjaV9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgdm9pZCBhaGNpX3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgdm9pZCBhaGNpX2VuYWJsZV9mYnMoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgdm9pZCBhaGNpX2Rpc2FibGVfZmJzKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgYWhjaV9wbXBfYXR0YWNoKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgYWhjaV9wbXBfZGV0YWNoKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIGludCBhaGNpX3NvZnRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCkBAIC0zNTYsMTAgKzM3NSwxMCBAQAogc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X3BvcnRfY21kKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwogCi1ERVZJQ0VfQVRUUihhaGNpX2hvc3RfY2FwcywgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfY2FwcywgTlVMTCk7Ci1ERVZJQ0VfQVRUUihhaGNpX2hvc3RfY2FwMiwgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfY2FwMiwgTlVMTCk7Ci1ERVZJQ0VfQVRUUihhaGNpX2hvc3RfdmVyc2lvbiwgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfdmVyc2lvbiwgTlVMTCk7Ci1ERVZJQ0VfQVRUUihhaGNpX3BvcnRfY21kLCBTX0lSVUdPLCBhaGNpX3Nob3dfcG9ydF9jbWQsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGFoY2lfaG9zdF9jYXBzLCBTX0lSVUdPLCBhaGNpX3Nob3dfaG9zdF9jYXBzLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihhaGNpX2hvc3RfY2FwMiwgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfY2FwMiwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYWhjaV9ob3N0X3ZlcnNpb24sIFNfSVJVR08sIGFoY2lfc2hvd19ob3N0X3ZlcnNpb24sIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGFoY2lfcG9ydF9jbWQsIFNfSVJVR08sIGFoY2lfc2hvd19wb3J0X2NtZCwgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYWhjaV9zaG9zdF9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9saW5rX3Bvd2VyX21hbmFnZW1lbnRfcG9saWN5LApAQCAtMzkwLDcgKzQwOSw3IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYWhjaV9vcHMgPSB7CiAJLmluaGVyaXRzCQk9ICZzYXRhX3BtcF9wb3J0X29wcywKIAotCS5xY19kZWZlcgkJPSBzYXRhX3BtcF9xY19kZWZlcl9jbWRfc3dpdGNoLAorCS5xY19kZWZlcgkJPSBhaGNpX3BtcF9xY19kZWZlciwKIAkucWNfcHJlcAkJPSBhaGNpX3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IGFoY2lfcWNfaXNzdWUsCiAJLnFjX2ZpbGxfcnRmCQk9IGFoY2lfcWNfZmlsbF9ydGYsCkBAIC01NzAsNiArNTg5LDEyIEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgzYjJiKSwgYm9hcmRfYWhjaSB9LCAvKiBQQ0ggUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4M2IyYyksIGJvYXJkX2FoY2kgfSwgLyogUENIIFJBSUQgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDNiMmYpLCBib2FyZF9haGNpIH0sIC8qIFBDSCBBSENJICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxYzAyKSwgYm9hcmRfYWhjaSB9LCAvKiBDUFQgQUhDSSAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWMwMyksIGJvYXJkX2FoY2kgfSwgLyogQ1BUIEFIQ0kgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFjMDQpLCBib2FyZF9haGNpIH0sIC8qIENQVCBSQUlEICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxYzA1KSwgYm9hcmRfYWhjaSB9LCAvKiBDUFQgUkFJRCAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWMwNiksIGJvYXJkX2FoY2kgfSwgLyogQ1BUIFJBSUQgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFjMDcpLCBib2FyZF9haGNpIH0sIC8qIENQVCBSQUlEICovCiAKIAkvKiBKTWljcm9uIDM2MC8xLzMvNS82LCBtYXRjaCBjbGFzcyB0byBhdm9pZCBJREUgZnVuY3Rpb24gKi8KIAl7IFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKQEAgLTIwNDUsNiArMjA3MCwxNyBAQAogCXJldHVybiBzaTsKIH0KIAorc3RhdGljIGludCBhaGNpX3BtcF9xY19kZWZlcihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIXNhdGFfcG1wX2F0dGFjaGVkKGFwKSB8fCBwcC0+ZmJzX2VuYWJsZWQpCisJCXJldHVybiBhdGFfc3RkX3FjX2RlZmVyKHFjKTsKKwllbHNlCisJCXJldHVybiBzYXRhX3BtcF9xY19kZWZlcl9jbWRfc3dpdGNoKHFjKTsKK30KKwogc3RhdGljIHZvaWQgYWhjaV9xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKQEAgLTIwODMsNiArMjExOSwzMSBAQAogCWFoY2lfZmlsbF9jbWRfc2xvdChwcCwgcWMtPnRhZywgb3B0cyk7CiB9CiAKK3N0YXRpYyB2b2lkIGFoY2lfZmJzX2RlY19pbnRyKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShhcCk7CisJdTMyIGZicyA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwlpbnQgcmV0cmllcyA9IDM7CisKKwlEUFJJTlRLKCJFTlRFUlxuIik7CisJQlVHX09OKCFwcC0+ZmJzX2VuYWJsZWQpOworCisJLyogdGltZSB0byB3YWl0IGZvciBERUMgaXMgbm90IHNwZWNpZmllZCBieSBBSENJIHNwZWMsCisJICogYWRkIGEgcmV0cnkgbG9vcCBmb3Igc2FmZXR5LgorCSAqLworCXdyaXRlbChmYnMgfCBQT1JUX0ZCU19ERUMsIHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwlmYnMgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0ZCUyk7CisJd2hpbGUgKChmYnMgJiBQT1JUX0ZCU19ERUMpICYmIHJldHJpZXMtLSkgeworCQl1ZGVsYXkoMSk7CisJCWZicyA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwl9CisKKwlpZiAoZmJzICYgUE9SVF9GQlNfREVDKQorCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBhcC0+aG9zdC0+ZGV2LAorCQkJICAgImZhaWxlZCB0byBjbGVhciBkZXZpY2UgZXJyb3JcbiIpOworfQorCiBzdGF0aWMgdm9pZCBhaGNpX2Vycm9yX2ludHIoc3RydWN0IGF0YV9wb3J0ICphcCwgdTMyIGlycV9zdGF0KQogewogCXN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwpAQCAtMjA5MSwxMiArMjE1MiwyNiBAQAogCXN0cnVjdCBhdGFfbGluayAqbGluayA9IE5VTEw7CiAJc3RydWN0IGF0YV9xdWV1ZWRfY21kICphY3RpdmVfcWM7CiAJc3RydWN0IGF0YV9laF9pbmZvICphY3RpdmVfZWhpOworCWJvb2wgZmJzX25lZWRfZGVjID0gZmFsc2U7CiAJdTMyIHNlcnJvcjsKIAotCS8qIGRldGVybWluZSBhY3RpdmUgbGluayAqLwotCWF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBFREdFKQotCQlpZiAoYXRhX2xpbmtfYWN0aXZlKGxpbmspKQotCQkJYnJlYWs7CisJLyogZGV0ZXJtaW5lIGFjdGl2ZSBsaW5rIHdpdGggZXJyb3IgKi8KKwlpZiAocHAtPmZic19lbmFibGVkKSB7CisJCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gYWhjaV9wb3J0X2Jhc2UoYXApOworCQl1MzIgZmJzID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9GQlMpOworCQlpbnQgcG1wID0gZmJzID4+IFBPUlRfRkJTX0RXRV9PRkZTRVQ7CisKKwkJaWYgKChmYnMgJiBQT1JUX0ZCU19TREUpICYmIChwbXAgPCBhcC0+bnJfcG1wX2xpbmtzKSAmJgorCQkgICAgYXRhX2xpbmtfb25saW5lKCZhcC0+cG1wX2xpbmtbcG1wXSkpIHsKKwkJCWxpbmsgPSAmYXAtPnBtcF9saW5rW3BtcF07CisJCQlmYnNfbmVlZF9kZWMgPSB0cnVlOworCQl9CisKKwl9IGVsc2UKKwkJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpCisJCQlpZiAoYXRhX2xpbmtfYWN0aXZlKGxpbmspKQorCQkJCWJyZWFrOworCiAJaWYgKCFsaW5rKQogCQlsaW5rID0gJmFwLT5saW5rOwogCkBAIC0yMTUzLDggKzIyMjgsMTMgQEAKIAl9CiAKIAlpZiAoaXJxX3N0YXQgJiBQT1JUX0lSUV9JRl9FUlIpIHsKLQkJaG9zdF9laGktPmVycl9tYXNrIHw9IEFDX0VSUl9BVEFfQlVTOwotCQlob3N0X2VoaS0+YWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKKwkJaWYgKGZic19uZWVkX2RlYykKKwkJCWFjdGl2ZV9laGktPmVycl9tYXNrIHw9IEFDX0VSUl9ERVY7CisJCWVsc2UgeworCQkJaG9zdF9laGktPmVycl9tYXNrIHw9IEFDX0VSUl9BVEFfQlVTOworCQkJaG9zdF9laGktPmFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CisJCX0KKwogCQlhdGFfZWhpX3B1c2hfZGVzYyhob3N0X2VoaSwgImludGVyZmFjZSBmYXRhbCBlcnJvciIpOwogCX0KIApAQCAtMjE2OSw3ICsyMjQ5LDEwIEBACiAKIAlpZiAoaXJxX3N0YXQgJiBQT1JUX0lSUV9GUkVFWkUpCiAJCWF0YV9wb3J0X2ZyZWV6ZShhcCk7Ci0JZWxzZQorCWVsc2UgaWYgKGZic19uZWVkX2RlYykgeworCQlhdGFfbGlua19hYm9ydChsaW5rKTsKKwkJYWhjaV9mYnNfZGVjX2ludHIoYXApOworCX0gZWxzZQogCQlhdGFfcG9ydF9hYm9ydChhcCk7CiB9CiAKQEAgLTIyMjIsMTIgKzIzMDUsMTkgQEAKIAkJCS8qIElmIHRoZSAnTicgYml0IGluIHdvcmQgMCBvZiB0aGUgRklTIGlzIHNldCwKIAkJCSAqIHdlIGp1c3QgcmVjZWl2ZWQgYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbi4KIAkJCSAqIFRlbGwgbGliYXRhIGFib3V0IGl0LgorCQkJICoKKwkJCSAqIExhY2sgb2YgU05vdGlmaWNhdGlvbiBzaG91bGQgbm90IGFwcGVhciBpbgorCQkJICogYWhjaSAxLjIsIHNvIHRoZSB3b3JrYXJvdW5kIGlzIHVubmVjZXNzYXJ5CisJCQkgKiB3aGVuIEZCUyBpcyBlbmFibGVkLgogCQkJICovCi0JCQljb25zdCBfX2xlMzIgKmYgPSBwcC0+cnhfZmlzICsgUlhfRklTX1NEQjsKLQkJCXUzMiBmMCA9IGxlMzJfdG9fY3B1KGZbMF0pOwotCi0JCQlpZiAoZjAgJiAoMSA8PCAxNSkpCi0JCQkJc2F0YV9hc3luY19ub3RpZmljYXRpb24oYXApOworCQkJaWYgKHBwLT5mYnNfZW5hYmxlZCkKKwkJCQlXQVJOX09OX09OQ0UoMSk7CisJCQllbHNlIHsKKwkJCQljb25zdCBfX2xlMzIgKmYgPSBwcC0+cnhfZmlzICsgUlhfRklTX1NEQjsKKwkJCQl1MzIgZjAgPSBsZTMyX3RvX2NwdShmWzBdKTsKKwkJCQlpZiAoZjAgJiAoMSA8PCAxNSkpCisJCQkJCXNhdGFfYXN5bmNfbm90aWZpY2F0aW9uKGFwKTsKKwkJCX0KIAkJfQogCX0KIApAQCAtMjMyMSw2ICsyNDExLDE1IEBACiAKIAlpZiAocWMtPnRmLnByb3RvY29sID09IEFUQV9QUk9UX05DUSkKIAkJd3JpdGVsKDEgPDwgcWMtPnRhZywgcG9ydF9tbWlvICsgUE9SVF9TQ1JfQUNUKTsKKworCWlmIChwcC0+ZmJzX2VuYWJsZWQgJiYgcHAtPmZic19sYXN0X2RldiAhPSBxYy0+ZGV2LT5saW5rLT5wbXApIHsKKwkJdTMyIGZicyA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwkJZmJzICY9IH4oUE9SVF9GQlNfREVWX01BU0sgfCBQT1JUX0ZCU19ERUMpOworCQlmYnMgfD0gcWMtPmRldi0+bGluay0+cG1wIDw8IFBPUlRfRkJTX0RFVl9PRkZTRVQ7CisJCXdyaXRlbChmYnMsIHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwkJcHAtPmZic19sYXN0X2RldiA9IHFjLT5kZXYtPmxpbmstPnBtcDsKKwl9CisKIAl3cml0ZWwoMSA8PCBxYy0+dGFnLCBwb3J0X21taW8gKyBQT1JUX0NNRF9JU1NVRSk7CiAKIAlhaGNpX3N3X2FjdGl2aXR5KHFjLT5kZXYtPmxpbmspOwpAQCAtMjMzMyw2ICsyNDMyLDkgQEAKIAlzdHJ1Y3QgYWhjaV9wb3J0X3ByaXYgKnBwID0gcWMtPmFwLT5wcml2YXRlX2RhdGE7CiAJdTggKmQyaF9maXMgPSBwcC0+cnhfZmlzICsgUlhfRklTX0QySF9SRUc7CiAKKwlpZiAocHAtPmZic19lbmFibGVkKQorCQlkMmhfZmlzICs9IHFjLT5kZXYtPmxpbmstPnBtcCAqIEFIQ0lfUlhfRklTX1NaOworCiAJYXRhX3RmX2Zyb21fZmlzKGQyaF9maXMsICZxYy0+cmVzdWx0X3RmKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTIzODEsNiArMjQ4Myw3MSBAQAogCQlhaGNpX2tpY2tfZW5naW5lKGFwKTsKIH0KIAorc3RhdGljIHZvaWQgYWhjaV9lbmFibGVfZmJzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShhcCk7CisJdTMyIGZiczsKKwlpbnQgcmM7CisKKwlpZiAoIXBwLT5mYnNfc3VwcG9ydGVkKQorCQlyZXR1cm47CisKKwlmYnMgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0ZCUyk7CisJaWYgKGZicyAmIFBPUlRfRkJTX0VOKSB7CisJCXBwLT5mYnNfZW5hYmxlZCA9IHRydWU7CisJCXBwLT5mYnNfbGFzdF9kZXYgPSAtMTsgLyogaW5pdGlhbGl6YXRpb24gKi8KKwkJcmV0dXJuOworCX0KKworCXJjID0gYWhjaV9zdG9wX2VuZ2luZShhcCk7CisJaWYgKHJjKQorCQlyZXR1cm47CisKKwl3cml0ZWwoZmJzIHwgUE9SVF9GQlNfRU4sIHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwlmYnMgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0ZCUyk7CisJaWYgKGZicyAmIFBPUlRfRkJTX0VOKSB7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCBhcC0+aG9zdC0+ZGV2LCAiRkJTIGlzIGVuYWJsZWQuXG4iKTsKKwkJcHAtPmZic19lbmFibGVkID0gdHJ1ZTsKKwkJcHAtPmZic19sYXN0X2RldiA9IC0xOyAvKiBpbml0aWFsaXphdGlvbiAqLworCX0gZWxzZQorCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBhcC0+aG9zdC0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBGQlNcbiIpOworCisJYWhjaV9zdGFydF9lbmdpbmUoYXApOworfQorCitzdGF0aWMgdm9pZCBhaGNpX2Rpc2FibGVfZmJzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShhcCk7CisJdTMyIGZiczsKKwlpbnQgcmM7CisKKwlpZiAoIXBwLT5mYnNfc3VwcG9ydGVkKQorCQlyZXR1cm47CisKKwlmYnMgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0ZCUyk7CisJaWYgKChmYnMgJiBQT1JUX0ZCU19FTikgPT0gMCkgeworCQlwcC0+ZmJzX2VuYWJsZWQgPSBmYWxzZTsKKwkJcmV0dXJuOworCX0KKworCXJjID0gYWhjaV9zdG9wX2VuZ2luZShhcCk7CisJaWYgKHJjKQorCQlyZXR1cm47CisKKwl3cml0ZWwoZmJzICYgflBPUlRfRkJTX0VOLCBwb3J0X21taW8gKyBQT1JUX0ZCUyk7CisJZmJzID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9GQlMpOworCWlmIChmYnMgJiBQT1JUX0ZCU19FTikKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgYXAtPmhvc3QtPmRldiwgIkZhaWxlZCB0byBkaXNhYmxlIEZCU1xuIik7CisJZWxzZSB7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCBhcC0+aG9zdC0+ZGV2LCAiRkJTIGlzIGRpc2FibGVkLlxuIik7CisJCXBwLT5mYnNfZW5hYmxlZCA9IGZhbHNlOworCX0KKworCWFoY2lfc3RhcnRfZW5naW5lKGFwKTsKK30KKwogc3RhdGljIHZvaWQgYWhjaV9wbXBfYXR0YWNoKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShhcCk7CkBAIC0yMzkxLDYgKzI1NTgsOCBAQAogCWNtZCB8PSBQT1JUX0NNRF9QTVA7CiAJd3JpdGVsKGNtZCwgcG9ydF9tbWlvICsgUE9SVF9DTUQpOwogCisJYWhjaV9lbmFibGVfZmJzKGFwKTsKKwogCXBwLT5pbnRyX21hc2sgfD0gUE9SVF9JUlFfQkFEX1BNUDsKIAl3cml0ZWwocHAtPmludHJfbWFzaywgcG9ydF9tbWlvICsgUE9SVF9JUlFfTUFTSyk7CiB9CkBAIC0yNDAxLDYgKzI1NzAsOCBAQAogCXN0cnVjdCBhaGNpX3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwogCXUzMiBjbWQ7CiAKKwlhaGNpX2Rpc2FibGVfZmJzKGFwKTsKKwogCWNtZCA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfQ01EKTsKIAljbWQgJj0gflBPUlRfQ01EX1BNUDsKIAl3cml0ZWwoY21kLCBwb3J0X21taW8gKyBQT1JUX0NNRCk7CkBAIC0yNDkyLDIwICsyNjYzLDQwIEBACiAKIHN0YXRpYyBpbnQgYWhjaV9wb3J0X3N0YXJ0KHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CisJc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gYXAtPmhvc3QtPmRldjsKIAlzdHJ1Y3QgYWhjaV9wb3J0X3ByaXYgKnBwOwogCXZvaWQgKm1lbTsKIAlkbWFfYWRkcl90IG1lbV9kbWE7CisJc2l6ZV90IGRtYV9zeiwgcnhfZmlzX3N6OwogCiAJcHAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW0gPSBkbWFtX2FsbG9jX2NvaGVyZW50KGRldiwgQUhDSV9QT1JUX1BSSVZfRE1BX1NaLCAmbWVtX2RtYSwKLQkJCQkgIEdGUF9LRVJORUwpOworCS8qIGNoZWNrIEZCUyBjYXBhYmlsaXR5ICovCisJaWYgKChocHJpdi0+Y2FwICYgSE9TVF9DQVBfRkJTKSAmJiBzYXRhX3BtcF9zdXBwb3J0ZWQoYXApKSB7CisJCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gYWhjaV9wb3J0X2Jhc2UoYXApOworCQl1MzIgY21kID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9DTUQpOworCQlpZiAoY21kICYgUE9SVF9DTURfRkJTQ1ApCisJCQlwcC0+ZmJzX3N1cHBvcnRlZCA9IHRydWU7CisJCWVsc2UKKwkJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCBkZXYsCisJCQkJICAgIlRoZSBwb3J0IGlzIG5vdCBjYXBhYmxlIG9mIEZCU1xuIik7CisJfQorCisJaWYgKHBwLT5mYnNfc3VwcG9ydGVkKSB7CisJCWRtYV9zeiA9IEFIQ0lfUE9SVF9QUklWX0ZCU19ETUFfU1o7CisJCXJ4X2Zpc19zeiA9IEFIQ0lfUlhfRklTX1NaICogMTY7CisJfSBlbHNlIHsKKwkJZG1hX3N6ID0gQUhDSV9QT1JUX1BSSVZfRE1BX1NaOworCQlyeF9maXNfc3ogPSBBSENJX1JYX0ZJU19TWjsKKwl9CisKKwltZW0gPSBkbWFtX2FsbG9jX2NvaGVyZW50KGRldiwgZG1hX3N6LCAmbWVtX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtZW0pCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChtZW0sIDAsIEFIQ0lfUE9SVF9QUklWX0RNQV9TWik7CisJbWVtc2V0KG1lbSwgMCwgZG1hX3N6KTsKIAogCS8qCiAJICogRmlyc3QgaXRlbSBpbiBjaHVuayBvZiBETUEgbWVtb3J5OiAzMi1zbG90IGNvbW1hbmQgdGFibGUsCkBAIC0yNTIzLDggKzI3MTQsOCBAQAogCXBwLT5yeF9maXMgPSBtZW07CiAJcHAtPnJ4X2Zpc19kbWEgPSBtZW1fZG1hOwogCi0JbWVtICs9IEFIQ0lfUlhfRklTX1NaOwotCW1lbV9kbWEgKz0gQUhDSV9SWF9GSVNfU1o7CisJbWVtICs9IHJ4X2Zpc19zejsKKwltZW1fZG1hICs9IHJ4X2Zpc19zejsKIAogCS8qCiAJICogVGhpcmQgaXRlbTogZGF0YSBhcmVhIGZvciBzdG9yaW5nIGEgc2luZ2xlIGNvbW1hbmQKQEAgLTI4NjgsNiArMzA1OSwyMSBAQAogCQkJfSwKIAkJCS5kcml2ZXJfZGF0YSA9ICJGLjIzIiwJLyogY3V0b2ZmIEJJT1MgdmVyc2lvbiAqLwogCQl9LAorCQkvKgorCQkgKiBBY2VyIGVNYWNoaW5lcyBHNzI1IGhhcyB0aGUgc2FtZSBwcm9ibGVtLiAgQklPUworCQkgKiBWMS4wMyBpcyBrbm93biB0byBiZSBicm9rZW4uICBWMy4wNCBpcyBrbm93biB0bworCQkgKiB3b3JrLiAgSW5iZXR3ZWVuLCB0aGVyZSBhcmUgVjEuMDYsIFYyLjA2IGFuZCBWMy4wMworCQkgKiB0aGF0IHdlIGRvbid0IGhhdmUgbXVjaCBpZGVhIGFib3V0LiAgRm9yIG5vdywKKwkJICogYmxhY2tsaXN0IGFueXRoaW5nIG9sZGVyIHRoYW4gVjMuMDQuCisJCSAqLworCQl7CisJCQkuaWRlbnQgPSAiRzcyNSIsCisJCQkubWF0Y2hlcyA9IHsKKwkJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJlTWFjaGluZXMiKSwKKwkJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgImVNYWNoaW5lcyBHNzI1IiksCisJCQl9LAorCQkJLmRyaXZlcl9kYXRhID0gIlYzLjA0IiwJLyogY3V0b2ZmIEJJT1MgdmVyc2lvbiAqLworCQl9LAogCQl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIAl9OwogCWNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWkgPSBkbWlfZmlyc3RfbWF0Y2goc3lzaWRzKTsKQEAgLTMwNjcsOCArMzI3MywxNiBAQAogCWFoY2lfc2F2ZV9pbml0aWFsX2NvbmZpZyhwZGV2LCBocHJpdik7CiAKIAkvKiBwcmVwYXJlIGhvc3QgKi8KLQlpZiAoaHByaXYtPmNhcCAmIEhPU1RfQ0FQX05DUSkKLQkJcGkuZmxhZ3MgfD0gQVRBX0ZMQUdfTkNRIHwgQVRBX0ZMQUdfRlBETUFfQUE7CisJaWYgKGhwcml2LT5jYXAgJiBIT1NUX0NBUF9OQ1EpIHsKKwkJcGkuZmxhZ3MgfD0gQVRBX0ZMQUdfTkNROworCQkvKiBBdXRvLWFjdGl2YXRlIG9wdGltaXphdGlvbiBpcyBzdXBwb3NlZCB0byBiZSBzdXBwb3J0ZWQgb24KKwkJICAgYWxsIEFIQ0kgY29udHJvbGxlcnMgaW5kaWNhdGluZyBOQ1Egc3VwcG9ydCwgYnV0IGl0IHNlZW1zCisJCSAgIHRvIGJlIGJyb2tlbiBhdCBsZWFzdCBvbiBzb21lIE5WSURJQSBNQ1A3OSBjaGlwc2V0cy4KKwkJICAgVW50aWwgd2UgZ2V0IGluZm8gb24gd2hpY2ggTlZJRElBIGNoaXBzZXRzIGRvbid0IGhhdmUgdGhpcworCQkgICBpc3N1ZSwgaWYgYW55LCBkaXNhYmxlIEFBIG9uIGFsbCBOVklESUEgQUhDSXMuICovCisJCWlmIChwZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9OVklESUEpCisJCQlwaS5mbGFncyB8PSBBVEFfRkxBR19GUERNQV9BQTsKKwl9CiAKIAlpZiAoaHByaXYtPmNhcCAmIEhPU1RfQ0FQX1BNUCkKIAkJcGkuZmxhZ3MgfD0gQVRBX0ZMQUdfUE1QOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYyBiL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKaW5kZXggMTJlMjZjMy4uMzNmYjYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAkJCXJldHVybiByYzsKIAkJcGNpbV9waW5fZGV2aWNlKGRldik7CiAJfQotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJmdlbmVyaWNfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZnZW5lcmljX3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGFfZ2VuZXJpY1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYyBiL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKaW5kZXggNmYzZjIyNS4uYzMzODA2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYworKysgYi9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCkBAIC0xNzMsNiArMTczLDcgQEAKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgKnZhbCk7CiBzdGF0aWMgaW50IHBpaXhfc2lkcHJfc2NyX3dyaXRlKHN0cnVjdCBhdGFfbGluayAqbGluaywKIAkJCQl1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsKTsKK3N0YXRpYyBib29sIHBpaXhfaXJxX2NoZWNrKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBwaWl4X3BjaV9kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpOwogc3RhdGljIGludCBwaWl4X3BjaV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKQEAgLTI5MSw2ICsyOTIsMTQgQEAKIAl7IDB4ODA4NiwgMHgzYjJkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4XzJwb3J0X3NhdGEgfSwKIAkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChQQ0gpICovCiAJeyAweDgwODYsIDB4M2IyZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF9zYXRhIH0sCisJLyogU0FUQSBDb250cm9sbGVyIElERSAoQ1BUKSAqLworCXsgMHg4MDg2LCAweDFjMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YSB9LAorCS8qIFNBVEEgQ29udHJvbGxlciBJREUgKENQVCkgKi8KKwl7IDB4ODA4NiwgMHgxYzAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4X3NhdGEgfSwKKwkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChDUFQpICovCisJeyAweDgwODYsIDB4MWMwOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF8ycG9ydF9zYXRhIH0sCisJLyogU0FUQSBDb250cm9sbGVyIElERSAoQ1BUKSAqLworCXsgMHg4MDg2LCAweDFjMDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfMnBvcnRfc2F0YSB9LAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIApAQCAtMzA5LDggKzMxOCwxMyBAQAogCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAotc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBpaXhfcGF0YV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGlpeF9zYXRhX29wcyA9IHsKIAkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYTMyX3BvcnRfb3BzLAorCS5zZmZfaXJxX2NoZWNrCQk9IHBpaXhfaXJxX2NoZWNrLAorfTsKKworc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBpaXhfcGF0YV9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZwaWl4X3NhdGFfb3BzLAogCS5jYWJsZV9kZXRlY3QJCT0gYXRhX2NhYmxlXzQwd2lyZSwKIAkuc2V0X3Bpb21vZGUJCT0gcGlpeF9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJCT0gcGlpeF9zZXRfZG1hbW9kZSwKQEAgLTMyOCwxMCArMzQyLDYgQEAKIAkuc2V0X2RtYW1vZGUJCT0gaWNoX3NldF9kbWFtb2RlLAogfTsKIAotc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBpaXhfc2F0YV9vcHMgPSB7Ci0JLmluaGVyaXRzCQk9ICZhdGFfYm1kbWEzMl9wb3J0X29wcywKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwaWl4X3NpZHByX3NhdGFfb3BzID0gewogCS5pbmhlcml0cwkJPSAmcGlpeF9zYXRhX29wcywKIAkuaGFyZHJlc2V0CQk9IHNhdGFfc3RkX2hhcmRyZXNldCwKQEAgLTk2Miw2ICs5NzIsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGJvb2wgcGlpeF9pcnFfY2hlY2soc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlpZiAodW5saWtlbHkoIWFwLT5pb2FkZHIuYm1kbWFfYWRkcikpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBhcC0+b3BzLT5ibWRtYV9zdGF0dXMoYXApICYgQVRBX0RNQV9JTlRSOworfQorCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHBpaXhfYnJva2VuX3N1c3BlbmQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jCmluZGV4IDEyNDU4MzguLjI5MmZkYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYwpAQCAtNjQsNyArNjQsNyBAQAogCVdBUk5fT04oIShhcC0+ZmxhZ3MgJiBBVEFfRkxBR19BQ1BJX1NBVEEpKTsKIAogCWlmICghc2F0YV9wbXBfYXR0YWNoZWQoYXApKSB7Ci0JCWFjcGlfaW50ZWdlciBhZHIgPSBTQVRBX0FEUihhcC0+cG9ydF9ubywgTk9fUE9SVF9NVUxUKTsKKwkJdTY0IGFkciA9IFNBVEFfQURSKGFwLT5wb3J0X25vLCBOT19QT1JUX01VTFQpOwogCiAJCWFwLT5saW5rLmRldmljZS0+YWNwaV9oYW5kbGUgPQogCQkJYWNwaV9nZXRfY2hpbGQoYXAtPmhvc3QtPmFjcGlfaGFuZGxlLCBhZHIpOwpAQCAtNzQsNyArNzQsNyBAQAogCQlhcC0+bGluay5kZXZpY2UtPmFjcGlfaGFuZGxlID0gTlVMTDsKIAogCQlhdGFfZm9yX2VhY2hfbGluayhsaW5rLCBhcCwgRURHRSkgewotCQkJYWNwaV9pbnRlZ2VyIGFkciA9IFNBVEFfQURSKGFwLT5wb3J0X25vLCBsaW5rLT5wbXApOworCQkJdTY0IGFkciA9IFNBVEFfQURSKGFwLT5wb3J0X25vLCBsaW5rLT5wbXApOwogCiAJCQlsaW5rLT5kZXZpY2UtPmFjcGlfaGFuZGxlID0KIAkJCQlhY3BpX2dldF9jaGlsZChhcC0+aG9zdC0+YWNwaV9oYW5kbGUsIGFkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCA2NzI4MzI4Li45Yzc3YjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTMyMTEsNiArMzIxMSw3IEBACiBpbnQgYXRhX3RpbWluZ19jb21wdXRlKHN0cnVjdCBhdGFfZGV2aWNlICphZGV2LCB1bnNpZ25lZCBzaG9ydCBzcGVlZCwKIAkJICAgICAgIHN0cnVjdCBhdGFfdGltaW5nICp0LCBpbnQgVCwgaW50IFVUKQogeworCWNvbnN0IHUxNiAqaWQgPSBhZGV2LT5pZDsKIAljb25zdCBzdHJ1Y3QgYXRhX3RpbWluZyAqczsKIAlzdHJ1Y3QgYXRhX3RpbWluZyBwOwogCkBAIC0zMjI4LDE0ICszMjI5LDE4IEBACiAJICogUElPL01XX0RNQSBjeWNsZSB0aW1pbmcuCiAJICovCiAKLQlpZiAoYWRldi0+aWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDIpIHsJLyogRUlERSBkcml2ZSAqLworCWlmIChpZFtBVEFfSURfRklFTERfVkFMSURdICYgMikgewkvKiBFSURFIGRyaXZlICovCiAJCW1lbXNldCgmcCwgMCwgc2l6ZW9mKHApKTsKKwogCQlpZiAoc3BlZWQgPj0gWEZFUl9QSU9fMCAmJiBzcGVlZCA8PSBYRkVSX1NXX0RNQV8wKSB7Ci0JCQlpZiAoc3BlZWQgPD0gWEZFUl9QSU9fMikgcC5jeWNsZSA9IHAuY3ljOGIgPSBhZGV2LT5pZFtBVEFfSURfRUlERV9QSU9dOwotCQkJCQkgICAgZWxzZSBwLmN5Y2xlID0gcC5jeWM4YiA9IGFkZXYtPmlkW0FUQV9JRF9FSURFX1BJT19JT1JEWV07Ci0JCX0gZWxzZSBpZiAoc3BlZWQgPj0gWEZFUl9NV19ETUFfMCAmJiBzcGVlZCA8PSBYRkVSX01XX0RNQV8yKSB7Ci0JCQlwLmN5Y2xlID0gYWRldi0+aWRbQVRBX0lEX0VJREVfRE1BX01JTl07Ci0JCX0KKwkJCWlmIChzcGVlZCA8PSBYRkVSX1BJT18yKQorCQkJCXAuY3ljbGUgPSBwLmN5YzhiID0gaWRbQVRBX0lEX0VJREVfUElPXTsKKwkJCWVsc2UgaWYgKChzcGVlZCA8PSBYRkVSX1BJT180KSB8fAorCQkJCSAoc3BlZWQgPT0gWEZFUl9QSU9fNSAmJiAhYXRhX2lkX2lzX2NmYShpZCkpKQorCQkJCXAuY3ljbGUgPSBwLmN5YzhiID0gaWRbQVRBX0lEX0VJREVfUElPX0lPUkRZXTsKKwkJfSBlbHNlIGlmIChzcGVlZCA+PSBYRkVSX01XX0RNQV8wICYmIHNwZWVkIDw9IFhGRVJfTVdfRE1BXzIpCisJCQlwLmN5Y2xlID0gaWRbQVRBX0lEX0VJREVfRE1BX01JTl07CisKIAkJYXRhX3RpbWluZ19tZXJnZSgmcCwgdCwgdCwgQVRBX1RJTUlOR19DWUNMRSB8IEFUQV9USU1JTkdfQ1lDOEIpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKaW5kZXggZjRlYTVhOC4uYmVhMDAzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCkBAIC0xMDk3LDcgKzEwOTcsNyBAQAogCQlkZXYtPmZsYWdzIHw9IEFUQV9ERkxBR19OT19VTkxPQUQ7CiAKIAkvKiBjb25maWd1cmUgbWF4IHNlY3RvcnMgKi8KLQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgZGV2LT5tYXhfc2VjdG9ycyk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIGRldi0+bWF4X3NlY3RvcnMpOwogCiAJaWYgKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEFQSSkgewogCQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHNkZXYtPnJlcXVlc3RfcXVldWU7CkBAIC0yODc1LDcgKzI4NzUsNyBAQAogCSAqIHdyaXRlIGluZGljYXRpb24gKHVzZWQgZm9yIFBJTy9ETUEgc2V0dXApLCByZXN1bHQgVEYgaXMKIAkgKiBjb3BpZWQgYmFjayBhbmQgd2UgZG9uJ3Qgd2hpbmUgdG9vIG11Y2ggYWJvdXQgaXRzIGZhaWx1cmUuCiAJICovCi0JdGYtPmZsYWdzID0gQVRBX1RGTEFHX0lTQUREUiB8IEFUQV9URkxBR19ERVZJQ0U7CisJdGYtPmZsYWdzIHw9IEFUQV9URkxBR19JU0FERFIgfCBBVEFfVEZMQUdfREVWSUNFOwogCWlmIChzY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQogCQl0Zi0+ZmxhZ3MgfD0gQVRBX1RGTEFHX1dSSVRFOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKaW5kZXggNzQxMDY1Yy4uMDI0NDFmZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKQEAgLTg5Myw2ICs4OTMsOSBAQAogCQkJCSAgICAgICBkb193cml0ZSk7CiAJfQogCisJaWYgKCFkb193cml0ZSkKKwkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisKIAlxYy0+Y3VyYnl0ZXMgKz0gcWMtPnNlY3Rfc2l6ZTsKIAlxYy0+Y3Vyc2dfb2ZzICs9IHFjLT5zZWN0X3NpemU7CiAKQEAgLTE3NjAsMjQgKzE3NjMsNTAgQEAKIHsKIAlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfaW5zdGFuY2U7CiAJdW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgaW50IGhhbmRsZWQgPSAwOworCXVuc2lnbmVkIGludCBoYW5kbGVkID0gMCwgcG9sbGluZyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIFRPRE86IG1ha2UgX2lycXNhdmUgY29uZGl0aW9uYWwgb24geDg2IFBDSSBJREUgbGVnYWN5IG1vZGUgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCiAJZm9yIChpID0gMDsgaSA8IGhvc3QtPm5fcG9ydHM7IGkrKykgewotCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwOworCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gaG9zdC0+cG9ydHNbaV07CisJCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7CiAKLQkJYXAgPSBob3N0LT5wb3J0c1tpXTsKLQkJaWYgKGFwICYmCi0JCSAgICAhKGFwLT5mbGFncyAmIEFUQV9GTEFHX0RJU0FCTEVEKSkgewotCQkJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKKwkJaWYgKHVubGlrZWx5KGFwLT5mbGFncyAmIEFUQV9GTEFHX0RJU0FCTEVEKSkKKwkJCWNvbnRpbnVlOwogCi0JCQlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmxpbmsuYWN0aXZlX3RhZyk7Ci0JCQlpZiAocWMgJiYgKCEocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpKSAmJgotCQkJICAgIChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0FDVElWRSkpCisJCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+bGluay5hY3RpdmVfdGFnKTsKKwkJaWYgKHFjKSB7CisJCQlpZiAoIShxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykpCiAJCQkJaGFuZGxlZCB8PSBhdGFfc2ZmX2hvc3RfaW50cihhcCwgcWMpOworCQkJZWxzZQorCQkJCXBvbGxpbmcgfD0gMSA8PCBpOworCQl9CisJfQorCisJLyoKKwkgKiBJZiBubyBwb3J0IHdhcyBleHBlY3RpbmcgSVJRIGJ1dCB0aGUgY29udHJvbGxlciBpcyBhY3R1YWxseQorCSAqIGFzc2VydGluZyBJUlEgbGluZSwgbm9ib2R5IGNhcmVkIHdpbGwgZW5zdWUuICBDaGVjayBJUlEKKwkgKiBwZW5kaW5nIHN0YXR1cyBpZiBhdmFpbGFibGUgYW5kIGNsZWFyIHNwdXJpb3VzIElSUS4KKwkgKi8KKwlpZiAoIWhhbmRsZWQpIHsKKwkJZm9yIChpID0gMDsgaSA8IGhvc3QtPm5fcG9ydHM7IGkrKykgeworCQkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGhvc3QtPnBvcnRzW2ldOworCisJCQlpZiAocG9sbGluZyAmICgxIDw8IGkpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoIWFwLT5vcHMtPnNmZl9pcnFfY2hlY2sgfHwKKwkJCSAgICAhYXAtPm9wcy0+c2ZmX2lycV9jaGVjayhhcCkpCisJCQkJY29udGludWU7CisKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0lORk8sCisJCQkJCQkiY2xlYXJpbmcgc3B1cmlvdXMgSVJRXG4iKTsKKworCQkJYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7CisJCQlhcC0+b3BzLT5zZmZfaXJxX2NsZWFyKGFwKTsKIAkJfQogCX0KIApAQCAtMzAwOCw2ICszMDM3LDcgQEAKICAqCUBwcGk6IGFycmF5IG9mIHBvcnRfaW5mbywgbXVzdCBiZSBlbm91Z2ggZm9yIHR3byBwb3J0cwogICoJQHNodDogc2NzaV9ob3N0X3RlbXBsYXRlIHRvIHVzZSB3aGVuIHJlZ2lzdGVyaW5nIHRoZSBob3N0CiAgKglAaG9zdF9wcml2OiBob3N0IHByaXZhdGVfZGF0YQorICoJQGhmbGFnOiBob3N0IGZsYWdzCiAgKgogICoJVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGZyb20gYSBkcml2ZXIncwogICoJeHh4X2luaXRfb25lKCkgcHJvYmUgZnVuY3Rpb24gaWYgdGhlIGhhcmR3YXJlIHVzZXMgdHJhZGl0aW9uYWwKQEAgLTMwMjgsOCArMzA1OCw4IEBACiAgKglaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGVycm5vLWJhc2VkIHZhbHVlIG9uIGVycm9yLgogICovCiBpbnQgYXRhX3BjaV9zZmZfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKiBjb25zdCAqcHBpLAotCQkJIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCwgdm9pZCAqaG9zdF9wcml2KQorCQkgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKiBjb25zdCAqcHBpLAorCQkgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0LCB2b2lkICpob3N0X3ByaXYsIGludCBoZmxhZykKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwaSA9IE5VTEw7CkBAIC0zMDY0LDYgKzMwOTQsNyBAQAogCWlmIChyYykKIAkJZ290byBvdXQ7CiAJaG9zdC0+cHJpdmF0ZV9kYXRhID0gaG9zdF9wcml2OworCWhvc3QtPmZsYWdzIHw9IGhmbGFnOwogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAJcmMgPSBhdGFfcGNpX3NmZl9hY3RpdmF0ZV9ob3N0KGhvc3QsIGF0YV9zZmZfaW50ZXJydXB0LCBzaHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYwppbmRleCBkOGYzNWZlLi4yOTRmMzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJCQlyZXR1cm4gcmM7CiAJCXBjaW1fcGluX2RldmljZShwZGV2KTsKIAl9Ci0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnBhY3BpX3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnBhY3BpX3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwYWNwaV9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9hbGkuYwppbmRleCA5NDM0MTE0Li5kYzYxYjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKQEAgLTE1OSw4ICsxNTksNyBAQAogICoJYWxpX3Byb2dyYW1fbW9kZXMJLQlsb2FkIG1vZGUgcmVnaXN0ZXJzCiAgKglAYXA6IEFMaSBjaGFubmVsIHRvIGxvYWQKICAqCUBhZGV2OiBEZXZpY2UgdGhlIHRpbWluZyBpcyBmb3IKLSAqCUBjbWQ6IENvbW1hbmQgdGltaW5nCi0gKglAZGF0YTogRGF0YSB0aW1pbmcKKyAqCUB0OiB0aW1pbmcgZGF0YQogICoJQHVsdHJhOiBVRE1BIHRpbWluZyBvciB6ZXJvIGZvciBvZmYKICAqCiAgKglMb2FkcyB0aGUgdGltaW5nIHJlZ2lzdGVycyBmb3IgY21kL2RhdGEgYW5kIGRpc2FibGUgVURNQSBpZgpAQCAtMjAyLDggKzIwMSw3IEBACiAgKglAYXA6IEFUQSBpbnRlcmZhY2UKICAqCUBhZGV2OiBBVEEgZGV2aWNlCiAgKgotICoJUHJvZ3JhbSB0aGUgQUxpIHJlZ2lzdGVycyBmb3IgUElPIG1vZGUuIEZJWE1FOiBhZGQgdGltaW5ncyBmb3IKLSAqCVBJTzUuCisgKglQcm9ncmFtIHRoZSBBTGkgcmVnaXN0ZXJzIGZvciBQSU8gbW9kZS4KICAqLwogCiBzdGF0aWMgdm9pZCBhbGlfc2V0X3Bpb21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCkBAIC0yMzcsNyArMjM1LDcgQEAKICAqCUBhcDogQVRBIGludGVyZmFjZQogICoJQGFkZXY6IEFUQSBkZXZpY2UKICAqCi0gKglGSVhNRTogTVdETUEgdGltaW5ncworICoJUHJvZ3JhbSB0aGUgQUxpIHJlZ2lzdGVycyBmb3IgRE1BIG1vZGUuCiAgKi8KIAogc3RhdGljIHZvaWQgYWxpX3NldF9kbWFtb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQpAQCAtNTg1LDcgKzU4Myw3IEBACiAJICAgICAgICAJcHBpWzBdID0gJmluZm9fMjBfdWRtYTsKIAl9CiAKLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmYWxpX3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmFsaV9zaHQsIE5VTEwsIDApOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jIGIvZHJpdmVycy9hdGEvcGF0YV9hbWQuYwppbmRleCA1NjdmM2Y3Li5kOTVlY2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMKQEAgLTU3NCw3ICs1NzQsNyBAQAogCX0KIAogCS8qIEFuZCBmaXJlIGl0IHVwICovCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmFtZF9zaHQsIGhwcml2KTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmYW1kX3NodCwgaHByaXYsIDApOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2FydG9wLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FydG9wLmMKaW5kZXggZDMzMmNmZC4uNGQwNjZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYwpAQCAtNDIxLDcgKzQyMSw3IEBACiAKIAlCVUdfT04ocHBpWzBdID09IE5VTEwpOwogCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmFydG9wX3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmFydG9wX3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhcnRvcF9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2F0OTEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jCmluZGV4IDQxYzk0YjEuLjM3NmRkMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jCkBAIC0xNTMsOCArMTUzLDggQEAKIAkvKiBDb21wdXRlIEFUQSB0aW1pbmcgYW5kIHNldCBpdCB0byBTTUMgKi8KIAlyZXQgPSBhdGFfdGltaW5nX2NvbXB1dGUoYWRldiwgYWRldi0+cGlvX21vZGUsICZ0aW1pbmcsIDEwMDAsIDApOwogCWlmIChyZXQpIHsKLQkJZGV2X3dhcm4oYXAtPmRldiwgIkZhaWxlZCB0byBjb21wdXRlIEFUQSB0aW1pbmcgJWQsIFwKLQkJCQlzZXQgUElPXzAgdGltaW5nXG4iLCByZXQpOworCQlkZXZfd2FybihhcC0+ZGV2LCAiRmFpbGVkIHRvIGNvbXB1dGUgQVRBIHRpbWluZyAlZCwgIgorCQkJICJzZXQgUElPXzAgdGltaW5nXG4iLCByZXQpOwogCQlzZXRfc21jX3RpbWluZyhhcC0+ZGV2LCBpbmZvLCAmaW5pdGlhbF90aW1pbmcpOwogCX0gZWxzZSB7CiAJCXNldF9zbWNfdGltaW5nKGFwLT5kZXYsIGluZm8sICZ0aW1pbmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKaW5kZXggYWU0NDU0ZC4uY2JhZjJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHBhdGFfYXRpaXhwLmMgCS0gQVRJIFBBVEEgZm9yIG5ldyBBVEEgbGF5ZXIKICAqCQkJICAoQykgMjAwNSBSZWQgSGF0IEluYwotICoJCQkgIChDKSAyMDA5IEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKKyAqCQkJICAoQykgMjAwOS0yMDEwIEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKICAqCiAgKiBCYXNlZCBvbgogICoKQEAgLTQ2LDYgKzQ2LDggQEAKIAlyZXR1cm4gQVRBX0NCTF9QQVRBNDA7CiB9CiAKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYXRpaXhwX2xvY2spOworCiAvKioKICAqCWF0aWl4cF9zZXRfcGlvX3RpbWluZwktCXNldCBpbml0aWFsIFBJTyBtb2RlIGRhdGEKICAqCUBhcDogQVRBIGludGVyZmFjZQpAQCAtODgsNyArOTAsMTAgQEAKIAogc3RhdGljIHZvaWQgYXRpaXhwX3NldF9waW9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmF0aWl4cF9sb2NrLCBmbGFncyk7CiAJYXRpaXhwX3NldF9waW9fdGltaW5nKGFwLCBhZGV2LCBhZGV2LT5waW9fbW9kZSAtIFhGRVJfUElPXzApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF0aWl4cF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtMTA4LDYgKzExMyw5IEBACiAJaW50IGRtYSA9IGFkZXYtPmRtYV9tb2RlOwogCWludCBkbiA9IDIgKiBhcC0+cG9ydF9ubyArIGFkZXYtPmRldm5vOwogCWludCB3YW50ZWRfcGlvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXRpaXhwX2xvY2ssIGZsYWdzKTsKIAogCWlmIChhZGV2LT5kbWFfbW9kZSA+PSBYRkVSX1VETUFfMCkgewogCQl1MTYgdWRtYV9tb2RlX2RhdGE7CkBAIC0xNDUsNiArMTUzLDcgQEAKIAogCWlmIChhZGV2LT5waW9fbW9kZSAhPSB3YW50ZWRfcGlvKQogCQlhdGlpeHBfc2V0X3Bpb190aW1pbmcoYXAsIGFkZXYsIHdhbnRlZF9waW8pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF0aWl4cF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtMjM3LDcgKzI0Niw4IEBACiAJCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJmF0aWl4cF9lbmFibGVfYml0c1tpXSkpCiAJCQlwcGlbaV0gPSAmYXRhX2R1bW15X3BvcnRfaW5mbzsKIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZhdGlpeHBfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmYXRpaXhwX3NodCwgTlVMTCwKKwkJCQkJCUFUQV9IT1NUX1BBUkFMTEVMX1NDQU4pOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRpaXhwW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0MC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NDAuYwppbmRleCA1YWNmOWZhLi42Y2Q1ZDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0MC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjQwLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJY21kNjQwX2hhcmR3YXJlX2luaXQocGRldik7CiAKLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmY21kNjQwX3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmNtZDY0MF9zaHQsIE5VTEwsIDApOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYwppbmRleCAwZWZiMWY1Li40YzgxYTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKQEAgLTIsNiArMiw3IEBACiAgKiBwYXRhX2NtZDY0eC5jIAktIENNRDY0eCBQQVRBIGZvciBuZXcgQVRBIGxheWVyCiAgKgkJCSAgKEMpIDIwMDUgUmVkIEhhdCBJbmMKICAqCQkJICBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgorICoJCQkgIChDKSAyMDA5LTIwMTAgQmFydGxvbWllaiBab2xuaWVya2lld2ljegogICoKICAqIEJhc2VkIHVwb24KICAqIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9jbWQ2NHguYwkJVmVyc2lvbiAxLjMwCVNlcHQgMTAsIDIwMDIKQEAgLTM5LDExICs0MCw3IEBACiAKIGVudW0gewogCUNGUiAJCT0gMHg1MCwKLQkJQ0ZSX0lOVFJfQ0gwICA9IDB4MDIsCi0JQ05UUkwgCQk9IDB4NTEsCi0JCUNOVFJMX0RJU19SQTAgPSAweDQwLAotCQlDTlRSTF9ESVNfUkExID0gMHg4MCwKLQkJQ05UUkxfRU5BXzJORCA9IDB4MDgsCisJCUNGUl9JTlRSX0NIMCAgPSAweDA0LAogCUNNRFRJTSAJCT0gMHg1MiwKIAlBUlRUSU0wIAk9IDB4NTMsCiAJRFJXVElNMCAJPSAweDU0LApAQCAtNTMsOSArNTAsNiBAQAogCQlBUlRUSU0yM19ESVNfUkEyICA9IDB4MDQsCiAJCUFSVFRJTTIzX0RJU19SQTMgID0gMHgwOCwKIAkJQVJUVElNMjNfSU5UUl9DSDEgPSAweDEwLAotCUFSVFRJTTIgCT0gMHg1NywKLQlBUlRUSU0zIAk9IDB4NTcsCi0JRFJXVElNMjMJPSAweDU4LAogCURSV1RJTTIgCT0gMHg1OCwKIAlCUlNUIAkJPSAweDU5LAogCURSV1RJTTMgCT0gMHg1YiwKQEAgLTYzLDE0ICs1NywxMSBAQAogCU1SRE1PREUJCT0gMHg3MSwKIAkJTVJETU9ERV9JTlRSX0NIMCA9IDB4MDQsCiAJCU1SRE1PREVfSU5UUl9DSDEgPSAweDA4LAotCQlNUkRNT0RFX0JMS19DSDAgID0gMHgxMCwKLQkJTVJETU9ERV9CTEtfQ0gxCSA9IDB4MjAsCiAJQk1JREVTUjAJPSAweDcyLAogCVVESURFVENSMAk9IDB4NzMsCiAJRFRQUjAJCT0gMHg3NCwKIAlCTUlERUNSMQk9IDB4NzgsCiAJQk1JREVDU1IJPSAweDc5LAotCUJNSURFU1IxCT0gMHg3QSwKIAlVRElERVRDUjEJPSAweDdCLAogCURUUFIxCQk9IDB4N0MKIH07CkBAIC0xMzAsOCArMTIxLDE0IEBACiAKIAkJaWYgKHBhaXIpIHsKIAkJCXN0cnVjdCBhdGFfdGltaW5nIHRwOworCiAJCQlhdGFfdGltaW5nX2NvbXB1dGUocGFpciwgcGFpci0+cGlvX21vZGUsICZ0cCwgVCwgMCk7CiAJCQlhdGFfdGltaW5nX21lcmdlKCZ0LCAmdHAsICZ0LCBBVEFfVElNSU5HX1NFVFVQKTsKKwkJCWlmIChwYWlyLT5kbWFfbW9kZSkgeworCQkJCWF0YV90aW1pbmdfY29tcHV0ZShwYWlyLCBwYWlyLT5kbWFfbW9kZSwKKwkJCQkJCSZ0cCwgVCwgMCk7CisJCQkJYXRhX3RpbWluZ19tZXJnZSgmdHAsICZ0LCAmdCwgQVRBX1RJTUlOR19TRVRVUCk7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTE0Nyw3ICsxNDQsOSBAQAogCS8qIE5vdyBjb252ZXJ0IHRoZSBjbG9ja3MgaW50byB2YWx1ZXMgd2UgY2FuIGFjdHVhbGx5IHN0dWZmIGludG8KIAkgICB0aGUgY2hpcCAqLwogCi0JaWYgKHQucmVjb3ZlciA+IDEpCisJaWYgKHQucmVjb3ZlciA9PSAxNikKKwkJdC5yZWNvdmVyID0gMDsKKwllbHNlIGlmICh0LnJlY292ZXIgPiAxKQogCQl0LnJlY292ZXItLTsKIAllbHNlCiAJCXQucmVjb3ZlciA9IDE1OwpAQCAtMjQ1LDcgKzI0NCw3IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCXU4IGRtYV9pbnRyOwogCWludCBkbWFfbWFzayA9IGFwLT5wb3J0X25vID8gQVJUVElNMjNfSU5UUl9DSDEgOiBDRlJfSU5UUl9DSDA7Ci0JaW50IGRtYV9yZWcgPSBhcC0+cG9ydF9ubyA/IEFSVFRJTTIgOiBDRlI7CisJaW50IGRtYV9yZWcgPSBhcC0+cG9ydF9ubyA/IEFSVFRJTTIzIDogQ0ZSOwogCiAJYXRhX2JtZG1hX3N0b3AocWMpOwogCkBAIC0zNjgsNyArMzY3LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgVURJREVUQ1IwLCAweEYwKTsKICNlbmRpZgogCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmNtZDY0eF9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZjbWQ2NHhfc2h0LCBOVUxMLCAwKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMKaW5kZXggYzk3NGIwNS4uNzM4YWQyZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYwpAQCAtMzI0LDcgKzMyNCw3IEBACiAJCXBwaVsxXSA9ICZpbmZvX3BhbG1heF9zZWNvbmRhcnk7CiAKIAkvKiBOb3cga2ljayBvZmYgQVRBIHNldCB1cCAqLwotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZjczU1MzBfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmY3M1NTMwX3NodCwgTlVMTCwgMCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jCmluZGV4IDcxY2VmOWEuLmEwMmU2NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiBzdGF0aWMgdm9pZCBjczU1MzVfc2V0X3Bpb21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCiB7CiAJc3RhdGljIGNvbnN0IHUxNiBwaW9fdGltaW5nc1s1XSA9IHsKLQkJMHhGN0Y0LCAweDUzRjMsIDB4MTNGMSwgMHg1MTMxLCAweDExMzEKKwkJMHhGN0Y0LCAweEYxNzMsIDB4ODE0MSwgMHg1MTMxLCAweDExMzEKIAl9OwogCXN0YXRpYyBjb25zdCB1MTYgcGlvX2NtZF90aW1pbmdzWzVdID0gewogCQkweEY3RjQsIDB4NTNGMywgMHgxM0YxLCAweDUxMzEsIDB4MTEzMQpAQCAtMTk4LDcgKzE5OCw3IEBACiAJcmRtc3IoQVRBQ19DSDBEMV9QSU8sIHRpbWluZ3MsIGR1bW15KTsKIAlpZiAoQ1M1NTM1X0JBRF9QSU8odGltaW5ncykpCiAJCXdybXNyKEFUQUNfQ0gwRDFfUElPLCAweEY3RjRGN0Y0VUwsIDApOwotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJmNzNTUzNV9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJmNzNTUzNV9zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3M1NTM1W10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNi5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzYuYwppbmRleCBmZmVlMzk3Li45MTRhZTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM2LmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZjczU1MzZfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZjczU1MzZfc2h0LCBOVUxMLCAwKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNzNTUzNltdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jeXByZXNzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYwppbmRleCA4ZmIwNDBiLi4wZmNjMDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYwpAQCAtNjIsMTQgKzYyLDE2IEBACiAJCXJldHVybjsKIAl9CiAKLQl0aW1lXzE2ID0gY2xhbXBfdmFsKHQucmVjb3ZlciwgMCwgMTUpIHwgKGNsYW1wX3ZhbCh0LmFjdGl2ZSwgMCwgMTUpIDw8IDQpOwotCXRpbWVfOCA9IGNsYW1wX3ZhbCh0LmFjdDhiLCAwLCAxNSkgfCAoY2xhbXBfdmFsKHQucmVjOGIsIDAsIDE1KSA8PCA0KTsKKwl0aW1lXzE2ID0gY2xhbXBfdmFsKHQucmVjb3ZlciAtIDEsIDAsIDE1KSB8CisJCSAgKGNsYW1wX3ZhbCh0LmFjdGl2ZSAtIDEsIDAsIDE1KSA8PCA0KTsKKwl0aW1lXzggPSBjbGFtcF92YWwodC5hY3Q4YiAtIDEsIDAsIDE1KSB8CisJCSAoY2xhbXBfdmFsKHQucmVjOGIgLSAxLCAwLCAxNSkgPDwgNCk7CiAKIAlpZiAoYWRldi0+ZGV2bm8gPT0gMCkgewogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgQ1k4Ml9JREVfQUREUlNFVFVQLCAmYWRkcik7CiAKIAkJYWRkciAmPSB+MHgwRjsJLyogTWFzayBiaXRzICovCi0JCWFkZHIgfD0gY2xhbXBfdmFsKHQuc2V0dXAsIDAsIDE1KTsKKwkJYWRkciB8PSBjbGFtcF92YWwodC5zZXR1cCAtIDEsIDAsIDE1KTsKIAogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIENZODJfSURFX0FERFJTRVRVUCwgYWRkcik7CiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBDWTgyX0lERV9NQVNURVJfSU9SLCB0aW1lXzE2KTsKQEAgLTc5LDcgKzgxLDcgQEAKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIENZODJfSURFX0FERFJTRVRVUCwgJmFkZHIpOwogCiAJCWFkZHIgJj0gfjB4RjA7CS8qIE1hc2sgYml0cyAqLwotCQlhZGRyIHw9IChjbGFtcF92YWwodC5zZXR1cCwgMCwgMTUpIDw8IDQpOworCQlhZGRyIHw9IChjbGFtcF92YWwodC5zZXR1cCAtIDEsIDAsIDE1KSA8PCA0KTsKIAogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIENZODJfSURFX0FERFJTRVRVUCwgYWRkcik7CiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBDWTgyX0lERV9TTEFWRV9JT1IsIHRpbWVfMTYpOwpAQCAtMTM2LDcgKzEzOCw3IEBACiAJaWYgKFBDSV9GVU5DKHBkZXYtPmRldmZuKSAhPSAxKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZjeTgyYzY5M19zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZjeTgyYzY5M19zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3k4MmM2OTNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfZWZhci5jIGIvZHJpdmVycy9hdGEvcGF0YV9lZmFyLmMKaW5kZXggYjJlNzFlNi4uM2JhYzBlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9lZmFyLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9lZmFyLmMKQEAgLTIsNyArMiw3IEBACiAgKiAgICBwYXRhX2VmYXIuYyAtIEVGQVIgUElJWCBjbG9uZSBjb250cm9sbGVyIGRyaXZlcgogICoKICAqCShDKSAyMDA1IFJlZCBIYXQKLSAqCShDKSAyMDA5IEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKKyAqCShDKSAyMDA5LTIwMTAgQmFydGxvbWllaiBab2xuaWVya2lld2ljegogICoKICAqICAgIFNvbWUgcGFydHMgYmFzZWQgb24gYXRhX3BpaXguYyBieSBKZWZmIEdhcnppayBhbmQgb3RoZXJzLgogICoKQEAgLTY4LDYgKzY4LDggQEAKIAlyZXR1cm4gQVRBX0NCTF9QQVRBODA7CiB9CiAKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZWZhcl9sb2NrKTsKKwogLyoqCiAgKgllZmFyX3NldF9waW9tb2RlIC0gSW5pdGlhbGl6ZSBob3N0IGNvbnRyb2xsZXIgUEFUQSBQSU8gdGltaW5ncwogICoJQGFwOiBQb3J0IHdob3NlIHRpbWluZ3Mgd2UgYXJlIGNvbmZpZ3VyaW5nCkBAIC04NCw3ICs4Niw5IEBACiAJdW5zaWduZWQgaW50IHBpbwk9IGFkZXYtPnBpb19tb2RlIC0gWEZFUl9QSU9fMDsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKIAl1bnNpZ25lZCBpbnQgaWRldG1fcG9ydD0gYXAtPnBvcnRfbm8gPyAweDQyIDogMHg0MDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUxNiBpZGV0bV9kYXRhOworCXU4IHVkbWFfZW5hYmxlOwogCWludCBjb250cm9sID0gMDsKIAogCS8qCkBAIC0xMDcsNiArMTExLDggQEAKIAlpZiAoYWRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEEpCiAJCWNvbnRyb2wgfD0gNDsJLyogUFBFICovCiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWZhcl9sb2NrLCBmbGFncyk7CisKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGlkZXRtX3BvcnQsICZpZGV0bV9kYXRhKTsKIAogCS8qIFNldCBQUEUsIElFLCBhbmQgVElNRSBhcyBhcHByb3ByaWF0ZSAqLwpAQCAtMTMxLDYgKzEzNywxMSBAQAogCiAJaWRldG1fZGF0YSB8PSAweDQwMDA7CS8qIEVuc3VyZSBTSVRSRSBpcyBzZXQgKi8KIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBpZGV0bV9wb3J0LCBpZGV0bV9kYXRhKTsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg0OCwgJnVkbWFfZW5hYmxlKTsKKwl1ZG1hX2VuYWJsZSAmPSB+KDEgPDwgKDIgKiBhcC0+cG9ydF9ubyArIGFkZXYtPmRldm5vKSk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0OCwgdWRtYV9lbmFibGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVmYXJfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKQEAgLTE1MSw2ICsxNjIsNyBAQAogCXUxNiBtYXN0ZXJfZGF0YTsKIAl1OCBzcGVlZAkJPSBhZGV2LT5kbWFfbW9kZTsKIAlpbnQgZGV2aWQJCT0gYWRldi0+ZGV2bm8gKyAyICogYXAtPnBvcnRfbm87CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCB1ZG1hX2VuYWJsZTsKIAogCXN0YXRpYyBjb25zdAkgLyogSVNQICBSVEMgKi8KQEAgLTE2MCw2ICsxNzIsOCBAQAogCQkJICAgIHsgMiwgMSB9LAogCQkJICAgIHsgMiwgMyB9LCB9OwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVmYXJfbG9jaywgZmxhZ3MpOworCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBtYXN0ZXJfcG9ydCwgJm1hc3Rlcl9kYXRhKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NDgsICZ1ZG1hX2VuYWJsZSk7CiAKQEAgLTIxNyw2ICsyMzEsNyBAQAogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBtYXN0ZXJfcG9ydCwgbWFzdGVyX2RhdGEpOwogCX0KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQ4LCB1ZG1hX2VuYWJsZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWZhcl9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGVmYXJfc2h0ID0gewpAQCAtMjU2LDEzICsyNzEsMTQgQEAKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcwk9ICZlZmFyX29wcywKIAl9OwotCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCAmaW5mbyB9OwogCiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAogCQkJICAgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZlZmFyX3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmVmYXJfc2h0LCBOVUxMLAorCQkJCQlBVEFfSE9TVF9QQVJBTExFTF9TQ0FOKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGVmYXJfcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKaW5kZXggMGJkNDhlOC4uYWY0OWJmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCkBAIC0xMSw5ICsxMSw3IEBACiAgKgogICoKICAqIFRPRE8KLSAqCU1heWJlIFBMTCBtb2RlCi0gKglMb29rIGludG8gZW5naW5lIHJlc2V0IG9uIHRpbWVvdXQgZXJyb3JzLiBTaG91bGQgbm90IGJlCi0gKgkJcmVxdWlyZWQuCisgKglMb29rIGludG8gZW5naW5lIHJlc2V0IG9uIHRpbWVvdXQgZXJyb3JzLiBTaG91bGQgbm90IGJlIHJlcXVpcmVkLgogICovCiAKIApAQCAtMjcsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2hwdDM2NiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNi43IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjgiCiAKIHN0cnVjdCBocHRfY2xvY2sgewogCXU4CXhmZXJfbW9kZTsKQEAgLTIwNywxNyArMjA1LDggQEAKIHsKIAlzdHJ1Y3QgaHB0X2Nsb2NrICpjbG9ja3MgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKLQl1MzIgYWRkcjEgPSAweDQwICsgNCAqIChhZGV2LT5kZXZubyArIDIgKiBhcC0+cG9ydF9ubyk7Ci0JdTMyIGFkZHIyID0gMHg1MSArIDQgKiBhcC0+cG9ydF9ubzsKKwl1MzIgYWRkciA9IDB4NDAgKyA0ICogYWRldi0+ZGV2bm87CiAJdTMyIG1hc2ssIHJlZzsKLQl1OCBmYXN0OwotCi0JLyogRmFzdCBpbnRlcnJ1cHQgcHJlZGljdGlvbiBkaXNhYmxlLCBob2xkIG9mZiBpbnRlcnJ1cHQgZGlzYWJsZSAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIGFkZHIyLCAmZmFzdCk7Ci0JaWYgKGZhc3QgJiAweDgwKSB7Ci0JCWZhc3QgJj0gfjB4ODA7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBhZGRyMiwgZmFzdCk7Ci0JfQogCiAJLyogZGV0ZXJtaW5lIHRpbWluZyBtYXNrIGFuZCBmaW5kIG1hdGNoaW5nIGNsb2NrIGVudHJ5ICovCiAJaWYgKG1vZGUgPCBYRkVSX01XX0RNQV8wKQpAQCAtMjQwLDkgKzIyOSw5IEBACiAJICogb24tY2hpcCBQSU8gRklGTy9idWZmZXIgKGFuZCBQSU8gTVNUIG1vZGUgYXMgd2VsbCkgdG8gYXZvaWQKIAkgKiBwcm9ibGVtcyBoYW5kbGluZyBJL08gZXJyb3JzIGxhdGVyLgogCSAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBhZGRyMSwgJnJlZyk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIsICZyZWcpOwogCXJlZyA9ICgocmVnICYgfm1hc2spIHwgKGNsb2Nrcy0+dGltaW5nICYgbWFzaykpICYgfjB4YzAwMDAwMDA7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBhZGRyMSwgcmVnKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIsIHJlZyk7CiB9CiAKIC8qKgpAQCAtMzcyLDcgKzM2MSw3IEBACiAJCQlicmVhazsKIAl9CiAJLyogTm93IGtpY2sgb2ZmIEFUQSBzZXQgdXAgKi8KLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZocHQzNnhfc2h0LCBocHJpdik7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmaHB0MzZ4X3NodCwgaHByaXYsIDApOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwppbmRleCA0MjI0Y2ZjLi44ODM5MzA3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfaHB0Mzd4IgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjE0IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjE1IgogCiBzdHJ1Y3QgaHB0X2Nsb2NrIHsKIAl1OAl4ZmVyX3NwZWVkOwpAQCAtMzksMjUgKzM5LDI0IEBACiAKIC8qIGtleSBmb3IgYnVzIGNsb2NrIHRpbWluZ3MKICAqIGJpdAotICogMDozICAgIGRhdGFfaGlnaF90aW1lLiBpbmFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGZvciBQSU8gYW5kIE1XCi0gKiAgICAgICAgRE1BLiBjeWNsZXMgPSB2YWx1ZSArIDEKLSAqIDQ6OCAgICBkYXRhX2xvd190aW1lLiBhY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBmb3IgUElPIGFuZCBNVwotICogICAgICAgIERNQS4gY3ljbGVzID0gdmFsdWUgKyAxCi0gKiA5OjEyICAgY21kX2hpZ2hfdGltZS4gaW5hY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBkdXJpbmcgdGFzayBmaWxlCisgKiAwOjMgICAgZGF0YV9oaWdoX3RpbWUuIEluYWN0aXZlIHRpbWUgb2YgRElPV18vRElPUl8gZm9yIFBJTyBhbmQgTVcgRE1BLgorICogICAgICAgIGN5Y2xlcyA9IHZhbHVlICsgMQorICogNDo4ICAgIGRhdGFfbG93X3RpbWUuIEFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGZvciBQSU8gYW5kIE1XIERNQS4KKyAqICAgICAgICBjeWNsZXMgPSB2YWx1ZSArIDEKKyAqIDk6MTIgICBjbWRfaGlnaF90aW1lLiBJbmFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGR1cmluZyB0YXNrIGZpbGUKICAqICAgICAgICByZWdpc3RlciBhY2Nlc3MuCi0gKiAxMzoxNyAgY21kX2xvd190aW1lLiBhY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBkdXJpbmcgdGFzayBmaWxlCisgKiAxMzoxNyAgY21kX2xvd190aW1lLiBBY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBkdXJpbmcgdGFzayBmaWxlCiAgKiAgICAgICAgcmVnaXN0ZXIgYWNjZXNzLgotICogMTg6MjEgIHVkbWFfY3ljbGVfdGltZS4gY2xvY2sgZnJlcSBhbmQgY2xvY2sgY3ljbGVzIGZvciBVRE1BIHhmZXIuCi0gKiAgICAgICAgZHVyaW5nIHRhc2sgZmlsZSByZWdpc3RlciBhY2Nlc3MuCi0gKiAyMjoyNCAgcHJlX2hpZ2hfdGltZS4gdGltZSB0byBpbml0aWFsaXplIDFzdCBjeWNsZSBmb3IgUElPIGFuZCBNVyBETUEKLSAqICAgICAgICB4ZmVyLgotICogMjU6MjcgIGNtZF9wcmVfaGlnaF90aW1lLiB0aW1lIHRvIGluaXRpYWxpemUgMXN0IFBJTyBjeWNsZSBmb3IgdGFzaworICogMTg6MjAgIHVkbWFfY3ljbGVfdGltZS4gQ2xvY2sgY3ljbGVzIGZvciBVRE1BIHhmZXIuCisgKiAyMSAgICAgQ0xLIGZyZXF1ZW5jeSBmb3IgVURNQTogMD1BVEEgY2xvY2ssIDE9ZHVhbCBBVEEgY2xvY2suCisgKiAyMjoyNCAgcHJlX2hpZ2hfdGltZS4gVGltZSB0byBpbml0aWFsaXplIDFzdCBjeWNsZSBmb3IgUElPIGFuZCBNVyBETUEgeGZlci4KKyAqIDI1OjI3ICBjbWRfcHJlX2hpZ2hfdGltZS4gVGltZSB0byBpbml0aWFsaXplIDFzdCBQSU8gY3ljbGUgZm9yIHRhc2sgZmlsZQogICogICAgICAgIHJlZ2lzdGVyIGFjY2Vzcy4KLSAqIDI4ICAgICBVRE1BIGVuYWJsZQotICogMjkgICAgIERNQSBlbmFibGUKLSAqIDMwICAgICBQSU9fTVNUIGVuYWJsZS4gaWYgc2V0LCB0aGUgY2hpcCBpcyBpbiBidXMgbWFzdGVyIG1vZGUgZHVyaW5nCi0gKiAgICAgICAgUElPLgotICogMzEgICAgIEZJRk8gZW5hYmxlLgorICogMjggICAgIFVETUEgZW5hYmxlLgorICogMjkgICAgIERNQSAgZW5hYmxlLgorICogMzAgICAgIFBJT19NU1QgZW5hYmxlLiBJZiBzZXQsIHRoZSBjaGlwIGlzIGluIGJ1cyBtYXN0ZXIgbW9kZSBkdXJpbmcKKyAqICAgICAgICBQSU8geGZlci4KKyAqIDMxICAgICBGSUZPIGVuYWJsZS4gT25seSBmb3IgUElPLgogICovCiAKIHN0YXRpYyBzdHJ1Y3QgaHB0X2Nsb2NrIGhwdDM3eF90aW1pbmdzXzMzW10gPSB7CkBAIC0zODQsNiArMzgzLDM3IEBACiAJcmV0dXJuIGF0YV9zZmZfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOwogfQogCitzdGF0aWMgdm9pZCBocHQzNzBfc2V0X21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYsCisJCQkgICAgdTggbW9kZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CisJdTMyIGFkZHIxLCBhZGRyMjsKKwl1MzIgcmVnLCB0aW1pbmcsIG1hc2s7CisJdTggZmFzdDsKKworCWFkZHIxID0gMHg0MCArIDQgKiAoYWRldi0+ZGV2bm8gKyAyICogYXAtPnBvcnRfbm8pOworCWFkZHIyID0gMHg1MSArIDQgKiBhcC0+cG9ydF9ubzsKKworCS8qIEZhc3QgaW50ZXJydXB0IHByZWRpY3Rpb24gZGlzYWJsZSwgaG9sZCBvZmYgaW50ZXJydXB0IGRpc2FibGUgKi8KKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBhZGRyMiwgJmZhc3QpOworCWZhc3QgJj0gfjB4MDI7CisJZmFzdCB8PSAweDAxOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBhZGRyMiwgZmFzdCk7CisKKwkvKiBEZXRlcm1pbmUgdGltaW5nIG1hc2sgYW5kIGZpbmQgbWF0Y2hpbmcgbW9kZSBlbnRyeSAqLworCWlmIChtb2RlIDwgWEZFUl9NV19ETUFfMCkKKwkJbWFzayA9IDB4Y2ZjM2ZmZmY7CisJZWxzZSBpZiAobW9kZSA8IFhGRVJfVURNQV8wKQorCQltYXNrID0gMHgzMWMwMDFmZjsKKwllbHNlCisJCW1hc2sgPSAweDMwM2MwMDAwOworCisJdGltaW5nID0gaHB0Mzd4X2ZpbmRfbW9kZShhcCwgbW9kZSk7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgYWRkcjEsICZyZWcpOworCXJlZyA9IChyZWcgJiB+bWFzaykgfCAodGltaW5nICYgbWFzayk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBhZGRyMSwgcmVnKTsKK30KIC8qKgogICoJaHB0MzcwX3NldF9waW9tb2RlCQktCVBJTyBzZXR1cAogICoJQGFwOiBBVEEgaW50ZXJmYWNlCkBAIC0zOTQsMjYgKzQyNCw3IEBACiAKIHN0YXRpYyB2b2lkIGhwdDM3MF9zZXRfcGlvbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7Ci0JdTMyIGFkZHIxLCBhZGRyMjsKLQl1MzIgcmVnOwotCXUzMiBtb2RlOwotCXU4IGZhc3Q7Ci0KLQlhZGRyMSA9IDB4NDAgKyA0ICogKGFkZXYtPmRldm5vICsgMiAqIGFwLT5wb3J0X25vKTsKLQlhZGRyMiA9IDB4NTEgKyA0ICogYXAtPnBvcnRfbm87Ci0KLQkvKiBGYXN0IGludGVycnVwdCBwcmVkaWN0aW9uIGRpc2FibGUsIGhvbGQgb2ZmIGludGVycnVwdCBkaXNhYmxlICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgYWRkcjIsICZmYXN0KTsKLQlmYXN0ICY9IH4weDAyOwotCWZhc3QgfD0gMHgwMTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgYWRkcjIsIGZhc3QpOwotCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIxLCAmcmVnKTsKLQltb2RlID0gaHB0Mzd4X2ZpbmRfbW9kZShhcCwgYWRldi0+cGlvX21vZGUpOwotCW1vZGUgJj0gMHhDRkMzRkZGRjsJLyogTGVhdmUgRE1BIGJpdHMgYWxvbmUgKi8KLQlyZWcgJj0gfjB4Q0ZDM0ZGRkY7CS8qIFN0cmlwIHRpbWluZyBiaXRzICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBhZGRyMSwgcmVnIHwgbW9kZSk7CisJaHB0MzcwX3NldF9tb2RlKGFwLCBhZGV2LCBhZGV2LT5waW9fbW9kZSk7CiB9CiAKIC8qKgpAQCAtNDIxLDMzICs0MzIsMTIgQEAKICAqCUBhcDogQVRBIGludGVyZmFjZQogICoJQGFkZXY6IERldmljZSBiZWluZyBjb25maWd1cmVkCiAgKgotICoJU2V0IHVwIHRoZSBjaGFubmVsIGZvciBNV0RNQSBvciBVRE1BIG1vZGVzLiBNdWNoIHRoZSBzYW1lIGFzIHdpdGgKLSAqCVBJTywgbG9hZCB0aGUgbW9kZSBudW1iZXIgYW5kIHRoZW4gc2V0IE1XRE1BIG9yIFVETUEgZmxhZy4KKyAqCVNldCB1cCB0aGUgY2hhbm5lbCBmb3IgTVdETUEgb3IgVURNQSBtb2Rlcy4KICAqLwogCiBzdGF0aWMgdm9pZCBocHQzNzBfc2V0X2RtYW1vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwotCXUzMiBhZGRyMSwgYWRkcjI7Ci0JdTMyIHJlZywgbW9kZSwgbWFzazsKLQl1OCBmYXN0OwotCi0JYWRkcjEgPSAweDQwICsgNCAqIChhZGV2LT5kZXZubyArIDIgKiBhcC0+cG9ydF9ubyk7Ci0JYWRkcjIgPSAweDUxICsgNCAqIGFwLT5wb3J0X25vOwotCi0JLyogRmFzdCBpbnRlcnJ1cHQgcHJlZGljdGlvbiBkaXNhYmxlLCBob2xkIG9mZiBpbnRlcnJ1cHQgZGlzYWJsZSAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIGFkZHIyLCAmZmFzdCk7Ci0JZmFzdCAmPSB+MHgwMjsKLQlmYXN0IHw9IDB4MDE7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIGFkZHIyLCBmYXN0KTsKLQotCW1hc2sgPSBhZGV2LT5kbWFfbW9kZSA8IFhGRVJfVURNQV8wID8gMHgzMUMwMDFGRiA6IDB4MzAzQzAwMDA7Ci0KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgYWRkcjEsICZyZWcpOwotCW1vZGUgPSBocHQzN3hfZmluZF9tb2RlKGFwLCBhZGV2LT5kbWFfbW9kZSk7Ci0JbW9kZSAmPSBtYXNrOwotCXJlZyAmPSB+bWFzazsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIxLCByZWcgfCBtb2RlKTsKKwlocHQzNzBfc2V0X21vZGUoYXAsIGFkZXYsIGFkZXYtPmRtYV9tb2RlKTsKIH0KIAogLyoqCkBAIC00NjEsMjQgKzQ1MSwyNSBAQAogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwotCXU4IGRtYV9zdGF0ID0gaW9yZWFkOChhcC0+aW9hZGRyLmJtZG1hX2FkZHIgKyAyKTsKLQl1OCBkbWFfY21kOwogCXZvaWQgX19pb21lbSAqYm1kbWEgPSBhcC0+aW9hZGRyLmJtZG1hX2FkZHI7CisJdTggZG1hX3N0YXQgPSBpb3JlYWQ4KGJtZG1hICsgQVRBX0RNQV9TVEFUVVMpOworCXU4IGRtYV9jbWQ7CiAKLQlpZiAoZG1hX3N0YXQgJiAweDAxKSB7CisJaWYgKGRtYV9zdGF0ICYgQVRBX0RNQV9BQ1RJVkUpIHsKIAkJdWRlbGF5KDIwKTsKLQkJZG1hX3N0YXQgPSBpb3JlYWQ4KGJtZG1hICsgMik7CisJCWRtYV9zdGF0ID0gaW9yZWFkOChibWRtYSArIEFUQV9ETUFfU1RBVFVTKTsKIAl9Ci0JaWYgKGRtYV9zdGF0ICYgMHgwMSkgeworCWlmIChkbWFfc3RhdCAmIEFUQV9ETUFfQUNUSVZFKSB7CiAJCS8qIENsZWFyIHRoZSBlbmdpbmUgKi8KIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NTAgKyA0ICogYXAtPnBvcnRfbm8sIDB4MzcpOwogCQl1ZGVsYXkoMTApOwogCQkvKiBTdG9wIERNQSAqLwotCQlkbWFfY21kID0gaW9yZWFkOChibWRtYSApOwotCQlpb3dyaXRlOChkbWFfY21kICYgMHhGRSwgYm1kbWEpOworCQlkbWFfY21kID0gaW9yZWFkOChibWRtYSArIEFUQV9ETUFfQ01EKTsKKwkJaW93cml0ZTgoZG1hX2NtZCAmIH5BVEFfRE1BX1NUQVJULCBibWRtYSArIEFUQV9ETUFfQ01EKTsKIAkJLyogQ2xlYXIgRXJyb3IgKi8KLQkJZG1hX3N0YXQgPSBpb3JlYWQ4KGJtZG1hICsgMik7Ci0JCWlvd3JpdGU4KGRtYV9zdGF0IHwgMHgwNiAsIGJtZG1hICsgMik7CisJCWRtYV9zdGF0ID0gaW9yZWFkOChibWRtYSArIEFUQV9ETUFfU1RBVFVTKTsKKwkJaW93cml0ZTgoZG1hX3N0YXQgfCBBVEFfRE1BX0lOVFIgfCBBVEFfRE1BX0VSUiwKKwkJCSBibWRtYSArIEFUQV9ETUFfU1RBVFVTKTsKIAkJLyogQ2xlYXIgdGhlIGVuZ2luZSAqLwogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg1MCArIDQgKiBhcC0+cG9ydF9ubywgMHgzNyk7CiAJCXVkZWxheSgxMCk7CkBAIC00ODYsNiArNDc3LDM3IEBACiAJYXRhX2JtZG1hX3N0b3AocWMpOwogfQogCitzdGF0aWMgdm9pZCBocHQzNzJfc2V0X21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYsCisJCQkgICAgdTggbW9kZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CisJdTMyIGFkZHIxLCBhZGRyMjsKKwl1MzIgcmVnLCB0aW1pbmcsIG1hc2s7CisJdTggZmFzdDsKKworCWFkZHIxID0gMHg0MCArIDQgKiAoYWRldi0+ZGV2bm8gKyAyICogYXAtPnBvcnRfbm8pOworCWFkZHIyID0gMHg1MSArIDQgKiBhcC0+cG9ydF9ubzsKKworCS8qIEZhc3QgaW50ZXJydXB0IHByZWRpY3Rpb24gZGlzYWJsZSwgaG9sZCBvZmYgaW50ZXJydXB0IGRpc2FibGUgKi8KKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBhZGRyMiwgJmZhc3QpOworCWZhc3QgJj0gfjB4MDc7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIGFkZHIyLCBmYXN0KTsKKworCS8qIERldGVybWluZSB0aW1pbmcgbWFzayBhbmQgZmluZCBtYXRjaGluZyBtb2RlIGVudHJ5ICovCisJaWYgKG1vZGUgPCBYRkVSX01XX0RNQV8wKQorCQltYXNrID0gMHhjZmMzZmZmZjsKKwllbHNlIGlmIChtb2RlIDwgWEZFUl9VRE1BXzApCisJCW1hc2sgPSAweDMxYzAwMWZmOworCWVsc2UKKwkJbWFzayA9IDB4MzAzYzAwMDA7CisKKwl0aW1pbmcgPSBocHQzN3hfZmluZF9tb2RlKGFwLCBtb2RlKTsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBhZGRyMSwgJnJlZyk7CisJcmVnID0gKHJlZyAmIH5tYXNrKSB8ICh0aW1pbmcgJiBtYXNrKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIxLCByZWcpOworfQorCiAvKioKICAqCWhwdDM3Ml9zZXRfcGlvbW9kZQkJLQlQSU8gc2V0dXAKICAqCUBhcDogQVRBIGludGVyZmFjZQpAQCAtNDk2LDI3ICs1MTgsNyBAQAogCiBzdGF0aWMgdm9pZCBocHQzNzJfc2V0X3Bpb21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwotCXUzMiBhZGRyMSwgYWRkcjI7Ci0JdTMyIHJlZzsKLQl1MzIgbW9kZTsKLQl1OCBmYXN0OwotCi0JYWRkcjEgPSAweDQwICsgNCAqIChhZGV2LT5kZXZubyArIDIgKiBhcC0+cG9ydF9ubyk7Ci0JYWRkcjIgPSAweDUxICsgNCAqIGFwLT5wb3J0X25vOwotCi0JLyogRmFzdCBpbnRlcnJ1cHQgcHJlZGljdGlvbiBkaXNhYmxlLCBob2xkIG9mZiBpbnRlcnJ1cHQgZGlzYWJsZSAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIGFkZHIyLCAmZmFzdCk7Ci0JZmFzdCAmPSB+MHgwNzsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgYWRkcjIsIGZhc3QpOwotCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIxLCAmcmVnKTsKLQltb2RlID0gaHB0Mzd4X2ZpbmRfbW9kZShhcCwgYWRldi0+cGlvX21vZGUpOwotCi0JcHJpbnRrKCJGaW5kIG1vZGUgZm9yICVkIHJlcG9ydHMgJVhcbiIsIGFkZXYtPnBpb19tb2RlLCBtb2RlKTsKLQltb2RlICY9IDB4Q0ZDM0ZGRkY7CS8qIExlYXZlIERNQSBiaXRzIGFsb25lICovCi0JcmVnICY9IH4weENGQzNGRkZGOwkvKiBTdHJpcCB0aW1pbmcgYml0cyAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgYWRkcjEsIHJlZyB8IG1vZGUpOworCWhwdDM3Ml9zZXRfbW9kZShhcCwgYWRldiwgYWRldi0+cGlvX21vZGUpOwogfQogCiAvKioKQEAgLTUyNCwzMyArNTI2LDEyIEBACiAgKglAYXA6IEFUQSBpbnRlcmZhY2UKICAqCUBhZGV2OiBEZXZpY2UgYmVpbmcgY29uZmlndXJlZAogICoKLSAqCVNldCB1cCB0aGUgY2hhbm5lbCBmb3IgTVdETUEgb3IgVURNQSBtb2Rlcy4gTXVjaCB0aGUgc2FtZSBhcyB3aXRoCi0gKglQSU8sIGxvYWQgdGhlIG1vZGUgbnVtYmVyIGFuZCB0aGVuIHNldCBNV0RNQSBvciBVRE1BIGZsYWcuCisgKglTZXQgdXAgdGhlIGNoYW5uZWwgZm9yIE1XRE1BIG9yIFVETUEgbW9kZXMuCiAgKi8KIAogc3RhdGljIHZvaWQgaHB0MzcyX3NldF9kbWFtb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKLQl1MzIgYWRkcjEsIGFkZHIyOwotCXUzMiByZWcsIG1vZGUsIG1hc2s7Ci0JdTggZmFzdDsKLQotCWFkZHIxID0gMHg0MCArIDQgKiAoYWRldi0+ZGV2bm8gKyAyICogYXAtPnBvcnRfbm8pOwotCWFkZHIyID0gMHg1MSArIDQgKiBhcC0+cG9ydF9ubzsKLQotCS8qIEZhc3QgaW50ZXJydXB0IHByZWRpY3Rpb24gZGlzYWJsZSwgaG9sZCBvZmYgaW50ZXJydXB0IGRpc2FibGUgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBhZGRyMiwgJmZhc3QpOwotCWZhc3QgJj0gfjB4MDc7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIGFkZHIyLCBmYXN0KTsKLQotCW1hc2sgPSBhZGV2LT5kbWFfbW9kZSA8IFhGRVJfVURNQV8wID8gMHgzMUMwMDFGRiA6IDB4MzAzQzAwMDA7Ci0KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgYWRkcjEsICZyZWcpOwotCW1vZGUgPSBocHQzN3hfZmluZF9tb2RlKGFwLCBhZGV2LT5kbWFfbW9kZSk7Ci0JcHJpbnRrKCJGaW5kIG1vZGUgZm9yIERNQSAlZCByZXBvcnRzICVYXG4iLCBhZGV2LT5kbWFfbW9kZSwgbW9kZSk7Ci0JbW9kZSAmPSBtYXNrOwotCXJlZyAmPSB+bWFzazsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIxLCByZWcgfCBtb2RlKTsKKwlocHQzNzJfc2V0X21vZGUoYXAsIGFkZXYsIGFkZXYtPmRtYV9tb2RlKTsKIH0KIAogLyoqCkBAIC0xMDA2LDcgKzk4Nyw3IEBACiAJfQogCiAJLyogTm93IGtpY2sgb2ZmIEFUQSBzZXQgdXAgKi8KLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZocHQzN3hfc2h0LCBwcml2YXRlX2RhdGEpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJmhwdDM3eF9zaHQsIHByaXZhdGVfZGF0YSwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBocHQzN3hbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKaW5kZXggZGQyNmJjNy4uMDE0NTdiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9ocHQzeDJuIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4zLjgiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjMuMTAiCiAKIGVudW0gewogCUhQVF9QQ0lfRkFTVAk9CSgxIDw8IDMxKSwKQEAgLTQ1LDI1ICs0NSwyNCBAQAogCiAvKiBrZXkgZm9yIGJ1cyBjbG9jayB0aW1pbmdzCiAgKiBiaXQKLSAqIDA6MyAgICBkYXRhX2hpZ2hfdGltZS4gaW5hY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBmb3IgUElPIGFuZCBNVwotICogICAgICAgIERNQS4gY3ljbGVzID0gdmFsdWUgKyAxCi0gKiA0OjggICAgZGF0YV9sb3dfdGltZS4gYWN0aXZlIHRpbWUgb2YgRElPV18vRElPUl8gZm9yIFBJTyBhbmQgTVcKLSAqICAgICAgICBETUEuIGN5Y2xlcyA9IHZhbHVlICsgMQotICogOToxMiAgIGNtZF9oaWdoX3RpbWUuIGluYWN0aXZlIHRpbWUgb2YgRElPV18vRElPUl8gZHVyaW5nIHRhc2sgZmlsZQorICogMDozICAgIGRhdGFfaGlnaF90aW1lLiBJbmFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGZvciBQSU8gYW5kIE1XIERNQS4KKyAqICAgICAgICBjeWNsZXMgPSB2YWx1ZSArIDEKKyAqIDQ6OCAgICBkYXRhX2xvd190aW1lLiBBY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBmb3IgUElPIGFuZCBNVyBETUEuCisgKiAgICAgICAgY3ljbGVzID0gdmFsdWUgKyAxCisgKiA5OjEyICAgY21kX2hpZ2hfdGltZS4gSW5hY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBkdXJpbmcgdGFzayBmaWxlCiAgKiAgICAgICAgcmVnaXN0ZXIgYWNjZXNzLgotICogMTM6MTcgIGNtZF9sb3dfdGltZS4gYWN0aXZlIHRpbWUgb2YgRElPV18vRElPUl8gZHVyaW5nIHRhc2sgZmlsZQorICogMTM6MTcgIGNtZF9sb3dfdGltZS4gQWN0aXZlIHRpbWUgb2YgRElPV18vRElPUl8gZHVyaW5nIHRhc2sgZmlsZQogICogICAgICAgIHJlZ2lzdGVyIGFjY2Vzcy4KLSAqIDE4OjIxICB1ZG1hX2N5Y2xlX3RpbWUuIGNsb2NrIGZyZXEgYW5kIGNsb2NrIGN5Y2xlcyBmb3IgVURNQSB4ZmVyLgotICogICAgICAgIGR1cmluZyB0YXNrIGZpbGUgcmVnaXN0ZXIgYWNjZXNzLgotICogMjI6MjQgIHByZV9oaWdoX3RpbWUuIHRpbWUgdG8gaW5pdGlhbGl6ZSAxc3QgY3ljbGUgZm9yIFBJTyBhbmQgTVcgRE1BCi0gKiAgICAgICAgeGZlci4KLSAqIDI1OjI3ICBjbWRfcHJlX2hpZ2hfdGltZS4gdGltZSB0byBpbml0aWFsaXplIDFzdCBQSU8gY3ljbGUgZm9yIHRhc2sKKyAqIDE4OjIwICB1ZG1hX2N5Y2xlX3RpbWUuIENsb2NrIGN5Y2xlcyBmb3IgVURNQSB4ZmVyLgorICogMjEgICAgIENMSyBmcmVxdWVuY3kgZm9yIFVETUE6IDA9QVRBIGNsb2NrLCAxPWR1YWwgQVRBIGNsb2NrLgorICogMjI6MjQgIHByZV9oaWdoX3RpbWUuIFRpbWUgdG8gaW5pdGlhbGl6ZSAxc3QgY3ljbGUgZm9yIFBJTyBhbmQgTVcgRE1BIHhmZXIuCisgKiAyNToyNyAgY21kX3ByZV9oaWdoX3RpbWUuIFRpbWUgdG8gaW5pdGlhbGl6ZSAxc3QgUElPIGN5Y2xlIGZvciB0YXNrIGZpbGUKICAqICAgICAgICByZWdpc3RlciBhY2Nlc3MuCi0gKiAyOCAgICAgVURNQSBlbmFibGUKLSAqIDI5ICAgICBETUEgZW5hYmxlCi0gKiAzMCAgICAgUElPX01TVCBlbmFibGUuIGlmIHNldCwgdGhlIGNoaXAgaXMgaW4gYnVzIG1hc3RlciBtb2RlIGR1cmluZwotICogICAgICAgIFBJTy4KLSAqIDMxICAgICBGSUZPIGVuYWJsZS4KKyAqIDI4ICAgICBVRE1BIGVuYWJsZS4KKyAqIDI5ICAgICBETUEgIGVuYWJsZS4KKyAqIDMwICAgICBQSU9fTVNUIGVuYWJsZS4gSWYgc2V0LCB0aGUgY2hpcCBpcyBpbiBidXMgbWFzdGVyIG1vZGUgZHVyaW5nCisgKiAgICAgICAgUElPIHhmZXIuCisgKiAzMSAgICAgRklGTyBlbmFibGUuIE9ubHkgZm9yIFBJTy4KICAqLwogCiAvKiA2Nk1IeiBEUExMIGNsb2NrcyAqLwpAQCAtMTYxLDYgKzE2MCwzNyBAQAogCXJldHVybiBhdGFfc2ZmX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKIH0KIAorc3RhdGljIHZvaWQgaHB0M3gybl9zZXRfbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldiwKKwkJCSAgICAgdTggbW9kZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CisJdTMyIGFkZHIxLCBhZGRyMjsKKwl1MzIgcmVnLCB0aW1pbmcsIG1hc2s7CisJdTggZmFzdDsKKworCWFkZHIxID0gMHg0MCArIDQgKiAoYWRldi0+ZGV2bm8gKyAyICogYXAtPnBvcnRfbm8pOworCWFkZHIyID0gMHg1MSArIDQgKiBhcC0+cG9ydF9ubzsKKworCS8qIEZhc3QgaW50ZXJydXB0IHByZWRpY3Rpb24gZGlzYWJsZSwgaG9sZCBvZmYgaW50ZXJydXB0IGRpc2FibGUgKi8KKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBhZGRyMiwgJmZhc3QpOworCWZhc3QgJj0gfjB4MDc7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIGFkZHIyLCBmYXN0KTsKKworCS8qIERldGVybWluZSB0aW1pbmcgbWFzayBhbmQgZmluZCBtYXRjaGluZyBtb2RlIGVudHJ5ICovCisJaWYgKG1vZGUgPCBYRkVSX01XX0RNQV8wKQorCQltYXNrID0gMHhjZmMzZmZmZjsKKwllbHNlIGlmIChtb2RlIDwgWEZFUl9VRE1BXzApCisJCW1hc2sgPSAweDMxYzAwMWZmOworCWVsc2UKKwkJbWFzayA9IDB4MzAzYzAwMDA7CisKKwl0aW1pbmcgPSBocHQzeDJuX2ZpbmRfbW9kZShhcCwgbW9kZSk7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgYWRkcjEsICZyZWcpOworCXJlZyA9IChyZWcgJiB+bWFzaykgfCAodGltaW5nICYgbWFzayk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBhZGRyMSwgcmVnKTsKK30KKwogLyoqCiAgKglocHQzeDJuX3NldF9waW9tb2RlCQktCVBJTyBzZXR1cAogICoJQGFwOiBBVEEgaW50ZXJmYWNlCkBAIC0xNzEsMjUgKzIwMSw3IEBACiAKIHN0YXRpYyB2b2lkIGhwdDN4Mm5fc2V0X3Bpb21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwotCXUzMiBhZGRyMSwgYWRkcjI7Ci0JdTMyIHJlZzsKLQl1MzIgbW9kZTsKLQl1OCBmYXN0OwotCi0JYWRkcjEgPSAweDQwICsgNCAqIChhZGV2LT5kZXZubyArIDIgKiBhcC0+cG9ydF9ubyk7Ci0JYWRkcjIgPSAweDUxICsgNCAqIGFwLT5wb3J0X25vOwotCi0JLyogRmFzdCBpbnRlcnJ1cHQgcHJlZGljdGlvbiBkaXNhYmxlLCBob2xkIG9mZiBpbnRlcnJ1cHQgZGlzYWJsZSAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIGFkZHIyLCAmZmFzdCk7Ci0JZmFzdCAmPSB+MHgwNzsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgYWRkcjIsIGZhc3QpOwotCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIxLCAmcmVnKTsKLQltb2RlID0gaHB0M3gybl9maW5kX21vZGUoYXAsIGFkZXYtPnBpb19tb2RlKTsKLQltb2RlICY9IDB4Q0ZDM0ZGRkY7CS8qIExlYXZlIERNQSBiaXRzIGFsb25lICovCi0JcmVnICY9IH4weENGQzNGRkZGOwkvKiBTdHJpcCB0aW1pbmcgYml0cyAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgYWRkcjEsIHJlZyB8IG1vZGUpOworCWhwdDN4Mm5fc2V0X21vZGUoYXAsIGFkZXYsIGFkZXYtPnBpb19tb2RlKTsKIH0KIAogLyoqCkBAIC0xOTcsMzIgKzIwOSwxMiBAQAogICoJQGFwOiBBVEEgaW50ZXJmYWNlCiAgKglAYWRldjogRGV2aWNlIGJlaW5nIGNvbmZpZ3VyZWQKICAqCi0gKglTZXQgdXAgdGhlIGNoYW5uZWwgZm9yIE1XRE1BIG9yIFVETUEgbW9kZXMuIE11Y2ggdGhlIHNhbWUgYXMgd2l0aAotICoJUElPLCBsb2FkIHRoZSBtb2RlIG51bWJlciBhbmQgdGhlbiBzZXQgTVdETUEgb3IgVURNQSBmbGFnLgorICoJU2V0IHVwIHRoZSBjaGFubmVsIGZvciBNV0RNQSBvciBVRE1BIG1vZGVzLgogICovCiAKIHN0YXRpYyB2b2lkIGhwdDN4Mm5fc2V0X2RtYW1vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwotCXUzMiBhZGRyMSwgYWRkcjI7Ci0JdTMyIHJlZywgbW9kZSwgbWFzazsKLQl1OCBmYXN0OwotCi0JYWRkcjEgPSAweDQwICsgNCAqIChhZGV2LT5kZXZubyArIDIgKiBhcC0+cG9ydF9ubyk7Ci0JYWRkcjIgPSAweDUxICsgNCAqIGFwLT5wb3J0X25vOwotCi0JLyogRmFzdCBpbnRlcnJ1cHQgcHJlZGljdGlvbiBkaXNhYmxlLCBob2xkIG9mZiBpbnRlcnJ1cHQgZGlzYWJsZSAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIGFkZHIyLCAmZmFzdCk7Ci0JZmFzdCAmPSB+MHgwNzsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgYWRkcjIsIGZhc3QpOwotCi0JbWFzayA9IGFkZXYtPmRtYV9tb2RlIDwgWEZFUl9VRE1BXzAgPyAweDMxQzAwMUZGIDogMHgzMDNDMDAwMDsKLQotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBhZGRyMSwgJnJlZyk7Ci0JbW9kZSA9IGhwdDN4Mm5fZmluZF9tb2RlKGFwLCBhZGV2LT5kbWFfbW9kZSk7Ci0JbW9kZSAmPSBtYXNrOwotCXJlZyAmPSB+bWFzazsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIGFkZHIxLCByZWcgfCBtb2RlKTsKKwlocHQzeDJuX3NldF9tb2RlKGFwLCBhZGV2LCBhZGV2LT5kbWFfbW9kZSk7CiB9CiAKIC8qKgpAQCAtNTQ0LDE5ICs1MzYsMTkgQEAKIAkgICAgICAgcGNpX21oeik7CiAJLyogU2V0IG91ciBwcml2YXRlIGRhdGEgdXAuIFdlIG9ubHkgbmVlZCBhIGZldyBmbGFncyBzbyB3ZSB1c2UKIAkgICBpdCBkaXJlY3RseSAqLwotCWlmIChwY2lfbWh6ID4gNjApIHsKKwlpZiAocGNpX21oeiA+IDYwKQogCQlocHJpdiA9ICh2b2lkICopKFBDSTY2IHwgVVNFX0RQTEwpOwotCQkvKgotCQkgKiBPbiAgSFBUMzcxTiwgaWYgQVRBIGNsb2NrIGlzIDY2IE1IeiB3ZSBtdXN0IHNldCBiaXQgMiBpbgotCQkgKiB0aGUgTUlTQy4gcmVnaXN0ZXIgdG8gc3RyZXRjaCB0aGUgVWx0cmFETUEgVHNzIHRpbWluZy4KLQkJICogTk9URTogVGhpcyByZWdpc3RlciBpcyBvbmx5IHdyaXRlYWJsZSB2aWEgSS9PIHNwYWNlLgotCQkgKi8KLQkJaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MSkKLQkJCW91dGIoaW5iKGlvYmFzZSArIDB4OWMpIHwgMHgwNCwgaW9iYXNlICsgMHg5Yyk7Ci0JfQorCisJLyoKKwkgKiBPbiAgSFBUMzcxTiwgaWYgQVRBIGNsb2NrIGlzIDY2IE1IeiB3ZSBtdXN0IHNldCBiaXQgMiBpbgorCSAqIHRoZSBNSVNDLiByZWdpc3RlciB0byBzdHJldGNoIHRoZSBVbHRyYURNQSBUc3MgdGltaW5nLgorCSAqIE5PVEU6IFRoaXMgcmVnaXN0ZXIgaXMgb25seSB3cml0ZWFibGUgdmlhIEkvTyBzcGFjZS4KKwkgKi8KKwlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9UVElfSFBUMzcxKQorCQlvdXRiKGluYihpb2Jhc2UgKyAweDljKSB8IDB4MDQsIGlvYmFzZSArIDB4OWMpOwogCiAJLyogTm93IGtpY2sgb2ZmIEFUQSBzZXQgdXAgKi8KLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZocHQzeDJuX3NodCwgaHByaXYpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJmhwdDN4Mm5fc2h0LCBocHJpdiwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBocHQzeDJuW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMTMuYwppbmRleCA4ZjMzMjVhLi5mOTcxZjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjEzLmMKQEAgLTI3Myw3ICsyNzMsNyBAQAogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsCiAJCQkgICAidmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJml0ODIxM19zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZpdDgyMTNfc2h0LCBOVUxMLCAwKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGl0ODIxM19wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYwppbmRleCBlZGM1YzFmLi45YmRlMWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMKQEAgLTkzMiw3ICs5MzIsNyBAQAogCQllbHNlCiAJCQlwcGlbMF0gPSAmaW5mb19zbWFydDsKIAl9Ci0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJml0ODIxeF9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZpdDgyMXhfc2h0LCBOVUxMLCAwKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2ptaWNyb24uYwppbmRleCAzYTE0NzRhLi41NjVlMDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2ptaWNyb24uYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2ptaWNyb24uYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CiAKLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmam1pY3Jvbl9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZqbWljcm9uX3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBqbWljcm9uX3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jIGIvZHJpdmVycy9hdGEvcGF0YV9tYXJ2ZWxsLmMKaW5kZXggOTUwZGEzOS4uZThjYTAyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9tYXJ2ZWxsLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9tYXJ2ZWxsLmMKQEAgLTE0NywxMyArMTQ3LDEzIEBACiAJaWYgKHBkZXYtPmRldmljZSA9PSAweDYxMDEpCiAJCXBwaVsxXSA9ICZhdGFfZHVtbXlfcG9ydF9pbmZvOwogCi0jaWYgZGVmaW5lZChDT05GSUdfQUhDSSkgfHwgZGVmaW5lZChDT05GSUdfQUhDSV9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfU0FUQV9BSENJKSB8fCBkZWZpbmVkKENPTkZJR19TQVRBX0FIQ0lfTU9EVUxFKQogCWlmICghbWFydmVsbF9wYXRhX2FjdGl2ZShwZGV2KSkgewogCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6IFBBVEEgcG9ydCBub3QgYWN0aXZlLCBkZWZlcnJpbmcgdG8gQUhDSSBkcml2ZXIuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogI2VuZGlmCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJm1hcnZlbGxfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmbWFydmVsbF9zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWFydmVsbF9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25ldGNlbGwuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCmluZGV4IGYwZDUyZjcuLjk0Zjk3OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCkBAIC04Miw3ICs4Miw3IEBACiAJYXRhX3BjaV9ibWRtYV9jbGVhcl9zaW1wbGV4KHBkZXYpOwogCiAJLyogQW5kIGxldCB0aGUgbGlicmFyeSBjb2RlIGRvIHRoZSB3b3JrICovCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBvcnRfaW5mbywgJm5ldGNlbGxfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcG9ydF9pbmZvLCAmbmV0Y2VsbF9zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmV0Y2VsbF9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jCmluZGV4IGNhNTNmYWMuLjIxMTA4NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAkJLnBvcnRfb3BzID0gJm5zODc0MTBfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZuczg3NDEwX3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmbnM4NzQxMF9zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbnM4NzQxMFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMgYi9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTUuYwppbmRleCAwNjFhYTFjLi44MzA0MzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTUuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTUuYwpAQCAtMzgwLDcgKzM4MCw3IEBACiAKIAluczg3NDE1X2ZpeHVwKHBkZXYpOwogCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJm5zODc0MTVfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmbnM4NzQxNV9zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbnM4NzQxNV9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29sZHBpaXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jCmluZGV4IDlhODY4N2QuLjVmNmFiYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAogCQkJICAgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZvbGRwaWl4X3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJm9sZHBpaXhfc2h0LCBOVUxMLCAwKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9sZHBpaXhfcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9vcHRpLmMgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGkuYwppbmRleCA5OWVkZGRhLi4wMGM1YTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29wdGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGkuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZvcHRpX3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmb3B0aV9zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3B0aVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9vcHRpZG1hLmMgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYwppbmRleCA4Njg4NWE0Li43NmI3ZDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYwpAQCAtNDI5LDcgKzQyOSw3IEBACiAJaWYgKG9wdGlwbHVzX3dpdGhfdWRtYShkZXYpKQogCQlwcGlbMF0gPSAmaW5mb184MmM3MDBfdWRtYTsKIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJm9wdGlkbWFfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZvcHRpZG1hX3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvcHRpZG1hW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jIGIvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYwppbmRleCAxYjM5MmM5Li4zNjEwMzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogICoKICAqLwogIAotdm9pZCBwY21jaWFfOGJpdF9kcmFpbl9maWZvKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdm9pZCBwY21jaWFfOGJpdF9kcmFpbl9maWZvKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJaW50IGNvdW50OwogCXN0cnVjdCBhdGFfcG9ydCAqYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMnh4X29sZC5jIGIvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYwppbmRleCAyZjNjOWJlLi45YWMwODk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMnh4X29sZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyeHhfb2xkLmMKQEAgLTIsNyArMiw3IEBACiAgKiBwYXRhX3BkYzIwMnh4X29sZC5jIAktIFByb21pc2UgUERDMjAyeHggUEFUQSBmb3IgbmV3IEFUQSBsYXllcgogICoJCQkgIChDKSAyMDA1IFJlZCBIYXQgSW5jCiAgKgkJCSAgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KLSAqCQkJICAoQykgMjAwNywyMDA5IEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKKyAqCQkJICAoQykgMjAwNywyMDA5LDIwMTAgQmFydGxvbWllaiBab2xuaWVya2lld2ljegogICoKICAqIEJhc2VkIGluIHBhcnQgb24gbGludXgvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jCiAgKgpAQCAtMzUsNiArMzUsMTUgQEAKIAlyZXR1cm4gQVRBX0NCTF9QQVRBODA7CiB9CiAKK3N0YXRpYyB2b2lkIHBkYzIwMnh4X2V4ZWNfY29tbWFuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCQkJCSAgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCit7CisJRFBSSU5USygiYXRhJXU6IGNtZCAweCVYXG4iLCBhcC0+cHJpbnRfaWQsIHRmLT5jb21tYW5kKTsKKworCWlvd3JpdGU4KHRmLT5jb21tYW5kLCBhcC0+aW9hZGRyLmNvbW1hbmRfYWRkcik7CisJbmRlbGF5KDQwMCk7Cit9CisKIC8qKgogICoJcGRjMjAyeHhfY29uZmlndXJlX3Bpb21vZGUJLQlzZXQgY2hpcCBQSU8gdGltaW5nCiAgKglAYXA6IEFUQSBpbnRlcmZhY2UKQEAgLTI3MSw2ICsyODAsOCBAQAogCS5jYWJsZV9kZXRlY3QJCT0gYXRhX2NhYmxlXzQwd2lyZSwKIAkuc2V0X3Bpb21vZGUJCT0gcGRjMjAyeHhfc2V0X3Bpb21vZGUsCiAJLnNldF9kbWFtb2RlCQk9IHBkYzIwMnh4X3NldF9kbWFtb2RlLAorCisJLnNmZl9leGVjX2NvbW1hbmQJPSBwZGMyMDJ4eF9leGVjX2NvbW1hbmQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGRjMjAyNnhfcG9ydF9vcHMgPSB7CkBAIC0yODQsNiArMjk1LDggQEAKIAkuZGV2X2NvbmZpZwkJPSBwZGMyMDI2eF9kZXZfY29uZmlnLAogCiAJLnBvcnRfc3RhcnQJCT0gcGRjMjAyNnhfcG9ydF9zdGFydCwKKworCS5zZmZfZXhlY19jb21tYW5kCT0gcGRjMjAyeHhfZXhlY19jb21tYW5kLAogfTsKIAogc3RhdGljIGludCBwZGMyMDJ4eF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCkBAIC0zMjQsNyArMzM3LDcgQEAKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZwZGMyMDJ4eF9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJnBkYzIwMnh4X3NodCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZGMyMDJ4eFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9waWNjb2xvLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BpY2NvbG8uYwppbmRleCBiZmUwMTgwLi45ODE2MTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3BpY2NvbG8uYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BpY2NvbG8uYwpAQCAtOTUsNyArOTUsNyBAQAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgJmF0YV9kdW1teV9wb3J0X2luZm8gfTsKIAkvKiBKdXN0IG9uZSBwb3J0IGZvciB0aGUgbW9tZW50ICovCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmdG9zaF9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJnRvc2hfc2h0LCBOVUxMLCAwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0YV90b3NoW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jCmluZGV4IDRmZDI1ZTcuLmZjOTYwMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAogCQkJICAgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZyYWRpc3lzX3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnJhZGlzeXNfc2h0LCBOVUxMLCAwKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJhZGlzeXNfcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKaW5kZXggMjkzMjk5OC4uNGE0NTRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCkBAIC05NSw3ICs5NSw3IEBACiAJcHJpbnRrX29uY2UoS0VSTl9ERUJVRyBEUlZfTkFNRSAiIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAogCWlmIChyejEwMDBfZmlmb19kaXNhYmxlKHBkZXYpID09IDApCi0JCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZyejEwMDBfc2h0LCBOVUxMKTsKKwkJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnJ6MTAwMF9zaHQsIE5VTEwsIDApOwogCiAJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byBkaXNhYmxlIHJlYWQtYWhlYWQgb24gY2hpcHNldC4uXG4iKTsKIAkvKiBOb3Qgc2FmZSB0byB1c2Ugc28gc2tpcCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKaW5kZXggM2JiZWQ4My4uZGZlY2M2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKIAotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJnNjMTIwMF9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJnNjMTIwMF9zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2MxMjAwW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMKaW5kZXggYmVhZWQxMi4uOTUyNGQ1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBwYXRhX3NlcnZlcndvcmtzLmMgCS0gU2VydmVyd29ya3MgUEFUQSBmb3IgbmV3IEFUQSBsYXllcgogICoJCQkgIChDKSAyMDA1IFJlZCBIYXQgSW5jCisgKgkJCSAgKEMpIDIwMTAgQmFydGxvbWllaiBab2xuaWVya2lld2ljegogICoKICAqIGJhc2VkIHVwb24KICAqCkBAIC0yNTMsNyArMjU0LDcgQEAKIAlpZiAoc2VydmVyd29ya3NfaXNfY3NiKHBkZXYpKSB7CiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIDB4NEEsICZjc2I1X3Bpbyk7CiAJCWNzYjVfcGlvICY9IH4oMHgwRiA8PCBkZXZiaXRzKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NEEsIGNzYjVfcGlvIHwgKHBpbyA8PCBkZXZiaXRzKSk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCAweDRBLCBjc2I1X3BpbyB8IChwaW8gPDwgZGV2Yml0cykpOwogCX0KIH0KIApAQCAtMzI3LDcgKzMyOCw3IEBACiAJCXBjaV9kZXZfcHV0KGlzYV9kZXYpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiYXRhX3NlcnZlcndvcmtzOiBVbmFibGUgdG8gZmluZCBicmlkZ2UuXG4iKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6IFVuYWJsZSB0byBmaW5kIGJyaWRnZS5cbiIpOwogCXJldHVybiAtRU5PREVWOwogfQogCkBAIC00NTksNyArNDYwLDcgQEAKIAlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNUlERSkKIAkJYXRhX3BjaV9ibWRtYV9jbGVhcl9zaW1wbGV4KHBkZXYpOwogCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnNlcnZlcndvcmtzX3NodCwgTlVMTCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnNlcnZlcndvcmtzX3NodCwgTlVMTCwgMCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCmluZGV4IGEyYWNlNDguLmM2YzU4OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYwpAQCAtMzU2LDcgKzM1Niw3IEBACiAJCQkJIElSUUZfU0hBUkVELCAmc2lsNjgwX3NodCk7CiAKIHVzZV9pb3BvcnRzOgotCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZzaWw2ODBfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmc2lsNjgwX3NodCwgTlVMTCwgMCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jCmluZGV4IDVjMzBkNTYuLmI2NzA4MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaXMuYwpAQCAtODI2LDcgKzgyNiw3IEBACiAKIAlzaXNfZml4dXAocGRldiwgY2hpcHNldCk7CiAKLQlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmc2lzX3NodCwgY2hpcHNldCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnNpc19zaHQsIGNoaXBzZXQsIDApOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMKaW5kZXggMjlmNzMzYy4uNzMzYjA0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2w4MmMxMDUuYwpAQCAtMzE2LDcgKzMxNiw3IEBACiAJdmFsIHw9IENUUkxfUDBFTiB8IENUUkxfUDBGMTYgfCBDVFJMX1AxRjE2OwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQwLCB2YWwpOwogCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmc2w4MmMxMDVfc2h0LCBOVUxMKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZzbDgyYzEwNV9zaHQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2w4MmMxMDVbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jIGIvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMKaW5kZXggZjFmMTNmZi4uNDhmNTA2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAidmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmdHJpZmxleF9zaHQsIE5VTEwpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJnRyaWZsZXhfc2h0LCBOVUxMLCAwKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHRyaWZsZXhbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCmluZGV4IDBkOTc4OTAuLjMwNTllYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwpAQCAtMjIsNiArMjIsNyBAQAogICoJVklBIFZUODIzM2MJLQlVRE1BMTAwCiAgKglWSUEgVlQ4MjM1CS0JVURNQTEzMwogICoJVklBIFZUODIzNwktCVVETUExMzMKKyAqCVZJQSBWVDgyMzdBCS0JVURNQTEzMwogICoJVklBIFZUODIzN1MJLQlVRE1BMTMzCiAgKglWSUEgVlQ4MjUxCS0JVURNQTEzMwogICoKQEAgLTY0LDI2ICs2NSwxNSBAQAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV92aWEiCiAjZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuNCIKIAotLyoKLSAqCVRoZSBmb2xsb3dpbmcgY29tZXMgZGlyZWN0bHkgZnJvbSBWb2p0ZWNoIFBhdmxpaydzIGlkZS9wY2kvdmlhODJjeHh4Ci0gKglkcml2ZXIuCi0gKi8KLQogZW51bSB7Ci0JVklBX1VETUEJPSAweDAwNywKLQlWSUFfVURNQV9OT05FCT0gMHgwMDAsCi0JVklBX1VETUFfMzMJPSAweDAwMSwKLQlWSUFfVURNQV82Ngk9IDB4MDAyLAotCVZJQV9VRE1BXzEwMAk9IDB4MDAzLAotCVZJQV9VRE1BXzEzMwk9IDB4MDA0LAotCVZJQV9CQURfUFJFUQk9IDB4MDEwLCAvKiBDcmFzaGVzIGlmIFBSRVEjIHRpbGwgRERBQ0sjIHNldCAqLwotCVZJQV9CQURfQ0xLNjYJPSAweDAyMCwgLyogNjYgTUh6IGNsb2NrIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgKi8KLQlWSUFfU0VUX0ZJRk8JPSAweDA0MCwgLyogTmVlZHMgdG8gaGF2ZSBGSUZPIHNwbGl0IHNldCAqLwotCVZJQV9OT19VTk1BU0sJPSAweDA4MCwgLyogRG9lc24ndCB3b3JrIHdpdGggSVJRIHVubWFza2luZyBvbiAqLwotCVZJQV9CQURfSUQJPSAweDEwMCwgLyogSGFzIHdyb25nIHZlbmRvciBJRCAoMHgxMTA3KSAqLwotCVZJQV9CQURfQVNUCT0gMHgyMDAsIC8qIERvbid0IHRvdWNoIEFkZHJlc3MgU2V0dXAgVGltaW5nICovCi0JVklBX05PX0VOQUJMRVMJPSAweDQwMCwgLyogSGFzIG5vIGVuYWJsZWJpdHMgKi8KLQlWSUFfU0FUQV9QQVRBCT0gMHg4MDAsIC8qIFNBVEEvUEFUQSBjb21iaW5lZCBjb25maWd1cmF0aW9uICovCisJVklBX0JBRF9QUkVRCT0gMHgwMSwgLyogQ3Jhc2hlcyBpZiBQUkVRIyB0aWxsIEREQUNLIyBzZXQgKi8KKwlWSUFfQkFEX0NMSzY2CT0gMHgwMiwgLyogNjYgTUh6IGNsb2NrIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgKi8KKwlWSUFfU0VUX0ZJRk8JPSAweDA0LCAvKiBOZWVkcyB0byBoYXZlIEZJRk8gc3BsaXQgc2V0ICovCisJVklBX05PX1VOTUFTSwk9IDB4MDgsIC8qIERvZXNuJ3Qgd29yayB3aXRoIElSUSB1bm1hc2tpbmcgb24gKi8KKwlWSUFfQkFEX0lECT0gMHgxMCwgLyogSGFzIHdyb25nIHZlbmRvciBJRCAoMHgxMTA3KSAqLworCVZJQV9CQURfQVNUCT0gMHgyMCwgLyogRG9uJ3QgdG91Y2ggQWRkcmVzcyBTZXR1cCBUaW1pbmcgKi8KKwlWSUFfTk9fRU5BQkxFUwk9IDB4NDAsIC8qIEhhcyBubyBlbmFibGViaXRzICovCisJVklBX1NBVEFfUEFUQQk9IDB4ODAsIC8qIFNBVEEvUEFUQSBjb21iaW5lZCBjb25maWd1cmF0aW9uICovCiB9OwogCiBlbnVtIHsKQEAgLTk5LDQwICs4OSwzNyBAQAogCXUxNiBpZDsKIAl1OCByZXZfbWluOwogCXU4IHJldl9tYXg7Ci0JdTE2IGZsYWdzOworCXU4IHVkbWFfbWFzazsKKwl1OCBmbGFnczsKIH0gdmlhX2lzYV9icmlkZ2VzW10gPSB7Ci0JeyAidng4NTUiLAlQQ0lfREVWSUNFX0lEX1ZJQV9WWDg1NSwgICAgMHgwMCwgMHgyZiwKLQkgIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIHwgVklBX1NBVEFfUEFUQSB9LAotCXsgInZ4ODAwIiwJUENJX0RFVklDRV9JRF9WSUFfVlg4MDAsICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8Ci0JVklBX0JBRF9BU1QgfCBWSUFfU0FUQV9QQVRBIH0sCi0JeyAidnQ4MjYxIiwJUENJX0RFVklDRV9JRF9WSUFfODI2MSwgICAgIDB4MDAsIDB4MmYsCi0JICBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAotCXsgInZ0ODIzN3MiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM3UywgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKLQl7ICJ2dDgyNTEiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjUxLCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKLQl7ICJjeDcwMCIsCVBDSV9ERVZJQ0VfSURfVklBX0NYNzAwLCAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB8IFZJQV9TQVRBX1BBVEEgfSwKLQl7ICJ2dDY0MTAiLAlQQ0lfREVWSUNFX0lEX1ZJQV82NDEwLCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfTk9fRU5BQkxFUyB9LAotCXsgInZ0NjQxNSIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTUsICAgICAweDAwLCAweGZmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB8IFZJQV9OT19FTkFCTEVTIH0sCi0JeyAidnQ4MjM3YSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzdBLCAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAotCXsgInZ0ODIzNyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzcsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAotCXsgInZ0ODIzNSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzUsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAotCXsgInZ0ODIzM2EiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjMzQSwgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKLQl7ICJ2dDgyMzNjIiwJUENJX0RFVklDRV9JRF9WSUFfODIzM0NfMCwgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEwMCB9LAotCXsgInZ0ODIzMyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzNfMCwgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMDAgfSwKLQl7ICJ2dDgyMzEiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjMxLCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTAwIH0sCi0JeyAidnQ4MmM2ODZiIiwJUENJX0RFVklDRV9JRF9WSUFfODJDNjg2LCAgIDB4NDAsIDB4NGYsIFZJQV9VRE1BXzEwMCB9LAotCXsgInZ0ODJjNjg2YSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzY4NiwgICAweDEwLCAweDJmLCBWSUFfVURNQV82NiB9LAotCXsgInZ0ODJjNjg2IiwJUENJX0RFVklDRV9JRF9WSUFfODJDNjg2LCAgIDB4MDAsIDB4MGYsIFZJQV9VRE1BXzMzIHwgVklBX0JBRF9DTEs2NiB9LAotCXsgInZ0ODJjNTk2YiIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzU5NiwgICAweDEwLCAweDJmLCBWSUFfVURNQV82NiB9LAotCXsgInZ0ODJjNTk2YSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzU5NiwgICAweDAwLCAweDBmLCBWSUFfVURNQV8zMyB8IFZJQV9CQURfQ0xLNjYgfSwKLQl7ICJ2dDgyYzU4NmIiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMCwgMHg0NywgMHg0ZiwgVklBX1VETUFfMzMgfCBWSUFfU0VUX0ZJRk8gfSwKLQl7ICJ2dDgyYzU4NmIiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMCwgMHg0MCwgMHg0NiwgVklBX1VETUFfMzMgfCBWSUFfU0VUX0ZJRk8gfCBWSUFfQkFEX1BSRVEgfSwKLQl7ICJ2dDgyYzU4NmIiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMCwgMHgzMCwgMHgzZiwgVklBX1VETUFfMzMgfCBWSUFfU0VUX0ZJRk8gfSwKLQl7ICJ2dDgyYzU4NmEiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMCwgMHgyMCwgMHgyZiwgVklBX1VETUFfMzMgfCBWSUFfU0VUX0ZJRk8gfSwKLQl7ICJ2dDgyYzU4NiIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzU4Nl8wLCAweDAwLCAweDBmLCBWSUFfVURNQV9OT05FIHwgVklBX1NFVF9GSUZPIH0sCi0JeyAidnQ4MmM1NzYiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1NzYsICAgMHgwMCwgMHgyZiwgVklBX1VETUFfTk9ORSB8IFZJQV9TRVRfRklGTyB8IFZJQV9OT19VTk1BU0sgfSwKLQl7ICJ2dDgyYzU3NiIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzU3NiwgICAweDAwLCAweDJmLCBWSUFfVURNQV9OT05FIHwgVklBX1NFVF9GSUZPIHwgVklBX05PX1VOTUFTSyB8IFZJQV9CQURfSUQgfSwKLQl7ICJ2dHh4eHgiLAlQQ0lfREVWSUNFX0lEX1ZJQV9BTk9OLCAgICAweDAwLCAweDJmLAotCSAgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKKwl7ICJ2eDg1NSIsCVBDSV9ERVZJQ0VfSURfVklBX1ZYODU1LCAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIHwgVklBX1NBVEFfUEFUQSB9LAorCXsgInZ4ODAwIiwJUENJX0RFVklDRV9JRF9WSUFfVlg4MDAsICAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfCBWSUFfU0FUQV9QQVRBIH0sCisJeyAidnQ4MjYxIiwJUENJX0RFVklDRV9JRF9WSUFfODI2MSwgICAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfSwKKwl7ICJ2dDgyMzdzIiwJUENJX0RFVklDRV9JRF9WSUFfODIzN1MsICAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfSwKKwl7ICJ2dDgyNTEiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjUxLCAgICAgMHgwMCwgMHgyZiwgQVRBX1VETUE2LCBWSUFfQkFEX0FTVCB9LAorCXsgImN4NzAwIiwJUENJX0RFVklDRV9JRF9WSUFfQ1g3MDAsICAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfCBWSUFfU0FUQV9QQVRBIH0sCisJeyAidnQ2NDEwIiwJUENJX0RFVklDRV9JRF9WSUFfNjQxMCwgICAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfCBWSUFfTk9fRU5BQkxFUyB9LAorCXsgInZ0NjQxNSIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTUsICAgICAweDAwLCAweGZmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIHwgVklBX05PX0VOQUJMRVMgfSwKKwl7ICJ2dDgyMzdhIiwJUENJX0RFVklDRV9JRF9WSUFfODIzN0EsICAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfSwKKwl7ICJ2dDgyMzciLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM3LCAgICAgMHgwMCwgMHgyZiwgQVRBX1VETUE2LCBWSUFfQkFEX0FTVCB9LAorCXsgInZ0ODIzNSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzUsICAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIH0sCisJeyAidnQ4MjMzYSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzNBLCAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIH0sCisJeyAidnQ4MjMzYyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzNDXzAsICAweDAwLCAweDJmLCBBVEFfVURNQTUsIH0sCisJeyAidnQ4MjMzIiwJUENJX0RFVklDRV9JRF9WSUFfODIzM18wLCAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNSwgfSwKKwl7ICJ2dDgyMzEiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjMxLCAgICAgMHgwMCwgMHgyZiwgQVRBX1VETUE1LCB9LAorCXsgInZ0ODJjNjg2YiIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzY4NiwgICAweDQwLCAweDRmLCBBVEFfVURNQTUsIH0sCisJeyAidnQ4MmM2ODZhIiwJUENJX0RFVklDRV9JRF9WSUFfODJDNjg2LCAgIDB4MTAsIDB4MmYsIEFUQV9VRE1BNCwgfSwKKwl7ICJ2dDgyYzY4NiIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzY4NiwgICAweDAwLCAweDBmLCBBVEFfVURNQTIsIFZJQV9CQURfQ0xLNjYgfSwKKwl7ICJ2dDgyYzU5NmIiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTYsICAgMHgxMCwgMHgyZiwgQVRBX1VETUE0LCB9LAorCXsgInZ0ODJjNTk2YSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzU5NiwgICAweDAwLCAweDBmLCBBVEFfVURNQTIsIFZJQV9CQURfQ0xLNjYgfSwKKwl7ICJ2dDgyYzU4NmIiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMCwgMHg0NywgMHg0ZiwgQVRBX1VETUEyLCBWSUFfU0VUX0ZJRk8gfSwKKwl7ICJ2dDgyYzU4NmIiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMCwgMHg0MCwgMHg0NiwgQVRBX1VETUEyLCBWSUFfU0VUX0ZJRk8gfCBWSUFfQkFEX1BSRVEgfSwKKwl7ICJ2dDgyYzU4NmIiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMCwgMHgzMCwgMHgzZiwgQVRBX1VETUEyLCBWSUFfU0VUX0ZJRk8gfSwKKwl7ICJ2dDgyYzU4NmEiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMCwgMHgyMCwgMHgyZiwgQVRBX1VETUEyLCBWSUFfU0VUX0ZJRk8gfSwKKwl7ICJ2dDgyYzU4NiIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzU4Nl8wLCAweDAwLCAweDBmLCAgICAgIDB4MDAsIFZJQV9TRVRfRklGTyB9LAorCXsgInZ0ODJjNTc2IiwJUENJX0RFVklDRV9JRF9WSUFfODJDNTc2LCAgIDB4MDAsIDB4MmYsICAgICAgMHgwMCwgVklBX1NFVF9GSUZPIHwgVklBX05PX1VOTUFTSyB9LAorCXsgInZ0ODJjNTc2IiwJUENJX0RFVklDRV9JRF9WSUFfODJDNTc2LCAgIDB4MDAsIDB4MmYsICAgICAgMHgwMCwgVklBX1NFVF9GSUZPIHwgVklBX05PX1VOTUFTSyB8IFZJQV9CQURfSUQgfSwKKwl7ICJ2dHh4eHgiLAlQQ0lfREVWSUNFX0lEX1ZJQV9BTk9OLCAgICAgMHgwMCwgMHgyZiwgQVRBX1VETUE2LCBWSUFfQkFEX0FTVCB9LAogCXsgTlVMTCB9CiB9OwogCkBAIC0xOTEsMTAgKzE3OCwxMCBAQAogCQlyZXR1cm4gQVRBX0NCTF9TQVRBOwogCiAJLyogRWFybHkgY2hpcHMgYXJlIDQwIHdpcmUgKi8KLQlpZiAoKGNvbmZpZy0+ZmxhZ3MgJiBWSUFfVURNQSkgPCBWSUFfVURNQV82NikKKwlpZiAoY29uZmlnLT51ZG1hX21hc2sgPCBBVEFfVURNQTQpCiAJCXJldHVybiBBVEFfQ0JMX1BBVEE0MDsKIAkvKiBVRE1BIDY2IGNoaXBzIGhhdmUgb25seSBkcml2ZSBzaWRlIGxvZ2ljICovCi0JZWxzZSBpZiAoKGNvbmZpZy0+ZmxhZ3MgJiBWSUFfVURNQSkgPCBWSUFfVURNQV8xMDApCisJZWxzZSBpZiAoY29uZmlnLT51ZG1hX21hc2sgPCBBVEFfVURNQTUpCiAJCXJldHVybiBBVEFfQ0JMX1BBVEFfVU5LOwogCS8qIFVETUEgMTAwIG9yIGxhdGVyICovCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NTAsICZhdGE2Nik7CkBAIC0yMjksMTEgKzIxNiwxMCBAQAogCiAKIC8qKgotICoJdmlhX2RvX3NldF9tb2RlCS0Jc2V0IGluaXRpYWwgUElPIG1vZGUgZGF0YQorICoJdmlhX2RvX3NldF9tb2RlCS0Jc2V0IHRyYW5zZmVyIG1vZGUgZGF0YQogICoJQGFwOiBBVEEgaW50ZXJmYWNlCiAgKglAYWRldjogQVRBIGRldmljZQogICoJQG1vZGU6IEFUQSBtb2RlIGJlaW5nIHByb2dyYW1tZWQKLSAqCUB0ZGl2OiBDbG9ja3MgcGVyIFBDSSBjbG9jawogICoJQHNldF9hc3Q6IFNldCB0byBwcm9ncmFtIGFkZHJlc3Mgc2V0dXAKICAqCUB1ZG1hX3R5cGU6IFVETUEgbW9kZS9mb3JtYXQgb2YgcmVnaXN0ZXJzCiAgKgpAQCAtMjQ0LDE3ICsyMzAsMjcgQEAKICAqCW9uIHRoZSB0d28gY2hhbm5lbHMuCiAgKi8KIAotc3RhdGljIHZvaWQgdmlhX2RvX3NldF9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2LCBpbnQgbW9kZSwgaW50IHRkaXYsIGludCBzZXRfYXN0LCBpbnQgdWRtYV90eXBlKQorc3RhdGljIHZvaWQgdmlhX2RvX3NldF9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2LAorCQkJICAgIGludCBtb2RlLCBpbnQgc2V0X2FzdCwgaW50IHVkbWFfdHlwZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CiAJc3RydWN0IGF0YV9kZXZpY2UgKnBlZXIgPSBhdGFfZGV2X3BhaXIoYWRldik7CiAJc3RydWN0IGF0YV90aW1pbmcgdCwgcDsKLQlzdGF0aWMgaW50IHZpYV9jbG9jayA9IDMzMzMzOwkvKiBCdXMgY2xvY2sgaW4ga0haIC0gb3VnaHQgdG8gYmUgdHVuYWJsZSBvbmUgZGF5ICovCisJc3RhdGljIGludCB2aWFfY2xvY2sgPSAzMzMzMzsJLyogQnVzIGNsb2NrIGluIGtIWiAqLwogCXVuc2lnbmVkIGxvbmcgVCA9ICAxMDAwMDAwMDAwIC8gdmlhX2Nsb2NrOwotCXVuc2lnbmVkIGxvbmcgVVQgPSBUL3RkaXY7CisJdW5zaWduZWQgbG9uZyBVVCA9IFQ7CiAJaW50IHV0OwogCWludCBvZmZzZXQgPSAzIC0gKDIqYXAtPnBvcnRfbm8pIC0gYWRldi0+ZGV2bm87CiAKKwlzd2l0Y2ggKHVkbWFfdHlwZSkgeworCWNhc2UgQVRBX1VETUE0OgorCQlVVCA9IFQgLyAyOyBicmVhazsKKwljYXNlIEFUQV9VRE1BNToKKwkJVVQgPSBUIC8gMzsgYnJlYWs7CisJY2FzZSBBVEFfVURNQTY6CisJCVVUID0gVCAvIDQ7IGJyZWFrOworCX0KKwogCS8qIENhbGN1bGF0ZSB0aGUgdGltaW5nIHZhbHVlcyB3ZSByZXF1aXJlICovCiAJYXRhX3RpbWluZ19jb21wdXRlKGFkZXYsIG1vZGUsICZ0LCBULCBVVCk7CiAKQEAgLTI3Myw3ICsyNjksNyBAQAogCiAJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NEMsICZzZXR1cCk7CiAJCXNldHVwICY9IH4oMyA8PCBzaGlmdCk7Ci0JCXNldHVwIHw9IGNsYW1wX3ZhbCh0LnNldHVwLCAxLCA0KSA8PCBzaGlmdDsJLyogMSw0IG9yIDEsNCAtIDEgIEZJWE1FICovCisJCXNldHVwIHw9IChjbGFtcF92YWwodC5zZXR1cCwgMSwgNCkgLSAxKSA8PCBzaGlmdDsKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NEMsIHNldHVwKTsKIAl9CiAKQEAgLTI4NCwyMiArMjgwLDIwIEBACiAJCSgoY2xhbXBfdmFsKHQuYWN0aXZlLCAxLCAxNikgLSAxKSA8PCA0KSB8IChjbGFtcF92YWwodC5yZWNvdmVyLCAxLCAxNikgLSAxKSk7CiAKIAkvKiBMb2FkIHRoZSBVRE1BIGJpdHMgYWNjb3JkaW5nIHRvIHR5cGUgKi8KLQlzd2l0Y2godWRtYV90eXBlKSB7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBCVUcoKSA/ICovCi0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSAzMzoKLQkJCXV0ID0gdC51ZG1hID8gKDB4ZTAgfCAoY2xhbXBfdmFsKHQudWRtYSwgMiwgNSkgLSAyKSkgOiAweDAzOwotCQkJYnJlYWs7Ci0JCWNhc2UgNjY6Ci0JCQl1dCA9IHQudWRtYSA/ICgweGU4IHwgKGNsYW1wX3ZhbCh0LnVkbWEsIDIsIDkpIC0gMikpIDogMHgwZjsKLQkJCWJyZWFrOwotCQljYXNlIDEwMDoKLQkJCXV0ID0gdC51ZG1hID8gKDB4ZTAgfCAoY2xhbXBfdmFsKHQudWRtYSwgMiwgOSkgLSAyKSkgOiAweDA3OwotCQkJYnJlYWs7Ci0JCWNhc2UgMTMzOgotCQkJdXQgPSB0LnVkbWEgPyAoMHhlMCB8IChjbGFtcF92YWwodC51ZG1hLCAyLCA5KSAtIDIpKSA6IDB4MDc7Ci0JCQlicmVhazsKKwlzd2l0Y2ggKHVkbWFfdHlwZSkgeworCWNhc2UgQVRBX1VETUEyOgorCWRlZmF1bHQ6CisJCXV0ID0gdC51ZG1hID8gKDB4ZTAgfCAoY2xhbXBfdmFsKHQudWRtYSwgMiwgNSkgLSAyKSkgOiAweDAzOworCQlicmVhazsKKwljYXNlIEFUQV9VRE1BNDoKKwkJdXQgPSB0LnVkbWEgPyAoMHhlOCB8IChjbGFtcF92YWwodC51ZG1hLCAyLCA5KSAtIDIpKSA6IDB4MGY7CisJCWJyZWFrOworCWNhc2UgQVRBX1VETUE1OgorCQl1dCA9IHQudWRtYSA/ICgweGUwIHwgKGNsYW1wX3ZhbCh0LnVkbWEsIDIsIDkpIC0gMikpIDogMHgwNzsKKwkJYnJlYWs7CisJY2FzZSBBVEFfVURNQTY6CisJCXV0ID0gdC51ZG1hID8gKDB4ZTAgfCAoY2xhbXBfdmFsKHQudWRtYSwgMiwgOSkgLSAyKSkgOiAweDA3OworCQlicmVhazsKIAl9CiAKIAkvKiBTZXQgVURNQSB1bmxlc3MgZGV2aWNlIGlzIG5vdCBVRE1BIGNhcGFibGUgKi8KQEAgLTMyNSwyMiArMzE5LDE2IEBACiB7CiAJY29uc3Qgc3RydWN0IHZpYV9pc2FfYnJpZGdlICpjb25maWcgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwogCWludCBzZXRfYXN0ID0gKGNvbmZpZy0+ZmxhZ3MgJiBWSUFfQkFEX0FTVCkgPyAwIDogMTsKLQlpbnQgbW9kZSA9IGNvbmZpZy0+ZmxhZ3MgJiBWSUFfVURNQTsKLQlzdGF0aWMgdTggdGNsb2NrWzVdID0geyAxLCAxLCAyLCAzLCA0IH07Ci0Jc3RhdGljIHU4IHVkbWFbNV0gPSB7IDAsIDMzLCA2NiwgMTAwLCAxMzMgfTsKIAotCXZpYV9kb19zZXRfbW9kZShhcCwgYWRldiwgYWRldi0+cGlvX21vZGUsIHRjbG9ja1ttb2RlXSwgc2V0X2FzdCwgdWRtYVttb2RlXSk7CisJdmlhX2RvX3NldF9tb2RlKGFwLCBhZGV2LCBhZGV2LT5waW9fbW9kZSwgc2V0X2FzdCwgY29uZmlnLT51ZG1hX21hc2spOwogfQogCiBzdGF0aWMgdm9pZCB2aWFfc2V0X2RtYW1vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCiB7CiAJY29uc3Qgc3RydWN0IHZpYV9pc2FfYnJpZGdlICpjb25maWcgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwogCWludCBzZXRfYXN0ID0gKGNvbmZpZy0+ZmxhZ3MgJiBWSUFfQkFEX0FTVCkgPyAwIDogMTsKLQlpbnQgbW9kZSA9IGNvbmZpZy0+ZmxhZ3MgJiBWSUFfVURNQTsKLQlzdGF0aWMgdTggdGNsb2NrWzVdID0geyAxLCAxLCAyLCAzLCA0IH07Ci0Jc3RhdGljIHU4IHVkbWFbNV0gPSB7IDAsIDMzLCA2NiwgMTAwLCAxMzMgfTsKIAotCXZpYV9kb19zZXRfbW9kZShhcCwgYWRldiwgYWRldi0+ZG1hX21vZGUsIHRjbG9ja1ttb2RlXSwgc2V0X2FzdCwgdWRtYVttb2RlXSk7CisJdmlhX2RvX3NldF9tb2RlKGFwLCBhZGV2LCBhZGV2LT5kbWFfbW9kZSwgc2V0X2FzdCwgY29uZmlnLT51ZG1hX21hc2spOwogfQogCiAvKioKQEAgLTYwNCwzMyArNTkyLDI5IEBACiAJdmlhX2NvbmZpZ19maWZvKHBkZXYsIGNvbmZpZy0+ZmxhZ3MpOwogCiAJLyogQ2xvY2sgc2V0IHVwICovCi0Jc3dpdGNoKGNvbmZpZy0+ZmxhZ3MgJiBWSUFfVURNQSkgewotCQljYXNlIFZJQV9VRE1BX05PTkU6Ci0JCQlpZiAoY29uZmlnLT5mbGFncyAmIFZJQV9OT19VTk1BU0spCi0JCQkJcHBpWzBdID0gJnZpYV9td2RtYV9pbmZvX2JvcmtlZDsKLQkJCWVsc2UKLQkJCQlwcGlbMF0gPSAmdmlhX213ZG1hX2luZm87Ci0JCQlicmVhazsKLQkJY2FzZSBWSUFfVURNQV8zMzoKLQkJCXBwaVswXSA9ICZ2aWFfdWRtYTMzX2luZm87Ci0JCQlicmVhazsKLQkJY2FzZSBWSUFfVURNQV82NjoKLQkJCXBwaVswXSA9ICZ2aWFfdWRtYTY2X2luZm87Ci0JCQkvKiBUaGUgNjYgTUh6IGRldmljZXMgcmVxdWlyZSB3ZSBlbmFibGUgdGhlIGNsb2NrICovCi0JCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHg1MCwgJnRpbWluZyk7Ci0JCQl0aW1pbmcgfD0gMHg4MDAwODsKLQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHg1MCwgdGltaW5nKTsKLQkJCWJyZWFrOwotCQljYXNlIFZJQV9VRE1BXzEwMDoKLQkJCXBwaVswXSA9ICZ2aWFfdWRtYTEwMF9pbmZvOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklBX1VETUFfMTMzOgotCQkJcHBpWzBdID0gJnZpYV91ZG1hMTMzX2luZm87Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCVdBUk5fT04oMSk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJc3dpdGNoIChjb25maWctPnVkbWFfbWFzaykgeworCWNhc2UgMHgwMDoKKwkJaWYgKGNvbmZpZy0+ZmxhZ3MgJiBWSUFfTk9fVU5NQVNLKQorCQkJcHBpWzBdID0gJnZpYV9td2RtYV9pbmZvX2JvcmtlZDsKKwkJZWxzZQorCQkJcHBpWzBdID0gJnZpYV9td2RtYV9pbmZvOworCQlicmVhazsKKwljYXNlIEFUQV9VRE1BMjoKKwkJcHBpWzBdID0gJnZpYV91ZG1hMzNfaW5mbzsKKwkJYnJlYWs7CisJY2FzZSBBVEFfVURNQTQ6CisJCXBwaVswXSA9ICZ2aWFfdWRtYTY2X2luZm87CisJCWJyZWFrOworCWNhc2UgQVRBX1VETUE1OgorCQlwcGlbMF0gPSAmdmlhX3VkbWExMDBfaW5mbzsKKwkJYnJlYWs7CisJY2FzZSBBVEFfVURNQTY6CisJCXBwaVswXSA9ICZ2aWFfdWRtYTEzM19pbmZvOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlyZXR1cm4gLUVOT0RFVjsKKyAJfQogCiAJaWYgKGNvbmZpZy0+ZmxhZ3MgJiBWSUFfQkFEX0NMSzY2KSB7CiAJCS8qIERpc2FibGUgdGhlIDY2TUh6IGNsb2NrIG9uIHByb2JsZW0gZGV2aWNlcyAqLwpAQCAtNjQwLDcgKzYyNCw3IEBACiAJfQogCiAJLyogV2UgaGF2ZSBlc3RhYmxpc2hlZCB0aGUgZGV2aWNlIHR5cGUsIG5vdyBmaXJlIGl0IHVwICovCi0JcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnZpYV9zaHQsICh2b2lkICopY29uZmlnKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmdmlhX3NodCwgKHZvaWQgKiljb25maWcsIDApOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC02NjcsNyArNjUxLDcgQEAKIAogCXZpYV9jb25maWdfZmlmbyhwZGV2LCBjb25maWctPmZsYWdzKTsKIAotCWlmICgoY29uZmlnLT5mbGFncyAmIFZJQV9VRE1BKSA9PSBWSUFfVURNQV82NikgeworCWlmIChjb25maWctPnVkbWFfbWFzayA9PSBBVEFfVURNQTQpIHsKIAkJLyogVGhlIDY2IE1IeiBkZXZpY2VzIHJlcXVpcmUgd2UgZW5hYmxlIHRoZSBjbG9jayAqLwogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHg1MCwgJnRpbWluZyk7CiAJCXRpbWluZyB8PSAweDgwMDA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9udi5jIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCmluZGV4IDBjODJkMzMuLjY4NGZlMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKQEAgLTc3Miw3ICs3NzIsNyBAQAogCX0KIAogCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KHNkZXYtPnJlcXVlc3RfcXVldWUsIHNlZ21lbnRfYm91bmRhcnkpOwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgc2dfdGFibGVzaXplKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHNkZXYtPnJlcXVlc3RfcXVldWUsIHNnX3RhYmxlc2l6ZSk7CiAJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0lORk8sCiAJCSJETUEgbWFzayAweCVsbFgsIHNlZ21lbnQgYm91bmRhcnkgMHglbFgsIGh3IHNlZ3MgJWh1XG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKSphcC0+aG9zdC0+ZGV2LT5kbWFfbWFzaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCmluZGV4IDAyZWZkOWEuLjA4ZjY1NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV92aWEuYwpAQCAtNDAsMTEgKzQwLDEzIEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInNhdGFfdmlhIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMi40IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMi42IgogCiAvKgogICogdnQ4MjUxIGlzIGRpZmZlcmVudCBmcm9tIG90aGVyIHNhdGEgY29udHJvbGxlcnMgb2YgVklBLiAgSXQgaGFzIHR3bwpAQCAtODAsNiArODIsNyBAQAogc3RhdGljIHZvaWQgc3ZpYV90Zl9sb2FkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKIHN0YXRpYyB2b2lkIHN2aWFfbm9vcF9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgaW50IHZ0NjQyMF9wcmVyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpOworc3RhdGljIHZvaWQgdnQ2NDIwX2JtZG1hX3N0YXJ0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIGludCB2dDY0MjFfcGF0YV9jYWJsZV9kZXRlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgdm9pZCB2dDY0MjFfc2V0X3Bpb19tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KTsKIHN0YXRpYyB2b2lkIHZ0NjQyMV9zZXRfZG1hX21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpOwpAQCAtMTIxLDYgKzEyNCw3IEBACiAJLmluaGVyaXRzCQk9ICZzdmlhX2Jhc2Vfb3BzLAogCS5mcmVlemUJCQk9IHN2aWFfbm9vcF9mcmVlemUsCiAJLnByZXJlc2V0CQk9IHZ0NjQyMF9wcmVyZXNldCwKKwkuYm1kbWFfc3RhcnQJCT0gdnQ2NDIwX2JtZG1hX3N0YXJ0LAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHZ0NjQyMV9wYXRhX29wcyA9IHsKQEAgLTM3Nyw2ICszODEsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgdnQ2NDIwX2JtZG1hX3N0YXJ0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwlpZiAoKHFjLT50Zi5jb21tYW5kID09IEFUQV9DTURfUEFDS0VUKSAmJgorCSAgICAocWMtPnNjc2ljbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpKSB7CisJCS8qIFByZXZlbnRzIGNvcnJ1cHRpb24gb24gc29tZSBBVEFQSSBidXJuZXJzICovCisJCWF0YV9zZmZfcGF1c2UoYXApOworCX0KKwlhdGFfYm1kbWFfc3RhcnQocWMpOworfQorCiBzdGF0aWMgaW50IHZ0NjQyMV9wYXRhX2NhYmxlX2RldGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKQEAgLTM5MiwxNCArNDA3LDE2IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCXN0YXRpYyBjb25zdCB1OCBwaW9fYml0c1tdID0geyAweEE4LCAweDY1LCAweDY1LCAweDMxLCAweDIwIH07Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBBVEFfUElPX1RJTUlORywgcGlvX2JpdHNbYWRldi0+cGlvX21vZGUgLSBYRkVSX1BJT18wXSk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBBVEFfUElPX1RJTUlORyAtIGFkZXYtPmRldm5vLAorCQkJICAgICAgcGlvX2JpdHNbYWRldi0+cGlvX21vZGUgLSBYRkVSX1BJT18wXSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZ0NjQyMV9zZXRfZG1hX21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCXN0YXRpYyBjb25zdCB1OCB1ZG1hX2JpdHNbXSA9IHsgMHhFRSwgMHhFOCwgMHhFNiwgMHhFNCwgMHhFMiwgMHhFMSwgMHhFMCwgMHhFMCB9OwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQVRBX1VETUFfVElNSU5HLCB1ZG1hX2JpdHNbYWRldi0+ZG1hX21vZGUgLSBYRkVSX1VETUFfMF0pOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQVRBX1VETUFfVElNSU5HIC0gYWRldi0+ZGV2bm8sCisJCQkgICAgICB1ZG1hX2JpdHNbYWRldi0+ZG1hX21vZGUgLSBYRkVSX1VETUFfMF0pOwogfQogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHN2aWFfYmFyX3NpemVzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY2xhc3MuYyBiL2RyaXZlcnMvYmFzZS9jbGFzcy5jCmluZGV4IDE2MTc0NmQuLjZlMmMzYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jbGFzcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9jbGFzcy5jCkBAIC01OSw2ICs1OSw4IEBACiAJZWxzZQogCQlwcl9kZWJ1ZygiY2xhc3MgJyVzJyBkb2VzIG5vdCBoYXZlIGEgcmVsZWFzZSgpIGZ1bmN0aW9uLCAiCiAJCQkgImJlIGNhcmVmdWxcbiIsIGNsYXNzLT5uYW1lKTsKKworCWtmcmVlKGNwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgY2xhc3Nfc3lzZnNfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKaW5kZXggYTUxNDJiZC4uMGUyNmE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVzdW1lLXRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgogCiAjaW5jbHVkZSAiLi4vYmFzZS5oIgogI2luY2x1ZGUgInBvd2VyLmgiCkBAIC00Miw2ICs0Myw3IEBACiBMSVNUX0hFQUQoZHBtX2xpc3QpOwogCiBzdGF0aWMgREVGSU5FX01VVEVYKGRwbV9saXN0X210eCk7CitzdGF0aWMgcG1fbWVzc2FnZV90IHBtX3RyYW5zaXRpb247CiAKIC8qCiAgKiBTZXQgb25jZSB0aGUgcHJlcGFyYXRpb24gb2YgZGV2aWNlcyBmb3IgYSBQTSB0cmFuc2l0aW9uIGhhcyBzdGFydGVkLCByZXNldApAQCAtNTYsNiArNTgsNyBAQAogdm9pZCBkZXZpY2VfcG1faW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fT047CisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPnBvd2VyLmNvbXBsZXRpb24pOwogCXBtX3J1bnRpbWVfaW5pdChkZXYpOwogfQogCkBAIC0xMTEsNiArMTE0LDcgQEAKIAlwcl9kZWJ1ZygiUE06IFJlbW92aW5nIGluZm8gZm9yICVzOiVzXG4iLAogCQkgZGV2LT5idXMgPyBkZXYtPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAogCQkga29iamVjdF9uYW1lKCZkZXYtPmtvYmopKTsKKwljb21wbGV0ZV9hbGwoJmRldi0+cG93ZXIuY29tcGxldGlvbik7CiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKIAlsaXN0X2RlbF9pbml0KCZkZXYtPnBvd2VyLmVudHJ5KTsKIAltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CkBAIC0xODgsNiArMTkyLDMxIEBACiB9CiAKIC8qKgorICogZHBtX3dhaXQgLSBXYWl0IGZvciBhIFBNIG9wZXJhdGlvbiB0byBjb21wbGV0ZS4KKyAqIEBkZXY6IERldmljZSB0byB3YWl0IGZvci4KKyAqIEBhc3luYzogSWYgdW5zZXQsIHdhaXQgb25seSBpZiB0aGUgZGV2aWNlJ3MgcG93ZXIuYXN5bmNfc3VzcGVuZCBmbGFnIGlzIHNldC4KKyAqLworc3RhdGljIHZvaWQgZHBtX3dhaXQoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGFzeW5jKQoreworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwlpZiAoYXN5bmMgfHwgKHBtX2FzeW5jX2VuYWJsZWQgJiYgZGV2LT5wb3dlci5hc3luY19zdXNwZW5kKSkKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmZGV2LT5wb3dlci5jb21wbGV0aW9uKTsKK30KKworc3RhdGljIGludCBkcG1fd2FpdF9mbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmFzeW5jX3B0cikKK3sKKwlkcG1fd2FpdChkZXYsICooKGJvb2wgKilhc3luY19wdHIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHBtX3dhaXRfZm9yX2NoaWxkcmVuKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBhc3luYykKK3sKKyAgICAgICBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoZGV2LCAmYXN5bmMsIGRwbV93YWl0X2ZuKTsKK30KKworLyoqCiAgKiBwbV9vcCAtIEV4ZWN1dGUgdGhlIFBNIG9wZXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgZ2l2ZW4gUE0gZXZlbnQuCiAgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgogICogQG9wczogUE0gb3BlcmF0aW9ucyB0byBjaG9vc2UgZnJvbS4KQEAgLTI3MSw4ICszMDAsOSBAQAogCWt0aW1lX3QgY2FsbHRpbWUsIGRlbHRhLCByZXR0aW1lOwogCiAJaWYgKGluaXRjYWxsX2RlYnVnKSB7Ci0JCXByX2luZm8oImNhbGxpbmcgICVzX2krIEAgJWlcbiIsCi0JCQkJZGV2X25hbWUoZGV2KSwgdGFza19waWRfbnIoY3VycmVudCkpOworCQlwcl9pbmZvKCJjYWxsaW5nICAlcysgQCAlaSwgcGFyZW50OiAlc1xuIiwKKwkJCQlkZXZfbmFtZShkZXYpLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKKwkJCQlkZXYtPnBhcmVudCA/IGRldl9uYW1lKGRldi0+cGFyZW50KSA6ICJub25lIik7CiAJCWNhbGx0aW1lID0ga3RpbWVfZ2V0KCk7CiAJfQogCkBAIC00NjgsMTYgKzQ5OCwyMCBAQAogICogZGV2aWNlX3Jlc3VtZSAtIEV4ZWN1dGUgInJlc3VtZSIgY2FsbGJhY2tzIGZvciBnaXZlbiBkZXZpY2UuCiAgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgogICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCisgKiBAYXN5bmM6IElmIHRydWUsIHRoZSBkZXZpY2UgaXMgYmVpbmcgcmVzdW1lZCBhc3luY2hyb25vdXNseS4KICAqLwotc3RhdGljIGludCBkZXZpY2VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBkZXZpY2VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlLCBib29sIGFzeW5jKQogewogCWludCBlcnJvciA9IDA7CiAKIAlUUkFDRV9ERVZJQ0UoZGV2KTsKIAlUUkFDRV9SRVNVTUUoMCk7CiAKKwlkcG1fd2FpdChkZXYtPnBhcmVudCwgYXN5bmMpOwogCWRvd24oJmRldi0+c2VtKTsKIAorCWRldi0+cG93ZXIuc3RhdHVzID0gRFBNX1JFU1VNSU5HOworCiAJaWYgKGRldi0+YnVzKSB7CiAJCWlmIChkZXYtPmJ1cy0+cG0pIHsKIAkJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgIiIpOwpAQCAtNTEwLDExICs1NDQsMjkgQEAKIAl9CiAgRW5kOgogCXVwKCZkZXYtPnNlbSk7CisJY29tcGxldGVfYWxsKCZkZXYtPnBvd2VyLmNvbXBsZXRpb24pOwogCiAJVFJBQ0VfUkVTVU1FKGVycm9yKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyB2b2lkIGFzeW5jX3Jlc3VtZSh2b2lkICpkYXRhLCBhc3luY19jb29raWVfdCBjb29raWUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gKHN0cnVjdCBkZXZpY2UgKilkYXRhOworCWludCBlcnJvcjsKKworCWVycm9yID0gZGV2aWNlX3Jlc3VtZShkZXYsIHBtX3RyYW5zaXRpb24sIHRydWUpOworCWlmIChlcnJvcikKKwkJcG1fZGV2X2VycihkZXYsIHBtX3RyYW5zaXRpb24sICIgYXN5bmMiLCBlcnJvcik7CisJcHV0X2RldmljZShkZXYpOworfQorCitzdGF0aWMgYm9vbCBpc19hc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+cG93ZXIuYXN5bmNfc3VzcGVuZCAmJiBwbV9hc3luY19lbmFibGVkCisJCSYmICFwbV90cmFjZV9pc19lbmFibGVkKCk7Cit9CisKIC8qKgogICogZHBtX3Jlc3VtZSAtIEV4ZWN1dGUgInJlc3VtZSIgY2FsbGJhY2tzIGZvciBub24tc3lzZGV2IGRldmljZXMuCiAgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KQEAgLTUyNSwyMSArNTc3LDMzIEBACiBzdGF0aWMgdm9pZCBkcG1fcmVzdW1lKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGRldmljZSAqZGV2OwogCWt0aW1lX3Qgc3RhcnR0aW1lID0ga3RpbWVfZ2V0KCk7CiAKIAlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmRwbV9saXN0KSkgewotCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UoZHBtX2xpc3QubmV4dCk7CisJcG1fdHJhbnNpdGlvbiA9IHN0YXRlOwogCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZkcG1fbGlzdCwgcG93ZXIuZW50cnkpIHsKKwkJaWYgKGRldi0+cG93ZXIuc3RhdHVzIDwgRFBNX09GRikKKwkJCWNvbnRpbnVlOworCisJCUlOSVRfQ09NUExFVElPTihkZXYtPnBvd2VyLmNvbXBsZXRpb24pOworCQlpZiAoaXNfYXN5bmMoZGV2KSkgeworCQkJZ2V0X2RldmljZShkZXYpOworCQkJYXN5bmNfc2NoZWR1bGUoYXN5bmNfcmVzdW1lLCBkZXYpOworCQl9CisJfQorCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcG1fbGlzdCkpIHsKKwkJZGV2ID0gdG9fZGV2aWNlKGRwbV9saXN0Lm5leHQpOwogCQlnZXRfZGV2aWNlKGRldik7Ci0JCWlmIChkZXYtPnBvd2VyLnN0YXR1cyA+PSBEUE1fT0ZGKSB7CisJCWlmIChkZXYtPnBvd2VyLnN0YXR1cyA+PSBEUE1fT0ZGICYmICFpc19hc3luYyhkZXYpKSB7CiAJCQlpbnQgZXJyb3I7CiAKLQkJCWRldi0+cG93ZXIuc3RhdHVzID0gRFBNX1JFU1VNSU5HOwogCQkJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOwogCi0JCQllcnJvciA9IGRldmljZV9yZXN1bWUoZGV2LCBzdGF0ZSk7CisJCQllcnJvciA9IGRldmljZV9yZXN1bWUoZGV2LCBzdGF0ZSwgZmFsc2UpOwogCiAJCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCQkJaWYgKGVycm9yKQpAQCAtNTU0LDYgKzYxOCw3IEBACiAJfQogCWxpc3Rfc3BsaWNlKCZsaXN0LCAmZHBtX2xpc3QpOwogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKKwlhc3luY19zeW5jaHJvbml6ZV9mdWxsKCk7CiAJZHBtX3Nob3dfdGltZShzdGFydHRpbWUsIHN0YXRlLCBOVUxMKTsKIH0KIApAQCAtNzMxLDE3ICs3OTYsMjQgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBpbnQgYXN5bmNfZXJyb3I7CisKIC8qKgogICogZGV2aWNlX3N1c3BlbmQgLSBFeGVjdXRlICJzdXNwZW5kIiBjYWxsYmFja3MgZm9yIGdpdmVuIGRldmljZS4KICAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCiAgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KKyAqIEBhc3luYzogSWYgdHJ1ZSwgdGhlIGRldmljZSBpcyBiZWluZyBzdXNwZW5kZWQgYXN5bmNocm9ub3VzbHkuCiAgKi8KLXN0YXRpYyBpbnQgZGV2aWNlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IF9fZGV2aWNlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUsIGJvb2wgYXN5bmMpCiB7CiAJaW50IGVycm9yID0gMDsKIAorCWRwbV93YWl0X2Zvcl9jaGlsZHJlbihkZXYsIGFzeW5jKTsKIAlkb3duKCZkZXYtPnNlbSk7CiAKKwlpZiAoYXN5bmNfZXJyb3IpCisJCWdvdG8gRW5kOworCiAJaWYgKGRldi0+Y2xhc3MpIHsKIAkJaWYgKGRldi0+Y2xhc3MtPnBtKSB7CiAJCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJjbGFzcyAiKTsKQEAgLTc3MiwxMiArODQ0LDQ0IEBACiAJCQllcnJvciA9IGxlZ2FjeV9zdXNwZW5kKGRldiwgc3RhdGUsIGRldi0+YnVzLT5zdXNwZW5kKTsKIAkJfQogCX0KKworCWlmICghZXJyb3IpCisJCWRldi0+cG93ZXIuc3RhdHVzID0gRFBNX09GRjsKKwogIEVuZDoKIAl1cCgmZGV2LT5zZW0pOworCWNvbXBsZXRlX2FsbCgmZGV2LT5wb3dlci5jb21wbGV0aW9uKTsKIAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIHZvaWQgYXN5bmNfc3VzcGVuZCh2b2lkICpkYXRhLCBhc3luY19jb29raWVfdCBjb29raWUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gKHN0cnVjdCBkZXZpY2UgKilkYXRhOworCWludCBlcnJvcjsKKworCWVycm9yID0gX19kZXZpY2Vfc3VzcGVuZChkZXYsIHBtX3RyYW5zaXRpb24sIHRydWUpOworCWlmIChlcnJvcikgeworCQlwbV9kZXZfZXJyKGRldiwgcG1fdHJhbnNpdGlvbiwgIiBhc3luYyIsIGVycm9yKTsKKwkJYXN5bmNfZXJyb3IgPSBlcnJvcjsKKwl9CisKKwlwdXRfZGV2aWNlKGRldik7Cit9CisKK3N0YXRpYyBpbnQgZGV2aWNlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCUlOSVRfQ09NUExFVElPTihkZXYtPnBvd2VyLmNvbXBsZXRpb24pOworCisJaWYgKHBtX2FzeW5jX2VuYWJsZWQgJiYgZGV2LT5wb3dlci5hc3luY19zdXNwZW5kKSB7CisJCWdldF9kZXZpY2UoZGV2KTsKKwkJYXN5bmNfc2NoZWR1bGUoYXN5bmNfc3VzcGVuZCwgZGV2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIF9fZGV2aWNlX3N1c3BlbmQoZGV2LCBwbV90cmFuc2l0aW9uLCBmYWxzZSk7Cit9CisKIC8qKgogICogZHBtX3N1c3BlbmQgLSBFeGVjdXRlICJzdXNwZW5kIiBjYWxsYmFja3MgZm9yIGFsbCBub24tc3lzZGV2IGRldmljZXMuCiAgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KQEAgLTc5MCwxMyArODk0LDE1IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKKwlwbV90cmFuc2l0aW9uID0gc3RhdGU7CisJYXN5bmNfZXJyb3IgPSAwOwogCXdoaWxlICghbGlzdF9lbXB0eSgmZHBtX2xpc3QpKSB7CiAJCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShkcG1fbGlzdC5wcmV2KTsKIAogCQlnZXRfZGV2aWNlKGRldik7CiAJCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKIAotCQllcnJvciA9IGRldmljZV9zdXNwZW5kKGRldiwgc3RhdGUpOworCQllcnJvciA9IGRldmljZV9zdXNwZW5kKGRldik7CiAKIAkJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKIAkJaWYgKGVycm9yKSB7CkBAIC04MDQsMTMgKzkxMCwxNyBAQAogCQkJcHV0X2RldmljZShkZXYpOwogCQkJYnJlYWs7CiAJCX0KLQkJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fT0ZGOwogCQlpZiAoIWxpc3RfZW1wdHkoJmRldi0+cG93ZXIuZW50cnkpKQogCQkJbGlzdF9tb3ZlKCZkZXYtPnBvd2VyLmVudHJ5LCAmbGlzdCk7CiAJCXB1dF9kZXZpY2UoZGV2KTsKKwkJaWYgKGFzeW5jX2Vycm9yKQorCQkJYnJlYWs7CiAJfQogCWxpc3Rfc3BsaWNlKCZsaXN0LCBkcG1fbGlzdC5wcmV2KTsKIAltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CisJYXN5bmNfc3luY2hyb25pemVfZnVsbCgpOworCWlmICghZXJyb3IpCisJCWVycm9yID0gYXN5bmNfZXJyb3I7CiAJaWYgKCFlcnJvcikKIAkJZHBtX3Nob3dfdGltZShzdGFydHRpbWUsIHN0YXRlLCBOVUxMKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC05MzYsMyArMTA0NiwxNCBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6ICVwRiByZXR1cm5zICVkXG4iLCBmdW5jdGlvbiwgZm4sIHJldCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3N1c3BlbmRfcmVwb3J0X3Jlc3VsdCk7CisKKy8qKgorICogZGV2aWNlX3BtX3dhaXRfZm9yX2RldiAtIFdhaXQgZm9yIHN1c3BlbmQvcmVzdW1lIG9mIGEgZGV2aWNlIHRvIGNvbXBsZXRlLgorICogQGRldjogRGV2aWNlIHRvIHdhaXQgZm9yLgorICogQHN1Ym9yZGluYXRlOiBEZXZpY2UgdGhhdCBuZWVkcyB0byB3YWl0IGZvciBAZGV2LgorICovCit2b2lkIGRldmljZV9wbV93YWl0X2Zvcl9kZXYoc3RydWN0IGRldmljZSAqc3Vib3JkaW5hdGUsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlkcG1fd2FpdChkZXYsIHN1Ym9yZGluYXRlLT5wb3dlci5hc3luY19zdXNwZW5kKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9wbV93YWl0X2Zvcl9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmggYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaAppbmRleCBiOGZhMWFhLi5jMGJkMDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaAorKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaApAQCAtMTIsMTAgKzEyLDEwIEBACiAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIAotLyoKLSAqIG1haW4uYwotICovCisvKiBrZXJuZWwvcG93ZXIvbWFpbi5jICovCitleHRlcm4gaW50IHBtX2FzeW5jX2VuYWJsZWQ7CiAKKy8qIGRyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgKi8KIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGRwbV9saXN0OwkvKiBUaGUgYWN0aXZlIGRldmljZSBsaXN0ICovCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZSAqdG9fZGV2aWNlKHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKaW5kZXggZjhiMDQ0ZS4uNjI2ZGQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCkBAIC0xMDExLDYgKzEwMTEsNTAgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHBtX3J1bnRpbWVfZW5hYmxlKTsKIAogLyoqCisgKiBwbV9ydW50aW1lX2ZvcmJpZCAtIEJsb2NrIHJ1bi10aW1lIFBNIG9mIGEgZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqCisgKiBJbmNyZWFzZSB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnQgYW5kIGNsZWFyIGl0cyBwb3dlci5ydW50aW1lX2F1dG8gZmxhZywKKyAqIHNvIHRoYXQgaXQgY2Fubm90IGJlIHN1c3BlbmRlZCBhdCBydW4gdGltZSB1bnRpbCBwbV9ydW50aW1lX2FsbG93KCkgaXMgY2FsbGVkCisgKiBmb3IgaXQuCisgKi8KK3ZvaWQgcG1fcnVudGltZV9mb3JiaWQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJaWYgKCFkZXYtPnBvd2VyLnJ1bnRpbWVfYXV0bykKKwkJZ290byBvdXQ7CisKKwlkZXYtPnBvd2VyLnJ1bnRpbWVfYXV0byA9IGZhbHNlOworCWF0b21pY19pbmMoJmRldi0+cG93ZXIudXNhZ2VfY291bnQpOworCV9fcG1fcnVudGltZV9yZXN1bWUoZGV2LCBmYWxzZSk7CisKKyBvdXQ6CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwocG1fcnVudGltZV9mb3JiaWQpOworCisvKioKKyAqIHBtX3J1bnRpbWVfYWxsb3cgLSBVbmJsb2NrIHJ1bi10aW1lIFBNIG9mIGEgZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqCisgKiBEZWNyZWFzZSB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnQgYW5kIHNldCBpdHMgcG93ZXIucnVudGltZV9hdXRvIGZsYWcuCisgKi8KK3ZvaWQgcG1fcnVudGltZV9hbGxvdyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwlpZiAoZGV2LT5wb3dlci5ydW50aW1lX2F1dG8pCisJCWdvdG8gb3V0OworCisJZGV2LT5wb3dlci5ydW50aW1lX2F1dG8gPSB0cnVlOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPnBvd2VyLnVzYWdlX2NvdW50KSkKKwkJX19wbV9ydW50aW1lX2lkbGUoZGV2KTsKKworIG91dDoKKwlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9ydW50aW1lX2FsbG93KTsKKworLyoqCiAgKiBwbV9ydW50aW1lX2luaXQgLSBJbml0aWFsaXplIHJ1bi10aW1lIFBNIGZpZWxkcyBpbiBnaXZlbiBkZXZpY2Ugb2JqZWN0LgogICogQGRldjogRGV2aWNlIG9iamVjdCB0byBpbml0aWFsaXplLgogICovCkBAIC0xMDI4LDYgKzEwNzIsNyBAQAogCiAJYXRvbWljX3NldCgmZGV2LT5wb3dlci5jaGlsZF9jb3VudCwgMCk7CiAJcG1fc3VzcGVuZF9pZ25vcmVfY2hpbGRyZW4oZGV2LCBmYWxzZSk7CisJZGV2LT5wb3dlci5ydW50aW1lX2F1dG8gPSB0cnVlOwogCiAJZGV2LT5wb3dlci5yZXF1ZXN0X3BlbmRpbmcgPSBmYWxzZTsKIAlkZXYtPnBvd2VyLnJlcXVlc3QgPSBSUE1fUkVRX05PTkU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvc3lzZnMuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jCmluZGV4IDU5NmFlZWMuLjg2ZmQ5MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jCkBAIC00LDkgKzQsMjUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlICJwb3dlci5oIgogCiAvKgorICoJY29udHJvbCAtIFJlcG9ydC9jaGFuZ2UgY3VycmVudCBydW50aW1lIFBNIHNldHRpbmcgb2YgdGhlIGRldmljZQorICoKKyAqCVJ1bnRpbWUgcG93ZXIgbWFuYWdlbWVudCBvZiBhIGRldmljZSBjYW4gYmUgYmxvY2tlZCB3aXRoIHRoZSBoZWxwIG9mCisgKgl0aGlzIGF0dHJpYnV0ZS4gIEFsbCBkZXZpY2VzIGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHdvIHZhbHVlcyBmb3IKKyAqCXRoZSBwb3dlci9jb250cm9sIGZpbGU6CisgKgorICoJICsgImF1dG9cbiIgdG8gYWxsb3cgdGhlIGRldmljZSB0byBiZSBwb3dlciBtYW5hZ2VkIGF0IHJ1biB0aW1lOworICoJICsgIm9uXG4iIHRvIHByZXZlbnQgdGhlIGRldmljZSBmcm9tIGJlaW5nIHBvd2VyIG1hbmFnZWQgYXQgcnVuIHRpbWU7CisgKgorICoJVGhlIGRlZmF1bHQgZm9yIGFsbCBkZXZpY2VzIGlzICJhdXRvIiwgd2hpY2ggbWVhbnMgdGhhdCBkZXZpY2VzIG1heSBiZQorICoJc3ViamVjdCB0byBhdXRvbWF0aWMgcG93ZXIgbWFuYWdlbWVudCwgZGVwZW5kaW5nIG9uIHRoZWlyIGRyaXZlcnMuCisgKglDaGFuZ2luZyB0aGlzIGF0dHJpYnV0ZSB0byAib24iIHByZXZlbnRzIHRoZSBkcml2ZXIgZnJvbSBwb3dlciBtYW5hZ2luZworICoJdGhlIGRldmljZSBhdCBydW4gdGltZS4gIERvaW5nIHRoYXQgd2hpbGUgdGhlIGRldmljZSBpcyBzdXNwZW5kZWQgY2F1c2VzCisgKglpdCB0byBiZSB3b2tlbiB1cC4KKyAqCiAgKgl3YWtldXAgLSBSZXBvcnQvY2hhbmdlIGN1cnJlbnQgd2FrZXVwIG9wdGlvbiBmb3IgZGV2aWNlCiAgKgogICoJU29tZSBkZXZpY2VzIHN1cHBvcnQgIndha2V1cCIgZXZlbnRzLCB3aGljaCBhcmUgaGFyZHdhcmUgc2lnbmFscwpAQCAtMzgsMTEgKzU0LDYxIEBACiAgKgl3YWtldXAgZXZlbnRzIGludGVybmFsbHkgKHVubGVzcyB0aGV5IGFyZSBkaXNhYmxlZCksIGtlZXBpbmcKICAqCXRoZWlyIGhhcmR3YXJlIGluIGxvdyBwb3dlciBtb2RlcyB3aGVuZXZlciB0aGV5J3JlIHVudXNlZC4gIFRoaXMKICAqCXNhdmVzIHJ1bnRpbWUgcG93ZXIsIHdpdGhvdXQgcmVxdWlyaW5nIHN5c3RlbS13aWRlIHNsZWVwIHN0YXRlcy4KKyAqCisgKglhc3luYyAtIFJlcG9ydC9jaGFuZ2UgY3VycmVudCBhc3luYyBzdXNwZW5kIHNldHRpbmcgZm9yIHRoZSBkZXZpY2UKKyAqCisgKglBc3luY2hyb25vdXMgc3VzcGVuZCBhbmQgcmVzdW1lIG9mIHRoZSBkZXZpY2UgZHVyaW5nIHN5c3RlbS13aWRlIHBvd2VyCisgKglzdGF0ZSB0cmFuc2l0aW9ucyBjYW4gYmUgZW5hYmxlZCBieSB3cml0aW5nICJlbmFibGVkIiB0byB0aGlzIGZpbGUuCisgKglBbmFsb2dvdXNseSwgaWYgImRpc2FibGVkIiBpcyB3cml0dGVuIHRvIHRoaXMgZmlsZSwgdGhlIGRldmljZSB3aWxsIGJlCisgKglzdXNwZW5kZWQgYW5kIHJlc3VtZWQgc3luY2hyb25vdXNseS4KKyAqCisgKglBbGwgZGV2aWNlcyBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHR3byB2YWx1ZXMgZm9yIHBvd2VyL2FzeW5jOgorICoKKyAqCSArICJlbmFibGVkXG4iIHRvIHBlcm1pdCB0aGUgYXN5bmNocm9ub3VzIHN1c3BlbmQvcmVzdW1lIG9mIHRoZSBkZXZpY2U7CisgKgkgKyAiZGlzYWJsZWRcbiIgdG8gZm9yYmlkIGl0OworICoKKyAqCU5PVEU6IEl0IGdlbmVyYWxseSBpcyB1bnNhZmUgdG8gcGVybWl0IHRoZSBhc3luY2hyb25vdXMgc3VzcGVuZC9yZXN1bWUKKyAqCW9mIGEgZGV2aWNlIHVubGVzcyBpdCBpcyBjZXJ0YWluIHRoYXQgYWxsIG9mIHRoZSBQTSBkZXBlbmRlbmNpZXMgb2YgdGhlCisgKglkZXZpY2UgYXJlIGtub3duIHRvIHRoZSBQTSBjb3JlLiAgSG93ZXZlciwgZm9yIHNvbWUgZGV2aWNlcyB0aGlzCisgKglhdHRyaWJ1dGUgaXMgc2V0IHRvICJlbmFibGVkIiBieSBidXMgdHlwZSBjb2RlIG9yIGRldmljZSBkcml2ZXJzIGFuZCBpbgorICoJdGhhdCBjYXNlcyBpdCBzaG91bGQgYmUgc2FmZSB0byBsZWF2ZSB0aGUgZGVmYXVsdCB2YWx1ZS4KICAqLwogCiBzdGF0aWMgY29uc3QgY2hhciBlbmFibGVkW10gPSAiZW5hYmxlZCI7CiBzdGF0aWMgY29uc3QgY2hhciBkaXNhYmxlZFtdID0gImRpc2FibGVkIjsKIAorI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCitzdGF0aWMgY29uc3QgY2hhciBjdHJsX2F1dG9bXSA9ICJhdXRvIjsKK3N0YXRpYyBjb25zdCBjaGFyIGN0cmxfb25bXSA9ICJvbiI7CisKK3N0YXRpYyBzc2l6ZV90IGNvbnRyb2xfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwKKwkJCQlkZXYtPnBvd2VyLnJ1bnRpbWVfYXV0byA/IGN0cmxfYXV0byA6IGN0cmxfb24pOworfQorCitzdGF0aWMgc3NpemVfdCBjb250cm9sX3N0b3JlKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgbikKK3sKKwljaGFyICpjcDsKKwlpbnQgbGVuID0gbjsKKworCWNwID0gbWVtY2hyKGJ1ZiwgJ1xuJywgbik7CisJaWYgKGNwKQorCQlsZW4gPSBjcCAtIGJ1ZjsKKwlpZiAobGVuID09IHNpemVvZiBjdHJsX2F1dG8gLSAxICYmIHN0cm5jbXAoYnVmLCBjdHJsX2F1dG8sIGxlbikgPT0gMCkKKwkJcG1fcnVudGltZV9hbGxvdyhkZXYpOworCWVsc2UgaWYgKGxlbiA9PSBzaXplb2YgY3RybF9vbiAtIDEgJiYgc3RybmNtcChidWYsIGN0cmxfb24sIGxlbikgPT0gMCkKKwkJcG1fcnVudGltZV9mb3JiaWQoZGV2KTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBuOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoY29udHJvbCwgMDY0NCwgY29udHJvbF9zaG93LCBjb250cm9sX3N0b3JlKTsKKyNlbmRpZgorCiBzdGF0aWMgc3NpemVfdAogd2FrZV9zaG93KHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICogYnVmKQogewpAQCAtNzcsOSArMTQzLDQzIEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUih3YWtldXAsIDA2NDQsIHdha2Vfc2hvdywgd2FrZV9zdG9yZSk7CiAKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVBfQURWQU5DRURfREVCVUcKK3N0YXRpYyBzc2l6ZV90IGFzeW5jX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLAorCQkJZGV2aWNlX2FzeW5jX3N1c3BlbmRfZW5hYmxlZChkZXYpID8gZW5hYmxlZCA6IGRpc2FibGVkKTsKK30KKworc3RhdGljIHNzaXplX3QgYXN5bmNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pCit7CisJY2hhciAqY3A7CisJaW50IGxlbiA9IG47CisKKwljcCA9IG1lbWNocihidWYsICdcbicsIG4pOworCWlmIChjcCkKKwkJbGVuID0gY3AgLSBidWY7CisJaWYgKGxlbiA9PSBzaXplb2YgZW5hYmxlZCAtIDEgJiYgc3RybmNtcChidWYsIGVuYWJsZWQsIGxlbikgPT0gMCkKKwkJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKGRldik7CisJZWxzZSBpZiAobGVuID09IHNpemVvZiBkaXNhYmxlZCAtIDEgJiYgc3RybmNtcChidWYsIGRpc2FibGVkLCBsZW4pID09IDApCisJCWRldmljZV9kaXNhYmxlX2FzeW5jX3N1c3BlbmQoZGV2KTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBuOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoYXN5bmMsIDA2NDQsIGFzeW5jX3Nob3csIGFzeW5jX3N0b3JlKTsKKyNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVBfQURWQU5DRURfREVCVUcgKi8KIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiBwb3dlcl9hdHRyc1tdID0geworI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisJJmRldl9hdHRyX2NvbnRyb2wuYXR0ciwKKyNlbmRpZgogCSZkZXZfYXR0cl93YWtldXAuYXR0ciwKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVBfQURWQU5DRURfREVCVUcKKwkmZGV2X2F0dHJfYXN5bmMuYXR0ciwKKyNlbmRpZgogCU5VTEwsCiB9Owogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcG1fYXR0cl9ncm91cCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmMgYi9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCmluZGV4IGNlMWZhOTIuLjQ1OWYxYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKKysrIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwpAQCAtMjUzNCw4ICsyNTM0LDggQEAKICAgCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQoUmVxdWVzdFF1ZXVlLCBDb250cm9sbGVyLT5Cb3VuY2VCdWZmZXJMaW1pdCk7CiAgIAlSZXF1ZXN0UXVldWUtPnF1ZXVlZGF0YSA9IENvbnRyb2xsZXI7CiAgIAlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKFJlcXVlc3RRdWV1ZSwgQ29udHJvbGxlci0+RHJpdmVyU2NhdHRlckdhdGhlckxpbWl0KTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoUmVxdWVzdFF1ZXVlLCBDb250cm9sbGVyLT5Ecml2ZXJTY2F0dGVyR2F0aGVyTGltaXQpOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhSZXF1ZXN0UXVldWUsIENvbnRyb2xsZXItPk1heEJsb2Nrc1BlckNvbW1hbmQpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMoUmVxdWVzdFF1ZXVlLCBDb250cm9sbGVyLT5Ecml2ZXJTY2F0dGVyR2F0aGVyTGltaXQpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhSZXF1ZXN0UXVldWUsIENvbnRyb2xsZXItPk1heEJsb2Nrc1BlckNvbW1hbmQpOwogCWRpc2stPnF1ZXVlID0gUmVxdWVzdFF1ZXVlOwogCXNwcmludGYoZGlzay0+ZGlza19uYW1lLCAicmQvYyVkZCVkIiwgQ29udHJvbGxlci0+Q29udHJvbGxlck51bWJlciwgbik7CiAJZGlzay0+bWFqb3IgPSBNYWpvck51bWJlcjsKQEAgLTcxMzQsNyArNzEzNCw3IEBACiAJLk1lbW9yeVdpbmRvd1NpemUgPQlEQUM5NjBfUERfUmVnaXN0ZXJXaW5kb3dTaXplLAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIERBQzk2MF9pZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIERBQzk2MF9pZF90YWJsZVtdID0gewogCXsKIAkJLnZlbmRvciAJPSBQQ0lfVkVORE9SX0lEX01ZTEVYLAogCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfTVlMRVhfREFDOTYwX0dFTSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKaW5kZXggYTVhZjFkNi4uZTM1Y2Y1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKQEAgLTE0NzAsOCArMTQ3MCw2IEBACiAKIHZvaWQgZG9fZmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqIHEpCiB7Ci0gCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAlEUFJJTlQoKCJkb19mZF9yZXF1ZXN0IGZvciBwaWQgJWRcbiIsY3VycmVudC0+cGlkKSk7CiAJd2hpbGUoIGZkY19idXN5ICkgc2xlZXBfb24oICZmZGNfd2FpdCApOwogCWZkY19idXN5ID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYnJkLmMgYi9kcml2ZXJzL2Jsb2NrL2JyZC5jCmluZGV4IDRmNjg4NDMuLmM2ZGRlYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYnJkLmMKKysrIGIvZHJpdmVycy9ibG9jay9icmQuYwpAQCAtNDM0LDcgKzQzNCw3IEBACiAJCWdvdG8gb3V0X2ZyZWVfZGV2OwogCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QoYnJkLT5icmRfcXVldWUsIGJyZF9tYWtlX3JlcXVlc3QpOwogCWJsa19xdWV1ZV9vcmRlcmVkKGJyZC0+YnJkX3F1ZXVlLCBRVUVVRV9PUkRFUkVEX1RBRywgTlVMTCk7Ci0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKGJyZC0+YnJkX3F1ZXVlLCAxMDI0KTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoYnJkLT5icmRfcXVldWUsIDEwMjQpOwogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQoYnJkLT5icmRfcXVldWUsIEJMS19CT1VOQ0VfQU5ZKTsKIAogCWRpc2sgPSBicmQtPmJyZF9kaXNrID0gYWxsb2NfZGlzaygxIDw8IHBhcnRfc2hpZnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IDg3M2U1OTQuLjllM2FmMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTI1Nyw2ICsyNTcsNzkgQEAKIAlobGlzdF9kZWxfaW5pdCgmYy0+bGlzdCk7CiB9CiAKK3N0YXRpYyB2b2lkIGNjaXNzX2ZyZWVfc2dfY2hhaW5fYmxvY2tzKFNHRGVzY3JpcHRvcl9zdHJ1Y3QgKipjbWRfc2dfbGlzdCwKKwlpbnQgbnJfY21kcykKK3sKKwlpbnQgaTsKKworCWlmICghY21kX3NnX2xpc3QpCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfY21kczsgaSsrKSB7CisJCWtmcmVlKGNtZF9zZ19saXN0W2ldKTsKKwkJY21kX3NnX2xpc3RbaV0gPSBOVUxMOworCX0KKwlrZnJlZShjbWRfc2dfbGlzdCk7Cit9CisKK3N0YXRpYyBTR0Rlc2NyaXB0b3Jfc3RydWN0ICoqY2Npc3NfYWxsb2NhdGVfc2dfY2hhaW5fYmxvY2tzKAorCWN0bHJfaW5mb190ICpoLCBpbnQgY2hhaW5zaXplLCBpbnQgbnJfY21kcykKK3sKKwlpbnQgajsKKwlTR0Rlc2NyaXB0b3Jfc3RydWN0ICoqY21kX3NnX2xpc3Q7CisKKwlpZiAoY2hhaW5zaXplIDw9IDApCisJCXJldHVybiBOVUxMOworCisJY21kX3NnX2xpc3QgPSBrbWFsbG9jKHNpemVvZigqY21kX3NnX2xpc3QpICogbnJfY21kcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWRfc2dfbGlzdCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBCdWlsZCB1cCBjaGFpbiBibG9ja3MgZm9yIGVhY2ggY29tbWFuZCAqLworCWZvciAoaiA9IDA7IGogPCBucl9jbWRzOyBqKyspIHsKKwkJLyogTmVlZCBhIGJsb2NrIG9mIGNoYWluc2l6ZWQgcy9nIGVsZW1lbnRzLiAqLworCQljbWRfc2dfbGlzdFtqXSA9IGttYWxsb2MoKGNoYWluc2l6ZSAqCisJCQlzaXplb2YoKmNtZF9zZ19saXN0W2pdKSksIEdGUF9LRVJORUwpOworCQlpZiAoIWNtZF9zZ19saXN0W2pdKSB7CisJCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJDYW5ub3QgZ2V0IG1lbW9yeSAiCisJCQkJImZvciBzL2cgY2hhaW5zLlxuIik7CisJCQlnb3RvIGNsZWFuOworCQl9CisJfQorCXJldHVybiBjbWRfc2dfbGlzdDsKK2NsZWFuOgorCWNjaXNzX2ZyZWVfc2dfY2hhaW5fYmxvY2tzKGNtZF9zZ19saXN0LCBucl9jbWRzKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgY2Npc3NfdW5tYXBfc2dfY2hhaW5fYmxvY2soY3Rscl9pbmZvX3QgKmgsIENvbW1hbmRMaXN0X3N0cnVjdCAqYykKK3sKKwlTR0Rlc2NyaXB0b3Jfc3RydWN0ICpjaGFpbl9zZzsKKwl1NjRiaXQgdGVtcDY0OworCisJaWYgKGMtPkhlYWRlci5TR1RvdGFsIDw9IGgtPm1heF9jbWRfc2dlbnRyaWVzKQorCQlyZXR1cm47CisKKwljaGFpbl9zZyA9ICZjLT5TR1toLT5tYXhfY21kX3NnZW50cmllcyAtIDFdOworCXRlbXA2NC52YWwzMi5sb3dlciA9IGNoYWluX3NnLT5BZGRyLmxvd2VyOworCXRlbXA2NC52YWwzMi51cHBlciA9IGNoYWluX3NnLT5BZGRyLnVwcGVyOworCXBjaV91bm1hcF9zaW5nbGUoaC0+cGRldiwgdGVtcDY0LnZhbCwgY2hhaW5fc2ctPkxlbiwgUENJX0RNQV9UT0RFVklDRSk7Cit9CisKK3N0YXRpYyB2b2lkIGNjaXNzX21hcF9zZ19jaGFpbl9ibG9jayhjdGxyX2luZm9fdCAqaCwgQ29tbWFuZExpc3Rfc3RydWN0ICpjLAorCVNHRGVzY3JpcHRvcl9zdHJ1Y3QgKmNoYWluX2Jsb2NrLCBpbnQgbGVuKQoreworCVNHRGVzY3JpcHRvcl9zdHJ1Y3QgKmNoYWluX3NnOworCXU2NGJpdCB0ZW1wNjQ7CisKKwljaGFpbl9zZyA9ICZjLT5TR1toLT5tYXhfY21kX3NnZW50cmllcyAtIDFdOworCWNoYWluX3NnLT5FeHQgPSBDQ0lTU19TR19DSEFJTjsKKwljaGFpbl9zZy0+TGVuID0gbGVuOworCXRlbXA2NC52YWwgPSBwY2lfbWFwX3NpbmdsZShoLT5wZGV2LCBjaGFpbl9ibG9jaywgbGVuLAorCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCWNoYWluX3NnLT5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOworCWNoYWluX3NnLT5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOworfQorCiAjaW5jbHVkZSAiY2Npc3Nfc2NzaS5jIgkJLyogRm9yIFNDU0kgdGFwZSBzdXBwb3J0ICovCiAKIHN0YXRpYyBjb25zdCBjaGFyICpyYWlkX2xhYmVsW10gPSB7ICIwIiwgIjQiLCAiMSgxKzApIiwgIjUiLCAiNSsxIiwgIkFERyIsCkBAIC0zMzcsNiArNDEwLDkgQEAKIAlpZiAoKnBvcyA+IGgtPmhpZ2hlc3RfbHVuKQogCQlyZXR1cm4gMDsKIAorCWlmIChkcnYgPT0gTlVMTCkgLyogaXQncyBwb3NzaWJsZSBmb3IgaC0+ZHJ2W10gdG8gaGF2ZSBob2xlcy4gKi8KKwkJcmV0dXJuIDA7CisKIAlpZiAoZHJ2LT5oZWFkcyA9PSAwKQogCQlyZXR1cm4gMDsKIApAQCAtMTM0MSwyNiArMTQxNywyNyBAQAogCQkJCWtmcmVlKGJ1ZmYpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQotCQkJLy8gRmlsbCBpbiB0aGUgY29tbWFuZCB0eXBlCisJCQkvKiBGaWxsIGluIHRoZSBjb21tYW5kIHR5cGUgKi8KIAkJCWMtPmNtZF90eXBlID0gQ01EX0lPQ1RMX1BFTkQ7Ci0JCQkvLyBGaWxsIGluIENvbW1hbmQgSGVhZGVyCi0JCQljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7CS8vIHVudXNlZCBpbiBzaW1wbGUgbW9kZQotCQkJaWYgKGlvY29tbWFuZC5idWZfc2l6ZSA+IDApCS8vIGJ1ZmZlciB0byBmaWxsCisJCQkvKiBGaWxsIGluIENvbW1hbmQgSGVhZGVyICovCisJCQljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7ICAgLyogdW51c2VkIGluIHNpbXBsZSBtb2RlICovCisJCQlpZiAoaW9jb21tYW5kLmJ1Zl9zaXplID4gMCkgLyogYnVmZmVyIHRvIGZpbGwgKi8KIAkJCXsKIAkJCQljLT5IZWFkZXIuU0dMaXN0ID0gMTsKIAkJCQljLT5IZWFkZXIuU0dUb3RhbCA9IDE7Ci0JCQl9IGVsc2UJLy8gbm8gYnVmZmVycyB0byBmaWxsCisJCQl9IGVsc2UgLyogbm8gYnVmZmVycyB0byBmaWxsICovCiAJCQl7CiAJCQkJYy0+SGVhZGVyLlNHTGlzdCA9IDA7CiAJCQkJYy0+SGVhZGVyLlNHVG90YWwgPSAwOwogCQkJfQogCQkJYy0+SGVhZGVyLkxVTiA9IGlvY29tbWFuZC5MVU5faW5mbzsKLQkJCWMtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5idXNhZGRyOwkvLyB1c2UgdGhlIGtlcm5lbCBhZGRyZXNzIHRoZSBjbWQgYmxvY2sgZm9yIHRhZworCQkJLyogdXNlIHRoZSBrZXJuZWwgYWRkcmVzcyB0aGUgY21kIGJsb2NrIGZvciB0YWcgKi8KKwkJCWMtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5idXNhZGRyOwogCi0JCQkvLyBGaWxsIGluIFJlcXVlc3QgYmxvY2sKKwkJCS8qIEZpbGwgaW4gUmVxdWVzdCBibG9jayAqLwogCQkJYy0+UmVxdWVzdCA9IGlvY29tbWFuZC5SZXF1ZXN0OwogCi0JCQkvLyBGaWxsIGluIHRoZSBzY2F0dGVyIGdhdGhlciBpbmZvcm1hdGlvbgorCQkJLyogRmlsbCBpbiB0aGUgc2NhdHRlciBnYXRoZXIgaW5mb3JtYXRpb24gKi8KIAkJCWlmIChpb2NvbW1hbmQuYnVmX3NpemUgPiAwKSB7CiAJCQkJdGVtcDY0LnZhbCA9IHBjaV9tYXBfc2luZ2xlKGhvc3QtPnBkZXYsIGJ1ZmYsCiAJCQkJCWlvY29tbWFuZC5idWZfc2l6ZSwKQEAgLTEzNjgsNyArMTQ0NSw3IEBACiAJCQkJYy0+U0dbMF0uQWRkci5sb3dlciA9IHRlbXA2NC52YWwzMi5sb3dlcjsKIAkJCQljLT5TR1swXS5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOwogCQkJCWMtPlNHWzBdLkxlbiA9IGlvY29tbWFuZC5idWZfc2l6ZTsKLQkJCQljLT5TR1swXS5FeHQgPSAwOwkvLyB3ZSBhcmUgbm90IGNoYWluaW5nCisJCQkJYy0+U0dbMF0uRXh0ID0gMDsgIC8qIHdlIGFyZSBub3QgY2hhaW5pbmcgKi8KIAkJCX0KIAkJCWMtPndhaXRpbmcgPSAmd2FpdDsKIApAQCAtMTY2NywxNCArMTc0NCw5IEBACiAJLyogdW5tYXAgdGhlIERNQSBtYXBwaW5nIGZvciBhbGwgdGhlIHNjYXR0ZXIgZ2F0aGVyIGVsZW1lbnRzICovCiAJZm9yIChpID0gMDsgaSA8IGNtZC0+SGVhZGVyLlNHTGlzdDsgaSsrKSB7CiAJCWlmIChjdXJyX3NnW3NnX2luZGV4XS5FeHQgPT0gQ0NJU1NfU0dfQ0hBSU4pIHsKLQkJCXRlbXA2NC52YWwzMi5sb3dlciA9IGNtZC0+U0dbaV0uQWRkci5sb3dlcjsKLQkJCXRlbXA2NC52YWwzMi51cHBlciA9IGNtZC0+U0dbaV0uQWRkci51cHBlcjsKLQkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShoLT5wZGV2LCB0ZW1wNjQudmFsLAotCQkJCQkJY21kLT5TR1tpXS5MZW4sIGRkaXIpOwotCQkJcGNpX3VubWFwX3NpbmdsZShoLT5wZGV2LCB0ZW1wNjQudmFsLAotCQkJCQkJY21kLT5TR1tpXS5MZW4sIGRkaXIpOworCQkJY2Npc3NfdW5tYXBfc2dfY2hhaW5fYmxvY2soaCwgY21kKTsKIAkJCS8qIFBvaW50IHRvIHRoZSBuZXh0IGJsb2NrICovCi0JCQljdXJyX3NnID0gaC0+Y21kX3NnX2xpc3RbY21kLT5jbWRpbmRleF0tPnNnY2hhaW47CisJCQljdXJyX3NnID0gaC0+Y21kX3NnX2xpc3RbY21kLT5jbWRpbmRleF07CiAJCQlzZ19pbmRleCA9IDA7CiAJCX0KIAkJdGVtcDY0LnZhbDMyLmxvd2VyID0gY3Vycl9zZ1tzZ19pbmRleF0uQWRkci5sb3dlcjsKQEAgLTE3OTMsMTIgKzE4NjUsOSBAQAogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQoZGlzay0+cXVldWUsIGgtPnBkZXYtPmRtYV9tYXNrKTsKIAogCS8qIFRoaXMgaXMgYSBoYXJkd2FyZSBpbXBvc2VkIGxpbWl0LiAqLwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMoZGlzay0+cXVldWUsIGgtPm1heHNnZW50cmllcyk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhkaXNrLT5xdWV1ZSwgaC0+bWF4c2dlbnRyaWVzKTsKIAotCS8qIFRoaXMgaXMgYSBsaW1pdCBpbiB0aGUgZHJpdmVyIGFuZCBjb3VsZCBiZSBlbGltaW5hdGVkLiAqLwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhkaXNrLT5xdWV1ZSwgaC0+bWF4c2dlbnRyaWVzKTsKLQotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhkaXNrLT5xdWV1ZSwgaC0+Y2Npc3NfbWF4X3NlY3RvcnMpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhkaXNrLT5xdWV1ZSwgaC0+Y2Npc3NfbWF4X3NlY3RvcnMpOwogCiAJYmxrX3F1ZXVlX3NvZnRpcnFfZG9uZShkaXNrLT5xdWV1ZSwgY2Npc3Nfc29mdGlycV9kb25lKTsKIApAQCAtMjQyMiw3ICsyNDkxLDcgQEAKIAkJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JFQUQ7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOwogCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBjbWQ7Ci0JCQljLT5SZXF1ZXN0LkNEQls2XSA9IChzaXplID4+IDI0KSAmIDB4RkY7CS8vTVNCCisJCQljLT5SZXF1ZXN0LkNEQls2XSA9IChzaXplID4+IDI0KSAmIDB4RkY7IC8qIE1TQiAqLwogCQkJYy0+UmVxdWVzdC5DREJbN10gPSAoc2l6ZSA+PiAxNikgJiAweEZGOwogCQkJYy0+UmVxdWVzdC5DREJbOF0gPSAoc2l6ZSA+PiA4KSAmIDB4RkY7CiAJCQljLT5SZXF1ZXN0LkNEQls5XSA9IHNpemUgJiAweEZGOwpAQCAtMjY5MSw3ICsyNzYwLDcgQEAKIAkJCSAgICAgICAiY2Npc3M6IHJlYWRpbmcgZ2VvbWV0cnkgZmFpbGVkLCB2b2x1bWUgIgogCQkJICAgICAgICJkb2VzIG5vdCBzdXBwb3J0IHJlYWRpbmcgZ2VvbWV0cnlcbiIpOwogCQkJZHJ2LT5oZWFkcyA9IDI1NTsKLQkJCWRydi0+c2VjdG9ycyA9IDMyOwkvLyBTZWN0b3JzIHBlciB0cmFjaworCQkJZHJ2LT5zZWN0b3JzID0gMzI7CS8qIFNlY3RvcnMgcGVyIHRyYWNrICovCiAJCQlkcnYtPmN5bGluZGVycyA9IHRvdGFsX3NpemUgKyAxOwogCQkJZHJ2LT5yYWlkX2xldmVsID0gUkFJRF9VTktOT1dOOwogCQl9IGVsc2UgewpAQCAtMzA3OSw3ICszMTQ4LDYgQEAKIAlTR0Rlc2NyaXB0b3Jfc3RydWN0ICpjdXJyX3NnOwogCWRyaXZlX2luZm9fc3RydWN0ICpkcnY7CiAJaW50IGksIGRpcjsKLQlpbnQgbnNlZyA9IDA7CiAJaW50IHNnX2luZGV4ID0gMDsKIAlpbnQgY2hhaW5lZCA9IDA7CiAKQEAgLTMxMDksMTkgKzMxNzcsMTkgQEAKIAogCS8qIGZpbGwgaW4gdGhlIHJlcXVlc3QgKi8KIAlkcnYgPSBjcmVxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JYy0+SGVhZGVyLlJlcGx5UXVldWUgPSAwOwkvLyB1bnVzZWQgaW4gc2ltcGxlIG1vZGUKKwljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7CS8qIHVudXNlZCBpbiBzaW1wbGUgbW9kZSAqLwogCS8qIGdvdCBjb21tYW5kIGZyb20gcG9vbCwgc28gdXNlIHRoZSBjb21tYW5kIGJsb2NrIGluZGV4IGluc3RlYWQgKi8KIAkvKiBmb3IgZGlyZWN0IGxvb2t1cHMuICovCiAJLyogVGhlIGZpcnN0IDIgYml0cyBhcmUgcmVzZXJ2ZWQgZm9yIGNvbnRyb2xsZXIgZXJyb3IgcmVwb3J0aW5nLiAqLwogCWMtPkhlYWRlci5UYWcubG93ZXIgPSAoYy0+Y21kaW5kZXggPDwgMyk7CiAJYy0+SGVhZGVyLlRhZy5sb3dlciB8PSAweDA0OwkvKiBmbGFnIGZvciBkaXJlY3QgbG9va3VwLiAqLwogCW1lbWNweSgmYy0+SGVhZGVyLkxVTiwgZHJ2LT5MdW5JRCwgc2l6ZW9mKGRydi0+THVuSUQpKTsKLQljLT5SZXF1ZXN0LkNEQkxlbiA9IDEwOwkvLyAxMiBieXRlIGNvbW1hbmRzIG5vdCBpbiBGVyB5ZXQ7Ci0JYy0+UmVxdWVzdC5UeXBlLlR5cGUgPSBUWVBFX0NNRDsJLy8gSXQgaXMgYSBjb21tYW5kLgorCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTA7CS8qIDEyIGJ5dGUgY29tbWFuZHMgbm90IGluIEZXIHlldDsgKi8KKwljLT5SZXF1ZXN0LlR5cGUuVHlwZSA9IFRZUEVfQ01EOwkvKiBJdCBpcyBhIGNvbW1hbmQuICovCiAJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOwogCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPQogCSAgICAocnFfZGF0YV9kaXIoY3JlcSkgPT0gUkVBRCkgPyBYRkVSX1JFQUQgOiBYRkVSX1dSSVRFOwotCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CS8vIERvbid0IHRpbWUgb3V0CisJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsJLyogRG9uJ3QgdGltZSBvdXQgKi8KIAljLT5SZXF1ZXN0LkNEQlswXSA9CiAJICAgIChycV9kYXRhX2RpcihjcmVxKSA9PSBSRUFEKSA/IGgtPmNjaXNzX3JlYWQgOiBoLT5jY2lzc193cml0ZTsKIAlzdGFydF9ibGsgPSBibGtfcnFfcG9zKGNyZXEpOwpAQCAtMzE0NiwxMyArMzIxNCw4IEBACiAJZm9yIChpID0gMDsgaSA8IHNlZzsgaSsrKSB7CiAJCWlmICgoKHNnX2luZGV4KzEpID09IChoLT5tYXhfY21kX3NnZW50cmllcykpICYmCiAJCQkhY2hhaW5lZCAmJiAoKHNlZyAtIGkpID4gMSkpIHsKLQkJCW5zZWcgPSBzZWcgLSBpOwotCQkJY3Vycl9zZ1tzZ19pbmRleF0uTGVuID0gKG5zZWcpICoKLQkJCQkJc2l6ZW9mKFNHRGVzY3JpcHRvcl9zdHJ1Y3QpOwotCQkJY3Vycl9zZ1tzZ19pbmRleF0uRXh0ID0gQ0NJU1NfU0dfQ0hBSU47Ci0KIAkJCS8qIFBvaW50IHRvIG5leHQgY2hhaW4gYmxvY2suICovCi0JCQljdXJyX3NnID0gaC0+Y21kX3NnX2xpc3RbYy0+Y21kaW5kZXhdLT5zZ2NoYWluOworCQkJY3Vycl9zZyA9IGgtPmNtZF9zZ19saXN0W2MtPmNtZGluZGV4XTsKIAkJCXNnX2luZGV4ID0gMDsKIAkJCWNoYWluZWQgPSAxOwogCQl9CkBAIC0zMTYzLDMxICszMjI2LDEyIEBACiAJCWN1cnJfc2dbc2dfaW5kZXhdLkFkZHIubG93ZXIgPSB0ZW1wNjQudmFsMzIubG93ZXI7CiAJCWN1cnJfc2dbc2dfaW5kZXhdLkFkZHIudXBwZXIgPSB0ZW1wNjQudmFsMzIudXBwZXI7CiAJCWN1cnJfc2dbc2dfaW5kZXhdLkV4dCA9IDA7ICAvKiB3ZSBhcmUgbm90IGNoYWluaW5nICovCi0KIAkJKytzZ19pbmRleDsKIAl9Ci0KLQlpZiAoY2hhaW5lZCkgewotCQlpbnQgbGVuOwotCQljdXJyX3NnID0gYy0+U0c7Ci0JCXNnX2luZGV4ID0gaC0+bWF4X2NtZF9zZ2VudHJpZXMgLSAxOwotCQlsZW4gPSBjdXJyX3NnW3NnX2luZGV4XS5MZW47Ci0JCS8qIFNldHVwIHBvaW50ZXIgdG8gbmV4dCBjaGFpbiBibG9jay4KLQkJICogRmlsbCBvdXQgbGFzdCBlbGVtZW50IGluIGN1cnJlbnQgY2hhaW4KLQkJICogYmxvY2sgd2l0aCBhZGRyZXNzIG9mIG5leHQgY2hhaW4gYmxvY2suCi0JCSAqLwotCQl0ZW1wNjQudmFsID0gcGNpX21hcF9zaW5nbGUoaC0+cGRldiwKLQkJCQkJaC0+Y21kX3NnX2xpc3RbYy0+Y21kaW5kZXhdLT5zZ2NoYWluLAotCQkJCQlsZW4sIGRpcik7Ci0KLQkJaC0+Y21kX3NnX2xpc3RbYy0+Y21kaW5kZXhdLT5zZ19jaGFpbl9kbWEgPSB0ZW1wNjQudmFsOwotCQljdXJyX3NnW3NnX2luZGV4XS5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOwotCQljdXJyX3NnW3NnX2luZGV4XS5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOwotCi0JCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShoLT5wZGV2LAotCQkJCWgtPmNtZF9zZ19saXN0W2MtPmNtZGluZGV4XS0+c2dfY2hhaW5fZG1hLAotCQkJCWxlbiwgZGlyKTsKLQl9CisJaWYgKGNoYWluZWQpCisJCWNjaXNzX21hcF9zZ19jaGFpbl9ibG9jayhoLCBjLCBoLT5jbWRfc2dfbGlzdFtjLT5jbWRpbmRleF0sCisJCQkoc2VnIC0gKGgtPm1heF9jbWRfc2dlbnRyaWVzIC0gMSkpICoKKwkJCQlzaXplb2YoU0dEZXNjcmlwdG9yX3N0cnVjdCkpOwogCiAJLyogdHJhY2sgaG93IG1hbnkgU0cgZW50cmllcyB3ZSBhcmUgdXNpbmcgKi8KIAlpZiAoc2VnID4gaC0+bWF4U0cpCkBAIC0zMjA2LDExICszMjUwLDExIEBACiAJaWYgKGxpa2VseShibGtfZnNfcmVxdWVzdChjcmVxKSkpIHsKIAkJaWYoaC0+Y2Npc3NfcmVhZCA9PSBDQ0lTU19SRUFEXzEwKSB7CiAJCQljLT5SZXF1ZXN0LkNEQlsxXSA9IDA7Ci0JCQljLT5SZXF1ZXN0LkNEQlsyXSA9IChzdGFydF9ibGsgPj4gMjQpICYgMHhmZjsJLy9NU0IKKwkJCWMtPlJlcXVlc3QuQ0RCWzJdID0gKHN0YXJ0X2JsayA+PiAyNCkgJiAweGZmOyAvKiBNU0IgKi8KIAkJCWMtPlJlcXVlc3QuQ0RCWzNdID0gKHN0YXJ0X2JsayA+PiAxNikgJiAweGZmOwogCQkJYy0+UmVxdWVzdC5DREJbNF0gPSAoc3RhcnRfYmxrID4+IDgpICYgMHhmZjsKIAkJCWMtPlJlcXVlc3QuQ0RCWzVdID0gc3RhcnRfYmxrICYgMHhmZjsKLQkJCWMtPlJlcXVlc3QuQ0RCWzZdID0gMDsJLy8gKHNlY3QgPj4gMjQpICYgMHhmZjsgTVNCCisJCQljLT5SZXF1ZXN0LkNEQls2XSA9IDA7IC8qIChzZWN0ID4+IDI0KSAmIDB4ZmY7IE1TQiAqLwogCQkJYy0+UmVxdWVzdC5DREJbN10gPSAoYmxrX3JxX3NlY3RvcnMoY3JlcSkgPj4gOCkgJiAweGZmOwogCQkJYy0+UmVxdWVzdC5DREJbOF0gPSBibGtfcnFfc2VjdG9ycyhjcmVxKSAmIDB4ZmY7CiAJCQljLT5SZXF1ZXN0LkNEQls5XSA9IGMtPlJlcXVlc3QuQ0RCWzExXSA9IGMtPlJlcXVlc3QuQ0RCWzEyXSA9IDA7CkBAIC0zMjE5LDcgKzMyNjMsNyBAQAogCiAJCQljLT5SZXF1ZXN0LkNEQkxlbiA9IDE2OwogCQkJYy0+UmVxdWVzdC5DREJbMV09IDA7Ci0JCQljLT5SZXF1ZXN0LkNEQlsyXT0gKHVwcGVyMzIgPj4gMjQpICYgMHhmZjsJLy9NU0IKKwkJCWMtPlJlcXVlc3QuQ0RCWzJdPSAodXBwZXIzMiA+PiAyNCkgJiAweGZmOyAvKiBNU0IgKi8KIAkJCWMtPlJlcXVlc3QuQ0RCWzNdPSAodXBwZXIzMiA+PiAxNikgJiAweGZmOwogCQkJYy0+UmVxdWVzdC5DREJbNF09ICh1cHBlcjMyID4+ICA4KSAmIDB4ZmY7CiAJCQljLT5SZXF1ZXN0LkNEQls1XT0gdXBwZXIzMiAmIDB4ZmY7CkBAIC00MjM3LDM3ICs0MjgxLDEwIEBACiAJCQlnb3RvIGNsZWFuNDsKIAkJfQogCX0KLQloYmFbaV0tPmNtZF9zZ19saXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IENtZF9zZ19saXN0ICopICoKLQkJCQkJCWhiYVtpXS0+bnJfY21kcywKLQkJCQkJCUdGUF9LRVJORUwpOwotCWlmICghaGJhW2ldLT5jbWRfc2dfbGlzdCkgewotCQlwcmludGsoS0VSTl9FUlIgImNjaXNzJWQ6IENhbm5vdCBnZXQgbWVtb3J5IGZvciAiCi0JCQkicy9nIGNoYWluaW5nLlxuIiwgaSk7CisJaGJhW2ldLT5jbWRfc2dfbGlzdCA9IGNjaXNzX2FsbG9jYXRlX3NnX2NoYWluX2Jsb2NrcyhoYmFbaV0sCisJCWhiYVtpXS0+Y2hhaW5zaXplLCBoYmFbaV0tPm5yX2NtZHMpOworCWlmICghaGJhW2ldLT5jbWRfc2dfbGlzdCAmJiBoYmFbaV0tPmNoYWluc2l6ZSA+IDApCiAJCWdvdG8gY2xlYW40OwotCX0KLQkvKiBCdWlsZCB1cCBjaGFpbiBibG9ja3MgZm9yIGVhY2ggY29tbWFuZCAqLwotCWlmIChoYmFbaV0tPmNoYWluc2l6ZSA+IDApIHsKLQkJZm9yIChqID0gMDsgaiA8IGhiYVtpXS0+bnJfY21kczsgaisrKSB7Ci0JCQloYmFbaV0tPmNtZF9zZ19saXN0W2pdID0KLQkJCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IENtZF9zZ19saXN0KSwKLQkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJCWlmICghaGJhW2ldLT5jbWRfc2dfbGlzdFtqXSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiY2Npc3MlZDogQ2Fubm90IGdldCBtZW1vcnkgIgotCQkJCQkiZm9yIGNoYWluIGJsb2NrLlxuIiwgaSk7Ci0JCQkJZ290byBjbGVhbjQ7Ci0JCQl9Ci0JCQkvKiBOZWVkIGEgYmxvY2sgb2YgY2hhaW5zaXplZCBzL2cgZWxlbWVudHMuICovCi0JCQloYmFbaV0tPmNtZF9zZ19saXN0W2pdLT5zZ2NoYWluID0KLQkJCQkJa21hbGxvYygoaGJhW2ldLT5jaGFpbnNpemUgKgotCQkJCQkJc2l6ZW9mKFNHRGVzY3JpcHRvcl9zdHJ1Y3QpKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQkJaWYgKCFoYmFbaV0tPmNtZF9zZ19saXN0W2pdLT5zZ2NoYWluKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJjY2lzcyVkOiBDYW5ub3QgZ2V0IG1lbW9yeSAiCi0JCQkJCSJmb3Igcy9nIGNoYWluc1xuIiwgaSk7Ci0JCQkJZ290byBjbGVhbjQ7Ci0JCQl9Ci0JCX0KLQl9CiAKIAlzcGluX2xvY2tfaW5pdCgmaGJhW2ldLT5sb2NrKTsKIApAQCAtNDMyNiwxNiArNDM0Myw3IEBACiAJZm9yIChrID0gMDsgayA8IGhiYVtpXS0+bnJfY21kczsgaysrKQogCQlrZnJlZShoYmFbaV0tPnNjYXR0ZXJfbGlzdFtrXSk7CiAJa2ZyZWUoaGJhW2ldLT5zY2F0dGVyX2xpc3QpOwotCS8qIE9ubHkgZnJlZSB1cCBleHRyYSBzL2cgbGlzdHMgaWYgY29udHJvbGxlciBzdXBwb3J0cyB0aGVtICovCi0JaWYgKGhiYVtpXS0+Y2hhaW5zaXplID4gMCkgewotCQlmb3IgKGogPSAwOyBqIDwgaGJhW2ldLT5ucl9jbWRzOyBqKyspIHsKLQkJCWlmIChoYmFbaV0tPmNtZF9zZ19saXN0W2pdKSB7Ci0JCQkJa2ZyZWUoaGJhW2ldLT5jbWRfc2dfbGlzdFtqXS0+c2djaGFpbik7Ci0JCQkJa2ZyZWUoaGJhW2ldLT5jbWRfc2dfbGlzdFtqXSk7Ci0JCQl9Ci0JCX0KLQkJa2ZyZWUoaGJhW2ldLT5jbWRfc2dfbGlzdCk7Ci0JfQorCWNjaXNzX2ZyZWVfc2dfY2hhaW5fYmxvY2tzKGhiYVtpXS0+Y21kX3NnX2xpc3QsIGhiYVtpXS0+bnJfY21kcyk7CiAJaWYgKGhiYVtpXS0+Y21kX3Bvb2wpCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGJhW2ldLT5wZGV2LAogCQkJCSAgICBoYmFbaV0tPm5yX2NtZHMgKiBzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSwKQEAgLTQ0NTMsMTYgKzQ0NjEsNyBAQAogCWZvciAoaiA9IDA7IGogPCBoYmFbaV0tPm5yX2NtZHM7IGorKykKIAkJa2ZyZWUoaGJhW2ldLT5zY2F0dGVyX2xpc3Rbal0pOwogCWtmcmVlKGhiYVtpXS0+c2NhdHRlcl9saXN0KTsKLQkvKiBPbmx5IGZyZWUgdXAgZXh0cmEgcy9nIGxpc3RzIGlmIGNvbnRyb2xsZXIgc3VwcG9ydHMgdGhlbSAqLwotCWlmIChoYmFbaV0tPmNoYWluc2l6ZSA+IDApIHsKLQkJZm9yIChqID0gMDsgaiA8IGhiYVtpXS0+bnJfY21kczsgaisrKSB7Ci0JCQlpZiAoaGJhW2ldLT5jbWRfc2dfbGlzdFtqXSkgewotCQkJCWtmcmVlKGhiYVtpXS0+Y21kX3NnX2xpc3Rbal0tPnNnY2hhaW4pOwotCQkJCWtmcmVlKGhiYVtpXS0+Y21kX3NnX2xpc3Rbal0pOwotCQkJfQotCQl9Ci0JCWtmcmVlKGhiYVtpXS0+Y21kX3NnX2xpc3QpOwotCX0KKwljY2lzc19mcmVlX3NnX2NoYWluX2Jsb2NrcyhoYmFbaV0tPmNtZF9zZ19saXN0LCBoYmFbaV0tPm5yX2NtZHMpOwogCS8qCiAJICogRGVsaWJlcmF0ZWx5IG9taXQgcGNpX2Rpc2FibGVfZGV2aWNlKCk6IGl0IGRvZXMgc29tZXRoaW5nIG5hc3R5IHRvCiAJICogU21hcnQgQXJyYXkgY29udHJvbGxlcnMgdGhhdCBwY2lfZW5hYmxlX2RldmljZSBkb2VzIG5vdCB1bmRvCkBAIC00NDk1LDcgKzQ0OTQsNyBAQAogCSAqIGJvdW5kYXJ5LiBHaXZlbiB0aGF0IHdlIHVzZSBwY2lfYWxsb2NfY29uc2lzdGVudCgpIHRvIGFsbG9jYXRlIGFuCiAJICogYXJyYXkgb2YgdGhlbSwgdGhlIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDggYnl0ZXMuCiAJICovCi0JQlVJTERfQlVHX09OKHNpemVvZihDb21tYW5kTGlzdF9zdHJ1Y3QpICUgOCk7CisJQlVJTERfQlVHX09OKHNpemVvZihDb21tYW5kTGlzdF9zdHJ1Y3QpICUgQ09NTUFORExJU1RfQUxJR05NRU5UKTsKIAogCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIlxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuaCBiL2RyaXZlcnMvYmxvY2svY2Npc3MuaAppbmRleCAxZDk1ZGIyLi5jNWQ0MTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmgKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5oCkBAIC01NSwxOCArNTUsMTIgQEAKIAljaGFyIGRldmljZV9pbml0aWFsaXplZDsgICAgIC8qIGluZGljYXRlcyB3aGV0aGVyIGRldiBpcyBpbml0aWFsaXplZCAqLwogfSBkcml2ZV9pbmZvX3N0cnVjdDsKIAotc3RydWN0IENtZF9zZ19saXN0IHsKLQlTR0Rlc2NyaXB0b3Jfc3RydWN0CSpzZ2NoYWluOwotCWRtYV9hZGRyX3QJCXNnX2NoYWluX2RtYTsKLQlpbnQJCQljaGFpbl9ibG9ja19zaXplOwotfTsKLQogc3RydWN0IGN0bHJfaW5mbwogewogCWludAljdGxyOwogCWNoYXIJZGV2bmFtZVs4XTsKIAljaGFyICAgICpwcm9kdWN0X25hbWU7Ci0JY2hhcglmaXJtX3Zlcls0XTsgLy8gRmlybXdhcmUgdmVyc2lvbiAKKwljaGFyCWZpcm1fdmVyWzRdOyAvKiBGaXJtd2FyZSB2ZXJzaW9uICovCiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJX191MzIJYm9hcmRfaWQ7CiAJdm9pZCBfX2lvbWVtICp2YWRkcjsKQEAgLTg5LDcgKzgzLDcgQEAKIAlpbnQJbWF4c2dlbnRyaWVzOwogCWludAljaGFpbnNpemU7CiAJaW50CW1heF9jbWRfc2dlbnRyaWVzOwotCXN0cnVjdCBDbWRfc2dfbGlzdCAqKmNtZF9zZ19saXN0OworCVNHRGVzY3JpcHRvcl9zdHJ1Y3QgKipjbWRfc2dfbGlzdDsKIAogIwlkZWZpbmUgRE9PUkJFTExfSU5UCTAKICMJZGVmaW5lIFBFUkZfTU9ERV9JTlQJMQpAQCAtMTAzLDcgKzk3LDcgQEAKIAlCWVRFCWNjaXNzX3dyaXRlOwogCUJZVEUJY2Npc3NfcmVhZF9jYXBhY2l0eTsKIAotCS8vIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggbG9naWNhbCB2b2x1bWUKKwkvKiBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGxvZ2ljYWwgdm9sdW1lICovCiAJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydltDSVNTX01BWF9MVU5dOwogCiAJc3RydWN0IGFjY2Vzc19tZXRob2QgYWNjZXNzOwpAQCAtMTE2LDcgKzExMCw3IEBACiAJdW5zaWduZWQgaW50IG1heFNHOwogCXNwaW5sb2NrX3QgbG9jazsKIAotCS8vKiBwb2ludGVycyB0byBjb21tYW5kIGFuZCBlcnJvciBpbmZvIHBvb2wgKi8gCisJLyogcG9pbnRlcnMgdG8gY29tbWFuZCBhbmQgZXJyb3IgaW5mbyBwb29sICovCiAJQ29tbWFuZExpc3Rfc3RydWN0IAkqY21kX3Bvb2w7CiAJZG1hX2FkZHJfdAkJY21kX3Bvb2xfZGhhbmRsZTsgCiAJRXJyb3JJbmZvX3N0cnVjdCAJKmVycmluZm9fcG9vbDsKQEAgLTEzNCwxMiArMTI4LDEwIEBACiAJKi8KIAlpbnQJCQluZXh0X3RvX3J1bjsKIAotCS8vIERpc2sgc3RydWN0dXJlcyB3ZSBuZWVkIHRvIHBhc3MgYmFjaworCS8qIERpc2sgc3RydWN0dXJlcyB3ZSBuZWVkIHRvIHBhc3MgYmFjayAqLwogCXN0cnVjdCBnZW5kaXNrICAgKmdlbmRpc2tbQ0lTU19NQVhfTFVOXTsKICNpZmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUKLQl2b2lkICpzY3NpX2N0bHI7IC8qIHB0ciB0byBzdHJ1Y3R1cmUgY29udGFpbmluZyBzY3NpIHJlbGF0ZWQgc3R1ZmYgKi8KLQkvKiBsaXN0IG9mIGJsb2NrIHNpZGUgY29tbWFuZHMgdGhlIHNjc2kgZXJyb3IgaGFuZGxpbmcgc3Vja2VkIHVwICovCi0JLyogYW5kIHNhdmVkIGZvciBsYXRlciBwcm9jZXNzaW5nICovCisJc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKnNjc2lfY3RscjsKICNlbmRpZgogCXVuc2lnbmVkIGNoYXIgYWxpdmU7CiAJc3RydWN0IGxpc3RfaGVhZCBzY2FuX2xpc3Q7CkBAIC0zMTUsNCArMzA3LDMgQEAKICNkZWZpbmUgQ0NJU1NfTE9DSyhpKQkoJmhiYVtpXS0+bG9jaykKIAogI2VuZGlmIC8qIENDSVNTX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzc19jbWQuaCBiL2RyaXZlcnMvYmxvY2svY2Npc3NfY21kLmgKaW5kZXggNmFmYTcwMC4uZTYyNGZmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzc19jbWQuaAorKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX2NtZC5oCkBAIC0xLDMxICsxLDE2IEBACiAjaWZuZGVmIENDSVNTX0NNRF9ICiAjZGVmaW5lIENDSVNTX0NNRF9ICi0vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotLy9ERUZJTkVTCi0vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjaW5jbHVkZSA8bGludXgvY2Npc3NfZGVmcy5oPgorCisvKiBERUZJTkVTICovCiAjZGVmaW5lIENJU1NfVkVSU0lPTiAiMS4wMCIKIAotLy9nZW5lcmFsIGJvdW5kYXJ5IGRlZmluaXRpb25zCi0jZGVmaW5lIFNFTlNFSU5GT0JZVEVTICAgICAgICAgIDMyLy9ub3RlIHRoYXQgdGhpcyB2YWx1ZSBtYXkgdmFyeSBiZXR3ZWVuIGhvc3QgaW1wbGVtZW50YXRpb25zCisvKiBnZW5lcmFsIGJvdW5kYXJ5IGRlZmluaXRpb25zICovCiAjZGVmaW5lIE1BWFNHRU5UUklFUyAgICAgICAgICAgIDMyCiAjZGVmaW5lIENDSVNTX1NHX0NIQUlOICAgICAgICAgIDB4ODAwMDAwMDAKICNkZWZpbmUgTUFYUkVQTFlRUyAgICAgICAgICAgICAgMjU2CiAKLS8vQ29tbWFuZCBTdGF0dXMgdmFsdWUKLSNkZWZpbmUgQ01EX1NVQ0NFU1MgICAgICAgICAgICAgMHgwMDAwCi0jZGVmaW5lIENNRF9UQVJHRVRfU1RBVFVTICAgICAgIDB4MDAwMQotI2RlZmluZSBDTURfREFUQV9VTkRFUlJVTiAgICAgICAweDAwMDIKLSNkZWZpbmUgQ01EX0RBVEFfT1ZFUlJVTiAgICAgICAgMHgwMDAzCi0jZGVmaW5lIENNRF9JTlZBTElEICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBDTURfUFJPVE9DT0xfRVJSICAgICAgICAweDAwMDUKLSNkZWZpbmUgQ01EX0hBUkRXQVJFX0VSUiAgICAgICAgMHgwMDA2Ci0jZGVmaW5lIENNRF9DT05ORUNUSU9OX0xPU1QgICAgIDB4MDAwNwotI2RlZmluZSBDTURfQUJPUlRFRCAgICAgICAgICAgICAweDAwMDgKLSNkZWZpbmUgQ01EX0FCT1JUX0ZBSUxFRCAgICAgICAgMHgwMDA5Ci0jZGVmaW5lIENNRF9VTlNPTElDSVRFRF9BQk9SVCAgIDB4MDAwQQotI2RlZmluZSBDTURfVElNRU9VVCAgICAgICAgICAgICAweDAwMEIKLSNkZWZpbmUgQ01EX1VOQUJPUlRBQkxFCQkweDAwMEMKLQogLyogVW5pdCBBdHRlbnRpb25zIEFTQydzIGFzIGRlZmluZWQgZm9yIHRoZSBNU0EyMDEyc2EgKi8KICNkZWZpbmUgUE9XRVJfT1JfUkVTRVQJCQkweDI5CiAjZGVmaW5lIFNUQVRFX0NIQU5HRUQJCQkweDJhCkBAIC00OSwzMCArMzQsMTMgQEAKICNkZWZpbmUgQVNZTV9BQ0NFU1NfQ0hBTkdFRAkJMHgwNgogI2RlZmluZSBMVU5fQ0FQQUNJVFlfQ0hBTkdFRAkJMHgwOQogCi0vL3RyYW5zZmVyIGRpcmVjdGlvbgotI2RlZmluZSBYRkVSX05PTkUgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIFhGRVJfV1JJVEUgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgWEZFUl9SRUFEICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZSBYRkVSX1JTVkQgICAgICAgICAgICAgICAweDAzCi0KLS8vdGFzayBhdHRyaWJ1dGUKLSNkZWZpbmUgQVRUUl9VTlRBR0dFRCAgICAgICAgICAgMHgwMAotI2RlZmluZSBBVFRSX1NJTVBMRSAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lIEFUVFJfSEVBRE9GUVVFVUUgICAgICAgIDB4MDUKLSNkZWZpbmUgQVRUUl9PUkRFUkVEICAgICAgICAgICAgMHgwNgotI2RlZmluZSBBVFRSX0FDQSAgICAgICAgICAgICAgICAweDA3Ci0KLS8vY2RiIHR5cGUKLSNkZWZpbmUgVFlQRV9DTUQJCQkJMHgwMAotI2RlZmluZSBUWVBFX01TRwkJCQkweDAxCi0KLS8vY29uZmlnIHNwYWNlIHJlZ2lzdGVyIG9mZnNldHMKKy8qIGNvbmZpZyBzcGFjZSByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIENGR19WRU5ET1JJRCAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgQ0ZHX0RFVklDRUlEICAgICAgICAgICAgMHgwMgogI2RlZmluZSBDRkdfSTJPQkFSICAgICAgICAgICAgICAweDEwCiAjZGVmaW5lIENGR19NRU0xQkFSICAgICAgICAgICAgIDB4MTQKIAotLy9pMm8gc3BhY2UgcmVnaXN0ZXIgb2Zmc2V0cworLyogaTJvIHNwYWNlIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgSTJPX0lCREJfU0VUICAgICAgICAgICAgMHgyMAogI2RlZmluZSBJMk9fSUJEQl9DTEVBUiAgICAgICAgICAweDcwCiAjZGVmaW5lIEkyT19JTlRfU1RBVFVTICAgICAgICAgIDB4MzAKQEAgLTgxLDcgKzQ5LDcgQEAKICNkZWZpbmUgSTJPX09CUE9TVF9RICAgICAgICAgICAgMHg0NAogI2RlZmluZSBJMk9fRE1BMV9DRkcJCTB4MjE0CiAKLS8vQ29uZmlndXJhdGlvbiBUYWJsZQorLyogQ29uZmlndXJhdGlvbiBUYWJsZSAqLwogI2RlZmluZSBDRkdUQkxfQ2hhbmdlUmVxICAgICAgICAweDAwMDAwMDAxbAogI2RlZmluZSBDRkdUQkxfQWNjQ21kcyAgICAgICAgICAweDAwMDAwMDAxbAogCkBAIC0xMDMsMjQgKzcxLDE3IEBACiAgICBfX3U2NAl2YWw7CiB9IHU2NGJpdDsKIAotLy8gVHlwZSBkZWZzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBzdHJ1Y3RzCi0jZGVmaW5lIEJZVEUgX191OAotI2RlZmluZSBXT1JEIF9fdTE2Ci0jZGVmaW5lIEhXT1JEIF9fdTE2Ci0jZGVmaW5lIERXT1JEIF9fdTMyCisvKiBUeXBlIGRlZnMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIHN0cnVjdHMgKi8KICNkZWZpbmUgUVdPUkQgdmFsczMyIAogCi0vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotLy9TVFJVQ1RVUkVTCi0vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotI2RlZmluZSBDSVNTX01BWF9MVU4JMTAyNAorLyogU1RSVUNUVVJFUyAqLwogI2RlZmluZSBDSVNTX01BWF9QSFlTX0xVTgkxMDI0Ci0vLyBTQ1NJLTMgQ21tYW5kcyAKKy8qIFNDU0ktMyBDbW1hbmRzICovCiAKICNwcmFnbWEgcGFjaygxKQkKIAogI2RlZmluZSBDSVNTX0lOUVVJUlkgMHgxMgotLy9EYXRlIHJldHVybmVkCisvKiBEYXRlIHJldHVybmVkICovCiB0eXBlZGVmIHN0cnVjdCBfSW5xdWlyeURhdGFfc3RydWN0CiB7CiAgIEJZVEUgZGF0YV9ieXRlWzM2XTsKQEAgLTEyOCw3ICs4OSw3IEBACiAKICNkZWZpbmUgQ0lTU19SRVBPUlRfTE9HIDB4YzIgICAgLyogUmVwb3J0IExvZ2ljYWwgTFVOcyAqLwogI2RlZmluZSBDSVNTX1JFUE9SVF9QSFlTIDB4YzMgICAvKiBSZXBvcnQgUGh5c2ljYWwgTFVOcyAqLwotLy8gRGF0YSByZXR1cm5lZAorLyogRGF0YSByZXR1cm5lZCAqLwogdHlwZWRlZiBzdHJ1Y3QgX1JlcG9ydExVTmRhdGFfc3RydWN0CiB7CiAgIEJZVEUgTFVOTGlzdExlbmd0aFs0XTsKQEAgLTEzOSw4ICsxMDAsOCBAQAogI2RlZmluZSBDQ0lTU19SRUFEX0NBUEFDSVRZIDB4MjUgLyogUmVhZCBDYXBhY2l0eSAqLyAKIHR5cGVkZWYgc3RydWN0IF9SZWFkQ2FwZGF0YV9zdHJ1Y3QKIHsKLSAgQllURSB0b3RhbF9zaXplWzRdOwkvLyBUb3RhbCBzaXplIGluIGJsb2NrcwotICBCWVRFIGJsb2NrX3NpemVbNF07CS8vIFNpemUgb2YgYmxvY2tzIGluIGJ5dGVzCisgIEJZVEUgdG90YWxfc2l6ZVs0XTsJLyogVG90YWwgc2l6ZSBpbiBibG9ja3MgKi8KKyAgQllURSBibG9ja19zaXplWzRdOwkvKiBTaXplIG9mIGJsb2NrcyBpbiBieXRlcyAqLwogfSBSZWFkQ2FwZGF0YV9zdHJ1Y3Q7CiAKICNkZWZpbmUgQ0NJU1NfUkVBRF9DQVBBQ0lUWV8xNiAweDllIC8qIFJlYWQgQ2FwYWNpdHkgMTYgKi8KQEAgLTE3Miw1MiArMTMzLDEzIEBACiAjZGVmaW5lIENEQl9MRU4xMAkxMAogI2RlZmluZSBDREJfTEVOMTYJMTYKIAotLy8gQk1JQyBjb21tYW5kcyAKKy8qIEJNSUMgY29tbWFuZHMgKi8KICNkZWZpbmUgQk1JQ19SRUFEIDB4MjYKICNkZWZpbmUgQk1JQ19XUklURSAweDI3CiAjZGVmaW5lIEJNSUNfQ0FDSEVfRkxVU0ggMHhjMgotI2RlZmluZSBDQ0lTU19DQUNIRV9GTFVTSCAweDAxCS8vQzIgd2FzIGFscmVhZHkgYmVpbmcgdXNlZCBieSBDQ0lTUworI2RlZmluZSBDQ0lTU19DQUNIRV9GTFVTSCAweDAxCS8qIEMyIHdhcyBhbHJlYWR5IGJlaW5nIHVzZWQgYnkgQ0NJU1MgKi8KIAotLy9Db21tYW5kIExpc3QgU3RydWN0dXJlCi10eXBlZGVmIHVuaW9uIF9TQ1NJM0FkZHJfc3RydWN0IHsKLSAgIHN0cnVjdCB7Ci0gICAgQllURSBEZXY7Ci0gICAgQllURSBCdXM6NjsKLSAgICBCWVRFIE1vZGU6MjsgICAgICAgIC8vIGIwMAotICB9IFBlcmlwRGV2OwotICAgc3RydWN0IHsKLSAgICBCWVRFIERldkxTQjsKLSAgICBCWVRFIERldk1TQjo2OwotICAgIEJZVEUgTW9kZToyOyAgICAgICAgLy8gYjAxCi0gIH0gTG9nRGV2OwotICAgc3RydWN0IHsKLSAgICBCWVRFIERldjo1OwotICAgIEJZVEUgQnVzOjM7Ci0gICAgQllURSBUYXJnOjY7Ci0gICAgQllURSBNb2RlOjI7ICAgICAgICAvLyBiMTAKLSAgfSBMb2dVbml0OwotfSBTQ1NJM0FkZHJfc3RydWN0OwotCi10eXBlZGVmIHN0cnVjdCBfUGh5c0RldkFkZHJfc3RydWN0IHsKLSAgRFdPUkQgICAgICAgICAgICAgVGFyZ2V0SWQ6MjQ7Ci0gIERXT1JEICAgICAgICAgICAgIEJ1czo2OwotICBEV09SRCAgICAgICAgICAgICBNb2RlOjI7Ci0gIFNDU0kzQWRkcl9zdHJ1Y3QgIFRhcmdldFsyXTsgLy8yIGxldmVsIHRhcmdldCBkZXZpY2UgYWRkcgotfSBQaHlzRGV2QWRkcl9zdHJ1Y3Q7Ci0gIAotdHlwZWRlZiBzdHJ1Y3QgX0xvZ0RldkFkZHJfc3RydWN0IHsKLSAgRFdPUkQgICAgICAgICAgICBWb2xJZDozMDsKLSAgRFdPUkQgICAgICAgICAgICBNb2RlOjI7Ci0gIEJZVEUgICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Ci19IExvZ0RldkFkZHJfc3RydWN0OwotCi10eXBlZGVmIHVuaW9uIF9MVU5BZGRyX3N0cnVjdCB7Ci0gIEJZVEUgICAgICAgICAgICAgICBMdW5BZGRyQnl0ZXNbOF07Ci0gIFNDU0kzQWRkcl9zdHJ1Y3QgICBTQ1NJM0x1bls0XTsKLSAgUGh5c0RldkFkZHJfc3RydWN0IFBoeXNEZXY7Ci0gIExvZ0RldkFkZHJfc3RydWN0ICBMb2dEZXY7Ci19IExVTkFkZHJfc3RydWN0OwotCisvKiBDb21tYW5kIExpc3QgU3RydWN0dXJlICovCiAjZGVmaW5lIENUTFJfTFVOSUQgIlwwXDBcMFwwXDBcMFwwXDAiCiAKIHR5cGVkZWYgc3RydWN0IF9Db21tYW5kTGlzdEhlYWRlcl9zdHJ1Y3QgewpAQCAtMjI3LDE2ICsxNDksNiBAQAogICBRV09SRCAgICAgICAgICAgICBUYWc7CiAgIExVTkFkZHJfc3RydWN0ICAgIExVTjsKIH0gQ29tbWFuZExpc3RIZWFkZXJfc3RydWN0OwotdHlwZWRlZiBzdHJ1Y3QgX1JlcXVlc3RCbG9ja19zdHJ1Y3QgewotICBCWVRFICAgQ0RCTGVuOwotICBzdHJ1Y3QgewotICAgIEJZVEUgVHlwZTozOwotICAgIEJZVEUgQXR0cmlidXRlOjM7Ci0gICAgQllURSBEaXJlY3Rpb246MjsKLSAgfSBUeXBlOwotICBIV09SRCAgVGltZW91dDsKLSAgQllURSAgIENEQlsxNl07Ci19IFJlcXVlc3RCbG9ja19zdHJ1Y3Q7CiB0eXBlZGVmIHN0cnVjdCBfRXJyRGVzY3JpcHRvcl9zdHJ1Y3QgewogICBRV09SRCAgQWRkcjsKICAgRFdPUkQgIExlbjsKQEAgLTI0NywyOCArMTU5LDYgQEAKICAgRFdPUkQgIEV4dDsKIH0gU0dEZXNjcmlwdG9yX3N0cnVjdDsKIAotdHlwZWRlZiB1bmlvbiBfTW9yZUVyckluZm9fc3RydWN0ewotICBzdHJ1Y3QgewotICAgIEJZVEUgIFJlc2VydmVkWzNdOwotICAgIEJZVEUgIFR5cGU7Ci0gICAgRFdPUkQgRXJyb3JJbmZvOwotICB9Q29tbW9uX0luZm87Ci0gIHN0cnVjdHsKLSAgICBCWVRFICBSZXNlcnZlZFsyXTsKLSAgICBCWVRFICBvZmZlbnNlX3NpemU7Ly9zaXplIG9mIG9mZmVuZGluZyBlbnRyeQotICAgIEJZVEUgIG9mZmVuc2VfbnVtOyAvL2J5dGUgIyBvZiBvZmZlbnNlIDAtYmFzZQotICAgIERXT1JEIG9mZmVuc2VfdmFsdWU7Ci0gIH1JbnZhbGlkX0NtZDsKLX1Nb3JlRXJySW5mb19zdHJ1Y3Q7Ci10eXBlZGVmIHN0cnVjdCBfRXJyb3JJbmZvX3N0cnVjdCB7Ci0gIEJZVEUgICAgICAgICAgICAgICBTY3NpU3RhdHVzOwotICBCWVRFICAgICAgICAgICAgICAgU2Vuc2VMZW47Ci0gIEhXT1JEICAgICAgICAgICAgICBDb21tYW5kU3RhdHVzOwotICBEV09SRCAgICAgICAgICAgICAgUmVzaWR1YWxDbnQ7Ci0gIE1vcmVFcnJJbmZvX3N0cnVjdCBNb3JlRXJySW5mbzsKLSAgQllURSAgICAgICAgICAgICAgIFNlbnNlSW5mb1tTRU5TRUlORk9CWVRFU107Ci19IEVycm9ySW5mb19zdHJ1Y3Q7Ci0KIC8qIENvbW1hbmQgdHlwZXMgKi8KICNkZWZpbmUgQ01EX1JXUkVRICAgICAgIDB4MDAKICNkZWZpbmUgQ01EX0lPQ1RMX1BFTkQgIDB4MDEKQEAgLTI3NywxMCArMTY3LDE4IEBACiAjZGVmaW5lIENNRF9NU0dfVElNRU9VVCAweDA1CiAjZGVmaW5lIENNRF9NU0dfU1RBTEUJMHhmZgogCi0vKiBUaGlzIHN0cnVjdHVyZSBuZWVkcyB0byBiZSBkaXZpc2libGUgYnkgOCBmb3IgbmV3Ci0gKiBpbmRleGluZyBtZXRob2QuCisvKiBUaGlzIHN0cnVjdHVyZSBuZWVkcyB0byBiZSBkaXZpc2libGUgYnkgQ09NTUFORExJU1RfQUxJR05NRU5UCisgKiBiZWNhdXNlIGxvdyBiaXRzIG9mIHRoZSBhZGRyZXNzIGFyZSB1c2VkIHRvIHRvIGluZGljYXRlIHRoYXQKKyAqIHdoZXRoZXIgdGhlIHRhZyBjb250YWlucyBhbiBpbmRleCBvciBhbiBhZGRyZXNzLiAgUEFEXzMyIGFuZAorICogUEFEXzY0IGNhbiBiZSBhZGp1c3RlZCBpbmRlcGVuZGVudGx5IGFzIG5lZWRlZCBmb3IgMzItYml0CisgKiBhbmQgNjQtYml0cyBzeXN0ZW1zLgogICovCi0jZGVmaW5lIFBBRFNJWkUgKHNpemVvZihsb25nKSAtIDQpCisjZGVmaW5lIENPTU1BTkRMSVNUX0FMSUdOTUVOVCAoOCkKKyNkZWZpbmUgSVNfNjRfQklUICgoc2l6ZW9mKGxvbmcpIC0gNCkvNCkKKyNkZWZpbmUgSVNfMzJfQklUICghSVNfNjRfQklUKQorI2RlZmluZSBQQURfMzIgKDApCisjZGVmaW5lIFBBRF82NCAoNCkKKyNkZWZpbmUgUEFEU0laRSAoSVNfMzJfQklUICogUEFEXzMyICsgSVNfNjRfQklUICogUEFEXzY0KQogdHlwZWRlZiBzdHJ1Y3QgX0NvbW1hbmRMaXN0X3N0cnVjdCB7CiAgIENvbW1hbmRMaXN0SGVhZGVyX3N0cnVjdCBIZWFkZXI7CiAgIFJlcXVlc3RCbG9ja19zdHJ1Y3QgICAgICBSZXF1ZXN0OwpAQCAtMzAwLDcgKzE5OCw3IEBACiAgIGNoYXIgICBwYWRbUEFEU0laRV07CiB9IENvbW1hbmRMaXN0X3N0cnVjdDsKIAotLy9Db25maWd1cmF0aW9uIFRhYmxlIFN0cnVjdHVyZQorLyogQ29uZmlndXJhdGlvbiBUYWJsZSBTdHJ1Y3R1cmUgKi8KIHR5cGVkZWYgc3RydWN0IF9Ib3N0V3JpdGVfc3RydWN0IHsKICAgRFdPUkQgVHJhbnNwb3J0UmVxdWVzdDsKICAgRFdPUkQgUmVzZXJ2ZWQ7CkBAIC0zMjYsNCArMjI0LDQgQEAKICAgRFdPUkQgICAgICAgICAgICBNYXhQaHlzaWNhbERyaXZlc1BlckxvZ2ljYWxVbml0OwogfSBDZmdUYWJsZV9zdHJ1Y3Q7CiAjcHJhZ21hIHBhY2soKQkgCi0jZW5kaWYgLy8gQ0NJU1NfQ01EX0gKKyNlbmRpZiAvKiBDQ0lTU19DTURfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmMgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuYwppbmRleCA1ZDBlNDZkLi5lMWQwZTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuYwpAQCAtODQsNyArODQsNiBAQAogCS5xdWV1ZWNvbW1hbmQJCT0gY2Npc3Nfc2NzaV9xdWV1ZV9jb21tYW5kLAogCS5jYW5fcXVldWUJCT0gU0NTSV9DQ0lTU19DQU5fUVVFVUUsCiAJLnRoaXNfaWQJCT0gNywKLQkuc2dfdGFibGVzaXplCQk9IE1BWFNHRU5UUklFUywKIAkuY21kX3Blcl9sdW4JCT0gMSwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRElTQUJMRV9DTFVTVEVSSU5HLAogCS8qIENhbid0IGhhdmUgZWhfYnVzX3Jlc2V0X2hhbmRsZXIgb3IgZWhfaG9zdF9yZXNldF9oYW5kbGVyIGZvciBjY2lzcyAqLwpAQCAtOTMsMTEgKzkyLDE2IEBACiB9OwogCiAjcHJhZ21hIHBhY2soMSkKKworI2RlZmluZSBTQ1NJX1BBRF8zMiAwCisjZGVmaW5lIFNDU0lfUEFEXzY0IDAKKwogc3RydWN0IGNjaXNzX3Njc2lfY21kX3N0YWNrX2VsZW1fdCB7CiAJQ29tbWFuZExpc3Rfc3RydWN0IGNtZDsKIAlFcnJvckluZm9fc3RydWN0IEVycjsKIAlfX3UzMiBidXNhZGRyOwotCV9fdTMyIHBhZDsKKwlpbnQgY21kaW5kZXg7CisJdTggcGFkW0lTXzMyX0JJVCAqIFNDU0lfUEFEXzMyICsgSVNfNjRfQklUICogU0NTSV9QQURfNjRdOwogfTsKIAogI3ByYWdtYSBwYWNrKCkKQEAgLTExOCwxNiArMTIyLDE1IEBACiBzdHJ1Y3QgY2Npc3Nfc2NzaV9hZGFwdGVyX2RhdGFfdCB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2NzaV9ob3N0OwogCXN0cnVjdCBjY2lzc19zY3NpX2NtZF9zdGFja190IGNtZF9zdGFjazsKKwlTR0Rlc2NyaXB0b3Jfc3RydWN0ICoqY21kX3NnX2xpc3Q7CiAJaW50IHJlZ2lzdGVyZWQ7CiAJc3BpbmxvY2tfdCBsb2NrOyAvLyB0byBwcm90ZWN0IGNjaXNzc2NzaVtjdGxyXTsgCiB9OwogCiAjZGVmaW5lIENQUV9UQVBFX0xPQ0soY3RsciwgZmxhZ3MpIHNwaW5fbG9ja19pcnFzYXZlKCBcCi0JJigoKHN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICopIFwKLQloYmFbY3Rscl0tPnNjc2lfY3RsciktPmxvY2spLCBmbGFncyk7CisJJmhiYVtjdGxyXS0+c2NzaV9jdGxyLT5sb2NrLCBmbGFncyk7CiAjZGVmaW5lIENQUV9UQVBFX1VOTE9DSyhjdGxyLCBmbGFncykgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggXAotCSYoKChzdHJ1Y3QgY2Npc3Nfc2NzaV9hZGFwdGVyX2RhdGFfdCAqKSBcCi0JaGJhW2N0bHJdLT5zY3NpX2N0bHIpLT5sb2NrKSwgZmxhZ3MpOworCSZoYmFbY3Rscl0tPnNjc2lfY3Rsci0+bG9jaywgZmxhZ3MpOwogCiBzdGF0aWMgQ29tbWFuZExpc3Rfc3RydWN0ICoKIHNjc2lfY21kX2FsbG9jKGN0bHJfaW5mb190ICpoKQpAQCAtMTQzLDcgKzE0Niw3IEBACiAJc3RydWN0IGNjaXNzX3Njc2lfY21kX3N0YWNrX3QgKnN0azsKIAl1NjRiaXQgdGVtcDY0OwogCi0Jc2EgPSAoc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKikgaC0+c2NzaV9jdGxyOworCXNhID0gaC0+c2NzaV9jdGxyOwogCXN0ayA9ICZzYS0+Y21kX3N0YWNrOyAKIAogCWlmIChzdGstPnRvcCA8IDApIApAQCAtMTU0LDYgKzE1Nyw3IEBACiAJbWVtc2V0KCZjLT5FcnIsIDAsIHNpemVvZihjLT5FcnIpKTsKIAkvKiBzZXQgcGh5c2ljYWwgYWRkciBvZiBjbWQgYW5kIGFkZHIgb2Ygc2NzaSBwYXJhbWV0ZXJzICovCiAJYy0+Y21kLmJ1c2FkZHIgPSBjLT5idXNhZGRyOyAKKwljLT5jbWQuY21kaW5kZXggPSBjLT5jbWRpbmRleDsKIAkvKiAoX191MzIpIChzdGstPmNtZF9wb29sX2hhbmRsZSArIAogCQkoc2l6ZW9mKHN0cnVjdCBjY2lzc19zY3NpX2NtZF9zdGFja19lbGVtX3QpKnN0ay0+dG9wKSk7ICovCiAKQEAgLTE4Miw3ICsxODYsNyBAQAogCXN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICpzYTsKIAlzdHJ1Y3QgY2Npc3Nfc2NzaV9jbWRfc3RhY2tfdCAqc3RrOwogCi0Jc2EgPSAoc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKikgaC0+c2NzaV9jdGxyOworCXNhID0gaC0+c2NzaV9jdGxyOwogCXN0ayA9ICZzYS0+Y21kX3N0YWNrOyAKIAlpZiAoc3RrLT50b3AgPj0gQ01EX1NUQUNLX1NJWkUpIHsKIAkJcHJpbnRrKCJjY2lzczogc2NzaV9jbWRfZnJlZSBjYWxsZWQgdG9vIG1hbnkgdGltZXMuXG4iKTsKQEAgLTE5OSwyNCArMjAzLDMxIEBACiAJc3RydWN0IGNjaXNzX3Njc2lfY21kX3N0YWNrX3QgKnN0azsKIAlzaXplX3Qgc2l6ZTsKIAorCXNhLT5jbWRfc2dfbGlzdCA9IGNjaXNzX2FsbG9jYXRlX3NnX2NoYWluX2Jsb2NrcyhoYmFbY3Rscl0sCisJCWhiYVtjdGxyXS0+Y2hhaW5zaXplLCBDTURfU1RBQ0tfU0laRSk7CisJaWYgKCFzYS0+Y21kX3NnX2xpc3QgJiYgaGJhW2N0bHJdLT5jaGFpbnNpemUgPiAwKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXN0ayA9ICZzYS0+Y21kX3N0YWNrOyAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBjY2lzc19zY3NpX2NtZF9zdGFja19lbGVtX3QpICogQ01EX1NUQUNLX1NJWkU7CiAKLQkvLyBwY2lfYWxsb2NfY29uc2lzdGVudCBndWFyYW50ZWVzIDMyLWJpdCBETUEgYWRkcmVzcyB3aWxsCi0JLy8gYmUgdXNlZAotCisJLyogQ2hlY2sgYWxpZ25tZW50LCBzZWUgY2Npc3NfY21kLmggbmVhciBDb21tYW5kTGlzdF9zdHJ1Y3QgZGVmLiAqLworCUJVSUxEX0JVR19PTigoc2l6ZW9mKCpzdGstPnBvb2wpICUgQ09NTUFORExJU1RfQUxJR05NRU5UKSAhPSAwKTsKKwkvKiBwY2lfYWxsb2NfY29uc2lzdGVudCBndWFyYW50ZWVzIDMyLWJpdCBETUEgYWRkcmVzcyB3aWxsIGJlIHVzZWQgKi8KIAlzdGstPnBvb2wgPSAoc3RydWN0IGNjaXNzX3Njc2lfY21kX3N0YWNrX2VsZW1fdCAqKQogCQlwY2lfYWxsb2NfY29uc2lzdGVudChoYmFbY3Rscl0tPnBkZXYsIHNpemUsICZzdGstPmNtZF9wb29sX2hhbmRsZSk7CiAKIAlpZiAoc3RrLT5wb29sID09IE5VTEwpIHsKLQkJcHJpbnRrKCJzdGstPnBvb2wgaXMgbnVsbFxuIik7Ci0JCXJldHVybiAtMTsKKwkJY2Npc3NfZnJlZV9zZ19jaGFpbl9ibG9ja3Moc2EtPmNtZF9zZ19saXN0LCBDTURfU1RBQ0tfU0laRSk7CisJCXNhLT5jbWRfc2dfbGlzdCA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvciAoaT0wOyBpPENNRF9TVEFDS19TSVpFOyBpKyspIHsKIAkJc3RrLT5lbGVtW2ldID0gJnN0ay0+cG9vbFtpXTsKIAkJc3RrLT5lbGVtW2ldLT5idXNhZGRyID0gKF9fdTMyKSAoc3RrLT5jbWRfcG9vbF9oYW5kbGUgKyAKIAkJCShzaXplb2Yoc3RydWN0IGNjaXNzX3Njc2lfY21kX3N0YWNrX2VsZW1fdCkgKiBpKSk7CisJCXN0ay0+ZWxlbVtpXS0+Y21kaW5kZXggPSBpOwogCX0KIAlzdGstPnRvcCA9IENNRF9TVEFDS19TSVpFLTE7CiAJcmV0dXJuIDA7CkBAIC0yMjksNyArMjQwLDcgQEAKIAlzdHJ1Y3QgY2Npc3Nfc2NzaV9jbWRfc3RhY2tfdCAqc3RrOwogCXNpemVfdCBzaXplOwogCi0Jc2EgPSAoc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKikgaGJhW2N0bHJdLT5zY3NpX2N0bHI7CisJc2EgPSBoYmFbY3Rscl0tPnNjc2lfY3RscjsKIAlzdGsgPSAmc2EtPmNtZF9zdGFjazsgCiAJaWYgKHN0ay0+dG9wICE9IENNRF9TVEFDS19TSVpFLTEpIHsKIAkJcHJpbnRrKCAiY2Npc3M6ICVkIHNjc2kgY29tbWFuZHMgYXJlIHN0aWxsIG91dHN0YW5kaW5nLlxuIiwKQEAgLTI0MSw2ICsyNTIsNyBAQAogCiAJcGNpX2ZyZWVfY29uc2lzdGVudChoYmFbY3Rscl0tPnBkZXYsIHNpemUsIHN0ay0+cG9vbCwgc3RrLT5jbWRfcG9vbF9oYW5kbGUpOwogCXN0ay0+cG9vbCA9IE5VTEw7CisJY2Npc3NfZnJlZV9zZ19jaGFpbl9ibG9ja3Moc2EtPmNtZF9zZ19saXN0LCBDTURfU1RBQ0tfU0laRSk7CiB9CiAKICNpZiAwCkBAIC01MzAsOCArNTQyLDcgQEAKIAlDUFFfVEFQRV9MT0NLKGN0bHIsIGZsYWdzKTsKIAogCWlmIChob3N0bm8gIT0gLTEpICAvKiBpZiBpdCdzIG5vdCB0aGUgZmlyc3QgdGltZS4uLiAqLwotCQlzaCA9ICgoc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKikKLQkJCWhiYVtjdGxyXS0+c2NzaV9jdGxyKS0+c2NzaV9ob3N0OworCQlzaCA9IGhiYVtjdGxyXS0+c2NzaV9jdGxyLT5zY3NpX2hvc3Q7CiAKIAkvKiBmaW5kIGFueSBkZXZpY2VzIGluIGNjaXNzc2NzaVtdIHRoYXQgYXJlIG5vdCBpbiAKIAkgICBzZFtdIGFuZCByZW1vdmUgdGhlbSBmcm9tIGNjaXNzc2NzaVtdICovCkBAIC03MDIsNyArNzEzLDcgQEAKIAkJa2ZyZWUoc2hiYSk7CiAJCXNoYmEgPSBOVUxMOwogCX0KLQloYmFbY250bF9udW1dLT5zY3NpX2N0bHIgPSAodm9pZCAqKSBzaGJhOworCWhiYVtjbnRsX251bV0tPnNjc2lfY3RsciA9IHNoYmE7CiAJcmV0dXJuOwogfQogCkBAIC03MjUsNiArNzM2LDggQEAKIAljdGxyID0gaGJhW2NwLT5jdGxyXTsKIAogCXNjc2lfZG1hX3VubWFwKGNtZCk7CisJaWYgKGNwLT5IZWFkZXIuU0dUb3RhbCA+IGN0bHItPm1heF9jbWRfc2dlbnRyaWVzKQorCQljY2lzc191bm1hcF9zZ19jaGFpbl9ibG9jayhjdGxyLCBjcCk7CiAKIAljbWQtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpOyAJCS8qIGhvc3QgYnl0ZSAqLwogCWNtZC0+cmVzdWx0IHw9IChDT01NQU5EX0NPTVBMRVRFIDw8IDgpOwkvKiBtc2cgYnl0ZSAqLwpAQCAtODQ3LDkgKzg2MCwxMCBAQAogCXNoLT5pb19wb3J0ID0gMDsJLy8gZ29vZCBlbm91Z2g/ICBGSVhNRSwgCiAJc2gtPm5faW9fcG9ydCA9IDA7CS8vIEkgZG9uJ3QgdGhpbmsgd2UgdXNlIHRoZXNlIHR3by4uLgogCXNoLT50aGlzX2lkID0gU0VMRl9TQ1NJX0lEOyAgCisJc2gtPnNnX3RhYmxlc2l6ZSA9IGhiYVtjdGxyXS0+bWF4c2dlbnRyaWVzOwogCiAJKChzdHJ1Y3QgY2Npc3Nfc2NzaV9hZGFwdGVyX2RhdGFfdCAqKSAKLQkJaGJhW2N0bHJdLT5zY3NpX2N0bHIpLT5zY3NpX2hvc3QgPSAodm9pZCAqKSBzaDsKKwkJaGJhW2N0bHJdLT5zY3NpX2N0bHIpLT5zY3NpX2hvc3QgPSBzaDsKIAlzaC0+aG9zdGRhdGFbMF0gPSAodW5zaWduZWQgbG9uZykgaGJhW2N0bHJdOwogCXNoLT5pcnEgPSBoYmFbY3Rscl0tPmludHJbU0lNUExFX01PREVfSU5UXTsKIAlzaC0+dW5pcXVlX2lkID0gc2gtPmlycTsKQEAgLTEzNjQsMzQgKzEzNzgsNTQgQEAKICAgIGRtYSBtYXBwaW5nICBhbmQgZmlsbHMgaW4gdGhlIHNjYXR0ZXIgZ2F0aGVyIGVudHJpZXMgb2YgdGhlIAogICAgY2Npc3MgY29tbWFuZCwgY3AuICovCiAKLXN0YXRpYyB2b2lkCi1jY2lzc19zY2F0dGVyX2dhdGhlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgCi0JCUNvbW1hbmRMaXN0X3N0cnVjdCAqY3AsCQotCQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCitzdGF0aWMgdm9pZCBjY2lzc19zY2F0dGVyX2dhdGhlcihjdGxyX2luZm9fdCAqaCwgQ29tbWFuZExpc3Rfc3RydWN0ICpjcCwKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJdW5zaWduZWQgaW50IGxlbjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCV9fdTY0IGFkZHI2NDsKLQlpbnQgdXNlX3NnLCBpOworCWludCByZXF1ZXN0X25zZ3MsIGksIGNoYWluZWQsIHNnX2luZGV4OworCXN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICpzYSA9IGgtPnNjc2lfY3RscjsKKwlTR0Rlc2NyaXB0b3Jfc3RydWN0ICpjdXJyX3NnOwogCi0JQlVHX09OKHNjc2lfc2dfY291bnQoY21kKSA+IE1BWFNHRU5UUklFUyk7CisJQlVHX09OKHNjc2lfc2dfY291bnQoY21kKSA+IGgtPm1heHNnZW50cmllcyk7CiAKLQl1c2Vfc2cgPSBzY3NpX2RtYV9tYXAoY21kKTsKLQlpZiAodXNlX3NnKSB7CS8qIG5vdCB0b28gbWFueSBhZGRycz8gKi8KLQkJc2NzaV9mb3JfZWFjaF9zZyhjbWQsIHNnLCB1c2Vfc2csIGkpIHsKKwljaGFpbmVkID0gMDsKKwlzZ19pbmRleCA9IDA7CisJY3Vycl9zZyA9IGNwLT5TRzsKKwlyZXF1ZXN0X25zZ3MgPSBzY3NpX2RtYV9tYXAoY21kKTsKKwlpZiAocmVxdWVzdF9uc2dzKSB7CisJCXNjc2lfZm9yX2VhY2hfc2coY21kLCBzZywgcmVxdWVzdF9uc2dzLCBpKSB7CisJCQlpZiAoc2dfaW5kZXggKyAxID09IGgtPm1heF9jbWRfc2dlbnRyaWVzICYmCisJCQkJIWNoYWluZWQgJiYgcmVxdWVzdF9uc2dzIC0gaSA+IDEpIHsKKwkJCQljaGFpbmVkID0gMTsKKwkJCQlzZ19pbmRleCA9IDA7CisJCQkJY3Vycl9zZyA9IHNhLT5jbWRfc2dfbGlzdFtjcC0+Y21kaW5kZXhdOworCQkJfQogCQkJYWRkcjY0ID0gKF9fdTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CiAJCQlsZW4gID0gc2dfZG1hX2xlbihzZyk7Ci0JCQljcC0+U0dbaV0uQWRkci5sb3dlciA9Ci0JCQkJKF9fdTMyKSAoYWRkcjY0ICYgKF9fdTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOwotCQkJY3AtPlNHW2ldLkFkZHIudXBwZXIgPQotCQkJCShfX3UzMikgKChhZGRyNjQgPj4gMzIpICYgKF9fdTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOwotCQkJY3AtPlNHW2ldLkxlbiA9IGxlbjsKLQkJCWNwLT5TR1tpXS5FeHQgPSAwOyAgLy8gd2UgYXJlIG5vdCBjaGFpbmluZworCQkJY3Vycl9zZ1tzZ19pbmRleF0uQWRkci5sb3dlciA9CisJCQkJKF9fdTMyKSAoYWRkcjY0ICYgMHgwRkZGRkZGRkZVTEwpOworCQkJY3Vycl9zZ1tzZ19pbmRleF0uQWRkci51cHBlciA9CisJCQkJKF9fdTMyKSAoKGFkZHI2NCA+PiAzMikgJiAweDBGRkZGRkZGRlVMTCk7CisJCQljdXJyX3NnW3NnX2luZGV4XS5MZW4gPSBsZW47CisJCQljdXJyX3NnW3NnX2luZGV4XS5FeHQgPSAwOworCQkJKytzZ19pbmRleDsKIAkJfQorCQlpZiAoY2hhaW5lZCkKKwkJCWNjaXNzX21hcF9zZ19jaGFpbl9ibG9jayhoLCBjcCwKKwkJCQlzYS0+Y21kX3NnX2xpc3RbY3AtPmNtZGluZGV4XSwKKwkJCQkocmVxdWVzdF9uc2dzIC0gKGgtPm1heF9jbWRfc2dlbnRyaWVzIC0gMSkpICoKKwkJCQkJc2l6ZW9mKFNHRGVzY3JpcHRvcl9zdHJ1Y3QpKTsKIAl9Ci0KLQljcC0+SGVhZGVyLlNHTGlzdCA9IChfX3U4KSB1c2Vfc2c7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KLQljcC0+SGVhZGVyLlNHVG90YWwgPSAoX191MTYpIHVzZV9zZzsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KKwkvKiB0cmFjayBob3cgbWFueSBTRyBlbnRyaWVzIHdlIGFyZSB1c2luZyAqLworCWlmIChyZXF1ZXN0X25zZ3MgPiBoLT5tYXhTRykKKwkJaC0+bWF4U0cgPSByZXF1ZXN0X25zZ3M7CisJY3AtPkhlYWRlci5TR1RvdGFsID0gKF9fdTgpIHJlcXVlc3RfbnNncyArIGNoYWluZWQ7CisJaWYgKHJlcXVlc3RfbnNncyA+IGgtPm1heF9jbWRfc2dlbnRyaWVzKQorCQljcC0+SGVhZGVyLlNHTGlzdCA9IGgtPm1heF9jbWRfc2dlbnRyaWVzOworCWVsc2UKKwkJY3AtPkhlYWRlci5TR0xpc3QgPSBjcC0+SGVhZGVyLlNHVG90YWw7CiAJcmV0dXJuOwogfQogCkBAIC0xMzk5LDcgKzE0MzMsNyBAQAogc3RhdGljIGludAogY2Npc3Nfc2NzaV9xdWV1ZV9jb21tYW5kIChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHZvaWQgKCogZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSkKIHsKLQljdGxyX2luZm9fdCAqKmM7CisJY3Rscl9pbmZvX3QgKmM7CiAJaW50IGN0bHIsIHJjOwogCXVuc2lnbmVkIGNoYXIgc2NzaTNhZGRyWzhdOwogCUNvbW1hbmRMaXN0X3N0cnVjdCAqY3A7CkBAIC0xNDA3LDggKzE0NDEsOCBAQAogCiAJLy8gR2V0IHRoZSBwdHIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlIChoYmFbaV0pIG91dCBvZiBjbWQtPmhvc3QuCiAJLy8gV2UgdmlvbGF0ZSBjbWQtPmhvc3QgcHJpdmFjeSBoZXJlLiAgKElzIHRoZXJlIGFub3RoZXIgd2F5PykKLQljID0gKGN0bHJfaW5mb190ICoqKSAmY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOwkKLQljdGxyID0gKCpjKS0+Y3RscjsKKwljID0gKGN0bHJfaW5mb190ICopIGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKKwljdGxyID0gYy0+Y3RscjsKIAogCXJjID0gbG9va3VwX3Njc2kzYWRkcihjdGxyLCBjbWQtPmRldmljZS0+Y2hhbm5lbCwgY21kLT5kZXZpY2UtPmlkLCAKIAkJCWNtZC0+ZGV2aWNlLT5sdW4sIHNjc2kzYWRkcik7CkBAIC0xNDMxLDcgKzE0NjUsNyBAQAogICAgICAgICAgICBzZWUgd2hhdCB0aGUgZGV2aWNlIHRoaW5rcyBvZiBpdC4gKi8KIAogCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKLQljcCA9IHNjc2lfY21kX2FsbG9jKCpjKTsKKwljcCA9IHNjc2lfY21kX2FsbG9jKGMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwogCWlmIChjcCA9PSBOVUxMKSB7CQkJLyogdHJvdWJsZS4uLiAqLwogCQlwcmludGsoInNjc2lfY21kX2FsbG9jIHJldHVybmVkIE5VTEwhXG4iKTsKQEAgLTE0ODksMTUgKzE1MjMsMTQgQEAKIAkJQlVHKCk7CiAJCWJyZWFrOwogCX0KLQotCWNjaXNzX3NjYXR0ZXJfZ2F0aGVyKCgqYyktPnBkZXYsIGNwLCBjbWQpOyAvLyBGaWxsIHRoZSBTRyBsaXN0CisJY2Npc3Nfc2NhdHRlcl9nYXRoZXIoYywgY3AsIGNtZCk7CiAKIAkvKiBQdXQgdGhlIHJlcXVlc3Qgb24gdGhlIHRhaWwgb2YgdGhlIHJlcXVlc3QgcXVldWUgKi8KIAogCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKLQlhZGRRKCYoKmMpLT5yZXFRLCBjcCk7Ci0JKCpjKS0+UWRlcHRoKys7Ci0Jc3RhcnRfaW8oKmMpOworCWFkZFEoJmMtPnJlcVEsIGNwKTsKKwljLT5RZGVwdGgrKzsKKwlzdGFydF9pbyhjKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKIAogCS8qIHRoZSBjbWQnbGwgY29tZSBiYWNrIHZpYSBpbnRyIGhhbmRsZXIgaW4gY29tcGxldGVfc2NzaV9jb21tYW5kKCkgICovCkBAIC0xNTE0LDcgKzE1NDcsNyBAQAogCS8qIHdlIGFyZSBiZWluZyBmb3JjaWJseSB1bmxvYWRlZCwgYW5kIG1heSBub3QgcmVmdXNlLiAqLwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwotCXNhID0gKHN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICopIGhiYVtjdGxyXS0+c2NzaV9jdGxyOworCXNhID0gaGJhW2N0bHJdLT5zY3NpX2N0bHI7CiAJc3RrID0gJnNhLT5jbWRfc3RhY2s7IAogCiAJLyogaWYgd2Ugd2VyZW4ndCBldmVyIGFjdHVhbGx5IHJlZ2lzdGVyZWQsIGRvbid0IHVucmVnaXN0ZXIgKi8gCkBAIC0xNTQxLDcgKzE1NzQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGN0bHIpLCBmbGFncyk7Ci0Jc2EgPSAoc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKikgaGJhW2N0bHJdLT5zY3NpX2N0bHI7CisJc2EgPSBoYmFbY3Rscl0tPnNjc2lfY3RscjsKIAlzdGsgPSAmc2EtPmNtZF9zdGFjazsgCiAKIAlpZiAoc2EtPnJlZ2lzdGVyZWQpIHsKQEAgLTE2NTQsMTQgKzE2ODcsMTQgQEAKIAlpbnQgcmM7CiAJQ29tbWFuZExpc3Rfc3RydWN0ICpjbWRfaW5fdHJvdWJsZTsKIAl1bnNpZ25lZCBjaGFyIGx1bmFkZHJbOF07Ci0JY3Rscl9pbmZvX3QgKipjOworCWN0bHJfaW5mb190ICpjOwogCWludCBjdGxyOwogCiAJLyogZmluZCB0aGUgY29udHJvbGxlciB0byB3aGljaCB0aGUgY29tbWFuZCB0byBiZSBhYm9ydGVkIHdhcyBzZW50ICovCi0JYyA9IChjdGxyX2luZm9fdCAqKikgJnNjc2ljbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CQorCWMgPSAoY3Rscl9pbmZvX3QgKikgc2NzaWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKIAlpZiAoYyA9PSBOVUxMKSAvKiBwYXJhbm9pYSAqLwogCQlyZXR1cm4gRkFJTEVEOwotCWN0bHIgPSAoKmMpLT5jdGxyOworCWN0bHIgPSBjLT5jdGxyOwogCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IHJlc2V0dGluZyB0YXBlIGRyaXZlIG9yIG1lZGl1bSBjaGFuZ2VyLlxuIiwgY3Rscik7CiAJLyogZmluZCB0aGUgY29tbWFuZCB0aGF0J3MgZ2l2aW5nIHVzIHRyb3VibGUgKi8KIAljbWRfaW5fdHJvdWJsZSA9IChDb21tYW5kTGlzdF9zdHJ1Y3QgKikgc2NzaWNtZC0+aG9zdF9zY3JpYmJsZTsKQEAgLTE2NzEsNyArMTcwNCw3IEBACiAJLyogc2VuZCBhIHJlc2V0IHRvIHRoZSBTQ1NJIExVTiB3aGljaCB0aGUgY29tbWFuZCB3YXMgc2VudCB0byAqLwogCXJjID0gc2VuZGNtZF93aXRoaXJxKENDSVNTX1JFU0VUX01TRywgY3RsciwgTlVMTCwgMCwgMCwgbHVuYWRkciwKIAkJVFlQRV9NU0cpOwotCWlmIChyYyA9PSAwICYmIHdhaXRfZm9yX2RldmljZV90b19iZWNvbWVfcmVhZHkoKmMsIGx1bmFkZHIpID09IDApCisJaWYgKHJjID09IDAgJiYgd2FpdF9mb3JfZGV2aWNlX3RvX2JlY29tZV9yZWFkeShjLCBsdW5hZGRyKSA9PSAwKQogCQlyZXR1cm4gU1VDQ0VTUzsKIAlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiByZXNldHRpbmcgZGV2aWNlIGZhaWxlZC5cbiIsIGN0bHIpOwogCXJldHVybiBGQUlMRUQ7CkBAIC0xNjgyLDE0ICsxNzE1LDE0IEBACiAJaW50IHJjOwogCUNvbW1hbmRMaXN0X3N0cnVjdCAqY21kX3RvX2Fib3J0OwogCXVuc2lnbmVkIGNoYXIgbHVuYWRkcls4XTsKLQljdGxyX2luZm9fdCAqKmM7CisJY3Rscl9pbmZvX3QgKmM7CiAJaW50IGN0bHI7CiAKIAkvKiBmaW5kIHRoZSBjb250cm9sbGVyIHRvIHdoaWNoIHRoZSBjb21tYW5kIHRvIGJlIGFib3J0ZWQgd2FzIHNlbnQgKi8KLQljID0gKGN0bHJfaW5mb190ICoqKSAmc2NzaWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsJCisJYyA9IChjdGxyX2luZm9fdCAqKSBzY3NpY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOwogCWlmIChjID09IE5VTEwpIC8qIHBhcmFub2lhICovCiAJCXJldHVybiBGQUlMRUQ7Ci0JY3RsciA9ICgqYyktPmN0bHI7CisJY3RsciA9IGMtPmN0bHI7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogYWJvcnRpbmcgdGFyZHkgU0NTSSBjbWRcbiIsIGN0bHIpOwogCiAJLyogZmluZCB0aGUgY29tbWFuZCB0byBiZSBhYm9ydGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuaCBiL2RyaXZlcnMvYmxvY2svY2Npc3Nfc2NzaS5oCmluZGV4IDdiNzUwMjQuLjZkNTgyMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3Nfc2NzaS5oCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3Nfc2NzaS5oCkBAIC0yNSwxNiArMjUsMTYgQEAKIAogI2luY2x1ZGUgPHNjc2kvc2NzaWNhbS5oPiAvKiBwb3NzaWJseSBpcnJlbGV2YW50LCBzaW5jZSB3ZSBkb24ndCBzaG93IGRpc2tzICovCiAKLQkJLy8gdGhlIHNjc2kgaWQgb2YgdGhlIGFkYXB0ZXIuLi4KKwkJLyogdGhlIHNjc2kgaWQgb2YgdGhlIGFkYXB0ZXIuLi4gKi8KICNkZWZpbmUgU0VMRl9TQ1NJX0lEIDE1Ci0JCS8vIDE1IGlzIHNvbWV3aGF0IGFyYml0cmFyeSwgc2luY2UgdGhlIHNjc2ktMiBidXMKLQkJLy8gdGhhdCdzIHByZXNlbnRlZCBieSB0aGUgZHJpdmVyIHRvIHRoZSBPUyBpcwotCQkvLyBmYWJyaWNhdGVkLiAgVGhlICJyZWFsIiBzY3NpLTMgYnVzIHRoZSAKLQkJLy8gaGFyZHdhcmUgcHJlc2VudHMgaXMgZmFicmljYXRlZCB0b28uCi0JCS8vIFRoZSBhY3R1YWwsIGhvbmVzdC10by1nb29kbmVzcyBwaHlzaWNhbAotCQkvLyBidXMgdGhhdCB0aGUgZGV2aWNlcyBhcmUgYXR0YWNoZWQgdG8gaXMgbm90IAotCQkvLyBhZGRyZXNzaWJsZSBuYXRpdmVseSwgYW5kIG1heSBpbiBmYWN0IHR1cm4KLQkJLy8gb3V0IHRvIGJlIG5vdCBzY3NpIGF0IGFsbC4KKwkJLyogMTUgaXMgc29tZXdoYXQgYXJiaXRyYXJ5LCBzaW5jZSB0aGUgc2NzaS0yIGJ1cworCQkgICB0aGF0J3MgcHJlc2VudGVkIGJ5IHRoZSBkcml2ZXIgdG8gdGhlIE9TIGlzCisJCSAgIGZhYnJpY2F0ZWQuICBUaGUgInJlYWwiIHNjc2ktMyBidXMgdGhlCisJCSAgIGhhcmR3YXJlIHByZXNlbnRzIGlzIGZhYnJpY2F0ZWQgdG9vLgorCQkgICBUaGUgYWN0dWFsLCBob25lc3QtdG8tZ29vZG5lc3MgcGh5c2ljYWwKKwkJICAgYnVzIHRoYXQgdGhlIGRldmljZXMgYXJlIGF0dGFjaGVkIHRvIGlzIG5vdAorCQkgICBhZGRyZXNzaWJsZSBuYXRpdmVseSwgYW5kIG1heSBpbiBmYWN0IHR1cm4KKwkJICAgb3V0IHRvIGJlIG5vdCBzY3NpIGF0IGFsbC4gKi8KIAogI2RlZmluZSBTQ1NJX0NDSVNTX0NBTl9RVUVVRSAyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYyBiL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYwppbmRleCA2NDIyNjUxLi45MWQxMTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKKysrIGIvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCkBAIC00NDgsMTEgKzQ0OCw4IEBACiAJCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQocSwgaGJhW2ldLT5wY2lfZGV2LT5kbWFfbWFzayk7CiAKIAkvKiBUaGlzIGlzIGEgaGFyZHdhcmUgaW1wb3NlZCBsaW1pdC4gKi8KLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIFNHX01BWCk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxLCBTR19NQVgpOwogCi0JLyogVGhpcyBpcyBhIGRyaXZlciBsaW1pdCBhbmQgY291bGQgYmUgZWxpbWluYXRlZC4gKi8KLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSwgU0dfTUFYKTsKLQkKIAlpbml0X3RpbWVyKCZoYmFbaV0tPnRpbWVyKTsKIAloYmFbaV0tPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSURBX1RJTUVSOwogCWhiYVtpXS0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhiYVtpXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX21haW4uYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX21haW4uYwppbmRleCBlODk4YWQ5Li5hYjg3MWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9tYWluLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbWFpbi5jCkBAIC0yOTczLDcgKzI5NzMsNiBAQAogCQlnb3RvIG91dF9ub19xOwogCW1kZXYtPnJxX3F1ZXVlID0gcTsKIAlxLT5xdWV1ZWRhdGEgICA9IG1kZXY7Ci0JYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUocSwgRFJCRF9NQVhfU0VHTUVOVF9TSVpFKTsKIAogCWRpc2sgPSBhbGxvY19kaXNrKDEpOwogCWlmICghZGlzaykKQEAgLTI5OTcsNiArMjk5Niw3IEBACiAJcS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZGF0YSA9IG1kZXY7CiAKIAlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KHEsIGRyYmRfbWFrZV9yZXF1ZXN0XzI2KTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShxLCBEUkJEX01BWF9TRUdNRU5UX1NJWkUpOwogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQocSwgQkxLX0JPVU5DRV9BTlkpOwogCWJsa19xdWV1ZV9tZXJnZV9idmVjKHEsIGRyYmRfbWVyZ2VfYnZlYyk7CiAJcS0+cXVldWVfbG9jayA9ICZtZGV2LT5yZXFfbG9jazsgLyogbmVlZGVkIHNpbmNlIHdlIHVzZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMKaW5kZXggMTI5MmUwNi4uNGRmM2I0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYworKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jCkBAIC03MDksOSArNzA5LDggQEAKIAogCW1heF9zZWdfcyA9IG1pbihxdWV1ZV9tYXhfc2VjdG9ycyhiKSAqIHF1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShiKSwgbWF4X3NlZ19zKTsKIAotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCBtYXhfc2VnX3MgPj4gOSk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEsIG1heF9zZWdtZW50cyA/IG1heF9zZWdtZW50cyA6IE1BWF9QSFlTX1NFR01FTlRTKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIG1heF9zZWdtZW50cyA/IG1heF9zZWdtZW50cyA6IE1BWF9IV19TRUdNRU5UUyk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHEsIG1heF9zZWdfcyA+PiA5KTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHEsIG1heF9zZWdtZW50cyA/IG1heF9zZWdtZW50cyA6IEJMS19NQVhfU0VHTUVOVFMpOwogCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHEsIG1heF9zZWdfcyk7CiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShxLCA1MTIpOwogCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KHEsIFBBR0VfU0laRS0xKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jCmluZGV4IGYyMmE1MjguLmQwNjVjNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYwpAQCAtMTIyNCw3ICsxMjI0LDcgQEAKIAllcG9jaCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkcmJkX2Vwb2NoKSwgR0ZQX05PSU8pOwogCWlmICghZXBvY2gpIHsKIAkJZGV2X3dhcm4oREVWLCAiQWxsb2NhdGlvbiBvZiBhbiBlcG9jaCBmYWlsZWQsIHNsb3dpbmcgZG93blxuIik7Ci0JCWlzc3VlX2ZsdXNoID0gIXRlc3RfYW5kX3NldF9iaXQoREVfQkFSUklFUl9JTl9ORVhUX0VQT0NIX0lTU1VFRCwgJmVwb2NoLT5mbGFncyk7CisJCWlzc3VlX2ZsdXNoID0gIXRlc3RfYW5kX3NldF9iaXQoREVfQkFSUklFUl9JTl9ORVhUX0VQT0NIX0lTU1VFRCwgJm1kZXYtPmN1cnJlbnRfZXBvY2gtPmZsYWdzKTsKIAkJZHJiZF93YWl0X2VlX2xpc3RfZW1wdHkobWRldiwgJm1kZXYtPmFjdGl2ZV9lZSk7CiAJCWlmIChpc3N1ZV9mbHVzaCkgewogCQkJcnYgPSBkcmJkX2ZsdXNoX2FmdGVyX2Vwb2NoKG1kZXYsIG1kZXYtPmN1cnJlbnRfZXBvY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggMzI2NmI0Zi4uYjliMTE3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC00MjM0LDcgKzQyMzQsNyBAQAogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bnJlZ19kcml2ZXI7CiAJfQotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhmbG9wcHlfcXVldWUsIDY0KTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoZmxvcHB5X3F1ZXVlLCA2NCk7CiAKIAlibGtfcmVnaXN0ZXJfcmVnaW9uKE1LREVWKEZMT1BQWV9NQUpPUiwgMCksIDI1NiwgVEhJU19NT0RVTEUsCiAJCQkgICAgZmxvcHB5X2ZpbmQsIE5VTEwsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9oZC5jIGIvZHJpdmVycy9ibG9jay9oZC5jCmluZGV4IGQ1Y2RjZTAuLjUxMTZjNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svaGQuYworKysgYi9kcml2ZXJzL2Jsb2NrL2hkLmMKQEAgLTcxOSw3ICs3MTksNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMoaGRfcXVldWUsIDI1NSk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKGhkX3F1ZXVlLCAyNTUpOwogCWluaXRfdGltZXIoJmRldmljZV90aW1lcik7CiAJZGV2aWNlX3RpbWVyLmZ1bmN0aW9uID0gaGRfdGltZXNfb3V0OwogCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoaGRfcXVldWUsIDUxMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL21nX2Rpc2suYyBiL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCmluZGV4IDAyYjI1ODMuLjU0MTZjOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCisrKyBiL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCkBAIC05ODAsNyArOTgwLDcgQEAKIAkJCQlfX2Z1bmNfXywgX19MSU5FX18pOwogCQlnb3RvIHByb2JlX2Vycl82OwogCX0KLQlibGtfcXVldWVfbWF4X3NlY3RvcnMoaG9zdC0+YnJlcSwgTUdfTUFYX1NFQ1RTKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoaG9zdC0+YnJlcSwgTUdfTUFYX1NFQ1RTKTsKIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKGhvc3QtPmJyZXEsIE1HX1NFQ1RPUl9TSVpFKTsKIAogCWluaXRfdGltZXIoJmhvc3QtPnRpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZC5jCmluZGV4IDU2OWUzOWUuLmU3MTJjZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGQuYwpAQCAtOTA2LDcgKzkwNiw3IEBACiAJaWYgKCFwZF9xdWV1ZSkKIAkJZ290byBvdXQxOwogCi0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHBkX3F1ZXVlLCBjbHVzdGVyKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocGRfcXVldWUsIGNsdXN0ZXIpOwogCiAJaWYgKHJlZ2lzdGVyX2Jsa2RldihtYWpvciwgbmFtZSkpCiAJCWdvdG8gb3V0MjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jCmluZGV4IGVhNTRlYTMuLmRkYjRmOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYwpAQCAtOTU2LDggKzk1Niw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhwZl9xdWV1ZSwgY2x1c3Rlcik7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhwZl9xdWV1ZSwgY2x1c3Rlcik7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhwZl9xdWV1ZSwgY2x1c3Rlcik7CiAKIAlmb3IgKHBmID0gdW5pdHMsIHVuaXQgPSAwOyB1bml0IDwgUEZfVU5JVFM7IHBmKyssIHVuaXQrKykgewogCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHBmLT5kaXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwppbmRleCAyZGRmMDNhLi5iNzI5MzViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCXBrdF9rb2JqX3JlbW92ZShwZC0+a29ial9zdGF0KTsKIAlwa3Rfa29ial9yZW1vdmUocGQtPmtvYmpfd3F1ZXVlKTsKIAlpZiAoY2xhc3NfcGt0Y2R2ZCkKLQkJZGV2aWNlX2Rlc3Ryb3koY2xhc3NfcGt0Y2R2ZCwgcGQtPnBrdF9kZXYpOworCQlkZXZpY2VfdW5yZWdpc3RlcihwZC0+ZGV2KTsKIH0KIAogCkBAIC01NjksNiArNTY5LDcgQEAKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmcGt0LT5sb2NrKTsKKwliaW9fbGlzdF9pbml0KCZwa3QtPm9yaWdfYmlvcyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZnJhbWVzOyBpKyspIHsKIAkJc3RydWN0IGJpbyAqYmlvID0gcGt0X2Jpb19hbGxvYygxKTsKQEAgLTcyMSw0MyArNzIyLDYgQEAKIH0KIAogLyoKLSAqIEFkZCBhIGJpbyB0byBhIHNpbmdsZSBsaW5rZWQgbGlzdCBkZWZpbmVkIGJ5IGl0cyBoZWFkIGFuZCB0YWlsIHBvaW50ZXJzLgotICovCi1zdGF0aWMgdm9pZCBwa3RfYWRkX2xpc3RfbGFzdChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKipsaXN0X2hlYWQsIHN0cnVjdCBiaW8gKipsaXN0X3RhaWwpCi17Ci0JYmlvLT5iaV9uZXh0ID0gTlVMTDsKLQlpZiAoKmxpc3RfdGFpbCkgewotCQlCVUdfT04oKCpsaXN0X2hlYWQpID09IE5VTEwpOwotCQkoKmxpc3RfdGFpbCktPmJpX25leHQgPSBiaW87Ci0JCSgqbGlzdF90YWlsKSA9IGJpbzsKLQl9IGVsc2UgewotCQlCVUdfT04oKCpsaXN0X2hlYWQpICE9IE5VTEwpOwotCQkoKmxpc3RfaGVhZCkgPSBiaW87Ci0JCSgqbGlzdF90YWlsKSA9IGJpbzsKLQl9Ci19Ci0KLS8qCi0gKiBSZW1vdmUgYW5kIHJldHVybiB0aGUgZmlyc3QgYmlvIGZyb20gYSBzaW5nbGUgbGlua2VkIGxpc3QgZGVmaW5lZCBieSBpdHMKLSAqIGhlYWQgYW5kIHRhaWwgcG9pbnRlcnMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJpbyAqcGt0X2dldF9saXN0X2ZpcnN0KHN0cnVjdCBiaW8gKipsaXN0X2hlYWQsIHN0cnVjdCBiaW8gKipsaXN0X3RhaWwpCi17Ci0Jc3RydWN0IGJpbyAqYmlvOwotCi0JaWYgKCpsaXN0X2hlYWQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQliaW8gPSAqbGlzdF9oZWFkOwotCSpsaXN0X2hlYWQgPSBiaW8tPmJpX25leHQ7Ci0JaWYgKCpsaXN0X2hlYWQgPT0gTlVMTCkKLQkJKmxpc3RfdGFpbCA9IE5VTEw7Ci0KLQliaW8tPmJpX25leHQgPSBOVUxMOwotCXJldHVybiBiaW87Ci19Ci0KLS8qCiAgKiBTZW5kIGEgcGFja2V0X2NvbW1hbmQgdG8gdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlIGFuZAogICogd2FpdCBmb3IgY29tcGxldGlvbi4KICAqLwpAQCAtODc2LDEzICs4NDAsMTAgQEAKIHN0YXRpYyB2b2lkIHBrdF9xdWV1ZV9iaW8oc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCwgc3RydWN0IGJpbyAqYmlvKQogewogCXNwaW5fbG9jaygmcGQtPmlvc2NoZWQubG9jayk7Ci0JaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQpIHsKLQkJcGt0X2FkZF9saXN0X2xhc3QoYmlvLCAmcGQtPmlvc2NoZWQucmVhZF9xdWV1ZSwKLQkJCQkgICZwZC0+aW9zY2hlZC5yZWFkX3F1ZXVlX3RhaWwpOwotCX0gZWxzZSB7Ci0JCXBrdF9hZGRfbGlzdF9sYXN0KGJpbywgJnBkLT5pb3NjaGVkLndyaXRlX3F1ZXVlLAotCQkJCSAgJnBkLT5pb3NjaGVkLndyaXRlX3F1ZXVlX3RhaWwpOwotCX0KKwlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCkKKwkJYmlvX2xpc3RfYWRkKCZwZC0+aW9zY2hlZC5yZWFkX3F1ZXVlLCBiaW8pOworCWVsc2UKKwkJYmlvX2xpc3RfYWRkKCZwZC0+aW9zY2hlZC53cml0ZV9xdWV1ZSwgYmlvKTsKIAlzcGluX3VubG9jaygmcGQtPmlvc2NoZWQubG9jayk7CiAKIAlhdG9taWNfc2V0KCZwZC0+aW9zY2hlZC5hdHRlbnRpb24sIDEpOwpAQCAtOTE3LDggKzg3OCw4IEBACiAJCWludCByZWFkc19xdWV1ZWQsIHdyaXRlc19xdWV1ZWQ7CiAKIAkJc3Bpbl9sb2NrKCZwZC0+aW9zY2hlZC5sb2NrKTsKLQkJcmVhZHNfcXVldWVkID0gKHBkLT5pb3NjaGVkLnJlYWRfcXVldWUgIT0gTlVMTCk7Ci0JCXdyaXRlc19xdWV1ZWQgPSAocGQtPmlvc2NoZWQud3JpdGVfcXVldWUgIT0gTlVMTCk7CisJCXJlYWRzX3F1ZXVlZCA9ICFiaW9fbGlzdF9lbXB0eSgmcGQtPmlvc2NoZWQucmVhZF9xdWV1ZSk7CisJCXdyaXRlc19xdWV1ZWQgPSAhYmlvX2xpc3RfZW1wdHkoJnBkLT5pb3NjaGVkLndyaXRlX3F1ZXVlKTsKIAkJc3Bpbl91bmxvY2soJnBkLT5pb3NjaGVkLmxvY2spOwogCiAJCWlmICghcmVhZHNfcXVldWVkICYmICF3cml0ZXNfcXVldWVkKQpAQCAtOTI3LDcgKzg4OCw3IEBACiAJCWlmIChwZC0+aW9zY2hlZC53cml0aW5nKSB7CiAJCQlpbnQgbmVlZF93cml0ZV9zZWVrID0gMTsKIAkJCXNwaW5fbG9jaygmcGQtPmlvc2NoZWQubG9jayk7Ci0JCQliaW8gPSBwZC0+aW9zY2hlZC53cml0ZV9xdWV1ZTsKKwkJCWJpbyA9IGJpb19saXN0X3BlZWsoJnBkLT5pb3NjaGVkLndyaXRlX3F1ZXVlKTsKIAkJCXNwaW5fdW5sb2NrKCZwZC0+aW9zY2hlZC5sb2NrKTsKIAkJCWlmIChiaW8gJiYgKGJpby0+Ymlfc2VjdG9yID09IHBkLT5pb3NjaGVkLmxhc3Rfd3JpdGUpKQogCQkJCW5lZWRfd3JpdGVfc2VlayA9IDA7CkBAIC05NTAsMTMgKzkxMSwxMCBAQAogCQl9CiAKIAkJc3Bpbl9sb2NrKCZwZC0+aW9zY2hlZC5sb2NrKTsKLQkJaWYgKHBkLT5pb3NjaGVkLndyaXRpbmcpIHsKLQkJCWJpbyA9IHBrdF9nZXRfbGlzdF9maXJzdCgmcGQtPmlvc2NoZWQud3JpdGVfcXVldWUsCi0JCQkJCQkgJnBkLT5pb3NjaGVkLndyaXRlX3F1ZXVlX3RhaWwpOwotCQl9IGVsc2UgewotCQkJYmlvID0gcGt0X2dldF9saXN0X2ZpcnN0KCZwZC0+aW9zY2hlZC5yZWFkX3F1ZXVlLAotCQkJCQkJICZwZC0+aW9zY2hlZC5yZWFkX3F1ZXVlX3RhaWwpOwotCQl9CisJCWlmIChwZC0+aW9zY2hlZC53cml0aW5nKQorCQkJYmlvID0gYmlvX2xpc3RfcG9wKCZwZC0+aW9zY2hlZC53cml0ZV9xdWV1ZSk7CisJCWVsc2UKKwkJCWJpbyA9IGJpb19saXN0X3BvcCgmcGQtPmlvc2NoZWQucmVhZF9xdWV1ZSk7CiAJCXNwaW5fdW5sb2NrKCZwZC0+aW9zY2hlZC5sb2NrKTsKIAogCQlpZiAoIWJpbykKQEAgLTk5MiwxNCArOTUwLDE0IEBACiBzdGF0aWMgaW50IHBrdF9zZXRfc2VnbWVudF9tZXJnaW5nKHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCWlmICgocGQtPnNldHRpbmdzLnNpemUgPDwgOSkgLyBDRF9GUkFNRVNJWkUKLQkgICAgPD0gcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSkpIHsKKwkgICAgPD0gcXVldWVfbWF4X3NlZ21lbnRzKHEpKSB7CiAJCS8qCiAJCSAqIFRoZSBjZHJvbSBkZXZpY2UgY2FuIGhhbmRsZSBvbmUgc2VnbWVudC9mcmFtZQogCQkgKi8KIAkJY2xlYXJfYml0KFBBQ0tFVF9NRVJHRV9TRUdTLCAmcGQtPmZsYWdzKTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmICgocGQtPnNldHRpbmdzLnNpemUgPDwgOSkgLyBQQUdFX1NJWkUKLQkJICAgPD0gcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSkpIHsKKwkJICAgPD0gcXVldWVfbWF4X3NlZ21lbnRzKHEpKSB7CiAJCS8qCiAJCSAqIFdlIGNhbiBoYW5kbGUgdGhpcyBjYXNlIGF0IHRoZSBleHBlbnNlIG9mIHNvbWUgZXh0cmEgbWVtb3J5CiAJCSAqIGNvcGllcyBkdXJpbmcgd3JpdGUgb3BlcmF0aW9ucwpAQCAtMTExNCw3ICsxMDcyLDcgQEAKIAlpbnQgZjsKIAljaGFyIHdyaXR0ZW5bUEFDS0VUX01BWF9TSVpFXTsKIAotCUJVR19PTighcGt0LT5vcmlnX2Jpb3MpOworCUJVR19PTihiaW9fbGlzdF9lbXB0eSgmcGt0LT5vcmlnX2Jpb3MpKTsKIAogCWF0b21pY19zZXQoJnBrdC0+aW9fd2FpdCwgMCk7CiAJYXRvbWljX3NldCgmcGt0LT5pb19lcnJvcnMsIDApOwpAQCAtMTEyNCw3ICsxMDgyLDcgQEAKIAkgKi8KIAltZW1zZXQod3JpdHRlbiwgMCwgc2l6ZW9mKHdyaXR0ZW4pKTsKIAlzcGluX2xvY2soJnBrdC0+bG9jayk7Ci0JZm9yIChiaW8gPSBwa3QtPm9yaWdfYmlvczsgYmlvOyBiaW8gPSBiaW8tPmJpX25leHQpIHsKKwliaW9fbGlzdF9mb3JfZWFjaChiaW8sICZwa3QtPm9yaWdfYmlvcykgewogCQlpbnQgZmlyc3RfZnJhbWUgPSAoYmlvLT5iaV9zZWN0b3IgLSBwa3QtPnNlY3RvcikgLyAoQ0RfRlJBTUVTSVpFID4+IDkpOwogCQlpbnQgbnVtX2ZyYW1lcyA9IGJpby0+Ymlfc2l6ZSAvIENEX0ZSQU1FU0laRTsKIAkJcGQtPnN0YXRzLnNlY3NfdyArPSBudW1fZnJhbWVzICogKENEX0ZSQU1FU0laRSA+PiA5KTsKQEAgLTEzNjMsNyArMTMyMSw3IEBACiAJCQlicmVhazsKIAkJcGt0X3JidHJlZV9lcmFzZShwZCwgbm9kZSk7CiAJCXNwaW5fbG9jaygmcGt0LT5sb2NrKTsKLQkJcGt0X2FkZF9saXN0X2xhc3QoYmlvLCAmcGt0LT5vcmlnX2Jpb3MsICZwa3QtPm9yaWdfYmlvc190YWlsKTsKKwkJYmlvX2xpc3RfYWRkKCZwa3QtPm9yaWdfYmlvcywgYmlvKTsKIAkJcGt0LT53cml0ZV9zaXplICs9IGJpby0+Ymlfc2l6ZSAvIENEX0ZSQU1FU0laRTsKIAkJc3Bpbl91bmxvY2soJnBrdC0+bG9jayk7CiAJfQpAQCAtMTQwOSw3ICsxMzY3LDcgQEAKIAkgKi8KIAlmcmFtZXNfd3JpdGUgPSAwOwogCXNwaW5fbG9jaygmcGt0LT5sb2NrKTsKLQlmb3IgKGJpbyA9IHBrdC0+b3JpZ19iaW9zOyBiaW87IGJpbyA9IGJpby0+YmlfbmV4dCkgeworCWJpb19saXN0X2Zvcl9lYWNoKGJpbywgJnBrdC0+b3JpZ19iaW9zKSB7CiAJCWludCBzZWdtZW50ID0gYmlvLT5iaV9pZHg7CiAJCWludCBzcmNfb2ZmcyA9IDA7CiAJCWludCBmaXJzdF9mcmFtZSA9IChiaW8tPmJpX3NlY3RvciAtIHBrdC0+c2VjdG9yKSAvIChDRF9GUkFNRVNJWkUgPj4gOSk7CkBAIC0xNDcyLDIwICsxNDMwLDE0IEBACiAKIHN0YXRpYyB2b2lkIHBrdF9maW5pc2hfcGFja2V0KHN0cnVjdCBwYWNrZXRfZGF0YSAqcGt0LCBpbnQgdXB0b2RhdGUpCiB7Ci0Jc3RydWN0IGJpbyAqYmlvLCAqbmV4dDsKKwlzdHJ1Y3QgYmlvICpiaW87CiAKIAlpZiAoIXVwdG9kYXRlKQogCQlwa3QtPmNhY2hlX3ZhbGlkID0gMDsKIAogCS8qIEZpbmlzaCBhbGwgYmlvcyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcGFja2V0ICovCi0JYmlvID0gcGt0LT5vcmlnX2Jpb3M7Ci0Jd2hpbGUgKGJpbykgewotCQluZXh0ID0gYmlvLT5iaV9uZXh0OwotCQliaW8tPmJpX25leHQgPSBOVUxMOworCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZwa3QtPm9yaWdfYmlvcykpKQogCQliaW9fZW5kaW8oYmlvLCB1cHRvZGF0ZSA/IDAgOiAtRUlPKTsKLQkJYmlvID0gbmV4dDsKLQl9Ci0JcGt0LT5vcmlnX2Jpb3MgPSBwa3QtPm9yaWdfYmlvc190YWlsID0gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgcGt0X3J1bl9zdGF0ZV9tYWNoaW5lKHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQsIHN0cnVjdCBwYWNrZXRfZGF0YSAqcGt0KQpAQCAtMjM2MCw3ICsyMzEyLDcgQEAKIAkJICogZXZlbiBpZiB0aGUgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIHRoZSBwYWNrZXQgc2l6ZS4KIAkJICovCiAJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7Ci0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCBwZC0+c2V0dGluZ3Muc2l6ZSk7CisJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhxLCBwZC0+c2V0dGluZ3Muc2l6ZSk7CiAJCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAkJc2V0X2JpdChQQUNLRVRfV1JJVEFCTEUsICZwZC0+ZmxhZ3MpOwogCX0gZWxzZSB7CkBAIC0yNTY3LDggKzI1MTksNyBAQAogCQkJc3Bpbl9sb2NrKCZwa3QtPmxvY2spOwogCQkJaWYgKChwa3QtPnN0YXRlID09IFBBQ0tFVF9XQUlUSU5HX1NUQVRFKSB8fAogCQkJICAgIChwa3QtPnN0YXRlID09IFBBQ0tFVF9SRUFEX1dBSVRfU1RBVEUpKSB7Ci0JCQkJcGt0X2FkZF9saXN0X2xhc3QoYmlvLCAmcGt0LT5vcmlnX2Jpb3MsCi0JCQkJCQkgICZwa3QtPm9yaWdfYmlvc190YWlsKTsKKwkJCQliaW9fbGlzdF9hZGQoJnBrdC0+b3JpZ19iaW9zLCBiaW8pOwogCQkJCXBrdC0+d3JpdGVfc2l6ZSArPSBiaW8tPmJpX3NpemUgLyBDRF9GUkFNRVNJWkU7CiAJCQkJaWYgKChwa3QtPndyaXRlX3NpemUgPj0gcGt0LT5mcmFtZXMpICYmCiAJCQkJICAgIChwa3QtPnN0YXRlID09IFBBQ0tFVF9XQUlUSU5HX1NUQVRFKSkgewpAQCAtMjY2Miw3ICsyNjEzLDcgQEAKIAogCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QocSwgcGt0X21ha2VfcmVxdWVzdCk7CiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShxLCBDRF9GUkFNRVNJWkUpOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCBQQUNLRVRfTUFYX1NFQ1RPUlMpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhxLCBQQUNLRVRfTUFYX1NFQ1RPUlMpOwogCWJsa19xdWV1ZV9tZXJnZV9idmVjKHEsIHBrdF9tZXJnZV9idmVjKTsKIAlxLT5xdWV1ZWRhdGEgPSBwZDsKIH0KQEAgLTI4OTgsNiArMjg0OSw4IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcGQtPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZwZC0+aW9zY2hlZC5sb2NrKTsKKwliaW9fbGlzdF9pbml0KCZwZC0+aW9zY2hlZC5yZWFkX3F1ZXVlKTsKKwliaW9fbGlzdF9pbml0KCZwZC0+aW9zY2hlZC53cml0ZV9xdWV1ZSk7CiAJc3ByaW50ZihwZC0+bmFtZSwgRFJJVkVSX05BTUUiJWQiLCBpZHgpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBkLT53cXVldWUpOwogCXBkLT5iaW9fcXVldWUgPSBSQl9ST09UOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wczNkaXNrLmMgYi9kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYwppbmRleCAwM2ExMzBkLi5iYzk1NDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYworKysgYi9kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYwpAQCAtNDc0LDcgKzQ3NCw3IEBACiAKIAlibGtfcXVldWVfYm91bmNlX2xpbWl0KHF1ZXVlLCBCTEtfQk9VTkNFX0hJR0gpOwogCi0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHF1ZXVlLCBkZXYtPmJvdW5jZV9zaXplID4+IDkpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhxdWV1ZSwgZGV2LT5ib3VuY2Vfc2l6ZSA+PiA5KTsKIAlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShxdWV1ZSwgLTFVTCk7CiAJYmxrX3F1ZXVlX2RtYV9hbGlnbm1lbnQocXVldWUsIGRldi0+YmxrX3NpemUtMSk7CiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShxdWV1ZSwgZGV2LT5ibGtfc2l6ZSk7CkBAIC00ODIsOCArNDgyLDcgQEAKIAlibGtfcXVldWVfb3JkZXJlZChxdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTl9GTFVTSCwKIAkJCSAgcHMzZGlza19wcmVwYXJlX2ZsdXNoKTsKIAotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxdWV1ZSwgLTEpOwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocXVldWUsIC0xKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHF1ZXVlLCAtMSk7CiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUocXVldWUsIGRldi0+Ym91bmNlX3NpemUpOwogCiAJZ2VuZGlzayA9IGFsbG9jX2Rpc2soUFMzRElTS19NSU5PUlMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wczN2cmFtLmMgYi9kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYwppbmRleCAxZmI2YzMxLi5lNDQ2MDgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYworKysgYi9kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYwpAQCAtNzUxLDEwICs3NTEsOSBAQAogCXByaXYtPnF1ZXVlID0gcXVldWU7CiAJcXVldWUtPnF1ZXVlZGF0YSA9IGRldjsKIAlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KHF1ZXVlLCBwczN2cmFtX21ha2VfcmVxdWVzdCk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHF1ZXVlLCBNQVhfUEhZU19TRUdNRU5UUyk7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxdWV1ZSwgTUFYX0hXX1NFR01FTlRTKTsKLQlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShxdWV1ZSwgTUFYX1NFR01FTlRfU0laRSk7Ci0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHF1ZXVlLCBTQUZFX01BWF9TRUNUT1JTKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHF1ZXVlLCBCTEtfTUFYX1NFR01FTlRTKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShxdWV1ZSwgQkxLX01BWF9TRUdNRU5UX1NJWkUpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhxdWV1ZSwgQkxLX1NBRkVfTUFYX1NFQ1RPUlMpOwogCiAJZ2VuZGlzayA9IGFsbG9jX2Rpc2soMSk7CiAJaWYgKCFnZW5kaXNrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N1bnZkYy5jIGIvZHJpdmVycy9ibG9jay9zdW52ZGMuYwppbmRleCA0MTFmMDY0Li40OGU4ZmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N1bnZkYy5jCisrKyBiL2RyaXZlcnMvYmxvY2svc3VudmRjLmMKQEAgLTY5MSw5ICs2OTEsOCBAQAogCiAJcG9ydC0+ZGlzayA9IGc7CiAKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIHBvcnQtPnJpbmdfY29va2llcyk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEsIHBvcnQtPnJpbmdfY29va2llcyk7Ci0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHEsIHBvcnQtPm1heF94ZmVyX3NpemUpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocSwgcG9ydC0+cmluZ19jb29raWVzKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocSwgcG9ydC0+bWF4X3hmZXJfc2l6ZSk7CiAJZy0+bWFqb3IgPSB2ZGNfbWFqb3I7CiAJZy0+Zmlyc3RfbWlub3IgPSBwb3J0LT52aW8udmRldi0+ZGV2X25vIDw8IFBBUlRJVElPTl9TSElGVDsKIAlzdHJjcHkoZy0+ZGlza19uYW1lLCBwb3J0LT5kaXNrX25hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltLmMgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwppbmRleCA4ZjU2OWUzLi44MjFjMjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYworKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwpAQCAtODY0LDcgKzg2NCw3IEBACiAJc3RydWN0IHN3aW1fcHJpdiAqc3dkOwogCWludCByZXQ7CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKGRldiwgSU9SRVNPVVJDRV9NRU0sICJzd2ltLXJlZ3MiKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CkBAIC05NDIsNyArOTQyLDcgQEAKIAogCWlvdW5tYXAoc3dkLT5iYXNlKTsKIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUoZGV2LCBJT1JFU09VUkNFX01FTSwgInN3aW0tcmVncyIpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzKQogCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zeDguYyBiL2RyaXZlcnMvYmxvY2svc3g4LmMKaW5kZXggYTdjNDE4NC4uYjcwZjBmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zeDguYworKysgYi9kcml2ZXJzL2Jsb2NrL3N4OC5jCkBAIC00MDksNyArNDA5LDcgQEAKIHN0YXRpYyB2b2lkIGNhcm1fcmVtb3ZlX29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogc3RhdGljIGludCBjYXJtX2JkZXZfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNhcm1fcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNhcm1fcGNpX3RibFtdID0gewogCXsgUENJX1ZFTkRPUl9JRF9QUk9NSVNFLCAweDgwMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1BST01JU0UsIDB4ODAwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgfSwKIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KQEAgLTE1MTgsOCArMTUxOCw3IEBACiAJCQlicmVhazsKIAkJfQogCQlkaXNrLT5xdWV1ZSA9IHE7Ci0JCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgQ0FSTV9NQVhfUkVRX1NHKTsKLQkJYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEsIENBUk1fTUFYX1JFUV9TRyk7CisJCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocSwgQ0FSTV9NQVhfUkVRX1NHKTsKIAkJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkocSwgQ0FSTV9TR19CT1VOREFSWSk7CiAKIAkJcS0+cXVldWVkYXRhID0gcG9ydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWIuYyBiL2RyaXZlcnMvYmxvY2svdWIuYwppbmRleCBjNzM5YjIwLi4yZTg4OTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3ViLmMKKysrIGIvZHJpdmVycy9ibG9jay91Yi5jCkBAIC0zOTMsNyArMzkzLDcgQEAKICNkZWZpbmUgdWJfdXNiX2lkcyAgdXNiX3N0b3JhZ2VfdXNiX2lkcwogI2Vsc2UKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHViX3VzYl9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1Yl91c2JfaWRzW10gPSB7CiAJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfU0NTSSwgVVNfUFJfQlVMSykgfSwKIAl7IH0KIH07CkBAIC0yMzIwLDEwICsyMzIwLDkgQEAKIAlkaXNrLT5xdWV1ZSA9IHE7CiAKIAlibGtfcXVldWVfYm91bmNlX2xpbWl0KHEsIEJMS19CT1VOQ0VfSElHSCk7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxLCBVQl9NQVhfUkVRX1NHKTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSwgVUJfTUFYX1JFUV9TRyk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxLCBVQl9NQVhfUkVRX1NHKTsKIAlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShxLCAweGZmZmZmZmZmKTsJLyogRHViaW91cy4gKi8KLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocSwgVUJfTUFYX1NFQ1RPUlMpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhxLCBVQl9NQVhfU0VDVE9SUyk7CiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShxLCBsdW4tPmNhcGFjaXR5LmJzaXplKTsKIAogCWx1bi0+ZGlzayA9IGRpc2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYyBiL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jCmluZGV4IGE4YzhiNTYuLjc4OGQ5MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jCkBAIC0yOCw2ICsyOCw5IEBACiAgKiBBbGwgZGlzayBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgYnkgc2VuZGluZyBtZXNzYWdlcyBiYWNrIGFuZCBmb3J0aCB0bwogICogdGhlIE9TLzQwMCBwYXJ0aXRpb24uCiAgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSAidmlvZDogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTYzLDkgKzY2LDYgQEAKIAogI2RlZmluZSBWSU9EX1ZFUlMJCSIxLjY0IgogCi0jZGVmaW5lIFZJT0RfS0VSTl9XQVJOSU5HCUtFUk5fV0FSTklORyAidmlvZDogIgotI2RlZmluZSBWSU9EX0tFUk5fSU5GTwkJS0VSTl9JTkZPICJ2aW9kOiAiCi0KIGVudW0gewogCVBBUlRJVElPTl9TSElGVCA9IDMsCiAJTUFYX0RJU0tOTyA9IEhWTUFYQVJDSElURUNURURWSVJUVUFMRElTS1MsCkBAIC0xNTYsNyArMTU2LDcgQEAKIAkJCSgodTY0KURFVklDRV9OTyhkKSA8PCA0OCkgfCAoKHU2NClmbGFncyA8PCAzMiksCiAJCQkwLCAwLCAwKTsKIAlpZiAoaHZyYyAhPSAwKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORyAiSFYgb3BlbiBmYWlsZWQgJWRcbiIsIChpbnQpaHZyYyk7CisJCXByX3dhcm5pbmcoIkhWIG9wZW4gZmFpbGVkICVkXG4iLCAoaW50KWh2cmMpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTE2Nyw5ICsxNjcsOCBAQAogCQljb25zdCBzdHJ1Y3QgdmlvX2Vycm9yX2VudHJ5ICplcnIgPQogCQkJdmlvX2xvb2t1cF9yYyh2aW9kYXNkX2Vycl90YWJsZSwgd2Uuc3ViX3Jlc3VsdCk7CiAKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HCi0JCQkJImJhZCByYyBvcGVuaW5nIGRpc2s6ICVkOjB4JTA0eCAoJXMpXG4iLAotCQkJCShpbnQpd2UucmMsIHdlLnN1Yl9yZXN1bHQsIGVyci0+bXNnKTsKKwkJcHJfd2FybmluZygiYmFkIHJjIG9wZW5pbmcgZGlzazogJWQ6MHglMDR4ICglcylcbiIsCisJCQkgICAoaW50KXdlLnJjLCB3ZS5zdWJfcmVzdWx0LCBlcnItPm1zZyk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTk1LDggKzE5NCw3IEBACiAJCQkoKHU2NClERVZJQ0VfTk8oZCkgPDwgNDgpIC8qIHwgKCh1NjQpZmxhZ3MgPDwgMzIpICovLAogCQkJMCwgMCwgMCk7CiAJaWYgKGh2cmMgIT0gMCkKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HICJIViBjbG9zZSBjYWxsIGZhaWxlZCAlZFxuIiwKLQkJCQkoaW50KWh2cmMpOworCQlwcl93YXJuaW5nKCJIViBjbG9zZSBjYWxsIGZhaWxlZCAlZFxuIiwgKGludClodnJjKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg4LDggKzI4Niw3IEBACiAJCWJldmVudCA9IChzdHJ1Y3QgdmlvYmxvY2tscGV2ZW50ICopCiAJCQl2aW9fZ2V0X2V2ZW50X2J1ZmZlcih2aW9tYWpvcnN1YnR5cGVfYmxvY2tpbyk7CiAJCWlmIChiZXZlbnQgPT0gTlVMTCkgewotCQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImVycm9yIGFsbG9jYXRpbmcgZGlzayBldmVudCBidWZmZXJcbiIpOworCQkJcHJfd2FybmluZygiZXJyb3IgYWxsb2NhdGluZyBkaXNrIGV2ZW50IGJ1ZmZlclxuIik7CiAJCQlnb3RvIGVycm9yX3JldDsKIAkJfQogCkBAIC0zMzMsOSArMzMwLDggQEAKIAl9CiAKIAlpZiAoaHZyYyAhPSBIdkxwRXZlbnRfUmNfR29vZCkgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcKLQkJICAgICAgICJlcnJvciBzZW5kaW5nIGRpc2sgZXZlbnQgdG8gT1MvNDAwIChyYyAlZClcbiIsCi0JCSAgICAgICAoaW50KWh2cmMpOworCQlwcl93YXJuaW5nKCJlcnJvciBzZW5kaW5nIGRpc2sgZXZlbnQgdG8gT1MvNDAwIChyYyAlZClcbiIsCisJCQkgICAoaW50KWh2cmMpOwogCQlnb3RvIGVycm9yX3JldDsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlvZGFzZF9zcGlubG9jaywgZmxhZ3MpOwpAQCAtNDAyLDcgKzM5OCw3IEBACiAJCQkoKHU2NClkZXZfbm8gPDwgNDgpIHwgKCh1NjQpZmxhZ3M8PCAzMiksCiAJCQkwLCAwLCAwKTsKIAlpZiAoaHZyYyAhPSAwKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORyAiYmFkIHJjIG9uIEhWIG9wZW4gJWRcbiIsIChpbnQpaHZyYyk7CisJCXByX3dhcm5pbmcoImJhZCByYyBvbiBIViBvcGVuICVkXG4iLCAoaW50KWh2cmMpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTQxNiw5ICs0MTIsOCBAQAogCQlnb3RvIHJldHJ5OwogCX0KIAlpZiAod2UubWF4X2Rpc2sgPiAoTUFYX0RJU0tOTyAtIDEpKSB7Ci0JCXByaW50a19vbmNlKFZJT0RfS0VSTl9JTkZPCi0JCQkiT25seSBleGFtaW5pbmcgdGhlIGZpcnN0ICVkIG9mICVkIGRpc2tzIGNvbm5lY3RlZFxuIiwKLQkJCU1BWF9ESVNLTk8sIHdlLm1heF9kaXNrICsgMSk7CisJCXByaW50a19vbmNlKEtFUk5fSU5GTyBwcl9mbXQoIk9ubHkgZXhhbWluaW5nIHRoZSBmaXJzdCAlZCBvZiAlZCBkaXNrcyBjb25uZWN0ZWRcbiIpLAorCQkJICAgIE1BWF9ESVNLTk8sIHdlLm1heF9kaXNrICsgMSk7CiAJfQogCiAJLyogU2VuZCB0aGUgY2xvc2UgZXZlbnQgdG8gT1MvNDAwLiAgV2UgRE9OJ1QgZXhwZWN0IGEgcmVzcG9uc2UgKi8KQEAgLTQzMiwxNyArNDI3LDE1IEBACiAJCQkoKHU2NClkZXZfbm8gPDwgNDgpIHwgKCh1NjQpZmxhZ3MgPDwgMzIpLAogCQkJMCwgMCwgMCk7CiAJaWYgKGh2cmMgIT0gMCkgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcKLQkJICAgICAgICJiYWQgcmMgc2VuZGluZyBldmVudCB0byBPUy80MDAgJWRcbiIsIChpbnQpaHZyYyk7CisJCXByX3dhcm5pbmcoImJhZCByYyBzZW5kaW5nIGV2ZW50IHRvIE9TLzQwMCAlZFxuIiwgKGludClodnJjKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGQtPmRldiA9PSBOVUxMKSB7CiAJCS8qIHRoaXMgaXMgd2hlbiB3ZSByZXByb2JlIGZvciBuZXcgZGlza3MgKi8KIAkJaWYgKHZpb19jcmVhdGVfdmlvZGFzZChkZXZfbm8pID09IE5VTEwpIHsKLQkJCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkJCSJjYW5ub3QgYWxsb2NhdGUgdmlydHVhbCBkZXZpY2UgZm9yIGRpc2sgJWRcbiIsCi0JCQkJZGV2X25vKTsKKwkJCXByX3dhcm5pbmcoImNhbm5vdCBhbGxvY2F0ZSB2aXJ0dWFsIGRldmljZSBmb3IgZGlzayAlZFxuIiwKKwkJCQkgICBkZXZfbm8pOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJLyoKQEAgLTQ1NywyMyArNDUwLDIwIEBACiAJc3Bpbl9sb2NrX2luaXQoJmQtPnFfbG9jayk7CiAJcSA9IGJsa19pbml0X3F1ZXVlKGRvX3Zpb2Rhc2RfcmVxdWVzdCwgJmQtPnFfbG9jayk7CiAJaWYgKHEgPT0gTlVMTCkgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcgImNhbm5vdCBhbGxvY2F0ZSBxdWV1ZSBmb3IgZGlzayAlZFxuIiwKLQkJCQlkZXZfbm8pOworCQlwcl93YXJuaW5nKCJjYW5ub3QgYWxsb2NhdGUgcXVldWUgZm9yIGRpc2sgJWRcbiIsIGRldl9ubyk7CiAJCXJldHVybiAwOwogCX0KIAlnID0gYWxsb2NfZGlzaygxIDw8IFBBUlRJVElPTl9TSElGVCk7CiAJaWYgKGcgPT0gTlVMTCkgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcKLQkJCQkiY2Fubm90IGFsbG9jYXRlIGRpc2sgc3RydWN0dXJlIGZvciBkaXNrICVkXG4iLAotCQkJCWRldl9ubyk7CisJCXByX3dhcm5pbmcoImNhbm5vdCBhbGxvY2F0ZSBkaXNrIHN0cnVjdHVyZSBmb3IgZGlzayAlZFxuIiwKKwkJCSAgIGRldl9ubyk7CiAJCWJsa19jbGVhbnVwX3F1ZXVlKHEpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlkLT5kaXNrID0gZzsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIFZJT01BWEJMT0NLRE1BKTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSwgVklPTUFYQkxPQ0tETUEpOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCBWSU9EQVNEX01BWFNFQ1RPUlMpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocSwgVklPTUFYQkxPQ0tETUEpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhxLCBWSU9EQVNEX01BWFNFQ1RPUlMpOwogCWctPm1ham9yID0gVklPREFTRF9NQUpPUjsKIAlnLT5maXJzdF9taW5vciA9IGRldl9ubyA8PCBQQVJUSVRJT05fU0hJRlQ7CiAJaWYgKGRldl9ubyA+PSAyNikKQEAgLTQ4OSwxMyArNDc5LDEyIEBACiAJZy0+ZHJpdmVyZnNfZGV2ID0gZC0+ZGV2OwogCXNldF9jYXBhY2l0eShnLCBkLT5zaXplID4+IDkpOwogCi0JcHJpbnRrKFZJT0RfS0VSTl9JTkZPICJkaXNrICVkOiAlbHUgc2VjdG9ycyAoJWx1IE1CKSAiCi0JCQkiQ0hTPSVkLyVkLyVkIHNlY3RvciBzaXplICVkJXNcbiIsCi0JCQlkZXZfbm8sICh1bnNpZ25lZCBsb25nKShkLT5zaXplID4+IDkpLAotCQkJKHVuc2lnbmVkIGxvbmcpKGQtPnNpemUgPj4gMjApLAotCQkJKGludClkLT5jeWxpbmRlcnMsIChpbnQpZC0+dHJhY2tzLAotCQkJKGludClkLT5zZWN0b3JzLCAoaW50KWQtPmJ5dGVzX3Blcl9zZWN0b3IsCi0JCQlkLT5yZWFkX29ubHkgPyAiIChSTykiIDogIiIpOworCXByX2luZm8oImRpc2sgJWQ6ICVsdSBzZWN0b3JzICglbHUgTUIpIENIUz0lZC8lZC8lZCBzZWN0b3Igc2l6ZSAlZCVzXG4iLAorCQlkZXZfbm8sICh1bnNpZ25lZCBsb25nKShkLT5zaXplID4+IDkpLAorCQkodW5zaWduZWQgbG9uZykoZC0+c2l6ZSA+PiAyMCksCisJCShpbnQpZC0+Y3lsaW5kZXJzLCAoaW50KWQtPnRyYWNrcywKKwkJKGludClkLT5zZWN0b3JzLCAoaW50KWQtPmJ5dGVzX3Blcl9zZWN0b3IsCisJCWQtPnJlYWRfb25seSA/ICIgKFJPKSIgOiAiIik7CiAKIAkvKiByZWdpc3RlciB1cyBpbiB0aGUgZ2xvYmFsIGxpc3QgKi8KIAlhZGRfZGlzayhnKTsKQEAgLTU4MCw4ICs1NjksOCBAQAogCWlmIChlcnJvcikgewogCQljb25zdCBzdHJ1Y3QgdmlvX2Vycm9yX2VudHJ5ICplcnI7CiAJCWVyciA9IHZpb19sb29rdXBfcmModmlvZGFzZF9lcnJfdGFibGUsIGJldmVudC0+c3ViX3Jlc3VsdCk7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORyAicmVhZC93cml0ZSBlcnJvciAlZDoweCUwNHggKCVzKVxuIiwKLQkJCQlldmVudC0+eFJjLCBiZXZlbnQtPnN1Yl9yZXN1bHQsIGVyci0+bXNnKTsKKwkJcHJfd2FybmluZygicmVhZC93cml0ZSBlcnJvciAlZDoweCUwNHggKCVzKVxuIiwKKwkJCSAgIGV2ZW50LT54UmMsIGJldmVudC0+c3ViX3Jlc3VsdCwgZXJyLT5tc2cpOwogCQludW1fc2VjdCA9IGJsa19ycV9zZWN0b3JzKHJlcSk7CiAJfQogCXFsb2NrID0gcmVxLT5xLT5xdWV1ZV9sb2NrOwpAQCAtNjA2LDggKzU5NSw3IEBACiAJCXJldHVybjsKIAkvKiBGaXJzdCwgd2Ugc2hvdWxkIE5FVkVSIGdldCBhbiBpbnQgaGVyZS4uLm9ubHkgYWNrcyAqLwogCWlmIChodmxwZXZlbnRfaXNfaW50KGV2ZW50KSkgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcKLQkJICAgICAgICJZaWtlcyEgZ290IGFuIGludCBpbiB2aW9kYXNkIGV2ZW50IGhhbmRsZXIhXG4iKTsKKwkJcHJfd2FybmluZygiWWlrZXMhIGdvdCBhbiBpbnQgaW4gdmlvZGFzZCBldmVudCBoYW5kbGVyIVxuIik7CiAJCWlmIChodmxwZXZlbnRfbmVlZF9hY2soZXZlbnQpKSB7CiAJCQlldmVudC0+eFJjID0gSHZMcEV2ZW50X1JjX0ludmFsaWRTdWJ0eXBlOwogCQkJSHZDYWxsRXZlbnRfYWNrTHBFdmVudChldmVudCk7CkBAIC02NTAsNyArNjM4LDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcgImludmFsaWQgc3VidHlwZSEiKTsKKwkJcHJfd2FybmluZygiaW52YWxpZCBzdWJ0eXBlISIpOwogCQlpZiAoaHZscGV2ZW50X25lZWRfYWNrKGV2ZW50KSkgewogCQkJZXZlbnQtPnhSYyA9IEh2THBFdmVudF9SY19JbnZhbGlkU3VidHlwZTsKIAkJCUh2Q2FsbEV2ZW50X2Fja0xwRXZlbnQoZXZlbnQpOwpAQCAtNzM5LDI5ICs3MjcsMjYgQEAKIAkJdmlvX3NldF9ob3N0bHAoKTsKIAogCWlmICh2aW9wYXRoX2hvc3RMcCA9PSBIdkxwSW5kZXhJbnZhbGlkKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORyAiaW52YWxpZCBob3N0aW5nIHBhcnRpdGlvblxuIik7CisJCXByX3dhcm5pbmcoImludmFsaWQgaG9zdGluZyBwYXJ0aXRpb25cbiIpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gZWFybHlfZmFpbDsKIAl9CiAKLQlwcmludGsoVklPRF9LRVJOX0lORk8gInZlcnMgIiBWSU9EX1ZFUlMgIiwgaG9zdGluZyBwYXJ0aXRpb24gJWRcbiIsCi0JCQl2aW9wYXRoX2hvc3RMcCk7CisJcHJfaW5mbygidmVycyAiIFZJT0RfVkVSUyAiLCBob3N0aW5nIHBhcnRpdGlvbiAlZFxuIiwgdmlvcGF0aF9ob3N0THApOwogCiAgICAgICAgIC8qIHJlZ2lzdGVyIHRoZSBibG9jayBkZXZpY2UgKi8KIAlyYyA9ICByZWdpc3Rlcl9ibGtkZXYoVklPREFTRF9NQUpPUiwgVklPRF9HRU5IRF9OQU1FKTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HCi0JCQkJIlVuYWJsZSB0byBnZXQgbWFqb3IgbnVtYmVyICVkIGZvciAlc1xuIiwKLQkJCQlWSU9EQVNEX01BSk9SLCBWSU9EX0dFTkhEX05BTUUpOworCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gZ2V0IG1ham9yIG51bWJlciAlZCBmb3IgJXNcbiIsCisJCQkgICBWSU9EQVNEX01BSk9SLCBWSU9EX0dFTkhEX05BTUUpOwogCQlnb3RvIGVhcmx5X2ZhaWw7CiAJfQogCS8qIEFjdHVhbGx5IG9wZW4gdGhlIHBhdGggdG8gdGhlIGhvc3RpbmcgcGFydGl0aW9uICovCiAJcmMgPSB2aW9wYXRoX29wZW4odmlvcGF0aF9ob3N0THAsIHZpb21ham9yc3VidHlwZV9ibG9ja2lvLAogCQkJCVZJT01BWFJFUSArIDIpOwogCWlmIChyYykgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcKLQkJICAgICAgICJlcnJvciBvcGVuaW5nIHBhdGggdG8gaG9zdCBwYXJ0aXRpb24gJWRcbiIsCi0JCSAgICAgICB2aW9wYXRoX2hvc3RMcCk7CisJCXByX3dhcm5pbmcoImVycm9yIG9wZW5pbmcgcGF0aCB0byBob3N0IHBhcnRpdGlvbiAlZFxuIiwKKwkJCSAgIHZpb3BhdGhfaG9zdExwKTsKIAkJZ290byB1bnJlZ2lzdGVyX2JsazsKIAl9CiAKQEAgLTc3MCw3ICs3NTUsNyBAQAogCiAJcmMgPSB2aW9fcmVnaXN0ZXJfZHJpdmVyKCZ2aW9kYXNkX2RyaXZlcik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORyAidmlvX3JlZ2lzdGVyX2RyaXZlciBmYWlsZWRcbiIpOworCQlwcl93YXJuaW5nKCJ2aW9fcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZFxuIik7CiAJCWdvdG8gdW5zZXRfaGFuZGxlcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKaW5kZXggNTEwNDJmMGJhNy4uM2M2NGFmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKQEAgLTI0MywxMCArMjQzLDEyIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCB2aXJ0YmxrX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewogCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOwogCWludCBlcnI7CiAJdTY0IGNhcDsKLQl1MzIgdjsKLQl1MzIgYmxrX3NpemUsIHNnX2VsZW1zOworCXUzMiB2LCBibGtfc2l6ZSwgc2dfZWxlbXMsIG9wdF9pb19zaXplOworCXUxNiBtaW5faW9fc2l6ZTsKKwl1OCBwaHlzaWNhbF9ibG9ja19leHAsIGFsaWdubWVudF9vZmZzZXQ7CiAKIAlpZiAoaW5kZXhfdG9fbWlub3IoaW5kZXgpID49IDEgPDwgTUlOT1JCSVRTKQogCQlyZXR1cm4gLUVOT1NQQzsKQEAgLTI5MywxMyArMjk1LDEzIEBACiAJCWdvdG8gb3V0X21lbXBvb2w7CiAJfQogCi0JdmJsay0+ZGlzay0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb192aXJ0YmxrX3JlcXVlc3QsICZ2YmxrLT5sb2NrKTsKLQlpZiAoIXZibGstPmRpc2stPnF1ZXVlKSB7CisJcSA9IHZibGstPmRpc2stPnF1ZXVlID0gYmxrX2luaXRfcXVldWUoZG9fdmlydGJsa19yZXF1ZXN0LCAmdmJsay0+bG9jayk7CisJaWYgKCFxKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3B1dF9kaXNrOwogCX0KIAotCXZibGstPmRpc2stPnF1ZXVlLT5xdWV1ZWRhdGEgPSB2YmxrOworCXEtPnF1ZXVlZGF0YSA9IHZibGs7CiAKIAlpZiAoaW5kZXggPCAyNikgewogCQlzcHJpbnRmKHZibGstPmRpc2stPmRpc2tfbmFtZSwgInZkJWMiLCAnYScgKyBpbmRleCAlIDI2KTsKQEAgLTMyMywxMCArMzI1LDEwIEBACiAKIAkvKiBJZiBiYXJyaWVycyBhcmUgc3VwcG9ydGVkLCB0ZWxsIGJsb2NrIGxheWVyIHRoYXQgcXVldWUgaXMgb3JkZXJlZCAqLwogCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0JMS19GX0ZMVVNIKSkKLQkJYmxrX3F1ZXVlX29yZGVyZWQodmJsay0+ZGlzay0+cXVldWUsIFFVRVVFX09SREVSRURfRFJBSU5fRkxVU0gsCisJCWJsa19xdWV1ZV9vcmRlcmVkKHEsIFFVRVVFX09SREVSRURfRFJBSU5fRkxVU0gsCiAJCQkJICB2aXJ0YmxrX3ByZXBhcmVfZmx1c2gpOwogCWVsc2UgaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fQkxLX0ZfQkFSUklFUikpCi0JCWJsa19xdWV1ZV9vcmRlcmVkKHZibGstPmRpc2stPnF1ZXVlLCBRVUVVRV9PUkRFUkVEX1RBRywgTlVMTCk7CisJCWJsa19xdWV1ZV9vcmRlcmVkKHEsIFFVRVVFX09SREVSRURfVEFHLCBOVUxMKTsKIAogCS8qIElmIGRpc2sgaXMgcmVhZC1vbmx5IGluIHRoZSBob3N0LCB0aGUgZ3Vlc3Qgc2hvdWxkIG9iZXkgKi8KIAlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19CTEtfRl9STykpCkBAIC0zNDUsMTQgKzM0NywxNCBAQAogCXNldF9jYXBhY2l0eSh2YmxrLT5kaXNrLCBjYXApOwogCiAJLyogV2UgY2FuIGhhbmRsZSB3aGF0ZXZlciB0aGUgaG9zdCB0b2xkIHVzIHRvIGhhbmRsZS4gKi8KLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHModmJsay0+ZGlzay0+cXVldWUsIHZibGstPnNnX2VsZW1zLTIpOwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHModmJsay0+ZGlzay0+cXVldWUsIHZibGstPnNnX2VsZW1zLTIpOworCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxLCB2YmxrLT5zZ19lbGVtcy0yKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIHZibGstPnNnX2VsZW1zLTIpOwogCiAJLyogTm8gbmVlZCB0byBib3VuY2UgYW55IHJlcXVlc3RzICovCi0JYmxrX3F1ZXVlX2JvdW5jZV9saW1pdCh2YmxrLT5kaXNrLT5xdWV1ZSwgQkxLX0JPVU5DRV9BTlkpOworCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQocSwgQkxLX0JPVU5DRV9BTlkpOwogCiAJLyogTm8gcmVhbCBzZWN0b3IgbGltaXQuICovCi0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHZibGstPmRpc2stPnF1ZXVlLCAtMVUpOworCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCAtMVUpOwogCiAJLyogSG9zdCBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IG1heGltdW0gc2VnbWVudCBzaXplIGFuZCBudW1iZXIgb2YKIAkgKiBzZWdtZW50cy4gKi8KQEAgLTM2MCwxNiArMzYyLDQ1IEBACiAJCQkJb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19ibGtfY29uZmlnLCBzaXplX21heCksCiAJCQkJJnYpOwogCWlmICghZXJyKQotCQlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZSh2YmxrLT5kaXNrLT5xdWV1ZSwgdik7CisJCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHEsIHYpOwogCWVsc2UKLQkJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUodmJsay0+ZGlzay0+cXVldWUsIC0xVSk7CisJCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHEsIC0xVSk7CiAKIAkvKiBIb3N0IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgdGhlIGJsb2NrIHNpemUgb2YgdGhlIGRldmljZSAqLwogCWVyciA9IHZpcnRpb19jb25maWdfdmFsKHZkZXYsIFZJUlRJT19CTEtfRl9CTEtfU0laRSwKIAkJCQlvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcsIGJsa19zaXplKSwKIAkJCQkmYmxrX3NpemUpOwogCWlmICghZXJyKQotCQlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKHZibGstPmRpc2stPnF1ZXVlLCBibGtfc2l6ZSk7CisJCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocSwgYmxrX3NpemUpOworCWVsc2UKKwkJYmxrX3NpemUgPSBxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocSk7CisKKwkvKiBVc2UgdG9wb2xvZ3kgaW5mb3JtYXRpb24gaWYgYXZhaWxhYmxlICovCisJZXJyID0gdmlydGlvX2NvbmZpZ192YWwodmRldiwgVklSVElPX0JMS19GX1RPUE9MT0dZLAorCQkJb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19ibGtfY29uZmlnLCBwaHlzaWNhbF9ibG9ja19leHApLAorCQkJJnBoeXNpY2FsX2Jsb2NrX2V4cCk7CisJaWYgKCFlcnIgJiYgcGh5c2ljYWxfYmxvY2tfZXhwKQorCQlibGtfcXVldWVfcGh5c2ljYWxfYmxvY2tfc2l6ZShxLAorCQkJCWJsa19zaXplICogKDEgPDwgcGh5c2ljYWxfYmxvY2tfZXhwKSk7CisKKwllcnIgPSB2aXJ0aW9fY29uZmlnX3ZhbCh2ZGV2LCBWSVJUSU9fQkxLX0ZfVE9QT0xPR1ksCisJCQlvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcsIGFsaWdubWVudF9vZmZzZXQpLAorCQkJJmFsaWdubWVudF9vZmZzZXQpOworCWlmICghZXJyICYmIGFsaWdubWVudF9vZmZzZXQpCisJCWJsa19xdWV1ZV9hbGlnbm1lbnRfb2Zmc2V0KHEsIGJsa19zaXplICogYWxpZ25tZW50X29mZnNldCk7CisKKwllcnIgPSB2aXJ0aW9fY29uZmlnX3ZhbCh2ZGV2LCBWSVJUSU9fQkxLX0ZfVE9QT0xPR1ksCisJCQlvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcsIG1pbl9pb19zaXplKSwKKwkJCSZtaW5faW9fc2l6ZSk7CisJaWYgKCFlcnIgJiYgbWluX2lvX3NpemUpCisJCWJsa19xdWV1ZV9pb19taW4ocSwgYmxrX3NpemUgKiBtaW5faW9fc2l6ZSk7CisKKwllcnIgPSB2aXJ0aW9fY29uZmlnX3ZhbCh2ZGV2LCBWSVJUSU9fQkxLX0ZfVE9QT0xPR1ksCisJCQlvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcsIG9wdF9pb19zaXplKSwKKwkJCSZvcHRfaW9fc2l6ZSk7CisJaWYgKCFlcnIgJiYgb3B0X2lvX3NpemUpCisJCWJsa19xdWV1ZV9pb19vcHQocSwgYmxrX3NpemUgKiBvcHRfaW9fc2l6ZSk7CisKIAogCWFkZF9kaXNrKHZibGstPmRpc2spOwogCXJldHVybiAwOwpAQCAtNDA0LDcgKzQzNSw3IEBACiAJa2ZyZWUodmJsayk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBWSVJUSU9fSURfQkxPQ0ssIFZJUlRJT19ERVZfQU5ZX0lEIH0sCiAJeyAwIH0sCiB9OwpAQCAtNDEyLDcgKzQ0Myw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7CiAJVklSVElPX0JMS19GX0JBUlJJRVIsIFZJUlRJT19CTEtfRl9TRUdfTUFYLCBWSVJUSU9fQkxLX0ZfU0laRV9NQVgsCiAJVklSVElPX0JMS19GX0dFT01FVFJZLCBWSVJUSU9fQkxLX0ZfUk8sIFZJUlRJT19CTEtfRl9CTEtfU0laRSwKLQlWSVJUSU9fQkxLX0ZfU0NTSSwgVklSVElPX0JMS19GX0ZMVVNICisJVklSVElPX0JMS19GX1NDU0ksIFZJUlRJT19CTEtfRl9GTFVTSCwgVklSVElPX0JMS19GX1RPUE9MT0dZCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94ZC5jIGIvZHJpdmVycy9ibG9jay94ZC5jCmluZGV4IGQxZmQwMzIuLjFhMzI1ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveGQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hkLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogCX0KIAogCS8qIHhkX21heHNlY3RvcnMgZGVwZW5kcyBvbiBjb250cm9sbGVyIC0gc28gc2V0IGFmdGVyIGRldGVjdGlvbiAqLwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyh4ZF9xdWV1ZSwgeGRfbWF4c2VjdG9ycyk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHhkX3F1ZXVlLCB4ZF9tYXhzZWN0b3JzKTsKIAogCWZvciAoaSA9IDA7IGkgPCB4ZF9kcml2ZXM7IGkrKykKIAkJYWRkX2Rpc2soeGRfZ2VuZGlza1tpXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYwppbmRleCAwNWEzMWU1Li45YzA5Njk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jCisrKyBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMKQEAgLTM0NiwxNSArMzQ2LDE0IEBACiAKIAkvKiBIYXJkIHNlY3RvciBzaXplIGFuZCBtYXggc2VjdG9ycyBpbXBlcnNvbmF0ZSB0aGUgZXF1aXYuIGhhcmR3YXJlLiAqLwogCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocnEsIHNlY3Rvcl9zaXplKTsKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocnEsIDUxMik7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHJxLCA1MTIpOwogCiAJLyogRWFjaCBzZWdtZW50IGluIGEgcmVxdWVzdCBpcyB1cCB0byBhbiBhbGlnbmVkIHBhZ2UgaW4gc2l6ZS4gKi8KIAlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShycSwgUEFHRV9TSVpFIC0gMSk7CiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUocnEsIFBBR0VfU0laRSk7CiAKIAkvKiBFbnN1cmUgYSBtZXJnZWQgcmVxdWVzdCB3aWxsIGZpdCBpbiBhIHNpbmdsZSBJL08gcmluZyBzbG90LiAqLwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhycSwgQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHJxLCBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocnEsIEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCk7CiAKIAkvKiBNYWtlIHN1cmUgYnVmZmVyIGFkZHJlc3NlcyBhcmUgc2VjdG9yLWFsaWduZWQuICovCiAJYmxrX3F1ZXVlX2RtYV9hbGlnbm1lbnQocnEsIDUxMSk7CkBAIC0xMDUwLDcgKzEwNDksNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IHhlbmJ1c19kZXZpY2VfaWQgYmxrZnJvbnRfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHhlbmJ1c19kZXZpY2VfaWQgYmxrZnJvbnRfaWRzW10gPSB7CiAJeyAidmJkIiB9LAogCXsgIiIgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jIGIvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKaW5kZXggZTVjNTQxNS4uZTFjOTVlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKKysrIGIvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKQEAgLTEyMjcsNyArMTIyNyw3IEBACiB9CiAKIC8qIE1hdGNoIHRhYmxlIGZvciBvZl9wbGF0Zm9ybSBiaW5kaW5nICovCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBhY2Vfb2ZfbWF0Y2hbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWNlX29mX21hdGNoW10gX19kZXZpbml0Y29uc3QgPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJ4bG54LG9wYi1zeXNhY2UtMS4wMC5iIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInhsbngsb3BiLXN5c2FjZS0xLjAwLmMiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAieGxueCx4cHMtc3lzYWNlLTEuMDAuYSIsIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnIGIvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZwppbmRleCA2NTIzNjdhLi4wNThmYmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcKQEAgLTE5NSw1ICsxOTUsMTYgQEAKIAkgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBNYXJ2ZWxsIEJULW92ZXItU0RJTyBkcml2ZXIKIAkgIGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0byBjb21waWxlIGl0IGFzIG1vZHVsZS4KIAotZW5kbWVudQorY29uZmlnIEJUX0FUSDNLCisJdHJpc3RhdGUgIkF0aGVyb3MgZmlybXdhcmUgZG93bmxvYWQgZHJpdmVyIgorCWRlcGVuZHMgb24gQlRfSENJQlRVU0IKKwlzZWxlY3QgRldfTE9BREVSCisJaGVscAorCSAgQmx1ZXRvb3RoIGZpcm13YXJlIGRvd25sb2FkIGRyaXZlci4KKwkgIFRoaXMgZHJpdmVyIGxvYWRzIHRoZSBmaXJtd2FyZSBpbnRvIHRoZSBBdGhlcm9zIEJsdWV0b290aAorCSAgY2hpcHNldC4KIAorCSAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yICJBdGhlcm9zIGZpcm13YXJlIGRvd25sb2FkIGRyaXZlciIKKwkgIGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0byBjb21waWxlIGl0IGFzIG1vZHVsZSAoYXRoM2spLgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZSBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlCmluZGV4IGIzZjU3ZDIuLjdlNWFlZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlCkBAIC0xNSw2ICsxNSw3IEBACiBvYmotJChDT05GSUdfQlRfSENJQlRVU0IpCSs9IGJ0dXNiLm8KIG9iai0kKENPTkZJR19CVF9IQ0lCVFNESU8pCSs9IGJ0c2Rpby5vCiAKK29iai0kKENPTkZJR19CVF9BVEgzSykJCSs9IGF0aDNrLm8KIG9iai0kKENPTkZJR19CVF9NUlZMKQkJKz0gYnRtcnZsLm8KIG9iai0kKENPTkZJR19CVF9NUlZMX1NESU8pCSs9IGJ0bXJ2bF9zZGlvLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRkOTQ4NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgorCisjZGVmaW5lIFZFUlNJT04gIjEuMCIKKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXRoM2tfdGFibGVbXSA9IHsKKwkvKiBBdGhlcm9zIEFSMzAxMSAqLworCXsgVVNCX0RFVklDRSgweDBDRjMsIDB4MzAwMCkgfSwKKwl7IH0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBhdGgza190YWJsZSk7CisKKyNkZWZpbmUgVVNCX1JFUV9ERlVfRE5MT0FECTEKKyNkZWZpbmUgQlVMS19TSVpFCQk0MDk2CisKK3N0cnVjdCBhdGgza19kYXRhIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwl1OCAqZndfZGF0YTsKKwl1MzIgZndfc2l6ZTsKKwl1MzIgZndfc2VudDsKK307CisKK3N0YXRpYyBpbnQgYXRoM2tfbG9hZF9maXJtd2FyZShzdHJ1Y3QgYXRoM2tfZGF0YSAqZGF0YSwKKwkJCQl1bnNpZ25lZCBjaGFyICpmaXJtd2FyZSwKKwkJCQlpbnQgY291bnQpCit7CisJdTggKnNlbmRfYnVmOworCWludCBlcnIsIHBpcGUsIGxlbiwgc2l6ZSwgc2VudCA9IDA7CisKKwlCVF9EQkcoImF0aDNrICVwIHVkZXYgJXAiLCBkYXRhLCBkYXRhLT51ZGV2KTsKKworCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUoZGF0YS0+dWRldiwgMCk7CisKKwlpZiAoKHVzYl9jb250cm9sX21zZyhkYXRhLT51ZGV2LCBwaXBlLAorCQkJCVVTQl9SRVFfREZVX0ROTE9BRCwKKwkJCQlVU0JfVFlQRV9WRU5ET1IsIDAsIDAsCisJCQkJZmlybXdhcmUsIDIwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCkpIDwgMCkgeworCQlCVF9FUlIoIkNhbid0IGNoYW5nZSB0byBsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZXJyIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXNlbnQgKz0gMjA7CisJY291bnQgLT0gMjA7CisKKwlzZW5kX2J1ZiA9IGttYWxsb2MoQlVMS19TSVpFLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNlbmRfYnVmKSB7CisJCUJUX0VSUigiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGNodW5rIGZvciBmaXJtd2FyZSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl3aGlsZSAoY291bnQpIHsKKwkJc2l6ZSA9IG1pbl90KHVpbnQsIGNvdW50LCBCVUxLX1NJWkUpOworCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRhdGEtPnVkZXYsIDB4MDIpOworCQltZW1jcHkoc2VuZF9idWYsIGZpcm13YXJlICsgc2VudCwgc2l6ZSk7CisKKwkJZXJyID0gdXNiX2J1bGtfbXNnKGRhdGEtPnVkZXYsIHBpcGUsIHNlbmRfYnVmLCBzaXplLAorCQkJCQkmbGVuLCAzMDAwKTsKKworCQlpZiAoZXJyIHx8IChsZW4gIT0gc2l6ZSkpIHsKKwkJCUJUX0VSUigiRXJyb3IgaW4gZmlybXdhcmUgbG9hZGluZyBlcnIgPSAlZCwiCisJCQkJImxlbiA9ICVkLCBzaXplID0gJWQiLCBlcnIsIGxlbiwgc2l6ZSk7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJc2VudCAgKz0gc2l6ZTsKKwkJY291bnQgLT0gc2l6ZTsKKwl9CisKKwlrZnJlZShzZW5kX2J1Zik7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWtmcmVlKHNlbmRfYnVmKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGF0aDNrX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCBhdGgza19kYXRhICpkYXRhOworCWludCBzaXplOworCisJQlRfREJHKCJpbnRmICVwIGlkICVwIiwgaW50ZiwgaWQpOworCisJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgIT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJZGF0YS0+dWRldiA9IHVkZXY7CisKKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZmlybXdhcmUsICJhdGgzay0xLmZ3IiwgJnVkZXYtPmRldikgPCAwKSB7CisJCWtmcmVlKGRhdGEpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlzaXplID0gbWF4X3QodWludCwgZmlybXdhcmUtPnNpemUsIDQwOTYpOworCWRhdGEtPmZ3X2RhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghZGF0YS0+ZndfZGF0YSkgeworCQlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKKwkJa2ZyZWUoZGF0YSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbWNweShkYXRhLT5md19kYXRhLCBmaXJtd2FyZS0+ZGF0YSwgZmlybXdhcmUtPnNpemUpOworCWRhdGEtPmZ3X3NpemUgPSBmaXJtd2FyZS0+c2l6ZTsKKwlkYXRhLT5md19zZW50ID0gMDsKKwlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGF0YSk7CisJaWYgKGF0aDNrX2xvYWRfZmlybXdhcmUoZGF0YSwgZGF0YS0+ZndfZGF0YSwgZGF0YS0+Zndfc2l6ZSkpIHsKKwkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDNrX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGF0aDNrX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJQlRfREJHKCJhdGgza19kaXNjb25uZWN0IGludGYgJXAiLCBpbnRmKTsKKworCWtmcmVlKGRhdGEtPmZ3X2RhdGEpOworCWtmcmVlKGRhdGEpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXRoM2tfZHJpdmVyID0geworCS5uYW1lCQk9ICJhdGgzayIsCisJLnByb2JlCQk9IGF0aDNrX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gYXRoM2tfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSBhdGgza190YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0aDNrX2luaXQodm9pZCkKK3sKKwlCVF9JTkZPKCJBdGhlcm9zIEFSMzB4eCBmaXJtd2FyZSBkcml2ZXIgdmVyICVzIiwgVkVSU0lPTik7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmYXRoM2tfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGF0aDNrX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmYXRoM2tfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYXRoM2tfaW5pdCk7Cittb2R1bGVfZXhpdChhdGgza19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQXRoZXJvcyBDb21tdW5pY2F0aW9ucyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBdGhlcm9zIEFSMzB4eCBmaXJtd2FyZSBkcml2ZXIiKTsKK01PRFVMRV9WRVJTSU9OKFZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0ZJUk1XQVJFKCJhdGgzay0xLmZ3Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYwppbmRleCAyYWNkYzYwLi5jMmNmODExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMKQEAgLTUwMyw3ICs1MDMsOSBAQAogCXVuc2lnbmVkIGludCBpb2Jhc2U7CiAJdW5zaWduZWQgY2hhciByZWc7CiAKLQlCVUdfT04oIWluZm8tPmhkZXYpOworCWlmICghaW5mbyB8fCAhaW5mby0+aGRldikKKwkJLyogb3VyIGlycSBoYW5kbGVyIGlzIHNoYXJlZCAqLworCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlpZiAoIXRlc3RfYml0KENBUkRfUkVBRFksICYoaW5mby0+aHdfc3RhdGUpKSkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCmluZGV4IGQ4MTRhMjcuLjlmNTkyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKQEAgLTM0NSw3ICszNDUsOSBAQAogCWludCBpaXI7CiAJaXJxcmV0dXJuX3QgciA9IElSUV9OT05FOwogCi0JQlVHX09OKCFpbmZvLT5oZGV2KTsKKwlpZiAoIWluZm8gfHwgIWluZm8tPmhkZXYpCisJCS8qIG91ciBpcnEgaGFuZGxlciBpcyBzaGFyZWQgKi8KKwkJcmV0dXJuIElSUV9OT05FOwogCiAJaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMKaW5kZXggZjM2ZGVmYS4uNTdkOTY1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jCkBAIC04MDgsNiArODA4LDcgQEAKIAogZXhpdDoKIAlzZGlvX3JlbGVhc2VfaG9zdChjYXJkLT5mdW5jKTsKKwlrZnJlZSh0bXBidWYpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1YXJ0X2NzLmMKaW5kZXggZDMzOTQ2NC4uOTFjNTIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1YXJ0X2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1YXJ0X2NzLmMKQEAgLTI5NSw3ICsyOTUsOSBAQAogCWludCBpaXIsIGxzcjsKIAlpcnFyZXR1cm5fdCByID0gSVJRX05PTkU7CiAKLQlCVUdfT04oIWluZm8tPmhkZXYpOworCWlmICghaW5mbyB8fCAhaW5mby0+aGRldikKKwkJLyogb3VyIGlycSBoYW5kbGVyIGlzIHNoYXJlZCAqLworCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9kdGwxX2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9kdGwxX2NzLmMKaW5kZXggNGYwMmE2Zi4uNjk3NTkxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYwpAQCAtMjk5LDcgKzI5OSw5IEBACiAJaW50IGlpciwgbHNyOwogCWlycXJldHVybl90IHIgPSBJUlFfTk9ORTsKIAotCUJVR19PTighaW5mby0+aGRldik7CisJaWYgKCFpbmZvIHx8ICFpbmZvLT5oZGV2KQorCQkvKiBvdXIgaXJxIGhhbmRsZXIgaXMgc2hhcmVkICovCisJCXJldHVybiBJUlFfTk9ORTsKIAogCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYyBiL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYwppbmRleCBlNzg5ZTZjLi4wM2M3MWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL2dkcm9tLmMKKysrIGIvZHJpdmVycy9jZHJvbS9nZHJvbS5jCkBAIC03NDEsNyArNzQxLDcgQEAKIHsKIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKGdkLmdkcm9tX3JxLCBHRFJPTV9IQVJEX1NFQ1RPUik7CiAJLyogdXNpbmcgRE1BIHNvIG1lbW9yeSB3aWxsIG5lZWQgdG8gYmUgY29udGlndW91cyAqLwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMoZ2QuZ2Ryb21fcnEsIDEpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMoZ2QuZ2Ryb21fcnEsIDEpOwogCS8qIHNldCBhIGxhcmdlIG1heCBzaXplIHRvIGdldCBtb3N0IGZyb20gRE1BICovCiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoZ2QuZ2Ryb21fcnEsIDB4NDAwMDApOwogCWdkLmRpc2stPnF1ZXVlID0gZ2QuZ2Ryb21fcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMgYi9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKaW5kZXggNTdjYTY5ZS4uY2M0MzViZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS92aW9jZC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vdmlvY2QuYwpAQCAtNjE2LDkgKzYxNiw4IEBACiAJZ2VuZGlzay0+Zmlyc3RfbWlub3IgPSBkZXZpY2VubzsKIAlzdHJuY3B5KGdlbmRpc2stPmRpc2tfbmFtZSwgYy0+bmFtZSwKIAkJCXNpemVvZihnZW5kaXNrLT5kaXNrX25hbWUpKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIDEpOwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxLCAxKTsKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocSwgNDA5NiAvIDUxMik7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxLCAxKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocSwgNDA5NiAvIDUxMik7CiAJZ2VuZGlzay0+cXVldWUgPSBxOwogCWdlbmRpc2stPmZvcHMgPSAmdmlvY2RfZm9wczsKIAlnZW5kaXNrLT5mbGFncyA9IEdFTkhEX0ZMX0NEfEdFTkhEX0ZMX1JFTU9WQUJMRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9LY29uZmlnIGIvZHJpdmVycy9jaGFyL0tjb25maWcKaW5kZXggZTAyMzY4Mi4uMzE0MWRkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL0tjb25maWcKQEAgLTY2Niw2ICs2NjYsMTQgQEAKIAloZWxwCiAJICBWaXJ0aW8gY29uc29sZSBmb3IgdXNlIHdpdGggbGd1ZXN0IGFuZCBvdGhlciBoeXBlcnZpc29ycy4KIAorCSAgQWxzbyBzZXJ2ZXMgYXMgYSBnZW5lcmFsLXB1cnBvc2Ugc2VyaWFsIGRldmljZSBmb3IgZGF0YQorCSAgdHJhbnNmZXIgYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIGhvc3QuICBDaGFyYWN0ZXIgZGV2aWNlcyBhdAorCSAgL2Rldi92cG9ydE5wbiB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBjb3JyZXNwb25kaW5nIHBvcnRzIGFyZQorCSAgZm91bmQsIHdoZXJlIE4gaXMgdGhlIGRldmljZSBudW1iZXIgYW5kIG4gaXMgdGhlIHBvcnQgbnVtYmVyCisJICB3aXRoaW4gdGhhdCBkZXZpY2UuICBJZiBzcGVjaWZpZWQgYnkgdGhlIGhvc3QsIGEgc3lzZnMKKwkgIGF0dHJpYnV0ZSBjYWxsZWQgJ25hbWUnIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggYSBuYW1lIGZvcgorCSAgdGhlIHBvcnQgd2hpY2ggY2FuIGJlIHVzZWQgYnkgdWRldiBzY3JpcHRzIHRvIGNyZWF0ZSBhCisJICBzeW1saW5rIHRvIHRoZSBkZXZpY2UuCiAKIGNvbmZpZyBIVkNTCiAJdHJpc3RhdGUgIklCTSBIeXBlcnZpc29yIFZpcnR1YWwgQ29uc29sZSBTZXJ2ZXIgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCmluZGV4IDFhZmI4OTYuLmZkNTBlYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwpAQCAtNzI5LDkgKzcyOSw2IEBACiAJaWYgKGFncF9vZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGdhcnRfaW9tbXVfYXBlcnR1cmUpCi0JCXJldHVybiBhZ3BfYnJpZGdlc19mb3VuZCA/IDAgOiAtRU5PREVWOwotCiAJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYWdwX2FtZDY0X3BjaV9kcml2ZXIpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtNzY4LDE2ICs3NjUsMjcgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBhZ3BfYW1kNjRfbW9kX2luaXQodm9pZCkKK3sKKyNpZm5kZWYgTU9EVUxFCisJaWYgKGdhcnRfaW9tbXVfYXBlcnR1cmUpCisJCXJldHVybiBhZ3BfYnJpZGdlc19mb3VuZCA/IDAgOiAtRU5PREVWOworI2VuZGlmCisJcmV0dXJuIGFncF9hbWQ2NF9pbml0KCk7Cit9CisKIHN0YXRpYyB2b2lkIF9fZXhpdCBhZ3BfYW1kNjRfY2xlYW51cCh2b2lkKQogeworI2lmbmRlZiBNT0RVTEUKIAlpZiAoZ2FydF9pb21tdV9hcGVydHVyZSkKIAkJcmV0dXJuOworI2VuZGlmCiAJaWYgKGFwZXJ0dXJlX3Jlc291cmNlKQogCQlyZWxlYXNlX3Jlc291cmNlKGFwZXJ0dXJlX3Jlc291cmNlKTsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFncF9hbWQ2NF9wY2lfZHJpdmVyKTsKIH0KIAotbW9kdWxlX2luaXQoYWdwX2FtZDY0X2luaXQpOworbW9kdWxlX2luaXQoYWdwX2FtZDY0X21vZF9pbml0KTsKIG1vZHVsZV9leGl0KGFncF9hbWQ2NF9jbGVhbnVwKTsKIAogTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIEFuZGkgS2xlZW4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IDM5OTlhNWYuLjhhNzEzZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvYWdwX2JhY2tlbmQuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSAiYWdwLmgiCiAKIC8qCkBAIC04MTUsMTIgKzgxNiw2IEBACiAJCWludGVsX2k4MzBfZmluaV9mbHVzaCgpOwogfQogCi1zdGF0aWMgdm9pZAotZG9fd2JpbnZkKHZvaWQgKm51bGwpCi17Ci0Jd2JpbnZkKCk7Ci19Ci0KIC8qIFRoZSBjaGlwc2V0X2ZsdXNoIGludGVyZmFjZSBuZWVkcyB0byBnZXQgZGF0YSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4KICAqIGZsdXNoZWQgb3V0IG9mIHRoZSBDUFUgYWxsIHRoZSB3YXkgb3V0IHRvIG1haW4gbWVtb3J5LCBiZWNhdXNlIHRoZSBHUFUKICAqIGRvZXNuJ3Qgc25vb3AgdGhvc2UgYnVmZmVycy4KQEAgLTgzNywxMiArODMyLDEwIEBACiAKIAltZW1zZXQocGcsIDAsIDEwMjQpOwogCi0JaWYgKGNwdV9oYXNfY2xmbHVzaCkgeworCWlmIChjcHVfaGFzX2NsZmx1c2gpCiAJCWNsZmx1c2hfY2FjaGVfcmFuZ2UocGcsIDEwMjQpOwotCX0gZWxzZSB7Ci0JCWlmIChvbl9lYWNoX2NwdShkb193YmludmQsIE5VTEwsIDEpICE9IDApCi0JCQlwcmludGsoS0VSTl9FUlIgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBjYWNoZSBmbHVzaC5cbiIpOwotCX0KKwllbHNlIGlmICh3YmludmRfb25fYWxsX2NwdXMoKSAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBjYWNoZSBmbHVzaC5cbiIpOwogfQogCiAvKiBUaGUgaW50ZWwgaTgzMCBhdXRvbWF0aWNhbGx5IGluaXRpYWxpemVzIHRoZSBhZ3AgYXBlcnR1cmUgZHVyaW5nIFBPU1QuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2JlYXQuYyBiL2RyaXZlcnMvY2hhci9odmNfYmVhdC5jCmluZGV4IDBhZmM4YjguLjVmZTQ2MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfYmVhdC5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfYmVhdC5jCkBAIC04NCw3ICs4NCw3IEBACiAJcmV0dXJuIGNudDsKIH0KIAotc3RhdGljIHN0cnVjdCBodl9vcHMgaHZjX2JlYXRfZ2V0X3B1dF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGh2X29wcyBodmNfYmVhdF9nZXRfcHV0X29wcyA9IHsKIAkuZ2V0X2NoYXJzID0gaHZjX2JlYXRfZ2V0X2NoYXJzLAogCS5wdXRfY2hhcnMgPSBodmNfYmVhdF9wdXRfY2hhcnMsCiB9OwpAQCAtOTksNyArOTksNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBodmNfYmVhdF9jb25zb2xlX2luaXQodm9pZCkKIHsKLQlpZiAoaHZjX2JlYXRfdXNlaXQgJiYgbWFjaGluZV9pc19jb21wYXRpYmxlKCJCZWF0IikpIHsKKwlpZiAoaHZjX2JlYXRfdXNlaXQgJiYgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJCZWF0IikpIHsKIAkJaHZjX2luc3RhbnRpYXRlKDAsIDAsICZodmNfYmVhdF9nZXRfcHV0X29wcyk7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYwppbmRleCA0MTZkMzQyLi40YzNiNTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAgKiBjb25zb2xlIGludGVyZmFjZXMgYnV0IGNhbiBzdGlsbCBiZSB1c2VkIGFzIGEgdHR5IGRldmljZS4gIFRoaXMgaGFzIHRvIGJlCiAgKiBzdGF0aWMgYmVjYXVzZSBrbWFsbG9jIHdpbGwgbm90IHdvcmsgZHVyaW5nIGVhcmx5IGNvbnNvbGUgaW5pdC4KICAqLwotc3RhdGljIHN0cnVjdCBodl9vcHMgKmNvbnNfb3BzW01BWF9OUl9IVkNfQ09OU09MRVNdOworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgKmNvbnNfb3BzW01BWF9OUl9IVkNfQ09OU09MRVNdOwogc3RhdGljIHVpbnQzMl90IHZ0ZXJtbm9zW01BWF9OUl9IVkNfQ09OU09MRVNdID0KIAl7WzAgLi4uIE1BWF9OUl9IVkNfQ09OU09MRVMgLSAxXSA9IC0xfTsKIApAQCAtMjQ3LDcgKzI0Nyw3IEBACiAgKiB2dHkgYWRhcHRlcnMgZG8gTk9UIGdldCBhbiBodmNfaW5zdGFudGlhdGUoKSBjYWxsYmFjayBzaW5jZSB0aGV5CiAgKiBhcHBlYXIgYWZ0ZXIgZWFybHkgY29uc29sZSBpbml0LgogICovCi1pbnQgaHZjX2luc3RhbnRpYXRlKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBpbmRleCwgc3RydWN0IGh2X29wcyAqb3BzKQoraW50IGh2Y19pbnN0YW50aWF0ZSh1aW50MzJfdCB2dGVybW5vLCBpbnQgaW5kZXgsIGNvbnN0IHN0cnVjdCBodl9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgaHZjX3N0cnVjdCAqaHA7CiAKQEAgLTc0OCw4ICs3NDgsOSBAQAogCS5jaGFyc19pbl9idWZmZXIgPSBodmNfY2hhcnNfaW5fYnVmZmVyLAogfTsKIAotc3RydWN0IGh2Y19zdHJ1Y3QgX19kZXZpbml0ICpodmNfYWxsb2ModWludDMyX3QgdnRlcm1ubywgaW50IGRhdGEsCi0JCQkJCXN0cnVjdCBodl9vcHMgKm9wcywgaW50IG91dGJ1Zl9zaXplKQorc3RydWN0IGh2Y19zdHJ1Y3QgKmh2Y19hbGxvYyh1aW50MzJfdCB2dGVybW5vLCBpbnQgZGF0YSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGh2X29wcyAqb3BzLAorCQkJICAgICBpbnQgb3V0YnVmX3NpemUpCiB7CiAJc3RydWN0IGh2Y19zdHJ1Y3QgKmhwOwogCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmggYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaAppbmRleCAxMDk1MGNhLi41NDM4MWViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmgKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmgKQEAgLTU1LDcgKzU1LDcgQEAKIAlpbnQgb3V0YnVmX3NpemU7CiAJaW50IG5fb3V0YnVmOwogCXVpbnQzMl90IHZ0ZXJtbm87Ci0Jc3RydWN0IGh2X29wcyAqb3BzOworCWNvbnN0IHN0cnVjdCBodl9vcHMgKm9wczsKIAlpbnQgaXJxX3JlcXVlc3RlZDsKIAlpbnQgZGF0YTsKIAlzdHJ1Y3Qgd2luc2l6ZSB3czsKQEAgLTc2LDExICs3NiwxMiBAQAogfTsKIAogLyogUmVnaXN0ZXIgYSB2dGVybSBhbmQgYSBzbG90IGluZGV4IGZvciB1c2UgYXMgYSBjb25zb2xlIChjb25zb2xlX2luaXQpICovCi1leHRlcm4gaW50IGh2Y19pbnN0YW50aWF0ZSh1aW50MzJfdCB2dGVybW5vLCBpbnQgaW5kZXgsIHN0cnVjdCBodl9vcHMgKm9wcyk7CitleHRlcm4gaW50IGh2Y19pbnN0YW50aWF0ZSh1aW50MzJfdCB2dGVybW5vLCBpbnQgaW5kZXgsCisJCQkgICBjb25zdCBzdHJ1Y3QgaHZfb3BzICpvcHMpOwogCiAvKiByZWdpc3RlciBhIHZ0ZXJtIGZvciBodmMgdHR5IG9wZXJhdGlvbiAobW9kdWxlX2luaXQgb3IgaG90cGx1ZyBhZGQpICovCi1leHRlcm4gc3RydWN0IGh2Y19zdHJ1Y3QgKiBfX2RldmluaXQgaHZjX2FsbG9jKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBkYXRhLAotCQkJCXN0cnVjdCBodl9vcHMgKm9wcywgaW50IG91dGJ1Zl9zaXplKTsKK2V4dGVybiBzdHJ1Y3QgaHZjX3N0cnVjdCAqIGh2Y19hbGxvYyh1aW50MzJfdCB2dGVybW5vLCBpbnQgZGF0YSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBodl9vcHMgKm9wcywgaW50IG91dGJ1Zl9zaXplKTsKIC8qIHJlbW92ZSBhIHZ0ZXJtIGZyb20gaHZjIHR0eSBvcGVyYXRpb24gKG1vZHVsZV9leGl0IG9yIGhvdHBsdWcgcmVtb3ZlKSAqLwogZXh0ZXJuIGludCBodmNfcmVtb3ZlKHN0cnVjdCBodmNfc3RydWN0ICpocCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfaXNlcmllcy5jIGIvZHJpdmVycy9jaGFyL2h2Y19pc2VyaWVzLmMKaW5kZXggOTM2ZDA1Yi4uZmQwMjQyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19pc2VyaWVzLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19pc2VyaWVzLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCXJldHVybiBzZW50OwogfQogCi1zdGF0aWMgc3RydWN0IGh2X29wcyBodmNfZ2V0X3B1dF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGh2X29wcyBodmNfZ2V0X3B1dF9vcHMgPSB7CiAJLmdldF9jaGFycyA9IGdldF9jaGFycywKIAkucHV0X2NoYXJzID0gcHV0X2NoYXJzLAogCS5ub3RpZmllcl9hZGQgPSBub3RpZmllcl9hZGRfaXJxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwppbmRleCBmZTYyYmQwLi4yMTY4MWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwpAQCAtOTIyLDcgKzkyMiw3IEBACiAKIAogLyogSFZDIG9wZXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3QgaHZfb3BzIGh2Y19pdWN2X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2Y19pdWN2X29wcyA9IHsKIAkuZ2V0X2NoYXJzID0gaHZjX2l1Y3ZfZ2V0X2NoYXJzLAogCS5wdXRfY2hhcnMgPSBodmNfaXVjdl9wdXRfY2hhcnMsCiAJLm5vdGlmaWVyX2FkZCA9IGh2Y19pdWN2X25vdGlmaWVyX2FkZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfcnRhcy5jIGIvZHJpdmVycy9jaGFyL2h2Y19ydGFzLmMKaW5kZXggODg1OTBkMC4uNjFjNGE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19ydGFzLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19ydGFzLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAlyZXR1cm4gaTsKIH0KIAotc3RhdGljIHN0cnVjdCBodl9vcHMgaHZjX3J0YXNfZ2V0X3B1dF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGh2X29wcyBodmNfcnRhc19nZXRfcHV0X29wcyA9IHsKIAkuZ2V0X2NoYXJzID0gaHZjX3J0YXNfcmVhZF9jb25zb2xlLAogCS5wdXRfY2hhcnMgPSBodmNfcnRhc193cml0ZV9jb25zb2xlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfdWRiZy5jIGIvZHJpdmVycy9jaGFyL2h2Y191ZGJnLmMKaW5kZXggYmQ2M2JhOC4uYjA5NTdlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y191ZGJnLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y191ZGJnLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAlyZXR1cm4gaTsKIH0KIAotc3RhdGljIHN0cnVjdCBodl9vcHMgaHZjX3VkYmdfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgaHZjX3VkYmdfb3BzID0gewogCS5nZXRfY2hhcnMgPSBodmNfdWRiZ19nZXQsCiAJLnB1dF9jaGFycyA9IGh2Y191ZGJnX3B1dCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX3Zpby5jIGIvZHJpdmVycy9jaGFyL2h2Y192aW8uYwppbmRleCAxMGJlMzQzLi4yNzM3MGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX3Zpby5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfdmlvLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAlyZXR1cm4gZ290OwogfQogCi1zdGF0aWMgc3RydWN0IGh2X29wcyBodmNfZ2V0X3B1dF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGh2X29wcyBodmNfZ2V0X3B1dF9vcHMgPSB7CiAJLmdldF9jaGFycyA9IGZpbHRlcmVkX2dldF9jaGFycywKIAkucHV0X2NoYXJzID0gaHZjX3B1dF9jaGFycywKIAkubm90aWZpZXJfYWRkID0gbm90aWZpZXJfYWRkX2lycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfeGVuLmMgYi9kcml2ZXJzL2NoYXIvaHZjX3hlbi5jCmluZGV4IGIxYTcxNjMuLjYwNDQ2ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfeGVuLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y194ZW4uYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJcmV0dXJuIHJlY3Y7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaHZfb3BzIGh2Y19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGh2X29wcyBodmNfb3BzID0gewogCS5nZXRfY2hhcnMgPSByZWFkX2NvbnNvbGUsCiAJLnB1dF9jaGFycyA9IHdyaXRlX2NvbnNvbGUsCiAJLm5vdGlmaWVyX2FkZCA9IG5vdGlmaWVyX2FkZF9pcnEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKaW5kZXggODcwNjAyNi4uNmVhMTAxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZwpAQCAtMTg2LDMgKzE4NiwxNSBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG14Yy1ybmdhLgogCiAJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgSFdfUkFORE9NX05PTUFESUsKKwl0cmlzdGF0ZSAiU1QtRXJpY3Nzb24gTm9tYWRpayBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBzdXBwb3J0IgorCWRlcGVuZHMgb24gSFdfUkFORE9NICYmIFBMQVRfTk9NQURJSworCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGtlcm5lbC1zaWRlIHN1cHBvcnQgZm9yIHRoZSBSYW5kb20gTnVtYmVyCisJICBHZW5lcmF0b3IgaGFyZHdhcmUgZm91bmQgb24gU1QtRXJpY3Nzb24gU29DcyAoODgxNSBhbmQgODUwMCkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG5vbWFkaWstcm5nLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUKaW5kZXggNWVlYjEzMC4uNDI3MzMwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlCkBAIC0xOCwzICsxOCw0IEBACiBvYmotJChDT05GSUdfSFdfUkFORE9NX1RYNDkzOSkgKz0gdHg0OTM5LXJuZy5vCiBvYmotJChDT05GSUdfSFdfUkFORE9NX01YQ19STkdBKSArPSBteGMtcm5nYS5vCiBvYmotJChDT05GSUdfSFdfUkFORE9NX09DVEVPTikgKz0gb2N0ZW9uLXJuZy5vCitvYmotJChDT05GSUdfSFdfUkFORE9NX05PTUFESUspICs9IG5vbWFkaWstcm5nLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vbm9tYWRpay1ybmcuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vbm9tYWRpay1ybmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGI0YzQwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9ub21hZGlrLXJuZy5jCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogTm9tYWRpayBSTkcgc3VwcG9ydAorICogIENvcHlyaWdodCAyMDA5IEFsZXNzYW5kcm8gUnViaW5pCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKK3N0YXRpYyBpbnQgbm1rX3JuZ19yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB2b2lkICpkYXRhLCBzaXplX3QgbWF4LCBib29sIHdhaXQpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKXJuZy0+cHJpdjsKKworCS8qCisJICogVGhlIHJlZ2lzdGVyIGlzIDMyIGJpdHMgYW5kIGdpdmVzIDE2IHJhbmRvbSBiaXRzIChsb3cgaGFsZikuCisJICogQSBzdWJzZXF1ZW50IHJlYWQgd2lsbCBkZWxheSB0aGUgY29yZSBmb3IgNDAwbnMsIHNvIHdlIGp1c3QgcmVhZAorCSAqIG9uY2UgYW5kIGFjY2VwdCB0aGUgdmVyeSB1bmxpa2VseSB2ZXJ5IHNtYWxsIGRlbGF5LCBldmVuIGlmIHdhaXQ9PTAuCisJICovCisJKih1MTYgKilkYXRhID0gX19yYXdfcmVhZGwoYmFzZSArIDgpICYgMHhmZmZmOworCXJldHVybiAyOworfQorCisvKiB3ZSBoYXZlIGF0IG1vc3Qgb25lIFJORyBwZXIgbWFjaGluZSwgZ3JhbnRlZCAqLworc3RhdGljIHN0cnVjdCBod3JuZyBubWtfcm5nID0geworCS5uYW1lCQk9ICJub21hZGlrIiwKKwkucmVhZAkJPSBubWtfcm5nX3JlYWQsCit9OworCitzdGF0aWMgaW50IG5ta19ybmdfcHJvYmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIHN0cnVjdCBhbWJhX2lkICppZCkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJaW50IHJldDsKKworCXJldCA9IGFtYmFfcmVxdWVzdF9yZWdpb25zKGRldiwgZGV2LT5kZXYuaW5pdF9uYW1lKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IC1FTk9NRU07CisJYmFzZSA9IGlvcmVtYXAoZGV2LT5yZXMuc3RhcnQsIHJlc291cmNlX3NpemUoJmRldi0+cmVzKSk7CisJaWYgKCFiYXNlKQorCQlnb3RvIG91dF9yZWxlYXNlOworCW5ta19ybmcucHJpdiA9ICh1bnNpZ25lZCBsb25nKWJhc2U7CisJcmV0ID0gaHdybmdfcmVnaXN0ZXIoJm5ta19ybmcpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubWFwOworCXJldHVybiAwOworCitvdXRfdW5tYXA6CisJaW91bm1hcChiYXNlKTsKK291dF9yZWxlYXNlOgorCWFtYmFfcmVsZWFzZV9yZWdpb25zKGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBubWtfcm5nX3JlbW92ZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldikKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopbm1rX3JuZy5wcml2OworCWh3cm5nX3VucmVnaXN0ZXIoJm5ta19ybmcpOworCWlvdW5tYXAoYmFzZSk7CisJYW1iYV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBhbWJhX2lkIG5ta19ybmdfaWRzW10gPSB7CisJeworCQkuaWQJPSAweDAwMDgwNWUxLAorCQkubWFzawk9IDB4MDAwZmZmZmYsIC8qIHRvcCBiaXRzIGFyZSByZXYgYW5kIGNmZzogYWNjZXB0IGFsbCAqLworCX0sCisJezAsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCBhbWJhX2RyaXZlciBubWtfcm5nX2RyaXZlciA9IHsKKwkuZHJ2ID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSAicm5nIiwKKwkJfSwKKwkucHJvYmUgPSBubWtfcm5nX3Byb2JlLAorCS5yZW1vdmUgPSBubWtfcm5nX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBubWtfcm5nX2lkcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5ta19ybmdfaW5pdCh2b2lkKQoreworCXJldHVybiBhbWJhX2RyaXZlcl9yZWdpc3Rlcigmbm1rX3JuZ19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbm1rX3JuZ19leGl0KHZvaWQpCit7CisJYW1iYV9kcml2ZXJfdW5yZWdpc3Rlcigmbm1rX3JuZ19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChubWtfcm5nX2luaXQpOworbW9kdWxlX2V4aXQobm1rX3JuZ19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMgYi9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYwppbmRleCBmNzA2YjFkLi5hZGEyNWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYworKysgYi9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYwpAQCAtMTE4NSwxMSArMTE4NSw2IEBACiAKIAlyZXAgPSAoZG93biA9PSAyKTsKIAotI2lmZGVmIENPTkZJR19NQUNfRU1VTU9VU0VCVE4KLQlpZiAobWFjX2hpZF9tb3VzZV9lbXVsYXRlX2J1dHRvbnMoMSwga2V5Y29kZSwgZG93bikpCi0JCXJldHVybjsKLSNlbmRpZiAvKiBDT05GSUdfTUFDX0VNVU1PVVNFQlROICovCi0KIAlpZiAoKHJhd19tb2RlID0gKGtiZC0+a2JkbW9kZSA9PSBWQ19SQVcpKSAmJiAhaHdfcmF3KQogCQlpZiAoZW11bGF0ZV9yYXcodmMsIGtleWNvZGUsICFkb3duIDw8IDcpKQogCQkJaWYgKGtleWNvZGUgPCBCVE5fTUlTQyAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCkBAIC0xMzI4LDYgKzEzMjMsMjEgQEAKIAlzY2hlZHVsZV9jb25zb2xlX2NhbGxiYWNrKCk7CiB9CiAKK3N0YXRpYyBib29sIGtiZF9tYXRjaChzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqaGFuZGxlciwgc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCWludCBpOworCisJaWYgKHRlc3RfYml0KEVWX1NORCwgZGV2LT5ldmJpdCkpCisJCXJldHVybiB0cnVlOworCisJaWYgKHRlc3RfYml0KEVWX0tFWSwgZGV2LT5ldmJpdCkpCisJCWZvciAoaSA9IEtFWV9SRVNFUlZFRDsgaSA8IEJUTl9NSVNDOyBpKyspCisJCQlpZiAodGVzdF9iaXQoaSwgZGV2LT5rZXliaXQpKQorCQkJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCiAvKgogICogV2hlbiBhIGtleWJvYXJkIChvciBvdGhlciBpbnB1dCBkZXZpY2UpIGlzIGZvdW5kLCB0aGUga2JkX2Nvbm5lY3QKICAqIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhlIGZ1bmN0aW9uIHRoZW4gbG9va3MgYXQgdGhlIGRldmljZSwgYW5kIGlmIGl0CkBAIC0xMzM5LDE0ICsxMzQ5LDYgQEAKIHsKIAlzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGU7CiAJaW50IGVycm9yOwotCWludCBpOwotCi0JZm9yIChpID0gS0VZX1JFU0VSVkVEOyBpIDwgQlROX01JU0M7IGkrKykKLQkJaWYgKHRlc3RfYml0KGksIGRldi0+a2V5Yml0KSkKLQkJCWJyZWFrOwotCi0JaWYgKGkgPT0gQlROX01JU0MgJiYgIXRlc3RfYml0KEVWX1NORCwgZGV2LT5ldmJpdCkpCi0JCXJldHVybiAtRU5PREVWOwogCiAJaGFuZGxlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlucHV0X2hhbmRsZSksIEdGUF9LRVJORUwpOwogCWlmICghaGFuZGxlKQpAQCAtMTQxMiw2ICsxNDE0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpbnB1dF9oYW5kbGVyIGtiZF9oYW5kbGVyID0gewogCS5ldmVudAkJPSBrYmRfZXZlbnQsCisJLm1hdGNoCQk9IGtiZF9tYXRjaCwKIAkuY29ubmVjdAk9IGtiZF9jb25uZWN0LAogCS5kaXNjb25uZWN0CT0ga2JkX2Rpc2Nvbm5lY3QsCiAJLnN0YXJ0CQk9IGtiZF9zdGFydCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tZW0uYyBiL2RyaXZlcnMvY2hhci9tZW0uYwppbmRleCBiZTgzMmI2Li40ODc4OGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbWVtLmMKKysrIGIvZHJpdmVycy9jaGFyL21lbS5jCkBAIC0zOTUsNiArMzk1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKIAlzc2l6ZV90IGxvd19jb3VudCwgcmVhZCwgc3o7CiAJY2hhciAqIGtidWY7IC8qIGstYWRkciBiZWNhdXNlIHZyZWFkKCkgdGFrZXMgdm1saXN0X2xvY2sgcndsb2NrICovCisJaW50IGVyciA9IDA7CiAKIAlyZWFkID0gMDsKIAlpZiAocCA8ICh1bnNpZ25lZCBsb25nKSBoaWdoX21lbW9yeSkgewpAQCAtNDQxLDEyICs0NDIsMTYgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQl3aGlsZSAoY291bnQgPiAwKSB7CiAJCQlzeiA9IHNpemVfaW5zaWRlX3BhZ2UocCwgY291bnQpOworCQkJaWYgKCFpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKCh2b2lkICopcCkpIHsKKwkJCQllcnIgPSAtRU5YSU87CisJCQkJYnJlYWs7CisJCQl9CiAJCQlzeiA9IHZyZWFkKGtidWYsIChjaGFyICopcCwgc3opOwogCQkJaWYgKCFzeikKIAkJCQlicmVhazsKIAkJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBrYnVmLCBzeikpIHsKLQkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpa2J1Zik7Ci0JCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJZXJyID0gLUVGQVVMVDsKKwkJCQlicmVhazsKIAkJCX0KIAkJCWNvdW50IC09IHN6OwogCQkJYnVmICs9IHN6OwpAQCAtNDU1LDggKzQ2MCw4IEBACiAJCX0KIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWtidWYpOwogCX0KLSAJKnBwb3MgPSBwOwotIAlyZXR1cm4gcmVhZDsKKwkqcHBvcyA9IHA7CisJcmV0dXJuIHJlYWQgPyByZWFkIDogZXJyOwogfQogCiAKQEAgLTUyMCw2ICs1MjUsNyBAQAogCXNzaXplX3Qgd3JvdGUgPSAwOwogCXNzaXplX3QgdmlydHIgPSAwOwogCWNoYXIgKiBrYnVmOyAvKiBrLWFkZHIgYmVjYXVzZSB2d3JpdGUoKSB0YWtlcyB2bWxpc3RfbG9jayByd2xvY2sgKi8KKwlpbnQgZXJyID0gMDsKIAogCWlmIChwIDwgKHVuc2lnbmVkIGxvbmcpIGhpZ2hfbWVtb3J5KSB7CiAJCXVuc2lnbmVkIGxvbmcgdG9fd3JpdGUgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBjb3VudCwKQEAgLTU0MCwxNCArNTQ2LDE2IEBACiAJCQl1bnNpZ25lZCBsb25nIHN6ID0gc2l6ZV9pbnNpZGVfcGFnZShwLCBjb3VudCk7CiAJCQl1bnNpZ25lZCBsb25nIG47CiAKKwkJCWlmICghaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcigodm9pZCAqKXApKSB7CisJCQkJZXJyID0gLUVOWElPOworCQkJCWJyZWFrOworCQkJfQogCQkJbiA9IGNvcHlfZnJvbV91c2VyKGtidWYsIGJ1Ziwgc3opOwogCQkJaWYgKG4pIHsKLQkJCQlpZiAod3JvdGUgKyB2aXJ0cikKLQkJCQkJYnJlYWs7Ci0JCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWtidWYpOwotCQkJCXJldHVybiAtRUZBVUxUOworCQkJCWVyciA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQlzeiA9IHZ3cml0ZShrYnVmLCAoY2hhciAqKXAsIHN6KTsKKwkJCXZ3cml0ZShrYnVmLCAoY2hhciAqKXAsIHN6KTsKIAkJCWNvdW50IC09IHN6OwogCQkJYnVmICs9IHN6OwogCQkJdmlydHIgKz0gc3o7CkBAIC01NTYsOCArNTY0LDggQEAKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWtidWYpOwogCX0KIAotIAkqcHBvcyA9IHA7Ci0gCXJldHVybiB2aXJ0ciArIHdyb3RlOworCSpwcG9zID0gcDsKKwlyZXR1cm4gdmlydHIgKyB3cm90ZSA/IDogZXJyOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9udnJhbS5jIGIvZHJpdmVycy9jaGFyL252cmFtLmMKaW5kZXggZmRiY2M5Zi4uNWViODNjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL252cmFtLmMKKysrIGIvZHJpdmVycy9jaGFyL252cmFtLmMKQEAgLTMzNiwxNCArMzM2LDEyIEBACiAKIHN0YXRpYyBpbnQgbnZyYW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlsb2NrX2tlcm5lbCgpOwogCXNwaW5fbG9jaygmbnZyYW1fc3RhdGVfbG9jayk7CiAKIAlpZiAoKG52cmFtX29wZW5fY250ICYmIChmaWxlLT5mX2ZsYWdzICYgT19FWENMKSkgfHwKIAkgICAgKG52cmFtX29wZW5fbW9kZSAmIE5WUkFNX0VYQ0wpIHx8CiAJICAgICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmIChudnJhbV9vcGVuX21vZGUgJiBOVlJBTV9XUklURSkpKSB7CiAJCXNwaW5fdW5sb2NrKCZudnJhbV9zdGF0ZV9sb2NrKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMzU0LDcgKzM1Miw2IEBACiAJbnZyYW1fb3Blbl9jbnQrKzsKIAogCXNwaW5fdW5sb2NrKCZudnJhbV9zdGF0ZV9sb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCmluZGV4IDJkYjRjMGEuLmM5YmM4OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwpAQCAtMTA0Nyw3ICsxMDQ3LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGNtbV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgY200MDAwX2RldiAqZGV2ID0gKHN0cnVjdCBjbTQwMDBfZGV2ICopIGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY200MDAwX2RldiAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAJdW5zaWduZWQgc2hvcnQgczsKIAl1bnNpZ25lZCBjaGFyIHRtcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYW5kb20uYyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwppbmRleCA4MjU4OTgyLi4yODQ5NzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKKysrIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCkBAIC0xMDUxLDEyICsxMDUxLDYgQEAKIAkJCQkvKiBsaWtlIGEgbmFtZWQgcGlwZSAqLwogCX0KIAotCS8qCi0JICogSWYgd2UgZ2F2ZSB0aGUgdXNlciBzb21lIGJ5dGVzLCB1cGRhdGUgdGhlIGFjY2VzcyB0aW1lLgotCSAqLwotCWlmIChjb3VudCkKLQkJZmlsZV9hY2Nlc3NlZChmaWxlKTsKLQogCXJldHVybiAoY291bnQgPyBjb3VudCA6IHJldHZhbCk7CiB9CiAKQEAgLTExMDcsNyArMTEwMSw2IEBACiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc2l6ZV90IHJldDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAogCXJldCA9IHdyaXRlX3Bvb2woJmJsb2NraW5nX3Bvb2wsIGJ1ZmZlciwgY291bnQpOwogCWlmIChyZXQpCkBAIC0xMTE2LDggKzExMDksNiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpbm9kZS0+aV9tdGltZSA9IGN1cnJlbnRfZnNfdGltZShpbm9kZS0+aV9zYik7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJcmV0dXJuIChzc2l6ZV90KWNvdW50OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pbmZpbmVvbi5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1faW5maW5lb24uYwppbmRleCBlY2JhNDk0Li5mNTg0NDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pbmZpbmVvbi5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2luZmluZW9uLmMKQEAgLTM5LDEyICszOSwxMiBAQAogc3RydWN0IHRwbV9pbmZfZGV2IHsKIAlpbnQgaW90eXBlOwogCi0Jdm9pZCBfX2lvbWVtICptZW1fYmFzZTsJCS8qIE1NSU8gaW9yZW1hcCdkIGFkZHIgKi8KLQl1bnNpZ25lZCBsb25nIG1hcF9iYXNlOwkJLyogcGh5cyBNTUlPIGJhc2UgKi8KLQl1bnNpZ25lZCBsb25nIG1hcF9zaXplOwkJLyogTU1JTyByZWdpb24gc2l6ZSAqLwotCXVuc2lnbmVkIGludCBpbmRleF9vZmY7CQkvKiBpbmRleCByZWdpc3RlciBvZmZzZXQgKi8KKwl2b2lkIF9faW9tZW0gKm1lbV9iYXNlOwkvKiBNTUlPIGlvcmVtYXAnZCBhZGRyICovCisJdW5zaWduZWQgbG9uZyBtYXBfYmFzZTsJLyogcGh5cyBNTUlPIGJhc2UgKi8KKwl1bnNpZ25lZCBsb25nIG1hcF9zaXplOwkvKiBNTUlPIHJlZ2lvbiBzaXplICovCisJdW5zaWduZWQgaW50IGluZGV4X29mZjsJLyogaW5kZXggcmVnaXN0ZXIgb2Zmc2V0ICovCiAKLQl1bnNpZ25lZCBpbnQgZGF0YV9yZWdzOwkJLyogRGF0YSByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBpbnQgZGF0YV9yZWdzOwkvKiBEYXRhIHJlZ2lzdGVycyAqLwogCXVuc2lnbmVkIGludCBkYXRhX3NpemU7CiAKIAl1bnNpZ25lZCBpbnQgY29uZmlnX3BvcnQ7CS8qIElPIFBvcnQgY29uZmlnIGluZGV4IHJlZyAqLwpAQCAtNDA2LDE0ICs0MDYsMTQgQEAKIAkubWlzY2RldiA9IHsuZm9wcyA9ICZpbmZfb3BzLH0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgdHBtX3BucF90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCB0cG1faW5mX3BucF90YmxbXSA9IHsKIAkvKiBJbmZpbmVvbiBUUE1zICovCiAJeyJJRlgwMTAxIiwgMH0sCiAJeyJJRlgwMTAyIiwgMH0sCiAJeyIiLCAwfQogfTsKIAotTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIHRwbV9wbnBfdGJsKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCB0cG1faW5mX3BucF90YmwpOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0cG1faW5mX3BucF9wcm9iZShzdHJ1Y3QgcG5wX2RldiAqZGV2LAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCAqZGV2X2lkKQpAQCAtNDMwLDcgKzQzMCw3IEBACiAJaWYgKHBucF9wb3J0X3ZhbGlkKGRldiwgMCkgJiYgcG5wX3BvcnRfdmFsaWQoZGV2LCAxKSAmJgogCSAgICAhKHBucF9wb3J0X2ZsYWdzKGRldiwgMCkgJiBJT1JFU09VUkNFX0RJU0FCTEVEKSkgewogCi0JICAgIAl0cG1fZGV2LmlvdHlwZSA9IFRQTV9JTkZfSU9fUE9SVDsKKwkJdHBtX2Rldi5pb3R5cGUgPSBUUE1fSU5GX0lPX1BPUlQ7CiAKIAkJdHBtX2Rldi5jb25maWdfcG9ydCA9IHBucF9wb3J0X3N0YXJ0KGRldiwgMCk7CiAJCXRwbV9kZXYuY29uZmlnX3NpemUgPSBwbnBfcG9ydF9sZW4oZGV2LCAwKTsKQEAgLTQ1OSw5ICs0NTksOSBAQAogCQkJZ290byBlcnJfbGFzdDsKIAkJfQogCX0gZWxzZSBpZiAocG5wX21lbV92YWxpZChkZXYsIDApICYmCi0JICAgICAgICAgICAhKHBucF9tZW1fZmxhZ3MoZGV2LCAwKSAmIElPUkVTT1VSQ0VfRElTQUJMRUQpKSB7CisJCSAgICEocG5wX21lbV9mbGFncyhkZXYsIDApICYgSU9SRVNPVVJDRV9ESVNBQkxFRCkpIHsKIAotCSAgICAJdHBtX2Rldi5pb3R5cGUgPSBUUE1fSU5GX0lPX01FTTsKKwkJdHBtX2Rldi5pb3R5cGUgPSBUUE1fSU5GX0lPX01FTTsKIAogCQl0cG1fZGV2Lm1hcF9iYXNlID0gcG5wX21lbV9zdGFydChkZXYsIDApOwogCQl0cG1fZGV2Lm1hcF9zaXplID0gcG5wX21lbV9sZW4oZGV2LCAwKTsKQEAgLTU2MywxMSArNTYzLDExIEBACiAJCQkgInByb2R1Y3QgaWQgMHglMDJ4JTAyeCIKIAkJCSAiJXNcbiIsCiAJCQkgdHBtX2Rldi5pb3R5cGUgPT0gVFBNX0lORl9JT19QT1JUID8KLQkJCQl0cG1fZGV2LmNvbmZpZ19wb3J0IDoKLQkJCQl0cG1fZGV2Lm1hcF9iYXNlICsgdHBtX2Rldi5pbmRleF9vZmYsCisJCQkgdHBtX2Rldi5jb25maWdfcG9ydCA6CisJCQkgdHBtX2Rldi5tYXBfYmFzZSArIHRwbV9kZXYuaW5kZXhfb2ZmLAogCQkJIHRwbV9kZXYuaW90eXBlID09IFRQTV9JTkZfSU9fUE9SVCA/Ci0JCQkJdHBtX2Rldi5kYXRhX3JlZ3MgOgotCQkJCXRwbV9kZXYubWFwX2Jhc2UgKyB0cG1fZGV2LmRhdGFfcmVncywKKwkJCSB0cG1fZGV2LmRhdGFfcmVncyA6CisJCQkgdHBtX2Rldi5tYXBfYmFzZSArIHRwbV9kZXYuZGF0YV9yZWdzLAogCQkJIHZlcnNpb25bMF0sIHZlcnNpb25bMV0sCiAJCQkgdmVuZG9yaWRbMF0sIHZlbmRvcmlkWzFdLAogCQkJIHByb2R1Y3RpZFswXSwgcHJvZHVjdGlkWzFdLCBjaGlwbmFtZSk7CkBAIC02MDcsMjAgKzYwNyw1NSBAQAogCQkJaW91bm1hcCh0cG1fZGV2Lm1lbV9iYXNlKTsKIAkJCXJlbGVhc2VfbWVtX3JlZ2lvbih0cG1fZGV2Lm1hcF9iYXNlLCB0cG1fZGV2Lm1hcF9zaXplKTsKIAkJfQorCQl0cG1fZGV2X3ZlbmRvcl9yZWxlYXNlKGNoaXApOwogCQl0cG1fcmVtb3ZlX2hhcmR3YXJlKGNoaXAtPmRldik7CiAJfQogfQogCitzdGF0aWMgaW50IHRwbV9pbmZfcG5wX3N1c3BlbmQoc3RydWN0IHBucF9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHBtX3N0YXRlKQoreworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IHBucF9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByYzsKKwlpZiAoY2hpcCkgeworCQl1OCBzYXZlc3RhdGVbXSA9IHsKKwkJCTAsIDE5MywJLyogVFBNX1RBR19SUVVfQ09NTUFORCAqLworCQkJMCwgMCwgMCwgMTAsCS8qIGJsb2IgbGVuZ3RoIChpbiBieXRlcykgKi8KKwkJCTAsIDAsIDAsIDE1MgkvKiBUUE1fT1JEX1NhdmVTdGF0ZSAqLworCQl9OworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJzYXZpbmcgVFBNIHN0YXRlXG4iKTsKKwkJcmMgPSB0cG1faW5mX3NlbmQoY2hpcCwgc2F2ZXN0YXRlLCBzaXplb2Yoc2F2ZXN0YXRlKSk7CisJCWlmIChyYyA8IDApIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiZXJyb3Igd2hpbGUgc2F2aW5nIFRQTSBzdGF0ZVxuIik7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHBtX2luZl9wbnBfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpkZXYpCit7CisJLyogUmUtY29uZmlndXJlIFRQTSBhZnRlciBzdXNwZW5kaW5nICovCisJdHBtX2NvbmZpZ19vdXQoRU5BQkxFX1JFR0lTVEVSX1BBSVIsIFRQTV9JTkZfQUREUik7CisJdHBtX2NvbmZpZ19vdXQoSU9MSU1ILCBUUE1fSU5GX0FERFIpOworCXRwbV9jb25maWdfb3V0KCh0cG1fZGV2LmRhdGFfcmVncyA+PiA4KSAmIDB4ZmYsIFRQTV9JTkZfREFUQSk7CisJdHBtX2NvbmZpZ19vdXQoSU9MSU1MLCBUUE1fSU5GX0FERFIpOworCXRwbV9jb25maWdfb3V0KCh0cG1fZGV2LmRhdGFfcmVncyAmIDB4ZmYpLCBUUE1fSU5GX0RBVEEpOworCS8qIGFjdGl2YXRlIHJlZ2lzdGVyICovCisJdHBtX2NvbmZpZ19vdXQoVFBNX0RBUiwgVFBNX0lORl9BRERSKTsKKwl0cG1fY29uZmlnX291dCgweDAxLCBUUE1fSU5GX0RBVEEpOworCXRwbV9jb25maWdfb3V0KERJU0FCTEVfUkVHSVNURVJfUEFJUiwgVFBNX0lORl9BRERSKTsKKwkvKiBkaXNhYmxlIFJFU0VULCBMUCBhbmQgSVJRQyAqLworCXRwbV9kYXRhX291dChSRVNFVF9MUF9JUlFDX0RJU0FCTEUsIENNRCk7CisJcmV0dXJuIHRwbV9wbV9yZXN1bWUoJmRldi0+ZGV2KTsKK30KKwogc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIHRwbV9pbmZfcG5wX2RyaXZlciA9IHsKIAkubmFtZSA9ICJ0cG1faW5mX3BucCIsCi0JLmRyaXZlciA9IHsKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5zdXNwZW5kID0gdHBtX3BtX3N1c3BlbmQsCi0JCS5yZXN1bWUgPSB0cG1fcG1fcmVzdW1lLAotCX0sCi0JLmlkX3RhYmxlID0gdHBtX3BucF90YmwsCisJLmlkX3RhYmxlID0gdHBtX2luZl9wbnBfdGJsLAogCS5wcm9iZSA9IHRwbV9pbmZfcG5wX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0cG1faW5mX3BucF9yZW1vdmUpLAorCS5zdXNwZW5kID0gdHBtX2luZl9wbnBfc3VzcGVuZCwKKwkucmVzdW1lID0gdHBtX2luZl9wbnBfcmVzdW1lLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0cG1faW5mX3BucF9yZW1vdmUpCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2luZih2b2lkKQpAQCAtNjM4LDUgKzY3Myw1IEBACiAKIE1PRFVMRV9BVVRIT1IoIk1hcmNlbCBTZWxob3JzdCA8bS5zZWxob3JzdEBzaXJyaXguY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEluZmluZW9uIFRQTSBTTEQgOTYzMCBUVCAxLjEgLyBTTEIgOTYzNSBUVCAxLjIiKTsKLU1PRFVMRV9WRVJTSU9OKCIxLjkiKTsKK01PRFVMRV9WRVJTSU9OKCIxLjkuMiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pby5jIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCmluZGV4IGM2ZjNiNDguLmRjYjkwODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfaW8uYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKQEAgLTE5NTEsOCArMTk1MSwxMCBAQAogCQkJcGlkID0gdGFza19waWQoY3VycmVudCk7CiAJCQl0eXBlID0gUElEVFlQRV9QSUQ7CiAJCX0KLQkJcmV0dmFsID0gX19mX3NldG93bihmaWxwLCBwaWQsIHR5cGUsIDApOworCQlnZXRfcGlkKHBpZCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+Y3RybF9sb2NrLCBmbGFncyk7CisJCXJldHZhbCA9IF9fZl9zZXRvd24oZmlscCwgcGlkLCB0eXBlLCAwKTsKKwkJcHV0X3BpZChwaWQpOwogCQlpZiAocmV0dmFsKQogCQkJZ290byBvdXQ7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci91dl9tbXRpbWVyLmMgYi9kcml2ZXJzL2NoYXIvdXZfbW10aW1lci5jCmluZGV4IDg2N2I2N2IuLmM3MDcyYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci91dl9tbXRpbWVyLmMKKysrIGIvZHJpdmVycy9jaGFyL3V2X21tdGltZXIuYwpAQCAtODksMTMgKzg5LDE3IEBACiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIE1NVElNRVJfR0VUT0ZGU0VUOgkvKiBvZmZzZXQgb2YgdGhlIGNvdW50ZXIgKi8KIAkJLyoKLQkJICogVVYgUlRDIHJlZ2lzdGVyIGlzIG9uIGl0cyBvd24gcGFnZQorCQkgKiBTdGFydGluZyB3aXRoIEhVQiByZXYgMi4wLCB0aGUgVVYgUlRDIHJlZ2lzdGVyIGlzCisJCSAqIHJlcGxpY2F0ZWQgYWNyb3NzIGFsbCBjYWNoZWxpbmVzIG9mIGl0J3Mgb3duIHBhZ2UuCisJCSAqIFRoaXMgYWxsb3dzIGZhc3RlciBzaW11bHRhbmVvdXMgcmVhZHMgZnJvbSBhIGdpdmVuIHNvY2tldC4KKwkJICoKKwkJICogVGhlIG9mZnNldCByZXR1cm5lZCBpcyBpbiA2NCBiaXQgdW5pdHMuCiAJCSAqLwotCQlpZiAoUEFHRV9TSVpFIDw9ICgxIDw8IDE2KSkKLQkJCXJldCA9ICgoVVZfTE9DQUxfTU1SX0JBU0UgfCBVVkhfUlRDKSAmIChQQUdFX1NJWkUtMSkpCi0JCQkJLyA4OworCQlpZiAodXZfZ2V0X21pbl9odWJfcmV2aXNpb25faWQoKSA9PSAxKQorCQkJcmV0ID0gMDsKIAkJZWxzZQotCQkJcmV0ID0gLUVOT1NZUzsKKwkJCXJldCA9ICgodXZfYmxhZGVfcHJvY2Vzc29yX2lkKCkgKiBMMV9DQUNIRV9CWVRFUykgJQorCQkJCQlQQUdFX1NJWkUpIC8gODsKIAkJYnJlYWs7CiAKIAljYXNlIE1NVElNRVJfR0VUUkVTOiAvKiByZXNvbHV0aW9uIG9mIHRoZSBjbG9jayBpbiAxMF4tMTUgcyAqLwpAQCAtMTE1LDggKzExOSw4IEBACiAJCXJldCA9IGh3ZWlnaHQ2NChVVkhfUlRDX1JFQUxfVElNRV9DTE9DS19NQVNLKTsKIAkJYnJlYWs7CiAKLQljYXNlIE1NVElNRVJfTU1BUEFWQUlMOiAvKiBjYW4gd2UgbW1hcCB0aGUgY2xvY2sgaW50byB1c2Vyc3BhY2U/ICovCi0JCXJldCA9IChQQUdFX1NJWkUgPD0gKDEgPDwgMTYpKSA/IDEgOiAwOworCWNhc2UgTU1USU1FUl9NTUFQQVZBSUw6CisJCXJldCA9IDE7CiAJCWJyZWFrOwogCiAJY2FzZSBNTVRJTUVSX0dFVENPVU5URVI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCmluZGV4IGEwMzVhZTMuLjIxMzM3M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCkBAIC0xLDE4ICsxLDYgQEAKLS8qRDozMDAKLSAqIFRoZSBHdWVzdCBjb25zb2xlIGRyaXZlcgotICoKLSAqIFdyaXRpbmcgY29uc29sZSBkcml2ZXJzIGlzIG9uZSBvZiB0aGUgZmV3IHJlbWFpbmluZyBEYXJrIEFydHMgaW4gTGludXguCi0gKiBGb3J0dW5hdGVseSBmb3IgdXMsIHRoZSBwYXRoIG9mIHZpcnR1YWwgY29uc29sZXMgaGFzIGJlZW4gd2VsbC10cm9kZGVuIGJ5Ci0gKiB0aGUgUG93ZXJQQyBmb2xrcywgd2hvIHdyb3RlICJodmNfY29uc29sZS5jIiB0byBnZW5lcmljYWxseSBzdXBwb3J0IGFueQotICogdmlydHVhbCBjb25zb2xlLiAgV2UgdXNlIHRoYXQgaW5mcmFzdHJ1Y3R1cmUgd2hpY2ggb25seSByZXF1aXJlcyB1cyB0byB3cml0ZQotICogdGhlIGJhc2ljIHB1dF9jaGFycyBhbmQgZ2V0X2NoYXJzIGZ1bmN0aW9ucyBhbmQgY2FsbCB0aGUgcmlnaHQgcmVnaXN0ZXIKLSAqIGZ1bmN0aW9ucy4KLSA6Ki8KLQotLypNOjAwMiBUaGUgY29uc29sZSBjYW4gYmUgZmxvb2RlZDogd2hpbGUgdGhlIEd1ZXN0IGlzIHByb2Nlc3NpbmcgaW5wdXQgdGhlCi0gKiBIb3N0IGNhbiBzZW5kIG1vcmUuICBCdWZmZXJpbmcgaW4gdGhlIEhvc3QgY291bGQgYWxsZXZpYXRlIHRoaXMsIGJ1dCBpdCBpcyBhCi0gKiBkaWZmaWN1bHQgcHJvYmxlbSBpbiBnZW5lcmFsLiA6Ki8KLS8qIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBSdXN0eSBSdXNzZWxsLCBJQk0gQ29ycG9yYXRpb24KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgUnVzdHkgUnVzc2VsbCwgSUJNIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgUmVkIEhhdCwgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjgsMTQyICsxNiw2OTQgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgImh2Y19jb25zb2xlLmgiCiAKLS8qRDozNDAgVGhlc2UgcmVwcmVzZW50IG91ciBpbnB1dCBhbmQgb3V0cHV0IGNvbnNvbGUgcXVldWVzLCBhbmQgdGhlIHZpcnRpbwotICogb3BlcmF0aW9ucyBmb3IgdGhlbS4gKi8KLXN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICppbl92cSwgKm91dF92cTsKLXN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKLQotLyogVGhpcyBpcyBvdXIgaW5wdXQgYnVmZmVyLCBhbmQgaG93IG11Y2ggZGF0YSBpcyBsZWZ0IGluIGl0LiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpbl9sZW47Ci1zdGF0aWMgY2hhciAqaW4sICppbmJ1ZjsKLQotLyogVGhlIG9wZXJhdGlvbnMgZm9yIG91ciBjb25zb2xlLiAqLwotc3RhdGljIHN0cnVjdCBodl9vcHMgdmlydGlvX2NvbnM7Ci0KLS8qIFRoZSBodmMgZGV2aWNlICovCi1zdGF0aWMgc3RydWN0IGh2Y19zdHJ1Y3QgKmh2YzsKLQotLypEOjMxMCBUaGUgcHV0X2NoYXJzKCkgY2FsbGJhY2sgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KKy8qCisgKiBUaGlzIGlzIGEgZ2xvYmFsIHN0cnVjdCBmb3Igc3RvcmluZyBjb21tb24gZGF0YSBmb3IgYWxsIHRoZSBkZXZpY2VzCisgKiB0aGlzIGRyaXZlciBoYW5kbGVzLgogICoKLSAqIFdlIHR1cm4gdGhlIGNoYXJhY3RlcnMgaW50byBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QsIGFkZCBpdCB0byB0aGUgb3V0cHV0Ci0gKiBxdWV1ZSBhbmQgdGhlbiBraWNrIHRoZSBIb3N0LiAgVGhlbiB3ZSBzaXQgaGVyZSB3YWl0aW5nIGZvciBpdCB0byBmaW5pc2g6Ci0gKiBpbmVmZmljaWVudCBpbiB0aGVvcnksIGJ1dCBpbiBwcmFjdGljZSBpbXBsZW1lbnRhdGlvbnMgd2lsbCBkbyBpdAotICogaW1tZWRpYXRlbHkgKGxndWVzdCdzIExhdW5jaGVyIGRvZXMpLiAqLwotc3RhdGljIGludCBwdXRfY2hhcnModTMyIHZ0ZXJtbm8sIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGNvdW50KQorICogTWFpbmx5LCBpdCBoYXMgYSBsaW5rZWQgbGlzdCBmb3IgYWxsIHRoZSBjb25zb2xlcyBpbiBvbmUgcGxhY2Ugc28KKyAqIHRoYXQgY2FsbGJhY2tzIGZyb20gaHZjIGZvciBnZXRfY2hhcnMoKSwgcHV0X2NoYXJzKCkgd29yayBwcm9wZXJseQorICogYWNyb3NzIG11bHRpcGxlIGRldmljZXMgYW5kIG11bHRpcGxlIHBvcnRzIHBlciBkZXZpY2UuCisgKi8KK3N0cnVjdCBwb3J0c19kcml2ZXJfZGF0YSB7CisJLyogVXNlZCBmb3IgcmVnaXN0ZXJpbmcgY2hhcmRldnMgKi8KKwlzdHJ1Y3QgY2xhc3MgKmNsYXNzOworCisJLyogVXNlZCBmb3IgZXhwb3J0aW5nIHBlci1wb3J0IGluZm9ybWF0aW9uIHRvIGRlYnVnZnMgKi8KKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RpcjsKKworCS8qIE51bWJlciBvZiBkZXZpY2VzIHRoaXMgZHJpdmVyIGlzIGhhbmRsaW5nICovCisJdW5zaWduZWQgaW50IGluZGV4OworCisJLyoKKwkgKiBUaGlzIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGh2YyBjb25zb2xlcworCSAqIHNwYXduZWQgYnkgdGhpcyBkcml2ZXIuICBUaGlzIG51bWJlciBpcyBnaXZlbiBhcyB0aGUgZmlyc3QKKwkgKiBhcmd1bWVudCB0byBodmNfYWxsb2MoKS4gIFRvIGNvcnJlY3RseSBtYXAgYW4gaW5pdGlhbAorCSAqIGNvbnNvbGUgc3Bhd25lZCB2aWEgaHZjX2luc3RhbnRpYXRlIHRvIHRoZSBjb25zb2xlIGJlaW5nCisJICogaG9va2VkIHVwIHZpYSBodmNfYWxsb2MsIHdlIG5lZWQgdG8gcGFzcyB0aGUgc2FtZSB2dGVybW5vLgorCSAqCisJICogV2UgYWxzbyBqdXN0IGFzc3VtZSB0aGUgZmlyc3QgY29uc29sZSBiZWluZyBpbml0aWFsaXNlZCB3YXMKKwkgKiB0aGUgZmlyc3Qgb25lIHRoYXQgZ290IHVzZWQgYXMgdGhlIGluaXRpYWwgY29uc29sZS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgbmV4dF92dGVybW5vOworCisJLyogQWxsIHRoZSBjb25zb2xlIGRldmljZXMgaGFuZGxlZCBieSB0aGlzIGRyaXZlciAqLworCXN0cnVjdCBsaXN0X2hlYWQgY29uc29sZXM7Cit9Oworc3RhdGljIHN0cnVjdCBwb3J0c19kcml2ZXJfZGF0YSBwZHJ2ZGF0YTsKKworREVGSU5FX1NQSU5MT0NLKHBkcnZkYXRhX2xvY2spOworCisvKiBUaGlzIHN0cnVjdCBob2xkcyBpbmZvcm1hdGlvbiB0aGF0J3MgcmVsZXZhbnQgb25seSBmb3IgY29uc29sZSBwb3J0cyAqLworc3RydWN0IGNvbnNvbGUgeworCS8qIFdlJ2xsIHBsYWNlIGFsbCBjb25zb2xlcyBpbiBhIGxpc3QgaW4gdGhlIHBkcnZkYXRhIHN0cnVjdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIFRoZSBodmMgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbnNvbGUgcG9ydCAqLworCXN0cnVjdCBodmNfc3RydWN0ICpodmM7CisKKwkvKgorCSAqIFRoaXMgbnVtYmVyIGlkZW50aWZpZXMgdGhlIG51bWJlciB0aGF0IHdlIHVzZWQgdG8gcmVnaXN0ZXIKKwkgKiB3aXRoIGh2YyBpbiBodmNfaW5zdGFudGlhdGUoKSBhbmQgaHZjX2FsbG9jKCk7IHRoaXMgaXMgdGhlCisJICogbnVtYmVyIHBhc3NlZCBvbiBieSB0aGUgaHZjIGNhbGxiYWNrcyB0byB1cyB0bworCSAqIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgb3RoZXIgY29uc29sZSBwb3J0cyBoYW5kbGVkIGJ5CisJICogdGhpcyBkcml2ZXIKKwkgKi8KKwl1MzIgdnRlcm1ubzsKK307CisKK3N0cnVjdCBwb3J0X2J1ZmZlciB7CisJY2hhciAqYnVmOworCisJLyogc2l6ZSBvZiB0aGUgYnVmZmVyIGluICpidWYgYWJvdmUgKi8KKwlzaXplX3Qgc2l6ZTsKKworCS8qIHVzZWQgbGVuZ3RoIG9mIHRoZSBidWZmZXIgKi8KKwlzaXplX3QgbGVuOworCS8qIG9mZnNldCBpbiB0aGUgYnVmIGZyb20gd2hpY2ggdG8gY29uc3VtZSBkYXRhICovCisJc2l6ZV90IG9mZnNldDsKK307CisKKy8qCisgKiBUaGlzIGlzIGEgcGVyLWRldmljZSBzdHJ1Y3QgdGhhdCBzdG9yZXMgZGF0YSBjb21tb24gdG8gYWxsIHRoZQorICogcG9ydHMgZm9yIHRoYXQgZGV2aWNlICh2ZGV2LT5wcml2KS4KKyAqLworc3RydWN0IHBvcnRzX2RldmljZSB7CisJLyoKKwkgKiBXb3JrcXVldWUgaGFuZGxlcnMgd2hlcmUgd2UgcHJvY2VzcyBkZWZlcnJlZCB3b3JrIGFmdGVyCisJICogbm90aWZpY2F0aW9uCisJICovCisJc3RydWN0IHdvcmtfc3RydWN0IGNvbnRyb2xfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29uZmlnX3dvcms7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBvcnRzOworCisJLyogVG8gcHJvdGVjdCB0aGUgbGlzdCBvZiBwb3J0cyAqLworCXNwaW5sb2NrX3QgcG9ydHNfbG9jazsKKworCS8qIFRvIHByb3RlY3QgdGhlIHZxIG9wZXJhdGlvbnMgZm9yIHRoZSBjb250cm9sIGNoYW5uZWwgKi8KKwlzcGlubG9ja190IGN2cV9sb2NrOworCisJLyogVGhlIGN1cnJlbnQgY29uZmlnIHNwYWNlIGlzIHN0b3JlZCBoZXJlICovCisJc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZyBjb25maWc7CisKKwkvKiBUaGUgdmlydGlvIGRldmljZSB3ZSdyZSBhc3NvY2lhdGVkIHdpdGggKi8KKwlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKKworCS8qCisJICogQSBjb3VwbGUgb2YgdmlydHF1ZXVlcyBmb3IgdGhlIGNvbnRyb2wgY2hhbm5lbDogb25lIGZvcgorCSAqIGd1ZXN0LT5ob3N0IHRyYW5zZmVycywgb25lIGZvciBob3N0LT5ndWVzdCB0cmFuc2ZlcnMKKwkgKi8KKwlzdHJ1Y3QgdmlydHF1ZXVlICpjX2l2cSwgKmNfb3ZxOworCisJLyogQXJyYXkgb2YgcGVyLXBvcnQgSU8gdmlydHF1ZXVlcyAqLworCXN0cnVjdCB2aXJ0cXVldWUgKippbl92cXMsICoqb3V0X3ZxczsKKworCS8qIFVzZWQgZm9yIG51bWJlcmluZyBkZXZpY2VzIGZvciBzeXNmcyBhbmQgZGVidWdmcyAqLworCXVuc2lnbmVkIGludCBkcnZfaW5kZXg7CisKKwkvKiBNYWpvciBudW1iZXIgZm9yIHRoaXMgZGV2aWNlLiAgUG9ydHMgd2lsbCBiZSBjcmVhdGVkIGFzIG1pbm9ycy4gKi8KKwlpbnQgY2hyX21ham9yOworfTsKKworLyogVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIHBlci1wb3J0IGRhdGEgKi8KK3N0cnVjdCBwb3J0IHsKKwkvKiBOZXh0IHBvcnQgaW4gdGhlIGxpc3QsIGhlYWQgaXMgaW4gdGhlIHBvcnRzX2RldmljZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIFBvaW50ZXIgdG8gdGhlIHBhcmVudCB2aXJ0aW9fY29uc29sZSBkZXZpY2UgKi8KKwlzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2OworCisJLyogVGhlIGN1cnJlbnQgYnVmZmVyIGZyb20gd2hpY2ggZGF0YSBoYXMgdG8gYmUgZmVkIHRvIHJlYWRlcnMgKi8KKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmluYnVmOworCisJLyoKKwkgKiBUbyBwcm90ZWN0IHRoZSBvcGVyYXRpb25zIG9uIHRoZSBpbl92cSBhc3NvY2lhdGVkIHdpdGggdGhpcworCSAqIHBvcnQuICBIYXMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIGl0IGNhbiBiZSBjYWxsZWQgZnJvbQorCSAqIGludGVycnVwdCBjb250ZXh0IChnZXRfY2hhcigpKS4KKwkgKi8KKwlzcGlubG9ja190IGluYnVmX2xvY2s7CisKKwkvKiBUaGUgSU8gdnFzIGZvciB0aGlzIHBvcnQgKi8KKwlzdHJ1Y3QgdmlydHF1ZXVlICppbl92cSwgKm91dF92cTsKKworCS8qIEZpbGUgaW4gdGhlIGRlYnVnZnMgZGlyZWN0b3J5IHRoYXQgZXhwb3NlcyB0aGlzIHBvcnQncyBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZmlsZTsKKworCS8qCisJICogVGhlIGVudHJpZXMgaW4gdGhpcyBzdHJ1Y3Qgd2lsbCBiZSB2YWxpZCBpZiB0aGlzIHBvcnQgaXMKKwkgKiBob29rZWQgdXAgdG8gYW4gaHZjIGNvbnNvbGUKKwkgKi8KKwlzdHJ1Y3QgY29uc29sZSBjb25zOworCisJLyogRWFjaCBwb3J0IGFzc29jaWF0ZXMgd2l0aCBhIHNlcGFyYXRlIGNoYXIgZGV2aWNlICovCisJc3RydWN0IGNkZXYgY2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwkvKiBBIHdhaXRxdWV1ZSBmb3IgcG9sbCgpIG9yIGJsb2NraW5nIHJlYWQgb3BlcmF0aW9ucyAqLworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxdWV1ZTsKKworCS8qIFRoZSAnbmFtZScgb2YgdGhlIHBvcnQgdGhhdCB3ZSBleHBvc2UgdmlhIHN5c2ZzIHByb3BlcnRpZXMgKi8KKwljaGFyICpuYW1lOworCisJLyogVGhlICdpZCcgdG8gaWRlbnRpZnkgdGhlIHBvcnQgd2l0aCB0aGUgSG9zdCAqLworCXUzMiBpZDsKKworCS8qIElzIHRoZSBob3N0IGRldmljZSBvcGVuICovCisJYm9vbCBob3N0X2Nvbm5lY3RlZDsKKworCS8qIFdlIHNob3VsZCBhbGxvdyBvbmx5IG9uZSBwcm9jZXNzIHRvIG9wZW4gYSBwb3J0ICovCisJYm9vbCBndWVzdF9jb25uZWN0ZWQ7Cit9OworCisvKiBUaGlzIGlzIHRoZSB2ZXJ5IGVhcmx5IGFyY2gtc3BlY2lmaWVkIHB1dCBjaGFycyBmdW5jdGlvbi4gKi8KK3N0YXRpYyBpbnQgKCplYXJseV9wdXRfY2hhcnMpKHUzMiwgY29uc3QgY2hhciAqLCBpbnQpOworCitzdGF0aWMgc3RydWN0IHBvcnQgKmZpbmRfcG9ydF9ieV92dGVybW5vKHUzMiB2dGVybW5vKQogewotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgY29uc29sZSAqY29uczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBkcnZkYXRhX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbnMsICZwZHJ2ZGF0YS5jb25zb2xlcywgbGlzdCkgeworCQlpZiAoY29ucy0+dnRlcm1ubyA9PSB2dGVybW5vKSB7CisJCQlwb3J0ID0gY29udGFpbmVyX29mKGNvbnMsIHN0cnVjdCBwb3J0LCBjb25zKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCXBvcnQgPSBOVUxMOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkcnZkYXRhX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcG9ydDsKK30KKworc3RhdGljIHN0cnVjdCBwb3J0ICpmaW5kX3BvcnRfYnlfaWQoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldiwgdTMyIGlkKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydGRldi0+cG9ydHNfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJnBvcnRkZXYtPnBvcnRzLCBsaXN0KQorCQlpZiAocG9ydC0+aWQgPT0gaWQpCisJCQlnb3RvIG91dDsKKwlwb3J0ID0gTlVMTDsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGV2LT5wb3J0c19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcG9ydDsKK30KKworc3RhdGljIHN0cnVjdCBwb3J0ICpmaW5kX3BvcnRfYnlfdnEoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldiwKKwkJCQkgICAgc3RydWN0IHZpcnRxdWV1ZSAqdnEpCit7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGV2LT5wb3J0c19sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmcG9ydGRldi0+cG9ydHMsIGxpc3QpCisJCWlmIChwb3J0LT5pbl92cSA9PSB2cSB8fCBwb3J0LT5vdXRfdnEgPT0gdnEpCisJCQlnb3RvIG91dDsKKwlwb3J0ID0gTlVMTDsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGV2LT5wb3J0c19sb2NrLCBmbGFncyk7CisJcmV0dXJuIHBvcnQ7Cit9CisKK3N0YXRpYyBib29sIGlzX2NvbnNvbGVfcG9ydChzdHJ1Y3QgcG9ydCAqcG9ydCkKK3sKKwlpZiAocG9ydC0+Y29ucy5odmMpCisJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIHVzZV9tdWx0aXBvcnQoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldikKK3sKKwkvKgorCSAqIFRoaXMgY29uZGl0aW9uIGNhbiBiZSB0cnVlIHdoZW4gcHV0X2NoYXJzIGlzIGNhbGxlZCBmcm9tCisJICogZWFybHlfaW5pdAorCSAqLworCWlmICghcG9ydGRldi0+dmRldikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBvcnRkZXYtPnZkZXYtPmZlYXR1cmVzWzBdICYgKDEgPDwgVklSVElPX0NPTlNPTEVfRl9NVUxUSVBPUlQpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2J1ZihzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZikKK3sKKwlrZnJlZShidWYtPmJ1Zik7CisJa2ZyZWUoYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBwb3J0X2J1ZmZlciAqYWxsb2NfYnVmKHNpemVfdCBidWZfc2l6ZSkKK3sKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKworCWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKCpidWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBmYWlsOworCWJ1Zi0+YnVmID0ga3phbGxvYyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYtPmJ1ZikKKwkJZ290byBmcmVlX2J1ZjsKKwlidWYtPmxlbiA9IDA7CisJYnVmLT5vZmZzZXQgPSAwOworCWJ1Zi0+c2l6ZSA9IGJ1Zl9zaXplOworCXJldHVybiBidWY7CisKK2ZyZWVfYnVmOgorCWtmcmVlKGJ1Zik7CitmYWlsOgorCXJldHVybiBOVUxMOworfQorCisvKiBDYWxsZXJzIHNob3VsZCB0YWtlIGFwcHJvcHJpYXRlIGxvY2tzICovCitzdGF0aWMgdm9pZCAqZ2V0X2luYnVmKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCXN0cnVjdCB2aXJ0cXVldWUgKnZxOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQkvKiBUaGlzIGlzIGEgY29udmVuaWVudCByb3V0aW5lIHRvIGluaXRpYWxpemUgYSBzaW5nbGUtZWxlbSBzZyBsaXN0ICovCi0Jc2dfaW5pdF9vbmUoc2csIGJ1ZiwgY291bnQpOwotCi0JLyogYWRkX2J1ZiB3YW50cyBhIHRva2VuIHRvIGlkZW50aWZ5IHRoaXMgYnVmZmVyOiB3ZSBoYW5kIGl0IGFueQotCSAqIG5vbi1OVUxMIHBvaW50ZXIsIHNpbmNlIHRoZXJlJ3Mgb25seSBldmVyIG9uZSBidWZmZXIuICovCi0JaWYgKG91dF92cS0+dnFfb3BzLT5hZGRfYnVmKG91dF92cSwgc2csIDEsIDAsICh2b2lkICopMSkgPj0gMCkgewotCQkvKiBUZWxsIEhvc3QgdG8gZ28hICovCi0JCW91dF92cS0+dnFfb3BzLT5raWNrKG91dF92cSk7Ci0JCS8qIENoaWxsIG91dCB1bnRpbCBpdCdzIGRvbmUgd2l0aCB0aGUgYnVmZmVyLiAqLwotCQl3aGlsZSAoIW91dF92cS0+dnFfb3BzLT5nZXRfYnVmKG91dF92cSwgJmxlbikpCi0JCQljcHVfcmVsYXgoKTsKKwl2cSA9IHBvcnQtPmluX3ZxOworCWJ1ZiA9IHZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pOworCWlmIChidWYpIHsKKwkJYnVmLT5sZW4gPSBsZW47CisJCWJ1Zi0+b2Zmc2V0ID0gMDsKIAl9Ci0KLQkvKiBXZSdyZSBleHBlY3RlZCB0byByZXR1cm4gdGhlIGFtb3VudCBvZiBkYXRhIHdlIHdyb3RlOiBhbGwgb2YgaXQuICovCi0JcmV0dXJuIGNvdW50OworCXJldHVybiBidWY7CiB9CiAKLS8qIENyZWF0ZSBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QgcmVwcmVzZW50aW5nIG91ciBpbnB1dCBidWZmZXIgYW5kIHB1dCBpdCBpbiB0aGUKLSAqIHF1ZXVlLiAqLwotc3RhdGljIHZvaWQgYWRkX2luYnVmKHZvaWQpCisvKgorICogQ3JlYXRlIGEgc2NhdHRlci1nYXRoZXIgbGlzdCByZXByZXNlbnRpbmcgb3VyIGlucHV0IGJ1ZmZlciBhbmQgcHV0CisgKiBpdCBpbiB0aGUgcXVldWUuCisgKgorICogQ2FsbGVycyBzaG91bGQgdGFrZSBhcHByb3ByaWF0ZSBsb2Nrcy4KKyAqLworc3RhdGljIGludCBhZGRfaW5idWYoc3RydWN0IHZpcnRxdWV1ZSAqdnEsIHN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKLQlzZ19pbml0X29uZShzZywgaW5idWYsIFBBR0VfU0laRSk7CisJaW50IHJldDsKIAotCS8qIFdlIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBhZGQgb25lIGJ1ZmZlciB0byBhbiBlbXB0eSBxdWV1ZS4gKi8KLQlpZiAoaW5fdnEtPnZxX29wcy0+YWRkX2J1Zihpbl92cSwgc2csIDAsIDEsIGluYnVmKSA8IDApCi0JCUJVRygpOwotCWluX3ZxLT52cV9vcHMtPmtpY2soaW5fdnEpOworCXNnX2luaXRfb25lKHNnLCBidWYtPmJ1ZiwgYnVmLT5zaXplKTsKKworCXJldCA9IHZxLT52cV9vcHMtPmFkZF9idWYodnEsIHNnLCAwLCAxLCBidWYpOworCXZxLT52cV9vcHMtPmtpY2sodnEpOworCXJldHVybiByZXQ7CiB9CiAKLS8qRDozNTAgZ2V0X2NoYXJzKCkgaXMgdGhlIGNhbGxiYWNrIGZyb20gdGhlIGh2Y19jb25zb2xlIGluZnJhc3RydWN0dXJlIHdoZW4KLSAqIGFuIGludGVycnVwdCBpcyByZWNlaXZlZC4KKy8qIERpc2NhcmQgYW55IHVucmVhZCBkYXRhIHRoaXMgcG9ydCBoYXMuIENhbGxlcnMgbG9ja2Vycy4gKi8KK3N0YXRpYyB2b2lkIGRpc2NhcmRfcG9ydF9kYXRhKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCXN0cnVjdCB2aXJ0cXVldWUgKnZxOworCXVuc2lnbmVkIGludCBsZW47CisJaW50IHJldDsKKworCXZxID0gcG9ydC0+aW5fdnE7CisJaWYgKHBvcnQtPmluYnVmKQorCQlidWYgPSBwb3J0LT5pbmJ1ZjsKKwllbHNlCisJCWJ1ZiA9IHZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pOworCisJcmV0ID0gMDsKKwl3aGlsZSAoYnVmKSB7CisJCWlmIChhZGRfaW5idWYodnEsIGJ1ZikgPCAwKSB7CisJCQlyZXQrKzsKKwkJCWZyZWVfYnVmKGJ1Zik7CisJCX0KKwkJYnVmID0gdnEtPnZxX29wcy0+Z2V0X2J1Zih2cSwgJmxlbik7CisJfQorCXBvcnQtPmluYnVmID0gTlVMTDsKKwlpZiAocmV0KQorCQlkZXZfd2Fybihwb3J0LT5kZXYsICJFcnJvcnMgYWRkaW5nICVkIGJ1ZmZlcnMgYmFjayB0byB2cVxuIiwKKwkJCSByZXQpOworfQorCitzdGF0aWMgYm9vbCBwb3J0X2hhc19kYXRhKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCWlmIChwb3J0LT5pbmJ1ZikgeworCQlyZXQgPSB0cnVlOworCQlnb3RvIG91dDsKKwl9CisJcG9ydC0+aW5idWYgPSBnZXRfaW5idWYocG9ydCk7CisJaWYgKHBvcnQtPmluYnVmKSB7CisJCXJldCA9IHRydWU7CisJCWdvdG8gb3V0OworCX0KKwlyZXQgPSBmYWxzZTsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5pbmJ1Zl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgc2VuZF9jb250cm9sX21zZyhzdHJ1Y3QgcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGV2ZW50LAorCQkJCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07CisJc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbnRyb2wgY3BrdDsKKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKKwlpbnQgbGVuOworCisJaWYgKCF1c2VfbXVsdGlwb3J0KHBvcnQtPnBvcnRkZXYpKQorCQlyZXR1cm4gMDsKKworCWNwa3QuaWQgPSBwb3J0LT5pZDsKKwljcGt0LmV2ZW50ID0gZXZlbnQ7CisJY3BrdC52YWx1ZSA9IHZhbHVlOworCisJdnEgPSBwb3J0LT5wb3J0ZGV2LT5jX292cTsKKworCXNnX2luaXRfb25lKHNnLCAmY3BrdCwgc2l6ZW9mKGNwa3QpKTsKKwlpZiAodnEtPnZxX29wcy0+YWRkX2J1Zih2cSwgc2csIDEsIDAsICZjcGt0KSA+PSAwKSB7CisJCXZxLT52cV9vcHMtPmtpY2sodnEpOworCQl3aGlsZSAoIXZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pKQorCQkJY3B1X3JlbGF4KCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBzZW5kX2J1ZihzdHJ1Y3QgcG9ydCAqcG9ydCwgdm9pZCAqaW5fYnVmLCBzaXplX3QgaW5fY291bnQpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOworCXN0cnVjdCB2aXJ0cXVldWUgKm91dF92cTsKKwlzc2l6ZV90IHJldDsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJb3V0X3ZxID0gcG9ydC0+b3V0X3ZxOworCisJc2dfaW5pdF9vbmUoc2csIGluX2J1ZiwgaW5fY291bnQpOworCXJldCA9IG91dF92cS0+dnFfb3BzLT5hZGRfYnVmKG91dF92cSwgc2csIDEsIDAsIGluX2J1Zik7CisKKwkvKiBUZWxsIEhvc3QgdG8gZ28hICovCisJb3V0X3ZxLT52cV9vcHMtPmtpY2sob3V0X3ZxKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWxlbiA9IDA7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKgorCSAqIFdhaXQgdGlsbCB0aGUgaG9zdCBhY2tub3dsZWRnZXMgaXQgcHVzaGVkIG91dCB0aGUgZGF0YSB3ZQorCSAqIHNlbnQuIEFsc28gZW5zdXJlIHdlIHJldHVybiB0byB1c2Vyc3BhY2UgdGhlIG51bWJlciBvZgorCSAqIGJ5dGVzIHRoYXQgd2VyZSBzdWNjZXNzZnVsbHkgY29uc3VtZWQgYnkgdGhlIGhvc3QuCisJICovCisJd2hpbGUgKCFvdXRfdnEtPnZxX29wcy0+Z2V0X2J1ZihvdXRfdnEsICZsZW4pKQorCQljcHVfcmVsYXgoKTsKK2ZhaWw6CisJLyogV2UncmUgZXhwZWN0ZWQgdG8gcmV0dXJuIHRoZSBhbW91bnQgb2YgZGF0YSB3ZSB3cm90ZSAqLworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBHaXZlIG91dCB0aGUgZGF0YSB0aGF0J3MgcmVxdWVzdGVkIGZyb20gdGhlIGJ1ZmZlciB0aGF0IHdlIGhhdmUKKyAqIHF1ZXVlZCB1cC4KKyAqLworc3RhdGljIHNzaXplX3QgZmlsbF9yZWFkYnVmKHN0cnVjdCBwb3J0ICpwb3J0LCBjaGFyICpvdXRfYnVmLCBzaXplX3Qgb3V0X2NvdW50LAorCQkJICAgIGJvb2wgdG9fdXNlcikKK3sKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFvdXRfY291bnQgfHwgIXBvcnRfaGFzX2RhdGEocG9ydCkpCisJCXJldHVybiAwOworCisJYnVmID0gcG9ydC0+aW5idWY7CisJb3V0X2NvdW50ID0gbWluKG91dF9jb3VudCwgYnVmLT5sZW4gLSBidWYtPm9mZnNldCk7CisKKwlpZiAodG9fdXNlcikgeworCQlzc2l6ZV90IHJldDsKKworCQlyZXQgPSBjb3B5X3RvX3VzZXIob3V0X2J1ZiwgYnVmLT5idWYgKyBidWYtPm9mZnNldCwgb3V0X2NvdW50KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtRUZBVUxUOworCX0gZWxzZSB7CisJCW1lbWNweShvdXRfYnVmLCBidWYtPmJ1ZiArIGJ1Zi0+b2Zmc2V0LCBvdXRfY291bnQpOworCX0KKworCWJ1Zi0+b2Zmc2V0ICs9IG91dF9jb3VudDsKKworCWlmIChidWYtPm9mZnNldCA9PSBidWYtPmxlbikgeworCQkvKgorCQkgKiBXZSdyZSBkb25lIHVzaW5nIGFsbCB0aGUgZGF0YSBpbiB0aGlzIGJ1ZmZlci4KKwkJICogUmUtcXVldWUgc28gdGhhdCB0aGUgSG9zdCBjYW4gc2VuZCB1cyBtb3JlIGRhdGEuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCQlwb3J0LT5pbmJ1ZiA9IE5VTEw7CisKKwkJaWYgKGFkZF9pbmJ1Zihwb3J0LT5pbl92cSwgYnVmKSA8IDApCisJCQlkZXZfd2Fybihwb3J0LT5kZXYsICJmYWlsZWQgYWRkX2J1ZlxuIik7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCX0KKwkvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSBjb3BpZWQgKi8KKwlyZXR1cm4gb3V0X2NvdW50OworfQorCisvKiBUaGUgY29uZGl0aW9uIHRoYXQgbXVzdCBiZSB0cnVlIGZvciBwb2xsaW5nIHRvIGVuZCAqLworc3RhdGljIGJvb2wgd2FpdF9pc19vdmVyKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXJldHVybiBwb3J0X2hhc19kYXRhKHBvcnQpIHx8ICFwb3J0LT5ob3N0X2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHNzaXplX3QgcG9ydF9mb3BzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnApCit7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisJc3NpemVfdCByZXQ7CisKKwlwb3J0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKCFwb3J0X2hhc19kYXRhKHBvcnQpKSB7CisJCS8qCisJCSAqIElmIG5vdGhpbmcncyBjb25uZWN0ZWQgb24gdGhlIGhvc3QganVzdCByZXR1cm4gMCBpbgorCQkgKiBjYXNlIG9mIGxpc3RfZW1wdHk7IHRoaXMgdGVsbHMgdGhlIHVzZXJzcGFjZSBhcHAKKwkJICogdGhhdCB0aGVyZSdzIG5vIGNvbm5lY3Rpb24KKwkJICovCisJCWlmICghcG9ydC0+aG9zdF9jb25uZWN0ZWQpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJcmV0dXJuIC1FQUdBSU47CisKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBvcnQtPndhaXRxdWV1ZSwKKwkJCQkJICAgICAgIHdhaXRfaXNfb3Zlcihwb3J0KSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJLyoKKwkgKiBXZSBjb3VsZCd2ZSByZWNlaXZlZCBhIGRpc2Nvbm5lY3Rpb24gbWVzc2FnZSB3aGlsZSB3ZSB3ZXJlCisJICogd2FpdGluZyBmb3IgbW9yZSBkYXRhLgorCSAqCisJICogVGhpcyBjaGVjayBpcyBub3QgY2x1YmJlZCBpbiB0aGUgaWYoKSBzdGF0ZW1lbnQgYWJvdmUgYXMgd2UKKwkgKiBtaWdodCByZWNlaXZlIHNvbWUgZGF0YSBhcyB3ZWxsIGFzIHRoZSBob3N0IGNvdWxkIGdldAorCSAqIGRpc2Nvbm5lY3RlZCBhZnRlciB3ZSBnb3Qgd29rZW4gdXAgZnJvbSBvdXIgd2FpdC4gIFNvIHdlCisJICogcmVhbGx5IHdhbnQgdG8gZ2l2ZSBvZmYgd2hhdGV2ZXIgZGF0YSB3ZSBoYXZlIGFuZCBvbmx5IHRoZW4KKwkgKiBjaGVjayBmb3IgaG9zdF9jb25uZWN0ZWQuCisJICovCisJaWYgKCFwb3J0X2hhc19kYXRhKHBvcnQpICYmICFwb3J0LT5ob3N0X2Nvbm5lY3RlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZmlsbF9yZWFkYnVmKHBvcnQsIHVidWYsIGNvdW50LCB0cnVlKTsKK30KKworc3RhdGljIHNzaXplX3QgcG9ydF9mb3BzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmcCkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKwljaGFyICpidWY7CisJc3NpemVfdCByZXQ7CisKKwlwb3J0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJY291bnQgPSBtaW4oKHNpemVfdCkoMzIgKiAxMDI0KSwgY291bnQpOworCisJYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gY29weV9mcm9tX3VzZXIoYnVmLCB1YnVmLCBjb3VudCk7CisJaWYgKHJldCkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGZyZWVfYnVmOworCX0KKworCXJldCA9IHNlbmRfYnVmKHBvcnQsIGJ1ZiwgY291bnQpOworZnJlZV9idWY6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBvcnRfZm9wc19wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCXVuc2lnbmVkIGludCByZXQ7CisKKwlwb3J0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXBvbGxfd2FpdChmaWxwLCAmcG9ydC0+d2FpdHF1ZXVlLCB3YWl0KTsKKworCXJldCA9IDA7CisJaWYgKHBvcnQtPmluYnVmKQorCQlyZXQgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKwlpZiAocG9ydC0+aG9zdF9jb25uZWN0ZWQpCisJCXJldCB8PSBQT0xMT1VUOworCWlmICghcG9ydC0+aG9zdF9jb25uZWN0ZWQpCisJCXJldCB8PSBQT0xMSFVQOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwb3J0X2ZvcHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKworCXBvcnQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwkvKiBOb3RpZnkgaG9zdCBvZiBwb3J0IGJlaW5nIGNsb3NlZCAqLworCXNlbmRfY29udHJvbF9tc2cocG9ydCwgVklSVElPX0NPTlNPTEVfUE9SVF9PUEVOLCAwKTsKKworCXNwaW5fbG9ja19pcnEoJnBvcnQtPmluYnVmX2xvY2spOworCXBvcnQtPmd1ZXN0X2Nvbm5lY3RlZCA9IGZhbHNlOworCisJZGlzY2FyZF9wb3J0X2RhdGEocG9ydCk7CisKKwlzcGluX3VubG9ja19pcnEoJnBvcnQtPmluYnVmX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9ydF9mb3BzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGNkZXYgKmNkZXYgPSBpbm9kZS0+aV9jZGV2OworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgcG9ydCwgY2Rldik7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gcG9ydDsKKworCS8qCisJICogRG9uJ3QgYWxsb3cgb3BlbmluZyBvZiBjb25zb2xlIHBvcnQgZGV2aWNlcyAtLSB0aGF0J3MgZG9uZQorCSAqIHZpYSAvZGV2L2h2YworCSAqLworCWlmIChpc19jb25zb2xlX3BvcnQocG9ydCkpCisJCXJldHVybiAtRU5YSU87CisKKwkvKiBBbGxvdyBvbmx5IG9uZSBwcm9jZXNzIHRvIG9wZW4gYSBwYXJ0aWN1bGFyIHBvcnQgYXQgYSB0aW1lICovCisJc3Bpbl9sb2NrX2lycSgmcG9ydC0+aW5idWZfbG9jayk7CisJaWYgKHBvcnQtPmd1ZXN0X2Nvbm5lY3RlZCkgeworCQlzcGluX3VubG9ja19pcnEoJnBvcnQtPmluYnVmX2xvY2spOworCQlyZXR1cm4gLUVNRklMRTsKKwl9CisKKwlwb3J0LT5ndWVzdF9jb25uZWN0ZWQgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+aW5idWZfbG9jayk7CisKKwkvKiBOb3RpZnkgaG9zdCBvZiBwb3J0IGJlaW5nIG9wZW5lZCAqLworCXNlbmRfY29udHJvbF9tc2coZmlscC0+cHJpdmF0ZV9kYXRhLCBWSVJUSU9fQ09OU09MRV9QT1JUX09QRU4sIDEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgZmlsZSBvcGVyYXRpb25zIHRoYXQgd2Ugc3VwcG9ydDogcHJvZ3JhbXMgaW4gdGhlIGd1ZXN0IGNhbiBvcGVuCisgKiBhIGNvbnNvbGUgZGV2aWNlLCByZWFkIGZyb20gaXQsIHdyaXRlIHRvIGl0LCBwb2xsIGZvciBkYXRhIGFuZAorICogY2xvc2UgaXQuICBUaGUgZGV2aWNlcyBhcmUgYXQKKyAqICAgL2Rldi92cG9ydDxkZXZpY2UgbnVtYmVyPnA8cG9ydCBudW1iZXI+CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgPSBwb3J0X2ZvcHNfb3BlbiwKKwkucmVhZCAgPSBwb3J0X2ZvcHNfcmVhZCwKKwkud3JpdGUgPSBwb3J0X2ZvcHNfd3JpdGUsCisJLnBvbGwgID0gcG9ydF9mb3BzX3BvbGwsCisJLnJlbGVhc2UgPSBwb3J0X2ZvcHNfcmVsZWFzZSwKK307CisKKy8qCisgKiBUaGUgcHV0X2NoYXJzKCkgY2FsbGJhY2sgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KICAqCi0gKiBNb3N0IG9mIHRoZSBjb2RlIGRlYWxzIHdpdGggdGhlIGZhY3QgdGhhdCB0aGUgaHZjX2NvbnNvbGUoKSBpbmZyYXN0cnVjdHVyZQotICogb25seSBhc2tzIHVzIGZvciAxNiBieXRlcyBhdCBhIHRpbWUuICBXZSBrZWVwIGluX29mZnNldCBhbmQgaW5fdXNlZCBmaWVsZHMKLSAqIGZvciBwYXJ0aWFsbHktZmlsbGVkIGJ1ZmZlcnMuICovCisgKiBXZSB0dXJuIHRoZSBjaGFyYWN0ZXJzIGludG8gYSBzY2F0dGVyLWdhdGhlciBsaXN0LCBhZGQgaXQgdG8gdGhlCisgKiBvdXRwdXQgcXVldWUgYW5kIHRoZW4ga2ljayB0aGUgSG9zdC4gIFRoZW4gd2Ugc2l0IGhlcmUgd2FpdGluZyBmb3IKKyAqIGl0IHRvIGZpbmlzaDogaW5lZmZpY2llbnQgaW4gdGhlb3J5LCBidXQgaW4gcHJhY3RpY2UKKyAqIGltcGxlbWVudGF0aW9ucyB3aWxsIGRvIGl0IGltbWVkaWF0ZWx5IChsZ3Vlc3QncyBMYXVuY2hlciBkb2VzKS4KKyAqLworc3RhdGljIGludCBwdXRfY2hhcnModTMyIHZ0ZXJtbm8sIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92dGVybW5vKHZ0ZXJtbm8pOworCWlmICghcG9ydCkKKwkJcmV0dXJuIDA7CisKKwlpZiAodW5saWtlbHkoZWFybHlfcHV0X2NoYXJzKSkKKwkJcmV0dXJuIGVhcmx5X3B1dF9jaGFycyh2dGVybW5vLCBidWYsIGNvdW50KTsKKworCXJldHVybiBzZW5kX2J1Zihwb3J0LCAodm9pZCAqKWJ1ZiwgY291bnQpOworfQorCisvKgorICogZ2V0X2NoYXJzKCkgaXMgdGhlIGNhbGxiYWNrIGZyb20gdGhlIGh2Y19jb25zb2xlIGluZnJhc3RydWN0dXJlCisgKiB3aGVuIGFuIGludGVycnVwdCBpcyByZWNlaXZlZC4KKyAqCisgKiBXZSBjYWxsIG91dCB0byBmaWxsX3JlYWRidWYgdGhhdCBnZXRzIHVzIHRoZSByZXF1aXJlZCBkYXRhIGZyb20gdGhlCisgKiBidWZmZXJzIHRoYXQgYXJlIHF1ZXVlZCB1cC4KKyAqLwogc3RhdGljIGludCBnZXRfY2hhcnModTMyIHZ0ZXJtbm8sIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogeworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92dGVybW5vKHZ0ZXJtbm8pOworCWlmICghcG9ydCkKKwkJcmV0dXJuIDA7CisKIAkvKiBJZiB3ZSBkb24ndCBoYXZlIGFuIGlucHV0IHF1ZXVlIHlldCwgd2UgY2FuJ3QgZ2V0IGlucHV0LiAqLwotCUJVR19PTighaW5fdnEpOworCUJVR19PTighcG9ydC0+aW5fdnEpOwogCi0JLyogTm8gYnVmZmVyPyAgVHJ5IHRvIGdldCBvbmUuICovCi0JaWYgKCFpbl9sZW4pIHsKLQkJaW4gPSBpbl92cS0+dnFfb3BzLT5nZXRfYnVmKGluX3ZxLCAmaW5fbGVuKTsKLQkJaWYgKCFpbikKLQkJCXJldHVybiAwOwotCX0KLQotCS8qIFlvdSB3YW50IG1vcmUgdGhhbiB3ZSBoYXZlIHRvIGdpdmU/ICBXZWxsLCB0cnkgd2FudGluZyBsZXNzISAqLwotCWlmIChpbl9sZW4gPCBjb3VudCkKLQkJY291bnQgPSBpbl9sZW47Ci0KLQkvKiBDb3B5IGFjcm9zcyB0byB0aGVpciBidWZmZXIgYW5kIGluY3JlbWVudCBvZmZzZXQuICovCi0JbWVtY3B5KGJ1ZiwgaW4sIGNvdW50KTsKLQlpbiArPSBjb3VudDsKLQlpbl9sZW4gLT0gY291bnQ7Ci0KLQkvKiBGaW5pc2hlZD8gIFJlLXJlZ2lzdGVyIGJ1ZmZlciBzbyBIb3N0IHdpbGwgdXNlIGl0IGFnYWluLiAqLwotCWlmIChpbl9sZW4gPT0gMCkKLQkJYWRkX2luYnVmKCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0vKjoqLwotCi0vKkQ6MzIwIENvbnNvbGUgZHJpdmVycyBhcmUgaW5pdGlhbGl6ZWQgdmVyeSBlYXJseSBzbyBib290IG1lc3NhZ2VzIGNhbiBnbyBvdXQsCi0gKiBzbyB3ZSBkbyB0aGluZ3Mgc2xpZ2h0bHkgZGlmZmVyZW50bHkgZnJvbSB0aGUgZ2VuZXJpYyB2aXJ0aW8gaW5pdGlhbGl6YXRpb24KLSAqIG9mIHRoZSBuZXQgYW5kIGJsb2NrIGRyaXZlcnMuCi0gKgotICogQXQgdGhpcyBzdGFnZSwgdGhlIGNvbnNvbGUgaXMgb3V0cHV0LW9ubHkuICBJdCdzIHRvbyBlYXJseSB0byBzZXQgdXAgYQotICogdmlydHF1ZXVlLCBzbyB3ZSBsZXQgdGhlIGRyaXZlcnMgZG8gc29tZSBib3V0aXF1ZSBlYXJseS1vdXRwdXQgdGhpbmcuICovCi1pbnQgX19pbml0IHZpcnRpb19jb25zX2Vhcmx5X2luaXQoaW50ICgqcHV0X2NoYXJzKSh1MzIsIGNvbnN0IGNoYXIgKiwgaW50KSkKLXsKLQl2aXJ0aW9fY29ucy5wdXRfY2hhcnMgPSBwdXRfY2hhcnM7Ci0JcmV0dXJuIGh2Y19pbnN0YW50aWF0ZSgwLCAwLCAmdmlydGlvX2NvbnMpOworCXJldHVybiBmaWxsX3JlYWRidWYocG9ydCwgYnVmLCBjb3VudCwgZmFsc2UpOwogfQogCi0vKgotICogdmlydGlvIGNvbnNvbGUgY29uZmlndXJhdGlvbi4gVGhpcyBzdXBwb3J0czoKLSAqIC0gY29uc29sZSByZXNpemUKLSAqLwotc3RhdGljIHZvaWQgdmlydGNvbnNfYXBwbHlfY29uZmlnKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCByZXNpemVfY29uc29sZShzdHJ1Y3QgcG9ydCAqcG9ydCkKIHsKKwlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKIAlzdHJ1Y3Qgd2luc2l6ZSB3czsKIAotCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUoZGV2LCBWSVJUSU9fQ09OU09MRV9GX1NJWkUpKSB7Ci0JCWRldi0+Y29uZmlnLT5nZXQoZGV2LAotCQkJCSBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnLCBjb2xzKSwKLQkJCQkgJndzLndzX2NvbCwgc2l6ZW9mKHUxNikpOwotCQlkZXYtPmNvbmZpZy0+Z2V0KGRldiwKLQkJCQkgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywgcm93cyksCi0JCQkJICZ3cy53c19yb3csIHNpemVvZih1MTYpKTsKLQkJaHZjX3Jlc2l6ZShodmMsIHdzKTsKKwl2ZGV2ID0gcG9ydC0+cG9ydGRldi0+dmRldjsKKwlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19DT05TT0xFX0ZfU0laRSkpIHsKKwkJdmRldi0+Y29uZmlnLT5nZXQodmRldiwKKwkJCQkgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb25maWcsIGNvbHMpLAorCQkJCSAgJndzLndzX2NvbCwgc2l6ZW9mKHUxNikpOworCQl2ZGV2LT5jb25maWctPmdldCh2ZGV2LAorCQkJCSAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywgcm93cyksCisJCQkJICAmd3Mud3Nfcm93LCBzaXplb2YodTE2KSk7CisJCWh2Y19yZXNpemUocG9ydC0+Y29ucy5odmMsIHdzKTsKIAl9CiB9CiAKLS8qCi0gKiB3ZSBzdXBwb3J0IG9ubHkgb25lIGNvbnNvbGUsIHRoZSBodmMgc3RydWN0IGlzIGEgZ2xvYmFsIHZhcgotICogV2Ugc2V0IHRoZSBjb25maWd1cmF0aW9uIGF0IHRoaXMgcG9pbnQsIHNpbmNlIHdlIG5vdyBoYXZlIGEgdHR5Ci0gKi8KKy8qIFdlIHNldCB0aGUgY29uZmlndXJhdGlvbiBhdCB0aGlzIHBvaW50LCBzaW5jZSB3ZSBub3cgaGF2ZSBhIHR0eSAqLwogc3RhdGljIGludCBub3RpZmllcl9hZGRfdmlvKHN0cnVjdCBodmNfc3RydWN0ICpocCwgaW50IGRhdGEpCiB7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisKKwlwb3J0ID0gZmluZF9wb3J0X2J5X3Z0ZXJtbm8oaHAtPnZ0ZXJtbm8pOworCWlmICghcG9ydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlocC0+aXJxX3JlcXVlc3RlZCA9IDE7Ci0JdmlydGNvbnNfYXBwbHlfY29uZmlnKHZkZXYpOworCXJlc2l6ZV9jb25zb2xlKHBvcnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzMsNzkgKzcxMyw3OTcgQEAKIAlocC0+aXJxX3JlcXVlc3RlZCA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGh2Y19oYW5kbGVfaW5wdXQoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCisvKiBUaGUgb3BlcmF0aW9ucyBmb3IgY29uc29sZSBwb3J0cy4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2X29wcyA9IHsKKwkuZ2V0X2NoYXJzID0gZ2V0X2NoYXJzLAorCS5wdXRfY2hhcnMgPSBwdXRfY2hhcnMsCisJLm5vdGlmaWVyX2FkZCA9IG5vdGlmaWVyX2FkZF92aW8sCisJLm5vdGlmaWVyX2RlbCA9IG5vdGlmaWVyX2RlbF92aW8sCisJLm5vdGlmaWVyX2hhbmd1cCA9IG5vdGlmaWVyX2RlbF92aW8sCit9OworCisvKgorICogQ29uc29sZSBkcml2ZXJzIGFyZSBpbml0aWFsaXplZCB2ZXJ5IGVhcmx5IHNvIGJvb3QgbWVzc2FnZXMgY2FuIGdvCisgKiBvdXQsIHNvIHdlIGRvIHRoaW5ncyBzbGlnaHRseSBkaWZmZXJlbnRseSBmcm9tIHRoZSBnZW5lcmljIHZpcnRpbworICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldCBhbmQgYmxvY2sgZHJpdmVycy4KKyAqCisgKiBBdCB0aGlzIHN0YWdlLCB0aGUgY29uc29sZSBpcyBvdXRwdXQtb25seS4gIEl0J3MgdG9vIGVhcmx5IHRvIHNldAorICogdXAgYSB2aXJ0cXVldWUsIHNvIHdlIGxldCB0aGUgZHJpdmVycyBkbyBzb21lIGJvdXRpcXVlIGVhcmx5LW91dHB1dAorICogdGhpbmcuCisgKi8KK2ludCBfX2luaXQgdmlydGlvX2NvbnNfZWFybHlfaW5pdChpbnQgKCpwdXRfY2hhcnMpKHUzMiwgY29uc3QgY2hhciAqLCBpbnQpKQogewotCWlmIChodmNfcG9sbChodmMpKQorCWVhcmx5X3B1dF9jaGFycyA9IHB1dF9jaGFyczsKKwlyZXR1cm4gaHZjX2luc3RhbnRpYXRlKDAsIDAsICZodl9vcHMpOworfQorCitpbnQgaW5pdF9wb3J0X2NvbnNvbGUoc3RydWN0IHBvcnQgKnBvcnQpCit7CisJaW50IHJldDsKKworCS8qCisJICogVGhlIEhvc3QncyB0ZWxsaW5nIHVzIHRoaXMgcG9ydCBpcyBhIGNvbnNvbGUgcG9ydC4gIEhvb2sgaXQKKwkgKiB1cCB3aXRoIGFuIGh2YyBjb25zb2xlLgorCSAqCisJICogVG8gc2V0IHVwIGFuZCBtYW5hZ2Ugb3VyIHZpcnR1YWwgY29uc29sZSwgd2UgY2FsbAorCSAqIGh2Y19hbGxvYygpLgorCSAqCisJICogVGhlIGZpcnN0IGFyZ3VtZW50IG9mIGh2Y19hbGxvYygpIGlzIHRoZSB2aXJ0dWFsIGNvbnNvbGUKKwkgKiBudW1iZXIuICBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBwYXJhbWV0ZXIgZm9yIHRoZQorCSAqIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gKGxpa2UgaXJxIG51bWJlcikuICBXZSBjdXJyZW50bHkKKwkgKiBsZWF2ZSB0aGlzIGFzIHplcm8sIHZpcnRxdWV1ZXMgaGF2ZSBpbXBsaWNpdCBub3RpZmljYXRpb25zLgorCSAqCisJICogVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGEgInN0cnVjdCBodl9vcHMiIGNvbnRhaW5pbmcgdGhlCisJICogcHV0X2NoYXJzKCkgZ2V0X2NoYXJzKCksIG5vdGlmaWVyX2FkZCgpIGFuZCBub3RpZmllcl9kZWwoKQorCSAqIHBvaW50ZXJzLiAgVGhlIGZpbmFsIGFyZ3VtZW50IGlzIHRoZSBvdXRwdXQgYnVmZmVyIHNpemU6IHdlCisJICogY2FuIGRvIGFueSBzaXplLCBzbyB3ZSBwdXQgUEFHRV9TSVpFIGhlcmUuCisJICovCisJcG9ydC0+Y29ucy52dGVybW5vID0gcGRydmRhdGEubmV4dF92dGVybW5vOworCisJcG9ydC0+Y29ucy5odmMgPSBodmNfYWxsb2MocG9ydC0+Y29ucy52dGVybW5vLCAwLCAmaHZfb3BzLCBQQUdFX1NJWkUpOworCWlmIChJU19FUlIocG9ydC0+Y29ucy5odmMpKSB7CisJCXJldCA9IFBUUl9FUlIocG9ydC0+Y29ucy5odmMpOworCQlkZXZfZXJyKHBvcnQtPmRldiwKKwkJCSJlcnJvciAlZCBhbGxvY2F0aW5nIGh2YyBmb3IgcG9ydFxuIiwgcmV0KTsKKwkJcG9ydC0+Y29ucy5odmMgPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKwlzcGluX2xvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKKwlwZHJ2ZGF0YS5uZXh0X3Z0ZXJtbm8rKzsKKwlsaXN0X2FkZF90YWlsKCZwb3J0LT5jb25zLmxpc3QsICZwZHJ2ZGF0YS5jb25zb2xlcyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKKwlwb3J0LT5ndWVzdF9jb25uZWN0ZWQgPSB0cnVlOworCisJLyogTm90aWZ5IGhvc3Qgb2YgcG9ydCBiZWluZyBvcGVuZWQgKi8KKwlzZW5kX2NvbnRyb2xfbXNnKHBvcnQsIFZJUlRJT19DT05TT0xFX1BPUlRfT1BFTiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19wb3J0X25hbWUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKworCXBvcnQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVzXG4iLCBwb3J0LT5uYW1lKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfcG9ydF9uYW1lLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBvcnRfc3lzZnNfZW50cmllc1tdID0geworCSZkZXZfYXR0cl9uYW1lLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcG9ydF9hdHRyaWJ1dGVfZ3JvdXAgPSB7CisJLm5hbWUgPSBOVUxMLAkJLyogcHV0IGluIGRldmljZSBkaXJlY3RvcnkgKi8KKwkuYXR0cnMgPSBwb3J0X3N5c2ZzX2VudHJpZXMsCit9OworCitzdGF0aWMgaW50IGRlYnVnZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBkZWJ1Z2ZzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAorCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZwKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCWNoYXIgKmJ1ZjsKKwlzc2l6ZV90IHJldCwgb3V0X29mZnNldCwgb3V0X2NvdW50OworCisJb3V0X2NvdW50ID0gMTAyNDsKKwlidWYgPSBrbWFsbG9jKG91dF9jb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcG9ydCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlvdXRfb2Zmc2V0ID0gMDsKKwlvdXRfb2Zmc2V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dF9vZmZzZXQsIG91dF9jb3VudCwKKwkJCSAgICAgICAibmFtZTogJXNcbiIsIHBvcnQtPm5hbWUgPyBwb3J0LT5uYW1lIDogIiIpOworCW91dF9vZmZzZXQgKz0gc25wcmludGYoYnVmICsgb3V0X29mZnNldCwgb3V0X2NvdW50IC0gb3V0X29mZnNldCwKKwkJCSAgICAgICAiZ3Vlc3RfY29ubmVjdGVkOiAlZFxuIiwgcG9ydC0+Z3Vlc3RfY29ubmVjdGVkKTsKKwlvdXRfb2Zmc2V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dF9vZmZzZXQsIG91dF9jb3VudCAtIG91dF9vZmZzZXQsCisJCQkgICAgICAgImhvc3RfY29ubmVjdGVkOiAlZFxuIiwgcG9ydC0+aG9zdF9jb25uZWN0ZWQpOworCW91dF9vZmZzZXQgKz0gc25wcmludGYoYnVmICsgb3V0X29mZnNldCwgb3V0X2NvdW50IC0gb3V0X29mZnNldCwKKwkJCSAgICAgICAiaXNfY29uc29sZTogJXNcbiIsCisJCQkgICAgICAgaXNfY29uc29sZV9wb3J0KHBvcnQpID8gInllcyIgOiAibm8iKTsKKwlvdXRfb2Zmc2V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dF9vZmZzZXQsIG91dF9jb3VudCAtIG91dF9vZmZzZXQsCisJCQkgICAgICAgImNvbnNvbGVfdnRlcm1ubzogJXVcbiIsIHBvcnQtPmNvbnMudnRlcm1ubyk7CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjb3VudCwgb2ZmcCwgYnVmLCBvdXRfb2Zmc2V0KTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfZGVidWdmc19vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gID0gZGVidWdmc19vcGVuLAorCS5yZWFkICA9IGRlYnVnZnNfcmVhZCwKK307CisKKy8qIFJlbW92ZSBhbGwgcG9ydC1zcGVjaWZpYyBkYXRhLiAqLworc3RhdGljIGludCByZW1vdmVfcG9ydChzdHJ1Y3QgcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKworCXNwaW5fbG9ja19pcnEoJnBvcnQtPnBvcnRkZXYtPnBvcnRzX2xvY2spOworCWxpc3RfZGVsKCZwb3J0LT5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnBvcnQtPnBvcnRkZXYtPnBvcnRzX2xvY2spOworCisJaWYgKGlzX2NvbnNvbGVfcG9ydChwb3J0KSkgeworCQlzcGluX2xvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKKwkJbGlzdF9kZWwoJnBvcnQtPmNvbnMubGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycSgmcGRydmRhdGFfbG9jayk7CisJCWh2Y19yZW1vdmUocG9ydC0+Y29ucy5odmMpOworCX0KKwlpZiAocG9ydC0+Z3Vlc3RfY29ubmVjdGVkKQorCQlzZW5kX2NvbnRyb2xfbXNnKHBvcnQsIFZJUlRJT19DT05TT0xFX1BPUlRfT1BFTiwgMCk7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBvcnQtPmRldi0+a29iaiwgJnBvcnRfYXR0cmlidXRlX2dyb3VwKTsKKwlkZXZpY2VfZGVzdHJveShwZHJ2ZGF0YS5jbGFzcywgcG9ydC0+ZGV2LT5kZXZ0KTsKKwljZGV2X2RlbCgmcG9ydC0+Y2Rldik7CisKKwkvKiBSZW1vdmUgdW51c2VkIGRhdGEgdGhpcyBwb3J0IG1pZ2h0IGhhdmUgcmVjZWl2ZWQuICovCisJZGlzY2FyZF9wb3J0X2RhdGEocG9ydCk7CisKKwkvKiBSZW1vdmUgYnVmZmVycyB3ZSBxdWV1ZWQgdXAgZm9yIHRoZSBIb3N0IHRvIHNlbmQgdXMgZGF0YSBpbi4gKi8KKwl3aGlsZSAoKGJ1ZiA9IHBvcnQtPmluX3ZxLT52cV9vcHMtPmRldGFjaF91bnVzZWRfYnVmKHBvcnQtPmluX3ZxKSkpCisJCWZyZWVfYnVmKGJ1Zik7CisKKwlrZnJlZShwb3J0LT5uYW1lKTsKKworCWRlYnVnZnNfcmVtb3ZlKHBvcnQtPmRlYnVnZnNfZmlsZSk7CisKKwlrZnJlZShwb3J0KTsKKwlyZXR1cm4gMDsKK30KKworLyogQW55IHByaXZhdGUgbWVzc2FnZXMgdGhhdCB0aGUgSG9zdCBhbmQgR3Vlc3Qgd2FudCB0byBzaGFyZSAqLworc3RhdGljIHZvaWQgaGFuZGxlX2NvbnRyb2xfbWVzc2FnZShzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2LAorCQkJCSAgIHN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb250cm9sICpjcGt0OworCXN0cnVjdCBwb3J0ICpwb3J0OworCXNpemVfdCBuYW1lX3NpemU7CisJaW50IGVycjsKKworCWNwa3QgPSAoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbnRyb2wgKikoYnVmLT5idWYgKyBidWYtPm9mZnNldCk7CisKKwlwb3J0ID0gZmluZF9wb3J0X2J5X2lkKHBvcnRkZXYsIGNwa3QtPmlkKTsKKwlpZiAoIXBvcnQpIHsKKwkJLyogTm8gdmFsaWQgaGVhZGVyIGF0IHN0YXJ0IG9mIGJ1ZmZlci4gIERyb3AgaXQuICovCisJCWRldl9kYmcoJnBvcnRkZXYtPnZkZXYtPmRldiwKKwkJCSJJbnZhbGlkIGluZGV4ICV1IGluIGNvbnRyb2wgcGFja2V0XG4iLCBjcGt0LT5pZCk7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGNwa3QtPmV2ZW50KSB7CisJY2FzZSBWSVJUSU9fQ09OU09MRV9DT05TT0xFX1BPUlQ6CisJCWlmICghY3BrdC0+dmFsdWUpCisJCQlicmVhazsKKwkJaWYgKGlzX2NvbnNvbGVfcG9ydChwb3J0KSkKKwkJCWJyZWFrOworCisJCWluaXRfcG9ydF9jb25zb2xlKHBvcnQpOworCQkvKgorCQkgKiBDb3VsZCByZW1vdmUgdGhlIHBvcnQgaGVyZSBpbiBjYXNlIGluaXQgZmFpbHMgLSBidXQKKwkJICogaGF2ZSB0byBub3RpZnkgdGhlIGhvc3QgZmlyc3QuCisJCSAqLworCQlicmVhazsKKwljYXNlIFZJUlRJT19DT05TT0xFX1JFU0laRToKKwkJaWYgKCFpc19jb25zb2xlX3BvcnQocG9ydCkpCisJCQlicmVhazsKKwkJcG9ydC0+Y29ucy5odmMtPmlycV9yZXF1ZXN0ZWQgPSAxOworCQlyZXNpemVfY29uc29sZShwb3J0KTsKKwkJYnJlYWs7CisJY2FzZSBWSVJUSU9fQ09OU09MRV9QT1JUX09QRU46CisJCXBvcnQtPmhvc3RfY29ubmVjdGVkID0gY3BrdC0+dmFsdWU7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+d2FpdHF1ZXVlKTsKKwkJYnJlYWs7CisJY2FzZSBWSVJUSU9fQ09OU09MRV9QT1JUX05BTUU6CisJCS8qCisJCSAqIFNraXAgdGhlIHNpemUgb2YgdGhlIGhlYWRlciBhbmQgdGhlIGNwa3QgdG8gZ2V0IHRoZSBzaXplCisJCSAqIG9mIHRoZSBuYW1lIHRoYXQgd2FzIHNlbnQKKwkJICovCisJCW5hbWVfc2l6ZSA9IGJ1Zi0+bGVuIC0gYnVmLT5vZmZzZXQgLSBzaXplb2YoKmNwa3QpICsgMTsKKworCQlwb3J0LT5uYW1lID0ga21hbGxvYyhuYW1lX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXBvcnQtPm5hbWUpIHsKKwkJCWRldl9lcnIocG9ydC0+ZGV2LAorCQkJCSJOb3QgZW5vdWdoIHNwYWNlIHRvIHN0b3JlIHBvcnQgbmFtZVxuIik7CisJCQlicmVhazsKKwkJfQorCQlzdHJuY3B5KHBvcnQtPm5hbWUsIGJ1Zi0+YnVmICsgYnVmLT5vZmZzZXQgKyBzaXplb2YoKmNwa3QpLAorCQkJbmFtZV9zaXplIC0gMSk7CisJCXBvcnQtPm5hbWVbbmFtZV9zaXplIC0gMV0gPSAwOworCisJCS8qCisJCSAqIFNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUgc3lzZnMgYXR0cmlidXRlLCAnbmFtZScsCisJCSAqIGNyZWF0ZSBpdCBvbmx5IGlmIHdlIGhhdmUgYSBuYW1lIGZvciB0aGUgcG9ydC4KKwkJICovCisJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcG9ydC0+ZGV2LT5rb2JqLAorCQkJCQkgJnBvcnRfYXR0cmlidXRlX2dyb3VwKTsKKwkJaWYgKGVycikKKwkJCWRldl9lcnIocG9ydC0+ZGV2LAorCQkJCSJFcnJvciAlZCBjcmVhdGluZyBzeXNmcyBkZXZpY2UgYXR0cmlidXRlc1xuIiwKKwkJCQllcnIpOworCisJCWJyZWFrOworCWNhc2UgVklSVElPX0NPTlNPTEVfUE9SVF9SRU1PVkU6CisJCS8qCisJCSAqIEhvdCB1bnBsdWcgdGhlIHBvcnQuICBXZSBkb24ndCBkZWNyZW1lbnQgbnJfcG9ydHMKKwkJICogc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGggZXh0cmEgY29tcGxleGl0aWVzCisJCSAqIG9mIHVzaW5nIHRoZSBsb3dlc3QtYXZhaWxhYmxlIHBvcnQgaWQ6IFdlIGNhbiBqdXN0CisJCSAqIHBpY2sgdXAgdGhlIG5yX3BvcnRzIG51bWJlciBhcyB0aGUgaWQgYW5kIG5vdCBoYXZlCisJCSAqIHVzZXJzcGFjZSBzZW5kIGl0IHRvIHVzLiAgVGhpcyBoZWxwcyB1cyBpbiB0d28KKwkJICogd2F5czoKKwkJICoKKwkJICogLSBXZSBkb24ndCBuZWVkIHRvIGhhdmUgYSAncG9ydF9pZCcgZmllbGQgaW4gdGhlCisJCSAqICAgY29uZmlnIHNwYWNlIHdoZW4gYSBwb3J0IGlzIGhvdC1hZGRlZC4gIFRoaXMgaXMgYQorCQkgKiAgIGdvb2QgdGhpbmcgYXMgd2UgbWlnaHQgcXVldWUgdXAgbXVsdGlwbGUgaG90cGx1ZworCQkgKiAgIHJlcXVlc3RzIGlzc3VlZCBpbiBvdXIgd29ya3F1ZXVlLgorCQkgKgorCQkgKiAtIEFub3RoZXIgd2F5IHRvIGRlYWwgd2l0aCB0aGlzIHdvdWxkIGhhdmUgYmVlbiB0bworCQkgKiAgIHVzZSBhIGJpdG1hcCBvZiB0aGUgYWN0aXZlIHBvcnRzIGFuZCBzZWxlY3QgdGhlCisJCSAqICAgbG93ZXN0IG5vbi1hY3RpdmUgcG9ydCBmcm9tIHRoYXQgbWFwLiAgVGhhdAorCQkgKiAgIGJsb2F0cyB0aGUgYWxyZWFkeSB0aWdodCBjb25maWcgc3BhY2UgYW5kIHdlCisJCSAqICAgd291bGQgZW5kIHVwIGFydGlmaWNpYWxseSBsaW1pdGluZyB0aGUKKwkJICogICBtYXguIG51bWJlciBvZiBwb3J0cyB0byBzaXplb2YoYml0bWFwKS4gIFJpZ2h0CisJCSAqICAgbm93IHdlIGNhbiBzdXBwb3J0IDJeMzIgcG9ydHMgKGFzIHRoZSBwb3J0IGlkIGlzCisJCSAqICAgc3RvcmVkIGluIGEgdTMyIHR5cGUpLgorCQkgKgorCQkgKi8KKwkJcmVtb3ZlX3BvcnQocG9ydCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgY29udHJvbF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJc3RydWN0IHZpcnRxdWV1ZSAqdnE7CisJc3RydWN0IHBvcnRfYnVmZmVyICpidWY7CisJdW5zaWduZWQgaW50IGxlbjsKKworCXBvcnRkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBvcnRzX2RldmljZSwgY29udHJvbF93b3JrKTsKKwl2cSA9IHBvcnRkZXYtPmNfaXZxOworCisJc3Bpbl9sb2NrKCZwb3J0ZGV2LT5jdnFfbG9jayk7CisJd2hpbGUgKChidWYgPSB2cS0+dnFfb3BzLT5nZXRfYnVmKHZxLCAmbGVuKSkpIHsKKwkJc3Bpbl91bmxvY2soJnBvcnRkZXYtPmN2cV9sb2NrKTsKKworCQlidWYtPmxlbiA9IGxlbjsKKwkJYnVmLT5vZmZzZXQgPSAwOworCisJCWhhbmRsZV9jb250cm9sX21lc3NhZ2UocG9ydGRldiwgYnVmKTsKKworCQlzcGluX2xvY2soJnBvcnRkZXYtPmN2cV9sb2NrKTsKKwkJaWYgKGFkZF9pbmJ1Zihwb3J0ZGV2LT5jX2l2cSwgYnVmKSA8IDApIHsKKwkJCWRldl93YXJuKCZwb3J0ZGV2LT52ZGV2LT5kZXYsCisJCQkJICJFcnJvciBhZGRpbmcgYnVmZmVyIHRvIHF1ZXVlXG4iKTsKKwkJCWZyZWVfYnVmKGJ1Zik7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJnBvcnRkZXYtPmN2cV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgaW5faW50cihzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92cSh2cS0+dmRldi0+cHJpdiwgdnEpOworCWlmICghcG9ydCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmluYnVmX2xvY2ssIGZsYWdzKTsKKwlpZiAoIXBvcnQtPmluYnVmKQorCQlwb3J0LT5pbmJ1ZiA9IGdldF9pbmJ1Zihwb3J0KTsKKworCS8qCisJICogRG9uJ3QgcXVldWUgdXAgZGF0YSB3aGVuIHBvcnQgaXMgY2xvc2VkLiAgVGhpcyBjb25kaXRpb24KKwkgKiBjYW4gYmUgcmVhY2hlZCB3aGVuIGEgY29uc29sZSBwb3J0IGlzIG5vdCB5ZXQgY29ubmVjdGVkIChubworCSAqIHR0eSBpcyBzcGF3bmVkKSBhbmQgdGhlIGhvc3Qgc2VuZHMgb3V0IGRhdGEgdG8gY29uc29sZQorCSAqIHBvcnRzLiAgRm9yIGdlbmVyaWMgc2VyaWFsIHBvcnRzLCB0aGUgaG9zdCB3b24ndAorCSAqIChzaG91bGRuJ3QpIHNlbmQgZGF0YSB0aWxsIHRoZSBndWVzdCBpcyBjb25uZWN0ZWQuCisJICovCisJaWYgKCFwb3J0LT5ndWVzdF9jb25uZWN0ZWQpCisJCWRpc2NhcmRfcG9ydF9kYXRhKHBvcnQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT53YWl0cXVldWUpOworCisJaWYgKGlzX2NvbnNvbGVfcG9ydChwb3J0KSAmJiBodmNfcG9sbChwb3J0LT5jb25zLmh2YykpCiAJCWh2Y19raWNrKCk7CiB9CiAKLS8qRDozNzAgT25jZSB3ZSdyZSBmdXJ0aGVyIGluIGJvb3QsIHdlIGdldCBwcm9iZWQgbGlrZSBhbnkgb3RoZXIgdmlydGlvIGRldmljZS4KLSAqIEF0IHRoaXMgc3RhZ2Ugd2Ugc2V0IHVwIHRoZSBvdXRwdXQgdmlydHF1ZXVlLgotICoKLSAqIFRvIHNldCB1cCBhbmQgbWFuYWdlIG91ciB2aXJ0dWFsIGNvbnNvbGUsIHdlIGNhbGwgaHZjX2FsbG9jKCkuICBTaW5jZSB3ZQotICogbmV2ZXIgcmVtb3ZlIHRoZSBjb25zb2xlIGRldmljZSB3ZSBuZXZlciBuZWVkIHRoaXMgcG9pbnRlciBhZ2Fpbi4KLSAqCi0gKiBGaW5hbGx5IHdlIHB1dCBvdXIgaW5wdXQgYnVmZmVyIGluIHRoZSBpbnB1dCBxdWV1ZSwgcmVhZHkgdG8gcmVjZWl2ZS4gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHZpcnRjb25zX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBjb250cm9sX2ludHIoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCiB7Ci0JdnFfY2FsbGJhY2tfdCAqY2FsbGJhY2tzW10gPSB7IGh2Y19oYW5kbGVfaW5wdXQsIE5VTEx9OwotCWNvbnN0IGNoYXIgKm5hbWVzW10gPSB7ICJpbnB1dCIsICJvdXRwdXQiIH07Ci0Jc3RydWN0IHZpcnRxdWV1ZSAqdnFzWzJdOworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisKKwlwb3J0ZGV2ID0gdnEtPnZkZXYtPnByaXY7CisJc2NoZWR1bGVfd29yaygmcG9ydGRldi0+Y29udHJvbF93b3JrKTsKK30KKworc3RhdGljIHZvaWQgY29uZmlnX2ludHIoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldjsKKworCXBvcnRkZXYgPSB2ZGV2LT5wcml2OworCWlmICh1c2VfbXVsdGlwb3J0KHBvcnRkZXYpKSB7CisJCS8qIEhhbmRsZSBwb3J0IGhvdC1hZGQgKi8KKwkJc2NoZWR1bGVfd29yaygmcG9ydGRldi0+Y29uZmlnX3dvcmspOworCX0KKwkvKgorCSAqIFdlJ2xsIHVzZSB0aGlzIHdheSBvZiByZXNpemluZyBvbmx5IGZvciBsZWdhY3kgc3VwcG9ydC4KKwkgKiBGb3IgbmV3ZXIgdXNlcnNwYWNlIChWSVJUSU9fQ09OU09MRV9GX01VTFRQT1JUKyksIHVzZQorCSAqIGNvbnRyb2wgbWVzc2FnZXMgdG8gaW5kaWNhdGUgY29uc29sZSBzaXplIGNoYW5nZXMgc28gdGhhdAorCSAqIGl0IGNhbiBiZSBkb25lIHBlci1wb3J0CisJICovCisJcmVzaXplX2NvbnNvbGUoZmluZF9wb3J0X2J5X2lkKHBvcnRkZXYsIDApKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBmaWxsX3F1ZXVlKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCBzcGlubG9ja190ICpsb2NrKQoreworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCXVuc2lnbmVkIGludCByZXQ7CiAJaW50IGVycjsKIAotCXZkZXYgPSBkZXY7CisJcmV0ID0gMDsKKwlkbyB7CisJCWJ1ZiA9IGFsbG9jX2J1ZihQQUdFX1NJWkUpOworCQlpZiAoIWJ1ZikKKwkJCWJyZWFrOwogCi0JLyogVGhpcyBpcyB0aGUgc2NyYXRjaCBwYWdlIHdlIHVzZSB0byByZWNlaXZlIGNvbnNvbGUgaW5wdXQgKi8KLQlpbmJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWluYnVmKSB7CisJCXNwaW5fbG9ja19pcnEobG9jayk7CisJCWVyciA9IGFkZF9pbmJ1Zih2cSwgYnVmKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXNwaW5fdW5sb2NrX2lycShsb2NrKTsKKwkJCWZyZWVfYnVmKGJ1Zik7CisJCQlicmVhazsKKwkJfQorCQlyZXQrKzsKKwkJc3Bpbl91bmxvY2tfaXJxKGxvY2spOworCX0gd2hpbGUgKGVyciA+IDApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZGRfcG9ydChzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2LCB1MzIgaWQpCit7CisJY2hhciBkZWJ1Z2ZzX25hbWVbMTZdOworCXN0cnVjdCBwb3J0ICpwb3J0OworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCWRldl90IGRldnQ7CisJaW50IGVycjsKKworCXBvcnQgPSBrbWFsbG9jKHNpemVvZigqcG9ydCksIEdGUF9LRVJORUwpOworCWlmICghcG9ydCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CiAJfQogCi0JLyogRmluZCB0aGUgcXVldWVzLiAqLwotCS8qIEZJWE1FOiBUaGlzIGlzIHdoeSB3ZSB3YW50IHRvIHdlYW4gb2ZmIGh2Yzogd2UgZG8gbm90aGluZwotCSAqIHdoZW4gaW5wdXQgY29tZXMgaW4uICovCi0JZXJyID0gdmRldi0+Y29uZmlnLT5maW5kX3Zxcyh2ZGV2LCAyLCB2cXMsIGNhbGxiYWNrcywgbmFtZXMpOwotCWlmIChlcnIpCi0JCWdvdG8gZnJlZTsKKwlwb3J0LT5wb3J0ZGV2ID0gcG9ydGRldjsKKwlwb3J0LT5pZCA9IGlkOwogCi0JaW5fdnEgPSB2cXNbMF07Ci0Jb3V0X3ZxID0gdnFzWzFdOworCXBvcnQtPm5hbWUgPSBOVUxMOworCXBvcnQtPmluYnVmID0gTlVMTDsKKwlwb3J0LT5jb25zLmh2YyA9IE5VTEw7CiAKLQkvKiBTdGFydCB1c2luZyB0aGUgbmV3IGNvbnNvbGUgb3V0cHV0LiAqLwotCXZpcnRpb19jb25zLmdldF9jaGFycyA9IGdldF9jaGFyczsKLQl2aXJ0aW9fY29ucy5wdXRfY2hhcnMgPSBwdXRfY2hhcnM7Ci0JdmlydGlvX2NvbnMubm90aWZpZXJfYWRkID0gbm90aWZpZXJfYWRkX3ZpbzsKLQl2aXJ0aW9fY29ucy5ub3RpZmllcl9kZWwgPSBub3RpZmllcl9kZWxfdmlvOwotCXZpcnRpb19jb25zLm5vdGlmaWVyX2hhbmd1cCA9IG5vdGlmaWVyX2RlbF92aW87CisJcG9ydC0+aG9zdF9jb25uZWN0ZWQgPSBwb3J0LT5ndWVzdF9jb25uZWN0ZWQgPSBmYWxzZTsKIAotCS8qIFRoZSBmaXJzdCBhcmd1bWVudCBvZiBodmNfYWxsb2MoKSBpcyB0aGUgdmlydHVhbCBjb25zb2xlIG51bWJlciwgc28KLQkgKiB3ZSB1c2UgemVyby4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHBhcmFtZXRlciBmb3IgdGhlCi0JICogbm90aWZpY2F0aW9uIG1lY2hhbmlzbSAobGlrZSBpcnEgbnVtYmVyKS4gV2UgY3VycmVudGx5IGxlYXZlIHRoaXMKLQkgKiBhcyB6ZXJvLCB2aXJ0cXVldWVzIGhhdmUgaW1wbGljaXQgbm90aWZpY2F0aW9ucy4KLQkgKgotCSAqIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhICJzdHJ1Y3QgaHZfb3BzIiBjb250YWluaW5nIHRoZSBwdXRfY2hhcnMoKQotCSAqIGdldF9jaGFycygpLCBub3RpZmllcl9hZGQoKSBhbmQgbm90aWZpZXJfZGVsKCkgcG9pbnRlcnMuCi0JICogVGhlIGZpbmFsIGFyZ3VtZW50IGlzIHRoZSBvdXRwdXQgYnVmZmVyIHNpemU6IHdlIGNhbiBkbyBhbnkgc2l6ZSwKLQkgKiBzbyB3ZSBwdXQgUEFHRV9TSVpFIGhlcmUuICovCi0JaHZjID0gaHZjX2FsbG9jKDAsIDAsICZ2aXJ0aW9fY29ucywgUEFHRV9TSVpFKTsKLQlpZiAoSVNfRVJSKGh2YykpIHsKLQkJZXJyID0gUFRSX0VSUihodmMpOwotCQlnb3RvIGZyZWVfdnFzOworCXBvcnQtPmluX3ZxID0gcG9ydGRldi0+aW5fdnFzW3BvcnQtPmlkXTsKKwlwb3J0LT5vdXRfdnEgPSBwb3J0ZGV2LT5vdXRfdnFzW3BvcnQtPmlkXTsKKworCWNkZXZfaW5pdCgmcG9ydC0+Y2RldiwgJnBvcnRfZm9wcyk7CisKKwlkZXZ0ID0gTUtERVYocG9ydGRldi0+Y2hyX21ham9yLCBpZCk7CisJZXJyID0gY2Rldl9hZGQoJnBvcnQtPmNkZXYsIGRldnQsIDEpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJnBvcnQtPnBvcnRkZXYtPnZkZXYtPmRldiwKKwkJCSJFcnJvciAlZCBhZGRpbmcgY2RldiBmb3IgcG9ydCAldVxuIiwgZXJyLCBpZCk7CisJCWdvdG8gZnJlZV9wb3J0OworCX0KKwlwb3J0LT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBkcnZkYXRhLmNsYXNzLCAmcG9ydC0+cG9ydGRldi0+dmRldi0+ZGV2LAorCQkJCSAgZGV2dCwgcG9ydCwgInZwb3J0JXVwJXUiLAorCQkJCSAgcG9ydC0+cG9ydGRldi0+ZHJ2X2luZGV4LCBpZCk7CisJaWYgKElTX0VSUihwb3J0LT5kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIocG9ydC0+ZGV2KTsKKwkJZGV2X2VycigmcG9ydC0+cG9ydGRldi0+dmRldi0+ZGV2LAorCQkJIkVycm9yICVkIGNyZWF0aW5nIGRldmljZSBmb3IgcG9ydCAldVxuIiwKKwkJCWVyciwgaWQpOworCQlnb3RvIGZyZWVfY2RldjsKIAl9CiAKLQkvKiBSZWdpc3RlciB0aGUgaW5wdXQgYnVmZmVyIHRoZSBmaXJzdCB0aW1lLiAqLwotCWFkZF9pbmJ1ZigpOworCXNwaW5fbG9ja19pbml0KCZwb3J0LT5pbmJ1Zl9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT53YWl0cXVldWUpOworCisJLyogRmlsbCB0aGUgaW5fdnEgd2l0aCBidWZmZXJzIHNvIHRoZSBob3N0IGNhbiBzZW5kIHVzIGRhdGEuICovCisJZXJyID0gZmlsbF9xdWV1ZShwb3J0LT5pbl92cSwgJnBvcnQtPmluYnVmX2xvY2spOworCWlmICghZXJyKSB7CisJCWRldl9lcnIocG9ydC0+ZGV2LCAiRXJyb3IgYWxsb2NhdGluZyBpbmJ1ZnNcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfZGV2aWNlOworCX0KKworCS8qCisJICogSWYgd2UncmUgbm90IHVzaW5nIG11bHRpcG9ydCBzdXBwb3J0LCB0aGlzIGhhcyB0byBiZSBhIGNvbnNvbGUgcG9ydAorCSAqLworCWlmICghdXNlX211bHRpcG9ydChwb3J0LT5wb3J0ZGV2KSkgeworCQllcnIgPSBpbml0X3BvcnRfY29uc29sZShwb3J0KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZnJlZV9pbmJ1ZnM7CisJfQorCisJc3Bpbl9sb2NrX2lycSgmcG9ydGRldi0+cG9ydHNfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcG9ydC0+bGlzdCwgJnBvcnQtPnBvcnRkZXYtPnBvcnRzKTsKKwlzcGluX3VubG9ja19pcnEoJnBvcnRkZXYtPnBvcnRzX2xvY2spOworCisJLyoKKwkgKiBUZWxsIHRoZSBIb3N0IHdlJ3JlIHNldCBzbyB0aGF0IGl0IGNhbiBzZW5kIHVzIHZhcmlvdXMKKwkgKiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHRoaXMgcG9ydCAoZWcsIHBvcnQgbmFtZSwKKwkgKiBjYWNoaW5nLCB3aGV0aGVyIHRoaXMgaXMgYSBjb25zb2xlIHBvcnQsIGV0Yy4pCisJICovCisJc2VuZF9jb250cm9sX21zZyhwb3J0LCBWSVJUSU9fQ09OU09MRV9QT1JUX1JFQURZLCAxKTsKKworCWlmIChwZHJ2ZGF0YS5kZWJ1Z2ZzX2RpcikgeworCQkvKgorCQkgKiBGaW5hbGx5LCBjcmVhdGUgdGhlIGRlYnVnZnMgZmlsZSB0aGF0IHdlIGNhbiB1c2UgdG8KKwkJICogaW5zcGVjdCBhIHBvcnQncyBzdGF0ZSBhdCBhbnkgdGltZQorCQkgKi8KKwkJc3ByaW50ZihkZWJ1Z2ZzX25hbWUsICJ2cG9ydCV1cCV1IiwKKwkJCXBvcnQtPnBvcnRkZXYtPmRydl9pbmRleCwgaWQpOworCQlwb3J0LT5kZWJ1Z2ZzX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGRlYnVnZnNfbmFtZSwgMDQ0NCwKKwkJCQkJCQkgcGRydmRhdGEuZGVidWdmc19kaXIsCisJCQkJCQkJIHBvcnQsCisJCQkJCQkJICZwb3J0X2RlYnVnZnNfb3BzKTsKKwl9CisJcmV0dXJuIDA7CisKK2ZyZWVfaW5idWZzOgorCXdoaWxlICgoYnVmID0gcG9ydC0+aW5fdnEtPnZxX29wcy0+ZGV0YWNoX3VudXNlZF9idWYocG9ydC0+aW5fdnEpKSkKKwkJZnJlZV9idWYoYnVmKTsKK2ZyZWVfZGV2aWNlOgorCWRldmljZV9kZXN0cm95KHBkcnZkYXRhLmNsYXNzLCBwb3J0LT5kZXYtPmRldnQpOworZnJlZV9jZGV2OgorCWNkZXZfZGVsKCZwb3J0LT5jZGV2KTsKK2ZyZWVfcG9ydDoKKwlrZnJlZShwb3J0KTsKK2ZhaWw6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRoZSB3b3JraGFuZGxlciBmb3IgY29uZmlnLXNwYWNlIHVwZGF0ZXMuCisgKgorICogVGhpcyBpcyBjYWxsZWQgd2hlbiBwb3J0cyBhcmUgaG90LWFkZGVkLgorICovCitzdGF0aWMgdm9pZCBjb25maWdfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnIHZpcnRjb25jb25mOworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXY7CisJaW50IGVycjsKKworCXBvcnRkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBvcnRzX2RldmljZSwgY29uZmlnX3dvcmspOworCisJdmRldiA9IHBvcnRkZXYtPnZkZXY7CisJdmRldi0+Y29uZmlnLT5nZXQodmRldiwKKwkJCSAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywgbnJfcG9ydHMpLAorCQkJICAmdmlydGNvbmNvbmYubnJfcG9ydHMsCisJCQkgIHNpemVvZih2aXJ0Y29uY29uZi5ucl9wb3J0cykpOworCisJaWYgKHBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cyA9PSB2aXJ0Y29uY29uZi5ucl9wb3J0cykgeworCQkvKgorCQkgKiBQb3J0IDAgZ290IGhvdC1hZGRlZC4gIFNpbmNlIHdlIGFscmVhZHkgZGlkIGFsbCB0aGUKKwkJICogb3RoZXIgaW5pdGlhbGlzYXRpb24gZm9yIGl0LCBqdXN0IHRlbGwgdGhlIEhvc3QKKwkJICogdGhhdCB0aGUgcG9ydCBpcyByZWFkeSBpZiB3ZSBmaW5kIHRoZSBwb3J0LiAgSW4KKwkJICogY2FzZSB0aGUgcG9ydCB3YXMgaG90LXJlbW92ZWQgZWFybGllciwgd2UgY2FsbAorCQkgKiBhZGRfcG9ydCB0byBhZGQgdGhlIHBvcnQuCisJCSAqLworCQlzdHJ1Y3QgcG9ydCAqcG9ydDsKKworCQlwb3J0ID0gZmluZF9wb3J0X2J5X2lkKHBvcnRkZXYsIDApOworCQlpZiAoIXBvcnQpCisJCQlhZGRfcG9ydChwb3J0ZGV2LCAwKTsKKwkJZWxzZQorCQkJc2VuZF9jb250cm9sX21zZyhwb3J0LCBWSVJUSU9fQ09OU09MRV9QT1JUX1JFQURZLCAxKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodmlydGNvbmNvbmYubnJfcG9ydHMgPiBwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzKSB7CisJCWRldl93YXJuKCZ2ZGV2LT5kZXYsCisJCQkgIk1vcmUgcG9ydHMgc3BlY2lmaWVkICgldSkgdGhhbiBhbGxvd2VkICgldSkiLAorCQkJIHBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cyArIDEsCisJCQkgcG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cyk7CisJCXJldHVybjsKKwl9CisJaWYgKHZpcnRjb25jb25mLm5yX3BvcnRzIDwgcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzKQorCQlyZXR1cm47CisKKwkvKiBIb3QtYWRkIHBvcnRzICovCisJd2hpbGUgKHZpcnRjb25jb25mLm5yX3BvcnRzIC0gcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzKSB7CisJCWVyciA9IGFkZF9wb3J0KHBvcnRkZXYsIHBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cyk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwkJcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzKys7CisJfQorfQorCitzdGF0aWMgaW50IGluaXRfdnFzKHN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXYpCit7CisJdnFfY2FsbGJhY2tfdCAqKmlvX2NhbGxiYWNrczsKKwljaGFyICoqaW9fbmFtZXM7CisJc3RydWN0IHZpcnRxdWV1ZSAqKnZxczsKKwl1MzIgaSwgaiwgbnJfcG9ydHMsIG5yX3F1ZXVlczsKKwlpbnQgZXJyOworCisJbnJfcG9ydHMgPSBwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzOworCW5yX3F1ZXVlcyA9IHVzZV9tdWx0aXBvcnQocG9ydGRldikgPyAobnJfcG9ydHMgKyAxKSAqIDIgOiAyOworCisJdnFzID0ga21hbGxvYyhucl9xdWV1ZXMgKiBzaXplb2Yoc3RydWN0IHZpcnRxdWV1ZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2cXMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwlpb19jYWxsYmFja3MgPSBrbWFsbG9jKG5yX3F1ZXVlcyAqIHNpemVvZih2cV9jYWxsYmFja190ICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvX2NhbGxiYWNrcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfdnFzOworCX0KKwlpb19uYW1lcyA9IGttYWxsb2MobnJfcXVldWVzICogc2l6ZW9mKGNoYXIgKiksIEdGUF9LRVJORUwpOworCWlmICghaW9fbmFtZXMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2NhbGxiYWNrczsKKwl9CisJcG9ydGRldi0+aW5fdnFzID0ga21hbGxvYyhucl9wb3J0cyAqIHNpemVvZihzdHJ1Y3QgdmlydHF1ZXVlICopLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0ZGV2LT5pbl92cXMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmcmVlX25hbWVzOworCX0KKwlwb3J0ZGV2LT5vdXRfdnFzID0ga21hbGxvYyhucl9wb3J0cyAqIHNpemVvZihzdHJ1Y3QgdmlydHF1ZXVlICopLAorCQkJCSAgIEdGUF9LRVJORUwpOworCWlmICghcG9ydGRldi0+b3V0X3ZxcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfaW52cXM7CisJfQorCisJLyoKKwkgKiBGb3IgYmFja3dhcmQgY29tcGF0IChuZXdlciBob3N0IGJ1dCBvbGRlciBndWVzdCksIHRoZSBob3N0CisJICogc3Bhd25zIGEgY29uc29sZSBwb3J0IGZpcnN0IGFuZCBhbHNvIGluaXRzIHRoZSB2cXMgZm9yIHBvcnQKKwkgKiAwIGJlZm9yZSBvdGhlcnMuCisJICovCisJaiA9IDA7CisJaW9fY2FsbGJhY2tzW2pdID0gaW5faW50cjsKKwlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwlpb19uYW1lc1tqXSA9ICJpbnB1dCI7CisJaW9fbmFtZXNbaiArIDFdID0gIm91dHB1dCI7CisJaiArPSAyOworCisJaWYgKHVzZV9tdWx0aXBvcnQocG9ydGRldikpIHsKKwkJaW9fY2FsbGJhY2tzW2pdID0gY29udHJvbF9pbnRyOworCQlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwkJaW9fbmFtZXNbal0gPSAiY29udHJvbC1pIjsKKwkJaW9fbmFtZXNbaiArIDFdID0gImNvbnRyb2wtbyI7CisKKwkJZm9yIChpID0gMTsgaSA8IG5yX3BvcnRzOyBpKyspIHsKKwkJCWogKz0gMjsKKwkJCWlvX2NhbGxiYWNrc1tqXSA9IGluX2ludHI7CisJCQlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwkJCWlvX25hbWVzW2pdID0gImlucHV0IjsKKwkJCWlvX25hbWVzW2ogKyAxXSA9ICJvdXRwdXQiOworCQl9CisJfQorCS8qIEZpbmQgdGhlIHF1ZXVlcy4gKi8KKwllcnIgPSBwb3J0ZGV2LT52ZGV2LT5jb25maWctPmZpbmRfdnFzKHBvcnRkZXYtPnZkZXYsIG5yX3F1ZXVlcywgdnFzLAorCQkJCQkgICAgICBpb19jYWxsYmFja3MsCisJCQkJCSAgICAgIChjb25zdCBjaGFyICoqKWlvX25hbWVzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfb3V0dnFzOworCisJaiA9IDA7CisJcG9ydGRldi0+aW5fdnFzWzBdID0gdnFzWzBdOworCXBvcnRkZXYtPm91dF92cXNbMF0gPSB2cXNbMV07CisJaiArPSAyOworCWlmICh1c2VfbXVsdGlwb3J0KHBvcnRkZXYpKSB7CisJCXBvcnRkZXYtPmNfaXZxID0gdnFzW2pdOworCQlwb3J0ZGV2LT5jX292cSA9IHZxc1tqICsgMV07CisKKwkJZm9yIChpID0gMTsgaSA8IG5yX3BvcnRzOyBpKyspIHsKKwkJCWogKz0gMjsKKwkJCXBvcnRkZXYtPmluX3Zxc1tpXSA9IHZxc1tqXTsKKwkJCXBvcnRkZXYtPm91dF92cXNbaV0gPSB2cXNbaiArIDFdOworCQl9CisJfQorCWtmcmVlKGlvX2NhbGxiYWNrcyk7CisJa2ZyZWUoaW9fbmFtZXMpOworCWtmcmVlKHZxcyk7CisKKwlyZXR1cm4gMDsKKworZnJlZV9uYW1lczoKKwlrZnJlZShpb19uYW1lcyk7CitmcmVlX2NhbGxiYWNrczoKKwlrZnJlZShpb19jYWxsYmFja3MpOworZnJlZV9vdXR2cXM6CisJa2ZyZWUocG9ydGRldi0+b3V0X3Zxcyk7CitmcmVlX2ludnFzOgorCWtmcmVlKHBvcnRkZXYtPmluX3Zxcyk7CitmcmVlX3ZxczoKKwlrZnJlZSh2cXMpOworZmFpbDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwb3J0ZGV2X2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCit9OworCisvKgorICogT25jZSB3ZSdyZSBmdXJ0aGVyIGluIGJvb3QsIHdlIGdldCBwcm9iZWQgbGlrZSBhbnkgb3RoZXIgdmlydGlvCisgKiBkZXZpY2UuCisgKgorICogSWYgdGhlIGhvc3QgYWxzbyBzdXBwb3J0cyBtdWx0aXBsZSBjb25zb2xlIHBvcnRzLCB3ZSBjaGVjayB0aGUKKyAqIGNvbmZpZyBzcGFjZSB0byBzZWUgaG93IG1hbnkgcG9ydHMgdGhlIGhvc3QgaGFzIHNwYXduZWQuICBXZQorICogaW5pdGlhbGl6ZSBlYWNoIHBvcnQgZm91bmQuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHZpcnRjb25zX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJdTMyIGk7CisJaW50IGVycjsKKwlib29sIG11bHRpcG9ydDsKKworCXBvcnRkZXYgPSBrbWFsbG9jKHNpemVvZigqcG9ydGRldiksIEdGUF9LRVJORUwpOworCWlmICghcG9ydGRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogQXR0YWNoIHRoaXMgcG9ydGRldiB0byB0aGlzIHZpcnRpb19kZXZpY2UsIGFuZCB2aWNlLXZlcnNhLiAqLworCXBvcnRkZXYtPnZkZXYgPSB2ZGV2OworCXZkZXYtPnByaXYgPSBwb3J0ZGV2OworCisJc3Bpbl9sb2NrX2lycSgmcGRydmRhdGFfbG9jayk7CisJcG9ydGRldi0+ZHJ2X2luZGV4ID0gcGRydmRhdGEuaW5kZXgrKzsKKwlzcGluX3VubG9ja19pcnEoJnBkcnZkYXRhX2xvY2spOworCisJcG9ydGRldi0+Y2hyX21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsICJ2aXJ0aW8tcG9ydHNkZXYiLAorCQkJCQkgICAgICZwb3J0ZGV2X2ZvcHMpOworCWlmIChwb3J0ZGV2LT5jaHJfbWFqb3IgPCAwKSB7CisJCWRldl9lcnIoJnZkZXYtPmRldiwKKwkJCSJFcnJvciAlZCByZWdpc3RlcmluZyBjaHJkZXYgZm9yIGRldmljZSAldVxuIiwKKwkJCXBvcnRkZXYtPmNocl9tYWpvciwgcG9ydGRldi0+ZHJ2X2luZGV4KTsKKwkJZXJyID0gcG9ydGRldi0+Y2hyX21ham9yOworCQlnb3RvIGZyZWU7CisJfQorCisJbXVsdGlwb3J0ID0gZmFsc2U7CisJcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzID0gMTsKKwlwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzID0gMTsKKwlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JUKSkgeworCQltdWx0aXBvcnQgPSB0cnVlOworCQl2ZGV2LT5mZWF0dXJlc1swXSB8PSAxIDw8IFZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JUOworCisJCXZkZXYtPmNvbmZpZy0+Z2V0KHZkZXYsIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb25maWcsCisJCQkJCQkgbnJfcG9ydHMpLAorCQkJCSAgJnBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cywKKwkJCQkgIHNpemVvZihwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMpKTsKKwkJdmRldi0+Y29uZmlnLT5nZXQodmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywKKwkJCQkJCSBtYXhfbnJfcG9ydHMpLAorCQkJCSAgJnBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMsCisJCQkJICBzaXplb2YocG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cykpOworCQlpZiAocG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzID4gcG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cykgeworCQkJZGV2X3dhcm4oJnZkZXYtPmRldiwKKwkJCQkgIk1vcmUgcG9ydHMgKCV1KSBzcGVjaWZpZWQgdGhhbiBhbGxvd2VkICgldSkuIFdpbGwgaW5pdCAldSBwb3J0cy4iLAorCQkJCSBwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMsCisJCQkJIHBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMsCisJCQkJIHBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMpOworCisJCQlwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMgPSBwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzOworCQl9CisJfQorCisJLyogTGV0IHRoZSBIb3N0IGtub3cgd2Ugc3VwcG9ydCBtdWx0aXBsZSBwb3J0cy4qLworCXZkZXYtPmNvbmZpZy0+ZmluYWxpemVfZmVhdHVyZXModmRldik7CisKKwllcnIgPSBpbml0X3Zxcyhwb3J0ZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZ2ZGV2LT5kZXYsICJFcnJvciAlZCBpbml0aWFsaXppbmcgdnFzXG4iLCBlcnIpOworCQlnb3RvIGZyZWVfY2hyZGV2OworCX0KKworCXNwaW5fbG9ja19pbml0KCZwb3J0ZGV2LT5wb3J0c19sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcG9ydGRldi0+cG9ydHMpOworCisJaWYgKG11bHRpcG9ydCkgeworCQlzcGluX2xvY2tfaW5pdCgmcG9ydGRldi0+Y3ZxX2xvY2spOworCQlJTklUX1dPUksoJnBvcnRkZXYtPmNvbnRyb2xfd29yaywgJmNvbnRyb2xfd29ya19oYW5kbGVyKTsKKwkJSU5JVF9XT1JLKCZwb3J0ZGV2LT5jb25maWdfd29yaywgJmNvbmZpZ193b3JrX2hhbmRsZXIpOworCisJCWVyciA9IGZpbGxfcXVldWUocG9ydGRldi0+Y19pdnEsICZwb3J0ZGV2LT5jdnFfbG9jayk7CisJCWlmICghZXJyKSB7CisJCQlkZXZfZXJyKCZ2ZGV2LT5kZXYsCisJCQkJIkVycm9yIGFsbG9jYXRpbmcgYnVmZmVycyBmb3IgY29udHJvbCBxdWV1ZVxuIik7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBmcmVlX3ZxczsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBwb3J0ZGV2LT5jb25maWcubnJfcG9ydHM7IGkrKykKKwkJYWRkX3BvcnQocG9ydGRldiwgaSk7CisKKwkvKiBTdGFydCB1c2luZyB0aGUgbmV3IGNvbnNvbGUgb3V0cHV0LiAqLworCWVhcmx5X3B1dF9jaGFycyA9IE5VTEw7CiAJcmV0dXJuIDA7CiAKIGZyZWVfdnFzOgogCXZkZXYtPmNvbmZpZy0+ZGVsX3Zxcyh2ZGV2KTsKKwlrZnJlZShwb3J0ZGV2LT5pbl92cXMpOworCWtmcmVlKHBvcnRkZXYtPm91dF92cXMpOworZnJlZV9jaHJkZXY6CisJdW5yZWdpc3Rlcl9jaHJkZXYocG9ydGRldi0+Y2hyX21ham9yLCAidmlydGlvLXBvcnRzZGV2Iik7CiBmcmVlOgotCWtmcmVlKGluYnVmKTsKKwlrZnJlZShwb3J0ZGV2KTsKIGZhaWw6CiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgdmlydGNvbnNfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJc3RydWN0IHBvcnQgKnBvcnQsICpwb3J0MjsKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJcG9ydGRldiA9IHZkZXYtPnByaXY7CisKKwljYW5jZWxfd29ya19zeW5jKCZwb3J0ZGV2LT5jb250cm9sX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJnBvcnRkZXYtPmNvbmZpZ193b3JrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCBwb3J0MiwgJnBvcnRkZXYtPnBvcnRzLCBsaXN0KQorCQlyZW1vdmVfcG9ydChwb3J0KTsKKworCXVucmVnaXN0ZXJfY2hyZGV2KHBvcnRkZXYtPmNocl9tYWpvciwgInZpcnRpby1wb3J0c2RldiIpOworCisJd2hpbGUgKChidWYgPSBwb3J0ZGV2LT5jX2l2cS0+dnFfb3BzLT5nZXRfYnVmKHBvcnRkZXYtPmNfaXZxLCAmbGVuKSkpCisJCWZyZWVfYnVmKGJ1Zik7CisKKwl3aGlsZSAoKGJ1ZiA9IHBvcnRkZXYtPmNfaXZxLT52cV9vcHMtPmRldGFjaF91bnVzZWRfYnVmKHBvcnRkZXYtPmNfaXZxKSkpCisJCWZyZWVfYnVmKGJ1Zik7CisKKwl2ZGV2LT5jb25maWctPmRlbF92cXModmRldik7CisJa2ZyZWUocG9ydGRldi0+aW5fdnFzKTsKKwlrZnJlZShwb3J0ZGV2LT5vdXRfdnFzKTsKKworCWtmcmVlKHBvcnRkZXYpOworfQorCiBzdGF0aWMgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFZJUlRJT19JRF9DT05TT0xFLCBWSVJUSU9fREVWX0FOWV9JRCB9LAogCXsgMCB9LApAQCAtMjUzLDYgKzE1MTEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7CiAJVklSVElPX0NPTlNPTEVfRl9TSVpFLAorCVZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JULAogfTsKIAogc3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIHZpcnRpb19jb25zb2xlID0gewpAQCAtMjYyLDE0ICsxNTIxLDQxIEBACiAJLmRyaXZlci5vd25lciA9CVRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9CWlkX3RhYmxlLAogCS5wcm9iZSA9CXZpcnRjb25zX3Byb2JlLAotCS5jb25maWdfY2hhbmdlZCA9IHZpcnRjb25zX2FwcGx5X2NvbmZpZywKKwkucmVtb3ZlID0JdmlydGNvbnNfcmVtb3ZlLAorCS5jb25maWdfY2hhbmdlZCA9IGNvbmZpZ19pbnRyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQogeworCWludCBlcnI7CisKKwlwZHJ2ZGF0YS5jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInZpcnRpby1wb3J0cyIpOworCWlmIChJU19FUlIocGRydmRhdGEuY2xhc3MpKSB7CisJCWVyciA9IFBUUl9FUlIocGRydmRhdGEuY2xhc3MpOworCQlwcl9lcnIoIkVycm9yICVkIGNyZWF0aW5nIHZpcnRpby1wb3J0cyBjbGFzc1xuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwZHJ2ZGF0YS5kZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigidmlydGlvLXBvcnRzIiwgTlVMTCk7CisJaWYgKCFwZHJ2ZGF0YS5kZWJ1Z2ZzX2RpcikgeworCQlwcl93YXJuaW5nKCJFcnJvciAlbGQgY3JlYXRpbmcgZGVidWdmcyBkaXIgZm9yIHZpcnRpby1wb3J0c1xuIiwKKwkJCSAgIFBUUl9FUlIocGRydmRhdGEuZGVidWdmc19kaXIpKTsKKwl9CisJSU5JVF9MSVNUX0hFQUQoJnBkcnZkYXRhLmNvbnNvbGVzKTsKKwogCXJldHVybiByZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fY29uc29sZSk7CiB9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCit7CisJdW5yZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fY29uc29sZSk7CisKKwljbGFzc19kZXN0cm95KHBkcnZkYXRhLmNsYXNzKTsKKwlpZiAocGRydmRhdGEuZGVidWdmc19kaXIpCisJCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShwZHJ2ZGF0YS5kZWJ1Z2ZzX2Rpcik7Cit9CiBtb2R1bGVfaW5pdChpbml0KTsKK21vZHVsZV9leGl0KGZpbmkpOwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHZpcnRpbywgaWRfdGFibGUpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJWaXJ0aW8gY29uc29sZSBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92bWVfc2NjLmMgYi9kcml2ZXJzL2NoYXIvdm1lX3NjYy5jCmluZGV4IDk5NGUxYTUuLjhiMjQ3MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92bWVfc2NjLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZtZV9zY2MuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAgKiB2bWVfc2NjX2luaXQoKSBhbmQgc3VwcG9ydCBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBzY2NfaW5pdF9kcml2ZXJzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzY2NfaW5pdF9kcml2ZXJzKHZvaWQpCiB7CiAJaW50IGVycm9yOwogCkBAIC0xNzIsNyArMTcyLDcgQEAKIC8qIHBvcnRzW10gYXJyYXkgaXMgaW5kZXhlZCBieSBsaW5lIG5vIChpLmUuIFswXSBmb3IgdHR5UzAsIFsxXSBmb3IgdHR5UzEpLgogICovCiAKLXN0YXRpYyB2b2lkIHNjY19pbml0X3BvcnRzdHJ1Y3RzKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgc2NjX2luaXRfcG9ydHN0cnVjdHModm9pZCkKIHsKIAlzdHJ1Y3Qgc2NjX3BvcnQgKnBvcnQ7CiAJaW50IGk7CkBAIC0xOTUsNyArMTk1LDcgQEAKIAogCiAjaWZkZWYgQ09ORklHX01WTUUxNDdfU0NDCi1zdGF0aWMgaW50IG12bWUxNDdfc2NjX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG12bWUxNDdfc2NjX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3Qgc2NjX3BvcnQgKnBvcnQ7CiAJaW50IGVycm9yOwpAQCAtMjk4LDcgKzI5OCw3IEBACiAKIAogI2lmZGVmIENPTkZJR19NVk1FMTYyX1NDQwotc3RhdGljIGludCBtdm1lMTYyX3NjY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtdm1lMTYyX3NjY19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHNjY19wb3J0ICpwb3J0OwogCWludCBlcnJvcjsKQEAgLTQwNCw3ICs0MDQsNyBAQAogCiAKICNpZmRlZiBDT05GSUdfQlZNRTYwMDBfU0NDCi1zdGF0aWMgaW50IGJ2bWU2MDAwX3NjY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBidm1lNjAwMF9zY2NfaW5pdCh2b2lkKQogewogCXN0cnVjdCBzY2NfcG9ydCAqcG9ydDsKIAlpbnQgZXJyb3I7CkBAIC01MDMsNyArNTAzLDcgQEAKICNlbmRpZgogCiAKLXN0YXRpYyBpbnQgdm1lX3NjY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB2bWVfc2NjX2luaXQodm9pZCkKIHsKIAlpbnQgcmVzID0gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9jczU1MzUtY2xvY2tldnQuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvY3M1NTM1LWNsb2NrZXZ0LmMKaW5kZXggMjdkMjBmYS4uYjMxNGE5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9jczU1MzUtY2xvY2tldnQuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2NzNTUzNS1jbG9ja2V2dC5jCkBAIC0yMSw3ICsyMSw3IEBACiAKICNkZWZpbmUgRFJWX05BTUUgImNzNTUzNS1jbG9ja2V2dCIKIAotc3RhdGljIGludCB0aW1lcl9pcnEgPSBDT05GSUdfQ1M1NTM1X01GR1BUX0RFRkFVTFRfSVJROworc3RhdGljIGludCB0aW1lcl9pcnE7CiBtb2R1bGVfcGFyYW1fbmFtZWQoaXJxLCB0aW1lcl9pcnEsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIldoaWNoIElSUSB0byB1c2UgZm9yIHRoZSBjbG9jayBzb3VyY2UgTUZHUFQgdGlja3MuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jCmluZGV4IDZiM2UwYzIuLjU3ODU5NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYwpAQCAtNDAsNyArNDAsNiBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3Nfc3VzcGVuZDsKIAl1bnNpZ25lZCBsb25nIG1hdGNoX3ZhbHVlOwogCXVuc2lnbmVkIGxvbmcgbmV4dF9tYXRjaF92YWx1ZTsKIAl1bnNpZ25lZCBsb25nIG1heF9tYXRjaF92YWx1ZTsKQEAgLTQzMiw2ICs0MzEsMTEgQEAKIAlzaF9jbXRfc3RvcChjc190b19zaF9jbXQoY3MpLCBGTEFHX0NMT0NLU09VUkNFKTsKIH0KIAorc3RhdGljIHZvaWQgc2hfY210X2Nsb2Nrc291cmNlX3Jlc3VtZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCXNoX2NtdF9zdGFydChjc190b19zaF9jbXQoY3MpLCBGTEFHX0NMT0NLU09VUkNFKTsKK30KKwogc3RhdGljIGludCBzaF9jbXRfcmVnaXN0ZXJfY2xvY2tzb3VyY2Uoc3RydWN0IHNoX2NtdF9wcml2ICpwLAogCQkJCSAgICAgICBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIHJhdGluZykKIHsKQEAgLTQ0Miw2ICs0NDYsOCBAQAogCWNzLT5yZWFkID0gc2hfY210X2Nsb2Nrc291cmNlX3JlYWQ7CiAJY3MtPmVuYWJsZSA9IHNoX2NtdF9jbG9ja3NvdXJjZV9lbmFibGU7CiAJY3MtPmRpc2FibGUgPSBzaF9jbXRfY2xvY2tzb3VyY2VfZGlzYWJsZTsKKwljcy0+c3VzcGVuZCA9IHNoX2NtdF9jbG9ja3NvdXJjZV9kaXNhYmxlOworCWNzLT5yZXN1bWUgPSBzaF9jbXRfY2xvY2tzb3VyY2VfcmVzdW1lOwogCWNzLT5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSyhzaXplb2YodW5zaWduZWQgbG9uZykgKiA4KTsKIAljcy0+ZmxhZ3MgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUzsKIAlwcl9pbmZvKCJzaF9jbXQ6ICVzIHVzZWQgYXMgY2xvY2sgc291cmNlXG4iLCBjcy0+bmFtZSk7CkBAIC02MDMsMTggKzYwOSwxMyBAQAogCXAtPmlycWFjdGlvbi5oYW5kbGVyID0gc2hfY210X2ludGVycnVwdDsKIAlwLT5pcnFhY3Rpb24uZGV2X2lkID0gcDsKIAlwLT5pcnFhY3Rpb24uZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTDsKLQlyZXQgPSBzZXR1cF9pcnEoaXJxLCAmcC0+aXJxYWN0aW9uKTsKLQlpZiAocmV0KSB7Ci0JCXByX2Vycigic2hfY210OiBmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWRcbiIsIGlycSk7Ci0JCWdvdG8gZXJyMTsKLQl9CiAKIAkvKiBnZXQgaG9sZCBvZiBjbG9jayAqLwogCXAtPmNsayA9IGNsa19nZXQoJnAtPnBkZXYtPmRldiwgY2ZnLT5jbGspOwogCWlmIChJU19FUlIocC0+Y2xrKSkgewogCQlwcl9lcnIoInNoX2NtdDogY2Fubm90IGdldCBjbG9jayBcIiVzXCJcbiIsIGNmZy0+Y2xrKTsKIAkJcmV0ID0gUFRSX0VSUihwLT5jbGspOwotCQlnb3RvIGVycjI7CisJCWdvdG8gZXJyMTsKIAl9CiAKIAlpZiAocmVzb3VyY2Vfc2l6ZShyZXMpID09IDYpIHsKQEAgLTYyNywxNCArNjI4LDI1IEBACiAJCXAtPmNsZWFyX2JpdHMgPSB+MHhjMDAwOwogCX0KIAotCXJldHVybiBzaF9jbXRfcmVnaXN0ZXIocCwgY2ZnLT5uYW1lLAotCQkJICAgICAgIGNmZy0+Y2xvY2tldmVudF9yYXRpbmcsCi0JCQkgICAgICAgY2ZnLT5jbG9ja3NvdXJjZV9yYXRpbmcpOwotIGVycjI6Ci0JcmVtb3ZlX2lycShpcnEsICZwLT5pcnFhY3Rpb24pOwotIGVycjE6CisJcmV0ID0gc2hfY210X3JlZ2lzdGVyKHAsIGNmZy0+bmFtZSwKKwkJCSAgICAgIGNmZy0+Y2xvY2tldmVudF9yYXRpbmcsCisJCQkgICAgICBjZmctPmNsb2Nrc291cmNlX3JhdGluZyk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoInNoX2NtdDogcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyMTsKKwl9CisKKwlyZXQgPSBzZXR1cF9pcnEoaXJxLCAmcC0+aXJxYWN0aW9uKTsKKwlpZiAocmV0KSB7CisJCXByX2Vycigic2hfY210OiBmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWRcbiIsIGlycSk7CisJCWdvdG8gZXJyMTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyMToKIAlpb3VubWFwKHAtPm1hcGJhc2UpOwotIGVycjA6CitlcnIwOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY2OCwzOCArNjgwLDExIEBACiAJcmV0dXJuIC1FQlVTWTsgLyogY2Fubm90IHVucmVnaXN0ZXIgY2xvY2tldmVudCBhbmQgY2xvY2tzb3VyY2UgKi8KIH0KIAotc3RhdGljIGludCBzaF9jbXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBzaF9jbXRfcHJpdiAqcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JLyogc2F2ZSBmbGFnIHN0YXRlIGFuZCBzdG9wIENNVCBjaGFubmVsICovCi0JcC0+ZmxhZ3Nfc3VzcGVuZCA9IHAtPmZsYWdzOwotCXNoX2NtdF9zdG9wKHAsIHAtPmZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzaF9jbXRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHNoX2NtdF9wcml2ICpwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0KLQkvKiBzdGFydCBDTVQgY2hhbm5lbCBmcm9tIHNhdmVkIHN0YXRlICovCi0Jc2hfY210X3N0YXJ0KHAsIHAtPmZsYWdzX3N1c3BlbmQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc2hfY210X2Rldl9wbV9vcHMgPSB7Ci0JLnN1c3BlbmQgPSBzaF9jbXRfc3VzcGVuZCwKLQkucmVzdW1lID0gc2hfY210X3Jlc3VtZSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNoX2NtdF9kZXZpY2VfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzaF9jbXRfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzaF9jbXRfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAic2hfY210IiwKLQkJLnBtCT0gJnNoX2NtdF9kZXZfcG1fb3BzLAogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfbXR1Mi5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9tdHUyLmMKaW5kZXggOTczZTcxNC4uNGM4YTc1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9tdHUyLmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9tdHUyLmMKQEAgLTIyMSwxNSArMjIxLDE1IEBACiAJY2VkLT5jcHVtYXNrID0gY3B1bWFza19vZigwKTsKIAljZWQtPnNldF9tb2RlID0gc2hfbXR1Ml9jbG9ja19ldmVudF9tb2RlOwogCisJcHJfaW5mbygic2hfbXR1MjogJXMgdXNlZCBmb3IgY2xvY2sgZXZlbnRzXG4iLCBjZWQtPm5hbWUpOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZWQpOworCiAJcmV0ID0gc2V0dXBfaXJxKHAtPmlycWFjdGlvbi5pcnEsICZwLT5pcnFhY3Rpb24pOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJzaF9tdHUyOiBmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWRcbiIsCiAJCSAgICAgICBwLT5pcnFhY3Rpb24uaXJxKTsKIAkJcmV0dXJuOwogCX0KLQotCXByX2luZm8oInNoX210dTI6ICVzIHVzZWQgZm9yIGNsb2NrIGV2ZW50c1xuIiwgY2VkLT5uYW1lKTsKLQljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2VkKTsKIH0KIAogc3RhdGljIGludCBzaF9tdHUyX3JlZ2lzdGVyKHN0cnVjdCBzaF9tdHUyX3ByaXYgKnAsIGNoYXIgKm5hbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX3RtdS5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF90bXUuYwppbmRleCA5M2MyMzIyLi45NjFmNWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX3RtdS5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfdG11LmMKQEAgLTMyMywxNSArMzIzLDE1IEBACiAJY2VkLT5zZXRfbmV4dF9ldmVudCA9IHNoX3RtdV9jbG9ja19ldmVudF9uZXh0OwogCWNlZC0+c2V0X21vZGUgPSBzaF90bXVfY2xvY2tfZXZlbnRfbW9kZTsKIAorCXByX2luZm8oInNoX3RtdTogJXMgdXNlZCBmb3IgY2xvY2sgZXZlbnRzXG4iLCBjZWQtPm5hbWUpOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZWQpOworCiAJcmV0ID0gc2V0dXBfaXJxKHAtPmlycWFjdGlvbi5pcnEsICZwLT5pcnFhY3Rpb24pOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJzaF90bXU6IGZhaWxlZCB0byByZXF1ZXN0IGlycSAlZFxuIiwKIAkJICAgICAgIHAtPmlycWFjdGlvbi5pcnEpOwogCQlyZXR1cm47CiAJfQotCi0JcHJfaW5mbygic2hfdG11OiAlcyB1c2VkIGZvciBjbG9jayBldmVudHNcbiIsIGNlZC0+bmFtZSk7Ci0JY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNlZCk7CiB9CiAKIHN0YXRpYyBpbnQgc2hfdG11X3JlZ2lzdGVyKHN0cnVjdCBzaF90bXVfcHJpdiAqcCwgY2hhciAqbmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKaW5kZXggZjA2MDI0Ni4uNTM3YzI5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKKysrIGIvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKQEAgLTM2LDE3ICszNiw2IEBACiBNT0RVTEVfQVVUSE9SKCJFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBjb25uZWN0b3IuIik7CiAKLXN0YXRpYyB1MzIgY25faWR4ID0gQ05fSURYX0NPTk5FQ1RPUjsKLXN0YXRpYyB1MzIgY25fdmFsID0gQ05fVkFMX0NPTk5FQ1RPUjsKLQotbW9kdWxlX3BhcmFtKGNuX2lkeCwgdWludCwgMCk7Ci1tb2R1bGVfcGFyYW0oY25fdmFsLCB1aW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoY25faWR4LCAiQ29ubmVjdG9yJ3MgbWFpbiBkZXZpY2UgaWR4LiIpOwotTU9EVUxFX1BBUk1fREVTQyhjbl92YWwsICJDb25uZWN0b3IncyBtYWluIGRldmljZSB2YWwuIik7Ci0KLXN0YXRpYyBERUZJTkVfTVVURVgobm90aWZ5X2xvY2spOwotc3RhdGljIExJU1RfSEVBRChub3RpZnlfbGlzdCk7Ci0KIHN0YXRpYyBzdHJ1Y3QgY25fZGV2IGNkZXY7CiAKIHN0YXRpYyBpbnQgY25fYWxyZWFkeV9pbml0aWFsaXplZDsKQEAgLTIxMCw1NCArMTk5LDYgQEAKIH0KIAogLyoKLSAqIE5vdGlmaWNhdGlvbiByb3V0aW5nLgotICoKLSAqIEdldHMgaWQgYW5kIGNoZWNrcyBpZiB0aGVyZSBhcmUgbm90aWZpY2F0aW9uIHJlcXVlc3QgZm9yIGl0J3MgaWR4Ci0gKiBhbmQgdmFsLiAgSWYgdGhlcmUgYXJlIHN1Y2ggcmVxdWVzdHMgbm90aWZ5IHRoZSBsaXN0ZW5lcnMgd2l0aCB0aGUKLSAqIGdpdmVuIG5vdGlmeSBldmVudC4KLSAqCi0gKi8KLXN0YXRpYyB2b2lkIGNuX25vdGlmeShzdHJ1Y3QgY2JfaWQgKmlkLCB1MzIgbm90aWZ5X2V2ZW50KQotewotCXN0cnVjdCBjbl9jdGxfZW50cnkgKmVudDsKLQotCW11dGV4X2xvY2soJm5vdGlmeV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudCwgJm5vdGlmeV9saXN0LCBub3RpZnlfZW50cnkpIHsKLQkJaW50IGk7Ci0JCXN0cnVjdCBjbl9ub3RpZnlfcmVxICpyZXE7Ci0JCXN0cnVjdCBjbl9jdGxfbXNnICpjdGwgPSBlbnQtPm1zZzsKLQkJaW50IGlkeF9mb3VuZCwgdmFsX2ZvdW5kOwotCi0JCWlkeF9mb3VuZCA9IHZhbF9mb3VuZCA9IDA7Ci0KLQkJcmVxID0gKHN0cnVjdCBjbl9ub3RpZnlfcmVxICopY3RsLT5kYXRhOwotCQlmb3IgKGkgPSAwOyBpIDwgY3RsLT5pZHhfbm90aWZ5X251bTsgKytpLCArK3JlcSkgewotCQkJaWYgKGlkLT5pZHggPj0gcmVxLT5maXJzdCAmJgotCQkJCQlpZC0+aWR4IDwgcmVxLT5maXJzdCArIHJlcS0+cmFuZ2UpIHsKLQkJCQlpZHhfZm91bmQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IGN0bC0+dmFsX25vdGlmeV9udW07ICsraSwgKytyZXEpIHsKLQkJCWlmIChpZC0+dmFsID49IHJlcS0+Zmlyc3QgJiYKLQkJCQkJaWQtPnZhbCA8IHJlcS0+Zmlyc3QgKyByZXEtPnJhbmdlKSB7Ci0JCQkJdmFsX2ZvdW5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChpZHhfZm91bmQgJiYgdmFsX2ZvdW5kKSB7Ci0JCQlzdHJ1Y3QgY25fbXNnIG0gPSB7IC5hY2sgPSBub3RpZnlfZXZlbnQsIH07Ci0KLQkJCW1lbWNweSgmbS5pZCwgaWQsIHNpemVvZihtLmlkKSk7Ci0JCQljbl9uZXRsaW5rX3NlbmQoJm0sIGN0bC0+Z3JvdXAsIEdGUF9LRVJORUwpOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmbm90aWZ5X2xvY2spOwotfQotCi0vKgogICogQ2FsbGJhY2sgYWRkIHJvdXRpbmcgLSBhZGRzIGNhbGxiYWNrIHdpdGggZ2l2ZW4gSUQgYW5kIG5hbWUuCiAgKiBJZiB0aGVyZSBpcyByZWdpc3RlcmVkIGNhbGxiYWNrIHdpdGggdGhlIHNhbWUgSUQgaXQgd2lsbCBub3QgYmUgYWRkZWQuCiAgKgpAQCAtMjc2LDggKzIxNyw2IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWNuX25vdGlmeShpZCwgMCk7Ci0KIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNuX2FkZF9jYWxsYmFjayk7CkBAIC0yOTUsMTExICsyMzQsOSBAQAogCXN0cnVjdCBjbl9kZXYgKmRldiA9ICZjZGV2OwogCiAJY25fcXVldWVfZGVsX2NhbGxiYWNrKGRldi0+Y2JkZXYsIGlkKTsKLQljbl9ub3RpZnkoaWQsIDEpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY25fZGVsX2NhbGxiYWNrKTsKIAotLyoKLSAqIENoZWNrcyB0d28gY29ubmVjdG9yJ3MgY29udHJvbCBtZXNzYWdlcyB0byBiZSB0aGUgc2FtZS4KLSAqIFJldHVybnMgMSBpZiB0aGV5IGFyZSB0aGUgc2FtZSBvciBpZiB0aGUgZmlyc3Qgb25lIGlzIGNvcnJ1cHRlZC4KLSAqLwotc3RhdGljIGludCBjbl9jdGxfbXNnX2VxdWFscyhzdHJ1Y3QgY25fY3RsX21zZyAqbTEsIHN0cnVjdCBjbl9jdGxfbXNnICptMikKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgY25fbm90aWZ5X3JlcSAqcmVxMSwgKnJlcTI7Ci0KLQlpZiAobTEtPmlkeF9ub3RpZnlfbnVtICE9IG0yLT5pZHhfbm90aWZ5X251bSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAobTEtPnZhbF9ub3RpZnlfbnVtICE9IG0yLT52YWxfbm90aWZ5X251bSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAobTEtPmxlbiAhPSBtMi0+bGVuKQotCQlyZXR1cm4gMDsKLQotCWlmICgobTEtPmlkeF9ub3RpZnlfbnVtICsgbTEtPnZhbF9ub3RpZnlfbnVtKSAqIHNpemVvZigqcmVxMSkgIT0KLQkgICAgbTEtPmxlbikKLQkJcmV0dXJuIDE7Ci0KLQlyZXExID0gKHN0cnVjdCBjbl9ub3RpZnlfcmVxICopbTEtPmRhdGE7Ci0JcmVxMiA9IChzdHJ1Y3QgY25fbm90aWZ5X3JlcSAqKW0yLT5kYXRhOwotCi0JZm9yIChpID0gMDsgaSA8IG0xLT5pZHhfbm90aWZ5X251bTsgKytpKSB7Ci0JCWlmIChyZXExLT5maXJzdCAhPSByZXEyLT5maXJzdCB8fCByZXExLT5yYW5nZSAhPSByZXEyLT5yYW5nZSkKLQkJCXJldHVybiAwOwotCQlyZXExKys7Ci0JCXJlcTIrKzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbTEtPnZhbF9ub3RpZnlfbnVtOyArK2kpIHsKLQkJaWYgKHJlcTEtPmZpcnN0ICE9IHJlcTItPmZpcnN0IHx8IHJlcTEtPnJhbmdlICE9IHJlcTItPnJhbmdlKQotCQkJcmV0dXJuIDA7Ci0JCXJlcTErKzsKLQkJcmVxMisrOwotCX0KLQotCXJldHVybiAxOwotfQotCi0vKgotICogTWFpbiBjb25uZWN0b3IgZGV2aWNlJ3MgY2FsbGJhY2suCi0gKgotICogVXNlZCBmb3Igbm90aWZpY2F0aW9uIG9mIGEgcmVxdWVzdCdzIHByb2Nlc3NpbmcuCi0gKi8KLXN0YXRpYyB2b2lkIGNuX2NhbGxiYWNrKHN0cnVjdCBjbl9tc2cgKm1zZywgc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zICpuc3ApCi17Ci0Jc3RydWN0IGNuX2N0bF9tc2cgKmN0bDsKLQlzdHJ1Y3QgY25fY3RsX2VudHJ5ICplbnQ7Ci0JdTMyIHNpemU7Ci0KLQlpZiAobXNnLT5sZW4gPCBzaXplb2YoKmN0bCkpCi0JCXJldHVybjsKLQotCWN0bCA9IChzdHJ1Y3QgY25fY3RsX21zZyAqKW1zZy0+ZGF0YTsKLQotCXNpemUgPSAoc2l6ZW9mKCpjdGwpICsgKChjdGwtPmlkeF9ub3RpZnlfbnVtICsKLQkJCQkgY3RsLT52YWxfbm90aWZ5X251bSkgKgotCQkJCXNpemVvZihzdHJ1Y3QgY25fbm90aWZ5X3JlcSkpKTsKLQotCWlmIChtc2ctPmxlbiAhPSBzaXplKQotCQlyZXR1cm47Ci0KLQlpZiAoY3RsLT5sZW4gKyBzaXplb2YoKmN0bCkgIT0gbXNnLT5sZW4pCi0JCXJldHVybjsKLQotCS8qCi0JICogUmVtb3ZlIG5vdGlmaWNhdGlvbi4KLQkgKi8KLQlpZiAoY3RsLT5ncm91cCA9PSAwKSB7Ci0JCXN0cnVjdCBjbl9jdGxfZW50cnkgKm47Ci0KLQkJbXV0ZXhfbG9jaygmbm90aWZ5X2xvY2spOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50LCBuLCAmbm90aWZ5X2xpc3QsIG5vdGlmeV9lbnRyeSkgewotCQkJaWYgKGNuX2N0bF9tc2dfZXF1YWxzKGVudC0+bXNnLCBjdGwpKSB7Ci0JCQkJbGlzdF9kZWwoJmVudC0+bm90aWZ5X2VudHJ5KTsKLQkJCQlrZnJlZShlbnQpOwotCQkJfQotCQl9Ci0JCW11dGV4X3VubG9jaygmbm90aWZ5X2xvY2spOwotCi0JCXJldHVybjsKLQl9Ci0KLQlzaXplICs9IHNpemVvZigqZW50KTsKLQotCWVudCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlbnQpCi0JCXJldHVybjsKLQotCWVudC0+bXNnID0gKHN0cnVjdCBjbl9jdGxfbXNnICopKGVudCArIDEpOwotCi0JbWVtY3B5KGVudC0+bXNnLCBjdGwsIHNpemUgLSBzaXplb2YoKmVudCkpOwotCi0JbXV0ZXhfbG9jaygmbm90aWZ5X2xvY2spOwotCWxpc3RfYWRkKCZlbnQtPm5vdGlmeV9lbnRyeSwgJm5vdGlmeV9saXN0KTsKLQltdXRleF91bmxvY2soJm5vdGlmeV9sb2NrKTsKLX0KLQogc3RhdGljIGludCBjbl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCXN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldiA9IGNkZXYuY2JkZXY7CkBAIC00MzcsMTEgKzI3NCw4IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjbl9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGNuX2RldiAqZGV2ID0gJmNkZXY7Ci0JaW50IGVycjsKIAogCWRldi0+aW5wdXQgPSBjbl9yeF9za2I7Ci0JZGV2LT5pZC5pZHggPSBjbl9pZHg7Ci0JZGV2LT5pZC52YWwgPSBjbl92YWw7CiAKIAlkZXYtPm5scyA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZSgmaW5pdF9uZXQsIE5FVExJTktfQ09OTkVDVE9SLAogCQkJCQkgQ05fTkVUTElOS19VU0VSUyArIDB4ZiwKQEAgLTQ1NywxNCArMjkxLDYgQEAKIAogCWNuX2FscmVhZHlfaW5pdGlhbGl6ZWQgPSAxOwogCi0JZXJyID0gY25fYWRkX2NhbGxiYWNrKCZkZXYtPmlkLCAiY29ubmVjdG9yIiwgJmNuX2NhbGxiYWNrKTsKLQlpZiAoZXJyKSB7Ci0JCWNuX2FscmVhZHlfaW5pdGlhbGl6ZWQgPSAwOwotCQljbl9xdWV1ZV9mcmVlX2RldihkZXYtPmNiZGV2KTsKLQkJbmV0bGlua19rZXJuZWxfcmVsZWFzZShkZXYtPm5scyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgImNvbm5lY3RvciIsIFNfSVJVR08sICZjbl9maWxlX29wcyk7CiAKIAlyZXR1cm4gMDsKQEAgLTQ3OCw3ICszMDQsNiBAQAogCiAJcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgImNvbm5lY3RvciIpOwogCi0JY25fZGVsX2NhbGxiYWNrKCZkZXYtPmlkKTsKIAljbl9xdWV1ZV9mcmVlX2RldihkZXYtPmNiZGV2KTsKIAluZXRsaW5rX2tlcm5lbF9yZWxlYXNlKGRldi0+bmxzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCmluZGV4IDRiMzRhZGUuLmJkNDQ0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwpAQCAtNTU0LDYgKzU1NCw5IEBACiAJCQkJKGRic190dW5lcnNfaW5zLnVwX3RocmVzaG9sZCAtCiAJCQkJIGRic190dW5lcnNfaW5zLmRvd25fZGlmZmVyZW50aWFsKTsKIAorCQlpZiAoZnJlcV9uZXh0IDwgcG9saWN5LT5taW4pCisJCQlmcmVxX25leHQgPSBwb2xpY3ktPm1pbjsKKwogCQlpZiAoIWRic190dW5lcnNfaW5zLnBvd2Vyc2F2ZV9iaWFzKSB7CiAJCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChwb2xpY3ksIGZyZXFfbmV4dCwKIAkJCQkJQ1BVRlJFUV9SRUxBVElPTl9MKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuYyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuYwppbmRleCA0NmU4OTlhLi4xYzM4NDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5jCkBAIC0xMjc0LDcgKzEyNzQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBjcnlwdG80eHhfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNyeXB0bzR4eF9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgICAgICA9ICJhbWNjLHBwYzR4eC1jcnlwdG8iLH0sCiAJeyB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2dlb2RlLWFlcy5jIGIvZHJpdmVycy9jcnlwdG8vZ2VvZGUtYWVzLmMKaW5kZXggNDgwMTE2Mi4uYzdhNWE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vZ2VvZGUtYWVzLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vZ2VvZGUtYWVzLmMKQEAgLTEzNSwxMyArMTM1LDEzIEBACiAJLyoKIAkgKiBUaGUgcmVxdWVzdGVkIGtleSBzaXplIGlzIG5vdCBzdXBwb3J0ZWQgYnkgSFcsIGRvIGEgZmFsbGJhY2sKIAkgKi8KLQlvcC0+ZmFsbGJhY2suYmxrLT5iYXNlLmNydF9mbGFncyAmPSB+Q1JZUFRPX1RGTV9SRVFfTUFTSzsKLQlvcC0+ZmFsbGJhY2suYmxrLT5iYXNlLmNydF9mbGFncyB8PSAodGZtLT5jcnRfZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVNLKTsKKwlvcC0+ZmFsbGJhY2suY2lwLT5iYXNlLmNydF9mbGFncyAmPSB+Q1JZUFRPX1RGTV9SRVFfTUFTSzsKKwlvcC0+ZmFsbGJhY2suY2lwLT5iYXNlLmNydF9mbGFncyB8PSAodGZtLT5jcnRfZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVNLKTsKIAogCXJldCA9IGNyeXB0b19jaXBoZXJfc2V0a2V5KG9wLT5mYWxsYmFjay5jaXAsIGtleSwgbGVuKTsKIAlpZiAocmV0KSB7CiAJCXRmbS0+Y3J0X2ZsYWdzICY9IH5DUllQVE9fVEZNX1JFU19NQVNLOwotCQl0Zm0tPmNydF9mbGFncyB8PSAob3AtPmZhbGxiYWNrLmJsay0+YmFzZS5jcnRfZmxhZ3MgJiBDUllQVE9fVEZNX1JFU19NQVNLKTsKKwkJdGZtLT5jcnRfZmxhZ3MgfD0gKG9wLT5mYWxsYmFjay5jaXAtPmJhc2UuY3J0X2ZsYWdzICYgQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0yNjMsNyArMjYzLDcgQEAKIAogCWlmIChJU19FUlIob3AtPmZhbGxiYWNrLmNpcCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBhbGxvY2F0aW5nIGZhbGxiYWNrIGFsZ28gJXNcbiIsIG5hbWUpOwotCQlyZXR1cm4gUFRSX0VSUihvcC0+ZmFsbGJhY2suYmxrKTsKKwkJcmV0dXJuIFBUUl9FUlIob3AtPmZhbGxiYWNrLmNpcCk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYwppbmRleCAwYWY4MDU3Li5kM2EyN2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMKQEAgLTU3LDYgKzU3LDIzIEBACiAJcmV0dXJuIGNyeXB0b19zaGFzaF91cGRhdGUoJmRjdHgtPmZhbGxiYWNrLCBkYXRhLCBsZW5ndGgpOwogfQogCitzdGF0aWMgaW50IHBhZGxvY2tfc2hhX2V4cG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdm9pZCAqb3V0KQoreworCXN0cnVjdCBwYWRsb2NrX3NoYV9kZXNjICpkY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisKKwlyZXR1cm4gY3J5cHRvX3NoYXNoX2V4cG9ydCgmZGN0eC0+ZmFsbGJhY2ssIG91dCk7Cit9CisKK3N0YXRpYyBpbnQgcGFkbG9ja19zaGFfaW1wb3J0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCBjb25zdCB2b2lkICppbikKK3sKKwlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXN0cnVjdCBwYWRsb2NrX3NoYV9jdHggKmN0eCA9IGNyeXB0b19zaGFzaF9jdHgoZGVzYy0+dGZtKTsKKworCWRjdHgtPmZhbGxiYWNrLnRmbSA9IGN0eC0+ZmFsbGJhY2s7CisJZGN0eC0+ZmFsbGJhY2suZmxhZ3MgPSBkZXNjLT5mbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKKwlyZXR1cm4gY3J5cHRvX3NoYXNoX2ltcG9ydCgmZGN0eC0+ZmFsbGJhY2ssIGluKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHBhZGxvY2tfb3V0cHV0X2Jsb2NrKHVpbnQzMl90ICpzcmMsCiAJCSAJdWludDMyX3QgKmRzdCwgc2l6ZV90IGNvdW50KQogewpAQCAtMjM1LDcgKzI1MiwxMCBAQAogCS51cGRhdGUgCT0JcGFkbG9ja19zaGFfdXBkYXRlLAogCS5maW51cCAgCT0JcGFkbG9ja19zaGExX2ZpbnVwLAogCS5maW5hbCAgCT0JcGFkbG9ja19zaGExX2ZpbmFsLAorCS5leHBvcnQJCT0JcGFkbG9ja19zaGFfZXhwb3J0LAorCS5pbXBvcnQJCT0JcGFkbG9ja19zaGFfaW1wb3J0LAogCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyksCisJLnN0YXRlc2l6ZQk9CXNpemVvZihzdHJ1Y3Qgc2hhMV9zdGF0ZSksCiAJLmJhc2UJCT0JewogCQkuY3JhX25hbWUJCT0JInNoYTEiLAogCQkuY3JhX2RyaXZlcl9uYW1lCT0JInNoYTEtcGFkbG9jayIsCkBAIC0yNTYsNyArMjc2LDEwIEBACiAJLnVwZGF0ZSAJPQlwYWRsb2NrX3NoYV91cGRhdGUsCiAJLmZpbnVwICAJPQlwYWRsb2NrX3NoYTI1Nl9maW51cCwKIAkuZmluYWwgIAk9CXBhZGxvY2tfc2hhMjU2X2ZpbmFsLAorCS5leHBvcnQJCT0JcGFkbG9ja19zaGFfZXhwb3J0LAorCS5pbXBvcnQJCT0JcGFkbG9ja19zaGFfaW1wb3J0LAogCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyksCisJLnN0YXRlc2l6ZQk9CXNpemVvZihzdHJ1Y3Qgc2hhMjU2X3N0YXRlKSwKIAkuYmFzZQkJPQl7CiAJCS5jcmFfbmFtZQkJPQkic2hhMjU2IiwKIAkJLmNyYV9kcml2ZXJfbmFtZQk9CSJzaGEyNTYtcGFkbG9jayIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmMgYi9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmMKaW5kZXggYzQ3ZmZlOC4uZmQ1MjlkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3RhbGl0b3MuYwpAQCAtMTk1OCw3ICsxOTU4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB0YWxpdG9zX21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0YWxpdG9zX21hdGNoW10gPSB7CiAJewogCQkuY29tcGF0aWJsZSA9ICJmc2wsc2VjMi4wIiwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMgYi9kcml2ZXJzL2RtYS9jb2g5MDEzMTguYwppbmRleCBiNWYyZWUwLi42NGE5MzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9jb2g5MDEzMTguYworKysgYi9kcml2ZXJzL2RtYS9jb2g5MDEzMTguYwpAQCAtNjEzLDggKzYxMyw2IEBACiAJY29oZF9maW4tPnBlbmRpbmdfaXJxcy0tOwogCWNvaGMtPmNvbXBsZXRlZCA9IGNvaGRfZmluLT5kZXNjLmNvb2tpZTsKIAotCUJVR19PTihjb2hjLT5uYnJfYWN0aXZlX2RvbmUgJiYgY29oZF9maW4gPT0gTlVMTCk7Ci0KIAlpZiAoY29oYy0+bmJyX2FjdGl2ZV9kb25lID09IDApCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMgYi9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYwppbmRleCA2ZjUxYTBhLi5lN2EzMjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYworKysgYi9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYwpAQCAtODI2LDYgKzgyNiw3IEBACiAJCWNoYW4tPmRldi0+Y2hhbiA9IE5VTEw7CiAJCW11dGV4X3VubG9jaygmZG1hX2xpc3RfbXV0ZXgpOwogCQlkZXZpY2VfdW5yZWdpc3RlcigmY2hhbi0+ZGV2LT5kZXZpY2UpOworCQlmcmVlX3BlcmNwdShjaGFuLT5sb2NhbCk7CiAJfQogfQogRVhQT1JUX1NZTUJPTChkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZG1hdGVzdC5jIGIvZHJpdmVycy9kbWEvZG1hdGVzdC5jCmluZGV4IDhiOTA1MTYuLjk0OGQ1NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2RtYXRlc3QuYworKysgYi9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCiAJaWYgKGl0ZXJhdGlvbnMgPiAwKQogCQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCQkJREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQod2FpdF9kbWF0ZXN0X2V4aXQpOworCQkJREVDTEFSRV9XQUlUX1FVRVVFX0hFQURfT05TVEFDSyh3YWl0X2RtYXRlc3RfZXhpdCk7CiAJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZ3YWl0X2RtYXRlc3RfZXhpdCk7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuYyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmMKaW5kZXggNWY3YTUwMGUuLjVjYzM3YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmMKKysrIGIvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuYwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAJaWYgKGlzX2lvYXRfYWN0aXZlKHN0YXR1cykgfHwgaXNfaW9hdF9pZGxlKHN0YXR1cykpCiAJCWlvYXRfc3VzcGVuZChjaGFuKTsKIAl3aGlsZSAoaXNfaW9hdF9hY3RpdmUoc3RhdHVzKSB8fCBpc19pb2F0X2lkbGUoc3RhdHVzKSkgewotCQlpZiAoZW5kICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgZW5kKSkgeworCQlpZiAodG1vICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgZW5kKSkgewogCQkJZXJyID0gLUVUSU1FRE9VVDsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMgYi9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKaW5kZXggOWE1YmMxYS4uZTgwYmFlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCisrKyBiL2RyaXZlcnMvZG1hL2lwdS9pcHVfaWRtYWMuYwpAQCAtNzYxLDEyICs3NjEsMTAgQEAKICAqIEBidWZmZXJfbjoJYnVmZmVyIG51bWJlciB0byB1cGRhdGUuCiAgKgkJMCBvciAxIGFyZSB0aGUgb25seSB2YWxpZCB2YWx1ZXMuCiAgKiBAcGh5YWRkcjoJYnVmZmVyIHBoeXNpY2FsIGFkZHJlc3MuCi0gKiBAcmV0dXJuOglSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuIFRoaXMKLSAqICAgICAgICAgICAgICBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgdGhlIGJ1ZmZlciBpcyBzZXQgdG8gcmVhZHkuCiAgKi8KIC8qIENhbGxlZCB1bmRlciBzcGluX2xvY2soX2lycXNhdmUpKCZpY2hhbi0+bG9jaykgKi8KLXN0YXRpYyBpbnQgaXB1X3VwZGF0ZV9jaGFubmVsX2J1ZmZlcihzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4sCi0JCQkJICAgICBpbnQgYnVmZmVyX24sIGRtYV9hZGRyX3QgcGh5YWRkcikKK3N0YXRpYyB2b2lkIGlwdV91cGRhdGVfY2hhbm5lbF9idWZmZXIoc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuLAorCQkJCSAgICAgIGludCBidWZmZXJfbiwgZG1hX2FkZHJfdCBwaHlhZGRyKQogewogCWVudW0gaXB1X2NoYW5uZWwgY2hhbm5lbCA9IGljaGFuLT5kbWFfY2hhbi5jaGFuX2lkOwogCXVpbnQzMl90IHJlZzsKQEAgLTgwNiw4ICs4MDQsNiBAQAogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwdV9kYXRhLmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwogfQogCiAvKiBDYWxsZWQgdW5kZXIgc3Bpbl9sb2NrX2lycXNhdmUoJmljaGFuLT5sb2NrKSAqLwpAQCAtODE2LDcgKzgxMiw2IEBACiB7CiAJdW5zaWduZWQgaW50IGNoYW5faWQgPSBpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaWNoYW4tPmRtYV9jaGFuLmRldi0+ZGV2aWNlOwotCWludCByZXQ7CiAKIAlpZiAoYXN5bmNfdHhfdGVzdF9hY2soJmRlc2MtPnR4ZCkpCiAJCXJldHVybiAtRUlOVFI7CkBAIC04MjcsMTQgKzgyMiw3IEBACiAJICogY291bGQgbWFrZSBpdCBjb25kaXRpb25hbCBvbiBzdGF0dXMgPj0gSVBVX0NIQU5ORUxfRU5BQkxFRCwgYnV0CiAJICogZG9pbmcgaXQgYWdhaW4gc2hvdWxkbid0IGh1cnQgZWl0aGVyLgogCSAqLwotCXJldCA9IGlwdV91cGRhdGVfY2hhbm5lbF9idWZmZXIoaWNoYW4sIGJ1Zl9pZHgsCi0JCQkJCXNnX2RtYV9hZGRyZXNzKHNnKSk7Ci0KLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGRldiwgIlVwZGF0aW5nIHNnICVwIG9uIGNoYW5uZWwgMHgleCBidWZmZXIgJWQgZmFpbGVkIVxuIiwKLQkJCXNnLCBjaGFuX2lkLCBidWZfaWR4KTsKLQkJcmV0dXJuIHJldDsKLQl9CisJaXB1X3VwZGF0ZV9jaGFubmVsX2J1ZmZlcihpY2hhbiwgYnVmX2lkeCwgc2dfZG1hX2FkZHJlc3Moc2cpKTsKIAogCWlwdV9zZWxlY3RfYnVmZmVyKGNoYW5faWQsIGJ1Zl9pZHgpOwogCWRldl9kYmcoZGV2LCAiVXBkYXRlZCBzZyAlcCBvbiBjaGFubmVsIDB4JXggYnVmZmVyICVkXG4iLApAQCAtMTM3OSwxMCArMTM2NywxMSBAQAogCiAJaWYgKGxpa2VseShzZ25ldykgJiYKIAkgICAgaXB1X3N1Ym1pdF9idWZmZXIoaWNoYW4sIGRlc2NuZXcsIHNnbmV3LCBpY2hhbi0+YWN0aXZlX2J1ZmZlcikgPCAwKSB7Ci0JCWNhbGxiYWNrID0gZGVzYy0+dHhkLmNhbGxiYWNrOwotCQljYWxsYmFja19wYXJhbSA9IGRlc2MtPnR4ZC5jYWxsYmFja19wYXJhbTsKKwkJY2FsbGJhY2sgPSBkZXNjbmV3LT50eGQuY2FsbGJhY2s7CisJCWNhbGxiYWNrX3BhcmFtID0gZGVzY25ldy0+dHhkLmNhbGxiYWNrX3BhcmFtOwogCQlzcGluX3VubG9jaygmaWNoYW4tPmxvY2spOwotCQljYWxsYmFjayhjYWxsYmFja19wYXJhbSk7CisJCWlmIChjYWxsYmFjaykKKwkJCWNhbGxiYWNrKGNhbGxiYWNrX3BhcmFtKTsKIAkJc3Bpbl9sb2NrKCZpY2hhbi0+bG9jayk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5jIGIvZHJpdmVycy9kbWEvc2hkbWEuYwppbmRleCBkMTBjYzg5Li5iNzVjZThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKQEAgLTQ4LDIzICs0OCwyMCBAQAogICovCiAjZGVmaW5lIFJTX0RFRkFVTFQgIChSU19EVUFMKQogCisvKiBBIGJpdG1hc2sgd2l0aCBiaXRzIGVub3VnaCBmb3IgZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNoX2RtYWVfc2xhdmVfdXNlZFtCSVRTX1RPX0xPTkdTKFNIRE1BX1NMQVZFX05VTUJFUildOworCiBzdGF0aWMgdm9pZCBzaF9kbWFlX2NoYW5fbGRfY2xlYW51cChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBib29sIGFsbCk7CiAKICNkZWZpbmUgU0hfRE1BQ19DSEFOX0JBU0UoaWQpIChkbWFfYmFzZV9hZGRyW2lkXSkKIHN0YXRpYyB2b2lkIHNoX2RtYWVfd3JpdGVsKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2RjLCB1MzIgZGF0YSwgdTMyIHJlZykKIHsKLQljdHJsX291dGwoZGF0YSwgKFNIX0RNQUNfQ0hBTl9CQVNFKHNoX2RjLT5pZCkgKyByZWcpKTsKKwljdHJsX291dGwoZGF0YSwgU0hfRE1BQ19DSEFOX0JBU0Uoc2hfZGMtPmlkKSArIHJlZyk7CiB9CiAKIHN0YXRpYyB1MzIgc2hfZG1hZV9yZWFkbChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9kYywgdTMyIHJlZykKIHsKLQlyZXR1cm4gY3RybF9pbmwoKFNIX0RNQUNfQ0hBTl9CQVNFKHNoX2RjLT5pZCkgKyByZWcpKTsKLX0KLQotc3RhdGljIHZvaWQgZG1hZV9pbml0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCi17Ci0JdTMyIGNoY3IgPSBSU19ERUZBVUxUOyAvKiBkZWZhdWx0IGlzIERVQUwgbW9kZSAqLwotCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGNoY3IsIENIQ1IpOworCXJldHVybiBjdHJsX2lubChTSF9ETUFDX0NIQU5fQkFTRShzaF9kYy0+aWQpICsgcmVnKTsKIH0KIAogLyoKQEAgLTk1LDI3ICs5MiwzMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRtYWVfaXNfYnVzeShzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQorc3RhdGljIGJvb2wgZG1hZV9pc19idXN5KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCiB7CiAJdTMyIGNoY3IgPSBzaF9kbWFlX3JlYWRsKHNoX2NoYW4sIENIQ1IpOwotCWlmIChjaGNyICYgQ0hDUl9ERSkgewotCQlpZiAoIShjaGNyICYgQ0hDUl9URSkpCi0JCQlyZXR1cm4gLUVCVVNZOyAvKiB3b3JraW5nICovCi0JfQotCXJldHVybiAwOyAvKiB3YWl0aW5nICovCisKKwlpZiAoKGNoY3IgJiAoQ0hDUl9ERSB8IENIQ1JfVEUpKSA9PSBDSENSX0RFKQorCQlyZXR1cm4gdHJ1ZTsgLyogd29ya2luZyAqLworCisJcmV0dXJuIGZhbHNlOyAvKiB3YWl0aW5nICovCiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNhbGNfeG1pdF9zaGlmdChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQorc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdID0gVFNfU0hJRlQ7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjYWxjX3htaXRfc2hpZnQodTMyIGNoY3IpCiB7Ci0JdTMyIGNoY3IgPSBzaF9kbWFlX3JlYWRsKHNoX2NoYW4sIENIQ1IpOwotCXJldHVybiB0c19zaGlmdFsoY2hjciAmIENIQ1JfVFNfTUFTSykgPj4gQ0hDUl9UU19TSElGVF07CisJaW50IGNudCA9ICgoY2hjciAmIENIQ1JfVFNfTE9XX01BU0spID4+IENIQ1JfVFNfTE9XX1NISUZUKSB8CisJCSgoY2hjciAmIENIQ1JfVFNfSElHSF9NQVNLKSA+PiBDSENSX1RTX0hJR0hfU0hJRlQpOworCisJcmV0dXJuIHRzX3NoaWZ0W2NudF07CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWVfc2V0X3JlZyhzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBzdHJ1Y3Qgc2hfZG1hZV9yZWdzICpodykKIHsKIAlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBody0+c2FyLCBTQVIpOwogCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGh3LT5kYXIsIERBUik7Ci0Jc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgaHctPnRjciA+PiBjYWxjX3htaXRfc2hpZnQoc2hfY2hhbiksIFRDUik7CisJc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgaHctPnRjciA+PiBzaF9jaGFuLT54bWl0X3NoaWZ0LCBUQ1IpOwogfQogCiBzdGF0aWMgdm9pZCBkbWFlX3N0YXJ0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCkBAIC0xMjMsNyArMTIzLDcgQEAKIAl1MzIgY2hjciA9IHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgQ0hDUik7CiAKIAljaGNyIHw9IENIQ1JfREUgfCBDSENSX0lFOwotCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGNoY3IsIENIQ1IpOworCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGNoY3IgJiB+Q0hDUl9URSwgQ0hDUik7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWVfaGFsdChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQpAQCAtMTM0LDU1ICsxMzQsNTAgQEAKIAlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBjaGNyLCBDSENSKTsKIH0KIAorc3RhdGljIHZvaWQgZG1hZV9pbml0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCit7CisJdTMyIGNoY3IgPSBSU19ERUZBVUxUOyAvKiBkZWZhdWx0IGlzIERVQUwgbW9kZSAqLworCXNoX2NoYW4tPnhtaXRfc2hpZnQgPSBjYWxjX3htaXRfc2hpZnQoY2hjcik7CisJc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgY2hjciwgQ0hDUik7Cit9CisKIHN0YXRpYyBpbnQgZG1hZV9zZXRfY2hjcihzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCB1MzIgdmFsKQogewotCWludCByZXQgPSBkbWFlX2lzX2J1c3koc2hfY2hhbik7CiAJLyogV2hlbiBETUEgd2FzIHdvcmtpbmcsIGNhbiBub3Qgc2V0IGRhdGEgdG8gQ0hDUiAqLwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJaWYgKGRtYWVfaXNfYnVzeShzaF9jaGFuKSkKKwkJcmV0dXJuIC1FQlVTWTsKIAorCXNoX2NoYW4tPnhtaXRfc2hpZnQgPSBjYWxjX3htaXRfc2hpZnQodmFsKTsKIAlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCB2YWwsIENIQ1IpOworCiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgRE1BUlMxX0FERFIJMHgwNAotI2RlZmluZSBETUFSUzJfQUREUgkweDA4Ci0jZGVmaW5lIERNQVJTX1NISUZUIDgKLSNkZWZpbmUgRE1BUlNfQ0hBTl9NU0sgMHgwMQorI2RlZmluZSBETUFSU19TSElGVAk4CisjZGVmaW5lIERNQVJTX0NIQU5fTVNLCTB4MDEKIHN0YXRpYyBpbnQgZG1hZV9zZXRfZG1hcnMoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgdTE2IHZhbCkKIHsKIAl1MzIgYWRkcjsKIAlpbnQgc2hpZnQgPSAwOwotCWludCByZXQgPSBkbWFlX2lzX2J1c3koc2hfY2hhbik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKworCWlmIChkbWFlX2lzX2J1c3koc2hfY2hhbikpCisJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoc2hfY2hhbi0+aWQgJiBETUFSU19DSEFOX01TSykKIAkJc2hpZnQgPSBETUFSU19TSElGVDsKIAotCXN3aXRjaCAoc2hfY2hhbi0+aWQpIHsKLQkvKiBETUFSUzAgKi8KLQljYXNlIDA6Ci0JY2FzZSAxOgotCQlhZGRyID0gU0hfRE1BUlNfQkFTRTsKLQkJYnJlYWs7Ci0JLyogRE1BUlMxICovCi0JY2FzZSAyOgotCWNhc2UgMzoKLQkJYWRkciA9IChTSF9ETUFSU19CQVNFICsgRE1BUlMxX0FERFIpOwotCQlicmVhazsKLQkvKiBETUFSUzIgKi8KLQljYXNlIDQ6Ci0JY2FzZSA1OgotCQlhZGRyID0gKFNIX0RNQVJTX0JBU0UgKyBETUFSUzJfQUREUik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CisJaWYgKHNoX2NoYW4tPmlkIDwgNikKKwkJLyogRE1BMFJTMCAtIERNQTBSUzIgKi8KKwkJYWRkciA9IFNIX0RNQVJTX0JBU0UwICsgKHNoX2NoYW4tPmlkIC8gMikgKiA0OworI2lmZGVmIFNIX0RNQVJTX0JBU0UxCisJZWxzZSBpZiAoc2hfY2hhbi0+aWQgPCAxMikKKwkJLyogRE1BMVJTMCAtIERNQTFSUzIgKi8KKwkJYWRkciA9IFNIX0RNQVJTX0JBU0UxICsgKChzaF9jaGFuLT5pZCAtIDYpIC8gMikgKiA0OworI2VuZGlmCisJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKLQljdHJsX291dHcoKHZhbCA8PCBzaGlmdCkgfAotCQkoY3RybF9pbncoYWRkcikgJiAoc2hpZnQgPyAweEZGMDAgOiAweDAwRkYpKSwKLQkJYWRkcik7CisJY3RybF9vdXR3KCh2YWwgPDwgc2hpZnQpIHwgKGN0cmxfaW53KGFkZHIpICYgKDB4RkYwMCA+PiBzaGlmdCkpLCBhZGRyKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjUwLDEwICsyNDUsNTMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHN0cnVjdCBzaF9kbWFlX3NsYXZlX2NvbmZpZyAqc2hfZG1hZV9maW5kX3NsYXZlKAorCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIGVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIHNsYXZlX2lkKQoreworCXN0cnVjdCBkbWFfZGV2aWNlICpkbWFfZGV2ID0gc2hfY2hhbi0+Y29tbW9uLmRldmljZTsKKwlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2ID0gY29udGFpbmVyX29mKGRtYV9kZXYsCisJCQkJCXN0cnVjdCBzaF9kbWFlX2RldmljZSwgY29tbW9uKTsKKwlzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSAqcGRhdGEgPSAmc2hkZXYtPnBkYXRhOworCWludCBpOworCisJaWYgKCh1bnNpZ25lZClzbGF2ZV9pZCA+PSBTSERNQV9TTEFWRV9OVU1CRVIpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5jb25maWdfbnVtOyBpKyspCisJCWlmIChwZGF0YS0+Y29uZmlnW2ldLnNsYXZlX2lkID09IHNsYXZlX2lkKQorCQkJcmV0dXJuIHBkYXRhLT5jb25maWcgKyBpOworCisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgc2hfZG1hZV9hbGxvY19jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCiB7CiAJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiA9IHRvX3NoX2NoYW4oY2hhbik7CiAJc3RydWN0IHNoX2Rlc2MgKmRlc2M7CisJc3RydWN0IHNoX2RtYWVfc2xhdmUgKnBhcmFtID0gY2hhbi0+cHJpdmF0ZTsKKworCS8qCisJICogVGhpcyByZWxpZXMgb24gdGhlIGd1YXJhbnRlZSBmcm9tIGRtYWVuZ2luZSB0aGF0IGFsbG9jX2NoYW5fcmVzb3VyY2VzCisJICogbmV2ZXIgcnVucyBjb25jdXJyZW50bHkgd2l0aCBpdHNlbGYgb3IgZnJlZV9jaGFuX3Jlc291cmNlcy4KKwkgKi8KKwlpZiAocGFyYW0pIHsKKwkJc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnICpjZmc7CisKKwkJY2ZnID0gc2hfZG1hZV9maW5kX3NsYXZlKHNoX2NoYW4sIHBhcmFtLT5zbGF2ZV9pZCk7CisJCWlmICghY2ZnKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQocGFyYW0tPnNsYXZlX2lkLCBzaF9kbWFlX3NsYXZlX3VzZWQpKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlwYXJhbS0+Y29uZmlnID0gY2ZnOworCisJCWRtYWVfc2V0X2RtYXJzKHNoX2NoYW4sIGNmZy0+bWlkX3JpZCk7CisJCWRtYWVfc2V0X2NoY3Ioc2hfY2hhbiwgY2ZnLT5jaGNyKTsKKwl9IGVsc2UgeworCQlpZiAoKHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgQ0hDUikgJiAweDcwMCkgIT0gMHg0MDApCisJCQlkbWFlX3NldF9jaGNyKHNoX2NoYW4sIFJTX0RFRkFVTFQpOworCX0KIAogCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAl3aGlsZSAoc2hfY2hhbi0+ZGVzY3NfYWxsb2NhdGVkIDwgTlJfREVTQ1NfUEVSX0NIQU5ORUwpIHsKQEAgLTI4NiwxMCArMzI0LDE4IEBACiAJc3RydWN0IHNoX2Rlc2MgKmRlc2MsICpfZGVzYzsKIAlMSVNUX0hFQUQobGlzdCk7CiAKKwlkbWFlX2hhbHQoc2hfY2hhbik7CisKIAkvKiBQcmVwYXJlZCBhbmQgbm90IHN1Ym1pdHRlZCBkZXNjcmlwdG9ycyBjYW4gc3RpbGwgYmUgb24gdGhlIHF1ZXVlICovCiAJaWYgKCFsaXN0X2VtcHR5KCZzaF9jaGFuLT5sZF9xdWV1ZSkpCiAJCXNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHNoX2NoYW4sIHRydWUpOwogCisJaWYgKGNoYW4tPnByaXZhdGUpIHsKKwkJLyogVGhlIGNhbGxlciBpcyBob2xkaW5nIGRtYV9saXN0X211dGV4ICovCisJCXN0cnVjdCBzaF9kbWFlX3NsYXZlICpwYXJhbSA9IGNoYW4tPnByaXZhdGU7CisJCWNsZWFyX2JpdChwYXJhbS0+c2xhdmVfaWQsIHNoX2RtYWVfc2xhdmVfdXNlZCk7CisJfQorCiAJc3Bpbl9sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogCiAJbGlzdF9zcGxpY2VfaW5pdCgmc2hfY2hhbi0+bGRfZnJlZSwgJmxpc3QpOwpAQCAtMzAxLDIzICszNDcsOTcgQEAKIAkJa2ZyZWUoZGVzYyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnNoX2RtYWVfcHJlcF9tZW1jcHkoCi0Jc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRtYV9kZXN0LCBkbWFfYWRkcl90IGRtYV9zcmMsCi0Jc2l6ZV90IGxlbiwgdW5zaWduZWQgbG9uZyBmbGFncykKKy8qKgorICogc2hfZG1hZV9hZGRfZGVzYyAtIGdldCwgc2V0IHVwIGFuZCByZXR1cm4gb25lIHRyYW5zZmVyIGRlc2NyaXB0b3IKKyAqIEBzaF9jaGFuOglETUEgY2hhbm5lbAorICogQGZsYWdzOglETUEgdHJhbnNmZXIgZmxhZ3MKKyAqIEBkZXN0OglkZXN0aW5hdGlvbiBETUEgYWRkcmVzcywgaW5jcmVtZW50ZWQgd2hlbiBkaXJlY3Rpb24gZXF1YWxzCisgKgkJRE1BX0ZST01fREVWSUNFIG9yIERNQV9CSURJUkVDVElPTkFMCisgKiBAc3JjOglzb3VyY2UgRE1BIGFkZHJlc3MsIGluY3JlbWVudGVkIHdoZW4gZGlyZWN0aW9uIGVxdWFscworICoJCURNQV9UT19ERVZJQ0Ugb3IgRE1BX0JJRElSRUNUSU9OQUwKKyAqIEBsZW46CURNQSB0cmFuc2ZlciBsZW5ndGgKKyAqIEBmaXJzdDoJaWYgTlVMTCwgc2V0IHRvIHRoZSBjdXJyZW50IGRlc2NyaXB0b3IgYW5kIGNvb2tpZSBzZXQgdG8gLUVCVVNZCisgKiBAZGlyZWN0aW9uOgluZWVkZWQgZm9yIHNsYXZlIERNQSB0byBkZWNpZGUgd2hpY2ggYWRkcmVzcyB0byBrZWVwIGNvbnN0YW50LAorICoJCWVxdWFscyBETUFfQklESVJFQ1RJT05BTCBmb3IgTUVNQ1BZCisgKiBSZXR1cm5zIDAgb3IgYW4gZXJyb3IKKyAqIExvY2tzOiBjYWxsZWQgd2l0aCBkZXNjX2xvY2sgaGVsZAorICovCitzdGF0aWMgc3RydWN0IHNoX2Rlc2MgKnNoX2RtYWVfYWRkX2Rlc2Moc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBkbWFfYWRkcl90ICpkZXN0LCBkbWFfYWRkcl90ICpzcmMsIHNpemVfdCAqbGVuLAorCXN0cnVjdCBzaF9kZXNjICoqZmlyc3QsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLQlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuOwotCXN0cnVjdCBzaF9kZXNjICpmaXJzdCA9IE5VTEwsICpwcmV2ID0gTlVMTCwgKm5ldzsKKwlzdHJ1Y3Qgc2hfZGVzYyAqbmV3OwogCXNpemVfdCBjb3B5X3NpemU7CisKKwlpZiAoISpsZW4pCisJCXJldHVybiBOVUxMOworCisJLyogQWxsb2NhdGUgdGhlIGxpbmsgZGVzY3JpcHRvciBmcm9tIHRoZSBmcmVlIGxpc3QgKi8KKwluZXcgPSBzaF9kbWFlX2dldF9kZXNjKHNoX2NoYW4pOworCWlmICghbmV3KSB7CisJCWRldl9lcnIoc2hfY2hhbi0+ZGV2LCAiTm8gZnJlZSBsaW5rIGRlc2NyaXB0b3IgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY29weV9zaXplID0gbWluKCpsZW4sIChzaXplX3QpU0hfRE1BX1RDUl9NQVggKyAxKTsKKworCW5ldy0+aHcuc2FyID0gKnNyYzsKKwluZXctPmh3LmRhciA9ICpkZXN0OworCW5ldy0+aHcudGNyID0gY29weV9zaXplOworCisJaWYgKCEqZmlyc3QpIHsKKwkJLyogRmlyc3QgZGVzYyAqLworCQluZXctPmFzeW5jX3R4LmNvb2tpZSA9IC1FQlVTWTsKKwkJKmZpcnN0ID0gbmV3OworCX0gZWxzZSB7CisJCS8qIE90aGVyIGRlc2MgLSBpbnZpc2libGUgdG8gdGhlIHVzZXIgKi8KKwkJbmV3LT5hc3luY190eC5jb29raWUgPSAtRUlOVkFMOworCX0KKworCWRldl9kYmcoc2hfY2hhbi0+ZGV2LAorCQkiY2hhaW5pbmcgKCV1LyV1KUAleCAtPiAleCB3aXRoICVwLCBjb29raWUgJWQsIHNoaWZ0ICVkXG4iLAorCQljb3B5X3NpemUsICpsZW4sICpzcmMsICpkZXN0LCAmbmV3LT5hc3luY190eCwKKwkJbmV3LT5hc3luY190eC5jb29raWUsIHNoX2NoYW4tPnhtaXRfc2hpZnQpOworCisJbmV3LT5tYXJrID0gREVTQ19QUkVQQVJFRDsKKwluZXctPmFzeW5jX3R4LmZsYWdzID0gZmxhZ3M7CisJbmV3LT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisKKwkqbGVuIC09IGNvcHlfc2l6ZTsKKwlpZiAoZGlyZWN0aW9uID09IERNQV9CSURJUkVDVElPTkFMIHx8IGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQorCQkqc3JjICs9IGNvcHlfc2l6ZTsKKwlpZiAoZGlyZWN0aW9uID09IERNQV9CSURJUkVDVElPTkFMIHx8IGRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCSpkZXN0ICs9IGNvcHlfc2l6ZTsKKworCXJldHVybiBuZXc7Cit9CisKKy8qCisgKiBzaF9kbWFlX3ByZXBfc2cgLSBwcmVwYXJlIHRyYW5zZmVyIGRlc2NyaXB0b3JzIGZyb20gYW4gU0cgbGlzdAorICoKKyAqIENvbW1vbiByb3V0aW5lIGZvciBwdWJsaWMgKE1FTUNQWSkgYW5kIHNsYXZlIERNQS4gVGhlIE1FTUNQWSBjYXNlIGlzIGFsc28KKyAqIGNvbnZlcnRlZCB0byBzY2F0dGVyLWdhdGhlciB0byBndWFyYW50ZWUgY29uc2lzdGVudCBsb2NraW5nIGFuZCBhIGNvcnJlY3QKKyAqIGxpc3QgbWFuaXB1bGF0aW9uLiBGb3Igc2xhdmUgRE1BIGRpcmVjdGlvbiBjYXJyaWVzIHRoZSB1c3VhbCBtZWFuaW5nLCBhbmQsCisgKiBsb2dpY2FsbHksIHRoZSBTRyBsaXN0IGlzIFJBTSBhbmQgdGhlIGFkZHIgdmFyaWFibGUgY29udGFpbnMgc2xhdmUgYWRkcmVzcywKKyAqIGUuZy4sIHRoZSBGSUZPIEkvTyByZWdpc3Rlci4gRm9yIE1FTUNQWSBkaXJlY3Rpb24gZXF1YWxzIERNQV9CSURJUkVDVElPTkFMCisgKiBhbmQgdGhlIFNHIGxpc3QgY29udGFpbnMgb25seSBvbmUgZWxlbWVudCBhbmQgcG9pbnRzIGF0IHRoZSBzb3VyY2UgYnVmZmVyLgorICovCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpzaF9kbWFlX3ByZXBfc2coc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgdW5zaWduZWQgaW50IHNnX2xlbiwgZG1hX2FkZHJfdCAqYWRkciwKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlzdHJ1Y3Qgc2hfZGVzYyAqZmlyc3QgPSBOVUxMLCAqbmV3ID0gTlVMTCAvKiBjb21waWxlci4uLiAqLzsKIAlMSVNUX0hFQUQodHhfbGlzdCk7Ci0JaW50IGNodW5rcyA9IChsZW4gKyBTSF9ETUFfVENSX01BWCkgLyAoU0hfRE1BX1RDUl9NQVggKyAxKTsKKwlpbnQgY2h1bmtzID0gMDsKKwlpbnQgaTsKIAotCWlmICghY2hhbikKKwlpZiAoIXNnX2xlbikKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoIWxlbikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzaF9jaGFuID0gdG9fc2hfY2hhbihjaGFuKTsKKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBzZ19sZW4sIGkpCisJCWNodW5rcyArPSAoc2dfZG1hX2xlbihzZykgKyBTSF9ETUFfVENSX01BWCkgLworCQkJKFNIX0RNQV9UQ1JfTUFYICsgMSk7CiAKIAkvKiBIYXZlIHRvIGxvY2sgdGhlIHdob2xlIGxvb3AgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgcmVsZWFzZSAqLwogCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKQEAgLTMzMyw0OSArNDUzLDMyIEBACiAJICoJb25seSBkdXJpbmcgdGhpcyBmdW5jdGlvbiwgdGhlbiB0aGV5IGFyZSBpbW1lZGlhdGVseSBzcGxpY2VkCiAJICoJYmFjayBvbnRvIHRoZSBmcmVlIGxpc3QgaW4gZm9ybSBvZiBhIGNoYWluCiAJICovCi0JZG8gewotCQkvKiBBbGxvY2F0ZSB0aGUgbGluayBkZXNjcmlwdG9yIGZyb20gdGhlIGZyZWUgbGlzdCAqLwotCQluZXcgPSBzaF9kbWFlX2dldF9kZXNjKHNoX2NoYW4pOwotCQlpZiAoIW5ldykgewotCQkJZGV2X2VycihzaF9jaGFuLT5kZXYsCi0JCQkJIk5vIGZyZWUgbWVtb3J5IGZvciBsaW5rIGRlc2NyaXB0b3JcbiIpOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXcsICZ0eF9saXN0LCBub2RlKQotCQkJCW5ldy0+bWFyayA9IERFU0NfSURMRTsKLQkJCWxpc3Rfc3BsaWNlKCZ0eF9saXN0LCAmc2hfY2hhbi0+bGRfZnJlZSk7Ci0JCQlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKLQkJCXJldHVybiBOVUxMOwotCQl9CisJZm9yX2VhY2hfc2coc2dsLCBzZywgc2dfbGVuLCBpKSB7CisJCWRtYV9hZGRyX3Qgc2dfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJc2l6ZV90IGxlbiA9IHNnX2RtYV9sZW4oc2cpOwogCi0JCWNvcHlfc2l6ZSA9IG1pbihsZW4sIChzaXplX3QpU0hfRE1BX1RDUl9NQVggKyAxKTsKKwkJaWYgKCFsZW4pCisJCQlnb3RvIGVycl9nZXRfZGVzYzsKIAotCQluZXctPmh3LnNhciA9IGRtYV9zcmM7Ci0JCW5ldy0+aHcuZGFyID0gZG1hX2Rlc3Q7Ci0JCW5ldy0+aHcudGNyID0gY29weV9zaXplOwotCQlpZiAoIWZpcnN0KSB7Ci0JCQkvKiBGaXJzdCBkZXNjICovCi0JCQluZXctPmFzeW5jX3R4LmNvb2tpZSA9IC1FQlVTWTsKLQkJCWZpcnN0ID0gbmV3OwotCQl9IGVsc2UgewotCQkJLyogT3RoZXIgZGVzYyAtIGludmlzaWJsZSB0byB0aGUgdXNlciAqLwotCQkJbmV3LT5hc3luY190eC5jb29raWUgPSAtRUlOVkFMOwotCQl9CisJCWRvIHsKKwkJCWRldl9kYmcoc2hfY2hhbi0+ZGV2LCAiQWRkIFNHICMlZEAlcFslZF0sIGRtYSAlbGx4XG4iLAorCQkJCWksIHNnLCBsZW4sICh1bnNpZ25lZCBsb25nIGxvbmcpc2dfYWRkcik7CiAKLQkJZGV2X2RiZyhzaF9jaGFuLT5kZXYsCi0JCQkiY2hhaW5pbmcgJXUgb2YgJXUgd2l0aCAlcCwgZHN0ICV4LCBjb29raWUgJWRcbiIsCi0JCQljb3B5X3NpemUsIGxlbiwgJm5ldy0+YXN5bmNfdHgsIGRtYV9kZXN0LAotCQkJbmV3LT5hc3luY190eC5jb29raWUpOworCQkJaWYgKGRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCQkJbmV3ID0gc2hfZG1hZV9hZGRfZGVzYyhzaF9jaGFuLCBmbGFncywKKwkJCQkJCSZzZ19hZGRyLCBhZGRyLCAmbGVuLCAmZmlyc3QsCisJCQkJCQlkaXJlY3Rpb24pOworCQkJZWxzZQorCQkJCW5ldyA9IHNoX2RtYWVfYWRkX2Rlc2Moc2hfY2hhbiwgZmxhZ3MsCisJCQkJCQlhZGRyLCAmc2dfYWRkciwgJmxlbiwgJmZpcnN0LAorCQkJCQkJZGlyZWN0aW9uKTsKKwkJCWlmICghbmV3KQorCQkJCWdvdG8gZXJyX2dldF9kZXNjOwogCi0JCW5ldy0+bWFyayA9IERFU0NfUFJFUEFSRUQ7Ci0JCW5ldy0+YXN5bmNfdHguZmxhZ3MgPSBmbGFnczsKLQkJbmV3LT5jaHVua3MgPSBjaHVua3MtLTsKLQotCQlwcmV2ID0gbmV3OwotCQlsZW4gLT0gY29weV9zaXplOwotCQlkbWFfc3JjICs9IGNvcHlfc2l6ZTsKLQkJZG1hX2Rlc3QgKz0gY29weV9zaXplOwotCQkvKiBJbnNlcnQgdGhlIGxpbmsgZGVzY3JpcHRvciB0byB0aGUgTEQgcmluZyAqLwotCQlsaXN0X2FkZF90YWlsKCZuZXctPm5vZGUsICZ0eF9saXN0KTsKLQl9IHdoaWxlIChsZW4pOworCQkJbmV3LT5jaHVua3MgPSBjaHVua3MtLTsKKwkJCWxpc3RfYWRkX3RhaWwoJm5ldy0+bm9kZSwgJnR4X2xpc3QpOworCQl9IHdoaWxlIChsZW4pOworCX0KIAogCWlmIChuZXcgIT0gZmlyc3QpCiAJCW5ldy0+YXN5bmNfdHguY29va2llID0gLUVOT1NQQzsKQEAgLTM4Niw2ICs0ODksNzcgQEAKIAlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAogCXJldHVybiAmZmlyc3QtPmFzeW5jX3R4OworCitlcnJfZ2V0X2Rlc2M6CisJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXcsICZ0eF9saXN0LCBub2RlKQorCQluZXctPm1hcmsgPSBERVNDX0lETEU7CisJbGlzdF9zcGxpY2UoJnR4X2xpc3QsICZzaF9jaGFuLT5sZF9mcmVlKTsKKworCXNwaW5fdW5sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnNoX2RtYWVfcHJlcF9tZW1jcHkoCisJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRtYV9kZXN0LCBkbWFfYWRkcl90IGRtYV9zcmMsCisJc2l6ZV90IGxlbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKworCWlmICghY2hhbiB8fCAhbGVuKQorCQlyZXR1cm4gTlVMTDsKKworCWNoYW4tPnByaXZhdGUgPSBOVUxMOworCisJc2hfY2hhbiA9IHRvX3NoX2NoYW4oY2hhbik7CisKKwlzZ19pbml0X3RhYmxlKCZzZywgMSk7CisJc2dfc2V0X3BhZ2UoJnNnLCBwZm5fdG9fcGFnZShQRk5fRE9XTihkbWFfc3JjKSksIGxlbiwKKwkJICAgIG9mZnNldF9pbl9wYWdlKGRtYV9zcmMpKTsKKwlzZ19kbWFfYWRkcmVzcygmc2cpID0gZG1hX3NyYzsKKwlzZ19kbWFfbGVuKCZzZykgPSBsZW47CisKKwlyZXR1cm4gc2hfZG1hZV9wcmVwX3NnKHNoX2NoYW4sICZzZywgMSwgJmRtYV9kZXN0LCBETUFfQklESVJFQ1RJT05BTCwKKwkJCSAgICAgICBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnNoX2RtYWVfcHJlcF9zbGF2ZV9zZygKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgc2dfbGVuLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZSAqcGFyYW07CisJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbjsKKworCWlmICghY2hhbikKKwkJcmV0dXJuIE5VTEw7CisKKwlzaF9jaGFuID0gdG9fc2hfY2hhbihjaGFuKTsKKwlwYXJhbSA9IGNoYW4tPnByaXZhdGU7CisKKwkvKiBTb21lb25lIGNhbGxpbmcgc2xhdmUgRE1BIG9uIGEgcHVibGljIGNoYW5uZWw/ICovCisJaWYgKCFwYXJhbSB8fCAhc2dfbGVuKSB7CisJCWRldl93YXJuKHNoX2NoYW4tPmRldiwgIiVzOiBiYWQgcGFyYW1ldGVyOiAlcCwgJWQsICVkXG4iLAorCQkJIF9fZnVuY19fLCBwYXJhbSwgc2dfbGVuLCBwYXJhbSA/IHBhcmFtLT5zbGF2ZV9pZCA6IC0xKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBpZiAocGFyYW0gIT0gTlVMTCksIHRoaXMgaXMgYSBzdWNjZXNzZnVsbHkgcmVxdWVzdGVkIHNsYXZlIGNoYW5uZWwsCisJICogdGhlcmVmb3JlIHBhcmFtLT5jb25maWcgIT0gTlVMTCB0b28uCisJICovCisJcmV0dXJuIHNoX2RtYWVfcHJlcF9zZyhzaF9jaGFuLCBzZ2wsIHNnX2xlbiwgJnBhcmFtLT5jb25maWctPmFkZHIsCisJCQkgICAgICAgZGlyZWN0aW9uLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2RtYWVfdGVybWluYXRlX2FsbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiA9IHRvX3NoX2NoYW4oY2hhbik7CisKKwlpZiAoIWNoYW4pCisJCXJldHVybjsKKworCXNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHNoX2NoYW4sIHRydWUpOwogfQogCiBzdGF0aWMgZG1hX2FzeW5jX3R4X2NhbGxiYWNrIF9fbGRfY2xlYW51cChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBib29sIGFsbCkKQEAgLTQxOSw3ICs1OTMsMTEgQEAKIAkJCWNvb2tpZSA9IHR4LT5jb29raWU7CiAKIAkJaWYgKGRlc2MtPm1hcmsgPT0gREVTQ19DT01QTEVURUQgJiYgZGVzYy0+Y2h1bmtzID09IDEpIHsKLQkJCUJVR19PTihzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llICE9IGRlc2MtPmNvb2tpZSAtIDEpOworCQkJaWYgKHNoX2NoYW4tPmNvbXBsZXRlZF9jb29raWUgIT0gZGVzYy0+Y29va2llIC0gMSkKKwkJCQlkZXZfZGJnKHNoX2NoYW4tPmRldiwKKwkJCQkJIkNvbXBsZXRpbmcgY29va2llICVkLCBleHBlY3RlZCAlZFxuIiwKKwkJCQkJZGVzYy0+Y29va2llLAorCQkJCQlzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llICsgMSk7CiAJCQlzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llID0gZGVzYy0+Y29va2llOwogCQl9CiAKQEAgLTQ5Miw3ICs2NzAsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogRmluZCB0aGUgZmlyc3QgdW4tdHJhbnNmZXIgZGVzY2lwdG9yICovCisJLyogRmluZCB0aGUgZmlyc3Qgbm90IHRyYW5zZmVycmVkIGRlc2NpcHRvciAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICZzaF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkKIAkJaWYgKHNkLT5tYXJrID09IERFU0NfU1VCTUlUVEVEKSB7CiAJCQkvKiBHZXQgdGhlIGxkIHN0YXJ0IGFkZHJlc3MgZnJvbSBsZF9xdWV1ZSAqLwpAQCAtNTU5LDcgKzczNyw3IEBACiAKIAkvKiBJUlEgTXVsdGkgKi8KIAlpZiAoc2hkZXYtPnBkYXRhLm1vZGUgJiBTSERNQV9NSVhfSVJRKSB7Ci0JCWludCBjbnQgPSAwOworCQlpbnQgX19tYXliZV91bnVzZWQgY250ID0gMDsKIAkJc3dpdGNoIChpcnEpIHsKICNpZiBkZWZpbmVkKERNVEU2X0lSUSkgJiYgZGVmaW5lZChETUFFMV9JUlEpCiAJCWNhc2UgRE1URTZfSVJROgpAQCAtNTk2LDExICs3NzQsMTQgQEAKIAlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuID0gKHN0cnVjdCBzaF9kbWFlX2NoYW4gKilkYXRhOwogCXN0cnVjdCBzaF9kZXNjICpkZXNjOwogCXUzMiBzYXJfYnVmID0gc2hfZG1hZV9yZWFkbChzaF9jaGFuLCBTQVIpOworCXUzMiBkYXJfYnVmID0gc2hfZG1hZV9yZWFkbChzaF9jaGFuLCBEQVIpOwogCiAJc3Bpbl9sb2NrKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJnNoX2NoYW4tPmxkX3F1ZXVlLCBub2RlKSB7Ci0JCWlmICgoZGVzYy0+aHcuc2FyICsgZGVzYy0+aHcudGNyKSA9PSBzYXJfYnVmICYmCi0JCSAgICBkZXNjLT5tYXJrID09IERFU0NfU1VCTUlUVEVEKSB7CisJCWlmIChkZXNjLT5tYXJrID09IERFU0NfU1VCTUlUVEVEICYmCisJCSAgICAoKGRlc2MtPmRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UgJiYKKwkJICAgICAgKGRlc2MtPmh3LmRhciArIGRlc2MtPmh3LnRjcikgPT0gZGFyX2J1ZikgfHwKKwkJICAgICAoZGVzYy0+aHcuc2FyICsgZGVzYy0+aHcudGNyKSA9PSBzYXJfYnVmKSkgewogCQkJZGV2X2RiZyhzaF9jaGFuLT5kZXYsICJkb25lICMlZEAlcCBkc3QgJXVcbiIsCiAJCQkJZGVzYy0+YXN5bmNfdHguY29va2llLCAmZGVzYy0+YXN5bmNfdHgsCiAJCQkJZGVzYy0+aHcuZGFyKTsKQEAgLTY3Myw3ICs4NTQsNyBAQAogCX0KIAogCXNucHJpbnRmKG5ld19zaF9jaGFuLT5kZXZfaWQsIHNpemVvZihuZXdfc2hfY2hhbi0+ZGV2X2lkKSwKLQkJCSJzaC1kbWFlJWQiLCBuZXdfc2hfY2hhbi0+aWQpOworCQkgInNoLWRtYWUlZCIsIG5ld19zaF9jaGFuLT5pZCk7CiAKIAkvKiBzZXQgdXAgY2hhbm5lbCBpcnEgKi8KIAllcnIgPSByZXF1ZXN0X2lycShpcnEsICZzaF9kbWFlX2ludGVycnVwdCwgaXJxZmxhZ3MsCkBAIC02ODQsMTEgKzg2NSw2IEBACiAJCWdvdG8gZXJyX25vX2lycTsKIAl9CiAKLQkvKiBDSENSIHJlZ2lzdGVyIGNvbnRyb2wgZnVuY3Rpb24gKi8KLQluZXdfc2hfY2hhbi0+c2V0X2NoY3IgPSBkbWFlX3NldF9jaGNyOwotCS8qIERNQVJTIHJlZ2lzdGVyIGNvbnRyb2wgZnVuY3Rpb24gKi8KLQluZXdfc2hfY2hhbi0+c2V0X2RtYXJzID0gZG1hZV9zZXRfZG1hcnM7Ci0KIAlzaGRldi0+Y2hhbltpZF0gPSBuZXdfc2hfY2hhbjsKIAlyZXR1cm4gMDsKIApAQCAtNzU5LDEyICs5MzUsMTkgQEAKIAlJTklUX0xJU1RfSEVBRCgmc2hkZXYtPmNvbW1vbi5jaGFubmVscyk7CiAKIAlkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBzaGRldi0+Y29tbW9uLmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIHNoZGV2LT5jb21tb24uY2FwX21hc2spOworCiAJc2hkZXYtPmNvbW1vbi5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMKIAkJPSBzaF9kbWFlX2FsbG9jX2NoYW5fcmVzb3VyY2VzOwogCXNoZGV2LT5jb21tb24uZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBzaF9kbWFlX2ZyZWVfY2hhbl9yZXNvdXJjZXM7CiAJc2hkZXYtPmNvbW1vbi5kZXZpY2VfcHJlcF9kbWFfbWVtY3B5ID0gc2hfZG1hZV9wcmVwX21lbWNweTsKIAlzaGRldi0+Y29tbW9uLmRldmljZV9pc190eF9jb21wbGV0ZSA9IHNoX2RtYWVfaXNfY29tcGxldGU7CiAJc2hkZXYtPmNvbW1vbi5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IHNoX2RtYWVfbWVtY3B5X2lzc3VlX3BlbmRpbmc7CisKKwkvKiBDb21wdWxzb3J5IGZvciBETUFfU0xBVkUgZmllbGRzICovCisJc2hkZXYtPmNvbW1vbi5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IHNoX2RtYWVfcHJlcF9zbGF2ZV9zZzsKKwlzaGRldi0+Y29tbW9uLmRldmljZV90ZXJtaW5hdGVfYWxsID0gc2hfZG1hZV90ZXJtaW5hdGVfYWxsOworCiAJc2hkZXYtPmNvbW1vbi5kZXYgPSAmcGRldi0+ZGV2OwogCS8qIERlZmF1bHQgdHJhbnNmZXIgc2l6ZSBvZiAzMiBieXRlcyByZXF1aXJlcyAzMi1ieXRlIGFsaWdubWVudCAqLwogCXNoZGV2LT5jb21tb24uY29weV9hbGlnbiA9IDU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5oIGIvZHJpdmVycy9kbWEvc2hkbWEuaAppbmRleCAxMDhmMWNmLi43ZTIyN2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5oCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAlzdHJ1Y3Qgc2hfZG1hZV9yZWdzIGh3OwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgYXN5bmNfdHg7CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uOwogCWRtYV9jb29raWVfdCBjb29raWU7CiAJaW50IGNodW5rczsKIAlpbnQgbWFyazsKQEAgLTQ1LDEzICs0Niw5IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwkJLyogQ2hhbm5lbCBkZXZpY2UgKi8KIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsJLyogVGFza2xldCAqLwogCWludCBkZXNjc19hbGxvY2F0ZWQ7CQkvKiBkZXNjIGNvdW50ICovCisJaW50IHhtaXRfc2hpZnQ7CQkJLyogbG9nXzIoYnl0ZXNfcGVyX3hmZXIpICovCiAJaW50IGlkOwkJCQkvKiBSYXcgaWQgb2YgdGhpcyBjaGFubmVsICovCiAJY2hhciBkZXZfaWRbMTZdOwkJLyogdW5pcXVlIG5hbWUgcGVyIERNQUMgb2YgY2hhbm5lbCAqLwotCi0JLyogU2V0IGNoY3IgKi8KLQlpbnQgKCpzZXRfY2hjcikoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgdTMyIHJlZ3MpOwotCS8qIFNldCBETUEgcmVzb3VyY2UgKi8KLQlpbnQgKCpzZXRfZG1hcnMpKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIHUxNiByZXMpOwogfTsKIAogc3RydWN0IHNoX2RtYWVfZGV2aWNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCmluZGV4IDAwMGRjNjcuLjMzOTFlNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwpAQCAtMjY1OCwxMCArMjY1OCwxMSBAQAogICogdGhlIG1lbW9yeSBzeXN0ZW0gY29tcGxldGVseS4gQSBjb21tYW5kIGxpbmUgb3B0aW9uIGFsbG93cyB0byBmb3JjZS1lbmFibGUKICAqIGhhcmR3YXJlIEVDQyBsYXRlciBpbiBhbWQ2NF9lbmFibGVfZWNjX2Vycm9yX3JlcG9ydGluZygpLgogICovCi1zdGF0aWMgY29uc3QgY2hhciAqZWNjX3dhcm5pbmcgPQotCSJXQVJOSU5HOiBFQ0MgaXMgZGlzYWJsZWQgYnkgQklPUy4gTW9kdWxlIHdpbGwgTk9UIGJlIGxvYWRlZC5cbiIKLQkiIEVpdGhlciBFbmFibGUgRUNDIGluIHRoZSBCSU9TLCBvciBzZXQgJ2VjY19lbmFibGVfb3ZlcnJpZGUnLlxuIgotCSIgQWxzbywgdXNlIG9mIHRoZSBvdmVycmlkZSBjYW4gY2F1c2UgdW5rbm93biBzaWRlIGVmZmVjdHMuXG4iOworc3RhdGljIGNvbnN0IGNoYXIgKmVjY19tc2cgPQorCSJFQ0MgZGlzYWJsZWQgaW4gdGhlIEJJT1Mgb3Igbm8gRUNDIGNhcGFiaWxpdHksIG1vZHVsZSB3aWxsIG5vdCBsb2FkLlxuIgorCSIgRWl0aGVyIGVuYWJsZSBFQ0MgY2hlY2tpbmcgb3IgZm9yY2UgbW9kdWxlIGxvYWRpbmcgYnkgc2V0dGluZyAiCisJIidlY2NfZW5hYmxlX292ZXJyaWRlJy5cbiIKKwkiIChOb3RlIHRoYXQgdXNlIG9mIHRoZSBvdmVycmlkZSBtYXkgY2F1c2UgdW5rbm93biBzaWRlIGVmZmVjdHMuKVxuIjsKIAogc3RhdGljIGludCBhbWQ2NF9jaGVja19lY2NfZW5hYmxlZChzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpCiB7CkBAIC0yNjczLDcgKzI2NzQsNyBAQAogCiAJZWNjX2VuYWJsZWQgPSAhISh2YWx1ZSAmIEs4X05CQ0ZHX0VDQ19FTkFCTEUpOwogCWlmICghZWNjX2VuYWJsZWQpCi0JCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsICJUaGlzIG5vZGUgcmVwb3J0cyB0aGF0IE1lbW9yeSBFQ0MgIgorCQlhbWQ2NF9wcmludGsoS0VSTl9OT1RJQ0UsICJUaGlzIG5vZGUgcmVwb3J0cyB0aGF0IE1lbW9yeSBFQ0MgIgogCQkJICAgICAiaXMgY3VycmVudGx5IGRpc2FibGVkLCBzZXQgRjN4JXhbMjJdICglcykuXG4iLAogCQkJICAgICBLOF9OQkNGRywgcGNpX25hbWUocHZ0LT5taXNjX2YzX2N0bCkpOwogCWVsc2UKQEAgLTI2ODEsMTMgKzI2ODIsMTMgQEAKIAogCW5iX21jZV9lbiA9IGFtZDY0X25iX21jZV9iYW5rX2VuYWJsZWRfb25fbm9kZShwdnQtPm1jX25vZGVfaWQpOwogCWlmICghbmJfbWNlX2VuKQotCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLCAiTkIgTUNFIGJhbmsgZGlzYWJsZWQsIHNldCBNU1IgIgorCQlhbWQ2NF9wcmludGsoS0VSTl9OT1RJQ0UsICJOQiBNQ0UgYmFuayBkaXNhYmxlZCwgc2V0IE1TUiAiCiAJCQkgICAgICIweCUwOHhbNF0gb24gbm9kZSAlZCB0byBlbmFibGUuXG4iLAogCQkJICAgICBNU1JfSUEzMl9NQ0dfQ1RMLCBwdnQtPm1jX25vZGVfaWQpOwogCiAJaWYgKCFlY2NfZW5hYmxlZCB8fCAhbmJfbWNlX2VuKSB7CiAJCWlmICghZWNjX2VuYWJsZV9vdmVycmlkZSkgewotCQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywgIiVzIiwgZWNjX3dhcm5pbmcpOworCQkJYW1kNjRfcHJpbnRrKEtFUk5fTk9USUNFLCAiJXMiLCBlY2NfbXNnKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJCWVjY19lbmFibGVfb3ZlcnJpZGUgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCmluZGV4IGNmMjc0MDIuLmVjZDU5MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKQEAgLTgwNCw4ICs4MDQsOCBAQAogCQllbmQgICA8PD0gKDI0IC0gUEFHRV9TSElGVCk7CiAJCWVuZCAgICB8PSAoMSA8PCAoMjQgLSBQQUdFX1NISUZUKSkgLSAxOwogCi0JCWNzcm93LT5maXJzdF9wYWdlID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKLQkJY3Nyb3ctPmxhc3RfcGFnZSA9IGVuZCA+PiBQQUdFX1NISUZUOworCQljc3Jvdy0+Zmlyc3RfcGFnZSA9IHN0YXJ0OworCQljc3Jvdy0+bGFzdF9wYWdlID0gZW5kOwogCQljc3Jvdy0+bnJfcGFnZXMgPSBlbmQgKyAxIC0gc3RhcnQ7CiAJCWNzcm93LT5ncmFpbiA9IDg7CiAJCWNzcm93LT5tdHlwZSA9IG10eXBlOwpAQCAtODkyLDEwICs4OTIsNiBAQAogCiAJbXBjODV4eF9pbml0X2Nzcm93cyhtY2kpOwogCi0jaWZkZWYgQ09ORklHX0VEQUNfREVCVUcKLQllZGFjX21jX3JlZ2lzdGVyX21jaWRldl9kZWJ1Zygoc3RydWN0IGF0dHJpYnV0ZSAqKilkZWJ1Z19hdHRyKTsKLSNlbmRpZgotCiAJLyogc3RvcmUgdGhlIG9yaWdpbmFsIGVycm9yIGRpc2FibGUgYml0cyAqLwogCW9yaWdfZGRyX2Vycl9kaXNhYmxlID0KIAkgICAgaW5fYmUzMihwZGF0YS0+bWNfdmJhc2UgKyBNUEM4NVhYX01DX0VSUl9ESVNBQkxFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL25ldC5jCmluZGV4IGNiYWY0MjAuLjJkM2RjN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9uZXQuYwpAQCAtODkzLDIwICs4OTMsMzEgQEAKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmd25ldF9wYWNrZXRfdGFza19jYWNoZTsKIAorc3RhdGljIHZvaWQgZnduZXRfZnJlZV9wdGFzayhzdHJ1Y3QgZnduZXRfcGFja2V0X3Rhc2sgKnB0YXNrKQoreworCWRldl9rZnJlZV9za2JfYW55KHB0YXNrLT5za2IpOworCWttZW1fY2FjaGVfZnJlZShmd25ldF9wYWNrZXRfdGFza19jYWNoZSwgcHRhc2spOworfQorCiBzdGF0aWMgaW50IGZ3bmV0X3NlbmRfcGFja2V0KHN0cnVjdCBmd25ldF9wYWNrZXRfdGFzayAqcHRhc2spOwogCiBzdGF0aWMgdm9pZCBmd25ldF90cmFuc21pdF9wYWNrZXRfZG9uZShzdHJ1Y3QgZnduZXRfcGFja2V0X3Rhc2sgKnB0YXNrKQogewotCXN0cnVjdCBmd25ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZnduZXRfZGV2aWNlICpkZXYgPSBwdGFzay0+ZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkZXYgPSBwdGFzay0+ZGV2OworCWJvb2wgZnJlZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmcHRhc2stPnB0X2xpbmspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOwogCi0JcHRhc2stPm91dHN0YW5kaW5nX3BrdHMtLTsgLyogRklYTUUgYWNjZXNzIGluc2lkZSBsb2NrICovCisJcHRhc2stPm91dHN0YW5kaW5nX3BrdHMtLTsKKworCS8qIENoZWNrIHdoZXRoZXIgd2Ugb3IgdGhlIG5ldHdvcmtpbmcgVFggc29mdC1JUlEgaXMgbGFzdCB1c2VyLiAqLworCWZyZWUgPSAocHRhc2stPm91dHN0YW5kaW5nX3BrdHMgPT0gMCAmJiAhbGlzdF9lbXB0eSgmcHRhc2stPnB0X2xpbmspKTsKKworCWlmIChwdGFzay0+b3V0c3RhbmRpbmdfcGt0cyA9PSAwKQorCQlsaXN0X2RlbCgmcHRhc2stPnB0X2xpbmspOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CiAKIAlpZiAocHRhc2stPm91dHN0YW5kaW5nX3BrdHMgPiAwKSB7CiAJCXUxNiBkZ19zaXplOwpAQCAtOTUxLDEwICs5NjIsMTAgQEAKIAkJCXB0YXNrLT5tYXhfcGF5bG9hZCA9IHNrYi0+bGVuICsgUkZDMjM3NF9GUkFHX0hEUl9TSVpFOwogCQl9CiAJCWZ3bmV0X3NlbmRfcGFja2V0KHB0YXNrKTsKLQl9IGVsc2UgewotCQlkZXZfa2ZyZWVfc2tiX2FueShwdGFzay0+c2tiKTsKLQkJa21lbV9jYWNoZV9mcmVlKGZ3bmV0X3BhY2tldF90YXNrX2NhY2hlLCBwdGFzayk7CiAJfQorCisJaWYgKGZyZWUpCisJCWZ3bmV0X2ZyZWVfcHRhc2socHRhc2spOwogfQogCiBzdGF0aWMgdm9pZCBmd25ldF93cml0ZV9jb21wbGV0ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLApAQCAtOTc3LDYgKzk4OCw3IEBACiAJdW5zaWduZWQgdHhfbGVuOwogCXN0cnVjdCByZmMyNzM0X2hlYWRlciAqYnVmaGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCBmcmVlOwogCiAJZGV2ID0gcHRhc2stPmRldjsKIAl0eF9sZW4gPSBwdGFzay0+bWF4X3BheWxvYWQ7CkBAIC0xMDIyLDEyICsxMDM0LDE2IEBACiAJCQkJZ2VuZXJhdGlvbiwgU0NPREVfMTAwLCAwVUxMLCBwdGFzay0+c2tiLT5kYXRhLAogCQkJCXR4X2xlbiArIDgsIGZ3bmV0X3dyaXRlX2NvbXBsZXRlLCBwdGFzayk7CiAKLQkJLyogRklYTUUgcmFjZT8gKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOwotCQlsaXN0X2FkZF90YWlsKCZwdGFzay0+cHRfbGluaywgJmRldi0+YnJvYWRjYXN0ZWRfbGlzdCk7CisKKwkJLyogSWYgdGhlIEFUIHRhc2tsZXQgYWxyZWFkeSByYW4sIHdlIG1heSBiZSBsYXN0IHVzZXIuICovCisJCWZyZWUgPSAocHRhc2stPm91dHN0YW5kaW5nX3BrdHMgPT0gMCAmJiBsaXN0X2VtcHR5KCZwdGFzay0+cHRfbGluaykpOworCQlpZiAoIWZyZWUpCisJCQlsaXN0X2FkZF90YWlsKCZwdGFzay0+cHRfbGluaywgJmRldi0+YnJvYWRjYXN0ZWRfbGlzdCk7CisKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CiAKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCX0KIAogCWZ3X3NlbmRfcmVxdWVzdChkZXYtPmNhcmQsICZwdGFzay0+dHJhbnNhY3Rpb24sCkBAIC0xMDM1LDEyICsxMDUxLDE5IEBACiAJCQlwdGFzay0+Z2VuZXJhdGlvbiwgcHRhc2stPnNwZWVkLCBwdGFzay0+Zmlmb19hZGRyLAogCQkJcHRhc2stPnNrYi0+ZGF0YSwgdHhfbGVuLCBmd25ldF93cml0ZV9jb21wbGV0ZSwgcHRhc2spOwogCi0JLyogRklYTUUgcmFjZT8gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmcHRhc2stPnB0X2xpbmssICZkZXYtPnNlbnRfbGlzdCk7CisKKwkvKiBJZiB0aGUgQVQgdGFza2xldCBhbHJlYWR5IHJhbiwgd2UgbWF5IGJlIGxhc3QgdXNlci4gKi8KKwlmcmVlID0gKHB0YXNrLT5vdXRzdGFuZGluZ19wa3RzID09IDAgJiYgbGlzdF9lbXB0eSgmcHRhc2stPnB0X2xpbmspKTsKKwlpZiAoIWZyZWUpCisJCWxpc3RfYWRkX3RhaWwoJnB0YXNrLT5wdF9saW5rLCAmZGV2LT5zZW50X2xpc3QpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CiAKIAlkZXYtPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworIG91dDoKKwlpZiAoZnJlZSkKKwkJZnduZXRfZnJlZV9wdGFzayhwdGFzayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyOTgsNiArMTMyMSw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CiAKIAlwdGFzay0+bWF4X3BheWxvYWQgPSBtYXhfcGF5bG9hZDsKKwlJTklUX0xJU1RfSEVBRCgmcHRhc2stPnB0X2xpbmspOworCiAJZnduZXRfc2VuZF9wYWNrZXQocHRhc2spOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jIGIvZHJpdmVycy9maXJld2lyZS9vaGNpLmMKaW5kZXggMjM0NWQ0MS4uNDNlYmYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9vaGNpLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9vaGNpLmMKQEAgLTIxMDEsMTEgKzIxMDEsNiBAQAogCXUzMiBwYXlsb2FkX2luZGV4LCBwYXlsb2FkX2VuZF9pbmRleCwgbmV4dF9wYWdlX2luZGV4OwogCWludCBwYWdlLCBlbmRfcGFnZSwgaSwgbGVuZ3RoLCBvZmZzZXQ7CiAKLQkvKgotCSAqIEZJWE1FOiBDeWNsZSBsb3N0IGJlaGF2aW9yIHNob3VsZCBiZSBjb25maWd1cmFibGU6IGxvc2UKLQkgKiBwYWNrZXQsIHJldHJhbnNtaXQgb3IgdGVybWluYXRlLi4KLQkgKi8KLQogCXAgPSBwYWNrZXQ7CiAJcGF5bG9hZF9pbmRleCA9IHBheWxvYWQ7CiAKQEAgLTIxMzUsNiArMjEzMCwxNCBAQAogCWlmICghcC0+c2tpcCkgewogCQlkWzBdLmNvbnRyb2wgICA9IGNwdV90b19sZTE2KERFU0NSSVBUT1JfS0VZX0lNTUVESUFURSk7CiAJCWRbMF0ucmVxX2NvdW50ID0gY3B1X3RvX2xlMTYoOCk7CisJCS8qCisJCSAqIExpbmsgdGhlIHNraXAgYWRkcmVzcyB0byB0aGlzIGRlc2NyaXB0b3IgaXRzZWxmLiAgVGhpcyBjYXVzZXMKKwkJICogYSBjb250ZXh0IHRvIHNraXAgYSBjeWNsZSB3aGVuZXZlciBsb3N0IGN5Y2xlcyBvciBGSUZPCisJCSAqIG92ZXJydW5zIG9jY3VyLCB3aXRob3V0IGRyb3BwaW5nIHRoZSBkYXRhLiAgVGhlIGFwcGxpY2F0aW9uCisJCSAqIHNob3VsZCB0aGVuIGRlY2lkZSB3aGV0aGVyIHRoaXMgaXMgYW4gZXJyb3IgY29uZGl0aW9uIG9yIG5vdC4KKwkJICogRklYTUU6ICBNYWtlIHRoZSBjb250ZXh0J3MgY3ljbGUtbG9zdCBiZWhhdmlvdXIgY29uZmlndXJhYmxlPworCQkgKi8KKwkJZFswXS5icmFuY2hfYWRkcmVzcyA9IGNwdV90b19sZTMyKGRfYnVzIHwgeik7CiAKIAkJaGVhZGVyID0gKF9fbGUzMiAqKSAmZFsxXTsKIAkJaGVhZGVyWzBdID0gY3B1X3RvX2xlMzIoSVRfSEVBREVSX1NZKHAtPnN5KSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYyBiL2RyaXZlcnMvZmlyZXdpcmUvc2JwMi5jCmluZGV4IGQ0ODVjZGQuLjcwZmVmNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvc2JwMi5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvc2JwMi5jCkBAIC0xNTcxLDcgKzE1NzEsNyBAQAogCQlzZGV2LT5zdGFydF9zdG9wX3B3cl9jb25kID0gMTsKIAogCWlmIChsdS0+dGd0LT53b3JrYXJvdW5kcyAmIFNCUDJfV09SS0FST1VORF8xMjhLX01BWF9UUkFOUykKLQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDEyOCAqIDEwMjQgLyA1MTIpOworCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgMTI4ICogMTAyNCAvIDUxMik7CiAKIAlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBTQlAyX01BWF9TRUdfU0laRSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKaW5kZXggMDUxZDFlYi4uZjgyYmNkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKQEAgLTM4MSw3ICszODEsNyBAQAogCXZvaWQgKmliZnRfbG9jID0gZW50cnktPmhlYWRlcjsKIAljaGFyICpzdHIgPSBidWY7CiAJY2hhciAqbWFjOwotCWludCB2YWw7CisJX19iZTMyIHZhbDsKIAogCWlmICghbmljKQogCQlyZXR1cm4gMDsKQEAgLTM5NywxMCArMzk3LDggQEAKIAkJc3RyICs9IHNwcmludGZfaXBhZGRyKHN0ciwgbmljLT5pcF9hZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSBpYmZ0X2V0aF9zdWJuZXRfbWFzazoKLQkJdmFsID0gfigoMSA8PCAoMzItbmljLT5zdWJuZXRfbWFza19wcmVmaXgpKS0xKTsKLQkJc3RyICs9IHNwcmludGYoc3RyLCBOSVBRVUFEX0ZNVCwKLQkJCSAgICAgICAodTgpKHZhbCA+PiAyNCksICh1OCkodmFsID4+IDE2KSwKLQkJCSAgICAgICAodTgpKHZhbCA+PiA4KSwgKHU4KSh2YWwpKTsKKwkJdmFsID0gY3B1X3RvX2JlMzIofigoMSA8PCAoMzItbmljLT5zdWJuZXRfbWFza19wcmVmaXgpKS0xKSk7CisJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVwSTQiLCAmdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBpYmZ0X2V0aF9vcmlnaW46CiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVkXG4iLCBuaWMtPm9yaWdpbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IDk2ZWRkZDEuLjMwNWM1OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC02Niw2ICs2Niw4IEBACiAKIAkgIElmIE0gaXMgc2VsZWN0ZWQsIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmFkZW9uLgogCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9yYWRlb24vS2NvbmZpZyIKKwogY29uZmlnIERSTV9JODEwCiAJdHJpc3RhdGUgIkludGVsIEk4MTAiCiAJZGVwZW5kcyBvbiBEUk0gJiYgQUdQICYmIEFHUF9JTlRFTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2F0aV9wY2lnYXJ0LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXRpX3BjaWdhcnQuYwppbmRleCBhMWZjZTY4Li4xN2JlMDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXRpX3BjaWdhcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYXRpX3BjaWdhcnQuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIAkJaWYgKHBjaV9zZXRfZG1hX21hc2soZGV2LT5wZGV2LCBnYXJ0X2luZm8tPnRhYmxlX21hc2spKSB7CiAJCQlEUk1fRVJST1IoImZhaWwgdG8gc2V0IGRtYSBtYXNrIHRvIDB4JUx4XG4iLAotCQkJCSAgZ2FydF9pbmZvLT50YWJsZV9tYXNrKTsKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpZ2FydF9pbmZvLT50YWJsZV9tYXNrKTsKIAkJCXJldCA9IDE7CiAJCQlnb3RvIGRvbmU7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggZjY2NWIwNS4uYWI2Yzk3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTU5OCw2ICs1OTgsNTAgQEAKIAlyZXR1cm4gbW9kZTsKIH0KIAorLyoKKyAqIEVESUQgaXMgZGVsaWdodGZ1bGx5IGFtYmlndW91cyBhYm91dCBob3cgaW50ZXJsYWNlZCBtb2RlcyBhcmUgdG8gYmUKKyAqIGVuY29kZWQuICBPdXIgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gaXMgb2YgZnJhbWUgaGVpZ2h0LCBidXQgc29tZQorICogSERUViBkZXRhaWxlZCB0aW1pbmdzIGFyZSBlbmNvZGVkIGFzIGZpZWxkIGhlaWdodC4KKyAqCisgKiBUaGUgZm9ybWF0IGxpc3QgaGVyZSBpcyBmcm9tIENFQSwgaW4gZnJhbWUgc2l6ZS4gIFRlY2huaWNhbGx5IHdlCisgKiBzaG91bGQgYmUgY2hlY2tpbmcgcmVmcmVzaCByYXRlIHRvby4gIFdoYXRldmVyLgorICovCitzdGF0aWMgdm9pZAorZHJtX21vZGVfZG9faW50ZXJsYWNlX3F1aXJrKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJICAgIHN0cnVjdCBkZXRhaWxlZF9waXhlbF90aW1pbmcgKnB0KQoreworCWludCBpOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCQlpbnQgdywgaDsKKwl9IGNlYV9pbnRlcmxhY2VkW10gPSB7CisJCXsgMTkyMCwgMTA4MCB9LAorCQl7ICA3MjAsICA0ODAgfSwKKwkJeyAxNDQwLCAgNDgwIH0sCisJCXsgMjg4MCwgIDQ4MCB9LAorCQl7ICA3MjAsICA1NzYgfSwKKwkJeyAxNDQwLCAgNTc2IH0sCisJCXsgMjg4MCwgIDU3NiB9LAorCX07CisJc3RhdGljIGNvbnN0IGludCBuX3NpemVzID0KKwkJc2l6ZW9mKGNlYV9pbnRlcmxhY2VkKS9zaXplb2YoY2VhX2ludGVybGFjZWRbMF0pOworCisJaWYgKCEocHQtPm1pc2MgJiBEUk1fRURJRF9QVF9JTlRFUkxBQ0VEKSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IG5fc2l6ZXM7IGkrKykgeworCQlpZiAoKG1vZGUtPmhkaXNwbGF5ID09IGNlYV9pbnRlcmxhY2VkW2ldLncpICYmCisJCSAgICAobW9kZS0+dmRpc3BsYXkgPT0gY2VhX2ludGVybGFjZWRbaV0uaCAvIDIpKSB7CisJCQltb2RlLT52ZGlzcGxheSAqPSAyOworCQkJbW9kZS0+dnN5bmNfc3RhcnQgKj0gMjsKKwkJCW1vZGUtPnZzeW5jX2VuZCAqPSAyOworCQkJbW9kZS0+dnRvdGFsICo9IDI7CisJCQltb2RlLT52dG90YWwgfD0gMTsKKwkJfQorCX0KKworCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFOworfQorCiAvKioKICAqIGRybV9tb2RlX2RldGFpbGVkIC0gY3JlYXRlIGEgbmV3IG1vZGUgZnJvbSBhbiBFRElEIGRldGFpbGVkIHRpbWluZyBzZWN0aW9uCiAgKiBAZGV2OiBEUk0gZGV2aWNlIChuZWVkZWQgdG8gY3JlYXRlIG5ldyBtb2RlKQpAQCAtNjgwLDggKzcyNCw3IEBACiAKIAlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKIAotCWlmIChwdC0+bWlzYyAmIERSTV9FRElEX1BUX0lOVEVSTEFDRUQpCi0JCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFOworCWRybV9tb2RlX2RvX2ludGVybGFjZV9xdWlyayhtb2RlLCBwdCk7CiAKIAlpZiAocXVpcmtzICYgRURJRF9RVUlSS19ERVRBSUxFRF9TWU5DX1BQKSB7CiAJCXB0LT5taXNjIHw9IERSTV9FRElEX1BUX0hTWU5DX1BPU0lUSVZFIHwgRFJNX0VESURfUFRfVlNZTkNfUE9TSVRJVkU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKaW5kZXggY2RlYzMyOS4uMmFjMDc0YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKQEAgLTQwNSw3ICs0MDUsOCBAQAogCQkJCXdhc3RlZCArPSBhbGlnbm1lbnQgLSB0bXA7CiAJCX0KIAotCQlpZiAoZW50cnktPnNpemUgPj0gc2l6ZSArIHdhc3RlZCkgeworCQlpZiAoZW50cnktPnNpemUgPj0gc2l6ZSArIHdhc3RlZCAmJgorCQkgICAgKGVudHJ5LT5zdGFydCArIHdhc3RlZCArIHNpemUpIDw9IGVuZCkgewogCQkJaWYgKCFiZXN0X21hdGNoKQogCQkJCXJldHVybiBlbnRyeTsKIAkJCWlmIChlbnRyeS0+c2l6ZSA8IGJlc3Rfc2l6ZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggZTY2MGFjMC4uMjMwN2Y5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC03MzUsOCArNzM1LDEwIEBACiAJaWYgKGNtZGJ1Zi0+bnVtX2NsaXByZWN0cykgewogCQljbGlwcmVjdHMgPSBrY2FsbG9jKGNtZGJ1Zi0+bnVtX2NsaXByZWN0cywKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChjbGlwcmVjdHMgPT0gTlVMTCkKKwkJaWYgKGNsaXByZWN0cyA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBmYWlsX2JhdGNoX2ZyZWU7CisJCX0KIAogCQlyZXQgPSBjb3B5X2Zyb21fdXNlcihjbGlwcmVjdHMsIGNtZGJ1Zi0+Y2xpcHJlY3RzLAogCQkJCSAgICAgY21kYnVmLT5udW1fY2xpcHJlY3RzICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IDQ2ZDg4OTYuLmNmNGNiM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAKIGNvbnN0IHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfcGluZXZpZXdfaW5mbyA9IHsKIAkuaXNfZzMzID0gMSwgLmlzX3BpbmV2aWV3ID0gMSwgLmlzX21vYmlsZSA9IDEsIC5pc19pOXh4ID0gMSwKLQkuaGFzX3BpcGVfY3hzciA9IDEsCisJLm5lZWRfZ2Z4X2h3cyA9IDEsCiAJLmhhc19ob3RwbHVnID0gMSwKIH07CiAKQEAgLTE3NCwyNiArMTc0LDIwIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpaWRsaXN0KTsKICNlbmRpZgogCi1zdGF0aWMgaW50IGk5MTVfc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGk5MTVfZHJtX2ZyZWV6ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoIWRldiB8fCAhZGV2X3ByaXYpIHsKLQkJRFJNX0VSUk9SKCJkZXY6ICVwLCBkZXZfcHJpdjogJXBcbiIsIGRldiwgZGV2X3ByaXYpOwotCQlEUk1fRVJST1IoIkRSTSBub3QgaW5pdGlhbGl6ZWQsIGFib3J0aW5nIHN1c3BlbmQuXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1BSRVRIQVcpCi0JCXJldHVybiAwOwotCiAJcGNpX3NhdmVfc3RhdGUoZGV2LT5wZGV2KTsKIAogCS8qIElmIEtNUyBpcyBhY3RpdmUsIHdlIGRvIHRoZSBsZWF2ZXZ0IHN0dWZmIGhlcmUgKi8KIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewotCQlpZiAoaTkxNV9nZW1faWRsZShkZXYpKQorCQlpbnQgZXJyb3IgPSBpOTE1X2dlbV9pZGxlKGRldik7CisJCWlmIChlcnJvcikgewogCQkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsCi0JCQkJIkdFTSBpZGxlIGZhaWxlZCwgcmVzdW1lIG1heSBmYWlsXG4iKTsKKwkJCQkiR0VNIGlkbGUgZmFpbGVkLCByZXN1bWUgbWlnaHQgZmFpbFxuIik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KIAkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKIAl9CiAKQEAgLTIwMSwyNiArMTk1LDQyIEBACiAKIAlpbnRlbF9vcHJlZ2lvbl9mcmVlKGRldiwgMSk7CiAKLQlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgewotCQkvKiBTaHV0IGRvd24gdGhlIGRldmljZSAqLwotCQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2LT5wZGV2KTsKLQkJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EM2hvdCk7Ci0JfQotCiAJLyogTW9kZXNldCBvbiByZXN1bWUsIG5vdCBsaWQgZXZlbnRzICovCiAJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGk5MTVfcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGk5MTVfc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJaW50IGVycm9yOworCisJaWYgKCFkZXYgfHwgIWRldi0+ZGV2X3ByaXZhdGUpIHsKKwkJRFJNX0VSUk9SKCJkZXY6ICVwXG4iLCBkZXYpOworCQlEUk1fRVJST1IoIkRSTSBub3QgaW5pdGlhbGl6ZWQsIGFib3J0aW5nIHN1c3BlbmQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1BSRVRIQVcpCisJCXJldHVybiAwOworCisJZXJyb3IgPSBpOTE1X2RybV9mcmVlemUoZGV2KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWlmIChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EKSB7CisJCS8qIFNodXQgZG93biB0aGUgZGV2aWNlICovCisJCXBjaV9kaXNhYmxlX2RldmljZShkZXYtPnBkZXYpOworCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldi0+cGRldiwgUENJX0QzaG90KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X2RybV90aGF3KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYtPnBkZXYpKQotCQlyZXR1cm4gLTE7Ci0JcGNpX3NldF9tYXN0ZXIoZGV2LT5wZGV2KTsKKwlpbnQgZXJyb3IgPSAwOwogCiAJaTkxNV9yZXN0b3JlX3N0YXRlKGRldik7CiAKQEAgLTIzMSwyMSArMjQxLDI4IEBACiAJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAkJZGV2X3ByaXYtPm1tLnN1c3BlbmRlZCA9IDA7CiAKLQkJcmV0ID0gaTkxNV9nZW1faW5pdF9yaW5nYnVmZmVyKGRldik7Ci0JCWlmIChyZXQgIT0gMCkKLQkJCXJldCA9IC0xOworCQllcnJvciA9IGk5MTVfZ2VtX2luaXRfcmluZ2J1ZmZlcihkZXYpOwogCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAogCQlkcm1faXJxX2luc3RhbGwoZGV2KTsKLQl9Ci0JaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKKwogCQkvKiBSZXN1bWUgdGhlIG1vZGVzZXQgZm9yIGV2ZXJ5IGFjdGl2YXRlZCBDUlRDICovCiAJCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKIAl9CiAKIAlkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQgPSAwOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9yZXN1bWUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2LT5wZGV2KSkKKwkJcmV0dXJuIC1FSU87CisKKwlwY2lfc2V0X21hc3RlcihkZXYtPnBkZXYpOworCisJcmV0dXJuIGk5MTVfZHJtX3RoYXcoZGV2KTsKIH0KIAogLyoqCkBAIC0zODYsNTcgKzQwMyw2MiBAQAogCWRybV9wdXRfZGV2KGRldik7CiB9CiAKLXN0YXRpYyBpbnQKLWk5MTVfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgaTkxNV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBlcnJvcjsKIAotCXJldHVybiBpOTE1X3N1c3BlbmQoZGV2LCBzdGF0ZSk7Ci19CisJaWYgKCFkcm1fZGV2IHx8ICFkcm1fZGV2LT5kZXZfcHJpdmF0ZSkgeworCQlkZXZfZXJyKGRldiwgIkRSTSBub3QgaW5pdGlhbGl6ZWQsIGFib3J0aW5nIHN1c3BlbmQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCi1zdGF0aWMgaW50Ci1pOTE1X3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwllcnJvciA9IGk5MTVfZHJtX2ZyZWV6ZShkcm1fZGV2KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAotCXJldHVybiBpOTE1X3Jlc3VtZShkZXYpOwotfQorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CiAKLXN0YXRpYyBpbnQKLWk5MTVfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGk5MTVfcGNpX3N1c3BlbmQodG9fcGNpX2RldihkZXYpLCBQTVNHX1NVU1BFTkQpOwotfQotCi1zdGF0aWMgaW50Ci1pOTE1X3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGk5MTVfcGNpX3Jlc3VtZSh0b19wY2lfZGV2KGRldikpOwotfQotCi1zdGF0aWMgaW50Ci1pOTE1X3BtX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGk5MTVfcGNpX3N1c3BlbmQodG9fcGNpX2RldihkZXYpLCBQTVNHX0ZSRUVaRSk7Ci19Ci0KLXN0YXRpYyBpbnQKLWk5MTVfcG1fdGhhdyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JLyogdGhhdyBkdXJpbmcgaGliZXJuYXRlLCBkbyBub3RoaW5nISAqLwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1pOTE1X3BtX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaTkxNV9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXJldHVybiBpOTE1X3BjaV9zdXNwZW5kKHRvX3BjaV9kZXYoZGV2KSwgUE1TR19ISUJFUk5BVEUpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0dXJuIGk5MTVfcmVzdW1lKGRybV9kZXYpOwogfQogCi1zdGF0aWMgaW50Ci1pOTE1X3BtX3Jlc3RvcmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBpOTE1X3BtX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIGk5MTVfcGNpX3Jlc3VtZSh0b19wY2lfZGV2KGRldikpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKCFkcm1fZGV2IHx8ICFkcm1fZGV2LT5kZXZfcHJpdmF0ZSkgeworCQlkZXZfZXJyKGRldiwgIkRSTSBub3QgaW5pdGlhbGl6ZWQsIGFib3J0aW5nIHN1c3BlbmQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIGk5MTVfZHJtX2ZyZWV6ZShkcm1fZGV2KTsKK30KKworc3RhdGljIGludCBpOTE1X3BtX3RoYXcoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0dXJuIGk5MTVfZHJtX3RoYXcoZHJtX2Rldik7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9wbV9wb3dlcm9mZihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlyZXR1cm4gaTkxNV9kcm1fZnJlZXplKGRybV9kZXYpOwogfQogCiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBpOTE1X3BtX29wcyA9IHsKQEAgLTQ0NSw3ICs0NjcsNyBAQAogICAgICAuZnJlZXplID0gaTkxNV9wbV9mcmVlemUsCiAgICAgIC50aGF3ID0gaTkxNV9wbV90aGF3LAogICAgICAucG93ZXJvZmYgPSBpOTE1X3BtX3Bvd2Vyb2ZmLAotICAgICAucmVzdG9yZSA9IGk5MTVfcG1fcmVzdG9yZSwKKyAgICAgLnJlc3RvcmUgPSBpOTE1X3BtX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaTkxNV9nZW1fdm1fb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggYWFmOTM0ZC4uYjk5YjZhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC00OTMsNiArNDkzLDE1IEBACiAJCXN0cnVjdCBsaXN0X2hlYWQgZmx1c2hpbmdfbGlzdDsKIAogCQkvKioKKwkJICogTGlzdCBvZiBvYmplY3RzIGN1cnJlbnRseSBwZW5kaW5nIGEgR1BVIHdyaXRlIGZsdXNoLgorCQkgKgorCQkgKiBBbGwgZWxlbWVudHMgb24gdGhpcyBsaXN0IHdpbGwgYmVsb25nIHRvIGVpdGhlciB0aGUKKwkJICogYWN0aXZlX2xpc3Qgb3IgZmx1c2hpbmdfbGlzdCwgbGFzdF9yZW5kZXJpbmdfc2Vxbm8gY2FuCisJCSAqIGJlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZSB0d28gZWxlbWVudHMuCisJCSAqLworCQlzdHJ1Y3QgbGlzdF9oZWFkIGdwdV93cml0ZV9saXN0OworCisJCS8qKgogCQkgKiBMUlUgbGlzdCBvZiBvYmplY3RzIHdoaWNoIGFyZSBub3QgaW4gdGhlIHJpbmdidWZmZXIgYW5kCiAJCSAqIGFyZSByZWFkeSB0byB1bmJpbmQsIGJ1dCBhcmUgc3RpbGwgaW4gdGhlIEdUVC4KIAkJICoKQEAgLTU5Miw2ICs2MDEsOCBAQAogCiAJLyoqIFRoaXMgb2JqZWN0J3MgcGxhY2Ugb24gdGhlIGFjdGl2ZS9mbHVzaGluZy9pbmFjdGl2ZSBsaXN0cyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwkvKiogVGhpcyBvYmplY3QncyBwbGFjZSBvbiBHUFUgd3JpdGUgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZ3B1X3dyaXRlX2xpc3Q7CiAKIAkvKiogVGhpcyBvYmplY3QncyBwbGFjZSBvbiB0aGUgZmVuY2VkIG9iamVjdCBMUlUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGZlbmNlX2xpc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCBkZGE3ODdhLi5lYzhhMGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTE1NTIsNiArMTU1Miw4IEBACiAJZWxzZQogCQlsaXN0X21vdmVfdGFpbCgmb2JqX3ByaXYtPmxpc3QsICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCk7CiAKKwlCVUdfT04oIWxpc3RfZW1wdHkoJm9ial9wcml2LT5ncHVfd3JpdGVfbGlzdCkpOworCiAJb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vID0gMDsKIAlpZiAob2JqX3ByaXYtPmFjdGl2ZSkgewogCQlvYmpfcHJpdi0+YWN0aXZlID0gMDsKQEAgLTE2MjIsNyArMTYyNCw4IEBACiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiwgKm5leHQ7CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9ial9wcml2LCBuZXh0LAotCQkJCQkgJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0LCBsaXN0KSB7CisJCQkJCSAmZGV2X3ByaXYtPm1tLmdwdV93cml0ZV9saXN0LAorCQkJCQkgZ3B1X3dyaXRlX2xpc3QpIHsKIAkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqX3ByaXYtPm9iajsKIAogCQkJaWYgKChvYmotPndyaXRlX2RvbWFpbiAmIGZsdXNoX2RvbWFpbnMpID09CkBAIC0xNjMwLDYgKzE2MzMsNyBAQAogCQkJCXVpbnQzMl90IG9sZF93cml0ZV9kb21haW4gPSBvYmotPndyaXRlX2RvbWFpbjsKIAogCQkJCW9iai0+d3JpdGVfZG9tYWluID0gMDsKKwkJCQlsaXN0X2RlbF9pbml0KCZvYmpfcHJpdi0+Z3B1X3dyaXRlX2xpc3QpOwogCQkJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShvYmosIHNlcW5vKTsKIAogCQkJCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9jaGFuZ2VfZG9tYWluKG9iaiwKQEAgLTIwODQsOCArMjA4OCw4IEBACiBpOTE1X2dlbV9ldmljdF9ldmVyeXRoaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdWludDMyX3Qgc2Vxbm87CiAJaW50IHJldDsKKwl1aW50MzJfdCBzZXFubzsKIAlib29sIGxpc3RzX2VtcHR5OwogCiAJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CkBAIC0yMTA3LDYgKzIxMTEsOCBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CisKIAlyZXQgPSBpOTE1X2dlbV9ldmljdF9mcm9tX2luYWN0aXZlX2xpc3QoZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMjcwMSw3ICsyNzA3LDcgQEAKIAlvbGRfd3JpdGVfZG9tYWluID0gb2JqLT53cml0ZV9kb21haW47CiAJaTkxNV9nZW1fZmx1c2goZGV2LCAwLCBvYmotPndyaXRlX2RvbWFpbik7CiAJc2Vxbm8gPSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwgTlVMTCwgb2JqLT53cml0ZV9kb21haW4pOwotCW9iai0+d3JpdGVfZG9tYWluID0gMDsKKwlCVUdfT04ob2JqLT53cml0ZV9kb21haW4pOwogCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShvYmosIHNlcW5vKTsKIAogCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9jaGFuZ2VfZG9tYWluKG9iaiwKQEAgLTM1NjQsNiArMzU3MCw5IEBACiAJdWludDMyX3QgcmVsb2NfY291bnQgPSAwLCBpOwogCWludCByZXQgPSAwOwogCisJaWYgKHJlbG9jcyA9PSBOVUxMKQorCSAgICByZXR1cm4gMDsKKwogCWZvciAoaSA9IDA7IGkgPCBidWZmZXJfY291bnQ7IGkrKykgewogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgX191c2VyICp1c2VyX3JlbG9jczsKIAkJaW50IHVud3JpdHRlbjsKQEAgLTM2NTMsNyArMzY2Miw3IEBACiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpiYXRjaF9vYmo7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OwogCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcmVjdHMgPSBOVUxMOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2NzOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2NzID0gTlVMTDsKIAlpbnQgcmV0ID0gMCwgcmV0MiwgaSwgcGlubmVkID0gMDsKIAl1aW50NjRfdCBleGVjX29mZnNldDsKIAl1aW50MzJfdCBzZXFubywgZmx1c2hfZG9tYWlucywgcmVsb2NfaW5kZXg7CkBAIC0zNjc5LDggKzM2ODgsMTAgQEAKIAlpZiAoYXJncy0+bnVtX2NsaXByZWN0cyAhPSAwKSB7CiAJCWNsaXByZWN0cyA9IGtjYWxsb2MoYXJncy0+bnVtX2NsaXByZWN0cywgc2l6ZW9mKCpjbGlwcmVjdHMpLAogCQkJCSAgICBHRlBfS0VSTkVMKTsKLQkJaWYgKGNsaXByZWN0cyA9PSBOVUxMKQorCQlpZiAoY2xpcHJlY3RzID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIHByZV9tdXRleF9lcnI7CisJCX0KIAogCQlyZXQgPSBjb3B5X2Zyb21fdXNlcihjbGlwcmVjdHMsCiAJCQkJICAgICAoc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICopCkBAIC0zNzIyLDYgKzM3MzMsOCBAQAogCQlpZiAob2JqZWN0X2xpc3RbaV0gPT0gTlVMTCkgewogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIG9iamVjdCBoYW5kbGUgJWQgYXQgaW5kZXggJWRcbiIsCiAJCQkJICAgZXhlY19saXN0W2ldLmhhbmRsZSwgaSk7CisJCQkvKiBwcmV2ZW50IGVycm9yIHBhdGggZnJvbSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSAqLworCQkJYXJncy0+YnVmZmVyX2NvdW50ID0gaSArIDE7CiAJCQlyZXQgPSAtRUJBREY7CiAJCQlnb3RvIGVycjsKIAkJfQpAQCAtMzczMCw2ICszNzQzLDggQEAKIAkJaWYgKG9ial9wcml2LT5pbl9leGVjYnVmZmVyKSB7CiAJCQlEUk1fRVJST1IoIk9iamVjdCAlcCBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIG9iamVjdCBsaXN0XG4iLAogCQkJCSAgIG9iamVjdF9saXN0W2ldKTsKKwkJCS8qIHByZXZlbnQgZXJyb3IgcGF0aCBmcm9tIHJlYWRpbmcgdW5pbml0aWFsaXplZCBkYXRhICovCisJCQlhcmdzLT5idWZmZXJfY291bnQgPSBpICsgMTsKIAkJCXJldCA9IC1FQkFERjsKIAkJCWdvdG8gZXJyOwogCQl9CkBAIC0zODQzLDE2ICszODU4LDIzIEBACiAJCWk5MTVfZ2VtX2ZsdXNoKGRldiwKIAkJCSAgICAgICBkZXYtPmludmFsaWRhdGVfZG9tYWlucywKIAkJCSAgICAgICBkZXYtPmZsdXNoX2RvbWFpbnMpOwotCQlpZiAoZGV2LT5mbHVzaF9kb21haW5zKQorCQlpZiAoZGV2LT5mbHVzaF9kb21haW5zICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpCiAJCQkodm9pZClpOTE1X2FkZF9yZXF1ZXN0KGRldiwgZmlsZV9wcml2LAogCQkJCQkgICAgICAgZGV2LT5mbHVzaF9kb21haW5zKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgYXJncy0+YnVmZmVyX2NvdW50OyBpKyspIHsKIAkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBvYmplY3RfbGlzdFtpXTsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAkJdWludDMyX3Qgb2xkX3dyaXRlX2RvbWFpbiA9IG9iai0+d3JpdGVfZG9tYWluOwogCiAJCW9iai0+d3JpdGVfZG9tYWluID0gb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbjsKKwkJaWYgKG9iai0+d3JpdGVfZG9tYWluKQorCQkJbGlzdF9tb3ZlX3RhaWwoJm9ial9wcml2LT5ncHVfd3JpdGVfbGlzdCwKKwkJCQkgICAgICAgJmRldl9wcml2LT5tbS5ncHVfd3JpdGVfbGlzdCk7CisJCWVsc2UKKwkJCWxpc3RfZGVsX2luaXQoJm9ial9wcml2LT5ncHVfd3JpdGVfbGlzdCk7CisKIAkJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2NoYW5nZV9kb21haW4ob2JqLAogCQkJCQkJICAgIG9iai0+cmVhZF9kb21haW5zLAogCQkJCQkJICAgIG9sZF93cml0ZV9kb21haW4pOwpAQCAtMzkyNiw2ICszOTQ4LDcgQEAKIAogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCitwcmVfbXV0ZXhfZXJyOgogCS8qIENvcHkgdGhlIHVwZGF0ZWQgcmVsb2NhdGlvbnMgb3V0IHJlZ2FyZGxlc3Mgb2YgY3VycmVudCBlcnJvcgogCSAqIHN0YXRlLiAgRmFpbHVyZSB0byB1cGRhdGUgdGhlIHJlbG9jcyB3b3VsZCBtZWFuIHRoYXQgdGhlIG5leHQKIAkgKiB0aW1lIHVzZXJsYW5kIGNhbGxzIGV4ZWNidWYsIGl0IHdvdWxkIGRvIHNvIHdpdGggcHJlc3VtZWQgb2Zmc2V0CkBAIC0zOTQwLDcgKzM5NjMsNiBAQAogCQkJcmV0ID0gcmV0MjsKIAl9CiAKLXByZV9tdXRleF9lcnI6CiAJZHJtX2ZyZWVfbGFyZ2Uob2JqZWN0X2xpc3QpOwogCWtmcmVlKGNsaXByZWN0cyk7CiAKQEAgLTQzNjMsNiArNDM4NSw3IEBACiAJb2JqX3ByaXYtPm9iaiA9IG9iajsKIAlvYmpfcHJpdi0+ZmVuY2VfcmVnID0gSTkxNV9GRU5DRV9SRUdfTk9ORTsKIAlJTklUX0xJU1RfSEVBRCgmb2JqX3ByaXYtPmxpc3QpOworCUlOSVRfTElTVF9IRUFEKCZvYmpfcHJpdi0+Z3B1X3dyaXRlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZvYmpfcHJpdi0+ZmVuY2VfbGlzdCk7CiAJb2JqX3ByaXYtPm1hZHYgPSBJOTE1X01BRFZfV0lMTE5FRUQ7CiAKQEAgLTQ4MTQsNiArNDgzNyw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+bW0uZ3B1X3dyaXRlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+bW0uZmVuY2VfbGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA4OWEwNzFhLi5hMTdkNmJkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC0zMDksNiArMzA5LDIyIEBACiAJaWYgKGRlX2lpciAmIERFX0dTRSkKIAkJaXJvbmxha2Vfb3ByZWdpb25fZ3NlX2ludHIoZGV2KTsKIAorCWlmIChkZV9paXIgJiBERV9QTEFORUFfRkxJUF9ET05FKSB7CisJCWludGVsX3ByZXBhcmVfcGFnZV9mbGlwKGRldiwgMCk7CisJCWludGVsX2ZpbmlzaF9wYWdlX2ZsaXAoZGV2LCAwKTsKKwl9CisKKwlpZiAoZGVfaWlyICYgREVfUExBTkVCX0ZMSVBfRE9ORSkgeworCQlpbnRlbF9wcmVwYXJlX3BhZ2VfZmxpcChkZXYsIDEpOworCQlpbnRlbF9maW5pc2hfcGFnZV9mbGlwKGRldiwgMSk7CisJfQorCisJaWYgKGRlX2lpciAmIERFX1BJUEVBX1ZCTEFOSykKKwkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKKworCWlmIChkZV9paXIgJiBERV9QSVBFQl9WQkxBTkspCisJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMSk7CisKIAkvKiBjaGVjayBldmVudCBmcm9tIFBDSCAqLwogCWlmICgoZGVfaWlyICYgREVfUENIX0VWRU5UKSAmJgogCSAgICAocGNoX2lpciAmIFNERV9IT1RQTFVHX01BU0spKSB7CkBAIC04NDQsMTEgKzg2MCwxMSBAQAogCWlmICghKHBpcGVjb25mICYgUElQRUFDT05GX0VOQUJMRSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpCi0JCXJldHVybiAwOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7Ci0JaWYgKElTX0k5NjVHKGRldikpCisJaWYgKElTX0lST05MQUtFKGRldikpCisJCWlyb25sYWtlX2VuYWJsZV9kaXNwbGF5X2lycShkZXZfcHJpdiwgKHBpcGUgPT0gMCkgPyAKKwkJCQkJICAgIERFX1BJUEVBX1ZCTEFOSzogREVfUElQRUJfVkJMQU5LKTsKKwllbHNlIGlmIChJU19JOTY1RyhkZXYpKQogCQlpOTE1X2VuYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgcGlwZSwKIAkJCQkgICAgIFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOwogCWVsc2UKQEAgLTg2NiwxMyArODgyLDE0IEBACiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpCi0JCXJldHVybjsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOwotCWk5MTVfZGlzYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgcGlwZSwKLQkJCSAgICAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUgfAotCQkJICAgICAgUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7CisJaWYgKElTX0lST05MQUtFKGRldikpCisJCWlyb25sYWtlX2Rpc2FibGVfZGlzcGxheV9pcnEoZGV2X3ByaXYsIChwaXBlID09IDApID8gCisJCQkJCSAgICAgREVfUElQRUFfVkJMQU5LOiBERV9QSVBFQl9WQkxBTkspOworCWVsc2UKKwkJaTkxNV9kaXNhYmxlX3BpcGVzdGF0KGRldl9wcml2LCBwaXBlLAorCQkJCSAgICAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUgfAorCQkJCSAgICAgIFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7CiB9CiAKQEAgLTEwMTUsMTMgKzEwMzIsMTQgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCS8qIGVuYWJsZSBraW5kIG9mIGludGVycnVwdHMgYWx3YXlzIGVuYWJsZWQgKi8KLQl1MzIgZGlzcGxheV9tYXNrID0gREVfTUFTVEVSX0lSUV9DT05UUk9MIHwgREVfR1NFIHwgREVfUENIX0VWRU5UOworCXUzMiBkaXNwbGF5X21hc2sgPSBERV9NQVNURVJfSVJRX0NPTlRST0wgfCBERV9HU0UgfCBERV9QQ0hfRVZFTlQgfAorCQkJICAgREVfUExBTkVBX0ZMSVBfRE9ORSB8IERFX1BMQU5FQl9GTElQX0RPTkU7CiAJdTMyIHJlbmRlcl9tYXNrID0gR1RfVVNFUl9JTlRFUlJVUFQ7CiAJdTMyIGhvdHBsdWdfbWFzayA9IFNERV9DUlRfSE9UUExVRyB8IFNERV9QT1JUQl9IT1RQTFVHIHwKIAkJCSAgIFNERV9QT1JUQ19IT1RQTFVHIHwgU0RFX1BPUlREX0hPVFBMVUc7CiAKIAlkZXZfcHJpdi0+aXJxX21hc2tfcmVnID0gfmRpc3BsYXlfbWFzazsKLQlkZXZfcHJpdi0+ZGVfaXJxX2VuYWJsZV9yZWcgPSBkaXNwbGF5X21hc2s7CisJZGV2X3ByaXYtPmRlX2lycV9lbmFibGVfcmVnID0gZGlzcGxheV9tYXNrIHwgREVfUElQRUFfVkJMQU5LIHwgREVfUElQRUJfVkJMQU5LOwogCiAJLyogc2hvdWxkIGFsd2F5cyBjYW4gZ2VuZXJhdGUgaXJxICovCiAJSTkxNV9XUklURShERUlJUiwgSTkxNV9SRUFEKERFSUlSKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCA4NDcwMDZjLi5hYjFiZDJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTMzOCw2ICszMzgsNyBAQAogI2RlZmluZSAgIEZCQ19DVExfUEVSSU9ESUMJKDE8PDMwKQogI2RlZmluZSAgIEZCQ19DVExfSU5URVJWQUxfU0hJRlQgKDE2KQogI2RlZmluZSAgIEZCQ19DVExfVU5DT01QUkVTU0lCTEUgKDE8PDE0KQorI2RlZmluZSAgIEZCQ19DM19JRExFCQkoMTw8MTMpCiAjZGVmaW5lICAgRkJDX0NUTF9TVFJJREVfU0hJRlQJKDUpCiAjZGVmaW5lICAgRkJDX0NUTF9GRU5DRU5PCSgxPDwwKQogI2RlZmluZSBGQkNfQ09NTUFORAkJMHgwMzIwYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwppbmRleCBkZGVmYzg3Li43OWRkNDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwpAQCAtMTU3LDYgKzE1Nyw5IEBACiAJYWRwYSA9IEk5MTVfUkVBRChQQ0hfQURQQSk7CiAKIAlhZHBhICY9IH5BRFBBX0NSVF9IT1RQTFVHX01BU0s7CisJLyogZGlzYWJsZSBIUEQgZmlyc3QgKi8KKwlJOTE1X1dSSVRFKFBDSF9BRFBBLCBhZHBhKTsKKwkodm9pZClJOTE1X1JFQUQoUENIX0FEUEEpOwogCiAJYWRwYSB8PSAoQURQQV9DUlRfSE9UUExVR19QRVJJT0RfMTI4IHwKIAkJCUFEUEFfQ1JUX0hPVFBMVUdfV0FSTVVQXzEwTVMgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDQ1ZGE3OGUuLmIyNzIwMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTI0MCwzMyArMjQwLDg2IEBACiAjZGVmaW5lIElST05MQUtFX0RPVF9NQVggICAgICAgICAzNTAwMDAKICNkZWZpbmUgSVJPTkxBS0VfVkNPX01JTiAgICAgICAgIDE3NjAwMDAKICNkZWZpbmUgSVJPTkxBS0VfVkNPX01BWCAgICAgICAgIDM1MTAwMDAKLSNkZWZpbmUgSVJPTkxBS0VfTl9NSU4gICAgICAgICAgIDEKLSNkZWZpbmUgSVJPTkxBS0VfTl9NQVggICAgICAgICAgIDYKLSNkZWZpbmUgSVJPTkxBS0VfTV9NSU4gICAgICAgICAgIDc5Ci0jZGVmaW5lIElST05MQUtFX01fTUFYICAgICAgICAgICAxMjcKICNkZWZpbmUgSVJPTkxBS0VfTTFfTUlOICAgICAgICAgIDEyCiAjZGVmaW5lIElST05MQUtFX00xX01BWCAgICAgICAgICAyMgogI2RlZmluZSBJUk9OTEFLRV9NMl9NSU4gICAgICAgICAgNQogI2RlZmluZSBJUk9OTEFLRV9NMl9NQVggICAgICAgICAgOQotI2RlZmluZSBJUk9OTEFLRV9QX1NEVk9fREFDX01JTiAgNQotI2RlZmluZSBJUk9OTEFLRV9QX1NEVk9fREFDX01BWCAgODAKLSNkZWZpbmUgSVJPTkxBS0VfUF9MVkRTX01JTiAgICAgIDI4Ci0jZGVmaW5lIElST05MQUtFX1BfTFZEU19NQVggICAgICAxMTIKLSNkZWZpbmUgSVJPTkxBS0VfUDFfTUlOICAgICAgICAgIDEKLSNkZWZpbmUgSVJPTkxBS0VfUDFfTUFYICAgICAgICAgIDgKLSNkZWZpbmUgSVJPTkxBS0VfUDJfU0RWT19EQUNfU0xPVyAxMAotI2RlZmluZSBJUk9OTEFLRV9QMl9TRFZPX0RBQ19GQVNUIDUKLSNkZWZpbmUgSVJPTkxBS0VfUDJfTFZEU19TTE9XICAgIDE0IC8qIHNpbmdsZSBjaGFubmVsICovCi0jZGVmaW5lIElST05MQUtFX1AyX0xWRFNfRkFTVCAgICA3ICAvKiBkb3VibGUgY2hhbm5lbCAqLwogI2RlZmluZSBJUk9OTEFLRV9QMl9ET1RfTElNSVQgICAgMjI1MDAwIC8qIDIyNU1oeiAqLwogCi0jZGVmaW5lIElST05MQUtFX1BfRElTUExBWV9QT1JUX01JTgkxMAotI2RlZmluZSBJUk9OTEFLRV9QX0RJU1BMQVlfUE9SVF9NQVgJMjAKLSNkZWZpbmUgSVJPTkxBS0VfUDJfRElTUExBWV9QT1JUX0ZBU1QJMTAKLSNkZWZpbmUgSVJPTkxBS0VfUDJfRElTUExBWV9QT1JUX1NMT1cJMTAKLSNkZWZpbmUgSVJPTkxBS0VfUDJfRElTUExBWV9QT1JUX0xJTUlUCTAKLSNkZWZpbmUgSVJPTkxBS0VfUDFfRElTUExBWV9QT1JUX01JTgkxCi0jZGVmaW5lIElST05MQUtFX1AxX0RJU1BMQVlfUE9SVF9NQVgJMgorLyogV2UgaGF2ZSBwYXJhbWV0ZXIgcmFuZ2VzIGZvciBkaWZmZXJlbnQgdHlwZSBvZiBvdXRwdXRzLiAqLworCisvKiBEQUMgJiBIRE1JIFJlZmNsayAxMjBNaHogKi8KKyNkZWZpbmUgSVJPTkxBS0VfREFDX05fTUlOCTEKKyNkZWZpbmUgSVJPTkxBS0VfREFDX05fTUFYCTUKKyNkZWZpbmUgSVJPTkxBS0VfREFDX01fTUlOCTc5CisjZGVmaW5lIElST05MQUtFX0RBQ19NX01BWAkxMjcKKyNkZWZpbmUgSVJPTkxBS0VfREFDX1BfTUlOCTUKKyNkZWZpbmUgSVJPTkxBS0VfREFDX1BfTUFYCTgwCisjZGVmaW5lIElST05MQUtFX0RBQ19QMV9NSU4JMQorI2RlZmluZSBJUk9OTEFLRV9EQUNfUDFfTUFYCTgKKyNkZWZpbmUgSVJPTkxBS0VfREFDX1AyX1NMT1cJMTAKKyNkZWZpbmUgSVJPTkxBS0VfREFDX1AyX0ZBU1QJNQorCisvKiBMVkRTIHNpbmdsZS1jaGFubmVsIDEyME1oeiByZWZjbGsgKi8KKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX05fTUlOCTEKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX05fTUFYCTMKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX01fTUlOCTc5CisjZGVmaW5lIElST05MQUtFX0xWRFNfU19NX01BWAkxMTgKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX1BfTUlOCTI4CisjZGVmaW5lIElST05MQUtFX0xWRFNfU19QX01BWAkxMTIKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX1AxX01JTgkyCisjZGVmaW5lIElST05MQUtFX0xWRFNfU19QMV9NQVgJOAorI2RlZmluZSBJUk9OTEFLRV9MVkRTX1NfUDJfU0xPVwkxNAorI2RlZmluZSBJUk9OTEFLRV9MVkRTX1NfUDJfRkFTVAkxNAorCisvKiBMVkRTIGR1YWwtY2hhbm5lbCAxMjBNaHogcmVmY2xrICovCisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9OX01JTgkxCisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9OX01BWAkzCisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9NX01JTgk3OQorI2RlZmluZSBJUk9OTEFLRV9MVkRTX0RfTV9NQVgJMTI3CisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9QX01JTgkxNAorI2RlZmluZSBJUk9OTEFLRV9MVkRTX0RfUF9NQVgJNTYKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19EX1AxX01JTgkyCisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9QMV9NQVgJOAorI2RlZmluZSBJUk9OTEFLRV9MVkRTX0RfUDJfU0xPVwk3CisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9QMl9GQVNUCTcKKworLyogTFZEUyBzaW5nbGUtY2hhbm5lbCAxMDBNaHogcmVmY2xrICovCisjZGVmaW5lIElST05MQUtFX0xWRFNfU19TU0NfTl9NSU4JMQorI2RlZmluZSBJUk9OTEFLRV9MVkRTX1NfU1NDX05fTUFYCTIKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX1NTQ19NX01JTgk3OQorI2RlZmluZSBJUk9OTEFLRV9MVkRTX1NfU1NDX01fTUFYCTEyNgorI2RlZmluZSBJUk9OTEFLRV9MVkRTX1NfU1NDX1BfTUlOCTI4CisjZGVmaW5lIElST05MQUtFX0xWRFNfU19TU0NfUF9NQVgJMTEyCisjZGVmaW5lIElST05MQUtFX0xWRFNfU19TU0NfUDFfTUlOCTIKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX1NTQ19QMV9NQVgJOAorI2RlZmluZSBJUk9OTEFLRV9MVkRTX1NfU1NDX1AyX1NMT1cJMTQKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19TX1NTQ19QMl9GQVNUCTE0CisKKy8qIExWRFMgZHVhbC1jaGFubmVsIDEwME1oeiByZWZjbGsgKi8KKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19EX1NTQ19OX01JTgkxCisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9TU0NfTl9NQVgJMworI2RlZmluZSBJUk9OTEFLRV9MVkRTX0RfU1NDX01fTUlOCTc5CisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9TU0NfTV9NQVgJMTI2CisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9TU0NfUF9NSU4JMTQKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19EX1NTQ19QX01BWAk0MgorI2RlZmluZSBJUk9OTEFLRV9MVkRTX0RfU1NDX1AxX01JTgkyCisjZGVmaW5lIElST05MQUtFX0xWRFNfRF9TU0NfUDFfTUFYCTYKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19EX1NTQ19QMl9TTE9XCTcKKyNkZWZpbmUgSVJPTkxBS0VfTFZEU19EX1NTQ19QMl9GQVNUCTcKKworLyogRGlzcGxheVBvcnQgKi8KKyNkZWZpbmUgSVJPTkxBS0VfRFBfTl9NSU4JCTEKKyNkZWZpbmUgSVJPTkxBS0VfRFBfTl9NQVgJCTIKKyNkZWZpbmUgSVJPTkxBS0VfRFBfTV9NSU4JCTgxCisjZGVmaW5lIElST05MQUtFX0RQX01fTUFYCQk5MAorI2RlZmluZSBJUk9OTEFLRV9EUF9QX01JTgkJMTAKKyNkZWZpbmUgSVJPTkxBS0VfRFBfUF9NQVgJCTIwCisjZGVmaW5lIElST05MQUtFX0RQX1AyX0ZBU1QJCTEwCisjZGVmaW5lIElST05MQUtFX0RQX1AyX1NMT1cJCTEwCisjZGVmaW5lIElST05MQUtFX0RQX1AyX0xJTUlUCQkwCisjZGVmaW5lIElST05MQUtFX0RQX1AxX01JTgkJMQorI2RlZmluZSBJUk9OTEFLRV9EUF9QMV9NQVgJCTIKIAogc3RhdGljIGJvb2wKIGludGVsX2ZpbmRfYmVzdF9QTEwoY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKQEAgLTQ3NCwzMyArNTI3LDc4IEBACiAJLmZpbmRfcGxsID0gaW50ZWxfZmluZF9iZXN0X1BMTCwKIH07CiAKLXN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0c19pcm9ubGFrZV9zZHZvID0geworc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgaW50ZWxfbGltaXRzX2lyb25sYWtlX2RhYyA9IHsKIAkuZG90ID0geyAubWluID0gSVJPTkxBS0VfRE9UX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX0RPVF9NQVggfSwKIAkudmNvID0geyAubWluID0gSVJPTkxBS0VfVkNPX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX1ZDT19NQVggfSwKLQkubiAgID0geyAubWluID0gSVJPTkxBS0VfTl9NSU4sICAgICAgICAgICAgLm1heCA9IElST05MQUtFX05fTUFYIH0sCi0JLm0gICA9IHsgLm1pbiA9IElST05MQUtFX01fTUlOLCAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9NX01BWCB9LAorCS5uICAgPSB7IC5taW4gPSBJUk9OTEFLRV9EQUNfTl9NSU4sICAgICAgICAubWF4ID0gSVJPTkxBS0VfREFDX05fTUFYIH0sCisJLm0gICA9IHsgLm1pbiA9IElST05MQUtFX0RBQ19NX01JTiwgICAgICAgIC5tYXggPSBJUk9OTEFLRV9EQUNfTV9NQVggfSwKIAkubTEgID0geyAubWluID0gSVJPTkxBS0VfTTFfTUlOLCAgICAgICAgICAgLm1heCA9IElST05MQUtFX00xX01BWCB9LAogCS5tMiAgPSB7IC5taW4gPSBJUk9OTEFLRV9NMl9NSU4sICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTTJfTUFYIH0sCi0JLnAgICA9IHsgLm1pbiA9IElST05MQUtFX1BfU0RWT19EQUNfTUlOLCAgIC5tYXggPSBJUk9OTEFLRV9QX1NEVk9fREFDX01BWCB9LAotCS5wMSAgPSB7IC5taW4gPSBJUk9OTEFLRV9QMV9NSU4sICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfUDFfTUFYIH0sCisJLnAgICA9IHsgLm1pbiA9IElST05MQUtFX0RBQ19QX01JTiwJICAgLm1heCA9IElST05MQUtFX0RBQ19QX01BWCB9LAorCS5wMSAgPSB7IC5taW4gPSBJUk9OTEFLRV9EQUNfUDFfTUlOLCAgICAgICAubWF4ID0gSVJPTkxBS0VfREFDX1AxX01BWCB9LAogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJUk9OTEFLRV9QMl9ET1RfTElNSVQsCi0JCSAucDJfc2xvdyA9IElST05MQUtFX1AyX1NEVk9fREFDX1NMT1csCi0JCSAucDJfZmFzdCA9IElST05MQUtFX1AyX1NEVk9fREFDX0ZBU1QgfSwKKwkJIC5wMl9zbG93ID0gSVJPTkxBS0VfREFDX1AyX1NMT1csCisJCSAucDJfZmFzdCA9IElST05MQUtFX0RBQ19QMl9GQVNUIH0sCiAJLmZpbmRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCiB9OwogCi1zdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfaXJvbmxha2VfbHZkcyA9IHsKK3N0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0c19pcm9ubGFrZV9zaW5nbGVfbHZkcyA9IHsKIAkuZG90ID0geyAubWluID0gSVJPTkxBS0VfRE9UX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX0RPVF9NQVggfSwKIAkudmNvID0geyAubWluID0gSVJPTkxBS0VfVkNPX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX1ZDT19NQVggfSwKLQkubiAgID0geyAubWluID0gSVJPTkxBS0VfTl9NSU4sICAgICAgICAgICAgLm1heCA9IElST05MQUtFX05fTUFYIH0sCi0JLm0gICA9IHsgLm1pbiA9IElST05MQUtFX01fTUlOLCAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9NX01BWCB9LAorCS5uICAgPSB7IC5taW4gPSBJUk9OTEFLRV9MVkRTX1NfTl9NSU4sICAgICAubWF4ID0gSVJPTkxBS0VfTFZEU19TX05fTUFYIH0sCisJLm0gICA9IHsgLm1pbiA9IElST05MQUtFX0xWRFNfU19NX01JTiwgICAgIC5tYXggPSBJUk9OTEFLRV9MVkRTX1NfTV9NQVggfSwKIAkubTEgID0geyAubWluID0gSVJPTkxBS0VfTTFfTUlOLCAgICAgICAgICAgLm1heCA9IElST05MQUtFX00xX01BWCB9LAogCS5tMiAgPSB7IC5taW4gPSBJUk9OTEFLRV9NMl9NSU4sICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTTJfTUFYIH0sCi0JLnAgICA9IHsgLm1pbiA9IElST05MQUtFX1BfTFZEU19NSU4sICAgICAgIC5tYXggPSBJUk9OTEFLRV9QX0xWRFNfTUFYIH0sCi0JLnAxICA9IHsgLm1pbiA9IElST05MQUtFX1AxX01JTiwgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9QMV9NQVggfSwKKwkucCAgID0geyAubWluID0gSVJPTkxBS0VfTFZEU19TX1BfTUlOLCAgICAgLm1heCA9IElST05MQUtFX0xWRFNfU19QX01BWCB9LAorCS5wMSAgPSB7IC5taW4gPSBJUk9OTEFLRV9MVkRTX1NfUDFfTUlOLCAgICAubWF4ID0gSVJPTkxBS0VfTFZEU19TX1AxX01BWCB9LAogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJUk9OTEFLRV9QMl9ET1RfTElNSVQsCi0JCSAucDJfc2xvdyA9IElST05MQUtFX1AyX0xWRFNfU0xPVywKLQkJIC5wMl9mYXN0ID0gSVJPTkxBS0VfUDJfTFZEU19GQVNUIH0sCisJCSAucDJfc2xvdyA9IElST05MQUtFX0xWRFNfU19QMl9TTE9XLAorCQkgLnAyX2Zhc3QgPSBJUk9OTEFLRV9MVkRTX1NfUDJfRkFTVCB9LAorCS5maW5kX3BsbCA9IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAorfTsKKworc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgaW50ZWxfbGltaXRzX2lyb25sYWtlX2R1YWxfbHZkcyA9IHsKKwkuZG90ID0geyAubWluID0gSVJPTkxBS0VfRE9UX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX0RPVF9NQVggfSwKKwkudmNvID0geyAubWluID0gSVJPTkxBS0VfVkNPX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX1ZDT19NQVggfSwKKwkubiAgID0geyAubWluID0gSVJPTkxBS0VfTFZEU19EX05fTUlOLCAgICAgLm1heCA9IElST05MQUtFX0xWRFNfRF9OX01BWCB9LAorCS5tICAgPSB7IC5taW4gPSBJUk9OTEFLRV9MVkRTX0RfTV9NSU4sICAgICAubWF4ID0gSVJPTkxBS0VfTFZEU19EX01fTUFYIH0sCisJLm0xICA9IHsgLm1pbiA9IElST05MQUtFX00xX01JTiwgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9NMV9NQVggfSwKKwkubTIgID0geyAubWluID0gSVJPTkxBS0VfTTJfTUlOLCAgICAgICAgICAgLm1heCA9IElST05MQUtFX00yX01BWCB9LAorCS5wICAgPSB7IC5taW4gPSBJUk9OTEFLRV9MVkRTX0RfUF9NSU4sICAgICAubWF4ID0gSVJPTkxBS0VfTFZEU19EX1BfTUFYIH0sCisJLnAxICA9IHsgLm1pbiA9IElST05MQUtFX0xWRFNfRF9QMV9NSU4sICAgIC5tYXggPSBJUk9OTEFLRV9MVkRTX0RfUDFfTUFYIH0sCisJLnAyICA9IHsgLmRvdF9saW1pdCA9IElST05MQUtFX1AyX0RPVF9MSU1JVCwKKwkJIC5wMl9zbG93ID0gSVJPTkxBS0VfTFZEU19EX1AyX1NMT1csCisJCSAucDJfZmFzdCA9IElST05MQUtFX0xWRFNfRF9QMl9GQVNUIH0sCisJLmZpbmRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCit9OworCitzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfaXJvbmxha2Vfc2luZ2xlX2x2ZHNfMTAwbSA9IHsKKwkuZG90ID0geyAubWluID0gSVJPTkxBS0VfRE9UX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX0RPVF9NQVggfSwKKwkudmNvID0geyAubWluID0gSVJPTkxBS0VfVkNPX01JTiwgICAgICAgICAgLm1heCA9IElST05MQUtFX1ZDT19NQVggfSwKKwkubiAgID0geyAubWluID0gSVJPTkxBS0VfTFZEU19TX1NTQ19OX01JTiwgLm1heCA9IElST05MQUtFX0xWRFNfU19TU0NfTl9NQVggfSwKKwkubSAgID0geyAubWluID0gSVJPTkxBS0VfTFZEU19TX1NTQ19NX01JTiwgLm1heCA9IElST05MQUtFX0xWRFNfU19TU0NfTV9NQVggfSwKKwkubTEgID0geyAubWluID0gSVJPTkxBS0VfTTFfTUlOLCAgICAgICAgICAgLm1heCA9IElST05MQUtFX00xX01BWCB9LAorCS5tMiAgPSB7IC5taW4gPSBJUk9OTEFLRV9NMl9NSU4sICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTTJfTUFYIH0sCisJLnAgICA9IHsgLm1pbiA9IElST05MQUtFX0xWRFNfU19TU0NfUF9NSU4sIC5tYXggPSBJUk9OTEFLRV9MVkRTX1NfU1NDX1BfTUFYIH0sCisJLnAxICA9IHsgLm1pbiA9IElST05MQUtFX0xWRFNfU19TU0NfUDFfTUlOLC5tYXggPSBJUk9OTEFLRV9MVkRTX1NfU1NDX1AxX01BWCB9LAorCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJUk9OTEFLRV9QMl9ET1RfTElNSVQsCisJCSAucDJfc2xvdyA9IElST05MQUtFX0xWRFNfU19TU0NfUDJfU0xPVywKKwkJIC5wMl9mYXN0ID0gSVJPTkxBS0VfTFZEU19TX1NTQ19QMl9GQVNUIH0sCisJLmZpbmRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCit9OworCitzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfaXJvbmxha2VfZHVhbF9sdmRzXzEwMG0gPSB7CisJLmRvdCA9IHsgLm1pbiA9IElST05MQUtFX0RPVF9NSU4sICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9ET1RfTUFYIH0sCisJLnZjbyA9IHsgLm1pbiA9IElST05MQUtFX1ZDT19NSU4sICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9WQ09fTUFYIH0sCisJLm4gICA9IHsgLm1pbiA9IElST05MQUtFX0xWRFNfRF9TU0NfTl9NSU4sIC5tYXggPSBJUk9OTEFLRV9MVkRTX0RfU1NDX05fTUFYIH0sCisJLm0gICA9IHsgLm1pbiA9IElST05MQUtFX0xWRFNfRF9TU0NfTV9NSU4sIC5tYXggPSBJUk9OTEFLRV9MVkRTX0RfU1NDX01fTUFYIH0sCisJLm0xICA9IHsgLm1pbiA9IElST05MQUtFX00xX01JTiwgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9NMV9NQVggfSwKKwkubTIgID0geyAubWluID0gSVJPTkxBS0VfTTJfTUlOLCAgICAgICAgICAgLm1heCA9IElST05MQUtFX00yX01BWCB9LAorCS5wICAgPSB7IC5taW4gPSBJUk9OTEFLRV9MVkRTX0RfU1NDX1BfTUlOLCAubWF4ID0gSVJPTkxBS0VfTFZEU19EX1NTQ19QX01BWCB9LAorCS5wMSAgPSB7IC5taW4gPSBJUk9OTEFLRV9MVkRTX0RfU1NDX1AxX01JTiwubWF4ID0gSVJPTkxBS0VfTFZEU19EX1NTQ19QMV9NQVggfSwKKwkucDIgID0geyAuZG90X2xpbWl0ID0gSVJPTkxBS0VfUDJfRE9UX0xJTUlULAorCQkgLnAyX3Nsb3cgPSBJUk9OTEFLRV9MVkRTX0RfU1NDX1AyX1NMT1csCisJCSAucDJfZmFzdCA9IElST05MQUtFX0xWRFNfRF9TU0NfUDJfRkFTVCB9LAogCS5maW5kX3BsbCA9IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAogfTsKIApAQCAtNTA5LDM0ICs2MDcsNTMgQEAKICAgICAgICAgICAgICAgICAgLm1heCA9IElST05MQUtFX0RPVF9NQVggfSwKICAgICAgICAgLnZjbyA9IHsgLm1pbiA9IElST05MQUtFX1ZDT19NSU4sCiAgICAgICAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9WQ09fTUFYfSwKLSAgICAgICAgLm4gICA9IHsgLm1pbiA9IElST05MQUtFX05fTUlOLAotICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTl9NQVggfSwKLSAgICAgICAgLm0gICA9IHsgLm1pbiA9IElST05MQUtFX01fTUlOLAotICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTV9NQVggfSwKKyAgICAgICAgLm4gICA9IHsgLm1pbiA9IElST05MQUtFX0RQX05fTUlOLAorICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfRFBfTl9NQVggfSwKKyAgICAgICAgLm0gICA9IHsgLm1pbiA9IElST05MQUtFX0RQX01fTUlOLAorICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfRFBfTV9NQVggfSwKICAgICAgICAgLm0xICA9IHsgLm1pbiA9IElST05MQUtFX00xX01JTiwKICAgICAgICAgICAgICAgICAgLm1heCA9IElST05MQUtFX00xX01BWCB9LAogICAgICAgICAubTIgID0geyAubWluID0gSVJPTkxBS0VfTTJfTUlOLAogICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTTJfTUFYIH0sCi0gICAgICAgIC5wICAgPSB7IC5taW4gPSBJUk9OTEFLRV9QX0RJU1BMQVlfUE9SVF9NSU4sCi0gICAgICAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9QX0RJU1BMQVlfUE9SVF9NQVggfSwKLSAgICAgICAgLnAxICA9IHsgLm1pbiA9IElST05MQUtFX1AxX0RJU1BMQVlfUE9SVF9NSU4sCi0gICAgICAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9QMV9ESVNQTEFZX1BPUlRfTUFYfSwKLSAgICAgICAgLnAyICA9IHsgLmRvdF9saW1pdCA9IElST05MQUtFX1AyX0RJU1BMQVlfUE9SVF9MSU1JVCwKLSAgICAgICAgICAgICAgICAgLnAyX3Nsb3cgPSBJUk9OTEFLRV9QMl9ESVNQTEFZX1BPUlRfU0xPVywKLSAgICAgICAgICAgICAgICAgLnAyX2Zhc3QgPSBJUk9OTEFLRV9QMl9ESVNQTEFZX1BPUlRfRkFTVCB9LAorICAgICAgICAucCAgID0geyAubWluID0gSVJPTkxBS0VfRFBfUF9NSU4sCisgICAgICAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9EUF9QX01BWCB9LAorICAgICAgICAucDEgID0geyAubWluID0gSVJPTkxBS0VfRFBfUDFfTUlOLAorICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfRFBfUDFfTUFYfSwKKyAgICAgICAgLnAyICA9IHsgLmRvdF9saW1pdCA9IElST05MQUtFX0RQX1AyX0xJTUlULAorICAgICAgICAgICAgICAgICAucDJfc2xvdyA9IElST05MQUtFX0RQX1AyX1NMT1csCisgICAgICAgICAgICAgICAgIC5wMl9mYXN0ID0gSVJPTkxBS0VfRFBfUDJfRkFTVCB9LAogICAgICAgICAuZmluZF9wbGwgPSBpbnRlbF9maW5kX3BsbF9pcm9ubGFrZV9kcCwKIH07CiAKIHN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90ICppbnRlbF9pcm9ubGFrZV9saW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0OwotCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkKLQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2lyb25sYWtlX2x2ZHM7Ci0JZWxzZSBpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQpIHx8CisJaW50IHJlZmNsayA9IDEyMDsKKworCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkgeworCQlpZiAoZGV2X3ByaXYtPmx2ZHNfdXNlX3NzYyAmJiBkZXZfcHJpdi0+bHZkc19zc2NfZnJlcSA9PSAxMDApCisJCQlyZWZjbGsgPSAxMDA7CisKKwkJaWYgKChJOTE1X1JFQUQoUENIX0xWRFMpICYgTFZEU19DTEtCX1BPV0VSX01BU0spID09CisJCSAgICBMVkRTX0NMS0JfUE9XRVJfVVApIHsKKwkJCS8qIExWRFMgZHVhbCBjaGFubmVsICovCisJCQlpZiAocmVmY2xrID09IDEwMCkKKwkJCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaXJvbmxha2VfZHVhbF9sdmRzXzEwMG07CisJCQllbHNlCisJCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2lyb25sYWtlX2R1YWxfbHZkczsKKwkJfSBlbHNlIHsKKwkJCWlmIChyZWZjbGsgPT0gMTAwKQorCQkJCWxpbWl0ID0gJmludGVsX2xpbWl0c19pcm9ubGFrZV9zaW5nbGVfbHZkc18xMDBtOworCQkJZWxzZQorCQkJCWxpbWl0ID0gJmludGVsX2xpbWl0c19pcm9ubGFrZV9zaW5nbGVfbHZkczsKKwkJfQorCX0gZWxzZSBpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQpIHx8CiAJCQlIQVNfZURQKQogCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaXJvbmxha2VfZGlzcGxheV9wb3J0OwogCWVsc2UKLQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2lyb25sYWtlX3Nkdm87CisJCWxpbWl0ID0gJmludGVsX2xpbWl0c19pcm9ubGFrZV9kYWM7CiAKIAlyZXR1cm4gbGltaXQ7CiB9CkBAIC05MTQsNiArMTAzMSw4IEBACiAKIAkvKiBlbmFibGUgaXQuLi4gKi8KIAlmYmNfY3RsID0gRkJDX0NUTF9FTiB8IEZCQ19DVExfUEVSSU9ESUM7CisJaWYgKElTX0k5NDVHTShkZXYpKQorCQlmYmNfY3RsIHw9IEZCQ19DM19JRExFOyAvKiA5NDUgbmVlZHMgc3BlY2lhbCBTUiBoYW5kbGluZyAqLwogCWZiY19jdGwgfD0gKGRldl9wcml2LT5jZmJfcGl0Y2ggJiAweGZmKSA8PCBGQkNfQ1RMX1NUUklERV9TSElGVDsKIAlmYmNfY3RsIHw9IChpbnRlcnZhbCAmIDB4MmZmZikgPDwgRkJDX0NUTF9JTlRFUlZBTF9TSElGVDsKIAlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpCkBAIC0xNjM4LDYgKzE3NTcsNyBAQAogCWNhc2UgRFJNX01PREVfRFBNU19PRkY6CiAJCURSTV9ERUJVR19LTVMoImNydGMgJWQgZHBtcyBvZmZcbiIsIHBpcGUpOwogCisJCWRybV92Ymxhbmtfb2ZmKGRldiwgcGlwZSk7CiAJCS8qIERpc2FibGUgZGlzcGxheSBwbGFuZSAqLwogCQl0ZW1wID0gSTkxNV9SRUFEKGRzcGNudHJfcmVnKTsKIAkJaWYgKCh0ZW1wICYgRElTUExBWV9QTEFORV9FTkFCTEUpICE9IDApIHsKQEAgLTI1MTksNiArMjYzOSwxMCBAQAogCQlzcl9lbnRyaWVzID0gcm91bmR1cChzcl9lbnRyaWVzIC8gY2FjaGVsaW5lX3NpemUsIDEpOwogCQlEUk1fREVCVUcoInNlbGYtcmVmcmVzaCBlbnRyaWVzOiAlZFxuIiwgc3JfZW50cmllcyk7CiAJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEZXX0JMQ19TRUxGX0VOKTsKKwl9IGVsc2UgeworCQkvKiBUdXJuIG9mZiBzZWxmIHJlZnJlc2ggaWYgYm90aCBwaXBlcyBhcmUgZW5hYmxlZCAqLworCQlJOTE1X1dSSVRFKEZXX0JMQ19TRUxGLCBJOTE1X1JFQUQoRldfQkxDX1NFTEYpCisJCQkJCSYgfkZXX0JMQ19TRUxGX0VOKTsKIAl9CiAKIAlEUk1fREVCVUcoIlNldHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gQTogJWQsIEI6ICVkLCBTUiAlZFxuIiwKQEAgLTI1NjIsNiArMjY4NiwxMCBAQAogCQkJc3J3bSA9IDE7CiAJCXNyd20gJj0gMHgzZjsKIAkJSTkxNV9XUklURShGV19CTENfU0VMRiwgRldfQkxDX1NFTEZfRU4pOworCX0gZWxzZSB7CisJCS8qIFR1cm4gb2ZmIHNlbGYgcmVmcmVzaCBpZiBib3RoIHBpcGVzIGFyZSBlbmFibGVkICovCisJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEk5MTVfUkVBRChGV19CTENfU0VMRikKKwkJCQkJJiB+RldfQkxDX1NFTEZfRU4pOwogCX0KIAogCURSTV9ERUJVR19LTVMoIlNldHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gQTogOCwgQjogOCwgQzogOCwgU1IgJWRcbiIsCkBAIC0yNjMwLDYgKzI3NTgsMTAgQEAKIAkJaWYgKHNyd20gPCAwKQogCQkJc3J3bSA9IDE7CiAJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEZXX0JMQ19TRUxGX0VOIHwgKHNyd20gJiAweDNmKSk7CisJfSBlbHNlIHsKKwkJLyogVHVybiBvZmYgc2VsZiByZWZyZXNoIGlmIGJvdGggcGlwZXMgYXJlIGVuYWJsZWQgKi8KKwkJSTkxNV9XUklURShGV19CTENfU0VMRiwgSTkxNV9SRUFEKEZXX0JMQ19TRUxGKQorCQkJCQkmIH5GV19CTENfU0VMRl9FTik7CiAJfQogCiAJRFJNX0RFQlVHX0tNUygiU2V0dGluZyBGSUZPIHdhdGVybWFya3MgLSBBOiAlZCwgQjogJWQsIEM6ICVkLCBTUiAlZFxuIiwKQEAgLTM5NDksNyArNDA4MSw4IEBACiBzdHJ1Y3QgaW50ZWxfdW5waW5fd29yayB7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9sZF9mYl9vYmo7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpwZW5kaW5nX2ZsaXBfb2JqOwogCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50OwogCWludCBwZW5kaW5nOwogfTsKQEAgLTM5NjAsOCArNDA5Myw5IEBACiAJCWNvbnRhaW5lcl9vZihfX3dvcmssIHN0cnVjdCBpbnRlbF91bnBpbl93b3JrLCB3b3JrKTsKIAogCW11dGV4X2xvY2soJndvcmstPmRldi0+c3RydWN0X211dGV4KTsKLQlpOTE1X2dlbV9vYmplY3RfdW5waW4od29yay0+b2JqKTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh3b3JrLT5vYmopOworCWk5MTVfZ2VtX29iamVjdF91bnBpbih3b3JrLT5vbGRfZmJfb2JqKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh3b3JrLT5wZW5kaW5nX2ZsaXBfb2JqKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh3b3JrLT5vbGRfZmJfb2JqKTsKIAltdXRleF91bmxvY2soJndvcmstPmRldi0+c3RydWN0X211dGV4KTsKIAlrZnJlZSh3b3JrKTsKIH0KQEAgLTM5ODQsNiArNDExOCwxMiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAl3b3JrID0gaW50ZWxfY3J0Yy0+dW5waW5fd29yazsKIAlpZiAod29yayA9PSBOVUxMIHx8ICF3b3JrLT5wZW5kaW5nKSB7CisJCWlmICh3b3JrICYmICF3b3JrLT5wZW5kaW5nKSB7CisJCQlvYmpfcHJpdiA9IHdvcmstPnBlbmRpbmdfZmxpcF9vYmotPmRyaXZlcl9wcml2YXRlOworCQkJRFJNX0RFQlVHX0RSSVZFUigiZmxpcCBmaW5pc2g6ICVwICglZCkgbm90IHBlbmRpbmc/XG4iLAorCQkJCQkgb2JqX3ByaXYsCisJCQkJCSBhdG9taWNfcmVhZCgmb2JqX3ByaXYtPnBlbmRpbmdfZmxpcCkpOworCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQpAQCAtNDAwNCw4ICs0MTQ0LDExIEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAotCW9ial9wcml2ID0gd29yay0+b2JqLT5kcml2ZXJfcHJpdmF0ZTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmb2JqX3ByaXYtPnBlbmRpbmdfZmxpcCkpCisJb2JqX3ByaXYgPSB3b3JrLT5wZW5kaW5nX2ZsaXBfb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCS8qIEluaXRpYWwgc2Nhbm91dCBidWZmZXIgd2lsbCBoYXZlIGEgMCBwZW5kaW5nIGZsaXAgY291bnQgKi8KKwlpZiAoKGF0b21pY19yZWFkKCZvYmpfcHJpdi0+cGVuZGluZ19mbGlwKSA9PSAwKSB8fAorCSAgICBhdG9taWNfZGVjX2FuZF90ZXN0KCZvYmpfcHJpdi0+cGVuZGluZ19mbGlwKSkKIAkJRFJNX1dBS0VVUCgmZGV2X3ByaXYtPnBlbmRpbmdfZmxpcF9xdWV1ZSk7CiAJc2NoZWR1bGVfd29yaygmd29yay0+d29yayk7CiB9CkBAIC00MDE4LDggKzQxNjEsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwotCWlmIChpbnRlbF9jcnRjLT51bnBpbl93b3JrKQorCWlmIChpbnRlbF9jcnRjLT51bnBpbl93b3JrKSB7CiAJCWludGVsX2NydGMtPnVucGluX3dvcmstPnBlbmRpbmcgPSAxOworCX0gZWxzZSB7CisJCURSTV9ERUJVR19EUklWRVIoInByZXBhcmluZyBmbGlwIHdpdGggbm8gdW5waW4gd29yaz9cbiIpOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtNDAzNSw3ICs0MTgxLDggQEAKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CiAJc3RydWN0IGludGVsX3VucGluX3dvcmsgKndvcms7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0OworCWludCBwaXBlc3JjX3JlZyA9IChpbnRlbF9jcnRjLT5waXBlID09IDApID8gUElQRUFTUkMgOiBQSVBFQlNSQzsKKwlpbnQgcmV0LCBwaXBlc3JjOwogCVJJTkdfTE9DQUxTOwogCiAJd29yayA9IGt6YWxsb2Moc2l6ZW9mICp3b3JrLCBHRlBfS0VSTkVMKTsKQEAgLTQwNDcsMTIgKzQxOTQsMTMgQEAKIAl3b3JrLT5ldmVudCA9IGV2ZW50OwogCXdvcmstPmRldiA9IGNydGMtPmRldjsKIAlpbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGNydGMtPmZiKTsKLQl3b3JrLT5vYmogPSBpbnRlbF9mYi0+b2JqOworCXdvcmstPm9sZF9mYl9vYmogPSBpbnRlbF9mYi0+b2JqOwogCUlOSVRfV09SSygmd29yay0+d29yaywgaW50ZWxfdW5waW5fd29ya19mbik7CiAKIAkvKiBXZSBib3Jyb3cgdGhlIGV2ZW50IHNwaW4gbG9jayBmb3IgcHJvdGVjdGluZyB1bnBpbl93b3JrICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCWlmIChpbnRlbF9jcnRjLT51bnBpbl93b3JrKSB7CisJCURSTV9ERUJVR19EUklWRVIoImZsaXAgcXVldWU6IGNydGMgYWxyZWFkeSBidXN5XG4iKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CiAJCWtmcmVlKHdvcmspOwogCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKQEAgLTQwNjYsMTkgKzQyMTQsMjQgQEAKIAogCXJldCA9IGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKGRldiwgb2JqKTsKIAlpZiAocmV0ICE9IDApIHsKKwkJRFJNX0RFQlVHX0RSSVZFUigiZmxpcCBxdWV1ZTogJXAgcGluICYgZmVuY2UgZmFpbGVkXG4iLAorCQkJICBvYmotPmRyaXZlcl9wcml2YXRlKTsKIAkJa2ZyZWUod29yayk7CisJCWludGVsX2NydGMtPnVucGluX3dvcmsgPSBOVUxMOwogCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQkvKiBSZWZlcmVuY2UgdGhlIG9sZCBmYiBvYmplY3QgZm9yIHRoZSBzY2hlZHVsZWQgd29yay4gKi8KLQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uod29yay0+b2JqKTsKKwkvKiBSZWZlcmVuY2UgdGhlIG9iamVjdHMgZm9yIHRoZSBzY2hlZHVsZWQgd29yay4gKi8KKwlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uod29yay0+b2xkX2ZiX29iaik7CisJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7CiAKIAljcnRjLT5mYiA9IGZiOwogCWk5MTVfZ2VtX29iamVjdF9mbHVzaF93cml0ZV9kb21haW4ob2JqKTsKIAlkcm1fdmJsYW5rX2dldChkZXYsIGludGVsX2NydGMtPnBpcGUpOwogCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAlhdG9taWNfaW5jKCZvYmpfcHJpdi0+cGVuZGluZ19mbGlwKTsKKwl3b3JrLT5wZW5kaW5nX2ZsaXBfb2JqID0gb2JqOwogCiAJQkVHSU5fTFBfUklORyg0KTsKIAlPVVRfUklORyhNSV9ESVNQTEFZX0ZMSVAgfApAQCAtNDA4Niw3ICs0MjM5LDggQEAKIAlPVVRfUklORyhmYi0+cGl0Y2gpOwogCWlmIChJU19JOTY1RyhkZXYpKSB7CiAJCU9VVF9SSU5HKG9ial9wcml2LT5ndHRfb2Zmc2V0IHwgb2JqX3ByaXYtPnRpbGluZ19tb2RlKTsKLQkJT1VUX1JJTkcoKGZiLT53aWR0aCA8PCAxNikgfCBmYi0+aGVpZ2h0KTsKKwkJcGlwZXNyYyA9IEk5MTVfUkVBRChwaXBlc3JjX3JlZyk7IAorCQlPVVRfUklORyhwaXBlc3JjICYgMHgwZmZmMGZmZik7CiAJfSBlbHNlIHsKIAkJT1VUX1JJTkcob2JqX3ByaXYtPmd0dF9vZmZzZXQpOwogCQlPVVRfUklORyhNSV9OT09QKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCmluZGV4IDM3MWQ3NTMuLmFhYWJiY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKGZibywgUEFHRV9TSVpFKTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKGZibywgNjQqMTAyNCk7CiAJaWYgKHJldCkgewogCQlEUk1fRVJST1IoImZhaWxlZCB0byBwaW4gZmI6ICVkXG4iLCByZXQpOwogCQlnb3RvIG91dF91bnJlZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwppbmRleCBhYTc0ZTU5Li5jMmU4YTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCkBAIC02MTEsNyArNjExLDcgQEAKIAl7CiAJCS5pZGVudCA9ICJTYW1zdW5nIFNYMjBTIiwKIAkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJQaG9lbml4IFRlY2hub2xvZ2llcyBMVEQiKSwKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlNhbXN1bmcgRWxlY3Ryb25pY3MiKSwKIAkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIlNYMjBTIiksCiAJCX0sCiAJfSwKQEAgLTYyMywxMiArNjIzLDI2IEBACiAJCX0sCiAJfSwKIAl7CisJCS5pZGVudCA9ICJBc3BpcmUgMTgxMFQiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFjZXIiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQXNwaXJlIDE4MTBUIiksCisJCX0sCisJfSwKKwl7CiAJCS5pZGVudCA9ICJQQy04MTAwNSIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTUFMQVRBIiksCiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlBDLTgxMDA1IiksCiAJCX0sCiAJfSwKKwl7CisJCS5pZGVudCA9ICJDbGV2byBNNXgwTiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQ0xFVk8gQ28uIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJNNXgwTiIpLAorCQl9LAorCX0sCiAJeyB9CiB9OwogCkBAIC02NDMsNyArNjU3LDcgQEAKIHsKIAllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwogCi0JaWYgKCFhY3BpX2xpZF9vcGVuKCkgJiYgIWRtaV9jaGVja19zeXN0ZW0oYmFkX2xpZF9zdGF0dXMpKQorCWlmICghZG1pX2NoZWNrX3N5c3RlbShiYWRfbGlkX3N0YXR1cykgJiYgIWFjcGlfbGlkX29wZW4oKSkKIAkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCmluZGV4IGVhYWNmZDAuLjgyNjc4ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKQEAgLTIzNDUsNiArMjM0NSwxNCBAQAogCQljb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX1ZHQTsKIAkJaW50ZWxfb3V0cHV0LT5jbG9uZV9tYXNrID0gKDEgPDwgSU5URUxfU0RWT19OT05fVFZfQ0xPTkVfQklUKSB8CiAJCQkJCSgxIDw8IElOVEVMX0FOQUxPR19DTE9ORV9CSVQpOworCX0gZWxzZSBpZiAoZmxhZ3MgJiBTRFZPX09VVFBVVF9DVkJTMCkgeworCisJCXNkdm9fcHJpdi0+Y29udHJvbGxlZF9vdXRwdXQgPSBTRFZPX09VVFBVVF9DVkJTMDsKKwkJZW5jb2Rlci0+ZW5jb2Rlcl90eXBlID0gRFJNX01PREVfRU5DT0RFUl9UVkRBQzsKKwkJY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU87CisJCXNkdm9fcHJpdi0+aXNfdHYgPSB0cnVlOworCQlpbnRlbF9vdXRwdXQtPm5lZWRzX3R2X2Nsb2NrID0gdHJ1ZTsKKwkJaW50ZWxfb3V0cHV0LT5jbG9uZV9tYXNrID0gMSA8PCBJTlRFTF9TRFZPX1RWX0NMT05FX0JJVDsKIAl9IGVsc2UgaWYgKGZsYWdzICYgU0RWT19PVVRQVVRfTFZEUzApIHsKIAogCQlzZHZvX3ByaXYtPmNvbnRyb2xsZWRfb3V0cHV0ID0gU0RWT19PVVRQVVRfTFZEUzA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2FjcGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYWNwaS5jCmluZGV4IDFjZjQ4ODIuLjQ4MjI3ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYWNwaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYWNwaS5jCkBAIC05MCwyMSArOTAsMjEgQEAKIHsKIAlpbnQgcmVzdWx0OwogCi0JaWYgKG5vdXZlYXVfZHNtKGRldiwgTk9VVkVBVV9EU01fQUNUSVZFLCBOT1VWRUFVX0RTTV9BQ1RJVkVfUVVFUlksCisJaWYgKG5vdXZlYXVfZHNtKGRldiwgTk9VVkVBVV9EU01fUE9XRVIsIE5PVVZFQVVfRFNNX1BPV0VSX1NUQVRFLAogCQkJCQkJCQkmcmVzdWx0KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlOVl9JTkZPKGRldiwgIl9EU00gaGFyZHdhcmUgc3RhdHVzIGdhdmUgMHgleFxuIiwgcmVzdWx0KTsKIAotCWlmIChyZXN1bHQgJiAweDEpIHsJLyogU3RhbWluYSBtb2RlIC0gZGlzYWJsZSB0aGUgZXh0ZXJuYWwgR1BVICovCisJaWYgKHJlc3VsdCkgeyAvKiBFbnN1cmUgdGhhdCB0aGUgZXh0ZXJuYWwgR1BVIGlzIGVuYWJsZWQgKi8KKwkJbm91dmVhdV9kc20oZGV2LCBOT1VWRUFVX0RTTV9MRUQsIE5PVVZFQVVfRFNNX0xFRF9TUEVFRCwgTlVMTCk7CisJCW5vdXZlYXVfZHNtKGRldiwgTk9VVkVBVV9EU01fUE9XRVIsIE5PVVZFQVVfRFNNX1BPV0VSX1NQRUVELAorCQkJCQkJCQkJTlVMTCk7CisJfSBlbHNlIHsgLyogU3RhbWluYSBtb2RlIC0gZGlzYWJsZSB0aGUgZXh0ZXJuYWwgR1BVICovCiAJCW5vdXZlYXVfZHNtKGRldiwgTk9VVkVBVV9EU01fTEVELCBOT1VWRUFVX0RTTV9MRURfU1RBTUlOQSwKIAkJCQkJCQkJCU5VTEwpOwogCQlub3V2ZWF1X2RzbShkZXYsIE5PVVZFQVVfRFNNX1BPV0VSLCBOT1VWRUFVX0RTTV9QT1dFUl9TVEFNSU5BLAogCQkJCQkJCQkJTlVMTCk7Ci0JfSBlbHNlIHsJCS8qIEVuc3VyZSB0aGF0IHRoZSBleHRlcm5hbCBHUFUgaXMgZW5hYmxlZCAqLwotCQlub3V2ZWF1X2RzbShkZXYsIE5PVVZFQVVfRFNNX0xFRCwgTk9VVkVBVV9EU01fTEVEX1NQRUVELCBOVUxMKTsKLQkJbm91dmVhdV9kc20oZGV2LCBOT1VWRUFVX0RTTV9QT1dFUiwgTk9VVkVBVV9EU01fUE9XRVJfU1BFRUQsCi0JCQkJCQkJCQlOVUxMKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKaW5kZXggZDdmOGQ4Yi4uMGU5Y2QxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKQEAgLTE4NjUsNyArMTg2NSw3IEBACiAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBiaW9zLT5kZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApCisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNDApCiAJCXJldHVybiAxOwogCiAJLyoKQEAgLTM3NjUsNyArMzc2NSw2IEBACiAJICovCiAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBpbml0X2V4ZWMgaWV4ZWMgPSB7dHJ1ZSwgZmFsc2V9OwogCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPlZCSU9TOwogCXVpbnQ4X3QgKnRhYmxlID0gJmJpb3MtPmRhdGFbYmlvcy0+ZGlzcGxheS5zY3JpcHRfdGFibGVfcHRyXTsKIAl1aW50OF90ICpvdGFibGUgPSBOVUxMOwpAQCAtMzg0NSw4ICszODQ0LDYgQEAKIAkJfQogCX0KIAotCWJpb3MtPmRpc3BsYXkub3V0cHV0ID0gZGNiZW50OwotCiAJaWYgKHB4Y2xrID09IDApIHsKIAkJc2NyaXB0ID0gUk9NMTYob3RhYmxlWzZdKTsKIAkJaWYgKCFzY3JpcHQpIHsKQEAgLTM4NTUsNyArMzg1Miw3IEBACiAJCX0KIAogCQlOVl9UUkFDRShkZXYsICIweCUwNFg6IHBhcnNpbmcgb3V0cHV0IHNjcmlwdCAwXG4iLCBzY3JpcHQpOwotCQlwYXJzZV9pbml0X3RhYmxlKGJpb3MsIHNjcmlwdCwgJmlleGVjKTsKKwkJbm91dmVhdV9iaW9zX3J1bl9pbml0X3RhYmxlKGRldiwgc2NyaXB0LCBkY2JlbnQpOwogCX0gZWxzZQogCWlmIChweGNsayA9PSAtMSkgewogCQlzY3JpcHQgPSBST00xNihvdGFibGVbOF0pOwpAQCAtMzg2NSw3ICszODYyLDcgQEAKIAkJfQogCiAJCU5WX1RSQUNFKGRldiwgIjB4JTA0WDogcGFyc2luZyBvdXRwdXQgc2NyaXB0IDFcbiIsIHNjcmlwdCk7Ci0JCXBhcnNlX2luaXRfdGFibGUoYmlvcywgc2NyaXB0LCAmaWV4ZWMpOworCQlub3V2ZWF1X2Jpb3NfcnVuX2luaXRfdGFibGUoZGV2LCBzY3JpcHQsIGRjYmVudCk7CiAJfSBlbHNlCiAJaWYgKHB4Y2xrID09IC0yKSB7CiAJCWlmICh0YWJsZVs0XSA+PSAxMikKQEAgLTM4NzgsNyArMzg3NSw3IEBACiAJCX0KIAogCQlOVl9UUkFDRShkZXYsICIweCUwNFg6IHBhcnNpbmcgb3V0cHV0IHNjcmlwdCAyXG4iLCBzY3JpcHQpOwotCQlwYXJzZV9pbml0X3RhYmxlKGJpb3MsIHNjcmlwdCwgJmlleGVjKTsKKwkJbm91dmVhdV9iaW9zX3J1bl9pbml0X3RhYmxlKGRldiwgc2NyaXB0LCBkY2JlbnQpOwogCX0gZWxzZQogCWlmIChweGNsayA+IDApIHsKIAkJc2NyaXB0ID0gUk9NMTYob3RhYmxlW3RhYmxlWzRdICsgaSo2ICsgMl0pOwpAQCAtMzg5MCw3ICszODg3LDcgQEAKIAkJfQogCiAJCU5WX1RSQUNFKGRldiwgIjB4JTA0WDogcGFyc2luZyBjbG9jayBzY3JpcHQgMFxuIiwgc2NyaXB0KTsKLQkJcGFyc2VfaW5pdF90YWJsZShiaW9zLCBzY3JpcHQsICZpZXhlYyk7CisJCW5vdXZlYXVfYmlvc19ydW5faW5pdF90YWJsZShkZXYsIHNjcmlwdCwgZGNiZW50KTsKIAl9IGVsc2UKIAlpZiAocHhjbGsgPCAwKSB7CiAJCXNjcmlwdCA9IFJPTTE2KG90YWJsZVt0YWJsZVs0XSArIGkqNiArIDRdKTsKQEAgLTM5MDIsNyArMzg5OSw3IEBACiAJCX0KIAogCQlOVl9UUkFDRShkZXYsICIweCUwNFg6IHBhcnNpbmcgY2xvY2sgc2NyaXB0IDFcbiIsIHNjcmlwdCk7Ci0JCXBhcnNlX2luaXRfdGFibGUoYmlvcywgc2NyaXB0LCAmaWV4ZWMpOworCQlub3V2ZWF1X2Jpb3NfcnVuX2luaXRfdGFibGUoZGV2LCBzY3JpcHQsIGRjYmVudCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01ODY1LDkgKzU4NjIsMTEgQEAKIAlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKIAlzdHJ1Y3QgaW5pdF9leGVjIGlleGVjID0geyB0cnVlLCBmYWxzZSB9OwogCisJbXV0ZXhfbG9jaygmYmlvcy0+bG9jayk7CiAJYmlvcy0+ZGlzcGxheS5vdXRwdXQgPSBkY2JlbnQ7CiAJcGFyc2VfaW5pdF90YWJsZShiaW9zLCB0YWJsZSwgJmlleGVjKTsKIAliaW9zLT5kaXNwbGF5Lm91dHB1dCA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZiaW9zLT5sb2NrKTsKIH0KIAogc3RhdGljIGJvb2wgTlZJbml0VkJJT1Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKQEAgLTU4NzYsNiArNTg3NSw3IEBACiAJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CiAKIAltZW1zZXQoYmlvcywgMCwgc2l6ZW9mKHN0cnVjdCBudmJpb3MpKTsKKwltdXRleF9pbml0KCZiaW9zLT5sb2NrKTsKIAliaW9zLT5kZXYgPSBkZXY7CiAKIAlpZiAoIU5WU2hhZG93VkJJT1MoZGV2LCBiaW9zLT5kYXRhKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmgKaW5kZXggMDU4ZTk4Yy4uZmQ5NGJkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmgKQEAgLTIwNSw2ICsyMDUsOCBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CiAJc3RydWN0IG5vdXZlYXVfYmlvc19pbmZvIHB1YjsKIAorCXN0cnVjdCBtdXRleCBsb2NrOworCiAJdWludDhfdCBkYXRhW05WX1BST01fU0laRV07CiAJdW5zaWduZWQgaW50IGxlbmd0aDsKIAlib29sIGV4ZWN1dGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMKaW5kZXggZGIwZWQ0Yy4uMDI4NzE5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYwpAQCAtNjUsOCArNjUsMTAgQEAKIAogCS8qCiAJICogU29tZSBvZiB0aGUgdGlsZV9mbGFncyBoYXZlIGEgcGVyaW9kaWMgc3RydWN0dXJlIG9mIE4qNDA5NiBieXRlcywKLQkgKiBhbGlnbiB0byB0byB0aGF0IGFzIHdlbGwgYXMgdGhlIHBhZ2Ugc2l6ZS4gT3ZlcmFsbG9jYXRlIG1lbW9yeSB0bwotCSAqIGF2b2lkIGNvcnJ1cHRpb24gb2Ygb3RoZXIgYnVmZmVyIG9iamVjdHMuCisJICogYWxpZ24gdG8gdG8gdGhhdCBhcyB3ZWxsIGFzIHRoZSBwYWdlIHNpemUuIEFsaWduIHRoZSBzaXplIHRvIHRoZQorCSAqIGFwcHJvcHJpYXRlIGJvdW5kYXJpZXMuIFRoaXMgZG9lcyBpbXBseSB0aGF0IHNpemVzIGFyZSByb3VuZGVkIHVwCisJICogMy03IHBhZ2VzLCBzbyBiZSBhd2FyZSBvZiB0aGlzIGFuZCBkbyBub3Qgd2FzdGUgbWVtb3J5IGJ5IGFsbG9jYXRpbmcKKwkgKiBtYW55IHNtYWxsIGJ1ZmZlcnMuCiAJICovCiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNTApIHsKIAkJdWludDMyX3QgYmxvY2tfc2l6ZSA9IG5vdXZlYXVfbWVtX2ZiX2Ftb3VudChkZXYpID4+IDE1OwpAQCAtNzcsMjIgKzc5LDIwIEBACiAJCWNhc2UgMHgyODAwOgogCQljYXNlIDB4NDgwMDoKIAkJY2FzZSAweDdhMDA6Ci0JCQkqc2l6ZSA9IHJvdW5kdXAoKnNpemUsIGJsb2NrX3NpemUpOwogCQkJaWYgKGlzX3Bvd2VyX29mXzIoYmxvY2tfc2l6ZSkpIHsKLQkJCQkqc2l6ZSArPSAzICogYmxvY2tfc2l6ZTsKIAkJCQlmb3IgKGkgPSAxOyBpIDwgMTA7IGkrKykgewogCQkJCQkqYWxpZ24gPSAxMiAqIGkgKiBibG9ja19zaXplOwogCQkJCQlpZiAoISgqYWxpZ24gJSA2NTUzNikpCiAJCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9IGVsc2UgewotCQkJCSpzaXplICs9IDYgKiBibG9ja19zaXplOwogCQkJCWZvciAoaSA9IDE7IGkgPCAxMDsgaSsrKSB7CiAJCQkJCSphbGlnbiA9IDggKiBpICogYmxvY2tfc2l6ZTsKIAkJCQkJaWYgKCEoKmFsaWduICUgNjU1MzYpKQogCQkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQorCQkJKnNpemUgPSByb3VuZHVwKCpzaXplLCAqYWxpZ24pOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY2hhbm5lbC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jaGFubmVsLmMKaW5kZXggMzQzZDcxOC4uMjI4MWY5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jaGFubmVsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jaGFubmVsLmMKQEAgLTI3OCwxMiArMjc4LDExIEBACiAJLyogRW5zdXJlIHRoZSBjaGFubmVsIGlzIG5vIGxvbmdlciBhY3RpdmUgb24gdGhlIEdQVSAqLwogCXBmaWZvLT5yZWFzc2lnbihkZXYsIGZhbHNlKTsKIAotCWlmIChwZ3JhcGgtPmNoYW5uZWwoZGV2KSA9PSBjaGFuKSB7Ci0JCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCBmYWxzZSk7CisJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIGZhbHNlKTsKKwlpZiAocGdyYXBoLT5jaGFubmVsKGRldikgPT0gY2hhbikKIAkJcGdyYXBoLT51bmxvYWRfY29udGV4dChkZXYpOwotCQlwZ3JhcGgtPmZpZm9fYWNjZXNzKGRldiwgdHJ1ZSk7Ci0JfQogCXBncmFwaC0+ZGVzdHJveV9jb250ZXh0KGNoYW4pOworCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCB0cnVlKTsKIAogCWlmIChwZmlmby0+Y2hhbm5lbF9pZChkZXYpID09IGNoYW4tPmlkKSB7CiAJCXBmaWZvLT5kaXNhYmxlKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYwppbmRleCA3ZTZkNjczLi5kMmY2MzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKQEAgLTg4LDEzICs4OCwxNCBAQAogewogCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqbnZfY29ubmVjdG9yID0KIAkJbm91dmVhdV9jb25uZWN0b3IoZHJtX2Nvbm5lY3Rvcik7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG52X2Nvbm5lY3Rvci0+YmFzZS5kZXY7Ci0KLQlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwogCiAJaWYgKCFudl9jb25uZWN0b3IpCiAJCXJldHVybjsKIAorCWRldiA9IG52X2Nvbm5lY3Rvci0+YmFzZS5kZXY7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CisKIAlrZnJlZShudl9jb25uZWN0b3ItPmVkaWQpOwogCWRybV9zeXNmc19jb25uZWN0b3JfcmVtb3ZlKGRybV9jb25uZWN0b3IpOwogCWRybV9jb25uZWN0b3JfY2xlYW51cChkcm1fY29ubmVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYwppbmRleCBkZDQ5MzcyLi5mOTU0YWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcC5jCkBAIC01MDIsMTIgKzUwMiwxMiBAQAogCQkJYnJlYWs7CiAJfQogCi0JaWYgKChzdGF0ICYgTlY1MF9BVVhDSF9TVEFUX0NPVU5UKSAhPSBkYXRhX25yKSB7Ci0JCXJldCA9IC1FUkVNT1RFSU87Ci0JCWdvdG8gb3V0OwotCX0KLQogCWlmIChjbWQgJiAxKSB7CisJCWlmICgoc3RhdCAmIE5WNTBfQVVYQ0hfU1RBVF9DT1VOVCkgIT0gZGF0YV9ucikgeworCQkJcmV0ID0gLUVSRU1PVEVJTzsKKwkJCWdvdG8gb3V0OworCQl9CisKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQkJZGF0YTMyW2ldID0gbnZfcmQzMihkZXYsIE5WNTBfQVVYQ0hfREFUQV9JTihpbmRleCwgaSkpOwogCQkJTlZfREVCVUdfS01TKGRldiwgInJkICVkOiAweCUwOHhcbiIsIGksIGRhdGEzMltpXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYwppbmRleCAzNDNhYjdmLi5kYTNiOTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMKQEAgLTU2LDcgKzU2LDcgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZCh2cmFtX3B1c2hidWYsIG5vdXZlYXVfdnJhbV9wdXNoYnVmLCBpbnQsIDA0MDApOwogCiBNT0RVTEVfUEFSTV9ERVNDKHZyYW1fbm90aWZ5LCAiRm9yY2UgRE1BIG5vdGlmaWVycyB0byBiZSBpbiBWUkFNIik7Ci1pbnQgbm91dmVhdV92cmFtX25vdGlmeTsKK2ludCBub3V2ZWF1X3ZyYW1fbm90aWZ5ID0gMTsKIG1vZHVsZV9wYXJhbV9uYW1lZCh2cmFtX25vdGlmeSwgbm91dmVhdV92cmFtX25vdGlmeSwgaW50LCAwNDAwKTsKIAogTU9EVUxFX1BBUk1fREVTQyhkdWFsbGluaywgIkFsbG93IGR1YWwtbGluayBUTURTICg+PUdlRm9yY2UgOCkiKTsKQEAgLTc1LDYgKzc1LDE0IEBACiBpbnQgbm91dmVhdV9pZ25vcmVsaWQgPSAwOwogbW9kdWxlX3BhcmFtX25hbWVkKGlnbm9yZWxpZCwgbm91dmVhdV9pZ25vcmVsaWQsIGludCwgMDQwMCk7CiAKK01PRFVMRV9QQVJNX0RFU0Mobm9hZ3AsICJEaXNhYmxlIGFsbCBhY2NlbGVyYXRpb24iKTsKK2ludCBub3V2ZWF1X25vYWNjZWwgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKG5vYWNjZWwsIG5vdXZlYXVfbm9hY2NlbCwgaW50LCAwNDAwKTsKKworTU9EVUxFX1BBUk1fREVTQyhub2FncCwgIkRpc2FibGUgZmJjb24gYWNjZWxlcmF0aW9uIik7CitpbnQgbm91dmVhdV9ub2ZiYWNjZWwgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKG5vZmJhY2NlbCwgbm91dmVhdV9ub2ZiYWNjZWwsIGludCwgMDQwMCk7CisKIE1PRFVMRV9QQVJNX0RFU0ModHZfbm9ybSwgIkRlZmF1bHQgVFYgbm9ybS5cbiIKIAkJICJcdFx0U3VwcG9ydGVkOiBQQUwsIFBBTC1NLCBQQUwtTiwgUEFMLU5jLCBOVFNDLU0sIE5UU0MtSixcbiIKIAkJICJcdFx0XHRoZDQ4MGksIGhkNDgwcCwgaGQ1NzZpLCBoZDU3NnAsIGhkNzIwcCwgaGQxMDgwaS5cbiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCmluZGV4IDZiOTY5MDQuLjFjMTVlZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaApAQCAtNTgzLDYgKzU4Myw3IEBACiAJdWludDY0X3Qgdm1fZW5kOwogCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqdm1fdnJhbV9wdFtOVjUwX1ZNX1ZSQU1fTlJdOwogCWludCB2bV92cmFtX3B0X25yOworCXVpbnQ2NF90IHZyYW1fc3lzX2Jhc2U7CiAKIAkvKiB0aGUgbXRyciBjb3ZlcmluZyB0aGUgRkIgKi8KIAlpbnQgZmJfbXRycjsKQEAgLTY3OCw2ICs2NzksOCBAQAogZXh0ZXJuIGNoYXIgKm5vdXZlYXVfdmJpb3M7CiBleHRlcm4gaW50IG5vdXZlYXVfY3R4Znc7CiBleHRlcm4gaW50IG5vdXZlYXVfaWdub3JlbGlkOworZXh0ZXJuIGludCBub3V2ZWF1X25vZmJhY2NlbDsKK2V4dGVybiBpbnQgbm91dmVhdV9ub2FjY2VsOwogCiAvKiBub3V2ZWF1X3N0YXRlLmMgKi8KIGV4dGVybiB2b2lkIG5vdXZlYXVfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jCmluZGV4IDBiMDVjODYuLmVhODc5YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMKQEAgLTEwNyw2ICsxMDcsMzQgQEAKIAkuZmJfc2V0Y21hcCA9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIG52MDRfZmJjb25fb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5mYl9jaGVja192YXIgPSBkcm1fZmJfaGVscGVyX2NoZWNrX3ZhciwKKwkuZmJfc2V0X3BhciA9IGRybV9mYl9oZWxwZXJfc2V0X3BhciwKKwkuZmJfc2V0Y29scmVnID0gZHJtX2ZiX2hlbHBlcl9zZXRjb2xyZWcsCisJLmZiX2ZpbGxyZWN0ID0gbnYwNF9mYmNvbl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEgPSBudjA0X2ZiY29uX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQgPSBudjA0X2ZiY29uX2ltYWdlYmxpdCwKKwkuZmJfc3luYyA9IG5vdXZlYXVfZmJjb25fc3luYywKKwkuZmJfcGFuX2Rpc3BsYXkgPSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5LAorCS5mYl9ibGFuayA9IGRybV9mYl9oZWxwZXJfYmxhbmssCisJLmZiX3NldGNtYXAgPSBkcm1fZmJfaGVscGVyX3NldGNtYXAsCit9OworCitzdGF0aWMgc3RydWN0IGZiX29wcyBudjUwX2ZiY29uX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfY2hlY2tfdmFyID0gZHJtX2ZiX2hlbHBlcl9jaGVja192YXIsCisJLmZiX3NldF9wYXIgPSBkcm1fZmJfaGVscGVyX3NldF9wYXIsCisJLmZiX3NldGNvbHJlZyA9IGRybV9mYl9oZWxwZXJfc2V0Y29scmVnLAorCS5mYl9maWxscmVjdCA9IG52NTBfZmJjb25fZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhID0gbnY1MF9mYmNvbl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0ID0gbnY1MF9mYmNvbl9pbWFnZWJsaXQsCisJLmZiX3N5bmMgPSBub3V2ZWF1X2ZiY29uX3N5bmMsCisJLmZiX3Bhbl9kaXNwbGF5ID0gZHJtX2ZiX2hlbHBlcl9wYW5fZGlzcGxheSwKKwkuZmJfYmxhbmsgPSBkcm1fZmJfaGVscGVyX2JsYW5rLAorCS5mYl9zZXRjbWFwID0gZHJtX2ZiX2hlbHBlcl9zZXRjbWFwLAorfTsKKwogc3RhdGljIHZvaWQgbm91dmVhdV9mYmNvbl9nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCiAJCQkJICAgIHUxNiBibHVlLCBpbnQgcmVnbm8pCiB7CkBAIC0yNjcsOCArMjk1LDEyIEBACiAJZGV2X3ByaXYtPmZiZGV2X2luZm8gPSBpbmZvOwogCiAJc3RyY3B5KGluZm8tPmZpeC5pZCwgIm5vdXZlYXVmYiIpOwotCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fSFdBQ0NFTF9DT1BZQVJFQSB8Ci0JCSAgICAgIEZCSU5GT19IV0FDQ0VMX0ZJTExSRUNUIHwgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUOworCWlmIChub3V2ZWF1X25vZmJhY2NlbCkKKwkJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVCB8IEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEOworCWVsc2UKKwkJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVCB8IEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBIHwKKwkJCSAgICAgIEZCSU5GT19IV0FDQ0VMX0ZJTExSRUNUIHwKKwkJCSAgICAgIEZCSU5GT19IV0FDQ0VMX0lNQUdFQkxJVDsKIAlpbmZvLT5mYm9wcyA9ICZub3V2ZWF1X2ZiY29uX29wczsKIAlpbmZvLT5maXguc21lbV9zdGFydCA9IGRldi0+bW9kZV9jb25maWcuZmJfYmFzZSArIG52Ym8tPmJvLm9mZnNldCAtCiAJCQkgICAgICAgZGV2X3ByaXYtPnZtX3ZyYW1fYmFzZTsKQEAgLTMxNiwxMyArMzQ4LDE1IEBACiAJcGFyLT5ub3V2ZWF1X2ZiID0gbm91dmVhdV9mYjsKIAlwYXItPmRldiA9IGRldjsKIAotCWlmIChkZXZfcHJpdi0+Y2hhbm5lbCkgeworCWlmIChkZXZfcHJpdi0+Y2hhbm5lbCAmJiAhbm91dmVhdV9ub2ZiYWNjZWwpIHsKIAkJc3dpdGNoIChkZXZfcHJpdi0+Y2FyZF90eXBlKSB7CiAJCWNhc2UgTlZfNTA6CiAJCQludjUwX2ZiY29uX2FjY2VsX2luaXQoaW5mbyk7CisJCQlpbmZvLT5mYm9wcyA9ICZudjUwX2ZiY29uX29wczsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJbnYwNF9mYmNvbl9hY2NlbF9pbml0KGluZm8pOworCQkJaW5mby0+ZmJvcHMgPSAmbnYwNF9mYmNvbl9vcHM7CiAJCQlicmVhazsKIAkJfTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmgKaW5kZXggNDYyZTBiOC4uZjljMzRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uaApAQCAtNDAsNyArNDAsMTMgQEAKIHZvaWQgbm91dmVhdV9mYmNvbl9yZXN0b3JlKHZvaWQpOwogdm9pZCBub3V2ZWF1X2ZiY29uX3pmaWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCit2b2lkIG52MDRfZmJjb25fY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqcmVnaW9uKTsKK3ZvaWQgbnYwNF9mYmNvbl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KTsKK3ZvaWQgbnYwNF9mYmNvbl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpOwogaW50IG52MDRfZmJjb25fYWNjZWxfaW5pdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Cit2b2lkIG52NTBfZmJjb25fZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCk7Cit2b2lkIG52NTBfZmJjb25fY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqcmVnaW9uKTsKK3ZvaWQgbnY1MF9mYmNvbl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpOwogaW50IG52NTBfZmJjb25fYWNjZWxfaW5pdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAKIHZvaWQgbm91dmVhdV9mYmNvbl9ncHVfbG9ja3VwKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCmluZGV4IDZhYzgwNGIuLjcwY2MzMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYwpAQCAtOTI1LDcgKzkyNSw5IEBACiAJfQogCiAJaWYgKHJlcS0+ZmxhZ3MgJiBOT1VWRUFVX0dFTV9DUFVfUFJFUF9OT0JMT0NLKSB7CisJCXNwaW5fbG9jaygmbnZiby0+Ym8ubG9jayk7CiAJCXJldCA9IHR0bV9ib193YWl0KCZudmJvLT5ibywgZmFsc2UsIGZhbHNlLCBub193YWl0KTsKKwkJc3Bpbl91bmxvY2soJm52Ym8tPmJvLmxvY2spOwogCX0gZWxzZSB7CiAJCXJldCA9IHR0bV9ib19zeW5jY3B1X3dyaXRlX2dyYWIoJm52Ym8tPmJvLCBub193YWl0KTsKIAkJaWYgKHJldCA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ncmN0eC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ncmN0eC5jCmluZGV4IDQxOWY0YzIuLmM3ZWJlYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ3JjdHguYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dyY3R4LmMKQEAgLTk3LDggKzk3LDggQEAKIAkJfQogCiAJCXBncmFwaC0+Y3R4dmFscyA9IGttYWxsb2MoZnctPnNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIXBncmFwaC0+Y3R4cHJvZykgewotCQkJTlZfRVJST1IoZGV2LCAiT09NIGNvcHlpbmcgY3R4cHJvZ1xuIik7CisJCWlmICghcGdyYXBoLT5jdHh2YWxzKSB7CisJCQlOVl9FUlJPUihkZXYsICJPT00gY29weWluZyBjdHh2YWxzXG4iKTsKIAkJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCQkJbm91dmVhdV9ncmN0eF9maW5pKGRldik7CiAJCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2lycS5jCmluZGV4IDNiOWJhZDYuLjQ0N2Y5ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pcnEuYwpAQCAtMjExLDYgKzIxMSwyMCBAQAogCQkJCQkJCQlnZXQgKyA0KTsKIAkJfQogCisJCWlmIChzdGF0dXMgJiBOVl9QRklGT19JTlRSX1NFTUFQSE9SRSkgeworCQkJdWludDMyX3Qgc2VtOworCisJCQlzdGF0dXMgJj0gfk5WX1BGSUZPX0lOVFJfU0VNQVBIT1JFOworCQkJbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fSU5UUl8wLAorCQkJCU5WX1BGSUZPX0lOVFJfU0VNQVBIT1JFKTsKKworCQkJc2VtID0gbnZfcmQzMihkZXYsIE5WMTBfUEZJRk9fQ0FDSEUxX1NFTUFQSE9SRSk7CisJCQludl93cjMyKGRldiwgTlYxMF9QRklGT19DQUNIRTFfU0VNQVBIT1JFLCBzZW0gfCAweDEpOworCisJCQludl93cjMyKGRldiwgTlYwM19QRklGT19DQUNIRTFfR0VULCBnZXQgKyA0KTsKKwkJCW52X3dyMzIoZGV2LCBOVjA0X1BGSUZPX0NBQ0hFMV9QVUxMMCwgMSk7CisJCX0KKwogCQlpZiAoc3RhdHVzKSB7CiAJCQlOVl9JTkZPKGRldiwgIlBGSUZPX0lOVFIgMHglMDh4IC0gQ2ggJWRcbiIsCiAJCQkJc3RhdHVzLCBjaGlkKTsKQEAgLTU2Niw4NiArNTgwLDk5IEBACiBzdGF0aWMgdm9pZAogbnY1MF9wZ3JhcGhfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQl1aW50MzJfdCBzdGF0dXMsIG5zb3VyY2U7CisJdWludDMyX3Qgc3RhdHVzOwogCi0Jc3RhdHVzID0gbnZfcmQzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIpOwotCW5zb3VyY2UgPSBudl9yZDMyKGRldiwgTlYwM19QR1JBUEhfTlNPVVJDRSk7CisJd2hpbGUgKChzdGF0dXMgPSBudl9yZDMyKGRldiwgTlYwM19QR1JBUEhfSU5UUikpKSB7CisJCXVpbnQzMl90IG5zb3VyY2UgPSBudl9yZDMyKGRldiwgTlYwM19QR1JBUEhfTlNPVVJDRSk7CiAKLQlpZiAoc3RhdHVzICYgMHgwMDAwMDAwMSkgewotCQlub3V2ZWF1X3BncmFwaF9pbnRyX25vdGlmeShkZXYsIG5zb3VyY2UpOwotCQlzdGF0dXMgJj0gfjB4MDAwMDAwMDE7Ci0JCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSLCAweDAwMDAwMDAxKTsKLQl9CisJCWlmIChzdGF0dXMgJiAweDAwMDAwMDAxKSB7CisJCQlub3V2ZWF1X3BncmFwaF9pbnRyX25vdGlmeShkZXYsIG5zb3VyY2UpOworCQkJc3RhdHVzICY9IH4weDAwMDAwMDAxOworCQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIDB4MDAwMDAwMDEpOworCQl9CiAKLQlpZiAoc3RhdHVzICYgMHgwMDAwMDAxMCkgewotCQlub3V2ZWF1X3BncmFwaF9pbnRyX2Vycm9yKGRldiwgbnNvdXJjZSB8Ci0JCQkJCSAgTlYwM19QR1JBUEhfTlNPVVJDRV9JTExFR0FMX01USEQpOworCQlpZiAoc3RhdHVzICYgMHgwMDAwMDAxMCkgeworCQkJbm91dmVhdV9wZ3JhcGhfaW50cl9lcnJvcihkZXYsIG5zb3VyY2UgfAorCQkJCQlOVjAzX1BHUkFQSF9OU09VUkNFX0lMTEVHQUxfTVRIRCk7CiAKLQkJc3RhdHVzICY9IH4weDAwMDAwMDEwOwotCQludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiwgMHgwMDAwMDAxMCk7Ci0JfQorCQkJc3RhdHVzICY9IH4weDAwMDAwMDEwOworCQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIDB4MDAwMDAwMTApOworCQl9CiAKLQlpZiAoc3RhdHVzICYgMHgwMDAwMTAwMCkgewotCQludl93cjMyKGRldiwgMHg0MDA1MDAsIDB4MDAwMDAwMDApOwotCQludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiwgTlZfUEdSQVBIX0lOVFJfQ09OVEVYVF9TV0lUQ0gpOwotCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfSU5UUl9FTiwgbnZfcmQzMihkZXYsCi0JCQlOVjQwX1BHUkFQSF9JTlRSX0VOKSAmIH5OVl9QR1JBUEhfSU5UUl9DT05URVhUX1NXSVRDSCk7Ci0JCW52X3dyMzIoZGV2LCAweDQwMDUwMCwgMHgwMDAxMDAwMSk7CisJCWlmIChzdGF0dXMgJiAweDAwMDAxMDAwKSB7CisJCQludl93cjMyKGRldiwgMHg0MDA1MDAsIDB4MDAwMDAwMDApOworCQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsCisJCQkJTlZfUEdSQVBIX0lOVFJfQ09OVEVYVF9TV0lUQ0gpOworCQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0lOVFJfRU4sIG52X3JkMzIoZGV2LAorCQkJCU5WNDBfUEdSQVBIX0lOVFJfRU4pICYKKwkJCQl+TlZfUEdSQVBIX0lOVFJfQ09OVEVYVF9TV0lUQ0gpOworCQkJbnZfd3IzMihkZXYsIDB4NDAwNTAwLCAweDAwMDEwMDAxKTsKIAotCQludjUwX2dyYXBoX2NvbnRleHRfc3dpdGNoKGRldik7CisJCQludjUwX2dyYXBoX2NvbnRleHRfc3dpdGNoKGRldik7CiAKLQkJc3RhdHVzICY9IH5OVl9QR1JBUEhfSU5UUl9DT05URVhUX1NXSVRDSDsKLQl9CisJCQlzdGF0dXMgJj0gfk5WX1BHUkFQSF9JTlRSX0NPTlRFWFRfU1dJVENIOworCQl9CiAKLQlpZiAoc3RhdHVzICYgMHgwMDEwMDAwMCkgewotCQlub3V2ZWF1X3BncmFwaF9pbnRyX2Vycm9yKGRldiwgbnNvdXJjZSB8Ci0JCQkJCSAgTlYwM19QR1JBUEhfTlNPVVJDRV9EQVRBX0VSUk9SKTsKKwkJaWYgKHN0YXR1cyAmIDB4MDAxMDAwMDApIHsKKwkJCW5vdXZlYXVfcGdyYXBoX2ludHJfZXJyb3IoZGV2LCBuc291cmNlIHwKKwkJCQkJTlYwM19QR1JBUEhfTlNPVVJDRV9EQVRBX0VSUk9SKTsKIAotCQlzdGF0dXMgJj0gfjB4MDAxMDAwMDA7Ci0JCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSLCAweDAwMTAwMDAwKTsKLQl9CisJCQlzdGF0dXMgJj0gfjB4MDAxMDAwMDA7CisJCQludl93cjMyKGRldiwgTlYwM19QR1JBUEhfSU5UUiwgMHgwMDEwMDAwMCk7CisJCX0KIAotCWlmIChzdGF0dXMgJiAweDAwMjAwMDAwKSB7Ci0JCWludCByOworCQlpZiAoc3RhdHVzICYgMHgwMDIwMDAwMCkgeworCQkJaW50IHI7CiAKLQkJbm91dmVhdV9wZ3JhcGhfaW50cl9lcnJvcihkZXYsIG5zb3VyY2UgfAotCQkJCQkgIE5WMDNfUEdSQVBIX05TT1VSQ0VfUFJPVEVDVElPTl9FUlJPUik7CisJCQlub3V2ZWF1X3BncmFwaF9pbnRyX2Vycm9yKGRldiwgbnNvdXJjZSB8CisJCQkJCU5WMDNfUEdSQVBIX05TT1VSQ0VfUFJPVEVDVElPTl9FUlJPUik7CiAKLQkJTlZfRVJST1IoZGV2LCAibWFnaWMgc2V0IDE6XG4iKTsKLQkJZm9yIChyID0gMHg0MDg5MDA7IHIgPD0gMHg0MDg5MTA7IHIgKz0gNCkKLQkJCU5WX0VSUk9SKGRldiwgIlx0MHglMDh4OiAweCUwOHhcbiIsIHIsIG52X3JkMzIoZGV2LCByKSk7Ci0JCW52X3dyMzIoZGV2LCAweDQwODkwMCwgbnZfcmQzMihkZXYsIDB4NDA4OTA0KSB8IDB4YzAwMDAwMDApOwotCQlmb3IgKHIgPSAweDQwOGUwODsgciA8PSAweDQwOGUyNDsgciArPSA0KQotCQkJTlZfRVJST1IoZGV2LCAiXHQweCUwOHg6IDB4JTA4eFxuIiwgciwgbnZfcmQzMihkZXYsIHIpKTsKLQkJbnZfd3IzMihkZXYsIDB4NDA4ZTA4LCBudl9yZDMyKGRldiwgMHg0MDhlMDgpIHwgMHhjMDAwMDAwMCk7CisJCQlOVl9FUlJPUihkZXYsICJtYWdpYyBzZXQgMTpcbiIpOworCQkJZm9yIChyID0gMHg0MDg5MDA7IHIgPD0gMHg0MDg5MTA7IHIgKz0gNCkKKwkJCQlOVl9FUlJPUihkZXYsICJcdDB4JTA4eDogMHglMDh4XG4iLCByLAorCQkJCQludl9yZDMyKGRldiwgcikpOworCQkJbnZfd3IzMihkZXYsIDB4NDA4OTAwLAorCQkJCW52X3JkMzIoZGV2LCAweDQwODkwNCkgfCAweGMwMDAwMDAwKTsKKwkJCWZvciAociA9IDB4NDA4ZTA4OyByIDw9IDB4NDA4ZTI0OyByICs9IDQpCisJCQkJTlZfRVJST1IoZGV2LCAiXHQweCUwOHg6IDB4JTA4eFxuIiwgciwKKwkJCQkJCQludl9yZDMyKGRldiwgcikpOworCQkJbnZfd3IzMihkZXYsIDB4NDA4ZTA4LAorCQkJCW52X3JkMzIoZGV2LCAweDQwOGUwOCkgfCAweGMwMDAwMDAwKTsKIAotCQlOVl9FUlJPUihkZXYsICJtYWdpYyBzZXQgMjpcbiIpOwotCQlmb3IgKHIgPSAweDQwOTkwMDsgciA8PSAweDQwOTkxMDsgciArPSA0KQotCQkJTlZfRVJST1IoZGV2LCAiXHQweCUwOHg6IDB4JTA4eFxuIiwgciwgbnZfcmQzMihkZXYsIHIpKTsKLQkJbnZfd3IzMihkZXYsIDB4NDA5OTAwLCBudl9yZDMyKGRldiwgMHg0MDk5MDQpIHwgMHhjMDAwMDAwMCk7Ci0JCWZvciAociA9IDB4NDA5ZTA4OyByIDw9IDB4NDA5ZTI0OyByICs9IDQpCi0JCQlOVl9FUlJPUihkZXYsICJcdDB4JTA4eDogMHglMDh4XG4iLCByLCBudl9yZDMyKGRldiwgcikpOwotCQludl93cjMyKGRldiwgMHg0MDllMDgsIG52X3JkMzIoZGV2LCAweDQwOWUwOCkgfCAweGMwMDAwMDAwKTsKKwkJCU5WX0VSUk9SKGRldiwgIm1hZ2ljIHNldCAyOlxuIik7CisJCQlmb3IgKHIgPSAweDQwOTkwMDsgciA8PSAweDQwOTkxMDsgciArPSA0KQorCQkJCU5WX0VSUk9SKGRldiwgIlx0MHglMDh4OiAweCUwOHhcbiIsIHIsCisJCQkJCW52X3JkMzIoZGV2LCByKSk7CisJCQludl93cjMyKGRldiwgMHg0MDk5MDAsCisJCQkJbnZfcmQzMihkZXYsIDB4NDA5OTA0KSB8IDB4YzAwMDAwMDApOworCQkJZm9yIChyID0gMHg0MDllMDg7IHIgPD0gMHg0MDllMjQ7IHIgKz0gNCkKKwkJCQlOVl9FUlJPUihkZXYsICJcdDB4JTA4eDogMHglMDh4XG4iLCByLAorCQkJCQludl9yZDMyKGRldiwgcikpOworCQkJbnZfd3IzMihkZXYsIDB4NDA5ZTA4LAorCQkJCW52X3JkMzIoZGV2LCAweDQwOWUwOCkgfCAweGMwMDAwMDAwKTsKIAotCQlzdGF0dXMgJj0gfjB4MDAyMDAwMDA7Ci0JCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9OU09VUkNFLCBuc291cmNlKTsKLQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIDB4MDAyMDAwMDApOwotCX0KKwkJCXN0YXR1cyAmPSB+MHgwMDIwMDAwMDsKKwkJCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9OU09VUkNFLCBuc291cmNlKTsKKwkJCW52X3dyMzIoZGV2LCBOVjAzX1BHUkFQSF9JTlRSLCAweDAwMjAwMDAwKTsKKwkJfQogCi0JaWYgKHN0YXR1cykgewotCQlOVl9JTkZPKGRldiwgIlVuaGFuZGxlZCBQR1JBUEhfSU5UUiAtIDB4JTA4eFxuIiwgc3RhdHVzKTsKLQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIHN0YXR1cyk7Ci0JfQorCQlpZiAoc3RhdHVzKSB7CisJCQlOVl9JTkZPKGRldiwgIlVuaGFuZGxlZCBQR1JBUEhfSU5UUiAtIDB4JTA4eFxuIiwKKwkJCQlzdGF0dXMpOworCQkJbnZfd3IzMihkZXYsIE5WMDNfUEdSQVBIX0lOVFIsIHN0YXR1cyk7CisJCX0KIAotCXsKLQkJY29uc3QgaW50IGlzYiA9ICgxIDw8IDE2KSB8ICgxIDw8IDApOworCQl7CisJCQljb25zdCBpbnQgaXNiID0gKDEgPDwgMTYpIHwgKDEgPDwgMCk7CiAKLQkJaWYgKChudl9yZDMyKGRldiwgMHg0MDA1MDApICYgaXNiKSAhPSBpc2IpCi0JCQludl93cjMyKGRldiwgMHg0MDA1MDAsIG52X3JkMzIoZGV2LCAweDQwMDUwMCkgfCBpc2IpOwotCQludl93cjMyKGRldiwgMHg0MDA4MjQsIG52X3JkMzIoZGV2LCAweDQwMDgyNCkgJiB+KDEgPDwgMzEpKTsKKwkJCWlmICgobnZfcmQzMihkZXYsIDB4NDAwNTAwKSAmIGlzYikgIT0gaXNiKQorCQkJCW52X3dyMzIoZGV2LCAweDQwMDUwMCwKKwkJCQkJbnZfcmQzMihkZXYsIDB4NDAwNTAwKSB8IGlzYik7CisJCX0KIAl9CiAKIAludl93cjMyKGRldiwgTlYwM19QTUNfSU5UUl8wLCBOVl9QTUNfSU5UUl8wX1BHUkFQSF9QRU5ESU5HKTsKKwludl93cjMyKGRldiwgMHg0MDA4MjQsIG52X3JkMzIoZGV2LCAweDQwMDgyNCkgJiB+KDEgPDwgMzEpKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCmluZGV4IDhmM2ExMmYuLjJkYzA5ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYwpAQCAtMjg1LDUzICsyODUsNTAgQEAKIAkJCXVpbnQzMl90IGZsYWdzLCB1aW50NjRfdCBwaHlzKQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfZ3B1b2JqICoqcGd0OwotCXVuc2lnbmVkIHBzeiwgcGZsLCBwYWdlczsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnBndDsKKwl1bnNpZ25lZCBibG9jazsKKwlpbnQgaTsKIAotCWlmICh2aXJ0ID49IGRldl9wcml2LT52bV9nYXJ0X2Jhc2UgJiYKLQkgICAgKHZpcnQgKyBzaXplKSA8IChkZXZfcHJpdi0+dm1fZ2FydF9iYXNlICsgZGV2X3ByaXYtPnZtX2dhcnRfc2l6ZSkpIHsKLQkJcHN6ID0gMTI7Ci0JCXBndCA9ICZkZXZfcHJpdi0+Z2FydF9pbmZvLnNnX2N0eGRtYTsKLQkJcGZsID0gMHgyMTsKLQkJdmlydCAtPSBkZXZfcHJpdi0+dm1fZ2FydF9iYXNlOwotCX0gZWxzZQotCWlmICh2aXJ0ID49IGRldl9wcml2LT52bV92cmFtX2Jhc2UgJiYKLQkgICAgKHZpcnQgKyBzaXplKSA8IChkZXZfcHJpdi0+dm1fdnJhbV9iYXNlICsgZGV2X3ByaXYtPnZtX3ZyYW1fc2l6ZSkpIHsKLQkJcHN6ID0gMTY7Ci0JCXBndCA9IGRldl9wcml2LT52bV92cmFtX3B0OwotCQlwZmwgPSAweDAxOwotCQl2aXJ0IC09IGRldl9wcml2LT52bV92cmFtX2Jhc2U7Ci0JfSBlbHNlIHsKLQkJTlZfRVJST1IoZGV2LCAiSW52YWxpZCBhZGRyZXNzOiAweCUxNmxseC0weCUxNmxseFxuIiwKLQkJCSB2aXJ0LCB2aXJ0ICsgc2l6ZSAtIDEpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwl2aXJ0ID0gKCh2aXJ0IC0gZGV2X3ByaXYtPnZtX3ZyYW1fYmFzZSkgPj4gMTYpIDw8IDE7CisJc2l6ZSA9IChzaXplID4+IDE2KSA8PCAxOworCisJcGh5cyB8PSAoKHVpbnQ2NF90KWZsYWdzIDw8IDMyKTsKKwlwaHlzIHw9IDE7CisJaWYgKGRldl9wcml2LT52cmFtX3N5c19iYXNlKSB7CisJCXBoeXMgKz0gZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2U7CisJCXBoeXMgfD0gMHgzMDsKIAl9CiAKLQlwYWdlcyA9IHNpemUgPj4gcHN6OwotCiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7Ci0JaWYgKGZsYWdzICYgMHg4MDAwMDAwMCkgewotCQl3aGlsZSAocGFnZXMtLSkgewotCQkJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpwdCA9IHBndFt2aXJ0ID4+IDI5XTsKLQkJCXVuc2lnbmVkIHB0ZSA9ICgodmlydCAmIDB4MWZmZmZmZmZVTEwpID4+IHBzeikgPDwgMTsKKwl3aGlsZSAoc2l6ZSkgeworCQl1bnNpZ25lZCBvZmZzZXRfaCA9IHVwcGVyXzMyX2JpdHMocGh5cyk7CisJCXVuc2lnbmVkIG9mZnNldF9sID0gbG93ZXJfMzJfYml0cyhwaHlzKTsKKwkJdW5zaWduZWQgcHRlLCBlbmQ7CiAKLQkJCW52X3dvMzIoZGV2LCBwdCwgcHRlKyssIDB4MDAwMDAwMDApOwotCQkJbnZfd28zMihkZXYsIHB0LCBwdGUrKywgMHgwMDAwMDAwMCk7Ci0KLQkJCXZpcnQgKz0gKDEgPDwgcHN6KTsKKwkJZm9yIChpID0gNzsgaSA+PSAwOyBpLS0pIHsKKwkJCWJsb2NrID0gMSA8PCAoaSArIDEpOworCQkJaWYgKHNpemUgPj0gYmxvY2sgJiYgISh2aXJ0ICYgKGJsb2NrIC0gMSkpKQorCQkJCWJyZWFrOwogCQl9Ci0JfSBlbHNlIHsKLQkJd2hpbGUgKHBhZ2VzLS0pIHsKLQkJCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcHQgPSBwZ3RbdmlydCA+PiAyOV07Ci0JCQl1bnNpZ25lZCBwdGUgPSAoKHZpcnQgJiAweDFmZmZmZmZmVUxMKSA+PiBwc3opIDw8IDE7Ci0JCQl1bnNpZ25lZCBvZmZzZXRfaCA9IHVwcGVyXzMyX2JpdHMocGh5cykgJiAweGZmOwotCQkJdW5zaWduZWQgb2Zmc2V0X2wgPSBsb3dlcl8zMl9iaXRzKHBoeXMpOworCQlvZmZzZXRfbCB8PSAoaSA8PCA3KTsKIAotCQkJbnZfd28zMihkZXYsIHB0LCBwdGUrKywgb2Zmc2V0X2wgfCBwZmwpOwotCQkJbnZfd28zMihkZXYsIHB0LCBwdGUrKywgb2Zmc2V0X2ggfCBmbGFncyk7CisJCXBoeXMgKz0gYmxvY2sgPDwgMTU7CisJCXNpemUgLT0gYmxvY2s7CiAKLQkJCXBoeXMgKz0gKDEgPDwgcHN6KTsKLQkJCXZpcnQgKz0gKDEgPDwgcHN6KTsKKwkJd2hpbGUgKGJsb2NrKSB7CisJCQlwZ3QgPSBkZXZfcHJpdi0+dm1fdnJhbV9wdFt2aXJ0ID4+IDE0XTsKKwkJCXB0ZSA9IHZpcnQgJiAweDNmZmU7CisKKwkJCWVuZCA9IHB0ZSArIGJsb2NrOworCQkJaWYgKGVuZCA+IDE2Mzg0KQorCQkJCWVuZCA9IDE2Mzg0OworCQkJYmxvY2sgLT0gKGVuZCAtIHB0ZSk7CisJCQl2aXJ0ICArPSAoZW5kIC0gcHRlKTsKKworCQkJd2hpbGUgKHB0ZSA8IGVuZCkgeworCQkJCW52X3dvMzIoZGV2LCBwZ3QsIHB0ZSsrLCBvZmZzZXRfbCk7CisJCQkJbnZfd28zMihkZXYsIHBndCwgcHRlKyssIG9mZnNldF9oKTsKKwkJCX0KIAkJfQogCX0KIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwpAQCAtMzU2LDcgKzM1Myw0MSBAQAogdm9pZAogbnY1MF9tZW1fdm1fdW5iaW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQ2NF90IHZpcnQsIHVpbnQzMl90IHNpemUpCiB7Ci0JbnY1MF9tZW1fdm1fYmluZF9saW5lYXIoZGV2LCB2aXJ0LCBzaXplLCAweDgwMDAwMDAwLCAwKTsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcGd0OworCXVuc2lnbmVkIHBhZ2VzLCBwdGUsIGVuZDsKKworCXZpcnQgLT0gZGV2X3ByaXYtPnZtX3ZyYW1fYmFzZTsKKwlwYWdlcyA9IChzaXplID4+IDE2KSA8PCAxOworCisJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CisJd2hpbGUgKHBhZ2VzKSB7CisJCXBndCA9IGRldl9wcml2LT52bV92cmFtX3B0W3ZpcnQgPj4gMjldOworCQlwdGUgPSAodmlydCAmIDB4MWZmZTAwMDBVTEwpID4+IDE1OworCisJCWVuZCA9IHB0ZSArIHBhZ2VzOworCQlpZiAoZW5kID4gMTYzODQpCisJCQllbmQgPSAxNjM4NDsKKwkJcGFnZXMgLT0gKGVuZCAtIHB0ZSk7CisJCXZpcnQgICs9IChlbmQgLSBwdGUpIDw8IDE1OworCisJCXdoaWxlIChwdGUgPCBlbmQpCisJCQludl93bzMyKGRldiwgcGd0LCBwdGUrKywgMCk7CisJfQorCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7CisKKwludl93cjMyKGRldiwgMHgxMDBjODAsIDB4MDAwNTAwMDEpOworCWlmICghbnZfd2FpdCgweDEwMGM4MCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCkpIHsKKwkJTlZfRVJST1IoZGV2LCAidGltZW91dDogKDB4MTAwYzgwICYgMSkgPT0gMCAoMilcbiIpOworCQlOVl9FUlJPUihkZXYsICIweDEwMGM4MCA9IDB4JTA4eFxuIiwgbnZfcmQzMihkZXYsIDB4MTAwYzgwKSk7CisJCXJldHVybjsKKwl9CisKKwludl93cjMyKGRldiwgMHgxMDBjODAsIDB4MDAwMDAwMDEpOworCWlmICghbnZfd2FpdCgweDEwMGM4MCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCkpIHsKKwkJTlZfRVJST1IoZGV2LCAidGltZW91dDogKDB4MTAwYzgwICYgMSkgPT0gMCAoMilcbiIpOworCQlOVl9FUlJPUihkZXYsICIweDEwMGM4MCA9IDB4JTA4eFxuIiwgbnZfcmQzMihkZXYsIDB4MTAwYzgwKSk7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jCmluZGV4IDZjNjZhMzQuLmQ5OWRjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbm90aWZpZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMKQEAgLTM0LDE1ICszNCwyMCBAQAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfYm8gKm50ZnkgPSBOVUxMOworCXVpbnQzMl90IGZsYWdzOwogCWludCByZXQ7CiAKLQlyZXQgPSBub3V2ZWF1X2dlbV9uZXcoZGV2LCBOVUxMLCBQQUdFX1NJWkUsIDAsIG5vdXZlYXVfdnJhbV9ub3RpZnkgPwotCQkJICAgICAgVFRNX1BMX0ZMQUdfVlJBTSA6IFRUTV9QTF9GTEFHX1RULAorCWlmIChub3V2ZWF1X3ZyYW1fbm90aWZ5KQorCQlmbGFncyA9IFRUTV9QTF9GTEFHX1ZSQU07CisJZWxzZQorCQlmbGFncyA9IFRUTV9QTF9GTEFHX1RUOworCisJcmV0ID0gbm91dmVhdV9nZW1fbmV3KGRldiwgTlVMTCwgUEFHRV9TSVpFLCAwLCBmbGFncywKIAkJCSAgICAgIDAsIDB4MDAwMCwgZmFsc2UsIHRydWUsICZudGZ5KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gbm91dmVhdV9ib19waW4obnRmeSwgVFRNX1BMX0ZMQUdfVlJBTSk7CisJcmV0ID0gbm91dmVhdV9ib19waW4obnRmeSwgZmxhZ3MpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VycjsKIApAQCAtMTI4LDYgKzEzMyw4IEBACiAJCQl0YXJnZXQgPSBOVl9ETUFfVEFSR0VUX1BDSTsKIAkJfSBlbHNlIHsKIAkJCXRhcmdldCA9IE5WX0RNQV9UQVJHRVRfQUdQOworCQkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTApCisJCQkJb2Zmc2V0ICs9IGRldl9wcml2LT52bV9nYXJ0X2Jhc2U7CiAJCX0KIAl9IGVsc2UgewogCQlOVl9FUlJPUihkZXYsICJCYWQgRE1BIHRhcmdldCwgbWVtX3R5cGUgJWQhXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfb2JqZWN0LmMKaW5kZXggNmMyY2Y4MTcuLmU3YzEwMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9vYmplY3QuYwpAQCAtODg1LDExICs4ODUsMTIgQEAKIG5vdXZlYXVfZ3B1b2JqX3N3X25ldyhzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBpbnQgY2xhc3MsCiAJCSAgICAgIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKmdwdW9ial9yZXQpCiB7Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY2hhbi0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXY7CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpncHVvYmo7CiAKIAlpZiAoIWNoYW4gfHwgIWdwdW9ial9yZXQgfHwgKmdwdW9ial9yZXQgIT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CisJZGV2X3ByaXYgPSBjaGFuLT5kZXYtPmRldl9wcml2YXRlOwogCiAJZ3B1b2JqID0ga3phbGxvYyhzaXplb2YoKmdwdW9iaiksIEdGUF9LRVJORUwpOwogCWlmICghZ3B1b2JqKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcmVnLmgKaW5kZXggMjUxZjFiMy4uYWE5YjMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3JlZy5oCkBAIC05OSw2ICs5OSw3IEBACiAgKiB0aGUgY2FyZCB3aWxsIGhhbmcgZWFybHkgb24gaW4gdGhlIFggaW5pdCBwcm9jZXNzLgogICovCiAjICAgIGRlZmluZSBOVl9QTUNfRU5BQkxFX1VOSzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxPDwxMykKKyNkZWZpbmUgTlY0MF9QTUNfR1JBUEhfVU5JVFMJCQkJICAgMHgwMDAwMTU0MAogI2RlZmluZSBOVjQwX1BNQ19CQUNLTElHSFQJCQkJICAgMHgwMDAwMTVmMAogIwlkZWZpbmUgTlY0MF9QTUNfQkFDS0xJR0hUX01BU0sJCQkgICAweDAwMWYwMDAwCiAjZGVmaW5lIE5WNDBfUE1DXzE3MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE3MDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYwppbmRleCA0YzdmMWU0Li5lZDE1OTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jCkBAIC01NCwxMSArNTQsMTIgQEAKIG5vdXZlYXVfc2dkbWFfY2xlYXIoc3RydWN0IHR0bV9iYWNrZW5kICpiZSkKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9zZ2RtYV9iZSAqbnZiZSA9IChzdHJ1Y3Qgbm91dmVhdV9zZ2RtYV9iZSAqKWJlOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBudmJlLT5kZXY7Ci0KLQlOVl9ERUJVRyhudmJlLT5kZXYsICJcbiIpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CiAKIAlpZiAobnZiZSAmJiBudmJlLT5wYWdlcykgeworCQlkZXYgPSBudmJlLT5kZXY7CisJCU5WX0RFQlVHKGRldiwgIlxuIik7CisKIAkJaWYgKG52YmUtPmJvdW5kKQogCQkJYmUtPmZ1bmMtPnVuYmluZChiZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYwppbmRleCBmMmQwMTg3Li5hNDg1MWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCkBAIC0zMTAsNiArMzEwLDE0IEBACiBzdGF0aWMgdW5zaWduZWQgaW50CiBub3V2ZWF1X3ZnYV9zZXRfZGVjb2RlKHZvaWQgKnByaXYsIGJvb2wgc3RhdGUpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHByaXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDQwKQorCQludl93cjMyKGRldiwgMHg4ODA1NCwgc3RhdGUpOworCWVsc2UKKwkJbnZfd3IzMihkZXYsIDB4MTg1NCwgc3RhdGUpOworCiAJaWYgKHN0YXRlKQogCQlyZXR1cm4gVkdBX1JTUkNfTEVHQUNZX0lPIHwgVkdBX1JTUkNfTEVHQUNZX01FTSB8CiAJCSAgICAgICBWR0FfUlNSQ19OT1JNQUxfSU8gfCBWR0FfUlNSQ19OT1JNQUxfTUVNOwpAQCAtNDI3LDE1ICs0MzUsMTkgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dF90aW1lcjsKIAotCS8qIFBHUkFQSCAqLwotCXJldCA9IGVuZ2luZS0+Z3JhcGguaW5pdChkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2ZiOworCWlmIChub3V2ZWF1X25vYWNjZWwpCisJCWVuZ2luZS0+Z3JhcGguYWNjZWxfYmxvY2tlZCA9IHRydWU7CisJZWxzZSB7CisJCS8qIFBHUkFQSCAqLworCQlyZXQgPSBlbmdpbmUtPmdyYXBoLmluaXQoZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2ZiOwogCi0JLyogUEZJRk8gKi8KLQlyZXQgPSBlbmdpbmUtPmZpZm8uaW5pdChkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2dyYXBoOworCQkvKiBQRklGTyAqLworCQlyZXQgPSBlbmdpbmUtPmZpZm8uaW5pdChkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfZ3JhcGg7CisJfQogCiAJLyogdGhpcyBjYWxsIGlycV9wcmVpbnN0YWxsLCByZWdpc3RlciBpcnEgaGFuZGxlciBhbmQKIAkgKiBjYWxsIGlycV9wb3N0aW5zdGFsbApAQCAtNDc5LDkgKzQ5MSwxMSBAQAogb3V0X2lycToKIAlkcm1faXJxX3VuaW5zdGFsbChkZXYpOwogb3V0X2ZpZm86Ci0JZW5naW5lLT5maWZvLnRha2Vkb3duKGRldik7CisJaWYgKCFub3V2ZWF1X25vYWNjZWwpCisJCWVuZ2luZS0+Zmlmby50YWtlZG93bihkZXYpOwogb3V0X2dyYXBoOgotCWVuZ2luZS0+Z3JhcGgudGFrZWRvd24oZGV2KTsKKwlpZiAoIW5vdXZlYXVfbm9hY2NlbCkKKwkJZW5naW5lLT5ncmFwaC50YWtlZG93bihkZXYpOwogb3V0X2ZiOgogCWVuZ2luZS0+ZmIudGFrZWRvd24oZGV2KTsKIG91dF90aW1lcjoKQEAgLTUxOCw4ICs1MzIsMTAgQEAKIAkJCWRldl9wcml2LT5jaGFubmVsID0gTlVMTDsKIAkJfQogCi0JCWVuZ2luZS0+Zmlmby50YWtlZG93bihkZXYpOwotCQllbmdpbmUtPmdyYXBoLnRha2Vkb3duKGRldik7CisJCWlmICghbm91dmVhdV9ub2FjY2VsKSB7CisJCQllbmdpbmUtPmZpZm8udGFrZWRvd24oZGV2KTsKKwkJCWVuZ2luZS0+Z3JhcGgudGFrZWRvd24oZGV2KTsKKwkJfQogCQllbmdpbmUtPmZiLnRha2Vkb3duKGRldik7CiAJCWVuZ2luZS0+dGltZXIudGFrZWRvd24oZGV2KTsKIAkJZW5naW5lLT5tYy50YWtlZG93bihkZXYpOwpAQCAtODE3LDYgKzgzMywxNSBAQAogCWNhc2UgTk9VVkVBVV9HRVRQQVJBTV9WTV9WUkFNX0JBU0U6CiAJCWdldHBhcmFtLT52YWx1ZSA9IGRldl9wcml2LT52bV92cmFtX2Jhc2U7CiAJCWJyZWFrOworCWNhc2UgTk9VVkVBVV9HRVRQQVJBTV9HUkFQSF9VTklUUzoKKwkJLyogTlY0MCBhbmQgTlY1MCB2ZXJzaW9ucyBhcmUgcXVpdGUgZGlmZmVyZW50LCBidXQgcmVnaXN0ZXIKKwkJICogYWRkcmVzcyBpcyB0aGUgc2FtZS4gVXNlciBpcyBzdXBwb3NlZCB0byBrbm93IHRoZSBjYXJkCisJCSAqIGZhbWlseSBhbnl3YXkuLi4gKi8KKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4NDApIHsKKwkJCWdldHBhcmFtLT52YWx1ZSA9IG52X3JkMzIoZGV2LCBOVjQwX1BNQ19HUkFQSF9VTklUUyk7CisJCQlicmVhazsKKwkJfQorCQkvKiBGQUxMVEhSVSAqLwogCWRlZmF1bHQ6CiAJCU5WX0VSUk9SKGRldiwgInVua25vd24gcGFyYW1ldGVyICVsbGRcbiIsIGdldHBhcmFtLT5wYXJhbSk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGFjLmMKaW5kZXggZDBlMDM4ZC4uMWQ3M2IxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RhYy5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAkJCQkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7Ci0JdWludDhfdCBzYXZlZF9zZXExLCBzYXZlZF9waSwgc2F2ZWRfcnBjMTsKKwl1aW50OF90IHNhdmVkX3NlcTEsIHNhdmVkX3BpLCBzYXZlZF9ycGMxLCBzYXZlZF9jcl9tb2RlOwogCXVpbnQ4X3Qgc2F2ZWRfcGFsZXR0ZTBbM10sIHNhdmVkX3BhbGV0dGVfbWFzazsKIAl1aW50MzJfdCBzYXZlZF9ydGVzdF9jdHJsLCBzYXZlZF9yZ2VuX2N0cmw7CiAJaW50IGk7CkBAIC0xMzUsNiArMTM1LDkgQEAKIAkJLyogb25seSBpbXBsZW1lbnRlZCBmb3IgaGVhZCBBIGZvciBub3cgKi8KIAkJTlZTZXRPd25lcihkZXYsIDApOwogCisJc2F2ZWRfY3JfbW9kZSA9IE5WUmVhZFZnYUNydGMoZGV2LCAwLCBOVl9DSU9fQ1JfTU9ERV9JTkRFWCk7CisJTlZXcml0ZVZnYUNydGMoZGV2LCAwLCBOVl9DSU9fQ1JfTU9ERV9JTkRFWCwgc2F2ZWRfY3JfbW9kZSB8IDB4ODApOworCiAJc2F2ZWRfc2VxMSA9IE5WUmVhZFZnYVNlcShkZXYsIDAsIE5WX1ZJT19TUl9DTE9DS19JTkRFWCk7CiAJTlZXcml0ZVZnYVNlcShkZXYsIDAsIE5WX1ZJT19TUl9DTE9DS19JTkRFWCwgc2F2ZWRfc2VxMSAmIH4weDIwKTsKIApAQCAtMjAzLDYgKzIwNiw3IEBACiAJTlZXcml0ZVZnYUNydGMoZGV2LCAwLCBOVl9DSU9fQ1JFX1BJWEVMX0lOREVYLCBzYXZlZF9waSk7CiAJTlZXcml0ZVZnYUNydGMoZGV2LCAwLCBOVl9DSU9fQ1JFX1JQQzFfSU5ERVgsIHNhdmVkX3JwYzEpOwogCU5WV3JpdGVWZ2FTZXEoZGV2LCAwLCBOVl9WSU9fU1JfQ0xPQ0tfSU5ERVgsIHNhdmVkX3NlcTEpOworCU5WV3JpdGVWZ2FDcnRjKGRldiwgMCwgTlZfQ0lPX0NSX01PREVfSU5ERVgsIHNhdmVkX2NyX21vZGUpOwogCiAJaWYgKGJsdWUgPT0gMHgxOCkgewogCQlOVl9JTkZPKGRldiwgIkxvYWQgZGV0ZWN0ZWQgb24gaGVhZCBBXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZmJjb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZmJjb24uYwppbmRleCBkOTEwODczLi5mZDAxY2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2ZiY29uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9mYmNvbi5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAibm91dmVhdV9kbWEuaCIKICNpbmNsdWRlICJub3V2ZWF1X2ZiY29uLmgiCiAKLXN0YXRpYyB2b2lkCit2b2lkCiBudjA0X2ZiY29uX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKnJlZ2lvbikKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9mYmNvbl9wYXIgKnBhciA9IGluZm8tPnBhcjsKQEAgLTU0LDcgKzU0LDcgQEAKIAlGSVJFX1JJTkcoY2hhbik7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBudjA0X2ZiY29uX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCiB7CiAJc3RydWN0IG5vdXZlYXVfZmJjb25fcGFyICpwYXIgPSBpbmZvLT5wYXI7CkBAIC04OCw3ICs4OCw3IEBACiAJRklSRV9SSU5HKGNoYW4pOwogfQogCi1zdGF0aWMgdm9pZAordm9pZAogbnYwNF9mYmNvbl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCiB7CiAJc3RydWN0IG5vdXZlYXVfZmJjb25fcGFyICpwYXIgPSBpbmZvLT5wYXI7CkBAIC0zMDcsOSArMzA3LDYgQEAKIAogCUZJUkVfUklORyhjaGFuKTsKIAotCWluZm8tPmZib3BzLT5mYl9maWxscmVjdCA9IG52MDRfZmJjb25fZmlsbHJlY3Q7Ci0JaW5mby0+ZmJvcHMtPmZiX2NvcHlhcmVhID0gbnYwNF9mYmNvbl9jb3B5YXJlYTsKLQlpbmZvLT5mYm9wcy0+ZmJfaW1hZ2VibGl0ID0gbnYwNF9mYmNvbl9pbWFnZWJsaXQ7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTdfdHYuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTdfdHYuYwppbmRleCA1OGI5MTdjLi4yMWFjNmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjE3X3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxN190di5jCkBAIC01NzksNiArNTc5LDggQEAKIAkJCQlub3V2ZWF1X2VuY29kZXIoZW5jb2RlciktPnJlc3RvcmUub3V0cHV0KTsKIAogCW52MTdfdHZfc3RhdGVfbG9hZChkZXYsICZ0b190dl9lbmMoZW5jb2RlciktPnNhdmVkX3N0YXRlKTsKKworCW5vdXZlYXVfZW5jb2RlcihlbmNvZGVyKS0+bGFzdF9kcG1zID0gTlZfRFBNU19DTEVBUkVEOwogfQogCiBzdGF0aWMgaW50IG52MTdfdHZfY3JlYXRlX3Jlc291cmNlcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jCmluZGV4IDQwYjczNjAuLmQxYTY1MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jCkBAIC0yOTgsMTQgKzI5OCwxNyBAQAogc3RhdGljIHZvaWQKIG52NTBfY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGMgPSBub3V2ZWF1X2NydGMoY3J0Yyk7Ci0KLQlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGM7CiAKIAlpZiAoIWNydGMpCiAJCXJldHVybjsKIAorCWRldiA9IGNydGMtPmRldjsKKwludl9jcnRjID0gbm91dmVhdV9jcnRjKGNydGMpOworCisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CisKIAlkcm1fY3J0Y19jbGVhbnVwKCZudl9jcnRjLT5iYXNlKTsKIAogCW52NTBfY3Vyc29yX2ZpbmkobnZfY3J0Yyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZiY29uLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZiY29uLmMKaW5kZXggZTRmMjc5ZS4uMGY1N2NkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9mYmNvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmJjb24uYwpAQCAtMyw3ICszLDcgQEAKICNpbmNsdWRlICJub3V2ZWF1X2RtYS5oIgogI2luY2x1ZGUgIm5vdXZlYXVfZmJjb24uaCIKIAotc3RhdGljIHZvaWQKK3ZvaWQKIG52NTBfZmJjb25fZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9mYmNvbl9wYXIgKnBhciA9IGluZm8tPnBhcjsKQEAgLTQ2LDcgKzQ2LDcgQEAKIAlGSVJFX1JJTkcoY2hhbik7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBudjUwX2ZiY29uX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKnJlZ2lvbikKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9mYmNvbl9wYXIgKnBhciA9IGluZm8tPnBhcjsKQEAgLTgxLDcgKzgxLDcgQEAKIAlGSVJFX1JJTkcoY2hhbik7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBudjUwX2ZiY29uX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9mYmNvbl9wYXIgKnBhciA9IGluZm8tPnBhcjsKQEAgLTI2Miw5ICsyNjIsNiBAQAogCU9VVF9SSU5HKGNoYW4sIGluZm8tPmZpeC5zbWVtX3N0YXJ0IC0gZGV2X3ByaXYtPmZiX3BoeXMgKwogCQkJIGRldl9wcml2LT52bV92cmFtX2Jhc2UpOwogCi0JaW5mby0+ZmJvcHMtPmZiX2ZpbGxyZWN0ID0gbnY1MF9mYmNvbl9maWxscmVjdDsKLQlpbmZvLT5mYm9wcy0+ZmJfY29weWFyZWEgPSBudjUwX2ZiY29uX2NvcHlhcmVhOwotCWluZm8tPmZib3BzLT5mYl9pbWFnZWJsaXQgPSBudjUwX2ZiY29uX2ltYWdlYmxpdDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9maWZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYwppbmRleCAzMmIyNDRiLi4yMDRhNzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYwpAQCAtMzE3LDE3ICszMTcsMjAgQEAKIG52NTBfZmlmb19kZXN0cm95X2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OworCXN0cnVjdCBub3V2ZWF1X2dwdW9ial9yZWYgKnJhbWZjID0gY2hhbi0+cmFtZmM7CiAKIAlOVl9ERUJVRyhkZXYsICJjaCVkXG4iLCBjaGFuLT5pZCk7CiAKLQlub3V2ZWF1X2dwdW9ial9yZWZfZGVsKGRldiwgJmNoYW4tPnJhbWZjKTsKLQlub3V2ZWF1X2dwdW9ial9yZWZfZGVsKGRldiwgJmNoYW4tPmNhY2hlKTsKLQorCS8qIFRoaXMgd2lsbCBlbnN1cmUgdGhlIGNoYW5uZWwgaXMgc2VlbiBhcyBkaXNhYmxlZC4gKi8KKwljaGFuLT5yYW1mYyA9IE5VTEw7CiAJbnY1MF9maWZvX2NoYW5uZWxfZGlzYWJsZShkZXYsIGNoYW4tPmlkLCBmYWxzZSk7CiAKIAkvKiBEdW1teSBjaGFubmVsLCBhbHNvIHVzZWQgb24gY2ggMTI3ICovCiAJaWYgKGNoYW4tPmlkID09IDApCiAJCW52NTBfZmlmb19jaGFubmVsX2Rpc2FibGUoZGV2LCAxMjcsIGZhbHNlKTsKKworCW5vdXZlYXVfZ3B1b2JqX3JlZl9kZWwoZGV2LCAmcmFtZmMpOworCW5vdXZlYXVfZ3B1b2JqX3JlZl9kZWwoZGV2LCAmY2hhbi0+Y2FjaGUpOwogfQogCiBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwppbmRleCAyMDMxOWU1Li42ZDUwNDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCkBAIC0xNjUsNiArMTY1LDEyIEBACiAJdWludDMyX3QgaW5zdDsKIAlpbnQgaTsKIAorCS8qIEJlIHN1cmUgd2UncmUgbm90IGluIHRoZSBtaWRkbGUgb2YgYSBjb250ZXh0IHN3aXRjaCBvciBiYWQgdGhpbmdzCisJICogd2lsbCBoYXBwZW4sIHN1Y2ggYXMgdW5sb2FkaW5nIHRoZSB3cm9uZyBwZ3JhcGggY29udGV4dC4KKwkgKi8KKwlpZiAoIW52X3dhaXQoMHg0MDAzMDAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKQorCQlOVl9FUlJPUihkZXYsICJDdHhwcm9nIGlzIHN0aWxsIHJ1bm5pbmdcbiIpOworCiAJaW5zdCA9IG52X3JkMzIoZGV2LCBOVjUwX1BHUkFQSF9DVFhDVExfQ1VSKTsKIAlpZiAoIShpbnN0ICYgTlY1MF9QR1JBUEhfQ1RYQ1RMX0NVUl9MT0FERUQpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTI3NSw3ICsyODEsNyBAQAogaW50CiBudjUwX2dyYXBoX3VubG9hZF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JdWludDMyX3QgaW5zdCwgZmlmbyA9IG52X3JkMzIoZGV2LCAweDQwMDUwMCk7CisJdWludDMyX3QgaW5zdDsKIAogCWluc3QgID0gbnZfcmQzMihkZXYsIE5WNTBfUEdSQVBIX0NUWENUTF9DVVIpOwogCWlmICghKGluc3QgJiBOVjUwX1BHUkFQSF9DVFhDVExfQ1VSX0xPQURFRCkpCkBAIC0yODMsMTIgKzI4OSwxMCBAQAogCWluc3QgJj0gTlY1MF9QR1JBUEhfQ1RYQ1RMX0NVUl9JTlNUQU5DRTsKIAogCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOwotCW52X3dyMzIoZGV2LCAweDQwMDUwMCwgZmlmbyAmIH4xKTsKIAludl93cjMyKGRldiwgMHg0MDA3ODQsIGluc3QpOwogCW52X3dyMzIoZGV2LCAweDQwMDgyNCwgbnZfcmQzMihkZXYsIDB4NDAwODI0KSB8IDB4MjApOwogCW52X3dyMzIoZGV2LCAweDQwMDMwNCwgbnZfcmQzMihkZXYsIDB4NDAwMzA0KSB8IDB4MDEpOwogCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOwotCW52X3dyMzIoZGV2LCAweDQwMDUwMCwgZmlmbyk7CiAKIAludl93cjMyKGRldiwgTlY1MF9QR1JBUEhfQ1RYQ1RMX0NVUiwgaW5zdCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2luc3RtZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jCmluZGV4IDk0NDAwZjcuLmYwZGM0ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jCkBAIC03Niw2ICs3NiwxMSBAQAogCWZvciAoaSA9IDB4MTcwMDsgaSA8PSAweDE3MTA7IGkgKz0gNCkKIAkJcHJpdi0+c2F2ZTE3MDBbKGktMHgxNzAwKS80XSA9IG52X3JkMzIoZGV2LCBpKTsKIAorCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweGFhIHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4YWMpCisJCWRldl9wcml2LT52cmFtX3N5c19iYXNlID0gbnZfcmQzMihkZXYsIDB4MTAwZTEwKSA8PCAxMjsKKwllbHNlCisJCWRldl9wcml2LT52cmFtX3N5c19iYXNlID0gMDsKKwogCS8qIFJlc2VydmUgdGhlIGxhc3QgTWlCIG9mIFZSQU0sIHdlIHNob3VsZCBwcm9iYWJseSB0cnkgdG8gYXZvaWQKIAkgKiBzZXR0aW5nIHVwIHRoZSBiZWxvdyB0YWJsZXMgb3ZlciB0aGUgdG9wIG9mIHRoZSBWQklPUyBpbWFnZSBhdAogCSAqIHNvbWUgcG9pbnQuCkBAIC0xNzIsMTYgKzE3NywyOCBAQAogCSAqIFdlIG1hcCB0aGUgZW50aXJlIGZha2UgY2hhbm5lbCBpbnRvIHRoZSBzdGFydCBvZiB0aGUgUFJBTUlOIEJBUgogCSAqLwogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19yZWYoZGV2LCBjaGFuLCBOVUxMLCAwLCBwdF9zaXplLCAweDEwMDAsCi0JCQkJCQkJMCwgJnByaXYtPnByYW1pbl9wdCk7CisJCQkJICAgICAwLCAmcHJpdi0+cHJhbWluX3B0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JZm9yIChpID0gMCwgdiA9IGNfb2Zmc2V0OyBpIDwgcHRfc2l6ZTsgaSArPSA4LCB2ICs9IDB4MTAwMCkgewotCQlpZiAodiA8IChjX29mZnNldCArIGNfc2l6ZSkpCi0JCQlCQVIwX1dJMzIocHJpdi0+cHJhbWluX3B0LT5ncHVvYmosIGkgKyAwLCB2IHwgMSk7Ci0JCWVsc2UKLQkJCUJBUjBfV0kzMihwcml2LT5wcmFtaW5fcHQtPmdwdW9iaiwgaSArIDAsIDB4MDAwMDAwMDkpOworCXYgPSBjX29mZnNldCB8IDE7CisJaWYgKGRldl9wcml2LT52cmFtX3N5c19iYXNlKSB7CisJCXYgKz0gZGV2X3ByaXYtPnZyYW1fc3lzX2Jhc2U7CisJCXYgfD0gMHgzMDsKKwl9CisKKwlpID0gMDsKKwl3aGlsZSAodiA8IGRldl9wcml2LT52cmFtX3N5c19iYXNlICsgY19vZmZzZXQgKyBjX3NpemUpIHsKKwkJQkFSMF9XSTMyKHByaXYtPnByYW1pbl9wdC0+Z3B1b2JqLCBpICsgMCwgdik7CiAJCUJBUjBfV0kzMihwcml2LT5wcmFtaW5fcHQtPmdwdW9iaiwgaSArIDQsIDB4MDAwMDAwMDApOworCQl2ICs9IDB4MTAwMDsKKwkJaSArPSA4OworCX0KKworCXdoaWxlIChpIDwgcHRfc2l6ZSkgeworCQlCQVIwX1dJMzIocHJpdi0+cHJhbWluX3B0LT5ncHVvYmosIGkgKyAwLCAweDAwMDAwMDAwKTsKKwkJQkFSMF9XSTMyKHByaXYtPnByYW1pbl9wdC0+Z3B1b2JqLCBpICsgNCwgMHgwMDAwMDAwMCk7CisJCWkgKz0gODsKIAl9CiAKIAlCQVIwX1dJMzIoY2hhbi0+dm1fcGQsIDB4MDAsIHByaXYtPnByYW1pbl9wdC0+aW5zdGFuY2UgfCAweDYzKTsKQEAgLTQxNiw3ICs0MzMsOSBAQAogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG52NTBfaW5zdG1lbV9wcml2ICpwcml2ID0gZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByaXY7Ci0JdWludDMyX3QgcHRlLCBwdGVfZW5kLCB2cmFtOworCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcHJhbWluX3B0ID0gcHJpdi0+cHJhbWluX3B0LT5ncHVvYmo7CisJdWludDMyX3QgcHRlLCBwdGVfZW5kOworCXVpbnQ2NF90IHZyYW07CiAKIAlpZiAoIWdwdW9iai0+aW1fYmFja2luZyB8fCAhZ3B1b2JqLT5pbV9wcmFtaW4gfHwgZ3B1b2JqLT5pbV9ib3VuZCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MjQsMjAgKzQ0MywyNCBAQAogCU5WX0RFQlVHKGRldiwgInN0PTB4JTBsbHggc3o9MHglMGxseFxuIiwKIAkJIGdwdW9iai0+aW1fcHJhbWluLT5zdGFydCwgZ3B1b2JqLT5pbV9wcmFtaW4tPnNpemUpOwogCi0JcHRlICAgICA9IChncHVvYmotPmltX3ByYW1pbi0+c3RhcnQgPj4gMTIpIDw8IDM7Ci0JcHRlX2VuZCA9ICgoZ3B1b2JqLT5pbV9wcmFtaW4tPnNpemUgPj4gMTIpIDw8IDMpICsgcHRlOworCXB0ZSAgICAgPSAoZ3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0ID4+IDEyKSA8PCAxOworCXB0ZV9lbmQgPSAoKGdwdW9iai0+aW1fcHJhbWluLT5zaXplID4+IDEyKSA8PCAxKSArIHB0ZTsKIAl2cmFtICAgID0gZ3B1b2JqLT5pbV9iYWNraW5nX3N0YXJ0OwogCiAJTlZfREVCVUcoZGV2LCAicHJhbWluPTB4JWxseCwgcHRlPSVkLCBwdGVfZW5kPSVkXG4iLAogCQkgZ3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0LCBwdGUsIHB0ZV9lbmQpOwogCU5WX0RFQlVHKGRldiwgImZpcnN0IHZyYW0gcGFnZTogMHglMDh4XG4iLCBncHVvYmotPmltX2JhY2tpbmdfc3RhcnQpOwogCisJdnJhbSB8PSAxOworCWlmIChkZXZfcHJpdi0+dnJhbV9zeXNfYmFzZSkgeworCQl2cmFtICs9IGRldl9wcml2LT52cmFtX3N5c19iYXNlOworCQl2cmFtIHw9IDB4MzA7CisJfQorCiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CiAJd2hpbGUgKHB0ZSA8IHB0ZV9lbmQpIHsKLQkJbnZfd28zMihkZXYsIHByaXYtPnByYW1pbl9wdC0+Z3B1b2JqLCAocHRlICsgMCkvNCwgdnJhbSB8IDEpOwotCQludl93bzMyKGRldiwgcHJpdi0+cHJhbWluX3B0LT5ncHVvYmosIChwdGUgKyA0KS80LCAweDAwMDAwMDAwKTsKLQotCQlwdGUgKz0gODsKKwkJbnZfd28zMihkZXYsIHByYW1pbl9wdCwgcHRlKyssIGxvd2VyXzMyX2JpdHModnJhbSkpOworCQludl93bzMyKGRldiwgcHJhbWluX3B0LCBwdGUrKywgdXBwZXJfMzJfYml0cyh2cmFtKSk7CiAJCXZyYW0gKz0gTlY1MF9JTlNUTUVNX1BBR0VfU0laRTsKIAl9CiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MoZGV2KTsKQEAgLTQ3MCwxNCArNDkzLDEzIEBACiAJaWYgKGdwdW9iai0+aW1fYm91bmQgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwdGUgICAgID0gKGdwdW9iai0+aW1fcHJhbWluLT5zdGFydCA+PiAxMikgPDwgMzsKLQlwdGVfZW5kID0gKChncHVvYmotPmltX3ByYW1pbi0+c2l6ZSA+PiAxMikgPDwgMykgKyBwdGU7CisJcHRlICAgICA9IChncHVvYmotPmltX3ByYW1pbi0+c3RhcnQgPj4gMTIpIDw8IDE7CisJcHRlX2VuZCA9ICgoZ3B1b2JqLT5pbV9wcmFtaW4tPnNpemUgPj4gMTIpIDw8IDEpICsgcHRlOwogCiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CiAJd2hpbGUgKHB0ZSA8IHB0ZV9lbmQpIHsKLQkJbnZfd28zMihkZXYsIHByaXYtPnByYW1pbl9wdC0+Z3B1b2JqLCAocHRlICsgMCkvNCwgMHgwMDAwMDAwOSk7Ci0JCW52X3dvMzIoZGV2LCBwcml2LT5wcmFtaW5fcHQtPmdwdW9iaiwgKHB0ZSArIDQpLzQsIDB4MDAwMDAwMDApOwotCQlwdGUgKz0gODsKKwkJbnZfd28zMihkZXYsIHByaXYtPnByYW1pbl9wdC0+Z3B1b2JqLCBwdGUrKywgMHgwMDAwMDAwMCk7CisJCW52X3dvMzIoZGV2LCBwcml2LT5wcmFtaW5fcHQtPmdwdW9iaiwgcHRlKyssIDB4MDAwMDAwMDApOwogCX0KIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3Nvci5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9zb3IuYwppbmRleCBlY2YxOTM2Li5jMmZmZjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3Nvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfc29yLmMKQEAgLTEwMSw2ICsxMDEsNyBAQAogCQlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudmVuYyA9IG5vdXZlYXVfZW5jb2RlcihlbmMpOwogCiAJCWlmIChudmVuYyA9PSBudl9lbmNvZGVyIHx8CisJCSAgICBudmVuYy0+ZGlzY29ubmVjdCAhPSBudjUwX3Nvcl9kaXNjb25uZWN0IHx8CiAJCSAgICBudmVuYy0+ZGNiLT5vciAhPSBudl9lbmNvZGVyLT5kY2ItPm9yKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vS2NvbmZpZwppbmRleCA1OTgyMzIxLi4xYzAyZDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9LY29uZmlnCkBAIC0xLDEwICsxLDE0IEBACiBjb25maWcgRFJNX1JBREVPTl9LTVMKLQlib29sICJFbmFibGUgbW9kZXNldHRpbmcgb24gcmFkZW9uIGJ5IGRlZmF1bHQiCisJYm9vbCAiRW5hYmxlIG1vZGVzZXR0aW5nIG9uIHJhZGVvbiBieSBkZWZhdWx0IC0gTkVXIERSSVZFUiIKIAlkZXBlbmRzIG9uIERSTV9SQURFT04KIAloZWxwCi0JICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQga2VybmVsIG1vZGVzZXR0aW5nIGVuYWJsZWQgYnkgZGVmYXVsdCwKLQkgIGFuZCB5b3UgaGF2ZSBhIG5ldyBlbm91Z2ggdXNlcnNwYWNlIHRvIHN1cHBvcnQgdGhpcy4gUnVubmluZyBvbGQKLQkgIHVzZXJzcGFjZXMgd2l0aCB0aGlzIGVuYWJsZWQgd2lsbCBjYXVzZSBwYWluLgorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IGtlcm5lbCBtb2Rlc2V0dGluZyBlbmFibGVkIGJ5IGRlZmF1bHQuCisKKwkgIFRoaXMgaXMgYSBjb21wbGV0ZWx5IG5ldyBkcml2ZXIuIEl0J3Mgb25seSBwYXJ0IG9mIHRoZSBleGlzdGluZyBkcm0KKwkgIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIEl0IHJlcXVpcmVzIGFuIGVudGlyZWx5IGRpZmZlcmVudCBncmFwaGljcworCSAgc3RhY2sgYWJvdmUgaXQgYW5kIHdvcmtzIHZlcnkgZGlmZmVyZW50bHkgZnJvbSB0aGUgb2xkIGRybSBzdGFjay4KKwkgIGkuZS4gZG9uJ3QgZW5hYmxlIHRoaXMgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBpdCBtYXkKKwkgIGNhdXNlIGlzc3VlcyBvciBidWdzIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyB1c2Vyc3BhY2UgZHJpdmVyIHN0YWNrLgogCiAJICBXaGVuIGtlcm5lbCBtb2Rlc2V0dGluZyBpcyBlbmFibGVkIHRoZSBJT0NUTCBvZiByYWRlb24vZHJtCiAJICBkcml2ZXIgYXJlIGNvbnNpZGVyZWQgYXMgaW52YWxpZCBhbmQgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCmluZGV4IGUzYjQ0NTYuLjdmMTUyZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2RlZmluZSBBVE9NX0RFQlVHCiAKQEAgLTIxMiw3ICsyMTMsOSBAQAogCWNhc2UgQVRPTV9BUkdfUFM6CiAJCWlkeCA9IFU4KCpwdHIpOwogCQkoKnB0cikrKzsKLQkJdmFsID0gbGUzMl90b19jcHUoY3R4LT5wc1tpZHhdKTsKKwkJLyogZ2V0X3VuYWxpZ25lZF9sZTMyIGF2b2lkcyB1bmFsaWduZWQgYWNjZXNzZXMgZnJvbSBhdG9tYmlvcworCQkgKiB0YWJsZXMsIG5vdGljZWQgb24gYSBERUMgQWxwaGEuICovCisJCXZhbCA9IGdldF91bmFsaWduZWRfbGUzMigodTMyICopJmN0eC0+cHNbaWR4XSk7CiAJCWlmIChwcmludCkKIAkJCURFQlVHKCJQU1sweCUwMlgsMHglMDRYXSIsIGlkeCwgdmFsKTsKIAkJYnJlYWs7CkBAIC02NDAsNyArNjQzLDcgQEAKIAl1aW50OF90IGNvdW50ID0gVTgoKCpwdHIpKyspOwogCVNERUJVRygiICAgY291bnQ6ICVkXG4iLCBjb3VudCk7CiAJaWYgKGFyZyA9PSBBVE9NX1VOSVRfTUlDUk9TRUMpCi0JCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKHVzZWNzX3RvX2ppZmZpZXMoY291bnQpKTsKKwkJdWRlbGF5KGNvdW50KTsKIAllbHNlCiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoY291bnQpKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwppbmRleCAzZWIwY2E1Li45OTkxNWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCkBAIC0zMzIsMTEgKzMzMiwxMyBAQAogCVBST0NFU1NfQVVYX0NIQU5ORUxfVFJBTlNBQ1RJT05fUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFByb2Nlc3NBdXhDaGFubmVsVHJhbnNhY3Rpb24pOwogCXVuc2lnbmVkIGNoYXIgKmJhc2U7CisJaW50IHJldHJ5X2NvdW50ID0gMDsKIAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAogCWJhc2UgPSAodW5zaWduZWQgY2hhciAqKXJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQtPnNjcmF0Y2g7CiAKK3JldHJ5OgogCW1lbWNweShiYXNlLCByZXFfYnl0ZXMsIG51bV9ieXRlcyk7CiAKIAlhcmdzLmxwQXV4UmVxdWVzdCA9IDA7CkBAIC0zNDcsMTAgKzM0OSwxMiBAQAogCiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiAKLQlpZiAoYXJncy51Y1JlcGx5U3RhdHVzKSB7Ci0JCURSTV9ERUJVRygiZmFpbGVkIHRvIGdldCBhdXhjaCAlMDJ4JTAyeCAlMDJ4ICUwMnggMHglMDJ4ICUwMnhcbiIsCisJaWYgKGFyZ3MudWNSZXBseVN0YXR1cyAmJiAhYXJncy51Y0RhdGFPdXRMZW4pIHsKKwkJaWYgKGFyZ3MudWNSZXBseVN0YXR1cyA9PSAweDIwICYmIHJldHJ5X2NvdW50KysgPCAxMCkKKwkJCWdvdG8gcmV0cnk7CisJCURSTV9ERUJVRygiZmFpbGVkIHRvIGdldCBhdXhjaCAlMDJ4JTAyeCAlMDJ4ICUwMnggMHglMDJ4ICUwMnggYWZ0ZXIgJWQgcmV0cmllc1xuIiwKIAkJCSAgcmVxX2J5dGVzWzFdLCByZXFfYnl0ZXNbMF0sIHJlcV9ieXRlc1syXSwgcmVxX2J5dGVzWzNdLAotCQkJICBjaGFuLT5yZWMuaTJjX2lkLCBhcmdzLnVjUmVwbHlTdGF0dXMpOworCQkJICBjaGFuLT5yZWMuaTJjX2lkLCBhcmdzLnVjUmVwbHlTdGF0dXMsIHJldHJ5X2NvdW50KTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtNDY4LDcgKzQ3Miw3IEBACiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3I7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZ19jb25uZWN0b3I7CiAKLQlpZiAoKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KSB8fAorCWlmICgoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpICYmCiAJICAgIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApKQogCQlyZXR1cm47CiAKQEAgLTU4Myw3ICs1ODcsNyBAQAogCXU4IHRyYWluX3NldFs0XTsKIAlpbnQgaTsKIAotCWlmICgoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpIHx8CisJaWYgKChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkgJiYKIAkgICAgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkpCiAJCXJldHVybjsKIApAQCAtNTk2LDIxICs2MDAsMTQgQEAKIAkJcmV0dXJuOwogCWRpZ19jb25uZWN0b3IgPSByYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdjsKIAotCWlmIChBU0lDX0lTX0RDRTMyKHJkZXYpKSB7Ci0JCWlmIChkaWctPmRpZ19ibG9jaykKLQkJCWVuY19pZCB8PSBBVE9NX0RQX0NPTkZJR19ESUcyX0VOQ09ERVI7Ci0JCWVsc2UKLQkJCWVuY19pZCB8PSBBVE9NX0RQX0NPTkZJR19ESUcxX0VOQ09ERVI7Ci0JCWlmIChkaWdfY29ubmVjdG9yLT5saW5rYikKLQkJCWVuY19pZCB8PSBBVE9NX0RQX0NPTkZJR19MSU5LX0I7Ci0JCWVsc2UKLQkJCWVuY19pZCB8PSBBVE9NX0RQX0NPTkZJR19MSU5LX0E7Ci0JfSBlbHNlIHsKLQkJaWYgKGRpZ19jb25uZWN0b3ItPmxpbmtiKQotCQkJZW5jX2lkIHw9IEFUT01fRFBfQ09ORklHX0RJRzJfRU5DT0RFUiB8IEFUT01fRFBfQ09ORklHX0xJTktfQjsKLQkJZWxzZQotCQkJZW5jX2lkIHw9IEFUT01fRFBfQ09ORklHX0RJRzFfRU5DT0RFUiB8IEFUT01fRFBfQ09ORklHX0xJTktfQTsKLQl9CisJaWYgKGRpZy0+ZGlnX2VuY29kZXIpCisJCWVuY19pZCB8PSBBVE9NX0RQX0NPTkZJR19ESUcyX0VOQ09ERVI7CisJZWxzZQorCQllbmNfaWQgfD0gQVRPTV9EUF9DT05GSUdfRElHMV9FTkNPREVSOworCWlmIChkaWdfY29ubmVjdG9yLT5saW5rYikKKwkJZW5jX2lkIHw9IEFUT01fRFBfQ09ORklHX0xJTktfQjsKKwllbHNlCisJCWVuY19pZCB8PSBBVE9NX0RQX0NPTkZJR19MSU5LX0E7CiAKIAltZW1zZXQobGlua19jb25maWd1cmF0aW9uLCAwLCBEUF9MSU5LX0NPTkZJR1VSQVRJT05fU0laRSk7CiAJaWYgKGRpZ19jb25uZWN0b3ItPmRwX2Nsb2NrID09IDI3MDAwMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKaW5kZXggMTFjOWEzZi4uYzBkNDY1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKQEAgLTM1NCwxMSArMzU0LDE3IEBACiAJCXJldHVybiBSUkVHMzIoUkFERU9OX0NSVEMyX0NSTlRfRlJBTUUpOwogfQogCisvKiBXaG8gZXZlciBjYWxsIHJhZGVvbl9mZW5jZV9lbWl0IHNob3VsZCBjYWxsIHJpbmdfbG9jayBhbmQgYXNrCisgKiBmb3IgZW5vdWdoIHNwYWNlICh0b2RheSBjYWxsZXIgYXJlIGliIHNjaGVkdWxlIGFuZCBidWZmZXIgbW92ZSkgKi8KIHZvaWQgcjEwMF9mZW5jZV9yaW5nX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewotCS8qIFdobyBldmVyIGNhbGwgcmFkZW9uX2ZlbmNlX2VtaXQgc2hvdWxkIGNhbGwgcmluZ19sb2NrIGFuZCBhc2sKLQkgKiBmb3IgZW5vdWdoIHNwYWNlICh0b2RheSBjYWxsZXIgYXJlIGliIHNjaGVkdWxlIGFuZCBidWZmZXIgbW92ZSkgKi8KKwkvKiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGNhY2hlcyBhcmUgZmx1c2hlZCBiZWZvcmUKKwkgKiBDUFUgbWlnaHQgcmVhZCBzb21ldGhpbmcgZnJvbSBWUkFNLiAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUkFERU9OX1JCM0RfRFNUQ0FDSEVfQ1RMU1RBVCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFJBREVPTl9SQjNEX0RDX0ZMVVNIX0FMTCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChSQURFT05fUkIzRF9aQ0FDSEVfQ1RMU1RBVCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFJBREVPTl9SQjNEX1pDX0ZMVVNIX0FMTCk7CiAJLyogV2FpdCB1bnRpbCBJRExFICYgQ0xFQU4gKi8KIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKDB4MTcyMCwgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICgxIDw8IDE2KSB8ICgxIDw8IDE3KSk7CkBAIC0zMzY5LDcgKzMzNzUsNiBAQAogCiB2b2lkIHIxMDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyMTAwX3N1c3BlbmQocmRldik7CiAJcjEwMF9jcF9maW5pKHJkZXYpOwogCXIxMDBfd2JfZmluaShyZGV2KTsKIAlyMTAwX2liX2ZpbmkocmRldik7CkBAIC0zNDgxLDEzICszNDg2LDEyIEBACiAJaWYgKHIpIHsKIAkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLwogCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKLQkJcjEwMF9zdXNwZW5kKHJkZXYpOwogCQlyMTAwX2NwX2ZpbmkocmRldik7CiAJCXIxMDBfd2JfZmluaShyZGV2KTsKIAkJcjEwMF9pYl9maW5pKHJkZXYpOworCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOwogCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQogCQkJcjEwMF9wY2lfZ2FydF9maW5pKHJkZXYpOwotCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOwogCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwppbmRleCAwMDUxZDExLi40M2I1NWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwpAQCAtNTA2LDExICs1MDYsMTQgQEAKIAogCS8qIEREUiBmb3IgYWxsIGNhcmQgYWZ0ZXIgUjMwMCAmIElHUCAqLwogCXJkZXYtPm1jLnZyYW1faXNfZGRyID0gdHJ1ZTsKKwogCXRtcCA9IFJSRUczMihSQURFT05fTUVNX0NOVEwpOwotCWlmICh0bXAgJiBSMzAwX01FTV9OVU1fQ0hBTk5FTFNfTUFTSykgewotCQlyZGV2LT5tYy52cmFtX3dpZHRoID0gMTI4OwotCX0gZWxzZSB7Ci0JCXJkZXYtPm1jLnZyYW1fd2lkdGggPSA2NDsKKwl0bXAgJj0gUjMwMF9NRU1fTlVNX0NIQU5ORUxTX01BU0s7CisJc3dpdGNoICh0bXApIHsKKwljYXNlIDA6IHJkZXYtPm1jLnZyYW1fd2lkdGggPSA2NDsgYnJlYWs7CisJY2FzZSAxOiByZGV2LT5tYy52cmFtX3dpZHRoID0gMTI4OyBicmVhazsKKwljYXNlIDI6IHJkZXYtPm1jLnZyYW1fd2lkdGggPSAyNTY7IGJyZWFrOworCWRlZmF1bHQ6ICByZGV2LT5tYy52cmFtX3dpZHRoID0gMTI4OyBicmVhazsKIAl9CiAKIAlyMTAwX3ZyYW1faW5pdF9zaXplcyhyZGV2KTsKQEAgLTEzMjcsNyArMTMzMCw2IEBACiAKIHZvaWQgcjMwMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXIzMDBfc3VzcGVuZChyZGV2KTsKIAlyMTAwX2NwX2ZpbmkocmRldik7CiAJcjEwMF93Yl9maW5pKHJkZXYpOwogCXIxMDBfaWJfZmluaShyZGV2KTsKQEAgLTE0MTgsMTUgKzE0MjAsMTUgQEAKIAlpZiAocikgewogCQkvKiBTb21ldGhpbmdzIHdhbnQgd3JvbnQgd2l0aCB0aGUgYWNjZWwgaW5pdCBzdG9wIGFjY2VsICovCiAJCWRldl9lcnIocmRldi0+ZGV2LCAiRGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOwotCQlyMzAwX3N1c3BlbmQocmRldik7CiAJCXIxMDBfY3BfZmluaShyZGV2KTsKIAkJcjEwMF93Yl9maW5pKHJkZXYpOwogCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CiAJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQogCQkJcnYzNzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCiAJCQlyMTAwX3BjaV9nYXJ0X2ZpbmkocmRldik7Ci0JCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKIAkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKaW5kZXggNDUyNmZhYS4uZDkzNzMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKQEAgLTM4OSwxNiArMzg5LDE1IEBACiAJaWYgKHIpIHsKIAkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLwogCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKLQkJcjQyMF9zdXNwZW5kKHJkZXYpOwogCQlyMTAwX2NwX2ZpbmkocmRldik7CiAJCXIxMDBfd2JfZmluaShyZGV2KTsKIAkJcjEwMF9pYl9maW5pKHJkZXYpOworCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOwogCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKIAkJCXJ2MzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOwogCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQogCQkJcjEwMF9wY2lfZ2FydF9maW5pKHJkZXYpOwogCQlyYWRlb25fYWdwX2ZpbmkocmRldik7Ci0JCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CiAJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCmluZGV4IDlhMTg5MDcuLmRkZjU3MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCkBAIC0yOTQsMTMgKzI5NCwxMiBAQAogCWlmIChyKSB7CiAJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KIAkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7Ci0JCXJ2NTE1X3N1c3BlbmQocmRldik7CiAJCXIxMDBfY3BfZmluaShyZGV2KTsKIAkJcjEwMF93Yl9maW5pKHJkZXYpOwogCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CiAJCXJ2MzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOwogCQlyYWRlb25fYWdwX2ZpbmkocmRldik7Ci0JCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CiAJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCmluZGV4IGRhOWFhM2MuLjJmZmNmNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCkBAIC0xNjU0LDYgKzE2NTQsMTIgQEAKIAlyZGV2LT5jcC5hbGlnbl9tYXNrID0gMTYgLSAxOwogfQogCit2b2lkIHI2MDBfY3BfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyNjAwX2NwX3N0b3AocmRldik7CisJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKK30KKwogCiAvKgogICogR1BVIHNjcmF0Y2ggcmVnaXN0ZXJzIGhlbHBlcnMgZnVuY3Rpb24uCkBAIC0xNzg4LDIzICsxNzk0LDI0IEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUkJfSU5UX1NUQVQpOwogfQogCi1pbnQgcjYwMF9jb3B5X2RtYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKLQkJICB1aW50NjRfdCBzcmNfb2Zmc2V0LAotCQkgIHVpbnQ2NF90IGRzdF9vZmZzZXQsCi0JCSAgdW5zaWduZWQgbnVtX3BhZ2VzLAotCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQotewotCS8qIEZJWE1FOiBpbXBsZW1lbnQgKi8KLQlyZXR1cm4gMDsKLX0KLQogaW50IHI2MDBfY29weV9ibGl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkgICB1aW50NjRfdCBzcmNfb2Zmc2V0LCB1aW50NjRfdCBkc3Rfb2Zmc2V0LAogCQkgICB1bnNpZ25lZCBudW1fcGFnZXMsIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewotCXI2MDBfYmxpdF9wcmVwYXJlX2NvcHkocmRldiwgbnVtX3BhZ2VzICogUkFERU9OX0dQVV9QQUdFX1NJWkUpOworCWludCByOworCisJbXV0ZXhfbG9jaygmcmRldi0+cjYwMF9ibGl0Lm11dGV4KTsKKwlyZGV2LT5yNjAwX2JsaXQudmJfaWIgPSBOVUxMOworCXIgPSByNjAwX2JsaXRfcHJlcGFyZV9jb3B5KHJkZXYsIG51bV9wYWdlcyAqIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsKKwlpZiAocikgeworCQlpZiAocmRldi0+cjYwMF9ibGl0LnZiX2liKQorCQkJcmFkZW9uX2liX2ZyZWUocmRldiwgJnJkZXYtPnI2MDBfYmxpdC52Yl9pYik7CisJCW11dGV4X3VubG9jaygmcmRldi0+cjYwMF9ibGl0Lm11dGV4KTsKKwkJcmV0dXJuIHI7CisJfQogCXI2MDBfa21zX2JsaXRfY29weShyZGV2LCBzcmNfb2Zmc2V0LCBkc3Rfb2Zmc2V0LCBudW1fcGFnZXMgKiBSQURFT05fR1BVX1BBR0VfU0laRSk7CiAJcjYwMF9ibGl0X2RvbmVfY29weShyZGV2LCBmZW5jZSk7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5yNjAwX2JsaXQubXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xODYwLDI2ICsxODY3LDI1IEBACiAJCQlyZXR1cm4gcjsKIAl9CiAJcjYwMF9ncHVfaW5pdChyZGV2KTsKLQotCWlmICghcmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopIHsKLQkJciA9IHI2MDBfYmxpdF9pbml0KHJkZXYpOworCXIgPSByNjAwX2JsaXRfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlyNjAwX2JsaXRfZmluaShyZGV2KTsKKwkJcmRldi0+YXNpYy0+Y29weSA9IE5VTEw7CisJCWRldl93YXJuKHJkZXYtPmRldiwgImZhaWxlZCBibGl0dGVyICglZCkgZmFsbGluZyBiYWNrIHRvIG1lbWNweVxuIiwgcik7CisJfQorCS8qIHBpbiBjb3B5IHNoYWRlciBpbnRvIHZyYW0gKi8KKwlpZiAocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopIHsKKwkJciA9IHJhZGVvbl9ib19yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqLCBmYWxzZSk7CisJCWlmICh1bmxpa2VseShyICE9IDApKQorCQkJcmV0dXJuIHI7CisJCXIgPSByYWRlb25fYm9fcGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqLCBSQURFT05fR0VNX0RPTUFJTl9WUkFNLAorCQkJCSZyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX2dwdV9hZGRyKTsKKwkJcmFkZW9uX2JvX3VucmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaik7CiAJCWlmIChyKSB7Ci0JCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGVkIGJsaXR0ZXIgKCVkKS5cbiIsIHIpOworCQkJZGV2X2VycihyZGV2LT5kZXYsICIoJWQpIHBpbiBibGl0IG9iamVjdCBmYWlsZWRcbiIsIHIpOwogCQkJcmV0dXJuIHI7CiAJCX0KIAl9Ci0KLQlyID0gcmFkZW9uX2JvX3Jlc2VydmUocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmosIGZhbHNlKTsKLQlpZiAodW5saWtlbHkociAhPSAwKSkKLQkJcmV0dXJuIHI7Ci0JciA9IHJhZGVvbl9ib19waW4ocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmosIFJBREVPTl9HRU1fRE9NQUlOX1ZSQU0sCi0JCQkmcmRldi0+cjYwMF9ibGl0LnNoYWRlcl9ncHVfYWRkcik7Ci0JcmFkZW9uX2JvX3VucmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaik7Ci0JaWYgKHIpIHsKLQkJZGV2X2VycihyZGV2LT5kZXYsICIoJWQpIHBpbiBibGl0IG9iamVjdCBmYWlsZWRcbiIsIHIpOwotCQlyZXR1cm4gcjsKLQl9Ci0KIAkvKiBFbmFibGUgSVJRICovCiAJciA9IHI2MDBfaXJxX2luaXQocmRldik7CiAJaWYgKHIpIHsKQEAgLTE5NDQsNiArMTk1MCwxMyBAQAogCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CiAJfQorCisJciA9IHI2MDBfYXVkaW9faW5pdChyZGV2KTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoInJhZGVvbjogYXVkaW8gcmVzdW1lIGZhaWxlZFxuIik7CisJCXJldHVybiByOworCX0KKwogCXJldHVybiByOwogfQogCkBAIC0xOTUxLDYgKzE5NjQsNyBAQAogewogCWludCByOwogCisJcjYwMF9hdWRpb19maW5pKHJkZXYpOwogCS8qIEZJWE1FOiB3ZSBzaG91bGQgd2FpdCBmb3IgcmluZyB0byBiZSBlbXB0eSAqLwogCXI2MDBfY3Bfc3RvcChyZGV2KTsKIAlyZGV2LT5jcC5yZWFkeSA9IGZhbHNlOwpAQCAtMjA1NSw5ICsyMDY5LDExIEBACiAJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CiAJciA9IHI2MDBfc3RhcnR1cChyZGV2KTsKIAlpZiAocikgewotCQlyNjAwX3N1c3BlbmQocmRldik7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOworCQlyNjAwX2NwX2ZpbmkocmRldik7CiAJCXI2MDBfd2JfZmluaShyZGV2KTsKLQkJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwkJcjYwMF9pcnFfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKIAkJcjYwMF9wY2llX2dhcnRfZmluaShyZGV2KTsKIAkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCX0KQEAgLTIwODMsMjAgKzIwOTksMTcgQEAKIAogdm9pZCByNjAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JLyogU3VzcGVuZCBvcGVyYXRpb25zICovCi0JcjYwMF9zdXNwZW5kKHJkZXYpOwotCiAJcjYwMF9hdWRpb19maW5pKHJkZXYpOwogCXI2MDBfYmxpdF9maW5pKHJkZXYpOworCXI2MDBfY3BfZmluaShyZGV2KTsKKwlyNjAwX3diX2ZpbmkocmRldik7CiAJcjYwMF9pcnFfZmluaShyZGV2KTsKIAlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOwotCXJhZGVvbl9yaW5nX2ZpbmkocmRldik7Ci0JcjYwMF93Yl9maW5pKHJkZXYpOwogCXI2MDBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2FncF9maW5pKHJkZXYpOwogCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKIAlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CiAJcmFkZW9uX2Nsb2Nrc19maW5pKHJkZXYpOwotCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKIAlyYWRlb25fYm9fZmluaShyZGV2KTsKIAlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKIAlrZnJlZShyZGV2LT5iaW9zKTsKQEAgLTI5MDAsMyArMjkxMywxOCBAQAogCXJldHVybiAwOwogI2VuZGlmCiB9CisKKy8qKgorICogcjYwMF9pb2N0bF93YWl0X2lkbGUgLSBmbHVzaCBob3N0IHBhdGggY2FjaGUgb24gd2FpdCBpZGxlIGlvY3RsCisgKiByZGV2OiByYWRlb24gZGV2aWNlIHN0cnVjdHVyZQorICogYm86IGJ1ZmZlciBvYmplY3Qgc3RydWN0IHdoaWNoIHVzZXJzcGFjZSBpcyB3YWl0aW5nIGZvciBpZGxlCisgKgorICogU29tZSBSNlhYL1I3WFggZG9lc24ndCBzZWVtcyB0byB0YWtlIGludG8gYWNjb3VudCBIRFAgZmx1c2ggcGVyZm9ybWVkCisgKiB0aHJvdWdoIHJpbmcgYnVmZmVyLCB0aGlzIGxlYWRzIHRvIGNvcnJ1cHRpb24gaW4gcmVuZGVyaW5nLCBzZWUKKyAqIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE4NiB0byBhdm9pZCB0aGlzIHdlCisgKiBkaXJlY3RseSBwZXJmb3JtIEhEUCBmbHVzaCBieSB3cml0aW5nIHJlZ2lzdGVyIHRocm91Z2ggTU1JTy4KKyAqLwordm9pZCByNjAwX2lvY3RsX3dhaXRfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9ibyAqYm8pCit7CisJV1JFRzMyKFJfMDA1NDgwX0hEUF9NRU1fQ09IRVJFTkNZX0ZMVVNIX0NOVEwsIDB4MSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYXVkaW8uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCmluZGV4IDk5ZTJjMzguLjBkY2I2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCkBAIC0zNSw3ICszNSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcjYwMF9hdWRpb19jaGlwc2V0X3N1cHBvcnRlZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyZXR1cm4gcmRldi0+ZmFtaWx5ID49IENISVBfUjYwMAorCXJldHVybiAocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCAmJiByZGV2LT5mYW1pbHkgPCBDSElQX1JWNzEwKQogCQl8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzYwMAogCQl8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzY5MAogCQl8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc0MDsKQEAgLTI2MSw3ICsyNjEsNiBAQAogCWlmICghcjYwMF9hdWRpb19jaGlwc2V0X3N1cHBvcnRlZChyZGV2KSkKIAkJcmV0dXJuOwogCi0JV1JFRzMyX1AoUjYwMF9BVURJT19FTkFCTEUsIDB4MCwgfjB4ODEwMDAwMDApOwotCiAJZGVsX3RpbWVyKCZyZGV2LT5hdWRpb190aW1lcik7CisJV1JFRzMyX1AoUjYwMF9BVURJT19FTkFCTEUsIDB4MCwgfjB4ODEwMDAwMDApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYwppbmRleCAyYmVkY2U0Li40NDZiNzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYwpAQCAtNDQ5LDYgKzQ0OSw3IEBACiAJdTMyIHBhY2tldDJzWzE2XTsKIAlpbnQgbnVtX3BhY2tldDJzID0gMDsKIAorCW11dGV4X2luaXQoJnJkZXYtPnI2MDBfYmxpdC5tdXRleCk7CiAJcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCA9IDA7CiAKIAlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApCkBAIC01NDIsOSArNTQzLDYgQEAKIHZvaWQgcjYwMF92Yl9pYl9wdXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJcmFkZW9uX2ZlbmNlX2VtaXQocmRldiwgcmRldi0+cjYwMF9ibGl0LnZiX2liLT5mZW5jZSk7Ci0JbXV0ZXhfbG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7Ci0JbGlzdF9hZGRfdGFpbCgmcmRldi0+cjYwMF9ibGl0LnZiX2liLT5saXN0LCAmcmRldi0+aWJfcG9vbC5zY2hlZHVsZWRfaWJzKTsKLQltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwogCXJhZGVvbl9pYl9mcmVlKHJkZXYsICZyZGV2LT5yNjAwX2JsaXQudmJfaWIpOwogfQogCkBAIC01NTcsNyArNTU1LDggQEAKIAlpbnQgZHdvcmRzX3Blcl9sb29wID0gNzYsIG51bV9sb29wczsKIAogCXIgPSByNjAwX3ZiX2liX2dldChyZGV2KTsKLQlXQVJOX09OKHIpOworCWlmIChyKQorCQlyZXR1cm4gcjsKIAogCS8qIHNldF9yZW5kZXJfdGFyZ2V0IGVtaXRzIDIgZXh0cmEgZHdvcmRzIG9uIHJ2Nnh4ICovCiAJaWYgKHJkZXYtPmZhbWlseSA+IENISVBfUjYwMCAmJiByZGV2LT5mYW1pbHkgPCBDSElQX1JWNzcwKQpAQCAtNTgzLDcgKzU4Miw4IEBACiAJcmluZ19zaXplICs9IDU7IC8qIGRvbmUgY29weSAqLwogCXJpbmdfc2l6ZSArPSA3OyAvKiBmZW5jZSBlbWl0IGZvciBkb25lIGNvcHkgKi8KIAlyID0gcmFkZW9uX3JpbmdfbG9jayhyZGV2LCByaW5nX3NpemUpOwotCVdBUk5fT04ocik7CisJaWYgKHIpCisJCXJldHVybiByOwogCiAJc2V0X2RlZmF1bHRfc3RhdGUocmRldik7IC8qIDE0ICovCiAJc2V0X3NoYWRlcnMocmRldik7IC8qIDI2ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jCmluZGV4IDZkNWE3MTEuLjc1YmNmMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jCkBAIC0xNDI4LDkgKzE0MjgsMTIgQEAKIAogCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9CQU5LX1NXQVBTKDEpOwogCi0JYmFja2VuZF9tYXAgPSByNzAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAoZGV2X3ByaXYtPnI2MDBfbWF4X3RpbGVfcGlwZXMsCi0JCQkJCQkJZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzLAotCQkJCQkJCSgweGZmIDw8IGRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcykgJiAweGZmKTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjc0MCkKKwkJYmFja2VuZF9tYXAgPSAweDI4OworCWVsc2UKKwkJYmFja2VuZF9tYXAgPSByNzAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAoZGV2X3ByaXYtPnI2MDBfbWF4X3RpbGVfcGlwZXMsCisJCQkJCQkJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcywKKwkJCQkJCQkJKDB4ZmYgPDwgZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzKSAmIDB4ZmYpOwogCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9CQUNLRU5EX01BUChiYWNrZW5kX21hcCk7CiAKIAljY19nY19zaGFkZXJfcGlwZV9jb25maWcgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggZjdkZjFhNy4uYzAzNTZiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC05Niw2ICs5Niw3IEBACiAgKiBzeW1ib2w7CiAgKi8KICNkZWZpbmUgUkFERU9OX01BWF9VU0VDX1RJTUVPVVQJCTEwMDAwMAkvKiAxMDAgbXMgKi8KKy8qIFJBREVPTl9JQl9QT09MX1NJWkUgbXVzdCBiZSBhIHBvd2VyIG9mIDIgKi8KICNkZWZpbmUgUkFERU9OX0lCX1BPT0xfU0laRQkJMTYKICNkZWZpbmUgUkFERU9OX0RFQlVHRlNfTUFYX05VTV9GSUxFUwkzMgogI2RlZmluZSBSQURFT05GQl9DT05OX0xJTUlUCQk0CkBAIC0zNjMsMTEgKzM2NCwxMiBAQAogICovCiBzdHJ1Y3QgcmFkZW9uX2liIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0JdW5zaWduZWQgbG9uZwkJaWR4OworCXVuc2lnbmVkCQlpZHg7CiAJdWludDY0X3QJCWdwdV9hZGRyOwogCXN0cnVjdCByYWRlb25fZmVuY2UJKmZlbmNlOwotCXVpbnQzMl90CSpwdHI7CisJdWludDMyX3QJCSpwdHI7CiAJdWludDMyX3QJCWxlbmd0aF9kdzsKKwlib29sCQkJZnJlZTsKIH07CiAKIC8qCkBAIC0zNzcsMTAgKzM3OSw5IEBACiBzdHJ1Y3QgcmFkZW9uX2liX3Bvb2wgewogCXN0cnVjdCBtdXRleAkJbXV0ZXg7CiAJc3RydWN0IHJhZGVvbl9ibwkqcm9iajsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXNjaGVkdWxlZF9pYnM7CiAJc3RydWN0IHJhZGVvbl9pYglpYnNbUkFERU9OX0lCX1BPT0xfU0laRV07CiAJYm9vbAkJCXJlYWR5OwotCURFQ0xBUkVfQklUTUFQKGFsbG9jX2JtLCBSQURFT05fSUJfUE9PTF9TSVpFKTsKKwl1bnNpZ25lZAkJaGVhZF9pZDsKIH07CiAKIHN0cnVjdCByYWRlb25fY3AgewpAQCAtNDE2LDYgKzQxNyw3IEBACiB9OwogCiBzdHJ1Y3QgcjYwMF9ibGl0IHsKKwlzdHJ1Y3QgbXV0ZXgJCW11dGV4OwogCXN0cnVjdCByYWRlb25fYm8JKnNoYWRlcl9vYmo7CiAJdTY0IHNoYWRlcl9ncHVfYWRkcjsKIAl1MzIgdnNfb2Zmc2V0LCBwc19vZmZzZXQ7CkBAIC02NjAsNiArNjYyLDEzIEBACiAJdm9pZCAoKmhwZF9maW5pKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJYm9vbCAoKmhwZF9zZW5zZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGVudW0gcmFkZW9uX2hwZF9pZCBocGQpOwogCXZvaWQgKCpocGRfc2V0X3BvbGFyaXR5KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgZW51bSByYWRlb25faHBkX2lkIGhwZCk7CisJLyogaW9jdGwgaHcgc3BlY2lmaWMgY2FsbGJhY2suIFNvbWUgaHcgbWlnaHQgd2FudCB0byBwZXJmb3JtIHNwZWNpYWwKKwkgKiBvcGVyYXRpb24gb24gc3BlY2lmaWMgaW9jdGwuIEZvciBpbnN0YW5jZSBvbiB3YWl0IGlkbGUgc29tZSBodworCSAqIG1pZ2h0IHdhbnQgdG8gcGVyZm9ybSBhbmQgSERQIGZsdXNoIHRocm91Z2ggTU1JTyBhcyBpdCBzZWVtcyB0aGF0CisJICogc29tZSBSNlhYL1I3WFggaHcgZG9lc24ndCB0YWtlIEhEUCBmbHVzaCBpbnRvIGFjY291bnQgaWYgcHJvZ3JhbW1lZAorCSAqIHRocm91Z2ggcmluZy4KKwkgKi8KKwl2b2lkICgqaW9jdGxfd2FpdF9pZGxlKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9ibyAqYm8pOwogfTsKIAogLyoKQEAgLTExNDIsNiArMTE1MSw3IEBACiBleHRlcm4gdm9pZCByNjAwX2NwX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjYwMF9yaW5nX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIHJpbmdfc2l6ZSk7CiBleHRlcm4gaW50IHI2MDBfY3BfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHI2MDBfY3BfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHI2MDBfY291bnRfcGlwZV9iaXRzKHVpbnQzMl90IHZhbCk7CiBleHRlcm4gaW50IHI2MDBfZ2FydF9jbGVhcl9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSk7CiBleHRlcm4gaW50IHI2MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hZ3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FncC5jCmluZGV4IGM5YWQ3ZjUuLmMwNjgxYTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hZ3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hZ3AuYwpAQCAtMTMzLDEzICsxMzMsNiBAQAogCWJvb2wgaXNfdjM7CiAJaW50IHJldDsKIAotCWlmIChyZGV2LT5kZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfc2l6ZSA8IDMyKSB7Ci0JCWRldl93YXJuKHJkZXYtPmRldiwgIkFHUCBhcGVydHVyZSB0byBzbWFsbCAoJWRNKSAiCi0JCQkibmVlZCBhdCBsZWFzdCAzMk0sIGRpc2FibGluZyBBR1BcbiIsCi0JCQlyZGV2LT5kZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfc2l6ZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCS8qIEFjcXVpcmUgQUdQLiAqLwogCWlmICghcmRldi0+ZGRldi0+YWdwLT5hY3F1aXJlZCkgewogCQlyZXQgPSBkcm1fYWdwX2FjcXVpcmUocmRldi0+ZGRldik7CkBAIC0xNTEsOSArMTQ0LDE5IEBACiAKIAlyZXQgPSBkcm1fYWdwX2luZm8ocmRldi0+ZGRldiwgJmluZm8pOwogCWlmIChyZXQpIHsKKwkJZHJtX2FncF9yZWxlYXNlKHJkZXYtPmRkZXYpOwogCQlEUk1fRVJST1IoIlVuYWJsZSB0byBnZXQgQUdQIGluZm86ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KKworCWlmIChyZGV2LT5kZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfc2l6ZSA8IDMyKSB7CisJCWRybV9hZ3BfcmVsZWFzZShyZGV2LT5kZGV2KTsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiQUdQIGFwZXJ0dXJlIHRvbyBzbWFsbCAoJXp1TSkgIgorCQkJIm5lZWQgYXQgbGVhc3QgMzJNLCBkaXNhYmxpbmcgQUdQXG4iLAorCQkJcmRldi0+ZGRldi0+YWdwLT5hZ3BfaW5mby5hcGVyX3NpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAltb2RlLm1vZGUgPSBpbmZvLm1vZGU7CiAJYWdwX3N0YXR1cyA9IChSUkVHMzIoUkFERU9OX0FHUF9TVEFUVVMpIHwgUkFERU9OX0FHUHYzX01PREUpICYgbW9kZS5tb2RlOwogCWlzX3YzID0gISEoYWdwX3N0YXR1cyAmIFJBREVPTl9BR1B2M19NT0RFKTsKQEAgLTIyOCw2ICsyMzEsNyBAQAogCXJldCA9IGRybV9hZ3BfZW5hYmxlKHJkZXYtPmRkZXYsIG1vZGUpOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJVbmFibGUgdG8gZW5hYmxlIEFHUCAobW9kZSA9IDB4JWx4KVxuIiwgbW9kZS5tb2RlKTsKKwkJZHJtX2FncF9yZWxlYXNlKHJkZXYtPmRkZXYpOwogCQlyZXR1cm4gcmV0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCmluZGV4IGYyZmJkMmUuLjA1ZWUxYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKQEAgLTExNyw2ICsxMTcsNyBAQAogCS5ocGRfZmluaSA9ICZyMTAwX2hwZF9maW5pLAogCS5ocGRfc2Vuc2UgPSAmcjEwMF9ocGRfc2Vuc2UsCiAJLmhwZF9zZXRfcG9sYXJpdHkgPSAmcjEwMF9ocGRfc2V0X3BvbGFyaXR5LAorCS5pb2N0bF93YWl0X2lkbGUgPSBOVUxMLAogfTsKIAogCkBAIC0xNzYsNiArMTc3LDcgQEAKIAkuaHBkX2ZpbmkgPSAmcjEwMF9ocGRfZmluaSwKIAkuaHBkX3NlbnNlID0gJnIxMDBfaHBkX3NlbnNlLAogCS5ocGRfc2V0X3BvbGFyaXR5ID0gJnIxMDBfaHBkX3NldF9wb2xhcml0eSwKKwkuaW9jdGxfd2FpdF9pZGxlID0gTlVMTCwKIH07CiAKIC8qCkBAIC0yMTksNiArMjIxLDcgQEAKIAkuaHBkX2ZpbmkgPSAmcjEwMF9ocGRfZmluaSwKIAkuaHBkX3NlbnNlID0gJnIxMDBfaHBkX3NlbnNlLAogCS5ocGRfc2V0X3BvbGFyaXR5ID0gJnIxMDBfaHBkX3NldF9wb2xhcml0eSwKKwkuaW9jdGxfd2FpdF9pZGxlID0gTlVMTCwKIH07CiAKIApAQCAtMjY3LDYgKzI3MCw3IEBACiAJLmhwZF9maW5pID0gJnIxMDBfaHBkX2ZpbmksCiAJLmhwZF9zZW5zZSA9ICZyMTAwX2hwZF9zZW5zZSwKIAkuaHBkX3NldF9wb2xhcml0eSA9ICZyMTAwX2hwZF9zZXRfcG9sYXJpdHksCisJLmlvY3RsX3dhaXRfaWRsZSA9IE5VTEwsCiB9OwogCiAKQEAgLTMyMyw2ICszMjcsNyBAQAogCS5ocGRfZmluaSA9ICZyczYwMF9ocGRfZmluaSwKIAkuaHBkX3NlbnNlID0gJnJzNjAwX2hwZF9zZW5zZSwKIAkuaHBkX3NldF9wb2xhcml0eSA9ICZyczYwMF9ocGRfc2V0X3BvbGFyaXR5LAorCS5pb2N0bF93YWl0X2lkbGUgPSBOVUxMLAogfTsKIAogCkBAIC0zNzAsNiArMzc1LDcgQEAKIAkuaHBkX2ZpbmkgPSAmcnM2MDBfaHBkX2ZpbmksCiAJLmhwZF9zZW5zZSA9ICZyczYwMF9ocGRfc2Vuc2UsCiAJLmhwZF9zZXRfcG9sYXJpdHkgPSAmcnM2MDBfaHBkX3NldF9wb2xhcml0eSwKKwkuaW9jdGxfd2FpdF9pZGxlID0gTlVMTCwKIH07CiAKIApAQCAtNDIxLDYgKzQyNyw3IEBACiAJLmhwZF9maW5pID0gJnJzNjAwX2hwZF9maW5pLAogCS5ocGRfc2Vuc2UgPSAmcnM2MDBfaHBkX3NlbnNlLAogCS5ocGRfc2V0X3BvbGFyaXR5ID0gJnJzNjAwX2hwZF9zZXRfcG9sYXJpdHksCisJLmlvY3RsX3dhaXRfaWRsZSA9IE5VTEwsCiB9OwogCiAKQEAgLTQ2Myw2ICs0NzAsNyBAQAogCS5ocGRfZmluaSA9ICZyczYwMF9ocGRfZmluaSwKIAkuaHBkX3NlbnNlID0gJnJzNjAwX2hwZF9zZW5zZSwKIAkuaHBkX3NldF9wb2xhcml0eSA9ICZyczYwMF9ocGRfc2V0X3BvbGFyaXR5LAorCS5pb2N0bF93YWl0X2lkbGUgPSBOVUxMLAogfTsKIAogLyoKQEAgLTUwNCw2ICs1MTIsNyBAQAogYm9vbCByNjAwX2hwZF9zZW5zZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgZW51bSByYWRlb25faHBkX2lkIGhwZCk7CiB2b2lkIHI2MDBfaHBkX3NldF9wb2xhcml0eShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJCSAgIGVudW0gcmFkZW9uX2hwZF9pZCBocGQpOworZXh0ZXJuIHZvaWQgcjYwMF9pb2N0bF93YWl0X2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fYm8gKmJvKTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByNjAwX2FzaWMgPSB7CiAJLmluaXQgPSAmcjYwMF9pbml0LApAQCAtNTM4LDYgKzU0Nyw3IEBACiAJLmhwZF9maW5pID0gJnI2MDBfaHBkX2ZpbmksCiAJLmhwZF9zZW5zZSA9ICZyNjAwX2hwZF9zZW5zZSwKIAkuaHBkX3NldF9wb2xhcml0eSA9ICZyNjAwX2hwZF9zZXRfcG9sYXJpdHksCisJLmlvY3RsX3dhaXRfaWRsZSA9IHI2MDBfaW9jdGxfd2FpdF9pZGxlLAogfTsKIAogLyoKQEAgLTU4Miw2ICs1OTIsNyBAQAogCS5ocGRfZmluaSA9ICZyNjAwX2hwZF9maW5pLAogCS5ocGRfc2Vuc2UgPSAmcjYwMF9ocGRfc2Vuc2UsCiAJLmhwZF9zZXRfcG9sYXJpdHkgPSAmcjYwMF9ocGRfc2V0X3BvbGFyaXR5LAorCS5pb2N0bF93YWl0X2lkbGUgPSByNjAwX2lvY3RsX3dhaXRfaWRsZSwKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggZmE4MmNhNy4uNGQ4ODMxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC0yMDYsNiArMjA2LDE1IEBACiAJCQkqY29ubmVjdG9yX3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDsKIAl9CiAKKwkvKiBBc3JvY2sgUlM2MDAgYm9hcmQgbGlzdHMgdGhlIERWSSBwb3J0IGFzIEhETUkgKi8KKwlpZiAoKGRldi0+cGRldi0+ZGV2aWNlID09IDB4Nzk0MSkgJiYKKwkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDE4NDkpICYmCisJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHg3OTQxKSkgeworCQlpZiAoKCpjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpICYmCisJCSAgICAoc3VwcG9ydGVkX2RldmljZSA9PSBBVE9NX0RFVklDRV9ERlAzX1NVUFBPUlQpKQorCQkJKmNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ7CisJfQorCiAJLyogYS1iaXQgZi1pOTBoZCAtIGNpYXJhbm0gb24gI3JhZGVvbmhkIC0gdGhpcyBib2FyZCBoYXMgbm8gRFZJICovCiAJaWYgKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDc5NDEpICYmCiAJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxNDdiKSAmJgpAQCAtMjg3LDYgKzI5NiwxNSBAQAogCQkJKmNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ7CiAJfQogCisJLyogWEZYIFBpbmUgR3JvdXAgZGV2aWNlIHJ2NzMwIHJlcG9ydHMgbm8gVkdBIEREQyBsaW5lcworCSAqIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHdpcmVkIHVwIHRvIHJlY29yZCAweDkzCisJICovCisJaWYgKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDk0OTgpICYmCisJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxNjgyKSAmJgorCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MjQ1MikpIHsKKwkJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCQkqaTJjX2J1cyA9IHJhZGVvbl9sb29rdXBfaTJjX2dwaW8ocmRldiwgMHg5Myk7CisJfQogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2JlbmNobWFyay5jCmluZGV4IDRkZGZkNGIuLjc5MzJkYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2JlbmNobWFyay5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2JlbmNobWFyay5jCkBAIC02NSwzMSArNjUsNDIgQEAKIAlpZiAocikgewogCQlnb3RvIG91dF9jbGVhbnVwOwogCX0KLQlzdGFydF9qaWZmaWVzID0gamlmZmllczsKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCXIgPSByYWRlb25fZmVuY2VfY3JlYXRlKHJkZXYsICZmZW5jZSk7Ci0JCWlmIChyKSB7Ci0JCQlnb3RvIG91dF9jbGVhbnVwOworCisJLyogcjEwMCBkb2Vzbid0IGhhdmUgZG1hIGVuZ2luZSBzbyBza2lwIHRoZSB0ZXN0ICovCisJaWYgKHJkZXYtPmFzaWMtPmNvcHlfZG1hKSB7CisKKwkJc3RhcnRfamlmZmllcyA9IGppZmZpZXM7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCXIgPSByYWRlb25fZmVuY2VfY3JlYXRlKHJkZXYsICZmZW5jZSk7CisJCQlpZiAocikgeworCQkJCWdvdG8gb3V0X2NsZWFudXA7CisJCQl9CisKKwkJCXIgPSByYWRlb25fY29weV9kbWEocmRldiwgc2FkZHIsIGRhZGRyLAorCQkJCQlzaXplIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUsIGZlbmNlKTsKKworCQkJaWYgKHIpIHsKKwkJCQlnb3RvIG91dF9jbGVhbnVwOworCQkJfQorCQkJciA9IHJhZGVvbl9mZW5jZV93YWl0KGZlbmNlLCBmYWxzZSk7CisJCQlpZiAocikgeworCQkJCWdvdG8gb3V0X2NsZWFudXA7CisJCQl9CisJCQlyYWRlb25fZmVuY2VfdW5yZWYoJmZlbmNlKTsKIAkJfQotCQlyID0gcmFkZW9uX2NvcHlfZG1hKHJkZXYsIHNhZGRyLCBkYWRkciwgc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFLCBmZW5jZSk7Ci0JCWlmIChyKSB7Ci0JCQlnb3RvIG91dF9jbGVhbnVwOworCQllbmRfamlmZmllcyA9IGppZmZpZXM7CisJCXRpbWUgPSBlbmRfamlmZmllcyAtIHN0YXJ0X2ppZmZpZXM7CisJCXRpbWUgPSBqaWZmaWVzX3RvX21zZWNzKHRpbWUpOworCQlpZiAodGltZSA+IDApIHsKKwkJCWkgPSAoKG4gKiBzaXplKSA+PiAxMCkgLyB0aW1lOworCQkJcHJpbnRrKEtFUk5fSU5GTyAicmFkZW9uOiBkbWEgJXUgYm8gbW92ZXMgb2YgJXVrYiBmcm9tIgorCQkJCQkiICVkIHRvICVkIGluICVsdW1zICgldWtiL21zICV1a2IvcyAldU0vcylcbiIsCisJCQkJCW4sIHNpemUgPj4gMTAsCisJCQkJCXNkb21haW4sIGRkb21haW4sIHRpbWUsCisJCQkJCWksIGkgKiAxMDAwLCAoaSAqIDEwMDApIC8gMTAyNCk7CiAJCX0KLQkJciA9IHJhZGVvbl9mZW5jZV93YWl0KGZlbmNlLCBmYWxzZSk7Ci0JCWlmIChyKSB7Ci0JCQlnb3RvIG91dF9jbGVhbnVwOwotCQl9Ci0JCXJhZGVvbl9mZW5jZV91bnJlZigmZmVuY2UpOwogCX0KLQllbmRfamlmZmllcyA9IGppZmZpZXM7Ci0JdGltZSA9IGVuZF9qaWZmaWVzIC0gc3RhcnRfamlmZmllczsKLQl0aW1lID0gamlmZmllc190b19tc2Vjcyh0aW1lKTsKLQlpZiAodGltZSA+IDApIHsKLQkJaSA9ICgobiAqIHNpemUpID4+IDEwKSAvIHRpbWU7Ci0JCXByaW50ayhLRVJOX0lORk8gInJhZGVvbjogZG1hICV1IGJvIG1vdmVzIG9mICV1a2IgZnJvbSAlZCB0byAlZCIKLQkJICAgICAgICIgaW4gJWx1bXMgKCV1a2IvbXMgJXVrYi9zICV1TS9zKVxuIiwgbiwgc2l6ZSA+PiAxMCwKLQkJICAgICAgIHNkb21haW4sIGRkb21haW4sIHRpbWUsIGksIGkgKiAxMDAwLCAoaSAqIDEwMDApIC8gMTAyNCk7Ci0JfQorCiAJc3RhcnRfamlmZmllcyA9IGppZmZpZXM7CiAJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogCQlyID0gcmFkZW9uX2ZlbmNlX2NyZWF0ZShyZGV2LCAmZmVuY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCmluZGV4IDU3OWM4OTIuLjIyZDQ3NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKQEAgLTk3MSw4ICs5NzEsNyBAQAogCQkJIGx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5KTsKIAogCQlsdmRzLT5wYW5lbF92Y2NfZGVsYXkgPSBSQklPUzE2KGxjZF9pbmZvICsgMHgyYyk7Ci0JCWlmIChsdmRzLT5wYW5lbF92Y2NfZGVsYXkgPiAyMDAwIHx8IGx2ZHMtPnBhbmVsX3ZjY19kZWxheSA8IDApCi0JCQlsdmRzLT5wYW5lbF92Y2NfZGVsYXkgPSAyMDAwOworCQlsdmRzLT5wYW5lbF92Y2NfZGVsYXkgPSBtaW5fdCh1MTYsIGx2ZHMtPnBhbmVsX3ZjY19kZWxheSwgMjAwMCk7CiAKIAkJbHZkcy0+cGFuZWxfcHdyX2RlbGF5ID0gUkJJT1M4KGxjZF9pbmZvICsgMHgyNCk7CiAJCWx2ZHMtPnBhbmVsX2RpZ29uX2RlbGF5ID0gUkJJT1MxNihsY2RfaW5mbyArIDB4MzgpICYgMHhmOwpAQCAtMTI4MCw0NyArMTI3OSw0NyBAQAogCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSByYWRlb25fY29ubmVjdG9yX3RhYmxlOwogCWlmIChyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID09IENUX05PTkUpIHsKICNpZmRlZiBDT05GSUdfUFBDX1BNQUMKLQkJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywzIikpIHsKKwkJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywzIikpIHsKIAkJCS8qIHBvd2VyYm9vayB3aXRoIFZHQSAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX1BPV0VSQk9PS19WR0E7Ci0JCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDQiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDUiKSkgeworCQl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMyw0IikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMyw1IikpIHsKIAkJCS8qIHBvd2VyYm9vayB3aXRoIGludGVybmFsIHRtZHMgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9QT1dFUkJPT0tfSU5URVJOQUw7Ci0JCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDEiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDIiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDMiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDQiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDUiKSkgeworCQl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSwxIikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSwyIikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSwzIikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSw0IikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSw1IikpIHsKIAkJCS8qIHBvd2VyYm9vayB3aXRoIGV4dGVybmFsIHNpbmdsZSBsaW5rIHRtZHMgKHNpbDE2NCkgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9QT1dFUkJPT0tfRVhURVJOQUw7Ci0JCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDYiKSkgeworCQl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSw2IikpIHsKIAkJCS8qIHBvd2VyYm9vayB3aXRoIGV4dGVybmFsIGR1YWwgb3Igc2luZ2xlIGxpbmsgdG1kcyAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX1BPV0VSQk9PS19FWFRFUk5BTDsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsNyIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsOCIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsOSIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDciKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDgiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDkiKSkgewogCQkJLyogUG93ZXJCb29rNiwyID8gKi8KIAkJCS8qIHBvd2VyYm9vayB3aXRoIGV4dGVybmFsIGR1YWwgbGluayB0bWRzIChzaWwxMTc4PykgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9QT1dFUkJPT0tfRVhURVJOQUw7Ci0JCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDIiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDMiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDMiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDUiKSB8fAotCQkJICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDciKSkgeworCQl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwxIikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwyIikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwzIikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNiwzIikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNiw1IikgfHwKKwkJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNiw3IikpIHsKIAkJCS8qIGlib29rICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfSUJPT0s7Ci0JCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsNCIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsNCIpKSB7CiAJCQkvKiBlbWFjICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfRU1BQzsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTAsMSIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzEwLDEiKSkgewogCQkJLyogbWluaSB3aXRoIGludGVybmFsIHRtZHMgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9NSU5JX0lOVEVSTkFMOwotCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMCwyIikpIHsKKwkJfSBlbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTAsMiIpKSB7CiAJCQkvKiBtaW5pIHdpdGggZXh0ZXJuYWwgdG1kcyAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX01JTklfRVhURVJOQUw7Ci0JCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzEyLDEiKSkgeworCQl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMiwxIikpIHsKIAkJCS8qIFBvd2VyTWFjOCwxID8gKi8KIAkJCS8qIGltYWMgZzUgaXNpZ2h0ICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfSU1BQ19HNV9JU0lHSFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKaW5kZXggNTUyNjY0MS4uNjVmODE5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYwpAQCAtNTgwLDE2ICs1ODAsMTggQEAKIAlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKLQlib29sIGRyZXQ7CisJYm9vbCBkcmV0ID0gZmFsc2U7CiAJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAogCWVuY29kZXIgPSByYWRlb25fYmVzdF9zaW5nbGVfZW5jb2Rlcihjb25uZWN0b3IpOwogCWlmICghZW5jb2RlcikKIAkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAKLQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cywgMSk7Ci0JZHJldCA9IHJhZGVvbl9kZGNfcHJvYmUocmFkZW9uX2Nvbm5lY3Rvcik7Ci0JcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMsIDApOworCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKSB7CisJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAxKTsKKwkJZHJldCA9IHJhZGVvbl9kZGNfcHJvYmUocmFkZW9uX2Nvbm5lY3Rvcik7CisJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAwKTsKKwl9CiAJaWYgKGRyZXQpIHsKIAkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKIAkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwpAQCAtNzQwLDExICs3NDIsMTMgQEAKIAlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7CiAJaW50IGk7CiAJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKLQlib29sIGRyZXQ7CisJYm9vbCBkcmV0ID0gZmFsc2U7CiAKLQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cywgMSk7Ci0JZHJldCA9IHJhZGVvbl9kZGNfcHJvYmUocmFkZW9uX2Nvbm5lY3Rvcik7Ci0JcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMsIDApOworCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKSB7CisJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAxKTsKKwkJZHJldCA9IHJhZGVvbl9kZGNfcHJvYmUocmFkZW9uX2Nvbm5lY3Rvcik7CisJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAwKTsKKwl9CiAJaWYgKGRyZXQpIHsKIAkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKIAkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwpAQCAtNzc2LDcgKzc4MCw3IEBACiAJCQkgKiBjb25uZWN0ZWQgYW5kIHRoZSBEVkkgcG9ydCBkaXNjb25uZWN0ZWQuICBJZiB0aGUgZWRpZCBkb2Vzbid0CiAJCQkgKiBzYXkgSERNSSwgdmljZSB2ZXJzYS4KIAkJCSAqLwotCQkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPnNoYXJlZF9kZGMgJiYgY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpIHsKKwkJCWlmIChyYWRlb25fY29ubmVjdG9yLT5zaGFyZWRfZGRjICYmIChyZXQgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpKSB7CiAJCQkJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OwogCQkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpsaXN0X2Nvbm5lY3RvcjsKIAkJCQlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqbGlzdF9yYWRlb25fY29ubmVjdG9yOwpAQCAtMTA1Niw4ICsxMDYwLDcgQEAKIAkJCXJldHVybjsKIAkJfQogCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyAmJiBpMmNfYnVzLT52YWxpZCkgewotCQkJaWYgKG1lbWNtcCgmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+cmVjLCBpMmNfYnVzLAotCQkJCSAgICBzaXplb2Yoc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYykpID09IDApIHsKKwkJCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5yZWMuaTJjX2lkID09IGkyY19idXMtPmkyY19pZCkgewogCQkJCXJhZGVvbl9jb25uZWN0b3ItPnNoYXJlZF9kZGMgPSB0cnVlOwogCQkJCXNoYXJlZF9kZGMgPSB0cnVlOwogCQkJfQpAQCAtMTM0Myw3ICsxMzQ2LDcgQEAKIAkJCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSBmYWxzZTsKIAkJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAotCQkJCQkJICAgICAgMSk7CisJCQkJCQkgICAgICByYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QpOwogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8udHZfc3RkX3Byb3BlcnR5LAogCQkJCQkJICAgICAgcmFkZW9uX2NvbWJpb3NfZ2V0X3R2X2luZm8ocmRldikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKaW5kZXggMTQ5NmNiOC4uZTlkMDg1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCkBAIC04Niw3ICs4Niw3IEBACiAJCQkJCQkmcC0+dmFsaWRhdGVkKTsKIAkJfQogCX0KLQlyZXR1cm4gcmFkZW9uX2JvX2xpc3RfdmFsaWRhdGUoJnAtPnZhbGlkYXRlZCwgcC0+aWItPmZlbmNlKTsKKwlyZXR1cm4gcmFkZW9uX2JvX2xpc3RfdmFsaWRhdGUoJnAtPnZhbGlkYXRlZCk7CiB9CiAKIGludCByYWRlb25fY3NfcGFyc2VyX2luaXQoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsIHZvaWQgKmRhdGEpCkBAIC0xODksMTIgKzE4OSwxMCBAQAogewogCXVuc2lnbmVkIGk7CiAKLQlpZiAoZXJyb3IpIHsKLQkJcmFkZW9uX2JvX2xpc3RfdW52YWxpZGF0ZSgmcGFyc2VyLT52YWxpZGF0ZWQsCi0JCQkJCQlwYXJzZXItPmliLT5mZW5jZSk7Ci0JfSBlbHNlIHsKLQkJcmFkZW9uX2JvX2xpc3RfdW5yZXNlcnZlKCZwYXJzZXItPnZhbGlkYXRlZCk7CisJaWYgKCFlcnJvciAmJiBwYXJzZXItPmliKSB7CisJCXJhZGVvbl9ib19saXN0X2ZlbmNlKCZwYXJzZXItPnZhbGlkYXRlZCwgcGFyc2VyLT5pYi0+ZmVuY2UpOwogCX0KKwlyYWRlb25fYm9fbGlzdF91bnJlc2VydmUoJnBhcnNlci0+dmFsaWRhdGVkKTsKIAlmb3IgKGkgPSAwOyBpIDwgcGFyc2VyLT5ucmVsb2NzOyBpKyspIHsKIAkJaWYgKHBhcnNlci0+cmVsb2NzW2ldLmdvYmopIHsKIAkJCW11dGV4X2xvY2soJnBhcnNlci0+cmRldi0+ZGRldi0+c3RydWN0X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwppbmRleCA2YTkyZjk5Li43ZTE3YTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC0yNzgsNyArMjc4LDcgQEAKIAkJRFJNX0lORk8oIiAgJXNcbiIsIGNvbm5lY3Rvcl9uYW1lc1tjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlXSk7CiAJCWlmIChyYWRlb25fY29ubmVjdG9yLT5ocGQuaHBkICE9IFJBREVPTl9IUERfTk9ORSkKIAkJCURSTV9JTkZPKCIgICVzXG4iLCBocGRfbmFtZXNbcmFkZW9uX2Nvbm5lY3Rvci0+aHBkLmhwZF0pOwotCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKKwkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpIHsKIAkJCURSTV9JTkZPKCIgIEREQzogMHgleCAweCV4IDB4JXggMHgleCAweCV4IDB4JXggMHgleCAweCV4XG4iLAogCQkJCSByYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5yZWMubWFza19jbGtfcmVnLAogCQkJCSByYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5yZWMubWFza19kYXRhX3JlZywKQEAgLTI4OCw2ICsyODgsMTUgQEAKIAkJCQkgcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+cmVjLmVuX2RhdGFfcmVnLAogCQkJCSByYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5yZWMueV9jbGtfcmVnLAogCQkJCSByYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5yZWMueV9kYXRhX3JlZyk7CisJCX0gZWxzZSB7CisJCQlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBIHx8CisJCQkgICAgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSB8fAorCQkJICAgIGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUQgfHwKKwkJCSAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklBIHx8CisJCQkgICAgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEgfHwKKwkJCSAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQikKKwkJCQlEUk1fSU5GTygiICBEREM6IG5vIGRkYyBidXMgLSBwb3NzaWJsZSBCSU9TIGJ1ZyAtIHBsZWFzZSByZXBvcnQgdG8geG9yZy1kcml2ZXItYXRpQGxpc3RzLngub3JnXG4iKTsKKwkJfQogCQlEUk1fSU5GTygiICBFbmNvZGVyczpcbiIpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewogCQkJcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKaW5kZXggZTEzNzg1Mi4uYzU3YWQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKQEAgLTEwNiw5ICsxMDYsMTAgQEAKICAqIDEuMjktIFI1MDAgM0QgY21kIGJ1ZmZlciBzdXBwb3J0CiAgKiAxLjMwLSBBZGQgc3VwcG9ydCBmb3Igb2NjbHVzaW9uIHF1ZXJpZXMKICAqIDEuMzEtIEFkZCBzdXBwb3J0IGZvciBudW0gWiBwaXBlcyBmcm9tIEdFVF9QQVJBTQorICogMS4zMi0gZml4ZXMgZm9yIHJ2NzQwIHNldHVwCiAgKi8KICNkZWZpbmUgRFJJVkVSX01BSk9SCQkxCi0jZGVmaW5lIERSSVZFUl9NSU5PUgkJMzEKKyNkZWZpbmUgRFJJVkVSX01JTk9SCQkzMgogI2RlZmluZSBEUklWRVJfUEFUQ0hMRVZFTAkwCiAKIGVudW0gcmFkZW9uX2NwX21pY3JvY29kZV92ZXJzaW9uIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDgyZWI1NTEuLjNjOTE3MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtMTU2LDYgKzE1NiwyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCByYWRlb25fZW5jb2Rlcl9pc19kaWdpdGFsKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3dpdGNoIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgeworCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfTFZEUzoKKwljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1RNRFMxOgorCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX1RNRFMxOgorCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfTFZUTTE6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EVk8xOgorCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RWTzE6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EREk6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFk6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUE6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkxOgorCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMjoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KIHZvaWQKIHJhZGVvbl9saW5rX2VuY29kZXJfY29ubmVjdG9yKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CkBAIC0yMDIsNyArMjIyLDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgewogCQlyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiByYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzKQorCQlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiByYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzKQogCQkJcmV0dXJuIGNvbm5lY3RvcjsKIAl9CiAJcmV0dXJuIE5VTEw7CkBAIC02NzYsMzEgKzY5NiwxMSBAQAogCiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCi0JaWYgKEFTSUNfSVNfRENFMzIocmRldikpIHsKLQkJaWYgKGRpZy0+ZGlnX2Jsb2NrKQotCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBESUcyRW5jb2RlckNvbnRyb2wpOwotCQllbHNlCi0JCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERJRzFFbmNvZGVyQ29udHJvbCk7Ci0JCW51bSA9IGRpZy0+ZGlnX2Jsb2NrICsgMTsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkKSB7Ci0JCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZOgotCQkJLyogWFhYIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGljaCBkaWcgZW5jb2RlciB3ZSBwaWNrIGFzIGxvbmcgYXMgaXQncwotCQkJICogbm90IGFscmVhZHkgaW4gdXNlCi0JCQkgKi8KLQkJCWlmIChkaWdfY29ubmVjdG9yLT5saW5rYikKLQkJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERJRzJFbmNvZGVyQ29udHJvbCk7Ci0JCQllbHNlCi0JCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBESUcxRW5jb2RlckNvbnRyb2wpOwotCQkJbnVtID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9MVlRNQToKLQkJCS8qIE9ubHkgZGlnMiBlbmNvZGVyIGNhbiBkcml2ZSBMVlRNQSAqLwotCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBESUcyRW5jb2RlckNvbnRyb2wpOwotCQkJbnVtID0gMjsKLQkJCWJyZWFrOwotCQl9Ci0JfQorCWlmIChkaWctPmRpZ19lbmNvZGVyKQorCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERJRzJFbmNvZGVyQ29udHJvbCk7CisJZWxzZQorCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERJRzFFbmNvZGVyQ29udHJvbCk7CisJbnVtID0gZGlnLT5kaWdfZW5jb2RlciArIDE7CiAKIAlhdG9tX3BhcnNlX2NtZF9oZWFkZXIocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICZmcmV2LCAmY3Jldik7CiAKQEAgLTgyMiw3ICs4MjIsNyBAQAogCQkJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CiAJfQogCWlmIChBU0lDX0lTX0RDRTMyKHJkZXYpKSB7Ci0JCWlmIChkaWctPmRpZ19ibG9jaykKKwkJaWYgKGRpZy0+ZGlnX2VuY29kZXIgPT0gMSkKIAkJCWFyZ3MudjIuYWNDb25maWcudWNFbmNvZGVyU2VsID0gMTsKIAkJaWYgKGRpZ19jb25uZWN0b3ItPmxpbmtiKQogCQkJYXJncy52Mi5hY0NvbmZpZy51Y0xpbmtTZWwgPSAxOwpAQCAtODQ5LDE3ICs4NDksMTYgQEAKIAkJCQlhcmdzLnYyLmFjQ29uZmlnLmZDb2hlcmVudE1vZGUgPSAxOwogCQl9CiAJfSBlbHNlIHsKKwogCQlhcmdzLnYxLnVjQ29uZmlnID0gQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfQ0xLU1JDX1BQTEw7CiAKKwkJaWYgKGRpZy0+ZGlnX2VuY29kZXIpCisJCQlhcmdzLnYxLnVjQ29uZmlnIHw9IEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0RJRzJfRU5DT0RFUjsKKwkJZWxzZQorCQkJYXJncy52MS51Y0NvbmZpZyB8PSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcxX0VOQ09ERVI7CisKIAkJc3dpdGNoIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgewogCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWToKLQkJCS8qIFhYWCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hpY2ggZGlnIGVuY29kZXIgd2UgcGljayBhcyBsb25nIGFzIGl0J3MKLQkJCSAqIG5vdCBhbHJlYWR5IGluIHVzZQotCQkJICovCi0JCQlpZiAoZGlnX2Nvbm5lY3Rvci0+bGlua2IpCi0JCQkJYXJncy52MS51Y0NvbmZpZyB8PSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcyX0VOQ09ERVI7Ci0JCQllbHNlCi0JCQkJYXJncy52MS51Y0NvbmZpZyB8PSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcxX0VOQ09ERVI7CiAJCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CiAJCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayA+IDE2NTAwMCkgewogCQkJCQlpZiAoZGlnX2Nvbm5lY3Rvci0+aWdwX2xhbmVfaW5mbyAmIDB4MykKQEAgLTg3OCwxMCArODc3LDYgQEAKIAkJCQl9CiAJCQl9CiAJCQlicmVhazsKLQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUE6Ci0JCQkvKiBPbmx5IGRpZzIgZW5jb2RlciBjYW4gZHJpdmUgTFZUTUEgKi8KLQkJCWFyZ3MudjEudWNDb25maWcgfD0gQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfRElHMl9FTkNPREVSOwotCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrID4gMTY1MDAwKQpAQCAtMTA0Niw2ICsxMDQxLDcgQEAKIAl1bmlvbiBjcnRjX3NvdXJjX3BhcmFtIGFyZ3M7CiAJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgU2VsZWN0Q1JUQ19Tb3VyY2UpOwogCXVpbnQ4X3QgZnJldiwgY3JldjsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZzsKIAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIApAQCAtMTEwOSw0MCArMTEwNSwxNiBAQAogCQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFk6CiAJCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTE6CiAJCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTI6Ci0JCQkJaWYgKEFTSUNfSVNfRENFMzIocmRldikpIHsKLQkJCQkJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkKQotCQkJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RJRzJfRU5DT0RFUl9JRDsKLQkJCQkJZWxzZQotCQkJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RJRzFfRU5DT0RFUl9JRDsKLQkJCQl9IGVsc2UgewotCQkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCQkJCQlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvcjsKLQkJCQkJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZ19jb25uZWN0b3I7Ci0KLQkJCQkJY29ubmVjdG9yID0gcmFkZW9uX2dldF9jb25uZWN0b3JfZm9yX2VuY29kZXIoZW5jb2Rlcik7Ci0JCQkJCWlmICghY29ubmVjdG9yKQotCQkJCQkJcmV0dXJuOwotCQkJCQlyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCQkJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2KQotCQkJCQkJcmV0dXJuOwotCQkJCQlkaWdfY29ubmVjdG9yID0gcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXY7Ci0KLQkJCQkJLyogWFhYIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGljaCBkaWcgZW5jb2RlciB3ZSBwaWNrIGFzIGxvbmcgYXMgaXQncwotCQkJCQkgKiBub3QgYWxyZWFkeSBpbiB1c2UKLQkJCQkJICovCi0JCQkJCWlmIChkaWdfY29ubmVjdG9yLT5saW5rYikKLQkJCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9ESUcyX0VOQ09ERVJfSUQ7Ci0JCQkJCWVsc2UKLQkJCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9ESUcxX0VOQ09ERVJfSUQ7Ci0JCQkJfQorCQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUE6CisJCQkJZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQkJCWlmIChkaWctPmRpZ19lbmNvZGVyKQorCQkJCQlhcmdzLnYyLnVjRW5jb2RlcklEID0gQVNJQ19JTlRfRElHMl9FTkNPREVSX0lEOworCQkJCWVsc2UKKwkJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RJRzFfRU5DT0RFUl9JRDsKIAkJCQlicmVhazsKIAkJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RWTzE6CiAJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RWT19FTkNPREVSX0lEOwogCQkJCWJyZWFrOwotCQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUE6Ci0JCQkJLyogT25seSBkaWcyIGVuY29kZXIgY2FuIGRyaXZlIExWVE1BICovCi0JCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RJRzJfRU5DT0RFUl9JRDsKLQkJCQlicmVhazsKIAkJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzE6CiAJCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQogCQkJCQlhcmdzLnYyLnVjRW5jb2RlcklEID0gQVNJQ19JTlRfVFZfRU5DT0RFUl9JRDsKQEAgLTEyMDIsNiArMTE3NCw0NyBAQAogCX0KIH0KIAorc3RhdGljIGludCByYWRlb25fYXRvbV9waWNrX2RpZ19lbmNvZGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoZW5jb2Rlci0+Y3J0Yyk7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqdGVzdF9lbmNvZGVyOworCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnOworCXVpbnQzMl90IGRpZ19lbmNfaW5fdXNlID0gMDsKKwkvKiBvbiBEQ0UzMiBhbmQgZW5jb2RlciBjYW4gZHJpdmVyIGFueSBibG9jayBzbyBqdXN0IGNydGMgaWQgKi8KKwlpZiAoQVNJQ19JU19EQ0UzMihyZGV2KSkgeworCQlyZXR1cm4gcmFkZW9uX2NydGMtPmNydGNfaWQ7CisJfQorCisJLyogb24gRENFMyAtIExWVE1BIGNhbiBvbmx5IGJlIGRyaXZlbiBieSBESUdCICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZXN0X2VuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgeworCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl90ZXN0X2VuY29kZXI7CisKKwkJaWYgKGVuY29kZXIgPT0gdGVzdF9lbmNvZGVyKQorCQkJY29udGludWU7CisKKwkJaWYgKCFyYWRlb25fZW5jb2Rlcl9pc19kaWdpdGFsKHRlc3RfZW5jb2RlcikpCisJCQljb250aW51ZTsKKworCQlyYWRlb25fdGVzdF9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIodGVzdF9lbmNvZGVyKTsKKwkJZGlnID0gcmFkZW9uX3Rlc3RfZW5jb2Rlci0+ZW5jX3ByaXY7CisKKwkJaWYgKGRpZy0+ZGlnX2VuY29kZXIgPj0gMCkKKwkJCWRpZ19lbmNfaW5fdXNlIHw9ICgxIDw8IGRpZy0+ZGlnX2VuY29kZXIpOworCX0KKworCWlmIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCA9PSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUEpIHsKKwkJaWYgKGRpZ19lbmNfaW5fdXNlICYgMHgyKQorCQkJRFJNX0VSUk9SKCJMVkRTIHJlcXVpcmVkIGRpZ2l0YWwgZW5jb2RlciAyIGJ1dCBpdCB3YXMgaW4gdXNlIC0gc3RlYWxpbmdcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKCEoZGlnX2VuY19pbl91c2UgJiAxKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyB2b2lkCiByYWRlb25fYXRvbV9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKIAkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCkBAIC0xMjE0LDEyICsxMjI3LDkgQEAKIAogCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmCiAJICAgIChBVE9NX0RFVklDRV9ERlBfU1VQUE9SVCB8IEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgewotCQlpZiAocmFkZW9uX2VuY29kZXItPmVuY19wcml2KSB7Ci0JCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZzsKLQotCQkJZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwotCQkJZGlnLT5kaWdfYmxvY2sgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKLQkJfQorCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwkJaWYgKGRpZykKKwkJCWRpZy0+ZGlnX2VuY29kZXIgPSByYWRlb25fYXRvbV9waWNrX2RpZ19lbmNvZGVyKGVuY29kZXIpOwogCX0KIAlyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgPSBhZGp1c3RlZF9tb2RlLT5jbG9jazsKIApAQCAtMTM3OSw3ICsxMzg5LDEzIEBACiBzdGF0aWMgdm9pZCByYWRlb25fYXRvbV9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogewogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZzsKIAlyYWRlb25fYXRvbV9lbmNvZGVyX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOworCisJaWYgKHJhZGVvbl9lbmNvZGVyX2lzX2RpZ2l0YWwoZW5jb2RlcikpIHsKKwkJZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQlkaWctPmRpZ19lbmNvZGVyID0gLTE7CisJfQogCXJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlID0gMDsKIH0KIApAQCAtMTQzNiw2ICsxNDUyLDcgQEAKIAogCS8qIGNvaGVyZW50IG1vZGUgYnkgZGVmYXVsdCAqLwogCWRpZy0+Y29oZXJlbnRfbW9kZSA9IHRydWU7CisJZGlnLT5kaWdfZW5jb2RlciA9IC0xOwogCiAJcmV0dXJuIGRpZzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCmluZGV4IDNiYTIxM2QuLmQ3MWUzNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5yZWY7CiAKLQltZW1zZXRfaW8oZmJwdHIsIDB4ZmYsIGFsaWduZWRfc2l6ZSk7CisJbWVtc2V0X2lvKGZicHRyLCAweDAsIGFsaWduZWRfc2l6ZSk7CiAKIAlzdHJjcHkoaW5mby0+Zml4LmlkLCAicmFkZW9uZHJtZmIiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwppbmRleCAwZTEzMjVlLi5kYjhlOWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwpAQCAtMzA4LDYgKzMwOCw5IEBACiAJfQogCXJvYmogPSBnb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAlyID0gcmFkZW9uX2JvX3dhaXQocm9iaiwgTlVMTCwgZmFsc2UpOworCS8qIGNhbGxiYWNrIGh3IHNwZWNpZmljIGZ1bmN0aW9ucyBpZiBhbnkgKi8KKwlpZiAocm9iai0+cmRldi0+YXNpYy0+aW9jdGxfd2FpdF9pZGxlKQorCQlyb2JqLT5yZGV2LT5hc2ljLT5pb2N0bF93YWl0X2lkbGUocm9iai0+cmRldiwgcm9iaik7CiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdvYmopOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCmluZGV4IDk2Yjg1MWYuLmU4MWIyYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKQEAgLTI5OSw3ICsyOTksNyBAQAogc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnIHsKIAkvKiBhdG9tIGRpZyAqLwogCWJvb2wgY29oZXJlbnRfbW9kZTsKLQlpbnQgZGlnX2Jsb2NrOworCWludCBkaWdfZW5jb2RlcjsgLyogLTEgZGlzYWJsZWQsIDAgRElHQSwgMSBESUdCICovCiAJLyogYXRvbSBsdmRzICovCiAJdWludDMyX3QgbHZkc19taXNjOwogCXVpbnQxNl90IHBhbmVsX3B3cl9kZWxheTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKaW5kZXggZDcyYTcxYi4uZjFkYTM3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKQEAgLTMwNiwxMSArMzA2LDEwIEBACiAJfQogfQogCi1pbnQgcmFkZW9uX2JvX2xpc3RfdmFsaWRhdGUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgdm9pZCAqZmVuY2UpCitpbnQgcmFkZW9uX2JvX2xpc3RfdmFsaWRhdGUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2JvX2xpc3QgKmxvYmo7CiAJc3RydWN0IHJhZGVvbl9ibyAqYm87Ci0Jc3RydWN0IHJhZGVvbl9mZW5jZSAqb2xkX2ZlbmNlID0gTlVMTDsKIAlpbnQgcjsKIAogCXIgPSByYWRlb25fYm9fbGlzdF9yZXNlcnZlKGhlYWQpOwpAQCAtMzM0LDMyICszMzMsMjcgQEAKIAkJfQogCQlsb2JqLT5ncHVfb2Zmc2V0ID0gcmFkZW9uX2JvX2dwdV9vZmZzZXQoYm8pOwogCQlsb2JqLT50aWxpbmdfZmxhZ3MgPSBiby0+dGlsaW5nX2ZsYWdzOwotCQlpZiAoZmVuY2UpIHsKLQkJCW9sZF9mZW5jZSA9IChzdHJ1Y3QgcmFkZW9uX2ZlbmNlICopYm8tPnRiby5zeW5jX29iajsKLQkJCWJvLT50Ym8uc3luY19vYmogPSByYWRlb25fZmVuY2VfcmVmKGZlbmNlKTsKLQkJCWJvLT50Ym8uc3luY19vYmpfYXJnID0gTlVMTDsKLQkJfQotCQlpZiAob2xkX2ZlbmNlKSB7Ci0JCQlyYWRlb25fZmVuY2VfdW5yZWYoJm9sZF9mZW5jZSk7Ci0JCX0KIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcmFkZW9uX2JvX2xpc3RfdW52YWxpZGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB2b2lkICpmZW5jZSkKK3ZvaWQgcmFkZW9uX2JvX2xpc3RfZmVuY2Uoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgdm9pZCAqZmVuY2UpCiB7CiAJc3RydWN0IHJhZGVvbl9ib19saXN0ICpsb2JqOwotCXN0cnVjdCByYWRlb25fZmVuY2UgKm9sZF9mZW5jZTsKKwlzdHJ1Y3QgcmFkZW9uX2JvICpibzsKKwlzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpvbGRfZmVuY2UgPSBOVUxMOwogCi0JaWYgKGZlbmNlKQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvYmosIGhlYWQsIGxpc3QpIHsKLQkJCW9sZF9mZW5jZSA9IHRvX3JhZGVvbl9mZW5jZShsb2JqLT5iby0+dGJvLnN5bmNfb2JqKTsKLQkJCWlmIChvbGRfZmVuY2UgPT0gZmVuY2UpIHsKLQkJCQlsb2JqLT5iby0+dGJvLnN5bmNfb2JqID0gTlVMTDsKLQkJCQlyYWRlb25fZmVuY2VfdW5yZWYoJm9sZF9mZW5jZSk7Ci0JCQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2JqLCBoZWFkLCBsaXN0KSB7CisJCWJvID0gbG9iai0+Ym87CisJCXNwaW5fbG9jaygmYm8tPnRiby5sb2NrKTsKKwkJb2xkX2ZlbmNlID0gKHN0cnVjdCByYWRlb25fZmVuY2UgKiliby0+dGJvLnN5bmNfb2JqOworCQliby0+dGJvLnN5bmNfb2JqID0gcmFkZW9uX2ZlbmNlX3JlZihmZW5jZSk7CisJCWJvLT50Ym8uc3luY19vYmpfYXJnID0gTlVMTDsKKwkJc3Bpbl91bmxvY2soJmJvLT50Ym8ubG9jayk7CisJCWlmIChvbGRfZmVuY2UpIHsKKwkJCXJhZGVvbl9mZW5jZV91bnJlZigmb2xkX2ZlbmNlKTsKIAkJfQotCXJhZGVvbl9ib19saXN0X3VucmVzZXJ2ZShoZWFkKTsKKwl9CiB9CiAKIGludCByYWRlb25fYm9fZmJkZXZfbW1hcChzdHJ1Y3QgcmFkZW9uX2JvICpibywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmgKaW5kZXggYTAyZjE4MC4uN2FiNDNkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmgKQEAgLTE1Niw4ICsxNTYsOCBAQAogCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwogZXh0ZXJuIGludCByYWRlb25fYm9fbGlzdF9yZXNlcnZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX2JvX2xpc3RfdW5yZXNlcnZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwotZXh0ZXJuIGludCByYWRlb25fYm9fbGlzdF92YWxpZGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB2b2lkICpmZW5jZSk7Ci1leHRlcm4gdm9pZCByYWRlb25fYm9fbGlzdF91bnZhbGlkYXRlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHZvaWQgKmZlbmNlKTsKK2V4dGVybiBpbnQgcmFkZW9uX2JvX2xpc3RfdmFsaWRhdGUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CitleHRlcm4gdm9pZCByYWRlb25fYm9fbGlzdF9mZW5jZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB2b2lkICpmZW5jZSk7CiBleHRlcm4gaW50IHJhZGVvbl9ib19mYmRldl9tbWFwKHN0cnVjdCByYWRlb25fYm8gKmJvLAogCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIGV4dGVybiBpbnQgcmFkZW9uX2JvX3NldF90aWxpbmdfZmxhZ3Moc3RydWN0IHJhZGVvbl9ibyAqYm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMKaW5kZXggNGQxMmIyZC4uNjU3OWViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYwpAQCAtNDEsNjggKzQxLDU1IEBACiB7CiAJc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2U7CiAJc3RydWN0IHJhZGVvbl9pYiAqbmliOwotCXVuc2lnbmVkIGxvbmcgaTsKLQlpbnQgciA9IDA7CisJaW50IHIgPSAwLCBpLCBjOwogCiAJKmliID0gTlVMTDsKIAlyID0gcmFkZW9uX2ZlbmNlX2NyZWF0ZShyZGV2LCAmZmVuY2UpOwogCWlmIChyKSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBmZW5jZSBmb3IgbmV3IElCXG4iKTsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIGZlbmNlIGZvciBuZXcgSUJcbiIpOwogCQlyZXR1cm4gcjsKIAl9CiAJbXV0ZXhfbG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7Ci0JaSA9IGZpbmRfZmlyc3RfemVyb19iaXQocmRldi0+aWJfcG9vbC5hbGxvY19ibSwgUkFERU9OX0lCX1BPT0xfU0laRSk7Ci0JaWYgKGkgPCBSQURFT05fSUJfUE9PTF9TSVpFKSB7Ci0JCXNldF9iaXQoaSwgcmRldi0+aWJfcG9vbC5hbGxvY19ibSk7Ci0JCXJkZXYtPmliX3Bvb2wuaWJzW2ldLmxlbmd0aF9kdyA9IDA7Ci0JCSppYiA9ICZyZGV2LT5pYl9wb29sLmlic1tpXTsKLQkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKLQkJZ290byBvdXQ7CisJZm9yIChpID0gcmRldi0+aWJfcG9vbC5oZWFkX2lkLCBjID0gMCwgbmliID0gTlVMTDsgYyA8IFJBREVPTl9JQl9QT09MX1NJWkU7IGMrKywgaSsrKSB7CisJCWkgJj0gKFJBREVPTl9JQl9QT09MX1NJWkUgLSAxKTsKKwkJaWYgKHJkZXYtPmliX3Bvb2wuaWJzW2ldLmZyZWUpIHsKKwkJCW5pYiA9ICZyZGV2LT5pYl9wb29sLmlic1tpXTsKKwkJCWJyZWFrOworCQl9CiAJfQotCWlmIChsaXN0X2VtcHR5KCZyZGV2LT5pYl9wb29sLnNjaGVkdWxlZF9pYnMpKSB7Ci0JCS8qIHdlIGdvIGRvIG5vdGhpbmdzIGhlcmUgKi8KKwlpZiAobmliID09IE5VTEwpIHsKKwkJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBpdCBtZWFucyB3ZSBhbGxvY2F0ZWQgYWxsCisJCSAqIElCIGFuZCBoYXZlbid0IHNjaGVkdWxlZCBvbmUgeWV0LCByZXR1cm4gRUJVU1kgdG8KKwkJICogdXNlcnNwYWNlIGhvcGluZyB0aGF0IG9uIGlvY3RsIHJlY2FsbCB3ZSBnZXQgYmV0dGVyCisJCSAqIGx1Y2sKKwkJICovCisJCWRldl9lcnIocmRldi0+ZGV2LCAibm8gZnJlZSBpbmRpcmVjdCBidWZmZXIgIVxuIik7CiAJCW11dGV4X3VubG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7Ci0JCURSTV9FUlJPUigiYWxsIElCIGFsbG9jYXRlZCBub25lIHNjaGVkdWxlZC5cbiIpOwotCQlyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7CisJCXJhZGVvbl9mZW5jZV91bnJlZigmZmVuY2UpOworCQlyZXR1cm4gLUVCVVNZOwogCX0KLQkvKiBnZXQgdGhlIGZpcnN0IGliIG9uIHRoZSBzY2hlZHVsZWQgbGlzdCAqLwotCW5pYiA9IGxpc3RfZW50cnkocmRldi0+aWJfcG9vbC5zY2hlZHVsZWRfaWJzLm5leHQsCi0JCQkgc3RydWN0IHJhZGVvbl9pYiwgbGlzdCk7Ci0JaWYgKG5pYi0+ZmVuY2UgPT0gTlVMTCkgewotCQkvKiB3ZSBnbyBkbyBub3RoaW5ncyBoZXJlICovCisJcmRldi0+aWJfcG9vbC5oZWFkX2lkID0gKG5pYi0+aWR4ICsgMSkgJiAoUkFERU9OX0lCX1BPT0xfU0laRSAtIDEpOworCW5pYi0+ZnJlZSA9IGZhbHNlOworCWlmIChuaWItPmZlbmNlKSB7CiAJCW11dGV4X3VubG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7Ci0JCURSTV9FUlJPUigiSUIgJWx1IHNjaGVkdWxlZCB3aXRob3V0IGEgZmVuY2UuXG4iLCBuaWItPmlkeCk7Ci0JCXIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKLQotCXIgPSByYWRlb25fZmVuY2Vfd2FpdChuaWItPmZlbmNlLCBmYWxzZSk7Ci0JaWYgKHIpIHsKLQkJRFJNX0VSUk9SKCJyYWRlb246IElCKCVsdToweCUwMTZsWDoldSlcbiIsIG5pYi0+aWR4LAotCQkJICAodW5zaWduZWQgbG9uZyluaWItPmdwdV9hZGRyLCBuaWItPmxlbmd0aF9kdyk7Ci0JCURSTV9FUlJPUigicmFkZW9uOiBHUFUgbG9ja3VwIGRldGVjdGVkLCBmYWlsIHRvIGdldCBhIElCXG4iKTsKLQkJZ290byBvdXQ7CisJCXIgPSByYWRlb25fZmVuY2Vfd2FpdChuaWItPmZlbmNlLCBmYWxzZSk7CisJCWlmIChyKSB7CisJCQlkZXZfZXJyKHJkZXYtPmRldiwgImVycm9yIHdhaXRpbmcgZmVuY2Ugb2YgSUIoJXU6MHglMDE2bFg6JXUpXG4iLAorCQkJCW5pYi0+aWR4LCAodW5zaWduZWQgbG9uZyluaWItPmdwdV9hZGRyLCBuaWItPmxlbmd0aF9kdyk7CisJCQltdXRleF9sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKKwkJCW5pYi0+ZnJlZSA9IHRydWU7CisJCQltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOworCQkJcmFkZW9uX2ZlbmNlX3VucmVmKCZmZW5jZSk7CisJCQlyZXR1cm4gcjsKKwkJfQorCQltdXRleF9sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKIAl9CiAJcmFkZW9uX2ZlbmNlX3VucmVmKCZuaWItPmZlbmNlKTsKLQorCW5pYi0+ZmVuY2UgPSBmZW5jZTsKIAluaWItPmxlbmd0aF9kdyA9IDA7Ci0KLQkvKiBzY2hlZHVsZWQgbGlzdCBpcyBhY2Nlc3NlZCBoZXJlICovCi0JbXV0ZXhfbG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7Ci0JbGlzdF9kZWwoJm5pYi0+bGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm5pYi0+bGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKLQogCSppYiA9IG5pYjsKLW91dDoKLQlpZiAocikgewotCQlyYWRlb25fZmVuY2VfdW5yZWYoJmZlbmNlKTsKLQl9IGVsc2UgewotCQkoKmliKS0+ZmVuY2UgPSBmZW5jZTsKLQl9Ci0JcmV0dXJuIHI7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgcmFkZW9uX2liX2ZyZWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKippYikKQEAgLTExMywxOSArMTAwLDEwIEBACiAJaWYgKHRtcCA9PSBOVUxMKSB7CiAJCXJldHVybjsKIAl9Ci0JbXV0ZXhfbG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZ0bXAtPmxpc3QpICYmICFyYWRlb25fZmVuY2Vfc2lnbmFsZWQodG1wLT5mZW5jZSkpIHsKLQkJLyogSUIgaXMgc2NoZWR1bGVkICYgbm90IHNpZ25hbGVkIGRvbid0IGRvIGFueXRoaW5ncyAqLwotCQltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwotCQlyZXR1cm47Ci0JfQotCWxpc3RfZGVsKCZ0bXAtPmxpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZ0bXAtPmxpc3QpOwotCWlmICh0bXAtPmZlbmNlKQorCWlmICghdG1wLT5mZW5jZS0+ZW1pdGVkKQogCQlyYWRlb25fZmVuY2VfdW5yZWYoJnRtcC0+ZmVuY2UpOwotCi0JdG1wLT5sZW5ndGhfZHcgPSAwOwotCWNsZWFyX2JpdCh0bXAtPmlkeCwgcmRldi0+aWJfcG9vbC5hbGxvY19ibSk7CisJbXV0ZXhfbG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CisJdG1wLT5mcmVlID0gdHJ1ZTsKIAltdXRleF91bmxvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwogfQogCkBAIC0xMzUsNyArMTEzLDcgQEAKIAogCWlmICghaWItPmxlbmd0aF9kdyB8fCAhcmRldi0+Y3AucmVhZHkpIHsKIAkJLyogVE9ETzogTm90aGluZ3MgaW4gdGhlIGliIHdlIHNob3VsZCByZXBvcnQuICovCi0JCURSTV9FUlJPUigicmFkZW9uOiBjb3VsZG4ndCBzY2hlZHVsZSBJQiglbHUpLlxuIiwgaWItPmlkeCk7CisJCURSTV9FUlJPUigicmFkZW9uOiBjb3VsZG4ndCBzY2hlZHVsZSBJQigldSkuXG4iLCBpYi0+aWR4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNDgsNyArMTI2LDggQEAKIAlyYWRlb25fcmluZ19pYl9leGVjdXRlKHJkZXYsIGliKTsKIAlyYWRlb25fZmVuY2VfZW1pdChyZGV2LCBpYi0+ZmVuY2UpOwogCW11dGV4X2xvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwotCWxpc3RfYWRkX3RhaWwoJmliLT5saXN0LCAmcmRldi0+aWJfcG9vbC5zY2hlZHVsZWRfaWJzKTsKKwkvKiBvbmNlIHNjaGVkdWxlZCBJQiBpcyBjb25zaWRlcmVkIGZyZWUgYW5kIHByb3RlY3RlZCBieSB0aGUgZmVuY2UgKi8KKwlpYi0+ZnJlZSA9IHRydWU7CiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKIAlyYWRlb25fcmluZ191bmxvY2tfY29tbWl0KHJkZXYpOwogCXJldHVybiAwOwpAQCAtMTY0LDcgKzE0Myw2IEBACiAJaWYgKHJkZXYtPmliX3Bvb2wucm9iaikKIAkJcmV0dXJuIDA7CiAJLyogQWxsb2NhdGUgMU0gb2JqZWN0IGJ1ZmZlciAqLwotCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5pYl9wb29sLnNjaGVkdWxlZF9pYnMpOwogCXIgPSByYWRlb25fYm9fY3JlYXRlKHJkZXYsIE5VTEwsICBSQURFT05fSUJfUE9PTF9TSVpFKjY0KjEwMjQsCiAJCQkJdHJ1ZSwgUkFERU9OX0dFTV9ET01BSU5fR1RULAogCQkJCSZyZGV2LT5pYl9wb29sLnJvYmopOwpAQCAtMTk1LDkgKzE3Myw5IEBACiAJCXJkZXYtPmliX3Bvb2wuaWJzW2ldLnB0ciA9IHB0ciArIG9mZnNldDsKIAkJcmRldi0+aWJfcG9vbC5pYnNbaV0uaWR4ID0gaTsKIAkJcmRldi0+aWJfcG9vbC5pYnNbaV0ubGVuZ3RoX2R3ID0gMDsKLQkJSU5JVF9MSVNUX0hFQUQoJnJkZXYtPmliX3Bvb2wuaWJzW2ldLmxpc3QpOworCQlyZGV2LT5pYl9wb29sLmlic1tpXS5mcmVlID0gdHJ1ZTsKIAl9Ci0JYml0bWFwX3plcm8ocmRldi0+aWJfcG9vbC5hbGxvY19ibSwgUkFERU9OX0lCX1BPT0xfU0laRSk7CisJcmRldi0+aWJfcG9vbC5oZWFkX2lkID0gMDsKIAlyZGV2LT5pYl9wb29sLnJlYWR5ID0gdHJ1ZTsKIAlEUk1fSU5GTygicmFkZW9uOiBpYiBwb29sIHJlYWR5LlxuIik7CiAJaWYgKHJhZGVvbl9kZWJ1Z2ZzX2liX2luaXQocmRldikpIHsKQEAgLTIxNCw3ICsxOTIsNiBAQAogCQlyZXR1cm47CiAJfQogCW11dGV4X2xvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwotCWJpdG1hcF96ZXJvKHJkZXYtPmliX3Bvb2wuYWxsb2NfYm0sIFJBREVPTl9JQl9QT09MX1NJWkUpOwogCWlmIChyZGV2LT5pYl9wb29sLnJvYmopIHsKIAkJciA9IHJhZGVvbl9ib19yZXNlcnZlKHJkZXYtPmliX3Bvb2wucm9iaiwgZmFsc2UpOwogCQlpZiAobGlrZWx5KHIgPT0gMCkpIHsKQEAgLTM2Myw3ICszNDAsNyBAQAogCWlmIChpYiA9PSBOVUxMKSB7CiAJCXJldHVybiAwOwogCX0KLQlzZXFfcHJpbnRmKG0sICJJQiAlMDRsdVxuIiwgaWItPmlkeCk7CisJc2VxX3ByaW50ZihtLCAiSUIgJTA0dVxuIiwgaWItPmlkeCk7CiAJc2VxX3ByaW50ZihtLCAiSUIgZmVuY2UgJXBcbiIsIGliLT5mZW5jZSk7CiAJc2VxX3ByaW50ZihtLCAiSUIgc2l6ZSAlMDV1IGR3b3Jkc1xuIiwgaWItPmxlbmd0aF9kdyk7CiAJZm9yIChpID0gMDsgaSA8IGliLT5sZW5ndGhfZHc7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCmluZGV4IDlmNTQxODkuLjI4N2ZjZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKQEAgLTIyMywxNSArMjIzLDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCByczQwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXVuc2lnbmVkIGk7CisJdWludDMyX3QgdG1wOworCisJZm9yIChpID0gMDsgaSA8IHJkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCS8qIHJlYWQgTUNfU1RBVFVTICovCisJCXRtcCA9IFJSRUczMigweDAxNTApOworCQlpZiAodG1wICYgKDEgPDwgMikpIHsKKwkJCXJldHVybiAwOworCQl9CisJCURSTV9VREVMQVkoMSk7CisJfQorCXJldHVybiAtMTsKK30KKwogdm9pZCByczQwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogSERQIHNhbWUgcGxhY2Ugb24gcnM0MDAgPyAqLwogCXIxMDBfaGRwX3Jlc2V0KHJkZXYpOwogCS8qIEZJWE1FOiBpcyB0aGlzIGNvcnJlY3QgPyAqLwogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKLQlpZiAocjMwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOworCWlmIChyczQwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInJzNDAwOiBGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKKwkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uICUwOHhcbiIsIFJSRUczMigweDE1MCkpOwogCX0KIH0KIApAQCAtMzcwLDggKzM4Niw4IEBACiAJcjEwMF9tY19zdG9wKHJkZXYsICZzYXZlKTsKIAogCS8qIFdhaXQgZm9yIG1jIGlkbGUgKi8KLQlpZiAocjMwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQotCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKwlpZiAocnM0MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAicnM0MDA6IFdhaXQgTUMgaWRsZSB0aW1lb3V0IGJlZm9yZSB1cGRhdGluZyBNQy5cbiIpOwogCVdSRUczMihSXzAwMDE0OF9NQ19GQl9MT0NBVElPTiwKIAkJU18wMDAxNDhfTUNfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikgfAogCQlTXzAwMDE0OF9NQ19GQl9UT1AocmRldi0+bWMudnJhbV9lbmQgPj4gMTYpKTsKQEAgLTQ0OCw3ICs0NjQsNiBAQAogCiB2b2lkIHJzNDAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcnM0MDBfc3VzcGVuZChyZGV2KTsKIAlyMTAwX2NwX2ZpbmkocmRldik7CiAJcjEwMF93Yl9maW5pKHJkZXYpOwogCXIxMDBfaWJfZmluaShyZGV2KTsKQEAgLTUyNyw3ICs1NDIsNiBAQAogCWlmIChyKSB7CiAJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KIAkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7Ci0JCXJzNDAwX3N1c3BlbmQocmRldik7CiAJCXIxMDBfY3BfZmluaShyZGV2KTsKIAkJcjEwMF93Yl9maW5pKHJkZXYpOwogCQlyMTAwX2liX2ZpbmkocmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKaW5kZXggZDUyNTU3NS4uYzM4MTg1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwpAQCAtNjEwLDcgKzYxMCw2IEBACiAKIHZvaWQgcnM2MDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyczYwMF9zdXNwZW5kKHJkZXYpOwogCXIxMDBfY3BfZmluaShyZGV2KTsKIAlyMTAwX3diX2ZpbmkocmRldik7CiAJcjEwMF9pYl9maW5pKHJkZXYpOwpAQCAtNjg5LDcgKzY4OCw2IEBACiAJaWYgKHIpIHsKIAkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLwogCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKLQkJcnM2MDBfc3VzcGVuZChyZGV2KTsKIAkJcjEwMF9jcF9maW5pKHJkZXYpOwogCQlyMTAwX3diX2ZpbmkocmRldik7CiAJCXIxMDBfaWJfZmluaShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwppbmRleCBjZDMxZGE5Li4wNmUyNzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCkBAIC02NzYsNyArNjc2LDYgQEAKIAogdm9pZCByczY5MF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXJzNjkwX3N1c3BlbmQocmRldik7CiAJcjEwMF9jcF9maW5pKHJkZXYpOwogCXIxMDBfd2JfZmluaShyZGV2KTsKIAlyMTAwX2liX2ZpbmkocmRldik7CkBAIC03NTYsNyArNzU1LDYgQEAKIAlpZiAocikgewogCQkvKiBTb21ldGhpbmdzIHdhbnQgd3JvbnQgd2l0aCB0aGUgYWNjZWwgaW5pdCBzdG9wIGFjY2VsICovCiAJCWRldl9lcnIocmRldi0+ZGV2LCAiRGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOwotCQlyczY5MF9zdXNwZW5kKHJkZXYpOwogCQlyMTAwX2NwX2ZpbmkocmRldik7CiAJCXIxMDBfd2JfZmluaShyZGV2KTsKIAkJcjEwMF9pYl9maW5pKHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCmluZGV4IDYyNzU2NzEuLjBlMWU2YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKQEAgLTUzNyw3ICs1MzcsNiBAQAogCiB2b2lkIHJ2NTE1X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcnY1MTVfc3VzcGVuZChyZGV2KTsKIAlyMTAwX2NwX2ZpbmkocmRldik7CiAJcjEwMF93Yl9maW5pKHJkZXYpOwogCXIxMDBfaWJfZmluaShyZGV2KTsKQEAgLTYxNSwxMyArNjE0LDEyIEBACiAJaWYgKHIpIHsKIAkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLwogCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKLQkJcnY1MTVfc3VzcGVuZChyZGV2KTsKIAkJcjEwMF9jcF9maW5pKHJkZXYpOwogCQlyMTAwX3diX2ZpbmkocmRldik7CiAJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKIAkJcnYzNzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKLQkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKIAkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwppbmRleCA1NWY2ZmZjLi4wMzAyMTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCkBAIC01NDksOSArNTQ5LDEyIEBACiAKIAlnYl90aWxpbmdfY29uZmlnIHw9IEJBTktfU1dBUFMoMSk7CiAKLQliYWNrZW5kX21hcCA9IHI3MDBfZ2V0X3RpbGVfcGlwZV90b19iYWNrZW5kX21hcChyZGV2LT5jb25maWcucnY3NzAubWF4X3RpbGVfcGlwZXMsCi0JCQkJCQkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9iYWNrZW5kcywKLQkJCQkJCQkoMHhmZiA8PCByZGV2LT5jb25maWcucnY3NzAubWF4X2JhY2tlbmRzKSAmIDB4ZmYpOworCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc0MCkKKwkJYmFja2VuZF9tYXAgPSAweDI4OworCWVsc2UKKwkJYmFja2VuZF9tYXAgPSByNzAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAocmRldi0+Y29uZmlnLnJ2NzcwLm1heF90aWxlX3BpcGVzLAorCQkJCQkJCQlyZGV2LT5jb25maWcucnY3NzAubWF4X2JhY2tlbmRzLAorCQkJCQkJCQkoMHhmZiA8PCByZGV2LT5jb25maWcucnY3NzAubWF4X2JhY2tlbmRzKSAmIDB4ZmYpOwogCWdiX3RpbGluZ19jb25maWcgfD0gQkFDS0VORF9NQVAoYmFja2VuZF9tYXApOwogCiAJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnID0KQEAgLTg4NywyNiArODkwLDI1IEBACiAJCQlyZXR1cm4gcjsKIAl9CiAJcnY3NzBfZ3B1X2luaXQocmRldik7Ci0KLQlpZiAoIXJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKSB7Ci0JCXIgPSByNjAwX2JsaXRfaW5pdChyZGV2KTsKKwlyID0gcjYwMF9ibGl0X2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJcjYwMF9ibGl0X2ZpbmkocmRldik7CisJCXJkZXYtPmFzaWMtPmNvcHkgPSBOVUxMOworCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgYmxpdHRlciAoJWQpIGZhbGxpbmcgYmFjayB0byBtZW1jcHlcbiIsIHIpOworCX0KKwkvKiBwaW4gY29weSBzaGFkZXIgaW50byB2cmFtICovCisJaWYgKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKSB7CisJCXIgPSByYWRlb25fYm9fcmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgZmFsc2UpOworCQlpZiAodW5saWtlbHkociAhPSAwKSkKKwkJCXJldHVybiByOworCQlyID0gcmFkZW9uX2JvX3BpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKKwkJCQkmcmRldi0+cjYwMF9ibGl0LnNoYWRlcl9ncHVfYWRkcik7CisJCXJhZGVvbl9ib191bnJlc2VydmUocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOwogCQlpZiAocikgewotCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxlZCBibGl0dGVyICglZCkuXG4iLCByKTsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBpbiBibGl0IG9iamVjdCAlZFxuIiwgcik7CiAJCQlyZXR1cm4gcjsKIAkJfQogCX0KLQotCXIgPSByYWRlb25fYm9fcmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgZmFsc2UpOwotCWlmICh1bmxpa2VseShyICE9IDApKQotCQlyZXR1cm4gcjsKLQlyID0gcmFkZW9uX2JvX3BpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKLQkJCSZyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX2dwdV9hZGRyKTsKLQlyYWRlb25fYm9fdW5yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKLQlpZiAocikgewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBwaW4gYmxpdCBvYmplY3QgJWRcbiIsIHIpOwotCQlyZXR1cm4gcjsKLQl9Ci0KIAkvKiBFbmFibGUgSVJRICovCiAJciA9IHI2MDBfaXJxX2luaXQocmRldik7CiAJaWYgKHIpIHsKQEAgLTEwNjYsOSArMTA2OCwxMSBAQAogCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOwogCXIgPSBydjc3MF9zdGFydHVwKHJkZXYpOwogCWlmIChyKSB7Ci0JCXJ2NzcwX3N1c3BlbmQocmRldik7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOworCQlyNjAwX2NwX2ZpbmkocmRldik7CiAJCXI2MDBfd2JfZmluaShyZGV2KTsKLQkJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwkJcjYwMF9pcnFfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKIAkJcnY3NzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKIAl9CkBAIC0xMDkwLDEzICsxMDk0LDExIEBACiAKIHZvaWQgcnY3NzBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlydjc3MF9zdXNwZW5kKHJkZXYpOwotCiAJcjYwMF9ibGl0X2ZpbmkocmRldik7CisJcjYwMF9jcF9maW5pKHJkZXYpOworCXI2MDBfd2JfZmluaShyZGV2KTsKIAlyNjAwX2lycV9maW5pKHJkZXYpOwogCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7Ci0JcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKLQlyNjAwX3diX2ZpbmkocmRldik7CiAJcnY3NzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJcmFkZW9uX2dlbV9maW5pKHJkZXYpOwogCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCmluZGV4IDFhM2U5MDkuLmM3MzIwY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwpAQCAtMTAyMCw2ICsxMDIwLDEyIEBACiAJCQkgICAgIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKQogewogCWludCBpOworCXN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSA9IG1lbS0+bW1fbm9kZTsKKworCWlmIChub2RlICYmIHBsYWNlbWVudC0+bHBmbiAhPSAwICYmCisJICAgIChub2RlLT5zdGFydCA8IHBsYWNlbWVudC0+ZnBmbiB8fAorCSAgICAgbm9kZS0+c3RhcnQgKyBub2RlLT5zaXplID4gcGxhY2VtZW50LT5scGZuKSkKKwkJcmV0dXJuIC0xOwogCiAJZm9yIChpID0gMDsgaSA8IHBsYWNlbWVudC0+bnVtX3BsYWNlbWVudDsgaSsrKSB7CiAJCWlmICgocGxhY2VtZW50LT5wbGFjZW1lbnRbaV0gJiBtZW0tPnBsYWNlbWVudCAmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmMKaW5kZXggMmVjZjdkMC4uNWNhMzdhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYwpAQCAtNTMsNyArNTMsNiBAQAogewogCXN0cnVjdCB0dG1fdHQgKnR0bSA9IGJvLT50dG07CiAJc3RydWN0IHR0bV9tZW1fcmVnICpvbGRfbWVtID0gJmJvLT5tZW07Ci0JdWludDMyX3Qgc2F2ZV9mbGFncyA9IG9sZF9tZW0tPnBsYWNlbWVudDsKIAlpbnQgcmV0OwogCiAJaWYgKG9sZF9tZW0tPm1lbV90eXBlICE9IFRUTV9QTF9TWVNURU0pIHsKQEAgLTYyLDcgKzYxLDYgQEAKIAkJdHRtX2ZsYWdfbWFza2VkKCZvbGRfbWVtLT5wbGFjZW1lbnQsIFRUTV9QTF9GTEFHX1NZU1RFTSwKIAkJCQlUVE1fUExfTUFTS19NRU0pOwogCQlvbGRfbWVtLT5tZW1fdHlwZSA9IFRUTV9QTF9TWVNURU07Ci0JCXNhdmVfZmxhZ3MgPSBvbGRfbWVtLT5wbGFjZW1lbnQ7CiAJfQogCiAJcmV0ID0gdHRtX3R0X3NldF9wbGFjZW1lbnRfY2FjaGluZyh0dG0sIG5ld19tZW0tPnBsYWNlbWVudCk7CkBAIC03Nyw3ICs3NSw3IEBACiAKIAkqb2xkX21lbSA9ICpuZXdfbWVtOwogCW5ld19tZW0tPm1tX25vZGUgPSBOVUxMOwotCXR0bV9mbGFnX21hc2tlZCgmc2F2ZV9mbGFncywgbmV3X21lbS0+cGxhY2VtZW50LCBUVE1fUExfTUFTS19NRU1UWVBFKTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh0dG1fYm9fbW92ZV90dG0pOwpAQCAtMjE5LDcgKzIxNyw2IEBACiAJdm9pZCAqb2xkX2lvbWFwOwogCXZvaWQgKm5ld19pb21hcDsKIAlpbnQgcmV0OwotCXVpbnQzMl90IHNhdmVfZmxhZ3MgPSBvbGRfbWVtLT5wbGFjZW1lbnQ7CiAJdW5zaWduZWQgbG9uZyBpOwogCXVuc2lnbmVkIGxvbmcgcGFnZTsKIAl1bnNpZ25lZCBsb25nIGFkZCA9IDA7CkBAIC0yNzAsNyArMjY3LDYgQEAKIAogCSpvbGRfbWVtID0gKm5ld19tZW07CiAJbmV3X21lbS0+bW1fbm9kZSA9IE5VTEw7Ci0JdHRtX2ZsYWdfbWFza2VkKCZzYXZlX2ZsYWdzLCBuZXdfbWVtLT5wbGFjZW1lbnQsIFRUTV9QTF9NQVNLX01FTVRZUEUpOwogCiAJaWYgKChtYW4tPmZsYWdzICYgVFRNX01FTVRZUEVfRkxBR19GSVhFRCkgJiYgKHR0bSAhPSBOVUxMKSkgewogCQl0dG1fdHRfdW5iaW5kKHR0bSk7CkBAIC01MzcsNyArNTMzLDYgQEAKIAlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiA9ICZiZGV2LT5tYW5bbmV3X21lbS0+bWVtX3R5cGVdOwogCXN0cnVjdCB0dG1fbWVtX3JlZyAqb2xkX21lbSA9ICZiby0+bWVtOwogCWludCByZXQ7Ci0JdWludDMyX3Qgc2F2ZV9mbGFncyA9IG9sZF9tZW0tPnBsYWNlbWVudDsKIAlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmdob3N0X29iajsKIAl2b2lkICp0bXBfb2JqID0gTlVMTDsKIApAQCAtNTk4LDcgKzU5Myw3IEBACiAKIAkqb2xkX21lbSA9ICpuZXdfbWVtOwogCW5ld19tZW0tPm1tX25vZGUgPSBOVUxMOwotCXR0bV9mbGFnX21hc2tlZCgmc2F2ZV9mbGFncywgbmV3X21lbS0+cGxhY2VtZW50LCBUVE1fUExfTUFTS19NRU1UWVBFKTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh0dG1fYm9fbW92ZV9hY2NlbF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fb2JqZWN0LmMKaW5kZXggMTA5OWFiYS4uNzVlOWQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fb2JqZWN0LmMKQEAgLTEwOSw4ICsxMDksOCBAQAogCXN0cnVjdCBkcm1faGFzaF9pdGVtIGhhc2g7CiAJc3RydWN0IGxpc3RfaGVhZCBoZWFkOwogCXN0cnVjdCBrcmVmIGtyZWY7Ci0Jc3RydWN0IHR0bV9iYXNlX29iamVjdCAqb2JqOwogCWVudW0gdHRtX3JlZl90eXBlIHJlZl90eXBlOworCXN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKm9iajsKIAlzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCmluZGV4IDljMmIxY2MuLjNkNDdhMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYwpAQCAtMTk2LDIzICsxOTYsMzQgQEAKIAogI2lmZGVmIENPTkZJR19YODYKIHN0YXRpYyBpbmxpbmUgaW50IHR0bV90dF9zZXRfcGFnZV9jYWNoaW5nKHN0cnVjdCBwYWdlICpwLAotCQkJCQkgIGVudW0gdHRtX2NhY2hpbmdfc3RhdGUgY19zdGF0ZSkKKwkJCQkJICBlbnVtIHR0bV9jYWNoaW5nX3N0YXRlIGNfb2xkLAorCQkJCQkgIGVudW0gdHRtX2NhY2hpbmdfc3RhdGUgY19uZXcpCiB7CisJaW50IHJldCA9IDA7CisKIAlpZiAoUGFnZUhpZ2hNZW0ocCkpCiAJCXJldHVybiAwOwogCi0Jc3dpdGNoIChjX3N0YXRlKSB7Ci0JY2FzZSB0dF9jYWNoZWQ6Ci0JCXJldHVybiBzZXRfcGFnZXNfd2IocCwgMSk7Ci0JY2FzZSB0dF93YzoKLQkgICAgcmV0dXJuIHNldF9tZW1vcnlfd2MoKHVuc2lnbmVkIGxvbmcpIHBhZ2VfYWRkcmVzcyhwKSwgMSk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIHNldF9wYWdlc191YyhwLCAxKTsKKwlpZiAoY19vbGQgIT0gdHRfY2FjaGVkKSB7CisJCS8qIHAgaXNuJ3QgaW4gdGhlIGRlZmF1bHQgY2FjaGluZyBzdGF0ZSwgc2V0IGl0IHRvCisJCSAqIHdyaXRlYmFjayBmaXJzdCB0byBmcmVlIGl0cyBjdXJyZW50IG1lbXR5cGUuICovCisKKwkJcmV0ID0gc2V0X3BhZ2VzX3diKHAsIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAl9CisKKwlpZiAoY19uZXcgPT0gdHRfd2MpCisJCXJldCA9IHNldF9tZW1vcnlfd2MoKHVuc2lnbmVkIGxvbmcpIHBhZ2VfYWRkcmVzcyhwKSwgMSk7CisJZWxzZSBpZiAoY19uZXcgPT0gdHRfdW5jYWNoZWQpCisJCXJldCA9IHNldF9wYWdlc191YyhwLCAxKTsKKworCXJldHVybiByZXQ7CiB9CiAjZWxzZSAvKiBDT05GSUdfWDg2ICovCiBzdGF0aWMgaW5saW5lIGludCB0dG1fdHRfc2V0X3BhZ2VfY2FjaGluZyhzdHJ1Y3QgcGFnZSAqcCwKLQkJCQkJICBlbnVtIHR0bV9jYWNoaW5nX3N0YXRlIGNfc3RhdGUpCisJCQkJCSAgZW51bSB0dG1fY2FjaGluZ19zdGF0ZSBjX29sZCwKKwkJCQkJICBlbnVtIHR0bV9jYWNoaW5nX3N0YXRlIGNfbmV3KQogewogCXJldHVybiAwOwogfQpAQCAtMjQ1LDcgKzI1Niw5IEBACiAJZm9yIChpID0gMDsgaSA8IHR0bS0+bnVtX3BhZ2VzOyArK2kpIHsKIAkJY3VyX3BhZ2UgPSB0dG0tPnBhZ2VzW2ldOwogCQlpZiAobGlrZWx5KGN1cl9wYWdlICE9IE5VTEwpKSB7Ci0JCQlyZXQgPSB0dG1fdHRfc2V0X3BhZ2VfY2FjaGluZyhjdXJfcGFnZSwgY19zdGF0ZSk7CisJCQlyZXQgPSB0dG1fdHRfc2V0X3BhZ2VfY2FjaGluZyhjdXJfcGFnZSwKKwkJCQkJCSAgICAgIHR0bS0+Y2FjaGluZ19zdGF0ZSwKKwkJCQkJCSAgICAgIGNfc3RhdGUpOwogCQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJCQlnb3RvIG91dF9lcnI7CiAJCX0KQEAgLTI1OSw3ICsyNzIsNyBAQAogCWZvciAoaiA9IDA7IGogPCBpOyArK2opIHsKIAkJY3VyX3BhZ2UgPSB0dG0tPnBhZ2VzW2pdOwogCQlpZiAobGlrZWx5KGN1cl9wYWdlICE9IE5VTEwpKSB7Ci0JCQkodm9pZCl0dG1fdHRfc2V0X3BhZ2VfY2FjaGluZyhjdXJfcGFnZSwKKwkJCSh2b2lkKXR0bV90dF9zZXRfcGFnZV9jYWNoaW5nKGN1cl9wYWdlLCBjX3N0YXRlLAogCQkJCQkJICAgICAgdHRtLT5jYWNoaW5nX3N0YXRlKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMKaW5kZXggZGVkZDEyMS4uMGM5YzA4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMKQEAgLTIwOSw2ICsyMDksNyBAQAogewogCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXY7CiAJaW50IHJldDsKKwl1aW50MzJfdCBzdmdhX2lkOwogCiAJZGV2X3ByaXYgPSBremFsbG9jKHNpemVvZigqZGV2X3ByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoZGV2X3ByaXYgPT0gTlVMTCkpIHsKQEAgLTIzOSw2ICsyNDAsMTYgQEAKIAlkZXZfcHJpdi0+bW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDIpOwogCiAJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKworCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfSUQsIFNWR0FfSURfMik7CisJc3ZnYV9pZCA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19JRCk7CisJaWYgKHN2Z2FfaWQgIT0gU1ZHQV9JRF8yKSB7CisJCXJldCA9IC1FTk9TWVM7CisJCURSTV9FUlJPUigiVW5zdXBvcnRlZCBTVkdBIElEIDB4JXhcbiIsIHN2Z2FfaWQpOworCQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJCWdvdG8gb3V0X2VycjA7CisJfQorCiAJZGV2X3ByaXYtPmNhcGFiaWxpdGllcyA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19DQVBBQklMSVRJRVMpOwogCiAJaWYgKGRldl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9HTVIpIHsKQEAgLTMzNywyNiArMzQ4LDI1IEBACiAJCSAqLwogCiAJCURSTV9JTkZPKCJJdCBhcHBlYXJzIGxpa2UgdmVzYWZiIGlzIGxvYWRlZC4gIgotCQkJICJJZ25vcmUgYWJvdmUgZXJyb3IgaWYgYW55LiBFbnRlcmluZyBzdGVhbHRoIG1vZGUuXG4iKTsKKwkJCSAiSWdub3JlIGFib3ZlIGVycm9yIGlmIGFueS5cbiIpOwogCQlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb24oZGV2LT5wZGV2LCAyLCAidm13Z2Z4IHN0ZWFsdGggcHJvYmUiKTsKIAkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewogCQkJRFJNX0VSUk9SKCJGYWlsZWQgcmVzZXJ2aW5nIHRoZSBTVkdBIE1NSU8gcmVzb3VyY2UuXG4iKTsKIAkJCWdvdG8gb3V0X25vX2RldmljZTsKIAkJfQotCQl2bXdfa21zX2luaXQoZGV2X3ByaXYpOwotCQl2bXdfb3ZlcmxheV9pbml0KGRldl9wcml2KTsKLQl9IGVsc2UgewotCQlyZXQgPSB2bXdfcmVxdWVzdF9kZXZpY2UoZGV2X3ByaXYpOwotCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQkJZ290byBvdXRfbm9fZGV2aWNlOwotCQl2bXdfa21zX2luaXQoZGV2X3ByaXYpOwotCQl2bXdfb3ZlcmxheV9pbml0KGRldl9wcml2KTsKLQkJdm13X2ZiX2luaXQoZGV2X3ByaXYpOwogCX0KKwlyZXQgPSB2bXdfcmVxdWVzdF9kZXZpY2UoZGV2X3ByaXYpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWdvdG8gb3V0X25vX2RldmljZTsKKwl2bXdfa21zX2luaXQoZGV2X3ByaXYpOworCXZtd19vdmVybGF5X2luaXQoZGV2X3ByaXYpOworCXZtd19mYl9pbml0KGRldl9wcml2KTsKIAogCWRldl9wcml2LT5wbV9uYi5ub3RpZmllcl9jYWxsID0gdm13Z2Z4X3BtX25vdGlmaWVyOwogCXJlZ2lzdGVyX3BtX25vdGlmaWVyKCZkZXZfcHJpdi0+cG1fbmIpOwogCisJRFJNX0lORk8oIiVzIiwgdm13X2ZpZm9faGF2ZV8zZChkZXZfcHJpdikgPyAiSGF2ZSAzRFxuIiA6ICJObyAzRFxuIik7CisKIAlyZXR1cm4gMDsKIAogb3V0X25vX2RldmljZToKQEAgLTM5MywxNyArNDAzLDE1IEBACiAKIAl1bnJlZ2lzdGVyX3BtX25vdGlmaWVyKCZkZXZfcHJpdi0+cG1fbmIpOwogCi0JaWYgKCFkZXZfcHJpdi0+c3RlYWx0aCkgewotCQl2bXdfZmJfY2xvc2UoZGV2X3ByaXYpOwotCQl2bXdfa21zX2Nsb3NlKGRldl9wcml2KTsKLQkJdm13X292ZXJsYXlfY2xvc2UoZGV2X3ByaXYpOwotCQl2bXdfcmVsZWFzZV9kZXZpY2UoZGV2X3ByaXYpOwotCQlwY2lfcmVsZWFzZV9yZWdpb25zKGRldi0+cGRldik7Ci0JfSBlbHNlIHsKLQkJdm13X2ttc19jbG9zZShkZXZfcHJpdik7Ci0JCXZtd19vdmVybGF5X2Nsb3NlKGRldl9wcml2KTsKKwl2bXdfZmJfY2xvc2UoZGV2X3ByaXYpOworCXZtd19rbXNfY2xvc2UoZGV2X3ByaXYpOworCXZtd19vdmVybGF5X2Nsb3NlKGRldl9wcml2KTsKKwl2bXdfcmVsZWFzZV9kZXZpY2UoZGV2X3ByaXYpOworCWlmIChkZXZfcHJpdi0+c3RlYWx0aCkKIAkJcGNpX3JlbGVhc2VfcmVnaW9uKGRldi0+cGRldiwgMik7Ci0JfQorCWVsc2UKKwkJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYtPnBkZXYpOworCiAJaWYgKGRldl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9JUlFNQVNLKQogCQlkcm1faXJxX3VuaW5zdGFsbChkZXZfcHJpdi0+ZGV2KTsKIAlpZiAoZGV2LT5kZXZuYW1lID09IHZtd19kZXZuYW1lKQpAQCAtNTcyLDExICs1ODAsNiBAQAogCWludCByZXQgPSAwOwogCiAJRFJNX0lORk8oIk1hc3RlciBzZXQuXG4iKTsKLQlpZiAoZGV2X3ByaXYtPnN0ZWFsdGgpIHsKLQkJcmV0ID0gdm13X3JlcXVlc3RfZGV2aWNlKGRldl9wcml2KTsKLQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJCXJldHVybiByZXQ7Ci0JfQogCiAJaWYgKGFjdGl2ZSkgewogCQlCVUdfT04oYWN0aXZlICE9ICZkZXZfcHJpdi0+ZmJkZXZfbWFzdGVyKTsKQEAgLTYzNiwxOCArNjM5LDExIEBACiAKIAl0dG1fbG9ja19zZXRfa2lsbCgmdm1hc3Rlci0+bG9jaywgdHJ1ZSwgU0lHVEVSTSk7CiAKLQlpZiAoZGV2X3ByaXYtPnN0ZWFsdGgpIHsKLQkJcmV0ID0gdHRtX2JvX2V2aWN0X21tKCZkZXZfcHJpdi0+YmRldiwgVFRNX1BMX1ZSQU0pOwotCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQkJRFJNX0VSUk9SKCJVbmFibGUgdG8gY2xlYW4gVlJBTSBvbiBtYXN0ZXIgZHJvcC5cbiIpOwotCQl2bXdfcmVsZWFzZV9kZXZpY2UoZGV2X3ByaXYpOwotCX0KIAlkZXZfcHJpdi0+YWN0aXZlX21hc3RlciA9ICZkZXZfcHJpdi0+ZmJkZXZfbWFzdGVyOwogCXR0bV9sb2NrX3NldF9raWxsKCZkZXZfcHJpdi0+ZmJkZXZfbWFzdGVyLmxvY2ssIGZhbHNlLCBTSUdURVJNKTsKIAl0dG1fdnRfdW5sb2NrKCZkZXZfcHJpdi0+ZmJkZXZfbWFzdGVyLmxvY2spOwogCi0JaWYgKCFkZXZfcHJpdi0+c3RlYWx0aCkKLQkJdm13X2ZiX29uKGRldl9wcml2KTsKKwl2bXdfZmJfb24oZGV2X3ByaXYpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKaW5kZXggNTA1MjlhNy4uMzU2ZGM5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKQEAgLTM5LDEwICszOSwxMCBAQAogI2luY2x1ZGUgInR0bS90dG1fZXhlY2J1Zl91dGlsLmgiCiAjaW5jbHVkZSAidHRtL3R0bV9tb2R1bGUuaCIKIAotI2RlZmluZSBWTVdHRlhfRFJJVkVSX0RBVEUgIjIwMDkwNzI0IgotI2RlZmluZSBWTVdHRlhfRFJJVkVSX01BSk9SIDAKLSNkZWZpbmUgVk1XR0ZYX0RSSVZFUl9NSU5PUiAxCi0jZGVmaW5lIFZNV0dGWF9EUklWRVJfUEFUQ0hMRVZFTCAyCisjZGVmaW5lIFZNV0dGWF9EUklWRVJfREFURSAiMjAxMDAyMDkiCisjZGVmaW5lIFZNV0dGWF9EUklWRVJfTUFKT1IgMQorI2RlZmluZSBWTVdHRlhfRFJJVkVSX01JTk9SIDAKKyNkZWZpbmUgVk1XR0ZYX0RSSVZFUl9QQVRDSExFVkVMIDAKICNkZWZpbmUgVk1XR0ZYX0ZJTEVfUEFHRV9PRkZTRVQgMHgwMDEwMDAwMAogI2RlZmluZSBWTVdHRlhfRklGT19TVEFUSUNfU0laRSAoMTAyNCoxMDI0KQogI2RlZmluZSBWTVdHRlhfTUFYX1JFTE9DQVRJT05TIDIwNDgKQEAgLTk2LDYgKzk2LDggQEAKIAlzdHJ1Y3QgZHJtX3Ztd19zaXplICpzaXplczsKIAl1aW50MzJfdCBudW1fc2l6ZXM7CiAKKwlib29sIHNjYW5vdXQ7CisKIAkvKiBUT0RPIHNvIGZhciBqdXN0IGEgZXh0cmEgcG9pbnRlciAqLwogCXN0cnVjdCB2bXdfY3Vyc29yX3Nub29wZXIgc25vb3BlcjsKIH07CkBAIC0xMTEsNiArMTEzLDcgQEAKIAl1bnNpZ25lZCBsb25nIHN0YXRpY19idWZmZXJfc2l6ZTsKIAlib29sIHVzaW5nX2JvdW5jZV9idWZmZXI7CiAJdWludDMyX3QgY2FwYWJpbGl0aWVzOworCXN0cnVjdCBtdXRleCBmaWZvX211dGV4OwogCXN0cnVjdCByd19zZW1hcGhvcmUgcndzZW07CiB9OwogCkBAIC0yMTEsNyArMjE0LDcgQEAKIAkgKiBGZW5jaW5nIGFuZCBJUlFzLgogCSAqLwogCi0JdWludDMyX3QgZmVuY2Vfc2VxOworCWF0b21pY190IGZlbmNlX3NlcTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBmZW5jZV9xdWV1ZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBmaWZvX3F1ZXVlOwogCWF0b21pY190IGZlbmNlX3F1ZXVlX3dhaXRlcnM7CkBAIC0zODksNiArMzkyLDcgQEAKIAkJCSAgICAgICB1aW50MzJfdCAqc2VxdWVuY2UpOwogZXh0ZXJuIHZvaWQgdm13X2ZpZm9fcGluZ19ob3N0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90IHJlYXNvbik7CiBleHRlcm4gaW50IHZtd19maWZvX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK2V4dGVybiBib29sIHZtd19maWZvX2hhdmVfM2Qoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CiAKIC8qKgogICogVFRNIGdsdWUgLSB2bXdnZnhfdHRtX2dsdWUuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jCmluZGV4IGQ2OWNhZjkuLjA4OTczNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2V4ZWNidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMKQEAgLTE4MiwyNSArMTgyLDE5IEBACiAJcmV0dXJuIHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCAmY21kLT5ib2R5LnNpZCk7CiB9CiAKLXN0YXRpYyBpbnQgdm13X2NtZF9kbWEoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKLQkJICAgICAgIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKLQkJICAgICAgIFNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQorc3RhdGljIGludCB2bXdfdHJhbnNsYXRlX2d1ZXN0X3B0cihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAgIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCQkgICBTVkdBR3Vlc3RQdHIgKnB0ciwKKwkJCQkgICBzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKip2bXdfYm9fcCkKIHsKLQl1aW50MzJfdCBoYW5kbGU7CiAJc3RydWN0IHZtd19kbWFfYnVmZmVyICp2bXdfYm8gPSBOVUxMOwogCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm87Ci0Jc3RydWN0IHZtd19zdXJmYWNlICpzcmYgPSBOVUxMOwotCXN0cnVjdCB2bXdfZG1hX2NtZCB7Ci0JCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7Ci0JCVNWR0EzZENtZFN1cmZhY2VETUEgZG1hOwotCX0gKmNtZDsKKwl1aW50MzJfdCBoYW5kbGUgPSBwdHItPmdtcklkOwogCXN0cnVjdCB2bXdfcmVsb2NhdGlvbiAqcmVsb2M7Ci0JaW50IHJldDsKIAl1aW50MzJfdCBjdXJfdmFsaWRhdGVfbm9kZTsKIAlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciAqdmFsX2J1ZjsKKwlpbnQgcmV0OwogCi0JY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IHZtd19kbWFfY21kLCBoZWFkZXIpOwotCWhhbmRsZSA9IGNtZC0+ZG1hLmd1ZXN0LnB0ci5nbXJJZDsKIAlyZXQgPSB2bXdfdXNlcl9kbWFidWZfbG9va3VwKHN3X2NvbnRleHQtPnRmaWxlLCBoYW5kbGUsICZ2bXdfYm8pOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKIAkJRFJNX0VSUk9SKCJDb3VsZCBub3QgZmluZCBvciB1c2UgR01SIHJlZ2lvbi5cbiIpOwpAQCAtMjA5LDE0ICsyMDMsMTQgQEAKIAlibyA9ICZ2bXdfYm8tPmJhc2U7CiAKIAlpZiAodW5saWtlbHkoc3dfY29udGV4dC0+Y3VyX3JlbG9jID49IFZNV0dGWF9NQVhfUkVMT0NBVElPTlMpKSB7Ci0JCURSTV9FUlJPUigiTWF4IG51bWJlciBvZiBETUEgY29tbWFuZHMgcGVyIHN1Ym1pc3Npb24iCisJCURSTV9FUlJPUigiTWF4IG51bWJlciByZWxvY2F0aW9ucyBwZXIgc3VibWlzc2lvbiIKIAkJCSAgIiBleGNlZWRlZFxuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X25vX3JlbG9jOwogCX0KIAogCXJlbG9jID0gJnN3X2NvbnRleHQtPnJlbG9jc1tzd19jb250ZXh0LT5jdXJfcmVsb2MrK107Ci0JcmVsb2MtPmxvY2F0aW9uID0gJmNtZC0+ZG1hLmd1ZXN0LnB0cjsKKwlyZWxvYy0+bG9jYXRpb24gPSBwdHI7CiAKIAljdXJfdmFsaWRhdGVfbm9kZSA9IHZtd19kbWFidWZfdmFsaWRhdGVfbm9kZShibywgc3dfY29udGV4dC0+Y3VyX3ZhbF9idWYpOwogCWlmICh1bmxpa2VseShjdXJfdmFsaWRhdGVfbm9kZSA+PSBWTVdHRlhfTUFYX0dNUlMpKSB7CkBAIC0yMzQsNyArMjI4LDg5IEBACiAJCWxpc3RfYWRkX3RhaWwoJnZhbF9idWYtPmhlYWQsICZzd19jb250ZXh0LT52YWxpZGF0ZV9ub2Rlcyk7CiAJCSsrc3dfY29udGV4dC0+Y3VyX3ZhbF9idWY7CiAJfQorCSp2bXdfYm9fcCA9IHZtd19ibzsKKwlyZXR1cm4gMDsKIAorb3V0X25vX3JlbG9jOgorCXZtd19kbWFidWZfdW5yZWZlcmVuY2UoJnZtd19ibyk7CisJdm13X2JvX3AgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdm13X2NtZF9lbmRfcXVlcnkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAorCQkJICAgICBTVkdBM2RDbWRIZWFkZXIgKmhlYWRlcikKK3sKKwlzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKnZtd19ibzsKKwlzdHJ1Y3Qgdm13X3F1ZXJ5X2NtZCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZEVuZFF1ZXJ5IHE7CisJfSAqY21kOworCWludCByZXQ7CisKKwljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X3F1ZXJ5X2NtZCwgaGVhZGVyKTsKKwlyZXQgPSB2bXdfY21kX2NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgaGVhZGVyKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdm13X3RyYW5zbGF0ZV9ndWVzdF9wdHIoZGV2X3ByaXYsIHN3X2NvbnRleHQsCisJCQkJICAgICAgJmNtZC0+cS5ndWVzdFJlc3VsdCwKKwkJCQkgICAgICAmdm13X2JvKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJdm13X2RtYWJ1Zl91bnJlZmVyZW5jZSgmdm13X2JvKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bXdfY21kX3dhaXRfcXVlcnkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCSAgICAgIFNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQoreworCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqdm13X2JvOworCXN0cnVjdCB2bXdfcXVlcnlfY21kIHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kV2FpdEZvclF1ZXJ5IHE7CisJfSAqY21kOworCWludCByZXQ7CisKKwljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X3F1ZXJ5X2NtZCwgaGVhZGVyKTsKKwlyZXQgPSB2bXdfY21kX2NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgaGVhZGVyKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdm13X3RyYW5zbGF0ZV9ndWVzdF9wdHIoZGV2X3ByaXYsIHN3X2NvbnRleHQsCisJCQkJICAgICAgJmNtZC0+cS5ndWVzdFJlc3VsdCwKKwkJCQkgICAgICAmdm13X2JvKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJdm13X2RtYWJ1Zl91bnJlZmVyZW5jZSgmdm13X2JvKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHZtd19jbWRfZG1hKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCSAgICAgICBzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCisJCSAgICAgICBTVkdBM2RDbWRIZWFkZXIgKmhlYWRlcikKK3sKKwlzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKnZtd19ibyA9IE5VTEw7CisJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibzsKKwlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnNyZiA9IE5VTEw7CisJc3RydWN0IHZtd19kbWFfY21kIHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kU3VyZmFjZURNQSBkbWE7CisJfSAqY21kOworCWludCByZXQ7CisKKwljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X2RtYV9jbWQsIGhlYWRlcik7CisJcmV0ID0gdm13X3RyYW5zbGF0ZV9ndWVzdF9wdHIoZGV2X3ByaXYsIHN3X2NvbnRleHQsCisJCQkJICAgICAgJmNtZC0+ZG1hLmd1ZXN0LnB0ciwKKwkJCQkgICAgICAmdm13X2JvKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJYm8gPSAmdm13X2JvLT5iYXNlOwogCXJldCA9IHZtd191c2VyX3N1cmZhY2VfbG9va3VwX2hhbmRsZShkZXZfcHJpdiwgc3dfY29udGV4dC0+dGZpbGUsCiAJCQkJCSAgICAgY21kLT5kbWEuaG9zdC5zaWQsICZzcmYpOwogCWlmIChyZXQpIHsKQEAgLTM3OSw4ICs0NTUsOCBAQAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RSQVdfUFJJTUlUSVZFUywgJnZtd19jbWRfZHJhdyksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUU0NJU1NPUlJFQ1QsICZ2bXdfY21kX2NpZF9jaGVjayksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfQkVHSU5fUVVFUlksICZ2bXdfY21kX2NpZF9jaGVjayksCi0JVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRU5EX1FVRVJZLCAmdm13X2NtZF9jaWRfY2hlY2spLAotCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1dBSVRfRk9SX1FVRVJZLCAmdm13X2NtZF9jaWRfY2hlY2spLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0VORF9RVUVSWSwgJnZtd19jbWRfZW5kX3F1ZXJ5KSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9XQUlUX0ZPUl9RVUVSWSwgJnZtd19jbWRfd2FpdF9xdWVyeSksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfUFJFU0VOVF9SRUFEQkFDSywgJnZtd19jbWRfb2spLAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0JMSVRfU1VSRkFDRV9UT19TQ1JFRU4sCiAJCSAgICAmdm13X2NtZF9ibHRfc3VyZl9zY3JlZW5fY2hlY2spCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmIuYwppbmRleCA0ZjRmNjQzLi5hOTMzNjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZiLmMKQEAgLTU1OSw2ICs1NTksOSBAQAogCWluZm8tPnBpeG1hcC5zY2FuX2FsaWduID0gMTsKICNlbmRpZgogCisJaW5mby0+YXBlcnR1cmVfYmFzZSA9IHZtd19wcml2LT52cmFtX3N0YXJ0OworCWluZm8tPmFwZXJ0dXJlX3NpemUgPSB2bXdfcHJpdi0+dnJhbV9zaXplOworCiAJLyoKIAkgKiBEaXJ0eSAmIERlZmVycmVkIElPCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMKaW5kZXggZjdkNWY3MC4uMzlkNDNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYwpAQCAtMjksNiArMjksMjUgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAidHRtL3R0bV9wbGFjZW1lbnQuaCIKIAorYm9vbCB2bXdfZmlmb19oYXZlXzNkKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJX19sZTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9fdmlydDsKKwl1aW50MzJfdCBmaWZvX21pbiwgaHd2ZXJzaW9uOworCisJZmlmb19taW4gPSBpb3JlYWQzMihmaWZvX21lbSAgKyBTVkdBX0ZJRk9fTUlOKTsKKwlpZiAoZmlmb19taW4gPD0gU1ZHQV9GSUZPXzNEX0hXVkVSU0lPTiAqIHNpemVvZih1bnNpZ25lZCBpbnQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlod3ZlcnNpb24gPSBpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT18zRF9IV1ZFUlNJT04pOworCWlmIChod3ZlcnNpb24gPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGh3dmVyc2lvbiA8IFNWR0EzRF9IV1ZFUlNJT05fV1M2NV9CMSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKIGludCB2bXdfZmlmb19pbml0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCB2bXdfZmlmb19zdGF0ZSAqZmlmbykKIHsKIAlfX2xlMzIgX19pb21lbSAqZmlmb19tZW0gPSBkZXZfcHJpdi0+bW1pb192aXJ0OwpAQCAtNTUsNiArNzQsNyBAQAogCWZpZm8tPnJlc2VydmVkX3NpemUgPSAwOwogCWZpZm8tPnVzaW5nX2JvdW5jZV9idWZmZXIgPSBmYWxzZTsKIAorCW11dGV4X2luaXQoJmZpZm8tPmZpZm9fbXV0ZXgpOwogCWluaXRfcndzZW0oJmZpZm8tPnJ3c2VtKTsKIAogCS8qCkBAIC05OCw3ICsxMTgsNyBAQAogCQkgKHVuc2lnbmVkIGludCkgbWluLAogCQkgKHVuc2lnbmVkIGludCkgZmlmby0+Y2FwYWJpbGl0aWVzKTsKIAotCWRldl9wcml2LT5mZW5jZV9zZXEgPSBkZXZfcHJpdi0+bGFzdF9yZWFkX3NlcXVlbmNlOworCWF0b21pY19zZXQoJmRldl9wcml2LT5mZW5jZV9zZXEsIGRldl9wcml2LT5sYXN0X3JlYWRfc2VxdWVuY2UpOwogCWlvd3JpdGUzMihkZXZfcHJpdi0+bGFzdF9yZWFkX3NlcXVlbmNlLCBmaWZvX21lbSArIFNWR0FfRklGT19GRU5DRSk7CiAKIAlyZXR1cm4gdm13X2ZpZm9fc2VuZF9mZW5jZShkZXZfcHJpdiwgJmR1bW15KTsKQEAgLTI2NCw3ICsyODQsNyBAQAogCXVpbnQzMl90IHJlc2VydmVhYmxlID0gZmlmb19zdGF0ZS0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9GSUZPX0NBUF9SRVNFUlZFOwogCWludCByZXQ7CiAKLQlkb3duX3dyaXRlKCZmaWZvX3N0YXRlLT5yd3NlbSk7CisJbXV0ZXhfbG9jaygmZmlmb19zdGF0ZS0+Zmlmb19tdXRleCk7CiAJbWF4ID0gaW9yZWFkMzIoZmlmb19tZW0gKyBTVkdBX0ZJRk9fTUFYKTsKIAltaW4gPSBpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT19NSU4pOwogCW5leHRfY21kID0gaW9yZWFkMzIoZmlmb19tZW0gKyBTVkdBX0ZJRk9fTkVYVF9DTUQpOwpAQCAtMzMyLDcgKzM1Miw3IEBACiAJfQogb3V0X2VycjoKIAlmaWZvX3N0YXRlLT5yZXNlcnZlZF9zaXplID0gMDsKLQl1cF93cml0ZSgmZmlmb19zdGF0ZS0+cndzZW0pOworCW11dGV4X3VubG9jaygmZmlmb19zdGF0ZS0+Zmlmb19tdXRleCk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQwNyw2ICs0MjcsNyBAQAogCiAJfQogCisJZG93bl93cml0ZSgmZmlmb19zdGF0ZS0+cndzZW0pOwogCWlmIChmaWZvX3N0YXRlLT51c2luZ19ib3VuY2VfYnVmZmVyIHx8IHJlc2VydmVhYmxlKSB7CiAJCW5leHRfY21kICs9IGJ5dGVzOwogCQlpZiAobmV4dF9jbWQgPj0gbWF4KQpAQCAtNDE4LDggKzQzOSw5IEBACiAJaWYgKHJlc2VydmVhYmxlKQogCQlpb3dyaXRlMzIoMCwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fUkVTRVJWRUQpOwogCW1iKCk7Ci0Jdm13X2ZpZm9fcGluZ19ob3N0KGRldl9wcml2LCBTVkdBX1NZTkNfR0VORVJJQyk7CiAJdXBfd3JpdGUoJmZpZm9fc3RhdGUtPnJ3c2VtKTsKKwl2bXdfZmlmb19waW5nX2hvc3QoZGV2X3ByaXYsIFNWR0FfU1lOQ19HRU5FUklDKTsKKwltdXRleF91bmxvY2soJmZpZm9fc3RhdGUtPmZpZm9fbXV0ZXgpOwogfQogCiBpbnQgdm13X2ZpZm9fc2VuZF9mZW5jZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCAqc2VxdWVuY2UpCkBAIC00MzIsOSArNDU0LDcgQEAKIAogCWZtID0gdm13X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgYnl0ZXMpOwogCWlmICh1bmxpa2VseShmbSA9PSBOVUxMKSkgewotCQlkb3duX3dyaXRlKCZmaWZvX3N0YXRlLT5yd3NlbSk7Ci0JCSpzZXF1ZW5jZSA9IGRldl9wcml2LT5mZW5jZV9zZXE7Ci0JCXVwX3dyaXRlKCZmaWZvX3N0YXRlLT5yd3NlbSk7CisJCSpzZXF1ZW5jZSA9IGF0b21pY19yZWFkKCZkZXZfcHJpdi0+ZmVuY2Vfc2VxKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJKHZvaWQpdm13X2ZhbGxiYWNrX3dhaXQoZGV2X3ByaXYsIGZhbHNlLCB0cnVlLCAqc2VxdWVuY2UsCiAJCQkJCWZhbHNlLCAzKkhaKTsKQEAgLTQ0Miw3ICs0NjIsNyBAQAogCX0KIAogCWRvIHsKLQkJKnNlcXVlbmNlID0gZGV2X3ByaXYtPmZlbmNlX3NlcSsrOworCQkqc2VxdWVuY2UgPSBhdG9taWNfYWRkX3JldHVybigxLCAmZGV2X3ByaXYtPmZlbmNlX3NlcSk7CiAJfSB3aGlsZSAoKnNlcXVlbmNlID09IDApOwogCiAJaWYgKCEoZmlmb19zdGF0ZS0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9GSUZPX0NBUF9GRU5DRSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pb2N0bC5jCmluZGV4IDVmYTZhNGUuLjFjN2EzMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaW9jdGwuYwpAQCAtNDMsMTEgKzQzLDE3IEBACiAJCXBhcmFtLT52YWx1ZSA9IHZtd19vdmVybGF5X251bV9mcmVlX292ZXJsYXlzKGRldl9wcml2KTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fVk1XX1BBUkFNXzNEOgotCQlwYXJhbS0+dmFsdWUgPSBkZXZfcHJpdi0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9DQVBfM0QgPyAxIDogMDsKKwkJcGFyYW0tPnZhbHVlID0gdm13X2ZpZm9faGF2ZV8zZChkZXZfcHJpdikgPyAxIDogMDsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fVk1XX1BBUkFNX0ZJRk9fT0ZGU0VUOgogCQlwYXJhbS0+dmFsdWUgPSBkZXZfcHJpdi0+bW1pb19zdGFydDsKIAkJYnJlYWs7CisJY2FzZSBEUk1fVk1XX1BBUkFNX0hXX0NBUFM6CisJCXBhcmFtLT52YWx1ZSA9IGRldl9wcml2LT5jYXBhYmlsaXRpZXM7CisJCWJyZWFrOworCWNhc2UgRFJNX1ZNV19QQVJBTV9GSUZPX0NBUFM6CisJCXBhcmFtLT52YWx1ZSA9IGRldl9wcml2LT5maWZvLmNhcGFiaWxpdGllczsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJJbGxlZ2FsIHZtd2dmeCBnZXQgcGFyYW0gcmVxdWVzdDogJWRcbiIsCiAJCQkgIHBhcmFtLT5wYXJhbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lycS5jCmluZGV4IGQ0MDA4NmYuLjRkN2NiNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lycS5jCkBAIC04NSwxOSArODUsMTIgQEAKIAkJcmV0dXJuIHRydWU7CiAKIAkvKioKLQkgKiBCZWxvdyBpcyB0byBzaWduYWwgc3RhbGUgZmVuY2VzIHRoYXQgaGF2ZSB3cmFwcGVkLgotCSAqIEZpcnN0LCBibG9jayBmZW5jZSBzdWJtaXNzaW9uLgotCSAqLwotCi0JZG93bl9yZWFkKCZmaWZvX3N0YXRlLT5yd3NlbSk7Ci0KLQkvKioKIAkgKiBUaGVuIGNoZWNrIGlmIHRoZSBzZXF1ZW5jZSBpcyBoaWdoZXIgdGhhbiB3aGF0IHdlJ3ZlIGFjdHVhbGx5CiAJICogZW1pdHRlZC4gVGhlbiB0aGUgZmVuY2UgaXMgc3RhbGUgYW5kIHNpZ25hbGVkLgogCSAqLwogCi0JcmV0ID0gKChkZXZfcHJpdi0+ZmVuY2Vfc2VxIC0gc2VxdWVuY2UpID4gVk1XX0ZFTkNFX1dSQVApOwotCXVwX3JlYWQoJmZpZm9fc3RhdGUtPnJ3c2VtKTsKKwlyZXQgPSAoKGF0b21pY19yZWFkKCZkZXZfcHJpdi0+ZmVuY2Vfc2VxKSAtIHNlcXVlbmNlKQorCSAgICAgICA+IFZNV19GRU5DRV9XUkFQKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMjcsNyArMTIwLDcgQEAKIAogCWlmIChmaWZvX2lkbGUpCiAJCWRvd25fcmVhZCgmZmlmb19zdGF0ZS0+cndzZW0pOwotCXNpZ25hbF9zZXEgPSBkZXZfcHJpdi0+ZmVuY2Vfc2VxOworCXNpZ25hbF9zZXEgPSBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmZlbmNlX3NlcSk7CiAJcmV0ID0gMDsKIAogCWZvciAoOzspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKaW5kZXggNjg2NjkyZC4uMzFmOWFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKQEAgLTcwNyw2ICs3MDcsOSBAQAogCWlmIChyZXQpCiAJCWdvdG8gdHJ5X2RtYWJ1ZjsKIAorCWlmICghc3VyZmFjZS0+c2Nhbm91dCkKKwkJZ290byBlcnJfbm90X3NjYW5vdXQ7CisKIAlyZXQgPSB2bXdfa21zX25ld19mcmFtZWJ1ZmZlcl9zdXJmYWNlKGRldl9wcml2LCBzdXJmYWNlLCAmdmZiLAogCQkJCQkgICAgICBtb2RlX2NtZC0+d2lkdGgsIG1vZGVfY21kLT5oZWlnaHQpOwogCkBAIC03NDAsNiArNzQzLDEzIEBACiAJfQogCiAJcmV0dXJuICZ2ZmItPmJhc2U7CisKK2Vycl9ub3Rfc2Nhbm91dDoKKwlEUk1fRVJST1IoInN1cmZhY2Ugbm90IG1hcmtlZCBhcyBzY2Fub3V0XG4iKTsKKwkvKiB2bXdfdXNlcl9zdXJmYWNlX2xvb2t1cCB0YWtlcyBvbmUgcmVmICovCisJdm13X3N1cmZhY2VfdW5yZWZlcmVuY2UoJnN1cmZhY2UpOworCisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgdm13X2ttc19mYl9jaGFuZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCkBAIC03NTksMTAgKzc2OSwxMCBAQAogCiAJZHJtX21vZGVfY29uZmlnX2luaXQoZGV2KTsKIAlkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gJnZtd19rbXNfZnVuY3M7Ci0JZGV2LT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSA2NDA7Ci0JZGV2LT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gNDgwOwotCWRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gMjA0ODsKLQlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSAyMDQ4OworCWRldi0+bW9kZV9jb25maWcubWluX3dpZHRoID0gMTsKKwlkZXYtPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSAxOworCWRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gZGV2X3ByaXYtPmZiX21heF93aWR0aDsKKwlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSBkZXZfcHJpdi0+ZmJfbWF4X2hlaWdodDsKIAogCXJldCA9IHZtd19rbXNfaW5pdF9sZWdhY3lfZGlzcGxheV9zeXN0ZW0oZGV2X3ByaXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYwppbmRleCBlMDFkYjEyLi5mOGZiYmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNlLmMKQEAgLTU3NCw2ICs1NzQsNyBAQAogCiAJc3JmLT5mbGFncyA9IHJlcS0+ZmxhZ3M7CiAJc3JmLT5mb3JtYXQgPSByZXEtPmZvcm1hdDsKKwlzcmYtPnNjYW5vdXQgPSByZXEtPnNjYW5vdXQ7CiAJbWVtY3B5KHNyZi0+bWlwX2xldmVscywgcmVxLT5taXBfbGV2ZWxzLCBzaXplb2Yoc3JmLT5taXBfbGV2ZWxzKSk7CiAJc3JmLT5udW1fc2l6ZXMgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBEUk1fVk1XX01BWF9TVVJGQUNFX0ZBQ0VTOyArK2kpCkBAIC01OTksOCArNjAwLDcgQEAKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dF9lcnIxOwogCi0KLQlpZiAoc3JmLT5mbGFncyAmICgxIDw8IDkpICYmCisJaWYgKHNyZi0+c2Nhbm91dCAmJgogCSAgICBzcmYtPm51bV9zaXplcyA9PSAxICYmCiAJICAgIHNyZi0+c2l6ZXNbMF0ud2lkdGggPT0gNjQgJiYKIAkgICAgc3JmLT5zaXplc1swXS5oZWlnaHQgPT0gNjQgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3ZnYS9LY29uZmlnIGIvZHJpdmVycy9ncHUvdmdhL0tjb25maWcKaW5kZXggNzkwZTY3NS4uMDkyMDQ5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvdmdhL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvdmdhL0tjb25maWcKQEAgLTgsMyArOCwxMSBAQAogCSAgYXJlIGFjY2Vzc2VkIGF0IHNhbWUgdGltZSB0aGV5IG5lZWQgc29tZSBraW5kIG9mIGNvb3JkaW5hdGlvbi4gUGxlYXNlCiAJICBzZWUgRG9jdW1lbnRhdGlvbi92Z2FhcmJpdGVyLnR4dCBmb3IgbW9yZSBkZXRhaWxzLiBTZWxlY3QgdGhpcyB0bwogCSAgZW5hYmxlIFZHQSBhcmJpdGVyLgorCitjb25maWcgVkdBX0FSQl9NQVhfR1BVUworCWludCAiTWF4aW11bSBudW1iZXIgb2YgR1BVcyIKKwlkZWZhdWx0IDE2CisJZGVwZW5kcyBvbiBWR0FfQVJCCisJaGVscAorCSAgUmVzZXJ2ZXMgc3BhY2UgaW4gdGhlIGtlcm5lbCB0byBtYWludGFpbiByZXNvdXJjZSBsb2NraW5nIGZvcgorCSAgbXVsdGlwbGUgR1BVUy4gIFRoZSBvdmVyaGVhZCBmb3IgZWFjaCBHUFUgaXMgdmVyeSBzbWFsbC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYyBiL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYwppbmRleCAxYWMwYzkzLi44ODI3ODE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMKKysrIGIvZHJpdmVycy9ncHUvdmdhL3ZnYWFyYi5jCkBAIC02ODgsNyArNjg4LDcgQEAKICAqIHRoZSBhcmJpdGVyLgogICovCiAKLSNkZWZpbmUgTUFYX1VTRVJfQ0FSRFMgICAgICAgICAxNgorI2RlZmluZSBNQVhfVVNFUl9DQVJEUyAgICAgICAgIENPTkZJR19WR0FfQVJCX01BWF9HUFVTCiAjZGVmaW5lIFBDSV9JTlZBTElEX0NBUkQgICAgICAgKChzdHJ1Y3QgcGNpX2RldiAqKS0xVUwpCiAKIC8qCkBAIC05NTQsNiArOTU0LDcgQEAKIAkJfQogCiAJfSBlbHNlIGlmIChzdHJuY21wKGN1cnJfcG9zLCAidGFyZ2V0ICIsIDcpID09IDApIHsKKwkJc3RydWN0IHBjaV9idXMgKnBidXM7CiAJCXVuc2lnbmVkIGludCBkb21haW4sIGJ1cywgZGV2Zm47CiAJCXN0cnVjdCB2Z2FfZGV2aWNlICp2Z2FkZXY7CiAKQEAgLTk2MSw3ICs5NjIsNyBAQAogCQlyZW1haW5pbmcgLT0gNzsKIAkJcHJfZGV2ZWwoImNsaWVudCAweCVwIGNhbGxlZCAndGFyZ2V0J1xuIiwgcHJpdik7CiAJCS8qIGlmIHRhcmdldCBpcyBkZWZhdWx0ICovCi0JCWlmICghc3RybmNtcChidWYsICJkZWZhdWx0IiwgNykpCisJCWlmICghc3RybmNtcChjdXJyX3BvcywgImRlZmF1bHQiLCA3KSkKIAkJCXBkZXYgPSBwY2lfZGV2X2dldCh2Z2FfZGVmYXVsdF9kZXZpY2UoKSk7CiAJCWVsc2UgewogCQkJaWYgKCF2Z2FfcGNpX3N0cl90b192YXJzKGN1cnJfcG9zLCByZW1haW5pbmcsCkBAIC05NjksMTggKzk3MCwzMSBAQAogCQkJCXJldF92YWwgPSAtRVBST1RPOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KKwkJCXByX2RldmVsKCJ2Z2FhcmI6ICVzID09PiAleDoleDoleC4leFxuIiwgY3Vycl9wb3MsCisJCQkJZG9tYWluLCBidXMsIFBDSV9TTE9UKGRldmZuKSwgUENJX0ZVTkMoZGV2Zm4pKTsKIAotCQkJcGRldiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KGJ1cywgZGV2Zm4pOworCQkJcGJ1cyA9IHBjaV9maW5kX2J1cyhkb21haW4sIGJ1cyk7CisJCQlwcl9kZXZlbCgidmdhYXJiOiBwYnVzICVwXG4iLCBwYnVzKTsKKwkJCWlmIChwYnVzID09IE5VTEwpIHsKKwkJCQlwcl9lcnIoInZnYWFyYjogaW52YWxpZCBQQ0kgZG9tYWluIGFuZC9vciBidXMgYWRkcmVzcyAleDoleFxuIiwKKwkJCQkJZG9tYWluLCBidXMpOworCQkJCXJldF92YWwgPSAtRU5PREVWOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCXBkZXYgPSBwY2lfZ2V0X3Nsb3QocGJ1cywgZGV2Zm4pOworCQkJcHJfZGV2ZWwoInZnYWFyYjogcGRldiAlcFxuIiwgcGRldik7CiAJCQlpZiAoIXBkZXYpIHsKLQkJCQlwcl9pbmZvKCJ2Z2FhcmI6IGludmFsaWQgUENJIGFkZHJlc3MhXG4iKTsKKwkJCQlwcl9lcnIoInZnYWFyYjogaW52YWxpZCBQQ0kgYWRkcmVzcyAleDoleFxuIiwKKwkJCQkJYnVzLCBkZXZmbik7CiAJCQkJcmV0X3ZhbCA9IC1FTk9ERVY7CiAJCQkJZ290byBkb25lOwogCQkJfQogCQl9CiAKIAkJdmdhZGV2ID0gdmdhZGV2X2ZpbmQocGRldik7CisJCXByX2RldmVsKCJ2Z2FhcmI6IHZnYWRldiAlcFxuIiwgdmdhZGV2KTsKIAkJaWYgKHZnYWRldiA9PSBOVUxMKSB7Ci0JCQlwcl9pbmZvKCJ2Z2FhcmI6IHRoaXMgcGNpIGRldmljZSBpcyBub3QgYSB2Z2EgZGV2aWNlXG4iKTsKKwkJCXByX2VycigidmdhYXJiOiB0aGlzIHBjaSBkZXZpY2UgaXMgbm90IGEgdmdhIGRldmljZVxuIik7CiAJCQlwY2lfZGV2X3B1dChwZGV2KTsKIAkJCXJldF92YWwgPSAtRU5PREVWOwogCQkJZ290byBkb25lOwpAQCAtOTk4LDcgKzEwMTIsOCBAQAogCQkJfQogCQl9CiAJCWlmIChpID09IE1BWF9VU0VSX0NBUkRTKSB7Ci0JCQlwcl9lcnIoInZnYWFyYjogbWF4aW11bSB1c2VyIGNhcmRzIG51bWJlciByZWFjaGVkIVxuIik7CisJCQlwcl9lcnIoInZnYWFyYjogbWF4aW11bSB1c2VyIGNhcmRzICglZCkgbnVtYmVyIHJlYWNoZWQhXG4iLAorCQkJCU1BWF9VU0VSX0NBUkRTKTsKIAkJCXBjaV9kZXZfcHV0KHBkZXYpOwogCQkJLyogWFhYOiB3aGljaCB2YWx1ZSB0byByZXR1cm4/ICovCiAJCQlyZXRfdmFsID0gIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9LY29uZmlnIGIvZHJpdmVycy9oaWQvS2NvbmZpZwppbmRleCAyNGQ5MGVhLi43MWQ0YzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaGlkL0tjb25maWcKQEAgLTU1LDYgKzU1LDEyIEBACiBtZW51ICJTcGVjaWFsIEhJRCBkcml2ZXJzIgogCWRlcGVuZHMgb24gSElECiAKK2NvbmZpZyBISURfM01fUENUCisJdHJpc3RhdGUgIjNNIFBDVCIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgM00gUENUIHRvdWNoIHNjcmVlbnMuCisKIGNvbmZpZyBISURfQTRURUNICiAJdHJpc3RhdGUgIkE0IHRlY2giIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECkBAIC0xODMsNiArMTg5LDIzIEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBmb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBMb2dpdGVjaAogCSAgUnVtYmxlcGFkIDIgZGV2aWNlcy4KIAorY29uZmlnIExPR0lHOTQwX0ZGCisJYm9vbCAiTG9naXRlY2ggRmxpZ2h0IFN5c3RlbSBHOTQwIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBISURfTE9HSVRFQ0gKKwlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUworCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIExvZ2l0ZWNoCisJICBGbGlnaHQgU3lzdGVtIEc5NDAgZGV2aWNlcy4KKworY29uZmlnIEhJRF9NQUdJQ01PVVNFCisJdHJpc3RhdGUgIkFwcGxlIE1hZ2ljTW91c2UgbXVsdGktdG91Y2ggc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEJUX0hJRFAKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgdGhlIEFwcGxlIE1hZ2ljIE1vdXNlIG11bHRpLXRvdWNoLgorCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgbXVsdGktdG91Y2ggZmVhdHVyZXMgb2YgdGhlCisJQXBwbGUgV2lyZWxlc3MgIk1hZ2ljIiBNb3VzZS4KKwogY29uZmlnIEhJRF9NSUNST1NPRlQKIAl0cmlzdGF0ZSAiTWljcm9zb2Z0IiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRApAQCAtMTkwLDYgKzIxMywxMiBAQAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBNaWNyb3NvZnQgZGV2aWNlcyB0aGF0IGFyZSBub3QgZnVsbHkgY29tcGxpYW50IHdpdGggSElEIHN0YW5kYXJkLgogCitjb25maWcgSElEX01PU0FSVAorCXRyaXN0YXRlICJNb3NBcnQiCisJZGVwZW5kcyBvbiBVU0JfSElECisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIE1vc0FydCBkdWFsLXRvdWNoIHBhbmVscy4KKwogY29uZmlnIEhJRF9NT05URVJFWQogCXRyaXN0YXRlICJNb250ZXJleSIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKQEAgLTE5OCwxMSArMjI3LDE3IEBACiAJU3VwcG9ydCBmb3IgTW9udGVyZXkgR2VuaXVzIEtCMjlFLgogCiBjb25maWcgSElEX05UUklHCi0JdHJpc3RhdGUgIk5UcmlnIiBpZiBFTUJFRERFRAorCXRyaXN0YXRlICJOVHJpZyIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgTi1UcmlnIHRvdWNoIHNjcmVlbi4KKworY29uZmlnIEhJRF9PUlRFSworCXRyaXN0YXRlICJPcnRlayIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKIAlkZWZhdWx0ICFFTUJFRERFRAogCS0tLWhlbHAtLS0KLQlTdXBwb3J0IGZvciBOLVRyaWcgdG91Y2ggc2NyZWVuLgorCVN1cHBvcnQgZm9yIE9ydGVrIFdLQi0yMDAwIHdpcmVsZXNzIGtleWJvYXJkICsgbW91c2UgdHJhY2twYWQuCiAKIGNvbmZpZyBISURfUEFOVEhFUkxPUkQKIAl0cmlzdGF0ZSAiUGFudGhlcmxvcmQgc3VwcG9ydCIgaWYgRU1CRURERUQKQEAgLTIyNyw2ICsyNjIsMTIgQEAKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgUGV0YWx5bnggTWF4dGVyIHJlbW90ZSBjb250cm9sLgogCitjb25maWcgSElEX1FVQU5UQQorCXRyaXN0YXRlICJRdWFudGEgT3B0aWNhbCBUb3VjaCIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgUXVhbnRhIE9wdGljYWwgVG91Y2ggZHVhbC10b3VjaCBwYW5lbHMuCisKIGNvbmZpZyBISURfU0FNU1VORwogCXRyaXN0YXRlICJTYW1zdW5nIiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRApAQCAtMjQxLDYgKzI4MiwxMiBAQAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBTb255IFBTMyBjb250cm9sbGVyLgogCitjb25maWcgSElEX1NUQU5UVU0KKwl0cmlzdGF0ZSAiU3RhbnR1bSIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgU3RhbnR1bSBtdWx0aXRvdWNoIHBhbmVsLgorCiBjb25maWcgSElEX1NVTlBMVVMKIAl0cmlzdGF0ZSAiU3VucGx1cyIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKQEAgLTMwNSw5ICszNTIsOCBAQAogCSAgUnVtYmxlIEZvcmNlIG9yIEZvcmNlIEZlZWRiYWNrIFdoZWVsLgogCiBjb25maWcgSElEX1dBQ09NCi0JdHJpc3RhdGUgIldhY29tIEJsdWV0b290aCBkZXZpY2VzIHN1cHBvcnQiIGlmIEVNQkVEREVECisJdHJpc3RhdGUgIldhY29tIEJsdWV0b290aCBkZXZpY2VzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBCVF9ISURQCi0JZGVmYXVsdCAhRU1CRURERUQKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgV2Fjb20gR3JhcGhpcmUgQmx1ZXRvb3RoIHRhYmxldC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvTWFrZWZpbGUgYi9kcml2ZXJzL2hpZC9NYWtlZmlsZQppbmRleCAwZGUyZGZmLi4wYjI2MThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2hpZC9NYWtlZmlsZQpAQCAtMTgsNyArMTgsMTEgQEAKIGlmZGVmIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRgogCWhpZC1sb2dpdGVjaC1vYmpzCSs9IGhpZC1sZzJmZi5vCiBlbmRpZgoraWZkZWYgQ09ORklHX0xPR0lHOTQwX0ZGCisJaGlkLWxvZ2l0ZWNoLW9ianMJKz0gaGlkLWxnM2ZmLm8KK2VuZGlmCiAKK29iai0kKENPTkZJR19ISURfM01fUENUKQkrPSBoaWQtM20tcGN0Lm8KIG9iai0kKENPTkZJR19ISURfQTRURUNIKQkrPSBoaWQtYTR0ZWNoLm8KIG9iai0kKENPTkZJR19ISURfQVBQTEUpCQkrPSBoaWQtYXBwbGUubwogb2JqLSQoQ09ORklHX0hJRF9CRUxLSU4pCSs9IGhpZC1iZWxraW4ubwpAQCAtMzEsMTQgKzM1LDE5IEBACiBvYmotJChDT05GSUdfSElEX0tFTlNJTkdUT04pCSs9IGhpZC1rZW5zaW5ndG9uLm8KIG9iai0kKENPTkZJR19ISURfS1lFKQkJKz0gaGlkLWt5ZS5vCiBvYmotJChDT05GSUdfSElEX0xPR0lURUNIKQkrPSBoaWQtbG9naXRlY2gubworb2JqLSQoQ09ORklHX0hJRF9NQUdJQ01PVVNFKSAgICArPSBoaWQtbWFnaWNtb3VzZS5vCiBvYmotJChDT05GSUdfSElEX01JQ1JPU09GVCkJKz0gaGlkLW1pY3Jvc29mdC5vCiBvYmotJChDT05GSUdfSElEX01PTlRFUkVZKQkrPSBoaWQtbW9udGVyZXkubworb2JqLSQoQ09ORklHX0hJRF9NT1NBUlQpCSs9IGhpZC1tb3NhcnQubwogb2JqLSQoQ09ORklHX0hJRF9OVFJJRykJCSs9IGhpZC1udHJpZy5vCitvYmotJChDT05GSUdfSElEX09SVEVLKQkJKz0gaGlkLW9ydGVrLm8KK29iai0kKENPTkZJR19ISURfUVVBTlRBKQkrPSBoaWQtcXVhbnRhLm8KIG9iai0kKENPTkZJR19ISURfUEFOVEhFUkxPUkQpCSs9IGhpZC1wbC5vCiBvYmotJChDT05GSUdfSElEX1BFVEFMWU5YKQkrPSBoaWQtcGV0YWx5bngubwogb2JqLSQoQ09ORklHX0hJRF9TQU1TVU5HKQkrPSBoaWQtc2Ftc3VuZy5vCiBvYmotJChDT05GSUdfSElEX1NNQVJUSk9ZUExVUykJKz0gaGlkLXNqb3kubwogb2JqLSQoQ09ORklHX0hJRF9TT05ZKQkJKz0gaGlkLXNvbnkubworb2JqLSQoQ09ORklHX0hJRF9TVEFOVFVNKQkrPSBoaWQtc3RhbnR1bS5vCiBvYmotJChDT05GSUdfSElEX1NVTlBMVVMpCSs9IGhpZC1zdW5wbHVzLm8KIG9iai0kKENPTkZJR19ISURfR1JFRU5BU0lBKQkrPSBoaWQtZ2FmZi5vCiBvYmotJChDT05GSUdfSElEX1RIUlVTVE1BU1RFUikJKz0gaGlkLXRtZmYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLTNtLXBjdC5jIGIvZHJpdmVycy9oaWQvaGlkLTNtLXBjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNzBhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtM20tcGN0LmMKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiAgSElEIGRyaXZlciBmb3IgM00gUENUIG11bHRpdG91Y2ggcGFuZWxzCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPgorICoKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIjNNIFBDVCBtdWx0aXRvdWNoIHBhbmVscyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCitzdHJ1Y3QgbW1tX2ZpbmdlciB7CisJX19zMzIgeCwgeTsKKwlfX3U4IHJhbms7CisJYm9vbCB0b3VjaCwgdmFsaWQ7Cit9OworCitzdHJ1Y3QgbW1tX2RhdGEgeworCXN0cnVjdCBtbW1fZmluZ2VyIGZbMTBdOworCV9fdTggY3VyaWQsIG51bTsKKwlib29sIHRvdWNoLCB2YWxpZDsKK307CisKK3N0YXRpYyBpbnQgbW1tX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSB7CisKKwljYXNlIEhJRF9VUF9CVVRUT046CisJCXJldHVybiAtMTsKKworCWNhc2UgSElEX1VQX0dFTkRFU0s6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9HRF9YOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YKTsKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfWCwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtLCAwLCAwKTsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9HRF9ZOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZKTsKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfWSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtLCAwLCAwKTsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHVybiAwOworCisJY2FzZSBISURfVVBfRElHSVRJWkVSOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJLyogd2UgZG8gbm90IHdhbnQgdG8gbWFwIHRoZXNlOiBubyBpbnB1dC1vcmllbnRlZCBtZWFuaW5nICovCisJCWNhc2UgMHgxNDoKKwkJY2FzZSAweDIzOgorCQljYXNlIEhJRF9ER19JTlBVVE1PREU6CisJCWNhc2UgSElEX0RHX0RFVklDRUlOREVYOgorCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RNQVg6CisJCWNhc2UgSElEX0RHX0lOUkFOR0U6CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCQlyZXR1cm4gLTE7CisJCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9LRVksIEJUTl9UT1VDSCk7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBISURfREdfQ09OVEFDVElEOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQkvKiBsZXQgaGlkLWlucHV0IGRlY2lkZSBmb3IgdGhlIG90aGVycyAqLworCQlyZXR1cm4gMDsKKworCWNhc2UgMHhmZjAwMDAwMDoKKwkJLyogd2UgZG8gbm90IHdhbnQgdG8gbWFwIHRoZXNlOiBubyBpbnB1dC1vcmllbnRlZCBtZWFuaW5nICovCisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtbW1faW5wdXRfbWFwcGVkKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfS0VZIHx8IHVzYWdlLT50eXBlID09IEVWX0FCUykKKwkJY2xlYXJfYml0KHVzYWdlLT5jb2RlLCAqYml0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHdob2xlIHBhY2tldCBoYXMgYmVlbiByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkLAorICogc28gdGhhdCBpdCBjYW4gZGVjaWRlIHdoYXQgdG8gc2VuZCB0byB0aGUgaW5wdXQgbGF5ZXIuCisgKi8KK3N0YXRpYyB2b2lkIG1tbV9maWx0ZXJfZXZlbnQoc3RydWN0IG1tbV9kYXRhICptZCwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJc3RydWN0IG1tbV9maW5nZXIgKm9sZGVzdCA9IDA7CisJYm9vbCBwcmVzc2VkID0gZmFsc2UsIHJlbGVhc2VkID0gZmFsc2U7CisJaW50IGk7CisKKwkvKgorCSAqIHdlIG5lZWQgdG8gaXRlcmF0ZSBvbiBhbGwgZmluZ2VycyB0byBkZWNpZGUgaWYgd2UgaGF2ZSBhIHByZXNzCisJICogb3IgYSByZWxlYXNlIGV2ZW50IGluIG91ciB0b3VjaHNjcmVlbiBlbXVsYXRpb24uCisJICovCisJZm9yIChpID0gMDsgaSA8IDEwOyArK2kpIHsKKwkJc3RydWN0IG1tbV9maW5nZXIgKmYgPSAmbWQtPmZbaV07CisJCWlmICghZi0+dmFsaWQpIHsKKwkJCS8qIHRoaXMgZmluZ2VyIGlzIGp1c3QgcGxhY2Vob2xkZXIgZGF0YSwgaWdub3JlICovCisJCX0gZWxzZSBpZiAoZi0+dG91Y2gpIHsKKwkJCS8qIHRoaXMgZmluZ2VyIGlzIG9uIHRoZSBzY3JlZW4gKi8KKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCwgaSk7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCwgZi0+eCk7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSwgZi0+eSk7CisJCQlpbnB1dF9tdF9zeW5jKGlucHV0KTsKKwkJCS8qCisJCQkgKiB0b3VjaHNjcmVlbiBlbXVsYXRpb246IG1haW50YWluIHRoZSBhZ2UgcmFuaworCQkJICogb2YgdGhpcyBmaW5nZXIsIGRlY2lkZSBpZiB3ZSBoYXZlIGEgcHJlc3MKKwkJCSAqLworCQkJaWYgKGYtPnJhbmsgPT0gMCkgeworCQkJCWYtPnJhbmsgPSArKyhtZC0+bnVtKTsKKwkJCQlpZiAoZi0+cmFuayA9PSAxKQorCQkJCQlwcmVzc2VkID0gdHJ1ZTsKKwkJCX0KKwkJCWlmIChmLT5yYW5rID09IDEpCisJCQkJb2xkZXN0ID0gZjsKKwkJfSBlbHNlIHsKKwkJCS8qIHRoaXMgZmluZ2VyIHRvb2sgb2ZmIHRoZSBzY3JlZW4gKi8KKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogbWFpbnRhaW4gYWdlIHJhbmsgb2Ygb3RoZXJzICovCisJCQlpbnQgajsKKworCQkJZm9yIChqID0gMDsgaiA8IDEwOyArK2opIHsKKwkJCQlzdHJ1Y3QgbW1tX2ZpbmdlciAqZyA9ICZtZC0+ZltqXTsKKwkJCQlpZiAoZy0+cmFuayA+IGYtPnJhbmspIHsKKwkJCQkJZy0+cmFuay0tOworCQkJCQlpZiAoZy0+cmFuayA9PSAxKQorCQkJCQkJb2xkZXN0ID0gZzsKKwkJCQl9CisJCQl9CisJCQlmLT5yYW5rID0gMDsKKwkJCS0tKG1kLT5udW0pOworCQkJaWYgKG1kLT5udW0gPT0gMCkKKwkJCQlyZWxlYXNlZCA9IHRydWU7CisJCX0KKwkJZi0+dmFsaWQgPSAwOworCX0KKworCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCWlmIChvbGRlc3QpIHsKKwkJaWYgKHByZXNzZWQpCisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gsIDEpOworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgb2xkZXN0LT54KTsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIG9sZGVzdC0+eSk7CisJfSBlbHNlIGlmIChyZWxlYXNlZCkgeworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gsIDApOworCX0KK30KKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHVwb24gYWxsIHJlcG9ydHMKKyAqIHNvIHRoYXQgd2UgY2FuIGFjY3VtdWxhdGUgY29udGFjdCBwb2ludCBpbmZvcm1hdGlvbiwKKyAqIGFuZCBjYWxsIGlucHV0X210X3N5bmMgYWZ0ZXIgZWFjaCBwb2ludC4KKyAqLworc3RhdGljIGludCBtbW1fZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCQkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQoreworCXN0cnVjdCBtbW1fZGF0YSAqbWQgPSBoaWRfZ2V0X2RydmRhdGEoaGlkKTsKKwkvKgorCSAqIHN0cmFuZ2VseSwgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGJlZm9yZQorCSAqIGZpZWxkLT5oaWRpbnB1dCBpcyBpbml0aWFsaXplZCEKKwkgKi8KKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHsKKwkJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBmaWVsZC0+aGlkaW5wdXQtPmlucHV0OworCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfREdfVElQU1dJVENIOgorCQkJbWQtPnRvdWNoID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJCW1kLT52YWxpZCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKKwkJCWlmIChtZC0+dmFsaWQpIHsKKwkJCQltZC0+Y3VyaWQgPSB2YWx1ZTsKKwkJCQltZC0+Zlt2YWx1ZV0udG91Y2ggPSBtZC0+dG91Y2g7CisJCQkJbWQtPmZbdmFsdWVdLnZhbGlkID0gMTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEhJRF9HRF9YOgorCQkJaWYgKG1kLT52YWxpZCkKKwkJCQltZC0+ZlttZC0+Y3VyaWRdLnggPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9HRF9ZOgorCQkJaWYgKG1kLT52YWxpZCkKKwkJCQltZC0+ZlttZC0+Y3VyaWRdLnkgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6CisJCQltbW1fZmlsdGVyX2V2ZW50KG1kLCBpbnB1dCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIHdlIGhhdmUgaGFuZGxlZCB0aGUgaGlkaW5wdXQgcGFydCwgbm93IHJlbWFpbnMgaGlkZGV2ICovCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFViAmJiBoaWQtPmhpZGRldl9oaWRfZXZlbnQpCisJCWhpZC0+aGlkZGV2X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbW1tX3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbW1tX2RhdGEgKm1kOworCisJbWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbW1tX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1kKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSAzTSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBtZCk7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKCFyZXQpCisJCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKKworCWlmIChyZXQpCisJCWtmcmVlKG1kKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtbW1fcmVtb3ZlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCWhpZF9od19zdG9wKGhkZXYpOworCWtmcmVlKGhpZF9nZXRfZHJ2ZGF0YShoZGV2KSk7CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgbW1tX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfM00sIFVTQl9ERVZJQ0VfSURfM00xOTY4KSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBtbW1fZGV2aWNlcyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX3VzYWdlX2lkIG1tbV9ncmFiYmVkX3VzYWdlc1tdID0geworCXsgSElEX0FOWV9JRCwgSElEX0FOWV9JRCwgSElEX0FOWV9JRCB9LAorCXsgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBtbW1fZHJpdmVyID0geworCS5uYW1lID0gIjNtLXBjdCIsCisJLmlkX3RhYmxlID0gbW1tX2RldmljZXMsCisJLnByb2JlID0gbW1tX3Byb2JlLAorCS5yZW1vdmUgPSBtbW1fcmVtb3ZlLAorCS5pbnB1dF9tYXBwaW5nID0gbW1tX2lucHV0X21hcHBpbmcsCisJLmlucHV0X21hcHBlZCA9IG1tbV9pbnB1dF9tYXBwZWQsCisJLnVzYWdlX3RhYmxlID0gbW1tX2dyYWJiZWRfdXNhZ2VzLAorCS5ldmVudCA9IG1tbV9ldmVudCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1tbV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJm1tbV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbW1tX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1tbV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtbW1faW5pdCk7Cittb2R1bGVfZXhpdChtbW1fZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jIGIvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMKaW5kZXggNWI0ZDY2ZC4uNzgyODZiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMKQEAgLTQwLDYgKzQwLDExIEBACiBNT0RVTEVfUEFSTV9ERVNDKGZubW9kZSwgIk1vZGUgb2YgZm4ga2V5IG9uIEFwcGxlIGtleWJvYXJkcyAoMCA9IGRpc2FibGVkLCAiCiAJCSJbMV0gPSBma2V5c2xhc3QsIDIgPSBma2V5c2ZpcnN0KSIpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IGlzb19sYXlvdXQgPSAxOworbW9kdWxlX3BhcmFtKGlzb19sYXlvdXQsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpc29fbGF5b3V0LCAiRW5hYmxlL0Rpc2FibGUgaGFyZGNvZGVkIElTTy1sYXlvdXQgb2YgdGhlIGtleWJvYXJkLiAiCisJCSIoMCA9IGRpc2FibGVkLCBbMV0gPSBlbmFibGVkKSIpOworCiBzdHJ1Y3QgYXBwbGVfc2MgewogCXVuc2lnbmVkIGxvbmcgcXVpcmtzOwogCXVuc2lnbmVkIGludCBmbl9vbjsKQEAgLTE5OSwxMSArMjA0LDEzIEBACiAJCX0KIAl9CiAKLQlpZiAoYXNjLT5xdWlya3MgJiBBUFBMRV9JU09fS0VZQk9BUkQpIHsKLQkJdHJhbnMgPSBhcHBsZV9maW5kX3RyYW5zbGF0aW9uKGFwcGxlX2lzb19rZXlib2FyZCwgdXNhZ2UtPmNvZGUpOwotCQlpZiAodHJhbnMpIHsKLQkJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdHJhbnMtPnRvLCB2YWx1ZSk7Ci0JCQlyZXR1cm4gMTsKKyAgICAgICAgaWYgKGlzb19sYXlvdXQpIHsKKwkJaWYgKGFzYy0+cXVpcmtzICYgQVBQTEVfSVNPX0tFWUJPQVJEKSB7CisJCQl0cmFucyA9IGFwcGxlX2ZpbmRfdHJhbnNsYXRpb24oYXBwbGVfaXNvX2tleWJvYXJkLCB1c2FnZS0+Y29kZSk7CisJCQlpZiAodHJhbnMpIHsKKwkJCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIHRyYW5zLT50bywgdmFsdWUpOworCQkJCXJldHVybiAxOworCQkJfQogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwppbmRleCBlYWJlNWY4Li4zNjhmYmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKQEAgLTQsNyArNCw3IEBACiAgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNi0yMDEwIEppcmkgS29zaW5hCiAgKi8KIAogLyoKQEAgLTUxLDcgKzUxLDcgQEAKICAqIFJlZ2lzdGVyIGEgbmV3IHJlcG9ydCBmb3IgYSBkZXZpY2UuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBoaWRfcmVwb3J0ICpoaWRfcmVnaXN0ZXJfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGlkKQorc3RydWN0IGhpZF9yZXBvcnQgKmhpZF9yZWdpc3Rlcl9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSwgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgaWQpCiB7CiAJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmVwb3J0X2VudW0gPSBkZXZpY2UtPnJlcG9ydF9lbnVtICsgdHlwZTsKIAlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OwpAQCAtNzUsNiArNzUsNyBAQAogCiAJcmV0dXJuIHJlcG9ydDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGhpZF9yZWdpc3Rlcl9yZXBvcnQpOwogCiAvKgogICogUmVnaXN0ZXIgYSBuZXcgZmllbGQgZm9yIHRoaXMgcmVwb3J0LgpAQCAtMzg3LDcgKzM4OCw4IEBACiAJX191MzIgZGF0YTsKIAl1bnNpZ25lZCBuOwogCi0JaWYgKGl0ZW0tPnNpemUgPT0gMCkgeworCS8qIExvY2FsIGRlbGltaXRlciBjb3VsZCBoYXZlIHZhbHVlIDAsIHdoaWNoIGFsbG93cyBzaXplIHRvIGJlIDAgKi8KKwlpZiAoaXRlbS0+c2l6ZSA9PSAwICYmIGl0ZW0tPnRhZyAhPSBISURfTE9DQUxfSVRFTV9UQUdfREVMSU1JVEVSKSB7CiAJCWRiZ19oaWQoIml0ZW0gZGF0YSBleHBlY3RlZCBmb3IgbG9jYWwgaXRlbVxuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0xMjQ4LDExICsxMjUwLDEzIEBACiAKIC8qIGEgbGlzdCBvZiBkZXZpY2VzIGZvciB3aGljaCB0aGVyZSBpcyBhIHNwZWNpYWxpemVkIGRyaXZlciBvbiBISUQgYnVzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgaGlkX2JsYWNrbGlzdFtdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF8zTSwgVVNCX0RFVklDRV9JRF8zTTE5NjgpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0E0VEVDSCwgVVNCX0RFVklDRV9JRF9BNFRFQ0hfV0NQMzJQVSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9YNV8wMDVEKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BVFZfSVJDT05UUk9MKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9JUkNPTlRST0w0KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9NSUdIVFlNT1VTRSkgfSwKKwl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfTUFHSUNNT1VTRSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fQU5TSSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fSVNPKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfQU5TSSkgfSwKQEAgLTEzMjQsNiArMTMyOCw3IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dJTkdNQU5fRjNEKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0ZGRyApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0ZPUkNFM0RfUFJPKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GTElHSFRfU1lTVEVNX0c5NDApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX01PTU9fV0hFRUwpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX01PTU9fV0hFRUwyKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9HMjVfV0hFRUwpIH0sCkBAIC0xMzM3LDEwICsxMzQyLDE1IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9XSVJFTEVTU19PUFRJQ0FMX0RFU0tUT1BfM18wKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NT05URVJFWSwgVVNCX0RFVklDRV9JRF9HRU5JVVNfS0IyOUUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfT1JURUssIFVTQl9ERVZJQ0VfSURfT1JURUtfV0tCMjAwMCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUEVUQUxZTlgsIFVTQl9ERVZJQ0VfSURfUEVUQUxZTlhfTUFYVEVSX1JFTU9URSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBTlRBLCBVU0JfREVWSUNFX0lEX1FVQU5UQV9PUFRJQ0FMX1RPVUNIKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFOVEEsIFVTQl9ERVZJQ0VfSURfUElYQVJUX0lNQUdJTkdfSU5DX09QVElDQUxfVE9VQ0hfU0NSRUVOKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TQU1TVU5HLCBVU0JfREVWSUNFX0lEX1NBTVNVTkdfSVJfUkVNT1RFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfUFMzX0NPTlRST0xMRVIpIH0sCisJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1ZBSU9fVkdYX01PVVNFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TVEFOVFVNLCBVU0JfREVWSUNFX0lEX01UUCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU1VOUExVUywgVVNCX0RFVklDRV9JRF9TVU5QTFVTX1dERVNLVE9QKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjMwMCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGIzMDQpIH0sCkBAIC0xNTQzLDggKzE1NTMsOSBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BSVBURUssIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzI0KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BSVJDQUJMRSwgVVNCX0RFVklDRV9JRF9BSVJDQUJMRTEpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FMQ09SLCBVU0JfREVWSUNFX0lEX0FMQ09SX1VTQlJTMjMyKSB9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BU1VTLCBVU0JfREVWSUNFX0lEX0FTVVNfTENNKX0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FTVVMsIFVTQl9ERVZJQ0VfSURfQVNVU19MQ00yKX0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FTVVMsIFVTQl9ERVZJQ0VfSURfQVNVU19UOTFNVCl9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BU1VTVEVLLCBVU0JfREVWSUNFX0lEX0FTVVNURUtfTENNKX0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FTVVNURUssIFVTQl9ERVZJQ0VfSURfQVNVU1RFS19MQ00yKX0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FWRVJNRURJQSwgVVNCX0RFVklDRV9JRF9BVkVSX0ZNX01SODAwKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CRVJLU0hJUkUsIFVTQl9ERVZJQ0VfSURfQkVSS1NISVJFX1BDV0QpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NJREMsIDB4MDEwMykgfSwKQEAgLTE2NjEsOCArMTY3Miw2IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BBTkpJVCwgMHgwMDA0KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QSElMSVBTLCBVU0JfREVWSUNFX0lEX1BISUxJUFNfSUVFRTgwMjE1NF9ET05HTEUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BPV0VSQ09NLCBVU0JfREVWSUNFX0lEX1BPV0VSQ09NX1VQUykgfSwKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEVOWCwgVVNCX0RFVklDRV9JRF9URU5YX0lCVUREWTEpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RFTlgsIFVTQl9ERVZJQ0VfSURfVEVOWF9JQlVERFkyKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9WRVJOSUVSLCBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfTEFCUFJPKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9WRVJOSUVSLCBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfR09URU1QKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9WRVJOSUVSLCBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfU0tJUCkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1kZWJ1Zy5jIGIvZHJpdmVycy9oaWQvaGlkLWRlYnVnLmMKaW5kZXggNmFiZDAzNi4uY2Q0ZWNlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWRlYnVnLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWRlYnVnLmMKQEAgLTg2NCwxMyArODY0LDEzIEBACiAJW0VWX1NORF0gPSBzb3VuZHMsCQkJW0VWX1JFUF0gPSByZXBlYXRzLAogfTsKIAotdm9pZCBoaWRfcmVzb2x2X2V2ZW50KF9fdTggdHlwZSwgX191MTYgY29kZSwgc3RydWN0IHNlcV9maWxlICpmKSB7Ci0KK3N0YXRpYyB2b2lkIGhpZF9yZXNvbHZfZXZlbnQoX191OCB0eXBlLCBfX3UxNiBjb2RlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYpCit7CiAJc2VxX3ByaW50ZihmLCAiJXMuJXMiLCBldmVudHNbdHlwZV0gPyBldmVudHNbdHlwZV0gOiAiPyIsCiAJCW5hbWVzW3R5cGVdID8gKG5hbWVzW3R5cGVdW2NvZGVdID8gbmFtZXNbdHlwZV1bY29kZV0gOiAiPyIpIDogIj8iKTsKIH0KIAotdm9pZCBoaWRfZHVtcF9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBzZXFfZmlsZSAqZikKK3N0YXRpYyB2b2lkIGhpZF9kdW1wX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IHNlcV9maWxlICpmKQogewogCWludCBpLCBqLCBrOwogCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmggYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKaW5kZXggMDEwMzY4ZS4uNzJjMDVmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaApAQCAtMTgsNiArMTgsOSBAQAogI2lmbmRlZiBISURfSURTX0hfRklMRQogI2RlZmluZSBISURfSURTX0hfRklMRQogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfM00JCTB4MDU5NgorI2RlZmluZSBVU0JfREVWSUNFX0lEXzNNMTk2OAkJMHgwNTAwCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BNFRFQ0gJCTB4MDlkYQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVCTB4MDAwNgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0E0VEVDSF9YNV8wMDVECTB4MDAwYQpAQCAtNTYsNiArNTksNyBAQAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfQVBQTEUJCTB4MDVhYwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX01JR0hUWU1PVVNFCTB4MDMwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX01BR0lDTU9VU0UJMHgwMzBkCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fQU5TSQkweDAyMGUKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9JU08JMHgwMjBmCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSX0FOU0kJMHgwMjE0CkBAIC05Niw5ICsxMDAsMTIgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BVFZfSVJDT05UUk9MCTB4ODI0MQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0lSQ09OVFJPTDQJMHg4MjQyCiAKLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BU1VTCQkweDBiMDUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BU1VTX0xDTQkJMHgxNzI2Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVNVU19MQ00yCQkweDE3NWIKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BU1VTCQkweDA0ODYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BU1VTX1Q5MU1UCTB4MDE4NQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQVNVU1RFSwkJMHgwYjA1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVNVU1RFS19MQ00JMHgxNzI2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVNVU1RFS19MQ00yCTB4MTc1YgogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfQVRFTgkJMHgwNTU3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVRFTl9VQzEwMEtNCTB4MjAwNApAQCAtMTY5LDYgKzE3Niw5IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfRVNTRU5USUFMX1JFQUxJVFkJMHgwZDdmCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRVNTRU5USUFMX1JFQUxJVFlfUDUgMHgwMTAwCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FVFVSQk9UT1VDSAkweDIyYjkKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9FVFVSQk9UT1VDSAkweDAwMDYKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX0VUVAkJMHgwNjY0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVEM1VUgJCTB4MDMwOQogCkBAIC0zMDMsNiArMzEzLDcgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9SVU1CTEVQQUQyXzIJMHhjMjE5CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0lOR01BTl9GM0QJMHhjMjgzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRk9SQ0UzRF9QUk8JMHhjMjg2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRkxJR0hUX1NZU1RFTV9HOTQwCTB4YzI4NwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dIRUVMCTB4YzI5NAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dJTkdNQU5fRkZHCTB4YzI5MwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX01PTU9fV0hFRUwJMHhjMjk1CkBAIC0zNjUsNiArMzc2LDkgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9PTlRSQUsJCTB4MGEwNwogI2RlZmluZSBVU0JfREVWSUNFX0lEX09OVFJBS19BRFUxMDAJMHgwMDY0CiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9PUlRFSwkJMHgwNWE0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfT1JURUtfV0tCMjAwMAkweDIwMDAKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1BBTkpJVAkJMHgxMzRjCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QQU5USEVSTE9SRAkweDA4MTAKQEAgLTM4Miw5ICszOTYsMTYgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QT1dFUkNPTQkJMHgwZDlmCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUE9XRVJDT01fVVBTCTB4MDAwMgogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfUFJPRElHRQkJMHgwNWFmCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUFJPRElHRV9DT1JETEVTUwkweDMwNjIKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1NBSVRFSwkJMHgwNmEzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU0FJVEVLX1JVTUJMRVBBRAkweGZmMTcKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX1FVQU5UQQkJMHgwNDA4CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUVVBTlRBX09QVElDQUxfVE9VQ0gJMHgzMDAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUElYQVJUX0lNQUdJTkdfSU5DX09QVElDQUxfVE9VQ0hfU0NSRUVOCTB4MzAwMQorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU0FNU1VORwkJMHgwNDE5CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19JUl9SRU1PVEUJMHgwMDAxCiAKQEAgLTM5NiwxOCArNDE3LDIwIEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0ZJUlNUCTB4MDAzNAogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQVNUCTB4MDA0NgogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfU1RBTlRVTQkJMHgxZjg3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVRQCQkweDAwMDIKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1NVTgkJMHgwNDMwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUkFSSVRBTl9LVk1fRE9OR0xFCTB4Y2RhYgogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU1VOUExVUwkJMHgwNGZjCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU1VOUExVU19XREVTS1RPUAkweDA1ZDgKIAotI2RlZmluZSBVU0JfVkVORE9SX0lEX1RFTlgJCTB4MTEzMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1RFTlhfSUJVRERZMQkweDAwMDEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9URU5YX0lCVUREWTIJMHgwMDAyCi0KICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIJMHgwNDRmCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UT1VDSFBBQ0sJCTB4MWJmZAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1RPVUNIUEFDS19SVFMJMHgxNjg4CisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UT1BNQVgJCTB4MDY2MwogI2RlZmluZSBVU0JfREVWSUNFX0lEX1RPUE1BWF9DT0JSQVBBRAkweDAxMDMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwppbmRleCA1ODYyYjBmLi43OWQ5ZWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgVm9qdGVjaCBQYXZsaWsKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNi0yMDEwIEppcmkgS29zaW5hCiAgKgogICogIEhJRCB0byBMaW51eCBJbnB1dCBtYXBwaW5nCiAgKi8KQEAgLTE5MywxMiArMTkzLDE3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBISURfVVBfQlVUVE9OOgotCQljb2RlID0gKCh1c2FnZS0+aGlkIC0gMSkgJiAweGYpOworCQljb2RlID0gKCh1c2FnZS0+aGlkIC0gMSkgJiBISURfVVNBR0UpOwogCiAJCXN3aXRjaCAoZmllbGQtPmFwcGxpY2F0aW9uKSB7CiAJCWNhc2UgSElEX0dEX01PVVNFOgogCQljYXNlIEhJRF9HRF9QT0lOVEVSOiAgY29kZSArPSAweDExMDsgYnJlYWs7Ci0JCWNhc2UgSElEX0dEX0pPWVNUSUNLOiBjb2RlICs9IDB4MTIwOyBicmVhazsKKwkJY2FzZSBISURfR0RfSk9ZU1RJQ0s6CisJCQkJICAgICAgaWYgKGNvZGUgPD0gMHhmKQorCQkJCQkgICAgICBjb2RlICs9IEJUTl9KT1lTVElDSzsKKwkJCQkgICAgICBlbHNlCisJCQkJCSAgICAgIGNvZGUgKz0gQlROX1RSSUdHRVJfSEFQUFk7CisJCQkJICAgICAgYnJlYWs7CiAJCWNhc2UgSElEX0dEX0dBTUVQQUQ6ICBjb2RlICs9IDB4MTMwOyBicmVhazsKIAkJZGVmYXVsdDoKIAkJCXN3aXRjaCAoZmllbGQtPnBoeXNpY2FsKSB7CkBAIC00MDAsNiArNDA1LDcgQEAKIAkJY2FzZSAweDE5MjogbWFwX2tleV9jbGVhcihLRVlfQ0FMQyk7CQlicmVhazsKIAkJY2FzZSAweDE5NDogbWFwX2tleV9jbGVhcihLRVlfRklMRSk7CQlicmVhazsKIAkJY2FzZSAweDE5NjogbWFwX2tleV9jbGVhcihLRVlfV1dXKTsJCWJyZWFrOworCQljYXNlIDB4MTk5OiBtYXBfa2V5X2NsZWFyKEtFWV9DSEFUKTsJCWJyZWFrOwogCQljYXNlIDB4MTljOiBtYXBfa2V5X2NsZWFyKEtFWV9MT0dPRkYpOwkJYnJlYWs7CiAJCWNhc2UgMHgxOWU6IG1hcF9rZXlfY2xlYXIoS0VZX0NPRkZFRSk7CQlicmVhazsKIAkJY2FzZSAweDFhNjogbWFwX2tleV9jbGVhcihLRVlfSEVMUCk7CQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZy5jIGIvZHJpdmVycy9oaWQvaGlkLWxnLmMKaW5kZXggOWZjZDNkMC4uMzY3N2M5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWxnLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWxnLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNkZWZpbmUgTEdfRkYJCQkweDIwMAogI2RlZmluZSBMR19GRjIJCQkweDQwMAogI2RlZmluZSBMR19SREVTQ19SRUxfQUJTCTB4ODAwCisjZGVmaW5lIExHX0ZGMwkJCTB4MTAwMAogCiAvKgogICogQ2VydGFpbiBMb2dpdGVjaCBrZXlib2FyZHMgc2VuZCBpbiByZXBvcnQgIzMga2V5cyB3aGljaCBhcmUgZmFyCkBAIC0yNjYsNyArMjY3LDcgQEAKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKLQlpZiAocXVpcmtzICYgKExHX0ZGIHwgTEdfRkYyKSkKKwlpZiAocXVpcmtzICYgKExHX0ZGIHwgTEdfRkYyIHwgTEdfRkYzKSkKIAkJY29ubmVjdF9tYXNrICY9IH5ISURfQ09OTkVDVF9GRjsKIAogCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBjb25uZWN0X21hc2spOwpAQCAtMjc5LDYgKzI4MCw4IEBACiAJCWxnZmZfaW5pdChoZGV2KTsKIAlpZiAocXVpcmtzICYgTEdfRkYyKQogCQlsZzJmZl9pbml0KGhkZXYpOworCWlmIChxdWlya3MgJiBMR19GRjMpCisJCWxnM2ZmX2luaXQoaGRldik7CiAKIAlyZXR1cm4gMDsKIGVycl9mcmVlOgpAQCAtMzMxLDYgKzMzNCw4IEBACiAJCS5kcml2ZXJfZGF0YSA9IExHX0ZGIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JVTUJMRVBBRDIpLAogCQkuZHJpdmVyX2RhdGEgPSBMR19GRjIgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRkxJR0hUX1NZU1RFTV9HOTQwKSwKKwkJLmRyaXZlcl9kYXRhID0gTEdfRkYzIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX1NQQUNFTkFWSUdBVE9SKSwKIAkJLmRyaXZlcl9kYXRhID0gTEdfUkRFU0NfUkVMX0FCUyB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TUEFDRVRSQVZFTExFUiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbGcuaCBiL2RyaXZlcnMvaGlkL2hpZC1sZy5oCmluZGV4IGJmMzE1OTIuLmNlMmFjODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1sZy5oCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sZy5oCkBAIC0xMyw0ICsxMywxMCBAQAogc3RhdGljIGlubGluZSBpbnQgbGcyZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikgeyByZXR1cm4gLTE7IH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0xPR0lHOTQwX0ZGCitpbnQgbGczZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldik7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbGczZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikgeyByZXR1cm4gLTE7IH0KKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZzNmZi5jIGIvZHJpdmVycy9oaWQvaGlkLWxnM2ZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwMjgzMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sZzNmZi5jCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIExvZ2l0ZWNoIEZsaWdodCBTeXN0ZW0gRzk0MAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgR2FyeSBTdGVpbiA8TG9yZENuaWRhcmlhbkBnbWFpbC5jb20+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKworI2luY2x1ZGUgInVzYmhpZC91c2JoaWQuaCIKKyNpbmNsdWRlICJoaWQtbGcuaCIKKworLyoKKyAqIEc5NDAgVGhlb3J5IG9mIE9wZXJhdGlvbiAoZnJvbSBleHBlcmltZW50YXRpb24pCisgKgorICogVGhlcmUgYXJlIDYzIGZpZWxkcyAob25seSAzIG9mIHRoZW0gY3VycmVudGx5IHVzZWQpCisgKiAwIC0gc2VlbXMgdG8gYmUgY29tbWFuZCBmaWVsZAorICogMSAtIDMwIGRlYWwgd2l0aCB0aGUgeCBheGlzCisgKiAzMSAtNjAgZGVhbCB3aXRoIHRoZSB5IGF4aXMKKyAqCisgKiBGaWVsZCAxIGlzIHggYXhpcyBjb25zdGFudCBmb3JjZQorICogRmllbGQgMzEgaXMgeSBheGlzIGNvbnN0YW50IGZvcmNlCisgKgorICogb3RoZXIgaW50ZXJlc3RpbmcgZmllbGRzIDEsMiwzLDQgb24geCBheGlzCisgKiAoc2FtZSBmb3IgMzEsMzIsMzMsMzQgb24geSBheGlzKQorICoKKyAqIDAgMCAxMjcgMTI3IG1ha2VzIHRoZSBqb3lzdGljayBhdXRvY2VudGVyIGhhcmQKKyAqCisgKiAxMjcgMCAxMjcgMTI3IG1ha2VzIHRoZSBqb3lzdGljayBsb29zZSBvbiB0aGUgcmlnaHQsCisgKiBidXQgc3RvcHMgYWxsIG1vdmVtbnQgbGVmdAorICoKKyAqIC0xMjcgMCAtMTI3IC0xMjcgbWFrZXMgdGhlIGpveXN0aWNrIGxvb3NlIG9uIHRoZSBsZWZ0LAorICogYnV0IHN0b3BzIGFsbCBtb3ZlbWVudCByaWdodAorICoKKyAqIDAgMCAtMTI3IC0xMjcgbWFrZXMgdGhlIGpveXN0aWNrIHJhdHRsZSB2ZXJ5IGhhcmQKKyAqCisgKiBJJ20gc3VyZSB0aGVzZSBhcmUgZWZmZWN0cyB0aGF0IEkgZG9uJ3Qga25vdyBlbm91Z2ggYWJvdXQgdGhlbQorICovCisKK3N0cnVjdCBsZzNmZl9kZXZpY2UgeworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Cit9OworCitzdGF0aWMgaW50IGhpZF9sZzNmZl9wbGF5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3QgPSAmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3Q7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X2xpc3QtPm5leHQsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKKwlpbnQgeCwgeTsKKworLyoKKyAqIE1heHVzYWdlIHNob3VsZCBhbHdheXMgYmUgNjMgKG1heGltdW0gZmllbGRzKQorICogbGlrZWx5IGEgYmV0dGVyIHdheSB0byBlbnN1cmUgdGhpcyBkYXRhIGlzIGNsZWFuCisgKi8KKwltZW1zZXQocmVwb3J0LT5maWVsZFswXS0+dmFsdWUsIDAsIHNpemVvZihfX3MzMikqcmVwb3J0LT5maWVsZFswXS0+bWF4dXNhZ2UpOworCisJc3dpdGNoIChlZmZlY3QtPnR5cGUpIHsKKwljYXNlIEZGX0NPTlNUQU5UOgorLyoKKyAqIEFscmVhZHkgY2xhbXBlZCBpbiBmZl9tZW1sZXNzCisgKiAwIGlzIGNlbnRlciAoZGlmZmVyZW50IHRoZW4gb3RoZXIgbG9naXRlY2gpCisgKi8KKwkJeCA9IGVmZmVjdC0+dS5yYW1wLnN0YXJ0X2xldmVsOworCQl5ID0gZWZmZWN0LT51LnJhbXAuZW5kX2xldmVsOworCisJCS8qIHNlbmQgY29tbWFuZCBieXRlICovCisJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHg1MTsKKworLyoKKyAqIFNpZ24gYmFja3dhcmRzIGZyb20gb3RoZXIgRm9yY2UzZCBwcm8KKyAqIHdoaWNoIGdldCByZWNhc3QgaGVyZSBpbiB0d28ncyBjb21wbGVtZW50IDggYml0cworICovCisJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gKHVuc2lnbmVkIGNoYXIpKC14KTsKKwkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMzFdID0gKHVuc2lnbmVkIGNoYXIpKC15KTsKKworCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9PVVQpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBoaWRfbGczZmZfc2V0X2F1dG9jZW50ZXIoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1MTYgbWFnbml0dWRlKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0gJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9saXN0LT5uZXh0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7CisKKy8qCisgKiBBdXRvIENlbnRlcmluZyBwcm9iZWQgZnJvbSBkZXZpY2UKKyAqIE5PVEU6IGRlYWRtYW4ncyBzd2l0Y2ggb24gRzk0MCBtdXN0IGJlIGNvdmVyZWQKKyAqIGZvciBlZmZlY3RzIHRvIHdvcmsKKyAqLworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHg1MTsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IDB4MDA7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSAweDAwOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzNdID0gMHg3RjsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs0XSA9IDB4N0Y7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMzFdID0gMHgwMDsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszMl0gPSAweDAwOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzMzXSA9IDB4N0Y7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMzRdID0gMHg3RjsKKworCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX09VVCk7Cit9CisKKworc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCBmZjNfam95c3RpY2tfYWNbXSA9IHsKKwlGRl9DT05TVEFOVCwKKwlGRl9BVVRPQ0VOVEVSLAorCS0xCit9OworCitpbnQgbGczZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0ID0gbGlzdF9lbnRyeShoaWQtPmlucHV0cy5uZXh0LCBzdHJ1Y3QgaGlkX2lucHV0LCBsaXN0KTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfbGlzdCA9ICZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBoaWRpbnB1dC0+aW5wdXQ7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKKwljb25zdCBzaWduZWQgc2hvcnQgKmZmX2JpdHMgPSBmZjNfam95c3RpY2tfYWM7CisJaW50IGVycm9yOworCWludCBpOworCisJLyogRmluZCB0aGUgcmVwb3J0IHRvIHVzZSAqLworCWlmIChsaXN0X2VtcHR5KHJlcG9ydF9saXN0KSkgeworCQllcnJfaGlkKCJObyBvdXRwdXQgcmVwb3J0IGZvdW5kIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBDaGVjayB0aGF0IHRoZSByZXBvcnQgbG9va3Mgb2sgKi8KKwlyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9saXN0LT5uZXh0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7CisJaWYgKCFyZXBvcnQpIHsKKwkJZXJyX2hpZCgiTlVMTCBvdXRwdXQgcmVwb3J0Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmaWVsZCA9IHJlcG9ydC0+ZmllbGRbMF07CisJaWYgKCFmaWVsZCkgeworCQllcnJfaGlkKCJOVUxMIGZpZWxkIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBBc3N1bWUgc2luZ2xlIGZpeGVkIGRldmljZSBHOTQwICovCisJZm9yIChpID0gMDsgZmZfYml0c1tpXSA+PSAwOyBpKyspCisJCXNldF9iaXQoZmZfYml0c1tpXSwgZGV2LT5mZmJpdCk7CisKKwllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGRldiwgTlVMTCwgaGlkX2xnM2ZmX3BsYXkpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKHRlc3RfYml0KEZGX0FVVE9DRU5URVIsIGRldi0+ZmZiaXQpKQorCQlkZXYtPmZmLT5zZXRfYXV0b2NlbnRlciA9IGhpZF9sZzNmZl9zZXRfYXV0b2NlbnRlcjsKKworCWRldl9pbmZvKCZoaWQtPmRldiwgIkZvcmNlIGZlZWRiYWNrIGZvciBMb2dpdGVjaCBGbGlnaHQgU3lzdGVtIEc5NDAgYnkgIgorCQkJIkdhcnkgU3RlaW4gPExvcmRDbmlkYXJpYW5AZ21haWwuY29tPlxuIik7CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtbGdmZi5jCmluZGV4IDk4N2FiZWIuLjYxMTQyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWxnZmYuYwpAQCAtNjcsNiArNjcsNyBAQAogCXsgMHgwNDZkLCAweGMyMTksIGZmX3J1bWJsZSB9LAogCXsgMHgwNDZkLCAweGMyODMsIGZmX2pveXN0aWNrIH0sCiAJeyAweDA0NmQsIDB4YzI4NiwgZmZfam95c3RpY2tfYWMgfSwKKwl7IDB4MDQ2ZCwgMHhjMjg3LCBmZl9qb3lzdGlja19hYyB9LAogCXsgMHgwNDZkLCAweGMyOTMsIGZmX2pveXN0aWNrIH0sCiAJeyAweDA0NmQsIDB4YzI5NCwgZmZfd2hlZWwgfSwKIAl7IDB4MDQ2ZCwgMHhjMjk1LCBmZl9qb3lzdGljayB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYyBiL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzYTk0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMKQEAgLTAsMCArMSw0NDkgQEAKKy8qCisgKiAgIEFwcGxlICJNYWdpYyIgV2lyZWxlc3MgTW91c2UgZHJpdmVyCisgKgorICogICBDb3B5cmlnaHQgKGMpIDIwMTAgTWljaGFlbCBQb29sZSA8bWRwb29sZUB0cm9pbHVzLm9yZz4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0YXRpYyBib29sIGVtdWxhdGVfM2J1dHRvbiA9IHRydWU7Cittb2R1bGVfcGFyYW0oZW11bGF0ZV8zYnV0dG9uLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZW11bGF0ZV8zYnV0dG9uLCAiRW11bGF0ZSBhIG1pZGRsZSBidXR0b24iKTsKKworc3RhdGljIGludCBtaWRkbGVfYnV0dG9uX3N0YXJ0ID0gLTM1MDsKK3N0YXRpYyBpbnQgbWlkZGxlX2J1dHRvbl9zdG9wID0gKzM1MDsKKworc3RhdGljIGJvb2wgZW11bGF0ZV9zY3JvbGxfd2hlZWwgPSB0cnVlOworbW9kdWxlX3BhcmFtKGVtdWxhdGVfc2Nyb2xsX3doZWVsLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZW11bGF0ZV9zY3JvbGxfd2hlZWwsICJFbXVsYXRlIGEgc2Nyb2xsIHdoZWVsIik7CisKK3N0YXRpYyBib29sIHJlcG9ydF90b3VjaGVzID0gdHJ1ZTsKK21vZHVsZV9wYXJhbShyZXBvcnRfdG91Y2hlcywgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlcG9ydF90b3VjaGVzLCAiRW1pdCB0b3VjaCByZWNvcmRzIChvdGhlcndpc2UsIG9ubHkgdXNlIHRoZW0gZm9yIGVtdWxhdGlvbikiKTsKKworc3RhdGljIGJvb2wgcmVwb3J0X3VuZGVjaXBoZXJlZDsKK21vZHVsZV9wYXJhbShyZXBvcnRfdW5kZWNpcGhlcmVkLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVwb3J0X3VuZGVjaXBoZXJlZCwgIlJlcG9ydCB1bmRlY2lwaGVyZWQgbXVsdGktdG91Y2ggc3RhdGUgZmllbGQgdXNpbmcgYSBNU0NfUkFXIGV2ZW50Iik7CisKKyNkZWZpbmUgVE9VQ0hfUkVQT1JUX0lEICAgMHgyOQorLyogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIG5vdCBwcmVjaXNlLCBidXQgdGhleSdyZSBjbG9zZSBlbm91Z2guICAoQml0cworICogMHgwMyBzZWVtIHRvIGluZGljYXRlIHRoZSBhc3BlY3QgcmF0aW8gb2YgdGhlIHRvdWNoLCBiaXRzIDB4NzAgc2VlbQorICogdG8gYmUgc29tZSBraW5kIG9mIGJpdCBtYXNrIC0tIDB4MjAgbWF5IGJlIGEgbmVhci1maWVsZCByZWFkaW5nLAorICogYW5kIDB4NDAgaXMgYWN0dWFsIGNvbnRhY3QsIGFuZCAweDEwIG1heSBiZSBhIHN0YXJ0L3N0b3Agb3IgY2hhbmdlCisgKiBpbmRpY2F0aW9uLikKKyAqLworI2RlZmluZSBUT1VDSF9TVEFURV9NQVNLICAweGYwCisjZGVmaW5lIFRPVUNIX1NUQVRFX05PTkUgIDB4MDAKKyNkZWZpbmUgVE9VQ0hfU1RBVEVfU1RBUlQgMHgzMAorI2RlZmluZSBUT1VDSF9TVEFURV9EUkFHICAweDQwCisKKy8qKgorICogc3RydWN0IG1hZ2ljbW91c2Vfc2MgLSBUcmFja3MgTWFnaWMgTW91c2Utc3BlY2lmaWMgZGF0YS4KKyAqIEBpbnB1dDogSW5wdXQgZGV2aWNlIHRocm91Z2ggd2hpY2ggd2UgcmVwb3J0IGV2ZW50cy4KKyAqIEBxdWlya3M6IEN1cnJlbnRseSB1bnVzZWQuCisgKiBAbGFzdF90aW1lc3RhbXA6IFRpbWVzdGFtcCBmcm9tIG1vc3QgcmVjZW50ICgxOC1iaXQpIHRvdWNoIHJlcG9ydAorICogICAgICh1bml0cyBvZiBtaWxsaXNlY29uZHMgb3ZlciBzaG9ydCB3aW5kb3dzLCBidXQgc2VlbXMgdG8KKyAqICAgICBpbmNyZWFzZSBmYXN0ZXIgd2hlbiB0aGVyZSBhcmUgbm8gdG91Y2hlcykuCisgKiBAZGVsdGFfdGltZTogMTgtYml0IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIG1vc3QgcmVjZW50IHRvdWNoCisgKiAgICAgcmVwb3J0cyBmcm9tIHRoZSBtb3VzZS4KKyAqIEBudG91Y2hlczogTnVtYmVyIG9mIHRvdWNoZXMgaW4gbW9zdCByZWNlbnQgdG91Y2ggcmVwb3J0LgorICogQHNjcm9sbF9hY2NlbDogTnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNjcm9sbCBtb3Rpb25zLgorICogQHNjcm9sbF9qaWZmaWVzOiBUaW1lIG9mIGxhc3Qgc2Nyb2xsIG1vdGlvbi4KKyAqIEB0b3VjaGVzOiBNb3N0IHJlY2VudCBkYXRhIGZvciBhIHRvdWNoLCBpbmRleGVkIGJ5IHRyYWNraW5nIElELgorICogQHRyYWNraW5nX2lkczogTWFwcGluZyBvZiBjdXJyZW50IHRvdWNoIGlucHV0IGRhdGEgdG8gQHRvdWNoZXMuCisgKi8KK3N0cnVjdCBtYWdpY21vdXNlX3NjIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwl1bnNpZ25lZCBsb25nIHF1aXJrczsKKworCWludCBsYXN0X3RpbWVzdGFtcDsKKwlpbnQgZGVsdGFfdGltZTsKKwlpbnQgbnRvdWNoZXM7CisJaW50IHNjcm9sbF9hY2NlbDsKKwl1bnNpZ25lZCBsb25nIHNjcm9sbF9qaWZmaWVzOworCisJc3RydWN0IHsKKwkJc2hvcnQgeDsKKwkJc2hvcnQgeTsKKwkJc2hvcnQgc2Nyb2xsX3k7CisJCXU4IHNpemU7CisJfSB0b3VjaGVzWzE2XTsKKwlpbnQgdHJhY2tpbmdfaWRzWzE2XTsKK307CisKK3N0YXRpYyBpbnQgbWFnaWNtb3VzZV9maXJtX3RvdWNoKHN0cnVjdCBtYWdpY21vdXNlX3NjICptc2MpCit7CisJaW50IHRvdWNoID0gLTE7CisJaW50IGlpOworCisJLyogSWYgdGhlcmUgaXMgb25seSBvbmUgImZpcm0iIHRvdWNoLCBzZXQgdG91Y2ggdG8gaXRzCisJICogdHJhY2tpbmcgSUQuCisJICovCisJZm9yIChpaSA9IDA7IGlpIDwgbXNjLT5udG91Y2hlczsgaWkrKykgeworCQlpbnQgaWR4ID0gbXNjLT50cmFja2luZ19pZHNbaWldOworCQlpZiAobXNjLT50b3VjaGVzW2lkeF0uc2l6ZSA8IDgpIHsKKwkJCS8qIElnbm9yZSB0aGlzIHRvdWNoLiAqLworCQl9IGVsc2UgaWYgKHRvdWNoID49IDApIHsKKwkJCXRvdWNoID0gLTE7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXRvdWNoID0gaWR4OworCQl9CisJfQorCisJcmV0dXJuIHRvdWNoOworfQorCitzdGF0aWMgdm9pZCBtYWdpY21vdXNlX2VtaXRfYnV0dG9ucyhzdHJ1Y3QgbWFnaWNtb3VzZV9zYyAqbXNjLCBpbnQgc3RhdGUpCit7CisJaW50IGxhc3Rfc3RhdGUgPSB0ZXN0X2JpdChCVE5fTEVGVCwgbXNjLT5pbnB1dC0+a2V5KSA8PCAwIHwKKwkJdGVzdF9iaXQoQlROX1JJR0hULCBtc2MtPmlucHV0LT5rZXkpIDw8IDEgfAorCQl0ZXN0X2JpdChCVE5fTUlERExFLCBtc2MtPmlucHV0LT5rZXkpIDw8IDI7CisKKwlpZiAoZW11bGF0ZV8zYnV0dG9uKSB7CisJCWludCBpZDsKKworCQkvKiBJZiBzb21lIGJ1dHRvbiB3YXMgcHJlc3NlZCBiZWZvcmUsIGtlZXAgaXQgaGVsZAorCQkgKiBkb3duLiAgT3RoZXJ3aXNlLCBpZiB0aGVyZSdzIGV4YWN0bHkgb25lIGZpcm0KKwkJICogdG91Y2gsIHVzZSB0aGF0IHRvIG92ZXJyaWRlIHRoZSBtb3VzZSdzIGd1ZXNzLgorCQkgKi8KKwkJaWYgKHN0YXRlID09IDApIHsKKwkJCS8qIFRoZSBidXR0b24gd2FzIHJlbGVhc2VkLiAqLworCQl9IGVsc2UgaWYgKGxhc3Rfc3RhdGUgIT0gMCkgeworCQkJc3RhdGUgPSBsYXN0X3N0YXRlOworCQl9IGVsc2UgaWYgKChpZCA9IG1hZ2ljbW91c2VfZmlybV90b3VjaChtc2MpKSA+PSAwKSB7CisJCQlpbnQgeCA9IG1zYy0+dG91Y2hlc1tpZF0ueDsKKwkJCWlmICh4IDwgbWlkZGxlX2J1dHRvbl9zdGFydCkKKwkJCQlzdGF0ZSA9IDE7CisJCQllbHNlIGlmICh4ID4gbWlkZGxlX2J1dHRvbl9zdG9wKQorCQkJCXN0YXRlID0gMjsKKwkJCWVsc2UKKwkJCQlzdGF0ZSA9IDQ7CisJCX0gLyogZWxzZTogd2Uga2VlcCB0aGUgbW91c2UncyBndWVzcyAqLworCisJCWlucHV0X3JlcG9ydF9rZXkobXNjLT5pbnB1dCwgQlROX01JRERMRSwgc3RhdGUgJiA0KTsKKwl9CisKKwlpbnB1dF9yZXBvcnRfa2V5KG1zYy0+aW5wdXQsIEJUTl9MRUZULCBzdGF0ZSAmIDEpOworCWlucHV0X3JlcG9ydF9rZXkobXNjLT5pbnB1dCwgQlROX1JJR0hULCBzdGF0ZSAmIDIpOworCisJaWYgKHN0YXRlICE9IGxhc3Rfc3RhdGUpCisJCW1zYy0+c2Nyb2xsX2FjY2VsID0gMDsKK30KKworc3RhdGljIHZvaWQgbWFnaWNtb3VzZV9lbWl0X3RvdWNoKHN0cnVjdCBtYWdpY21vdXNlX3NjICptc2MsIGludCByYXdfaWQsIHU4ICp0ZGF0YSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IG1zYy0+aW5wdXQ7CisJX19zMzIgeF95ID0gdGRhdGFbMF0gPDwgOCB8IHRkYXRhWzFdIDw8IDE2IHwgdGRhdGFbMl0gPDwgMjQ7CisJaW50IG1pc2MgPSB0ZGF0YVs1XSB8IHRkYXRhWzZdIDw8IDg7CisJaW50IGlkID0gKG1pc2MgPj4gNikgJiAxNTsKKwlpbnQgeCA9IHhfeSA8PCAxMiA+PiAyMDsKKwlpbnQgeSA9IC0oeF95ID4+IDIwKTsKKworCS8qIFN0b3JlIHRyYWNraW5nIElEIGFuZCBvdGhlciBmaWVsZHMuICovCisJbXNjLT50cmFja2luZ19pZHNbcmF3X2lkXSA9IGlkOworCW1zYy0+dG91Y2hlc1tpZF0ueCA9IHg7CisJbXNjLT50b3VjaGVzW2lkXS55ID0geTsKKwltc2MtPnRvdWNoZXNbaWRdLnNpemUgPSBtaXNjICYgNjM7CisKKwkvKiBJZiByZXF1ZXN0ZWQsIGVtdWxhdGUgYSBzY3JvbGwgd2hlZWwgYnkgZGV0ZWN0aW5nIHNtYWxsCisJICogdmVydGljYWwgdG91Y2ggbW90aW9ucyBhbG9uZyB0aGUgbWlkZGxlIG9mIHRoZSBtb3VzZS4KKwkgKi8KKwlpZiAoZW11bGF0ZV9zY3JvbGxfd2hlZWwgJiYKKwkgICAgbWlkZGxlX2J1dHRvbl9zdGFydCA8IHggJiYgeCA8IG1pZGRsZV9idXR0b25fc3RvcCkgeworCQlzdGF0aWMgY29uc3QgaW50IGFjY2VsX3Byb2ZpbGVbXSA9IHsKKwkJCTI1NiwgMjI4LCAxOTIsIDE2MCwgMTI4LCA5NiwgNjQsIDMyLAorCQl9OworCQl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CisJCWludCBzdGVwID0gbXNjLT50b3VjaGVzW2lkXS5zY3JvbGxfeSAtIHk7CisKKwkJLyogUmVzZXQgYWNjZWxlcmF0aW9uIGFmdGVyIGhhbGYgYSBzZWNvbmQuICovCisJCWlmICh0aW1lX2FmdGVyKG5vdywgbXNjLT5zY3JvbGxfamlmZmllcyArIEhaIC8gMikpCisJCQltc2MtPnNjcm9sbF9hY2NlbCA9IDA7CisKKwkJLyogQ2FsY3VsYXRlIGFuZCBhcHBseSB0aGUgc2Nyb2xsIG1vdGlvbi4gKi8KKwkJc3dpdGNoICh0ZGF0YVs3XSAmIFRPVUNIX1NUQVRFX01BU0spIHsKKwkJY2FzZSBUT1VDSF9TVEFURV9TVEFSVDoKKwkJCW1zYy0+dG91Y2hlc1tpZF0uc2Nyb2xsX3kgPSB5OworCQkJbXNjLT5zY3JvbGxfYWNjZWwgPSBtaW5fdChpbnQsIG1zYy0+c2Nyb2xsX2FjY2VsICsgMSwKKwkJCQkJCUFSUkFZX1NJWkUoYWNjZWxfcHJvZmlsZSkgLSAxKTsKKwkJCWJyZWFrOworCQljYXNlIFRPVUNIX1NUQVRFX0RSQUc6CisJCQlzdGVwID0gc3RlcCAvIGFjY2VsX3Byb2ZpbGVbbXNjLT5zY3JvbGxfYWNjZWxdOworCQkJaWYgKHN0ZXAgIT0gMCkgeworCQkJCW1zYy0+dG91Y2hlc1tpZF0uc2Nyb2xsX3kgPSB5OworCQkJCW1zYy0+c2Nyb2xsX2ppZmZpZXMgPSBub3c7CisJCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dCwgUkVMX1dIRUVMLCBzdGVwKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogR2VuZXJhdGUgdGhlIGlucHV0IGV2ZW50cyBmb3IgdGhpcyB0b3VjaC4gKi8KKwlpZiAocmVwb3J0X3RvdWNoZXMpIHsKKwkJaW50IG9yaWVudGF0aW9uID0gKG1pc2MgPj4gMTApIC0gMzI7CisKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1RSQUNLSU5HX0lELCBpZCk7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9UT1VDSF9NQUpPUiwgdGRhdGFbM10pOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfVE9VQ0hfTUlOT1IsIHRkYXRhWzRdKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX09SSUVOVEFUSU9OLCBvcmllbnRhdGlvbik7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9YLCB4KTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1ksIHkpOworCisJCWlmIChyZXBvcnRfdW5kZWNpcGhlcmVkKQorCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX01TQywgTVNDX1JBVywgdGRhdGFbN10pOworCisJCWlucHV0X210X3N5bmMoaW5wdXQpOworCX0KK30KKworc3RhdGljIGludCBtYWdpY21vdXNlX3Jhd19ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwKKwkJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgdTggKmRhdGEsIGludCBzaXplKQoreworCXN0cnVjdCBtYWdpY21vdXNlX3NjICptc2MgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBtc2MtPmlucHV0OworCWludCB4LCB5LCB0cywgaWksIGNsaWNrczsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgMHgxMDoKKwkJaWYgKHNpemUgIT0gNikKKwkJCXJldHVybiAwOworCQl4ID0gKF9fczE2KShkYXRhWzJdIHwgZGF0YVszXSA8PCA4KTsKKwkJeSA9IChfX3MxNikoZGF0YVs0XSB8IGRhdGFbNV0gPDwgOCk7CisJCWNsaWNrcyA9IGRhdGFbMV07CisJCWJyZWFrOworCWNhc2UgVE9VQ0hfUkVQT1JUX0lEOgorCQkvKiBFeHBlY3Qgc2l4IGJ5dGVzIG9mIHByZWZpeCwgYW5kIE4qOCBieXRlcyBvZiB0b3VjaCBkYXRhLiAqLworCQlpZiAoc2l6ZSA8IDYgfHwgKChzaXplIC0gNikgJSA4KSAhPSAwKQorCQkJcmV0dXJuIDA7CisJCXRzID0gZGF0YVszXSA+PiA2IHwgZGF0YVs0XSA8PCAyIHwgZGF0YVs1XSA8PCAxMDsKKwkJbXNjLT5kZWx0YV90aW1lID0gKHRzIC0gbXNjLT5sYXN0X3RpbWVzdGFtcCkgJiAweDNmZmZmOworCQltc2MtPmxhc3RfdGltZXN0YW1wID0gdHM7CisJCW1zYy0+bnRvdWNoZXMgPSAoc2l6ZSAtIDYpIC8gODsKKwkJZm9yIChpaSA9IDA7IGlpIDwgbXNjLT5udG91Y2hlczsgaWkrKykKKwkJCW1hZ2ljbW91c2VfZW1pdF90b3VjaChtc2MsIGlpLCBkYXRhICsgaWkgKiA4ICsgNik7CisJCS8qIFdoZW4gZW11bGF0aW5nIHRocmVlLWJ1dHRvbiBtb2RlLCBpdCBpcyBpbXBvcnRhbnQKKwkJICogdG8gaGF2ZSB0aGUgY3VycmVudCB0b3VjaCBpbmZvcm1hdGlvbiBiZWZvcmUKKwkJICogZ2VuZXJhdGluZyBhIGNsaWNrIGV2ZW50LgorCQkgKi8KKwkJeCA9IChzaWduZWQgY2hhcilkYXRhWzFdOworCQl5ID0gKHNpZ25lZCBjaGFyKWRhdGFbMl07CisJCWNsaWNrcyA9IGRhdGFbM107CisJCWJyZWFrOworCWNhc2UgMHgyMDogLyogVGhlb3JldGljYWxseSBiYXR0ZXJ5IHN0YXR1cyAoMC0xMDApLCBidXQgSSBoYXZlCisJCSAgICAqIG5ldmVyIHNlZW4gaXQgLS0gbWF5YmUgaXQgaXMgb25seSB1cG9uIHJlcXVlc3QuCisJCSAgICAqLworCWNhc2UgMHg2MDogLyogVW5rbm93biwgbWF5YmUgbGFzZXIgb24vb2ZmLiAqLworCWNhc2UgMHg2MTogLyogTGFzZXIgcmVmbGVjdGlvbiBzdGF0dXMgY2hhbmdlLgorCQkgICAgKiBkYXRhWzFdOiAwID0gc3BvdHRlZCwgMSA9IGxvc3QKKwkJICAgICovCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJbWFnaWNtb3VzZV9lbWl0X2J1dHRvbnMobXNjLCBjbGlja3MgJiAzKTsKKwlpbnB1dF9yZXBvcnRfcmVsKGlucHV0LCBSRUxfWCwgeCk7CisJaW5wdXRfcmVwb3J0X3JlbChpbnB1dCwgUkVMX1ksIHkpOworCWlucHV0X3N5bmMoaW5wdXQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1hZ2ljbW91c2VfaW5wdXRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gaGlkLT5sbF9kcml2ZXItPm9wZW4oaGlkKTsKK30KKworc3RhdGljIHZvaWQgbWFnaWNtb3VzZV9pbnB1dF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisKKwloaWQtPmxsX2RyaXZlci0+Y2xvc2UoaGlkKTsKK30KKworc3RhdGljIHZvaWQgbWFnaWNtb3VzZV9zZXR1cF9pbnB1dChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwgc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXQsIGhkZXYpOworCWlucHV0LT5ldmVudCA9IGhkZXYtPmxsX2RyaXZlci0+aGlkaW5wdXRfaW5wdXRfZXZlbnQ7CisJaW5wdXQtPm9wZW4gPSBtYWdpY21vdXNlX2lucHV0X29wZW47CisJaW5wdXQtPmNsb3NlID0gbWFnaWNtb3VzZV9pbnB1dF9jbG9zZTsKKworCWlucHV0LT5uYW1lID0gaGRldi0+bmFtZTsKKwlpbnB1dC0+cGh5cyA9IGhkZXYtPnBoeXM7CisJaW5wdXQtPnVuaXEgPSBoZGV2LT51bmlxOworCWlucHV0LT5pZC5idXN0eXBlID0gaGRldi0+YnVzOworCWlucHV0LT5pZC52ZW5kb3IgPSBoZGV2LT52ZW5kb3I7CisJaW5wdXQtPmlkLnByb2R1Y3QgPSBoZGV2LT5wcm9kdWN0OworCWlucHV0LT5pZC52ZXJzaW9uID0gaGRldi0+dmVyc2lvbjsKKwlpbnB1dC0+ZGV2LnBhcmVudCA9IGhkZXYtPmRldi5wYXJlbnQ7CisKKwlfX3NldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOworCV9fc2V0X2JpdChCVE5fTEVGVCwgaW5wdXQtPmtleWJpdCk7CisJX19zZXRfYml0KEJUTl9SSUdIVCwgaW5wdXQtPmtleWJpdCk7CisJaWYgKGVtdWxhdGVfM2J1dHRvbikKKwkJX19zZXRfYml0KEJUTl9NSURETEUsIGlucHV0LT5rZXliaXQpOworCV9fc2V0X2JpdChCVE5fVE9PTF9GSU5HRVIsIGlucHV0LT5rZXliaXQpOworCisJX19zZXRfYml0KEVWX1JFTCwgaW5wdXQtPmV2Yml0KTsKKwlfX3NldF9iaXQoUkVMX1gsIGlucHV0LT5yZWxiaXQpOworCV9fc2V0X2JpdChSRUxfWSwgaW5wdXQtPnJlbGJpdCk7CisJaWYgKGVtdWxhdGVfc2Nyb2xsX3doZWVsKQorCQlfX3NldF9iaXQoUkVMX1dIRUVMLCBpbnB1dC0+cmVsYml0KTsKKworCWlmIChyZXBvcnRfdG91Y2hlcykgeworCQlfX3NldF9iaXQoRVZfQUJTLCBpbnB1dC0+ZXZiaXQpOworCisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfVFJBQ0tJTkdfSUQsIDAsIDE1LCAwLCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9UT1VDSF9NQUpPUiwgMCwgMjU1LCA0LCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9UT1VDSF9NSU5PUiwgMCwgMjU1LCA0LCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9PUklFTlRBVElPTiwgLTMyLCAzMSwgMSwgMCk7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWCwgLTExMDAsIDEzNTgsCisJCQkJNCwgMCk7CisJCS8qIE5vdGU6IFRvdWNoIFkgcG9zaXRpb24gZnJvbSB0aGUgZGV2aWNlIGlzIGludmVydGVkIHJlbGF0aXZlCisJCSAqIHRvIGhvdyBwb2ludGVyIG1vdGlvbiBpcyByZXBvcnRlZCAoYW5kIHJlbGF0aXZlIHRvIGhvdyBVU0IKKwkJICogSElEIHJlY29tbWVuZHMgdGhlIGNvb3JkaW5hdGVzIHdvcmspLiAgVGhpcyBkcml2ZXIga2VlcHMKKwkJICogdGhlIG9yaWdpbiBhdCB0aGUgc2FtZSBwb3NpdGlvbiwgYW5kIGp1c3QgdXNlcyB0aGUgYWRkaXRpdmUKKwkJICogaW52ZXJzZSBvZiB0aGUgcmVwb3J0ZWQgWS4KKwkJICovCisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWSwgLTE1ODksIDIwNDcsCisJCQkJNCwgMCk7CisJfQorCisJaWYgKHJlcG9ydF91bmRlY2lwaGVyZWQpIHsKKwkJX19zZXRfYml0KEVWX01TQywgaW5wdXQtPmV2Yml0KTsKKwkJX19zZXRfYml0KE1TQ19SQVcsIGlucHV0LT5tc2NiaXQpOworCX0KK30KKworc3RhdGljIGludCBtYWdpY21vdXNlX3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LAorCWNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlfX3U4IGZlYXR1cmVfMVtdID0geyAweGQ3LCAweDAxIH07CisJX191OCBmZWF0dXJlXzJbXSA9IHsgMHhmOCwgMHgwMSwgMHgzMiB9OworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCXN0cnVjdCBtYWdpY21vdXNlX3NjICptc2M7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlpbnQgcmV0OworCisJbXNjID0ga3phbGxvYyhzaXplb2YoKm1zYyksIEdGUF9LRVJORUwpOworCWlmIChtc2MgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW4ndCBhbGxvYyBtYWdpY21vdXNlIGRlc2NyaXB0b3JcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltc2MtPnF1aXJrcyA9IGlkLT5kcml2ZXJfZGF0YTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgbXNjKTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgIm1hZ2ljbW91c2UgaGlkIHBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAibWFnaWNtb3VzZSBodyBzdGFydCBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCXJlcG9ydCA9IGhpZF9yZWdpc3Rlcl9yZXBvcnQoaGRldiwgSElEX0lOUFVUX1JFUE9SVCwgVE9VQ0hfUkVQT1JUX0lEKTsKKwlpZiAoIXJlcG9ydCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgdG91Y2ggcmVwb3J0XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfc3RvcF9odzsKKwl9CisJcmVwb3J0LT5zaXplID0gNjsKKworCXJldCA9IGhkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChoZGV2LCBmZWF0dXJlXzEsIHNpemVvZihmZWF0dXJlXzEpLAorCQkJSElEX0ZFQVRVUkVfUkVQT1JUKTsKKwlpZiAocmV0ICE9IHNpemVvZihmZWF0dXJlXzEpKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IHRvdWNoIGRhdGEgKDE6JWQpXG4iLAorCQkJCXJldCk7CisJCWdvdG8gZXJyX3N0b3BfaHc7CisJfQorCXJldCA9IGhkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChoZGV2LCBmZWF0dXJlXzIsCisJCQlzaXplb2YoZmVhdHVyZV8yKSwgSElEX0ZFQVRVUkVfUkVQT1JUKTsKKwlpZiAocmV0ICE9IHNpemVvZihmZWF0dXJlXzIpKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IHRvdWNoIGRhdGEgKDI6JWQpXG4iLAorCQkJCXJldCk7CisJCWdvdG8gZXJyX3N0b3BfaHc7CisJfQorCisJaW5wdXQgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlucHV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbid0IGFsbG9jIGlucHV0IGRldmljZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3N0b3BfaHc7CisJfQorCW1hZ2ljbW91c2Vfc2V0dXBfaW5wdXQoaW5wdXQsIGhkZXYpOworCisJcmV0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImlucHV0IGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfaW5wdXQ7CisJfQorCW1zYy0+aW5wdXQgPSBpbnB1dDsKKworCXJldHVybiAwOworZXJyX2lucHV0OgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKK2Vycl9zdG9wX2h3OgorCWhpZF9od19zdG9wKGhkZXYpOworZXJyX2ZyZWU6CisJa2ZyZWUobXNjKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtYWdpY21vdXNlX3JlbW92ZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwloaWRfaHdfc3RvcChoZGV2KTsKKwlrZnJlZShoaWRfZ2V0X2RydmRhdGEoaGRldikpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgbWFnaWNfbWljZVtdID0geworCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9NQUdJQ01PVVNFKSwKKwkJLmRyaXZlcl9kYXRhID0gMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBtYWdpY19taWNlKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIG1hZ2ljbW91c2VfZHJpdmVyID0geworCS5uYW1lID0gIm1hZ2ljbW91c2UiLAorCS5pZF90YWJsZSA9IG1hZ2ljX21pY2UsCisJLnByb2JlID0gbWFnaWNtb3VzZV9wcm9iZSwKKwkucmVtb3ZlID0gbWFnaWNtb3VzZV9yZW1vdmUsCisJLnJhd19ldmVudCA9IG1hZ2ljbW91c2VfcmF3X2V2ZW50LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWFnaWNtb3VzZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGhpZF9yZWdpc3Rlcl9kcml2ZXIoJm1hZ2ljbW91c2VfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgImNhbid0IHJlZ2lzdGVyIG1hZ2ljbW91c2UgZHJpdmVyXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtYWdpY21vdXNlX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1hZ2ljbW91c2VfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobWFnaWNtb3VzZV9pbml0KTsKK21vZHVsZV9leGl0KG1hZ2ljbW91c2VfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbW9zYXJ0LmMgYi9kcml2ZXJzL2hpZC9oaWQtbW9zYXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg3MTgxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1tb3NhcnQuYwpAQCAtMCwwICsxLDI3MyBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciB0aGUgbXVsdGl0b3VjaCBwYW5lbCBvbiB0aGUgQVNVUyBFZWVQQyBUOTFNVAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPgorICogIENvcHlyaWdodCAoYykgMjAxMCBUZWVtdSBUdW9taW5lbiA8dGVlbXUudHVvbWluZW5AY3liZXJjb20uY29tPgorICoKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiaGlkL3VzYmhpZC5oIgorCitNT0RVTEVfQVVUSE9SKCJTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNb3NBcnQgZHVhbC10b3VjaCBwYW5lbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCitzdHJ1Y3QgbW9zYXJ0X2RhdGEgeworCV9fdTE2IHgsIHk7CisJX191OCBpZDsKKwlib29sIHZhbGlkOwkJLyogdmFsaWQgZmluZ2VyIGRhdGEsIG9yIGp1c3QgcGxhY2Vob2xkZXI/ICovCisJYm9vbCBmaXJzdDsJCS8qIGlzIHRoaXMgdGhlIGZpcnN0IGZpbmdlciBpbiB0aGlzIGZyYW1lPyAqLworCWJvb2wgYWN0aXZpdHlfbm93OwkvKiBhdCBsZWFzdCBvbmUgYWN0aXZlIGZpbmdlciBpbiB0aGlzIGZyYW1lPyAqLworCWJvb2wgYWN0aXZpdHk7CQkvKiBhdCBsZWFzdCBvbmUgYWN0aXZlIGZpbmdlciBwcmV2aW91c2x5PyAqLworfTsKKworc3RhdGljIGludCBtb3NhcnRfaW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKKworCWNhc2UgSElEX1VQX0dFTkRFU0s6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9HRF9YOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YKTsKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfWCwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtLCAwLCAwKTsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9HRF9ZOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZKTsKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfWSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtLCAwLCAwKTsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHVybiAwOworCisJY2FzZSBISURfVVBfRElHSVRJWkVSOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJY2FzZSBISURfREdfVElQU1dJVENIOgorCQljYXNlIEhJRF9ER19JTlBVVE1PREU6CisJCWNhc2UgSElEX0RHX0RFVklDRUlOREVYOgorCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RNQVg6CisJCWNhc2UgSElEX0RHX1RJUFBSRVNTVVJFOgorCQljYXNlIEhJRF9ER19XSURUSDoKKwkJY2FzZSBISURfREdfSEVJR0hUOgorCQkJcmV0dXJuIC0xOworCQljYXNlIEhJRF9ER19JTlJBTkdFOgorCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsIEVWX0tFWSwgQlROX1RPVUNIKTsKKwkJCXJldHVybiAxOworCisJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfVFJBQ0tJTkdfSUQpOworCQkJcmV0dXJuIDE7CisKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgMHhmZjAwMDAwMDoKKwkJLyogaWdub3JlIEhJRCBmZWF0dXJlcyAqLworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbW9zYXJ0X2lucHV0X21hcHBlZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKHVzYWdlLT50eXBlID09IEVWX0tFWSB8fCB1c2FnZS0+dHlwZSA9PSBFVl9BQlMpCisJCWNsZWFyX2JpdCh1c2FnZS0+Y29kZSwgKmJpdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSB3aG9sZSBmaW5nZXIgaGFzIGJlZW4gcGFyc2VkLAorICogc28gdGhhdCBpdCBjYW4gZGVjaWRlIHdoYXQgdG8gc2VuZCB0byB0aGUgaW5wdXQgbGF5ZXIuCisgKi8KK3N0YXRpYyB2b2lkIG1vc2FydF9maWx0ZXJfZXZlbnQoc3RydWN0IG1vc2FydF9kYXRhICp0ZCwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJdGQtPmZpcnN0ID0gIXRkLT5maXJzdDsgLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisKKwlpZiAoIXRkLT52YWxpZCkgeworCQkvKgorCQkgKiB0b3VjaHNjcmVlbiBlbXVsYXRpb246IGlmIG5vIGZpbmdlciBpbiB0aGlzIGZyYW1lIGlzIHZhbGlkCisJCSAqIGFuZCB0aGVyZSBwcmV2aW91c2x5IHdhcyBmaW5nZXIgYWN0aXZpdHksIHRoaXMgaXMgYSByZWxlYXNlCisJCSAqLyAKKwkJaWYgKCF0ZC0+Zmlyc3QgJiYgIXRkLT5hY3Rpdml0eV9ub3cgJiYgdGQtPmFjdGl2aXR5KSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gsIDApOworCQkJdGQtPmFjdGl2aXR5ID0gZmFsc2U7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCwgdGQtPmlkKTsKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCwgdGQtPngpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZLCB0ZC0+eSk7CisKKwlpbnB1dF9tdF9zeW5jKGlucHV0KTsKKwl0ZC0+dmFsaWQgPSBmYWxzZTsKKworCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogaWYgZmlyc3QgYWN0aXZlIGZpbmdlciBpbiB0aGlzIGZyYW1lLi4uICovCisJaWYgKCF0ZC0+YWN0aXZpdHlfbm93KSB7CisJCS8qIGlmIHRoZXJlIHdhcyBubyBwcmV2aW91cyBhY3Rpdml0eSwgZW1pdCB0b3VjaCBldmVudCAqLworCQlpZiAoIXRkLT5hY3Rpdml0eSkgeworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAxKTsKKwkJCXRkLT5hY3Rpdml0eSA9IHRydWU7CisJCX0KKwkJdGQtPmFjdGl2aXR5X25vdyA9IHRydWU7CisJCS8qIGFuZCBpbiBhbnkgY2FzZSB0aGlzIGlzIG91ciBwcmVmZXJyZWQgZmluZ2VyICovCisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCB0ZC0+eCk7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCB0ZC0+eSk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgbW9zYXJ0X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQkJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbW9zYXJ0X2RhdGEgKnRkID0gaGlkX2dldF9kcnZkYXRhKGhpZCk7CisKKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHsKKwkJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBmaWVsZC0+aGlkaW5wdXQtPmlucHV0OworCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJCXRkLT52YWxpZCA9ICEhdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfR0RfWDoKKwkJCXRkLT54ID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfR0RfWToKKwkJCXRkLT55ID0gdmFsdWU7CisJCQltb3NhcnRfZmlsdGVyX2V2ZW50KHRkLCBpbnB1dCk7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09OVEFDVElEOgorCQkJdGQtPmlkID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgorCQkJLyogdG91Y2ggZW11bGF0aW9uOiB0aGlzIGlzIHRoZSBsYXN0IGZpZWxkIGluIGEgZnJhbWUgKi8KKwkJCXRkLT5maXJzdCA9IGZhbHNlOworCQkJdGQtPmFjdGl2aXR5X25vdyA9IGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKKwkJCS8qIGF2b2lkIGludGVyZmVyZW5jZSBmcm9tIGdlbmVyaWMgaGlkaW5wdXQgaGFuZGxpbmcgKi8KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBmYWxsYmFjayB0byB0aGUgZ2VuZXJpYyBoaWRpbnB1dCBoYW5kbGluZyAqLworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiB3ZSBoYXZlIGhhbmRsZWQgdGhlIGhpZGlucHV0IHBhcnQsIG5vdyByZW1haW5zIGhpZGRldiAqLworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYgJiYgaGlkLT5oaWRkZXZfaGlkX2V2ZW50KQorCQloaWQtPmhpZGRldl9oaWRfZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1vc2FydF9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJc3RydWN0IG1vc2FydF9kYXRhICp0ZDsKKworCisJdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbW9zYXJ0X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRkKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSBNb3NBcnQgZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl0ZC0+dmFsaWQgPSBmYWxzZTsKKwl0ZC0+YWN0aXZpdHkgPSBmYWxzZTsKKwl0ZC0+YWN0aXZpdHlfbm93ID0gZmFsc2U7CisJdGQtPmZpcnN0ID0gZmFsc2U7CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIHRkKTsKKworCS8qIGN1cnJlbnRseSwgaXQncyBiZXR0ZXIgdG8gaGF2ZSBvbmUgZXZkZXYgZGV2aWNlIG9ubHkgKi8KKyNpZiAwCisJaGRldi0+cXVpcmtzIHw9IEhJRF9RVUlSS19NVUxUSV9JTlBVVDsKKyNlbmRpZgorCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCisJaWYgKHJldCA9PSAwKSB7CisJCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlID0gaGRldi0+cmVwb3J0X2VudW0KKwkJCQkJCSsgSElEX0ZFQVRVUkVfUkVQT1JUOworCQlzdHJ1Y3QgaGlkX3JlcG9ydCAqciA9IHJlLT5yZXBvcnRfaWRfaGFzaFs3XTsKKworCQlyLT5maWVsZFswXS0+dmFsdWVbMF0gPSAweDAyOworCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoZGV2LCByLCBVU0JfRElSX09VVCk7CisJfSBlbHNlIAorCQlrZnJlZSh0ZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtb3NhcnRfcmVtb3ZlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCWhpZF9od19zdG9wKGhkZXYpOworCWtmcmVlKGhpZF9nZXRfZHJ2ZGF0YShoZGV2KSk7CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgbW9zYXJ0X2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVUywgVVNCX0RFVklDRV9JRF9BU1VTX1Q5MU1UKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBtb3NhcnRfZGV2aWNlcyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX3VzYWdlX2lkIG1vc2FydF9ncmFiYmVkX3VzYWdlc1tdID0geworCXsgSElEX0FOWV9JRCwgSElEX0FOWV9JRCwgSElEX0FOWV9JRCB9LAorCXsgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBtb3NhcnRfZHJpdmVyID0geworCS5uYW1lID0gIm1vc2FydCIsCisJLmlkX3RhYmxlID0gbW9zYXJ0X2RldmljZXMsCisJLnByb2JlID0gbW9zYXJ0X3Byb2JlLAorCS5yZW1vdmUgPSBtb3NhcnRfcmVtb3ZlLAorCS5pbnB1dF9tYXBwaW5nID0gbW9zYXJ0X2lucHV0X21hcHBpbmcsCisJLmlucHV0X21hcHBlZCA9IG1vc2FydF9pbnB1dF9tYXBwZWQsCisJLnVzYWdlX3RhYmxlID0gbW9zYXJ0X2dyYWJiZWRfdXNhZ2VzLAorCS5ldmVudCA9IG1vc2FydF9ldmVudCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1vc2FydF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJm1vc2FydF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbW9zYXJ0X2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1vc2FydF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtb3NhcnRfaW5pdCk7Cittb2R1bGVfZXhpdChtb3NhcnRfZXhpdCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1udHJpZy5jIGIvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKaW5kZXggNDljZTY5ZC4uMzIzNGM3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKQEAgLTI1LDExICsyNSwxNiBAQAogCQkJCQlFVl9LRVksIChjKSkKIAogc3RydWN0IG50cmlnX2RhdGEgewotCV9fczMyIHgsIHksIGlkLCB3LCBoOwotCWNoYXIgcmVhZGluZ19hX3BvaW50LCBmb3VuZF9jb250YWN0X2lkOwotCWNoYXIgcGVuX2FjdGl2ZTsKLQljaGFyIGZpbmdlcl9hY3RpdmU7Ci0JY2hhciBpbnZlcnRlZDsKKwkvKiBJbmNvbWluZyByYXcgdmFsdWVzIGZvciBhIHNpbmdsZSBjb250YWN0ICovCisJX191MTYgeCwgeSwgdywgaDsKKwlfX3UxNiBpZDsKKwlfX3U4IGNvbmZpZGVuY2U7CisKKwlib29sIHJlYWRpbmdfbXQ7CisJX191OCBmaXJzdF9jb250YWN0X2NvbmZpZGVuY2U7CisKKwlfX3U4IG10X2Zvb3Rlcls0XTsKKwlfX3U4IG10X2Zvb3RfY291bnQ7CiB9OwogCiAvKgpAQCAtNDIsOCArNDcsMTEgQEAKIAkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAogCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKIHsKLQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgeworCS8qIE5vIHNwZWNpYWwgbWFwcGluZ3MgbmVlZGVkIGZvciB0aGUgcGVuIGFuZCBzaW5nbGUgdG91Y2ggKi8KKwlpZiAoZmllbGQtPnBoeXNpY2FsKQorCQlyZXR1cm4gMDsKIAorCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSB7CiAJY2FzZSBISURfVVBfR0VOREVTSzoKIAkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CiAJCWNhc2UgSElEX0dEX1g6CkBAIC02NiwxOCArNzQsMTIgQEAKIAljYXNlIEhJRF9VUF9ESUdJVElaRVI6CiAJCXN3aXRjaCAodXNhZ2UtPmhpZCkgewogCQkvKiB3ZSBkbyBub3Qgd2FudCB0byBtYXAgdGhlc2UgZm9yIG5vdyAqLwotCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6IC8qIHZhbHVlIGlzIHVzZWxlc3MgKi8KKwkJY2FzZSBISURfREdfQ09OVEFDVElEOiAvKiBOb3QgdHJ1c3R3b3J0aHksIHNxdWVsY2ggZm9yIG5vdyAqLwogCQljYXNlIEhJRF9ER19JTlBVVE1PREU6CiAJCWNhc2UgSElEX0RHX0RFVklDRUlOREVYOgotCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6CiAJCWNhc2UgSElEX0RHX0NPTlRBQ1RNQVg6CiAJCQlyZXR1cm4gLTE7CiAKLQkJLyogb3JpZ2luYWwgbWFwcGluZyBieSBSYWZpIFJ1YmluICovCi0JCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6Ci0JCQludF9tYXBfa2V5X2NsZWFyKEJUTl9UT09MX0RPVUJMRVRBUCk7Ci0JCQlyZXR1cm4gMTsKLQogCQkvKiB3aWR0aC9oZWlnaHQgbWFwcGVkIG9uIFRvdWNoTWFqb3IvVG91Y2hNaW5vci9PcmllbnRhdGlvbiAqLwogCQljYXNlIEhJRF9ER19XSURUSDoKIAkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKQEAgLTEwNCw2ICsxMDYsMTAgQEAKIAkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAogCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKIHsKKwkvKiBObyBzcGVjaWFsIG1hcHBpbmdzIG5lZWRlZCBmb3IgdGhlIHBlbiBhbmQgc2luZ2xlIHRvdWNoICovCisJaWYgKGZpZWxkLT5waHlzaWNhbCkKKwkJcmV0dXJuIDA7CisKIAlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfS0VZIHx8IHVzYWdlLT50eXBlID09IEVWX1JFTAogCQkJfHwgdXNhZ2UtPnR5cGUgPT0gRVZfQUJTKQogCQljbGVhcl9iaXQodXNhZ2UtPmNvZGUsICpiaXQpOwpAQCAtMTIzLDMxICsxMjksMzAgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQ7CiAJc3RydWN0IG50cmlnX2RhdGEgKm5kID0gaGlkX2dldF9kcnZkYXRhKGhpZCk7CiAKKwkvKiBObyBzcGVjaWFsIGhhbmRsaW5nIG5lZWRlZCBmb3IgdGhlIHBlbiAqLworCWlmIChmaWVsZC0+YXBwbGljYXRpb24gPT0gSElEX0RHX1BFTikKKwkJcmV0dXJuIDA7CisKICAgICAgICAgaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB7CiAJCXN3aXRjaCAodXNhZ2UtPmhpZCkgewotCi0JCWNhc2UgSElEX0RHX0lOUkFOR0U6Ci0JCQlpZiAoZmllbGQtPmFwcGxpY2F0aW9uICYgMHgzKQotCQkJCW5kLT5wZW5fYWN0aXZlID0gKHZhbHVlICE9IDApOwotCQkJZWxzZQotCQkJCW5kLT5maW5nZXJfYWN0aXZlID0gKHZhbHVlICE9IDApOwotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBISURfREdfSU5WRVJUOgotCQkJbmQtPmludmVydGVkID0gdmFsdWU7Ci0JCQlyZXR1cm4gMDsKLQorCQljYXNlIDB4ZmYwMDAwMDE6CisJCQkvKiBUYWcgaW5kaWNhdGluZyB0aGUgc3RhcnQgb2YgYSBtdWx0aXRvdWNoIGdyb3VwICovCisJCQluZC0+cmVhZGluZ19tdCA9IDE7CisJCQluZC0+Zmlyc3RfY29udGFjdF9jb25maWRlbmNlID0gMDsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQkJbmQtPmNvbmZpZGVuY2UgPSB2YWx1ZTsKKwkJCWJyZWFrOwogCQljYXNlIEhJRF9HRF9YOgogCQkJbmQtPnggPSB2YWx1ZTsKLQkJCW5kLT5yZWFkaW5nX2FfcG9pbnQgPSAxOworCQkJLyogQ2xlYXIgdGhlIGNvbnRhY3QgZm9vdGVyICovCisJCQluZC0+bXRfZm9vdF9jb3VudCA9IDA7CiAJCQlicmVhazsKIAkJY2FzZSBISURfR0RfWToKIAkJCW5kLT55ID0gdmFsdWU7CiAJCQlicmVhazsKIAkJY2FzZSBISURfREdfQ09OVEFDVElEOgogCQkJbmQtPmlkID0gdmFsdWU7Ci0JCQkvKiB3ZSByZWNlaXZlIHRoaXMgb25seSB3aGVuIGluIG11bHRpdG91Y2ggbW9kZSAqLwotCQkJbmQtPmZvdW5kX2NvbnRhY3RfaWQgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgSElEX0RHX1dJRFRIOgogCQkJbmQtPncgPSB2YWx1ZTsKQEAgLTE1OSwzNSArMTY0LDEzIEBACiAJCQkgKiByZXBvcnQgcmVjZWl2ZWQgaW4gYSBmaW5nZXIgZXZlbnQuIFdlIHdhbnQKIAkJCSAqIHRvIGVtaXQgYSBub3JtYWwgKFgsIFkpIHBvc2l0aW9uCiAJCQkgKi8KLQkJCWlmICghbmQtPmZvdW5kX2NvbnRhY3RfaWQpIHsKLQkJCQlpZiAobmQtPnBlbl9hY3RpdmUgJiYgbmQtPmZpbmdlcl9hY3RpdmUpIHsKLQkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfRE9VQkxFVEFQLCAwKTsKLQkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfRE9VQkxFVEFQLCAxKTsKLQkJCQl9CisJCQlpZiAoIW5kLT5yZWFkaW5nX210KSB7CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfRE9VQkxFVEFQLAorCQkJCQkJIChuZC0+Y29uZmlkZW5jZSAhPSAwKSk7CiAJCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIG5kLT54KTsKIAkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWSwgbmQtPnkpOwogCQkJfQogCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0RHX1RJUFBSRVNTVVJFOgotCQkJLyoKLQkJCSAqIHdoZW4gaW4gc2luZ2xlIHRvdWNoIG1vZGUsIHRoaXMgaXMgdGhlIGxhc3QKLQkJCSAqIHJlcG9ydCByZWNlaXZlZCBpbiBhIHBlbiBldmVudC4gV2Ugd2FudAotCQkJICogdG8gZW1pdCBhIG5vcm1hbCAoWCwgWSkgcG9zaXRpb24KLQkJCSAqLwotCQkJaWYgKCEgbmQtPmZvdW5kX2NvbnRhY3RfaWQpIHsKLQkJCQlpZiAobmQtPnBlbl9hY3RpdmUgJiYgbmQtPmZpbmdlcl9hY3RpdmUpIHsKLQkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwKLQkJCQkJCQluZC0+aW52ZXJ0ZWQgPyBCVE5fVE9PTF9SVUJCRVIgOiBCVE5fVE9PTF9QRU4KLQkJCQkJCQksIDApOwotCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LAotCQkJCQkJCW5kLT5pbnZlcnRlZCA/IEJUTl9UT09MX1JVQkJFUiA6IEJUTl9UT09MX1BFTgotCQkJCQkJCSwgMSk7Ci0JCQkJfQotCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCBuZC0+eCk7Ci0JCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIG5kLT55KTsKLQkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfUFJFU1NVUkUsIHZhbHVlKTsKLQkJCX0KLQkJCWJyZWFrOwogCQljYXNlIDB4ZmYwMDAwMDI6CiAJCQkvKgogCQkJICogd2UgcmVjZWl2ZSB0aGlzIHdoZW4gdGhlIGRldmljZSBpcyBpbiBtdWx0aXRvdWNoCkBAIC0xOTUsMTAgKzE3OCwzNCBAQAogCQkJICogdGhpcyB1c2FnZSB0ZWxscyBpZiB0aGUgY29udGFjdCBwb2ludCBpcyByZWFsCiAJCQkgKiBvciBhIHBsYWNlaG9sZGVyCiAJCQkgKi8KLQkJCWlmICghbmQtPnJlYWRpbmdfYV9wb2ludCB8fCB2YWx1ZSAhPSAxKQorCisJCQkvKiBTaG91bGRuJ3QgZ2V0IG1vcmUgdGhhbiA0IGZvb3RlciBwYWNrZXRzLCBzbyBza2lwICovCisJCQlpZiAobmQtPm10X2Zvb3RfY291bnQgPj0gNCkKIAkJCQlicmVhazsKKworCQkJbmQtPm10X2Zvb3RlcltuZC0+bXRfZm9vdF9jb3VudCsrXSA9IHZhbHVlOworCisJCQkvKiBpZiB0aGUgZm9vdGVyIGlzbid0IGNvbXBsZXRlIGJyZWFrICovCisJCQlpZiAobmQtPm10X2Zvb3RfY291bnQgIT0gNCkKKwkJCQlicmVhazsKKworCQkJLyogUGVuIGFjdGl2aXR5IHNpZ25hbCwgdHJpZ2dlciBlbmQgb2YgdG91Y2guICovCisJCQlpZiAobmQtPm10X2Zvb3RlclsyXSkgeworCQkJCW5kLT5jb25maWRlbmNlID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogSWYgdGhlIGNvbnRhY3Qgd2FzIGludmFsaWQgKi8KKwkJCWlmICghKG5kLT5jb25maWRlbmNlICYmIG5kLT5tdF9mb290ZXJbMF0pCisJCQkJCXx8IG5kLT53IDw9IDI1MAorCQkJCQl8fCBuZC0+aCA8PSAxOTApIHsKKwkJCQluZC0+Y29uZmlkZW5jZSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisKIAkJCS8qIGVtaXQgYSBub3JtYWwgKFgsIFkpIGZvciB0aGUgZmlyc3QgcG9pbnQgb25seSAqLwogCQkJaWYgKG5kLT5pZCA9PSAwKSB7CisJCQkJbmQtPmZpcnN0X2NvbnRhY3RfY29uZmlkZW5jZSA9IG5kLT5jb25maWRlbmNlOwogCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCBuZC0+eCk7CiAJCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIG5kLT55KTsKIAkJCX0KQEAgLTIyMCw4ICsyMjcsMzkgQEAKIAkJCQkJCUFCU19NVF9UT1VDSF9NSU5PUiwgbmQtPncpOwogCQkJfQogCQkJaW5wdXRfbXRfc3luYyhmaWVsZC0+aGlkaW5wdXQtPmlucHV0KTsKLQkJCW5kLT5yZWFkaW5nX2FfcG9pbnQgPSAwOwotCQkJbmQtPmZvdW5kX2NvbnRhY3RfaWQgPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOiAvKiBFbmQgb2YgYSBtdWx0aXRvdWNoIGdyb3VwICovCisJCQlpZiAoIW5kLT5yZWFkaW5nX210KQorCQkJCWJyZWFrOworCisJCQluZC0+cmVhZGluZ19tdCA9IDA7CisKKwkJCWlmIChuZC0+Zmlyc3RfY29udGFjdF9jb25maWRlbmNlKSB7CisJCQkJc3dpdGNoICh2YWx1ZSkgeworCQkJCWNhc2UgMDoJLyogZm9yIHNpbmdsZSB0b3VjaCBkZXZpY2VzICovCisJCQkJY2FzZSAxOgorCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LAorCQkJCQkJCUJUTl9UT09MX0RPVUJMRVRBUCwgMSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMjoKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwKKwkJCQkJCQlCVE5fVE9PTF9UUklQTEVUQVAsIDEpOworCQkJCQlicmVhazsKKwkJCQljYXNlIDM6CisJCQkJZGVmYXVsdDoKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwKKwkJCQkJCQlCVE5fVE9PTF9RVUFEVEFQLCAxKTsKKwkJCQl9CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPVUNILCAxKTsKKwkJCX0gZWxzZSB7CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwKKwkJCQkJCUJUTl9UT09MX0RPVUJMRVRBUCwgMCk7CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwKKwkJCQkJCUJUTl9UT09MX1RSSVBMRVRBUCwgMCk7CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwKKwkJCQkJCUJUTl9UT09MX1FVQURUQVAsIDApOworCQkJfQogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKQEAgLTIzMSw4ICsyNjksOCBAQAogCX0KIAogCS8qIHdlIGhhdmUgaGFuZGxlZCB0aGUgaGlkaW5wdXQgcGFydCwgbm93IHJlbWFpbnMgaGlkZGV2ICovCi0gICAgICAgIGlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYgJiYgaGlkLT5oaWRkZXZfaGlkX2V2ZW50KQotICAgICAgICAgICAgICAgIGhpZC0+aGlkZGV2X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpOworCWlmICgoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWKSAmJiBoaWQtPmhpZGRldl9oaWRfZXZlbnQpCisJCWhpZC0+aGlkZGV2X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0yNDEsMjMgKzI3OSw2NyBAQAogewogCWludCByZXQ7CiAJc3RydWN0IG50cmlnX2RhdGEgKm5kOworCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0OworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCisJaWYgKGlkLT5kcml2ZXJfZGF0YSkKKwkJaGRldi0+cXVpcmtzIHw9IEhJRF9RVUlSS19NVUxUSV9JTlBVVDsKIAogCW5kID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG50cmlnX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5kKSB7CiAJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSBOLVRyaWcgZGF0YVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQluZC0+cmVhZGluZ19hX3BvaW50ID0gMDsKLQluZC0+Zm91bmRfY29udGFjdF9pZCA9IDA7CisKKwluZC0+cmVhZGluZ19tdCA9IDA7CiAJaGlkX3NldF9kcnZkYXRhKGhkZXYsIG5kKTsKIAogCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CiAKLQlpZiAocmV0KQotCQlrZnJlZSAobmQpOworCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUICYgfkhJRF9DT05ORUNUX0ZGKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQogCisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhpZGlucHV0LCAmaGRldi0+aW5wdXRzLCBsaXN0KSB7CisJCWlucHV0ID0gaGlkaW5wdXQtPmlucHV0OworCQlzd2l0Y2ggKGhpZGlucHV0LT5yZXBvcnQtPmZpZWxkWzBdLT5hcHBsaWNhdGlvbikgeworCQljYXNlIEhJRF9ER19QRU46CisJCQlpbnB1dC0+bmFtZSA9ICJOLVRyaWcgUGVuIjsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19UT1VDSFNDUkVFTjoKKwkJCV9fY2xlYXJfYml0KEJUTl9UT09MX1BFTiwgaW5wdXQtPmtleWJpdCk7CisJCQkvKgorCQkJICogQSBsaXR0bGUgc29tZXRoaW5nIHNwZWNpYWwgdG8gZW5hYmxlCisJCQkgKiB0d28gYW5kIHRocmVlIGZpbmdlciB0YXBzLgorCQkJICovCisJCQlfX3NldF9iaXQoQlROX1RPT0xfRE9VQkxFVEFQLCBpbnB1dC0+a2V5Yml0KTsKKwkJCV9fc2V0X2JpdChCVE5fVE9PTF9UUklQTEVUQVAsIGlucHV0LT5rZXliaXQpOworCQkJX19zZXRfYml0KEJUTl9UT09MX1FVQURUQVAsIGlucHV0LT5rZXliaXQpOworCQkJLyoKKwkJCSAqIFRoZSBwaHlzaWNhbCB0b3VjaHNjcmVlbiAoc2luZ2xlIHRvdWNoKQorCQkJICogaW5wdXQgaGFzIGEgdmFsdWUgZm9yIHBoeXNpY2FsLCB3aGVyZWFzCisJCQkgKiB0aGUgbXVsdGl0b3VjaCBvbmx5IGhhcyBsb2dpY2FsIGlucHV0CisJCQkgKiBmaWVsZHMuCisJCQkgKi8KKwkJCWlucHV0LT5uYW1lID0KKwkJCQkoaGlkaW5wdXQtPnJlcG9ydC0+ZmllbGRbMF0KKwkJCQkgLT5waHlzaWNhbCkgPworCQkJCSJOLVRyaWcgVG91Y2hzY3JlZW4iIDoKKwkJCQkiTi1UcmlnIE11bHRpVG91Y2giOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK2Vycl9mcmVlOgorCWtmcmVlKG5kKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNzYsNyArMzU4LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfdXNhZ2VfaWQgbnRyaWdfZ3JhYmJlZF91c2FnZXNbXSA9IHsKIAl7IEhJRF9BTllfSUQsIEhJRF9BTllfSUQsIEhJRF9BTllfSUQgfSwKLQl7IEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDF9CisJeyBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxIH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBudHJpZ19kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtb3J0ZWsuYyBiL2RyaXZlcnMvaGlkL2hpZC1vcnRlay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOWE5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtb3J0ZWsuYwpAQCAtMCwwICsxLDU2IEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIE9ydGVrIFdLQi0yMDAwICh3aXJlbGVzcyBrZXlib2FyZCArIG1vdXNlIHRyYWNrcGFkKS4KKyAqICBGaXhlcyBMb2dpY2FsTWF4aW11bSBlcnJvciBpbiBVU0IgcmVwb3J0IGRlc2NyaXB0aW9uLCBzZWUKKyAqICBodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3ODcKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDEwIEpvaG5hdGhvbiBIYXJyaXMgPGptaGFycmlzQGdtYWlsLmNvbT4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0YXRpYyB2b2lkIG9ydGVrX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwlpZiAocnNpemUgPj0gNTYgJiYgcmRlc2NbNTRdID09IDB4MjUgJiYgcmRlc2NbNTVdID09IDB4MDEpIHsKKwkJZGV2X2luZm8oJmhkZXYtPmRldiwgIkZpeGluZyB1cCBPcnRlayBXS0ItMjAwMCAiCisJCQkJInJlcG9ydCBkZXNjcmlwdG9yLlxuIik7CisJCXJkZXNjWzU1XSA9IDB4OTI7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgb3J0ZWtfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PUlRFSywgVVNCX0RFVklDRV9JRF9PUlRFS19XS0IyMDAwKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBvcnRla19kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIG9ydGVrX2RyaXZlciA9IHsKKwkubmFtZSA9ICJvcnRlayIsCisJLmlkX3RhYmxlID0gb3J0ZWtfZGV2aWNlcywKKwkucmVwb3J0X2ZpeHVwID0gb3J0ZWtfcmVwb3J0X2ZpeHVwCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvcnRla19pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJm9ydGVrX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvcnRla19leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZvcnRla19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChvcnRla19pbml0KTsKK21vZHVsZV9leGl0KG9ydGVrX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXF1YW50YS5jIGIvZHJpdmVycy9oaWQvaGlkLXF1YW50YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZGQ1MWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtcXVhbnRhLmMKQEAgLTAsMCArMSwyNjAgQEAKKy8qCisgKiAgSElEIGRyaXZlciBmb3IgUXVhbnRhIE9wdGljYWwgVG91Y2ggZHVhbC10b3VjaCBwYW5lbHMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4KKyAqCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCitNT0RVTEVfQVVUSE9SKCJTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJRdWFudGEgZHVhbC10b3VjaCBwYW5lbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCitzdHJ1Y3QgcXVhbnRhX2RhdGEgeworCV9fdTE2IHgsIHk7CisJX191OCBpZDsKKwlib29sIHZhbGlkOwkJLyogdmFsaWQgZmluZ2VyIGRhdGEsIG9yIGp1c3QgcGxhY2Vob2xkZXI/ICovCisJYm9vbCBmaXJzdDsJCS8qIGlzIHRoaXMgdGhlIGZpcnN0IGZpbmdlciBpbiB0aGlzIGZyYW1lPyAqLworCWJvb2wgYWN0aXZpdHlfbm93OwkvKiBhdCBsZWFzdCBvbmUgYWN0aXZlIGZpbmdlciBpbiB0aGlzIGZyYW1lPyAqLworCWJvb2wgYWN0aXZpdHk7CQkvKiBhdCBsZWFzdCBvbmUgYWN0aXZlIGZpbmdlciBwcmV2aW91c2x5PyAqLworfTsKKworc3RhdGljIGludCBxdWFudGFfaW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKKworCWNhc2UgSElEX1VQX0dFTkRFU0s6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9HRF9YOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YKTsKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfWCwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtLCAwLCAwKTsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9HRF9ZOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZKTsKKwkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfWSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtLCAwLCAwKTsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHVybiAwOworCisJY2FzZSBISURfVVBfRElHSVRJWkVSOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJY2FzZSBISURfREdfVElQU1dJVENIOgorCQljYXNlIEhJRF9ER19JTlBVVE1PREU6CisJCWNhc2UgSElEX0RHX0RFVklDRUlOREVYOgorCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RNQVg6CisJCWNhc2UgSElEX0RHX1RJUFBSRVNTVVJFOgorCQljYXNlIEhJRF9ER19XSURUSDoKKwkJY2FzZSBISURfREdfSEVJR0hUOgorCQkJcmV0dXJuIC0xOworCQljYXNlIEhJRF9ER19JTlJBTkdFOgorCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsIEVWX0tFWSwgQlROX1RPVUNIKTsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lEKTsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHVybiAwOworCisJY2FzZSAweGZmMDAwMDAwOgorCQkvKiBpZ25vcmUgdmVuZG9yLXNwZWNpZmljIGZlYXR1cmVzICovCisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxdWFudGFfaW5wdXRfbWFwcGVkKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfS0VZIHx8IHVzYWdlLT50eXBlID09IEVWX0FCUykKKwkJY2xlYXJfYml0KHVzYWdlLT5jb2RlLCAqYml0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHdob2xlIGZpbmdlciBoYXMgYmVlbiBwYXJzZWQsCisgKiBzbyB0aGF0IGl0IGNhbiBkZWNpZGUgd2hhdCB0byBzZW5kIHRvIHRoZSBpbnB1dCBsYXllci4KKyAqLworc3RhdGljIHZvaWQgcXVhbnRhX2ZpbHRlcl9ldmVudChzdHJ1Y3QgcXVhbnRhX2RhdGEgKnRkLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwkKKwl0ZC0+Zmlyc3QgPSAhdGQtPmZpcnN0OyAvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKworCWlmICghdGQtPnZhbGlkKSB7CisJCS8qCisJCSAqIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogaWYgbm8gZmluZ2VyIGluIHRoaXMgZnJhbWUgaXMgdmFsaWQKKwkJICogYW5kIHRoZXJlIHByZXZpb3VzbHkgd2FzIGZpbmdlciBhY3Rpdml0eSwgdGhpcyBpcyBhIHJlbGVhc2UKKwkJICovIAorCQlpZiAoIXRkLT5maXJzdCAmJiAhdGQtPmFjdGl2aXR5X25vdyAmJiB0ZC0+YWN0aXZpdHkpIHsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMCk7CisJCQl0ZC0+YWN0aXZpdHkgPSBmYWxzZTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lELCB0ZC0+aWQpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YLCB0ZC0+eCk7CisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1ksIHRkLT55KTsKKworCWlucHV0X210X3N5bmMoaW5wdXQpOworCXRkLT52YWxpZCA9IGZhbHNlOworCisJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uOiBpZiBmaXJzdCBhY3RpdmUgZmluZ2VyIGluIHRoaXMgZnJhbWUuLi4gKi8KKwlpZiAoIXRkLT5hY3Rpdml0eV9ub3cpIHsKKwkJLyogaWYgdGhlcmUgd2FzIG5vIHByZXZpb3VzIGFjdGl2aXR5LCBlbWl0IHRvdWNoIGV2ZW50ICovCisJCWlmICghdGQtPmFjdGl2aXR5KSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gsIDEpOworCQkJdGQtPmFjdGl2aXR5ID0gdHJ1ZTsKKwkJfQorCQl0ZC0+YWN0aXZpdHlfbm93ID0gdHJ1ZTsKKwkJLyogYW5kIGluIGFueSBjYXNlIHRoaXMgaXMgb3VyIHByZWZlcnJlZCBmaW5nZXIgKi8KKwkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIHRkLT54KTsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIHRkLT55KTsKKwl9Cit9CisKKworc3RhdGljIGludCBxdWFudGFfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCQkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQoreworCXN0cnVjdCBxdWFudGFfZGF0YSAqdGQgPSBoaWRfZ2V0X2RydmRhdGEoaGlkKTsKKworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkgeworCQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQ7CisKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0RHX0lOUkFOR0U6CisJCQl0ZC0+dmFsaWQgPSAhIXZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0dEX1g6CisJCQl0ZC0+eCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0dEX1k6CisJCQl0ZC0+eSA9IHZhbHVlOworCQkJcXVhbnRhX2ZpbHRlcl9ldmVudCh0ZCwgaW5wdXQpOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKKwkJCXRkLT5pZCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKKwkJCS8qIHRvdWNoIGVtdWxhdGlvbjogdGhpcyBpcyB0aGUgbGFzdCBmaWVsZCBpbiBhIGZyYW1lICovCisJCQl0ZC0+Zmlyc3QgPSBmYWxzZTsKKwkJCXRkLT5hY3Rpdml0eV9ub3cgPSBmYWxzZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6CisJCQkvKiBhdm9pZCBpbnRlcmZlcmVuY2UgZnJvbSBnZW5lcmljIGhpZGlucHV0IGhhbmRsaW5nICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJLyogZmFsbGJhY2sgdG8gdGhlIGdlbmVyaWMgaGlkaW5wdXQgaGFuZGxpbmcgKi8KKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyogd2UgaGF2ZSBoYW5kbGVkIHRoZSBoaWRpbnB1dCBwYXJ0LCBub3cgcmVtYWlucyBoaWRkZXYgKi8KKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKKwkJaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBxdWFudGFfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBxdWFudGFfZGF0YSAqdGQ7CisKKwl0ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBxdWFudGFfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghdGQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIFF1YW50YSBUb3VjaCBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXRkLT52YWxpZCA9IGZhbHNlOworCXRkLT5hY3Rpdml0eSA9IGZhbHNlOworCXRkLT5hY3Rpdml0eV9ub3cgPSBmYWxzZTsKKwl0ZC0+Zmlyc3QgPSBmYWxzZTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgdGQpOworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmICghcmV0KQorCQlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7CisKKwlpZiAocmV0KQorCQlrZnJlZSh0ZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBxdWFudGFfcmVtb3ZlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCWhpZF9od19zdG9wKGhkZXYpOworCWtmcmVlKGhpZF9nZXRfZHJ2ZGF0YShoZGV2KSk7CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgcXVhbnRhX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBTlRBLAorCQkJVVNCX0RFVklDRV9JRF9RVUFOVEFfT1BUSUNBTF9UT1VDSCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBTlRBLAorCQkJVVNCX0RFVklDRV9JRF9QSVhBUlRfSU1BR0lOR19JTkNfT1BUSUNBTF9UT1VDSF9TQ1JFRU4pIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIHF1YW50YV9kZXZpY2VzKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfdXNhZ2VfaWQgcXVhbnRhX2dyYWJiZWRfdXNhZ2VzW10gPSB7CisJeyBISURfQU5ZX0lELCBISURfQU5ZX0lELCBISURfQU5ZX0lEIH0sCisJeyBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxfQorfTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIHF1YW50YV9kcml2ZXIgPSB7CisJLm5hbWUgPSAicXVhbnRhLXRvdWNoIiwKKwkuaWRfdGFibGUgPSBxdWFudGFfZGV2aWNlcywKKwkucHJvYmUgPSBxdWFudGFfcHJvYmUsCisJLnJlbW92ZSA9IHF1YW50YV9yZW1vdmUsCisJLmlucHV0X21hcHBpbmcgPSBxdWFudGFfaW5wdXRfbWFwcGluZywKKwkuaW5wdXRfbWFwcGVkID0gcXVhbnRhX2lucHV0X21hcHBlZCwKKwkudXNhZ2VfdGFibGUgPSBxdWFudGFfZ3JhYmJlZF91c2FnZXMsCisJLmV2ZW50ID0gcXVhbnRhX2V2ZW50LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcXVhbnRhX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmcXVhbnRhX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBxdWFudGFfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmcXVhbnRhX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHF1YW50YV9pbml0KTsKK21vZHVsZV9leGl0KHF1YW50YV9leGl0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXNvbnkuYyBiL2RyaXZlcnMvaGlkL2hpZC1zb255LmMKaW5kZXggNGU4NDUwMi4uOWJmMDBkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXNvbnkuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtc29ueS5jCkBAIC00OCw3ICs0OCw3IEBACiAgKiB0byAib3BlcmF0aW9uYWwiLiAgV2l0aG91dCB0aGlzLCB0aGUgcHMzIGNvbnRyb2xsZXIgd2lsbCBub3QgcmVwb3J0IGFueQogICogZXZlbnRzLgogICovCi1zdGF0aWMgaW50IHNvbnlfc2V0X29wZXJhdGlvbmFsKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQorc3RhdGljIGludCBzb255X3NldF9vcGVyYXRpb25hbF91c2Ioc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCiB7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGhkZXYtPmRldi5wYXJlbnQpOwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwpAQCAtNzMsNiArNzMsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHNvbnlfc2V0X29wZXJhdGlvbmFsX2J0KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCXVuc2lnbmVkIGNoYXIgYnVmW10gPSB7IDB4NTMsIDB4ZjQsICAweDQyLCAweDAzLCAweDAwLCAweDAwIH07CisJcmV0dXJuIGhkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChoZGV2LCBidWYsIHNpemVvZihidWYpLCBISURfRkVBVFVSRV9SRVBPUlQpOworfQorCiBzdGF0aWMgaW50IHNvbnlfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgcmV0OwpAQCAtODEsNyArODcsNyBAQAogCiAJc2MgPSBremFsbG9jKHNpemVvZigqc2MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc2MgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW4ndCBhbGxvYyBhcHBsZSBkZXNjcmlwdG9yXG4iKTsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2Mgc29ueSBkZXNjcmlwdG9yXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xMDEsNyArMTA3LDE3IEBACiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCi0JcmV0ID0gc29ueV9zZXRfb3BlcmF0aW9uYWwoaGRldik7CisJc3dpdGNoIChoZGV2LT5idXMpIHsKKwljYXNlIEJVU19VU0I6CisJCXJldCA9IHNvbnlfc2V0X29wZXJhdGlvbmFsX3VzYihoZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBCVVNfQkxVRVRPT1RIOgorCQlyZXQgPSBzb255X3NldF9vcGVyYXRpb25hbF9idChoZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gMDsKKwl9CisKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfc3RvcDsKIApAQCAtMTIxLDYgKzEzNyw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBzb255X2RldmljZXNbXSA9IHsKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1BTM19DT05UUk9MTEVSKSB9LAorCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfUFMzX0NPTlRST0xMRVIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9WQUlPX1ZHWF9NT1VTRSksCiAJCS5kcml2ZXJfZGF0YSA9IFZBSU9fUkRFU0NfQ09OU1RBTlQgfSwKIAl7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1zdGFudHVtLmMgYi9kcml2ZXJzL2hpZC9oaWQtc3RhbnR1bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTkyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtc3RhbnR1bS5jCkBAIC0wLDAgKzEsMjgzIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIFN0YW50dW0gbXVsdGl0b3VjaCBwYW5lbHMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+CisgKgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworTU9EVUxFX0FVVEhPUigiU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3RhbnR1bSBISUQgbXVsdGl0b3VjaCBwYW5lbHMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworc3RydWN0IHN0YW50dW1fZGF0YSB7CisJX19zMzIgeCwgeSwgeiwgdywgaDsJLyogeCwgeSwgcHJlc3N1cmUsIHdpZHRoLCBoZWlnaHQgKi8KKwlfX3UxNiBpZDsJCS8qIHRvdWNoIGlkICovCisJYm9vbCB2YWxpZDsJCS8qIHZhbGlkIGZpbmdlciBkYXRhLCBvciBqdXN0IHBsYWNlaG9sZGVyPyAqLworCWJvb2wgZmlyc3Q7CQkvKiBmaXJzdCBmaW5nZXIgaW4gdGhlIEhJRCBwYWNrZXQ/ICovCisJYm9vbCBhY3Rpdml0eTsJCS8qIGF0IGxlYXN0IG9uZSBhY3RpdmUgZmluZ2VyIHNvIGZhcj8gKi8KK307CisKK3N0YXRpYyBpbnQgc3RhbnR1bV9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgeworCisJY2FzZSBISURfVVBfR0VOREVTSzoKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0dEX1g6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19YLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0dEX1k6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1kpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19ZLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9VUF9ESUdJVElaRVI6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9ER19JTlJBTkdFOgorCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQljYXNlIEhJRF9ER19JTlBVVE1PREU6CisJCWNhc2UgSElEX0RHX0RFVklDRUlOREVYOgorCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RNQVg6CisJCQlyZXR1cm4gLTE7CisKKwkJY2FzZSBISURfREdfVElQU1dJVENIOgorCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsIEVWX0tFWSwgQlROX1RPVUNIKTsKKwkJCXJldHVybiAxOworCisJCWNhc2UgSElEX0RHX1dJRFRIOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9UT1VDSF9NQUpPUik7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBISURfREdfSEVJR0hUOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9UT1VDSF9NSU5PUik7CisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19NVF9PUklFTlRBVElPTiwKKwkJCQkJMSwgMSwgMCwgMCk7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBISURfREdfVElQUFJFU1NVUkU6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BSRVNTVVJFKTsKKwkJCXJldHVybiAxOworCisJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfVFJBQ0tJTkdfSUQpOworCQkJcmV0dXJuIDE7CisKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgMHhmZjAwMDAwMDoKKwkJLyogbm8gaW5wdXQtb3JpZW50ZWQgbWVhbmluZyAqLworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RhbnR1bV9pbnB1dF9tYXBwZWQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCWlmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkgfHwgdXNhZ2UtPnR5cGUgPT0gRVZfQUJTKQorCQljbGVhcl9iaXQodXNhZ2UtPmNvZGUsICpiaXQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgd2hvbGUgZmluZ2VyIGhhcyBiZWVuIHBhcnNlZCwKKyAqIHNvIHRoYXQgaXQgY2FuIGRlY2lkZSB3aGF0IHRvIHNlbmQgdG8gdGhlIGlucHV0IGxheWVyLgorICovCitzdGF0aWMgdm9pZCBzdGFudHVtX2ZpbHRlcl9ldmVudChzdHJ1Y3Qgc3RhbnR1bV9kYXRhICpzZCwKKwkJCQkJc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJYm9vbCB3aWRlOworCisJaWYgKCFzZC0+dmFsaWQpIHsKKwkJLyoKKwkJICogdG91Y2hzY3JlZW4gZW11bGF0aW9uOiBpZiB0aGUgZmlyc3QgZmluZ2VyIGlzIG5vdCB2YWxpZCBhbmQKKwkJICogdGhlcmUgcHJldmlvdXNseSB3YXMgZmluZ2VyIGFjdGl2aXR5LCB0aGlzIGlzIGEgcmVsZWFzZQorCQkgKi8KKwkJaWYgKHNkLT5maXJzdCAmJiBzZC0+YWN0aXZpdHkpIHsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMCk7CisJCQlzZC0+YWN0aXZpdHkgPSBmYWxzZTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lELCBzZC0+aWQpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YLCBzZC0+eCk7CisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1ksIHNkLT55KTsKKworCXdpZGUgPSAoc2QtPncgPiBzZC0+aCk7CisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX09SSUVOVEFUSU9OLCB3aWRlKTsKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfVE9VQ0hfTUFKT1IsIHdpZGUgPyBzZC0+dyA6IHNkLT5oKTsKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfVE9VQ0hfTUlOT1IsIHdpZGUgPyBzZC0+aCA6IHNkLT53KTsKKworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QUkVTU1VSRSwgc2QtPnopOworCisJaW5wdXRfbXRfc3luYyhpbnB1dCk7CisJc2QtPnZhbGlkID0gZmFsc2U7CisKKwkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwlpZiAoc2QtPmZpcnN0KSB7CisJCWlmICghc2QtPmFjdGl2aXR5KSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gsIDEpOworCQkJc2QtPmFjdGl2aXR5ID0gdHJ1ZTsKKwkJfQorCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgc2QtPngpOworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWSwgc2QtPnkpOworCX0KKwlzZC0+Zmlyc3QgPSBmYWxzZTsKK30KKworCitzdGF0aWMgaW50IHN0YW50dW1fZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCQkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQoreworCXN0cnVjdCBzdGFudHVtX2RhdGEgKnNkID0gaGlkX2dldF9kcnZkYXRhKGhpZCk7CisKKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHsKKwkJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBmaWVsZC0+aGlkaW5wdXQtPmlucHV0OworCisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9ER19JTlJBTkdFOgorCQkJLyogdGhpcyBpcyB0aGUgbGFzdCBmaWVsZCBpbiBhIGZpbmdlciAqLworCQkJc3RhbnR1bV9maWx0ZXJfZXZlbnQoc2QsIGlucHV0KTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19XSURUSDoKKwkJCXNkLT53ID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfSEVJR0hUOgorCQkJc2QtPmggPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9HRF9YOgorCQkJc2QtPnggPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9HRF9ZOgorCQkJc2QtPnkgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19USVBQUkVTU1VSRToKKwkJCXNkLT56ID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09OVEFDVElEOgorCQkJc2QtPmlkID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJCXNkLT52YWxpZCA9ICEhdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSAweGZmMDAwMDAyOgorCQkJLyogdGhpcyBjb21lcyBvbmx5IGJlZm9yZSB0aGUgZmlyc3QgZmluZ2VyICovCisJCQlzZC0+Zmlyc3QgPSB0cnVlOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8qIGlnbm9yZSB0aGUgb3RoZXJzICovCisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCS8qIHdlIGhhdmUgaGFuZGxlZCB0aGUgaGlkaW5wdXQgcGFydCwgbm93IHJlbWFpbnMgaGlkZGV2ICovCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFViAmJiBoaWQtPmhpZGRldl9oaWRfZXZlbnQpCisJCWhpZC0+aGlkZGV2X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc3RhbnR1bV9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwKKwkJCQljb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc3RhbnR1bV9kYXRhICpzZDsKKworCXNkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0YW50dW1fZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghc2QpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIFN0YW50dW0gZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzZC0+dmFsaWQgPSBmYWxzZTsKKwlzZC0+Zmlyc3QgPSBmYWxzZTsKKwlzZC0+YWN0aXZpdHkgPSBmYWxzZTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgc2QpOworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmICghcmV0KQorCQlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7CisKKwlpZiAocmV0KQorCQlrZnJlZShzZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzdGFudHVtX3JlbW92ZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwloaWRfaHdfc3RvcChoZGV2KTsKKwlrZnJlZShoaWRfZ2V0X2RydmRhdGEoaGRldikpOworCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHN0YW50dW1fZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TVEFOVFVNLCBVU0JfREVWSUNFX0lEX01UUCkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgc3RhbnR1bV9kZXZpY2VzKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfdXNhZ2VfaWQgc3RhbnR1bV9ncmFiYmVkX3VzYWdlc1tdID0geworCXsgSElEX0FOWV9JRCwgSElEX0FOWV9JRCwgSElEX0FOWV9JRCB9LAorCXsgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBzdGFudHVtX2RyaXZlciA9IHsKKwkubmFtZSA9ICJzdGFudHVtIiwKKwkuaWRfdGFibGUgPSBzdGFudHVtX2RldmljZXMsCisJLnByb2JlID0gc3RhbnR1bV9wcm9iZSwKKwkucmVtb3ZlID0gc3RhbnR1bV9yZW1vdmUsCisJLmlucHV0X21hcHBpbmcgPSBzdGFudHVtX2lucHV0X21hcHBpbmcsCisJLmlucHV0X21hcHBlZCA9IHN0YW50dW1faW5wdXRfbWFwcGVkLAorCS51c2FnZV90YWJsZSA9IHN0YW50dW1fZ3JhYmJlZF91c2FnZXMsCisJLmV2ZW50ID0gc3RhbnR1bV9ldmVudCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN0YW50dW1faW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZzdGFudHVtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzdGFudHVtX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnN0YW50dW1fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc3RhbnR1bV9pbml0KTsKK21vZHVsZV9leGl0KHN0YW50dW1fZXhpdCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jIGIvZHJpdmVycy9oaWQvaGlkLXdhY29tLmMKaW5kZXggMTJkY2RhNS4uOGQzYjQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXdhY29tLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXdhY29tLmMKQEAgLTE1Niw3ICsxNTYsOSBAQAogCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0OwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCXN0cnVjdCB3YWNvbV9kYXRhICp3ZGF0YTsKKwljaGFyIHJlcF9kYXRhWzJdOwogCWludCByZXQ7CisJaW50IGxpbWl0OwogCiAJd2RhdGEgPSBremFsbG9jKHNpemVvZigqd2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAod2RhdGEgPT0gTlVMTCkgewpAQCAtMTY2LDYgKzE2OCw3IEBACiAKIAloaWRfc2V0X2RydmRhdGEoaGRldiwgd2RhdGEpOwogCisJLyogUGFyc2UgdGhlIEhJRCByZXBvcnQgbm93ICovCiAJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKQEAgLTE3OCw2ICsxODEsMzEgQEAKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKKwkvKgorCSAqIE5vdGUgdGhhdCBpZiB0aGUgcmF3IHF1ZXJpZXMgZmFpbCwgaXQncyBub3QgYSBoYXJkIGZhaWx1cmUgYW5kIGl0CisJICogaXMgc2FmZSB0byBjb250aW51ZQorCSAqLworCisJLyogU2V0IFdhY29tIG1vZGUyICovCisJcmVwX2RhdGFbMF0gPSAweDAzOyByZXBfZGF0YVsxXSA9IDB4MDA7CisJbGltaXQgPSAzOworCWRvIHsKKwkJcmV0ID0gaGRldi0+aGlkX291dHB1dF9yYXdfcmVwb3J0KGhkZXYsIHJlcF9kYXRhLCAyLAorCQkJCUhJRF9GRUFUVVJFX1JFUE9SVCk7CisJfSB3aGlsZSAocmV0IDwgMCAmJiBsaW1pdC0tID4gMCk7CisJaWYgKHJldCA8IDApCisJCWRldl93YXJuKCZoZGV2LT5kZXYsICJmYWlsZWQgdG8gcG9rZSBkZXZpY2UgIzEsICVkXG4iLCByZXQpOworCisJLyogMHgwNiAtIGhpZ2ggcmVwb3J0aW5nIHNwZWVkLCAweDA1IC0gbG93IHNwZWVkICovCisJcmVwX2RhdGFbMF0gPSAweDA2OyByZXBfZGF0YVsxXSA9IDB4MDA7CisJbGltaXQgPSAzOworCWRvIHsKKwkJcmV0ID0gaGRldi0+aGlkX291dHB1dF9yYXdfcmVwb3J0KGhkZXYsIHJlcF9kYXRhLCAyLAorCQkJCUhJRF9GRUFUVVJFX1JFUE9SVCk7CisJfSB3aGlsZSAocmV0IDwgMCAmJiBsaW1pdC0tID4gMCk7CisJaWYgKHJldCA8IDApCisJCWRldl93YXJuKCZoZGV2LT5kZXYsICJmYWlsZWQgdG8gcG9rZSBkZXZpY2UgIzIsICVkXG4iLCByZXQpOworCiAJaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGhkZXYtPmlucHV0cy5uZXh0LCBzdHJ1Y3QgaGlkX2lucHV0LCBsaXN0KTsKIAlpbnB1dCA9IGhpZGlucHV0LT5pbnB1dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkcmF3LmMgYi9kcml2ZXJzL2hpZC9oaWRyYXcuYwppbmRleCBjZGQxMzY5Li5kMDQ0NzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWRyYXcuYworKysgYi9kcml2ZXJzL2hpZC9oaWRyYXcuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IGRldi0+aGlkX291dHB1dF9yYXdfcmVwb3J0KGRldiwgYnVmLCBjb3VudCk7CisJcmV0ID0gZGV2LT5oaWRfb3V0cHV0X3Jhd19yZXBvcnQoZGV2LCBidWYsIGNvdW50LCBISURfT1VUUFVUX1JFUE9SVCk7CiBvdXQ6CiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwppbmRleCBlMjk5N2E4Li41NmQwNmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwpAQCAtNSw3ICs1LDcgQEAKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgogICogIENvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIEhhYm91c3RhayA8bWlrZS1AY2luY2kucnIuY29tPiBmb3IgQ29uY2VwdDIsIEluYwogICogIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IE9saXZlciBOZXVrdW0KLSAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNi0yMDEwIEppcmkgS29zaW5hCiAgKi8KIAogLyoKQEAgLTMxNiw2ICszMTYsNyBAQAogCQkJZXJyX2hpZCgidXNiX3N1Ym1pdF91cmIob3V0KSBmYWlsZWQiKTsKIAkJCXJldHVybiAtMTsKIAkJfQorCQl1c2JoaWQtPmxhc3Rfb3V0ID0gamlmZmllczsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBxdWV1ZSB3b3JrIHRvIHdha2UgdXAgdGhlIGRldmljZS4KQEAgLTM3Nyw2ICszNzgsNyBAQAogCQkJZXJyX2hpZCgidXNiX3N1Ym1pdF91cmIoY3RybCkgZmFpbGVkIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KKwkJdXNiaGlkLT5sYXN0X2N0cmwgPSBqaWZmaWVzOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIHF1ZXVlIHdvcmsgdG8gd2FrZSB1cCB0aGUgZGV2aWNlLgpAQCAtNTEyLDkgKzUxNCwyMCBAQAogCQl1c2JoaWQtPm91dFt1c2JoaWQtPm91dGhlYWRdLnJlcG9ydCA9IHJlcG9ydDsKIAkJdXNiaGlkLT5vdXRoZWFkID0gaGVhZDsKIAotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSElEX09VVF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKSkKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhJRF9PVVRfUlVOTklORywgJnVzYmhpZC0+aW9mbCkpIHsKIAkJCWlmIChoaWRfc3VibWl0X291dChoaWQpKQogCQkJCWNsZWFyX2JpdChISURfT1VUX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIHRoZSBxdWV1ZSBpcyBrbm93biB0byBydW4KKwkJCSAqIGJ1dCBhbiBlYXJsaWVyIHJlcXVlc3QgbWF5IGJlIHN0dWNrCisJCQkgKiB3ZSBtYXkgbmVlZCB0byB0aW1lIG91dAorCQkJICogbm8gcmFjZSBiZWNhdXNlIHRoaXMgaXMgY2FsbGVkIHVuZGVyCisJCQkgKiBzcGlubG9jaworCQkJICovCisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB1c2JoaWQtPmxhc3Rfb3V0ICsgSFogKiA1KSkKKwkJCQl1c2JfdW5saW5rX3VyYih1c2JoaWQtPnVyYm91dCk7CisJCX0KIAkJcmV0dXJuOwogCX0KIApAQCAtNTM1LDkgKzU0OCwyMCBAQAogCXVzYmhpZC0+Y3RybFt1c2JoaWQtPmN0cmxoZWFkXS5kaXIgPSBkaXI7CiAJdXNiaGlkLT5jdHJsaGVhZCA9IGhlYWQ7CiAKLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSElEX0NUUkxfUlVOTklORywgJnVzYmhpZC0+aW9mbCkpCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpKSB7CiAJCWlmIChoaWRfc3VibWl0X2N0cmwoaGlkKSkKIAkJCWNsZWFyX2JpdChISURfQ1RSTF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiB0aGUgcXVldWUgaXMga25vd24gdG8gcnVuCisJCSAqIGJ1dCBhbiBlYXJsaWVyIHJlcXVlc3QgbWF5IGJlIHN0dWNrCisJCSAqIHdlIG1heSBuZWVkIHRvIHRpbWUgb3V0CisJCSAqIG5vIHJhY2UgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCB1bmRlcgorCQkgKiBzcGlubG9jaworCQkgKi8KKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdXNiaGlkLT5sYXN0X2N0cmwgKyBIWiAqIDUpKQorCQkJdXNiX3VubGlua191cmIodXNiaGlkLT51cmJjdHJsKTsKKwl9CiB9CiAKIHZvaWQgdXNiaGlkX3N1Ym1pdF9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgdW5zaWduZWQgY2hhciBkaXIpCkBAIC03NzQsNyArNzk4LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JoaWRfb3V0cHV0X3Jhd19yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgX191OCAqYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgaW50IHVzYmhpZF9vdXRwdXRfcmF3X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBfX3U4ICpidWYsIHNpemVfdCBjb3VudCwKKwkJdW5zaWduZWQgY2hhciByZXBvcnRfdHlwZSkKIHsKIAlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaGlkX3RvX3VzYl9kZXYoaGlkKTsKQEAgLTc4NSw3ICs4MTAsNyBAQAogCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAogCQlISURfUkVRX1NFVF9SRVBPUlQsCiAJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAotCQkoKEhJRF9PVVRQVVRfUkVQT1JUICsgMSkgPDwgOCkgfCAqYnVmLAorCQkoKHJlcG9ydF90eXBlICsgMSkgPDwgOCkgfCAqYnVmLAogCQlpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlciwgYnVmICsgMSwgY291bnQgLSAxLAogCQlVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CiAKQEAgLTk4MSw5ICsxMDA2LDYgQEAKIAogCXNwaW5fbG9ja19pbml0KCZ1c2JoaWQtPmxvY2spOwogCi0JdXNiaGlkLT5pbnRmID0gaW50ZjsKLQl1c2JoaWQtPmlmbnVtID0gaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7Ci0KIAl1c2JoaWQtPnVyYmN0cmwgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCWlmICghdXNiaGlkLT51cmJjdHJsKSB7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0xMTU0LDYgKzExNzYsOCBAQAogCiAJaGlkLT5kcml2ZXJfZGF0YSA9IHVzYmhpZDsKIAl1c2JoaWQtPmhpZCA9IGhpZDsKKwl1c2JoaWQtPmludGYgPSBpbnRmOworCXVzYmhpZC0+aWZudW0gPSBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKIAogCXJldCA9IGhpZF9hZGRfZGV2aWNlKGhpZCk7CiAJaWYgKHJldCkgewpAQCAtMTM0Miw3ICsxMzY2LDcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaGlkX3VzYl9pZHMgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaGlkX3VzYl9pZHNbXSA9IHsKIAl7IC5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTLAogCQkuYkludGVyZmFjZUNsYXNzID0gVVNCX0lOVEVSRkFDRV9DTEFTU19ISUQgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKaW5kZXggMzg3NzNkYy4uNzg0NDI4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCkBAIC00Myw4ICs0MywxMCBAQAogCiAJeyBVU0JfVkVORE9SX0lEX0FGQVRFQ0gsIFVTQl9ERVZJQ0VfSURfQUZBVEVDSF9BRjkwMTYsIEhJRF9RVUlSS19GVUxMU1BFRURfSU5URVJWQUwgfSwKIAorCXsgVVNCX1ZFTkRPUl9JRF9FVFVSQk9UT1VDSCwgVVNCX0RFVklDRV9JRF9FVFVSQk9UT1VDSCwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1BBTlRIRVJMT1JELCBVU0JfREVWSUNFX0lEX1BBTlRIRVJMT1JEX1RXSU5fVVNCX0pPWVNUSUNLLCBISURfUVVJUktfTVVMVElfSU5QVVQgfCBISURfUVVJUktfU0tJUF9PVVRQVVRfUkVQT1JUUyB9LAogCXsgVVNCX1ZFTkRPUl9JRF9QTEFZRE9UQ09NLCBVU0JfREVWSUNFX0lEX1BMQVlET1RDT01fRU1TX1VTQklJLCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKKwl7IFVTQl9WRU5ET1JfSURfVE9VQ0hQQUNLLCBVU0JfREVWSUNFX0lEX1RPVUNIUEFDS19SVFMsIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAogCiAJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl9VQzEwMEtNLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfQVRFTiwgVVNCX0RFVklDRV9JRF9BVEVOX0NTMTI0VSwgSElEX1FVSVJLX05PR0VUIH0sCkBAIC01Nyw2ICs1OSw3IEBACiAJeyBVU0JfVkVORE9SX0lEX0NILCBVU0JfREVWSUNFX0lEX0NIXzNBWElTXzVCVVRUT05fU1RJQ0ssIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9ETUksIFVTQl9ERVZJQ0VfSURfRE1JX0VOQywgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0VMTywgVVNCX0RFVklDRV9JRF9FTE9fVFMyNzAwLCBISURfUVVJUktfTk9HRVQgfSwKKwl7IFVTQl9WRU5ET1JfSURfUFJPRElHRSwgVVNCX0RFVklDRV9JRF9QUk9ESUdFX0NPUkRMRVNTLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfU1VOLCBVU0JfREVWSUNFX0lEX1JBUklUQU5fS1ZNX0RPTkdMRSwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1RVUkJPWCwgVVNCX0RFVklDRV9JRF9UVVJCT1hfS0VZQk9BUkQsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9VQ0xPR0lDLCBVU0JfREVWSUNFX0lEX1VDTE9HSUNfVEFCTEVUX1BGMTIwOSwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvdXNiaGlkLmggYi9kcml2ZXJzL2hpZC91c2JoaWQvdXNiaGlkLmgKaW5kZXggMDhmNTA1Yy4uZWMyMDQwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmhpZC5oCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JoaWQuaApAQCAtODAsMTIgKzgwLDE0IEBACiAJdW5zaWduZWQgY2hhciBjdHJsaGVhZCwgY3RybHRhaWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgZmlmbyBoZWFkICYgdGFpbCAqLwogCWNoYXIgKmN0cmxidWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGJ1ZmZlciAqLwogCWRtYV9hZGRyX3QgY3RybGJ1Zl9kbWE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGJ1ZmZlciBkbWEgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfY3RybDsJCQkJCQkvKiByZWNvcmQgb2YgbGFzdCBvdXRwdXQgZm9yIHRpbWVvdXRzICovCiAKIAlzdHJ1Y3QgdXJiICp1cmJvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IFVSQiAqLwogCXN0cnVjdCBoaWRfb3V0cHV0X2ZpZm8gb3V0W0hJRF9DT05UUk9MX0ZJRk9fU0laRV07ICAgICAgICAgICAgICAvKiBPdXRwdXQgcGlwZSBmaWZvICovCiAJdW5zaWduZWQgY2hhciBvdXRoZWFkLCBvdXR0YWlsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBwaXBlIGZpZm8gaGVhZCAmIHRhaWwgKi8KIAljaGFyICpvdXRidWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGJ1ZmZlciAqLwogCWRtYV9hZGRyX3Qgb3V0YnVmX2RtYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgYnVmZmVyIGRtYSAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF9vdXQ7CQkJCQkJCS8qIHJlY29yZCBvZiBsYXN0IG91dHB1dCBmb3IgdGltZW91dHMgKi8KIAogCXNwaW5sb2NrX3QgbG9jazsJCQkJCQkvKiBmaWZvIHNwaW5sb2NrICovCiAJdW5zaWduZWQgbG9uZyBpb2ZsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEkvTyBmbGFncyAoQ1RSTF9SVU5OSU5HLCBPVVRfUlVOTklORykgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWR0NzQ2Mi5jIGIvZHJpdmVycy9od21vbi9hZHQ3NDYyLmMKaW5kZXggYTMxZTc3Yy4uYjgxNTZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZHQ3NDYyLmMKKysrIGIvZHJpdmVycy9od21vbi9hZHQ3NDYyLmMKQEAgLTE3OSw3ICsxNzksNyBAQAogICoKICAqIFNvbWUsIGJ1dCBub3QgYWxsLCBvZiB0aGVzZSB2b2x0YWdlcyBoYXZlIGxvdy9oaWdoIGxpbWl0cy4KICAqLwotI2RlZmluZSBBRFQ3NDYyX1ZPTFRfQ09VTlQJMTIKKyNkZWZpbmUgQURUNzQ2Ml9WT0xUX0NPVU5UCTEzCiAKICNkZWZpbmUgQURUNzQ2Ml9WRU5ET1IJCTB4NDEKICNkZWZpbmUgQURUNzQ2Ml9ERVZJQ0UJCTB4NjIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1jb3JlLmMgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jCmluZGV4IDZjOWFjZTEuLjJhZDYyYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1jb3JlLmMKKysrIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWNvcmUuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXZvaWQgYW1zX2V4aXQodm9pZCkKK3ZvaWQgYW1zX3NlbnNvcl9kZXRhY2godm9pZCkKIHsKIAkvKiBSZW1vdmUgaW5wdXQgZGV2aWNlICovCiAJYW1zX2lucHV0X2V4aXQoKTsKQEAgLTIyMSw5ICsyMjEsNiBAQAogCS8qIFJlbW92ZSBhdHRyaWJ1dGVzICovCiAJZGV2aWNlX3JlbW92ZV9maWxlKCZhbXNfaW5mby5vZl9kZXYtPmRldiwgJmRldl9hdHRyX2N1cnJlbnQpOwogCi0JLyogU2h1dCBkb3duIGltcGxlbWVudGF0aW9uICovCi0JYW1zX2luZm8uZXhpdCgpOwotCiAJLyogRmx1c2ggaW50ZXJydXB0IHdvcmtlcgogCSAqCiAJICogV2UgZG8gdGhpcyBhZnRlciBhbXNfaW5mby5leGl0KCksIGJlY2F1c2UgYW4gaW50ZXJydXB0IG1pZ2h0CkBAIC0yMzksNiArMjM2LDEyIEBACiAJcG1mX3VucmVnaXN0ZXJfaXJxX2NsaWVudCgmYW1zX2ZyZWVmYWxsX2NsaWVudCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbXNfZXhpdCh2b2lkKQoreworCS8qIFNodXQgZG93biBpbXBsZW1lbnRhdGlvbiAqLworCWFtc19pbmZvLmV4aXQoKTsKK30KKwogTU9EVUxFX0FVVEhPUigiU3RlbGlhbiBQb3AsIE1pY2hhZWwgSGFuc2VsbWFubiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBcHBsZSBNb3Rpb24gU2Vuc29yIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCmluZGV4IDJjYmY4YTY1Li5hYmVlY2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaTJjLmMKKysrIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCkBAIC0yMzgsNiArMjM4LDggQEAKIHN0YXRpYyBpbnQgYW1zX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlpZiAoYW1zX2luZm8uaGFzX2RldmljZSkgeworCQlhbXNfc2Vuc29yX2RldGFjaCgpOworCiAJCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCQlhbXNfaTJjX3NldF9pcnEoQU1TX0lSUV9BTEwsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMKaW5kZXggZmIxOGIzZC4uNGY2MWIzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hbXMvYW1zLXBtdS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1wbXUuYwpAQCAtMTMzLDYgKzEzMyw4IEBACiAKIHN0YXRpYyB2b2lkIGFtc19wbXVfZXhpdCh2b2lkKQogeworCWFtc19zZW5zb3JfZGV0YWNoKCk7CisKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAlhbXNfcG11X3NldF9pcnEoQU1TX0lSUV9BTEwsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaCBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy5oCmluZGV4IDVlZDM4N2IuLmIyOGQ3ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy5oCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy5oCkBAIC02MSw2ICs2MSw3IEBACiAKIGV4dGVybiB2b2lkIGFtc19zZW5zb3JzKHM4ICp4LCBzOCAqeSwgczggKnopOwogZXh0ZXJuIGludCBhbXNfc2Vuc29yX2F0dGFjaCh2b2lkKTsKK2V4dGVybiB2b2lkIGFtc19zZW5zb3JfZGV0YWNoKHZvaWQpOwogCiBleHRlcm4gaW50IGFtc19wbXVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKIGV4dGVybiBpbnQgYW1zX2kyY19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc4LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzguYwppbmRleCBjYWRjYmQ5Li43MmZmMmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzguYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzguYwpAQCAtODUxLDE3ICs4NTEsMTYgQEAKIHN0YXRpYyBpbnQgX19pbml0IGxtNzhfaXNhX2ZvdW5kKHVuc2lnbmVkIHNob3J0IGFkZHJlc3MpCiB7CiAJaW50IHZhbCwgc2F2ZSwgZm91bmQgPSAwOworCWludCBwb3J0OwogCi0JLyogV2UgaGF2ZSB0byByZXF1ZXN0IHRoZSByZWdpb24gaW4gdHdvIHBhcnRzIGJlY2F1c2Ugc29tZQotCSAgIGJvYXJkcyBkZWNsYXJlIGJhc2UrNCB0byBiYXNlKzcgYXMgYSBQTlAgZGV2aWNlICovCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihhZGRyZXNzLCA0LCAibG03OCIpKSB7Ci0JCXByX2RlYnVnKCJsbTc4OiBGYWlsZWQgdG8gcmVxdWVzdCBsb3cgcGFydCBvZiByZWdpb25cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihhZGRyZXNzICsgNCwgNCwgImxtNzgiKSkgewotCQlwcl9kZWJ1ZygibG03ODogRmFpbGVkIHRvIHJlcXVlc3QgaGlnaCBwYXJ0IG9mIHJlZ2lvblxuIik7Ci0JCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MsIDQpOwotCQlyZXR1cm4gMDsKKwkvKiBTb21lIGJvYXJkcyBkZWNsYXJlIGJhc2UrMCB0byBiYXNlKzcgYXMgYSBQTlAgZGV2aWNlLCBzb21lIGJhc2UrNAorCSAqIHRvIGJhc2UrNyBhbmQgc29tZSBiYXNlKzUgdG8gYmFzZSs2LiBTbyB3ZSBiZXR0ZXIgcmVxdWVzdCBlYWNoIHBvcnQKKwkgKiBpbmRpdmlkdWFsbHkgZm9yIHRoZSBwcm9iaW5nIHBoYXNlLiAqLworCWZvciAocG9ydCA9IGFkZHJlc3M7IHBvcnQgPCBhZGRyZXNzICsgTE03OF9FWFRFTlQ7IHBvcnQrKykgeworCQlpZiAoIXJlcXVlc3RfcmVnaW9uKHBvcnQsIDEsICJsbTc4IikpIHsKKwkJCXByX2RlYnVnKCJsbTc4OiBGYWlsZWQgdG8gcmVxdWVzdCBwb3J0IDB4JXhcbiIsIHBvcnQpOworCQkJZ290byByZWxlYXNlOworCQl9CiAJfQogCiAjZGVmaW5lIFJFQUxMWV9TTE9XX0lPCkBAIC05MjUsOCArOTI0LDggQEAKIAkJCXZhbCAmIDB4ODAgPyAiTE03OSIgOiAiTE03OCIsIChpbnQpYWRkcmVzcyk7CiAKICByZWxlYXNlOgotCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MgKyA0LCA0KTsKLQlyZWxlYXNlX3JlZ2lvbihhZGRyZXNzLCA0KTsKKwlmb3IgKHBvcnQtLTsgcG9ydCA+PSBhZGRyZXNzOyBwb3J0LS0pCisJCXJlbGVhc2VfcmVnaW9uKHBvcnQsIDEpOwogCXJldHVybiBmb3VuZDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM3ODFkLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc4MWQuYwppbmRleCAwNWY5MjI1Li4zMmQ0YWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4Mzc4MWQuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4Mzc4MWQuYwpAQCAtMTc5MywxNyArMTc5MywxNyBAQAogdzgzNzgxZF9pc2FfZm91bmQodW5zaWduZWQgc2hvcnQgYWRkcmVzcykKIHsKIAlpbnQgdmFsLCBzYXZlLCBmb3VuZCA9IDA7CisJaW50IHBvcnQ7CiAKLQkvKiBXZSBoYXZlIHRvIHJlcXVlc3QgdGhlIHJlZ2lvbiBpbiB0d28gcGFydHMgYmVjYXVzZSBzb21lCi0JICAgYm9hcmRzIGRlY2xhcmUgYmFzZSs0IHRvIGJhc2UrNyBhcyBhIFBOUCBkZXZpY2UgKi8KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGFkZHJlc3MsIDQsICJ3ODM3ODFkIikpIHsKLQkJcHJfZGVidWcoInc4Mzc4MWQ6IEZhaWxlZCB0byByZXF1ZXN0IGxvdyBwYXJ0IG9mIHJlZ2lvblxuIik7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGFkZHJlc3MgKyA0LCA0LCAidzgzNzgxZCIpKSB7Ci0JCXByX2RlYnVnKCJ3ODM3ODFkOiBGYWlsZWQgdG8gcmVxdWVzdCBoaWdoIHBhcnQgb2YgcmVnaW9uXG4iKTsKLQkJcmVsZWFzZV9yZWdpb24oYWRkcmVzcywgNCk7Ci0JCXJldHVybiAwOworCS8qIFNvbWUgYm9hcmRzIGRlY2xhcmUgYmFzZSswIHRvIGJhc2UrNyBhcyBhIFBOUCBkZXZpY2UsIHNvbWUgYmFzZSs0CisJICogdG8gYmFzZSs3IGFuZCBzb21lIGJhc2UrNSB0byBiYXNlKzYuIFNvIHdlIGJldHRlciByZXF1ZXN0IGVhY2ggcG9ydAorCSAqIGluZGl2aWR1YWxseSBmb3IgdGhlIHByb2JpbmcgcGhhc2UuICovCisJZm9yIChwb3J0ID0gYWRkcmVzczsgcG9ydCA8IGFkZHJlc3MgKyBXODM3ODFEX0VYVEVOVDsgcG9ydCsrKSB7CisJCWlmICghcmVxdWVzdF9yZWdpb24ocG9ydCwgMSwgInc4Mzc4MWQiKSkgeworCQkJcHJfZGVidWcoInc4Mzc4MWQ6IEZhaWxlZCB0byByZXF1ZXN0IHBvcnQgMHgleFxuIiwKKwkJCQkgcG9ydCk7CisJCQlnb3RvIHJlbGVhc2U7CisJCX0KIAl9CiAKICNkZWZpbmUgUkVBTExZX1NMT1dfSU8KQEAgLTE4NzcsOCArMTg3Nyw4IEBACiAJCQl2YWwgPT0gMHgzMCA/ICJXODM3ODJEIiA6ICJXODM3ODFEIiwgKGludClhZGRyZXNzKTsKIAogIHJlbGVhc2U6Ci0JcmVsZWFzZV9yZWdpb24oYWRkcmVzcyArIDQsIDQpOwotCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MsIDQpOworCWZvciAocG9ydC0tOyBwb3J0ID49IGFkZHJlc3M7IHBvcnQtLSkKKwkJcmVsZWFzZV9yZWdpb24ocG9ydCwgMSk7CiAJcmV0dXJuIGZvdW5kOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDVmMzE4Y2UuLjczN2YwNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC01NjQsNiArNTY0LDE2IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtdmVyc2F0aWxlLgogCitjb25maWcgSTJDX09DVEVPTgorCXRyaXN0YXRlICJDYXZpdW0gT0NURU9OIEkyQyBidXMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIENQVV9DQVZJVU1fT0NURU9OCisJaGVscAorCSAgU2F5IHllcyBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoZSBJMkMgc2VyaWFsIGJ1cyBvbiBDYXZpdW0KKwkgIE9DVEVPTiBTT0MuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGkyYy1vY3Rlb24uCisKIGNvbW1lbnQgIkV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMiCiAKIGNvbmZpZyBJMkNfUEFSUE9SVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCmluZGV4IDMwMmM1NTEuLmMyYzRlYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKQEAgLTU0LDYgKzU0LDcgQEAKIG9iai0kKENPTkZJR19JMkNfU0lNVEVDKQkrPSBpMmMtc2ltdGVjLm8KIG9iai0kKENPTkZJR19JMkNfU1RVMzAwKQkrPSBpMmMtc3R1MzAwLm8KIG9iai0kKENPTkZJR19JMkNfVkVSU0FUSUxFKQkrPSBpMmMtdmVyc2F0aWxlLm8KK29iai0kKENPTkZJR19JMkNfT0NURU9OKQkrPSBpMmMtb2N0ZW9uLm8KIAogIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCiBvYmotJChDT05GSUdfSTJDX1BBUlBPUlQpCSs9IGkyYy1wYXJwb3J0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb2N0ZW9uLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9jdGVvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMzc1NTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9jdGVvbi5jCkBAIC0wLDAgKzEsNjUxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA5LTIwMTAKKyAqIE5va2lhIFNpZW1lbnMgTmV0d29ya3MsIG1pY2hhZWwubGF3bmljay5leHRAbnNuLmNvbQorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAxMCBDYXZpdW0gTmV0d29ya3MsIEluYy4KKyAqCisgKiBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgaTJjIGFkYXB0ZXIgaW4gQ2F2aXVtIE5ldHdvcmtzJyBPQ1RFT04gcHJvY2Vzc29ycy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CisKKyNkZWZpbmUgRFJWX05BTUUgImkyYy1vY3Rlb24iCisKKy8qIFRoZSBwcmV2aW91cyBvdXQtb2YtdHJlZSB2ZXJzaW9uIHdhcyBpbXBsaWNpdGx5IHZlcnNpb24gMS4wLiAqLworI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4wIgorCisvKiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIFNXX1RXU0kJIDB4MDAKKyNkZWZpbmUgVFdTSV9JTlQgMHgxMAorCisvKiBDb250cm9sbGVyIGNvbW1hbmQgcGF0dGVybnMgKi8KKyNkZWZpbmUgU1dfVFdTSV9WICAgICAgICAgICAgICAgMHg4MDAwMDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIFNXX1RXU0lfRU9QX1RXU0lfREFUQSAgIDB4MEMwMDAwMDEwMDAwMDAwMHVsbAorI2RlZmluZSBTV19UV1NJX0VPUF9UV1NJX0NUTCAgICAweDBDMDAwMDAyMDAwMDAwMDB1bGwKKyNkZWZpbmUgU1dfVFdTSV9FT1BfVFdTSV9DTEtDVEwgMHgwQzAwMDAwMzAwMDAwMDAwdWxsCisjZGVmaW5lIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCAgIDB4MEMwMDAwMDMwMDAwMDAwMHVsbAorI2RlZmluZSBTV19UV1NJX0VPUF9UV1NJX1JTVCAgICAweDBDMDAwMDA3MDAwMDAwMDB1bGwKKyNkZWZpbmUgU1dfVFdTSV9PUF9UV1NJX0NMSyAgICAgMHgwODAwMDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIFNXX1RXU0lfUiAgICAgICAgICAgICAgIDB4MDEwMDAwMDAwMDAwMDAwMHVsbAorCisvKiBDb250cm9sbGVyIGNvbW1hbmQgYW5kIHN0YXR1cyBiaXRzICovCisjZGVmaW5lIFRXU0lfQ1RMX0NFICAgMHg4MAorI2RlZmluZSBUV1NJX0NUTF9FTkFCIDB4NDAKKyNkZWZpbmUgVFdTSV9DVExfU1RBICAweDIwCisjZGVmaW5lIFRXU0lfQ1RMX1NUUCAgMHgxMAorI2RlZmluZSBUV1NJX0NUTF9JRkxHIDB4MDgKKyNkZWZpbmUgVFdTSV9DVExfQUFLICAweDA0CisKKy8qIFNvbWUgc3RhdHVzIHZhbHVlcyAqLworI2RlZmluZSBTVEFUX1NUQVJUICAgICAgMHgwOAorI2RlZmluZSBTVEFUX1JTVEFSVCAgICAgMHgxMAorI2RlZmluZSBTVEFUX1RYQUREUl9BQ0sgMHgxOAorI2RlZmluZSBTVEFUX1RYREFUQV9BQ0sgMHgyOAorI2RlZmluZSBTVEFUX1JYQUREUl9BQ0sgMHg0MAorI2RlZmluZSBTVEFUX1JYREFUQV9BQ0sgMHg1MAorI2RlZmluZSBTVEFUX0lETEUgICAgICAgMHhGOAorCitzdHJ1Y3Qgb2N0ZW9uX2kyYyB7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJc3RydWN0IGkyY19hZGFwdGVyIGFkYXA7CisJaW50IGlycTsKKwlpbnQgdHdzaV9mcmVxOworCWludCBzeXNfZnJlcTsKKwlyZXNvdXJjZV9zaXplX3QgdHdzaV9waHlzOworCXZvaWQgX19pb21lbSAqdHdzaV9iYXNlOworCXJlc291cmNlX3NpemVfdCByZWdzaXplOworCXN0cnVjdCBkZXZpY2UgKmRldjsKK307CisKKy8qKgorICogb2N0ZW9uX2kyY193cml0ZV9zdyAtIHdyaXRlIGFuIEkyQyBjb3JlIHJlZ2lzdGVyLgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICogQGVvcF9yZWc6IFJlZ2lzdGVyIHNlbGVjdG9yLgorICogQGRhdGE6IFZhbHVlIHRvIGJlIHdyaXR0ZW4uCisgKgorICogVGhlIEkyQyBjb3JlIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgaW5kaXJlY3RseSB2aWEgdGhlIFNXX1RXU0kgQ1NSLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faTJjX3dyaXRlX3N3KHN0cnVjdCBvY3Rlb25faTJjICppMmMsCisJCQkJdTY0IGVvcF9yZWcsCisJCQkJdTggZGF0YSkKK3sKKwl1NjQgdG1wOworCisJX19yYXdfd3JpdGVxKFNXX1RXU0lfViB8IGVvcF9yZWcgfCBkYXRhLCBpMmMtPnR3c2lfYmFzZSArIFNXX1RXU0kpOworCWRvIHsKKwkJdG1wID0gX19yYXdfcmVhZHEoaTJjLT50d3NpX2Jhc2UgKyBTV19UV1NJKTsKKwl9IHdoaWxlICgodG1wICYgU1dfVFdTSV9WKSAhPSAwKTsKK30KKworLyoqCisgKiBvY3Rlb25faTJjX3JlYWRfc3cgLSB3cml0ZSBhbiBJMkMgY29yZSByZWdpc3Rlci4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqIEBlb3BfcmVnOiBSZWdpc3RlciBzZWxlY3Rvci4KKyAqCisgKiBSZXR1cm5zIHRoZSBkYXRhLgorICoKKyAqIFRoZSBJMkMgY29yZSByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkIGluZGlyZWN0bHkgdmlhIHRoZSBTV19UV1NJIENTUi4KKyAqLworc3RhdGljIHU4IG9jdGVvbl9pMmNfcmVhZF9zdyhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjLCB1NjQgZW9wX3JlZykKK3sKKwl1NjQgdG1wOworCisJX19yYXdfd3JpdGVxKFNXX1RXU0lfViB8IGVvcF9yZWcgfCBTV19UV1NJX1IsIGkyYy0+dHdzaV9iYXNlICsgU1dfVFdTSSk7CisJZG8geworCQl0bXAgPSBfX3Jhd19yZWFkcShpMmMtPnR3c2lfYmFzZSArIFNXX1RXU0kpOworCX0gd2hpbGUgKCh0bXAgJiBTV19UV1NJX1YpICE9IDApOworCisJcmV0dXJuIHRtcCAmIDB4RkY7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY193cml0ZV9pbnQgLSB3cml0ZSB0aGUgVFdTSV9JTlQgcmVnaXN0ZXIKKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqIEBkYXRhOiBWYWx1ZSB0byBiZSB3cml0dGVuLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faTJjX3dyaXRlX2ludChzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjLCB1NjQgZGF0YSkKK3sKKwl1NjQgdG1wOworCisJX19yYXdfd3JpdGVxKGRhdGEsIGkyYy0+dHdzaV9iYXNlICsgVFdTSV9JTlQpOworCXRtcCA9IF9fcmF3X3JlYWRxKGkyYy0+dHdzaV9iYXNlICsgVFdTSV9JTlQpOworfQorCisvKioKKyAqIG9jdGVvbl9pMmNfaW50X2VuYWJsZSAtIGVuYWJsZSB0aGUgVFMgaW50ZXJydXB0LgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICoKKyAqIFRoZSBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZCB3aGVuIHRoZXJlIGlzIG5vbi1TVEFUX0lETEUgc3RhdGUgaW4KKyAqIHRoZSBTV19UV1NJX0VPUF9UV1NJX1NUQVQgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pMmNfaW50X2VuYWJsZShzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCW9jdGVvbl9pMmNfd3JpdGVfaW50KGkyYywgMHg0MCk7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19pbnRfZGlzYWJsZSAtIGRpc2FibGUgdGhlIFRTIGludGVycnVwdC4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2kyY19pbnRfZGlzYWJsZShzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCW9jdGVvbl9pMmNfd3JpdGVfaW50KGkyYywgMCk7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY191bmJsb2NrIC0gdW5ibG9jayB0aGUgYnVzLgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICoKKyAqIElmIHRoZXJlIHdhcyBhIHJlc2V0IHdoaWxlIGEgZGV2aWNlIHdhcyBkcml2aW5nIDAgdG8gYnVzLAorICogYnVzIGlzIGJsb2NrZWQuIFdlIHRvZ2dsZSBpdCBmcmVlIG1hbnVhbGx5IGJ5IHNvbWUgY2xvY2sKKyAqIGN5Y2xlcyBhbmQgc2VuZCBhIHN0b3AuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pMmNfdW5ibG9jayhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCWludCBpOworCisJZGV2X2RiZyhpMmMtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgeworCQlvY3Rlb25faTJjX3dyaXRlX2ludChpMmMsIDB4MCk7CisJCXVkZWxheSg1KTsKKwkJb2N0ZW9uX2kyY193cml0ZV9pbnQoaTJjLCAweDIwMCk7CisJCXVkZWxheSg1KTsKKwl9CisJb2N0ZW9uX2kyY193cml0ZV9pbnQoaTJjLCAweDMwMCk7CisJdWRlbGF5KDUpOworCW9jdGVvbl9pMmNfd3JpdGVfaW50KGkyYywgMHgxMDApOworCXVkZWxheSg1KTsKKwlvY3Rlb25faTJjX3dyaXRlX2ludChpMmMsIDB4MCk7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19pc3IgLSB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KKyAqIEBpbnQ6IFRoZSBpcnEsIHVudXNlZC4KKyAqIEBkZXZfaWQ6IE91ciBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqLworc3RhdGljIGlycXJldHVybl90IG9jdGVvbl9pMmNfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjID0gZGV2X2lkOworCisJb2N0ZW9uX2kyY19pbnRfZGlzYWJsZShpMmMpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaTJjLT5xdWV1ZSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworc3RhdGljIGludCBvY3Rlb25faTJjX3Rlc3RfaWZsZyhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCXJldHVybiAob2N0ZW9uX2kyY19yZWFkX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DVEwpICYgVFdTSV9DVExfSUZMRykgIT0gMDsKK30KKworLyoqCisgKiBvY3Rlb25faTJjX3dhaXQgLSB3YWl0IGZvciB0aGUgSUZMRyB0byBiZSBzZXQuCisgKiBAaTJjOiBUaGUgc3RydWN0IG9jdGVvbl9pMmMuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm5vLgorICovCitzdGF0aWMgaW50IG9jdGVvbl9pMmNfd2FpdChzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCWludCByZXN1bHQ7CisKKwlvY3Rlb25faTJjX2ludF9lbmFibGUoaTJjKTsKKworCXJlc3VsdCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGkyYy0+cXVldWUsCisJCQkJCQkgIG9jdGVvbl9pMmNfdGVzdF9pZmxnKGkyYyksCisJCQkJCQkgIGkyYy0+YWRhcC50aW1lb3V0KTsKKworCW9jdGVvbl9pMmNfaW50X2Rpc2FibGUoaTJjKTsKKworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9kYmcoaTJjLT5kZXYsICIlczogd2FpdCBpbnRlcnJ1cHRlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gcmVzdWx0OworCX0gZWxzZSBpZiAocmVzdWx0ID09IDApIHsKKwkJZGV2X2RiZyhpMmMtPmRldiwgIiVzOiB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7CisJCXJlc3VsdCA9IC1FVElNRURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19zdGFydCAtIHNlbmQgU1RBUlQgdG8gdGhlIGJ1cy4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJybm8uCisgKi8KK3N0YXRpYyBpbnQgb2N0ZW9uX2kyY19zdGFydChzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCXU4IGRhdGE7CisJaW50IHJlc3VsdDsKKworCW9jdGVvbl9pMmNfd3JpdGVfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX0NUTCwKKwkJCQlUV1NJX0NUTF9FTkFCIHwgVFdTSV9DVExfU1RBKTsKKworCXJlc3VsdCA9IG9jdGVvbl9pMmNfd2FpdChpMmMpOworCWlmIChyZXN1bHQpIHsKKwkJaWYgKG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCkgPT0gU1RBVF9JRExFKSB7CisJCQkvKgorCQkJICogQ29udHJvbGxlciByZWZ1c2VkIHRvIHNlbmQgc3RhcnQgZmxhZyBNYXkKKwkJCSAqIGJlIGEgY2xpZW50IGlzIGhvbGRpbmcgU0RBIGxvdyAtIGxldCdzIHRyeQorCQkJICogdG8gZnJlZSBpdC4KKwkJCSAqLworCQkJb2N0ZW9uX2kyY191bmJsb2NrKGkyYyk7CisJCQlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DVEwsCisJCQkJCSAgICBUV1NJX0NUTF9FTkFCIHwgVFdTSV9DVExfU1RBKTsKKworCQkJcmVzdWx0ID0gb2N0ZW9uX2kyY193YWl0KGkyYyk7CisJCX0KKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiByZXN1bHQ7CisJfQorCisJZGF0YSA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisJaWYgKChkYXRhICE9IFNUQVRfU1RBUlQpICYmIChkYXRhICE9IFNUQVRfUlNUQVJUKSkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiJXM6IGJhZCBzdGF0dXMgKDB4JXgpXG4iLCBfX2Z1bmNfXywgZGF0YSk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIG9jdGVvbl9pMmNfc3RvcCAtIHNlbmQgU1RPUCB0byB0aGUgYnVzLgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJuby4KKyAqLworc3RhdGljIGludCBvY3Rlb25faTJjX3N0b3Aoc3RydWN0IG9jdGVvbl9pMmMgKmkyYykKK3sKKwl1OCBkYXRhOworCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLAorCQkJICAgIFRXU0lfQ1RMX0VOQUIgfCBUV1NJX0NUTF9TVFApOworCisJZGF0YSA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisKKwlpZiAoZGF0YSAhPSBTVEFUX0lETEUpIHsKKwkJZGV2X2VycihpMmMtPmRldiwgIiVzOiBiYWQgc3RhdHVzKDB4JXgpXG4iLCBfX2Z1bmNfXywgZGF0YSk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvY3Rlb25faTJjX3dyaXRlIC0gc2VuZCBkYXRhIHRvIHRoZSBidXMuCisgKiBAaTJjOiBUaGUgc3RydWN0IG9jdGVvbl9pMmMuCisgKiBAdGFyZ2V0OiBUYXJnZXQgYWRkcmVzcy4KKyAqIEBkYXRhOiBQb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIHNlbnQuCisgKiBAbGVuZ3RoOiBMZW5ndGggb2YgdGhlIGRhdGEuCisgKgorICogVGhlIGFkZHJlc3MgaXMgc2VudCBvdmVyIHRoZSBidXMsIHRoZW4gdGhlIGRhdGEuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm5vLgorICovCitzdGF0aWMgaW50IG9jdGVvbl9pMmNfd3JpdGUoc3RydWN0IG9jdGVvbl9pMmMgKmkyYywgaW50IHRhcmdldCwKKwkJCSAgICBjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaSwgcmVzdWx0OworCXU4IHRtcDsKKworCXJlc3VsdCA9IG9jdGVvbl9pMmNfc3RhcnQoaTJjKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfREFUQSwgdGFyZ2V0IDw8IDEpOworCW9jdGVvbl9pMmNfd3JpdGVfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX0NUTCwgVFdTSV9DVExfRU5BQik7CisKKwlyZXN1bHQgPSBvY3Rlb25faTJjX3dhaXQoaTJjKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCXRtcCA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisJCWlmICgodG1wICE9IFNUQVRfVFhBRERSX0FDSykgJiYgKHRtcCAhPSBTVEFUX1RYREFUQV9BQ0spKSB7CisJCQlkZXZfZXJyKGkyYy0+ZGV2LAorCQkJCSIlczogYmFkIHN0YXR1cyBiZWZvcmUgd3JpdGUgKDB4JXgpXG4iLAorCQkJCV9fZnVuY19fLCB0bXApOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9EQVRBLCBkYXRhW2ldKTsKKwkJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLCBUV1NJX0NUTF9FTkFCKTsKKworCQlyZXN1bHQgPSBvY3Rlb25faTJjX3dhaXQoaTJjKTsKKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19yZWFkIC0gcmVjZWl2ZSBkYXRhIGZyb20gdGhlIGJ1cy4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqIEB0YXJnZXQ6IFRhcmdldCBhZGRyZXNzLgorICogQGRhdGE6IFBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBkYXRhZSAuCisgKiBAbGVuZ3RoOiBMZW5ndGggb2YgdGhlIGRhdGEuCisgKgorICogVGhlIGFkZHJlc3MgaXMgc2VudCBvdmVyIHRoZSBidXMsIHRoZW4gdGhlIGRhdGEgaXMgcmVhZC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJybm8uCisgKi8KK3N0YXRpYyBpbnQgb2N0ZW9uX2kyY19yZWFkKHN0cnVjdCBvY3Rlb25faTJjICppMmMsIGludCB0YXJnZXQsCisJCQkgICB1OCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaSwgcmVzdWx0OworCXU4IHRtcDsKKworCWlmIChsZW5ndGggPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlc3VsdCA9IG9jdGVvbl9pMmNfc3RhcnQoaTJjKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfREFUQSwgKHRhcmdldDw8MSkgfCAxKTsKKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DVEwsIFRXU0lfQ1RMX0VOQUIpOworCisJcmVzdWx0ID0gb2N0ZW9uX2kyY193YWl0KGkyYyk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQl0bXAgPSBvY3Rlb25faTJjX3JlYWRfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX1NUQVQpOworCQlpZiAoKHRtcCAhPSBTVEFUX1JYREFUQV9BQ0spICYmICh0bXAgIT0gU1RBVF9SWEFERFJfQUNLKSkgeworCQkJZGV2X2VycihpMmMtPmRldiwKKwkJCQkiJXM6IGJhZCBzdGF0dXMgYmVmb3JlIHJlYWQgKDB4JXgpXG4iLAorCQkJCV9fZnVuY19fLCB0bXApOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlpZiAoaSsxIDwgbGVuZ3RoKQorCQkJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLAorCQkJCQkJVFdTSV9DVExfRU5BQiB8IFRXU0lfQ1RMX0FBSyk7CisJCWVsc2UKKwkJCW9jdGVvbl9pMmNfd3JpdGVfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX0NUTCwKKwkJCQkJCVRXU0lfQ1RMX0VOQUIpOworCisJCXJlc3VsdCA9IG9jdGVvbl9pMmNfd2FpdChpMmMpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKKworCQlkYXRhW2ldID0gb2N0ZW9uX2kyY19yZWFkX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9EQVRBKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY194ZmVyIC0gVGhlIGRyaXZlcidzIG1hc3Rlcl94ZmVyIGZ1bmN0aW9uLgorICogQGFkYXA6IFBvaW50ZXIgdG8gdGhlIGkyY19hZGFwdGVyIHN0cnVjdHVyZS4KKyAqIEBtc2dzOiBQb2ludGVyIHRvIHRoZSBtZXNzYWdlcyB0byBiZSBwcm9jZXNzZWQuCisgKiBAbnVtOiBMZW5ndGggb2YgdGhlIE1TR1MgYXJyYXkuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHByb2Nlc3NlZCwgb3IgYSBuZWdhdGl2ZSBlcnJubyBvbgorICogZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBvY3Rlb25faTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLAorCQkJICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsCisJCQkgICBpbnQgbnVtKQoreworCXN0cnVjdCBpMmNfbXNnICpwbXNnOworCWludCBpOworCWludCByZXQgPSAwOworCXN0cnVjdCBvY3Rlb25faTJjICppMmMgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCisJZm9yIChpID0gMDsgcmV0ID09IDAgJiYgaSA8IG51bTsgaSsrKSB7CisJCXBtc2cgPSAmbXNnc1tpXTsKKwkJZGV2X2RiZyhpMmMtPmRldiwKKwkJCSJEb2luZyAlcyAlZCBieXRlKHMpIHRvL2Zyb20gMHglMDJ4IC0gJWQgb2YgJWQgbWVzc2FnZXNcbiIsCisJCQkgcG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCA/ICJyZWFkIiA6ICJ3cml0ZSIsCisJCQkgcG1zZy0+bGVuLCBwbXNnLT5hZGRyLCBpICsgMSwgbnVtKTsKKwkJaWYgKHBtc2ctPmZsYWdzICYgSTJDX01fUkQpCisJCQlyZXQgPSBvY3Rlb25faTJjX3JlYWQoaTJjLCBwbXNnLT5hZGRyLCBwbXNnLT5idWYsCisJCQkJCQlwbXNnLT5sZW4pOworCQllbHNlCisJCQlyZXQgPSBvY3Rlb25faTJjX3dyaXRlKGkyYywgcG1zZy0+YWRkciwgcG1zZy0+YnVmLAorCQkJCQkJcG1zZy0+bGVuKTsKKwl9CisJb2N0ZW9uX2kyY19zdG9wKGkyYyk7CisKKwlyZXR1cm4gKHJldCAhPSAwKSA/IHJldCA6IG51bTsKK30KKworc3RhdGljIHUzMiBvY3Rlb25faTJjX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gb2N0ZW9uX2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlciA9IG9jdGVvbl9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IG9jdGVvbl9pMmNfZnVuY3Rpb25hbGl0eSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgb2N0ZW9uX2kyY19vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAiT0NURU9OIGFkYXB0ZXIiLAorCS5hbGdvID0gJm9jdGVvbl9pMmNfYWxnbywKKwkudGltZW91dCA9IDIsCit9OworCisvKioKKyAqIG9jdGVvbl9pMmNfc2V0Y2xvY2sgLSBDYWxjdWxhdGUgYW5kIHNldCBjbG9jayBkaXZpc29ycy4KKyAqLworc3RhdGljIGludCBfX2luaXQgb2N0ZW9uX2kyY19zZXRjbG9jayhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCWludCB0Y2xrLCB0aHBfYmFzZSwgaW5jLCB0aHBfaWR4LCBtZGl2X2lkeCwgbmRpdl9pZHgsIGZvc2NsLCBkaWZmOworCWludCB0aHAgPSAweDE4LCBtZGl2ID0gMiwgbmRpdiA9IDAsIGRlbHRhX2h6ID0gMTAwMDAwMDsKKworCWZvciAobmRpdl9pZHggPSAwOyBuZGl2X2lkeCA8IDggJiYgZGVsdGFfaHogIT0gMDsgbmRpdl9pZHgrKykgeworCQkvKgorCQkgKiBBbiBtZGl2IHZhbHVlIG9mIGxlc3MgdGhhbiAyIHNlZW1zIHRvIG5vdCB3b3JrIHdlbGwKKwkJICogd2l0aCBkczEzMzcgUlRDcywgc28gd2UgY29uc3RyYWluIGl0IHRvIGxhcmdlcgorCQkgKiB2YWx1ZXMuCisJCSAqLworCQlmb3IgKG1kaXZfaWR4ID0gMTU7IG1kaXZfaWR4ID49IDIgJiYgZGVsdGFfaHogIT0gMDsgbWRpdl9pZHgtLSkgeworCQkJLyoKKwkJCSAqIEZvciBnaXZlbiBuZGl2IGFuZCBtZGl2IHZhbHVlcyBjaGVjayB0aGUKKwkJCSAqIHR3byBjbG9zZXN0IHRocCB2YWx1ZXMuCisJCQkgKi8KKwkJCXRjbGsgPSBpMmMtPnR3c2lfZnJlcSAqIChtZGl2X2lkeCArIDEpICogMTA7CisJCQl0Y2xrICo9ICgxIDw8IG5kaXZfaWR4KTsKKwkJCXRocF9iYXNlID0gKGkyYy0+c3lzX2ZyZXEgLyAodGNsayAqIDIpKSAtIDE7CisJCQlmb3IgKGluYyA9IDA7IGluYyA8PSAxOyBpbmMrKykgeworCQkJCXRocF9pZHggPSB0aHBfYmFzZSArIGluYzsKKwkJCQlpZiAodGhwX2lkeCA8IDUgfHwgdGhwX2lkeCA+IDB4ZmYpCisJCQkJCWNvbnRpbnVlOworCisJCQkJZm9zY2wgPSBpMmMtPnN5c19mcmVxIC8gKDIgKiAodGhwX2lkeCArIDEpKTsKKwkJCQlmb3NjbCA9IGZvc2NsIC8gKDEgPDwgbmRpdl9pZHgpOworCQkJCWZvc2NsID0gZm9zY2wgLyAobWRpdl9pZHggKyAxKSAvIDEwOworCQkJCWRpZmYgPSBhYnMoZm9zY2wgLSBpMmMtPnR3c2lfZnJlcSk7CisJCQkJaWYgKGRpZmYgPCBkZWx0YV9oeikgeworCQkJCQlkZWx0YV9oeiA9IGRpZmY7CisJCQkJCXRocCA9IHRocF9pZHg7CisJCQkJCW1kaXYgPSBtZGl2X2lkeDsKKwkJCQkJbmRpdiA9IG5kaXZfaWR4OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9PUF9UV1NJX0NMSywgdGhwKTsKKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DTEtDVEwsIChtZGl2IDw8IDMpIHwgbmRpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgb2N0ZW9uX2kyY19pbml0bG93bGV2ZWwoc3RydWN0IG9jdGVvbl9pMmMgKmkyYykKK3sKKwl1OCBzdGF0dXM7CisJaW50IHRyaWVzOworCisJLyogZGlzYWJsZSBoaWdoIGxldmVsIGNvbnRyb2xsZXIsIGVuYWJsZSBidXMgYWNjZXNzICovCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLCBUV1NJX0NUTF9FTkFCKTsKKworCS8qIHJlc2V0IGNvbnRyb2xsZXIgKi8KKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9SU1QsIDApOworCisJZm9yICh0cmllcyA9IDEwOyB0cmllczsgdHJpZXMtLSkgeworCQl1ZGVsYXkoMSk7CisJCXN0YXR1cyA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisJCWlmIChzdGF0dXMgPT0gU1RBVF9JRExFKQorCQkJcmV0dXJuIDA7CisJfQorCWRldl9lcnIoaTJjLT5kZXYsICIlczogVFdTSV9SU1QgZmFpbGVkISAoMHgleClcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvY3Rlb25faTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGlycSwgcmVzdWx0ID0gMDsKKwlzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjOworCXN0cnVjdCBvY3Rlb25faTJjX2RhdGEgKmkyY19kYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzX21lbTsKKworCS8qIEFsbCBhZGFwdG9ycyBoYXZlIGFuIGlycS4gICovCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIGlycTsKKworCWkyYyA9IGt6YWxsb2Moc2l6ZW9mKCppMmMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWkyYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJremFsbG9jIGZhaWxlZFxuIik7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlpMmMtPmRldiA9ICZwZGV2LT5kZXY7CisJaTJjX2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCXJlc19tZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCisJaWYgKHJlc19tZW0gPT0gTlVMTCkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiZm91bmQgbm8gbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmVzdWx0ID0gLUVOWElPOworCQlnb3RvIGZhaWxfcmVnaW9uOworCX0KKworCWlmIChpMmNfZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoaTJjLT5kZXYsICJubyBJMkMgZnJlcXVlbmN5IGRhdGFcbiIpOworCQlyZXN1bHQgPSAtRU5YSU87CisJCWdvdG8gZmFpbF9yZWdpb247CisJfQorCisJaTJjLT50d3NpX3BoeXMgPSByZXNfbWVtLT5zdGFydDsKKwlpMmMtPnJlZ3NpemUgPSByZXNvdXJjZV9zaXplKHJlc19tZW0pOworCWkyYy0+dHdzaV9mcmVxID0gaTJjX2RhdGEtPmkyY19mcmVxOworCWkyYy0+c3lzX2ZyZXEgPSBpMmNfZGF0YS0+c3lzX2ZyZXE7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpMmMtPnR3c2lfcGh5cywgaTJjLT5yZWdzaXplLCByZXNfbWVtLT5uYW1lKSkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbF9yZWdpb247CisJfQorCWkyYy0+dHdzaV9iYXNlID0gaW9yZW1hcChpMmMtPnR3c2lfcGh5cywgaTJjLT5yZWdzaXplKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmkyYy0+cXVldWUpOworCisJaTJjLT5pcnEgPSBpcnE7CisKKwlyZXN1bHQgPSByZXF1ZXN0X2lycShpMmMtPmlycSwgb2N0ZW9uX2kyY19pc3IsIDAsIERSVl9OQU1FLCBpMmMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoaTJjLT5kZXYsICJmYWlsZWQgdG8gYXR0YWNoIGludGVycnVwdFxuIik7CisJCWdvdG8gZmFpbF9pcnE7CisJfQorCisJcmVzdWx0ID0gb2N0ZW9uX2kyY19pbml0bG93bGV2ZWwoaTJjKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoaTJjLT5kZXYsICJpbml0IGxvdyBsZXZlbCBmYWlsZWRcbiIpOworCQlnb3RvICBmYWlsX2FkZDsKKwl9CisKKwlyZXN1bHQgPSBvY3Rlb25faTJjX3NldGNsb2NrKGkyYyk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiY2xvY2sgaW5pdCBmYWlsZWRcbiIpOworCQlnb3RvICBmYWlsX2FkZDsKKwl9CisKKwlpMmMtPmFkYXAgPSBvY3Rlb25faTJjX29wczsKKwlpMmMtPmFkYXAuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJaTJjLT5hZGFwLm5yID0gcGRldi0+aWQgPj0gMCA/IHBkZXYtPmlkIDogMDsKKwlpMmNfc2V0X2FkYXBkYXRhKCZpMmMtPmFkYXAsIGkyYyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaTJjKTsKKworCXJlc3VsdCA9IGkyY19hZGRfbnVtYmVyZWRfYWRhcHRlcigmaTJjLT5hZGFwKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBhZGFwdGVyXG4iKTsKKwkJZ290byBmYWlsX2FkZDsKKwl9CisKKwlkZXZfaW5mbyhpMmMtPmRldiwgInZlcnNpb24gJXNcbiIsIERSVl9WRVJTSU9OKTsKKworCXJldHVybiByZXN1bHQ7CisKK2ZhaWxfYWRkOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWZyZWVfaXJxKGkyYy0+aXJxLCBpMmMpOworZmFpbF9pcnE6CisJaW91bm1hcChpMmMtPnR3c2lfYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGkyYy0+dHdzaV9waHlzLCBpMmMtPnJlZ3NpemUpOworZmFpbF9yZWdpb246CisJa2ZyZWUoaTJjKTsKK291dDoKKwlyZXR1cm4gcmVzdWx0OworfTsKKworc3RhdGljIGludCBfX2RldmV4aXQgb2N0ZW9uX2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpMmNfZGVsX2FkYXB0ZXIoJmkyYy0+YWRhcCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJZnJlZV9pcnEoaTJjLT5pcnEsIGkyYyk7CisJaW91bm1hcChpMmMtPnR3c2lfYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGkyYy0+dHdzaV9waHlzLCBpMmMtPnJlZ3NpemUpOworCWtmcmVlKGkyYyk7CisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvY3Rlb25faTJjX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb2N0ZW9uX2kyY19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG9jdGVvbl9pMmNfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gRFJWX05BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9pMmNfaW5pdCh2b2lkKQoreworCWludCBydjsKKworCXJ2ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvY3Rlb25faTJjX2RyaXZlcik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb2N0ZW9uX2kyY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9jdGVvbl9pMmNfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBMYXduaWNrIDxtaWNoYWVsLmxhd25pY2suZXh0QG5zbi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkkyQy1CdXMgYWRhcHRlciBmb3IgQ2F2aXVtIE9DVEVPTiBwcm9jZXNzb3JzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX05BTUUpOworCittb2R1bGVfaW5pdChvY3Rlb25faTJjX2luaXQpOworbW9kdWxlX2V4aXQob2N0ZW9uX2kyY19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jCmluZGV4IDVkMWMyNjAuLjJiMGJkMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYwpAQCAtMjAsMTUgKzIwLDE1IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLXBueC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9pMmMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2RlZmluZSBJMkNfUE5YX1RJTUVPVVQJCTEwIC8qIG1zZWMgKi8KICNkZWZpbmUgSTJDX1BOWF9TUEVFRF9LSFoJMTAwCiAjZGVmaW5lIEkyQ19QTlhfUkVHSU9OX1NJWkUJMHgxMDAKLSNkZWZpbmUgUE5YX0RFRkFVTFRfRlJFUQkxMyAvKiBNSHogKi8KIAogc3RhdGljIGlubGluZSBpbnQgd2FpdF90aW1lb3V0KGxvbmcgdGltZW91dCwgc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICpkYXRhKQogewpAQCAtNTAsMjIgKzUwLDIxIEBACiAJcmV0dXJuICh0aW1lb3V0IDw9IDApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaTJjX3BueF9hcm1fdGltZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQorc3RhdGljIGlubGluZSB2b2lkIGkyY19wbnhfYXJtX3RpbWVyKHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEpCiB7Ci0Jc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICpkYXRhID0gYWRhcC0+YWxnb19kYXRhOwotCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciA9ICZkYXRhLT5taWYudGltZXI7Ci0JaW50IGV4cGlyZXMgPSBJMkNfUE5YX1RJTUVPVVQgLyAoMTAwMCAvIEhaKTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIgPSAmYWxnX2RhdGEtPm1pZi50aW1lcjsKKwl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPSBtc2Vjc190b19qaWZmaWVzKEkyQ19QTlhfVElNRU9VVCk7CiAKIAlpZiAoZXhwaXJlcyA8PSAxKQogCQlleHBpcmVzID0gMjsKIAogCWRlbF90aW1lcl9zeW5jKHRpbWVyKTsKIAotCWRldl9kYmcoJmFkYXAtPmRldiwgIlRpbWVyIGFybWVkIGF0ICVsdSBwbHVzICV1IGppZmZpZXMuXG4iLAorCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwgIlRpbWVyIGFybWVkIGF0ICVsdSBwbHVzICVsdSBqaWZmaWVzLlxuIiwKIAkJamlmZmllcywgZXhwaXJlcyk7CiAKIAl0aW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyBleHBpcmVzOwotCXRpbWVyLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWRhcDsKKwl0aW1lci0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKSZhbGdfZGF0YTsKIAogCWFkZF90aW1lcih0aW1lcik7CiB9CkBAIC03NywzNCArNzYsMzQgQEAKICAqCiAgKiBHZW5lcmF0ZSBhIFNUQVJUIHNpZ25hbCBpbiB0aGUgZGVzaXJlZCBtb2RlLgogICovCi1zdGF0aWMgaW50IGkyY19wbnhfc3RhcnQodW5zaWduZWQgY2hhciBzbGF2ZV9hZGRyLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCitzdGF0aWMgaW50IGkyY19wbnhfc3RhcnQodW5zaWduZWQgY2hhciBzbGF2ZV9hZGRyLAorCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEpCiB7Ci0Jc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKLQotCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IGFkZHIgMHgleCBtb2RlICVkXG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsICIlcygpOiBhZGRyIDB4JXggbW9kZSAlZFxuIiwgX19mdW5jX18sCiAJCXNsYXZlX2FkZHIsIGFsZ19kYXRhLT5taWYubW9kZSk7CiAKIAkvKiBDaGVjayBmb3IgNyBiaXQgc2xhdmUgYWRkcmVzc2VzIG9ubHkgKi8KIAlpZiAoc2xhdmVfYWRkciAmIH4weDdmKSB7Ci0JCWRldl9lcnIoJmFkYXAtPmRldiwgIiVzOiBJbnZhbGlkIHNsYXZlIGFkZHJlc3MgJXguICIKLQkJICAgICAgICJPbmx5IDctYml0IGFkZHJlc3NlcyBhcmUgc3VwcG9ydGVkXG4iLAotCQkgICAgICAgYWRhcC0+bmFtZSwgc2xhdmVfYWRkcik7CisJCWRldl9lcnIoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJCSIlczogSW52YWxpZCBzbGF2ZSBhZGRyZXNzICV4LiBPbmx5IDctYml0IGFkZHJlc3NlcyBhcmUgc3VwcG9ydGVkXG4iLAorCQkJYWxnX2RhdGEtPmFkYXB0ZXIubmFtZSwgc2xhdmVfYWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIEZpcnN0LCBtYWtlIHN1cmUgYnVzIGlzIGlkbGUgKi8KIAlpZiAod2FpdF90aW1lb3V0KEkyQ19QTlhfVElNRU9VVCwgYWxnX2RhdGEpKSB7CiAJCS8qIFNvbWVib2R5IGVsc2UgaXMgbW9ub3BvbGl6aW5nIHRoZSBidXMgKi8KLQkJZGV2X2VycigmYWRhcC0+ZGV2LCAiJXM6IEJ1cyBidXN5LiBTbGF2ZSBhZGRyID0gJTAyeCwgIgotCQkgICAgICAgImNudHJsID0gJXgsIHN0YXQgPSAleFxuIiwKLQkJICAgICAgIGFkYXAtPm5hbWUsIHNsYXZlX2FkZHIsCi0JCSAgICAgICBpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpLAotCQkgICAgICAgaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSk7CisJCWRldl9lcnIoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJCSIlczogQnVzIGJ1c3kuIFNsYXZlIGFkZHIgPSAlMDJ4LCBjbnRybCA9ICV4LCBzdGF0ID0gJXhcbiIsCisJCQlhbGdfZGF0YS0+YWRhcHRlci5uYW1lLCBzbGF2ZV9hZGRyLAorCQkJaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKSwKKwkJCWlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0gZWxzZSBpZiAoaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSAmIG1zdGF0dXNfYWZpKSB7CiAJCS8qIFNvcnJ5LCB3ZSBsb3N0IHRoZSBidXMgKi8KLQkJZGV2X2VycigmYWRhcC0+ZGV2LCAiJXM6IEFyYml0cmF0aW9uIGZhaWx1cmUuICIKLQkJICAgICAgICJTbGF2ZSBhZGRyID0gJTAyeFxuIiwgYWRhcC0+bmFtZSwgc2xhdmVfYWRkcik7CisJCWRldl9lcnIoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJICAgICAgICAiJXM6IEFyYml0cmF0aW9uIGZhaWx1cmUuIFNsYXZlIGFkZHIgPSAlMDJ4XG4iLAorCQkJYWxnX2RhdGEtPmFkYXB0ZXIubmFtZSwgc2xhdmVfYWRkcik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTE1LDE0ICsxMTQsMTQgQEAKIAlpb3dyaXRlMzIoaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSB8IG1zdGF0dXNfdGRpIHwgbXN0YXR1c19hZmksCiAJCSAgSTJDX1JFR19TVFMoYWxnX2RhdGEpKTsKIAotCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IHNlbmRpbmcgJSN4XG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsICIlcygpOiBzZW5kaW5nICUjeFxuIiwgX19mdW5jX18sCiAJCShzbGF2ZV9hZGRyIDw8IDEpIHwgc3RhcnRfYml0IHwgYWxnX2RhdGEtPm1pZi5tb2RlKTsKIAogCS8qIFdyaXRlIHRoZSBzbGF2ZSBhZGRyZXNzLCBTVEFSVCBiaXQgYW5kIFIvVyBiaXQgKi8KIAlpb3dyaXRlMzIoKHNsYXZlX2FkZHIgPDwgMSkgfCBzdGFydF9iaXQgfCBhbGdfZGF0YS0+bWlmLm1vZGUsCiAJCSAgSTJDX1JFR19UWChhbGdfZGF0YSkpOwogCi0JZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZXhpdFxuIiwgX19mdW5jX18pOworCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwgIiVzKCk6IGV4aXRcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTMzLDEzICsxMzIsMTIgQEAKICAqCiAgKiBHZW5lcmF0ZSBhIFNUT1Agc2lnbmFsIHRvIHRlcm1pbmF0ZSB0aGUgbWFzdGVyIHRyYW5zYWN0aW9uLgogICovCi1zdGF0aWMgdm9pZCBpMmNfcG54X3N0b3Aoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQorc3RhdGljIHZvaWQgaTJjX3BueF9zdG9wKHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEpCiB7Ci0Jc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKIAkvKiBPbmx5IDEgbXNlYyBtYXggdGltZW91dCBkdWUgdG8gaW50ZXJydXB0IGNvbnRleHQgKi8KIAlsb25nIHRpbWVvdXQgPSAxMDAwOwogCi0JZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZW50ZXJpbmc6IHN0YXQgPSAlMDR4LlxuIiwKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsICIlcygpOiBlbnRlcmluZzogc3RhdCA9ICUwNHguXG4iLAogCQlfX2Z1bmNfXywgaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSk7CiAKIAkvKiBXcml0ZSBhIFNUT1AgYml0IHRvIFRYIEZJRk8gKi8KQEAgLTE1Myw3ICsxNTEsNyBAQAogCQl0aW1lb3V0LS07CiAJfQogCi0JZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZXhpdGluZzogc3RhdCA9ICUwNHguXG4iLAorCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwgIiVzKCk6IGV4aXRpbmc6IHN0YXQgPSAlMDR4LlxuIiwKIAkJX19mdW5jX18sIGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpOwogfQogCkBAIC0xNjMsMTIgKzE2MSwxMSBAQAogICoKICAqIFNlbmRzIG9uZSBieXRlIG9mIGRhdGEgdG8gdGhlIHNsYXZlCiAgKi8KLXN0YXRpYyBpbnQgaTJjX3BueF9tYXN0ZXJfeG1pdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCitzdGF0aWMgaW50IGkyY19wbnhfbWFzdGVyX3htaXQoc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSkKIHsKLQlzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhID0gYWRhcC0+YWxnb19kYXRhOwogCXUzMiB2YWw7CiAKLQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBlbnRlcmluZzogc3RhdCA9ICUwNHguXG4iLAorCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwgIiVzKCk6IGVudGVyaW5nOiBzdGF0ID0gJTA0eC5cbiIsCiAJCV9fZnVuY19fLCBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKTsKIAogCWlmIChhbGdfZGF0YS0+bWlmLmxlbiA+IDApIHsKQEAgLTE4NCwxNSArMTgxLDE1IEBACiAJCWFsZ19kYXRhLT5taWYubGVuLS07CiAJCWlvd3JpdGUzMih2YWwsIEkyQ19SRUdfVFgoYWxnX2RhdGEpKTsKIAotCQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiB4bWl0ICUjeCBbJWRdXG4iLCBfX2Z1bmNfXywKLQkJCXZhbCwgYWxnX2RhdGEtPm1pZi5sZW4gKyAxKTsKKwkJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LCAiJXMoKTogeG1pdCAlI3ggWyVkXVxuIiwKKwkJCV9fZnVuY19fLCB2YWwsIGFsZ19kYXRhLT5taWYubGVuICsgMSk7CiAKIAkJaWYgKGFsZ19kYXRhLT5taWYubGVuID09IDApIHsKIAkJCWlmIChhbGdfZGF0YS0+bGFzdCkgewogCQkJCS8qIFdhaXQgdW50aWwgdGhlIFNUT1AgaXMgc2Vlbi4gKi8KIAkJCQlpZiAod2FpdF90aW1lb3V0KEkyQ19QTlhfVElNRU9VVCwgYWxnX2RhdGEpKQotCQkJCQlkZXZfZXJyKCZhZGFwLT5kZXYsICJUaGUgYnVzIGlzIHN0aWxsICIKLQkJCQkJCSJhY3RpdmUgYWZ0ZXIgdGltZW91dFxuIik7CisJCQkJCWRldl9lcnIoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJCQkJCSJUaGUgYnVzIGlzIHN0aWxsIGFjdGl2ZSBhZnRlciB0aW1lb3V0XG4iKTsKIAkJCX0KIAkJCS8qIERpc2FibGUgbWFzdGVyIGludGVycnVwdHMgKi8KIAkJCWlvd3JpdGUzMihpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpICYKQEAgLTIwMSwxNCArMTk4LDE1IEBACiAKIAkJCWRlbF90aW1lcl9zeW5jKCZhbGdfZGF0YS0+bWlmLnRpbWVyKTsKIAotCQkJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogV2FraW5nIHVwIHhmZXIgcm91dGluZS5cbiIsCisJCQlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCQkJIiVzKCk6IFdha2luZyB1cCB4ZmVyIHJvdXRpbmUuXG4iLAogCQkJCV9fZnVuY19fKTsKIAogCQkJY29tcGxldGUoJmFsZ19kYXRhLT5taWYuY29tcGxldGUpOwogCQl9CiAJfSBlbHNlIGlmIChhbGdfZGF0YS0+bWlmLmxlbiA9PSAwKSB7CiAJCS8qIHplcm8tc2l6ZWQgdHJhbnNmZXIgKi8KLQkJaTJjX3BueF9zdG9wKGFkYXApOworCQlpMmNfcG54X3N0b3AoYWxnX2RhdGEpOwogCiAJCS8qIERpc2FibGUgbWFzdGVyIGludGVycnVwdHMuICovCiAJCWlvd3JpdGUzMihpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpICYKQEAgLTIxNywxMyArMjE1LDE0IEBACiAKIAkJLyogU3RvcCB0aW1lci4gKi8KIAkJZGVsX3RpbWVyX3N5bmMoJmFsZ19kYXRhLT5taWYudGltZXIpOwotCQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBXYWtpbmcgdXAgeGZlciByb3V0aW5lIGFmdGVyICIKLQkJCSJ6ZXJvLXhmZXIuXG4iLCBfX2Z1bmNfXyk7CisJCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJCSIlcygpOiBXYWtpbmcgdXAgeGZlciByb3V0aW5lIGFmdGVyIHplcm8teGZlci5cbiIsCisJCQlfX2Z1bmNfXyk7CiAKIAkJY29tcGxldGUoJmFsZ19kYXRhLT5taWYuY29tcGxldGUpOwogCX0KIAotCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IGV4aXRpbmc6IHN0YXQgPSAlMDR4LlxuIiwKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsICIlcygpOiBleGl0aW5nOiBzdGF0ID0gJTA0eC5cbiIsCiAJCV9fZnVuY19fLCBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKTsKIAogCXJldHVybiAwOwpAQCAtMjM1LDIxICsyMzQsMjEgQEAKICAqCiAgKiBSZWFkcyBvbmUgYnl0ZSBkYXRhIGZyb20gdGhlIHNsYXZlCiAgKi8KLXN0YXRpYyBpbnQgaTJjX3BueF9tYXN0ZXJfcmN2KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3N0YXRpYyBpbnQgaTJjX3BueF9tYXN0ZXJfcmN2KHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEpCiB7Ci0Jc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKIAl1bnNpZ25lZCBpbnQgdmFsID0gMDsKIAl1MzIgY3RsID0gMDsKIAotCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IGVudGVyaW5nOiBzdGF0ID0gJTA0eC5cbiIsCisJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LCAiJXMoKTogZW50ZXJpbmc6IHN0YXQgPSAlMDR4LlxuIiwKIAkJX19mdW5jX18sIGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpOwogCiAJLyogQ2hlY2ssIHdoZXRoZXIgdGhlcmUgaXMgYWxyZWFkeSBkYXRhLAogCSAqIG9yIHdlIGRpZG4ndCAnYXNrJyBmb3IgaXQgeWV0LgogCSAqLwogCWlmIChpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpICYgbXN0YXR1c19yZmUpIHsKLQkJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogV3JpdGUgZHVtbXkgZGF0YSB0byBmaWxsICIKLQkJCSJSeC1maWZvLi4uXG4iLCBfX2Z1bmNfXyk7CisJCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJCSIlcygpOiBXcml0ZSBkdW1teSBkYXRhIHRvIGZpbGwgUngtZmlmby4uLlxuIiwKKwkJCV9fZnVuY19fKTsKIAogCQlpZiAoYWxnX2RhdGEtPm1pZi5sZW4gPT0gMSkgewogCQkJLyogTGFzdCBieXRlLCBkbyBub3QgYWNrbm93bGVkZ2UgbmV4dCByY3YuICovCkBAIC0yODEsMTYgKzI4MCwxNiBAQAogCWlmIChhbGdfZGF0YS0+bWlmLmxlbiA+IDApIHsKIAkJdmFsID0gaW9yZWFkMzIoSTJDX1JFR19SWChhbGdfZGF0YSkpOwogCQkqYWxnX2RhdGEtPm1pZi5idWYrKyA9ICh1OCkgKHZhbCAmIDB4ZmYpOwotCQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiByY3YgMHgleCBbJWRdXG4iLCBfX2Z1bmNfXywgdmFsLAotCQkJYWxnX2RhdGEtPm1pZi5sZW4pOworCQlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsICIlcygpOiByY3YgMHgleCBbJWRdXG4iLAorCQkJX19mdW5jX18sIHZhbCwgYWxnX2RhdGEtPm1pZi5sZW4pOwogCiAJCWFsZ19kYXRhLT5taWYubGVuLS07CiAJCWlmIChhbGdfZGF0YS0+bWlmLmxlbiA9PSAwKSB7CiAJCQlpZiAoYWxnX2RhdGEtPmxhc3QpCiAJCQkJLyogV2FpdCB1bnRpbCB0aGUgU1RPUCBpcyBzZWVuLiAqLwogCQkJCWlmICh3YWl0X3RpbWVvdXQoSTJDX1BOWF9USU1FT1VULCBhbGdfZGF0YSkpCi0JCQkJCWRldl9lcnIoJmFkYXAtPmRldiwgIlRoZSBidXMgaXMgc3RpbGwgIgotCQkJCQkJImFjdGl2ZSBhZnRlciB0aW1lb3V0XG4iKTsKKwkJCQkJZGV2X2VycigmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LAorCQkJCQkJIlRoZSBidXMgaXMgc3RpbGwgYWN0aXZlIGFmdGVyIHRpbWVvdXRcbiIpOwogCiAJCQkvKiBEaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHRzICovCiAJCQljdGwgPSBpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpOwpAQCAtMzA0LDcgKzMwMyw3IEBACiAJCX0KIAl9CiAKLQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBleGl0aW5nOiBzdGF0ID0gJTA0eC5cbiIsCisJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LCAiJXMoKTogZXhpdGluZzogc3RhdCA9ICUwNHguXG4iLAogCQlfX2Z1bmNfXywgaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSk7CiAKIAlyZXR1cm4gMDsKQEAgLTMxMiwxMSArMzExLDExIEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpMmNfcG54X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CisJc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGRldl9pZDsKIAl1MzIgc3RhdCwgY3RsOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGRldl9pZDsKLQlzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhID0gYWRhcC0+YWxnb19kYXRhOwogCi0JZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogbXN0YXQgPSAleCBtY3RybCA9ICV4LCBtb2RlID0gJWRcbiIsCisJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LAorCQkiJXMoKTogbXN0YXQgPSAleCBtY3RybCA9ICV4LCBtb2RlID0gJWRcbiIsCiAJCV9fZnVuY19fLAogCQlpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpLAogCQlpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpLApAQCAtMzM5LDEwICszMzgsMTAgQEAKIAkJY29tcGxldGUoJmFsZ19kYXRhLT5taWYuY29tcGxldGUpOwogCX0gZWxzZSBpZiAoc3RhdCAmIG1zdGF0dXNfbmFpKSB7CiAJCS8qIFNsYXZlIGRpZCBub3QgYWNrbm93bGVkZ2UsIGdlbmVyYXRlIGEgU1RPUCAqLwotCQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiAiCi0JCQkiU2xhdmUgZGlkIG5vdCBhY2tub3dsZWRnZSwgZ2VuZXJhdGluZyBhIFNUT1AuXG4iLAorCQlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCQkiJXMoKTogU2xhdmUgZGlkIG5vdCBhY2tub3dsZWRnZSwgZ2VuZXJhdGluZyBhIFNUT1AuXG4iLAogCQkJX19mdW5jX18pOwotCQlpMmNfcG54X3N0b3AoYWRhcCk7CisJCWkyY19wbnhfc3RvcChhbGdfZGF0YSk7CiAKIAkJLyogRGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0cy4gKi8KIAkJY3RsID0gaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKTsKQEAgLTM2OCw5ICszNjcsOSBAQAogCQkgKi8KIAkJaWYgKChzdGF0ICYgbXN0YXR1c19kcm1pKSB8fCAhKHN0YXQgJiBtc3RhdHVzX3JmZSkpIHsKIAkJCWlmIChhbGdfZGF0YS0+bWlmLm1vZGUgPT0gSTJDX1NNQlVTX1dSSVRFKSB7Ci0JCQkJaTJjX3BueF9tYXN0ZXJfeG1pdChhZGFwKTsKKwkJCQlpMmNfcG54X21hc3Rlcl94bWl0KGFsZ19kYXRhKTsKIAkJCX0gZWxzZSBpZiAoYWxnX2RhdGEtPm1pZi5tb2RlID09IEkyQ19TTUJVU19SRUFEKSB7Ci0JCQkJaTJjX3BueF9tYXN0ZXJfcmN2KGFkYXApOworCQkJCWkyY19wbnhfbWFzdGVyX3JjdihhbGdfZGF0YSk7CiAJCQl9CiAJCX0KIAl9CkBAIC0zNzksNyArMzc4LDggQEAKIAlzdGF0ID0gaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKTsKIAlpb3dyaXRlMzIoc3RhdCB8IG1zdGF0dXNfdGRpIHwgbXN0YXR1c19hZmksIEkyQ19SRUdfU1RTKGFsZ19kYXRhKSk7CiAKLQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBleGl0aW5nLCBzdGF0ID0gJXggY3RybCA9ICV4LlxuIiwKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCSIlcygpOiBleGl0aW5nLCBzdGF0ID0gJXggY3RybCA9ICV4LlxuIiwKIAkJIF9fZnVuY19fLCBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpLAogCQkgaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKSk7CiAKQEAgLTM4OCwxNCArMzg4LDEzIEBACiAKIHN0YXRpYyB2b2lkIGkyY19wbnhfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gKHN0cnVjdCBpMmNfYWRhcHRlciAqKWRhdGE7Ci0Jc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKKwlzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhID0gKHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqKWRhdGE7CiAJdTMyIGN0bDsKIAotCWRldl9lcnIoJmFkYXAtPmRldiwgIk1hc3RlciB0aW1lZCBvdXQuIHN0YXQgPSAlMDR4LCBjbnRybCA9ICUwNHguICIKLQkgICAgICAgIlJlc2V0dGluZyBtYXN0ZXIuLi5cbiIsCi0JICAgICAgIGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSksCi0JICAgICAgIGlvcmVhZDMyKEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSkpOworCWRldl9lcnIoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJIk1hc3RlciB0aW1lZCBvdXQuIHN0YXQgPSAlMDR4LCBjbnRybCA9ICUwNHguIFJlc2V0dGluZyBtYXN0ZXIuLi5cbiIsCisJCWlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSksCisJCWlvcmVhZDMyKEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSkpOwogCiAJLyogUmVzZXQgbWFzdGVyIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KIAljdGwgPSBpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpOwpAQCAtNDA5LDE1ICs0MDgsMTQgQEAKIAljb21wbGV0ZSgmYWxnX2RhdGEtPm1pZi5jb21wbGV0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBidXNfcmVzZXRfaWZfYWN0aXZlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBidXNfcmVzZXRfaWZfYWN0aXZlKHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEpCiB7Ci0Jc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKIAl1MzIgc3RhdDsKIAogCWlmICgoc3RhdCA9IGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpICYgbXN0YXR1c19hY3RpdmUpIHsKLQkJZGV2X2VycigmYWRhcC0+ZGV2LAorCQlkZXZfZXJyKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCiAJCQkiJXM6IEJ1cyBpcyBzdGlsbCBhY3RpdmUgYWZ0ZXIgeGZlci4gUmVzZXQgaXQuLi5cbiIsCi0JCSAgICAgICBhZGFwLT5uYW1lKTsKKwkJCWFsZ19kYXRhLT5hZGFwdGVyLm5hbWUpOwogCQlpb3dyaXRlMzIoaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKSB8IG1jbnRybF9yZXNldCwKIAkJCSAgSTJDX1JFR19DVEwoYWxnX2RhdGEpKTsKIAkJd2FpdF9yZXNldChJMkNfUE5YX1RJTUVPVVQsIGFsZ19kYXRhKTsKQEAgLTQ1MSwxMCArNDQ5LDExIEBACiAJc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKIAl1MzIgc3RhdCA9IGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSk7CiAKLQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBlbnRlcmluZzogJWQgbWVzc2FnZXMsIHN0YXQgPSAlMDR4LlxuIiwKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCSIlcygpOiBlbnRlcmluZzogJWQgbWVzc2FnZXMsIHN0YXQgPSAlMDR4LlxuIiwKIAkJX19mdW5jX18sIG51bSwgaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSk7CiAKLQlidXNfcmVzZXRfaWZfYWN0aXZlKGFkYXApOworCWJ1c19yZXNldF9pZl9hY3RpdmUoYWxnX2RhdGEpOwogCiAJLyogUHJvY2VzcyB0cmFuc2FjdGlvbnMgaW4gYSBsb29wLiAqLwogCWZvciAoaSA9IDA7IHJjID49IDAgJiYgaSA8IG51bTsgaSsrKSB7CkBAIC00NjQsOSArNDYzLDkgQEAKIAkJYWRkciA9IHBtc2ctPmFkZHI7CiAKIAkJaWYgKHBtc2ctPmZsYWdzICYgSTJDX01fVEVOKSB7Ci0JCQlkZXZfZXJyKCZhZGFwLT5kZXYsCisJCQlkZXZfZXJyKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCiAJCQkJIiVzOiAxMCBiaXRzIGFkZHIgbm90IHN1cHBvcnRlZCFcbiIsCi0JCQkJYWRhcC0+bmFtZSk7CisJCQkJYWxnX2RhdGEtPmFkYXB0ZXIubmFtZSk7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQpAQCAtNDc4LDExICs0NzcsMTAgQEAKIAkJYWxnX2RhdGEtPm1pZi5yZXQgPSAwOwogCQlhbGdfZGF0YS0+bGFzdCA9IChpID09IG51bSAtIDEpOwogCi0JCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IG1vZGUgJWQsICVkIGJ5dGVzXG4iLCBfX2Z1bmNfXywKLQkJCWFsZ19kYXRhLT5taWYubW9kZSwKLQkJCWFsZ19kYXRhLT5taWYubGVuKTsKKwkJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LCAiJXMoKTogbW9kZSAlZCwgJWQgYnl0ZXNcbiIsCisJCQlfX2Z1bmNfXywgYWxnX2RhdGEtPm1pZi5tb2RlLCBhbGdfZGF0YS0+bWlmLmxlbik7CiAKLQkJaTJjX3BueF9hcm1fdGltZXIoYWRhcCk7CisJCWkyY19wbnhfYXJtX3RpbWVyKGFsZ19kYXRhKTsKIAogCQkvKiBpbml0aWFsaXplIHRoZSBjb21wbGV0aW9uIHZhciAqLwogCQlpbml0X2NvbXBsZXRpb24oJmFsZ19kYXRhLT5taWYuY29tcGxldGUpOwpAQCAtNDkzLDcgKzQ5MSw3IEBACiAJCQkgIEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSk7CiAKIAkJLyogUHV0IHN0YXJ0LWNvZGUgYW5kIHNsYXZlLWFkZHJlc3Mgb24gdGhlIGJ1cy4gKi8KLQkJcmMgPSBpMmNfcG54X3N0YXJ0KGFkZHIsIGFkYXApOworCQlyYyA9IGkyY19wbnhfc3RhcnQoYWRkciwgYWxnX2RhdGEpOwogCQlpZiAocmMgPCAwKQogCQkJYnJlYWs7CiAKQEAgLTUwMiwzMSArNTAwLDMyIEBACiAKIAkJaWYgKCEocmMgPSBhbGdfZGF0YS0+bWlmLnJldCkpCiAJCQljb21wbGV0ZWQrKzsKLQkJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogQ29tcGxldGUsIHJldHVybiBjb2RlID0gJWQuXG4iLAorCQlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCQkiJXMoKTogQ29tcGxldGUsIHJldHVybiBjb2RlID0gJWQuXG4iLAogCQkJX19mdW5jX18sIHJjKTsKIAogCQkvKiBDbGVhciBUREkgYW5kIEFGSSBiaXRzIGluIGNhc2UgdGhleSBhcmUgc2V0LiAqLwogCQlpZiAoKHN0YXQgPSBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKSAmIG1zdGF0dXNfdGRpKSB7Ci0JCQlkZXZfZGJnKCZhZGFwLT5kZXYsCisJCQlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCiAJCQkJIiVzOiBUREkgc3RpbGwgc2V0Li4uIGNsZWFyaW5nIG5vdy5cbiIsCi0JCQkgICAgICAgYWRhcC0+bmFtZSk7CisJCQkJYWxnX2RhdGEtPmFkYXB0ZXIubmFtZSk7CiAJCQlpb3dyaXRlMzIoc3RhdCwgSTJDX1JFR19TVFMoYWxnX2RhdGEpKTsKIAkJfQogCQlpZiAoKHN0YXQgPSBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKSAmIG1zdGF0dXNfYWZpKSB7Ci0JCQlkZXZfZGJnKCZhZGFwLT5kZXYsCisJCQlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCiAJCQkJIiVzOiBBRkkgc3RpbGwgc2V0Li4uIGNsZWFyaW5nIG5vdy5cbiIsCi0JCQkgICAgICAgYWRhcC0+bmFtZSk7CisJCQkJYWxnX2RhdGEtPmFkYXB0ZXIubmFtZSk7CiAJCQlpb3dyaXRlMzIoc3RhdCwgSTJDX1JFR19TVFMoYWxnX2RhdGEpKTsKIAkJfQogCX0KIAotCWJ1c19yZXNldF9pZl9hY3RpdmUoYWRhcCk7CisJYnVzX3Jlc2V0X2lmX2FjdGl2ZShhbGdfZGF0YSk7CiAKIAkvKiBDbGVhbnVwIHRvIGJlIHN1cmUuLi4gKi8KIAlhbGdfZGF0YS0+bWlmLmJ1ZiA9IE5VTEw7CiAJYWxnX2RhdGEtPm1pZi5sZW4gPSAwOwogCi0JZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZXhpdGluZywgc3RhdCA9ICV4XG4iLAorCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwgIiVzKCk6IGV4aXRpbmcsIHN0YXQgPSAleFxuIiwKIAkJX19mdW5jX18sIGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpOwogCiAJaWYgKGNvbXBsZXRlZCAhPSBudW0pCkBAIC01NDUsNjkgKzU0NCw5MiBAQAogCS5mdW5jdGlvbmFsaXR5ID0gaTJjX3BueF9mdW5jLAogfTsKIAorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBpMmNfcG54X2NvbnRyb2xsZXJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJCSAgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgaTJjX3BueF9kYXRhICppMmNfcG54ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JcmV0dXJuIGkyY19wbngtPnN1c3BlbmQocGRldiwgc3RhdGUpOworCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCS8qIEZJWE1FOiBzaG91bGRuJ3QgdGhpcyBiZSBjbGtfZGlzYWJsZT8gKi8KKwljbGtfZW5hYmxlKGFsZ19kYXRhLT5jbGspOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaTJjX3BueF9jb250cm9sbGVyX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBpMmNfcG54X2RhdGEgKmkyY19wbnggPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlyZXR1cm4gaTJjX3BueC0+cmVzdW1lKHBkZXYpOworCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJldHVybiBjbGtfZW5hYmxlKGFsZ19kYXRhLT5jbGspOwogfQorI2Vsc2UKKyNkZWZpbmUgaTJjX3BueF9jb250cm9sbGVyX3N1c3BlbmQJTlVMTAorI2RlZmluZSBpMmNfcG54X2NvbnRyb2xsZXJfcmVzdW1lCU5VTEwKKyNlbmRpZgogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpMmNfcG54X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YTsKLQlpbnQgZnJlcV9taHo7CisJdW5zaWduZWQgbG9uZyBmcmVxOwogCXN0cnVjdCBpMmNfcG54X2RhdGEgKmkyY19wbnggPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCWlmICghaTJjX3BueCB8fCAhaTJjX3BueC0+YWRhcHRlcikgeworCWlmICghaTJjX3BueCB8fCAhaTJjX3BueC0+bmFtZSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogbm8gcGxhdGZvcm0gZGF0YSBzdXBwbGllZFxuIiwKIAkJICAgICAgIF9fZnVuY19fKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaTJjX3BueCk7Ci0KLQlpZiAoaTJjX3BueC0+Y2FsY3VsYXRlX2lucHV0X2ZyZXEpCi0JCWZyZXFfbWh6ID0gaTJjX3BueC0+Y2FsY3VsYXRlX2lucHV0X2ZyZXEocGRldik7Ci0JZWxzZSB7Ci0JCWZyZXFfbWh6ID0gUE5YX0RFRkFVTFRfRlJFUTsKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlNldHRpbmcgYnVzIGZyZXF1ZW5jeSB0byBkZWZhdWx0IHZhbHVlOiAiCi0JCSAgICAgICAiJWQgTUh6XG4iLCBmcmVxX21oeik7CisJYWxnX2RhdGEgPSBremFsbG9jKHNpemVvZigqYWxnX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFsZ19kYXRhKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2t6YWxsb2M7CiAJfQogCi0JaTJjX3BueC0+YWRhcHRlci0+YWxnbyA9ICZwbnhfYWxnb3JpdGhtOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGFsZ19kYXRhKTsKIAotCWFsZ19kYXRhID0gaTJjX3BueC0+YWRhcHRlci0+YWxnb19kYXRhOwotCWluaXRfdGltZXIoJmFsZ19kYXRhLT5taWYudGltZXIpOwotCWFsZ19kYXRhLT5taWYudGltZXIuZnVuY3Rpb24gPSBpMmNfcG54X3RpbWVvdXQ7Ci0JYWxnX2RhdGEtPm1pZi50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaTJjX3BueC0+YWRhcHRlcjsKKwlzdHJsY3B5KGFsZ19kYXRhLT5hZGFwdGVyLm5hbWUsIGkyY19wbngtPm5hbWUsCisJCXNpemVvZihhbGdfZGF0YS0+YWRhcHRlci5uYW1lKSk7CisJYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJYWxnX2RhdGEtPmFkYXB0ZXIuYWxnbyA9ICZwbnhfYWxnb3JpdGhtOworCWFsZ19kYXRhLT5hZGFwdGVyLmFsZ29fZGF0YSA9IGFsZ19kYXRhOworCWFsZ19kYXRhLT5hZGFwdGVyLm5yID0gcGRldi0+aWQ7CisJYWxnX2RhdGEtPmkyY19wbnggPSBpMmNfcG54OwogCi0JLyogUmVnaXN0ZXIgSS9PIHJlc291cmNlICovCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oYWxnX2RhdGEtPmJhc2UsIEkyQ19QTlhfUkVHSU9OX1NJWkUsCi0JCQkJcGRldi0+bmFtZSkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkgICAgICAgIkkvTyByZWdpb24gMHglMDh4IGZvciBJMkMgYWxyZWFkeSBpbiB1c2UuXG4iLAotCQkgICAgICAgYWxnX2RhdGEtPmJhc2UpOwotCQlyZXQgPSAtRU5PREVWOworCWFsZ19kYXRhLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoYWxnX2RhdGEtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihhbGdfZGF0YS0+Y2xrKTsKIAkJZ290byBvdXRfZHJ2ZGF0YTsKIAl9CiAKLQlpZiAoIShhbGdfZGF0YS0+aW9hZGRyID0KLQkJCSh1MzIpaW9yZW1hcChhbGdfZGF0YS0+YmFzZSwgSTJDX1BOWF9SRUdJT05fU0laRSkpKSB7CisJaW5pdF90aW1lcigmYWxnX2RhdGEtPm1pZi50aW1lcik7CisJYWxnX2RhdGEtPm1pZi50aW1lci5mdW5jdGlvbiA9IGkyY19wbnhfdGltZW91dDsKKwlhbGdfZGF0YS0+bWlmLnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylhbGdfZGF0YTsKKworCS8qIFJlZ2lzdGVyIEkvTyByZXNvdXJjZSAqLworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGkyY19wbngtPmJhc2UsIEkyQ19QTlhfUkVHSU9OX1NJWkUsCisJCQkJcGRldi0+bmFtZSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkgICAgICAgIkkvTyByZWdpb24gMHglMDh4IGZvciBJMkMgYWxyZWFkeSBpbiB1c2UuXG4iLAorCQkgICAgICAgaTJjX3BueC0+YmFzZSk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2Nsa2dldDsKKwl9CisKKwlhbGdfZGF0YS0+aW9hZGRyID0gaW9yZW1hcChpMmNfcG54LT5iYXNlLCBJMkNfUE5YX1JFR0lPTl9TSVpFKTsKKwlpZiAoIWFsZ19kYXRhLT5pb2FkZHIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGRuJ3QgaW9yZW1hcCBJMkMgSS9PIHJlZ2lvblxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3JlbGVhc2U7CiAJfQogCi0JaTJjX3BueC0+c2V0X2Nsb2NrX3J1bihwZGV2KTsKKwlyZXQgPSBjbGtfZW5hYmxlKGFsZ19kYXRhLT5jbGspOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubWFwOworCisJZnJlcSA9IGNsa19nZXRfcmF0ZShhbGdfZGF0YS0+Y2xrKTsKIAogCS8qCiAJICogQ2xvY2sgRGl2aXNvciBIaWdoIFRoaXMgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBzeXN0ZW0gY2xvY2tzCkBAIC02MjAsNDUgKzY0Miw0NyBAQAogCSAqIHRoZSBkZWdsaXRjaGluZyBmaWx0ZXIgbGVuZ3RoLgogCSAqLwogCi0JdG1wID0gKChmcmVxX21oeiAqIDEwMDApIC8gSTJDX1BOWF9TUEVFRF9LSFopIC8gMiAtIDI7CisJdG1wID0gKChmcmVxIC8gMTAwMCkgLyBJMkNfUE5YX1NQRUVEX0tIWikgLyAyIC0gMjsKIAlpb3dyaXRlMzIodG1wLCBJMkNfUkVHX0NLSChhbGdfZGF0YSkpOwogCWlvd3JpdGUzMih0bXAsIEkyQ19SRUdfQ0tMKGFsZ19kYXRhKSk7CiAKIAlpb3dyaXRlMzIobWNudHJsX3Jlc2V0LCBJMkNfUkVHX0NUTChhbGdfZGF0YSkpOwogCWlmICh3YWl0X3Jlc2V0KEkyQ19QTlhfVElNRU9VVCwgYWxnX2RhdGEpKSB7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X3VubWFwOworCQlnb3RvIG91dF9jbG9jazsKIAl9CiAJaW5pdF9jb21wbGV0aW9uKCZhbGdfZGF0YS0+bWlmLmNvbXBsZXRlKTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGFsZ19kYXRhLT5pcnEsIGkyY19wbnhfaW50ZXJydXB0LAotCQkJMCwgcGRldi0+bmFtZSwgaTJjX3BueC0+YWRhcHRlcik7CisJcmV0ID0gcmVxdWVzdF9pcnEoaTJjX3BueC0+aXJxLCBpMmNfcG54X2ludGVycnVwdCwKKwkJCTAsIHBkZXYtPm5hbWUsIGFsZ19kYXRhKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9jbG9jazsKIAogCS8qIFJlZ2lzdGVyIHRoaXMgYWRhcHRlciB3aXRoIHRoZSBJMkMgc3Vic3lzdGVtICovCi0JaTJjX3BueC0+YWRhcHRlci0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7Ci0JaTJjX3BueC0+YWRhcHRlci0+bnIgPSBwZGV2LT5pZDsKLQlyZXQgPSBpMmNfYWRkX251bWJlcmVkX2FkYXB0ZXIoaTJjX3BueC0+YWRhcHRlcik7CisJcmV0ID0gaTJjX2FkZF9udW1iZXJlZF9hZGFwdGVyKCZhbGdfZGF0YS0+YWRhcHRlcik7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiSTJDOiBGYWlsZWQgdG8gYWRkIGJ1c1xuIik7CiAJCWdvdG8gb3V0X2lycTsKIAl9CiAKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICIlczogTWFzdGVyIGF0ICUjOHgsIGlycSAlZC5cbiIsCi0JICAgICAgIGkyY19wbngtPmFkYXB0ZXItPm5hbWUsIGFsZ19kYXRhLT5iYXNlLCBhbGdfZGF0YS0+aXJxKTsKKwkgICAgICAgYWxnX2RhdGEtPmFkYXB0ZXIubmFtZSwgaTJjX3BueC0+YmFzZSwgaTJjX3BueC0+aXJxKTsKIAogCXJldHVybiAwOwogCiBvdXRfaXJxOgotCWZyZWVfaXJxKGFsZ19kYXRhLT5pcnEsIGkyY19wbngtPmFkYXB0ZXIpOworCWZyZWVfaXJxKGkyY19wbngtPmlycSwgYWxnX2RhdGEpOwogb3V0X2Nsb2NrOgotCWkyY19wbngtPnNldF9jbG9ja19zdG9wKHBkZXYpOworCWNsa19kaXNhYmxlKGFsZ19kYXRhLT5jbGspOwogb3V0X3VubWFwOgotCWlvdW5tYXAoKHZvaWQgKilhbGdfZGF0YS0+aW9hZGRyKTsKKwlpb3VubWFwKGFsZ19kYXRhLT5pb2FkZHIpOwogb3V0X3JlbGVhc2U6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGFsZ19kYXRhLT5iYXNlLCBJMkNfUE5YX1JFR0lPTl9TSVpFKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaTJjX3BueC0+YmFzZSwgSTJDX1BOWF9SRUdJT05fU0laRSk7CitvdXRfY2xrZ2V0OgorCWNsa19wdXQoYWxnX2RhdGEtPmNsayk7CiBvdXRfZHJ2ZGF0YToKKwlrZnJlZShhbGdfZGF0YSk7CitlcnJfa3phbGxvYzoKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtNjY2LDE1ICs2OTAsMTYgQEAKIAogc3RhdGljIGludCBfX2RldmV4aXQgaTJjX3BueF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgaTJjX3BueF9kYXRhICppMmNfcG54ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gaTJjX3BueC0+YWRhcHRlcjsKLQlzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhID0gYWRhcC0+YWxnb19kYXRhOworCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaTJjX3BueF9kYXRhICppMmNfcG54ID0gYWxnX2RhdGEtPmkyY19wbng7CiAKLQlmcmVlX2lycShhbGdfZGF0YS0+aXJxLCBpMmNfcG54LT5hZGFwdGVyKTsKLQlpMmNfZGVsX2FkYXB0ZXIoYWRhcCk7Ci0JaTJjX3BueC0+c2V0X2Nsb2NrX3N0b3AocGRldik7Ci0JaW91bm1hcCgodm9pZCAqKWFsZ19kYXRhLT5pb2FkZHIpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihhbGdfZGF0YS0+YmFzZSwgSTJDX1BOWF9SRUdJT05fU0laRSk7CisJZnJlZV9pcnEoaTJjX3BueC0+aXJxLCBhbGdfZGF0YSk7CisJaTJjX2RlbF9hZGFwdGVyKCZhbGdfZGF0YS0+YWRhcHRlcik7CisJY2xrX2Rpc2FibGUoYWxnX2RhdGEtPmNsayk7CisJaW91bm1hcChhbGdfZGF0YS0+aW9hZGRyKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaTJjX3BueC0+YmFzZSwgSTJDX1BOWF9SRUdJT05fU0laRSk7CisJY2xrX3B1dChhbGdfZGF0YS0+Y2xrKTsKKwlrZnJlZShhbGdfZGF0YSk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGlueS11c2IuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGlueS11c2IuYwppbmRleCBiMWMwNTBmLi5lMjliNmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXRpbnktdXNiLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy10aW55LXVzYi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBpbmNsdWRlIGludGVyZmFjZXMgdG8gdXNiIGxheWVyICovCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CkBAIC0zMSw4ICszMiw4IEBACiAjZGVmaW5lIENNRF9JMkNfSU9fRU5ECQkoMTw8MSkKIAogLyogaTJjIGJpdCBkZWxheSwgZGVmYXVsdCBpcyAxMHVzIC0+IDEwMGtIeiAqLwotc3RhdGljIGludCBkZWxheSA9IDEwOwotbW9kdWxlX3BhcmFtKGRlbGF5LCBpbnQsIDApOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlbGF5ID0gMTA7Cittb2R1bGVfcGFyYW0oZGVsYXksIHVzaG9ydCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlbGF5LCAiYml0IGRlbGF5IGluIG1pY3Jvc2Vjb25kcywgIgogCQkgImUuZy4gMTAgZm9yIDEwMGtIeiAoZGVmYXVsdCBpcyAxMDBrSHopIik7CiAKQEAgLTEwOSw3ICsxMTAsNyBAQAogCiBzdGF0aWMgdTMyIHVzYl9mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1MzIgZnVuYzsKKwlfX2xlMzIgZnVuYzsKIAogCS8qIGdldCBmdW5jdGlvbmFsaXR5IGZyb20gYWRhcHRlciAqLwogCWlmICh1c2JfcmVhZChhZGFwdGVyLCBDTURfR0VUX0ZVTkMsIDAsIDAsICZmdW5jLCBzaXplb2YoZnVuYykpICE9CkBAIC0xMTgsNyArMTE5LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIGZ1bmM7CisJcmV0dXJuIGxlMzJfdG9fY3B1KGZ1bmMpOwogfQogCiAvKiBUaGlzIGlzIHRoZSBhY3R1YWwgYWxnb3JpdGhtIHdlIGRlZmluZSAqLwpAQCAtMjE2LDggKzIxNyw3IEBACiAJCSAiaTJjLXRpbnktdXNiIGF0IGJ1cyAlMDNkIGRldmljZSAlMDNkIiwKIAkJIGRldi0+dXNiX2Rldi0+YnVzLT5idXNudW0sIGRldi0+dXNiX2Rldi0+ZGV2bnVtKTsKIAotCWlmICh1c2Jfd3JpdGUoJmRldi0+YWRhcHRlciwgQ01EX1NFVF9ERUxBWSwKLQkJICAgICAgY3B1X3RvX2xlMTYoZGVsYXkpLCAwLCBOVUxMLCAwKSAhPSAwKSB7CisJaWYgKHVzYl93cml0ZSgmZGV2LT5hZGFwdGVyLCBDTURfU0VUX0RFTEFZLCBkZWxheSwgMCwgTlVMTCwgMCkgIT0gMCkgewogCQlkZXZfZXJyKCZkZXYtPmFkYXB0ZXIuZGV2LAogCQkJImZhaWx1cmUgc2V0dGluZyBkZWxheSB0byAlZHVzXG4iLCBkZWxheSk7CiAJCXJldHZhbCA9IC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMgYi9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKaW5kZXggODdjZWYwYy4uMzQ5YTY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYwpAQCAtNTYsOCArNTYsOCBAQAogCWNoYW5fdGFiX3QgKmN0cDsKIAlhdTF4X2RkbWFfZGVzY190ICpkcDsKIAotCWlmKCFwdXRfZGVzdF9mbGFncyhhaHdpZi0+cnhfY2hhbiwgKHZvaWQqKWFkZHIsIGNvdW50IDw8IDEsIAotCQkJICAgRERNQV9GTEFHU19OT0lFKSkgeworCWlmICghYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGFod2lmLT5yeF9jaGFuLCB2aXJ0X3RvX3BoeXMoYWRkciksCisJCQkJICAgY291bnQgPDwgMSwgRERNQV9GTEFHU19OT0lFKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzIGZhaWxlZCAlZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAkJcmV0dXJuOwogCX0KQEAgLTc0LDggKzc0LDggQEAKIAljaGFuX3RhYl90ICpjdHA7CiAJYXUxeF9kZG1hX2Rlc2NfdCAqZHA7CiAKLQlpZighcHV0X3NvdXJjZV9mbGFncyhhaHdpZi0+dHhfY2hhbiwgKHZvaWQqKWFkZHIsCi0JCQkgICAgIGNvdW50IDw8IDEsIERETUFfRkxBR1NfTk9JRSkpIHsKKwlpZiAoIWF1MXh4eF9kYmRtYV9wdXRfc291cmNlKGFod2lmLT50eF9jaGFuLCB2aXJ0X3RvX3BoeXMoYWRkciksCisJCQkJICAgICBjb3VudCA8PCAxLCBERE1BX0ZMQUdTX05PSUUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCQlyZXR1cm47CiAJfQpAQCAtMjQ2LDE3ICsyNDYsMTQgQEAKIAkJCQlmbGFncyA9IERETUFfRkxBR1NfTk9JRTsKIAogCQkJaWYgKGlzd3JpdGUpIHsKLQkJCQlpZighcHV0X3NvdXJjZV9mbGFncyhhaHdpZi0+dHhfY2hhbiwgCi0JCQkJCQkgICAgICh2b2lkKikgc2dfdmlydChzZyksCi0JCQkJCQkgICAgIHRjLCBmbGFncykpIHsgCisJCQkJaWYgKCFhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShhaHdpZi0+dHhfY2hhbiwKKwkJCQkJc2dfcGh5cyhzZyksIHRjLCBmbGFncykpIHsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgJWRcbiIsIAogCQkJCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsKIAkJCQl9Ci0JCQl9IGVsc2UgCi0JCQl7Ci0JCQkJaWYoIXB1dF9kZXN0X2ZsYWdzKGFod2lmLT5yeF9jaGFuLCAKLQkJCQkJCSAgICh2b2lkKikgc2dfdmlydChzZyksCi0JCQkJCQkgICB0YywgZmxhZ3MpKSB7IAorCQkJfSBlbHNlICB7CisJCQkJaWYgKCFhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoYWh3aWYtPnJ4X2NoYW4sCisJCQkJCXNnX3BoeXMoc2cpLCB0YywgZmxhZ3MpKSB7CiAJCQkJCXByaW50ayhLRVJOX0VSUiAiJXMgZmFpbGVkICVkXG4iLCAKIAkJCQkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWFjcGkuYyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKaW5kZXggYzBjZjQ1YS4uNWNiMDFlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWFjcGkuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCkBAIC0xMDgsMTEgKzEwOCwxMSBAQAogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGVycm9yLgogICovCiBzdGF0aWMgaW50IGlkZV9nZXRfZGV2X2hhbmRsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGFjcGlfaGFuZGxlICpoYW5kbGUsCi0JCQkgICAgICAgYWNwaV9pbnRlZ2VyICpwY2lkZXZmbikKKwkJCSAgICAgICB1NjQgKnBjaWRldmZuKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXVuc2lnbmVkIGludCBidXMsIGRldm51bSwgZnVuYzsKLQlhY3BpX2ludGVnZXIgYWRkcjsKKwl1NjQgYWRkcjsKIAlhY3BpX2hhbmRsZSBkZXZfaGFuZGxlOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbwkqZGluZm8gPSBOVUxMOwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJZGV2bnVtID0gUENJX1NMT1QocGRldi0+ZGV2Zm4pOwogCWZ1bmMgPSBQQ0lfRlVOQyhwZGV2LT5kZXZmbik7CiAJLyogQUNQSSBfQURSIGVuY29kaW5nIGZvciBQQ0kgYnVzOiAqLwotCWFkZHIgPSAoYWNwaV9pbnRlZ2VyKShkZXZudW0gPDwgMTYgfCBmdW5jKTsKKwlhZGRyID0gKHU2NCkoZGV2bnVtIDw8IDE2IHwgZnVuYyk7CiAKIAlERUJQUklOVCgiRU5URVI6IHBjaSAlMDJ4OiUwMnguJTAxeFxuIiwgYnVzLCBkZXZudW0sIGZ1bmMpOwogCkBAIC0xNjksNyArMTY5LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2ID0gaHdpZi0+Z2VuZGV2LnBhcmVudDsKIAlhY3BpX2hhbmRsZQkJdW5pbml0aWFsaXplZF92YXIoZGV2X2hhbmRsZSk7Ci0JYWNwaV9pbnRlZ2VyCQlwY2lkZXZmbjsKKwl1NjQJCQlwY2lkZXZmbjsKIAlhY3BpX2hhbmRsZQkJY2hhbl9oYW5kbGU7CiAJaW50CQkJZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwppbmRleCA3Zjg3ODAxLi4zYjEyOGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKQEAgLTY3OSw3ICs2NzksNyBAQAogCQlpZiAobWF4X3MgPiBod2lmLT5ycXNpemUpCiAJCQltYXhfcyA9IGh3aWYtPnJxc2l6ZTsKIAotCQlibGtfcXVldWVfbWF4X3NlY3RvcnMocSwgbWF4X3MpOworCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocSwgbWF4X3MpOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBtYXggcmVxdWVzdCBzaXplOiAlZEtpQlxuIiwgZHJpdmUtPm5hbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKaW5kZXggZmVmYmRmYy4uZWZkOTA3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwpAQCAtNDg2LDcgKzQ4Niw3IEBACiAJCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfWklQX0RSSVZFOwogCQkvKiBUaGlzIHZhbHVlIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgL3Byb2MvaWRlL2hkeC9zZXR0aW5ncyAqLwogCQlkcml2ZS0+cGNfZGVsYXkgPSBJREVGTE9QUFlfUENfREVMQVk7Ci0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhkcml2ZS0+cXVldWUsIDY0KTsKKwkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKGRyaXZlLT5xdWV1ZSwgNjQpOwogCX0KIAogCS8qCkBAIC00OTQsNyArNDk0LDcgQEAKIAkgKiBuYXN0eSBjbGlja2luZyBub2lzZXMgd2l0aG91dCBpdCwgc28gcGxlYXNlIGRvbid0IHJlbW92ZSB0aGlzLgogCSAqLwogCWlmIChzdHJuY21wKChjaGFyICopJmlkW0FUQV9JRF9QUk9EXSwgIklPTUVHQSBDbGlrISIsIDExKSA9PSAwKSB7Ci0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhkcml2ZS0+cXVldWUsIDY0KTsKKwkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKGRyaXZlLT5xdWV1ZSwgNjQpOwogCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX0NMSUtfRFJJVkU7CiAJCS8qIElPTUVHQSBDbGlrISBkcml2ZXMgZG8gbm90IHN1cHBvcnQgbG9jay91bmxvY2sgY29tbWFuZHMgKi8KIAkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RPT1JMT0NLSU5HOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwppbmRleCA0ZDc2YmE0Li5mOGMxYWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwpAQCAtNzc0LDcgKzc3NCw3IEBACiAKIAlpZiAoaHdpZi0+cnFzaXplIDwgbWF4X3NlY3RvcnMpCiAJCW1heF9zZWN0b3JzID0gaHdpZi0+cnFzaXplOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCBtYXhfc2VjdG9ycyk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHEsIG1heF9zZWN0b3JzKTsKIAogI2lmZGVmIENPTkZJR19QQ0kKIAkvKiBXaGVuIHdlIGhhdmUgYW4gSU9NTVUsIHdlIG1heSBoYXZlIGEgcHJvYmxlbSB3aGVyZSBwY2lfbWFwX3NnKCkKQEAgLTc5MCw4ICs3OTAsNyBAQAogCQltYXhfc2dfZW50cmllcyA+Pj0gMTsKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIG1heF9zZ19lbnRyaWVzKTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSwgbWF4X3NnX2VudHJpZXMpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocSwgbWF4X3NnX2VudHJpZXMpOwogCiAJLyogYXNzaWduIGRyaXZlIHF1ZXVlICovCiAJZHJpdmUtPnF1ZXVlID0gcTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKaW5kZXggZjE5OTg5Ni4uYzg4Njk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKQEAgLTIwMjAsNyArMjAyMCw3IEBACiAJaWYgKGx1LT53b3JrYXJvdW5kcyAmIFNCUDJfV09SS0FST1VORF9QT1dFUl9DT05ESVRJT04pCiAJCXNkZXYtPnN0YXJ0X3N0b3BfcHdyX2NvbmQgPSAxOwogCWlmIChsdS0+d29ya2Fyb3VuZHMgJiBTQlAyX1dPUktBUk9VTkRfMTI4S19NQVhfVFJBTlMpCi0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAxMjggKiAxMDI0IC8gNTEyKTsKKwkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDEyOCAqIDEwMjQgLyA1MTIpOwogCiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgU0JQMl9NQVhfU0VHX1NJWkUpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYwppbmRleCBjYzliNTk0Li44NzVlMzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYwpAQCAtMjExNSw5ICsyMTE1LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycjE7CiAKLQlpZiAoY21hX2xvb3BiYWNrX2FkZHIoYWRkcikpIHsKLQkJcmV0ID0gY21hX2JpbmRfbG9vcGJhY2soaWRfcHJpdik7Ci0JfSBlbHNlIGlmICghY21hX3plcm9fYWRkcihhZGRyKSkgeworCWlmICghY21hX2FueV9hZGRyKGFkZHIpKSB7CiAJCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKGFkZHIsICZpZC0+cm91dGUuYWRkci5kZXZfYWRkcik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKaW5kZXggMjU4YzYzOS4uOWY5ODE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9ldmRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwpAQCAtMjc4LDYgKzI3OCw4IEBACiAJCWdvdG8gZXJyX2ZyZWVfY2xpZW50OwogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2xpZW50OworCW5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworCiAJcmV0dXJuIDA7CiAKICBlcnJfZnJlZV9jbGllbnQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2VtdTEwazEtZ3AuYyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZW11MTBrMS1ncC5jCmluZGV4IGIwNDkzMGYuLjczOTI5OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZW11MTBrMS1ncC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZW11MTBrMS1ncC5jCkBAIC00Niw3ICs0Niw3IEBACiAJaW50IHNpemU7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZW11X3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGVtdV90YmxbXSA9IHsKIAogCXsgMHgxMTAyLCAweDcwMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwgLyogU0IgTGl2ZSBnYW1lcG9ydCAqLwogCXsgMHgxMTAyLCAweDcwMDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwgLyogQXVkaWd5IGdhbWVwb3J0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2ZtODAxLWdwLmMgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2ZtODAxLWdwLmMKaW5kZXggOGExODEwZi4uMTRkM2YzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9mbTgwMS1ncC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZm04MDEtZ3AuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZm04MDFfZ3BfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBmbTgwMV9ncF9pZF90YWJsZVtdID0gewogCXsgUENJX1ZFTkRPUl9JRF9GT1JURU1FRElBLCBQQ0lfREVWSUNFX0lEX0ZNODAxX0dQLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwICB9LAogCXsgMCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCmluZGV4IGFjMTFiZTAuLjdlMThiY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYworKysgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKQEAgLTExLDYgKzExLDggQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CkBAIC0xOTAsOSArMTkyLDggQEAKIAogCWVycm9yID0gZGV2aWNlX2JpbmRfZHJpdmVyKCZnYW1lcG9ydC0+ZGV2KTsKIAlpZiAoZXJyb3IpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImdhbWVwb3J0OiBkZXZpY2VfYmluZF9kcml2ZXIoKSBmYWlsZWQgIgotCQkJImZvciAlcyAoJXMpIGFuZCAlcywgZXJyb3I6ICVkXG4iLAorCQlkZXZfd2FybigmZ2FtZXBvcnQtPmRldiwKKwkJCSAiZGV2aWNlX2JpbmRfZHJpdmVyKCkgZmFpbGVkIGZvciAlcyAoJXMpIGFuZCAlcywgZXJyb3I6ICVkXG4iLAogCQkJZ2FtZXBvcnQtPnBoeXMsIGdhbWVwb3J0LT5uYW1lLAogCQkJZHJ2LT5kZXNjcmlwdGlvbiwgZXJyb3IpOwogCQlkcnYtPmRpc2Nvbm5lY3QoZ2FtZXBvcnQpOwpAQCAtMjA5LDkgKzIxMCw5IEBACiAKIAllcnJvciA9IGRldmljZV9hdHRhY2goJmdhbWVwb3J0LT5kZXYpOwogCWlmIChlcnJvciA8IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJnYW1lcG9ydDogZGV2aWNlX2F0dGFjaCgpIGZhaWxlZCBmb3IgJXMgKCVzKSwgZXJyb3I6ICVkXG4iLAotCQkJZ2FtZXBvcnQtPnBoeXMsIGdhbWVwb3J0LT5uYW1lLCBlcnJvcik7CisJCWRldl93YXJuKCZnYW1lcG9ydC0+ZGV2LAorCQkJICJkZXZpY2VfYXR0YWNoKCkgZmFpbGVkIGZvciAlcyAoJXMpLCBlcnJvcjogJWRcbiIsCisJCQkgZ2FtZXBvcnQtPnBoeXMsIGdhbWVwb3J0LT5uYW1lLCBlcnJvcik7CiB9CiAKIApAQCAtMjYyLDE3ICsyNjMsMTQgQEAKIAogCWV2ZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGdhbWVwb3J0X2V2ZW50KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFldmVudCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJnYW1lcG9ydDogTm90IGVub3VnaCBtZW1vcnkgdG8gcXVldWUgZXZlbnQgJWRcbiIsCi0JCQlldmVudF90eXBlKTsKKwkJcHJfZXJyKCJOb3QgZW5vdWdoIG1lbW9yeSB0byBxdWV1ZSBldmVudCAlZFxuIiwgZXZlbnRfdHlwZSk7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJnYW1lcG9ydDogQ2FuJ3QgZ2V0IG1vZHVsZSByZWZlcmVuY2UsIGRyb3BwaW5nIGV2ZW50ICVkXG4iLAotCQkJZXZlbnRfdHlwZSk7CisJCXByX3dhcm5pbmcoIkNhbid0IGdldCBtb2R1bGUgcmVmZXJlbmNlLCBkcm9wcGluZyBldmVudCAlZFxuIiwKKwkJCSAgIGV2ZW50X3R5cGUpOwogCQlrZnJlZShldmVudCk7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpAQCAtMjk4LDE0ICsyOTYsMTIgQEAKIAogc3RhdGljIHZvaWQgZ2FtZXBvcnRfcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHMoc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpldmVudCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKLQlzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQgKmU7CisJc3RydWN0IGdhbWVwb3J0X2V2ZW50ICplLCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdhbWVwb3J0X2V2ZW50X2xvY2ssIGZsYWdzKTsKIAotCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmZ2FtZXBvcnRfZXZlbnRfbGlzdCkgewotCQllID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQsIG5vZGUpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBuZXh0LCAmZ2FtZXBvcnRfZXZlbnRfbGlzdCwgbm9kZSkgewogCQlpZiAoZXZlbnQtPm9iamVjdCA9PSBlLT5vYmplY3QpIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGlzIGV2ZW50IGlzIG9mIGRpZmZlcmVudCB0eXBlIHdlIHNob3VsZCBub3QKQEAgLTMxNSw3ICszMTEsNyBAQAogCQkJaWYgKGV2ZW50LT50eXBlICE9IGUtPnR5cGUpCiAJCQkJYnJlYWs7CiAKLQkJCWxpc3RfZGVsX2luaXQobm9kZSk7CisJCQlsaXN0X2RlbF9pbml0KCZlLT5ub2RlKTsKIAkJCWdhbWVwb3J0X2ZyZWVfZXZlbnQoZSk7CiAJCX0KIAl9CkBAIC0zMjUsMjMgKzMyMSwxOCBAQAogCiBzdGF0aWMgc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpnYW1lcG9ydF9nZXRfZXZlbnQodm9pZCkKIHsKLQlzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQgKmV2ZW50OwotCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGU7CisJc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpldmVudCA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZnYW1lcG9ydF9ldmVudF9sb2NrLCBmbGFncyk7CiAKLQlpZiAobGlzdF9lbXB0eSgmZ2FtZXBvcnRfZXZlbnRfbGlzdCkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FtZXBvcnRfZXZlbnRfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWxpc3RfZW1wdHkoJmdhbWVwb3J0X2V2ZW50X2xpc3QpKSB7CisJCWV2ZW50ID0gbGlzdF9maXJzdF9lbnRyeSgmZ2FtZXBvcnRfZXZlbnRfbGlzdCwKKwkJCQkJIHN0cnVjdCBnYW1lcG9ydF9ldmVudCwgbm9kZSk7CisJCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5ub2RlKTsKIAl9CiAKLQlub2RlID0gZ2FtZXBvcnRfZXZlbnRfbGlzdC5uZXh0OwotCWV2ZW50ID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQsIG5vZGUpOwotCWxpc3RfZGVsX2luaXQobm9kZSk7Ci0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYW1lcG9ydF9ldmVudF9sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gZXZlbnQ7CiB9CiAKQEAgLTM2MCwxNiArMzUxLDE0IEBACiAJaWYgKChldmVudCA9IGdhbWVwb3J0X2dldF9ldmVudCgpKSkgewogCiAJCXN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKLQkJCWNhc2UgR0FNRVBPUlRfUkVHSVNURVJfUE9SVDoKLQkJCQlnYW1lcG9ydF9hZGRfcG9ydChldmVudC0+b2JqZWN0KTsKLQkJCQlicmVhazsKIAotCQkJY2FzZSBHQU1FUE9SVF9BVFRBQ0hfRFJJVkVSOgotCQkJCWdhbWVwb3J0X2F0dGFjaF9kcml2ZXIoZXZlbnQtPm9iamVjdCk7Ci0JCQkJYnJlYWs7CisJCWNhc2UgR0FNRVBPUlRfUkVHSVNURVJfUE9SVDoKKwkJCWdhbWVwb3J0X2FkZF9wb3J0KGV2ZW50LT5vYmplY3QpOworCQkJYnJlYWs7CiAKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7CisJCWNhc2UgR0FNRVBPUlRfQVRUQUNIX0RSSVZFUjoKKwkJCWdhbWVwb3J0X2F0dGFjaF9kcml2ZXIoZXZlbnQtPm9iamVjdCk7CisJCQlicmVhazsKIAkJfQogCiAJCWdhbWVwb3J0X3JlbW92ZV9kdXBsaWNhdGVfZXZlbnRzKGV2ZW50KTsKQEAgLTM4NSwxNiArMzc0LDE0IEBACiAgKi8KIHN0YXRpYyB2b2lkIGdhbWVwb3J0X3JlbW92ZV9wZW5kaW5nX2V2ZW50cyh2b2lkICpvYmplY3QpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKm5leHQ7Ci0Jc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQgKmV2ZW50LCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdhbWVwb3J0X2V2ZW50X2xvY2ssIGZsYWdzKTsKIAotCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmZ2FtZXBvcnRfZXZlbnRfbGlzdCkgewotCQlldmVudCA9IGxpc3RfZW50cnkobm9kZSwgc3RydWN0IGdhbWVwb3J0X2V2ZW50LCBub2RlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZlbnQsIG5leHQsICZnYW1lcG9ydF9ldmVudF9saXN0LCBub2RlKSB7CiAJCWlmIChldmVudC0+b2JqZWN0ID09IG9iamVjdCkgewotCQkJbGlzdF9kZWxfaW5pdChub2RlKTsKKwkJCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5ub2RlKTsKIAkJCWdhbWVwb3J0X2ZyZWVfZXZlbnQoZXZlbnQpOwogCQl9CiAJfQpAQCAtNDQxLDcgKzQyOCw2IEBACiAJCQlrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgIWxpc3RfZW1wdHkoJmdhbWVwb3J0X2V2ZW50X2xpc3QpKTsKIAl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKTsKIAotCXByaW50ayhLRVJOX0RFQlVHICJnYW1lcG9ydDoga2dhbWVwb3J0ZCBleGl0aW5nXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDUzLDYgKzQzOSw3IEBACiBzdGF0aWMgc3NpemVfdCBnYW1lcG9ydF9zaG93X2Rlc2NyaXB0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0ID0gdG9fZ2FtZXBvcnRfcG9ydChkZXYpOworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGdhbWVwb3J0LT5uYW1lKTsKIH0KIApAQCAtNTIxLDcgKzUwOCw4IEBACiAKIAltdXRleF9pbml0KCZnYW1lcG9ydC0+ZHJ2X211dGV4KTsKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmZ2FtZXBvcnQtPmRldik7Ci0JZGV2X3NldF9uYW1lKCZnYW1lcG9ydC0+ZGV2LCAiZ2FtZXBvcnQlbHUiLCAodW5zaWduZWQgbG9uZylhdG9taWNfaW5jX3JldHVybigmZ2FtZXBvcnRfbm8pIC0gMSk7CisJZGV2X3NldF9uYW1lKCZnYW1lcG9ydC0+ZGV2LCAiZ2FtZXBvcnQlbHUiLAorCQkJKHVuc2lnbmVkIGxvbmcpYXRvbWljX2luY19yZXR1cm4oJmdhbWVwb3J0X25vKSAtIDEpOwogCWdhbWVwb3J0LT5kZXYuYnVzID0gJmdhbWVwb3J0X2J1czsKIAlnYW1lcG9ydC0+ZGV2LnJlbGVhc2UgPSBnYW1lcG9ydF9yZWxlYXNlX3BvcnQ7CiAJaWYgKGdhbWVwb3J0LT5wYXJlbnQpCkBAIC01NTAsMTkgKzUzOCwxNyBAQAogCWxpc3RfYWRkX3RhaWwoJmdhbWVwb3J0LT5ub2RlLCAmZ2FtZXBvcnRfbGlzdCk7CiAKIAlpZiAoZ2FtZXBvcnQtPmlvKQotCQlwcmludGsoS0VSTl9JTkZPICJnYW1lcG9ydDogJXMgaXMgJXMsIGlvICUjeCwgc3BlZWQgJWRrSHpcbiIsCi0JCQlnYW1lcG9ydC0+bmFtZSwgZ2FtZXBvcnQtPnBoeXMsIGdhbWVwb3J0LT5pbywgZ2FtZXBvcnQtPnNwZWVkKTsKKwkJZGV2X2luZm8oJmdhbWVwb3J0LT5kZXYsICIlcyBpcyAlcywgaW8gJSN4LCBzcGVlZCAlZGtIelxuIiwKKwkJCSBnYW1lcG9ydC0+bmFtZSwgZ2FtZXBvcnQtPnBoeXMsIGdhbWVwb3J0LT5pbywgZ2FtZXBvcnQtPnNwZWVkKTsKIAllbHNlCi0JCXByaW50ayhLRVJOX0lORk8gImdhbWVwb3J0OiAlcyBpcyAlcywgc3BlZWQgJWRrSHpcbiIsCisJCWRldl9pbmZvKCZnYW1lcG9ydC0+ZGV2LCAiJXMgaXMgJXMsIHNwZWVkICVka0h6XG4iLAogCQkJZ2FtZXBvcnQtPm5hbWUsIGdhbWVwb3J0LT5waHlzLCBnYW1lcG9ydC0+c3BlZWQpOwogCiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZnYW1lcG9ydC0+ZGV2KTsKIAlpZiAoZXJyb3IpCi0JCXByaW50ayhLRVJOX0VSUgotCQkJImdhbWVwb3J0OiBkZXZpY2VfYWRkKCkgZmFpbGVkIGZvciAlcyAoJXMpLCBlcnJvcjogJWRcbiIsCisJCWRldl9lcnIoJmdhbWVwb3J0LT5kZXYsCisJCQkiZGV2aWNlX2FkZCgpIGZhaWxlZCBmb3IgJXMgKCVzKSwgZXJyb3I6ICVkXG4iLAogCQkJZ2FtZXBvcnQtPnBoeXMsIGdhbWVwb3J0LT5uYW1lLCBlcnJvcik7Ci0JZWxzZQotCQlnYW1lcG9ydC0+cmVnaXN0ZXJlZCA9IDE7CiB9CiAKIC8qCkBAIC01ODQsMTAgKzU3MCw4IEBACiAJCWdhbWVwb3J0LT5wYXJlbnQgPSBOVUxMOwogCX0KIAotCWlmIChnYW1lcG9ydC0+cmVnaXN0ZXJlZCkgeworCWlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmZ2FtZXBvcnQtPmRldikpCiAJCWRldmljZV9kZWwoJmdhbWVwb3J0LT5kZXYpOwotCQlnYW1lcG9ydC0+cmVnaXN0ZXJlZCA9IDA7Ci0JfQogCiAJbGlzdF9kZWxfaW5pdCgmZ2FtZXBvcnQtPm5vZGUpOwogCkBAIC03MDUsOCArNjg5LDcgQEAKIAogCWVycm9yID0gZHJpdmVyX2F0dGFjaCgmZHJ2LT5kcml2ZXIpOwogCWlmIChlcnJvcikKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiZ2FtZXBvcnQ6IGRyaXZlcl9hdHRhY2goKSBmYWlsZWQgZm9yICVzLCBlcnJvcjogJWRcbiIsCisJCXByX2VycigiZHJpdmVyX2F0dGFjaCgpIGZhaWxlZCBmb3IgJXMsIGVycm9yOiAlZFxuIiwKIAkJCWRydi0+ZHJpdmVyLm5hbWUsIGVycm9yKTsKIH0KIApAQCAtNzI3LDggKzcxMCw3IEBACiAKIAllcnJvciA9IGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwogCWlmIChlcnJvcikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJnYW1lcG9ydDogZHJpdmVyX3JlZ2lzdGVyKCkgZmFpbGVkIGZvciAlcywgZXJyb3I6ICVkXG4iLAorCQlwcl9lcnIoImRyaXZlcl9yZWdpc3RlcigpIGZhaWxlZCBmb3IgJXMsIGVycm9yOiAlZFxuIiwKIAkJCWRydi0+ZHJpdmVyLm5hbWUsIGVycm9yKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTgyOCw3ICs4MTAsNyBAQAogCiAJZXJyb3IgPSBidXNfcmVnaXN0ZXIoJmdhbWVwb3J0X2J1cyk7CiAJaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ2FtZXBvcnQ6IGZhaWxlZCB0byByZWdpc3RlciBnYW1lcG9ydCBidXMsIGVycm9yOiAlZFxuIiwgZXJyb3IpOworCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBnYW1lcG9ydCBidXMsIGVycm9yOiAlZFxuIiwgZXJyb3IpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQogCkBAIC04MzYsNyArODE4LDcgQEAKIAlpZiAoSVNfRVJSKGdhbWVwb3J0X3Rhc2spKSB7CiAJCWJ1c191bnJlZ2lzdGVyKCZnYW1lcG9ydF9idXMpOwogCQllcnJvciA9IFBUUl9FUlIoZ2FtZXBvcnRfdGFzayk7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ2FtZXBvcnQ6IEZhaWxlZCB0byBzdGFydCBrZ2FtZXBvcnRkLCBlcnJvcjogJWRcbiIsIGVycm9yKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gc3RhcnQga2dhbWVwb3J0ZCwgZXJyb3I6ICVkXG4iLCBlcnJvcik7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvbnM1NTguYyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvbnM1NTguYwppbmRleCBkYjU1NmI3Li43YzIxNzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L25zNTU4LmMKKysrIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9uczU1OC5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAogI2lmZGVmIENPTkZJR19QTlAKIAotc3RhdGljIHN0cnVjdCBwbnBfZGV2aWNlX2lkIHBucF9kZXZpZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBwbnBfZGV2aWRzW10gPSB7CiAJeyAuaWQgPSAiQFBAMDAwMSIsIC5kcml2ZXJfZGF0YSA9IDAgfSwgLyogQUxTIDEwMCAqLwogCXsgLmlkID0gIkBQQDAwMjAiLCAuZHJpdmVyX2RhdGEgPSAwIH0sIC8qIEFMUyAyMDAgKi8KIAl7IC5pZCA9ICJAUEAxMDAxIiwgLmRyaXZlcl9kYXRhID0gMCB9LCAvKiBBTFMgMTAwKyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9pbnB1dC1jb21wYXQuaCBiL2RyaXZlcnMvaW5wdXQvaW5wdXQtY29tcGF0LmgKaW5kZXggNDdjZDllYS4uNGQ4ZWEzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC1jb21wYXQuaAorKysgYi9kcml2ZXJzL2lucHV0L2lucHV0LWNvbXBhdC5oCkBAIC0yMSw4ICsyMSw2IEBACiAgICB5b3Ugd2h5IHRoZSBpZmRlZnMgYXJlIG5lZWRlZD8gVGhpbmsgYWJvdXQgaXQgYWdhaW4uIC1BSyAqLwogI2lmZGVmIENPTkZJR19YODZfNjQKICMgIGRlZmluZSBJTlBVVF9DT01QQVRfVEVTVCBpc19jb21wYXRfdGFzaygpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19JQTY0KQotIyAgZGVmaW5lIElOUFVUX0NPTVBBVF9URVNUIElTX0lBMzJfUFJPQ0VTUyh0YXNrX3B0X3JlZ3MoY3VycmVudCkpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TMzkwKQogIyAgZGVmaW5lIElOUFVUX0NPTVBBVF9URVNUIHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMxQklUKQogI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQUykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQtcG9sbGRldi5jIGIvZHJpdmVycy9pbnB1dC9pbnB1dC1wb2xsZGV2LmMKaW5kZXggYWE2NzEzYi4uMjkxZDkzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC1wb2xsZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC1wb2xsZGV2LmMKQEAgLTEwMCw2ICsxMDAsMTIgQEAKIAlzdHJ1Y3QgaW5wdXRfcG9sbGVkX2RldiAqZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXQpOwogCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkZXYtPndvcmspOworCS8qCisJICogQ2xlYW4gdXAgd29yayBzdHJ1Y3QgdG8gcmVtb3ZlIHJlZmVyZW5jZXMgdG8gdGhlIHdvcmtxdWV1ZS4KKwkgKiBJdCBtYXkgYmUgZGVzdHJveWVkIGJ5IHRoZSBuZXh0IGNhbGwuIFRoaXMgY2F1c2VzIHByb2JsZW1zCisJICogYXQgbmV4dCBkZXZpY2Ugb3Blbi1jbG9zZSBpbiBjYXNlIG9mIHBvbGxfaW50ZXJ2YWwgPT0gMC4KKwkgKi8KKwlJTklUX0RFTEFZRURfV09SSygmZGV2LT53b3JrLCBkZXYtPndvcmsud29yay5mdW5jKTsKIAlpbnB1dF9wb2xsZGV2X3N0b3Bfd29ya3F1ZXVlKCk7CiAKIAlpZiAoZGV2LT5jbG9zZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCA4NmNiMmQyLi40MTE2OGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC04NywxMiArODcsMTQgQEAKIH0KIAogLyoKLSAqIFBhc3MgZXZlbnQgdGhyb3VnaCBhbGwgb3BlbiBoYW5kbGVzLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoCisgKiBQYXNzIGV2ZW50IGZpcnN0IHRocm91Z2ggYWxsIGZpbHRlcnMgYW5kIHRoZW4sIGlmIGV2ZW50IGhhcyBub3QgYmVlbgorICogZmlsdGVyZWQgb3V0LCB0aHJvdWdoIGFsbCBvcGVuIGhhbmRsZXMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGgKICAqIGRldi0+ZXZlbnRfbG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogICovCiBzdGF0aWMgdm9pZCBpbnB1dF9wYXNzX2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKIAkJCSAgICAgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCiB7CisJc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXI7CiAJc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlOwogCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMTAwLDExICsxMDIsMjUgQEAKIAloYW5kbGUgPSByY3VfZGVyZWZlcmVuY2UoZGV2LT5ncmFiKTsKIAlpZiAoaGFuZGxlKQogCQloYW5kbGUtPmhhbmRsZXItPmV2ZW50KGhhbmRsZSwgdHlwZSwgY29kZSwgdmFsdWUpOwotCWVsc2UKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaGFuZGxlLCAmZGV2LT5oX2xpc3QsIGRfbm9kZSkKLQkJCWlmIChoYW5kbGUtPm9wZW4pCi0JCQkJaGFuZGxlLT5oYW5kbGVyLT5ldmVudChoYW5kbGUsCi0JCQkJCQkJdHlwZSwgY29kZSwgdmFsdWUpOworCWVsc2UgeworCQlib29sIGZpbHRlcmVkID0gZmFsc2U7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaGFuZGxlLCAmZGV2LT5oX2xpc3QsIGRfbm9kZSkgeworCQkJaWYgKCFoYW5kbGUtPm9wZW4pCisJCQkJY29udGludWU7CisKKwkJCWhhbmRsZXIgPSBoYW5kbGUtPmhhbmRsZXI7CisJCQlpZiAoIWhhbmRsZXItPmZpbHRlcikgeworCQkJCWlmIChmaWx0ZXJlZCkKKwkJCQkJYnJlYWs7CisKKwkJCQloYW5kbGVyLT5ldmVudChoYW5kbGUsIHR5cGUsIGNvZGUsIHZhbHVlKTsKKworCQkJfSBlbHNlIGlmIChoYW5kbGVyLT5maWx0ZXIoaGFuZGxlLCB0eXBlLCBjb2RlLCB2YWx1ZSkpCisJCQkJZmlsdGVyZWQgPSB0cnVlOworCQl9CisJfQorCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTYxNSwxMiArNjMxLDEyIEBACiAJCX0KIAl9CiAKLQljbGVhcl9iaXQob2xkX2tleWNvZGUsIGRldi0+a2V5Yml0KTsKLQlzZXRfYml0KGtleWNvZGUsIGRldi0+a2V5Yml0KTsKKwlfX2NsZWFyX2JpdChvbGRfa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCV9fc2V0X2JpdChrZXljb2RlLCBkZXYtPmtleWJpdCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5rZXljb2RlbWF4OyBpKyspIHsKIAkJaWYgKGlucHV0X2ZldGNoX2tleWNvZGUoZGV2LCBpKSA9PSBvbGRfa2V5Y29kZSkgewotCQkJc2V0X2JpdChvbGRfa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCQkJX19zZXRfYml0KG9sZF9rZXljb2RlLCBkZXYtPmtleWJpdCk7CiAJCQlicmVhazsgLyogU2V0dGluZyB0aGUgYml0IHR3aWNlIGlzIHVzZWxlc3MsIHNvIGJyZWFrICovCiAJCX0KIAl9CkBAIC02NzgsNiArNjk0LDkgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dDsKIAorCS8qIE1ha2Ugc3VyZSBLRVlfUkVTRVJWRUQgZGlkIG5vdCBnZXQgZW5hYmxlZC4gKi8KKwlfX2NsZWFyX2JpdChLRVlfUkVTRVJWRUQsIGRldi0+a2V5Yml0KTsKKwogCS8qCiAJICogU2ltdWxhdGUga2V5dXAgZXZlbnQgaWYga2V5Y29kZSBpcyBub3QgcHJlc2VudAogCSAqIGluIHRoZSBrZXltYXAgYW55bW9yZQpAQCAtNzA1LDEyICs3MjQsMTMgQEAKIAkJaWYgKGkgIT0gQklUU19UT19MT05HUyhtYXgpKSBcCiAJCQljb250aW51ZTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgKmlucHV0X21hdGNoX2RldmljZShjb25zdCBzdHJ1Y3QgaW5wdXRfZGV2aWNlX2lkICppZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5wdXRfZGV2aWNlX2lkICppbnB1dF9tYXRjaF9kZXZpY2Uoc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXIsCiAJCQkJCQkJc3RydWN0IGlucHV0X2RldiAqZGV2KQogeworCWNvbnN0IHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgKmlkOwogCWludCBpOwogCi0JZm9yICg7IGlkLT5mbGFncyB8fCBpZC0+ZHJpdmVyX2luZm87IGlkKyspIHsKKwlmb3IgKGlkID0gaGFuZGxlci0+aWRfdGFibGU7IGlkLT5mbGFncyB8fCBpZC0+ZHJpdmVyX2luZm87IGlkKyspIHsKIAogCQlpZiAoaWQtPmZsYWdzICYgSU5QVVRfREVWSUNFX0lEX01BVENIX0JVUykKIAkJCWlmIChpZC0+YnVzdHlwZSAhPSBkZXYtPmlkLmJ1c3R5cGUpCkBAIC03MzgsNyArNzU4LDggQEAKIAkJTUFUQ0hfQklUKGZmYml0LCAgRkZfTUFYKTsKIAkJTUFUQ0hfQklUKHN3Yml0LCAgU1dfTUFYKTsKIAotCQlyZXR1cm4gaWQ7CisJCWlmICghaGFuZGxlci0+bWF0Y2ggfHwgaGFuZGxlci0+bWF0Y2goaGFuZGxlciwgZGV2KSkKKwkJCXJldHVybiBpZDsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTc0OSwxMCArNzcwLDcgQEAKIAljb25zdCBzdHJ1Y3QgaW5wdXRfZGV2aWNlX2lkICppZDsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoaGFuZGxlci0+YmxhY2tsaXN0ICYmIGlucHV0X21hdGNoX2RldmljZShoYW5kbGVyLT5ibGFja2xpc3QsIGRldikpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWQgPSBpbnB1dF9tYXRjaF9kZXZpY2UoaGFuZGxlci0+aWRfdGFibGUsIGRldik7CisJaWQgPSBpbnB1dF9tYXRjaF9kZXZpY2UoaGFuZGxlciwgZGV2KTsKIAlpZiAoIWlkKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtOTg4LDYgKzEwMDYsOCBAQAogCXVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqc3RhdGUgPSAodW5pb24gaW5wdXRfc2VxX3N0YXRlICopJnNlcS0+cHJpdmF0ZTsKIAogCXNlcV9wcmludGYoc2VxLCAiTjogTnVtYmVyPSV1IE5hbWU9JXMiLCBzdGF0ZS0+cG9zLCBoYW5kbGVyLT5uYW1lKTsKKwlpZiAoaGFuZGxlci0+ZmlsdGVyKQorCQlzZXFfcHV0cyhzZXEsICIgKGZpbHRlcikiKTsKIAlpZiAoaGFuZGxlci0+Zm9wcykKIAkJc2VxX3ByaW50ZihzZXEsICIgTWlub3I9JWQiLCBoYW5kbGVyLT5taW5vcik7CiAJc2VxX3B1dGMoc2VxLCAnXG4nKTsKQEAgLTE1NTEsNiArMTU3MSwyNSBAQAogfQogRVhQT1JUX1NZTUJPTChpbnB1dF9zZXRfY2FwYWJpbGl0eSk7CiAKKyNkZWZpbmUgSU5QVVRfQ0xFQU5TRV9CSVRNQVNLKGRldiwgdHlwZSwgYml0cykJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKCF0ZXN0X2JpdChFVl8jI3R5cGUsIGRldi0+ZXZiaXQpKQkJCVwKKwkJCW1lbXNldChkZXYtPmJpdHMjI2JpdCwgMCwJCQlcCisJCQkJc2l6ZW9mKGRldi0+Yml0cyMjYml0KSk7CQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQgaW5wdXRfY2xlYW5zZV9iaXRtYXNrcyhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJSU5QVVRfQ0xFQU5TRV9CSVRNQVNLKGRldiwgS0VZLCBrZXkpOworCUlOUFVUX0NMRUFOU0VfQklUTUFTSyhkZXYsIFJFTCwgcmVsKTsKKwlJTlBVVF9DTEVBTlNFX0JJVE1BU0soZGV2LCBBQlMsIGFicyk7CisJSU5QVVRfQ0xFQU5TRV9CSVRNQVNLKGRldiwgTVNDLCBtc2MpOworCUlOUFVUX0NMRUFOU0VfQklUTUFTSyhkZXYsIExFRCwgbGVkKTsKKwlJTlBVVF9DTEVBTlNFX0JJVE1BU0soZGV2LCBTTkQsIHNuZCk7CisJSU5QVVRfQ0xFQU5TRV9CSVRNQVNLKGRldiwgRkYsIGZmKTsKKwlJTlBVVF9DTEVBTlNFX0JJVE1BU0soZGV2LCBTVywgc3cpOworfQorCiAvKioKICAqIGlucHV0X3JlZ2lzdGVyX2RldmljZSAtIHJlZ2lzdGVyIGRldmljZSB3aXRoIGlucHV0IGNvcmUKICAqIEBkZXY6IGRldmljZSB0byBiZSByZWdpc3RlcmVkCkBAIC0xNTcwLDEzICsxNjA5LDE5IEBACiAJY29uc3QgY2hhciAqcGF0aDsKIAlpbnQgZXJyb3I7CiAKKwkvKiBFdmVyeSBpbnB1dCBkZXZpY2UgZ2VuZXJhdGVzIEVWX1NZTi9TWU5fUkVQT1JUIGV2ZW50cy4gKi8KIAlfX3NldF9iaXQoRVZfU1lOLCBkZXYtPmV2Yml0KTsKIAorCS8qIEtFWV9SRVNFUlZFRCBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgdHJhbnNtaXR0ZWQgdG8gdXNlcnNwYWNlLiAqLworCV9fY2xlYXJfYml0KEtFWV9SRVNFUlZFRCwgZGV2LT5rZXliaXQpOworCisJLyogTWFrZSBzdXJlIHRoYXQgYml0bWFza3Mgbm90IG1lbnRpb25lZCBpbiBkZXYtPmV2Yml0IGFyZSBjbGVhbi4gKi8KKwlpbnB1dF9jbGVhbnNlX2JpdG1hc2tzKGRldik7CisKIAkvKgogCSAqIElmIGRlbGF5IGFuZCBwZXJpb2QgYXJlIHByZS1zZXQgYnkgdGhlIGRyaXZlciwgdGhlbiBhdXRvcmVwZWF0aW5nCiAJICogaXMgaGFuZGxlZCBieSB0aGUgZHJpdmVyIGl0c2VsZiBhbmQgd2UgZG9uJ3QgZG8gaXQgaW4gaW5wdXQuYy4KIAkgKi8KLQogCWluaXRfdGltZXIoJmRldi0+dGltZXIpOwogCWlmICghZGV2LT5yZXBbUkVQX0RFTEFZXSAmJiAhZGV2LT5yZXBbUkVQX1BFUklPRF0pIHsKIAkJZGV2LT50aW1lci5kYXRhID0gKGxvbmcpIGRldjsKQEAgLTE3NzYsNyArMTgyMSwxNiBAQAogCWVycm9yID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXYtPm11dGV4KTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKLQlsaXN0X2FkZF90YWlsX3JjdSgmaGFuZGxlLT5kX25vZGUsICZkZXYtPmhfbGlzdCk7CisKKwkvKgorCSAqIEZpbHRlcnMgZ28gdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QsIG5vcm1hbCBoYW5kbGVycworCSAqIHRvIHRoZSB0YWlsLgorCSAqLworCWlmIChoYW5kbGVyLT5maWx0ZXIpCisJCWxpc3RfYWRkX3JjdSgmaGFuZGxlLT5kX25vZGUsICZkZXYtPmhfbGlzdCk7CisJZWxzZQorCQlsaXN0X2FkZF90YWlsX3JjdSgmaGFuZGxlLT5kX25vZGUsICZkZXYtPmhfbGlzdCk7CisKIAltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCmluZGV4IGIxYmQ2ZGQuLmM1MmJlYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwpAQCAtMjg2LDYgKzI4Niw4IEBACiAJCWdvdG8gZXJyX2ZyZWVfY2xpZW50OwogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2xpZW50OworCW5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworCiAJcmV0dXJuIDA7CiAKICBlcnJfZnJlZV9jbGllbnQ6CkBAIC03NzUsNiArNzc3LDIwIEBACiAJCWlucHV0X2Nsb3NlX2RldmljZShoYW5kbGUpOwogfQogCisKK3N0YXRpYyBib29sIGpveWRldl9tYXRjaChzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqaGFuZGxlciwgc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCS8qIEF2b2lkIHRvdWNocGFkcyBhbmQgdG91Y2hzY3JlZW5zICovCisJaWYgKHRlc3RfYml0KEVWX0tFWSwgZGV2LT5ldmJpdCkgJiYgdGVzdF9iaXQoQlROX1RPVUNILCBkZXYtPmtleWJpdCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEF2b2lkIHRhYmxldHMsIGRpZ2l0aXNlcnMgYW5kIHNpbWlsYXIgZGV2aWNlcyAqLworCWlmICh0ZXN0X2JpdChFVl9LRVksIGRldi0+ZXZiaXQpICYmIHRlc3RfYml0KEJUTl9ESUdJLCBkZXYtPmtleWJpdCkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgaW50IGpveWRldl9jb25uZWN0KHN0cnVjdCBpbnB1dF9oYW5kbGVyICpoYW5kbGVyLCBzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCiAJCQkgIGNvbnN0IHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgKmlkKQogewpAQCAtODk0LDIyICs5MTAsNiBAQAogCXB1dF9kZXZpY2UoJmpveWRldi0+ZGV2KTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgam95ZGV2X2JsYWNrbGlzdFtdID0gewotCXsKLQkJLmZsYWdzID0gSU5QVVRfREVWSUNFX0lEX01BVENIX0VWQklUIHwKLQkJCQlJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfS0VZQklULAotCQkuZXZiaXQgPSB7IEJJVF9NQVNLKEVWX0tFWSkgfSwKLQkJLmtleWJpdCA9IHsgW0JJVF9XT1JEKEJUTl9UT1VDSCldID0gQklUX01BU0soQlROX1RPVUNIKSB9LAotCX0sCS8qIEF2b2lkIGl0b3VjaHBhZHMgYW5kIHRvdWNoc2NyZWVucyAqLwotCXsKLQkJLmZsYWdzID0gSU5QVVRfREVWSUNFX0lEX01BVENIX0VWQklUIHwKLQkJCQlJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfS0VZQklULAotCQkuZXZiaXQgPSB7IEJJVF9NQVNLKEVWX0tFWSkgfSwKLQkJLmtleWJpdCA9IHsgW0JJVF9XT1JEKEJUTl9ESUdJKV0gPSBCSVRfTUFTSyhCVE5fRElHSSkgfSwKLQl9LAkvKiBBdm9pZCB0YWJsZXRzLCBkaWdpdGlzZXJzIGFuZCBzaW1pbGFyIGRldmljZXMgKi8KLQl7IH0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5wdXRfZGV2aWNlX2lkIGpveWRldl9pZHNbXSA9IHsKIAl7CiAJCS5mbGFncyA9IElOUFVUX0RFVklDRV9JRF9NQVRDSF9FVkJJVCB8CkBAIC05MzYsMTMgKzkzNiwxMyBAQAogCiBzdGF0aWMgc3RydWN0IGlucHV0X2hhbmRsZXIgam95ZGV2X2hhbmRsZXIgPSB7CiAJLmV2ZW50CQk9IGpveWRldl9ldmVudCwKKwkubWF0Y2gJCT0gam95ZGV2X21hdGNoLAogCS5jb25uZWN0CT0gam95ZGV2X2Nvbm5lY3QsCiAJLmRpc2Nvbm5lY3QJPSBqb3lkZXZfZGlzY29ubmVjdCwKIAkuZm9wcwkJPSAmam95ZGV2X2ZvcHMsCiAJLm1pbm9yCQk9IEpPWURFVl9NSU5PUl9CQVNFLAogCS5uYW1lCQk9ICJqb3lkZXYiLAogCS5pZF90YWJsZQk9IGpveWRldl9pZHMsCi0JLmJsYWNrbGlzdAk9IGpveWRldl9ibGFja2xpc3QsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBqb3lkZXZfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9LY29uZmlnCmluZGV4IGIxMTQxOTUuLjViNTk2MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL0tjb25maWcKQEAgLTIyMSw2ICsyMjEsNyBAQAogY29uZmlnIEpPWVNUSUNLX0dBTUVDT04KIAl0cmlzdGF0ZSAiTXVsdGlzeXN0ZW0sIE5FUywgU05FUywgTjY0LCBQU1ggam95c3RpY2tzIGFuZCBnYW1lcGFkcyIKIAlkZXBlbmRzIG9uIFBBUlBPUlQKKwlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUwogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBOaW50ZW5kbyBFbnRlcnRhaW5tZW50IFN5c3RlbSBnYW1lcGFkLAogCSAgU3VwZXIgTmludGVuZG8gRW50ZXJ0YWlubWVudCBTeXN0ZW0gZ2FtZXBhZCwgTmludGVuZG8gNjQgZ2FtZXBhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ2FtZWNvbi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nYW1lY29uLmMKaW5kZXggMDdhMzJhZi4uYWU5OThkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nYW1lY29uLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nYW1lY29uLmMKQEAgLTMwLDYgKzMwLDggQEAKICAqIFZvanRlY2ggUGF2bGlrLCBTaW11bmtvdmEgMTU5NCwgUHJhZ3VlIDgsIDE4MiAwMCBDemVjaCBSZXB1YmxpYwogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC02MSw0OCArNjMsNzMgQEAKIAogLyogc2VlIGFsc28gZ3NfcHN4X2RlbGF5IHBhcmFtZXRlciBpbiBQU1ggc3VwcG9ydCBzZWN0aW9uICovCiAKLSNkZWZpbmUgR0NfU05FUwkJMQotI2RlZmluZSBHQ19ORVMJCTIKLSNkZWZpbmUgR0NfTkVTNAkJMwotI2RlZmluZSBHQ19NVUxUSQk0Ci0jZGVmaW5lIEdDX01VTFRJMgk1Ci0jZGVmaW5lIEdDX042NAkJNgotI2RlZmluZSBHQ19QU1gJCTcKLSNkZWZpbmUgR0NfRERSCQk4Ci0jZGVmaW5lIEdDX1NORVNNT1VTRQk5Ci0KLSNkZWZpbmUgR0NfTUFYCQk5CitlbnVtIGdjX3R5cGUgeworCUdDX05PTkUgPSAwLAorCUdDX1NORVMsCisJR0NfTkVTLAorCUdDX05FUzQsCisJR0NfTVVMVEksCisJR0NfTVVMVEkyLAorCUdDX042NCwKKwlHQ19QU1gsCisJR0NfRERSLAorCUdDX1NORVNNT1VTRSwKKwlHQ19NQVgKK307CiAKICNkZWZpbmUgR0NfUkVGUkVTSF9USU1FCUhaLzEwMAogCitzdHJ1Y3QgZ2NfcGFkIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CisJZW51bSBnY190eXBlIHR5cGU7CisJY2hhciBwaHlzWzMyXTsKK307CisKIHN0cnVjdCBnYyB7CiAJc3RydWN0IHBhcmRldmljZSAqcGQ7CisJc3RydWN0IGdjX3BhZCBwYWRzW0dDX01BWF9ERVZJQ0VTXTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXZbR0NfTUFYX0RFVklDRVNdOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwotCXVuc2lnbmVkIGNoYXIgcGFkc1tHQ19NQVggKyAxXTsKKwlpbnQgcGFkX2NvdW50W0dDX01BWF07CiAJaW50IHVzZWQ7CiAJc3RydWN0IG11dGV4IG11dGV4OwotCWNoYXIgcGh5c1tHQ19NQVhfREVWSUNFU11bMzJdOworfTsKKworc3RydWN0IGdjX3N1YmRldiB7CisJdW5zaWduZWQgaW50IGlkeDsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZ2MgKmdjX2Jhc2VbM107CiAKLXN0YXRpYyBpbnQgZ2Nfc3RhdHVzX2JpdFtdID0geyAweDQwLCAweDgwLCAweDIwLCAweDEwLCAweDA4IH07CitzdGF0aWMgY29uc3QgaW50IGdjX3N0YXR1c19iaXRbXSA9IHsgMHg0MCwgMHg4MCwgMHgyMCwgMHgxMCwgMHgwOCB9OwogCi1zdGF0aWMgY2hhciAqZ2NfbmFtZXNbXSA9IHsgTlVMTCwgIlNORVMgcGFkIiwgIk5FUyBwYWQiLCAiTkVTIEZvdXJQb3J0IiwgIk11bHRpc3lzdGVtIGpveXN0aWNrIiwKLQkJCQkiTXVsdGlzeXN0ZW0gMi1idXR0b24gam95c3RpY2siLCAiTjY0IGNvbnRyb2xsZXIiLCAiUFNYIGNvbnRyb2xsZXIiLAotCQkJCSJQU1ggRERSIGNvbnRyb2xsZXIiLCAiU05FUyBtb3VzZSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpnY19uYW1lc1tdID0geworCU5VTEwsICJTTkVTIHBhZCIsICJORVMgcGFkIiwgIk5FUyBGb3VyUG9ydCIsICJNdWx0aXN5c3RlbSBqb3lzdGljayIsCisJIk11bHRpc3lzdGVtIDItYnV0dG9uIGpveXN0aWNrIiwgIk42NCBjb250cm9sbGVyIiwgIlBTWCBjb250cm9sbGVyIiwKKwkiUFNYIEREUiBjb250cm9sbGVyIiwgIlNORVMgbW91c2UiCit9OworCiAvKgogICogTjY0IHN1cHBvcnQuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgZ2NfbjY0X2J5dGVzW10gPSB7IDAsIDEsIDEzLCAxNSwgMTQsIDEyLCAxMCwgMTEsIDIsIDMgfTsKLXN0YXRpYyBzaG9ydCBnY19uNjRfYnRuW10gPSB7IEJUTl9BLCBCVE5fQiwgQlROX0MsIEJUTl9YLCBCVE5fWSwgQlROX1osIEJUTl9UTCwgQlROX1RSLCBCVE5fVFJJR0dFUiwgQlROX1NUQVJUIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY19uNjRfYnl0ZXNbXSA9IHsgMCwgMSwgMTMsIDE1LCAxNCwgMTIsIDEwLCAxMSwgMiwgMyB9Oworc3RhdGljIGNvbnN0IHNob3J0IGdjX242NF9idG5bXSA9IHsKKwlCVE5fQSwgQlROX0IsIEJUTl9DLCBCVE5fWCwgQlROX1ksIEJUTl9aLAorCUJUTl9UTCwgQlROX1RSLCBCVE5fVFJJR0dFUiwgQlROX1NUQVJUCit9OwogCiAjZGVmaW5lIEdDX042NF9MRU5HVEgJCTMyCQkvKiBONjQgYml0IGxlbmd0aCwgbm90IGluY2x1ZGluZyBzdG9wIGJpdCAqLwotI2RlZmluZSBHQ19ONjRfUkVRVUVTVF9MRU5HVEgJMzcJCS8qIHRyYW5zbWl0IHJlcXVlc3Qgc2VxdWVuY2UgaXMgOSBiaXRzIGxvbmcgKi8KKyNkZWZpbmUgR0NfTjY0X1NUT1BfTEVOR1RICTUJCS8qIExlbmd0aCBvZiBlbmNvZGVkIHN0b3AgYml0ICovCisjZGVmaW5lIEdDX042NF9DTURfMDAJCTB4MTExMTExMTFVTAorI2RlZmluZSBHQ19ONjRfQ01EXzAxCQkweGQxMTExMTExVUwKKyNkZWZpbmUgR0NfTjY0X0NNRF8wMwkJMHhkZDExMTExMVVMCisjZGVmaW5lIEdDX042NF9DTURfMWIJCTB4ZGQxZGQxMTFVTAorI2RlZmluZSBHQ19ONjRfQ01EX2MwCQkweDExMTExMWRkVUwKKyNkZWZpbmUgR0NfTjY0X0NNRF84MAkJMHgxMTExMTExZFVMCisjZGVmaW5lIEdDX042NF9TVE9QX0JJVAkJMHgxZAkJLyogRW5jb2RlZCBzdG9wIGJpdCAqLworI2RlZmluZSBHQ19ONjRfUkVRVUVTVF9EQVRBCUdDX042NF9DTURfMDEJLyogdGhlIHJlcXVlc3QgZGF0YSBjb21tYW5kICovCiAjZGVmaW5lIEdDX042NF9ERUxBWQkJMTMzCQkvKiBkZWxheSBiZXR3ZWVuIHRyYW5zbWl0IHJlcXVlc3QsIGFuZCByZXNwb25zZSByZWFkeSAodXMpICovCi0jZGVmaW5lIEdDX042NF9SRVFVRVNUCQkweDFkZDExMTExMTFVTEwgLyogdGhlIHJlcXVlc3QgZGF0YSBjb21tYW5kIChlbmNvZGVkIGZvciAwMDAwMDAwMTEpICovCiAjZGVmaW5lIEdDX042NF9EV1MJCTMJCS8qIGRlbGF5IGJldHdlZW4gd3JpdGUgc2VnbWVudHMgKHJlcXVpcmVkIGZvciBzb3VuZCBwbGF5YmFjayBiZWNhdXNlIG9mIElTQSBETUEpICovCiAJCQkJCQkvKiBHQ19ONjRfRFdTID4gMjQgaXMga25vd24gdG8gZmFpbCAqLwogI2RlZmluZSBHQ19ONjRfUE9XRVJfVwkJMHhlMgkJLyogcG93ZXIgZHVyaW5nIHdyaXRlICh0cmFuc21pdCByZXF1ZXN0KSAqLwpAQCAtMTE0LDggKzE0MSw0MCBAQAogI2RlZmluZSBHQ19ONjRfQ0xPQ0sJCTB4MDIJCS8qIGNsb2NrIGJpdHMgZm9yIHJlYWQgKi8KIAogLyoKKyAqIFVzZWQgZm9yIHJ1bWJsZSBjb2RlLgorICovCisKKy8qIFNlbmQgZW5jb2RlZCBjb21tYW5kICovCitzdGF0aWMgdm9pZCBnY19uNjRfc2VuZF9jb21tYW5kKHN0cnVjdCBnYyAqZ2MsIHVuc2lnbmVkIGxvbmcgY21kLAorCQkJCXVuc2lnbmVkIGNoYXIgdGFyZ2V0KQoreworCXN0cnVjdCBwYXJwb3J0ICpwb3J0ID0gZ2MtPnBkLT5wb3J0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEdDX042NF9MRU5HVEg7IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIGRhdGEgPSAoY21kID4+IGkpICYgMSA/IHRhcmdldCA6IDA7CisJCXBhcnBvcnRfd3JpdGVfZGF0YShwb3J0LCBHQ19ONjRfUE9XRVJfVyB8IGRhdGEpOworCQl1ZGVsYXkoR0NfTjY0X0RXUyk7CisJfQorfQorCisvKiBTZW5kIHN0b3AgYml0ICovCitzdGF0aWMgdm9pZCBnY19uNjRfc2VuZF9zdG9wX2JpdChzdHJ1Y3QgZ2MgKmdjLCB1bnNpZ25lZCBjaGFyIHRhcmdldCkKK3sKKwlzdHJ1Y3QgcGFycG9ydCAqcG9ydCA9IGdjLT5wZC0+cG9ydDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBHQ19ONjRfU1RPUF9MRU5HVEg7IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIGRhdGEgPSAoR0NfTjY0X1NUT1BfQklUID4+IGkpICYgMSA/IHRhcmdldCA6IDA7CisJCXBhcnBvcnRfd3JpdGVfZGF0YShwb3J0LCBHQ19ONjRfUE9XRVJfVyB8IGRhdGEpOworCQl1ZGVsYXkoR0NfTjY0X0RXUyk7CisJfQorfQorCisvKgogICogZ2NfbjY0X3JlYWRfcGFja2V0KCkgcmVhZHMgYW4gTjY0IHBhY2tldC4KLSAqIEVhY2ggcGFkIHVzZXMgb25lIGJpdCBwZXIgYnl0ZS4gU28gYWxsIHBhZHMgY29ubmVjdGVkIHRvIHRoaXMgcG9ydCBhcmUgcmVhZCBpbiBwYXJhbGxlbC4KKyAqIEVhY2ggcGFkIHVzZXMgb25lIGJpdCBwZXIgYnl0ZS4gU28gYWxsIHBhZHMgY29ubmVjdGVkIHRvIHRoaXMgcG9ydAorICogYXJlIHJlYWQgaW4gcGFyYWxsZWwuCiAgKi8KIAogc3RhdGljIHZvaWQgZ2NfbjY0X3JlYWRfcGFja2V0KHN0cnVjdCBnYyAqZ2MsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCkBAIC0xMjgsMTQgKzE4NywxMyBAQAogICovCiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZm9yIChpID0gMDsgaSA8IEdDX042NF9SRVFVRVNUX0xFTkdUSDsgaSsrKSB7Ci0JCXBhcnBvcnRfd3JpdGVfZGF0YShnYy0+cGQtPnBvcnQsIEdDX042NF9QT1dFUl9XIHwgKChHQ19ONjRfUkVRVUVTVCA+PiBpKSAmIDEgPyBHQ19ONjRfT1VUIDogMCkpOwotCQl1ZGVsYXkoR0NfTjY0X0RXUyk7Ci0JfQorCWdjX242NF9zZW5kX2NvbW1hbmQoZ2MsIEdDX042NF9SRVFVRVNUX0RBVEEsIEdDX042NF9PVVQpOworCWdjX242NF9zZW5kX3N0b3BfYml0KGdjLCBHQ19ONjRfT1VUKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIC8qCi0gKiBXYWl0IGZvciB0aGUgcGFkIHJlc3BvbnNlIHRvIGJlIGxvYWRlZCBpbnRvIHRoZSAzMy1iaXQgcmVnaXN0ZXIgb2YgdGhlIGFkYXB0ZXIKKyAqIFdhaXQgZm9yIHRoZSBwYWQgcmVzcG9uc2UgdG8gYmUgbG9hZGVkIGludG8gdGhlIDMzLWJpdCByZWdpc3RlcgorICogb2YgdGhlIGFkYXB0ZXIuCiAgKi8KIAogCXVkZWxheShHQ19ONjRfREVMQVkpOwpAQCAtMTQ2LDEzICsyMDQsMTUgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBHQ19ONjRfTEVOR1RIOyBpKyspIHsKIAkJcGFycG9ydF93cml0ZV9kYXRhKGdjLT5wZC0+cG9ydCwgR0NfTjY0X1BPV0VSX1IpOworCQl1ZGVsYXkoMik7CiAJCWRhdGFbaV0gPSBwYXJwb3J0X3JlYWRfc3RhdHVzKGdjLT5wZC0+cG9ydCk7CiAJCXBhcnBvcnRfd3JpdGVfZGF0YShnYy0+cGQtPnBvcnQsIEdDX042NF9QT1dFUl9SIHwgR0NfTjY0X0NMT0NLKTsKIAkgfQogCiAvKgotICogV2UgbXVzdCB3YWl0IDIwMCBtcyBoZXJlIGZvciB0aGUgY29udHJvbGxlciB0byByZWluaXRpYWxpemUgYmVmb3JlIHRoZSBuZXh0IHJlYWQgcmVxdWVzdC4KLSAqIE5vIHdvcnJpZXMgYXMgbG9uZyBhcyBnY19yZWFkIGlzIHBvbGxlZCBsZXNzIGZyZXF1ZW50bHkgdGhhbiB0aGlzLgorICogV2UgbXVzdCB3YWl0IDIwMCBtcyBoZXJlIGZvciB0aGUgY29udHJvbGxlciB0byByZWluaXRpYWxpemUgYmVmb3JlCisgKiB0aGUgbmV4dCByZWFkIHJlcXVlc3QuIE5vIHdvcnJpZXMgYXMgbG9uZyBhcyBnY19yZWFkIGlzIHBvbGxlZCBsZXNzCisgKiBmcmVxdWVudGx5IHRoYW4gdGhpcy4KICAqLwogCiB9CkBAIC0xNjAsNDUgKzIyMCwxMTIgQEAKIHN0YXRpYyB2b2lkIGdjX242NF9wcm9jZXNzX3BhY2tldChzdHJ1Y3QgZ2MgKmdjKQogewogCXVuc2lnbmVkIGNoYXIgZGF0YVtHQ19ONjRfTEVOR1RIXTsKLQlzaWduZWQgY2hhciBheGVzWzJdOwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKIAlpbnQgaSwgaiwgczsKKwlzaWduZWQgY2hhciB4LCB5OwogCiAJZ2NfbjY0X3JlYWRfcGFja2V0KGdjLCBkYXRhKTsKIAogCWZvciAoaSA9IDA7IGkgPCBHQ19NQVhfREVWSUNFUzsgaSsrKSB7CiAKLQkJZGV2ID0gZ2MtPmRldltpXTsKLQkJaWYgKCFkZXYpCisJCWlmIChnYy0+cGFkc1tpXS50eXBlICE9IEdDX042NCkKIAkJCWNvbnRpbnVlOwogCisJCWRldiA9IGdjLT5wYWRzW2ldLmRldjsKIAkJcyA9IGdjX3N0YXR1c19iaXRbaV07CiAKLQkJaWYgKHMgJiBnYy0+cGFkc1tHQ19ONjRdICYgfihkYXRhWzhdIHwgZGF0YVs5XSkpIHsKKwkJaWYgKHMgJiB+KGRhdGFbOF0gfCBkYXRhWzldKSkgewogCi0JCQlheGVzWzBdID0gYXhlc1sxXSA9IDA7CisJCQl4ID0geSA9IDA7CiAKIAkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKIAkJCQlpZiAoZGF0YVsyMyAtIGpdICYgcykKLQkJCQkJYXhlc1swXSB8PSAxIDw8IGo7CisJCQkJCXggfD0gMSA8PCBqOwogCQkJCWlmIChkYXRhWzMxIC0gal0gJiBzKQotCQkJCQlheGVzWzFdIHw9IDEgPDwgajsKKwkJCQkJeSB8PSAxIDw8IGo7CiAJCQl9CiAKLQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgIGF4ZXNbMF0pOwotCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCAtYXhlc1sxXSk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsICB4KTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgLXkpOwogCi0JCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX0hBVDBYLCAhKHMgJiBkYXRhWzZdKSAtICEocyAmIGRhdGFbN10pKTsKLQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfSEFUMFksICEocyAmIGRhdGFbNF0pIC0gIShzICYgZGF0YVs1XSkpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19IQVQwWCwKKwkJCQkJICEocyAmIGRhdGFbNl0pIC0gIShzICYgZGF0YVs3XSkpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19IQVQwWSwKKwkJCQkJICEocyAmIGRhdGFbNF0pIC0gIShzICYgZGF0YVs1XSkpOwogCiAJCQlmb3IgKGogPSAwOyBqIDwgMTA7IGorKykKLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgZ2NfbjY0X2J0bltqXSwgcyAmIGRhdGFbZ2NfbjY0X2J5dGVzW2pdXSk7CisJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGdjX242NF9idG5bal0sCisJCQkJCQkgcyAmIGRhdGFbZ2NfbjY0X2J5dGVzW2pdXSk7CiAKIAkJCWlucHV0X3N5bmMoZGV2KTsKIAkJfQogCX0KIH0KIAorc3RhdGljIGludCBnY19uNjRfcGxheV9lZmZlY3Qoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgICAgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdjICpnYyA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGdjX3N1YmRldiAqc2RldiA9IGRhdGE7CisJdW5zaWduZWQgY2hhciB0YXJnZXQgPSAxIDw8IHNkZXYtPmlkeDsgLyogc2VsZWN0IGRlc2lyZWQgcGluICovCisKKwlpZiAoZWZmZWN0LT50eXBlID09IEZGX1JVTUJMRSkgeworCQlzdHJ1Y3QgZmZfcnVtYmxlX2VmZmVjdCAqcnVtYmxlID0gJmVmZmVjdC0+dS5ydW1ibGU7CisJCXVuc2lnbmVkIGludCBjbWQgPQorCQkJcnVtYmxlLT5zdHJvbmdfbWFnbml0dWRlIHx8IHJ1bWJsZS0+d2Vha19tYWduaXR1ZGUgPworCQkJR0NfTjY0X0NNRF8wMSA6IEdDX042NF9DTURfMDA7CisKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJCS8qIEluaXQgUnVtYmxlIC0gMHgwMywgMHg4MCwgMHgwMSwgKDM0KTB4ODAgKi8KKwkJZ2NfbjY0X3NlbmRfY29tbWFuZChnYywgR0NfTjY0X0NNRF8wMywgdGFyZ2V0KTsKKwkJZ2NfbjY0X3NlbmRfY29tbWFuZChnYywgR0NfTjY0X0NNRF84MCwgdGFyZ2V0KTsKKwkJZ2NfbjY0X3NlbmRfY29tbWFuZChnYywgR0NfTjY0X0NNRF8wMSwgdGFyZ2V0KTsKKwkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCQlnY19uNjRfc2VuZF9jb21tYW5kKGdjLCBHQ19ONjRfQ01EXzgwLCB0YXJnZXQpOworCQlnY19uNjRfc2VuZF9zdG9wX2JpdChnYywgdGFyZ2V0KTsKKworCQl1ZGVsYXkoR0NfTjY0X0RFTEFZKTsKKworCQkvKiBOb3cgc3RhcnQgb3Igc3RvcCBpdCAtIDB4MDMsIDB4YzAsIDB6eDFiLCAoMzIpMHgwMS8weDAwICovCisJCWdjX242NF9zZW5kX2NvbW1hbmQoZ2MsIEdDX042NF9DTURfMDMsIHRhcmdldCk7CisJCWdjX242NF9zZW5kX2NvbW1hbmQoZ2MsIEdDX042NF9DTURfYzAsIHRhcmdldCk7CisJCWdjX242NF9zZW5kX2NvbW1hbmQoZ2MsIEdDX042NF9DTURfMWIsIHRhcmdldCk7CisJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQorCQkJZ2NfbjY0X3NlbmRfY29tbWFuZChnYywgY21kLCB0YXJnZXQpOworCQlnY19uNjRfc2VuZF9zdG9wX2JpdChnYywgdGFyZ2V0KTsKKworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgZ2NfbjY0X2luaXRfZmYoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgaSkKK3sKKwlzdHJ1Y3QgZ2Nfc3ViZGV2ICpzZGV2OworCWludCBlcnI7CisKKwlzZGV2ID0ga21hbGxvYyhzaXplb2YoKnNkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJc2Rldi0+aWR4ID0gaTsKKworCWlucHV0X3NldF9jYXBhYmlsaXR5KGRldiwgRVZfRkYsIEZGX1JVTUJMRSk7CisKKwllcnIgPSBpbnB1dF9mZl9jcmVhdGVfbWVtbGVzcyhkZXYsIHNkZXYsIGdjX242NF9wbGF5X2VmZmVjdCk7CisJaWYgKGVycikgeworCQlrZnJlZShzZGV2KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIE5FUy9TTkVTIHN1cHBvcnQuCiAgKi8KQEAgLTIxNCw5ICszNDEsMTEgQEAKICNkZWZpbmUgR0NfTkVTX0NMT0NLCTB4MDEKICNkZWZpbmUgR0NfTkVTX0xBVENICTB4MDIKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgZ2NfbmVzX2J5dGVzW10gPSB7IDAsIDEsIDIsIDMgfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGdjX3NuZXNfYnl0ZXNbXSA9IHsgOCwgMCwgMiwgMywgOSwgMSwgMTAsIDExIH07Ci1zdGF0aWMgc2hvcnQgZ2Nfc25lc19idG5bXSA9IHsgQlROX0EsIEJUTl9CLCBCVE5fU0VMRUNULCBCVE5fU1RBUlQsIEJUTl9YLCBCVE5fWSwgQlROX1RMLCBCVE5fVFIgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjX25lc19ieXRlc1tdID0geyAwLCAxLCAyLCAzIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY19zbmVzX2J5dGVzW10gPSB7IDgsIDAsIDIsIDMsIDksIDEsIDEwLCAxMSB9Oworc3RhdGljIGNvbnN0IHNob3J0IGdjX3NuZXNfYnRuW10gPSB7CisJQlROX0EsIEJUTl9CLCBCVE5fU0VMRUNULCBCVE5fU1RBUlQsIEJUTl9YLCBCVE5fWSwgQlROX1RMLCBCVE5fVFIKK307CiAKIC8qCiAgKiBnY19uZXNfcmVhZF9wYWNrZXQoKSByZWFkcyBhIE5FUy9TTkVTIHBhY2tldC4KQEAgLTI0NCw0MCArMzczLDUxIEBACiBzdGF0aWMgdm9pZCBnY19uZXNfcHJvY2Vzc19wYWNrZXQoc3RydWN0IGdjICpnYykKIHsKIAl1bnNpZ25lZCBjaGFyIGRhdGFbR0NfU05FU01PVVNFX0xFTkdUSF07CisJc3RydWN0IGdjX3BhZCAqcGFkOwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKIAlpbnQgaSwgaiwgcywgbGVuOwogCWNoYXIgeF9yZWwsIHlfcmVsOwogCi0JbGVuID0gZ2MtPnBhZHNbR0NfU05FU01PVVNFXSA/IEdDX1NORVNNT1VTRV9MRU5HVEggOgotCQkJKGdjLT5wYWRzW0dDX1NORVNdID8gR0NfU05FU19MRU5HVEggOiBHQ19ORVNfTEVOR1RIKTsKKwlsZW4gPSBnYy0+cGFkX2NvdW50W0dDX1NORVNNT1VTRV0gPyBHQ19TTkVTTU9VU0VfTEVOR1RIIDoKKwkJCShnYy0+cGFkX2NvdW50W0dDX1NORVNdID8gR0NfU05FU19MRU5HVEggOiBHQ19ORVNfTEVOR1RIKTsKIAogCWdjX25lc19yZWFkX3BhY2tldChnYywgbGVuLCBkYXRhKTsKIAogCWZvciAoaSA9IDA7IGkgPCBHQ19NQVhfREVWSUNFUzsgaSsrKSB7CiAKKwkJcGFkID0gJmdjLT5wYWRzW2ldOwogCQlkZXYgPSBnYy0+ZGV2W2ldOwotCQlpZiAoIWRldikKLQkJCWNvbnRpbnVlOwotCiAJCXMgPSBnY19zdGF0dXNfYml0W2ldOwogCi0JCWlmIChzICYgKGdjLT5wYWRzW0dDX05FU10gfCBnYy0+cGFkc1tHQ19TTkVTXSkpIHsKKwkJc3dpdGNoIChwYWQtPnR5cGUpIHsKKworCQljYXNlIEdDX05FUzoKKwogCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCAhKHMgJiBkYXRhWzZdKSAtICEocyAmIGRhdGFbN10pKTsKIAkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgIShzICYgZGF0YVs0XSkgLSAhKHMgJiBkYXRhWzVdKSk7Ci0JCX0KIAotCQlpZiAocyAmIGdjLT5wYWRzW0dDX05FU10pCiAJCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKQotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBnY19zbmVzX2J0bltqXSwgcyAmIGRhdGFbZ2NfbmVzX2J5dGVzW2pdXSk7CisJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGdjX3NuZXNfYnRuW2pdLAorCQkJCQkJIHMgJiBkYXRhW2djX25lc19ieXRlc1tqXV0pOworCQkJaW5wdXRfc3luYyhkZXYpOworCQkJYnJlYWs7CiAKLQkJaWYgKHMgJiBnYy0+cGFkc1tHQ19TTkVTXSkKKwkJY2FzZSBHQ19TTkVTOgorCisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsICEocyAmIGRhdGFbNl0pIC0gIShzICYgZGF0YVs3XSkpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCAhKHMgJiBkYXRhWzRdKSAtICEocyAmIGRhdGFbNV0pKTsKKwogCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgZ2Nfc25lc19idG5bal0sIHMgJiBkYXRhW2djX3NuZXNfYnl0ZXNbal1dKTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgZ2Nfc25lc19idG5bal0sCisJCQkJCQkgcyAmIGRhdGFbZ2Nfc25lc19ieXRlc1tqXV0pOworCQkJaW5wdXRfc3luYyhkZXYpOworCQkJYnJlYWs7CiAKLQkJaWYgKHMgJiBnYy0+cGFkc1tHQ19TTkVTTU9VU0VdKSB7CisJCWNhc2UgR0NfU05FU01PVVNFOgogCQkJLyoKLQkJCSAqIFRoZSA0IHVudXNlZCBiaXRzIGZyb20gU05FUyBjb250cm9sbGVycyBhcHBlYXIgdG8gYmUgSUQgYml0cwotCQkJICogc28gdXNlIHRoZW0gdG8gbWFrZSBzdXJlIGl3ZSBhcmUgZGVhbGluZyB3aXRoIGEgbW91c2UuCisJCQkgKiBUaGUgNCB1bnVzZWQgYml0cyBmcm9tIFNORVMgY29udHJvbGxlcnMgYXBwZWFyCisJCQkgKiB0byBiZSBJRCBiaXRzIHNvIHVzZSB0aGVtIHRvIG1ha2Ugc3VyZSB3ZSBhcmUKKwkJCSAqIGRlYWxpbmcgd2l0aCBhIG1vdXNlLgogCQkJICogZ2FtZXBhZCBpcyBjb25uZWN0ZWQuIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlCiAJCQkgKiBteSBTTkVTIGdhbWVwYWQgc2VuZHMgMSdzIGZvciBiaXRzIDE2LTMxLCB3aGljaAogCQkJICogY2F1c2UgdGhlIG1vdXNlIHBvaW50ZXIgdG8gcXVpY2tseSBtb3ZlIHRvIHRoZQpAQCAtMzEwLDkgKzQ1MCwxNCBAQAogCQkJCQkJeV9yZWwgPSAteV9yZWw7CiAJCQkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgeV9yZWwpOwogCQkJCX0KKworCQkJCWlucHV0X3N5bmMoZGV2KTsKIAkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKIAkJfQotCQlpbnB1dF9zeW5jKGRldik7CiAJfQogfQogCkBAIC0zNDAsMjkgKzQ4NSwzNSBAQAogc3RhdGljIHZvaWQgZ2NfbXVsdGlfcHJvY2Vzc19wYWNrZXQoc3RydWN0IGdjICpnYykKIHsKIAl1bnNpZ25lZCBjaGFyIGRhdGFbR0NfTVVMVEkyX0xFTkdUSF07CisJaW50IGRhdGFfbGVuID0gZ2MtPnBhZF9jb3VudFtHQ19NVUxUSTJdID8gR0NfTVVMVEkyX0xFTkdUSCA6IEdDX01VTFRJX0xFTkdUSDsKKwlzdHJ1Y3QgZ2NfcGFkICpwYWQ7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2OwogCWludCBpLCBzOwogCi0JZ2NfbXVsdGlfcmVhZF9wYWNrZXQoZ2MsIGdjLT5wYWRzW0dDX01VTFRJMl0gPyBHQ19NVUxUSTJfTEVOR1RIIDogR0NfTVVMVElfTEVOR1RILCBkYXRhKTsKKwlnY19tdWx0aV9yZWFkX3BhY2tldChnYywgZGF0YV9sZW4sIGRhdGEpOwogCiAJZm9yIChpID0gMDsgaSA8IEdDX01BWF9ERVZJQ0VTOyBpKyspIHsKLQotCQlkZXYgPSBnYy0+ZGV2W2ldOwotCQlpZiAoIWRldikKLQkJCWNvbnRpbnVlOwotCisJCXBhZCA9ICZnYy0+cGFkc1tpXTsKKwkJZGV2ID0gcGFkLT5kZXY7CiAJCXMgPSBnY19zdGF0dXNfYml0W2ldOwogCi0JCWlmIChzICYgKGdjLT5wYWRzW0dDX01VTFRJXSB8IGdjLT5wYWRzW0dDX01VTFRJMl0pKSB7Ci0JCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsICAhKHMgJiBkYXRhWzJdKSAtICEocyAmIGRhdGFbM10pKTsKLQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgICEocyAmIGRhdGFbMF0pIC0gIShzICYgZGF0YVsxXSkpOwotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UUklHR0VSLCBzICYgZGF0YVs0XSk7Ci0JCX0KLQotCQlpZiAocyAmIGdjLT5wYWRzW0dDX01VTFRJMl0pCisJCXN3aXRjaCAocGFkLT50eXBlKSB7CisJCWNhc2UgR0NfTVVMVEkyOgogCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9USFVNQiwgcyAmIGRhdGFbNV0pOworCQkJLyogZmFsbCB0aHJvdWdoICovCiAKLQkJaW5wdXRfc3luYyhkZXYpOworCQljYXNlIEdDX01VTFRJOgorCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLAorCQkJCQkgIShzICYgZGF0YVsyXSkgLSAhKHMgJiBkYXRhWzNdKSk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksCisJCQkJCSAhKHMgJiBkYXRhWzBdKSAtICEocyAmIGRhdGFbMV0pKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVFJJR0dFUiwgcyAmIGRhdGFbNF0pOworCQkJaW5wdXRfc3luYyhkZXYpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CiAJfQogfQogCkBAIC0zOTgsMzAgKzU0OSw0MSBAQAogbW9kdWxlX3BhcmFtX25hbWVkKHBzeF9kZWxheSwgZ2NfcHN4X2RlbGF5LCB1aW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocHN4X2RlbGF5LCAiRGVsYXkgd2hlbiBhY2Nlc3NpbmcgU29ueSBQU1ggY29udHJvbGxlciAodXNlY3MpIik7CiAKLXN0YXRpYyBzaG9ydCBnY19wc3hfYWJzW10gPSB7IEFCU19YLCBBQlNfWSwgQUJTX1JYLCBBQlNfUlksIEFCU19IQVQwWCwgQUJTX0hBVDBZIH07Ci1zdGF0aWMgc2hvcnQgZ2NfcHN4X2J0bltdID0geyBCVE5fVEwsIEJUTl9UUiwgQlROX1RMMiwgQlROX1RSMiwgQlROX0EsIEJUTl9CLCBCVE5fWCwgQlROX1ksCi0JCQkJQlROX1NUQVJULCBCVE5fU0VMRUNULCBCVE5fVEhVTUJMLCBCVE5fVEhVTUJSIH07Ci1zdGF0aWMgc2hvcnQgZ2NfcHN4X2Rkcl9idG5bXSA9IHsgQlROXzAsIEJUTl8xLCBCVE5fMiwgQlROXzMgfTsKK3N0YXRpYyBjb25zdCBzaG9ydCBnY19wc3hfYWJzW10gPSB7CisJQUJTX1gsIEFCU19ZLCBBQlNfUlgsIEFCU19SWSwgQUJTX0hBVDBYLCBBQlNfSEFUMFkKK307CitzdGF0aWMgY29uc3Qgc2hvcnQgZ2NfcHN4X2J0bltdID0geworCUJUTl9UTCwgQlROX1RSLCBCVE5fVEwyLCBCVE5fVFIyLCBCVE5fQSwgQlROX0IsIEJUTl9YLCBCVE5fWSwKKwlCVE5fU1RBUlQsIEJUTl9TRUxFQ1QsIEJUTl9USFVNQkwsIEJUTl9USFVNQlIKK307CitzdGF0aWMgY29uc3Qgc2hvcnQgZ2NfcHN4X2Rkcl9idG5bXSA9IHsgQlROXzAsIEJUTl8xLCBCVE5fMiwgQlROXzMgfTsKIAogLyoKICAqIGdjX3BzeF9jb21tYW5kKCkgd3JpdGVzIDhiaXQgY29tbWFuZCBhbmQgcmVhZHMgOGJpdCBkYXRhIGZyb20KICAqIHRoZSBwc3ggcGFkLgogICovCiAKLXN0YXRpYyB2b2lkIGdjX3BzeF9jb21tYW5kKHN0cnVjdCBnYyAqZ2MsIGludCBiLCB1bnNpZ25lZCBjaGFyIGRhdGFbR0NfTUFYX0RFVklDRVNdKQorc3RhdGljIHZvaWQgZ2NfcHN4X2NvbW1hbmQoc3RydWN0IGdjICpnYywgaW50IGIsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7CisJc3RydWN0IHBhcnBvcnQgKnBvcnQgPSBnYy0+cGQtPnBvcnQ7CiAJaW50IGksIGosIGNtZCwgcmVhZDsKIAotCWZvciAoaSA9IDA7IGkgPCBHQ19NQVhfREVWSUNFUzsgaSsrKQotCQlkYXRhW2ldID0gMDsKKwltZW1zZXQoZGF0YSwgMCwgR0NfTUFYX0RFVklDRVMpOwogCiAJZm9yIChpID0gMDsgaSA8IEdDX1BTWF9MRU5HVEg7IGkrKywgYiA+Pj0gMSkgewogCQljbWQgPSAoYiAmIDEpID8gR0NfUFNYX0NPTU1BTkQgOiAwOwotCQlwYXJwb3J0X3dyaXRlX2RhdGEoZ2MtPnBkLT5wb3J0LCBjbWQgfCBHQ19QU1hfUE9XRVIpOworCQlwYXJwb3J0X3dyaXRlX2RhdGEocG9ydCwgY21kIHwgR0NfUFNYX1BPV0VSKTsKIAkJdWRlbGF5KGdjX3BzeF9kZWxheSk7Ci0JCXJlYWQgPSBwYXJwb3J0X3JlYWRfc3RhdHVzKGdjLT5wZC0+cG9ydCkgXiAweDgwOwotCQlmb3IgKGogPSAwOyBqIDwgR0NfTUFYX0RFVklDRVM7IGorKykKLQkJCWRhdGFbal0gfD0gKHJlYWQgJiBnY19zdGF0dXNfYml0W2pdICYgKGdjLT5wYWRzW0dDX1BTWF0gfCBnYy0+cGFkc1tHQ19ERFJdKSkgPyAoMSA8PCBpKSA6IDA7CisKKwkJcmVhZCA9IHBhcnBvcnRfcmVhZF9zdGF0dXMocG9ydCkgXiAweDgwOworCisJCWZvciAoaiA9IDA7IGogPCBHQ19NQVhfREVWSUNFUzsgaisrKSB7CisJCQlzdHJ1Y3QgZ2NfcGFkICpwYWQgPSAmZ2MtPnBhZHNbaV07CisKKwkJCWlmIChwYWQtPnR5cGUgPT0gR0NfUFNYIHx8IHBhZC0+dHlwZSA9PSBHQ19ERFIpCisJCQkJZGF0YVtqXSB8PSAocmVhZCAmIGdjX3N0YXR1c19iaXRbal0pID8gKDEgPDwgaSkgOiAwOworCQl9CisKIAkJcGFycG9ydF93cml0ZV9kYXRhKGdjLT5wZC0+cG9ydCwgY21kIHwgR0NfUFNYX0NMT0NLIHwgR0NfUFNYX1BPV0VSKTsKIAkJdWRlbGF5KGdjX3BzeF9kZWxheSk7CiAJfQpAQCAtNDMyLDMxICs1OTQsNDAgQEAKICAqIGRldmljZSBpZGVudGlmaWVyIGNvZGUuCiAgKi8KIAotc3RhdGljIHZvaWQgZ2NfcHN4X3JlYWRfcGFja2V0KHN0cnVjdCBnYyAqZ2MsIHVuc2lnbmVkIGNoYXIgZGF0YVtHQ19NQVhfREVWSUNFU11bR0NfUFNYX0JZVEVTXSwKK3N0YXRpYyB2b2lkIGdjX3BzeF9yZWFkX3BhY2tldChzdHJ1Y3QgZ2MgKmdjLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgZGF0YVtHQ19NQVhfREVWSUNFU11bR0NfUFNYX0JZVEVTXSwKIAkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGlkW0dDX01BWF9ERVZJQ0VTXSkKIHsKIAlpbnQgaSwgaiwgbWF4X2xlbiA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyIGRhdGEyW0dDX01BWF9ERVZJQ0VTXTsKIAotCXBhcnBvcnRfd3JpdGVfZGF0YShnYy0+cGQtPnBvcnQsIEdDX1BTWF9DTE9DSyB8IEdDX1BTWF9TRUxFQ1QgfCBHQ19QU1hfUE9XRVIpOwkvKiBTZWxlY3QgcGFkICovCisJLyogU2VsZWN0IHBhZCAqLworCXBhcnBvcnRfd3JpdGVfZGF0YShnYy0+cGQtPnBvcnQsIEdDX1BTWF9DTE9DSyB8IEdDX1BTWF9TRUxFQ1QgfCBHQ19QU1hfUE9XRVIpOwogCXVkZWxheShnY19wc3hfZGVsYXkpOwotCXBhcnBvcnRfd3JpdGVfZGF0YShnYy0+cGQtPnBvcnQsIEdDX1BTWF9DTE9DSyB8IEdDX1BTWF9QT1dFUik7CQkJLyogRGVzZWxlY3QsIGJlZ2luIGNvbW1hbmQgKi8KKwkvKiBEZXNlbGVjdCwgYmVnaW4gY29tbWFuZCAqLworCXBhcnBvcnRfd3JpdGVfZGF0YShnYy0+cGQtPnBvcnQsIEdDX1BTWF9DTE9DSyB8IEdDX1BTWF9QT1dFUik7CiAJdWRlbGF5KGdjX3BzeF9kZWxheSk7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLQlnY19wc3hfY29tbWFuZChnYywgMHgwMSwgZGF0YTIpOwkJCQkJCS8qIEFjY2VzcyBwYWQgKi8KLQlnY19wc3hfY29tbWFuZChnYywgMHg0MiwgaWQpOwkJCQkJCQkvKiBHZXQgZGV2aWNlIGlkcyAqLwotCWdjX3BzeF9jb21tYW5kKGdjLCAwLCBkYXRhMik7CQkJCQkJCS8qIER1bXAgc3RhdHVzICovCisJZ2NfcHN4X2NvbW1hbmQoZ2MsIDB4MDEsIGRhdGEyKTsJLyogQWNjZXNzIHBhZCAqLworCWdjX3BzeF9jb21tYW5kKGdjLCAweDQyLCBpZCk7CQkvKiBHZXQgZGV2aWNlIGlkcyAqLworCWdjX3BzeF9jb21tYW5kKGdjLCAwLCBkYXRhMik7CQkvKiBEdW1wIHN0YXR1cyAqLwogCi0JZm9yIChpID0wOyBpIDwgR0NfTUFYX0RFVklDRVM7IGkrKykJCQkJCQkJCS8qIEZpbmQgdGhlIGxvbmdlc3QgcGFkICovCi0JCWlmKChnY19zdGF0dXNfYml0W2ldICYgKGdjLT5wYWRzW0dDX1BTWF0gfCBnYy0+cGFkc1tHQ19ERFJdKSkKLQkJCSYmIChHQ19QU1hfTEVOKGlkW2ldKSA+IG1heF9sZW4pCi0JCQkmJiAoR0NfUFNYX0xFTihpZFtpXSkgPD0gR0NfUFNYX0JZVEVTKSkKKwkvKiBGaW5kIHRoZSBsb25nZXN0IHBhZCAqLworCWZvciAoaSA9IDA7IGkgPCBHQ19NQVhfREVWSUNFUzsgaSsrKSB7CisJCXN0cnVjdCBnY19wYWQgKnBhZCA9ICZnYy0+cGFkc1tpXTsKKworCQlpZiAoKHBhZC0+dHlwZSA9PSBHQ19QU1ggfHwgcGFkLT50eXBlID09IEdDX0REUikgJiYKKwkJICAgIEdDX1BTWF9MRU4oaWRbaV0pID4gbWF4X2xlbiAmJgorCQkgICAgR0NfUFNYX0xFTihpZFtpXSkgPD0gR0NfUFNYX0JZVEVTKSB7CiAJCQltYXhfbGVuID0gR0NfUFNYX0xFTihpZFtpXSk7CisJCX0KKwl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgbWF4X2xlbjsgaSsrKSB7CQkJCQkJLyogUmVhZCBpbiBhbGwgdGhlIGRhdGEgKi8KKwkvKiBSZWFkIGluIGFsbCB0aGUgZGF0YSAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfbGVuOyBpKyspIHsKIAkJZ2NfcHN4X2NvbW1hbmQoZ2MsIDAsIGRhdGEyKTsKIAkJZm9yIChqID0gMDsgaiA8IEdDX01BWF9ERVZJQ0VTOyBqKyspCiAJCQlkYXRhW2pdW2ldID0gZGF0YTJbal07CkBAIC00NjYsODYgKzYzNywxMDQgQEAKIAogCXBhcnBvcnRfd3JpdGVfZGF0YShnYy0+cGQtPnBvcnQsIEdDX1BTWF9DTE9DSyB8IEdDX1BTWF9TRUxFQ1QgfCBHQ19QU1hfUE9XRVIpOwogCi0JZm9yKGkgPSAwOyBpIDwgR0NfTUFYX0RFVklDRVM7IGkrKykJCQkJCQkJCS8qIFNldCBpZCdzIHRvIHRoZSByZWFsIHZhbHVlICovCisJLyogU2V0IGlkJ3MgdG8gdGhlIHJlYWwgdmFsdWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgR0NfTUFYX0RFVklDRVM7IGkrKykKIAkJaWRbaV0gPSBHQ19QU1hfSUQoaWRbaV0pOwogfQogCitzdGF0aWMgdm9pZCBnY19wc3hfcmVwb3J0X29uZShzdHJ1Y3QgZ2NfcGFkICpwYWQsIHVuc2lnbmVkIGNoYXIgcHN4X3R5cGUsCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHBhZC0+ZGV2OworCWludCBpOworCisJc3dpdGNoIChwc3hfdHlwZSkgeworCisJY2FzZSBHQ19QU1hfUlVNQkxFOgorCisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVEhVTUJMLCB+ZGF0YVswXSAmIDB4MDQpOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RIVU1CUiwgfmRhdGFbMF0gJiAweDAyKTsKKworCWNhc2UgR0NfUFNYX05FR0NPTjoKKwljYXNlIEdDX1BTWF9BTkFMT0c6CisKKwkJaWYgKHBhZC0+dHlwZSA9PSBHQ19ERFIpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGdjX3BzeF9kZHJfYnRuW2ldLAorCQkJCQkJIH5kYXRhWzBdICYgKDB4MTAgPDwgaSkpOworCQl9IGVsc2UgeworCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgZ2NfcHN4X2Fic1tpICsgMl0sCisJCQkJCQkgZGF0YVtpICsgMl0pOworCisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsCisJCQkJISEoZGF0YVswXSAmIDB4ODApICogMTI4ICsgIShkYXRhWzBdICYgMHgyMCkgKiAxMjcpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLAorCQkJCSEhKGRhdGFbMF0gJiAweDEwKSAqIDEyOCArICEoZGF0YVswXSAmIDB4NDApICogMTI3KTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgZ2NfcHN4X2J0bltpXSwgfmRhdGFbMV0gJiAoMSA8PCBpKSk7CisKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVEFSVCwgIH5kYXRhWzBdICYgMHgwOCk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU0VMRUNULCB+ZGF0YVswXSAmIDB4MDEpOworCisJCWlucHV0X3N5bmMoZGV2KTsKKworCQlicmVhazsKKworCWNhc2UgR0NfUFNYX05PUk1BTDoKKworCQlpZiAocGFkLT50eXBlID09IEdDX0REUikgeworCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgZ2NfcHN4X2Rkcl9idG5baV0sCisJCQkJCQkgfmRhdGFbMF0gJiAoMHgxMCA8PCBpKSk7CisJCX0gZWxzZSB7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsCisJCQkJISEoZGF0YVswXSAmIDB4ODApICogMTI4ICsgIShkYXRhWzBdICYgMHgyMCkgKiAxMjcpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLAorCQkJCSEhKGRhdGFbMF0gJiAweDEwKSAqIDEyOCArICEoZGF0YVswXSAmIDB4NDApICogMTI3KTsKKworCQkJLyoKKwkJCSAqIEZvciBzb21lIHJlYXNvbiBpZiB0aGUgZXh0cmEgYXhlcyBhcmUgbGVmdCB1bnNldAorCQkJICogdGhleSBkcmlmdC4KKwkJCSAqIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIGdjX3BzeF9hYnNbaSArIDJdLCAxMjgpOworCQkJICogVGhpcyBuZWVkcyB0byBiZSBkZWJ1Z2dlZCBwcm9wZXJseSwKKwkJCSAqIG1heWJlIGZ1enogcHJvY2Vzc2luZyBuZWVkcyB0byBiZSBkb25lCisJCQkgKiBpbiBpbnB1dF9zeW5jKCkKKwkJCSAqCQkJCSAtLXZvanRlY2gKKwkJCSAqLworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBnY19wc3hfYnRuW2ldLCB+ZGF0YVsxXSAmICgxIDw8IGkpKTsKKworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1NUQVJULCAgfmRhdGFbMF0gJiAweDA4KTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TRUxFQ1QsIH5kYXRhWzBdICYgMHgwMSk7CisKKwkJaW5wdXRfc3luYyhkZXYpOworCisJCWJyZWFrOworCisJZGVmYXVsdDogLyogbm90IGEgcGFkLCBpZ25vcmUgKi8KKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgdm9pZCBnY19wc3hfcHJvY2Vzc19wYWNrZXQoc3RydWN0IGdjICpnYykKIHsKIAl1bnNpZ25lZCBjaGFyIGRhdGFbR0NfTUFYX0RFVklDRVNdW0dDX1BTWF9CWVRFU107CiAJdW5zaWduZWQgY2hhciBpZFtHQ19NQVhfREVWSUNFU107Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2OwotCWludCBpLCBqOworCXN0cnVjdCBnY19wYWQgKnBhZDsKKwlpbnQgaTsKIAogCWdjX3BzeF9yZWFkX3BhY2tldChnYywgZGF0YSwgaWQpOwogCiAJZm9yIChpID0gMDsgaSA8IEdDX01BWF9ERVZJQ0VTOyBpKyspIHsKLQotCQlkZXYgPSBnYy0+ZGV2W2ldOwotCQlpZiAoIWRldikKLQkJCWNvbnRpbnVlOwotCi0JCXN3aXRjaCAoaWRbaV0pIHsKLQotCQkJY2FzZSBHQ19QU1hfUlVNQkxFOgotCi0JCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9USFVNQkwsIH5kYXRhW2ldWzBdICYgMHgwNCk7Ci0JCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9USFVNQlIsIH5kYXRhW2ldWzBdICYgMHgwMik7Ci0KLQkJCWNhc2UgR0NfUFNYX05FR0NPTjoKLQkJCWNhc2UgR0NfUFNYX0FOQUxPRzoKLQotCQkJCWlmIChnYy0+cGFkc1tHQ19ERFJdICYgZ2Nfc3RhdHVzX2JpdFtpXSkgewotCQkJCQlmb3IoaiA9IDA7IGogPCA0OyBqKyspCi0JCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgZ2NfcHN4X2Rkcl9idG5bal0sIH5kYXRhW2ldWzBdICYgKDB4MTAgPDwgaikpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspCi0JCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgZ2NfcHN4X2Fic1tqICsgMl0sIGRhdGFbaV1baiArIDJdKTsKLQotCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIDEyOCArICEoZGF0YVtpXVswXSAmIDB4MjApICogMTI3IC0gIShkYXRhW2ldWzBdICYgMHg4MCkgKiAxMjgpOwotCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIDEyOCArICEoZGF0YVtpXVswXSAmIDB4NDApICogMTI3IC0gIShkYXRhW2ldWzBdICYgMHgxMCkgKiAxMjgpOwotCQkJCX0KLQotCQkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCi0JCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBnY19wc3hfYnRuW2pdLCB+ZGF0YVtpXVsxXSAmICgxIDw8IGopKTsKLQotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RBUlQsICB+ZGF0YVtpXVswXSAmIDB4MDgpOwotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU0VMRUNULCB+ZGF0YVtpXVswXSAmIDB4MDEpOwotCi0JCQkJaW5wdXRfc3luYyhkZXYpOwotCi0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgR0NfUFNYX05PUk1BTDoKLQkJCQlpZiAoZ2MtPnBhZHNbR0NfRERSXSAmIGdjX3N0YXR1c19iaXRbaV0pIHsKLQkJCQkJZm9yKGogPSAwOyBqIDwgNDsgaisrKQotCQkJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGdjX3BzeF9kZHJfYnRuW2pdLCB+ZGF0YVtpXVswXSAmICgweDEwIDw8IGopKTsKLQkJCQl9IGVsc2UgewotCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIDEyOCArICEoZGF0YVtpXVswXSAmIDB4MjApICogMTI3IC0gIShkYXRhW2ldWzBdICYgMHg4MCkgKiAxMjgpOwotCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIDEyOCArICEoZGF0YVtpXVswXSAmIDB4NDApICogMTI3IC0gIShkYXRhW2ldWzBdICYgMHgxMCkgKiAxMjgpOwotCi0JCQkJCS8qIGZvciBzb21lIHJlYXNvbiBpZiB0aGUgZXh0cmEgYXhlcyBhcmUgbGVmdCB1bnNldCB0aGV5IGRyaWZ0ICovCi0JCQkJCS8qIGZvciAoaiA9IDA7IGogPCA0OyBqKyspCi0JCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgZ2NfcHN4X2Fic1tqICsgMl0sIDEyOCk7Ci0JCQkJCSAqIFRoaXMgbmVlZHMgdG8gYmUgZGVidWdnZWQgcHJvcGVybHksCi0JCQkJCSAqIG1heWJlIGZ1enogcHJvY2Vzc2luZyBuZWVkcyB0byBiZSBkb25lIGluIGlucHV0X3N5bmMoKQotCQkJCQkgKgkJCQkgLS12b2p0ZWNoCi0JCQkJCSAqLwotCQkJCX0KLQotCQkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCi0JCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBnY19wc3hfYnRuW2pdLCB+ZGF0YVtpXVsxXSAmICgxIDw8IGopKTsKLQotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RBUlQsICB+ZGF0YVtpXVswXSAmIDB4MDgpOwotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU0VMRUNULCB+ZGF0YVtpXVswXSAmIDB4MDEpOwotCi0JCQkJaW5wdXRfc3luYyhkZXYpOwotCi0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMDogLyogbm90IGEgcGFkLCBpZ25vcmUgKi8KLQkJCQlicmVhazsKLQkJfQorCQlwYWQgPSAmZ2MtPnBhZHNbaV07CisJCWlmIChwYWQtPnR5cGUgPT0gR0NfUFNYIHx8IHBhZC0+dHlwZSA9PSBHQ19ERFIpCisJCQlnY19wc3hfcmVwb3J0X29uZShwYWQsIGlkW2ldLCBkYXRhW2ldKTsKIAl9CiB9CiAKQEAgLTU2MSwyOCArNzUwLDMxIEBACiAgKiBONjQgcGFkcyAtIG11c3QgYmUgcmVhZCBmaXJzdCwgYW55IHJlYWQgY29uZnVzZXMgdGhlbSBmb3IgMjAwIHVzCiAgKi8KIAotCWlmIChnYy0+cGFkc1tHQ19ONjRdKQorCWlmIChnYy0+cGFkX2NvdW50W0dDX042NF0pCiAJCWdjX242NF9wcm9jZXNzX3BhY2tldChnYyk7CiAKIC8qCiAgKiBORVMgYW5kIFNORVMgcGFkcyBvciBtb3VzZQogICovCiAKLQlpZiAoZ2MtPnBhZHNbR0NfTkVTXSB8fCBnYy0+cGFkc1tHQ19TTkVTXSB8fCBnYy0+cGFkc1tHQ19TTkVTTU9VU0VdKQorCWlmIChnYy0+cGFkX2NvdW50W0dDX05FU10gfHwKKwkgICAgZ2MtPnBhZF9jb3VudFtHQ19TTkVTXSB8fAorCSAgICBnYy0+cGFkX2NvdW50W0dDX1NORVNNT1VTRV0pIHsKIAkJZ2NfbmVzX3Byb2Nlc3NfcGFja2V0KGdjKTsKKwl9CiAKIC8qCiAgKiBNdWx0aSBhbmQgTXVsdGkyIGpveXN0aWNrcwogICovCiAKLQlpZiAoZ2MtPnBhZHNbR0NfTVVMVEldIHx8IGdjLT5wYWRzW0dDX01VTFRJMl0pCisJaWYgKGdjLT5wYWRfY291bnRbR0NfTVVMVEldIHx8IGdjLT5wYWRfY291bnRbR0NfTVVMVEkyXSkKIAkJZ2NfbXVsdGlfcHJvY2Vzc19wYWNrZXQoZ2MpOwogCiAvKgogICogUFNYIGNvbnRyb2xsZXJzCiAgKi8KIAotCWlmIChnYy0+cGFkc1tHQ19QU1hdIHx8IGdjLT5wYWRzW0dDX0REUl0pCisJaWYgKGdjLT5wYWRfY291bnRbR0NfUFNYXSB8fCBnYy0+cGFkX2NvdW50W0dDX0REUl0pCiAJCWdjX3BzeF9wcm9jZXNzX3BhY2tldChnYyk7CiAKIAltb2RfdGltZXIoJmdjLT50aW1lciwgamlmZmllcyArIEdDX1JFRlJFU0hfVElNRSk7CkBAIC02MjIsMjUgKzgxNCwyOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBnY19zZXR1cF9wYWQoc3RydWN0IGdjICpnYywgaW50IGlkeCwgaW50IHBhZF90eXBlKQogeworCXN0cnVjdCBnY19wYWQgKnBhZCA9ICZnYy0+cGFkc1tpZHhdOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlpbnQgaTsKLQotCWlmICghcGFkX3R5cGUpCi0JCXJldHVybiAwOworCWludCBlcnI7CiAKIAlpZiAocGFkX3R5cGUgPCAxIHx8IHBhZF90eXBlID4gR0NfTUFYKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImdhbWVjb24uYzogUGFkIHR5cGUgJWQgdW5rbm93blxuIiwgcGFkX3R5cGUpOworCQlwcl9lcnIoIlBhZCB0eXBlICVkIHVua25vd25cbiIsIHBhZF90eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZ2MtPmRldltpZHhdID0gaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJcGFkLT5kZXYgPSBpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlucHV0X2RldikgewotCQlwcmludGsoS0VSTl9FUlIgImdhbWVjb24uYzogTm90IGVub3VnaCBtZW1vcnkgZm9yIGlucHV0IGRldmljZVxuIik7CisJCXByX2VycigiTm90IGVub3VnaCBtZW1vcnkgZm9yIGlucHV0IGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCXBhZC0+dHlwZSA9IHBhZF90eXBlOworCisJc25wcmludGYocGFkLT5waHlzLCBzaXplb2YocGFkLT5waHlzKSwKKwkJICIlcy9pbnB1dCVkIiwgZ2MtPnBkLT5wb3J0LT5uYW1lLCBpZHgpOworCiAJaW5wdXRfZGV2LT5uYW1lID0gZ2NfbmFtZXNbcGFkX3R5cGVdOwotCWlucHV0X2Rldi0+cGh5cyA9IGdjLT5waHlzW2lkeF07CisJaW5wdXRfZGV2LT5waHlzID0gcGFkLT5waHlzOwogCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19QQVJQT1JUOwogCWlucHV0X2Rldi0+aWQudmVuZG9yID0gMHgwMDAxOwogCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IHBhZF90eXBlOwpAQCAtNjU5LDYxICs4NTUsNzYgQEAKIAl9IGVsc2UKIAkJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRUwpOwogCi0JZ2MtPnBhZHNbMF0gfD0gZ2Nfc3RhdHVzX2JpdFtpZHhdOwotCWdjLT5wYWRzW3BhZF90eXBlXSB8PSBnY19zdGF0dXNfYml0W2lkeF07CisJZ2MtPnBhZF9jb3VudFtwYWRfdHlwZV0rKzsKIAogCXN3aXRjaCAocGFkX3R5cGUpIHsKIAotCQljYXNlIEdDX042NDoKLQkJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotCQkJCXNldF9iaXQoZ2NfbjY0X2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCWNhc2UgR0NfTjY0OgorCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKwkJCV9fc2V0X2JpdChnY19uNjRfYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAKLQkJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YICsgaSwgLTEyNywgMTI2LCAwLCAyKTsKLQkJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19IQVQwWCArIGksIC0xLCAxLCAwLCAwKTsKLQkJCX0KKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCArIGksIC0xMjcsIDEyNiwgMCwgMik7CisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19IQVQwWCArIGksIC0xLCAxLCAwLCAwKTsKKwkJfQogCi0JCQlicmVhazsKKwkJZXJyID0gZ2NfbjY0X2luaXRfZmYoaW5wdXRfZGV2LCBpZHgpOworCQlpZiAoZXJyKSB7CisJCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gaW5pdGlhdGUgcnVtYmxlIGZvciBONjQgZGV2aWNlICVkXG4iLCBpZHgpOworCQkJZ290byBlcnJfZnJlZV9kZXY7CisJCX0KIAotCQljYXNlIEdDX1NORVNNT1VTRToKLQkJCXNldF9iaXQoQlROX0xFRlQsIGlucHV0X2Rldi0+a2V5Yml0KTsKLQkJCXNldF9iaXQoQlROX1JJR0hULCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCQlzZXRfYml0KFJFTF9YLCBpbnB1dF9kZXYtPnJlbGJpdCk7Ci0JCQlzZXRfYml0KFJFTF9ZLCBpbnB1dF9kZXYtPnJlbGJpdCk7Ci0JCQlicmVhazsKKwkJYnJlYWs7CiAKLQkJY2FzZSBHQ19TTkVTOgotCQkJZm9yIChpID0gNDsgaSA8IDg7IGkrKykKLQkJCQlzZXRfYml0KGdjX3NuZXNfYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCWNhc2UgR0NfTkVTOgotCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJCQlzZXRfYml0KGdjX3NuZXNfYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCQlicmVhazsKKwljYXNlIEdDX1NORVNNT1VTRToKKwkJX19zZXRfYml0KEJUTl9MRUZULCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fUklHSFQsIGlucHV0X2Rldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KFJFTF9YLCBpbnB1dF9kZXYtPnJlbGJpdCk7CisJCV9fc2V0X2JpdChSRUxfWSwgaW5wdXRfZGV2LT5yZWxiaXQpOworCQlicmVhazsKIAotCQljYXNlIEdDX01VTFRJMjoKLQkJCXNldF9iaXQoQlROX1RIVU1CLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCWNhc2UgR0NfTVVMVEk6Ci0JCQlzZXRfYml0KEJUTl9UUklHR0VSLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCQlicmVhazsKKwljYXNlIEdDX1NORVM6CisJCWZvciAoaSA9IDQ7IGkgPCA4OyBpKyspCisJCQlfX3NldF9iaXQoZ2Nfc25lc19idG5baV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKKwljYXNlIEdDX05FUzoKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCV9fc2V0X2JpdChnY19zbmVzX2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCQlicmVhazsKIAotCQljYXNlIEdDX1BTWDoKLQkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBnY19wc3hfYWJzW2ldLCA0LCAyNTIsIDAsIDIpOwotCQkJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspCi0JCQkJc2V0X2JpdChnY19wc3hfYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJY2FzZSBHQ19NVUxUSTI6CisJCV9fc2V0X2JpdChCVE5fVEhVTUIsIGlucHV0X2Rldi0+a2V5Yml0KTsKKwljYXNlIEdDX01VTFRJOgorCQlfX3NldF9iaXQoQlROX1RSSUdHRVIsIGlucHV0X2Rldi0+a2V5Yml0KTsKKwkJYnJlYWs7CiAKLQkJCWJyZWFrOworCWNhc2UgR0NfUFNYOgorCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LAorCQkJCQkgICAgIGdjX3BzeF9hYnNbaV0sIDQsIDI1MiwgMCwgMik7CisJCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKQorCQkJX19zZXRfYml0KGdjX3BzeF9idG5baV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKIAotCQljYXNlIEdDX0REUjoKLQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCQkJc2V0X2JpdChnY19wc3hfZGRyX2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwotCQkJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspCi0JCQkJc2V0X2JpdChnY19wc3hfYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCWJyZWFrOwogCi0JCQlicmVhazsKKwljYXNlIEdDX0REUjoKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCV9fc2V0X2JpdChnY19wc3hfZGRyX2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCQlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykKKwkJCV9fc2V0X2JpdChnY19wc3hfYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwkJYnJlYWs7CiAJfQogCisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHBhZC0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlX2RldjsKKwogCXJldHVybiAwOworCitlcnJfZnJlZV9kZXY6CisJaW5wdXRfZnJlZV9kZXZpY2UocGFkLT5kZXYpOworCXBhZC0+ZGV2ID0gTlVMTDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc3RydWN0IGdjIF9faW5pdCAqZ2NfcHJvYmUoaW50IHBhcnBvcnQsIGludCAqcGFkcywgaW50IG5fcGFkcykKQEAgLTcyMiw1MiArOTMzLDQ3IEBACiAJc3RydWN0IHBhcnBvcnQgKnBwOwogCXN0cnVjdCBwYXJkZXZpY2UgKnBkOwogCWludCBpOworCWludCBjb3VudCA9IDA7CiAJaW50IGVycjsKIAogCXBwID0gcGFycG9ydF9maW5kX251bWJlcihwYXJwb3J0KTsKIAlpZiAoIXBwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ2FtZWNvbi5jOiBubyBzdWNoIHBhcnBvcnRcbiIpOworCQlwcl9lcnIoIm5vIHN1Y2ggcGFycG9ydCAlZFxuIiwgcGFycG9ydCk7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKIAlwZCA9IHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlKHBwLCAiZ2FtZWNvbiIsIE5VTEwsIE5VTEwsIE5VTEwsIFBBUlBPUlRfREVWX0VYQ0wsIE5VTEwpOwogCWlmICghcGQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJnYW1lY29uLmM6IHBhcnBvcnQgYnVzeSBhbHJlYWR5IC0gbHAubyBsb2FkZWQ/XG4iKTsKKwkJcHJfZXJyKCJwYXJwb3J0IGJ1c3kgYWxyZWFkeSAtIGxwLm8gbG9hZGVkP1xuIik7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBlcnJfcHV0X3BwOwogCX0KIAogCWdjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFnYykgewotCQlwcmludGsoS0VSTl9FUlIgImdhbWVjb24uYzogTm90IGVub3VnaCBtZW1vcnlcbiIpOworCQlwcl9lcnIoIk5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfdW5yZWdfcGFyZGV2OwogCX0KIAogCW11dGV4X2luaXQoJmdjLT5tdXRleCk7CiAJZ2MtPnBkID0gcGQ7Ci0JaW5pdF90aW1lcigmZ2MtPnRpbWVyKTsKLQlnYy0+dGltZXIuZGF0YSA9IChsb25nKSBnYzsKLQlnYy0+dGltZXIuZnVuY3Rpb24gPSBnY190aW1lcjsKKwlzZXR1cF90aW1lcigmZ2MtPnRpbWVyLCBnY190aW1lciwgKGxvbmcpIGdjKTsKIAogCWZvciAoaSA9IDA7IGkgPCBuX3BhZHMgJiYgaSA8IEdDX01BWF9ERVZJQ0VTOyBpKyspIHsKIAkJaWYgKCFwYWRzW2ldKQogCQkJY29udGludWU7CiAKLQkJc25wcmludGYoZ2MtPnBoeXNbaV0sIHNpemVvZihnYy0+cGh5c1tpXSksCi0JCQkgIiVzL2lucHV0JWQiLCBnYy0+cGQtPnBvcnQtPm5hbWUsIGkpOwogCQllcnIgPSBnY19zZXR1cF9wYWQoZ2MsIGksIHBhZHNbaV0pOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfdW5yZWdfZGV2czsKIAotCQllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoZ2MtPmRldltpXSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9mcmVlX2RldjsKKwkJY291bnQrKzsKIAl9CiAKLQlpZiAoIWdjLT5wYWRzWzBdKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ2FtZWNvbi5jOiBObyB2YWxpZCBkZXZpY2VzIHNwZWNpZmllZFxuIik7CisJaWYgKGNvdW50ID09IDApIHsKKwkJcHJfZXJyKCJObyB2YWxpZCBkZXZpY2VzIHNwZWNpZmllZFxuIik7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX2ZyZWVfZ2M7CiAJfQpAQCAtNzc1LDEyICs5ODEsMTAgQEAKIAlwYXJwb3J0X3B1dF9wb3J0KHBwKTsKIAlyZXR1cm4gZ2M7CiAKLSBlcnJfZnJlZV9kZXY6Ci0JaW5wdXRfZnJlZV9kZXZpY2UoZ2MtPmRldltpXSk7CiAgZXJyX3VucmVnX2RldnM6CiAJd2hpbGUgKC0taSA+PSAwKQotCQlpZiAoZ2MtPmRldltpXSkKLQkJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGdjLT5kZXZbaV0pOworCQlpZiAoZ2MtPnBhZHNbaV0uZGV2KQorCQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZ2MtPnBhZHNbaV0uZGV2KTsKICBlcnJfZnJlZV9nYzoKIAlrZnJlZShnYyk7CiAgZXJyX3VucmVnX3BhcmRldjoKQEAgLTc5Niw4ICsxMDAwLDggQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBHQ19NQVhfREVWSUNFUzsgaSsrKQotCQlpZiAoZ2MtPmRldltpXSkKLQkJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGdjLT5kZXZbaV0pOworCQlpZiAoZ2MtPnBhZHNbaV0uZGV2KQorCQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZ2MtPnBhZHNbaV0uZGV2KTsKIAlwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKGdjLT5wZCk7CiAJa2ZyZWUoZ2MpOwogfQpAQCAtODEzLDcgKzEwMTcsNyBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKGdjX2NmZ1tpXS5uYXJncyA8IDIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiZ2FtZWNvbi5jOiBhdCBsZWFzdCBvbmUgZGV2aWNlIG11c3QgYmUgc3BlY2lmaWVkXG4iKTsKKwkJCXByX2VycigiYXQgbGVhc3Qgb25lIGRldmljZSBtdXN0IGJlIHNwZWNpZmllZFxuIik7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKaW5kZXggOGEyOGZiNy4uOWIzMzUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKQEAgLTg2LDkgKzg2LDggQEAKIAogLyogeGJveCBkLXBhZHMgc2hvdWxkIG1hcCB0byBidXR0b25zLCBhcyBpcyByZXF1aXJlZCBmb3IgRERSIHBhZHMKICAgIGJ1dCB3ZSBtYXAgdGhlbSB0byBheGVzIHdoZW4gcG9zc2libGUgdG8gc2ltcGxpZnkgdGhpbmdzICovCi0jZGVmaW5lIE1BUF9EUEFEX1RPX0JVVFRPTlMgICAgMAotI2RlZmluZSBNQVBfRFBBRF9UT19BWEVTICAgICAgIDEKLSNkZWZpbmUgTUFQX0RQQURfVU5LTk9XTiAgICAgICAyCisjZGVmaW5lIE1BUF9EUEFEX1RPX0JVVFRPTlMJCSgxIDw8IDApCisjZGVmaW5lIE1BUF9UUklHR0VSU19UT19CVVRUT05TCQkoMSA8PCAxKQogCiAjZGVmaW5lIFhUWVBFX1hCT1ggICAgICAgIDAKICNkZWZpbmUgWFRZUEVfWEJPWDM2MCAgICAgMQpAQCAtOTksNTcgKzk4LDYxIEBACiBtb2R1bGVfcGFyYW0oZHBhZF90b19idXR0b25zLCBib29sLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoZHBhZF90b19idXR0b25zLCAiTWFwIEQtUEFEIHRvIGJ1dHRvbnMgcmF0aGVyIHRoYW4gYXhlcyBmb3IgdW5rbm93biBwYWRzIik7CiAKK3N0YXRpYyBpbnQgdHJpZ2dlcnNfdG9fYnV0dG9uczsKK21vZHVsZV9wYXJhbSh0cmlnZ2Vyc190b19idXR0b25zLCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0ModHJpZ2dlcnNfdG9fYnV0dG9ucywgIk1hcCB0cmlnZ2VycyB0byBidXR0b25zIHJhdGhlciB0aGFuIGF4ZXMgZm9yIHVua25vd24gcGFkcyIpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHhwYWRfZGV2aWNlIHsKIAl1MTYgaWRWZW5kb3I7CiAJdTE2IGlkUHJvZHVjdDsKIAljaGFyICpuYW1lOwotCXU4IGRwYWRfbWFwcGluZzsKKwl1OCBtYXBwaW5nOwogCXU4IHh0eXBlOwogfSB4cGFkX2RldmljZVtdID0gewotCXsgMHgwNDVlLCAweDAyMDIsICJNaWNyb3NvZnQgWC1Cb3ggcGFkIHYxIChVUykiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA0NWUsIDB4MDI4OSwgIk1pY3Jvc29mdCBYLUJveCBwYWQgdjIgKFVTKSIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDQ1ZSwgMHgwMjg1LCAiTWljcm9zb2Z0IFgtQm94IHBhZCAoSmFwYW4pIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNDVlLCAweDAyODcsICJNaWNyb3NvZnQgWGJveCBDb250cm9sbGVyIFMiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCisJeyAweDA0NWUsIDB4MDIwMiwgIk1pY3Jvc29mdCBYLUJveCBwYWQgdjEgKFVTKSIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MDQ1ZSwgMHgwMjg5LCAiTWljcm9zb2Z0IFgtQm94IHBhZCB2MiAoVVMpIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwNDVlLCAweDAyODUsICJNaWNyb3NvZnQgWC1Cb3ggcGFkIChKYXBhbikiLCAwLCBYVFlQRV9YQk9YIH0sCisJeyAweDA0NWUsIDB4MDI4NywgIk1pY3Jvc29mdCBYYm94IENvbnRyb2xsZXIgUyIsIDAsIFhUWVBFX1hCT1ggfSwKIAl7IDB4MDQ1ZSwgMHgwNzE5LCAiWGJveCAzNjAgV2lyZWxlc3MgUmVjZWl2ZXIiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YMzYwVyB9LAogCXsgMHgwYzEyLCAweDg4MDksICJSZWRPY3RhbmUgWGJveCBEYW5jZSBQYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA0NGYsIDB4MGYwNywgIlRocnVzdG1hc3RlciwgSW5jLiBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNDZkLCAweGMyNDIsICJMb2dpdGVjaCBDaGlsbHN0cmVhbSBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWDM2MCB9LAotCXsgMHgwNDZkLCAweGNhODQsICJMb2dpdGVjaCBYYm94IENvcmRsZXNzIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA0NmQsIDB4Y2E4OCwgIkxvZ2l0ZWNoIENvbXBhY3QgQ29udHJvbGxlciBmb3IgWGJveCIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDVmZCwgMHgxMDA3LCAiTWFkIENhdHogQ29udHJvbGxlciAodW52ZXJpZmllZCkiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA1ZmQsIDB4MTA3YSwgIkludGVyQWN0ICdQb3dlclBhZCBQcm8nIFgtQm94IHBhZCAoR2VybWFueSkiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDUxNiwgIk1hZCBDYXR6IENvbnRyb2wgUGFkIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNzM4LCAweDQ1MjIsICJNYWQgQ2F0eiBMdW1pQ09OIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwNzM4LCAweDQ1MjYsICJNYWQgQ2F0eiBDb250cm9sIFBhZCBQcm8iLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDUzNiwgIk1hZCBDYXR6IE1pY3JvQ09OIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAorCXsgMHgwNDRmLCAweDBmMDcsICJUaHJ1c3RtYXN0ZXIsIEluYy4gQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MDQ2ZCwgMHhjMjQyLCAiTG9naXRlY2ggQ2hpbGxzdHJlYW0gQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1gzNjAgfSwKKwl7IDB4MDQ2ZCwgMHhjYTg0LCAiTG9naXRlY2ggWGJveCBDb3JkbGVzcyBDb250cm9sbGVyIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwNDZkLCAweGNhODgsICJMb2dpdGVjaCBDb21wYWN0IENvbnRyb2xsZXIgZm9yIFhib3giLCAwLCBYVFlQRV9YQk9YIH0sCisJeyAweDA1ZmQsIDB4MTAwNywgIk1hZCBDYXR6IENvbnRyb2xsZXIgKHVudmVyaWZpZWQpIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwNWZkLCAweDEwN2EsICJJbnRlckFjdCAnUG93ZXJQYWQgUHJvJyBYLUJveCBwYWQgKEdlcm1hbnkpIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwNzM4LCAweDQ1MTYsICJNYWQgQ2F0eiBDb250cm9sIFBhZCIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MDczOCwgMHg0NTIyLCAiTWFkIENhdHogTHVtaUNPTiIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MDczOCwgMHg0NTI2LCAiTWFkIENhdHogQ29udHJvbCBQYWQgUHJvIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwNzM4LCAweDQ1MzYsICJNYWQgQ2F0eiBNaWNyb0NPTiIsIDAsIFhUWVBFX1hCT1ggfSwKIAl7IDB4MDczOCwgMHg0NTQwLCAiTWFkIENhdHogQmVhdCBQYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCi0JeyAweDA3MzgsIDB4NDU1NiwgIk1hZCBDYXR6IEx5bnggV2lyZWxlc3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MDczOCwgMHg0NzE2LCAiTWFkIENhdHogV2lyZWQgWGJveCAzNjAgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAgfSwKLQl7IDB4MDczOCwgMHg0NzM4LCAiTWFkIENhdHogV2lyZWQgWGJveCAzNjAgQ29udHJvbGxlciAoU0ZJVikiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCisJeyAweDA3MzgsIDB4NDU1NiwgIk1hZCBDYXR6IEx5bnggV2lyZWxlc3MgQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MDczOCwgMHg0NzE2LCAiTWFkIENhdHogV2lyZWQgWGJveCAzNjAgQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1gzNjAgfSwKKwl7IDB4MDczOCwgMHg0NzM4LCAiTWFkIENhdHogV2lyZWQgWGJveCAzNjAgQ29udHJvbGxlciAoU0ZJVikiLCBNQVBfVFJJR0dFUlNfVE9fQlVUVE9OUywgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHgwNzM4LCAweDYwNDAsICJNYWQgQ2F0eiBCZWF0IFBhZCBQcm8iLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCi0JeyAweDBjMTIsIDB4ODgwMiwgIlplcm9wbHVzIFhib3ggQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGMxMiwgMHg4ODBhLCAiUGVsaWNhbiBFY2xpcHNlIFBMLTIwMjMiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDBjMTIsIDB4ODgxMCwgIlplcm9wbHVzIFhib3ggQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGMxMiwgMHg5OTAyLCAiSEFNQSBWaWJyYVggLSAqRkFVTFRZIEhBUkRXQVJFKiIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGU0YywgMHgxMDk3LCAiUmFkaWNhIEdhbWVzdGVyIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDBlNGMsIDB4MjM5MCwgIlJhZGljYSBHYW1lcyBKdGVjaCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwZTZmLCAweDAwMDMsICJMb2dpYzMgRnJlZWJpcmQgd2lyZWxlc3MgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MGU2ZiwgMHgwMDA1LCAiRWNsaXBzZSB3aXJlbGVzcyBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwZTZmLCAweDAwMDYsICJFZGdlIHdpcmVsZXNzIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDBlNmYsIDB4MDAwNiwgIlBlbGljYW4gJ1RTWicgV2lyZWQgWGJveCAzNjAgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAgfSwKLQl7IDB4MGU4ZiwgMHgwMjAxLCAiU21hcnRKb3kgRnJhZyBYcGFkL1BTMiBhZGFwdG9yIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAotCXsgMHgwZjMwLCAweDAyMDIsICJKb3l0ZWNoIEFkdmFuY2VkIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDBmMzAsIDB4ODg4OCwgIkJpZ0JlbiBYQk1pbmlQYWQgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKLQl7IDB4MTAyYywgMHhmZjBjLCAiSm95dGVjaCBXaXJlbGVzcyBBZHZhbmNlZCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAorCXsgMHgwYzEyLCAweDg4MDIsICJaZXJvcGx1cyBYYm94IENvbnRyb2xsZXIiLCAwLCBYVFlQRV9YQk9YIH0sCisJeyAweDBjMTIsIDB4ODgwYSwgIlBlbGljYW4gRWNsaXBzZSBQTC0yMDIzIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwYzEyLCAweDg4MTAsICJaZXJvcGx1cyBYYm94IENvbnRyb2xsZXIiLCAwLCBYVFlQRV9YQk9YIH0sCisJeyAweDBjMTIsIDB4OTkwMiwgIkhBTUEgVmlicmFYIC0gKkZBVUxUWSBIQVJEV0FSRSoiLCAwLCBYVFlQRV9YQk9YIH0sCisJeyAweDBlNGMsIDB4MTA5NywgIlJhZGljYSBHYW1lc3RlciBDb250cm9sbGVyIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwZTRjLCAweDIzOTAsICJSYWRpY2EgR2FtZXMgSnRlY2ggQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MGU2ZiwgMHgwMDAzLCAiTG9naWMzIEZyZWViaXJkIHdpcmVsZXNzIENvbnRyb2xsZXIiLCAwLCBYVFlQRV9YQk9YIH0sCisJeyAweDBlNmYsIDB4MDAwNSwgIkVjbGlwc2Ugd2lyZWxlc3MgQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MGU2ZiwgMHgwMDA2LCAiRWRnZSB3aXJlbGVzcyBDb250cm9sbGVyIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwZTZmLCAweDAwMDYsICJQZWxpY2FuICdUU1onIFdpcmVkIFhib3ggMzYwIENvbnRyb2xsZXIiLCAwLCBYVFlQRV9YQk9YMzYwIH0sCisJeyAweDBlOGYsIDB4MDIwMSwgIlNtYXJ0Sm95IEZyYWcgWHBhZC9QUzIgYWRhcHRvciIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MGYzMCwgMHgwMjAyLCAiSm95dGVjaCBBZHZhbmNlZCBDb250cm9sbGVyIiwgMCwgWFRZUEVfWEJPWCB9LAorCXsgMHgwZjMwLCAweDg4ODgsICJCaWdCZW4gWEJNaW5pUGFkIENvbnRyb2xsZXIiLCAwLCBYVFlQRV9YQk9YIH0sCisJeyAweDEwMmMsIDB4ZmYwYywgIkpveXRlY2ggV2lyZWxlc3MgQWR2YW5jZWQgQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1ggfSwKIAl7IDB4MTJhYiwgMHg4ODA5LCAiWGJveCBERFIgZGFuY2VwYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCi0JeyAweDE0MzAsIDB4NDc0OCwgIlJlZE9jdGFuZSBHdWl0YXIgSGVybyBYLXBsb3JlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAgfSwKKwl7IDB4MTQzMCwgMHg0NzQ4LCAiUmVkT2N0YW5lIEd1aXRhciBIZXJvIFgtcGxvcmVyIiwgMCwgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHgxNDMwLCAweDg4ODgsICJUWDY1MDArIERhbmNlIFBhZCAoZmlyc3QgZ2VuZXJhdGlvbikiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCi0JeyAweDE0NmIsIDB4MDYwMSwgIkJpZ0JlbiBJbnRlcmFjdGl2ZSBYQk9YIDM2MCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWDM2MCB9LAotCXsgMHgwNDVlLCAweDAyOGUsICJNaWNyb3NvZnQgWC1Cb3ggMzYwIHBhZCIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAgfSwKKwl7IDB4MTQ2YiwgMHgwNjAxLCAiQmlnQmVuIEludGVyYWN0aXZlIFhCT1ggMzYwIENvbnRyb2xsZXIiLCAwLCBYVFlQRV9YQk9YMzYwIH0sCisJeyAweDA0NWUsIDB4MDI4ZSwgIk1pY3Jvc29mdCBYLUJveCAzNjAgcGFkIiwgMCwgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHgxYmFkLCAweDAwMDMsICJIYXJtb25peCBSb2NrIEJhbmQgRHJ1bWtpdCIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1gzNjAgfSwKLQl7IDB4MGYwZCwgMHgwMDE2LCAiSG9yaSBSZWFsIEFyY2FkZSBQcm8uRVgiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCi0JeyAweGZmZmYsIDB4ZmZmZiwgIkNoaW5lc2UtbWFkZSBYYm94IENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YIH0sCi0JeyAweDAwMDAsIDB4MDAwMCwgIkdlbmVyaWMgWC1Cb3ggcGFkIiwgTUFQX0RQQURfVU5LTk9XTiwgWFRZUEVfVU5LTk9XTiB9CisJeyAweDBmMGQsIDB4MDAxNiwgIkhvcmkgUmVhbCBBcmNhZGUgUHJvLkVYIiwgTUFQX1RSSUdHRVJTX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1gzNjAgfSwKKwl7IDB4ZmZmZiwgMHhmZmZmLCAiQ2hpbmVzZS1tYWRlIFhib3ggQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MDAwMCwgMHgwMDAwLCAiR2VuZXJpYyBYLUJveCBwYWQiLCAwLCBYVFlQRV9VTktOT1dOIH0KIH07CiAKIC8qIGJ1dHRvbnMgc2hhcmVkIHdpdGggeGJveCBhbmQgeGJveDM2MCAqLwpAQCAtMTY1LDEzICsxNjgsMjAgQEAKIAktMQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi0vKiBvbmx5IHVzZWQgaWYgTUFQX0RQQURfVE9fQlVUVE9OUyAqLworLyogdXNlZCB3aGVuIGRwYWQgaXMgbWFwcGVkIHRvIG51dHRvbnMgKi8KIHN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBhZF9idG5fcGFkW10gPSB7CiAJQlROX0xFRlQsIEJUTl9SSUdIVCwJCS8qIGQtcGFkIGxlZnQsIHJpZ2h0ICovCiAJQlROXzAsIEJUTl8xLAkJCS8qIGQtcGFkIHVwLCBkb3duIChYWFggbmFtZXM/PykgKi8KIAktMQkJCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAorLyogdXNlZCB3aGVuIHRyaWdnZXJzIGFyZSBtYXBwZWQgdG8gYnV0dG9ucyAqLworc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCB4cGFkX2J0bl90cmlnZ2Vyc1tdID0geworCUJUTl9UTDIsIEJUTl9UUjIsCQkvKiB0cmlnZ2VycyBsZWZ0L3JpZ2h0ICovCisJLTEKK307CisKKwogc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCB4cGFkMzYwX2J0bltdID0geyAgLyogYnV0dG9ucyBmb3IgeDM2MCBjb250cm9sbGVyICovCiAJQlROX1RMLCBCVE5fVFIsCQkvKiBCdXR0b24gTEIvUkIgKi8KIAlCVE5fTU9ERSwJCS8qIFRoZSBiaWcgWCBidXR0b24gKi8KQEAgLTE4MSwxNiArMTkxLDIxIEBACiBzdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0IHhwYWRfYWJzW10gPSB7CiAJQUJTX1gsIEFCU19ZLAkJLyogbGVmdCBzdGljayAqLwogCUFCU19SWCwgQUJTX1JZLAkJLyogcmlnaHQgc3RpY2sgKi8KLQlBQlNfWiwgQUJTX1JaLAkJLyogdHJpZ2dlcnMgbGVmdC9yaWdodCAqLwogCS0xCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLS8qIG9ubHkgdXNlZCBpZiBNQVBfRFBBRF9UT19BWEVTICovCisvKiB1c2VkIHdoZW4gZHBhZCBpcyBtYXBwZWQgdG8gYXhlcyAqLwogc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCB4cGFkX2Fic19wYWRbXSA9IHsKIAlBQlNfSEFUMFgsIEFCU19IQVQwWSwJLyogZC1wYWQgYXhlcyAqLwogCS0xCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKKy8qIHVzZWQgd2hlbiB0cmlnZ2VycyBhcmUgbWFwcGVkIHRvIGF4ZXMgKi8KK3N0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgeHBhZF9hYnNfdHJpZ2dlcnNbXSA9IHsKKwlBQlNfWiwgQUJTX1JaLAkJLyogdHJpZ2dlcnMgbGVmdC9yaWdodCAqLworCS0xCit9OworCiAvKiBYYm94IDM2MCBoYXMgYSB2ZW5kb3Itc3BlY2lmaWMgY2xhc3MsIHNvIHdlIGNhbm5vdCBtYXRjaCBpdCB3aXRoIG9ubHkKICAqIFVTQl9JTlRFUkZBQ0VfSU5GTyAoYWxzbyBzcGVjaWZpY2FsbHkgcmVmdXNlZCBieSBVU0Igc3Vic3lzdGVtKSwgc28gd2UKICAqIG1hdGNoIGFnYWluc3QgdmVuZG9yIGlkIGFzIHdlbGwuIFdpcmVkIFhib3ggMzYwIGRldmljZXMgaGF2ZSBwcm90b2NvbCAxLApAQCAtMjQ2LDcgKzI2MSw3IEBACiAKIAljaGFyIHBoeXNbNjRdOwkJCS8qIHBoeXNpY2FsIGRldmljZSBwYXRoICovCiAKLQlpbnQgZHBhZF9tYXBwaW5nOwkJLyogbWFwIGQtcGFkIHRvIGJ1dHRvbnMgb3IgdG8gYXhlcyAqLworCWludCBtYXBwaW5nOwkJCS8qIG1hcCBkLXBhZCB0byBidXR0b25zIG9yIHRvIGF4ZXMgKi8KIAlpbnQgeHR5cGU7CQkJLyogdHlwZSBvZiB4Ym94IGRldmljZSAqLwogfTsKIApAQCAtMjc3LDIwICsyOTIsMjUgQEAKIAkJCSB+KF9fczE2KSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShkYXRhICsgMTgpKSk7CiAKIAkvKiB0cmlnZ2VycyBsZWZ0L3JpZ2h0ICovCi0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19aLCBkYXRhWzEwXSk7Ci0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWiwgZGF0YVsxMV0pOworCWlmICh4cGFkLT5tYXBwaW5nICYgTUFQX1RSSUdHRVJTX1RPX0JVVFRPTlMpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UTDIsIGRhdGFbMTBdKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UUjIsIGRhdGFbMTFdKTsKKwl9IGVsc2UgeworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1osIGRhdGFbMTBdKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWiwgZGF0YVsxMV0pOworCX0KIAogCS8qIGRpZ2l0YWwgcGFkICovCi0JaWYgKHhwYWQtPmRwYWRfbWFwcGluZyA9PSBNQVBfRFBBRF9UT19BWEVTKSB7Ci0JCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfSEFUMFgsCi0JCQkJICEhKGRhdGFbMl0gJiAweDA4KSAtICEhKGRhdGFbMl0gJiAweDA0KSk7Ci0JCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfSEFUMFksCi0JCQkJICEhKGRhdGFbMl0gJiAweDAyKSAtICEhKGRhdGFbMl0gJiAweDAxKSk7Ci0JfSBlbHNlIC8qIHhwYWQtPmRwYWRfbWFwcGluZyA9PSBNQVBfRFBBRF9UT19CVVRUT05TICovIHsKKwlpZiAoeHBhZC0+bWFwcGluZyAmIE1BUF9EUEFEX1RPX0JVVFRPTlMpIHsKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9MRUZULCAgZGF0YVsyXSAmIDB4MDQpOwogCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCBkYXRhWzJdICYgMHgwOCk7CiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMCwgICAgIGRhdGFbMl0gJiAweDAxKTsgLyogdXAgKi8KIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl8xLCAgICAgZGF0YVsyXSAmIDB4MDIpOyAvKiBkb3duICovCisJfSBlbHNlIHsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19IQVQwWCwKKwkJCQkgISEoZGF0YVsyXSAmIDB4MDgpIC0gISEoZGF0YVsyXSAmIDB4MDQpKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19IQVQwWSwKKwkJCQkgISEoZGF0YVsyXSAmIDB4MDIpIC0gISEoZGF0YVsyXSAmIDB4MDEpKTsKIAl9CiAKIAkvKiBzdGFydC9iYWNrIGJ1dHRvbnMgYW5kIHN0aWNrIHByZXNzIGxlZnQvcmlnaHQgKi8KQEAgLTMyOCwxNyArMzQ4LDE3IEBACiAJc3RydWN0IGlucHV0X2RldiAqZGV2ID0geHBhZC0+ZGV2OwogCiAJLyogZGlnaXRhbCBwYWQgKi8KLQlpZiAoeHBhZC0+ZHBhZF9tYXBwaW5nID09IE1BUF9EUEFEX1RPX0FYRVMpIHsKLQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19IQVQwWCwKLQkJCQkgISEoZGF0YVsyXSAmIDB4MDgpIC0gISEoZGF0YVsyXSAmIDB4MDQpKTsKLQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19IQVQwWSwKLQkJCQkgISEoZGF0YVsyXSAmIDB4MDIpIC0gISEoZGF0YVsyXSAmIDB4MDEpKTsKLQl9IGVsc2UgaWYgKHhwYWQtPmRwYWRfbWFwcGluZyA9PSBNQVBfRFBBRF9UT19CVVRUT05TKSB7CisJaWYgKHhwYWQtPm1hcHBpbmcgJiBNQVBfRFBBRF9UT19CVVRUT05TKSB7CiAJCS8qIGRwYWQgYXMgYnV0dG9ucyAocmlnaHQsIGxlZnQsIGRvd24sIHVwKSAqLwogCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsIGRhdGFbMl0gJiAweDA0KTsKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9SSUdIVCwgZGF0YVsyXSAmIDB4MDgpOwogCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzAsIGRhdGFbMl0gJiAweDAxKTsJLyogdXAgKi8KIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl8xLCBkYXRhWzJdICYgMHgwMik7CS8qIGRvd24gKi8KKwl9IGVsc2UgeworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX0hBVDBYLAorCQkJCSAhIShkYXRhWzJdICYgMHgwOCkgLSAhIShkYXRhWzJdICYgMHgwNCkpOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX0hBVDBZLAorCQkJCSAhIShkYXRhWzJdICYgMHgwMikgLSAhIShkYXRhWzJdICYgMHgwMSkpOwogCX0KIAogCS8qIHN0YXJ0L2JhY2sgYnV0dG9ucyAqLwpAQCAtMzcxLDggKzM5MSwxMyBAQAogCQkJIH4oX19zMTYpIGxlMTZfdG9fY3B1cCgoX19sZTE2ICopKGRhdGEgKyAxMikpKTsKIAogCS8qIHRyaWdnZXJzIGxlZnQvcmlnaHQgKi8KLQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1osIGRhdGFbNF0pOwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlosIGRhdGFbNV0pOworCWlmICh4cGFkLT5tYXBwaW5nICYgTUFQX1RSSUdHRVJTX1RPX0JVVFRPTlMpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UTDIsIGRhdGFbNF0pOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RSMiwgZGF0YVs1XSk7CisJfSBlbHNlIHsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19aLCBkYXRhWzRdKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWiwgZGF0YVs1XSk7CisJfQogCiAJaW5wdXRfc3luYyhkZXYpOwogfQpAQCAtNTA1LDcgKzUzMCw3IEBACiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9pcnFfb3V0OwogCWludCBlcnJvciA9IC1FTk9NRU07CiAKLQlpZiAoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCkKKwlpZiAoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCAmJiB4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YKQogCQlyZXR1cm4gMDsKIAogCXhwYWQtPm9kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyh4cGFkLT51ZGV2LCBYUEFEX1BLVF9MRU4sCkBAIC01MzUsMTMgKzU2MCwxMyBAQAogCiBzdGF0aWMgdm9pZCB4cGFkX3N0b3Bfb3V0cHV0KHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKIHsKLQlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MCkKKwlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MCB8fCB4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YKQogCQl1c2Jfa2lsbF91cmIoeHBhZC0+aXJxX291dCk7CiB9CiAKIHN0YXRpYyB2b2lkIHhwYWRfZGVpbml0X291dHB1dChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpCiB7Ci0JaWYgKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjApIHsKKwlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MCB8fCB4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YKSB7CiAJCXVzYl9mcmVlX3VyYih4cGFkLT5pcnFfb3V0KTsKIAkJdXNiX2J1ZmZlcl9mcmVlKHhwYWQtPnVkZXYsIFhQQURfUEtUX0xFTiwKIAkJCQl4cGFkLT5vZGF0YSwgeHBhZC0+b2RhdGFfZG1hKTsKQEAgLTU1NCwyNCArNTc5LDQ1IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19KT1lTVElDS19YUEFEX0ZGCi1zdGF0aWMgaW50IHhwYWRfcGxheV9lZmZlY3Qoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAotCQkJICAgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKK3N0YXRpYyBpbnQgeHBhZF9wbGF5X2VmZmVjdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKIHsKIAlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKGVmZmVjdC0+dHlwZSA9PSBGRl9SVU1CTEUpIHsKIAkJX191MTYgc3Ryb25nID0gZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlOwogCQlfX3UxNiB3ZWFrID0gZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKLQkJeHBhZC0+b2RhdGFbMF0gPSAweDAwOwotCQl4cGFkLT5vZGF0YVsxXSA9IDB4MDg7Ci0JCXhwYWQtPm9kYXRhWzJdID0gMHgwMDsKLQkJeHBhZC0+b2RhdGFbM10gPSBzdHJvbmcgLyAyNTY7Ci0JCXhwYWQtPm9kYXRhWzRdID0gd2VhayAvIDI1NjsKLQkJeHBhZC0+b2RhdGFbNV0gPSAweDAwOwotCQl4cGFkLT5vZGF0YVs2XSA9IDB4MDA7Ci0JCXhwYWQtPm9kYXRhWzddID0gMHgwMDsKLQkJeHBhZC0+aXJxX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7Ci0JCXVzYl9zdWJtaXRfdXJiKHhwYWQtPmlycV9vdXQsIEdGUF9BVE9NSUMpOworCisJCXN3aXRjaCAoeHBhZC0+eHR5cGUpIHsKKworCQljYXNlIFhUWVBFX1hCT1g6CisJCQl4cGFkLT5vZGF0YVswXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVsxXSA9IDB4MDY7CisJCQl4cGFkLT5vZGF0YVsyXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVszXSA9IHN0cm9uZyAvIDI1NjsJLyogbGVmdCBhY3R1YXRvciAqLworCQkJeHBhZC0+b2RhdGFbNF0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbNV0gPSB3ZWFrIC8gMjU2OwkvKiByaWdodCBhY3R1YXRvciAqLworCQkJeHBhZC0+aXJxX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDY7CisKKwkJCXJldHVybiB1c2Jfc3VibWl0X3VyYih4cGFkLT5pcnFfb3V0LCBHRlBfQVRPTUlDKTsKKworCQljYXNlIFhUWVBFX1hCT1gzNjA6CisJCQl4cGFkLT5vZGF0YVswXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVsxXSA9IDB4MDg7CisJCQl4cGFkLT5vZGF0YVsyXSA9IDB4MDA7CisJCQl4cGFkLT5vZGF0YVszXSA9IHN0cm9uZyAvIDI1NjsgIC8qIGxlZnQgYWN0dWF0b3I/ICovCisJCQl4cGFkLT5vZGF0YVs0XSA9IHdlYWsgLyAyNTY7CS8qIHJpZ2h0IGFjdHVhdG9yPyAqLworCQkJeHBhZC0+b2RhdGFbNV0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbNl0gPSAweDAwOworCQkJeHBhZC0+b2RhdGFbN10gPSAweDAwOworCQkJeHBhZC0+aXJxX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7CisKKwkJCXJldHVybiB1c2Jfc3VibWl0X3VyYih4cGFkLT5pcnFfb3V0LCBHRlBfQVRPTUlDKTsKKworCQlkZWZhdWx0OgorCQkJZGJnKCIlcyAtIHJ1bWJsZSBjb21tYW5kIHNlbnQgdG8gdW5zdXBwb3J0ZWQgeHBhZCB0eXBlOiAlZCIsCisJCQkJX19mdW5jX18sIHhwYWQtPnh0eXBlKTsKKwkJCXJldHVybiAtMTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtNTc5LDcgKzYyNSw3IEBACiAKIHN0YXRpYyBpbnQgeHBhZF9pbml0X2ZmKHN0cnVjdCB1c2JfeHBhZCAqeHBhZCkKIHsKLQlpZiAoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCkKKwlpZiAoeHBhZC0+eHR5cGUgIT0gWFRZUEVfWEJPWDM2MCAmJiB4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YKQogCQlyZXR1cm4gMDsKIAogCWlucHV0X3NldF9jYXBhYmlsaXR5KHhwYWQtPmRldiwgRVZfRkYsIEZGX1JVTUJMRSk7CkBAIC03MTIsMTEgKzc1OCwxMSBAQAogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIGFicywgLTMyNzY4LCAzMjc2NywgMTYsIDEyOCk7CiAJCWJyZWFrOwogCWNhc2UgQUJTX1o6Ci0JY2FzZSBBQlNfUlo6CS8qIHRoZSB0cmlnZ2VycyAqLworCWNhc2UgQUJTX1JaOgkvKiB0aGUgdHJpZ2dlcnMgKGlmIG1hcHBlZCB0byBheGVzKSAqLwogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIGFicywgMCwgMjU1LCAwLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBBQlNfSEFUMFg6Ci0JY2FzZSBBQlNfSEFUMFk6CS8qIHRoZSBkLXBhZCAob25seSBpZiBNQVBfRFBBRF9UT19BWEVTKSAqLworCWNhc2UgQUJTX0hBVDBZOgkvKiB0aGUgZC1wYWQgKG9ubHkgaWYgZHBhZCBpcyBtYXBwZWQgdG8gYXhlcyAqLwogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIGFicywgLTEsIDEsIDAsIDApOwogCQlicmVhazsKIAl9CkBAIC03NTIsMTAgKzc5OCw5IEBACiAJCWdvdG8gZmFpbDI7CiAKIAl4cGFkLT51ZGV2ID0gdWRldjsKLQl4cGFkLT5kcGFkX21hcHBpbmcgPSB4cGFkX2RldmljZVtpXS5kcGFkX21hcHBpbmc7CisJeHBhZC0+bWFwcGluZyA9IHhwYWRfZGV2aWNlW2ldLm1hcHBpbmc7CiAJeHBhZC0+eHR5cGUgPSB4cGFkX2RldmljZVtpXS54dHlwZTsKLQlpZiAoeHBhZC0+ZHBhZF9tYXBwaW5nID09IE1BUF9EUEFEX1VOS05PV04pCi0JCXhwYWQtPmRwYWRfbWFwcGluZyA9ICFkcGFkX3RvX2J1dHRvbnM7CisKIAlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfVU5LTk9XTikgewogCQlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19WRU5ET1JfU1BFQykgewogCQkJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCA9PSAxMjkpCkBAIC03NjQsNyArODA5LDEzIEBACiAJCQkJeHBhZC0+eHR5cGUgPSBYVFlQRV9YQk9YMzYwOwogCQl9IGVsc2UKIAkJCXhwYWQtPnh0eXBlID0gWFRZUEVfWEJPWDsKKworCQlpZiAoZHBhZF90b19idXR0b25zKQorCQkJeHBhZC0+bWFwcGluZyB8PSBNQVBfRFBBRF9UT19CVVRUT05TOworCQlpZiAodHJpZ2dlcnNfdG9fYnV0dG9ucykKKwkJCXhwYWQtPm1hcHBpbmcgfD0gTUFQX1RSSUdHRVJTX1RPX0JVVFRPTlM7CiAJfQorCiAJeHBhZC0+ZGV2ID0gaW5wdXRfZGV2OwogCXVzYl9tYWtlX3BhdGgodWRldiwgeHBhZC0+cGh5cywgc2l6ZW9mKHhwYWQtPnBoeXMpKTsKIAlzdHJsY2F0KHhwYWQtPnBoeXMsICIvaW5wdXQwIiwgc2l6ZW9mKHhwYWQtPnBoeXMpKTsKQEAgLTc4MSwyNSArODMyLDM3IEBACiAKIAlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CiAKLQkvKiBzZXQgdXAgYnV0dG9ucyAqLworCS8qIHNldCB1cCBzdGFuZGFyZCBidXR0b25zIGFuZCBheGVzICovCiAJZm9yIChpID0gMDsgeHBhZF9jb21tb25fYnRuW2ldID49IDA7IGkrKykKLQkJc2V0X2JpdCh4cGFkX2NvbW1vbl9idG5baV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKLQlpZiAoKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjApIHx8ICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwVykpCi0JCWZvciAoaSA9IDA7IHhwYWQzNjBfYnRuW2ldID49IDA7IGkrKykKLQkJCXNldF9iaXQoeHBhZDM2MF9idG5baV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKLQllbHNlCi0JCWZvciAoaSA9IDA7IHhwYWRfYnRuW2ldID49IDA7IGkrKykKLQkJCXNldF9iaXQoeHBhZF9idG5baV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKLQlpZiAoeHBhZC0+ZHBhZF9tYXBwaW5nID09IE1BUF9EUEFEX1RPX0JVVFRPTlMpCi0JCWZvciAoaSA9IDA7IHhwYWRfYnRuX3BhZFtpXSA+PSAwOyBpKyspCi0JCQlzZXRfYml0KHhwYWRfYnRuX3BhZFtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoeHBhZF9jb21tb25fYnRuW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAKLQkvKiBzZXQgdXAgYXhlcyAqLwogCWZvciAoaSA9IDA7IHhwYWRfYWJzW2ldID49IDA7IGkrKykKIAkJeHBhZF9zZXRfdXBfYWJzKGlucHV0X2RldiwgeHBhZF9hYnNbaV0pOwotCWlmICh4cGFkLT5kcGFkX21hcHBpbmcgPT0gTUFQX0RQQURfVE9fQVhFUykKKworCS8qIE5vdyBzZXQgdXAgbW9kZWwtc3BlY2lmaWMgb25lcyAqLworCWlmICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwIHx8IHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjBXKSB7CisJCWZvciAoaSA9IDA7IHhwYWQzNjBfYnRuW2ldID49IDA7IGkrKykKKwkJCV9fc2V0X2JpdCh4cGFkMzYwX2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IHhwYWRfYnRuW2ldID49IDA7IGkrKykKKwkJCV9fc2V0X2JpdCh4cGFkX2J0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCX0KKworCWlmICh4cGFkLT5tYXBwaW5nICYgTUFQX0RQQURfVE9fQlVUVE9OUykgeworCQlmb3IgKGkgPSAwOyB4cGFkX2J0bl9wYWRbaV0gPj0gMDsgaSsrKQorCQkJX19zZXRfYml0KHhwYWRfYnRuX3BhZFtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCX0gZWxzZSB7CiAJCWZvciAoaSA9IDA7IHhwYWRfYWJzX3BhZFtpXSA+PSAwOyBpKyspCiAJCSAgICB4cGFkX3NldF91cF9hYnMoaW5wdXRfZGV2LCB4cGFkX2Fic19wYWRbaV0pOworCX0KKworCWlmICh4cGFkLT5tYXBwaW5nICYgTUFQX1RSSUdHRVJTX1RPX0JVVFRPTlMpIHsKKwkJZm9yIChpID0gMDsgeHBhZF9idG5fdHJpZ2dlcnNbaV0gPj0gMDsgaSsrKQorCQkJX19zZXRfYml0KHhwYWRfYnRuX3RyaWdnZXJzW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgeHBhZF9hYnNfdHJpZ2dlcnNbaV0gPj0gMDsgaSsrKQorCQkJeHBhZF9zZXRfdXBfYWJzKGlucHV0X2RldiwgeHBhZF9hYnNfdHJpZ2dlcnNbaV0pOworCX0KIAogCWVycm9yID0geHBhZF9pbml0X291dHB1dChpbnRmLCB4cGFkKTsKIAlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKaW5kZXggMDJjODM2ZS4uNjRjMTAyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwpAQCAtMzUsMTAgKzM1LDEwIEBACiAJICBiZSBjYWxsZWQgYWRwNTUyMC1rZXlzLgogCiBjb25maWcgS0VZQk9BUkRfQURQNTU4OAotCXRyaXN0YXRlICJBRFA1NTg4IEkyQyBRV0VSVFkgS2V5cGFkIGFuZCBJTyBFeHBhbmRlciIKKwl0cmlzdGF0ZSAiQURQNTU4OC84NyBJMkMgUVdFUlRZIEtleXBhZCBhbmQgSU8gRXhwYW5kZXIiCiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIEFEUDU1ODggYXR0YWNoZWQgdG8geW91cgorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBBRFA1NTg4Lzg3IGF0dGFjaGVkIHRvIHlvdXIKIAkgIHN5c3RlbSBJMkMgYnVzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKQEAgLTE0NCwxMyArMTQ0LDE1IEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmY1NHgta2V5cy4KIAogY29uZmlnIEtFWUJPQVJEX0NPUkdJCi0JdHJpc3RhdGUgIkNvcmdpIGtleWJvYXJkIgorCXRyaXN0YXRlICJDb3JnaSBrZXlib2FyZCAoZGVwcmVjYXRlZCkiCiAJZGVwZW5kcyBvbiBQWEFfU0hBUlBTTAotCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBrZXlib2FyZCBvbiB0aGUgU2hhcnAgWmF1cnVzIFNMLUM3eHgKIAkgIHNlcmllcyBvZiBQREFzLgogCisJICBUaGlzIGRyaXZlciBpcyBub3cgZGVwcmVjYXRlZCwgdXNlIGdlbmVyaWMgR1BJTyBiYXNlZCBtYXRyaXgKKwkgIGtleWJvYXJkIGRyaXZlciBpbnN0ZWFkLgorCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjb3JnaWtiZC4KIApAQCAtMjkyLDYgKzI5NCwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWF4NzM1OV9rZXlwYWQuCiAKK2NvbmZpZyBLRVlCT0FSRF9JTVgKKwl0cmlzdGF0ZSAiSU1YIGtleXBhZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9NWEMKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgSU1YIGtleXBhZCBwb3J0LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpbXhfa2V5cGFkLgorCiBjb25maWcgS0VZQk9BUkRfTkVXVE9OCiAJdHJpc3RhdGUgIk5ld3RvbiBrZXlib2FyZCIKIAlzZWxlY3QgU0VSSU8KQEAgLTMyOSwxMyArMzQwLDE1IEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHhhOTMwX3JvdGFyeS4KIAogY29uZmlnIEtFWUJPQVJEX1NQSVRaCi0JdHJpc3RhdGUgIlNwaXR6IGtleWJvYXJkIgorCXRyaXN0YXRlICJTcGl0eiBrZXlib2FyZCAoZGVwcmVjYXRlZCkiCiAJZGVwZW5kcyBvbiBQWEFfU0hBUlBTTAotCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBrZXlib2FyZCBvbiB0aGUgU2hhcnAgWmF1cnVzIFNMLUMxMDAwLAogCSAgU0wtQzMwMDAgYW5kIFNsLUMzMTAwIHNlcmllcyBvZiBQREFzLgogCisJICBUaGlzIGRyaXZlciBpcyBub3cgZGVwcmVjYXRlZCwgdXNlIGdlbmVyaWMgR1BJTyBiYXNlZCBtYXRyaXgKKwkgIGtleWJvYXJkIGRyaXZlciBpbnN0ZWFkLgorCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzcGl0emtiZC4KIApAQCAtMzYzLDcgKzM3Niw3IEBACiAKIGNvbmZpZyBLRVlCT0FSRF9TSF9LRVlTQwogCXRyaXN0YXRlICJTdXBlckggS0VZU0Mga2V5cGFkIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTVVBFUkgKKwlkZXBlbmRzIG9uIFNVUEVSSCB8fCBBUkNIX1NITU9CSUxFCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBrZXlwYWQgYXR0YWNoZWQgdG8gdGhlIEtFWVNDIGJsb2NrCiAJICBvbiBTdXBlckggcHJvY2Vzc29ycyBzdWNoIGFzIHNoNzcyMiBhbmQgc2g3MzQzLgpAQCAtNDAyLDEyICs0MTUsMTQgQEAKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0d2w0MDMwX2tleXBhZC4KIAogY29uZmlnIEtFWUJPQVJEX1RPU0EKLQl0cmlzdGF0ZSAiVG9zYSBrZXlib2FyZCIKKwl0cmlzdGF0ZSAiVG9zYSBrZXlib2FyZCAoZGVwcmVjYXRlZCkiCiAJZGVwZW5kcyBvbiBNQUNIX1RPU0EKLQlkZWZhdWx0IHkKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUga2V5Ym9hcmQgb24gdGhlIFNoYXJwIFphdXJ1cyBTTC02MDAweCAoVG9zYSkKIAorCSAgVGhpcyBkcml2ZXIgaXMgbm93IGRlcHJlY2F0ZWQsIHVzZSBnZW5lcmljIEdQSU8gYmFzZWQgbWF0cml4CisJICBrZXlib2FyZCBkcml2ZXIgaW5zdGVhZC4KKwogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdG9zYWtiZC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKaW5kZXggNzg2NTRlZi4uNzA2YzZiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBACiBvYmotJChDT05GSUdfS0VZQk9BUkRfR1BJTykJCSs9IGdwaW9fa2V5cy5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfSElMKQkJKz0gaGlsX2tiZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfSElMX09MRCkJCSs9IGhpbGtiZC5vCitvYmotJChDT05GSUdfS0VZQk9BUkRfSU1YKQkJKz0gaW14X2tleXBhZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfSFA2WFgpCQkrPSBqb3JuYWRhNjgwX2tiZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfSFA3WFgpCQkrPSBqb3JuYWRhNzIwX2tiZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfTEtLQkQpCQkrPSBsa2tiZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FkcDU1ODgta2V5cy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hZHA1NTg4LWtleXMuYwppbmRleCAxZWRiNTk2Li5iNTE0MmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FkcDU1ODgta2V5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYWRwNTU4OC1rZXlzLmMKQEAgLTEsNiArMSw3IEBACiAvKgogICogRmlsZTogZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hZHA1NTg4X2tleXMuYwotICogRGVzY3JpcHRpb246ICBrZXlwYWQgZHJpdmVyIGZvciBBRFA1NTg4IEkyQyBRV0VSVFkgS2V5cGFkIGFuZCBJTyBFeHBhbmRlcgorICogRGVzY3JpcHRpb246ICBrZXlwYWQgZHJpdmVyIGZvciBBRFA1NTg4IGFuZCBBRFA1NTg3CisgKgkJIEkyQyBRV0VSVFkgS2V5cGFkIGFuZCBJTyBFeHBhbmRlcgogICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgpAQCAtMzI3LDYgKzMyOCw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhZHA1NTg4X2lkW10gPSB7CiAJeyBLQlVJTERfTU9ETkFNRSwgMCB9LAorCXsgImFkcDU1ODcta2V5cyIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWRwNTU4OF9pZCk7CkBAIC0zNTcsNSArMzU5LDUgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQURQNTU4OCBLZXlwYWQgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFEUDU1ODgvODcgS2V5cGFkIGRyaXZlciIpOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphZHA1NTg4LWtleXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwppbmRleCA3YjQwNTYyLi5kMzU4ZWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCkBAIC00MCwyNiArNDAsMjYgQEAKIE1PRFVMRV9QQVJNX0RFU0Moc2V0LCAiU2VsZWN0IGtleWJvYXJkIGNvZGUgc2V0ICgyID0gZGVmYXVsdCwgMyA9IFBTLzIgbmF0aXZlKSIpOwogCiAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9faHBwYV9fKQotc3RhdGljIGludCBhdGtiZF9yZXNldDsKK3N0YXRpYyBib29sIGF0a2JkX3Jlc2V0OwogI2Vsc2UKLXN0YXRpYyBpbnQgYXRrYmRfcmVzZXQgPSAxOworc3RhdGljIGJvb2wgYXRrYmRfcmVzZXQgPSB0cnVlOwogI2VuZGlmCiBtb2R1bGVfcGFyYW1fbmFtZWQocmVzZXQsIGF0a2JkX3Jlc2V0LCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocmVzZXQsICJSZXNldCBrZXlib2FyZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24iKTsKIAotc3RhdGljIGludCBhdGtiZF9zb2Z0cmVwZWF0Oworc3RhdGljIGJvb2wgYXRrYmRfc29mdHJlcGVhdDsKIG1vZHVsZV9wYXJhbV9uYW1lZChzb2Z0cmVwZWF0LCBhdGtiZF9zb2Z0cmVwZWF0LCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Moc29mdHJlcGVhdCwgIlVzZSBzb2Z0d2FyZSBrZXlib2FyZCByZXBlYXQiKTsKIAotc3RhdGljIGludCBhdGtiZF9zb2Z0cmF3ID0gMTsKK3N0YXRpYyBib29sIGF0a2JkX3NvZnRyYXcgPSB0cnVlOwogbW9kdWxlX3BhcmFtX25hbWVkKHNvZnRyYXcsIGF0a2JkX3NvZnRyYXcsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhzb2Z0cmF3LCAiVXNlIHNvZnR3YXJlIGdlbmVyYXRlZCByYXdtb2RlIik7CiAKLXN0YXRpYyBpbnQgYXRrYmRfc2Nyb2xsOworc3RhdGljIGJvb2wgYXRrYmRfc2Nyb2xsOwogbW9kdWxlX3BhcmFtX25hbWVkKHNjcm9sbCwgYXRrYmRfc2Nyb2xsLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Moc2Nyb2xsLCAiRW5hYmxlIHNjcm9sbC13aGVlbCBvbiBNUyBPZmZpY2UgYW5kIHNpbWlsYXIga2V5Ym9hcmRzIik7CiAKLXN0YXRpYyBpbnQgYXRrYmRfZXh0cmE7CitzdGF0aWMgYm9vbCBhdGtiZF9leHRyYTsKIG1vZHVsZV9wYXJhbV9uYW1lZChleHRyYSwgYXRrYmRfZXh0cmEsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhleHRyYSwgIkVuYWJsZSBleHRyYSBMRURzIGFuZCBrZXlzIG9uIElCTSBSYXBpZEFjY2VzLCBFektleSBhbmQgc2ltaWxhciBrZXlib2FyZHMiKTsKIApAQCAtMTUzLDE2ICsxNTMsMTYgQEAKICNkZWZpbmUgQVRLQkRfUkVUX0hBTkdFVUwJMHhmMgogI2RlZmluZSBBVEtCRF9SRVRfRVJSCQkweGZmCiAKLSNkZWZpbmUgQVRLQkRfS0VZX1VOS05PV04JICAwCisjZGVmaW5lIEFUS0JEX0tFWV9VTktOT1dOCTAKICNkZWZpbmUgQVRLQkRfS0VZX05VTEwJCTI1NQogCi0jZGVmaW5lIEFUS0JEX1NDUl8xCQkyNTQKLSNkZWZpbmUgQVRLQkRfU0NSXzIJCTI1MwotI2RlZmluZSBBVEtCRF9TQ1JfNAkJMjUyCi0jZGVmaW5lIEFUS0JEX1NDUl84CQkyNTEKLSNkZWZpbmUgQVRLQkRfU0NSX0NMSUNLCQkyNTAKLSNkZWZpbmUgQVRLQkRfU0NSX0xFRlQJCTI0OQotI2RlZmluZSBBVEtCRF9TQ1JfUklHSFQJCTI0OAorI2RlZmluZSBBVEtCRF9TQ1JfMQkJMHhmZmZlCisjZGVmaW5lIEFUS0JEX1NDUl8yCQkweGZmZmQKKyNkZWZpbmUgQVRLQkRfU0NSXzQJCTB4ZmZmYworI2RlZmluZSBBVEtCRF9TQ1JfOAkJMHhmZmZiCisjZGVmaW5lIEFUS0JEX1NDUl9DTElDSwkJMHhmZmZhCisjZGVmaW5lIEFUS0JEX1NDUl9MRUZUCQkweGZmZjkKKyNkZWZpbmUgQVRLQkRfU0NSX1JJR0hUCQkweGZmZjgKIAogI2RlZmluZSBBVEtCRF9TUEVDSUFMCQlBVEtCRF9TQ1JfUklHSFQKIApAQCAtMTc3LDcgKzE3Nyw3IEBACiAjZGVmaW5lIEFUS0JEX1hMX0hBTkpBCQkweDIwCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIga2V5Y29kZTsKKwl1bnNpZ25lZCBzaG9ydCBrZXljb2RlOwogCXVuc2lnbmVkIGNoYXIgc2V0MjsKIH0gYXRrYmRfc2Nyb2xsX2tleXNbXSA9IHsKIAl7IEFUS0JEX1NDUl8xLCAgICAgMHhjNSB9LApAQCAtMjA2LDE4ICsyMDYsMTggQEAKIAl1bnNpZ25lZCBzaG9ydCBrZXljb2RlW0FUS0JEX0tFWU1BUF9TSVpFXTsKIAlERUNMQVJFX0JJVE1BUChmb3JjZV9yZWxlYXNlX21hc2ssIEFUS0JEX0tFWU1BUF9TSVpFKTsKIAl1bnNpZ25lZCBjaGFyIHNldDsKLQl1bnNpZ25lZCBjaGFyIHRyYW5zbGF0ZWQ7Ci0JdW5zaWduZWQgY2hhciBleHRyYTsKLQl1bnNpZ25lZCBjaGFyIHdyaXRlOwotCXVuc2lnbmVkIGNoYXIgc29mdHJlcGVhdDsKLQl1bnNpZ25lZCBjaGFyIHNvZnRyYXc7Ci0JdW5zaWduZWQgY2hhciBzY3JvbGw7Ci0JdW5zaWduZWQgY2hhciBlbmFibGVkOworCWJvb2wgdHJhbnNsYXRlZDsKKwlib29sIGV4dHJhOworCWJvb2wgd3JpdGU7CisJYm9vbCBzb2Z0cmVwZWF0OworCWJvb2wgc29mdHJhdzsKKwlib29sIHNjcm9sbDsKKwlib29sIGVuYWJsZWQ7CiAKIAkvKiBBY2Nlc3NlZCBvbmx5IGZyb20gaW50ZXJydXB0ICovCiAJdW5zaWduZWQgY2hhciBlbXVsOwotCXVuc2lnbmVkIGNoYXIgcmVzZW5kOwotCXVuc2lnbmVkIGNoYXIgcmVsZWFzZTsKKwlib29sIHJlc2VuZDsKKwlib29sIHJlbGVhc2U7CiAJdW5zaWduZWQgbG9uZyB4bF9iaXQ7CiAJdW5zaWduZWQgaW50IGxhc3Q7CiAJdW5zaWduZWQgbG9uZyB0aW1lOwpAQCAtMzAxLDE4ICszMDEsMTggQEAKICAqIENoZWNrcyBpZiB3ZSBzaG91bGQgbWFuZ2xlIHRoZSBzY2FuY29kZSB0byBleHRyYWN0ICdyZWxlYXNlJyBiaXQKICAqIGluIHRyYW5zbGF0ZWQgbW9kZS4KICAqLwotc3RhdGljIGludCBhdGtiZF9uZWVkX3hsYXRlKHVuc2lnbmVkIGxvbmcgeGxfYml0LCB1bnNpZ25lZCBjaGFyIGNvZGUpCitzdGF0aWMgYm9vbCBhdGtiZF9uZWVkX3hsYXRlKHVuc2lnbmVkIGxvbmcgeGxfYml0LCB1bnNpZ25lZCBjaGFyIGNvZGUpCiB7CiAJaW50IGk7CiAKIAlpZiAoY29kZSA9PSBBVEtCRF9SRVRfRU1VTDAgfHwgY29kZSA9PSBBVEtCRF9SRVRfRU1VTDEpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh4bF90YWJsZSk7IGkrKykKIAkJaWYgKGNvZGUgPT0geGxfdGFibGVbaV0pCiAJCQlyZXR1cm4gdGVzdF9iaXQoaSwgJnhsX2JpdCk7CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTM1OSw3ICszNTksNyBAQAogICovCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGtiZF9pbnRlcnJ1cHQoc3RydWN0IHNlcmlvICpzZXJpbywgdW5zaWduZWQgY2hhciBkYXRhLAotCQkJdW5zaWduZWQgaW50IGZsYWdzKQorCQkJCSAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgYXRrYmQgKmF0a2JkID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8pOwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGF0a2JkLT5kZXY7CkBAIC0zNjgsMjAgKzM2OCwxOCBAQAogCWludCB2YWx1ZTsKIAl1bnNpZ25lZCBzaG9ydCBrZXljb2RlOwogCi0jaWZkZWYgQVRLQkRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiYXRrYmQuYzogUmVjZWl2ZWQgJTAyeCBmbGFncyAlMDJ4XG4iLCBkYXRhLCBmbGFncyk7Ci0jZW5kaWYKKwlkZXZfZGJnKCZzZXJpby0+ZGV2LCAiUmVjZWl2ZWQgJTAyeCBmbGFncyAlMDJ4XG4iLCBkYXRhLCBmbGFncyk7CiAKICNpZiAhZGVmaW5lZChfX2kzODZfXykgJiYgIWRlZmluZWQgKF9feDg2XzY0X18pCiAJaWYgKChmbGFncyAmIChTRVJJT19GUkFNRSB8IFNFUklPX1BBUklUWSkpICYmICh+ZmxhZ3MgJiBTRVJJT19USU1FT1VUKSAmJiAhYXRrYmQtPnJlc2VuZCAmJiBhdGtiZC0+d3JpdGUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXRrYmQuYzogZnJhbWUvcGFyaXR5IGVycm9yOiAlMDJ4XG4iLCBmbGFncyk7CisJCWRldl93YXJuKCZzZXJpby0+ZGV2LCAiRnJhbWUvcGFyaXR5IGVycm9yOiAlMDJ4XG4iLCBmbGFncyk7CiAJCXNlcmlvX3dyaXRlKHNlcmlvLCBBVEtCRF9DTURfUkVTRU5EKTsKLQkJYXRrYmQtPnJlc2VuZCA9IDE7CisJCWF0a2JkLT5yZXNlbmQgPSB0cnVlOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoIWZsYWdzICYmIGRhdGEgPT0gQVRLQkRfUkVUX0FDSykKLQkJYXRrYmQtPnJlc2VuZCA9IDA7CisJCWF0a2JkLT5yZXNlbmQgPSBmYWxzZTsKICNlbmRpZgogCiAJaWYgKHVubGlrZWx5KGF0a2JkLT5wczJkZXYuZmxhZ3MgJiBQUzJfRkxBR19BQ0spKQpAQCAtNDEyLDMyICs0MTAsMzIgQEAKIAl9CiAKIAlzd2l0Y2ggKGNvZGUpIHsKLQkJY2FzZSBBVEtCRF9SRVRfQkFUOgotCQkJYXRrYmQtPmVuYWJsZWQgPSAwOwotCQkJc2VyaW9fcmVjb25uZWN0KGF0a2JkLT5wczJkZXYuc2VyaW8pOwotCQkJZ290byBvdXQ7Ci0JCWNhc2UgQVRLQkRfUkVUX0VNVUwwOgotCQkJYXRrYmQtPmVtdWwgPSAxOwotCQkJZ290byBvdXQ7Ci0JCWNhc2UgQVRLQkRfUkVUX0VNVUwxOgotCQkJYXRrYmQtPmVtdWwgPSAyOwotCQkJZ290byBvdXQ7Ci0JCWNhc2UgQVRLQkRfUkVUX1JFTEVBU0U6Ci0JCQlhdGtiZC0+cmVsZWFzZSA9IDE7Ci0JCQlnb3RvIG91dDsKLQkJY2FzZSBBVEtCRF9SRVRfQUNLOgotCQljYXNlIEFUS0JEX1JFVF9OQUs6Ci0JCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0a2JkLmM6IFNwdXJpb3VzICVzIG9uICVzLiAiCi0JCQkJICAgICAgICJTb21lIHByb2dyYW0gbWlnaHQgYmUgdHJ5aW5nIGFjY2VzcyBoYXJkd2FyZSBkaXJlY3RseS5cbiIsCi0JCQkJICAgICAgIGRhdGEgPT0gQVRLQkRfUkVUX0FDSyA/ICJBQ0siIDogIk5BSyIsIHNlcmlvLT5waHlzKTsKLQkJCWdvdG8gb3V0OwotCQljYXNlIEFUS0JEX1JFVF9FUlI6Ci0JCQlhdGtiZC0+ZXJyX2NvdW50Kys7Ci0jaWZkZWYgQVRLQkRfREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICJhdGtiZC5jOiBLZXlib2FyZCBvbiAlcyByZXBvcnRzIHRvbyBtYW55IGtleXMgcHJlc3NlZC5cbiIsIHNlcmlvLT5waHlzKTsKLSNlbmRpZgotCQkJZ290byBvdXQ7CisJY2FzZSBBVEtCRF9SRVRfQkFUOgorCQlhdGtiZC0+ZW5hYmxlZCA9IGZhbHNlOworCQlzZXJpb19yZWNvbm5lY3QoYXRrYmQtPnBzMmRldi5zZXJpbyk7CisJCWdvdG8gb3V0OworCWNhc2UgQVRLQkRfUkVUX0VNVUwwOgorCQlhdGtiZC0+ZW11bCA9IDE7CisJCWdvdG8gb3V0OworCWNhc2UgQVRLQkRfUkVUX0VNVUwxOgorCQlhdGtiZC0+ZW11bCA9IDI7CisJCWdvdG8gb3V0OworCWNhc2UgQVRLQkRfUkVUX1JFTEVBU0U6CisJCWF0a2JkLT5yZWxlYXNlID0gdHJ1ZTsKKwkJZ290byBvdXQ7CisJY2FzZSBBVEtCRF9SRVRfQUNLOgorCWNhc2UgQVRLQkRfUkVUX05BSzoKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCWRldl93YXJuKCZzZXJpby0+ZGV2LAorCQkJCSAiU3B1cmlvdXMgJXMgb24gJXMuICIKKwkJCQkgIlNvbWUgcHJvZ3JhbSBtaWdodCBiZSB0cnlpbmcgYWNjZXNzIGhhcmR3YXJlIGRpcmVjdGx5LlxuIiwKKwkJCQkgZGF0YSA9PSBBVEtCRF9SRVRfQUNLID8gIkFDSyIgOiAiTkFLIiwgc2VyaW8tPnBoeXMpOworCQlnb3RvIG91dDsKKwljYXNlIEFUS0JEX1JFVF9FUlI6CisJCWF0a2JkLT5lcnJfY291bnQrKzsKKwkJZGV2X2RiZygmc2VyaW8tPmRldiwgIktleWJvYXJkIG9uICVzIHJlcG9ydHMgdG9vIG1hbnkga2V5cyBwcmVzc2VkLlxuIiwKKwkJCXNlcmlvLT5waHlzKTsKKwkJZ290byBvdXQ7CiAJfQogCiAJY29kZSA9IGF0a2JkX2NvbXBhdF9zY2FuY29kZShhdGtiZCwgY29kZSk7CkBAIC00NTEsNzEgKzQ0OSw3MiBAQAogCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NDQU4sIGNvZGUpOwogCiAJc3dpdGNoIChrZXljb2RlKSB7Ci0JCWNhc2UgQVRLQkRfS0VZX05VTEw6Ci0JCQlicmVhazsKLQkJY2FzZSBBVEtCRF9LRVlfVU5LTk9XTjoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiYXRrYmQuYzogVW5rbm93biBrZXkgJXMgKCVzIHNldCAlZCwgY29kZSAlI3ggb24gJXMpLlxuIiwKLQkJCSAgICAgICBhdGtiZC0+cmVsZWFzZSA/ICJyZWxlYXNlZCIgOiAicHJlc3NlZCIsCi0JCQkgICAgICAgYXRrYmQtPnRyYW5zbGF0ZWQgPyAidHJhbnNsYXRlZCIgOiAicmF3IiwKLQkJCSAgICAgICBhdGtiZC0+c2V0LCBjb2RlLCBzZXJpby0+cGh5cyk7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImF0a2JkLmM6IFVzZSAnc2V0a2V5Y29kZXMgJXMlMDJ4IDxrZXljb2RlPicgdG8gbWFrZSBpdCBrbm93bi5cbiIsCi0JCQkgICAgICAgY29kZSAmIDB4ODAgPyAiZTAiIDogIiIsIGNvZGUgJiAweDdmKTsKLQkJCWlucHV0X3N5bmMoZGV2KTsKLQkJCWJyZWFrOwotCQljYXNlIEFUS0JEX1NDUl8xOgotCQkJc2Nyb2xsID0gMSAtIGF0a2JkLT5yZWxlYXNlICogMjsKLQkJCWJyZWFrOwotCQljYXNlIEFUS0JEX1NDUl8yOgotCQkJc2Nyb2xsID0gMiAtIGF0a2JkLT5yZWxlYXNlICogNDsKLQkJCWJyZWFrOwotCQljYXNlIEFUS0JEX1NDUl80OgotCQkJc2Nyb2xsID0gNCAtIGF0a2JkLT5yZWxlYXNlICogODsKLQkJCWJyZWFrOwotCQljYXNlIEFUS0JEX1NDUl84OgotCQkJc2Nyb2xsID0gOCAtIGF0a2JkLT5yZWxlYXNlICogMTY7Ci0JCQlicmVhazsKLQkJY2FzZSBBVEtCRF9TQ1JfQ0xJQ0s6Ci0JCQljbGljayA9ICFhdGtiZC0+cmVsZWFzZTsKLQkJCWJyZWFrOwotCQljYXNlIEFUS0JEX1NDUl9MRUZUOgotCQkJaHNjcm9sbCA9IC0xOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVRLQkRfU0NSX1JJR0hUOgotCQkJaHNjcm9sbCA9IDE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlmIChhdGtiZC0+cmVsZWFzZSkgewotCQkJCXZhbHVlID0gMDsKLQkJCQlhdGtiZC0+bGFzdCA9IDA7Ci0JCQl9IGVsc2UgaWYgKCFhdGtiZC0+c29mdHJlcGVhdCAmJiB0ZXN0X2JpdChrZXljb2RlLCBkZXYtPmtleSkpIHsKLQkJCQkvKiBXb3JrYXJvdW5kIFRvc2hpYmEgbGFwdG9wIG11bHRpcGxlIGtleXByZXNzICovCi0JCQkJdmFsdWUgPSB0aW1lX2JlZm9yZShqaWZmaWVzLCBhdGtiZC0+dGltZSkgJiYgYXRrYmQtPmxhc3QgPT0gY29kZSA/IDEgOiAyOwotCQkJfSBlbHNlIHsKLQkJCQl2YWx1ZSA9IDE7Ci0JCQkJYXRrYmQtPmxhc3QgPSBjb2RlOwotCQkJCWF0a2JkLT50aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoZGV2LT5yZXBbUkVQX0RFTEFZXSkgLyAyOwotCQkJfQorCWNhc2UgQVRLQkRfS0VZX05VTEw6CisJCWJyZWFrOworCWNhc2UgQVRLQkRfS0VZX1VOS05PV046CisJCWRldl93YXJuKCZzZXJpby0+ZGV2LAorCQkJICJVbmtub3duIGtleSAlcyAoJXMgc2V0ICVkLCBjb2RlICUjeCBvbiAlcykuXG4iLAorCQkJIGF0a2JkLT5yZWxlYXNlID8gInJlbGVhc2VkIiA6ICJwcmVzc2VkIiwKKwkJCSBhdGtiZC0+dHJhbnNsYXRlZCA/ICJ0cmFuc2xhdGVkIiA6ICJyYXciLAorCQkJIGF0a2JkLT5zZXQsIGNvZGUsIHNlcmlvLT5waHlzKTsKKwkJZGV2X3dhcm4oJnNlcmlvLT5kZXYsCisJCQkgIlVzZSAnc2V0a2V5Y29kZXMgJXMlMDJ4IDxrZXljb2RlPicgdG8gbWFrZSBpdCBrbm93bi5cbiIsCisJCQkgY29kZSAmIDB4ODAgPyAiZTAiIDogIiIsIGNvZGUgJiAweDdmKTsKKwkJaW5wdXRfc3luYyhkZXYpOworCQlicmVhazsKKwljYXNlIEFUS0JEX1NDUl8xOgorCQlzY3JvbGwgPSAxOworCQlicmVhazsKKwljYXNlIEFUS0JEX1NDUl8yOgorCQlzY3JvbGwgPSAyOworCQlicmVhazsKKwljYXNlIEFUS0JEX1NDUl80OgorCQlzY3JvbGwgPSA0OworCQlicmVhazsKKwljYXNlIEFUS0JEX1NDUl84OgorCQlzY3JvbGwgPSA4OworCQlicmVhazsKKwljYXNlIEFUS0JEX1NDUl9DTElDSzoKKwkJY2xpY2sgPSAhYXRrYmQtPnJlbGVhc2U7CisJCWJyZWFrOworCWNhc2UgQVRLQkRfU0NSX0xFRlQ6CisJCWhzY3JvbGwgPSAtMTsKKwkJYnJlYWs7CisJY2FzZSBBVEtCRF9TQ1JfUklHSFQ6CisJCWhzY3JvbGwgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoYXRrYmQtPnJlbGVhc2UpIHsKKwkJCXZhbHVlID0gMDsKKwkJCWF0a2JkLT5sYXN0ID0gMDsKKwkJfSBlbHNlIGlmICghYXRrYmQtPnNvZnRyZXBlYXQgJiYgdGVzdF9iaXQoa2V5Y29kZSwgZGV2LT5rZXkpKSB7CisJCQkvKiBXb3JrYXJvdW5kIFRvc2hpYmEgbGFwdG9wIG11bHRpcGxlIGtleXByZXNzICovCisJCQl2YWx1ZSA9IHRpbWVfYmVmb3JlKGppZmZpZXMsIGF0a2JkLT50aW1lKSAmJiBhdGtiZC0+bGFzdCA9PSBjb2RlID8gMSA6IDI7CisJCX0gZWxzZSB7CisJCQl2YWx1ZSA9IDE7CisJCQlhdGtiZC0+bGFzdCA9IGNvZGU7CisJCQlhdGtiZC0+dGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGRldi0+cmVwW1JFUF9ERUxBWV0pIC8gMjsKKwkJfQogCi0JCQlpbnB1dF9ldmVudChkZXYsIEVWX0tFWSwga2V5Y29kZSwgdmFsdWUpOwotCQkJaW5wdXRfc3luYyhkZXYpOworCQlpbnB1dF9ldmVudChkZXYsIEVWX0tFWSwga2V5Y29kZSwgdmFsdWUpOworCQlpbnB1dF9zeW5jKGRldik7CiAKLQkJCWlmICh2YWx1ZSAmJiB0ZXN0X2JpdChjb2RlLCBhdGtiZC0+Zm9yY2VfcmVsZWFzZV9tYXNrKSkgewotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrZXljb2RlLCAwKTsKLQkJCQlpbnB1dF9zeW5jKGRldik7Ci0JCQl9CisJCWlmICh2YWx1ZSAmJiB0ZXN0X2JpdChjb2RlLCBhdGtiZC0+Zm9yY2VfcmVsZWFzZV9tYXNrKSkgeworCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGtleWNvZGUsIDApOworCQkJaW5wdXRfc3luYyhkZXYpOworCQl9CiAJfQogCiAJaWYgKGF0a2JkLT5zY3JvbGwpIHsKIAkJaWYgKGNsaWNrICE9IC0xKQogCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9NSURETEUsIGNsaWNrKTsKLQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9XSEVFTCwgc2Nyb2xsKTsKKwkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9XSEVFTCwKKwkJCQkgYXRrYmQtPnJlbGVhc2UgPyAtc2Nyb2xsIDogc2Nyb2xsKTsKIAkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9IV0hFRUwsIGhzY3JvbGwpOwogCQlpbnB1dF9zeW5jKGRldik7CiAJfQogCi0JYXRrYmQtPnJlbGVhc2UgPSAwOworCWF0a2JkLT5yZWxlYXNlID0gZmFsc2U7CiBvdXQ6CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNjM0LDE3ICs2MzMsMTggQEAKIAogCXN3aXRjaCAodHlwZSkgewogCi0JCWNhc2UgRVZfTEVEOgotCQkJYXRrYmRfc2NoZWR1bGVfZXZlbnRfd29yayhhdGtiZCwgQVRLQkRfTEVEX0VWRU5UX0JJVCk7Ci0JCQlyZXR1cm4gMDsKKwljYXNlIEVWX0xFRDoKKwkJYXRrYmRfc2NoZWR1bGVfZXZlbnRfd29yayhhdGtiZCwgQVRLQkRfTEVEX0VWRU5UX0JJVCk7CisJCXJldHVybiAwOwogCi0JCWNhc2UgRVZfUkVQOgotCQkJaWYgKCFhdGtiZC0+c29mdHJlcGVhdCkKLQkJCQlhdGtiZF9zY2hlZHVsZV9ldmVudF93b3JrKGF0a2JkLCBBVEtCRF9SRVBfRVZFTlRfQklUKTsKLQkJCXJldHVybiAwOworCWNhc2UgRVZfUkVQOgorCQlpZiAoIWF0a2JkLT5zb2Z0cmVwZWF0KQorCQkJYXRrYmRfc2NoZWR1bGVfZXZlbnRfd29yayhhdGtiZCwgQVRLQkRfUkVQX0VWRU5UX0JJVCk7CisJCXJldHVybiAwOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOwogCX0KLQotCXJldHVybiAtMTsKIH0KIAogLyoKQEAgLTY1NSw3ICs2NTUsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGF0a2JkX2VuYWJsZShzdHJ1Y3QgYXRrYmQgKmF0a2JkKQogewogCXNlcmlvX3BhdXNlX3J4KGF0a2JkLT5wczJkZXYuc2VyaW8pOwotCWF0a2JkLT5lbmFibGVkID0gMTsKKwlhdGtiZC0+ZW5hYmxlZCA9IHRydWU7CiAJc2VyaW9fY29udGludWVfcngoYXRrYmQtPnBzMmRldi5zZXJpbyk7CiB9CiAKQEAgLTY2Nyw3ICs2NjcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGF0a2JkX2Rpc2FibGUoc3RydWN0IGF0a2JkICphdGtiZCkKIHsKIAlzZXJpb19wYXVzZV9yeChhdGtiZC0+cHMyZGV2LnNlcmlvKTsKLQlhdGtiZC0+ZW5hYmxlZCA9IDA7CisJYXRrYmQtPmVuYWJsZWQgPSBmYWxzZTsKIAlzZXJpb19jb250aW51ZV9yeChhdGtiZC0+cHMyZGV2LnNlcmlvKTsKIH0KIApAQCAtNjg4LDcgKzY4OCw5IEBACiAKIAlpZiAoYXRrYmRfcmVzZXQpCiAJCWlmIChwczJfY29tbWFuZChwczJkZXYsIE5VTEwsIEFUS0JEX0NNRF9SRVNFVF9CQVQpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXRrYmQuYzoga2V5Ym9hcmQgcmVzZXQgZmFpbGVkIG9uICVzXG4iLCBwczJkZXYtPnNlcmlvLT5waHlzKTsKKwkJCWRldl93YXJuKCZwczJkZXYtPnNlcmlvLT5kZXYsCisJCQkJICJrZXlib2FyZCByZXNldCBmYWlsZWQgb24gJXNcbiIsCisJCQkJIHBzMmRldi0+c2VyaW8tPnBoeXMpOwogCiAvKgogICogVGhlbiB3ZSBjaGVjayB0aGUga2V5Ym9hcmQgSUQuIFdlIHNob3VsZCBnZXQgMHhhYjgzIHVuZGVyIG5vcm1hbCBjb25kaXRpb25zLgpAQCAtNzE4LDggKzcyMCw5IEBACiAJYXRrYmQtPmlkID0gKHBhcmFtWzBdIDw8IDgpIHwgcGFyYW1bMV07CiAKIAlpZiAoYXRrYmQtPmlkID09IDB4YWNhMSAmJiBhdGtiZC0+dHJhbnNsYXRlZCkgewotCQlwcmludGsoS0VSTl9FUlIgImF0a2JkLmM6IE5DRCB0ZXJtaW5hbCBrZXlib2FyZHMgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIG5vbi10cmFuc2xhdGluZ1xuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXRrYmQuYzogY29udHJvbGxlcnMuIFVzZSBpODA0Mi5kaXJlY3Q9MSB0byBkaXNhYmxlIHRyYW5zbGF0aW9uLlxuIik7CisJCWRldl9lcnIoJnBzMmRldi0+c2VyaW8tPmRldiwKKwkJCSJOQ0QgdGVybWluYWwga2V5Ym9hcmRzIGFyZSBvbmx5IHN1cHBvcnRlZCBvbiBub24tdHJhbnNsYXRpbmcgY29udHJvbGVscnMuICIKKwkJCSJVc2UgaTgwNDIuZGlyZWN0PTEgdG8gZGlzYWJsZSB0cmFuc2xhdGlvbi5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC03MzcsNyArNzQwLDcgQEAKIAlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmYXRrYmQtPnBzMmRldjsKIAl1bnNpZ25lZCBjaGFyIHBhcmFtWzJdOwogCi0JYXRrYmQtPmV4dHJhID0gMDsKKwlhdGtiZC0+ZXh0cmEgPSBmYWxzZTsKIC8qCiAgKiBGb3Iga25vd24gc3BlY2lhbCBrZXlib2FyZHMgd2UgY2FuIGdvIGFoZWFkIGFuZCBzZXQgdGhlIGNvcnJlY3Qgc2V0LgogICogV2UgY2hlY2sgZm9yIE5DRCBQUy8yIFN1biwgTm9ydGhHYXRlIE9tbmlLZXkgMTAxIGFuZApAQCAtNzU2LDcgKzc1OSw3IEBACiAJaWYgKGFsbG93X2V4dHJhKSB7CiAJCXBhcmFtWzBdID0gMHg3MTsKIAkJaWYgKCFwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBBVEtCRF9DTURfRVhfRU5BQkxFKSkgewotCQkJYXRrYmQtPmV4dHJhID0gMTsKKwkJCWF0a2JkLT5leHRyYSA9IHRydWU7CiAJCQlyZXR1cm4gMjsKIAkJfQogCX0KQEAgLTgyMSw3ICs4MjQsOCBAQAogICovCiAKIAlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCBBVEtCRF9DTURfRU5BQkxFKSkgewotCQlwcmludGsoS0VSTl9FUlIgImF0a2JkLmM6IEZhaWxlZCB0byBlbmFibGUga2V5Ym9hcmQgb24gJXNcbiIsCisJCWRldl9lcnIoJnBzMmRldi0+c2VyaW8tPmRldiwKKwkJCSJGYWlsZWQgdG8gZW5hYmxlIGtleWJvYXJkIG9uICVzXG4iLAogCQkJcHMyZGV2LT5zZXJpby0+cGh5cyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0xMDcwLDkgKzEwNzQsMTMgQEAKIAlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKIAlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKGF0a2JkX3NldDJfa2V5Y29kZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVRLQkRfS0VZTUFQX1NJWkU7IGkrKykKLQkJaWYgKGF0a2JkLT5rZXljb2RlW2ldICYmIGF0a2JkLT5rZXljb2RlW2ldIDwgQVRLQkRfU1BFQ0lBTCkKKwlmb3IgKGkgPSAwOyBpIDwgQVRLQkRfS0VZTUFQX1NJWkU7IGkrKykgeworCQlpZiAoYXRrYmQtPmtleWNvZGVbaV0gIT0gS0VZX1JFU0VSVkVEICYmCisJCSAgICBhdGtiZC0+a2V5Y29kZVtpXSAhPSBBVEtCRF9LRVlfTlVMTCAmJgorCQkgICAgYXRrYmQtPmtleWNvZGVbaV0gPCBBVEtCRF9TUEVDSUFMKSB7CiAJCQlfX3NldF9iaXQoYXRrYmQtPmtleWNvZGVbaV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKKwkJfQorCX0KIH0KIAogLyoKQEAgLTExMDAsMTIgKzExMDgsMTQgQEAKIAogCXN3aXRjaCAoc2VyaW8tPmlkLnR5cGUpIHsKIAotCQljYXNlIFNFUklPXzgwNDJfWEw6Ci0JCQlhdGtiZC0+dHJhbnNsYXRlZCA9IDE7Ci0JCWNhc2UgU0VSSU9fODA0MjoKLQkJCWlmIChzZXJpby0+d3JpdGUpCi0JCQkJYXRrYmQtPndyaXRlID0gMTsKLQkJCWJyZWFrOworCWNhc2UgU0VSSU9fODA0Ml9YTDoKKwkJYXRrYmQtPnRyYW5zbGF0ZWQgPSB0cnVlOworCQkvKiBGYWxsIHRocm91Z2ggKi8KKworCWNhc2UgU0VSSU9fODA0MjoKKwkJaWYgKHNlcmlvLT53cml0ZSkKKwkJCWF0a2JkLT53cml0ZSA9IHRydWU7CisJCWJyZWFrOwogCX0KIAogCWF0a2JkLT5zb2Z0cmF3ID0gYXRrYmRfc29mdHJhdzsKQEAgLTExMTMsNyArMTEyMyw3IEBACiAJYXRrYmQtPnNjcm9sbCA9IGF0a2JkX3Njcm9sbDsKIAogCWlmIChhdGtiZC0+c29mdHJlcGVhdCkKLQkJYXRrYmQtPnNvZnRyYXcgPSAxOworCQlhdGtiZC0+c29mdHJhdyA9IHRydWU7CiAKIAlzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgYXRrYmQpOwogCkBAIC0xMTcyLDcgKzExODIsOCBAQAogCWludCByZXR2YWwgPSAtMTsKIAogCWlmICghYXRrYmQgfHwgIWRydikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiYXRrYmQ6IHJlY29ubmVjdCByZXF1ZXN0LCBidXQgc2VyaW8gaXMgZGlzY29ubmVjdGVkLCBpZ25vcmluZy4uLlxuIik7CisJCWRldl9kYmcoJnNlcmlvLT5kZXYsCisJCQkicmVjb25uZWN0IHJlcXVlc3QsIGJ1dCBzZXJpbyBpcyBkaXNjb25uZWN0ZWQsIGlnbm9yaW5nLi4uXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTI4Niw3ICsxMjk3LDggQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpvbGRfZGV2LCAqbmV3X2RldjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWludCBlcnI7Ci0JdW5zaWduZWQgY2hhciBvbGRfZXh0cmEsIG9sZF9zZXQ7CisJYm9vbCBvbGRfZXh0cmE7CisJdW5zaWduZWQgY2hhciBvbGRfc2V0OwogCiAJaWYgKCFhdGtiZC0+d3JpdGUpCiAJCXJldHVybiAtRUlPOwpAQCAtMTM2OSw3ICsxMzgxLDcgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpvbGRfZGV2LCAqbmV3X2RldjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWludCBlcnI7Ci0JdW5zaWduZWQgY2hhciBvbGRfc2Nyb2xsOworCWJvb2wgb2xkX3Njcm9sbDsKIAogCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpIHx8IHZhbHVlID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDEzLDcgKzE0MjUsOCBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKm9sZF9kZXYsICpuZXdfZGV2OwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJaW50IGVycjsKLQl1bnNpZ25lZCBjaGFyIG9sZF9zZXQsIG9sZF9leHRyYTsKKwl1bnNpZ25lZCBjaGFyIG9sZF9zZXQ7CisJYm9vbCBvbGRfZXh0cmE7CiAKIAlpZiAoIWF0a2JkLT53cml0ZSkKIAkJcmV0dXJuIC1FSU87CkBAIC0xNDYzLDcgKzE0NzYsNyBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKm9sZF9kZXYsICpuZXdfZGV2OwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJaW50IGVycjsKLQl1bnNpZ25lZCBjaGFyIG9sZF9zb2Z0cmVwZWF0LCBvbGRfc29mdHJhdzsKKwlib29sIG9sZF9zb2Z0cmVwZWF0LCBvbGRfc29mdHJhdzsKIAogCWlmICghYXRrYmQtPndyaXRlKQogCQlyZXR1cm4gLUVJTzsKQEAgLTE0ODMsNyArMTQ5Niw3IEBACiAJCWF0a2JkLT5kZXYgPSBuZXdfZGV2OwogCQlhdGtiZC0+c29mdHJlcGVhdCA9IHZhbHVlOwogCQlpZiAoYXRrYmQtPnNvZnRyZXBlYXQpCi0JCQlhdGtiZC0+c29mdHJhdyA9IDE7CisJCQlhdGtiZC0+c29mdHJhdyA9IHRydWU7CiAJCWF0a2JkX3NldF9kZXZpY2VfYXR0cnMoYXRrYmQpOwogCiAJCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShhdGtiZC0+ZGV2KTsKQEAgLTE1MTMsNyArMTUyNiw3IEBACiAJc3RydWN0IGlucHV0X2RldiAqb2xkX2RldiwgKm5ld19kZXY7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAlpbnQgZXJyOwotCXVuc2lnbmVkIGNoYXIgb2xkX3NvZnRyYXc7CisJYm9vbCBvbGRfc29mdHJhdzsKIAogCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpIHx8IHZhbHVlID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2VwOTN4eF9rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZXA5M3h4X2tleXBhZC5jCmluZGV4IGU0NTc0MDQuLmJkMjVhM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZXA5M3h4X2tleXBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZXA5M3h4X2tleXBhZC5jCkBAIC02OSw3ICs2OSw3IEBACiAKIAl2b2lkIF9faW9tZW0gKm1taW9fYmFzZTsKIAotCXVuc2lnbmVkIGludCBtYXRyaXhfa2V5Y29kZXNbRVA5M1hYX01BVFJJWF9TSVpFXTsKKwl1bnNpZ25lZCBzaG9ydCBrZXljb2Rlc1tFUDkzWFhfTUFUUklYX1NJWkVdOwogCiAJaW50IGtleTE7CiAJaW50IGtleTI7CkBAIC03OSwyNCArNzksNiBAQAogCWJvb2wgZW5hYmxlZDsKIH07CiAKLXN0YXRpYyB2b2lkIGVwOTN4eF9rZXlwYWRfYnVpbGRfa2V5Y29kZShzdHJ1Y3QgZXA5M3h4X2tleXBhZCAqa2V5cGFkKQotewotCXN0cnVjdCBlcDkzeHhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0ga2V5cGFkLT5wZGF0YTsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBrZXlwYWQtPmlucHV0X2RldjsKLQl1bnNpZ25lZCBpbnQgKmtleTsKLQlpbnQgaTsKLQotCWtleSA9ICZwZGF0YS0+bWF0cml4X2tleV9tYXBbMF07Ci0JZm9yIChpID0gMDsgaSA8IHBkYXRhLT5tYXRyaXhfa2V5X21hcF9zaXplOyBpKyssIGtleSsrKSB7Ci0JCWludCByb3cgPSBLRVlfUk9XKCprZXkpOwotCQlpbnQgY29sID0gS0VZX0NPTCgqa2V5KTsKLQkJaW50IGNvZGUgPSBLRVlfVkFMKCprZXkpOwotCi0JCWtleXBhZC0+bWF0cml4X2tleWNvZGVzWyhyb3cgPDwgMykgKyBjb2xdID0gY29kZTsKLQkJX19zZXRfYml0KGNvZGUsIGlucHV0X2Rldi0+a2V5Yml0KTsKLQl9Ci19Ci0KIHN0YXRpYyBpcnFyZXR1cm5fdCBlcDkzeHhfa2V5cGFkX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgZXA5M3h4X2tleXBhZCAqa2V5cGFkID0gZGV2X2lkOwpAQCAtMTA3LDEwICs4OSwxMCBAQAogCXN0YXR1cyA9IF9fcmF3X3JlYWRsKGtleXBhZC0+bW1pb19iYXNlICsgS0VZX1JFRyk7CiAKIAlrZXljb2RlID0gKHN0YXR1cyAmIEtFWV9SRUdfS0VZMV9NQVNLKSA+PiBLRVlfUkVHX0tFWTFfU0hJRlQ7Ci0Ja2V5MSA9IGtleXBhZC0+bWF0cml4X2tleWNvZGVzW2tleWNvZGVdOworCWtleTEgPSBrZXlwYWQtPmtleWNvZGVzW2tleWNvZGVdOwogCiAJa2V5Y29kZSA9IChzdGF0dXMgJiBLRVlfUkVHX0tFWTJfTUFTSykgPj4gS0VZX1JFR19LRVkyX1NISUZUOwotCWtleTIgPSBrZXlwYWQtPm1hdHJpeF9rZXljb2Rlc1trZXljb2RlXTsKKwlrZXkyID0ga2V5cGFkLT5rZXljb2Rlc1trZXljb2RlXTsKIAogCWlmIChzdGF0dXMgJiBLRVlfUkVHXzJLRVlTKSB7CiAJCWlmIChrZXlwYWQtPmtleTEgJiYga2V5MSAhPSBrZXlwYWQtPmtleTEgJiYga2V5MiAhPSBrZXlwYWQtPmtleTEpCkBAIC0yNTYsNiArMjM4LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGVwOTN4eF9rZXlwYWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZXA5M3h4X2tleXBhZCAqa2V5cGFkOworCWNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgKmtleW1hcF9kYXRhOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgZXJyOwpAQCAtMjcwLDYgKzI1MywxMiBAQAogCQlnb3RvIGZhaWxlZF9mcmVlOwogCX0KIAorCWtleW1hcF9kYXRhID0ga2V5cGFkLT5wZGF0YS0+a2V5bWFwX2RhdGE7CisJaWYgKCFrZXltYXBfZGF0YSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGZhaWxlZF9mcmVlOworCX0KKwogCWtleXBhZC0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoIWtleXBhZC0+aXJxKSB7CiAJCWVyciA9IC1FTlhJTzsKQEAgLTMxNyw5ICszMDYsOSBAQAogCWlucHV0X2Rldi0+b3BlbiA9IGVwOTN4eF9rZXlwYWRfb3BlbjsKIAlpbnB1dF9kZXYtPmNsb3NlID0gZXA5M3h4X2tleXBhZF9jbG9zZTsKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwotCWlucHV0X2Rldi0+a2V5Y29kZSA9IGtleXBhZC0+bWF0cml4X2tleWNvZGVzOwotCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2Yoa2V5cGFkLT5tYXRyaXhfa2V5Y29kZXNbMF0pOwotCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUoa2V5cGFkLT5tYXRyaXhfa2V5Y29kZXMpOworCWlucHV0X2Rldi0+a2V5Y29kZSA9IGtleXBhZC0+a2V5Y29kZXM7CisJaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZihrZXlwYWQtPmtleWNvZGVzWzBdKTsKKwlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKGtleXBhZC0+a2V5Y29kZXMpOwogCiAJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBrZXlwYWQpOwogCkBAIC0zMjcsNyArMzE2LDggQEAKIAlpZiAoa2V5cGFkLT5wZGF0YS0+ZmxhZ3MgJiBFUDkzWFhfS0VZUEFEX0FVVE9SRVBFQVQpCiAJCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUX01BU0soRVZfUkVQKTsKIAotCWVwOTN4eF9rZXlwYWRfYnVpbGRfa2V5Y29kZShrZXlwYWQpOworCW1hdHJpeF9rZXlwYWRfYnVpbGRfa2V5bWFwKGtleW1hcF9kYXRhLCAzLAorCQkJCSAgIGlucHV0X2Rldi0+a2V5Y29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGtleXBhZCk7CiAKIAllcnIgPSByZXF1ZXN0X2lycShrZXlwYWQtPmlycSwgZXA5M3h4X2tleXBhZF9pcnFfaGFuZGxlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCmluZGV4IDFhZmYzYjcuLjJiNzA4YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYwpAQCAtMzAsMTMgKzMwLDI4OSBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCWJvb2wgZGlzYWJsZWQ7CiB9OwogCiBzdHJ1Y3QgZ3Bpb19rZXlzX2RydmRhdGEgewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCXN0cnVjdCBtdXRleCBkaXNhYmxlX2xvY2s7CisJdW5zaWduZWQgaW50IG5fYnV0dG9uczsKIAlzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSBkYXRhWzBdOwogfTsKIAorLyoKKyAqIFNZU0ZTIGludGVyZmFjZSBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGtleXMgYW5kIHN3aXRjaGVzOgorICoKKyAqIFRoZXJlIGFyZSA0IGF0dHJpYnV0ZXMgdW5kZXIgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2dwaW8ta2V5cy8KKyAqCWtleXMgW3JvXSAgICAgICAgICAgICAgLSBiaXRtYXAgb2Yga2V5cyAoRVZfS0VZKSB3aGljaCBjYW4gYmUKKyAqCSAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZAorICoJc3dpdGNoZXMgW3JvXSAgICAgICAgICAtIGJpdG1hcCBvZiBzd2l0Y2hlcyAoRVZfU1cpIHdoaWNoIGNhbiBiZQorICoJICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkCisgKglkaXNhYmxlZF9rZXlzIFtyd10gICAgIC0gYml0bWFwIG9mIGtleXMgY3VycmVudGx5IGRpc2FibGVkCisgKglkaXNhYmxlZF9zd2l0Y2hlcyBbcnddIC0gYml0bWFwIG9mIHN3aXRjaGVzIGN1cnJlbnRseSBkaXNhYmxlZAorICoKKyAqIFVzZXJsYW5kIGNhbiBjaGFuZ2UgdGhlc2UgdmFsdWVzIGFuZCBoZW5jZSBkaXNhYmxlIGV2ZW50IGdlbmVyYXRpb24KKyAqIGZvciBlYWNoIGtleSAob3Igc3dpdGNoKS4gRGlzYWJsaW5nIGEga2V5IG1lYW5zIGl0cyBpbnRlcnJ1cHQgbGluZQorICogaXMgZGlzYWJsZWQuCisgKgorICogRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgZm9sbG93aW5nIHN3aXRjaGVzIHNldCB1cCBhcyBncGlvLWtleXM6CisgKglTV19ET0NLID0gNQorICoJU1dfQ0FNRVJBX0xFTlNfQ09WRVIgPSA5CisgKglTV19LRVlQQURfU0xJREUgPSAxMAorICoJU1dfRlJPTlRfUFJPWElNSVRZID0gMTEKKyAqIFRoaXMgaXMgcmVhZCBmcm9tIHN3aXRjaGVzOgorICoJMTEtOSw1CisgKiBOZXh0IHdlIHdhbnQgdG8gZGlzYWJsZSBwcm94aW1pdHkgKDExKSBhbmQgZG9jayAoNSksIHdlIHdyaXRlOgorICoJMTEsNQorICogdG8gZmlsZSBkaXNhYmxlZF9zd2l0Y2hlcy4gTm93IHByb3hpbWl0eSBhbmQgZG9jayBJUlFzIGFyZSBkaXNhYmxlZC4KKyAqIFRoaXMgY2FuIGJlIHZlcmlmaWVkIGJ5IHJlYWRpbmcgdGhlIGZpbGUgZGlzYWJsZWRfc3dpdGNoZXM6CisgKgkxMSw1CisgKiBJZiB3ZSBub3cgd2FudCB0byBlbmFibGUgcHJveGltaXR5ICgxMSkgc3dpdGNoIHdlIHdyaXRlOgorICoJNQorICogdG8gZGlzYWJsZWRfc3dpdGNoZXMuCisgKgorICogV2UgY2FuIGRpc2FibGUgb25seSB0aG9zZSBrZXlzIHdoaWNoIGRvbid0IGFsbG93IHNoYXJpbmcgdGhlIGlycS4KKyAqLworCisvKioKKyAqIGdldF9uX2V2ZW50c19ieV90eXBlKCkgLSByZXR1cm5zIG1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyBwZXIgQHR5cGUKKyAqIEB0eXBlOiB0eXBlIG9mIGJ1dHRvbiAoJUVWX0tFWSwgJUVWX1NXKQorICoKKyAqIFJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGFsbG9jYXRlIGJpdG1hcAorICogbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIGJpdHMgZm9yIGdpdmVuIHR5cGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdldF9uX2V2ZW50c19ieV90eXBlKGludCB0eXBlKQoreworCUJVR19PTih0eXBlICE9IEVWX1NXICYmIHR5cGUgIT0gRVZfS0VZKTsKKworCXJldHVybiAodHlwZSA9PSBFVl9LRVkpID8gS0VZX0NOVCA6IFNXX0NOVDsKK30KKworLyoqCisgKiBncGlvX2tleXNfZGlzYWJsZV9idXR0b24oKSAtIGRpc2FibGVzIGdpdmVuIEdQSU8gYnV0dG9uCisgKiBAYmRhdGE6IGJ1dHRvbiBkYXRhIGZvciBidXR0b24gdG8gYmUgZGlzYWJsZWQKKyAqCisgKiBEaXNhYmxlcyBidXR0b24gcG9pbnRlZCBieSBAYmRhdGEuIFRoaXMgaXMgZG9uZSBieSBtYXNraW5nCisgKiBJUlEgbGluZS4gQWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIGJ1dHRvbiB3b24ndCBnZW5lcmF0ZQorICogaW5wdXQgZXZlbnRzIGFueW1vcmUuIE5vdGUgdGhhdCBvbmUgY2FuIG9ubHkgZGlzYWJsZSBidXR0b25zCisgKiB0aGF0IGRvbid0IHNoYXJlIElSUXMuCisgKgorICogTWFrZSBzdXJlIHRoYXQgQGJkYXRhLT5kaXNhYmxlX2xvY2sgaXMgbG9ja2VkIHdoZW4gZW50ZXJpbmcKKyAqIHRoaXMgZnVuY3Rpb24gdG8gYXZvaWQgcmFjZXMgd2hlbiBjb25jdXJyZW50IHRocmVhZHMgYXJlCisgKiBkaXNhYmxpbmcgYnV0dG9ucyBhdCB0aGUgc2FtZSB0aW1lLgorICovCitzdGF0aWMgdm9pZCBncGlvX2tleXNfZGlzYWJsZV9idXR0b24oc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKmJkYXRhKQoreworCWlmICghYmRhdGEtPmRpc2FibGVkKSB7CisJCS8qCisJCSAqIERpc2FibGUgSVJRIGFuZCBwb3NzaWJsZSBkZWJvdW5jaW5nIHRpbWVyLgorCQkgKi8KKwkJZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEoYmRhdGEtPmJ1dHRvbi0+Z3BpbykpOworCQlpZiAoYmRhdGEtPmJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWwpCisJCQlkZWxfdGltZXJfc3luYygmYmRhdGEtPnRpbWVyKTsKKworCQliZGF0YS0+ZGlzYWJsZWQgPSB0cnVlOworCX0KK30KKworLyoqCisgKiBncGlvX2tleXNfZW5hYmxlX2J1dHRvbigpIC0gZW5hYmxlcyBnaXZlbiBHUElPIGJ1dHRvbgorICogQGJkYXRhOiBidXR0b24gZGF0YSBmb3IgYnV0dG9uIHRvIGJlIGRpc2FibGVkCisgKgorICogRW5hYmxlcyBnaXZlbiBidXR0b24gcG9pbnRlZCBieSBAYmRhdGEuCisgKgorICogTWFrZSBzdXJlIHRoYXQgQGJkYXRhLT5kaXNhYmxlX2xvY2sgaXMgbG9ja2VkIHdoZW4gZW50ZXJpbmcKKyAqIHRoaXMgZnVuY3Rpb24gdG8gYXZvaWQgcmFjZXMgd2l0aCBjb25jdXJyZW50IHRocmVhZHMgdHJ5aW5nCisgKiB0byBlbmFibGUgdGhlIHNhbWUgYnV0dG9uIGF0IHRoZSBzYW1lIHRpbWUuCisgKi8KK3N0YXRpYyB2b2lkIGdwaW9fa2V5c19lbmFibGVfYnV0dG9uKHN0cnVjdCBncGlvX2J1dHRvbl9kYXRhICpiZGF0YSkKK3sKKwlpZiAoYmRhdGEtPmRpc2FibGVkKSB7CisJCWVuYWJsZV9pcnEoZ3Bpb190b19pcnEoYmRhdGEtPmJ1dHRvbi0+Z3BpbykpOworCQliZGF0YS0+ZGlzYWJsZWQgPSBmYWxzZTsKKwl9Cit9CisKKy8qKgorICogZ3Bpb19rZXlzX2F0dHJfc2hvd19oZWxwZXIoKSAtIGZpbGwgaW4gc3RyaW5naWZpZWQgYml0bWFwIG9mIGJ1dHRvbnMKKyAqIEBkZGF0YTogcG9pbnRlciB0byBkcnZkYXRhCisgKiBAYnVmOiBidWZmZXIgd2hlcmUgc3RyaW5naWZpZWQgYml0bWFwIGlzIHdyaXR0ZW4KKyAqIEB0eXBlOiBidXR0b24gdHlwZSAoJUVWX0tFWSwgJUVWX1NXKQorICogQG9ubHlfZGlzYWJsZWQ6IGRvZXMgY2FsbGVyIHdhbnQgb25seSB0aG9zZSBidXR0b25zIHRoYXQgYXJlCisgKiAgICAgICAgICAgICAgICAgY3VycmVudGx5IGRpc2FibGVkIG9yIGFsbCBidXR0b25zIHRoYXQgY2FuIGJlCisgKiAgICAgICAgICAgICAgICAgZGlzYWJsZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBidXR0b25zIHRoYXQgY2FuIGJlIGRpc2FibGVkIHRvIEBidWYuIElmCisgKiBAb25seV9kaXNhYmxlZCBpcyB0cnVlLCB0aGVuIEBidWYgY29udGFpbnMgb25seSB0aG9zZSBidXR0b25zCisgKiB0aGF0IGFyZSBjdXJyZW50bHkgZGlzYWJsZWQuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlCisgKiBlcnJubyBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgc3NpemVfdCBncGlvX2tleXNfYXR0cl9zaG93X2hlbHBlcihzdHJ1Y3QgZ3Bpb19rZXlzX2RydmRhdGEgKmRkYXRhLAorCQkJCQkgIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IHR5cGUsCisJCQkJCSAgYm9vbCBvbmx5X2Rpc2FibGVkKQoreworCWludCBuX2V2ZW50cyA9IGdldF9uX2V2ZW50c19ieV90eXBlKHR5cGUpOworCXVuc2lnbmVkIGxvbmcgKmJpdHM7CisJc3NpemVfdCByZXQ7CisJaW50IGk7CisKKwliaXRzID0ga2NhbGxvYyhCSVRTX1RPX0xPTkdTKG5fZXZlbnRzKSwgc2l6ZW9mKCpiaXRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiaXRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBkZGF0YS0+bl9idXR0b25zOyBpKyspIHsKKwkJc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKmJkYXRhID0gJmRkYXRhLT5kYXRhW2ldOworCisJCWlmIChiZGF0YS0+YnV0dG9uLT50eXBlICE9IHR5cGUpCisJCQljb250aW51ZTsKKworCQlpZiAob25seV9kaXNhYmxlZCAmJiAhYmRhdGEtPmRpc2FibGVkKQorCQkJY29udGludWU7CisKKwkJX19zZXRfYml0KGJkYXRhLT5idXR0b24tPmNvZGUsIGJpdHMpOworCX0KKworCXJldCA9IGJpdG1hcF9zY25saXN0cHJpbnRmKGJ1ZiwgUEFHRV9TSVpFIC0gMiwgYml0cywgbl9ldmVudHMpOworCWJ1ZltyZXQrK10gPSAnXG4nOworCWJ1ZltyZXRdID0gJ1wwJzsKKworCWtmcmVlKGJpdHMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBncGlvX2tleXNfYXR0cl9zdG9yZV9oZWxwZXIoKSAtIGVuYWJsZS9kaXNhYmxlIGJ1dHRvbnMgYmFzZWQgb24gZ2l2ZW4gYml0bWFwCisgKiBAZGRhdGE6IHBvaW50ZXIgdG8gZHJ2ZGF0YQorICogQGJ1ZjogYnVmZmVyIGZyb20gdXNlcnNwYWNlIHRoYXQgY29udGFpbnMgc3RyaW5naWZpZWQgYml0bWFwCisgKiBAdHlwZTogYnV0dG9uIHR5cGUgKCVFVl9LRVksICVFVl9TVykKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBzdHJpbmdpZmllZCBiaXRtYXAgZnJvbSBAYnVmIGFuZCBkaXNhYmxlcy9lbmFibGVzCisgKiBHUElPIGJ1dHRvbnMgYWNjb3JkaW5seS4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIGVycm9yCisgKiBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgc3NpemVfdCBncGlvX2tleXNfYXR0cl9zdG9yZV9oZWxwZXIoc3RydWN0IGdwaW9fa2V5c19kcnZkYXRhICpkZGF0YSwKKwkJCQkJICAgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlpbnQgbl9ldmVudHMgPSBnZXRfbl9ldmVudHNfYnlfdHlwZSh0eXBlKTsKKwl1bnNpZ25lZCBsb25nICpiaXRzOworCXNzaXplX3QgZXJyb3I7CisJaW50IGk7CisKKwliaXRzID0ga2NhbGxvYyhCSVRTX1RPX0xPTkdTKG5fZXZlbnRzKSwgc2l6ZW9mKCpiaXRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiaXRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVycm9yID0gYml0bWFwX3BhcnNlbGlzdChidWYsIGJpdHMsIG5fZXZlbnRzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCisJLyogRmlyc3QgdmFsaWRhdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGRhdGEtPm5fYnV0dG9uczsgaSsrKSB7CisJCXN0cnVjdCBncGlvX2J1dHRvbl9kYXRhICpiZGF0YSA9ICZkZGF0YS0+ZGF0YVtpXTsKKworCQlpZiAoYmRhdGEtPmJ1dHRvbi0+dHlwZSAhPSB0eXBlKQorCQkJY29udGludWU7CisKKwkJaWYgKHRlc3RfYml0KGJkYXRhLT5idXR0b24tPmNvZGUsIGJpdHMpICYmCisJCSAgICAhYmRhdGEtPmJ1dHRvbi0+Y2FuX2Rpc2FibGUpIHsKKwkJCWVycm9yID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJbXV0ZXhfbG9jaygmZGRhdGEtPmRpc2FibGVfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGRhdGEtPm5fYnV0dG9uczsgaSsrKSB7CisJCXN0cnVjdCBncGlvX2J1dHRvbl9kYXRhICpiZGF0YSA9ICZkZGF0YS0+ZGF0YVtpXTsKKworCQlpZiAoYmRhdGEtPmJ1dHRvbi0+dHlwZSAhPSB0eXBlKQorCQkJY29udGludWU7CisKKwkJaWYgKHRlc3RfYml0KGJkYXRhLT5idXR0b24tPmNvZGUsIGJpdHMpKQorCQkJZ3Bpb19rZXlzX2Rpc2FibGVfYnV0dG9uKGJkYXRhKTsKKwkJZWxzZQorCQkJZ3Bpb19rZXlzX2VuYWJsZV9idXR0b24oYmRhdGEpOworCX0KKworCW11dGV4X3VubG9jaygmZGRhdGEtPmRpc2FibGVfbG9jayk7CisKK291dDoKKwlrZnJlZShiaXRzKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKyNkZWZpbmUgQVRUUl9TSE9XX0ZOKG5hbWUsIHR5cGUsIG9ubHlfZGlzYWJsZWQpCQkJCVwKK3N0YXRpYyBzc2l6ZV90IGdwaW9fa2V5c19zaG93XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQlcCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAorCQkJCSAgICAgY2hhciAqYnVmKQkJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsJCVwKKwlzdHJ1Y3QgZ3Bpb19rZXlzX2RydmRhdGEgKmRkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gZ3Bpb19rZXlzX2F0dHJfc2hvd19oZWxwZXIoZGRhdGEsIGJ1ZiwJCQlcCisJCQkJCSAgdHlwZSwgb25seV9kaXNhYmxlZCk7CQlcCit9CisKK0FUVFJfU0hPV19GTihrZXlzLCBFVl9LRVksIGZhbHNlKTsKK0FUVFJfU0hPV19GTihzd2l0Y2hlcywgRVZfU1csIGZhbHNlKTsKK0FUVFJfU0hPV19GTihkaXNhYmxlZF9rZXlzLCBFVl9LRVksIHRydWUpOworQVRUUl9TSE9XX0ZOKGRpc2FibGVkX3N3aXRjaGVzLCBFVl9TVywgdHJ1ZSk7CisKKy8qCisgKiBBVFRSSUJVVEVTOgorICoKKyAqIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9ncGlvLWtleXMva2V5cyBbcm9dCisgKiAvc3lzL2RldmljZXMvcGxhdGZvcm0vZ3Bpby1rZXlzL3N3aXRjaGVzIFtyb10KKyAqLworc3RhdGljIERFVklDRV9BVFRSKGtleXMsIFNfSVJVR08sIGdwaW9fa2V5c19zaG93X2tleXMsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHN3aXRjaGVzLCBTX0lSVUdPLCBncGlvX2tleXNfc2hvd19zd2l0Y2hlcywgTlVMTCk7CisKKyNkZWZpbmUgQVRUUl9TVE9SRV9GTihuYW1lLCB0eXBlKQkJCQkJXAorc3RhdGljIHNzaXplX3QgZ3Bpb19rZXlzX3N0b3JlXyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQlcCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKKwkJCQkgICAgICBjb25zdCBjaGFyICpidWYsCQkJXAorCQkJCSAgICAgIHNpemVfdCBjb3VudCkJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsJCVwKKwlzdHJ1Y3QgZ3Bpb19rZXlzX2RydmRhdGEgKmRkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CVwKKwlzc2l6ZV90IGVycm9yOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJZXJyb3IgPSBncGlvX2tleXNfYXR0cl9zdG9yZV9oZWxwZXIoZGRhdGEsIGJ1ZiwgdHlwZSk7CQlcCisJaWYgKGVycm9yKQkJCQkJCQlcCisJCXJldHVybiBlcnJvcjsJCQkJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIGNvdW50OwkJCQkJCQlcCit9CisKK0FUVFJfU1RPUkVfRk4oZGlzYWJsZWRfa2V5cywgRVZfS0VZKTsKK0FUVFJfU1RPUkVfRk4oZGlzYWJsZWRfc3dpdGNoZXMsIEVWX1NXKTsKKworLyoKKyAqIEFUVFJJQlVURVM6CisgKgorICogL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2dwaW8ta2V5cy9kaXNhYmxlZF9rZXlzIFtyd10KKyAqIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9ncGlvLWtleXMvZGlzYWJsZXNfc3dpdGNoZXMgW3J3XQorICovCitzdGF0aWMgREVWSUNFX0FUVFIoZGlzYWJsZWRfa2V5cywgU19JV1VTUiB8IFNfSVJVR08sCisJCSAgIGdwaW9fa2V5c19zaG93X2Rpc2FibGVkX2tleXMsCisJCSAgIGdwaW9fa2V5c19zdG9yZV9kaXNhYmxlZF9rZXlzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkaXNhYmxlZF9zd2l0Y2hlcywgU19JV1VTUiB8IFNfSVJVR08sCisJCSAgIGdwaW9fa2V5c19zaG93X2Rpc2FibGVkX3N3aXRjaGVzLAorCQkgICBncGlvX2tleXNfc3RvcmVfZGlzYWJsZWRfc3dpdGNoZXMpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZ3Bpb19rZXlzX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2tleXMuYXR0ciwKKwkmZGV2X2F0dHJfc3dpdGNoZXMuYXR0ciwKKwkmZGV2X2F0dHJfZGlzYWJsZWRfa2V5cy5hdHRyLAorCSZkZXZfYXR0cl9kaXNhYmxlZF9zd2l0Y2hlcy5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBncGlvX2tleXNfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBncGlvX2tleXNfYXR0cnMsCit9OworCiBzdGF0aWMgdm9pZCBncGlvX2tleXNfcmVwb3J0X2V2ZW50KHN0cnVjdCBncGlvX2J1dHRvbl9kYXRhICpiZGF0YSkKIHsKIAlzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiAqYnV0dG9uID0gYmRhdGEtPmJ1dHRvbjsKQEAgLTc5LDExICszNTUsMTMgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGdwaW9fa2V5c19zZXR1cF9rZXkoc3RydWN0IGRldmljZSAqZGV2LAorc3RhdGljIGludCBfX2RldmluaXQgZ3Bpb19rZXlzX3NldHVwX2tleShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJCQkgc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKmJkYXRhLAogCQkJCQkgc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbikKIHsKIAljaGFyICpkZXNjID0gYnV0dG9uLT5kZXNjID8gYnV0dG9uLT5kZXNjIDogImdwaW9fa2V5cyI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCWludCBpcnEsIGVycm9yOwogCiAJc2V0dXBfdGltZXIoJmJkYXRhLT50aW1lciwgZ3Bpb19rZXlzX3RpbWVyLCAodW5zaWduZWQgbG9uZyliZGF0YSk7CkBAIC0xMTIsMTAgKzM5MCwxNSBAQAogCQlnb3RvIGZhaWwzOwogCX0KIAotCWVycm9yID0gcmVxdWVzdF9pcnEoaXJxLCBncGlvX2tleXNfaXNyLAotCQkJICAgIElSUUZfU0hBUkVEIHwKLQkJCSAgICBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkgICAgZGVzYywgYmRhdGEpOworCWlycWZsYWdzID0gSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HOworCS8qCisJICogSWYgcGxhdGZvcm0gaGFzIHNwZWNpZmllZCB0aGF0IHRoZSBidXR0b24gY2FuIGJlIGRpc2FibGVkLAorCSAqIHdlIGRvbid0IHdhbnQgaXQgdG8gc2hhcmUgdGhlIGludGVycnVwdCBsaW5lLgorCSAqLworCWlmICghYnV0dG9uLT5jYW5fZGlzYWJsZSkKKwkJaXJxZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CisKKwllcnJvciA9IHJlcXVlc3RfaXJxKGlycSwgZ3Bpb19rZXlzX2lzciwgaXJxZmxhZ3MsIGRlc2MsIGJkYXRhKTsKIAlpZiAoZXJyb3IpIHsKIAkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gY2xhaW0gaXJxICVkOyBlcnJvciAlZFxuIiwKIAkJCWlycSwgZXJyb3IpOwpAQCAtMTQ5LDYgKzQzMiwxMCBAQAogCQlnb3RvIGZhaWwxOwogCX0KIAorCWRkYXRhLT5pbnB1dCA9IGlucHV0OworCWRkYXRhLT5uX2J1dHRvbnMgPSBwZGF0YS0+bmJ1dHRvbnM7CisJbXV0ZXhfaW5pdCgmZGRhdGEtPmRpc2FibGVfbG9jayk7CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZGF0YSk7CiAKIAlpbnB1dC0+bmFtZSA9IHBkZXYtPm5hbWU7CkBAIC0xNjQsOCArNDUxLDYgQEAKIAlpZiAocGRhdGEtPnJlcCkKIAkJX19zZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKIAotCWRkYXRhLT5pbnB1dCA9IGlucHV0OwotCiAJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5uYnV0dG9uczsgaSsrKSB7CiAJCXN0cnVjdCBncGlvX2tleXNfYnV0dG9uICpidXR0b24gPSAmcGRhdGEtPmJ1dHRvbnNbaV07CiAJCXN0cnVjdCBncGlvX2J1dHRvbl9kYXRhICpiZGF0YSA9ICZkZGF0YS0+ZGF0YVtpXTsKQEAgLTE3NCw3ICs0NTksNyBAQAogCQliZGF0YS0+aW5wdXQgPSBpbnB1dDsKIAkJYmRhdGEtPmJ1dHRvbiA9IGJ1dHRvbjsKIAotCQllcnJvciA9IGdwaW9fa2V5c19zZXR1cF9rZXkoZGV2LCBiZGF0YSwgYnV0dG9uKTsKKwkJZXJyb3IgPSBncGlvX2tleXNfc2V0dXBfa2V5KHBkZXYsIGJkYXRhLCBidXR0b24pOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGZhaWwyOwogCkBAIC0xODQsMTEgKzQ2OSwxOCBAQAogCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dCwgdHlwZSwgYnV0dG9uLT5jb2RlKTsKIAl9CiAKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZncGlvX2tleXNfYXR0cl9ncm91cCk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGV4cG9ydCBrZXlzL3N3aXRjaGVzLCBlcnJvcjogJWRcbiIsCisJCQllcnJvcik7CisJCWdvdG8gZmFpbDI7CisJfQorCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOwogCWlmIChlcnJvcikgewotCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2UsICIKLQkJCSJlcnJvcjogJWRcbiIsIGVycm9yKTsKLQkJZ290byBmYWlsMjsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlLCBlcnJvcjogJWRcbiIsCisJCQllcnJvcik7CisJCWdvdG8gZmFpbDM7CiAJfQogCiAJLyogZ2V0IGN1cnJlbnQgc3RhdGUgb2YgYnV0dG9ucyAqLwpAQCAtMjAwLDYgKzQ5Miw4IEBACiAKIAlyZXR1cm4gMDsKIAorIGZhaWwzOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZncGlvX2tleXNfYXR0cl9ncm91cCk7CiAgZmFpbDI6CiAJd2hpbGUgKC0taSA+PSAwKSB7CiAJCWZyZWVfaXJxKGdwaW9fdG9faXJxKHBkYXRhLT5idXR0b25zW2ldLmdwaW8pLCAmZGRhdGEtPmRhdGFbaV0pOwpAQCAtMjI0LDYgKzUxOCw4IEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBkZGF0YS0+aW5wdXQ7CiAJaW50IGk7CiAKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmZ3Bpb19rZXlzX2F0dHJfZ3JvdXApOworCiAJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDApOwogCiAJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5uYnV0dG9uczsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2lteF9rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaW14X2tleXBhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZTViNzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2lteF9rZXlwYWQuYwpAQCAtMCwwICsxLDU5NCBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIElNWCBrZXlwYWQgcG9ydC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGJlcnRvIFBhbml6em8gPG1hcmFtYW9wZXJjaGVzZWltb3J0b0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiA8PFBvd2VyIG1hbmFnZW1lbnQgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQ+Pi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKy8qCisgKiBLZXlwYWQgQ29udHJvbGxlciByZWdpc3RlcnMgKGhhbGZ3b3JkKQorICovCisjZGVmaW5lIEtQQ1IJCTB4MDAgLyogS2V5cGFkIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBLUFNSCQkweDAyIC8qIEtleXBhZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgS0JEX1NUQVRfS1BLRAkoMHgxIDw8IDApIC8qIEtleSBQcmVzcyBJbnRlcnJ1cHQgU3RhdHVzIGJpdCAodzFjKSAqLworI2RlZmluZSBLQkRfU1RBVF9LUEtSCSgweDEgPDwgMSkgLyogS2V5IFJlbGVhc2UgSW50ZXJydXB0IFN0YXR1cyBiaXQgKHcxYykgKi8KKyNkZWZpbmUgS0JEX1NUQVRfS0RTQwkoMHgxIDw8IDIpIC8qIEtleSBEZXByZXNzIFN5bmNoIENoYWluIFN0YXR1cyBiaXQgKHcxYykqLworI2RlZmluZSBLQkRfU1RBVF9LUlNTCSgweDEgPDwgMykgLyogS2V5IFJlbGVhc2UgU3luY2ggU3RhdHVzIGJpdCAodzFjKSovCisjZGVmaW5lIEtCRF9TVEFUX0tESUUJKDB4MSA8PCA4KSAvKiBLZXkgRGVwcmVzcyBJbnRlcnJ1cHQgRW5hYmxlIFN0YXR1cyBiaXQgKi8KKyNkZWZpbmUgS0JEX1NUQVRfS1JJRQkoMHgxIDw8IDkpIC8qIEtleSBSZWxlYXNlIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgS0JEX1NUQVRfS1BQRU4JKDB4MSA8PCAxMCkgLyogS2V5cGFkIENsb2NrIEVuYWJsZSAqLworCisjZGVmaW5lIEtERFIJCTB4MDQgLyogS2V5cGFkIERhdGEgRGlyZWN0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEtQRFIJCTB4MDYgLyogS2V5cGFkIERhdGEgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBNQVhfTUFUUklYX0tFWV9ST1dTCTgKKyNkZWZpbmUgTUFYX01BVFJJWF9LRVlfQ09MUwk4CisjZGVmaW5lIE1BVFJJWF9ST1dfU0hJRlQJMworCisjZGVmaW5lIE1BWF9NQVRSSVhfS0VZX05VTQkoTUFYX01BVFJJWF9LRVlfUk9XUyAqIE1BWF9NQVRSSVhfS0VZX0NPTFMpCisKK3N0cnVjdCBpbXhfa2V5cGFkIHsKKworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJdm9pZCBfX2lvbWVtICptbWlvX2Jhc2U7CisKKwlpbnQJCQlpcnE7CisJc3RydWN0IHRpbWVyX2xpc3QJY2hlY2tfbWF0cml4X3RpbWVyOworCisJLyoKKwkgKiBUaGUgbWF0cml4IGlzIHN0YWJsZSBvbmx5IGlmIG5vIGNoYW5nZXMgYXJlIGRldGVjdGVkIGFmdGVyCisJICogSU1YX0tFWVBBRF9TQ0FOU19GT1JfU1RBQklMSVRZIHNjYW5zCisJICovCisjZGVmaW5lIElNWF9LRVlQQURfU0NBTlNfRk9SX1NUQUJJTElUWSAzCisJaW50CQkJc3RhYmxlX2NvdW50OworCisJYm9vbAkJCWVuYWJsZWQ7CisKKwkvKiBNYXNrcyBmb3IgZW5hYmxlZCByb3dzL2NvbHMgKi8KKwl1bnNpZ25lZCBzaG9ydAkJcm93c19lbl9tYXNrOworCXVuc2lnbmVkIHNob3J0CQljb2xzX2VuX21hc2s7CisKKwl1bnNpZ25lZCBzaG9ydAkJa2V5Y29kZXNbTUFYX01BVFJJWF9LRVlfTlVNXTsKKworCS8qCisJICogTWF0cml4IHN0YXRlczoKKwkgKiAtc3RhYmxlOiBhY2hpZXZlZCBhZnRlciBhIGNvbXBsZXRlIGRlYm91bmNlIHByb2Nlc3MuCisJICogLXVuc3RhYmxlOiB1c2VkIGluIHRoZSBkZWJvdW5jaW5nIHByb2Nlc3MuCisJICovCisJdW5zaWduZWQgc2hvcnQJCW1hdHJpeF9zdGFibGVfc3RhdGVbTUFYX01BVFJJWF9LRVlfQ09MU107CisJdW5zaWduZWQgc2hvcnQJCW1hdHJpeF91bnN0YWJsZV9zdGF0ZVtNQVhfTUFUUklYX0tFWV9DT0xTXTsKK307CisKKy8qIFNjYW4gdGhlIG1hdHJpeCBhbmQgcmV0dXJuIHRoZSBuZXcgc3RhdGUgaW4gKm1hdHJpeF92b2xhdGlsZV9zdGF0ZS4gKi8KK3N0YXRpYyB2b2lkIGlteF9rZXlwYWRfc2Nhbl9tYXRyaXgoc3RydWN0IGlteF9rZXlwYWQgKmtleXBhZCwKKwkJCQkgIHVuc2lnbmVkIHNob3J0ICptYXRyaXhfdm9sYXRpbGVfc3RhdGUpCit7CisJaW50IGNvbDsKKwl1bnNpZ25lZCBzaG9ydCByZWdfdmFsOworCisJZm9yIChjb2wgPSAwOyBjb2wgPCBNQVhfTUFUUklYX0tFWV9DT0xTOyBjb2wrKykgeworCQlpZiAoKGtleXBhZC0+Y29sc19lbl9tYXNrICYgKDEgPDwgY29sKSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBEaXNjaGFyZ2Uga2V5cGFkIGNhcGFjaXRhbmNlOgorCQkgKiAyLiB3cml0ZSAxcyBvbiBjb2x1bW4gZGF0YS4KKwkJICogMy4gY29uZmlndXJlIGNvbHVtbnMgYXMgdG90ZW0tcG9sZSB0byBkaXNjaGFyZ2UgY2FwYWNpdGFuY2UuCisJCSAqIDQuIGNvbmZpZ3VyZSBjb2x1bW5zIGFzIG9wZW4tZHJhaW4uCisJCSAqLworCQlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUERSKTsKKwkJcmVnX3ZhbCB8PSAweGZmMDA7CisJCXdyaXRldyhyZWdfdmFsLCBrZXlwYWQtPm1taW9fYmFzZSArIEtQRFIpOworCisJCXJlZ192YWwgPSByZWFkdyhrZXlwYWQtPm1taW9fYmFzZSArIEtQQ1IpOworCQlyZWdfdmFsICY9IH4oKGtleXBhZC0+Y29sc19lbl9tYXNrICYgMHhmZikgPDwgOCk7CisJCXdyaXRldyhyZWdfdmFsLCBrZXlwYWQtPm1taW9fYmFzZSArIEtQQ1IpOworCisJCXVkZWxheSgyKTsKKworCQlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUENSKTsKKwkJcmVnX3ZhbCB8PSAoa2V5cGFkLT5jb2xzX2VuX21hc2sgJiAweGZmKSA8PCA4OworCQl3cml0ZXcocmVnX3ZhbCwga2V5cGFkLT5tbWlvX2Jhc2UgKyBLUENSKTsKKworCQkvKgorCQkgKiA1LiBXcml0ZSBhIHNpbmdsZSBjb2x1bW4gdG8gMCwgb3RoZXJzIHRvIDEuCisJCSAqIDYuIFNhbXBsZSByb3cgaW5wdXRzIGFuZCBzYXZlIGRhdGEuCisJCSAqIDcuIFJlcGVhdCBzdGVwcyAyIC0gNiBmb3IgcmVtYWluaW5nIGNvbHVtbnMuCisJCSAqLworCQlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUERSKTsKKwkJcmVnX3ZhbCAmPSB+KDEgPDwgKDggKyBjb2wpKTsKKwkJd3JpdGV3KHJlZ192YWwsIGtleXBhZC0+bW1pb19iYXNlICsgS1BEUik7CisKKwkJLyoKKwkJICogRGVsYXkgYWRkZWQgdG8gYXZvaWQgcHJvcGFnYXRpbmcgdGhlIDAgZnJvbSBjb2x1bW4gdG8gcm93CisJCSAqIHdoZW4gc2Nhbm5pbmcuCisJCSAqLworCQl1ZGVsYXkoNSk7CisKKwkJLyoKKwkJICogMXMgaW4gbWF0cml4X3ZvbGF0aWxlX3N0YXRlW2NvbF0gbWVhbnMga2V5IHByZXNzdXJlcworCQkgKiB0aHJvdyBkYXRhIGZyb20gbm9uIGVuYWJsZWQgcm93cy4KKwkJICovCisJCXJlZ192YWwgPSByZWFkdyhrZXlwYWQtPm1taW9fYmFzZSArIEtQRFIpOworCQltYXRyaXhfdm9sYXRpbGVfc3RhdGVbY29sXSA9ICh+cmVnX3ZhbCkgJiBrZXlwYWQtPnJvd3NfZW5fbWFzazsKKwl9CisKKwkvKgorCSAqIFJldHVybiBpbiBzdGFuZGJ5IG1vZGU6CisJICogOS4gd3JpdGUgMHMgdG8gY29sdW1ucworCSAqLworCXJlZ192YWwgPSByZWFkdyhrZXlwYWQtPm1taW9fYmFzZSArIEtQRFIpOworCXJlZ192YWwgJj0gMHgwMGZmOworCXdyaXRldyhyZWdfdmFsLCBrZXlwYWQtPm1taW9fYmFzZSArIEtQRFIpOworfQorCisvKgorICogQ29tcGFyZSB0aGUgbmV3IG1hdHJpeCBzdGF0ZSAodm9sYXRpbGUpIHdpdGggdGhlIHN0YWJsZSBvbmUgc3RvcmVkIGluCisgKiBrZXlwYWQtPm1hdHJpeF9zdGFibGVfc3RhdGUgYW5kIGZpcmUgZXZlbnRzIGlmIGNoYW5nZXMgYXJlIGRldGVjdGVkLgorICovCitzdGF0aWMgdm9pZCBpbXhfa2V5cGFkX2ZpcmVfZXZlbnRzKHN0cnVjdCBpbXhfa2V5cGFkICprZXlwYWQsCisJCQkJICAgdW5zaWduZWQgc2hvcnQgKm1hdHJpeF92b2xhdGlsZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBrZXlwYWQtPmlucHV0X2RldjsKKwlpbnQgcm93LCBjb2w7CisKKwlmb3IgKGNvbCA9IDA7IGNvbCA8IE1BWF9NQVRSSVhfS0VZX0NPTFM7IGNvbCsrKSB7CisJCXVuc2lnbmVkIHNob3J0IGJpdHNfY2hhbmdlZDsKKwkJaW50IGNvZGU7CisKKwkJaWYgKChrZXlwYWQtPmNvbHNfZW5fbWFzayAmICgxIDw8IGNvbCkpID09IDApCisJCQljb250aW51ZTsgLyogQ29sdW1uIGlzIG5vdCBlbmFibGVkICovCisKKwkJYml0c19jaGFuZ2VkID0ga2V5cGFkLT5tYXRyaXhfc3RhYmxlX3N0YXRlW2NvbF0gXgorCQkJCQkJbWF0cml4X3ZvbGF0aWxlX3N0YXRlW2NvbF07CisKKwkJaWYgKGJpdHNfY2hhbmdlZCA9PSAwKQorCQkJY29udGludWU7IC8qIENvbHVtbiBkb2VzIG5vdCBjb250YWluIGNoYW5nZXMgKi8KKworCQlmb3IgKHJvdyA9IDA7IHJvdyA8IE1BWF9NQVRSSVhfS0VZX1JPV1M7IHJvdysrKSB7CisJCQlpZiAoKGtleXBhZC0+cm93c19lbl9tYXNrICYgKDEgPDwgcm93KSkgPT0gMCkKKwkJCQljb250aW51ZTsgLyogUm93IGlzIG5vdCBlbmFibGVkICovCisJCQlpZiAoKGJpdHNfY2hhbmdlZCAmICgxIDw8IHJvdykpID09IDApCisJCQkJY29udGludWU7IC8qIFJvdyBkb2VzIG5vdCBjb250YWluIGNoYW5nZXMgKi8KKworCQkJY29kZSA9IE1BVFJJWF9TQ0FOX0NPREUocm93LCBjb2wsIE1BVFJJWF9ST1dfU0hJRlQpOworCQkJaW5wdXRfZXZlbnQoaW5wdXRfZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBjb2RlKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfZGV2LCBrZXlwYWQtPmtleWNvZGVzW2NvZGVdLAorCQkJCW1hdHJpeF92b2xhdGlsZV9zdGF0ZVtjb2xdICYgKDEgPDwgcm93KSk7CisJCQlkZXZfZGJnKCZpbnB1dF9kZXYtPmRldiwgIkV2ZW50IGNvZGU6ICVkLCB2YWw6ICVkIiwKKwkJCQlrZXlwYWQtPmtleWNvZGVzW2NvZGVdLAorCQkJCW1hdHJpeF92b2xhdGlsZV9zdGF0ZVtjb2xdICYgKDEgPDwgcm93KSk7CisJCX0KKwl9CisJaW5wdXRfc3luYyhpbnB1dF9kZXYpOworfQorCisvKgorICogaW14X2tleXBhZF9jaGVja19mb3JfZXZlbnRzIGlzIHRoZSB0aW1lciBoYW5kbGVyLgorICovCitzdGF0aWMgdm9pZCBpbXhfa2V5cGFkX2NoZWNrX2Zvcl9ldmVudHModW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpbXhfa2V5cGFkICprZXlwYWQgPSAoc3RydWN0IGlteF9rZXlwYWQgKikgZGF0YTsKKwl1bnNpZ25lZCBzaG9ydCBtYXRyaXhfdm9sYXRpbGVfc3RhdGVbTUFYX01BVFJJWF9LRVlfQ09MU107CisJdW5zaWduZWQgc2hvcnQgcmVnX3ZhbDsKKwlib29sIHN0YXRlX2NoYW5nZWQsIGlzX3plcm9fbWF0cml4OworCWludCBpOworCisJbWVtc2V0KG1hdHJpeF92b2xhdGlsZV9zdGF0ZSwgMCwgc2l6ZW9mKG1hdHJpeF92b2xhdGlsZV9zdGF0ZSkpOworCisJaW14X2tleXBhZF9zY2FuX21hdHJpeChrZXlwYWQsIG1hdHJpeF92b2xhdGlsZV9zdGF0ZSk7CisKKwlzdGF0ZV9jaGFuZ2VkID0gZmFsc2U7CisJZm9yIChpID0gMDsgaSA8IE1BWF9NQVRSSVhfS0VZX0NPTFM7IGkrKykgeworCQlpZiAoKGtleXBhZC0+Y29sc19lbl9tYXNrICYgKDEgPDwgaSkpID09IDApCisJCQljb250aW51ZTsKKworCQlpZiAoa2V5cGFkLT5tYXRyaXhfdW5zdGFibGVfc3RhdGVbaV0gXiBtYXRyaXhfdm9sYXRpbGVfc3RhdGVbaV0pIHsKKwkJCXN0YXRlX2NoYW5nZWQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHRoZSBtYXRyaXggc3RhdGUgaXMgY2hhbmdlZCBmcm9tIHRoZSBwcmV2aW91cyBzY2FuCisJICogICAoUmUpQmVnaW4gdGhlIGRlYm91bmNpbmcgcHJvY2Vzcywgc2F2aW5nIHRoZSBuZXcgc3RhdGUgaW4KKwkgKiAgICBrZXlwYWQtPm1hdHJpeF91bnN0YWJsZV9zdGF0ZS4KKwkgKiBlbHNlCisJICogICBJbmNyZWFzZSB0aGUgY291bnQgb2YgbnVtYmVyIG9mIHNjYW5zIHdpdGggYSBzdGFibGUgc3RhdGUuCisJICovCisJaWYgKHN0YXRlX2NoYW5nZWQpIHsKKwkJbWVtY3B5KGtleXBhZC0+bWF0cml4X3Vuc3RhYmxlX3N0YXRlLCBtYXRyaXhfdm9sYXRpbGVfc3RhdGUsCisJCQlzaXplb2YobWF0cml4X3ZvbGF0aWxlX3N0YXRlKSk7CisJCWtleXBhZC0+c3RhYmxlX2NvdW50ID0gMDsKKwl9IGVsc2UKKwkJa2V5cGFkLT5zdGFibGVfY291bnQrKzsKKworCS8qCisJICogSWYgdGhlIG1hdHJpeCBpcyBub3QgYXMgc3RhYmxlIGFzIHdlIHdhbnQgcmVzY2hlZHVsZSBzY2FuCisJICogaW4gdGhlIG5lYXIgZnV0dXJlLgorCSAqLworCWlmIChrZXlwYWQtPnN0YWJsZV9jb3VudCA8IElNWF9LRVlQQURfU0NBTlNfRk9SX1NUQUJJTElUWSkgeworCQltb2RfdGltZXIoJmtleXBhZC0+Y2hlY2tfbWF0cml4X3RpbWVyLAorCQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMCkpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiB0aGUgbWF0cml4IHN0YXRlIGlzIHN0YWJsZSwgZmlyZSB0aGUgZXZlbnRzIGFuZCBzYXZlIHRoZSBuZXcKKwkgKiBzdGFibGUgc3RhdGUuIE5vdGUsIGlmIHRoZSBtYXRyaXggaXMga2VwdCBzdGFibGUgZm9yIGxvbmdlcgorCSAqIChrZXlwYWQtPnN0YWJsZV9jb3VudCA+IElNWF9LRVlQQURfU0NBTlNfRk9SX1NUQUJJTElUWSkgYWxsCisJICogZXZlbnRzIGhhdmUgYWxyZWFkeSBiZWVuIGdlbmVyYXRlZC4KKwkgKi8KKwlpZiAoa2V5cGFkLT5zdGFibGVfY291bnQgPT0gSU1YX0tFWVBBRF9TQ0FOU19GT1JfU1RBQklMSVRZKSB7CisJCWlteF9rZXlwYWRfZmlyZV9ldmVudHMoa2V5cGFkLCBtYXRyaXhfdm9sYXRpbGVfc3RhdGUpOworCisJCW1lbWNweShrZXlwYWQtPm1hdHJpeF9zdGFibGVfc3RhdGUsIG1hdHJpeF92b2xhdGlsZV9zdGF0ZSwKKwkJCXNpemVvZihtYXRyaXhfdm9sYXRpbGVfc3RhdGUpKTsKKwl9CisKKwlpc196ZXJvX21hdHJpeCA9IHRydWU7CisJZm9yIChpID0gMDsgaSA8IE1BWF9NQVRSSVhfS0VZX0NPTFM7IGkrKykgeworCQlpZiAobWF0cml4X3ZvbGF0aWxlX3N0YXRlW2ldICE9IDApIHsKKwkJCWlzX3plcm9fbWF0cml4ID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKworCisJaWYgKGlzX3plcm9fbWF0cml4KSB7CisJCS8qCisJCSAqIEFsbCBrZXlzIGhhdmUgYmVlbiByZWxlYXNlZC4gRW5hYmxlIG9ubHkgdGhlIEtESQorCQkgKiBpbnRlcnJ1cHQgZm9yIGZ1dHVyZSBrZXkgcHJlc3NlcyAoY2xlYXIgdGhlIEtESQorCQkgKiBzdGF0dXMgYml0IGFuZCBpdHMgc3luYyBjaGFpbiBiZWZvcmUgdGhhdCkuCisJCSAqLworCQlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUFNSKTsKKwkJcmVnX3ZhbCB8PSBLQkRfU1RBVF9LUEtEIHwgS0JEX1NUQVRfS0RTQzsKKwkJd3JpdGV3KHJlZ192YWwsIGtleXBhZC0+bW1pb19iYXNlICsgS1BTUik7CisKKwkJcmVnX3ZhbCA9IHJlYWR3KGtleXBhZC0+bW1pb19iYXNlICsgS1BTUik7CisJCXJlZ192YWwgfD0gS0JEX1NUQVRfS0RJRTsKKwkJcmVnX3ZhbCAmPSB+S0JEX1NUQVRfS1JJRTsKKwkJd3JpdGV3KHJlZ192YWwsIGtleXBhZC0+bW1pb19iYXNlICsgS1BTUik7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogU29tZSBrZXlzIGFyZSBzdGlsbCBwcmVzc2VkLiBTY2hlZHVsZSBhIHJlc2NhbiBpbgorCQkgKiBhdHRlbXB0IHRvIGRldGVjdCBtdWx0aXBsZSBrZXkgcHJlc3NlcyBhbmQgZW5hYmxlCisJCSAqIHRoZSBLUkkgaW50ZXJydXB0IHRvIHJlYWN0IHF1aWNrbHkgdG8ga2V5IHJlbGVhc2UKKwkJICogZXZlbnQuCisJCSAqLworCQltb2RfdGltZXIoJmtleXBhZC0+Y2hlY2tfbWF0cml4X3RpbWVyLAorCQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2MCkpOworCisJCXJlZ192YWwgPSByZWFkdyhrZXlwYWQtPm1taW9fYmFzZSArIEtQU1IpOworCQlyZWdfdmFsIHw9IEtCRF9TVEFUX0tQS1IgfCBLQkRfU1RBVF9LUlNTOworCQl3cml0ZXcocmVnX3ZhbCwga2V5cGFkLT5tbWlvX2Jhc2UgKyBLUFNSKTsKKworCQlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUFNSKTsKKwkJcmVnX3ZhbCB8PSBLQkRfU1RBVF9LUklFOworCQlyZWdfdmFsICY9IH5LQkRfU1RBVF9LRElFOworCQl3cml0ZXcocmVnX3ZhbCwga2V5cGFkLT5tbWlvX2Jhc2UgKyBLUFNSKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbXhfa2V5cGFkX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaW14X2tleXBhZCAqa2V5cGFkID0gZGV2X2lkOworCXVuc2lnbmVkIHNob3J0IHJlZ192YWw7CisKKwlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUFNSKTsKKworCS8qIERpc2FibGUgYm90aCBpbnRlcnJ1cHQgdHlwZXMgKi8KKwlyZWdfdmFsICY9IH4oS0JEX1NUQVRfS1JJRSB8IEtCRF9TVEFUX0tESUUpOworCS8qIENsZWFyIGludGVycnVwdHMgc3RhdHVzIGJpdHMgKi8KKwlyZWdfdmFsIHw9IEtCRF9TVEFUX0tQS1IgfCBLQkRfU1RBVF9LUEtEOworCXdyaXRldyhyZWdfdmFsLCBrZXlwYWQtPm1taW9fYmFzZSArIEtQU1IpOworCisJaWYgKGtleXBhZC0+ZW5hYmxlZCkgeworCQkvKiBUaGUgbWF0cml4IGlzIHN1cHBvc2VkIHRvIGJlIGNoYW5nZWQgKi8KKwkJa2V5cGFkLT5zdGFibGVfY291bnQgPSAwOworCisJCS8qIFNjaGVkdWxlIHRoZSBzY2FubmluZyBwcm9jZWR1cmUgbmVhciBpbiB0aGUgZnV0dXJlICovCisJCW1vZF90aW1lcigma2V5cGFkLT5jaGVja19tYXRyaXhfdGltZXIsCisJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIpKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGlteF9rZXlwYWRfY29uZmlnKHN0cnVjdCBpbXhfa2V5cGFkICprZXlwYWQpCit7CisJdW5zaWduZWQgc2hvcnQgcmVnX3ZhbDsKKworCS8qCisJICogSW5jbHVkZSBlbmFibGVkIHJvd3MgaW4gaW50ZXJydXB0IGdlbmVyYXRpb24gKEtQQ1JbNzowXSkKKwkgKiBDb25maWd1cmUga2V5cGFkIGNvbHVtbnMgYXMgb3Blbi1kcmFpbiAoS1BDUlsxNTo4XSkKKwkgKi8KKwlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUENSKTsKKwlyZWdfdmFsIHw9IGtleXBhZC0+cm93c19lbl9tYXNrICYgMHhmZjsJCS8qIHJvd3MgKi8KKwlyZWdfdmFsIHw9IChrZXlwYWQtPmNvbHNfZW5fbWFzayAmIDB4ZmYpIDw8IDg7CS8qIGNvbHMgKi8KKwl3cml0ZXcocmVnX3ZhbCwga2V5cGFkLT5tbWlvX2Jhc2UgKyBLUENSKTsKKworCS8qIFdyaXRlIDAncyB0byBLUERSWzE1OjhdIChDb2x1bXMpICovCisJcmVnX3ZhbCA9IHJlYWR3KGtleXBhZC0+bW1pb19iYXNlICsgS1BEUik7CisJcmVnX3ZhbCAmPSAweDAwZmY7CisJd3JpdGV3KHJlZ192YWwsIGtleXBhZC0+bW1pb19iYXNlICsgS1BEUik7CisKKwkvKiBDb25maWd1cmUgY29sdW1ucyBhcyBvdXRwdXQsIHJvd3MgYXMgaW5wdXQgKEtERFJbMTU6MF0pICovCisJd3JpdGV3KDB4ZmYwMCwga2V5cGFkLT5tbWlvX2Jhc2UgKyBLRERSKTsKKworCS8qCisJICogQ2xlYXIgS2V5IERlcHJlc3MgYW5kIEtleSBSZWxlYXNlIHN0YXR1cyBiaXQuCisJICogQ2xlYXIgYm90aCBzeW5jaHJvbml6ZXIgY2hhaW4uCisJICovCisJcmVnX3ZhbCA9IHJlYWR3KGtleXBhZC0+bW1pb19iYXNlICsgS1BTUik7CisJcmVnX3ZhbCB8PSBLQkRfU1RBVF9LUEtSIHwgS0JEX1NUQVRfS1BLRCB8CisJCSAgIEtCRF9TVEFUX0tEU0MgfCBLQkRfU1RBVF9LUlNTOworCXdyaXRldyhyZWdfdmFsLCBrZXlwYWQtPm1taW9fYmFzZSArIEtQU1IpOworCisJLyogRW5hYmxlIEtESSBhbmQgZGlzYWJsZSBLUkkgKGF2b2lkIGZhbHNlIHJlbGVhc2UgZXZlbnRzKS4gKi8KKwlyZWdfdmFsIHw9IEtCRF9TVEFUX0tESUU7CisJcmVnX3ZhbCAmPSB+S0JEX1NUQVRfS1JJRTsKKwl3cml0ZXcocmVnX3ZhbCwga2V5cGFkLT5tbWlvX2Jhc2UgKyBLUFNSKTsKK30KKworc3RhdGljIHZvaWQgaW14X2tleXBhZF9pbmhpYml0KHN0cnVjdCBpbXhfa2V5cGFkICprZXlwYWQpCit7CisJdW5zaWduZWQgc2hvcnQgcmVnX3ZhbDsKKworCS8qIEluaGliaXQgS0RJIGFuZCBLUkkgaW50ZXJydXB0cy4gKi8KKwlyZWdfdmFsID0gcmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUFNSKTsKKwlyZWdfdmFsICY9IH4oS0JEX1NUQVRfS1JJRSB8IEtCRF9TVEFUX0tESUUpOworCXdyaXRldyhyZWdfdmFsLCBrZXlwYWQtPm1taW9fYmFzZSArIEtQU1IpOworCisJLyogQ29sdW1zIGFzIG9wZW4gZHJhaW4gYW5kIGRpc2FibGUgYWxsIHJvd3MgKi8KKwl3cml0ZXcoMHhmZjAwLCBrZXlwYWQtPm1taW9fYmFzZSArIEtQQ1IpOworfQorCitzdGF0aWMgdm9pZCBpbXhfa2V5cGFkX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaW14X2tleXBhZCAqa2V5cGFkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRldl9kYmcoJmRldi0+ZGV2LCAiPiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBNYXJrIGtleXBhZCBhcyBiZWluZyBpbmFjdGl2ZSAqLworCWtleXBhZC0+ZW5hYmxlZCA9IGZhbHNlOworCXN5bmNocm9uaXplX2lycShrZXlwYWQtPmlycSk7CisJZGVsX3RpbWVyX3N5bmMoJmtleXBhZC0+Y2hlY2tfbWF0cml4X3RpbWVyKTsKKworCWlteF9rZXlwYWRfaW5oaWJpdChrZXlwYWQpOworCisJLyogRGlzYWJsZSBjbG9jayB1bml0ICovCisJY2xrX2Rpc2FibGUoa2V5cGFkLT5jbGspOworfQorCitzdGF0aWMgaW50IGlteF9rZXlwYWRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IGlteF9rZXlwYWQgKmtleXBhZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisKKwlkZXZfZGJnKCZkZXYtPmRldiwgIj4lc1xuIiwgX19mdW5jX18pOworCisJLyogV2UgYmVjYW1lIGFjdGl2ZSBmcm9tIG5vdyAqLworCWtleXBhZC0+ZW5hYmxlZCA9IHRydWU7CisKKwkvKiBFbmFibGUgdGhlIGtwcCBjbG9jayAqLworCWNsa19lbmFibGUoa2V5cGFkLT5jbGspOworCWlteF9rZXlwYWRfY29uZmlnKGtleXBhZCk7CisKKwkvKiBTYW5pdHkgY29udHJvbCwgbm90IGFsbCB0aGUgcm93cyBtdXN0IGJlIGFjdGl2ZWQgbm93LiAqLworCWlmICgocmVhZHcoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUERSKSAmIGtleXBhZC0+cm93c19lbl9tYXNrKSA9PSAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJInRvbyBtYW55IGtleXMgcHJlc3NlZCwgY29udHJvbCBwaW5zIGluaXRpYWxpc2F0aW9uXG4iKTsKKwkJZ290byBvcGVuX2VycjsKKwl9CisKKwlyZXR1cm4gMDsKKworb3Blbl9lcnI6CisJaW14X2tleXBhZF9jbG9zZShkZXYpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpbXhfa2V5cGFkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgaW14X2tleXBhZCAqa2V5cGFkOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxLCBlcnJvciwgaTsKKworCWlmIChrZXltYXBfZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGtleW1hcCBkZWZpbmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgZGVmaW5lZCBpbiBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gSS9PIG1lbW9yeSBkZWZpbmVkIGluIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSS9PIG1lbW9yeVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFpbnB1dF9kZXYpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHRoZSBpbnB1dCBkZXZpY2VcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkX3JlbF9tZW07CisJfQorCisJa2V5cGFkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlteF9rZXlwYWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtleXBhZCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJub3QgZW5vdWdoIG1lbW9yeSBmb3IgZHJpdmVyIGRhdGFcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkX2ZyZWVfaW5wdXQ7CisJfQorCisJa2V5cGFkLT5pbnB1dF9kZXYgPSBpbnB1dF9kZXY7CisJa2V5cGFkLT5pcnEgPSBpcnE7CisJa2V5cGFkLT5zdGFibGVfY291bnQgPSAwOworCisJc2V0dXBfdGltZXIoJmtleXBhZC0+Y2hlY2tfbWF0cml4X3RpbWVyLAorCQkgICAgaW14X2tleXBhZF9jaGVja19mb3JfZXZlbnRzLCAodW5zaWduZWQgbG9uZykga2V5cGFkKTsKKworCWtleXBhZC0+bW1pb19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmIChrZXlwYWQtPm1taW9fYmFzZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZW1hcCBJL08gbWVtb3J5XG4iKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxlZF9mcmVlX3ByaXY7CisJfQorCisJa2V5cGFkLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJrcHAiKTsKKwlpZiAoSVNfRVJSKGtleXBhZC0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGtleXBhZCBjbG9ja1xuIik7CisJCWVycm9yID0gUFRSX0VSUihrZXlwYWQtPmNsayk7CisJCWdvdG8gZmFpbGVkX3VubWFwOworCX0KKworCS8qIFNlYXJjaCBmb3Igcm93cyBhbmQgY29scyBlbmFibGVkICovCisJZm9yIChpID0gMDsgaSA8IGtleW1hcF9kYXRhLT5rZXltYXBfc2l6ZTsgaSsrKSB7CisJCWtleXBhZC0+cm93c19lbl9tYXNrIHw9IDEgPDwgS0VZX1JPVyhrZXltYXBfZGF0YS0+a2V5bWFwW2ldKTsKKwkJa2V5cGFkLT5jb2xzX2VuX21hc2sgfD0gMSA8PCBLRVlfQ09MKGtleW1hcF9kYXRhLT5rZXltYXBbaV0pOworCX0KKworCWlmIChrZXlwYWQtPnJvd3NfZW5fbWFzayA+ICgoMSA8PCBNQVhfTUFUUklYX0tFWV9ST1dTKSAtIDEpIHx8CisJICAga2V5cGFkLT5jb2xzX2VuX21hc2sgPiAoKDEgPDwgTUFYX01BVFJJWF9LRVlfQ09MUykgLSAxKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiaW52YWxpZCBrZXkgZGF0YSAodG9vIG1hbnkgcm93cyBvciBjb2x1bXMpXG4iKTsKKwkJZXJyb3IgPSAtRUlOVkFMOworCQlnb3RvIGZhaWxlZF9jbG9ja19wdXQ7CisJfQorCWRldl9kYmcoJnBkZXYtPmRldiwgImVuYWJsZWQgcm93cyBtYXNrOiAleFxuIiwga2V5cGFkLT5yb3dzX2VuX21hc2spOworCWRldl9kYmcoJnBkZXYtPmRldiwgImVuYWJsZWQgY29scyBtYXNrOiAleFxuIiwga2V5cGFkLT5jb2xzX2VuX21hc2spOworCisJLyogSW5pdCB0aGUgSW5wdXQgZGV2aWNlICovCisJaW5wdXRfZGV2LT5uYW1lID0gcGRldi0+bmFtZTsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWlucHV0X2Rldi0+b3BlbiA9IGlteF9rZXlwYWRfb3BlbjsKKwlpbnB1dF9kZXYtPmNsb3NlID0gaW14X2tleXBhZF9jbG9zZTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFUCk7CisJaW5wdXRfZGV2LT5rZXljb2RlID0ga2V5cGFkLT5rZXljb2RlczsKKwlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKGtleXBhZC0+a2V5Y29kZXNbMF0pOworCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUoa2V5cGFkLT5rZXljb2Rlcyk7CisKKwltYXRyaXhfa2V5cGFkX2J1aWxkX2tleW1hcChrZXltYXBfZGF0YSwgTUFUUklYX1JPV19TSElGVCwKKwkJCQlrZXlwYWQtPmtleWNvZGVzLCBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4pOworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2Rldiwga2V5cGFkKTsKKworCS8qIEVuc3VyZSB0aGF0IHRoZSBrZXlwYWQgd2lsbCBzdGF5IGRvcm1hbnQgdW50aWwgb3BlbmVkICovCisJaW14X2tleXBhZF9pbmhpYml0KGtleXBhZCk7CisKKwllcnJvciA9IHJlcXVlc3RfaXJxKGlycSwgaW14X2tleXBhZF9pcnFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgICBwZGV2LT5uYW1lLCBrZXlwYWQpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBJUlFcbiIpOworCQlnb3RvIGZhaWxlZF9jbG9ja19wdXQ7CisJfQorCisJLyogUmVnaXN0ZXIgdGhlIGlucHV0IGRldmljZSAqLworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlnb3RvIGZhaWxlZF9mcmVlX2lycTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBrZXlwYWQpOworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKworCXJldHVybiAwOworCitmYWlsZWRfZnJlZV9pcnE6CisJZnJlZV9pcnEoaXJxLCBwZGV2KTsKK2ZhaWxlZF9jbG9ja19wdXQ6CisJY2xrX3B1dChrZXlwYWQtPmNsayk7CitmYWlsZWRfdW5tYXA6CisJaW91bm1hcChrZXlwYWQtPm1taW9fYmFzZSk7CitmYWlsZWRfZnJlZV9wcml2OgorCWtmcmVlKGtleXBhZCk7CitmYWlsZWRfZnJlZV9pbnB1dDoKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworZmFpbGVkX3JlbF9tZW06CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBpbXhfa2V5cGFkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpbXhfa2V5cGFkICprZXlwYWQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIj4lc1xuIiwgX19mdW5jX18pOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShrZXlwYWQtPmlucHV0X2Rldik7CisKKwlmcmVlX2lycShrZXlwYWQtPmlycSwga2V5cGFkKTsKKwljbGtfcHV0KGtleXBhZC0+Y2xrKTsKKworCWlvdW5tYXAoa2V5cGFkLT5tbWlvX2Jhc2UpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlrZnJlZShrZXlwYWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlteF9rZXlwYWRfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJpbXgta2V5cGFkIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gaW14X2tleXBhZF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGlteF9rZXlwYWRfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlteF9rZXlwYWRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlteF9rZXlwYWRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlteF9rZXlwYWRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpbXhfa2V5cGFkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGlteF9rZXlwYWRfaW5pdCk7Cittb2R1bGVfZXhpdChpbXhfa2V5cGFkX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbGJlcnRvIFBhbml6em8gPG1hcmFtYW9wZXJjaGVzZWltb3J0b0BnbWFpbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIklNWCBLZXlwYWQgUG9ydCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06aW14LWtleXBhZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9xdDIxNjAuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvcXQyMTYwLmMKaW5kZXggMTkxY2M1MS4uMzFmMzAwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9xdDIxNjAuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3F0MjE2MC5jCkBAIC0zNjIsNyArMzYyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHF0MjE2MF9pZHRhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgcXQyMTYwX2lkdGFibGVbXSA9IHsKIAl7ICJxdDIxNjAiLCAwLCB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYwppbmRleCA4ZTkzODBiLi44NTRlMjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCkBAIC0xOSwxMDEgKzE5LDE0MSBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQvc2hfa2V5c2MuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jZGVmaW5lIEtZQ1IxX09GRlMgICAweDAwCi0jZGVmaW5lIEtZQ1IyX09GRlMgICAweDA0Ci0jZGVmaW5lIEtZSU5EUl9PRkZTICAweDA4Ci0jZGVmaW5lIEtZT1VURFJfT0ZGUyAweDBjCi0KLSNkZWZpbmUgS1lDUjJfSVJRX0xFVkVMICAgIDB4MTAKLSNkZWZpbmUgS1lDUjJfSVJRX0RJU0FCTEVEIDB4MDAKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJdW5zaWduZWQgY2hhciBreW1kLCBrZXlvdXQsIGtleWluOwogfSBzaF9rZXlzY19tb2RlW10gPSB7CiAJW1NIX0tFWVNDX01PREVfMV0gPSB7IDAsIDYsIDUgfSwKIAlbU0hfS0VZU0NfTU9ERV8yXSA9IHsgMSwgNSwgNiB9LAogCVtTSF9LRVlTQ19NT0RFXzNdID0geyAyLCA0LCA3IH0sCisJW1NIX0tFWVNDX01PREVfNF0gPSB7IDMsIDYsIDYgfSwKKwlbU0hfS0VZU0NfTU9ERV81XSA9IHsgNCwgNiwgNyB9LAorCVtTSF9LRVlTQ19NT0RFXzZdID0geyA1LCA3LCA3IH0sCiB9OwogCiBzdHJ1Y3Qgc2hfa2V5c2NfcHJpdiB7CiAJdm9pZCBfX2lvbWVtICppb21lbV9iYXNlOwogCXN0cnVjdCBjbGsgKmNsazsKLQl1bnNpZ25lZCBsb25nIGxhc3Rfa2V5czsKKwlERUNMQVJFX0JJVE1BUChsYXN0X2tleXMsIFNIX0tFWVNDX01BWEtFWVMpOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCXN0cnVjdCBzaF9rZXlzY19pbmZvIHBkYXRhOwogfTsKIAorI2RlZmluZSBLWUNSMSAwCisjZGVmaW5lIEtZQ1IyIDEKKyNkZWZpbmUgS1lJTkRSIDIKKyNkZWZpbmUgS1lPVVREUiAzCisKKyNkZWZpbmUgS1lDUjJfSVJRX0xFVkVMICAgIDB4MTAKKyNkZWZpbmUgS1lDUjJfSVJRX0RJU0FCTEVEIDB4MDAKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hfa2V5c2NfcmVhZChzdHJ1Y3Qgc2hfa2V5c2NfcHJpdiAqcCwgaW50IHJlZ19ucikKK3sKKwlyZXR1cm4gaW9yZWFkMTYocC0+aW9tZW1fYmFzZSArIChyZWdfbnIgPDwgMikpOworfQorCitzdGF0aWMgdm9pZCBzaF9rZXlzY193cml0ZShzdHJ1Y3Qgc2hfa2V5c2NfcHJpdiAqcCwgaW50IHJlZ19uciwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJaW93cml0ZTE2KHZhbHVlLCBwLT5pb21lbV9iYXNlICsgKHJlZ19uciA8PCAyKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2tleXNjX2xldmVsX21vZGUoc3RydWN0IHNoX2tleXNjX3ByaXYgKnAsCisJCQkJdW5zaWduZWQgbG9uZyBrZXlzX3NldCkKK3sKKwlzdHJ1Y3Qgc2hfa2V5c2NfaW5mbyAqcGRhdGEgPSAmcC0+cGRhdGE7CisKKwlzaF9rZXlzY193cml0ZShwLCBLWU9VVERSLCAwKTsKKwlzaF9rZXlzY193cml0ZShwLCBLWUNSMiwgS1lDUjJfSVJRX0xFVkVMIHwgKGtleXNfc2V0IDw8IDgpKTsKKworCWlmIChwZGF0YS0+a3ljcjJfZGVsYXkpCisJCXVkZWxheShwZGF0YS0+a3ljcjJfZGVsYXkpOworfQorCitzdGF0aWMgdm9pZCBzaF9rZXlzY19tYXBfZGJnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyAqbWFwLAorCQkJICAgICBjb25zdCBjaGFyICpzdHIpCit7CisJaW50IGs7CisKKwlmb3IgKGsgPSAwOyBrIDwgQklUU19UT19MT05HUyhTSF9LRVlTQ19NQVhLRVlTKTsgaysrKQorCQlkZXZfZGJnKGRldiwgIiVzWyVkXSAweCVseFxuIiwgc3RyLCBrLCBtYXBba10pOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfa2V5c2NfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGV2X2lkOwogCXN0cnVjdCBzaF9rZXlzY19wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNoX2tleXNjX2luZm8gKnBkYXRhID0gJnByaXYtPnBkYXRhOwotCXVuc2lnbmVkIGxvbmcga2V5cywga2V5czEsIGtleXMwLCBtYXNrOworCWludCBrZXlvdXRfbnIgPSBzaF9rZXlzY19tb2RlW3BkYXRhLT5tb2RlXS5rZXlvdXQ7CisJaW50IGtleWluX25yID0gc2hfa2V5c2NfbW9kZVtwZGF0YS0+bW9kZV0ua2V5aW47CisJREVDTEFSRV9CSVRNQVAoa2V5cywgU0hfS0VZU0NfTUFYS0VZUyk7CisJREVDTEFSRV9CSVRNQVAoa2V5czAsIFNIX0tFWVNDX01BWEtFWVMpOworCURFQ0xBUkVfQklUTUFQKGtleXMxLCBTSF9LRVlTQ19NQVhLRVlTKTsKIAl1bnNpZ25lZCBjaGFyIGtleWluX3NldCwgdG1wOwotCWludCBpLCBrOworCWludCBpLCBrLCBuOwogCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiaXNyIVxuIik7CiAKLQlrZXlzMSA9IH4wOwotCWtleXMwID0gMDsKKwliaXRtYXBfZmlsbChrZXlzMSwgU0hfS0VZU0NfTUFYS0VZUyk7CisJYml0bWFwX3plcm8oa2V5czAsIFNIX0tFWVNDX01BWEtFWVMpOwogCiAJZG8gewotCQlrZXlzID0gMDsKKwkJYml0bWFwX3plcm8oa2V5cywgU0hfS0VZU0NfTUFYS0VZUyk7CiAJCWtleWluX3NldCA9IDA7CiAKLQkJaW93cml0ZTE2KEtZQ1IyX0lSUV9ESVNBQkxFRCwgcHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IyX09GRlMpOworCQlzaF9rZXlzY193cml0ZShwcml2LCBLWUNSMiwgS1lDUjJfSVJRX0RJU0FCTEVEKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgc2hfa2V5c2NfbW9kZVtwZGF0YS0+bW9kZV0ua2V5b3V0OyBpKyspIHsKLQkJCWlvd3JpdGUxNigweGZmZiBeICgzIDw8IChpICogMikpLAotCQkJCSAgcHJpdi0+aW9tZW1fYmFzZSArIEtZT1VURFJfT0ZGUyk7CisJCWZvciAoaSA9IDA7IGkgPCBrZXlvdXRfbnI7IGkrKykgeworCQkJbiA9IGtleWluX25yICogaTsKKworCQkJLyogZHJpdmUgb25lIEtFWU9VVCBwaW4gbG93LCByZWFkIEtFWUlOIHBpbnMgKi8KKwkJCXNoX2tleXNjX3dyaXRlKHByaXYsIEtZT1VURFIsIDB4ZmZmZiBeICgzIDw8IChpICogMikpKTsKIAkJCXVkZWxheShwZGF0YS0+ZGVsYXkpOwotCQkJdG1wID0gaW9yZWFkMTYocHJpdi0+aW9tZW1fYmFzZSArIEtZSU5EUl9PRkZTKTsKLQkJCWtleXMgfD0gdG1wIDw8IChzaF9rZXlzY19tb2RlW3BkYXRhLT5tb2RlXS5rZXlpbiAqIGkpOwotCQkJdG1wIF49ICgxIDw8IHNoX2tleXNjX21vZGVbcGRhdGEtPm1vZGVdLmtleWluKSAtIDE7Ci0JCQlrZXlpbl9zZXQgfD0gdG1wOworCQkJdG1wID0gc2hfa2V5c2NfcmVhZChwcml2LCBLWUlORFIpOworCisJCQkvKiBzZXQgYml0IGlmIGtleSBwcmVzcyBoYXMgYmVlbiBkZXRlY3RlZCAqLworCQkJZm9yIChrID0gMDsgayA8IGtleWluX25yOyBrKyspIHsKKwkJCQlpZiAodG1wICYgKDEgPDwgaykpCisJCQkJCV9fc2V0X2JpdChuICsgaywga2V5cyk7CisJCQl9CisKKwkJCS8qIGtlZXAgdHJhY2sgb2Ygd2hpY2ggS0VZSU4gYml0cyB0aGF0IGhhdmUgYmVlbiBzZXQgKi8KKwkJCWtleWluX3NldCB8PSB0bXAgXiAoKDEgPDwga2V5aW5fbnIpIC0gMSk7CiAJCX0KIAotCQlpb3dyaXRlMTYoMCwgcHJpdi0+aW9tZW1fYmFzZSArIEtZT1VURFJfT0ZGUyk7Ci0JCWlvd3JpdGUxNihLWUNSMl9JUlFfTEVWRUwgfCAoa2V5aW5fc2V0IDw8IDgpLAotCQkJICBwcml2LT5pb21lbV9iYXNlICsgS1lDUjJfT0ZGUyk7CisJCXNoX2tleXNjX2xldmVsX21vZGUocHJpdiwga2V5aW5fc2V0KTsKIAotCQlpZiAocGRhdGEtPmt5Y3IyX2RlbGF5KQotCQkJdWRlbGF5KHBkYXRhLT5reWNyMl9kZWxheSk7CisJCWJpdG1hcF9jb21wbGVtZW50KGtleXMsIGtleXMsIFNIX0tFWVNDX01BWEtFWVMpOworCQliaXRtYXBfYW5kKGtleXMxLCBrZXlzMSwga2V5cywgU0hfS0VZU0NfTUFYS0VZUyk7CisJCWJpdG1hcF9vcihrZXlzMCwga2V5czAsIGtleXMsIFNIX0tFWVNDX01BWEtFWVMpOwogCi0JCWtleXMgXj0gfjA7Ci0JCWtleXMgJj0gKDEgPDwgKHNoX2tleXNjX21vZGVbcGRhdGEtPm1vZGVdLmtleWluICoKLQkJCSAgICAgICBzaF9rZXlzY19tb2RlW3BkYXRhLT5tb2RlXS5rZXlvdXQpKSAtIDE7Ci0JCWtleXMxICY9IGtleXM7Ci0JCWtleXMwIHw9IGtleXM7CisJCXNoX2tleXNjX21hcF9kYmcoJnBkZXYtPmRldiwga2V5cywgImtleXMiKTsKIAotCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJrZXlzIDB4JTA4bHhcbiIsIGtleXMpOworCX0gd2hpbGUgKHNoX2tleXNjX3JlYWQocHJpdiwgS1lDUjIpICYgMHgwMSk7CiAKLQl9IHdoaWxlIChpb3JlYWQxNihwcml2LT5pb21lbV9iYXNlICsgS1lDUjJfT0ZGUykgJiAweDAxKTsKLQotCWRldl9kYmcoJnBkZXYtPmRldiwgImxhc3Rfa2V5cyAweCUwOGx4IGtleXMwIDB4JTA4bHgga2V5czEgMHglMDhseFxuIiwKLQkJcHJpdi0+bGFzdF9rZXlzLCBrZXlzMCwga2V5czEpOworCXNoX2tleXNjX21hcF9kYmcoJnBkZXYtPmRldiwgcHJpdi0+bGFzdF9rZXlzLCAibGFzdF9rZXlzIik7CisJc2hfa2V5c2NfbWFwX2RiZygmcGRldi0+ZGV2LCBrZXlzMCwgImtleXMwIik7CisJc2hfa2V5c2NfbWFwX2RiZygmcGRldi0+ZGV2LCBrZXlzMSwgImtleXMxIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU0hfS0VZU0NfTUFYS0VZUzsgaSsrKSB7CiAJCWsgPSBwZGF0YS0+a2V5Y29kZXNbaV07CiAJCWlmICghaykKIAkJCWNvbnRpbnVlOwogCi0JCW1hc2sgPSAxIDw8IGk7Ci0KLQkJaWYgKCEoKHByaXYtPmxhc3Rfa2V5cyBeIGtleXMwKSAmIG1hc2spKQorCQlpZiAodGVzdF9iaXQoaSwga2V5czApID09IHRlc3RfYml0KGksIHByaXYtPmxhc3Rfa2V5cykpCiAJCQljb250aW51ZTsKIAotCQlpZiAoKGtleXMxIHwga2V5czApICYgbWFzaykgeworCQlpZiAodGVzdF9iaXQoaSwga2V5czEpIHx8IHRlc3RfYml0KGksIGtleXMwKSkgewogCQkJaW5wdXRfZXZlbnQocHJpdi0+aW5wdXQsIEVWX0tFWSwgaywgMSk7Ci0JCQlwcml2LT5sYXN0X2tleXMgfD0gbWFzazsKKwkJCV9fc2V0X2JpdChpLCBwcml2LT5sYXN0X2tleXMpOwogCQl9CiAKLQkJaWYgKCEoa2V5czEgJiBtYXNrKSkgeworCQlpZiAoIXRlc3RfYml0KGksIGtleXMxKSkgewogCQkJaW5wdXRfZXZlbnQocHJpdi0+aW5wdXQsIEVWX0tFWSwgaywgMCk7Ci0JCQlwcml2LT5sYXN0X2tleXMgJj0gfm1hc2s7CisJCQlfX2NsZWFyX2JpdChpLCBwcml2LT5sYXN0X2tleXMpOwogCQl9CiAKIAl9CkBAIC0xMjIsOCArMTYyLDYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLSNkZWZpbmUgcmVzX3NpemUocmVzKSAoKHJlcyktPmVuZCAtIChyZXMpLT5zdGFydCArIDEpCi0KIHN0YXRpYyBpbnQgX19kZXZpbml0IHNoX2tleXNjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNoX2tleXNjX3ByaXYgKnByaXY7CkBAIC0xNjQsNyArMjAyLDcgQEAKIAltZW1jcHkoJnByaXYtPnBkYXRhLCBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSwgc2l6ZW9mKHByaXYtPnBkYXRhKSk7CiAJcGRhdGEgPSAmcHJpdi0+cGRhdGE7CiAKLQlwcml2LT5pb21lbV9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc19zaXplKHJlcykpOworCXByaXYtPmlvbWVtX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAocHJpdi0+aW9tZW1fYmFzZSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZW1hcCBJL08gbWVtb3J5XG4iKTsKIAkJZXJyb3IgPSAtRU5YSU87CkBAIC0yMjAsMTAgKzI1OCw5IEBACiAKIAljbGtfZW5hYmxlKHByaXYtPmNsayk7CiAKLQlpb3dyaXRlMTYoKHNoX2tleXNjX21vZGVbcGRhdGEtPm1vZGVdLmt5bWQgPDwgOCkgfAotCQkgIHBkYXRhLT5zY2FuX3RpbWluZywgcHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IxX09GRlMpOwotCWlvd3JpdGUxNigwLCBwcml2LT5pb21lbV9iYXNlICsgS1lPVVREUl9PRkZTKTsKLQlpb3dyaXRlMTYoS1lDUjJfSVJRX0xFVkVMLCBwcml2LT5pb21lbV9iYXNlICsgS1lDUjJfT0ZGUyk7CisJc2hfa2V5c2Nfd3JpdGUocHJpdiwgS1lDUjEsIChzaF9rZXlzY19tb2RlW3BkYXRhLT5tb2RlXS5reW1kIDw8IDgpIHwKKwkJICAgICAgIHBkYXRhLT5zY2FuX3RpbWluZyk7CisJc2hfa2V5c2NfbGV2ZWxfbW9kZShwcml2LCAwKTsKIAogCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKIApAQCAtMjQ4LDcgKzI4NSw3IEBACiB7CiAJc3RydWN0IHNoX2tleXNjX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWlvd3JpdGUxNihLWUNSMl9JUlFfRElTQUJMRUQsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMl9PRkZTKTsKKwlzaF9rZXlzY193cml0ZShwcml2LCBLWUNSMiwgS1lDUjJfSVJRX0RJU0FCTEVEKTsKIAogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHByaXYtPmlucHV0KTsKIAlmcmVlX2lycShwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApLCBwZGV2KTsKQEAgLTI3MCw3ICszMDcsNyBAQAogCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCXVuc2lnbmVkIHNob3J0IHZhbHVlOwogCi0JdmFsdWUgPSBpb3JlYWQxNihwcml2LT5pb21lbV9iYXNlICsgS1lDUjFfT0ZGUyk7CisJdmFsdWUgPSBzaF9rZXlzY19yZWFkKHByaXYsIEtZQ1IxKTsKIAogCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKSB7CiAJCXZhbHVlIHw9IDB4ODA7CkBAIC0yNzksNyArMzE2LDcgQEAKIAkJdmFsdWUgJj0gfjB4ODA7CiAJfQogCi0JaW93cml0ZTE2KHZhbHVlLCBwcml2LT5pb21lbV9iYXNlICsgS1lDUjFfT0ZGUyk7CisJc2hfa2V5c2Nfd3JpdGUocHJpdiwgS1lDUjEsIHZhbHVlKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2FwYW5lbC5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2FwYW5lbC5jCmluZGV4IDcxYjgyNDMuLmE4ZDJiOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9hcGFuZWwuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYXBhbmVsLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCWFwYW5lbF9yZW1vdmUoY2xpZW50KTsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFwYW5lbF9pZFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFwYW5lbF9pZFtdID0gewogCXsgImZ1aml0c3VfYXBhbmVsIiwgMCB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGxhc19idG5zLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvYXRsYXNfYnRucy5jCmluZGV4IDFiODcxOTEuLmRmYWE5YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGxhc19idG5zLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2F0bGFzX2J0bnMuYwpAQCAtNDcsNyArNDcsNyBAQAogCiBzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9hdGxhc19idXR0b25faGFuZGxlcih1MzIgZnVuY3Rpb24sCiAJCSAgICAgIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAotCQkgICAgICB1MzIgYml0X3dpZHRoLCBhY3BpX2ludGVnZXIgKnZhbHVlLAorCQkgICAgICB1MzIgYml0X3dpZHRoLCB1NjQgKnZhbHVlLAogCQkgICAgICB2b2lkICpoYW5kbGVyX2NvbnRleHQsIHZvaWQgKnJlZ2lvbl9jb250ZXh0KQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9yb3RhcnlfZW5jb2Rlci5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3JvdGFyeV9lbmNvZGVyLmMKaW5kZXggM2I5ZjU4OC4uNGFlMDc5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3JvdGFyeV9lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3JvdGFyeV9lbmNvZGVyLmMKQEAgLTE1Miw2ICsxNTIsMTMgQEAKIAkJZ290byBleGl0X3VucmVnaXN0ZXJfaW5wdXQ7CiAJfQogCisJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQocGRhdGEtPmdwaW9fYSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gc2V0IEdQSU8gJWQgZm9yIGlucHV0XG4iLAorCQkJcGRhdGEtPmdwaW9fYSk7CisJCWdvdG8gZXhpdF91bnJlZ2lzdGVyX2lucHV0OworCX0KKwogCWVyciA9IGdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb19iLCBEUlZfTkFNRSk7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBHUElPICVkXG4iLApAQCAtMTU5LDYgKzE2NiwxMyBAQAogCQlnb3RvIGV4aXRfZnJlZV9ncGlvX2E7CiAJfQogCisJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQocGRhdGEtPmdwaW9fYik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gc2V0IEdQSU8gJWQgZm9yIGlucHV0XG4iLAorCQkJcGRhdGEtPmdwaW9fYik7CisJCWdvdG8gZXhpdF9mcmVlX2dwaW9fYTsKKwl9CisKIAkvKiByZXF1ZXN0IHRoZSBJUlFzICovCiAJZXJyID0gcmVxdWVzdF9pcnEoZW5jb2Rlci0+aXJxX2EsICZyb3RhcnlfZW5jb2Rlcl9pcnEsCiAJCQkgIElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFIHwgSU9SRVNPVVJDRV9JUlFfTE9XRURHRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYwppbmRleCBkM2Y1NzI0Li4xNDc3NDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VpbnB1dC5oPgpAQCAtMjg0LDcgKzI4Myw2IEBACiAJaWYgKCFuZXdkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbG9ja19rZXJuZWwoKTsKIAltdXRleF9pbml0KCZuZXdkZXYtPm11dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmbmV3ZGV2LT5yZXF1ZXN0c19sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZuZXdkZXYtPnJlcXVlc3RzX3dhaXRxKTsKQEAgLTI5Miw3ICsyOTAsNyBAQAogCW5ld2Rldi0+c3RhdGUgPSBVSVNUX05FV19ERVZJQ0U7CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBuZXdkZXY7Ci0JdW5sb2NrX2tlcm5lbCgpOworCW5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvd2luYm9uZC1jaXIuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aW5ib25kLWNpci5jCmluZGV4IGM4ZjVhOWEuLmNiZWMzZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aW5ib25kLWNpci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aW5ib25kLWNpci5jCkBAIC01MzgsNiArNTM4LDcgQEAKIAlkYXRhLT5pcmRhdGFfY291bnQgPSAwOwogCWRhdGEtPmlyZGF0YV9vZmYgPSAwOwogCWRhdGEtPmlyZGF0YV9lcnJvciA9IDA7CisJZGF0YS0+aWRsZV9jb3VudCA9IDA7CiB9CiAKIC8qIEFkZHMgb25lIGJpdCBvZiBpcmRhdGEgKi8KQEAgLTEwMDYsNyArMTAwNyw2IEBACiAJCX0KIAogCQl3YmNpcl9yZXNldF9pcmRhdGEoZGF0YSk7Ci0JCWRhdGEtPmlkbGVfY291bnQgPSAwOwogCX0KIAogb3V0OgpAQCAtMTAxOCw3ICsxMDE4LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogU1VTUEVORC9SRVNVTUUgRlVOQ1RJT05TCisgKiBTRVRVUC9JTklUL1NVU1BFTkQvUkVTVU1FIEZVTkNUSU9OUwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTE5Nyw3ICsxMTk3LDE2IEBACiAJfQogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18wKTsKIAlvdXRiKFdCQ0lSX0lSUV9OT05FLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSUVSKTsKKworCS8qCisJICogQUNQSSB3aWxsIHNldCB0aGUgSFcgZGlzYWJsZSBiaXQgZm9yIFNQMyB3aGljaCBtZWFucyB0aGF0IHRoZQorCSAqIG91dHB1dCBzaWduYWxzIGFyZSBsZWZ0IGluIGFuIHVuZGVmaW5lZCBzdGF0ZSB3aGljaCBtYXkgY2F1c2UKKwkgKiBzcHVyaW91cyBpbnRlcnJ1cHRzIHdoaWNoIHdlIG5lZWQgdG8gaWdub3JlIHVudGlsIHRoZSBoYXJkd2FyZQorCSAqIGlzIHJlaW5pdGlhbGl6ZWQuCisJICovCisJZGlzYWJsZV9pcnEoZGF0YS0+aXJxKTsKIH0KIAogc3RhdGljIGludApAQCAtMTIwNywzNyArMTIxNiwxNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci13YmNpcl9yZXN1bWUoc3RydWN0IHBucF9kZXYgKmRldmljZSkKLXsKLQlzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSA9IHBucF9nZXRfZHJ2ZGF0YShkZXZpY2UpOwotCi0JLyogQ2xlYXIgQlVGRl9FTiwgQ2xlYXIgRU5EX0VOLCBDbGVhciBNQVRDSF9FTiAqLwotCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0VWX0VOLCAweDAwLCAweDA3KTsKLQotCS8qIENsZWFyIENFSVJfRU4gKi8KLQl3YmNpcl9zZXRfYml0cyhkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9DVEwsIDB4MDAsIDB4MDEpOwotCi0JLyogRW5hYmxlIGludGVycnVwdHMgKi8KLQl3YmNpcl9yZXNldF9pcmRhdGEoZGF0YSk7Ci0Jb3V0YihXQkNJUl9JUlFfUlggfCBXQkNJUl9JUlFfRVJSLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSUVSKTsKLQotCXJldHVybiAwOwotfQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogU0VUVVAvSU5JVCBGVU5DVElPTlMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHN0YXRpYyB2b2lkCi13YmNpcl9jZmdfY2VpcihzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSkKK3diY2lyX2luaXRfaHcoc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEpCiB7CiAJdTggdG1wOwogCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18wKTsKKwlvdXRiKFdCQ0lSX0lSUV9OT05FLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSUVSKTsKKwogCS8qIFNldCBQUk9UX1NFTCwgUlhfSU5WLCBDbGVhciBDRUlSX0VOIChuZWVkZWQgZm9yIHRoZSBsZWQpICovCiAJdG1wID0gcHJvdG9jb2wgPDwgNDsKIAlpZiAoaW52ZXJ0KQpAQCAtMTI2NCw2ICsxMjUxLDkzIEBACiAJICogc2V0IFNQM19JUlJYX1NXIHRvIGJpbmFyeSAwMSwgaGVscGZ1bGx5IG5vdCBkb2N1bWVudGVkCiAJICovCiAJb3V0YigweDEwLCBkYXRhLT5lYmFzZSArIFdCQ0lSX1JFR19FQ0VJUl9DVFMpOworCisJLyogRW5hYmxlIGV4dGVuZGVkIG1vZGUgKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzIpOworCW91dGIoV0JDSVJfRVhUX0VOQUJMRSwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0VYQ1IxKTsKKworCS8qCisJICogQ29uZmlndXJlIGJhdWQgZ2VuZXJhdG9yLCBJUiBkYXRhIHdpbGwgYmUgc2FtcGxlZCBhdAorCSAqIGEgYml0cmF0ZSBvZjogKDI0TWh6ICogcHJlc2NhbGVyKSAvIChkaXZpc29yICogMTYpLgorCSAqCisJICogVGhlIEVDSVIgcmVnaXN0ZXJzIGluY2x1ZGUgYSBmbGFnIHRvIGNoYW5nZSB0aGUKKwkgKiAyNE1oeiBjbG9jayBmcmVxIHRvIDQ4TWh6LgorCSAqCisJICogSXQncyBub3QgZG9jdW1lbnRlZCBpbiB0aGUgc3BlY3MsIGJ1dCBmaWZvIGxldmVscworCSAqIG90aGVyIHRoYW4gMTYgc2VlbXMgdG8gYmUgdW5zdXBwb3J0ZWQuCisJICovCisKKwkvKiBwcmVzY2FsZXIgMS4wLCB0eC9yeCBmaWZvIGx2bCAxNiAqLworCW91dGIoMHgzMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0VYQ1IyKTsKKworCS8qIFNldCBiYXVkIGRpdmlzb3IgdG8gZ2VuZXJhdGUgb25lIGJ5dGUgcGVyIGJpdC9jZWxsICovCisJc3dpdGNoIChwcm90b2NvbCkgeworCWNhc2UgSVJfUFJPVE9DT0xfUkM1OgorCQlvdXRiKDB4QTcsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19CR0RMKTsKKwkJYnJlYWs7CisJY2FzZSBJUl9QUk9UT0NPTF9SQzY6CisJCW91dGIoMHg1MywgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0JHREwpOworCQlicmVhazsKKwljYXNlIElSX1BST1RPQ09MX05FQzoKKwkJb3V0YigweDY5LCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQkdETCk7CisJCWJyZWFrOworCX0KKwlvdXRiKDB4MDAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19CR0RIKTsKKworCS8qIFNldCBDRUlSIG1vZGUgKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzApOworCW91dGIoMHhDMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX01DUik7CisJaW5iKGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19MU1IpOyAvKiBDbGVhciBMU1IgKi8KKwlpbmIoZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX01TUik7IC8qIENsZWFyIE1TUiAqLworCisJLyogRGlzYWJsZSBSWCBkZW1vZCwgcnVuLWxlbmd0aCBlbmNvZGluZy9kZWNvZGluZywgc2V0IGZyZXEgc3BhbiAqLworCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfNyk7CisJb3V0YigweDEwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfUkNDRkcpOworCisJLyogRGlzYWJsZSB0aW1lciAqLworCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfNCk7CisJb3V0YigweDAwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJDUjEpOworCisJLyogRW5hYmxlIE1TUiBpbnRlcnJ1cHQsIENsZWFyIEFVWF9JUlggKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzUpOworCW91dGIoMHgwMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSQ1IyKTsKKworCS8qIERpc2FibGUgQ1JDICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS182KTsKKwlvdXRiKDB4MjAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUkNSMyk7CisKKwkvKiBTZXQgUlgvVFggKGRlKW1vZHVsYXRpb24gZnJlcSwgbm90IHJlYWxseSB1c2VkICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS183KTsKKwlvdXRiKDB4RjIsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUlJYREMpOworCW91dGIoMHg2OSwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSVFhNQyk7CisKKwkvKiBTZXQgaW52ZXJ0IGFuZCBwaW4gZGlyZWN0aW9uICovCisJaWYgKGludmVydCkKKwkJb3V0YigweDEwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJDRkc0KTsKKwllbHNlCisJCW91dGIoMHgwMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSQ0ZHNCk7CisKKwkvKiBTZXQgRklGTyB0aHJlc2hvbGRzIChSWCA9IDgsIFRYID0gMyksIHJlc2V0IFJYL1RYICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18wKTsKKwlvdXRiKDB4OTcsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19GQ1IpOworCisJLyogQ2xlYXIgQVVYIHN0YXR1cyBiaXRzICovCisJb3V0YigweEUwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQVNDUik7CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLworCXdiY2lyX3Jlc2V0X2lyZGF0YShkYXRhKTsKKwlvdXRiKFdCQ0lSX0lSUV9SWCB8IFdCQ0lSX0lSUV9FUlIsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JRVIpOworfQorCitzdGF0aWMgaW50Cit3YmNpcl9yZXN1bWUoc3RydWN0IHBucF9kZXYgKmRldmljZSkKK3sKKwlzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSA9IHBucF9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCisJd2JjaXJfaW5pdF9odyhkYXRhKTsKKwllbmFibGVfaXJxKGRhdGEtPmlycSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQKQEAgLTEzOTMsODYgKzE0NjcsNyBAQAogCiAJZGV2aWNlX2luaXRfd2FrZXVwKCZkZXZpY2UtPmRldiwgMSk7CiAKLQl3YmNpcl9jZmdfY2VpcihkYXRhKTsKLQotCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwotCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfMCk7Ci0Jb3V0YihXQkNJUl9JUlFfTk9ORSwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lFUik7Ci0KLQkvKiBFbmFibGUgZXh0ZW5kZWQgbW9kZSAqLwotCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfMik7Ci0Jb3V0YihXQkNJUl9FWFRfRU5BQkxFLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfRVhDUjEpOwotCi0JLyoKLQkgKiBDb25maWd1cmUgYmF1ZCBnZW5lcmF0b3IsIElSIGRhdGEgd2lsbCBiZSBzYW1wbGVkIGF0Ci0JICogYSBiaXRyYXRlIG9mOiAoMjRNaHogKiBwcmVzY2FsZXIpIC8gKGRpdmlzb3IgKiAxNikuCi0JICoKLQkgKiBUaGUgRUNJUiByZWdpc3RlcnMgaW5jbHVkZSBhIGZsYWcgdG8gY2hhbmdlIHRoZQotCSAqIDI0TWh6IGNsb2NrIGZyZXEgdG8gNDhNaHouCi0JICoKLQkgKiBJdCdzIG5vdCBkb2N1bWVudGVkIGluIHRoZSBzcGVjcywgYnV0IGZpZm8gbGV2ZWxzCi0JICogb3RoZXIgdGhhbiAxNiBzZWVtcyB0byBiZSB1bnN1cHBvcnRlZC4KLQkgKi8KLQotCS8qIHByZXNjYWxlciAxLjAsIHR4L3J4IGZpZm8gbHZsIDE2ICovCi0Jb3V0YigweDMwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfRVhDUjIpOwotCi0JLyogU2V0IGJhdWQgZGl2aXNvciB0byBnZW5lcmF0ZSBvbmUgYnl0ZSBwZXIgYml0L2NlbGwgKi8KLQlzd2l0Y2ggKHByb3RvY29sKSB7Ci0JY2FzZSBJUl9QUk9UT0NPTF9SQzU6Ci0JCW91dGIoMHhBNywgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0JHREwpOwotCQlicmVhazsKLQljYXNlIElSX1BST1RPQ09MX1JDNjoKLQkJb3V0YigweDUzLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQkdETCk7Ci0JCWJyZWFrOwotCWNhc2UgSVJfUFJPVE9DT0xfTkVDOgotCQlvdXRiKDB4NjksIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19CR0RMKTsKLQkJYnJlYWs7Ci0JfQotCW91dGIoMHgwMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0JHREgpOwotCi0JLyogU2V0IENFSVIgbW9kZSAqLwotCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfMCk7Ci0Jb3V0YigweEMwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfTUNSKTsKLQlpbmIoZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0xTUik7IC8qIENsZWFyIExTUiAqLwotCWluYihkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfTVNSKTsgLyogQ2xlYXIgTVNSICovCi0KLQkvKiBEaXNhYmxlIFJYIGRlbW9kLCBydW4tbGVuZ3RoIGVuY29kaW5nL2RlY29kaW5nLCBzZXQgZnJlcSBzcGFuICovCi0Jd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS183KTsKLQlvdXRiKDB4MTAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19SQ0NGRyk7Ci0KLQkvKiBEaXNhYmxlIHRpbWVyICovCi0Jd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS180KTsKLQlvdXRiKDB4MDAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUkNSMSk7Ci0KLQkvKiBFbmFibGUgTVNSIGludGVycnVwdCwgQ2xlYXIgQVVYX0lSWCAqLwotCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfNSk7Ci0Jb3V0YigweDAwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJDUjIpOwotCi0JLyogRGlzYWJsZSBDUkMgKi8KLQl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzYpOwotCW91dGIoMHgyMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSQ1IzKTsKLQotCS8qIFNldCBSWC9UWCAoZGUpbW9kdWxhdGlvbiBmcmVxLCBub3QgcmVhbGx5IHVzZWQgKi8KLQl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzcpOwotCW91dGIoMHhGMiwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSUlhEQyk7Ci0Jb3V0YigweDY5LCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJUWE1DKTsKLQotCS8qIFNldCBpbnZlcnQgYW5kIHBpbiBkaXJlY3Rpb24gKi8KLQlpZiAoaW52ZXJ0KQotCQlvdXRiKDB4MTAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUkNGRzQpOwotCWVsc2UKLQkJb3V0YigweDAwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJDRkc0KTsKLQotCS8qIFNldCBGSUZPIHRocmVzaG9sZHMgKFJYID0gOCwgVFggPSAzKSwgcmVzZXQgUlgvVFggKi8KLQl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzApOwotCW91dGIoMHg5NywgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0ZDUik7Ci0KLQkvKiBDbGVhciBBVVggc3RhdHVzIGJpdHMgKi8KLQlvdXRiKDB4RTAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19BU0NSKTsKLQotCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCi0Jb3V0YihXQkNJUl9JUlFfUlggfCBXQkNJUl9JUlFfRVJSLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSUVSKTsKKwl3YmNpcl9pbml0X2h3KGRhdGEpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMKaW5kZXggOTBiZTMwZS4uOTE2OWQxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMKQEAgLTY4LDEwICs2OCw2IEBACiBNT0RVTEVfUEFSTV9ERVNDKHBvc3RfaW50ZXJydXB0X2RlbGF5LAogCSJkZWxheSAobXMpIGJlZm9yZSByZWNhbCBhZnRlciByZWNhbCBpbnRlcnJ1cHQgZGV0ZWN0ZWQiKTsKIAotc3RhdGljIGludCBhdXRvcmVjYWwgPSAxOwotbW9kdWxlX3BhcmFtKGF1dG9yZWNhbCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoYXV0b3JlY2FsLCAiZW5hYmxlIHJlY2FsaWJyYXRpb24gaW4gdGhlIGRyaXZlciIpOwotCiAvKgogICogV2hlbiB0aGUgdG91Y2hwYWQgZ2V0cyB1bHRyYS1zZW5zaXRpdmUsIG9uZSBjYW4ga2VlcCB0aGVpciBmaW5nZXIgMS8yIgogICogYWJvdmUgdGhlIHBhZCBhbmQgc3RpbGwgaGF2ZSBpdCBzZW5kIHBhY2tldHMuICBUaGlzIGNhdXNlcyBhIGp1bXAgY3Vyc29yCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwppbmRleCA5Nzc0YmRmLi5kOGMwYzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKQEAgLTExNDEsNyArMTE0MSwxNCBAQAogCQlwc21vdXNlX2RlYWN0aXZhdGUocGFyZW50KTsKIAl9CiAKLQlwc21vdXNlX2RlYWN0aXZhdGUocHNtb3VzZSk7CisJcHNtb3VzZV9zZXRfc3RhdGUocHNtb3VzZSwgUFNNT1VTRV9JTklUSUFMSVpJTkcpOworCisJLyoKKwkgKiBEaXNhYmxlIHN0cmVhbSBtb2RlIHNvIGNsZWFudXAgcm91dGluZSBjYW4gcHJvY2VlZCB1bmRpc3R1cmJlZC4KKwkgKi8KKwlpZiAocHMyX2NvbW1hbmQoJnBzbW91c2UtPnBzMmRldiwgTlVMTCwgUFNNT1VTRV9DTURfRElTQUJMRSkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInBzbW91c2UuYzogRmFpbGVkIHRvIGRpc2FibGUgbW91c2Ugb24gJXNcbiIsCisJCQlwc21vdXNlLT5wczJkZXYuc2VyaW8tPnBoeXMpOwogCiAJaWYgKHBzbW91c2UtPmNsZWFudXApCiAJCXBzbW91c2UtPmNsZWFudXAocHNtb3VzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKaW5kZXggZDg0YTM2ZS4uYjU0YWVlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwpAQCAtMTE2MSw5ICsxMTYxLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaTgwNDJfcG1fdGhhdyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaTgwNDJfaW50ZXJydXB0KDAsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBpODA0Ml9wbV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBpODA0Ml9wbV9yZXNldCwKIAkucmVzdW1lCQk9IGk4MDQyX3BtX3Jlc3RvcmUsCisJLnRoYXcJCT0gaTgwNDJfcG1fdGhhdywKIAkucG93ZXJvZmYJPSBpODA0Ml9wbV9yZXNldCwKIAkucmVzdG9yZQk9IGk4MDQyX3BtX3Jlc3RvcmUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9wY2lwczIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vcGNpcHMyLmMKaW5kZXggMWRhY2JlMC4uNzk3MzE0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9wY2lwczIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3BjaXBzMi5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaXBzMl9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lwczJfaWRzW10gPSB7CiAJewogCQkudmVuZG9yCQk9IDB4MTRmMiwJLyogTU9CSUxJVFkgKi8KIAkJLmRldmljZQkJPSAweDAxMjMsCS8qIEtleWJvYXJkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKaW5kZXggZTBmMzAxOC4uYzNiNjI2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwpAQCAtMjYsNiArMjYsOCBAQAogICogVm9qdGVjaCBQYXZsaWssIFNpbXVua292YSAxNTk0LCBQcmFndWUgOCwgMTgyIDAwIEN6ZWNoIFJlcHVibGljCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaW8uaD4KQEAgLTExOSwxMSArMTIxLDEwIEBACiAKIAkJZXJyb3IgPSBkZXZpY2VfYmluZF9kcml2ZXIoJnNlcmlvLT5kZXYpOwogCQlpZiAoZXJyb3IpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkic2VyaW86IGRldmljZV9iaW5kX2RyaXZlcigpIGZhaWxlZCAiCi0JCQkJImZvciAlcyAoJXMpIGFuZCAlcywgZXJyb3I6ICVkXG4iLAotCQkJCXNlcmlvLT5waHlzLCBzZXJpby0+bmFtZSwKLQkJCQlkcnYtPmRlc2NyaXB0aW9uLCBlcnJvcik7CisJCQlkZXZfd2Fybigmc2VyaW8tPmRldiwKKwkJCQkgImRldmljZV9iaW5kX2RyaXZlcigpIGZhaWxlZCBmb3IgJXMgKCVzKSBhbmQgJXMsIGVycm9yOiAlZFxuIiwKKwkJCQkgc2VyaW8tPnBoeXMsIHNlcmlvLT5uYW1lLAorCQkJCSBkcnYtPmRlc2NyaXB0aW9uLCBlcnJvcik7CiAJCQlzZXJpb19kaXNjb25uZWN0X2RyaXZlcihzZXJpbyk7CiAJCQlzZXJpby0+ZGV2LmRyaXZlciA9IE5VTEw7CiAJCQlyZXR1cm4gZXJyb3I7CkBAIC0xMzgsOSArMTM5LDkgQEAKIAogCWVycm9yID0gZGV2aWNlX2F0dGFjaCgmc2VyaW8tPmRldik7CiAJaWYgKGVycm9yIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJInNlcmlvOiBkZXZpY2VfYXR0YWNoKCkgZmFpbGVkIGZvciAlcyAoJXMpLCBlcnJvcjogJWRcbiIsCi0JCQlzZXJpby0+cGh5cywgc2VyaW8tPm5hbWUsIGVycm9yKTsKKwkJZGV2X3dhcm4oJnNlcmlvLT5kZXYsCisJCQkgImRldmljZV9hdHRhY2goKSBmYWlsZWQgZm9yICVzICglcyksIGVycm9yOiAlZFxuIiwKKwkJCSBzZXJpby0+cGh5cywgc2VyaW8tPm5hbWUsIGVycm9yKTsKIH0KIAogCkBAIC0xOTQsMTcgKzE5NSwxNCBAQAogCiAJZXZlbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyaW9fZXZlbnQpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWV2ZW50KSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJInNlcmlvOiBOb3QgZW5vdWdoIG1lbW9yeSB0byBxdWV1ZSBldmVudCAlZFxuIiwKLQkJCWV2ZW50X3R5cGUpOworCQlwcl9lcnIoIk5vdCBlbm91Z2ggbWVtb3J5IHRvIHF1ZXVlIGV2ZW50ICVkXG4iLCBldmVudF90eXBlKTsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCF0cnlfbW9kdWxlX2dldChvd25lcikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJInNlcmlvOiBDYW4ndCBnZXQgbW9kdWxlIHJlZmVyZW5jZSwgZHJvcHBpbmcgZXZlbnQgJWRcbiIsCi0JCQlldmVudF90eXBlKTsKKwkJcHJfd2FybmluZygiQ2FuJ3QgZ2V0IG1vZHVsZSByZWZlcmVuY2UsIGRyb3BwaW5nIGV2ZW50ICVkXG4iLAorCQkJICAgZXZlbnRfdHlwZSk7CiAJCWtmcmVlKGV2ZW50KTsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CkBAIC0yMzAsMTQgKzIyOCwxMiBAQAogCiBzdGF0aWMgdm9pZCBzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyhzdHJ1Y3Qgc2VyaW9fZXZlbnQgKmV2ZW50KQogewotCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICpuZXh0OwotCXN0cnVjdCBzZXJpb19ldmVudCAqZTsKKwlzdHJ1Y3Qgc2VyaW9fZXZlbnQgKmUsICpuZXh0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2VyaW9fZXZlbnRfbG9jaywgZmxhZ3MpOwogCi0JbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsICZzZXJpb19ldmVudF9saXN0KSB7Ci0JCWUgPSBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBzZXJpb19ldmVudCwgbm9kZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG5leHQsICZzZXJpb19ldmVudF9saXN0LCBub2RlKSB7CiAJCWlmIChldmVudC0+b2JqZWN0ID09IGUtPm9iamVjdCkgewogCQkJLyoKIAkJCSAqIElmIHRoaXMgZXZlbnQgaXMgb2YgZGlmZmVyZW50IHR5cGUgd2Ugc2hvdWxkIG5vdApAQCAtMjQ3LDcgKzI0Myw3IEBACiAJCQlpZiAoZXZlbnQtPnR5cGUgIT0gZS0+dHlwZSkKIAkJCQlicmVhazsKIAotCQkJbGlzdF9kZWxfaW5pdChub2RlKTsKKwkJCWxpc3RfZGVsX2luaXQoJmUtPm5vZGUpOwogCQkJc2VyaW9fZnJlZV9ldmVudChlKTsKIAkJfQogCX0KQEAgLTI1OCwyMyArMjU0LDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc2VyaW9fZXZlbnQgKnNlcmlvX2dldF9ldmVudCh2b2lkKQogewotCXN0cnVjdCBzZXJpb19ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbm9kZTsKKwlzdHJ1Y3Qgc2VyaW9fZXZlbnQgKmV2ZW50ID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlcmlvX2V2ZW50X2xvY2ssIGZsYWdzKTsKIAotCWlmIChsaXN0X2VtcHR5KCZzZXJpb19ldmVudF9saXN0KSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXJpb19ldmVudF9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBOVUxMOworCWlmICghbGlzdF9lbXB0eSgmc2VyaW9fZXZlbnRfbGlzdCkpIHsKKwkJZXZlbnQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzZXJpb19ldmVudF9saXN0LAorCQkJCQkgc3RydWN0IHNlcmlvX2V2ZW50LCBub2RlKTsKKwkJbGlzdF9kZWxfaW5pdCgmZXZlbnQtPm5vZGUpOwogCX0KIAotCW5vZGUgPSBzZXJpb19ldmVudF9saXN0Lm5leHQ7Ci0JZXZlbnQgPSBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBzZXJpb19ldmVudCwgbm9kZSk7Ci0JbGlzdF9kZWxfaW5pdChub2RlKTsKLQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlcmlvX2V2ZW50X2xvY2ssIGZsYWdzKTsKLQogCXJldHVybiBldmVudDsKIH0KIApAQCAtMjg3LDI5ICsyNzgsMjcgQEAKIAl3aGlsZSAoKGV2ZW50ID0gc2VyaW9fZ2V0X2V2ZW50KCkpKSB7CiAKIAkJc3dpdGNoIChldmVudC0+dHlwZSkgewotCQkJY2FzZSBTRVJJT19SRUdJU1RFUl9QT1JUOgotCQkJCXNlcmlvX2FkZF9wb3J0KGV2ZW50LT5vYmplY3QpOwotCQkJCWJyZWFrOwogCi0JCQljYXNlIFNFUklPX1JFQ09OTkVDVF9QT1JUOgotCQkJCXNlcmlvX3JlY29ubmVjdF9wb3J0KGV2ZW50LT5vYmplY3QpOwotCQkJCWJyZWFrOworCQljYXNlIFNFUklPX1JFR0lTVEVSX1BPUlQ6CisJCQlzZXJpb19hZGRfcG9ydChldmVudC0+b2JqZWN0KTsKKwkJCWJyZWFrOwogCi0JCQljYXNlIFNFUklPX1JFU0NBTl9QT1JUOgotCQkJCXNlcmlvX2Rpc2Nvbm5lY3RfcG9ydChldmVudC0+b2JqZWN0KTsKLQkJCQlzZXJpb19maW5kX2RyaXZlcihldmVudC0+b2JqZWN0KTsKLQkJCQlicmVhazsKKwkJY2FzZSBTRVJJT19SRUNPTk5FQ1RfUE9SVDoKKwkJCXNlcmlvX3JlY29ubmVjdF9wb3J0KGV2ZW50LT5vYmplY3QpOworCQkJYnJlYWs7CiAKLQkJCWNhc2UgU0VSSU9fUkVDT05ORUNUX0NIQUlOOgotCQkJCXNlcmlvX3JlY29ubmVjdF9jaGFpbihldmVudC0+b2JqZWN0KTsKLQkJCQlicmVhazsKKwkJY2FzZSBTRVJJT19SRVNDQU5fUE9SVDoKKwkJCXNlcmlvX2Rpc2Nvbm5lY3RfcG9ydChldmVudC0+b2JqZWN0KTsKKwkJCXNlcmlvX2ZpbmRfZHJpdmVyKGV2ZW50LT5vYmplY3QpOworCQkJYnJlYWs7CiAKLQkJCWNhc2UgU0VSSU9fQVRUQUNIX0RSSVZFUjoKLQkJCQlzZXJpb19hdHRhY2hfZHJpdmVyKGV2ZW50LT5vYmplY3QpOwotCQkJCWJyZWFrOworCQljYXNlIFNFUklPX1JFQ09OTkVDVF9DSEFJTjoKKwkJCXNlcmlvX3JlY29ubmVjdF9jaGFpbihldmVudC0+b2JqZWN0KTsKKwkJCWJyZWFrOwogCi0JCQlkZWZhdWx0OgotCQkJCWJyZWFrOworCQljYXNlIFNFUklPX0FUVEFDSF9EUklWRVI6CisJCQlzZXJpb19hdHRhY2hfZHJpdmVyKGV2ZW50LT5vYmplY3QpOworCQkJYnJlYWs7CiAJCX0KIAogCQlzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyhldmVudCk7CkBAIC0zMjUsMTYgKzMxNCwxNCBAQAogICovCiBzdGF0aWMgdm9pZCBzZXJpb19yZW1vdmVfcGVuZGluZ19ldmVudHModm9pZCAqb2JqZWN0KQogewotCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICpuZXh0OwotCXN0cnVjdCBzZXJpb19ldmVudCAqZXZlbnQ7CisJc3RydWN0IHNlcmlvX2V2ZW50ICpldmVudCwgKm5leHQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzZXJpb19ldmVudF9sb2NrLCBmbGFncyk7CiAKLQlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgJnNlcmlvX2V2ZW50X2xpc3QpIHsKLQkJZXZlbnQgPSBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBzZXJpb19ldmVudCwgbm9kZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCBuZXh0LCAmc2VyaW9fZXZlbnRfbGlzdCwgbm9kZSkgewogCQlpZiAoZXZlbnQtPm9iamVjdCA9PSBvYmplY3QpIHsKLQkJCWxpc3RfZGVsX2luaXQobm9kZSk7CisJCQlsaXN0X2RlbF9pbml0KCZldmVudC0+bm9kZSk7CiAJCQlzZXJpb19mcmVlX2V2ZW50KGV2ZW50KTsKIAkJfQogCX0KQEAgLTM4MCw3ICszNjcsNiBAQAogCQkJa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFsaXN0X2VtcHR5KCZzZXJpb19ldmVudF9saXN0KSk7CiAJfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAic2VyaW86IGtzZXJpb2QgZXhpdGluZ1xuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0NSw2ICs0MzEsMTEgQEAKIAkuYXR0cnMJPSBzZXJpb19kZXZpY2VfaWRfYXR0cnMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqc2VyaW9fZGV2aWNlX2F0dHJfZ3JvdXBzW10gPSB7CisJJnNlcmlvX2lkX2F0dHJfZ3JvdXAsCisJTlVMTAorfTsKKwogc3RhdGljIHNzaXplX3Qgc2VyaW9fcmViaW5kX2RyaXZlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc2VyaW8gKnNlcmlvID0gdG9fc2VyaW9fcG9ydChkZXYpOwpAQCAtNTMyLDYgKzUyMyw3IEBACiAJCQkobG9uZylhdG9taWNfaW5jX3JldHVybigmc2VyaW9fbm8pIC0gMSk7CiAJc2VyaW8tPmRldi5idXMgPSAmc2VyaW9fYnVzOwogCXNlcmlvLT5kZXYucmVsZWFzZSA9IHNlcmlvX3JlbGVhc2VfcG9ydDsKKwlzZXJpby0+ZGV2Lmdyb3VwcyA9IHNlcmlvX2RldmljZV9hdHRyX2dyb3VwczsKIAlpZiAoc2VyaW8tPnBhcmVudCkgewogCQlzZXJpby0+ZGV2LnBhcmVudCA9ICZzZXJpby0+cGFyZW50LT5kZXY7CiAJCXNlcmlvLT5kZXB0aCA9IHNlcmlvLT5wYXJlbnQtPmRlcHRoICsgMTsKQEAgLTU1NSwyMSArNTQ3LDE1IEBACiAJfQogCiAJbGlzdF9hZGRfdGFpbCgmc2VyaW8tPm5vZGUsICZzZXJpb19saXN0KTsKKwogCWlmIChzZXJpby0+c3RhcnQpCiAJCXNlcmlvLT5zdGFydChzZXJpbyk7CisKIAllcnJvciA9IGRldmljZV9hZGQoJnNlcmlvLT5kZXYpOwogCWlmIChlcnJvcikKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkic2VyaW86IGRldmljZV9hZGQoKSBmYWlsZWQgZm9yICVzICglcyksIGVycm9yOiAlZFxuIiwKKwkJZGV2X2Vycigmc2VyaW8tPmRldiwKKwkJCSJkZXZpY2VfYWRkKCkgZmFpbGVkIGZvciAlcyAoJXMpLCBlcnJvcjogJWRcbiIsCiAJCQlzZXJpby0+cGh5cywgc2VyaW8tPm5hbWUsIGVycm9yKTsKLQllbHNlIHsKLQkJc2VyaW8tPnJlZ2lzdGVyZWQgPSB0cnVlOwotCQllcnJvciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmc2VyaW8tPmRldi5rb2JqLCAmc2VyaW9faWRfYXR0cl9ncm91cCk7Ci0JCWlmIChlcnJvcikKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSJzZXJpbzogc3lzZnNfY3JlYXRlX2dyb3VwKCkgZmFpbGVkIGZvciAlcyAoJXMpLCBlcnJvcjogJWRcbiIsCi0JCQkJc2VyaW8tPnBoeXMsIHNlcmlvLT5uYW1lLCBlcnJvcik7Ci0JfQogfQogCiAvKgpAQCAtNTk2LDExICs1ODIsOCBAQAogCQlzZXJpby0+cGFyZW50ID0gTlVMTDsKIAl9CiAKLQlpZiAoc2VyaW8tPnJlZ2lzdGVyZWQpIHsKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZXJpby0+ZGV2LmtvYmosICZzZXJpb19pZF9hdHRyX2dyb3VwKTsKKwlpZiAoZGV2aWNlX2lzX3JlZ2lzdGVyZWQoJnNlcmlvLT5kZXYpKQogCQlkZXZpY2VfZGVsKCZzZXJpby0+ZGV2KTsKLQkJc2VyaW8tPnJlZ2lzdGVyZWQgPSBmYWxzZTsKLQl9CiAKIAlsaXN0X2RlbF9pbml0KCZzZXJpby0+bm9kZSk7CiAJc2VyaW9fcmVtb3ZlX3BlbmRpbmdfZXZlbnRzKHNlcmlvKTsKQEAgLTc5OCw5ICs3ODEsOCBAQAogCiAJZXJyb3IgPSBkcml2ZXJfYXR0YWNoKCZkcnYtPmRyaXZlcik7CiAJaWYgKGVycm9yKQotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkic2VyaW86IGRyaXZlcl9hdHRhY2goKSBmYWlsZWQgZm9yICVzIHdpdGggZXJyb3IgJWRcbiIsCi0JCQlkcnYtPmRyaXZlci5uYW1lLCBlcnJvcik7CisJCXByX3dhcm5pbmcoImRyaXZlcl9hdHRhY2goKSBmYWlsZWQgZm9yICVzIHdpdGggZXJyb3IgJWRcbiIsCisJCQkgICBkcnYtPmRyaXZlci5uYW1lLCBlcnJvcik7CiB9CiAKIGludCBfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYsIHN0cnVjdCBtb2R1bGUgKm93bmVyLCBjb25zdCBjaGFyICptb2RfbmFtZSkKQEAgLTgyMCw4ICs4MDIsNyBAQAogCiAJZXJyb3IgPSBkcml2ZXJfcmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKIAlpZiAoZXJyb3IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkic2VyaW86IGRyaXZlcl9yZWdpc3RlcigpIGZhaWxlZCBmb3IgJXMsIGVycm9yOiAlZFxuIiwKKwkJcHJfZXJyKCJkcml2ZXJfcmVnaXN0ZXIoKSBmYWlsZWQgZm9yICVzLCBlcnJvcjogJWRcbiIsCiAJCQlkcnYtPmRyaXZlci5uYW1lLCBlcnJvcik7CiAJCXJldHVybiBlcnJvcjsKIAl9CkBAIC05ODcsNyArOTY4LDcgQEAKIAogICAgICAgICBpZiAobGlrZWx5KHNlcmlvLT5kcnYpKSB7CiAgICAgICAgICAgICAgICAgcmV0ID0gc2VyaW8tPmRydi0+aW50ZXJydXB0KHNlcmlvLCBkYXRhLCBkZmwpOwotCX0gZWxzZSBpZiAoIWRmbCAmJiBzZXJpby0+cmVnaXN0ZXJlZCkgeworCX0gZWxzZSBpZiAoIWRmbCAmJiBkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmc2VyaW8tPmRldikpIHsKIAkJc2VyaW9fcmVzY2FuKHNlcmlvKTsKIAkJcmV0ID0gSVJRX0hBTkRMRUQ7CiAJfQpAQCAtMTAxOCw3ICs5OTksNyBAQAogCiAJZXJyb3IgPSBidXNfcmVnaXN0ZXIoJnNlcmlvX2J1cyk7CiAJaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2VyaW86IGZhaWxlZCB0byByZWdpc3RlciBzZXJpbyBidXMsIGVycm9yOiAlZFxuIiwgZXJyb3IpOworCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBzZXJpbyBidXMsIGVycm9yOiAlZFxuIiwgZXJyb3IpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQogCkBAIC0xMDI2LDcgKzEwMDcsNyBAQAogCWlmIChJU19FUlIoc2VyaW9fdGFzaykpIHsKIAkJYnVzX3VucmVnaXN0ZXIoJnNlcmlvX2J1cyk7CiAJCWVycm9yID0gUFRSX0VSUihzZXJpb190YXNrKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJzZXJpbzogRmFpbGVkIHRvIHN0YXJ0IGtzZXJpb2QsIGVycm9yOiAlZFxuIiwgZXJyb3IpOworCQlwcl9lcnIoIkZhaWxlZCB0byBzdGFydCBrc2VyaW9kLCBlcnJvcjogJWRcbiIsIGVycm9yKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby94aWxpbnhfcHMyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3hpbGlueF9wczIuYwppbmRleCBlYmIyMmY4Li44Mjk4ZTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3hpbGlueF9wczIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3hpbGlueF9wczIuYwpAQCAtMjcwLDcgKzI3MCw3IEBACiAJZHJ2ZGF0YS0+aXJxID0gcl9pcnEuc3RhcnQ7CiAKIAlwaHlzX2FkZHIgPSByX21lbS5zdGFydDsKLQlyZW1hcF9zaXplID0gcl9tZW0uZW5kIC0gcl9tZW0uc3RhcnQgKyAxOworCXJlbWFwX3NpemUgPSByZXNvdXJjZV9zaXplKCZyX21lbSk7CiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocGh5c19hZGRyLCByZW1hcF9zaXplLCBEUklWRVJfTkFNRSkpIHsKIAkJZGV2X2VycihkZXYsICJDb3VsZG4ndCBsb2NrIG1lbW9yeSByZWdpb24gYXQgMHglMDhsbFhcbiIsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXBoeXNfYWRkcik7CkBAIC0zNDQsNyArMzQ0LDcgQEAKIAlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShvZl9kZXYtPm5vZGUsIDAsICZyX21lbSkpCiAJCWRldl9lcnIoZGV2LCAiaW52YWxpZCBhZGRyZXNzXG4iKTsKIAllbHNlCi0JCXJlbGVhc2VfbWVtX3JlZ2lvbihyX21lbS5zdGFydCwgcl9tZW0uZW5kIC0gcl9tZW0uc3RhcnQgKyAxKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJfbWVtLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyX21lbSkpOwogCiAJa2ZyZWUoZHJ2ZGF0YSk7CiAKQEAgLTM1NCw3ICszNTQsNyBAQAogfQogCiAvKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqLwotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgeHBzMl9vZl9tYXRjaFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4cHMyX29mX21hdGNoW10gX19kZXZpbml0Y29uc3QgPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1wczItMS4wMC5hIiwgfSwKIAl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jCmluZGV4IDNkMzJkM2YuLjg2NmE5ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2d0Y28uYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9ndGNvLmMKQEAgLTkyLDcgKzkyLDcgQEAKIC8qIERBVEEgU1RSVUNUVVJFUyAqLwogCiAvKiBEZXZpY2UgdGFibGUgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBndGNvX3VzYmlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGd0Y29fdXNiaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVkVORE9SX0lEX0dUQ08sIFBJRF80MDApIH0sCiAJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9HVENPLCBQSURfNDAxKSB9LAogCXsgVVNCX0RFVklDRShWRU5ET1JfSURfR1RDTywgUElEXzEwMDApIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbS5oIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb20uaAppbmRleCAxNjMxMGYzLi44ZmVmMWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbS5oCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tLmgKQEAgLTg1LDYgKzg1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KQEAgLTEyMCw2ICsxMjEsOCBAQAogCXN0cnVjdCB1cmIgKnVyYjsKIH07CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB3YWNvbV9pZHNbXTsKKwogZXh0ZXJuIGludCB3YWNvbV93YWNfaXJxKHN0cnVjdCB3YWNvbV93YWMgKiB3YWNvbV93YWMsIHZvaWQgKiB3Y29tYm8pOwogZXh0ZXJuIHZvaWQgd2Fjb21fcmVwb3J0X2Ficyh2b2lkICp3Y29tYm8sIHVuc2lnbmVkIGludCBhYnNfdHlwZSwgaW50IGFic19kYXRhKTsKIGV4dGVybiB2b2lkIHdhY29tX3JlcG9ydF9yZWwodm9pZCAqd2NvbWJvLCB1bnNpZ25lZCBpbnQgcmVsX3R5cGUsIGludCByZWxfZGF0YSk7CkBAIC0xNDIsNyArMTQ1LDUgQEAKIGV4dGVybiB2b2lkIGlucHV0X2Rldl9iZWUoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpOwogZXh0ZXJuIF9fdTE2IHdhY29tX2xlMTZfdG9fY3B1KHVuc2lnbmVkIGNoYXIgKmRhdGEpOwogZXh0ZXJuIF9fdTE2IHdhY29tX2JlMTZfdG9fY3B1KHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotZXh0ZXJuIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyAqZ2V0X3dhY29tX2ZlYXR1cmUoY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZ2V0X2RldmljZV90YWJsZSh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCmluZGV4IDA3MmYzM2IuLmExNzcwZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCkBAIC0yMTEsNyArMjExLDggQEAKIAlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fRElHSSldIHw9IEJJVF9NQVNLKEJUTl9UT09MX1JVQkJFUikgfAogCQlCSVRfTUFTSyhCVE5fVE9PTF9QRU4pIHwgQklUX01BU0soQlROX1NUWUxVUykgfAogCQlCSVRfTUFTSyhCVE5fVE9PTF9NT1VTRSkgfCBCSVRfTUFTSyhCVE5fU1RZTFVTMik7Ci0JaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfRElTVEFOQ0UsIDAsIHdhY29tX3dhYy0+ZmVhdHVyZXMtPmRpc3RhbmNlX21heCwgMCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfRElTVEFOQ0UsCisJCQkgICAgIDAsIHdhY29tX3dhYy0+ZmVhdHVyZXMuZGlzdGFuY2VfbWF4LCAwLCAwKTsKIH0KIAogdm9pZCBpbnB1dF9kZXZfaTNzKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKQpAQCAtMjYxLDcgKzI2Miw4IEBACiAJCUJJVF9NQVNLKEJUTl9UT09MX01PVVNFKSB8IEJJVF9NQVNLKEJUTl9UT09MX0JSVVNIKSB8CiAJCUJJVF9NQVNLKEJUTl9UT09MX1BFTkNJTCkgfCBCSVRfTUFTSyhCVE5fVE9PTF9BSVJCUlVTSCkgfAogCQlCSVRfTUFTSyhCVE5fVE9PTF9MRU5TKSB8IEJJVF9NQVNLKEJUTl9TVFlMVVMyKTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ESVNUQU5DRSwgMCwgd2Fjb21fd2FjLT5mZWF0dXJlcy0+ZGlzdGFuY2VfbWF4LCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ESVNUQU5DRSwKKwkJCSAgICAgMCwgd2Fjb21fd2FjLT5mZWF0dXJlcy5kaXN0YW5jZV9tYXgsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1dIRUVMLCAwLCAxMDIzLCAwLCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19USUxUX1gsIDAsIDEyNywgMCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfVElMVF9ZLCAwLCAxMjcsIDAsIDApOwpAQCAtMjgyLDE3ICsyODQsMTkgQEAKIAogdm9pZCBpbnB1dF9kZXZfdHBjKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKQogewotCWlmICh3YWNvbV93YWMtPmZlYXR1cmVzLT5kZXZpY2VfdHlwZSA9PSBCVE5fVE9PTF9ET1VCTEVUQVAgfHwKLQkgICAgd2Fjb21fd2FjLT5mZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfVFJJUExFVEFQKSB7Ci0JCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1JYLCAwLCB3YWNvbV93YWMtPmZlYXR1cmVzLT54X3BoeSwgMCwgMCk7Ci0JCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1JZLCAwLCB3YWNvbV93YWMtPmZlYXR1cmVzLT55X3BoeSwgMCwgMCk7Ci0JCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9ESUdJKV0gfD0gQklUX01BU0soQlROX1RPT0xfRE9VQkxFVEFQKTsKKwlzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKmZlYXR1cmVzID0gJndhY29tX3dhYy0+ZmVhdHVyZXM7CisKKwlpZiAoZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX0RPVUJMRVRBUCB8fAorCSAgICBmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfVFJJUExFVEFQKSB7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1JYLCAwLCBmZWF0dXJlcy0+eF9waHksIDAsIDApOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19SWSwgMCwgZmVhdHVyZXMtPnlfcGh5LCAwLCAwKTsKKwkJX19zZXRfYml0KEJUTl9UT09MX0RPVUJMRVRBUCwgaW5wdXRfZGV2LT5rZXliaXQpOwogCX0KIH0KIAogdm9pZCBpbnB1dF9kZXZfdHBjMmZnKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKQogewotCWlmICh3YWNvbV93YWMtPmZlYXR1cmVzLT5kZXZpY2VfdHlwZSA9PSBCVE5fVE9PTF9UUklQTEVUQVApIHsKKwlpZiAod2Fjb21fd2FjLT5mZWF0dXJlcy5kZXZpY2VfdHlwZSA9PSBCVE5fVE9PTF9UUklQTEVUQVApIHsKIAkJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0RJR0kpXSB8PSBCSVRfTUFTSyhCVE5fVE9PTF9UUklQTEVUQVApOwogCQlpbnB1dF9kZXYtPmV2Yml0WzBdIHw9IEJJVF9NQVNLKEVWX01TQyk7CiAJCWlucHV0X2Rldi0+bXNjYml0WzBdIHw9IEJJVF9NQVNLKE1TQ19TRVJJQUwpOwpAQCAtNTMyLDIxICs1MzYsMzggQEAKIAlzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWM7CiAJc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlczsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JaW50IGVycm9yID0gLUVOT01FTTsKKwlpbnQgZXJyb3I7CisKKwlpZiAoIWlkLT5kcml2ZXJfaW5mbykKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAl3YWNvbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3YWNvbSksIEdGUF9LRVJORUwpOwogCXdhY29tX3dhYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3YWNvbV93YWMpLCBHRlBfS0VSTkVMKTsKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIXdhY29tIHx8ICFpbnB1dF9kZXYgfHwgIXdhY29tX3dhYykKKwlpZiAoIXdhY29tIHx8ICFpbnB1dF9kZXYgfHwgIXdhY29tX3dhYykgeworCQllcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDE7CisJfQogCi0Jd2Fjb21fd2FjLT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIFdBQ09NX1BLR0xFTl9NQVgsIEdGUF9LRVJORUwsICZ3YWNvbS0+ZGF0YV9kbWEpOwotCWlmICghd2Fjb21fd2FjLT5kYXRhKQorCXdhY29tX3dhYy0+ZmVhdHVyZXMgPSAqKChzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKilpZC0+ZHJpdmVyX2luZm8pOworCWZlYXR1cmVzID0gJndhY29tX3dhYy0+ZmVhdHVyZXM7CisJaWYgKGZlYXR1cmVzLT5wa3RsZW4gPiBXQUNPTV9QS0dMRU5fTUFYKSB7CisJCWVycm9yID0gLUVJTlZBTDsKIAkJZ290byBmYWlsMTsKKwl9CisKKwl3YWNvbV93YWMtPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgV0FDT01fUEtHTEVOX01BWCwKKwkJCQkJICAgR0ZQX0tFUk5FTCwgJndhY29tLT5kYXRhX2RtYSk7CisJaWYgKCF3YWNvbV93YWMtPmRhdGEpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWwxOworCX0KIAogCXdhY29tLT5pcnEgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICghd2Fjb20tPmlycSkKKwlpZiAoIXdhY29tLT5pcnEpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWwyOworCX0KIAogCXdhY29tLT51c2JkZXYgPSBkZXY7CiAJd2Fjb20tPmRldiA9IGlucHV0X2RldjsKQEAgLTU1NSwxMSArNTc2LDYgQEAKIAl1c2JfbWFrZV9wYXRoKGRldiwgd2Fjb20tPnBoeXMsIHNpemVvZih3YWNvbS0+cGh5cykpOwogCXN0cmxjYXQod2Fjb20tPnBoeXMsICIvaW5wdXQwIiwgc2l6ZW9mKHdhY29tLT5waHlzKSk7CiAKLQl3YWNvbV93YWMtPmZlYXR1cmVzID0gZmVhdHVyZXMgPSBnZXRfd2Fjb21fZmVhdHVyZShpZCk7Ci0JQlVHX09OKGZlYXR1cmVzLT5wa3RsZW4gPiBXQUNPTV9QS0dMRU5fTUFYKTsKLQotCWlucHV0X2Rldi0+bmFtZSA9IHdhY29tX3dhYy0+ZmVhdHVyZXMtPm5hbWU7Ci0Jd2Fjb20tPndhY29tX3dhYyA9IHdhY29tX3dhYzsKIAl1c2JfdG9faW5wdXRfaWQoZGV2LCAmaW5wdXRfZGV2LT5pZCk7CiAKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmaW50Zi0+ZGV2OwpAQCAtNTc2LDYgKzU5MiwxOSBAQAogCWlmIChlcnJvcikKIAkJZ290byBmYWlsMjsKIAorCXN0cmxjcHkod2Fjb21fd2FjLT5uYW1lLCBmZWF0dXJlcy0+bmFtZSwgc2l6ZW9mKHdhY29tX3dhYy0+bmFtZSkpOworCisJaWYgKGZlYXR1cmVzLT50eXBlID09IFRBQkxFVFBDIHx8IGZlYXR1cmVzLT50eXBlID09IFRBQkxFVFBDMkZHKSB7CisJCS8qIEFwcGVuZCB0aGUgZGV2aWNlIHR5cGUgdG8gdGhlIG5hbWUgKi8KKwkJc3RybGNhdCh3YWNvbV93YWMtPm5hbWUsCisJCQlmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfUEVOID8KKwkJCQkiIFBlbiIgOiAiIEZpbmdlciIsCisJCQlzaXplb2Yod2Fjb21fd2FjLT5uYW1lKSk7CisJfQorCisJaW5wdXRfZGV2LT5uYW1lID0gd2Fjb21fd2FjLT5uYW1lOworCXdhY29tLT53YWNvbV93YWMgPSB3YWNvbV93YWM7CisKIAlpbnB1dF9kZXYtPmV2Yml0WzBdIHw9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOwogCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9ESUdJKV0gfD0gQklUX01BU0soQlROX1RPVUNIKTsKIApAQCAtNjQwLDcgKzY2OSw3IEBACiBzdGF0aWMgaW50IHdhY29tX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQlzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKmZlYXR1cmVzID0gd2Fjb20tPndhY29tX3dhYy0+ZmVhdHVyZXM7CisJc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlcyA9ICZ3YWNvbS0+d2Fjb21fd2FjLT5mZWF0dXJlczsKIAlpbnQgcnY7CiAKIAltdXRleF9sb2NrKCZ3YWNvbS0+bG9jayk7CkBAIC02NjMsNiArNjkyLDcgQEAKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHdhY29tX2RyaXZlciA9IHsKIAkubmFtZSA9CQkid2Fjb20iLAorCS5pZF90YWJsZSA9CXdhY29tX2lkcywKIAkucHJvYmUgPQl3YWNvbV9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CXdhY29tX2Rpc2Nvbm5lY3QsCiAJLnN1c3BlbmQgPQl3YWNvbV9zdXNwZW5kLApAQCAtNjc0LDcgKzcwNCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCB3YWNvbV9pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdDsKLQl3YWNvbV9kcml2ZXIuaWRfdGFibGUgPSBnZXRfZGV2aWNlX3RhYmxlKCk7CisKIAlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJndhY29tX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA9PSAwKQogCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCmluZGV4IDEwNTZmMTQuLjNkODE0NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCkBAIC01NSw2ICs1NSw3IEBACiAKIHN0YXRpYyBpbnQgd2Fjb21fcGxfaXJxKHN0cnVjdCB3YWNvbV93YWMgKndhY29tLCB2b2lkICp3Y29tYm8pCiB7CisJc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlcyA9ICZ3YWNvbS0+ZmVhdHVyZXM7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOwogCWludCBwcm94LCBwcmVzc3VyZTsKIApAQCAtNjgsOSArNjksOSBAQAogCWlmIChwcm94KSB7CiAJCXdhY29tLT5pZFswXSA9IEVSQVNFUl9ERVZJQ0VfSUQ7CiAJCXByZXNzdXJlID0gKHNpZ25lZCBjaGFyKSgoZGF0YVs3XSA8PCAxKSB8ICgoZGF0YVs0XSA+PiAyKSAmIDEpKTsKLQkJaWYgKHdhY29tLT5mZWF0dXJlcy0+cHJlc3N1cmVfbWF4ID4gMjU1KQorCQlpZiAoZmVhdHVyZXMtPnByZXNzdXJlX21heCA+IDI1NSkKIAkJCXByZXNzdXJlID0gKHByZXNzdXJlIDw8IDEpIHwgKChkYXRhWzRdID4+IDYpICYgMSk7Ci0JCXByZXNzdXJlICs9ICh3YWNvbS0+ZmVhdHVyZXMtPnByZXNzdXJlX21heCArIDEpIC8gMjsKKwkJcHJlc3N1cmUgKz0gKGZlYXR1cmVzLT5wcmVzc3VyZV9tYXggKyAxKSAvIDI7CiAKIAkJLyoKIAkJICogaWYgZ29pbmcgZnJvbSBvdXQgb2YgcHJveGltaXR5IGludG8gcHJveGltaXR5IHNlbGVjdCBiZXR3ZWVuIHRoZSBlcmFzZXIKQEAgLTE1Miw2ICsxNTMsNyBAQAogCiBzdGF0aWMgaW50IHdhY29tX2dyYXBoaXJlX2lycShzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbSwgdm9pZCAqd2NvbWJvKQogeworCXN0cnVjdCB3YWNvbV9mZWF0dXJlcyAqZmVhdHVyZXMgPSAmd2Fjb20tPmZlYXR1cmVzOwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKIAlpbnQgeCwgeSwgcnc7CiAJc3RhdGljIGludCBwZW5EYXRhID0gMDsKQEAgLTE3OSw4ICsxODEsNyBAQAogCiAJCQljYXNlIDI6IC8qIE1vdXNlIHdpdGggd2hlZWwgKi8KIAkJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX01JRERMRSwgZGF0YVsxXSAmIDB4MDQpOwotCQkJCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gV0FDT01fRzQgfHwKLQkJCQkJCXdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBXQUNPTV9NTykgeworCQkJCWlmIChmZWF0dXJlcy0+dHlwZSA9PSBXQUNPTV9HNCB8fCBmZWF0dXJlcy0+dHlwZSA9PSBXQUNPTV9NTykgewogCQkJCQlydyA9IGRhdGFbN10gJiAweDA0ID8gKGRhdGFbN10gJiAweDAzKS00IDogKGRhdGFbN10gJiAweDAzKTsKIAkJCQkJd2Fjb21fcmVwb3J0X3JlbCh3Y29tYm8sIFJFTF9XSEVFTCwgLXJ3KTsKIAkJCQl9IGVsc2UKQEAgLTE5Miw4ICsxOTMsNyBAQAogCQkJCXdhY29tLT5pZFswXSA9IENVUlNPUl9ERVZJQ0VfSUQ7CiAJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9MRUZULCBkYXRhWzFdICYgMHgwMSk7CiAJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9SSUdIVCwgZGF0YVsxXSAmIDB4MDIpOwotCQkJCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gV0FDT01fRzQgfHwKLQkJCQkJCXdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBXQUNPTV9NTykKKwkJCQlpZiAoZmVhdHVyZXMtPnR5cGUgPT0gV0FDT01fRzQgfHwgZmVhdHVyZXMtPnR5cGUgPT0gV0FDT01fTU8pCiAJCQkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfRElTVEFOQ0UsIGRhdGFbNl0gJiAweDNmKTsKIAkJCQllbHNlCiAJCQkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfRElTVEFOQ0UsIGRhdGFbN10gJiAweDNmKTsKQEAgLTIzMCw3ICsyMzAsNyBAQAogCX0KIAogCS8qIHNlbmQgcGFkIGRhdGEgKi8KLQlzd2l0Y2ggKHdhY29tLT5mZWF0dXJlcy0+dHlwZSkgeworCXN3aXRjaCAoZmVhdHVyZXMtPnR5cGUpIHsKIAkgICAgY2FzZSBXQUNPTV9HNDoKIAkJaWYgKGRhdGFbN10gJiAweGY4KSB7CiAJCQlpZiAocGVuRGF0YSkgewpAQCAtMzAwLDExICszMDAsMTIgQEAKIAogc3RhdGljIGludCB3YWNvbV9pbnR1b3NfaW5vdXQoc3RydWN0IHdhY29tX3dhYyAqd2Fjb20sIHZvaWQgKndjb21ibykKIHsKKwlzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKmZlYXR1cmVzID0gJndhY29tLT5mZWF0dXJlczsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CiAJaW50IGlkeCA9IDA7CiAKIAkvKiB0b29sIG51bWJlciAqLwotCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TKQorCWlmIChmZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1MpCiAJCWlkeCA9IGRhdGFbMV0gJiAweDAxOwogCiAJLyogRW50ZXIgcmVwb3J0ICovCkBAIC00MDIsNyArNDAzLDcgQEAKIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fU1RZTFVTMiwgMCk7CiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1RPVUNILCAwKTsKIAkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfV0hFRUwsIDApOwotCQkJaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1MzUykKKwkJCWlmIChmZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1MzUykKIAkJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1osIDApOwogCQl9CiAJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCB3YWNvbS0+dG9vbFtpZHhdLCAwKTsKQEAgLTQxNiwxMyArNDE3LDE0IEBACiAKIHN0YXRpYyB2b2lkIHdhY29tX2ludHVvc19nZW5lcmFsKHN0cnVjdCB3YWNvbV93YWMgKndhY29tLCB2b2lkICp3Y29tYm8pCiB7CisJc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlcyA9ICZ3YWNvbS0+ZmVhdHVyZXM7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOwogCXVuc2lnbmVkIGludCB0OwogCiAJLyogZ2VuZXJhbCBwZW4gcGFja2V0ICovCiAJaWYgKChkYXRhWzFdICYgMHhiOCkgPT0gMHhhMCkgewogCQl0ID0gKGRhdGFbNl0gPDwgMikgfCAoKGRhdGFbN10gPj4gNikgJiAzKTsKLQkJaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1M0UyAmJiB3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPD0gSU5UVU9TNEwpCisJCWlmIChmZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1M0UyAmJiBmZWF0dXJlcy0+dHlwZSA8PSBJTlRVT1M0TCkKIAkJCXQgPSAodCA8PCAxKSB8IChkYXRhWzFdICYgMSk7CiAJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfUFJFU1NVUkUsIHQpOwogCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1RJTFRfWCwKQEAgLTQ0Niw2ICs0NDgsNyBAQAogCiBzdGF0aWMgaW50IHdhY29tX2ludHVvc19pcnEoc3RydWN0IHdhY29tX3dhYyAqd2Fjb20sIHZvaWQgKndjb21ibykKIHsKKwlzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKmZlYXR1cmVzID0gJndhY29tLT5mZWF0dXJlczsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CiAJdW5zaWduZWQgaW50IHQ7CiAJaW50IGlkeCA9IDAsIHJlc3VsdDsKQEAgLTQ1Nyw3ICs0NjAsNyBAQAogCX0KIAogCS8qIHRvb2wgbnVtYmVyICovCi0JaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1MpCisJaWYgKGZlYXR1cmVzLT50eXBlID09IElOVFVPUykKIAkJaWR4ID0gZGF0YVsxXSAmIDB4MDE7CiAKIAkvKiBwYWQgcGFja2V0cy4gV29ya3MgYXMgYSBzZWNvbmQgdG9vbCBhbmQgaXMgYWx3YXlzIGluIHByb3ggKi8KQEAgLTQ2Niw3ICs0NjksNyBAQAogCQlpZiAod2Fjb20tPnRvb2xbMV0gIT0gQlROX1RPT0xfRklOR0VSKQogCQkJd2Fjb20tPnRvb2xbMV0gPSBCVE5fVE9PTF9GSU5HRVI7CiAKLQkJaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1M0UyAmJiB3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPD0gSU5UVU9TNEwpIHsKKwkJaWYgKGZlYXR1cmVzLT50eXBlID49IElOVFVPUzRTICYmIGZlYXR1cmVzLT50eXBlIDw9IElOVFVPUzRMKSB7CiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzAsIChkYXRhWzJdICYgMHgwMSkpOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl8xLCAoZGF0YVszXSAmIDB4MDEpKTsKIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fMiwgKGRhdGFbM10gJiAweDAyKSk7CkBAIC00ODAsNyArNDgzLDcgQEAKIAkJCQkvKiBPdXQgb2YgcHJveGltaXR5LCBjbGVhciB3aGVlbCB2YWx1ZS4gKi8KIAkJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1dIRUVMLCAwKTsKIAkJCX0KLQkJCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgIT0gSU5UVU9TNFMpIHsKKwkJCWlmIChmZWF0dXJlcy0+dHlwZSAhPSBJTlRVT1M0UykgewogCQkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fNywgKGRhdGFbM10gJiAweDQwKSk7CiAJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl84LCAoZGF0YVszXSAmIDB4ODApKTsKIAkJCX0KQEAgLTUyOCwxOCArNTMxLDIwIEBACiAJCXJldHVybiAwOwogCiAJLyogT25seSBsYXJnZSBJbnR1b3Mgc3VwcG9ydCBMZW5zZSBDdXJzb3IgKi8KLQlpZiAoKHdhY29tLT50b29sW2lkeF0gPT0gQlROX1RPT0xfTEVOUykKLQkJCSYmICgod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IElOVFVPUzMpCi0JCQl8fCAod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IElOVFVPUzNTKQotCQkJfHwgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1M0KQotCQkJfHwgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1M0UykpKQorCWlmICh3YWNvbS0+dG9vbFtpZHhdID09IEJUTl9UT09MX0xFTlMgJiYKKwkgICAgKGZlYXR1cmVzLT50eXBlID09IElOVFVPUzMgfHwKKwkgICAgIGZlYXR1cmVzLT50eXBlID09IElOVFVPUzNTIHx8CisJICAgICBmZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1M0IHx8CisJICAgICBmZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1M0UykpIHsKKwogCQlyZXR1cm4gMDsKKwl9CiAKIAkvKiBDaW50aXEgZG9lc24ndCBzZW5kIGRhdGEgd2hlbiBSRFkgYml0IGlzbid0IHNldCAqLwotCWlmICgod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IENJTlRJUSkgJiYgIShkYXRhWzFdICYgMHg0MCkpCisJaWYgKGZlYXR1cmVzLT50eXBlID09IENJTlRJUSAmJiAhKGRhdGFbMV0gJiAweDQwKSkKICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID49IElOVFVPUzNTKSB7CisJaWYgKGZlYXR1cmVzLT50eXBlID49IElOVFVPUzNTKSB7CiAJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfWCwgKGRhdGFbMl0gPDwgOSkgfCAoZGF0YVszXSA8PCAxKSB8ICgoZGF0YVs5XSA+PiAxKSAmIDEpKTsKIAkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19ZLCAoZGF0YVs0XSA8PCA5KSB8IChkYXRhWzVdIDw8IDEpIHwgKGRhdGFbOV0gJiAxKSk7CiAJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfRElTVEFOQ0UsICgoZGF0YVs5XSA+PiAyKSAmIDB4M2YpKTsKQEAgLTU1Nyw3ICs1NjIsNyBAQAogCiAJCWlmIChkYXRhWzFdICYgMHgwMikgewogCQkJLyogUm90YXRpb24gcGFja2V0ICovCi0JCQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID49IElOVFVPUzNTKSB7CisJCQlpZiAoZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TM1MpIHsKIAkJCQkvKiBJMyBtYXJrZXIgcGVuIHJvdGF0aW9uICovCiAJCQkJdCA9IChkYXRhWzZdIDw8IDMpIHwgKChkYXRhWzddID4+IDUpICYgNyk7CiAJCQkJdCA9IChkYXRhWzddICYgMHgyMCkgPyAoKHQgPiA5MDApID8gKCh0LTEpIC8gMiAtIDEzNTApIDoKQEAgLTU3MCw3ICs1NzUsNyBAQAogCQkJCQkoKHQgLSAxKSAvIDIpIDogLXQgLyAyKTsKIAkJCX0KIAotCQl9IGVsc2UgaWYgKCEoZGF0YVsxXSAmIDB4MTApICYmIHdhY29tLT5mZWF0dXJlcy0+dHlwZSA8IElOVFVPUzNTKSB7CisJCX0gZWxzZSBpZiAoIShkYXRhWzFdICYgMHgxMCkgJiYgZmVhdHVyZXMtPnR5cGUgPCBJTlRVT1MzUykgewogCQkJLyogNEQgbW91c2UgcGFja2V0ICovCiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX0xFRlQsICAgZGF0YVs4XSAmIDB4MDEpOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9NSURETEUsIGRhdGFbOF0gJiAweDAyKTsKQEAgLTU4Myw3ICs1ODgsNyBAQAogCiAJCX0gZWxzZSBpZiAod2Fjb20tPnRvb2xbaWR4XSA9PSBCVE5fVE9PTF9NT1VTRSkgewogCQkJLyogSTQgbW91c2UgKi8KLQkJCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TNFMgJiYgd2Fjb20tPmZlYXR1cmVzLT50eXBlIDw9IElOVFVPUzRMKSB7CisJCQlpZiAoZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TNFMgJiYgZmVhdHVyZXMtPnR5cGUgPD0gSU5UVU9TNEwpIHsKIAkJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX0xFRlQsICAgZGF0YVs2XSAmIDB4MDEpOwogCQkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fTUlERExFLCBkYXRhWzZdICYgMHgwMik7CiAJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9SSUdIVCwgIGRhdGFbNl0gJiAweDA0KTsKQEAgLTYwNCwxMyArNjA5LDEzIEBACiAJCQkJCQkgLSAoKGRhdGFbOF0gJiAweDAyKSA+PiAxKSk7CiAKIAkJCQkvKiBJMyAyRCBtb3VzZSBzaWRlIGJ1dHRvbnMgKi8KLQkJCQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID49IElOVFVPUzNTICYmIHdhY29tLT5mZWF0dXJlcy0+dHlwZSA8PSBJTlRVT1MzTCkgeworCQkJCWlmIChmZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1MzUyAmJiBmZWF0dXJlcy0+dHlwZSA8PSBJTlRVT1MzTCkgewogCQkJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1NJREUsICAgZGF0YVs4XSAmIDB4NDApOwogCQkJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX0VYVFJBLCAgZGF0YVs4XSAmIDB4MjApOwogCQkJCX0KIAkJCX0KLQkJfSBlbHNlIGlmICgod2Fjb20tPmZlYXR1cmVzLT50eXBlIDwgSU5UVU9TM1MgfHwgd2Fjb20tPmZlYXR1cmVzLT50eXBlID09IElOVFVPUzNMIHx8Ci0JCQkJd2Fjb20tPmZlYXR1cmVzLT50eXBlID09IElOVFVPUzRMKSAmJgorCQl9IGVsc2UgaWYgKChmZWF0dXJlcy0+dHlwZSA8IElOVFVPUzNTIHx8IGZlYXR1cmVzLT50eXBlID09IElOVFVPUzNMIHx8CisJCQkJZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TNEwpICYmCiAJCQkgICB3YWNvbS0+dG9vbFtpZHhdID09IEJUTl9UT09MX0xFTlMpIHsKIAkJCS8qIExlbnMgY3Vyc29yIHBhY2tldHMgKi8KIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fTEVGVCwgICBkYXRhWzhdICYgMHgwMSk7CkBAIC03MTgsNiArNzIzLDcgQEAKIAogc3RhdGljIGludCB3YWNvbV90cGNfaXJxKHN0cnVjdCB3YWNvbV93YWMgKndhY29tLCB2b2lkICp3Y29tYm8pCiB7CisJc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlcyA9ICZ3YWNvbS0+ZmVhdHVyZXM7CiAJY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOwogCWludCBwcm94ID0gMCwgcHJlc3N1cmUsIGlkeCA9IC0xOwogCXN0YXRpYyBpbnQgc3R5bHVzSW5Qcm94LCB0b3VjaEluUHJveCA9IDEsIHRvdWNoT3V0OwpAQCAtNzkxLDcgKzc5Nyw3IEBACiAJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1ksIHdhY29tX2xlMTZfdG9fY3B1KCZkYXRhWzRdKSk7CiAJCQlwcmVzc3VyZSA9ICgoZGF0YVs3XSAmIDB4MDEpIDw8IDgpIHwgZGF0YVs2XTsKIAkJCWlmIChwcmVzc3VyZSA8IDApCi0JCQkJcHJlc3N1cmUgPSB3YWNvbS0+ZmVhdHVyZXMtPnByZXNzdXJlX21heCArIHByZXNzdXJlICsgMTsKKwkJCQlwcmVzc3VyZSA9IGZlYXR1cmVzLT5wcmVzc3VyZV9tYXggKyBwcmVzc3VyZSArIDE7CiAJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1BSRVNTVVJFLCBwcmVzc3VyZSk7CiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1RPVUNILCBkYXRhWzFdICYgMHgwNSk7CiAJCX0gZWxzZSB7CkBAIC04MTUsNyArODIxLDcgQEAKIAogaW50IHdhY29tX3dhY19pcnEoc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjLCB2b2lkICp3Y29tYm8pCiB7Ci0Jc3dpdGNoICh3YWNvbV93YWMtPmZlYXR1cmVzLT50eXBlKSB7CisJc3dpdGNoICh3YWNvbV93YWMtPmZlYXR1cmVzLnR5cGUpIHsKIAkJY2FzZSBQRU5QQVJUTkVSOgogCQkJcmV0dXJuIHdhY29tX3BlbnBhcnRuZXJfaXJxKHdhY29tX3dhYywgd2NvbWJvKTsKIApAQCAtODUzLDcgKzg1OSw3IEBACiAKIHZvaWQgd2Fjb21faW5pdF9pbnB1dF9kZXYoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpCiB7Ci0Jc3dpdGNoICh3YWNvbV93YWMtPmZlYXR1cmVzLT50eXBlKSB7CisJc3dpdGNoICh3YWNvbV93YWMtPmZlYXR1cmVzLnR5cGUpIHsKIAkJY2FzZSBXQUNPTV9NTzoKIAkJCWlucHV0X2Rldl9tbyhpbnB1dF9kZXYsIHdhY29tX3dhYyk7CiAJCWNhc2UgV0FDT01fRzQ6CkBAIC04ODgsNyArODk0LDcgQEAKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIFRBQkxFVFBDOgogCQkJaW5wdXRfZGV2X3RwYyhpbnB1dF9kZXYsIHdhY29tX3dhYyk7Ci0JCQlpZiAod2Fjb21fd2FjLT5mZWF0dXJlcy0+ZGV2aWNlX3R5cGUgIT0gQlROX1RPT0xfUEVOKQorCQkJaWYgKHdhY29tX3dhYy0+ZmVhdHVyZXMuZGV2aWNlX3R5cGUgIT0gQlROX1RPT0xfUEVOKQogCQkJCWJyZWFrOyAgLyogbm8gbmVlZCB0byBwcm9jZXNzIHN0eWx1cyBzdHVmZiAqLwogCiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KQEAgLTkwMywxNTMgKzkwOSwyMDEgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNbXSA9IHsKLQl7ICJXYWNvbSBQZW5wYXJ0bmVyIiwgICAgIFdBQ09NX1BLR0xFTl9QRU5QUlROLCAgICA1MDQwLCAgMzc4MCwgIDI1NSwgIDAsIFBFTlBBUlRORVIgfSwKLQl7ICJXYWNvbSBHcmFwaGlyZSIsICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDEwMjA2LCAgNzQyMiwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCi0JeyAiV2Fjb20gR3JhcGhpcmUyIDR4NSIsICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxMDIwNiwgIDc0MjIsICA1MTEsIDYzLCBHUkFQSElSRSB9LAotCXsgIldhY29tIEdyYXBoaXJlMiA1eDciLCAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTM5MTgsIDEwMjA2LCAgNTExLCA2MywgR1JBUEhJUkUgfSwKLQl7ICJXYWNvbSBHcmFwaGlyZTMiLCAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDEwMjA4LCAgNzQyNCwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCi0JeyAiV2Fjb20gR3JhcGhpcmUzIDZ4OCIsICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxNjcwNCwgMTIwNjQsICA1MTEsIDYzLCBHUkFQSElSRSB9LAotCXsgIldhY29tIEdyYXBoaXJlNCA0eDUiLCAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTAyMDgsICA3NDI0LCAgNTExLCA2MywgV0FDT01fRzQgfSwKLQl7ICJXYWNvbSBHcmFwaGlyZTQgNng4IiwgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDE2NzA0LCAxMjA2NCwgIDUxMSwgNjMsIFdBQ09NX0c0IH0sCi0JeyAiV2Fjb20gQmFtYm9vRnVuIDR4NSIsICBXQUNPTV9QS0dMRU5fQkJGVU4sICAgICAxNDc2MCwgIDkyMjUsICA1MTEsIDYzLCBXQUNPTV9NTyB9LAotCXsgIldhY29tIEJhbWJvb0Z1biA2eDgiLCAgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMjE2NDgsIDEzNTMwLCAgNTExLCA2MywgV0FDT01fTU8gfSwKLQl7ICJXYWNvbSBCYW1ib28xIE1lZGl1bSIsIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDE2NzA0LCAxMjA2NCwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCi0JeyAiV2Fjb20gVm9saXRvIiwgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNTEwNCwgIDM3MTIsICA1MTEsIDYzLCBHUkFQSElSRSB9LAotCXsgIldhY29tIFBlblN0YXRpb24yIiwgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDMyNTAsICAyMzIwLCAgMjU1LCA2MywgR1JBUEhJUkUgfSwKLQl7ICJXYWNvbSBWb2xpdG8yIDR4NSIsICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA1MTA0LCAgMzcxMiwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCi0JeyAiV2Fjb20gVm9saXRvMiAyeDMiLCAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgMzI0OCwgIDIzMjAsICA1MTEsIDYzLCBHUkFQSElSRSB9LAotCXsgIldhY29tIFBlblBhcnRuZXIyIiwgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDMyNTAsICAyMzIwLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKLQl7ICJXYWNvbSBCYW1ib28iLCAgICAgICAgIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAgIDE0NzYwLCAgOTIyNSwgIDUxMSwgNjMsIFdBQ09NX01PIH0sCi0JeyAiV2Fjb20gQmFtYm9vMSIsICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNTEwNCwgIDM3MTIsICA1MTEsIDYzLCBHUkFQSElSRSB9LAotCXsgIldhY29tIEludHVvcyA0eDUiLCAgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMTI3MDAsIDEwNjAwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCi0JeyAiV2Fjb20gSW50dW9zIDZ4OCIsICAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAyMDMyMCwgMTYyNDAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKLQl7ICJXYWNvbSBJbnR1b3MgOXgxMiIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDMwNDgwLCAyNDA2MCwgMTAyMywgMzEsIElOVFVPUyB9LAotCXsgIldhY29tIEludHVvcyAxMngxMiIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMzA0ODAsIDMxNjgwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCi0JeyAiV2Fjb20gSW50dW9zIDEyeDE4IiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA0NTcyMCwgMzE2ODAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKLQl7ICJXYWNvbSBQTDQwMCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA1NDA4LCAgNDA1NiwgIDI1NSwgIDAsIFBMIH0sCi0JeyAiV2Fjb20gUEw1MDAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjE0NCwgIDQ2MDgsICAyNTUsICAwLCBQTCB9LAotCXsgIldhY29tIFBMNjAwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDYxMjYsICA0NjA0LCAgMjU1LCAgMCwgUEwgfSwKLQl7ICJXYWNvbSBQTDYwMFNYIiwgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2MjYwLCAgNTAxNiwgIDI1NSwgIDAsIFBMIH0sCi0JeyAiV2Fjb20gUEw1NTAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjE0NCwgIDQ2MDgsICA1MTEsICAwLCBQTCB9LAotCXsgIldhY29tIFBMODAwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDcyMjAsICA1NzgwLCAgNTExLCAgMCwgUEwgfSwKLQl7ICJXYWNvbSBQTDcwMCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2NzU4LCAgNTQwNiwgIDUxMSwgIDAsIFBMIH0sCi0JeyAiV2Fjb20gUEw1MTAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjI4MiwgIDQ3NjIsICA1MTEsICAwLCBQTCB9LAotCXsgIldhY29tIERUVTcxMCIsICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMzQwODAsIDI3NjYwLCAgNTExLCAgMCwgUEwgfSwKLQl7ICJXYWNvbSBEVEY1MjEiLCAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2MjgyLCAgNDc2MiwgIDUxMSwgIDAsIFBMIH0sCi0JeyAiV2Fjb20gRFRGNzIwIiwgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjg1OCwgIDU1MDYsICA1MTEsICAwLCBQTCB9LAotCXsgIldhY29tIERURjcyMGEiLCAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDY4NTgsICA1NTA2LCAgNTExLCAgMCwgUEwgfSwKLQl7ICJXYWNvbSBDaW50aXEgUGFydG5lciIsIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDIwNDgwLCAxNTM2MCwgIDUxMSwgIDAsIFBUVSB9LAotCXsgIldhY29tIEludHVvczIgNHg1IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMTI3MDAsIDEwNjAwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCi0JeyAiV2Fjb20gSW50dW9zMiA2eDgiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAyMDMyMCwgMTYyNDAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKLQl7ICJXYWNvbSBJbnR1b3MyIDl4MTIiLCAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDMwNDgwLCAyNDA2MCwgMTAyMywgMzEsIElOVFVPUyB9LAotCXsgIldhY29tIEludHVvczIgMTJ4MTIiLCAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMzA0ODAsIDMxNjgwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCi0JeyAiV2Fjb20gSW50dW9zMiAxMngxOCIsICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA0NTcyMCwgMzE2ODAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKLQl7ICJXYWNvbSBJbnR1b3MzIDR4NSIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDI1NDAwLCAyMDMyMCwgMTAyMywgNjMsIElOVFVPUzNTIH0sCi0JeyAiV2Fjb20gSW50dW9zMyA2eDgiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA0MDY0MCwgMzA0ODAsIDEwMjMsIDYzLCBJTlRVT1MzIH0sCi0JeyAiV2Fjb20gSW50dW9zMyA5eDEyIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA2MDk2MCwgNDU3MjAsIDEwMjMsIDYzLCBJTlRVT1MzIH0sCi0JeyAiV2Fjb20gSW50dW9zMyAxMngxMiIsICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA2MDk2MCwgNjA5NjAsIDEwMjMsIDYzLCBJTlRVT1MzTCB9LAotCXsgIldhY29tIEludHVvczMgMTJ4MTkiLCAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgOTc1MzYsIDYwOTYwLCAxMDIzLCA2MywgSU5UVU9TM0wgfSwKLQl7ICJXYWNvbSBJbnR1b3MzIDZ4MTEiLCAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDU0MjA0LCAzMTc1MCwgMTAyMywgNjMsIElOVFVPUzMgfSwKLQl7ICJXYWNvbSBJbnR1b3MzIDR4NiIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDMxNDk2LCAxOTY4NSwgMTAyMywgNjMsIElOVFVPUzNTIH0sCi0JeyAiV2Fjb20gSW50dW9zNCA0eDYiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAzMTQ5NiwgMTk2ODUsIDIwNDcsIDYzLCBJTlRVT1M0UyB9LAotCXsgIldhY29tIEludHVvczQgNng5IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNDQ3MDQsIDI3OTQwLCAyMDQ3LCA2MywgSU5UVU9TNCB9LAotCXsgIldhY29tIEludHVvczQgOHgxMyIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNjUwMjQsIDQwNjQwLCAyMDQ3LCA2MywgSU5UVU9TNEwgfSwKLQl7ICJXYWNvbSBJbnR1b3M0IDEyeDE5IiwgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDk3NTM2LCA2MDk2MCwgMjA0NywgNjMsIElOVFVPUzRMIH0sCi0JeyAiV2Fjb20gQ2ludGlxIDIxVVgiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA4NzIwMCwgNjU2MDAsIDEwMjMsIDYzLCBDSU5USVEgfSwKLQl7ICJXYWNvbSBDaW50aXEgMjBXU1giLCAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDg2NjgwLCA1NDE4MCwgMTAyMywgNjMsIFdBQ09NX0JFRSB9LAotCXsgIldhY29tIENpbnRpcSAxMldYIiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNTMwMjAsIDMzNDQwLCAxMDIzLCA2MywgV0FDT01fQkVFIH0sCi0JeyAiV2Fjb20gRFRVMTkzMSIsICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAzNzgzMiwgMzAzMDUsICA1MTEsICAwLCBQTCB9LAotCXsgIldhY29tIElTRHY0IDkwIiwgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMjYyMDIsIDE2MzI1LCAgMjU1LCAgMCwgVEFCTEVUUEMgfSwKLQl7ICJXYWNvbSBJU0R2NCA5MyIsICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDIH0sCi0JeyAiV2Fjb20gSVNEdjQgOUEiLCAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAyNjIwMiwgMTYzMjUsICAyNTUsICAwLCBUQUJMRVRQQyB9LAotCXsgIldhY29tIElTRHY0IDlGIiwgICAgICAgV0FDT01fUEtHTEVOX1BFTkFCTEVELCAgMjYyMDIsIDE2MzI1LCAgMjU1LCAgMCwgVEFCTEVUUEMgfSwKLQl7ICJXYWNvbSBJU0R2NCBFMiIsICAgICAgIFdBQ09NX1BLR0xFTl9UUEMyRkcsICAgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDMkZHIH0sCi0JeyAiV2Fjb20gSVNEdjQgRTMiLCAgICAgICBXQUNPTV9QS0dMRU5fVFBDMkZHLCAgICAyNjIwMiwgMTYzMjUsICAyNTUsICAwLCBUQUJMRVRQQzJGRyB9LAotCXsgIldhY29tIEludHVvczIgNng4IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMjAzMjAsIDE2MjQwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MDAgPQorCXsgIldhY29tIFBlbnBhcnRuZXIiLCAgICAgV0FDT01fUEtHTEVOX1BFTlBSVE4sICAgIDUwNDAsICAzNzgwLCAgMjU1LCAgMCwgUEVOUEFSVE5FUiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDEwID0KKwl7ICJXYWNvbSBHcmFwaGlyZSIsICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDEwMjA2LCAgNzQyMiwgIDUxMSwgNjMsIEdSQVBISVJFIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MTEgPQorCXsgIldhY29tIEdyYXBoaXJlMiA0eDUiLCAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTAyMDYsICA3NDIyLCAgNTExLCA2MywgR1JBUEhJUkUgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgxMiA9CisJeyAiV2Fjb20gR3JhcGhpcmUyIDV4NyIsICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxMzkxOCwgMTAyMDYsICA1MTEsIDYzLCBHUkFQSElSRSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDEzID0KKwl7ICJXYWNvbSBHcmFwaGlyZTMiLCAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDEwMjA4LCAgNzQyNCwgIDUxMSwgNjMsIEdSQVBISVJFIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MTQgPQorCXsgIldhY29tIEdyYXBoaXJlMyA2eDgiLCAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTY3MDQsIDEyMDY0LCAgNTExLCA2MywgR1JBUEhJUkUgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgxNSA9CisJeyAiV2Fjb20gR3JhcGhpcmU0IDR4NSIsICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxMDIwOCwgIDc0MjQsICA1MTEsIDYzLCBXQUNPTV9HNCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDE2ID0KKwl7ICJXYWNvbSBHcmFwaGlyZTQgNng4IiwgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDE2NzA0LCAxMjA2NCwgIDUxMSwgNjMsIFdBQ09NX0c0IH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MTcgPQorCXsgIldhY29tIEJhbWJvb0Z1biA0eDUiLCAgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMTQ3NjAsICA5MjI1LCAgNTExLCA2MywgV0FDT01fTU8gfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgxOCA9CisJeyAiV2Fjb20gQmFtYm9vRnVuIDZ4OCIsICBXQUNPTV9QS0dMRU5fQkJGVU4sICAgICAyMTY0OCwgMTM1MzAsICA1MTEsIDYzLCBXQUNPTV9NTyB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDE5ID0KKwl7ICJXYWNvbSBCYW1ib28xIE1lZGl1bSIsIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDE2NzA0LCAxMjA2NCwgIDUxMSwgNjMsIEdSQVBISVJFIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4NjAgPQorCXsgIldhY29tIFZvbGl0byIsICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDUxMDQsICAzNzEyLCAgNTExLCA2MywgR1JBUEhJUkUgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg2MSA9CisJeyAiV2Fjb20gUGVuU3RhdGlvbjIiLCAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgMzI1MCwgIDIzMjAsICAyNTUsIDYzLCBHUkFQSElSRSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDYyID0KKwl7ICJXYWNvbSBWb2xpdG8yIDR4NSIsICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA1MTA0LCAgMzcxMiwgIDUxMSwgNjMsIEdSQVBISVJFIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4NjMgPQorCXsgIldhY29tIFZvbGl0bzIgMngzIiwgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDMyNDgsICAyMzIwLCAgNTExLCA2MywgR1JBUEhJUkUgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg2NCA9CisJeyAiV2Fjb20gUGVuUGFydG5lcjIiLCAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgMzI1MCwgIDIzMjAsICA1MTEsIDYzLCBHUkFQSElSRSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDY1ID0KKwl7ICJXYWNvbSBCYW1ib28iLCAgICAgICAgIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAgIDE0NzYwLCAgOTIyNSwgIDUxMSwgNjMsIFdBQ09NX01PIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4NjkgPQorCXsgIldhY29tIEJhbWJvbzEiLCAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDUxMDQsICAzNzEyLCAgNTExLCA2MywgR1JBUEhJUkUgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgyMCA9CisJeyAiV2Fjb20gSW50dW9zIDR4NSIsICAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAxMjcwMCwgMTA2MDAsIDEwMjMsIDMxLCBJTlRVT1MgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgyMSA9CisJeyAiV2Fjb20gSW50dW9zIDZ4OCIsICAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAyMDMyMCwgMTYyNDAsIDEwMjMsIDMxLCBJTlRVT1MgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgyMiA9CisJeyAiV2Fjb20gSW50dW9zIDl4MTIiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAzMDQ4MCwgMjQwNjAsIDEwMjMsIDMxLCBJTlRVT1MgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgyMyA9CisJeyAiV2Fjb20gSW50dW9zIDEyeDEyIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAzMDQ4MCwgMzE2ODAsIDEwMjMsIDMxLCBJTlRVT1MgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgyNCA9CisJeyAiV2Fjb20gSW50dW9zIDEyeDE4IiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA0NTcyMCwgMzE2ODAsIDEwMjMsIDMxLCBJTlRVT1MgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgzMCA9CisJeyAiV2Fjb20gUEw0MDAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNTQwOCwgIDQwNTYsICAyNTUsICAwLCBQTCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDMxID0KKwl7ICJXYWNvbSBQTDUwMCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2MTQ0LCAgNDYwOCwgIDI1NSwgIDAsIFBMIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MzIgPQorCXsgIldhY29tIFBMNjAwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDYxMjYsICA0NjA0LCAgMjU1LCAgMCwgUEwgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgzMyA9CisJeyAiV2Fjb20gUEw2MDBTWCIsICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjI2MCwgIDUwMTYsICAyNTUsICAwLCBQTCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDM0ID0KKwl7ICJXYWNvbSBQTDU1MCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2MTQ0LCAgNDYwOCwgIDUxMSwgIDAsIFBMIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MzUgPQorCXsgIldhY29tIFBMODAwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDcyMjAsICA1NzgwLCAgNTExLCAgMCwgUEwgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgzNyA9CisJeyAiV2Fjb20gUEw3MDAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjc1OCwgIDU0MDYsICA1MTEsICAwLCBQTCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDM4ID0KKwl7ICJXYWNvbSBQTDUxMCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2MjgyLCAgNDc2MiwgIDUxMSwgIDAsIFBMIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MzkgPQorCXsgIldhY29tIERUVTcxMCIsICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMzQwODAsIDI3NjYwLCAgNTExLCAgMCwgUEwgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhDNCA9CisJeyAiV2Fjb20gRFRGNTIxIiwgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjI4MiwgIDQ3NjIsICA1MTEsICAwLCBQTCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEMwID0KKwl7ICJXYWNvbSBEVEY3MjAiLCAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2ODU4LCAgNTUwNiwgIDUxMSwgIDAsIFBMIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QzIgPQorCXsgIldhY29tIERURjcyMGEiLCAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDY4NTgsICA1NTA2LCAgNTExLCAgMCwgUEwgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgwMyA9CisJeyAiV2Fjb20gQ2ludGlxIFBhcnRuZXIiLCBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAyMDQ4MCwgMTUzNjAsICA1MTEsICAwLCBQVFUgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg0MSA9CisJeyAiV2Fjb20gSW50dW9zMiA0eDUiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAxMjcwMCwgMTA2MDAsIDEwMjMsIDMxLCBJTlRVT1MgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg0MiA9CisJeyAiV2Fjb20gSW50dW9zMiA2eDgiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAyMDMyMCwgMTYyNDAsIDEwMjMsIDMxLCBJTlRVT1MgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg0MyA9CisJeyAiV2Fjb20gSW50dW9zMiA5eDEyIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAzMDQ4MCwgMjQwNjAsIDEwMjMsIDMxLCBJTlRVT1MgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg0NCA9CisJeyAiV2Fjb20gSW50dW9zMiAxMngxMiIsICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAzMDQ4MCwgMzE2ODAsIDEwMjMsIDMxLCBJTlRVT1MgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg0NSA9CisJeyAiV2Fjb20gSW50dW9zMiAxMngxOCIsICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA0NTcyMCwgMzE2ODAsIDEwMjMsIDMxLCBJTlRVT1MgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhCMCA9CisJeyAiV2Fjb20gSW50dW9zMyA0eDUiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAyNTQwMCwgMjAzMjAsIDEwMjMsIDYzLCBJTlRVT1MzUyB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEIxID0KKwl7ICJXYWNvbSBJbnR1b3MzIDZ4OCIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDQwNjQwLCAzMDQ4MCwgMTAyMywgNjMsIElOVFVPUzMgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhCMiA9CisJeyAiV2Fjb20gSW50dW9zMyA5eDEyIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA2MDk2MCwgNDU3MjAsIDEwMjMsIDYzLCBJTlRVT1MzIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QjMgPQorCXsgIldhY29tIEludHVvczMgMTJ4MTIiLCAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNjA5NjAsIDYwOTYwLCAxMDIzLCA2MywgSU5UVU9TM0wgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhCNCA9CisJeyAiV2Fjb20gSW50dW9zMyAxMngxOSIsICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA5NzUzNiwgNjA5NjAsIDEwMjMsIDYzLCBJTlRVT1MzTCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEI1ID0KKwl7ICJXYWNvbSBJbnR1b3MzIDZ4MTEiLCAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDU0MjA0LCAzMTc1MCwgMTAyMywgNjMsIElOVFVPUzMgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhCNyA9CisJeyAiV2Fjb20gSW50dW9zMyA0eDYiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAzMTQ5NiwgMTk2ODUsIDEwMjMsIDYzLCBJTlRVT1MzUyB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEI4ID0KKwl7ICJXYWNvbSBJbnR1b3M0IDR4NiIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDMxNDk2LCAxOTY4NSwgMjA0NywgNjMsIElOVFVPUzRTIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QjkgPQorCXsgIldhY29tIEludHVvczQgNng5IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNDQ3MDQsIDI3OTQwLCAyMDQ3LCA2MywgSU5UVU9TNCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEJBID0KKwl7ICJXYWNvbSBJbnR1b3M0IDh4MTMiLCAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDY1MDI0LCA0MDY0MCwgMjA0NywgNjMsIElOVFVPUzRMIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4QkIgPQorCXsgIldhY29tIEludHVvczQgMTJ4MTkiLCAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgOTc1MzYsIDYwOTYwLCAyMDQ3LCA2MywgSU5UVU9TNEwgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHgzRiA9CisJeyAiV2Fjb20gQ2ludGlxIDIxVVgiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA4NzIwMCwgNjU2MDAsIDEwMjMsIDYzLCBDSU5USVEgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhDNSA9CisJeyAiV2Fjb20gQ2ludGlxIDIwV1NYIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA4NjY4MCwgNTQxODAsIDEwMjMsIDYzLCBXQUNPTV9CRUUgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhDNiA9CisJeyAiV2Fjb20gQ2ludGlxIDEyV1giLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA1MzAyMCwgMzM0NDAsIDEwMjMsIDYzLCBXQUNPTV9CRUUgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhDNyA9CisJeyAiV2Fjb20gRFRVMTkzMSIsICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAzNzgzMiwgMzAzMDUsICA1MTEsICAwLCBQTCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDkwID0KKwl7ICJXYWNvbSBJU0R2NCA5MCIsICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4OTMgPQorCXsgIldhY29tIElTRHY0IDkzIiwgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMjYyMDIsIDE2MzI1LCAgMjU1LCAgMCwgVEFCTEVUUEMgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg5QSA9CisJeyAiV2Fjb20gSVNEdjQgOUEiLCAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAyNjIwMiwgMTYzMjUsICAyNTUsICAwLCBUQUJMRVRQQyB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDlGID0KKwl7ICJXYWNvbSBJU0R2NCA5RiIsICAgICAgIFdBQ09NX1BLR0xFTl9QRU5BQkxFRCwgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RTIgPQorCXsgIldhY29tIElTRHY0IEUyIiwgICAgICAgV0FDT01fUEtHTEVOX1RQQzJGRywgICAgMjYyMDIsIDE2MzI1LCAgMjU1LCAgMCwgVEFCTEVUUEMyRkcgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhFMyA9CisJeyAiV2Fjb20gSVNEdjQgRTMiLCAgICAgICBXQUNPTV9QS0dMRU5fVFBDMkZHLCAgICAyNjIwMiwgMTYzMjUsICAyNTUsICAwLCBUQUJMRVRQQzJGRyB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weDQ3ID0KKwl7ICJXYWNvbSBJbnR1b3MyIDZ4OCIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDIwMzIwLCAxNjI0MCwgMTAyMywgMzEsIElOVFVPUyB9OworCisjZGVmaW5lIFVTQl9ERVZJQ0VfV0FDT00ocHJvZCkJCQkJCVwKKwlVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIHByb2QpLAkJCVwKKwkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJndhY29tX2ZlYXR1cmVzXyMjcHJvZAorCitjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB3YWNvbV9pZHNbXSA9IHsKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgwMCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgxMCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgxMSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgxMikgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgxMykgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgxNCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgxNSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgxNikgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgxNykgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgxOCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgxOSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg2MCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg2MSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg2MikgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg2MykgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg2NCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg2NSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg2OSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgyMCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgyMSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgyMikgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgyMykgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgyNCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgzMCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgzMSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgzMikgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgzMykgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgzNCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgzNSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgzNykgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgzOCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgzOSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhDNCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhDMCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhDMikgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgwMykgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg0MSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg0MikgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg0MykgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg0NCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg0NSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhCMCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhCMSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhCMikgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhCMykgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhCNCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhCNSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhCNykgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhCOCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhCOSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhCQSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhCQikgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgzRikgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhDNSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhDNikgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhDNykgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg5MCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg5MykgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg5QSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg5RikgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhFMikgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhFMykgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHg0NykgfSwKIAl7IH0KIH07Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB3YWNvbV9pZHNbXSA9IHsKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgwMCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxMCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxMSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxMikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxMykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxNCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxNSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxNikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxNykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxOCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxOSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2MCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2MSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2MikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2MykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2NCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2NSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2OSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgyMCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgyMSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgyMikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgyMykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgyNCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzMCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzMSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzMikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzMykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzNCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzNSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzNykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzOCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzOSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhDNCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhDMCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhDMikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgwMykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0MSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0MikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0MykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0NCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0NSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCNCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCNSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCNykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCOCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCOSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCQSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCQikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzRikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhDNSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhDNikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhDNykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg5MCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg5MykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg5QSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg5RikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhFMikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhFMykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0NykgfSwKLQl7IH0KLX07Ci0KLWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpnZXRfZGV2aWNlX3RhYmxlKHZvaWQpCi17Ci0gICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZF90YWJsZSA9IHdhY29tX2lkczsKLQotICAgICAgICByZXR1cm4gaWRfdGFibGU7Ci19Ci0KLXN0cnVjdCB3YWNvbV9mZWF0dXJlcyAqIGdldF93YWNvbV9mZWF0dXJlKGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLSAgICAgICAgaW50IGluZGV4ID0gaWQgLSB3YWNvbV9pZHM7Ci0gICAgICAgIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyAqd2YgPSAmd2Fjb21fZmVhdHVyZXNbaW5kZXhdOwotCi0gICAgICAgIHJldHVybiB3ZjsKLX0KLQogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHdhY29tX2lkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuaCBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oCmluZGV4IGVlMDFlMTkuLjg1OTBiMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oCkBAIC0xNSwxMSArMTUsMTEgQEAKIC8qIHBhY2tldCBsZW5ndGggZm9yIGluZGl2aWR1YWwgbW9kZWxzICovCiAjZGVmaW5lIFdBQ09NX1BLR0xFTl9QRU5QUlROCSA3CiAjZGVmaW5lIFdBQ09NX1BLR0xFTl9HUkFQSElSRQkgOAotI2RlZmluZSBXQUNPTV9QS0dMRU5fQkJGVU4gCSA5Ci0jZGVmaW5lIFdBQ09NX1BLR0xFTl9JTlRVT1MgCTEwCisjZGVmaW5lIFdBQ09NX1BLR0xFTl9CQkZVTgkgOQorI2RlZmluZSBXQUNPTV9QS0dMRU5fSU5UVU9TCTEwCiAjZGVmaW5lIFdBQ09NX1BLR0xFTl9QRU5BQkxFRAkgOAogI2RlZmluZSBXQUNPTV9QS0dMRU5fVFBDMUZHCSA1Ci0jZGVmaW5lIFdBQ09NX1BLR0xFTl9UUEMyRkcgCTE0CisjZGVmaW5lIFdBQ09NX1BLR0xFTl9UUEMyRkcJMTQKIAogLyogZGV2aWNlIElEcyAqLwogI2RlZmluZSBTVFlMVVNfREVWSUNFX0lECTB4MDIKQEAgLTU4LDcgKzU4LDcgQEAKIH07CiAKIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB7Ci0JY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpuYW1lOwogCWludCBwa3RsZW47CiAJaW50IHhfbWF4OwogCWludCB5X21heDsKQEAgLTczLDExICs3MywxMiBAQAogfTsKIAogc3RydWN0IHdhY29tX3dhYyB7CisJY2hhciBuYW1lWzY0XTsKIAl1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgICAgICBpbnQgdG9vbFsyXTsKLSAgICAgICAgaW50IGlkWzJdOwotICAgICAgICBfX3UzMiBzZXJpYWxbMl07Ci0Jc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlczsKKwlpbnQgdG9vbFsyXTsKKwlpbnQgaWRbMl07CisJX191MzIgc2VyaWFsWzJdOworCXN0cnVjdCB3YWNvbV9mZWF0dXJlcyBmZWF0dXJlczsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCmluZGV4IGRmYWZjNzYuLjY0NTdlMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKQEAgLTkwLDcgKzkwLDYgQEAKIAl0cmlzdGF0ZSAiU2hhcnBTTCAoQ29yZ2kgYW5kIFNwaXR6IHNlcmllcykgdG91Y2hzY3JlZW4gZHJpdmVyIChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFBYQV9TSEFSUFNMCiAJc2VsZWN0IENPUkdJX1NTUF9ERVBSRUNBVEVECi0JZGVmYXVsdCB5CiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGRyaXZlciBmb3IgdGhlIHRvdWNoc2NyZWVuIG9uIHRoZQogCSAgU2hhcnAgU0wtQzd4eCBhbmQgU0wtQ3h4MDAgc2VyaWVzIG9mIFBEQXMuCkBAIC01MzcsNiArNTM2LDExIEBACiAJYm9vbCAiRVQmVCBUQzVVSCB0b3VjaHNjcmVlbiBjb250cm9sZXIgc3VwcG9ydCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFRPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUKIAorY29uZmlnIFRPVUNIU0NSRUVOX1VTQl9ORVhJTworCWRlZmF1bHQgeQorCWJvb2wgIk5FWElPL2lOZXhpbyBkZXZpY2Ugc3VwcG9ydCIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFRPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUKKwogY29uZmlnIFRPVUNIU0NSRUVOX1RPVUNISVQyMTMKIAl0cmlzdGF0ZSAiU2FoYXJhIFRvdWNoSVQtMjEzIHRvdWNoc2NyZWVuIgogCXNlbGVjdCBTRVJJTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwppbmRleCA1MmQyY2ExLi44YjA1ZDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKIC8qCkBAIC04NSw2ICs4Niw3IEBACiAJY2hhcgkJCW5hbWVbMzJdOwogCiAJc3RydWN0IHNwaV9kZXZpY2UJKnNwaTsKKwlzdHJ1Y3QgcmVndWxhdG9yCSpyZWc7CiAKICNpZiBkZWZpbmVkKENPTkZJR19IV01PTikgfHwgZGVmaW5lZChDT05GSUdfSFdNT05fTU9EVUxFKQogCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAJKmF0dHJfZ3JvdXA7CkBAIC03ODgsNiArNzkwLDggQEAKIAkJfQogCX0KIAorCXJlZ3VsYXRvcl9kaXNhYmxlKHRzLT5yZWcpOworCiAJLyogd2Uga25vdyB0aGUgY2hpcCdzIGluIGxvd3Bvd2VyIG1vZGUgc2luY2Ugd2UgYWx3YXlzCiAJICogbGVhdmUgaXQgdGhhdCB3YXkgYWZ0ZXIgZXZlcnkgcmVxdWVzdAogCSAqLwpAQCAtNzk5LDYgKzgwMyw4IEBACiAJaWYgKCF0cy0+ZGlzYWJsZWQpCiAJCXJldHVybjsKIAorCXJlZ3VsYXRvcl9lbmFibGUodHMtPnJlZyk7CisKIAl0cy0+ZGlzYWJsZWQgPSAwOwogCXRzLT5pcnFfZGlzYWJsZWQgPSAwOwogCWVuYWJsZV9pcnEodHMtPnNwaS0+aXJxKTsKQEAgLTExMzksNiArMTE0NSwxOSBAQAogCiAJdHMtPmxhc3RfbXNnID0gbTsKIAorCXRzLT5yZWcgPSByZWd1bGF0b3JfZ2V0KCZzcGktPmRldiwgInZjYyIpOworCWlmIChJU19FUlIodHMtPnJlZykpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJ1bmFibGUgdG8gZ2V0IHJlZ3VsYXRvcjogJWxkXG4iLAorCQkJUFRSX0VSUih0cy0+cmVnKSk7CisJCWdvdG8gZXJyX2ZyZWVfZ3BpbzsKKwl9CisKKwllcnIgPSByZWd1bGF0b3JfZW5hYmxlKHRzLT5yZWcpOworCWlmIChlcnIpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJ1bmFibGUgdG8gZW5hYmxlIHJlZ3VsYXRvcjogJWRcbiIsIGVycik7CisJCWdvdG8gZXJyX3B1dF9yZWd1bGF0b3I7CisJfQorCiAJaWYgKHJlcXVlc3RfaXJxKHNwaS0+aXJxLCBhZHM3ODQ2X2lycSwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCQlzcGktPmRldi5kcml2ZXItPm5hbWUsIHRzKSkgewogCQlkZXZfaW5mbygmc3BpLT5kZXYsCkBAIC0xMTQ4LDcgKzExNjcsNyBAQAogCQkJCSAgc3BpLT5kZXYuZHJpdmVyLT5uYW1lLCB0cyk7CiAJCWlmIChlcnIpIHsKIAkJCWRldl9kYmcoJnNwaS0+ZGV2LCAiaXJxICVkIGJ1c3k/XG4iLCBzcGktPmlycSk7Ci0JCQlnb3RvIGVycl9mcmVlX2dwaW87CisJCQlnb3RvIGVycl9kaXNhYmxlX3JlZ3VsYXRvcjsKIAkJfQogCX0KIApAQCAtMTE4MCw2ICsxMTk5LDEwIEBACiAJYWRzNzg0eF9od21vbl91bnJlZ2lzdGVyKHNwaSwgdHMpOwogIGVycl9mcmVlX2lycToKIAlmcmVlX2lycShzcGktPmlycSwgdHMpOworIGVycl9kaXNhYmxlX3JlZ3VsYXRvcjoKKwlyZWd1bGF0b3JfZGlzYWJsZSh0cy0+cmVnKTsKKyBlcnJfcHV0X3JlZ3VsYXRvcjoKKwlyZWd1bGF0b3JfcHV0KHRzLT5yZWcpOwogIGVycl9mcmVlX2dwaW86CiAJaWYgKHRzLT5ncGlvX3BlbmRvd24gIT0gLTEpCiAJCWdwaW9fZnJlZSh0cy0+Z3Bpb19wZW5kb3duKTsKQEAgLTEyMDgsNiArMTIzMSw5IEBACiAJLyogc3VzcGVuZCBsZWZ0IHRoZSBJUlEgZGlzYWJsZWQgKi8KIAllbmFibGVfaXJxKHRzLT5zcGktPmlycSk7CiAKKwlyZWd1bGF0b3JfZGlzYWJsZSh0cy0+cmVnKTsKKwlyZWd1bGF0b3JfcHV0KHRzLT5yZWcpOworCiAJaWYgKHRzLT5ncGlvX3BlbmRvd24gIT0gLTEpCiAJCWdwaW9fZnJlZSh0cy0+Z3Bpb19wZW5kb3duKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9lbG8uYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZWxvLmMKaW5kZXggOGYzOGM1ZS4uNDg2ZDMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9lbG8uYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Vsby5jCkBAIC03Miw0NSArNzIsNDkgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBlbG8tPmRldjsKIAogCWVsby0+ZGF0YVtlbG8tPmlkeF0gPSBkYXRhOwotCXN3aXRjaCAoZWxvLT5pZHgrKykgewotCQljYXNlIDA6Ci0JCQllbG8tPmNzdW0gPSAweGFhOwotCQkJaWYgKGRhdGEgIT0gRUxPMTBfTEVBRF9CWVRFKSB7Ci0JCQkJcHJfZGVidWcoImVsbzogdW5zeW5jaHJvbml6ZWQgZGF0YTogMHglMDJ4XG4iLCBkYXRhKTsKLQkJCQllbG8tPmlkeCA9IDA7Ci0JCQl9Ci0JCQlicmVhazsKIAotCQljYXNlIDk6CisJc3dpdGNoIChlbG8tPmlkeCsrKSB7CisJY2FzZSAwOgorCQllbG8tPmNzdW0gPSAweGFhOworCQlpZiAoZGF0YSAhPSBFTE8xMF9MRUFEX0JZVEUpIHsKKwkJCWRldl9kYmcoJmVsby0+c2VyaW8tPmRldiwKKwkJCQkidW5zeW5jaHJvbml6ZWQgZGF0YTogMHglMDJ4XG4iLCBkYXRhKTsKIAkJCWVsby0+aWR4ID0gMDsKLQkJCWlmIChkYXRhICE9IGVsby0+Y3N1bSkgewotCQkJCXByX2RlYnVnKCJlbG86IGJhZCBjaGVja3N1bTogMHglMDJ4LCBleHBlY3RlZCAweCUwMnhcbiIsCi0JCQkJCSBkYXRhLCBlbG8tPmNzdW0pOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKGVsby0+ZGF0YVsxXSAhPSBlbG8tPmV4cGVjdGVkX3BhY2tldCkgewotCQkJCWlmIChlbG8tPmRhdGFbMV0gIT0gRUxPMTBfVE9VQ0hfUEFDS0VUKQotCQkJCQlwcl9kZWJ1ZygiZWxvOiB1bmV4cGVjdGVkIHBhY2tldDogMHglMDJ4XG4iLAotCQkJCQkJIGVsby0+ZGF0YVsxXSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAobGlrZWx5KGVsby0+ZGF0YVsxXSA9PSBFTE8xMF9UT1VDSF9QQUNLRVQpKSB7Ci0JCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCAoZWxvLT5kYXRhWzRdIDw8IDgpIHwgZWxvLT5kYXRhWzNdKTsKLQkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIChlbG8tPmRhdGFbNl0gPDwgOCkgfCBlbG8tPmRhdGFbNV0pOwotCQkJCWlmIChlbG8tPmRhdGFbMl0gJiBFTE8xMF9QUkVTU1VSRSkKLQkJCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19QUkVTU1VSRSwKLQkJCQkJCQkoZWxvLT5kYXRhWzhdIDw8IDgpIHwgZWxvLT5kYXRhWzddKTsKLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCBlbG8tPmRhdGFbMl0gJiBFTE8xMF9UT1VDSCk7Ci0JCQkJaW5wdXRfc3luYyhkZXYpOwotCQkJfSBlbHNlIGlmIChlbG8tPmRhdGFbMV0gPT0gRUxPMTBfQUNLX1BBQ0tFVCkgewotCQkJCWlmIChlbG8tPmRhdGFbMl0gPT0gJzAnKQotCQkJCQllbG8tPmV4cGVjdGVkX3BhY2tldCA9IEVMTzEwX1RPVUNIX1BBQ0tFVDsKLQkJCQljb21wbGV0ZSgmZWxvLT5jbWRfZG9uZSk7Ci0JCQl9IGVsc2UgewotCQkJCW1lbWNweShlbG8tPnJlc3BvbnNlLCAmZWxvLT5kYXRhWzFdLCBFTE8xMF9QQUNLRVRfTEVOKTsKLQkJCQllbG8tPmV4cGVjdGVkX3BhY2tldCA9IEVMTzEwX0FDS19QQUNLRVQ7Ci0JCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIDk6CisJCWVsby0+aWR4ID0gMDsKKwkJaWYgKGRhdGEgIT0gZWxvLT5jc3VtKSB7CisJCQlkZXZfZGJnKCZlbG8tPnNlcmlvLT5kZXYsCisJCQkJImJhZCBjaGVja3N1bTogMHglMDJ4LCBleHBlY3RlZCAweCUwMnhcbiIsCisJCQkJIGRhdGEsIGVsby0+Y3N1bSk7CiAJCQlicmVhazsKKwkJfQorCQlpZiAoZWxvLT5kYXRhWzFdICE9IGVsby0+ZXhwZWN0ZWRfcGFja2V0KSB7CisJCQlpZiAoZWxvLT5kYXRhWzFdICE9IEVMTzEwX1RPVUNIX1BBQ0tFVCkKKwkJCQlkZXZfZGJnKCZlbG8tPnNlcmlvLT5kZXYsCisJCQkJCSJ1bmV4cGVjdGVkIHBhY2tldDogMHglMDJ4XG4iLAorCQkJCQkgZWxvLT5kYXRhWzFdKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChsaWtlbHkoZWxvLT5kYXRhWzFdID09IEVMTzEwX1RPVUNIX1BBQ0tFVCkpIHsKKwkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgKGVsby0+ZGF0YVs0XSA8PCA4KSB8IGVsby0+ZGF0YVszXSk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIChlbG8tPmRhdGFbNl0gPDwgOCkgfCBlbG8tPmRhdGFbNV0pOworCQkJaWYgKGVsby0+ZGF0YVsyXSAmIEVMTzEwX1BSRVNTVVJFKQorCQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUFJFU1NVUkUsCisJCQkJCQkoZWxvLT5kYXRhWzhdIDw8IDgpIHwgZWxvLT5kYXRhWzddKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsIGVsby0+ZGF0YVsyXSAmIEVMTzEwX1RPVUNIKTsKKwkJCWlucHV0X3N5bmMoZGV2KTsKKwkJfSBlbHNlIGlmIChlbG8tPmRhdGFbMV0gPT0gRUxPMTBfQUNLX1BBQ0tFVCkgeworCQkJaWYgKGVsby0+ZGF0YVsyXSA9PSAnMCcpCisJCQkJZWxvLT5leHBlY3RlZF9wYWNrZXQgPSBFTE8xMF9UT1VDSF9QQUNLRVQ7CisJCQljb21wbGV0ZSgmZWxvLT5jbWRfZG9uZSk7CisJCX0gZWxzZSB7CisJCQltZW1jcHkoZWxvLT5yZXNwb25zZSwgJmVsby0+ZGF0YVsxXSwgRUxPMTBfUEFDS0VUX0xFTik7CisJCQllbG8tPmV4cGVjdGVkX3BhY2tldCA9IEVMTzEwX0FDS19QQUNLRVQ7CisJCX0KKwkJYnJlYWs7CiAJfQogCWVsby0+Y3N1bSArPSBkYXRhOwogfQpAQCAtMTIzLDQyICsxMjcsNTMgQEAKIAogCXN3aXRjaCAoZWxvLT5pZHgrKykgewogCi0JCWNhc2UgMDogaWYgKChkYXRhICYgMHhjMCkgIT0gMHhjMCkgZWxvLT5pZHggPSAwOyBicmVhazsKLQkJY2FzZSAxOiBpZiAoKGRhdGEgJiAweGMwKSAhPSAweDgwKSBlbG8tPmlkeCA9IDA7IGJyZWFrOwotCQljYXNlIDI6IGlmICgoZGF0YSAmIDB4YzApICE9IDB4NDApIGVsby0+aWR4ID0gMDsgYnJlYWs7CisJY2FzZSAwOgorCQlpZiAoKGRhdGEgJiAweGMwKSAhPSAweGMwKQorCQkJZWxvLT5pZHggPSAwOworCQlicmVhazsKIAotCQljYXNlIDM6Ci0JCQlpZiAoZGF0YSAmIDB4YzApIHsKLQkJCQllbG8tPmlkeCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJY2FzZSAxOgorCQlpZiAoKGRhdGEgJiAweGMwKSAhPSAweDgwKQorCQkJZWxvLT5pZHggPSAwOworCQlicmVhazsKIAotCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCAoKGVsby0+ZGF0YVswXSAmIDB4M2YpIDw8IDYpIHwgKGVsby0+ZGF0YVsxXSAmIDB4M2YpKTsKLQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgKChlbG8tPmRhdGFbMl0gJiAweDNmKSA8PCA2KSB8IChlbG8tPmRhdGFbM10gJiAweDNmKSk7CisJY2FzZSAyOgorCQlpZiAoKGRhdGEgJiAweGMwKSAhPSAweDQwKQorCQkJZWxvLT5pZHggPSAwOworCQlicmVhazsKIAotCQkJaWYgKGVsby0+aWQgPT0gMikgewotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsIDEpOwotCQkJCWlucHV0X3N5bmMoZGV2KTsKLQkJCQllbG8tPmlkeCA9IDA7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCi0JCWNhc2UgNDoKLQkJCWlmIChkYXRhKSB7Ci0JCQkJaW5wdXRfc3luYyhkZXYpOwotCQkJCWVsby0+aWR4ID0gMDsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgNToKLQkJCWlmICgoZGF0YSAmIDB4ZjApID09IDApIHsKLQkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLCBlbG8tPmRhdGFbNV0pOwotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsICEhZWxvLT5kYXRhWzVdKTsKLQkJCX0KLQkJCWlucHV0X3N5bmMoZGV2KTsKKwljYXNlIDM6CisJCWlmIChkYXRhICYgMHhjMCkgewogCQkJZWxvLT5pZHggPSAwOwogCQkJYnJlYWs7CisJCX0KKworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsICgoZWxvLT5kYXRhWzBdICYgMHgzZikgPDwgNikgfCAoZWxvLT5kYXRhWzFdICYgMHgzZikpOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksICgoZWxvLT5kYXRhWzJdICYgMHgzZikgPDwgNikgfCAoZWxvLT5kYXRhWzNdICYgMHgzZikpOworCisJCWlmIChlbG8tPmlkID09IDIpIHsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsIDEpOworCQkJaW5wdXRfc3luYyhkZXYpOworCQkJZWxvLT5pZHggPSAwOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIDQ6CisJCWlmIChkYXRhKSB7CisJCQlpbnB1dF9zeW5jKGRldik7CisJCQllbG8tPmlkeCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIDU6CisJCWlmICgoZGF0YSAmIDB4ZjApID09IDApIHsKKwkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUFJFU1NVUkUsIGVsby0+ZGF0YVs1XSk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCAhIWVsby0+ZGF0YVs1XSk7CisJCX0KKwkJaW5wdXRfc3luYyhkZXYpOworCQllbG8tPmlkeCA9IDA7CisJCWJyZWFrOwogCX0KIH0KIApAQCAtMTcwLDE3ICsxODUsMTcgQEAKIAogCXN3aXRjaCAoZWxvLT5pZHgrKykgewogCi0JCWNhc2UgMDoKLQkJCWlmICgoZGF0YSAmIDB4N2YpICE9IDB4MDEpCi0JCQkJZWxvLT5pZHggPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsICEoZWxvLT5kYXRhWzFdICYgMHg4MCkpOwotCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBlbG8tPmRhdGFbMV0pOwotCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCBlbG8tPmRhdGFbMl0pOwotCQkJaW5wdXRfc3luYyhkZXYpOworCWNhc2UgMDoKKwkJaWYgKChkYXRhICYgMHg3ZikgIT0gMHgwMSkKIAkJCWVsby0+aWR4ID0gMDsKLQkJCWJyZWFrOworCQlicmVhazsKKwljYXNlIDI6CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsICEoZWxvLT5kYXRhWzFdICYgMHg4MCkpOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIGVsby0+ZGF0YVsxXSk7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgZWxvLT5kYXRhWzJdKTsKKwkJaW5wdXRfc3luYyhkZXYpOworCQllbG8tPmlkeCA9IDA7CisJCWJyZWFrOwogCX0KIH0KIApAQCAtMTg5LDE5ICsyMDQsMTkgQEAKIHsKIAlzdHJ1Y3QgZWxvICplbG8gPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpbyk7CiAKLQlzd2l0Y2goZWxvLT5pZCkgewotCQljYXNlIDA6Ci0JCQllbG9fcHJvY2Vzc19kYXRhXzEwKGVsbywgZGF0YSk7Ci0JCQlicmVhazsKKwlzd2l0Y2ggKGVsby0+aWQpIHsKKwljYXNlIDA6CisJCWVsb19wcm9jZXNzX2RhdGFfMTAoZWxvLCBkYXRhKTsKKwkJYnJlYWs7CiAKLQkJY2FzZSAxOgotCQljYXNlIDI6Ci0JCQllbG9fcHJvY2Vzc19kYXRhXzYoZWxvLCBkYXRhKTsKLQkJCWJyZWFrOworCWNhc2UgMToKKwljYXNlIDI6CisJCWVsb19wcm9jZXNzX2RhdGFfNihlbG8sIGRhdGEpOworCQlicmVhazsKIAotCQljYXNlIDM6Ci0JCQllbG9fcHJvY2Vzc19kYXRhXzMoZWxvLCBkYXRhKTsKLQkJCWJyZWFrOworCWNhc2UgMzoKKwkJZWxvX3Byb2Nlc3NfZGF0YV8zKGVsbywgZGF0YSk7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTI2MSwxMCArMjc2LDEwIEBACiAJaWYgKHBhY2tldFszXSAmIEVMTzEwX1BSRVNTVVJFKQogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19QUkVTU1VSRSwgMCwgMjU1LCAwLCAwKTsKIAotCXByaW50ayhLRVJOX0lORk8gImVsbzogJXNUb3VjaCB0b3VjaHNjcmVlbiwgZnc6ICUwMnguJTAyeCwgIgotCQkiZmVhdHVyZXM6IDB4JTAyeCwgY29udHJvbGxlcjogMHglMDJ4XG4iLAotCQllbG9fdHlwZXNbKHBhY2tldFsxXSAtJzAnKSAmIDB4MDNdLAotCQlwYWNrZXRbNV0sIHBhY2tldFs0XSwgcGFja2V0WzNdLCBwYWNrZXRbN10pOworCWRldl9pbmZvKCZlbG8tPnNlcmlvLT5kZXYsCisJCSAiJXNUb3VjaCB0b3VjaHNjcmVlbiwgZnc6ICUwMnguJTAyeCwgZmVhdHVyZXM6IDB4JTAyeCwgY29udHJvbGxlcjogMHglMDJ4XG4iLAorCQkgZWxvX3R5cGVzWyhwYWNrZXRbMV0gLScwJykgJiAweDAzXSwKKwkJIHBhY2tldFs1XSwgcGFja2V0WzRdLCBwYWNrZXRbM10sIHBhY2tldFs3XSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzMCwyNCArMzQ1LDI0IEBACiAKIAlzd2l0Y2ggKGVsby0+aWQpIHsKIAotCQljYXNlIDA6IC8qIDEwLWJ5dGUgcHJvdG9jb2wgKi8KLQkJCWlmIChlbG9fc2V0dXBfMTAoZWxvKSkKLQkJCQlnb3RvIGZhaWwzOworCWNhc2UgMDogLyogMTAtYnl0ZSBwcm90b2NvbCAqLworCQlpZiAoZWxvX3NldHVwXzEwKGVsbykpCisJCQlnb3RvIGZhaWwzOwogCi0JCQlicmVhazsKKwkJYnJlYWs7CiAKLQkJY2FzZSAxOiAvKiA2LWJ5dGUgcHJvdG9jb2wgKi8KLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1BSRVNTVVJFLCAwLCAxNSwgMCwgMCk7CisJY2FzZSAxOiAvKiA2LWJ5dGUgcHJvdG9jb2wgKi8KKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUFJFU1NVUkUsIDAsIDE1LCAwLCAwKTsKIAotCQljYXNlIDI6IC8qIDQtYnl0ZSBwcm90b2NvbCAqLwotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwgOTYsIDQwMDAsIDAsIDApOwotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwgOTYsIDQwMDAsIDAsIDApOwotCQkJYnJlYWs7CisJY2FzZSAyOiAvKiA0LWJ5dGUgcHJvdG9jb2wgKi8KKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwgOTYsIDQwMDAsIDAsIDApOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ZLCA5NiwgNDAwMCwgMCwgMCk7CisJCWJyZWFrOwogCi0JCWNhc2UgMzogLyogMy1ieXRlIHByb3RvY29sICovCi0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YLCAwLCAyNTUsIDAsIDApOwotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwgMCwgMjU1LCAwLCAwKTsKLQkJCWJyZWFrOworCWNhc2UgMzogLyogMy1ieXRlIHByb3RvY29sICovCisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsIDAsIDI1NSwgMCwgMCk7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksIDAsIDI1NSwgMCwgMCk7CisJCWJyZWFrOwogCX0KIAogCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShlbG8tPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21haW5zdG9uZS13bTk3eHguYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWFpbnN0b25lLXdtOTd4eC5jCmluZGV4IDZjZGNmMmEuLmI2YjhiMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWFpbnN0b25lLXdtOTd4eC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWFpbnN0b25lLXdtOTd4eC5jCkBAIC0xNTMsNiArMTUzLDkgQEAKIAkJaWYgKHByZXNzdXJlKQogCQkJcCA9IE1PRFI7CiAKKwkJZGV2X2RiZyh3bS0+ZGV2LCAiUmF3IGNvb3JkaW5hdGVzOiB4PSV4LCB5PSV4LCBwPSV4XG4iLAorCQkJeCwgeSwgcCk7CisKIAkJLyogYXJlIHNhbXBsZXMgdmFsaWQgKi8KIAkJaWYgKCh4ICYgV005N1hYX0FEQ1NSQ19NQVNLKSAhPSBXTTk3WFhfQURDU0VMX1ggfHwKIAkJICAgICh5ICYgV005N1hYX0FEQ1NSQ19NQVNLKSAhPSBXTTk3WFhfQURDU0VMX1kgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vczNjMjQxMF90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9zM2MyNDEwX3RzLmMKaW5kZXggNjM4NmI0NC4uMzc1NWE0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9zM2MyNDEwX3RzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9zM2MyNDEwX3RzLmMKQEAgLTEyOCwyNyArMTI4LDI5IEBACiAKIAlkb3duID0gZ2V0X2Rvd24oZGF0YTAsIGRhdGExKTsKIAotCWlmICh0cy5jb3VudCA9PSAoMSA8PCB0cy5zaGlmdCkpIHsKLQkJdHMueHAgPj49IHRzLnNoaWZ0OwotCQl0cy55cCA+Pj0gdHMuc2hpZnQ7Ci0KLQkJZGV2X2RiZyh0cy5kZXYsICIlczogWD0lbHUsIFk9JWx1LCBjb3VudD0lZFxuIiwKLQkJCV9fZnVuY19fLCB0cy54cCwgdHMueXAsIHRzLmNvdW50KTsKLQotCQlpbnB1dF9yZXBvcnRfYWJzKHRzLmlucHV0LCBBQlNfWCwgdHMueHApOwotCQlpbnB1dF9yZXBvcnRfYWJzKHRzLmlucHV0LCBBQlNfWSwgdHMueXApOwotCi0JCWlucHV0X3JlcG9ydF9rZXkodHMuaW5wdXQsIEJUTl9UT1VDSCwgMSk7Ci0JCWlucHV0X3N5bmModHMuaW5wdXQpOwotCi0JCXRzLnhwID0gMDsKLQkJdHMueXAgPSAwOwotCQl0cy5jb3VudCA9IDA7Ci0JfQotCiAJaWYgKGRvd24pIHsKKwkJaWYgKHRzLmNvdW50ID09ICgxIDw8IHRzLnNoaWZ0KSkgeworCQkJdHMueHAgPj49IHRzLnNoaWZ0OworCQkJdHMueXAgPj49IHRzLnNoaWZ0OworCisJCQlkZXZfZGJnKHRzLmRldiwgIiVzOiBYPSVsdSwgWT0lbHUsIGNvdW50PSVkXG4iLAorCQkJCV9fZnVuY19fLCB0cy54cCwgdHMueXAsIHRzLmNvdW50KTsKKworCQkJaW5wdXRfcmVwb3J0X2Ficyh0cy5pbnB1dCwgQUJTX1gsIHRzLnhwKTsKKwkJCWlucHV0X3JlcG9ydF9hYnModHMuaW5wdXQsIEFCU19ZLCB0cy55cCk7CisKKwkJCWlucHV0X3JlcG9ydF9rZXkodHMuaW5wdXQsIEJUTl9UT1VDSCwgMSk7CisJCQlpbnB1dF9zeW5jKHRzLmlucHV0KTsKKworCQkJdHMueHAgPSAwOworCQkJdHMueXAgPSAwOworCQkJdHMuY291bnQgPSAwOworCQl9CisKIAkJczNjX2FkY19zdGFydCh0cy5jbGllbnQsIDAsIDEgPDwgdHMuc2hpZnQpOwogCX0gZWxzZSB7CisJCXRzLnhwID0gMDsKKwkJdHMueXAgPSAwOwogCQl0cy5jb3VudCA9IDA7CiAKIAkJaW5wdXRfcmVwb3J0X2tleSh0cy5pbnB1dCwgQlROX1RPVUNILCAwKTsKQEAgLTQwMSw2ICs0MDMsNyBAQAogCXN0cnVjdCBzM2MyNDEwX3RzX21hY2hfaW5mbyAqaW5mbyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJY2xrX2VuYWJsZSh0cy5jbG9jayk7CisJZW5hYmxlX2lycSh0cy5pcnFfdGMpOwogCiAJLyogSW5pdGlhbGlzZSByZWdpc3RlcnMgKi8KIAlpZiAoKGluZm8tPmRlbGF5ICYgMHhmZmZmKSA+IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RzYzIwMDcuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdHNjMjAwNy5jCmluZGV4IDdlZjBkMTQuLmJlMjM3ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdHNjMjAwNy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdHNjMjAwNy5jCkBAIC0zNTgsNyArMzU4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRzYzIwMDdfaWR0YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRzYzIwMDdfaWR0YWJsZVtdID0gewogCXsgInRzYzIwMDciLCAwIH0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91c2J0b3VjaHNjcmVlbi5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91c2J0b3VjaHNjcmVlbi5jCmluZGV4IDA5YTVlNzMuLjk5MzMwYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdXNidG91Y2hzY3JlZW4uYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VzYnRvdWNoc2NyZWVuLmMKQEAgLTE1LDYgKzE1LDcgQEAKICAqICAtIEdvVG9wIFN1cGVyX1EyL0dvZ29QZW4vUGVuUG93ZXIgdGFibGV0cwogICogIC0gSkFTVEVDIFVTQiB0b3VjaCBjb250cm9sbGVyL0RpZ2lUZWNoIERUUi0wMlUKICAqICAtIFp5dHJvbmljIGNhcGFjaXRpdmUgdG91Y2hzY3JlZW4KKyAqICAtIE5FWElPL2lOZXhpbwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IGJ5IERhbmllbCBSaXR6IDxkYW5pZWwucml0ekBnbXguY2g+CiAgKiBDb3B5cmlnaHQgKEMpIGJ5IFRvZGQgRS4gSm9obnNvbiAobXRvdWNodXNiLmMpCkBAIC05NSw2ICs5Niw3IEBACiAKIAlpbnQgICgqcmVhZF9kYXRhKSAgIChzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCwgdW5zaWduZWQgY2hhciAqcGt0KTsKIAlpbnQgICgqaW5pdCkgICAgICAgIChzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCk7CisJdm9pZCAoKmV4aXQpCSAgICAoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gpOwogfTsKIAogLyogYSB1c2J0b3VjaCBkZXZpY2UgKi8KQEAgLTEwNCwxMSArMTA2LDEyIEBACiAJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCWludCBidWZfbGVuOwogCXN0cnVjdCB1cmIgKmlycTsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCXN0cnVjdCB1c2J0b3VjaF9kZXZpY2VfaW5mbyAqdHlwZTsKIAljaGFyIG5hbWVbMTI4XTsKIAljaGFyIHBoeXNbNjRdOworCXZvaWQgKnByaXY7CiAKIAlpbnQgeCwgeTsKIAlpbnQgdG91Y2gsIHByZXNzOwpAQCAtMTMzLDYgKzEzNiw3IEBACiAJREVWVFlQRV9FMkksCiAJREVWVFlQRV9aWVRST05JQywKIAlERVZUWVBFX1RDNVVILAorCURFVlRZUEVfTkVYSU8sCiB9OwogCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSElEX0NMQVNTKHZlbmQsIHByb2QpIFwKQEAgLTE0NCw3ICsxNDgsNyBAQAogCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfSU5URVJGQUNFX0NMQVNTX0hJRCwgXAogCS5iSW50ZXJmYWNlUHJvdG9jb2wgPSBVU0JfSU5URVJGQUNFX1BST1RPQ09MX01PVVNFCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2J0b3VjaF9kZXZpY2VzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNidG91Y2hfZGV2aWNlc1tdID0gewogI2lmZGVmIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfRUdBTEFYCiAJLyogaWdub3JlIHRoZSBISUQgY2FwYWJsZSBkZXZpY2VzLCBoYW5kbGVkIGJ5IHVzYmhpZCAqLwogCXtVU0JfREVWSUNFX0hJRF9DTEFTUygweDBlZWYsIDB4MDAwMSksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfSUdOT1JFfSwKQEAgLTIyMiw2ICsyMjYsMTQgQEAKIAl7VVNCX0RFVklDRSgweDA2NjQsIDB4MDMwOSksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfVEM1VUh9LAogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX05FWElPCisJLyogZGF0YSBpbnRlcmZhY2Ugb25seSAqLworCXtVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDEwZjAsIDB4MjAwMiwgMHgwYSwgMHgwMCwgMHgwMCksCisJCS5kcml2ZXJfaW5mbyA9IERFVlRZUEVfTkVYSU99LAorCXtVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDE4NzAsIDB4MDAwMSwgMHgwYSwgMHgwMCwgMHgwMCksCisJCS5kcml2ZXJfaW5mbyA9IERFVlRZUEVfTkVYSU99LAorI2VuZGlmCisKIAl7fQogfTsKIApAQCAtMjM0LDggKzI0Niw5IEBACiBzdGF0aWMgaW50IGUyaV9pbml0KHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoKQogewogCWludCByZXQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHVzYnRvdWNoLT5pbnRlcmZhY2UpOwogCi0JcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYnRvdWNoLT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNidG91Y2gtPnVkZXYsIDApLAorCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCiAJICAgICAgICAgICAgICAgICAgICAgIDB4MDEsIDB4MDIsIDB4MDAwMCwgMHgwMDgxLAogCSAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CiAKQEAgLTM0NCw4ICszNTcsOSBAQAogc3RhdGljIGludCBtdG91Y2hfaW5pdChzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCkKIHsKIAlpbnQgcmV0LCBpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldih1c2J0b3VjaC0+aW50ZXJmYWNlKTsKIAotCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0b3VjaC0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYnRvdWNoLT51ZGV2LCAwKSwKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAogCSAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfUkVTRVQsCiAJICAgICAgICAgICAgICAgICAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwpAQCAtMzU2LDcgKzM3MCw3IEBACiAJbXNsZWVwKDE1MCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0b3VjaC0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYnRvdWNoLT51ZGV2LCAwKSwKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKIAkJCQkgICAgICBNVE9VQ0hVU0JfQVNZTkNfUkVQT1JULAogCQkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCQkgICAgICAxLCAxLCBOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CkBAIC00ODksNyArNTAzLDcgQEAKIAogc3RhdGljIGludCBkbWNfdHNjMTBfaW5pdChzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCkKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gdXNidG91Y2gtPnVkZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYodXNidG91Y2gtPmludGVyZmFjZSk7CiAJaW50IHJldCA9IC1FTk9NRU07CiAJdW5zaWduZWQgY2hhciAqYnVmOwogCkBAIC02MTgsOCArNjMyLDggQEAKICNpZmRlZiBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0dFTkVSQUxfVE9VQ0gKIHN0YXRpYyBpbnQgZ2VuZXJhbF90b3VjaF9yZWFkX2RhdGEoc3RydWN0IHVzYnRvdWNoX3VzYiAqZGV2LCB1bnNpZ25lZCBjaGFyICpwa3QpCiB7Ci0JZGV2LT54ID0gKChwa3RbMl0gJiAweDBGKSA8PCA4KSB8IHBrdFsxXSA7Ci0JZGV2LT55ID0gKChwa3RbNF0gJiAweDBGKSA8PCA4KSB8IHBrdFszXSA7CisJZGV2LT54ID0gKHBrdFsyXSA8PCA4KSB8IHBrdFsxXTsKKwlkZXYtPnkgPSAocGt0WzRdIDw8IDgpIHwgcGt0WzNdOwogCWRldi0+cHJlc3MgPSBwa3RbNV0gJiAweGZmOwogCWRldi0+dG91Y2ggPSBwa3RbMF0gJiAweDAxOwogCkBAIC02OTAsNiArNzA0LDIyOSBAQAogI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTkVYSU8gUGFydAorICovCisjaWZkZWYgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9ORVhJTworCisjZGVmaW5lIE5FWElPX1RJTUVPVVQJNTAwMAorI2RlZmluZSBORVhJT19CVUZTSVpFCTEwMjQKKyNkZWZpbmUgTkVYSU9fVEhSRVNIT0xECTUwCisKK3N0cnVjdCBuZXhpb19wcml2IHsKKwlzdHJ1Y3QgdXJiICphY2s7CisJdW5zaWduZWQgY2hhciAqYWNrX2J1ZjsKK307CisKK3N0cnVjdCBuZXhpb190b3VjaF9wYWNrZXQgeworCXU4CWZsYWdzOwkJLyogMHhlMSA9IHRvdWNoLCAweGUxID0gcmVsZWFzZSAqLworCV9fYmUxNglkYXRhX2xlbjsJLyogdG90YWwgYnl0ZXMgb2YgdG91Y2ggZGF0YSAqLworCV9fYmUxNgl4X2xlbjsJCS8qIGJ5dGVzIGZvciBYIGF4aXMgKi8KKwlfX2JlMTYJeV9sZW47CQkvKiBieXRlcyBmb3IgWSBheGlzICovCisJdTgJZGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG5leGlvX2Fja19wa3RbMl0gPSB7IDB4YWEsIDB4MDIgfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG5leGlvX2luaXRfcGt0WzRdID0geyAweDgyLCAweDA0LCAweDBhLCAweDBmIH07CisKK3N0YXRpYyB2b2lkIG5leGlvX2Fja19jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCit7Cit9CisKK3N0YXRpYyBpbnQgbmV4aW9faW5pdChzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldih1c2J0b3VjaC0+aW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB1c2J0b3VjaC0+aW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwlzdHJ1Y3QgbmV4aW9fcHJpdiAqcHJpdjsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKwlpbnQgYWN0dWFsX2xlbiwgaTsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJY2hhciAqZmlybXdhcmVfdmVyID0gTlVMTCwgKmRldmljZV9uYW1lID0gTlVMTDsKKwlpbnQgaW5wdXRfZXAgPSAwLCBvdXRwdXRfZXAgPSAwOworCisJLyogZmluZCBmaXJzdCBpbnB1dCBhbmQgb3V0cHV0IGVuZHBvaW50ICovCisJZm9yIChpID0gMDsgaSA8IGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKKwkJaWYgKCFpbnB1dF9lcCAmJgorCQkgICAgdXNiX2VuZHBvaW50X2Rpcl9pbigmaW50ZXJmYWNlLT5lbmRwb2ludFtpXS5kZXNjKSkKKwkJCWlucHV0X2VwID0gaW50ZXJmYWNlLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCWlmICghb3V0cHV0X2VwICYmCisJCSAgICB1c2JfZW5kcG9pbnRfZGlyX291dCgmaW50ZXJmYWNlLT5lbmRwb2ludFtpXS5kZXNjKSkKKwkJCW91dHB1dF9lcCA9IGludGVyZmFjZS0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCX0KKwlpZiAoIWlucHV0X2VwIHx8ICFvdXRwdXRfZXApCisJCXJldHVybiAtRU5YSU87CisKKwlidWYgPSBrbWFsbG9jKE5FWElPX0JVRlNJWkUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlnb3RvIG91dF9idWY7CisKKwkvKiB0d28gZW1wdHkgcmVhZHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXJldCA9IHVzYl9idWxrX21zZyhkZXYsIHVzYl9yY3ZidWxrcGlwZShkZXYsIGlucHV0X2VwKSwKKwkJCQkgICBidWYsIE5FWElPX0JVRlNJWkUsICZhY3R1YWxfbGVuLAorCQkJCSAgIE5FWElPX1RJTUVPVVQpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X2J1ZjsKKwl9CisKKwkvKiBzZW5kIGluaXQgY29tbWFuZCAqLworCW1lbWNweShidWYsIG5leGlvX2luaXRfcGt0LCBzaXplb2YobmV4aW9faW5pdF9wa3QpKTsKKwlyZXQgPSB1c2JfYnVsa19tc2coZGV2LCB1c2Jfc25kYnVsa3BpcGUoZGV2LCBvdXRwdXRfZXApLAorCQkJICAgYnVmLCBzaXplb2YobmV4aW9faW5pdF9wa3QpLCAmYWN0dWFsX2xlbiwKKwkJCSAgIE5FWElPX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9idWY7CisKKwkvKiByZWFkIHJlcGxpZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCW1lbXNldChidWYsIDAsIE5FWElPX0JVRlNJWkUpOworCQlyZXQgPSB1c2JfYnVsa19tc2coZGV2LCB1c2JfcmN2YnVsa3BpcGUoZGV2LCBpbnB1dF9lcCksCisJCQkJICAgYnVmLCBORVhJT19CVUZTSVpFLCAmYWN0dWFsX2xlbiwKKwkJCQkgICBORVhJT19USU1FT1VUKTsKKwkJaWYgKHJldCA8IDAgfHwgYWN0dWFsX2xlbiA8IDEgfHwgYnVmWzFdICE9IGFjdHVhbF9sZW4pCisJCQljb250aW51ZTsKKwkJc3dpdGNoIChidWZbMF0pIHsKKwkJY2FzZSAweDgzOgkvKiBmaXJtd2FyZSB2ZXJzaW9uICovCisJCQlpZiAoIWZpcm13YXJlX3ZlcikKKwkJCQlmaXJtd2FyZV92ZXIgPSBrc3RyZHVwKCZidWZbMl0sIEdGUF9LRVJORUwpOworCQkJYnJlYWs7CisJCWNhc2UgMHg4NDoJLyogZGV2aWNlIG5hbWUgKi8KKwkJCWlmICghZGV2aWNlX25hbWUpCisJCQkJZGV2aWNlX25hbWUgPSBrc3RyZHVwKCZidWZbMl0sIEdGUF9LRVJORUwpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJOZXhpbyBkZXZpY2U6ICVzLCBmaXJtd2FyZSB2ZXJzaW9uOiAlc1xuIiwKKwkgICAgICAgZGV2aWNlX25hbWUsIGZpcm13YXJlX3Zlcik7CisKKwlrZnJlZShmaXJtd2FyZV92ZXIpOworCWtmcmVlKGRldmljZV9uYW1lKTsKKworCS8qIHByZXBhcmUgQUNLIFVSQiAqLworCXJldCA9IC1FTk9NRU07CisKKwl1c2J0b3VjaC0+cHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXhpb19wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1c2J0b3VjaC0+cHJpdikKKwkJZ290byBvdXRfYnVmOworCisJcHJpdiA9IHVzYnRvdWNoLT5wcml2OworCisJcHJpdi0+YWNrX2J1ZiA9IGttYWxsb2Moc2l6ZW9mKG5leGlvX2Fja19wa3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPmFja19idWYpCisJCWdvdG8gZXJyX3ByaXY7CisKKwltZW1jcHkocHJpdi0+YWNrX2J1ZiwgbmV4aW9fYWNrX3BrdCwgc2l6ZW9mKG5leGlvX2Fja19wa3QpKTsKKworCXByaXYtPmFjayA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5hY2spIHsKKwkJZGJnKCIlcyAtIHVzYl9hbGxvY191cmIgZmFpbGVkOiB1c2J0b3VjaC0+YWNrIiwgX19mdW5jX18pOworCQlnb3RvIGVycl9hY2tfYnVmOworCX0KKworCXVzYl9maWxsX2J1bGtfdXJiKHByaXYtPmFjaywgZGV2LCB1c2Jfc25kYnVsa3BpcGUoZGV2LCBvdXRwdXRfZXApLAorCQkJICBwcml2LT5hY2tfYnVmLCBzaXplb2YobmV4aW9fYWNrX3BrdCksCisJCQkgIG5leGlvX2Fja19jb21wbGV0ZSwgdXNidG91Y2gpOworCXJldCA9IDA7CisJZ290byBvdXRfYnVmOworCitlcnJfYWNrX2J1ZjoKKwlrZnJlZShwcml2LT5hY2tfYnVmKTsKK2Vycl9wcml2OgorCWtmcmVlKHByaXYpOworb3V0X2J1ZjoKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG5leGlvX2V4aXQoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gpCit7CisJc3RydWN0IG5leGlvX3ByaXYgKnByaXYgPSB1c2J0b3VjaC0+cHJpdjsKKworCXVzYl9raWxsX3VyYihwcml2LT5hY2spOworCXVzYl9mcmVlX3VyYihwcml2LT5hY2spOworCWtmcmVlKHByaXYtPmFja19idWYpOworCWtmcmVlKHByaXYpOworfQorCitzdGF0aWMgaW50IG5leGlvX3JlYWRfZGF0YShzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCwgdW5zaWduZWQgY2hhciAqcGt0KQoreworCWludCB4LCB5LCBiZWdpbl94LCBiZWdpbl95LCBlbmRfeCwgZW5kX3ksIHcsIGgsIHJldDsKKwlzdHJ1Y3QgbmV4aW9fdG91Y2hfcGFja2V0ICpwYWNrZXQgPSAodm9pZCAqKSBwa3Q7CisJc3RydWN0IG5leGlvX3ByaXYgKnByaXYgPSB1c2J0b3VjaC0+cHJpdjsKKworCS8qIGdvdCB0b3VjaCBkYXRhPyAqLworCWlmICgocGt0WzBdICYgMHhlMCkgIT0gMHhlMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBzZW5kIEFDSyAqLworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPmFjaywgR0ZQX0FUT01JQyk7CisKKwlpZiAoIXVzYnRvdWNoLT50eXBlLT5tYXhfeGMpIHsKKwkJdXNidG91Y2gtPnR5cGUtPm1heF94YyA9IDIgKiBiZTE2X3RvX2NwdShwYWNrZXQtPnhfbGVuKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXModXNidG91Y2gtPmlucHV0LCBBQlNfWCwgMCwKKwkJCQkgICAgIDIgKiBiZTE2X3RvX2NwdShwYWNrZXQtPnhfbGVuKSwgMCwgMCk7CisJCXVzYnRvdWNoLT50eXBlLT5tYXhfeWMgPSAyICogYmUxNl90b19jcHUocGFja2V0LT55X2xlbik7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKHVzYnRvdWNoLT5pbnB1dCwgQUJTX1ksIDAsCisJCQkJICAgICAyICogYmUxNl90b19jcHUocGFja2V0LT55X2xlbiksIDAsIDApOworCX0KKwkvKgorCSAqIFRoZSBkZXZpY2UgcmVwb3J0cyBzdGF0ZSBvZiBJUiBzZW5zb3JzIG9uIFggYW5kIFkgYXhlcy4KKwkgKiBFYWNoIGJ5dGUgcmVwcmVzZW50cyAiZGFya25lc3MiIHBlcmNlbnRhZ2UgKDAtMTAwKSBvZiBvbmUgZWxlbWVudC4KKwkgKiAxNyIgdG91Y2hzY3JlZW4gcmVwb3J0cyBvbmx5IDY0IHggNTIgYnl0ZXMgc28gdGhlIHJlc29sdXRpb24gaXMgbG93LgorCSAqIFRoaXMgYWxzbyBtZWFucyB0aGF0IHRoZXJlJ3MgYSBsaW1pdGVkIG11bHRpLXRvdWNoIGNhcGFiaWxpdHkgYnV0CisJICogaXQncyBkaXNhYmxlZCAoYW5kIHVudGVzdGVkKSBoZXJlIGFzIHRoZXJlJ3Mgbm8gWCBkcml2ZXIgZm9yIHRoYXQuCisJICovCisJYmVnaW5feCA9IGVuZF94ID0gYmVnaW5feSA9IGVuZF95ID0gLTE7CisJZm9yICh4ID0gMDsgeCA8IGJlMTZfdG9fY3B1KHBhY2tldC0+eF9sZW4pOyB4KyspIHsKKwkJaWYgKGJlZ2luX3ggPT0gLTEgJiYgcGFja2V0LT5kYXRhW3hdID4gTkVYSU9fVEhSRVNIT0xEKSB7CisJCQliZWdpbl94ID0geDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChlbmRfeCA9PSAtMSAmJiBiZWdpbl94ICE9IC0xICYmIHBhY2tldC0+ZGF0YVt4XSA8IE5FWElPX1RIUkVTSE9MRCkgeworCQkJZW5kX3ggPSB4IC0gMTsKKwkJCWZvciAoeSA9IGJlMTZfdG9fY3B1KHBhY2tldC0+eF9sZW4pOworCQkJICAgICB5IDwgYmUxNl90b19jcHUocGFja2V0LT5kYXRhX2xlbik7IHkrKykgeworCQkJCWlmIChiZWdpbl95ID09IC0xICYmIHBhY2tldC0+ZGF0YVt5XSA+IE5FWElPX1RIUkVTSE9MRCkgeworCQkJCQliZWdpbl95ID0geSAtIGJlMTZfdG9fY3B1KHBhY2tldC0+eF9sZW4pOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKGVuZF95ID09IC0xICYmCisJCQkJICAgIGJlZ2luX3kgIT0gLTEgJiYgcGFja2V0LT5kYXRhW3ldIDwgTkVYSU9fVEhSRVNIT0xEKSB7CisJCQkJCWVuZF95ID0geSAtIDEgLSBiZTE2X3RvX2NwdShwYWNrZXQtPnhfbGVuKTsKKwkJCQkJdyA9IGVuZF94IC0gYmVnaW5feDsKKwkJCQkJaCA9IGVuZF95IC0gYmVnaW5feTsKKyNpZiAwCisJCQkJCS8qIG11bHRpLXRvdWNoICovCisJCQkJCWlucHV0X3JlcG9ydF9hYnModXNidG91Y2gtPmlucHV0LAorCQkJCQkJICAgIEFCU19NVF9UT1VDSF9NQUpPUiwgbWF4KHcsaCkpOworCQkJCQlpbnB1dF9yZXBvcnRfYWJzKHVzYnRvdWNoLT5pbnB1dCwKKwkJCQkJCSAgICBBQlNfTVRfVE9VQ0hfTUlOT1IsIG1pbih4LGgpKTsKKwkJCQkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsCisJCQkJCQkgICAgQUJTX01UX1BPU0lUSU9OX1gsIDIqYmVnaW5feCt3KTsKKwkJCQkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsCisJCQkJCQkgICAgQUJTX01UX1BPU0lUSU9OX1ksIDIqYmVnaW5feStoKTsKKwkJCQkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsCisJCQkJCQkgICAgQUJTX01UX09SSUVOVEFUSU9OLCB3ID4gaCk7CisJCQkJCWlucHV0X210X3N5bmModXNidG91Y2gtPmlucHV0KTsKKyNlbmRpZgorCQkJCQkvKiBzaW5nbGUgdG91Y2ggKi8KKwkJCQkJdXNidG91Y2gtPnggPSAyICogYmVnaW5feCArIHc7CisJCQkJCXVzYnRvdWNoLT55ID0gMiAqIGJlZ2luX3kgKyBoOworCQkJCQl1c2J0b3VjaC0+dG91Y2ggPSBwYWNrZXQtPmZsYWdzICYgMHgwMTsKKwkJCQkJYmVnaW5feSA9IGVuZF95ID0gLTE7CisJCQkJCXJldHVybiAxOworCQkJCX0KKwkJCX0KKwkJCWJlZ2luX3ggPSBlbmRfeCA9IC0xOworCQl9CisKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIHRoZSBkaWZmZXJlbnQgZGV2aWNlIGRlc2NyaXB0b3JzCiAgKi8KICNpZmRlZiBNVUxUSV9QQUNLRVQKQEAgLTgwOSw5ICsxMDQ2LDkgQEAKICNpZmRlZiBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0dFTkVSQUxfVE9VQ0gKIAlbREVWVFlQRV9HRU5FUkFMX1RPVUNIXSA9IHsKIAkJLm1pbl94YwkJPSAweDAsCi0JCS5tYXhfeGMJCT0gMHgwNTAwLAorCQkubWF4X3hjCQk9IDB4N2ZmZiwKIAkJLm1pbl95YwkJPSAweDAsCi0JCS5tYXhfeWMJCT0gMHgwNTAwLAorCQkubWF4X3ljCQk9IDB4N2ZmZiwKIAkJLnJlcHRfc2l6ZQk9IDcsCiAJCS5yZWFkX2RhdGEJPSBnZW5lcmFsX3RvdWNoX3JlYWRfZGF0YSwKIAl9LApAQCAtODczLDYgKzExMTAsMTYgQEAKIAkJLnJlYWRfZGF0YQk9IHRjNXVoX3JlYWRfZGF0YSwKIAl9LAogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX05FWElPCisJW0RFVlRZUEVfTkVYSU9dID0geworCQkucmVwdF9zaXplCT0gMTI4LAorCQkuaXJxX2Fsd2F5cwk9IHRydWUsCisJCS5yZWFkX2RhdGEJPSBuZXhpb19yZWFkX2RhdGEsCisJCS5pbml0CQk9IG5leGlvX2luaXQsCisJCS5leGl0CQk9IG5leGlvX2V4aXQsCisJfSwKKyNlbmRpZgogfTsKIAogCkBAIC05OTgsNiArMTI0NSw3IEBACiAJY2FzZSAtRUNPTk5SRVNFVDoKIAljYXNlIC1FTk9FTlQ6CiAJY2FzZSAtRVNIVVRET1dOOgorCWNhc2UgLUVQSVBFOgogCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLwogCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKIAkJICAgIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CkBAIC0xMDIxLDcgKzEyNjksNyBAQAogewogCXN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXQpOwogCi0JdXNidG91Y2gtPmlycS0+ZGV2ID0gdXNidG91Y2gtPnVkZXY7CisJdXNidG91Y2gtPmlycS0+ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldih1c2J0b3VjaC0+aW50ZXJmYWNlKTsKIAogCWlmICghdXNidG91Y2gtPnR5cGUtPmlycV9hbHdheXMpIHsKIAkJaWYgKHVzYl9zdWJtaXRfdXJiKHVzYnRvdWNoLT5pcnEsIEdGUF9LRVJORUwpKQpAQCAtMTA0OCwxMyArMTI5NiwyMyBAQAogCWtmcmVlKHVzYnRvdWNoLT5idWZmZXIpOwogfQogCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICoKK3VzYnRvdWNoX2dldF9pbnB1dF9lbmRwb2ludChzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykKKwkJaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oJmludGVyZmFjZS0+ZW5kcG9pbnRbaV0uZGVzYykpCisJCQlyZXR1cm4gJmludGVyZmFjZS0+ZW5kcG9pbnRbaV0uZGVzYzsKKworCXJldHVybiBOVUxMOworfQogCiBzdGF0aWMgaW50IHVzYnRvdWNoX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2g7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlzdHJ1Y3QgdXNidG91Y2hfZGV2aWNlX2luZm8gKnR5cGU7CkBAIC0xMDY0LDggKzEzMjIsOSBAQAogCWlmIChpZC0+ZHJpdmVyX2luZm8gPT0gREVWVFlQRV9JR05PUkUpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7Ci0JZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCWVuZHBvaW50ID0gdXNidG91Y2hfZ2V0X2lucHV0X2VuZHBvaW50KGludGYtPmN1cl9hbHRzZXR0aW5nKTsKKwlpZiAoIWVuZHBvaW50KQorCQlyZXR1cm4gLUVOWElPOwogCiAJdXNidG91Y2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNidG91Y2hfdXNiKSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CkBAIC0xMDk0LDcgKzEzNTMsNyBAQAogCQlnb3RvIG91dF9mcmVlX2J1ZmZlcnM7CiAJfQogCi0JdXNidG91Y2gtPnVkZXYgPSB1ZGV2OworCXVzYnRvdWNoLT5pbnRlcmZhY2UgPSBpbnRmOwogCXVzYnRvdWNoLT5pbnB1dCA9IGlucHV0X2RldjsKIAogCWlmICh1ZGV2LT5tYW51ZmFjdHVyZXIpCkBAIC0xMTMzLDEyICsxMzkyLDE4IEBACiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1BSRVNTVVJFLCB0eXBlLT5taW5fcHJlc3MsCiAJCSAgICAgICAgICAgICAgICAgICAgIHR5cGUtPm1heF9wcmVzcywgMCwgMCk7CiAKLQl1c2JfZmlsbF9pbnRfdXJiKHVzYnRvdWNoLT5pcnEsIHVzYnRvdWNoLT51ZGV2LAotCQkJIHVzYl9yY3ZpbnRwaXBlKHVzYnRvdWNoLT51ZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJaWYgKHVzYl9lbmRwb2ludF90eXBlKGVuZHBvaW50KSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpCisJCXVzYl9maWxsX2ludF91cmIodXNidG91Y2gtPmlycSwgdWRldiwKKwkJCSB1c2JfcmN2aW50cGlwZSh1ZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCiAJCQkgdXNidG91Y2gtPmRhdGEsIHR5cGUtPnJlcHRfc2l6ZSwKIAkJCSB1c2J0b3VjaF9pcnEsIHVzYnRvdWNoLCBlbmRwb2ludC0+YkludGVydmFsKTsKKwllbHNlCisJCXVzYl9maWxsX2J1bGtfdXJiKHVzYnRvdWNoLT5pcnEsIHVkZXYsCisJCQkgdXNiX3JjdmJ1bGtwaXBlKHVkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCSB1c2J0b3VjaC0+ZGF0YSwgdHlwZS0+cmVwdF9zaXplLAorCQkJIHVzYnRvdWNoX2lycSwgdXNidG91Y2gpOwogCi0JdXNidG91Y2gtPmlycS0+ZGV2ID0gdXNidG91Y2gtPnVkZXY7CisJdXNidG91Y2gtPmlycS0+ZGV2ID0gdWRldjsKIAl1c2J0b3VjaC0+aXJxLT50cmFuc2Zlcl9kbWEgPSB1c2J0b3VjaC0+ZGF0YV9kbWE7CiAJdXNidG91Y2gtPmlycS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CiAKQEAgLTExNDcsMjMgKzE0MTIsMzcgQEAKIAkJZXJyID0gdHlwZS0+aW5pdCh1c2J0b3VjaCk7CiAJCWlmIChlcnIpIHsKIAkJCWRiZygiJXMgLSB0eXBlLT5pbml0KCkgZmFpbGVkLCBlcnI6ICVkIiwgX19mdW5jX18sIGVycik7Ci0JCQlnb3RvIG91dF9mcmVlX2J1ZmZlcnM7CisJCQlnb3RvIG91dF9mcmVlX3VyYjsKIAkJfQogCX0KIAogCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZSh1c2J0b3VjaC0+aW5wdXQpOwogCWlmIChlcnIpIHsKIAkJZGJnKCIlcyAtIGlucHV0X3JlZ2lzdGVyX2RldmljZSBmYWlsZWQsIGVycjogJWQiLCBfX2Z1bmNfXywgZXJyKTsKLQkJZ290byBvdXRfZnJlZV9idWZmZXJzOworCQlnb3RvIG91dF9kb19leGl0OwogCX0KIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgdXNidG91Y2gpOwogCi0JaWYgKHVzYnRvdWNoLT50eXBlLT5pcnFfYWx3YXlzKQotCQl1c2Jfc3VibWl0X3VyYih1c2J0b3VjaC0+aXJxLCBHRlBfS0VSTkVMKTsKKwlpZiAodXNidG91Y2gtPnR5cGUtPmlycV9hbHdheXMpIHsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXNidG91Y2gtPmlycSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIpIHsKKwkJCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQ6ICVkIiwKKwkJCSAgICBfX2Z1bmNfXywgZXJyKTsKKwkJCWdvdG8gb3V0X3VucmVnaXN0ZXJfaW5wdXQ7CisJCX0KKwl9CiAKIAlyZXR1cm4gMDsKIAorb3V0X3VucmVnaXN0ZXJfaW5wdXQ6CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwlpbnB1dF9kZXYgPSBOVUxMOworb3V0X2RvX2V4aXQ6CisJaWYgKHR5cGUtPmV4aXQpCisJCXR5cGUtPmV4aXQodXNidG91Y2gpOworb3V0X2ZyZWVfdXJiOgorCXVzYl9mcmVlX3VyYih1c2J0b3VjaC0+aXJxKTsKIG91dF9mcmVlX2J1ZmZlcnM6CiAJdXNidG91Y2hfZnJlZV9idWZmZXJzKHVkZXYsIHVzYnRvdWNoKTsKIG91dF9mcmVlOgpAQCAtMTE4Niw2ICsxNDY1LDggQEAKIAkvKiB0aGlzIHdpbGwgc3RvcCBJTyB2aWEgY2xvc2UgKi8KIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh1c2J0b3VjaC0+aW5wdXQpOwogCXVzYl9mcmVlX3VyYih1c2J0b3VjaC0+aXJxKTsKKwlpZiAodXNidG91Y2gtPnR5cGUtPmV4aXQpCisJCXVzYnRvdWNoLT50eXBlLT5leGl0KHVzYnRvdWNoKTsKIAl1c2J0b3VjaF9mcmVlX2J1ZmZlcnMoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgdXNidG91Y2gpOwogCWtmcmVlKHVzYnRvdWNoKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4venlsb25pdGUtd205N3h4LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3p5bG9uaXRlLXdtOTd4eC5jCmluZGV4IGVjYTU0ZGIuLjA0ODg0OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4venlsb25pdGUtd205N3h4LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi96eWxvbml0ZS13bTk3eHguYwpAQCAtMTE4LDYgKzExOCw5IEBACiAJCWlmIChwcmVzc3VyZSkKIAkJCXAgPSBNT0RSOwogCisJCWRldl9kYmcod20tPmRldiwgIlJhdyBjb29yZGluYXRlczogeD0leCwgeT0leCwgcD0leFxuIiwKKwkJCXgsIHksIHApOworCiAJCS8qIGFyZSBzYW1wbGVzIHZhbGlkICovCiAJCWlmICgoeCAmIFdNOTdYWF9BRENTUkNfTUFTSykgIT0gV005N1hYX0FEQ1NFTF9YIHx8CiAJCSAgICAoeSAmIFdNOTdYWF9BRENTUkNfTUFTSykgIT0gV005N1hYX0FEQ1NFTF9ZIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3hlbi1rYmRmcm9udC5jIGIvZHJpdmVycy9pbnB1dC94ZW4ta2JkZnJvbnQuYwppbmRleCBjNzIxYzBhLi5kMzA0MzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3hlbi1rYmRmcm9udC5jCisrKyBiL2RyaXZlcnMvaW5wdXQveGVuLWtiZGZyb250LmMKQEAgLTMyMSw3ICszMjEsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCB4ZW5idXNfZGV2aWNlX2lkIHhlbmtiZF9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeGVuYnVzX2RldmljZV9pZCB4ZW5rYmRfaWRzW10gPSB7CiAJeyAidmtiZCIgfSwKIAl7ICIiIH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvS2NvbmZpZyBiL2RyaXZlcnMvaXNkbi9oaXNheC9LY29uZmlnCmluZGV4IDM0NjRlYmMuLjQ1MmZkZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9LY29uZmlnCkBAIC0xMDksNyArMTA5LDcgQEAKIAogY29uZmlnIEhJU0FYX1RFTEVTUENJCiAJYm9vbCAiVGVsZXMgUENJIgotCWRlcGVuZHMgb24gUENJICYmIFBDSV9MRUdBQ1kgJiYgKEJST0tFTiB8fCAhKFNQQVJDIHx8IFBQQyB8fCBQQVJJU0MgfHwgTTY4SyB8fCAoTUlQUyAmJiAhQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IEZSVikpCisJZGVwZW5kcyBvbiBQQ0kgJiYgKEJST0tFTiB8fCAhKFNQQVJDIHx8IFBQQyB8fCBQQVJJU0MgfHwgTTY4SyB8fCAoTUlQUyAmJiAhQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IEZSVikpCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIEhpU2F4IHN1cHBvcnQgZm9yIHRoZSBUZWxlcyBQQ0kuCiAJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5IaVNheD4gb24gaG93IHRvIGNvbmZpZ3VyZSBpdC4KQEAgLTIzNyw3ICsyMzcsNyBAQAogCiBjb25maWcgSElTQVhfTkVUSkVUCiAJYm9vbCAiTkVUamV0IGNhcmQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgUENJX0xFR0FDWSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKKwlkZXBlbmRzIG9uIFBDSSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIE5ldEpldCBmcm9tIFRyYXZlcnNlCiAJICBUZWNobm9sb2dpZXMuCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAogY29uZmlnIEhJU0FYX05FVEpFVF9VCiAJYm9vbCAiTkVUc3BpZGVyIFUgY2FyZCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lfTEVHQUNZICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQorCWRlcGVuZHMgb24gUENJICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBIaVNheCBzdXBwb3J0IGZvciB0aGUgTmV0c3BpZGVyIFUgaW50ZXJmYWNlIElTRE4gY2FyZAogCSAgZnJvbSBUcmF2ZXJzZSBUZWNobm9sb2dpZXMuCkBAIC0yODcsNyArMjg3LDcgQEAKIAogY29uZmlnIEhJU0FYX0JLTV9BNFQKIAlib29sICJUZWxla29tIEE0VCBjYXJkIgotCWRlcGVuZHMgb24gUENJICYmIFBDSV9MRUdBQ1kKKwlkZXBlbmRzIG9uIFBDSQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBIaVNheCBzdXBwb3J0IGZvciB0aGUgVGVsZWtvbSBBNFQgY2FyZC4KIApAQCAtMjk3LDcgKzI5Nyw3IEBACiAKIGNvbmZpZyBISVNBWF9TQ1RfUVVBRFJPCiAJYm9vbCAiU2NpdGVsIFF1YWRybyBjYXJkIgotCWRlcGVuZHMgb24gUENJICYmIFBDSV9MRUdBQ1kKKwlkZXBlbmRzIG9uIFBDSQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBIaVNheCBzdXBwb3J0IGZvciB0aGUgU2NpdGVsIFF1YWRybyBjYXJkLgogCkBAIC0zMTYsNyArMzE2LDcgQEAKIAogY29uZmlnIEhJU0FYX0hGQ19QQ0kKIAlib29sICJIRkMgUENJLUJ1cyBjYXJkcyIKLQlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lfTEVHQUNZICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQorCWRlcGVuZHMgb24gUENJICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBIaVNheCBzdXBwb3J0IGZvciB0aGUgSEZDLVMgUENJIDJCRFMwIGJhc2VkIGNhcmRzLgogCkBAIC0zMjUsNyArMzI1LDcgQEAKIAogY29uZmlnIEhJU0FYX1c2NjkyCiAJYm9vbCAiV2luYm9uZCBXNjY5MiBiYXNlZCBjYXJkcyIKLQlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lfTEVHQUNZCisJZGVwZW5kcyBvbiBQQ0kKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgV2luYm9uZCBXNjY5MiBiYXNlZCBQQ0kgSVNETiBjYXJkcy4KIApAQCAtMzQxLDcgKzM0MSw3IEBACiAKIGNvbmZpZyBISVNBWF9FTlRFUk5PV19QQ0kKIAlib29sICJGb3JtdWxhLW4gZW50ZXI6bm93IFBDSSBjYXJkIgotCWRlcGVuZHMgb24gSElTQVhfTkVUSkVUICYmIFBDSSAmJiBQQ0lfTEVHQUNZICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQorCWRlcGVuZHMgb24gSElTQVhfTkVUSkVUICYmIFBDSSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIEZvcm11bGEtbiBlbnRlcjpub3cgUENJCiAJICBJU0ROIGNhcmQuCkBAIC00MTIsNyArNDEyLDcgQEAKIAogY29uZmlnIEhJU0FYX0ZSSVRaX1BDSVBOUAogCXRyaXN0YXRlICJBVk0gRnJpdHohQ2FyZCBQQ0kvUENJdjIvUG5QIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgUENJX0xFR0FDWSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFBDSSAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIEFWTSBGcml0eiFDYXJkIFBDSSwKIAkgIEZyaXR6IUNhcmQgUENJIHYyIGFuZCBGcml0eiFDYXJkIFBuUC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1fcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtX3BjaS5jCmluZGV4IDdjYWJjNWEuLjE0Mjk1YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1fcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2F2bV9wY2kuYwpAQCAtODIyLDcgKzgyMiw3IEBACiAKICNlbmRpZiAvKiBfX0lTQVBOUF9fICovCiAKLSNpZm5kZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZm5kZWYgQ09ORklHX1BDSQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhdm1fcGNpX3NldHVwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKQEAgLTgzNSw3ICs4MzUsNyBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhdm1fcGNpX3NldHVwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKLQlpZiAoKGRldl9hdm0gPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BVk0sCisJaWYgKChkZXZfYXZtID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfQVZNLAogCQlQQ0lfREVWSUNFX0lEX0FWTV9BMSwgZGV2X2F2bSkpKSB7CiAKIAkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl9hdm0pKQpAQCAtODY0LDcgKzg2NCw3IEBACiAJcmV0dXJuICgxKTsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19QQ0lfTEVHQUNZICovCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiBpbnQgX19kZXZpbml0CiBzZXR1cF9hdm1fcGNpcG5wKHN0cnVjdCBJc2RuQ2FyZCAqY2FyZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTR0LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E0dC5jCmluZGV4IDljYTJlZTUuLjlmMjAwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTR0LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hNHQuYwpAQCAtMzQwLDcgKzM0MCw3IEBACiAJfSBlbHNlCiAJCXJldHVybiAoMCk7CiAKLQl3aGlsZSAoKGRldl9hNHQgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9aT1JBTiwKKwl3aGlsZSAoKGRldl9hNHQgPSBoaXNheF9maW5kX3BjaV9kZXZpY2UoUENJX1ZFTkRPUl9JRF9aT1JBTiwKIAkJUENJX0RFVklDRV9JRF9aT1JBTl8zNjEyMCwgZGV2X2E0dCkpKSB7CiAJCXJldCA9IGE0dF9wY2lfcHJvYmUoZGV2X2E0dCwgY3MsICZmb3VuZCwgJnBjaV9tZW1hZGRyKTsKIAkJaWYgKCFyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E4LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E4LmMKaW5kZXggZTFmZjQ3MS4uZTc3NTcwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hOC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTguYwpAQCAtMzAxLDcgKzMwMSw3IEBACiAJCShzdWJfdmVuZG9yX2lkICE9IFBDSV9WRU5ET1JfSURfQkVSS09NKSkpCiAJCXJldHVybiAoMCk7CiAJaWYgKGNzLT5zdWJ0eXAgPT0gU0NUXzEpIHsKLQkJd2hpbGUgKChkZXZfYTggPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9QTFgsCisJCXdoaWxlICgoZGV2X2E4ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfUExYLAogCQkJUENJX0RFVklDRV9JRF9QTFhfOTA1MCwgZGV2X2E4KSkpIHsKIAkJCQogCQkJc3ViX3ZlbmRvcl9pZCA9IGRldl9hOC0+c3Vic3lzdGVtX3ZlbmRvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZGl2YS5jCmluZGV4IDBiMGMyZTUuLjc4MGRhOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2RpdmEuYwpAQCAtMTE0OCw3ICsxMTQ4LDcgQEAKIAogI2VuZGlmCS8qIElTQVBOUCAqLwogCi0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmRldl9kaXZhIF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkZXZfZGl2YV91IF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkZXZfZGl2YTIwMSBfX2RldmluaXRkYXRhID0gTlVMTDsKQEAgLTExNTksMjEgKzExNTksMjEgQEAKIAlzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MgPSBjYXJkLT5jczsKIAogCWNzLT5zdWJ0eXAgPSAwOwotCWlmICgoZGV2X2RpdmEgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FSUNPTiwKKwlpZiAoKGRldl9kaXZhID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUlDT04sCiAJCVBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwLCBkZXZfZGl2YSkpKSB7CiAJCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXZfZGl2YSkpCiAJCQlyZXR1cm4oMCk7CiAJCWNzLT5zdWJ0eXAgPSBESVZBX1BDSTsKIAkJY3MtPmlycSA9IGRldl9kaXZhLT5pcnE7CiAJCWNzLT5ody5kaXZhLmNmZ19yZWcgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X2RpdmEsIDIpOwotCX0gZWxzZSBpZiAoKGRldl9kaXZhX3UgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FSUNPTiwKKwl9IGVsc2UgaWYgKChkZXZfZGl2YV91ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUlDT04sCiAJCVBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwX1UsIGRldl9kaXZhX3UpKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X2RpdmFfdSkpCiAJCQlyZXR1cm4oMCk7CiAJCWNzLT5zdWJ0eXAgPSBESVZBX1BDSTsKIAkJY3MtPmlycSA9IGRldl9kaXZhX3UtPmlycTsKIAkJY3MtPmh3LmRpdmEuY2ZnX3JlZyA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZfZGl2YV91LCAyKTsKLQl9IGVsc2UgaWYgKChkZXZfZGl2YTIwMSA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX0VJQ09OLAorCX0gZWxzZSBpZiAoKGRldl9kaXZhMjAxID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUlDT04sCiAJCVBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwMSwgZGV2X2RpdmEyMDEpKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X2RpdmEyMDEpKQogCQkJcmV0dXJuKDApOwpAQCAtMTE4Myw3ICsxMTgzLDcgQEAKIAkJCSh1bG9uZykgaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X2RpdmEyMDEsIDApLCA0MDk2KTsKIAkJY3MtPmh3LmRpdmEuY2ZnX3JlZyA9CiAJCQkodWxvbmcpIGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldl9kaXZhMjAxLCAxKSwgNDA5Nik7Ci0JfSBlbHNlIGlmICgoZGV2X2RpdmEyMDIgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FSUNPTiwKKwl9IGVsc2UgaWYgKChkZXZfZGl2YTIwMiA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0VJQ09OLAogCQlQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMDIsIGRldl9kaXZhMjAyKSkpIHsKIAkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl9kaXZhMjAyKSkKIAkJCXJldHVybigwKTsKQEAgLTEyMjksMTQgKzEyMjksMTQgQEAKIAlyZXR1cm4gKDEpOwkJLyogY2FyZCBmb3VuZCAqLwogfQogCi0jZWxzZQkvKiBpZiAhQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbHNlCS8qIGlmICFDT05GSUdfUENJICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNldHVwX2RpdmFfcGNpKHN0cnVjdCBJc2RuQ2FyZCAqY2FyZCkKIHsKIAlyZXR1cm4gKC0xKTsJLyogY2FyZCBub3QgZm91bmQ7IGNvbnRpbnVlIHNlYXJjaCAqLwogfQogCi0jZW5kaWYJLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbmRpZgkvKiBDT05GSUdfUENJICovCiAKIGludCBfX2RldmluaXQKIHNldHVwX2RpdmEoc3RydWN0IElzZG5DYXJkICpjYXJkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2EuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhLmMKaW5kZXggYWEyOWQxYy4uMjNjNDFmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2EuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYS5jCkBAIC0xMDI1LDcgKzEwMjUsNyBAQAogCSAgICAgICBjcy0+aXJxKTsKIH0KIAotI2lmZGVmIENPTkZJR19QQ0lfTEVHQUNZCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIAlzdHJ1Y3QgcGNpX2RldiAqZGV2X3FzMTAwMCBfX2RldmluaXRkYXRhID0gTlVMTDsKIHN0YXRpYyAJc3RydWN0IHBjaV9kZXYgKmRldl9xczMwMDAgX19kZXZpbml0ZGF0YSA9IE5VTEw7CiAKQEAgLTEwMzUsNyArMTAzNSw3IEBACiAJc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzID0gY2FyZC0+Y3M7CiAKIAljcy0+c3VidHlwID0gMDsKLQlpZiAoKGRldl9xczEwMDAgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FTFNBLAorCWlmICgoZGV2X3FzMTAwMCA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0VMU0EsCiAJCVBDSV9ERVZJQ0VfSURfRUxTQV9NSUNST0xJTkssIGRldl9xczEwMDApKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3FzMTAwMCkpCiAJCQlyZXR1cm4oMCk7CkBAIC0xMDQzLDcgKzEwNDMsNyBAQAogCQljcy0+aXJxID0gZGV2X3FzMTAwMC0+aXJxOwogCQljcy0+aHcuZWxzYS5jZmcgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X3FzMTAwMCwgMSk7CiAJCWNzLT5ody5lbHNhLmJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X3FzMTAwMCwgMyk7Ci0JfSBlbHNlIGlmICgoZGV2X3FzMzAwMCA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX0VMU0EsCisJfSBlbHNlIGlmICgoZGV2X3FzMzAwMCA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0VMU0EsCiAJCVBDSV9ERVZJQ0VfSURfRUxTQV9RUzMwMDAsIGRldl9xczMwMDApKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3FzMzAwMCkpCiAJCQlyZXR1cm4oMCk7CkBAIC0xMDkzLDcgKzEwOTMsNyBAQAogewogCXJldHVybiAoMSk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBzZXR1cF9lbHNhX2NvbW1vbihzdHJ1Y3QgSXNkbkNhcmQgKmNhcmQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZW50ZXJub3dfcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZW50ZXJub3dfcGNpLmMKaW5kZXggMzlmNDIxZS4uMjYyNjRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2VudGVybm93X3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbnRlcm5vd19wY2kuYwpAQCAtNDA2LDcgKzQwNiw3IEBACiAKIAlmb3IgKCA7OyApCiAJewotCQlpZiAoKGRldl9uZXRqZXQgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwKKwkJaWYgKChkZXZfbmV0amV0ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCiAJCQlQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzMwMCwgIGRldl9uZXRqZXQpKSkgewogCQkJcmV0ID0gZW5fcGNpX3Byb2JlKGRldl9uZXRqZXQsIGNzKTsKIAkJCWlmICghcmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2dhemVsLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZ2F6ZWwuYwppbmRleCAwZWEzYjQ2Li4zNTM5ODJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZ2F6ZWwuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZ2F6ZWwuYwpAQCAtNTMxLDcgKzUzMSw3IEBACiAJcmV0dXJuICgwKTsKIH0KIAotI2lmZGVmIENPTkZJR19QQ0lfTEVHQUNZCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkZXZfdGVsIF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdApAQCAtNTQ2LDcgKzU0Niw3IEBACiAJZm91bmQgPSAwOwogCXNlZWtjYXJkID0gUENJX0RFVklDRV9JRF9QTFhfUjY4NTsKIAlmb3IgKG5ic2VlayA9IDA7IG5ic2VlayA8IDQ7IG5ic2VlaysrKSB7Ci0JCWlmICgoZGV2X3RlbCA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1BMWCwKKwkJaWYgKChkZXZfdGVsID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfUExYLAogCQkJCQlzZWVrY2FyZCwgZGV2X3RlbCkpKSB7CiAJCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3RlbCkpCiAJCQkJcmV0dXJuIDE7CkBAIC02MjAsNyArNjIwLDcgQEAKIAogCXJldHVybiAoMCk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIGludCBfX2RldmluaXQKIHNldHVwX2dhemVsKHN0cnVjdCBJc2RuQ2FyZCAqY2FyZCkKQEAgLTY0MCw3ICs2NDAsNyBAQAogCQkJcmV0dXJuICgwKTsKIAl9IGVsc2UgewogCi0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZmRlZiBDT05GSUdfUENJCiAJCWlmIChzZXR1cF9nYXplbHBjaShjcykpCiAJCQlyZXR1cm4gKDApOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCmluZGV4IDEwOTE0NzMuLjkxN2NjODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwpAQCAtMTY1OCw3ICsxNjU4LDcgQEAKIAogCWkgPSAwOwogCXdoaWxlIChpZF9saXN0W2ldLnZlbmRvcl9pZCkgewotCQl0bXBfaGZjcGNpID0gcGNpX2ZpbmRfZGV2aWNlKGlkX2xpc3RbaV0udmVuZG9yX2lkLAorCQl0bXBfaGZjcGNpID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKGlkX2xpc3RbaV0udmVuZG9yX2lkLAogCQkJCQkgICAgIGlkX2xpc3RbaV0uZGV2aWNlX2lkLAogCQkJCQkgICAgIGRldl9oZmNwY2kpOwogCQlpKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCmluZGV4IDA2ODVjMTkuLjgzMmE4NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCkBAIC0xMzIzLDMgKzEzMjMsMjYgQEAKIGNoYXIgKkhpU2F4X2dldHJldihjb25zdCBjaGFyICpyZXZpc2lvbik7CiBpbnQgVGVpTmV3KHZvaWQpOwogdm9pZCBUZWlGcmVlKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1BDSQorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKy8qIGFkYXB0YXRpb24gd3JhcHBlciBmb3Igb2xkIHVzYWdlCisgKiBXQVJOSU5HISBUaGlzIGlzIHVuZml0IGZvciB1c2UgaW4gYSBQQ0kgaG90cGx1ZyBlbnZpcm9ubWVudCwKKyAqIGFzIHRoZSByZXR1cm5lZCBQQ0kgZGV2aWNlIGNhbiBkaXNhcHBlYXIgYXQgYW55IG1vbWVudCBpbiB0aW1lLgorICogQ2FsbGVycyBzaG91bGQgYmUgY29udmVydGVkIHRvIHVzZSBwY2lfZ2V0X2RldmljZSgpIGluc3RlYWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKmhpc2F4X2ZpbmRfcGNpX2RldmljZSh1bnNpZ25lZCBpbnQgdmVuZG9yLAorCQkJCQkJICAgIHVuc2lnbmVkIGludCBkZXZpY2UsCisJCQkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmZyb20pCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwlwY2lfZGV2X2dldChmcm9tKTsKKwlwZGV2ID0gcGNpX2dldF9zdWJzeXModmVuZG9yLCBkZXZpY2UsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGZyb20pOworCXBjaV9kZXZfcHV0KHBkZXYpOworCXJldHVybiBwZGV2OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9uaWNjeS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMKaW5kZXggZWYwMDYzMy4uY2NhYTZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMKQEAgLTI5NywxMiArMjk3LDEyIEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZmRlZiBDT05GSUdfUENJCiAJCXN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbmljY3lfZGV2IF9fZGV2aW5pdGRhdGE7CiAKIAkJdV9pbnQgcGNpX2lvYWRkcjsKIAkJY3MtPnN1YnR5cCA9IDA7Ci0JCWlmICgobmljY3lfZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfU0FUU0FHRU0sCisJCWlmICgobmljY3lfZGV2ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfU0FUU0FHRU0sCiAJCQkJCQkgUENJX0RFVklDRV9JRF9TQVRTQUdFTV9OSUNDWSwKIAkJCQkJCSBuaWNjeV9kZXYpKSkgewogCQkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKG5pY2N5X2RldikpCkBAIC0zNTQsNyArMzU0LDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTmljY3k6IGlvMCAwIGFuZCBOT19QQ0lfQklPU1xuIik7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5pY2N5OiB1bmFibGUgdG8gY29uZmlnIE5JQ0NZIFBDSVxuIik7CiAJCXJldHVybiAwOwotI2VuZGlmCQkJCS8qIENPTkZJR19QQ0lfTEVHQUNZICovCisjZW5kaWYJCQkJLyogQ09ORklHX1BDSSAqLwogCX0KIAlwcmludGsoS0VSTl9JTkZPICJIaVNheDogTklDQ1kgJXMgY29uZmlnIGlycTolZCBkYXRhOjB4JVggYWxlOjB4JVhcbiIsCiAJCShjcy0+c3VidHlwID09IDEpID8gIlBuUCIgOiAiUENJIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual9zLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfcy5jCmluZGV4IDhkMzZjY2MuLjIzNDRlN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual9zLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3MuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAKIAlmb3IgKCA7OyApCiAJewotCQlpZiAoKGRldl9uZXRqZXQgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwKKwkJaWYgKChkZXZfbmV0amV0ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCiAJCQlQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzMwMCwgIGRldl9uZXRqZXQpKSkgewogCQkJcmV0ID0gbmpzX3BjaV9wcm9iZShkZXZfbmV0amV0LCBjcyk7CiAJCQlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual91LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfdS5jCmluZGV4IGQzMDZjOTQuLjA5NWU5NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual91LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3UuYwpAQCAtMjQwLDcgKzI0MCw3IEBACiAKIAlmb3IgKCA7OyApCiAJewotCQlpZiAoKGRldl9uZXRqZXQgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwKKwkJaWYgKChkZXZfbmV0amV0ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCiAJCQlQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzMwMCwgIGRldl9uZXRqZXQpKSkgewogCQkJcmV0ID0gbmp1X3BjaV9wcm9iZShkZXZfbmV0amV0LCBjcyk7CiAJCQlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYwppbmRleCA1NTY5YTUyLi42OWRmYzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jCkBAIC01OTgsNyArNTk4LDcgQEAKIH0KICNlbmRpZiAvKiBfX0lTQVBOUF9fICovCiAKLSNpZmRlZiBDT05GSUdfUENJX0xFR0FDWQorI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZGV2X3NlZGwgX19kZXZpbml0ZGF0YSA9IE5VTEw7CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CkBAIC02MDcsNyArNjA3LDcgQEAKIAlzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MgPSBjYXJkLT5jczsKIAl1MTYgc3ViX3ZlbmRvcl9pZCwgc3ViX2lkOwogCi0JaWYgKChkZXZfc2VkbCA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1RJR0VSSkVULAorCWlmICgoZGV2X3NlZGwgPSBoaXNheF9maW5kX3BjaV9kZXZpY2UoUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwKIAkJCVBDSV9ERVZJQ0VfSURfVElHRVJKRVRfMTAwLCBkZXZfc2VkbCkpKSB7CiAJCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXZfc2VkbCkpCiAJCQlyZXR1cm4oMCk7CkBAIC02NzMsNyArNjczLDcgQEAKIAlyZXR1cm4gKDEpOwogfQogCi0jZW5kaWYgLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIGludCBfX2RldmluaXQKIHNldHVwX3NlZGxiYXVlcihzdHJ1Y3QgSXNkbkNhcmQgKmNhcmQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNwY2kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc3BjaS5jCmluZGV4IDI4YjA4ZGUuLmI4NWNlYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc3BjaS5jCkBAIC0zMDAsNyArMzAwLDcgQEAKIAlpZiAoY3MtPnR5cCAhPSBJU0ROX0NUWVBFX1RFTEVTUENJKQogCQlyZXR1cm4gKDApOwogCi0JaWYgKChkZXZfdGVsID0gcGNpX2ZpbmRfZGV2aWNlIChQQ0lfVkVORE9SX0lEX1pPUkFOLCBQQ0lfREVWSUNFX0lEX1pPUkFOXzM2MTIwLCBkZXZfdGVsKSkpIHsKKwlpZiAoKGRldl90ZWwgPSBoaXNheF9maW5kX3BjaV9kZXZpY2UgKFBDSV9WRU5ET1JfSURfWk9SQU4sIFBDSV9ERVZJQ0VfSURfWk9SQU5fMzYxMjAsIGRldl90ZWwpKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3RlbCkpCiAJCQlyZXR1cm4oMCk7CiAJCWNzLT5pcnEgPSBkZXZfdGVsLT5pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdzY2OTIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCmluZGV4IGM0ZDg2MmMuLjlkNmU4NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogCQlyZXR1cm4gKDApOwogCiAJd2hpbGUgKGlkX2xpc3RbaWRfaWR4XS52ZW5kb3JfaWQpIHsKLQkJZGV2X3c2NjkyID0gcGNpX2ZpbmRfZGV2aWNlKGlkX2xpc3RbaWRfaWR4XS52ZW5kb3JfaWQsCisJCWRldl93NjY5MiA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShpZF9saXN0W2lkX2lkeF0udmVuZG9yX2lkLAogCQkJCQkgICAgaWRfbGlzdFtpZF9pZHhdLmRldmljZV9pZCwKIAkJCQkJICAgIGRldl93NjY5Mik7CiAJCWlmIChkZXZfdzY2OTIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL0tjb25maWcgYi9kcml2ZXJzL21hY2ludG9zaC9LY29uZmlnCmluZGV4IDNkOTA2ODMuLmZkODViZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL0tjb25maWcKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvS2NvbmZpZwpAQCAtMTcxLDggKzE3MSw4IEBACiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgTUFDX0VNVU1PVVNFQlROCi0JYm9vbCAiU3VwcG9ydCBmb3IgbW91c2UgYnV0dG9uIDIrMyBlbXVsYXRpb24iCi0Jc2VsZWN0IElOUFVUCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIG1vdXNlIGJ1dHRvbiAyKzMgZW11bGF0aW9uIgorCWRlcGVuZHMgb24gU1lTQ1RMICYmIElOUFVUCiAJaGVscAogCSAgVGhpcyBwcm92aWRlcyBnZW5lcmljIHN1cHBvcnQgZm9yIGVtdWxhdGluZyB0aGUgMm5kIGFuZCAzcmQgbW91c2UKIAkgIGJ1dHRvbiB3aXRoIGtleXByZXNzZXMuICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIGVtdWxhdGlvbiBpcyBzdGlsbApAQCAtMTg0LDYgKzE4NCw5IEBACiAKIAkgIElmIHlvdSBoYXZlIGFuIEFwcGxlIG1hY2hpbmUgd2l0aCBhIDEtYnV0dG9uIG1vdXNlLCBzYXkgWSBoZXJlLgogCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtYWNfaGlkLgorCiBjb25maWcgVEhFUk1fV0lORFRVTk5FTAogCXRyaXN0YXRlICJTdXBwb3J0IGZvciB0aGVybWFsIG1hbmFnZW1lbnQgb24gV2luZHR1bm5lbCBHNHMiCiAJZGVwZW5kcyBvbiBJMkMgJiYgSTJDX1BPV0VSTUFDICYmIFBQQ19QTUFDICYmICFQUENfUE1BQzY0CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9hZGIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jCmluZGV4IDIzNzQxY2VjLi4xYzRlZTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9hZGIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9hZGIuYwpAQCAtMzE3LDEzICszMTcsMTUgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCWlmICgoYWRiX2NvbnRyb2xsZXIgPT0gTlVMTCkgfHwgYWRiX2NvbnRyb2xsZXItPmluaXQoKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nOiBubyBBREIgaW50ZXJmYWNlIGRldGVjdGVkXG4iKTsKKwlpZiAoYWRiX2NvbnRyb2xsZXIgIT0gTlVMTCAmJiBhZGJfY29udHJvbGxlci0+aW5pdCAmJgorCSAgICBhZGJfY29udHJvbGxlci0+aW5pdCgpKQogCQlhZGJfY29udHJvbGxlciA9IE5VTEw7CisJaWYgKGFkYl9jb250cm9sbGVyID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogbm8gQURCIGludGVyZmFjZSBkZXRlY3RlZFxuIik7CiAJfSBlbHNlIHsKICNpZmRlZiBDT05GSUdfUFBDCi0JCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpIHx8Ci0JCQltYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpKQorCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFBvd2VyQm9vazE5OTgiKSB8fAorCQkJb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkKIAkJCXNsZWVweV90cmFja3BhZCA9IDE7CiAjZW5kaWYgLyogQ09ORklHX1BQQyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9tYWNfaGlkLmMgYi9kcml2ZXJzL21hY2ludG9zaC9tYWNfaGlkLmMKaW5kZXggN2I0ZWY1Yi4uZTk0M2QyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvbWFjX2hpZC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL21hY19oaWQuYwpAQCAtMTMsMTcgKzEzLDE5NyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2JkX2tlcm4uaD4KIAorTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgc3RydWN0IGlucHV0X2RldiAqZW11bW91c2VidG47Ci1zdGF0aWMgaW50IGVtdW1vdXNlYnRuX2lucHV0X3JlZ2lzdGVyKHZvaWQpOwogc3RhdGljIGludCBtb3VzZV9lbXVsYXRlX2J1dHRvbnM7CiBzdGF0aWMgaW50IG1vdXNlX2J1dHRvbjJfa2V5Y29kZSA9IEtFWV9SSUdIVENUUkw7CS8qIHJpZ2h0IGNvbnRyb2wga2V5ICovCiBzdGF0aWMgaW50IG1vdXNlX2J1dHRvbjNfa2V5Y29kZSA9IEtFWV9SSUdIVEFMVDsJLyogcmlnaHQgb3B0aW9uIGtleSAqLwotc3RhdGljIGludCBtb3VzZV9sYXN0X2tleWNvZGU7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TWVNDVEwpCitzdGF0aWMgc3RydWN0IGlucHV0X2RldiAqbWFjX2hpZF9lbXVtb3VzZV9kZXY7CisKK3N0YXRpYyBpbnQgbWFjX2hpZF9jcmVhdGVfZW11bW91c2Uodm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG1hY19oaWRfZW11bW91c2VfZGV2X2V2ZW50X2NsYXNzOworCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbWFjX2hpZF9lbXVtb3VzZV9kZXZfbXV0ZXhfY2xhc3M7CisJaW50IGVycjsKKworCW1hY19oaWRfZW11bW91c2VfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFtYWNfaGlkX2VtdW1vdXNlX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsb2NrZGVwX3NldF9jbGFzcygmbWFjX2hpZF9lbXVtb3VzZV9kZXYtPmV2ZW50X2xvY2ssCisJCQkgICZtYWNfaGlkX2VtdW1vdXNlX2Rldl9ldmVudF9jbGFzcyk7CisJbG9ja2RlcF9zZXRfY2xhc3MoJm1hY19oaWRfZW11bW91c2VfZGV2LT5tdXRleCwKKwkJCSAgJm1hY19oaWRfZW11bW91c2VfZGV2X211dGV4X2NsYXNzKTsKKworCW1hY19oaWRfZW11bW91c2VfZGV2LT5uYW1lID0gIk1hY2ludG9zaCBtb3VzZSBidXR0b24gZW11bGF0aW9uIjsKKwltYWNfaGlkX2VtdW1vdXNlX2Rldi0+aWQuYnVzdHlwZSA9IEJVU19BREI7CisJbWFjX2hpZF9lbXVtb3VzZV9kZXYtPmlkLnZlbmRvciA9IDB4MDAwMTsKKwltYWNfaGlkX2VtdW1vdXNlX2Rldi0+aWQucHJvZHVjdCA9IDB4MDAwMTsKKwltYWNfaGlkX2VtdW1vdXNlX2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKKworCW1hY19oaWRfZW11bW91c2VfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRUwpOworCW1hY19oaWRfZW11bW91c2VfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX01PVVNFKV0gPQorCQlCSVRfTUFTSyhCVE5fTEVGVCkgfCBCSVRfTUFTSyhCVE5fTUlERExFKSB8IEJJVF9NQVNLKEJUTl9SSUdIVCk7CisJbWFjX2hpZF9lbXVtb3VzZV9kZXYtPnJlbGJpdFswXSA9IEJJVF9NQVNLKFJFTF9YKSB8IEJJVF9NQVNLKFJFTF9ZKTsKKworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShtYWNfaGlkX2VtdW1vdXNlX2Rldik7CisJaWYgKGVycikgeworCQlpbnB1dF9mcmVlX2RldmljZShtYWNfaGlkX2VtdW1vdXNlX2Rldik7CisJCW1hY19oaWRfZW11bW91c2VfZGV2ID0gTlVMTDsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWFjX2hpZF9kZXN0cm95X2VtdW1vdXNlKHZvaWQpCit7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UobWFjX2hpZF9lbXVtb3VzZV9kZXYpOworCW1hY19oaWRfZW11bW91c2VfZGV2ID0gTlVMTDsKK30KKworc3RhdGljIGJvb2wgbWFjX2hpZF9lbXVtb3VzZV9maWx0ZXIoc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsCisJCQkJICAgIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgYnRuOworCisJaWYgKHR5cGUgIT0gRVZfS0VZKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoY29kZSA9PSBtb3VzZV9idXR0b24yX2tleWNvZGUpCisJCWJ0biA9IEJUTl9NSURETEU7CisJZWxzZSBpZiAoY29kZSA9PSBtb3VzZV9idXR0b24zX2tleWNvZGUpCisJCWJ0biA9IEJUTl9SSUdIVDsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKKworCWlucHV0X3JlcG9ydF9rZXkobWFjX2hpZF9lbXVtb3VzZV9kZXYsIGJ0biwgdmFsdWUpOworCWlucHV0X3N5bmMobWFjX2hpZF9lbXVtb3VzZV9kZXYpOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgbWFjX2hpZF9lbXVtb3VzZV9jb25uZWN0KHN0cnVjdCBpbnB1dF9oYW5kbGVyICpoYW5kbGVyLAorCQkJCSAgICBzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZTsKKwlpbnQgZXJyb3I7CisKKwkvKiBEb24ndCBiaW5kIHRvIG91cnNlbHZlcyAqLworCWlmIChkZXYgPT0gbWFjX2hpZF9lbXVtb3VzZV9kZXYpCisJCXJldHVybiAtRU5PREVWOworCisJaGFuZGxlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlucHV0X2hhbmRsZSksIEdGUF9LRVJORUwpOworCWlmICghaGFuZGxlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhhbmRsZS0+ZGV2ID0gZGV2OworCWhhbmRsZS0+aGFuZGxlciA9IGhhbmRsZXI7CisJaGFuZGxlLT5uYW1lID0gIm1hYy1idXR0b24tZW11bCI7CisKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2hhbmRsZShoYW5kbGUpOworCWlmIChlcnJvcikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJtYWNfaGlkOiBGYWlsZWQgdG8gcmVnaXN0ZXIgYnV0dG9uIGVtdWxhdGlvbiBoYW5kbGUsICIKKwkJCSJlcnJvciAlZFxuIiwgZXJyb3IpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWVycm9yID0gaW5wdXRfb3Blbl9kZXZpY2UoaGFuZGxlKTsKKwlpZiAoZXJyb3IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkibWFjX2hpZDogRmFpbGVkIHRvIG9wZW4gaW5wdXQgZGV2aWNlLCBlcnJvciAlZFxuIiwKKwkJCWVycm9yKTsKKwkJZ290byBlcnJfdW5yZWdpc3RlcjsKKwl9CisKKwlyZXR1cm4gMDsKKworIGVycl91bnJlZ2lzdGVyOgorCWlucHV0X3VucmVnaXN0ZXJfaGFuZGxlKGhhbmRsZSk7CisgZXJyX2ZyZWU6CisJa2ZyZWUoaGFuZGxlKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIG1hY19oaWRfZW11bW91c2VfZGlzY29ubmVjdChzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGUpCit7CisJaW5wdXRfY2xvc2VfZGV2aWNlKGhhbmRsZSk7CisJaW5wdXRfdW5yZWdpc3Rlcl9oYW5kbGUoaGFuZGxlKTsKKwlrZnJlZShoYW5kbGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlucHV0X2RldmljZV9pZCBtYWNfaGlkX2VtdW1vdXNlX2lkc1tdID0geworCXsKKwkJLmZsYWdzID0gSU5QVVRfREVWSUNFX0lEX01BVENIX0VWQklULAorCQkuZXZiaXQgPSB7IEJJVF9NQVNLKEVWX0tFWSkgfSwKKwl9LAorCXsgfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaW5wdXQsIG1hY19oaWRfZW11bW91c2VfaWRzKTsKKworc3RhdGljIHN0cnVjdCBpbnB1dF9oYW5kbGVyIG1hY19oaWRfZW11bW91c2VfaGFuZGxlciA9IHsKKwkuZmlsdGVyCQk9IG1hY19oaWRfZW11bW91c2VfZmlsdGVyLAorCS5jb25uZWN0CT0gbWFjX2hpZF9lbXVtb3VzZV9jb25uZWN0LAorCS5kaXNjb25uZWN0CT0gbWFjX2hpZF9lbXVtb3VzZV9kaXNjb25uZWN0LAorCS5uYW1lCQk9ICJtYWMtYnV0dG9uLWVtdWwiLAorCS5pZF90YWJsZQk9IG1hY19oaWRfZW11bW91c2VfaWRzLAorfTsKKworc3RhdGljIGludCBtYWNfaGlkX3N0YXJ0X2VtdWxhdGlvbih2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBtYWNfaGlkX2NyZWF0ZV9lbXVtb3VzZSgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9oYW5kbGVyKCZtYWNfaGlkX2VtdW1vdXNlX2hhbmRsZXIpOworCWlmIChlcnIpIHsKKwkJbWFjX2hpZF9kZXN0cm95X2VtdW1vdXNlKCk7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1hY19oaWRfc3RvcF9lbXVsYXRpb24odm9pZCkKK3sKKwlpbnB1dF91bnJlZ2lzdGVyX2hhbmRsZXIoJm1hY19oaWRfZW11bW91c2VfaGFuZGxlcik7CisJbWFjX2hpZF9kZXN0cm95X2VtdW1vdXNlKCk7Cit9CisKK3N0YXRpYyBpbnQgbWFjX2hpZF90b2dnbGVfZW11bW91c2UoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAorCQkJCSAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwKKwkJCQkgICBsb2ZmX3QgKnBwb3MpCit7CisJaW50ICp2YWxwID0gdGFibGUtPmRhdGE7CisJaW50IG9sZF92YWwgPSAqdmFscDsKKwlpbnQgcmM7CisKKwlyYyA9IHByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOworCisJaWYgKHJjID09IDAgJiYgd3JpdGUgJiYgKnZhbHAgIT0gb2xkX3ZhbCkgeworCQlpZiAoKnZhbHAgPT0gMSkKKwkJCXJjID0gbWFjX2hpZF9zdGFydF9lbXVsYXRpb24oKTsKKwkJZWxzZSBpZiAoKnZhbHAgPT0gMCkKKwkJCW1hY19oaWRfc3RvcF9lbXVsYXRpb24oKTsKKwkJZWxzZQorCQkJcmMgPSAtRUlOVkFMOworCX0KKworCS8qIFJlc3RvcmUgdGhlIG9sZCB2YWx1ZSBpbiBjYXNlIG9mIGVycm9yICovCisJaWYgKHJjKQorCQkqdmFscCA9IG9sZF92YWw7CisKKwlyZXR1cm4gcmM7Cit9CisKIC8qIGZpbGUocykgaW4gL3Byb2Mvc3lzL2Rldi9tYWNfaGlkICovCiBzdGF0aWMgY3RsX3RhYmxlIG1hY19oaWRfZmlsZXNbXSA9IHsKIAl7CkBAIC0zMSw3ICsyMTEsNyBAQAogCQkuZGF0YQkJPSAmbW91c2VfZW11bGF0ZV9idXR0b25zLAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKKwkJLnByb2NfaGFuZGxlcgk9IG1hY19oaWRfdG9nZ2xlX2VtdW1vdXNlLAogCX0sCiAJewogCQkucHJvY25hbWUJPSAibW91c2VfYnV0dG9uMl9rZXljb2RlIiwKQEAgLTc0LDc1ICsyNTQsMjEgQEAKIAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICptYWNfaGlkX3N5c2N0bF9oZWFkZXI7CiAKLSNlbmRpZiAvKiBlbmRpZiBDT05GSUdfU1lTQ1RMICovCi0KLWludCBtYWNfaGlkX21vdXNlX2VtdWxhdGVfYnV0dG9ucyhpbnQgY2FsbGVyLCB1bnNpZ25lZCBpbnQga2V5Y29kZSwgaW50IGRvd24pCi17Ci0Jc3dpdGNoIChjYWxsZXIpIHsKLQljYXNlIDE6Ci0JCS8qIENhbGxlZCBmcm9tIGtleWJvYXJkLmMgKi8KLQkJaWYgKG1vdXNlX2VtdWxhdGVfYnV0dG9ucwotCQkgICAgJiYgKGtleWNvZGUgPT0gbW91c2VfYnV0dG9uMl9rZXljb2RlCi0JCQl8fCBrZXljb2RlID09IG1vdXNlX2J1dHRvbjNfa2V5Y29kZSkpIHsKLQkJCWlmIChtb3VzZV9lbXVsYXRlX2J1dHRvbnMgPT0gMSkgewotCQkJCWlucHV0X3JlcG9ydF9rZXkoZW11bW91c2VidG4sCi0JCQkJCQkga2V5Y29kZSA9PSBtb3VzZV9idXR0b24yX2tleWNvZGUgPyBCVE5fTUlERExFIDogQlROX1JJR0hULAotCQkJCQkJIGRvd24pOwotCQkJCWlucHV0X3N5bmMoZW11bW91c2VidG4pOwotCQkJCXJldHVybiAxOwotCQkJfQotCQkJbW91c2VfbGFzdF9rZXljb2RlID0gZG93biA/IGtleWNvZGUgOiAwOwotCQl9Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBlbXVtb3VzZWJ0bl9ldmVudF9jbGFzczsKLXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgZW11bW91c2VidG5fbXV0ZXhfY2xhc3M7Ci0KLXN0YXRpYyBpbnQgZW11bW91c2VidG5faW5wdXRfcmVnaXN0ZXIodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JZW11bW91c2VidG4gPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWVtdW1vdXNlYnRuKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWxvY2tkZXBfc2V0X2NsYXNzKCZlbXVtb3VzZWJ0bi0+ZXZlbnRfbG9jaywgJmVtdW1vdXNlYnRuX2V2ZW50X2NsYXNzKTsKLQlsb2NrZGVwX3NldF9jbGFzcygmZW11bW91c2VidG4tPm11dGV4LCAmZW11bW91c2VidG5fbXV0ZXhfY2xhc3MpOwotCi0JZW11bW91c2VidG4tPm5hbWUgPSAiTWFjaW50b3NoIG1vdXNlIGJ1dHRvbiBlbXVsYXRpb24iOwotCWVtdW1vdXNlYnRuLT5pZC5idXN0eXBlID0gQlVTX0FEQjsKLQllbXVtb3VzZWJ0bi0+aWQudmVuZG9yID0gMHgwMDAxOwotCWVtdW1vdXNlYnRuLT5pZC5wcm9kdWN0ID0gMHgwMDAxOwotCWVtdW1vdXNlYnRuLT5pZC52ZXJzaW9uID0gMHgwMTAwOwotCi0JZW11bW91c2VidG4tPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFTCk7Ci0JZW11bW91c2VidG4tPmtleWJpdFtCSVRfV09SRChCVE5fTU9VU0UpXSA9IEJJVF9NQVNLKEJUTl9MRUZUKSB8Ci0JCUJJVF9NQVNLKEJUTl9NSURETEUpIHwgQklUX01BU0soQlROX1JJR0hUKTsKLQllbXVtb3VzZWJ0bi0+cmVsYml0WzBdID0gQklUX01BU0soUkVMX1gpIHwgQklUX01BU0soUkVMX1kpOwotCi0JcmV0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGVtdW1vdXNlYnRuKTsKLQlpZiAocmV0KQotCQlpbnB1dF9mcmVlX2RldmljZShlbXVtb3VzZWJ0bik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBtYWNfaGlkX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyOwotCi0JZXJyID0gZW11bW91c2VidG5faW5wdXRfcmVnaXN0ZXIoKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0jaWYgZGVmaW5lZChDT05GSUdfU1lTQ1RMKQogCW1hY19oaWRfc3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShtYWNfaGlkX3Jvb3RfZGlyKTsKLSNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCisJaWYgKCFtYWNfaGlkX3N5c2N0bF9oZWFkZXIpCisJCXJldHVybiAtRU5PTUVNOwogCiAJcmV0dXJuIDA7CiB9Cittb2R1bGVfaW5pdChtYWNfaGlkX2luaXQpOwogCi1kZXZpY2VfaW5pdGNhbGwobWFjX2hpZF9pbml0KTsKK3N0YXRpYyB2b2lkIF9fZXhpdCBtYWNfaGlkX2V4aXQodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShtYWNfaGlkX3N5c2N0bF9oZWFkZXIpOworCisJaWYgKG1vdXNlX2VtdWxhdGVfYnV0dG9ucykKKwkJbWFjX2hpZF9zdG9wX2VtdWxhdGlvbigpOworfQorbW9kdWxlX2V4aXQobWFjX2hpZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYwppbmRleCA1ZmY0N2JhLi5jNDJlZWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCkBAIC05MCw2ICs5MCw4IEBACiAKIHN0YXRpYyB2b2lkIHdyaXRlX2JvdGhfZmFuX3NwZWVkKHN0cnVjdCB0aGVybW9zdGF0ICp0aCwgaW50IHNwZWVkKTsKIHN0YXRpYyB2b2lkIHdyaXRlX2Zhbl9zcGVlZChzdHJ1Y3QgdGhlcm1vc3RhdCAqdGgsIGludCBzcGVlZCwgaW50IGZhbik7CitzdGF0aWMgdm9pZCB0aGVybW9zdGF0X2NyZWF0ZV9maWxlcyh2b2lkKTsKK3N0YXRpYyB2b2lkIHRoZXJtb3N0YXRfcmVtb3ZlX2ZpbGVzKHZvaWQpOwogCiBzdGF0aWMgaW50CiB3cml0ZV9yZWcoc3RydWN0IHRoZXJtb3N0YXQqIHRoLCBpbnQgcmVnLCB1OCBkYXRhKQpAQCAtMTYxLDYgKzE2Myw4IEBACiAJc3RydWN0IHRoZXJtb3N0YXQgKnRoID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IGk7CiAJCisJdGhlcm1vc3RhdF9yZW1vdmVfZmlsZXMoKTsKKwogCWlmICh0aHJlYWRfdGhlcm0gIT0gTlVMTCkgewogCQlrdGhyZWFkX3N0b3AodGhyZWFkX3RoZXJtKTsKIAl9CkBAIC0zMTIsNyArMzE2LDcgQEAKIAogCQkJaWYgKHZlcmJvc2UpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgImFkdDc0Nng6IFNldHRpbmcgZmFucyBzcGVlZCB0byAlZCAiCi0JCQkJCQkgIihsaW1pdCBleGNlZWRlZCBieSAlZCBvbiAlcykgXG4iLAorCQkJCQkJICIobGltaXQgZXhjZWVkZWQgYnkgJWQgb24gJXMpXG4iLAogCQkJCQkJbmV3X3NwZWVkLCB2YXIsCiAJCQkJCQlzZW5zb3JfbG9jYXRpb25bZmFuX251bWJlcisxXSk7CiAJCQl3cml0ZV9ib3RoX2Zhbl9zcGVlZCh0aCwgbmV3X3NwZWVkKTsKQEAgLTQ0OSw2ICs0NTMsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwl0aGVybW9zdGF0X2NyZWF0ZV9maWxlcygpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU2Niw3ICs1NzIsNiBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSogbnA7CiAJY29uc3QgdTMyICpwcm9wOwogCWludCBpID0gMCwgb2Zmc2V0ID0gMDsKLQlpbnQgZXJyOwogCiAJbnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiZmFuIik7CiAJaWYgKCFucCkKQEAgLTYzMyw2ICs2MzgsMTcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisjaWZuZGVmIENPTkZJR19JMkNfUE9XRVJNQUMKKwlyZXF1ZXN0X21vZHVsZSgiaTJjLXBvd2VybWFjIik7CisjZW5kaWYKKworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdGhlcm1vc3RhdF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCB0aGVybW9zdGF0X2NyZWF0ZV9maWxlcyh2b2lkKQoreworCWludCBlcnI7CisKIAllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yMV90ZW1wZXJhdHVyZSk7CiAJZXJyIHw9IGRldmljZV9jcmVhdGVfZmlsZSgmb2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9zZW5zb3IyX3RlbXBlcmF0dXJlKTsKIAllcnIgfD0gZGV2aWNlX2NyZWF0ZV9maWxlKCZvZl9kZXYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjFfbGltaXQpOwpAQCAtNjQ3LDE2ICs2NjMsOSBAQAogCWlmIChlcnIpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSJGYWlsZWQgdG8gY3JlYXRlIHRlbXBlcnRhdXJlIGF0dHJpYnV0ZSBmaWxlKHMpLlxuIik7Ci0KLSNpZm5kZWYgQ09ORklHX0kyQ19QT1dFUk1BQwotCXJlcXVlc3RfbW9kdWxlKCJpMmMtcG93ZXJtYWMiKTsKLSNlbmRpZgotCi0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0aGVybW9zdGF0X2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdAotdGhlcm1vc3RhdF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCB0aGVybW9zdGF0X3JlbW92ZV9maWxlcyh2b2lkKQogewogCWlmIChvZl9kZXYpIHsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZvZl9kZXYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjFfdGVtcGVyYXR1cmUpOwpAQCAtNjczLDkgKzY4MiwxNCBAQAogCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZvZl9kZXYtPmRldiwKIAkJCQkJICAgJmRldl9hdHRyX3NlbnNvcjJfZmFuX3NwZWVkKTsKIAotCQlvZl9kZXZpY2VfdW5yZWdpc3RlcihvZl9kZXYpOwogCX0KK30KKworc3RhdGljIHZvaWQgX19leGl0Cit0aGVybW9zdGF0X2V4aXQodm9pZCkKK3sKIAlpMmNfZGVsX2RyaXZlcigmdGhlcm1vc3RhdF9kcml2ZXIpOworCW9mX2RldmljZV91bnJlZ2lzdGVyKG9mX2Rldik7CiB9CiAKIG1vZHVsZV9pbml0KHRoZXJtb3N0YXRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKaW5kZXggNDU0YmM1MC4uNTczOGQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwpAQCAtMTg5OSw3ICsxODk5LDcgQEAKIAkgKi8KIAlpZiAocmFja21hYykKIAkJY3B1X3BpZF90eXBlID0gQ1BVX1BJRF9UWVBFX1JBQ0tNQUM7Ci0JZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpCisJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpCiAJICAgICYmIChjcHVfY291bnQgPiAxKQogCSAgICAmJiBmY3VfZmFuc1tDUFVBX1BVTVBfUlBNX0lOREVYXS5pZCAhPSBGQ1VfRkFOX0FCU0VOVF9JRAogCSAgICAmJiBmY3VfZmFuc1tDUFVCX1BVTVBfUlBNX0lOREVYXS5pZCAhPSBGQ1VfRkFOX0FCU0VOVF9JRCkgewpAQCAtMjIzNCwxMCArMjIzNCwxMCBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAKLQlyYWNrbWFjID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIik7CisJcmFja21hYyA9IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpOwogCi0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgJiYKLQkgICAgIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSAmJgorCWlmICghb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpICYmCisJICAgICFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgJiYKIAkgICAgIXJhY2ttYWMpCiAJICAgIAlyZXR1cm4gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jCmluZGV4IGJhNDhmZDcuLjdmYjhiNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3dpbmR0dW5uZWwuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV93aW5kdHVubmVsLmMKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCWluZm8gPSBvZl9nZXRfcHJvcGVydHkobnAsICJ0aGVybWFsLWluZm8iLCBOVUxMKTsKIAlvZl9ub2RlX3B1dChucCk7CiAKLQlpZiggIWluZm8gfHwgIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMzLDYiKSApCisJaWYoICFpbmZvIHx8ICFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMyw2IikgKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmKCBpbmZvLT5pZCAhPSAzICkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLWN1ZGEuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1jdWRhLmMKaW5kZXggNjJkZDFmZC4uOTcxYmM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLWN1ZGEuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtY3VkYS5jCkBAIC04OSw3ICs4OSw2IEBACiAKICNpZmRlZiBDT05GSUdfQURCCiBzdGF0aWMgaW50IGN1ZGFfcHJvYmUodm9pZCk7Ci1zdGF0aWMgaW50IGN1ZGFfaW5pdCh2b2lkKTsKIHN0YXRpYyBpbnQgY3VkYV9zZW5kX3JlcXVlc3Qoc3RydWN0IGFkYl9yZXF1ZXN0ICpyZXEsIGludCBzeW5jKTsKIHN0YXRpYyBpbnQgY3VkYV9hZGJfYXV0b3BvbGwoaW50IGRldnMpOwogc3RhdGljIGludCBjdWRhX3Jlc2V0X2FkYl9idXModm9pZCk7CkBAIC0xMDcsMTcgKzEwNiw0MiBAQAogCiAjaWZkZWYgQ09ORklHX0FEQgogc3RydWN0IGFkYl9kcml2ZXIgdmlhX2N1ZGFfZHJpdmVyID0gewotCSJDVURBIiwKLQljdWRhX3Byb2JlLAotCWN1ZGFfaW5pdCwKLQljdWRhX3NlbmRfcmVxdWVzdCwKLQljdWRhX2FkYl9hdXRvcG9sbCwKLQljdWRhX3BvbGwsCi0JY3VkYV9yZXNldF9hZGJfYnVzCisJLm5hbWUgICAgICAgICA9ICJDVURBIiwKKwkucHJvYmUgICAgICAgID0gY3VkYV9wcm9iZSwKKwkuc2VuZF9yZXF1ZXN0ID0gY3VkYV9zZW5kX3JlcXVlc3QsCisJLmF1dG9wb2xsICAgICA9IGN1ZGFfYWRiX2F1dG9wb2xsLAorCS5wb2xsICAgICAgICAgPSBjdWRhX3BvbGwsCisJLnJlc2V0X2J1cyAgICA9IGN1ZGFfcmVzZXRfYWRiX2J1cywKIH07CiAjZW5kaWYgLyogQ09ORklHX0FEQiAqLwogCi0jaWZkZWYgQ09ORklHX1BQQworI2lmZGVmIENPTkZJR19NQUMKK2ludCBfX2luaXQgZmluZF92aWFfY3VkYSh2b2lkKQoreworICAgIHN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CisgICAgaW50IGVycjsKKworICAgIGlmIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSAhPSBNQUNfQURCX0NVREEpCisJcmV0dXJuIDA7CisKKyAgICB2aWEgPSB2aWExOworICAgIGN1ZGFfc3RhdGUgPSBpZGxlOworCisgICAgZXJyID0gY3VkYV9pbml0X3ZpYSgpOworICAgIGlmIChlcnIpIHsKKwlwcmludGsoS0VSTl9FUlIgImN1ZGFfaW5pdF92aWEoKSBmYWlsZWRcbiIpOworCXZpYSA9IE5VTEw7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogZW5hYmxlIGF1dG9wb2xsICovCisgICAgY3VkYV9yZXF1ZXN0KCZyZXEsIE5VTEwsIDMsIENVREFfUEFDS0VULCBDVURBX0FVVE9QT0xMLCAxKTsKKyAgICB3aGlsZSAoIXJlcS5jb21wbGV0ZSkKKwljdWRhX3BvbGwoKTsKKworICAgIHJldHVybiAxOworfQorI2Vsc2UKIGludCBfX2luaXQgZmluZF92aWFfY3VkYSh2b2lkKQogewogICAgIHN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CkBAIC0xNzUsNyArMTk5LDcgQEAKICAgICB2aWFzID0gTlVMTDsKICAgICByZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUFBDICovCisjZW5kaWYgLyogIWRlZmluZWQgQ09ORklHX01BQyAqLwogCiBzdGF0aWMgaW50IF9faW5pdCB2aWFfY3VkYV9zdGFydCh2b2lkKQogewpAQCAtMTg0LDE0ICsyMDgsMTQgQEAKIAogI2lmZGVmIENPTkZJR19NQUMKICAgICBjdWRhX2lycSA9IElSUV9NQUNfQURCOwotI2Vsc2UgLyogQ09ORklHX01BQyAqLworI2Vsc2UKICAgICBjdWRhX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKHZpYXMsIDApOwogICAgIGlmIChjdWRhX2lycSA9PSBOT19JUlEpIHsKIAlwcmludGsoS0VSTl9FUlIgInZpYS1jdWRhOiBjYW4ndCBtYXAgaW50ZXJydXB0cyBmb3IgJXNcbiIsCiAJICAgICAgIHZpYXMtPmZ1bGxfbmFtZSk7CiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgfQotI2VuZGlmIC8qIENPTkZJR19NQUMgKi8KKyNlbmRpZgogCiAgICAgaWYgKHJlcXVlc3RfaXJxKGN1ZGFfaXJxLCBjdWRhX2ludGVycnVwdCwgMCwgIkFEQiIsIGN1ZGFfaW50ZXJydXB0KSkgewogCXByaW50ayhLRVJOX0VSUiAidmlhLWN1ZGE6IGNhbid0IHJlcXVlc3QgaXJxICVkXG4iLCBjdWRhX2lycSk7CkBAIC0yMTYsMjggKzI0MCwxMCBAQAogI2Vsc2UKICAgICBpZiAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgIT0gTUFDX0FEQl9DVURBKQogCXJldHVybiAtRU5PREVWOwotICAgIHZpYSA9IHZpYTE7CiAjZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQKLWN1ZGFfaW5pdCh2b2lkKQotewotI2lmZGVmIENPTkZJR19QUEMKICAgICBpZiAodmlhID09IE5VTEwpCiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgcmV0dXJuIDA7Ci0jZWxzZSAKLSAgICBpbnQgZXJyID0gY3VkYV9pbml0X3ZpYSgpOwotICAgIGlmIChlcnIpIHsKLQlwcmludGsoS0VSTl9FUlIgImN1ZGFfaW5pdF92aWEoKSBmYWlsZWRcbiIpOwotCXJldHVybiAtRU5PREVWOwotICAgIH0KLSAgICBvdXRfOCgmdmlhW0lFUl0sIElFUl9TRVR8U1JfSU5UKTsgLyogZW5hYmxlIGludGVycnVwdCBmcm9tIFNSICovCi0KLSAgICByZXR1cm4gdmlhX2N1ZGFfc3RhcnQoKTsKLSNlbmRpZgogfQogI2VuZGlmIC8qIENPTkZJR19BREIgKi8KIApAQCAtNDMwLDkgKzQzNiwxMSBAQAogICAgIC8qIGN1ZGFfaW50ZXJydXB0IG9ubHkgdGFrZXMgYSBub3JtYWwgbG9jaywgd2UgZGlzYWJsZQogICAgICAqIGludGVycnVwdHMgaGVyZSB0byBhdm9pZCByZS1lbnRlcmluZyBhbmQgdGh1cyBkZWFkbG9ja2luZy4KICAgICAgKi8KLSAgICBkaXNhYmxlX2lycShjdWRhX2lycSk7CisgICAgaWYgKGN1ZGFfaXJxKQorCWRpc2FibGVfaXJxKGN1ZGFfaXJxKTsKICAgICBjdWRhX2ludGVycnVwdCgwLCBOVUxMKTsKLSAgICBlbmFibGVfaXJxKGN1ZGFfaXJxKTsKKyAgICBpZiAoY3VkYV9pcnEpCisJZW5hYmxlX2lycShjdWRhX2lycSk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdApAQCAtNDQ2LDcgKzQ1NCw3IEBACiAgICAgCiAgICAgc3Bpbl9sb2NrKCZjdWRhX2xvY2spOwogCi0gICAgLyogT24gcG93ZXJtYWNzLCB0aGlzIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIFZJQSBJUlEuIEJ1dCBpdCB1c2VzCisgICAgLyogT24gcG93ZXJtYWNzLCB0aGlzIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIFZJQSBJUlEuIEJ1dCB0aGV5IHVzZQogICAgICAqIGp1c3QgdGhlIHNoaWZ0IHJlZ2lzdGVyIElSUSAtLSBvdGhlciBWSUEgaW50ZXJydXB0IHNvdXJjZXMgYXJlIGRpc2FibGVkLgogICAgICAqIE9uIG02OGsgbWFjcywgdGhlIFZJQSBJUlEgc291cmNlcyBhcmUgZGlzcGF0Y2hlZCBpbmRpdmlkdWFsbHkuIFVubGVzcwogICAgICAqIHdlIGFyZSBwb2xsaW5nLCB0aGUgc2hpZnQgcmVnaXN0ZXIgSVJRIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBjbGVhcmVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMKaW5kZXggYTM0OGJiMC4uNGYzYzQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jCkBAIC0xNTAsMTMgKzE1MCwxMyBAQAogCiAJLyogU3BlY2lhbCBjYXNlIGZvciB0aGUgb2xkIFBvd2VyQm9vayBzaW5jZSBJIGNhbid0IHRlc3Qgb24gaXQgKi8KIAlhdXRvc2F2ZSA9Ci0JCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNDAwLzI0MDAiKSB8fAotCQltYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzUwMCIpOworCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzQwMC8yNDAwIikgfHwKKwkJb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM1MDAiKTsKIAogCWlmICghYXV0b3NhdmUgJiYKIAkgICAgIXBtYWNfaGFzX2JhY2tsaWdodF90eXBlKCJwbXUiKSAmJgotCSAgICAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFBvd2VyQm9vazE5OTgiKSAmJgotCSAgICAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkKKwkgICAgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikgJiYKKwkgICAgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpCiAJCXJldHVybjsKIAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInBtdWJsIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKaW5kZXggZGIzNzljMy4uNDI3NjQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwpAQCAtNDYzLDggKzQ2Myw4IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUEMzMgotICAJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNDAwLzI0MDAiKSB8fAotICAJCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNTAwIikpIHsKKyAgCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzQwMC8yNDAwIikgfHwKKyAgCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzUwMCIpKSB7CiAJCWludCBtYiA9IHBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0dFVF9NQl9JTkZPLAogCQkJTlVMTCwgUE1BQ19NQl9JTkZPX01PREVMLCAwKTsKIAkJcG11X2JhdHRlcnlfY291bnQgPSAxOwpAQCAtNDcyLDggKzQ3Miw4IEBACiAJCQlwbXVfYmF0dGVyaWVzWzBdLmZsYWdzIHw9IFBNVV9CQVRUX1RZUEVfQ09NRVQ7CiAJCWVsc2UKIAkJCXBtdV9iYXR0ZXJpZXNbMF0uZmxhZ3MgfD0gUE1VX0JBVFRfVFlQRV9IT09QRVI7Ci0JfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpIHx8Ci0JCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpIHsKKwl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikgfHwKKwkJb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkgewogCQlwbXVfYmF0dGVyeV9jb3VudCA9IDI7CiAJCXBtdV9iYXR0ZXJpZXNbMF0uZmxhZ3MgfD0gUE1VX0JBVFRfVFlQRV9TTUFSVDsKIAkJcG11X2JhdHRlcmllc1sxXS5mbGFncyB8PSBQTVVfQkFUVF9UWVBFX1NNQVJUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY29yZS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY29yZS5jCmluZGV4IDA3NWI0ZDkuLjQzN2Y1NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2NvcmUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jb3JlLmMKQEAgLTQ2OCw5ICs0NjgsOSBAQAogCURCRygid2Y6IGNvcmUgbG9hZGVkXG4iKTsKIAogCS8qIERvbid0IHJlZ2lzdGVyIG9uIG9sZCBtYWNoaW5lcyB0aGF0IHVzZSB0aGVybV9wbTcyIGZvciBub3cgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3Zl9wbGF0Zm9ybV9kZXZpY2UpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY3B1ZnJlcV9jbGFtcC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY3B1ZnJlcV9jbGFtcC5jCmluZGV4IDkwMGFhZGUuLjFhNzdhN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2NwdWZyZXFfY2xhbXAuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jcHVmcmVxX2NsYW1wLmMKQEAgLTc2LDkgKzc2LDkgQEAKIAlzdHJ1Y3Qgd2ZfY29udHJvbCAqY2xhbXA7CiAKIAkvKiBEb24ndCByZWdpc3RlciBvbiBvbGQgbWFjaGluZXMgdGhhdCB1c2UgdGhlcm1fcG03MiBmb3Igbm93ICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJY2xhbXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2ZfY29udHJvbCksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2xtNzVfc2Vuc29yLmMKaW5kZXggZWQ2NDI2YS4uZDgyNTdkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9sbTc1X3NlbnNvci5jCkBAIC0yMzksOSArMjM5LDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IHdmX2xtNzVfc2Vuc29yX2luaXQodm9pZCkKIHsKIAkvKiBEb24ndCByZWdpc3RlciBvbiBvbGQgbWFjaGluZXMgdGhhdCB1c2UgdGhlcm1fcG03MiBmb3Igbm93ICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCiAJCXJldHVybiAtRU5PREVWOwogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmd2ZfbG03NV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMKaW5kZXggYTY3YjM0OS4uYjQ4NmViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9tYXg2NjkwX3NlbnNvci5jCkBAIC0xODgsOSArMTg4LDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IHdmX21heDY2OTBfc2Vuc29yX2luaXQodm9pZCkKIHsKIAkvKiBEb24ndCByZWdpc3RlciBvbiBvbGQgbWFjaGluZXMgdGhhdCB1c2UgdGhlcm1fcG03MiBmb3Igbm93ICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCiAJCXJldHVybiAtRU5PREVWOwogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmd2ZfbWF4NjY5MF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG0xMTIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTEyLmMKaW5kZXggNzNkNjk1ZC4uZTBlZTgwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG0xMTIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTExMi5jCkBAIC02NzYsNyArNjc2LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdTsKIAotCWlmICghbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzExLDIiKSkKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMSwyIikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogQ291bnQgdGhlIG51bWJlciBvZiBDUFUgY29yZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTIxLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTEyMS5jCmluZGV4IDY2ZWM0ZmIxLi45NDdkNGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTEyMS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTIxLmMKQEAgLTEwMDgsNyArMTAwOCw3IEBACiB7CiAJaW50IHJjID0gLUVOT0RFVjsKIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTIsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTIsMSIpKQogCQlyYyA9IHBtMTIxX2luaXRfcG0oKTsKIAogCWlmIChyYyA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMKaW5kZXggYWJiZTIwNi4uNTY1ZDViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG04MS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtODEuYwpAQCAtNzc5LDggKzc3OSw4IEBACiB7CiAJaW50IHJjID0gLUVOT0RFVjsKIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwxIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMiIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwxIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMiIpKQogCQlyYyA9IHdmX2luaXRfcG0oKTsKIAogCWlmIChyYyA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTkxLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTkxLmMKaW5kZXggNzY0YzUyNS4uYmVhOTkxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG05MS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtOTEuYwpAQCAtNzExLDcgKzcxMSw3IEBACiB7CiAJaW50IHJjID0gLUVOT0RFVjsKIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOSwxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM5LDEiKSkKIAkJcmMgPSB3Zl9pbml0X3BtKCk7CiAKIAlpZiAocmMgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NlbnNvcnMuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zZW5zb3JzLmMKaW5kZXggOWM1NjdiOS4uM2MxOTM1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NlbnNvcnMuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2Vuc29ycy5jCkBAIC0zNjMsOSArMzYzLDkgQEAKIAkgKiBJIHlldCBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIHVwIHdpdGggOCwyIGFuZCB3aWxsIGhhdmUgdG8KIAkgKiBhZGp1c3QgZm9yIGxhdGVyLCB1bmxlc3Mgd2UgY2FuIDEwMCUgdHJ1c3QgdGhlIFNEQiBwYXJ0aXRpb24uLi4KIAkgKi8KLQlpZiAoKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDEiKSB8fAotCSAgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMiIpIHx8Ci0JICAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOSwxIikpICYmCisJaWYgKChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwxIikgfHwKKwkgICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDIiKSB8fAorCSAgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzksMSIpKSAmJgogCSAgICBjcHV2Y3BfdmVyc2lvbiA+PSAyKSB7CiAJCXBvdy0+cXVhZHJhdGljID0gMTsKIAkJREJHKCJ3aW5kZmFybTogQ1BVIFBvd2VyIHVzaW5nIHF1YWRyYXRpYyB0cmFuc2Zvcm1cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1sb2ctdXNlcnNwYWNlLXRyYW5zZmVyLmMgYi9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtdHJhbnNmZXIuYwppbmRleCA1NGFiZjllLi5mMWM4Y2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtdHJhbnNmZXIuYworKysgYi9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtdHJhbnNmZXIuYwpAQCAtMTcyLDExICsxNzIsMTUgQEAKIHsKIAlpbnQgciA9IDA7CiAJc2l6ZV90IGR1bW15ID0gMDsKLQlpbnQgb3ZlcmhlYWRfc2l6ZSA9Ci0JCXNpemVvZihzdHJ1Y3QgZG1fdWxvZ19yZXF1ZXN0ICopICsgc2l6ZW9mKHN0cnVjdCBjbl9tc2cpOworCWludCBvdmVyaGVhZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBkbV91bG9nX3JlcXVlc3QpICsgc2l6ZW9mKHN0cnVjdCBjbl9tc2cpOwogCXN0cnVjdCBkbV91bG9nX3JlcXVlc3QgKnRmciA9IHByZWFsbG9jZWRfdWxvZ190ZnI7CiAJc3RydWN0IHJlY2VpdmluZ19wa2cgcGtnOwogCisJLyoKKwkgKiBHaXZlbiB0aGUgc3BhY2UgbmVlZGVkIHRvIGhvbGQgdGhlICdzdHJ1Y3QgY25fbXNnJyBhbmQKKwkgKiAnc3RydWN0IGRtX3Vsb2dfcmVxdWVzdCcgLSBkbyB3ZSBoYXZlIGVub3VnaCBwYXlsb2FkCisJICogc3BhY2UgcmVtYWluaW5nPworCSAqLwogCWlmIChkYXRhX3NpemUgPiAoRE1fVUxPR19QUkVBTExPQ0VEX1NJWkUgLSBvdmVyaGVhZF9zaXplKSkgewogCQlETUlORk8oIlNpemUgb2YgdGZyIGV4Y2VlZHMgcHJlYWxsb2NhdGVkIHNpemUiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTEsNyArMTk1LDcgQEAKIAkgKi8KIAltdXRleF9sb2NrKCZkbV91bG9nX2xvY2spOwogCi0JbWVtc2V0KHRmciwgMCwgRE1fVUxPR19QUkVBTExPQ0VEX1NJWkUgLSBvdmVyaGVhZF9zaXplKTsKKwltZW1zZXQodGZyLCAwLCBETV9VTE9HX1BSRUFMTE9DRURfU0laRSAtIHNpemVvZihzdHJ1Y3QgY25fbXNnKSk7CiAJbWVtY3B5KHRmci0+dXVpZCwgdXVpZCwgRE1fVVVJRF9MRU4pOwogCXRmci0+bHVpZCA9IGx1aWQ7CiAJdGZyLT5zZXEgPSBkbV91bG9nX3NlcSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkMS5jIGIvZHJpdmVycy9tZC9kbS1yYWlkMS5jCmluZGV4IGFkNzc5YmQuLjZjMTA0NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYworKysgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKQEAgLTcyNCw3ICs3MjQsNyBAQAogCS8qCiAJICogRGlzcGF0Y2ggaW8uCiAJICovCi0JaWYgKHVubGlrZWx5KG1zLT5sb2dfZmFpbHVyZSkpIHsKKwlpZiAodW5saWtlbHkobXMtPmxvZ19mYWlsdXJlKSAmJiBlcnJvcnNfaGFuZGxlZChtcykpIHsKIAkJc3Bpbl9sb2NrX2lycSgmbXMtPmxvY2spOwogCQliaW9fbGlzdF9tZXJnZSgmbXMtPmZhaWx1cmVzLCAmc3luYyk7CiAJCXNwaW5fdW5sb2NrX2lycSgmbXMtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yZWdpb24taGFzaC5jIGIvZHJpdmVycy9tZC9kbS1yZWdpb24taGFzaC5jCmluZGV4IDVmMTljZWIuLjE2OGJkMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcmVnaW9uLWhhc2guYworKysgYi9kcml2ZXJzL21kL2RtLXJlZ2lvbi1oYXNoLmMKQEAgLTY2MCwxMCArNjYwLDkgQEAKIAlzcGluX2xvY2tfaXJxKCZyaC0+cmVnaW9uX2xvY2spOwogCWlmIChzdWNjZXNzKQogCQlsaXN0X2FkZCgmcmVnLT5saXN0LCAmcmVnLT5yaC0+cmVjb3ZlcmVkX3JlZ2lvbnMpOwotCWVsc2UgewotCQlyZWctPnN0YXRlID0gRE1fUkhfTk9TWU5DOworCWVsc2UKIAkJbGlzdF9hZGQoJnJlZy0+bGlzdCwgJnJlZy0+cmgtPmZhaWxlZF9yZWNvdmVyZWRfcmVnaW9ucyk7Ci0JfQorCiAJc3Bpbl91bmxvY2tfaXJxKCZyaC0+cmVnaW9uX2xvY2spOwogCiAJcmgtPndha2V1cF93b3JrZXJzKHJoLT5jb250ZXh0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMgYi9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCmluZGV4IDdkMDg4NzkuLmMwOTdkOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYwpAQCAtMjU0LDcgKzI1NCw3IEBACiAJICogSXNzdWUgdGhlIHN5bmNocm9ub3VzIEkvTyBmcm9tIGEgZGlmZmVyZW50IHRocmVhZAogCSAqIHRvIGF2b2lkIGdlbmVyaWNfbWFrZV9yZXF1ZXN0IHJlY3Vyc2lvbi4KIAkgKi8KLQlJTklUX1dPUksoJnJlcS53b3JrLCBkb19tZXRhZGF0YSk7CisJSU5JVF9XT1JLX09OX1NUQUNLKCZyZXEud29yaywgZG9fbWV0YWRhdGEpOwogCXF1ZXVlX3dvcmsocHMtPm1ldGFkYXRhX3dxLCAmcmVxLndvcmspOwogCWZsdXNoX3dvcmtxdWV1ZShwcy0+bWV0YWRhdGFfd3EpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXN0cmlwZS5jIGIvZHJpdmVycy9tZC9kbS1zdHJpcGUuYwppbmRleCBlMGVmYzFhLi5iZDU4NzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXN0cmlwZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogCX0KIAogCXN0cmlwZXMgPSBzaW1wbGVfc3RydG91bChhcmd2WzBdLCAmZW5kLCAxMCk7Ci0JaWYgKCplbmQpIHsKKwlpZiAoIXN0cmlwZXMgfHwgKmVuZCkgewogCQl0aS0+ZXJyb3IgPSAiSW52YWxpZCBzdHJpcGUgY291bnQiOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXN5c2ZzLmMgYi9kcml2ZXJzL21kL2RtLXN5c2ZzLmMKaW5kZXggZjUzMzkyZC4uZjkxYjQwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zeXNmcy5jCisrKyBiL2RyaXZlcnMvbWQvZG0tc3lzZnMuYwpAQCAtODAsMjAgKzgwLDEyIEBACiB9OwogCiAvKgotICogVGhlIHN5c2ZzIHN0cnVjdHVyZSBpcyBlbWJlZGRlZCBpbiBtZCBzdHJ1Y3QsIG5vdGhpbmcgdG8gZG8gaGVyZQotICovCi1zdGF0aWMgdm9pZCBkbV9zeXNmc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQotewotfQotCi0vKgogICogZG0ga29iamVjdCBpcyBlbWJlZGRlZCBpbiBtYXBwZWRfZGV2aWNlIHN0cnVjdHVyZQogICogbm8gbmVlZCB0byBkZWZpbmUgcmVsZWFzZSBmdW5jdGlvbiBoZXJlCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGRtX2t0eXBlID0gewogCS5zeXNmc19vcHMJPSAmZG1fc3lzZnNfb3BzLAogCS5kZWZhdWx0X2F0dHJzCT0gZG1fYXR0cnMsCi0JLnJlbGVhc2UJPSBkbV9zeXNmc19yZWxlYXNlCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCmluZGV4IDMxNjc0ODAuLmFhNGUyYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uYworKysgYi9kcml2ZXJzL21kL2RtLmMKQEAgLTE1OTUsMTAgKzE1OTUsMTUgQEAKIAlyZXR1cm4gQkxLUFJFUF9PSzsKIH0KIAotc3RhdGljIHZvaWQgbWFwX3JlcXVlc3Qoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCByZXF1ZXN0ICpjbG9uZSwKLQkJCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKKy8qCisgKiBSZXR1cm5zOgorICogMCAgOiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBwcm9jZXNzZWQgKG5vdCByZXF1ZXVlZCkKKyAqICEwIDogdGhlIHJlcXVlc3QgaGFzIGJlZW4gcmVxdWV1ZWQKKyAqLworc3RhdGljIGludCBtYXBfcmVxdWVzdChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IHJlcXVlc3QgKmNsb25lLAorCQkgICAgICAgc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQogewotCWludCByOworCWludCByLCByZXF1ZXVlZCA9IDA7CiAJc3RydWN0IGRtX3JxX3RhcmdldF9pbyAqdGlvID0gY2xvbmUtPmVuZF9pb19kYXRhOwogCiAJLyoKQEAgLTE2MjUsNiArMTYzMCw3IEBACiAJY2FzZSBETV9NQVBJT19SRVFVRVVFOgogCQkvKiBUaGUgdGFyZ2V0IHdhbnRzIHRvIHJlcXVldWUgdGhlIEkvTyAqLwogCQlkbV9yZXF1ZXVlX3VubWFwcGVkX3JlcXVlc3QoY2xvbmUpOworCQlyZXF1ZXVlZCA9IDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmIChyID4gMCkgewpAQCAtMTYzNiw2ICsxNjQyLDggQEAKIAkJZG1fa2lsbF91bm1hcHBlZF9yZXF1ZXN0KGNsb25lLCByKTsKIAkJYnJlYWs7CiAJfQorCisJcmV0dXJuIHJlcXVldWVkOwogfQogCiAvKgpAQCAtMTY3NywxMiArMTY4NSwxNyBAQAogCQlhdG9taWNfaW5jKCZtZC0+cGVuZGluZ1tycV9kYXRhX2RpcihjbG9uZSldKTsKIAogCQlzcGluX3VubG9jayhxLT5xdWV1ZV9sb2NrKTsKLQkJbWFwX3JlcXVlc3QodGksIGNsb25lLCBtZCk7CisJCWlmIChtYXBfcmVxdWVzdCh0aSwgY2xvbmUsIG1kKSkKKwkJCWdvdG8gcmVxdWV1ZWQ7CisKIAkJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAl9CiAKIAlnb3RvIG91dDsKIAorcmVxdWV1ZWQ6CisJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKKwogcGx1Z19hbmRfb3V0OgogCWlmICghZWx2X3F1ZXVlX2VtcHR5KHEpKQogCQkvKiBTb21lIHJlcXVlc3RzIHN0aWxsIHJlbWFpbiwgcmV0cnkgbGF0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbGluZWFyLmMgYi9kcml2ZXJzL21kL2xpbmVhci5jCmluZGV4IDAwNDM1YmQuLmFmMmQzOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbGluZWFyLmMKKysrIGIvZHJpdmVycy9tZC9saW5lYXIuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJCSAqLwogCQlpZiAocmRldi0+YmRldi0+YmRfZGlzay0+cXVldWUtPm1lcmdlX2J2ZWNfZm4gJiYKIAkJICAgIHF1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSkgPiAoUEFHRV9TSVpFPj45KSkKLQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CisJCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOwogCiAJCWNvbmYtPmFycmF5X3NlY3RvcnMgKz0gcmRldi0+c2VjdG9yczsKIAkJY250Kys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggZGQzZGZlNC4uYTIwYTcxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtNDA3NSw4ICs0MDc1LDEwIEBACiB7CiAJbWRkZXZfdCAqbWRkZXYgPSBjb250YWluZXJfb2Yod3MsIG1kZGV2X3QsIGRlbF93b3JrKTsKIAotCWlmIChtZGRldi0+cHJpdmF0ZSA9PSAmbWRfcmVkdW5kYW5jeV9ncm91cCkgeworCWlmIChtZGRldi0+cHJpdmF0ZSkgewogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJm1kZGV2LT5rb2JqLCAmbWRfcmVkdW5kYW5jeV9ncm91cCk7CisJCWlmIChtZGRldi0+cHJpdmF0ZSAhPSAodm9pZCopMSkKKwkJCXN5c2ZzX3JlbW92ZV9ncm91cCgmbWRkZXYtPmtvYmosIG1kZGV2LT5wcml2YXRlKTsKIAkJaWYgKG1kZGV2LT5zeXNmc19hY3Rpb24pCiAJCQlzeXNmc19wdXQobWRkZXYtPnN5c2ZzX2FjdGlvbik7CiAJCW1kZGV2LT5zeXNmc19hY3Rpb24gPSBOVUxMOwpAQCAtNDI4NywxMCArNDI4OSw3IEBACiAJCXN5c2ZzX25vdGlmeV9kaXJlbnQocmRldi0+c3lzZnNfc3RhdGUpOwogCX0KIAotCW1kX3Byb2JlKG1kZGV2LT51bml0LCBOVUxMLCBOVUxMKTsKIAlkaXNrID0gbWRkZXYtPmdlbmRpc2s7Ci0JaWYgKCFkaXNrKQotCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaW5fbG9jaygmcGVyc19sb2NrKTsKIAlwZXJzID0gZmluZF9wZXJzKG1kZGV2LT5sZXZlbCwgbWRkZXYtPmNsZXZlbCk7CkBAIC00NTMwLDggKzQ1MjksOCBAQAogCQkJbWRkZXYtPnF1ZXVlLT51bnBsdWdfZm4gPSBOVUxMOwogCQkJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IE5VTEw7CiAJCQltb2R1bGVfcHV0KG1kZGV2LT5wZXJzLT5vd25lcik7Ci0JCQlpZiAobWRkZXYtPnBlcnMtPnN5bmNfcmVxdWVzdCkKLQkJCQltZGRldi0+cHJpdmF0ZSA9ICZtZF9yZWR1bmRhbmN5X2dyb3VwOworCQkJaWYgKG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QgJiYgbWRkZXYtPnByaXZhdGUgPT0gTlVMTCkKKwkJCQltZGRldi0+cHJpdmF0ZSA9ICh2b2lkKikxOwogCQkJbWRkZXYtPnBlcnMgPSBOVUxMOwogCQkJLyogdGVsbCB1c2Vyc3BhY2UgdG8gaGFuZGxlICdpbmFjdGl2ZScgKi8KIAkJCXN5c2ZzX25vdGlmeV9kaXJlbnQobWRkZXYtPnN5c2ZzX3N0YXRlKTsKQEAgLTQ1NzgsOSArNDU3Nyw2IEBACiAJCX0KIAkJbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCA9IDA7CiAKLQkJLyogbWFrZSBzdXJlIGFsbCBtZF9kZWxheWVkX2RlbGV0ZSBjYWxscyBoYXZlIGZpbmlzaGVkICovCi0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0KIAkJZXhwb3J0X2FycmF5KG1kZGV2KTsKIAogCQltZGRldi0+YXJyYXlfc2VjdG9ycyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL211bHRpcGF0aC5jIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwppbmRleCAzMmE2NjJmLi40YjMyM2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL211bHRpcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKQEAgLTMwOCw3ICszMDgsNyBAQAogCQkgKi8KIAkJCWlmIChxLT5tZXJnZV9idmVjX2ZuICYmCiAJCQkgICAgcXVldWVfbWF4X3NlY3RvcnMocSkgPiAoUEFHRV9TSVpFPj45KSkKLQkJCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOworCQkJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CiAKIAkJCWNvbmYtPndvcmtpbmdfZGlza3MrKzsKIAkJCW1kZGV2LT5kZWdyYWRlZC0tOwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAJCSAqIGEgbWVyZ2VfYnZlY19mbiB0byBiZSBpbnZvbHZlZCBpbiBtdWx0aXBhdGggKi8KIAkJaWYgKHJkZXYtPmJkZXYtPmJkX2Rpc2stPnF1ZXVlLT5tZXJnZV9idmVjX2ZuICYmCiAJCSAgICBxdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUpID4gKFBBR0VfU0laRT4+OSkpCi0JCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOworCQkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKIAogCQlpZiAoIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKIAkJCWNvbmYtPndvcmtpbmdfZGlza3MrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDAuYyBiL2RyaXZlcnMvbWQvcmFpZDAuYwppbmRleCA3NzYwNWNkLi5hMWY3MTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMC5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAogCQlpZiAocmRldjEtPmJkZXYtPmJkX2Rpc2stPnF1ZXVlLT5tZXJnZV9idmVjX2ZuICYmCiAJCSAgICBxdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUpID4gKFBBR0VfU0laRT4+OSkpCi0JCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOworCQkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKIAogCQlpZiAoIXNtYWxsZXN0IHx8IChyZGV2MS0+c2VjdG9ycyA8IHNtYWxsZXN0LT5zZWN0b3JzKSkKIAkJCXNtYWxsZXN0ID0gcmRldjE7CkBAIC0zMjUsNyArMzI1LDcgQEAKIAl9CiAJaWYgKG1kX2NoZWNrX25vX2JpdG1hcChtZGRldikpCiAJCXJldHVybiAtRUlOVkFMOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIG1kZGV2LT5jaHVua19zZWN0b3JzKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBtZGRldi0+Y2h1bmtfc2VjdG9ycyk7CiAJbWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrID0gJm1kZGV2LT5xdWV1ZS0+X19xdWV1ZV9sb2NrOwogCiAJcmV0ID0gY3JlYXRlX3N0cmlwX3pvbmVzKG1kZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCA4NTliZDNmLi41YTA2MTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC0xMTU4LDcgKzExNTgsNyBAQAogCQkJICovCiAJCQlpZiAocmRldi0+YmRldi0+YmRfZGlzay0+cXVldWUtPm1lcmdlX2J2ZWNfZm4gJiYKIAkJCSAgICBxdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUpID4gKFBBR0VfU0laRT4+OSkpCi0JCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKKwkJCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOwogCiAJCQlwLT5oZWFkX3Bvc2l0aW9uID0gMDsKIAkJCXJkZXYtPnJhaWRfZGlzayA9IG1pcnJvcjsKQEAgLTIxMDMsNyArMjEwMyw3IEBACiAJCSAqLwogCQlpZiAocmRldi0+YmRldi0+YmRfZGlzay0+cXVldWUtPm1lcmdlX2J2ZWNfZm4gJiYKIAkJICAgIHF1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSkgPiAoUEFHRV9TSVpFPj45KSkKLQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CisJCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOwogCX0KIAogCW1kZGV2LT5kZWdyYWRlZCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCBkMTE5YjdiLi43NTg0ZjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTExNjEsNyArMTE2MSw3IEBACiAJCQkgKi8KIAkJCWlmIChyZGV2LT5iZGV2LT5iZF9kaXNrLT5xdWV1ZS0+bWVyZ2VfYnZlY19mbiAmJgogCQkJICAgIHF1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSkgPiAoUEFHRV9TSVpFPj45KSkKLQkJCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOworCQkJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CiAKIAkJCXAtPmhlYWRfcG9zaXRpb24gPSAwOwogCQkJcmRldi0+cmFpZF9kaXNrID0gbWlycm9yOwpAQCAtMjI2MCw3ICsyMjYwLDcgQEAKIAkJICovCiAJCWlmIChyZGV2LT5iZGV2LT5iZF9kaXNrLT5xdWV1ZS0+bWVyZ2VfYnZlY19mbiAmJgogCQkgICAgcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlKSA+IChQQUdFX1NJWkU+PjkpKQotCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKKwkJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CiAKIAkJZGlzay0+aGVhZF9wb3NpdGlvbiA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IGU4NDIwNGUuLjUwOWM4ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTM3MzksNyArMzczOSw3IEBACiAJaWYgKChiaS0+Ymlfc2l6ZT4+OSkgPiBxdWV1ZV9tYXhfc2VjdG9ycyhxKSkKIAkJcmV0dXJuIDA7CiAJYmxrX3JlY291bnRfc2VnbWVudHMocSwgYmkpOwotCWlmIChiaS0+YmlfcGh5c19zZWdtZW50cyA+IHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpKQorCWlmIChiaS0+YmlfcGh5c19zZWdtZW50cyA+IHF1ZXVlX21heF9zZWdtZW50cyhxKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAocS0+bWVyZ2VfYnZlY19mbikKQEAgLTUxMzYsOSArNTEzNiw4IEBACiAJbWRkZXYtPnRocmVhZCA9IE5VTEw7CiAJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IE5VTEw7CiAJYmxrX3N5bmNfcXVldWUobWRkZXYtPnF1ZXVlKTsgLyogdGhlIHVucGx1ZyBmbiByZWZlcmVuY2VzICdjb25mJyovCi0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZtZGRldi0+a29iaiwgJnJhaWQ1X2F0dHJzX2dyb3VwKTsKIAlmcmVlX2NvbmYoY29uZik7Ci0JbWRkZXYtPnByaXZhdGUgPSBOVUxMOworCW1kZGV2LT5wcml2YXRlID0gJnJhaWQ1X2F0dHJzX2dyb3VwOwogCXJldHVybiAwOwogfQogCkBAIC01NDY0LDExICs1NDYzLDExIEBACiAJCSAgICAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQlpZiAocmFpZDVfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHsKIAkJCQljaGFyIG5tWzIwXTsKLQkJCQlpZiAocmRldi0+cmFpZF9kaXNrID49IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCisJCQkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKSB7CiAJCQkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKLQkJCQllbHNlCisJCQkJCWFkZGVkX2RldmljZXMrKzsKKwkJCQl9IGVsc2UKIAkJCQkJcmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID0gMDsKLQkJCQlhZGRlZF9kZXZpY2VzKys7CiAJCQkJc3ByaW50ZihubSwgInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOwogCQkJCWlmIChzeXNmc19jcmVhdGVfbGluaygmbWRkZXYtPmtvYmosCiAJCQkJCQkgICAgICAmcmRldi0+a29iaiwgbm0pKQpAQCAtNTQ4MCw5ICs1NDc5LDEyIEBACiAJCQkJYnJlYWs7CiAJCX0KIAorCS8qIFdoZW4gYSByZXNoYXBlIGNoYW5nZXMgdGhlIG51bWJlciBvZiBkZXZpY2VzLCAtPmRlZ3JhZGVkCisJICogaXMgbWVhc3VyZWQgYWdhaW5zdCB0aGUgbGFyZ2Ugb2YgdGhlIHByZSBhbmQgcG9zdCBudW1iZXIgb2YKKwkgKiBkZXZpY2VzLiovCiAJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA+IDApIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7Ci0JCW1kZGV2LT5kZWdyYWRlZCA9IChjb25mLT5yYWlkX2Rpc2tzIC0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykKKwkJbWRkZXYtPmRlZ3JhZGVkICs9IChjb25mLT5yYWlkX2Rpc2tzIC0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykKIAkJCS0gYWRkZWRfZGV2aWNlczsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9JUi9NYWtlZmlsZQppbmRleCBkZjVkZGI0Li4xNzE4OTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiBpci1jb21tb24tb2JqcyAgOj0gaXItZnVuY3Rpb25zLm8gaXIta2V5bWFwcy5vCi1pci1jb3JlLW9ianMJOj0gaXIta2V5dGFibGUubworaXItY29yZS1vYmpzCTo9IGlyLWtleXRhYmxlLm8gaXItc3lzZnMubwogCiBvYmotJChDT05GSUdfSVJfQ09SRSkgKz0gaXItY29yZS5vCiBvYmotJChDT05GSUdfVklERU9fSVIpICs9IGlyLWNvbW1vbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLWZ1bmN0aW9ucy5jIGIvZHJpdmVycy9tZWRpYS9JUi9pci1mdW5jdGlvbnMuYwppbmRleCA3NzZhMTM2Li5hYjA2OTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2lyLWZ1bmN0aW9ucy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItZnVuY3Rpb25zLmMKQEAgLTUyLDcgKzUyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIGludCBpcl9pbnB1dF9pbml0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppciwKLQkJICAgaW50IGlyX3R5cGUpCisJCSAgY29uc3QgdTY0IGlyX3R5cGUpCiB7CiAJaXItPmlyX3R5cGUgPSBpcl90eXBlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLWtleW1hcHMuYyBiL2RyaXZlcnMvbWVkaWEvSVIvaXIta2V5bWFwcy5jCmluZGV4IDliYmU2YjEuLjBlZmRlZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvaXIta2V5bWFwcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXIta2V5bWFwcy5jCkBAIC0zMzkzLDMgKzMzOTMsMTAyIEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHNfdGFibGUpOwogCisKKy8qIExlYWR0ZWsgV2luZmFzdCBUViBVU0IgSUkgRGVsdXhlIHJlbW90ZQorICAgTWFnbnVzIEFsbSA8bWFnbnVzLmFsbUBnbWFpbC5jb20+CisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfd2luZmFzdF91c2JpaV9kZWx1eGVbXSA9IHsKKwl7IDB4NjIsIEtFWV8wfSwKKwl7IDB4NzUsIEtFWV8xfSwKKwl7IDB4NzYsIEtFWV8yfSwKKwl7IDB4NzcsIEtFWV8zfSwKKwl7IDB4NzksIEtFWV80fSwKKwl7IDB4N2EsIEtFWV81fSwKKwl7IDB4N2IsIEtFWV82fSwKKwl7IDB4N2QsIEtFWV83fSwKKwl7IDB4N2UsIEtFWV84fSwKKwl7IDB4N2YsIEtFWV85fSwKKworCXsgMHgzOCwgS0VZX0NBTUVSQX0sCQkvKiBTTkFQU0hPVCAqLworCXsgMHgzNywgS0VZX1JFQ09SRH0sCQkvKiBSRUNPUkQgKi8KKwl7IDB4MzUsIEtFWV9USU1FfSwJCS8qIFRJTUVTSElGVCAqLworCisJeyAweDc0LCBLRVlfVk9MVU1FVVB9LAkJLyogVk9MVU1FVVAgKi8KKwl7IDB4NzgsIEtFWV9WT0xVTUVET1dOfSwJLyogVk9MVU1FRE9XTiAqLworCXsgMHg2NCwgS0VZX01VVEV9LAkJLyogTVVURSAqLworCisJeyAweDIxLCBLRVlfQ0hBTk5FTH0sCQkvKiBTVVJGICovCisJeyAweDdjLCBLRVlfQ0hBTk5FTFVQfSwJCS8qIENIQU5ORUxVUCAqLworCXsgMHg2MCwgS0VZX0NIQU5ORUxET1dOfSwJLyogQ0hBTk5FTERPV04gKi8KKwl7IDB4NjEsIEtFWV9MQVNUfSwJCS8qIExBU1QgQ0hBTk5FTCAoUkVDQUxMKSAqLworCisJeyAweDcyLCBLRVlfVklERU99LCAJCS8qIElOUFVUIE1PREVTIChUVi9GTSkgKi8KKworCXsgMHg3MCwgS0VZX1BPV0VSMn0sCQkvKiBUViBPTi9PRkYgKi8KKworCXsgMHgzOSwgS0VZX0NZQ0xFV0lORE9XU30sCS8qIE1JTklNSVpFIChCT1NTKSAqLworCXsgMHgzYSwgS0VZX05FV30sCQkvKiBQSVAgKi8KKwl7IDB4NzMsIEtFWV9aT09NfSwJCS8qIEZVTExTRUNSRUVOICovCisKKwl7IDB4NjYsIEtFWV9JTkZPfSwJCS8qIE9TRCAoRElTUExBWSkgKi8KKworCXsgMHgzMSwgS0VZX0RPVH0sCQkvKiAnLicgKi8KKwl7IDB4NjMsIEtFWV9FTlRFUn0sCQkvKiBFTlRFUiAqLworCit9Oworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3dpbmZhc3RfdXNiaWlfZGVsdXhlX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfd2luZmFzdF91c2JpaV9kZWx1eGUsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3dpbmZhc3RfdXNiaWlfZGVsdXhlKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc193aW5mYXN0X3VzYmlpX2RlbHV4ZV90YWJsZSk7CisKKy8qIEt3b3JsZCAzMTVVCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfa3dvcmxkXzMxNXVbXSA9IHsKKwl7IDB4NjE0MywgS0VZX1BPV0VSIH0sCisJeyAweDYxMDEsIEtFWV9UVU5FUiB9LAkJLyogc291cmNlICovCisJeyAweDYxMGIsIEtFWV9aT09NIH0sCisJeyAweDYxMDMsIEtFWV9QT1dFUjIgfSwJCS8qIHNodXRkb3duICovCisKKwl7IDB4NjEwNCwgS0VZXzEgfSwKKwl7IDB4NjEwOCwgS0VZXzIgfSwKKwl7IDB4NjEwMiwgS0VZXzMgfSwKKwl7IDB4NjEwOSwgS0VZX0NIQU5ORUxVUCB9LAorCisJeyAweDYxMGYsIEtFWV80IH0sCisJeyAweDYxMDUsIEtFWV81IH0sCisJeyAweDYxMDYsIEtFWV82IH0sCisJeyAweDYxMDcsIEtFWV9DSEFOTkVMRE9XTiB9LAorCisJeyAweDYxMGMsIEtFWV83IH0sCisJeyAweDYxMGQsIEtFWV84IH0sCisJeyAweDYxMGEsIEtFWV85IH0sCisJeyAweDYxMGUsIEtFWV9WT0xVTUVVUCB9LAorCisJeyAweDYxMTAsIEtFWV9MQVNUIH0sCisJeyAweDYxMTEsIEtFWV8wIH0sCisJeyAweDYxMTIsIEtFWV9FTlRFUiB9LAorCXsgMHg2MTEzLCBLRVlfVk9MVU1FRE9XTiB9LAorCisJeyAweDYxMTQsIEtFWV9SRUNPUkQgfSwKKwl7IDB4NjExNSwgS0VZX1NUT1AgfSwKKwl7IDB4NjExNiwgS0VZX1BMQVkgfSwKKwl7IDB4NjExNywgS0VZX01VVEUgfSwKKworCXsgMHg2MTE4LCBLRVlfVVAgfSwKKwl7IDB4NjExOSwgS0VZX0RPV04gfSwKKwl7IDB4NjExYSwgS0VZX0xFRlQgfSwKKwl7IDB4NjExYiwgS0VZX1JJR0hUIH0sCisKKwl7IDB4NjExYywgS0VZX1JFRCB9LAorCXsgMHg2MTFkLCBLRVlfR1JFRU4gfSwKKwl7IDB4NjExZSwgS0VZX1lFTExPVyB9LAorCXsgMHg2MTFmLCBLRVlfQkxVRSB9LAorfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2t3b3JsZF8zMTV1X3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfa3dvcmxkXzMxNXUsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2t3b3JsZF8zMTV1KSwKKwkuaXJfdHlwZSA9IElSX1RZUEVfTkVDLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2t3b3JsZF8zMTV1X3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvaXIta2V5dGFibGUuYyBiL2RyaXZlcnMvbWVkaWEvSVIvaXIta2V5dGFibGUuYwppbmRleCBiNTIxZWQ5Li4wOTAzZjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2lyLWtleXRhYmxlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9JUi9pci1rZXl0YWJsZS5jCkBAIC02NSw3ICs2NSw3IEBACiAgKiBJbiBvcmRlciB0byByZWR1Y2UgdGhlIHF1YW50aXR5IG9mIHRhYmxlIHJlc2l6ZXMsIGl0IGhhcyBhIG1pbmltdW0KICAqIHRhYmxlIHNpemUgb2YgSVJfVEFCX01JTl9TSVpFLgogICovCi1pbnQgaXJfcm91bmR1cF90YWJsZXNpemUoaW50IG5fZWxlbXMpCitzdGF0aWMgaW50IGlyX3JvdW5kdXBfdGFibGVzaXplKGludCBuX2VsZW1zKQogewogCXNpemVfdCBzaXplOwogCkBAIC04MSw3ICs4MSw2IEBACiAKIAlyZXR1cm4gbl9lbGVtczsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlyX3JvdW5kdXBfdGFibGVzaXplKTsKIAogLyoqCiAgKiBpcl9jb3B5X3RhYmxlKCkgLSBjb3BpZXMgYSBrZXl0YWJsZSwgZGlzY2FyZGluZyB0aGUgdW51c2VkIGVudHJpZXMKQEAgLTg5LDkgKzg4LDExIEBACiAgKiBAb3JpZ2luOglvcmlnaW4gdGFibGUKICAqCiAgKiBDb3BpZXMgYWxsIGVudHJpZXMgd2hlcmUgdGhlIGtleWNvZGUgaXMgbm90IEtFWV9VTktOT1dOL0tFWV9SRVNFUlZFRAorICogQWxzbyBjb3BpZXMgdGFibGUgc2l6ZSBhbmQgdGFibGUgcHJvdG9jb2wuCisgKiBOT1RFOiBJdCBzaG91bGRuJ3QgY29weSB0aGUgbG9jayBmaWVsZAogICovCiAKLWludCBpcl9jb3B5X3RhYmxlKHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqZGVzdGluLAorc3RhdGljIGludCBpcl9jb3B5X3RhYmxlKHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqZGVzdGluLAogCQkgY29uc3Qgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICpvcmlnaW4pCiB7CiAJaW50IGksIGogPSAwOwpAQCAtMTA1LDEyICsxMDYsMTIgQEAKIAkJaisrOwogCX0KIAlkZXN0aW4tPnNpemUgPSBqOworCWRlc3Rpbi0+aXJfdHlwZSA9IG9yaWdpbi0+aXJfdHlwZTsKIAogCUlSX2RwcmludGsoMSwgIkNvcGllZCAlZCBzY2FuY29kZXMgdG8gdGhlIG5ldyBrZXljb2RlIHRhYmxlXG4iLCBkZXN0aW4tPnNpemUpOwogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb3B5X3RhYmxlKTsKIAogLyoqCiAgKiBpcl9nZXRrZXljb2RlKCkgLSBnZXQgYSBrZXljb2RlIGF0IHRoZSBldmRldiBzY2FuY29kZSAtPmtleWNvZGUgdGFibGUKQEAgLTE4NCwxOCArMTg1LDE0IEBACiAJaW50IG5ld3NpemUgPSByY190YWItPnNpemUgLSAxOwogCWludCByZXNpemUgPSBpcl9pc19yZXNpemVfbmVlZGVkKHJjX3RhYiwgbmV3c2l6ZSk7CiAJc3RydWN0IGlyX3NjYW5jb2RlICpvbGRrZXltYXAgPSByY190YWItPnNjYW47Ci0Jc3RydWN0IGlyX3NjYW5jb2RlICpuZXdrZXltYXA7CisJc3RydWN0IGlyX3NjYW5jb2RlICpuZXdrZXltYXAgPSBOVUxMOwogCi0JaWYgKHJlc2l6ZSkgeworCWlmIChyZXNpemUpCiAJCW5ld2tleW1hcCA9IGt6YWxsb2MoaXJfcm91bmR1cF90YWJsZXNpemUobmV3c2l6ZSkgKgogCQkJCSAgICBzaXplb2YoKm5ld2tleW1hcCksIEdGUF9BVE9NSUMpOwogCi0JCS8qIFRoZXJlJ3Mgbm8gbWVtb3J5IGZvciByZXNpemUuIEtlZXAgdGhlIG9sZCB0YWJsZSAqLwotCQlpZiAoIW5ld2tleW1hcCkKLQkJCXJlc2l6ZSA9IDA7Ci0JfQotCi0JaWYgKCFyZXNpemUpIHsKKwkvKiBUaGVyZSdzIG5vIG1lbW9yeSBmb3IgcmVzaXplLiBLZWVwIHRoZSBvbGQgdGFibGUgKi8KKwlpZiAoIXJlc2l6ZSB8fCAhbmV3a2V5bWFwKSB7CiAJCW5ld2tleW1hcCA9IG9sZGtleW1hcDsKIAogCQkvKiBXZSdsbCBtb2RpZnkgdGhlIGxpdmUgdGFibGUuIExvY2sgaXQgKi8KQEAgLTM5OSwxMiArMzk2LDE0IEBACiAgKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKICAqIEByY190YWI6CXRoZSBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgdGFibGUgb2Ygc2NhbmNvZGUva2V5bWFwCiAgKgotICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgaW5wdXQgaW5mcmFzdHJ1Y3R1cmUgdG8gd29yayB3aXRoCi0gKiBhbiBJUi4KLSAqIEl0IHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHJlZ2lzdGVyaW5nIHRoZSBJUiBkZXZpY2UuCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBpbnB1dCBpbmZyYXN0cnVjdHVyZQorICogdG8gd29yayB3aXRoIGFuIElSLgorICogSXQgd2lsbCByZWdpc3RlciB0aGUgaW5wdXQvZXZkZXYgaW50ZXJmYWNlIGZvciB0aGUgZGV2aWNlIGFuZAorICogcmVnaXN0ZXIgdGhlIHN5ZnMgY29kZSBmb3IgSVIgY2xhc3MKICAqLwogaW50IGlyX2lucHV0X3JlZ2lzdGVyKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwKLQkJICAgICAgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICpyY190YWIpCisJCSAgICAgIGNvbnN0IHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaXJfZGV2X3Byb3BzICpwcm9wcykKIHsKIAlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXY7CiAJc3RydWN0IGlyX3NjYW5jb2RlICAqa2V5bWFwICAgID0gcmNfdGFiLT5zY2FuOwpAQCAtNDE3LDE5ICs0MTYsMjIgQEAKIAlpZiAoIWlyX2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzcGluX2xvY2tfaW5pdCgmcmNfdGFiLT5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmaXJfZGV2LT5yY190YWIubG9jayk7CiAKIAlpcl9kZXYtPnJjX3RhYi5zaXplID0gaXJfcm91bmR1cF90YWJsZXNpemUocmNfdGFiLT5zaXplKTsKIAlpcl9kZXYtPnJjX3RhYi5zY2FuID0ga3phbGxvYyhpcl9kZXYtPnJjX3RhYi5zaXplICoKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcl9zY2FuY29kZSksIEdGUF9LRVJORUwpOwotCWlmICghaXJfZGV2LT5yY190YWIuc2NhbikKKwlpZiAoIWlyX2Rldi0+cmNfdGFiLnNjYW4pIHsKKwkJa2ZyZWUoaXJfZGV2KTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJSVJfZHByaW50aygxLCAiQWxsb2NhdGVkIHNwYWNlIGZvciAlZCBrZXljb2RlIGVudHJpZXMgKCV6ZCBieXRlcylcbiIsCiAJCWlyX2Rldi0+cmNfdGFiLnNpemUsCiAJCWlyX2Rldi0+cmNfdGFiLnNpemUgKiBzaXplb2YoaXJfZGV2LT5yY190YWIuc2NhbikpOwogCiAJaXJfY29weV90YWJsZSgmaXJfZGV2LT5yY190YWIsIHJjX3RhYik7CisJaXJfZGV2LT5wcm9wcyA9IHByb3BzOwogCiAJLyogc2V0IHRoZSBiaXRzIGZvciB0aGUga2V5cyAqLwogCUlSX2RwcmludGsoMSwgImtleSBtYXAgc2l6ZTogJWRcbiIsIHJjX3RhYi0+c2l6ZSk7CkBAIC00NDcsMTYgKzQ0OSwzMSBAQAogCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2RldiwgaXJfZGV2KTsKIAogCXJjID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CisKKwlyYyA9IGlyX3JlZ2lzdGVyX2NsYXNzKGlucHV0X2Rldik7CiAJaWYgKHJjIDwgMCkgewotCQlrZnJlZShyY190YWItPnNjYW4pOwotCQlrZnJlZShpcl9kZXYpOwotCQlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIE5VTEwpOworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOworCQlnb3RvIGVycjsKIAl9CiAKKwlyZXR1cm4gMDsKKworZXJyOgorCWtmcmVlKHJjX3RhYi0+c2Nhbik7CisJa2ZyZWUoaXJfZGV2KTsKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIE5VTEwpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlyX2lucHV0X3JlZ2lzdGVyKTsKIAorLyoqCisgKiBpcl9pbnB1dF91bnJlZ2lzdGVyKCkgLSB1bnJlZ2lzdGVycyBJUiBhbmQgZnJlZXMgcmVzb3VyY2VzCisgKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKKworICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gZnJlZSBtZW1vcnkgYW5kIGRlLXJlZ2lzdGVyIGludGVyZmFjZXMuCisgKi8KIHZvaWQgaXJfaW5wdXRfdW5yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTQ3Miw2ICs0ODksOCBAQAogCWtmcmVlKHJjX3RhYi0+c2Nhbik7CiAJcmNfdGFiLT5zY2FuID0gTlVMTDsKIAorCWlyX3VucmVnaXN0ZXJfY2xhc3MoZGV2KTsKKwogCWtmcmVlKGlyX2Rldik7CiAJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvaXItc3lzZnMuYyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjVmYmNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9JUi9pci1zeXNmcy5jCkBAIC0wLDAgKzEsMjExIEBACisvKiBpci1yZWdpc3Rlci5jIC0gaGFuZGxlIElSIHNjYW5jb2RlLT5rZXljb2RlIHRhYmxlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgorCisjZGVmaW5lIElSUkNWX05VTV9ERVZJQ0VTCTI1NgorCisvKiBiaXQgYXJyYXkgdG8gcmVwcmVzZW50IElSIHN5c2ZzIGRldmljZSBudW1iZXIgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGlyX2NvcmVfZGV2X251bWJlcjsKKworLyogY2xhc3MgZm9yIC9zeXMvY2xhc3MvaXJyY3YgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKmlyX2lucHV0X2NsYXNzOworCisvKioKKyAqIHNob3dfcHJvdG9jb2woKSAtIHNob3dzIHRoZSBjdXJyZW50IElSIHByb3RvY29sCisgKiBAZDoJCXRoZSBkZXZpY2UgZGVzY3JpcHRvcgorICogQG1hdHRyOgl0aGUgZGV2aWNlIGF0dHJpYnV0ZSBzdHJ1Y3QgKHVudXNlZCkKKyAqIEBidWY6CWEgcG9pbnRlciB0byB0aGUgb3V0cHV0IGJ1ZmZlcgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBhIGNhbGxiYWNrIHJvdXRpbmUgZm9yIGlucHV0IHJlYWQgdGhlIElSIHByb3RvY29sIHR5cGUuCisgKiBpdCBpcyB0cmlnZ2VkIGJ5IHJlYWRpbmcgL3N5cy9jbGFzcy9pcnJjdi9pcnJjdj8vY3VycmVudF9wcm90b2NvbC4KKyAqIEl0IHJldHVybnMgdGhlIHByb3RvY29sIG5hbWUsIGFzIHVuZGVyc3Rvb2QgYnkgdGhlIGRyaXZlci4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19wcm90b2NvbChzdHJ1Y3QgZGV2aWNlICpkLAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbWF0dHIsIGNoYXIgKmJ1ZikKK3sKKwljaGFyICpzOworCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwl1NjQgaXJfdHlwZSA9IGlyX2Rldi0+cmNfdGFiLmlyX3R5cGU7CisKKwlJUl9kcHJpbnRrKDEsICJDdXJyZW50IHByb3RvY29sIGlzICVsbGRcbiIsIChsb25nIGxvbmcpaXJfdHlwZSk7CisKKwkvKiBGSVhNRTogZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIHByb3RvY29scyBhdCB0aGUgc2FtZSB0aW1lICovCisJaWYgKGlyX3R5cGUgPT0gSVJfVFlQRV9VTktOT1dOKQorCQlzID0gIlVua25vd24iOworCWVsc2UgaWYgKGlyX3R5cGUgPT0gSVJfVFlQRV9SQzUpCisJCXMgPSAiUkMtNSI7CisJZWxzZSBpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX1BEKQorCQlzID0gIlB1bHNlL2Rpc3RhbmNlIjsKKwllbHNlIGlmIChpcl90eXBlID09IElSX1RZUEVfTkVDKQorCQlzID0gIk5FQyI7CisJZWxzZQorCQlzID0gIk90aGVyIjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBzKTsKK30KKworLyoqCisgKiBzdG9yZV9wcm90b2NvbCgpIC0gc2hvd3MgdGhlIGN1cnJlbnQgSVIgcHJvdG9jb2wKKyAqIEBkOgkJdGhlIGRldmljZSBkZXNjcmlwdG9yCisgKiBAbWF0dHI6CXRoZSBkZXZpY2UgYXR0cmlidXRlIHN0cnVjdCAodW51c2VkKQorICogQGJ1ZjoJYSBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIKKyAqIEBsZW46CWxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyCisgKgorICogVGhpcyByb3V0aW5lIGlzIGEgY2FsbGJhY2sgcm91dGluZSBmb3IgY2hhbmdpbmcgdGhlIElSIHByb3RvY29sIHR5cGUuCisgKiBpdCBpcyB0cmlnZ2VkIGJ5IHJlYWRpbmcgL3N5cy9jbGFzcy9pcnJjdi9pcnJjdj8vY3VycmVudF9wcm90b2NvbC4KKyAqIEl0IGNoYW5nZXMgdGhlIElSIHRoZSBwcm90b2NvbCBuYW1lLCBpZiB0aGUgSVIgdHlwZSBpcyByZWNvZ25pemVkCisgKiBieSB0aGUgZHJpdmVyLgorICogSWYgYW4gdW5rbm93biBwcm90b2NvbCBuYW1lIGlzIHVzZWQsIHJldHVybnMgLUVJTlZBTC4KKyAqLworc3RhdGljIHNzaXplX3Qgc3RvcmVfcHJvdG9jb2woc3RydWN0IGRldmljZSAqZCwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptYXR0ciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmRhdGEsCisJCQkgICAgICBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwl1NjQgaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTjsKKwlpbnQgcmMgPSAtRUlOVkFMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY2hhciAqYnVmOworCisJYnVmID0gc3Ryc2VwKChjaGFyICoqKSAmZGF0YSwgIlxuIik7CisKKwlpZiAoIXN0cmNhc2VjbXAoYnVmLCAicmMtNSIpKQorCQlpcl90eXBlID0gSVJfVFlQRV9SQzU7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYnVmLCAicGQiKSkKKwkJaXJfdHlwZSA9IElSX1RZUEVfUEQ7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYnVmLCAibmVjIikpCisJCWlyX3R5cGUgPSBJUl9UWVBFX05FQzsKKworCWlmIChpcl90eXBlID09IElSX1RZUEVfVU5LTk9XTikgeworCQlJUl9kcHJpbnRrKDEsICJFcnJvciBzZXR0aW5nIHByb3RvY29sIHRvICVsbGRcbiIsCisJCQkgICAobG9uZyBsb25nKWlyX3R5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaXJfZGV2LT5wcm9wcyAmJiBpcl9kZXYtPnByb3BzLT5jaGFuZ2VfcHJvdG9jb2wpCisJCXJjID0gaXJfZGV2LT5wcm9wcy0+Y2hhbmdlX3Byb3RvY29sKGlyX2Rldi0+cHJvcHMtPnByaXYsCisJCQkJCQkgICAgaXJfdHlwZSk7CisKKwlpZiAocmMgPCAwKSB7CisJCUlSX2RwcmludGsoMSwgIkVycm9yIHNldHRpbmcgcHJvdG9jb2wgdG8gJWxsZFxuIiwKKwkJCSAgIChsb25nIGxvbmcpaXJfdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcl9kZXYtPnJjX3RhYi5sb2NrLCBmbGFncyk7CisJaXJfZGV2LT5yY190YWIuaXJfdHlwZSA9IGlyX3R5cGU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJfZGV2LT5yY190YWIubG9jaywgZmxhZ3MpOworCisJSVJfZHByaW50aygxLCAiQ3VycmVudCBwcm90b2NvbCBpcyAlbGxkXG4iLAorCQkgICAobG9uZyBsb25nKWlyX3R5cGUpOworCisJcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIFN0YXRpYyBkZXZpY2UgYXR0cmlidXRlIHN0cnVjdCB3aXRoIHRoZSBzeXNmcyBhdHRyaWJ1dGVzIGZvciBJUidzCisgKi8KK3N0YXRpYyBERVZJQ0VfQVRUUihjdXJyZW50X3Byb3RvY29sLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgc2hvd19wcm90b2NvbCwgc3RvcmVfcHJvdG9jb2wpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXJfZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2N1cnJlbnRfcHJvdG9jb2wuYXR0ciwKKwlOVUxMLAorfTsKKworLyoqCisgKiBpcl9yZWdpc3Rlcl9jbGFzcygpIC0gY3JlYXRlcyB0aGUgc3lzZnMgZm9yIC9zeXMvY2xhc3MvaXJyY3YvaXJyY3Y/CisgKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byByZWdpc3RlciB0aGUgc3lmcyBjb2RlIGZvciBJUiBjbGFzcworICovCitpbnQgaXJfcmVnaXN0ZXJfY2xhc3Moc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQoreworCWludCByYzsKKwlzdHJ1Y3Qga29iamVjdCAqa29iajsKKworCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7CisJaW50IGRldm5vID0gZmluZF9maXJzdF96ZXJvX2JpdCgmaXJfY29yZV9kZXZfbnVtYmVyLAorCQkJCQlJUlJDVl9OVU1fREVWSUNFUyk7CisKKwlpZiAodW5saWtlbHkoZGV2bm8gPCAwKSkKKwkJcmV0dXJuIGRldm5vOworCisJaXJfZGV2LT5hdHRyLmF0dHJzID0gaXJfZGV2X2F0dHJzOworCWlyX2Rldi0+Y2xhc3NfZGV2ID0gZGV2aWNlX2NyZWF0ZShpcl9pbnB1dF9jbGFzcywgTlVMTCwKKwkJCQkJICBpbnB1dF9kZXYtPmRldi5kZXZ0LCBpcl9kZXYsCisJCQkJCSAgImlycmN2JWQiLCBkZXZubyk7CisJa29iaiA9ICZpcl9kZXYtPmNsYXNzX2Rldi0+a29iajsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIkNyZWF0aW5nIElSIGRldmljZSAlc1xuIiwga29iamVjdF9uYW1lKGtvYmopKTsKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cChrb2JqLCAmaXJfZGV2LT5hdHRyKTsKKwlpZiAodW5saWtlbHkocmMgPCAwKSkgeworCQlkZXZpY2VfZGVzdHJveShpcl9pbnB1dF9jbGFzcywgaW5wdXRfZGV2LT5kZXYuZGV2dCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlyX2Rldi0+ZGV2bm8gPSBkZXZubzsKKwlzZXRfYml0KGRldm5vLCAmaXJfY29yZV9kZXZfbnVtYmVyKTsKKworCXJldHVybiAwOworfTsKKworLyoqCisgKiBpcl91bnJlZ2lzdGVyX2NsYXNzKCkgLSByZW1vdmVzIHRoZSBzeXNmcyBmb3Igc3lzZnMgZm9yCisgKgkJCSAgIC9zeXMvY2xhc3MvaXJyY3YvaXJyY3Y/CisgKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byB1bnJlZ2lzdGVyIHRoZSBzeWZzIGNvZGUgZm9yIElSIGNsYXNzCisgKi8KK3ZvaWQgaXJfdW5yZWdpc3Rlcl9jbGFzcyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpCit7CisJc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKKwlzdHJ1Y3Qga29iamVjdCAqa29iajsKKworCWNsZWFyX2JpdChpcl9kZXYtPmRldm5vLCAmaXJfY29yZV9kZXZfbnVtYmVyKTsKKworCWtvYmogPSAmaXJfZGV2LT5jbGFzc19kZXYtPmtvYmo7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoa29iaiwgJmlyX2Rldi0+YXR0cik7CisJZGV2aWNlX2Rlc3Ryb3koaXJfaW5wdXRfY2xhc3MsIGlucHV0X2Rldi0+ZGV2LmRldnQpOworCisJa2ZyZWUoaXJfZGV2LT5hdHRyLm5hbWUpOworfQorCisvKgorICogSW5pdC9leGl0IGNvZGUgZm9yIHRoZSBtb2R1bGUuIEJhc2ljYWxseSwgY3JlYXRlcy9yZW1vdmVzIC9zeXMvY2xhc3MvaXJyY3YKKyAqLworCitzdGF0aWMgaW50IF9faW5pdCBpcl9jb3JlX2luaXQodm9pZCkKK3sKKwlpcl9pbnB1dF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImlycmN2Iik7CisJaWYgKElTX0VSUihpcl9pbnB1dF9jbGFzcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpcl9jb3JlOiB1bmFibGUgdG8gcmVnaXN0ZXIgaXJyY3YgY2xhc3NcbiIpOworCQlyZXR1cm4gUFRSX0VSUihpcl9pbnB1dF9jbGFzcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpcl9jb3JlX2V4aXQodm9pZCkKK3sKKwljbGFzc19kZXN0cm95KGlyX2lucHV0X2NsYXNzKTsKK30KKworbW9kdWxlX2luaXQoaXJfY29yZV9pbml0KTsKK21vZHVsZV9leGl0KGlyX2NvcmVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCmluZGV4IDczNjRiOTYuLmZkOGUxZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCkBAIC00MjMsMTQgKzQyMywxNSBAQAogCX0KIH0KIAoraW50IHNhYTcxNDZfdnZfZGV2aW5pdChzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldikKK3sKKwlyZXR1cm4gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJmRldi0+cGNpLT5kZXYsICZkZXYtPnY0bDJfZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNhYTcxNDZfdnZfZGV2aW5pdCk7CisKIGludCBzYWE3MTQ2X3Z2X2luaXQoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsIHN0cnVjdCBzYWE3MTQ2X2V4dF92diAqZXh0X3Z2KQogewogCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2djsKLQlpbnQgZXJyOwotCi0JZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJmRldi0+cGNpLT5kZXYsICZkZXYtPnY0bDJfZGV2KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwogCiAJdnYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzE0Nl92diksIEdGUF9LRVJORUwpOwogCWlmICh2diA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKaW5kZXggYmVjYmFhZC4uNWVkNzUyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYwpAQCAtMTMzMyw5ICsxMzMzLDkgQEAKIAogCURFQl9DQVAoKCJ2YnVmOiVwXG4iLHZiKSk7CiAKLQlyZWxlYXNlX2FsbF9wYWdldGFibGVzKGRldiwgYnVmKTsKLQogCXNhYTcxNDZfZG1hX2ZyZWUoZGV2LHEsYnVmKTsKKworCXJlbGVhc2VfYWxsX3BhZ2V0YWJsZXMoZGV2LCBidWYpOwogfQogCiBzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyB2aWRlb19xb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYwppbmRleCAyYjg3NmYzLi5kOWFhYWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYwpAQCAtMTMzNyw2ICsxMzM3LDIyIEBACiAJfSwKIH07CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVFVORVJfU09OWV9CVEZfUFhOMDFaIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3NvbnlfYnRmX3B4bjAxel9yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTM3LjI1IC8qTUh6Ki8sIDB4OGUsIDB4MDEsIH0sCisJeyAxNiAqIDM2Ny4yNSAvKk1IeiovLCAweDhlLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHg4ZSwgMHgwNCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3NvbnlfYnRmX3B4bjAxel9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCisJCS5yYW5nZXMgPSB0dW5lcl9zb255X2J0Zl9weG4wMXpfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9zb255X2J0Zl9weG4wMXpfcmFuZ2VzKSwKKwl9LAorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCB0dW5lcnR5cGUgdHVuZXJzW10gPSB7CkBAIC0xODA1LDYgKzE4MjEsMTEgQEAKIAkJLm5hbWUgICA9ICJOWFAgVERBMTgyNzEiLAogCQkvKiBzZWUgdGRhMTgyNzEtZmUuYyBmb3IgZGV0YWlscyAqLwogCX0sCisJW1RVTkVSX1NPTllfQlRGX1BYTjAxWl0gPSB7CisJCS5uYW1lICAgPSAiU29ueSBCVEYtUHhuMDFaIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3NvbnlfYnRmX3B4bjAxel9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3NvbnlfYnRmX3B4bjAxel9wYXJhbXMpLAorCX0sCiB9OwogRVhQT1JUX1NZTUJPTCh0dW5lcnMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmMKaW5kZXggZjI3MGU2MC4uYmU1MWMyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXhjMjAyOC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci14YzIwMjguYwpAQCAtOTE3LDMwICs5MTcsNjggQEAKIAkgKiB0aGF0IHhjMjAyOCB3aWxsIGJlIGluIGEgc2FmZSBzdGF0ZS4KIAkgKiBNYXliZSB0aGlzIG1pZ2h0IGFsc28gYmUgbmVlZGVkIGZvciBEVFYuCiAJICovCi0JaWYgKG5ld19tb2RlID09IFRfQU5BTE9HX1RWKQorCWlmIChuZXdfbW9kZSA9PSBUX0FOQUxPR19UVikgewogCQlyYyA9IHNlbmRfc2VxKHByaXYsIHsweDAwLCAweDAwfSk7CiAKLQkvKgotCSAqIERpZ2l0YWwgbW9kZXMgcmVxdWlyZSBhbiBvZmZzZXQgdG8gYWRqdXN0IHRvIHRoZQotCSAqIHByb3BlciBmcmVxdWVuY3kuCi0JICogQW5hbG9nIG1vZGVzIHJlcXVpcmUgb2Zmc2V0ID0gMAotCSAqLwotCWlmIChuZXdfbW9kZSA9PSBUX0RJR0lUQUxfVFYpIHsKLQkJLyogU2V0cyB0aGUgb2Zmc2V0IGFjY29yZGluZyB3aXRoIGZpcm13YXJlICovCisJCS8qIEFuYWxvZyBtb2RlcyByZXF1aXJlIG9mZnNldCA9IDAgKi8KKwl9IGVsc2UgeworCQkvKgorCQkgKiBEaWdpdGFsIG1vZGVzIHJlcXVpcmUgYW4gb2Zmc2V0IHRvIGFkanVzdCB0byB0aGUKKwkJICogcHJvcGVyIGZyZXF1ZW5jeS4gVGhlIG9mZnNldCBkZXBlbmRzIG9uIHdoYXQKKwkJICogZmlybXdhcmUgdmVyc2lvbiBpcyB1c2VkLgorCQkgKi8KKworCQkvKgorCQkgKiBBZGp1c3QgdG8gdGhlIGNlbnRlciBmcmVxdWVuY3kuIFRoaXMgaXMgY2FsY3VsYXRlZCBieSB0aGUKKwkJICogZm9ybXVsYTogb2Zmc2V0ID0gMS4yNU1IeiAtIEJXLzIKKwkJICogRm9yIERUViA3LzgsIHRoZSBmaXJtd2FyZSB1c2VzIEJXID0gODAwMCwgc28gaXQgbmVlZHMgYQorCQkgKiBmdXJ0aGVyIGFkanVzdG1lbnQgdG8gZ2V0IHRoZSBmcmVxdWVuY3kgY2VudGVyIG9uIFZIRgorCQkgKi8KIAkJaWYgKHByaXYtPmN1cl9mdy50eXBlICYgRFRWNikKIAkJCW9mZnNldCA9IDE3NTAwMDA7CiAJCWVsc2UgaWYgKHByaXYtPmN1cl9mdy50eXBlICYgRFRWNykKIAkJCW9mZnNldCA9IDIyNTAwMDA7CiAJCWVsc2UJLyogRFRWOCBvciBEVFY3OCAqLwogCQkJb2Zmc2V0ID0gMjc1MDAwMDsKLQotCQkvKgotCQkgKiBXZSBtdXN0IGFkanVzdCB0aGUgb2Zmc2V0IGJ5IDUwMGtIeiAgd2hlbgotCQkgKiB0dW5pbmcgYSA3TUh6IFZIRiBjaGFubmVsIHdpdGggRFRWNzggZmlybXdhcmUKLQkJICogKHVzZWQgaW4gQXVzdHJhbGlhLCBJdGFseSBhbmQgR2VybWFueSkKLQkJICovCiAJCWlmICgocHJpdi0+Y3VyX2Z3LnR5cGUgJiBEVFY3OCkgJiYgZnJlcSA8IDQ3MDAwMDAwMCkKIAkJCW9mZnNldCAtPSA1MDAwMDA7CisKKwkJLyoKKwkJICogeGMzMDI4IGFkZGl0aW9uYWwgIm1hZ2ljIgorCQkgKiBEZXBlbmRpbmcgb24gdGhlIGZpcm13YXJlIHZlcnNpb24sIGl0IG5lZWRzIHNvbWUgYWRqdXN0bWVudHMKKwkJICogdG8gcHJvcGVybHkgY2VudHJhbGl6ZSB0aGUgZnJlcXVlbmN5LiBUaGlzIHNlZW1zIHRvIGJlCisJCSAqIG5lZWRlZCB0byBjb21wZW5zYXRlIHRoZSBTQ09ERSB0YWJsZSBhZGp1c3RtZW50cyBtYWRlIGJ5CisJCSAqIG5ld2VyIGZpcm13YXJlcworCQkgKi8KKworI2lmIDEKKwkJLyoKKwkJICogVGhlIHByb3BlciBhZGp1c3RtZW50IHdvdWxkIGJlIHRvIGRvIGl0IGF0IHMtY29kZSB0YWJsZS4KKwkJICogSG93ZXZlciwgdGhpcyBkaWRuJ3Qgd29yaywgYXMgcmVwb3J0ZWQgYnkKKwkJICogUm9iZXJ0IExvd2VyeSA8cmdsb3dlcnlAZXhlbWFpbC5jb20uYXU+CisJCSAqLworCisJCWlmIChwcml2LT5jdXJfZncudHlwZSAmIERUVjcpCisJCQlvZmZzZXQgKz0gNTAwMDAwOworCisjZWxzZQorCQkvKgorCQkgKiBTdGlsbCBuZWVkIHRlc3RzIGZvciBYQzMwMjhMIChmaXJtd2FyZSAzLjIgb3IgdXBwZXIpCisJCSAqIFNvLCBmb3Igbm93LCBsZXQncyBqdXN0IGNvbW1lbnQgdGhlIHBlci1maXJtd2FyZQorCQkgKiB2ZXJzaW9uIG9mIHRoaXMgY2hhbmdlLiBSZXBvcnRzIHdpdGggeGMzMDI4bCB3b3JraW5nCisJCSAqIHdpdGggYW5kIHdpdGhvdXQgdGhlIGxpbmVzIGJlbGxvdyBhcmUgd2VsY29tZQorCQkgKi8KKworCQlpZiAocHJpdi0+ZmlybV92ZXJzaW9uIDwgMHgwMzAyKSB7CisJCQlpZiAocHJpdi0+Y3VyX2Z3LnR5cGUgJiBEVFY3KQorCQkJCW9mZnNldCArPSA1MDAwMDA7CisJCX0gZWxzZSB7CisJCQlpZiAocHJpdi0+Y3VyX2Z3LnR5cGUgJiBEVFY3KQorCQkJCW9mZnNldCAtPSAzMDAwMDA7CisJCQllbHNlIGlmICh0eXBlICE9IEFUU0MpIC8qIERWQiBANk1IeiwgRFRWIDggYW5kIERUViA3LzggKi8KKwkJCQlvZmZzZXQgKz0gMjAwMDAwOworCQl9CisjZW5kaWYKIAl9CiAKIAlkaXYgPSAoZnJlcSAtIG9mZnNldCArIERJViAvIDIpIC8gRElWOwpAQCAtMTA5NywxNyArMTEzNSwyNCBAQAogCiAJLyogQWxsIFMtY29kZSB0YWJsZXMgbmVlZCBhIDIwMGtIeiBzaGlmdCAqLwogCWlmIChwcml2LT5jdHJsLmRlbW9kKSB7Ci0JCWRlbW9kID0gcHJpdi0+Y3RybC5kZW1vZCArIDIwMDsKKwkJZGVtb2QgPSBwcml2LT5jdHJsLmRlbW9kOworCisJCS8qCisJCSAqIE5ld2VyIGZpcm13YXJlcyByZXF1aXJlIGEgMjAwIGtIeiBvZmZzZXQgb25seSBmb3IgQVRTQworCQkgKi8KKwkJaWYgKHR5cGUgPT0gQVRTQyB8fCBwcml2LT5maXJtX3ZlcnNpb24gPCAweDAzMDIpCisJCQlkZW1vZCArPSAyMDA7CiAJCS8qCiAJCSAqIFRoZSBEVFY3IFMtY29kZSB0YWJsZSBuZWVkcyBhIDcwMCBrSHogc2hpZnQuCi0JCSAqIFRoYW5rcyB0byBUZXJyeSBXdSA8dGVycnl3dTIwMDlAZ21haWwuY29tPiBmb3IgcmVwb3J0aW5nIHRoaXMKIAkJICoKIAkJICogRFRWNyBpcyBvbmx5IHVzZWQgaW4gQXVzdHJhbGlhLiAgR2VybWFueSBvciBJdGFseSBtYXkgYWxzbwogCQkgKiB1c2UgdGhpcyBmaXJtd2FyZSBhZnRlciBpbml0aWFsaXphdGlvbiwgYnV0IGEgdHVuZSB0byBhIFVIRgogCQkgKiBjaGFubmVsIHNob3VsZCB0aGVuIGNhdXNlIERUVjc4IHRvIGJlIHVzZWQuCisJCSAqCisJCSAqIFVuZm9ydHVuYXRlbHksIG9uIHJlYWwtZmllbGQgdGVzdHMsIHRoZSBzLWNvZGUgb2Zmc2V0CisJCSAqIGRpZG4ndCB3b3JrIGFzIGV4cGVjdGVkLCBhcyByZXBvcnRlZCBieQorCQkgKiBSb2JlcnQgTG93ZXJ5IDxyZ2xvd2VyeUBleGVtYWlsLmNvbS5hdT4KIAkJICovCi0JCWlmICh0eXBlICYgRFRWNykKLQkJCWRlbW9kICs9IDUwMDsKIAl9CiAKIAlyZXR1cm4gZ2VuZXJpY19zZXRfZnJlcShmZSwgcC0+ZnJlcXVlbmN5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKaW5kZXggY2Y4ZjY1Zi4uMTYxY2NmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCkBAIC03Niw2ICs3NiwxMCBAQAogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQwogCXNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL0tjb25maWciCiAKK2NvbW1lbnQgIlN1cHBvcnRlZCBuR2VuZSBBZGFwdGVycyIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMKKwlzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL25nZW5lL0tjb25maWciCisKIGNvbW1lbnQgIlN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlCmluZGV4IGMxMjkyMmMuLmExYTA4NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBACiAJCXNpYW5vLwkJXAogCQlkbTExMDUvCQlcCiAJCXB0MS8JCVwKLQkJbWFudGlzLworCQltYW50aXMvCQlcCisJCW5nZW5lLwogCiBvYmotJChDT05GSUdfRFZCX0ZJUkVEVFYpCSs9IGZpcmV3aXJlLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmMKaW5kZXggYTI0YzEyNS4uOTlkNjIwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9idDg3OC5jCkBAIC01NzYsNDMgKzU3NiwzMCBAQAogICAgICAgLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGJ0ODc4X3JlbW92ZSksCiB9OwogCi1zdGF0aWMgaW50IGJ0ODc4X3BjaV9kcml2ZXJfcmVnaXN0ZXJlZDsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBNb2R1bGUgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IGJ0ODc4X2luaXRfbW9kdWxlKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBidDg3OF9pbml0X21vZHVsZSh2b2lkKQogewogCWJ0ODc4X251bSA9IDA7Ci0JYnQ4NzhfcGNpX2RyaXZlcl9yZWdpc3RlcmVkID0gMDsKIAogCXByaW50ayhLRVJOX0lORk8gImJ0ODc4OiBBVURJTyBkcml2ZXIgdmVyc2lvbiAlZC4lZC4lZCBsb2FkZWRcbiIsCiAJICAgICAgIChCVDg3OF9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKIAkgICAgICAgKEJUODc4X1ZFUlNJT05fQ09ERSA+PiA4KSAmIDB4ZmYsCiAJICAgICAgIEJUODc4X1ZFUlNJT05fQ09ERSAmIDB4ZmYpOwotLyoKLQlidDg3OF9jaGVja19jaGlwc2V0KCk7Ci0qLwotCS8qIGxhdGVyIHdlIHJlZ2lzdGVyIGluc2lkZSBvZiBidDg3OF9maW5kX2F1ZGlvX2RtYSgpCi0JICogYmVjYXVzZSB3ZSBtYXkgd2FudCB0byBpZ25vcmUgY2VydGFpbiBjYXJkcyAqLwotCWJ0ODc4X3BjaV9kcml2ZXJfcmVnaXN0ZXJlZCA9IDE7CisKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYnQ4NzhfcGNpX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGJ0ODc4X2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgYnQ4NzhfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlpZiAoYnQ4NzhfcGNpX2RyaXZlcl9yZWdpc3RlcmVkKSB7Ci0JCWJ0ODc4X3BjaV9kcml2ZXJfcmVnaXN0ZXJlZCA9IDA7Ci0JCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYnQ4NzhfcGNpX2RyaXZlcik7Ci0JfQotCXJldHVybjsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmJ0ODc4X3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChidDg3OF9pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChidDg3OF9jbGVhbnVwX21vZHVsZSk7CiAKLS8vTU9EVUxFX0FVVEhPUigiWFhYIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCmluZGV4IDkxMzUzYTYuLjhiMGNkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCkBAIC0xMzUyLDggKzEzNTIsNyBAQAogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAlpZiAoKHN0YXRlLT50eXBlX2ZsYWdzICYgRFNUX1RZUEVfSEFTX1ZMRikgJiYKLQkJIShzdGF0ZS0+ZHN0X3R5cGUgPT0gRFNUX1RZUEVfSVNfQ0FCTEUpICYmCi0JCSEoc3RhdGUtPmRzdF90eXBlID09IERTVF9UWVBFX0lTX0FUU0MpKSB7CisJICAgIShzdGF0ZS0+ZHN0X3R5cGUgPT0gRFNUX1RZUEVfSVNfQVRTQykpIHsKIAogCQlpZiAoc3RhdGUtPnJ4X3R1bmFbOV0gIT0gZHN0X2NoZWNrX3N1bSgmc3RhdGUtPnJ4X3R1bmFbMF0sIDkpKSB7CiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9JTkZPLCAxLCAiY2hlY2tzdW0gZmFpbHVyZSA/ICIpOwpAQCAtMTgyMCw4ICsxODE5LDEzIEBACiAJCS5mcmVxdWVuY3lfbWF4ID0gODU4MDAwMDAwLAogCQkuc3ltYm9sX3JhdGVfbWluID0gMTAwMDAwMCwKIAkJLnN5bWJvbF9yYXRlX21heCA9IDQ1MDAwMDAwLAotCS8qICAgICAuIHN5bWJvbF9yYXRlX3RvbGVyYW5jZQk9CT8/PywqLwotCQkuY2FwcyA9IEZFX0NBTl9GRUNfQVVUTyB8IEZFX0NBTl9RQU1fQVVUTworCQkuY2FwcyA9IEZFX0NBTl9GRUNfQVVUTyB8CisJCQlGRV9DQU5fUUFNX0FVVE8gfAorCQkJRkVfQ0FOX1FBTV8xNgl8CisJCQlGRV9DQU5fUUFNXzMyCXwKKwkJCUZFX0NBTl9RQU1fNjQJfAorCQkJRkVfQ0FOX1FBTV8xMjgJfAorCQkJRkVfQ0FOX1FBTV8yNTYKIAl9LAogCiAJLnJlbGVhc2UgPSBkc3RfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcKaW5kZXggZGUzZWViMGEuLjY5NTIzOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnCkBAIC04LDYgKzgsNyBAQAogCXNlbGVjdCBEVkJfU1RCNjAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfQ1gyNDExNiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfU0kyMVhYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9EUzMwMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgVklERU9fSVIKIAloZWxwCiAJICBTdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUgU0RNQyBETTExMDUgUENJIGNoaXAgbGlrZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCmluZGV4IGYwZjQ4M2EuLjM4M2NjYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJzaTIxeHguaCIKICNpbmNsdWRlICJjeDI0MTE2LmgiCiAjaW5jbHVkZSAiejAxOTRhLmgiCisjaW5jbHVkZSAiZHMzMDAwLmgiCiAKICNkZWZpbmUgVU5TRVQgKC0xVSkKIApAQCAtMjY5LDcgKzI3MCw3IEBACiAJdTMyCQkJaXJfY29tbWFuZDsKIH07CiAKLXN0cnVjdCBkbTExMDVkdmIgeworc3RydWN0IGRtMTEwNV9kZXYgewogCS8qIHBjaSAqLwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXU4IF9faW9tZW0gKmlvX21lbTsKQEAgLTMwOCwzMSArMzA5LDQ3IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAotI2RlZmluZSBkbV9pb19tZW0ocmVnKQkoKHVuc2lnbmVkIGxvbmcpKCZkbTExMDVkdmItPmlvX21lbVtyZWddKSkKKyNkZWZpbmUgZG1faW9fbWVtKHJlZykJKCh1bnNpZ25lZCBsb25nKSgmZGV2LT5pb19tZW1bcmVnXSkpCisKKyNkZWZpbmUgZG1fcmVhZGIocmVnKQkJaW5iKGRtX2lvX21lbShyZWcpKQorI2RlZmluZSBkbV93cml0ZWIocmVnLCB2YWx1ZSkJb3V0YigodmFsdWUpLCAoZG1faW9fbWVtKHJlZykpKQorCisjZGVmaW5lIGRtX3JlYWR3KHJlZykJCWludyhkbV9pb19tZW0ocmVnKSkKKyNkZWZpbmUgZG1fd3JpdGV3KHJlZywgdmFsdWUpCW91dHcoKHZhbHVlKSwgKGRtX2lvX21lbShyZWcpKSkKKworI2RlZmluZSBkbV9yZWFkbChyZWcpCQlpbmwoZG1faW9fbWVtKHJlZykpCisjZGVmaW5lIGRtX3dyaXRlbChyZWcsIHZhbHVlKQlvdXRsKCh2YWx1ZSksIChkbV9pb19tZW0ocmVnKSkpCisKKyNkZWZpbmUgZG1fYW5kb3JsKHJlZywgbWFzaywgdmFsdWUpIFwKKwlvdXRsKChpbmwoZG1faW9fbWVtKHJlZykpICYgfihtYXNrKSkgfFwKKwkJKCh2YWx1ZSkgJiAobWFzaykpLCAoZG1faW9fbWVtKHJlZykpKQorCisjZGVmaW5lIGRtX3NldGwocmVnLCBiaXQpCWRtX2FuZG9ybCgocmVnKSwgKGJpdCksIChiaXQpKQorI2RlZmluZSBkbV9jbGVhcmwocmVnLCBiaXQpCWRtX2FuZG9ybCgocmVnKSwgKGJpdCksIDApCiAKIHN0YXRpYyBpbnQgZG0xMTA1X2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCiAJCQkgICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCiB7Ci0Jc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiIDsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2IDsKIAogCWludCBhZGRyLCByYywgaSwgaiwgaywgbGVuLCBieXRlLCBkYXRhOwogCXU4IHN0YXR1czsKIAotCWRtMTEwNWR2YiA9IGkyY19hZGFwLT5hbGdvX2RhdGE7CisJZGV2ID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLQkJb3V0YigweDAwLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0NUUikpOworCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0NUUiwgMHgwMCk7CiAJCWlmIChtc2dzW2ldLmZsYWdzICYgSTJDX01fUkQpIHsKIAkJCS8qIHJlYWQgYnl0ZXMgKi8KIAkJCWFkZHIgID0gbXNnc1tpXS5hZGRyIDw8IDE7CiAJCQlhZGRyIHw9IDE7Ci0JCQlvdXRiKGFkZHIsIGRtX2lvX21lbShETTExMDVfSTJDREFUKSk7CisJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0RBVCwgYWRkcik7CiAJCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgbXNnc1tpXS5sZW47IGJ5dGUrKykKLQkJCQlvdXRiKDAsIGRtX2lvX21lbShETTExMDVfSTJDREFUICsgYnl0ZSArIDEpKTsKKwkJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAxLCAwKTsKIAotCQkJb3V0YigweDgxICsgbXNnc1tpXS5sZW4sIGRtX2lvX21lbShETTExMDVfSTJDQ1RSKSk7CisJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0NUUiwgMHg4MSArIG1zZ3NbaV0ubGVuKTsKIAkJCWZvciAoaiA9IDA7IGogPCA1NTsgaisrKSB7CiAJCQkJbWRlbGF5KDEwKTsKLQkJCQlzdGF0dXMgPSBpbmIoZG1faW9fbWVtKERNMTEwNV9JMkNTVFMpKTsKKwkJCQlzdGF0dXMgPSBkbV9yZWFkYihETTExMDVfSTJDU1RTKTsKIAkJCQlpZiAoKHN0YXR1cyAmIDB4YzApID09IDB4NDApCiAJCQkJCWJyZWFrOwogCQkJfQpAQCAtMzQwLDU2ICszNTcsNTQgQEAKIAkJCQlyZXR1cm4gLTE7CiAKIAkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCBtc2dzW2ldLmxlbjsgYnl0ZSsrKSB7Ci0JCQkJcmMgPSBpbmIoZG1faW9fbWVtKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMSkpOworCQkJCXJjID0gZG1fcmVhZGIoRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAxKTsKIAkJCQlpZiAocmMgPCAwKQogCQkJCQlnb3RvIGVycjsKIAkJCQltc2dzW2ldLmJ1ZltieXRlXSA9IHJjOwogCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKChtc2dzW2ldLmJ1ZlswXSA9PSAweGY3KSAmJiAobXNnc1tpXS5hZGRyID09IDB4NTUpKSB7Ci0JCQkJLyogcHJlcGFpcmVkIGZvciBjeDI0MTE2IGZpcm13YXJlICovCi0JCQkJLyogV3JpdGUgaW4gc21hbGwgYmxvY2tzICovCi0JCQkJbGVuID0gbXNnc1tpXS5sZW4gLSAxOwotCQkJCWsgPSAxOwotCQkJCWRvIHsKLQkJCQkJb3V0Yihtc2dzW2ldLmFkZHIgPDwgMSwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQpKTsKLQkJCQkJb3V0YigweGY3LCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCArIDEpKTsKLQkJCQkJZm9yIChieXRlID0gMDsgYnl0ZSA8IChsZW4gPiA0OCA/IDQ4IDogbGVuKTsgYnl0ZSsrKSB7Ci0JCQkJCQlkYXRhID0gbXNnc1tpXS5idWZbaytieXRlXTsKLQkJCQkJCW91dGIoZGF0YSwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMikpOwotCQkJCQl9Ci0JCQkJCW91dGIoMHg4MiArIChsZW4gPiA0OCA/IDQ4IDogbGVuKSwgZG1faW9fbWVtKERNMTEwNV9JMkNDVFIpKTsKLQkJCQkJZm9yIChqID0gMDsgaiA8IDI1OyBqKyspIHsKLQkJCQkJCW1kZWxheSgxMCk7Ci0JCQkJCQlzdGF0dXMgPSBpbmIoZG1faW9fbWVtKERNMTEwNV9JMkNTVFMpKTsKLQkJCQkJCWlmICgoc3RhdHVzICYgMHhjMCkgPT0gMHg0MCkKLQkJCQkJCQlicmVhazsKLQkJCQkJfQotCi0JCQkJCWlmIChqID49IDI1KQotCQkJCQkJcmV0dXJuIC0xOwotCi0JCQkJCWsgKz0gNDg7Ci0JCQkJCWxlbiAtPSA0ODsKLQkJCQl9IHdoaWxlIChsZW4gPiAwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogd3JpdGUgYnl0ZXMgKi8KLQkJCQlvdXRiKG1zZ3NbaV0uYWRkcjw8MSwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQpKTsKLQkJCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgbXNnc1tpXS5sZW47IGJ5dGUrKykgewotCQkJCQlkYXRhID0gbXNnc1tpXS5idWZbYnl0ZV07Ci0JCQkJCW91dGIoZGF0YSwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMSkpOworCQl9IGVsc2UgaWYgKChtc2dzW2ldLmJ1ZlswXSA9PSAweGY3KSAmJiAobXNnc1tpXS5hZGRyID09IDB4NTUpKSB7CisJCQkvKiBwcmVwYWlyZWQgZm9yIGN4MjQxMTYgZmlybXdhcmUgKi8KKwkJCS8qIFdyaXRlIGluIHNtYWxsIGJsb2NrcyAqLworCQkJbGVuID0gbXNnc1tpXS5sZW4gLSAxOworCQkJayA9IDE7CisJCQlkbyB7CisJCQkJZG1fd3JpdGViKERNMTEwNV9JMkNEQVQsIG1zZ3NbaV0uYWRkciA8PCAxKTsKKwkJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0RBVCArIDEsIDB4ZjcpOworCQkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCAobGVuID4gNDggPyA0OCA6IGxlbik7IGJ5dGUrKykgeworCQkJCQlkYXRhID0gbXNnc1tpXS5idWZbayArIGJ5dGVdOworCQkJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAyLCBkYXRhKTsKIAkJCQl9Ci0JCQkJb3V0YigweDgxICsgbXNnc1tpXS5sZW4sIGRtX2lvX21lbShETTExMDVfSTJDQ1RSKSk7CisJCQkJZG1fd3JpdGViKERNMTEwNV9JMkNDVFIsIDB4ODIgKyAobGVuID4gNDggPyA0OCA6IGxlbikpOwogCQkJCWZvciAoaiA9IDA7IGogPCAyNTsgaisrKSB7CiAJCQkJCW1kZWxheSgxMCk7Ci0JCQkJCXN0YXR1cyA9IGluYihkbV9pb19tZW0oRE0xMTA1X0kyQ1NUUykpOworCQkJCQlzdGF0dXMgPSBkbV9yZWFkYihETTExMDVfSTJDU1RTKTsKIAkJCQkJaWYgKChzdGF0dXMgJiAweGMwKSA9PSAweDQwKQogCQkJCQkJYnJlYWs7CiAJCQkJfQogCiAJCQkJaWYgKGogPj0gMjUpCiAJCQkJCXJldHVybiAtMTsKKworCQkJCWsgKz0gNDg7CisJCQkJbGVuIC09IDQ4OworCQkJfSB3aGlsZSAobGVuID4gMCk7CisJCX0gZWxzZSB7CisJCQkvKiB3cml0ZSBieXRlcyAqLworCQkJZG1fd3JpdGViKERNMTEwNV9JMkNEQVQsIG1zZ3NbaV0uYWRkciA8PCAxKTsKKwkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCBtc2dzW2ldLmxlbjsgYnl0ZSsrKSB7CisJCQkJZGF0YSA9IG1zZ3NbaV0uYnVmW2J5dGVdOworCQkJCWRtX3dyaXRlYihETTExMDVfSTJDREFUICsgYnl0ZSArIDEsIGRhdGEpOwogCQkJfQorCQkJZG1fd3JpdGViKERNMTEwNV9JMkNDVFIsIDB4ODEgKyBtc2dzW2ldLmxlbik7CisJCQlmb3IgKGogPSAwOyBqIDwgMjU7IGorKykgeworCQkJCW1kZWxheSgxMCk7CisJCQkJc3RhdHVzID0gZG1fcmVhZGIoRE0xMTA1X0kyQ1NUUyk7CisJCQkJaWYgKChzdGF0dXMgJiAweGMwKSA9PSAweDQwKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKGogPj0gMjUpCisJCQkJcmV0dXJuIC0xOwogCQl9CiAJfQogCXJldHVybiBudW07CkBAIC00MDcsMjIgKzQyMiwyMiBAQAogCS5mdW5jdGlvbmFsaXR5ID0gZnVuY3Rpb25hbGl0eSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRtMTEwNWR2YiAqZmVlZF90b19kbTExMDVkdmIoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZG0xMTA1X2RldiAqZmVlZF90b19kbTExMDVfZGV2KHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZCkKIHsKLQlyZXR1cm4gY29udGFpbmVyX29mKGZlZWQtPmRlbXV4LCBzdHJ1Y3QgZG0xMTA1ZHZiLCBkZW11eCk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihmZWVkLT5kZW11eCwgc3RydWN0IGRtMTEwNV9kZXYsIGRlbXV4KTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZG0xMTA1ZHZiICpmcm9udGVuZF90b19kbTExMDVkdmIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkbTExMDVfZGV2ICpmcm9udGVuZF90b19kbTExMDVfZGV2KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXJldHVybiBjb250YWluZXJfb2YoZmUtPmR2Yiwgc3RydWN0IGRtMTEwNWR2YiwgZHZiX2FkYXB0ZXIpOworCXJldHVybiBjb250YWluZXJfb2YoZmUtPmR2Yiwgc3RydWN0IGRtMTEwNV9kZXYsIGR2Yl9hZGFwdGVyKTsKIH0KIAotc3RhdGljIGludCBkbTExMDVkdmJfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3N0YXRpYyBpbnQgZG0xMTA1X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7Ci0Jc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiID0gZnJvbnRlbmRfdG9fZG0xMTA1ZHZiKGZlKTsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2ID0gZnJvbnRlbmRfdG9fZG0xMTA1X2RldihmZSk7CiAJdTMyIGxuYl9tYXNrLCBsbmJfMTN2LCBsbmJfMTh2LCBsbmJfb2ZmOwogCi0Jc3dpdGNoIChkbTExMDVkdmItPmJvYXJkbnIpIHsKKwlzd2l0Y2ggKGRldi0+Ym9hcmRucikgewogCWNhc2UgRE0xMTA1X0JPQVJEX0FYRVNTX0RNMDU6CiAJCWxuYl9tYXNrID0gRE0wNV9MTkJfTUFTSzsKIAkJbG5iX29mZiA9IERNMDVfTE5CX09GRjsKQEAgLTQzOCw2MiArNDUzLDY3IEBACiAJCWxuYl8xOHYgPSBETTExMDVfTE5CXzE4VjsKIAl9CiAKLQlvdXRsKGxuYl9tYXNrLCBkbV9pb19tZW0oRE0xMTA1X0dQSU9DVFIpKTsKKwlkbV93cml0ZWwoRE0xMTA1X0dQSU9DVFIsIGxuYl9tYXNrKTsKIAlpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xOCkKLQkJb3V0bChsbmJfMTh2ICwgZG1faW9fbWVtKERNMTEwNV9HUElPVkFMKSk7CisJCWRtX3dyaXRlbChETTExMDVfR1BJT1ZBTCwgbG5iXzE4dik7CiAJZWxzZSBpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xMykKLQkJb3V0bChsbmJfMTN2LCBkbV9pb19tZW0oRE0xMTA1X0dQSU9WQUwpKTsKKwkJZG1fd3JpdGVsKERNMTEwNV9HUElPVkFMLCBsbmJfMTN2KTsKIAllbHNlCi0JCW91dGwobG5iX29mZiwgZG1faW9fbWVtKERNMTEwNV9HUElPVkFMKSk7CisJCWRtX3dyaXRlbChETTExMDVfR1BJT1ZBTCwgbG5iX29mZik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZG0xMTA1ZHZiX3NldF9kbWFfYWRkcihzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgdm9pZCBkbTExMDVfc2V0X2RtYV9hZGRyKHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7Ci0Jb3V0bChjcHVfdG9fbGUzMihkbTExMDVkdmItPmRtYV9hZGRyKSwgZG1faW9fbWVtKERNMTEwNV9TVEFEUikpOworCWRtX3dyaXRlbChETTExMDVfU1RBRFIsIGNwdV90b19sZTMyKGRldi0+ZG1hX2FkZHIpKTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgZG0xMTA1ZHZiX2RtYV9tYXAoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQorc3RhdGljIGludCBfX2RldmluaXQgZG0xMTA1X2RtYV9tYXAoc3RydWN0IGRtMTEwNV9kZXYgKmRldikKIHsKLQlkbTExMDVkdmItPnRzX2J1ZiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRtMTEwNWR2Yi0+cGRldiwgNipETTExMDVfRE1BX0JZVEVTLCAmZG0xMTA1ZHZiLT5kbWFfYWRkcik7CisJZGV2LT50c19idWYgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBkZXYsCisJCQkJCTYgKiBETTExMDVfRE1BX0JZVEVTLAorCQkJCQkmZGV2LT5kbWFfYWRkcik7CiAKLQlyZXR1cm4gIWRtMTEwNWR2Yi0+dHNfYnVmOworCXJldHVybiAhZGV2LT50c19idWY7CiB9CiAKLXN0YXRpYyB2b2lkIGRtMTEwNWR2Yl9kbWFfdW5tYXAoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQorc3RhdGljIHZvaWQgZG0xMTA1X2RtYV91bm1hcChzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2KQogewotCXBjaV9mcmVlX2NvbnNpc3RlbnQoZG0xMTA1ZHZiLT5wZGV2LCA2KkRNMTEwNV9ETUFfQllURVMsIGRtMTEwNWR2Yi0+dHNfYnVmLCBkbTExMDVkdmItPmRtYV9hZGRyKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGRldiwKKwkJCTYgKiBETTExMDVfRE1BX0JZVEVTLAorCQkJZGV2LT50c19idWYsCisJCQlkZXYtPmRtYV9hZGRyKTsKIH0KIAotc3RhdGljIHZvaWQgZG0xMTA1ZHZiX2VuYWJsZV9pcnFzKHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YikKK3N0YXRpYyB2b2lkIGRtMTEwNV9lbmFibGVfaXJxcyhzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2KQogewotCW91dGIoSU5UTUFLX0FMTE1BU0ssIGRtX2lvX21lbShETTExMDVfSU5UTUFLKSk7Ci0Jb3V0YigxLCBkbV9pb19tZW0oRE0xMTA1X0NSKSk7CisJZG1fd3JpdGViKERNMTEwNV9JTlRNQUssIElOVE1BS19BTExNQVNLKTsKKwlkbV93cml0ZWIoRE0xMTA1X0NSLCAxKTsKIH0KIAotc3RhdGljIHZvaWQgZG0xMTA1ZHZiX2Rpc2FibGVfaXJxcyhzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgdm9pZCBkbTExMDVfZGlzYWJsZV9pcnFzKHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7Ci0Jb3V0YihJTlRNQUtfSVJNLCBkbV9pb19tZW0oRE0xMTA1X0lOVE1BSykpOwotCW91dGIoMCwgZG1faW9fbWVtKERNMTEwNV9DUikpOworCWRtX3dyaXRlYihETTExMDVfSU5UTUFLLCBJTlRNQUtfSVJNKTsKKwlkbV93cml0ZWIoRE0xMTA1X0NSLCAwKTsKIH0KIAotc3RhdGljIGludCBkbTExMDVkdmJfc3RhcnRfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmYpCitzdGF0aWMgaW50IGRtMTEwNV9zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZikKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPSBmZWVkX3RvX2RtMTEwNWR2YihmKTsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2ID0gZmVlZF90b19kbTExMDVfZGV2KGYpOwogCi0JaWYgKGRtMTEwNWR2Yi0+ZnVsbF90c191c2VycysrID09IDApCi0JCWRtMTEwNWR2Yl9lbmFibGVfaXJxcyhkbTExMDVkdmIpOworCWlmIChkZXYtPmZ1bGxfdHNfdXNlcnMrKyA9PSAwKQorCQlkbTExMDVfZW5hYmxlX2lycXMoZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRtMTEwNWR2Yl9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmKQorc3RhdGljIGludCBkbTExMDVfc3RvcF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZikKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPSBmZWVkX3RvX2RtMTEwNWR2YihmKTsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2ID0gZmVlZF90b19kbTExMDVfZGV2KGYpOwogCi0JaWYgKC0tZG0xMTA1ZHZiLT5mdWxsX3RzX3VzZXJzID09IDApCi0JCWRtMTEwNWR2Yl9kaXNhYmxlX2lycXMoZG0xMTA1ZHZiKTsKKwlpZiAoLS1kZXYtPmZ1bGxfdHNfdXNlcnMgPT0gMCkKKwkJZG0xMTA1X2Rpc2FibGVfaXJxcyhkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MTcsNjggKzUzNyw2NCBAQAogLyogd29yayBoYW5kbGVyICovCiBzdGF0aWMgdm9pZCBkbTExMDVfZG14X2J1ZmZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiID0KLQkJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtMTEwNWR2Yiwgd29yayk7CisJc3RydWN0IGRtMTEwNV9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZG0xMTA1X2Rldiwgd29yayk7CiAJdW5zaWduZWQgaW50IG5icGFja2V0czsKLQl1MzIgb2xkd3JwID0gZG0xMTA1ZHZiLT53cnA7Ci0JdTMyIG5leHR3cnAgPSBkbTExMDVkdmItPm5leHR3cnA7CisJdTMyIG9sZHdycCA9IGRldi0+d3JwOworCXUzMiBuZXh0d3JwID0gZGV2LT5uZXh0d3JwOwogCi0JaWYgKCEoKGRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycF0gPT0gMHg0NykgJiYKLQkJCShkbTExMDVkdmItPnRzX2J1ZltvbGR3cnAgKyAxODhdID09IDB4NDcpICYmCi0JCQkoZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwICsgMTg4ICogMl0gPT0gMHg0NykpKSB7Ci0JCWRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCsrOworCWlmICghKChkZXYtPnRzX2J1ZltvbGR3cnBdID09IDB4NDcpICYmCisJCQkoZGV2LT50c19idWZbb2xkd3JwICsgMTg4XSA9PSAweDQ3KSAmJgorCQkJKGRldi0+dHNfYnVmW29sZHdycCArIDE4OCAqIDJdID09IDB4NDcpKSkgeworCQlkZXYtPlBhY2tldEVycm9yQ291bnQrKzsKIAkJLyogYmFkIHBhY2tldCBmb3VuZCAqLwotCQlpZiAoKGRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCA+PSAyKSAmJgotCQkJCShkbTExMDVkdmItPmRtYXJzdCA9PSAwKSkgewotCQkJb3V0YigxLCBkbV9pb19tZW0oRE0xMTA1X1JTVCkpOwotCQkJZG0xMTA1ZHZiLT53cnAgPSAwOwotCQkJZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50ID0gMDsKLQkJCWRtMTEwNWR2Yi0+ZG1hcnN0ID0gMDsKKwkJaWYgKChkZXYtPlBhY2tldEVycm9yQ291bnQgPj0gMikgJiYKKwkJCQkoZGV2LT5kbWFyc3QgPT0gMCkpIHsKKwkJCWRtX3dyaXRlYihETTExMDVfUlNULCAxKTsKKwkJCWRldi0+d3JwID0gMDsKKwkJCWRldi0+UGFja2V0RXJyb3JDb3VudCA9IDA7CisJCQlkZXYtPmRtYXJzdCA9IDA7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKIAlpZiAobmV4dHdycCA8IG9sZHdycCkgewotCQltZW1jcHkoZG0xMTA1ZHZiLT50c19idWYgKyBkbTExMDVkdmItPmJ1ZmZlcl9zaXplLAotCQkJCQkJZG0xMTA1ZHZiLT50c19idWYsIG5leHR3cnApOwotCQluYnBhY2tldHMgPSAoKGRtMTEwNWR2Yi0+YnVmZmVyX3NpemUgLSBvbGR3cnApICsgbmV4dHdycCkgLyAxODg7CisJCW1lbWNweShkZXYtPnRzX2J1ZiArIGRldi0+YnVmZmVyX3NpemUsIGRldi0+dHNfYnVmLCBuZXh0d3JwKTsKKwkJbmJwYWNrZXRzID0gKChkZXYtPmJ1ZmZlcl9zaXplIC0gb2xkd3JwKSArIG5leHR3cnApIC8gMTg4OwogCX0gZWxzZQogCQluYnBhY2tldHMgPSAobmV4dHdycCAtIG9sZHdycCkgLyAxODg7CiAKLQlkbTExMDVkdmItPndycCA9IG5leHR3cnA7Ci0JZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZkbTExMDVkdmItPmRlbXV4LAotCQkJCQkmZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwXSwgbmJwYWNrZXRzKTsKKwlkZXYtPndycCA9IG5leHR3cnA7CisJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZkZXYtPmRlbXV4LCAmZGV2LT50c19idWZbb2xkd3JwXSwgbmJwYWNrZXRzKTsKIH0KIAotc3RhdGljIGlycXJldHVybl90IGRtMTEwNWR2Yl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IGRtMTEwNV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IGRldl9pZDsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2ID0gZGV2X2lkOwogCiAJLyogUmVhZC1Xcml0ZSBJTlNUUyBBY2sncyBJbnRlcnJ1cHQgZm9yIERNMTEwNSBjaGlwIDE2LjAzLjIwMDggKi8KLQl1bnNpZ25lZCBpbnQgaW50c3RzID0gaW5iKGRtX2lvX21lbShETTExMDVfSU5UU1RTKSk7Ci0Jb3V0YihpbnRzdHMsIGRtX2lvX21lbShETTExMDVfSU5UU1RTKSk7CisJdW5zaWduZWQgaW50IGludHN0cyA9IGRtX3JlYWRiKERNMTEwNV9JTlRTVFMpOworCWRtX3dyaXRlYihETTExMDVfSU5UU1RTLCBpbnRzdHMpOwogCiAJc3dpdGNoIChpbnRzdHMpIHsKIAljYXNlIElOVFNUU19UU0lSUToKIAljYXNlIChJTlRTVFNfVFNJUlEgfCBJTlRTVFNfSVIpOgotCQlkbTExMDVkdmItPm5leHR3cnAgPSBpbmwoZG1faW9fbWVtKERNMTEwNV9XUlApKSAtCi0JCQkJCWlubChkbV9pb19tZW0oRE0xMTA1X1NUQURSKSk7Ci0JCXF1ZXVlX3dvcmsoZG0xMTA1ZHZiLT53cSwgJmRtMTEwNWR2Yi0+d29yayk7CisJCWRldi0+bmV4dHdycCA9IGRtX3JlYWRsKERNMTEwNV9XUlApIC0gZG1fcmVhZGwoRE0xMTA1X1NUQURSKTsKKwkJcXVldWVfd29yayhkZXYtPndxLCAmZGV2LT53b3JrKTsKIAkJYnJlYWs7CiAJY2FzZSBJTlRTVFNfSVI6Ci0JCWRtMTEwNWR2Yi0+aXIuaXJfY29tbWFuZCA9IGlubChkbV9pb19tZW0oRE0xMTA1X0lSQ09ERSkpOwotCQlzY2hlZHVsZV93b3JrKCZkbTExMDVkdmItPmlyLndvcmspOworCQlkZXYtPmlyLmlyX2NvbW1hbmQgPSBkbV9yZWFkbChETTExMDVfSVJDT0RFKTsKKwkJc2NoZWR1bGVfd29yaygmZGV2LT5pci53b3JrKTsKIAkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1pbnQgX19kZXZpbml0IGRtMTEwNV9pcl9pbml0KHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNSkKK2ludCBfX2RldmluaXQgZG0xMTA1X2lyX2luaXQoc3RydWN0IGRtMTEwNV9kZXYgKmRtMTEwNSkKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICppcl9jb2RlcyA9ICZpcl9jb2Rlc19kbTExMDVfbmVjX3RhYmxlOwotCWludCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKKwl1NjQgaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKQEAgLTYxMSw1MSArNjI3LDUxIEBACiAKIAlJTklUX1dPUksoJmRtMTEwNS0+aXIud29yaywgZG0xMTA1X2VtaXRfa2V5KTsKIAotCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlucHV0X2RldiwgaXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlucHV0X2RldiwgaXJfY29kZXMsIE5VTEwpOwogCiAJcmV0dXJuIGVycjsKIH0KIAotdm9pZCBfX2RldmV4aXQgZG0xMTA1X2lyX2V4aXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1KQordm9pZCBfX2RldmV4aXQgZG0xMTA1X2lyX2V4aXQoc3RydWN0IGRtMTEwNV9kZXYgKmRtMTEwNSkKIHsKIAlpcl9pbnB1dF91bnJlZ2lzdGVyKGRtMTEwNS0+aXIuaW5wdXRfZGV2KTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgZG0xMTA1ZHZiX2h3X2luaXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQorc3RhdGljIGludCBfX2RldmluaXQgZG0xMTA1X2h3X2luaXQoc3RydWN0IGRtMTEwNV9kZXYgKmRldikKIHsKLQlkbTExMDVkdmJfZGlzYWJsZV9pcnFzKGRtMTEwNWR2Yik7CisJZG0xMTA1X2Rpc2FibGVfaXJxcyhkZXYpOwogCi0Jb3V0YigwLCBkbV9pb19tZW0oRE0xMTA1X0hPU1RfQ1RSKSk7CisJZG1fd3JpdGViKERNMTEwNV9IT1NUX0NUUiwgMCk7CiAKIAkvKkRBVEFMRU4gMTg4LCovCi0Jb3V0YigxODgsIGRtX2lvX21lbShETTExMDVfRFRBTEVOVEgpKTsKKwlkbV93cml0ZWIoRE0xMTA1X0RUQUxFTlRILCAxODgpOwogCS8qVFNfU1RSVCBUU19WQUxQIE1TQkZJUlNUIFRTX01PREUgQUxQQVMgVFNQRVMqLwotCW91dHcoMHhjMTBhLCBkbV9pb19tZW0oRE0xMTA1X1RTQ1RSKSk7CisJZG1fd3JpdGV3KERNMTEwNV9UU0NUUiwgMHhjMTBhKTsKIAogCS8qIG1hcCBETUEgYW5kIHNldCBhZGRyZXNzICovCi0JZG0xMTA1ZHZiX2RtYV9tYXAoZG0xMTA1ZHZiKTsKLQlkbTExMDVkdmJfc2V0X2RtYV9hZGRyKGRtMTEwNWR2Yik7CisJZG0xMTA1X2RtYV9tYXAoZGV2KTsKKwlkbTExMDVfc2V0X2RtYV9hZGRyKGRldik7CiAJLyogYmlnIGJ1ZmZlciAqLwotCW91dGwoNSpETTExMDVfRE1BX0JZVEVTLCBkbV9pb19tZW0oRE0xMTA1X1JMRU4pKTsKLQlvdXRiKDQ3LCBkbV9pb19tZW0oRE0xMTA1X0lOVENOVCkpOworCWRtX3dyaXRlbChETTExMDVfUkxFTiwgNSAqIERNMTEwNV9ETUFfQllURVMpOworCWRtX3dyaXRlYihETTExMDVfSU5UQ05ULCA0Nyk7CiAKIAkvKiBJUiBORUMgbW9kZSBlbmFibGUgKi8KLQlvdXRiKChETTExMDVfSVJfRU4gfCBETTExMDVfU1lTX0NISyksIGRtX2lvX21lbShETTExMDVfSVJDVFIpKTsKLQlvdXRiKDAsIGRtX2lvX21lbShETTExMDVfSVJNT0RFKSk7Ci0Jb3V0dygwLCBkbV9pb19tZW0oRE0xMTA1X1NZU1RFTUNPREUpKTsKKwlkbV93cml0ZWIoRE0xMTA1X0lSQ1RSLCAoRE0xMTA1X0lSX0VOIHwgRE0xMTA1X1NZU19DSEspKTsKKwlkbV93cml0ZWIoRE0xMTA1X0lSTU9ERSwgMCk7CisJZG1fd3JpdGV3KERNMTEwNV9TWVNURU1DT0RFLCAwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkbTExMDVkdmJfaHdfZXhpdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgdm9pZCBkbTExMDVfaHdfZXhpdChzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2KQogewotCWRtMTEwNWR2Yl9kaXNhYmxlX2lycXMoZG0xMTA1ZHZiKTsKKwlkbTExMDVfZGlzYWJsZV9pcnFzKGRldik7CiAKIAkvKiBJUiBkaXNhYmxlICovCi0Jb3V0YigwLCBkbV9pb19tZW0oRE0xMTA1X0lSQ1RSKSk7Ci0Jb3V0YihJTlRNQUtfTk9ORU1BU0ssIGRtX2lvX21lbShETTExMDVfSU5UTUFLKSk7CisJZG1fd3JpdGViKERNMTEwNV9JUkNUUiwgMCk7CisJZG1fd3JpdGViKERNMTEwNV9JTlRNQUssIElOVE1BS19OT05FTUFTSyk7CiAKLQlkbTExMDVkdmJfZG1hX3VubWFwKGRtMTEwNWR2Yik7CisJZG0xMTA1X2RtYV91bm1hcChkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIHNoYXJwX3owMTk0YV9jb25maWcgPSB7CkBAIC02ODUsNzAgKzcwMSw3OSBAQAogCS5kZW1vZF9hZGRyZXNzID0gMHg1NSwKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGZyb250ZW5kX2luaXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQorc3RhdGljIHN0cnVjdCBkczMwMDBfY29uZmlnIGR2YndvcmxkX2RzMzAwMF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgZnJvbnRlbmRfaW5pdChzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2KQogewogCWludCByZXQ7CiAKLQlzd2l0Y2ggKGRtMTEwNWR2Yi0+Ym9hcmRucikgeworCXN3aXRjaCAoZGV2LT5ib2FyZG5yKSB7CiAJY2FzZSBETTExMDVfQk9BUkRfRFZCV09STERfMjAwNDoKLQkJZG0xMTA1ZHZiLT5mZSA9IGR2Yl9hdHRhY2goCisJCWRldi0+ZmUgPSBkdmJfYXR0YWNoKAogCQkJY3gyNDExNl9hdHRhY2gsICZzZXJpdF9zcDI2MzNfY29uZmlnLAotCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOwotCQlpZiAoZG0xMTA1ZHZiLT5mZSkKLQkJCWRtMTEwNWR2Yi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMTEwNWR2Yl9zZXRfdm9sdGFnZTsKKwkJCSZkZXYtPmkyY19hZGFwKTsKKwkJaWYgKGRldi0+ZmUpIHsKKwkJCWRldi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMTEwNV9zZXRfdm9sdGFnZTsKKwkJCWJyZWFrOworCQl9CisKKwkJZGV2LT5mZSA9IGR2Yl9hdHRhY2goCisJCQlkczMwMDBfYXR0YWNoLCAmZHZid29ybGRfZHMzMDAwX2NvbmZpZywKKwkJCSZkZXYtPmkyY19hZGFwKTsKKwkJaWYgKGRldi0+ZmUpCisJCQlkZXYtPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBkbTExMDVfc2V0X3ZvbHRhZ2U7CiAKIAkJYnJlYWs7CiAJY2FzZSBETTExMDVfQk9BUkRfRFZCV09STERfMjAwMjoKIAljYXNlIERNMTEwNV9CT0FSRF9BWEVTU19ETTA1OgogCWRlZmF1bHQ6Ci0JCWRtMTEwNWR2Yi0+ZmUgPSBkdmJfYXR0YWNoKAorCQlkZXYtPmZlID0gZHZiX2F0dGFjaCgKIAkJCXN0djAyOTlfYXR0YWNoLCAmc2hhcnBfejAxOTRhX2NvbmZpZywKLQkJCSZkbTExMDVkdmItPmkyY19hZGFwKTsKLQkJaWYgKGRtMTEwNWR2Yi0+ZmUpIHsKLQkJCWRtMTEwNWR2Yi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9Ci0JCQkJCQkJZG0xMTA1ZHZiX3NldF92b2x0YWdlOwotCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZG0xMTA1ZHZiLT5mZSwgMHg2MCwKLQkJCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXAsIERWQl9QTExfT1BFUkExKTsKKwkJCSZkZXYtPmkyY19hZGFwKTsKKwkJaWYgKGRldi0+ZmUpIHsKKwkJCWRldi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMTEwNV9zZXRfdm9sdGFnZTsKKwkJCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZmUsIDB4NjAsCisJCQkJCSZkZXYtPmkyY19hZGFwLCBEVkJfUExMX09QRVJBMSk7CiAJCQlicmVhazsKIAkJfQogCi0JCWRtMTEwNWR2Yi0+ZmUgPSBkdmJfYXR0YWNoKAorCQlkZXYtPmZlID0gZHZiX2F0dGFjaCgKIAkJCXN0djAyODhfYXR0YWNoLCAmZWFyZGFfY29uZmlnLAotCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOwotCQlpZiAoZG0xMTA1ZHZiLT5mZSkgewotCQkJZG0xMTA1ZHZiLT5mZS0+b3BzLnNldF92b2x0YWdlID0KLQkJCQkJCWRtMTEwNWR2Yl9zZXRfdm9sdGFnZTsKLQkJCWR2Yl9hdHRhY2goc3RiNjAwMF9hdHRhY2gsIGRtMTEwNWR2Yi0+ZmUsIDB4NjEsCi0JCQkJCSZkbTExMDVkdmItPmkyY19hZGFwKTsKKwkJCSZkZXYtPmkyY19hZGFwKTsKKwkJaWYgKGRldi0+ZmUpIHsKKwkJCWRldi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMTEwNV9zZXRfdm9sdGFnZTsKKwkJCWR2Yl9hdHRhY2goc3RiNjAwMF9hdHRhY2gsIGRldi0+ZmUsIDB4NjEsCisJCQkJCSZkZXYtPmkyY19hZGFwKTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJZG0xMTA1ZHZiLT5mZSA9IGR2Yl9hdHRhY2goCisJCWRldi0+ZmUgPSBkdmJfYXR0YWNoKAogCQkJc2kyMXh4X2F0dGFjaCwgJnNlcml0X2NvbmZpZywKLQkJCSZkbTExMDVkdmItPmkyY19hZGFwKTsKLQkJaWYgKGRtMTEwNWR2Yi0+ZmUpCi0JCQlkbTExMDVkdmItPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPQotCQkJCQkJZG0xMTA1ZHZiX3NldF92b2x0YWdlOworCQkJJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5mZSkKKwkJCWRldi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMTEwNV9zZXRfdm9sdGFnZTsKIAogCX0KIAotCWlmICghZG0xMTA1ZHZiLT5mZSkgewotCQlkZXZfZXJyKCZkbTExMDVkdmItPnBkZXYtPmRldiwgImNvdWxkIG5vdCBhdHRhY2ggZnJvbnRlbmRcbiIpOworCWlmICghZGV2LT5mZSkgeworCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgImNvdWxkIG5vdCBhdHRhY2ggZnJvbnRlbmRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXQgPSBkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoJmRtMTEwNWR2Yi0+ZHZiX2FkYXB0ZXIsIGRtMTEwNWR2Yi0+ZmUpOworCXJldCA9IGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmZGV2LT5kdmJfYWRhcHRlciwgZGV2LT5mZSk7CiAJaWYgKHJldCA8IDApIHsKLQkJaWYgKGRtMTEwNWR2Yi0+ZmUtPm9wcy5yZWxlYXNlKQotCQkJZG0xMTA1ZHZiLT5mZS0+b3BzLnJlbGVhc2UoZG0xMTA1ZHZiLT5mZSk7Ci0JCWRtMTEwNWR2Yi0+ZmUgPSBOVUxMOworCQlpZiAoZGV2LT5mZS0+b3BzLnJlbGVhc2UpCisJCQlkZXYtPmZlLT5vcHMucmVsZWFzZShkZXYtPmZlKTsKKwkJZGV2LT5mZSA9IE5VTEw7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBkbTExMDVkdmJfcmVhZF9tYWMoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiLCB1OCAqbWFjKQorc3RhdGljIHZvaWQgX19kZXZpbml0IGRtMTEwNV9yZWFkX21hYyhzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2LCB1OCAqbWFjKQogewogCXN0YXRpYyB1OCBjb21tYW5kWzFdID0geyAweDI4IH07CiAKQEAgLTc2Niw0NyArNzkxLDQ3IEBACiAJCX0sCiAJfTsKIAotCWRtMTEwNV9pMmNfeGZlcigmZG0xMTA1ZHZiLT5pMmNfYWRhcCwgbXNnICwgMik7Ci0JZGV2X2luZm8oJmRtMTEwNWR2Yi0+cGRldi0+ZGV2LCAiTUFDICVwTVxuIiwgbWFjKTsKKwlkbTExMDVfaTJjX3hmZXIoJmRldi0+aTJjX2FkYXAsIG1zZyAsIDIpOworCWRldl9pbmZvKCZkZXYtPnBkZXYtPmRldiwgIk1BQyAlcE1cbiIsIG1hYyk7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGRtMTEwNV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7Ci0Jc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXY7CiAJc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcHRlcjsKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eDsKIAlzdHJ1Y3QgZG14X2RlbXV4ICpkbXg7CiAJaW50IHJldCA9IC1FTk9NRU07CiAJaW50IGk7CiAKLQlkbTExMDVkdmIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG0xMTA1ZHZiKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkbTExMDVkdmIpCisJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRtMTEwNV9kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBib2FyZCBjb25maWcgKi8KLQlkbTExMDVkdmItPm5yID0gZG0xMTA1X2RldmNvdW50OwotCWRtMTEwNWR2Yi0+Ym9hcmRuciA9IFVOU0VUOwotCWlmIChjYXJkW2RtMTEwNWR2Yi0+bnJdIDwgQVJSQVlfU0laRShkbTExMDVfYm9hcmRzKSkKLQkJZG0xMTA1ZHZiLT5ib2FyZG5yID0gY2FyZFtkbTExMDVkdmItPm5yXTsKLQlmb3IgKGkgPSAwOyBVTlNFVCA9PSBkbTExMDVkdmItPmJvYXJkbnIgJiYKKwlkZXYtPm5yID0gZG0xMTA1X2RldmNvdW50OworCWRldi0+Ym9hcmRuciA9IFVOU0VUOworCWlmIChjYXJkW2Rldi0+bnJdIDwgQVJSQVlfU0laRShkbTExMDVfYm9hcmRzKSkKKwkJZGV2LT5ib2FyZG5yID0gY2FyZFtkZXYtPm5yXTsKKwlmb3IgKGkgPSAwOyBVTlNFVCA9PSBkZXYtPmJvYXJkbnIgJiYKIAkJCQlpIDwgQVJSQVlfU0laRShkbTExMDVfc3ViaWRzKTsgaSsrKQogCQlpZiAocGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PQogCQkJZG0xMTA1X3N1Ymlkc1tpXS5zdWJ2ZW5kb3IgJiYKIAkJCQlwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09CiAJCQkJCWRtMTEwNV9zdWJpZHNbaV0uc3ViZGV2aWNlKQotCQkJZG0xMTA1ZHZiLT5ib2FyZG5yID0gZG0xMTA1X3N1Ymlkc1tpXS5jYXJkOworCQkJZGV2LT5ib2FyZG5yID0gZG0xMTA1X3N1Ymlkc1tpXS5jYXJkOwogCi0JaWYgKFVOU0VUID09IGRtMTEwNWR2Yi0+Ym9hcmRucikgewotCQlkbTExMDVkdmItPmJvYXJkbnIgPSBETTExMDVfQk9BUkRfVU5LTk9XTjsKKwlpZiAoVU5TRVQgPT0gZGV2LT5ib2FyZG5yKSB7CisJCWRldi0+Ym9hcmRuciA9IERNMTEwNV9CT0FSRF9VTktOT1dOOwogCQlkbTExMDVfY2FyZF9saXN0KHBkZXYpOwogCX0KIAogCWRtMTEwNV9kZXZjb3VudCsrOwotCWRtMTEwNWR2Yi0+cGRldiA9IHBkZXY7Ci0JZG0xMTA1ZHZiLT5idWZmZXJfc2l6ZSA9IDUgKiBETTExMDVfRE1BX0JZVEVTOwotCWRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCA9IDA7Ci0JZG0xMTA1ZHZiLT5kbWFyc3QgPSAwOworCWRldi0+cGRldiA9IHBkZXY7CisJZGV2LT5idWZmZXJfc2l6ZSA9IDUgKiBETTExMDVfRE1BX0JZVEVTOworCWRldi0+UGFja2V0RXJyb3JDb3VudCA9IDA7CisJZGV2LT5kbWFyc3QgPSAwOwogCiAJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJldCA8IDApCkBAIC04MjIsNDcgKzg0Nyw0NyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9wY2lfZGlzYWJsZV9kZXZpY2U7CiAKLQlkbTExMDVkdmItPmlvX21lbSA9IHBjaV9pb21hcChwZGV2LCAwLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKLQlpZiAoIWRtMTEwNWR2Yi0+aW9fbWVtKSB7CisJZGV2LT5pb19tZW0gPSBwY2lfaW9tYXAocGRldiwgMCwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7CisJaWYgKCFkZXYtPmlvX21lbSkgewogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGVycl9wY2lfcmVsZWFzZV9yZWdpb25zOwogCX0KIAotCXNwaW5fbG9ja19pbml0KCZkbTExMDVkdmItPmxvY2spOwotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkbTExMDVkdmIpOworCXNwaW5fbG9ja19pbml0KCZkZXYtPmxvY2spOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCi0JcmV0ID0gZG0xMTA1ZHZiX2h3X2luaXQoZG0xMTA1ZHZiKTsKKwlyZXQgPSBkbTExMDVfaHdfaW5pdChkZXYpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9wY2lfaW91bm1hcDsKIAogCS8qIGkyYyAqLwotCWkyY19zZXRfYWRhcGRhdGEoJmRtMTEwNWR2Yi0+aTJjX2FkYXAsIGRtMTEwNWR2Yik7Ci0Jc3RyY3B5KGRtMTEwNWR2Yi0+aTJjX2FkYXAubmFtZSwgRFJJVkVSX05BTUUpOwotCWRtMTEwNWR2Yi0+aTJjX2FkYXAub3duZXIgPSBUSElTX01PRFVMRTsKLQlkbTExMDVkdmItPmkyY19hZGFwLmNsYXNzID0gSTJDX0NMQVNTX1RWX0RJR0lUQUw7Ci0JZG0xMTA1ZHZiLT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKLQlkbTExMDVkdmItPmkyY19hZGFwLmFsZ28gPSAmZG0xMTA1X2FsZ287Ci0JZG0xMTA1ZHZiLT5pMmNfYWRhcC5hbGdvX2RhdGEgPSBkbTExMDVkdmI7Ci0JcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZkbTExMDVkdmItPmkyY19hZGFwKTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZkZXYtPmkyY19hZGFwLCBkZXYpOworCXN0cmNweShkZXYtPmkyY19hZGFwLm5hbWUsIERSSVZFUl9OQU1FKTsKKwlkZXYtPmkyY19hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7CisJZGV2LT5pMmNfYWRhcC5jbGFzcyA9IEkyQ19DTEFTU19UVl9ESUdJVEFMOworCWRldi0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJZGV2LT5pMmNfYWRhcC5hbGdvID0gJmRtMTEwNV9hbGdvOworCWRldi0+aTJjX2FkYXAuYWxnb19kYXRhID0gZGV2OworCXJldCA9IGkyY19hZGRfYWRhcHRlcigmZGV2LT5pMmNfYWRhcCk7CiAKIAlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJfZG0xMTA1ZHZiX2h3X2V4aXQ7CisJCWdvdG8gZXJyX2RtMTEwNV9od19leGl0OwogCiAJLyogZHZiICovCi0JcmV0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmRtMTEwNWR2Yi0+ZHZiX2FkYXB0ZXIsIERSSVZFUl9OQU1FLAorCXJldCA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZkZXYtPmR2Yl9hZGFwdGVyLCBEUklWRVJfTkFNRSwKIAkJCQkJVEhJU19NT0RVTEUsICZwZGV2LT5kZXYsIGFkYXB0ZXJfbnIpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9pMmNfZGVsX2FkYXB0ZXI7CiAKLQlkdmJfYWRhcHRlciA9ICZkbTExMDVkdmItPmR2Yl9hZGFwdGVyOworCWR2Yl9hZGFwdGVyID0gJmRldi0+ZHZiX2FkYXB0ZXI7CiAKLQlkbTExMDVkdmJfcmVhZF9tYWMoZG0xMTA1ZHZiLCBkdmJfYWRhcHRlci0+cHJvcG9zZWRfbWFjKTsKKwlkbTExMDVfcmVhZF9tYWMoZGV2LCBkdmJfYWRhcHRlci0+cHJvcG9zZWRfbWFjKTsKIAotCWR2YmRlbXV4ID0gJmRtMTEwNWR2Yi0+ZGVtdXg7CisJZHZiZGVtdXggPSAmZGV2LT5kZW11eDsKIAlkdmJkZW11eC0+ZmlsdGVybnVtID0gMjU2OwogCWR2YmRlbXV4LT5mZWVkbnVtID0gMjU2OwotCWR2YmRlbXV4LT5zdGFydF9mZWVkID0gZG0xMTA1ZHZiX3N0YXJ0X2ZlZWQ7Ci0JZHZiZGVtdXgtPnN0b3BfZmVlZCA9IGRtMTEwNWR2Yl9zdG9wX2ZlZWQ7CisJZHZiZGVtdXgtPnN0YXJ0X2ZlZWQgPSBkbTExMDVfc3RhcnRfZmVlZDsKKwlkdmJkZW11eC0+c3RvcF9mZWVkID0gZG0xMTA1X3N0b3BfZmVlZDsKIAlkdmJkZW11eC0+ZG14LmNhcGFiaWxpdGllcyA9IChETVhfVFNfRklMVEVSSU5HIHwKIAkJCURNWF9TRUNUSU9OX0ZJTFRFUklORyB8IERNWF9NRU1PUllfQkFTRURfRklMVEVSSU5HKTsKIAlyZXQgPSBkdmJfZG14X2luaXQoZHZiZGVtdXgpOwpAQCAtODcwLDExMyArODk1LDExMyBAQAogCQlnb3RvIGVycl9kdmJfdW5yZWdpc3Rlcl9hZGFwdGVyOwogCiAJZG14ID0gJmR2YmRlbXV4LT5kbXg7Ci0JZG0xMTA1ZHZiLT5kbXhkZXYuZmlsdGVybnVtID0gMjU2OwotCWRtMTEwNWR2Yi0+ZG14ZGV2LmRlbXV4ID0gZG14OwotCWRtMTEwNWR2Yi0+ZG14ZGV2LmNhcGFiaWxpdGllcyA9IDA7CisJZGV2LT5kbXhkZXYuZmlsdGVybnVtID0gMjU2OworCWRldi0+ZG14ZGV2LmRlbXV4ID0gZG14OworCWRldi0+ZG14ZGV2LmNhcGFiaWxpdGllcyA9IDA7CiAKLQlyZXQgPSBkdmJfZG14ZGV2X2luaXQoJmRtMTEwNWR2Yi0+ZG14ZGV2LCBkdmJfYWRhcHRlcik7CisJcmV0ID0gZHZiX2RteGRldl9pbml0KCZkZXYtPmRteGRldiwgZHZiX2FkYXB0ZXIpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9kdmJfZG14X3JlbGVhc2U7CiAKLQlkbTExMDVkdmItPmh3X2Zyb250ZW5kLnNvdXJjZSA9IERNWF9GUk9OVEVORF8wOworCWRldi0+aHdfZnJvbnRlbmQuc291cmNlID0gRE1YX0ZST05URU5EXzA7CiAKLQlyZXQgPSBkbXgtPmFkZF9mcm9udGVuZChkbXgsICZkbTExMDVkdmItPmh3X2Zyb250ZW5kKTsKKwlyZXQgPSBkbXgtPmFkZF9mcm9udGVuZChkbXgsICZkZXYtPmh3X2Zyb250ZW5kKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfZHZiX2RteGRldl9yZWxlYXNlOwogCi0JZG0xMTA1ZHZiLT5tZW1fZnJvbnRlbmQuc291cmNlID0gRE1YX01FTU9SWV9GRTsKKwlkZXYtPm1lbV9mcm9udGVuZC5zb3VyY2UgPSBETVhfTUVNT1JZX0ZFOwogCi0JcmV0ID0gZG14LT5hZGRfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5tZW1fZnJvbnRlbmQpOworCXJldCA9IGRteC0+YWRkX2Zyb250ZW5kKGRteCwgJmRldi0+bWVtX2Zyb250ZW5kKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfcmVtb3ZlX2h3X2Zyb250ZW5kOwogCi0JcmV0ID0gZG14LT5jb25uZWN0X2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQpOworCXJldCA9IGRteC0+Y29ubmVjdF9mcm9udGVuZChkbXgsICZkZXYtPmh3X2Zyb250ZW5kKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfcmVtb3ZlX21lbV9mcm9udGVuZDsKIAotCXJldCA9IGZyb250ZW5kX2luaXQoZG0xMTA1ZHZiKTsKKwlyZXQgPSBmcm9udGVuZF9pbml0KGRldik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2Rpc2Nvbm5lY3RfZnJvbnRlbmQ7CiAKLQlkdmJfbmV0X2luaXQoZHZiX2FkYXB0ZXIsICZkbTExMDVkdmItPmR2Ym5ldCwgZG14KTsKLQlkbTExMDVfaXJfaW5pdChkbTExMDVkdmIpOworCWR2Yl9uZXRfaW5pdChkdmJfYWRhcHRlciwgJmRldi0+ZHZibmV0LCBkbXgpOworCWRtMTEwNV9pcl9pbml0KGRldik7CiAKLQlJTklUX1dPUksoJmRtMTEwNWR2Yi0+d29yaywgZG0xMTA1X2RteF9idWZmZXIpOwotCXNwcmludGYoZG0xMTA1ZHZiLT53cW4sICIlcy8lZCIsIGR2Yl9hZGFwdGVyLT5uYW1lLCBkdmJfYWRhcHRlci0+bnVtKTsKLQlkbTExMDVkdmItPndxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoZG0xMTA1ZHZiLT53cW4pOwotCWlmICghZG0xMTA1ZHZiLT53cSkKKwlJTklUX1dPUksoJmRldi0+d29yaywgZG0xMTA1X2RteF9idWZmZXIpOworCXNwcmludGYoZGV2LT53cW4sICIlcy8lZCIsIGR2Yl9hZGFwdGVyLT5uYW1lLCBkdmJfYWRhcHRlci0+bnVtKTsKKwlkZXYtPndxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoZGV2LT53cW4pOworCWlmICghZGV2LT53cSkKIAkJZ290byBlcnJfZHZiX25ldDsKIAotCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgZG0xMTA1ZHZiX2lycSwgSVJRRl9TSEFSRUQsCi0JCQkJCQlEUklWRVJfTkFNRSwgZG0xMTA1ZHZiKTsKKwlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGRtMTEwNV9pcnEsIElSUUZfU0hBUkVELAorCQkJCQkJRFJJVkVSX05BTUUsIGRldik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX3dvcmtxdWV1ZTsKIAogCXJldHVybiAwOwogCiBlcnJfd29ya3F1ZXVlOgotCWRlc3Ryb3lfd29ya3F1ZXVlKGRtMTEwNWR2Yi0+d3EpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGRldi0+d3EpOwogZXJyX2R2Yl9uZXQ6Ci0JZHZiX25ldF9yZWxlYXNlKCZkbTExMDVkdmItPmR2Ym5ldCk7CisJZHZiX25ldF9yZWxlYXNlKCZkZXYtPmR2Ym5ldCk7CiBlcnJfZGlzY29ubmVjdF9mcm9udGVuZDoKIAlkbXgtPmRpc2Nvbm5lY3RfZnJvbnRlbmQoZG14KTsKIGVycl9yZW1vdmVfbWVtX2Zyb250ZW5kOgotCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+bWVtX2Zyb250ZW5kKTsKKwlkbXgtPnJlbW92ZV9mcm9udGVuZChkbXgsICZkZXYtPm1lbV9mcm9udGVuZCk7CiBlcnJfcmVtb3ZlX2h3X2Zyb250ZW5kOgotCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQpOworCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRldi0+aHdfZnJvbnRlbmQpOwogZXJyX2R2Yl9kbXhkZXZfcmVsZWFzZToKLQlkdmJfZG14ZGV2X3JlbGVhc2UoJmRtMTEwNWR2Yi0+ZG14ZGV2KTsKKwlkdmJfZG14ZGV2X3JlbGVhc2UoJmRldi0+ZG14ZGV2KTsKIGVycl9kdmJfZG14X3JlbGVhc2U6CiAJZHZiX2RteF9yZWxlYXNlKGR2YmRlbXV4KTsKIGVycl9kdmJfdW5yZWdpc3Rlcl9hZGFwdGVyOgogCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoZHZiX2FkYXB0ZXIpOwogZXJyX2kyY19kZWxfYWRhcHRlcjoKLQlpMmNfZGVsX2FkYXB0ZXIoJmRtMTEwNWR2Yi0+aTJjX2FkYXApOwotZXJyX2RtMTEwNWR2Yl9od19leGl0OgotCWRtMTEwNWR2Yl9od19leGl0KGRtMTEwNWR2Yik7CisJaTJjX2RlbF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwKTsKK2Vycl9kbTExMDVfaHdfZXhpdDoKKwlkbTExMDVfaHdfZXhpdChkZXYpOwogZXJyX3BjaV9pb3VubWFwOgotCXBjaV9pb3VubWFwKHBkZXYsIGRtMTEwNWR2Yi0+aW9fbWVtKTsKKwlwY2lfaW91bm1hcChwZGV2LCBkZXYtPmlvX21lbSk7CiBlcnJfcGNpX3JlbGVhc2VfcmVnaW9uczoKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogZXJyX3BjaV9kaXNhYmxlX2RldmljZToKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiBlcnJfa2ZyZWU6CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWtmcmVlKGRtMTEwNWR2Yik7CisJa2ZyZWUoZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgZG0xMTA1X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcHRlciA9ICZkbTExMDVkdmItPmR2Yl9hZGFwdGVyOwotCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4ID0gJmRtMTEwNWR2Yi0+ZGVtdXg7CisJc3RydWN0IGRtMTEwNV9kZXYgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmR2Yl9hZGFwdGVyID0gJmRldi0+ZHZiX2FkYXB0ZXI7CisJc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXggPSAmZGV2LT5kZW11eDsKIAlzdHJ1Y3QgZG14X2RlbXV4ICpkbXggPSAmZHZiZGVtdXgtPmRteDsKIAotCWRtMTEwNV9pcl9leGl0KGRtMTEwNWR2Yik7CisJZG0xMTA1X2lyX2V4aXQoZGV2KTsKIAlkbXgtPmNsb3NlKGRteCk7Ci0JZHZiX25ldF9yZWxlYXNlKCZkbTExMDVkdmItPmR2Ym5ldCk7Ci0JaWYgKGRtMTEwNWR2Yi0+ZmUpCi0JCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGRtMTEwNWR2Yi0+ZmUpOworCWR2Yl9uZXRfcmVsZWFzZSgmZGV2LT5kdmJuZXQpOworCWlmIChkZXYtPmZlKQorCQlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChkZXYtPmZlKTsKIAogCWRteC0+ZGlzY29ubmVjdF9mcm9udGVuZChkbXgpOwotCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+bWVtX2Zyb250ZW5kKTsKLQlkbXgtPnJlbW92ZV9mcm9udGVuZChkbXgsICZkbTExMDVkdmItPmh3X2Zyb250ZW5kKTsKLQlkdmJfZG14ZGV2X3JlbGVhc2UoJmRtMTEwNWR2Yi0+ZG14ZGV2KTsKKwlkbXgtPnJlbW92ZV9mcm9udGVuZChkbXgsICZkZXYtPm1lbV9mcm9udGVuZCk7CisJZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZGV2LT5od19mcm9udGVuZCk7CisJZHZiX2RteGRldl9yZWxlYXNlKCZkZXYtPmRteGRldik7CiAJZHZiX2RteF9yZWxlYXNlKGR2YmRlbXV4KTsKIAlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKGR2Yl9hZGFwdGVyKTsKLQlpZiAoJmRtMTEwNWR2Yi0+aTJjX2FkYXApCi0JCWkyY19kZWxfYWRhcHRlcigmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7CisJaWYgKCZkZXYtPmkyY19hZGFwKQorCQlpMmNfZGVsX2FkYXB0ZXIoJmRldi0+aTJjX2FkYXApOwogCi0JZG0xMTA1ZHZiX2h3X2V4aXQoZG0xMTA1ZHZiKTsKKwlkbTExMDVfaHdfZXhpdChkZXYpOwogCXN5bmNocm9uaXplX2lycShwZGV2LT5pcnEpOwotCWZyZWVfaXJxKHBkZXYtPmlycSwgZG0xMTA1ZHZiKTsKLQlwY2lfaW91bm1hcChwZGV2LCBkbTExMDVkdmItPmlvX21lbSk7CisJZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOworCXBjaV9pb3VubWFwKHBkZXYsIGRldi0+aW9fbWVtKTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJZG0xMTA1X2RldmNvdW50LS07Ci0Ja2ZyZWUoZG0xMTA1ZHZiKTsKKwlrZnJlZShkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZG0xMTA1X2lkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKaW5kZXggYzM3NzkwYS4uOWRkYzU3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKQEAgLTc2MSw3ICs3NjEsNiBAQAogCWR2Yl9yaW5nYnVmZmVyX2luaXQoJmRteGRldmZpbHRlci0+YnVmZmVyLCBOVUxMLCA4MTkyKTsKIAlkbXhkZXZmaWx0ZXItPnR5cGUgPSBETVhERVZfVFlQRV9OT05FOwogCWR2Yl9kbXhkZXZfZmlsdGVyX3N0YXRlX3NldChkbXhkZXZmaWx0ZXIsIERNWERFVl9TVEFURV9BTExPQ0FURUQpOwotCUlOSVRfTElTVF9IRUFEKCZkbXhkZXZmaWx0ZXItPmZlZWQudHMpOwogCWluaXRfdGltZXIoJmRteGRldmZpbHRlci0+dGltZXIpOwogCiAJZHZiZGV2LT51c2VycysrOwpAQCAtODg3LDYgKzg4Niw3IEBACiAJZG14ZGV2ZmlsdGVyLT50eXBlID0gRE1YREVWX1RZUEVfUEVTOwogCW1lbWNweSgmZG14ZGV2ZmlsdGVyLT5wYXJhbXMsIHBhcmFtcywKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCBkbXhfcGVzX2ZpbHRlcl9wYXJhbXMpKTsKKwlJTklUX0xJU1RfSEVBRCgmZG14ZGV2ZmlsdGVyLT5mZWVkLnRzKTsKIAogCWR2Yl9kbXhkZXZfZmlsdGVyX3N0YXRlX3NldChkbXhkZXZmaWx0ZXIsIERNWERFVl9TVEFURV9TRVQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCmluZGV4IGI3OGNmYjcuLjY3ZjE4OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCkBAIC00MjYsMTYgKzQyNiw3IEBACiAJCX07CiAJfTsKIAotCWlmIChkdmJfZGVtdXhfdHNjaGVjaykgewotCQlpZiAoIWRlbXV4LT5jbnRfc3RvcmFnZSkKLQkJCWRlbXV4LT5jbnRfc3RvcmFnZSA9IHZtYWxsb2MoTUFYX1BJRCArIDEpOwotCi0JCWlmICghZGVtdXgtPmNudF9zdG9yYWdlKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIFRTL1RFSSBjaGVjay4gRGlzYWJsaW5nIGl0XG4iKTsKLQkJCWR2Yl9kZW11eF90c2NoZWNrID0gMDsKLQkJCWdvdG8gbm9fZHZiX2RlbXV4X3RzY2hlY2s7Ci0JCX0KLQorCWlmIChkZW11eC0+Y250X3N0b3JhZ2UpIHsKIAkJLyogY2hlY2sgcGt0IGNvdW50ZXIgKi8KIAkJaWYgKHBpZCA8IE1BWF9QSUQpIHsKIAkJCWlmIChidWZbMV0gJiAweDgwKQpAQCAtNDU0LDcgKzQ0NSw2IEBACiAJCX07CiAJCS8qIGVuZCBjaGVjayAqLwogCX07Ci1ub19kdmJfZGVtdXhfdHNjaGVjazoKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZmVlZCwgJmRlbXV4LT5mZWVkX2xpc3QsIGxpc3RfaGVhZCkgewogCQlpZiAoKGZlZWQtPnBpZCAhPSBwaWQpICYmIChmZWVkLT5waWQgIT0gMHgyMDAwKSkKQEAgLTEyNDYsNiArMTIzNiw3IEBACiAJZHZiZGVtdXgtPmZlZWQgPSB2bWFsbG9jKGR2YmRlbXV4LT5mZWVkbnVtICogc2l6ZW9mKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCkpOwogCWlmICghZHZiZGVtdXgtPmZlZWQpIHsKIAkJdmZyZWUoZHZiZGVtdXgtPmZpbHRlcik7CisJCWR2YmRlbXV4LT5maWx0ZXIgPSBOVUxMOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IGR2YmRlbXV4LT5maWx0ZXJudW07IGkrKykgewpAQCAtMTI1Nyw2ICsxMjQ4LDEzIEBACiAJCWR2YmRlbXV4LT5mZWVkW2ldLmluZGV4ID0gaTsKIAl9CiAKKwlpZiAoZHZiX2RlbXV4X3RzY2hlY2spIHsKKwkJZHZiZGVtdXgtPmNudF9zdG9yYWdlID0gdm1hbGxvYyhNQVhfUElEICsgMSk7CisKKwkJaWYgKCFkdmJkZW11eC0+Y250X3N0b3JhZ2UpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIFRTL1RFSSBjaGVjay4gRGlzYWJsaW5nIGl0XG4iKTsKKwl9CisKIAlJTklUX0xJU1RfSEVBRCgmZHZiZGVtdXgtPmZyb250ZW5kX2xpc3QpOwogCiAJZm9yIChpID0gMDsgaSA8IERNWF9UU19QRVNfT1RIRVI7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCAwNzQ2MTIyLi41NWVhMjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtMTE5OSw4ICsxMTk5LDYgQEAKIHsKIAlpbnQgciA9IDA7CiAKLQlkdHZfcHJvcGVydHlfZHVtcCh0dnApOwotCiAJLyogQWxsb3cgdGhlIGZyb250ZW5kIHRvIHZhbGlkYXRlIGluY29taW5nIHByb3BlcnRpZXMgKi8KIAlpZiAoZmUtPm9wcy5nZXRfcHJvcGVydHkpCiAJCXIgPSBmZS0+b3BzLmdldF9wcm9wZXJ0eShmZSwgdHZwKTsKQEAgLTEzMjMsNiArMTMyMSw4IEBACiAJCXIgPSAtMTsKIAl9CiAKKwlkdHZfcHJvcGVydHlfZHVtcCh0dnApOworCiAJcmV0dXJuIHI7CiB9CiAKQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKIAlpbnQgZXJyID0gLUVPUE5PVFNVUFA7CiAKLQlkcHJpbnRrICgiJXNcbiIsIF9fZnVuY19fKTsKKwlkcHJpbnRrKCIlcyAoJWQpXG4iLCBfX2Z1bmNfXywgX0lPQ19OUihjbWQpKTsKIAogCWlmIChmZXByaXYtPmV4aXQpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTUzNiw4ICsxNTM2LDcgQEAKIAkJaWYgKCh0dnBzLT5udW0gPT0gMCkgfHwgKHR2cHMtPm51bSA+IERUVl9JT0NUTF9NQVhfTVNHUykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQl0dnAgPSAoc3RydWN0IGR0dl9wcm9wZXJ0eSAqKSBrbWFsbG9jKHR2cHMtPm51bSAqCi0JCQlzaXplb2Yoc3RydWN0IGR0dl9wcm9wZXJ0eSksIEdGUF9LRVJORUwpOworCQl0dnAgPSBrbWFsbG9jKHR2cHMtPm51bSAqIHNpemVvZihzdHJ1Y3QgZHR2X3Byb3BlcnR5KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdHZwKSB7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBvdXQ7CkBAIC0xNTY5LDggKzE1NjgsNyBAQAogCQlpZiAoKHR2cHMtPm51bSA9PSAwKSB8fCAodHZwcy0+bnVtID4gRFRWX0lPQ1RMX01BWF9NU0dTKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXR2cCA9IChzdHJ1Y3QgZHR2X3Byb3BlcnR5ICopIGttYWxsb2ModHZwcy0+bnVtICoKLQkJCXNpemVvZihzdHJ1Y3QgZHR2X3Byb3BlcnR5KSwgR0ZQX0tFUk5FTCk7CisJCXR2cCA9IGttYWxsb2ModHZwcy0+bnVtICogc2l6ZW9mKHN0cnVjdCBkdHZfcHJvcGVydHkpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF0dnApIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwppbmRleCA4Yjg1NThmLi5iMTE1MzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCkBAIC01MDQsNiArNTA0LDcgQEAKIAkJCQkgICAgICAgImJ5dGVzIGxlZnQgaW4gVFMuICBSZXN5bmNpbmcuXG4iLCB0c19yZW1haW4pOwogCQkJCXByaXYtPnVsZV9zbmR1X2xlbiA9IDA7CiAJCQkJcHJpdi0+bmVlZF9wdXNpID0gMTsKKwkJCQl0cyArPSBUU19TWjsKIAkJCQljb250aW51ZTsKIAkJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9yaW5nYnVmZmVyLmMKaW5kZXggNTg0YmJkMS4uYTU3MTJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfcmluZ2J1ZmZlci5jCkBAIC04OSw2ICs4OSw3IEBACiAJcmJ1Zi0+cHJlYWQgPSByYnVmLT5wd3JpdGU7CiAJcmJ1Zi0+ZXJyb3IgPSAwOwogfQorRVhQT1JUX1NZTUJPTChkdmJfcmluZ2J1ZmZlcl9mbHVzaCk7CiAKIHZvaWQgZHZiX3JpbmdidWZmZXJfcmVzZXQoc3RydWN0IGR2Yl9yaW5nYnVmZmVyICpyYnVmKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IDFiMjQ5ODkuLmU1ZjkxZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTExMiwxMSArMTEyLDEzIEBACiAJc2VsZWN0IERWQl9NVDM1MiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfRElCNzAwMFAgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgRFZCX0xHUzhHTDUgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1RVTkVSX0RJQjAwNzAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0FUQk04ODMwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9MR1M4R1hYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfTUFYMjE2NSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBDb25leGFudCBVU0IyLjAgaHlicmlkIHJlZmVyZW5jZSBkZXNpZ24uCiAJICBDdXJyZW50bHksIG9ubHkgRFZCIGFuZCBBVFNDIG1vZGVzIGFyZSBzdXBwb3J0ZWQsIGFuYWxvZyBtb2RlCkBAIC0zMzQsMyArMzM2LDExIEBACiAJc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEUzQyBFQzE2OCBEVkItVCBVU0IyLjAgcmVjZWl2ZXIuCisKK2NvbmZpZyBEVkJfVVNCX0FaNjAyNworCXRyaXN0YXRlICJBenVyZXdhdmUgRFZCLVMvUzIgVVNCMi4wIEFaNjAyNyBzdXBwb3J0IgorCWRlcGVuZHMgb24gRFZCX1VTQgorCXNlbGVjdCBEVkJfU1RCMDg5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RCNjEwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgQVo2MDI3IGRldmljZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKaW5kZXggNzJjOTJjYi4uMWExOTI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCkBAIC04NSw2ICs4NSw5IEBACiBkdmItdXNiLWVjMTY4LW9ianMgPSBlYzE2OC5vCiBvYmotJChDT05GSUdfRFZCX1VTQl9FQzE2OCkgKz0gZHZiLXVzYi1lYzE2OC5vCiAKK2R2Yi11c2ItYXo2MDI3LW9ianMgPSBhejYwMjcubworb2JqLSQoQ09ORklHX0RWQl9VU0JfQVo2MDI3KSArPSBkdmItdXNiLWF6NjAyNy5vCisKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlLyAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy8KICMgZHVlIHRvIHR1bmVyLXhjMzAyOAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYwppbmRleCA4YjYwYTYwLi5kNzk3NTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKQEAgLTIxLDYgKzIxLDggQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKwogI2luY2x1ZGUgImFmOTAxNS5oIgogI2luY2x1ZGUgImFmOTAxMy5oIgogI2luY2x1ZGUgIm10MjA2MC5oIgpAQCAtNTUzLDI2ICs1NTUsNDUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBkdW1wIGVlcHJvbSAqLwotc3RhdGljIGludCBhZjkwMTVfZWVwcm9tX2R1bXAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQorLyogaGFzaCAoYW5kIGR1bXApIGVlcHJvbSAqLworc3RhdGljIGludCBhZjkwMTVfZWVwcm9tX2hhc2goc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7Ci0JdTggcmVnLCB2YWw7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBlZXByb21fc2l6ZSA9IDI1NjsKKwl1bnNpZ25lZCBpbnQgcmVnOworCWludCByZXQ7CisJdTggdmFsLCAqZWVwcm9tOworCXN0cnVjdCByZXFfdCByZXEgPSB7UkVBRF9JMkMsIEFGOTAxNV9JMkNfRUVQUk9NLCAwLCAwLCAxLCAxLCAmdmFsfTsKIAotCWZvciAocmVnID0gMDsgOyByZWcrKykgewotCQlpZiAocmVnICUgMTYgPT0gMCkgewotCQkJaWYgKHJlZykKLQkJCQlkZWJfaW5mbyhLRVJOX0NPTlQgIlxuIik7Ci0JCQlkZWJfaW5mbyhLRVJOX0RFQlVHICIlMDJ4OiIsIHJlZyk7Ci0JCX0KLQkJaWYgKGFmOTAxNV9yZWFkX3JlZ19pMmMoZCwgQUY5MDE1X0kyQ19FRVBST00sIHJlZywgJnZhbCkgPT0gMCkKLQkJCWRlYl9pbmZvKEtFUk5fQ09OVCAiICUwMngiLCB2YWwpOwotCQllbHNlCi0JCQlkZWJfaW5mbyhLRVJOX0NPTlQgIiAtLSIpOwotCQlpZiAocmVnID09IDB4ZmYpCi0JCQlicmVhazsKKwllZXByb20gPSBrbWFsbG9jKGVlcHJvbV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoZWVwcm9tID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChyZWcgPSAwOyByZWcgPCBlZXByb21fc2l6ZTsgcmVnKyspIHsKKwkJcmVxLmFkZHIgPSByZWc7CisJCXJldCA9IGFmOTAxNV9yd191ZGV2KHVkZXYsICZyZXEpOworCQlpZiAocmV0KQorCQkJZ290byBmcmVlOworCQllZXByb21bcmVnXSA9IHZhbDsKIAl9Ci0JZGViX2luZm8oS0VSTl9DT05UICJcbiIpOwotCXJldHVybiAwOworCisJaWYgKGR2Yl91c2JfYWY5MDE1X2RlYnVnICYgMHgwMSkKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX09GRlNFVCwgZWVwcm9tLAorCQkJCWVlcHJvbV9zaXplKTsKKworCUJVR19PTihlZXByb21fc2l6ZSAlIDQpOworCisJYWY5MDE1X2NvbmZpZy5lZXByb21fc3VtID0gMDsKKwlmb3IgKHJlZyA9IDA7IHJlZyA8IGVlcHJvbV9zaXplIC8gc2l6ZW9mKHUzMik7IHJlZysrKSB7CisJCWFmOTAxNV9jb25maWcuZWVwcm9tX3N1bSAqPSBHT0xERU5fUkFUSU9fUFJJTUVfMzI7CisJCWFmOTAxNV9jb25maWcuZWVwcm9tX3N1bSArPSBsZTMyX3RvX2NwdSgoKHUzMiAqKWVlcHJvbSlbcmVnXSk7CisJfQorCisJZGViX2luZm8oIiVzOiBlZXByb20gc3VtPSUuOHhcbiIsIF9fZnVuY19fLCBhZjkwMTVfY29uZmlnLmVlcHJvbV9zdW0pOworCisJcmV0ID0gMDsKK2ZyZWU6CisJa2ZyZWUoZWVwcm9tKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGFmOTAxNV9kb3dubG9hZF9pcl90YWJsZShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCkBAIC03MTEsMTIgKzczMiwxMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdHJ1Y3QgYWY5MDE1X3NldHVwIHsKKwl1bnNpZ25lZCBpbnQgaWQ7CisJc3RydWN0IGR2Yl91c2JfcmNfa2V5ICpyY19rZXlfbWFwOworCXVuc2lnbmVkIGludCByY19rZXlfbWFwX3NpemU7CisJdTggKmlyX3RhYmxlOworCXVuc2lnbmVkIGludCBpcl90YWJsZV9zaXplOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZjkwMTVfc2V0dXAgKmFmOTAxNV9zZXR1cF9tYXRjaCh1bnNpZ25lZCBpbnQgaWQsCisJCWNvbnN0IHN0cnVjdCBhZjkwMTVfc2V0dXAgKnRhYmxlKQoreworCWZvciAoOyB0YWJsZS0+cmNfa2V5X21hcDsgdGFibGUrKykKKwkJaWYgKHRhYmxlLT5pZCA9PSBpZCkKKwkJCXJldHVybiB0YWJsZTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZjkwMTVfc2V0dXAgYWY5MDE1X3NldHVwX21vZHBhcmFtW10gPSB7CisJeyBBRjkwMTVfUkVNT1RFX0FfTElOS19EVFVfTSwKKwkJYWY5MDE1X3JjX2tleXNfYV9saW5rLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2FfbGluayksCisJCWFmOTAxNV9pcl90YWJsZV9hX2xpbmssIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2FfbGluaykgfSwKKwl7IEFGOTAxNV9SRU1PVEVfTVNJX0RJR0lWT1hfTUlOSV9JSV9WMywKKwkJYWY5MDE1X3JjX2tleXNfbXNpLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX21zaSksCisJCWFmOTAxNV9pcl90YWJsZV9tc2ksIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX21zaSkgfSwKKwl7IEFGOTAxNV9SRU1PVEVfTVlHSUNUVl9VNzE4LAorCQlhZjkwMTVfcmNfa2V5c19teWdpY3R2LCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX215Z2ljdHYpLAorCQlhZjkwMTVfaXJfdGFibGVfbXlnaWN0diwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXlnaWN0dikgfSwKKwl7IEFGOTAxNV9SRU1PVEVfRElHSVRUUkFERV9EVkJfVCwKKwkJYWY5MDE1X3JjX2tleXNfZGlnaXR0cmFkZSwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19kaWdpdHRyYWRlKSwKKwkJYWY5MDE1X2lyX3RhYmxlX2RpZ2l0dHJhZGUsIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2RpZ2l0dHJhZGUpIH0sCisJeyBBRjkwMTVfUkVNT1RFX0FWRVJNRURJQV9LUywKKwkJYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYSksCisJCWFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWFfa3MsIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYV9rcykgfSwKKwl7IH0KK307CisKKy8qIGRvbid0IGFkZCBuZXcgZW50cmllcyBoZXJlIGFueW1vcmUsIHVzZSBoYXNoZXMgaW5zdGVhZCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhZjkwMTVfc2V0dXAgYWY5MDE1X3NldHVwX3VzYmlkc1tdID0geworCXsgVVNCX1ZJRF9MRUFEVEVLLAorCQlhZjkwMTVfcmNfa2V5c19sZWFkdGVrLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2xlYWR0ZWspLAorCQlhZjkwMTVfaXJfdGFibGVfbGVhZHRlaywgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbGVhZHRlaykgfSwKKwl7IFVTQl9WSURfVklTSU9OUExVUywKKwkJYWY5MDE1X3JjX2tleXNfdHdpbmhhbiwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c190d2luaGFuKSwKKwkJYWY5MDE1X2lyX3RhYmxlX3R3aW5oYW4sIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX3R3aW5oYW4pIH0sCisJeyBVU0JfVklEX0tXT1JMRF8yLCAvKiBUT0RPOiB1c2UgY29ycmVjdCByYyBrZXlzICovCisJCWFmOTAxNV9yY19rZXlzX3R3aW5oYW4sIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfdHdpbmhhbiksCisJCWFmOTAxNV9pcl90YWJsZV9rd29ybGQsIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2t3b3JsZCkgfSwKKwl7IFVTQl9WSURfQVZFUk1FRElBLAorCQlhZjkwMTVfcmNfa2V5c19hdmVybWVkaWEsIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhKSwKKwkJYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYSwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhKSB9LAorCXsgVVNCX1ZJRF9NU0lfMiwKKwkJYWY5MDE1X3JjX2tleXNfbXNpX2RpZ2l2b3hfaWlpLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX21zaV9kaWdpdm94X2lpaSksCisJCWFmOTAxNV9pcl90YWJsZV9tc2lfZGlnaXZveF9paWksIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX21zaV9kaWdpdm94X2lpaSkgfSwKKwl7IH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWY5MDE1X3NldHVwIGFmOTAxNV9zZXR1cF9oYXNoZXNbXSA9IHsKKwl7IDB4YjhmZWI3MDgsCisJCWFmOTAxNV9yY19rZXlzX21zaSwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19tc2kpLAorCQlhZjkwMTVfaXJfdGFibGVfbXNpLCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9tc2kpIH0sCisJeyAweGEzNzAzZDAwLAorCQlhZjkwMTVfcmNfa2V5c19hX2xpbmssIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfYV9saW5rKSwKKwkJYWY5MDE1X2lyX3RhYmxlX2FfbGluaywgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfYV9saW5rKSB9LAorCXsgMHg5YjdkYzY0ZSwKKwkJYWY5MDE1X3JjX2tleXNfbXlnaWN0diwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19teWdpY3R2KSwKKwkJYWY5MDE1X2lyX3RhYmxlX215Z2ljdHYsIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX215Z2ljdHYpIH0sCisJeyB9Cit9OworCitzdGF0aWMgdm9pZCBhZjkwMTVfc2V0X3JlbW90ZV9jb25maWcoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCXN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzICpwcm9wcykKK3sKKwljb25zdCBzdHJ1Y3QgYWY5MDE1X3NldHVwICp0YWJsZSA9IE5VTEw7CisKKwlpZiAoZHZiX3VzYl9hZjkwMTVfcmVtb3RlKSB7CisJCS8qIGxvYWQgcmVtb3RlIGRlZmluZWQgYXMgbW9kdWxlIHBhcmFtICovCisJCXRhYmxlID0gYWY5MDE1X3NldHVwX21hdGNoKGR2Yl91c2JfYWY5MDE1X3JlbW90ZSwKKwkJCQlhZjkwMTVfc2V0dXBfbW9kcGFyYW0pOworCX0gZWxzZSB7CisJCXUxNiB2ZW5kb3IgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKworCQl0YWJsZSA9IGFmOTAxNV9zZXR1cF9tYXRjaChhZjkwMTVfY29uZmlnLmVlcHJvbV9zdW0sCisJCQkJYWY5MDE1X3NldHVwX2hhc2hlcyk7CisKKwkJaWYgKCF0YWJsZSAmJiB2ZW5kb3IgPT0gVVNCX1ZJRF9BRkFURUNIKSB7CisJCQkvKiBDaGVjayBVU0IgbWFudWZhY3R1cmVyIGFuZCBwcm9kdWN0IHN0cmluZ3MgYW5kIHRyeQorCQkJICAgdG8gZGV0ZXJtaW5lIGNvcnJlY3QgcmVtb3RlIGluIGNhc2Ugb2YgY2hpcCB2ZW5kb3IKKwkJCSAgIHJlZmVyZW5jZSBJRHMgYXJlIHVzZWQuCisJCQkgICBETyBOT1QgQUREIEFOWVRISU5HIE5FVyBIRVJFLiBVc2UgaGFzaGVzIGluc3RlYWQuCisJCQkgKi8KKwkJCWNoYXIgbWFudWZhY3R1cmVyWzEwXTsKKwkJCW1lbXNldChtYW51ZmFjdHVyZXIsIDAsIHNpemVvZihtYW51ZmFjdHVyZXIpKTsKKwkJCXVzYl9zdHJpbmcodWRldiwgdWRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyLAorCQkJCW1hbnVmYWN0dXJlciwgc2l6ZW9mKG1hbnVmYWN0dXJlcikpOworCQkJaWYgKCFzdHJjbXAoIk1TSSIsIG1hbnVmYWN0dXJlcikpIHsKKwkJCQkvKiBpTWFudWZhY3R1cmVyIDEgTVNJCisJCQkJICAgaVByb2R1Y3QgICAgICAyIE1TSSBLLVZPWCAqLworCQkJCXRhYmxlID0gYWY5MDE1X3NldHVwX21hdGNoKAorCQkJCQlBRjkwMTVfUkVNT1RFX01TSV9ESUdJVk9YX01JTklfSUlfVjMsCisJCQkJCWFmOTAxNV9zZXR1cF9tb2RwYXJhbSk7CisJCQl9IGVsc2UgaWYgKHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09CisJCQkJY3B1X3RvX2xlMTYoVVNCX1BJRF9UUkVLU1RPUl9EVkJUKSkgeworCQkJCXRhYmxlID0gJihjb25zdCBzdHJ1Y3QgYWY5MDE1X3NldHVwKXsgMCwKKwkJCQkJYWY5MDE1X3JjX2tleXNfdHJla3N0b3IsCisJCQkJCUFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfdHJla3N0b3IpLAorCQkJCQlhZjkwMTVfaXJfdGFibGVfdHJla3N0b3IsCisJCQkJCUFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX3RyZWtzdG9yKQorCQkJCX07CisJCQl9CisJCX0gZWxzZSBpZiAoIXRhYmxlKQorCQkJdGFibGUgPSBhZjkwMTVfc2V0dXBfbWF0Y2godmVuZG9yLCBhZjkwMTVfc2V0dXBfdXNiaWRzKTsKKwl9CisKKwlpZiAodGFibGUpIHsKKwkJcHJvcHMtPnJjX2tleV9tYXAgPSB0YWJsZS0+cmNfa2V5X21hcDsKKwkJcHJvcHMtPnJjX2tleV9tYXBfc2l6ZSA9IHRhYmxlLT5yY19rZXlfbWFwX3NpemU7CisJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPSB0YWJsZS0+aXJfdGFibGU7CisJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9IHRhYmxlLT5pcl90YWJsZV9zaXplOworCX0KK30KKwogc3RhdGljIGludCBhZjkwMTVfcmVhZF9jb25maWcoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CiAJaW50IHJldDsKIAl1OCB2YWwsIGksIG9mZnNldCA9IDA7CiAJc3RydWN0IHJlcV90IHJlcSA9IHtSRUFEX0kyQywgQUY5MDE1X0kyQ19FRVBST00sIDAsIDAsIDEsIDEsICZ2YWx9OwotCWNoYXIgbWFudWZhY3R1cmVyWzEwXTsKIAogCS8qIElSIHJlbW90ZSBjb250cm9sbGVyICovCiAJcmVxLmFkZHIgPSBBRjkwMTVfRUVQUk9NX0lSX01PREU7CkBAIC03MjgsMTU4ICs4NjksMTggQEAKIAl9CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcjsKKworCXJldCA9IGFmOTAxNV9lZXByb21faGFzaCh1ZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCiAJZGViX2luZm8oIiVzOiBJUiBtb2RlOiVkXG4iLCBfX2Z1bmNfXywgdmFsKTsKIAlmb3IgKGkgPSAwOyBpIDwgYWY5MDE1X3Byb3BlcnRpZXNfY291bnQ7IGkrKykgewogCQlpZiAodmFsID09IEFGOTAxNV9JUl9NT0RFX0RJU0FCTEVEKSB7CiAJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0gTlVMTDsKIAkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSAgPSAwOwotCQl9IGVsc2UgaWYgKGR2Yl91c2JfYWY5MDE1X3JlbW90ZSkgewotCQkJLyogbG9hZCByZW1vdGUgZGVmaW5lZCBhcyBtb2R1bGUgcGFyYW0gKi8KLQkJCXN3aXRjaCAoZHZiX3VzYl9hZjkwMTVfcmVtb3RlKSB7Ci0JCQljYXNlIEFGOTAxNV9SRU1PVEVfQV9MSU5LX0RUVV9NOgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfYV9saW5rOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2FfbGluayk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9IGFmOTAxNV9pcl90YWJsZV9hX2xpbms7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2FfbGluayk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFGOTAxNV9SRU1PVEVfTVNJX0RJR0lWT1hfTUlOSV9JSV9WMzoKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX21zaTsKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19tc2kpOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPSBhZjkwMTVfaXJfdGFibGVfbXNpOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9tc2kpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBRjkwMTVfUkVNT1RFX01ZR0lDVFZfVTcxODoKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX215Z2ljdHY7Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXlnaWN0dik7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJICBhZjkwMTVfaXJfdGFibGVfbXlnaWN0djsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXlnaWN0dik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFGOTAxNV9SRU1PVEVfRElHSVRUUkFERV9EVkJfVDoKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX2RpZ2l0dHJhZGU7Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfZGlnaXR0cmFkZSk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJICBhZjkwMTVfaXJfdGFibGVfZGlnaXR0cmFkZTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfZGlnaXR0cmFkZSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFGOTAxNV9SRU1PVEVfQVZFUk1FRElBX0tTOgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYSk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJICBhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhX2tzOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWFfa3MpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IGVsc2UgewotCQkJc3dpdGNoIChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSkgewotCQkJY2FzZSBVU0JfVklEX0xFQURURUs6Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c19sZWFkdGVrOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2xlYWR0ZWspOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQotCQkJCSAgYWY5MDE1X2lyX3RhYmxlX2xlYWR0ZWs7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2xlYWR0ZWspOwotCQkJCWJyZWFrOwotCQkJY2FzZSBVU0JfVklEX1ZJU0lPTlBMVVM6Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c190d2luaGFuOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX3R3aW5oYW4pOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQotCQkJCSAgYWY5MDE1X2lyX3RhYmxlX3R3aW5oYW47Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX3R3aW5oYW4pOwotCQkJCWJyZWFrOwotCQkJY2FzZSBVU0JfVklEX0tXT1JMRF8yOgotCQkJCS8qIFRPRE86IHVzZSBjb3JyZWN0IHJjIGtleXMgKi8KLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX3R3aW5oYW47Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfdHdpbmhhbik7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9IGFmOTAxNV9pcl90YWJsZV9rd29ybGQ7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2t3b3JsZCk7Ci0JCQkJYnJlYWs7Ci0JCQkvKiBDaGVjayBVU0IgbWFudWZhY3R1cmVyIGFuZCBwcm9kdWN0IHN0cmluZ3MgYW5kIHRyeQotCQkJICAgdG8gZGV0ZXJtaW5lIGNvcnJlY3QgcmVtb3RlIGluIGNhc2Ugb2YgY2hpcCB2ZW5kb3IKLQkJCSAgIHJlZmVyZW5jZSBJRHMgYXJlIHVzZWQuICovCi0JCQljYXNlIFVTQl9WSURfQUZBVEVDSDoKLQkJCQltZW1zZXQobWFudWZhY3R1cmVyLCAwLCBzaXplb2YobWFudWZhY3R1cmVyKSk7Ci0JCQkJdXNiX3N0cmluZyh1ZGV2LCB1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIsCi0JCQkJCW1hbnVmYWN0dXJlciwgc2l6ZW9mKG1hbnVmYWN0dXJlcikpOwotCQkJCWlmICghc3RyY21wKCJHZW5pYXRlY2giLCBtYW51ZmFjdHVyZXIpKSB7Ci0JCQkJCS8qIGlNYW51ZmFjdHVyZXIgMSBHZW5pYXRlY2gKLQkJCQkJICAgaVByb2R1Y3QgICAgICAyIEFGOTAxNSAqLwotCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkJICBhZjkwMTVfcmNfa2V5c19teWdpY3R2OwotCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXlnaWN0dik7Ci0JCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQotCQkJCQkgIGFmOTAxNV9pcl90YWJsZV9teWdpY3R2OwotCQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX215Z2ljdHYpOwotCQkJCX0gZWxzZSBpZiAoIXN0cmNtcCgiTVNJIiwgbWFudWZhY3R1cmVyKSkgewotCQkJCQkvKiBpTWFudWZhY3R1cmVyIDEgTVNJCi0JCQkJCSAgIGlQcm9kdWN0ICAgICAgMiBNU0kgSy1WT1ggKi8KLQkJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJCSAgYWY5MDE1X3JjX2tleXNfbXNpOwotCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXNpKTsKLQkJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJCSAgYWY5MDE1X2lyX3RhYmxlX21zaTsKLQkJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9tc2kpOwotCQkJCX0gZWxzZSBpZiAodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPT0KLQkJCQkJY3B1X3RvX2xlMTYoVVNCX1BJRF9UUkVLU1RPUl9EVkJUKSkgewotCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkJICBhZjkwMTVfcmNfa2V5c190cmVrc3RvcjsKLQkJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX3RyZWtzdG9yKTsKLQkJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJCSAgYWY5MDE1X2lyX3RhYmxlX3RyZWtzdG9yOwotCQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX3RyZWtzdG9yKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFVTQl9WSURfQVZFUk1FRElBOgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYSk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJICBhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBVU0JfVklEX01TSV8yOgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfbXNpX2RpZ2l2b3hfaWlpOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX21zaV9kaWdpdm94X2lpaSk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJICBhZjkwMTVfaXJfdGFibGVfbXNpX2RpZ2l2b3hfaWlpOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9tc2lfZGlnaXZveF9paWkpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9CisJCX0gZWxzZQorCQkJYWY5MDE1X3NldF9yZW1vdGVfY29uZmlnKHVkZXYsICZhZjkwMTVfcHJvcGVydGllc1tpXSk7CiAJfQogCiAJLyogVFMgbW9kZSAtIG9uZSBvciB0d28gcmVjZWl2ZXJzICovCkBAIC0xMDAxLDYgKzEwMDIsOSBAQAogCQkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0uZ3Bpb1sxXSA9IEFGOTAxM19HUElPX0xPOwogCQkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0ucmZfc3BlY19pbnYgPSAxOwogCQkJYnJlYWs7CisJCWNhc2UgQUY5MDEzX1RVTkVSX1REQTE4MjE4OgorCQkJd2FybigidHVuZXIgTlhQIFREQTE4MjE4IG5vdCBzdXBwb3J0ZWQgeWV0Iik7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAkJZGVmYXVsdDoKIAkJCXdhcm4oInR1bmVyIGlkOiVkIG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSByZXBvcnQhIiwgdmFsKTsKIAkJCXJldHVybiAtRU5PREVWOwpAQCAtMTEyNSwxMSArMTEyOSw2IEBACiAKIAkJZGViX2luZm8oIiVzOiBpbml0IEkyQ1xuIiwgX19mdW5jX18pOwogCQlyZXQgPSBhZjkwMTVfaTJjX2luaXQoYWRhcC0+ZGV2KTsKLQotCQkvKiBkdW1wIGVlcHJvbSAoZGVidWcpICovCi0JCXJldCA9IGFmOTAxNV9lZXByb21fZHVtcChhZGFwLT5kZXYpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKIAl9IGVsc2UgewogCQkvKiBzZWxlY3QgSTJDIGFkYXB0ZXIgKi8KIAkJaTJjX2FkYXAgPSAmc3RhdGUtPmkyY19hZGFwOwpAQCAtMTI5NSw2ICsxMjk0LDggQEAKIC8qIDI1ICove1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgIFVTQl9QSURfS1dPUkxEXzM5OVVfMil9LAogCXtVU0JfREVWSUNFKFVTQl9WSURfS1dPUkxEXzIsICBVU0JfUElEX0tXT1JMRF9QQzE2MF9UKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgIFVTQl9QSURfU1ZFT05fU1RWMjApfSwKKwl7VVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCAgVVNCX1BJRF9USU5ZVFdJTl8yKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9MRUFEVEVLLCAgIFVTQl9QSURfV0lORkFTVF9EVFYyMDAwRFMpfSwKIAl7MH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFmOTAxNV91c2JfdGFibGUpOwpAQCAtMTM4MSw3ICsxMzgyLDggQEAKIAkJCX0sCiAJCQl7CiAJCQkJLm5hbWUgPSAiRGlnaXRhbE5vdyBUaW55VHdpbiBEVkItVCBSZWNlaXZlciIsCi0JCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzVdLCBOVUxMfSwKKwkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbNV0sCisJCQkJCSAgICAgJmFmOTAxNV91c2JfdGFibGVbMjhdLCBOVUxMfSwKIAkJCQkud2FybV9pZHMgPSB7TlVMTH0sCiAJCQl9LAogCQkJewpAQCAtMTU2Niw3ICsxNTY4LDcgQEAKIAogCQkuaTJjX2FsZ28gPSAmYWY5MDE1X2kyY19hbGdvLAogCi0JCS5udW1fZGV2aWNlX2Rlc2NzID0gNiwgLyogbWF4IDkgKi8KKwkJLm51bV9kZXZpY2VfZGVzY3MgPSA3LCAvKiBtYXggOSAqLwogCQkuZGV2aWNlcyA9IHsKIAkJCXsKIAkJCQkubmFtZSA9ICJBdmVyTWVkaWEgQVZlclRWIFZvbGFyIEdQUyA4MDUgKEE4MDUpIiwKQEAgLTE2MDAsNiArMTYwMiwxMSBAQAogCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVsyN10sIE5VTEx9LAogCQkJCS53YXJtX2lkcyA9IHtOVUxMfSwKIAkJCX0sCisJCQl7CisJCQkJLm5hbWUgPSAiTGVhZHRlayBXaW5GYXN0IERUVjIwMDBEUyIsCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzI5XSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKIAkJfQogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmgKaW5kZXggOTMxYzg1MS4uZWYzNmIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oCkBAIC0xMDcsNiArMTA3LDcgQEAKIAl1MTYgbXQyMDYwX2lmMVsyXTsKIAl1MTYgZmlybXdhcmVfc2l6ZTsKIAl1MTYgZmlybXdhcmVfY2hlY2tzdW07CisJdTMyIGVlcHJvbV9zdW07CiAJdTggICppcl90YWJsZTsKIAl1MTYgaXJfdGFibGVfc2l6ZTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hejYwMjcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzI5MGIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hejYwMjcuYwpAQCAtMCwwICsxLDExNTEgQEAKKy8qIERWQiBVU0IgY29tcGxpYW50IExpbnV4IGRyaXZlciBmb3IgdGhlIEFaVVJFV0FWRSBEVkItUy9TMiBVU0IyLjAgKEFaNjAyNykKKyAqIHJlY2VpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBZGFtcy5YdSA8YWRhbXMueHVAYXp3YXZlLmNvbS5jbj4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICoJdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqCVNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiBzZWUgRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqLworI2luY2x1ZGUgImF6NjAyNy5oIgorCisjaW5jbHVkZSAic3RiMDg5OV9kcnYuaCIKKyNpbmNsdWRlICJzdGIwODk5X3JlZy5oIgorI2luY2x1ZGUgInN0YjA4OTlfY2ZnLmgiCisKKyNpbmNsdWRlICJzdGI2MTAwLmgiCisjaW5jbHVkZSAic3RiNjEwMF9jZmcuaCIKKyNpbmNsdWRlICJkdmJfY2FfZW41MDIyMS5oIgorCitpbnQgZHZiX3VzYl9hejYwMjdfZGVidWc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGR2Yl91c2JfYXo2MDI3X2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1Z2dpbmcgbGV2ZWwgKDE9aW5mbyx4ZmVyPTIscmM9NCAob3ItYWJsZSkpLiIgRFZCX1VTQl9ERUJVR19TVEFUVVMpOworCitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKworc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgeworCXN0cnVjdCBkdmJfY2FfZW41MDIyMSBjYTsKKwlzdHJ1Y3QgbXV0ZXggY2FfbXV0ZXg7CisJdTggcG93ZXJfc3RhdGU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0YjA4OTlfczFfcmVnIGF6NjAyN19zdGIwODk5X3MxX2luaXRfMVtdID0geworCisJLyogMHgwMDAwMDAwYiwgU1lTUkVHICovCisJeyBTVEIwODk5X0RFVl9JRAkJLCAweDMwIH0sCisJeyBTVEIwODk5X0RJU0NOVFJMMQkJLCAweDMyIH0sCisJeyBTVEIwODk5X0RJU0NOVFJMMiAgICAgCSwgMHg4MCB9LAorCXsgU1RCMDg5OV9ESVNSWF9TVDAgICAgIAksIDB4MDQgfSwKKwl7IFNUQjA4OTlfRElTUlhfU1QxICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0RJU1BBUklUWSAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9ESVNGSUZPICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRElTU1RBVFVTCQksIDB4MjAgfSwKKwl7IFNUQjA4OTlfRElTRjIyICAgICAgICAJLCAweDk5IH0sCisJeyBTVEIwODk5X0RJU0YyMlJYICAgICAgCSwgMHhhOCB9LAorCS8qIFNZU1JFRyA/ICovCisJeyBTVEIwODk5X0FDUlBSRVNDICAgICAgCSwgMHgxMSB9LAorCXsgU1RCMDg5OV9BQ1JESVYxICAgICAgIAksIDB4MGEgfSwKKwl7IFNUQjA4OTlfQUNSRElWMiAgICAgICAJLCAweDA1IH0sCisJeyBTVEIwODk5X0RBQ1IxICAgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9EQUNSMiAgICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfT1VUQ0ZHICAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X01PREVDRkcgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JUlFTVEFUVVNfMwkJLCAweGZlIH0sCisJeyBTVEIwODk5X0lSUVNUQVRVU18yCQksIDB4MDMgfSwKKwl7IFNUQjA4OTlfSVJRU1RBVFVTXzEJCSwgMHg3YyB9LAorCXsgU1RCMDg5OV9JUlFTVEFUVVNfMAkJLCAweGY0IH0sCisJeyBTVEIwODk5X0lSUU1TS18zICAgICAgCSwgMHhmMyB9LAorCXsgU1RCMDg5OV9JUlFNU0tfMiAgICAgIAksIDB4ZmMgfSwKKwl7IFNUQjA4OTlfSVJRTVNLXzEgICAgICAJLCAweGZmIH0sCisJeyBTVEIwODk5X0lSUU1TS18wCQksIDB4ZmYgfSwKKwl7IFNUQjA4OTlfSVJRQ0ZHCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSTJDQ0ZHICAgICAgICAJLCAweDg4IH0sCisJeyBTVEIwODk5X0kyQ1JQVCAgICAgICAgCSwgMHg1OCB9LAorCXsgU1RCMDg5OV9JT1BWQUxVRTUJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JT1BWQUxVRTQJCSwgMHgzMyB9LAorCXsgU1RCMDg5OV9JT1BWQUxVRTMJCSwgMHg2ZCB9LAorCXsgU1RCMDg5OV9JT1BWQUxVRTIJCSwgMHg5MCB9LAorCXsgU1RCMDg5OV9JT1BWQUxVRTEJCSwgMHg2MCB9LAorCXsgU1RCMDg5OV9JT1BWQUxVRTAJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9HUElPMDBDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzAxQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wMkNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDNDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA0Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wNUNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDZDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA3Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wOENGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDlDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzEwQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xMUNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTJDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzEzQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xNENGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTVDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE2Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xN0NGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMThDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE5Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8yMENGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9TREFUQ0ZHICAgICAgIAksIDB4YjggfSwKKwl7IFNUQjA4OTlfU0NMVENGRyAgICAgICAJLCAweGJhIH0sCisJeyBTVEIwODk5X0FHQ1JGQ0ZHICAgICAgCSwgMHgxYyB9LCAvKiAweDExICovCisJeyBTVEIwODk5X0dQSU8yMiAgICAgICAgCSwgMHg4MiB9LCAvKiBBR0NCQjJDRkcgKi8KKwl7IFNUQjA4OTlfR1BJTzIxICAgICAgICAJLCAweDkxIH0sIC8qIEFHQ0JCMUNGRyAqLworCXsgU1RCMDg5OV9ESVJDTEtDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfQ0xLT1VUMjdDRkcgICAJLCAweDdlIH0sCisJeyBTVEIwODk5X1NUREJZQ0ZHICAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9DUzBDRkcgICAgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfQ1MxQ0ZHICAgICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0RJU0VRQ09DRkcgICAgCSwgMHgyMCB9LAorCXsgU1RCMDg5OV9HUElPMzJDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMzNDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMzRDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMzVDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMzZDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMzdDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMzhDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMzlDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9OQ09BUlNFICAgICAgIAksIDB4MTcgfSwgLyogMHgxNSA9IDI3IE1oeiBDbG9jaywgRi8zID0gMTk4TUh6LCBGLzYgPSA5OU1IeiAqLworCXsgU1RCMDg5OV9TWU5UQ1RSTCAgICAgIAksIDB4MDIgfSwgLyogMHgwMCA9IENMSyBmcm9tIENMS0ksIDB4MDIgPSBDTEsgZnJvbSBYVEFMSSAqLworCXsgU1RCMDg5OV9GSUxUQ1RSTCAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfU1lTQ1RSTCAgICAgICAJLCAweDAxIH0sCisJeyBTVEIwODk5X1NUT1BDTEsxICAgICAgCSwgMHgyMCB9LAorCXsgU1RCMDg5OV9TVE9QQ0xLMiAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSU5UQlVGU1RBVFVTCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSU5UQlVGQ1RSTCAgICAJLCAweDBhIH0sCisJeyAweGZmZmYJCQksIDB4ZmYgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RiMDg5OV9zMV9yZWcgYXo2MDI3X3N0YjA4OTlfczFfaW5pdF8zW10gPSB7CisJeyBTVEIwODk5X0RFTU9EICAgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9SQ09NUEMgICAgICAgIAksIDB4YzkgfSwKKwl7IFNUQjA4OTlfQUdDMUNOICAgICAgICAJLCAweDAxIH0sCisJeyBTVEIwODk5X0FHQzFSRUYgICAgICAgCSwgMHgxMCB9LAorCXsgU1RCMDg5OV9SVEMJICAgICAgICAJLCAweDIzIH0sCisJeyBTVEIwODk5X1RNR0NGRyAgICAgICAgCSwgMHg0ZSB9LAorCXsgU1RCMDg5OV9BR0MyUkVGICAgICAgIAksIDB4MzQgfSwKKwl7IFNUQjA4OTlfVExTUiAgICAgICAgICAJLCAweDg0IH0sCisJeyBTVEIwODk5X0NGRCAgICAgICAgICAgCSwgMHhmNyB9LAorCXsgU1RCMDg5OV9BQ0xDCSAgICAgICAgCSwgMHg4NyB9LAorCXsgU1RCMDg5OV9CQ0xDICAgICAgICAgIAksIDB4OTQgfSwKKwl7IFNUQjA4OTlfRVFPTiAgICAgICAgICAJLCAweDQxIH0sCisJeyBTVEIwODk5X0xEVCAgICAgICAgICAgCSwgMHhmMSB9LAorCXsgU1RCMDg5OV9MRFQyICAgICAgICAgIAksIDB4ZTMgfSwKKwl7IFNUQjA4OTlfRVFVQUxSRUYgICAgICAJLCAweGI0IH0sCisJeyBTVEIwODk5X1RNR1JBTVAgICAgICAgCSwgMHgxMCB9LAorCXsgU1RCMDg5OV9UTUdUSEQgICAgICAgIAksIDB4MzAgfSwKKwl7IFNUQjA4OTlfSURDQ09NUAkJLCAweGZkIH0sCisJeyBTVEIwODk5X1FEQ0NPTVAJCSwgMHhmZiB9LAorCXsgU1RCMDg5OV9QT1dFUkkJCSwgMHgwYyB9LAorCXsgU1RCMDg5OV9QT1dFUlEJCSwgMHgwZiB9LAorCXsgU1RCMDg5OV9SQ09NUAkJCSwgMHg2YyB9LAorCXsgU1RCMDg5OV9BR0NJUUlOCQksIDB4ODAgfSwKKwl7IFNUQjA4OTlfQUdDMkkxCQksIDB4MDYgfSwKKwl7IFNUQjA4OTlfQUdDMkkyCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVExJUgkJCSwgMHgzMCB9LAorCXsgU1RCMDg5OV9SVEYJCQksIDB4N2YgfSwKKwl7IFNUQjA4OTlfRFNUQVRVUwkJLCAweDAwIH0sCisJeyBTVEIwODk5X0xESQkJCSwgMHhiYyB9LAorCXsgU1RCMDg5OV9DRlJNCQkJLCAweGVhIH0sCisJeyBTVEIwODk5X0NGUkwJCQksIDB4MzEgfSwKKwl7IFNUQjA4OTlfTklSTQkJCSwgMHgyYiB9LAorCXsgU1RCMDg5OV9OSVJMCQkJLCAweDgwIH0sCisJeyBTVEIwODk5X0lTWU1CCQkJLCAweDFkIH0sCisJeyBTVEIwODk5X1FTWU1CCQkJLCAweGE2IH0sCisJeyBTVEIwODk5X1NGUkggICAgICAgICAgCSwgMHgyZiB9LAorCXsgU1RCMDg5OV9TRlJNICAgICAgICAgIAksIDB4NjggfSwKKwl7IFNUQjA4OTlfU0ZSTCAgICAgICAgICAJLCAweDQwIH0sCisJeyBTVEIwODk5X1NGUlVQSCAgICAgICAgCSwgMHgyZiB9LAorCXsgU1RCMDg5OV9TRlJVUE0gICAgICAgIAksIDB4NjggfSwKKwl7IFNUQjA4OTlfU0ZSVVBMICAgICAgICAJLCAweDQwIH0sCisJeyBTVEIwODk5X0VRVUFJMQkJLCAweDAyIH0sCisJeyBTVEIwODk5X0VRVUFRMQkJLCAweGZmIH0sCisJeyBTVEIwODk5X0VRVUFJMgkJLCAweDA0IH0sCisJeyBTVEIwODk5X0VRVUFRMgkJLCAweDA1IH0sCisJeyBTVEIwODk5X0VRVUFJMwkJLCAweDAyIH0sCisJeyBTVEIwODk5X0VRVUFRMwkJLCAweGZkIH0sCisJeyBTVEIwODk5X0VRVUFJNAkJLCAweDAzIH0sCisJeyBTVEIwODk5X0VRVUFRNAkJLCAweDA3IH0sCisJeyBTVEIwODk5X0VRVUFJNQkJLCAweDA4IH0sCisJeyBTVEIwODk5X0VRVUFRNQkJLCAweGY1IH0sCisJeyBTVEIwODk5X0RTVEFUVVMyCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVlNUQVRVUyAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X1ZFUlJPUgkJLCAweDg2IH0sCisJeyBTVEIwODk5X0lRU1dBUAkJLCAweDJhIH0sCisJeyBTVEIwODk5X0VDTlQxTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0VDTlQxTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X0VDTlQyTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0VDTlQyTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X0VDTlQzTQkJLCAweDBhIH0sCisJeyBTVEIwODk5X0VDTlQzTAkJLCAweGFkIH0sCisJeyBTVEIwODk5X0ZFQ0FVVE8xICAgICAgCSwgMHgwNiB9LAorCXsgU1RCMDg5OV9GRUNNCSAgICAgICAgCSwgMHgwMSB9LAorCXsgU1RCMDg5OV9WVEgxMiAgICAgICAgIAksIDB4YjAgfSwKKwl7IFNUQjA4OTlfVlRIMjMgICAgICAgICAJLCAweDdhIH0sCisJeyBTVEIwODk5X1ZUSDM0CSAgICAgICAgCSwgMHg1OCB9LAorCXsgU1RCMDg5OV9WVEg1NiAgICAgICAgIAksIDB4MzggfSwKKwl7IFNUQjA4OTlfVlRINjcgICAgICAgICAJLCAweDM0IH0sCisJeyBTVEIwODk5X1ZUSDc4ICAgICAgICAgCSwgMHgyNCB9LAorCXsgU1RCMDg5OV9QUlZJVCAgICAgICAgIAksIDB4ZmYgfSwKKwl7IFNUQjA4OTlfVklUU1lOQyAgICAgICAJLCAweDE5IH0sCisJeyBTVEIwODk5X1JTVUxDICAgICAgICAgCSwgMHhiMSB9LCAvKiBEVkIgPSAweGIxLCBEU1MgPSAweGExICovCisJeyBTVEIwODk5X1RTVUxDICAgICAgICAgCSwgMHg0MiB9LAorCXsgU1RCMDg5OV9SU0xMQyAgICAgICAgIAksIDB4NDEgfSwKKwl7IFNUQjA4OTlfVFNMUEwJICAgICAgICAJLCAweDEyIH0sCisJeyBTVEIwODk5X1RTQ0ZHSCAgICAgICAgCSwgMHgwYyB9LAorCXsgU1RCMDg5OV9UU0NGR00gICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNDRkdMICAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTT1VUCQkJLCAweDY5IH0sIC8qIDB4MGQgZm9yIENBTSAqLworCXsgU1RCMDg5OV9SU1NZTkNERUwgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNJTkhERUxIICAgICAJLCAweDAyIH0sCisJeyBTVEIwODk5X1RTSU5IREVMTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTSU5IREVMTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTTExTVEtNCQksIDB4MWIgfSwKKwl7IFNUQjA4OTlfVFNMTFNUS0wJCSwgMHhiMyB9LAorCXsgU1RCMDg5OV9UU1VMU1RLTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTVUxTVEtMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfUENLTEVOVUwJCSwgMHhiYyB9LAorCXsgU1RCMDg5OV9QQ0tMRU5MTAkJLCAweGNjIH0sCisJeyBTVEIwODk5X1JTUENLTEVOCQksIDB4YmQgfSwKKwl7IFNUQjA4OTlfVFNTVEFUVVMJCSwgMHg5MCB9LAorCXsgU1RCMDg5OV9FUlJDVFJMMSAgICAgIAksIDB4YjYgfSwKKwl7IFNUQjA4OTlfRVJSQ1RSTDIgICAgICAJLCAweDk1IH0sCisJeyBTVEIwODk5X0VSUkNUUkwzICAgICAgCSwgMHg4ZCB9LAorCXsgU1RCMDg5OV9ETU9OTVNLMQkJLCAweDI3IH0sCisJeyBTVEIwODk5X0RNT05NU0swCQksIDB4MDMgfSwKKwl7IFNUQjA4OTlfREVNQVBWSVQgICAgICAJLCAweDVjIH0sCisJeyBTVEIwODk5X1BMUEFSTQkJLCAweDE5IH0sCisJeyBTVEIwODk5X1BERUxDVFJMICAgICAgCSwgMHg0OCB9LAorCXsgU1RCMDg5OV9QREVMQ1RSTDIgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfQkJIQ1RSTDEgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0JCSENUUkwyICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9IWVNUVEhSRVNIICAgIAksIDB4NzcgfSwKKwl7IFNUQjA4OTlfTUFUQ1NUTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X01BVENTVEwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9VUExDU1RNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVVBMQ1NUTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X0RGTENTVE0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9ERkxDU1RMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfU1lOQ0NTVAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1NZTkNEQ1NUTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X1NZTkNEQ1NUTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X0lTSV9FTlRSWQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0lTSV9CSVRfRU4JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9NQVRTVFJNCQksIDB4ZjAgfSwKKwl7IFNUQjA4OTlfTUFUU1RSTAkJLCAweDAyIH0sCisJeyBTVEIwODk5X1VQTFNUUk0JCSwgMHg0NSB9LAorCXsgU1RCMDg5OV9VUExTVFJMCQksIDB4NjAgfSwKKwl7IFNUQjA4OTlfREZMU1RSTQkJLCAweGUzIH0sCisJeyBTVEIwODk5X0RGTFNUUkwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9TWU5DU1RSCQksIDB4NDcgfSwKKwl7IFNUQjA4OTlfU1lOQ0RTVFJNCQksIDB4MDUgfSwKKwl7IFNUQjA4OTlfU1lOQ0RTVFJMCQksIDB4MTggfSwKKwl7IFNUQjA4OTlfQ0ZHUERFTFNUQVRVUzEJLCAweDE5IH0sCisJeyBTVEIwODk5X0NGR1BERUxTVEFUVVMyCSwgMHgyYiB9LAorCXsgU1RCMDg5OV9CQkZFUlJPUk0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9CQkZFUlJPUkwJCSwgMHgwMSB9LAorCXsgU1RCMDg5OV9VUEtURVJST1JNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVVBLVEVSUk9STAkJLCAweDAwIH0sCisJeyAweGZmZmYJCQksIDB4ZmYgfSwKK307CisKKworCitzdHJ1Y3Qgc3RiMDg5OV9jb25maWcgYXo2MDI3X3N0YjA4OTlfY29uZmlnID0geworCS5pbml0X2RldgkJPSBhejYwMjdfc3RiMDg5OV9zMV9pbml0XzEsCisJLmluaXRfczJfZGVtb2QJCT0gc3RiMDg5OV9zMl9pbml0XzIsCisJLmluaXRfczFfZGVtb2QJCT0gYXo2MDI3X3N0YjA4OTlfczFfaW5pdF8zLAorCS5pbml0X3MyX2ZlYwkJPSBzdGIwODk5X3MyX2luaXRfNCwKKwkuaW5pdF90c3QJCT0gc3RiMDg5OV9zMV9pbml0XzUsCisKKwkuZGVtb2RfYWRkcmVzcyAJCT0gMHhkMCwgLyogMHg2OCwgMHhkMCA+PiAxICovCisKKwkueHRhbF9mcmVxCQk9IDI3MDAwMDAwLAorCS5pbnZlcnNpb24JCT0gSVFfU1dBUF9PTiwgLyogMSAqLworCisJLmxvX2NsawkJCT0gNzY1MDAwMDAsCisJLmhpX2NsawkJCT0gOTkwMDAwMDAsCisKKwkuZXNub19hdmUJCT0gU1RCMDg5OV9EVkJTMl9FU05PX0FWRSwKKwkuZXNub19xdWFudAkJPSBTVEIwODk5X0RWQlMyX0VTTk9fUVVBTlQsCisJLmF2ZnJhbWVzX2NvYXJzZQk9IFNUQjA4OTlfRFZCUzJfQVZGUkFNRVNfQ09BUlNFLAorCS5hdmZyYW1lc19maW5lCQk9IFNUQjA4OTlfRFZCUzJfQVZGUkFNRVNfRklORSwKKwkubWlzc190aHJlc2hvbGQJCT0gU1RCMDg5OV9EVkJTMl9NSVNTX1RIUkVTSE9MRCwKKwkudXdwX3RocmVzaG9sZF9hY3EJPSBTVEIwODk5X0RWQlMyX1VXUF9USFJFU0hPTERfQUNRLAorCS51d3BfdGhyZXNob2xkX3RyYWNrCT0gU1RCMDg5OV9EVkJTMl9VV1BfVEhSRVNIT0xEX1RSQUNLLAorCS51d3BfdGhyZXNob2xkX3NvZgk9IFNUQjA4OTlfRFZCUzJfVVdQX1RIUkVTSE9MRF9TT0YsCisJLnNvZl9zZWFyY2hfdGltZW91dAk9IFNUQjA4OTlfRFZCUzJfU09GX1NFQVJDSF9USU1FT1VULAorCisJLmJ0cl9uY29fYml0cwkJPSBTVEIwODk5X0RWQlMyX0JUUl9OQ09fQklUUywKKwkuYnRyX2dhaW5fc2hpZnRfb2Zmc2V0CT0gU1RCMDg5OV9EVkJTMl9CVFJfR0FJTl9TSElGVF9PRkZTRVQsCisJLmNybF9uY29fYml0cwkJPSBTVEIwODk5X0RWQlMyX0NSTF9OQ09fQklUUywKKwkubGRwY19tYXhfaXRlcgkJPSBTVEIwODk5X0RWQlMyX0xEUENfTUFYX0lURVIsCisKKwkudHVuZXJfZ2V0X2ZyZXF1ZW5jeQk9IHN0YjYxMDBfZ2V0X2ZyZXF1ZW5jeSwKKwkudHVuZXJfc2V0X2ZyZXF1ZW5jeQk9IHN0YjYxMDBfc2V0X2ZyZXF1ZW5jeSwKKwkudHVuZXJfc2V0X2JhbmR3aWR0aAk9IHN0YjYxMDBfc2V0X2JhbmR3aWR0aCwKKwkudHVuZXJfZ2V0X2JhbmR3aWR0aAk9IHN0YjYxMDBfZ2V0X2JhbmR3aWR0aCwKKwkudHVuZXJfc2V0X3Jmc2lnZ2Fpbgk9IE5VTEwsCit9OworCitzdHJ1Y3Qgc3RiNjEwMF9jb25maWcgYXo2MDI3X3N0YjYxMDBfY29uZmlnID0geworCS50dW5lcl9hZGRyZXNzCT0gMHhjMCwKKwkucmVmY2xvY2sJPSAyNzAwMDAwMCwKK307CisKKworLyogY2hlY2sgZm9yIG11dGV4IEZJWE1FICovCitpbnQgYXo2MDI3X3VzYl9pbl9vcChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IHJlcSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHU4ICpiLCBpbnQgYmxlbikKK3sKKwlpbnQgcmV0ID0gLTE7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+dXNiX211dGV4KSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZC0+dWRldiwKKwkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShkLT51ZGV2LCAwKSwKKwkJCSAgICAgIHJlcSwKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4sCisJCQkgICAgICB2YWx1ZSwKKwkJCSAgICAgIGluZGV4LAorCQkJICAgICAgYiwKKwkJCSAgICAgIGJsZW4sCisJCQkgICAgICAyMDAwKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXdhcm4oInVzYiBpbiBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwl9IGVsc2UKKwkJcmV0ID0gMDsKKworCWRlYl94ZmVyKCJpbjogcmVxLiAlMDJ4LCB2YWw6ICUwNHgsIGluZDogJTA0eCwgYnVmZmVyOiAiLCByZXEsIHZhbHVlLCBpbmRleCk7CisJZGVidWdfZHVtcChiLCBibGVuLCBkZWJfeGZlcik7CisKKwltdXRleF91bmxvY2soJmQtPnVzYl9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhejYwMjdfdXNiX291dF9vcChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsCisJCQkgICAgIHU4IHJlcSwKKwkJCSAgICAgdTE2IHZhbHVlLAorCQkJICAgICB1MTYgaW5kZXgsCisJCQkgICAgIHU4ICpiLAorCQkJICAgICBpbnQgYmxlbikKK3sKKwlpbnQgcmV0OworCisJZGViX3hmZXIoIm91dDogcmVxLiAlMDJ4LCB2YWw6ICUwNHgsIGluZDogJTA0eCwgYnVmZmVyOiAiLCByZXEsIHZhbHVlLCBpbmRleCk7CisJZGVidWdfZHVtcChiLCBibGVuLCBkZWJfeGZlcik7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT51c2JfbXV0ZXgpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkLT51ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGQtPnVkZXYsIDApLAorCQkJICAgICAgcmVxLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQsCisJCQkgICAgICB2YWx1ZSwKKwkJCSAgICAgIGluZGV4LAorCQkJICAgICAgYiwKKwkJCSAgICAgIGJsZW4sCisJCQkgICAgICAyMDAwKTsKKworCWlmIChyZXQgIT0gYmxlbikgeworCQl3YXJuKCJ1c2Igb3V0IG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQltdXRleF91bmxvY2soJmQtPnVzYl9tdXRleCk7CisJCXJldHVybiAtRUlPOworCX0gZWxzZXsKKwkJbXV0ZXhfdW5sb2NrKCZkLT51c2JfbXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X3N0cmVhbWluZ19jdHJsKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBvbm9mZikKK3sKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCisJZGViX2luZm8oIiVzICVkIiwgX19mdW5jX18sIG9ub2ZmKTsKKworCXJlcSA9IDB4QkM7CisJdmFsdWUgPSBvbm9mZjsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChhZGFwLT5kZXYsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApCisJCXdhcm4oInVzYiBvdXQgb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBrZXlzIGZvciB0aGUgZW5jbG9zZWQgcmVtb3RlIGNvbnRyb2wgKi8KK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgYXo2MDI3X3JjX2tleXNbXSA9IHsKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorfTsKKworLyogcmVtb3RlIGNvbnRyb2wgc3R1ZmYgKGRvZXMgbm90IHdvcmsgd2l0aCBteSBib3gpICovCitzdGF0aWMgaW50IGF6NjAyN19yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsIGludCAqc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCitpbnQgYXo2MDI3X3Bvd2VyX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgb25vZmYpCit7CisJdTggdiA9IG9ub2ZmOworCXJldHVybiBhejYwMjdfdXNiX291dF9vcChkLDB4QkMsdiwzLE5VTEwsMSk7Cit9CisqLworCitzdGF0aWMgaW50IGF6NjAyN19jaV9yZWFkX2F0dHJpYnV0ZV9tZW0oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwKKwkJCQkJaW50IHNsb3QsCisJCQkJCWludCBhZGRyZXNzKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiljYS0+ZGF0YTsKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKilkLT5wcml2OworCisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKwl1OCBiWzEyXTsKKworCWlmIChzbG90ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmc3RhdGUtPmNhX211dGV4KTsKKworCXJlcSA9IDB4QzE7CisJdmFsdWUgPSBhZGRyZXNzOworCWluZGV4ID0gMDsKKwlibGVuID0gMTsKKworCXJldCA9IGF6NjAyN191c2JfaW5fb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGIsIGJsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCXdhcm4oInVzYiBpbiBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyZXQgPSBiWzBdOworCX0KKworCW11dGV4X3VubG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF6NjAyN19jaV93cml0ZV9hdHRyaWJ1dGVfbWVtKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsCisJCQkJCSBpbnQgc2xvdCwKKwkJCQkJIGludCBhZGRyZXNzLAorCQkJCQkgdTggdmFsdWUpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKWNhLT5kYXRhOworCXN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqKWQtPnByaXY7CisKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWUxOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKworCWRlYl9pbmZvKCIlcyAlZCIsIF9fZnVuY19fLCBzbG90KTsKKwlpZiAoc2xvdCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnN0YXRlLT5jYV9tdXRleCk7CisJcmVxID0gMHhDMjsKKwl2YWx1ZTEgPSBhZGRyZXNzOworCWluZGV4ID0gdmFsdWU7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChkLCByZXEsIHZhbHVlMSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkKKwkJd2FybigidXNiIG91dCBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKworCW11dGV4X3VubG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF6NjAyN19jaV9yZWFkX2NhbV9jb250cm9sKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsCisJCQkJICAgICAgaW50IHNsb3QsCisJCQkJICAgICAgdTggYWRkcmVzcykKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopY2EtPmRhdGE7CisJc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisJdTggYlsxMl07CisKKwlpZiAoc2xvdCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnN0YXRlLT5jYV9tdXRleCk7CisKKwlyZXEgPSAweEMzOworCXZhbHVlID0gYWRkcmVzczsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDI7CisKKwlyZXQgPSBhejYwMjdfdXNiX2luX29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBiLCBibGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQl3YXJuKCJ1c2IgaW4gb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCXJldCA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJaWYgKGJbMF0gPT0gMCkKKwkJCXdhcm4oIlJlYWQgQ0kgSU8gZXJyb3IiKTsKKworCQlyZXQgPSBiWzFdOworCQlkZWJfaW5mbygicmVhZCBjYW0gZGF0YSA9ICV4IGZyb20gMHgleCIsIGJbMV0sIHZhbHVlKTsKKwl9CisKKwltdXRleF91bmxvY2soJnN0YXRlLT5jYV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhejYwMjdfY2lfd3JpdGVfY2FtX2NvbnRyb2woc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwKKwkJCQkgICAgICAgaW50IHNsb3QsCisJCQkJICAgICAgIHU4IGFkZHJlc3MsCisJCQkJICAgICAgIHU4IHZhbHVlKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiljYS0+ZGF0YTsKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKilkLT5wcml2OworCisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlMTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisKKwlpZiAoc2xvdCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnN0YXRlLT5jYV9tdXRleCk7CisJcmVxID0gMHhDNDsKKwl2YWx1ZTEgPSBhZGRyZXNzOworCWluZGV4ID0gdmFsdWU7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChkLCByZXEsIHZhbHVlMSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkgeworCQl3YXJuKCJ1c2Igb3V0IG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKK2ZhaWxlZDoKKwltdXRleF91bmxvY2soJnN0YXRlLT5jYV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBDSV9DYW1SZWFkeShzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopY2EtPmRhdGE7CisKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCXU4IGJbMTJdOworCisJcmVxID0gMHhDODsKKwl2YWx1ZSA9IDA7CisJaW5kZXggPSAwOworCWJsZW4gPSAxOworCisJcmV0ID0gYXo2MDI3X3VzYl9pbl9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgYiwgYmxlbik7CisJaWYgKHJldCA8IDApIHsKKwkJd2FybigidXNiIGluIG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0gZWxzZXsKKwkJcmV0ID0gYlswXTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhejYwMjdfY2lfc2xvdF9yZXNldChzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopY2EtPmRhdGE7CisJc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKworCWludCByZXQsIGk7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisKKwltdXRleF9sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCisJcmVxID0gMHhDNjsKKwl2YWx1ZSA9IDE7CisJaW5kZXggPSAwOworCWJsZW4gPSAwOworCisJcmV0ID0gYXo2MDI3X3VzYl9vdXRfb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkgeworCQl3YXJuKCJ1c2Igb3V0IG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwltc2xlZXAoNTAwKTsKKwlyZXEgPSAweEM2OworCXZhbHVlID0gMDsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKSB7CisJCXdhcm4oInVzYiBvdXQgb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAxNTsgaSsrKSB7CisJCW1zbGVlcCgxMDApOworCisJCWlmIChDSV9DYW1SZWFkeShjYSwgc2xvdCkpIHsKKwkJCWRlYl9pbmZvKCJDQU0gUmVhZHkiKTsKKwkJCWJyZWFrOworCQl9CisJfQorCW1zbGVlcCg1MDAwKTsKKworZmFpbGVkOgorCW11dGV4X3VubG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF6NjAyN19jaV9zbG90X3NodXRkb3duKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsIGludCBzbG90KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF6NjAyN19jaV9zbG90X3RzX2VuYWJsZShzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopY2EtPmRhdGE7CisJc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisKKwlkZWJfaW5mbygiJXMiLCBfX2Z1bmNfXyk7CisJbXV0ZXhfbG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXEgPSAweEM3OworCXZhbHVlID0gMTsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKSB7CisJCXdhcm4oInVzYiBvdXQgb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworZmFpbGVkOgorCW11dGV4X3VubG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF6NjAyN19jaV9wb2xsX3Nsb3Rfc3RhdHVzKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsIGludCBzbG90LCBpbnQgb3BlbikKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopY2EtPmRhdGE7CisJc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCXU4IGJbMTJdOworCisJbXV0ZXhfbG9jaygmc3RhdGUtPmNhX211dGV4KTsKKworCXJlcSA9IDB4QzU7CisJdmFsdWUgPSAwOworCWluZGV4ID0gMDsKKwlibGVuID0gMTsKKworCXJldCA9IGF6NjAyN191c2JfaW5fb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGIsIGJsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCXdhcm4oInVzYiBpbiBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwl9IGVsc2UKKwkJcmV0ID0gMDsKKworCWlmIChiWzBdID09IDApIHsKKwkJcmV0ID0gMDsKKworCX0gZWxzZSBpZiAoYlswXSA9PSAxKSB7CisJCXJldCA9IERWQl9DQV9FTjUwMjIxX1BPTExfQ0FNX1BSRVNFTlQgfAorCQkgICAgICBEVkJfQ0FfRU41MDIyMV9QT0xMX0NBTV9SRUFEWTsKKwl9CisKKwltdXRleF91bmxvY2soJnN0YXRlLT5jYV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgdm9pZCBhejYwMjdfY2lfdW5pbml0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGU7CisKKwlkZWJfaW5mbygiJXMiLCBfX2Z1bmNfXyk7CisKKwlpZiAoTlVMTCA9PSBkKQorCQlyZXR1cm47CisKKwlzdGF0ZSA9IChzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqKWQtPnByaXY7CisJaWYgKE5VTEwgPT0gc3RhdGUpCisJCXJldHVybjsKKworCWlmIChOVUxMID09IHN0YXRlLT5jYS5kYXRhKQorCQlyZXR1cm47CisKKwlkdmJfY2FfZW41MDIyMV9yZWxlYXNlKCZzdGF0ZS0+Y2EpOworCisJbWVtc2V0KCZzdGF0ZS0+Y2EsIDAsIHNpemVvZihzdGF0ZS0+Y2EpKTsKK30KKworCitzdGF0aWMgaW50IGF6NjAyN19jaV9pbml0KHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmEpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gYS0+ZGV2OworCXN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqKWQtPnByaXY7CisJaW50IHJldDsKKworCWRlYl9pbmZvKCIlcyIsIF9fZnVuY19fKTsKKworCW11dGV4X2luaXQoJnN0YXRlLT5jYV9tdXRleCk7CisKKwlzdGF0ZS0+Y2Eub3duZXIJCQk9IFRISVNfTU9EVUxFOworCXN0YXRlLT5jYS5yZWFkX2F0dHJpYnV0ZV9tZW0JPSBhejYwMjdfY2lfcmVhZF9hdHRyaWJ1dGVfbWVtOworCXN0YXRlLT5jYS53cml0ZV9hdHRyaWJ1dGVfbWVtCT0gYXo2MDI3X2NpX3dyaXRlX2F0dHJpYnV0ZV9tZW07CisJc3RhdGUtPmNhLnJlYWRfY2FtX2NvbnRyb2wJPSBhejYwMjdfY2lfcmVhZF9jYW1fY29udHJvbDsKKwlzdGF0ZS0+Y2Eud3JpdGVfY2FtX2NvbnRyb2wJPSBhejYwMjdfY2lfd3JpdGVfY2FtX2NvbnRyb2w7CisJc3RhdGUtPmNhLnNsb3RfcmVzZXQJCT0gYXo2MDI3X2NpX3Nsb3RfcmVzZXQ7CisJc3RhdGUtPmNhLnNsb3Rfc2h1dGRvd24JCT0gYXo2MDI3X2NpX3Nsb3Rfc2h1dGRvd247CisJc3RhdGUtPmNhLnNsb3RfdHNfZW5hYmxlCT0gYXo2MDI3X2NpX3Nsb3RfdHNfZW5hYmxlOworCXN0YXRlLT5jYS5wb2xsX3Nsb3Rfc3RhdHVzCT0gYXo2MDI3X2NpX3BvbGxfc2xvdF9zdGF0dXM7CisJc3RhdGUtPmNhLmRhdGEJCQk9IGQ7CisKKwlyZXQgPSBkdmJfY2FfZW41MDIyMV9pbml0KCZhLT5kdmJfYWRhcCwKKwkJCQkgICZzdGF0ZS0+Y2EsCisJCQkJICAwLCAvKiBmbGFncyAqLworCQkJCSAgMSk7Lyogbl9zbG90cyAqLworCWlmIChyZXQgIT0gMCkgeworCQllcnIoIkNhbm5vdCBpbml0aWFsaXplIENJOiBFcnJvciAlZC4iLCByZXQpOworCQltZW1zZXQoJnN0YXRlLT5jYSwgMCwgc2l6ZW9mKHN0YXRlLT5jYSkpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRlYl9pbmZvKCJDSSBpbml0aWFsaXplZC4iKTsKKworCXJldHVybiAwOworfQorCisvKgorc3RhdGljIGludCBhejYwMjdfcmVhZF9tYWNfYWRkcihzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IG1hY1s2XSkKK3sKKwlhejYwMjdfdXNiX2luX29wKGQsIDB4YjcsIDYsIDAsICZtYWNbMF0sIDYpOworCXJldHVybiAwOworfQorKi8KKworc3RhdGljIGludCBhejYwMjdfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3sKKworCXU4IGJ1ZjsKKwlpbnQgcmV0OworCXN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAgPSBmZS0+ZHZiLT5wcml2OworCisJc3RydWN0IGkyY19tc2cgaTJjX21zZyA9IHsKKwkJLmFkZHIJPSAweDk5LAorCQkuZmxhZ3MJPSAwLAorCQkuYnVmCT0gJmJ1ZiwKKwkJLmxlbgk9IDEKKwl9OworCisJLyoKKwkgKiAyICAgLS0xOHYKKwkgKiAxICAgLS0xM3YKKwkgKiAwICAgLS1vZmYKKwkgKi8KKwlzd2l0Y2ggKHZvbHRhZ2UpIHsKKwljYXNlIFNFQ19WT0xUQUdFXzEzOgorCQlidWYgPSAxOworCQlyZXQgPSBpMmNfdHJhbnNmZXIoJmFkYXAtPmRldi0+aTJjX2FkYXAsICZpMmNfbXNnLCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIFNFQ19WT0xUQUdFXzE4OgorCQlidWYgPSAyOworCQlyZXQgPSBpMmNfdHJhbnNmZXIoJmFkYXAtPmRldi0+aTJjX2FkYXAsICZpMmNfbXNnLCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIFNFQ19WT0xUQUdFX09GRjoKKwkJYnVmID0gMDsKKwkJcmV0ID0gaTJjX3RyYW5zZmVyKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAmaTJjX21zZywgMSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgYXo2MDI3X2Zyb250ZW5kX3Bvd2Vyb24oc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCisJcmVxID0gMHhCQzsKKwl2YWx1ZSA9IDE7IC8qIHBvd2VyIG9uICovCisJaW5kZXggPSAzOworCWJsZW4gPSAwOworCisJcmV0ID0gYXo2MDI3X3VzYl9vdXRfb3AoYWRhcC0+ZGV2LCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorc3RhdGljIGludCBhejYwMjdfZnJvbnRlbmRfcmVzZXQoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCisJLyogcmVzZXQgZGVtb2R1bGF0b3IgKi8KKwlyZXEgPSAweEMwOworCXZhbHVlID0gMTsgLyogaGlnaCAqLworCWluZGV4ID0gMzsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGFkYXAtPmRldiwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXEgPSAweEMwOworCXZhbHVlID0gMDsgLyogbG93ICovCisJaW5kZXggPSAzOworCWJsZW4gPSAwOworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDIwMCk7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChhZGFwLT5kZXYsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiAtRUlPOworCisJbXNsZWVwX2ludGVycnVwdGlibGUoMjAwKTsKKworCXJlcSA9IDB4QzA7CisJdmFsdWUgPSAxOyAvKmhpZ2ggKi8KKwlpbmRleCA9IDM7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChhZGFwLT5kZXYsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiAtRUlPOworCisJbXNsZWVwX2ludGVycnVwdGlibGUoMjAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhejYwMjdfZnJvbnRlbmRfdHNieXBhc3Moc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKQoreworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisKKwkvKiBUUyBwYXNzdGhyb3VnaCAqLworCXJlcSA9IDB4Qzc7CisJdmFsdWUgPSBvbm9mZjsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChhZGFwLT5kZXYsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCisJYXo2MDI3X2Zyb250ZW5kX3Bvd2Vyb24oYWRhcCk7CisJYXo2MDI3X2Zyb250ZW5kX3Jlc2V0KGFkYXApOworCisJZGViX2luZm8oImFkYXAgPSAlcCwgZGV2ID0gJXBcbiIsIGFkYXAsIGFkYXAtPmRldik7CisJYWRhcC0+ZmUgPSBzdGIwODk5X2F0dGFjaCgmYXo2MDI3X3N0YjA4OTlfY29uZmlnLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCk7CisKKwlpZiAoYWRhcC0+ZmUpIHsKKwkJZGViX2luZm8oImZvdW5kIFNUQjA4OTkgRFZCLVMvRFZCLVMyIGZyb250ZW5kIEAweCUwMngiLCBhejYwMjdfc3RiMDg5OV9jb25maWcuZGVtb2RfYWRkcmVzcyk7CisJCWlmIChzdGI2MTAwX2F0dGFjaChhZGFwLT5mZSwgJmF6NjAyN19zdGI2MTAwX2NvbmZpZywgJmFkYXAtPmRldi0+aTJjX2FkYXApKSB7CisJCQlkZWJfaW5mbygiZm91bmQgU1RCNjEwMCBEVkItUy9EVkItUzIgZnJvbnRlbmQgQDB4JTAyeCIsIGF6NjAyN19zdGI2MTAwX2NvbmZpZy50dW5lcl9hZGRyZXNzKTsKKwkJCWFkYXAtPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBhejYwMjdfc2V0X3ZvbHRhZ2U7CisJCQlhejYwMjdfY2lfaW5pdChhZGFwKTsKKwkJfSBlbHNlIHsKKwkJCWFkYXAtPmZlID0gTlVMTDsKKwkJfQorCX0gZWxzZQorCQl3YXJuKCJubyBmcm9udC1lbmQgYXR0YWNoZWRcbiIpOworCisJYXo2MDI3X2Zyb250ZW5kX3RzYnlwYXNzKGFkYXAsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBhejYwMjdfcHJvcGVydGllczsKKworc3RhdGljIHZvaWQgYXo2MDI3X3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJYXo2MDI3X2NpX3VuaW5pdChkKTsKKwlkdmJfdXNiX2RldmljZV9leGl0KGludGYpOworfQorCisKK3N0YXRpYyBpbnQgYXo2MDI3X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwKKwkJCQkgICAmYXo2MDI3X3Byb3BlcnRpZXMsCisJCQkJICAgVEhJU19NT0RVTEUsCisJCQkJICAgTlVMTCwKKwkJCQkgICBhZGFwdGVyX25yKTsKK30KKworLyogSTJDICovCitzdGF0aWMgaW50IGF6NjAyN19pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLCBpbnQgbnVtKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJaW50IGkgPSAwLCBqID0gMCwgbGVuID0gMDsKKwlpbnQgcmV0OworCXUxNiBpbmRleDsKKwl1MTYgdmFsdWU7CisJaW50IGxlbmd0aDsKKwl1OCByZXE7CisJdTggZGF0YVsyNTZdOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCisJCXJldHVybiAtRUFHQUlOOworCisJaWYgKG51bSA+IDIpCisJCXdhcm4oIm1vcmUgdGhhbiAyIGkyYyBtZXNzYWdlcyBhdCBhIHRpbWUgaXMgbm90IGhhbmRsZWQgeWV0LiBUT0RPLiIpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisKKwkJaWYgKG1zZ1tpXS5hZGRyID09IDB4OTkpIHsKKwkJCXJlcSA9IDB4QkU7CisJCQlpbmRleCA9IDA7CisJCQl2YWx1ZSA9IG1zZ1tpXS5idWZbMF0gJiAweDAwZmY7CisJCQlsZW5ndGggPSAxOworCQkJYXo2MDI3X3VzYl9vdXRfb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGRhdGEsIGxlbmd0aCk7CisJCX0KKworCQlpZiAobXNnW2ldLmFkZHIgPT0gMHhkMCkgeworCQkJLyogd3JpdGUvcmVhZCByZXF1ZXN0ICovCisJCQlpZiAoaSArIDEgPCBudW0gJiYgKG1zZ1tpICsgMV0uZmxhZ3MgJiBJMkNfTV9SRCkpIHsKKwkJCQlyZXEgPSAweEI5OworCQkJCWluZGV4ID0gKCgobXNnW2ldLmJ1ZlswXSA8PCA4KSAmIDB4ZmYwMCkgfCAobXNnW2ldLmJ1ZlsxXSAmIDB4MDBmZikpOworCQkJCXZhbHVlID0gbXNnW2ldLmFkZHIgKyAobXNnW2ldLmxlbiA8PCA4KTsKKwkJCQlsZW5ndGggPSBtc2dbaSArIDFdLmxlbiArIDY7CisJCQkJcmV0ID0gYXo2MDI3X3VzYl9pbl9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgZGF0YSwgbGVuZ3RoKTsKKwkJCQlsZW4gPSBtc2dbaSArIDFdLmxlbjsKKwkJCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspCisJCQkJCW1zZ1tpICsgMV0uYnVmW2pdID0gZGF0YVtqICsgNV07CisKKwkJCQlpKys7CisJCQl9IGVsc2UgeworCisJCQkJaWYgKG1zZ1tpXS5hZGRyID09IDB4ZDApIHsKKwkJCQkJLyogZGVtb2QgMTZiaXQgYWRkciAqLworCQkJCQlyZXEgPSAweEJEOworCQkJCQlpbmRleCA9ICgoKG1zZ1tpXS5idWZbMF0gPDwgOCkgJiAweGZmMDApIHwgKG1zZ1tpXS5idWZbMV0gJiAweDAwZmYpKTsKKwkJCQkJdmFsdWUgPSBtc2dbaV0uYWRkciArICgyIDw8IDgpOworCQkJCQlsZW5ndGggPSBtc2dbaV0ubGVuIC0gMjsKKwkJCQkJbGVuID0gbXNnW2ldLmxlbiAtIDI7CisJCQkJCWZvciAoaiA9IDA7IGogPCBsZW47IGorKykKKwkJCQkJCWRhdGFbal0gPSBtc2dbaV0uYnVmW2ogKyAyXTsKKworCQkJCX0KKwkJCQlhejYwMjdfdXNiX291dF9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgZGF0YSwgbGVuZ3RoKTsKKwkJCX0KKwkJfQorCisJCWlmIChtc2dbaV0uYWRkciA9PSAweGMwKSB7CisJCQlpZiAobXNnW2ldLmZsYWdzICYgSTJDX01fUkQpIHsKKworCQkJCXJlcSA9IDB4Qjk7CisJCQkJaW5kZXggPSAweDA7CisJCQkJdmFsdWUgPSBtc2dbaV0uYWRkcjsKKwkJCQlsZW5ndGggPSBtc2dbaV0ubGVuICsgNjsKKwkJCQlyZXQgPSBhejYwMjdfdXNiX2luX29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBkYXRhLCBsZW5ndGgpOworCQkJCWxlbiA9IG1zZ1tpXS5sZW47CisJCQkJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKQorCQkJCQltc2dbaV0uYnVmW2pdID0gZGF0YVtqICsgNV07CisKKwkJCX0gZWxzZSB7CisKKwkJCQlyZXEgPSAweEJEOworCQkJCWluZGV4ID0gbXNnW2ldLmJ1ZlswXSAmIDB4MDBGRjsKKwkJCQl2YWx1ZSA9IG1zZ1tpXS5hZGRyICsgKDEgPDwgOCk7CisJCQkJbGVuZ3RoID0gbXNnW2ldLmxlbiAtIDE7CisJCQkJbGVuID0gbXNnW2ldLmxlbiAtIDE7CisKKwkJCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspCisJCQkJCWRhdGFbal0gPSBtc2dbaV0uYnVmW2ogKyAxXTsKKworCQkJCWF6NjAyN191c2Jfb3V0X29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBkYXRhLCBsZW5ndGgpOworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKKworCXJldHVybiBpOworfQorCisKK3N0YXRpYyB1MzIgYXo2MDI3X2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gYXo2MDI3X2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlciAgID0gYXo2MDI3X2kyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gYXo2MDI3X2kyY19mdW5jLAorfTsKKworaW50IGF6NjAyN19pZGVudGlmeV9zdGF0ZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCSAgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgKnByb3BzLAorCQkJICBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gKipkZXNjLAorCQkJICBpbnQgKmNvbGQpCit7CisJdTggYlsxNl07CisJczE2IHJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAorCQkJCSAgMHhiNywKKwkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4sCisJCQkJICA2LAorCQkJCSAgMCwKKwkJCQkgIGIsCisJCQkJICA2LAorCQkJCSAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCisJKmNvbGQgPSByZXQgPD0gMDsKKworCWRlYl9pbmZvKCJjb2xkOiAlZFxuIiwgKmNvbGQpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhejYwMjdfdXNiX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WSURfQVpVUkVXQVZFLCBVU0JfUElEX0FaVVJFV0FWRV9BWjYwMjcpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfVEVSUkFURUMsICBVU0JfUElEX1RFUlJBVEVDX0RWQlMyQ0kpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfVEVDSE5JU0FULCBVU0JfUElEX1RFQ0hOSVNBVF9VU0IyX0hEQ0kpIH0sCisJeyB9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGF6NjAyN191c2JfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgYXo2MDI3X3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCS51c2JfY3RybCA9IENZUFJFU1NfRlgyLAorCS5maXJtd2FyZSAgICAgICAgICAgID0gImR2Yi11c2ItYXo2MDI3LTAzLmZ3IiwKKwkubm9fcmVjb25uZWN0ICAgICAgICA9IDEsCisKKwkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSksCisJLmlkZW50aWZ5X3N0YXRlCQk9IGF6NjAyN19pZGVudGlmeV9zdGF0ZSwKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHsKKwkJeworCQkJLnN0cmVhbWluZ19jdHJsICAgPSBhejYwMjdfc3RyZWFtaW5nX2N0cmwsCisJCQkuZnJvbnRlbmRfYXR0YWNoICA9IGF6NjAyN19mcm9udGVuZF9hdHRhY2gsCisKKwkJCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkJCS5zdHJlYW0gPSB7CisJCQkJLnR5cGUgPSBVU0JfQlVMSywKKwkJCQkuY291bnQgPSAxMCwKKwkJCQkuZW5kcG9pbnQgPSAweDAyLAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gNDA5NiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCisJCX0KKwl9LAorLyoKKwkucG93ZXJfY3RybCAgICAgICA9IGF6NjAyN19wb3dlcl9jdHJsLAorCS5yZWFkX21hY19hZGRyZXNzID0gYXo2MDI3X3JlYWRfbWFjX2FkZHIsCisgKi8KKwkucmNfa2V5X21hcCAgICAgICA9IGF6NjAyN19yY19rZXlzLAorCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShhejYwMjdfcmNfa2V5cyksCisJLnJjX2ludGVydmFsICAgICAgPSA0MDAsCisJLnJjX3F1ZXJ5ICAgICAgICAgPSBhejYwMjdfcmNfcXVlcnksCisJLmkyY19hbGdvICAgICAgICAgPSAmYXo2MDI3X2kyY19hbGdvLAorCisJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAorCS5kZXZpY2VzID0geworCQl7CisJCQkubmFtZSA9ICJBWlVSRVdBVkUgRFZCLVMvUzIgVVNCMi4wIChBWjYwMjcpIiwKKwkJCS5jb2xkX2lkcyA9IHsgJmF6NjAyN191c2JfdGFibGVbMF0sIE5VTEwgfSwKKwkJCS53YXJtX2lkcyA9IHsgTlVMTCB9LAorCQl9LAorCQl7IE5VTEwgfSwKKwl9Cit9OworCisvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXo2MDI3X3VzYl9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImR2Yl91c2JfYXo2MDI3IiwKKwkucHJvYmUgCQk9IGF6NjAyN191c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QgCT0gYXo2MDI3X3VzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSAJPSBhejYwMjdfdXNiX3RhYmxlLAorfTsKKworLyogbW9kdWxlIHN0dWZmICovCitzdGF0aWMgaW50IF9faW5pdCBhejYwMjdfdXNiX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmYXo2MDI3X3VzYl9kcml2ZXIpOworCWlmIChyZXN1bHQpIHsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiAoJWQpIiwgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGF6NjAyN191c2JfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIGZyb20gdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlcigmYXo2MDI3X3VzYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhejYwMjdfdXNiX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGF6NjAyN191c2JfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBZGFtcyBYdSA8QWRhbXMueHVAYXp3YXZlLmNvbS5jbj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBBWlVSRVdBVkUgRFZCLVMvUzIgVVNCMi4wIChBWjYwMjcpIik7CitNT0RVTEVfVkVSU0lPTigiMS4wIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hejYwMjcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2FmZTE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hejYwMjcuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9EVkJfVVNCX1ZQNjAyN19IXworI2RlZmluZSBfRFZCX1VTQl9WUDYwMjdfSF8KKworI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImF6NjAyNyIKKyNpbmNsdWRlICJkdmItdXNiLmgiCisKKworZXh0ZXJuIGludCBkdmJfdXNiX2F6NjAyN19kZWJ1ZzsKKyNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2F6NjAyN19kZWJ1ZywgMHgwMSwgYXJncykKKyNkZWZpbmUgZGViX3hmZXIoYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2F6NjAyN19kZWJ1ZywgMHgwMiwgYXJncykKKyNkZWZpbmUgZGViX3JjKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2F6NjAyN19kZWJ1ZywgMHgwNCwgYXJncykKKyNkZWZpbmUgZGViX2ZlKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2F6NjAyN19kZWJ1ZywgMHgwOCwgYXJncykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKaW5kZXggMDVmYjI4ZTkuLmE3Yjg0MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKQEAgLTExODQsNiArMTE4NCw5IEBACiAJLm9zY19jbGtfZnJlcSA9IDMwNDAwLCAvKiBpbiBrSHogKi8KIAkuaWZfZnJlcSA9IDAsIC8qIHplcm8gSUYgKi8KIAkuemlmX3N3YXBfaXEgPSAxLAorCS5hZ2NfbWluID0gMHgyRSwKKwkuYWdjX21heCA9IDB4OTAsCisJLmFnY19ob2xkX2xvb3AgPSAwLAogfTsKIAogc3RhdGljIGludCBjeHVzYl9teWdpY2FfZDY4OV9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKaW5kZXggNDk1YTkwNS4uODNmYzI0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKQEAgLTQyLDcgKzQyLDYgQEAKIAl1MTYgbXQyMDYwX2lmMVsyXTsKIAl1OCByY190b2dnbGU7CiAJdTggcmNfY291bnRlcjsKLQl1OCByY19mdW5jX3ZlcnNpb247CiAJdTggaXNfZGliNzAwMHBjOwogCXU4IGZ3X3VzZV9uZXdfaTJjX2FwaTsKIAl1OCBkaXNhYmxlX3N0cmVhbWluZ19tYXN0ZXJfbW9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCmluZGV4IDBkM2M5YTkuLjRmOTYxZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYwpAQCAtNDcxLDE0ICs0NzEsMjA5IEBACiAJcmV0dXJuIGRpYjA3MDBfY3RybF93cihhZGFwLT5kZXYsIGIsIDQpOwogfQogCisvKiBOdW1iZXIgb2Yga2V5cHJlc3NlcyB0byBpZ25vcmUgYmVmb3JlIHN0YXJ0IHJlcGVhdGluZyAqLworI2RlZmluZSBSQ19SRVBFQVRfREVMQVlfVjFfMjAgMTAKKworLyogVGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBSQyByZXNwb25zZSBwYWNrZXQgc3RhcnRpbmcgaW4gZmlybXdhcmUgMS4yMCAqLworc3RydWN0IGRpYjA3MDBfcmNfcmVzcG9uc2UgeworCXU4IHJlcG9ydF9pZDsKKwl1OCBkYXRhX3N0YXRlOworCXUxNiBzeXN0ZW07CisJdTggZGF0YTsKKwl1OCBub3RfZGF0YTsKK307CisjZGVmaW5lIFJDX01TR19TSVpFX1YxXzIwIDYKKworc3RhdGljIHZvaWQgZGliMDcwMF9yY191cmJfY29tcGxldGlvbihzdHJ1Y3QgdXJiICpwdXJiKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IHB1cmItPmNvbnRleHQ7CisJc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXA7CisJc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0OworCXN0cnVjdCBkaWIwNzAwX3JjX3Jlc3BvbnNlIHBvbGxfcmVwbHk7CisJdTggKmJ1ZjsKKwlpbnQgZm91bmQgPSAwOworCXUzMiBldmVudDsKKwlpbnQgc3RhdGU7CisJaW50IGk7CisKKwlkZWJfaW5mbygiJXMoKVxuIiwgX19mdW5jX18pOworCWlmIChkID09IE5VTEwpCisJCXJldHVybjsKKworCWlmIChkLT5yY19pbnB1dF9kZXYgPT0gTlVMTCkgeworCQkvKiBUaGlzIHdpbGwgb2NjdXIgaWYgZGlzYWJsZV9yY19wb2xsaW5nPTEgKi8KKwkJdXNiX2ZyZWVfdXJiKHB1cmIpOworCQlyZXR1cm47CisJfQorCisJa2V5bWFwID0gZC0+cHJvcHMucmNfa2V5X21hcDsKKwlzdCA9IGQtPnByaXY7CisJYnVmID0gKHU4ICopcHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJaWYgKHB1cmItPnN0YXR1cyA8IDApIHsKKwkJZGViX2luZm8oImRpc2NvbnRpbnVpbmcgcG9sbGluZ1xuIik7CisJCXVzYl9mcmVlX3VyYihwdXJiKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwdXJiLT5hY3R1YWxfbGVuZ3RoICE9IFJDX01TR19TSVpFX1YxXzIwKSB7CisJCWRlYl9pbmZvKCJtYWxmb3JtZWQgcmMgbXNnIHNpemU9JWRcbiIsIHB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlnb3RvIHJlc3VibWl0OworCX0KKworCS8qIFNldCBpbml0aWFsIHJlc3VsdHMgaW4gY2FzZSB3ZSBleGl0IHRoZSBmdW5jdGlvbiBlYXJseSAqLworCWV2ZW50ID0gMDsKKwlzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKKworCWRlYl9kYXRhKCJJUiByYXcgJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggKGxlbiAlZClcbiIsIGJ1ZlswXSwKKwkJIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sIGJ1Zls0XSwgYnVmWzVdLCBwdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKworCXN3aXRjaCAoZHZiX3VzYl9kaWIwNzAwX2lyX3Byb3RvKSB7CisJY2FzZSAwOgorCQkvKiBORUMgUHJvdG9jb2wgKi8KKwkJcG9sbF9yZXBseS5yZXBvcnRfaWQgID0gMDsKKwkJcG9sbF9yZXBseS5kYXRhX3N0YXRlID0gMTsKKwkJcG9sbF9yZXBseS5zeXN0ZW0gICAgID0gYnVmWzJdOworCQlwb2xsX3JlcGx5LmRhdGEgICAgICAgPSBidWZbNF07CisJCXBvbGxfcmVwbHkubm90X2RhdGEgICA9IGJ1Zls1XTsKKworCQkvKiBORUMgcHJvdG9jb2wgc2VuZHMgcmVwZWF0IGNvZGUgYXMgMCAwIDAgRkYgKi8KKwkJaWYgKChwb2xsX3JlcGx5LnN5c3RlbSA9PSAweDAwKSAmJiAocG9sbF9yZXBseS5kYXRhID09IDB4MDApCisJCSAgICAmJiAocG9sbF9yZXBseS5ub3RfZGF0YSA9PSAweGZmKSkgeworCQkJcG9sbF9yZXBseS5kYXRhX3N0YXRlID0gMjsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFJDNSBQcm90b2NvbCAqLworCQlwb2xsX3JlcGx5LnJlcG9ydF9pZCAgPSBidWZbMF07CisJCXBvbGxfcmVwbHkuZGF0YV9zdGF0ZSA9IGJ1ZlsxXTsKKwkJcG9sbF9yZXBseS5zeXN0ZW0gICAgID0gKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlszXTsKKwkJcG9sbF9yZXBseS5kYXRhICAgICAgID0gYnVmWzRdOworCQlwb2xsX3JlcGx5Lm5vdF9kYXRhICAgPSBidWZbNV07CisJCWJyZWFrOworCX0KKworCWlmICgocG9sbF9yZXBseS5kYXRhICsgcG9sbF9yZXBseS5ub3RfZGF0YSkgIT0gMHhmZikgeworCQkvKiBLZXkgZmFpbGVkIGludGVncml0eSBjaGVjayAqLworCQllcnIoImtleSBmYWlsZWQgaW50ZWdyaXR5IGNoZWNrOiAlMDR4ICUwMnggJTAyeCIsCisJCSAgICBwb2xsX3JlcGx5LnN5c3RlbSwKKwkJICAgIHBvbGxfcmVwbHkuZGF0YSwgcG9sbF9yZXBseS5ub3RfZGF0YSk7CisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJZGViX2RhdGEoInJpZD0lMDJ4IGRzPSUwMnggc209JTA0eCBkPSUwMnggbmQ9JTAyeFxuIiwKKwkJIHBvbGxfcmVwbHkucmVwb3J0X2lkLCBwb2xsX3JlcGx5LmRhdGFfc3RhdGUsCisJCSBwb2xsX3JlcGx5LnN5c3RlbSwgcG9sbF9yZXBseS5kYXRhLCBwb2xsX3JlcGx5Lm5vdF9kYXRhKTsKKworCS8qIEZpbmQgdGhlIGtleSBpbiB0aGUgbWFwICovCisJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7CisJCWlmIChyYzVfY3VzdG9tKCZrZXltYXBbaV0pID09IChwb2xsX3JlcGx5LnN5c3RlbSAmIDB4ZmYpICYmCisJCSAgICByYzVfZGF0YSgma2V5bWFwW2ldKSA9PSBwb2xsX3JlcGx5LmRhdGEpIHsKKwkJCWV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZm91bmQgPT0gMCkgeworCQllcnIoIlVua25vd24gcmVtb3RlIGNvbnRyb2xsZXIga2V5OiAlMDR4ICUwMnggJTAyeCIsCisJCSAgICBwb2xsX3JlcGx5LnN5c3RlbSwgcG9sbF9yZXBseS5kYXRhLCBwb2xsX3JlcGx5Lm5vdF9kYXRhKTsKKwkJZC0+bGFzdF9ldmVudCA9IDA7CisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJaWYgKHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSA9PSAxKSB7CisJCS8qIE5ldyBrZXkgaGl0ICovCisJCXN0LT5yY19jb3VudGVyID0gMDsKKwkJZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7CisJCXN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOworCQlkLT5sYXN0X2V2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OworCX0gZWxzZSBpZiAocG9sbF9yZXBseS5kYXRhX3N0YXRlID09IDIpIHsKKwkJLyogS2V5IHJlcGVhdGVkICovCisJCXN0LT5yY19jb3VudGVyKys7CisKKwkJLyogcHJldmVudHMgdW53YW50ZWQgZG91YmxlIGhpdHMgKi8KKwkJaWYgKHN0LT5yY19jb3VudGVyID4gUkNfUkVQRUFUX0RFTEFZX1YxXzIwKSB7CisJCQlldmVudCA9IGQtPmxhc3RfZXZlbnQ7CisJCQlzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKKwkJCXN0LT5yY19jb3VudGVyID0gUkNfUkVQRUFUX0RFTEFZX1YxXzIwOworCQl9CisJfSBlbHNlIHsKKwkJZXJyKCJVbmtub3duIGRhdGEgc3RhdGUgWyVkXSIsIHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSk7CisJfQorCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgUkVNT1RFX05PX0tFWV9QUkVTU0VEOgorCQlicmVhazsKKwljYXNlIFJFTU9URV9LRVlfUFJFU1NFRDoKKwkJZGViX2luZm8oImtleSBwcmVzc2VkXG4iKTsKKwkJZC0+bGFzdF9ldmVudCA9IGV2ZW50OworCWNhc2UgUkVNT1RFX0tFWV9SRVBFQVQ6CisJCWRlYl9pbmZvKCJrZXkgcmVwZWF0ZWRcbiIpOworCQlpbnB1dF9ldmVudChkLT5yY19pbnB1dF9kZXYsIEVWX0tFWSwgZXZlbnQsIDEpOworCQlpbnB1dF9zeW5jKGQtPnJjX2lucHV0X2Rldik7CisJCWlucHV0X2V2ZW50KGQtPnJjX2lucHV0X2RldiwgRVZfS0VZLCBkLT5sYXN0X2V2ZW50LCAwKTsKKwkJaW5wdXRfc3luYyhkLT5yY19pbnB1dF9kZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKK3Jlc3VibWl0OgorCS8qIENsZWFuIHRoZSBidWZmZXIgYmVmb3JlIHdlIHJlcXVldWUgKi8KKwltZW1zZXQocHVyYi0+dHJhbnNmZXJfYnVmZmVyLCAwLCBSQ19NU0dfU0laRV9WMV8yMCk7CisKKwkvKiBSZXF1ZXVlIFVSQiAqLworCXVzYl9zdWJtaXRfdXJiKHB1cmIsIEdGUF9BVE9NSUMpOworfQorCiBpbnQgZGliMDcwMF9yY19zZXR1cChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7CisJc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0ID0gZC0+cHJpdjsKIAl1OCByY19zZXR1cFszXSA9IHtSRVFVRVNUX1NFVF9SQywgZHZiX3VzYl9kaWIwNzAwX2lyX3Byb3RvLCAwfTsKLQlpbnQgaSA9IGRpYjA3MDBfY3RybF93cihkLCByY19zZXR1cCwgMyk7CisJc3RydWN0IHVyYiAqcHVyYjsKKwlpbnQgcmV0OworCWludCBpOworCisJaWYgKGQtPnByb3BzLnJjX2tleV9tYXAgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKiBTZXQgdGhlIElSIG1vZGUgKi8KKwlpID0gZGliMDcwMF9jdHJsX3dyKGQsIHJjX3NldHVwLCAzKTsKIAlpZiAoaTwwKSB7CiAJCWVycigiaXIgcHJvdG9jb2wgc2V0dXAgZmFpbGVkIik7CiAJCXJldHVybiAtMTsKIAl9CisKKwlpZiAoc3QtPmZ3X3ZlcnNpb24gPCAweDEwMjAwKQorCQlyZXR1cm4gMDsKKworCS8qIFN0YXJ0aW5nIGluIGZpcm13YXJlIDEuMjAsIHRoZSBSQyBpbmZvIGlzIHByb3ZpZGVkIG9uIGEgYnVsayBwaXBlICovCisJcHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKHB1cmIgPT0gTlVMTCkgeworCQllcnIoInJjIHVzYiBhbGxvYyB1cmIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXB1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGt6YWxsb2MoUkNfTVNHX1NJWkVfVjFfMjAsIEdGUF9LRVJORUwpOworCWlmIChwdXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQllcnIoInJjIGt6YWxsb2MgZmFpbGVkXG4iKTsKKwkJdXNiX2ZyZWVfdXJiKHB1cmIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHVyYi0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCXVzYl9maWxsX2J1bGtfdXJiKHB1cmIsIGQtPnVkZXYsIHVzYl9yY3ZidWxrcGlwZShkLT51ZGV2LCAxKSwKKwkJCSAgcHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBSQ19NU0dfU0laRV9WMV8yMCwKKwkJCSAgZGliMDcwMF9yY191cmJfY29tcGxldGlvbiwgZCk7CisKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihwdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZXJyKCJyYyBzdWJtaXQgdXJiIGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKaW5kZXggNDQ5NzJkMC4uMzRlYWIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCkBAIC00NzIsMjAgKzQ3MiwyNSBAQAogCiAvKiBOdW1iZXIgb2Yga2V5cHJlc3NlcyB0byBpZ25vcmUgYmVmb3JlIHN0YXJ0IHJlcGVhdGluZyAqLwogI2RlZmluZSBSQ19SRVBFQVRfREVMQVkgNgotI2RlZmluZSBSQ19SRVBFQVRfREVMQVlfVjFfMjAgMTAKIAotCi0KLS8qIFVzZWQgYnkgZmlybXdhcmUgdmVyc2lvbnMgPCAxLjIwIChkZXByZWNhdGVkKSAqLwotc3RhdGljIGludCBkaWIwNzAwX3JjX3F1ZXJ5X2xlZ2FjeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsCi0JCQkJICAgaW50ICpzdGF0ZSkKK3N0YXRpYyBpbnQgZGliMDcwMF9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsIGludCAqc3RhdGUpCiB7CiAJdTgga2V5WzRdOwogCWludCBpOwogCXN0cnVjdCBkdmJfdXNiX3JjX2tleSAqa2V5bWFwID0gZC0+cHJvcHMucmNfa2V5X21hcDsKIAlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3QgPSBkLT5wcml2OworCiAJKmV2ZW50ID0gMDsKIAkqc3RhdGUgPSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQ7CisKKwlpZiAoc3QtPmZ3X3ZlcnNpb24gPj0gMHgxMDIwMCkgeworCQkvKiBGb3IgMS4yMCBmaXJtd2FyZSAsIFdlIG5lZWQgdG8ga2VlcCB0aGUgUkMgcG9sbGluZworCQkgICBjYWxsYmFjayBzbyB3ZSBjYW4gcmV1c2UgdGhlIGlucHV0IGRldmljZSBzZXR1cCBpbgorCQkgICBkdmItdXNiLXJlbW90ZS5jLiAgSG93ZXZlciwgdGhlIGFjdHVhbCB3b3JrIGlzIGJlaW5nIGRvbmUKKwkJICAgaW4gdGhlIGJ1bGsgVVJCIGNvbXBsZXRpb24gaGFuZGxlci4gKi8KKwkJcmV0dXJuIDA7CisJfQorCiAJaT1kaWIwNzAwX2N0cmxfcmQoZCxyY19yZXF1ZXN0LDIsa2V5LDQpOwogCWlmIChpPD0wKSB7CiAJCWVycigiUkMgUXVlcnkgRmFpbGVkIik7CkBAIC01NTcsMTQ5ICs1NjIsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFJDIHJlc3BvbnNlIHBhY2tldCBzdGFydGluZyBpbiBmaXJtd2FyZSAxLjIwICovCi1zdHJ1Y3QgZGliMDcwMF9yY19yZXNwb25zZSB7Ci0JdTggcmVwb3J0X2lkOwotCXU4IGRhdGFfc3RhdGU7Ci0JdTE2IHN5c3RlbTsKLQl1OCBkYXRhOwotCXU4IG5vdF9kYXRhOwotfTsKLQotLyogVGhpcyBzdXBwb3J0cyB0aGUgbmV3IElSIHJlc3BvbnNlIGZvcm1hdCBmb3IgZmlybXdhcmUgdjEuMjAgKi8KLXN0YXRpYyBpbnQgZGliMDcwMF9yY19xdWVyeV92MV8yMChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsCi0JCQkJICBpbnQgKnN0YXRlKQotewotCXN0cnVjdCBkdmJfdXNiX3JjX2tleSAqa2V5bWFwID0gZC0+cHJvcHMucmNfa2V5X21hcDsKLQlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3QgPSBkLT5wcml2OwotCXN0cnVjdCBkaWIwNzAwX3JjX3Jlc3BvbnNlIHBvbGxfcmVwbHk7Ci0JdTggYnVmWzZdOwotCWludCBpOwotCWludCBzdGF0dXM7Ci0JaW50IGFjdGxlbjsKLQlpbnQgZm91bmQgPSAwOwotCi0JLyogU2V0IGluaXRpYWwgcmVzdWx0cyBpbiBjYXNlIHdlIGV4aXQgdGhlIGZ1bmN0aW9uIGVhcmx5ICovCi0JKmV2ZW50ID0gMDsKLQkqc3RhdGUgPSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQ7Ci0KLQkvKiBGaXJtd2FyZSB2MS4yMCBwcm92aWRlcyBSQyBkYXRhIHZpYSBidWxrIGVuZHBvaW50IDEgKi8KLQlzdGF0dXMgPSB1c2JfYnVsa19tc2coZC0+dWRldiwgdXNiX3JjdmJ1bGtwaXBlKGQtPnVkZXYsIDEpLCBidWYsCi0JCQkgICAgICBzaXplb2YoYnVmKSwgJmFjdGxlbiwgNTApOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCS8qIE5vIGRhdGEgYXZhaWxhYmxlIChtZWFuaW5nIG5vIGtleSBwcmVzcykgKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0KLQlzd2l0Y2ggKGR2Yl91c2JfZGliMDcwMF9pcl9wcm90bykgewotCWNhc2UgMDoKLQkJcG9sbF9yZXBseS5yZXBvcnRfaWQgID0gMDsKLQkJcG9sbF9yZXBseS5kYXRhX3N0YXRlID0gMTsKLQkJcG9sbF9yZXBseS5zeXN0ZW0gICAgID0gYnVmWzJdOwotCQlwb2xsX3JlcGx5LmRhdGEgICAgICAgPSBidWZbNF07Ci0JCXBvbGxfcmVwbHkubm90X2RhdGEgICA9IGJ1Zls1XTsKLQotCQkvKiBORUMgcHJvdG9jb2wgc2VuZHMgcmVwZWF0IGNvZGUgYXMgMCAwIDAgRkYgKi8KLQkJaWYgKChwb2xsX3JlcGx5LnN5c3RlbSA9PSAweDAwKSAmJiAocG9sbF9yZXBseS5kYXRhID09IDB4MDApCi0JCSAgICAmJiAocG9sbF9yZXBseS5ub3RfZGF0YSA9PSAweGZmKSkgewotCQkJcG9sbF9yZXBseS5kYXRhX3N0YXRlID0gMjsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JaWYgKGFjdGxlbiAhPSBzaXplb2YoYnVmKSkgewotCQkvKiBXZSBkaWRuJ3QgZ2V0IGJhY2sgdGhlIDYgYnl0ZSBtZXNzYWdlIHdlIGV4cGVjdGVkICovCi0JCWVycigiVW5leHBlY3RlZCBSQyByZXNwb25zZSBzaXplIFslZF0iLCBhY3RsZW4pOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcG9sbF9yZXBseS5yZXBvcnRfaWQgID0gYnVmWzBdOwotCXBvbGxfcmVwbHkuZGF0YV9zdGF0ZSA9IGJ1ZlsxXTsKLQkJcG9sbF9yZXBseS5zeXN0ZW0gICAgID0gKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlszXTsKLQlwb2xsX3JlcGx5LmRhdGEgICAgICAgPSBidWZbNF07Ci0JcG9sbF9yZXBseS5ub3RfZGF0YSAgID0gYnVmWzVdOwotCi0JCWJyZWFrOwotCX0KLQotCWlmICgocG9sbF9yZXBseS5kYXRhICsgcG9sbF9yZXBseS5ub3RfZGF0YSkgIT0gMHhmZikgewotCQkvKiBLZXkgZmFpbGVkIGludGVncml0eSBjaGVjayAqLwotCQllcnIoImtleSBmYWlsZWQgaW50ZWdyaXR5IGNoZWNrOiAlMDR4ICUwMnggJTAyeCIsCi0JCSAgICBwb2xsX3JlcGx5LnN5c3RlbSwKLQkJICAgIHBvbGxfcmVwbHkuZGF0YSwgcG9sbF9yZXBseS5ub3RfZGF0YSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQotCS8qIEZpbmQgdGhlIGtleSBpbiB0aGUgbWFwICovCi0JZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7Ci0JCWlmIChyYzVfY3VzdG9tKCZrZXltYXBbaV0pID09IChwb2xsX3JlcGx5LnN5c3RlbSAmIDB4ZmYpICYmCi0JCQlyYzVfZGF0YSgma2V5bWFwW2ldKSA9PSBwb2xsX3JlcGx5LmRhdGEpIHsKLQkJCSpldmVudCA9IGtleW1hcFtpXS5ldmVudDsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGZvdW5kID09IDApIHsKLQkJZXJyKCJVbmtub3duIHJlbW90ZSBjb250cm9sbGVyIGtleTogJTA0eCAlMDJ4ICUwMngiLAotCQkJcG9sbF9yZXBseS5zeXN0ZW0sCi0JCQlwb2xsX3JlcGx5LmRhdGEsIHBvbGxfcmVwbHkubm90X2RhdGEpOwotCQlkLT5sYXN0X2V2ZW50ID0gMDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSA9PSAxKSB7Ci0JCS8qIE5ldyBrZXkgaGl0ICovCi0JCXN0LT5yY19jb3VudGVyID0gMDsKLQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OwotCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7Ci0JCWQtPmxhc3RfZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7Ci0JfSBlbHNlIGlmIChwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPT0gMikgewotCQkvKiBLZXkgcmVwZWF0ZWQgKi8KLQkJc3QtPnJjX2NvdW50ZXIrKzsKLQotCQkvKiBwcmV2ZW50cyB1bndhbnRlZCBkb3VibGUgaGl0cyAqLwotCQlpZiAoc3QtPnJjX2NvdW50ZXIgPiBSQ19SRVBFQVRfREVMQVlfVjFfMjApIHsKLQkJCSpldmVudCA9IGQtPmxhc3RfZXZlbnQ7Ci0JCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7Ci0JCQlzdC0+cmNfY291bnRlciA9IFJDX1JFUEVBVF9ERUxBWV9WMV8yMDsKLQkJfQotCX0gZWxzZSB7Ci0JCWVycigiVW5rbm93biBkYXRhIHN0YXRlIFslZF0iLCBwb2xsX3JlcGx5LmRhdGFfc3RhdGUpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRpYjA3MDBfcmNfcXVlcnkoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmV2ZW50LCBpbnQgKnN0YXRlKQotewotCXN0cnVjdCBkaWIwNzAwX3N0YXRlICpzdCA9IGQtPnByaXY7Ci0KLQkvKiBCZWNhdXNlIHNvbWUgcGVvcGxlIG1heSBoYXZlIGltcHJvcGVybHkgbmFtZWQgZmlybXdhcmUgZmlsZXMsCi0JICAgbGV0J3MgZmlndXJlIG91dCB3aGV0aGVyIHRvIHVzZSB0aGUgbmV3IGZpcm13YXJlIGNhbGwgb3IgdGhlIGxlZ2FjeQotCSAgIGNhbGwgYmFzZWQgb24gdGhlIGZpcm13YXJlIHZlcnNpb24gZW1iZWRkZWQgaW4gdGhlIGZpbGUgKi8KLQlpZiAoc3QtPnJjX2Z1bmNfdmVyc2lvbiA9PSAwKSB7Ci0JCXUzMiBod3Zlciwgcm9tdmVyLCByYW12ZXIsIGZ3dHlwZTsKLQkJaW50IHJldCA9IGRpYjA3MDBfZ2V0X3ZlcnNpb24oZCwgJmh3dmVyLCAmcm9tdmVyLCAmcmFtdmVyLAotCQkJCQkgICAgICAmZnd0eXBlKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWVycigiQ291bGQgbm90IGRldGVybWluZSB2ZXJzaW9uIGluZm8iKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQlpZiAocmFtdmVyIDwgMHgxMDIwMCkKLQkJCXN0LT5yY19mdW5jX3ZlcnNpb24gPSAxOwotCQllbHNlCi0JCQlzdC0+cmNfZnVuY192ZXJzaW9uID0gMjsKLQl9Ci0KLQlpZiAoc3QtPnJjX2Z1bmNfdmVyc2lvbiA9PSAyKQotCQlyZXR1cm4gZGliMDcwMF9yY19xdWVyeV92MV8yMChkLCBldmVudCwgc3RhdGUpOwotCWVsc2UKLQkJcmV0dXJuIGRpYjA3MDBfcmNfcXVlcnlfbGVnYWN5KGQsIGV2ZW50LCBzdGF0ZSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgZGliMDcwMF9yY19rZXlzW10gPSB7CiAJLyogS2V5IGNvZGVzIGZvciB0aGUgdGlueSBQaW5uYWNsZSByZW1vdGUqLwogCXsgMHgwNzAwLCBLRVlfTVVURSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCmluZGV4IGJjMzU4MWQuLmFlOGI1N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKQEAgLTY0LDYgKzY0LDggQEAKICNkZWZpbmUgVVNCX1ZJRF9IVU1BWF9DT0VYCQkJMHgxMGI5CiAjZGVmaW5lIFVTQl9WSURfNzc0CQkJCTB4N2E2OQogI2RlZmluZSBVU0JfVklEX0VWT0xVVEVQQwkJCTB4MWU1OQorI2RlZmluZSBVU0JfVklEX0FaVVJFV0FWRQkJCTB4MTNkMworI2RlZmluZSBVU0JfVklEX1RFQ0hOSVNBVAkJCTB4MTRmNwogCiAvKiBQcm9kdWN0IElEcyAqLwogI2RlZmluZSBVU0JfUElEX0FEU1RFQ0hfVVNCMl9DT0xECQkJMHhhMzMzCkBAIC0xMzgsNiArMTQwLDcgQEAKICNkZWZpbmUgVVNCX1BJRF9UV0lOSEFOX1ZQNzAyMV9DT0xECQkJMHgzMjA3CiAjZGVmaW5lIFVTQl9QSURfVFdJTkhBTl9WUDcwMjFfV0FSTQkJCTB4MzIwOAogI2RlZmluZSBVU0JfUElEX1RJTllUV0lOCQkJCTB4MzIyNgorI2RlZmluZSBVU0JfUElEX1RJTllUV0lOXzIJCQkJMHhlNDAyCiAjZGVmaW5lIFVTQl9QSURfRE5UVl9USU5ZVVNCMl9DT0xECQkJMHgzMjIzCiAjZGVmaW5lIFVTQl9QSURfRE5UVl9USU5ZVVNCMl9XQVJNCQkJMHgzMjI0CiAjZGVmaW5lIFVTQl9QSURfVUxUSU1BX1RWQk9YX0NPTEQJCQkweDgxMDUKQEAgLTIwOSw2ICsyMTIsNyBAQAogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY3MUUJCQkweDAyMmIKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWNzJFCQkJMHgwMjM2CiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjczRQkJCTB4MDIzNworI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFYzMTBFCQkJMHgzMjExCiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjgwMUUJCQkweDAyM2EKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWODAxRV9TRQkJCTB4MDIzYgogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY3M0EJCQkweDAyNDMKQEAgLTI0OCw2ICsyNTIsNyBAQAogI2RlZmluZSBVU0JfUElEX0RJR0lWT1hfTUlOSV9TTF9XQVJNCQkJMHhlMzYxCiAjZGVmaW5lIFVTQl9QSURfR1JBTkRURUNfRFZCVF9VU0IyX0NPTEQJCQkweDBiYzYKICNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQjJfV0FSTQkJCTB4MGJjNworI2RlZmluZSBVU0JfUElEX1dJTkZBU1RfRFRWMjAwMERTCQkJMHg2YTA0CiAjZGVmaW5lIFVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX0NPTEQJCQkweDYwMjUKICNkZWZpbmUgVVNCX1BJRF9XSU5GQVNUX0RUVl9ET05HTEVfV0FSTQkJCTB4NjAyNgogI2RlZmluZSBVU0JfUElEX1dJTkZBU1RfRFRWX0RPTkdMRV9TVEs3NzAwUAkJMHg2ZjAwCkBAIC0yOTAsNSArMjk1LDcgQEAKICNkZWZpbmUgVVNCX1BJRF9GUklJT19XSElURQkJCQkweDAwMDEKICNkZWZpbmUgVVNCX1BJRF9UVldBWV9QTFVTCQkJCTB4MDAwMgogI2RlZmluZSBVU0JfUElEX1NWRU9OX1NUVjIwCQkJCTB4ZTM5ZAotCisjZGVmaW5lIFVTQl9QSURfQVpVUkVXQVZFX0FaNjAyNwkJCTB4MzI3NQorI2RlZmluZSBVU0JfUElEX1RFUlJBVEVDX0RWQlMyQ0kJCQkweDMyNzUKKyNkZWZpbmUgVVNCX1BJRF9URUNITklTQVRfVVNCMl9IRENJCQkJMHgwMDAyCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pbml0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaW5pdC5jCmluZGV4IGUzMzFkYjguLjVkOTFmNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pbml0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWluaXQuYwpAQCAtMjQzLDcgKzI0Myw3IEBACiAJCWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UpLEdGUF9LRVJORUwpOwogCWlmIChkID09IE5VTEwpIHsKIAkJZXJyKCJubyBtZW1vcnkgZm9yICdzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UnIik7Ci0JCXJldHVybiByZXQ7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWQtPnVkZXYgPSB1ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCmluZGV4IDZiNWRlZDkuLmEwM2VmN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKQEAgLTEwNyw2ICsxMDcsNyBAQAogCQljYXNlIFJFTU9URV9LRVlfUkVQRUFUOgogCQkJZGViX3JjKCJrZXkgcmVwZWF0ZWRcbiIpOwogCQkJaW5wdXRfZXZlbnQoZC0+cmNfaW5wdXRfZGV2LCBFVl9LRVksIGV2ZW50LCAxKTsKKwkJCWlucHV0X3N5bmMoZC0+cmNfaW5wdXRfZGV2KTsKIAkJCWlucHV0X2V2ZW50KGQtPnJjX2lucHV0X2RldiwgRVZfS0VZLCBkLT5sYXN0X2V2ZW50LCAwKTsKIAkJCWlucHV0X3N5bmMoZC0+cmNfaW5wdXRfZGV2KTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKaW5kZXggNjQxMzJjMC4uYWNjYzY1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCkBAIC0xLDYgKzEsNyBAQAogLyogRFZCIFVTQiBmcmFtZXdvcmsgY29tcGxpYW50IExpbnV4IGRyaXZlciBmb3IgdGhlCiAqCURWQldvcmxkIERWQi1TIDIxMDEsIDIxMDIsIERWQi1TMiAyMTA0LCBEVkItQyAzMTAxLAotKglUZVZpaSBTNjAwLCBTNjMwLCBTNjUwIENhcmRzCisqCVRlVmlpIFM2MDAsIFM2MzAsIFM2NTAsCisqCVByb2YgMTEwMCwgNzUwMCBDYXJkcwogKiBDb3B5cmlnaHQgKEMpIDIwMDgsMjAwOSBJZ29yIE0uIExpcGxpYW5pbiAobGlwbGlhbmluQG1lLmJ5KQogKgogKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtNDY5LDExICs0NzAsMTMgQEAKIAkJCQkJCQkJaW50IG51bSkKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwogCWludCByZXQgPSAwOwogCWludCBsZW4sIGksIGo7CiAKIAlpZiAoIWQpCiAJCXJldHVybiAtRU5PREVWOworCXVkZXYgPSBkLT51ZGV2OwogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCkgPCAwKQogCQlyZXR1cm4gLUVBR0FJTjsKIApAQCAtNDg4LDggKzQ5MSwxMyBAQAogCQl9CiAJCWNhc2UgKERXMjEwMl9WT0xUQUdFX0NUUkwpOiB7CiAJCQl1OCBvYnVmWzJdOworCisJCQlvYnVmWzBdID0gMTsKKwkJCW9idWZbMV0gPSBtc2dbal0uYnVmWzFdOy8qIG9mZi1vbiAqLworCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4OGEsIDAsIDAsCisJCQkJCW9idWYsIDIsIERXMjEwWF9XUklURV9NU0cpOwogCQkJb2J1ZlswXSA9IDM7Ci0JCQlvYnVmWzFdID0gbXNnW2pdLmJ1ZlswXTsKKwkJCW9idWZbMV0gPSBtc2dbal0uYnVmWzBdOy8qIDEzdi0xOHYgKi8KIAkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweDhhLCAwLCAwLAogCQkJCQlvYnVmLCAyLCBEVzIxMFhfV1JJVEVfTVNHKTsKIAkJCWJyZWFrOwpAQCAtNTI3LDYgKzUzNSwxNyBAQAogCQkJCQlpICs9IDE2OwogCQkJCQlsZW4gLT0gMTY7CiAJCQkJfSB3aGlsZSAobGVuID4gMCk7CisJCQl9IGVsc2UgaWYgKCh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSAweDc1MDApCisJCQkJCSYmIChqIDwgKG51bSAtIDEpKSkgeworCQkJCS8qIHdyaXRlIHJlZ2lzdGVyIGFkZHIgYmVmb3JlIHJlYWQgKi8KKwkJCQl1OCBvYnVmW21zZ1tqXS5sZW4gKyAyXTsKKwkJCQlvYnVmWzBdID0gbXNnW2ogKyAxXS5sZW47CisJCQkJb2J1ZlsxXSA9IChtc2dbal0uYWRkciA8PCAxKTsKKwkJCQltZW1jcHkob2J1ZiArIDIsIG1zZ1tqXS5idWYsIG1zZ1tqXS5sZW4pOworCQkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweDkyLCAwLCAwLAorCQkJCQkJb2J1ZiwgbXNnW2pdLmxlbiArIDIsCisJCQkJCQlEVzIxMFhfV1JJVEVfTVNHKTsKKwkJCQlicmVhazsKIAkJCX0gZWxzZSB7CiAJCQkJLyogd3JpdGUgcmVnaXN0ZXJzICovCiAJCQkJdTggb2J1Zlttc2dbal0ubGVuICsgMl07CkBAIC02NTEsMTggKzY3MCwyNSBAQAogCiBzdGF0aWMgaW50IGR3MjEweF9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQogewotCXN0YXRpYyB1OCBjb21tYW5kXzEzdlsxXSA9IHsweDAwfTsKLQlzdGF0aWMgdTggY29tbWFuZF8xOHZbMV0gPSB7MHgwMX07Ci0Jc3RydWN0IGkyY19tc2cgbXNnW10gPSB7Ci0JCXsuYWRkciA9IERXMjEwMl9WT0xUQUdFX0NUUkwsIC5mbGFncyA9IDAsCi0JCQkuYnVmID0gY29tbWFuZF8xM3YsIC5sZW4gPSAxfSwKKwlzdGF0aWMgdTggY29tbWFuZF8xM3ZbXSA9IHsweDAwLCAweDAxfTsKKwlzdGF0aWMgdTggY29tbWFuZF8xOHZbXSA9IHsweDAxLCAweDAxfTsKKwlzdGF0aWMgdTggY29tbWFuZF9vZmZbXSA9IHsweDAwLCAweDAwfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gRFcyMTAyX1ZPTFRBR0VfQ1RSTCwKKwkJLmZsYWdzID0gMCwKKwkJLmJ1ZiA9IGNvbW1hbmRfb2ZmLAorCQkubGVuID0gMiwKIAl9OwogCiAJc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqdWRldl9hZGFwID0KIAkJKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKikoZmUtPmR2Yi0+cHJpdik7CiAJaWYgKHZvbHRhZ2UgPT0gU0VDX1ZPTFRBR0VfMTgpCi0JCW1zZ1swXS5idWYgPSBjb21tYW5kXzE4djsKLQlpMmNfdHJhbnNmZXIoJnVkZXZfYWRhcC0+ZGV2LT5pMmNfYWRhcCwgbXNnLCAxKTsKKwkJbXNnLmJ1ZiA9IGNvbW1hbmRfMTh2OworCWVsc2UgaWYgKHZvbHRhZ2UgPT0gU0VDX1ZPTFRBR0VfMTMpCisJCW1zZy5idWYgPSBjb21tYW5kXzEzdjsKKworCWkyY190cmFuc2ZlcigmdWRldl9hZGFwLT5kZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwogCXJldHVybiAwOwogfQogCkBAIC03MzUsNiArNzYxLDE4IEBACiAJLmNsa19kaXYgPSAxLAogfTsKIAorc3RhdGljIHN0cnVjdCBzdHYwOTAwX2NvbmZpZyBwcm9mXzc1MDBfc3R2MDkwMF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDZhLAorCS5kZW1vZF9tb2RlID0gMCwKKwkueHRhbCA9IDI3MDAwMDAwLAorCS5jbGttb2RlID0gMywvKiAwLUNMS0ksIDItWFRBTEksIGVsc2UgQVVUTyAqLworCS5kaXNlcWNfbW9kZSA9IDIsLyogMi8zIFBXTSAqLworCS50dW4xX21hZGRyZXNzID0gMCwvKiAweDYwICovCisJLnR1bjFfYWRjID0gMCwvKiAyIFZwcCAqLworCS5wYXRoMV9tb2RlID0gMywKKwkudHVuMV90eXBlID0gMywKK307CisKIHN0YXRpYyBpbnQgZHcyMTA0X2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICpkKQogewogCXN0cnVjdCBkdmJfdHVuZXJfb3BzICp0dW5lcl9vcHMgPSBOVUxMOwpAQCAtODgyLDYgKzkyMCwxOSBAQAogCXJldHVybiAtRUlPOwogfQogCitzdGF0aWMgaW50IHByb2ZfNzUwMF9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqZCkKK3sKKwlkLT5mZSA9IGR2Yl9hdHRhY2goc3R2MDkwMF9hdHRhY2gsICZwcm9mXzc1MDBfc3R2MDkwMF9jb25maWcsCisJCQkJCSZkLT5kZXYtPmkyY19hZGFwLCAwKTsKKwlpZiAoZC0+ZmUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU87CisJZC0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGR3MjEweF9zZXRfdm9sdGFnZTsKKworCWluZm8oIkF0dGFjaGVkIFNUVjA5MDArU1RCNjEwMEEhXG4iKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGR3MjEwMl90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKIAlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBhZGFwLT5mZSwgMHg2MCwKQEAgLTEwNzMsNiArMTEyNCw3IEBACiAJe1VTQl9ERVZJQ0UoMHg5MDIyLCBVU0JfUElEX1RFVklJX1M2MzApfSwKIAl7VVNCX0RFVklDRSgweDMwMTEsIFVTQl9QSURfUFJPRl8xMTAwKX0sCiAJe1VTQl9ERVZJQ0UoMHg5MDIyLCBVU0JfUElEX1RFVklJX1M2NjApfSwKKwl7VVNCX0RFVklDRSgweDMwMzQsIDB4NzUwMCl9LAogCXsgfQogfTsKIApAQCAtMTM4Nyw5ICsxNDM5LDMwIEBACiAJfQogfTsKIAorc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgKnA3NTAwOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9kZXNjcmlwdGlvbiBkNzUwMCA9IHsKKwkiUHJvZiA3NTAwIFVTQiBEVkItUzIiLAorCXsmZHcyMTAyX3RhYmxlWzldLCBOVUxMfSwKKwl7TlVMTH0sCit9OworCiBzdGF0aWMgaW50IGR3MjEwMl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogeworCisJcDc1MDAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyksIEdGUF9LRVJORUwpOworCWlmICghcDc1MDApCisJCXJldHVybiAtRU5PTUVNOworCS8qIGNvcHkgZGVmYXVsdCBzdHJ1Y3R1cmUgKi8KKwltZW1jcHkocDc1MDAsICZzNngwX3Byb3BlcnRpZXMsCisJCQlzaXplb2Yoc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMpKTsKKwkvKiBmaWxsIG9ubHkgZGlmZmVyZW50IGZpZWxkcyAqLworCXA3NTAwLT5maXJtd2FyZSA9ICJkdmItdXNiLXA3NTAwLmZ3IjsKKwlwNzUwMC0+ZGV2aWNlc1swXSA9IGQ3NTAwOworCXA3NTAwLT5yY19rZXlfbWFwID0gdGJzX3JjX2tleXM7CisJcDc1MDAtPnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUodGJzX3JjX2tleXMpOworCXA3NTAwLT5hZGFwdGVyLT5mcm9udGVuZF9hdHRhY2ggPSBwcm9mXzc1MDBfZnJvbnRlbmRfYXR0YWNoOworCiAJaWYgKDAgPT0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmZHcyMTAyX3Byb3BlcnRpZXMsCiAJCQlUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucikgfHwKIAkgICAgMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZkdzIxMDRfcHJvcGVydGllcywKQEAgLTEzOTcsNiArMTQ3MCw4IEBACiAJICAgIDAgPT0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmZHczMTAxX3Byb3BlcnRpZXMsCiAJCQlUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucikgfHwKIAkgICAgMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZzNngwX3Byb3BlcnRpZXMsCisJCQlUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucikgfHwKKwkgICAgMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsIHA3NTAwLAogCQkJVEhJU19NT0RVTEUsIE5VTEwsIGFkYXB0ZXJfbnIpKQogCQlyZXR1cm4gMDsKIApAQCAtMTQzMSw2ICsxNTA2LDYgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBEVkJXb3JsZCBEVkItUyAyMTAxLCAyMTAyLCBEVkItUzIgMjEwNCwiCiAJCQkJIiBEVkItQyAzMTAxIFVTQjIuMCwiCiAJCQkJIiBUZVZpaSBTNjAwLCBTNjMwLCBTNjUwLCBTNjYwIFVTQjIuMCwiCi0JCQkJIiBQcm9mIDExMDAgVVNCMi4wIGRldmljZXMiKTsKKwkJCQkiIFByb2YgMTEwMCwgNzUwMCBVU0IyLjAgZGV2aWNlcyIpOwogTU9EVUxFX1ZFUlNJT04oIjAuMSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby1mZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby1mZS5jCmluZGV4IGViYjdiOWYuLmQxNGJkMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8tZmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLWZlLmMKQEAgLTM2Niw3ICszNjYsNyBAQAogCXsweDc2LCAweDBDfSwKIH07CiAKLWNvbnN0IHN0YXRpYyBpbnQgaW5pdF9jb2RlX2xlbiA9IHNpemVvZihpbml0X2NvZGUpIC8gc2l6ZW9mKHU4WzJdKTsKK3N0YXRpYyBjb25zdCBpbnQgaW5pdF9jb2RlX2xlbiA9IHNpemVvZihpbml0X2NvZGUpIC8gc2l6ZW9mKHU4WzJdKTsKIAogc3RhdGljIGludCBqZHZidDkwNTAyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMKaW5kZXggZWY5YjdiZS4uNzM3ZmZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguYwpAQCAtMTYsNiArMTYsOSBAQAogI2luY2x1ZGUgInF0MTAxMC5oIgogI2luY2x1ZGUgInRkYTEwMDR4LmgiCiAjaW5jbHVkZSAidGRhODI3eC5oIgorCisjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KKyNpbmNsdWRlICJ0dW5lci1zaW1wbGUuaCIKICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKIC8qIGRlYnVnICovCkBAIC0xNTgsMTEgKzE2MSwxNCBAQAogCiAJCQljYXNlIDB4OTM6CiAJCQljYXNlIDB4OTI6CisJCQljYXNlIDB4ODM6IC8qIHBpbm5hY2xlIFBDVFYzMTBlICovCisJCQljYXNlIDB4ODI6CiAJCQkJbS0+cmVwX2NvdW50ID0gMDsKIAkJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CiAJCQkJZ290byB1bmxvY2s7CiAKIAkJCWNhc2UgMHg5MToKKwkJCWNhc2UgMHg4MTogLyogcGlubmFjbGUgUENUVjMxMGUgKi8KIAkJCQkvKiBwcmV2ZW50IGltbWVkaWF0ZSBhdXRvLXJlcGVhdCAqLwogCQkJCWlmICgrK20tPnJlcF9jb3VudCA+IDIpCiAJCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUkVQRUFUOwpAQCAtNTQ2LDYgKzU1MiwxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG05MjB4X2ZtZDEyMTZtZV90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGFkYXAtPmZlLAorCQkgICAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMHg2MSwKKwkJICAgVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKTsKKwlyZXR1cm4gMDsKK30KKwogLyogZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uICovCiBzdGF0aWMgc3RydWN0IG05MjB4X2luaXRzIG1lZ2Fza3lfcmNfaW5pdCBbXSA9IHsKIAl7IE05MjA2X1JDX0lOSVQyLCAweGE4IH0sCkBAIC01NjIsNiArNTc2LDE4IEBACiAJeyB9IC8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCitzdGF0aWMgc3RydWN0IG05MjB4X2luaXRzIHBpbm5hY2xlMzEwZV9pbml0W10gPSB7CisJLyogd2l0aG91dCB0aGVzZSB0aGUgdHVuZXIgZG9uJ3Qgd29yayAqLworCXsgMHhmZjIwLCAgICAgICAgIDB4OWIgfSwKKwl7IDB4ZmYyMiwgICAgICAgICAweDcwIH0sCisKKwkvKiByYyBzZXR0aW5ncyAqLworCXsgMHhmZjUwLCAgICAgICAgIDB4ODAgfSwKKwl7IE05MjA2X1JDX0lOSVQxLCAweDAwIH0sCisJeyBNOTIwNl9SQ19JTklUMiwgMHhmZiB9LAorCXsgfSAvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKwogLyogaXIga2V5bWFwcyAqLwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBtZWdhc2t5X3JjX2tleXMgW10gPSB7CiAJeyAweDAwMTIsIEtFWV9QT1dFUiB9LApAQCAtNjAyLDExICs2MjgsNjggQEAKIAl7IDB4MDAxZSwgS0VZX1ZPTFVNRVVQIH0sCiB9OwogCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IHBpbm5hY2xlMzEwZV9yY19rZXlzW10gPSB7CisJeyAweDE2LCBLRVlfUE9XRVIgfSwKKwl7IDB4MTcsIEtFWV9GQVZPUklURVMgfSwKKwl7IDB4MGYsIEtFWV9URVhUIH0sCisJeyAweDQ4LCBLRVlfTUVESUEgfSwJCS8qIHByZXZpZXcgKi8KKwl7IDB4MWMsIEtFWV9FUEcgfSwKKwl7IDB4MDQsIEtFWV9MSVNUIH0sCQkJLyogcmVjb3JkIGxpc3QgKi8KKwl7IDB4MDMsIEtFWV8xIH0sCisJeyAweDAxLCBLRVlfMiB9LAorCXsgMHgwNiwgS0VZXzMgfSwKKwl7IDB4MDksIEtFWV80IH0sCisJeyAweDFkLCBLRVlfNSB9LAorCXsgMHgxZiwgS0VZXzYgfSwKKwl7IDB4MGQsIEtFWV83IH0sCisJeyAweDE5LCBLRVlfOCB9LAorCXsgMHgxYiwgS0VZXzkgfSwKKwl7IDB4MTUsIEtFWV8wIH0sCisJeyAweDBjLCBLRVlfQ0FOQ0VMIH0sCisJeyAweDRhLCBLRVlfQ0xFQVIgfSwKKwl7IDB4MTMsIEtFWV9CQUNLIH0sCisJeyAweDAwLCBLRVlfVEFCIH0sCisJeyAweDRiLCBLRVlfVVAgfSwKKwl7IDB4NGUsIEtFWV9MRUZUIH0sCisJeyAweDUyLCBLRVlfUklHSFQgfSwKKwl7IDB4NTEsIEtFWV9ET1dOIH0sCisJeyAweDRmLCBLRVlfRU5URVIgfSwJCS8qIGNvdWxkIGFsc28gYmUgS0VZX09LICovCisJeyAweDFlLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MGEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDA1LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAyLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MTEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MTQsIEtFWV9QTEFZIH0sCisJeyAweDRjLCBLRVlfUEFVU0UgfSwKKwl7IDB4MWEsIEtFWV9TVE9QIH0sCisJeyAweDQwLCBLRVlfUkVXSU5EIH0sCisJeyAweDEyLCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4NDEsIEtFWV9QUkVWSU9VU1NPTkcgfSwJLyogUmVwbGF5ICovCisJeyAweDQyLCBLRVlfTkVYVFNPTkcgfSwJCS8qIFNraXAgKi8KKwl7IDB4NTQsIEtFWV9DQU1FUkEgfSwJCS8qIENhcHR1cmUgKi8KKy8qCXsgMHg1MCwgS0VZX1NBUCB9LAkqLwkJLyogU2FwICovCisJeyAweDQ3LCBLRVlfQ1lDTEVXSU5ET1dTIH0sCS8qIFBpcCAqLworCXsgMHg0ZCwgS0VZX1NDUkVFTiB9LAkJLyogRnVsbFNjcmVlbiAqLworCXsgMHgwOCwgS0VZX1NVQlRJVExFIH0sCisJeyAweDBlLCBLRVlfTVVURSB9LAorLyoJeyAweDQ5LCBLRVlfTFIgfSwJKi8JCS8qIEwvUiAqLworCXsgMHgwNywgS0VZX1NMRUVQIH0sCQkvKiBIaWJlcm5hdGUgKi8KKwl7IDB4MDgsIEtFWV9NRURJQSB9LAkJLyogQS9WICovCisJeyAweDBlLCBLRVlfTUVOVSB9LAkJCS8qIFJlY2FsbCAqLworCXsgMHg0NSwgS0VZX1pPT01JTiB9LAorCXsgMHg0NiwgS0VZX1pPT01PVVQgfSwKKwl7IDB4MTgsIEtFWV9UViB9LAkJCS8qIFJlZCAqLworCXsgMHg1MywgS0VZX1ZDUiB9LAkJCS8qIEdyZWVuICovCisJeyAweDVlLCBLRVlfU0FUIH0sCQkJLyogWWVsbG93ICovCisJeyAweDVmLCBLRVlfUExBWUVSIH0sCQkvKiBCbHVlICovCit9OworCiAvKiBEVkIgVVNCIERyaXZlciBzdHVmZiAqLwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIG1lZ2Fza3lfcHJvcGVydGllczsKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBkaWdpdm94X21pbmlfaWlfcHJvcGVydGllczsKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyB0dndhbGtlcnR3aW5fcHJvcGVydGllczsKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBkcG9zaF9wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHBpbm5hY2xlX3BjdHYzMTBlX3Byb3BlcnRpZXM7CiAKIHN0YXRpYyBpbnQgbTkyMHhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC02NTIsNiArNzM1LDEzIEBACiAJCQlnb3RvIGZvdW5kOwogCQl9CiAKKwkJcmV0ID0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmcGlubmFjbGVfcGN0djMxMGVfcHJvcGVydGllcywKKwkJCQkJICBUSElTX01PRFVMRSwgJmQsIGFkYXB0ZXJfbnIpOworCQlpZiAocmV0ID09IDApIHsKKwkJCXJjX2luaXRfc2VxID0gcGlubmFjbGUzMTBlX2luaXQ7CisJCQlnb3RvIGZvdW5kOworCQl9CisKIAkJcmV0dXJuIHJldDsKIAl9IGVsc2UgewogCQkvKiBBbm90aGVyIGludGVyZmFjZSBvbiBhIG11bHRpLXR1bmVyIGRldmljZSAqLwpAQCAtNjgyLDYgKzc3Miw3IEBACiAJCQkgICAgIFVTQl9QSURfTElGRVZJRVdfVFZfV0FMS0VSX1RXSU5fV0FSTSkgfSwKIAkJeyBVU0JfREVWSUNFKFVTQl9WSURfRFBPU0gsIFVTQl9QSURfRFBPU0hfTTkyMDZfQ09MRCkgfSwKIAkJeyBVU0JfREVWSUNFKFVTQl9WSURfRFBPU0gsIFVTQl9QSURfRFBPU0hfTTkyMDZfV0FSTSkgfSwKKwkJeyBVU0JfREVWSUNFKFVTQl9WSURfVklTSU9OUExVUywgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWMzEwRSkgfSwKIAkJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgbTkyMHhfdGFibGUpOwpAQCAtODk1LDYgKzk4Niw1NiBAQAogCSB9CiB9OwogCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgcGlubmFjbGVfcGN0djMxMGVfcHJvcGVydGllcyA9IHsKKwkuY2FwcyA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCisKKwkudXNiX2N0cmwgPSBERVZJQ0VfU1BFQ0lGSUMsCisJLmRvd25sb2FkX2Zpcm13YXJlID0gTlVMTCwKKworCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAorCS5yY19rZXlfbWFwICAgICAgID0gcGlubmFjbGUzMTBlX3JjX2tleXMsCisJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKHBpbm5hY2xlMzEwZV9yY19rZXlzKSwKKwkucmNfcXVlcnkgICAgICAgICA9IG05MjB4X3JjX3F1ZXJ5LAorCisJLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IG05MjB4X3N0YXRlKSwKKworCS5pZGVudGlmeV9zdGF0ZSAgID0gbTkyMHhfaWRlbnRpZnlfc3RhdGUsCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7eworCQkuY2FwcyA9IERWQl9VU0JfQURBUF9IQVNfUElEX0ZJTFRFUiB8CisJCQlEVkJfVVNCX0FEQVBfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiwKKworCQkucGlkX2ZpbHRlcl9jb3VudCA9IDgsCisJCS5waWRfZmlsdGVyICAgICAgID0gbTkyMHhfcGlkX2ZpbHRlciwKKwkJLnBpZF9maWx0ZXJfY3RybCAgPSBtOTIweF9waWRfZmlsdGVyX2N0cmwsCisKKwkJLmZyb250ZW5kX2F0dGFjaCAgPSBtOTIweF9tdDM1Ml9mcm9udGVuZF9hdHRhY2gsCisJCS50dW5lcl9hdHRhY2ggICAgID0gbTkyMHhfZm1kMTIxNm1lX3R1bmVyX2F0dGFjaCwKKworCQkuc3RyZWFtID0geworCQkJLnR5cGUgPSBVU0JfSVNPQywKKwkJCS5jb3VudCA9IDUsCisJCQkuZW5kcG9pbnQgPSAweDg0LAorCQkJLnUgPSB7CisJCQkJLmlzb2MgPSB7CisJCQkJCS5mcmFtZXNwZXJ1cmIgPSAxMjgsCisJCQkJCS5mcmFtZXNpemUgPSA1NjQsCisJCQkJCS5pbnRlcnZhbCA9IDEsCisJCQkJfQorCQkJfQorCQl9LAorCX0gfSwKKwkuaTJjX2FsZ28gICAgICAgICA9ICZtOTIweF9pMmNfYWxnbywKKworCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJeyAgICJQaW5uYWNsZSBQQ1RWIDMxMGUiLAorCQkJeyAmbTkyMHhfdGFibGVbNl0sIE5VTEwgfSwKKwkJCXsgTlVMTCB9LAorCQl9CisJfQorfTsKKwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG05MjB4X2RyaXZlciA9IHsKIAkubmFtZQkJPSAiZHZiX3VzYl9tOTIweCIsCiAJLnByb2JlCQk9IG05MjB4X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5oCmluZGV4IDM3NTMyODkuLjNjMDYxNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmgKQEAgLTE4LDcgKzE4LDcgQEAKICNkZWZpbmUgTTkyMDZfRlcJMHgzMAogCiAjZGVmaW5lIE05MjA2X01BWF9GSUxURVJTIDgKLSNkZWZpbmUgTTkyMDZfTUFYX0FEQVBURVJTIDIKKyNkZWZpbmUgTTkyMDZfTUFYX0FEQVBURVJTIDQKIAogLyoKIHNlcXVlbmNlcyBmb3VuZCBpbiBsb2dzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivb3BlcmExLmMKaW5kZXggZDRlMjMwOS4uODMwNTU3NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivb3BlcmExLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJCQkJCShtc2dbaV0uYWRkcjw8MSl8KG1zZ1tpXS5mbGFncyZJMkNfTV9SRD8weDAxOjApLAogCQkJCQltc2dbaV0uYnVmLAogCQkJCQltc2dbaV0ubGVuCi0JCQkJCSkhPSBtc2dbaV0ubGVuKSkgeworCQkJCQkpKSAhPSBtc2dbaV0ubGVuKSB7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoZHZiX3VzYl9vcGVyYTFfZGVidWcgJiAweDEwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di0xMzk0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LTEzOTQuYwppbmRleCA3YzU0NTljMi4uYzNlMGVjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di0xMzk0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di0xMzk0LmMKQEAgLTkwLDEzICs5MCwxNCBAQAogCXJldHVybiBjb250YWluZXJfb2YoZmR0di0+ZGV2aWNlLCBzdHJ1Y3QgdW5pdF9kaXJlY3RvcnksIGRldmljZSktPm5lOwogfQogCi1zdGF0aWMgaW50IG5vZGVfbG9jayhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdTY0IGFkZHIsIF9fYmUzMiBkYXRhW10pCitzdGF0aWMgaW50IG5vZGVfbG9jayhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdTY0IGFkZHIsIHZvaWQgKmRhdGEpCiB7CisJcXVhZGxldF90ICpkID0gZGF0YTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gaHBzYl9ub2RlX2xvY2sobm9kZV9vZihmZHR2KSwgYWRkciwgRVhUQ09ERV9DT01QQVJFX1NXQVAsCi0JCShfX2ZvcmNlIHF1YWRsZXRfdCAqKSZkYXRhWzFdLCAoX19mb3JjZSBxdWFkbGV0X3QpZGF0YVswXSk7Ci0JZGF0YVswXSA9IGRhdGFbMV07CisJcmV0ID0gaHBzYl9ub2RlX2xvY2sobm9kZV9vZihmZHR2KSwgYWRkciwKKwkJCSAgICAgRVhUQ09ERV9DT01QQVJFX1NXQVAsICZkWzFdLCBkWzBdKTsKKwlkWzBdID0gZFsxXTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xOTIsOSArMTkzLDEzIEBACiAJaW50IGt2X2xlbiwgZXJyOwogCXZvaWQgKmt2X3N0cjsKIAotCWt2X2xlbiA9ICh1ZC0+bW9kZWxfbmFtZV9rdi0+dmFsdWUubGVhZi5sZW4gLSAyKSAqIHNpemVvZihxdWFkbGV0X3QpOwotCWt2X3N0ciA9IENTUjEyMTJfVEVYVFVBTF9ERVNDUklQVE9SX0xFQUZfREFUQSh1ZC0+bW9kZWxfbmFtZV9rdik7Ci0KKwlpZiAodWQtPm1vZGVsX25hbWVfa3YpIHsKKwkJa3ZfbGVuID0gKHVkLT5tb2RlbF9uYW1lX2t2LT52YWx1ZS5sZWFmLmxlbiAtIDIpICogNDsKKwkJa3Zfc3RyID0gQ1NSMTIxMl9URVhUVUFMX0RFU0NSSVBUT1JfTEVBRl9EQVRBKHVkLT5tb2RlbF9uYW1lX2t2KTsKKwl9IGVsc2UgeworCQlrdl9sZW4gPSAwOworCQlrdl9zdHIgPSBOVUxMOworCX0KIAlmZHR2ID0gZmR0dl9hbGxvYyhkZXYsICZmZHR2XzEzOTRfYmFja2VuZCwga3Zfc3RyLCBrdl9sZW4pOwogCWlmICghZmR0dikKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwppbmRleCA1MGM0MmE0Li4xYjMxYmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKQEAgLTc0LDcgKzc0LDYgQEAKICNkZWZpbmUgRU41MDIyMV9UQUdfQ0FfSU5GTwkJMHg5ZjgwMzEKIAogc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lIHsKLQlpbnQgbGVuZ3RoOwogCXU4IGN0eXBlOwogCXU4IHN1YnVuaXQ7CiAJdTggb3Bjb2RlOwpAQCAtODIsMTMgKzgxLDI3IEBACiB9OwogCiBzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lIHsKLQlpbnQgbGVuZ3RoOwogCXU4IHJlc3BvbnNlOwogCXU4IHN1YnVuaXQ7CiAJdTggb3Bjb2RlOwogCXU4IG9wZXJhbmRbNTA5XTsKIH07CiAKKyNkZWZpbmUgTEFTVF9PUEVSQU5EICg1MDkgLSAxKQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfb3BlcmFuZHMoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjLCBpbnQgZnJvbSwgaW50IHRvKQoreworCW1lbXNldCgmYy0+b3BlcmFuZFtmcm9tXSwgMCwgdG8gLSBmcm9tICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhZF9vcGVyYW5kcyhzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMsIGludCBmcm9tKQoreworCWludCB0byA9IEFMSUdOKGZyb20sIDQpOworCisJaWYgKGZyb20gPD0gdG8gJiYgdG8gPD0gTEFTVF9PUEVSQU5EKQorCQljbGVhcl9vcGVyYW5kcyhjLCBmcm9tLCB0byk7Cit9CisKICNkZWZpbmUgQVZDX0RFQlVHX1JFQURfREVTQ1JJUFRPUiAgICAgICAgICAgICAgMHgwMDAxCiAjZGVmaW5lIEFWQ19ERUJVR19EU0lUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgogI2RlZmluZSBBVkNfREVCVUdfRFNEICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKQEAgLTIwMiw3OCArMjE1LDY1IEBACiAJCSAgICAgICAxNiwgMSwgbXNnLCBsZW5ndGgsIGZhbHNlKTsKIH0KIAotc3RhdGljIGludCBfX2F2Y193cml0ZShzdHJ1Y3QgZmlyZWR0diAqZmR0diwKLQkJY29uc3Qgc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjLCBzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyKQorc3RhdGljIGludCBhdmNfd3JpdGUoc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7CiAJaW50IGVyciwgcmV0cnk7CiAKLQlpZiAocikKLQkJZmR0di0+YXZjX3JlcGx5X3JlY2VpdmVkID0gZmFsc2U7CisJZmR0di0+YXZjX3JlcGx5X3JlY2VpdmVkID0gZmFsc2U7CiAKIAlmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCA2OyByZXRyeSsrKSB7CiAJCWlmICh1bmxpa2VseShhdmNfZGVidWcpKQotCQkJZGVidWdfZmNwKCZjLT5jdHlwZSwgYy0+bGVuZ3RoKTsKKwkJCWRlYnVnX2ZjcChmZHR2LT5hdmNfZGF0YSwgZmR0di0+YXZjX2RhdGFfbGVuZ3RoKTsKIAogCQllcnIgPSBmZHR2LT5iYWNrZW5kLT53cml0ZShmZHR2LCBGQ1BfQ09NTUFORF9SRUdJU1RFUiwKLQkJCQkJICAgKHZvaWQgKikmYy0+Y3R5cGUsIGMtPmxlbmd0aCk7CisJCQkJZmR0di0+YXZjX2RhdGEsIGZkdHYtPmF2Y19kYXRhX2xlbmd0aCk7CiAJCWlmIChlcnIpIHsKLQkJCWZkdHYtPmF2Y19yZXBseV9yZWNlaXZlZCA9IHRydWU7CiAJCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgIkZDUCBjb21tYW5kIHdyaXRlIGZhaWxlZFxuIik7CisKIAkJCXJldHVybiBlcnI7CiAJCX0KIAotCQlpZiAoIXIpCi0JCQlyZXR1cm4gMDsKLQogCQkvKgogCQkgKiBBVi9DIHNwZWNzIHNheSB0aGF0IGFuc3dlcnMgc2hvdWxkIGJlIHNlbnQgd2l0aGluIDE1MCBtcy4KIAkJICogVGltZSBvdXQgYWZ0ZXIgMjAwIG1zLgogCQkgKi8KIAkJaWYgKHdhaXRfZXZlbnRfdGltZW91dChmZHR2LT5hdmNfd2FpdCwKIAkJCQkgICAgICAgZmR0di0+YXZjX3JlcGx5X3JlY2VpdmVkLAotCQkJCSAgICAgICBtc2Vjc190b19qaWZmaWVzKDIwMCkpICE9IDApIHsKLQkJCXItPmxlbmd0aCA9IGZkdHYtPnJlc3BvbnNlX2xlbmd0aDsKLQkJCW1lbWNweSgmci0+cmVzcG9uc2UsIGZkdHYtPnJlc3BvbnNlLCByLT5sZW5ndGgpOwotCisJCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMjAwKSkgIT0gMCkKIAkJCXJldHVybiAwOwotCQl9CiAJfQogCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiRkNQIHJlc3BvbnNlIHRpbWVkIG91dFxuIik7CisKIAlyZXR1cm4gLUVUSU1FRE9VVDsKIH0KIAotc3RhdGljIGludCBhdmNfd3JpdGUoc3RydWN0IGZpcmVkdHYgKmZkdHYsCi0JCWNvbnN0IHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYywgc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqcikKK3N0YXRpYyBib29sIGlzX3JlZ2lzdGVyX3JjKHN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIpCiB7Ci0JaW50IHJldDsKLQotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmZkdHYtPmF2Y19tdXRleCkpCi0JCXJldHVybiAtRUlOVFI7Ci0KLQlyZXQgPSBfX2F2Y193cml0ZShmZHR2LCBjLCByKTsKLQotCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKLQlyZXR1cm4gcmV0OworCXJldHVybiByLT5vcGNvZGUgICAgID09IEFWQ19PUENPREVfVkVORE9SICYmCisJICAgICAgIHItPm9wZXJhbmRbMF0gPT0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMCAmJgorCSAgICAgICByLT5vcGVyYW5kWzFdID09IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzEgJiYKKwkgICAgICAgci0+b3BlcmFuZFsyXSA9PSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8yICYmCisJICAgICAgIHItPm9wZXJhbmRbM10gPT0gU0ZFX1ZFTkRPUl9PUENPREVfUkVHSVNURVJfUkVNT1RFX0NPTlRST0w7CiB9CiAKIGludCBhdmNfcmVjdihzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKIHsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0KLQkJCWRhdGEgLSBvZmZzZXRvZihzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lLCByZXNwb25zZSk7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9IGRhdGE7CiAKIAlpZiAodW5saWtlbHkoYXZjX2RlYnVnKSkKIAkJZGVidWdfZmNwKGRhdGEsIGxlbmd0aCk7CiAKLQlpZiAobGVuZ3RoID49IDggJiYKLQkgICAgci0+b3BlcmFuZFswXSA9PSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wICYmCi0JICAgIHItPm9wZXJhbmRbMV0gPT0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMSAmJgotCSAgICByLT5vcGVyYW5kWzJdID09IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzIgJiYKLQkgICAgci0+b3BlcmFuZFszXSA9PSBTRkVfVkVORE9SX09QQ09ERV9SRUdJU1RFUl9SRU1PVEVfQ09OVFJPTCkgewotCQlpZiAoci0+cmVzcG9uc2UgPT0gQVZDX1JFU1BPTlNFX0NIQU5HRUQpIHsKLQkJCWZkdHZfaGFuZGxlX3JjKGZkdHYsCi0JCQkgICAgci0+b3BlcmFuZFs0XSA8PCA4IHwgci0+b3BlcmFuZFs1XSk7CisJaWYgKGxlbmd0aCA+PSA4ICYmIGlzX3JlZ2lzdGVyX3JjKHIpKSB7CisJCXN3aXRjaCAoci0+cmVzcG9uc2UpIHsKKwkJY2FzZSBBVkNfUkVTUE9OU0VfQ0hBTkdFRDoKKwkJCWZkdHZfaGFuZGxlX3JjKGZkdHYsIHItPm9wZXJhbmRbNF0gPDwgOCB8IHItPm9wZXJhbmRbNV0pOwogCQkJc2NoZWR1bGVfd29yaygmZmR0di0+cmVtb3RlX2N0cmxfd29yayk7Ci0JCX0gZWxzZSBpZiAoci0+cmVzcG9uc2UgIT0gQVZDX1JFU1BPTlNFX0lOVEVSSU0pIHsKKwkJCWJyZWFrOworCQljYXNlIEFWQ19SRVNQT05TRV9JTlRFUklNOgorCQkJaWYgKGlzX3JlZ2lzdGVyX3JjKCh2b2lkICopZmR0di0+YXZjX2RhdGEpKQorCQkJCWdvdG8gd2FrZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgogCQkJZGV2X2luZm8oZmR0di0+ZGV2aWNlLAogCQkJCSAicmVtb3RlIGNvbnRyb2wgcmVzdWx0ID0gJWRcbiIsIHItPnJlc3BvbnNlKTsKIAkJfQpAQCAtMjg1LDkgKzI4NSw5IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCW1lbWNweShmZHR2LT5yZXNwb25zZSwgZGF0YSwgbGVuZ3RoKTsKLQlmZHR2LT5yZXNwb25zZV9sZW5ndGggPSBsZW5ndGg7Ci0KKwltZW1jcHkoZmR0di0+YXZjX2RhdGEsIGRhdGEsIGxlbmd0aCk7CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gbGVuZ3RoOword2FrZToKIAlmZHR2LT5hdmNfcmVwbHlfcmVjZWl2ZWQgPSB0cnVlOwogCXdha2VfdXAoJmZkdHYtPmF2Y193YWl0KTsKIApAQCAtMzE4LDEwICszMTgsMTEgQEAKICAqIHR1bmluZyBjb21tYW5kIGZvciBzZXR0aW5nIHRoZSByZWxhdGl2ZSBMTkIgZnJlcXVlbmN5CiAgKiAobm90IHN1cHBvcnRlZCBieSB0aGUgQVZDIHN0YW5kYXJkKQogICovCi1zdGF0aWMgdm9pZCBhdmNfdHVuZXJfdHVuZXFwc2soc3RydWN0IGZpcmVkdHYgKmZkdHYsCi0JCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMsCi0JCQkgICAgICAgc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjKQorc3RhdGljIGludCBhdmNfdHVuZXJfdHVuZXFwc2soc3RydWN0IGZpcmVkdHYgKmZkdHYsCisJCQkgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKIHsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCiAJYy0+b3Bjb2RlID0gQVZDX09QQ09ERV9WRU5ET1I7CiAKIAljLT5vcGVyYW5kWzBdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMDsKQEAgLTM3MCwxNiArMzcxLDE4IEBACiAJCWMtPm9wZXJhbmRbMTNdID0gMHgxOwogCQljLT5vcGVyYW5kWzE0XSA9IDB4ZmY7CiAJCWMtPm9wZXJhbmRbMTVdID0gMHhmZjsKLQkJYy0+bGVuZ3RoID0gMjA7CisKKwkJcmV0dXJuIDE2OwogCX0gZWxzZSB7Ci0JCWMtPmxlbmd0aCA9IDE2OworCQlyZXR1cm4gMTM7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdmNfdHVuZXJfZHNkX2R2Yl9jKHN0cnVjdCBmaXJlZHR2ICpmZHR2LAotCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zLAotCQkJCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYykKK3N0YXRpYyBpbnQgYXZjX3R1bmVyX2RzZF9kdmJfYyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwKKwkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKIHsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCiAJYy0+b3Bjb2RlID0gQVZDX09QQ09ERV9EU0Q7CiAKIAljLT5vcGVyYW5kWzBdID0gMDsgICAgLyogc291cmNlIHBsdWcgKi8KQEAgLTQ0MCwxNSArNDQzLDE0IEBACiAJYy0+b3BlcmFuZFsyMF0gPSAweDAwOwogCWMtPm9wZXJhbmRbMjFdID0gMHgwMDsKIAotCS8qIEFkZCBQSURzIHRvIGZpbHRlciAqLwotCWMtPmxlbmd0aCA9IEFMSUdOKDIyICsgYWRkX3BpZF9maWx0ZXIoZmR0diwgJmMtPm9wZXJhbmRbMjJdKSArIDMsIDQpOworCXJldHVybiAyMiArIGFkZF9waWRfZmlsdGVyKGZkdHYsICZjLT5vcGVyYW5kWzIyXSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF2Y190dW5lcl9kc2RfZHZiX3Qoc3RydWN0IGZpcmVkdHYgKmZkdHYsCi0JCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMsCi0JCQkJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjKQorc3RhdGljIGludCBhdmNfdHVuZXJfZHNkX2R2Yl90KHN0cnVjdCBmaXJlZHR2ICpmZHR2LAorCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogewogCXN0cnVjdCBkdmJfb2ZkbV9wYXJhbWV0ZXJzICpvZmRtID0gJnBhcmFtcy0+dS5vZmRtOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CiAKIAljLT5vcGNvZGUgPSBBVkNfT1BDT0RFX0RTRDsKIApAQCAtNTQzLDU1ICs1NDUsNTggQEAKIAljLT5vcGVyYW5kWzE1XSA9IDB4MDA7IC8qIG5ldHdvcmtfSURbMF0gKi8KIAljLT5vcGVyYW5kWzE2XSA9IDB4MDA7IC8qIG5ldHdvcmtfSURbMV0gKi8KIAotCS8qIEFkZCBQSURzIHRvIGZpbHRlciAqLwotCWMtPmxlbmd0aCA9IEFMSUdOKDE3ICsgYWRkX3BpZF9maWx0ZXIoZmR0diwgJmMtPm9wZXJhbmRbMTddKSArIDMsIDQpOworCXJldHVybiAxNyArIGFkZF9waWRfZmlsdGVyKGZkdHYsICZjLT5vcGVyYW5kWzE3XSk7CiB9CiAKIGludCBhdmNfdHVuZXJfZHNkKHN0cnVjdCBmaXJlZHR2ICpmZHR2LAogCQkgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7IC8qIEZJWE1FOiB1bnVzZWQgKi8KKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCBwb3MsIHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKIAogCXN3aXRjaCAoZmR0di0+dHlwZSkgewogCWNhc2UgRklSRURUVl9EVkJfUzoKLQljYXNlIEZJUkVEVFZfRFZCX1MyOiBhdmNfdHVuZXJfdHVuZXFwc2soZmR0diwgcGFyYW1zLCBjKTsgYnJlYWs7Ci0JY2FzZSBGSVJFRFRWX0RWQl9DOiBhdmNfdHVuZXJfZHNkX2R2Yl9jKGZkdHYsIHBhcmFtcywgYyk7IGJyZWFrOwotCWNhc2UgRklSRURUVl9EVkJfVDogYXZjX3R1bmVyX2RzZF9kdmJfdChmZHR2LCBwYXJhbXMsIGMpOyBicmVhazsKKwljYXNlIEZJUkVEVFZfRFZCX1MyOiBwb3MgPSBhdmNfdHVuZXJfdHVuZXFwc2soZmR0diwgcGFyYW1zKTsgYnJlYWs7CisJY2FzZSBGSVJFRFRWX0RWQl9DOiBwb3MgPSBhdmNfdHVuZXJfZHNkX2R2Yl9jKGZkdHYsIHBhcmFtcyk7IGJyZWFrOworCWNhc2UgRklSRURUVl9EVkJfVDogcG9zID0gYXZjX3R1bmVyX2RzZF9kdmJfdChmZHR2LCBwYXJhbXMpOyBicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9CisJcGFkX29wZXJhbmRzKGMsIHBvcyk7CiAKLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87Ci0KLQltc2xlZXAoNTAwKTsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSBBTElHTigzICsgcG9zLCA0KTsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CiAjaWYgMAotCS8qIEZJWE1FOiAqLwotCS8qIHU4ICpzdGF0dXMgd2FzIGFuIG91dC1wYXJhbWV0ZXIgb2YgYXZjX3R1bmVyX2RzZCwgdW51c2VkIGJ5IGNhbGxlciAqLworCS8qCisJICogRklYTUU6CisJICogdTggKnN0YXR1cyB3YXMgYW4gb3V0LXBhcmFtZXRlciBvZiBhdmNfdHVuZXJfZHNkLCB1bnVzZWQgYnkgY2FsbGVyLgorCSAqIENoZWNrIGZvciBBVkNfUkVTUE9OU0VfQUNDRVBURUQgaGVyZSBpbnN0ZWFkPworCSAqLwogCWlmIChzdGF0dXMpCiAJCSpzdGF0dXMgPSByLT5vcGVyYW5kWzJdOwogI2VuZGlmCi0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJaWYgKHJldCA9PSAwKQorCQltc2xlZXAoNTAwKTsKKworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfdHVuZXJfc2V0X3BpZHMoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHVuc2lnbmVkIGNoYXIgcGlkYywgdTE2IHBpZFtdKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7IC8qIEZJWE1FOiB1bnVzZWQgKi8KLQlpbnQgcG9zLCBrOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldCwgcG9zLCBrOwogCiAJaWYgKHBpZGMgPiAxNiAmJiBwaWRjICE9IDB4ZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtNjE0LDI0ICs2MTksMjcgQEAKIAkJCWMtPm9wZXJhbmRbcG9zKytdID0gMHgwMDsgLyogdGFibGVJRCAqLwogCQkJYy0+b3BlcmFuZFtwb3MrK10gPSAweDAwOyAvKiBmaWx0ZXJfbGVuZ3RoICovCiAJCX0KKwlwYWRfb3BlcmFuZHMoYywgcG9zKTsKIAotCWMtPmxlbmd0aCA9IEFMSUdOKDMgKyBwb3MsIDQpOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IEFMSUdOKDMgKyBwb3MsIDQpOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKIAotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwkvKiBGSVhNRTogY2hlY2sgcmVzcG9uc2UgY29kZT8gKi8KIAotCW1zbGVlcCg1MCk7Ci0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJaWYgKHJldCA9PSAwKQorCQltc2xlZXAoNTApOworCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2Y190dW5lcl9nZXRfdHMoc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLwotCWludCBzbDsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCByZXQsIHNsOwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtNjQ2LDI2ICs2NTQsMzMgQEAKIAljLT5vcGVyYW5kWzRdID0gMHgwMDsJLyogYW50ZW5uYSBudW1iZXIgKi8KIAljLT5vcGVyYW5kWzVdID0gMHgwOyAJLyogc3lzdGVtX3NwZWNpZmljX3NlYXJjaF9mbGFncyAqLwogCWMtPm9wZXJhbmRbNl0gPSBzbDsJLyogc3lzdGVtX3NwZWNpZmljX211bHRpcGxleCBzZWxlY3Rpb25fbGVuZ3RoICovCi0JYy0+b3BlcmFuZFs3XSA9IDB4MDA7CS8qIHZhbGlkX2ZsYWdzIFswXSAqLwotCWMtPm9wZXJhbmRbOF0gPSAweDAwOwkvKiB2YWxpZF9mbGFncyBbMV0gKi8KLQljLT5vcGVyYW5kWzcgKyBzbF0gPSAweDAwOyAvKiBucl9vZl9kc2l0X3NlbF9zcGVjcyAoYWx3YXlzIDApICovCisJLyoKKwkgKiBvcGVyYW5kWzddOiB2YWxpZF9mbGFnc1swXQorCSAqIG9wZXJhbmRbOF06IHZhbGlkX2ZsYWdzWzFdCisJICogb3BlcmFuZFs3ICsgc2xdOiBucl9vZl9kc2l0X3NlbF9zcGVjcyAoYWx3YXlzIDApCisJICovCisJY2xlYXJfb3BlcmFuZHMoYywgNywgMjQpOwogCi0JYy0+bGVuZ3RoID0gZmR0di0+dHlwZSA9PSBGSVJFRFRWX0RWQl9UID8gMjQgOiAyODsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSBmZHR2LT50eXBlID09IEZJUkVEVFZfRFZCX1QgPyAyNCA6IDI4OworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKIAotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwkvKiBGSVhNRTogY2hlY2sgcmVzcG9uc2UgY29kZT8gKi8KIAotCW1zbGVlcCgyNTApOwotCXJldHVybiAwOworCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKKworCWlmIChyZXQgPT0gMCkKKwkJbXNsZWVwKDI1MCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX2lkZW50aWZ5X3N1YnVuaXQoc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCByZXQ7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC02NzgsMzEgKzY5MywzNCBAQAogCWMtPm9wZXJhbmRbNF0gPSAweDA4OyAvKiBsZW5ndGggbG93Ynl0ZSAgKi8KIAljLT5vcGVyYW5kWzVdID0gMHgwMDsgLyogb2Zmc2V0IGhpZ2hieXRlICovCiAJYy0+b3BlcmFuZFs2XSA9IDB4MGQ7IC8qIG9mZnNldCBsb3dieXRlICAqLworCWNsZWFyX29wZXJhbmRzKGMsIDcsIDgpOyAvKiBwYWRkaW5nICovCiAKLQljLT5sZW5ndGggPSAxMjsKLQotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSAxMjsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJaWYgKChyLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfU1RBQkxFICYmCiAJICAgICByLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfQUNDRVBURUQpIHx8CiAJICAgIChyLT5vcGVyYW5kWzNdIDw8IDgpICsgci0+b3BlcmFuZFs0XSAhPSA4KSB7CiAJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiY2Fubm90IHJlYWQgc3VidW5pdCBpZGVudGlmaWVyXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CiAJfQotCXJldHVybiAwOworb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAKICNkZWZpbmUgU0laRU9GX0FOVEVOTkFfSU5QVVRfSU5GTyAyMgogCiBpbnQgYXZjX3R1bmVyX3N0YXR1cyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgc3RydWN0IGZpcmVkdHZfdHVuZXJfc3RhdHVzICpzdGF0KQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7Ci0JaW50IGxlbmd0aDsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCBsZW5ndGgsIHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTcxMCwyNyArNzI4LDMwIEBACiAKIAljLT5vcGVyYW5kWzBdID0gREVTQ1JJUFRPUl9UVU5FUl9TVEFUVVM7CiAJYy0+b3BlcmFuZFsxXSA9IDB4ZmY7CS8qIHJlYWRfcmVzdWx0X3N0YXR1cyAqLwotCWMtPm9wZXJhbmRbMl0gPSAweDAwOwkvKiByZXNlcnZlZCAqLwotCWMtPm9wZXJhbmRbM10gPSAwOwkvKiBTSVpFT0ZfQU5URU5OQV9JTlBVVF9JTkZPID4+IDg7ICovCi0JYy0+b3BlcmFuZFs0XSA9IDA7CS8qIFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8gJiAweGZmOyAqLwotCWMtPm9wZXJhbmRbNV0gPSAweDAwOwotCWMtPm9wZXJhbmRbNl0gPSAweDAwOworCS8qCisJICogb3BlcmFuZFsyXTogcmVzZXJ2ZWQKKwkgKiBvcGVyYW5kWzNdOiBTSVpFT0ZfQU5URU5OQV9JTlBVVF9JTkZPID4+IDgKKwkgKiBvcGVyYW5kWzRdOiBTSVpFT0ZfQU5URU5OQV9JTlBVVF9JTkZPICYgMHhmZgorCSAqLworCWNsZWFyX29wZXJhbmRzKGMsIDIsIDMxKTsKIAotCWMtPmxlbmd0aCA9IDEyOwotCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IDEyOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKIAlpZiAoci0+cmVzcG9uc2UgIT0gQVZDX1JFU1BPTlNFX1NUQUJMRSAmJgogCSAgICByLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfQUNDRVBURUQpIHsKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJjYW5ub3QgcmVhZCB0dW5lciBzdGF0dXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCiAJbGVuZ3RoID0gci0+b3BlcmFuZFs5XTsKIAlpZiAoci0+b3BlcmFuZFsxXSAhPSAweDEwIHx8IGxlbmd0aCAhPSBTSVpFT0ZfQU5URU5OQV9JTlBVVF9JTkZPKSB7CiAJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiZ290IGludmFsaWQgdHVuZXIgc3RhdHVzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAogCXN0YXQtPmFjdGl2ZV9zeXN0ZW0JCT0gci0+b3BlcmFuZFsxMF07CkBAIC03NjYsMjAgKzc4NywyMSBAQAogCXN0YXQtPmNhX2R2Yl9mbGFnCQk9IHItPm9wZXJhbmRbMzFdID4+IDMgJiAxOwogCXN0YXQtPmNhX2Vycm9yX2ZsYWcJCT0gci0+b3BlcmFuZFszMV0gPj4gMiAmIDE7CiAJc3RhdC0+Y2FfaW5pdGlhbGl6YXRpb25fc3RhdHVzCT0gci0+b3BlcmFuZFszMV0gPj4gMSAmIDE7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2Y19sbmJfY29udHJvbChzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciB2b2x0YWdlLCBjaGFyIGJ1cnN0LAogCQkgICAgY2hhciBjb250dG9uZSwgY2hhciBucmRpc2VxLAogCQkgICAgc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCAqZGlzZXFjbWQpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsKLQlpbnQgaSwgaiwgazsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCBwb3MsIGosIGssIHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTc4OSw0MSArODExLDQxIEBACiAJYy0+b3BlcmFuZFsxXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzE7CiAJYy0+b3BlcmFuZFsyXSA9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzI7CiAJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0xOQl9DT05UUk9MOwotCiAJYy0+b3BlcmFuZFs0XSA9IHZvbHRhZ2U7CiAJYy0+b3BlcmFuZFs1XSA9IG5yZGlzZXE7CiAKLQlpID0gNjsKLQorCXBvcyA9IDY7CiAJZm9yIChqID0gMDsgaiA8IG5yZGlzZXE7IGorKykgewotCQljLT5vcGVyYW5kW2krK10gPSBkaXNlcWNtZFtqXS5tc2dfbGVuOworCQljLT5vcGVyYW5kW3BvcysrXSA9IGRpc2VxY21kW2pdLm1zZ19sZW47CiAKIAkJZm9yIChrID0gMDsgayA8IGRpc2VxY21kW2pdLm1zZ19sZW47IGsrKykKLQkJCWMtPm9wZXJhbmRbaSsrXSA9IGRpc2VxY21kW2pdLm1zZ1trXTsKKwkJCWMtPm9wZXJhbmRbcG9zKytdID0gZGlzZXFjbWRbal0ubXNnW2tdOwogCX0KKwljLT5vcGVyYW5kW3BvcysrXSA9IGJ1cnN0OworCWMtPm9wZXJhbmRbcG9zKytdID0gY29udHRvbmU7CisJcGFkX29wZXJhbmRzKGMsIHBvcyk7CiAKLQljLT5vcGVyYW5kW2krK10gPSBidXJzdDsKLQljLT5vcGVyYW5kW2krK10gPSBjb250dG9uZTsKLQotCWMtPmxlbmd0aCA9IEFMSUdOKDMgKyBpLCA0KTsKLQotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSBBTElHTigzICsgcG9zLCA0KTsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJaWYgKHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9BQ0NFUFRFRCkgewogCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgIkxOQiBjb250cm9sIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOwogCX0KK291dDoKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX3JlZ2lzdGVyX3JlbW90ZV9jb250cm9sKHN0cnVjdCBmaXJlZHR2ICpmZHR2KQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCByZXQ7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfTk9USUZZOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1VOSVQgfCA3OwpAQCAtODMzLDEwICs4NTUsMTYgQEAKIAljLT5vcGVyYW5kWzFdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMTsKIAljLT5vcGVyYW5kWzJdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMjsKIAljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfUkVHSVNURVJfUkVNT1RFX0NPTlRST0w7CisJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHBhZGRpbmcgKi8KIAotCWMtPmxlbmd0aCA9IDg7CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gODsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CiAKLQlyZXR1cm4gYXZjX3dyaXRlKGZkdHYsIGMsIE5VTEwpOworCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlPyAqLworCisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBhdmNfcmVtb3RlX2N0cmxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC04NTEsMTEgKzg3OSwxMCBAQAogI2lmIDAgLyogRklYTUU6IHVudXNlZCAqLwogaW50IGF2Y190dW5lcl9ob3N0MmNhKHN0cnVjdCBmaXJlZHR2ICpmZHR2KQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7IC8qIEZJWE1FOiB1bnVzZWQgKi8KKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCByZXQ7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC04NjcsMTUgKzg5NCwxNiBAQAogCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9IT1NUMkNBOwogCWMtPm9wZXJhbmRbNF0gPSAwOyAvKiBzbG90ICovCiAJYy0+b3BlcmFuZFs1XSA9IFNGRV9WRU5ET1JfVEFHX0NBX0FQUExJQ0FUSU9OX0lORk87IC8qIGNhIHRhZyAqLwotCWMtPm9wZXJhbmRbNl0gPSAwOyAvKiBtb3JlL2xhc3QgKi8KLQljLT5vcGVyYW5kWzddID0gMDsgLyogbGVuZ3RoICovCisJY2xlYXJfb3BlcmFuZHMoYywgNiwgOCk7CiAKLQljLT5sZW5ndGggPSAxMjsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSAxMjsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CiAKLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGU/ICovCiAKLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfQogI2VuZGlmCiAKQEAgLTkwNiwxMiArOTM0LDExIEBACiAKIGludCBhdmNfY2FfYXBwX2luZm8oc3RydWN0IGZpcmVkdHYgKmZkdHYsIGNoYXIgKmFwcF9pbmZvLCB1bnNpZ25lZCBpbnQgKmxlbikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOwotCWludCBwb3M7CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlpbnQgcG9zLCByZXQ7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfU1RBVFVTOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTkyMywxMSArOTUwLDEyIEBACiAJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0NBMkhPU1Q7CiAJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KIAljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfQVBQTElDQVRJT05fSU5GTzsgLyogY2EgdGFnICovCisJY2xlYXJfb3BlcmFuZHMoYywgNiwgTEFTVF9PUEVSQU5EKTsKIAotCWMtPmxlbmd0aCA9IDEyOwotCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IDEyOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKIAkvKiBGSVhNRTogY2hlY2sgcmVzcG9uc2UgY29kZSBhbmQgdmFsaWRhdGUgcmVzcG9uc2UgZGF0YSAqLwogCkBAIC05MzksMTggKzk2NywxOSBAQAogCWFwcF9pbmZvWzRdID0gMHgwMTsKIAltZW1jcHkoJmFwcF9pbmZvWzVdLCAmci0+b3BlcmFuZFtwb3NdLCA1ICsgci0+b3BlcmFuZFtwb3MgKyA0XSk7CiAJKmxlbiA9IGFwcF9pbmZvWzNdICsgNDsKK291dDoKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX2NhX2luZm8oc3RydWN0IGZpcmVkdHYgKmZkdHYsIGNoYXIgKmFwcF9pbmZvLCB1bnNpZ25lZCBpbnQgKmxlbikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOwotCWludCBwb3M7CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlpbnQgcG9zLCByZXQ7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfU1RBVFVTOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTk2MiwxMSArOTkxLDE0IEBACiAJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0NBMkhPU1Q7CiAJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KIAljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfQVBQTElDQVRJT05fSU5GTzsgLyogY2EgdGFnICovCisJY2xlYXJfb3BlcmFuZHMoYywgNiwgTEFTVF9PUEVSQU5EKTsKIAotCWMtPmxlbmd0aCA9IDEyOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IDEyOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGUgYW5kIHZhbGlkYXRlIHJlc3BvbnNlIGRhdGEgKi8KIAogCXBvcyA9IGdldF9jYV9vYmplY3RfcG9zKHIpOwogCWFwcF9pbmZvWzBdID0gKEVONTAyMjFfVEFHX0NBX0lORk8gPj4gMTYpICYgMHhmZjsKQEAgLTk3NiwxNyArMTAwOCwxOCBAQAogCWFwcF9pbmZvWzRdID0gci0+b3BlcmFuZFtwb3MgKyAwXTsKIAlhcHBfaW5mb1s1XSA9IHItPm9wZXJhbmRbcG9zICsgMV07CiAJKmxlbiA9IGFwcF9pbmZvWzNdICsgNDsKK291dDoKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX2NhX3Jlc2V0KHN0cnVjdCBmaXJlZHR2ICpmZHR2KQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7IC8qIEZJWE1FOiB1bnVzZWQgKi8KKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCByZXQ7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC0xMDAyLDE5ICsxMDM1LDIwIEBACiAJYy0+b3BlcmFuZFs3XSA9IDE7IC8qIGxlbmd0aCAqLwogCWMtPm9wZXJhbmRbOF0gPSAwOyAvKiBmb3JjZSBoYXJkd2FyZSByZXNldCAqLwogCi0JYy0+bGVuZ3RoID0gMTI7CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOwogCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlPyAqLwogCi0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2Y19jYV9wbXQoc3RydWN0IGZpcmVkdHYgKmZkdHYsIGNoYXIgKm1zZywgaW50IGxlbmd0aCkKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CiAJaW50IGxpc3RfbWFuYWdlbWVudDsKIAlpbnQgcHJvZ3JhbV9pbmZvX2xlbmd0aDsKIAlpbnQgcG10X2NtZF9pZDsKQEAgLTEwMjIsMTEgKzEwNTYsMTIgQEAKIAlpbnQgd3JpdGVfcG9zOwogCWludCBlc19pbmZvX2xlbmd0aDsKIAlpbnQgY3JjMzJfY3N1bTsKKwlpbnQgcmV0OwogCiAJaWYgKHVubGlrZWx5KGF2Y19kZWJ1ZyAmIEFWQ19ERUJVR19BUFBMSUNBVElPTl9QTVQpKQogCQlkZWJ1Z19wbXQobXNnLCBsZW5ndGgpOwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtMTA1OCw3ICsxMDkzLDcgQEAKIAogCWMtPm9wZXJhbmRbMTJdID0gMHgwMjsgLyogVGFibGUgaWQ9MiAqLwogCWMtPm9wZXJhbmRbMTNdID0gMHg4MDsgLyogU2VjdGlvbiBzeW50YXggKyBsZW5ndGggKi8KLQkvKiBjLT5vcGVyYW5kWzE0XSA9IFhYWHByb2dyYW1faW5mb19sZW5ndGggKyAxMjsgKi8KKwogCWMtPm9wZXJhbmRbMTVdID0gbXNnWzFdOyAvKiBQcm9ncmFtIG51bWJlciAqLwogCWMtPm9wZXJhbmRbMTZdID0gbXNnWzJdOwogCWMtPm9wZXJhbmRbMTddID0gMHgwMTsgLyogVmVyc2lvbiBudW1iZXI9MCArIGN1cnJlbnQvbmV4dD0xICovCkBAIC0xMTA2LDEyICsxMTQxLDcgQEAKIAkJCXdyaXRlX3BvcyArPSBlc19pbmZvX2xlbmd0aDsKIAkJfQogCX0KLQotCS8qIENSQyAqLwotCWMtPm9wZXJhbmRbd3JpdGVfcG9zKytdID0gMHgwMDsKLQljLT5vcGVyYW5kW3dyaXRlX3BvcysrXSA9IDB4MDA7Ci0JYy0+b3BlcmFuZFt3cml0ZV9wb3MrK10gPSAweDAwOwotCWMtPm9wZXJhbmRbd3JpdGVfcG9zKytdID0gMHgwMDsKKwl3cml0ZV9wb3MgKz0gNDsgLyogQ1JDICovCiAKIAljLT5vcGVyYW5kWzddID0gMHg4MjsKIAljLT5vcGVyYW5kWzhdID0gKHdyaXRlX3BvcyAtIDEwKSA+PiA4OwpAQCAtMTEyMywyOCArMTE1MywzMSBAQAogCWMtPm9wZXJhbmRbd3JpdGVfcG9zIC0gM10gPSAoY3JjMzJfY3N1bSA+PiAxNikgJiAweGZmOwogCWMtPm9wZXJhbmRbd3JpdGVfcG9zIC0gMl0gPSAoY3JjMzJfY3N1bSA+PiAgOCkgJiAweGZmOwogCWMtPm9wZXJhbmRbd3JpdGVfcG9zIC0gMV0gPSAoY3JjMzJfY3N1bSA+PiAgMCkgJiAweGZmOworCXBhZF9vcGVyYW5kcyhjLCB3cml0ZV9wb3MpOwogCi0JYy0+bGVuZ3RoID0gQUxJR04oMyArIHdyaXRlX3BvcywgNCk7Ci0KLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gQUxJR04oMyArIHdyaXRlX3BvcywgNCk7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAogCWlmIChyLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfQUNDRVBURUQpIHsKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsCiAJCQkiQ0EgUE1UIGZhaWxlZCB3aXRoIHJlc3BvbnNlIDB4JXhcbiIsIHItPnJlc3BvbnNlKTsKLQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldCA9IC1FRkFVTFQ7CiAJfQorb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfY2FfZ2V0X3RpbWVfZGF0ZShzdHJ1Y3QgZmlyZWR0diAqZmR0diwgaW50ICppbnRlcnZhbCkKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9TVEFUVVM7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtMTE1NiwyOCArMTE4OSwyOCBAQAogCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9DQTJIT1NUOwogCWMtPm9wZXJhbmRbNF0gPSAwOyAvKiBzbG90ICovCiAJYy0+b3BlcmFuZFs1XSA9IFNGRV9WRU5ET1JfVEFHX0NBX0RBVEVfVElNRTsgLyogY2EgdGFnICovCi0JYy0+b3BlcmFuZFs2XSA9IDA7IC8qIG1vcmUvbGFzdCAqLwotCWMtPm9wZXJhbmRbN10gPSAwOyAvKiBsZW5ndGggKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA2LCBMQVNUX09QRVJBTkQpOwogCi0JYy0+bGVuZ3RoID0gMTI7Ci0KLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAogCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlIGFuZCB2YWxpZGF0ZSByZXNwb25zZSBkYXRhICovCiAKIAkqaW50ZXJ2YWwgPSByLT5vcGVyYW5kW2dldF9jYV9vYmplY3RfcG9zKHIpXTsKK291dDoKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX2NhX2VudGVyX21lbnUoc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9TVEFUVVM7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtMTE4OSwyNCArMTIyMiwyNSBAQAogCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9IT1NUMkNBOwogCWMtPm9wZXJhbmRbNF0gPSAwOyAvKiBzbG90ICovCiAJYy0+b3BlcmFuZFs1XSA9IFNGRV9WRU5ET1JfVEFHX0NBX0VOVEVSX01FTlU7Ci0JYy0+b3BlcmFuZFs2XSA9IDA7IC8qIG1vcmUvbGFzdCAqLwotCWMtPm9wZXJhbmRbN10gPSAwOyAvKiBsZW5ndGggKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA2LCA4KTsKIAotCWMtPmxlbmd0aCA9IDEyOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IDEyOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKIAotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwkvKiBGSVhNRTogY2hlY2sgcmVzcG9uc2UgY29kZT8gKi8KIAotCXJldHVybiAwOworCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfY2FfZ2V0X21taShzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciAqbW1pX29iamVjdCwgdW5zaWduZWQgaW50ICpsZW4pCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCByZXQ7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfU1RBVFVTOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTEyMTgsMjAgKzEyNTIsMjEgQEAKIAljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfQ0EySE9TVDsKIAljLT5vcGVyYW5kWzRdID0gMDsgLyogc2xvdCAqLwogCWMtPm9wZXJhbmRbNV0gPSBTRkVfVkVORE9SX1RBR19DQV9NTUk7Ci0JYy0+b3BlcmFuZFs2XSA9IDA7IC8qIG1vcmUvbGFzdCAqLwotCWMtPm9wZXJhbmRbN10gPSAwOyAvKiBsZW5ndGggKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA2LCBMQVNUX09QRVJBTkQpOwogCi0JYy0+bGVuZ3RoID0gMTI7Ci0KLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAogCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlIGFuZCB2YWxpZGF0ZSByZXNwb25zZSBkYXRhICovCiAKIAkqbGVuID0gZ2V0X2NhX29iamVjdF9sZW5ndGgocik7CiAJbWVtY3B5KG1taV9vYmplY3QsICZyLT5vcGVyYW5kW2dldF9jYV9vYmplY3RfcG9zKHIpXSwgKmxlbik7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogI2RlZmluZSBDTVBfT1VUUFVUX1BMVUdfQ09OVFJPTF9SRUdfMAkweGZmZmZmMDAwMDkwNFVMTApAQCAtMTI0MCwxNCArMTI3NSwxNCBAQAogewogCWludCByZXQ7CiAKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmZHR2LT5hdmNfbXV0ZXgpKQotCQlyZXR1cm4gLUVJTlRSOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAlyZXQgPSBmZHR2LT5iYWNrZW5kLT5yZWFkKGZkdHYsIGFkZHIsIGRhdGEpOwogCWlmIChyZXQgPCAwKQogCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgIkNNUDogcmVhZCBJL08gZXJyb3JcbiIpOwogCiAJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTI1NSwxNCArMTI5MCwxOSBAQAogewogCWludCByZXQ7CiAKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmZHR2LT5hdmNfbXV0ZXgpKQotCQlyZXR1cm4gLUVJTlRSOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXQgPSBmZHR2LT5iYWNrZW5kLT5sb2NrKGZkdHYsIGFkZHIsIGRhdGEpOworCS8qIGRhdGFbXSBpcyBzdGFjay1hbGxvY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgRE1BLW1hcHBlZC4gKi8KKwltZW1jcHkoZmR0di0+YXZjX2RhdGEsIGRhdGEsIDgpOworCisJcmV0ID0gZmR0di0+YmFja2VuZC0+bG9jayhmZHR2LCBhZGRyLCBmZHR2LT5hdmNfZGF0YSk7CiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiQ01QOiBsb2NrIEkvTyBlcnJvclxuIik7CisJZWxzZQorCQltZW1jcHkoZGF0YSwgZmR0di0+YXZjX2RhdGEsIDgpOwogCiAJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZHZiLmMKaW5kZXggZmM5OTk2Yy4uMDc5ZThjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWR2Yi5jCkBAIC0yNzcsNyArMjc3LDYgQEAKIAogCW11dGV4X2luaXQoJmZkdHYtPmF2Y19tdXRleCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZmR0di0+YXZjX3dhaXQpOwotCWZkdHYtPmF2Y19yZXBseV9yZWNlaXZlZCA9IHRydWU7CiAJbXV0ZXhfaW5pdCgmZmR0di0+ZGVtdXhfbXV0ZXgpOwogCUlOSVRfV09SSygmZmR0di0+cmVtb3RlX2N0cmxfd29yaywgYXZjX3JlbW90ZV9jdHJsX3dvcmspOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZ3LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZ3LmMKaW5kZXggNjIyM2JmMC4uN2EzZGUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZncuYwpAQCAtNDEsNyArNDEsNyBAQAogCXJldHVybiByY29kZSAhPSBSQ09ERV9DT01QTEVURSA/IC1FSU8gOiAwOwogfQogCi1zdGF0aWMgaW50IG5vZGVfbG9jayhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdTY0IGFkZHIsIF9fYmUzMiBkYXRhW10pCitzdGF0aWMgaW50IG5vZGVfbG9jayhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdTY0IGFkZHIsIHZvaWQgKmRhdGEpCiB7CiAJcmV0dXJuIG5vZGVfcmVxKGZkdHYsIGFkZHIsIGRhdGEsIDgsIFRDT0RFX0xPQ0tfQ09NUEFSRV9TV0FQKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYuaAppbmRleCAzNTA4MGRiLi43OGNjMjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di5oCkBAIC03Myw3ICs3Myw3IEBACiBzdHJ1Y3QgZmlyZWR0djsKIAogc3RydWN0IGZpcmVkdHZfYmFja2VuZCB7Ci0JaW50ICgqbG9jaykoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHU2NCBhZGRyLCBfX2JlMzIgZGF0YVtdKTsKKwlpbnQgKCpsb2NrKShzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdTY0IGFkZHIsIHZvaWQgKmRhdGEpOwogCWludCAoKnJlYWQpKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgdm9pZCAqZGF0YSk7CiAJaW50ICgqd3JpdGUpKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CiAJaW50ICgqc3RhcnRfaXNvKShzdHJ1Y3QgZmlyZWR0diAqZmR0dik7CkBAIC0xMTQsOCArMTE0LDggQEAKIAl1bnNpZ25lZCBsb25nCQljaGFubmVsX2FjdGl2ZTsKIAl1MTYJCQljaGFubmVsX3BpZFsxNl07CiAKLQlzaXplX3QJCQlyZXNwb25zZV9sZW5ndGg7Ci0JdTgJCQlyZXNwb25zZVs1MTJdOworCWludAkJCWF2Y19kYXRhX2xlbmd0aDsKKwl1OAkJCWF2Y19kYXRhWzUxMl07CiB9OwogCiAvKiBmaXJlZHR2LTEzOTQuYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5oCmluZGV4IDI4YjkwYzkuLmU5MGZhOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzLmgKQEAgLTQ0LDYgKzQ0LDcgQEAKIAlBRjkwMTNfVFVORVJfTVQyMDYwXzIgICA9IDE0NywgLyogTWljcm90dW5lICovCiAJQUY5MDEzX1RVTkVSX1REQTE4MjcxICAgPSAxNTYsIC8qIE5YUCAqLwogCUFGOTAxM19UVU5FUl9RVDEwMTBBICAgID0gMTYyLCAvKiBRdWFudGVrICovCisJQUY5MDEzX1RVTkVSX1REQTE4MjE4ICAgPSAxNzksIC8qIE5YUCAqLwogfTsKIAogLyogQUY5MDEzLzUgR1BJT3MgKG1vc3RseSBndWVzc2VkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F0Ym04ODMwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXRibTg4MzAuYwppbmRleCA1OTg4MWE1Li40M2FhYzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXRibTg4MzAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXRibTg4MzAuYwpAQCAtMTcwLDYgKzE3MCwxOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNldF9hZ2NfY29uZmlnKHN0cnVjdCBhdGJtX3N0YXRlICpwcml2LAorCXU4IG1pbiwgdTggbWF4LCB1OCBob2xkX2xvb3ApCit7CisJLyogbm8gZWZmZWN0IGlmIGJvdGggbWluIGFuZCBtYXggYXJlIHplcm8gKi8KKwlpZiAoIW1pbiAmJiAhbWF4KQorCSAgICByZXR1cm4gMDsKKworCWF0Ym04ODMwX3dyaXRlX3JlZyhwcml2LCBSRUdfQUdDX01JTiwgbWluKTsKKwlhdGJtODgzMF93cml0ZV9yZWcocHJpdiwgUkVHX0FHQ19NQVgsIG1heCk7CisJYXRibTg4MzBfd3JpdGVfcmVnKHByaXYsIFJFR19BR0NfSE9MRF9MT09QLCBob2xkX2xvb3ApOworCisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbnQgc2V0X3N0YXRpY19jaGFubmVsX21vZGUoc3RydWN0IGF0Ym1fc3RhdGUgKnByaXYpCiB7CkBAIC0yMjcsNiArMjQwLDkgQEAKIAkvKlNldCBJRiBmcmVxdWVuY3kqLwogCXNldF9pZl9mcmVxKHByaXYsIGNmZy0+aWZfZnJlcSk7CiAKKwkvKlNldCBBR0MgQ29uZmlnKi8KKwlzZXRfYWdjX2NvbmZpZyhwcml2LCBjZmctPmFnY19taW4sIGNmZy0+YWdjX21heCwKKwkJY2ZnLT5hZ2NfaG9sZF9sb29wKTsKIAogCS8qU2V0IHN0YXRpYyBjaGFubmVsIG1vZGUqLwogCXNldF9zdGF0aWNfY2hhbm5lbF9tb2RlKHByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwOTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDkwLmMKaW5kZXggNjE0NTUyNy4uN2VhYzE3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwOTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA5MC5jCkBAIC0yODMsNyArMjgzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotZXh0ZXJuIHZvaWQgZGliMDA5MF9kY2NfZnJlcShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggZmFzdCkKK3ZvaWQgZGliMDA5MF9kY2NfZnJlcShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggZmFzdCkKIHsKIAlzdHJ1Y3QgZGliMDA5MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKIAlpZiAoZmFzdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliODAwMC5jCmluZGV4IDZmNmZhMjkuLjJhYTk3ZGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliODAwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmMKQEAgLTE5OTksNiArMTk5OSw4IEBACiAJc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IHRpbWUsIHJldDsKIAorCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZGVsaXZlcnlfc3lzdGVtID0gU1lTX0lTREJUOworCiAJZGliODAwMF9zZXRfb3V0cHV0X21vZGUoc3RhdGUsIE9VVE1PREVfSElHSF9aKTsKIAogCWlmIChmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYngwMDBfY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uYwppbmRleCBlNmYzZDczLi45ODBlMDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uYwpAQCAtMTc0LDcgKzE3NCw3IEBACiBFWFBPUlRfU1lNQk9MKGRpYngwMDBfZXhpdF9pMmNfbWFzdGVyKTsKIAogCi11MzIgc3lzdGltZSgpCit1MzIgc3lzdGltZSh2b2lkKQogewogICAgIHN0cnVjdCB0aW1lc3BlYyB0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbDY0NzgxLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbDY0NzgxLmMKaW5kZXggMzA1MWI2NC4uNDQ1ZmExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2w2NDc4MS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sNjQ3ODEuYwpAQCAtMTkyLDggKzE5Miw4IEBACiAJc3BpX2JpYXMgKj0gcWFtX3RhYltwLT5jb25zdGVsbGF0aW9uXTsKIAlzcGlfYmlhcyAvPSBwLT5jb2RlX3JhdGVfSFAgKyAxOwogCXNwaV9iaWFzIC89IChndWFyZF90YWJbcC0+Z3VhcmRfaW50ZXJ2YWxdICsgMzIpOwotCXNwaV9iaWFzICo9IDEwMDBVTEw7Ci0Jc3BpX2JpYXMgLz0gMTAwMFVMTCArIHBwbS8xMDAwOworCXNwaV9iaWFzICo9IDEwMDA7CisJc3BpX2JpYXMgLz0gMTAwMCArIHBwbS8xMDAwOwogCXNwaV9iaWFzICo9IHAtPmNvZGVfcmF0ZV9IUDsKIAogCXZhbDB4MDQgPSAocC0+dHJhbnNtaXNzaW9uX21vZGUgPDwgMikgfCBwLT5ndWFyZF9pbnRlcnZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYwppbmRleCBiMTgxYmYwLi4xMzQzNzI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYwpAQCAtMTU4LDcgKzE1OCw4IEBACiAJLyogb3ZlcnJpZGUgZnJvbnRlbmQgb3BzICovCiAJZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGxuYnAyMV9zZXRfdm9sdGFnZTsKIAlmZS0+b3BzLmVuYWJsZV9oaWdoX2xuYl92b2x0YWdlID0gbG5icDIxX2VuYWJsZV9oaWdoX2xuYl92b2x0YWdlOwotCWZlLT5vcHMuc2V0X3RvbmUgPSBsbmJwMjFfc2V0X3RvbmU7CisJaWYgKCEob3ZlcnJpZGVfY2xlYXIgJiBMTkJIMjRfVEVOKSkgLyoyMmtIeiBsb2dpYyBjb250cm9sbGVkIGJ5IGRlbW9kKi8KKwkJZmUtPm9wcy5zZXRfdG9uZSA9IGxuYnAyMV9zZXRfdG9uZTsKIAlwcmludGsoS0VSTl9JTkZPICJMTkJ4MnggYXR0YWNoZWQgb24gYWRkcj0leFxuIiwgbG5icDIxLT5pMmNfYWRkcik7CiAKIAlyZXR1cm4gZmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc2kyMXh4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc2kyMXh4LmMKaW5kZXggOTU1MmEyMi4uZDIxYTMyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NpMjF4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zaTIxeHguYwpAQCAtOTcsOCArOTcsNiBAQAogI2RlZmluZQlMTkJfU1VQUExZX0NUUkxfUkVHXzQJCTB4Y2UKICNkZWZpbmUJTE5CX1NVUFBMWV9TVEFUVVNfUkVHCQkweGNmCiAKLSNkZWZpbmUgRkFMU0UJMAotI2RlZmluZSBUUlVFCTEKICNkZWZpbmUgRkFJTAktMQogI2RlZmluZSBQQVNTCTAKIApAQCAtNzE4LDcgKzcxNiw3IEBACiAJaW50IGZpbmVfdHVuZV9mcmVxOwogCXVuc2lnbmVkIGNoYXIgc2FtcGxlX3JhdGUgPSAwOwogCS8qIGJvb2xlYW4gKi8KLQl1bnNpZ25lZCBpbnQgaW5iYW5kX2ludGVyZmVyZXJfaW5kOworCWJvb2wgaW5iYW5kX2ludGVyZmVyZXJfaW5kOwogCiAJLyogSU5URVJNRURJQVRFIFZBTFVFUyAqLwogCWludCBpY29hcnNlX3R1bmVfZnJlcTsgLyogTUh6ICovCkBAIC03MjgsMTUgKzcyNiw4IEBACiAJdW5zaWduZWQgaW50IHgxOwogCXVuc2lnbmVkIGludCB4MjsKIAlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgaW5iYW5kX2ludGVyZmVyZXJfZGl2MltBTExPV0FCTEVfRlNfQ09VTlRdID0gewotCQkJRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLAotCQkJRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFCi0JfTsKLQl1bnNpZ25lZCBpbnQgaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtBTExPV0FCTEVfRlNfQ09VTlRdID0gewotCQkJRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLAotCQkJRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFCi0JfTsKLQorCWJvb2wgaW5iYW5kX2ludGVyZmVyZXJfZGl2MltBTExPV0FCTEVfRlNfQ09VTlRdOworCWJvb2wgaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtBTExPV0FCTEVfRlNfQ09VTlRdOwogCWludCBzdGF0dXM7CiAKIAkvKiBhbGxvd2FibGUgc2FtcGxlIHJhdGVzIGZvciBBREMgaW4gTUh6ICovCkBAIC03NjIsNyArNzUzLDcgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQUxMT1dBQkxFX0ZTX0NPVU5UOyArK2kpCi0JCWluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gPSBpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldID0gRkFMU0U7CisJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gPSBpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldID0gZmFsc2U7CiAKIAlpZl9saW1pdF9oaWdoID0gLTcwMDAwMDsKIAlpZl9saW1pdF9sb3cgPSAtMTAwMDAwOwpAQCAtNzk4LDcgKzc4OSw3IEBACiAKIAkJaWYgKCgoYmFuZF9sb3cgPCB4MSkgJiYgKHgxIDwgYmFuZF9oaWdoKSkgfHwKIAkJCQkJKChiYW5kX2xvdyA8IHgyKSAmJiAoeDIgPCBiYW5kX2hpZ2gpKSkKLQkJCQkJaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtpXSA9IFRSVUU7CisJCQkJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjRbaV0gPSB0cnVlOwogCiAJfQogCkBAIC04MTEsMjUgKzgwMiwyOCBAQAogCiAJCWlmICgoKGJhbmRfbG93IDwgeDEpICYmICh4MSA8IGJhbmRfaGlnaCkpIHx8CiAJCQkJCSgoYmFuZF9sb3cgPCB4MikgJiYgKHgyIDwgYmFuZF9oaWdoKSkpCi0JCQkJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gPSBUUlVFOworCQkJCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldID0gdHJ1ZTsKIAl9CiAKLQlpbmJhbmRfaW50ZXJmZXJlcl9pbmQgPSBUUlVFOwotCWZvciAoaSA9IDA7IGkgPCBBTExPV0FCTEVfRlNfQ09VTlQ7ICsraSkKLQkJaW5iYW5kX2ludGVyZmVyZXJfaW5kICY9IGluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gfAotCQkJCQkJaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtpXTsKKwlpbmJhbmRfaW50ZXJmZXJlcl9pbmQgPSB0cnVlOworCWZvciAoaSA9IDA7IGkgPCBBTExPV0FCTEVfRlNfQ09VTlQ7ICsraSkgeworCQlpZiAoaW5iYW5kX2ludGVyZmVyZXJfZGl2MltpXSB8fCBpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldKSB7CisJCQlpbmJhbmRfaW50ZXJmZXJlcl9pbmQgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQogCiAJaWYgKGluYmFuZF9pbnRlcmZlcmVyX2luZCkgewogCQlmb3IgKGkgPSAwOyBpIDwgQUxMT1dBQkxFX0ZTX0NPVU5UOyArK2kpIHsKLQkJCWlmIChpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldID09IEZBTFNFKSB7CisJCQlpZiAoIWluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0pIHsKIAkJCQlzYW1wbGVfcmF0ZSA9ICh1OCkgYWZzW2ldOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJZm9yIChpID0gMDsgaSA8IEFMTE9XQUJMRV9GU19DT1VOVDsgKytpKSB7Ci0JCQlpZiAoKGluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gfAotCQkJCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldKSA9PSBGQUxTRSkgeworCQkJaWYgKChpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldIHx8CisJCQkgICAgICFpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldKSkgewogCQkJCXNhbXBsZV9yYXRlID0gKHU4KSBhZnNbaV07CiAJCQkJYnJlYWs7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDAuaAppbmRleCAyOWMzZmE4Li5lM2UzNWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwLmgKQEAgLTQ5LDYgKzQ5LDggQEAKIAl1OCB0dW4yX21hZGRyZXNzOwogCXU4IHR1bjFfYWRjOy8qIDEgZm9yIHN0djYxMTAsIDIgZm9yIHN0YjYxMDAgKi8KIAl1OCB0dW4yX2FkYzsKKwl1OCB0dW4xX3R5cGU7LyogZm9yIG5vdyAzIGZvciBzdGI2MTAwIGF1dG8sIGVsc2UgLSBzb2Z0d2FyZSAqLworCXU4IHR1bjJfdHlwZTsKIAkvKiBTZXQgZGV2aWNlIHBhcmFtIHRvIHN0YXJ0IGRtYSAqLwogCWludCAoKnNldF90c19wYXJhbXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgaXNfcHVuY3R1cmVkKTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9jb3JlLmMKaW5kZXggODc2MmM4Ni4uMDFmOGYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX2NvcmUuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJcmV0dXJuIGJ1ZjsKIH0KIAotdm9pZCBleHRyYWN0X21hc2tfcG9zKHUzMiBsYWJlbCwgdTggKm1hc2ssIHU4ICpwb3MpCitzdGF0aWMgdm9pZCBleHRyYWN0X21hc2tfcG9zKHUzMiBsYWJlbCwgdTggKm1hc2ssIHU4ICpwb3MpCiB7CiAJdTggcG9zaXRpb24gPSAwLCBpID0gMDsKIApAQCAtMjE4LDcgKzIxOCw3IEBACiAJcmV0dXJuIHZhbDsKIH0KIAotZW51bSBmZV9zdHYwOTAwX2Vycm9yIHN0djA5MDBfaW5pdGlhbGl6ZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCkKK3N0YXRpYyBlbnVtIGZlX3N0djA5MDBfZXJyb3Igc3R2MDkwMF9pbml0aWFsaXplKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwKQogewogCXMzMiBpOwogCkBAIC0yODIsNyArMjgyLDcgQEAKIAlyZXR1cm4gU1RWMDkwMF9OT19FUlJPUjsKIH0KIAotdTMyIHN0djA5MDBfZ2V0X21jbGtfZnJlcShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgdTMyIGV4dF9jbGspCitzdGF0aWMgdTMyIHN0djA5MDBfZ2V0X21jbGtfZnJlcShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgdTMyIGV4dF9jbGspCiB7CiAJdTMyIG1jbGsgPSA5MDAwMDAwMCwgZGl2ID0gMCwgYWRfZGl2ID0gMDsKIApAQCAtMjk2LDcgKzI5Niw3IEBACiAJcmV0dXJuIG1jbGs7CiB9CiAKLWVudW0gZmVfc3R2MDkwMF9lcnJvciBzdHYwOTAwX3NldF9tY2xrKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLCB1MzIgbWNsaykKK3N0YXRpYyBlbnVtIGZlX3N0djA5MDBfZXJyb3Igc3R2MDkwMF9zZXRfbWNsayhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgdTMyIG1jbGspCiB7CiAJdTMyIG1fZGl2LCBjbGtfc2VsOwogCkBAIC0zMzQsNyArMzM0LDcgQEAKIAlyZXR1cm4gU1RWMDkwMF9OT19FUlJPUjsKIH0KIAotdTMyIHN0djA5MDBfZ2V0X2Vycl9jb3VudChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgaW50IGNudHIsCitzdGF0aWMgdTMyIHN0djA5MDBfZ2V0X2Vycl9jb3VudChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgaW50IGNudHIsCiAJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCiB7CiAJdTMyIGxzYiwgbXNiLCBoc2IsIGVycl92YWw7CkBAIC01NjcsNiArNTY3LDQ2IEBACiAJfQogfQogCit1MzIgc3R2MDkwMF9nZXRfZnJlcV9hdXRvKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLCBpbnQgZGVtb2QpCit7CisJdTMyIGZyZXEsIHJvdW5kOworCS8qCUZvcm11bGF0IDoKKwlUdW5lcl9GcmVxdWVuY3koTUh6KQk9IFJlZ3MgLyA2NAorCVR1bmVyX2dyYW51bGFyaXR5KE1IeikJPSBSZWdzIC8gMjA0OAorCXJlYWxfVHVuZXJfRnJlcXVlbmN5CT0gVHVuZXJfRnJlcXVlbmN5KE1IeikgLSBUdW5lcl9ncmFudWxhcml0eShNSHopCisJKi8KKwlmcmVxID0gKHN0djA5MDBfZ2V0X2JpdHMoaW50cCwgVFVOX1JGRlJFUTIpIDw8IDEwKSArCisJCShzdHYwOTAwX2dldF9iaXRzKGludHAsIFRVTl9SRkZSRVExKSA8PCAyKSArCisJCXN0djA5MDBfZ2V0X2JpdHMoaW50cCwgVFVOX1JGRlJFUTApOworCisJZnJlcSA9IChmcmVxICogMTAwMCkgLyA2NDsKKworCXJvdW5kID0gKHN0djA5MDBfZ2V0X2JpdHMoaW50cCwgVFVOX1JGUkVTVEUxKSA+PiAyKSArCisJCXN0djA5MDBfZ2V0X2JpdHMoaW50cCwgVFVOX1JGUkVTVEUwKTsKKworCXJvdW5kID0gKHJvdW5kICogMTAwMCkgLyAyMDQ4OworCisJcmV0dXJuIGZyZXEgKyByb3VuZDsKK30KKwordm9pZCBzdHYwOTAwX3NldF90dW5lcl9hdXRvKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLCB1MzIgRnJlcXVlbmN5LAorCQkJCQkJdTMyIEJhbmR3aWR0aCwgaW50IGRlbW9kKQoreworCXUzMiB0dW5lckZyZXF1ZW5jeTsKKwkvKiBGb3JtdWxhdDoKKwlUdW5lcl9mcmVxdWVuY3lfcmVnPSBGcmVxdWVuY3koTUh6KSo2NAorCSovCisJdHVuZXJGcmVxdWVuY3kgPSAoRnJlcXVlbmN5ICogNjQpIC8gMTAwMDsKKworCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBUVU5fUkZGUkVRMiwgKHR1bmVyRnJlcXVlbmN5ID4+IDEwKSk7CisJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIFRVTl9SRkZSRVExLCAodHVuZXJGcmVxdWVuY3kgPj4gMikgJiAweGZmKTsKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgVFVOX1JGRlJFUTAsICh0dW5lckZyZXF1ZW5jeSAmIDB4MDMpKTsKKwkvKiBMb3cgUGFzcyBGaWx0ZXIgPSBCVyAvMiAoTUh6KSovCisJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIFRVTl9CVywgQmFuZHdpZHRoIC8gMjAwMDAwMCk7CisJLyogVHVuZXIgV3JpdGUgdHJpZyAqLworCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFROUkxELCAxKTsKK30KKwogc3RhdGljIHMzMiBzdHYwOTAwX2dldF9yZl9sZXZlbChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwKIAkJCQljb25zdCBzdHJ1Y3Qgc3R2MDkwMF90YWJsZSAqbG9va3VwLAogCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCkBAIC0xMzI5LDcgKzEzNjksNiBAQAogCWVudW0gZmVfc3R2MDkwMF9lcnJvciBlcnJvciA9IFNUVjA5MDBfTk9fRVJST1I7CiAJZW51bSBmZV9zdHYwOTAwX2Vycm9yIGRlbW9kRXJyb3IgPSBTVFYwOTAwX05PX0VSUk9SOwogCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwID0gTlVMTDsKLQogCWludCBzZWxvc2NpLCBpOwogCiAJc3RydWN0IHN0djA5MDBfaW5vZGUgKnRlbXBfaW50ID0gZmluZF9pbm9kZShzdGF0ZS0+aTJjX2FkYXAsCkBAIC0xMzQ1LDcgKzEzODQsMTQgQEAKIAl9IGVsc2UgewogCQlzdGF0ZS0+aW50ZXJuYWwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCksCiAJCQkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAoc3RhdGUtPmludGVybmFsID09IE5VTEwpCisJCQlyZXR1cm4gU1RWMDkwMF9JTlZBTElEX0hBTkRMRTsKIAkJdGVtcF9pbnQgPSBhcHBlbmRfaW50ZXJuYWwoc3RhdGUtPmludGVybmFsKTsKKwkJaWYgKHRlbXBfaW50ID09IE5VTEwpIHsKKwkJCWtmcmVlKHN0YXRlLT5pbnRlcm5hbCk7CisJCQlzdGF0ZS0+aW50ZXJuYWwgPSBOVUxMOworCQkJcmV0dXJuIFNUVjA5MDBfSU5WQUxJRF9IQU5ETEU7CisJCX0KIAkJc3RhdGUtPmludGVybmFsLT5kbWRzX3VzZWQgPSAxOwogCQlzdGF0ZS0+aW50ZXJuYWwtPmkyY19hZGFwID0gc3RhdGUtPmkyY19hZGFwOwogCQlzdGF0ZS0+aW50ZXJuYWwtPmkyY19hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKQEAgLTEzNzEsMTEgKzE0MTcsNiBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCi0JaWYgKHN0YXRlLT5pbnRlcm5hbCA9PSBOVUxMKSB7Ci0JCWVycm9yID0gU1RWMDkwMF9JTlZBTElEX0hBTkRMRTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQogCWludHAgPSBzdGF0ZS0+aW50ZXJuYWw7CiAKIAlpbnRwLT5kZW1vZF9tb2RlID0gcF9pbml0LT5kZW1vZF9tb2RlOwpAQCAtMTQwNCw2ICsxNDQ1LDI3IEBACiAJCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMV9SU1RfSFdBUkUsIDApOwogCX0KIAorCWludHAtPnR1bmVyX3R5cGVbMF0gPSBwX2luaXQtPnR1bmVyMV90eXBlOworCWludHAtPnR1bmVyX3R5cGVbMV0gPSBwX2luaXQtPnR1bmVyMl90eXBlOworCS8qIHR1bmVyIGluaXQgKi8KKwlzd2l0Y2ggKHBfaW5pdC0+dHVuZXIxX3R5cGUpIHsKKwljYXNlIDM6IC8qRkVfQVVUT19TVEI2MTAwOiovCisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AxX1ROUkNGRywgMHgzYyk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AxX1ROUkNGRzIsIDB4ODYpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJDRkczLCAweDE4KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDFfVE5SWFRBTCwgMjcpOyAvKiAyN01IeiAqLworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJTVEVQUywgMHgwNSk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AxX1ROUkdBSU4sIDB4MTcpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJBREosIDB4MWYpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJDVEwyLCAweDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDFfVFVOX1RZUEUsIDMpOworCQlicmVhazsKKwkvKiBjYXNlIEZFX1NXX1RVTkVSOiAqLworCWRlZmF1bHQ6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMV9UVU5fVFlQRSwgNik7CisJCWJyZWFrOworCX0KKwogCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMV9UVU5fTUFERFJFU1MsIHBfaW5pdC0+dHVuMV9tYWRkcmVzcyk7CiAJc3dpdGNoIChwX2luaXQtPnR1bmVyMV9hZGMpIHsKIAljYXNlIDE6CkBAIC0xNDEzLDYgKzE0NzUsMjcgQEAKIAkJYnJlYWs7CiAJfQogCisJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDFfVE5STEQsIDEpOyAvKiBodyB0dW5lciAqLworCisJLyogdHVuZXIgaW5pdCAqLworCXN3aXRjaCAocF9pbml0LT50dW5lcjJfdHlwZSkgeworCWNhc2UgMzogLypGRV9BVVRPX1NUQjYxMDA6Ki8KKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDJfVE5SQ0ZHLCAweDNjKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDJfVE5SQ0ZHMiwgMHg4Nik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkNGRzMsIDB4MTgpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMl9UTlJYVEFMLCAyNyk7IC8qIDI3TUh6ICovCisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUlNURVBTLCAweDA1KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDJfVE5SR0FJTiwgMHgxNyk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkFESiwgMHgxZik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkNUTDIsIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMl9UVU5fVFlQRSwgMyk7CisJCWJyZWFrOworCS8qIGNhc2UgRkVfU1dfVFVORVI6ICovCisJZGVmYXVsdDoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIEYwOTAwX1AyX1RVTl9UWVBFLCA2KTsKKwkJYnJlYWs7CisJfQorCiAJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIEYwOTAwX1AyX1RVTl9NQUREUkVTUywgcF9pbml0LT50dW4yX21hZGRyZXNzKTsKIAlzd2l0Y2ggKHBfaW5pdC0+dHVuZXIyX2FkYykgewogCWNhc2UgMToKQEAgLTE0MjIsNiArMTUwNSw4IEBACiAJCWJyZWFrOwogCX0KIAorCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkxELCAxKTsgLyogaHcgdHVuZXIgKi8KKwogCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMV9UVU5fSVFTV0FQLCBwX2luaXQtPnR1bjFfaXFfaW52KTsKIAlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDJfVFVOX0lRU1dBUCwgcF9pbml0LT50dW4yX2lxX2ludik7CiAJc3R2MDkwMF9zZXRfbWNsayhpbnRwLCAxMzUwMDAwMDApOwpAQCAtMTgyNCwxMCArMTkwOSwxMiBAQAogCQlpbml0X3BhcmFtcy50dW4xX21hZGRyZXNzCT0gY29uZmlnLT50dW4xX21hZGRyZXNzOwogCQlpbml0X3BhcmFtcy50dW4xX2lxX2ludgkJPSBTVFYwOTAwX0lRX05PUk1BTDsKIAkJaW5pdF9wYXJhbXMudHVuZXIxX2FkYwkJPSBjb25maWctPnR1bjFfYWRjOworCQlpbml0X3BhcmFtcy50dW5lcjFfdHlwZQkJPSBjb25maWctPnR1bjFfdHlwZTsKIAkJaW5pdF9wYXJhbXMucGF0aDJfdHNfY2xvY2sJPSBjb25maWctPnBhdGgyX21vZGU7CiAJCWluaXRfcGFyYW1zLnRzX2NvbmZpZwkJPSBjb25maWctPnRzX2NvbmZpZ19yZWdzOwogCQlpbml0X3BhcmFtcy50dW4yX21hZGRyZXNzCT0gY29uZmlnLT50dW4yX21hZGRyZXNzOwogCQlpbml0X3BhcmFtcy50dW5lcjJfYWRjCQk9IGNvbmZpZy0+dHVuMl9hZGM7CisJCWluaXRfcGFyYW1zLnR1bmVyMl90eXBlCQk9IGNvbmZpZy0+dHVuMl90eXBlOwogCQlpbml0X3BhcmFtcy50dW4yX2lxX2ludgkJPSBTVFYwOTAwX0lRX1NXQVBQRUQ7CiAKIAkJZXJyX3N0djA5MDAgPSBzdHYwOTAwX2luaXRfaW50ZXJuYWwoJnN0YXRlLT5mcm9udGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3ByaXYuaAppbmRleCBkOGJhOGE5Li5iNjJiMGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcHJpdi5oCkBAIC0yNDcsNiArMjQ3LDcgQEAKIAogCXU4CXR1bjFfbWFkZHJlc3M7CiAJaW50CXR1bmVyMV9hZGM7CisJaW50IAl0dW5lcjFfdHlwZTsKIAogCS8qIElRIGZyb20gdGhlIHR1bmVyMSB0byB0aGUgZGVtb2QgKi8KIAllbnVtIHN0djA5MDBfaXFfaW52ZXJzaW9uCXR1bjFfaXFfaW52OwpAQCAtMjU0LDYgKzI1NSw3IEBACiAKIAl1OAl0dW4yX21hZGRyZXNzOwogCWludAl0dW5lcjJfYWRjOworCWludAl0dW5lcjJfdHlwZTsKIAogCS8qIElRIGZyb20gdGhlIHR1bmVyMiB0byB0aGUgZGVtb2QgKi8KIAllbnVtIHN0djA5MDBfaXFfaW52ZXJzaW9uCXR1bjJfaXFfaW52OwpAQCAtMzA5LDYgKzMxMSw4IEBACiAJczMyCWJ3WzJdOwogCXMzMglzeW1ib2xfcmF0ZVsyXTsKIAlzMzIJc3JjaF9yYW5nZVsyXTsKKwkvKiBmb3Igc29mdHdhcmUvYXV0byB0dW5lciAqLworCWludAl0dW5lcl90eXBlWzJdOwogCiAJLyogYWxnb3JpdGhtIGZvciBzZWFyY2ggQmxpbmQsIENvbGQgb3IgV2FybSovCiAJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9hbGdvCXNyY2hfYWxnb1syXTsKQEAgLTM5NCw0ICszOTgsMTEgQEAKIGZlX3N0djA5MDBfdHJhY2tpbmdfc3RhbmRhcmQgc3R2MDkwMF9nZXRfc3RhbmRhcmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCk7CiAKK2V4dGVybiB1MzIKK3N0djA5MDBfZ2V0X2ZyZXFfYXV0byhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgaW50IGRlbW9kKTsKKworZXh0ZXJuIHZvaWQKK3N0djA5MDBfc2V0X3R1bmVyX2F1dG8oc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsIHUzMiBGcmVxdWVuY3ksCisJCQkJCQl1MzIgQmFuZHdpZHRoLCBpbnQgZGVtb2QpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3JlZy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcmVnLmgKaW5kZXggN2I4ZWRmMS4uNzMxYWZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcmVnLmgKQEAgLTMxNzQsMTcgKzMxNzQsMjEgQEAKICNkZWZpbmUgUjA5MDBfUDFfVE5SUkYxIDB4ZjRlOQogI2RlZmluZSBUTlJSRjEgUkVHeChSMDkwMF9QMV9UTlJSRjEpCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRkZSRVEyIDB4ZjRlOTAwZmYKKyNkZWZpbmUgVFVOX1JGRlJFUTIgRkxEeChGMDkwMF9QMV9UVU5fUkZGUkVRMikKIAogLypQMV9UTlJSRjAqLwogI2RlZmluZSBSMDkwMF9QMV9UTlJSRjAgMHhmNGVhCiAjZGVmaW5lIFROUlJGMCBSRUd4KFIwOTAwX1AxX1ROUlJGMCkKICNkZWZpbmUgRjA5MDBfUDFfVFVOX1JGRlJFUTEgMHhmNGVhMDBmZgorI2RlZmluZSBUVU5fUkZGUkVRMSBGTER4KEYwOTAwX1AxX1RVTl9SRkZSRVExKQogCiAvKlAxX1ROUkJXKi8KICNkZWZpbmUgUjA5MDBfUDFfVE5SQlcgMHhmNGViCiAjZGVmaW5lIFROUkJXIFJFR3goUjA5MDBfUDFfVE5SQlcpCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRkZSRVEwIDB4ZjRlYjAwYzAKKyNkZWZpbmUgVFVOX1JGRlJFUTAgRkxEeChGMDkwMF9QMV9UVU5fUkZGUkVRMCkKICNkZWZpbmUgRjA5MDBfUDFfVFVOX0JXIDB4ZjRlYjAwM2YKKyNkZWZpbmUgVFVOX0JXIEZMRHgoRjA5MDBfUDFfVFVOX0JXKQogCiAvKlAxX1ROUkFESiovCiAjZGVmaW5lIFIwOTAwX1AxX1ROUkFESiAweGY0ZWMKQEAgLTMyMzQsMTEgKzMyMzgsMTMgQEAKICNkZWZpbmUgRjA5MDBfUDFfVFVOX0kyQ0xPQ0tFRCAweGY0ZjYwMDEwCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9QUk9HRE9ORSAweGY0ZjYwMDBjCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRlJFU1RFMSAweGY0ZjYwMDAzCisjZGVmaW5lIFRVTl9SRlJFU1RFMSBGTER4KEYwOTAwX1AxX1RVTl9SRlJFU1RFMSkKIAogLypQMV9UTlJSRVNURSovCiAjZGVmaW5lIFIwOTAwX1AxX1ROUlJFU1RFIDB4ZjRmNwogI2RlZmluZSBUTlJSRVNURSBSRUd4KFIwOTAwX1AxX1ROUlJFU1RFKQogI2RlZmluZSBGMDkwMF9QMV9UVU5fUkZSRVNURTAgMHhmNGY3MDBmZgorI2RlZmluZSBUVU5fUkZSRVNURTAgRkxEeChGMDkwMF9QMV9UVU5fUkZSRVNURTApCiAKIC8qUDFfU01BUENPRUY3Ki8KICNkZWZpbmUgUjA5MDBfUDFfU01BUENPRUY3IDB4ZjUwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfc3cuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3N3LmMKaW5kZXggYjhkYTg3Zi4uYmEwNzA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfc3cuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9zdy5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAlyZXR1cm4gbG9jazsKIH0KIAotaW50IHN0djA5MDBfc3dfYWxnbyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwKK3N0YXRpYyBpbnQgc3R2MDkwMF9zd19hbGdvKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLAogCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCiB7CiAJaW50CWxvY2sgPSBGQUxTRSwKQEAgLTYwNiw3ICs2MDYsMTIgQEAKIAkJCXR1bmVyX2ZyZXEgLT0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CiAKIAkJaWYgKGludHAtPmNoaXBfaWQgPD0gMHgyMCkgewotCQkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIHR1bmVyX2ZyZXEsIGludHAtPmJ3W2RdKTsKKwkJCWlmIChpbnRwLT50dW5lcl90eXBlW2RdID09IDMpCisJCQkJc3R2MDkwMF9zZXRfdHVuZXJfYXV0byhpbnRwLCB0dW5lcl9mcmVxLAorCQkJCQkJaW50cC0+YndbZF0sIGRlbW9kKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3NldF90dW5lcihmZSwgdHVuZXJfZnJlcSwgaW50cC0+YndbZF0pOworCiAJCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBETURJU1RBVEUsIDB4MWMpOwogCQkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgQ0ZSSU5JVDEsIDApOwogCQkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgQ0ZSSU5JVDAsIDApOwpAQCAtNzkwLDcgKzc5NSw3IEBACiAJcmV0dXJuIHByYXRlOwogfQogCi12b2lkIHN0djA5MDBfc2V0X2R2YnMxX3RyYWNrX2Nhcl9sb29wKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLAorc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfZHZiczFfdHJhY2tfY2FyX2xvb3Aoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsCiAJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QsCiAJCQkJCXUzMiBzcmF0ZSkKIHsKQEAgLTk3Niw4ICs5ODEsMTYgQEAKIAkJCQkJaW50cC0+cm9sbG9mZikgKyAxMDAwMDAwMDsKIAogCQlpZiAoKGludHAtPmNoaXBfaWQgPj0gMHgyMCkgfHwgKGJsaW5kX3R1bl9zdyA9PSAxKSkgewotCQkJaWYgKGludHAtPnNyY2hfYWxnb1tkZW1vZF0gIT0gU1RWMDkwMF9XQVJNX1NUQVJUKQotCQkJCXN0djA5MDBfc2V0X2JhbmR3aWR0aChmZSwgaW50cC0+YndbZGVtb2RdKTsKKwkJCWlmIChpbnRwLT5zcmNoX2FsZ29bZGVtb2RdICE9IFNUVjA5MDBfV0FSTV9TVEFSVCkgeworCQkJCWlmIChpbnRwLT50dW5lcl90eXBlW2RlbW9kXSA9PSAzKQorCQkJCQlzdHYwOTAwX3NldF90dW5lcl9hdXRvKGludHAsCisJCQkJCQkJaW50cC0+ZnJlcVtkZW1vZF0sCisJCQkJCQkJaW50cC0+YndbZGVtb2RdLAorCQkJCQkJCWRlbW9kKTsKKwkJCQllbHNlCisJCQkJCXN0djA5MDBfc2V0X2JhbmR3aWR0aChmZSwKKwkJCQkJCQlpbnRwLT5id1tkZW1vZF0pOworCQkJfQogCQl9CiAKIAkJaWYgKChpbnRwLT5zcmNoX2FsZ29bZGVtb2RdID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB8fApAQCAtMTIwMiw3ICsxMjE1LDExIEBACiAJfQogCiAJcmVzdWx0LT5zdGFuZGFyZCA9IHN0djA5MDBfZ2V0X3N0YW5kYXJkKGZlLCBkKTsKLQlyZXN1bHQtPmZyZXF1ZW5jeSA9IHN0djA5MDBfZ2V0X3R1bmVyX2ZyZXEoZmUpOworCWlmIChpbnRwLT50dW5lcl90eXBlW2RlbW9kXSA9PSAzKQorCQlyZXN1bHQtPmZyZXF1ZW5jeSA9IHN0djA5MDBfZ2V0X2ZyZXFfYXV0byhpbnRwLCBkKTsKKwllbHNlCisJCXJlc3VsdC0+ZnJlcXVlbmN5ID0gc3R2MDkwMF9nZXRfdHVuZXJfZnJlcShmZSk7CisKIAlvZmZzZXRGcmVxID0gc3R2MDkwMF9nZXRfY2Fycl9mcmVxKGludHAsIGludHAtPm1jbGssIGQpIC8gMTAwMDsKIAlyZXN1bHQtPmZyZXF1ZW5jeSArPSBvZmZzZXRGcmVxOwogCXJlc3VsdC0+c3ltYm9sX3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpbnRwLCBpbnRwLT5tY2xrLCBkKTsKQEAgLTEyMTMsNiArMTIzMCw5IEBACiAJcmVzdWx0LT5waWxvdCA9IHN0djA5MDBfZ2V0X2JpdHMoaW50cCwgREVNT0RfVFlQRSkgJiAweDAxOwogCXJlc3VsdC0+ZnJhbWVfbGVuID0gKCh1MzIpc3R2MDkwMF9nZXRfYml0cyhpbnRwLCBERU1PRF9UWVBFKSkgPj4gMTsKIAlyZXN1bHQtPnJvbGxvZmYgPSBzdHYwOTAwX2dldF9iaXRzKGludHAsIFJPTExPRkZfU1RBVFVTKTsKKworCWRwcmludGsoIiVzOiBtb2Rjb2RlPTB4JXggXG4iLCBfX2Z1bmNfXywgcmVzdWx0LT5tb2Rjb2RlKTsKKwogCXN3aXRjaCAocmVzdWx0LT5zdGFuZGFyZCkgewogCWNhc2UgU1RWMDkwMF9EVkJTMl9TVEFOREFSRDoKIAkJcmVzdWx0LT5zcGVjdHJ1bSA9IHN0djA5MDBfZ2V0X2JpdHMoaW50cCwgU1BFQ0lOVl9ERU1PRCk7CkBAIC0xMjM5LDcgKzEyNTksMTEgQEAKIAlpZiAoKGludHAtPnNyY2hfYWxnb1tkXSA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgfHwKIAkJCQkoaW50cC0+c3ltYm9sX3JhdGVbZF0gPCAxMDAwMDAwMCkpIHsKIAkJb2Zmc2V0RnJlcSA9IHJlc3VsdC0+ZnJlcXVlbmN5IC0gaW50cC0+ZnJlcVtkXTsKLQkJaW50cC0+ZnJlcVtkXSA9IHN0djA5MDBfZ2V0X3R1bmVyX2ZyZXEoZmUpOworCQlpZiAoaW50cC0+dHVuZXJfdHlwZVtkZW1vZF0gPT0gMykKKwkJCWludHAtPmZyZXFbZF0gPSBzdHYwOTAwX2dldF9mcmVxX2F1dG8oaW50cCwgZCk7CisJCWVsc2UKKwkJCWludHAtPmZyZXFbZF0gPSBzdHYwOTAwX2dldF90dW5lcl9mcmVxKGZlKTsKKwogCQlpZiAoQUJTKG9mZnNldEZyZXEpIDw9ICgoaW50cC0+c3JjaF9yYW5nZVtkXSAvIDIwMDApICsgNTAwKSkKIAkJCXJhbmdlID0gU1RWMDkwMF9SQU5HRU9LOwogCQllbHNlIGlmIChBQlMob2Zmc2V0RnJlcSkgPD0KQEAgLTE0ODEsNyArMTUwNSwxMiBAQAogCQkJZWxzZQogCQkJCXR1bmVyX2ZyZXEgLT0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CiAKLQkJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCB0dW5lcl9mcmVxLCBpbnRwLT5id1tkZW1vZF0pOworCQkJaWYgKGludHAtPnR1bmVyX3R5cGVbZGVtb2RdID09IDMpCisJCQkJc3R2MDkwMF9zZXRfdHVuZXJfYXV0byhpbnRwLCB0dW5lcl9mcmVxLAorCQkJCQkJaW50cC0+YndbZGVtb2RdLCBkZW1vZCk7CisJCQllbHNlCisJCQkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIHR1bmVyX2ZyZXEsCisJCQkJCQlpbnRwLT5id1tkZW1vZF0pOwogCQl9CiAJfQogCkBAIC0xNjA4LDcgKzE2MzcsOCBAQAogCiAJYWdjMl9pbnQgPSBzdHYwOTAwX2JsaW5kX2NoZWNrX2FnYzJfbWluX2xldmVsKGludHAsIGRlbW9kKTsKIAotCWlmIChhZ2MyX2ludCA+IFNUVjA5MDBfQkxJTkRfU0VBUkNIX0FHQzJfVEgpCisJZHByaW50aygiJXMgYWdjMl9pbnQ9JWQgYWdjMl90aD0lZCBcbiIsIF9fZnVuY19fLCBhZ2MyX2ludCwgYWdjMl90aCk7CisJaWYgKGFnYzJfaW50ID4gYWdjMl90aCkKIAkJcmV0dXJuIEZBTFNFOwogCiAJaWYgKGludHAtPmNoaXBfaWQgPT0gMHgxMCkKQEAgLTE4NzUsNyArMTkwNSwxMSBAQAogCiAJfQogCi0Jc3R2MDkwMF9zZXRfdHVuZXIoZmUsIGludHAtPmZyZXFbZGVtb2RdLCBpbnRwLT5id1tkZW1vZF0pOworCWlmIChpbnRwLT50dW5lcl90eXBlW2RlbW9kXSA9PSAzKQorCQlzdHYwOTAwX3NldF90dW5lcl9hdXRvKGludHAsIGludHAtPmZyZXFbZGVtb2RdLAorCQkJCWludHAtPmJ3W2RlbW9kXSwgZGVtb2QpOworCWVsc2UKKwkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIGludHAtPmZyZXFbZGVtb2RdLCBpbnRwLT5id1tkZW1vZF0pOwogCiAJYWdjMV9wb3dlciA9IE1BS0VXT1JEKHN0djA5MDBfZ2V0X2JpdHMoaW50cCwgQUdDSVFfVkFMVUUxKSwKIAkJCQlzdHYwOTAwX2dldF9iaXRzKGludHAsIEFHQ0lRX1ZBTFVFMCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmMKaW5kZXggMTU3MzQ2Ni4uYzUyYzMzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5jCkBAIC0zNyw3ICszNyw4MiBAQAogc3RhdGljIHVuc2lnbmVkIGludCB2ZXJib3NlOwogbW9kdWxlX3BhcmFtKHZlcmJvc2UsIGludCwgMDY0NCk7CiAKLXN0cnVjdCBtdXRleCBkZW1vZF9sb2NrOworLyogaW50ZXJuYWwgcGFyYW1zIG5vZGUgKi8KK3N0cnVjdCBzdHYwOTB4X2RldiB7CisJLyogcG9pbnRlciBmb3IgaW50ZXJuYWwgcGFyYW1zLCBvbmUgZm9yIGVhY2ggcGFpciBvZiBkZW1vZHMgKi8KKwlzdHJ1Y3Qgc3R2MDkweF9pbnRlcm5hbAkJKmludGVybmFsOworCXN0cnVjdCBzdHYwOTB4X2RldgkJKm5leHRfZGV2OworfTsKKworLyogZmlyc3QgaW50ZXJuYWwgcGFyYW1zICovCitzdGF0aWMgc3RydWN0IHN0djA5MHhfZGV2ICpzdHYwOTB4X2ZpcnN0X2RldjsKKworLyogZmluZCBjaGlwIGJ5IGkyYyBhZGFwdGVyIGFuZCBpMmMgYWRkcmVzcyAqLworc3RhdGljIHN0cnVjdCBzdHYwOTB4X2RldiAqZmluZF9kZXYoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCQkJdTggaTJjX2FkZHIpCit7CisJc3RydWN0IHN0djA5MHhfZGV2ICp0ZW1wX2RldiA9IHN0djA5MHhfZmlyc3RfZGV2OworCisJLyoKKwkgU2VhcmNoIG9mIHRoZSBsYXN0IHN0djA5MDAgY2hpcCBvcgorCSBmaW5kIGl0IGJ5IGkyYyBhZGFwdGVyIGFuZCBpMmMgYWRkcmVzcyAqLworCXdoaWxlICgodGVtcF9kZXYgIT0gTlVMTCkgJiYKKwkJKCh0ZW1wX2Rldi0+aW50ZXJuYWwtPmkyY19hZGFwICE9IGkyY19hZGFwKSB8fAorCQkodGVtcF9kZXYtPmludGVybmFsLT5pMmNfYWRkciAhPSBpMmNfYWRkcikpKSB7CisKKwkJdGVtcF9kZXYgPSB0ZW1wX2Rldi0+bmV4dF9kZXY7CisJfQorCisJcmV0dXJuIHRlbXBfZGV2OworfQorCisvKiBkZWFsbG9jYXRpbmcgY2hpcCAqLworc3RhdGljIHZvaWQgcmVtb3ZlX2RldihzdHJ1Y3Qgc3R2MDkweF9pbnRlcm5hbCAqaW50ZXJuYWwpCit7CisJc3RydWN0IHN0djA5MHhfZGV2ICpwcmV2X2RldiA9IHN0djA5MHhfZmlyc3RfZGV2OworCXN0cnVjdCBzdHYwOTB4X2RldiAqZGVsX2RldiA9IGZpbmRfZGV2KGludGVybmFsLT5pMmNfYWRhcCwKKwkJCQkJCWludGVybmFsLT5pMmNfYWRkcik7CisKKwlpZiAoZGVsX2RldiAhPSBOVUxMKSB7CisJCWlmIChkZWxfZGV2ID09IHN0djA5MHhfZmlyc3RfZGV2KSB7CisJCQlzdHYwOTB4X2ZpcnN0X2RldiA9IGRlbF9kZXYtPm5leHRfZGV2OworCQl9IGVsc2UgeworCQkJd2hpbGUgKHByZXZfZGV2LT5uZXh0X2RldiAhPSBkZWxfZGV2KQorCQkJCXByZXZfZGV2ID0gcHJldl9kZXYtPm5leHRfZGV2OworCisJCQlwcmV2X2Rldi0+bmV4dF9kZXYgPSBkZWxfZGV2LT5uZXh0X2RldjsKKwkJfQorCisJCWtmcmVlKGRlbF9kZXYpOworCX0KK30KKworLyogYWxsb2NhdGluZyBuZXcgY2hpcCAqLworc3RhdGljIHN0cnVjdCBzdHYwOTB4X2RldiAqYXBwZW5kX2ludGVybmFsKHN0cnVjdCBzdHYwOTB4X2ludGVybmFsICppbnRlcm5hbCkKK3sKKwlzdHJ1Y3Qgc3R2MDkweF9kZXYgKm5ld19kZXY7CisJc3RydWN0IHN0djA5MHhfZGV2ICp0ZW1wX2RldjsKKworCW5ld19kZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2MDkweF9kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAobmV3X2RldiAhPSBOVUxMKSB7CisJCW5ld19kZXYtPmludGVybmFsID0gaW50ZXJuYWw7CisJCW5ld19kZXYtPm5leHRfZGV2ID0gTlVMTDsKKworCQkvKiBhcHBlbmQgdG8gbGlzdCAqLworCQlpZiAoc3R2MDkweF9maXJzdF9kZXYgPT0gTlVMTCkgeworCQkJc3R2MDkweF9maXJzdF9kZXYgPSBuZXdfZGV2OworCQl9IGVsc2UgeworCQkJdGVtcF9kZXYgPSBzdHYwOTB4X2ZpcnN0X2RldjsKKwkJCXdoaWxlICh0ZW1wX2Rldi0+bmV4dF9kZXYgIT0gTlVMTCkKKwkJCQl0ZW1wX2RldiA9IHRlbXBfZGV2LT5uZXh0X2RldjsKKworCQkJdGVtcF9kZXYtPm5leHRfZGV2ID0gbmV3X2RldjsKKwkJfQorCX0KKworCXJldHVybiBuZXdfZGV2OworfQorCiAKIC8qIERWQlMxIGFuZCBEU1MgQy9OIExvb2t1cCB0YWJsZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdHYwOTB4X3RhYiBzdHYwOTB4X3MxY25fdGFiW10gPSB7CkBAIC02ODMsNiArNzU4LDkgQEAKIAlzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1MzIgcmVnOwogCisJaWYgKGVuYWJsZSkKKwkJbXV0ZXhfbG9jaygmc3RhdGUtPmludGVybmFsLT50dW5lcl9sb2NrKTsKKwogCXJlZyA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgSTJDUlBUKTsKIAlpZiAoZW5hYmxlKSB7CiAJCWRwcmludGsoRkVfREVCVUcsIDEsICJFbmFibGUgR2F0ZSIpOwpAQCAtNjk2LDkgKzc3NCwxNCBAQAogCQlpZiAoKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEkyQ1JQVCwgcmVnKSkgPCAwKQogCQkJZ290byBlcnI7CiAJfQorCisJaWYgKCFlbmFibGUpCisJCW11dGV4X3VubG9jaygmc3RhdGUtPmludGVybmFsLT50dW5lcl9sb2NrKTsKKwogCXJldHVybiAwOwogZXJyOgogCWRwcmludGsoRkVfRVJST1IsIDEsICJJL08gZXJyb3IiKTsKKwltdXRleF91bmxvY2soJnN0YXRlLT5pbnRlcm5hbC0+dHVuZXJfbG9jayk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC03NTUsMTMgKzgzOCwxMyBAQAogCiAJaWYgKHNyYXRlID4gNjAwMDAwMDApIHsKIAkJc3ltICA9IChzcmF0ZSA8PCA0KTsgLyogU1IgKiAyXjE2IC8gbWFzdGVyX2NsayAqLwotCQlzeW0gLz0gKHN0YXRlLT5tY2xrID4+IDEyKTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gMTIpOwogCX0gZWxzZSBpZiAoc3JhdGUgPiA2MDAwMDAwKSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgNik7Ci0JCXN5bSAvPSAoc3RhdGUtPm1jbGsgPj4gMTApOworCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayA+PiAxMCk7CiAJfSBlbHNlIHsKIAkJc3ltICA9IChzcmF0ZSA8PCA5KTsKLQkJc3ltIC89IChzdGF0ZS0+bWNsayA+PiA3KTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gNyk7CiAJfQogCiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUklOSVQxLCAoc3ltID4+IDgpICYgMHg3ZikgPCAwKSAvKiBNU0IgKi8KQEAgLTc4MiwxMyArODY1LDEzIEBACiAJc3JhdGUgPSAxMDUgKiAoc3JhdGUgLyAxMDApOwogCWlmIChzcmF0ZSA+IDYwMDAwMDAwKSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgNCk7IC8qIFNSICogMl4xNiAvIG1hc3Rlcl9jbGsgKi8KLQkJc3ltIC89IChzdGF0ZS0+bWNsayA+PiAxMik7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDEyKTsKIAl9IGVsc2UgaWYgKHNyYXRlID4gNjAwMDAwMCkgewogCQlzeW0gID0gKHNyYXRlIDw8IDYpOwotCQlzeW0gLz0gKHN0YXRlLT5tY2xrID4+IDEwKTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gMTApOwogCX0gZWxzZSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgOSk7Ci0JCXN5bSAvPSAoc3RhdGUtPm1jbGsgPj4gNyk7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDcpOwogCX0KIAogCWlmIChzeW0gPCAweDdmZmYpIHsKQEAgLTgxNiwxMyArODk5LDEzIEBACiAJc3JhdGUgPSA5NSAqIChzcmF0ZSAvIDEwMCk7CiAJaWYgKHNyYXRlID4gNjAwMDAwMDApIHsKIAkJc3ltICA9IChzcmF0ZSA8PCA0KTsgLyogU1IgKiAyXjE2IC8gbWFzdGVyX2NsayAqLwotCQlzeW0gLz0gKHN0YXRlLT5tY2xrID4+IDEyKTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gMTIpOwogCX0gZWxzZSBpZiAoc3JhdGUgPiA2MDAwMDAwKSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgNik7Ci0JCXN5bSAvPSAoc3RhdGUtPm1jbGsgPj4gMTApOworCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayA+PiAxMCk7CiAJfSBlbHNlIHsKIAkJc3ltICA9IChzcmF0ZSA8PCA5KTsKLQkJc3ltIC89IChzdGF0ZS0+bWNsayA+PiA3KTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gNyk7CiAJfQogCiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUkxPVzEsICgoc3ltID4+IDgpICYgMHg3ZikpIDwgMCkgLyogTVNCICovCkBAIC0xMTAzLDIxICsxMTg2LDIxIEBACiAKIAlzd2l0Y2ggKHN0YXRlLT5kZW1vZCkgewogCWNhc2UgU1RWMDkweF9ERU1PRFVMQVRPUl8wOgotCQltdXRleF9sb2NrKCZkZW1vZF9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmc3RhdGUtPmludGVybmFsLT5kZW1vZF9sb2NrKTsKIAkJcmVnID0gc3R2MDkweF9yZWFkX3JlZyhzdGF0ZSwgU1RWMDkweF9TVE9QQ0xLMik7CiAJCVNUVjA5MHhfU0VURklFTEQocmVnLCBTVE9QX0NMS1ZJVDFfRklFTEQsIGVuYWJsZSk7CiAJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9TVE9QQ0xLMiwgcmVnKSA8IDApCiAJCQlnb3RvIGVycjsKLQkJbXV0ZXhfdW5sb2NrKCZkZW1vZF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+aW50ZXJuYWwtPmRlbW9kX2xvY2spOwogCQlicmVhazsKIAogCWNhc2UgU1RWMDkweF9ERU1PRFVMQVRPUl8xOgotCQltdXRleF9sb2NrKCZkZW1vZF9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmc3RhdGUtPmludGVybmFsLT5kZW1vZF9sb2NrKTsKIAkJcmVnID0gc3R2MDkweF9yZWFkX3JlZyhzdGF0ZSwgU1RWMDkweF9TVE9QQ0xLMik7CiAJCVNUVjA5MHhfU0VURklFTEQocmVnLCBTVE9QX0NMS1ZJVDJfRklFTEQsIGVuYWJsZSk7CiAJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9TVE9QQ0xLMiwgcmVnKSA8IDApCiAJCQlnb3RvIGVycjsKLQkJbXV0ZXhfdW5sb2NrKCZkZW1vZF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+aW50ZXJuYWwtPmRlbW9kX2xvY2spOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xMTI2LDE0ICsxMjA5LDE0IEBACiAJfQogCXJldHVybiAwOwogZXJyOgotCW11dGV4X3VubG9jaygmZGVtb2RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+aW50ZXJuYWwtPmRlbW9kX2xvY2spOwogCWRwcmludGsoRkVfRVJST1IsIDEsICJJL08gZXJyb3IiKTsKIAlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbnQgc3R2MDkweF9kdmJzX3RyYWNrX2NybChzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSAqc3RhdGUpCiB7Ci0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MzApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MzApIHsKIAkJLyogU2V0IEFDTEMgQkNMQyBvcHRpbWlzZWQgdmFsdWUgdnMgU1IgKi8KIAkJaWYgKHN0YXRlLT5zcmF0ZSA+PSAxNTAwMDAwMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEFDTEMsIDB4MmIpIDwgMCkKQEAgLTEyMTUsNyArMTI5OCw3IEBACiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBCQ0xDLCAweDA5KSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPD0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJCS8qIGVuYWJsZSBTMiBjYXJyaWVyIGxvb3AgKi8KIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVIyQ0ZHLCAweDI2KSA8IDApCiAJCQkJZ290byBlcnI7CkBAIC0xMjQ2LDYgKzEzMjksMTAgQEAKIAlkZWZhdWx0OgogCQkvKiBlbmFibGUgRFZCLVMyIGFuZCBEVkItUzIgaW4gQXV0byBNT0RFICovCiAJCXJlZyA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgRE1EQ0ZHTUQpOworCQlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgRFZCUzFfRU5BQkxFX0ZJRUxELCAwKTsKKwkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIERWQlMyX0VOQUJMRV9GSUVMRCwgMCk7CisJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBETURDRkdNRCwgcmVnKSA8IDApCisJCQlnb3RvIGVycjsKIAkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIERWQlMxX0VOQUJMRV9GSUVMRCwgMSk7CiAJCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBEVkJTMl9FTkFCTEVfRklFTEQsIDEpOwogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRE1EQ0ZHTUQsIHJlZykgPCAwKQpAQCAtMTI1Nyw3ICsxMzQ0LDcgQEAKIAkJaWYgKHN0djA5MHhfZHZic190cmFja19jcmwoc3RhdGUpIDwgMCkKIAkJCWdvdG8gZXJyOwogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA8PSAweDIwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPD0gMHgyMCkgewogCQkJLyogZW5hYmxlIFMyIGNhcnJpZXIgbG9vcCAqLwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUjJDRkcsIDB4MjYpIDwgMCkKIAkJCQlnb3RvIGVycjsKQEAgLTEzMDQsNyArMTM5MSw3IEBACiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIERNRElTVEFURSwgcmVnKSA8IDApCiAJCWdvdG8gZXJyOwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyIDw9IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJaWYgKHN0YXRlLT5zcmF0ZSA8PSA1MDAwMDAwKSB7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSQ0ZHLCAweDQ0KSA8IDApCiAJCQkJZ290byBlcnI7CkBAIC0xMzQ4LDcgKzE0MzUsNyBAQAogCQkJICogQ0ZSIG1heCA9ICsxTUh6CiAJCQkgKi8KIAkJCWZyZXFfYWJzICA9IDEwMDAgPDwgMTY7Ci0JCQlmcmVxX2FicyAvPSAoc3RhdGUtPm1jbGsgLyAxMDAwKTsKKwkJCWZyZXFfYWJzIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwKTsKIAkJCWZyZXEgICAgICA9IChzMTYpIGZyZXFfYWJzOwogCQl9IGVsc2UgewogCQkJLyogQ09MRCBTdGFydApAQCAtMTM1OCw3ICsxNDQ1LDcgQEAKIAkJCSAqLwogCQkJZnJlcV9hYnMgID0gKHN0YXRlLT5zZWFyY2hfcmFuZ2UgLyAyMDAwKSArIDYwMDsKIAkJCWZyZXFfYWJzICA9IGZyZXFfYWJzIDw8IDE2OwotCQkJZnJlcV9hYnMgLz0gKHN0YXRlLT5tY2xrIC8gMTAwMCk7CisJCQlmcmVxX2FicyAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwMCk7CiAJCQlmcmVxICAgICAgPSAoczE2KSBmcmVxX2FiczsKIAkJfQogCkBAIC0xMzgxLDcgKzE0NjgsNyBAQAogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDRlJJTklUMCwgMCkgPCAwKQogCQlnb3RvIGVycjsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBFUVVBTENGRywgMHg0MSkgPCAwKQogCQkJZ290byBlcnI7CiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBGRkVDRkcsIDB4NDEpIDwgMCkKQEAgLTE0MTgsMTAgKzE1MDUsMTAgQEAKIAlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgUlRDLCAweDg4KSA8IDApCiAJCWdvdG8gZXJyOwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJLypGcmVxdWVuY3kgb2Zmc2V0IGRldGVjdG9yIHNldHRpbmcqLwogCQlpZiAoc3RhdGUtPnNyYXRlIDwgMjAwMDAwMCkgewotCQkJaWYgKHN0YXRlLT5kZXZfdmVyIDw9IDB4MjApIHsKKwkJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPD0gMHgyMCkgewogCQkJCS8qIEN1dCAyICovCiAJCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkZSRVEsIDB4MzkpIDwgMCkKIAkJCQkJZ290byBlcnI7CkBAIC0xNTEyLDcgKzE1OTksNyBAQAogCQlzdGVwcyA9IDE7CiAKIAlkaXIgPSAxOwotCWZyZXFfc3RlcCA9ICgxMDAwMDAwICogMjU2KSAvIChzdGF0ZS0+bWNsayAvIDI1Nik7CisJZnJlcV9zdGVwID0gKDEwMDAwMDAgKiAyNTYpIC8gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDI1Nik7CiAJZnJlcV9pbml0ID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBzdGVwczsgaSsrKSB7CkBAIC0xNTgzLDcgKzE2NzAsNyBAQAogCXUzMiBzcmF0ZV9jb2Fyc2UgPSAwLCBhZ2MyID0gMCwgY2FyX3N0ZXAgPSAxMjAwLCByZWc7CiAJdTMyIGFnYzJ0aDsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDMwKQorCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgzMCkKIAkJYWdjMnRoID0gMHgyZTAwOwogCWVsc2UKIAkJYWdjMnRoID0gMHgxZjAwOwpAQCAtMTYxOSwxMyArMTcwNiwxMyBAQAogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBBR0MyUkVGLCAweDUwKSA8IDApCiAJCWdvdG8gZXJyOwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MzApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MzApIHsKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkZSRVEsIDB4OTkpIDwgMCkKIAkJCWdvdG8gZXJyOwogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSU1RFUCwgMHg5OCkgPCAwKQogCQkJZ290byBlcnI7CiAKLQl9IGVsc2UgaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwl9IGVsc2UgaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDZhKSA8IDApCiAJCQlnb3RvIGVycjsKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUlNURVAsIDB4OTUpIDwgMCkKQEAgLTE2NzcsNyArMTc2NCw3IEBACiAJCQkJU1RWMDkweF9SRUFEX0RFTU9EKHN0YXRlLCBBR0MySTApOwogCQl9CiAJCWFnYzIgLz0gMTA7Ci0JCXNyYXRlX2NvYXJzZSA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+bWNsayk7CisJCXNyYXRlX2NvYXJzZSA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGspOwogCQljdXJfc3RlcCsrOwogCQlkaXIgKj0gLTE7CiAJCWlmICgodG1nX2NwdCA+PSA1KSAmJiAoYWdjMiA8IGFnYzJ0aCkgJiYKQEAgLTE2OTUsMTIgKzE3ODIsMTIgQEAKIAogCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3kpIHsKIAkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2ZyZXF1ZW5jeShmZSwgZnJlcSkgPCAwKQotCQkJCQlnb3RvIGVycjsKKwkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCX0KIAogCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYW5kd2lkdGgpIHsKIAkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JhbmR3aWR0aChmZSwgc3RhdGUtPnR1bmVyX2J3KSA8IDApCi0JCQkJCWdvdG8gZXJyOworCQkJCQlnb3RvIGVycl9nYXRlb2ZmOwogCQkJfQogCiAJCQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCkBAIC0xNzEzLDcgKzE4MDAsNyBAQAogCiAJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X3N0YXR1cykgewogCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfc3RhdHVzKGZlLCAmcmVnKSA8IDApCi0JCQkJCWdvdG8gZXJyOworCQkJCQlnb3RvIGVycl9nYXRlb2ZmOwogCQkJfQogCiAJCQlpZiAocmVnKQpAQCAtMTcyOSw5ICsxODE2LDEyIEBACiAJaWYgKCF0bWdfbG9jaykKIAkJc3JhdGVfY29hcnNlID0gMDsKIAllbHNlCi0JCXNyYXRlX2NvYXJzZSA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+bWNsayk7CisJCXNyYXRlX2NvYXJzZSA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGspOwogCiAJcmV0dXJuIHNyYXRlX2NvYXJzZTsKKworZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtMTc0MSw3ICsxODMxLDcgQEAKIHsKIAl1MzIgc3JhdGVfY29hcnNlLCBmcmVxX2NvYXJzZSwgc3ltLCByZWc7CiAKLQlzcmF0ZV9jb2Fyc2UgPSBzdHYwOTB4X2dldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPm1jbGspOworCXNyYXRlX2NvYXJzZSA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGspOwogCWZyZXFfY29hcnNlICA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQ0ZSMikgPDwgODsKIAlmcmVxX2NvYXJzZSB8PSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIENGUjEpOwogCXN5bSA9IDEzICogKHNyYXRlX2NvYXJzZSAvIDEwKTsgLyogU0ZSVVAgPSBTRlIgKyAzMCUgKi8KQEAgLTE3NjcsMTAgKzE4NTcsMTAgQEAKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEFHQzJSRUYsIDB4MzgpIDwgMCkKIAkJCWdvdG8gZXJyOwogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDMwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgzMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkZSRVEsIDB4NzkpIDwgMCkKIAkJCQlnb3RvIGVycjsKLQkJfSBlbHNlIGlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJCX0gZWxzZSBpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDQ5KSA8IDApCiAJCQkJZ290byBlcnI7CiAJCX0KQEAgLTE3NzgsMjAgKzE4NjgsMjAgQEAKIAkJaWYgKHNyYXRlX2NvYXJzZSA+IDMwMDAwMDApIHsKIAkJCXN5bSAgPSAxMyAqIChzcmF0ZV9jb2Fyc2UgLyAxMCk7IC8qIFNGUlVQID0gU0ZSICsgMzAlICovCiAJCQlzeW0gID0gKHN5bSAvIDEwMDApICogNjU1MzY7Ci0JCQlzeW0gLz0gKHN0YXRlLT5tY2xrIC8gMTAwMCk7CisJCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMDApOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUlVQMSwgKHN5bSA+PiA4KSAmIDB4N2YpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJVUDAsIHN5bSAmIDB4ZmYpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCXN5bSAgPSAxMCAqIChzcmF0ZV9jb2Fyc2UgLyAxMyk7IC8qIFNGUkxPVyA9IFNGUiAtIDMwJSAqLwogCQkJc3ltICA9IChzeW0gLyAxMDAwKSAqIDY1NTM2OwotCQkJc3ltIC89IChzdGF0ZS0+bWNsayAvIDEwMDApOworCQkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwKTsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJMT1cxLCAoc3ltID4+IDgpICYgMHg3ZikgPCAwKQogCQkJCWdvdG8gZXJyOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUkxPVzAsIHN5bSAmIDB4ZmYpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCXN5bSAgPSAoc3JhdGVfY29hcnNlIC8gMTAwMCkgKiA2NTUzNjsKLQkJCXN5bSAvPSAoc3RhdGUtPm1jbGsgLyAxMDAwKTsKKwkJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwMCk7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSSU5JVDEsIChzeW0gPj4gOCkgJiAweGZmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSSU5JVDAsIHN5bSAmIDB4ZmYpIDwgMCkKQEAgLTE3OTksMjAgKzE4ODksMjAgQEAKIAkJfSBlbHNlIHsKIAkJCXN5bSAgPSAxMyAqIChzcmF0ZV9jb2Fyc2UgLyAxMCk7IC8qIFNGUlVQID0gU0ZSICsgMzAlICovCiAJCQlzeW0gID0gKHN5bSAvIDEwMCkgKiA2NTUzNjsKLQkJCXN5bSAvPSAoc3RhdGUtPm1jbGsgLyAxMDApOworCQkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDApOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUlVQMSwgKHN5bSA+PiA4KSAmIDB4N2YpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJVUDAsIHN5bSAmIDB4ZmYpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCXN5bSAgPSAxMCAqIChzcmF0ZV9jb2Fyc2UgLyAxNCk7IC8qIFNGUkxPVyA9IFNGUiAtIDMwJSAqLwogCQkJc3ltICA9IChzeW0gLyAxMDApICogNjU1MzY7Ci0JCQlzeW0gLz0gKHN0YXRlLT5tY2xrIC8gMTAwKTsKKwkJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwKTsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJMT1cxLCAoc3ltID4+IDgpICYgMHg3ZikgPCAwKQogCQkJCWdvdG8gZXJyOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUkxPVzAsIHN5bSAmIDB4ZmYpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCXN5bSAgPSAoc3JhdGVfY29hcnNlIC8gMTAwKSAqIDY1NTM2OwotCQkJc3ltIC89IChzdGF0ZS0+bWNsayAvIDEwMCk7CisJCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMCk7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSSU5JVDEsIChzeW0gPj4gOCkgJiAweGZmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSSU5JVDAsIHN5bSAmIDB4ZmYpIDwgMCkKQEAgLTE4NzQsMTggKzE5NjQsMTkgQEAKIAl1MzIgYWdjMiwgcmVnLCBzcmF0ZV9jb2Fyc2U7CiAJczMyIGNwdF9mYWlsLCBhZ2MyX292Zmx3LCBpOwogCXU4IGtfcmVmLCBrX21heCwga19taW47Ci0JaW50IGNvYXJzZV9mYWlsLCBsb2NrOworCWludCBjb2Fyc2VfZmFpbCA9IDA7CisJaW50IGxvY2s7CiAKIAlrX21heCA9IDExMDsKIAlrX21pbiA9IDEwOwogCiAJYWdjMiA9IHN0djA5MHhfZ2V0X2FnYzJfbWluX2xldmVsKHN0YXRlKTsKIAotCWlmIChhZ2MyID4gU1RWMDkweF9TRUFSQ0hfQUdDMl9USChzdGF0ZS0+ZGV2X3ZlcikpIHsKKwlpZiAoYWdjMiA+IFNUVjA5MHhfU0VBUkNIX0FHQzJfVEgoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyKSkgewogCQlsb2NrID0gMDsKIAl9IGVsc2UgewogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA8PSAweDIwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPD0gMHgyMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkNGRywgMHhjNCkgPCAwKQogCQkJCWdvdG8gZXJyOwogCQl9IGVsc2UgewpAQCAtMTg5Nyw3ICsxOTg4LDcgQEAKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFJUQ1MyLCAweDQ0KSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBFUVVBTENGRywgMHg0MSkgPCAwKQogCQkJCWdvdG8gZXJyOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEZGRUNGRywgMHg0MSkgPCAwKQpAQCAtMTk1Niw3ICsyMDQ3LDcgQEAKIAl1MzIgcmVnOwogCXMzMiB0bWdfY3B0ID0gMCwgaTsKIAl1OCBmcmVxLCB0bWdfdGhoLCB0bWdfdGhsOwotCWludCB0bWdfbG9jazsKKwlpbnQgdG1nX2xvY2sgPSAwOwogCiAJZnJlcSA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQ0FSRlJFUSk7CiAJdG1nX3RoaCA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgVE1HVEhSSVNFKTsKQEAgLTIwODAsMTIgKzIxNzEsMTIgQEAKIAogCQkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2ZyZXF1ZW5jeSkgewogCQkJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3koZmUsIGZyZXEpIDwgMCkKLQkJCQkJCQlnb3RvIGVycjsKKwkJCQkJCQlnb3RvIGVycl9nYXRlb2ZmOwogCQkJCQl9CiAKIAkJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYW5kd2lkdGgpIHsKIAkJCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmFuZHdpZHRoKGZlLCBzdGF0ZS0+dHVuZXJfYncpIDwgMCkKLQkJCQkJCQlnb3RvIGVycjsKKwkJCQkJCQlnb3RvIGVycl9nYXRlb2ZmOwogCQkJCQl9CiAKIAkJCQkJaWYgKHN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCkgPCAwKQpAQCAtMjA5OCw3ICsyMTg5LDcgQEAKIAogCQkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X3N0YXR1cykgewogCQkJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9zdGF0dXMoZmUsICZyZWcpIDwgMCkKLQkJCQkJCQlnb3RvIGVycjsKKwkJCQkJCQlnb3RvIGVycl9nYXRlb2ZmOwogCQkJCQl9CiAKIAkJCQkJaWYgKHJlZykKQEAgLTIxMjksNiArMjIyMCw4IEBACiAKIAlyZXR1cm4gbG9jazsKIAorZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtMjE0MiwxMyArMjIzNSwxMyBAQAogCWNhcl9tYXggPSBzdGF0ZS0+c2VhcmNoX3JhbmdlIC8gMTAwMDsKIAljYXJfbWF4ICs9IGNhcl9tYXggLyAxMDsKIAljYXJfbWF4ICA9IDY1NTM2ICogKGNhcl9tYXggLyAyKTsKLQljYXJfbWF4IC89IChzdGF0ZS0+bWNsayAvIDEwMDApOworCWNhcl9tYXggLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMDApOwogCiAJaWYgKGNhcl9tYXggPiAweDQwMDApCiAJCWNhcl9tYXggPSAweDQwMDAgOyAvKiBtYXhjYXJyaWVyIHNob3VsZCBiZTw9ICstMS80IE1jbGsgKi8KIAogCWluYyAgPSBzcmF0ZTsKLQlpbmMgLz0gc3RhdGUtPm1jbGsgLyAxMDAwOworCWluYyAvPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwOwogCWluYyAqPSAyNTY7CiAJaW5jICo9IDI1NjsKIAlpbmMgLz0gMTAwMDsKQEAgLTIyMDksNyArMjMwMiw3IEBACiAKIAljYXJfbWF4ICs9IChjYXJfbWF4IC8gMTApOyAvKiAxMCUgbWFyZ2luICovCiAJY2FyX21heCAgPSAoNjU1MzYgKiBjYXJfbWF4IC8gMik7Ci0JY2FyX21heCAvPSBzdGF0ZS0+bWNsayAvIDEwMDA7CisJY2FyX21heCAvPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwOwogCiAJaWYgKGNhcl9tYXggPiAweDQwMDApCiAJCWNhcl9tYXggPSAweDQwMDA7CkBAIC0yMjM0LDcgKzIzMjcsNyBAQAogCWNhcl9tYXggID0gc3RhdGUtPnNlYXJjaF9yYW5nZSAvIDEwMDA7CiAJY2FyX21heCArPSAoY2FyX21heCAvIDEwKTsKIAljYXJfbWF4ICA9ICg2NTUzNiAqIGNhcl9tYXggLyAyKTsKLQljYXJfbWF4IC89IChzdGF0ZS0+bWNsayAvIDEwMDApOworCWNhcl9tYXggLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMDApOwogCWlmIChjYXJfbWF4ID4gMHg0MDAwKQogCQljYXJfbWF4ID0gMHg0MDAwOwogCkBAIC0yMzA0LDcgKzIzOTcsNyBAQAogCWNhc2UgU1RWMDkweF9TRUFSQ0hfRFZCUzE6CiAJY2FzZSBTVFYwOTB4X1NFQVJDSF9EU1M6CiAJCS8qIGFjY2VsZXJhdGUgdGhlIGZyZXF1ZW5jeSBkZXRlY3RvciAqLwotCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDNCKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCX0KQEAgLTIzMTUsNyArMjQwOCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTVFYwOTB4X1NFQVJDSF9EVkJTMjoKLQkJaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ09SUkVMQUJTLCAweDc5KSA8IDApCiAJCQkJZ290byBlcnI7CiAJCX0KQEAgLTIzMjgsNyArMjQyMSw3IEBACiAJY2FzZSBTVFYwOTB4X1NFQVJDSF9BVVRPOgogCWRlZmF1bHQ6CiAJCS8qIGFjY2VsZXJhdGUgdGhlIGZyZXF1ZW5jeSBkZXRlY3RvciAqLwotCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDNiKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ09SUkVMQUJTLCAweDc5KSA8IDApCkBAIC0yMzUwLDcgKzI0NDMsNyBAQAogCQkvKnJ1biB0aGUgU1cgc2VhcmNoIDIgdGltZXMgbWF4aW11bSovCiAJCWlmIChsb2NrIHx8IG5vX3NpZ25hbCB8fCAodHJpYWxzID09IDIpKSB7CiAJCQkvKkNoZWNrIGlmIHRoZSBkZW1vZCBpcyBub3QgbG9zaW5nIGxvY2sgaW4gRFZCUzIqLwotCQkJaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwkJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDQ5KSA8IDApCiAJCQkJCWdvdG8gZXJyOwogCQkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDT1JSRUxBQlMsIDB4OWUpIDwgMCkKQEAgLTIzNzIsNyArMjQ2NSw3IEBACiAJCQkJCS8qRkFMU0UgbG9jaywgVGhlIGRlbW9kIGlzIGxvb3NpbmcgbG9jayAqLwogCQkJCQlsb2NrID0gMDsKIAkJCQkJaWYgKHRyaWFscyA8IDIpIHsKLQkJCQkJCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJCQkJCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCQkJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ09SUkVMQUJTLCAweDc5KSA8IDApCiAJCQkJCQkJCWdvdG8gZXJyOwogCQkJCQkJfQpAQCAtMjQyMiwxMSArMjUxNSwxMSBAQAogCWRlcm90IHw9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQ0ZSMCk7CiAKIAlkZXJvdCA9IGNvbXAyKGRlcm90LCAyNCk7Ci0JaW50XzEgPSBzdGF0ZS0+bWNsayA+PiAxMjsKKwlpbnRfMSA9IG1jbGsgPj4gMTI7CiAJaW50XzIgPSBkZXJvdCA+PiAxMjsKIAogCS8qIGNhcnJpZXJfZnJlcXVlbmN5ID0gTWFzdGVyQ2xvY2sgKiBSZWcgLyAyXjI0ICovCi0JdG1wXzEgPSBzdGF0ZS0+bWNsayAlIDB4MTAwMDsKKwl0bXBfMSA9IG1jbGsgJSAweDEwMDA7CiAJdG1wXzIgPSBkZXJvdCAlIDB4MTAwMDsKIAogCWRlcm90ID0gKGludF8xICogaW50XzIpICsKQEAgLTI1MDIsMTMgKzI1OTUsMTMgQEAKIAogCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfZnJlcXVlbmN5KSB7CiAJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfZnJlcXVlbmN5KGZlLCAmc3RhdGUtPmZyZXF1ZW5jeSkgPCAwKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGVycl9nYXRlb2ZmOwogCX0KIAogCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKIAkJZ290byBlcnI7CiAKLQlvZmZzdF9mcmVxID0gc3R2MDkweF9nZXRfY2FyX2ZyZXEoc3RhdGUsIHN0YXRlLT5tY2xrKSAvIDEwMDA7CisJb2Zmc3RfZnJlcSA9IHN0djA5MHhfZ2V0X2Nhcl9mcmVxKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGspIC8gMTAwMDsKIAlzdGF0ZS0+ZnJlcXVlbmN5ICs9IG9mZnN0X2ZyZXE7CiAKIAlpZiAoc3R2MDkweF9nZXRfdml0ZXJiaShzdGF0ZSkgPCAwKQpAQCAtMjUzMCw3ICsyNjIzLDcgQEAKIAogCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X2ZyZXF1ZW5jeSkgewogCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9mcmVxdWVuY3koZmUsICZzdGF0ZS0+ZnJlcXVlbmN5KSA8IDApCi0JCQkJZ290byBlcnI7CisJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJfQogCiAJCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKQEAgLTI1NTAsNiArMjY0Myw5IEBACiAJfQogCiAJcmV0dXJuIFNUVjA5MHhfT1VUT0ZSQU5HRTsKKworZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtMjU3OSw3ICsyNjc1LDcgQEAKIAlzMzIgaTsKIAlzdHJ1Y3Qgc3R2MDkweF9sb25nX2ZyYW1lX2NybG9vcCAqY2FyX2xvb3AsICpjYXJfbG9vcF9xcHNrX2xvdywgKmNhcl9sb29wX2Fwc2tfbG93OwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID09IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID09IDB4MjApIHsKIAkJY2FyX2xvb3AJCT0gc3R2MDkweF9zMl9jcmxfY3V0MjA7CiAJCWNhcl9sb29wX3Fwc2tfbG93CT0gc3R2MDkweF9zMl9sb3dxcHNrX2NybF9jdXQyMDsKIAkJY2FyX2xvb3BfYXBza19sb3cJPSBzdHYwOTB4X3MyX2Fwc2tfY3JsX2N1dDIwOwpAQCAtMjcwMCw3ICsyNzk2LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MzApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MzApIHsKIAkJLyogQ3V0IDMuMCBhbmQgdXAgKi8KIAkJc2hvcnRfY3JsID0gc3R2MDkweF9zMl9zaG9ydF9jcmxfY3V0MzA7CiAJfSBlbHNlIHsKQEAgLTI3MzIsNyArMjgyOCw3IEBACiAJczMyIHNyYXRlLCBwaWxvdHMsIGFjbGMsIGZfMSwgZl8wLCBpID0gMCwgYmxpbmRfdHVuZSA9IDA7CiAJdTMyIHJlZzsKIAotCXNyYXRlICA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+bWNsayk7CisJc3JhdGUgID0gc3R2MDkweF9nZXRfc3JhdGUoc3RhdGUsIHN0YXRlLT5pbnRlcm5hbC0+bWNsayk7CiAJc3JhdGUgKz0gc3R2MDkweF9nZXRfdG1nb2Zmc3Qoc3RhdGUsIHNyYXRlKTsKIAogCXN3aXRjaCAoc3RhdGUtPmRlbHN5cykgewpAQCAtMjc1MSw3ICsyODQ3LDcgQEAKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIERFTU9ELCByZWcpIDwgMCkKIAkJCWdvdG8gZXJyOwogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDMwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgzMCkgewogCQkJaWYgKHN0djA5MHhfZ2V0X3ZpdGVyYmkoc3RhdGUpIDwgMCkKIAkJCQlnb3RvIGVycjsKIApAQCAtMjg2OCw3ICsyOTY0LDcgQEAKIAkJCWdvdG8gZXJyOwogCX0KIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCWlmICgoc3RhdGUtPnNlYXJjaF9tb2RlID09IFNUVjA5MHhfU0VBUkNIX0RWQlMxKQl8fAogCQkgICAgKHN0YXRlLT5zZWFyY2hfbW9kZSA9PSBTVFYwOTB4X1NFQVJDSF9EU1MpCQl8fAogCQkgICAgKHN0YXRlLT5zZWFyY2hfbW9kZSA9PSBTVFYwOTB4X1NFQVJDSF9BVVRPKSkgewpAQCAtMjg5MCw3ICsyOTg2LDggQEAKIAlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSTE9XMSwgMHg4MCkgPCAwKQogCQlnb3RvIGVycjsKIAotCWlmICgoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgfHwgKGJsaW5kX3R1bmUgPT0gMSkgfHwgKHN0YXRlLT5zcmF0ZSA8IDEwMDAwMDAwKSkgeworCWlmICgoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHx8IChibGluZF90dW5lID09IDEpIHx8CisJICAgIChzdGF0ZS0+c3JhdGUgPCAxMDAwMDAwMCkpIHsKIAkJLyogdXBkYXRlIGluaXRpYWwgY2FycmllciBmcmVxIHdpdGggdGhlIGZvdW5kIGZyZXEgb2Zmc2V0ICovCiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDRlJJTklUMSwgZl8xKSA8IDApCiAJCQlnb3RvIGVycjsKQEAgLTI4OTgsNyArMjk5NSw3IEBACiAJCQlnb3RvIGVycjsKIAkJc3RhdGUtPnR1bmVyX2J3ID0gc3R2MDkweF9jYXJfd2lkdGgoc3JhdGUsIHN0YXRlLT5yb2xsb2ZmKSArIDEwMDAwMDAwOwogCi0JCWlmICgoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgfHwgKGJsaW5kX3R1bmUgPT0gMSkpIHsKKwkJaWYgKChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgfHwgKGJsaW5kX3R1bmUgPT0gMSkpIHsKIAogCQkJaWYgKHN0YXRlLT5hbGdvICE9IFNUVjA5MHhfV0FSTV9TRUFSQ0gpIHsKIApAQCAtMjkwNyw3ICszMDA0LDcgQEAKIAogCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmFuZHdpZHRoKSB7CiAJCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmFuZHdpZHRoKGZlLCBzdGF0ZS0+dHVuZXJfYncpIDwgMCkKLQkJCQkJCWdvdG8gZXJyOworCQkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCQl9CiAKIAkJCQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCkBAIC0yOTUwLDcgKzMwNDcsNyBAQAogCiAJfQogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkZSRVEsIDB4NDkpIDwgMCkKIAkJCWdvdG8gZXJyOwogCX0KQEAgLTI5NTksNiArMzA1Niw5IEBACiAJCXN0djA5MHhfc2V0X3ZpdF90aHRyYWNxKHN0YXRlKTsKIAogCXJldHVybiAwOworCitlcnJfZ2F0ZW9mZjoKKwlzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApOwogZXJyOgogCWRwcmludGsoRkVfRVJST1IsIDEsICJJL08gZXJyb3IiKTsKIAlyZXR1cm4gLTE7CkBAIC0zMDI2LDcgKzMxMjYsNyBAQAogewogCXUzMiByZWc7CiAKLQlpZiAoc3RhdGUtPmRldl92ZXIgPD0gMHgyMCkgeworCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPD0gMHgyMCkgewogCQkvKiByb2xsb2ZmIHRvIGF1dG8gbW9kZSBpZiBEVkJTMiAqLwogCQlyZWcgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIERFTU9EKTsKIAkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIE1BTlVBTF9TWFJPTExPRkZfRklFTEQsIDB4MDApOwpAQCAtMzA2Miw3ICszMTYyLDcgQEAKIAlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRE1ESVNUQVRFLCAweDVjKSA8IDApIC8qIERlbW9kIHN0b3AgKi8KIAkJZ290byBlcnI7CiAKLQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQlpZiAoc3RhdGUtPnNyYXRlID4gNTAwMDAwMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENPUlJFTEFCUywgMHg5ZSkgPCAwKQogCQkJCWdvdG8gZXJyOwpAQCAtMzEwMiw3ICszMjAyLDcgQEAKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEFHQzJSRUYsIDB4MzgpIDwgMCkKIAkJCWdvdG8gZXJyOwogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEtSRUZUTUcsIDB4NWEpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCWlmIChzdGF0ZS0+YWxnbyA9PSBTVFYwOTB4X0NPTERfU0VBUkNIKQpAQCAtMzEyMCw5ICszMjIwLDExIEBACiAJCWlmIChzdHYwOTB4X3NldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPnNyYXRlKSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3R2MDkweF9zZXRfbWF4X3NyYXRlKHN0YXRlLCBzdGF0ZS0+bWNsaywgc3RhdGUtPnNyYXRlKSA8IDApCisJCWlmIChzdHYwOTB4X3NldF9tYXhfc3JhdGUoc3RhdGUsIHN0YXRlLT5pbnRlcm5hbC0+bWNsaywKKwkJCQkJICBzdGF0ZS0+c3JhdGUpIDwgMCkKIAkJCWdvdG8gZXJyOwotCQlpZiAoc3R2MDkweF9zZXRfbWluX3NyYXRlKHN0YXRlLCBzdGF0ZS0+bWNsaywgc3RhdGUtPnNyYXRlKSA8IDApCisJCWlmIChzdHYwOTB4X3NldF9taW5fc3JhdGUoc3RhdGUsIHN0YXRlLT5pbnRlcm5hbC0+bWNsaywKKwkJCQkJICBzdGF0ZS0+c3JhdGUpIDwgMCkKIAkJCWdvdG8gZXJyOwogCiAJCWlmIChzdGF0ZS0+c3JhdGUgPj0gMTAwMDAwMDApCkBAIC0zMTM2LDE4ICszMjM4LDIxIEBACiAJCWdvdG8gZXJyOwogCiAJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYmdhaW4pIHsKLQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYmdhaW4oZmUsIDEwKSA8IDApIC8qIDEwZEIgKi8KLQkJCWdvdG8gZXJyOworCQlyZWcgPSBzdGF0ZS0+Y29uZmlnLT50dW5lcl9iYmdhaW47CisJCWlmIChyZWcgPT0gMCkKKwkJCXJlZyA9IDEwOyAvKiBkZWZhdWx0OiAxMGRCICovCisJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmJnYWluKGZlLCByZWcpIDwgMCkKKwkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJfQogCiAJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3kpIHsKIAkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3koZmUsIHN0YXRlLT5mcmVxdWVuY3kpIDwgMCkKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAl9CiAKIAlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JhbmR3aWR0aCkgewogCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JhbmR3aWR0aChmZSwgc3RhdGUtPnR1bmVyX2J3KSA8IDApCi0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJfQogCiAJaWYgKHN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCkgPCAwKQpAQCAtMzE1NSwyMiArMzI2MCwyMiBAQAogCiAJbXNsZWVwKDUwKTsKIAotCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDEpIDwgMCkKLQkJZ290byBlcnI7Ci0KIAlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X3N0YXR1cykgewotCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X3N0YXR1cyhmZSwgJnJlZykgPCAwKQorCQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAxKSA8IDApCiAJCQlnb3RvIGVycjsKKwkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9zdGF0dXMoZmUsICZyZWcpIDwgMCkKKwkJCWdvdG8gZXJyX2dhdGVvZmY7CisJCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKKwkJCWdvdG8gZXJyOworCisJCWlmIChyZWcpCisJCQlkcHJpbnRrKEZFX0RFQlVHLCAxLCAiVHVuZXIgcGhhc2UgbG9ja2VkIik7CisJCWVsc2UgeworCQkJZHByaW50ayhGRV9ERUJVRywgMSwgIlR1bmVyIHVubG9ja2VkIik7CisJCQlyZXR1cm4gU1RWMDkweF9OT0NBUlJJRVI7CisJCX0KIAl9CiAKLQlpZiAocmVnKQotCQlkcHJpbnRrKEZFX0RFQlVHLCAxLCAiVHVuZXIgcGhhc2UgbG9ja2VkIik7Ci0JZWxzZQotCQlkcHJpbnRrKEZFX0RFQlVHLCAxLCAiVHVuZXIgdW5sb2NrZWQiKTsKLQotCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKLQkJZ290byBlcnI7Ci0KIAltc2xlZXAoMTApOwogCWFnYzFfcG93ZXIgPSBNQUtFV09SRDE2KFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQUdDSVFJTjEpLAogCQkJCVNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQUdDSVFJTjApKTsKQEAgLTMxOTQsNyArMzI5OSw3IEBACiAJCXJlZyA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgREVNT0QpOwogCQlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgU1BFQ0lOVl9DT05UUk9MX0ZJRUxELCBzdGF0ZS0+aW52ZXJzaW9uKTsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPD0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJCS8qIHJvbGxvZmYgdG8gYXV0byBtb2RlIGlmIERWQlMyICovCiAJCQlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgTUFOVUFMX1NYUk9MTE9GRl9GSUVMRCwgMSk7CiAJCX0gZWxzZSB7CkBAIC0zMjM4LDcgKzMzNDMsNyBAQAogCWlmICgobG9jaykgJiYgKHNpZ25hbF9zdGF0ZSA9PSBTVFYwOTB4X1JBTkdFT0spKSB7IC8qIHNpZ25hbCB3aXRoaW4gUmFuZ2UgKi8KIAkJc3R2MDkweF9vcHRpbWl6ZV90cmFjayhzdGF0ZSk7CiAKLQkJaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQkvKiA+PSBDdXQgMi4wIDpyZWxlYXNlIFRTIHJlc2V0IGFmdGVyCiAJCQkgKiBkZW1vZCBsb2NrIGFuZCBvcHRpbWl6ZWQgVHJhY2tpbmcKIAkJCSAqLwpAQCAtMzI5Myw2ICszMzk4LDggQEAKIAl9CiAJcmV0dXJuIHNpZ25hbF9zdGF0ZTsKIAorZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtMzMwMyw2ICszNDEwLDkgQEAKIAlzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKnByb3BzID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CiAKKwlpZiAocC0+ZnJlcXVlbmN5ID09IDApCisJCXJldHVybiBEVkJGRV9BTEdPX1NFQVJDSF9JTlZBTElEOworCiAJc3RhdGUtPmRlbHN5cyA9IHByb3BzLT5kZWxpdmVyeV9zeXN0ZW07CiAJc3RhdGUtPmZyZXF1ZW5jeSA9IHAtPmZyZXF1ZW5jeTsKIAlzdGF0ZS0+c3JhdGUgPSBwLT51LnFwc2suc3ltYm9sX3JhdGU7CkBAIC0zMzUzLDcgKzM0NjMsOCBAQAogCQkJaWYgKFNUVjA5MHhfR0VURklFTERfUHgocmVnLCBQS1RERUxJTl9MT0NLX0ZJRUxEKSkgewogCQkJCXJlZyA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgVFNTVEFUVVMpOwogCQkJCWlmIChTVFYwOTB4X0dFVEZJRUxEX1B4KHJlZywgVFNGSUZPX0xJTkVPS19GSUVMRCkpIHsKLQkJCQkJKnN0YXR1cyA9IEZFX0hBU19DQVJSSUVSIHwKKwkJCQkJKnN0YXR1cyA9IEZFX0hBU19TSUdOQUwgfAorCQkJCQkJICBGRV9IQVNfQ0FSUklFUiB8CiAJCQkJCQkgIEZFX0hBU19WSVRFUkJJIHwKIAkJCQkJCSAgRkVfSEFTX1NZTkMgfAogCQkJCQkJICBGRV9IQVNfTE9DSzsKQEAgLTMzNzAsNyArMzQ4MSwxMSBAQAogCQkJaWYgKFNUVjA5MHhfR0VURklFTERfUHgocmVnLCBMT0NLRURWSVRfRklFTEQpKSB7CiAJCQkJcmVnID0gU1RWMDkweF9SRUFEX0RFTU9EKHN0YXRlLCBUU1NUQVRVUyk7CiAJCQkJaWYgKFNUVjA5MHhfR0VURklFTERfUHgocmVnLCBUU0ZJRk9fTElORU9LX0ZJRUxEKSkgewotCQkJCQkqc3RhdHVzID0gRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfVklURVJCSSB8IEZFX0hBU19TWU5DIHwgRkVfSEFTX0xPQ0s7CisJCQkJCSpzdGF0dXMgPSBGRV9IQVNfU0lHTkFMIHwKKwkJCQkJCSAgRkVfSEFTX0NBUlJJRVIgfAorCQkJCQkJICBGRV9IQVNfVklURVJCSSB8CisJCQkJCQkgIEZFX0hBU19TWU5DIHwKKwkJCQkJCSAgRkVfSEFTX0xPQ0s7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0zNzcwLDYgKzM4ODUsMTUgQEAKIHsKIAlzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAorCXN0YXRlLT5pbnRlcm5hbC0+bnVtX3VzZWQtLTsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5udW1fdXNlZCA8PSAwKSB7CisKKwkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkFjdHVhbGx5IHJlbW92aW5nIik7CisKKwkJcmVtb3ZlX2RldihzdGF0ZS0+aW50ZXJuYWwpOworCQlrZnJlZShzdGF0ZS0+aW50ZXJuYWwpOworCX0KKwogCWtmcmVlKHN0YXRlKTsKIH0KIApAQCAtMzkwMSwxMCArNDAyNSwxMCBAQAogCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9OQ09BUlNFLCByZWcpIDwgMCkKIAkJZ290byBlcnI7CiAKLQlzdGF0ZS0+bWNsayA9IHN0djA5MHhfZ2V0X21jbGsoc3RhdGUpOworCXN0YXRlLT5pbnRlcm5hbC0+bWNsayA9IHN0djA5MHhfZ2V0X21jbGsoc3RhdGUpOwogCiAJLypTZXQgdGhlIERpc2VxQyBmcmVxdWVuY3kgdG8gMjJLSHogKi8KLQlkaXYgPSBzdGF0ZS0+bWNsayAvIDcwNDAwMDsKKwlkaXYgPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyA3MDQwMDA7CiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEYyMlRYLCBkaXYpIDwgMCkKIAkJZ290byBlcnI7CiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEYyMlJYLCBkaXYpIDwgMCkKQEAgLTM5MjAsNyArNDA0NCw3IEBACiB7CiAJdTMyIHJlZzsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCXN3aXRjaCAoc3RhdGUtPmNvbmZpZy0+dHMxX21vZGUpIHsKIAkJY2FzZSBTVFYwOTB4X1RTTU9ERV9QQVJBTExFTF9QVU5DVFVSRUQ6CiAJCWNhc2UgU1RWMDkweF9UU01PREVfRFZCQ0k6CkBAIC00MDkyLDYgKzQyMTYsNzEgQEAKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CisKKwlpZiAoc3RhdGUtPmNvbmZpZy0+dHMxX2NsayA+IDApIHsKKwkJdTMyIHNwZWVkOworCisJCXN3aXRjaCAoc3RhdGUtPmNvbmZpZy0+dHMxX21vZGUpIHsKKwkJY2FzZSBTVFYwOTB4X1RTTU9ERV9QQVJBTExFTF9QVU5DVFVSRUQ6CisJCWNhc2UgU1RWMDkweF9UU01PREVfRFZCQ0k6CisJCWRlZmF1bHQ6CisJCQlzcGVlZCA9IHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvCisJCQkJKHN0YXRlLT5jb25maWctPnRzMV9jbGsgLyA0KTsKKwkJCWlmIChzcGVlZCA8IDB4MDgpCisJCQkJc3BlZWQgPSAweDA4OworCQkJaWYgKHNwZWVkID4gMHhGRikKKwkJCQlzcGVlZCA9IDB4RkY7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTB4X1RTTU9ERV9TRVJJQUxfUFVOQ1RVUkVEOgorCQljYXNlIFNUVjA5MHhfVFNNT0RFX1NFUklBTF9DT05USU5VT1VTOgorCQkJc3BlZWQgPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLworCQkJCShzdGF0ZS0+Y29uZmlnLT50czFfY2xrIC8gMzIpOworCQkJaWYgKHNwZWVkIDwgMHgyMCkKKwkJCQlzcGVlZCA9IDB4MjA7CisJCQlpZiAoc3BlZWQgPiAweEZGKQorCQkJCXNwZWVkID0gMHhGRjsKKwkJCWJyZWFrOworCQl9CisJCXJlZyA9IHN0djA5MHhfcmVhZF9yZWcoc3RhdGUsIFNUVjA5MHhfUDFfVFNDRkdNKTsKKwkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIFRTRklGT19NQU5TUEVFRF9GSUVMRCwgMyk7CisJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9QMV9UU0NGR00sIHJlZykgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9QMV9UU1NQRUVELCBzcGVlZCkgPCAwKQorCQkJZ290byBlcnI7CisJfQorCisJaWYgKHN0YXRlLT5jb25maWctPnRzMl9jbGsgPiAwKSB7CisJCXUzMiBzcGVlZDsKKworCQlzd2l0Y2ggKHN0YXRlLT5jb25maWctPnRzMl9tb2RlKSB7CisJCWNhc2UgU1RWMDkweF9UU01PREVfUEFSQUxMRUxfUFVOQ1RVUkVEOgorCQljYXNlIFNUVjA5MHhfVFNNT0RFX0RWQkNJOgorCQlkZWZhdWx0OgorCQkJc3BlZWQgPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLworCQkJCShzdGF0ZS0+Y29uZmlnLT50czJfY2xrIC8gNCk7CisJCQlpZiAoc3BlZWQgPCAweDA4KQorCQkJCXNwZWVkID0gMHgwODsKKwkJCWlmIChzcGVlZCA+IDB4RkYpCisJCQkJc3BlZWQgPSAweEZGOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkweF9UU01PREVfU0VSSUFMX1BVTkNUVVJFRDoKKwkJY2FzZSBTVFYwOTB4X1RTTU9ERV9TRVJJQUxfQ09OVElOVU9VUzoKKwkJCXNwZWVkID0gc3RhdGUtPmludGVybmFsLT5tY2xrIC8KKwkJCQkoc3RhdGUtPmNvbmZpZy0+dHMyX2NsayAvIDMyKTsKKwkJCWlmIChzcGVlZCA8IDB4MjApCisJCQkJc3BlZWQgPSAweDIwOworCQkJaWYgKHNwZWVkID4gMHhGRikKKwkJCQlzcGVlZCA9IDB4RkY7CisJCQlicmVhazsKKwkJfQorCQlyZWcgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX1RTQ0ZHTSk7CisJCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBUU0ZJRk9fTUFOU1BFRURfRklFTEQsIDMpOworCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfVFNDRkdNLCByZWcpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfVFNTUEVFRCwgc3BlZWQpIDwgMCkKKwkJCWdvdG8gZXJyOworCX0KKwogCXJlZyA9IHN0djA5MHhfcmVhZF9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfVFNDRkdIKTsKIAlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgUlNUX0hXQVJFX0ZJRUxELCAweDAxKTsKIAlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfVFNDRkdILCByZWcpIDwgMCkKQEAgLTQxMjAsNiArNDMwOSwxNSBAQAogCWNvbnN0IHN0cnVjdCBzdHYwOTB4X2NvbmZpZyAqY29uZmlnID0gc3RhdGUtPmNvbmZpZzsKIAl1MzIgcmVnOwogCisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+bWNsayA9PSAwKSB7CisJCXN0djA5MHhfc2V0X21jbGsoc3RhdGUsIDEzNTAwMDAwMCwgY29uZmlnLT54dGFsKTsgLyogMTM1IE1oeiAqLworCQltc2xlZXAoNSk7CisJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9TWU5UQ1RSTCwKKwkJCQkgICAgICAweDIwIHwgY29uZmlnLT5jbGtfbW9kZSkgPCAwKQorCQkJZ290byBlcnI7CisJCXN0djA5MHhfZ2V0X21jbGsoc3RhdGUpOworCX0KKwogCWlmIChzdHYwOTB4X3dha2V1cChmZSkgPCAwKSB7CiAJCWRwcmludGsoRkVfRVJST1IsIDEsICJFcnJvciB3YWtpbmcgZGV2aWNlIik7CiAJCWdvdG8gZXJyOwpAQCAtNDE0MiwxMiArNDM0MCwxMiBAQAogCiAJaWYgKGNvbmZpZy0+dHVuZXJfc2V0X21vZGUpIHsKIAkJaWYgKGNvbmZpZy0+dHVuZXJfc2V0X21vZGUoZmUsIFRVTkVSX1dBS0UpIDwgMCkKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAl9CiAKIAlpZiAoY29uZmlnLT50dW5lcl9pbml0KSB7CiAJCWlmIChjb25maWctPnR1bmVyX2luaXQoZmUpIDwgMCkKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAl9CiAKIAlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCkBAIC00MTU3LDYgKzQzNTUsOSBAQAogCQlnb3RvIGVycjsKIAogCXJldHVybiAwOworCitlcnJfZ2F0ZW9mZjoKKwlzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApOwogZXJyOgogCWRwcmludGsoRkVfRVJST1IsIDEsICJJL08gZXJyb3IiKTsKIAlyZXR1cm4gLTE7CkBAIC00MTg4LDE2ICs0Mzg5LDI2IEBACiAJfQogCiAJLyogU1RWMDkweCBpbml0ICovCi0JaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIERNRElTVEFURSwgMHg1YykgPCAwKSAvKiBTdG9wIERlbW9kICovCisKKwkvKiBTdG9wIERlbW9kICovCisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AxX0RNRElTVEFURSwgMHg1YykgPCAwKQorCQlnb3RvIGVycjsKKwlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfRE1ESVNUQVRFLCAweDVjKSA8IDApCiAJCWdvdG8gZXJyOwogCiAJbXNsZWVwKDUpOwogCi0JaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFROUkNGRywgMHg2YykgPCAwKSAvKiBjaGVjayByZWdpc3RlciAhIChObyBUdW5lciBNb2RlKSAqLworCS8qIFNldCBObyBUdW5lciBNb2RlICovCisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AxX1ROUkNGRywgMHg2YykgPCAwKQorCQlnb3RvIGVycjsKKwlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfVE5SQ0ZHLCAweDZjKSA8IDApCiAJCWdvdG8gZXJyOwogCisJLyogSTJDIHJlcGVhdGVyIE9GRiAqLwogCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBFTkFSUFRfTEVWRUxfRklFTEQsIGNvbmZpZy0+cmVwZWF0ZXJfbGV2ZWwpOwotCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBJMkNSUFQsIHJlZykgPCAwKSAvKiByZXBlYXRlciBPRkYgKi8KKwlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDFfSTJDUlBULCByZWcpIDwgMCkKKwkJZ290byBlcnI7CisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX0kyQ1JQVCwgcmVnKSA8IDApCiAJCWdvdG8gZXJyOwogCiAJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X05DT0FSU0UsIDB4MTMpIDwgMCkgLyogc2V0IFBMTCBkaXZpZGVyICovCkBAIC00MjE2LDggKzQ0MjcsOCBAQAogCQkJZ290byBlcnI7CiAJfQogCi0Jc3RhdGUtPmRldl92ZXIgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X01JRCk7Ci0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwlzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X01JRCk7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9UU0dFTkVSQUwsIDB4MGMpIDwgMCkKIAkJCWdvdG8gZXJyOwogCkBAIC00MjI4LDI4ICs0NDM5LDM2IEBACiAJCQkJZ290byBlcnI7CiAJCX0KIAotCX0gZWxzZSBpZiAoc3RhdGUtPmRldl92ZXIgPCAweDIwKSB7CisJfSBlbHNlIGlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPCAweDIwKSB7CiAJCWRwcmludGsoRkVfRVJST1IsIDEsICJFUlJPUjogVW5zdXBwb3J0ZWQgQ3V0OiAweCUwMnghIiwKLQkJCXN0YXRlLT5kZXZfdmVyKTsKKwkJCXN0YXRlLT5pbnRlcm5hbC0+ZGV2X3Zlcik7CiAKIAkJZ290byBlcnI7Ci0JfSBlbHNlIGlmIChzdGF0ZS0+ZGV2X3ZlciA+IDB4MzApIHsKKwl9IGVsc2UgaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+IDB4MzApIHsKIAkJLyogd2Ugc2hvdWxkbid0IGJhaWwgb3V0IGZyb20gaGVyZSAqLwogCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSU5GTzogQ3V0OiAweCUwMnggcHJvYmFibHkgaW5jb21wbGV0ZSBzdXBwb3J0ISIsCi0JCQlzdGF0ZS0+ZGV2X3Zlcik7CisJCQlzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIpOwogCX0KIAorCS8qIEFEQzEgcmFuZ2UgKi8KKwlyZWcgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X1RTVFROUjEpOworCVNUVjA5MHhfU0VURklFTEQocmVnLCBBREMxX0lOTU9ERV9GSUVMRCwKKwkJKGNvbmZpZy0+YWRjMV9yYW5nZSA9PSBTVFYwOTB4X0FEQ18xVnBwKSA/IDAgOiAxKTsKKwlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfVFNUVE5SMSwgcmVnKSA8IDApCisJCWdvdG8gZXJyOworCisJLyogQURDMiByYW5nZSAqLworCXJlZyA9IHN0djA5MHhfcmVhZF9yZWcoc3RhdGUsIFNUVjA5MHhfVFNUVE5SMyk7CisJU1RWMDkweF9TRVRGSUVMRChyZWcsIEFEQzJfSU5NT0RFX0ZJRUxELAorCQkoY29uZmlnLT5hZGMyX3JhbmdlID09IFNUVjA5MHhfQURDXzFWcHApID8gMCA6IDEpOworCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9UU1RUTlIzLCByZWcpIDwgMCkKKwkJZ290byBlcnI7CisKIAlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfVFNUUkVTMCwgMHg4MCkgPCAwKQogCQlnb3RvIGVycjsKIAlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfVFNUUkVTMCwgMHgwMCkgPCAwKQogCQlnb3RvIGVycjsKIAotCXN0djA5MHhfc2V0X21jbGsoc3RhdGUsIDEzNTAwMDAwMCwgY29uZmlnLT54dGFsKTsgLyogMTM1IE1oeiAqLwotCW1zbGVlcCg1KTsKLQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfU1lOVENUUkwsIDB4MjAgfCBjb25maWctPmNsa19tb2RlKSA8IDApCi0JCWdvdG8gZXJyOwotCXN0djA5MHhfZ2V0X21jbGsoc3RhdGUpOwotCiAJcmV0dXJuIDA7CiBlcnI6CiAJZHByaW50ayhGRV9FUlJPUiwgMSwgIkkvTyBlcnJvciIpOwpAQCAtNDI5OSw2ICs0NTE4LDcgQEAKIAkJCQkgICAgZW51bSBzdHYwOTB4X2RlbW9kdWxhdG9yIGRlbW9kKQogewogCXN0cnVjdCBzdHYwOTB4X3N0YXRlICpzdGF0ZSA9IE5VTEw7CisJc3RydWN0IHN0djA5MHhfZGV2ICp0ZW1wX2ludDsKIAogCXN0YXRlID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBzdHYwOTB4X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCkBAIC00MzE0LDggKzQ1MzQsMzIgQEAKIAlzdGF0ZS0+ZGV2aWNlCQkJCT0gY29uZmlnLT5kZXZpY2U7CiAJc3RhdGUtPnJvbGxvZmYJCQkJPSBTVFYwOTB4X1JPXzM1OyAvKiBkZWZhdWx0ICovCiAKLQlpZiAoc3RhdGUtPmRlbW9kID09IFNUVjA5MHhfREVNT0RVTEFUT1JfMCkKLQkJbXV0ZXhfaW5pdCgmZGVtb2RfbG9jayk7CisJdGVtcF9pbnQgPSBmaW5kX2RldihzdGF0ZS0+aTJjLAorCQkJCXN0YXRlLT5jb25maWctPmFkZHJlc3MpOworCisJaWYgKCh0ZW1wX2ludCAhPSBOVUxMKSAmJiAoc3RhdGUtPmRlbW9kX21vZGUgPT0gU1RWMDkweF9EVUFMKSkgeworCQlzdGF0ZS0+aW50ZXJuYWwgPSB0ZW1wX2ludC0+aW50ZXJuYWw7CisJCXN0YXRlLT5pbnRlcm5hbC0+bnVtX3VzZWQrKzsKKwkJZHByaW50ayhGRV9JTkZPLCAxLCAiRm91bmQgSW50ZXJuYWwgU3RydWN0dXJlISIpOworCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiQXR0YWNoaW5nICVzIGRlbW9kdWxhdG9yKCVkKSBDdXQ9MHglMDJ4IiwKKwkJCXN0YXRlLT5kZXZpY2UgPT0gU1RWMDkwMCA/ICJTVFYwOTAwIiA6ICJTVFYwOTAzIiwKKwkJCWRlbW9kLAorCQkJc3RhdGUtPmludGVybmFsLT5kZXZfdmVyKTsKKwkJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CisJfSBlbHNlIHsKKwkJc3RhdGUtPmludGVybmFsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0djA5MHhfaW50ZXJuYWwpLAorCQkJCQkgIEdGUF9LRVJORUwpOworCQl0ZW1wX2ludCA9IGFwcGVuZF9pbnRlcm5hbChzdGF0ZS0+aW50ZXJuYWwpOworCQlzdGF0ZS0+aW50ZXJuYWwtPm51bV91c2VkID0gMTsKKwkJc3RhdGUtPmludGVybmFsLT5tY2xrID0gMDsKKwkJc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID0gMDsKKwkJc3RhdGUtPmludGVybmFsLT5pMmNfYWRhcCA9IHN0YXRlLT5pMmM7CisJCXN0YXRlLT5pbnRlcm5hbC0+aTJjX2FkZHIgPSBzdGF0ZS0+Y29uZmlnLT5hZGRyZXNzOworCQlkcHJpbnRrKEZFX0lORk8sIDEsICJDcmVhdGUgTmV3IEludGVybmFsIFN0cnVjdHVyZSEiKTsKKwl9CisKKwltdXRleF9pbml0KCZzdGF0ZS0+aW50ZXJuYWwtPmRlbW9kX2xvY2spOworCW11dGV4X2luaXQoJnN0YXRlLT5pbnRlcm5hbC0+dHVuZXJfbG9jayk7CiAKIAlpZiAoc3R2MDkweF9zbGVlcCgmc3RhdGUtPmZyb250ZW5kKSA8IDApIHsKIAkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkVycm9yIHB1dHRpbmcgZGV2aWNlIHRvIHNsZWVwIik7CkBAIC00MzMxLDEwICs0NTc1LDEwIEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JZHByaW50ayhGRV9FUlJPUiwgMSwgIkF0dGFjaGluZyAlcyBkZW1vZHVsYXRvciglZCkgQ3V0PTB4JTAyeFxuIiwKKwlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiQXR0YWNoaW5nICVzIGRlbW9kdWxhdG9yKCVkKSBDdXQ9MHglMDJ4IiwKIAkgICAgICAgc3RhdGUtPmRldmljZSA9PSBTVFYwOTAwID8gIlNUVjA5MDAiIDogIlNUVjA5MDMiLAogCSAgICAgICBkZW1vZCwKLQkgICAgICAgc3RhdGUtPmRldl92ZXIpOworCSAgICAgICBzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIpOwogCiAJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5oCmluZGV4IGIxMzM4MDcuLjMwZjAxYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguaApAQCAtNjAsNiArNjAsMTEgQEAKIAlTVFYwOTB4X1JQVExFVkVMXzIJPSA3LAogfTsKIAorZW51bSBzdHYwOTB4X2FkY19yYW5nZSB7CisJU1RWMDkweF9BRENfMlZwcAk9IDAsCisJU1RWMDkweF9BRENfMVZwcAk9IDEKK307CisKIHN0cnVjdCBzdHYwOTB4X2NvbmZpZyB7CiAJZW51bSBzdHYwOTB4X2RldmljZQlkZXZpY2U7CiAJZW51bSBzdHYwOTB4X21vZGUJZGVtb2RfbW9kZTsKQEAgLTY4LDEzICs3MywxNyBAQAogCXUzMiB4dGFsOyAvKiBkZWZhdWx0OiA4MDAwMDAwICovCiAJdTggYWRkcmVzczsgLyogZGVmYXVsdDogMHg2OCAqLwogCi0JdTMyIHJlZl9jbGs7IC8qIGRlZmF1bHQ6IDE2MDAwMDAwIEZJWE1FIHRvIHR1bmVyIGNvbmZpZyAqLwotCiAJdTggdHMxX21vZGU7CiAJdTggdHMyX21vZGU7CisJdTMyIHRzMV9jbGs7CisJdTMyIHRzMl9jbGs7CiAKIAllbnVtIHN0djA5MHhfaTJjcnB0CXJlcGVhdGVyX2xldmVsOwogCisJdTgJCQl0dW5lcl9iYmdhaW47IC8qIGRlZmF1bHQ6IDEwZGIgKi8KKwllbnVtIHN0djA5MHhfYWRjX3JhbmdlCWFkYzFfcmFuZ2U7IC8qIGRlZmF1bHQ6IDJWcHAgKi8KKwllbnVtIHN0djA5MHhfYWRjX3JhbmdlCWFkYzJfcmFuZ2U7IC8qIGRlZmF1bHQ6IDJWcHAgKi8KKwogCWJvb2wgZGlzZXFjX2VudmVsb3BlX21vZGU7CiAKIAlpbnQgKCp0dW5lcl9pbml0KSAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHhfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHhfcHJpdi5oCmluZGV4IDU5MjFhOGQuLjViNzgwYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4X3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweF9wcml2LmgKQEAgLTIzMCwxMSArMjMwLDIzIEBACiAJczMyIHJlYWQ7CiB9OwogCitzdHJ1Y3Qgc3R2MDkweF9pbnRlcm5hbCB7CisJc3RydWN0IGkyY19hZGFwdGVyIAkqaTJjX2FkYXA7CisJdTgJCQlpMmNfYWRkcjsKKworCXN0cnVjdCBtdXRleAkJZGVtb2RfbG9jazsgLyogTG9jayBhY2Nlc3MgdG8gc2hhcmVkIHJlZ2lzdGVyICovCisJc3RydWN0IG11dGV4CQl0dW5lcl9sb2NrOyAvKiBMb2NrIGFjY2VzcyB0byB0dW5lcnMgKi8KKwlzMzIJCQltY2xrOyAvKiBNYXN0ZXJjbG9jayBEaXZpZGVyIGZhY3RvciAqLworCXUzMgkJCWRldl92ZXI7CisKKwlpbnQJCQludW1fdXNlZDsKK307CisKIHN0cnVjdCBzdHYwOTB4X3N0YXRlIHsKIAllbnVtIHN0djA5MHhfZGV2aWNlCQlkZXZpY2U7CiAJZW51bSBzdHYwOTB4X2RlbW9kdWxhdG9yCWRlbW9kOwogCWVudW0gc3R2MDkweF9tb2RlCQlkZW1vZF9tb2RlOwotCXUzMgkJCQlkZXZfdmVyOworCXN0cnVjdCBzdHYwOTB4X2ludGVybmFsCQkqaW50ZXJuYWw7CiAKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIJCSppMmM7CiAJY29uc3Qgc3RydWN0IHN0djA5MHhfY29uZmlnCSpjb25maWc7CkBAIC0yNTYsMTEgKzI2OCw4IEBACiAJdTMyCQkJCWZyZXF1ZW5jeTsKIAl1MzIJCQkJc3JhdGU7CiAKLQlzMzIJCQkJbWNsazsgLyogTWFzdGVyY2xvY2sgRGl2aWRlciBmYWN0b3IgKi8KIAlzMzIJCQkJdHVuZXJfYnc7CiAKLQl1MzIJCQkJdHVuZXJfcmVmY2xrOwotCiAJczMyCQkJCXNlYXJjaF9yYW5nZTsKIAogCXMzMgkJCQlEZW1vZFRpbWVvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweC5jCmluZGV4IGJjZmNiNjUuLmY5MzFlZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweC5jCkBAIC0zNSw4ICszNSw2IEBACiBtb2R1bGVfcGFyYW0odmVyYm9zZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModmVyYm9zZSwgIlNldCBWZXJib3NpdHkgbGV2ZWwiKTsKIAotc3RhdGljIHU4IHN0djYxMTB4X3JlZ3NbXSA9IHsweDA3LCAweDExLCAweGRjLCAweDg1LCAweDE3LCAweDAxLCAweGU2LCAweDFlfTsKLQogc3RhdGljIGludCBzdHY2MTEweF9yZWFkX3JlZyhzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4LCB1OCByZWcsIHU4ICpkYXRhKQogewogCWludCByZXQ7CkBAIC01OCwxMiArNTYsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzdHY2MTEweF93cml0ZV9yZWcoc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCwgdTggcmVnLCB1OCBkYXRhKQorc3RhdGljIGludCBzdHY2MTEweF93cml0ZV9yZWdzKHN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHgsIGludCBzdGFydCwgdTggZGF0YVtdLCBpbnQgbGVuKQogewogCWludCByZXQ7CiAJY29uc3Qgc3RydWN0IHN0djYxMTB4X2NvbmZpZyAqY29uZmlnID0gc3R2NjExMHgtPmNvbmZpZzsKLQl1OCBidWZbXSA9IHsgcmVnLCBkYXRhIH07Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IGNvbmZpZy0+YWRkciwgLmZsYWdzID0gMCwgLiBidWYgPSBidWYsIC5sZW4gPSAyIH07CisJdTggYnVmW2xlbiArIDFdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBjb25maWctPmFkZHIsCisJCS5mbGFncyA9IDAsCisJCS5idWYgPSBidWYsCisJCS5sZW4gPSBsZW4gKyAxCisJfTsKKworCWlmIChzdGFydCArIGxlbiA+IDgpCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmWzBdID0gc3RhcnQ7CisJbWVtY3B5KCZidWZbMV0sIGRhdGEsIGxlbik7CiAKIAlyZXQgPSBpMmNfdHJhbnNmZXIoc3R2NjExMHgtPmkyYywgJm1zZywgMSk7CiAJaWYgKHJldCAhPSAxKSB7CkBAIC03NCwxOCArODMsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzdHY2MTEweF93cml0ZV9yZWcoc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCwgdTggcmVnLCB1OCBkYXRhKQoreworCXJldHVybiBzdHY2MTEweF93cml0ZV9yZWdzKHN0djYxMTB4LCByZWcsICZkYXRhLCAxKTsKK30KKwogc3RhdGljIGludCBzdHY2MTEweF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHggPSBmZS0+dHVuZXJfcHJpdjsKIAlpbnQgcmV0OwotCXU4IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdHY2MTEweF9yZWdzKTsgaSsrKSB7Ci0JCXJldCA9IHN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgaSwgc3R2NjExMHhfcmVnc1tpXSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSW5pdGlhbGl6YXRpb24gZmFpbGVkIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KKwlyZXQgPSBzdHY2MTEweF93cml0ZV9yZWdzKHN0djYxMTB4LCAwLCBzdHY2MTEweC0+cmVncywKKwkJCQkgIEFSUkFZX1NJWkUoc3R2NjExMHgtPnJlZ3MpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSW5pdGlhbGl6YXRpb24gZmFpbGVkIik7CisJCXJldHVybiAtMTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTk4LDIzICsxMTAsMjMgQEAKIAlzMzIgcFZhbCwgcENhbGMsIHJEaXZPcHQgPSAwLCBwQ2FsY09wdCA9IDEwMDA7CiAJdTggaTsKIAotCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9LLCAoUkVGQ0xPQ0tfTUh6IC0gMTYpKTsKKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX0ssIChSRUZDTE9DS19NSHogLSAxNikpOwogCiAJaWYgKGZyZXF1ZW5jeSA8PSAxMDIzMDAwKSB7Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfRElWNFNFTCwgMSk7Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUFJFU0MzMl9PTiwgMCk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX0RJVjRTRUwsIDEpOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9QUkVTQzMyX09OLCAwKTsKIAkJcFZhbCA9IDQwOwogCX0gZWxzZSBpZiAoZnJlcXVlbmN5IDw9IDEzMDAwMDApIHsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9ESVY0U0VMLCAxKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9QUkVTQzMyX09OLCAxKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfRElWNFNFTCwgMSk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1BSRVNDMzJfT04sIDEpOwogCQlwVmFsID0gNDA7CiAJfSBlbHNlIGlmIChmcmVxdWVuY3kgPD0gMjA0NjAwMCkgewotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX0RJVjRTRUwsIDApOwotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1BSRVNDMzJfT04sIDApOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9ESVY0U0VMLCAwKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUFJFU0MzMl9PTiwgMCk7CiAJCXBWYWwgPSAyMDsKIAl9IGVsc2UgewotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX0RJVjRTRUwsIDApOwotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1BSRVNDMzJfT04sIDEpOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9ESVY0U0VMLCAwKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUFJFU0MzMl9PTiwgMSk7CiAJCXBWYWwgPSAyMDsKIAl9CiAKQEAgLTEzMCwyMSArMTQyLDIxIEBACiAJZGl2aWRlciA9IChmcmVxdWVuY3kgKiBSX0RJVihyRGl2T3B0KSAqIHBWYWwpIC8gUkVGQ0xPQ0tfa0h6OwogCWRpdmlkZXIgPSAoZGl2aWRlciArIDUpIC8gMTA7CiAKLQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1JfRElWLCByRGl2T3B0KTsKLQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX05fRElWXzExXzgsIE1TQihkaXZpZGVyKSk7Ci0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcwXSwgVE5HMF9OX0RJVl83XzAsIExTQihkaXZpZGVyKSk7CisJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUl9ESVYsIHJEaXZPcHQpOworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX05fRElWXzExXzgsIE1TQihkaXZpZGVyKSk7CisJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMF0sIFRORzBfTl9ESVZfN18wLCBMU0IoZGl2aWRlcikpOwogCiAJLyogVkNPIEF1dG8gY2FsaWJyYXRpb24gKi8KLQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1NUQVQxXSwgU1RBVDFfQ0FMVkNPX1NUUlQsIDEpOworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1NUQVQxXSwgU1RBVDFfQ0FMVkNPX1NUUlQsIDEpOwogCi0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMSwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0pOwotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfVE5HMSwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSk7Ci0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9UTkcwLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzBdKTsKLQlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1NUQVQxXSk7CisJc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMSwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzEsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzAsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzBdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pOwogCiAJZm9yIChpID0gMDsgaSA8IFRSSUFMUzsgaSsrKSB7Ci0JCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgJnN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKTsKLQkJaWYgKCFTVFY2MTEweF9HRVRGSUVMRChTVEFUMV9DQUxWQ09fU1RSVCwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0pKQorCQlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfU1RBVDEsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pOworCQlpZiAoIVNUVjYxMTB4X0dFVEZJRUxEKFNUQVQxX0NBTFZDT19TVFJULCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pKQogCQkJCWJyZWFrOwogCQltc2xlZXAoMSk7CiAJfQpAQCAtMTU2LDE0ICsxNjgsMTQgQEAKIHsKIAlzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4ID0gZmUtPnR1bmVyX3ByaXY7CiAKLQlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfVE5HMSwgJnN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0pOwotCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9UTkcwLCAmc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcwXSk7CisJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzEsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSk7CisJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzAsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcwXSk7CiAKLQkqZnJlcXVlbmN5ID0gKE1BS0VXT1JEMTYoU1RWNjExMHhfR0VURklFTEQoVE5HMV9OX0RJVl8xMV84LCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdKSwKLQkJCQkgU1RWNjExMHhfR0VURklFTEQoVE5HMF9OX0RJVl83XzAsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMF0pKSkgKiBSRUZDTE9DS19rSHo7CisJKmZyZXF1ZW5jeSA9IChNQUtFV09SRDE2KFNUVjYxMTB4X0dFVEZJRUxEKFRORzFfTl9ESVZfMTFfOCwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0pLAorCQkJCSBTVFY2MTEweF9HRVRGSUVMRChUTkcwX05fRElWXzdfMCwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMF0pKSkgKiBSRUZDTE9DS19rSHo7CiAKLQkqZnJlcXVlbmN5IC89ICgxIDw8IChTVFY2MTEweF9HRVRGSUVMRChUTkcxX1JfRElWLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdKSArCi0JCQkgICAgIFNUVjYxMTB4X0dFVEZJRUxEKFRORzFfRElWNFNFTCwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSkpKTsKKwkqZnJlcXVlbmN5IC89ICgxIDw8IChTVFY2MTEweF9HRVRGSUVMRChUTkcxX1JfRElWLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSkgKworCQkJICAgICBTVFY2MTEweF9HRVRGSUVMRChUTkcxX0RJVjRTRUwsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdKSkpOwogCiAJKmZyZXF1ZW5jeSA+Pj0gMjsKIApAQCAtMTc5LDI3ICsxOTEsMjcgQEAKIAloYWxmYncgPSBiYW5kd2lkdGggPj4gMTsKIAogCWlmIChoYWxmYncgPiAzNjAwMDAwMCkKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX0NGLCAzMSk7IC8qIExQRiAqLworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX0NGLCAzMSk7IC8qIExQRiAqLwogCWVsc2UgaWYgKGhhbGZidyA8IDUwMDAwMDApCi0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDNdLCBDVFJMM19DRiwgMCk7IC8qIExQRiAqLworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX0NGLCAwKTsgLyogTFBGICovCiAJZWxzZQotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwzXSwgQ1RSTDNfQ0YsICgoaGFsZmJ3IC8gMTAwMDAwMCkgLSA1KSk7IC8qIExQRiAqLworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX0NGLCAoKGhhbGZidyAvIDEwMDAwMDApIC0gNSkpOyAvKiBMUEYgKi8KIAogCi0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX1JDQ0xLX09GRiwgMHgwKTsgLyogY2FsLiBjbGsgYWN0aXZhdGVkICovCi0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0sIFNUQVQxX0NBTFJDX1NUUlQsIDB4MSk7IC8qIExQRiBhdXRvIGNhbCAqLworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwzXSwgQ1RSTDNfUkNDTEtfT0ZGLCAweDApOyAvKiBjYWwuIGNsayBhY3RpdmF0ZWQgKi8KKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0sIFNUQVQxX0NBTFJDX1NUUlQsIDB4MSk7IC8qIExQRiBhdXRvIGNhbCAqLwogCi0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMywgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10pOwotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfU1RBVDEsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwzLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10pOworCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfU1RBVDEsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1NUQVQxXSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVFJJQUxTOyBpKyspIHsKLQkJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCAmc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0pOwotCQlpZiAoIVNUVjYxMTB4X0dFVEZJRUxEKFNUQVQxX0NBTFJDX1NUUlQsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKSkKKwkJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCAmc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfU1RBVDFdKTsKKwkJaWYgKCFTVFY2MTEweF9HRVRGSUVMRChTVEFUMV9DQUxSQ19TVFJULCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pKQogCQkJYnJlYWs7CiAJCW1zbGVlcCgxKTsKIAl9Ci0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX1JDQ0xLX09GRiwgMHgxKTsgLyogY2FsLiBkb25lICovCi0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMywgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10pOworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwzXSwgQ1RSTDNfUkNDTEtfT0ZGLCAweDEpOyAvKiBjYWwuIGRvbmUgKi8KKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwzLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMDgsOCArMjIwLDggQEAKIHsKIAlzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4ID0gZmUtPnR1bmVyX3ByaXY7CiAKLQlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDMsICZzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwzXSk7Ci0JKmJhbmR3aWR0aCA9IChTVFY2MTEweF9HRVRGSUVMRChDVFJMM19DRiwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10pICsgNSkgKiAyMDAwMDAwOworCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMywgJnN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwzXSk7CisJKmJhbmR3aWR0aCA9IChTVFY2MTEweF9HRVRGSUVMRChDVFJMM19DRiwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDNdKSArIDUpICogMjAwMDAwMDsKIAogCXJldHVybiAwOwogfQpAQCAtMjIyLDIwICsyMzQsMjAgQEAKIAlzd2l0Y2ggKHJlZmNsb2NrKSB7CiAJZGVmYXVsdDoKIAljYXNlIDE6Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDApOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMCk7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMSk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAyKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDIpOwogCQlicmVhazsKIAljYXNlIDg6CiAJY2FzZSAwOgotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAzKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDMpOwogCQlicmVhazsKIAl9Ci0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMiwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMl0pOworCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI0NCw4ICsyNTYsOCBAQAogewogCXN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHggPSBmZS0+dHVuZXJfcHJpdjsKIAotCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMiwgJnN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKLQkqZ2FpbiA9IDIgKiBTVFY2MTEweF9HRVRGSUVMRChDVFJMMl9CQkdBSU4sIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKKwlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0pOworCSpnYWluID0gMiAqIFNUVjYxMTB4X0dFVEZJRUxEKENUUkwyX0JCR0FJTiwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjU0LDggKzI2Niw4IEBACiB7CiAJc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCA9IGZlLT50dW5lcl9wcml2OwogCi0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0JCR0FJTiwgZ2FpbiAvIDIpOwotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0JCR0FJTiwgZ2FpbiAvIDIpOworCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI2NywxOSArMjc5LDE5IEBACiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIFRVTkVSX1NMRUVQOgotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfU1lOLCAwKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX1JYLCAwKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX0xQVCwgMCk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfU1lOLCAwKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9SWCwgMCk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfTFBULCAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIFRVTkVSX1dBS0U6Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9TWU4sIDEpOwotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfUlgsIDEpOwotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfTFBULCAxKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9TWU4sIDEpOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX1JYLCAxKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9MUFQsIDEpOwogCQlicmVhazsKIAl9CiAKLQlyZXQgPSBzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwxLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSk7CisJcmV0ID0gc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMSwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdKTsKIAlpZiAocmV0IDwgMCkgewogCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIEVycm9yIik7CiAJCXJldHVybiAtRUlPOwpAQCAtMjk3LDkgKzMwOSw5IEBACiB7CiAJc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCA9IGZlLT50dW5lcl9wcml2OwogCi0Jc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCAmc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0pOworCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgJnN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1NUQVQxXSk7CiAKLQlpZiAoU1RWNjExMHhfR0VURklFTEQoU1RBVDFfTE9DSywgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0pKQorCWlmIChTVFY2MTEweF9HRVRGSUVMRChTVEFUMV9MT0NLLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pKQogCQkqc3RhdHVzID0gVFVORVJfUEhBU0VMT0NLRUQ7CiAJZWxzZQogCQkqc3RhdHVzID0gMDsKQEAgLTM0OSw2ICszNjEsOCBAQAogCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKIAlzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4OworCXU4IGRlZmF1bHRfcmVnc1tdID0gezB4MDcsIDB4MTEsIDB4ZGMsIDB4ODUsIDB4MTcsIDB4MDEsIDB4ZTYsIDB4MWV9OworCWludCByZXQ7CiAKIAlzdHY2MTEweCA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3R2NjExMHggPT0gTlVMTCkKQEAgLTM1Nyw2ICszNzEsNDQgQEAKIAlzdHY2MTEweC0+aTJjCQk9IGkyYzsKIAlzdHY2MTEweC0+Y29uZmlnCT0gY29uZmlnOwogCXN0djYxMTB4LT5kZXZjdGwJPSAmc3R2NjExMHhfY3RsOworCW1lbWNweShzdHY2MTEweC0+cmVncywgZGVmYXVsdF9yZWdzLCA4KTsKKworCS8qIHNldHVwIGRpdmlkZXIgKi8KKwlzd2l0Y2ggKHN0djYxMTB4LT5jb25maWctPmNsa19kaXYpIHsKKwlkZWZhdWx0OgorCWNhc2UgMToKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDApOworCQlicmVhazsKKwljYXNlIDI6CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAxKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMik7CisJCWJyZWFrOworCWNhc2UgODoKKwljYXNlIDA6CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAzKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkgeworCQlyZXQgPSBmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJcmV0ID0gc3R2NjExMHhfd3JpdGVfcmVncyhzdHY2MTEweCwgMCwgc3R2NjExMHgtPnJlZ3MsCisJCQkJICBBUlJBWV9TSVpFKHN0djYxMTB4LT5yZWdzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkluaXRpYWxpemF0aW9uIGZhaWxlZCIpOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpIHsKKwkJcmV0ID0gZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycm9yOworCX0KIAogCWZlLT50dW5lcl9wcml2CQk9IHN0djYxMTB4OwogCWZlLT5vcHMudHVuZXJfb3BzCT0gc3R2NjExMHhfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguaAppbmRleCBhMzgyNTcwLi4yNDI5YWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguaApAQCAtMjYsNiArMjYsNyBAQAogc3RydWN0IHN0djYxMTB4X2NvbmZpZyB7CiAJdTgJYWRkcjsKIAl1MzIJcmVmY2xrOworCXU4CWNsa19kaXY7IC8qIGRpdmlzb3IgdmFsdWUgZm9yIHRoZSBvdXRwdXQgY2xvY2sgKi8KIH07CiAKIGVudW0gdHVuZXJfbW9kZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHhfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4X3ByaXYuaAppbmRleCA3MjYwZGE2Li4wZWM5MzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHhfcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweF9wcml2LmgKQEAgLTY4LDYgKzY4LDcgQEAKIHN0cnVjdCBzdHY2MTEweF9zdGF0ZSB7CiAJc3RydWN0IGkyY19hZGFwdGVyCQkqaTJjOwogCWNvbnN0IHN0cnVjdCBzdHY2MTEweF9jb25maWcJKmNvbmZpZzsKKwl1OCAJCQkJcmVnc1s4XTsKIAogCXN0cnVjdCBzdHY2MTEweF9kZXZjdGwJCSpkZXZjdGw7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTY2NXguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE2NjV4LmMKaW5kZXggODdkNTI3My4uYzQ0ZmVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTY2NXguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhNjY1eC5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAkJZnJlcXVlbmN5ICs9IGNvbmZpZy0+cmVmX2RpdmlkZXIgPj4gMTsKIAkJZnJlcXVlbmN5IC89IGNvbmZpZy0+cmVmX2RpdmlkZXI7CiAKLQkJYnVmWzBdID0gKHU4KSAoZnJlcXVlbmN5ICYgMHg3ZjAwKSA+PiA4OworCQlidWZbMF0gPSAodTgpICgoZnJlcXVlbmN5ICYgMHg3ZjAwKSA+PiA4KTsKIAkJYnVmWzFdID0gKHU4KSAoZnJlcXVlbmN5ICYgMHgwMGZmKSA+PiAwOwogCQlidWZbMl0gPSAweDgwIHwgMHg0MCB8IDB4MDI7CiAJCWJ1ZlszXSA9IDB4MDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2MS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNjEuYwppbmRleCAzMjBjM2MzLi42MTRhZmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2MS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjYxLmMKQEAgLTM5LDcgKzM5LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgdGRhODI2MV9jb25maWcgKmNvbmZpZyA9IHN0YXRlLT5jb25maWc7CiAJaW50IGVyciA9IDA7Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkcgk9IGNvbmZpZy0+YWRkciwgLmZsYWdzID0gSTJDX01fUkQsLmJ1ZiA9IGJ1ZiwgIC5sZW4gPSAyIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkcgk9IGNvbmZpZy0+YWRkciwgLmZsYWdzID0gSTJDX01fUkQsLmJ1ZiA9IGJ1ZiwgIC5sZW4gPSAxIH07CiAKIAlpZiAoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkKIAkJcHJpbnRrKCIlczogcmVhZCBlcnJvciwgZXJyPSVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5jCmluZGV4IDRlODE0ZmYuLjM0YzVkZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzYuYwpAQCAtNDExLDcgKzQxMSw3IEBACiAJc3RhdGUtPmJmID0gMHhmZjsKIAogCWlmICghc3RhdGUtPmNvbmZpZy0+cmZfbG9vcF9lbmFibGUpCi0JCXpsMTAwMzZfaW5pdF90YWJbMV1bMl0gfD0gMHgwMTsKKwkJemwxMDAzNl9pbml0X3RhYlsxXVswXSB8PSAweDAxOwogCiAJZGViX2luZm8oIiVzXG4iLCBfX2Z1bmNfXyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM5LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzOS5jCmluZGV4IDExYjI5Y2IuLmMwODVlNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM5LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzkuYwpAQCAtMjg3LDcgKzI4Nyw2IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRwcmludGsoIkNoaXAgSUQ9JXggZG9lcyBub3QgbWF0Y2ggYSBrbm93biB0eXBlXG4iLCBzdGF0ZS0+aWQpOwotCQlicmVhazsKIAkJZ290byBlcnJvcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaGlmLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2hpZi5jCmluZGV4IDc0NzdkYWMuLjU3NzJlYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaGlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19oaWYuYwpAQCAtMjIsOCArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSAiZG14ZGV2LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2lucHV0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2lucHV0LmMKaW5kZXggNmE5ZGY3Ny4uNDY3NWEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaW5wdXQuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJcmMtPmlkLnZlcnNpb24JPSAxOwogCXJjLT5kZXYJCT0gbWFudGlzLT5wZGV2LT5kZXY7CiAKLQllcnIgPSBpcl9pbnB1dF9yZWdpc3RlcihyYywgJmlyX21hbnRpcyk7CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIocmMsICZpcl9tYW50aXMsIE5VTEwpOwogCWlmIChlcnIpIHsKIAkJZHByaW50ayhNQU5USVNfRVJST1IsIDEsICJJUiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZCwgcmV0ID0gJWQiLCBlcnIpOwogCQlpbnB1dF9mcmVlX2RldmljZShyYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3BjaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19wY2kuYwppbmRleCA2Yzc1MzRhLi41OWZlZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3BjaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfcGNpLmMKQEAgLTQxLDExICs0MSw2IEBACiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAjaW5jbHVkZSAiZHZiX25ldC5oIgogCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KICNpbmNsdWRlICJtYW50aXNfY29tbW9uLmgiCiAjaW5jbHVkZSAibWFudGlzX3JlZy5oIgogI2luY2x1ZGUgIm1hbnRpc19wY2kuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYzhlNmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9LY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorY29uZmlnIERWQl9OR0VORQorCXRyaXN0YXRlICJNaWNyb25hcyBuR2VuZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQworCXNlbGVjdCBEVkJfTE5CUDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9TVFY2MTEweCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDkweCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIE1pY3JvbmFzIFBDSSBleHByZXNzIGNhcmRzIHdpdGggbkdlbmUgYnJpZGdlLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNDM1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9NYWtlZmlsZQpAQCAtMCwwICsxLDExIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbkdlbmUgZGV2aWNlIGRyaXZlcgorIworCituZ2VuZS1vYmpzIDo9IG5nZW5lLWNvcmUubworCitvYmotJChDT05GSUdfRFZCX05HRU5FKSArPSBuZ2VuZS5vCisKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlLworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1MGRmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWNvcmUuYwpAQCAtMCwwICsxLDIwMjQgQEAKKy8qCisgKiBuZ2VuZS5jOiBuR2VuZSBQQ0llIGJyaWRnZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBNaWNyb25hcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJhbHBoIE1ldHpsZXIgPHJqa21AbWV0emxlcmJyb3MuZGU+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICBNb2RpZmljYXRpb25zIGZvciBuZXcgbkdlbmUgZmlybXdhcmUsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciBFRVBST00tY29weWluZywKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIG5ldyBkdWFsIERWQi1TMiBjYXJkIHByb3RvdHlwZQorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIG9ubHksIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICogT3IsIHBvaW50IHlvdXIgYnJvd3NlciB0byBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlICJuZ2VuZS5oIgorCisjaW5jbHVkZSAic3R2NjExMHguaCIKKyNpbmNsdWRlICJzdHYwOTB4LmgiCisjaW5jbHVkZSAibG5iaDI0LmgiCisKK3N0YXRpYyBpbnQgb25lX2FkYXB0ZXIgPSAxOworbW9kdWxlX3BhcmFtKG9uZV9hZGFwdGVyLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhvbmVfYWRhcHRlciwgIlVzZSBvbmx5IG9uZSBhZGFwdGVyLiIpOworCisKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiUHJpbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uLiIpOworCitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKworI2RlZmluZSBDT01NQU5EX1RJTUVPVVRfV09SS0FST1VORAorCisjZGVmaW5lIGRwcmludGsJaWYgKGRlYnVnKSBwcmludGsKKworI2RlZmluZSBERVZJQ0VfTkFNRSAibmdlbmUiCisKKyNkZWZpbmUgbmd3cml0ZWIoZGF0LCBhZHIpICAgICAgICAgd3JpdGViKChkYXQpLCAoY2hhciAqKShkZXYtPmlvbWVtICsgKGFkcikpKQorI2RlZmluZSBuZ3dyaXRlbChkYXQsIGFkcikgICAgICAgICB3cml0ZWwoKGRhdCksIChjaGFyICopKGRldi0+aW9tZW0gKyAoYWRyKSkpCisjZGVmaW5lIG5nd3JpdGViKGRhdCwgYWRyKSAgICAgICAgIHdyaXRlYigoZGF0KSwgKGNoYXIgKikoZGV2LT5pb21lbSArIChhZHIpKSkKKyNkZWZpbmUgbmdyZWFkbChhZHIpICAgICAgICAgICAgICAgcmVhZGwoZGV2LT5pb21lbSArIChhZHIpKQorI2RlZmluZSBuZ3JlYWRiKGFkcikgICAgICAgICAgICAgICByZWFkYihkZXYtPmlvbWVtICsgKGFkcikpCisjZGVmaW5lIG5nY3B5dG8oYWRyLCBzcmMsIGNvdW50KSAgIG1lbWNweV90b2lvKChjaGFyICopIFwKKwkJCQkgICAoZGV2LT5pb21lbSArIChhZHIpKSwgKHNyYyksIChjb3VudCkpCisjZGVmaW5lIG5nY3B5ZnJvbShkc3QsIGFkciwgY291bnQpIG1lbWNweV9mcm9taW8oKGRzdCksIChjaGFyICopIFwKKwkJCQkgICAoZGV2LT5pb21lbSArIChhZHIpKSwgKGNvdW50KSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBuR2VuZSBpbnRlcnJ1cHQgaGFuZGxlciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBldmVudF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IChzdHJ1Y3QgbmdlbmUgKilkYXRhOworCisJd2hpbGUgKGRldi0+RXZlbnRRdWV1ZVJlYWRJbmRleCAhPSBkZXYtPkV2ZW50UXVldWVXcml0ZUluZGV4KSB7CisJCXN0cnVjdCBFVkVOVF9CVUZGRVIgRXZlbnQgPQorCQkJZGV2LT5FdmVudFF1ZXVlW2Rldi0+RXZlbnRRdWV1ZVJlYWRJbmRleF07CisJCWRldi0+RXZlbnRRdWV1ZVJlYWRJbmRleCA9CisJCQkoZGV2LT5FdmVudFF1ZXVlUmVhZEluZGV4ICsgMSkgJiAoRVZFTlRfUVVFVUVfU0laRSAtIDEpOworCisJCWlmICgoRXZlbnQuVUFSVFN0YXR1cyAmIDB4MDEpICYmIChkZXYtPlR4RXZlbnROb3RpZnkpKQorCQkJZGV2LT5UeEV2ZW50Tm90aWZ5KGRldiwgRXZlbnQuVGltZVN0YW1wKTsKKwkJaWYgKChFdmVudC5VQVJUU3RhdHVzICYgMHgwMikgJiYgKGRldi0+UnhFdmVudE5vdGlmeSkpCisJCQlkZXYtPlJ4RXZlbnROb3RpZnkoZGV2LCBFdmVudC5UaW1lU3RhbXAsCisJCQkJCSAgIEV2ZW50LlJYQ2hhcmFjdGVyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRlbXV4X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0gKHN0cnVjdCBuZ2VuZV9jaGFubmVsICopZGF0YTsKKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqQ3VyID0gY2hhbi0+bmV4dEJ1ZmZlcjsKKworCXNwaW5fbG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCisJd2hpbGUgKEN1ci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgJiAweDgwKSB7CisJCWlmIChjaGFuLT5tb2RlICYgTkdFTkVfSU9fVFNPVVQpIHsKKwkJCXUzMiBGbGFncyA9IGNoYW4tPkRhdGFGb3JtYXRGbGFnczsKKwkJCWlmIChDdXItPm5nZW5lQnVmZmVyLlNSLkZsYWdzICYgMHgyMCkKKwkJCQlGbGFncyB8PSBCRUZfT1ZFUkZMT1c7CisJCQlpZiAoY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlKSB7CisJCQkJaWYgKCFjaGFuLT5wQnVmZmVyRXhjaGFuZ2UoY2hhbiwKKwkJCQkJCQkgICBDdXItPkJ1ZmZlcjEsCisJCQkJCQkJICAgY2hhbi0+Q2FwdHVyZTFMZW5ndGgsCisJCQkJCQkJICAgQ3VyLT5uZ2VuZUJ1ZmZlci5TUi4KKwkJCQkJCQkgICBDbG9jaywgRmxhZ3MpKSB7CisJCQkJCS8qCisJCQkJCSAgIFdlIGRpZG4ndCBnZXQgZGF0YQorCQkJCQkgICBDbGVhciBpbiBzZXJ2aWNlIGZsYWcgdG8gbWFrZSBzdXJlIHdlCisJCQkJCSAgIGdldCBjYWxsZWQgb24gbmV4dCBpbnRlcnJ1cHQgYWdhaW4uCisJCQkJCSAgIGxlYXZlIGZpbGwvZW1wdHkgKDB4ODApIGZsYWcgYWxvbmUKKwkJCQkJICAgdG8gYXZvaWQgaGFyZHdhcmUgcnVubmluZyBvdXQgb2YKKwkJCQkJICAgYnVmZmVycyBkdXJpbmcgc3RhcnR1cCwgd2UgaG9sZCBvbmx5CisJCQkJCSAgIGluIHJ1biBzdGF0ZSAoIHRoZSBzb3VyY2UgbWF5IGJlIGxhdGUKKwkJCQkJICAgZGVsaXZlcmluZyBkYXRhICkKKwkJCQkJKi8KKworCQkJCQlpZiAoY2hhbi0+SFdTdGF0ZSA9PSBIV1NUQVRFX1JVTikgeworCQkJCQkJQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5GbGFncyAmPQorCQkJCQkJCX4weDQwOworCQkJCQkJYnJlYWs7CisJCQkJCQkvKiBTdG9wIHByb2NjZXNzaW5nIHN0cmVhbSAqLworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogV2UgZ290IGEgdmFsaWQgYnVmZmVyLAorCQkJCQkgICBzbyBzd2l0Y2ggdG8gcnVuIHN0YXRlICovCisJCQkJCWNoYW4tPkhXU3RhdGUgPSBIV1NUQVRFX1JVTjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRSAiOiBPT1BTXG4iKTsKKwkJCQlpZiAoY2hhbi0+SFdTdGF0ZSA9PSBIV1NUQVRFX1JVTikgeworCQkJCQlDdXItPm5nZW5lQnVmZmVyLlNSLkZsYWdzICY9IH4weDQwOworCQkJCQlicmVhazsJLyogU3RvcCBwcm9jY2Vzc2luZyBzdHJlYW0gKi8KKwkJCQl9CisJCQl9CisJCQlpZiAoY2hhbi0+QXVkaW9EVE9VcGRhdGVkKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRQorCQkJCSAgICAgICAiOiBVcGRhdGUgQXVkaW9EVE8gPSAlZFxuIiwKKwkJCQkgICAgICAgY2hhbi0+QXVkaW9EVE9WYWx1ZSk7CisJCQkJQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5EVE9VcGRhdGUgPQorCQkJCQljaGFuLT5BdWRpb0RUT1ZhbHVlOworCQkJCWNoYW4tPkF1ZGlvRFRPVXBkYXRlZCA9IDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoY2hhbi0+SFdTdGF0ZSA9PSBIV1NUQVRFX1JVTikgeworCQkJCXUzMiBGbGFncyA9IDA7CisJCQkJaWYgKEN1ci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgJiAweDAxKQorCQkJCQlGbGFncyB8PSBCRUZfRVZFTl9GSUVMRDsKKwkJCQlpZiAoQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5GbGFncyAmIDB4MjApCisJCQkJCUZsYWdzIHw9IEJFRl9PVkVSRkxPVzsKKwkJCQlpZiAoY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlKQorCQkJCQljaGFuLT5wQnVmZmVyRXhjaGFuZ2UoY2hhbiwKKwkJCQkJCQkgICAgICBDdXItPkJ1ZmZlcjEsCisJCQkJCQkJICAgICAgY2hhbi0+CisJCQkJCQkJICAgICAgQ2FwdHVyZTFMZW5ndGgsCisJCQkJCQkJICAgICAgQ3VyLT5uZ2VuZUJ1ZmZlci4KKwkJCQkJCQkgICAgICBTUi5DbG9jaywgRmxhZ3MpOworCQkJCWlmIChjaGFuLT5wQnVmZmVyRXhjaGFuZ2UyKQorCQkJCQljaGFuLT5wQnVmZmVyRXhjaGFuZ2UyKGNoYW4sCisJCQkJCQkJICAgICAgIEN1ci0+QnVmZmVyMiwKKwkJCQkJCQkgICAgICAgY2hhbi0+CisJCQkJCQkJICAgICAgIENhcHR1cmUyTGVuZ3RoLAorCQkJCQkJCSAgICAgICBDdXItPm5nZW5lQnVmZmVyLgorCQkJCQkJCSAgICAgICBTUi5DbG9jaywgRmxhZ3MpOworCQkJfSBlbHNlIGlmIChjaGFuLT5IV1N0YXRlICE9IEhXU1RBVEVfU1RPUCkKKwkJCQljaGFuLT5IV1N0YXRlID0gSFdTVEFURV9SVU47CisJCX0KKwkJQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5GbGFncyA9IDB4MDA7CisJCUN1ciA9IEN1ci0+TmV4dDsKKwl9CisJY2hhbi0+bmV4dEJ1ZmZlciA9IEN1cjsKKworCXNwaW5fdW5sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5nZW5lICpkZXYgPSAoc3RydWN0IG5nZW5lICopZGV2X2lkOworCXUzMiBpY291bnRzID0gMDsKKwlpcnFyZXR1cm5fdCByYyA9IElSUV9OT05FOworCXUzMiBpID0gTUFYX1NUUkVBTTsKKwl1OCAqdG1wQ21kRG9uZUJ5dGU7CisKKwlpZiAoZGV2LT5Cb290RmlybXdhcmUpIHsKKwkJaWNvdW50cyA9IG5ncmVhZGwoTkdFTkVfSU5UX0NPVU5UUyk7CisJCWlmIChpY291bnRzICE9IGRldi0+aWNvdW50cykgeworCQkJbmd3cml0ZWwoMCwgRk9SQ0VfTk1JKTsKKwkJCWRldi0+Y21kX2RvbmUgPSAxOworCQkJd2FrZV91cCgmZGV2LT5jbWRfd3EpOworCQkJZGV2LT5pY291bnRzID0gaWNvdW50czsKKwkJCXJjID0gSVJRX0hBTkRMRUQ7CisJCX0KKwkJcmV0dXJuIHJjOworCX0KKworCW5nd3JpdGVsKDAsIEZPUkNFX05NSSk7CisKKwlzcGluX2xvY2soJmRldi0+Y21kX2xvY2spOworCXRtcENtZERvbmVCeXRlID0gZGV2LT5DbWREb25lQnl0ZTsKKwlpZiAodG1wQ21kRG9uZUJ5dGUgJiYKKwkgICAgKCp0bXBDbWREb25lQnl0ZSB8fAorCSAgICAoZGV2LT5uZ2VuZXRvaG9zdFswXSA9PSAxICYmIGRldi0+bmdlbmV0b2hvc3RbMV0gIT0gMCkpKSB7CisJCWRldi0+Q21kRG9uZUJ5dGUgPSBOVUxMOworCQlkZXYtPmNtZF9kb25lID0gMTsKKwkJd2FrZV91cCgmZGV2LT5jbWRfd3EpOworCQlyYyA9IElSUV9IQU5ETEVEOworCX0KKwlzcGluX3VubG9jaygmZGV2LT5jbWRfbG9jayk7CisKKwlpZiAoZGV2LT5FdmVudEJ1ZmZlci0+RXZlbnRTdGF0dXMgJiAweDgwKSB7CisJCXU4IG5leHRXcml0ZUluZGV4ID0KKwkJCShkZXYtPkV2ZW50UXVldWVXcml0ZUluZGV4ICsgMSkgJgorCQkJKEVWRU5UX1FVRVVFX1NJWkUgLSAxKTsKKwkJaWYgKG5leHRXcml0ZUluZGV4ICE9IGRldi0+RXZlbnRRdWV1ZVJlYWRJbmRleCkgeworCQkJZGV2LT5FdmVudFF1ZXVlW2Rldi0+RXZlbnRRdWV1ZVdyaXRlSW5kZXhdID0KKwkJCQkqKGRldi0+RXZlbnRCdWZmZXIpOworCQkJZGV2LT5FdmVudFF1ZXVlV3JpdGVJbmRleCA9IG5leHRXcml0ZUluZGV4OworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IGV2ZW50IG92ZXJmbG93XG4iKTsKKwkJCWRldi0+RXZlbnRRdWV1ZU92ZXJmbG93Q291bnQgKz0gMTsKKwkJCWRldi0+RXZlbnRRdWV1ZU92ZXJmbG93RmxhZyA9IDE7CisJCX0KKwkJZGV2LT5FdmVudEJ1ZmZlci0+RXZlbnRTdGF0dXMgJj0gfjB4ODA7CisJCXRhc2tsZXRfc2NoZWR1bGUoJmRldi0+ZXZlbnRfdGFza2xldCk7CisJCXJjID0gSVJRX0hBTkRMRUQ7CisJfQorCisJd2hpbGUgKGkgPiAwKSB7CisJCWktLTsKKwkJc3Bpbl9sb2NrKCZkZXYtPmNoYW5uZWxbaV0uc3RhdGVfbG9jayk7CisJCS8qIGlmIChkZXYtPmNoYW5uZWxbaV0uU3RhdGU+PUtTU1RBVEVfUlVOKSB7ICovCisJCWlmIChkZXYtPmNoYW5uZWxbaV0ubmV4dEJ1ZmZlcikgeworCQkJaWYgKChkZXYtPmNoYW5uZWxbaV0ubmV4dEJ1ZmZlci0+CisJCQkgICAgIG5nZW5lQnVmZmVyLlNSLkZsYWdzICYgMHhDMCkgPT0gMHg4MCkgeworCQkJCWRldi0+Y2hhbm5lbFtpXS5uZXh0QnVmZmVyLT4KKwkJCQkJbmdlbmVCdWZmZXIuU1IuRmxhZ3MgfD0gMHg0MDsKKwkJCQl0YXNrbGV0X3NjaGVkdWxlKAorCQkJCQkmZGV2LT5jaGFubmVsW2ldLmRlbXV4X3Rhc2tsZXQpOworCQkJCXJjID0gSVJRX0hBTkRMRUQ7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2soJmRldi0+Y2hhbm5lbFtpXS5zdGF0ZV9sb2NrKTsKKwl9CisKKwkvKiBSZXF1ZXN0IG1pZ2h0IGhhdmUgYmVlbiBwcm9jZXNzZWQgYnkgYSBwcmV2aW91cyBjYWxsLiAqLworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBuR2VuZSBjb21tYW5kIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBkdW1wX2NvbW1hbmRfaW8oc3RydWN0IG5nZW5lICpkZXYpCit7CisJdTggYnVmWzhdLCAqYjsKKworCW5nY3B5ZnJvbShidWYsIEhPU1RfVE9fTkdFTkUsIDgpOworCXByaW50ayhLRVJOX0VSUiAiaG9zdF90b19uZ2VuZSAoJTA0eCk6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJSE9TVF9UT19OR0VORSwgYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLAorCQlidWZbNF0sIGJ1Zls1XSwgYnVmWzZdLCBidWZbN10pOworCisJbmdjcHlmcm9tKGJ1ZiwgTkdFTkVfVE9fSE9TVCwgOCk7CisJcHJpbnRrKEtFUk5fRVJSICJuZ2VuZV90b19ob3N0ICglMDR4KTogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQlOR0VORV9UT19IT1NULCBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sCisJCWJ1Zls0XSwgYnVmWzVdLCBidWZbNl0sIGJ1Zls3XSk7CisKKwliID0gZGV2LT5ob3N0dG9uZ2VuZTsKKwlwcmludGsoS0VSTl9FUlIgImRldi0+aG9zdHRvbmdlbmUgKCVwKTogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQliLCBiWzBdLCBiWzFdLCBiWzJdLCBiWzNdLCBiWzRdLCBiWzVdLCBiWzZdLCBiWzddKTsKKworCWIgPSBkZXYtPm5nZW5ldG9ob3N0OworCXByaW50ayhLRVJOX0VSUiAiZGV2LT5uZ2VuZXRvaG9zdCAoJXApOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCWIsIGJbMF0sIGJbMV0sIGJbMl0sIGJbM10sIGJbNF0sIGJbNV0sIGJbNl0sIGJbN10pOworfQorCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmRfbXV0ZXgoc3RydWN0IG5nZW5lICpkZXYsIHN0cnVjdCBuZ2VuZV9jb21tYW5kICpjb20pCit7CisJaW50IHJldDsKKwl1OCAqdG1wQ21kRG9uZUJ5dGU7CisKKwlkZXYtPmNtZF9kb25lID0gMDsKKworCWlmIChjb20tPmNtZC5oZHIuT3Bjb2RlID09IENNRF9GV0xPQURfUFJFUEFSRSkgeworCQlkZXYtPkJvb3RGaXJtd2FyZSA9IDE7CisJCWRldi0+aWNvdW50cyA9IG5ncmVhZGwoTkdFTkVfSU5UX0NPVU5UUyk7CisJCW5nd3JpdGVsKDAsIE5HRU5FX0NPTU1BTkQpOworCQluZ3dyaXRlbCgwLCBOR0VORV9DT01NQU5EX0hJKTsKKwkJbmd3cml0ZWwoMCwgTkdFTkVfU1RBVFVTKTsKKwkJbmd3cml0ZWwoMCwgTkdFTkVfU1RBVFVTX0hJKTsKKwkJbmd3cml0ZWwoMCwgTkdFTkVfRVZFTlQpOworCQluZ3dyaXRlbCgwLCBOR0VORV9FVkVOVF9ISSk7CisJfSBlbHNlIGlmIChjb20tPmNtZC5oZHIuT3Bjb2RlID09IENNRF9GV0xPQURfRklOSVNIKSB7CisJCXU2NCBmd2lvID0gZGV2LT5QQUZXSW50ZXJmYWNlQnVmZmVyOworCisJCW5nd3JpdGVsKGZ3aW8gJiAweGZmZmZmZmZmLCBOR0VORV9DT01NQU5EKTsKKwkJbmd3cml0ZWwoZndpbyA+PiAzMiwgTkdFTkVfQ09NTUFORF9ISSk7CisJCW5nd3JpdGVsKChmd2lvICsgMjU2KSAmIDB4ZmZmZmZmZmYsIE5HRU5FX1NUQVRVUyk7CisJCW5nd3JpdGVsKChmd2lvICsgMjU2KSA+PiAzMiwgTkdFTkVfU1RBVFVTX0hJKTsKKwkJbmd3cml0ZWwoKGZ3aW8gKyA1MTIpICYgMHhmZmZmZmZmZiwgTkdFTkVfRVZFTlQpOworCQluZ3dyaXRlbCgoZndpbyArIDUxMikgPj4gMzIsIE5HRU5FX0VWRU5UX0hJKTsKKwl9CisKKwltZW1jcHkoZGV2LT5GV0ludGVyZmFjZUJ1ZmZlciwgY29tLT5jbWQucmF3OCwgY29tLT5pbl9sZW4gKyAyKTsKKworCWlmIChkZXYtPkJvb3RGaXJtd2FyZSkKKwkJbmdjcHl0byhIT1NUX1RPX05HRU5FLCBjb20tPmNtZC5yYXc4LCBjb20tPmluX2xlbiArIDIpOworCisJc3Bpbl9sb2NrX2lycSgmZGV2LT5jbWRfbG9jayk7CisJdG1wQ21kRG9uZUJ5dGUgPSBkZXYtPm5nZW5ldG9ob3N0ICsgY29tLT5vdXRfbGVuOworCWlmICghY29tLT5vdXRfbGVuKQorCQl0bXBDbWREb25lQnl0ZSsrOworCSp0bXBDbWREb25lQnl0ZSA9IDA7CisJZGV2LT5uZ2VuZXRvaG9zdFswXSA9IDA7CisJZGV2LT5uZ2VuZXRvaG9zdFsxXSA9IDA7CisJZGV2LT5DbWREb25lQnl0ZSA9IHRtcENtZERvbmVCeXRlOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5jbWRfbG9jayk7CisKKwkvKiBOb3RpZnkgODA1MS4gKi8KKwluZ3dyaXRlbCgxLCBGT1JDRV9JTlQpOworCisJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KGRldi0+Y21kX3dxLCBkZXYtPmNtZF9kb25lID09IDEsIDIgKiBIWik7CisJaWYgKCFyZXQpIHsKKwkJLypuZ3dyaXRlbCgwLCBGT1JDRV9OTUkpOyovCisKKwkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FCisJCSAgICAgICAiOiBDb21tYW5kIHRpbWVvdXQgY21kPSUwMnggcHJldj0lMDJ4XG4iLAorCQkgICAgICAgY29tLT5jbWQuaGRyLk9wY29kZSwgZGV2LT5wcmV2X2NtZCk7CisJCWR1bXBfY29tbWFuZF9pbyhkZXYpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChjb20tPmNtZC5oZHIuT3Bjb2RlID09IENNRF9GV0xPQURfRklOSVNIKQorCQlkZXYtPkJvb3RGaXJtd2FyZSA9IDA7CisKKwlkZXYtPnByZXZfY21kID0gY29tLT5jbWQuaGRyLk9wY29kZTsKKworCWlmICghY29tLT5vdXRfbGVuKQorCQlyZXR1cm4gMDsKKworCW1lbWNweShjb20tPmNtZC5yYXc4LCBkZXYtPm5nZW5ldG9ob3N0LCBjb20tPm91dF9sZW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZChzdHJ1Y3QgbmdlbmUgKmRldiwgc3RydWN0IG5nZW5lX2NvbW1hbmQgKmNvbSkKK3sKKwlpbnQgcmVzdWx0OworCisJZG93bigmZGV2LT5jbWRfbXV0ZXgpOworCXJlc3VsdCA9IG5nZW5lX2NvbW1hbmRfbXV0ZXgoZGV2LCBjb20pOworCXVwKCZkZXYtPmNtZF9tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmRfaTJjX3JlYWQoc3RydWN0IG5nZW5lICpkZXYsIHU4IGFkciwKKwkJCSAgIHU4ICpvdXQsIHU4IG91dGxlbiwgdTggKmluLCB1OCBpbmxlbiwgaW50IGZsYWcpCit7CisJc3RydWN0IG5nZW5lX2NvbW1hbmQgY29tOworCisJY29tLmNtZC5oZHIuT3Bjb2RlID0gQ01EX0kyQ19SRUFEOworCWNvbS5jbWQuaGRyLkxlbmd0aCA9IG91dGxlbiArIDM7CisJY29tLmNtZC5JMkNSZWFkLkRldmljZSA9IGFkciA8PCAxOworCW1lbWNweShjb20uY21kLkkyQ1JlYWQuRGF0YSwgb3V0LCBvdXRsZW4pOworCWNvbS5jbWQuSTJDUmVhZC5EYXRhW291dGxlbl0gPSBpbmxlbjsKKwljb20uY21kLkkyQ1JlYWQuRGF0YVtvdXRsZW4gKyAxXSA9IDA7CisJY29tLmluX2xlbiA9IG91dGxlbiArIDM7CisJY29tLm91dF9sZW4gPSBpbmxlbiArIDE7CisKKwlpZiAobmdlbmVfY29tbWFuZChkZXYsICZjb20pIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoKGNvbS5jbWQucmF3OFswXSA+PiAxKSAhPSBhZHIpCisJCXJldHVybiAtRUlPOworCisJaWYgKGZsYWcpCisJCW1lbWNweShpbiwgY29tLmNtZC5yYXc4LCBpbmxlbiArIDEpOworCWVsc2UKKwkJbWVtY3B5KGluLCBjb20uY21kLnJhdzggKyAxLCBpbmxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZF9pMmNfd3JpdGUoc3RydWN0IG5nZW5lICpkZXYsIHU4IGFkciwKKwkJCQkgICB1OCAqb3V0LCB1OCBvdXRsZW4pCit7CisJc3RydWN0IG5nZW5lX2NvbW1hbmQgY29tOworCisKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfSTJDX1dSSVRFOworCWNvbS5jbWQuaGRyLkxlbmd0aCA9IG91dGxlbiArIDE7CisJY29tLmNtZC5JMkNSZWFkLkRldmljZSA9IGFkciA8PCAxOworCW1lbWNweShjb20uY21kLkkyQ1JlYWQuRGF0YSwgb3V0LCBvdXRsZW4pOworCWNvbS5pbl9sZW4gPSBvdXRsZW4gKyAxOworCWNvbS5vdXRfbGVuID0gMTsKKworCWlmIChuZ2VuZV9jb21tYW5kKGRldiwgJmNvbSkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChjb20uY21kLnJhdzhbMF0gPT0gMSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZ2VuZV9jb21tYW5kX2xvYWRfZmlybXdhcmUoc3RydWN0IG5nZW5lICpkZXYsCisJCQkJICAgICAgIHU4ICpuZ2VuZV9mdywgdTMyIHNpemUpCit7CisjZGVmaW5lIEZJUlNUQ0hVTksgKDEwMjQpCisJdTMyIGNsZWZ0OworCXN0cnVjdCBuZ2VuZV9jb21tYW5kIGNvbTsKKworCWNvbS5jbWQuaGRyLk9wY29kZSA9IENNRF9GV0xPQURfUFJFUEFSRTsKKwljb20uY21kLmhkci5MZW5ndGggPSAwOworCWNvbS5pbl9sZW4gPSAwOworCWNvbS5vdXRfbGVuID0gMDsKKworCW5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKTsKKworCWNsZWZ0ID0gKHNpemUgKyAzKSAmIH4zOworCWlmIChjbGVmdCA+IEZJUlNUQ0hVTkspIHsKKwkJbmdjcHl0byhQUk9HUkFNX1NSQU0gKyBGSVJTVENIVU5LLCBuZ2VuZV9mdyArIEZJUlNUQ0hVTkssCisJCQljbGVmdCAtIEZJUlNUQ0hVTkspOworCQljbGVmdCA9IEZJUlNUQ0hVTks7CisJfQorCW5nY3B5dG8oREFUQV9GSUZPX0FSRUEsIG5nZW5lX2Z3LCBjbGVmdCk7CisKKwltZW1zZXQoJmNvbSwgMCwgc2l6ZW9mKHN0cnVjdCBuZ2VuZV9jb21tYW5kKSk7CisJY29tLmNtZC5oZHIuT3Bjb2RlID0gQ01EX0ZXTE9BRF9GSU5JU0g7CisJY29tLmNtZC5oZHIuTGVuZ3RoID0gNDsKKwljb20uY21kLkZXTG9hZEZpbmlzaC5BZGRyZXNzID0gREFUQV9GSUZPX0FSRUE7CisJY29tLmNtZC5GV0xvYWRGaW5pc2guTGVuZ3RoID0gKHVuc2lnbmVkIHNob3J0KWNsZWZ0OworCWNvbS5pbl9sZW4gPSA0OworCWNvbS5vdXRfbGVuID0gMDsKKworCXJldHVybiBuZ2VuZV9jb21tYW5kKGRldiwgJmNvbSk7Cit9CisKKworc3RhdGljIGludCBuZ2VuZV9jb21tYW5kX2NvbmZpZ19idWYoc3RydWN0IG5nZW5lICpkZXYsIHU4IGNvbmZpZykKK3sKKwlzdHJ1Y3QgbmdlbmVfY29tbWFuZCBjb207CisKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfQ09ORklHVVJFX0JVRkZFUjsKKwljb20uY21kLmhkci5MZW5ndGggPSAxOworCWNvbS5jbWQuQ29uZmlndXJlQnVmZmVycy5jb25maWcgPSBjb25maWc7CisJY29tLmluX2xlbiA9IDE7CisJY29tLm91dF9sZW4gPSAwOworCisJaWYgKG5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKSA8IDApCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmRfY29uZmlnX2ZyZWVfYnVmKHN0cnVjdCBuZ2VuZSAqZGV2LCB1OCAqY29uZmlnKQoreworCXN0cnVjdCBuZ2VuZV9jb21tYW5kIGNvbTsKKworCWNvbS5jbWQuaGRyLk9wY29kZSA9IENNRF9DT05GSUdVUkVfRlJFRV9CVUZGRVI7CisJY29tLmNtZC5oZHIuTGVuZ3RoID0gNjsKKwltZW1jcHkoJmNvbS5jbWQuQ29uZmlndXJlQnVmZmVycy5jb25maWcsIGNvbmZpZywgNik7CisJY29tLmluX2xlbiA9IDY7CisJY29tLm91dF9sZW4gPSAwOworCisJaWYgKG5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKSA8IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZF9ncGlvX3NldChzdHJ1Y3QgbmdlbmUgKmRldiwgdTggc2VsZWN0LCB1OCBsZXZlbCkKK3sKKwlzdHJ1Y3QgbmdlbmVfY29tbWFuZCBjb207CisKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfU0VUX0dQSU9fUElOOworCWNvbS5jbWQuaGRyLkxlbmd0aCA9IDE7CisJY29tLmNtZC5TZXRHcGlvUGluLnNlbGVjdCA9IHNlbGVjdCB8IChsZXZlbCA8PCA3KTsKKwljb20uaW5fbGVuID0gMTsKKwljb20ub3V0X2xlbiA9IDA7CisKKwlyZXR1cm4gbmdlbmVfY29tbWFuZChkZXYsICZjb20pOworfQorCisKKy8qCisgMDIwMDA2NDAgaXMgc2FtcGxlIG9uIHJpc2luZyBlZGdlLgorIDAyMDAwNzQwIGlzIHNhbXBsZSBvbiBmYWxsaW5nIGVkZ2UuCisgMDIwMDAwNDAgaXMgaWdub3JlICJ2YWxpZCIgc2lnbmFsCisKKyAwOiBGRF9DVEwxIEJpdCA3LDYgbXVzdCBiZSAwLDEKKyAgICA3ICAgZGlzYWJsZShmdyBjb250cm9sbGVkKQorICAgIDYgICAwLUFVWCwxLVRTCisgICAgNSAgIDAtcGFyLDEtc2VyCisgICAgNCAgIDAtbHNiLzEtbXNiCisgICAgMywyIHJlc2VydmVkCisgICAgMSwwIDAtbm8gc3luYywgMS11c2UgZXh0LiBzdGFydCwgMi11c2UgMHg0NywgMy1ib3RoCisgMTogRkRfQ1RMMiBoYXMgMy12YWxpZCBtdXN0IGJlIGhpLCAyLXVzZSB2YWxpZCwgMS1lZGdlCisgMjogRkRfU1RBIGlzIHJlYWQtb25seS4gMC1zeW5jCisgMzogRkRfSU5TWU5DIGlzIG51bWJlciBvZiA0N3MgdG8gdHJpZ2dlciAiaW4gc3luYyIuCisgNDogRkRfT1VUU1lOQyBpcyBudW1iZXIgb2YgNDdzIHRvIHRyaWdnZXIgIm91dCBvZiBzeW5jIi4KKyA1OiBGRF9NQVhCWVRFMSBpcyBsb3ctb3JkZXIgb2YgYnl0ZXMgcGVyIHBhY2tldC4KKyA2OiBGRF9NQVhCWVRFMiBpcyBoaWdoLW9yZGVyIG9mIGJ5dGVzIHBlciBwYWNrZXQuCisgNzogVG9wIGJ5dGUgaXMgdW51c2VkLgorKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB1OCBUU0ZlYXR1cmVEZWNvZGVyU2V0dXBbOCAqIDRdID0geworCTB4NDIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDIsIDB4YmMsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHgwNiwgMHgwMCwgMHgwMiwgMHgwMiwgMHhiYywgMHgwMCwgMHgwMCwJLyogRFJYSCAqLworCTB4NzEsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDIsIDB4YmMsIDB4MDAsIDB4MDAsCS8qIERSWEhzZXIgKi8KKwkweDcyLCAweDA2LCAweDAwLCAweDAyLCAweDAyLCAweGJjLCAweDAwLCAweDAwLAkvKiBTMnNlciAqLworfTsKKworLyogU2V0IE5HRU5FIEkyUyBDb25maWcgdG8gMTYgYml0IHBhY2tlZCAqLworc3RhdGljIHU4IEkyU0NvbmZpZ3VyYXRpb25bXSA9IHsKKwkweDAwLCAweDEwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTAsIDB4MDAsIDB4MDAsCit9OworCitzdGF0aWMgdTggU1BESUZDb25maWd1cmF0aW9uWzEwXSA9IHsKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworCisvKiBTZXQgTkdFTkUgSTJTIENvbmZpZyB0byB0cmFuc3BvcnQgc3RyZWFtIGNvbXBhdGlibGUgbW9kZSAqLworCitzdGF0aWMgdTggVFNfSTJTQ29uZmlndXJhdGlvbls0XSA9IHsgMHgzRSwgMHgxQSwgMHgwMCwgMHgwMCB9OyAvKjNlIDE4IDAwIDAwID8qLworCitzdGF0aWMgdTggVFNfSTJTT3V0Q29uZmlndXJhdGlvbls0XSA9IHsgMHg4MCwgMHgyMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgdTggSVRVRGVjb2RlclNldHVwWzRdWzE2XSA9IHsKKwl7MHgxYywgMHgxMywgMHgwMSwgMHg2OCwgMHgzZCwgMHg5MCwgMHgxNCwgMHgyMCwgIC8qIFNEVFYgKi8KKwkgMHgwMCwgMHgwMCwgMHgwMSwgMHhiMCwgMHg5YywgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4OWMsIDB4MDMsIDB4MjMsIDB4QzAsIDB4NjAsIDB4MEUsIDB4MTMsIDB4MDAsCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDlmLCAweDAwLCAweDIzLCAweEMwLCAweDYwLCAweDBGLCAweDEzLCAweDAwLCAgLyogSERUViAxMDgwaTUwICovCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDljLCAweDAxLCAweDIzLCAweEMwLCAweDYwLCAweDBFLCAweDEzLCAweDAwLCAgLyogSERUViAxMDgwaTYwICovCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4MDAsIDB4MDAsIDB4MDB9LAorfTsKKworLyoKKyAqIDUwIDQ4IDYwIGdsZWljaAorICogMjdwNTAgOWYgMDAgMjIgODAgNDIgNjkgMTggLi4uCisgKiAyN3A2MCA5MyAwMCAyMiA4MCA4MiA2OSAxYyAuLi4KKyAqLworCisvKiBNYXhieXRlIHRvIDExNDQgKGZvciByYXcgZGF0YSkgKi8KK3N0YXRpYyB1OCBJVFVGZWF0dXJlRGVjb2RlclNldHVwWzhdID0geworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDQsIDB4MDAKK307CisKK3N0YXRpYyB2b2lkIEZpbGxUU0J1ZmZlcih2b2lkICpCdWZmZXIsIGludCBMZW5ndGgsIHUzMiBGbGFncykKK3sKKwl1MzIgKnB0ciA9IEJ1ZmZlcjsKKworCW1lbXNldChCdWZmZXIsIDB4ZmYsIExlbmd0aCk7CisJd2hpbGUgKExlbmd0aCA+IDApIHsKKwkJaWYgKEZsYWdzICYgREZfU1dBUDMyKQorCQkJKnB0ciA9IDB4NDcxRkZGMTA7CisJCWVsc2UKKwkJCSpwdHIgPSAweDEwRkYxRjQ3OworCQlwdHIgKz0gKDE4OCAvIDQpOworCQlMZW5ndGggLT0gMTg4OworCX0KK30KKworCitzdGF0aWMgdm9pZCBmbHVzaF9idWZmZXJzKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuKQoreworCXU4IHZhbDsKKworCWRvIHsKKwkJbXNsZWVwKDEpOworCQlzcGluX2xvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwkJdmFsID0gY2hhbi0+bmV4dEJ1ZmZlci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgJiAweDgwOworCQlzcGluX3VubG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCX0gd2hpbGUgKHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX2J1ZmZlcnMoc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IFNCdWZmZXJIZWFkZXIgKkN1ciA9IGNoYW4tPm5leHRCdWZmZXI7CisKKwlkbyB7CisJCW1lbXNldCgmQ3VyLT5uZ2VuZUJ1ZmZlci5TUiwgMCwgc2l6ZW9mKEN1ci0+bmdlbmVCdWZmZXIuU1IpKTsKKwkJaWYgKGNoYW4tPm1vZGUgJiBOR0VORV9JT19UU09VVCkKKwkJCUZpbGxUU0J1ZmZlcihDdXItPkJ1ZmZlcjEsCisJCQkJICAgICBjaGFuLT5DYXB0dXJlMUxlbmd0aCwKKwkJCQkgICAgIGNoYW4tPkRhdGFGb3JtYXRGbGFncyk7CisJCUN1ciA9IEN1ci0+TmV4dDsKKwl9IHdoaWxlIChDdXIgIT0gY2hhbi0+bmV4dEJ1ZmZlcik7CisKKwlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTT1VUKSB7CisJCWNoYW4tPm5leHRCdWZmZXItPm5nZW5lQnVmZmVyLlNSLkRUT1VwZGF0ZSA9CisJCQljaGFuLT5BdWRpb0RUT1ZhbHVlOworCQljaGFuLT5BdWRpb0RUT1VwZGF0ZWQgPSAwOworCisJCUN1ciA9IGNoYW4tPlRTSWRsZUJ1ZmZlci5IZWFkOworCisJCWRvIHsKKwkJCW1lbXNldCgmQ3VyLT5uZ2VuZUJ1ZmZlci5TUiwgMCwKKwkJCSAgICAgICBzaXplb2YoQ3VyLT5uZ2VuZUJ1ZmZlci5TUikpOworCQkJRmlsbFRTQnVmZmVyKEN1ci0+QnVmZmVyMSwKKwkJCQkgICAgIGNoYW4tPkNhcHR1cmUxTGVuZ3RoLAorCQkJCSAgICAgY2hhbi0+RGF0YUZvcm1hdEZsYWdzKTsKKwkJCUN1ciA9IEN1ci0+TmV4dDsKKwkJfSB3aGlsZSAoQ3VyICE9IGNoYW4tPlRTSWRsZUJ1ZmZlci5IZWFkKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZF9zdHJlYW1fY29udHJvbChzdHJ1Y3QgbmdlbmUgKmRldiwgdTggc3RyZWFtLAorCQkJCQl1OCBjb250cm9sLCB1OCBtb2RlLCB1OCBmbGFncykKK3sKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbiA9ICZkZXYtPmNoYW5uZWxbc3RyZWFtXTsKKwlzdHJ1Y3QgbmdlbmVfY29tbWFuZCBjb207CisJdTE2IEJzVVZJID0gKChzdHJlYW0gJiAxKSA/IDB4OTQwMCA6IDB4OTMwMCk7CisJdTE2IEJzU0RJID0gKChzdHJlYW0gJiAxKSA/IDB4OTYwMCA6IDB4OTUwMCk7CisJdTE2IEJzU1BJID0gKChzdHJlYW0gJiAxKSA/IDB4OTgwMCA6IDB4OTcwMCk7CisJdTE2IEJzU0RPID0gMHg5QjAwOworCisJLyogZG93bigmZGV2LT5zdHJlYW1fbXV0ZXgpOyAqLworCXdoaWxlIChkb3duX3RyeWxvY2soJmRldi0+c3RyZWFtX211dGV4KSkgeworCQlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FICI6IFNDIGxvY2tlZFxuIik7CisJCW1zbGVlcCgxKTsKKwl9CisJbWVtc2V0KCZjb20sIDAsIHNpemVvZihjb20pKTsKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfQ09OVFJPTDsKKwljb20uY21kLmhkci5MZW5ndGggPSBzaXplb2Yoc3RydWN0IEZXX1NUUkVBTV9DT05UUk9MKSAtIDI7CisJY29tLmNtZC5TdHJlYW1Db250cm9sLlN0cmVhbSA9IHN0cmVhbSB8IChjb250cm9sID8gOCA6IDApOworCWlmIChjaGFuLT5tb2RlICYgTkdFTkVfSU9fVFNPVVQpCisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TdHJlYW0gfD0gMHgwNzsKKwljb20uY21kLlN0cmVhbUNvbnRyb2wuQ29udHJvbCA9IGNvbnRyb2wgfAorCQkoZmxhZ3MgJiBTRkxBR19PUkRFUl9MVU1BX0NIUk9NQSk7CisJY29tLmNtZC5TdHJlYW1Db250cm9sLk1vZGUgPSBtb2RlOworCWNvbS5pbl9sZW4gPSBzaXplb2Yoc3RydWN0IEZXX1NUUkVBTV9DT05UUk9MKTsKKwljb20ub3V0X2xlbiA9IDA7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRQorCQkiOiBTdHJlYW09JTAyeCwgQ29udHJvbD0lMDJ4LCBNb2RlPSUwMnhcbiIsCisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TdHJlYW0sIGNvbS5jbWQuU3RyZWFtQ29udHJvbC5Db250cm9sLAorCQljb20uY21kLlN0cmVhbUNvbnRyb2wuTW9kZSk7CisKKwljaGFuLT5Nb2RlID0gbW9kZTsKKworCWlmICghKGNvbnRyb2wgJiAweDgwKSkgeworCQlzcGluX2xvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwkJaWYgKGNoYW4tPlN0YXRlID09IEtTU1RBVEVfUlVOKSB7CisJCQljaGFuLT5TdGF0ZSA9IEtTU1RBVEVfQUNRVUlSRTsKKwkJCWNoYW4tPkhXU3RhdGUgPSBIV1NUQVRFX1NUT1A7CisJCQlzcGluX3VubG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCQkJaWYgKG5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKSA8IDApIHsKKwkJCQl1cCgmZGV2LT5zdHJlYW1fbXV0ZXgpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCS8qIGNsZWFyX2J1ZmZlcnMoY2hhbik7ICovCisJCQlmbHVzaF9idWZmZXJzKGNoYW4pOworCQkJdXAoJmRldi0+c3RyZWFtX211dGV4KTsKKwkJCXJldHVybiAwOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisJCXVwKCZkZXYtPnN0cmVhbV9tdXRleCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChtb2RlICYgU01PREVfQVVESU9fQ0FQVFVSRSkgeworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuQ2FwdHVyZUJsb2NrQ291bnQgPQorCQkJY2hhbi0+Q2FwdHVyZTFMZW5ndGggLyBBVURJT19CTE9DS19TSVpFOworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuQnVmZmVyX0FkZHJlc3MgPSBjaGFuLT5SaW5nQnVmZmVyLlBBSGVhZDsKKwl9IGVsc2UgaWYgKG1vZGUgJiBTTU9ERV9UUkFOU1BPUlRfU1RSRUFNKSB7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5DYXB0dXJlQmxvY2tDb3VudCA9CisJCQljaGFuLT5DYXB0dXJlMUxlbmd0aCAvIFRTX0JMT0NLX1NJWkU7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5NYXhMaW5lc1BlckZpZWxkID0KKwkJCWNoYW4tPkNhcHR1cmUxTGVuZ3RoIC8gVFNfQkxPQ0tfU0laRTsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLkJ1ZmZlcl9BZGRyZXNzID0KKwkJCWNoYW4tPlRTUmluZ0J1ZmZlci5QQUhlYWQ7CisJCWlmIChjaGFuLT5tb2RlICYgTkdFTkVfSU9fVFNPVVQpIHsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5CeXRlc1BlclZCSUxpbmUgPQorCQkJCWNoYW4tPkNhcHR1cmUxTGVuZ3RoIC8gVFNfQkxPQ0tfU0laRTsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TdHJlYW0gfD0gMHgwNzsKKwkJfQorCX0gZWxzZSB7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5CeXRlc1BlclZpZGVvTGluZSA9IGNoYW4tPm5CeXRlc1BlckxpbmU7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5NYXhMaW5lc1BlckZpZWxkID0gY2hhbi0+bkxpbmVzOworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuTWluTGluZXNQZXJGaWVsZCA9IDEwMDsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLkJ1ZmZlcl9BZGRyZXNzID0gY2hhbi0+UmluZ0J1ZmZlci5QQUhlYWQ7CisKKwkJaWYgKG1vZGUgJiBTTU9ERV9WQklfQ0FQVFVSRSkgeworCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLk1heFZCSUxpbmVzUGVyRmllbGQgPQorCQkJCWNoYW4tPm5WQklMaW5lczsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5NaW5WQklMaW5lc1BlckZpZWxkID0gMDsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5CeXRlc1BlclZCSUxpbmUgPQorCQkJCWNoYW4tPm5CeXRlc1BlclZCSUxpbmU7CisJCX0KKwkJaWYgKGZsYWdzICYgU0ZMQUdfQ09MT1JCQVIpCisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU3RyZWFtIHw9IDB4MDQ7CisJfQorCisJc3Bpbl9sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisJaWYgKG1vZGUgJiBTTU9ERV9BVURJT19DQVBUVVJFKSB7CisJCWNoYW4tPm5leHRCdWZmZXIgPSBjaGFuLT5SaW5nQnVmZmVyLkhlYWQ7CisJCWlmIChtb2RlICYgU01PREVfQVVESU9fU1BESUYpIHsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFMZW4gPQorCQkJCXNpemVvZihTUERJRkNvbmZpZ3VyYXRpb24pOworCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUFkZHIgPSBCc1NQSTsKKwkJCW1lbWNweShjb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhLAorCQkJICAgICAgIFNQRElGQ29uZmlndXJhdGlvbiwgc2l6ZW9mKFNQRElGQ29uZmlndXJhdGlvbikpOworCQl9IGVsc2UgeworCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUxlbiA9IDQ7CisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhQWRkciA9IEJzU0RJOworCQkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEsCisJCQkgICAgICAgSTJTQ29uZmlndXJhdGlvbiArCisJCQkgICAgICAgNCAqIGRldi0+Y2FyZF9pbmZvLT5pMnNbc3RyZWFtXSwgNCk7CisJCX0KKwl9IGVsc2UgaWYgKG1vZGUgJiBTTU9ERV9UUkFOU1BPUlRfU1RSRUFNKSB7CisJCWNoYW4tPm5leHRCdWZmZXIgPSBjaGFuLT5UU1JpbmdCdWZmZXIuSGVhZDsKKwkJaWYgKHN0cmVhbSA+PSBTVFJFQU1fQVVESU9JTjEpIHsKKwkJCWlmIChjaGFuLT5tb2RlICYgTkdFTkVfSU9fVFNPVVQpIHsKKwkJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhTGVuID0KKwkJCQkJc2l6ZW9mKFRTX0kyU091dENvbmZpZ3VyYXRpb24pOworCQkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFBZGRyID0gQnNTRE87CisJCQkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEsCisJCQkJICAgICAgIFRTX0kyU091dENvbmZpZ3VyYXRpb24sCisJCQkJICAgICAgIHNpemVvZihUU19JMlNPdXRDb25maWd1cmF0aW9uKSk7CisJCQl9IGVsc2UgeworCQkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFMZW4gPQorCQkJCQlzaXplb2YoVFNfSTJTQ29uZmlndXJhdGlvbik7CisJCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUFkZHIgPSBCc1NESTsKKwkJCQltZW1jcHkoY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YSwKKwkJCQkgICAgICAgVFNfSTJTQ29uZmlndXJhdGlvbiwKKwkJCQkgICAgICAgc2l6ZW9mKFRTX0kyU0NvbmZpZ3VyYXRpb24pKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFMZW4gPSA4OworCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUFkZHIgPSBCc1VWSSArIDB4MTA7CisJCQltZW1jcHkoY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YSwKKwkJCSAgICAgICBUU0ZlYXR1cmVEZWNvZGVyU2V0dXAgKworCQkJICAgICAgIDggKiBkZXYtPmNhcmRfaW5mby0+dHNmW3N0cmVhbV0sIDgpOworCQl9CisJfSBlbHNlIHsKKwkJY2hhbi0+bmV4dEJ1ZmZlciA9IGNoYW4tPlJpbmdCdWZmZXIuSGVhZDsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUxlbiA9CisJCQkxNiArIHNpemVvZihJVFVGZWF0dXJlRGVjb2RlclNldHVwKTsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUFkZHIgPSBCc1VWSTsKKwkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEsCisJCSAgICAgICBJVFVEZWNvZGVyU2V0dXBbY2hhbi0+aXR1bW9kZV0sIDE2KTsKKwkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEgKyAxNiwKKwkJICAgICAgIElUVUZlYXR1cmVEZWNvZGVyU2V0dXAsIHNpemVvZihJVFVGZWF0dXJlRGVjb2RlclNldHVwKSk7CisJfQorCWNsZWFyX2J1ZmZlcnMoY2hhbik7CisJY2hhbi0+U3RhdGUgPSBLU1NUQVRFX1JVTjsKKwlpZiAobW9kZSAmIFNNT0RFX1RSQU5TUE9SVF9TVFJFQU0pCisJCWNoYW4tPkhXU3RhdGUgPSBIV1NUQVRFX1JVTjsKKwllbHNlCisJCWNoYW4tPkhXU3RhdGUgPSBIV1NUQVRFX1NUQVJUVVA7CisJc3Bpbl91bmxvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKworCWlmIChuZ2VuZV9jb21tYW5kKGRldiwgJmNvbSkgPCAwKSB7CisJCXVwKCZkZXYtPnN0cmVhbV9tdXRleCk7CisJCXJldHVybiAtMTsKKwl9CisJdXAoJmRldi0+c3RyZWFtX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEkyQyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIG5nZW5lX2kyY19zZXRfYnVzKHN0cnVjdCBuZ2VuZSAqZGV2LCBpbnQgYnVzKQoreworCWlmICghKGRldi0+Y2FyZF9pbmZvLT5pMmNfYWNjZXNzICYgMikpCisJCXJldHVybjsKKwlpZiAoZGV2LT5pMmNfY3VycmVudF9idXMgPT0gYnVzKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGJ1cykgeworCWNhc2UgMDoKKwkJbmdlbmVfY29tbWFuZF9ncGlvX3NldChkZXYsIDMsIDApOworCQluZ2VuZV9jb21tYW5kX2dwaW9fc2V0KGRldiwgMiwgMSk7CisJCWJyZWFrOworCisJY2FzZSAxOgorCQluZ2VuZV9jb21tYW5kX2dwaW9fc2V0KGRldiwgMiwgMCk7CisJCW5nZW5lX2NvbW1hbmRfZ3Bpb19zZXQoZGV2LCAzLCAxKTsKKwkJYnJlYWs7CisJfQorCWRldi0+aTJjX2N1cnJlbnRfYnVzID0gYnVzOworfQorCitzdGF0aWMgaW50IG5nZW5lX2kyY19tYXN0ZXJfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLCBpbnQgbnVtKQoreworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0KKwkJKHN0cnVjdCBuZ2VuZV9jaGFubmVsICopaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IGNoYW4tPmRldjsKKworCWRvd24oJmRldi0+aTJjX3N3aXRjaF9tdXRleCk7CisJbmdlbmVfaTJjX3NldF9idXMoZGV2LCBjaGFuLT5udW1iZXIpOworCisJaWYgKG51bSA9PSAyICYmIG1zZ1sxXS5mbGFncyAmIEkyQ19NX1JEICYmICEobXNnWzBdLmZsYWdzICYgSTJDX01fUkQpKQorCQlpZiAoIW5nZW5lX2NvbW1hbmRfaTJjX3JlYWQoZGV2LCBtc2dbMF0uYWRkciwKKwkJCQkJICAgIG1zZ1swXS5idWYsIG1zZ1swXS5sZW4sCisJCQkJCSAgICBtc2dbMV0uYnVmLCBtc2dbMV0ubGVuLCAwKSkKKwkJCWdvdG8gZG9uZTsKKworCWlmIChudW0gPT0gMSAmJiAhKG1zZ1swXS5mbGFncyAmIEkyQ19NX1JEKSkKKwkJaWYgKCFuZ2VuZV9jb21tYW5kX2kyY193cml0ZShkZXYsIG1zZ1swXS5hZGRyLAorCQkJCQkgICAgIG1zZ1swXS5idWYsIG1zZ1swXS5sZW4pKQorCQkJZ290byBkb25lOworCWlmIChudW0gPT0gMSAmJiAobXNnWzBdLmZsYWdzICYgSTJDX01fUkQpKQorCQlpZiAoIW5nZW5lX2NvbW1hbmRfaTJjX3JlYWQoZGV2LCBtc2dbMF0uYWRkciwgMCwgMCwKKwkJCQkJICAgIG1zZ1swXS5idWYsIG1zZ1swXS5sZW4sIDApKQorCQkJZ290byBkb25lOworCisJdXAoJmRldi0+aTJjX3N3aXRjaF9tdXRleCk7CisJcmV0dXJuIC1FSU87CisKK2RvbmU6CisJdXAoJmRldi0+aTJjX3N3aXRjaF9tdXRleCk7CisJcmV0dXJuIG51bTsKK30KKworCitzdGF0aWMgdTMyIG5nZW5lX2kyY19mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIG5nZW5lX2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlciA9IG5nZW5lX2kyY19tYXN0ZXJfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IG5nZW5lX2kyY19mdW5jdGlvbmFsaXR5LAorfTsKKworc3RhdGljIGludCBuZ2VuZV9pMmNfaW5pdChzdHJ1Y3QgbmdlbmUgKmRldiwgaW50IGRldl9ucikKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSAmKGRldi0+Y2hhbm5lbFtkZXZfbnJdLmkyY19hZGFwdGVyKTsKKworCWkyY19zZXRfYWRhcGRhdGEoYWRhcCwgJihkZXYtPmNoYW5uZWxbZGV2X25yXSkpOworCWFkYXAtPmNsYXNzID0gSTJDX0NMQVNTX1RWX0RJR0lUQUwgfCBJMkNfQ0xBU1NfVFZfQU5BTE9HOworCisJc3RyY3B5KGFkYXAtPm5hbWUsICJuR2VuZSIpOworCisJYWRhcC0+YWxnbyA9ICZuZ2VuZV9pMmNfYWxnbzsKKwlhZGFwLT5hbGdvX2RhdGEgPSAodm9pZCAqKSYoZGV2LT5jaGFubmVsW2Rldl9ucl0pOworCWFkYXAtPmRldi5wYXJlbnQgPSAmZGV2LT5wY2lfZGV2LT5kZXY7CisKKwlyZXR1cm4gaTJjX2FkZF9hZGFwdGVyKGFkYXApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRFZCIGZ1bmN0aW9ucyBhbmQgQVBJIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgc3dhcF9idWZmZXIodTMyICpwLCB1MzIgbGVuKQoreworCXdoaWxlIChsZW4pIHsKKwkJKnAgPSBzd2FiMzIoKnApOworCQlwKys7CisJCWxlbiAtPSA0OworCX0KK30KKworCitzdGF0aWMgdm9pZCAqdHNpbl9leGNoYW5nZSh2b2lkICpwcml2LCB2b2lkICpidWYsIHUzMiBsZW4sIHUzMiBjbG9jaywgdTMyIGZsYWdzKQoreworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0gcHJpdjsKKworCisjaWZkZWYgQ09NTUFORF9USU1FT1VUX1dPUktBUk9VTkQKKwlpZiAoY2hhbi0+dXNlcnMgPiAwKQorI2VuZGlmCisJCWR2Yl9kbXhfc3dmaWx0ZXIoJmNoYW4tPmRlbXV4LCBidWYsIGxlbik7CisJcmV0dXJuIDA7Cit9CisKK3U4IGZpbGxfdHNbMTg4XSA9IHsgMHg0NywgMHgxZiwgMHhmZiwgMHgxMCB9OworCitzdGF0aWMgdm9pZCAqdHNvdXRfZXhjaGFuZ2Uodm9pZCAqcHJpdiwgdm9pZCAqYnVmLCB1MzIgbGVuLAorCQkJICAgIHUzMiBjbG9jaywgdTMyIGZsYWdzKQoreworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0gcHJpdjsKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IGNoYW4tPmRldjsKKwl1MzIgYWxlbjsKKworCWFsZW4gPSBkdmJfcmluZ2J1ZmZlcl9hdmFpbCgmZGV2LT50c291dF9yYnVmKTsKKwlhbGVuIC09IGFsZW4gJSAxODg7CisKKwlpZiAoYWxlbiA8IGxlbikKKwkJRmlsbFRTQnVmZmVyKGJ1ZiArIGFsZW4sIGxlbiAtIGFsZW4sIGZsYWdzKTsKKwllbHNlCisJCWFsZW4gPSBsZW47CisJZHZiX3JpbmdidWZmZXJfcmVhZCgmZGV2LT50c291dF9yYnVmLCBidWYsIGFsZW4pOworCWlmIChmbGFncyAmIERGX1NXQVAzMikKKwkJc3dhcF9idWZmZXIoKHUzMiAqKWJ1ZiwgYWxlbik7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPnRzb3V0X3JidWYucXVldWUpOworCXJldHVybiBidWY7Cit9CisKKworc3RhdGljIHZvaWQgc2V0X3RyYW5zZmVyKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuLCBpbnQgc3RhdGUpCit7CisJdTggY29udHJvbCA9IDAsIG1vZGUgPSAwLCBmbGFncyA9IDA7CisJc3RydWN0IG5nZW5lICpkZXYgPSBjaGFuLT5kZXY7CisJaW50IHJldDsKKworCS8qCisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBzdCAlZFxuIiwgc3RhdGUpOworCW1zbGVlcCgxMDApOworCSovCisKKwlpZiAoc3RhdGUpIHsKKwkJaWYgKGNoYW4tPnJ1bm5pbmcpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogYWxyZWFkeSBydW5uaW5nXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghY2hhbi0+cnVubmluZykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBhbHJlYWR5IHN0b3BwZWRcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKGRldi0+Y2FyZF9pbmZvLT5zd2l0Y2hfY3RybCkKKwkJZGV2LT5jYXJkX2luZm8tPnN3aXRjaF9jdHJsKGNoYW4sIDEsIHN0YXRlIF4gMSk7CisKKwlpZiAoc3RhdGUpIHsKKwkJc3Bpbl9sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisKKwkJLyogcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBsb2NrPSUwOHhcbiIsCisJCQkgIG5ncmVhZGwoMHg5MzEwKSk7ICovCisJCWR2Yl9yaW5nYnVmZmVyX2ZsdXNoKCZkZXYtPnRzb3V0X3JidWYpOworCQljb250cm9sID0gMHg4MDsKKwkJaWYgKGNoYW4tPm1vZGUgJiAoTkdFTkVfSU9fVFNJTiB8IE5HRU5FX0lPX1RTT1VUKSkgeworCQkJY2hhbi0+Q2FwdHVyZTFMZW5ndGggPSA1MTIgKiAxODg7CisJCQltb2RlID0gU01PREVfVFJBTlNQT1JUX1NUUkVBTTsKKwkJfQorCQlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTT1VUKSB7CisJCQljaGFuLT5wQnVmZmVyRXhjaGFuZ2UgPSB0c291dF9leGNoYW5nZTsKKwkJCS8qIDB4NjY2NjY2NjYgPSA1ME1IeiAqMl4zMyAvMjUwTUh6ICovCisJCQljaGFuLT5BdWRpb0RUT1ZhbHVlID0gMHg2NjY2NjY2NjsKKwkJCS8qIHNldF9kdG8oY2hhbiwgMzg4MTA3MDArMTAwMCk7ICovCisJCQkvKiBzZXRfZHRvKGNoYW4sIDE5MzkyNjU4KTsgKi8KKwkJfQorCQlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTSU4pCisJCQljaGFuLT5wQnVmZmVyRXhjaGFuZ2UgPSB0c2luX2V4Y2hhbmdlOworCQkvKiBuZ3dyaXRlbCgwLCAweDkzMTApOyAqLworCQlzcGluX3VubG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCX0gZWxzZQorCQk7LyogcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBsb2NrPSUwOHhcbiIsCisJCQkgICBuZ3JlYWRsKDB4OTMxMCkpOyAqLworCisJcmV0ID0gbmdlbmVfY29tbWFuZF9zdHJlYW1fY29udHJvbChkZXYsIGNoYW4tPm51bWJlciwKKwkJCQkJICAgY29udHJvbCwgbW9kZSwgZmxhZ3MpOworCWlmICghcmV0KQorCQljaGFuLT5ydW5uaW5nID0gc3RhdGU7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgREVWSUNFX05BTUUgIjogc2V0X3RyYW5zZmVyICVkIGZhaWxlZFxuIiwKKwkJICAgICAgIHN0YXRlKTsKKwlpZiAoIXN0YXRlKSB7CisJCXNwaW5fbG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCQljaGFuLT5wQnVmZmVyRXhjaGFuZ2UgPSAwOworCQlkdmJfcmluZ2J1ZmZlcl9mbHVzaCgmZGV2LT50c291dF9yYnVmKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfc3RhcnRfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQpCit7CisJc3RydWN0IGR2Yl9kZW11eCAqZHZiZG14ID0gZHZiZG14ZmVlZC0+ZGVtdXg7CisJc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4gPSBkdmJkbXgtPnByaXY7CisKKwlpZiAoY2hhbi0+dXNlcnMgPT0gMCkgeworI2lmZGVmIENPTU1BTkRfVElNRU9VVF9XT1JLQVJPVU5ECisJCWlmICghY2hhbi0+cnVubmluZykKKyNlbmRpZgorCQkJc2V0X3RyYW5zZmVyKGNoYW4sIDEpOworCQkvKiBtc2xlZXAoMTApOyAqLworCX0KKworCXJldHVybiArK2NoYW4tPnVzZXJzOworfQorCitzdGF0aWMgaW50IG5nZW5lX3N0b3BfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQpCit7CisJc3RydWN0IGR2Yl9kZW11eCAqZHZiZG14ID0gZHZiZG14ZmVlZC0+ZGVtdXg7CisJc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4gPSBkdmJkbXgtPnByaXY7CisKKwlpZiAoLS1jaGFuLT51c2VycykKKwkJcmV0dXJuIGNoYW4tPnVzZXJzOworCisjaWZuZGVmIENPTU1BTkRfVElNRU9VVF9XT1JLQVJPVU5ECisJc2V0X3RyYW5zZmVyKGNoYW4sIDApOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgbXlfZHZiX2RteF90c19jYXJkX2luaXQoc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXgsIGNoYXIgKmlkLAorCQkJCSAgIGludCAoKnN0YXJ0X2ZlZWQpKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqKSwKKwkJCQkgICBpbnQgKCpzdG9wX2ZlZWQpKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqKSwKKwkJCQkgICB2b2lkICpwcml2KQoreworCWR2YmRlbXV4LT5wcml2ID0gcHJpdjsKKworCWR2YmRlbXV4LT5maWx0ZXJudW0gPSAyNTY7CisJZHZiZGVtdXgtPmZlZWRudW0gPSAyNTY7CisJZHZiZGVtdXgtPnN0YXJ0X2ZlZWQgPSBzdGFydF9mZWVkOworCWR2YmRlbXV4LT5zdG9wX2ZlZWQgPSBzdG9wX2ZlZWQ7CisJZHZiZGVtdXgtPndyaXRlX3RvX2RlY29kZXIgPSAwOworCWR2YmRlbXV4LT5kbXguY2FwYWJpbGl0aWVzID0gKERNWF9UU19GSUxURVJJTkcgfAorCQkJCSAgICAgIERNWF9TRUNUSU9OX0ZJTFRFUklORyB8CisJCQkJICAgICAgRE1YX01FTU9SWV9CQVNFRF9GSUxURVJJTkcpOworCXJldHVybiBkdmJfZG14X2luaXQoZHZiZGVtdXgpOworfQorCitzdGF0aWMgaW50IG15X2R2Yl9kbXhkZXZfdHNfY2FyZF9pbml0KHN0cnVjdCBkbXhkZXYgKmRteGRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eCwKKwkJCQkgICAgICBzdHJ1Y3QgZG14X2Zyb250ZW5kICpod19mcm9udGVuZCwKKwkJCQkgICAgICBzdHJ1Y3QgZG14X2Zyb250ZW5kICptZW1fZnJvbnRlbmQsCisJCQkJICAgICAgc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcHRlcikKK3sKKwlpbnQgcmV0OworCisJZG14ZGV2LT5maWx0ZXJudW0gPSAyNTY7CisJZG14ZGV2LT5kZW11eCA9ICZkdmJkZW11eC0+ZG14OworCWRteGRldi0+Y2FwYWJpbGl0aWVzID0gMDsKKwlyZXQgPSBkdmJfZG14ZGV2X2luaXQoZG14ZGV2LCBkdmJfYWRhcHRlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlod19mcm9udGVuZC0+c291cmNlID0gRE1YX0ZST05URU5EXzA7CisJZHZiZGVtdXgtPmRteC5hZGRfZnJvbnRlbmQoJmR2YmRlbXV4LT5kbXgsIGh3X2Zyb250ZW5kKTsKKwltZW1fZnJvbnRlbmQtPnNvdXJjZSA9IERNWF9NRU1PUllfRkU7CisJZHZiZGVtdXgtPmRteC5hZGRfZnJvbnRlbmQoJmR2YmRlbXV4LT5kbXgsIG1lbV9mcm9udGVuZCk7CisJcmV0dXJuIGR2YmRlbXV4LT5kbXguY29ubmVjdF9mcm9udGVuZCgmZHZiZGVtdXgtPmRteCwgaHdfZnJvbnRlbmQpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogbkdlbmUgaGFyZHdhcmUgaW5pdCBhbmQgcmVsZWFzZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgZnJlZV9yaW5nYnVmZmVyKHN0cnVjdCBuZ2VuZSAqZGV2LCBzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yICpyYikKK3sKKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqQ3VyID0gcmItPkhlYWQ7CisJdTMyIGo7CisKKwlpZiAoIUN1cikKKwkJcmV0dXJuOworCisJZm9yIChqID0gMDsgaiA8IHJiLT5OdW1CdWZmZXJzOyBqKyssIEN1ciA9IEN1ci0+TmV4dCkgeworCQlpZiAoQ3VyLT5CdWZmZXIxKQorCQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaV9kZXYsCisJCQkJCSAgICByYi0+QnVmZmVyMUxlbmd0aCwKKwkJCQkJICAgIEN1ci0+QnVmZmVyMSwKKwkJCQkJICAgIEN1ci0+c2NMaXN0MS0+QWRkcmVzcyk7CisKKwkJaWYgKEN1ci0+QnVmZmVyMikKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2lfZGV2LAorCQkJCQkgICAgcmItPkJ1ZmZlcjJMZW5ndGgsCisJCQkJCSAgICBDdXItPkJ1ZmZlcjIsCisJCQkJCSAgICBDdXItPnNjTGlzdDItPkFkZHJlc3MpOworCX0KKworCWlmIChyYi0+U0NMaXN0TWVtKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpX2RldiwgcmItPlNDTGlzdE1lbVNpemUsCisJCQkJICAgIHJiLT5TQ0xpc3RNZW0sIHJiLT5QQVNDTGlzdE1lbSk7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpX2RldiwgcmItPk1lbVNpemUsIHJiLT5IZWFkLCByYi0+UEFIZWFkKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9pZGxlYnVmZmVyKHN0cnVjdCBuZ2VuZSAqZGV2LAorCQkgICAgIHN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgKnJiLAorCQkgICAgIHN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgKnRiKQoreworCWludCBqOworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpDdXIgPSB0Yi0+SGVhZDsKKworCWlmICghcmItPkhlYWQpCisJCXJldHVybjsKKwlmcmVlX3JpbmdidWZmZXIoZGV2LCByYik7CisJZm9yIChqID0gMDsgaiA8IHRiLT5OdW1CdWZmZXJzOyBqKyssIEN1ciA9IEN1ci0+TmV4dCkgeworCQlDdXItPkJ1ZmZlcjIgPSAwOworCQlDdXItPnNjTGlzdDIgPSAwOworCQlDdXItPm5nZW5lQnVmZmVyLkFkZHJlc3Nfb2ZfZmlyc3RfZW50cnlfMiA9IDA7CisJCUN1ci0+bmdlbmVCdWZmZXIuTnVtYmVyX29mX2VudHJpZXNfMiA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBmcmVlX2NvbW1vbl9idWZmZXJzKHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCXUzMiBpOworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuOworCisJZm9yIChpID0gU1RSRUFNX1ZJREVPSU4xOyBpIDwgTUFYX1NUUkVBTTsgaSsrKSB7CisJCWNoYW4gPSAmZGV2LT5jaGFubmVsW2ldOworCQlmcmVlX2lkbGVidWZmZXIoZGV2LCAmY2hhbi0+VFNJZGxlQnVmZmVyLCAmY2hhbi0+VFNSaW5nQnVmZmVyKTsKKwkJZnJlZV9yaW5nYnVmZmVyKGRldiwgJmNoYW4tPlJpbmdCdWZmZXIpOworCQlmcmVlX3JpbmdidWZmZXIoZGV2LCAmY2hhbi0+VFNSaW5nQnVmZmVyKTsKKwl9CisKKwlpZiAoZGV2LT5PdmVyZmxvd0J1ZmZlcikKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaV9kZXYsCisJCQkJICAgIE9WRVJGTE9XX0JVRkZFUl9TSVpFLAorCQkJCSAgICBkZXYtPk92ZXJmbG93QnVmZmVyLCBkZXYtPlBBT3ZlcmZsb3dCdWZmZXIpOworCisJaWYgKGRldi0+RldJbnRlcmZhY2VCdWZmZXIpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2lfZGV2LAorCQkJCSAgICA0MDk2LAorCQkJCSAgICBkZXYtPkZXSW50ZXJmYWNlQnVmZmVyLAorCQkJCSAgICBkZXYtPlBBRldJbnRlcmZhY2VCdWZmZXIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJpbmcgYnVmZmVyIGhhbmRsaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgY3JlYXRlX3JpbmdfYnVmZmVyKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAorCQkgICAgICAgc3RydWN0IFNSaW5nQnVmZmVyRGVzY3JpcHRvciAqZGVzY3IsIHUzMiBOdW1CdWZmZXJzKQoreworCWRtYV9hZGRyX3QgdG1wOworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpIZWFkOworCXUzMiBpOworCXUzMiBNZW1TaXplID0gU0laRU9GX1NCdWZmZXJIZWFkZXIgKiBOdW1CdWZmZXJzOworCXU2NCBQQVJpbmdCdWZmZXJIZWFkOworCXU2NCBQQVJpbmdCdWZmZXJDdXI7CisJdTY0IFBBUmluZ0J1ZmZlck5leHQ7CisJc3RydWN0IFNCdWZmZXJIZWFkZXIgKkN1ciwgKk5leHQ7CisKKwlkZXNjci0+SGVhZCA9IDA7CisJZGVzY3ItPk1lbVNpemUgPSAwOworCWRlc2NyLT5QQUhlYWQgPSAwOworCWRlc2NyLT5OdW1CdWZmZXJzID0gMDsKKworCWlmIChNZW1TaXplIDwgNDA5NikKKwkJTWVtU2l6ZSA9IDQwOTY7CisKKwlIZWFkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGNpX2RldiwgTWVtU2l6ZSwgJnRtcCk7CisJUEFSaW5nQnVmZmVySGVhZCA9IHRtcDsKKworCWlmICghSGVhZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoSGVhZCwgMCwgTWVtU2l6ZSk7CisKKwlQQVJpbmdCdWZmZXJDdXIgPSBQQVJpbmdCdWZmZXJIZWFkOworCUN1ciA9IEhlYWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTnVtQnVmZmVycyAtIDE7IGkrKykgeworCQlOZXh0ID0gKHN0cnVjdCBTQnVmZmVySGVhZGVyICopCisJCQkoKCh1OCAqKSBDdXIpICsgU0laRU9GX1NCdWZmZXJIZWFkZXIpOworCQlQQVJpbmdCdWZmZXJOZXh0ID0gUEFSaW5nQnVmZmVyQ3VyICsgU0laRU9GX1NCdWZmZXJIZWFkZXI7CisJCUN1ci0+TmV4dCA9IE5leHQ7CisJCUN1ci0+bmdlbmVCdWZmZXIuTmV4dCA9IFBBUmluZ0J1ZmZlck5leHQ7CisJCUN1ciA9IE5leHQ7CisJCVBBUmluZ0J1ZmZlckN1ciA9IFBBUmluZ0J1ZmZlck5leHQ7CisJfQorCS8qIExhc3QgQnVmZmVyIHBvaW50cyBiYWNrIHRvIGZpcnN0IG9uZSAqLworCUN1ci0+TmV4dCA9IEhlYWQ7CisJQ3VyLT5uZ2VuZUJ1ZmZlci5OZXh0ID0gUEFSaW5nQnVmZmVySGVhZDsKKworCWRlc2NyLT5IZWFkICAgICAgID0gSGVhZDsKKwlkZXNjci0+TWVtU2l6ZSAgICA9IE1lbVNpemU7CisJZGVzY3ItPlBBSGVhZCAgICAgPSBQQVJpbmdCdWZmZXJIZWFkOworCWRlc2NyLT5OdW1CdWZmZXJzID0gTnVtQnVmZmVyczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IEFsbG9jYXRlUmluZ0J1ZmZlcnMoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCisJCQkgICAgICAgZG1hX2FkZHJfdCBvZiwKKwkJCSAgICAgICBzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yICpwUmluZ0J1ZmZlciwKKwkJCSAgICAgICB1MzIgQnVmZmVyMUxlbmd0aCwgdTMyIEJ1ZmZlcjJMZW5ndGgpCit7CisJZG1hX2FkZHJfdCB0bXA7CisJdTMyIGksIGo7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIFNDTGlzdE1lbVNpemUgPSBwUmluZ0J1ZmZlci0+TnVtQnVmZmVycworCQkqICgoQnVmZmVyMkxlbmd0aCAhPSAwKSA/IChOVU1fU0NBVFRFUl9HQVRIRVJfRU5UUklFUyAqIDIpIDoKKwkJICAgIE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTKQorCQkqIHNpemVvZihzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCk7CisKKwl1NjQgUEFTQ0xpc3RNZW07CisJc3RydWN0IEhXX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQgKlNDTGlzdEVudHJ5OworCXU2NCBQQVNDTGlzdEVudHJ5OworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpDdXI7CisJdm9pZCAqU0NMaXN0TWVtOworCisJaWYgKFNDTGlzdE1lbVNpemUgPCA0MDk2KQorCQlTQ0xpc3RNZW1TaXplID0gNDA5NjsKKworCVNDTGlzdE1lbSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaV9kZXYsIFNDTGlzdE1lbVNpemUsICZ0bXApOworCisJUEFTQ0xpc3RNZW0gPSB0bXA7CisJaWYgKFNDTGlzdE1lbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChTQ0xpc3RNZW0sIDAsIFNDTGlzdE1lbVNpemUpOworCisJcFJpbmdCdWZmZXItPlNDTGlzdE1lbSA9IFNDTGlzdE1lbTsKKwlwUmluZ0J1ZmZlci0+UEFTQ0xpc3RNZW0gPSBQQVNDTGlzdE1lbTsKKwlwUmluZ0J1ZmZlci0+U0NMaXN0TWVtU2l6ZSA9IFNDTGlzdE1lbVNpemU7CisJcFJpbmdCdWZmZXItPkJ1ZmZlcjFMZW5ndGggPSBCdWZmZXIxTGVuZ3RoOworCXBSaW5nQnVmZmVyLT5CdWZmZXIyTGVuZ3RoID0gQnVmZmVyMkxlbmd0aDsKKworCVNDTGlzdEVudHJ5ID0gU0NMaXN0TWVtOworCVBBU0NMaXN0RW50cnkgPSBQQVNDTGlzdE1lbTsKKwlDdXIgPSBwUmluZ0J1ZmZlci0+SGVhZDsKKworCWZvciAoaSA9IDA7IGkgPCBwUmluZ0J1ZmZlci0+TnVtQnVmZmVyczsgaSArPSAxLCBDdXIgPSBDdXItPk5leHQpIHsKKwkJdTY0IFBBQnVmZmVyOworCisJCXZvaWQgKkJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaV9kZXYsIEJ1ZmZlcjFMZW5ndGgsCisJCQkJCQkgICAgJnRtcCk7CisJCVBBQnVmZmVyID0gdG1wOworCisJCWlmIChCdWZmZXIgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCUN1ci0+QnVmZmVyMSA9IEJ1ZmZlcjsKKworCQlTQ0xpc3RFbnRyeS0+QWRkcmVzcyA9IFBBQnVmZmVyOworCQlTQ0xpc3RFbnRyeS0+TGVuZ3RoICA9IEJ1ZmZlcjFMZW5ndGg7CisKKwkJQ3VyLT5zY0xpc3QxID0gU0NMaXN0RW50cnk7CisJCUN1ci0+bmdlbmVCdWZmZXIuQWRkcmVzc19vZl9maXJzdF9lbnRyeV8xID0gUEFTQ0xpc3RFbnRyeTsKKwkJQ3VyLT5uZ2VuZUJ1ZmZlci5OdW1iZXJfb2ZfZW50cmllc18xID0KKwkJCU5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTOworCisJCVNDTGlzdEVudHJ5ICs9IDE7CisJCVBBU0NMaXN0RW50cnkgKz0gc2l6ZW9mKHN0cnVjdCBIV19TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UKTsKKworI2lmIE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTID4gMQorCQlmb3IgKGogPSAwOyBqIDwgTlVNX1NDQVRURVJfR0FUSEVSX0VOVFJJRVMgLSAxOyBqICs9IDEpIHsKKwkJCVNDTGlzdEVudHJ5LT5BZGRyZXNzID0gb2Y7CisJCQlTQ0xpc3RFbnRyeS0+TGVuZ3RoID0gT1ZFUkZMT1dfQlVGRkVSX1NJWkU7CisJCQlTQ0xpc3RFbnRyeSArPSAxOworCQkJUEFTQ0xpc3RFbnRyeSArPQorCQkJCXNpemVvZihzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCk7CisJCX0KKyNlbmRpZgorCisJCWlmICghQnVmZmVyMkxlbmd0aCkKKwkJCWNvbnRpbnVlOworCisJCUJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaV9kZXYsIEJ1ZmZlcjJMZW5ndGgsICZ0bXApOworCQlQQUJ1ZmZlciA9IHRtcDsKKworCQlpZiAoQnVmZmVyID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlDdXItPkJ1ZmZlcjIgPSBCdWZmZXI7CisKKwkJU0NMaXN0RW50cnktPkFkZHJlc3MgPSBQQUJ1ZmZlcjsKKwkJU0NMaXN0RW50cnktPkxlbmd0aCAgPSBCdWZmZXIyTGVuZ3RoOworCisJCUN1ci0+c2NMaXN0MiA9IFNDTGlzdEVudHJ5OworCQlDdXItPm5nZW5lQnVmZmVyLkFkZHJlc3Nfb2ZfZmlyc3RfZW50cnlfMiA9IFBBU0NMaXN0RW50cnk7CisJCUN1ci0+bmdlbmVCdWZmZXIuTnVtYmVyX29mX2VudHJpZXNfMiA9CisJCQlOVU1fU0NBVFRFUl9HQVRIRVJfRU5UUklFUzsKKworCQlTQ0xpc3RFbnRyeSAgICs9IDE7CisJCVBBU0NMaXN0RW50cnkgKz0gc2l6ZW9mKHN0cnVjdCBIV19TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UKTsKKworI2lmIE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTID4gMQorCQlmb3IgKGogPSAwOyBqIDwgTlVNX1NDQVRURVJfR0FUSEVSX0VOVFJJRVMgLSAxOyBqKyspIHsKKwkJCVNDTGlzdEVudHJ5LT5BZGRyZXNzID0gb2Y7CisJCQlTQ0xpc3RFbnRyeS0+TGVuZ3RoID0gT1ZFUkZMT1dfQlVGRkVSX1NJWkU7CisJCQlTQ0xpc3RFbnRyeSArPSAxOworCQkJUEFTQ0xpc3RFbnRyeSArPQorCQkJCXNpemVvZihzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCk7CisJCX0KKyNlbmRpZgorCisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBGaWxsVFNJZGxlQnVmZmVyKHN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgKnBJZGxlQnVmZmVyLAorCQkJICAgIHN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgKnBSaW5nQnVmZmVyKQoreworCWludCBzdGF0dXMgPSAwOworCisJLyogQ29weSBwb2ludGVyIHRvIHNjYXR0ZXIgZ2F0aGVyIGxpc3QgaW4gVFNSaW5nYnVmZmVyCisJICAgc3RydWN0dXJlIGZvciBidWZmZXIgMgorCSAgIExvYWQgbnVtYmVyIG9mIGJ1ZmZlcgorCSovCisJdTMyIG4gPSBwUmluZ0J1ZmZlci0+TnVtQnVmZmVyczsKKworCS8qIFBvaW50IHRvIGZpcnN0IGJ1ZmZlciBlbnRyeSAqLworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpDdXIgPSBwUmluZ0J1ZmZlci0+SGVhZDsKKwlpbnQgaTsKKwkvKiBMb29wIHRocnUgYWxsIGJ1ZmZlciBhbmQgc2V0IEJ1ZmZlciAyIHBvaW50ZXJzIHRvIFRTSWRsZWJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJQ3VyLT5CdWZmZXIyID0gcElkbGVCdWZmZXItPkhlYWQtPkJ1ZmZlcjE7CisJCUN1ci0+c2NMaXN0MiA9IHBJZGxlQnVmZmVyLT5IZWFkLT5zY0xpc3QxOworCQlDdXItPm5nZW5lQnVmZmVyLkFkZHJlc3Nfb2ZfZmlyc3RfZW50cnlfMiA9CisJCQlwSWRsZUJ1ZmZlci0+SGVhZC0+bmdlbmVCdWZmZXIuCisJCQlBZGRyZXNzX29mX2ZpcnN0X2VudHJ5XzE7CisJCUN1ci0+bmdlbmVCdWZmZXIuTnVtYmVyX29mX2VudHJpZXNfMiA9CisJCQlwSWRsZUJ1ZmZlci0+SGVhZC0+bmdlbmVCdWZmZXIuTnVtYmVyX29mX2VudHJpZXNfMTsKKwkJQ3VyID0gQ3VyLT5OZXh0OworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdTMyIFJpbmdCdWZmZXJTaXplc1tNQVhfU1RSRUFNXSA9IHsKKwlSSU5HX1NJWkVfVklERU8sCisJUklOR19TSVpFX1ZJREVPLAorCVJJTkdfU0laRV9BVURJTywKKwlSSU5HX1NJWkVfQVVESU8sCisJUklOR19TSVpFX0FVRElPLAorfTsKKworc3RhdGljIHUzMiBCdWZmZXIxU2l6ZXNbTUFYX1NUUkVBTV0gPSB7CisJTUFYX1ZJREVPX0JVRkZFUl9TSVpFLAorCU1BWF9WSURFT19CVUZGRVJfU0laRSwKKwlNQVhfQVVESU9fQlVGRkVSX1NJWkUsCisJTUFYX0FVRElPX0JVRkZFUl9TSVpFLAorCU1BWF9BVURJT19CVUZGRVJfU0laRQorfTsKKworc3RhdGljIHUzMiBCdWZmZXIyU2l6ZXNbTUFYX1NUUkVBTV0gPSB7CisJTUFYX1ZCSV9CVUZGRVJfU0laRSwKKwlNQVhfVkJJX0JVRkZFUl9TSVpFLAorCTAsCisJMCwKKwkwCit9OworCisKK3N0YXRpYyBpbnQgQWxsb2NDb21tb25CdWZmZXJzKHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCWludCBzdGF0dXMgPSAwLCBpOworCisJZGV2LT5GV0ludGVyZmFjZUJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGNpX2RldiwgNDA5NiwKKwkJCQkJCSAgICAgJmRldi0+UEFGV0ludGVyZmFjZUJ1ZmZlcik7CisJaWYgKCFkZXYtPkZXSW50ZXJmYWNlQnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkZXYtPmhvc3R0b25nZW5lID0gZGV2LT5GV0ludGVyZmFjZUJ1ZmZlcjsKKwlkZXYtPm5nZW5ldG9ob3N0ID0gZGV2LT5GV0ludGVyZmFjZUJ1ZmZlciArIDI1NjsKKwlkZXYtPkV2ZW50QnVmZmVyID0gZGV2LT5GV0ludGVyZmFjZUJ1ZmZlciArIDUxMjsKKworCWRldi0+T3ZlcmZsb3dCdWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBjaV9kZXYsCisJCQkJCQkgICBPVkVSRkxPV19CVUZGRVJfU0laRSwKKwkJCQkJCSAgICZkZXYtPlBBT3ZlcmZsb3dCdWZmZXIpOworCWlmICghZGV2LT5PdmVyZmxvd0J1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGRldi0+T3ZlcmZsb3dCdWZmZXIsIDAsIE9WRVJGTE9XX0JVRkZFUl9TSVpFKTsKKworCWZvciAoaSA9IFNUUkVBTV9WSURFT0lOMTsgaSA8IE1BWF9TVFJFQU07IGkrKykgeworCQlpbnQgdHlwZSA9IGRldi0+Y2FyZF9pbmZvLT5pb190eXBlW2ldOworCisJCWRldi0+Y2hhbm5lbFtpXS5TdGF0ZSA9IEtTU1RBVEVfU1RPUDsKKworCQlpZiAodHlwZSAmIChOR0VORV9JT19UViB8IE5HRU5FX0lPX0hEVFYgfCBOR0VORV9JT19BSU4pKSB7CisJCQlzdGF0dXMgPSBjcmVhdGVfcmluZ19idWZmZXIoZGV2LT5wY2lfZGV2LAorCQkJCQkJICAgICZkZXYtPmNoYW5uZWxbaV0uUmluZ0J1ZmZlciwKKwkJCQkJCSAgICBSaW5nQnVmZmVyU2l6ZXNbaV0pOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJYnJlYWs7CisKKwkJCWlmICh0eXBlICYgKE5HRU5FX0lPX1RWIHwgTkdFTkVfSU9fQUlOKSkgeworCQkJCXN0YXR1cyA9IEFsbG9jYXRlUmluZ0J1ZmZlcnMoZGV2LT5wY2lfZGV2LAorCQkJCQkJCSAgICAgZGV2LT4KKwkJCQkJCQkgICAgIFBBT3ZlcmZsb3dCdWZmZXIsCisJCQkJCQkJICAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJCSAgICAgUmluZ0J1ZmZlciwKKwkJCQkJCQkgICAgIEJ1ZmZlcjFTaXplc1tpXSwKKwkJCQkJCQkgICAgIEJ1ZmZlcjJTaXplc1tpXSk7CisJCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmICh0eXBlICYgTkdFTkVfSU9fSERUVikgeworCQkJCXN0YXR1cyA9IEFsbG9jYXRlUmluZ0J1ZmZlcnMoZGV2LT5wY2lfZGV2LAorCQkJCQkJCSAgICAgZGV2LT4KKwkJCQkJCQkgICAgIFBBT3ZlcmZsb3dCdWZmZXIsCisJCQkJCQkJICAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJCSAgICAgUmluZ0J1ZmZlciwKKwkJCQkJCQkgICBNQVhfSERUVl9CVUZGRVJfU0laRSwKKwkJCQkJCQkgICAgIDApOworCQkJCWlmIChzdGF0dXMgPCAwKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICh0eXBlICYgKE5HRU5FX0lPX1RTSU4gfCBOR0VORV9JT19UU09VVCkpIHsKKworCQkJc3RhdHVzID0gY3JlYXRlX3JpbmdfYnVmZmVyKGRldi0+cGNpX2RldiwKKwkJCQkJCSAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJICAgIFRTUmluZ0J1ZmZlciwgUklOR19TSVpFX1RTKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWJyZWFrOworCisJCQlzdGF0dXMgPSBBbGxvY2F0ZVJpbmdCdWZmZXJzKGRldi0+cGNpX2RldiwKKwkJCQkJCSAgICAgZGV2LT5QQU92ZXJmbG93QnVmZmVyLAorCQkJCQkJICAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJICAgICBUU1JpbmdCdWZmZXIsCisJCQkJCQkgICAgIE1BWF9UU19CVUZGRVJfU0laRSwgMCk7CisJCQlpZiAoc3RhdHVzKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHR5cGUgJiBOR0VORV9JT19UU09VVCkgeworCQkJc3RhdHVzID0gY3JlYXRlX3JpbmdfYnVmZmVyKGRldi0+cGNpX2RldiwKKwkJCQkJCSAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJICAgIFRTSWRsZUJ1ZmZlciwgMSk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlicmVhazsKKwkJCXN0YXR1cyA9IEFsbG9jYXRlUmluZ0J1ZmZlcnMoZGV2LT5wY2lfZGV2LAorCQkJCQkJICAgICBkZXYtPlBBT3ZlcmZsb3dCdWZmZXIsCisJCQkJCQkgICAgICZkZXYtPmNoYW5uZWxbaV0uCisJCQkJCQkgICAgIFRTSWRsZUJ1ZmZlciwKKwkJCQkJCSAgICAgTUFYX1RTX0JVRkZFUl9TSVpFLCAwKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJYnJlYWs7CisJCQlGaWxsVFNJZGxlQnVmZmVyKCZkZXYtPmNoYW5uZWxbaV0uVFNJZGxlQnVmZmVyLAorCQkJCQkgJmRldi0+Y2hhbm5lbFtpXS5UU1JpbmdCdWZmZXIpOworCQl9CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIG5nZW5lX3JlbGVhc2VfYnVmZmVycyhzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlpZiAoZGV2LT5pb21lbSkKKwkJaW91bm1hcChkZXYtPmlvbWVtKTsKKwlmcmVlX2NvbW1vbl9idWZmZXJzKGRldik7CisJdmZyZWUoZGV2LT50c291dF9idWYpOworCXZmcmVlKGRldi0+YWluX2J1Zik7CisJdmZyZWUoZGV2LT52aW5fYnVmKTsKKwl2ZnJlZShkZXYpOworfQorCitzdGF0aWMgaW50IG5nZW5lX2dldF9idWZmZXJzKHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCWlmIChBbGxvY0NvbW1vbkJ1ZmZlcnMoZGV2KSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGRldi0+Y2FyZF9pbmZvLT5pb190eXBlWzRdICYgTkdFTkVfSU9fVFNPVVQpIHsKKwkJZGV2LT50c291dF9idWYgPSB2bWFsbG9jKFRTT1VUX0JVRl9TSVpFKTsKKwkJaWYgKCFkZXYtPnRzb3V0X2J1ZikKKwkJCXJldHVybiAtRU5PTUVNOworCQlkdmJfcmluZ2J1ZmZlcl9pbml0KCZkZXYtPnRzb3V0X3JidWYsCisJCQkJICAgIGRldi0+dHNvdXRfYnVmLCBUU09VVF9CVUZfU0laRSk7CisJfQorCWlmIChkZXYtPmNhcmRfaW5mby0+aW9fdHlwZVsyXSAmIE5HRU5FX0lPX0FJTikgeworCQlkZXYtPmFpbl9idWYgPSB2bWFsbG9jKEFJTl9CVUZfU0laRSk7CisJCWlmICghZGV2LT5haW5fYnVmKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWR2Yl9yaW5nYnVmZmVyX2luaXQoJmRldi0+YWluX3JidWYsIGRldi0+YWluX2J1ZiwgQUlOX0JVRl9TSVpFKTsKKwl9CisJaWYgKGRldi0+Y2FyZF9pbmZvLT5pb190eXBlWzBdICYgTkdFTkVfSU9fSERUVikgeworCQlkZXYtPnZpbl9idWYgPSB2bWFsbG9jKFZJTl9CVUZfU0laRSk7CisJCWlmICghZGV2LT52aW5fYnVmKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWR2Yl9yaW5nYnVmZmVyX2luaXQoJmRldi0+dmluX3JidWYsIGRldi0+dmluX2J1ZiwgVklOX0JVRl9TSVpFKTsKKwl9CisJZGV2LT5pb21lbSA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpX2RldiwgMCksCisJCQkgICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2lfZGV2LCAwKSk7CisJaWYgKCFkZXYtPmlvbWVtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuZ2VuZV9pbml0KHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCWludCBpOworCisJdGFza2xldF9pbml0KCZkZXYtPmV2ZW50X3Rhc2tsZXQsIGV2ZW50X3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWRldik7CisKKwltZW1zZXRfaW8oZGV2LT5pb21lbSArIDB4YzAwMCwgMHgwMCwgMHgyMjApOworCW1lbXNldF9pbyhkZXYtPmlvbWVtICsgMHhjNDAwLCAweDAwLCAweDEwMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1NUUkVBTTsgaSsrKSB7CisJCWRldi0+Y2hhbm5lbFtpXS5kZXYgPSBkZXY7CisJCWRldi0+Y2hhbm5lbFtpXS5udW1iZXIgPSBpOworCX0KKworCWRldi0+ZndfaW50ZXJmYWNlX3ZlcnNpb24gPSAwOworCisJbmd3cml0ZWwoMCwgTkdFTkVfSU5UX0VOQUJMRSk7CisKKwlkZXYtPmljb3VudHMgPSBuZ3JlYWRsKE5HRU5FX0lOVF9DT1VOVFMpOworCisJZGV2LT5kZXZpY2VfdmVyc2lvbiA9IG5ncmVhZGwoREVWX1ZFUikgJiAweDBmOworCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogRGV2aWNlIHZlcnNpb24gJWRcbiIsCisJICAgICAgIGRldi0+ZGV2aWNlX3ZlcnNpb24pOworfQorCitzdGF0aWMgaW50IG5nZW5lX2xvYWRfZmlybShzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwl1MzIgc2l6ZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKKwl1OCAqbmdlbmVfZnc7CisJY2hhciAqZndfbmFtZTsKKwlpbnQgZXJyLCB2ZXJzaW9uOworCisJdmVyc2lvbiA9IGRldi0+Y2FyZF9pbmZvLT5md192ZXJzaW9uOworCisJc3dpdGNoICh2ZXJzaW9uKSB7CisJZGVmYXVsdDoKKwljYXNlIDE1OgorCQl2ZXJzaW9uID0gMTU7CisJCXNpemUgPSAyMzQ2NjsKKwkJZndfbmFtZSA9ICJuZ2VuZV8xNS5mdyI7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXNpemUgPSAyMzQ5ODsKKwkJZndfbmFtZSA9ICJuZ2VuZV8xNi5mdyI7CisJCWJyZWFrOworCWNhc2UgMTc6CisJCXNpemUgPSAyNDQ0NjsKKwkJZndfbmFtZSA9ICJuZ2VuZV8xNy5mdyI7CisJCWJyZWFrOworCX0KKworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgJmRldi0+cGNpX2Rldi0+ZGV2KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FCisJCQkiOiBDb3VsZCBub3QgbG9hZCBmaXJtd2FyZSBmaWxlICVzLlxuIiwgZndfbmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUKKwkJCSI6IENvcHkgJXMgdG8geW91ciBob3RwbHVnIGRpcmVjdG9yeSFcbiIsIGZ3X25hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChzaXplICE9IGZ3LT5zaXplKSB7CisJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRQorCQkJIjogRmlybXdhcmUgJXMgaGFzIGludmFsaWQgc2l6ZSEiLCBmd19uYW1lKTsKKwkJZXJyID0gLTE7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRQorCQkJIjogTG9hZGluZyBmaXJtd2FyZSBmaWxlICVzLlxuIiwgZndfbmFtZSk7CisJCW5nZW5lX2Z3ID0gKHU4ICopIGZ3LT5kYXRhOworCQllcnIgPSBuZ2VuZV9jb21tYW5kX2xvYWRfZmlybXdhcmUoZGV2LCBuZ2VuZV9mdywgc2l6ZSk7CisJfQorCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBuZ2VuZV9zdG9wKHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCWRvd24oJmRldi0+Y21kX211dGV4KTsKKwlpMmNfZGVsX2FkYXB0ZXIoJihkZXYtPmNoYW5uZWxbMF0uaTJjX2FkYXB0ZXIpKTsKKwlpMmNfZGVsX2FkYXB0ZXIoJihkZXYtPmNoYW5uZWxbMV0uaTJjX2FkYXB0ZXIpKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9JTlRfRU5BQkxFKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9DT01NQU5EKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9DT01NQU5EX0hJKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9TVEFUVVMpOworCW5nd3JpdGVsKDAsIE5HRU5FX1NUQVRVU19ISSk7CisJbmd3cml0ZWwoMCwgTkdFTkVfRVZFTlQpOworCW5nd3JpdGVsKDAsIE5HRU5FX0VWRU5UX0hJKTsKKwlmcmVlX2lycShkZXYtPnBjaV9kZXYtPmlycSwgZGV2KTsKK30KKworc3RhdGljIGludCBuZ2VuZV9zdGFydChzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlpbnQgc3RhdDsKKwlpbnQgaTsKKworCXBjaV9zZXRfbWFzdGVyKGRldi0+cGNpX2Rldik7CisJbmdlbmVfaW5pdChkZXYpOworCisJc3RhdCA9IHJlcXVlc3RfaXJxKGRldi0+cGNpX2Rldi0+aXJxLCBpcnFfaGFuZGxlciwKKwkJCSAgIElSUUZfU0hBUkVELCAibkdlbmUiLAorCQkJICAgKHZvaWQgKilkZXYpOworCWlmIChzdGF0IDwgMCkKKwkJcmV0dXJuIHN0YXQ7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPmNtZF93cSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT50eF93cSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5yeF93cSk7CisJc2VtYV9pbml0KCZkZXYtPmNtZF9tdXRleCwgMSk7CisJc2VtYV9pbml0KCZkZXYtPnN0cmVhbV9tdXRleCwgMSk7CisJc2VtYV9pbml0KCZkZXYtPnBsbF9tdXRleCwgMSk7CisJc2VtYV9pbml0KCZkZXYtPmkyY19zd2l0Y2hfbXV0ZXgsIDEpOworCXNwaW5fbG9ja19pbml0KCZkZXYtPmNtZF9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1NUUkVBTTsgaSsrKQorCQlzcGluX2xvY2tfaW5pdCgmZGV2LT5jaGFubmVsW2ldLnN0YXRlX2xvY2spOworCW5nd3JpdGVsKDEsIFRJTUVTVEFNUFMpOworCisJbmd3cml0ZWwoMSwgTkdFTkVfSU5UX0VOQUJMRSk7CisKKwlzdGF0ID0gbmdlbmVfbG9hZF9maXJtKGRldik7CisJaWYgKHN0YXQgPCAwKQorCQlnb3RvIGZhaWw7CisKKwlzdGF0ID0gbmdlbmVfaTJjX2luaXQoZGV2LCAwKTsKKwlpZiAoc3RhdCA8IDApCisJCWdvdG8gZmFpbDsKKworCXN0YXQgPSBuZ2VuZV9pMmNfaW5pdChkZXYsIDEpOworCWlmIChzdGF0IDwgMCkKKwkJZ290byBmYWlsOworCisJaWYgKGRldi0+Y2FyZF9pbmZvLT5md192ZXJzaW9uID09IDE3KSB7CisJCXU4IHRzaW40X2NvbmZpZ1s2XSA9IHsKKwkJCTMwNzIgLyA2NCwgMzA3MiAvIDY0LCAwLCAzMDcyIC8gNjQsIDMwNzIgLyA2NCwgMH07CisJCXU4IGRlZmF1bHRfY29uZmlnWzZdID0geworCQkJNDA5NiAvIDY0LCA0MDk2IC8gNjQsIDAsIDIwNDggLyA2NCwgMjA0OCAvIDY0LCAwfTsKKwkJdTggKmJjb25mID0gZGVmYXVsdF9jb25maWc7CisKKwkJaWYgKGRldi0+Y2FyZF9pbmZvLT5pb190eXBlWzNdID09IE5HRU5FX0lPX1RTSU4pCisJCQliY29uZiA9IHRzaW40X2NvbmZpZzsKKwkJZHByaW50ayhLRVJOX0RFQlVHIERFVklDRV9OQU1FICI6IEZXIDE3IGJ1ZmZlciBjb25maWdcbiIpOworCQlzdGF0ID0gbmdlbmVfY29tbWFuZF9jb25maWdfZnJlZV9idWYoZGV2LCBiY29uZik7CisJfSBlbHNlIHsKKwkJaW50IGJjb25mID0gQlVGRkVSX0NPTkZJR180NDIyOworCQlpZiAoZGV2LT5jYXJkX2luZm8tPmlvX3R5cGVbM10gPT0gTkdFTkVfSU9fVFNJTikKKwkJCWJjb25mID0gQlVGRkVSX0NPTkZJR18zMzMzOworCQlzdGF0ID0gbmdlbmVfY29tbWFuZF9jb25maWdfYnVmKGRldiwgYmNvbmYpOworCX0KKwlyZXR1cm4gc3RhdDsKK2ZhaWw6CisJbmd3cml0ZWwoMCwgTkdFTkVfSU5UX0VOQUJMRSk7CisJZnJlZV9pcnEoZGV2LT5wY2lfZGV2LT5pcnEsIGRldik7CisJcmV0dXJuIHN0YXQ7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFN3aXRjaCBjb250cm9sIChJMkMgZ2F0ZXMsIGV0Yy4pICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZW1vZC90dW5lciBhdHRhY2htZW50ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHR1bmVyX2F0dGFjaF9zdHY2MTEwKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBzdHYwOTB4X2NvbmZpZyAqZmVjb25mID0gKHN0cnVjdCBzdHYwOTB4X2NvbmZpZyAqKQorCQljaGFuLT5kZXYtPmNhcmRfaW5mby0+ZmVfY29uZmlnW2NoYW4tPm51bWJlcl07CisJc3RydWN0IHN0djYxMTB4X2NvbmZpZyAqdHVuZXJjb25mID0gKHN0cnVjdCBzdHY2MTEweF9jb25maWcgKikKKwkJY2hhbi0+ZGV2LT5jYXJkX2luZm8tPnR1bmVyX2NvbmZpZ1tjaGFuLT5udW1iZXJdOworCXN0cnVjdCBzdHY2MTEweF9kZXZjdGwgKmN0bDsKKworCWN0bCA9IGR2Yl9hdHRhY2goc3R2NjExMHhfYXR0YWNoLCBjaGFuLT5mZSwgdHVuZXJjb25mLAorCQkJICZjaGFuLT5pMmNfYWRhcHRlcik7CisJaWYgKGN0bCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUglERVZJQ0VfTkFNRSAiOiBObyBTVFY2MTEwWCBmb3VuZCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlmZWNvbmYtPnR1bmVyX2luaXQgICAgICAgICAgPSBjdGwtPnR1bmVyX2luaXQ7CisJZmVjb25mLT50dW5lcl9zZXRfbW9kZSAgICAgID0gY3RsLT50dW5lcl9zZXRfbW9kZTsKKwlmZWNvbmYtPnR1bmVyX3NldF9mcmVxdWVuY3kgPSBjdGwtPnR1bmVyX3NldF9mcmVxdWVuY3k7CisJZmVjb25mLT50dW5lcl9nZXRfZnJlcXVlbmN5ID0gY3RsLT50dW5lcl9nZXRfZnJlcXVlbmN5OworCWZlY29uZi0+dHVuZXJfc2V0X2JhbmR3aWR0aCA9IGN0bC0+dHVuZXJfc2V0X2JhbmR3aWR0aDsKKwlmZWNvbmYtPnR1bmVyX2dldF9iYW5kd2lkdGggPSBjdGwtPnR1bmVyX2dldF9iYW5kd2lkdGg7CisJZmVjb25mLT50dW5lcl9zZXRfYmJnYWluICAgID0gY3RsLT50dW5lcl9zZXRfYmJnYWluOworCWZlY29uZi0+dHVuZXJfZ2V0X2JiZ2FpbiAgICA9IGN0bC0+dHVuZXJfZ2V0X2JiZ2FpbjsKKwlmZWNvbmYtPnR1bmVyX3NldF9yZWZjbGsgICAgPSBjdGwtPnR1bmVyX3NldF9yZWZjbGs7CisJZmVjb25mLT50dW5lcl9nZXRfc3RhdHVzICAgID0gY3RsLT50dW5lcl9nZXRfc3RhdHVzOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBkZW1vZF9hdHRhY2hfc3R2MDkwMChzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3Qgc3R2MDkweF9jb25maWcgKmZlY29uZiA9IChzdHJ1Y3Qgc3R2MDkweF9jb25maWcgKikKKwkJY2hhbi0+ZGV2LT5jYXJkX2luZm8tPmZlX2NvbmZpZ1tjaGFuLT5udW1iZXJdOworCisJY2hhbi0+ZmUgPSBkdmJfYXR0YWNoKHN0djA5MHhfYXR0YWNoLAorCQkJZmVjb25mLAorCQkJJmNoYW4tPmkyY19hZGFwdGVyLAorCQkJY2hhbi0+bnVtYmVyID09IDAgPyBTVFYwOTB4X0RFTU9EVUxBVE9SXzAgOgorCQkJCQkgICAgU1RWMDkweF9ERU1PRFVMQVRPUl8xKTsKKwlpZiAoY2hhbi0+ZmUgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIJREVWSUNFX05BTUUgIjogTm8gU1RWMDkwMCBmb3VuZCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIWR2Yl9hdHRhY2gobG5iaDI0X2F0dGFjaCwgY2hhbi0+ZmUsICZjaGFuLT5pMmNfYWRhcHRlciwgMCwKKwkJCTAsIGNoYW4tPmRldi0+Y2FyZF9pbmZvLT5sbmJbY2hhbi0+bnVtYmVyXSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IE5vIExOQkgyNCBmb3VuZCFcbiIpOworCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGNoYW4tPmZlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgcmVsZWFzZV9jaGFubmVsKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4ID0gJmNoYW4tPmRlbXV4OworCXN0cnVjdCBuZ2VuZSAqZGV2ID0gY2hhbi0+ZGV2OworCXN0cnVjdCBuZ2VuZV9pbmZvICpuaSA9IGRldi0+Y2FyZF9pbmZvOworCWludCBpbyA9IG5pLT5pb190eXBlW2NoYW4tPm51bWJlcl07CisKKyNpZmRlZiBDT01NQU5EX1RJTUVPVVRfV09SS0FST1VORAorCWlmIChjaGFuLT5ydW5uaW5nKQorCQlzZXRfdHJhbnNmZXIoY2hhbiwgMCk7CisjZW5kaWYKKworCXRhc2tsZXRfa2lsbCgmY2hhbi0+ZGVtdXhfdGFza2xldCk7CisKKwlpZiAoaW8gJiAoTkdFTkVfSU9fVFNJTiB8IE5HRU5FX0lPX1RTT1VUKSkgeworCQlpZiAoY2hhbi0+ZmUpIHsKKwkJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGNoYW4tPmZlKTsKKwkJCWR2Yl9mcm9udGVuZF9kZXRhY2goY2hhbi0+ZmUpOworCQkJY2hhbi0+ZmUgPSAwOworCQl9CisJCWR2YmRlbXV4LT5kbXguY2xvc2UoJmR2YmRlbXV4LT5kbXgpOworCQlkdmJkZW11eC0+ZG14LnJlbW92ZV9mcm9udGVuZCgmZHZiZGVtdXgtPmRteCwKKwkJCQkJICAgICAgJmNoYW4tPmh3X2Zyb250ZW5kKTsKKwkJZHZiZGVtdXgtPmRteC5yZW1vdmVfZnJvbnRlbmQoJmR2YmRlbXV4LT5kbXgsCisJCQkJCSAgICAgICZjaGFuLT5tZW1fZnJvbnRlbmQpOworCQlkdmJfZG14ZGV2X3JlbGVhc2UoJmNoYW4tPmRteGRldik7CisJCWR2Yl9kbXhfcmVsZWFzZSgmY2hhbi0+ZGVtdXgpOworCisJCWlmIChjaGFuLT5udW1iZXIgPT0gMCB8fCAhb25lX2FkYXB0ZXIpCisJCQlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZkZXYtPmFkYXB0ZXJbY2hhbi0+bnVtYmVyXSk7CisJfQorfQorCitzdGF0aWMgaW50IGluaXRfY2hhbm5lbChzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbikKK3sKKwlpbnQgcmV0ID0gMCwgbnIgPSBjaGFuLT5udW1iZXI7CisJc3RydWN0IGR2Yl9hZGFwdGVyICphZGFwdGVyID0gTlVMTDsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eCA9ICZjaGFuLT5kZW11eDsKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3QgbmdlbmVfaW5mbyAqbmkgPSBkZXYtPmNhcmRfaW5mbzsKKwlpbnQgaW8gPSBuaS0+aW9fdHlwZVtucl07CisKKwl0YXNrbGV0X2luaXQoJmNoYW4tPmRlbXV4X3Rhc2tsZXQsIGRlbXV4X3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWNoYW4pOworCWNoYW4tPnVzZXJzID0gMDsKKwljaGFuLT50eXBlID0gaW87CisJY2hhbi0+bW9kZSA9IGNoYW4tPnR5cGU7CS8qIGZvciBub3cgb25seSBvbmUgbW9kZSAqLworCisJaWYgKGlvICYgKE5HRU5FX0lPX1RTSU4gfCBOR0VORV9JT19UU09VVCkpIHsKKwkJaWYgKG5yID49IFNUUkVBTV9BVURJT0lOMSkKKwkJCWNoYW4tPkRhdGFGb3JtYXRGbGFncyA9IERGX1NXQVAzMjsKKwkJaWYgKG5yID09IDAgfHwgIW9uZV9hZGFwdGVyKSB7CisJCQlhZGFwdGVyID0gJmRldi0+YWRhcHRlcltucl07CisJCQlyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcihhZGFwdGVyLCAibkdlbmUiLAorCQkJCQkJICAgVEhJU19NT0RVTEUsCisJCQkJCQkgICAmY2hhbi0+ZGV2LT5wY2lfZGV2LT5kZXYsCisJCQkJCQkgICBhZGFwdGVyX25yKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyID0gJmRldi0+YWRhcHRlclswXTsKKwkJfQorCisJCXJldCA9IG15X2R2Yl9kbXhfdHNfY2FyZF9pbml0KGR2YmRlbXV4LCAiU1cgZGVtdXgiLAorCQkJCQkgICAgICBuZ2VuZV9zdGFydF9mZWVkLAorCQkJCQkgICAgICBuZ2VuZV9zdG9wX2ZlZWQsIGNoYW4pOworCQlyZXQgPSBteV9kdmJfZG14ZGV2X3RzX2NhcmRfaW5pdCgmY2hhbi0+ZG14ZGV2LCAmY2hhbi0+ZGVtdXgsCisJCQkJCQkgJmNoYW4tPmh3X2Zyb250ZW5kLAorCQkJCQkJICZjaGFuLT5tZW1fZnJvbnRlbmQsIGFkYXB0ZXIpOworCX0KKworCWlmIChpbyAmIE5HRU5FX0lPX1RTSU4pIHsKKwkJY2hhbi0+ZmUgPSBOVUxMOworCQlpZiAobmktPmRlbW9kX2F0dGFjaFtucl0pCisJCQluaS0+ZGVtb2RfYXR0YWNoW25yXShjaGFuKTsKKwkJaWYgKGNoYW4tPmZlKSB7CisJCQlpZiAoZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKGFkYXB0ZXIsIGNoYW4tPmZlKSA8IDApIHsKKwkJCQlpZiAoY2hhbi0+ZmUtPm9wcy5yZWxlYXNlKQorCQkJCQljaGFuLT5mZS0+b3BzLnJlbGVhc2UoY2hhbi0+ZmUpOworCQkJCWNoYW4tPmZlID0gTlVMTDsKKwkJCX0KKwkJfQorCQlpZiAoY2hhbi0+ZmUgJiYgbmktPnR1bmVyX2F0dGFjaFtucl0pCisJCQlpZiAobmktPnR1bmVyX2F0dGFjaFtucl0gKGNoYW4pIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRQorCQkJCSAgICAgICAiOiBUdW5lciBhdHRhY2ggZmFpbGVkIG9uIGNoYW5uZWwgJWQhXG4iLAorCQkJCSAgICAgICBucik7CisJCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9jaGFubmVscyhzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfU1RSRUFNOyBpKyspIHsKKwkJaWYgKGluaXRfY2hhbm5lbCgmZGV2LT5jaGFubmVsW2ldKSA8IDApIHsKKwkJCWZvciAoaiA9IGkgLSAxOyBqID49IDA7IGotLSkKKwkJCQlyZWxlYXNlX2NoYW5uZWwoJmRldi0+Y2hhbm5lbFtqXSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZGV2aWNlIHByb2JlL3JlbW92ZSBjYWxscyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgX19kZXZleGl0IG5nZW5lX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IChzdHJ1Y3QgbmdlbmUgKilwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CisKKwl0YXNrbGV0X2tpbGwoJmRldi0+ZXZlbnRfdGFza2xldCk7CisJZm9yIChpID0gTUFYX1NUUkVBTSAtIDE7IGkgPj0gMDsgaS0tKQorCQlyZWxlYXNlX2NoYW5uZWwoJmRldi0+Y2hhbm5lbFtpXSk7CisJbmdlbmVfc3RvcChkZXYpOworCW5nZW5lX3JlbGVhc2VfYnVmZmVycyhkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCAwKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG5nZW5lX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAorCQkJCSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IG5nZW5lICpkZXY7CisJaW50IHN0YXQgPSAwOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXYgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgbmdlbmUpKTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJc3RhdCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDA7CisJfQorCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgbmdlbmUpKTsKKworCWRldi0+cGNpX2RldiA9IHBjaV9kZXY7CisJZGV2LT5jYXJkX2luZm8gPSAoc3RydWN0IG5nZW5lX2luZm8gKilpZC0+ZHJpdmVyX2RhdGE7CisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBGb3VuZCAlc1xuIiwgZGV2LT5jYXJkX2luZm8tPm5hbWUpOworCisJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIGRldik7CisKKwkvKiBBbGxvYyBidWZmZXJzIGFuZCBzdGFydCBuR2VuZSAqLworCXN0YXQgPSBuZ2VuZV9nZXRfYnVmZmVycyhkZXYpOworCWlmIChzdGF0IDwgMCkKKwkJZ290byBmYWlsMTsKKwlzdGF0ID0gbmdlbmVfc3RhcnQoZGV2KTsKKwlpZiAoc3RhdCA8IDApCisJCWdvdG8gZmFpbDE7CisKKwlkZXYtPmkyY19jdXJyZW50X2J1cyA9IC0xOworCisJLyogUmVnaXN0ZXIgRFZCIGFkYXB0ZXJzIGFuZCBkZXZpY2VzIGZvciBib3RoIGNoYW5uZWxzICovCisJaWYgKGluaXRfY2hhbm5lbHMoZGV2KSA8IDApCisJCWdvdG8gZmFpbDI7CisKKwlyZXR1cm4gMDsKKworZmFpbDI6CisJbmdlbmVfc3RvcChkZXYpOworZmFpbDE6CisJbmdlbmVfcmVsZWFzZV9idWZmZXJzKGRldik7CitmYWlsMDoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7CisJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIDApOworCXJldHVybiBzdGF0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENhcmQgY29uZmlncyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3Qgc3R2MDkweF9jb25maWcgZmVfY2luZVMyID0geworCS5kZXZpY2UgICAgICAgICA9IFNUVjA5MDAsCisJLmRlbW9kX21vZGUgICAgID0gU1RWMDkweF9EVUFMLAorCS5jbGtfbW9kZSAgICAgICA9IFNUVjA5MHhfQ0xLX0VYVCwKKworCS54dGFsICAgICAgICAgICA9IDI3MDAwMDAwLAorCS5hZGRyZXNzICAgICAgICA9IDB4NjgsCisKKwkudHMxX21vZGUgICAgICAgPSBTVFYwOTB4X1RTTU9ERV9TRVJJQUxfUFVOQ1RVUkVELAorCS50czJfbW9kZSAgICAgICA9IFNUVjA5MHhfVFNNT0RFX1NFUklBTF9QVU5DVFVSRUQsCisKKwkucmVwZWF0ZXJfbGV2ZWwgPSBTVFYwOTB4X1JQVExFVkVMXzE2LAorCisJLmFkYzFfcmFuZ2UJPSBTVFYwOTB4X0FEQ18xVnBwLAorCS5hZGMyX3JhbmdlCT0gU1RWMDkweF9BRENfMVZwcCwKKworCS5kaXNlcWNfZW52ZWxvcGVfbW9kZSA9IHRydWUsCit9OworCitzdGF0aWMgc3RydWN0IHN0djYxMTB4X2NvbmZpZyB0dW5lcl9jaW5lUzJfMCA9IHsKKwkuYWRkcgk9IDB4NjAsCisJLnJlZmNsawk9IDI3MDAwMDAwLAorCS5jbGtfZGl2ID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3R2NjExMHhfY29uZmlnIHR1bmVyX2NpbmVTMl8xID0geworCS5hZGRyCT0gMHg2MywKKwkucmVmY2xrCT0gMjcwMDAwMDAsCisJLmNsa19kaXYgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBuZ2VuZV9pbmZvIG5nZW5lX2luZm9fY2luZVMyID0geworCS50eXBlCQk9IE5HRU5FX1NJREVXSU5ERVIsCisJLm5hbWUJCT0gIkxpbnV4NE1lZGlhIGNpbmVTMiBEVkItUzIgVHdpbiBUdW5lciIsCisJLmlvX3R5cGUJPSB7TkdFTkVfSU9fVFNJTiwgTkdFTkVfSU9fVFNJTn0sCisJLmRlbW9kX2F0dGFjaAk9IHtkZW1vZF9hdHRhY2hfc3R2MDkwMCwgZGVtb2RfYXR0YWNoX3N0djA5MDB9LAorCS50dW5lcl9hdHRhY2gJPSB7dHVuZXJfYXR0YWNoX3N0djYxMTAsIHR1bmVyX2F0dGFjaF9zdHY2MTEwfSwKKwkuZmVfY29uZmlnCT0geyZmZV9jaW5lUzIsICZmZV9jaW5lUzJ9LAorCS50dW5lcl9jb25maWcJPSB7JnR1bmVyX2NpbmVTMl8wLCAmdHVuZXJfY2luZVMyXzF9LAorCS5sbmIJCT0gezB4MGIsIDB4MDh9LAorCS50c2YJCT0gezMsIDN9LAorCS5md192ZXJzaW9uCT0gMTUsCit9OworCitzdGF0aWMgc3RydWN0IG5nZW5lX2luZm8gbmdlbmVfaW5mb19zYXRpeHMyID0geworCS50eXBlCQk9IE5HRU5FX1NJREVXSU5ERVIsCisJLm5hbWUJCT0gIk15c3RpcXVlIFNhVGlYLVMyIER1YWwiLAorCS5pb190eXBlCT0ge05HRU5FX0lPX1RTSU4sIE5HRU5FX0lPX1RTSU59LAorCS5kZW1vZF9hdHRhY2gJPSB7ZGVtb2RfYXR0YWNoX3N0djA5MDAsIGRlbW9kX2F0dGFjaF9zdHYwOTAwfSwKKwkudHVuZXJfYXR0YWNoCT0ge3R1bmVyX2F0dGFjaF9zdHY2MTEwLCB0dW5lcl9hdHRhY2hfc3R2NjExMH0sCisJLmZlX2NvbmZpZwk9IHsmZmVfY2luZVMyLCAmZmVfY2luZVMyfSwKKwkudHVuZXJfY29uZmlnCT0geyZ0dW5lcl9jaW5lUzJfMCwgJnR1bmVyX2NpbmVTMl8xfSwKKwkubG5iCQk9IHsweDBiLCAweDA4fSwKKwkudHNmCQk9IHszLCAzfSwKKwkuZndfdmVyc2lvbgk9IDE1LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFBDSSBTdWJzeXN0ZW0gSUQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTkdFTkVfSUQoX3N1YnZlbmQsIF9zdWJkZXYsIF9kcml2ZXJkYXRhKSB7IFwKKwkudmVuZG9yID0gTkdFTkVfVklELCAuZGV2aWNlID0gTkdFTkVfUElELCBcCisJLnN1YnZlbmRvciA9IF9zdWJ2ZW5kLCAuc3ViZGV2aWNlID0gX3N1YmRldiwgXAorCS5kcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmX2RyaXZlcmRhdGEgfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5nZW5lX2lkX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CisJTkdFTkVfSUQoMHgxOGMzLCAweGFiYzMsIG5nZW5lX2luZm9fY2luZVMyKSwKKwlOR0VORV9JRCgweDE4YzMsIDB4YWJjNCwgbmdlbmVfaW5mb19jaW5lUzIpLAorCU5HRU5FX0lEKDB4MThjMywgMHhkYjAxLCBuZ2VuZV9pbmZvX3NhdGl4czIpLAorCXswfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuZ2VuZV9pZF90YmwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEluaXQvRXhpdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IG5nZW5lX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgICAgZW51bSBwY2lfY2hhbm5lbF9zdGF0ZSBzdGF0ZSkKK3sKKwlwcmludGsoS0VSTl9FUlIgREVWSUNFX05BTUUgIjogUENJIGVycm9yXG4iKTsKKwlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fZnJvemVuKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKKwlyZXR1cm4gUENJX0VSU19SRVNVTFRfQ0FOX1JFQ09WRVI7Cit9CisKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IG5nZW5lX2xpbmtfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FICI6IGxpbmsgcmVzZXRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBuZ2VuZV9zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBzbG90IHJlc2V0XG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmdlbmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiByZXN1bWVcbiIpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBuZ2VuZV9lcnJvcnMgPSB7CisJLmVycm9yX2RldGVjdGVkID0gbmdlbmVfZXJyb3JfZGV0ZWN0ZWQsCisJLmxpbmtfcmVzZXQgPSBuZ2VuZV9saW5rX3Jlc2V0LAorCS5zbG90X3Jlc2V0ID0gbmdlbmVfc2xvdF9yZXNldCwKKwkucmVzdW1lID0gbmdlbmVfcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nZW5lX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgID0gIm5nZW5lIiwKKwkuaWRfdGFibGUgICAgPSBuZ2VuZV9pZF90YmwsCisJLnByb2JlICAgICAgID0gbmdlbmVfcHJvYmUsCisJLnJlbW92ZSAgICAgID0gX19kZXZleGl0X3AobmdlbmVfcmVtb3ZlKSwKKwkuZXJyX2hhbmRsZXIgPSAmbmdlbmVfZXJyb3JzLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgbW9kdWxlX2luaXRfbmdlbmUodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJuR2VuZSBQQ0lFIGJyaWRnZSBkcml2ZXIsIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IE1pY3JvbmFzXG4iKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbmdlbmVfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyBfX2V4aXQgdm9pZCBtb2R1bGVfZXhpdF9uZ2VuZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbmdlbmVfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1vZHVsZV9pbml0X25nZW5lKTsKK21vZHVsZV9leGl0KG1vZHVsZV9leGl0X25nZW5lKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJuR2VuZSIpOworTU9EVUxFX0FVVEhPUigiTWljcm9uYXMsIFJhbHBoIE1ldHpsZXIsIE1hbmZyZWQgVm9lbGtlbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdlYjI5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLmgKQEAgLTAsMCArMSw4NTkgQEAKKy8qCisgKiBuZ2VuZS5oOiBuR2VuZSBQQ0llIGJyaWRnZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBNaWNyb25hcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgb25seSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKiBPciwgcG9pbnQgeW91ciBicm93c2VyIHRvIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKyNpZm5kZWYgX05HRU5FX0hfCisjZGVmaW5lIF9OR0VORV9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisKKyNpbmNsdWRlICJkbXhkZXYuaCIKKyNpbmNsdWRlICJkdmJkZXYuaCIKKyNpbmNsdWRlICJkdmJfZGVtdXguaCIKKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJkdmJfcmluZ2J1ZmZlci5oIgorCisjZGVmaW5lIE5HRU5FX1ZJRCAgICAgICAweDE4YzMKKyNkZWZpbmUgTkdFTkVfUElEICAgICAgIDB4MDcyMAorCisjaWZuZGVmIFZJREVPX0NBUF9WQzEKKyNkZWZpbmUgVklERU9fQ0FQX0FWQyAgIDEyOAorI2RlZmluZSBWSURFT19DQVBfSDI2NCAgMTI4CisjZGVmaW5lIFZJREVPX0NBUF9WQzEgICAyNTYKKyNkZWZpbmUgVklERU9fQ0FQX1dNVjkgIDI1NgorI2RlZmluZSBWSURFT19DQVBfTVBFRzQgNTEyCisjZW5kaWYKKworZW51bSBTVFJFQU0geworCVNUUkVBTV9WSURFT0lOMSA9IDAsICAgICAgICAvKiBJVFU2NTYgb3IgVFMgSW5wdXQgKi8KKwlTVFJFQU1fVklERU9JTjIsCisJU1RSRUFNX0FVRElPSU4xLCAgICAgICAgICAgIC8qIEkyUyBvciBTUEkgSW5wdXQgKi8KKwlTVFJFQU1fQVVESU9JTjIsCisJU1RSRUFNX0FVRElPT1VULAorCU1BWF9TVFJFQU0KK307CisKK2VudW0gU01PREVfQklUUyB7CisJU01PREVfQVVESU9fU1BESUYgPSAweDIwLAorCVNNT0RFX0FWU1lOQyA9IDB4MTAsCisJU01PREVfVFJBTlNQT1JUX1NUUkVBTSA9IDB4MDgsCisJU01PREVfQVVESU9fQ0FQVFVSRSA9IDB4MDQsCisJU01PREVfVkJJX0NBUFRVUkUgPSAweDAyLAorCVNNT0RFX1ZJREVPX0NBUFRVUkUgPSAweDAxCit9OworCitlbnVtIFNUUkVBTV9GTEFHX0JJVFMgeworCVNGTEFHX0NIUk9NQV9GT1JNQVRfMkNPTVAgID0gMHgwMSwgLyogQ2hyb21hIEZvcm1hdCA6IDIncyBjb21wbGVtZW50ICovCisJU0ZMQUdfQ0hST01BX0ZPUk1BVF9PRkZTRVQgPSAweDAwLCAvKiBDaHJvbWEgRm9ybWF0IDogQmluYXJ5IG9mZnNldCAqLworCVNGTEFHX09SREVSX0xVTUFfQ0hST01BICAgID0gMHgwMiwgLyogQnl0ZSBvcmRlcjogWSxDYixZLENyICovCisJU0ZMQUdfT1JERVJfQ0hST01BX0xVTUEgICAgPSAweDAwLCAvKiBCeXRlIG9yZGVyOiBDYixZLENyLFkgKi8KKwlTRkxBR19DT0xPUkJBUiAgICAgICAgICAgICA9IDB4MDQsIC8qIFNlbGVjdCBjb2xvcmJhciAqLworfTsKKworI2RlZmluZSBQUk9HUkFNX1JPTSAgICAgMHgwMDAwCisjZGVmaW5lIFBST0dSQU1fU1JBTSAgICAweDEwMDAKKyNkZWZpbmUgUEVSSVBIRVJBTFMwICAgIDB4ODAwMAorI2RlZmluZSBQRVJJUEhFUkFMUzEgICAgMHg5MDAwCisjZGVmaW5lIFNIQVJFRF9CVUZGRVIgICAweEMwMDAKKworI2RlZmluZSBIT1NUX1RPX05HRU5FICAgIChTSEFSRURfQlVGRkVSKzB4MDAwMCkKKyNkZWZpbmUgTkdFTkVfVE9fSE9TVCAgICAoU0hBUkVEX0JVRkZFUisweDAxMDApCisjZGVmaW5lIE5HRU5FX0NPTU1BTkQgICAgKFNIQVJFRF9CVUZGRVIrMHgwMjAwKQorI2RlZmluZSBOR0VORV9DT01NQU5EX0hJIChTSEFSRURfQlVGRkVSKzB4MDIwNCkKKyNkZWZpbmUgTkdFTkVfU1RBVFVTICAgICAoU0hBUkVEX0JVRkZFUisweDAyMDgpCisjZGVmaW5lIE5HRU5FX1NUQVRVU19ISSAgKFNIQVJFRF9CVUZGRVIrMHgwMjBDKQorI2RlZmluZSBOR0VORV9FVkVOVCAgICAgIChTSEFSRURfQlVGRkVSKzB4MDIxMCkKKyNkZWZpbmUgTkdFTkVfRVZFTlRfSEkgICAoU0hBUkVEX0JVRkZFUisweDAyMTQpCisjZGVmaW5lIFZBUklBQkxFUyAgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwMjEwKQorCisjZGVmaW5lIE5HRU5FX0lOVF9DT1VOVFMgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwMjYwKQorI2RlZmluZSBOR0VORV9JTlRfRU5BQkxFICAgICAgIChTSEFSRURfQlVGRkVSKzB4MDI2NCkKKyNkZWZpbmUgTkdFTkVfVkJJX0xJTkVfQ09VTlQgICAoU0hBUkVEX0JVRkZFUisweDAyNjgpCisKKyNkZWZpbmUgQlVGRkVSX0dQX1hNSVQgIChTSEFSRURfQlVGRkVSKzB4MDgwMCkKKyNkZWZpbmUgQlVGRkVSX0dQX1JFQ1YgIChTSEFSRURfQlVGRkVSKzB4MDkwMCkKKyNkZWZpbmUgRUVQUk9NX0FSRUEgICAgIChTSEFSRURfQlVGRkVSKzB4MEEwMCkKKworI2RlZmluZSBTR19WX0lOXzEgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQTgwKQorI2RlZmluZSBTR19WQklfMSAgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQjAwKQorI2RlZmluZSBTR19BX0lOXzEgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQjgwKQorI2RlZmluZSBTR19WX0lOXzIgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQzAwKQorI2RlZmluZSBTR19WQklfMiAgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQzgwKQorI2RlZmluZSBTR19BX0lOXzIgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwRDAwKQorI2RlZmluZSBTR19WX09VVCAgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwRDgwKQorI2RlZmluZSBTR19BX09VVDIgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwRTAwKQorCisjZGVmaW5lIERBVEFfQV9JTl8xICAgICAoU0hBUkVEX0JVRkZFUisweDBFODApCisjZGVmaW5lIERBVEFfQV9JTl8yICAgICAoU0hBUkVEX0JVRkZFUisweDBGMDApCisjZGVmaW5lIERBVEFfQV9PVVQgICAgICAoU0hBUkVEX0JVRkZFUisweDBGODApCisjZGVmaW5lIERBVEFfVl9JTl8xICAgICAoU0hBUkVEX0JVRkZFUisweDEwMDApCisjZGVmaW5lIERBVEFfVl9JTl8yICAgICAoU0hBUkVEX0JVRkZFUisweDIwMDApCisjZGVmaW5lIERBVEFfVl9PVVQgICAgICAoU0hBUkVEX0JVRkZFUisweDMwMDApCisKKyNkZWZpbmUgREFUQV9GSUZPX0FSRUEgIChTSEFSRURfQlVGRkVSKzB4MTAwMCkKKworI2RlZmluZSBUSU1FU1RBTVBTICAgICAgMHhBMDAwCisjZGVmaW5lIFNDUkFUQ0hQQUQgICAgICAweEEwODAKKyNkZWZpbmUgRk9SQ0VfSU5UICAgICAgIDB4QTA4OAorI2RlZmluZSBGT1JDRV9OTUkgICAgICAgMHhBMDkwCisjZGVmaW5lIElOVF9TVEFUVVMgICAgICAweEEwQTAKKworI2RlZmluZSBERVZfVkVSICAgICAgICAgMHg5MDA0CisKKyNkZWZpbmUgRldfREVCVUdfREVGQVVMVCAoUFJPR1JBTV9TUkFNKzB4MDBGRikKKworc3RydWN0IFNHX0FERFIgeworCXU2NCBzdGFydDsKKwl1NjQgY3VycjsKKwl1MTYgY3Vycl9wdHI7CisJdTE2IGVsZW1lbnRzOworCXUzMiBwYWRbM107Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBTSEFSRURfTUVNT1JZIHsKKwkvKiBDMDAwICovCisJdTMyIEhvc3RUb05nZW5lWzY0XTsKKworCS8qIEMxMDAgKi8KKwl1MzIgTmdlbmVUb0hvc3RbNjRdOworCisJLyogQzIwMCAqLworCXU2NCBOZ2VuZUNvbW1hbmQ7CisJdTY0IE5nZW5lU3RhdHVzOworCXU2NCBOZ2VuZUV2ZW50OworCisJLyogQzIxMCAqLworCXU4IHBhZDFbMHhjMjYwIC0gMHhjMjE4XTsKKworCS8qIEMyNjAgKi8KKwl1MzIgSW50Q291bnRzOworCXUzMiBJbnRFbmFibGU7CisKKwkvKiBDMjY4ICovCisJdTggcGFkMlsweGQwMDAgLSAweGMyNjhdOworCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBCVUZGRVJfU1RSRUFNX1JFU1VMVFMgeworCXUzMiBDbG9jazsgICAgICAgICAgIC8qIFN0cmVhbSB0aW1lIGluIDEwMG5zIHVuaXRzICovCisJdTE2IFJlbWFpbmluZ0xpbmVzOyAgLyogUmVtYWluaW5nIGxpbmVzIGluIHRoaXMgZmllbGQuCisJCQkJMCBmb3IgY29tcGxldGUgZmllbGQgKi8KKwl1OCAgRmllbGRDb3VudDsgICAgICAvKiBWaWRlbyBmaWVsZCBudW1iZXIgKi8KKwl1OCAgRmxhZ3M7ICAgICAgICAgICAvKiBCaXQgNyA9IERvbmUsIEJpdCA2ID0gc2VlbiwgQml0IDUgPSBvdmVyZmxvdywKKwkJCQlCaXQgMCA9IEZpZWxkSUQgKi8KKwl1MTYgQmxvY2tDb3VudDsgICAgICAvKiBBdWRpbyBibG9jayBjb3VudCAodW51c2VkKSAqLworCXU4ICBSZXNlcnZlZFsyXTsKKwl1MzIgRFRPVXBkYXRlOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCB7CisJdTY0IEFkZHJlc3M7CisJdTMyIExlbmd0aDsKKwl1MzIgUmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBCVUZGRVJfSEVBREVSIHsKKwl1NjQgICAgTmV4dDsKKwlzdHJ1Y3QgQlVGRkVSX1NUUkVBTV9SRVNVTFRTIFNSOworCisJdTMyICAgIE51bWJlcl9vZl9lbnRyaWVzXzE7CisJdTMyICAgIFJlc2VydmVkNTsKKwl1NjQgICAgQWRkcmVzc19vZl9maXJzdF9lbnRyeV8xOworCisJdTMyICAgIE51bWJlcl9vZl9lbnRyaWVzXzI7CisJdTMyICAgIFJlc2VydmVkNzsKKwl1NjQgICAgQWRkcmVzc19vZl9maXJzdF9lbnRyeV8yOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRVZFTlRfQlVGRkVSIHsKKwl1MzIgICAgVGltZVN0YW1wOworCXU4ICAgICBHUElPU3RhdHVzOworCXU4ICAgICBVQVJUU3RhdHVzOworCXU4ICAgICBSWENoYXJhY3RlcjsKKwl1OCAgICAgRXZlbnRTdGF0dXM7CisJdTMyICAgIFJlc2VydmVkWzJdOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCisvKiBGaXJtd2FyZSBjb21tYW5kcy4gKi8KKworZW51bSBPUENPREVTIHsKKwlDTURfTk9QID0gMCwKKwlDTURfRldMT0FEX1BSRVBBUkUgID0gMHgwMSwKKwlDTURfRldMT0FEX0ZJTklTSCAgID0gMHgwMiwKKwlDTURfSTJDX1JFQUQgICAgICAgID0gMHgwMywKKwlDTURfSTJDX1dSSVRFICAgICAgID0gMHgwNCwKKworCUNNRF9JMkNfV1JJVEVfTk9TVE9QID0gMHgwNSwKKwlDTURfSTJDX0NPTlRJTlVFX1dSSVRFID0gMHgwNiwKKwlDTURfSTJDX0NPTlRJTlVFX1dSSVRFX05PU1RPUCA9IDB4MDcsCisKKwlDTURfREVCVUdfT1VUUFVUICAgID0gMHgwOSwKKworCUNNRF9DT05UUk9MICAgICAgICAgPSAweDEwLAorCUNNRF9DT05GSUdVUkVfQlVGRkVSID0gMHgxMSwKKwlDTURfQ09ORklHVVJFX0ZSRUVfQlVGRkVSID0gMHgxMiwKKworCUNNRF9TUElfUkVBRCAgICAgICAgPSAweDEzLAorCUNNRF9TUElfV1JJVEUgICAgICAgPSAweDE0LAorCisJQ01EX01FTV9SRUFEICAgICAgICA9IDB4MjAsCisJQ01EX01FTV9XUklURQkgICAgPSAweDIxLAorCUNNRF9TRlJfUkVBRAkgICAgPSAweDIyLAorCUNNRF9TRlJfV1JJVEUJICAgID0gMHgyMywKKwlDTURfSVJBTV9SRUFECSAgICA9IDB4MjQsCisJQ01EX0lSQU1fV1JJVEUJICAgID0gMHgyNSwKKwlDTURfU0VUX0dQSU9fUElOICAgID0gMHgyNiwKKwlDTURfU0VUX0dQSU9fSU5UICAgID0gMHgyNywKKwlDTURfQ09ORklHVVJFX1VBUlQgID0gMHgyOCwKKwlDTURfV1JJVEVfVUFSVCAgICAgID0gMHgyOSwKKwlNQVhfQ01ECit9OworCitlbnVtIFJFU1BPTlNFUyB7CisJT0sgPSAwLAorCUVSUk9SID0gMQorfTsKKworc3RydWN0IEZXX0hFQURFUiB7CisJdTggT3Bjb2RlOworCXU4IExlbmd0aDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0kyQ19XUklURSB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggRGV2aWNlOworCXU4IERhdGFbMjUwXTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0kyQ19DT05USU5VRV9XUklURSB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggRGF0YVsyNTBdOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfSTJDX1JFQUQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4IERldmljZTsKKwl1OCBEYXRhWzI1Ml07ICAgIC8qIGZvbGxvd2VkIGJ5IHR3byBieXRlcyBvZiByZWFkIGRhdGEgY291bnQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX1NQSV9XUklURSB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggTW9kZVNlbGVjdDsKKwl1OCBEYXRhWzI1MF07Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19TUElfUkVBRCB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggTW9kZVNlbGVjdDsKKwl1OCBEYXRhWzI1Ml07ICAgIC8qIGZvbGxvd2VkIGJ5IHR3byBieXRlcyBvZiByZWFkIGRhdGEgY291bnQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0ZXTE9BRF9QUkVQQVJFIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0ZXTE9BRF9GSU5JU0ggeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXUxNiBBZGRyZXNzOyAgICAgLyogYWRkcmVzcyBvZiBmaW5hbCBibG9jayAqLworCXUxNiBMZW5ndGg7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKKy8qCisgKiBNZWFuaW5nIG9mIEZXX1NUUkVBTV9DT05UUk9MOjpNb2RlIGJpdHM6CisgKiAgQml0IDc6IExvb3BiYWNrIFBFWGluIHRvIFBFWG91dCB1c2luZyBUVk91dCBjaGFubmVsCisgKiAgQml0IDY6IEFWTE9PUAorICogIEJpdCA1OiBBdWRpbyBzZWxlY3Q7IDA9STJTLCAxPVNQRElGCisgKiAgQml0IDQ6IEFWU1lOQworICogIEJpdCAzOiBFbmFibGUgdHJhbnNwb3J0IHN0cmVhbQorICogIEJpdCAyOiBFbmFibGUgYXVkaW8gY2FwdHVyZQorICogIEJpdCAxOiBFbmFibGUgSVRVLVZpZGVvIFZCSSBjYXB0dXJlCisgKiAgQml0IDA6IEVuYWJsZSBJVFUtVmlkZW8gY2FwdHVyZQorICoKKyAqIE1lYW5pbmcgb2YgRldfU1RSRUFNX0NPTlRST0w6OkNvbnRyb2wgYml0cyAoc2VlIFVWSTFfQ1RMKQorICogIEJpdCA3OiBjb250aW51b3VzIGNhcHR1cmUKKyAqICBCaXQgNjogY2FwdHVyZSBvbmUgZmllbGQKKyAqICBCaXQgNTogY2FwdHVyZSBvbmUgZnJhbWUKKyAqICBCaXQgNDogdW51c2VkCisgKiAgQml0IDM6IHN0YXJ0aW5nIGZpZWxkOyAwPW9kZCwgMT1ldmVuCisgKiAgQml0IDI6IHNhbXBsZSBzaXplOyAwPTgtYml0LCAxPTEwLWJpdAorICogIEJpdCAxOiBkYXRhIGZvcm1hdDsgMD1VWVZZLCAxPVlVWTIKKyAqICBCaXQgMDogcmVzZXRzIGJ1ZmZlciBwb2ludGVycworKi8KKworZW51bSBGU0NfTU9ERV9CSVRTIHsKKwlTTU9ERV9MT09QQkFDSyAgICAgICAgICA9IDB4ODAsCisJU01PREVfQVZMT09QICAgICAgICAgICAgPSAweDQwLAorCV9TTU9ERV9BVURJT19TUERJRiAgICAgID0gMHgyMCwKKwlfU01PREVfQVZTWU5DICAgICAgICAgICA9IDB4MTAsCisJX1NNT0RFX1RSQU5TUE9SVF9TVFJFQU0gPSAweDA4LAorCV9TTU9ERV9BVURJT19DQVBUVVJFICAgID0gMHgwNCwKKwlfU01PREVfVkJJX0NBUFRVUkUgICAgICA9IDB4MDIsCisJX1NNT0RFX1ZJREVPX0NBUFRVUkUgICAgPSAweDAxCit9OworCisKKy8qIE1lYW5pbmcgb2YgRldfU1RSRUFNX0NPTlRST0w6OlN0cmVhbSBiaXRzOgorICogQml0IDM6IEF1ZGlvIHNhbXBsZSBjb3VudDogIDAgPSByZWxhdGl2ZSwgMSA9IGFic29sdXRlCisgKiBCaXQgMjogY29sb3IgYmFyIHNlbGVjdDsgMT1jb2xvciBiYXJzLCAwPUNWMyBkZWNvZGVyCisgKiBCaXRzIDEtMDogc3RyZWFtIHNlbGVjdCwgVVZJMSwgVVZJMiwgVFZPVVQKKyAqLworCitzdHJ1Y3QgRldfU1RSRUFNX0NPTlRST0wgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgICBTdHJlYW07ICAgICAgICAgICAgIC8qIFN0cmVhbSBudW1iZXIgKFVWSTEsIFVWSTIsIFRWT1VUKSAqLworCXU4ICAgICBDb250cm9sOyAgICAgICAgICAgIC8qIFZhbHVlIHdyaXR0ZW4gdG8gVVZJMV9DVEwgKi8KKwl1OCAgICAgTW9kZTsgICAgICAgICAgICAgICAvKiBDb250cm9scyBjbG9jayBzb3VyY2UgKi8KKwl1OCAgICAgU2V0dXBEYXRhTGVuOwkgICAvKiBMZW5ndGggb2Ygc2V0dXAgZGF0YSwgTVNCPTEgd3JpdGUKKwkJCQkgICAgICBiYWNrd2FyZHMgKi8KKwl1MTYgICAgQ2FwdHVyZUJsb2NrQ291bnQ7ICAvKiBCbG9ja3MgKGEgMjU2IEJ5dGVzKSB0byBjYXB0dXJlIHBlciBidWZmZXIKKwkJCQkgICAgICBmb3IgVFMgYW5kIEF1ZGlvICovCisJdTY0ICAgIEJ1ZmZlcl9BZGRyZXNzOwkgICAvKiBBZGRyZXNzIG9mIGZpcnN0IGJ1ZmZlciBoZWFkZXIgKi8KKwl1MTYgICAgQnl0ZXNQZXJWaWRlb0xpbmU7CisJdTE2ICAgIE1heExpbmVzUGVyRmllbGQ7CisJdTE2ICAgIE1pbkxpbmVzUGVyRmllbGQ7CisJdTE2ICAgIFJlc2VydmVkXzE7CisJdTE2ICAgIEJ5dGVzUGVyVkJJTGluZTsKKwl1MTYgICAgTWF4VkJJTGluZXNQZXJGaWVsZDsKKwl1MTYgICAgTWluVkJJTGluZXNQZXJGaWVsZDsKKwl1MTYgICAgU2V0dXBEYXRhQWRkcjsgICAgICAvKiBuZ2VuZSByZWxhdGl2ZSBhZGRyZXNzIG9mIHNldHVwIGRhdGEgKi8KKwl1OCAgICAgU2V0dXBEYXRhWzMyXTsgICAgICAvKiBzZXR1cCBkYXRhICovCit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworI2RlZmluZSBBVURJT19CTE9DS19TSVpFICAgIDI1NgorI2RlZmluZSBUU19CTE9DS19TSVpFICAgICAgIDI1NgorCitzdHJ1Y3QgRldfTUVNX1JFQUQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXUxNiAgIGFkZHJlc3M7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19NRU1fV1JJVEUgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXUxNiAgIGFkZHJlc3M7CisJdTggICAgZGF0YTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX1NGUl9JUkFNX1JFQUQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgIGFkZHJlc3M7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19TRlJfSVJBTV9XUklURSB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggICAgYWRkcmVzczsKKwl1OCAgICBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfU0VUX0dQSU9fUElOIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCAgICBzZWxlY3Q7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19TRVRfR1BJT19JTlQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgIHNlbGVjdDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX1NFVF9ERUJVR01PREUgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgZGVidWdfZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19DT05GSUdVUkVfQlVGRkVSUyB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggICBjb25maWc7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK2VudW0gX0JVRkZFUl9DT05GSUdTIHsKKwkvKiA0ayBVVkkxLCA0ayBVVkkyLCAyayBBVUQxLCAyayBBVUQyICAoc3RhbmRhcmQgdXNhZ2UpICovCisJQlVGRkVSX0NPTkZJR180NDIyID0gMCwKKwkvKiAzayBVVkkxLCAzayBVVkkyLCAzayBBVUQxLCAzayBBVUQyICAoNHggVFMgaW5wdXQgdXNhZ2UpICovCisJQlVGRkVSX0NPTkZJR18zMzMzID0gMSwKKwkvKiA4ayBVVkkxLCAwayBVVkkyLCAyayBBVUQxLCAyayBJMlNPdXQgIChIRFRWIGRlY29kZXIgdXNhZ2UpICovCisJQlVGRkVSX0NPTkZJR184MDIyID0gMiwKKwlCVUZGRVJfQ09ORklHX0ZXMTcgPSAyNTUsIC8qIFVzZSBuZXcgRlcgMTcgY29tbWFuZCAqLworfTsKKworc3RydWN0IEZXX0NPTkZJR1VSRV9GUkVFX0JVRkZFUlMgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgVVZJMV9CdWZmZXJMZW5ndGg7CisJdTggICBVVkkyX0J1ZmZlckxlbmd0aDsKKwl1OCAgIFRWT19CdWZmZXJMZW5ndGg7CisJdTggICBBVUQxX0J1ZmZlckxlbmd0aDsKKwl1OCAgIEFVRDJfQnVmZmVyTGVuZ3RoOworCXU4ICAgVFZBX0J1ZmZlckxlbmd0aDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0NPTkZJR1VSRV9VQVJUIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCBVYXJ0Q29udHJvbDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworZW51bSBfVUFSVF9DT05GSUcgeworCV9VQVJUX0JBVURSQVRFXzE5MjAwID0gMCwKKwlfVUFSVF9CQVVEUkFURV85NjAwICA9IDEsCisJX1VBUlRfQkFVRFJBVEVfNDgwMCAgPSAyLAorCV9VQVJUX0JBVURSQVRFXzI0MDAgID0gMywKKwlfVUFSVF9SWF9FTkFCTEUgICAgICA9IDB4NDAsCisJX1VBUlRfVFhfRU5BQkxFICAgICAgPSAweDgwLAorfTsKKworc3RydWN0IEZXX1dSSVRFX1VBUlQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4IERhdGFbMjUyXTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworCitzdHJ1Y3QgbmdlbmVfY29tbWFuZCB7CisJdTMyIGluX2xlbjsKKwl1MzIgb3V0X2xlbjsKKwl1bmlvbiB7CisJCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1s2NF07CisJCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzhbMjU2XTsKKwkJc3RydWN0IEZXX0hFQURFUiAgICAgICAgICAgICAgICAgaGRyOworCQlzdHJ1Y3QgRldfSTJDX1dSSVRFICAgICAgICAgICAgICBJMkNXcml0ZTsKKwkJc3RydWN0IEZXX0kyQ19DT05USU5VRV9XUklURSAgICAgSTJDQ29udGludWVXcml0ZTsKKwkJc3RydWN0IEZXX0kyQ19SRUFEICAgICAgICAgICAgICAgSTJDUmVhZDsKKwkJc3RydWN0IEZXX1NUUkVBTV9DT05UUk9MICAgICAgICAgU3RyZWFtQ29udHJvbDsKKwkJc3RydWN0IEZXX0ZXTE9BRF9QUkVQQVJFICAgICAgICAgRldMb2FkUHJlcGFyZTsKKwkJc3RydWN0IEZXX0ZXTE9BRF9GSU5JU0ggICAgICAgICAgRldMb2FkRmluaXNoOworCQlzdHJ1Y3QgRldfTUVNX1JFQUQJCSBNZW1vcnlSZWFkOworCQlzdHJ1Y3QgRldfTUVNX1dSSVRFCQkgTWVtb3J5V3JpdGU7CisJCXN0cnVjdCBGV19TRlJfSVJBTV9SRUFECQkgU2ZySXJhbVJlYWQ7CisJCXN0cnVjdCBGV19TRlJfSVJBTV9XUklURSAgICAgICAgIFNmcklyYW1Xcml0ZTsKKwkJc3RydWN0IEZXX1NQSV9XUklURSAgICAgICAgICAgICAgU1BJV3JpdGU7CisJCXN0cnVjdCBGV19TUElfUkVBRCAgICAgICAgICAgICAgIFNQSVJlYWQ7CisJCXN0cnVjdCBGV19TRVRfR1BJT19QSU4gICAgICAgICAgIFNldEdwaW9QaW47CisJCXN0cnVjdCBGV19TRVRfR1BJT19JTlQgICAgICAgICAgIFNldEdwaW9JbnQ7CisJCXN0cnVjdCBGV19TRVRfREVCVUdNT0RFICAgICAgICAgIFNldERlYnVnTW9kZTsKKwkJc3RydWN0IEZXX0NPTkZJR1VSRV9CVUZGRVJTICAgICAgQ29uZmlndXJlQnVmZmVyczsKKwkJc3RydWN0IEZXX0NPTkZJR1VSRV9GUkVFX0JVRkZFUlMgQ29uZmlndXJlRnJlZUJ1ZmZlcnM7CisJCXN0cnVjdCBGV19DT05GSUdVUkVfVUFSVCAgICAgICAgIENvbmZpZ3VyZVVhcnQ7CisJCXN0cnVjdCBGV19XUklURV9VQVJUICAgICAgICAgICAgIFdyaXRlVWFydDsKKwl9IGNtZDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworI2RlZmluZSBOR0VORV9JTlRFUkZBQ0VfVkVSU0lPTiAweDEwMworI2RlZmluZSBNQVhfVklERU9fQlVGRkVSX1NJWkUgICAoNDE3NzkyKSAvKiAyODgqMTQ0MCByb3VuZGVkIHVwIHRvIG5leHQgcGFnZSAqLworI2RlZmluZSBNQVhfQVVESU9fQlVGRkVSX1NJWkUgICAgICg4MTkyKSAvKiBHaXZlcyByb29tIGZvciBhYm91dCAyM21zZWNANDhLSHogKi8KKyNkZWZpbmUgTUFYX1ZCSV9CVUZGRVJfU0laRSAgICAgICgyODY3MikgLyogMTE0NCoxOCByb3VuZGVkIHVwIHRvIG5leHQgcGFnZSAqLworI2RlZmluZSBNQVhfVFNfQlVGRkVSX1NJWkUgICAgICAgKDk4MzA0KSAvKiA1MTIqMTg4IHJvdW5kZWQgdXAgdG8gbmV4dCBwYWdlICovCisjZGVmaW5lIE1BWF9IRFRWX0JVRkZFUl9TSVpFICAgKDIwODA3NjgpIC8qIDU0MSoxOTIwKjIgcm91bmRlZCB1cCB0byBuZXh0IHBhZ2UKKwkJCQkJICAgIE1heDogKDE5MjB4MTA4MGk2MCkgKi8KKworI2RlZmluZSBPVkVSRkxPV19CVUZGRVJfU0laRSAgICAoODE5MikKKworI2RlZmluZSBSSU5HX1NJWkVfVklERU8gICAgIDQKKyNkZWZpbmUgUklOR19TSVpFX0FVRElPICAgICA4CisjZGVmaW5lIFJJTkdfU0laRV9UUyAgICAgICAgOAorCisjZGVmaW5lIE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTICA4CisKKyNkZWZpbmUgTUFYX0RNQV9MRU5HVEggKCgoTUFYX1ZJREVPX0JVRkZFUl9TSVpFICsgTUFYX1ZCSV9CVUZGRVJfU0laRSkgKiBcCisJCQlSSU5HX1NJWkVfVklERU8gKiAyKSArIFwKKwkJCShNQVhfQVVESU9fQlVGRkVSX1NJWkUgKiBSSU5HX1NJWkVfQVVESU8gKiAyKSArIFwKKwkJCShNQVhfVFNfQlVGRkVSX1NJWkUgKiBSSU5HX1NJWkVfVFMgKiA0KSArIFwKKwkJCShSSU5HX1NJWkVfVklERU8gKiBQQUdFX1NJWkUgKiAyKSArIFwKKwkJCShSSU5HX1NJWkVfQVVESU8gKiBQQUdFX1NJWkUgKiAyKSArIFwKKwkJCShSSU5HX1NJWkVfVFMgICAgKiBQQUdFX1NJWkUgKiA0KSArIFwKKwkJCSA4ICogUEFHRV9TSVpFICsgT1ZFUkZMT1dfQlVGRkVSX1NJWkUgKyBQQUdFX1NJWkUpCisKKyNkZWZpbmUgRVZFTlRfUVVFVUVfU0laRSAgICAxNgorCisvKiBHYXRoZXJzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgc2luZ2xlIGNoYW5uZWwuICovCisKK3N0cnVjdCBTQnVmZmVySGVhZGVyIHsKKwlzdHJ1Y3QgQlVGRkVSX0hFQURFUiAgIG5nZW5lQnVmZmVyOyAvKiBQaHlzaWNhbCBkZXNjcmlwdG9yICovCisJc3RydWN0IFNCdWZmZXJIZWFkZXIgICpOZXh0OworCXZvaWQgICAgICAgICAgICAgICAgICAqQnVmZmVyMTsKKwlzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCAqc2NMaXN0MTsKKwl2b2lkICAgICAgICAgICAgICAgICAgKkJ1ZmZlcjI7CisJc3RydWN0IEhXX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQgKnNjTGlzdDI7Cit9OworCisvKiBTaXplb2YgU0J1ZmZlckhlYWRlciBhbGlnbmVkIHRvIG5leHQgNjQgQml0IGJvdW5kYXJ5IChodyByZXN0cmljdGlvbikgKi8KKyNkZWZpbmUgU0laRU9GX1NCdWZmZXJIZWFkZXIgKChzaXplb2Yoc3RydWN0IFNCdWZmZXJIZWFkZXIpICsgNjMpICYgfjYzKQorCitlbnVtIEhXU1RBVEUgeworCUhXU1RBVEVfU1RPUCwKKwlIV1NUQVRFX1NUQVJUVVAsCisJSFdTVEFURV9SVU4sCisJSFdTVEFURV9QQVVTRSwKK307CisKK2VudW0gS1NTVEFURSB7CisJS1NTVEFURV9TVE9QLAorCUtTU1RBVEVfQUNRVUlSRSwKKwlLU1NUQVRFX1BBVVNFLAorCUtTU1RBVEVfUlVOLAorfTsKKworc3RydWN0IFNSaW5nQnVmZmVyRGVzY3JpcHRvciB7CisJc3RydWN0IFNCdWZmZXJIZWFkZXIgKkhlYWQ7IC8qIFBvaW50cyB0byBmaXJzdCBidWZmZXIgaW4gcmluZyBidWZmZXIKKwkJCQkgICAgICAgc3RydWN0dXJlKi8KKwl1NjQgICBQQUhlYWQ7ICAgICAgICAgLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBmaXJzdCBidWZmZXIgKi8KKwl1MzIgICBNZW1TaXplOyAgICAgICAgLyogTWVtb3J5IHNpemUgb2YgYWxsb2NhdGVkIHJpbmcgYnVmZmVycworCQkJCSAobmVlZGVkIGZvciBmcmVlaW5nKSAqLworCXUzMiAgIE51bUJ1ZmZlcnM7ICAgICAvKiBOdW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcmluZyAqLworCXUzMiAgIEJ1ZmZlcjFMZW5ndGg7ICAvKiBBbGxvY2F0ZWQgbGVuZ3RoIG9mIEJ1ZmZlciAxICovCisJdTMyICAgQnVmZmVyMkxlbmd0aDsgIC8qIEFsbG9jYXRlZCBsZW5ndGggb2YgQnVmZmVyIDIgKi8KKwl2b2lkICpTQ0xpc3RNZW07ICAgICAgLyogTWVtb3J5IHRvIGhvbGQgc2NhdHRlciBnYXRoZXIgbGlzdHMgZm9yIHRoaXMKKwkJCQkgcmluZyAqLworCXU2NCAgIFBBU0NMaXN0TWVtOyAgICAvKiBQaHlzaWNhbCBhZGRyZXNzICAuLiAqLworCXUzMiAgIFNDTGlzdE1lbVNpemU7ICAvKiBTaXplIG9mIHRoaXMgbWVtb3J5ICovCit9OworCitlbnVtIFNUUkVBTU1PREVGTEFHUyB7CisJU3RyZWFtTW9kZV9OT05FICAgPSAwLCAvKiBTdHJlYW0gbm90IHVzZWQgKi8KKwlTdHJlYW1Nb2RlX0FOQUxPRyA9IDEsIC8qIEFuYWxvZzogU3RyZWFtIDAsMSA9IFZpZGVvLCAyLDMgPSBBdWRpbyAqLworCVN0cmVhbU1vZGVfVFNJTiAgID0gMiwgLyogVHJhbnNwb3J0IHN0cmVhbSBpbnB1dCAoYWxsKSAqLworCVN0cmVhbU1vZGVfSERUViAgID0gNCwgLyogSERUVjogTWF4aW11bSAxOTIweDEwODBwMzAsMTkyMHgxMDgwaTYwCisJCQkJICAob25seSBzdHJlYW0gMCkgKi8KKwlTdHJlYW1Nb2RlX1RTT1VUICA9IDgsIC8qIFRyYW5zcG9ydCBzdHJlYW0gb3V0cHV0IChvbmx5IHN0cmVhbSAzKSAqLworfTsKKworCitlbnVtIEJ1ZmZlckV4Y2hhbmdlRmxhZ3MgeworCUJFRl9FVkVOX0ZJRUxEICAgPSAweDAwMDAwMDAxLAorCUJFRl9DT05USU5VQVRJT04gPSAweDAwMDAwMDAyLAorCUJFRl9NT1JFX0RBVEEgICAgPSAweDAwMDAwMDA0LAorCUJFRl9PVkVSRkxPVyAgICAgPSAweDAwMDAwMDA4LAorCURGX1NXQVAzMiAgICAgICAgPSAweDAwMDEwMDAwLAorfTsKKwordHlwZWRlZiB2b2lkICooSUJ1ZmZlckV4Y2hhbmdlKSh2b2lkICosIHZvaWQgKiwgdTMyLCB1MzIsIHUzMik7CisKK3N0cnVjdCBNSUNJX1NUUkVBTUlORk8geworCUlCdWZmZXJFeGNoYW5nZSAgICAqcEV4Y2hhbmdlOworCUlCdWZmZXJFeGNoYW5nZSAgICAqcEV4Y2hhbmdlVkJJOyAgICAgLyogU2Vjb25kYXJ5IChWQkksIGFuY2lsbGFyeSkgKi8KKwl1OCAgU3RyZWFtOworCXU4ICBGbGFnczsKKwl1OCAgTW9kZTsKKwl1OCAgUmVzZXJ2ZWQ7CisJdTE2IG5MaW5lc1ZpZGVvOworCXUxNiBuQnl0ZXNQZXJMaW5lVmlkZW87CisJdTE2IG5MaW5lc1ZCSTsKKwl1MTYgbkJ5dGVzUGVyTGluZVZCSTsKKwl1MzIgQ2FwdHVyZUxlbmd0aDsgICAgLyogVXNlZCBmb3IgYXVkaW8gYW5kIHRyYW5zcG9ydCBzdHJlYW0gKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU1RSVUNUUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogc291bmQgaGFyZHdhcmUgZGVmaW5pdGlvbiAqLworI2RlZmluZSBNSVhFUl9BRERSX1RWVFVORVIgICAgICAwCisjZGVmaW5lIE1JWEVSX0FERFJfTEFTVCAgICAgICAgIDAKKworc3RydWN0IG5nZW5lX2NoYW5uZWw7CisKKy8qc3RydWN0IHNvdW5kIGNoaXAqLworCitzdHJ1Y3QgbXljaGlwIHsKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHBjaV9kZXYgKnBjaTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCXVuc2lnbmVkIGxvbmcgcG9ydDsKKwlpbnQgaXJxOworCXNwaW5sb2NrX3QgbWl4ZXJfbG9jazsKKwlzcGlubG9ja190IGxvY2s7CisJaW50IG1peGVyX3ZvbHVtZVtNSVhFUl9BRERSX0xBU1QgKyAxXVsyXTsKKwlpbnQgY2FwdHVyZV9zb3VyY2VbTUlYRVJfQUREUl9MQVNUICsgMV1bMl07Cit9OworCisjaWZkZWYgTkdFTkVfVjRMCitzdHJ1Y3QgbmdlbmVfb3ZlcmxheSB7CisJaW50ICAgICAgICAgICAgICAgICAgICB0dm5vcm07CisJc3RydWN0IHY0bDJfcmVjdCAgICAgICB3OworCWVudW0gdjRsMl9maWVsZCAgICAgICAgZmllbGQ7CisJc3RydWN0IHY0bDJfY2xpcCAgICAgICAqY2xpcHM7CisJaW50ICAgICAgICAgICAgICAgICAgICBuY2xpcHM7CisJaW50ICAgICAgICAgICAgICAgICAgICBzZXR1cF9vazsKK307CisKK3N0cnVjdCBuZ2VuZV90dm5vcm0geworCWludCAgIHY0bDJfaWQ7CisJY2hhciAgKm5hbWU7CisJdTE2ICAgc3dpZHRoLCBzaGVpZ2h0OyAvKiBzY2FsZWQgc3RhbmRhcmQgd2lkdGgsIGhlaWdodCAqLworCWludCAgIHR1bmVyX25vcm07CisJaW50ICAgc291bmRzdGQ7Cit9OworCitzdHJ1Y3QgbmdlbmVfdm9wZW4geworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICAgICAgKmNoOworCWVudW0gdjRsMl9wcmlvcml0eSAgICAgICAgIHByaW87CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OworCWludCAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoOworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAgICAgIHZidWZfcTsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgICAgICB2Ymk7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgZm91cmNjOworCWludCAgICAgICAgICAgICAgICAgICAgICAgIHBpY3hjb3VudDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXM7CisJZW51bSB2NGwyX2J1Zl90eXBlICAgICAgICAgdHlwZTsKKwljb25zdCBzdHJ1Y3QgbmdlbmVfZm9ybWF0ICpmbXQ7CisKKwljb25zdCBzdHJ1Y3QgbmdlbmVfZm9ybWF0ICpvdmZtdDsKKwlzdHJ1Y3QgbmdlbmVfb3ZlcmxheSAgICAgICBvdjsKK307CisjZW5kaWYKKworc3RydWN0IG5nZW5lX2NoYW5uZWwgeworCXN0cnVjdCBkZXZpY2UgICAgICAgICBkZXZpY2U7CisJc3RydWN0IGkyY19hZGFwdGVyICAgIGkyY19hZGFwdGVyOworCisJc3RydWN0IG5nZW5lICAgICAgICAgKmRldjsKKwlpbnQgICAgICAgICAgICAgICAgICAgbnVtYmVyOworCWludCAgICAgICAgICAgICAgICAgICB0eXBlOworCWludCAgICAgICAgICAgICAgICAgICBtb2RlOworCisJc3RydWN0IGR2Yl9mcm9udGVuZCAgKmZlOworCXN0cnVjdCBkbXhkZXYgICAgICAgICBkbXhkZXY7CisJc3RydWN0IGR2Yl9kZW11eCAgICAgIGRlbXV4OworCXN0cnVjdCBkbXhfZnJvbnRlbmQgICBod19mcm9udGVuZDsKKwlzdHJ1Y3QgZG14X2Zyb250ZW5kICAgbWVtX2Zyb250ZW5kOworCWludCAgICAgICAgICAgICAgICAgICB1c2VyczsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICAqdjRsX2RldjsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgZGVtdXhfdGFza2xldDsKKworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpuZXh0QnVmZmVyOworCWVudW0gS1NTVEFURSAgICAgICAgICBTdGF0ZTsKKwllbnVtIEhXU1RBVEUgICAgICAgICAgSFdTdGF0ZTsKKwl1OCAgICAgICAgICAgICAgICAgICAgU3RyZWFtOworCXU4ICAgICAgICAgICAgICAgICAgICBGbGFnczsKKwl1OCAgICAgICAgICAgICAgICAgICAgTW9kZTsKKwlJQnVmZmVyRXhjaGFuZ2UgICAgICAqcEJ1ZmZlckV4Y2hhbmdlOworCUlCdWZmZXJFeGNoYW5nZSAgICAgICpwQnVmZmVyRXhjaGFuZ2UyOworCisJc3BpbmxvY2tfdCAgICAgICAgICAgIHN0YXRlX2xvY2s7CisJdTE2ICAgICAgICAgICAgICAgICAgIG5MaW5lczsKKwl1MTYgICAgICAgICAgICAgICAgICAgbkJ5dGVzUGVyTGluZTsKKwl1MTYgICAgICAgICAgICAgICAgICAgblZCSUxpbmVzOworCXUxNiAgICAgICAgICAgICAgICAgICBuQnl0ZXNQZXJWQklMaW5lOworCXUxNiAgICAgICAgICAgICAgICAgICBpdHVtb2RlOworCXUzMiAgICAgICAgICAgICAgICAgICBDYXB0dXJlMUxlbmd0aDsKKwl1MzIgICAgICAgICAgICAgICAgICAgQ2FwdHVyZTJMZW5ndGg7CisJc3RydWN0IFNSaW5nQnVmZmVyRGVzY3JpcHRvciBSaW5nQnVmZmVyOworCXN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgVFNSaW5nQnVmZmVyOworCXN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgVFNJZGxlQnVmZmVyOworCisJdTMyICAgICAgICAgICAgICAgICAgIERhdGFGb3JtYXRGbGFnczsKKworCWludCAgICAgICAgICAgICAgICAgICBBdWRpb0RUT1VwZGF0ZWQ7CisJdTMyICAgICAgICAgICAgICAgICAgIEF1ZGlvRFRPVmFsdWU7CisKKwlpbnQgKCpzZXRfdG9uZSkoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCBmZV9zZWNfdG9uZV9tb2RlX3QpOworCXU4IGxuYmg7CisKKwkvKiBzdHVmZiBmcm9tIGFuYWxvZyBkcml2ZXIgKi8KKworCWludCBtaW5vcjsKKwlzdHJ1Y3QgbXljaGlwICAgICAgICAqbXljaGlwOworCXN0cnVjdCBzbmRfY2FyZCAgICAgICpzb3VuZGNhcmQ7CisJdTggICAgICAgICAgICAgICAgICAgKmV2ZW5idWZmZXI7CisJdTggICAgICAgICAgICAgICAgICAgIGRtYV9vbjsKKwlpbnQgICAgICAgICAgICAgICAgICAgc291bmRzdHJlYW1vbjsKKwlpbnQgICAgICAgICAgICAgICAgICAgYXVkaW9tdXRlOworCWludCAgICAgICAgICAgICAgICAgICBzb3VuZGJ1ZmZpc2FsbG9jYXRlZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgc25kYnVmZmZsYWc7CisJaW50ICAgICAgICAgICAgICAgICAgIHR1bl9yZHk7CisJaW50ICAgICAgICAgICAgICAgICAgIGRlY19yZHk7CisJaW50ICAgICAgICAgICAgICAgICAgIHR1bl9kZWNfcmR5OworCWludCAgICAgICAgICAgICAgICAgICBsYXN0YnVmZmVyZmxhZzsKKworCXN0cnVjdCBuZ2VuZV90dm5vcm0gICp0dm5vcm1zOworCWludCAgICAgICAgICAgICAgICAgICB0dm5vcm1fbnVtOworCWludCAgICAgICAgICAgICAgICAgICB0dm5vcm07CisKKyNpZmRlZiBOR0VORV9WNEwKKwlpbnQgICAgICAgICAgICAgICAgICAgdmlkZW91c2VyczsKKwlzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlIHByaW87CisJc3RydWN0IG5nZW5lX3ZvcGVuICAgIGluaXQ7CisJaW50ICAgICAgICAgICAgICAgICAgIHJlc291cmNlczsKKwlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciBmYnVmOworCXN0cnVjdCBuZ2VuZV9idWZmZXIgICpzY3JlZW47ICAgICAvKiBvdmVybGF5ICAgICAgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCAgICAgIGNhcHR1cmU7ICAgIC8qIHZpZGVvIGNhcHR1cmUgcXVldWUgKi8KKwlzcGlubG9ja190IHNfbG9jazsKKwlzdHJ1Y3Qgc2VtYXBob3JlIHJlc2xvY2s7CisjZW5kaWYKKworCWludCBydW5uaW5nOworfTsKKworc3RydWN0IG5nZW5lOworCit0eXBlZGVmIHZvaWQgKHJ4X2NiX3QpKHN0cnVjdCBuZ2VuZSAqLCB1MzIsIHU4KTsKK3R5cGVkZWYgdm9pZCAodHhfY2JfdCkoc3RydWN0IG5nZW5lICosIHUzMik7CisKK3N0cnVjdCBuZ2VuZSB7CisJaW50ICAgICAgICAgICAgICAgICAgIG5yOworCXN0cnVjdCBwY2lfZGV2ICAgICAgICpwY2lfZGV2OworCXVuc2lnbmVkIGNoYXIgICAgICAgICppb21lbTsKKworCS8qc3RydWN0IGkyY19hZGFwdGVyICBpMmNfYWRhcHRlcjsqLworCisJdTMyICAgICAgICAgICAgICAgICAgIGRldmljZV92ZXJzaW9uOworCXUzMiAgICAgICAgICAgICAgICAgICBmd19pbnRlcmZhY2VfdmVyc2lvbjsKKwl1MzIgICAgICAgICAgICAgICAgICAgaWNvdW50czsKKworCXU4ICAgICAgICAgICAgICAgICAgICpDbWREb25lQnl0ZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgQm9vdEZpcm13YXJlOworCXZvaWQgICAgICAgICAgICAgICAgICpPdmVyZmxvd0J1ZmZlcjsKKwlkbWFfYWRkcl90ICAgICAgICAgICAgUEFPdmVyZmxvd0J1ZmZlcjsKKwl2b2lkICAgICAgICAgICAgICAgICAqRldJbnRlcmZhY2VCdWZmZXI7CisJZG1hX2FkZHJfdCAgICAgICAgICAgIFBBRldJbnRlcmZhY2VCdWZmZXI7CisJdTggICAgICAgICAgICAgICAgICAgKm5nZW5ldG9ob3N0OworCXU4ICAgICAgICAgICAgICAgICAgICpob3N0dG9uZ2VuZTsKKworCXN0cnVjdCBFVkVOVF9CVUZGRVIgICBFdmVudFF1ZXVlW0VWRU5UX1FVRVVFX1NJWkVdOworCWludCAgICAgICAgICAgICAgICAgICBFdmVudFF1ZXVlT3ZlcmZsb3dDb3VudDsKKwlpbnQgICAgICAgICAgICAgICAgICAgRXZlbnRRdWV1ZU92ZXJmbG93RmxhZzsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgZXZlbnRfdGFza2xldDsKKwlzdHJ1Y3QgRVZFTlRfQlVGRkVSICAqRXZlbnRCdWZmZXI7CisJaW50ICAgICAgICAgICAgICAgICAgIEV2ZW50UXVldWVXcml0ZUluZGV4OworCWludCAgICAgICAgICAgICAgICAgICBFdmVudFF1ZXVlUmVhZEluZGV4OworCisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgIGNtZF93cTsKKwlpbnQgICAgICAgICAgICAgICAgICAgY21kX2RvbmU7CisJc3RydWN0IHNlbWFwaG9yZSAgICAgIGNtZF9tdXRleDsKKwlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgc3RyZWFtX211dGV4OworCXN0cnVjdCBzZW1hcGhvcmUgICAgICBwbGxfbXV0ZXg7CisJc3RydWN0IHNlbWFwaG9yZSAgICAgIGkyY19zd2l0Y2hfbXV0ZXg7CisJaW50ICAgICAgICAgICAgICAgICAgIGkyY19jdXJyZW50X2NoYW5uZWw7CisJaW50ICAgICAgICAgICAgICAgICAgIGkyY19jdXJyZW50X2J1czsKKwlzcGlubG9ja190ICAgICAgICAgICAgY21kX2xvY2s7CisKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgICAgYWRhcHRlcltNQVhfU1RSRUFNXTsKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAgY2hhbm5lbFtNQVhfU1RSRUFNXTsKKworCXN0cnVjdCBuZ2VuZV9pbmZvICAgICpjYXJkX2luZm87CisKKwl0eF9jYl90ICAgICAgICAgICAgICAqVHhFdmVudE5vdGlmeTsKKwlyeF9jYl90ICAgICAgICAgICAgICAqUnhFdmVudE5vdGlmeTsKKwlpbnQgICAgICAgICAgICAgICAgICAgdHhfYnVzeTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgdHhfd3E7CisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgIHJ4X3dxOworI2RlZmluZSBVQVJUX1JCVUZfTEVOIDQwOTYKKwl1OCAgICAgICAgICAgICAgICAgICAgdWFydF9yYnVmW1VBUlRfUkJVRl9MRU5dOworCWludCAgICAgICAgICAgICAgICAgICB1YXJ0X3JwLCB1YXJ0X3dwOworCisJdTggICAgICAgICAgICAgICAgICAgKnRzb3V0X2J1ZjsKKyNkZWZpbmUgVFNPVVRfQlVGX1NJWkUgKDUxMioxODgqOCkKKwlzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgdHNvdXRfcmJ1ZjsKKworCXU4ICAgICAgICAgICAgICAgICAgICphaW5fYnVmOworI2RlZmluZSBBSU5fQlVGX1NJWkUgKDEyOCoxMDI0KQorCXN0cnVjdCBkdmJfcmluZ2J1ZmZlciBhaW5fcmJ1ZjsKKworCisJdTggICAgICAgICAgICAgICAgICAgKnZpbl9idWY7CisjZGVmaW5lIFZJTl9CVUZfU0laRSAoNCoxOTIwKjEwODApCisJc3RydWN0IGR2Yl9yaW5nYnVmZmVyIHZpbl9yYnVmOworCisJdW5zaWduZWQgbG9uZyAgICAgICAgIGV4cF92YWw7CisJaW50IHByZXZfY21kOworfTsKKworc3RydWN0IG5nZW5lX2luZm8geworCWludCAgIHR5cGU7CisjZGVmaW5lIE5HRU5FX0FQUCAgICAgICAgMAorI2RlZmluZSBOR0VORV9URVJSQVRFQyAgIDEKKyNkZWZpbmUgTkdFTkVfU0lERVdJTkRFUiAyCisjZGVmaW5lIE5HRU5FX1JBQ0VSICAgICAgMworI2RlZmluZSBOR0VORV9WSVBFUiAgICAgIDQKKyNkZWZpbmUgTkdFTkVfUFlUSE9OICAgICA1CisjZGVmaW5lIE5HRU5FX1ZCT1hfVjEJIDYKKyNkZWZpbmUgTkdFTkVfVkJPWF9WMgkgNworCisJaW50ICAgZndfdmVyc2lvbjsKKwljaGFyICpuYW1lOworCisJaW50ICAgaW9fdHlwZVtNQVhfU1RSRUFNXTsKKyNkZWZpbmUgTkdFTkVfSU9fTk9ORSAgICAwCisjZGVmaW5lIE5HRU5FX0lPX1RWICAgICAgMQorI2RlZmluZSBOR0VORV9JT19IRFRWICAgIDIKKyNkZWZpbmUgTkdFTkVfSU9fVFNJTiAgICA0CisjZGVmaW5lIE5HRU5FX0lPX1RTT1VUICAgOAorI2RlZmluZSBOR0VORV9JT19BSU4gICAgIDE2CisKKwl2b2lkICpmZV9jb25maWdbNF07CisJdm9pZCAqdHVuZXJfY29uZmlnWzRdOworCisJaW50ICgqZGVtb2RfYXR0YWNoWzRdKShzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqKTsKKwlpbnQgKCp0dW5lcl9hdHRhY2hbNF0pKHN0cnVjdCBuZ2VuZV9jaGFubmVsICopOworCisJdTggICAgYXZmWzRdOworCXU4ICAgIG1zcFs0XTsKKwl1OCAgICBkZW1vZGFbNF07CisJdTggICAgbG5iWzRdOworCWludCAgIGkyY19hY2Nlc3M7CisJdTggICAgbnRzYzsKKwl1OCAgICB0c2ZbNF07CisJdTggICAgaTJzWzRdOworCisJaW50ICgqZ2F0ZV9jdHJsKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIGludCk7CisJaW50ICgqc3dpdGNoX2N0cmwpKHN0cnVjdCBuZ2VuZV9jaGFubmVsICosIGludCwgaW50KTsKK307CisKKyNpZmRlZiBOR0VORV9WNEwKK3N0cnVjdCBuZ2VuZV9mb3JtYXR7CisJY2hhciAqbmFtZTsKKwlpbnQgICBmb3VyY2M7ICAgICAgICAgIC8qIHZpZGVvNGxpbnV4IDIgICAgICAqLworCWludCAgIGJ0Zm9ybWF0OyAgICAgICAgLyogQlQ4NDhfQ09MT1JfRk1UXyogICovCisJaW50ICAgZm9ybWF0OworCWludCAgIGJ0c3dhcDsgICAgICAgICAgLyogQlQ4NDhfQ09MT1JfQ1RMXyogICovCisJaW50ICAgZGVwdGg7ICAgICAgICAgICAvKiBiaXQvcGl4ZWwgICAgICAgICAgKi8KKwlpbnQgICBmbGFnczsKKwlpbnQgICBoc2hpZnQsIHZzaGlmdDsgIC8qIGZvciBwbGFuYXIgbW9kZXMgICAqLworCWludCAgIHBhbGV0dGU7Cit9OworCisjZGVmaW5lIFJFU09VUkNFX09WRVJMQVkgICAgICAgMQorI2RlZmluZSBSRVNPVVJDRV9WSURFTyAgICAgICAgIDIKKyNkZWZpbmUgUkVTT1VSQ0VfVkJJICAgICAgICAgICA0CisKK3N0cnVjdCBuZ2VuZV9idWZmZXIgeworCS8qIGNvbW1vbiB2NGwgYnVmZmVyIHN0dWZmIC0tIG11c3QgYmUgZmlyc3QgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICAgICB2YjsKKworCS8qIG5nZW5lIHNwZWNpZmljICovCisJY29uc3Qgc3RydWN0IG5nZW5lX2Zvcm1hdCAqZm10OworCWludCAgICAgICAgICAgICAgICAgICAgICAgIHR2bm9ybTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICBidGZvcm1hdDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICBidHN3YXA7Cit9OworI2VuZGlmCisKKworI2VuZGlmCisKKy8qICBMb2NhbFdvcmRzOiAgRW5kaWYKKyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwppbmRleCAxMDY3YjIyLi5jZmY3N2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwpAQCAtNjIsNiArNjIsNyBAQAogCVtTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNXSA9IHsKIAkJLm5hbWUJPSAiSGF1cHBhdWdlIFdpblRWIE1pbmlTdGljayIsCiAJCS50eXBlCT0gU01TX05PVkFfQjAsCisJCS5md1tERVZJQ0VfTU9ERV9JU0RCVF9CREFdID0gInNtczF4eHgtaGN3LTU1eHh4LWlzZGJ0LTAyLmZ3IiwKIAkJLmZ3W0RFVklDRV9NT0RFX0RWQlRfQkRBXSA9ICJzbXMxeHh4LWhjdy01NXh4eC1kdmJ0LTAyLmZ3IiwKIAkJLmJvYXJkX2NmZy5sZWRzX3Bvd2VyID0gMjYsCiAJCS5ib2FyZF9jZmcubGVkMCA9IDI3LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jCmluZGV4IGNhNzU4YmMuLjRiZmQzNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKQEAgLTE0NTksOCArMTQ1OSwxMCBAQAogCWlmICghKGNvcmVkZXYtPmRldmljZV9mbGFncyAmIFNNU19ERVZJQ0VfRkFNSUxZMikpIHsKIAkJcE1zZy0+eE1zZ0hlYWRlci5tc2dUeXBlID0gTVNHX1NNU19HUElPX0NPTkZJR19SRVE7CiAJCWlmIChHZXRHcGlvUGluUGFyYW1zKFBpbk51bSwgJlRyYW5zbGF0ZWRQaW5OdW0sICZHcm91cE51bSwKLQkJCQkmZ3JvdXBDZmcpICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQkmZ3JvdXBDZmcpICE9IDApIHsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gZnJlZTsKKwkJfQogCiAJCXBNc2ctPm1zZ0RhdGFbMV0gPSBUcmFuc2xhdGVkUGluTnVtOwogCQlwTXNnLT5tc2dEYXRhWzJdID0gR3JvdXBOdW07CkBAIC0xNDkwLDYgKzE0OTIsNyBAQAogCQllbHNlCiAJCQlzbXNfZXJyKCJzbXNjb3JlX2dwaW9fY29uZmlndXJlIGVycm9yIik7CiAJfQorZnJlZToKIAlrZnJlZShidWZmZXIpOwogCiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oCmluZGV4IGVlYzE4YWEuLjhlY2FkZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmgKQEAgLTIxMiw2ICsyMTIsOCBAQAogI2RlZmluZSBNU0dfU01TX0RBQl9DSEFOTkVMCQkJCTYwNwogI2RlZmluZSBNU0dfU01TX0dFVF9QSURfRklMVEVSX0xJU1RfUkVRCQkJNjA4CiAjZGVmaW5lIE1TR19TTVNfR0VUX1BJRF9GSUxURVJfTElTVF9SRVMJCQk2MDkKKyNkZWZpbmUgTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVMJCQk2MTYKKyNkZWZpbmUgTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVEJCQk2MTUKICNkZWZpbmUgTVNHX1NNU19IT19QRVJfU0xJQ0VTX0lORAkJCTYzMAogI2RlZmluZSBNU0dfU01TX1NFVF9BTlRFTk5BX0NPTkZJR19SRVEJCQk2NTEKICNkZWZpbmUgTVNHX1NNU19TRVRfQU5URU5OQV9DT05GSUdfUkVTCQkJNjUyCkBAIC0zMzksNyArMzQxLDcgQEAKIAogLyogU3RhdGlzdGljcyBpbmZvcm1hdGlvbiByZXR1cm5lZCBhcyByZXNwb25zZSBmb3IKICAqIFNtc0hvc3RBcGlHZXRTdGF0aXN0aWNzX1JlcSAqLwotc3RydWN0IFNNU0hPU1RMSUJfU1RBVElTVElDU19TIHsKK3N0cnVjdCBTTVNIT1NUTElCX1NUQVRJU1RJQ1NfU1QgewogCXUzMiBSZXNlcnZlZDsJCS8qIFJlc2VydmVkICovCiAKIAkvKiBDb21tb24gcGFyYW1ldGVycyAqLwpAQCAtNDI0LDYgKzQyNiw3OSBAQAogCXUzMiBSZXNlcnZlZEZpZWxkc1sxMF07CS8qIFJlc2VydmVkICovCiB9OwogCitzdHJ1Y3QgU21zTXNnU3RhdGlzdGljc0luZm9fU1QgeworCXUzMiBSZXF1ZXN0UmVzdWx0OworCisJc3RydWN0IFNNU0hPU1RMSUJfU1RBVElTVElDU19TVCBTdGF0OworCisJLyogU3BsaXQgdGhlIGNhbGMgb2YgdGhlIFNOUiBpbiBEQUIgKi8KKwl1MzIgU2lnbmFsOyAvKiBkQiAqLworCXUzMiBOb2lzZTsgLyogZEIgKi8KKworfTsKKworc3RydWN0IFNNU0hPU1RMSUJfSVNEQlRfTEFZRVJfU1RBVF9TVCB7CisJLyogUGVyLWxheWVyIGluZm9ybWF0aW9uICovCisJdTMyIENvZGVSYXRlOyAvKiBDb2RlIFJhdGUgZnJvbSBTTVNIT1NUTElCX0NPREVfUkFURV9FVCwKKwkJICAgICAgICogMjU1IG1lYW5zIGxheWVyIGRvZXMgbm90IGV4aXN0ICovCisJdTMyIENvbnN0ZWxsYXRpb247IC8qIENvbnN0ZWxsYXRpb24gZnJvbSBTTVNIT1NUTElCX0NPTlNURUxMQVRJT05fRVQsCisJCQkgICAgKiAyNTUgbWVhbnMgbGF5ZXIgZG9lcyBub3QgZXhpc3QgKi8KKwl1MzIgQkVSOyAvKiBQb3N0IFZpdGVyYmkgQkVSIFsxRS01XSwgMHhGRkZGRkZGRiBpbmRpY2F0ZSBOL0EgKi8KKwl1MzIgQkVSRXJyb3JDb3VudDsgLyogUG9zdCBWaXRlcmJpIEVycm9yIEJpdHMgQ291bnQgKi8KKwl1MzIgQkVSQml0Q291bnQ7IC8qIFBvc3QgVml0ZXJiaSBUb3RhbCBCaXRzIENvdW50ICovCisJdTMyIFByZUJFUjsgLyogUHJlIFZpdGVyYmkgQkVSIFsxRS01XSwgMHhGRkZGRkZGRiBpbmRpY2F0ZSBOL0EgKi8KKwl1MzIgVFNfUEVSOyAvKiBUcmFuc3BvcnQgc3RyZWFtIFBFUiBbJV0sIDB4RkZGRkZGRkYgaW5kaWNhdGUgTi9BICovCisJdTMyIEVycm9yVFNQYWNrZXRzOyAvKiBOdW1iZXIgb2YgZXJyb25lb3VzIHRyYW5zcG9ydC1zdHJlYW0gcGFja2V0cyAqLworCXUzMiBUb3RhbFRTUGFja2V0czsgLyogVG90YWwgbnVtYmVyIG9mIHRyYW5zcG9ydC1zdHJlYW0gcGFja2V0cyAqLworCXUzMiBUSUxkZXB0aEk7IC8qIFRpbWUgaW50ZXJsZWF2ZXIgZGVwdGggSSBwYXJhbWV0ZXIsCisJCQkqIDI1NSBtZWFucyBsYXllciBkb2VzIG5vdCBleGlzdCAqLworCXUzMiBOdW1iZXJPZlNlZ21lbnRzOyAvKiBOdW1iZXIgb2Ygc2VnbWVudHMgaW4gbGF5ZXIgQSwKKwkJCSAgICAgICAqIDI1NSBtZWFucyBsYXllciBkb2VzIG5vdCBleGlzdCAqLworCXUzMiBUTUNDRXJyb3JzOyAvKiBUTUNDIGVycm9ycyAqLworfTsKKworc3RydWN0IFNNU0hPU1RMSUJfU1RBVElTVElDU19JU0RCVF9TVCB7CisJdTMyIFN0YXRpc3RpY3NUeXBlOyAvKiBFbnVtZXJhdG9yIGlkZW50aWZ5aW5nIHRoZSB0eXBlIG9mIHRoZQorCQkJCSogc3RydWN0dXJlLiAgVmFsdWVzIGFyZSB0aGUgc2FtZSBhcworCQkJCSogU01TSE9TVExJQl9ERVZJQ0VfTU9ERVNfRQorCQkJCSoKKwkJCQkqIFRoaXMgZmllbGQgTVVTVCBhbHdheXMgYmUgZmlyc3QgaW4gYW55CisJCQkJKiBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLworCisJdTMyIEZ1bGxTaXplOyAvKiBUb3RhbCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuZWQgYnkgdGhlIG1vZGVtLgorCQkgICAgICAgKiBJZiB0aGUgc2l6ZSByZXF1ZXN0ZWQgYnkgdGhlIGhvc3QgaXMgc21hbGxlciB0aGFuCisJCSAgICAgICAqIEZ1bGxTaXplLCB0aGUgc3RydWN0IHdpbGwgYmUgdHJ1bmNhdGVkICovCisKKwkvKiBDb21tb24gcGFyYW1ldGVycyAqLworCXUzMiBJc1JmTG9ja2VkOyAvKiAwIC0gbm90IGxvY2tlZCwgMSAtIGxvY2tlZCAqLworCXUzMiBJc0RlbW9kTG9ja2VkOyAvKiAwIC0gbm90IGxvY2tlZCwgMSAtIGxvY2tlZCAqLworCXUzMiBJc0V4dGVybmFsTE5BT247IC8qIDAgLSBleHRlcm5hbCBMTkEgb2ZmLCAxIC0gZXh0ZXJuYWwgTE5BIG9uICovCisKKwkvKiBSZWNlcHRpb24gcXVhbGl0eSAqLworCXMzMiAgU05SOyAvKiBkQiAqLworCXMzMiAgUlNTSTsgLyogZEJtICovCisJczMyICBJbkJhbmRQd3I7IC8qIEluIGJhbmQgcG93ZXIgaW4gZEJNICovCisJczMyICBDYXJyaWVyT2Zmc2V0OyAvKiBDYXJyaWVyIE9mZnNldCBpbiBIeiAqLworCisJLyogVHJhbnNtaXNzaW9uIHBhcmFtZXRlcnMgKi8KKwl1MzIgRnJlcXVlbmN5OyAvKiBGcmVxdWVuY3kgaW4gSHogKi8KKwl1MzIgQmFuZHdpZHRoOyAvKiBCYW5kd2lkdGggaW4gTUh6ICovCisJdTMyIFRyYW5zbWlzc2lvbk1vZGU7IC8qIElTREItVCB0cmFuc21pc3Npb24gbW9kZSAqLworCXUzMiBNb2RlbVN0YXRlOyAvKiAwIC0gQWNxdWlzaXRpb24sIDEgLSBMb2NrZWQgKi8KKwl1MzIgR3VhcmRJbnRlcnZhbDsgLyogR3VhcmQgSW50ZXJ2YWwsIDEgZGl2aWRlZCBieSB2YWx1ZSAqLworCXUzMiBTeXN0ZW1UeXBlOyAvKiBJU0RCLVQgc3lzdGVtIHR5cGUgKElTREItVCAvIElTREItVHNiKSAqLworCXUzMiBQYXJ0aWFsUmVjZXB0aW9uOyAvKiBUUlVFIC0gcGFydGlhbCByZWNlcHRpb24sIEZBTFNFIG90aGVyd2lzZSAqLworCXUzMiBOdW1PZkxheWVyczsgLyogTnVtYmVyIG9mIElTREItVCBsYXllcnMgaW4gdGhlIG5ldHdvcmsgKi8KKworCS8qIFBlci1sYXllciBpbmZvcm1hdGlvbiAqLworCS8qIExheWVycyBBLCBCIGFuZCBDICovCisJc3RydWN0IFNNU0hPU1RMSUJfSVNEQlRfTEFZRVJfU1RBVF9TVAlMYXllckluZm9bM107CisJLyogUGVyLWxheWVyIHN0YXRpc3RpY3MsIHNlZSBTTVNIT1NUTElCX0lTREJUX0xBWUVSX1NUQVRfU1QgKi8KKworCS8qIEludGVyZmFjZSBpbmZvcm1hdGlvbiAqLworCXUzMiBTbXNUb0hvc3RUeEVycm9yczsgLyogVG90YWwgbnVtYmVyIG9mIHRyYW5zbWlzc2lvbiBlcnJvcnMuICovCit9OworCiBzdHJ1Y3QgUElEX1NUQVRJU1RJQ1NfREFUQV9TIHsKIAlzdHJ1Y3QgUElEX0JVUlNUX1MgewogCQl1MzIgc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2R2Yi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKaW5kZXggNjhiZjlmYi4uNWYzOTM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKQEAgLTExNiw2ICsxMTYsMTE4IEBACiAJfQogfQogCisKK3N0YXRpYyB2b2lkIHNtc2R2Yl91cGRhdGVfZHZiX3N0YXRzKHN0cnVjdCBSRUNFUFRJT05fU1RBVElTVElDU19TICpwUmVjZXB0aW9uRGF0YSwKKwkJCQkgICBzdHJ1Y3QgU01TSE9TVExJQl9TVEFUSVNUSUNTX1NUICpwKQoreworCWlmIChzbXNfZGJnICYgMikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiUmVzZXJ2ZWQgPSAlZCIsIHAtPlJlc2VydmVkKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIklzUmZMb2NrZWQgPSAlZCIsIHAtPklzUmZMb2NrZWQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiSXNEZW1vZExvY2tlZCA9ICVkIiwgcC0+SXNEZW1vZExvY2tlZCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJJc0V4dGVybmFsTE5BT24gPSAlZCIsIHAtPklzRXh0ZXJuYWxMTkFPbik7CisJCXByaW50ayhLRVJOX0RFQlVHICJTTlIgPSAlZCIsIHAtPlNOUik7CisJCXByaW50ayhLRVJOX0RFQlVHICJCRVIgPSAlZCIsIHAtPkJFUik7CisJCXByaW50ayhLRVJOX0RFQlVHICJGSUJfQ1JDID0gJWQiLCBwLT5GSUJfQ1JDKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRTX1BFUiA9ICVkIiwgcC0+VFNfUEVSKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk1GRVIgPSAlZCIsIHAtPk1GRVIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUlNTSSA9ICVkIiwgcC0+UlNTSSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJJbkJhbmRQd3IgPSAlZCIsIHAtPkluQmFuZFB3cik7CisJCXByaW50ayhLRVJOX0RFQlVHICJDYXJyaWVyT2Zmc2V0ID0gJWQiLCBwLT5DYXJyaWVyT2Zmc2V0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkZyZXF1ZW5jeSA9ICVkIiwgcC0+RnJlcXVlbmN5KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJhbmR3aWR0aCA9ICVkIiwgcC0+QmFuZHdpZHRoKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRyYW5zbWlzc2lvbk1vZGUgPSAlZCIsIHAtPlRyYW5zbWlzc2lvbk1vZGUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTW9kZW1TdGF0ZSA9ICVkIiwgcC0+TW9kZW1TdGF0ZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJHdWFyZEludGVydmFsID0gJWQiLCBwLT5HdWFyZEludGVydmFsKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNvZGVSYXRlID0gJWQiLCBwLT5Db2RlUmF0ZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJMUENvZGVSYXRlID0gJWQiLCBwLT5MUENvZGVSYXRlKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkhpZXJhcmNoeSA9ICVkIiwgcC0+SGllcmFyY2h5KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNvbnN0ZWxsYXRpb24gPSAlZCIsIHAtPkNvbnN0ZWxsYXRpb24pOworCQlwcmludGsoS0VSTl9ERUJVRyAiQnVyc3RTaXplID0gJWQiLCBwLT5CdXJzdFNpemUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQnVyc3REdXJhdGlvbiA9ICVkIiwgcC0+QnVyc3REdXJhdGlvbik7CisJCXByaW50ayhLRVJOX0RFQlVHICJCdXJzdEN5Y2xlVGltZSA9ICVkIiwgcC0+QnVyc3RDeWNsZVRpbWUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ2FsY3VsYXRlZEJ1cnN0Q3ljbGVUaW1lID0gJWQiLCBwLT5DYWxjdWxhdGVkQnVyc3RDeWNsZVRpbWUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZSb3dzID0gJWQiLCBwLT5OdW1PZlJvd3MpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZQYWRkQ29scyA9ICVkIiwgcC0+TnVtT2ZQYWRkQ29scyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZlB1bmN0Q29scyA9ICVkIiwgcC0+TnVtT2ZQdW5jdENvbHMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRXJyb3JUU1BhY2tldHMgPSAlZCIsIHAtPkVycm9yVFNQYWNrZXRzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRvdGFsVFNQYWNrZXRzID0gJWQiLCBwLT5Ub3RhbFRTUGFja2V0cyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZlZhbGlkTXBlVGxicyA9ICVkIiwgcC0+TnVtT2ZWYWxpZE1wZVRsYnMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZJbnZhbGlkTXBlVGxicyA9ICVkIiwgcC0+TnVtT2ZJbnZhbGlkTXBlVGxicyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZkNvcnJlY3RlZE1wZVRsYnMgPSAlZCIsIHAtPk51bU9mQ29ycmVjdGVkTXBlVGxicyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJCRVJFcnJvckNvdW50ID0gJWQiLCBwLT5CRVJFcnJvckNvdW50KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJFUkJpdENvdW50ID0gJWQiLCBwLT5CRVJCaXRDb3VudCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJTbXNUb0hvc3RUeEVycm9ycyA9ICVkIiwgcC0+U21zVG9Ib3N0VHhFcnJvcnMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUHJlQkVSID0gJWQiLCBwLT5QcmVCRVIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ2VsbElkID0gJWQiLCBwLT5DZWxsSWQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRHZiaFNydkluZEhQID0gJWQiLCBwLT5EdmJoU3J2SW5kSFApOworCQlwcmludGsoS0VSTl9ERUJVRyAiRHZiaFNydkluZExQID0gJWQiLCBwLT5EdmJoU3J2SW5kTFApOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtTVBFUmVjZWl2ZWQgPSAlZCIsIHAtPk51bU1QRVJlY2VpdmVkKTsKKwl9CisKKwlwUmVjZXB0aW9uRGF0YS0+SXNEZW1vZExvY2tlZCA9IHAtPklzRGVtb2RMb2NrZWQ7CisKKwlwUmVjZXB0aW9uRGF0YS0+U05SID0gcC0+U05SOworCXBSZWNlcHRpb25EYXRhLT5CRVIgPSBwLT5CRVI7CisJcFJlY2VwdGlvbkRhdGEtPkJFUkVycm9yQ291bnQgPSBwLT5CRVJFcnJvckNvdW50OworCXBSZWNlcHRpb25EYXRhLT5JbkJhbmRQd3IgPSBwLT5JbkJhbmRQd3I7CisJcFJlY2VwdGlvbkRhdGEtPkVycm9yVFNQYWNrZXRzID0gcC0+RXJyb3JUU1BhY2tldHM7Cit9OworCisKK3N0YXRpYyB2b2lkIHNtc2R2Yl91cGRhdGVfaXNkYnRfc3RhdHMoc3RydWN0IFJFQ0VQVElPTl9TVEFUSVNUSUNTX1MgKnBSZWNlcHRpb25EYXRhLAorCQkJCSAgICBzdHJ1Y3QgU01TSE9TVExJQl9TVEFUSVNUSUNTX0lTREJUX1NUICpwKQoreworCWludCBpOworCisJaWYgKHNtc19kYmcgJiAyKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJJc1JmTG9ja2VkID0gJWQiLCBwLT5Jc1JmTG9ja2VkKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIklzRGVtb2RMb2NrZWQgPSAlZCIsIHAtPklzRGVtb2RMb2NrZWQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiSXNFeHRlcm5hbExOQU9uID0gJWQiLCBwLT5Jc0V4dGVybmFsTE5BT24pOworCQlwcmludGsoS0VSTl9ERUJVRyAiU05SID0gJWQiLCBwLT5TTlIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUlNTSSA9ICVkIiwgcC0+UlNTSSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJJbkJhbmRQd3IgPSAlZCIsIHAtPkluQmFuZFB3cik7CisJCXByaW50ayhLRVJOX0RFQlVHICJDYXJyaWVyT2Zmc2V0ID0gJWQiLCBwLT5DYXJyaWVyT2Zmc2V0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkZyZXF1ZW5jeSA9ICVkIiwgcC0+RnJlcXVlbmN5KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJhbmR3aWR0aCA9ICVkIiwgcC0+QmFuZHdpZHRoKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRyYW5zbWlzc2lvbk1vZGUgPSAlZCIsIHAtPlRyYW5zbWlzc2lvbk1vZGUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTW9kZW1TdGF0ZSA9ICVkIiwgcC0+TW9kZW1TdGF0ZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJHdWFyZEludGVydmFsID0gJWQiLCBwLT5HdWFyZEludGVydmFsKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlN5c3RlbVR5cGUgPSAlZCIsIHAtPlN5c3RlbVR5cGUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUGFydGlhbFJlY2VwdGlvbiA9ICVkIiwgcC0+UGFydGlhbFJlY2VwdGlvbik7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZkxheWVycyA9ICVkIiwgcC0+TnVtT2ZMYXllcnMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiU21zVG9Ib3N0VHhFcnJvcnMgPSAlZCIsIHAtPlNtc1RvSG9zdFR4RXJyb3JzKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IENvZGVSYXRlID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uQ29kZVJhdGUpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBDb25zdGVsbGF0aW9uID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uQ29uc3RlbGxhdGlvbik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IEJFUiA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLkJFUik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IEJFUkVycm9yQ291bnQgPSAlZCIsIGksIHAtPkxheWVySW5mb1tpXS5CRVJFcnJvckNvdW50KTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlZDogQkVSQml0Q291bnQgPSAlZCIsIGksIHAtPkxheWVySW5mb1tpXS5CRVJCaXRDb3VudCk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IFByZUJFUiA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLlByZUJFUik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IFRTX1BFUiA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLlRTX1BFUik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IEVycm9yVFNQYWNrZXRzID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uRXJyb3JUU1BhY2tldHMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBUb3RhbFRTUGFja2V0cyA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLlRvdGFsVFNQYWNrZXRzKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlZDogVElMZGVwdGhJID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uVElMZGVwdGhJKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlZDogTnVtYmVyT2ZTZWdtZW50cyA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLk51bWJlck9mU2VnbWVudHMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBUTUNDRXJyb3JzID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uVE1DQ0Vycm9ycyk7CisJCX0KKwl9CisKKwlwUmVjZXB0aW9uRGF0YS0+SXNEZW1vZExvY2tlZCA9IHAtPklzRGVtb2RMb2NrZWQ7CisKKwlwUmVjZXB0aW9uRGF0YS0+U05SID0gcC0+U05SOworCXBSZWNlcHRpb25EYXRhLT5JbkJhbmRQd3IgPSBwLT5JbkJhbmRQd3I7CisKKwlwUmVjZXB0aW9uRGF0YS0+RXJyb3JUU1BhY2tldHMgPSAwOworCXBSZWNlcHRpb25EYXRhLT5CRVIgPSAwOworCXBSZWNlcHRpb25EYXRhLT5CRVJFcnJvckNvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXBSZWNlcHRpb25EYXRhLT5CRVIgKz0gcC0+TGF5ZXJJbmZvW2ldLkJFUjsKKwkJcFJlY2VwdGlvbkRhdGEtPkJFUkVycm9yQ291bnQgKz0gcC0+TGF5ZXJJbmZvW2ldLkJFUkVycm9yQ291bnQ7CisJCXBSZWNlcHRpb25EYXRhLT5FcnJvclRTUGFja2V0cyArPSBwLT5MYXllckluZm9baV0uRXJyb3JUU1BhY2tldHM7CisJfQorfQorCiBzdGF0aWMgaW50IHNtc2R2Yl9vbnJlc3BvbnNlKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpjYikKIHsKIAlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQgPSAoc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqKSBjb250ZXh0OwpAQCAtMTM0LDYgKzI0Niw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBNU0dfU01TX1JGX1RVTkVfUkVTOgorCWNhc2UgTVNHX1NNU19JU0RCVF9UVU5FX1JFUzoKIAkJY29tcGxldGUoJmNsaWVudC0+dHVuZV9kb25lKTsKIAkJYnJlYWs7CiAKQEAgLTIxNyw2ICszMzAsNDAgQEAKIAkJaXNfc3RhdHVzX3VwZGF0ZSA9IHRydWU7CiAJCWJyZWFrOwogCX0KKwljYXNlIE1TR19TTVNfR0VUX1NUQVRJU1RJQ1NfUkVTOiB7CisJCXVuaW9uIHsKKwkJCXN0cnVjdCBTTVNIT1NUTElCX1NUQVRJU1RJQ1NfSVNEQlRfU1QgIGlzZGJ0OworCQkJc3RydWN0IFNtc01zZ1N0YXRpc3RpY3NJbmZvX1NUICAgICAgICAgZHZiOworCQl9ICpwID0gKHZvaWQgKikgKHBoZHIgKyAxKTsKKwkJc3RydWN0IFJFQ0VQVElPTl9TVEFUSVNUSUNTX1MgKnBSZWNlcHRpb25EYXRhID0KKwkJCQkmY2xpZW50LT5zbXNfc3RhdF9kdmIuUmVjZXB0aW9uRGF0YTsKKworCQlzbXNfaW5mbygiTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVMiKTsKKworCQlpc19zdGF0dXNfdXBkYXRlID0gdHJ1ZTsKKworCQlzd2l0Y2ggKHNtc2NvcmVfZ2V0X2RldmljZV9tb2RlKGNsaWVudC0+Y29yZWRldikpIHsKKwkJY2FzZSBERVZJQ0VfTU9ERV9JU0RCVDoKKwkJY2FzZSBERVZJQ0VfTU9ERV9JU0RCVF9CREE6CisJCQlzbXNkdmJfdXBkYXRlX2lzZGJ0X3N0YXRzKHBSZWNlcHRpb25EYXRhLCAmcC0+aXNkYnQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzbXNkdmJfdXBkYXRlX2R2Yl9zdGF0cyhwUmVjZXB0aW9uRGF0YSwgJnAtPmR2Yi5TdGF0KTsKKwkJfQorCQlpZiAoIXBSZWNlcHRpb25EYXRhLT5Jc0RlbW9kTG9ja2VkKSB7CisJCQlwUmVjZXB0aW9uRGF0YS0+U05SID0gMDsKKwkJCXBSZWNlcHRpb25EYXRhLT5CRVIgPSAwOworCQkJcFJlY2VwdGlvbkRhdGEtPkJFUkVycm9yQ291bnQgPSAwOworCQkJcFJlY2VwdGlvbkRhdGEtPkluQmFuZFB3ciA9IDA7CisJCQlwUmVjZXB0aW9uRGF0YS0+RXJyb3JUU1BhY2tldHMgPSAwOworCQl9CisKKwkJY29tcGxldGUoJmNsaWVudC0+dHVuZV9kb25lKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXNtc19pbmZvKCJVbmhhbmRsZWQgbWVzc2FnZSAlZCIsIHBoZHItPm1zZ1R5cGUpOworCiAJfQogCXNtc2NvcmVfcHV0YnVmZmVyKGNsaWVudC0+Y29yZWRldiwgY2IpOwogCkBAIC0yMzMsMTAgKzM4MCwxMCBAQAogCQkJCQkJRFZCM19FVkVOVF9VTkNfRVJSKTsKIAogCQl9IGVsc2UgewotCQkJLypjbGllbnQtPmZlX3N0YXR1cyA9Ci0JCQkJKHBoZHItPm1zZ1R5cGUgPT0gTVNHX1NNU19OT19TSUdOQUxfSU5EKSA/Ci0JCQkJMCA6IEZFX0hBU19TSUdOQUw7Ki8KLQkJCWNsaWVudC0+ZmVfc3RhdHVzID0gMDsKKwkJCWlmIChjbGllbnQtPnNtc19zdGF0X2R2Yi5SZWNlcHRpb25EYXRhLklzUmZMb2NrZWQpCisJCQkJY2xpZW50LT5mZV9zdGF0dXMgPSBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX0NBUlJJRVI7CisJCQllbHNlCisJCQkJY2xpZW50LT5mZV9zdGF0dXMgPSAwOwogCQkJc21zX2JvYXJkX2R2YjNfZXZlbnQoY2xpZW50LCBEVkIzX0VWRU5UX0ZFX1VOTE9DSyk7CiAJCX0KIAl9CkBAIC0zMjUsNiArNDcyLDIwIEBACiAJCQkJCQkwIDogLUVUSU1FOwogfQogCitzdGF0aWMgaW50IHNtc2R2Yl9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQpCit7CisJaW50IHJjOworCXN0cnVjdCBTbXNNc2dIZHJfU1QgTXNnID0geyBNU0dfU01TX0dFVF9TVEFUSVNUSUNTX1JFUSwKKwkJCQkgICAgRFZCVF9CREFfQ09OVFJPTF9NU0dfSUQsCisJCQkJICAgIEhJRl9UQVNLLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IFNtc01zZ0hkcl9TVCksIDAgfTsKKworCXJjID0gc21zZHZiX3NlbmRyZXF1ZXN0X2FuZF93YWl0KGNsaWVudCwgJk1zZywgc2l6ZW9mKE1zZyksCisJCQkJCSAgJmNsaWVudC0+dHVuZV9kb25lKTsKKworCXJldHVybiByYzsKK30KKwogc3RhdGljIGlubGluZSBpbnQgbGVkX2ZlZWRiYWNrKHN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudCkKIHsKIAlpZiAoY2xpZW50LT5mZV9zdGF0dXMgJiBGRV9IQVNfTE9DSykKQEAgLTMzNywzMyArNDk4LDQzIEBACiAKIHN0YXRpYyBpbnQgc21zZHZiX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdCkKIHsKKwlpbnQgcmM7CiAJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50OwogCWNsaWVudCA9IGNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZnJvbnRlbmQpOwogCisJcmMgPSBzbXNkdmJfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QoY2xpZW50KTsKKwogCSpzdGF0ID0gY2xpZW50LT5mZV9zdGF0dXM7CiAKIAlsZWRfZmVlZGJhY2soY2xpZW50KTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBzbXNkdmJfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQogeworCWludCByYzsKIAlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQ7CiAJY2xpZW50ID0gY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CiAKKwlyYyA9IHNtc2R2Yl9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChjbGllbnQpOworCiAJKmJlciA9IGNsaWVudC0+c21zX3N0YXRfZHZiLlJlY2VwdGlvbkRhdGEuQkVSOwogCiAJbGVkX2ZlZWRiYWNrKGNsaWVudCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgc21zZHZiX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnN0cmVuZ3RoKQogeworCWludCByYzsKKwogCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudDsKIAljbGllbnQgPSBjb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKIAorCXJjID0gc21zZHZiX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KGNsaWVudCk7CisKIAlpZiAoY2xpZW50LT5zbXNfc3RhdF9kdmIuUmVjZXB0aW9uRGF0YS5JbkJhbmRQd3IgPCAtOTUpCiAJCSpzdHJlbmd0aCA9IDA7CiAJCWVsc2UgaWYgKGNsaWVudC0+c21zX3N0YXRfZHZiLlJlY2VwdGlvbkRhdGEuSW5CYW5kUHdyID4gLTI5KQpAQCAtMzc1LDMxICs1NDYsMzcgQEAKIAogCWxlZF9mZWVkYmFjayhjbGllbnQpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHNtc2R2Yl9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCiB7CisJaW50IHJjOwogCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudDsKIAljbGllbnQgPSBjb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKIAorCXJjID0gc21zZHZiX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KGNsaWVudCk7CisKIAkqc25yID0gY2xpZW50LT5zbXNfc3RhdF9kdmIuUmVjZXB0aW9uRGF0YS5TTlI7CiAKIAlsZWRfZmVlZGJhY2soY2xpZW50KTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBzbXNkdmJfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKIHsKKwlpbnQgcmM7CiAJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50OwogCWNsaWVudCA9IGNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZnJvbnRlbmQpOwogCisJcmMgPSBzbXNkdmJfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QoY2xpZW50KTsKKwogCSp1Y2Jsb2NrcyA9IGNsaWVudC0+c21zX3N0YXRfZHZiLlJlY2VwdGlvbkRhdGEuRXJyb3JUU1BhY2tldHM7CiAKIAlsZWRfZmVlZGJhY2soY2xpZW50KTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBzbXNkdmJfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCkBAIC00MTMsOSArNTkwLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc21zZHZiX3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3N0YXRpYyBpbnQgc21zZHZiX2R2YnRfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CiAJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50ID0KIAkJY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CiAKQEAgLTQyOSwyNCArNjA3LDMzIEBACiAJY2xpZW50LT5mZV9zdGF0dXMgPSBGRV9IQVNfU0lHTkFMOwogCWNsaWVudC0+ZXZlbnRfZmVfc3RhdGUgPSAtMTsKIAljbGllbnQtPmV2ZW50X3VuY19zdGF0ZSA9IC0xOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZGVsaXZlcnlfc3lzdGVtID0gU1lTX0RWQlQ7CiAKIAlNc2cuTXNnLm1zZ1NyY0lkID0gRFZCVF9CREFfQ09OVFJPTF9NU0dfSUQ7CiAJTXNnLk1zZy5tc2dEc3RJZCA9IEhJRl9UQVNLOwogCU1zZy5Nc2cubXNnRmxhZ3MgPSAwOwogCU1zZy5Nc2cubXNnVHlwZSA9IE1TR19TTVNfUkZfVFVORV9SRVE7CiAJTXNnLk1zZy5tc2dMZW5ndGggPSBzaXplb2YoTXNnKTsKLQlNc2cuRGF0YVswXSA9IGZlcC0+ZnJlcXVlbmN5OworCU1zZy5EYXRhWzBdID0gYy0+ZnJlcXVlbmN5OwogCU1zZy5EYXRhWzJdID0gMTIwMDAwMDA7CiAKLQlzbXNfZGVidWcoImZyZXEgJWQgYmFuZCAlZCIsCi0JCSAgZmVwLT5mcmVxdWVuY3ksIGZlcC0+dS5vZmRtLmJhbmR3aWR0aCk7CisJc21zX2luZm8oIiVzOiBmcmVxICVkIGJhbmQgJWQiLCBfX2Z1bmNfXywgYy0+ZnJlcXVlbmN5LAorCQkgYy0+YmFuZHdpZHRoX2h6KTsKIAotCXN3aXRjaCAoZmVwLT51Lm9mZG0uYmFuZHdpZHRoKSB7Ci0JY2FzZSBCQU5EV0lEVEhfOF9NSFo6IE1zZy5EYXRhWzFdID0gQldfOF9NSFo7IGJyZWFrOwotCWNhc2UgQkFORFdJRFRIXzdfTUhaOiBNc2cuRGF0YVsxXSA9IEJXXzdfTUhaOyBicmVhazsKLQljYXNlIEJBTkRXSURUSF82X01IWjogTXNnLkRhdGFbMV0gPSBCV182X01IWjsgYnJlYWs7Ci0JY2FzZSBCQU5EV0lEVEhfQVVUTzogcmV0dXJuIC1FT1BOT1RTVVBQOwotCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOworCXN3aXRjaCAoYy0+YmFuZHdpZHRoX2h6IC8gMTAwMDAwMCkgeworCWNhc2UgODoKKwkJTXNnLkRhdGFbMV0gPSBCV184X01IWjsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlNc2cuRGF0YVsxXSA9IEJXXzdfTUhaOworCQlicmVhazsKKwljYXNlIDY6CisJCU1zZy5EYXRhWzFdID0gQldfNl9NSFo7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAkvKiBEaXNhYmxlIExOQSwgaWYgYW55LiBBbiBlcnJvciBpcyByZXR1cm5lZCBpZiBubyBMTkEgaXMgcHJlc2VudCAqLwogCXJldCA9IHNtc19ib2FyZF9sbmFfY29udHJvbChjbGllbnQtPmNvcmVkZXYsIDApOwpAQCAtNDcwLDYgKzY1Nyw5MCBAQAogCQkJCQkgICAmY2xpZW50LT50dW5lX2RvbmUpOwogfQogCitzdGF0aWMgaW50IHNtc2R2Yl9pc2RidF9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CisJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50ID0KKwkJY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgU21zTXNnSGRyX1NUCU1zZzsKKwkJdTMyCQlEYXRhWzRdOworCX0gTXNnOworCisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfSVNEQlQ7CisKKwlNc2cuTXNnLm1zZ1NyY0lkICA9IERWQlRfQkRBX0NPTlRST0xfTVNHX0lEOworCU1zZy5Nc2cubXNnRHN0SWQgID0gSElGX1RBU0s7CisJTXNnLk1zZy5tc2dGbGFncyAgPSAwOworCU1zZy5Nc2cubXNnVHlwZSAgID0gTVNHX1NNU19JU0RCVF9UVU5FX1JFUTsKKwlNc2cuTXNnLm1zZ0xlbmd0aCA9IHNpemVvZihNc2cpOworCisJaWYgKGMtPmlzZGJ0X3NiX3NlZ21lbnRfaWR4ID09IC0xKQorCQljLT5pc2RidF9zYl9zZWdtZW50X2lkeCA9IDA7CisKKwlzd2l0Y2ggKGMtPmlzZGJ0X3NiX3NlZ21lbnRfY291bnQpIHsKKwljYXNlIDM6CisJCU1zZy5EYXRhWzFdID0gQldfSVNEQlRfM1NFRzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlNc2cuRGF0YVsxXSA9IEJXX0lTREJUXzFTRUc7CisJCWJyZWFrOworCWNhc2UgMDoJLyogQVVUTyAqLworCQlzd2l0Y2ggKGMtPmJhbmR3aWR0aF9oeiAvIDEwMDAwMDApIHsKKwkJY2FzZSA4OgorCQljYXNlIDc6CisJCQljLT5pc2RidF9zYl9zZWdtZW50X2NvdW50ID0gMzsKKwkJCU1zZy5EYXRhWzFdID0gQldfSVNEQlRfM1NFRzsKKwkJCWJyZWFrOworCQljYXNlIDY6CisJCQljLT5pc2RidF9zYl9zZWdtZW50X2NvdW50ID0gMTsKKwkJCU1zZy5EYXRhWzFdID0gQldfSVNEQlRfMVNFRzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OiAvKiBBc3N1bWVzIDYgTUhaIGJ3ICovCisJCQljLT5pc2RidF9zYl9zZWdtZW50X2NvdW50ID0gMTsKKwkJCWMtPmJhbmR3aWR0aF9oeiA9IDYwMDA7CisJCQlNc2cuRGF0YVsxXSA9IEJXX0lTREJUXzFTRUc7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlzbXNfaW5mbygiU2VnbWVudCBjb3VudCAlZCBub3Qgc3VwcG9ydGVkIiwgYy0+aXNkYnRfc2Jfc2VnbWVudF9jb3VudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCU1zZy5EYXRhWzBdID0gYy0+ZnJlcXVlbmN5OworCU1zZy5EYXRhWzJdID0gMTIwMDAwMDA7CisJTXNnLkRhdGFbM10gPSBjLT5pc2RidF9zYl9zZWdtZW50X2lkeDsKKworCXNtc19pbmZvKCIlczogZnJlcSAlZCBzZWd3aWR0aCAlZCBzZWdpbmRleCAlZFxuIiwgX19mdW5jX18sCisJCSBjLT5mcmVxdWVuY3ksIGMtPmlzZGJ0X3NiX3NlZ21lbnRfY291bnQsCisJCSBjLT5pc2RidF9zYl9zZWdtZW50X2lkeCk7CisKKwlyZXR1cm4gc21zZHZiX3NlbmRyZXF1ZXN0X2FuZF93YWl0KGNsaWVudCwgJk1zZywgc2l6ZW9mKE1zZyksCisJCQkJCSAgICZjbGllbnQtPnR1bmVfZG9uZSk7Cit9CisKK3N0YXRpYyBpbnQgc21zZHZiX3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3sKKwlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQgPQorCQljb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKKwlzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiA9IGNsaWVudC0+Y29yZWRldjsKKworCXN3aXRjaCAoc21zY29yZV9nZXRfZGV2aWNlX21vZGUoY29yZWRldikpIHsKKwljYXNlIERFVklDRV9NT0RFX0RWQlQ6CisJY2FzZSBERVZJQ0VfTU9ERV9EVkJUX0JEQToKKwkJcmV0dXJuIHNtc2R2Yl9kdmJ0X3NldF9mcm9udGVuZChmZSwgZmVwKTsKKwljYXNlIERFVklDRV9NT0RFX0lTREJUOgorCWNhc2UgREVWSUNFX01PREVfSVNEQlRfQkRBOgorCQlyZXR1cm4gc21zZHZiX2lzZGJ0X3NldF9mcm9udGVuZChmZSwgZmVwKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKIHN0YXRpYyBpbnQgc21zZHZiX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKIHsKQEAgLTU1NywxMyArODI4LDYgQEAKIAkvKiBkZXZpY2UgcmVtb3ZhbCBoYW5kbGVkIGJ5IG9ucmVtb3ZlIGNhbGxiYWNrICovCiAJaWYgKCFhcnJpdmFsKQogCQlyZXR1cm4gMDsKLQotCWlmIChzbXNjb3JlX2dldF9kZXZpY2VfbW9kZShjb3JlZGV2KSAhPSBERVZJQ0VfTU9ERV9EVkJUX0JEQSkgewotCQlzbXNfZXJyKCJTTVMgRGV2aWNlIG1vZGUgaXMgbm90IHNldCBmb3IgIgotCQkJIkRWQiBvcGVyYXRpb24uIik7Ci0JCXJldHVybiAwOwotCX0KLQogCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbXNkdmJfY2xpZW50X3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNsaWVudCkgewogCQlzbXNfZXJyKCJrbWFsbG9jKCkgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zaXIuYwppbmRleCBlM2Q3NzZmLi5hNTZlYWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2lyLmMKQEAgLTg1LDkgKzg1LDkgQEAKIAkJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi11MzIgaXJfcG9zOwotdTMyCWlyX3dvcmQ7Ci11MzIgaXJfdG9nZ2xlOworc3RhdGljIHUzMiBpcl9wb3M7CitzdGF0aWMgdTMyIGlyX3dvcmQ7CitzdGF0aWMgdTMyIGlyX3RvZ2dsZTsKIAogI2RlZmluZSBSQzVfUFVTSF9CSVQoZHN0LCBiaXQsIHBvcykJXAogCXsgZHN0IDw8PSAxOyBkc3QgfD0gYml0OyBwb3MrKzsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2lyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYwppbmRleCAyM2ExYzYzLi5iMDcwZTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYwpAQCAtMjY4LDggKzI2OCw4IEBACiAKIAogLyogL3Byb2MvYXY3MTEwX2lyIGludGVyZmFjZSAqLwotc3RhdGljIGludCBhdjcxMTBfaXJfd3JpdGVfcHJvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIHNzaXplX3QgYXY3MTEwX2lyX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJY2hhciAqcGFnZTsKIAl1MzIgaXJfY29uZmlnOwpAQCAtMzA5LDYgKzMwOSwxMCBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXY3MTEwX2lyX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLndyaXRlCQk9IGF2NzExMF9pcl9wcm9jX3dyaXRlLAorfTsKIAogLyogaW50ZXJydXB0IGhhbmRsZXIgKi8KIHN0YXRpYyB2b2lkIGlyX2hhbmRsZXIoc3RydWN0IGF2NzExMCAqYXY3MTEwLCB1MzIgaXJjb20pCkBAIC0zNjgsMTEgKzM3Miw5IEBACiAJaW5wdXRfZGV2LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZhdjcxMTAtPmlyOwogCiAJaWYgKGF2X2NudCA9PSAxKSB7Ci0JCWUgPSBjcmVhdGVfcHJvY19lbnRyeSgiYXY3MTEwX2lyIiwgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLCBOVUxMKTsKLQkJaWYgKGUpIHsKLQkJCWUtPndyaXRlX3Byb2MgPSBhdjcxMTBfaXJfd3JpdGVfcHJvYzsKKwkJZSA9IHByb2NfY3JlYXRlKCJhdjcxMTBfaXIiLCBTX0lXVVNSLCBOVUxMLCAmYXY3MTEwX2lyX3Byb2NfZm9wcyk7CisJCWlmIChlKQogCQkJZS0+c2l6ZSA9IDQgKyAyNTYgKiBzaXplb2YodTE2KTsKLQkJfQogCX0KIAogCXRhc2tsZXRfaW5pdCgmYXY3MTEwLT5pci5pcl90YXNrbGV0LCBhdjcxMTBfZW1pdF9rZXksICh1bnNpZ25lZCBsb25nKSAmYXY3MTEwLT5pcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCmluZGV4IDk3ODJlMDUuLjQ5YzJhODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAlidWRnZXRfY2ktPmlyLnRpbWVyX2tleXVwLmZ1bmN0aW9uID0gbXNwNDMwX2lyX2tleXVwOwogCWJ1ZGdldF9jaS0+aXIudGltZXJfa2V5dXAuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmYnVkZ2V0X2NpLT5pcjsKIAlidWRnZXRfY2ktPmlyLmxhc3RfcmF3ID0gMHhmZmZmOyAvKiBBbiBpbXBvc3NpYmxlIHZhbHVlICovCi0JZXJyb3IgPSBpcl9pbnB1dF9yZWdpc3RlcihpbnB1dF9kZXYsIGlyX2NvZGVzKTsKKwllcnJvciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlucHV0X2RldiwgaXJfY29kZXMsIE5VTEwpOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgImJ1ZGdldF9jaTogY291bGQgbm90IGluaXQgZHJpdmVyIGZvciBJUiBkZXZpY2UgKGNvZGUgJWQpXG4iLCBlcnJvcik7CiAJCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKaW5kZXggZTQ4MzgwYy4uOWZkZjI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKQEAgLTQzMyw5ICs0MzMsOCBAQAogCS5kZW1vZF9tb2RlCQk9IFNUVjA5MHhfU0lOR0xFLAogCS5jbGtfbW9kZQkJPSBTVFYwOTB4X0NMS19FWFQsCiAKLQkueHRhbAkJCT0gMjcwMDAwMDAsCisJLnh0YWwJCQk9IDEzNTAwMDAwLAogCS5hZGRyZXNzCQk9IDB4NjgsCi0JLnJlZl9jbGsJCT0gMjcwMDAwMDAsCiAKIAkudHMxX21vZGUJCT0gU1RWMDkweF9UU01PREVfRFZCQ0ksCiAJLnRzMl9tb2RlCQk9IFNUVjA5MHhfVFNNT0RFX1NFUklBTF9DT05USU5VT1VTLApAQCAtNDU3LDYgKzQ1Niw3IEBACiBzdGF0aWMgc3RydWN0IHN0djYxMTB4X2NvbmZpZyB0dDE2MDBfc3R2NjExMHhfY29uZmlnID0gewogCS5hZGRyCQkJPSAweDYwLAogCS5yZWZjbGsJCQk9IDI3MDAwMDAwLAorCS5jbGtfZGl2CQk9IDIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlzbDY0MjNfY29uZmlnIHR0MTYwMF9pc2w2NDIzX2NvbmZpZyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwppbmRleCAzZjQwZjM3Li44MzU2N2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCkBAIC00MTcsNiArNDE3LDE4IEBACiAJICBTYXkgWSBoZXJlIGlmIFRFQTU3NjQgaGF2ZSBhIDMyNzY4IEh6IGNyeXN0YWwgaW4gY2lyY3VpdCwgc2F5IE4KIAkgIGhlcmUgaWYgVEVBNTc2NCByZWZlcmVuY2UgZnJlcXVlbmN5IGlzIGNvbm5lY3RlZCBpbiBGUkVRSU4uCiAKK2NvbmZpZyBSQURJT19TQUE3NzA2SAorCXRyaXN0YXRlICJTQUE3NzA2SCBDYXIgUmFkaW8gRFNQIgorCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDIKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgU0FBNzcwNkggQ2FyIHJhZGlvIERpZ2l0YWwKKwkgIFNpZ25hbCBQcm9jZXNzb3IsIGZvdW5kIGZvciBpbnN0YW5jZSBvbiB0aGUgUnVzc2VsbHZpbGxlIGRldmVsb3BtZW50CisJICBib2FyZC4gT24gdGhlIHJ1c3NlbGx2aWxsZSB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCB0byBpbnRlcm5hbAorCSAgdGltYmVyZGFsZSBJMkMgYnVzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBTQUE3NzA2SC4KKwogY29uZmlnIFJBRElPX1RFRjY4NjIKIAl0cmlzdGF0ZSAiVEVGNjg2MiBDYXIgUmFkaW8gRW5oYW5jZWQgU2VsZWN0aXZpdHkgVHVuZXIiCiAJZGVwZW5kcyBvbiBJMkMgJiYgVklERU9fVjRMMgpAQCAtNDI5LDQgKzQ0MSwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgVEVGNjg2Mi4KIAorY29uZmlnIFJBRElPX1RJTUJFUkRBTEUKKwl0cmlzdGF0ZSAiRW5hYmxlIHRoZSBUaW1iZXJkYWxlIHJhZGlvIGRyaXZlciIKKwlkZXBlbmRzIG9uIE1GRF9USU1CRVJEQUxFICYmIFZJREVPX1Y0TDIKKwlkZXBlbmRzIG9uIEkyQwkjIGZvciBSQURJT19TQUE3NzA2SAorCXNlbGVjdCBSQURJT19URUY2ODYyCisJc2VsZWN0IFJBRElPX1NBQTc3MDZICisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIGtpbmQgb2YgdW1icmVsbGEgZHJpdmVyIGZvciB0aGUgUmFkaW8gVHVuZXIgYW5kIERTUAorCSAgZm91bmQgYmVoaW5kIHRoZSBUaW1iZXJkYWxlIEZQR0Egb24gdGhlIFJ1c3NlbGx2aWxsZSBib2FyZC4KKwkgIEVuYWJsaW5nIHRoaXMgZHJpdmVyIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIERTUCBhbmQgdHVuZXIuCisKIGVuZGlmICMgUkFESU9fQURBUFRFUlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlCmluZGV4IDAxOTIyYWQuLmY2MTU1ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9NYWtlZmlsZQpAQCAtMjMsNiArMjMsOCBAQAogb2JqLSQoQ09ORklHX1JBRElPX1NJNDcwWCkgKz0gc2k0NzB4Lwogb2JqLSQoQ09ORklHX1VTQl9NUjgwMCkgKz0gcmFkaW8tbXI4MDAubwogb2JqLSQoQ09ORklHX1JBRElPX1RFQTU3NjQpICs9IHJhZGlvLXRlYTU3NjQubworb2JqLSQoQ09ORklHX1JBRElPX1NBQTc3MDZIKSArPSBzYWE3NzA2aC5vCiBvYmotJChDT05GSUdfUkFESU9fVEVGNjg2MikgKz0gdGVmNjg2Mi5vCitvYmotJChDT05GSUdfUkFESU9fVElNQkVSREFMRSkgKz0gcmFkaW8tdGltYi5vCiAKIEVYVFJBX0NGTEFHUyArPSAtSXNvdW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRpbWIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGltYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZTQ1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRpbWIuYwpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIHJhZGlvLXRpbWIuYyBUaW1iZXJkYWxlIEZQR0EgUmFkaW8gZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdGltYl9yYWRpby5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJ0aW1iLXJhZGlvIgorCitzdHJ1Y3QgdGltYnJhZGlvIHsKKwlzdHJ1Y3QgdGltYl9yYWRpb19wbGF0Zm9ybV9kYXRhCXBkYXRhOworCXN0cnVjdCB2NGwyX3N1YmRldgkqc2RfdHVuZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2CSpzZF9kc3A7CisJc3RydWN0IHZpZGVvX2RldmljZQl2aWRlb19kZXY7CisJc3RydWN0IHY0bDJfZGV2aWNlCXY0bDJfZGV2OworfTsKKworCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCit7CisJc3RybGNweSh2LT5kcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2Yodi0+ZHJpdmVyKSk7CisJc3RybGNweSh2LT5jYXJkLCAiVGltYmVyZGFsZSBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7CisJc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksICJwbGF0Zm9ybToiRFJJVkVSX05BTUUpOworCXYtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigwLCAwLCAxKTsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl90dW5lciAqdikKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX3R1bmVyLCB0dW5lciwgZ190dW5lciwgdik7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCXN0cnVjdCB2NGwyX3R1bmVyICp2KQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh0ci0+c2RfdHVuZXIsIHR1bmVyLCBzX3R1bmVyLCB2KTsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJdW5zaWduZWQgaW50ICppKQoreworCSppID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJdW5zaWduZWQgaW50IGkpCit7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX3R1bmVyLCB0dW5lciwgc19mcmVxdWVuY3ksIGYpOworfQorCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh0ci0+c2RfdHVuZXIsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgZik7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX2RzcCwgY29yZSwgcXVlcnljdHJsLCBxYyk7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX2RzcCwgY29yZSwgZ19jdHJsLCBjdHJsKTsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh0ci0+c2RfZHNwLCBjb3JlLCBzX2N0cmwsIGN0cmwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHRpbWJyYWRpb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcAk9IHRpbWJyYWRpb192aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19nX3R1bmVyCQk9IHRpbWJyYWRpb192aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIJCT0gdGltYnJhZGlvX3ZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kJPSB0aW1icmFkaW9fdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kJPSB0aW1icmFkaW9fdmlkaW9jX3NfZnJlcXVlbmN5LAorCS52aWRpb2NfZ19pbnB1dAkJPSB0aW1icmFkaW9fdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0CQk9IHRpbWJyYWRpb192aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfYXVkaW8JCT0gdGltYnJhZGlvX3ZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbwkJPSB0aW1icmFkaW9fdmlkaW9jX3NfYXVkaW8sCisJLnZpZGlvY19xdWVyeWN0cmwJPSB0aW1icmFkaW9fdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybAkJPSB0aW1icmFkaW9fdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybAkJPSB0aW1icmFkaW9fdmlkaW9jX3NfY3RybAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB0aW1icmFkaW9fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRpbWJyYWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0aW1iX3JhZGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRpbWJyYWRpbyAqdHI7CisJaW50IGVycjsKKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUGxhdGZvcm0gZGF0YSBtaXNzaW5nXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJdHIgPSBremFsbG9jKHNpemVvZigqdHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXRyLT5wZGF0YSA9ICpwZGF0YTsKKworCXN0cmxjcHkodHItPnZpZGVvX2Rldi5uYW1lLCAiVGltYmVyZGFsZSBSYWRpbyIsCisJCXNpemVvZih0ci0+dmlkZW9fZGV2Lm5hbWUpKTsKKwl0ci0+dmlkZW9fZGV2LmZvcHMgPSAmdGltYnJhZGlvX2ZvcHM7CisJdHItPnZpZGVvX2Rldi5pb2N0bF9vcHMgPSAmdGltYnJhZGlvX2lvY3RsX29wczsKKwl0ci0+dmlkZW9fZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl0ci0+dmlkZW9fZGV2Lm1pbm9yID0gLTE7CisKKwlzdHJsY3B5KHRyLT52NGwyX2Rldi5uYW1lLCBEUklWRVJfTkFNRSwgc2l6ZW9mKHRyLT52NGwyX2Rldi5uYW1lKSk7CisJZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgJnRyLT52NGwyX2Rldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfdjRsMl9kZXY7CisKKwl0ci0+dmlkZW9fZGV2LnY0bDJfZGV2ID0gJnRyLT52NGwyX2RldjsKKworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdHItPnZpZGVvX2RldiwgVkZMX1RZUEVfUkFESU8sIC0xKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yIHJlZyB2aWRlb1xuIik7CisJCWdvdG8gZXJyX3ZpZGVvX3JlcTsKKwl9CisKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmdHItPnZpZGVvX2RldiwgdHIpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdHIpOworCXJldHVybiAwOworCitlcnJfdmlkZW9fcmVxOgorCXZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5KCZ0ci0+dmlkZW9fZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ0ci0+djRsMl9kZXYpOworZXJyX3Y0bDJfZGV2OgorCWtmcmVlKHRyKTsKK2VycjoKKwlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXI6ICVkXG4iLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdGltYnJhZGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmdHItPnZpZGVvX2Rldik7CisJdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHkoJnRyLT52aWRlb19kZXYpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdHItPnY0bDJfZGV2KTsKKworCWtmcmVlKHRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aW1icmFkaW9fcGxhdGZvcm1fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHRpbWJyYWRpb19wcm9iZSwKKwkucmVtb3ZlCQk9IHRpbWJyYWRpb19yZW1vdmUsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgdGltYnJhZGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0aW1icmFkaW9fcGxhdGZvcm1fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRpbWJyYWRpb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRpbWJyYWRpb19wbGF0Zm9ybV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0aW1icmFkaW9faW5pdCk7Cittb2R1bGVfZXhpdCh0aW1icmFkaW9fZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiVGltYmVyZGFsZSBSYWRpbyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1vY2VhbiBMYWJvcmF0b3JpZXMgPGluZm9AbW9jZWFuLWxhYnMuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9zYWE3NzA2aC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zYWE3NzA2aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYjU1MjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NhYTc3MDZoLmMKQEAgLTAsMCArMSw0NTEgQEAKKy8qCisgKiBzYWE3NzA2LmMgUGhpbGlwcyBTQUE3NzA2SCBDYXIgUmFkaW8gRFNQIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAic2FhNzcwNmgiCisKKy8qIHRoZSBJMkMgbWVtb3J5IG1hcCBsb29rcyBsaWtlIHRoaXMKKworCSQxQzAwIC0gJEZGRkYgTm90IFVzZWQKKwkkMjIwMCAtICQzRkZGIFJlc2VydmVkIFlSQU0gKERTUDIpIHNwYWNlCisJJDIwMDAgLSAkMjFGRiBZUkFNIChEU1AyKQorCSQxRkYwIC0gJDFGRkYgSGFyZHdhcmUgUmVnaXN0ZXJzCisJJDEyODAgLSAkMUZFRiBSZXNlcnZlZCBYUkFNIChEU1AyKSBzcGFjZQorCSQxMDAwIC0gJDEyN0YgWFJBTSAoRFNQMikKKwkkMEZGRiAgICAgICAgRFNQIENPTlRST0wKKwkkMEEwMCAtICQwRkZFIFJlc2VydmVkCisJJDA5ODAgLSAkMDlGRiBSZXNlcnZlZCBZUkFNIChEU1AxKSBzcGFjZQorCSQwODAwIC0gJDA5N0YgWVJBTSAoRFNQMSkKKwkkMDIwMCAtICQwN0ZGIE5vdCBVc2VkCisJJDAxODAgLSAkMDFGRiBSZXNlcnZlZCBYUkFNIChEU1AxKSBzcGFjZQorCSQwMDAwIC0gJDAxN0YgWFJBTSAoRFNQMSkKKyovCisKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX0NUUkwJCTB4MGZmZgorI2RlZmluZSBTQUE3NzA2SF9DVFJMX0JZUF9QTEwJCTB4MDAwMQorI2RlZmluZSBTQUE3NzA2SF9DVFJMX1BMTF9ESVZfTUFTSwkweDAwM2UKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaCTB4MDAzZQorI2RlZmluZSBTQUE3NzA2SF9DVFJMX0RTUF9UVVJCTwkJMHgwMDQwCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfUENfUkVTRVRfRFNQMQkweDAwODAKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AyCTB4MDEwMAorI2RlZmluZSBTQUE3NzA2SF9DVFJMX0RTUDFfUk9NX0VOX01BU0sJMHgwNjAwCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfRFNQMV9GVU5DX1BST00JMHgwMDAwCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfRFNQMl9ST01fRU5fTUFTSwkweDE4MDAKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9EU1AyX0ZVTkNfUFJPTQkweDAwMDAKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9ESUdfU0lMX0lOVEVSUE9MCTB4ODAwMAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19FVkFMVUFUSU9OCQkJMHgxZmYwCisjZGVmaW5lIFNBQTc3MDZIX0VWQUxfRElTQUJMRV9DSEFSR0VfUFVNUAkweDAwMDAwMQorI2RlZmluZSBTQUE3NzA2SF9FVkFMX0RDU19DTE9DSwkJCTB4MDAwMDAyCisjZGVmaW5lIFNBQTc3MDZIX0VWQUxfR05EUkMxX0VOQUJMRQkJMHgwMDAwMDQKKyNkZWZpbmUgU0FBNzcwNkhfRVZBTF9HTkRSQzJfRU5BQkxFCQkweDAwMDAwOAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19DTF9HRU4xCQkJMHgxZmYzCisjZGVmaW5lIFNBQTc3MDZIX0NMX0dFTjFfTUlOX0xPT1BHQUlOX01BU0sJMHgwMDAwMGYKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMV9MT09QR0FJTl9NQVNLCQkweDAwMDBmMAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU4xX0NPQVJTRV9SQVRJT04JCTB4ZmZmZjAwCisKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX0NMX0dFTjIJCQkweDFmZjQKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMl9XU0VER0VfRkFMTElORwkJMHgwMDAwMDEKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMl9TVE9QX1ZDTwkJMHgwMDAwMDIKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMl9GUkVSVU4JCQkweDAwMDAwNAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU4yX0FEQVBUSVZFCQkweDAwMDAwOAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU4yX0ZJTkVfUkFUSU9fTUFTSwkweDBmZmZmMAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19DTF9HRU40CQkweDFmZjYKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VONF9CWVBBU1NfUExMMQkweDAwMTAwMAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU40X1BMTDFfRElWX01BU0sJMHgwM2UwMDAKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VONF9EU1AxX1RVUkJPCTB4MDQwMDAwCisKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX1NFTAkweDFmZjcKKyNkZWZpbmUgU0FBNzcwNkhfU0VMX0RTUDJfU1JDQV9NQVNLCTB4MDAwMDA3CisjZGVmaW5lIFNBQTc3MDZIX1NFTF9EU1AyX0ZNVEFfTUFTSwkweDAwMDAzMQorI2RlZmluZSBTQUE3NzA2SF9TRUxfRFNQMl9TUkNCX01BU0sJMHgwMDAxYzAKKyNkZWZpbmUgU0FBNzcwNkhfU0VMX0RTUDJfRk1UQl9NQVNLCTB4MDAwZTAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9EU1AxX1NSQ19NQVNLCTB4MDAzMDAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9EU1AxX0ZNVF9NQVNLCTB4MDFjMDAzCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9TUERJRjIJCTB4MDIwMDAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9IT1NUX0lPX0ZNVF9NQVNLCTB4MWMwMDAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9FTl9IT1NUX0lPCQkweDIwMDAwMAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19JQUMJCTB4MWZmOAorI2RlZmluZSBTQUE3NzA2SF9SRUdfQ0xLX1NFVAkJMHgxZmY5CisjZGVmaW5lIFNBQTc3MDZIX1JFR19DTEtfQ09FRkYJCTB4MWZmYQorI2RlZmluZSBTQUE3NzA2SF9SRUdfSU5QVVRfU0VOUwkJMHgxZmZiCisjZGVmaW5lIFNBQTc3MDZIX0lOUFVUX1NFTlNfUkRTX1ZPTF9NQVNLCTB4MDAwM2YKKyNkZWZpbmUgU0FBNzcwNkhfSU5QVVRfU0VOU19GTV9WT0xfTUFTSwkJMHgwMGZjMAorI2RlZmluZSBTQUE3NzA2SF9JTlBVVF9TRU5TX0ZNX01QWAkJMHgwMTAwMAorI2RlZmluZSBTQUE3NzA2SF9JTlBVVF9TRU5TX09GRl9GSUxURVJfQV9FTgkweDAyMDAwCisjZGVmaW5lIFNBQTc3MDZIX0lOUFVUX1NFTlNfT0ZGX0ZJTFRFUl9CX0VOCTB4MDQwMDAKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX1BIT05FX05BVl9BVURJTwkweDFmZmMKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX0lPX0NPTkZfRFNQMgkweDFmZmQKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX1NUQVRVU19EU1AyCTB4MWZmZQorI2RlZmluZSBTQUE3NzA2SF9SRUdfUENfRFNQMgkJMHgxZmZmCisKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMV9NT0QwCTB4MDgwMAorI2RlZmluZSBTQUE3NzA2SF9EU1AxX1JPTV9WRVIJMHgwOTdmCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfTVBUUjAJMHgxMDAwCisKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMV9NT0RQTlRSCTB4MDAwMAorCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfWE1FTV9DT05UTExDVwkweDExM2UKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9YTUVNX0JVU0FNUAkweDExNGEKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9YTUVNX0ZEQUNQTlRSCTB4MTFmOQorI2RlZmluZSBTQUE3NzA2SF9EU1AyX1hNRU1fSUlTMVBOVFIJMHgxMWZiCisKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9ZTUVNX1BWR0EJCTB4MjEyYQorI2RlZmluZSBTQUE3NzA2SF9EU1AyX1lNRU1fUFZBVDEJMHgyMTJiCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfWU1FTV9QVkFUCQkweDIxMmMKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9ZTUVNX1JPTV9WRVIJMHgyMWZmCisKKyNkZWZpbmUgU1VQUE9SVEVEX0RTUDFfUk9NX1ZFUgkJMHg2NjcKKworc3RydWN0IHNhYTc3MDZoX3N0YXRlIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CisJdW5zaWduZWQgbXV0ZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE3NzA2aF9zdGF0ZSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUsIHNkKTsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9pMmNfc2VuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgaW50IGxlbikKK3sKKwlpbnQgZXJyID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgZGF0YSwgbGVuKTsKKwlpZiAoZXJyID09IGxlbikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGVyciA+IDAgPyAtRUlPIDogZXJyOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX2kyY190cmFuc2ZlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCXN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCWludCBlcnIgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCBudW0pOworCWlmIChlcnIgPT0gbnVtKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyID4gMCA/IC1FSU8gOiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfc2V0X3JlZzI0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IGJ1Zls1XTsKKwlpbnQgcG9zID0gMDsKKworCWJ1Zltwb3MrK10gPSByZWcgPj4gODsKKwlidWZbcG9zKytdID0gcmVnOworCWJ1Zltwb3MrK10gPSB2YWwgPj4gMTY7CisJYnVmW3BvcysrXSA9IHZhbCA+PiA4OworCWJ1Zltwb3MrK10gPSB2YWw7CisKKwlyZXR1cm4gc2FhNzcwNmhfaTJjX3NlbmQoY2xpZW50LCBidWYsIHBvcyk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MTYgcmVnLCB1MzIgdmFsLAorCWludCAqZXJyKQoreworCXJldHVybiAqZXJyID8gKmVyciA6IHNhYTc3MDZoX3NldF9yZWcyNChzZCwgcmVnLCB2YWwpOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX3NldF9yZWcxNihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MTYgcmVnLCB1MTYgdmFsKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCBidWZbNF07CisJaW50IHBvcyA9IDA7CisKKwlidWZbcG9zKytdID0gcmVnID4+IDg7CisJYnVmW3BvcysrXSA9IHJlZzsKKwlidWZbcG9zKytdID0gdmFsID4+IDg7CisJYnVmW3BvcysrXSA9IHZhbDsKKworCXJldHVybiBzYWE3NzA2aF9pMmNfc2VuZChjbGllbnQsIGJ1ZiwgcG9zKTsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUxNiByZWcsIHUxNiB2YWwsCisJaW50ICplcnIpCit7CisJcmV0dXJuICplcnIgPyAqZXJyIDogc2FhNzcwNmhfc2V0X3JlZzE2KHNkLCByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfZ2V0X3JlZzE2KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUxNiByZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IGJ1ZlsyXTsKKwlpbnQgZXJyOworCXU4IHJlZ2FkZHJbXSA9IHtyZWcgPj4gOCwgcmVnfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsge2NsaWVudC0+YWRkciwgMCwgc2l6ZW9mKHJlZ2FkZHIpLCByZWdhZGRyfSwKKwkJCQl7Y2xpZW50LT5hZGRyLCBJMkNfTV9SRCwgc2l6ZW9mKGJ1ZiksIGJ1Zn0gfTsKKworCWVyciA9IHNhYTc3MDZoX2kyY190cmFuc2ZlcihjbGllbnQsIG1zZywgQVJSQVlfU0laRShtc2cpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIGJ1ZlswXSA8PCA4IHwgYnVmWzFdOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX3VubXV0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBzYWE3NzA2aF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ1RSTCwKKwkJU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaIHwgU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AxIHwKKwkJU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AyLCAmZXJyKTsKKworCS8qIG5ld2VyIHZlcnNpb25zIG9mIHRoZSBjaGlwIHJlcXVpcmVzIGEgc21hbGwgc2xlZXAgYWZ0ZXIgcmVzZXQgKi8KKwltc2xlZXAoMSk7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ1RSTCwKKwkJU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19FVkFMVUFUSU9OLCAwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19DTF9HRU4xLCAweDA0MDAyMiwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ0xfR0VOMiwKKwkJU0FBNzcwNkhfQ0xfR0VOMl9XU0VER0VfRkFMTElORywgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ0xfR0VONCwgMHgwMjQwODAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX1NFTCwgMHgyMDAwODAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX0lBQywgMHhmNGNhZWQsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX0NMS19TRVQsIDB4MTI0MzM0LCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19DTEtfQ09FRkYsIDB4MDA0YTFhLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19JTlBVVF9TRU5TLCAweDAwNzFjNywKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfUEhPTkVfTkFWX0FVRElPLAorCQkweDBlMjJmZiwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfSU9fQ09ORl9EU1AyLCAweDAwMWZmOCwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfU1RBVFVTX0RTUDIsIDB4MDgwMDAzLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19QQ19EU1AyLCAweDAwMDAwNCwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9EU1AxX01PRDAsIDB4MGM2YywgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX01QVFIwLCAweDAwMGI0YiwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9EU1AxX01PRFBOVFIsIDB4MDAwNjAwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX0RTUDFfTU9EUE5UUiwgMHgwMDAwYzAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfRFNQMl9YTUVNX0NPTlRMTENXLCAweDAwMDgxOSwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX1hNRU1fQ09OVExMQ1csIDB4MDAwODVhLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWE1FTV9CVVNBTVAsIDB4N2ZmZmZmLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWE1FTV9GREFDUE5UUiwgMHgyMDAwY2IsCisJCSZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfRFNQMl9YTUVNX0lJUzFQTlRSLCAweDIwMDBjYiwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX1lNRU1fUFZHQSwgMHgwZjgwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcxNl9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWU1FTV9QVkFUMSwgMHgwODAwLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcxNl9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWU1FTV9QVkFULCAweDA4MDAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfRFNQMl9YTUVNX0NPTlRMTENXLCAweDAwMDkwNSwKKwkJJmVycik7CisJaWYgKCFlcnIpCisJCXN0YXRlLT5tdXRlZCA9IDA7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9tdXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IHNhYTc3MDZoX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlpbnQgZXJyOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzE2KHNkLCBTQUE3NzA2SF9SRUdfQ1RSTCwKKwkJU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaIHwgU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AxIHwKKwkJU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AyKTsKKwlpZiAoIWVycikKKwkJc3RhdGUtPm11dGVkID0gMTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+bXV0ZWQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoY3RybC0+dmFsdWUpCisJCQlyZXR1cm4gc2FhNzcwNmhfbXV0ZShzZCk7CisJCXJldHVybiBzYWE3NzA2aF91bm11dGUoc2QpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1NBQTc3MDZILCAwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE3NzA2aF9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gc2FhNzcwNmhfZ19jaGlwX2lkZW50LAorCS5xdWVyeWN0cmwgPSBzYWE3NzA2aF9xdWVyeWN0cmwsCisJLmdfY3RybCA9IHNhYTc3MDZoX2dfY3RybCwKKwkuc19jdHJsID0gc2FhNzcwNmhfc19jdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2FhNzcwNmhfb3BzID0geworCS5jb3JlID0gJnNhYTc3MDZoX2NvcmVfb3BzLAorfTsKKworLyoKKyAqIEdlbmVyaWMgaTJjIHByb2JlCisgKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCisgKi8KKworc3RhdGljIGludCBfX2RldmluaXQgc2FhNzcwNmhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJaW50IGVycjsKKworCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FSU87CisKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKworCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNhYTc3MDZoX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXNkID0gJnN0YXRlLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmc2FhNzcwNmhfb3BzKTsKKworCS8qIGNoZWNrIHRoZSByb20gdmVyc2lvbnMgKi8KKwllcnIgPSBzYWE3NzA2aF9nZXRfcmVnMTYoc2QsIFNBQTc3MDZIX0RTUDFfUk9NX1ZFUik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyOworCWlmIChlcnIgIT0gU1VQUE9SVEVEX0RTUDFfUk9NX1ZFUikKKwkJdjRsMl93YXJuKHNkLCAiVW5rbm93biBEU1AxIFJPTSBjb2RlIHZlcnNpb246IDB4JXhcbiIsIGVycik7CisKKwlzdGF0ZS0+bXV0ZWQgPSAxOworCisJLyogc3RhcnR1cCBpbiBhIG11dGVkIHN0YXRlICovCisJZXJyID0gc2FhNzcwNmhfbXV0ZShzZCk7CisJaWYgKGVycikKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19zdGF0ZShzZCkpOworCisJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IEZhaWxlZCB0byBwcm9iZTogJWRcbiIsIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzYWE3NzA2aF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzYWE3NzA2aF9tdXRlKHNkKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTc3MDZoX2lkW10gPSB7CisJe0RSSVZFUl9OQU1FLCAwfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3NzA2aF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzYWE3NzA2aF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJfSwKKwkucHJvYmUJCT0gc2FhNzcwNmhfcHJvYmUsCisJLnJlbW92ZQkJPSBzYWE3NzA2aF9yZW1vdmUsCisJLmlkX3RhYmxlCT0gc2FhNzcwNmhfaWQsCit9OworCitzdGF0aWMgX19pbml0IGludCBzYWE3NzA2aF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZzYWE3NzA2aF9kcml2ZXIpOworfQorCitzdGF0aWMgX19leGl0IHZvaWQgc2FhNzcwNmhfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZzYWE3NzA2aF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzYWE3NzA2aF9pbml0KTsKK21vZHVsZV9leGl0KHNhYTc3MDZoX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNBQTc3MDZIIENhciBSYWRpbyBEU1AgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNb2NlYW4gTGFib3JhdG9yaWVzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtY29tbW9uLmMKaW5kZXggNGRhMGYxNS4uNDcwNzVmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC1jb21tb24uYwpAQCAtNzI0LDcgKzcyNCw3IEBACiAJCXR1bmVyLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CiAKIAkvKiBtaW4gaXMgd29yc3QsIG1heCBpcyBiZXN0OyBzaWduYWw6MC4uMHhmZmZmOyByc3NpOiAwLi4weGZmICovCi0JLyogbWVhc3VyZWQgaW4gdW5pdHMgb2YgZGLsqIlWIGluIDEgZGIgaW5jcmVtZW50cyAobWF4IGF0IH43NSBkYuyoiVYpICovCisJLyogbWVhc3VyZWQgaW4gdW5pdHMgb2YgZGLCtVYgaW4gMSBkYiBpbmNyZW1lbnRzIChtYXggYXQgfjc1IGRiwrVWKSAqLwogCXR1bmVyLT5zaWduYWwgPSAocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfUlNTSSk7CiAJLyogdGhlIGlkZWFsIGZhY3RvciBpcyAweGZmZmYvNzUgPSA4NzMsOCAqLwogCXR1bmVyLT5zaWduYWwgPSAodHVuZXItPnNpZ25hbCAqIDg3MykgKyAoOCAqIHR1bmVyLT5zaWduYWwgLyAxMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtdXNiLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtdXNiLmMKaW5kZXggYTk2ZTFiOS4uNmY2MDg0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LXVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC11c2IuYwpAQCAtNTkwLDggKzU5MCw5IEBACiAJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYpOwogCQkJa2ZyZWUocmFkaW8tPmludF9pbl9idWZmZXIpOwogCQkJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CisJCQltdXRleF91bmxvY2soJnJhZGlvLT5kaXNjb25uZWN0X2xvY2spOwogCQkJa2ZyZWUocmFkaW8pOwotCQkJZ290byB1bmxvY2s7CisJCQlnb3RvIGRvbmU7CiAJCX0KIAogCQkvKiBjYW5jZWwgcmVhZCBwcm9jZXNzZXMgKi8KQEAgLTYwMSw3ICs2MDIsNiBAQAogCQlyZXR2YWwgPSBzaTQ3MHhfc3RvcChyYWRpbyk7CiAJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShyYWRpby0+aW50Zik7CiAJfQotdW5sb2NrOgogCW11dGV4X3VubG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7CiBkb25lOgogCXJldHVybiByZXR2YWw7CkBAIC04NDIsOSArODQyLDExIEBACiAJCWtmcmVlKHJhZGlvLT5pbnRfaW5fYnVmZmVyKTsKIAkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2KTsKIAkJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CisJCW11dGV4X3VubG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7CiAJCWtmcmVlKHJhZGlvKTsKKwl9IGVsc2UgeworCQltdXRleF91bmxvY2soJnJhZGlvLT5kaXNjb25uZWN0X2xvY2spOwogCX0KLQltdXRleF91bmxvY2soJnJhZGlvLT5kaXNjb25uZWN0X2xvY2spOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCAyZjgzYmU3Li5mOGZjODY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC0zODgsNiArMzg4LDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0dnA1MTUwLgogCitjb25maWcgVklERU9fVFZQNzAwMgorCXRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBUVlA3MDAyIHZpZGVvIGRlY29kZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQworCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBUVlA3MDAyIHZpZGVvIGRlY29kZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHR2cDcwMDIuCisKIGNvbmZpZyBWSURFT19WUFgzMjIwCiAJdHJpc3RhdGUgInZweDMyMjBhLCB2cHgzMjE2YiAmIHZweDMyMTRjIHZpZGVvIGRlY29kZXJzIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKQEAgLTU0OCw3ICs1NTcsNiBAQAogCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgdnBzcyBzeXN0ZW0gbW9kdWxlIGZvciB2aWRlbyBkcml2ZXIKLQlkZWZhdWx0IHkKIAogY29uZmlnIFZJREVPX1ZQRkVfQ0FQVFVSRQogCXRyaXN0YXRlICJWUEZFIFZpZGVvIENhcHR1cmUgRHJpdmVyIgpAQCAtNTkyLDYgKzYwMCwxOSBAQAogCSAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGZlLgogCitjb25maWcgVklERU9fSVNJRgorCXRyaXN0YXRlICJJU0lGIEhXIG1vZHVsZSIKKwlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9ETTM2NSAmJiBWSURFT19WUEZFX0NBUFRVUkUKKwlzZWxlY3QgVklERU9fVlBTU19TWVNURU0KKwlkZWZhdWx0IHkKKwloZWxwCisJICAgRW5hYmxlcyBJU0lGIGh3IG1vZHVsZS4gVGhpcyBpcyB0aGUgaGFyZHdhcmUgbW9kdWxlIGZvcgorCSAgIGNvbmZpZ3VyaW5nIElTSUYgaW4gVlBGRSB0byBjYXB0dXJlIFJhdyBCYXllciBSR0IgZGF0YSAgZnJvbQorCSAgIGEgaW1hZ2Ugc2Vuc29yIG9yIFlVViBkYXRhIGZyb20gYSBZVVYgc291cmNlLgorCisJICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZwZmUuCisKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnIgogCiBjb25maWcgVklERU9fUE1TCkBAIC02MzgsOSArNjU5LDE0IEBACiAJICBpbmZvcm1hdGlvbi4KIAogY29uZmlnIFZJREVPX0NQSUEKLQl0cmlzdGF0ZSAiQ1BpQSBWaWRlbyBGb3IgTGludXgiCisJdHJpc3RhdGUgIkNQaUEgVmlkZW8gRm9yIExpbnV4IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIGNwaWExIG1vZHVsZQorCSAgaW5zdGVhZC4gTm90ZSB0aGF0IHlvdSBuZWVkIGF0bGVhc3QgdmVyc2lvbiAwLjYuNCBvZiBsaWJ2NGwgZm9yCisJICB0aGUgY3BpYTEgZ3NwY2EgbW9kdWxlLgorCiAJICBUaGlzIGlzIHRoZSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIGNhbWVyYXMgYmFzZWQgb24gVmlzaW9uJ3MgQ1BpQQogCSAgKENvbG91ciBQcm9jZXNzb3IgSW50ZXJmYWNlIEFTSUMpLCBzdWNoIGFzIHRoZSBDcmVhdGl2ZSBMYWJzIFZpZGVvCiAJICBCbGFzdGVyIFdlYmNhbSBJSS4gSWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIGNhbWVyYXMsIHNheSBZIGhlcmUKQEAgLTk0NCw2ICs5NzAsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vS2NvbmZpZyIKQEAgLTk1NSw2ICs5ODMsNyBAQAogY29uZmlnIFZJREVPX09WQ0FNQ0hJUAogCXRyaXN0YXRlICJPbW5pVmlzaW9uIENhbWVyYSBDaGlwIHN1cHBvcnQgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDEKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIG92NTE5IG1vZHVsZQogCSAgaW5zdGVhZC4gTm90ZSB0aGF0IGZvciB0aGUgb3Y1MTEgLyBvdjUxOCBzdXBwb3J0IG9mIHRoZSBnc3BjYSBtb2R1bGUKQEAgLTk3MSw2ICsxMDAwLDcgQEAKIGNvbmZpZyBVU0JfVzk5NjhDRgogCXRyaXN0YXRlICJVU0IgVzk5Nls4N11DRiBKUEVHIER1YWwgTW9kZSBDYW1lcmEgc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQyAmJiBWSURFT19PVkNBTUNISVAKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIG92NTE5IG1vZHVsZQogCSAgaW5zdGVhZC4gTm90ZSB0aGF0IGZvciB0aGUgdzk5NjhjZiBzdXBwb3J0IG9mIHRoZSBnc3BjYSBtb2R1bGUKQEAgLTk5Miw2ICsxMDIyLDcgQEAKIGNvbmZpZyBVU0JfT1Y1MTEKIAl0cmlzdGF0ZSAiVVNCIE9WNTExIENhbWVyYSBzdXBwb3J0IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIG92NTE5IG1vZHVsZQogCSAgaW5zdGVhZC4gTm90ZSB0aGF0IGZvciB0aGUgb3Y1MTEgLyBvdjUxOCBzdXBwb3J0IG9mIHRoZSBnc3BjYSBtb2R1bGUKQEAgLTEwMjAsNiArMTA1MSw3IEBACiBjb25maWcgVVNCX1NUVjY4MAogCXRyaXN0YXRlICJVU0IgU1RWNjgwIChQZW5jYW0pIENhbWVyYSBzdXBwb3J0IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIHN0djA2ODAgbW9kdWxlCiAJICBpbnN0ZWFkLiBOb3RlIHRoYXQgZm9yIHRoZSBnc3BjYSBzdHYwNjgwIG1vZHVsZSB5b3UgbmVlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKaW5kZXggMmFmNjhlZS4uYjg4YjYxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCkBAIC01Niw2ICs1Niw3IEBACiBvYmotJChDT05GSUdfVklERU9fVklOTykgKz0gaW5keWNhbS5vCiBvYmotJChDT05GSUdfVklERU9fVFZQNTE1MCkgKz0gdHZwNTE1MC5vCiBvYmotJChDT05GSUdfVklERU9fVFZQNTE0WCkgKz0gdHZwNTE0eC5vCitvYmotJChDT05GSUdfVklERU9fVFZQNzAwMikgKz0gdHZwNzAwMi5vCiBvYmotJChDT05GSUdfVklERU9fTVNQMzQwMCkgKz0gbXNwMzQwMC5vCiBvYmotJChDT05GSUdfVklERU9fQ1M1MzQ1KSArPSBjczUzNDUubwogb2JqLSQoQ09ORklHX1ZJREVPX0NTNTNMMzJBKSArPSBjczUzbDMyYS5vCkBAIC05OSw2ICsxMDAsNyBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMzQpICs9IHNhYTcxMzQvCiBvYmotJChDT05GSUdfVklERU9fQ1g4OCkgKz0gY3g4OC8KIG9iai0kKENPTkZJR19WSURFT19FTTI4WFgpICs9IGVtMjh4eC8KK29iai0kKENPTkZJR19WSURFT19UTEcyMzAwKSArPSB0bGcyMzAwLwogb2JqLSQoQ09ORklHX1ZJREVPX0NYMjMxWFgpICs9IGN4MjMxeHgvCiBvYmotJChDT05GSUdfVklERU9fVVNCVklTSU9OKSArPSB1c2J2aXNpb24vCiBvYmotJChDT05GSUdfVklERU9fUFZSVVNCMikgKz0gcHZydXNiMi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYwppbmRleCA1YmIwZjllLi41NDdlMWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAkJdjRsMl9lcnIoc2QsICJubyBub3RpZnkgZm91bmQhXG4iKTsKIAogCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7Ci0JCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIDApOworCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfTE9XLCBOVUxMKTsKIAkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDAsIDEpOwogCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgMSwgMCk7CiAJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCA1LCAwKTsKQEAgLTI2Myw3ICsyNjMsNyBAQAogCQkvKiBidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgxYSwgIDUsIDEpOyAqLwogCQl0aW1pbmcgPSAmdGltaW5nX2RhdGFbMV07CiAJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKLQkJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0xPVywgMCk7CisJCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIE5VTEwpOwogCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgMCwgMSk7CiAJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCAxLCAxKTsKIAkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDUsIDEpOwpAQCAtMjg4LDcgKzI4OCw3IEBACiAJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwOCwgKHRpbWluZy0+aHNjYWxlID4+IDgpICYgMHhmZik7CiAJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwOSwgdGltaW5nLT5oc2NhbGUgJiAweGZmKTsKIAlkZWNvZGVyLT5ub3JtID0gc3RkOwotCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9ISUdILCAwKTsKKwl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfSElHSCwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNiw3ICszMDYsNyBAQAogCQl2NGwyX2VycihzZCwgIm5vIG5vdGlmeSBmb3VuZCFcbiIpOwogCiAJaWYgKGRlY29kZXItPmlucHV0ICE9IGlucHV0KSB7Ci0JCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIDApOworCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfTE9XLCBOVUxMKTsKIAkJZGVjb2Rlci0+aW5wdXQgPSBpbnB1dDsKIAkJLyogc2VsZWN0IG1vZGUgKi8KIAkJaWYgKGRlY29kZXItPmlucHV0ID09IDApIHsKQEAgLTMxNiw3ICszMTYsNyBAQAogCQkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MGIsIDYsIDEpOwogCQkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MWEsIDEsIDApOwogCQl9Ci0JCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9ISUdILCAwKTsKKwkJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0hJR0gsIE5VTEwpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwppbmRleCAzMTgyYTQwLi5jYjQ2ZThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCkBAIC04MSw2ICs4MSw3IEBACiBzdGF0aWMgaW50IHJhZGlvX25yW0JUVFZfTUFYXSA9IHsgWzAgLi4uIChCVFRWX01BWC0xKV0gPSAtMSB9Owogc3RhdGljIGludCB2YmlfbnJbQlRUVl9NQVhdID0geyBbMCAuLi4gKEJUVFZfTUFYLTEpXSA9IC0xIH07CiBzdGF0aWMgaW50IGRlYnVnX2xhdGVuY3k7CitzdGF0aWMgaW50IGRpc2FibGVfaXI7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmRzcjsKIApAQCAtMTA3LDYgKzEwOCw3IEBACiBtb2R1bGVfcGFyYW0oYnR0dl9kZWJ1ZywgICAgICAgIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oaXJxX2RlYnVnLCAgICAgICAgIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oZGVidWdfbGF0ZW5jeSwgICAgIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZGlzYWJsZV9pciwgICAgICAgIGludCwgMDQ0NCk7CiAKIG1vZHVsZV9wYXJhbShmZHNyLCAgICAgICAgICAgICAgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbShnYnVmZmVycywgICAgICAgICAgaW50LCAwNDQ0KTsKQEAgLTEzOSw2ICsxNDEsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhidHR2X2dwaW8sImxvZyBncGlvIGNoYW5nZXMsIGRlZmF1bHQgaXMgMCAobm8pIik7CiBNT0RVTEVfUEFSTV9ERVNDKGJ0dHZfZGVidWcsImRlYnVnIG1lc3NhZ2VzLCBkZWZhdWx0IGlzIDAgKG5vKSIpOwogTU9EVUxFX1BBUk1fREVTQyhpcnFfZGVidWcsImlycSBoYW5kbGVyIGRlYnVnIG1lc3NhZ2VzLCBkZWZhdWx0IGlzIDAgKG5vKSIpOworTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2lyLCAiZGlzYWJsZSBpbmZyYXJlZCByZW1vdGUgc3VwcG9ydCIpOwogTU9EVUxFX1BBUk1fREVTQyhnYnVmZmVycywibnVtYmVyIG9mIGNhcHR1cmUgYnVmZmVycy4gcmFuZ2UgMi0zMiwgZGVmYXVsdCA4Iik7CiBNT0RVTEVfUEFSTV9ERVNDKGdidWZzaXplLCJzaXplIG9mIHRoZSBjYXB0dXJlIGJ1ZmZlcnMsIGRlZmF1bHQgaXMgMHgyMDgwMDAiKTsKIE1PRFVMRV9QQVJNX0RFU0MocmVzZXRfY3JvcCwicmVzZXQgY3JvcHBpbmcgcGFyYW1ldGVycyBhdCBvcGVuKCksIGRlZmF1bHQgIgpAQCAtNDQ2MSw3ICs0NDY0LDEwIEBACiAJCXJlcXVlc3RfbW9kdWxlcyhidHYpOwogCX0KIAotCWJ0dHZfaW5wdXRfaW5pdChidHYpOworCWlmICghZGlzYWJsZV9pcikgeworCQlpbml0X2J0dHZfaTJjX2lyKGJ0dik7CisJCWJ0dHZfaW5wdXRfaW5pdChidHYpOworCX0KIAogCS8qIGV2ZXJ5dGhpbmcgaXMgZmluZSAqLwogCWJ0dHZfbnVtKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaTJjLmMKaW5kZXggNjNhYTMxYS4uNDA3ZmE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYwpAQCAtMzg4LDcgKzM4OCwxMiBAQAogCWlmICgwID09IGJ0di0+aTJjX3JjICYmIGkyY19zY2FuKQogCQlkb19pMmNfc2NhbihidHYtPmMudjRsMl9kZXYubmFtZSwgJmJ0di0+aTJjX2NsaWVudCk7CiAKLQkvKiBJbnN0YW50aWF0ZSB0aGUgSVIgcmVjZWl2ZXIgZGV2aWNlLCBpZiBwcmVzZW50ICovCisJcmV0dXJuIGJ0di0+aTJjX3JjOworfQorCisvKiBJbnN0YW50aWF0ZSB0aGUgSTJDIElSIHJlY2VpdmVyIGRldmljZSwgaWYgcHJlc2VudCAqLwordm9pZCBfX2RldmluaXQgaW5pdF9idHR2X2kyY19pcihzdHJ1Y3QgYnR0diAqYnR2KQorewogCWlmICgwID09IGJ0di0+aTJjX3JjKSB7CiAJCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwogCQkvKiBUaGUgZXh0ZXJuYWwgSVIgcmVjZWl2ZXIgaXMgYXQgaTJjIGFkZHJlc3MgMHgzNCAoMHgzNSBmb3IKQEAgLTQwOCw3ICs0MTMsNiBAQAogCQlzdHJsY3B5KGluZm8udHlwZSwgImlyX3ZpZGVvIiwgSTJDX05BTUVfU0laRSk7CiAJCWkyY19uZXdfcHJvYmVkX2RldmljZSgmYnR2LT5jLmkyY19hZGFwLCAmaW5mbywgYWRkcl9saXN0KTsKIAl9Ci0JcmV0dXJuIGJ0di0+aTJjX3JjOwogfQogCiBpbnQgX19kZXZleGl0IGZpbmlfYnR0dl9pMmMoc3RydWN0IGJ0dHYgKmJ0dikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMKaW5kZXggMjc3YTA5Mi4uYjMyMGRiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCXN0cnVjdCBjYXJkX2lyICppcjsKIAlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzID0gTlVMTDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JaW50IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOworCXU2NCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAogCWlmICghYnR2LT5oYXNfcmVtb3RlKQpAQCAtMzg5LDcgKzM4OSw3IEBACiAJYnR0dl9pcl9zdGFydChidHYsIGlyKTsKIAogCS8qIGFsbCBkb25lICovCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoYnR2LT5yZW1vdGUtPmRldiwgaXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGJ0di0+cmVtb3RlLT5kZXYsIGlyX2NvZGVzLCBOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfc3RvcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oCmluZGV4IGExZDBlOWMuLjZjY2NjMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmgKQEAgLTI3OSw2ICsyNzksNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBidHR2X2dwaW87CiBleHRlcm4gdm9pZCBidHR2X2dwaW9fdHJhY2tpbmcoc3RydWN0IGJ0dHYgKmJ0diwgY2hhciAqY29tbWVudCk7CiBleHRlcm4gaW50IGluaXRfYnR0dl9pMmMoc3RydWN0IGJ0dHYgKmJ0dik7CitleHRlcm4gdm9pZCBpbml0X2J0dHZfaTJjX2lyKHN0cnVjdCBidHR2ICpidHYpOwogZXh0ZXJuIGludCBmaW5pX2J0dHZfaTJjKHN0cnVjdCBidHR2ICpidHYpOwogCiAjZGVmaW5lIGJ0dHZfcHJpbnRrIGlmIChidHR2X3ZlcmJvc2UpIHByaW50awpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKaW5kZXggN2JiOWMxZS4uY2JiZjdlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCkBAIC0xOTA3LDcgKzE5MDcsNiBAQAogCQlnb3RvIG91dF9mcmVlOwogCiAJbXV0ZXhfaW5pdCgmY2FtLT5zX211dGV4KTsKLQltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZjYW0tPmRldl9sb2NrKTsKIAljYW0tPnN0YXRlID0gU19OT1RSRUFEWTsKIAljYWZlX3NldF9jb25maWdfbmVlZGVkKGNhbSwgMSk7CkBAIC0xOTQ3LDcgKzE5NDYsNiBAQAogCSAqIGJlY2F1c2UgdGhlIHNlbnNvciBjb3VsZCBhdHRhY2ggaW4gdGhpcyBjYWxsIGNoYWluLCBsZWFkaW5nIHRvCiAJICogdW5zaWdodGx5IGRlYWRsb2Nrcy4KIAkgKi8KLQltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7ICAvKiBhdHRhY2ggY2FuIGRlYWRsb2NrICovCiAJcmV0ID0gY2FmZV9zbWJ1c19zZXR1cChjYW0pOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2ZyZWVpcnE7CkBAIC0xOTczLDcgKzE5NzEsNyBAQAogCWNhbS0+dmRldi52NGwyX2RldiA9ICZjYW0tPnY0bDJfZGV2OwogCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2FtLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CiAJaWYgKHJldCkKLQkJZ290byBvdXRfc21idXM7CisJCWdvdG8gb3V0X3VubG9jazsKIAl2aWRlb19zZXRfZHJ2ZGF0YSgmY2FtLT52ZGV2LCBjYW0pOwogCiAJLyoKQEAgLTE5ODgsNiArMTk4Niw4IEBACiAJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXJldHVybiAwOwogCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKIG91dF9zbWJ1czoKIAljYWZlX3NtYnVzX3NodXRkb3duKGNhbSk7CiBvdXRfZnJlZWlycToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKaW5kZXggNTUxZGRmMi4uOTMzYWU0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKQEAgLTM3MzcsOSArMzczNyw2IEBACiAJaWYgKHNpemUgPiBGUkFNRV9OVU0qQ1BJQV9NQVhfRlJBTUVfU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIWNhbSB8fCAhY2FtLT5vcHMpCi0JCXJldHVybiAtRU5PREVWOwotCiAJLyogbWFrZSB0aGlzIF9yZWFsbHlfIHNtcC1zYWZlICovCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FtLT5idXN5X2xvY2spKQogCQlyZXR1cm4gLUVJTlRSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZwppbmRleCBlOGE1MGE2Li5iYWY3ZTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZwpAQCAtMTksMyArMTksMTQgQEAKIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3gxOC4KKworY29uZmlnIFZJREVPX0NYMThfQUxTQQorCXRyaXN0YXRlICJDb25leGFudCAyMzQxOCBETUEgYXVkaW8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX0NYMTggJiYgU05EICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBTTkRfUENNCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgZGlyZWN0IChETUEpIGF1ZGlvIG9uCisJICBDb25leGFudCAyMzQxOCBiYXNlZCBUViBjYXJkcyB1c2luZyBBTFNBLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeDE4LWFsc2EuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvTWFrZWZpbGUKaW5kZXggZjdiZjBlZC4uMmZhZGQ5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9NYWtlZmlsZQpAQCAtMyw4ICszLDEwIEBACiAJY3gxOC1tYWlsYm94Lm8gY3gxOC12YmkubyBjeDE4LWF1ZGlvLm8gY3gxOC12aWRlby5vIGN4MTgtaXJxLm8gXAogCWN4MTgtYXYtY29yZS5vIGN4MTgtYXYtYXVkaW8ubyBjeDE4LWF2LWZpcm13YXJlLm8gY3gxOC1hdi12YmkubyBjeDE4LXNjYi5vIFwKIAljeDE4LWR2Yi5vIGN4MTgtaW8ubworY3gxOC1hbHNhLW9ianMgOj0gY3gxOC1hbHNhLW1haW4ubyBjeDE4LWFsc2EtcGNtLm8KIAogb2JqLSQoQ09ORklHX1ZJREVPX0NYMTgpICs9IGN4MTgubworb2JqLSQoQ09ORklHX1ZJREVPX0NYMThfQUxTQSkgKz0gY3gxOC1hbHNhLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjQxZDdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1tYWluLmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiAgQUxTQSBpbnRlcmZhY2UgdG8gY3gxOCBQQ00gY2FwdHVyZSBzdHJlYW1zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIERldmluIEhlaXRtdWVsbGVyIDxkaGVpdG11ZWxsZXJAa2VybmVsbGFicy5jb20+CisgKgorICogIFBvcnRpb25zIG9mIHRoaXMgd29yayB3ZXJlIHNwb25zb3JlZCBieSBPTkVMQU4gTGltaXRlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgKiAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisKKyNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgorI2luY2x1ZGUgImN4MTgtdmVyc2lvbi5oIgorI2luY2x1ZGUgImN4MTgtYWxzYS5oIgorI2luY2x1ZGUgImN4MTgtYWxzYS1taXhlci5oIgorI2luY2x1ZGUgImN4MTgtYWxzYS1wY20uaCIKKworaW50IGN4MThfYWxzYV9kZWJ1ZzsKKworI2RlZmluZSBDWDE4X0RFQlVHX0FMU0FfSU5GTyhmbXQsIGFyZy4uLikgXAorCWRvIHsgXAorCQlpZiAoY3gxOF9hbHNhX2RlYnVnICYgMikgXAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm10LCAiY3gxOC1hbHNhIiwgIyMgYXJnKTsgXAorCX0gd2hpbGUgKDApOworCittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGN4MThfYWxzYV9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsCisJCSAiRGVidWcgbGV2ZWwgKGJpdG1hc2spLiBEZWZhdWx0OiAwXG4iCisJCSAiXHRcdFx0ICAxLzB4MDAwMTogd2FybmluZ1xuIgorCQkgIlx0XHRcdCAgMi8weDAwMDI6IGluZm9cbiIpOworCitNT0RVTEVfQVVUSE9SKCJBbmR5IFdhbGxzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNYMjM0MTggQUxTQSBJbnRlcmZhY2UiKTsKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCJDWDIzNDE4IE1QRUcyIGVuY29kZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworTU9EVUxFX1ZFUlNJT04oQ1gxOF9WRVJTSU9OKTsKKworc3RhdGljIGlubGluZQorc3RydWN0IHNuZF9jeDE4X2NhcmQgKnRvX3NuZF9jeDE4X2NhcmQoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKK3sKKwlyZXR1cm4gdG9fY3gxOCh2NGwyX2RldiktPmFsc2E7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBzbmRfY3gxOF9jYXJkICpwX3RvX3NuZF9jeDE4X2NhcmQoc3RydWN0IHY0bDJfZGV2aWNlICoqdjRsMl9kZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHNuZF9jeDE4X2NhcmQsIHY0bDJfZGV2KTsKK30KKworc3RhdGljIHZvaWQgc25kX2N4MThfY2FyZF9mcmVlKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKQoreworCWlmIChjeHNjID09IE5VTEwpCisJCXJldHVybjsKKworCWlmIChjeHNjLT52NGwyX2RldiAhPSBOVUxMKQorCQl0b19jeDE4KGN4c2MtPnY0bDJfZGV2KS0+YWxzYSA9IE5VTEw7CisKKwkvKiBGSVhNRSAtIHRha2UgYW55IG90aGVyIHN0b3BwaW5nIGFjdGlvbnMgbmVlZGVkICovCisKKwlrZnJlZShjeHNjKTsKK30KKworc3RhdGljIHZvaWQgc25kX2N4MThfY2FyZF9wcml2YXRlX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpzYykKK3sKKwlpZiAoc2MgPT0gTlVMTCkKKwkJcmV0dXJuOworCXNuZF9jeDE4X2NhcmRfZnJlZShzYy0+cHJpdmF0ZV9kYXRhKTsKKwlzYy0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlzYy0+cHJpdmF0ZV9mcmVlID0gTlVMTDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9jYXJkX2NyZWF0ZShzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2LAorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKnNjLAorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqKmN4c2MpCit7CisJKmN4c2MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX2N4MThfY2FyZCksIEdGUF9LRVJORUwpOworCWlmICgqY3hzYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCSgqY3hzYyktPnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJKCpjeHNjKS0+c2MgPSBzYzsKKworCXNjLT5wcml2YXRlX2RhdGEgPSAqY3hzYzsKKwlzYy0+cHJpdmF0ZV9mcmVlID0gc25kX2N4MThfY2FyZF9wcml2YXRlX2ZyZWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9jYXJkX3NldF9uYW1lcyhzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYykKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KGN4c2MtPnY0bDJfZGV2KTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKnNjID0gY3hzYy0+c2M7CisKKwkvKiBzYy0+ZHJpdmVyIGlzIHVzZWQgYnkgYWxzYS1saWIncyBjb25maWd1cmF0b3I6IHNpbXBsZSwgdW5pcXVlICovCisJc3RybGNweShzYy0+ZHJpdmVyLCAiQ1gyMzQxOCIsIHNpemVvZihzYy0+ZHJpdmVyKSk7CisKKwkvKiBzYy0+c2hvcnRuYW1lIGlzIGEgc3ltbGluayBpbiAvcHJvYy9hc291bmQ6IENYMTgtTSAtPiBjYXJkTiAqLworCXNucHJpbnRmKHNjLT5zaG9ydG5hbWUsICBzaXplb2Yoc2MtPnNob3J0bmFtZSksICJDWDE4LSVkIiwKKwkJIGN4LT5pbnN0YW5jZSk7CisKKwkvKiBzYy0+bG9uZ25hbWUgaXMgcmVhZCBmcm9tIC9wcm9jL2Fzb3VuZC9jYXJkcyAqLworCXNucHJpbnRmKHNjLT5sb25nbmFtZSwgc2l6ZW9mKHNjLT5sb25nbmFtZSksCisJCSAiQ1gyMzQxOCAjJWQgJXMgVFYvRk0gUmFkaW8vTGluZS1JbiBDYXB0dXJlIiwKKwkJIGN4LT5pbnN0YW5jZSwgY3gtPmNhcmRfbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9pbml0KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOCh2NGwyX2Rldik7CisJc3RydWN0IHNuZF9jYXJkICpzYyA9IE5VTEw7CisJc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2M7CisJaW50IHJldDsKKworCS8qIE51bWJycyBzdGVwcyBmcm9tICJXcml0aW5nIGFuIEFMU0EgRHJpdmVyIiBieSBUYWthc2hpIEl3YWkgKi8KKworCS8qICgxKSBDaGVjayBhbmQgaW5jcmVtZW50IHRoZSBkZXZpY2UgaW5kZXggKi8KKwkvKiBUaGlzIGlzIGEgbm8tb3AgZm9yIHVzLiAgV2UnbGwgdXNlIHRoZSBjeC0+aW5zdGFuY2UgKi8KKworCS8qICgyKSBDcmVhdGUgYSBjYXJkIGluc3RhbmNlICovCisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKFNORFJWX0RFRkFVTFRfSURYMSwgLyogdXNlIGZpcnN0IGF2YWlsYWJsZSBpZCAqLworCQkJICAgICAgU05EUlZfREVGQVVMVF9TVFIxLCAvKiB4aWQgZnJvbSBlbmQgb2Ygc2hvcnRuYW1lKi8KKwkJCSAgICAgIFRISVNfTU9EVUxFLCAwLCAmc2MpOworCWlmIChyZXQpIHsKKwkJQ1gxOF9BTFNBX0VSUigiJXM6IHNuZF9jYXJkX2NyZWF0ZSgpIGZhaWxlZCB3aXRoIGVyciAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCByZXQpOworCQlnb3RvIGVycl9leGl0OworCX0KKworCS8qICgzKSBDcmVhdGUgYSBtYWluIGNvbXBvbmVudCAqLworCXJldCA9IHNuZF9jeDE4X2NhcmRfY3JlYXRlKHY0bDJfZGV2LCBzYywgJmN4c2MpOworCWlmIChyZXQpIHsKKwkJQ1gxOF9BTFNBX0VSUigiJXM6IHNuZF9jeDE4X2NhcmRfY3JlYXRlKCkgZmFpbGVkIHdpdGggZXJyICVkXG4iLAorCQkJICAgICAgX19mdW5jX18sIHJldCk7CisJCWdvdG8gZXJyX2V4aXRfZnJlZTsKKwl9CisKKwkvKiAoNCkgU2V0IHRoZSBkcml2ZXIgSUQgYW5kIG5hbWUgc3RyaW5ncyAqLworCXNuZF9jeDE4X2NhcmRfc2V0X25hbWVzKGN4c2MpOworCisKKwlyZXQgPSBzbmRfY3gxOF9wY21fY3JlYXRlKGN4c2MpOworCWlmIChyZXQpIHsKKwkJQ1gxOF9BTFNBX0VSUigiJXM6IHNuZF9jeDE4X3BjbV9jcmVhdGUoKSBmYWlsZWQgd2l0aCBlcnIgJWRcbiIsCisJCQkgICAgICBfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBlcnJfZXhpdF9mcmVlOworCX0KKwkvKiBGSVhNRSAtIHByb2MgZmlsZXMgKi8KKworCS8qICg3KSBTZXQgdGhlIGRyaXZlciBkYXRhIGFuZCByZXR1cm4gMCAqLworCS8qIFdlIGRvIHRoaXMgb3V0IG9mIG5vcm1hbCBvcmRlciBmb3IgUENJIGRyaXZlcnMgdG8gYXZvaWQgcmFjZXMgKi8KKwljeC0+YWxzYSA9IGN4c2M7CisKKwkvKiAoNikgUmVnaXN0ZXIgdGhlIGNhcmQgaW5zdGFuY2UgKi8KKwlyZXQgPSBzbmRfY2FyZF9yZWdpc3RlcihzYyk7CisJaWYgKHJldCkgeworCQljeC0+YWxzYSA9IE5VTEw7CisJCUNYMThfQUxTQV9FUlIoIiVzOiBzbmRfY2FyZF9yZWdpc3RlcigpIGZhaWxlZCB3aXRoIGVyciAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCByZXQpOworCQlnb3RvIGVycl9leGl0X2ZyZWU7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9leGl0X2ZyZWU6CisJaWYgKHNjICE9IE5VTEwpCisJCXNuZF9jYXJkX2ZyZWUoc2MpOworZXJyX2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworaW50IGN4MThfYWxzYV9sb2FkKHN0cnVjdCBjeDE4ICpjeCkKK3sKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmN4LT52NGwyX2RldjsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnM7CisKKwlpZiAodjRsMl9kZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImN4MTgtYWxzYTogJXM6IHN0cnVjdCB2NGwyX2RldmljZSAqIGlzIE5VTExcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWN4ID0gdG9fY3gxOCh2NGwyX2Rldik7CisJaWYgKGN4ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjeDE4LWFsc2EgY3ggaXMgTlVMTFxuIik7CisJCXJldHVybiAwOworCX0KKworCXMgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUENNXTsKKwlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwpIHsKKwkJQ1gxOF9ERUJVR19BTFNBX0lORk8oIiVzOiBQQ00gc3RyZWFtIGZvciBjYXJkIGlzIGRpc2FibGVkIC0gIgorCQkJCSAgICAgInNraXBwaW5nXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWlmIChjeC0+YWxzYSAhPSBOVUxMKSB7CisJCUNYMThfQUxTQV9FUlIoIiVzOiBzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqIGFscmVhZHkgZXhpc3RzXG4iLAorCQkJICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc25kX2N4MThfaW5pdCh2NGwyX2RldikpIHsKKwkJQ1gxOF9BTFNBX0VSUigiJXM6IGZhaWxlZCB0byBjcmVhdGUgc3RydWN0IHNuZF9jeDE4X2NhcmRcbiIsCisJCQkgICAgICBfX2Z1bmNfXyk7CisJfSBlbHNlIHsKKwkJQ1gxOF9ERUJVR19BTFNBX0lORk8oIiVzOiBjcmVhdGVkIGN4MTggQUxTQSBpbnRlcmZhY2UgaW5zdGFuY2UgIgorCQkJCSAgICAgIlxuIiwgX19mdW5jX18pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgY3gxOF9hbHNhX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJjeDE4LWFsc2E6IG1vZHVsZSBsb2FkaW5nLi4uXG4iKTsKKwljeDE4X2V4dF9pbml0ID0gJmN4MThfYWxzYV9sb2FkOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc25kX2N4MThfZXhpdChzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYykKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KGN4c2MtPnY0bDJfZGV2KTsKKworCS8qIEZJWE1FIC0gcG9pbnRlciBjaGVja3MgJiBzaHV0ZG93biBjeHNjICovCisKKwlzbmRfY2FyZF9mcmVlKGN4c2MtPnNjKTsKKwljeC0+YWxzYSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGN4MThfYWxzYV9leGl0X2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2M7CisKKwlpZiAodjRsMl9kZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImN4MTgtYWxzYTogJXM6IHN0cnVjdCB2NGwyX2RldmljZSAqIGlzIE5VTExcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWN4c2MgPSB0b19zbmRfY3gxOF9jYXJkKHY0bDJfZGV2KTsKKwlpZiAoY3hzYyA9PSBOVUxMKSB7CisJCUNYMThfQUxTQV9XQVJOKCIlczogc3RydWN0IHNuZF9jeDE4X2NhcmQgKiBpcyBOVUxMXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc25kX2N4MThfZXhpdChjeHNjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGN4MThfYWxzYV9leGl0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydjsKKwlpbnQgcmV0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiY3gxOC1hbHNhOiBtb2R1bGUgdW5sb2FkaW5nLi4uXG4iKTsKKworCWRydiA9IGRyaXZlcl9maW5kKCJjeDE4IiwgJnBjaV9idXNfdHlwZSk7CisJcmV0ID0gZHJpdmVyX2Zvcl9lYWNoX2RldmljZShkcnYsIE5VTEwsIE5VTEwsIGN4MThfYWxzYV9leGl0X2NhbGxiYWNrKTsKKwlwdXRfZHJpdmVyKGRydik7CisKKwljeDE4X2V4dF9pbml0ID0gTlVMTDsKKwlwcmludGsoS0VSTl9JTkZPICJjeDE4LWFsc2E6IG1vZHVsZSB1bmxvYWQgY29tcGxldGVcbiIpOworfQorCittb2R1bGVfaW5pdChjeDE4X2Fsc2FfaW5pdCk7Cittb2R1bGVfZXhpdChjeDE4X2Fsc2FfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1peGVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1peGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyMTExNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtbWl4ZXIuYwpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqICBBTFNBIG1peGVyIGNvbnRyb2xzIGZvciB0aGUKKyAqICBBTFNBIGludGVyZmFjZSB0byBjeDE4IFBDTSBjYXB0dXJlIHN0cmVhbXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKworI2luY2x1ZGUgImN4MTgtYWxzYS5oIgorI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCisKKy8qCisgKiBOb3RlIHRoZSBjeDE4LWF2LWNvcmUgdm9sdW1lIHNjYWxlIGlzIGZ1bm55LCBkdWUgdG8gdGhlIGFsaWdubWVudCBvZiB0aGUKKyAqIHNjYWxlIHdpdGggYW5vdGhlciBjaGlwJ3MgcmFuZ2U6CisgKgorICogdjRsMl9jb250cm9sIHZhbHVlCS81MTIJaW5kaWNhdGVkIGRCCWFjdHVhbCBkQglyZWcgMHg4ZDQKKyAqIDB4MDAwMCAtIDB4MDFmZgkgIDAJLTExOQkJLTk2CQkyMjgKKyAqIDB4MDIwMCAtIDB4MDJmZgkgIDEJLTExOAkJLTk2CQkyMjgKKyAqIC4uLgorICogMHgyYzAwIC0gMHgyZGZmCSAyMgkgLTk3CQktOTYJCTIyOAorICogMHgyZTAwIC0gMHgyZmZmCSAyMwkgLTk2CQktOTYJCTIyOAorICogMHgzMDAwIC0gMHgzMWZmCSAyNAkgLTk1CQktOTUJCTIyNgorICogLi4uCisgKiAweGVlMDAgLSAweGVmZmYJMTE5CSAgIDAJCSAgMAkJIDM2CisgKiAuLi4KKyAqIDB4ZmUwMCAtIDB4ZmZmZgkxMjcJICArOAkJICs4CQkgMjAKKyAqLworc3RhdGljIGlubGluZSBpbnQgZEJfdG9fY3gxOF9hdl92b2woaW50IGRCKQoreworCWlmIChkQiA8IC05NikKKwkJZEIgPSAtOTY7CisJZWxzZSBpZiAoZEIgPiA4KQorCQlkQiA9IDg7CisJcmV0dXJuIChkQiArIDExOSkgPDwgOTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3gxOF9hdl92b2xfdG9fZEIoaW50IHYpCit7CisJaWYgKHYgPCAoMjMgPDwgOSkpCisJCXYgPSAoMjMgPDwgOSk7CisJZWxzZSBpZiAodiA+ICgxMjcgPDwgOSkpCisJCXYgPSAoMTI3IDw8IDkpOworCXJldHVybiAodiA+PiA5KSAtIDExOTsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9taXhlcl90dl92b2xfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCXVpbmZvLT5jb3VudCA9IDE7CisJLyogV2UncmUgYWxyZWFkeSB0cmFuc2xhdGluZyB2YWx1ZXMsIGp1c3Qga2VlcCB0aGlzIGNvbnRyb2wgaW4gZEIgKi8KKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gID0gLTk2OworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCAgPSAgIDg7CisJdWluZm8tPnZhbHVlLmludGVnZXIuc3RlcCA9ICAgMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9taXhlcl90dl92b2xfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y3RsKQoreworCXN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjID0gc25kX2tjb250cm9sX2NoaXAoa2N0bCk7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOChjeHNjLT52NGwyX2Rldik7CisJc3RydWN0IHY0bDJfY29udHJvbCB2Y3RybDsKKwlpbnQgcmV0OworCisJdmN0cmwuaWQgPSBWNEwyX0NJRF9BVURJT19WT0xVTUU7CisJdmN0cmwudmFsdWUgPSBkQl90b19jeDE4X2F2X3ZvbCh1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKKworCXNuZF9jeDE4X2xvY2soY3hzYyk7CisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIGNvcmUsIGdfY3RybCwgJnZjdHJsKTsKKwlzbmRfY3gxOF91bmxvY2soY3hzYyk7CisKKwlpZiAoIXJldCkKKwkJdWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGN4MThfYXZfdm9sX3RvX2RCKHZjdHJsLnZhbHVlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X21peGVyX3R2X3ZvbF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwKKwkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjdGwpCit7CisJc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MgPSBzbmRfa2NvbnRyb2xfY2hpcChrY3RsKTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KGN4c2MtPnY0bDJfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9jb250cm9sIHZjdHJsOworCWludCByZXQ7CisKKwl2Y3RybC5pZCA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRTsKKwl2Y3RybC52YWx1ZSA9IGRCX3RvX2N4MThfYXZfdm9sKHVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworCisJc25kX2N4MThfbG9jayhjeHNjKTsKKworCS8qIEZldGNoIGN1cnJlbnQgc3RhdGUgKi8KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgZ19jdHJsLCAmdmN0cmwpOworCisJaWYgKHJldCB8fAorCSAgICAoY3gxOF9hdl92b2xfdG9fZEIodmN0cmwudmFsdWUpICE9IHVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pKSB7CisKKwkJLyogU2V0LCBpZiBuZWVkZWQgKi8KKwkJdmN0cmwudmFsdWUgPSBkQl90b19jeDE4X2F2X3ZvbCh1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKKwkJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIGNvcmUsIHNfY3RybCwgJnZjdHJsKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSAxOyAvKiBJbmRpY2F0ZSBjb250cm9sIHdhcyBjaGFuZ2VkIHcvbyBlcnJvciAqLworCX0KKwlzbmRfY3gxOF91bmxvY2soY3hzYyk7CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qIFRoaXMgaXMgYSBiaXQgb2Ygb3ZlcmtpbGwsIHRoZSBzbGlkZXIgaXMgYWxyZWFkeSBpbiBkQiBpbnRlcm5hbGx5ICovCitzdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUoc25kX2N4MThfbWl4ZXJfdHZfdm9sX2RiX3NjYWxlLCAtOTYwMCwgMTAwLCAwKTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9jeDE4X21peGVyX3R2X3ZvbCBfX2luaXRkYXRhID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIkFuYWxvZyBUViBDYXB0dXJlIFZvbHVtZSIsCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCwKKwkuaW5mbyA9IHNuZF9jeDE4X21peGVyX3R2X3ZvbHVtZV9pbmZvLAorCS5nZXQgPSBzbmRfY3gxOF9taXhlcl90dl92b2x1bWVfZ2V0LAorCS5wdXQgPSBzbmRfY3gxOF9taXhlcl90dl92b2x1bWVfcHV0LAorCS50bHYucCA9IHNuZF9jeDE4X21peGVyX3R2X3ZvbF9kYl9zY2FsZQorfTsKKworLyogRklYTUUgLSBhZGQgbXV0ZSBzd2l0Y2ggYW5kIGJhbGFuY2UsIGJhc3MsIHRyZWJsZSBzbGlkZXJzOgorCVY0TDJfQ0lEX0FVRElPX01VVEUKKworCVY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UKKworCVY0TDJfQ0lEX0FVRElPX0JBU1MKKwlWNEwyX0NJRF9BVURJT19UUkVCTEUKKyovCisKKy8qIEZJWE1FIC0gYWRkIHN0ZXJlbywgbGFuZzEsIGxhbmcyLCBtb25vIG1lbnUgKi8KKy8qIEZJWE1FIC0gYWRkIENTNTM0NSBJMlMgdm9sdW1lIGZvciBIVlItMTYwMCAqLworCitpbnQgX19pbml0IHNuZF9jeDE4X21peGVyX2NyZWF0ZShzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYykKK3sKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gY3hzYy0+djRsMl9kZXY7CisJc3RydWN0IHNuZF9jYXJkICpzYyA9IGN4c2MtPnNjOworCWludCByZXQ7CisKKwlzdHJsY3B5KHNjLT5taXhlcm5hbWUsICJDWDIzNDE4IE1peGVyIiwgc2l6ZW9mKHNjLT5taXhlcm5hbWUpKTsKKworCXJldCA9IHNuZF9jdGxfYWRkKHNjLCBzbmRfY3RsX25ldzEoc25kX2N4MThfbWl4ZXJfdHZfdm9sLCBjeHNjKSk7CisJaWYgKHJldCkgeworCQlDWDE4X0FMU0FfV0FSTigiJXM6IGZhaWxlZCB0byBhZGQgJXMgY29udHJvbCwgZXJyICVkXG4iLAorCQkJCV9fZnVuY19fLCBzbmRfY3gxOF9taXhlcl90dl92b2wubmFtZSwgcmV0KTsKKwl9CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtbWl4ZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtbWl4ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDQxOGRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1taXhlci5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiAgQUxTQSBtaXhlciBjb250cm9scyBmb3IgdGhlCisgKiAgQUxTQSBpbnRlcmZhY2UgdG8gY3gxOCBQQ00gY2FwdHVyZSBzdHJlYW1zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgKiAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworaW50IF9faW5pdCBzbmRfY3gxOF9taXhlcl9jcmVhdGUoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1wY20uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtcGNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJkMzEyZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtcGNtLmMKQEAgLTAsMCArMSwzNTQgQEAKKy8qCisgKiAgQUxTQSBQQ00gZGV2aWNlIGZvciB0aGUKKyAqICBBTFNBIGludGVyZmFjZSB0byBjeDE4IFBDTSBjYXB0dXJlIHN0cmVhbXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgorICogIENvcHlyaWdodCAoQykgMjAwOSAgRGV2aW4gSGVpdG11ZWxsZXIgPGRoZWl0bXVlbGxlckBrZXJuZWxsYWJzLmNvbT4KKyAqCisgKiAgUG9ydGlvbnMgb2YgdGhpcyB3b3JrIHdlcmUgc3BvbnNvcmVkIGJ5IE9ORUxBTiBMaW1pdGVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisKKyNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgorI2luY2x1ZGUgImN4MTgtcXVldWUuaCIKKyNpbmNsdWRlICJjeDE4LXN0cmVhbXMuaCIKKyNpbmNsdWRlICJjeDE4LWZpbGVvcHMuaCIKKyNpbmNsdWRlICJjeDE4LWFsc2EuaCIKKworc3RhdGljIHVuc2lnbmVkIGludCBwY21fZGVidWc7Cittb2R1bGVfcGFyYW0ocGNtX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhwY21fZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMgZm9yIHBjbSIpOworCisjZGVmaW5lIGRwcmludGsoZm10LCBhcmcuLi4pIGRvIHsJCQkJCVwKKwkgICAgaWYgKHBjbV9kZWJ1ZykJCQkJCQlcCisJCXByaW50ayhLRVJOX0lORk8gImN4MTgtYWxzYS1wY20gJXM6ICIgZm10LAkJXAorCQkJCSAgX19mdW5jX18sICMjYXJnKTsgCQkJXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfY3gxOF9od19jYXB0dXJlID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQICAgICAgICAgICB8CisJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEICAgIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCwKKworCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKworCS5yYXRlX21pbiA9IDQ4MDAwLAorCS5yYXRlX21heCA9IDQ4MDAwLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gNjI3MjAgKiA4LAkvKiBqdXN0IGFib3V0IHRoZSB2YWx1ZSBpbiB1c2JhdWRpby5jICovCisJLnBlcmlvZF9ieXRlc19taW4gPSA2NCwJCS8qIDEyNTQ0LzIsICovCisJLnBlcmlvZF9ieXRlc19tYXggPSAxMjU0NCwKKwkucGVyaW9kc19taW4gPSAyLAorCS5wZXJpb2RzX21heCA9IDk4LAkJLyogMTI1NDQsICovCit9OworCit2b2lkIGN4MThfYWxzYV9hbm5vdW5jZV9wY21fZGF0YShzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYywgdTggKnBjbV9kYXRhLAorCQkJCSBzaXplX3QgbnVtX2J5dGVzKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CisJdW5zaWduZWQgaW50IG9sZHB0cjsKKwl1bnNpZ25lZCBpbnQgc3RyaWRlOworCWludCBwZXJpb2RfZWxhcHNlZCA9IDA7CisJaW50IGxlbmd0aDsKKworCWRwcmludGsoImN4MTggYWxzYSBhbm5vdW5jZSBwdHI9JXAgZGF0YT0lcCBudW1fYnl0ZXM9JXpkXG4iLCBjeHNjLAorCQlwY21fZGF0YSwgbnVtX2J5dGVzKTsKKworCXN1YnN0cmVhbSA9IGN4c2MtPmNhcHR1cmVfcGNtX3N1YnN0cmVhbTsKKwlpZiAoc3Vic3RyZWFtID09IE5VTEwpIHsKKwkJZHByaW50aygic3Vic3RyZWFtIHdhcyBOVUxMXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJaWYgKHJ1bnRpbWUgPT0gTlVMTCkgeworCQlkcHJpbnRrKCJydW50aW1lIHdhcyBOVUxMXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN0cmlkZSA9IHJ1bnRpbWUtPmZyYW1lX2JpdHMgPj4gMzsKKwlpZiAoc3RyaWRlID09IDApIHsKKwkJZHByaW50aygic3RyaWRlIGlzIHplcm9cbiIpOworCQlyZXR1cm47CisJfQorCisJbGVuZ3RoID0gbnVtX2J5dGVzIC8gc3RyaWRlOworCWlmIChsZW5ndGggPT0gMCkgeworCQlkcHJpbnRrKCIlczogbGVuZ3RoIHdhcyB6ZXJvXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocnVudGltZS0+ZG1hX2FyZWEgPT0gTlVMTCkgeworCQlkcHJpbnRrKCJkbWEgYXJlYSB3YXMgTlVMTCAtIGlnbm9yaW5nXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW9sZHB0ciA9IGN4c2MtPmh3cHRyX2RvbmVfY2FwdHVyZTsKKwlpZiAob2xkcHRyICsgbGVuZ3RoID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7CisJCXVuc2lnbmVkIGludCBjbnQgPQorCQkJcnVudGltZS0+YnVmZmVyX3NpemUgLSBvbGRwdHI7CisJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIG9sZHB0ciAqIHN0cmlkZSwgcGNtX2RhdGEsCisJCSAgICAgICBjbnQgKiBzdHJpZGUpOworCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEsIHBjbV9kYXRhICsgY250ICogc3RyaWRlLAorCQkgICAgICAgbGVuZ3RoICogc3RyaWRlIC0gY250ICogc3RyaWRlKTsKKwl9IGVsc2UgeworCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBvbGRwdHIgKiBzdHJpZGUsIHBjbV9kYXRhLAorCQkgICAgICAgbGVuZ3RoICogc3RyaWRlKTsKKwl9CisJc25kX3BjbV9zdHJlYW1fbG9jayhzdWJzdHJlYW0pOworCisJY3hzYy0+aHdwdHJfZG9uZV9jYXB0dXJlICs9IGxlbmd0aDsKKwlpZiAoY3hzYy0+aHdwdHJfZG9uZV9jYXB0dXJlID49CisJICAgIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQljeHNjLT5od3B0cl9kb25lX2NhcHR1cmUgLT0KKwkJCXJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCisJY3hzYy0+Y2FwdHVyZV90cmFuc2Zlcl9kb25lICs9IGxlbmd0aDsKKwlpZiAoY3hzYy0+Y2FwdHVyZV90cmFuc2Zlcl9kb25lID49CisJICAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7CisJCWN4c2MtPmNhcHR1cmVfdHJhbnNmZXJfZG9uZSAtPQorCQkJcnVudGltZS0+cGVyaW9kX3NpemU7CisJCXBlcmlvZF9lbGFwc2VkID0gMTsKKwl9CisKKwlzbmRfcGNtX3N0cmVhbV91bmxvY2soc3Vic3RyZWFtKTsKKworCWlmIChwZXJpb2RfZWxhcHNlZCkKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X3BjbV9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gY3hzYy0+djRsMl9kZXY7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOCh2NGwyX2Rldik7CisJc3RydWN0IGN4MThfc3RyZWFtICpzOworCXN0cnVjdCBjeDE4X29wZW5faWQgaXRlbTsKKwlpbnQgcmV0OworCisJLyogSW5zdHJ1Y3QgdGhlIGN4MTggdG8gc3RhcnQgc2VuZGluZyBwYWNrZXRzICovCisJc25kX2N4MThfbG9jayhjeHNjKTsKKwlzID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX1BDTV07CisKKwlpdGVtLmN4ID0gY3g7CisJaXRlbS50eXBlID0gcy0+dHlwZTsKKwlpdGVtLm9wZW5faWQgPSBjeC0+b3Blbl9pZCsrOworCisJLyogU2VlIGlmIHRoZSBzdHJlYW0gaXMgYXZhaWxhYmxlICovCisJaWYgKGN4MThfY2xhaW1fc3RyZWFtKCZpdGVtLCBpdGVtLnR5cGUpKSB7CisJCS8qIE5vLCBpdCdzIGFscmVhZHkgaW4gdXNlICovCisJCXNuZF9jeDE4X3VubG9jayhjeHNjKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAodGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNT0ZGLCAmcy0+c19mbGFncykgfHwKKwkgICAgdGVzdF9hbmRfc2V0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKSkgeworCQkvKiBXZSdyZSBhbHJlYWR5IHN0cmVhbWluZy4gIE5vIGFkZGl0aW9uYWwgYWN0aW9uIHJlcXVpcmVkICovCisJCXNuZF9jeDE4X3VubG9jayhjeHNjKTsKKwkJcmV0dXJuIDA7CisJfQorCisKKwlydW50aW1lLT5odyA9IHNuZF9jeDE4X2h3X2NhcHR1cmU7CisJc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworCWN4c2MtPmNhcHR1cmVfcGNtX3N1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBjeDsKKworCWN4LT5wY21fYW5ub3VuY2VfY2FsbGJhY2sgPSBjeDE4X2Fsc2FfYW5ub3VuY2VfcGNtX2RhdGE7CisKKwkvKiBOb3QgY3VycmVudGx5IHN0cmVhbWluZywgc28gc3RhcnQgaXQgdXAgKi8KKwlzZXRfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpOworCXJldCA9IGN4MThfc3RhcnRfdjRsMl9lbmNvZGVfc3RyZWFtKHMpOworCXNuZF9jeDE4X3VubG9jayhjeHNjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X3BjbV9jYXB0dXJlX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBjeHNjLT52NGwyX2RldjsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KHY0bDJfZGV2KTsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnM7CisJaW50IHJldDsKKworCS8qIEluc3RydWN0IHRoZSBjeDE4IHRvIHN0b3Agc2VuZGluZyBwYWNrZXRzICovCisJc25kX2N4MThfbG9jayhjeHNjKTsKKwlzID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX1BDTV07CisJcmV0ID0gY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzLCAwKTsKKwljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncyk7CisKKwljeDE4X3JlbGVhc2Vfc3RyZWFtKHMpOworCisJY3gtPnBjbV9hbm5vdW5jZV9jYWxsYmFjayA9IE5VTEw7CisJc25kX2N4MThfdW5sb2NrKGN4c2MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfcGNtX2lvY3RsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gc25kX3BjbV9saWJfaW9jdGwoc3Vic3RyZWFtLCBjbWQsIGFyZyk7Cit9CisKKworc3RhdGljIGludCBzbmRfcGNtX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicywKKwkJCQkJc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7CisKKwlkcHJpbnRrKCJBbGxvY2F0aW5nIHZidWZmZXJcbiIpOworCWlmIChydW50aW1lLT5kbWFfYXJlYSkgeworCQlpZiAocnVudGltZS0+ZG1hX2J5dGVzID4gc2l6ZSkKKwkJCXJldHVybiAwOworCisJCXZmcmVlKHJ1bnRpbWUtPmRtYV9hcmVhKTsKKwl9CisJcnVudGltZS0+ZG1hX2FyZWEgPSB2bWFsbG9jKHNpemUpOworCWlmICghcnVudGltZS0+ZG1hX2FyZWEpCisJCXJldHVybiAtRU5PTUVNOworCisJcnVudGltZS0+ZG1hX2J5dGVzID0gc2l6ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJaW50IHJldDsKKworCWRwcmludGsoIiVzIGNhbGxlZFxuIiwgX19mdW5jX18pOworCisJcmV0ID0gc25kX3BjbV9hbGxvY192bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0sCisJCQkJCSAgIHBhcmFtc19idWZmZXJfYnl0ZXMocGFyYW1zKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjeHNjLT5zbG9jaywgZmxhZ3MpOworCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhKSB7CisJCWRwcmludGsoImZyZWVpbmcgcGNtIGNhcHR1cmUgcmVnaW9uXG4iKTsKKwkJdmZyZWUoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSk7CisJCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjeHNjLT5zbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwljeHNjLT5od3B0cl9kb25lX2NhcHR1cmUgPSAwOworCWN4c2MtPmNhcHR1cmVfdHJhbnNmZXJfZG9uZSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljCitzbmRfcGNtX3VmcmFtZXNfdCBzbmRfY3gxOF9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNuZF9wY21fdWZyYW1lc190IGh3cHRyX2RvbmU7CisJc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3hzYy0+c2xvY2ssIGZsYWdzKTsKKwlod3B0cl9kb25lID0gY3hzYy0+aHdwdHJfZG9uZV9jYXB0dXJlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN4c2MtPnNsb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gaHdwdHJfZG9uZTsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICpzbmRfcGNtX2dldF92bWFsbG9jX3BhZ2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXZvaWQgKnBhZ2VwdHIgPSBzdWJzLT5ydW50aW1lLT5kbWFfYXJlYSArIG9mZnNldDsKKworCXJldHVybiB2bWFsbG9jX3RvX3BhZ2UocGFnZXB0cik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2N4MThfcGNtX2NhcHR1cmVfb3BzID0geworCS5vcGVuCQk9IHNuZF9jeDE4X3BjbV9jYXB0dXJlX29wZW4sCisJLmNsb3NlCQk9IHNuZF9jeDE4X3BjbV9jYXB0dXJlX2Nsb3NlLAorCS5pb2N0bAkJPSBzbmRfY3gxOF9wY21faW9jdGwsCisJLmh3X3BhcmFtcwk9IHNuZF9jeDE4X3BjbV9od19wYXJhbXMsCisJLmh3X2ZyZWUJPSBzbmRfY3gxOF9wY21faHdfZnJlZSwKKwkucHJlcGFyZQk9IHNuZF9jeDE4X3BjbV9wcmVwYXJlLAorCS50cmlnZ2VyCT0gc25kX2N4MThfcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIJPSBzbmRfY3gxOF9wY21fcG9pbnRlciwKKwkucGFnZQkJPSBzbmRfcGNtX2dldF92bWFsbG9jX3BhZ2UsCit9OworCitpbnQgc25kX2N4MThfcGNtX2NyZWF0ZShzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYykKK3sKKwlzdHJ1Y3Qgc25kX3BjbSAqc3A7CisJc3RydWN0IHNuZF9jYXJkICpzYyA9IGN4c2MtPnNjOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBjeHNjLT52NGwyX2RldjsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KHY0bDJfZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gc25kX3BjbV9uZXcoc2MsICJDWDIzNDE4IFBDTSIsCisJCQkgIDAsIC8qIFBDTSBkZXZpY2UgMCwgdGhlIG9ubHkgb25lIGZvciB0aGlzIGNhcmQgKi8KKwkJCSAgMCwgLyogMCBwbGF5YmFjayBzdWJzdHJlYW1zICovCisJCQkgIDEsIC8qIDEgY2FwdHVyZSBzdWJzdHJlYW0gKi8KKwkJCSAgJnNwKTsKKwlpZiAocmV0KSB7CisJCUNYMThfQUxTQV9FUlIoIiVzOiBzbmRfY3gxOF9wY21fY3JlYXRlKCkgZmFpbGVkIHdpdGggZXJyICVkXG4iLAorCQkJICAgICAgX19mdW5jX18sIHJldCk7CisJCWdvdG8gZXJyX2V4aXQ7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmN4c2MtPnNsb2NrKTsKKworCXNuZF9wY21fc2V0X29wcyhzcCwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAorCQkJJnNuZF9jeDE4X3BjbV9jYXB0dXJlX29wcyk7CisJc3AtPmluZm9fZmxhZ3MgPSAwOworCXNwLT5wcml2YXRlX2RhdGEgPSBjeHNjOworCXN0cmxjcHkoc3AtPm5hbWUsIGN4LT5jYXJkX25hbWUsIHNpemVvZihzcC0+bmFtZSkpOworCisJcmV0dXJuIDA7CisKK2Vycl9leGl0OgorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLXBjbS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1wY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjU2NjJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1wY20uaApAQCAtMCwwICsxLDI3IEBACisvKgorICogIEFMU0EgUENNIGRldmljZSBmb3IgdGhlCisgKiAgQUxTQSBpbnRlcmZhY2UgdG8gY3gxOCBQQ00gY2FwdHVyZSBzdHJlYW1zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgKiAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworaW50IF9faW5pdCBzbmRfY3gxOF9wY21fY3JlYXRlKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKTsKKworLyogVXNlZCBieSBjeDE4LW1haWxib3ggdG8gYW5ub3VuY2UgdGhlIFBDTSBkYXRhIHRvIHRoZSBtb2R1bGUgKi8KK3ZvaWQgY3gxOF9hbHNhX2Fubm91bmNlX3BjbV9kYXRhKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjYXJkLCB1OCAqcGNtX2RhdGEsCisJCQkJIHNpemVfdCBudW1fYnl0ZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YTFjZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqICBBTFNBIGludGVyZmFjZSB0byBjeDE4IFBDTSBjYXB0dXJlIHN0cmVhbXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqICAwMjExMS0xMzA3ICBVU0EKKyAqLworCitzdHJ1Y3Qgc25kX2NhcmQ7CisKK3N0cnVjdCBzbmRfY3gxOF9jYXJkIHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2OworCXN0cnVjdCBzbmRfY2FyZCAqc2M7CisJdW5zaWduZWQgaW50IGNhcHR1cmVfdHJhbnNmZXJfZG9uZTsKKwl1bnNpZ25lZCBpbnQgaHdwdHJfZG9uZV9jYXB0dXJlOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqY2FwdHVyZV9wY21fc3Vic3RyZWFtOworCXNwaW5sb2NrX3Qgc2xvY2s7Cit9OworCitleHRlcm4gaW50IGN4MThfYWxzYV9kZWJ1ZzsKKworLyoKKyAqIEZpbGUgb3BlcmF0aW9ucyB0aGF0IG1hbmlwdWxhdGUgdGhlIGVuY29kZXIgb3IgdmlkZW8gb3IgYXVkaW8gc3ViZGV2aWNlcworICogbmVlZCB0byBiZSBzZXJpYWxpemVkLiAgVXNlIHRoZSBzYW1lIGxvY2sgd2UgdXNlIGZvciB2NGwyIGZpbGUgb3BzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX2N4MThfbG9jayhzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYykKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KGN4c2MtPnY0bDJfZGV2KTsKKwltdXRleF9sb2NrKCZjeC0+c2VyaWFsaXplX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX2N4MThfdW5sb2NrKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgoY3hzYy0+djRsMl9kZXYpOworCW11dGV4X3VubG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKK30KKworI2RlZmluZSBDWDE4X0FMU0FfREJHRkxHX1dBUk4gICgxIDw8IDApCisjZGVmaW5lIENYMThfQUxTQV9EQkdGTEdfV0FSTiAgKDEgPDwgMCkKKyNkZWZpbmUgQ1gxOF9BTFNBX0RCR0ZMR19JTkZPICAoMSA8PCAxKQorCisjZGVmaW5lIENYMThfQUxTQV9ERUJVRyh4LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKCh4KSAmIGN4MThfYWxzYV9kZWJ1ZykgXAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMtYWxzYTogIiB0eXBlICI6ICIgZm10LCBcCisJCQkJdjRsMl9kZXYtPm5hbWUgLCAjIyBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgQ1gxOF9BTFNBX0RFQlVHX1dBUk4oZm10LCBhcmdzLi4uKSBcCisJQ1gxOF9BTFNBX0RFQlVHKENYMThfQUxTQV9EQkdGTEdfV0FSTiwgIndhcm5pbmciLCBmbXQgLCAjIyBhcmdzKQorCisjZGVmaW5lIENYMThfQUxTQV9ERUJVR19JTkZPKGZtdCwgYXJncy4uLikgXAorCUNYMThfQUxTQV9ERUJVRyhDWDE4X0FMU0FfREJHRkxHX0lORk8sICJpbmZvIiwgZm10ICwgIyMgYXJncykKKworI2RlZmluZSBDWDE4X0FMU0FfRVJSKGZtdCwgYXJncy4uLikgXAorCXByaW50ayhLRVJOX0VSUiAiJXMtYWxzYTogIiBmbXQsIHY0bDJfZGV2LT5uYW1lICwgIyMgYXJncykKKworI2RlZmluZSBDWDE4X0FMU0FfV0FSTihmbXQsIGFyZ3MuLi4pIFwKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlcy1hbHNhOiAiIGZtdCwgdjRsMl9kZXYtPm5hbWUgLCAjIyBhcmdzKQorCisjZGVmaW5lIENYMThfQUxTQV9JTkZPKGZtdCwgYXJncy4uLikgXAorCXByaW50ayhLRVJOX0lORk8gIiVzLWFsc2E6ICIgZm10LCB2NGwyX2Rldi0+bmFtZSAsICMjIGFyZ3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYwppbmRleCBmMTFlNDdhLi5mODA4ZmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMKQEAgLTM5Myw3ICszOTMsNyBAQAogCS5ncGlvX2luaXQuZGlyZWN0aW9uID0gMHg3LAogCS5ncGlvX2F1ZGlvX2lucHV0ID0geyAubWFzayAgID0gMHg3LAogCQkJICAgICAgLnR1bmVyICA9IDB4NiwgLmxpbmVpbiA9IDB4MiwgLnJhZGlvICA9IDB4MiB9LAotCS54Y2VpdmVfcGluID0gMTUsCisJLnhjZWl2ZV9waW4gPSAxLAogCS5wY2lfbGlzdCA9IGN4MThfcGNpX2xlYWR0ZWtfcHZyMjEwMCwKIAkuaTJjID0gJmN4MThfaTJjX3N0ZCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jCmluZGV4IDdmNjVhNDcuLmM5NWE4NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jCkBAIC00Nyw2ICs0NywxMCBAQAogICAgc2V0dGluZyB0aGlzIHRvIDEgeW91IGVuc3VyZSB0aGF0IHJhZGlvMCBpcyBub3cgYWxzbyByYWRpbzEuICovCiBpbnQgY3gxOF9maXJzdF9taW5vcjsKIAorLyogQ2FsbGJhY2sgZm9yIHJlZ2lzdGVyaW5nIGV4dGVuc2lvbnMgKi8KK2ludCAoKmN4MThfZXh0X2luaXQpKHN0cnVjdCBjeDE4ICopOworRVhQT1JUX1NZTUJPTChjeDE4X2V4dF9pbml0KTsKKwogLyogYWRkIHlvdXIgcmV2aXNpb24gYW5kIHdoYXRub3QgaGVyZSAqLwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGN4MThfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJe1BDSV9WRU5ET1JfSURfQ1gsIFBDSV9ERVZJQ0VfSURfQ1gyMzQxOCwKQEAgLTkxLDcgKzk1LDcgQEAKIAogc3RhdGljIGludCBlbmNfdHNfYnVmcyA9IC0xOwogc3RhdGljIGludCBlbmNfbXBnX2J1ZnMgPSAtMTsKLXN0YXRpYyBpbnQgZW5jX2lkeF9idWZzID0gLTE7CitzdGF0aWMgaW50IGVuY19pZHhfYnVmcyA9IENYMThfTUFYX0ZXX01ETFNfUEVSX1NUUkVBTTsKIHN0YXRpYyBpbnQgZW5jX3l1dl9idWZzID0gLTE7CiBzdGF0aWMgaW50IGVuY192YmlfYnVmcyA9IC0xOwogc3RhdGljIGludCBlbmNfcGNtX2J1ZnMgPSAtMTsKQEAgLTE5NiwxNCArMjAwLDE3IEBACiAJCSAiTnVtYmVyIG9mIGVuY29kZXIgTVBHIGJ1ZmZlcnNcbiIKIAkJICJcdFx0XHREZWZhdWx0IGlzIGNvbXB1dGVkIGZyb20gb3RoZXIgZW5jX21wZ18qIHBhcmFtZXRlcnMiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5jX2lkeF9idWZmZXJzLAotCQkgIkVuY29kZXIgSURYIGJ1ZmZlciBtZW1vcnkgKE1CKS4gKGVuY19pZHhfYnVmcyBjYW4gb3ZlcnJpZGUpXG4iCi0JCSAiXHRcdFx0RGVmYXVsdDogIiBfX3N0cmluZ2lmeShDWDE4X0RFRkFVTFRfRU5DX0lEWF9CVUZGRVJTKSk7CisJCSAiKERlcHJlY2F0ZWQpIEVuY29kZXIgSURYIGJ1ZmZlciBtZW1vcnkgKE1CKVxuIgorCQkgIlx0XHRcdElnbm9yZWQsIGV4Y2VwdCAwIGRpc2FibGVzIElEWCBidWZmZXIgYWxsb2NhdGlvbnNcbiIKKwkJICJcdFx0XHREZWZhdWx0OiAxIFtFbmFibGVkXSIpOwogTU9EVUxFX1BBUk1fREVTQyhlbmNfaWR4X2J1ZnNpemUsCiAJCSAiU2l6ZSBvZiBhbiBlbmNvZGVyIElEWCBidWZmZXIgKGtCKVxuIgotCQkgIlx0XHRcdERlZmF1bHQ6ICIgX19zdHJpbmdpZnkoQ1gxOF9ERUZBVUxUX0VOQ19JRFhfQlVGU0laRSkpOworCQkgIlx0XHRcdEFsbG93ZWQgdmFsdWVzIGFyZSBtdWx0aXBsZXMgb2YgMS41IGtCIHJvdW5kZWQgdXBcbiIKKwkJICJcdFx0XHQobXVsdGlwbGVzIG9mIHNpemUgcmVxdWlyZWQgZm9yIDY0IGluZGV4IGVudHJpZXMpXG4iCisJCSAiXHRcdFx0RGVmYXVsdDogMiIpOwogTU9EVUxFX1BBUk1fREVTQyhlbmNfaWR4X2J1ZnMsCiAJCSAiTnVtYmVyIG9mIGVuY29kZXIgSURYIGJ1ZmZlcnNcbiIKLQkJICJcdFx0XHREZWZhdWx0IGlzIGNvbXB1dGVkIGZyb20gb3RoZXIgZW5jX2lkeF8qIHBhcmFtZXRlcnMiKTsKKwkJICJcdFx0XHREZWZhdWx0OiAiIF9fc3RyaW5naWZ5KENYMThfTUFYX0ZXX01ETFNfUEVSX1NUUkVBTSkpOwogTU9EVUxFX1BBUk1fREVTQyhlbmNfeXV2X2J1ZmZlcnMsCiAJCSAiRW5jb2RlciBZVVYgYnVmZmVyIG1lbW9yeSAoTUIpLiAoZW5jX3l1dl9idWZzIGNhbiBvdmVycmlkZSlcbiIKIAkJICJcdFx0XHREZWZhdWx0OiAiIF9fc3RyaW5naWZ5KENYMThfREVGQVVMVF9FTkNfWVVWX0JVRkZFUlMpKTsKQEAgLTIzMSw3ICsyMzgsOCBAQAogCQkgIk51bWJlciBvZiBlbmNvZGVyIFBDTSBidWZmZXJzXG4iCiAJCSAiXHRcdFx0RGVmYXVsdCBpcyBjb21wdXRlZCBmcm9tIG90aGVyIGVuY19wY21fKiBwYXJhbWV0ZXJzIik7CiAKLU1PRFVMRV9QQVJNX0RFU0MoY3gxOF9maXJzdF9taW5vciwgIlNldCBkZXZpY2Ugbm9kZSBudW1iZXIgYXNzaWduZWQgdG8gZmlyc3QgY2FyZCIpOworTU9EVUxFX1BBUk1fREVTQyhjeDE4X2ZpcnN0X21pbm9yLAorCQkgIlNldCBkZXZpY2Ugbm9kZSBudW1iZXIgYXNzaWduZWQgdG8gZmlyc3QgY2FyZCIpOwogCiBNT0RVTEVfQVVUSE9SKCJIYW5zIFZlcmt1aWwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQ1gyMzQxOCBkcml2ZXIiKTsKQEAgLTI0MCw2ICsyNDgsMjggQEAKIAogTU9EVUxFX1ZFUlNJT04oQ1gxOF9WRVJTSU9OKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRVMpICYmIGRlZmluZWQoTU9EVUxFKQorc3RhdGljIHZvaWQgcmVxdWVzdF9tb2R1bGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjeDE4ICpkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGN4MTgsIHJlcXVlc3RfbW9kdWxlX3drKTsKKworCS8qIE1ha2Ugc3VyZSBjeDE4LWFsc2EgbW9kdWxlIGlzIGxvYWRlZCAqLworCXJlcXVlc3RfbW9kdWxlKCJjeDE4LWFsc2EiKTsKKworCS8qIEluaXRpYWxpemUgY3gxOC1hbHNhIGZvciB0aGlzIGluc3RhbmNlIG9mIHRoZSBjeDE4IGRldmljZSAqLworCWlmIChjeDE4X2V4dF9pbml0ICE9IE5VTEwpCisJCWN4MThfZXh0X2luaXQoZGV2KTsKK30KKworc3RhdGljIHZvaWQgcmVxdWVzdF9tb2R1bGVzKHN0cnVjdCBjeDE4ICpkZXYpCit7CisJSU5JVF9XT1JLKCZkZXYtPnJlcXVlc3RfbW9kdWxlX3drLCByZXF1ZXN0X21vZHVsZV9hc3luYyk7CisJc2NoZWR1bGVfd29yaygmZGV2LT5yZXF1ZXN0X21vZHVsZV93ayk7Cit9CisjZWxzZQorI2RlZmluZSByZXF1ZXN0X21vZHVsZXMoZGV2KQorI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCisKIC8qIEdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbnMgKi8KIGludCBjeDE4X21zbGVlcF90aW1lb3V0KHVuc2lnbmVkIGludCBtc2VjcywgaW50IGludHIpCiB7CkBAIC01MDEsNyArNTMxLDEyIEBACiAJCS8qCiAJCSAqIFlVViBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgc3RyZWFtX2J1Zl9zaXplIG5lZWRzIHRvIGJlCiAJCSAqIGFuIGludGVncmFsIG11bHRpcGxlIG9mIDMzLjc1IGtCIChzdG9yYWdlIGZvciAzMiBzY3JlZW5zCi0JCSAqIGxpbmVzIHRvIG1haW50YWluIGFsaWdubWVudCBpbiBjYXNlIG9mIGxvc3QgYnVmZmVycworCQkgKiBsaW5lcyB0byBtYWludGFpbiBhbGlnbm1lbnQgaW4gY2FzZSBvZiBsb3N0IGJ1ZmZlcnMpLgorCQkgKgorCQkgKiBJRFggaXMgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIHN0cmVhbV9idWZfc2l6ZSBzaG91bGQgYmUKKwkJICogYW4gaW50ZWdyYWwgbXVsdGlwbGUgb2YgMS41IGtCIChzdG9yYWdlIGZvciA2NCBpbmRleCBlbnRyaWVzCisJCSAqIHRvIG1haW50YWluIGFsaWdubWVudCBpbiBjYXNlIG9mIGxvc3QgYnVmZmVycykuCisJCSAqCiAJCSAqLwogCQlpZiAoaSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9ZVVYpIHsKIAkJCWN4LT5zdHJlYW1fYnVmX3NpemVbaV0gKj0gMTAyNDsKQEAgLTUxMSwxNSArNTQ2LDI0IEBACiAJCQlpZiAoY3gtPnN0cmVhbV9idWZfc2l6ZVtpXSA8IENYMThfVU5JVF9FTkNfWVVWX0JVRlNJWkUpCiAJCQkJY3gtPnN0cmVhbV9idWZfc2l6ZVtpXSA9CiAJCQkJCQlDWDE4X1VOSVRfRU5DX1lVVl9CVUZTSVpFOworCQl9IGVsc2UgaWYgKGkgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYKSB7CisJCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldICo9IDEwMjQ7CisJCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldIC09CisJCQkgICAoY3gtPnN0cmVhbV9idWZfc2l6ZVtpXSAlIENYMThfVU5JVF9FTkNfSURYX0JVRlNJWkUpOworCisJCQlpZiAoY3gtPnN0cmVhbV9idWZfc2l6ZVtpXSA8IENYMThfVU5JVF9FTkNfSURYX0JVRlNJWkUpCisJCQkJY3gtPnN0cmVhbV9idWZfc2l6ZVtpXSA9CisJCQkJCQlDWDE4X1VOSVRfRU5DX0lEWF9CVUZTSVpFOwogCQl9CiAJCS8qCi0JCSAqIFlVViBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgc3RyZWFtX2J1Zl9zaXplIGlzCisJCSAqIFlVViBhbmQgSURYIGFyZSBzcGVjaWFsIGNhc2VzIHdoZXJlIHRoZSBzdHJlYW1fYnVmX3NpemUgaXMKIAkJICogbm93IGluIGJ5dGVzLgogCQkgKiBWQkkgaXMgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIHN0cmVhbV9idWZfc2l6ZSBpcyBmaXhlZAogCQkgKiBhbmQgYWxyZWFkeSBpbiBieXRlcwogCQkgKi8KIAkJaWYgKGkgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJIHx8Ci0JCSAgICBpID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1lVVikgeworCQkgICAgaSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9ZVVYgfHwKKwkJICAgIGkgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYKSB7CiAJCQlpZiAoY3gtPnN0cmVhbV9idWZmZXJzW2ldIDwgMCkgewogCQkJCWN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9CiAJCQkJCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSAqIDEwMjQgKiAxMDI0CkBAIC0xMDMyLDYgKzEwNzYsMTAgQEAKIAl9CiAKIAlDWDE4X0lORk8oIkluaXRpYWxpemVkIGNhcmQ6ICVzXG4iLCBjeC0+Y2FyZF9uYW1lKTsKKworCS8qIExvYWQgY3gxOCBzdWJtb2R1bGVzIChjeDE4LWFsc2EpICovCisJcmVxdWVzdF9tb2R1bGVzKGN4KTsKKwogCXJldHVybiAwOwogCiBmcmVlX3N0cmVhbXM6CkBAIC0xMjIwLDYgKzEyNjgsNyBAQAogCWtmcmVlKGN4KTsKIH0KIAorCiAvKiBkZWZpbmUgYSBwY2lfZHJpdmVyIGZvciBjYXJkIGRldGVjdGlvbiAqLwogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGN4MThfcGNpX2RyaXZlciA9IHsKICAgICAgIC5uYW1lID0gICAgICJjeDE4IiwKQEAgLTEyMzAsNyArMTI3OSw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG1vZHVsZV9zdGFydCh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gImN4MTg6ICBTdGFydCBpbml0aWFsaXphdGlvbiwgdmVyc2lvbiAlc1xuIiwgQ1gxOF9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPICJjeDE4OiAgU3RhcnQgaW5pdGlhbGl6YXRpb24sIHZlcnNpb24gJXNcbiIsCisJICAgICAgIENYMThfVkVSU0lPTik7CiAKIAkvKiBWYWxpZGF0ZSBwYXJhbWV0ZXJzICovCiAJaWYgKGN4MThfZmlyc3RfbWlub3IgPCAwIHx8IGN4MThfZmlyc3RfbWlub3IgPj0gQ1gxOF9NQVhfQ0FSRFMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKaW5kZXggZTNmNzkxMS4uMjNhZDZkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKQEAgLTEyNiwxMCArMTI2LDIyIEBACiAjZGVmaW5lIENYMThfNjI1X0xJTkVfRU5DX1lVVl9CVUZTSVpFCShDWDE4X1VOSVRfRU5DX1lVVl9CVUZTSVpFICogNTc2LzMyKQogI2RlZmluZSBDWDE4XzUyNV9MSU5FX0VOQ19ZVVZfQlVGU0laRQkoQ1gxOF9VTklUX0VOQ19ZVVZfQlVGU0laRSAqIDQ4MC8zMikKIAorLyogSURYIGJ1ZmZlciBzaXplIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIHRoZSBpbmRleCBlbnRyeSBzaXplIGZyb20gdGhlIGNoaXAgKi8KK3N0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkgeworCV9fbGUzMiBsZW5ndGg7CisJX19sZTMyIG9mZnNldF9sb3c7CisJX19sZTMyIG9mZnNldF9oaWdoOworCV9fbGUzMiBmbGFnczsKKwlfX2xlMzIgcHRzX2xvdzsKKwlfX2xlMzIgcHRzX2hpZ2g7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyNkZWZpbmUgQ1gxOF9VTklUX0VOQ19JRFhfQlVGU0laRSBcCisJKHNpemVvZihzdHJ1Y3QgY3gxOF9lbmNfaWR4X2VudHJ5KSAqIFY0TDJfRU5DX0lEWF9FTlRSSUVTKQorCiAvKiBETUEgYnVmZmVyLCBkZWZhdWx0IHNpemUgaW4ga0IgYWxsb2NhdGVkICovCiAjZGVmaW5lIENYMThfREVGQVVMVF9FTkNfVFNfQlVGU0laRSAgIDMyCiAjZGVmaW5lIENYMThfREVGQVVMVF9FTkNfTVBHX0JVRlNJWkUgIDMyCi0jZGVmaW5lIENYMThfREVGQVVMVF9FTkNfSURYX0JVRlNJWkUgIDMyCisjZGVmaW5lIENYMThfREVGQVVMVF9FTkNfSURYX0JVRlNJWkUgIChDWDE4X1VOSVRfRU5DX0lEWF9CVUZTSVpFICogMSAvIDEwMjQgKyAxKQogI2RlZmluZSBDWDE4X0RFRkFVTFRfRU5DX1lVVl9CVUZTSVpFICAoQ1gxOF9VTklUX0VOQ19ZVVZfQlVGU0laRSAqIDMgLyAxMDI0ICsgMSkKICNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19QQ01fQlVGU0laRSAgIDQKIApAQCAtMjM0LDE2ICsyNDYsOCBAQAogI2RlZmluZSBDWDE4X1dBUk5fREVWKGRldiwgZm10LCBhcmdzLi4uKSAgICAgdjRsMl93YXJuKGRldiwgZm10ICwgIyMgYXJncykKICNkZWZpbmUgQ1gxOF9JTkZPX0RFVihkZXYsIGZtdCwgYXJncy4uLikgICAgIHY0bDJfaW5mbyhkZXYsIGZtdCAsICMjIGFyZ3MpCiAKLS8qIFZhbHVlcyBmb3IgQ1gxOF9BUElfREVDX1BMQVlCQUNLX1NQRUVEIG1wZWdfZnJhbWVfdHlwZV9tYXNrIHBhcmFtZXRlcjogKi8KLSNkZWZpbmUgTVBFR19GUkFNRV9UWVBFX0lGUkFNRSAxCi0jZGVmaW5lIE1QRUdfRlJBTUVfVFlQRV9JRlJBTUVfUEZSQU1FIDMKLSNkZWZpbmUgTVBFR19GUkFNRV9UWVBFX0FMTCA3Ci0KLSNkZWZpbmUgQ1gxOF9NQVhfUEdNX0lOREVYICg0MDApCi0KIGV4dGVybiBpbnQgY3gxOF9kZWJ1ZzsKIAotCiBzdHJ1Y3QgY3gxOF9vcHRpb25zIHsKIAlpbnQgbWVnYWJ5dGVzW0NYMThfTUFYX1NUUkVBTVNdOyAvKiBTaXplIGluIG1lZ2FieXRlcyBvZiBlYWNoIHN0cmVhbSAqLwogCWludCBjYXJkdHlwZTsJCS8qIGZvcmNlIGNhcmQgdHlwZSBvbiBsb2FkICovCkBAIC0yNzYsNiArMjgwLDE4IEBACiAjZGVmaW5lIENYMThfU0xJQ0VEX1RZUEVfV1NTXzYyNSAgICAgICAgKDUpCiAjZGVmaW5lIENYMThfU0xJQ0VEX1RZUEVfVlBTICAgICAgICAgICAgKDcpCiAKKy8qKgorICogbGlzdF9lbnRyeV9pc19wYXN0X2VuZCAtIGNoZWNrIGlmIGEgcHJldmlvdXMgbG9vcCBjdXJzb3IgaXMgb2ZmIGxpc3QgZW5kCisgKiBAcG9zOgl0aGUgdHlwZSAqIHByZXZpb3VzbHkgdXNlZCBhcyBhIGxvb3AgY3Vyc29yLgorICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9zdHJ1Y3Qgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKgorICogQ2hlY2sgaWYgdGhlIGVudHJ5J3MgbGlzdF9oZWFkIGlzIHRoZSBoZWFkIG9mIHRoZSBsaXN0LCB0aHVzIGl0J3Mgbm90IGEKKyAqIHJlYWwgZW50cnkgYnV0IHdhcyB0aGUgbG9vcCBjdXJzb3IgdGhhdCB3YWxrZWQgcGFzdCB0aGUgZW5kCisgKi8KKyNkZWZpbmUgbGlzdF9lbnRyeV9pc19wYXN0X2VuZChwb3MsIGhlYWQsIG1lbWJlcikgXAorCSgmcG9zLT5tZW1iZXIgPT0gKGhlYWQpKQorCiBzdHJ1Y3QgY3gxOF9idWZmZXIgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CkBAIC01NTgsNiArNTc0LDEwIEBACiAJaW50IHN0cmVhbV9idWZmZXJzW0NYMThfTUFYX1NUUkVBTVNdOyAvKiAjIG9mIGJ1ZmZlcnMgZm9yIGVhY2ggc3RyZWFtICovCiAJaW50IHN0cmVhbV9idWZfc2l6ZVtDWDE4X01BWF9TVFJFQU1TXTsgLyogU3RyZWFtIGJ1ZmZlciBzaXplICovCiAJc3RydWN0IGN4MThfc3RyZWFtIHN0cmVhbXNbQ1gxOF9NQVhfU1RSRUFNU107IAkvKiBTdHJlYW0gZGF0YSAqLworCXN0cnVjdCBzbmRfY3gxOF9jYXJkICphbHNhOyAvKiBBTFNBIGludGVyZmFjZSBmb3IgUENNIGNhcHR1cmUgc3RyZWFtICovCisJdm9pZCAoKnBjbV9hbm5vdW5jZV9jYWxsYmFjaykoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmNhcmQsIHU4ICpwY21fZGF0YSwKKwkJCQkgICAgICBzaXplX3QgbnVtX2J5dGVzKTsKKwogCXVuc2lnbmVkIGxvbmcgaV9mbGFnczsgIC8qIGdsb2JhbCBjeDE4IGZsYWdzICovCiAJYXRvbWljX3QgYW5hX2NhcHR1cmluZzsJLyogY291bnQgbnVtYmVyIG9mIGFjdGl2ZSBhbmFsb2cgY2FwdHVyZSBzdHJlYW1zICovCiAJYXRvbWljX3QgdG90X2NhcHR1cmluZzsJLyogdG90YWwgY291bnQgbnVtYmVyIG9mIGFjdGl2ZSBjYXB0dXJlIHN0cmVhbXMgKi8KQEAgLTU3NSwxMiArNTk1LDYgQEAKIAogCXN0cnVjdCB2YmlfaW5mbyB2Ymk7CiAKLQl1MzIgcGdtX2luZm9fb2Zmc2V0OwotCXUzMiBwZ21faW5mb19udW07Ci0JdTMyIHBnbV9pbmZvX3dyaXRlX2lkeDsKLQl1MzIgcGdtX2luZm9fcmVhZF9pZHg7Ci0Jc3RydWN0IHY0bDJfZW5jX2lkeF9lbnRyeSBwZ21faW5mb1tDWDE4X01BWF9QR01fSU5ERVhdOwotCiAJdTY0IG1wZ19kYXRhX3JlY2VpdmVkOwogCXU2NCB2YmlfZGF0YV9pbnNlcnRlZDsKIApAQCAtNjIzLDYgKzYzNyw5IEBACiAJdTMyIGFjdGl2ZV9pbnB1dDsKIAl2NGwyX3N0ZF9pZCBzdGQ7CiAJdjRsMl9zdGRfaWQgdHVuZXJfc3RkOwkvKiBUaGUgbm9ybSBvZiB0aGUgdHVuZXIgKGZpeGVkKSAqLworCisJLyogVXNlZCBmb3IgY3gxOC1hbHNhIG1vZHVsZSBsb2FkaW5nICovCisJc3RydWN0IHdvcmtfc3RydWN0IHJlcXVlc3RfbW9kdWxlX3drOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY3gxOCAqdG9fY3gxOChzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQpAQCAtNjMwLDYgKzY0Nyw5IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGN4MTgsIHY0bDJfZGV2KTsKIH0KIAorLyogY3gxOCBleHRlbnNpb25zIHRvIGJlIGxvYWRlZCAqLworZXh0ZXJuIGludCAoKmN4MThfZXh0X2luaXQpKHN0cnVjdCBjeDE4ICopOworCiAvKiBHbG9iYWxzICovCiBleHRlcm4gaW50IGN4MThfZmlyc3RfbWlub3I7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHZiLmMKaW5kZXggNzFhZDJkMS4uMGFlMmMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHZiLmMKQEAgLTIxMywxMCArMjEzLDE0IEBACiB7CiAJc3RydWN0IGR2Yl9kZW11eCAqZGVtdXggPSBmZWVkLT5kZW11eDsKIAlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnN0cmVhbSA9IChzdHJ1Y3QgY3gxOF9zdHJlYW0gKikgZGVtdXgtPnByaXY7Ci0Jc3RydWN0IGN4MTggKmN4ID0gc3RyZWFtLT5jeDsKKwlzdHJ1Y3QgY3gxOCAqY3g7CiAJaW50IHJldDsKIAl1MzIgdjsKIAorCWlmICghc3RyZWFtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN4ID0gc3RyZWFtLT5jeDsKIAlDWDE4X0RFQlVHX0lORk8oIlN0YXJ0IGZlZWQ6IHBpZCA9IDB4JXggaW5kZXggPSAlZFxuIiwKIAkJCWZlZWQtPnBpZCwgZmVlZC0+aW5kZXgpOwogCkBAIC0yNTMsMTIgKzI1NywxMCBAQAogCWlmICghZGVtdXgtPmRteC5mcm9udGVuZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIXN0cmVhbSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAltdXRleF9sb2NrKCZzdHJlYW0tPmR2Yi5mZWVkbG9jayk7CiAJaWYgKHN0cmVhbS0+ZHZiLmZlZWRpbmcrKyA9PSAwKSB7CiAJCUNYMThfREVCVUdfSU5GTygiU3RhcnRpbmcgVHJhbnNwb3J0IERNQVxuIik7CisJCW11dGV4X2xvY2soJmN4LT5zZXJpYWxpemVfbG9jayk7CiAJCXNldF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc3RyZWFtLT5zX2ZsYWdzKTsKIAkJcmV0ID0gY3gxOF9zdGFydF92NGwyX2VuY29kZV9zdHJlYW0oc3RyZWFtKTsKIAkJaWYgKHJldCA8IDApIHsKQEAgLTI2Nyw2ICsyNjksNyBAQAogCQkJaWYgKHN0cmVhbS0+ZHZiLmZlZWRpbmcgPT0gMCkKIAkJCQljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc3RyZWFtLT5zX2ZsYWdzKTsKIAkJfQorCQltdXRleF91bmxvY2soJmN4LT5zZXJpYWxpemVfbG9jayk7CiAJfSBlbHNlCiAJCXJldCA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZzdHJlYW0tPmR2Yi5mZWVkbG9jayk7CkBAIC0yNzksMTcgKzI4MiwyMCBAQAogewogCXN0cnVjdCBkdmJfZGVtdXggKmRlbXV4ID0gZmVlZC0+ZGVtdXg7CiAJc3RydWN0IGN4MThfc3RyZWFtICpzdHJlYW0gPSAoc3RydWN0IGN4MThfc3RyZWFtICopZGVtdXgtPnByaXY7Ci0Jc3RydWN0IGN4MTggKmN4ID0gc3RyZWFtLT5jeDsKKwlzdHJ1Y3QgY3gxOCAqY3g7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKLQlDWDE4X0RFQlVHX0lORk8oIlN0b3AgZmVlZDogcGlkID0gMHgleCBpbmRleCA9ICVkXG4iLAotCQkJZmVlZC0+cGlkLCBmZWVkLT5pbmRleCk7Ci0KIAlpZiAoc3RyZWFtKSB7CisJCWN4ID0gc3RyZWFtLT5jeDsKKwkJQ1gxOF9ERUJVR19JTkZPKCJTdG9wIGZlZWQ6IHBpZCA9IDB4JXggaW5kZXggPSAlZFxuIiwKKwkJCQlmZWVkLT5waWQsIGZlZWQtPmluZGV4KTsKKwogCQltdXRleF9sb2NrKCZzdHJlYW0tPmR2Yi5mZWVkbG9jayk7CiAJCWlmICgtLXN0cmVhbS0+ZHZiLmZlZWRpbmcgPT0gMCkgewogCQkJQ1gxOF9ERUJVR19JTkZPKCJTdG9wcGluZyBUcmFuc3BvcnQgRE1BXG4iKTsKKwkJCW11dGV4X2xvY2soJmN4LT5zZXJpYWxpemVfbG9jayk7CiAJCQlyZXQgPSBjeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHN0cmVhbSwgMCk7CisJCQltdXRleF91bmxvY2soJmN4LT5zZXJpYWxpemVfbG9jayk7CiAJCX0gZWxzZQogCQkJcmV0ID0gMDsKIAkJbXV0ZXhfdW5sb2NrKCZzdHJlYW0tPmR2Yi5mZWVkbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMKaW5kZXggYzA4ODVjNi4uODYzY2U3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYwpAQCAtMzcsMTUgKzM3LDIxIEBACiAKIC8qIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gY2xhaW0gdGhlIHN0cmVhbSBmb3IgYSBzcGVjaWZpYyBmaWxlIGRlc2NyaXB0b3IuCiAgICBJZiBubyBvbmUgZWxzZSBpcyB1c2luZyB0aGlzIHN0cmVhbSB0aGVuIHRoZSBzdHJlYW0gaXMgY2xhaW1lZCBhbmQKLSAgIGFzc29jaWF0ZWQgVkJJIHN0cmVhbXMgYXJlIGFsc28gYXV0b21hdGljYWxseSBjbGFpbWVkLgorICAgYXNzb2NpYXRlZCBWQkkgYW5kIElEWCBzdHJlYW1zIGFyZSBhbHNvIGF1dG9tYXRpY2FsbHkgY2xhaW1lZC4KICAgIFBvc3NpYmxlIGVycm9yIHJldHVybnM6IC1FQlVTWSBpZiBzb21lb25lIGVsc2UgaGFzIGNsYWltZWQKICAgIHRoZSBzdHJlYW0gb3IgMCBvbiBzdWNjZXNzLiAqLwotc3RhdGljIGludCBjeDE4X2NsYWltX3N0cmVhbShzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCwgaW50IHR5cGUpCitpbnQgY3gxOF9jbGFpbV9zdHJlYW0oc3RydWN0IGN4MThfb3Blbl9pZCAqaWQsIGludCB0eXBlKQogewogCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKIAlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbdHlwZV07Ci0Jc3RydWN0IGN4MThfc3RyZWFtICpzX3ZiaTsKLQlpbnQgdmJpX3R5cGU7CisJc3RydWN0IGN4MThfc3RyZWFtICpzX2Fzc29jOworCisJLyogTm90aGluZyBzaG91bGQgZXZlciB0cnkgdG8gZGlyZWN0bHkgY2xhaW0gdGhlIElEWCBzdHJlYW0gKi8KKwlpZiAodHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFgpIHsKKwkJQ1gxOF9XQVJOKCJNUEVHIEluZGV4IHN0cmVhbSBjYW5ub3QgYmUgY2xhaW1lZCAiCisJCQkgICJkaXJlY3RseSwgYnV0IHNvbWV0aGluZyB0cmllZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChDWDE4X0ZfU19DTEFJTUVELCAmcy0+c19mbGFncykpIHsKIAkJLyogc29tZW9uZSBhbHJlYWR5IGNsYWltZWQgdGhpcyBzdHJlYW0gKi8KQEAgLTY3LDMyICs3Myw0NyBAQAogCX0KIAlzLT5pZCA9IGlkLT5vcGVuX2lkOwogCi0JLyogQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHIG5lZWRzIHRvIGNsYWltIENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSQotCSAgIChwcm92aWRlZCBWQkkgaW5zZXJ0aW9uIGlzIG9uIGFuZCBzbGljZWQgVkJJIGlzIHNlbGVjdGVkKSwgZm9yIGFsbAotCSAgIG90aGVyIHN0cmVhbXMgd2UncmUgZG9uZSAqLwotCWlmICh0eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyAmJgotCSAgICBjeC0+dmJpLmluc2VydF9tcGVnICYmICFjeDE4X3Jhd192YmkoY3gpKSB7Ci0JCXZiaV90eXBlID0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJOwotCX0gZWxzZSB7CisJLyoKKwkgKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgbmVlZHMgdG8gY2xhaW06CisJICogQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJLCBpZiBWQkkgaW5zZXJ0aW9uIGlzIG9uIGZvciBzbGljZWQgVkJJLCBvcgorCSAqIENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCwgaWYgVkJJIGluc2VydGlvbiBpcyBvZmYgZm9yIHNsaWNlZCBWQkkKKwkgKiAoV2UgZG9uJ3QgeWV0IGZpeCB1cCBNUEVHIEluZGV4IGVudHJpZXMgZm9yIG91ciBpbnNlcnRlZCBwYWNrZXRzKS4KKwkgKgorCSAqIEZvciBhbGwgb3RoZXIgc3RyZWFtcyB3ZSdyZSBkb25lLgorCSAqLworCWlmICh0eXBlICE9IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykKIAkJcmV0dXJuIDA7Ci0JfQotCXNfdmJpID0gJmN4LT5zdHJlYW1zW3ZiaV90eXBlXTsKIAotCXNldF9iaXQoQ1gxOF9GX1NfQ0xBSU1FRCwgJnNfdmJpLT5zX2ZsYWdzKTsKKwlzX2Fzc29jID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF07CisJaWYgKGN4LT52YmkuaW5zZXJ0X21wZWcgJiYgIWN4MThfcmF3X3ZiaShjeCkpCisJCXNfYXNzb2MgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXTsKKwllbHNlIGlmICghY3gxOF9zdHJlYW1fZW5hYmxlZChzX2Fzc29jKSkKKwkJcmV0dXJuIDA7CisKKwlzZXRfYml0KENYMThfRl9TX0NMQUlNRUQsICZzX2Fzc29jLT5zX2ZsYWdzKTsKIAogCS8qIG1hcmsgdGhhdCBpdCBpcyB1c2VkIGludGVybmFsbHkgKi8KLQlzZXRfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnNfdmJpLT5zX2ZsYWdzKTsKKwlzZXRfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnNfYXNzb2MtPnNfZmxhZ3MpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChjeDE4X2NsYWltX3N0cmVhbSk7CiAKIC8qIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgYSBwcmV2aW91c2x5IGNsYWltZWQgc3RyZWFtLiBJdCB3aWxsIHRha2UgaW50bwogICAgYWNjb3VudCBhc3NvY2lhdGVkIFZCSSBzdHJlYW1zLiAqLwotc3RhdGljIHZvaWQgY3gxOF9yZWxlYXNlX3N0cmVhbShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMpCit2b2lkIGN4MThfcmVsZWFzZV9zdHJlYW0oc3RydWN0IGN4MThfc3RyZWFtICpzKQogewogCXN0cnVjdCBjeDE4ICpjeCA9IHMtPmN4OwotCXN0cnVjdCBjeDE4X3N0cmVhbSAqc192Ymk7CisJc3RydWN0IGN4MThfc3RyZWFtICpzX2Fzc29jOwogCiAJcy0+aWQgPSAtMTsKKwlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFgpIHsKKwkJLyoKKwkJICogVGhlIElEWCBzdHJlYW0gaXMgb25seSB1c2VkIGludGVybmFsbHksIGFuZCBjYW4KKwkJICogb25seSBiZSBpbmRpcmVjdGx5IHVuY2xhaW1lZCBieSB1bmNsYWltaW5nIHRoZSBNUEcgc3RyZWFtLgorCQkgKi8KKwkJcmV0dXJuOworCX0KKwogCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSAmJgogCQl0ZXN0X2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzLT5zX2ZsYWdzKSkgewogCQkvKiB0aGlzIHN0cmVhbSBpcyBzdGlsbCBpbiB1c2UgaW50ZXJuYWxseSAqLwpAQCAtMTA1LDI1ICsxMjYsMzYgQEAKIAogCWN4MThfZmx1c2hfcXVldWVzKHMpOwogCi0JLyogQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHIG5lZWRzIHRvIHJlbGVhc2UgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJLAotCSAgIGZvciBhbGwgb3RoZXIgc3RyZWFtcyB3ZSdyZSBkb25lICovCi0JaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKQotCQlzX3ZiaSA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldOwotCWVsc2UKKwkvKgorCSAqIENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyBuZWVkcyB0byByZWxlYXNlIHRoZQorCSAqIENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSBhbmQvb3IgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYIHN0cmVhbXMuCisJICoKKwkgKiBGb3IgYWxsIG90aGVyIHN0cmVhbXMgd2UncmUgZG9uZS4KKwkgKi8KKwlpZiAocy0+dHlwZSAhPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcpCiAJCXJldHVybjsKIAotCS8qIGNsZWFyIGludGVybmFsIHVzZSBmbGFnICovCi0JaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoQ1gxOF9GX1NfSU5URVJOQUxfVVNFLCAmc192YmktPnNfZmxhZ3MpKSB7Ci0JCS8qIHdhcyBhbHJlYWR5IGNsZWFyZWQgKi8KLQkJcmV0dXJuOworCS8qIFVuY2xhaW0gdGhlIGFzc29jaWF0ZWQgTVBFRyBJbmRleCBzdHJlYW0gKi8KKwlzX2Fzc29jID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF07CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzX2Fzc29jLT5zX2ZsYWdzKSkgeworCQljbGVhcl9iaXQoQ1gxOF9GX1NfQ0xBSU1FRCwgJnNfYXNzb2MtPnNfZmxhZ3MpOworCQljeDE4X2ZsdXNoX3F1ZXVlcyhzX2Fzc29jKTsKIAl9Ci0JaWYgKHNfdmJpLT5pZCAhPSAtMSkgewotCQkvKiBWQkkgc3RyZWFtIHN0aWxsIGNsYWltZWQgYnkgYSBmaWxlIGRlc2NyaXB0b3IgKi8KLQkJcmV0dXJuOworCisJLyogVW5jbGFpbSB0aGUgYXNzb2NpYXRlZCBWQkkgc3RyZWFtICovCisJc19hc3NvYyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ1gxOF9GX1NfSU5URVJOQUxfVVNFLCAmc19hc3NvYy0+c19mbGFncykpIHsKKwkJaWYgKHNfYXNzb2MtPmlkID09IC0xKSB7CisJCQkvKgorCQkJICogVGhlIFZCSSBzdHJlYW0gaXMgbm90IHN0aWxsIGNsYWltZWQgYnkgYSBmaWxlCisJCQkgKiBkZXNjcmlwdG9yLCBzbyBjb21wbGV0ZWx5IHVuY2xhaW0gaXQuCisJCQkgKi8KKwkJCWNsZWFyX2JpdChDWDE4X0ZfU19DTEFJTUVELCAmc19hc3NvYy0+c19mbGFncyk7CisJCQljeDE4X2ZsdXNoX3F1ZXVlcyhzX2Fzc29jKTsKKwkJfQogCX0KLQljbGVhcl9iaXQoQ1gxOF9GX1NfQ0xBSU1FRCwgJnNfdmJpLT5zX2ZsYWdzKTsKLQljeDE4X2ZsdXNoX3F1ZXVlcyhzX3ZiaSk7CiB9CitFWFBPUlRfU1lNQk9MKGN4MThfcmVsZWFzZV9zdHJlYW0pOwogCiBzdGF0aWMgdm9pZCBjeDE4X2R1YWx3YXRjaChzdHJ1Y3QgY3gxOCAqY3gpCiB7CkBAIC0xNzcsOSArMjA5LDcgQEAKIAkqZXJyID0gMDsKIAl3aGlsZSAoMSkgewogCQlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcpIHsKLQkJCS8qIFByb2Nlc3MgcGVuZGluZyBwcm9ncmFtIGluZm8gdXBkYXRlcyBhbmQgcGVuZGluZwotCQkJICAgVkJJIGRhdGEgKi8KLQorCQkJLyogUHJvY2VzcyBwZW5kaW5nIHByb2dyYW0gdXBkYXRlcyBhbmQgVkJJIGRhdGEgKi8KIAkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGN4LT5kdWFsd2F0Y2hfamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpKSB7CiAJCQkJY3gtPmR1YWx3YXRjaF9qaWZmaWVzID0gamlmZmllczsKIAkJCQljeDE4X2R1YWx3YXRjaChjeCk7CkBAIC0zNjIsMTggKzM5Miw2IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotLyoqCi0gKiBsaXN0X2VudHJ5X2lzX3Bhc3RfZW5kIC0gY2hlY2sgaWYgYSBwcmV2aW91cyBsb29wIGN1cnNvciBpcyBvZmYgbGlzdCBlbmQKLSAqIEBwb3M6CXRoZSB0eXBlICogcHJldmlvdXNseSB1c2VkIGFzIGEgbG9vcCBjdXJzb3IuCi0gKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KLSAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KLSAqCi0gKiBDaGVjayBpZiB0aGUgZW50cnkncyBsaXN0X2hlYWQgaXMgdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHRodXMgaXQncyBub3QgYQotICogcmVhbCBlbnRyeSBidXQgd2FzIHRoZSBsb29wIGN1cnNvciB0aGF0IHdhbGtlZCBwYXN0IHRoZSBlbmQKLSAqLwotI2RlZmluZSBsaXN0X2VudHJ5X2lzX3Bhc3RfZW5kKHBvcywgaGVhZCwgbWVtYmVyKSBcCi0JKCZwb3MtPm1lbWJlciA9PSAoaGVhZCkpCi0KIHN0YXRpYyBzaXplX3QgY3gxOF9jb3B5X21kbF90b191c2VyKHN0cnVjdCBjeDE4X3N0cmVhbSAqcywKIAkJc3RydWN0IGN4MThfbWRsICptZGwsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgdWNvdW50KQogewpAQCAtNDk4LDYgKzUxNiw3IEBACiAJc3RydWN0IGN4MTggKmN4ID0gaWQtPmN4OwogCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1tpZC0+dHlwZV07CiAJc3RydWN0IGN4MThfc3RyZWFtICpzX3ZiaTsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfaWR4OwogCiAJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUkFEKSB7CiAJCS8qIHlvdSBjYW5ub3QgcmVhZCBmcm9tIHRoZXNlIHN0cmVhbSB0eXBlcy4gKi8KQEAgLTUxNiwyNSArNTM1LDMzIEBACiAJCXJldHVybiAwOwogCX0KIAotCS8qIFN0YXJ0IFZCSSBjYXB0dXJlIGlmIHJlcXVpcmVkICovCisJLyogU3RhcnQgYXNzb2NpYXRlZCBWQkkgb3IgSURYIHN0cmVhbSBjYXB0dXJlIGlmIHJlcXVpcmVkICovCiAJc192YmkgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXTsKLQlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgJiYKLQkgICAgdGVzdF9iaXQoQ1gxOF9GX1NfSU5URVJOQUxfVVNFLCAmc192YmktPnNfZmxhZ3MpICYmCi0JICAgICF0ZXN0X2FuZF9zZXRfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfdmJpLT5zX2ZsYWdzKSkgewotCQkvKiBOb3RlOiB0aGUgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJIGlzIGNsYWltZWQKLQkJICAgYXV0b21hdGljYWxseSB3aGVuIHRoZSBNUEcgc3RyZWFtIGlzIGNsYWltZWQuCi0JCSAgIFdlIG9ubHkgbmVlZCB0byBzdGFydCB0aGUgVkJJIGNhcHR1cmluZy4gKi8KLQkJaWYgKGN4MThfc3RhcnRfdjRsMl9lbmNvZGVfc3RyZWFtKHNfdmJpKSkgewotCQkJQ1gxOF9ERUJVR19XQVJOKCJWQkkgY2FwdHVyZSBzdGFydCBmYWlsZWRcbiIpOwotCi0JCQkvKiBGYWlsdXJlLCBjbGVhbiB1cCBhbmQgcmV0dXJuIGFuIGVycm9yICovCi0JCQljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpOwotCQkJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpOwotCQkJLyogYWxzbyByZWxlYXNlcyB0aGUgYXNzb2NpYXRlZCBWQkkgc3RyZWFtICovCi0JCQljeDE4X3JlbGVhc2Vfc3RyZWFtKHMpOwotCQkJcmV0dXJuIC1FSU87CisJc19pZHggPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYXTsKKwlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcpIHsKKwkJLyoKKwkJICogVGhlIFZCSSBhbmQgSURYIHN0cmVhbXMgc2hvdWxkIGhhdmUgYmVlbiBjbGFpbWVkCisJCSAqIGF1dG9tYXRpY2FsbHksIGlmIGZvciBpbnRlcm5hbCB1c2UsIHdoZW4gdGhlIE1QRyBzdHJlYW0gd2FzCisJCSAqIGNsYWltZWQuICBXZSBvbmx5IG5lZWQgdG8gc3RhcnQgdGhlc2Ugc3RyZWFtcyBjYXB0dXJpbmcuCisJCSAqLworCQlpZiAodGVzdF9iaXQoQ1gxOF9GX1NfSU5URVJOQUxfVVNFLCAmc19pZHgtPnNfZmxhZ3MpICYmCisJCSAgICAhdGVzdF9hbmRfc2V0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX2lkeC0+c19mbGFncykpIHsKKwkJCWlmIChjeDE4X3N0YXJ0X3Y0bDJfZW5jb2RlX3N0cmVhbShzX2lkeCkpIHsKKwkJCQlDWDE4X0RFQlVHX1dBUk4oIklEWCBjYXB0dXJlIHN0YXJ0IGZhaWxlZFxuIik7CisJCQkJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfaWR4LT5zX2ZsYWdzKTsKKwkJCQlnb3RvIHN0YXJ0X2ZhaWxlZDsKKwkJCX0KKwkJCUNYMThfREVCVUdfSU5GTygiSURYIGNhcHR1cmUgc3RhcnRlZFxuIik7CiAJCX0KLQkJQ1gxOF9ERUJVR19JTkZPKCJWQkkgaW5zZXJ0aW9uIHN0YXJ0ZWRcbiIpOworCQlpZiAodGVzdF9iaXQoQ1gxOF9GX1NfSU5URVJOQUxfVVNFLCAmc192YmktPnNfZmxhZ3MpICYmCisJCSAgICAhdGVzdF9hbmRfc2V0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncykpIHsKKwkJCWlmIChjeDE4X3N0YXJ0X3Y0bDJfZW5jb2RlX3N0cmVhbShzX3ZiaSkpIHsKKwkJCQlDWDE4X0RFQlVHX1dBUk4oIlZCSSBjYXB0dXJlIHN0YXJ0IGZhaWxlZFxuIik7CisJCQkJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfdmJpLT5zX2ZsYWdzKTsKKwkJCQlnb3RvIHN0YXJ0X2ZhaWxlZDsKKwkJCX0KKwkJCUNYMThfREVCVUdfSU5GTygiVkJJIGluc2VydGlvbiBzdGFydGVkXG4iKTsKKwkJfQogCX0KIAogCS8qIFRlbGwgdGhlIGNhcmQgdG8gc3RhcnQgY2FwdHVyaW5nICovCkBAIC01NDcsMTkgKzU3NCwyOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBmYWlsdXJlLCBjbGVhbiB1cCAqLworc3RhcnRfZmFpbGVkOgogCUNYMThfREVCVUdfV0FSTigiRmFpbGVkIHRvIHN0YXJ0IGNhcHR1cmluZyBmb3Igc3RyZWFtICVzXG4iLCBzLT5uYW1lKTsKIAotCS8qIE5vdGU6IHRoZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkkgaXMgcmVsZWFzZWQKLQkgICBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIE1QRyBzdHJlYW0gaXMgcmVsZWFzZWQuCi0JICAgV2Ugb25seSBuZWVkIHRvIHN0b3AgdGhlIFZCSSBjYXB0dXJpbmcuICovCi0JaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHICYmCi0JICAgIHRlc3RfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfdmJpLT5zX2ZsYWdzKSkgewotCQljeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHNfdmJpLCAwKTsKLQkJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfdmJpLT5zX2ZsYWdzKTsKKwkvKgorCSAqIFRoZSBhc3NvY2lhdGVkIFZCSSBhbmQgSURYIHN0cmVhbXMgZm9yIGludGVybmFsIHVzZSBhcmUgcmVsZWFzZWQKKwkgKiBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIE1QRyBzdHJlYW0gaXMgcmVsZWFzZWQuICBXZSBvbmx5IG5lZWQgdG8gc3RvcAorCSAqIHRoZSBhc3NvY2lhdGVkIHN0cmVhbS4KKwkgKi8KKwlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcpIHsKKwkJLyogU3RvcCB0aGUgSURYIHN0cmVhbSB3aGljaCBpcyBhbHdheXMgZm9yIGludGVybmFsIHVzZSAqLworCQlpZiAodGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc19pZHgtPnNfZmxhZ3MpKSB7CisJCQljeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHNfaWR4LCAwKTsKKwkJCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX2lkeC0+c19mbGFncyk7CisJCX0KKwkJLyogU3RvcCB0aGUgVkJJIHN0cmVhbSwgaWYgb25seSBydW5uaW5nIGZvciBpbnRlcm5hbCB1c2UgKi8KKwkJaWYgKHRlc3RfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfdmJpLT5zX2ZsYWdzKSAmJgorCQkgICAgIXRlc3RfYml0KENYMThfRl9TX0FQUExfSU8sICZzX3ZiaS0+c19mbGFncykpIHsKKwkJCWN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0oc192YmksIDApOworCQkJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfdmJpLT5zX2ZsYWdzKTsKKwkJfQogCX0KIAljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncyk7Ci0JY3gxOF9yZWxlYXNlX3N0cmVhbShzKTsKKwljeDE4X3JlbGVhc2Vfc3RyZWFtKHMpOyAvKiBBbHNvIHJlbGVhc2VzIGFzc29jaWF0ZWQgc3RyZWFtcyAqLwogCXJldHVybiAtRUlPOwogfQogCkBAIC02MTgsNiArNjU1LDggQEAKIHsKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CiAJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW2lkLT50eXBlXTsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfdmJpID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV07CisJc3RydWN0IGN4MThfc3RyZWFtICpzX2lkeCA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdOwogCiAJQ1gxOF9ERUJVR19JT0NUTCgiY2xvc2UoKSBvZiAlc1xuIiwgcy0+bmFtZSk7CiAKQEAgLTYyNSwxNyArNjY0LDE5IEBACiAKIAkvKiBTdG9wIGNhcHR1cmluZyAqLwogCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKSkgewotCQlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfdmJpID0KLQkJCSZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldOwotCiAJCUNYMThfREVCVUdfSU5GTygiY2xvc2Ugc3RvcHBpbmcgY2FwdHVyZVxuIik7Ci0JCS8qIFNwZWNpYWwgY2FzZTogYSBydW5uaW5nIFZCSSBjYXB0dXJlIGZvciBWQkkgaW5zZXJ0aW9uCi0JCSAgIGluIHRoZSBtcGVnIHN0cmVhbS4gTmVlZCB0byBzdG9wIHRoYXQgdG9vLiAqLwotCQlpZiAoaWQtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHICYmCi0JCSAgICB0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncykgJiYKLQkJICAgICF0ZXN0X2JpdChDWDE4X0ZfU19BUFBMX0lPLCAmc192YmktPnNfZmxhZ3MpKSB7Ci0JCQlDWDE4X0RFQlVHX0lORk8oImNsb3NlIHN0b3BwaW5nIGVtYmVkZGVkIFZCSSBjYXB0dXJlXG4iKTsKLQkJCWN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0oc192YmksIDApOworCQlpZiAoaWQtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKSB7CisJCQkvKiBTdG9wIGludGVybmFsIHVzZSBhc3NvY2lhdGVkIFZCSSBhbmQgSURYIHN0cmVhbXMgKi8KKwkJCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncykgJiYKKwkJCSAgICAhdGVzdF9iaXQoQ1gxOF9GX1NfQVBQTF9JTywgJnNfdmJpLT5zX2ZsYWdzKSkgeworCQkJCUNYMThfREVCVUdfSU5GTygiY2xvc2Ugc3RvcHBpbmcgZW1iZWRkZWQgVkJJICIKKwkJCQkJCSJjYXB0dXJlXG4iKTsKKwkJCQljeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHNfdmJpLCAwKTsKKwkJCX0KKwkJCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX2lkeC0+c19mbGFncykpIHsKKwkJCQlDWDE4X0RFQlVHX0lORk8oImNsb3NlIHN0b3BwaW5nIElEWCBjYXB0dXJlXG4iKTsKKwkJCQljeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHNfaWR4LCAwKTsKKwkJCX0KIAkJfQogCQlpZiAoaWQtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJICYmCiAJCSAgICB0ZXN0X2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzLT5zX2ZsYWdzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuaAppbmRleCA5MmUyZDVkLi41YzhmY2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5oCkBAIC0zNCwzICszNCw2IEBACiB2b2lkIGN4MThfbXV0ZShzdHJ1Y3QgY3gxOCAqY3gpOwogdm9pZCBjeDE4X3VubXV0ZShzdHJ1Y3QgY3gxOCAqY3gpOwogCisvKiBTaGFyZWQgd2l0aCBjeDE4LWFsc2EgbW9kdWxlICovCitpbnQgY3gxOF9jbGFpbV9zdHJlYW0oc3RydWN0IGN4MThfb3Blbl9pZCAqaWQsIGludCB0eXBlKTsKK3ZvaWQgY3gxOF9yZWxlYXNlX3N0cmVhbShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKaW5kZXggM2U0ZmMxOS4uYjgxZGQwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCkBAIC03NzUsMTAgKzc3NSwxNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfY3gxOF9wcm9jZXNzX2lkeF9kYXRhKHN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmLAorCQkJCSAgc3RydWN0IHY0bDJfZW5jX2lkeCAqaWR4KQoreworCWludCBjb25zdW1lZCwgcmVtYWluaW5nOworCXN0cnVjdCB2NGwyX2VuY19pZHhfZW50cnkgKmVfaWR4OworCXN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkgKmVfYnVmOworCisJLyogRnJhbWUgdHlwZSBsb29rdXA6IDE9SSwgMj1QLCA0PUIgKi8KKwljb25zdCBpbnQgbWFwcGluZ1s4XSA9IHsKKwkJLTEsIFY0TDJfRU5DX0lEWF9GUkFNRV9JLCBWNEwyX0VOQ19JRFhfRlJBTUVfUCwKKwkJLTEsIFY0TDJfRU5DX0lEWF9GUkFNRV9CLCAtMSwgLTEsIC0xCisJfTsKKworCS8qCisJICogQXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgYSBidWYgaG9sZHMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mCisJICogc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSBvYmplY3RzIGFuZCBpcyBwcm9wZXJseSBhbGlnbmVkLgorCSAqIFRoaXMgaXMgZW5mb3JjZWQgYnkgdGhlIG1vZHVsZSBvcHRpb25zIG9uIElEWCBidWZmZXIgc2l6ZXMuCisJICovCisJcmVtYWluaW5nID0gYnVmLT5ieXRlc3VzZWQgLSBidWYtPnJlYWRwb3M7CisJY29uc3VtZWQgPSAwOworCWVfaWR4ID0gJmlkeC0+ZW50cnlbaWR4LT5lbnRyaWVzXTsKKwllX2J1ZiA9IChzdHJ1Y3QgY3gxOF9lbmNfaWR4X2VudHJ5ICopICZidWYtPmJ1ZltidWYtPnJlYWRwb3NdOworCisJd2hpbGUgKHJlbWFpbmluZyA+PSBzaXplb2Yoc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSkgJiYKKwkgICAgICAgaWR4LT5lbnRyaWVzIDwgVjRMMl9FTkNfSURYX0VOVFJJRVMpIHsKKworCQllX2lkeC0+b2Zmc2V0ID0gKCgodTY0KSBsZTMyX3RvX2NwdShlX2J1Zi0+b2Zmc2V0X2hpZ2gpKSA8PCAzMikKKwkJCQl8IGxlMzJfdG9fY3B1KGVfYnVmLT5vZmZzZXRfbG93KTsKKworCQllX2lkeC0+cHRzID0gKCgodTY0KSAobGUzMl90b19jcHUoZV9idWYtPnB0c19oaWdoKSAmIDEpKSA8PCAzMikKKwkJCSAgICAgfCBsZTMyX3RvX2NwdShlX2J1Zi0+cHRzX2xvdyk7CisKKwkJZV9pZHgtPmxlbmd0aCA9IGxlMzJfdG9fY3B1KGVfYnVmLT5sZW5ndGgpOworCisJCWVfaWR4LT5mbGFncyA9IG1hcHBpbmdbbGUzMl90b19jcHUoZV9idWYtPmZsYWdzKSAmIDB4N107CisKKwkJZV9pZHgtPnJlc2VydmVkWzBdID0gMDsKKwkJZV9pZHgtPnJlc2VydmVkWzFdID0gMDsKKworCQlpZHgtPmVudHJpZXMrKzsKKwkJZV9pZHggPSAmaWR4LT5lbnRyeVtpZHgtPmVudHJpZXNdOworCQllX2J1ZisrOworCisJCXJlbWFpbmluZyAtPSBzaXplb2Yoc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSk7CisJCWNvbnN1bWVkICs9IHNpemVvZihzdHJ1Y3QgY3gxOF9lbmNfaWR4X2VudHJ5KTsKKwl9CisKKwkvKiBTd2FsbG93IGFueSBwYXJ0aWFsIGVudHJpZXMgYXQgdGhlIGVuZCwgaWYgdGhlcmUgYXJlIGFueSAqLworCWlmIChyZW1haW5pbmcgPiAwICYmIHJlbWFpbmluZyA8IHNpemVvZihzdHJ1Y3QgY3gxOF9lbmNfaWR4X2VudHJ5KSkKKwkJY29uc3VtZWQgKz0gcmVtYWluaW5nOworCisJYnVmLT5yZWFkcG9zICs9IGNvbnN1bWVkOworCXJldHVybiBjb25zdW1lZDsKK30KKworc3RhdGljIGludCBjeDE4X3Byb2Nlc3NfaWR4X2RhdGEoc3RydWN0IGN4MThfc3RyZWFtICpzLCBzdHJ1Y3QgY3gxOF9tZGwgKm1kbCwKKwkJCQkgc3RydWN0IHY0bDJfZW5jX2lkeCAqaWR4KQoreworCWlmIChzLT50eXBlICE9IENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobWRsLT5jdXJyX2J1ZiA9PSBOVUxMKQorCQltZGwtPmN1cnJfYnVmID0gbGlzdF9maXJzdF9lbnRyeSgmbWRsLT5idWZfbGlzdCwKKwkJCQkJCSBzdHJ1Y3QgY3gxOF9idWZmZXIsIGxpc3QpOworCisJaWYgKGxpc3RfZW50cnlfaXNfcGFzdF9lbmQobWRsLT5jdXJyX2J1ZiwgJm1kbC0+YnVmX2xpc3QsIGxpc3QpKSB7CisJCS8qCisJCSAqIEZvciBzb21lIHJlYXNvbiB3ZSd2ZSBleGhhdXN0ZWQgdGhlIGJ1ZmZlcnMsIGJ1dCB0aGUgTURMCisJCSAqIG9iamVjdCBzdGlsbCBzYWlkIHNvbWUgZGF0YSB3YXMgdW5yZWFkLgorCQkgKiBGaXggdGhhdCBhbmQgYmFpbCBvdXQuCisJCSAqLworCQltZGwtPnJlYWRwb3MgPSBtZGwtPmJ5dGVzdXNlZDsKKwkJcmV0dXJuIDA7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKG1kbC0+Y3Vycl9idWYsICZtZGwtPmJ1Zl9saXN0LCBsaXN0KSB7CisKKwkJLyogU2tpcCBhbnkgZW1wdHkgYnVmZmVycyBpbiB0aGUgTURMICovCisJCWlmIChtZGwtPmN1cnJfYnVmLT5yZWFkcG9zID49IG1kbC0+Y3Vycl9idWYtPmJ5dGVzdXNlZCkKKwkJCWNvbnRpbnVlOworCisJCW1kbC0+cmVhZHBvcyArPSBfY3gxOF9wcm9jZXNzX2lkeF9kYXRhKG1kbC0+Y3Vycl9idWYsIGlkeCk7CisKKwkJLyogZXhpdCB3aGVuIE1ETCBkcmFpbmVkIG9yIHJlcXVlc3Qgc2F0aXNmaWVkICovCisJCWlmIChpZHgtPmVudHJpZXMgPj0gVjRMMl9FTkNfSURYX0VOVFJJRVMgfHwKKwkJICAgIG1kbC0+Y3Vycl9idWYtPnJlYWRwb3MgPCBtZGwtPmN1cnJfYnVmLT5ieXRlc3VzZWQgfHwKKwkJICAgIG1kbC0+cmVhZHBvcyA+PSBtZGwtPmJ5dGVzdXNlZCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBjeDE4X2dfZW5jX2luZGV4KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQlzdHJ1Y3QgdjRsMl9lbmNfaWR4ICppZHgpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmgpLT5jeDsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYXTsKKwlzMzIgdG1wOworCXN0cnVjdCBjeDE4X21kbCAqbWRsOworCisJaWYgKCFjeDE4X3N0cmVhbV9lbmFibGVkKHMpKSAvKiBNb2R1bGUgb3B0aW9ucyBpbmhpYml0ZWQgSURYIHN0cmVhbSAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIENvbXB1dGUgdGhlIGJlc3QgY2FzZSBudW1iZXIgb2YgZW50cmllcyB3ZSBjYW4gYnVmZmVyICovCisJdG1wID0gcy0+YnVmZmVycyAtCisJCQkgIHMtPmJ1ZnNfcGVyX21kbCAqIENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF9GV19NRExfTUlOOworCWlmICh0bXAgPD0gMCkKKwkJdG1wID0gMTsKKwl0bXAgPSB0bXAgKiBzLT5idWZfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgY3gxOF9lbmNfaWR4X2VudHJ5KTsKKworCS8qIEZpbGwgb3V0IHRoZSBoZWFkZXIgb2YgdGhlIHJldHVybiBzdHJ1Y3R1cmUgKi8KKwlpZHgtPmVudHJpZXMgPSAwOworCWlkeC0+ZW50cmllc19jYXAgPSB0bXA7CisJbWVtc2V0KGlkeC0+cmVzZXJ2ZWQsIDAsIHNpemVvZihpZHgtPnJlc2VydmVkKSk7CisKKwkvKiBQdWxsIElEWCBNRExzIGFuZCBidWZmZXJzIGZyb20gcV9mdWxsIGFuZCBwb3B1bGF0ZSB0aGUgZW50cmllcyAqLworCWRvIHsKKwkJbWRsID0gY3gxOF9kZXF1ZXVlKHMsICZzLT5xX2Z1bGwpOworCQlpZiAobWRsID09IE5VTEwpIC8qIE5vIG1vcmUgSURYIGRhdGEgcmlnaHQgbm93ICovCisJCQlicmVhazsKKworCQkvKiBFeHRyYWN0IHRoZSBJbmRleCBlbnRyeSBkYXRhIGZyb20gdGhlIE1ETCBhbmQgYnVmZmVycyAqLworCQljeDE4X3Byb2Nlc3NfaWR4X2RhdGEocywgbWRsLCBpZHgpOworCQlpZiAobWRsLT5yZWFkcG9zIDwgbWRsLT5ieXRlc3VzZWQpIHsKKwkJCS8qIFdlIGZpbmlzaGVkIHdpdGggZGF0YSByZW1haW5pbmcsIHB1c2ggdGhlIE1ETCBiYWNrICovCisJCQljeDE4X3B1c2gocywgbWRsLCAmcy0+cV9mdWxsKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogV2UgZHJhaW5lZCB0aGlzIE1ETCwgc2NoZWR1bGUgaXQgdG8gZ28gdG8gdGhlIGZpcm13YXJlICovCisJCWN4MThfZW5xdWV1ZShzLCBtZGwsICZzLT5xX2ZyZWUpOworCisJfSB3aGlsZSAoaWR4LT5lbnRyaWVzIDwgVjRMMl9FTkNfSURYX0VOVFJJRVMpOworCisJLyogVGVsbCB0aGUgd29yayBoYW5kbGVyIHRvIHNlbmQgZnJlZSBJRFggTURMcyB0byB0aGUgZmlybXdhcmUgKi8KKwljeDE4X3N0cmVhbV9sb2FkX2Z3X3F1ZXVlKHMpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGN4MThfZW5jb2Rlcl9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jCmluZGV4IGYyMzFkZDAuLjZkY2NlMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjeDE4LW1haWxib3guaCIKICNpbmNsdWRlICJjeDE4LXF1ZXVlLmgiCiAjaW5jbHVkZSAiY3gxOC1zdHJlYW1zLmgiCisjaW5jbHVkZSAiY3gxOC1hbHNhLXBjbS5oIiAvKiBGSVhNRSBtYWtlIGNvbmZpZ3VyYWJsZSAqLwogCiBzdGF0aWMgY29uc3QgY2hhciAqcnB1X3N0cltdID0geyAiQVBVIiwgIkNQVSIsICJFUFUiLCAiSFBVIiB9OwogCkBAIC0xNTcsNiArMTU4LDM0IEBACiAJfQogfQogCisKK3N0YXRpYyB2b2lkIGN4MThfbWRsX3NlbmRfdG9fYWxzYShzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCBjeDE4X3N0cmVhbSAqcywKKwkJCQkgIHN0cnVjdCBjeDE4X21kbCAqbWRsKQoreworCXN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmOworCisJaWYgKG1kbC0+Ynl0ZXN1c2VkID09IDApCisJCXJldHVybjsKKworCS8qIFdlIGlnbm9yZSBtZGwgYW5kIGJ1ZiByZWFkcG9zIGFjY291bnRpbmcgaGVyZSAtIGl0IGRvZXNuJ3QgbWF0dGVyICovCisKKwkvKiBUaGUgbGlrZWx5IGNhc2UgKi8KKwlpZiAobGlzdF9pc19zaW5ndWxhcigmbWRsLT5idWZfbGlzdCkpIHsKKwkJYnVmID0gbGlzdF9maXJzdF9lbnRyeSgmbWRsLT5idWZfbGlzdCwgc3RydWN0IGN4MThfYnVmZmVyLAorCQkJCSAgICAgICBsaXN0KTsKKwkJaWYgKGJ1Zi0+Ynl0ZXN1c2VkKQorCQkJY3gtPnBjbV9hbm5vdW5jZV9jYWxsYmFjayhjeC0+YWxzYSwgYnVmLT5idWYsCisJCQkJCQkgIGJ1Zi0+Ynl0ZXN1c2VkKTsKKwkJcmV0dXJuOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVmLCAmbWRsLT5idWZfbGlzdCwgbGlzdCkgeworCQlpZiAoYnVmLT5ieXRlc3VzZWQgPT0gMCkKKwkJCWJyZWFrOworCQljeC0+cGNtX2Fubm91bmNlX2NhbGxiYWNrKGN4LT5hbHNhLCBidWYtPmJ1ZiwgYnVmLT5ieXRlc3VzZWQpOworCX0KK30KKwogc3RhdGljIHZvaWQgZXB1X2RtYV9kb25lKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IGN4MThfaW5fd29ya19vcmRlciAqb3JkZXIpCiB7CiAJdTMyIGhhbmRsZSwgbWRsX2Fja19jb3VudCwgaWQ7CkBAIC0yMjMsMTEgKzI1MiwyMSBAQAogCQlDWDE4X0RFQlVHX0hJX0RNQSgiJXMgcmVjdiBieXRlc3VzZWQgPSAlZFxuIiwKIAkJCQkgIHMtPm5hbWUsIG1kbC0+Ynl0ZXN1c2VkKTsKIAotCQlpZiAocy0+dHlwZSAhPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUykKLQkJCWN4MThfZW5xdWV1ZShzLCBtZGwsICZzLT5xX2Z1bGwpOwotCQllbHNlIHsKKwkJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVFMpIHsKIAkJCWN4MThfbWRsX3NlbmRfdG9fZHZiKHMsIG1kbCk7CiAJCQljeDE4X2VucXVldWUocywgbWRsLCAmcy0+cV9mcmVlKTsKKwkJfSBlbHNlIGlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1BDTSkgeworCQkJLyogUGFzcyB0aGUgZGF0YSB0byBjeDE4LWFsc2EgKi8KKwkJCWlmIChjeC0+cGNtX2Fubm91bmNlX2NhbGxiYWNrICE9IE5VTEwpIHsKKwkJCQljeDE4X21kbF9zZW5kX3RvX2Fsc2EoY3gsIHMsIG1kbCk7CisJCQkJY3gxOF9lbnF1ZXVlKHMsIG1kbCwgJnMtPnFfZnJlZSk7CisJCQl9IGVsc2UgeworCQkJCWN4MThfZW5xdWV1ZShzLCBtZGwsICZzLT5xX2Z1bGwpOworCQkJfQorCQl9IGVsc2UgeworCQkJY3gxOF9lbnF1ZXVlKHMsIG1kbCwgJnMtPnFfZnVsbCk7CisJCQlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFgpCisJCQkJY3gxOF9zdHJlYW1fcm90YXRlX2lkeF9tZGxzKGN4KTsKIAkJfQogCX0KIAkvKiBQdXQgYXMgbWFueSBNRExzIGFzIHBvc3NpYmxlIGJhY2sgaW50byBmdyB1c2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5jCmluZGV4IDYzMzA0ODIuLmFlZmM4YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYwpAQCAtNDE5LDYgKzQxOSw5IEBACiB7CiAJc3RydWN0IGN4MThfbWRsICptZGw7CiAJc3RydWN0IGN4MThfYnVmZmVyICpidWY7CisJc3RydWN0IGN4MTggKmN4ID0gcy0+Y3g7CisKKwlDWDE4X0RFQlVHX0lORk8oIkRlYWxsb2NhdGluZyBidWZmZXJzIGZvciAlcyBzdHJlYW1cbiIsIHMtPm5hbWUpOwogCiAJLyogbW92ZSBhbGwgYnVmZmVycyB0byBidWZfcG9vbCBhbmQgYWxsIE1ETHMgdG8gcV9pZGxlICovCiAJY3gxOF91bmxvYWRfcXVldWVzKHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCmluZGV4IDk4N2E5MzAuLjA1NDQ1MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKQEAgLTMxOSwxMSArMzE5LDI3IEBACiAKIAkvKiBUZWFyZG93biBhbGwgc3RyZWFtcyAqLwogCWZvciAodHlwZSA9IDA7IHR5cGUgPCBDWDE4X01BWF9TVFJFQU1TOyB0eXBlKyspIHsKLQkJaWYgKGN4LT5zdHJlYW1zW3R5cGVdLmR2Yi5lbmFibGVkKSB7Ci0JCQljeDE4X2R2Yl91bnJlZ2lzdGVyKCZjeC0+c3RyZWFtc1t0eXBlXSk7Ci0JCQljeC0+c3RyZWFtc1t0eXBlXS5kdmIuZW5hYmxlZCA9IGZhbHNlOworCisJCS8qIE5vIHN0cnVjdCB2aWRlb19kZXZpY2UsIGJ1dCBjYW4gaGF2ZSBidWZmZXJzIGFsbG9jYXRlZCAqLworCQlpZiAodHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUykgeworCQkJaWYgKGN4LT5zdHJlYW1zW3R5cGVdLmR2Yi5lbmFibGVkKSB7CisJCQkJY3gxOF9kdmJfdW5yZWdpc3RlcigmY3gtPnN0cmVhbXNbdHlwZV0pOworCQkJCWN4LT5zdHJlYW1zW3R5cGVdLmR2Yi5lbmFibGVkID0gZmFsc2U7CisJCQkJY3gxOF9zdHJlYW1fZnJlZSgmY3gtPnN0cmVhbXNbdHlwZV0pOworCQkJfQorCQkJY29udGludWU7CiAJCX0KIAorCQkvKiBObyBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBidXQgY2FuIGhhdmUgYnVmZmVycyBhbGxvY2F0ZWQgKi8KKwkJaWYgKHR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYKSB7CisJCQlpZiAoY3gtPnN0cmVhbV9idWZmZXJzW3R5cGVdICE9IDApIHsKKwkJCQljeC0+c3RyZWFtX2J1ZmZlcnNbdHlwZV0gPSAwOworCQkJCWN4MThfc3RyZWFtX2ZyZWUoJmN4LT5zdHJlYW1zW3R5cGVdKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSWYgc3RydWN0IHZpZGVvX2RldmljZSBleGlzdHMsIGNhbiBoYXZlIGJ1ZmZlcnMgYWxsb2NhdGVkICovCiAJCXZkZXYgPSBjeC0+c3RyZWFtc1t0eXBlXS52aWRlb19kZXY7CiAKIAkJY3gtPnN0cmVhbXNbdHlwZV0udmlkZW9fZGV2ID0gTlVMTDsKQEAgLTQ0Nyw2ICs0NjMsMzIgQEAKIAljeDE4X2FwaShjeCwgQ1gxOF9DUFVfU0VUX1JBV19WQklfUEFSQU0sIDYsIGRhdGEpOwogfQogCit2b2lkIGN4MThfc3RyZWFtX3JvdGF0ZV9pZHhfbWRscyhzdHJ1Y3QgY3gxOCAqY3gpCit7CisJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF07CisJc3RydWN0IGN4MThfbWRsICptZGw7CisKKwlpZiAoIWN4MThfc3RyZWFtX2VuYWJsZWQocykpCisJCXJldHVybjsKKworCS8qIFJldHVybiBpZiB0aGUgZmlybXdhcmUgaXMgbm90IHJ1bm5pbmcgbG93IG9uIE1ETHMgKi8KKwlpZiAoKGF0b21pY19yZWFkKCZzLT5xX2ZyZWUuZGVwdGgpICsgYXRvbWljX3JlYWQoJnMtPnFfYnVzeS5kZXB0aCkpID49CisJCQkJCSAgICBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhfRldfTURMX01JTikKKwkJcmV0dXJuOworCisJLyogUmV0dXJuIGlmIHRoZXJlIGFyZSBubyBNRExzIHRvIHJvdGF0ZSBiYWNrIHRvIHRoZSBmaXJtd2FyZSAqLworCWlmIChhdG9taWNfcmVhZCgmcy0+cV9mdWxsLmRlcHRoKSA8IDIpCisJCXJldHVybjsKKworCS8qCisJICogVGFrZSB0aGUgb2xkZXN0IElEWCBNREwgc3RpbGwgaG9sZGluZyBkYXRhLCBhbmQgZGlzY2FyZCBpdHMgaW5kZXgKKwkgKiBlbnRyaWVzIGJ5IHNjaGVkdWxpbmcgdGhlIE1ETCB0byBnbyBiYWNrIHRvIHRoZSBmaXJtd2FyZQorCSAqLworCW1kbCA9IGN4MThfZGVxdWV1ZShzLCAmcy0+cV9mdWxsKTsKKwlpZiAobWRsICE9IE5VTEwpCisJCWN4MThfZW5xdWV1ZShzLCBtZGwsICZzLT5xX2ZyZWUpOworfQorCiBzdGF0aWMKIHN0cnVjdCBjeDE4X3F1ZXVlICpfY3gxOF9zdHJlYW1fcHV0X21kbF9mdyhzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsCiAJCQkJCSAgIHN0cnVjdCBjeDE4X21kbCAqbWRsKQpAQCAtNTQ2LDggKzU4OCw5IEBACiAJc3RydWN0IGN4MTggKmN4ID0gcy0+Y3g7CiAJaW50IGNhcHR5cGUgPSAwOwogCXN0cnVjdCBjeDE4X2FwaV9mdW5jX3ByaXZhdGUgcHJpdjsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfaWR4OwogCi0JaWYgKHMtPnZpZGVvX2RldiA9PSBOVUxMICYmIHMtPmR2Yi5lbmFibGVkID09IDApCisJaWYgKCFjeDE4X3N0cmVhbV9lbmFibGVkKHMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCUNYMThfREVCVUdfSU5GTygiU3RhcnQgZW5jb2RlciBzdHJlYW0gJXNcbiIsIHMtPm5hbWUpOwpAQCAtNTYxLDYgKzYwNCw5IEBACiAJCWN4LT5zZWFyY2hfcGFja19oZWFkZXIgPSAwOwogCQlicmVhazsKIAorCWNhc2UgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYOgorCQljYXB0eXBlID0gQ0FQVFVSRV9DSEFOTkVMX1RZUEVfSU5ERVg7CisJCWJyZWFrOwogCWNhc2UgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVFM6CiAJCWNhcHR5cGUgPSBDQVBUVVJFX0NIQU5ORUxfVFlQRV9UUzsKIAkJYnJlYWs7CkBAIC02MzUsMTEgKzY4MSwxMyBAQAogCQkJY3gxOF92Ymlfc2V0dXAocyk7CiAKIAkJLyoKLQkJICogYXNzaWduIHByb2dyYW0gaW5kZXggaW5mby4KLQkJICogTWFzayA3OiBzZWxlY3QgSS9QL0IsIE51bV9yZXE6IDQwMCBtYXgKLQkJICogRklYTUUgLSBjdXJyZW50bHkgd2UgaGF2ZSB0aGlzIGhhcmRjb2RlZCBhcyBkaXNhYmxlZAorCQkgKiBTZWxlY3QgdG8gcmVjZWl2ZSBJLCBQLCBhbmQgQiBmcmFtZSBpbmRleCBlbnRyaWVzLCBpZiB0aGUKKwkJICogaW5kZXggc3RyZWFtIGlzIGVuYWJsZWQuICBPdGhlcndpc2UgZGlzYWJsZSBpbmRleCBlbnRyeQorCQkgKiBnZW5lcmF0aW9uLgogCQkgKi8KLQkJY3gxOF92YXBpX3Jlc3VsdChjeCwgZGF0YSwgQ1gxOF9DUFVfU0VUX0lOREVYVEFCTEUsIDEsIDApOworCQlzX2lkeCA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdOworCQljeDE4X3ZhcGlfcmVzdWx0KGN4LCBkYXRhLCBDWDE4X0NQVV9TRVRfSU5ERVhUQUJMRSwgMiwKKwkJCQkgcy0+aGFuZGxlLCBjeDE4X3N0cmVhbV9lbmFibGVkKHNfaWR4KSA/IDcgOiAwKTsKIAogCQkvKiBDYWxsIG91dCB0byB0aGUgY29tbW9uIENYMjM0MXggQVBJIHNldHVwIGZvciB1c2VyIGNvbnRyb2xzICovCiAJCXByaXYuY3ggPSBjeDsKQEAgLTY5Nyw2ICs3NDUsNyBAQAogCWF0b21pY19pbmMoJmN4LT50b3RfY2FwdHVyaW5nKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woY3gxOF9zdGFydF92NGwyX2VuY29kZV9zdHJlYW0pOwogCiB2b2lkIGN4MThfc3RvcF9hbGxfY2FwdHVyZXMoc3RydWN0IGN4MTggKmN4KQogewpAQCAtNzA1LDcgKzc1NCw3IEBACiAJZm9yIChpID0gQ1gxOF9NQVhfU1RSRUFNUyAtIDE7IGkgPj0gMDsgaS0tKSB7CiAJCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1tpXTsKIAotCQlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwgJiYgcy0+ZHZiLmVuYWJsZWQgPT0gMCkKKwkJaWYgKCFjeDE4X3N0cmVhbV9lbmFibGVkKHMpKQogCQkJY29udGludWU7CiAJCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKSkKIAkJCWN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0ocywgMCk7CkBAIC03MTcsNyArNzY2LDcgQEAKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBzLT5jeDsKIAl1bnNpZ25lZCBsb25nIHRoZW47CiAKLQlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwgJiYgcy0+ZHZiLmVuYWJsZWQgPT0gMCkKKwlpZiAoIWN4MThfc3RyZWFtX2VuYWJsZWQocykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgeW91IGFyZSBhbGxvd2VkIHRvIHN0b3AgdGhlIGNhcHR1cmUKQEAgLTc2Miw2ICs4MTEsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0pOwogCiB1MzIgY3gxOF9maW5kX2hhbmRsZShzdHJ1Y3QgY3gxOCAqY3gpCiB7CkBAIC03ODksNyArODM5LDcgQEAKIAkJcyA9ICZjeC0+c3RyZWFtc1tpXTsKIAkJaWYgKHMtPmhhbmRsZSAhPSBoYW5kbGUpCiAJCQljb250aW51ZTsKLQkJaWYgKHMtPnZpZGVvX2RldiB8fCBzLT5kdmIuZW5hYmxlZCkKKwkJaWYgKGN4MThfc3RyZWFtX2VuYWJsZWQocykpCiAJCQlyZXR1cm4gczsKIAl9CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmgKaW5kZXggNGEwMWRiNS4uMGJmZjBmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuaApAQCAtMjgsNiArMjgsMTYgQEAKIGludCBjeDE4X3N0cmVhbXNfcmVnaXN0ZXIoc3RydWN0IGN4MTggKmN4KTsKIHZvaWQgY3gxOF9zdHJlYW1zX2NsZWFudXAoc3RydWN0IGN4MTggKmN4LCBpbnQgdW5yZWdpc3Rlcik7CiAKKyNkZWZpbmUgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYX0ZXX01ETF9NSU4gKDMpCit2b2lkIGN4MThfc3RyZWFtX3JvdGF0ZV9pZHhfbWRscyhzdHJ1Y3QgY3gxOCAqY3gpOworCitzdGF0aWMgaW5saW5lIGJvb2wgY3gxOF9zdHJlYW1fZW5hYmxlZChzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMpCit7CisJcmV0dXJuIHMtPnZpZGVvX2RldiB8fCBzLT5kdmIuZW5hYmxlZCB8fAorCSAgICAgICAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFggJiYKKwkJcy0+Y3gtPnN0cmVhbV9idWZmZXJzW0NYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF0gIT0gMCk7Cit9CisKIC8qIFJlbGF0ZWQgdG8gc3VibWlzc2lvbiBvZiBtZGxzIHRvIGZpcm13YXJlICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY3gxOF9zdHJlYW1fbG9hZF9md19xdWV1ZShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmgKaW5kZXggOWMwYjViYi4uM2UxYWVjNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmgKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2RlZmluZSBDWDE4X0RSSVZFUl9OQU1FICJjeDE4IgogI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX01BSk9SIDEKLSNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9NSU5PUiAzCisjZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fTUlOT1IgNAogI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwgMAogCiAjZGVmaW5lIENYMThfVkVSU0lPTiBfX3N0cmluZ2lmeShDWDE4X0RSSVZFUl9WRVJTSU9OX01BSk9SKSAiLiIgX19zdHJpbmdpZnkoQ1gxOF9EUklWRVJfVkVSU0lPTl9NSU5PUikgIi4iIF9fc3RyaW5naWZ5KENYMThfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oCmluZGV4IDg2ODgwNmUuLjJjMDA5ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaApAQCAtMTkxLDcgKzE5MSw4IEBACiAjZGVmaW5lIENYMThfQ1BVX1NFVF9NRURJQU5fQ09SSU5HICAgICAgICAgICAJKENQVV9DTURfTUFTS19DQVBUVVJFIHwgMHgwMDBFKQogCiAvKiBEZXNjcmlwdGlvbjogVGhpcyBjb21tYW5kIHNldCB0aGUgcGljdHVyZSB0eXBlIG1hc2sgZm9yIGluZGV4IGZpbGUKLSAgIElOWzBdIC0gCTAgPSBkaXNhYmxlIGluZGV4IGZpbGUgb3V0cHV0CisgICBJTlswXSAtIFRhc2sgaGFuZGxlIChpZ25vcmVkIGJ5IGZpcm13YXJlKQorICAgSU5bMV0gLSAJMCA9IGRpc2FibGUgaW5kZXggZmlsZSBvdXRwdXQKIAkJCTEgPSBvdXRwdXQgSSBwaWN0dXJlCiAJCQkyID0gUCBwaWN0dXJlCiAJCQk0ID0gQiBwaWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWR2Yi5jCmluZGV4IGM1MDgyYTQuLjY0ZTAyNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWR2Yi5jCkBAIC00NjQsOSArNDY0LDkgQEAKIAkJLyogZGVmaW5lIGdlbmVyYWwtcHVycG9zZSBjYWxsYmFjayBwb2ludGVyICovCiAJCWR2Yi0+ZnJvbnRlbmQtPmNhbGxiYWNrID0gY3gyMzF4eF90dW5lcl9jYWxsYmFjazsKIAotCQlpZiAoZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkZXYtPmR2Yi0+ZnJvbnRlbmQsCisJCWlmICghZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkZXYtPmR2Yi0+ZnJvbnRlbmQsCiAJCQkgICAgICAgJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKLQkJCSAgICAgICAmY254dF9yZGUyNTBfdHVuZXJjb25maWcpIDwgMCkgeworCQkJICAgICAgICZjbnh0X3JkZTI1MF90dW5lcmNvbmZpZykpIHsKIAkJCXJlc3VsdCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CkBAIC00ODYsOSArNDg2LDkgQEAKIAkJLyogZGVmaW5lIGdlbmVyYWwtcHVycG9zZSBjYWxsYmFjayBwb2ludGVyICovCiAJCWR2Yi0+ZnJvbnRlbmQtPmNhbGxiYWNrID0gY3gyMzF4eF90dW5lcl9jYWxsYmFjazsKIAotCQlpZiAoZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkZXYtPmR2Yi0+ZnJvbnRlbmQsCisJCWlmICghZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkZXYtPmR2Yi0+ZnJvbnRlbmQsCiAJCQkgICAgICAgJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKLQkJCSAgICAgICAmY254dF9yZGUyNTBfdHVuZXJjb25maWcpIDwgMCkgeworCQkJICAgICAgICZjbnh0X3JkZTI1MF90dW5lcmNvbmZpZykpIHsKIAkJCXJlc3VsdCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtaW5wdXQuYwppbmRleCAxNTgyNmY5Li5jNTc3MWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWlucHV0LmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogCWN4MjMxeHhfaXJfc3RhcnQoaXIpOwogCiAJLyogYWxsIGRvbmUgKi8KLQllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGRldi0+Ym9hcmQuaXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgZGV2LT5ib2FyZC5pcl9jb2RlcywgTlVMTCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X3N0b3A7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKaW5kZXggODhjMGQyNC4uMmFiOTdhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKQEAgLTY4MSw3ICs2ODEsNyBAQAogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX1ZJREVPX0lEOgogCQlyZXR1cm4gICJTRVRfVklERU9fSUQiOwogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX1BDUl9JRDoKLQkJcmV0dXJuICAiU0VUX1BDUl9QSUQiOworCQlyZXR1cm4gICJTRVRfUENSX0lEIjsKIAljYXNlIENYMjM0MVhfRU5DX1NFVF9GUkFNRV9SQVRFOgogCQlyZXR1cm4gICJTRVRfRlJBTUVfUkFURSI7CiAJY2FzZSBDWDIzNDFYX0VOQ19TRVRfRlJBTUVfU0laRToKQEAgLTY5Myw3ICs2OTMsNyBAQAogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX0FTUEVDVF9SQVRJTzoKIAkJcmV0dXJuICAiU0VUX0FTUEVDVF9SQVRJTyI7CiAJY2FzZSBDWDIzNDFYX0VOQ19TRVRfRE5SX0ZJTFRFUl9NT0RFOgotCQlyZXR1cm4gICJTRVRfRE5SX0ZJTFRFUl9QUk9QUyI7CisJCXJldHVybiAgIlNFVF9ETlJfRklMVEVSX01PREUiOwogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX0ROUl9GSUxURVJfUFJPUFM6CiAJCXJldHVybiAgIlNFVF9ETlJfRklMVEVSX1BST1BTIjsKIAljYXNlIENYMjM0MVhfRU5DX1NFVF9DT1JJTkdfTEVWRUxTOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKaW5kZXggMWVjNDgxNi4uZDYzOTE4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCkBAIC0yNzQsNiArMjc0LDMxIEBACiAJCS5wb3J0YgkJPSBDWDIzODg1X01QRUdfRFZCLAogCQkucG9ydGMJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKIAl9LAorCVtDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWFRWMTIwMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJMRUFEVEVLIFdpbkZhc3QgUHhUVjEyMDAiLAorCQkucG9ydGEgICAgICAgICAgPSBDWDIzODg1X0FOQUxPR19WSURFTywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfWEMyMDI4LAorCQkudHVuZXJfYWRkciAgICAgPSAweDYxLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICA9IENYMjU4NDBfVklOMl9DSDEgfAorCQkJCSAgQ1gyNTg0MF9WSU41X0NIMiB8CisJCQkJICBDWDI1ODQwX05PTkUwX0NIMywKKwkJfSwgeworCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICA9IENYMjU4NDBfQ09NUE9TSVRFMSwKKwkJfSwgeworCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gQ1gyNTg0MF9TVklERU9fTFVNQTMgfAorCQkJCSAgQ1gyNTg0MF9TVklERU9fQ0hST01BNCwKKwkJfSwgeworCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9DT01QT05FTlQsCisJCQkudm11eCAgID0gQ1gyNTg0MF9WSU43X0NIMSB8CisJCQkJICBDWDI1ODQwX1ZJTjZfQ0gyIHwKKwkJCQkgIENYMjU4NDBfVklOOF9DSDMgfAorCQkJCSAgQ1gyNTg0MF9DT01QT05FTlRfT04sCisJCX0gfSwKKwl9LAogfTsKIGNvbnN0IHVuc2lnbmVkIGludCBjeDIzODg1X2Jjb3VudCA9IEFSUkFZX1NJWkUoY3gyMzg4NV9ib2FyZHMpOwogCkBAIC00MTcsNiArNDQyLDEwIEBACiAJCS5zdWJ2ZW5kb3IgPSAweDE0ZjEsCiAJCS5zdWJkZXZpY2UgPSAweDg1NzgsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX01ZR0lDQV9YODU1OFBSTywKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDEwN2QsCisJCS5zdWJkZXZpY2UgPSAweDZmMjIsCisJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWFRWMTIwMCwKIAl9LAogfTsKIGNvbnN0IHVuc2lnbmVkIGludCBjeDIzODg1X2lkY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfc3ViaWRzKTsKQEAgLTYxNyw2ICs2NDYsNyBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTY1MEY6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTgwMDoKKwljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYVFYxMjAwOgogCQkvKiBUdW5lciBSZXNldCBDb21tYW5kICovCiAJCWJpdG1hc2sgPSAweDA0OwogCQlicmVhazsKQEAgLTc2OSw2ICs3OTksNyBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTY1MEY6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTgwMDoKKwljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYVFYxMjAwOgogCQkvKiBHUElPLTIgIHhjMzAyOCB0dW5lciByZXNldCAqLwogCiAJCS8qIFRoZSBmb2xsb3dpbmcgR1BJTydzIGFyZSBvbiB0aGUgaW50ZXJuYWwgQVZDb3JlIChjeDI1ODQwKSAqLwpAQCAtMTA3Niw2ICsxMTA3LDcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfTVlHSUNBX1g4NTA2OgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9NQUdJQ1BST19QUk9IRFRWRTI6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjkwOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDA6CiAJCWRldi0+c2RfY3gyNTg0MCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+djRsMl9kZXYsCiAJCQkJJmRldi0+aTJjX2J1c1syXS5pMmNfYWRhcCwKIAkJCQkiY3gyNTg0MCIsICJjeDI1ODQwIiwgMHg4OCA+PiAxLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKaW5kZXggZTQ1ZDJkZi4uOTM5MDc5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKQEAgLTU0Miw2ICs1NDIsOSBAQAogCS5vc2NfY2xrX2ZyZXEgPSAzMDQwMCwgLyogaW4ga0h6ICovCiAJLmlmX2ZyZXEgPSAwLCAvKiB6ZXJvIElGICovCiAJLnppZl9zd2FwX2lxID0gMSwKKwkuYWdjX21pbiA9IDB4MkUsCisJLmFnY19tYXggPSAweEZGLAorCS5hZ2NfaG9sZF9sb29wID0gMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWF4MjE2NV9jb25maWcgbXlnaWNfeDg1NThwcm9fbWF4MjE2NV9jZmcxID0gewpAQCAtNTU4LDYgKzU2MSw5IEBACiAJLm9zY19jbGtfZnJlcSA9IDMwNDAwLCAvKiBpbiBrSHogKi8KIAkuaWZfZnJlcSA9IDAsIC8qIHplcm8gSUYgKi8KIAkuemlmX3N3YXBfaXEgPSAxLAorCS5hZ2NfbWluID0gMHgyRSwKKwkuYWdjX21heCA9IDB4RkYsCisJLmFnY19ob2xkX2xvb3AgPSAwLAogfTsKIAogc3RhdGljIHN0cnVjdCBtYXgyMTY1X2NvbmZpZyBteWdpY194ODU1OHByb19tYXgyMTY1X2NmZzIgPSB7CkBAIC05OTQsMTUgKzEwMDAsOCBAQAogCQluZXR1cF9nZXRfY2FyZF9pbmZvKCZkZXYtPmkyY19idXNbMF0uaTJjX2FkYXAsICZjaW5mbyk7CiAJCW1lbWNweShwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWMsCiAJCQkJY2luZm8ucG9ydFtwb3J0LT5uciAtIDFdLm1hYywgNik7Ci0JCXByaW50ayhLRVJOX0lORk8gIk5ldFVQIER1YWwgRFZCLVMyIENJIGNhcmQgcG9ydCVkIE1BQz0iCi0JCQkiJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCi0JCQlwb3J0LT5uciwKLQkJCXBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hY1swXSwKLQkJCXBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hY1sxXSwKLQkJCXBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hY1syXSwKLQkJCXBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hY1szXSwKLQkJCXBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hY1s0XSwKLQkJCXBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hY1s1XSk7CisJCXByaW50ayhLRVJOX0lORk8gIk5ldFVQIER1YWwgRFZCLVMyIENJIGNhcmQgcG9ydCVkIE1BQz0lcE1cbiIsCisJCQlwb3J0LT5uciwgcG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjKTsKIAogCQluZXR1cF9jaV9pbml0KHBvcnQpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jCmluZGV4IDc2OGVlYzkuLjljNjYyMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaW5wdXQuYwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJZGV2LT5pcl9pbnB1dCA9IGlyOwogCWN4MjM4ODVfaW5wdXRfaXJfc3RhcnQoZGV2KTsKIAotCXJldCA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5kZXYsIGlyX2NvZGVzKTsKKwlyZXQgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+ZGV2LCBpcl9jb2RlcywgTlVMTCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfb3V0X3N0b3A7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCmluZGV4IDg5MzRkNjEuLjJkM2FjOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgImN4MjM4ODUtaW9jdGwuaCIKKyNpbmNsdWRlICJ0dW5lci14YzIwMjguaCIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJ2NGwyIGRyaXZlciBtb2R1bGUgZm9yIGN4MjM4ODUgYmFzZWQgVFYgY2FyZHMiKTsKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4iKTsKQEAgLTE1MDUsNiArMTUwNiwxOCBAQAogCQkJdHVuX3NldHVwLnR1bmVyX2NhbGxiYWNrID0gY3gyMzg4NV90dW5lcl9jYWxsYmFjazsKIAogCQkJdjRsMl9zdWJkZXZfY2FsbChzZCwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmdHVuX3NldHVwKTsKKworCQkJaWYgKGRldi0+Ym9hcmQgPT0gQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDApIHsKKwkJCQlzdHJ1Y3QgeGMyMDI4X2N0cmwgY3RybCA9IHsKKwkJCQkJLmZuYW1lID0gWEMyMDI4X0RFRkFVTFRfRklSTVdBUkUsCisJCQkJCS5tYXhfbGVuID0gNjQKKwkJCQl9OworCQkJCXN0cnVjdCB2NGwyX3ByaXZfdHVuX2NvbmZpZyBjZmcgPSB7CisJCQkJCS50dW5lciA9IGRldi0+dHVuZXJfdHlwZSwKKwkJCQkJLnByaXYgPSAmY3RybAorCQkJCX07CisJCQkJdjRsMl9zdWJkZXZfY2FsbChzZCwgdHVuZXIsIHNfY29uZmlnLCAmY2ZnKTsKKwkJCX0KIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKaW5kZXggMDhiM2Y2Yi4uMGUzYTk4ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaApAQCAtODEsNiArODEsNyBAQAogI2RlZmluZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTgwMCAgICAyNQogI2RlZmluZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjkwICAgICAgICAyNgogI2RlZmluZSBDWDIzODg1X0JPQVJEX01ZR0lDQV9YODU1OFBSTyAgICAgICAgICAyNworI2RlZmluZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWFRWMTIwMCAyOAogCiAjZGVmaW5lIEdQSU9fMCAweDAwMDAwMDAxCiAjZGVmaW5lIEdQSU9fMSAweDAwMDAwMDAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKaW5kZXggMzg1ZWNkNS4uZjI0NjFjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYwpAQCAtNzM0LDEwICs3MzQsOCBAQAogCQl2NGxfZGJnKDEsIGN4MjU4NDBfZGVidWcsIGNsaWVudCwgInZpZF9pbnB1dCAweCV4XG4iLAogCQkJdmlkX2lucHV0KTsKIAkJcmVnID0gdmlkX2lucHV0ICYgMHhmZjsKLQkJaWYgKCh2aWRfaW5wdXQgJiBDWDI1ODQwX1NWSURFT19PTikgPT0gQ1gyNTg0MF9TVklERU9fT04pCi0JCQlpc19jb21wb3NpdGUgPSAwOwotCQllbHNlIGlmICgodmlkX2lucHV0ICYgQ1gyNTg0MF9DT01QT05FTlRfT04pID09IDApCi0JCQlpc19jb21wb3NpdGUgPSAxOworCQlpc19jb21wb3NpdGUgPSAhaXNfY29tcG9uZW50ICYmCisJCQkoKHZpZF9pbnB1dCAmIENYMjU4NDBfU1ZJREVPX09OKSAhPSBDWDI1ODQwX1NWSURFT19PTik7CiAKIAkJdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICJtdXggY2ZnIDB4JXggY29tcD0lZFxuIiwKIAkJCXJlZywgaXNfY29tcG9zaXRlKTsKQEAgLTEzNDcsMzAgKzEzNDUsNTkgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IGN4MjU4NDBfc19hdWRpb19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IHY7CisKKwlpZiAoaXNfY3gyNTgzeChzdGF0ZSkgfHwgaXNfY3gyMzg4eChzdGF0ZSkgfHwgaXNfY3gyMzF4eChzdGF0ZSkpCisJCXJldHVybiAwOworCisJdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICIlcyBhdWRpbyBvdXRwdXRcbiIsCisJCQllbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7CisKKwlpZiAoZW5hYmxlKSB7CisJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNSkgfCAweDgwOworCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTUsIHYpOworCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHgxMTYpIHwgMHgwMzsKKwkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LCB2KTsKKwl9IGVsc2UgeworCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHgxMTUpICYgfigweDgwKTsKKwkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE1LCB2KTsKKwkJdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTE2KSAmIH4oMHgwMyk7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNiwgdik7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGN4MjU4NDBfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKIHsKIAlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IHY7CiAKLQl2NGxfZGJnKDEsIGN4MjU4NDBfZGVidWcsIGNsaWVudCwgIiVzIG91dHB1dFxuIiwKKwl2NGxfZGJnKDEsIGN4MjU4NDBfZGVidWcsIGNsaWVudCwgIiVzIHZpZGVvIG91dHB1dFxuIiwKIAkJCWVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKIAlpZiAoZW5hYmxlKSB7CiAJCWlmIChpc19jeDIzODh4KHN0YXRlKSB8fCBpc19jeDIzMXh4KHN0YXRlKSkgewotCQkJdTggdiA9IChjeDI1ODQwX3JlYWQoY2xpZW50LCAweDQyMSkgfCAweDBiKTsKKwkJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDQyMSkgfCAweDBiOwogCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDIxLCB2KTsKIAkJfSBlbHNlIHsKLQkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNSwKLQkJCQkJaXNfY3gyNTgzeChzdGF0ZSkgPyAweDBjIDogMHg4Yyk7Ci0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTYsCi0JCQkJCWlzX2N4MjU4M3goc3RhdGUpID8gMHgwNCA6IDB4MDcpOworCQkJdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTE1KSB8IDB4MGM7CisJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTUsIHYpOworCQkJdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTE2KSB8IDB4MDQ7CisJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTYsIHYpOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKGlzX2N4MjM4OHgoc3RhdGUpIHx8IGlzX2N4MjMxeHgoc3RhdGUpKSB7Ci0JCQl1OCB2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjEpICYgfigweDBiKTsKKwkJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDQyMSkgJiB+KDB4MGIpOwogCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDIxLCB2KTsKIAkJfSBlbHNlIHsKLQkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNSwgMHgwMCk7Ci0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTYsIDB4MDApOworCQkJdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTE1KSAmIH4oMHgwYyk7CisJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTUsIHYpOworCQkJdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTE2KSAmIH4oMHgwNCk7CisJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTYsIHYpOwogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtMTYwMSw2ICsxNjI4LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfYXVkaW9fb3BzIGN4MjU4NDBfYXVkaW9fb3BzID0gewogCS5zX2Nsb2NrX2ZyZXEgPSBjeDI1ODQwX3NfY2xvY2tfZnJlcSwKIAkuc19yb3V0aW5nID0gY3gyNTg0MF9zX2F1ZGlvX3JvdXRpbmcsCisJLnNfc3RyZWFtID0gY3gyNTg0MF9zX2F1ZGlvX3N0cmVhbSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGN4MjU4NDBfdmlkZW9fb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCmluZGV4IDVhNjc0NDUuLjY0YjM1MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKQEAgLTU4MywxNiArNTgzLDE4IEBACiB7CiAJc25kX2N4ODhfY2FyZF90ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmU9Y2hpcC0+Y29yZTsKLQlpbnQgdiwgYjsKKwlpbnQgbGVmdCwgcmlnaHQsIHYsIGI7CiAJaW50IGNoYW5nZWQgPSAwOwogCXUzMiBvbGQ7CiAKLQliID0gdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gLSB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwlsZWZ0ID0gdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAweDNmOworCXJpZ2h0ID0gdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gJiAweDNmOworCWIgPSByaWdodCAtIGxlZnQ7CiAJaWYgKGIgPCAwKSB7Ci0JICAgIHYgPSAweDNmIC0gdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisJICAgIHYgPSAweDNmIC0gbGVmdDsKIAkgICAgYiA9ICgtYikgfCAweDQwOwogCX0gZWxzZSB7Ci0JICAgIHYgPSAweDNmIC0gdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMV07CisJICAgIHYgPSAweDNmIC0gcmlnaHQ7CiAJfQogCS8qIERvIHdlIHJlYWxseSBrbm93IHRoaXMgd2lsbCBhbHdheXMgYmUgY2FsbGVkIHdpdGggSVJRcyBvbj8gKi8KIAlzcGluX2xvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwppbmRleCBkODQ0ZjJhLi5lYWYwZWU3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCkBAIC0xNDY2LDYgKzE0NjYsMTggQEAKIAkJCS5hdWRpb3JvdXRlID0gOCwKIAkJfSwKIAl9LAorCVtDWDg4X0JPQVJEX1NBTVNVTkdfU01UXzcwMjBdID0geworCQkubmFtZQkJPSAiU2Ftc3VuZyBTTVQgNzAyMCBEVkItUyIsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAorCQkucmFkaW9fdHlwZQk9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLmlucHV0CQk9IHsgeworCQkJLnR5cGUJPSBDWDg4X1ZNVVhfRFZCLAorCQkJLnZtdXgJPSAwLAorCQl9IH0sCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCisJfSwKIAlbQ1g4OF9CT0FSRF9BRFNURUNIX1BUVl8zOTBdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiQURTIFRlY2ggSW5zdGFudCBWaWRlbyBQQ0kiLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCkBAIC0yMzU1LDYgKzIzNjcsMTQgQEAKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4MTQwNCwKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDAsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgxOGFjLAorCQkuc3ViZGV2aWNlID0gMHhkYzAwLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9TQU1TVU5HX1NNVF83MDIwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MThhYywKKwkJLnN1YmRldmljZSA9IDB4ZGNjZCwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfU0FNU1VOR19TTVRfNzAyMCwKIAl9LHsKIAkJLnN1YnZlbmRvciA9IDB4MTQ2MSwKIAkJLnN1YmRldmljZSA9IDB4YzExMSwgLyogQXZlck1lZGlhIE0xNTAtRCAqLwpAQCAtMjYzMyw2ICsyNjUzLDkgQEAKIAljYXNlIDk4NTU5OiAvKiBXaW5UVi1IVlIxMTAwTFAgKFZpZGVvIG5vIElSLCBSZXRhaWwgLSBMb3cgUHJvZmlsZSkgKi8KIAkJLyoga25vd24gKi8KIAkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX1NBTVNVTkdfU01UXzcwMjA6CisJCWN4X3NldChNT19HUDBfSU8sIDB4MDA4OTg5RkYpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQl3YXJuX3ByaW50ayhjb3JlLCAid2FybmluZzogdW5rbm93biBoYXVwcGF1Z2UgbW9kZWwgIyVkXG4iLAogCQkJICAgIHR2Lm1vZGVsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKaW5kZXggYjE0Mjk2OS4uOTRhYjg2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKQEAgLTY3NCw2ICs2NzQsMTk0IEBACiAJcmV0dXJuIDA7CiB9CiAKKworCitzdGF0aWMgdTggc2Ftc3VuZ19zbXRfNzAyMF9pbml0dGFiW10gPSB7CisJICAgICAweDAxLCAweDE1LAorCSAgICAgMHgwMiwgMHgwMCwKKwkgICAgIDB4MDMsIDB4MDAsCisJICAgICAweDA0LCAweDdELAorCSAgICAgMHgwNSwgMHgwRiwKKwkgICAgIDB4MDYsIDB4MDIsCisJICAgICAweDA3LCAweDAwLAorCSAgICAgMHgwOCwgMHg2MCwKKworCSAgICAgMHgwQSwgMHhDMiwKKwkgICAgIDB4MEIsIDB4MDAsCisJICAgICAweDBDLCAweDAxLAorCSAgICAgMHgwRCwgMHg4MSwKKwkgICAgIDB4MEUsIDB4NDQsCisJICAgICAweDBGLCAweDA5LAorCSAgICAgMHgxMCwgMHgzQywKKwkgICAgIDB4MTEsIDB4ODQsCisJICAgICAweDEyLCAweERBLAorCSAgICAgMHgxMywgMHg5OSwKKwkgICAgIDB4MTQsIDB4OEQsCisJICAgICAweDE1LCAweENFLAorCSAgICAgMHgxNiwgMHhFOCwKKwkgICAgIDB4MTcsIDB4NDMsCisJICAgICAweDE4LCAweDFDLAorCSAgICAgMHgxOSwgMHgxQiwKKwkgICAgIDB4MUEsIDB4MUQsCisKKwkgICAgIDB4MUMsIDB4MTIsCisJICAgICAweDFELCAweDAwLAorCSAgICAgMHgxRSwgMHgwMCwKKwkgICAgIDB4MUYsIDB4MDAsCisJICAgICAweDIwLCAweDAwLAorCSAgICAgMHgyMSwgMHgwMCwKKwkgICAgIDB4MjIsIDB4MDAsCisJICAgICAweDIzLCAweDAwLAorCisJICAgICAweDI4LCAweDAyLAorCSAgICAgMHgyOSwgMHgyOCwKKwkgICAgIDB4MkEsIDB4MTQsCisJICAgICAweDJCLCAweDBGLAorCSAgICAgMHgyQywgMHgwOSwKKwkgICAgIDB4MkQsIDB4MDUsCisKKwkgICAgIDB4MzEsIDB4MUYsCisJICAgICAweDMyLCAweDE5LAorCSAgICAgMHgzMywgMHhGQywKKwkgICAgIDB4MzQsIDB4MTMsCisJICAgICAweGZmLCAweGZmLAorfTsKKworCitzdGF0aWMgaW50IHNhbXN1bmdfc210XzcwMjBfdHVuZXJfc2V0X3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKKwl1OCBidWZbNF07CisJdTMyIGRpdjsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gMHg2MSwKKwkJLmZsYWdzID0gMCwKKwkJLmJ1ZiA9IGJ1ZiwKKwkJLmxlbiA9IHNpemVvZihidWYpIH07CisKKwlkaXYgPSBwYXJhbXMtPmZyZXF1ZW5jeSAvIDEyNTsKKworCWJ1ZlswXSA9IChkaXYgPj4gOCkgJiAweDdmOworCWJ1ZlsxXSA9IGRpdiAmIDB4ZmY7CisJYnVmWzJdID0gMHg4NDsgIC8qIDB4QzQgKi8KKwlidWZbM10gPSAweDAwOworCisJaWYgKHBhcmFtcy0+ZnJlcXVlbmN5IDwgMTUwMDAwMCkKKwkJYnVmWzNdIHw9IDB4MTA7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCisJaWYgKGkyY190cmFuc2ZlcigmZGV2LT5jb3JlLT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYW1zdW5nX3NtdF83MDIwX3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWZlX3NlY190b25lX21vZGVfdCB0b25lKQoreworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CisKKwljeF9zZXQoTU9fR1AwX0lPLCAweDA4MDApOworCisJc3dpdGNoICh0b25lKSB7CisJY2FzZSBTRUNfVE9ORV9PTjoKKwkJY3hfc2V0KE1PX0dQMF9JTywgMHgwOCk7CisJCWJyZWFrOworCWNhc2UgU0VDX1RPTkVfT0ZGOgorCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYW1zdW5nX3NtdF83MDIwX3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3sKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKKwlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOworCisJdTggZGF0YTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gOCwKKwkJLmZsYWdzID0gMCwKKwkJLmJ1ZiA9ICZkYXRhLAorCQkubGVuID0gc2l6ZW9mKGRhdGEpIH07CisKKwljeF9zZXQoTU9fR1AwX0lPLCAweDgwMDApOworCisJc3dpdGNoICh2b2x0YWdlKSB7CisJY2FzZSBTRUNfVk9MVEFHRV9PRkY6CisJCWJyZWFrOworCWNhc2UgU0VDX1ZPTFRBR0VfMTM6CisJCWRhdGEgPSBJU0w2NDIxX0VOMSB8IElTTDY0MjFfTExDMTsKKwkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDgwKTsKKwkJYnJlYWs7CisJY2FzZSBTRUNfVk9MVEFHRV8xODoKKwkJZGF0YSA9IElTTDY0MjFfRU4xIHwgSVNMNjQyMV9MTEMxIHwgSVNMNjQyMV9WU0VMMTsKKwkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDgwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfTsKKworCXJldHVybiAoaTJjX3RyYW5zZmVyKCZkZXYtPmNvcmUtPmkyY19hZGFwLCAmbXNnLCAxKSA9PSAxKSA/IDAgOiAtRUlPOworfQorCitzdGF0aWMgaW50IHNhbXN1bmdfc210XzcwMjBfc3R2MDI5OV9zZXRfc3ltYm9sX3JhdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJdTMyIHNyYXRlLCB1MzIgcmF0aW8pCit7CisJdTggYWNsayA9IDA7CisJdTggYmNsayA9IDA7CisKKwlpZiAoc3JhdGUgPCAxNTAwMDAwKSB7CisJCWFjbGsgPSAweGI3OworCQliY2xrID0gMHg0NzsKKwl9IGVsc2UgaWYgKHNyYXRlIDwgMzAwMDAwMCkgeworCQlhY2xrID0gMHhiNzsKKwkJYmNsayA9IDB4NGI7CisJfSBlbHNlIGlmIChzcmF0ZSA8IDcwMDAwMDApIHsKKwkJYWNsayA9IDB4Yjc7CisJCWJjbGsgPSAweDRmOworCX0gZWxzZSBpZiAoc3JhdGUgPCAxNDAwMDAwMCkgeworCQlhY2xrID0gMHhiNzsKKwkJYmNsayA9IDB4NTM7CisJfSBlbHNlIGlmIChzcmF0ZSA8IDMwMDAwMDAwKSB7CisJCWFjbGsgPSAweGI2OworCQliY2xrID0gMHg1MzsKKwl9IGVsc2UgaWYgKHNyYXRlIDwgNDUwMDAwMDApIHsKKwkJYWNsayA9IDB4YjQ7CisJCWJjbGsgPSAweDUxOworCX0KKworCXN0djAyOTlfd3JpdGVyZWcoZmUsIDB4MTMsIGFjbGspOworCXN0djAyOTlfd3JpdGVyZWcoZmUsIDB4MTQsIGJjbGspOworCXN0djAyOTlfd3JpdGVyZWcoZmUsIDB4MWYsIChyYXRpbyA+PiAxNikgJiAweGZmKTsKKwlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDIwLCAocmF0aW8gPj4gIDgpICYgMHhmZik7CisJc3R2MDI5OV93cml0ZXJlZyhmZSwgMHgyMSwgcmF0aW8gJiAweGYwKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgc2Ftc3VuZ19zdHYwMjk5X2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCisJLmluaXR0YWIgPSBzYW1zdW5nX3NtdF83MDIwX2luaXR0YWIsCisJLm1jbGsgPSA4ODAwMDAwMFVMLAorCS5pbnZlcnQgPSAwLAorCS5za2lwX3JlaW5pdCA9IDAsCisJLmxvY2tfb3V0cHV0ID0gU1RWMDI5OV9MT0NLT1VUUFVUX0xLLAorCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKKwkubWluX2RlbGF5X21zID0gMTAwLAorCS5zZXRfc3ltYm9sX3JhdGUgPSBzYW1zdW5nX3NtdF83MDIwX3N0djAyOTlfc2V0X3N5bWJvbF9yYXRlLAorfTsKKwogc3RhdGljIGludCBkdmJfcmVnaXN0ZXIoc3RydWN0IGN4ODgwMl9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOwpAQCAtMTIwMyw2ICsxMzkxLDMyIEBACiAJCX0KIAkJYnJlYWs7CiAJCX0KKwljYXNlIENYODhfQk9BUkRfU0FNU1VOR19TTVRfNzAyMDoKKwkJZGV2LT50c19nZW5fY250cmwgPSAweDA4OworCisJCWN4X3NldChNT19HUDBfSU8sIDB4MDEwMSk7CisKKwkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDAxKTsKKwkJbWRlbGF5KDEwMCk7CisJCWN4X3NldChNT19HUDBfSU8sIDB4MDEpOworCQltZGVsYXkoMjAwKTsKKworCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goc3R2MDI5OV9hdHRhY2gsCisJCQkJCSZzYW1zdW5nX3N0djAyOTlfY29uZmlnLAorCQkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9CisJCQkJc2Ftc3VuZ19zbXRfNzAyMF90dW5lcl9zZXRfcGFyYW1zOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPnR1bmVyX3ByaXYgPQorCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9CisJCQkJc2Ftc3VuZ19zbXRfNzAyMF9zZXRfdm9sdGFnZTsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3RvbmUgPQorCQkJCXNhbXN1bmdfc210XzcwMjBfc2V0X3RvbmU7CisJCX0KKworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iLAogCQkgICAgICAgY29yZS0+bmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwppbmRleCBmOWZkYTE4Li5kZTE4MGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCXN0cnVjdCBjeDg4X0lSICppcjsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICppcl9jb2RlcyA9IE5VTEw7Ci0JaW50IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOworCXU2NCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAogCWlyID0ga3phbGxvYyhzaXplb2YoKmlyKSwgR0ZQX0tFUk5FTCk7CkBAIC0zODMsNyArMzgzLDcgQEAKIAljeDg4X2lyX3N0YXJ0KGNvcmUsIGlyKTsKIAogCS8qIGFsbCBkb25lICovCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmlucHV0LCBpcl9jb2Rlcyk7CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmlucHV0LCBpcl9jb2RlcywgTlVMTCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X3N0b3A7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwppbmRleCBiYjUxMDQ4Li4zMzhhZjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCkBAIC0xMTAsNiArMTEwLDkgQEAKIAkJY2FzZSBDWDg4X0JPQVJEX1BDSERUVl9IRDU1MDA6CiAJCQljeF93cml0ZShUU19TT1BfU1RBVCwgMTw8MTMpOwogCQkJYnJlYWs7CisJCWNhc2UgQ1g4OF9CT0FSRF9TQU1TVU5HX1NNVF83MDIwOgorCQkJY3hfd3JpdGUoVFNfU09QX1NUQVQsIDB4MDApOworCQkJYnJlYWs7CiAJCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfTk9WQVNQTFVTX1MxOgogCQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTRTJfUzE6CiAJCQljeF93cml0ZShNT19QSU5NVVhfSU8sIDB4ODgpOyAvKiBFbmFibGUgTVBFRyBwYXJhbGxlbCBJTyBhbmQgdmlkZW8gc2lnbmFsIHBpbnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCmluZGV4IGIxNDk5YmYuLjQ4YjZjMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaApAQCAtMjM5LDYgKzIzOSw3IEBACiAjZGVmaW5lIENYODhfQk9BUkRfV0lORkFTVF9EVFYxODAwSCAgICAgICAgODEKICNkZWZpbmUgQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjIwMDBIX0ogICAgICA4MgogI2RlZmluZSBDWDg4X0JPQVJEX1BST0ZfNzMwMSAgICAgICAgICAgICAgIDgzCisjZGVmaW5lIENYODhfQk9BUkRfU0FNU1VOR19TTVRfNzAyMCAgICAgICAgODQKIAogZW51bSBjeDg4X2l0eXBlIHsKIAlDWDg4X1ZNVVhfQ09NUE9TSVRFMSA9IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwppbmRleCBlZTQzODc2Li45YjQxM2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKQEAgLTkxMyw2ICs5MTMsOCBAQAogTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOwogTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0ZJUk1XQVJFKCJkYWJ1c2IvZmlybXdhcmUuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiZGFidXNiL2JpdHN0cmVhbS5iaW4iKTsKIAogbW9kdWxlX3BhcmFtKGJ1ZmZlcnMsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDIChidWZmZXJzLCAiTnVtYmVyIG9mIGJ1ZmZlcnMgKGRlZmF1bHQ9MjU2KSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL01ha2VmaWxlCmluZGV4IDFhOGI4ZjMuLmEzNzk1NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvTWFrZWZpbGUKQEAgLTE1LDMgKzE1LDQgQEAKIG9iai0kKENPTkZJR19WSURFT19WUEZFX0NBUFRVUkUpICs9IHZwZmVfY2FwdHVyZS5vCiBvYmotJChDT05GSUdfVklERU9fRE02NDQ2X0NDREMpICs9IGRtNjQ0eF9jY2RjLm8KIG9iai0kKENPTkZJR19WSURFT19ETTM1NV9DQ0RDKSArPSBkbTM1NV9jY2RjLm8KK29iai0kKENPTkZJR19WSURFT19JU0lGKSArPSBpc2lmLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTM1NV9jY2RjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG0zNTVfY2NkYy5jCmluZGV4IDMxNDM5MDAuLmMyOWFjODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTM1NV9jY2RjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtMzU1X2NjZGMuYwpAQCAtMzcsOCArMzcsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKICNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL2RtMzU1X2NjZGMuaD4KICNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3Zwc3MuaD4KKwogI2luY2x1ZGUgImRtMzU1X2NjZGNfcmVncy5oIgogI2luY2x1ZGUgImNjZGNfaHdfZGV2aWNlLmgiCiAKQEAgLTQ2LDY3ICs1MCw3NSBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJDQ0RDIERyaXZlciBmb3IgRE0zNTUiKTsKIE1PRFVMRV9BVVRIT1IoIlRleGFzIEluc3RydW1lbnRzIik7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0KLS8qIE9iamVjdCBmb3IgQ0NEQyByYXcgbW9kZSAqLwotc3RhdGljIHN0cnVjdCBjY2RjX3BhcmFtc19yYXcgY2NkY19od19wYXJhbXNfcmF3ID0gewotCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXLAotCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUsCi0JLndpbiA9IENDRENfV0lOX1ZHQSwKLQkuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLmdhaW4gPSB7Ci0JCS5yX3llID0gMjU2LAotCQkuZ2JfZyA9IDI1NiwKLQkJLmdyX2N5ID0gMjU2LAotCQkuYl9tZyA9IDI1Ngorc3RhdGljIHN0cnVjdCBjY2RjX29wZXJfY29uZmlnIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJLyogQ0NEQyBpbnRlcmZhY2UgdHlwZSAqLworCWVudW0gdnBmZV9od19pZl90eXBlIGlmX3R5cGU7CisJLyogUmF3IEJheWVyIGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3IGJheWVyOworCS8qIFlDYkNyIGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgeWNiY3I7CisJLyogTWFzdGVyIGNsb2NrICovCisJc3RydWN0IGNsayAqbWNsazsKKwkvKiBzbGF2ZSBjbG9jayAqLworCXN0cnVjdCBjbGsgKnNjbGs7CisJLyogY2NkYyBiYXNlIGFkZHJlc3MgKi8KKwl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKK30gY2NkY19jZmcgPSB7CisJLyogUmF3IGNvbmZpZ3VyYXRpb25zICovCisJLmJheWVyID0geworCQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVywKKwkJLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSwKKwkJLndpbiA9IENDRENfV0lOX1ZHQSwKKwkJLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5nYWluID0geworCQkJLnJfeWUgPSAyNTYsCisJCQkuZ2JfZyA9IDI1NiwKKwkJCS5ncl9jeSA9IDI1NiwKKwkJCS5iX21nID0gMjU2CisJCX0sCisJCS5jb25maWdfcGFyYW1zID0geworCQkJLmRhdGFzZnQgPSAyLAorCQkJLm1maWx0MSA9IENDRENfTk9fTUVESUFOX0ZJTFRFUjEsCisJCQkubWZpbHQyID0gQ0NEQ19OT19NRURJQU5fRklMVEVSMiwKKwkJCS5hbGF3ID0geworCQkJCS5nYW1hX3dkID0gMiwKKwkJCX0sCisJCQkuYmxrX2NsYW1wID0geworCQkJCS5zYW1wbGVfcGl4ZWwgPSAxLAorCQkJCS5kY19zdWIgPSAyNQorCQkJfSwKKwkJCS5jb2xfcGF0X2ZpZWxkMCA9IHsKKwkJCQkub2xvcCA9IENDRENfR1JFRU5fQkxVRSwKKwkJCQkub2xlcCA9IENDRENfQkxVRSwKKwkJCQkuZWxvcCA9IENDRENfUkVELAorCQkJCS5lbGVwID0gQ0NEQ19HUkVFTl9SRUQKKwkJCX0sCisJCQkuY29sX3BhdF9maWVsZDEgPSB7CisJCQkJLm9sb3AgPSBDQ0RDX0dSRUVOX0JMVUUsCisJCQkJLm9sZXAgPSBDQ0RDX0JMVUUsCisJCQkJLmVsb3AgPSBDQ0RDX1JFRCwKKwkJCQkuZWxlcCA9IENDRENfR1JFRU5fUkVECisJCQl9LAorCQl9LAogCX0sCi0JLmNvbmZpZ19wYXJhbXMgPSB7Ci0JCS5kYXRhc2Z0ID0gMiwKLQkJLmRhdGFfc3ogPSBDQ0RDX0RBVEFfMTBCSVRTLAotCQkubWZpbHQxID0gQ0NEQ19OT19NRURJQU5fRklMVEVSMSwKLQkJLm1maWx0MiA9IENDRENfTk9fTUVESUFOX0ZJTFRFUjIsCi0JCS5hbGF3ID0gewotCQkJLmdhbWFfd2QgPSAyLAotCQl9LAotCQkuYmxrX2NsYW1wID0gewotCQkJLnNhbXBsZV9waXhlbCA9IDEsCi0JCQkuZGNfc3ViID0gMjUKLQkJfSwKLQkJLmNvbF9wYXRfZmllbGQwID0gewotCQkJLm9sb3AgPSBDQ0RDX0dSRUVOX0JMVUUsCi0JCQkub2xlcCA9IENDRENfQkxVRSwKLQkJCS5lbG9wID0gQ0NEQ19SRUQsCi0JCQkuZWxlcCA9IENDRENfR1JFRU5fUkVECi0JCX0sCi0JCS5jb2xfcGF0X2ZpZWxkMSA9IHsKLQkJCS5vbG9wID0gQ0NEQ19HUkVFTl9CTFVFLAotCQkJLm9sZXAgPSBDQ0RDX0JMVUUsCi0JCQkuZWxvcCA9IENDRENfUkVELAotCQkJLmVsZXAgPSBDQ0RDX0dSRUVOX1JFRAotCQl9LAorCS8qIFlDYkNyIGNvbmZpZ3VyYXRpb24gKi8KKwkueWNiY3IgPSB7CisJCS53aW4gPSBDQ0RDX1dJTl9QQUwsCisJCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVCwKKwkJLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VELAorCQkuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmJ0NjU2X2VuYWJsZSA9IDEsCisJCS5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWSwKKwkJLmJ1Zl90eXBlID0gQ0NEQ19CVUZUWVBFX0ZMRF9JTlRFUkxFQVZFRAogCX0sCiB9OwogCiAKLS8qIE9iamVjdCBmb3IgQ0NEQyB5Y2JjciBtb2RlICovCi1zdGF0aWMgc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyIGNjZGNfaHdfcGFyYW1zX3ljYmNyID0gewotCS53aW4gPSBDQ0RDX1dJTl9QQUwsCi0JLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9ZQ0JDUl84QklULAotCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCwKLQkuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLmJ0NjU2X2VuYWJsZSA9IDEsCi0JLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZLAotCS5idWZfdHlwZSA9IENDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQKLX07Ci0KLXN0YXRpYyBlbnVtIHZwZmVfaHdfaWZfdHlwZSBjY2RjX2lmX3R5cGU7Ci1zdGF0aWMgdm9pZCAqX19pb21lbSBjY2RjX2Jhc2VfYWRkcjsKLXN0YXRpYyBpbnQgY2NkY19hZGRyX3NpemU7Ci0KIC8qIFJhdyBCYXllciBmb3JtYXRzICovCiBzdGF0aWMgdTMyIGNjZGNfcmF3X2JheWVyX3BpeF9mb3JtYXRzW10gPQogCQl7VjRMMl9QSVhfRk1UX1NCR0dSOCwgVjRMMl9QSVhfRk1UX1NCR0dSMTZ9OwpAQCAtMTE4LDE4ICsxMzAsMTIgQEAKIC8qIHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcyAqLwogc3RhdGljIGlubGluZSB1MzIgcmVncih1MzIgb2Zmc2V0KQogewotCXJldHVybiBfX3Jhd19yZWFkbChjY2RjX2Jhc2VfYWRkciArIG9mZnNldCk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKGNjZGNfY2ZnLmJhc2VfYWRkciArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWd3KHUzMiB2YWwsIHUzMiBvZmZzZXQpCiB7Ci0JX19yYXdfd3JpdGVsKHZhbCwgY2NkY19iYXNlX2FkZHIgKyBvZmZzZXQpOwotfQotCi1zdGF0aWMgdm9pZCBjY2RjX3NldF9jY2RjX2Jhc2Uodm9pZCAqYWRkciwgaW50IHNpemUpCi17Ci0JY2NkY19iYXNlX2FkZHIgPSBhZGRyOwotCWNjZGNfYWRkcl9zaXplID0gc2l6ZTsKKwlfX3Jhd193cml0ZWwodmFsLCBjY2RjX2NmZy5iYXNlX2FkZHIgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgdm9pZCBjY2RjX2VuYWJsZShpbnQgZW4pCkBAIC0xNTMsMTIgKzE1OSwxMiBAQAogc3RhdGljIHZvaWQgY2NkY19jb25maWdfZ2Fpbl9vZmZzZXQodm9pZCkKIHsKIAkvKiBjb25maWd1cmUgZ2FpbiAqLwotCXJlZ3coY2NkY19od19wYXJhbXNfcmF3LmdhaW4ucl95ZSwgUllFR0FJTik7Ci0JcmVndyhjY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5ncl9jeSwgR1JDWUdBSU4pOwotCXJlZ3coY2NkY19od19wYXJhbXNfcmF3LmdhaW4uZ2JfZywgR0JHR0FJTik7Ci0JcmVndyhjY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5iX21nLCBCTUdHQUlOKTsKKwlyZWd3KGNjZGNfY2ZnLmJheWVyLmdhaW4ucl95ZSwgUllFR0FJTik7CisJcmVndyhjY2RjX2NmZy5iYXllci5nYWluLmdyX2N5LCBHUkNZR0FJTik7CisJcmVndyhjY2RjX2NmZy5iYXllci5nYWluLmdiX2csIEdCR0dBSU4pOworCXJlZ3coY2NkY19jZmcuYmF5ZXIuZ2Fpbi5iX21nLCBCTUdHQUlOKTsKIAkvKiBjb25maWd1cmUgb2Zmc2V0ICovCi0JcmVndyhjY2RjX2h3X3BhcmFtc19yYXcuY2NkY19vZmZzZXQsIE9GRlNFVCk7CisJcmVndyhjY2RjX2NmZy5iYXllci5jY2RjX29mZnNldCwgT0ZGU0VUKTsKIH0KIAogLyoKQEAgLTE2OSw3ICsxNzUsNyBAQAogewogCWludCBpOwogCi0JZGV2X2RiZyhkZXYsICJcbnN0YXJ0aW5nIGNjZGNfcmVzdG9yZV9kZWZhdWx0cy4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5zdGFydGluZyBjY2RjX3Jlc3RvcmVfZGVmYXVsdHMuLi4iKTsKIAkvKiBzZXQgYWxsIHJlZ2lzdGVycyB0byB6ZXJvICovCiAJZm9yIChpID0gMDsgaSA8PSBDQ0RDX1JFR19MQVNUOyBpICs9IDQpCiAJCXJlZ3coMCwgaSk7CkBAIC0xODAsMzAgKzE4NiwyOSBAQAogCXJlZ3coQ1VMSF9ERUZBVUxULCBDVUxIKTsKIAlyZWd3KENVTFZfREVGQVVMVCwgQ1VMVik7CiAJLyogU2V0IGRlZmF1bHQgR2FpbiBhbmQgT2Zmc2V0ICovCi0JY2NkY19od19wYXJhbXNfcmF3LmdhaW4ucl95ZSA9IEdBSU5fREVGQVVMVDsKLQljY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5nYl9nID0gR0FJTl9ERUZBVUxUOwotCWNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLmdyX2N5ID0gR0FJTl9ERUZBVUxUOwotCWNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLmJfbWcgPSBHQUlOX0RFRkFVTFQ7CisJY2NkY19jZmcuYmF5ZXIuZ2Fpbi5yX3llID0gR0FJTl9ERUZBVUxUOworCWNjZGNfY2ZnLmJheWVyLmdhaW4uZ2JfZyA9IEdBSU5fREVGQVVMVDsKKwljY2RjX2NmZy5iYXllci5nYWluLmdyX2N5ID0gR0FJTl9ERUZBVUxUOworCWNjZGNfY2ZnLmJheWVyLmdhaW4uYl9tZyA9IEdBSU5fREVGQVVMVDsKIAljY2RjX2NvbmZpZ19nYWluX29mZnNldCgpOwogCXJlZ3coT1VUQ0xJUF9ERUZBVUxULCBPVVRDTElQKTsKIAlyZWd3KExTQ0NGRzJfREVGQVVMVCwgTFNDQ0ZHMik7CiAJLyogc2VsZWN0IGNjZGMgaW5wdXQgKi8KIAlpZiAodnBzc19zZWxlY3RfY2NkY19zb3VyY2UoVlBTU19DQ0RDSU4pKSB7Ci0JCWRldl9kYmcoZGV2LCAiXG5jb3VsZG4ndCBzZWxlY3QgY2NkYyBpbnB1dCBzb3VyY2UiKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbmNvdWxkbid0IHNlbGVjdCBjY2RjIGlucHV0IHNvdXJjZSIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAJLyogc2VsZWN0IGNjZGMgY2xvY2sgKi8KIAlpZiAodnBzc19lbmFibGVfY2xvY2soVlBTU19DQ0RDX0NMT0NLLCAxKSA8IDApIHsKLQkJZGV2X2RiZyhkZXYsICJcbmNvdWxkbid0IGVuYWJsZSBjY2RjIGNsb2NrIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5jb3VsZG4ndCBlbmFibGUgY2NkYyBjbG9jayIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9Ci0JZGV2X2RiZyhkZXYsICJcbkVuZCBvZiBjY2RjX3Jlc3RvcmVfZGVmYXVsdHMuLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuRW5kIG9mIGNjZGNfcmVzdG9yZV9kZWZhdWx0cy4uLiIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNjZGNfb3BlbihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7Ci0JZGV2ID0gZGV2aWNlOwogCXJldHVybiBjY2RjX3Jlc3RvcmVfZGVmYXVsdHMoKTsKIH0KIApAQCAtMjI2LDcgKzIzMSw3IEBACiAJaW50IHZlcnRfc3RhcnQsIHZlcnRfbnJfbGluZXM7CiAJaW50IG1pZF9pbWcgPSAwOwogCi0JZGV2X2RiZyhkZXYsICJcblN0YXJ0aW5nIGNjZGNfc2V0d2luLi4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcblN0YXJ0aW5nIGNjZGNfc2V0d2luLi4uIik7CiAKIAkvKgogCSAqIHBwYyAtIHBlciBwaXhlbCBjb3VudC4gaW5kaWNhdGVzIGhvdyBtYW55IHBpeGVscyBwZXIgY2VsbApAQCAtMjYwLDQ1ICsyNjUsNDYgQEAKIAlyZWd3KHZlcnRfc3RhcnQgJiBDQ0RDX1NUQVJUX1ZFUl9PTkVfTUFTSywgU0xWMCk7CiAJcmVndyh2ZXJ0X3N0YXJ0ICYgQ0NEQ19TVEFSVF9WRVJfVFdPX01BU0ssIFNMVjEpOwogCXJlZ3codmVydF9ucl9saW5lcyAmIENDRENfTlVNX0xJTkVTX1ZFUiwgTkxWKTsKLQlkZXZfZGJnKGRldiwgIlxuRW5kIG9mIGNjZGNfc2V0d2luLi4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbkVuZCBvZiBjY2RjX3NldHdpbi4uLiIpOwogfQogCiBzdGF0aWMgaW50IHZhbGlkYXRlX2NjZGNfcGFyYW0oc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNjZGNwYXJhbSkKIHsKIAlpZiAoY2NkY3BhcmFtLT5kYXRhc2Z0IDwgQ0NEQ19EQVRBX05PX1NISUZUIHx8CiAJICAgIGNjZGNwYXJhbS0+ZGF0YXNmdCA+IENDRENfREFUQV9TSElGVF82QklUKSB7Ci0JCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBkYXRhIHNoaWZ0XG4iKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJJbnZhbGlkIHZhbHVlIG9mIGRhdGEgc2hpZnRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoY2NkY3BhcmFtLT5tZmlsdDEgPCBDQ0RDX05PX01FRElBTl9GSUxURVIxIHx8CiAJICAgIGNjZGNwYXJhbS0+bWZpbHQxID4gQ0NEQ19NRURJQU5fRklMVEVSMSkgewotCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2YgbWVkaWFuIGZpbHRlcjFcbiIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIkludmFsaWQgdmFsdWUgb2YgbWVkaWFuIGZpbHRlcjFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoY2NkY3BhcmFtLT5tZmlsdDIgPCBDQ0RDX05PX01FRElBTl9GSUxURVIyIHx8CiAJICAgIGNjZGNwYXJhbS0+bWZpbHQyID4gQ0NEQ19NRURJQU5fRklMVEVSMikgewotCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2YgbWVkaWFuIGZpbHRlcjJcbiIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIkludmFsaWQgdmFsdWUgb2YgbWVkaWFuIGZpbHRlcjJcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoKGNjZGNwYXJhbS0+bWVkX2ZpbHRfdGhyZXMgPCAwKSB8fAogCSAgIChjY2RjcGFyYW0tPm1lZF9maWx0X3RocmVzID4gQ0NEQ19NRURfRklMVF9USFJFU0gpKSB7Ci0JCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBtZWRpYW4gZmlsdGVyIHRocmVzaG9sZFxuIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LAorCQkJIkludmFsaWQgdmFsdWUgb2YgbWVkaWFuIGZpbHRlciB0aHJlc29sZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChjY2RjcGFyYW0tPmRhdGFfc3ogPCBDQ0RDX0RBVEFfMTZCSVRTIHx8CiAJICAgIGNjZGNwYXJhbS0+ZGF0YV9zeiA+IENDRENfREFUQV84QklUUykgewotCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2YgZGF0YSBzaXplXG4iKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJJbnZhbGlkIHZhbHVlIG9mIGRhdGEgc2l6ZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChjY2RjcGFyYW0tPmFsYXcuZW5hYmxlKSB7CiAJCWlmIChjY2RjcGFyYW0tPmFsYXcuZ2FtYV93ZCA8IENDRENfR0FNTUFfQklUU18xM180IHx8CiAJCSAgICBjY2RjcGFyYW0tPmFsYXcuZ2FtYV93ZCA+IENDRENfR0FNTUFfQklUU18wOV8wKSB7Ci0JCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2YgQUxBV1xuIik7CisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIkludmFsaWQgdmFsdWUgb2YgQUxBV1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTMwNiwxMiArMzEyLDE0IEBACiAJaWYgKGNjZGNwYXJhbS0+YmxrX2NsYW1wLmJfY2xhbXBfZW5hYmxlKSB7CiAJCWlmIChjY2RjcGFyYW0tPmJsa19jbGFtcC5zYW1wbGVfcGl4ZWwgPCBDQ0RDX1NBTVBMRV8xUElYRUxTIHx8CiAJCSAgICBjY2RjcGFyYW0tPmJsa19jbGFtcC5zYW1wbGVfcGl4ZWwgPiBDQ0RDX1NBTVBMRV8xNlBJWEVMUykgewotCQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIHNhbXBsZSBwaXhlbFxuIik7CisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwKKwkJCQkiSW52YWxpZCB2YWx1ZSBvZiBzYW1wbGUgcGl4ZWxcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKGNjZGNwYXJhbS0+YmxrX2NsYW1wLnNhbXBsZV9sbiA8IENDRENfU0FNUExFXzFMSU5FUyB8fAogCQkgICAgY2NkY3BhcmFtLT5ibGtfY2xhbXAuc2FtcGxlX2xuID4gQ0NEQ19TQU1QTEVfMTZMSU5FUykgewotCQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIHNhbXBsZSBsaW5lc1xuIik7CisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwKKwkJCQkiSW52YWxpZCB2YWx1ZSBvZiBzYW1wbGUgbGluZXNcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC0zMjUsMTggKzMzMywxOCBAQAogCWludCB4OwogCiAJLyogb25seSByYXcgbW9kdWxlIHBhcmFtZXRlcnMgY2FuIGJlIHNldCB0aHJvdWdoIHRoZSBJT0NUTCAqLwotCWlmIChjY2RjX2lmX3R5cGUgIT0gVlBGRV9SQVdfQkFZRVIpCisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgIT0gVlBGRV9SQVdfQkFZRVIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJeCA9IGNvcHlfZnJvbV91c2VyKCZjY2RjX3Jhd19wYXJhbXMsIHBhcmFtcywgc2l6ZW9mKGNjZGNfcmF3X3BhcmFtcykpOwogCWlmICh4KSB7Ci0JCWRldl9kYmcoZGV2LCAiY2NkY19zZXRfcGFyYW1zOiBlcnJvciBpbiBjb3B5aW5nIGNjZGMiCisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiY2NkY19zZXRfcGFyYW1zOiBlcnJvciBpbiBjb3B5aW5nIGNjZGMiCiAJCQkicGFyYW1zLCAlZFxuIiwgeCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAogCWlmICghdmFsaWRhdGVfY2NkY19wYXJhbSgmY2NkY19yYXdfcGFyYW1zKSkgewotCQltZW1jcHkoJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zLAorCQltZW1jcHkoJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMsCiAJCQkmY2NkY19yYXdfcGFyYW1zLAogCQkJc2l6ZW9mKGNjZGNfcmF3X3BhcmFtcykpOwogCQlyZXR1cm4gMDsKQEAgLTM0NywxMSArMzU1LDExIEBACiAvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY29uZmlndXJlIENDREMgZm9yIFlDYkNyIHZpZGVvIGNhcHR1cmUgKi8KIHN0YXRpYyB2b2lkIGNjZGNfY29uZmlnX3ljYmNyKHZvaWQpCiB7Ci0Jc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyICpwYXJhbXMgPSAmY2NkY19od19wYXJhbXNfeWNiY3I7CisJc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyICpwYXJhbXMgPSAmY2NkY19jZmcueWNiY3I7CiAJdTMyIHRlbXA7CiAKIAkvKiBmaXJzdCBzZXQgdGhlIENDREMgcG93ZXIgb24gZGVmYXVsdHMgdmFsdWVzIGluIGFsbCByZWdpc3RlcnMgKi8KLQlkZXZfZGJnKGRldiwgIlxuU3RhcnRpbmcgY2NkY19jb25maWdfeWNiY3IuLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuU3RhcnRpbmcgY2NkY19jb25maWdfeWNiY3IuLi4iKTsKIAljY2RjX3Jlc3RvcmVfZGVmYXVsdHMoKTsKIAogCS8qIGNvbmZpZ3VyZSBwaXhlbCBmb3JtYXQgJiB2aWRlbyBmcmFtZSBmb3JtYXQgKi8KQEAgLTQwMyw3ICs0MTEsNyBAQAogCQlyZWd3KENDRENfU0RPRlNUX0ZJRUxEX0lOVEVSTEVBVkVELCBTRE9GU1QpOwogCX0KIAotCWRldl9kYmcoZGV2LCAiXG5FbmQgb2YgY2NkY19jb25maWdfeWNiY3IuLi5cbiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5FbmQgb2YgY2NkY19jb25maWdfeWNiY3IuLi5cbiIpOwogfQogCiAvKgpAQCAtNDgzLDcgKzQ5MSw3IEBACiAJICovCiAKIAlpZiAoY291bnQpIHsKLQkJZGV2X2VycihkZXYsICJkZWZlY3QgdGFibGUgd3JpdGUgdGltZW91dCAhISFcbiIpOworCQlkZXZfZXJyKGNjZGNfY2ZnLmRldiwgImRlZmVjdCB0YWJsZSB3cml0ZSB0aW1lb3V0ICEhIVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC02MDUsMTIgKzYxMywxMiBAQAogLyogVGhpcyBmdW5jdGlvbiB3aWxsIGNvbmZpZ3VyZSBDQ0RDIGZvciBSYXcgbW9kZSBpbWFnZSBjYXB0dXJlICovCiBzdGF0aWMgaW50IGNjZGNfY29uZmlnX3Jhdyh2b2lkKQogewotCXN0cnVjdCBjY2RjX3BhcmFtc19yYXcgKnBhcmFtcyA9ICZjY2RjX2h3X3BhcmFtc19yYXc7CisJc3RydWN0IGNjZGNfcGFyYW1zX3JhdyAqcGFyYW1zID0gJmNjZGNfY2ZnLmJheWVyOwogCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zOworCQkJCQkmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtczsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCi0JZGV2X2RiZyhkZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3Jhdy4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKIAogCS8qIHJlc3RvcmUgcG93ZXIgb24gZGVmYXVsdHMgdG8gcmVnaXN0ZXIgKi8KIAljY2RjX3Jlc3RvcmVfZGVmYXVsdHMoKTsKQEAgLTY1OSw3ICs2NjcsNyBAQAogCXZhbCB8PSAoY29uZmlnX3BhcmFtcy0+ZGF0YXNmdCAmIENDRENfREFUQVNGVF9NQVNLKSA8PAogCQlDQ0RDX0RBVEFTRlRfU0hJRlQ7CiAJcmVndyh2YWwgLCBNT0RFU0VUKTsKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIE1PREVTRVQuLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBNT0RFU0VULi4uXG4iLCB2YWwpOwogCiAJLyogQ29uZmlndXJlIHRoZSBNZWRpYW4gRmlsdGVyIHRocmVzaG9sZCAqLwogCXJlZ3coKGNvbmZpZ19wYXJhbXMtPm1lZF9maWx0X3RocmVzKSAmIENDRENfTUVEX0ZJTFRfVEhSRVNILCBNRURGSUxUKTsKQEAgLTY4MSw3ICs2ODksNyBAQAogCQkoY29uZmlnX3BhcmFtcy0+bWZpbHQyIDw8IENDRENfTUZJTFQyX1NISUZUKSk7CiAKIAlyZWd3KHZhbCwgR0FNTUFXRCk7Ci0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBHQU1NQVdELi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gR0FNTUFXRC4uLlxuIiwgdmFsKTsKIAogCS8qIGNvbmZpZ3VyZSB2aWRlbyB3aW5kb3cgKi8KIAljY2RjX3NldHdpbigmcGFyYW1zLT53aW4sIHBhcmFtcy0+ZnJtX2ZtdCwgMSk7CkBAIC03MDYsNyArNzE0LDcgQEAKIAkvKiBDb25maWd1cmUgdGhlIEdhaW4gICYgb2Zmc2V0IGNvbnRyb2wgKi8KIAljY2RjX2NvbmZpZ19nYWluX29mZnNldCgpOwogCi0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgJXggdG8gQ09MUFROLi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nICV4IHRvIENPTFBUTi4uLlxuIiwgdmFsKTsKIAogCS8qIENvbmZpZ3VyZSBEQVRBT0ZTVCAgcmVnaXN0ZXIgKi8KIAl2YWwgPSAoY29uZmlnX3BhcmFtcy0+ZGF0YV9vZmZzZXQuaG9yel9vZmZzZXQgJiBDQ0RDX0RBVEFPRlNUX01BU0spIDw8CkBAIC03MjYsNyArNzM0LDcgQEAKIAkJCUNDRENfSFNJWkVfVkFMX01BU0s7CiAKIAkJLyogYWRqdXN0IHRvIG11bHRpcGxlIG9mIDMyICovCi0JCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gSFNJWkUuLi5cbiIsCisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gSFNJWkUuLi5cbiIsCiAJCSAgICAgICAoKChwYXJhbXMtPndpbi53aWR0aCkgKyAzMSkgPj4gNSkgJgogCQkJQ0NEQ19IU0laRV9WQUxfTUFTSyk7CiAJfSBlbHNlIHsKQEAgLTczNCw3ICs3NDIsNyBAQAogCQl2YWwgfD0gKCgocGFyYW1zLT53aW4ud2lkdGggKiAyKSArIDMxKSA+PiA1KSAmCiAJCQlDQ0RDX0hTSVpFX1ZBTF9NQVNLOwogCi0JCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gSFNJWkUuLi5cbiIsCisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gSFNJWkUuLi5cbiIsCiAJCSAgICAgICAoKChwYXJhbXMtPndpbi53aWR0aCAqIDIpICsgMzEpID4+IDUpICYKIAkJCUNDRENfSFNJWkVfVkFMX01BU0spOwogCX0KQEAgLTc0NSwzNCArNzUzLDM0IEBACiAJCWlmIChwYXJhbXMtPmltYWdlX2ludmVydF9lbmFibGUpIHsKIAkJCS8qIEZvciBpbnRlcmxhY2UgaW52ZXJzZSBtb2RlICovCiAJCQlyZWd3KENDRENfU0RPRlNUX0lOVEVSTEFDRV9JTlZFUlNFLCBTRE9GU1QpOwotCQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgJXggdG8gU0RPRlNULi4uXG4iLAorCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgJXggdG8gU0RPRlNULi4uXG4iLAogCQkJCUNDRENfU0RPRlNUX0lOVEVSTEFDRV9JTlZFUlNFKTsKIAkJfSBlbHNlIHsKIAkJCS8qIEZvciBpbnRlcmxhY2Ugbm9uIGludmVyc2UgbW9kZSAqLwogCQkJcmVndyhDQ0RDX1NET0ZTVF9JTlRFUkxBQ0VfTk9STUFMLCBTRE9GU1QpOwotCQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgJXggdG8gU0RPRlNULi4uXG4iLAorCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgJXggdG8gU0RPRlNULi4uXG4iLAogCQkJCUNDRENfU0RPRlNUX0lOVEVSTEFDRV9OT1JNQUwpOwogCQl9CiAJfSBlbHNlIGlmIChwYXJhbXMtPmZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUpIHsKIAkJaWYgKHBhcmFtcy0+aW1hZ2VfaW52ZXJ0X2VuYWJsZSkgewogCQkJLyogRm9yIHByb2dlc3NpdmUgaW52ZXJzZSBtb2RlICovCiAJCQlyZWd3KENDRENfU0RPRlNUX1BST0dSRVNTSVZFX0lOVkVSU0UsIFNET0ZTVCk7Ci0JCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCiAJCQkJQ0NEQ19TRE9GU1RfUFJPR1JFU1NJVkVfSU5WRVJTRSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBGb3IgcHJvZ2Vzc2l2ZSBub24gaW52ZXJzZSBtb2RlICovCiAJCQlyZWd3KENDRENfU0RPRlNUX1BST0dSRVNTSVZFX05PUk1BTCwgU0RPRlNUKTsKLQkJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKIAkJCQlDQ0RDX1NET0ZTVF9QUk9HUkVTU0lWRV9OT1JNQUwpOwogCQl9CiAJfQotCWRldl9kYmcoZGV2LCAiXG5lbmQgb2YgY2NkY19jb25maWdfcmF3Li4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbmVuZCBvZiBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjY2RjX2NvbmZpZ3VyZSh2b2lkKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCiAJCXJldHVybiBjY2RjX2NvbmZpZ19yYXcoKTsKIAllbHNlCiAJCWNjZGNfY29uZmlnX3ljYmNyKCk7CkBAIC03ODEsMjMgKzc4OSwyMyBAQAogCiBzdGF0aWMgaW50IGNjZGNfc2V0X2J1ZnR5cGUoZW51bSBjY2RjX2J1ZnR5cGUgYnVmX3R5cGUpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJY2NkY19od19wYXJhbXNfcmF3LmJ1Zl90eXBlID0gYnVmX3R5cGU7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWNjZGNfY2ZnLmJheWVyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CiAJZWxzZQotCQljY2RjX2h3X3BhcmFtc195Y2Jjci5idWZfdHlwZSA9IGJ1Zl90eXBlOworCQljY2RjX2NmZy55Y2Jjci5idWZfdHlwZSA9IGJ1Zl90eXBlOwogCXJldHVybiAwOwogfQogc3RhdGljIGVudW0gY2NkY19idWZ0eXBlIGNjZGNfZ2V0X2J1ZnR5cGUodm9pZCkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQlyZXR1cm4gY2NkY19od19wYXJhbXNfcmF3LmJ1Zl90eXBlOwotCXJldHVybiBjY2RjX2h3X3BhcmFtc195Y2Jjci5idWZfdHlwZTsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJcmV0dXJuIGNjZGNfY2ZnLmJheWVyLmJ1Zl90eXBlOworCXJldHVybiBjY2RjX2NmZy55Y2Jjci5idWZfdHlwZTsKIH0KIAogc3RhdGljIGludCBjY2RjX2VudW1fcGl4KHUzMiAqcGl4LCBpbnQgaSkKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKIAkJaWYgKGkgPCBBUlJBWV9TSVpFKGNjZGNfcmF3X2JheWVyX3BpeF9mb3JtYXRzKSkgewogCQkJKnBpeCA9IGNjZGNfcmF3X2JheWVyX3BpeF9mb3JtYXRzW2ldOwogCQkJcmV0ID0gMDsKQEAgLTgxMywyMCArODIxLDE5IEBACiAKIHN0YXRpYyBpbnQgY2NkY19zZXRfcGl4ZWxfZm9ybWF0KHUzMiBwaXhmbXQpCiB7Ci0Jc3RydWN0IGNjZGNfYV9sYXcgKmFsYXcgPQotCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXMuYWxhdzsKKwlzdHJ1Y3QgY2NkY19hX2xhdyAqYWxhdyA9ICZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zLmFsYXc7CiAKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7Ci0JCWNjZGNfaHdfcGFyYW1zX3Jhdy5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJCWNjZGNfY2ZnLmJheWVyLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVc7CiAJCWlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkKIAkJCWFsYXctPmVuYWJsZSA9IDE7CiAJCWVsc2UgaWYgKHBpeGZtdCAhPSBWNEwyX1BJWF9GTVRfU0JHR1IxNikKIAkJCXJldHVybiAtRUlOVkFMOwogCX0gZWxzZSB7CiAJCWlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCi0JCQljY2RjX2h3X3BhcmFtc195Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX1lDQllDUjsKKwkJCWNjZGNfY2ZnLnljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfWUNCWUNSOwogCQllbHNlIGlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1VZVlkpCi0JCQljY2RjX2h3X3BhcmFtc195Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWTsKKwkJCWNjZGNfY2ZnLnljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZOwogCQllbHNlCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC04MzQsMTcgKzg0MSwxNiBAQAogfQogc3RhdGljIHUzMiBjY2RjX2dldF9waXhlbF9mb3JtYXQodm9pZCkKIHsKLQlzdHJ1Y3QgY2NkY19hX2xhdyAqYWxhdyA9Ci0JCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtcy5hbGF3OworCXN0cnVjdCBjY2RjX2FfbGF3ICphbGF3ID0gJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuYWxhdzsKIAl1MzIgcGl4Zm10OwogCi0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKIAkJaWYgKGFsYXctPmVuYWJsZSkKIAkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjg7CiAJCWVsc2UKIAkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjE2OwogCWVsc2UgewotCQlpZiAoY2NkY19od19wYXJhbXNfeWNiY3IucGl4X29yZGVyID09IENDRENfUElYT1JERVJfWUNCWUNSKQorCQlpZiAoY2NkY19jZmcueWNiY3IucGl4X29yZGVyID09IENDRENfUElYT1JERVJfWUNCWUNSKQogCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1lVWVY7CiAJCWVsc2UKIAkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9VWVZZOwpAQCAtODUzLDUzICs4NTksNTMgQEAKIH0KIHN0YXRpYyBpbnQgY2NkY19zZXRfaW1hZ2Vfd2luZG93KHN0cnVjdCB2NGwyX3JlY3QgKndpbikKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQljY2RjX2h3X3BhcmFtc19yYXcud2luID0gKndpbjsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19jZmcuYmF5ZXIud2luID0gKndpbjsKIAllbHNlCi0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLndpbiA9ICp3aW47CisJCWNjZGNfY2ZnLnljYmNyLndpbiA9ICp3aW47CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNjZGNfZ2V0X2ltYWdlX3dpbmRvdyhzdHJ1Y3QgdjRsMl9yZWN0ICp3aW4pCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJKndpbiA9IGNjZGNfaHdfcGFyYW1zX3Jhdy53aW47CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCSp3aW4gPSBjY2RjX2NmZy5iYXllci53aW47CiAJZWxzZQotCQkqd2luID0gY2NkY19od19wYXJhbXNfeWNiY3Iud2luOworCQkqd2luID0gY2NkY19jZmcueWNiY3Iud2luOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNjZGNfZ2V0X2xpbmVfbGVuZ3RoKHZvaWQpCiB7CiAJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNvbmZpZ19wYXJhbXMgPQotCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXM7CisJCQkJJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXM7CiAJdW5zaWduZWQgaW50IGxlbjsKIAotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgewogCQlpZiAoKGNvbmZpZ19wYXJhbXMtPmFsYXcuZW5hYmxlKSB8fAogCQkgICAgKGNvbmZpZ19wYXJhbXMtPmRhdGFfc3ogPT0gQ0NEQ19EQVRBXzhCSVRTKSkKLQkJCWxlbiA9IGNjZGNfaHdfcGFyYW1zX3Jhdy53aW4ud2lkdGg7CisJCQlsZW4gPSBjY2RjX2NmZy5iYXllci53aW4ud2lkdGg7CiAJCWVsc2UKLQkJCWxlbiA9IGNjZGNfaHdfcGFyYW1zX3Jhdy53aW4ud2lkdGggKiAyOworCQkJbGVuID0gY2NkY19jZmcuYmF5ZXIud2luLndpZHRoICogMjsKIAl9IGVsc2UKLQkJbGVuID0gY2NkY19od19wYXJhbXNfeWNiY3Iud2luLndpZHRoICogMjsKKwkJbGVuID0gY2NkY19jZmcueWNiY3Iud2luLndpZHRoICogMjsKIAlyZXR1cm4gQUxJR04obGVuLCAzMik7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19zZXRfZnJhbWVfZm9ybWF0KGVudW0gY2NkY19mcm1mbXQgZnJtX2ZtdCkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQljY2RjX2h3X3BhcmFtc19yYXcuZnJtX2ZtdCA9IGZybV9mbXQ7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWNjZGNfY2ZnLmJheWVyLmZybV9mbXQgPSBmcm1fZm10OwogCWVsc2UKLQkJY2NkY19od19wYXJhbXNfeWNiY3IuZnJtX2ZtdCA9IGZybV9mbXQ7CisJCWNjZGNfY2ZnLnljYmNyLmZybV9mbXQgPSBmcm1fZm10OwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgZW51bSBjY2RjX2ZybWZtdCBjY2RjX2dldF9mcmFtZV9mb3JtYXQodm9pZCkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQlyZXR1cm4gY2NkY19od19wYXJhbXNfcmF3LmZybV9mbXQ7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiBjY2RjX2NmZy5iYXllci5mcm1fZm10OwogCWVsc2UKLQkJcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3ljYmNyLmZybV9mbXQ7CisJCXJldHVybiBjY2RjX2NmZy55Y2Jjci5mcm1fZm10OwogfQogCiBzdGF0aWMgaW50IGNjZGNfZ2V0ZmlkKHZvaWQpCkBAIC05MTYsMTQgKzkyMiwxNCBAQAogCiBzdGF0aWMgaW50IGNjZGNfc2V0X2h3X2lmX3BhcmFtcyhzdHJ1Y3QgdnBmZV9od19pZl9wYXJhbSAqcGFyYW1zKQogewotCWNjZGNfaWZfdHlwZSA9IHBhcmFtcy0+aWZfdHlwZTsKKwljY2RjX2NmZy5pZl90eXBlID0gcGFyYW1zLT5pZl90eXBlOwogCiAJc3dpdGNoIChwYXJhbXMtPmlmX3R5cGUpIHsKIAljYXNlIFZQRkVfQlQ2NTY6CiAJY2FzZSBWUEZFX1lDQkNSX1NZTkNfMTY6CiAJY2FzZSBWUEZFX1lDQkNSX1NZTkNfODoKLQkJY2NkY19od19wYXJhbXNfeWNiY3IudmRfcG9sID0gcGFyYW1zLT52ZHBvbDsKLQkJY2NkY19od19wYXJhbXNfeWNiY3IuaGRfcG9sID0gcGFyYW1zLT5oZHBvbDsKKwkJY2NkY19jZmcueWNiY3IudmRfcG9sID0gcGFyYW1zLT52ZHBvbDsKKwkJY2NkY19jZmcueWNiY3IuaGRfcG9sID0gcGFyYW1zLT5oZHBvbDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogVE9ETyBhZGQgc3VwcG9ydCBmb3IgcmF3IGJheWVyIGhlcmUgKi8KQEAgLTkzOCw3ICs5NDQsNiBAQAogCS5od19vcHMgPSB7CiAJCS5vcGVuID0gY2NkY19vcGVuLAogCQkuY2xvc2UgPSBjY2RjX2Nsb3NlLAotCQkuc2V0X2NjZGNfYmFzZSA9IGNjZGNfc2V0X2NjZGNfYmFzZSwKIAkJLmVuYWJsZSA9IGNjZGNfZW5hYmxlLAogCQkuZW5hYmxlX291dF90b19zZHJhbSA9IGNjZGNfZW5hYmxlX291dHB1dF90b19zZHJhbSwKIAkJLnNldF9od19pZl9wYXJhbXMgPSBjY2RjX3NldF9od19pZl9wYXJhbXMsCkBAIC05NTksMTkgKzk2NCwxMTggQEAKIAl9LAogfTsKIAorc3RhdGljIGludCBfX2luaXQgZG0zNTVfY2NkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXZvaWQgKCpzZXR1cF9waW5tdXgpKHZvaWQpOworCXN0cnVjdCByZXNvdXJjZQkqcmVzOworCWludCBzdGF0dXMgPSAwOworCisJLyoKKwkgKiBmaXJzdCB0cnkgdG8gcmVnaXN0ZXIgd2l0aCB2cGZlLiBJZiBub3QgY29ycmVjdCBwbGF0Zm9ybSwgdGhlbiB3ZQorCSAqIGRvbid0IGhhdmUgdG8gaW9tYXAKKwkgKi8KKwlzdGF0dXMgPSB2cGZlX3JlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9ub3JlczsKKwl9CisKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCByZXMtPm5hbWUpOworCWlmICghcmVzKSB7CisJCXN0YXR1cyA9IC1FQlVTWTsKKwkJZ290byBmYWlsX25vcmVzOworCX0KKworCWNjZGNfY2ZnLmJhc2VfYWRkciA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghY2NkY19jZmcuYmFzZV9hZGRyKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9ub21lbTsKKwl9CisKKwkvKiBHZXQgYW5kIGVuYWJsZSBNYXN0ZXIgY2xvY2sgKi8KKwljY2RjX2NmZy5tY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibWFzdGVyIik7CisJaWYgKElTX0VSUihjY2RjX2NmZy5tY2xrKSkgeworCQlzdGF0dXMgPSBQVFJfRVJSKGNjZGNfY2ZnLm1jbGspOworCQlnb3RvIGZhaWxfbm9tYXA7CisJfQorCWlmIChjbGtfZW5hYmxlKGNjZGNfY2ZnLm1jbGspKSB7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9tY2xrOworCX0KKworCS8qIEdldCBhbmQgZW5hYmxlIFNsYXZlIGNsb2NrICovCisJY2NkY19jZmcuc2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInNsYXZlIik7CisJaWYgKElTX0VSUihjY2RjX2NmZy5zY2xrKSkgeworCQlzdGF0dXMgPSBQVFJfRVJSKGNjZGNfY2ZnLnNjbGspOworCQlnb3RvIGZhaWxfbWNsazsKKwl9CisJaWYgKGNsa19lbmFibGUoY2NkY19jZmcuc2NsaykpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX3NjbGs7CisJfQorCisJLyogUGxhdGZvcm0gZGF0YSBob2xkcyBzZXR1cF9waW5tdXggZnVuY3Rpb24gcHRyICovCisJaWYgKE5VTEwgPT0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX3NjbGs7CisJfQorCXNldHVwX3Bpbm11eCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCS8qCisJICogc2V0dXAgTXV4IGNvbmZpZ3VyYXRpb24gZm9yIGNjZGMgd2hpY2ggbWF5IGJlIGRpZmZlcmVudCBmb3IKKwkgKiBkaWZmZXJlbnQgU29DcyB1c2luZyB0aGlzIENDREMKKwkgKi8KKwlzZXR1cF9waW5tdXgoKTsKKwljY2RjX2NmZy5kZXYgPSAmcGRldi0+ZGV2OworCXByaW50ayhLRVJOX05PVElDRSAiJXMgaXMgcmVnaXN0ZXJlZCB3aXRoIHZwZmUuXG4iLCBjY2RjX2h3X2Rldi5uYW1lKTsKKwlyZXR1cm4gMDsKK2ZhaWxfc2NsazoKKwljbGtfcHV0KGNjZGNfY2ZnLnNjbGspOworZmFpbF9tY2xrOgorCWNsa19wdXQoY2NkY19jZmcubWNsayk7CitmYWlsX25vbWFwOgorCWlvdW5tYXAoY2NkY19jZmcuYmFzZV9hZGRyKTsKK2ZhaWxfbm9tZW06CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CitmYWlsX25vcmVzOgorCXZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZSgmY2NkY19od19kZXYpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgZG0zNTVfY2NkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKKworCWNsa19wdXQoY2NkY19jZmcubWNsayk7CisJY2xrX3B1dChjY2RjX2NmZy5zY2xrKTsKKwlpb3VubWFwKGNjZGNfY2ZnLmJhc2VfYWRkcik7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAocmVzKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZG0zNTVfY2NkY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiZG0zNTVfY2NkYyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGRtMzU1X2NjZGNfcmVtb3ZlKSwKKwkucHJvYmUgPSBkbTM1NV9jY2RjX3Byb2JlLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgZG0zNTVfY2NkY19pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICJkbTM1NV9jY2RjX2luaXRcbiIpOwotCWlmICh2cGZlX3JlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2RldikgPCAwKQotCQlyZXR1cm4gLTE7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIlcyBpcyByZWdpc3RlcmVkIHdpdGggdnBmZS5cbiIsCi0JCWNjZGNfaHdfZGV2Lm5hbWUpOwotCXJldHVybiAwOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRtMzU1X2NjZGNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGRtMzU1X2NjZGNfZXhpdCh2b2lkKQogewotCXZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZSgmY2NkY19od19kZXYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkbTM1NV9jY2RjX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGRtMzU1X2NjZGNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTY0NHhfY2NkYy5jCmluZGV4IGQ1ZmExOTMuLjBjMzk0Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTY0NHhfY2NkYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTY0NHhfY2NkYy5jCkBAIC0zNyw4ICszNywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKwogI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvZG02NDR4X2NjZGMuaD4KICNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3Zwc3MuaD4KKwogI2luY2x1ZGUgImRtNjQ0eF9jY2RjX3JlZ3MuaCIKICNpbmNsdWRlICJjY2RjX2h3X2RldmljZS5oIgogCkBAIC00NiwzMiArNTAsNDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQ0NEQyBEcml2ZXIgZm9yIERNNjQ0NiIpOwogTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2UgKmRldjsKLQotLyogT2JqZWN0IGZvciBDQ0RDIHJhdyBtb2RlICovCi1zdGF0aWMgc3RydWN0IGNjZGNfcGFyYW1zX3JhdyBjY2RjX2h3X3BhcmFtc19yYXcgPSB7Ci0JLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVcsCi0JLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSwKLQkud2luID0gQ0NEQ19XSU5fVkdBLAotCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkuY29uZmlnX3BhcmFtcyA9IHsKLQkJLmRhdGFfc3ogPSBDQ0RDX0RBVEFfMTBCSVRTLAorc3RhdGljIHN0cnVjdCBjY2RjX29wZXJfY29uZmlnIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJLyogQ0NEQyBpbnRlcmZhY2UgdHlwZSAqLworCWVudW0gdnBmZV9od19pZl90eXBlIGlmX3R5cGU7CisJLyogUmF3IEJheWVyIGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3IGJheWVyOworCS8qIFlDYkNyIGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgeWNiY3I7CisJLyogTWFzdGVyIGNsb2NrICovCisJc3RydWN0IGNsayAqbWNsazsKKwkvKiBzbGF2ZSBjbG9jayAqLworCXN0cnVjdCBjbGsgKnNjbGs7CisJLyogY2NkYyBiYXNlIGFkZHJlc3MgKi8KKwl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKK30gY2NkY19jZmcgPSB7CisJLyogUmF3IGNvbmZpZ3VyYXRpb25zICovCisJLmJheWVyID0geworCQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVywKKwkJLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSwKKwkJLndpbiA9IENDRENfV0lOX1ZHQSwKKwkJLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5jb25maWdfcGFyYW1zID0geworCQkJLmRhdGFfc3ogPSBDQ0RDX0RBVEFfMTBCSVRTLAorCQl9LAogCX0sCi19OwotCi0vKiBPYmplY3QgZm9yIENDREMgeWNiY3IgbW9kZSAqLwotc3RhdGljIHN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciBjY2RjX2h3X3BhcmFtc195Y2JjciA9IHsKLQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzhCSVQsCi0JLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VELAotCS53aW4gPSBDQ0RDX1dJTl9QQUwsCi0JLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS5idDY1Nl9lbmFibGUgPSAxLAotCS5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWSwKLQkuYnVmX3R5cGUgPSBDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVECisJLnljYmNyID0geworCQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzhCSVQsCisJCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCwKKwkJLndpbiA9IENDRENfV0lOX1BBTCwKKwkJLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5idDY1Nl9lbmFibGUgPSAxLAorCQkucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlksCisJCS5idWZfdHlwZSA9IENDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQKKwl9LAogfTsKIAogI2RlZmluZSBDQ0RDX01BWF9SQVdfWVVWX0ZPUk1BVFMJMgpAQCAtODQsMjUgKzEwMCwxNSBAQAogc3RhdGljIHUzMiBjY2RjX3Jhd195dXZfcGl4X2Zvcm1hdHNbXSA9CiAJe1Y0TDJfUElYX0ZNVF9VWVZZLCBWNEwyX1BJWF9GTVRfWVVZVn07CiAKLXN0YXRpYyB2b2lkICpfX2lvbWVtIGNjZGNfYmFzZV9hZGRyOwotc3RhdGljIGludCBjY2RjX2FkZHJfc2l6ZTsKLXN0YXRpYyBlbnVtIHZwZmVfaHdfaWZfdHlwZSBjY2RjX2lmX3R5cGU7Ci0KIC8qIHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcyAqLwogc3RhdGljIGlubGluZSB1MzIgcmVncih1MzIgb2Zmc2V0KQogewotCXJldHVybiBfX3Jhd19yZWFkbChjY2RjX2Jhc2VfYWRkciArIG9mZnNldCk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKGNjZGNfY2ZnLmJhc2VfYWRkciArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWd3KHUzMiB2YWwsIHUzMiBvZmZzZXQpCiB7Ci0JX19yYXdfd3JpdGVsKHZhbCwgY2NkY19iYXNlX2FkZHIgKyBvZmZzZXQpOwotfQotCi1zdGF0aWMgdm9pZCBjY2RjX3NldF9jY2RjX2Jhc2Uodm9pZCAqYWRkciwgaW50IHNpemUpCi17Ci0JY2NkY19iYXNlX2FkZHIgPSBhZGRyOwotCWNjZGNfYWRkcl9zaXplID0gc2l6ZTsKKwlfX3Jhd193cml0ZWwodmFsLCBjY2RjX2NmZy5iYXNlX2FkZHIgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgdm9pZCBjY2RjX2VuYWJsZShpbnQgZmxhZykKQEAgLTEzMiw3ICsxMzgsNyBAQAogCWludCB2ZXJ0X3N0YXJ0LCB2ZXJ0X25yX2xpbmVzOwogCWludCB2YWwgPSAwLCBtaWRfaW1nID0gMDsKIAotCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX3NldHdpbi4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5TdGFydGluZyBjY2RjX3NldHdpbi4uLiIpOwogCS8qCiAJICogcHBjIC0gcGVyIHBpeGVsIGNvdW50LiBpbmRpY2F0ZXMgaG93IG1hbnkgcGl4ZWxzIHBlciBjZWxsCiAJICogb3V0cHV0IHRvIFNEUkFNLiBleGFtcGxlLCBmb3IgeWNiY3IsIGl0IGlzIG9uZSB5IGFuZCBvbmUgYywgc28gMi4KQEAgLTE3MSw3ICsxNzcsNyBAQAogCXJlZ3coKHZlcnRfc3RhcnQgPDwgQ0NEQ19WRVJUX1NUQVJUX1NMVjBfU0hJRlQpIHwgdmVydF9zdGFydCwKIAkgICAgIENDRENfVkVSVF9TVEFSVCk7CiAJcmVndyh2ZXJ0X25yX2xpbmVzLCBDQ0RDX1ZFUlRfTElORVMpOwotCWRldl9kYmcoZGV2LCAiXG5FbmQgb2YgY2NkY19zZXR3aW4uLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuRW5kIG9mIGNjZGNfc2V0d2luLi4uIik7CiB9CiAKIHN0YXRpYyB2b2lkIGNjZGNfcmVhZHJlZ3Modm9pZCkKQEAgLTE3OSwzOSArMTg1LDM5IEBACiAJdW5zaWduZWQgaW50IHZhbCA9IDA7CiAKIAl2YWwgPSByZWdyKENDRENfQUxBVyk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBBTEFXLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQUxBVy4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfQ0xBTVApOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQ0xBTVAuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBDTEFNUC4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfRENTVUIpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRENTVUIuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBEQ1NVQi4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfQkxLQ01QKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEJMS0NNUC4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIEJMS0NNUC4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfRlBDX0FERFIpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRlBDX0FERFIuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBGUENfQUREUi4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfRlBDKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZQQy4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZQQy4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfRk1UQ0ZHKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZNVENGRy4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZNVENGRy4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfQ09MUFROKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIENPTFBUTi4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIENPTFBUTi4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfRk1UX0hPUlopOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRk1UX0hPUlouLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBGTVRfSE9SWi4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfRk1UX1ZFUlQpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRk1UX1ZFUlQuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBGTVRfVkVSVC4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfSFNJWkVfT0ZGKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEhTSVpFX09GRi4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIEhTSVpFX09GRi4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfU0RPRlNUKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIFNET0ZTVC4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIFNET0ZTVC4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfVlBfT1VUKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIFZQX09VVC4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIFZQX09VVC4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfU1lOX01PREUpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gU1lOX01PREUuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBTWU5fTU9ERS4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfSE9SWl9JTkZPKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEhPUlpfSU5GTy4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIEhPUlpfSU5GTy4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfVkVSVF9TVEFSVCk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBWRVJUX1NUQVJULi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gVkVSVF9TVEFSVC4uLlxuIiwgdmFsKTsKIAl2YWwgPSByZWdyKENDRENfVkVSVF9MSU5FUyk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBWRVJUX0xJTkVTLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gVkVSVF9MSU5FUy4uLlxuIiwgdmFsKTsKIH0KIAogc3RhdGljIGludCB2YWxpZGF0ZV9jY2RjX3BhcmFtKHN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjY2RjcGFyYW0pCkBAIC0yMjAsNyArMjI2LDcgQEAKIAkJaWYgKChjY2RjcGFyYW0tPmFsYXcuZ2FtYV93ZCA+IENDRENfR0FNTUFfQklUU18wOV8wKSB8fAogCQkgICAgKGNjZGNwYXJhbS0+YWxhdy5nYW1hX3dkIDwgQ0NEQ19HQU1NQV9CSVRTXzE1XzYpIHx8CiAJCSAgICAoY2NkY3BhcmFtLT5hbGF3LmdhbWFfd2QgPCBjY2RjcGFyYW0tPmRhdGFfc3opKSB7Ci0JCQlkZXZfZGJnKGRldiwgIlxuSW52YWxpZCBkYXRhIGxpbmUgc2VsZWN0Iik7CisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuSW52YWxpZCBkYXRhIGxpbmUgc2VsZWN0Iik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CkBAIC0yMzAsNyArMjM2LDcgQEAKIHN0YXRpYyBpbnQgY2NkY191cGRhdGVfcmF3X3BhcmFtcyhzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqcmF3X3BhcmFtcykKIHsKIAlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY29uZmlnX3BhcmFtcyA9Ci0JCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtczsKKwkJCQkmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtczsKIAl1bnNpZ25lZCBpbnQgKmZwY192aXJ0YWRkciA9IE5VTEw7CiAJdW5zaWduZWQgaW50ICpmcGNfcGh5c2FkZHIgPSBOVUxMOwogCkBAIC0yNjYsNyArMjcyLDcgQEAKIAkJCQkJCQkgRlBfTlVNX0JZVEVTKSk7CiAKIAkJaWYgKGZwY192aXJ0YWRkciA9PSBOVUxMKSB7Ci0JCQlkZXZfZGJnKGRldiwKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LAogCQkJCSJcblVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIEZQQyIpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTI3OSw3ICsyODUsNyBAQAogCWlmIChjb3B5X2Zyb21fdXNlcihmcGNfdmlydGFkZHIsCiAJCQkodm9pZCBfX3VzZXIgKilyYXdfcGFyYW1zLT5mYXVsdF9weGwuZnBjX3RhYmxlX2FkZHIsCiAJCQljb25maWdfcGFyYW1zLT5mYXVsdF9weGwuZnBfbnVtICogRlBfTlVNX0JZVEVTKSkgewotCQlkZXZfZGJnKGRldiwgIlxuIGNvcHlfZnJvbV91c2VyIGZhaWxlZCIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuIGNvcHlfZnJvbV91c2VyIGZhaWxlZCIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAJY29uZmlnX3BhcmFtcy0+ZmF1bHRfcHhsLmZwY190YWJsZV9hZGRyID0gKHVuc2lnbmVkIGludClmcGNfcGh5c2FkZHI7CkBAIC0yODksNyArMjk1LDcgQEAKIHN0YXRpYyBpbnQgY2NkY19jbG9zZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNvbmZpZ19wYXJhbXMgPQotCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXM7CisJCQkJJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXM7CiAJdW5zaWduZWQgaW50ICpmcGNfcGh5c2FkZHIgPSBOVUxMLCAqZnBjX3ZpcnRhZGRyID0gTlVMTDsKIAogCWZwY19waHlzYWRkciA9ICh1bnNpZ25lZCBpbnQgKiljb25maWdfcGFyYW1zLT5mYXVsdF9weGwuZnBjX3RhYmxlX2FkZHI7CkBAIC0zMjMsOSArMzI5LDggQEAKIAogc3RhdGljIGludCBjY2RjX29wZW4oc3RydWN0IGRldmljZSAqZGV2aWNlKQogewotCWRldiA9IGRldmljZTsKIAljY2RjX3Jlc3RvcmVfZGVmYXVsdHMoKTsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQogCQljY2RjX2VuYWJsZV92cG9ydCgxKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM0MSwxMiArMzQ2LDEyIEBACiAJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgY2NkY19yYXdfcGFyYW1zOwogCWludCB4OwogCi0JaWYgKGNjZGNfaWZfdHlwZSAhPSBWUEZFX1JBV19CQVlFUikKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSAhPSBWUEZFX1JBV19CQVlFUikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl4ID0gY29weV9mcm9tX3VzZXIoJmNjZGNfcmF3X3BhcmFtcywgcGFyYW1zLCBzaXplb2YoY2NkY19yYXdfcGFyYW1zKSk7CiAJaWYgKHgpIHsKLQkJZGV2X2RiZyhkZXYsICJjY2RjX3NldF9wYXJhbXM6IGVycm9yIGluIGNvcHlpbmciCisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiY2NkY19zZXRfcGFyYW1zOiBlcnJvciBpbiBjb3B5aW5nIgogCQkJICAgImNjZGMgcGFyYW1zLCAlZFxuIiwgeCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KQEAgLTM2NCwxMCArMzY5LDEwIEBACiAgKi8KIHZvaWQgY2NkY19jb25maWdfeWNiY3Iodm9pZCkKIHsKLQlzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgKnBhcmFtcyA9ICZjY2RjX2h3X3BhcmFtc195Y2JjcjsKKwlzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgKnBhcmFtcyA9ICZjY2RjX2NmZy55Y2JjcjsKIAl1MzIgc3luX21vZGU7CiAKLQlkZXZfZGJnKGRldiwgIlxuU3RhcnRpbmcgY2NkY19jb25maWdfeWNiY3IuLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuU3RhcnRpbmcgY2NkY19jb25maWdfeWNiY3IuLi4iKTsKIAkvKgogCSAqIGZpcnN0IHJlc3RvcmUgdGhlIENDREMgcmVnaXN0ZXJzIHRvIGRlZmF1bHQgdmFsdWVzCiAJICogVGhpcyBpcyBpbXBvcnRhbnQgc2luY2Ugd2UgYXNzdW1lIGRlZmF1bHQgdmFsdWVzIHRvIGJlIHNldCBpbgpAQCAtNDI4LDcgKzQzMyw3IEBACiAJCXJlZ3coQ0NEQ19TRE9GU1RfRklFTERfSU5URVJMRUFWRUQsIENDRENfU0RPRlNUKTsKIAogCWNjZGNfc2JsX3Jlc2V0KCk7Ci0JZGV2X2RiZyhkZXYsICJcbkVuZCBvZiBjY2RjX2NvbmZpZ195Y2Jjci4uLlxuIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbkVuZCBvZiBjY2RjX2NvbmZpZ195Y2Jjci4uLlxuIik7CiAJY2NkY19yZWFkcmVncygpOwogfQogCkBAIC00NDAsOSArNDQ1LDkgQEAKIAkJLyogY29uZmlndXJlIERDU3ViICovCiAJCXZhbCA9IChiY2xhbXAtPmRjX3N1YikgJiBDQ0RDX0JMS19EQ19TVUJfTUFTSzsKIAkJcmVndyh2YWwsIENDRENfRENTVUIpOwotCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIERDU1VCLi4uXG4iLCB2YWwpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIERDU1VCLi4uXG4iLCB2YWwpOwogCQlyZWd3KENDRENfQ0xBTVBfREVGQVVMVF9WQUwsIENDRENfQ0xBTVApOwotCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweDAwMDAgdG8gQ0xBTVAuLi5cbiIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweDAwMDAgdG8gQ0xBTVAuLi5cbiIpOwogCQlyZXR1cm47CiAJfQogCS8qCkBAIC00NTcsMTAgKzQ2MiwxMCBAQAogCSAgICAgICAoKGJjbGFtcC0+c2FtcGxlX3BpeGVsICYgQ0NEQ19CTEtfU0FNUExFX0xOX01BU0spIDw8CiAJCUNDRENfQkxLX1NBTVBMRV9MTl9TSElGVCkgfCBDQ0RDX0JMS19DTEFNUF9FTkFCTEUpOwogCXJlZ3codmFsLCBDQ0RDX0NMQU1QKTsKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIENMQU1QLi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gQ0xBTVAuLi5cbiIsIHZhbCk7CiAJLyogSWYgQmxhY2sgY2xhbXBpbmcgaXMgZW5hYmxlIHRoZW4gbWFrZSBkY3N1YiAwICovCiAJcmVndyhDQ0RDX0RDU1VCX0RFRkFVTFRfVkFMLCBDQ0RDX0RDU1VCKTsKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweDAwMDAwMDAwIHRvIERDU1VCLi4uXG4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweDAwMDAwMDAwIHRvIERDU1VCLi4uXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgY2NkY19jb25maWdfYmxhY2tfY29tcGVuc2Uoc3RydWN0IGNjZGNfYmxhY2tfY29tcGVuc2F0aW9uICpiY29tcCkKQEAgLTQ5MCwxNyArNDk1LDE3IEBACiAKIAkvKiBDb25maWd1cmUgRmF1bHQgcGl4ZWwgaWYgbmVlZGVkICovCiAJcmVndyhmcGMtPmZwY190YWJsZV9hZGRyLCBDQ0RDX0ZQQ19BRERSKTsKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZQQ19BRERSLi4uXG4iLAorCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRlBDX0FERFIuLi5cbiIsCiAJCSAgICAgICAoZnBjLT5mcGNfdGFibGVfYWRkcikpOwogCS8qIFdyaXRlIHRoZSBGUEMgcGFyYW1zIHdpdGggRlBDIGRpc2FibGUgKi8KIAl2YWwgPSBmcGMtPmZwX251bSAmIENDRENfRlBDX0ZQQ19OVU1fTUFTSzsKIAlyZWd3KHZhbCwgQ0NEQ19GUEMpOwogCi0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBGUEMuLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBGUEMuLi5cbiIsIHZhbCk7CiAJLyogcmVhZCB0aGUgRlBDIHJlZ2lzdGVyICovCiAJdmFsID0gcmVncihDQ0RDX0ZQQykgfCBDQ0RDX0ZQQ19FTkFCTEU7CiAJcmVndyh2YWwsIENDRENfRlBDKTsKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZQQy4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZQQy4uLlxuIiwgdmFsKTsKIH0KIAogLyoKQEAgLTUwOSwxMyArNTE0LDEzIEBACiAgKi8KIHZvaWQgY2NkY19jb25maWdfcmF3KHZvaWQpCiB7Ci0Jc3RydWN0IGNjZGNfcGFyYW1zX3JhdyAqcGFyYW1zID0gJmNjZGNfaHdfcGFyYW1zX3JhdzsKKwlzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3ICpwYXJhbXMgPSAmY2NkY19jZmcuYmF5ZXI7CiAJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNvbmZpZ19wYXJhbXMgPQotCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXM7CisJCQkJJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXM7CiAJdW5zaWduZWQgaW50IHN5bl9tb2RlID0gMDsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCi0JZGV2X2RiZyhkZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3Jhdy4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKIAogCS8qICAgICAgUmVzZXQgQ0NEQyAqLwogCWNjZGNfcmVzdG9yZV9kZWZhdWx0cygpOwpAQCAtNTQ1LDcgKzU1MCw3IEBACiAJCXZhbCA9ICgoY29uZmlnX3BhcmFtcy0+YWxhdy5nYW1hX3dkICYKIAkJICAgICAgQ0NEQ19BTEFXX0dBTUFfV0RfTUFTSykgfCBDQ0RDX0FMQVdfRU5BQkxFKTsKIAkJcmVndyh2YWwsIENDRENfQUxBVyk7Ci0JCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gQUxBVy4uLlxuIiwgdmFsKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBBTEFXLi4uXG4iLCB2YWwpOwogCX0KIAogCS8qIENvbmZpZ3VyZSB2aWRlbyB3aW5kb3cgKi8KQEAgLTU4MiwxMSArNTg3LDExIEBACiAJLyogV3JpdGUgdmFsdWUgaW4gRk1UQ0ZHICovCiAJcmVndyh2YWwsIENDRENfRk1UQ0ZHKTsKIAotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRk1UQ0ZHLi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRk1UQ0ZHLi4uXG4iLCB2YWwpOwogCS8qIENvbmZpZ3VyZSB0aGUgY29sb3IgcGF0dGVybiBhY2NvcmRpbmcgdG8gbXQ5dDAwMSBzZW5zb3IgKi8KIAlyZWd3KENDRENfQ09MUFROX1ZBTCwgQ0NEQ19DT0xQVE4pOwogCi0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHhCQjExQkIxMSB0byBDT0xQVE4uLi5cbiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4QkIxMUJCMTEgdG8gQ09MUFROLi4uXG4iKTsKIAkvKgogCSAqIENvbmZpZ3VyZSBEYXRhIGZvcm1hdHRlcihWaWRlbyBwb3J0KSBwaXhlbCBzZWxlY3Rpb24KIAkgKiAoRk1UX0hPUlosIEZNVF9WRVJUKQpAQCAtNTk2LDcgKzYwMSw3IEBACiAJICAgICAgKHBhcmFtcy0+d2luLndpZHRoICYgQ0NEQ19GTVRfSE9SWl9GTVRMTkhfTUFTSyk7CiAJcmVndyh2YWwsIENDRENfRk1UX0hPUlopOwogCi0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBGTVRfSE9SWi4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZNVF9IT1JaLi4uXG4iLCB2YWwpOwogCXZhbCA9IChwYXJhbXMtPndpbi50b3AgJiBDQ0RDX0ZNVF9WRVJUX0ZNVFNMVl9NQVNLKQogCSAgICA8PCBDQ0RDX0ZNVF9WRVJUX0ZNVFNMVl9TSElGVDsKIAlpZiAocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX1BST0dSRVNTSVZFKQpAQCAtNjA0LDEzICs2MDksMTMgQEAKIAllbHNlCiAJCXZhbCB8PSAocGFyYW1zLT53aW4uaGVpZ2h0ID4+IDEpICYgQ0NEQ19GTVRfVkVSVF9GTVRMTlZfTUFTSzsKIAotCWRldl9kYmcoZGV2LCAiXG5wYXJhbXMtPndpbi5oZWlnaHQgIDB4JXggLi4uXG4iLAorCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5wYXJhbXMtPndpbi5oZWlnaHQgIDB4JXggLi4uXG4iLAogCSAgICAgICBwYXJhbXMtPndpbi5oZWlnaHQpOwogCXJlZ3codmFsLCBDQ0RDX0ZNVF9WRVJUKTsKIAotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRk1UX1ZFUlQuLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBGTVRfVkVSVC4uLlxuIiwgdmFsKTsKIAotCWRldl9kYmcoZGV2LCAiXG5iZWxvdyByZWd3KHZhbCwgRk1UX1ZFUlQpLi4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbmJlbG93IHJlZ3codmFsLCBGTVRfVkVSVCkuLi4iKTsKIAogCS8qCiAJICogQ29uZmlndXJlIEhvcml6b250YWwgb2Zmc2V0IHJlZ2lzdGVyLiBJZiBwYWNrIDggaXMgZW5hYmxlZCB0aGVuCkBAIC02MzEsMTcgKzYzNiwxNyBAQAogCQlpZiAocGFyYW1zLT5pbWFnZV9pbnZlcnRfZW5hYmxlKSB7CiAJCQkvKiBGb3IgaW50ZWxhY2UgaW52ZXJzZSBtb2RlICovCiAJCQlyZWd3KENDRENfSU5URVJMQUNFRF9JTUFHRV9JTlZFUlQsIENDRENfU0RPRlNUKTsKLQkJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4NEI2RCB0byBTRE9GU1QuLi5cbiIpOworCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHg0QjZEIHRvIFNET0ZTVC4uXG4iKTsKIAkJfQogCiAJCWVsc2UgewogCQkJLyogRm9yIGludGVsYWNlIG5vbiBpbnZlcnNlIG1vZGUgKi8KIAkJCXJlZ3coQ0NEQ19JTlRFUkxBQ0VEX05PX0lNQUdFX0lOVkVSVCwgQ0NEQ19TRE9GU1QpOwotCQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgwMjQ5IHRvIFNET0ZTVC4uLlxuIik7CisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweDAyNDkgdG8gU0RPRlNULi5cbiIpOwogCQl9CiAJfSBlbHNlIGlmIChwYXJhbXMtPmZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUpIHsKIAkJcmVndyhDQ0RDX1BST0dSRVNTSVZFX05PX0lNQUdFX0lOVkVSVCwgQ0NEQ19TRE9GU1QpOwotCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweDAwMDAgdG8gU0RPRlNULi4uXG4iKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgwMDAwIHRvIFNET0ZTVC4uLlxuIik7CiAJfQogCiAJLyoKQEAgLTY2MiwxOCArNjY3LDE4IEBACiAJdmFsIHw9IChwYXJhbXMtPndpbi5sZWZ0KSAmIENDRENfVlBfT1VUX0hPUlpfU1RfTUFTSzsKIAlyZWd3KHZhbCwgQ0NEQ19WUF9PVVQpOwogCi0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBWUF9PVVQuLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBWUF9PVVQuLi5cbiIsIHZhbCk7CiAJcmVndyhzeW5fbW9kZSwgQ0NEQ19TWU5fTU9ERSk7Ci0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBTWU5fTU9ERS4uLlxuIiwgc3luX21vZGUpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gU1lOX01PREUuLi5cbiIsIHN5bl9tb2RlKTsKIAogCWNjZGNfc2JsX3Jlc2V0KCk7Ci0JZGV2X2RiZyhkZXYsICJcbmVuZCBvZiBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuZW5kIG9mIGNjZGNfY29uZmlnX3Jhdy4uLiIpOwogCWNjZGNfcmVhZHJlZ3MoKTsKIH0KIAogc3RhdGljIGludCBjY2RjX2NvbmZpZ3VyZSh2b2lkKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCiAJCWNjZGNfY29uZmlnX3JhdygpOwogCWVsc2UKIAkJY2NkY19jb25maWdfeWNiY3IoKTsKQEAgLTY4MiwyNCArNjg3LDI0IEBACiAKIHN0YXRpYyBpbnQgY2NkY19zZXRfYnVmdHlwZShlbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZSkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQljY2RjX2h3X3BhcmFtc19yYXcuYnVmX3R5cGUgPSBidWZfdHlwZTsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19jZmcuYmF5ZXIuYnVmX3R5cGUgPSBidWZfdHlwZTsKIAllbHNlCi0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CisJCWNjZGNfY2ZnLnljYmNyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBlbnVtIGNjZGNfYnVmdHlwZSBjY2RjX2dldF9idWZ0eXBlKHZvaWQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3Jhdy5idWZfdHlwZTsKLQlyZXR1cm4gY2NkY19od19wYXJhbXNfeWNiY3IuYnVmX3R5cGU7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiBjY2RjX2NmZy5iYXllci5idWZfdHlwZTsKKwlyZXR1cm4gY2NkY19jZmcueWNiY3IuYnVmX3R5cGU7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19lbnVtX3BpeCh1MzIgKnBpeCwgaW50IGkpCiB7CiAJaW50IHJldCA9IC1FSU5WQUw7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CiAJCWlmIChpIDwgQVJSQVlfU0laRShjY2RjX3Jhd19iYXllcl9waXhfZm9ybWF0cykpIHsKIAkJCSpwaXggPSBjY2RjX3Jhd19iYXllcl9waXhfZm9ybWF0c1tpXTsKIAkJCXJldCA9IDA7CkBAIC03MTUsMTcgKzcyMCwxNyBAQAogCiBzdGF0aWMgaW50IGNjZGNfc2V0X3BpeGVsX2Zvcm1hdCh1MzIgcGl4Zm10KQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKLQkJY2NkY19od19wYXJhbXNfcmF3LnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVc7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwkJY2NkY19jZmcuYmF5ZXIucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVzsKIAkJaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4KQotCQkJY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXMuYWxhdy5lbmFibGUgPSAxOworCQkJY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5hbGF3LmVuYWJsZSA9IDE7CiAJCWVsc2UgaWYgKHBpeGZtdCAhPSBWNEwyX1BJWF9GTVRfU0JHR1IxNikKIAkJCXJldHVybiAtRUlOVkFMOwogCX0gZWxzZSB7CiAJCWlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCi0JCQljY2RjX2h3X3BhcmFtc195Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX1lDQllDUjsKKwkJCWNjZGNfY2ZnLnljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfWUNCWUNSOwogCQllbHNlIGlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1VZVlkpCi0JCQljY2RjX2h3X3BhcmFtc195Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWTsKKwkJCWNjZGNfY2ZnLnljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZOwogCQllbHNlCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC03MzQsMTcgKzczOSwxNiBAQAogCiBzdGF0aWMgdTMyIGNjZGNfZ2V0X3BpeGVsX2Zvcm1hdCh2b2lkKQogewotCXN0cnVjdCBjY2RjX2FfbGF3ICphbGF3ID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zLmFsYXc7CisJc3RydWN0IGNjZGNfYV9sYXcgKmFsYXcgPSAmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5hbGF3OwogCXUzMiBwaXhmbXQ7CiAKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQogCQlpZiAoYWxhdy0+ZW5hYmxlKQogCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1NCR0dSODsKIAkJZWxzZQogCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1NCR0dSMTY7CiAJZWxzZSB7Ci0JCWlmIChjY2RjX2h3X3BhcmFtc195Y2Jjci5waXhfb3JkZXIgPT0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1IpCisJCWlmIChjY2RjX2NmZy55Y2Jjci5waXhfb3JkZXIgPT0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1IpCiAJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKIAkJZWxzZQogCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1VZVlk7CkBAIC03NTQsNTMgKzc1OCw1MyBAQAogCiBzdGF0aWMgaW50IGNjZGNfc2V0X2ltYWdlX3dpbmRvdyhzdHJ1Y3QgdjRsMl9yZWN0ICp3aW4pCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJY2NkY19od19wYXJhbXNfcmF3LndpbiA9ICp3aW47CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWNjZGNfY2ZnLmJheWVyLndpbiA9ICp3aW47CiAJZWxzZQotCQljY2RjX2h3X3BhcmFtc195Y2Jjci53aW4gPSAqd2luOworCQljY2RjX2NmZy55Y2Jjci53aW4gPSAqd2luOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjY2RjX2dldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCSp3aW4gPSBjY2RjX2h3X3BhcmFtc19yYXcud2luOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQkqd2luID0gY2NkY19jZmcuYmF5ZXIud2luOwogCWVsc2UKLQkJKndpbiA9IGNjZGNfaHdfcGFyYW1zX3ljYmNyLndpbjsKKwkJKndpbiA9IGNjZGNfY2ZnLnljYmNyLndpbjsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBjY2RjX2dldF9saW5lX2xlbmd0aCh2b2lkKQogewogCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zOworCQkJCSZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKIAkJaWYgKChjb25maWdfcGFyYW1zLT5hbGF3LmVuYWJsZSkgfHwKIAkJICAgIChjb25maWdfcGFyYW1zLT5kYXRhX3N6ID09IENDRENfREFUQV84QklUUykpCi0JCQlsZW4gPSBjY2RjX2h3X3BhcmFtc19yYXcud2luLndpZHRoOworCQkJbGVuID0gY2NkY19jZmcuYmF5ZXIud2luLndpZHRoOwogCQllbHNlCi0JCQlsZW4gPSBjY2RjX2h3X3BhcmFtc19yYXcud2luLndpZHRoICogMjsKKwkJCWxlbiA9IGNjZGNfY2ZnLmJheWVyLndpbi53aWR0aCAqIDI7CiAJfSBlbHNlCi0JCWxlbiA9IGNjZGNfaHdfcGFyYW1zX3ljYmNyLndpbi53aWR0aCAqIDI7CisJCWxlbiA9IGNjZGNfY2ZnLnljYmNyLndpbi53aWR0aCAqIDI7CiAJcmV0dXJuIEFMSUdOKGxlbiwgMzIpOwogfQogCiBzdGF0aWMgaW50IGNjZGNfc2V0X2ZyYW1lX2Zvcm1hdChlbnVtIGNjZGNfZnJtZm10IGZybV9mbXQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJY2NkY19od19wYXJhbXNfcmF3LmZybV9mbXQgPSBmcm1fZm10OworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQljY2RjX2NmZy5iYXllci5mcm1fZm10ID0gZnJtX2ZtdDsKIAllbHNlCi0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmZybV9mbXQgPSBmcm1fZm10OworCQljY2RjX2NmZy55Y2Jjci5mcm1fZm10ID0gZnJtX2ZtdDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGVudW0gY2NkY19mcm1mbXQgY2NkY19nZXRfZnJhbWVfZm9ybWF0KHZvaWQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3Jhdy5mcm1fZm10OworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gY2NkY19jZmcuYmF5ZXIuZnJtX2ZtdDsKIAllbHNlCi0JCXJldHVybiBjY2RjX2h3X3BhcmFtc195Y2Jjci5mcm1fZm10OworCQlyZXR1cm4gY2NkY19jZmcueWNiY3IuZnJtX2ZtdDsKIH0KIAogc3RhdGljIGludCBjY2RjX2dldGZpZCh2b2lkKQpAQCAtODE2LDE0ICs4MjAsMTQgQEAKIAogc3RhdGljIGludCBjY2RjX3NldF9od19pZl9wYXJhbXMoc3RydWN0IHZwZmVfaHdfaWZfcGFyYW0gKnBhcmFtcykKIHsKLQljY2RjX2lmX3R5cGUgPSBwYXJhbXMtPmlmX3R5cGU7CisJY2NkY19jZmcuaWZfdHlwZSA9IHBhcmFtcy0+aWZfdHlwZTsKIAogCXN3aXRjaCAocGFyYW1zLT5pZl90eXBlKSB7CiAJY2FzZSBWUEZFX0JUNjU2OgogCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzE2OgogCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzg6Ci0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLnZkX3BvbCA9IHBhcmFtcy0+dmRwb2w7Ci0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmhkX3BvbCA9IHBhcmFtcy0+aGRwb2w7CisJCWNjZGNfY2ZnLnljYmNyLnZkX3BvbCA9IHBhcmFtcy0+dmRwb2w7CisJCWNjZGNfY2ZnLnljYmNyLmhkX3BvbCA9IHBhcmFtcy0+aGRwb2w7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIFRPRE8gYWRkIHN1cHBvcnQgZm9yIHJhdyBiYXllciBoZXJlICovCkBAIC04MzgsNyArODQyLDYgQEAKIAkuaHdfb3BzID0gewogCQkub3BlbiA9IGNjZGNfb3BlbiwKIAkJLmNsb3NlID0gY2NkY19jbG9zZSwKLQkJLnNldF9jY2RjX2Jhc2UgPSBjY2RjX3NldF9jY2RjX2Jhc2UsCiAJCS5yZXNldCA9IGNjZGNfc2JsX3Jlc2V0LAogCQkuZW5hYmxlID0gY2NkY19lbmFibGUsCiAJCS5zZXRfaHdfaWZfcGFyYW1zID0gY2NkY19zZXRfaHdfaWZfcGFyYW1zLApAQCAtODU5LDE5ICs4NjIsMTA1IEBACiAJfSwKIH07CiAKK3N0YXRpYyBpbnQgX19pbml0IGRtNjQ0eF9jY2RjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlCSpyZXM7CisJaW50IHN0YXR1cyA9IDA7CisKKwkvKgorCSAqIGZpcnN0IHRyeSB0byByZWdpc3RlciB3aXRoIHZwZmUuIElmIG5vdCBjb3JyZWN0IHBsYXRmb3JtLCB0aGVuIHdlCisJICogZG9uJ3QgaGF2ZSB0byBpb21hcAorCSAqLworCXN0YXR1cyA9IHZwZmVfcmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX25vcmVzOworCX0KKworCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHJlcy0+bmFtZSk7CisJaWYgKCFyZXMpIHsKKwkJc3RhdHVzID0gLUVCVVNZOworCQlnb3RvIGZhaWxfbm9yZXM7CisJfQorCisJY2NkY19jZmcuYmFzZV9hZGRyID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFjY2RjX2NmZy5iYXNlX2FkZHIpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBmYWlsX25vbWVtOworCX0KKworCS8qIEdldCBhbmQgZW5hYmxlIE1hc3RlciBjbG9jayAqLworCWNjZGNfY2ZnLm1jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtYXN0ZXIiKTsKKwlpZiAoSVNfRVJSKGNjZGNfY2ZnLm1jbGspKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoY2NkY19jZmcubWNsayk7CisJCWdvdG8gZmFpbF9ub21hcDsKKwl9CisJaWYgKGNsa19lbmFibGUoY2NkY19jZmcubWNsaykpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX21jbGs7CisJfQorCisJLyogR2V0IGFuZCBlbmFibGUgU2xhdmUgY2xvY2sgKi8KKwljY2RjX2NmZy5zY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic2xhdmUiKTsKKwlpZiAoSVNfRVJSKGNjZGNfY2ZnLnNjbGspKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoY2NkY19jZmcuc2Nsayk7CisJCWdvdG8gZmFpbF9tY2xrOworCX0KKwlpZiAoY2xrX2VuYWJsZShjY2RjX2NmZy5zY2xrKSkgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfc2NsazsKKwl9CisJY2NkY19jZmcuZGV2ID0gJnBkZXYtPmRldjsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIGlzIHJlZ2lzdGVyZWQgd2l0aCB2cGZlLlxuIiwgY2NkY19od19kZXYubmFtZSk7CisJcmV0dXJuIDA7CitmYWlsX3NjbGs6CisJY2xrX3B1dChjY2RjX2NmZy5zY2xrKTsKK2ZhaWxfbWNsazoKKwljbGtfcHV0KGNjZGNfY2ZnLm1jbGspOworZmFpbF9ub21hcDoKKwlpb3VubWFwKGNjZGNfY2ZnLmJhc2VfYWRkcik7CitmYWlsX25vbWVtOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZmFpbF9ub3JlczoKKwl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGRtNjQ0eF9jY2RjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZQkqcmVzOworCisJY2xrX3B1dChjY2RjX2NmZy5tY2xrKTsKKwljbGtfcHV0KGNjZGNfY2ZnLnNjbGspOworCWlvdW5tYXAoY2NkY19jZmcuYmFzZV9hZGRyKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCXZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZSgmY2NkY19od19kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkbTY0NHhfY2NkY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiZG02NDR4X2NjZGMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChkbTY0NHhfY2NkY19yZW1vdmUpLAorCS5wcm9iZSA9IGRtNjQ0eF9jY2RjX3Byb2JlLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgZG02NDR4X2NjZGNfaW5pdCh2b2lkKQogewotCXByaW50ayhLRVJOX05PVElDRSAiZG02NDR4X2NjZGNfaW5pdFxuIik7Ci0JaWYgKHZwZmVfcmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KSA8IDApCi0JCXJldHVybiAtMTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIGlzIHJlZ2lzdGVyZWQgd2l0aCB2cGZlLlxuIiwKLQkJY2NkY19od19kZXYubmFtZSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZG02NDR4X2NjZGNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGRtNjQ0eF9jY2RjX2V4aXQodm9pZCkKIHsKLQl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZG02NDR4X2NjZGNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZG02NDR4X2NjZGNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvaXNpZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2lzaWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWMyOWM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2lzaWYuYwpAQCAtMCwwICsxLDExNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogSW1hZ2UgU2Vuc29yIEludGVyZmFjZSAoSVNJRikgZHJpdmVyCisgKgorICogVGhpcyBkcml2ZXIgaXMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBJU0lGIElQIGF2YWlsYWJsZSBvbiBETTM2NSBvciBhbnkgb3RoZXIKKyAqIFRJIFNvQ3MuIFRoaXMgaXMgdXNlZCBmb3IgY2FwdHVyaW5nIHl1diBvciBiYXllciB2aWRlbyBvciBpbWFnZSBkYXRhCisgKiBmcm9tIGEgZGVjb2RlciBvciBzZW5zb3IuIFRoaXMgSVAgaXMgc2ltaWxhciB0byB0aGUgQ0NEQyBJUCBvbiBETTM1NQorICogYW5kIERNNjQ0NiwgYnV0IHdpdGggZW5oYW5jZWQgb3IgYWRkaXRpb25hbCBpcCBibG9ja3MuIFRoZSBkcml2ZXIKKyAqIGNvbmZpZ3VyZXMgdGhlIElTSUYgdXBvbiBjb21tYW5kcyBmcm9tIHRoZSB2cGZlIGJyaWRnZSBkcml2ZXIgdGhyb3VnaAorICogY2NkY19od19kZXZpY2UgaW50ZXJmYWNlLgorICoKKyAqIFRPRE86IDEpIFJhdyBiYXllciBwYXJhbWV0ZXIgc2V0dGluZ3MgYW5kIGJheWVyIGNhcHR1cmUKKyAqCSAyKSBBZGQgc3VwcG9ydCBmb3IgY29udHJvbCBpb2N0bAorICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CisKKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL2lzaWYuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3Zwc3MuaD4KKworI2luY2x1ZGUgImlzaWZfcmVncy5oIgorI2luY2x1ZGUgImNjZGNfaHdfZGV2aWNlLmgiCisKKy8qIERlZmF1bHRzIGZvciBtb2R1bGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCitzdGF0aWMgc3RydWN0IGlzaWZfY29uZmlnX3BhcmFtc19yYXcgaXNpZl9jb25maWdfZGVmYXVsdHMgPSB7CisJLmxpbmVhcml6ZSA9IHsKKwkJLmVuID0gMCwKKwkJLmNvcnJfc2hmdCA9IElTSUZfTk9fU0hJRlQsCisJCS5zY2FsZV9mYWN0ID0gezEsIDB9LAorCX0sCisJLmRmX2NzYyA9IHsKKwkJLmRmX29yX2NzYyA9IDAsCisJCS5jc2MgPSB7CisJCQkuZW4gPSAwLAorCQl9LAorCX0sCisJLmRmYyA9IHsKKwkJLmVuID0gMCwKKwl9LAorCS5iY2xhbXAgPSB7CisJCS5lbiA9IDAsCisJfSwKKwkuZ2Fpbl9vZmZzZXQgPSB7CisJCS5nYWluID0geworCQkJLnJfeWUgPSB7MSwgMH0sCisJCQkuZ3JfY3kgPSB7MSwgMH0sCisJCQkuZ2JfZyA9IHsxLCAwfSwKKwkJCS5iX21nID0gezEsIDB9LAorCQl9LAorCX0sCisJLmN1bGxpbmcgPSB7CisJCS5oY3BhdF9vZGQgPSAweGZmLAorCQkuaGNwYXRfZXZlbiA9IDB4ZmYsCisJCS52Y3BhdCA9IDB4ZmYsCisJfSwKKwkuY29tcHJlc3MgPSB7CisJCS5hbGcgPSBJU0lGX0FMQVcsCisJfSwKK307CisKKy8qIElTSUYgb3BlcmF0aW9uIGNvbmZpZ3VyYXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgaXNpZl9vcGVyX2NvbmZpZyB7CisJc3RydWN0IGRldmljZSAqZGV2OworCWVudW0gdnBmZV9od19pZl90eXBlIGlmX3R5cGU7CisJc3RydWN0IGlzaWZfeWNiY3JfY29uZmlnIHljYmNyOworCXN0cnVjdCBpc2lmX3BhcmFtc19yYXcgYmF5ZXI7CisJZW51bSBpc2lmX2RhdGFfcGFjayBkYXRhX3BhY2s7CisJLyogTWFzdGVyIGNsb2NrICovCisJc3RydWN0IGNsayAqbWNsazsKKwkvKiBJU0lGIGJhc2UgYWRkcmVzcyAqLworCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOworCS8qIElTSUYgTGluZWFyIFRhYmxlIDAgKi8KKwl2b2lkIF9faW9tZW0gKmxpbmVhcl90YmwwX2FkZHI7CisJLyogSVNJRiBMaW5lYXIgVGFibGUgMSAqLworCXZvaWQgX19pb21lbSAqbGluZWFyX3RibDFfYWRkcjsKK30gaXNpZl9jZmcgPSB7CisJLnljYmNyID0geworCQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzhCSVQsCisJCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCwKKwkJLndpbiA9IElTSUZfV0lOX05UU0MsCisJCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlksCisJCS5idWZfdHlwZSA9IENDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQsCisJfSwKKwkuYmF5ZXIgPSB7CisJCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXLAorCQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX1BST0dSRVNTSVZFLAorCQkud2luID0gSVNJRl9XSU5fVkdBLAorCQkuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmdhaW4gPSB7CisJCQkucl95ZSA9IHsxLCAwfSwKKwkJCS5ncl9jeSA9IHsxLCAwfSwKKwkJCS5nYl9nID0gezEsIDB9LAorCQkJLmJfbWcgPSB7MSwgMH0sCisJCX0sCisJCS5jZmFfcGF0ID0gSVNJRl9DRkFfUEFUX01PU0FJQywKKwkJLmRhdGFfbXNiID0gSVNJRl9CSVRfTVNCXzExLAorCQkuY29uZmlnX3BhcmFtcyA9IHsKKwkJCS5kYXRhX3NoaWZ0ID0gSVNJRl9OT19TSElGVCwKKwkJCS5jb2xfcGF0X2ZpZWxkMCA9IHsKKwkJCQkub2xvcCA9IElTSUZfR1JFRU5fQkxVRSwKKwkJCQkub2xlcCA9IElTSUZfQkxVRSwKKwkJCQkuZWxvcCA9IElTSUZfUkVELAorCQkJCS5lbGVwID0gSVNJRl9HUkVFTl9SRUQsCisJCQl9LAorCQkJLmNvbF9wYXRfZmllbGQxID0geworCQkJCS5vbG9wID0gSVNJRl9HUkVFTl9CTFVFLAorCQkJCS5vbGVwID0gSVNJRl9CTFVFLAorCQkJCS5lbG9wID0gSVNJRl9SRUQsCisJCQkJLmVsZXAgPSBJU0lGX0dSRUVOX1JFRCwKKwkJCX0sCisJCQkudGVzdF9wYXRfZ2VuID0gMCwKKwkJfSwKKwl9LAorCS5kYXRhX3BhY2sgPSBJU0lGX0RBVEFfUEFDSzgsCit9OworCisvKiBSYXcgQmF5ZXIgZm9ybWF0cyAqLworc3RhdGljIGNvbnN0IHUzMiBpc2lmX3Jhd19iYXllcl9waXhfZm9ybWF0c1tdID0geworCVY0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfUElYX0ZNVF9TQkdHUjE2fTsKKworLyogUmF3IFlVViBmb3JtYXRzICovCitzdGF0aWMgY29uc3QgdTMyIGlzaWZfcmF3X3l1dl9waXhfZm9ybWF0c1tdID0geworCVY0TDJfUElYX0ZNVF9VWVZZLCBWNEwyX1BJWF9GTVRfWVVZVn07CisKKy8qIHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcyAqLworc3RhdGljIGlubGluZSB1MzIgcmVncih1MzIgb2Zmc2V0KQoreworCXJldHVybiBfX3Jhd19yZWFkbChpc2lmX2NmZy5iYXNlX2FkZHIgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVndyh1MzIgdmFsLCB1MzIgb2Zmc2V0KQoreworCV9fcmF3X3dyaXRlbCh2YWwsIGlzaWZfY2ZnLmJhc2VfYWRkciArIG9mZnNldCk7Cit9CisKKy8qIHJlZ19tb2RpZnkoKSAtIHJlYWQsIG1vZGlmeSBhbmQgd3JpdGUgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHJlZ19tb2RpZnkodTMyIG1hc2ssIHUzMiB2YWwsIHUzMiBvZmZzZXQpCit7CisJdTMyIG5ld192YWwgPSAocmVncihvZmZzZXQpICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOworCisJcmVndyhuZXdfdmFsLCBvZmZzZXQpOworCXJldHVybiBuZXdfdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVnd19saW5fdGJsKHUzMiB2YWwsIHUzMiBvZmZzZXQsIGludCBpKQoreworCWlmICghaSkKKwkJX19yYXdfd3JpdGVsKHZhbCwgaXNpZl9jZmcubGluZWFyX3RibDBfYWRkciArIG9mZnNldCk7CisJZWxzZQorCQlfX3Jhd193cml0ZWwodmFsLCBpc2lmX2NmZy5saW5lYXJfdGJsMV9hZGRyICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgaXNpZl9kaXNhYmxlX2FsbF9tb2R1bGVzKHZvaWQpCit7CisJLyogZGlzYWJsZSBCQyAqLworCXJlZ3coMCwgQ0xBTVBDRkcpOworCS8qIGRpc2FibGUgdmRmYyAqLworCXJlZ3coMCwgREZDQ1RMKTsKKwkvKiBkaXNhYmxlIENTQyAqLworCXJlZ3coMCwgQ1NDQ1RMKTsKKwkvKiBkaXNhYmxlIGxpbmVhcml6YXRpb24gKi8KKwlyZWd3KDAsIExJTkNGRzApOworCS8qIGRpc2FibGUgb3RoZXIgbW9kdWxlcyBoZXJlIGFzIHRoZXkgYXJlIHN1cHBvcnRlZCAqLworfQorCitzdGF0aWMgdm9pZCBpc2lmX2VuYWJsZShpbnQgZW4pCit7CisJaWYgKCFlbikgeworCQkvKiBCZWZvcmUgZGlzYWJsZSBpc2lmLCBkaXNhYmxlIGFsbCBJU0lGIG1vZHVsZXMgKi8KKwkJaXNpZl9kaXNhYmxlX2FsbF9tb2R1bGVzKCk7CisJCS8qCisJCSAqIHdhaXQgZm9yIG5leHQgVkQuIEFzc3VtZSBsb3dlc3Qgc2NhbiByYXRlIGlzIDEyIEh6LiBTbworCQkgKiAxMDAgbXNlYyBkZWxheSBpcyBnb29kIGVub3VnaAorCQkgKi8KKwkJbXNsZWVwKDEwMCk7CisJfQorCXJlZ19tb2RpZnkoSVNJRl9TWU5DRU5fVkRIREVOX01BU0ssIGVuLCBTWU5DRU4pOworfQorCitzdGF0aWMgdm9pZCBpc2lmX2VuYWJsZV9vdXRwdXRfdG9fc2RyYW0oaW50IGVuKQoreworCXJlZ19tb2RpZnkoSVNJRl9TWU5DRU5fV0VOX01BU0ssIGVuIDw8IElTSUZfU1lOQ0VOX1dFTl9TSElGVCwgU1lOQ0VOKTsKK30KKworc3RhdGljIHZvaWQgaXNpZl9jb25maWdfY3VsbGluZyhzdHJ1Y3QgaXNpZl9jdWwgKmN1bCkKK3sKKwl1MzIgdmFsOworCisJLyogSG9yaXpvbnRhbCBwYXR0ZXJuICovCisJdmFsID0gKGN1bC0+aGNwYXRfZXZlbiA8PCBDVUxMX1BBVF9FVkVOX0xJTkVfU0hJRlQpIHwgY3VsLT5oY3BhdF9vZGQ7CisJcmVndyh2YWwsIENVTEgpOworCisJLyogdmVydGljYWwgcGF0dGVybiAqLworCXJlZ3coY3VsLT52Y3BhdCwgQ1VMVik7CisKKwkvKiBMUEYgKi8KKwlyZWdfbW9kaWZ5KElTSUZfTFBGX01BU0sgPDwgSVNJRl9MUEZfU0hJRlQsCisJCSAgY3VsLT5lbl9scGYgPDwgSVNJRl9MUEZfU0hJRlQsIE1PREVTRVQpOworfQorCitzdGF0aWMgdm9pZCBpc2lmX2NvbmZpZ19nYWluX29mZnNldCh2b2lkKQoreworCXN0cnVjdCBpc2lmX2dhaW5fb2Zmc2V0c19hZGogKmdhaW5fb2ZmX3AgPQorCQkmaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5nYWluX29mZnNldDsKKwl1MzIgdmFsOworCisJdmFsID0gKCEhZ2Fpbl9vZmZfcC0+Z2Fpbl9zZHJhbV9lbiA8PCBHQUlOX1NEUkFNX0VOX1NISUZUKSB8CisJICAgICAgKCEhZ2Fpbl9vZmZfcC0+Z2Fpbl9pcGlwZV9lbiA8PCBHQUlOX0lQSVBFX0VOX1NISUZUKSB8CisJICAgICAgKCEhZ2Fpbl9vZmZfcC0+Z2Fpbl9oM2FfZW4gPDwgR0FJTl9IM0FfRU5fU0hJRlQpIHwKKwkgICAgICAoISFnYWluX29mZl9wLT5vZmZzZXRfc2RyYW1fZW4gPDwgT0ZTVF9TRFJBTV9FTl9TSElGVCkgfAorCSAgICAgICghIWdhaW5fb2ZmX3AtPm9mZnNldF9pcGlwZV9lbiA8PCBPRlNUX0lQSVBFX0VOX1NISUZUKSB8CisJICAgICAgKCEhZ2Fpbl9vZmZfcC0+b2Zmc2V0X2gzYV9lbiA8PCBPRlNUX0gzQV9FTl9TSElGVCk7CisKKwlyZWdfbW9kaWZ5KEdBSU5fT0ZGU0VUX0VOX01BU0ssIHZhbCwgQ0dBTU1BV0QpOworCisJdmFsID0gKGdhaW5fb2ZmX3AtPmdhaW4ucl95ZS5pbnRlZ2VyIDw8IEdBSU5fSU5URUdFUl9TSElGVCkgfAorCSAgICAgICBnYWluX29mZl9wLT5nYWluLnJfeWUuZGVjaW1hbDsKKwlyZWd3KHZhbCwgQ1JHQUlOKTsKKworCXZhbCA9IChnYWluX29mZl9wLT5nYWluLmdyX2N5LmludGVnZXIgPDwgR0FJTl9JTlRFR0VSX1NISUZUKSB8CisJICAgICAgIGdhaW5fb2ZmX3AtPmdhaW4uZ3JfY3kuZGVjaW1hbDsKKwlyZWd3KHZhbCwgQ0dSR0FJTik7CisKKwl2YWwgPSAoZ2Fpbl9vZmZfcC0+Z2Fpbi5nYl9nLmludGVnZXIgPDwgR0FJTl9JTlRFR0VSX1NISUZUKSB8CisJICAgICAgIGdhaW5fb2ZmX3AtPmdhaW4uZ2JfZy5kZWNpbWFsOworCXJlZ3codmFsLCBDR0JHQUlOKTsKKworCXZhbCA9IChnYWluX29mZl9wLT5nYWluLmJfbWcuaW50ZWdlciA8PCBHQUlOX0lOVEVHRVJfU0hJRlQpIHwKKwkgICAgICAgZ2Fpbl9vZmZfcC0+Z2Fpbi5iX21nLmRlY2ltYWw7CisJcmVndyh2YWwsIENCR0FJTik7CisKKwlyZWd3KGdhaW5fb2ZmX3AtPm9mZnNldCwgQ09GU1RBKTsKK30KKworc3RhdGljIHZvaWQgaXNpZl9yZXN0b3JlX2RlZmF1bHRzKHZvaWQpCit7CisJZW51bSB2cHNzX2NjZGNfc291cmNlX3NlbCBzb3VyY2UgPSBWUFNTX0NDRENJTjsKKworCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiXG5zdGFydGluZyBpc2lmX3Jlc3RvcmVfZGVmYXVsdHMuLi4iKTsKKwlpc2lmX2NmZy5iYXllci5jb25maWdfcGFyYW1zID0gaXNpZl9jb25maWdfZGVmYXVsdHM7CisJLyogRW5hYmxlIGNsb2NrIHRvIElTSUYsIElQSVBFSUYgYW5kIEJMICovCisJdnBzc19lbmFibGVfY2xvY2soVlBTU19DQ0RDX0NMT0NLLCAxKTsKKwl2cHNzX2VuYWJsZV9jbG9jayhWUFNTX0lQSVBFSUZfQ0xPQ0ssIDEpOworCXZwc3NfZW5hYmxlX2Nsb2NrKFZQU1NfQkxfQ0xPQ0ssIDEpOworCS8qIFNldCBkZWZhdWx0IG9mZnNldCBhbmQgZ2FpbiAqLworCWlzaWZfY29uZmlnX2dhaW5fb2Zmc2V0KCk7CisJdnBzc19zZWxlY3RfY2NkY19zb3VyY2Uoc291cmNlKTsKKwlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIlxuRW5kIG9mIGlzaWZfcmVzdG9yZV9kZWZhdWx0cy4uLiIpOworfQorCitzdGF0aWMgaW50IGlzaWZfb3BlbihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJaXNpZl9yZXN0b3JlX2RlZmF1bHRzKCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gd2lsbCBjb25maWd1cmUgdGhlIHdpbmRvdyBzaXplIHRvIGJlIGNhcHR1cmUgaW4gSVNJRiByZWcgKi8KK3N0YXRpYyB2b2lkIGlzaWZfc2V0d2luKHN0cnVjdCB2NGwyX3JlY3QgKmltYWdlX3dpbiwKKwkJCWVudW0gY2NkY19mcm1mbXQgZnJtX2ZtdCwgaW50IHBwYykKK3sKKwlpbnQgaG9yel9zdGFydCwgaG9yel9ucl9waXhlbHM7CisJaW50IHZlcnRfc3RhcnQsIHZlcnRfbnJfbGluZXM7CisJaW50IG1pZF9pbWcgPSAwOworCisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJcblN0YXJ0aW5nIGlzaWZfc2V0d2luLi4uIik7CisJLyoKKwkgKiBwcGMgLSBwZXIgcGl4ZWwgY291bnQuIGluZGljYXRlcyBob3cgbWFueSBwaXhlbHMgcGVyIGNlbGwKKwkgKiBvdXRwdXQgdG8gU0RSQU0uIGV4YW1wbGUsIGZvciB5Y2JjciwgaXQgaXMgb25lIHkgYW5kIG9uZSBjLCBzbyAyLgorCSAqIHJhdyBjYXB0dXJlIHRoaXMgaXMgMQorCSAqLworCWhvcnpfc3RhcnQgPSBpbWFnZV93aW4tPmxlZnQgPDwgKHBwYyAtIDEpOworCWhvcnpfbnJfcGl4ZWxzID0gKChpbWFnZV93aW4tPndpZHRoKSA8PCAocHBjIC0gMSkpIC0gMTsKKworCS8qIFdyaXRpbmcgdGhlIGhvcml6b250YWwgaW5mbyBpbnRvIHRoZSByZWdpc3RlcnMgKi8KKwlyZWd3KGhvcnpfc3RhcnQgJiBTVEFSVF9QWF9IT1JfTUFTSywgU1BIKTsKKwlyZWd3KGhvcnpfbnJfcGl4ZWxzICYgTlVNX1BYX0hPUl9NQVNLLCBMTkgpOworCXZlcnRfc3RhcnQgPSBpbWFnZV93aW4tPnRvcDsKKworCWlmIChmcm1fZm10ID09IENDRENfRlJNRk1UX0lOVEVSTEFDRUQpIHsKKwkJdmVydF9ucl9saW5lcyA9IChpbWFnZV93aW4tPmhlaWdodCA+PiAxKSAtIDE7CisJCXZlcnRfc3RhcnQgPj49IDE7CisJCS8qIFRvIGFjY291bnQgZm9yIFZEIHNpbmNlIGxpbmUgMCBkb2Vzbid0IGhhdmUgYW55IGRhdGEgKi8KKwkJdmVydF9zdGFydCArPSAxOworCX0gZWxzZSB7CisJCS8qIFRvIGFjY291bnQgZm9yIFZEIHNpbmNlIGxpbmUgMCBkb2Vzbid0IGhhdmUgYW55IGRhdGEgKi8KKwkJdmVydF9zdGFydCArPSAxOworCQl2ZXJ0X25yX2xpbmVzID0gaW1hZ2Vfd2luLT5oZWlnaHQgLSAxOworCQkvKiBjb25maWd1cmUgVkRJTlQwIGFuZCBWRElOVDEgKi8KKwkJbWlkX2ltZyA9IHZlcnRfc3RhcnQgKyAoaW1hZ2Vfd2luLT5oZWlnaHQgLyAyKTsKKwkJcmVndyhtaWRfaW1nLCBWRElOVDEpOworCX0KKworCXJlZ3coMCwgVkRJTlQwKTsKKwlyZWd3KHZlcnRfc3RhcnQgJiBTVEFSVF9WRVJfT05FX01BU0ssIFNMVjApOworCXJlZ3codmVydF9zdGFydCAmIFNUQVJUX1ZFUl9UV09fTUFTSywgU0xWMSk7CisJcmVndyh2ZXJ0X25yX2xpbmVzICYgTlVNX0xJTkVTX1ZFUiwgTE5WKTsKK30KKworc3RhdGljIHZvaWQgaXNpZl9jb25maWdfYmNsYW1wKHN0cnVjdCBpc2lmX2JsYWNrX2NsYW1wICpiYykKK3sKKwl1MzIgdmFsOworCisJLyoKKwkgKiBEQyBPZmZzZXQgaXMgYWx3YXlzIGFkZGVkIHRvIGltYWdlIGRhdGEgaXJyZXNwZWN0aXZlIG9mIGJjIGVuYWJsZQorCSAqIHN0YXR1cworCSAqLworCXJlZ3coYmMtPmRjX29mZnNldCwgQ0xEQ09GU1QpOworCisJaWYgKGJjLT5lbikgeworCQl2YWwgPSBiYy0+YmNfbW9kZV9jb2xvciA8PCBJU0lGX0JDX01PREVfQ09MT1JfU0hJRlQ7CisKKwkJLyogRW5hYmxlIEJDIGFuZCBob3Jpem9udGFsIGNsYW1wIGNhY3VsYXRpb24gcGFyYW1hdGVycyAqLworCQl2YWwgPSB2YWwgfCAxIHwgKGJjLT5ob3J6Lm1vZGUgPDwgSVNJRl9IT1JaX0JDX01PREVfU0hJRlQpOworCisJCXJlZ3codmFsLCBDTEFNUENGRyk7CisKKwkJaWYgKGJjLT5ob3J6Lm1vZGUgIT0gSVNJRl9IT1JaX0JDX0RJU0FCTEUpIHsKKwkJCS8qCisJCQkgKiBXaW5kb3cgY291bnQgZm9yIGNhbGN1bGF0aW9uCisJCQkgKiBCYXNlIHdpbmRvdyBzZWxlY3Rpb24KKwkJCSAqIHBpeGVsIGxpbWl0CisJCQkgKiBIb3Jpem9udGFsIHNpemUgb2Ygd2luZG93CisJCQkgKiB2ZXJ0aWNhbCBzaXplIG9mIHRoZSB3aW5kb3cKKwkJCSAqIEhvcml6b250YWwgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHdpbmRvdworCQkJICogVmVydGljYWwgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHdpbmRvdworCQkJICovCisJCQl2YWwgPSBiYy0+aG9yei53aW5fY291bnRfY2FsYyB8CisJCQkgICAgICAoKCEhYmMtPmhvcnouYmFzZV93aW5fc2VsX2NhbGMpIDw8CisJCQkJSVNJRl9IT1JaX0JDX1dJTl9TRUxfU0hJRlQpIHwKKwkJCSAgICAgICgoISFiYy0+aG9yei5jbGFtcF9waXhfbGltaXQpIDw8CisJCQkJSVNJRl9IT1JaX0JDX1BJWF9MSU1JVF9TSElGVCkgfAorCQkJICAgICAgKGJjLT5ob3J6Lndpbl9oX3N6X2NhbGMgPDwKKwkJCQlJU0lGX0hPUlpfQkNfV0lOX0hfU0laRV9TSElGVCkgfAorCQkJICAgICAgKGJjLT5ob3J6Lndpbl92X3N6X2NhbGMgPDwKKwkJCQlJU0lGX0hPUlpfQkNfV0lOX1ZfU0laRV9TSElGVCk7CisJCQlyZWd3KHZhbCwgQ0xIV0lOMCk7CisKKwkJCXJlZ3coYmMtPmhvcnoud2luX3N0YXJ0X2hfY2FsYywgQ0xIV0lOMSk7CisJCQlyZWd3KGJjLT5ob3J6Lndpbl9zdGFydF92X2NhbGMsIENMSFdJTjIpOworCQl9CisKKwkJLyogdmVydGljYWwgY2xhbXAgY2FjdWxhdGlvbiBwYXJhbWF0ZXJzICovCisKKwkJLyogUmVzZXQgY2xhbXAgdmFsdWUgc2VsIGZvciBwcmV2aW91cyBsaW5lICovCisJCXZhbCB8PQorCQkoYmMtPnZlcnQucmVzZXRfdmFsX3NlbCA8PCBJU0lGX1ZFUlRfQkNfUlNUX1ZBTF9TRUxfU0hJRlQpIHwKKwkJKGJjLT52ZXJ0LmxpbmVfYXZlX2NvZWYgPDwgSVNJRl9WRVJUX0JDX0xJTkVfQVZFX0NPRUZfU0hJRlQpOworCQlyZWd3KHZhbCwgQ0xWV0lOMCk7CisKKwkJLyogT3B0aWNhbCBCbGFjayBob3Jpem9udGFsIHN0YXJ0IHBvc2l0aW9uICovCisJCXJlZ3coYmMtPnZlcnQub2Jfc3RhcnRfaCwgQ0xWV0lOMSk7CisJCS8qIE9wdGljYWwgQmxhY2sgdmVydGljYWwgc3RhcnQgcG9zaXRpb24gKi8KKwkJcmVndyhiYy0+dmVydC5vYl9zdGFydF92LCBDTFZXSU4yKTsKKwkJLyogT3B0aWNhbCBCbGFjayB2ZXJ0aWNhbCBzaXplIGZvciBjYWxjdWxhdGlvbiAqLworCQlyZWd3KGJjLT52ZXJ0Lm9iX3Zfc3pfY2FsYywgQ0xWV0lOMyk7CisJCS8qIFZlcnRpY2FsIHN0YXJ0IHBvc2l0aW9uIGZvciBCQyBzdWJ0cmFjdGlvbiAqLworCQlyZWd3KGJjLT52ZXJ0X3N0YXJ0X3N1YiwgQ0xTVik7CisJfQorfQorCitzdGF0aWMgdm9pZCBpc2lmX2NvbmZpZ19saW5lYXJpemF0aW9uKHN0cnVjdCBpc2lmX2xpbmVhcml6ZSAqbGluZWFyaXplKQoreworCXUzMiB2YWwsIGk7CisKKwlpZiAoIWxpbmVhcml6ZS0+ZW4pIHsKKwkJcmVndygwLCBMSU5DRkcwKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHNoaWZ0IHZhbHVlIGZvciBjb3JyZWN0aW9uICYgZW5hYmxlIGxpbmVhcml6YXRpb24gKHNldCBsc2IpICovCisJdmFsID0gKGxpbmVhcml6ZS0+Y29ycl9zaGZ0IDw8IElTSUZfTElOX0NPUlJTRlRfU0hJRlQpIHwgMTsKKwlyZWd3KHZhbCwgTElOQ0ZHMCk7CisKKwkvKiBTY2FsZSBmYWN0b3IgKi8KKwl2YWwgPSAoKCEhbGluZWFyaXplLT5zY2FsZV9mYWN0LmludGVnZXIpIDw8CisJICAgICAgIElTSUZfTElOX1NDQUxFX0ZBQ1RfSU5URUdfU0hJRlQpIHwKKwkgICAgICAgbGluZWFyaXplLT5zY2FsZV9mYWN0LmRlY2ltYWw7CisJcmVndyh2YWwsIExJTkNGRzEpOworCisJZm9yIChpID0gMDsgaSA8IElTSUZfTElORUFSX1RBQl9TSVpFOyBpKyspIHsKKwkJaWYgKGkgJSAyKQorCQkJcmVnd19saW5fdGJsKGxpbmVhcml6ZS0+dGFibGVbaV0sICgoaSA+PiAxKSA8PCAyKSwgMSk7CisJCWVsc2UKKwkJCXJlZ3dfbGluX3RibChsaW5lYXJpemUtPnRhYmxlW2ldLCAoKGkgPj4gMSkgPDwgMiksIDApOworCX0KK30KKworc3RhdGljIGludCBpc2lmX2NvbmZpZ19kZmMoc3RydWN0IGlzaWZfZGZjICp2ZGZjKQoreworCS8qIGluaXRpYWxpemUgcmV0cmllcyB0byBsb29wIGZvciBtYXggfiAyNTAgdXNlYyAqLworCXUzMiB2YWwsIGNvdW50LCByZXRyaWVzID0gbG9vcHNfcGVyX2ppZmZ5IC8gKDQwMDAvSFopOworCWludCBpOworCisJaWYgKCF2ZGZjLT5lbikKKwkJcmV0dXJuIDA7CisKKwkvKiBDb3JyZWN0aW9uIG1vZGUgKi8KKwl2YWwgPSAodmRmYy0+Y29ycl9tb2RlIDw8IElTSUZfVkRGQ19DT1JSX01PRF9TSElGVCk7CisKKwkvKiBDb3JyZWN0IHdob2xlIGxpbmUgb3IgcGFydGlhbCAqLworCWlmICh2ZGZjLT5jb3JyX3dob2xlX2xpbmUpCisJCXZhbCB8PSAxIDw8IElTSUZfVkRGQ19DT1JSX1dIT0xFX0xOX1NISUZUOworCisJLyogbGV2ZWwgc2hpZnQgdmFsdWUgKi8KKwl2YWwgfD0gdmRmYy0+ZGVmX2xldmVsX3NoaWZ0IDw8IElTSUZfVkRGQ19MRVZFTF9TSEZUX1NISUZUOworCisJcmVndyh2YWwsIERGQ0NUTCk7CisKKwkvKiBEZWZlY3Qgc2F0dXJhdGlvbiBsZXZlbCAqLworCXJlZ3codmRmYy0+ZGVmX3NhdF9sZXZlbCwgVkRGU0FUTFYpOworCisJcmVndyh2ZGZjLT50YWJsZVswXS5wb3NfdmVydCwgREZDTUVNMCk7CisJcmVndyh2ZGZjLT50YWJsZVswXS5wb3NfaG9yeiwgREZDTUVNMSk7CisJaWYgKHZkZmMtPmNvcnJfbW9kZSA9PSBJU0lGX1ZERkNfTk9STUFMIHx8CisJICAgIHZkZmMtPmNvcnJfbW9kZSA9PSBJU0lGX1ZERkNfSE9SWl9JTlRFUlBPTF9JRl9TQVQpIHsKKwkJcmVndyh2ZGZjLT50YWJsZVswXS5sZXZlbF9hdF9wb3MsIERGQ01FTTIpOworCQlyZWd3KHZkZmMtPnRhYmxlWzBdLmxldmVsX3VwX3BpeGVscywgREZDTUVNMyk7CisJCXJlZ3codmRmYy0+dGFibGVbMF0ubGV2ZWxfbG93X3BpeGVscywgREZDTUVNNCk7CisJfQorCisJLyogc2V0IERGQ01BUlNUIGFuZCBzZXQgREZDTVdSICovCisJdmFsID0gcmVncihERkNNRU1DVEwpIHwgKDEgPDwgSVNJRl9ERkNNRU1DVExfREZDTUFSU1RfU0hJRlQpIHwgMTsKKwlyZWd3KHZhbCwgREZDTUVNQ1RMKTsKKworCWNvdW50ID0gcmV0cmllczsKKwl3aGlsZSAoY291bnQgJiYgKHJlZ3IoREZDTUVNQ1RMKSAmIDB4MSkpCisJCWNvdW50LS07CisKKwlpZiAoIWNvdW50KSB7CisJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiZGVmZWN0IHRhYmxlIHdyaXRlIHRpbWVvdXQgISEhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZvciAoaSA9IDE7IGkgPCB2ZGZjLT5udW1fdmRlZmVjdHM7IGkrKykgeworCQlyZWd3KHZkZmMtPnRhYmxlW2ldLnBvc192ZXJ0LCBERkNNRU0wKTsKKwkJcmVndyh2ZGZjLT50YWJsZVtpXS5wb3NfaG9yeiwgREZDTUVNMSk7CisJCWlmICh2ZGZjLT5jb3JyX21vZGUgPT0gSVNJRl9WREZDX05PUk1BTCB8fAorCQkgICAgdmRmYy0+Y29ycl9tb2RlID09IElTSUZfVkRGQ19IT1JaX0lOVEVSUE9MX0lGX1NBVCkgeworCQkJcmVndyh2ZGZjLT50YWJsZVtpXS5sZXZlbF9hdF9wb3MsIERGQ01FTTIpOworCQkJcmVndyh2ZGZjLT50YWJsZVtpXS5sZXZlbF91cF9waXhlbHMsIERGQ01FTTMpOworCQkJcmVndyh2ZGZjLT50YWJsZVtpXS5sZXZlbF9sb3dfcGl4ZWxzLCBERkNNRU00KTsKKwkJfQorCQl2YWwgPSByZWdyKERGQ01FTUNUTCk7CisJCS8qIGNsZWFyIERGQ01BUlNUIGFuZCBzZXQgREZDTVdSICovCisJCXZhbCAmPSB+QklUKElTSUZfREZDTUVNQ1RMX0RGQ01BUlNUX1NISUZUKTsKKwkJdmFsIHw9IDE7CisJCXJlZ3codmFsLCBERkNNRU1DVEwpOworCisJCWNvdW50ID0gcmV0cmllczsKKwkJd2hpbGUgKGNvdW50ICYmIChyZWdyKERGQ01FTUNUTCkgJiAweDEpKQorCQkJY291bnQtLTsKKworCQlpZiAoIWNvdW50KSB7CisJCQlkZXZfZXJyKGlzaWZfY2ZnLmRldiwKKwkJCQkiZGVmZWN0IHRhYmxlIHdyaXRlIHRpbWVvdXQgISEhXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlpZiAodmRmYy0+bnVtX3ZkZWZlY3RzIDwgSVNJRl9WREZDX1RBQkxFX1NJWkUpIHsKKwkJLyogRXh0cmEgY3ljbGUgbmVlZGVkICovCisJCXJlZ3coMCwgREZDTUVNMCk7CisJCXJlZ3coMHgxRkZGLCBERkNNRU0xKTsKKwkJcmVndygxLCBERkNNRU1DVEwpOworCX0KKworCS8qIGVuYWJsZSBWREZDICovCisJcmVnX21vZGlmeSgoMSA8PCBJU0lGX1ZERkNfRU5fU0hJRlQpLCAoMSA8PCBJU0lGX1ZERkNfRU5fU0hJRlQpLAorCQkgICBERkNDVEwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpc2lmX2NvbmZpZ19jc2Moc3RydWN0IGlzaWZfZGZfY3NjICpkZl9jc2MpCit7CisJdTMyIHZhbDEgPSAwLCB2YWwyID0gMCwgaTsKKworCWlmICghZGZfY3NjLT5jc2MuZW4pIHsKKwkJcmVndygwLCBDU0NDVEwpOworCQlyZXR1cm47CisJfQorCWZvciAoaSA9IDA7IGkgPCBJU0lGX0NTQ19OVU1fQ09FRkY7IGkrKykgeworCQlpZiAoKGkgJSAyKSA9PSAwKSB7CisJCQkvKiBDU0NNIC0gTFNCICovCisJCQl2YWwxID0gKGRmX2NzYy0+Y3NjLmNvZWZmW2ldLmludGVnZXIgPDwKKwkJCQlJU0lGX0NTQ19DT0VGX0lOVEVHX1NISUZUKSB8CisJCQkJZGZfY3NjLT5jc2MuY29lZmZbaV0uZGVjaW1hbDsKKwkJfSBlbHNlIHsKKworCQkJLyogQ1NDTSAtIE1TQiAqLworCQkJdmFsMiA9IChkZl9jc2MtPmNzYy5jb2VmZltpXS5pbnRlZ2VyIDw8CisJCQkJSVNJRl9DU0NfQ09FRl9JTlRFR19TSElGVCkgfAorCQkJCWRmX2NzYy0+Y3NjLmNvZWZmW2ldLmRlY2ltYWw7CisJCQl2YWwyIDw8PSBJU0lGX0NTQ01fTVNCX1NISUZUOworCQkJdmFsMiB8PSB2YWwxOworCQkJcmVndyh2YWwyLCAoQ1NDTTAgKyAoKGkgLSAxKSA8PCAxKSkpOworCQl9CisJfQorCisJLyogcHJvZ3JhbSB0aGUgYWN0aXZlIGFyZWEgKi8KKwlyZWd3KGRmX2NzYy0+c3RhcnRfcGl4LCBGTVRTUEgpOworCS8qCisJICogb25lIGV4dHJhIHBpeGVsIGFzIHJlcXVpcmVkIGZvciBDU0MuIEFjdHVhbGx5IG51bWJlciBvZgorCSAqIHBpeGVsIC0gMSBzaG91bGQgYmUgY29uZmlndXJlZCBpbiB0aGlzIHJlZ2lzdGVyLiBTbyB3ZQorCSAqIG5lZWQgdG8gc3VidHJhY3QgMSBiZWZvcmUgd3JpdGluZyB0byBGTVRTUEgsIGJ1dCB3ZSB3aWxsCisJICogbm90IGRvIHRoaXMgc2luY2UgY3NjIHJlcXVpcmVzIG9uZSBleHRyYSBwaXhlbAorCSAqLworCXJlZ3coZGZfY3NjLT5udW1fcGl4ZWxzLCBGTVRMTkgpOworCXJlZ3coZGZfY3NjLT5zdGFydF9saW5lLCBGTVRTTFYpOworCS8qCisJICogb25lIGV4dHJhIGxpbmUgYXMgcmVxdWlyZWQgZm9yIENTQy4gU2VlIHJlYXNvbiBkb2N1bWVudGVkIGZvcgorCSAqIG51bV9waXhlbHMKKwkgKi8KKwlyZWd3KGRmX2NzYy0+bnVtX2xpbmVzLCBGTVRMTlYpOworCisJLyogRW5hYmxlIENTQyAqLworCXJlZ3coMSwgQ1NDQ1RMKTsKK30KKworc3RhdGljIGludCBpc2lmX2NvbmZpZ19yYXcodm9pZCkKK3sKKwlzdHJ1Y3QgaXNpZl9wYXJhbXNfcmF3ICpwYXJhbXMgPSAmaXNpZl9jZmcuYmF5ZXI7CisJc3RydWN0IGlzaWZfY29uZmlnX3BhcmFtc19yYXcgKm1vZHVsZV9wYXJhbXMgPQorCQkmaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtczsKKwlzdHJ1Y3QgdnBzc19wZ19mcmFtZV9zaXplIGZyYW1lX3NpemU7CisJc3RydWN0IHZwc3Nfc3luY19wb2wgc3luYzsKKwl1MzIgdmFsOworCisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJcblN0YXJ0aW5nIGlzaWZfY29uZmlnX3Jhdy4uXG4iKTsKKworCS8qCisJICogQ29uZmlndXJlIENDRENGRyByZWdpc3RlcjotCisJICogU2V0IENDRCBOb3QgdG8gc3dhcCBpbnB1dCBzaW5jZSBpbnB1dCBpcyBSQVcgZGF0YQorCSAqIFNldCBGSUQgZGV0ZWN0aW9uIGZ1bmN0aW9uIHRvIExhdGNoIGF0IFYtU3luYworCSAqIFNldCBXRU5MT0cgLSBpc2lmIHZhbGlkIGFyZWEKKwkgKiBTZXQgVFJHU0VMCisJICogU2V0IEVYVFJHCisJICogUGFja2VkIHRvIDggb3IgMTYgYml0cworCSAqLworCisJdmFsID0gSVNJRl9ZQ0lOU1dQX1JBVyB8IElTSUZfQ0NEQ0ZHX0ZJRE1EX0xBVENIX1ZTWU5DIHwKKwkJSVNJRl9DQ0RDRkdfV0VOTE9HX0FORCB8IElTSUZfQ0NEQ0ZHX1RSR1NFTF9XRU4gfAorCQlJU0lGX0NDRENGR19FWFRSR19ESVNBQkxFIHwgaXNpZl9jZmcuZGF0YV9wYWNrOworCisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJXcml0aW5nIDB4JXggdG8gLi4uQ0NEQ0ZHIFxuIiwgdmFsKTsKKwlyZWd3KHZhbCwgQ0NEQ0ZHKTsKKworCS8qCisJICogQ29uZmlndXJlIHRoZSB2ZXJ0aWNhbCBzeW5jIHBvbGFyaXR5KE1PREVTRVQuVkRQT0wpCisJICogQ29uZmlndXJlIHRoZSBob3Jpem9udGFsIHN5bmMgcG9sYXJpdHkgKE1PREVTRVQuSERQT0wpCisJICogQ29uZmlndXJlIGZyYW1lIGlkIHBvbGFyaXR5IChNT0RFU0VULkZMRFBPTCkKKwkgKiBDb25maWd1cmUgZGF0YSBwb2xhcml0eQorCSAqIENvbmZpZ3VyZSBFeHRlcm5hbCBXRU4gU2VsZWN0aW9uCisJICogQ29uZmlndXJlIGZyYW1lIGZvcm1hdChwcm9ncmVzc2l2ZSBvciBpbnRlcmxhY2UpCisJICogQ29uZmlndXJlIHBpeGVsIGZvcm1hdCAoSW5wdXQgbW9kZSkKKwkgKiBDb25maWd1cmUgdGhlIGRhdGEgc2hpZnQKKwkgKi8KKworCXZhbCA9IElTSUZfVkRIRE9VVF9JTlBVVCB8IChwYXJhbXMtPnZkX3BvbCA8PCBJU0lGX1ZEX1BPTF9TSElGVCkgfAorCQkocGFyYW1zLT5oZF9wb2wgPDwgSVNJRl9IRF9QT0xfU0hJRlQpIHwKKwkJKHBhcmFtcy0+ZmlkX3BvbCA8PCBJU0lGX0ZJRF9QT0xfU0hJRlQpIHwKKwkJKElTSUZfREFUQVBPTF9OT1JNQUwgPDwgSVNJRl9EQVRBUE9MX1NISUZUKSB8CisJCShJU0lGX0VYV0VOX0RJU0FCTEUgPDwgSVNJRl9FWFdFTl9TSElGVCkgfAorCQkocGFyYW1zLT5mcm1fZm10IDw8IElTSUZfRlJNX0ZNVF9TSElGVCkgfAorCQkocGFyYW1zLT5waXhfZm10IDw8IElTSUZfSU5QVVRfU0hJRlQpIHwKKwkJKHBhcmFtcy0+Y29uZmlnX3BhcmFtcy5kYXRhX3NoaWZ0IDw8IElTSUZfREFUQVNGVF9TSElGVCk7CisKKwlyZWd3KHZhbCwgTU9ERVNFVCk7CisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJXcml0aW5nIDB4JXggdG8gTU9ERVNFVC4uLlxuIiwgdmFsKTsKKworCS8qCisJICogQ29uZmlndXJlIEdBTU1BV0QgcmVnaXN0ZXIKKwkgKiBDRkEgcGF0dGVybiBzZXR0aW5nCisJICovCisJdmFsID0gcGFyYW1zLT5jZmFfcGF0IDw8IElTSUZfR0FNTUFXRF9DRkFfU0hJRlQ7CisKKwkvKiBHYW1tYSBtc2IgKi8KKwlpZiAobW9kdWxlX3BhcmFtcy0+Y29tcHJlc3MuYWxnID09IElTSUZfQUxBVykKKwkJdmFsIHw9IElTSUZfQUxBV19FTkFCTEU7CisKKwl2YWwgfD0gKHBhcmFtcy0+ZGF0YV9tc2IgPDwgSVNJRl9BTEFXX0dBTUFfV0RfU0hJRlQpOworCXJlZ3codmFsLCBDR0FNTUFXRCk7CisKKwkvKiBDb25maWd1cmUgRFBDTSBjb21wcmVzc2lvbiBzZXR0aW5ncyAqLworCWlmIChtb2R1bGVfcGFyYW1zLT5jb21wcmVzcy5hbGcgPT0gSVNJRl9EUENNKSB7CisJCXZhbCA9ICBCSVQoSVNJRl9EUENNX0VOX1NISUZUKSB8CisJCSAgICAgICAobW9kdWxlX3BhcmFtcy0+Y29tcHJlc3MucHJlZCA8PAorCQkgICAgICAgSVNJRl9EUENNX1BSRURJQ1RPUl9TSElGVCk7CisJfQorCisJcmVndyh2YWwsIE1JU0MpOworCisJLyogQ29uZmlndXJlIEdhaW4gJiBPZmZzZXQgKi8KKwlpc2lmX2NvbmZpZ19nYWluX29mZnNldCgpOworCisJLyogQ29uZmlndXJlIENvbG9yIHBhdHRlcm4gKi8KKwl2YWwgPSAocGFyYW1zLT5jb25maWdfcGFyYW1zLmNvbF9wYXRfZmllbGQwLm9sb3ApIHwKKwkgICAgICAocGFyYW1zLT5jb25maWdfcGFyYW1zLmNvbF9wYXRfZmllbGQwLm9sZXAgPDwgMikgfAorCSAgICAgIChwYXJhbXMtPmNvbmZpZ19wYXJhbXMuY29sX3BhdF9maWVsZDAuZWxvcCA8PCA0KSB8CisJICAgICAgKHBhcmFtcy0+Y29uZmlnX3BhcmFtcy5jb2xfcGF0X2ZpZWxkMC5lbGVwIDw8IDYpIHwKKwkgICAgICAocGFyYW1zLT5jb25maWdfcGFyYW1zLmNvbF9wYXRfZmllbGQxLm9sb3AgPDwgOCkgfAorCSAgICAgIChwYXJhbXMtPmNvbmZpZ19wYXJhbXMuY29sX3BhdF9maWVsZDEub2xlcCA8PCAxMCkgfAorCSAgICAgIChwYXJhbXMtPmNvbmZpZ19wYXJhbXMuY29sX3BhdF9maWVsZDEuZWxvcCA8PCAxMikgfAorCSAgICAgIChwYXJhbXMtPmNvbmZpZ19wYXJhbXMuY29sX3BhdF9maWVsZDEuZWxlcCA8PCAxNCk7CisJcmVndyh2YWwsIENDT0xQKTsKKwlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIldyaXRpbmcgJXggdG8gQ0NPTFAgLi4uXG4iLCB2YWwpOworCisJLyogQ29uZmlndXJlIEhTSVpFIHJlZ2lzdGVyICAqLworCXZhbCA9ICghIXBhcmFtcy0+aG9yel9mbGlwX2VuKSA8PCBJU0lGX0hTSVpFX0ZMSVBfU0hJRlQ7CisKKwkvKiBjYWxjdWxhdGUgbGluZSBvZmZzZXQgaW4gMzIgYnl0ZXMgYmFzZWQgb24gcGFjayB2YWx1ZSAqLworCWlmIChpc2lmX2NmZy5kYXRhX3BhY2sgPT0gSVNJRl9QQUNLXzhCSVQpCisJCXZhbCB8PSAoKHBhcmFtcy0+d2luLndpZHRoICsgMzEpID4+IDUpOworCWVsc2UgaWYgKGlzaWZfY2ZnLmRhdGFfcGFjayA9PSBJU0lGX1BBQ0tfMTJCSVQpCisJCXZhbCB8PSAoKChwYXJhbXMtPndpbi53aWR0aCArCisJCSAgICAgICAocGFyYW1zLT53aW4ud2lkdGggPj4gMikpICsgMzEpID4+IDUpOworCWVsc2UKKwkJdmFsIHw9ICgoKHBhcmFtcy0+d2luLndpZHRoICogMikgKyAzMSkgPj4gNSk7CisJcmVndyh2YWwsIEhTSVpFKTsKKworCS8qIENvbmZpZ3VyZSBTRE9GU1QgcmVnaXN0ZXIgICovCisJaWYgKHBhcmFtcy0+ZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VEKSB7CisJCWlmIChwYXJhbXMtPmltYWdlX2ludmVydF9lbikgeworCQkJLyogRm9yIGludGVybGFjZSBpbnZlcnNlIG1vZGUgKi8KKwkJCXJlZ3coMHg0QjZELCBTRE9GU1QpOworCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJXcml0aW5nIDB4NEI2RCB0byBTRE9GU1QuLi5cbiIpOworCQl9IGVsc2UgeworCQkJLyogRm9yIGludGVybGFjZSBub24gaW52ZXJzZSBtb2RlICovCisJCQlyZWd3KDB4MEI2RCwgU0RPRlNUKTsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiV3JpdGluZyAweDBCNkQgdG8gU0RPRlNULi4uXG4iKTsKKwkJfQorCX0gZWxzZSBpZiAocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX1BST0dSRVNTSVZFKSB7CisJCWlmIChwYXJhbXMtPmltYWdlX2ludmVydF9lbikgeworCQkJLyogRm9yIHByb2dyZXNzaXZlIGludmVyc2UgbW9kZSAqLworCQkJcmVndygweDQwMDAsIFNET0ZTVCk7CisJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIldyaXRpbmcgMHg0MDAwIHRvIFNET0ZTVC4uLlxuIik7CisJCX0gZWxzZSB7CisJCQkvKiBGb3IgcHJvZ3Jlc3NpdmUgbm9uIGludmVyc2UgbW9kZSAqLworCQkJcmVndygweDAwMDAsIFNET0ZTVCk7CisJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIldyaXRpbmcgMHgwMDAwIHRvIFNET0ZTVC4uLlxuIik7CisJCX0KKwl9CisKKwkvKiBDb25maWd1cmUgdmlkZW8gd2luZG93ICovCisJaXNpZl9zZXR3aW4oJnBhcmFtcy0+d2luLCBwYXJhbXMtPmZybV9mbXQsIDEpOworCisJLyogQ29uZmlndXJlIEJsYWNrIENsYW1wICovCisJaXNpZl9jb25maWdfYmNsYW1wKCZtb2R1bGVfcGFyYW1zLT5iY2xhbXApOworCisJLyogQ29uZmlndXJlIFZlcnRpY2FsIERlZmVjdGlvbiBQaXhlbCBDb3JyZWN0aW9uICovCisJaWYgKGlzaWZfY29uZmlnX2RmYygmbW9kdWxlX3BhcmFtcy0+ZGZjKSA8IDApCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKCFtb2R1bGVfcGFyYW1zLT5kZl9jc2MuZGZfb3JfY3NjKQorCQkvKiBDb25maWd1cmUgQ29sb3IgU3BhY2UgQ29udmVyc2lvbiAqLworCQlpc2lmX2NvbmZpZ19jc2MoJm1vZHVsZV9wYXJhbXMtPmRmX2NzYyk7CisKKwlpc2lmX2NvbmZpZ19saW5lYXJpemF0aW9uKCZtb2R1bGVfcGFyYW1zLT5saW5lYXJpemUpOworCisJLyogQ29uZmlndXJlIEN1bGxpbmcgKi8KKwlpc2lmX2NvbmZpZ19jdWxsaW5nKCZtb2R1bGVfcGFyYW1zLT5jdWxsaW5nKTsKKworCS8qIENvbmZpZ3VyZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBvZmZzZXRzKERGQyxMU0MsR2FpbikgKi8KKwlyZWd3KG1vZHVsZV9wYXJhbXMtPmhvcnpfb2Zmc2V0LCBEQVRBSE9GU1QpOworCXJlZ3cobW9kdWxlX3BhcmFtcy0+dmVydF9vZmZzZXQsIERBVEFWT0ZTVCk7CisKKwkvKiBTZXR1cCB0ZXN0IHBhdHRlcm4gaWYgZW5hYmxlZCAqLworCWlmIChwYXJhbXMtPmNvbmZpZ19wYXJhbXMudGVzdF9wYXRfZ2VuKSB7CisJCS8qIFVzZSB0aGUgSEQvVkQgcG9sIHNldHRpbmdzIGZyb20gdXNlciAqLworCQlzeW5jLmNjZHBnX2hkcG9sID0gcGFyYW1zLT5oZF9wb2w7CisJCXN5bmMuY2NkcGdfdmRwb2wgPSBwYXJhbXMtPnZkX3BvbDsKKwkJZG0zNjVfdnBzc19zZXRfc3luY19wb2woc3luYyk7CisJCWZyYW1lX3NpemUuaGxwZnIgPSBpc2lmX2NmZy5iYXllci53aW4ud2lkdGg7CisJCWZyYW1lX3NpemUucHBsZW4gPSBpc2lmX2NmZy5iYXllci53aW4uaGVpZ2h0OworCQlkbTM2NV92cHNzX3NldF9wZ19mcmFtZV9zaXplKGZyYW1lX3NpemUpOworCQl2cHNzX3NlbGVjdF9jY2RjX3NvdXJjZShWUFNTX1BHTFBCSyk7CisJfQorCisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJcbkVuZCBvZiBpc2lmX2NvbmZpZ195Y2Jjci4uLlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9zZXRfYnVmdHlwZShlbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZSkKK3sKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJaXNpZl9jZmcuYmF5ZXIuYnVmX3R5cGUgPSBidWZfdHlwZTsKKwllbHNlCisJCWlzaWZfY2ZnLnljYmNyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CisKKwlyZXR1cm4gMDsKKworfQorc3RhdGljIGVudW0gY2NkY19idWZ0eXBlIGlzaWZfZ2V0X2J1ZnR5cGUodm9pZCkKK3sKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJcmV0dXJuIGlzaWZfY2ZnLmJheWVyLmJ1Zl90eXBlOworCisJcmV0dXJuIGlzaWZfY2ZnLnljYmNyLmJ1Zl90eXBlOworfQorCitzdGF0aWMgaW50IGlzaWZfZW51bV9waXgodTMyICpwaXgsIGludCBpKQoreworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwkJaWYgKGkgPCBBUlJBWV9TSVpFKGlzaWZfcmF3X2JheWVyX3BpeF9mb3JtYXRzKSkgeworCQkJKnBpeCA9IGlzaWZfcmF3X2JheWVyX3BpeF9mb3JtYXRzW2ldOworCQkJcmV0ID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChpIDwgQVJSQVlfU0laRShpc2lmX3Jhd195dXZfcGl4X2Zvcm1hdHMpKSB7CisJCQkqcGl4ID0gaXNpZl9yYXdfeXV2X3BpeF9mb3JtYXRzW2ldOworCQkJcmV0ID0gMDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9zZXRfcGl4ZWxfZm9ybWF0KHVuc2lnbmVkIGludCBwaXhmbXQpCit7CisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwkJaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4KSB7CisJCQlpZiAoKGlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuY29tcHJlc3MuYWxnICE9CisJCQkgICAgIElTSUZfQUxBVykgJiYKKwkJCSAgICAoaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5jb21wcmVzcy5hbGcgIT0KKwkJCSAgICAgSVNJRl9EUENNKSkgeworCQkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LAorCQkJCQkiRWl0aGVyIGNvbmZpZ3VyZSBBLUxhdyBvciBEUENNXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWlzaWZfY2ZnLmRhdGFfcGFjayA9IElTSUZfUEFDS184QklUOworCQl9IGVsc2UgaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1IxNikgeworCQkJaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5jb21wcmVzcy5hbGcgPQorCQkJCQlJU0lGX05PX0NPTVBSRVNTSU9OOworCQkJaXNpZl9jZmcuZGF0YV9wYWNrID0gSVNJRl9QQUNLXzE2QklUOworCQl9IGVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCQlpc2lmX2NmZy5iYXllci5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXOworCX0gZWxzZSB7CisJCWlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpCisJCQlpc2lmX2NmZy55Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX1lDQllDUjsKKwkJZWxzZSBpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9VWVZZKQorCQkJaXNpZl9jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlk7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCQlpc2lmX2NmZy5kYXRhX3BhY2sgPSBJU0lGX1BBQ0tfOEJJVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgaXNpZl9nZXRfcGl4ZWxfZm9ybWF0KHZvaWQpCit7CisJdTMyIHBpeGZtdDsKKworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlpZiAoaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5jb21wcmVzcy5hbGcgPT0gSVNJRl9BTEFXIHx8CisJCSAgICBpc2lmX2NmZy5iYXllci5jb25maWdfcGFyYW1zLmNvbXByZXNzLmFsZyA9PSBJU0lGX0RQQ00pCisJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4OworCQllbHNlCisJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfU0JHR1IxNjsKKwllbHNlIHsKKwkJaWYgKGlzaWZfY2ZnLnljYmNyLnBpeF9vcmRlciA9PSBDQ0RDX1BJWE9SREVSX1lDQllDUikKKwkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOworCQllbHNlCisJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfVVlWWTsKKwl9CisJcmV0dXJuIHBpeGZtdDsKK30KKworc3RhdGljIGludCBpc2lmX3NldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQoreworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJCWlzaWZfY2ZnLmJheWVyLndpbi50b3AgPSB3aW4tPnRvcDsKKwkJaXNpZl9jZmcuYmF5ZXIud2luLmxlZnQgPSB3aW4tPmxlZnQ7CisJCWlzaWZfY2ZnLmJheWVyLndpbi53aWR0aCA9IHdpbi0+d2lkdGg7CisJCWlzaWZfY2ZnLmJheWVyLndpbi5oZWlnaHQgPSB3aW4tPmhlaWdodDsKKwl9IGVsc2UgeworCQlpc2lmX2NmZy55Y2Jjci53aW4udG9wID0gd2luLT50b3A7CisJCWlzaWZfY2ZnLnljYmNyLndpbi5sZWZ0ID0gd2luLT5sZWZ0OworCQlpc2lmX2NmZy55Y2Jjci53aW4ud2lkdGggPSB3aW4tPndpZHRoOworCQlpc2lmX2NmZy55Y2Jjci53aW4uaGVpZ2h0ID0gd2luLT5oZWlnaHQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpc2lmX2dldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQoreworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQkqd2luID0gaXNpZl9jZmcuYmF5ZXIud2luOworCWVsc2UKKwkJKndpbiA9IGlzaWZfY2ZnLnljYmNyLndpbjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpc2lmX2dldF9saW5lX2xlbmd0aCh2b2lkKQoreworCXVuc2lnbmVkIGludCBsZW47CisKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQlpZiAoaXNpZl9jZmcuZGF0YV9wYWNrID09IElTSUZfUEFDS184QklUKQorCQkJbGVuID0gKChpc2lmX2NmZy5iYXllci53aW4ud2lkdGgpKTsKKwkJZWxzZSBpZiAoaXNpZl9jZmcuZGF0YV9wYWNrID09IElTSUZfUEFDS18xMkJJVCkKKwkJCWxlbiA9ICgoKGlzaWZfY2ZnLmJheWVyLndpbi53aWR0aCAqIDIpICsKKwkJCQkgKGlzaWZfY2ZnLmJheWVyLndpbi53aWR0aCA+PiAyKSkpOworCQllbHNlCisJCQlsZW4gPSAoKChpc2lmX2NmZy5iYXllci53aW4ud2lkdGggKiAyKSkpOworCX0gZWxzZQorCQlsZW4gPSAoKChpc2lmX2NmZy55Y2Jjci53aW4ud2lkdGggKiAyKSkpOworCXJldHVybiBBTElHTihsZW4sIDMyKTsKK30KKworc3RhdGljIGludCBpc2lmX3NldF9mcmFtZV9mb3JtYXQoZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10KQoreworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlpc2lmX2NmZy5iYXllci5mcm1fZm10ID0gZnJtX2ZtdDsKKwllbHNlCisJCWlzaWZfY2ZnLnljYmNyLmZybV9mbXQgPSBmcm1fZm10OworCXJldHVybiAwOworfQorc3RhdGljIGVudW0gY2NkY19mcm1mbXQgaXNpZl9nZXRfZnJhbWVfZm9ybWF0KHZvaWQpCit7CisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiBpc2lmX2NmZy5iYXllci5mcm1fZm10OworCXJldHVybiBpc2lmX2NmZy55Y2Jjci5mcm1fZm10OworfQorCitzdGF0aWMgaW50IGlzaWZfZ2V0ZmlkKHZvaWQpCit7CisJcmV0dXJuIChyZWdyKE1PREVTRVQpID4+IDE1KSAmIDB4MTsKK30KKworLyogbWlzYyBvcGVyYXRpb25zICovCitzdGF0aWMgdm9pZCBpc2lmX3NldGZiYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmVndygoYWRkciA+PiAyMSkgJiAweDA3ZmYsIENBRFUpOworCXJlZ3coKGFkZHIgPj4gNSkgJiAweDBmZmZmLCBDQURMKTsKK30KKworc3RhdGljIGludCBpc2lmX3NldF9od19pZl9wYXJhbXMoc3RydWN0IHZwZmVfaHdfaWZfcGFyYW0gKnBhcmFtcykKK3sKKwlpc2lmX2NmZy5pZl90eXBlID0gcGFyYW1zLT5pZl90eXBlOworCisJc3dpdGNoIChwYXJhbXMtPmlmX3R5cGUpIHsKKwljYXNlIFZQRkVfQlQ2NTY6CisJY2FzZSBWUEZFX0JUNjU2XzEwQklUOgorCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzg6CisJCWlzaWZfY2ZnLnljYmNyLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9ZQ0JDUl84QklUOworCQlpc2lmX2NmZy55Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWTsKKwkJYnJlYWs7CisJY2FzZSBWUEZFX0JUMTEyMDoKKwljYXNlIFZQRkVfWUNCQ1JfU1lOQ18xNjoKKwkJaXNpZl9jZmcueWNiY3IucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzE2QklUOworCQlpc2lmX2NmZy55Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWTsKKwkJYnJlYWs7CisJY2FzZSBWUEZFX1JBV19CQVlFUjoKKwkJaXNpZl9jZmcuYmF5ZXIucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJJbnZhbGlkIGludGVyZmFjZSB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gd2lsbCBjb25maWd1cmUgSVNJRiBmb3IgWUNiQ3IgcGFyYW1ldGVycy4gKi8KK3N0YXRpYyBpbnQgaXNpZl9jb25maWdfeWNiY3Iodm9pZCkKK3sKKwlzdHJ1Y3QgaXNpZl95Y2Jjcl9jb25maWcgKnBhcmFtcyA9ICZpc2lmX2NmZy55Y2JjcjsKKwlzdHJ1Y3QgdnBzc19wZ19mcmFtZV9zaXplIGZyYW1lX3NpemU7CisJdTMyIG1vZGVzZXQgPSAwLCBjY2RjZmcgPSAwOworCXN0cnVjdCB2cHNzX3N5bmNfcG9sIHN5bmM7CisKKwlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIlxuU3RhcnRpbmcgaXNpZl9jb25maWdfeWNiY3IuLi4iKTsKKworCS8qIGNvbmZpZ3VyZSBwaXhlbCBmb3JtYXQgb3IgaW5wdXQgbW9kZSAqLworCW1vZGVzZXQgPSBtb2Rlc2V0IHwgKHBhcmFtcy0+cGl4X2ZtdCA8PCBJU0lGX0lOUFVUX1NISUZUKSB8CisJCSAgKHBhcmFtcy0+ZnJtX2ZtdCA8PCBJU0lGX0ZSTV9GTVRfU0hJRlQpIHwKKwkJICAocGFyYW1zLT5maWRfcG9sIDw8IElTSUZfRklEX1BPTF9TSElGVCkgfAorCQkgIChwYXJhbXMtPmhkX3BvbCA8PCBJU0lGX0hEX1BPTF9TSElGVCkgfAorCQkgIChwYXJhbXMtPnZkX3BvbCA8PCBJU0lGX1ZEX1BPTF9TSElGVCk7CisKKwkvKiBwYWNrIHRoZSBkYXRhIHRvIDgtYml0IElTSUZDRkcgKi8KKwlzd2l0Y2ggKGlzaWZfY2ZnLmlmX3R5cGUpIHsKKwljYXNlIFZQRkVfQlQ2NTY6CisJCWlmIChwYXJhbXMtPnBpeF9mbXQgIT0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVCkgeworCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJJbnZhbGlkIHBpeF9mbXQoaW5wdXQgbW9kZSlcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJbW9kZXNldCB8PSAoVlBGRV9QSU5QT0xfTkVHQVRJVkUgPDwgSVNJRl9WRF9QT0xfU0hJRlQpOworCQlyZWd3KDMsIFJFQzY1NklGKTsKKwkJY2NkY2ZnID0gY2NkY2ZnIHwgSVNJRl9EQVRBX1BBQ0s4IHwgSVNJRl9ZQ0lOU1dQX1lDQkNSOworCQlicmVhazsKKwljYXNlIFZQRkVfQlQ2NTZfMTBCSVQ6CisJCWlmIChwYXJhbXMtPnBpeF9mbXQgIT0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVCkgeworCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJJbnZhbGlkIHBpeF9mbXQoaW5wdXQgbW9kZSlcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJLyogc2V0dXAgQlQuNjU2LCBlbWJlZGRlZCBzeW5jICAqLworCQlyZWd3KDMsIFJFQzY1NklGKTsKKwkJLyogZW5hYmxlIDEwIGJpdCBtb2RlIGluIGNjZGNmZyAqLworCQljY2RjZmcgPSBjY2RjZmcgfCBJU0lGX0RBVEFfUEFDSzggfCBJU0lGX1lDSU5TV1BfWUNCQ1IgfAorCQkJSVNJRl9CVzY1Nl9FTkFCTEU7CisJCWJyZWFrOworCWNhc2UgVlBGRV9CVDExMjA6CisJCWlmIChwYXJhbXMtPnBpeF9mbXQgIT0gQ0NEQ19QSVhGTVRfWUNCQ1JfMTZCSVQpIHsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiSW52YWxpZCBwaXhfZm10KGlucHV0IG1vZGUpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJlZ3coMywgUkVDNjU2SUYpOworCQlicmVhazsKKworCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzg6CisJCWNjZGNmZyB8PSBJU0lGX0RBVEFfUEFDSzg7CisJCWNjZGNmZyB8PSBJU0lGX1lDSU5TV1BfWUNCQ1I7CisJCWlmIChwYXJhbXMtPnBpeF9mbXQgIT0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVCkgeworCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJJbnZhbGlkIHBpeF9mbXQoaW5wdXQgbW9kZSlcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWUEZFX1lDQkNSX1NZTkNfMTY6CisJCWlmIChwYXJhbXMtPnBpeF9mbXQgIT0gQ0NEQ19QSVhGTVRfWUNCQ1JfMTZCSVQpIHsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiSW52YWxpZCBwaXhfZm10KGlucHV0IG1vZGUpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHNob3VsZCBuZXZlciBjb21lIGhlcmUgKi8KKwkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJJbnZhbGlkIGludGVyZmFjZSB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVndyhtb2Rlc2V0LCBNT0RFU0VUKTsKKworCS8qIFNldCB1cCBwaXggb3JkZXIgKi8KKwljY2RjZmcgfD0gcGFyYW1zLT5waXhfb3JkZXIgPDwgSVNJRl9QSVhfT1JERVJfU0hJRlQ7CisKKwlyZWd3KGNjZGNmZywgQ0NEQ0ZHKTsKKworCS8qIGNvbmZpZ3VyZSB2aWRlbyB3aW5kb3cgKi8KKwlpZiAoKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9CVDExMjApIHx8CisJICAgIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfWUNCQ1JfU1lOQ18xNikpCisJCWlzaWZfc2V0d2luKCZwYXJhbXMtPndpbiwgcGFyYW1zLT5mcm1fZm10LCAxKTsKKwllbHNlCisJCWlzaWZfc2V0d2luKCZwYXJhbXMtPndpbiwgcGFyYW1zLT5mcm1fZm10LCAyKTsKKworCS8qCisJICogY29uZmlndXJlIHRoZSBob3Jpem9udGFsIGxpbmUgb2Zmc2V0CisJICogdGhpcyBpcyBkb25lIGJ5IHJvdW5kaW5nIHVwIHdpZHRoIHRvIGEgbXVsdGlwbGUgb2YgMTYgcGl4ZWxzCisJICogYW5kIG11bHRpcGx5IGJ5IHR3byB0byBhY2NvdW50IGZvciB5OmNiOmNyIDQ6MjoyIGRhdGEKKwkgKi8KKwlyZWd3KCgoKChwYXJhbXMtPndpbi53aWR0aCAqIDIpICsgMzEpICYgMHhmZmZmZmZlMCkgPj4gNSksIEhTSVpFKTsKKworCS8qIGNvbmZpZ3VyZSB0aGUgbWVtb3J5IGxpbmUgb2Zmc2V0ICovCisJaWYgKChwYXJhbXMtPmZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCkgJiYKKwkgICAgKHBhcmFtcy0+YnVmX3R5cGUgPT0gQ0NEQ19CVUZUWVBFX0ZMRF9JTlRFUkxFQVZFRCkpCisJCS8qIHR3byBmaWVsZHMgYXJlIGludGVybGVhdmVkIGluIG1lbW9yeSAqLworCQlyZWd3KDB4MDAwMDAyNDksIFNET0ZTVCk7CisKKwkvKiBTZXR1cCB0ZXN0IHBhdHRlcm4gaWYgZW5hYmxlZCAqLworCWlmIChpc2lmX2NmZy5iYXllci5jb25maWdfcGFyYW1zLnRlc3RfcGF0X2dlbikgeworCQlzeW5jLmNjZHBnX2hkcG9sID0gcGFyYW1zLT5oZF9wb2w7CisJCXN5bmMuY2NkcGdfdmRwb2wgPSBwYXJhbXMtPnZkX3BvbDsKKwkJZG0zNjVfdnBzc19zZXRfc3luY19wb2woc3luYyk7CisJCWRtMzY1X3Zwc3Nfc2V0X3BnX2ZyYW1lX3NpemUoZnJhbWVfc2l6ZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzaWZfY29uZmlndXJlKHZvaWQpCit7CisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiBpc2lmX2NvbmZpZ19yYXcoKTsKKwlyZXR1cm4gaXNpZl9jb25maWdfeWNiY3IoKTsKK30KKworc3RhdGljIGludCBpc2lmX2Nsb3NlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3sKKwkvKiBjb3B5IGRlZmF1bHRzIHRvIG1vZHVsZSBwYXJhbXMgKi8KKwlpc2lmX2NmZy5iYXllci5jb25maWdfcGFyYW1zID0gaXNpZl9jb25maWdfZGVmYXVsdHM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2NkY19od19kZXZpY2UgaXNpZl9od19kZXYgPSB7CisJLm5hbWUgPSAiSVNJRiIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmh3X29wcyA9IHsKKwkJLm9wZW4gPSBpc2lmX29wZW4sCisJCS5jbG9zZSA9IGlzaWZfY2xvc2UsCisJCS5lbmFibGUgPSBpc2lmX2VuYWJsZSwKKwkJLmVuYWJsZV9vdXRfdG9fc2RyYW0gPSBpc2lmX2VuYWJsZV9vdXRwdXRfdG9fc2RyYW0sCisJCS5zZXRfaHdfaWZfcGFyYW1zID0gaXNpZl9zZXRfaHdfaWZfcGFyYW1zLAorCQkuY29uZmlndXJlID0gaXNpZl9jb25maWd1cmUsCisJCS5zZXRfYnVmdHlwZSA9IGlzaWZfc2V0X2J1ZnR5cGUsCisJCS5nZXRfYnVmdHlwZSA9IGlzaWZfZ2V0X2J1ZnR5cGUsCisJCS5lbnVtX3BpeCA9IGlzaWZfZW51bV9waXgsCisJCS5zZXRfcGl4ZWxfZm9ybWF0ID0gaXNpZl9zZXRfcGl4ZWxfZm9ybWF0LAorCQkuZ2V0X3BpeGVsX2Zvcm1hdCA9IGlzaWZfZ2V0X3BpeGVsX2Zvcm1hdCwKKwkJLnNldF9mcmFtZV9mb3JtYXQgPSBpc2lmX3NldF9mcmFtZV9mb3JtYXQsCisJCS5nZXRfZnJhbWVfZm9ybWF0ID0gaXNpZl9nZXRfZnJhbWVfZm9ybWF0LAorCQkuc2V0X2ltYWdlX3dpbmRvdyA9IGlzaWZfc2V0X2ltYWdlX3dpbmRvdywKKwkJLmdldF9pbWFnZV93aW5kb3cgPSBpc2lmX2dldF9pbWFnZV93aW5kb3csCisJCS5nZXRfbGluZV9sZW5ndGggPSBpc2lmX2dldF9saW5lX2xlbmd0aCwKKwkJLnNldGZiYWRkciA9IGlzaWZfc2V0ZmJhZGRyLAorCQkuZ2V0ZmlkID0gaXNpZl9nZXRmaWQsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlzaWZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl2b2lkICgqc2V0dXBfcGlubXV4KSh2b2lkKTsKKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKKwl2b2lkICpfX2lvbWVtIGFkZHI7CisJaW50IHN0YXR1cyA9IDAsIGk7CisKKwkvKgorCSAqIGZpcnN0IHRyeSB0byByZWdpc3RlciB3aXRoIHZwZmUuIElmIG5vdCBjb3JyZWN0IHBsYXRmb3JtLCB0aGVuIHdlCisJICogZG9uJ3QgaGF2ZSB0byBpb21hcAorCSAqLworCXN0YXR1cyA9IHZwZmVfcmVnaXN0ZXJfY2NkY19kZXZpY2UoJmlzaWZfaHdfZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIEdldCBhbmQgZW5hYmxlIE1hc3RlciBjbG9jayAqLworCWlzaWZfY2ZnLm1jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtYXN0ZXIiKTsKKwlpZiAoSVNfRVJSKGlzaWZfY2ZnLm1jbGspKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoaXNpZl9jZmcubWNsayk7CisJCWdvdG8gZmFpbF9tY2xrOworCX0KKwlpZiAoY2xrX2VuYWJsZShpc2lmX2NmZy5tY2xrKSkgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfbWNsazsKKwl9CisKKwkvKiBQbGF0Zm9ybSBkYXRhIGhvbGRzIHNldHVwX3Bpbm11eCBmdW5jdGlvbiBwdHIgKi8KKwlpZiAoTlVMTCA9PSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfbWNsazsKKwl9CisJc2V0dXBfcGlubXV4ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJLyoKKwkgKiBzZXR1cCBNdXggY29uZmlndXJhdGlvbiBmb3IgY2NkYyB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZvcgorCSAqIGRpZmZlcmVudCBTb0NzIHVzaW5nIHRoaXMgQ0NEQworCSAqLworCXNldHVwX3Bpbm11eCgpOworCisJaSA9IDA7CisJLyogR2V0IHRoZSBJU0lGIGJhc2UgYWRkcmVzcywgbGluZWFyaXphdGlvbiB0YWJsZTAgYW5kIHRhYmxlMSBhZGRyLiAqLworCXdoaWxlIChpIDwgMykgeworCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIGkpOworCQlpZiAoIXJlcykgeworCQkJc3RhdHVzID0gLUVOT0RFVjsKKwkJCWdvdG8gZmFpbF9ub2Jhc2VfcmVzOworCQl9CisJCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksCisJCQkJCSByZXMtPm5hbWUpOworCQlpZiAoIXJlcykgeworCQkJc3RhdHVzID0gLUVCVVNZOworCQkJZ290byBmYWlsX25vYmFzZV9yZXM7CisJCX0KKwkJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCQlpZiAoIWFkZHIpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGZhaWxfYmFzZV9pb21hcDsKKwkJfQorCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAwOgorCQkJLyogSVNJRiBiYXNlIGFkZHJlc3MgKi8KKwkJCWlzaWZfY2ZnLmJhc2VfYWRkciA9IGFkZHI7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJLyogSVNJRiBsaW5lYXIgdGJsMCBhZGRyZXNzICovCisJCQlpc2lmX2NmZy5saW5lYXJfdGJsMF9hZGRyID0gYWRkcjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogSVNJRiBsaW5lYXIgdGJsMCBhZGRyZXNzICovCisJCQlpc2lmX2NmZy5saW5lYXJfdGJsMV9hZGRyID0gYWRkcjsKKwkJCWJyZWFrOworCQl9CisJCWkrKzsKKwl9CisJaXNpZl9jZmcuZGV2ID0gJnBkZXYtPmRldjsKKworCXByaW50ayhLRVJOX05PVElDRSAiJXMgaXMgcmVnaXN0ZXJlZCB3aXRoIHZwZmUuXG4iLAorCQlpc2lmX2h3X2Rldi5uYW1lKTsKKwlyZXR1cm4gMDsKK2ZhaWxfYmFzZV9pb21hcDoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpLS07CitmYWlsX25vYmFzZV9yZXM6CisJaWYgKGlzaWZfY2ZnLmJhc2VfYWRkcikKKwkJaW91bm1hcChpc2lmX2NmZy5iYXNlX2FkZHIpOworCWlmIChpc2lmX2NmZy5saW5lYXJfdGJsMF9hZGRyKQorCQlpb3VubWFwKGlzaWZfY2ZnLmxpbmVhcl90YmwwX2FkZHIpOworCisJd2hpbGUgKGkgPj0gMCkgeworCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIGkpOworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwkJaS0tOworCX0KK2ZhaWxfbWNsazoKKwljbGtfcHV0KGlzaWZfY2ZnLm1jbGspOworCXZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZSgmaXNpZl9od19kZXYpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKKwlpbnQgaSA9IDA7CisKKwlpb3VubWFwKGlzaWZfY2ZnLmJhc2VfYWRkcik7CisJaW91bm1hcChpc2lmX2NmZy5saW5lYXJfdGJsMF9hZGRyKTsKKwlpb3VubWFwKGlzaWZfY2ZnLmxpbmVhcl90YmwxX2FkZHIpOworCXdoaWxlIChpIDwgMykgeworCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIGkpOworCQlpZiAocmVzKQorCQkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJCWkrKzsKKwl9CisJdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZpc2lmX2h3X2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlzaWZfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImlzaWYiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChpc2lmX3JlbW92ZSksCisJLnByb2JlID0gaXNpZl9wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlzaWZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlzaWZfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgaXNpZl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlzaWZfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaXNpZl9pbml0KTsKK21vZHVsZV9leGl0KGlzaWZfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9pc2lmX3JlZ3MuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9pc2lmX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2I4ODkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2lzaWZfcmVncy5oCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9JU0lGX1JFR1NfSAorI2RlZmluZSBfSVNJRl9SRUdTX0gKKworLyogSVNJRiByZWdpc3RlcnMgcmVsYXRpdmUgb2Zmc2V0cyAqLworI2RlZmluZSBTWU5DRU4JCQkJCTB4MDAKKyNkZWZpbmUgTU9ERVNFVAkJCQkJMHgwNAorI2RlZmluZSBIRFcJCQkJCTB4MDgKKyNkZWZpbmUgVkRXCQkJCQkweDBjCisjZGVmaW5lIFBQTE4JCQkJCTB4MTAKKyNkZWZpbmUgTFBGUgkJCQkJMHgxNAorI2RlZmluZSBTUEgJCQkJCTB4MTgKKyNkZWZpbmUgTE5ICQkJCQkweDFjCisjZGVmaW5lIFNMVjAJCQkJCTB4MjAKKyNkZWZpbmUgU0xWMQkJCQkJMHgyNAorI2RlZmluZSBMTlYJCQkJCTB4MjgKKyNkZWZpbmUgQ1VMSAkJCQkJMHgyYworI2RlZmluZSBDVUxWCQkJCQkweDMwCisjZGVmaW5lIEhTSVpFCQkJCQkweDM0CisjZGVmaW5lIFNET0ZTVAkJCQkJMHgzOAorI2RlZmluZSBDQURVCQkJCQkweDNjCisjZGVmaW5lIENBREwJCQkJCTB4NDAKKyNkZWZpbmUgTElOQ0ZHMAkJCQkJMHg0NAorI2RlZmluZSBMSU5DRkcxCQkJCQkweDQ4CisjZGVmaW5lIENDT0xQCQkJCQkweDRjCisjZGVmaW5lIENSR0FJTiAJCQkJCTB4NTAKKyNkZWZpbmUgQ0dSR0FJTgkJCQkJMHg1NAorI2RlZmluZSBDR0JHQUlOCQkJCQkweDU4CisjZGVmaW5lIENCR0FJTgkJCQkJMHg1YworI2RlZmluZSBDT0ZTVEEJCQkJCTB4NjAKKyNkZWZpbmUgRkxTSENGRzAJCQkJMHg2NAorI2RlZmluZSBGTFNIQ0ZHMQkJCQkweDY4CisjZGVmaW5lIEZMU0hDRkcyCQkJCTB4NmMKKyNkZWZpbmUgVkRJTlQwCQkJCQkweDcwCisjZGVmaW5lIFZESU5UMQkJCQkJMHg3NAorI2RlZmluZSBWRElOVDIJCQkJCTB4NzgKKyNkZWZpbmUgTUlTQyAJCQkJCTB4N2MKKyNkZWZpbmUgQ0dBTU1BV0QJCQkJMHg4MAorI2RlZmluZSBSRUM2NTZJRgkJCQkweDg0CisjZGVmaW5lIENDRENGRwkJCQkJMHg4OAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIERlZmVjdCBDb3JyZWN0aW9uIHJlZ2lzdGVycworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIERGQ0NUTAkJCQkJMHg4YworI2RlZmluZSBWREZTQVRMVgkJCQkweDkwCisjZGVmaW5lIERGQ01FTUNUTAkJCQkweDk0CisjZGVmaW5lIERGQ01FTTAJCQkJCTB4OTgKKyNkZWZpbmUgREZDTUVNMQkJCQkJMHg5YworI2RlZmluZSBERkNNRU0yCQkJCQkweGEwCisjZGVmaW5lIERGQ01FTTMJCQkJCTB4YTQKKyNkZWZpbmUgREZDTUVNNAkJCQkJMHhhOAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQmxhY2sgQ2xhbXAgcmVnaXN0ZXJzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDTEFNUENGRwkJCQkweGFjCisjZGVmaW5lIENMRENPRlNUCQkJCTB4YjAKKyNkZWZpbmUgQ0xTVgkJCQkJMHhiNAorI2RlZmluZSBDTEhXSU4wCQkJCQkweGI4CisjZGVmaW5lIENMSFdJTjEJCQkJCTB4YmMKKyNkZWZpbmUgQ0xIV0lOMgkJCQkJMHhjMAorI2RlZmluZSBDTFZSVgkJCQkJMHhjNAorI2RlZmluZSBDTFZXSU4wCQkJCQkweGM4CisjZGVmaW5lIENMVldJTjEJCQkJCTB4Y2MKKyNkZWZpbmUgQ0xWV0lOMgkJCQkJMHhkMAorI2RlZmluZSBDTFZXSU4zCQkJCQkweGQ0CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBMZW5zZSBTaGFkaW5nIENvcnJlY3Rpb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIERBVEFIT0ZTVAkJCQkweGQ4CisjZGVmaW5lIERBVEFWT0ZTVAkJCQkweGRjCisjZGVmaW5lIExTQ0hWQUwJCQkJCTB4ZTAKKyNkZWZpbmUgTFNDVlZBTAkJCQkJMHhlNAorI2RlZmluZSBUV09ETFNDQ0ZHCQkJCTB4ZTgKKyNkZWZpbmUgVFdPRExTQ09GU1QJCQkJMHhlYworI2RlZmluZSBUV09ETFNDSU5JCQkJCTB4ZjAKKyNkZWZpbmUgVFdPRExTQ0dSQlUJCQkJMHhmNAorI2RlZmluZSBUV09ETFNDR1JCTAkJCQkweGY4CisjZGVmaW5lIFRXT0RMU0NHUk9GCQkJCTB4ZmMKKyNkZWZpbmUgVFdPRExTQ09SQlUJCQkJMHgxMDAKKyNkZWZpbmUgVFdPRExTQ09SQkwJCQkJMHgxMDQKKyNkZWZpbmUgVFdPRExTQ09ST0YJCQkJMHgxMDgKKyNkZWZpbmUgVFdPRExTQ0lSUUVOCQkJCTB4MTBjCisjZGVmaW5lIFRXT0RMU0NJUlFTVAkJCQkweDExMAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRGF0YSBmb3JtYXR0ZXIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEZNVENGRwkJCQkJMHgxMTQKKyNkZWZpbmUgRk1UUExFTgkJCQkJMHgxMTgKKyNkZWZpbmUgRk1UU1BICQkJCQkweDExYworI2RlZmluZSBGTVRMTkgJCQkJCTB4MTIwCisjZGVmaW5lIEZNVFNMVgkJCQkJMHgxMjQKKyNkZWZpbmUgRk1UTE5WCQkJCQkweDEyOAorI2RlZmluZSBGTVRSTEVOCQkJCQkweDEyYworI2RlZmluZSBGTVRIQ05UCQkJCQkweDEzMAorI2RlZmluZSBGTVRBUFRSX0JBU0UJCQkJMHgxMzQKKy8qIEJlbG93IG1hY3JvIGZvciBhZGRyZXNzZXMgRk1UQVBUUjAgLSBGTVRBUFRSMTUgKi8KKyNkZWZpbmUgRk1UQVBUUihpKQkJCShGTVRBUFRSX0JBU0UgKyAoaSAqIDQpKQorI2RlZmluZSBGTVRQR01WRjAJCQkJMHgxNzQKKyNkZWZpbmUgRk1UUEdNVkYxCQkJCTB4MTc4CisjZGVmaW5lIEZNVFBHTUFQVTAJCQkJMHgxN2MKKyNkZWZpbmUgRk1UUEdNQVBVMQkJCQkweDE4MAorI2RlZmluZSBGTVRQR01BUFMwCQkJCTB4MTg0CisjZGVmaW5lIEZNVFBHTUFQUzEJCQkJMHgxODgKKyNkZWZpbmUgRk1UUEdNQVBTMgkJCQkweDE4YworI2RlZmluZSBGTVRQR01BUFMzCQkJCTB4MTkwCisjZGVmaW5lIEZNVFBHTUFQUzQJCQkJMHgxOTQKKyNkZWZpbmUgRk1UUEdNQVBTNQkJCQkweDE5OAorI2RlZmluZSBGTVRQR01BUFM2CQkJCTB4MTljCisjZGVmaW5lIEZNVFBHTUFQUzcJCQkJMHgxYTAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29sb3IgU3BhY2UgQ29udmVydGVyCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIENTQ0NUTAkJCQkJMHgxYTQKKyNkZWZpbmUgQ1NDTTAJCQkJCTB4MWE4CisjZGVmaW5lIENTQ00xCQkJCQkweDFhYworI2RlZmluZSBDU0NNMgkJCQkJMHgxYjAKKyNkZWZpbmUgQ1NDTTMJCQkJCTB4MWI0CisjZGVmaW5lIENTQ000CQkJCQkweDFiOAorI2RlZmluZSBDU0NNNQkJCQkJMHgxYmMKKyNkZWZpbmUgQ1NDTTYJCQkJCTB4MWMwCisjZGVmaW5lIENTQ003CQkJCQkweDFjNAorI2RlZmluZSBPQldJTjAJCQkJCTB4MWM4CisjZGVmaW5lIE9CV0lOMQkJCQkJMHgxY2MKKyNkZWZpbmUgT0JXSU4yCQkJCQkweDFkMAorI2RlZmluZSBPQldJTjMJCQkJCTB4MWQ0CisjZGVmaW5lIE9CVkFMMAkJCQkJMHgxZDgKKyNkZWZpbmUgT0JWQUwxCQkJCQkweDFkYworI2RlZmluZSBPQlZBTDIJCQkJCTB4MWUwCisjZGVmaW5lIE9CVkFMMwkJCQkJMHgxZTQKKyNkZWZpbmUgT0JWQUw0CQkJCQkweDFlOAorI2RlZmluZSBPQlZBTDUJCQkJCTB4MWVjCisjZGVmaW5lIE9CVkFMNgkJCQkJMHgxZjAKKyNkZWZpbmUgT0JWQUw3CQkJCQkweDFmNAorI2RlZmluZSBDTEtDVEwJCQkJCTB4MWY4CisKKy8qIE1hc2tzICYgU2hpZnRzIGJlbG93ICovCisjZGVmaW5lIFNUQVJUX1BYX0hPUl9NQVNLCQkJMHg3RkZGCisjZGVmaW5lIE5VTV9QWF9IT1JfTUFTSwkJCQkweDdGRkYKKyNkZWZpbmUgU1RBUlRfVkVSX09ORV9NQVNLCQkJMHg3RkZGCisjZGVmaW5lIFNUQVJUX1ZFUl9UV09fTUFTSwkJCTB4N0ZGRgorI2RlZmluZSBOVU1fTElORVNfVkVSCQkJCTB4N0ZGRgorCisvKiBnYWluIC0gb2Zmc2V0IG1hc2tzICovCisjZGVmaW5lIEdBSU5fSU5URUdFUl9TSElGVAkJCTkKKyNkZWZpbmUgT0ZGU0VUX01BU0sJCQkgIAkweEZGRgorI2RlZmluZSBHQUlOX1NEUkFNX0VOX1NISUZUCQkJMTIKKyNkZWZpbmUgR0FJTl9JUElQRV9FTl9TSElGVAkJCTEzCisjZGVmaW5lIEdBSU5fSDNBX0VOX1NISUZUCQkJMTQKKyNkZWZpbmUgT0ZTVF9TRFJBTV9FTl9TSElGVAkJCTgKKyNkZWZpbmUgT0ZTVF9JUElQRV9FTl9TSElGVAkJCTkKKyNkZWZpbmUgT0ZTVF9IM0FfRU5fU0hJRlQJCQkxMAorI2RlZmluZSBHQUlOX09GRlNFVF9FTl9NQVNLCQkJMHg3NzAwCisKKy8qIEN1bGxpbmcgKi8KKyNkZWZpbmUgQ1VMTF9QQVRfRVZFTl9MSU5FX1NISUZUCQk4CisKKy8qIENDRENGRyByZWdpc3RlciAqLworI2RlZmluZSBJU0lGX1lDSU5TV1BfUkFXCQkJKDB4MDAgPDwgNCkKKyNkZWZpbmUgSVNJRl9ZQ0lOU1dQX1lDQkNSCQkJKDB4MDEgPDwgNCkKKyNkZWZpbmUgSVNJRl9DQ0RDRkdfRklETURfTEFUQ0hfVlNZTkMJCSgweDAwIDw8IDYpCisjZGVmaW5lIElTSUZfQ0NEQ0ZHX1dFTkxPR19BTkQJCQkoMHgwMCA8PCA4KQorI2RlZmluZSBJU0lGX0NDRENGR19UUkdTRUxfV0VOCQkJKDB4MDAgPDwgOSkKKyNkZWZpbmUgSVNJRl9DQ0RDRkdfRVhUUkdfRElTQUJMRQkJKDB4MDAgPDwgMTApCisjZGVmaW5lIElTSUZfTEFUQ0hfT05fVlNZTkNfRElTQUJMRQkJKDB4MDEgPDwgMTUpCisjZGVmaW5lIElTSUZfTEFUQ0hfT05fVlNZTkNfRU5BQkxFCQkoMHgwMCA8PCAxNSkKKyNkZWZpbmUgSVNJRl9EQVRBX1BBQ0tfTUFTSwkJCTMKKyNkZWZpbmUgSVNJRl9EQVRBX1BBQ0sxNgkJCTAKKyNkZWZpbmUgSVNJRl9EQVRBX1BBQ0sxMgkJCTEKKyNkZWZpbmUgSVNJRl9EQVRBX1BBQ0s4CQkJCTIKKyNkZWZpbmUgSVNJRl9QSVhfT1JERVJfU0hJRlQJCQkxMQorI2RlZmluZSBJU0lGX0JXNjU2X0VOQUJMRQkJCSgweDAxIDw8IDUpCisKKy8qIE1PREVTRVQgcmVnaXN0ZXJzICovCisjZGVmaW5lIElTSUZfVkRIRE9VVF9JTlBVVAkJCSgweDAwIDw8IDApCisjZGVmaW5lIElTSUZfSU5QVVRfU0hJRlQJCQkxMgorI2RlZmluZSBJU0lGX1JBV19JTlBVVF9NT0RFCQkJMAorI2RlZmluZSBJU0lGX0ZJRF9QT0xfU0hJRlQJCQk0CisjZGVmaW5lIElTSUZfSERfUE9MX1NISUZUCQkJMworI2RlZmluZSBJU0lGX1ZEX1BPTF9TSElGVAkJCTIKKyNkZWZpbmUgSVNJRl9EQVRBUE9MX05PUk1BTAkJCTAKKyNkZWZpbmUgSVNJRl9EQVRBUE9MX1NISUZUCQkJNgorI2RlZmluZSBJU0lGX0VYV0VOX0RJU0FCTEUgCQkJMAorI2RlZmluZSBJU0lGX0VYV0VOX1NISUZUCQkJNQorI2RlZmluZSBJU0lGX0ZSTV9GTVRfU0hJRlQJCQk3CisjZGVmaW5lIElTSUZfREFUQVNGVF9TSElGVAkJCTgKKyNkZWZpbmUgSVNJRl9MUEZfU0hJRlQJCQkJMTQKKyNkZWZpbmUgSVNJRl9MUEZfTUFTSwkJCQkxCisKKy8qIEdBTU1BV0QgcmVnaXN0ZXJzICovCisjZGVmaW5lIElTSUZfQUxBV19HQU1BX1dEX01BU0sJCQkweEYKKyNkZWZpbmUgSVNJRl9BTEFXX0dBTUFfV0RfU0hJRlQJCQkxCisjZGVmaW5lIElTSUZfQUxBV19FTkFCTEUJCQkxCisjZGVmaW5lIElTSUZfR0FNTUFXRF9DRkFfU0hJRlQJCQk1CisKKy8qIEhTSVpFIHJlZ2lzdGVycyAqLworI2RlZmluZSBJU0lGX0hTSVpFX0ZMSVBfTUFTSwkJCTEKKyNkZWZpbmUgSVNJRl9IU0laRV9GTElQX1NISUZUCQkJMTIKKworLyogTUlTQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVNJRl9EUENNX0VOX1NISUZUCQkJMTIKKyNkZWZpbmUgSVNJRl9EUENNX1BSRURJQ1RPUl9TSElGVAkJMTMKKworLyogQmxhY2sgY2xhbXAgcmVsYXRlZCAqLworI2RlZmluZSBJU0lGX0JDX01PREVfQ09MT1JfU0hJRlQJCTQKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX01PREVfU0hJRlQJCQkxCisjZGVmaW5lIElTSUZfSE9SWl9CQ19XSU5fU0VMX1NISUZUCQk1CisjZGVmaW5lIElTSUZfSE9SWl9CQ19QSVhfTElNSVRfU0hJRlQJCTYKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1dJTl9IX1NJWkVfU0hJRlQJCTgKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1dJTl9WX1NJWkVfU0hJRlQJCTEyCisjZGVmaW5lCUlTSUZfVkVSVF9CQ19SU1RfVkFMX1NFTF9TSElGVAkJNAorI2RlZmluZSBJU0lGX1ZFUlRfQkNfTElORV9BVkVfQ09FRl9TSElGVAk4CisKKy8qIFZERkMgcmVnaXN0ZXJzICovCisjZGVmaW5lIElTSUZfVkRGQ19FTl9TSElGVAkJCTQKKyNkZWZpbmUgSVNJRl9WREZDX0NPUlJfTU9EX1NISUZUCQk1CisjZGVmaW5lIElTSUZfVkRGQ19DT1JSX1dIT0xFX0xOX1NISUZUCQk3CisjZGVmaW5lIElTSUZfVkRGQ19MRVZFTF9TSEZUX1NISUZUCQk4CisjZGVmaW5lIElTSUZfVkRGQ19QT1NfTUFTSwkJCTB4MUZGRgorI2RlZmluZSBJU0lGX0RGQ01FTUNUTF9ERkNNQVJTVF9TSElGVAkJMgorCisvKiBDU0MgcmVnaXN0ZXJzICovCisjZGVmaW5lIElTSUZfQ1NDX0NPRUZfSU5URUdfTUFTSwkJNworI2RlZmluZSBJU0lGX0NTQ19DT0VGX0RFQ0lNQUxfTUFTSwkJMHgxZgorI2RlZmluZSBJU0lGX0NTQ19DT0VGX0lOVEVHX1NISUZUCQk1CisjZGVmaW5lIElTSUZfQ1NDTV9NU0JfU0hJRlQJCQk4CisjZGVmaW5lIElTSUZfREZfQ1NDX1NQSF9NQVNLCQkJMHgxRkZGCisjZGVmaW5lIElTSUZfREZfQ1NDX0xOSF9NQVNLCQkJMHgxRkZGCisjZGVmaW5lIElTSUZfREZfQ1NDX1NMVl9NQVNLCQkJMHgxRkZGCisjZGVmaW5lIElTSUZfREZfQ1NDX0xOVl9NQVNLCQkJMHgxRkZGCisjZGVmaW5lIElTSUZfREZfTlVNTElORVMJCQkweDdGRkYKKyNkZWZpbmUgSVNJRl9ERl9OVU1QSVgJCQkJMHgxRkZGCisKKy8qIE9mZnNldHMgZm9yIExTQy9ERkMvR2FpbiAqLworI2RlZmluZSBJU0lGX0RBVEFfSF9PRkZTRVRfTUFTSwkJCTB4MUZGRgorI2RlZmluZSBJU0lGX0RBVEFfVl9PRkZTRVRfTUFTSwkJCTB4MUZGRgorCisvKiBMaW5lYXJpemF0aW9uICovCisjZGVmaW5lIElTSUZfTElOX0NPUlJTRlRfU0hJRlQJCQk0CisjZGVmaW5lIElTSUZfTElOX1NDQUxFX0ZBQ1RfSU5URUdfU0hJRlQJCTEwCisKKworLyogUGF0dGVybiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVNJRl9QR19FTgkJCQkoMSA8PCAzKQorI2RlZmluZSBJU0lGX1NFTF9QR19TUkMJCQkJKDMgPDwgNCkKKyNkZWZpbmUgSVNJRl9QR19WRF9QT0xfU0hJRlQJCQkwCisjZGVmaW5lIElTSUZfUEdfSERfUE9MX1NISUZUCQkJMQorCisvKnJhbmRvbSBvdGhlciBqdW5rKi8KKyNkZWZpbmUgSVNJRl9TWU5DRU5fVkRIREVOX01BU0sJCQkoMSA8PCAwKQorI2RlZmluZSBJU0lGX1NZTkNFTl9XRU5fTUFTSwkJCSgxIDw8IDEpCisjZGVmaW5lIElTSUZfU1lOQ0VOX1dFTl9TSElGVAkJCTEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBmZV9jYXB0dXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBmZV9jYXB0dXJlLmMKaW5kZXggZGUyMmJjOS4uODg1Y2Q1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYwpAQCAtMTA3LDkgKzEwNyw2IEBACiAJaW50IHZwZmVfcHJvYmVkOwogCS8qIG5hbWUgb2YgY2NkYyBkZXZpY2UgKi8KIAljaGFyIG5hbWVbMzJdOwotCS8qIGZvciBzdG9yaW5nIG1lbSBtYXBzIGZvciBDQ0RDICovCi0JaW50IGNjZGNfYWRkcl9zaXplOwotCXZvaWQgKl9faW9tZW0gY2NkY19hZGRyOwogfTsKIAogLyogZGF0YSBzdHJ1Y3R1cmVzICovCkBAIC0yMjksNyArMjI2LDYgQEAKIAlCVUdfT04oIWRldi0+aHdfb3BzLnNldF9pbWFnZV93aW5kb3cpOwogCUJVR19PTighZGV2LT5od19vcHMuZ2V0X2ltYWdlX3dpbmRvdyk7CiAJQlVHX09OKCFkZXYtPmh3X29wcy5nZXRfbGluZV9sZW5ndGgpOwotCUJVR19PTighZGV2LT5od19vcHMuc2V0ZmJhZGRyKTsKIAlCVUdfT04oIWRldi0+aHdfb3BzLmdldGZpZCk7CiAKIAltdXRleF9sb2NrKCZjY2RjX2xvY2spOwpAQCAtMjQwLDI1ICsyMzYsMjMgQEAKIAkJICogd2FsayB0aHJvdWdoIGl0IGR1cmluZyB2cGZlIHByb2JlCiAJCSAqLwogCQlwcmludGsoS0VSTl9FUlIgInZwZmUgY2FwdHVyZSBub3QgaW5pdGlhbGl6ZWRcbiIpOwotCQlyZXQgPSAtMTsKKwkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byB1bmxvY2s7CiAJfQogCiAJaWYgKHN0cmNtcChkZXYtPm5hbWUsIGNjZGNfY2ZnLT5uYW1lKSkgewogCQkvKiBpZ25vcmUgdGhpcyBjY2RjICovCi0JCXJldCA9IC0xOworCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9jazsKIAl9CiAKIAlpZiAoY2NkY19kZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjY2RjIGFscmVhZHkgcmVnaXN0ZXJlZFxuIik7Ci0JCXJldCA9IC0xOworCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9jazsKIAl9CiAKIAljY2RjX2RldiA9IGRldjsKLQlkZXYtPmh3X29wcy5zZXRfY2NkY19iYXNlKGNjZGNfY2ZnLT5jY2RjX2FkZHIsCi0JCQkJICBjY2RjX2NmZy0+Y2NkY19hZGRyX3NpemUpOwogdW5sb2NrOgogCW11dGV4X3VubG9jaygmY2NkY19sb2NrKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTc4Niw2MSArMTc4MCw2IEBACiAJcmV0dXJuIHZwZmVfZGV2OwogfQogCi1zdGF0aWMgdm9pZCB2cGZlX2Rpc2FibGVfY2xvY2soc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldikKLXsKLQlzdHJ1Y3QgdnBmZV9jb25maWcgKnZwZmVfY2ZnID0gdnBmZV9kZXYtPmNmZzsKLQotCWNsa19kaXNhYmxlKHZwZmVfY2ZnLT52cHNzY2xrKTsKLQljbGtfcHV0KHZwZmVfY2ZnLT52cHNzY2xrKTsKLQljbGtfZGlzYWJsZSh2cGZlX2NmZy0+c2xhdmVjbGspOwotCWNsa19wdXQodnBmZV9jZmctPnNsYXZlY2xrKTsKLQl2NGwyX2luZm8odnBmZV9kZXYtPnBkZXYtPmRyaXZlciwKLQkJICJ2cGZlIHZwc3MgbWFzdGVyICYgc2xhdmUgY2xvY2tzIGRpc2FibGVkXG4iKTsKLX0KLQotc3RhdGljIGludCB2cGZlX2VuYWJsZV9jbG9jayhzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2KQotewotCXN0cnVjdCB2cGZlX2NvbmZpZyAqdnBmZV9jZmcgPSB2cGZlX2Rldi0+Y2ZnOwotCWludCByZXQgPSAtRU5PRU5UOwotCi0JdnBmZV9jZmctPnZwc3NjbGsgPSBjbGtfZ2V0KHZwZmVfZGV2LT5wZGV2LCAidnBzc19tYXN0ZXIiKTsKLQlpZiAoTlVMTCA9PSB2cGZlX2NmZy0+dnBzc2NsaykgewotCQl2NGwyX2Vycih2cGZlX2Rldi0+cGRldi0+ZHJpdmVyLCAiTm8gY2xvY2sgZGVmaW5lZCBmb3IiCi0JCQkgInZwc3NfbWFzdGVyXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAoY2xrX2VuYWJsZSh2cGZlX2NmZy0+dnBzc2NsaykpIHsKLQkJdjRsMl9lcnIodnBmZV9kZXYtPnBkZXYtPmRyaXZlciwKLQkJCSJ2cGZlIHZwc3MgbWFzdGVyIGNsb2NrIG5vdCBlbmFibGVkXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCXY0bDJfaW5mbyh2cGZlX2Rldi0+cGRldi0+ZHJpdmVyLAotCQkgInZwZmUgdnBzcyBtYXN0ZXIgY2xvY2sgZW5hYmxlZFxuIik7Ci0KLQl2cGZlX2NmZy0+c2xhdmVjbGsgPSBjbGtfZ2V0KHZwZmVfZGV2LT5wZGV2LCAidnBzc19zbGF2ZSIpOwotCWlmIChOVUxMID09IHZwZmVfY2ZnLT5zbGF2ZWNsaykgewotCQl2NGwyX2Vycih2cGZlX2Rldi0+cGRldi0+ZHJpdmVyLAotCQkJIk5vIGNsb2NrIGRlZmluZWQgZm9yIHZwc3Mgc2xhdmVcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoY2xrX2VuYWJsZSh2cGZlX2NmZy0+c2xhdmVjbGspKSB7Ci0JCXY0bDJfZXJyKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsCi0JCQkgInZwZmUgdnBzcyBzbGF2ZSBjbG9jayBub3QgZW5hYmxlZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQl2NGwyX2luZm8odnBmZV9kZXYtPnBkZXYtPmRyaXZlciwgInZwZmUgdnBzcyBzbGF2ZSBjbG9jayBlbmFibGVkXG4iKTsKLQlyZXR1cm4gMDsKLW91dDoKLQlpZiAodnBmZV9jZmctPnZwc3NjbGspCi0JCWNsa19wdXQodnBmZV9jZmctPnZwc3NjbGspOwotCWlmICh2cGZlX2NmZy0+c2xhdmVjbGspCi0JCWNsa19wdXQodnBmZV9jZmctPnNsYXZlY2xrKTsKLQotCXJldHVybiAtMTsKLX0KLQogLyoKICAqIHZwZmVfcHJvYmUgOiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgZGV2aWNlIGVudHJpZXMgYnkgcmVnaXN0ZXIKICAqIGl0c2VsZiB0byB0aGUgVjRMMiBkcml2ZXIgYW5kIGluaXRpYWxpemVzIGZpZWxkcyBvZiBlYWNoCkBAIC0xODcwLDcgKzE4MDksNyBAQAogCiAJaWYgKE5VTEwgPT0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKIAkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwgIlVuYWJsZSB0byBnZXQgdnBmZSBjb25maWdcbiIpOwotCQlyZXQgPSAtRU5PRU5UOworCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIHByb2JlX2ZyZWVfZGV2X21lbTsKIAl9CiAKQEAgLTE4ODQsMTggKzE4MjMsMTMgQEAKIAkJZ290byBwcm9iZV9mcmVlX2Rldl9tZW07CiAJfQogCi0JLyogZW5hYmxlIHZwc3MgY2xvY2tzICovCi0JcmV0ID0gdnBmZV9lbmFibGVfY2xvY2sodnBmZV9kZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gcHJvYmVfZnJlZV9kZXZfbWVtOwotCiAJbXV0ZXhfbG9jaygmY2NkY19sb2NrKTsKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGNjZGMgY29uZmlndXJhdGlvbiAqLwogCWNjZGNfY2ZnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNjZGNfY29uZmlnKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKE5VTEwgPT0gY2NkY19jZmcpIHsKIAkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwKIAkJCSAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBjY2RjX2NmZ1xuIik7Ci0JCWdvdG8gcHJvYmVfZGlzYWJsZV9jbG9jazsKKwkJZ290byBwcm9iZV9mcmVlX2Rldl9tZW07CiAJfQogCiAJc3RybmNweShjY2RjX2NmZy0+bmFtZSwgdnBmZV9jZmctPmNjZGMsIDMyKTsKQEAgLTE5MDQsNjEgKzE4MzgsMzQgQEAKIAlpZiAoIXJlczEpIHsKIAkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwKIAkJCSAiVW5hYmxlIHRvIGdldCBpbnRlcnJ1cHQgZm9yIFZJTlQwXG4iKTsKLQkJcmV0ID0gLUVOT0VOVDsKLQkJZ290byBwcm9iZV9kaXNhYmxlX2Nsb2NrOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHByb2JlX2ZyZWVfY2NkY19jZmdfbWVtOwogCX0KIAl2cGZlX2Rldi0+Y2NkY19pcnEwID0gcmVzMS0+c3RhcnQ7CiAKIAkvKiBHZXQgVklOVDEgaXJxIHJlc291cmNlICovCi0JcmVzMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LAotCQkJCUlPUkVTT1VSQ0VfSVJRLCAxKTsKKwlyZXMxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAxKTsKIAlpZiAoIXJlczEpIHsKIAkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwKIAkJCSAiVW5hYmxlIHRvIGdldCBpbnRlcnJ1cHQgZm9yIFZJTlQxXG4iKTsKLQkJcmV0ID0gLUVOT0VOVDsKLQkJZ290byBwcm9iZV9kaXNhYmxlX2Nsb2NrOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHByb2JlX2ZyZWVfY2NkY19jZmdfbWVtOwogCX0KIAl2cGZlX2Rldi0+Y2NkY19pcnExID0gcmVzMS0+c3RhcnQ7CiAKLQkvKiBHZXQgYWRkcmVzcyBiYXNlIG9mIENDREMgKi8KLQlyZXMxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAoIXJlczEpIHsKLQkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwKLQkJCSJVbmFibGUgdG8gZ2V0IHJlZ2lzdGVyIGFkZHJlc3MgbWFwXG4iKTsKLQkJcmV0ID0gLUVOT0VOVDsKLQkJZ290byBwcm9iZV9kaXNhYmxlX2Nsb2NrOwotCX0KLQotCWNjZGNfY2ZnLT5jY2RjX2FkZHJfc2l6ZSA9IHJlczEtPmVuZCAtIHJlczEtPnN0YXJ0ICsgMTsKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMxLT5zdGFydCwgY2NkY19jZmctPmNjZGNfYWRkcl9zaXplLAotCQkJCXBkZXYtPmRldi5kcml2ZXItPm5hbWUpKSB7Ci0JCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCi0JCQkiRmFpbGVkIHJlcXVlc3RfbWVtX3JlZ2lvbiBmb3IgY2NkYyBiYXNlXG4iKTsKLQkJcmV0ID0gLUVOWElPOwotCQlnb3RvIHByb2JlX2Rpc2FibGVfY2xvY2s7Ci0JfQotCWNjZGNfY2ZnLT5jY2RjX2FkZHIgPSBpb3JlbWFwX25vY2FjaGUocmVzMS0+c3RhcnQsCi0JCQkJCSAgICAgY2NkY19jZmctPmNjZGNfYWRkcl9zaXplKTsKLQlpZiAoIWNjZGNfY2ZnLT5jY2RjX2FkZHIpIHsKLQkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwgIlVuYWJsZSB0byBpb3JlbWFwIGNjZGMgYWRkclxuIik7Ci0JCXJldCA9IC1FTlhJTzsKLQkJZ290byBwcm9iZV9vdXRfcmVsZWFzZV9tZW0xOwotCX0KLQogCXJldCA9IHJlcXVlc3RfaXJxKHZwZmVfZGV2LT5jY2RjX2lycTAsIHZwZmVfaXNyLCBJUlFGX0RJU0FCTEVELAogCQkJICAidnBmZV9jYXB0dXJlMCIsIHZwZmVfZGV2KTsKIAogCWlmICgwICE9IHJldCkgewogCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLCAiVW5hYmxlIHRvIHJlcXVlc3QgaW50ZXJydXB0XG4iKTsKLQkJZ290byBwcm9iZV9vdXRfdW5tYXAxOworCQlnb3RvIHByb2JlX2ZyZWVfY2NkY19jZmdfbWVtOwogCX0KIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdmlkZW8gZGV2aWNlICovCiAJdmZkID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CiAJaWYgKE5VTEwgPT0gdmZkKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCi0JCQkiVW5hYmxlIHRvIGFsbG9jIHZpZGVvIGRldmljZVxuIik7CisJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsICJVbmFibGUgdG8gYWxsb2MgdmlkZW8gZGV2aWNlXG4iKTsKIAkJZ290byBwcm9iZV9vdXRfcmVsZWFzZV9pcnE7CiAJfQogCkBAIC0yMDczLDEyICsxOTgwLDcgQEAKIAkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodnBmZV9kZXYtPnZpZGVvX2Rldik7CiBwcm9iZV9vdXRfcmVsZWFzZV9pcnE6CiAJZnJlZV9pcnEodnBmZV9kZXYtPmNjZGNfaXJxMCwgdnBmZV9kZXYpOwotcHJvYmVfb3V0X3VubWFwMToKLQlpb3VubWFwKGNjZGNfY2ZnLT5jY2RjX2FkZHIpOwotcHJvYmVfb3V0X3JlbGVhc2VfbWVtMToKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzMS0+c3RhcnQsIHJlczEtPmVuZCAtIHJlczEtPnN0YXJ0ICsgMSk7Ci1wcm9iZV9kaXNhYmxlX2Nsb2NrOgotCXZwZmVfZGlzYWJsZV9jbG9jayh2cGZlX2Rldik7Citwcm9iZV9mcmVlX2NjZGNfY2ZnX21lbToKIAltdXRleF91bmxvY2soJmNjZGNfbG9jayk7CiAJa2ZyZWUoY2NkY19jZmcpOwogcHJvYmVfZnJlZV9kZXZfbWVtOgpAQCAtMjA5Miw3ICsxOTk0LDYgQEAKIHN0YXRpYyBpbnQgX19kZXZleGl0IHZwZmVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJdjRsMl9pbmZvKHBkZXYtPmRldi5kcml2ZXIsICJ2cGZlX3JlbW92ZVxuIik7CiAKQEAgLTIxMDAsMTIgKzIwMDEsNiBAQAogCWtmcmVlKHZwZmVfZGV2LT5zZCk7CiAJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdnBmZV9kZXYtPnY0bDJfZGV2KTsKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh2cGZlX2Rldi0+dmlkZW9fZGV2KTsKLQltdXRleF9sb2NrKCZjY2RjX2xvY2spOwotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwotCWlvdW5tYXAoY2NkY19jZmctPmNjZGNfYWRkcik7Ci0JbXV0ZXhfdW5sb2NrKCZjY2RjX2xvY2spOwotCXZwZmVfZGlzYWJsZV9jbG9jayh2cGZlX2Rldik7CiAJa2ZyZWUodnBmZV9kZXYpOwogCWtmcmVlKGNjZGNfY2ZnKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cHNzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBzcy5jCmluZGV4IDdlZTcyZWMuLjc5MTg2ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cHNzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3Zwc3MuYwpAQCAtMTUsNyArMTUsNyBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKLSAqIGNvbW1vbiB2cHNzIGRyaXZlciBmb3IgYWxsIHZpZGVvIGRyaXZlcnMuCisgKiBjb21tb24gdnBzcyBzeXN0ZW0gbW9kdWxlIHBsYXRmb3JtIGRyaXZlciBmb3IgYWxsIHZpZGVvIGRyaXZlcnMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMzUsMTIgKzM1LDUyIEBACiAvKiBETTY0NHggZGVmaW5lcyAqLwogI2RlZmluZSBETTY0NFhfU0JMX1BDUl9WUFNTCQkoNCkKIAorI2RlZmluZSBETTM1NV9WUFNTQkxfSU5UU0VMCQkweDEwCisjZGVmaW5lIERNMzU1X1ZQU1NCTF9FVlRTRUwJCTB4MTQKIC8qIHZwc3MgQkwgcmVnaXN0ZXIgb2Zmc2V0cyAqLwogI2RlZmluZSBETTM1NV9WUFNTQkxfQ0NEQ01VWAkJMHgxYwogLyogdnBzcyBDTEsgcmVnaXN0ZXIgb2Zmc2V0cyAqLwogI2RlZmluZSBETTM1NV9WUFNTQ0xLX0NMS0NUUkwJCTB4MDQKIC8qIG1hc2tzIGFuZCBzaGlmdHMgKi8KICNkZWZpbmUgVlBTU19IU1NJU0VMX1NISUZUCQk0CisvKgorICogVkRJTlQwIC0gdnBzc19pbnQwLCBWRElOVDEgLSB2cHNzX2ludDEsIEgzQSAtIHZwc3NfaW50NCwKKyAqIElQSVBFX0lOVDFfU0RSIC0gdnBzc19pbnQ1CisgKi8KKyNkZWZpbmUgRE0zNTVfVlBTU0JMX0lOVFNFTF9ERUZBVUxUCTB4ZmY4M2ZmMTAKKy8qIFZFTkNJTlQgLSB2cHNzX2ludDggKi8KKyNkZWZpbmUgRE0zNTVfVlBTU0JMX0VWVFNFTF9ERUZBVUxUCTB4NAorCisjZGVmaW5lIERNMzY1X0lTUDVfUENDUiAJCTB4MDQKKyNkZWZpbmUgRE0zNjVfSVNQNV9JTlRTRUwxCQkweDEwCisjZGVmaW5lIERNMzY1X0lTUDVfSU5UU0VMMgkJMHgxNAorI2RlZmluZSBETTM2NV9JU1A1X0lOVFNFTDMJCTB4MTgKKyNkZWZpbmUgRE0zNjVfSVNQNV9DQ0RDTVVYIAkJMHgyMAorI2RlZmluZSBETTM2NV9JU1A1X1BHX0ZSQU1FX1NJWkUgCTB4MjgKKyNkZWZpbmUgRE0zNjVfVlBCRV9DTEtfQ1RSTCAJCTB4MDAKKy8qCisgKiB2cHNzIGludGVycnVwdHMuIFZESU5UMCAtIHZwc3NfaW50MCwgVkRJTlQxIC0gdnBzc19pbnQxLAorICogQUYgLSB2cHNzX2ludDMKKyAqLworI2RlZmluZSBETTM2NV9JU1A1X0lOVFNFTDFfREVGQVVMVAkweDBiMWYwMTAwCisvKiBBRVcgLSB2cHNzX2ludDYsIFJTWl9JTlRfRE1BIC0gdnBzc19pbnQ1ICovCisjZGVmaW5lIERNMzY1X0lTUDVfSU5UU0VMMl9ERUZBVUxUCTB4MWYwYTBmMWYKKy8qIFZFTkMgLSB2cHNzX2ludDggKi8KKyNkZWZpbmUgRE0zNjVfSVNQNV9JTlRTRUwzX0RFRkFVTFQJMHgwMDAwMDAxNQorCisvKiBtYXNrcyBhbmQgc2hpZnRzIGZvciBETTM2NSovCisjZGVmaW5lIERNMzY1X0NDRENfUEdfVkRfUE9MX1NISUZUIAkwCisjZGVmaW5lIERNMzY1X0NDRENfUEdfSERfUE9MX1NISUZUIAkxCisKKyNkZWZpbmUgQ0NEX1NSQ19TRUxfTUFTSwkJKEJJVF9NQVNLKDUpIHwgQklUX01BU0soNCkpCisjZGVmaW5lIENDRF9TUkNfU0VMX1NISUZUCQk0CisKKy8qIERpZmZlcmVudCBTb0MgcGxhdGZvcm1zIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciAqLworZW51bSB2cHNzX3BsYXRmb3JtX3R5cGUgeworCURNNjQ0WCwKKwlETTM1NSwKKwlETTM2NSwKK307CiAKIC8qCiAgKiB2cHNzIG9wZXJhdGlvbnMuIERlcGVuZHMgb24gcGxhdGZvcm0uIE5vdCBhbGwgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUKQEAgLTU5LDEzICs5OSw5IEBACiAKIC8qIHZwc3MgY29uZmlndXJhdGlvbiAqLwogc3RydWN0IHZwc3Nfb3Blcl9jb25maWcgewotCV9faW9tZW0gdm9pZCAqdnBzc19ibF9yZWdzX2Jhc2U7Ci0JX19pb21lbSB2b2lkICp2cHNzX3JlZ3NfYmFzZTsKLQlzdHJ1Y3QgcmVzb3VyY2UJCSpyMTsKLQlyZXNvdXJjZV9zaXplX3QJCWxlbjE7Ci0Jc3RydWN0IHJlc291cmNlCQkqcjI7Ci0JcmVzb3VyY2Vfc2l6ZV90CQlsZW4yOwotCWNoYXIgdnBzc19uYW1lWzMyXTsKKwlfX2lvbWVtIHZvaWQgKnZwc3NfcmVnc19iYXNlMDsKKwlfX2lvbWVtIHZvaWQgKnZwc3NfcmVnc19iYXNlMTsKKwllbnVtIHZwc3NfcGxhdGZvcm1fdHlwZSBwbGF0Zm9ybTsKIAlzcGlubG9ja190IHZwc3NfbG9jazsKIAlzdHJ1Y3QgdnBzc19od19vcHMgaHdfb3BzOwogfTsKQEAgLTc1LDIyICsxMTEsNDYgQEAKIC8qIHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcyAqLwogc3RhdGljIGlubGluZSB1MzIgYmxfcmVncih1MzIgb2Zmc2V0KQogewotCXJldHVybiBfX3Jhd19yZWFkbChvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSArIG9mZnNldCk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMCArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBibF9yZWd3KHUzMiB2YWwsIHUzMiBvZmZzZXQpCiB7Ci0JX19yYXdfd3JpdGVsKHZhbCwgb3Blcl9jZmcudnBzc19ibF9yZWdzX2Jhc2UgKyBvZmZzZXQpOworCV9fcmF3X3dyaXRlbCh2YWwsIG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMCArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIHZwc3NfcmVncih1MzIgb2Zmc2V0KQogewotCXJldHVybiBfX3Jhd19yZWFkbChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZSArIG9mZnNldCk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMSArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2cHNzX3JlZ3codTMyIHZhbCwgdTMyIG9mZnNldCkKIHsKLQlfX3Jhd193cml0ZWwodmFsLCBvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZSArIG9mZnNldCk7CisJX19yYXdfd3JpdGVsKHZhbCwgb3Blcl9jZmcudnBzc19yZWdzX2Jhc2UxICsgb2Zmc2V0KTsKK30KKworLyogRm9yIERNMzY1IG9ubHkgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGlzcDVfcmVhZCh1MzIgb2Zmc2V0KQoreworCXJldHVybiBfX3Jhd19yZWFkbChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTAgKyBvZmZzZXQpOworfQorCisvKiBGb3IgRE0zNjUgb25seSAqLworc3RhdGljIGlubGluZSB2b2lkIGlzcDVfd3JpdGUodTMyIHZhbCwgdTMyIG9mZnNldCkKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTAgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBkbTM2NV9zZWxlY3RfY2NkY19zb3VyY2UoZW51bSB2cHNzX2NjZGNfc291cmNlX3NlbCBzcmNfc2VsKQoreworCXUzMiB0ZW1wID0gaXNwNV9yZWFkKERNMzY1X0lTUDVfQ0NEQ01VWCkgJiB+Q0NEX1NSQ19TRUxfTUFTSzsKKworCS8qIGlmIHdlIGFyZSB1c2luZyBwYXR0ZXJuIGdlbmVyYXRvciwgZW5hYmxlIGl0ICovCisJaWYgKHNyY19zZWwgPT0gVlBTU19QR0xQQksgfHwgc3JjX3NlbCA9PSBWUFNTX0NDRENQRykKKwkJdGVtcCB8PSAweDA4OworCisJdGVtcCB8PSAoc3JjX3NlbCA8PCBDQ0RfU1JDX1NFTF9TSElGVCk7CisJaXNwNV93cml0ZSh0ZW1wLCBETTM2NV9JU1A1X0NDRENNVVgpOwogfQogCiBzdGF0aWMgdm9pZCBkbTM1NV9zZWxlY3RfY2NkY19zb3VyY2UoZW51bSB2cHNzX2NjZGNfc291cmNlX3NlbCBzcmNfc2VsKQpAQCAtMTAxLDkgKzE2MSw5IEBACiBpbnQgdnBzc19zZWxlY3RfY2NkY19zb3VyY2UoZW51bSB2cHNzX2NjZGNfc291cmNlX3NlbCBzcmNfc2VsKQogewogCWlmICghb3Blcl9jZmcuaHdfb3BzLnNlbGVjdF9jY2RjX3NvdXJjZSkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRtMzU1X3NlbGVjdF9jY2RjX3NvdXJjZShzcmNfc2VsKTsKKwlvcGVyX2NmZy5od19vcHMuc2VsZWN0X2NjZGNfc291cmNlKHNyY19zZWwpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh2cHNzX3NlbGVjdF9jY2RjX3NvdXJjZSk7CkBAIC0xMTQsNyArMTc0LDcgQEAKIAogCWlmICh3Ymxfc2VsIDwgVlBTU19QQ1JfQUVXX1dCTF8wIHx8CiAJICAgIHdibF9zZWwgPiBWUFNTX1BDUl9DQ0RDX1dCTF9PKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCiAJLyogd3JpdGluZyBhIDAgY2xlYXIgdGhlIG92ZXJmbG93ICovCiAJbWFzayA9IH4obWFzayA8PCB3Ymxfc2VsKTsKQEAgLTEyNiw3ICsxODYsNyBAQAogaW50IHZwc3NfY2xlYXJfd2JsX292ZXJmbG93KGVudW0gdnBzc193Ymxfc2VsIHdibF9zZWwpCiB7CiAJaWYgKCFvcGVyX2NmZy5od19vcHMuY2xlYXJfd2JsX292ZXJmbG93KQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIG9wZXJfY2ZnLmh3X29wcy5jbGVhcl93Ymxfb3ZlcmZsb3cod2JsX3NlbCk7CiB9CkBAIC0xNjYsNyArMjI2LDcgQEAKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgImRtMzU1X2VuYWJsZV9jbG9jazoiCiAJCQkJIiBJbnZhbGlkIHNlbGVjdG9yOiAlZFxuIiwgY2xvY2tfc2VsKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb3Blcl9jZmcudnBzc19sb2NrLCBmbGFncyk7CkBAIC0xODEsMTAwICsyNDEsMjIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZG0zNjVfZW5hYmxlX2Nsb2NrKGVudW0gdnBzc19jbG9ja19zZWwgY2xvY2tfc2VsLCBpbnQgZW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdXRlbXAsIG1hc2sgPSAweDEsIHNoaWZ0ID0gMCwgb2Zmc2V0ID0gRE0zNjVfSVNQNV9QQ0NSOworCXUzMiAoKnJlYWQpKHUzMiBvZmZzZXQpID0gaXNwNV9yZWFkOworCXZvaWQoKndyaXRlKSh1MzIgdmFsLCB1MzIgb2Zmc2V0KSA9IGlzcDVfd3JpdGU7CisKKwlzd2l0Y2ggKGNsb2NrX3NlbCkgeworCWNhc2UgVlBTU19CTF9DTE9DSzoKKwkJYnJlYWs7CisJY2FzZSBWUFNTX0NDRENfQ0xPQ0s6CisJCXNoaWZ0ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX0gzQV9DTE9DSzoKKwkJc2hpZnQgPSAyOworCQlicmVhazsKKwljYXNlIFZQU1NfUlNaX0NMT0NLOgorCQlzaGlmdCA9IDM7CisJCWJyZWFrOworCWNhc2UgVlBTU19JUElQRV9DTE9DSzoKKwkJc2hpZnQgPSA0OworCQlicmVhazsKKwljYXNlIFZQU1NfSVBJUEVJRl9DTE9DSzoKKwkJc2hpZnQgPSA1OworCQlicmVhazsKKwljYXNlIFZQU1NfUENMS19JTlRFUk5BTDoKKwkJc2hpZnQgPSA2OworCQlicmVhazsKKwljYXNlIFZQU1NfUFNZTkNfQ0xPQ0tfU0VMOgorCQlzaGlmdCA9IDc7CisJCWJyZWFrOworCWNhc2UgVlBTU19WUEJFX0NMT0NLOgorCQlyZWFkID0gdnBzc19yZWdyOworCQl3cml0ZSA9IHZwc3NfcmVndzsKKwkJb2Zmc2V0ID0gRE0zNjVfVlBCRV9DTEtfQ1RSTDsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX1ZFTkNfQ0xPQ0tfU0VMOgorCQlzaGlmdCA9IDI7CisJCXJlYWQgPSB2cHNzX3JlZ3I7CisJCXdyaXRlID0gdnBzc19yZWd3OworCQlvZmZzZXQgPSBETTM2NV9WUEJFX0NMS19DVFJMOworCQlicmVhazsKKwljYXNlIFZQU1NfTERDX0NMT0NLOgorCQlzaGlmdCA9IDM7CisJCXJlYWQgPSB2cHNzX3JlZ3I7CisJCXdyaXRlID0gdnBzc19yZWd3OworCQlvZmZzZXQgPSBETTM2NV9WUEJFX0NMS19DVFJMOworCQlicmVhazsKKwljYXNlIFZQU1NfRkRJRl9DTE9DSzoKKwkJc2hpZnQgPSA0OworCQlyZWFkID0gdnBzc19yZWdyOworCQl3cml0ZSA9IHZwc3NfcmVndzsKKwkJb2Zmc2V0ID0gRE0zNjVfVlBCRV9DTEtfQ1RSTDsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX09TRF9DTE9DS19TRUw6CisJCXNoaWZ0ID0gNjsKKwkJcmVhZCA9IHZwc3NfcmVncjsKKwkJd3JpdGUgPSB2cHNzX3JlZ3c7CisJCW9mZnNldCA9IERNMzY1X1ZQQkVfQ0xLX0NUUkw7CisJCWJyZWFrOworCWNhc2UgVlBTU19MRENfQ0xPQ0tfU0VMOgorCQlzaGlmdCA9IDc7CisJCXJlYWQgPSB2cHNzX3JlZ3I7CisJCXdyaXRlID0gdnBzc19yZWd3OworCQlvZmZzZXQgPSBETTM2NV9WUEJFX0NMS19DVFJMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgImRtMzY1X2VuYWJsZV9jbG9jazogSW52YWxpZCBzZWxlY3RvcjogJWRcbiIsCisJCSAgICAgICBjbG9ja19zZWwpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9wZXJfY2ZnLnZwc3NfbG9jaywgZmxhZ3MpOworCXV0ZW1wID0gcmVhZChvZmZzZXQpOworCWlmICghZW4pIHsKKwkJbWFzayA9IH5tYXNrOworCQl1dGVtcCAmPSAobWFzayA8PCBzaGlmdCk7CisJfSBlbHNlCisJCXV0ZW1wIHw9IChtYXNrIDw8IHNoaWZ0KTsKKworCXdyaXRlKHV0ZW1wLCBvZmZzZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9wZXJfY2ZnLnZwc3NfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKIGludCB2cHNzX2VuYWJsZV9jbG9jayhlbnVtIHZwc3NfY2xvY2tfc2VsIGNsb2NrX3NlbCwgaW50IGVuKQogewogCWlmICghb3Blcl9jZmcuaHdfb3BzLmVuYWJsZV9jbG9jaykKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiBvcGVyX2NmZy5od19vcHMuZW5hYmxlX2Nsb2NrKGNsb2NrX3NlbCwgZW4pOwogfQogRVhQT1JUX1NZTUJPTCh2cHNzX2VuYWJsZV9jbG9jayk7CiAKK3ZvaWQgZG0zNjVfdnBzc19zZXRfc3luY19wb2woc3RydWN0IHZwc3Nfc3luY19wb2wgc3luYykKK3sKKwlpbnQgdmFsID0gMDsKKwl2YWwgPSBpc3A1X3JlYWQoRE0zNjVfSVNQNV9DQ0RDTVVYKTsKKworCXZhbCB8PSAoc3luYy5jY2RwZ19oZHBvbCA8PCBETTM2NV9DQ0RDX1BHX0hEX1BPTF9TSElGVCk7CisJdmFsIHw9IChzeW5jLmNjZHBnX3ZkcG9sIDw8IERNMzY1X0NDRENfUEdfVkRfUE9MX1NISUZUKTsKKworCWlzcDVfd3JpdGUodmFsLCBETTM2NV9JU1A1X0NDRENNVVgpOworfQorRVhQT1JUX1NZTUJPTChkbTM2NV92cHNzX3NldF9zeW5jX3BvbCk7CisKK3ZvaWQgZG0zNjVfdnBzc19zZXRfcGdfZnJhbWVfc2l6ZShzdHJ1Y3QgdnBzc19wZ19mcmFtZV9zaXplIGZyYW1lX3NpemUpCit7CisJaW50IGN1cnJlbnRfcmVnID0gKChmcmFtZV9zaXplLmhscGZyID4+IDEpIC0gMSkgPDwgMTY7CisKKwljdXJyZW50X3JlZyB8PSAoZnJhbWVfc2l6ZS5wcGxlbiAtIDEpOworCWlzcDVfd3JpdGUoY3VycmVudF9yZWcsIERNMzY1X0lTUDVfUEdfRlJBTUVfU0laRSk7Cit9CitFWFBPUlRfU1lNQk9MKGRtMzY1X3Zwc3Nfc2V0X3BnX2ZyYW1lX3NpemUpOworCiBzdGF0aWMgaW50IF9faW5pdCB2cHNzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JaW50IHN0YXR1cywgZG0zNTUgPSAwOworCXN0cnVjdCByZXNvdXJjZQkJKnIxLCAqcjI7CisJY2hhciAqcGxhdGZvcm1fbmFtZTsKKwlpbnQgc3RhdHVzOwogCiAJaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCXN0cmNweShvcGVyX2NmZy52cHNzX25hbWUsIHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKTsKIAotCWlmICghc3RyY21wKG9wZXJfY2ZnLnZwc3NfbmFtZSwgImRtMzU1X3Zwc3MiKSkKLQkJZG0zNTUgPSAxOwotCWVsc2UgaWYgKHN0cmNtcChvcGVyX2NmZy52cHNzX25hbWUsICJkbTY0NHhfdnBzcyIpKSB7CisJcGxhdGZvcm1fbmFtZSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghc3RyY21wKHBsYXRmb3JtX25hbWUsICJkbTM1NV92cHNzIikpCisJCW9wZXJfY2ZnLnBsYXRmb3JtID0gRE0zNTU7CisJZWxzZSBpZiAoIXN0cmNtcChwbGF0Zm9ybV9uYW1lLCAiZG0zNjVfdnBzcyIpKQorCQlvcGVyX2NmZy5wbGF0Zm9ybSA9IERNMzY1OworCWVsc2UgaWYgKCFzdHJjbXAocGxhdGZvcm1fbmFtZSwgImRtNjQ0eF92cHNzIikpCisJCW9wZXJfY2ZnLnBsYXRmb3JtID0gRE02NDRYOworCWVsc2UgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ2cHNzIGRyaXZlciBub3Qgc3VwcG9ydGVkIG9uIgogCQkJIiB0aGlzIHBsYXRmb3JtXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIHZwc3MgcHJvYmVkXG4iLCBvcGVyX2NmZy52cHNzX25hbWUpOwotCW9wZXJfY2ZnLnIxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAoIW9wZXJfY2ZnLnIxKQorCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyB2cHNzIHByb2JlZFxuIiwgcGxhdGZvcm1fbmFtZSk7CisJcjEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcjEpCiAJCXJldHVybiAtRU5PRU5UOwogCi0Jb3Blcl9jZmcubGVuMSA9IG9wZXJfY2ZnLnIxLT5lbmQgLSBvcGVyX2NmZy5yMS0+c3RhcnQgKyAxOwotCi0Jb3Blcl9jZmcucjEgPSByZXF1ZXN0X21lbV9yZWdpb24ob3Blcl9jZmcucjEtPnN0YXJ0LCBvcGVyX2NmZy5sZW4xLAotCQkJCQkgb3Blcl9jZmcucjEtPm5hbWUpOwotCWlmICghb3Blcl9jZmcucjEpCisJcjEgPSByZXF1ZXN0X21lbV9yZWdpb24ocjEtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIxKSwgcjEtPm5hbWUpOworCWlmICghcjEpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSA9IGlvcmVtYXAob3Blcl9jZmcucjEtPnN0YXJ0LCBvcGVyX2NmZy5sZW4xKTsKLQlpZiAoIW9wZXJfY2ZnLnZwc3NfYmxfcmVnc19iYXNlKSB7CisJb3Blcl9jZmcudnBzc19yZWdzX2Jhc2UwID0gaW9yZW1hcChyMS0+c3RhcnQsIHJlc291cmNlX3NpemUocjEpKTsKKwlpZiAoIW9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMCkgewogCQlzdGF0dXMgPSAtRUJVU1k7CiAJCWdvdG8gZmFpbDE7CiAJfQogCi0JaWYgKGRtMzU1KSB7Ci0JCW9wZXJfY2ZnLnIyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKLQkJaWYgKCFvcGVyX2NmZy5yMikgeworCWlmIChvcGVyX2NmZy5wbGF0Zm9ybSA9PSBETTM1NSB8fCBvcGVyX2NmZy5wbGF0Zm9ybSA9PSBETTM2NSkgeworCQlyMiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJCWlmICghcjIpIHsKIAkJCXN0YXR1cyA9IC1FTk9FTlQ7CiAJCQlnb3RvIGZhaWwyOwogCQl9Ci0JCW9wZXJfY2ZnLmxlbjIgPSBvcGVyX2NmZy5yMi0+ZW5kIC0gb3Blcl9jZmcucjItPnN0YXJ0ICsgMTsKLQkJb3Blcl9jZmcucjIgPSByZXF1ZXN0X21lbV9yZWdpb24ob3Blcl9jZmcucjItPnN0YXJ0LAotCQkJCQkJIG9wZXJfY2ZnLmxlbjIsCi0JCQkJCQkgb3Blcl9jZmcucjItPm5hbWUpOwotCQlpZiAoIW9wZXJfY2ZnLnIyKSB7CisJCXIyID0gcmVxdWVzdF9tZW1fcmVnaW9uKHIyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyMiksIHIyLT5uYW1lKTsKKwkJaWYgKCFyMikgewogCQkJc3RhdHVzID0gLUVCVVNZOwogCQkJZ290byBmYWlsMjsKIAkJfQogCi0JCW9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlID0gaW9yZW1hcChvcGVyX2NmZy5yMi0+c3RhcnQsCi0JCQkJCQkgIG9wZXJfY2ZnLmxlbjIpOwotCQlpZiAoIW9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlKSB7CisJCW9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMSA9IGlvcmVtYXAocjItPnN0YXJ0LAorCQkJCQkJICAgcmVzb3VyY2Vfc2l6ZShyMikpOworCQlpZiAoIW9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMSkgewogCQkJc3RhdHVzID0gLUVCVVNZOwogCQkJZ290byBmYWlsMzsKIAkJfQogCX0KIAotCWlmIChkbTM1NSkgeworCWlmIChvcGVyX2NmZy5wbGF0Zm9ybSA9PSBETTM1NSkgewogCQlvcGVyX2NmZy5od19vcHMuZW5hYmxlX2Nsb2NrID0gZG0zNTVfZW5hYmxlX2Nsb2NrOwogCQlvcGVyX2NmZy5od19vcHMuc2VsZWN0X2NjZGNfc291cmNlID0gZG0zNTVfc2VsZWN0X2NjZGNfc291cmNlOworCQkvKiBTZXR1cCB2cHNzIGludGVycnVwdHMgKi8KKwkJYmxfcmVndyhETTM1NV9WUFNTQkxfSU5UU0VMX0RFRkFVTFQsIERNMzU1X1ZQU1NCTF9JTlRTRUwpOworCQlibF9yZWd3KERNMzU1X1ZQU1NCTF9FVlRTRUxfREVGQVVMVCwgRE0zNTVfVlBTU0JMX0VWVFNFTCk7CisJfSBlbHNlIGlmIChvcGVyX2NmZy5wbGF0Zm9ybSA9PSBETTM2NSkgeworCQlvcGVyX2NmZy5od19vcHMuZW5hYmxlX2Nsb2NrID0gZG0zNjVfZW5hYmxlX2Nsb2NrOworCQlvcGVyX2NmZy5od19vcHMuc2VsZWN0X2NjZGNfc291cmNlID0gZG0zNjVfc2VsZWN0X2NjZGNfc291cmNlOworCQkvKiBTZXR1cCB2cHNzIGludGVycnVwdHMgKi8KKwkJaXNwNV93cml0ZShETTM2NV9JU1A1X0lOVFNFTDFfREVGQVVMVCwgRE0zNjVfSVNQNV9JTlRTRUwxKTsKKwkJaXNwNV93cml0ZShETTM2NV9JU1A1X0lOVFNFTDJfREVGQVVMVCwgRE0zNjVfSVNQNV9JTlRTRUwyKTsKKwkJaXNwNV93cml0ZShETTM2NV9JU1A1X0lOVFNFTDNfREVGQVVMVCwgRE0zNjVfSVNQNV9JTlRTRUwzKTsKIAl9IGVsc2UKIAkJb3Blcl9jZmcuaHdfb3BzLmNsZWFyX3dibF9vdmVyZmxvdyA9IGRtNjQ0eF9jbGVhcl93Ymxfb3ZlcmZsb3c7CiAKIAlzcGluX2xvY2tfaW5pdCgmb3Blcl9jZmcudnBzc19sb2NrKTsKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgdnBzcyBwcm9iZSBzdWNjZXNzXG4iLCBvcGVyX2NmZy52cHNzX25hbWUpOworCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyB2cHNzIHByb2JlIHN1Y2Nlc3NcbiIsIHBsYXRmb3JtX25hbWUpOwogCXJldHVybiAwOwogCiBmYWlsMzoKLQlyZWxlYXNlX21lbV9yZWdpb24ob3Blcl9jZmcucjItPnN0YXJ0LCBvcGVyX2NmZy5sZW4yKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocjItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIyKSk7CiBmYWlsMjoKLQlpb3VubWFwKG9wZXJfY2ZnLnZwc3NfYmxfcmVnc19iYXNlKTsKKwlpb3VubWFwKG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMCk7CiBmYWlsMToKLQlyZWxlYXNlX21lbV9yZWdpb24ob3Blcl9jZmcucjEtPnN0YXJ0LCBvcGVyX2NmZy5sZW4xKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocjEtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIxKSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgdnBzc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlpb3VubWFwKG9wZXJfY2ZnLnZwc3NfYmxfcmVnc19iYXNlKTsKLQlyZWxlYXNlX21lbV9yZWdpb24ob3Blcl9jZmcucjEtPnN0YXJ0LCBvcGVyX2NmZy5sZW4xKTsKLQlpZiAoIXN0cmNtcChvcGVyX2NmZy52cHNzX25hbWUsICJkbTM1NV92cHNzIikpIHsKLQkJaW91bm1hcChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZSk7Ci0JCXJlbGVhc2VfbWVtX3JlZ2lvbihvcGVyX2NmZy5yMi0+c3RhcnQsIG9wZXJfY2ZnLmxlbjIpOworCXN0cnVjdCByZXNvdXJjZQkJKnJlczsKKworCWlvdW5tYXAob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UwKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmIChvcGVyX2NmZy5wbGF0Zm9ybSA9PSBETTM1NSB8fCBvcGVyX2NmZy5wbGF0Zm9ybSA9PSBETTM2NSkgeworCQlpb3VubWFwKG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMSk7CisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKaW5kZXggMjUxMDAwMC4uZWNiY2VmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKQEAgLTIzMiw2ICsyMzIsMTIgQEAKIAl7CS0xLAkJLTEsCS0xLAkJLTF9LAogfTsKIAorc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBkaWtvbV9kazMwMF9kaWdpdGFsW10gPSB7CisJe0VNMjhYWF9SMDhfR1BJTywJMHg2ZSwJfkVNX0dQSU9fNCwJMTB9LAorCXtFTTI4ODBfUjA0X0dQTywJMHgwOCwJMHhmZiwJCTEwfSwKKwl7IC0xLAkJCS0xLAktMSwJCS0xfSwKK307CisKIAogLyoKICAqICBCb2FyZCBkZWZpbml0aW9ucwpAQCAtNDYxLDIxICs0NjcsMzAgQEAKIAkJLm5hbWUgICAgICAgICA9ICJMZWFkdGVrIFdpbmZhc3QgVVNCIElJIERlbHV4ZSIsCiAJCS52YWxpZCAgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLAotCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAorCQkuaGFzX2lyX2kyYyAgID0gMSwKKwkJLnR2YXVkaW9fYWRkciA9IDB4NTgsCisJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQgfAorCQkJCVREQTk4ODdfUE9SVDJfQUNUSVZFIHwKKwkJCQlUREE5ODg3X1FTUywKIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAorCQkuYWRlY29kZXIgICAgID0gRU0yOFhYX1RWQVVESU8sCiAJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCi0JCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTIsCi0JCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFNCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0FVWCwKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKLQkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMCwKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFNSwKIAkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKLQkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMCwKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKIAkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKKwkJCS5yYWRpbwkgID0geworCQkJLnR5cGUgICAgID0gRU0yOFhYX1JBRElPLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfQVVYLAorCQkJfQogCX0sCiAJW0VNMjgyMF9CT0FSRF9WSURFT0xPR1lfMjBLMTRYVVNCXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJWaWRlb2xvZ3kgMjBLMTRYVVNCIFVTQjIuMCIsCkBAIC03MzAsMTEgKzc0NSwxMiBAQAogCiAJW0VNMjg4MF9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFNfRlJdID0gewogCQkubmFtZSAgICAgICAgID0gIlRlcnJhdGVjIEh5YnJpZCBYUyBTZWNhbSIsCi0JCS52YWxpZCAgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKIAkJLmhhc19tc3AzNHh4ICA9IDEsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9YQzIwMjgsCiAJCS50dW5lcl9ncGlvICAgPSBkZWZhdWx0X3R1bmVyX2dwaW8sCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLmhhc19kdmIgICAgICA9IDEsCisJCS5kdmJfZ3BpbyAgICAgPSBkZWZhdWx0X2RpZ2l0YWwsCiAJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCkBAIC0xMjY1LDYgKzEyODEsNyBAQAogCQkuZGVjb2Rlcgk9IEVNMjhYWF9TQUE3MTFYLAogCQkuaGFzX2R2Ygk9IDEsCiAJCS5kdmJfZ3Bpbwk9IGVtMjg4Ml9rd29ybGRfMzE1dV9kaWdpdGFsLAorCQkuaXJfY29kZXMJPSAmaXJfY29kZXNfa3dvcmxkXzMxNXVfdGFibGUsCiAJCS54Y2xrCQk9IEVNMjhYWF9YQ0xLX0ZSRVFVRU5DWV8xMk1IWiwKIAkJLmkyY19zcGVlZAk9IEVNMjhYWF9JMkNfQ0xLX1dBSVRfRU5BQkxFLAogCQkvKiBBbmFsb2cgbW9kZSAtIHN0aWxsIG5vdCByZWFkeSAqLwpAQCAtMTQzMSw2ICsxNDQ4LDIxIEBACiAJCQkuZ3BpbyAgICAgPSBoYXVwcGF1Z2Vfd2ludHZfaHZyXzkwMF9hbmFsb2csCiAJCX0gfSwKIAl9LAorCVtFTTI4ODJfQk9BUkRfRElLT01fREszMDBdID0geworCQkubmFtZSAgICAgICAgID0gIkRpa29tIERLMzAwIiwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnR1bmVyX2dwaW8gICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkubXRzX2Zpcm13YXJlID0gMSwKKwkJLmhhc19kdmIgICAgICA9IDEsCisJCS5kdmJfZ3BpbyAgICAgPSBkaWtvbV9kazMwMF9kaWdpdGFsLAorCQkuaW5wdXQgICAgICAgID0geyB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCQkuZ3BpbyAgICAgPSBkZWZhdWx0X2FuYWxvZywKKwkJfSB9LAorCX0sCiAJW0VNMjg4M19CT0FSRF9LV09STERfSFlCUklEXzMzMFVdID0gewogCQkubmFtZSAgICAgICAgID0gIkt3b3JsZCBQbHVzVFYgSEQgSHlicmlkIDMzMCIsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9YQzIwMjgsCkBAIC0xNzUxLDYgKzE3ODMsNyBAQAogCXsweGNlZTQ0YTk5LCBFTTI4ODJfQk9BUkRfRVZHQV9JTkRUVUJFLCBUVU5FUl9YQzIwMjh9LAogCXsweGI4ODQ2YjIwLCBFTTI4ODFfQk9BUkRfUElOTkFDTEVfSFlCUklEX1BSTywgVFVORVJfWEMyMDI4fSwKIAl7MHg2M2Y2NTNiZCwgRU0yODcwX0JPQVJEX1JFRERPX0RWQl9DX1VTQl9CT1gsIFRVTkVSX0FCU0VOVH0sCisJezB4NGU5MTM0NDIsIEVNMjg4Ml9CT0FSRF9ESUtPTV9ESzMwMCwgVFVORVJfWEMyMDI4fSwKIH07CiAKIC8qIEkyQyBkZXZpY2VsaXN0IGhhc2ggdGFibGUgZm9yIGRldmljZXMgd2l0aCBnZW5lcmljIFVTQiBJRHMgKi8KQEAgLTIxMDMsNiArMjEzNiw3IEBACiAJCWN0bC0+ZGVtb2QgPSBYQzMwMjhfRkVfREVGQVVMVDsKIAkJYnJlYWs7CiAJY2FzZSBFTTI4ODNfQk9BUkRfS1dPUkxEX0hZQlJJRF8zMzBVOgorCWNhc2UgRU0yODgyX0JPQVJEX0RJS09NX0RLMzAwOgogCQljdGwtPmRlbW9kID0gWEMzMDI4X0ZFX0NISU5BOwogCQljdGwtPmZuYW1lID0gWEMyMDI4X0RFRkFVTFRfRklSTVdBUkU7CiAJCWJyZWFrOwpAQCAtMjI1OSw5ICsyMjkzLDEyIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogdm9pZCBlbTI4eHhfcmVnaXN0ZXJfaTJjX2lyKHN0cnVjdCBlbTI4eHggKmRldikKIHsKKwkvKiBMZWFkdGVrIHdpbmZhc3QgdHYgVVNCSUkgZGVsdXhlIGNhbiBmaW5kIGEgbm9uIHdvcmtpbmcgSVItZGV2aWNlICovCisJLyogYXQgYWRkcmVzcyAweDE4LCBzbyBpZiB0aGF0IGFkZHJlc3MgaXMgbmVlZGVkIGZvciBhbm90aGVyIGJvYXJkIGluICovCisJLyogdGhlIGZ1dHVyZSwgcGxlYXNlIHB1dCBpdCBhZnRlciAweDFmLiAqLwogCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwogCWNvbnN0IHVuc2lnbmVkIHNob3J0IGFkZHJfbGlzdFtdID0gewotCQkgMHgzMCwgMHg0NywgSTJDX0NMSUVOVF9FTkQKKwkJIDB4MWYsIDB4MzAsIDB4NDcsIEkyQ19DTElFTlRfRU5ECiAJfTsKIAogCWlmIChkaXNhYmxlX2lyKQpAQCAtMjI4OCw2ICsyMzI1LDEwIEBACiAJCWRldi0+aW5pdF9kYXRhLmlyX2NvZGVzID0gJmlyX2NvZGVzX3JjNV9oYXVwcGF1Z2VfbmV3X3RhYmxlOwogCQlkZXYtPmluaXRfZGF0YS5nZXRfa2V5ID0gZW0yOHh4X2dldF9rZXlfZW1faGF1cDsKIAkJZGV2LT5pbml0X2RhdGEubmFtZSA9ICJpMmMgSVIgKEVNMjg0MCBIYXVwcGF1Z2UpIjsKKwljYXNlIEVNMjgyMF9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfVVNCSUlfREVMVVhFOgorCQlkZXYtPmluaXRfZGF0YS5pcl9jb2RlcyA9ICZpcl9jb2Rlc193aW5mYXN0X3VzYmlpX2RlbHV4ZV90YWJsZTs7CisJCWRldi0+aW5pdF9kYXRhLmdldF9rZXkgPSBlbTI4eHhfZ2V0X2tleV93aW5mYXN0X3VzYmlpX2RlbHV4ZTsKKwkJZGV2LT5pbml0X2RhdGEubmFtZSA9ICJpMmMgSVIgKEVNMjgyMCBXaW5mYXN0IFRWIFVTQklJIERlbHV4ZSkiOwogCQlicmVhazsKIAl9CiAKQEAgLTIzODEsNiArMjQyMiwzMSBAQAogCQllbTI4eHhfZ3Bpb19zZXQoZGV2LCBkZXYtPmJvYXJkLnR1bmVyX2dwaW8pOwogCQllbTI4eHhfc2V0X21vZGUoZGV2LCBFTTI4WFhfQU5BTE9HX01PREUpOwogCQlicmVhazsKKworLyoKKwkJICogVGhlIERpa29tIERLMzAwIGlzIGRldGVjdGVkIGFzIGFuIEt3b3JsZCBWUy1EVkItVCAzMjNVUi4KKwkJICoKKwkJICogVGhpcyBvY2N1cnMgYmVjYXVzZSB0aGV5IHNoYXJlIGlkZW50aWNhbCBVU0IgdmVuZG9yIGFuZAorCQkgKiBwcm9kdWN0IElEcy4KKwkJICoKKwkJICogV2hhdCB3ZSBkbyBoZXJlIGlzIGxvb2sgdXAgdGhlIEVFUFJPTSBoYXNoIG9mIHRoZSBEaWtvbQorCQkgKiBhbmQgaWYgaXQgaXMgZm91bmQgdGhlbiB3ZSBkZWNpZGUgdGhhdCB3ZSBkbyBub3QgaGF2ZQorCQkgKiBhIEt3b3JsZCBhbmQgcmVzZXQgdGhlIGRldmljZSB0byB0aGUgRGlrb20gaW5zdGVhZC4KKwkJICoKKwkJICogVGhpcyBzb2x1dGlvbiBpcyBvbmx5IHZhbGlkIGlmIHRoZXkgZG8gbm90IHNoYXJlIGVlcHJvbQorCQkgKiBoYXNoIGlkZW50aXRpZXMgd2hpY2ggaGFzIG5vdCBiZWVuIGRldGVybWluZWQgYXMgeWV0LgorCQkgKi8KKwljYXNlIEVNMjg4Ml9CT0FSRF9LV09STERfVlNfRFZCVDoKKwkJaWYgKCFlbTI4eHhfaGludF9ib2FyZChkZXYpKQorCQkJZW0yOHh4X3NldF9tb2RlbChkZXYpOworCisJCS8qIEluIGNhc2VzIHdoZXJlIHdlIGhhZCB0byB1c2UgYSBib2FyZCBoaW50LCB0aGUgY2FsbCB0bworCQkgICBlbTI4eHhfc2V0X21vZGUoKSBpbiBlbTI4eHhfcHJlX2NhcmRfc2V0dXAoKSB3YXMgYSBuby1vcCwKKwkJICAgc28gbWFrZSB0aGUgY2FsbCBub3cgc28gdGhlIGFuYWxvZyBHUElPcyBhcmUgc2V0IHByb3Blcmx5CisJCSAgIGJlZm9yZSBwcm9iaW5nIHRoZSBpMmMgYnVzLiAqLworCQllbTI4eHhfZ3Bpb19zZXQoZGV2LCBkZXYtPmJvYXJkLnR1bmVyX2dwaW8pOworCQllbTI4eHhfc2V0X21vZGUoZGV2LCBFTTI4WFhfQU5BTE9HX01PREUpOworCQlicmVhazsKIAl9CiAKICNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVTKSAmJiBkZWZpbmVkKE1PRFVMRSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCmluZGV4IGIzMTFkNDUuLjVhMzdlY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYwpAQCAtNjkxLDkgKzY5MSwxNSBAQAogCWlmIChlbTI4eHhfdmJpX3N1cHBvcnRlZChkZXYpID09IDEpIHsKIAkJdmluY3RybCB8PSBFTTI4WFhfVklOQ1RSTF9WQklfUkFXOwogCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzNF9WQklfU1RBUlRfSCwgMHgwMCk7Ci0JCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM1X1ZCSV9TVEFSVF9WLCAweDA5KTsKLQkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMzZfVkJJX1dJRFRILCAweGI0KTsKLQkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMzdfVkJJX0hFSUdIVCwgMHgwYyk7CisJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM2X1ZCSV9XSURUSCwgZGV2LT52Ymlfd2lkdGgvNCk7CisJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM3X1ZCSV9IRUlHSFQsIGRldi0+dmJpX2hlaWdodCk7CisJCWlmIChkZXYtPm5vcm0gJiBWNEwyX1NURF81MjVfNjApIHsKKwkJCS8qIE5UU0MgKi8KKwkJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM1X1ZCSV9TVEFSVF9WLCAweDA5KTsKKwkJfSBlbHNlIGlmIChkZXYtPm5vcm0gJiBWNEwyX1NURF82MjVfNTApIHsKKwkJCS8qIFBBTCAqLworCQkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMzVfVkJJX1NUQVJUX1YsIDB4MDcpOworCQl9CiAJfQogCiAJcmV0dXJuIGVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjExX1ZJTkNUUkwsIHZpbmN0cmwpOwpAQCAtNzYwLDYgKzc2NiwxMyBAQAogCXdpZHRoID0gbm9ybV9tYXh3KGRldik7CiAJaGVpZ2h0ID0gbm9ybV9tYXhoKGRldik7CiAKKwkvKiBQcm9wZXJseSBzZXR1cCBWQkkgKi8KKwlkZXYtPnZiaV93aWR0aCA9IDcyMDsKKwlpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNTI1XzYwKQorCQlkZXYtPnZiaV9oZWlnaHQgPSAxMjsKKwllbHNlCisJCWRldi0+dmJpX2hlaWdodCA9IDE4OworCiAJaWYgKCFkZXYtPnByb2dyZXNzaXZlKQogCQloZWlnaHQgPj49IG5vcm1fbWF4aChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKaW5kZXggY2MwNTA1ZS4uMWI5NjM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYwpAQCAtNTAyLDcgKzUwMiw5IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBFTTI4ODBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTOgorCWNhc2UgRU0yODgwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YU19GUjoKIAljYXNlIEVNMjg4MV9CT0FSRF9QSU5OQUNMRV9IWUJSSURfUFJPOgorCWNhc2UgRU0yODgyX0JPQVJEX0RJS09NX0RLMzAwOgogCQlkdmItPmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKIAkJCQkJICAgJmVtMjh4eF96bDEwMzUzX3hjMzAyOF9ub19pMmNfZ2F0ZSwKIAkJCQkJICAgJmRldi0+aTJjX2FkYXApOwpAQCAtNjA2LDYgKzYwOCw3IEBACiAKIAlpZiAoZGV2LT5kdmIpIHsKIAkJdW5yZWdpc3Rlcl9kdmIoZGV2LT5kdmIpOworCQlrZnJlZShkZXYtPmR2Yik7CiAJCWRldi0+ZHZiID0gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKaW5kZXggYWYwZDkzNS4uMWZiNzU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKQEAgLTc1LDYgKzc1LDEwIEBACiAJdW5zaWduZWQgaW50IHJlcGVhdF9pbnRlcnZhbDsKIAogCWludCAgKCpnZXRfa2V5KShzdHJ1Y3QgZW0yOHh4X0lSICosIHN0cnVjdCBlbTI4eHhfaXJfcG9sbF9yZXN1bHQgKik7CisKKwkvKiBJUiBkZXZpY2UgcHJvcGVydGllcyAqLworCisJc3RydWN0IGlyX2Rldl9wcm9wcyBwcm9wczsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xODAsNiArMTg0LDM2IEBACiAJcmV0dXJuIDE7CiB9CiAKK2ludCBlbTI4eHhfZ2V0X2tleV93aW5mYXN0X3VzYmlpX2RlbHV4ZShzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQoreworCXVuc2lnbmVkIGNoYXIgc3ViYWRkciwga2V5ZGV0ZWN0LCBrZXk7CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsgeyAuYWRkciA9IGlyLT5jLT5hZGRyLCAuZmxhZ3MgPSAwLCAuYnVmID0gJnN1YmFkZHIsIC5sZW4gPSAxfSwKKworCQkJCXsgLmFkZHIgPSBpci0+Yy0+YWRkciwgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSAma2V5ZGV0ZWN0LCAubGVuID0gMX0gfTsKKworCXN1YmFkZHIgPSAweDEwOworCWlmICgyICE9IGkyY190cmFuc2Zlcihpci0+Yy0+YWRhcHRlciwgbXNnLCAyKSkgeworCQlpMmNkcHJpbnRrKCJyZWFkIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChrZXlkZXRlY3QgPT0gMHgwMCkKKwkJcmV0dXJuIDA7CisKKwlzdWJhZGRyID0gMHgwMDsKKwltc2dbMV0uYnVmID0gJmtleTsKKwlpZiAoMiAhPSBpMmNfdHJhbnNmZXIoaXItPmMtPmFkYXB0ZXIsIG1zZywgMikpIHsKKwkJaTJjZHByaW50aygicmVhZCBlcnJvclxuIik7CisJcmV0dXJuIC1FSU87CisJfQorCWlmIChrZXkgPT0gMHgwMCkKKwkJcmV0dXJuIDA7CisKKwkqaXJfa2V5ID0ga2V5OworCSppcl9yYXcgPSBrZXk7CisJcmV0dXJuIDE7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgUG9sbCBiYXNlZCBnZXQga2V5Y29kZSBmdW5jdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzM2LDM1ICszNzAsMjggQEAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmlyLT53b3JrKTsKIH0KIAotaW50IGVtMjh4eF9pcl9pbml0KHN0cnVjdCBlbTI4eHggKmRldikKK2ludCBlbTI4eHhfaXJfY2hhbmdlX3Byb3RvY29sKHZvaWQgKnByaXYsIHU2NCBpcl90eXBlKQogewotCXN0cnVjdCBlbTI4eHhfSVIgKmlyOwotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQl1OCBpcl9jb25maWc7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQlpZiAoZGV2LT5ib2FyZC5pcl9jb2RlcyA9PSBOVUxMKSB7Ci0JCS8qIE5vIHJlbW90ZSBjb250cm9sIHN1cHBvcnQgKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0JaXIgPSBremFsbG9jKHNpemVvZigqaXIpLCBHRlBfS0VSTkVMKTsKLQlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWlyIHx8ICFpbnB1dF9kZXYpCi0JCWdvdG8gZXJyX291dF9mcmVlOwotCi0JaXItPmlucHV0ID0gaW5wdXRfZGV2OwotCWlyX2NvbmZpZyA9IEVNMjg3NF9JUl9SQzU7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgZW0yOHh4X0lSICppciA9IHByaXY7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gaXItPmRldjsKKwl1OCBpcl9jb25maWcgPSBFTTI4NzRfSVJfUkM1OwogCiAJLyogQWRqdXN0IHhjbGsgYmFzZWQgbyBJUiB0YWJsZSBmb3IgUkM1L05FQyB0YWJsZXMgKi8KLQlpZiAoZGV2LT5ib2FyZC5pcl9jb2Rlcy0+aXJfdHlwZSA9PSBJUl9UWVBFX1JDNSkgeworCisJZGV2LT5ib2FyZC5pcl9jb2Rlcy0+aXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CisJaWYgKGlyX3R5cGUgPT0gSVJfVFlQRV9SQzUpIHsKIAkJZGV2LT5ib2FyZC54Y2xrIHw9IEVNMjhYWF9YQ0xLX0lSX1JDNV9NT0RFOwogCQlpci0+ZnVsbF9jb2RlID0gMTsKLQl9IGVsc2UgIGlmIChkZXYtPmJvYXJkLmlyX2NvZGVzLT5pcl90eXBlID09IElSX1RZUEVfTkVDKSB7CisJfSBlbHNlIGlmIChpcl90eXBlID09IElSX1RZUEVfTkVDKSB7CiAJCWRldi0+Ym9hcmQueGNsayAmPSB+RU0yOFhYX1hDTEtfSVJfUkM1X01PREU7CiAJCWlyX2NvbmZpZyA9IEVNMjg3NF9JUl9ORUM7CiAJCWlyLT5mdWxsX2NvZGUgPSAxOwotCX0KKwl9IGVsc2UKKwkJcmMgPSAtRUlOVkFMOworCisJZGV2LT5ib2FyZC5pcl9jb2Rlcy0+aXJfdHlwZSA9IGlyX3R5cGU7CisKIAllbTI4eHhfd3JpdGVfcmVnX2JpdHMoZGV2LCBFTTI4WFhfUjBGX1hDTEssIGRldi0+Ym9hcmQueGNsaywKIAkJCSAgICAgIEVNMjhYWF9YQ0xLX0lSX1JDNV9NT0RFKTsKIApAQCAtMzgwLDkgKzQwNyw0MiBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoIlVucmVjb2duaXplZCBlbTI4eHggY2hpcCBpZDogSVIgbm90IHN1cHBvcnRlZFxuIik7Ci0JCWdvdG8gZXJyX291dF9mcmVlOworCQlyYyA9IC1FSU5WQUw7CiAJfQogCisJcmV0dXJuIHJjOworfQorCitpbnQgZW0yOHh4X2lyX2luaXQoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCXN0cnVjdCBlbTI4eHhfSVIgKmlyOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCWlmIChkZXYtPmJvYXJkLmlyX2NvZGVzID09IE5VTEwpIHsKKwkJLyogTm8gcmVtb3RlIGNvbnRyb2wgc3VwcG9ydCAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlpciA9IGt6YWxsb2Moc2l6ZW9mKCppciksIEdGUF9LRVJORUwpOworCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaXIgfHwgIWlucHV0X2RldikKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwkvKiByZWNvcmQgaGFuZGxlcyB0byBvdXJzZWxmICovCisJaXItPmRldiA9IGRldjsKKwlkZXYtPmlyID0gaXI7CisKKwlpci0+aW5wdXQgPSBpbnB1dF9kZXY7CisKKwkvKgorCSAqIGVtMjg3NCBzdXBwb3J0cyBtb3JlIHByb3RvY29scy4gRm9yIG5vdywgbGV0J3MganVzdCBhbm5vdW5jZQorCSAqIHRoZSB0d28gcHJvdG9jb2xzIHRoYXQgd2VyZSBhbHJlYWR5IHRlc3RlZAorCSAqLworCWlyLT5wcm9wcy5hbGxvd2VkX3Byb3RvcyA9IElSX1RZUEVfUkM1IHwgSVJfVFlQRV9ORUM7CisJaXItPnByb3BzLnByaXYgPSBpcjsKKwlpci0+cHJvcHMuY2hhbmdlX3Byb3RvY29sID0gZW0yOHh4X2lyX2NoYW5nZV9wcm90b2NvbDsKKwogCS8qIFRoaXMgaXMgaG93IG9mdGVuIHdlIGFzayB0aGUgY2hpcCBmb3IgSVIgaW5mb3JtYXRpb24gKi8KIAlpci0+cG9sbGluZyA9IDEwMDsgLyogbXMgKi8KIApAQCAtMzkzLDYgKzQ1Myw4IEBACiAJdXNiX21ha2VfcGF0aChkZXYtPnVkZXYsIGlyLT5waHlzLCBzaXplb2YoaXItPnBoeXMpKTsKIAlzdHJsY2F0KGlyLT5waHlzLCAiL2lucHV0MCIsIHNpemVvZihpci0+cGh5cykpOwogCisJLyogU2V0IElSIHByb3RvY29sICovCisJZW0yOHh4X2lyX2NoYW5nZV9wcm90b2NvbChpciwgZGV2LT5ib2FyZC5pcl9jb2Rlcy0+aXJfdHlwZSk7CiAJZXJyID0gaXJfaW5wdXRfaW5pdChpbnB1dF9kZXYsICZpci0+aXIsIElSX1RZUEVfT1RIRVIpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycl9vdXRfZnJlZTsKQEAgLTQwNSwxNCArNDY3LDEzIEBACiAJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CiAKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmZGV2LT51ZGV2LT5kZXY7Ci0JLyogcmVjb3JkIGhhbmRsZXMgdG8gb3Vyc2VsZiAqLwotCWlyLT5kZXYgPSBkZXY7Ci0JZGV2LT5pciA9IGlyOworCiAKIAllbTI4eHhfaXJfc3RhcnQoaXIpOwogCiAJLyogYWxsIGRvbmUgKi8KLQllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGRldi0+Ym9hcmQuaXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgZGV2LT5ib2FyZC5pcl9jb2RlcywKKwkJCQkmaXItPnByb3BzKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfc3RvcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXJlZy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXJlZy5oCmluZGV4IDA1OGFjODcuLjkxZTkwNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1yZWcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtcmVnLmgKQEAgLTE3Myw4ICsxNzMsOCBAQAogLyogZW0yODc0IElSIGNvbmZpZyByZWdpc3RlciAoMHg1MCkgKi8KICNkZWZpbmUgRU0yODc0X0lSX05FQyAgICAgICAgICAgMHgwMAogI2RlZmluZSBFTTI4NzRfSVJfUkM1ICAgICAgICAgICAweDA0Ci0jZGVmaW5lIEVNMjg3NF9JUl9SQzVfTU9ERV8wICAgIDB4MDgKLSNkZWZpbmUgRU0yODc0X0lSX1JDNV9NT0RFXzZBICAgMHgwYgorI2RlZmluZSBFTTI4NzRfSVJfUkM2X01PREVfMCAgICAweDA4CisjZGVmaW5lIEVNMjg3NF9JUl9SQzZfTU9ERV82QSAgIDB4MGIKIAogLyogZW0yODc0IFRyYW5zcG9ydCBTdHJlYW0gRW5hYmxlIFJlZ2lzdGVyICgweDVmKSAqLwogI2RlZmluZSBFTTI4NzRfVFMxX0NBUFRVUkVfRU5BQkxFICgxIDw8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmJpLmMKaW5kZXggOTQ5NDNlNS4uYzdkY2UzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12YmkuYwpAQCAtNzEsNyArNzEsMTEgQEAKIHN0YXRpYyBpbnQKIHZiaV9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHVuc2lnbmVkIGludCAqY291bnQsIHVuc2lnbmVkIGludCAqc2l6ZSkKIHsKLQkqc2l6ZSA9IDcyMCAqIDEyICogMjsKKwlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAqZmggID0gcS0+cHJpdl9kYXRhOworCXN0cnVjdCBlbTI4eHggICAgICAgICpkZXYgPSBmaC0+ZGV2OworCisJKnNpemUgPSBkZXYtPnZiaV93aWR0aCAqIGRldi0+dmJpX2hlaWdodCAqIDI7CisKIAlpZiAoMCA9PSAqY291bnQpCiAJCSpjb3VudCA9IHZiaWJ1ZnM7CiAJaWYgKCpjb3VudCA8IDIpCkBAIC04NSwxOSArODksMTggQEAKIHZiaV9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCiAJICAgIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKIHsKKwlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAqZmggID0gcS0+cHJpdl9kYXRhOworCXN0cnVjdCBlbTI4eHggICAgICAgICpkZXYgPSBmaC0+ZGV2OwogCXN0cnVjdCBlbTI4eHhfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBlbTI4eHhfYnVmZmVyLCB2Yik7CiAJaW50ICAgICAgICAgICAgICAgICAgcmMgPSAwOwotCXVuc2lnbmVkIGludCBzaXplOwogCi0Jc2l6ZSA9IDcyMCAqIDEyICogMjsKLQotCWJ1Zi0+dmIuc2l6ZSA9IHNpemU7CisJYnVmLT52Yi5zaXplID0gZGV2LT52Ymlfd2lkdGggKiBkZXYtPnZiaV9oZWlnaHQgKiAyOwogCiAJaWYgKDAgIT0gYnVmLT52Yi5iYWRkciAgJiYgIGJ1Zi0+dmIuYnNpemUgPCBidWYtPnZiLnNpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYnVmLT52Yi53aWR0aCAgPSA3MjA7Ci0JYnVmLT52Yi5oZWlnaHQgPSAxMjsKKwlidWYtPnZiLndpZHRoICA9IGRldi0+dmJpX3dpZHRoOworCWJ1Zi0+dmIuaGVpZ2h0ID0gZGV2LT52YmlfaGVpZ2h0OwogCWJ1Zi0+dmIuZmllbGQgID0gZmllbGQ7CiAKIAlpZiAoVklERU9CVUZfTkVFRFNfSU5JVCA9PSBidWYtPnZiLnN0YXRlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCmluZGV4IDg0OWIxOGMuLmFjMmJkOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCkBAIC0yODIsNyArMjgyLDcgQEAKIHsKIAl2b2lkICpzdGFydHdyaXRlLCAqc3RhcnRyZWFkOwogCWludCAgb2Zmc2V0OwotCWludCBieXRlc3BlcmxpbmUgPSA3MjA7CisJaW50IGJ5dGVzcGVybGluZSA9IGRldi0+dmJpX3dpZHRoOwogCiAJaWYgKGRldiA9PSBOVUxMKSB7CiAJCWVtMjh4eF9pc29jZGJnKCJkZXYgaXMgbnVsbFxuIik7CkBAIC0zMjMsOCArMzIzLDggQEAKIAogCS8qIE1ha2Ugc3VyZSB0aGUgYm90dG9tIGZpZWxkIHBvcHVsYXRlcyB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIGZyYW1lICovCiAJaWYgKGJ1Zi0+dG9wX2ZpZWxkID09IDApIHsKLQkJc3RhcnR3cml0ZSArPSBieXRlc3BlcmxpbmUgKiAweDBjOwotCQlvZmZzZXQgKz0gYnl0ZXNwZXJsaW5lICogMHgwYzsKKwkJc3RhcnR3cml0ZSArPSBieXRlc3BlcmxpbmUgKiBkZXYtPnZiaV9oZWlnaHQ7CisJCW9mZnNldCArPSBieXRlc3BlcmxpbmUgKiBkZXYtPnZiaV9oZWlnaHQ7CiAJfQogCiAJbWVtY3B5KHN0YXJ0d3JpdGUsIHN0YXJ0cmVhZCwgbGVuKTsKQEAgLTU3OCw4ICs1NzgsNyBAQAogCQkJZGV2LT5jdXJfZmllbGQgPSBwWzJdOwogCQl9CiAKLQkJLyogRklYTUU6IGdldCByaWQgb2YgaGFyZC1jb2RlZCB2YWx1ZSAqLwotCQl2Ymlfc2l6ZSA9IDcyMCAqIDB4MGM7CisJCXZiaV9zaXplID0gZGV2LT52Ymlfd2lkdGggKiBkZXYtPnZiaV9oZWlnaHQ7CiAKIAkJaWYgKGRldi0+Y2FwdHVyZV90eXBlID09IDApIHsKIAkJCWlmIChkZXYtPnZiaV9yZWFkID49IHZiaV9zaXplKSB7CkBAIC0xODUwLDE4ICsxODQ5LDI3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm9ybWF0KQogewotCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGVzX3Blcl9saW5lID0gNzIwOworCXN0cnVjdCBlbTI4eHhfZmggICAgICAqZmggID0gcHJpdjsKKwlzdHJ1Y3QgZW0yOHh4ICAgICAgICAgKmRldiA9IGZoLT5kZXY7CisKKwlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlc19wZXJfbGluZSA9IGRldi0+dmJpX3dpZHRoOwogCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGVfZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0dSRVk7CiAJZm9ybWF0LT5mbXQudmJpLm9mZnNldCA9IDA7CiAJZm9ybWF0LT5mbXQudmJpLmZsYWdzID0gMDsKKwlmb3JtYXQtPmZtdC52Ymkuc2FtcGxpbmdfcmF0ZSA9IDY3NTAwMDAgKiA0IC8gMjsKKwlmb3JtYXQtPmZtdC52YmkuY291bnRbMF0gPSBkZXYtPnZiaV9oZWlnaHQ7CisJZm9ybWF0LT5mbXQudmJpLmNvdW50WzFdID0gZGV2LT52YmlfaGVpZ2h0OwogCiAJLyogVmFyaWVzIGJ5IHZpZGVvIHN0YW5kYXJkIChOVFNDLCBQQUwsIGV0Yy4pICovCi0JLyogRklYTUU6IGhhcmQtY29kZWQgZm9yIE5UU0Mgc3VwcG9ydCAqLwotCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGluZ19yYXRlID0gNjc1MDAwMCAqIDQgLyAyOyAvKiBGSVhNRTogPz8/ICovCi0JZm9ybWF0LT5mbXQudmJpLmNvdW50WzBdID0gMTI7Ci0JZm9ybWF0LT5mbXQudmJpLmNvdW50WzFdID0gMTI7Ci0JZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzBdID0gMTA7Ci0JZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzFdID0gMjczOworCWlmIChkZXYtPm5vcm0gJiBWNEwyX1NURF81MjVfNjApIHsKKwkJLyogTlRTQyAqLworCQlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMF0gPSAxMDsKKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzFdID0gMjczOworCX0gZWxzZSBpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNjI1XzUwKSB7CisJCS8qIFBBTCAqLworCQlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMF0gPSA2OworCQlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMV0gPSAzMTg7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODY5LDE4ICsxODc3LDI3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm9ybWF0KQogewotCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGVzX3Blcl9saW5lID0gNzIwOworCXN0cnVjdCBlbTI4eHhfZmggICAgICAqZmggID0gcHJpdjsKKwlzdHJ1Y3QgZW0yOHh4ICAgICAgICAgKmRldiA9IGZoLT5kZXY7CisKKwlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlc19wZXJfbGluZSA9IGRldi0+dmJpX3dpZHRoOwogCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGVfZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0dSRVk7CiAJZm9ybWF0LT5mbXQudmJpLm9mZnNldCA9IDA7CiAJZm9ybWF0LT5mbXQudmJpLmZsYWdzID0gMDsKKwlmb3JtYXQtPmZtdC52Ymkuc2FtcGxpbmdfcmF0ZSA9IDY3NTAwMDAgKiA0IC8gMjsKKwlmb3JtYXQtPmZtdC52YmkuY291bnRbMF0gPSBkZXYtPnZiaV9oZWlnaHQ7CisJZm9ybWF0LT5mbXQudmJpLmNvdW50WzFdID0gZGV2LT52YmlfaGVpZ2h0OwogCiAJLyogVmFyaWVzIGJ5IHZpZGVvIHN0YW5kYXJkIChOVFNDLCBQQUwsIGV0Yy4pICovCi0JLyogRklYTUU6IGhhcmQtY29kZWQgZm9yIE5UU0Mgc3VwcG9ydCAqLwotCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGluZ19yYXRlID0gNjc1MDAwMCAqIDQgLyAyOyAvKiBGSVhNRTogPz8/ICovCi0JZm9ybWF0LT5mbXQudmJpLmNvdW50WzBdID0gMTI7Ci0JZm9ybWF0LT5mbXQudmJpLmNvdW50WzFdID0gMTI7Ci0JZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzBdID0gMTA7Ci0JZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzFdID0gMjczOworCWlmIChkZXYtPm5vcm0gJiBWNEwyX1NURF81MjVfNjApIHsKKwkJLyogTlRTQyAqLworCQlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMF0gPSAxMDsKKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzFdID0gMjczOworCX0gZWxzZSBpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNjI1XzUwKSB7CisJCS8qIFBBTCAqLworCQlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMF0gPSA2OworCQlmb3JtYXQtPmZtdC52Ymkuc3RhcnRbMV0gPSAzMTg7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xOTIyLDcgKzE5MzksOCBAQAogCQkgICBBdCBhIG1pbmltdW0sIGl0IGNhdXNlcyBhIGNyYXNoIGluIHp2Ymkgc2luY2UgaXQgZG9lcwogCQkgICBhIG1lbWNweSBiYXNlZCBvbiB0aGUgc291cmNlIGJ1ZmZlciBsZW5ndGggKi8KIAkJaW50IHJlc3VsdCA9IHZpZGVvYnVmX3F1ZXJ5YnVmKCZmaC0+dmJfdmJpcSwgYik7Ci0JCWItPmxlbmd0aCA9IDE3MjgwOworCQliLT5sZW5ndGggPSBkZXYtPnZiaV93aWR0aCAqIGRldi0+dmJpX2hlaWdodCAqIDI7CisKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCmluZGV4IDgwZDliNGYuLmJhNmZlNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCkBAIC0xMTEsNiArMTExLDcgQEAKICNkZWZpbmUgRU0yODYxX0JPQVJEX0dBRE1FSV9VVFYzMzBQTFVTICAgICAgICAgICA3MgogI2RlZmluZSBFTTI4NzBfQk9BUkRfUkVERE9fRFZCX0NfVVNCX0JPWCAgICAgICAgICA3MwogI2RlZmluZSBFTTI4MDBfQk9BUkRfVkMyMTFBCQkJICA3NAorI2RlZmluZSBFTTI4ODJfQk9BUkRfRElLT01fREszMDAJCSAgNzUKIAogLyogTGltaXRzIG1pbmltdW0gYW5kIGRlZmF1bHQgbnVtYmVyIG9mIGJ1ZmZlcnMgKi8KICNkZWZpbmUgRU0yOFhYX01JTl9CVUYgNApAQCAtNTUyLDcgKzU1Myw4IEBACiAJaW50IGNhcHR1cmVfdHlwZTsKIAlpbnQgdmJpX3JlYWQ7CiAJdW5zaWduZWQgY2hhciBjdXJfZmllbGQ7Ci0KKwl1bnNpZ25lZCBpbnQgdmJpX3dpZHRoOworCXVuc2lnbmVkIGludCB2YmlfaGVpZ2h0OyAvKiBsaW5lcyBwZXIgZmllbGQgKi8KIAogCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgIHJlcXVlc3RfbW9kdWxlX3drOwogCkBAIC02OTMsNiArNjk1LDggQEAKIGludCBlbTI4eHhfZ2V0X2tleV9lbV9oYXVwKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpOwogaW50IGVtMjh4eF9nZXRfa2V5X3Bpbm5hY2xlX3VzYl9ncmV5KHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwKIAkJCQkgICAgIHUzMiAqaXJfcmF3KTsKK2ludCBlbTI4eHhfZ2V0X2tleV93aW5mYXN0X3VzYmlpX2RlbHV4ZShzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksCisJCQkJICAgICB1MzIgKmlyX3Jhdyk7CiB2b2lkIGVtMjh4eF9yZWdpc3Rlcl9zbmFwc2hvdF9idXR0b24oc3RydWN0IGVtMjh4eCAqZGV2KTsKIHZvaWQgZW0yOHh4X2RlcmVnaXN0ZXJfc25hcHNob3RfYnV0dG9uKHN0cnVjdCBlbTI4eHggKmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvS2NvbmZpZwppbmRleCBkY2MxYTAzLi44Nzk4MWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9LY29uZmlnCkBAIC0xLDcgKzEsMTEgQEAKIGNvbmZpZyBVU0JfRVQ2MVgyNTEKLQl0cmlzdGF0ZSAiVVNCIEVUNjFYWzEyXTUxIFBDIENhbWVyYSBDb250cm9sbGVyIHN1cHBvcnQiCisJdHJpc3RhdGUgIlVTQiBFVDYxWFsxMl01MSBQQyBDYW1lcmEgQ29udHJvbGxlciBzdXBwb3J0IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIHpjM3h4IG1vZHVsZQorCSAgaW5zdGVhZC4KKwogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIEV0b21zIEVUNjFYMTUxCiAJICBvciBFVDYxWDI1MSBQQyBDYW1lcmEgQ29udHJvbGxlcnMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZwppbmRleCA2MDlkNjViLi5lMDA2MGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCkBAIC0yMSw2ICsyMSwxNSBAQAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9LY29uZmlnIgogCitjb25maWcgVVNCX0dTUENBX0JFTlEKKwl0cmlzdGF0ZSAiQmVucSBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgQmVucSBEQyBFMzAwIGNhbWVyYS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfYmVucS4KKwogY29uZmlnIFVTQl9HU1BDQV9DT05FWAogCXRyaXN0YXRlICJDb25leGFudCBDYW1lcmEgRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKQEAgLTMwLDYgKzM5LDE3IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9jb25leC4KIAorY29uZmlnIFVTQl9HU1BDQV9DUElBMQorCXRyaXN0YXRlICJjcGlhIENQaUEgKHZlcnNpb24gMSkgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBVU0IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgY3BpYQorCSAgQ1BpQSBjaGlwLiBOb3RlIHRoYXQgeW91IG5lZWQgYXRsZWFzdCB2ZXJzaW9uIDAuNi40IG9mIGxpYnY0bCBmb3IKKwkgIGFwcGxpY2F0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSB2aWRlb2Zvcm1hdCBnZW5lcmF0ZWQgYnkgdGhpcyBkcml2ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX2NwaWExLgorCiBjb25maWcgVVNCX0dTUENBX0VUT01TCiAJdHJpc3RhdGUgIkV0b21zIFVTQiBDYW1lcmEgRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKQEAgLTg2LDE1ICsxMDYsMjUgQEAKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9vdjUxOS4KIAogY29uZmlnIFVTQl9HU1BDQV9PVjUzNAotCXRyaXN0YXRlICJPVjUzNCBVU0IgQ2FtZXJhIERyaXZlciIKKwl0cmlzdGF0ZSAiT1Y1MzQgT1Y3NzJ4IFVTQiBDYW1lcmEgRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKIAloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIE9WNTM0IGNoaXAuCi0JICAoZS5nLiBTb255IFBsYXlzdGF0aW9uIEVZRSkKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgT1Y1MzQgY2hpcAorCSAgYW5kIHNlbnNvciBPVjc3MnggKGUuZy4gU29ueSBQbGF5c3RhdGlvbiBFWUUpCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX292NTM0LgogCitjb25maWcgVVNCX0dTUENBX09WNTM0XzkKKwl0cmlzdGF0ZSAiT1Y1MzQgT1Y5NjV4IFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIE9WNTM0IGNoaXAKKwkgIGFuZCBzZW5zb3IgT1Y5NjV4IChlLmcuIEhlcmN1bGVzIER1YWxwaXgpCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX292NTM0XzkuCisKIGNvbmZpZyBVU0JfR1NQQ0FfUEFDMjA3CiAJdHJpc3RhdGUgIlBpeGFydCBQQUMyMDcgVVNCIENhbWVyYSBEcml2ZXIiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQpAQCAtMTIyLDYgKzE1MiwxNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfcGFjNzMxMS4KIAorY29uZmlnIFVTQl9HU1BDQV9TTjlDMjAyOAorCXRyaXN0YXRlICJTT05JWCBEdWFsLU1vZGUgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3RyZWFtaW5nIHN1cHBvcnQgZm9yIFNvbml4IFNOOUMyMDI4IGNhbWVyYXMuCisJICBUaGVzZSBhcmUgc3VwcG9ydGVkIGFzIHN0aWxsY2FtcyBpbiBsaWJncGhvdG8yL2NhbWxpYnMvc29uaXguCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3NuOWMyMDI4LgorCiBjb25maWcgVVNCX0dTUENBX1NOOUMyMFgKIAl0cmlzdGF0ZSAiU045QzIwWCBVU0IgQ2FtZXJhIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQppbmRleCBmZjJjNzI3Li42ZTRjZjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKQEAgLTEsNSArMSw3IEBACiBvYmotJChDT05GSUdfVVNCX0dTUENBKSAgICAgICAgICArPSBnc3BjYV9tYWluLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfQkVOUSkgICAgICs9IGdzcGNhX2JlbnEubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9DT05FWCkgICAgKz0gZ3NwY2FfY29uZXgubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9DUElBMSkgICAgKz0gZ3NwY2FfY3BpYTEubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9FVE9NUykgICAgKz0gZ3NwY2FfZXRvbXMubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9GSU5FUElYKSAgKz0gZ3NwY2FfZmluZXBpeC5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX0pFSUxJTkopICArPSBnc3BjYV9qZWlsaW5qLm8KQEAgLTcsOSArOSwxMSBAQAogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9NUjk3MzEwQSkgKz0gZ3NwY2FfbXI5NzMxMGEubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9PVjUxOSkgICAgKz0gZ3NwY2Ffb3Y1MTkubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9PVjUzNCkgICAgKz0gZ3NwY2Ffb3Y1MzQubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9PVjUzNF85KSAgKz0gZ3NwY2Ffb3Y1MzRfOS5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1BBQzIwNykgICArPSBnc3BjYV9wYWMyMDcubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUM3MzAyKSAgKz0gZ3NwY2FfcGFjNzMwMi5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1BBQzczMTEpICArPSBnc3BjYV9wYWM3MzExLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU045QzIwMjgpICs9IGdzcGNhX3NuOWMyMDI4Lm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfU045QzIwWCkgICs9IGdzcGNhX3NuOWMyMHgubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TT05JWEIpICAgKz0gZ3NwY2Ffc29uaXhiLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfU09OSVhKKSAgICs9IGdzcGNhX3Nvbml4ai5vCkBAIC0zMCw3ICszNCw5IEBACiBvYmotJChDT05GSUdfVVNCX0dTUENBX1pDM1hYKSAgICArPSBnc3BjYV96YzN4eC5vCiAKIGdzcGNhX21haW4tb2JqcyAgICAgOj0gZ3NwY2EubworZ3NwY2FfYmVucS1vYmpzICAgICA6PSBiZW5xLm8KIGdzcGNhX2NvbmV4LW9ianMgICAgOj0gY29uZXgubworZ3NwY2FfY3BpYTEtb2JqcyAgICA6PSBjcGlhMS5vCiBnc3BjYV9ldG9tcy1vYmpzICAgIDo9IGV0b21zLm8KIGdzcGNhX2ZpbmVwaXgtb2JqcyAgOj0gZmluZXBpeC5vCiBnc3BjYV9qZWlsaW5qLW9ianMgIDo9IGplaWxpbmoubwpAQCAtMzgsOSArNDQsMTEgQEAKIGdzcGNhX21yOTczMTBhLW9ianMgOj0gbXI5NzMxMGEubwogZ3NwY2Ffb3Y1MTktb2JqcyAgICA6PSBvdjUxOS5vCiBnc3BjYV9vdjUzNC1vYmpzICAgIDo9IG92NTM0Lm8KK2dzcGNhX292NTM0Xzktb2JqcyAgOj0gb3Y1MzRfOS5vCiBnc3BjYV9wYWMyMDctb2JqcyAgIDo9IHBhYzIwNy5vCiBnc3BjYV9wYWM3MzAyLW9ianMgIDo9IHBhYzczMDIubwogZ3NwY2FfcGFjNzMxMS1vYmpzICA6PSBwYWM3MzExLm8KK2dzcGNhX3NuOWMyMDI4LW9ianMgOj0gc245YzIwMjgubwogZ3NwY2Ffc245YzIweC1vYmpzICA6PSBzbjljMjB4Lm8KIGdzcGNhX3Nvbml4Yi1vYmpzICAgOj0gc29uaXhiLm8KIGdzcGNhX3Nvbml4ai1vYmpzICAgOj0gc29uaXhqLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvYmVucS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9iZW5xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhYzRhZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvYmVucS5jCkBAIC0wLDAgKzEsMzIyIEBACisvKgorICogQmVucSBEQyBFMzAwIHN1YmRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBKZWFuLUZyYW5jb2lzIE1vaW5lIChodHRwOi8vbW9pbmVqZi5mcmVlLmZyKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAiYmVucSIKKworI2luY2x1ZGUgImdzcGNhLmgiCisKK01PRFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJlbnEgREMgRTMwMCBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworfTsKKworLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2Z2FfbW9kZVtdID0geworCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHfSwKK307CisKK3N0YXRpYyB2b2lkIHNkX2lzb2NfaXJxKHN0cnVjdCB1cmIgKnVyYik7CisKKy8qIC0tIHdyaXRlIGEgcmVnaXN0ZXIgLS0gKi8KK3N0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXUxNiB2YWx1ZSwgdTE2IGluZGV4KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcmV0OworCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCTB4MDIsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQl2YWx1ZSwKKwkJCWluZGV4LAorCQkJTlVMTCwKKwkJCTAsCisJCQk1MDApOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgInJlZ193IGVyciAlZCIsIHJldCk7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IHJldDsKKwl9Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZSA9IHZnYV9tb2RlOworCWdzcGNhX2Rldi0+Y2FtLm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOworCWdzcGNhX2Rldi0+Y2FtLm5vX3VyYl9jcmVhdGUgPSAxOworCWdzcGNhX2Rldi0+Y2FtLnJldmVyc2VfYWx0cyA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9pc29jX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSwKKwkJZ3NwY2FfZGV2LT5uYmFsdCAtIDEpOworCWlmIChyZXQgPCAwKSB7CisJCWVycigidXNiX3NldF9pbnRlcmZhY2UgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorLyoJcmVnX3coZ3NwY2FfZGV2LCAweDAwMDMsIDB4MDAwMik7ICovCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tIHN0YXJ0IHRoZSBjYW1lcmEgLS0gKi8KK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgaSwgbjsKKworCS8qIGNyZWF0ZSA0IFVSQnMgLSAyIG9uIGVuZHBvaW50IDB4ODMgYW5kIDIgb24gMHgwODIgKi8KKyNpZiBNQVhfTlVSQlMgPCA0CisjZXJyb3IgIk5vdCBlbm91Z2ggVVJCcyBpbiB0aGUgZ3NwY2EgdGFibGUiCisjZW5kaWYKKyNkZWZpbmUgU0RfUEtUX1NaIDY0CisjZGVmaW5lIFNEX05QS1QgMzIKKwlmb3IgKG4gPSAwOyBuIDwgNDsgbisrKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIoU0RfTlBLVCwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXJiKSB7CisJCQllcnIoInVzYl9hbGxvY191cmIgZmFpbGVkIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlnc3BjYV9kZXYtPnVyYltuXSA9IHVyYjsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1c2JfYnVmZmVyX2FsbG9jKGdzcGNhX2Rldi0+ZGV2LAorCQkJCQkJU0RfUEtUX1NaICogU0RfTlBLVCwKKwkJCQkJCUdGUF9LRVJORUwsCisJCQkJCQkmdXJiLT50cmFuc2Zlcl9kbWEpOworCisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCQllcnIoInVzYl9idWZmZXJfYWxsb2MgZmFpbGVkIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQl1cmItPmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCQl1cmItPmNvbnRleHQgPSBnc3BjYV9kZXY7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IFNEX1BLVF9TWiAqIFNEX05QS1Q7CisJCXVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZShnc3BjYV9kZXYtPmRldiwKKwkJCQkJbiAmIDEgPyAweDgyIDogMHg4Myk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVAKKwkJCQkJfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwkJdXJiLT5pbnRlcnZhbCA9IDE7CisJCXVyYi0+Y29tcGxldGUgPSBzZF9pc29jX2lycTsKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IFNEX05QS1Q7CisJCWZvciAoaSA9IDA7IGkgPCBTRF9OUEtUOyBpKyspIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gU0RfUEtUX1NaOworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBTRF9QS1RfU1ogKiBpOworCQl9CisJfQorCisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXJlZ193KGdzcGNhX2RldiwgMHgwMDNjLCAweDAwMDMpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMDNjLCAweDAwMDQpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMDNjLCAweDAwMDUpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMDNjLCAweDAwMDYpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMDNjLCAweDAwMDcpOworCXVzYl9zZXRfaW50ZXJmYWNlKGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmlmYWNlLCBnc3BjYV9kZXYtPm5iYWx0IC0gMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaXNvYyBwYWNrZXQgKi8KKwkJCWludCBsZW4pCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLworeworCS8qIHVudXNlZCAqLworfQorCisvKiByZWNlcHRpb24gb2YgYW4gVVJCICovCitzdGF0aWMgdm9pZCBzZF9pc29jX2lycShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gKHN0cnVjdCBnc3BjYV9kZXYgKikgdXJiLT5jb250ZXh0OworCXN0cnVjdCB1cmIgKnVyYjA7CisJdTggKmRhdGE7CisJaW50IGksIHN0OworCisJUERFQlVHKERfUEFDSywgInNkIGlzb2MgaXJxIik7CisJaWYgKCFnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJcmV0dXJuOworCWlmICh1cmItPnN0YXR1cyAhPSAwKSB7CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKQorCQkJcmV0dXJuOwkJLyogZGlzY29ubmVjdGlvbiAqLworI2lmZGVmIENPTkZJR19QTQorCQlpZiAoZ3NwY2FfZGV2LT5mcm96ZW4pCisJCQlyZXR1cm47CisjZW5kaWYKKwkJUERFQlVHKERfRVJSfERfUEFDSywgInVyYiBzdGF0dXM6ICVkIiwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJLyogaWYgdGhpcyBpcyBhIGNvbnRyb2wgVVJOIChlcCAweDgzKSwgd2FpdCAqLworCWlmICh1cmIgPT0gZ3NwY2FfZGV2LT51cmJbMF0gfHwgdXJiID09IGdzcGNhX2Rldi0+dXJiWzJdKQorCQlyZXR1cm47CisKKwkvKiBzY2FuIGJvdGggcmVjZWl2ZWQgVVJCcyAqLworCWlmICh1cmIgPT0gZ3NwY2FfZGV2LT51cmJbMV0pCisJCXVyYjAgPSBnc3BjYV9kZXYtPnVyYlswXTsKKwllbHNlCisJCXVyYjAgPSBnc3BjYV9kZXYtPnVyYlsyXTsKKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CisKKwkJLyogY2hlY2sgdGhlIHBhY2tldCBzdGF0dXMgYW5kIGxlbmd0aCAqLworCQlpZiAodXJiMC0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCAhPSBTRF9QS1RfU1oKKwkJICAgIHx8IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCAhPSBTRF9QS1RfU1opIHsKKwkJCVBERUJVRyhEX0VSUiwgIklTT0MgYmFkIGxlbmd0aHMgJWQgLyAlZCIsCisJCQkJdXJiMC0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCwKKwkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgpOworCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisJCQljb250aW51ZTsKKwkJfQorCQlzdCA9IHVyYjAtPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKKwkJaWYgKHN0ID09IDApCisJCQlzdCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOworCQlpZiAoc3QpIHsKKwkJCVBERUJVRyhEX0VSUiwKKwkJCQkiSVNPQyBkYXRhIGVycm9yOiBbJWRdIHN0YXR1cz0lZCIsCisJCQkJaSwgc3QpOworCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFRoZSBpbWFnZXMgYXJlIHJlY2VpdmVkIGluIFVSQnMgb2YgZGlmZmVyZW50IGVuZHBvaW50cworCQkgKiAoMHg4MyBhbmQgMHg4MikuCisJCSAqIEltYWdlIHBpZWNlcyBpbiBVUkJzIG9mIGVwIDB4ODMgYXJlIGNvbnRpbnVhdGVkIGluIFVSQnMgb2YKKwkJICogZXAgMHg4MiBvZiB0aGUgc2FtZSBpbmRleC4KKwkJICogVGhlIHBhY2tldHMgaW4gdGhlIFVSQnMgb2YgZW5kcG9pbnQgMHg4MyBzdGFydCB3aXRoOgorCQkgKgktIDgwIGJhL2JiIDAwIDAwID0gc3RhcnQgb2YgaW1hZ2UgZm9sbG93ZWQgYnkgJ2ZmIGQ4JworCQkgKgktIDA0IGJhL2JiIG9vIG9vID0gaW1hZ2UgcGllY2UKKwkJICoJCXdoZXJlICdvbyBvbycgaXMgdGhlIGltYWdlIG9mZnNldAorCQkJCQkJKG5vdCBjaGVrZWQpCisJCSAqCS0gKG90aGVyIC0+IGJhZCBmcmFtZSkKKwkJICogVGhlIGltYWdlcyBhcmUgSlBFRyBlbmNvZGVkIHdpdGggZnVsbCBoZWFkZXIgYW5kCisJCSAqIG5vcm1hbCBmZiBlc2NhcGUuCisJCSAqIFRoZSBlbmQgb2YgaW1hZ2UgKCdmZiBkOScpIG1heSBvY2N1ciBpbiBhbnkgVVJCLgorCQkgKiAobm90IGNoZWtlZCkKKwkJICovCisJCWRhdGEgPSAodTggKikgdXJiMC0+dHJhbnNmZXJfYnVmZmVyCisJCQkJCSsgdXJiMC0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCQlpZiAoZGF0YVswXSA9PSAweDgwICYmIChkYXRhWzFdICYgMHhmZSkgPT0gMHhiYSkgeworCisJCQkvKiBuZXcgaW1hZ2UgKi8KKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAorCQkJCQlOVUxMLCAwKTsKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwKKwkJCQkJZGF0YSArIDQsIFNEX1BLVF9TWiAtIDQpOworCQl9IGVsc2UgaWYgKGRhdGFbMF0gPT0gMHgwNCAmJiAoZGF0YVsxXSAmIDB4ZmUpID09IDB4YmEpIHsKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwKKwkJCQkJZGF0YSArIDQsIFNEX1BLVF9TWiAtIDQpOworCQl9IGVsc2UgeworCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisJCQljb250aW51ZTsKKwkJfQorCQlkYXRhID0gKHU4ICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyCisJCQkJCSsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsCisJCQkJCWRhdGEsIFNEX1BLVF9TWik7CisJfQorCisJLyogcmVzdWJtaXQgdGhlIFVSQnMgKi8KKwlzdCA9IHVzYl9zdWJtaXRfdXJiKHVyYjAsIEdGUF9BVE9NSUMpOworCWlmIChzdCA8IDApCisJCVBERUJVRyhEX0VSUnxEX1BBQ0ssICJ1c2Jfc3VibWl0X3VyYigwKSByZXQgJWQiLCBzdCk7CisJc3QgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdCA8IDApCisJCVBERUJVRyhEX0VSUnxEX1BBQ0ssICJ1c2Jfc3VibWl0X3VyYigpIHJldCAlZCIsIHN0KTsKK30KKworLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuY3RybHMgPSBzZF9jdHJscywKKwkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCisJLmNvbmZpZyA9IHNkX2NvbmZpZywKKwkuaW5pdCA9IHNkX2luaXQsCisJLmlzb2NfaW5pdCA9IHNkX2lzb2NfaW5pdCwKKwkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKKwkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNGE1LCAweDMwMzUpfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IGdzcGNhX3N1c3BlbmQsCisJLnJlc3VtZSA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWluZm8oInJlZ2lzdGVyZWQiKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWluZm8oImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvYXJzZV9leHBvX2F1dG9nYWluLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvYXJzZV9leHBvX2F1dG9nYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNiOWQ5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29hcnNlX2V4cG9fYXV0b2dhaW4uaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIEF1dG8gZ2FpbiBhbGdvcml0aG0gZm9yIGNhbWVyYSdzIHdpdGggYSBjb2Fyc2UgZXhwb3N1cmUgY29udHJvbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisvKiBBdXRvZ2FpbiArIGV4cG9zdXJlIGFsZ29yaXRobSBmb3IgY2FtZXJhcyB3aXRoIGEgY29hcnNlIGV4cG9zdXJlIGNvbnRyb2wKKyAgICh1c3VhbGx5IHRoaXMgbWVhbnMgd2UgY2FuIG9ubHkgY29udHJvbCB0aGUgY2xvY2tkaXYgdG8gY2hhbmdlIGV4cG9zdXJlKQorICAgQXMgY2hhbmdpbmcgdGhlIGNsb2NrZGl2IHNvIHRoYXQgdGhlIGZwcyBkcm9wcyBmcm9tIDMwIHRvIDE1IGZwcyBmb3IKKyAgIGV4YW1wbGUsIHdpbGwgbGVhZCB0byBhIGh1Z2UgZXhwb3N1cmUgY2hhbmdlIChpdCBlZmZlY3RpdmVseSBkb3VibGVzKSwKKyAgIHRoaXMgYWxnb3JpdGhtIG5vcm1hbGx5IHRyaWVzIHRvIG9ubHkgYWRqdXN0IHRoZSBnYWluIChiZXR3ZWVuIDQwIGFuZAorICAgODAgJSkgYW5kIGlmIHRoYXQgZG9lcyBub3QgaGVscCwgb25seSB0aGVuIGNoYW5nZXMgZXhwb3N1cmUuIFRoaXMgbGVhZHMKKyAgIHRvIGEgbXVjaCBtb3JlIHN0YWJsZSBpbWFnZSB0aGVuIHVzaW5nIHRoZSBrbmVlIGFsZ29yaXRobSB3aGljaCBhdAorICAgY2VydGFpbiBwb2ludHMgb2YgdGhlIGtuZWUgZ3JhcGggd2lsbCBvbmx5IHRyeSB0byBhZGp1c3QgZXhwb3N1cmUsCisgICB3aGljaCBsZWFkcyB0byBvc2NpbGF0aW5nIGFzIG9uZSBleHBvc3VyZSBzdGVwIGlzIGh1Z2UuCisKKyAgIE5vdGUgdGhpcyBhc3N1bWVzIHRoYXQgdGhlIHNkIHN0cnVjdCBmb3IgdGhlIGNhbSBpbiBxdWVzdGlvbiBoYXMKKyAgIGV4cF90b29faGlnaF9jbnQgYW5kIGV4cF90b29faGlnaF9jbnQgaW50IG1lbWJlcnMgZm9yIHVzZSBieSB0aGlzIGZ1bmN0aW9uLgorCisgICBSZXR1cm5zIDAgaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUsIDEgaWYgdGhlIGdhaW4gYW5kIG9yIGV4cG9zdXJlIHNldHRpbmdzCisgICB3aGVyZSBjaGFuZ2VkLiAqLworc3RhdGljIGludCBnc3BjYV9jb2Fyc2VfZ3JhaW5lZF9leHBvX2F1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwlpbnQgYXZnX2x1bSwgaW50IGRlc2lyZWRfYXZnX2x1bSwgaW50IGRlYWR6b25lKQoreworCWludCBpLCBzdGVwcywgZ2Fpbiwgb3JpZ19nYWluLCBleHBvc3VyZSwgb3JpZ19leHBvc3VyZTsKKwlpbnQgZ2Fpbl9sb3csIGdhaW5faGlnaDsKKwljb25zdCBzdHJ1Y3QgY3RybCAqZ2Fpbl9jdHJsID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgY3RybCAqZXhwb3N1cmVfY3RybCA9IE5VTEw7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXR2YWwgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGdzcGNhX2Rldi0+c2RfZGVzYy0+bmN0cmxzOyBpKyspIHsKKwkJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybC5pZCA9PSBWNEwyX0NJRF9HQUlOKQorCQkJZ2Fpbl9jdHJsID0gJmdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV07CisJCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldLnFjdHJsLmlkID09IFY0TDJfQ0lEX0VYUE9TVVJFKQorCQkJZXhwb3N1cmVfY3RybCA9ICZnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldOworCX0KKwlpZiAoIWdhaW5fY3RybCB8fCAhZXhwb3N1cmVfY3RybCkgeworCQlQREVCVUcoRF9FUlIsICJFcnJvcjogZ3NwY2FfY29hcnNlX2dyYWluZWRfZXhwb19hdXRvZ2FpbiAiCisJCQkiY2FsbGVkIG9uIGNhbSB3aXRob3V0IGdhaW4gb3IgZXhwb3N1cmUiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGdhaW5fY3RybC0+Z2V0KGdzcGNhX2RldiwgJmdhaW4pIHx8CisJICAgIGV4cG9zdXJlX2N0cmwtPmdldChnc3BjYV9kZXYsICZleHBvc3VyZSkpCisJCXJldHVybiAwOworCisJb3JpZ19nYWluID0gZ2FpbjsKKwlvcmlnX2V4cG9zdXJlID0gZXhwb3N1cmU7CisJZ2Fpbl9sb3cgPQorCQkoZ2Fpbl9jdHJsLT5xY3RybC5tYXhpbXVtIC0gZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtKSAvIDUgKiAyOworCWdhaW5fbG93ICs9IGdhaW5fY3RybC0+cWN0cmwubWluaW11bTsKKwlnYWluX2hpZ2ggPQorCQkoZ2Fpbl9jdHJsLT5xY3RybC5tYXhpbXVtIC0gZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtKSAvIDUgKiA0OworCWdhaW5faGlnaCArPSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW07CisKKwkvKiBJZiB3ZSBhcmUgb2YgYSBtdWx0aXBsZSBvZiBkZWFkem9uZSwgZG8gbXVsdGlwbGUgc3RlcHMgdG8gcmVhY2ggdGhlCisJICAgZGVzaXJlZCBsdW1pbmF0aW9uIGZhc3QgKHdpdGggdGhlIHJpc2Mgb2YgYSBzbGlnaHQgb3ZlcnNob290KSAqLworCXN0ZXBzID0gKGRlc2lyZWRfYXZnX2x1bSAtIGF2Z19sdW0pIC8gZGVhZHpvbmU7CisKKwlQREVCVUcoRF9GUkFNLCAiYXV0b2dhaW46IGx1bTogJWQsIGRlc2lyZWQ6ICVkLCBzdGVwczogJWQiLAorCQlhdmdfbHVtLCBkZXNpcmVkX2F2Z19sdW0sIHN0ZXBzKTsKKworCWlmICgoZ2FpbiArIHN0ZXBzKSA+IGdhaW5faGlnaCAmJgorCSAgICBzZC0+ZXhwb3N1cmUgPCBleHBvc3VyZV9jdHJsLT5xY3RybC5tYXhpbXVtKSB7CisJCWdhaW4gPSBnYWluX2hpZ2g7CisJCXNkLT5leHBfdG9vX2xvd19jbnQrKzsKKwl9IGVsc2UgaWYgKChnYWluICsgc3RlcHMpIDwgZ2Fpbl9sb3cgJiYKKwkJICAgc2QtPmV4cG9zdXJlID4gZXhwb3N1cmVfY3RybC0+cWN0cmwubWluaW11bSkgeworCQlnYWluID0gZ2Fpbl9sb3c7CisJCXNkLT5leHBfdG9vX2hpZ2hfY250Kys7CisJfSBlbHNlIHsKKwkJZ2FpbiArPSBzdGVwczsKKwkJaWYgKGdhaW4gPiBnYWluX2N0cmwtPnFjdHJsLm1heGltdW0pCisJCQlnYWluID0gZ2Fpbl9jdHJsLT5xY3RybC5tYXhpbXVtOworCQllbHNlIGlmIChnYWluIDwgZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtKQorCQkJZ2FpbiA9IGdhaW5fY3RybC0+cWN0cmwubWluaW11bTsKKwkJc2QtPmV4cF90b29faGlnaF9jbnQgPSAwOworCQlzZC0+ZXhwX3Rvb19sb3dfY250ID0gMDsKKwl9CisKKwlpZiAoc2QtPmV4cF90b29faGlnaF9jbnQgPiAzKSB7CisJCWV4cG9zdXJlLS07CisJCXNkLT5leHBfdG9vX2hpZ2hfY250ID0gMDsKKwl9IGVsc2UgaWYgKHNkLT5leHBfdG9vX2xvd19jbnQgPiAzKSB7CisJCWV4cG9zdXJlKys7CisJCXNkLT5leHBfdG9vX2xvd19jbnQgPSAwOworCX0KKworCWlmIChnYWluICE9IG9yaWdfZ2FpbikgeworCQlnYWluX2N0cmwtPnNldChnc3BjYV9kZXYsIGdhaW4pOworCQlyZXR2YWwgPSAxOworCX0KKwlpZiAoZXhwb3N1cmUgIT0gb3JpZ19leHBvc3VyZSkgeworCQlleHBvc3VyZV9jdHJsLT5zZXQoZ3NwY2FfZGV2LCBleHBvc3VyZSk7CisJCXJldHZhbCA9IDE7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYwppbmRleCBjOThiNWQ2Li4xOWZlNmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCkBAIC01Miw3ICs1Miw3IEBACiBzdGF0aWMgaW50IHNkX3NldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgICAgewogCQkuaWQJID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTEwMzIsNyArMTAzMiw3IEBACiB9CiAKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgPSBzZF9jdHJscywKIAkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NwaWExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NwaWExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5NDVlZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY3BpYTEuYwpAQCAtMCwwICsxLDIwMjIgQEAKKy8qCisgKiBjcGlhIENQaUEgKDEpIGdzcGNhIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBIYW5zIGRlIEdvZWRlIDxoZGdvZWRlQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBtb2R1bGUgaXMgYWRhcHRlZCBmcm9tIHRoZSBpbiBrZXJuZWwgdjRsMSBjcGlhIGRyaXZlciB3aGljaCBpcyA6CisgKgorICogKEMpIENvcHlyaWdodCAxOTk5LTIwMDAgUGV0ZXIgUHJlZ2xlcgorICogKEMpIENvcHlyaWdodCAxOTk5LTIwMDAgU2NvdHQgSi4gQmVydGluCisgKiAoQykgQ29weXJpZ2h0IDE5OTktMjAwMCBKb2hhbm5lcyBFcmRmZWx0IDxqb2hhbm5lc0BlcmRmZWx0LmNvbT4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMCBTVE1pY3JvZWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgImNwaWExIgorCisjaW5jbHVkZSAiZ3NwY2EuaCIKKworTU9EVUxFX0FVVEhPUigiSGFucyBkZSBHb2VkZSA8aGRnb2VkZUByZWRoYXQuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJWaXNpb24gQ1BpQSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBjb25zdGFudCB2YWx1ZSdzICovCisjZGVmaW5lIE1BR0lDXzAJCTB4MTkKKyNkZWZpbmUgTUFHSUNfMQkJMHg2OAorI2RlZmluZSBEQVRBX0lOCQkweEMwCisjZGVmaW5lIERBVEFfT1VUCTB4NDAKKyNkZWZpbmUgVklERU9TSVpFX1FDSUYJMAkvKiAxNzZ4MTQ0ICovCisjZGVmaW5lIFZJREVPU0laRV9DSUYJMQkvKiAzNTJ4Mjg4ICovCisjZGVmaW5lIFNVQlNBTVBMRV80MjAJMAorI2RlZmluZSBTVUJTQU1QTEVfNDIyCTEKKyNkZWZpbmUgWVVWT1JERVJfWVVZVgkwCisjZGVmaW5lIFlVVk9SREVSX1VZVlkJMQorI2RlZmluZSBOT1RfQ09NUFJFU1NFRAkwCisjZGVmaW5lIENPTVBSRVNTRUQJMQorI2RlZmluZSBOT19ERUNJTUFUSU9OCTAKKyNkZWZpbmUgREVDSU1BVElPTl9FTkFCCTEKKyNkZWZpbmUgRU9JCQkweGZmCS8qIEVuZCBPZiBJbWFnZSAqLworI2RlZmluZSBFT0wJCTB4ZmQJLyogRW5kIE9mIExpbmUgKi8KKyNkZWZpbmUgRlJBTUVfSEVBREVSX1NJWkUJNjQKKworLyogSW1hZ2UgZ3JhYiBtb2RlcyAqLworI2RlZmluZSBDUElBX0dSQUJfU0lOR0xFCTAKKyNkZWZpbmUgQ1BJQV9HUkFCX0NPTlRJTkVPVVMJMQorCisvKiBDb21wcmVzc2lvbiBwYXJhbWV0ZXJzICovCisjZGVmaW5lIENQSUFfQ09NUFJFU1NJT05fTk9ORQkwCisjZGVmaW5lIENQSUFfQ09NUFJFU1NJT05fQVVUTwkxCisjZGVmaW5lIENQSUFfQ09NUFJFU1NJT05fTUFOVUFMCTIKKyNkZWZpbmUgQ1BJQV9DT01QUkVTU0lPTl9UQVJHRVRfUVVBTElUWSAgICAgICAgIDAKKyNkZWZpbmUgQ1BJQV9DT01QUkVTU0lPTl9UQVJHRVRfRlJBTUVSQVRFICAgICAgIDEKKworLyogUmV0dXJuIG9mZnNldHMgZm9yIEdldENhbWVyYVN0YXRlICovCisjZGVmaW5lIFNZU1RFTVNUQVRFCTAKKyNkZWZpbmUgR1JBQlNUQVRFCTEKKyNkZWZpbmUgU1RSRUFNU1RBVEUJMgorI2RlZmluZSBGQVRBTEVSUk9SCTMKKyNkZWZpbmUgQ01ERVJST1IJNAorI2RlZmluZSBERUJVR0ZMQUdTCTUKKyNkZWZpbmUgVlBTVEFUVVMJNgorI2RlZmluZSBFUlJPUkNPREUJNworCisvKiBTeXN0ZW1TdGF0ZSAqLworI2RlZmluZSBVTklOSVRJQUxJU0VEX1NUQVRFCTAKKyNkZWZpbmUgUEFTU19USFJPVUdIX1NUQVRFCTEKKyNkZWZpbmUgTE9fUE9XRVJfU1RBVEUJCTIKKyNkZWZpbmUgSElfUE9XRVJfU1RBVEUJCTMKKyNkZWZpbmUgV0FSTV9CT09UX1NUQVRFCQk0CisKKy8qIEdyYWJTdGF0ZSAqLworI2RlZmluZSBHUkFCX0lETEUJCTAKKyNkZWZpbmUgR1JBQl9BQ1RJVkUJCTEKKyNkZWZpbmUgR1JBQl9ET05FCQkyCisKKy8qIFN0cmVhbVN0YXRlICovCisjZGVmaW5lIFNUUkVBTV9OT1RfUkVBRFkJMAorI2RlZmluZSBTVFJFQU1fUkVBRFkJCTEKKyNkZWZpbmUgU1RSRUFNX09QRU4JCTIKKyNkZWZpbmUgU1RSRUFNX1BBVVNFRAkJMworI2RlZmluZSBTVFJFQU1fRklOSVNIRUQJCTQKKworLyogRmF0YWwgRXJyb3IsIENtZEVycm9yLCBhbmQgRGVidWdGbGFncyAqLworI2RlZmluZSBDUElBX0ZMQUcJICAxCisjZGVmaW5lIFNZU1RFTV9GTEFHCSAgMgorI2RlZmluZSBJTlRfQ1RSTF9GTEFHCSAgNAorI2RlZmluZSBQUk9DRVNTX0ZMQUcJICA4CisjZGVmaW5lIENPTV9GTEFHCSAxNgorI2RlZmluZSBWUF9DVFJMX0ZMQUcJIDMyCisjZGVmaW5lIENBUFRVUkVfRkxBRwkgNjQKKyNkZWZpbmUgREVCVUdfRkxBRwkxMjgKKworLyogVlBTdGF0dXMgKi8KKyNkZWZpbmUgVlBfU1RBVEVfT0sJCQkweDAwCisKKyNkZWZpbmUgVlBfU1RBVEVfRkFJTEVEX1ZJREVPSU5JVAkweDAxCisjZGVmaW5lIFZQX1NUQVRFX0ZBSUxFRF9BRUNBQ0JJTklUCTB4MDIKKyNkZWZpbmUgVlBfU1RBVEVfQUVDX01BWAkJMHgwNAorI2RlZmluZSBWUF9TVEFURV9BQ0JfQk1BWAkJMHgwOAorCisjZGVmaW5lIFZQX1NUQVRFX0FDQl9STUlOCQkweDEwCisjZGVmaW5lIFZQX1NUQVRFX0FDQl9HTUlOCQkweDIwCisjZGVmaW5lIFZQX1NUQVRFX0FDQl9STUFYCQkweDQwCisjZGVmaW5lIFZQX1NUQVRFX0FDQl9HTUFYCQkweDgwCisKKy8qIGRlZmF1bHQgKG1pbmltdW0pIGNvbXBlbnNhdGlvbiB2YWx1ZXMgKi8KKyNkZWZpbmUgQ09NUF9SRUQgICAgICAgIDIyMAorI2RlZmluZSBDT01QX0dSRUVOMSAgICAgMjE0CisjZGVmaW5lIENPTVBfR1JFRU4yICAgICBDT01QX0dSRUVOMQorI2RlZmluZSBDT01QX0JMVUUgICAgICAgMjMwCisKKy8qIGV4cG9zdXJlIHN0YXR1cyAqLworI2RlZmluZSBFWFBPU1VSRV9WRVJZX0xJR0hUIDAKKyNkZWZpbmUgRVhQT1NVUkVfTElHSFQgICAgICAxCisjZGVmaW5lIEVYUE9TVVJFX05PUk1BTCAgICAgMgorI2RlZmluZSBFWFBPU1VSRV9EQVJLICAgICAgIDMKKyNkZWZpbmUgRVhQT1NVUkVfVkVSWV9EQVJLICA0CisKKyNkZWZpbmUgQ1BJQV9NT0RVTEVfQ1BJQQkJCSgwIDw8IDUpCisjZGVmaW5lIENQSUFfTU9EVUxFX1NZU1RFTQkJCSgxIDw8IDUpCisjZGVmaW5lIENQSUFfTU9EVUxFX1ZQX0NUUkwJCQkoNSA8PCA1KQorI2RlZmluZSBDUElBX01PRFVMRV9DQVBUVVJFCQkJKDYgPDwgNSkKKyNkZWZpbmUgQ1BJQV9NT0RVTEVfREVCVUcJCQkoNyA8PCA1KQorCisjZGVmaW5lIElOUFVUIChEQVRBX0lOIDw8IDgpCisjZGVmaW5lIE9VVFBVVCAoREFUQV9PVVQgPDwgOCkKKworI2RlZmluZSBDUElBX0NPTU1BTkRfR2V0Q1BJQVZlcnNpb24JKElOUFVUIHwgQ1BJQV9NT0RVTEVfQ1BJQSB8IDEpCisjZGVmaW5lIENQSUFfQ09NTUFORF9HZXRQblBJRAkJKElOUFVUIHwgQ1BJQV9NT0RVTEVfQ1BJQSB8IDIpCisjZGVmaW5lIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXMJKElOUFVUIHwgQ1BJQV9NT0RVTEVfQ1BJQSB8IDMpCisjZGVmaW5lIENQSUFfQ09NTUFORF9Hb3RvSGlQb3dlcgkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ1BJQSB8IDQpCisjZGVmaW5lIENQSUFfQ09NTUFORF9Hb3RvTG9Qb3dlcgkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ1BJQSB8IDUpCisjZGVmaW5lIENQSUFfQ09NTUFORF9Hb3RvU3VzcGVuZAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ1BJQSB8IDcpCisjZGVmaW5lIENQSUFfQ09NTUFORF9Hb3RvUGFzc1Rocm91Z2gJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCA4KQorI2RlZmluZSBDUElBX0NPTU1BTkRfTW9kaWZ5Q2FtZXJhU3RhdHVzCShPVVRQVVQgfCBDUElBX01PRFVMRV9DUElBIHwgMTApCisKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1JlYWRWQ1JlZ3MJCShJTlBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDEpCisjZGVmaW5lIENQSUFfQ09NTUFORF9Xcml0ZVZDUmVnCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgMikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1JlYWRNQ1BvcnRzCShJTlBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDMpCisjZGVmaW5lIENQSUFfQ09NTUFORF9Xcml0ZU1DUG9ydAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgNCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldEJhdWRSYXRlCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCA1KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0RUNQVGltaW5nCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCA2KQorI2RlZmluZSBDUElBX0NPTU1BTkRfUmVhZElEQVRBCQkoSU5QVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCA3KQorI2RlZmluZSBDUElBX0NPTU1BTkRfV3JpdGVJREFUQQkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDgpCisjZGVmaW5lIENQSUFfQ09NTUFORF9HZW5lcmljQ2FsbAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgOSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0kyQ1N0YXJ0CQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgMTApCisjZGVmaW5lIENQSUFfQ09NTUFORF9JMkNTdG9wCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgMTEpCisjZGVmaW5lIENQSUFfQ09NTUFORF9JMkNXcml0ZQkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDEyKQorI2RlZmluZSBDUElBX0NPTU1BTkRfSTJDUmVhZAkJKElOUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgMTMpCisKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dldFZQVmVyc2lvbgkoSU5QVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1Jlc2V0RnJhbWVDb3VudGVyCShJTlBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAyKQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0Q29sb3VyUGFyYW1zCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMykKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldEV4cG9zdXJlCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgNCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldENvbG91ckJhbGFuY2UJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCA2KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0U2Vuc29yRlBTCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgNykKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldFZQRGVmYXVsdHMJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCA4KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0QXBjb3IJCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgOSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldEZsaWNrZXJDdHJsCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMTApCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRWTE9mZnNldAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDExKQorI2RlZmluZSBDUElBX0NPTU1BTkRfR2V0Q29sb3VyUGFyYW1zCShJTlBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxNikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dldENvbG91ckJhbGFuY2UJKElOUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDE3KQorI2RlZmluZSBDUElBX0NPTU1BTkRfR2V0RXhwb3N1cmUJKElOUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDE4KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0U2Vuc29yTWF0cml4CShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMTkpCisjZGVmaW5lIENQSUFfQ09NTUFORF9Db2xvdXJCYXJzCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDI1KQorI2RlZmluZSBDUElBX0NPTU1BTkRfUmVhZFZQUmVncwkJKElOUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDMwKQorI2RlZmluZSBDUElBX0NPTU1BTkRfV3JpdGVWUFJlZwkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAzMSkKKworI2RlZmluZSBDUElBX0NPTU1BTkRfR3JhYkZyYW1lCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDEpCisjZGVmaW5lIENQSUFfQ09NTUFORF9VcGxvYWRGcmFtZQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDIpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRHcmFiTW9kZQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDMpCisjZGVmaW5lIENQSUFfQ09NTUFORF9Jbml0U3RyZWFtQ2FwCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgNCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0ZpbmlTdHJlYW1DYXAJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCA1KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU3RhcnRTdHJlYW1DYXAJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCA2KQorI2RlZmluZSBDUElBX0NPTU1BTkRfRW5kU3RyZWFtQ2FwCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgNykKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldEZvcm1hdAkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCA4KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0Uk9JCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDkpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRDb21wcmVzc2lvbgkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDEwKQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0Q29tcHJlc3Npb25UYXJnZXQgKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxMSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldFlVVlRocmVzaAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDEyKQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0Q29tcHJlc3Npb25QYXJhbXMgKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxMykKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0Rpc2NhcmRGcmFtZQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDE0KQorI2RlZmluZSBDUElBX0NPTU1BTkRfR3JhYlJlc2V0CQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDE1KQorCisjZGVmaW5lIENQSUFfQ09NTUFORF9PdXRwdXRSUzIzMgkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCAxKQorI2RlZmluZSBDUElBX0NPTU1BTkRfQWJvcnRQcm9jZXNzCShPVVRQVVQgfCBDUElBX01PRFVMRV9ERUJVRyB8IDQpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXREcmFtUGFnZQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCA1KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU3RhcnREcmFtVXBsb2FkCShPVVRQVVQgfCBDUElBX01PRFVMRV9ERUJVRyB8IDYpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TdGFydER1bW15RHRyZWFtCShPVVRQVVQgfCBDUElBX01PRFVMRV9ERUJVRyB8IDgpCisjZGVmaW5lIENQSUFfQ09NTUFORF9BYm9ydFN0cmVhbQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCA5KQorI2RlZmluZSBDUElBX0NPTU1BTkRfRG93bmxvYWREUkFNCShPVVRQVVQgfCBDUElBX01PRFVMRV9ERUJVRyB8IDEwKQorI2RlZmluZSBDUElBX0NPTU1BTkRfTnVsbAkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgMTEpCisKKyNkZWZpbmUgUk9VTkRfVVBfRVhQX0ZPUl9GTElDS0VSIDE1CisKKy8qIENvbnN0YW50cyBmb3IgYXV0b21hdGljIGZyYW1lIHJhdGUgYWRqdXN0bWVudCAqLworI2RlZmluZSBNQVhfRVhQICAgICAgIDMwMgorI2RlZmluZSBNQVhfRVhQXzEwMiAgIDI1NQorI2RlZmluZSBMT1dfRVhQICAgICAgIDE0MAorI2RlZmluZSBWRVJZX0xPV19FWFAgICA3MAorI2RlZmluZSBUQyAgICAgICAgICAgICA5NAorI2RlZmluZQlFWFBfQUNDX0RBUksgICA1MAorI2RlZmluZQlFWFBfQUNDX0xJR0hUICA5MAorI2RlZmluZSBISUdIX0NPTVBfMTAyIDE2MAorI2RlZmluZSBNQVhfQ09NUCAgICAgIDIzOQorI2RlZmluZSBEQVJLX1RJTUUgICAgICAgMworI2RlZmluZSBMSUdIVF9USU1FICAgICAgMworCisjZGVmaW5lIEZJUk1XQVJFX1ZFUlNJT04oeCwgeSkgKHNkLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24gPT0gKHgpICYmIFwKKwkJCQlzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiA9PSAoeSkpCisKKy8qIERldmVsb3BlcidzIEd1aWRlIFRhYmxlIDUgcCAzLTM0CisgKiBpbmRleGVkIGJ5IFttYWluc11bc2Vuc29yRnBzLmJhc2VyYXRlXVtzZW5zb3JGcHMuZGl2aXNvcl0qLworc3RhdGljIHU4IGZsaWNrZXJfanVtcHNbMl1bMl1bNF0gPQoreyB7IHsgNzYsIDM4LCAxOSwgOSB9LCB7IDkyLCA0NiwgMjMsIDExIH0gfSwKKyAgeyB7IDY0LCAzMiwgMTYsIDggfSwgeyA3NiwgMzgsIDE5LCA5fSB9Cit9OworCitzdHJ1Y3QgY2FtX3BhcmFtcyB7CisJc3RydWN0IHsKKwkJdTggZmlybXdhcmVWZXJzaW9uOworCQl1OCBmaXJtd2FyZVJldmlzaW9uOworCQl1OCB2Y1ZlcnNpb247CisJCXU4IHZjUmV2aXNpb247CisJfSB2ZXJzaW9uOworCXN0cnVjdCB7CisJCXUxNiB2ZW5kb3I7CisJCXUxNiBwcm9kdWN0OworCQl1MTYgZGV2aWNlUmV2aXNpb247CisJfSBwbnBJRDsKKwlzdHJ1Y3QgeworCQl1OCB2cFZlcnNpb247CisJCXU4IHZwUmV2aXNpb247CisJCXUxNiBjYW1lcmFIZWFkSUQ7CisJfSB2cFZlcnNpb247CisJc3RydWN0IHsKKwkJdTggc3lzdGVtU3RhdGU7CisJCXU4IGdyYWJTdGF0ZTsKKwkJdTggc3RyZWFtU3RhdGU7CisJCXU4IGZhdGFsRXJyb3I7CisJCXU4IGNtZEVycm9yOworCQl1OCBkZWJ1Z0ZsYWdzOworCQl1OCB2cFN0YXR1czsKKwkJdTggZXJyb3JDb2RlOworCX0gc3RhdHVzOworCXN0cnVjdCB7CisJCXU4IGJyaWdodG5lc3M7CisJCXU4IGNvbnRyYXN0OworCQl1OCBzYXR1cmF0aW9uOworCX0gY29sb3VyUGFyYW1zOworCXN0cnVjdCB7CisJCXU4IGdhaW5Nb2RlOworCQl1OCBleHBNb2RlOworCQl1OCBjb21wTW9kZTsKKwkJdTggY2VudHJlV2VpZ2h0OworCQl1OCBnYWluOworCQl1OCBmaW5lRXhwOworCQl1OCBjb2Fyc2VFeHBMbzsKKwkJdTggY29hcnNlRXhwSGk7CisJCXU4IHJlZENvbXA7CisJCXU4IGdyZWVuMUNvbXA7CisJCXU4IGdyZWVuMkNvbXA7CisJCXU4IGJsdWVDb21wOworCX0gZXhwb3N1cmU7CisJc3RydWN0IHsKKwkJdTggYmFsYW5jZU1vZGU7CisJCXU4IHJlZEdhaW47CisJCXU4IGdyZWVuR2FpbjsKKwkJdTggYmx1ZUdhaW47CisJfSBjb2xvdXJCYWxhbmNlOworCXN0cnVjdCB7CisJCXU4IGRpdmlzb3I7CisJCXU4IGJhc2VyYXRlOworCX0gc2Vuc29yRnBzOworCXN0cnVjdCB7CisJCXU4IGdhaW4xOworCQl1OCBnYWluMjsKKwkJdTggZ2FpbjQ7CisJCXU4IGdhaW44OworCX0gYXBjb3I7CisJc3RydWN0IHsKKwkJdTggZGlzYWJsZWQ7CisJCXU4IGZsaWNrZXJNb2RlOworCQl1OCBjb2Fyc2VKdW1wOworCQl1OCBhbGxvd2FibGVPdmVyRXhwb3N1cmU7CisJfSBmbGlja2VyQ29udHJvbDsKKwlzdHJ1Y3QgeworCQl1OCBnYWluMTsKKwkJdTggZ2FpbjI7CisJCXU4IGdhaW40OworCQl1OCBnYWluODsKKwl9IHZsT2Zmc2V0OworCXN0cnVjdCB7CisJCXU4IG1vZGU7CisJCXU4IGRlY2ltYXRpb247CisJfSBjb21wcmVzc2lvbjsKKwlzdHJ1Y3QgeworCQl1OCBmclRhcmdldGluZzsKKwkJdTggdGFyZ2V0RlI7CisJCXU4IHRhcmdldFE7CisJfSBjb21wcmVzc2lvblRhcmdldDsKKwlzdHJ1Y3QgeworCQl1OCB5VGhyZXNob2xkOworCQl1OCB1dlRocmVzaG9sZDsKKwl9IHl1dlRocmVzaG9sZDsKKwlzdHJ1Y3QgeworCQl1OCBoeXN0ZXJlc2lzOworCQl1OCB0aHJlc2hNYXg7CisJCXU4IHNtYWxsU3RlcDsKKwkJdTggbGFyZ2VTdGVwOworCQl1OCBkZWNpbWF0aW9uSHlzdGVyZXNpczsKKwkJdTggZnJEaWZmU3RlcFRocmVzaDsKKwkJdTggcURpZmZTdGVwVGhyZXNoOworCQl1OCBkZWNpbWF0aW9uVGhyZXNoTW9kOworCX0gY29tcHJlc3Npb25QYXJhbXM7CisJc3RydWN0IHsKKwkJdTggdmlkZW9TaXplOwkJLyogQ0lGL1FDSUYgKi8KKwkJdTggc3ViU2FtcGxlOworCQl1OCB5dXZPcmRlcjsKKwl9IGZvcm1hdDsKKwlzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVsIFFYMyBzcGVjaWZpYyBkYXRhICovCisJCXU4IHF4M19kZXRlY3RlZDsgICAgICAgIC8qIGEgUVgzIGlzIHByZXNlbnQgKi8KKwkJdTggdG9wbGlnaHQ7ICAgICAgICAgICAgLyogdG9wIGxpZ2h0IGxpdCAsIFIvVyAqLworCQl1OCBib3R0b21saWdodDsgICAgICAgICAvKiBib3R0b20gbGlnaHQgbGl0LCBSL1cgKi8KKwkJdTggYnV0dG9uOyAgICAgICAgICAgICAgLyogc25hcHNob3QgYnV0dG9uIHByZXNzZWQgKFIvTykgKi8KKwkJdTggY3JhZGxlZDsgICAgICAgICAgICAgLyogbWljcm9zY29wZSBpcyBpbiBjcmFkbGUgKFIvTykgKi8KKwl9IHF4MzsKKwlzdHJ1Y3QgeworCQl1OCBjb2xTdGFydDsJCS8qIHNraXAgZmlyc3QgOCpjb2xTdGFydCBwaXhlbHMgKi8KKwkJdTggY29sRW5kOwkJLyogZmluaXNoIGF0IDgqY29sRW5kIHBpeGVscyAqLworCQl1OCByb3dTdGFydDsJCS8qIHNraXAgZmlyc3QgNCpyb3dTdGFydCBsaW5lcyAqLworCQl1OCByb3dFbmQ7CQkvKiBmaW5pc2ggYXQgNCpyb3dFbmQgbGluZXMgKi8KKwl9IHJvaTsKKwl1OCBlY3BUaW1pbmc7CisJdTggc3RyZWFtU3RhcnRMaW5lOworfTsKKworLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CQkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisJc3RydWN0IGNhbV9wYXJhbXMgcGFyYW1zOwkJLyogY2FtZXJhIHNldHRpbmdzICovCisKKwlhdG9taWNfdCBjYW1fZXhwb3N1cmU7CisJYXRvbWljX3QgZnBzOworCWludCBleHBvc3VyZV9jb3VudDsKKwl1OCBleHBvc3VyZV9zdGF0dXM7CisJdTggbWFpbnNGcmVxOwkJCQkvKiAwID0gNTBoeiwgMSA9IDYwaHogKi8KKwl1OCBmaXJzdF9mcmFtZTsKKwl1OCBmcmVxOworfTsKKworLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldHNhdHVyYXRpb24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRzYXR1cmF0aW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbXB0YXJnZXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb21wdGFyZ2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CisKK3N0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxMDAsCisJCS5zdGVwID0gMSwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgNTAKKwkJLmRlZmF1bHRfdmFsdWUgPSBCUklHSFRORVNTX0RFRiwKKwkJLmZsYWdzID0gMCwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCisJICAgIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAorCX0sCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQ29udHJhc3QiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gOTYsCisJCS5zdGVwICAgID0gOCwKKyNkZWZpbmUgQ09OVFJBU1RfREVGIDQ4CisJCS5kZWZhdWx0X3ZhbHVlID0gQ09OVFJBU1RfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCisJICAgIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKKwl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiU2F0dXJhdGlvbiIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxMDAsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgU0FUVVJBVElPTl9ERUYgNTAKKwkJLmRlZmF1bHRfdmFsdWUgPSBTQVRVUkFUSU9OX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldHNhdHVyYXRpb24sCisJICAgIC5nZXQgPSBzZF9nZXRzYXR1cmF0aW9uLAorCX0sCisJeworCQl7CisJCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCisJCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX01FTlUsCisJCQkubmFtZSAgICA9ICJMaWdodCBmcmVxdWVuY3kgZmlsdGVyIiwKKwkJCS5taW5pbXVtID0gMCwKKwkJCS5tYXhpbXVtID0gMiwJLyogMDogMCwgMTogNTBIeiwgMjo2MEh6ICovCisJCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEZSRVFfREVGIDEKKwkJCS5kZWZhdWx0X3ZhbHVlID0gRlJFUV9ERUYsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRmcmVxLAorCQkuZ2V0ID0gc2RfZ2V0ZnJlcSwKKwl9LAorCXsKKwkJeworI2RlZmluZSBWNEwyX0NJRF9DT01QX1RBUkdFVCBWNEwyX0NJRF9QUklWQVRFX0JBU0UKKwkJCS5pZAkgPSBWNEwyX0NJRF9DT01QX1RBUkdFVCwKKwkJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfTUVOVSwKKwkJCS5uYW1lICAgID0gIkNvbXByZXNzaW9uIFRhcmdldCIsCisJCQkubWluaW11bSA9IDAsCisJCQkubWF4aW11bSA9IDEsCisJCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIENPTVBfVEFSR0VUX0RFRiBDUElBX0NPTVBSRVNTSU9OX1RBUkdFVF9RVUFMSVRZCisJCQkuZGVmYXVsdF92YWx1ZSA9IENPTVBfVEFSR0VUX0RFRiwKKwkJfSwKKwkJLnNldCA9IHNkX3NldGNvbXB0YXJnZXQsCisJCS5nZXQgPSBzZF9nZXRjb21wdGFyZ2V0LAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBtb2RlW10gPSB7CisJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfQ1BJQTEsIFY0TDJfRklFTERfTk9ORSwKKwkJLyogVGhlIHNpemVpbWFnZSBpcyB0cmlhbCBhbmQgZXJyb3IsIGFzIHdpdGggbG93IGZyYW1lcmF0ZXMKKwkJICAgdGhlIGNhbWVyYSB3aWxsIHBhZCBvdXQgdXNiIGZyYW1lcywgbWFraW5nIHRoZSBpbWFnZQorCQkgICBkYXRhIGxhcmdlciB0aGVuIHN0cmljdGx5IG5lY2Vzc2FyeSAqLworCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAorCQkuc2l6ZWltYWdlID0gNjU1MzYsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gM30sCisJezE3NiwgMTQ0LCBWNEwyX1BJWF9GTVRfQ1BJQTEsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDE3MiwKKwkJLnNpemVpbWFnZSA9IDY1NTM2LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDJ9LAorCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX0NQSUExLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAyNjIxNDQsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMX0sCisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfQ1BJQTEsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDM1MiwKKwkJLnNpemVpbWFnZSA9IDI2MjE0NCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogR2VuZXJhbCBmdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBjcGlhX3VzYl90cmFuc2ZlckNtZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4ICpjb21tYW5kKQoreworCXU4IHJlcXVlc3R0eXBlOworCXVuc2lnbmVkIGludCBwaXBlOworCWludCByZXQsIGRhdGFieXRlcyA9IGNvbW1hbmRbNl0gfCAoY29tbWFuZFs3XSA8PCA4KTsKKwkvKiBTb21ldGltZXMgd2Ugc2VlIHNwdXJpb3VzIEVQSVBFIGVycm9ycyAqLworCWludCByZXRyaWVzID0gMzsKKworCWlmIChjb21tYW5kWzBdID09IERBVEFfSU4pIHsKKwkJcGlwZSA9IHVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCk7CisJCXJlcXVlc3R0eXBlID0gVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0U7CisJfSBlbHNlIGlmIChjb21tYW5kWzBdID09IERBVEFfT1VUKSB7CisJCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApOworCQlyZXF1ZXN0dHlwZSA9IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0U7CisJfSBlbHNlIHsKKwkJUERFQlVHKERfRVJSLCAiVW5leHBlY3RlZCBmaXJzdCBieXRlIG9mIGNvbW1hbmQ6ICV4IiwKKwkJICAgICAgIGNvbW1hbmRbMF0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKK3JldHJ5OgorCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwgcGlwZSwKKwkJCSAgICAgIGNvbW1hbmRbMV0sCisJCQkgICAgICByZXF1ZXN0dHlwZSwKKwkJCSAgICAgIGNvbW1hbmRbMl0gfCAoY29tbWFuZFszXSA8PCA4KSwKKwkJCSAgICAgIGNvbW1hbmRbNF0gfCAoY29tbWFuZFs1XSA8PCA4KSwKKwkJCSAgICAgIGdzcGNhX2Rldi0+dXNiX2J1ZiwgZGF0YWJ5dGVzLCAxMDAwKTsKKworCWlmIChyZXQgPCAwKQorCQlQREVCVUcoRF9FUlIsICJ1c2JfY29udHJvbF9tc2cgJTAyeCwgZXJyb3IgJWQiLCBjb21tYW5kWzFdLAorCQkgICAgICAgcmV0KTsKKworCWlmIChyZXQgPT0gLUVQSVBFICYmIHJldHJpZXMgPiAwKSB7CisJCXJldHJpZXMtLTsKKwkJZ290byByZXRyeTsKKwl9CisKKwlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogMDsKK30KKworLyogc2VuZCBhbiBhcmJpdHJhcnkgY29tbWFuZCB0byB0aGUgY2FtZXJhICovCitzdGF0aWMgaW50IGRvX2NvbW1hbmQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgY29tbWFuZCwKKwkJICAgICAgdTggYSwgdTggYiwgdTggYywgdTggZCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldCwgZGF0YXNpemU7CisJdTggY21kWzhdOworCisJc3dpdGNoIChjb21tYW5kKSB7CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0Q1BJQVZlcnNpb246CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0UG5QSUQ6CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0Q2FtZXJhU3RhdHVzOgorCWNhc2UgQ1BJQV9DT01NQU5EX0dldFZQVmVyc2lvbjoKKwljYXNlIENQSUFfQ09NTUFORF9HZXRDb2xvdXJQYXJhbXM6CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0Q29sb3VyQmFsYW5jZToKKwljYXNlIENQSUFfQ09NTUFORF9HZXRFeHBvc3VyZToKKwkJZGF0YXNpemUgPSA4OworCQlicmVhazsKKwljYXNlIENQSUFfQ09NTUFORF9SZWFkTUNQb3J0czoKKwljYXNlIENQSUFfQ09NTUFORF9SZWFkVkNSZWdzOgorCQlkYXRhc2l6ZSA9IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRhdGFzaXplID0gMDsKKwkJYnJlYWs7CisJfQorCisJY21kWzBdID0gY29tbWFuZCA+PiA4OworCWNtZFsxXSA9IGNvbW1hbmQgJiAweGZmOworCWNtZFsyXSA9IGE7CisJY21kWzNdID0gYjsKKwljbWRbNF0gPSBjOworCWNtZFs1XSA9IGQ7CisJY21kWzZdID0gZGF0YXNpemU7CisJY21kWzddID0gMDsKKworCXJldCA9IGNwaWFfdXNiX3RyYW5zZmVyQ21kKGdzcGNhX2RldiwgY21kKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc3dpdGNoIChjb21tYW5kKSB7CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0Q1BJQVZlcnNpb246CisJCXNkLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24gPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXNkLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVJldmlzaW9uID0gZ3NwY2FfZGV2LT51c2JfYnVmWzFdOworCQlzZC0+cGFyYW1zLnZlcnNpb24udmNWZXJzaW9uID0gZ3NwY2FfZGV2LT51c2JfYnVmWzJdOworCQlzZC0+cGFyYW1zLnZlcnNpb24udmNSZXZpc2lvbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlszXTsKKwkJYnJlYWs7CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0UG5QSUQ6CisJCXNkLT5wYXJhbXMucG5wSUQudmVuZG9yID0KKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSB8IChnc3BjYV9kZXYtPnVzYl9idWZbMV0gPDwgOCk7CisJCXNkLT5wYXJhbXMucG5wSUQucHJvZHVjdCA9CisJCQlnc3BjYV9kZXYtPnVzYl9idWZbMl0gfCAoZ3NwY2FfZGV2LT51c2JfYnVmWzNdIDw8IDgpOworCQlzZC0+cGFyYW1zLnBucElELmRldmljZVJldmlzaW9uID0KKwkJCWdzcGNhX2Rldi0+dXNiX2J1Zls0XSB8IChnc3BjYV9kZXYtPnVzYl9idWZbNV0gPDwgOCk7CisJCWJyZWFrOworCWNhc2UgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1czoKKwkJc2QtPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXNkLT5wYXJhbXMuc3RhdHVzLmdyYWJTdGF0ZSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXTsKKwkJc2QtPnBhcmFtcy5zdGF0dXMuc3RyZWFtU3RhdGUgPSBnc3BjYV9kZXYtPnVzYl9idWZbMl07CisJCXNkLT5wYXJhbXMuc3RhdHVzLmZhdGFsRXJyb3IgPSBnc3BjYV9kZXYtPnVzYl9idWZbM107CisJCXNkLT5wYXJhbXMuc3RhdHVzLmNtZEVycm9yID0gZ3NwY2FfZGV2LT51c2JfYnVmWzRdOworCQlzZC0+cGFyYW1zLnN0YXR1cy5kZWJ1Z0ZsYWdzID0gZ3NwY2FfZGV2LT51c2JfYnVmWzVdOworCQlzZC0+cGFyYW1zLnN0YXR1cy52cFN0YXR1cyA9IGdzcGNhX2Rldi0+dXNiX2J1Zls2XTsKKwkJc2QtPnBhcmFtcy5zdGF0dXMuZXJyb3JDb2RlID0gZ3NwY2FfZGV2LT51c2JfYnVmWzddOworCQlicmVhazsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRWUFZlcnNpb246CisJCXNkLT5wYXJhbXMudnBWZXJzaW9uLnZwVmVyc2lvbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJc2QtPnBhcmFtcy52cFZlcnNpb24udnBSZXZpc2lvbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXTsKKwkJc2QtPnBhcmFtcy52cFZlcnNpb24uY2FtZXJhSGVhZElEID0KKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZlsyXSB8IChnc3BjYV9kZXYtPnVzYl9idWZbM10gPDwgOCk7CisJCWJyZWFrOworCWNhc2UgQ1BJQV9DT01NQU5EX0dldENvbG91clBhcmFtczoKKwkJc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuY29udHJhc3QgPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJCXNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLnNhdHVyYXRpb24gPSBnc3BjYV9kZXYtPnVzYl9idWZbMl07CisJCWJyZWFrOworCWNhc2UgQ1BJQV9DT01NQU5EX0dldENvbG91ckJhbGFuY2U6CisJCXNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5yZWRHYWluID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlzZC0+cGFyYW1zLmNvbG91ckJhbGFuY2UuZ3JlZW5HYWluID0gZ3NwY2FfZGV2LT51c2JfYnVmWzFdOworCQlzZC0+cGFyYW1zLmNvbG91ckJhbGFuY2UuYmx1ZUdhaW4gPSBnc3BjYV9kZXYtPnVzYl9idWZbMl07CisJCWJyZWFrOworCWNhc2UgQ1BJQV9DT01NQU5EX0dldEV4cG9zdXJlOgorCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW4gPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZmluZUV4cCA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXTsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbyA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsyXTsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlszXTsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5yZWRDb21wID0gZ3NwY2FfZGV2LT51c2JfYnVmWzRdOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMUNvbXAgPSBnc3BjYV9kZXYtPnVzYl9idWZbNV07CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4yQ29tcCA9IGdzcGNhX2Rldi0+dXNiX2J1Zls2XTsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5ibHVlQ29tcCA9IGdzcGNhX2Rldi0+dXNiX2J1Zls3XTsKKwkJYnJlYWs7CisKKwljYXNlIENQSUFfQ09NTUFORF9SZWFkTUNQb3J0czoKKwkJaWYgKCFzZC0+cGFyYW1zLnF4My5xeDNfZGV0ZWN0ZWQpCisJCQlicmVhazsKKwkJLyogdGVzdCBidXR0b24gcHJlc3MgKi8KKwkJc2QtPnBhcmFtcy5xeDMuYnV0dG9uID0gKChnc3BjYV9kZXYtPnVzYl9idWZbMV0gJiAweDAyKSA9PSAwKTsKKwkJaWYgKHNkLT5wYXJhbXMucXgzLmJ1dHRvbikgeworCQkJLyogYnV0dG9uIHByZXNzZWQgLSB1bmxvY2sgdGhlIGxhdGNoICovCisJCQlkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1dyaXRlTUNQb3J0LAorCQkJCSAgIDMsIDB4REYsIDB4REYsIDApOworCQkJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9Xcml0ZU1DUG9ydCwKKwkJCQkgICAzLCAweEZGLCAweEZGLCAwKTsKKwkJfQorCisJCS8qIHRlc3Qgd2hldGhlciBtaWNyb3Njb3BlIGlzIGNyYWRsZWQgKi8KKwkJc2QtPnBhcmFtcy5xeDMuY3JhZGxlZCA9ICgoZ3NwY2FfZGV2LT51c2JfYnVmWzJdICYgMHg0MCkgPT0gMCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKiBzZW5kIGEgY29tbWFuZCB0byB0aGUgY2FtZXJhIHdpdGggYW4gYWRkaXRpb25hbCBkYXRhIHRyYW5zYWN0aW9uICovCitzdGF0aWMgaW50IGRvX2NvbW1hbmRfZXh0ZW5kZWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgY29tbWFuZCwKKwkJCSAgICAgICB1OCBhLCB1OCBiLCB1OCBjLCB1OCBkLAorCQkJICAgICAgIHU4IGUsIHU4IGYsIHU4IGcsIHU4IGgsCisJCQkgICAgICAgdTggaSwgdTggaiwgdTggaywgdTggbCkKK3sKKwl1OCBjbWRbOF07CisKKwljbWRbMF0gPSBjb21tYW5kID4+IDg7CisJY21kWzFdID0gY29tbWFuZCAmIDB4ZmY7CisJY21kWzJdID0gYTsKKwljbWRbM10gPSBiOworCWNtZFs0XSA9IGM7CisJY21kWzVdID0gZDsKKwljbWRbNl0gPSA4OworCWNtZFs3XSA9IDA7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gZTsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSBmOworCWdzcGNhX2Rldi0+dXNiX2J1ZlsyXSA9IGc7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzNdID0gaDsKKwlnc3BjYV9kZXYtPnVzYl9idWZbNF0gPSBpOworCWdzcGNhX2Rldi0+dXNiX2J1Zls1XSA9IGo7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzZdID0gazsKKwlnc3BjYV9kZXYtPnVzYl9idWZbN10gPSBsOworCisJcmV0dXJuIGNwaWFfdXNiX3RyYW5zZmVyQ21kKGdzcGNhX2RldiwgY21kKTsKK30KKworLyogIGZpbmRfb3Zlcl9leHBvc3VyZQorICogIEZpbmRzIGEgc3VpdGFibGUgdmFsdWUgb2YgT3ZlckV4cG9zdXJlIGZvciB1c2Ugd2l0aCBTZXRGbGlja2VyQ3RybAorICogIFNvbWUgY2FsY3VsYXRpb24gaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGlzIHZhbHVlIGNoYW5nZXMgd2l0aCB0aGUgYnJpZ2h0bmVzcworICogIHNldCB3aXRoIFNldENvbG91clBhcmFtZXRlcnMKKyAqCisgKiAgUGFyYW1ldGVyczogQnJpZ2h0bmVzcyAtIGxhc3QgYnJpZ2h0bmVzcyB2YWx1ZSBzZXQgd2l0aCBTZXRDb2xvdXJQYXJhbWV0ZXJzCisgKgorICogIFJldHVybnM6IE92ZXJFeHBvc3VyZSB2YWx1ZSB0byB1c2Ugd2l0aCBTZXRGbGlja2VyQ3RybAorICovCisjZGVmaW5lIEZMSUNLRVJfTUFYX0VYUE9TVVJFICAgICAgICAgICAgICAgICAgICAyNTAKKyNkZWZpbmUgRkxJQ0tFUl9BTExPV0FCTEVfT1ZFUl9FWFBPU1VSRSAgICAgICAgIDE0NgorI2RlZmluZSBGTElDS0VSX0JSSUdIVE5FU1NfQ09OU1RBTlQgICAgICAgICAgICAgNTkKK3N0YXRpYyBpbnQgZmluZF9vdmVyX2V4cG9zdXJlKGludCBicmlnaHRuZXNzKQoreworCWludCBNYXhBbGxvd2FibGVPdmVyRXhwb3N1cmUsIE92ZXJFeHBvc3VyZTsKKworCU1heEFsbG93YWJsZU92ZXJFeHBvc3VyZSA9IEZMSUNLRVJfTUFYX0VYUE9TVVJFIC0gYnJpZ2h0bmVzcyAtCisJCQkJICAgRkxJQ0tFUl9CUklHSFRORVNTX0NPTlNUQU5UOworCisJaWYgKE1heEFsbG93YWJsZU92ZXJFeHBvc3VyZSA8IEZMSUNLRVJfQUxMT1dBQkxFX09WRVJfRVhQT1NVUkUpCisJCU92ZXJFeHBvc3VyZSA9IE1heEFsbG93YWJsZU92ZXJFeHBvc3VyZTsKKwllbHNlCisJCU92ZXJFeHBvc3VyZSA9IEZMSUNLRVJfQUxMT1dBQkxFX09WRVJfRVhQT1NVUkU7CisKKwlyZXR1cm4gT3ZlckV4cG9zdXJlOworfQorI3VuZGVmIEZMSUNLRVJfTUFYX0VYUE9TVVJFCisjdW5kZWYgRkxJQ0tFUl9BTExPV0FCTEVfT1ZFUl9FWFBPU1VSRQorI3VuZGVmIEZMSUNLRVJfQlJJR0hUTkVTU19DT05TVEFOVAorCisvKiBpbml0aWFsaXNlIGNhbV9kYXRhIHN0cnVjdHVyZSAgKi8KK3N0YXRpYyB2b2lkIHJlc2V0X2NhbWVyYV9wYXJhbXMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtX3BhcmFtcyAqcGFyYW1zID0gJnNkLT5wYXJhbXM7CisKKwkvKiBUaGUgZm9sbG93aW5nIHBhcmFtZXRlciB2YWx1ZXMgYXJlIHRoZSBkZWZhdWx0cyBmcm9tCisJICogIlNvZnR3YXJlIERldmVsb3BlcidzIEd1aWRlIGZvciBDUGlBIENhbWVyYXMiLiAgQW55IGNoYW5nZXMKKwkgKiB0byB0aGUgZGVmYXVsdHMgYXJlIG5vdGVkIGluIGNvbW1lbnRzLiAqLworCXBhcmFtcy0+Y29sb3VyUGFyYW1zLmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlwYXJhbXMtPmNvbG91clBhcmFtcy5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKKwlwYXJhbXMtPmNvbG91clBhcmFtcy5zYXR1cmF0aW9uID0gU0FUVVJBVElPTl9ERUY7CisJcGFyYW1zLT5leHBvc3VyZS5nYWluTW9kZSA9IDQ7CisJcGFyYW1zLT5leHBvc3VyZS5leHBNb2RlID0gMjsJCS8qIEFFQyAqLworCXBhcmFtcy0+ZXhwb3N1cmUuY29tcE1vZGUgPSAxOworCXBhcmFtcy0+ZXhwb3N1cmUuY2VudHJlV2VpZ2h0ID0gMTsKKwlwYXJhbXMtPmV4cG9zdXJlLmdhaW4gPSAwOworCXBhcmFtcy0+ZXhwb3N1cmUuZmluZUV4cCA9IDA7CisJcGFyYW1zLT5leHBvc3VyZS5jb2Fyc2VFeHBMbyA9IDE4NTsKKwlwYXJhbXMtPmV4cG9zdXJlLmNvYXJzZUV4cEhpID0gMDsKKwlwYXJhbXMtPmV4cG9zdXJlLnJlZENvbXAgPSBDT01QX1JFRDsKKwlwYXJhbXMtPmV4cG9zdXJlLmdyZWVuMUNvbXAgPSBDT01QX0dSRUVOMTsKKwlwYXJhbXMtPmV4cG9zdXJlLmdyZWVuMkNvbXAgPSBDT01QX0dSRUVOMjsKKwlwYXJhbXMtPmV4cG9zdXJlLmJsdWVDb21wID0gQ09NUF9CTFVFOworCXBhcmFtcy0+Y29sb3VyQmFsYW5jZS5iYWxhbmNlTW9kZSA9IDI7CS8qIEFDQiAqLworCXBhcmFtcy0+Y29sb3VyQmFsYW5jZS5yZWRHYWluID0gMzI7CisJcGFyYW1zLT5jb2xvdXJCYWxhbmNlLmdyZWVuR2FpbiA9IDY7CisJcGFyYW1zLT5jb2xvdXJCYWxhbmNlLmJsdWVHYWluID0gOTI7CisJcGFyYW1zLT5hcGNvci5nYWluMSA9IDB4MTg7CisJcGFyYW1zLT5hcGNvci5nYWluMiA9IDB4MTY7CisJcGFyYW1zLT5hcGNvci5nYWluNCA9IDB4MjQ7CisJcGFyYW1zLT5hcGNvci5nYWluOCA9IDB4MzQ7CisJcGFyYW1zLT5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSA9IDA7CisJcGFyYW1zLT5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCA9IDE7CisKKwlwYXJhbXMtPmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgPQorCQlmbGlja2VyX2p1bXBzW3NkLT5tYWluc0ZyZXFdCisJCQkgICAgIFtwYXJhbXMtPnNlbnNvckZwcy5iYXNlcmF0ZV0KKwkJCSAgICAgW3BhcmFtcy0+c2Vuc29yRnBzLmRpdmlzb3JdOworCXBhcmFtcy0+ZmxpY2tlckNvbnRyb2wuYWxsb3dhYmxlT3ZlckV4cG9zdXJlID0KKwkJZmluZF9vdmVyX2V4cG9zdXJlKHBhcmFtcy0+Y29sb3VyUGFyYW1zLmJyaWdodG5lc3MpOworCXBhcmFtcy0+dmxPZmZzZXQuZ2FpbjEgPSAyMDsKKwlwYXJhbXMtPnZsT2Zmc2V0LmdhaW4yID0gMjQ7CisJcGFyYW1zLT52bE9mZnNldC5nYWluNCA9IDI2OworCXBhcmFtcy0+dmxPZmZzZXQuZ2FpbjggPSAyNjsKKwlwYXJhbXMtPmNvbXByZXNzaW9uUGFyYW1zLmh5c3RlcmVzaXMgPSAzOworCXBhcmFtcy0+Y29tcHJlc3Npb25QYXJhbXMudGhyZXNoTWF4ID0gMTE7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy5zbWFsbFN0ZXAgPSAxOworCXBhcmFtcy0+Y29tcHJlc3Npb25QYXJhbXMubGFyZ2VTdGVwID0gMzsKKwlwYXJhbXMtPmNvbXByZXNzaW9uUGFyYW1zLmRlY2ltYXRpb25IeXN0ZXJlc2lzID0gMjsKKwlwYXJhbXMtPmNvbXByZXNzaW9uUGFyYW1zLmZyRGlmZlN0ZXBUaHJlc2ggPSA1OworCXBhcmFtcy0+Y29tcHJlc3Npb25QYXJhbXMucURpZmZTdGVwVGhyZXNoID0gMzsKKwlwYXJhbXMtPmNvbXByZXNzaW9uUGFyYW1zLmRlY2ltYXRpb25UaHJlc2hNb2QgPSAyOworCS8qIEVuZCBvZiBkZWZhdWx0IHZhbHVlcyBmcm9tIFNvZnR3YXJlIERldmVsb3BlcidzIEd1aWRlICovCisKKwkvKiBTZXQgU2Vuc29yIEZQUyB0byAxNWZwcy4gVGhpcyBzZWVtcyBiZXR0ZXIgdGhhbiAzMGZwcworCSAqIGZvciBpbmRvb3IgbGlnaHRpbmcuICovCisJcGFyYW1zLT5zZW5zb3JGcHMuZGl2aXNvciA9IDE7CisJcGFyYW1zLT5zZW5zb3JGcHMuYmFzZXJhdGUgPSAxOworCisJcGFyYW1zLT55dXZUaHJlc2hvbGQueVRocmVzaG9sZCA9IDY7IC8qIEZyb20gd2luZG93cyBkcml2ZXIgKi8KKwlwYXJhbXMtPnl1dlRocmVzaG9sZC51dlRocmVzaG9sZCA9IDY7IC8qIEZyb20gd2luZG93cyBkcml2ZXIgKi8KKworCXBhcmFtcy0+Zm9ybWF0LnN1YlNhbXBsZSA9IFNVQlNBTVBMRV80MjA7CisJcGFyYW1zLT5mb3JtYXQueXV2T3JkZXIgPSBZVVZPUkRFUl9ZVVlWOworCisJcGFyYW1zLT5jb21wcmVzc2lvbi5tb2RlID0gQ1BJQV9DT01QUkVTU0lPTl9BVVRPOworCXBhcmFtcy0+Y29tcHJlc3Npb24uZGVjaW1hdGlvbiA9IE5PX0RFQ0lNQVRJT047CisKKwlwYXJhbXMtPmNvbXByZXNzaW9uVGFyZ2V0LmZyVGFyZ2V0aW5nID0gQ09NUF9UQVJHRVRfREVGOworCXBhcmFtcy0+Y29tcHJlc3Npb25UYXJnZXQudGFyZ2V0RlIgPSAxNTsgLyogRnJvbSB3aW5kb3dzIGRyaXZlciAqLworCXBhcmFtcy0+Y29tcHJlc3Npb25UYXJnZXQudGFyZ2V0USA9IDU7IC8qIEZyb20gd2luZG93cyBkcml2ZXIgKi8KKworCXBhcmFtcy0+cXgzLnF4M19kZXRlY3RlZCA9IDA7CisJcGFyYW1zLT5xeDMudG9wbGlnaHQgPSAwOworCXBhcmFtcy0+cXgzLmJvdHRvbWxpZ2h0ID0gMDsKKwlwYXJhbXMtPnF4My5idXR0b24gPSAwOworCXBhcmFtcy0+cXgzLmNyYWRsZWQgPSAwOworfQorCitzdGF0aWMgdm9pZCBwcmludHN0YXR1cyhzdHJ1Y3QgY2FtX3BhcmFtcyAqcGFyYW1zKQoreworCVBERUJVRyhEX1BST0JFLCAic3RhdHVzOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngiLAorCSAgICAgICBwYXJhbXMtPnN0YXR1cy5zeXN0ZW1TdGF0ZSwgcGFyYW1zLT5zdGF0dXMuZ3JhYlN0YXRlLAorCSAgICAgICBwYXJhbXMtPnN0YXR1cy5zdHJlYW1TdGF0ZSwgcGFyYW1zLT5zdGF0dXMuZmF0YWxFcnJvciwKKwkgICAgICAgcGFyYW1zLT5zdGF0dXMuY21kRXJyb3IsIHBhcmFtcy0+c3RhdHVzLmRlYnVnRmxhZ3MsCisJICAgICAgIHBhcmFtcy0+c3RhdHVzLnZwU3RhdHVzLCBwYXJhbXMtPnN0YXR1cy5lcnJvckNvZGUpOworfQorCitzdGF0aWMgaW50IGdvdG9fbG93X3Bvd2VyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR290b0xvUG93ZXIsIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1cywgMCwgMCwgMCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChzZC0+cGFyYW1zLnN0YXR1cy5zeXN0ZW1TdGF0ZSAhPSBMT19QT1dFUl9TVEFURSkgeworCQlpZiAoc2QtPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUgIT0gV0FSTV9CT09UX1NUQVRFKSB7CisJCQlQREVCVUcoRF9FUlIsCisJCQkgICAgICAgInVuZXhwZWN0ZWQgc3RhdGUgYWZ0ZXIgbG8gcG93ZXIgY21kOiAlMDJ4IiwKKwkJCSAgICAgICBzZC0+cGFyYW1zLnN0YXR1cy5zeXN0ZW1TdGF0ZSk7CisJCQlwcmludHN0YXR1cygmc2QtPnBhcmFtcyk7CisJCX0KKwkJcmV0dXJuIC1FSU87CisJfQorCisJUERFQlVHKERfQ09ORiwgImNhbWVyYSBub3cgaW4gTE9XIHBvd2VyIHN0YXRlIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ290b19oaWdoX3Bvd2VyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR290b0hpUG93ZXIsIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltc2xlZXBfaW50ZXJydXB0aWJsZSg0MCk7CS8qIHdpbmRvd3MgZHJpdmVyIGRvZXMgaXQgdG9vICovCisKKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCXJldHVybiAtRUlOVFI7CisKKwlkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1cywgMCwgMCwgMCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChzZC0+cGFyYW1zLnN0YXR1cy5zeXN0ZW1TdGF0ZSAhPSBISV9QT1dFUl9TVEFURSkgeworCQlQREVCVUcoRF9FUlIsICJ1bmV4cGVjdGVkIHN0YXRlIGFmdGVyIGhpIHBvd2VyIGNtZDogJTAyeCIsCisJCQkgICAgICAgc2QtPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUpOworCQlwcmludHN0YXR1cygmc2QtPnBhcmFtcyk7CisJCXJldHVybiAtRUlPOworCX0KKworCVBERUJVRyhEX0NPTkYsICJjYW1lcmEgbm93IGluIEhJR0ggcG93ZXIgc3RhdGUiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfdmVyc2lvbl9pbmZvcm1hdGlvbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHJldDsKKworCS8qIEdldENQSUFWZXJzaW9uICovCisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRDUElBVmVyc2lvbiwgMCwgMCwgMCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEdldFBuUElEICovCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0UG5QSUQsIDAsIDAsIDAsIDApOworfQorCitzdGF0aWMgaW50IHNhdmVfY2FtZXJhX3N0YXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRDb2xvdXJCYWxhbmNlLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0RXhwb3N1cmUsIDAsIDAsIDAsIDApOworfQorCitpbnQgY29tbWFuZF9zZXRmb3JtYXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0OworCisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRGb3JtYXQsCisJCQkgc2QtPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplLAorCQkJIHNkLT5wYXJhbXMuZm9ybWF0LnN1YlNhbXBsZSwKKwkJCSBzZC0+cGFyYW1zLmZvcm1hdC55dXZPcmRlciwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldFJPSSwKKwkJCSAgc2QtPnBhcmFtcy5yb2kuY29sU3RhcnQsIHNkLT5wYXJhbXMucm9pLmNvbEVuZCwKKwkJCSAgc2QtPnBhcmFtcy5yb2kucm93U3RhcnQsIHNkLT5wYXJhbXMucm9pLnJvd0VuZCk7Cit9CisKK2ludCBjb21tYW5kX3NldGNvbG91cnBhcmFtcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbG91clBhcmFtcywKKwkJCSAgc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcywKKwkJCSAgc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuY29udHJhc3QsCisJCQkgIHNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLnNhdHVyYXRpb24sIDApOworfQorCitpbnQgY29tbWFuZF9zZXRhcGNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldEFwY29yLAorCQkJICBzZC0+cGFyYW1zLmFwY29yLmdhaW4xLAorCQkJICBzZC0+cGFyYW1zLmFwY29yLmdhaW4yLAorCQkJICBzZC0+cGFyYW1zLmFwY29yLmdhaW40LAorCQkJICBzZC0+cGFyYW1zLmFwY29yLmdhaW44KTsKK30KKworaW50IGNvbW1hbmRfc2V0dmxvZmZzZXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRWTE9mZnNldCwKKwkJCSAgc2QtPnBhcmFtcy52bE9mZnNldC5nYWluMSwKKwkJCSAgc2QtPnBhcmFtcy52bE9mZnNldC5nYWluMiwKKwkJCSAgc2QtPnBhcmFtcy52bE9mZnNldC5nYWluNCwKKwkJCSAgc2QtPnBhcmFtcy52bE9mZnNldC5nYWluOCk7Cit9CisKK2ludCBjb21tYW5kX3NldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCXJldCA9IGRvX2NvbW1hbmRfZXh0ZW5kZWQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0RXhwb3N1cmUsCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlLAorCQkJCSAgMSwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuY29tcE1vZGUsCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmNlbnRyZVdlaWdodCwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZmluZUV4cCwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8sCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5yZWRDb21wLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjJDb21wLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5ibHVlQ29tcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChzZC0+cGFyYW1zLmV4cG9zdXJlLmV4cE1vZGUgIT0gMSkgeworCQlyZXQgPSBkb19jb21tYW5kX2V4dGVuZGVkKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldEV4cG9zdXJlLAorCQkJCQkgIDAsCisJCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5leHBNb2RlLAorCQkJCQkgIDAsIDAsCisJCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluLAorCQkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZmluZUV4cCwKKwkJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvLAorCQkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGksCisJCQkJCSAgMCwgMCwgMCwgMCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IGNvbW1hbmRfc2V0Y29sb3VyYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKHNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5iYWxhbmNlTW9kZSA9PSAxKSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRDb2xvdXJCYWxhbmNlLAorCQkJCSAxLAorCQkJCSBzZC0+cGFyYW1zLmNvbG91ckJhbGFuY2UucmVkR2FpbiwKKwkJCQkgc2QtPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmdyZWVuR2FpbiwKKwkJCQkgc2QtPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmJsdWVHYWluKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0Q29sb3VyQmFsYW5jZSwKKwkJCQkgIDMsIDAsIDAsIDApOworCX0KKwlpZiAoc2QtPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmJhbGFuY2VNb2RlID09IDIpIHsKKwkJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0Q29sb3VyQmFsYW5jZSwKKwkJCQkgIDIsIDAsIDAsIDApOworCX0KKwlpZiAoc2QtPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmJhbGFuY2VNb2RlID09IDMpIHsKKwkJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0Q29sb3VyQmFsYW5jZSwKKwkJCQkgIDMsIDAsIDAsIDApOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgY29tbWFuZF9zZXRjb21wcmVzc2lvbnRhcmdldChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0Q29tcHJlc3Npb25UYXJnZXQsCisJCQkgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQuZnJUYXJnZXRpbmcsCisJCQkgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQudGFyZ2V0RlIsCisJCQkgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQudGFyZ2V0USwgMCk7Cit9CisKK2ludCBjb21tYW5kX3NldHl1dnRyZXNoKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRZVVZUaHJlc2gsCisJCQkgIHNkLT5wYXJhbXMueXV2VGhyZXNob2xkLnlUaHJlc2hvbGQsCisJCQkgIHNkLT5wYXJhbXMueXV2VGhyZXNob2xkLnV2VGhyZXNob2xkLCAwLCAwKTsKK30KKworaW50IGNvbW1hbmRfc2V0Y29tcHJlc3Npb25wYXJhbXMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBkb19jb21tYW5kX2V4dGVuZGVkKGdzcGNhX2RldiwKKwkJCSAgICBDUElBX0NPTU1BTkRfU2V0Q29tcHJlc3Npb25QYXJhbXMsCisJCQkgICAgMCwgMCwgMCwgMCwKKwkJCSAgICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmh5c3RlcmVzaXMsCisJCQkgICAgc2QtPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy50aHJlc2hNYXgsCisJCQkgICAgc2QtPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5zbWFsbFN0ZXAsCisJCQkgICAgc2QtPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5sYXJnZVN0ZXAsCisJCQkgICAgc2QtPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5kZWNpbWF0aW9uSHlzdGVyZXNpcywKKwkJCSAgICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmZyRGlmZlN0ZXBUaHJlc2gsCisJCQkgICAgc2QtPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5xRGlmZlN0ZXBUaHJlc2gsCisJCQkgICAgc2QtPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5kZWNpbWF0aW9uVGhyZXNoTW9kKTsKK30KKworaW50IGNvbW1hbmRfc2V0Y29tcHJlc3Npb24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uLAorCQkJICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uLm1vZGUsCisJCQkgIHNkLT5wYXJhbXMuY29tcHJlc3Npb24uZGVjaW1hdGlvbiwgMCwgMCk7Cit9CisKK2ludCBjb21tYW5kX3NldHNlbnNvcmZwcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0U2Vuc29yRlBTLAorCQkJICBzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yLAorCQkJICBzZC0+cGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZSwgMCwgMCk7Cit9CisKK2ludCBjb21tYW5kX3NldGZsaWNrZXJjdHJsKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRGbGlja2VyQ3RybCwKKwkJCSAgc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSwKKwkJCSAgc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wLAorCQkJICBzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmFsbG93YWJsZU92ZXJFeHBvc3VyZSwKKwkJCSAgMCk7Cit9CisKK2ludCBjb21tYW5kX3NldGVjcHRpbWluZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0RUNQVGltaW5nLAorCQkJICBzZC0+cGFyYW1zLmVjcFRpbWluZywgMCwgMCwgMCk7Cit9CisKK2ludCBjb21tYW5kX3BhdXNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9FbmRTdHJlYW1DYXAsIDAsIDAsIDAsIDApOworfQorCitpbnQgY29tbWFuZF9yZXN1bWUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0luaXRTdHJlYW1DYXAsCisJCQkgIDAsIHNkLT5wYXJhbXMuc3RyZWFtU3RhcnRMaW5lLCAwLCAwKTsKK30KKworaW50IGNvbW1hbmRfc2V0bGlnaHRzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldCwgcDEsIHAyOworCisJaWYgKCFzZC0+cGFyYW1zLnF4My5xeDNfZGV0ZWN0ZWQpCisJCXJldHVybiAwOworCisJcDEgPSAoc2QtPnBhcmFtcy5xeDMuYm90dG9tbGlnaHQgPT0gMCkgPDwgMTsKKwlwMiA9IChzZC0+cGFyYW1zLnF4My50b3BsaWdodCA9PSAwKSA8PCAzOworCisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9Xcml0ZVZDUmVnLAorCQkJIDB4OTAsIDB4OEYsIDB4NTAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9Xcml0ZU1DUG9ydCwgMiwgMCwKKwkJCSAgcDEgfCBwMiB8IDB4RTAsIDApOworfQorCitzdGF0aWMgaW50IHNldF9mbGlja2VyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgaW50IG9uLCBpbnQgYXBwbHkpCit7CisJLyogRXZlcnl0aGluZyBpbiBoZXJlIGlzIGZyb20gdGhlIFdpbmRvd3MgZHJpdmVyICovCisvKiBkZWZpbmUgZm9yIGNvbXBnYWluIGNhbGN1bGF0aW9uICovCisjaWYgMAorI2RlZmluZSBDT01QR0FJTihiYXNlLCBjdXJleHAsIG5ld2V4cCkgXAorICAgICh1OCkgKCgoKGZsb2F0KSBiYXNlIC0gMTI4LjApICogKChmbG9hdCkgY3VyZXhwIC8gKGZsb2F0KSBuZXdleHApKSArIDEyOC41KQorI2RlZmluZSBFWFBfRlJPTV9DT01QKGJhc2Vjb21wLCBjdXJjb21wLCBjdXJleHApIFwKKyAgICAodTE2KSgoZmxvYXQpY3VyZXhwICogKGZsb2F0KSh1OCkoY3VyY29tcCArIDEyOCkgLyBcCisgICAgKGZsb2F0KSh1OCkoYmFzZWNvbXAgLSAxMjgpKQorI2Vsc2UKKyAgLyogZXF1aXZhbGVudCBmdW5jdGlvbnMgd2l0aG91dCBmbG9hdGluZyBwb2ludCBtYXRoICovCisjZGVmaW5lIENPTVBHQUlOKGJhc2UsIGN1cmV4cCwgbmV3ZXhwKSBcCisgICAgKHU4KSgxMjggKyAoKCh1MzIpKDIqKGJhc2UtMTI4KSpjdXJleHAgKyBuZXdleHApKSAvICgyICogbmV3ZXhwKSkpCisjZGVmaW5lIEVYUF9GUk9NX0NPTVAoYmFzZWNvbXAsIGN1cmNvbXAsIGN1cmV4cCkgXAorICAgICh1MTYpKCgodTMyKShjdXJleHAgKiAodTgpKGN1cmNvbXAgKyAxMjgpKSAvICh1OCkoYmFzZWNvbXAgLSAxMjgpKSkKKyNlbmRpZgorCisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBjdXJyZW50ZXhwID0gc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbyArCisJCQkgc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSAqIDI1NjsKKwlpbnQgcmV0LCBzdGFydGV4cDsKKworCWlmIChvbikgeworCQlpbnQgY2ogPSBzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXA7CisJCXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUgPSAxOworCQlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmRpc2FibGVkID0gMDsKKwkJaWYgKHNkLT5wYXJhbXMuZXhwb3N1cmUuZXhwTW9kZSAhPSAyKSB7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmV4cE1vZGUgPSAyOworCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX05PUk1BTDsKKwkJfQorCQljdXJyZW50ZXhwID0gY3VycmVudGV4cCA8PCBzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW47CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiA9IDA7CisJCS8qIHJvdW5kIGRvd24gY3VycmVudCBleHBvc3VyZSB0byBuZWFyZXN0IHZhbHVlICovCisJCXN0YXJ0ZXhwID0gKGN1cnJlbnRleHAgKyBST1VORF9VUF9FWFBfRk9SX0ZMSUNLRVIpIC8gY2o7CisJCWlmIChzdGFydGV4cCA8IDEpCisJCQlzdGFydGV4cCA9IDE7CisJCXN0YXJ0ZXhwID0gKHN0YXJ0ZXhwICogY2opIC0gMTsKKwkJaWYgKEZJUk1XQVJFX1ZFUlNJT04oMSwgMikpCisJCQl3aGlsZSAoc3RhcnRleHAgPiBNQVhfRVhQXzEwMikKKwkJCQlzdGFydGV4cCAtPSBjajsKKwkJZWxzZQorCQkJd2hpbGUgKHN0YXJ0ZXhwID4gTUFYX0VYUCkKKwkJCQlzdGFydGV4cCAtPSBjajsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbyA9IHN0YXJ0ZXhwICYgMHhmZjsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IHN0YXJ0ZXhwID4+IDg7CisJCWlmIChjdXJyZW50ZXhwID4gc3RhcnRleHApIHsKKwkJCWlmIChjdXJyZW50ZXhwID4gKDIgKiBzdGFydGV4cCkpCisJCQkJY3VycmVudGV4cCA9IDIgKiBzdGFydGV4cDsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCA9CisJCQkJQ09NUEdBSU4oQ09NUF9SRUQsIGN1cnJlbnRleHAsIHN0YXJ0ZXhwKTsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4xQ29tcCA9CisJCQkJQ09NUEdBSU4oQ09NUF9HUkVFTjEsIGN1cnJlbnRleHAsIHN0YXJ0ZXhwKTsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4yQ29tcCA9CisJCQkJQ09NUEdBSU4oQ09NUF9HUkVFTjIsIGN1cnJlbnRleHAsIHN0YXJ0ZXhwKTsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAgPQorCQkJCUNPTVBHQUlOKENPTVBfQkxVRSwgY3VycmVudGV4cCwgc3RhcnRleHApOworCQl9IGVsc2UgeworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5yZWRDb21wID0gQ09NUF9SRUQ7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMUNvbXAgPSBDT01QX0dSRUVOMTsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4yQ29tcCA9IENPTVBfR1JFRU4yOworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5ibHVlQ29tcCA9IENPTVBfQkxVRTsKKwkJfQorCQlpZiAoRklSTVdBUkVfVkVSU0lPTigxLCAyKSkKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29tcE1vZGUgPSAwOworCQllbHNlCisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvbXBNb2RlID0gMTsKKworCQlzZC0+cGFyYW1zLmFwY29yLmdhaW4xID0gMHgxODsKKwkJc2QtPnBhcmFtcy5hcGNvci5nYWluMiA9IDB4MTg7CisJCXNkLT5wYXJhbXMuYXBjb3IuZ2FpbjQgPSAweDE2OworCQlzZC0+cGFyYW1zLmFwY29yLmdhaW44ID0gMHgxNDsKKwl9IGVsc2UgeworCQlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlID0gMDsKKwkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCA9IDE7CisJCS8qIEF2ZXJhZ2UgZXF1aXZhbGVudCBjb2Fyc2UgZm9yIGVhY2ggY29tcCBjaGFubmVsICovCisJCXN0YXJ0ZXhwID0gRVhQX0ZST01fQ09NUChDT01QX1JFRCwKKwkJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLnJlZENvbXAsIGN1cnJlbnRleHApOworCQlzdGFydGV4cCArPSBFWFBfRlJPTV9DT01QKENPTVBfR1JFRU4xLAorCQkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4xQ29tcCwgY3VycmVudGV4cCk7CisJCXN0YXJ0ZXhwICs9IEVYUF9GUk9NX0NPTVAoQ09NUF9HUkVFTjIsCisJCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjJDb21wLCBjdXJyZW50ZXhwKTsKKwkJc3RhcnRleHAgKz0gRVhQX0ZST01fQ09NUChDT01QX0JMVUUsCisJCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5ibHVlQ29tcCwgY3VycmVudGV4cCk7CisJCXN0YXJ0ZXhwID0gc3RhcnRleHAgPj4gMjsKKwkJd2hpbGUgKHN0YXJ0ZXhwID4gTUFYX0VYUCAmJiBzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW4gPAorCQkgICAgICAgc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluTW9kZSAtIDEpIHsKKwkJCXN0YXJ0ZXhwID0gc3RhcnRleHAgPj4gMTsKKwkJCSsrc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluOworCQl9CisJCWlmIChGSVJNV0FSRV9WRVJTSU9OKDEsIDIpICYmIHN0YXJ0ZXhwID4gTUFYX0VYUF8xMDIpCisJCQlzdGFydGV4cCA9IE1BWF9FWFBfMTAyOworCQlpZiAoc3RhcnRleHAgPiBNQVhfRVhQKQorCQkJc3RhcnRleHAgPSBNQVhfRVhQOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvID0gc3RhcnRleHAgJiAweGZmOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpID0gc3RhcnRleHAgPj4gODsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5yZWRDb21wID0gQ09NUF9SRUQ7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4xQ29tcCA9IENPTVBfR1JFRU4xOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAgPSBDT01QX0dSRUVOMjsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5ibHVlQ29tcCA9IENPTVBfQkxVRTsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb21wTW9kZSA9IDE7CisJCXNkLT5wYXJhbXMuYXBjb3IuZ2FpbjEgPSAweDE4OworCQlzZC0+cGFyYW1zLmFwY29yLmdhaW4yID0gMHgxNjsKKwkJc2QtPnBhcmFtcy5hcGNvci5nYWluNCA9IDB4MjQ7CisJCXNkLT5wYXJhbXMuYXBjb3IuZ2FpbjggPSAweDM0OworCX0KKwlzZC0+cGFyYW1zLnZsT2Zmc2V0LmdhaW4xID0gMjA7CisJc2QtPnBhcmFtcy52bE9mZnNldC5nYWluMiA9IDI0OworCXNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjQgPSAyNjsKKwlzZC0+cGFyYW1zLnZsT2Zmc2V0LmdhaW44ID0gMjY7CisKKwlpZiAoYXBwbHkpIHsKKwkJcmV0ID0gY29tbWFuZF9zZXRleHBvc3VyZShnc3BjYV9kZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBjb21tYW5kX3NldGFwY29yKGdzcGNhX2Rldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGNvbW1hbmRfc2V0dmxvZmZzZXQoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gY29tbWFuZF9zZXRmbGlja2VyY3RybChnc3BjYV9kZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKKyN1bmRlZiBFWFBfRlJPTV9DT01QCisjdW5kZWYgQ09NUEdBSU4KK30KKworLyogbW9uaXRvciB0aGUgZXhwb3N1cmUgYW5kIGFkanVzdCB0aGUgc2Vuc29yIGZyYW1lIHJhdGUgaWYgbmVlZGVkICovCitzdGF0aWMgdm9pZCBtb25pdG9yX2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggZXhwX2FjYywgYmNvbXAsIGdhaW4sIGNvYXJzZUwsIGNtZFs4XTsKKwlpbnQgcmV0LCBsaWdodF9leHAsIGRhcmtfZXhwLCB2ZXJ5X2RhcmtfZXhwOworCWludCBvbGRfZXhwb3N1cmUsIG5ld19leHBvc3VyZSwgZnJhbWVyYXRlOworCWludCBzZXRmcHMgPSAwLCBzZXRleHAgPSAwLCBzZXRmbGlja2VyID0gMDsKKworCS8qIGdldCBuZWNlc3Nhcnkgc3RhdHMgYW5kIHJlZ2lzdGVyIHNldHRpbmdzIGZyb20gY2FtZXJhICovCisJLyogZG9fY29tbWFuZCBjYW4ndCBoYW5kbGUgdGhpcywgc28gZG8gaXQgb3Vyc2VsdmVzICovCisJY21kWzBdID0gQ1BJQV9DT01NQU5EX1JlYWRWUFJlZ3MgPj4gODsKKwljbWRbMV0gPSBDUElBX0NPTU1BTkRfUmVhZFZQUmVncyAmIDB4ZmY7CisJY21kWzJdID0gMzA7CisJY21kWzNdID0gNDsKKwljbWRbNF0gPSA5OworCWNtZFs1XSA9IDg7CisJY21kWzZdID0gODsKKwljbWRbN10gPSAwOworCXJldCA9IGNwaWFfdXNiX3RyYW5zZmVyQ21kKGdzcGNhX2RldiwgY21kKTsKKwlpZiAocmV0KSB7CisJCVBERUJVRyhEX0VSUiwgIlJlYWRWUFJlZ3MoMzAsNCw5LDgpIC0gZmFpbGVkOiAlZCIsIHJldCk7CisJCXJldHVybjsKKwl9CisJZXhwX2FjYyA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwliY29tcCA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXTsKKwlnYWluID0gZ3NwY2FfZGV2LT51c2JfYnVmWzJdOworCWNvYXJzZUwgPSBnc3BjYV9kZXYtPnVzYl9idWZbM107CisKKwlsaWdodF9leHAgPSBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzICsKKwkJICAgIFRDIC0gNTAgKyBFWFBfQUNDX0xJR0hUOworCWlmIChsaWdodF9leHAgPiAyNTUpCisJCWxpZ2h0X2V4cCA9IDI1NTsKKwlkYXJrX2V4cCA9IHNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MgKworCQkgICBUQyAtIDUwIC0gRVhQX0FDQ19EQVJLOworCWlmIChkYXJrX2V4cCA8IDApCisJCWRhcmtfZXhwID0gMDsKKwl2ZXJ5X2RhcmtfZXhwID0gZGFya19leHAgLyAyOworCisJb2xkX2V4cG9zdXJlID0gc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSAqIDI1NiArCisJCSAgICAgICBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvOworCisJaWYgKCFzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmRpc2FibGVkKSB7CisJCS8qIEZsaWNrZXIgY29udHJvbCBvbiAqLworCQlpbnQgbWF4X2NvbXAgPSBGSVJNV0FSRV9WRVJTSU9OKDEsIDIpID8gTUFYX0NPTVAgOgorCQkJCQkJCUhJR0hfQ09NUF8xMDI7CisJCWJjb21wICs9IDEyODsJLyogZGVjb2RlICovCisJCWlmIChiY29tcCA+PSBtYXhfY29tcCAmJiBleHBfYWNjIDwgZGFya19leHApIHsKKwkJCS8qIGRhcmsgKi8KKwkJCWlmIChleHBfYWNjIDwgdmVyeV9kYXJrX2V4cCkgeworCQkJCS8qIHZlcnkgZGFyayAqLworCQkJCWlmIChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfREFSSykKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPQorCQkJCQkJRVhQT1NVUkVfVkVSWV9EQVJLOworCQkJCQlzZC0+ZXhwb3N1cmVfY291bnQgPSAxOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyoganVzdCBkYXJrICovCisJCQkJaWYgKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfREFSSykKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9EQVJLOworCQkJCQlzZC0+ZXhwb3N1cmVfY291bnQgPSAxOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChvbGRfZXhwb3N1cmUgPD0gTE9XX0VYUCB8fCBleHBfYWNjID4gbGlnaHRfZXhwKSB7CisJCQkvKiBsaWdodCAqLworCQkJaWYgKG9sZF9leHBvc3VyZSA8PSBWRVJZX0xPV19FWFApIHsKKwkJCQkvKiB2ZXJ5IGxpZ2h0ICovCisJCQkJaWYgKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfVkVSWV9MSUdIVCkKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPQorCQkJCQkJRVhQT1NVUkVfVkVSWV9MSUdIVDsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIGp1c3QgbGlnaHQgKi8KKwkJCQlpZiAoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9MSUdIVCkKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9MSUdIVDsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBub3QgZGFyayBvciBsaWdodCAqLworCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX05PUk1BTDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEZsaWNrZXIgY29udHJvbCBvZmYgKi8KKwkJaWYgKG9sZF9leHBvc3VyZSA+PSBNQVhfRVhQICYmIGV4cF9hY2MgPCBkYXJrX2V4cCkgeworCQkJLyogZGFyayAqLworCQkJaWYgKGV4cF9hY2MgPCB2ZXJ5X2RhcmtfZXhwKSB7CisJCQkJLyogdmVyeSBkYXJrICovCisJCQkJaWYgKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfVkVSWV9EQVJLKQorCQkJCQkrK3NkLT5leHBvc3VyZV9jb3VudDsKKwkJCQllbHNlIHsKKwkJCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9CisJCQkJCQlFWFBPU1VSRV9WRVJZX0RBUks7CisJCQkJCXNkLT5leHBvc3VyZV9jb3VudCA9IDE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBqdXN0IGRhcmsgKi8KKwkJCQlpZiAoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9EQVJLKQorCQkJCQkrK3NkLT5leHBvc3VyZV9jb3VudDsKKwkJCQllbHNlIHsKKwkJCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX0RBUks7CisJCQkJCXNkLT5leHBvc3VyZV9jb3VudCA9IDE7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKG9sZF9leHBvc3VyZSA8PSBMT1dfRVhQIHx8IGV4cF9hY2MgPiBsaWdodF9leHApIHsKKwkJCS8qIGxpZ2h0ICovCisJCQlpZiAob2xkX2V4cG9zdXJlIDw9IFZFUllfTE9XX0VYUCkgeworCQkJCS8qIHZlcnkgbGlnaHQgKi8KKwkJCQlpZiAoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0xJR0hUKQorCQkJCQkrK3NkLT5leHBvc3VyZV9jb3VudDsKKwkJCQllbHNlIHsKKwkJCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9CisJCQkJCQlFWFBPU1VSRV9WRVJZX0xJR0hUOworCQkJCQlzZC0+ZXhwb3N1cmVfY291bnQgPSAxOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyoganVzdCBsaWdodCAqLworCQkJCWlmIChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX0xJR0hUKQorCQkJCQkrK3NkLT5leHBvc3VyZV9jb3VudDsKKwkJCQllbHNlIHsKKwkJCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX0xJR0hUOworCQkJCQlzZC0+ZXhwb3N1cmVfY291bnQgPSAxOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIG5vdCBkYXJrIG9yIGxpZ2h0ICovCisJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOworCQl9CisJfQorCisJZnJhbWVyYXRlID0gYXRvbWljX3JlYWQoJnNkLT5mcHMpOworCWlmIChmcmFtZXJhdGUgPiAzMCB8fCBmcmFtZXJhdGUgPCAxKQorCQlmcmFtZXJhdGUgPSAxOworCisJaWYgKCFzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmRpc2FibGVkKSB7CisJCS8qIEZsaWNrZXIgY29udHJvbCBvbiAqLworCQlpZiAoKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfVkVSWV9EQVJLIHx8CisJCSAgICAgc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9EQVJLKSAmJgorCQkgICAgc2QtPmV4cG9zdXJlX2NvdW50ID49IERBUktfVElNRSAqIGZyYW1lcmF0ZSAmJgorCQkgICAgc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvciA8IDMpIHsKKworCQkJLyogZGFyayBmb3IgdG9vIGxvbmcgKi8KKwkJCSsrc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcjsKKwkJCXNldGZwcyA9IDE7CisKKwkJCXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCA9CisJCQkJZmxpY2tlcl9qdW1wc1tzZC0+bWFpbnNGcmVxXQorCQkJCQkgICAgIFtzZC0+cGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZV0KKwkJCQkJICAgICBbc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcl07CisJCQlzZXRmbGlja2VyID0gMTsKKworCQkJbmV3X2V4cG9zdXJlID0gc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wLTE7CisJCQl3aGlsZSAobmV3X2V4cG9zdXJlIDwgb2xkX2V4cG9zdXJlIC8gMikKKwkJCQluZXdfZXhwb3N1cmUgKz0KKwkJCQkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wOworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbyA9IG5ld19leHBvc3VyZSAmIDB4ZmY7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpID0gbmV3X2V4cG9zdXJlID4+IDg7CisJCQlzZXRleHAgPSAxOworCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX05PUk1BTDsKKwkJCVBERUJVRyhEX0NPTkYsICJBdXRvbWF0aWNhbGx5IGRlY3JlYXNpbmcgc2Vuc29yX2ZwcyIpOworCisJCX0gZWxzZSBpZiAoKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfVkVSWV9MSUdIVCB8fAorCQkJICAgIHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfTElHSFQpICYmCisJCQkgICBzZC0+ZXhwb3N1cmVfY291bnQgPj0gTElHSFRfVElNRSAqIGZyYW1lcmF0ZSAmJgorCQkJICAgc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvciA+IDApIHsKKworCQkJLyogbGlnaHQgZm9yIHRvbyBsb25nICovCisJCQlpbnQgbWF4X2V4cCA9IEZJUk1XQVJFX1ZFUlNJT04oMSwgMikgPyBNQVhfRVhQXzEwMiA6CisJCQkJCQkJICAgICAgIE1BWF9FWFA7CisJCQktLXNkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3I7CisJCQlzZXRmcHMgPSAxOworCisJCQlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgPQorCQkJCWZsaWNrZXJfanVtcHNbc2QtPm1haW5zRnJlcV0KKwkJCQkJICAgICBbc2QtPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGVdCisJCQkJCSAgICAgW3NkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3JdOworCQkJc2V0ZmxpY2tlciA9IDE7CisKKwkJCW5ld19leHBvc3VyZSA9IHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcC0xOworCQkJd2hpbGUgKG5ld19leHBvc3VyZSA8IDIgKiBvbGRfZXhwb3N1cmUgJiYKKwkJCSAgICAgICBuZXdfZXhwb3N1cmUgKworCQkJICAgICAgIHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCA8IG1heF9leHApCisJCQkJbmV3X2V4cG9zdXJlICs9CisJCQkJCXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcDsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gPSBuZXdfZXhwb3N1cmUgJiAweGZmOworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IG5ld19leHBvc3VyZSA+PiA4OworCQkJc2V0ZXhwID0gMTsKKwkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7CisJCQlQREVCVUcoRF9DT05GLCAiQXV0b21hdGljYWxseSBpbmNyZWFzaW5nIHNlbnNvcl9mcHMiKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEZsaWNrZXIgY29udHJvbCBvZmYgKi8KKwkJaWYgKChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfREFSSyB8fAorCQkgICAgIHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfREFSSykgJiYKKwkJICAgIHNkLT5leHBvc3VyZV9jb3VudCA+PSBEQVJLX1RJTUUgKiBmcmFtZXJhdGUgJiYKKwkJICAgIHNkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IgPCAzKSB7CisKKwkJCS8qIGRhcmsgZm9yIHRvbyBsb25nICovCisJCQkrK3NkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3I7CisJCQlzZXRmcHMgPSAxOworCisJCQlpZiAoc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluID4gMCkgeworCQkJCS0tc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluOworCQkJCXNldGV4cCA9IDE7CisJCQl9CisJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOworCQkJUERFQlVHKERfQ09ORiwgIkF1dG9tYXRpY2FsbHkgZGVjcmVhc2luZyBzZW5zb3JfZnBzIik7CisKKwkJfSBlbHNlIGlmICgoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0xJR0hUIHx8CisJCQkgICAgc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9MSUdIVCkgJiYKKwkJCSAgIHNkLT5leHBvc3VyZV9jb3VudCA+PSBMSUdIVF9USU1FICogZnJhbWVyYXRlICYmCisJCQkgICBzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yID4gMCkgeworCisJCQkvKiBsaWdodCBmb3IgdG9vIGxvbmcgKi8KKwkJCS0tc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcjsKKwkJCXNldGZwcyA9IDE7CisKKwkJCWlmIChzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW4gPAorCQkJICAgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2Fpbk1vZGUgLSAxKSB7CisJCQkJKytzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW47CisJCQkJc2V0ZXhwID0gMTsKKwkJCX0KKwkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7CisJCQlQREVCVUcoRF9DT05GLCAiQXV0b21hdGljYWxseSBpbmNyZWFzaW5nIHNlbnNvcl9mcHMiKTsKKwkJfQorCX0KKworCWlmIChzZXRleHApCisJCWNvbW1hbmRfc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKworCWlmIChzZXRmcHMpCisJCWNvbW1hbmRfc2V0c2Vuc29yZnBzKGdzcGNhX2Rldik7CisKKwlpZiAoc2V0ZmxpY2tlcikKKwkJY29tbWFuZF9zZXRmbGlja2VyY3RybChnc3BjYV9kZXYpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIGlmIGZsaWNrZXIgaXMgc3dpdGNoZWQgb2ZmLCB0aGlzIGZ1bmN0aW9uIHN3aXRjaGVzIGl0IGJhY2sgb24uSXQgY2hlY2tzLAorICAgaG93ZXZlciwgdGhhdCBjb25kaXRpb25zIGFyZSBzdWl0YWJsZSBiZWZvcmUgcmVzdGFydGluZyBpdC4KKyAgIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciBmaXJtd2FyZSB2ZXJzaW9uIDEuMi4KKworICAgSXQgYWxzbyBhZGp1c3QgdGhlIGNvbG91ciBiYWxhbmNlIHdoZW4gYW4gZXhwb3N1cmUgc3RlcCBpcyBkZXRlY3RlZCAtIGFzCisgICBsb25nIGFzIGZsaWNrZXIgaXMgcnVubmluZworKi8KK3N0YXRpYyB2b2lkIHJlc3RhcnRfZmxpY2tlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBjYW1fZXhwb3N1cmUsIG9sZF9leHA7CisKKwlpZiAoIUZJUk1XQVJFX1ZFUlNJT04oMSwgMikpCisJCXJldHVybjsKKworCWNhbV9leHBvc3VyZSA9IGF0b21pY19yZWFkKCZzZC0+Y2FtX2V4cG9zdXJlKTsKKworCWlmIChzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlID09IDAgfHwKKwkgICAgY2FtX2V4cG9zdXJlID09IDApCisJCXJldHVybjsKKworCW9sZF9leHAgPSBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvICsKKwkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpKjI1NjsKKwkvKgorCSAgc2VlIGhvdyBmYXIgYXdheSBjYW1lcmEgZXhwb3N1cmUgaXMgZnJvbSBhIHZhbGlkCisJICBmbGlja2VyIGV4cG9zdXJlIHZhbHVlCisJKi8KKwljYW1fZXhwb3N1cmUgJT0gc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wOworCWlmICghc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCAmJgorCSAgICBjYW1fZXhwb3N1cmUgPD0gc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wIC0gMykgeworCQkvKiBGbGlja2VyIGNvbnRyb2wgYXV0by1kaXNhYmxlZCAqLworCQlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmRpc2FibGVkID0gMTsKKwl9CisKKwlpZiAoc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCAmJgorCSAgICBvbGRfZXhwID4gc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wICsKKwkJICAgICAgUk9VTkRfVVBfRVhQX0ZPUl9GTElDS0VSKSB7CisJCS8qIGV4cG9zdXJlIGlzIG5vdyBoaWdoIGVub3VnaCB0byBzd2l0Y2gKKwkJICAgZmxpY2tlciBjb250cm9sIGJhY2sgb24gKi8KKwkJc2V0X2ZsaWNrZXIoZ3NwY2FfZGV2LCAxLCAxKTsKKwl9Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgY2FtICpjYW07CisKKwlyZXNldF9jYW1lcmFfcGFyYW1zKGdzcGNhX2Rldik7CisKKwlQREVCVUcoRF9QUk9CRSwgImNwaWEgQ1BpQSBjYW1lcmEgZGV0ZWN0ZWQgKHZpZC9waWQgMHglMDRYOjB4JTA0WCkiLAorCSAgICAgICBpZC0+aWRWZW5kb3IsIGlkLT5pZFByb2R1Y3QpOworCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWNhbS0+Y2FtX21vZGUgPSBtb2RlOworCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShtb2RlKTsKKworCXNkX3NldGZyZXEoZ3NwY2FfZGV2LCBGUkVRX0RFRik7CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLworc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBwcml2LCByZXQ7CisKKwkvKiBTdGFydCB0aGUgY2FtZXJhIGluIGxvdyBwb3dlciBtb2RlICovCisJaWYgKGdvdG9fbG93X3Bvd2VyKGdzcGNhX2RldikpIHsKKwkJaWYgKHNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlICE9IFdBUk1fQk9PVF9TVEFURSkgeworCQkJUERFQlVHKERfRVJSLCAidW5leHBlY3RlZCBzeXN0ZW1zdGF0ZTogJTAyeCIsCisJCQkgICAgICAgc2QtPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUpOworCQkJcHJpbnRzdGF0dXMoJnNkLT5wYXJhbXMpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKiBGSVhNRTogdGhpcyBpcyBqdXN0IGRpcnR5IHRyaWFsIGFuZCBlcnJvciAqLworCQlyZXQgPSBnb3RvX2hpZ2hfcG93ZXIoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9EaXNjYXJkRnJhbWUsCisJCQkJIDAsIDAsIDAsIDApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBnb3RvX2xvd19wb3dlcihnc3BjYV9kZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBwcm9jZWR1cmUgZGVzY3JpYmVkIGluIGRldmVsb3BlcidzIGd1aWRlIHAzLTI4ICovCisKKwkvKiBDaGVjayB0aGUgZmlybXdhcmUgdmVyc2lvbi4gKi8KKwlzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uID0gMDsKKwlnZXRfdmVyc2lvbl9pbmZvcm1hdGlvbihnc3BjYV9kZXYpOworCWlmIChzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uICE9IDEpIHsKKwkJUERFQlVHKERfRVJSLCAib25seSBmaXJtd2FyZSB2ZXJzaW9uIDEgaXMgc3VwcG9ydGVkIChnb3Q6ICVkKSIsCisJCSAgICAgICBzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogQSBidWcgaW4gZmlybXdhcmUgMS0wMiBsaW1pdHMgZ2Fpbk1vZGUgdG8gMiAqLworCWlmIChzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiA8PSAyICYmCisJICAgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2Fpbk1vZGUgPiAyKSB7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZ2Fpbk1vZGUgPSAyOworCX0KKworCS8qIHNldCBRWDMgZGV0ZWN0ZWQgZmxhZyAqLworCXNkLT5wYXJhbXMucXgzLnF4M19kZXRlY3RlZCA9IChzZC0+cGFyYW1zLnBucElELnZlbmRvciA9PSAweDA4MTMgJiYKKwkJCQkgICAgICAgc2QtPnBhcmFtcy5wbnBJRC5wcm9kdWN0ID09IDB4MDAwMSk7CisKKwkvKiBUaGUgZmF0YWwgZXJyb3IgY2hlY2tpbmcgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIKKwkgKiB0aGUgY2FtZXJhIHBvd2VycyB1cCAoZGV2ZWxvcGVyJ3MgZ3VpZGUgcCAzLTM4KSAqLworCisJLyogU2V0IHN0cmVhbVN0YXRlIGJlZm9yZSB0cmFuc2l0aW9uIHRvIGhpZ2ggcG93ZXIgdG8gYXZvaWQgYnVnCisJICogaW4gZmlybXdhcmUgMS0wMiAqLworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfTW9kaWZ5Q2FtZXJhU3RhdHVzLAorCQkJIFNUUkVBTVNUQVRFLCAwLCBTVFJFQU1fTk9UX1JFQURZLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogR290b0hpUG93ZXIgKi8KKwlyZXQgPSBnb3RvX2hpZ2hfcG93ZXIoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogQ2hlY2sgdGhlIGNhbWVyYSBzdGF0dXMgKi8KKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1cywgMCwgMCwgMCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChzZC0+cGFyYW1zLnN0YXR1cy5mYXRhbEVycm9yKSB7CisJCVBERUJVRyhEX0VSUiwgImZhdGFsX2Vycm9yOiAlMDR4LCB2cF9zdGF0dXM6ICUwNHgiLAorCQkgICAgICAgc2QtPnBhcmFtcy5zdGF0dXMuZmF0YWxFcnJvciwKKwkJICAgICAgIHNkLT5wYXJhbXMuc3RhdHVzLnZwU3RhdHVzKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogVlBWZXJzaW9uIGNhbid0IGJlIHJldHJpZXZlZCBiZWZvcmUgdGhlIGNhbWVyYSBpcyBpbiBIaVBvd2VyLAorCSAqIHNvIGdldCBpdCBoZXJlIGluc3RlYWQgb2YgaW4gZ2V0X3ZlcnNpb25faW5mb3JtYXRpb24uICovCisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRWUFZlcnNpb24sIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBEZXRlcm1pbmUgdmlkZW8gbW9kZSBzZXR0aW5ncyAqLworCXNkLT5wYXJhbXMuc3RyZWFtU3RhcnRMaW5lID0gMTIwOworCisJcHJpdiA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OworCWlmIChwcml2ICYgMHgwMSkgeyAvKiBjcm9wICovCisJCXNkLT5wYXJhbXMucm9pLmNvbFN0YXJ0ID0gMjsKKwkJc2QtPnBhcmFtcy5yb2kucm93U3RhcnQgPSA2OworCX0gZWxzZSB7CisJCXNkLT5wYXJhbXMucm9pLmNvbFN0YXJ0ID0gMDsKKwkJc2QtPnBhcmFtcy5yb2kucm93U3RhcnQgPSAwOworCX0KKworCWlmIChwcml2ICYgMHgwMikgeyAvKiBxdWFydGVyICovCisJCXNkLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZSA9IFZJREVPU0laRV9RQ0lGOworCQlzZC0+cGFyYW1zLnJvaS5jb2xTdGFydCAvPSAyOworCQlzZC0+cGFyYW1zLnJvaS5yb3dTdGFydCAvPSAyOworCQlzZC0+cGFyYW1zLnN0cmVhbVN0YXJ0TGluZSAvPSAyOworCX0gZWxzZQorCQlzZC0+cGFyYW1zLmZvcm1hdC52aWRlb1NpemUgPSBWSURFT1NJWkVfQ0lGOworCisJc2QtPnBhcmFtcy5yb2kuY29sRW5kID0gc2QtPnBhcmFtcy5yb2kuY29sU3RhcnQgKworCQkJCShnc3BjYV9kZXYtPndpZHRoID4+IDMpOworCXNkLT5wYXJhbXMucm9pLnJvd0VuZCA9IHNkLT5wYXJhbXMucm9pLnJvd1N0YXJ0ICsKKwkJCQkoZ3NwY2FfZGV2LT5oZWlnaHQgPj4gMik7CisKKwkvKiBBbmQgbm93IHNldCB0aGUgY2FtZXJhIHRvIGEga25vd24gc3RhdGUgKi8KKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldEdyYWJNb2RlLAorCQkJIENQSUFfR1JBQl9DT05USU5FT1VTLCAwLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCS8qIFdlIHN0YXJ0IHdpdGggY29tcHJlc3Npb24gZGlzYWJsZWQsIGFzIHdlIG5lZWQgb25lIHVuY29tcHJlc3NlZAorCSAgIGZyYW1lIHRvIGhhbmRsZSBsYXRlciBjb21wcmVzc2VkIGZyYW1lcyAqLworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0Q29tcHJlc3Npb24sCisJCQkgQ1BJQV9DT01QUkVTU0lPTl9OT05FLAorCQkJIE5PX0RFQ0lNQVRJT04sIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXRjb21wcmVzc2lvbnRhcmdldChnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXRjb2xvdXJwYXJhbXMoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0Zm9ybWF0KGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjb21tYW5kX3NldHl1dnRyZXNoKGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjb21tYW5kX3NldGVjcHRpbWluZyhnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXRjb21wcmVzc2lvbnBhcmFtcyhnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXRleHBvc3VyZShnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXRjb2xvdXJiYWxhbmNlKGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjb21tYW5kX3NldHNlbnNvcmZwcyhnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXRhcGNvcihnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXRmbGlja2VyY3RybChnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXR2bG9mZnNldChnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBTdGFydCBzdHJlYW0gKi8KKwlyZXQgPSBjb21tYW5kX3Jlc3VtZShnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBXYWl0IDYgZnJhbWVzIGJlZm9yZSB0dXJuaW5nIGNvbXByZXNzaW9uIG9uIGZvciB0aGUgc2Vuc29yIHRvIGdldAorCSAgIGFsbCBzZXR0aW5ncyBhbmQgQUVDL0FDQiB0byBzZXR0bGUgKi8KKwlzZC0+Zmlyc3RfZnJhbWUgPSA2OworCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7CisJc2QtPmV4cG9zdXJlX2NvdW50ID0gMDsKKwlhdG9taWNfc2V0KCZzZC0+Y2FtX2V4cG9zdXJlLCAwKTsKKwlhdG9taWNfc2V0KCZzZC0+ZnBzLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJY29tbWFuZF9wYXVzZShnc3BjYV9kZXYpOworCisJLyogc2F2ZSBjYW1lcmEgc3RhdGUgZm9yIGxhdGVyIG9wZW4gKGRldmVsb3BlcnMgZ3VpZGUgY2ggMy41LjMpICovCisJc2F2ZV9jYW1lcmFfc3RhdGUoZ3NwY2FfZGV2KTsKKworCS8qIEdvdG9Mb1Bvd2VyICovCisJZ290b19sb3dfcG93ZXIoZ3NwY2FfZGV2KTsKKworCS8qIFVwZGF0ZSB0aGUgY2FtZXJhIHN0YXR1cyAqLworCWRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0Q2FtZXJhU3RhdHVzLCAwLCAwLCAwLCAwKTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0OworCisJLyogU3RhcnQgLyBTdG9wIHRoZSBjYW1lcmEgdG8gbWFrZSBzdXJlIHdlIGFyZSB0YWxraW5nIHRvCisJICAgYSBzdXBwb3J0ZWQgY2FtZXJhLCBhbmQgdG8gZ2V0IHNvbWUgaW5mb3JtYXRpb24gZnJvbSBpdAorCSAgIHRvIHByaW50LiAqLworCXJldCA9IHNkX3N0YXJ0KGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNkX3N0b3BOKGdzcGNhX2Rldik7CisKKwlQREVCVUcoRF9QUk9CRSwgIkNQSUEgVmVyc2lvbjogICAgICAgICAgICAgJWQuJTAyZCAoJWQuJWQpIiwKKwkJCXNkLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24sCisJCQlzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiwKKwkJCXNkLT5wYXJhbXMudmVyc2lvbi52Y1ZlcnNpb24sCisJCQlzZC0+cGFyYW1zLnZlcnNpb24udmNSZXZpc2lvbik7CisJUERFQlVHKERfUFJPQkUsICJDUElBIFBuUC1JRDogICAgICAgICAgICAgICUwNHg6JTA0eDolMDR4IiwKKwkJCXNkLT5wYXJhbXMucG5wSUQudmVuZG9yLCBzZC0+cGFyYW1zLnBucElELnByb2R1Y3QsCisJCQlzZC0+cGFyYW1zLnBucElELmRldmljZVJldmlzaW9uKTsKKwlQREVCVUcoRF9QUk9CRSwgIlZQLVZlcnNpb246ICAgICAgICAgICAgICAgJWQuJWQgJTA0eCIsCisJCQlzZC0+cGFyYW1zLnZwVmVyc2lvbi52cFZlcnNpb24sCisJCQlzZC0+cGFyYW1zLnZwVmVyc2lvbi52cFJldmlzaW9uLAorCQkJc2QtPnBhcmFtcy52cFZlcnNpb24uY2FtZXJhSGVhZElEKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwKKwkJCWludCBsZW4pCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJLyogQ2hlY2sgZm9yIFNPRiAqLworCWlmIChsZW4gPj0gNjQgJiYKKwkgICAgZGF0YVswXSA9PSBNQUdJQ18wICYmIGRhdGFbMV0gPT0gTUFHSUNfMSAmJgorCSAgICBkYXRhWzE2XSA9PSBzZC0+cGFyYW1zLmZvcm1hdC52aWRlb1NpemUgJiYKKwkgICAgZGF0YVsxN10gPT0gc2QtPnBhcmFtcy5mb3JtYXQuc3ViU2FtcGxlICYmCisJICAgIGRhdGFbMThdID09IHNkLT5wYXJhbXMuZm9ybWF0Lnl1dk9yZGVyICYmCisJICAgIGRhdGFbMjRdID09IHNkLT5wYXJhbXMucm9pLmNvbFN0YXJ0ICYmCisJICAgIGRhdGFbMjVdID09IHNkLT5wYXJhbXMucm9pLmNvbEVuZCAmJgorCSAgICBkYXRhWzI2XSA9PSBzZC0+cGFyYW1zLnJvaS5yb3dTdGFydCAmJgorCSAgICBkYXRhWzI3XSA9PSBzZC0+cGFyYW1zLnJvaS5yb3dFbmQpIHsKKwkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKGdzcGNhX2Rldik7CisKKwkJYXRvbWljX3NldCgmc2QtPmNhbV9leHBvc3VyZSwgZGF0YVszOV0gKiAyKTsKKwkJYXRvbWljX3NldCgmc2QtPmZwcywgZGF0YVs0MV0pOworCisJCWlmIChmcmFtZSA9PSBOVUxMKSB7CisJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIENoZWNrIGZvciBwcm9wZXIgRU9GIGZvciBsYXN0IGZyYW1lICovCisJCWlmICgoZnJhbWUtPmRhdGFfZW5kIC0gZnJhbWUtPmRhdGEpID4gNCAmJgorCQkgICAgZnJhbWUtPmRhdGFfZW5kWy00XSA9PSAweGZmICYmCisJCSAgICBmcmFtZS0+ZGF0YV9lbmRbLTNdID09IDB4ZmYgJiYKKwkJICAgIGZyYW1lLT5kYXRhX2VuZFstMl0gPT0gMHhmZiAmJgorCQkgICAgZnJhbWUtPmRhdGFfZW5kWy0xXSA9PSAweGZmKQorCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCisJCQkJCQlOVUxMLCAwKTsKKworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGRhdGEsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lkIHNkX2RxX2NhbGxiYWNrKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkvKiBTZXQgdGhlIG5vcm1hbCBjb21wcmVzc2lvbiBzZXR0aW5ncyBvbmNlIHdlIGhhdmUgY2FwdHVyZWQgYQorCSAgIGZldyB1bmNvbXByZXNzZWQgZnJhbWVzIChhbmQgQUVDIGhhcyBob3BlZnVsbHkgc2V0dGxlZCkgKi8KKwlpZiAoc2QtPmZpcnN0X2ZyYW1lKSB7CisJCXNkLT5maXJzdF9mcmFtZS0tOworCQlpZiAoc2QtPmZpcnN0X2ZyYW1lID09IDApCisJCQljb21tYW5kX3NldGNvbXByZXNzaW9uKGdzcGNhX2Rldik7CisJfQorCisJLyogU3dpdGNoIGZsaWNrZXIgY29udHJvbCBiYWNrIG9uIGlmIGl0IGdvdCB0dXJuZWQgb2ZmICovCisJcmVzdGFydF9mbGlja2VyKGdzcGNhX2Rldik7CisKKwkvKiBJZiBBRUMgaXMgZW5hYmxlZCwgbW9uaXRvciB0aGUgZXhwb3N1cmUgYW5kCisJICAgYWRqdXN0IHRoZSBzZW5zb3IgZnJhbWUgcmF0ZSBpZiBuZWVkZWQgKi8KKwlpZiAoc2QtPnBhcmFtcy5leHBvc3VyZS5leHBNb2RlID09IDIpCisJCW1vbml0b3JfZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKworCS8qIFVwZGF0ZSBvdXIga25vd2xlZGdlIG9mIHRoZSBjYW1lcmEgc3RhdGUgKi8KKwlkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldEV4cG9zdXJlLCAwLCAwLCAwLCAwKTsKKwlpZiAoc2QtPnBhcmFtcy5xeDMucXgzX2RldGVjdGVkKQorCQlkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1JlYWRNQ1BvcnRzLCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0OworCisJc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyA9IHZhbDsKKwlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmFsbG93YWJsZU92ZXJFeHBvc3VyZSA9CisJCWZpbmRfb3Zlcl9leHBvc3VyZShzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzKTsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKwkJcmV0ID0gY29tbWFuZF9zZXRjb2xvdXJwYXJhbXMoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXJldHVybiBjb21tYW5kX3NldGZsaWNrZXJjdHJsKGdzcGNhX2Rldik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0ID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJcmV0dXJuIGNvbW1hbmRfc2V0Y29sb3VycGFyYW1zKGdzcGNhX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldHNhdHVyYXRpb24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuc2F0dXJhdGlvbiA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXJldHVybiBjb21tYW5kX3NldGNvbG91cnBhcmFtcyhnc3BjYV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0c2F0dXJhdGlvbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLnNhdHVyYXRpb247CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IG9uOworCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDA6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9ESVNBQkxFRCAqLworCQlvbiA9IDA7CisJCWJyZWFrOworCWNhc2UgMToJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzUwSFogKi8KKwkJb24gPSAxOworCQlzZC0+bWFpbnNGcmVxID0gMDsKKwkJYnJlYWs7CisJY2FzZSAyOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNjBIWiAqLworCQlvbiA9IDE7CisJCXNkLT5tYWluc0ZyZXEgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzZC0+ZnJlcSA9IHZhbDsKKwlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgPQorCQlmbGlja2VyX2p1bXBzW3NkLT5tYWluc0ZyZXFdCisJCQkgICAgIFtzZC0+cGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZV0KKwkJCSAgICAgW3NkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3JdOworCisJcmV0dXJuIHNldF9mbGlja2VyKGdzcGNhX2Rldiwgb24sIGdzcGNhX2Rldi0+c3RyZWFtaW5nKTsKK30KKworc3RhdGljIGludCBzZF9nZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Y29tcHRhcmdldChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LmZyVGFyZ2V0aW5nID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJcmV0dXJuIGNvbW1hbmRfc2V0Y29tcHJlc3Npb250YXJnZXQoZ3NwY2FfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbXB0YXJnZXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LmZyVGFyZ2V0aW5nOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3F1ZXJ5bWVudShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKm1lbnUpCit7CisJc3dpdGNoIChtZW51LT5pZCkgeworCWNhc2UgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1k6CisJCXN3aXRjaCAobWVudS0+aW5kZXgpIHsKKwkJY2FzZSAwOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfRElTQUJMRUQgKi8KKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiTm9GbGlrZXIiKTsKKwkJCXJldHVybiAwOworCQljYXNlIDE6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaICovCisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjUwIEh6Iik7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAyOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNjBIWiAqLworCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICI2MCBIeiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9DT01QX1RBUkdFVDoKKwkJc3dpdGNoIChtZW51LT5pbmRleCkgeworCQljYXNlIENQSUFfQ09NUFJFU1NJT05fVEFSR0VUX1FVQUxJVFk6CisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIlF1YWxpdHkiKTsKKwkJCXJldHVybiAwOworCQljYXNlIENQSUFfQ09NUFJFU1NJT05fVEFSR0VUX0ZSQU1FUkFURToKKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiRnJhbWVyYXRlIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLmluaXQgPSBzZF9pbml0LAorCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5kcV9jYWxsYmFjayA9IHNkX2RxX2NhbGxiYWNrLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCit9OworCisvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KK3N0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDU1MywgMHgwMDAyKX0sCisJe1VTQl9ERVZJQ0UoMHgwODEzLCAweDAwMDEpfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IGdzcGNhX3N1c3BlbmQsCisJLnJlc3VtZSA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYwppbmRleCBmZGY0YzBlYy4uZWNkNGQ3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYwpAQCAtNTIsNyArNTIsNyBAQAogc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtODUxLDcgKzg1MSw3IEBACiB9CiAKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgPSBzZF9jdHJscywKIAkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmMKaW5kZXggNDg3OGM4Zi4uOWU0MjQ3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT0gc3VkLWRyaXZlciBzdHJ1Y3R1cmUgaW5pdGlhbGlzYXRpb24gPT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19taTEzMjAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19taTEzMjAgPSB7CiAJLm5hbWUgICAgICAgID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzICAgICAgID0gc2RfY3RybHNfbWkxMzIwLAogCS5uY3RybHMgICAgICA9IEdMODYwX05DVFJMUywKQEAgLTE3NCw3ICsxNzQsNyBAQAogCS5kcV9jYWxsYmFjayA9IHNkX2NhbGxiYWNrLAogfTsKIAotc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkyMDIwID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkyMDIwID0gewogCS5uYW1lICAgICAgICA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyAgICAgICA9IHNkX2N0cmxzX21pMjAyMCwKIAkubmN0cmxzICAgICAgPSBHTDg2MF9OQ1RSTFMsCkBAIC0xODcsNyArMTg3LDcgQEAKIAkuZHFfY2FsbGJhY2sgPSBzZF9jYWxsYmFjaywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX21pMjAyMGIgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19taTIwMjBiID0gewogCS5uYW1lICAgICAgICA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyAgICAgICA9IHNkX2N0cmxzX21pMjAyMGIsCiAJLm5jdHJscyAgICAgID0gR0w4NjBfTkNUUkxTLApAQCAtMjAwLDcgKzIwMCw3IEBACiAJLmRxX2NhbGxiYWNrID0gc2RfY2FsbGJhY2ssCiB9OwogCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19vdjI2NDAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19vdjI2NDAgPSB7CiAJLm5hbWUgICAgICAgID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzICAgICAgID0gc2RfY3RybHNfb3YyNjQwLAogCS5uY3RybHMgICAgICA9IEdMODYwX05DVFJMUywKQEAgLTIxMyw3ICsyMTMsNyBAQAogCS5kcV9jYWxsYmFjayA9IHNkX2NhbGxiYWNrLAogfTsKIAotc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2Nfb3Y5NjU1ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2Nfb3Y5NjU1ID0gewogCS5uYW1lICAgICAgICA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyAgICAgICA9IHNkX2N0cmxzX292OTY1NSwKIAkubmN0cmxzICAgICAgPSBHTDg2MF9OQ1RSTFMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKaW5kZXggYmQ2MjE0ZC4uMjIyYWY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYwpAQCAtMyw2ICszLDkgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBKZWFuLUZyYW5jb2lzIE1vaW5lIChodHRwOi8vbW9pbmVqZi5mcmVlLmZyKQogICoKKyAqIENhbWVyYSBidXR0b24gaW5wdXQgaGFuZGxpbmcgYnkgTcOhcnRvbiBOw6ltZXRoCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNw6FydG9uIE7DqW1ldGggPG5tMTI3QGZyZWVtYWlsLmh1PgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKICAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKQEAgLTM3LDYgKzQwLDExIEBACiAKICNpbmNsdWRlICJnc3BjYS5oIgogCisjaWZkZWYgQ09ORklHX0lOUFVUCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvaW5wdXQuaD4KKyNlbmRpZgorCiAvKiBnbG9iYWwgdmFsdWVzICovCiAjZGVmaW5lIERFRl9OVVJCUyAzCQkvKiBkZWZhdWx0IG51bWJlciBvZiBVUkJzICovCiAjaWYgREVGX05VUkJTID4gTUFYX05VUkJTCkBAIC00Nyw3ICs1NSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBIFVTQiBDYW1lcmEgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDgsIDApCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OX05VTUJFUglLRVJORUxfVkVSU0lPTigyLCA5LCAwKQogCiAjaWZkZWYgR1NQQ0FfREVCVUcKIGludCBnc3BjYV9kZWJ1ZyA9IERfRVJSIHwgRF9QUk9CRTsKQEAgLTEwNCwxNSArMTEyLDE4NSBAQAogCS5jbG9zZQkJPSBnc3BjYV92bV9jbG9zZSwKIH07CiAKKy8qCisgKiBJbnB1dCBhbmQgaW50ZXJydXB0IGVuZHBvaW50IGhhbmRsaW5nIGZ1bmN0aW9ucworICovCisjaWZkZWYgQ09ORklHX0lOUFVUCitzdGF0aWMgdm9pZCBpbnRfaXJxKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSAoc3RydWN0IGdzcGNhX2RldiAqKSB1cmItPmNvbnRleHQ7CisJaW50IHJldDsKKworCXJldCA9IHVyYi0+c3RhdHVzOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAwOgorCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5pbnRfcGt0X3NjYW4oZ3NwY2FfZGV2LAorCQkgICAgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCkgPCAwKSB7CisJCQlQREVCVUcoRF9FUlIsICJVbmtub3duIHBhY2tldCByZWNlaXZlZCIpOworCQl9CisJCWJyZWFrOworCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PREVWOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogU3RvcCBpcyByZXF1ZXN0ZWQgZWl0aGVyIGJ5IHNvZnR3YXJlIG9yIGhhcmR3YXJlIGlzIGdvbmUsCisJCSAqIGtlZXAgdGhlIHJldCB2YWx1ZSBub24temVybyBhbmQgZG9uJ3QgcmVzdWJtaXQgbGF0ZXIuCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVBERUJVRyhEX0VSUiwgIlVSQiBlcnJvciAlaSwgcmVzdWJtaXR0aW5nIiwgdXJiLT5zdGF0dXMpOworCQl1cmItPnN0YXR1cyA9IDA7CisJCXJldCA9IDA7CisJfQorCisJaWYgKHJldCA9PSAwKSB7CisJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXQgPCAwKQorCQkJUERFQlVHKERfRVJSLCAiUmVzdWJtaXQgVVJCIGZhaWxlZCB3aXRoIGVycm9yICVpIiwgcmV0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ3NwY2FfaW5wdXRfY29ubmVjdChzdHJ1Y3QgZ3NwY2FfZGV2ICpkZXYpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCWludCBlcnIgPSAwOworCisJZGV2LT5pbnB1dF9kZXYgPSBOVUxMOworCWlmIChkZXYtPnNkX2Rlc2MtPmludF9wa3Rfc2NhbiB8fCBkZXYtPnNkX2Rlc2MtPm90aGVyX2lucHV0KSAgeworCQlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwkJaWYgKCFpbnB1dF9kZXYpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQl1c2JfbWFrZV9wYXRoKGRldi0+ZGV2LCBkZXYtPnBoeXMsIHNpemVvZihkZXYtPnBoeXMpKTsKKwkJc3RybGNhdChkZXYtPnBoeXMsICIvaW5wdXQwIiwgc2l6ZW9mKGRldi0+cGh5cykpOworCisJCWlucHV0X2Rldi0+bmFtZSA9IGRldi0+c2RfZGVzYy0+bmFtZTsKKwkJaW5wdXRfZGV2LT5waHlzID0gZGV2LT5waHlzOworCisJCXVzYl90b19pbnB1dF9pZChkZXYtPmRldiwgJmlucHV0X2Rldi0+aWQpOworCisJCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpOworCQlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChLRVlfQ0FNRVJBKV0gPSBCSVRfTUFTSyhLRVlfQ0FNRVJBKTsKKwkJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRldi0+ZGV2LT5kZXY7CisKKwkJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJCWlmIChlcnIpIHsKKwkJCVBERUJVRyhEX0VSUiwgIklucHV0IGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkICIKKwkJCQkid2l0aCBlcnJvciAlaSIsIGVycik7CisJCQlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSBOVUxMOworCQkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwkJfSBlbHNlIHsKKwkJCWRldi0+aW5wdXRfZGV2ID0gaW5wdXRfZGV2OworCQl9CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhbGxvY19hbmRfc3VibWl0X2ludF91cmIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwKQoreworCXVuc2lnbmVkIGludCBidWZmZXJfbGVuOworCWludCBpbnRlcnZhbDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwl2b2lkICpidWZmZXIgPSBOVUxMOworCWludCByZXQgPSAtRUlOVkFMOworCisJYnVmZmVyX2xlbiA9IGVwLT53TWF4UGFja2V0U2l6ZTsKKwlpbnRlcnZhbCA9IGVwLT5iSW50ZXJ2YWw7CisJUERFQlVHKERfUFJPQkUsICJmb3VuZCBpbnQgaW4gZW5kcG9pbnQ6IDB4JXgsICIKKwkJImJ1ZmZlcl9sZW49JXUsIGludGVydmFsPSV1IiwKKwkJZXAtPmJFbmRwb2ludEFkZHJlc3MsIGJ1ZmZlcl9sZW4sIGludGVydmFsKTsKKworCWRldiA9IGdzcGNhX2Rldi0+ZGV2OworCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVyYikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCWJ1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBlcC0+d01heFBhY2tldFNpemUsCisJCQkJR0ZQX0tFUk5FTCwgJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX2J1ZmZlcjsKKwl9CisJdXNiX2ZpbGxfaW50X3VyYih1cmIsIGRldiwKKwkJdXNiX3JjdmludHBpcGUoZGV2LCBlcC0+YkVuZHBvaW50QWRkcmVzcyksCisJCWJ1ZmZlciwgYnVmZmVyX2xlbiwKKwkJaW50X2lycSwgKHZvaWQgKilnc3BjYV9kZXYsIGludGVydmFsKTsKKwlnc3BjYV9kZXYtPmludF91cmIgPSB1cmI7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJzdWJtaXQgVVJCIGZhaWxlZCB3aXRoIGVycm9yICVpIiwgcmV0KTsKKwkJZ290byBlcnJvcl9zdWJtaXQ7CisJfQorCXJldHVybiByZXQ7CisKK2Vycm9yX3N1Ym1pdDoKKwl1c2JfYnVmZmVyX2ZyZWUoZGV2LAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQl1cmItPnRyYW5zZmVyX2RtYSk7CitlcnJvcl9idWZmZXI6CisJdXNiX2ZyZWVfdXJiKHVyYik7CitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBnc3BjYV9pbnB1dF9jcmVhdGVfdXJiKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRmX2Rlc2M7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcDsKKwlpbnQgaTsKKworCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPmludF9wa3Rfc2NhbikgIHsKKwkJaW50ZiA9IHVzYl9pZm51bV90b19pZihnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSk7CisJCWludGZfZGVzYyA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCQlmb3IgKGkgPSAwOyBpIDwgaW50Zl9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgeworCQkJZXAgPSAmaW50Zl9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOworCQkJaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oZXApICYmCisJCQkgICAgdXNiX2VuZHBvaW50X3hmZXJfaW50KGVwKSkgeworCisJCQkJYWxsb2NfYW5kX3N1Ym1pdF9pbnRfdXJiKGdzcGNhX2RldiwgZXApOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBnc3BjYV9pbnB1dF9kZXN0cm95X3VyYihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHVyYiAqdXJiOworCisJdXJiID0gZ3NwY2FfZGV2LT5pbnRfdXJiOworCWlmICh1cmIpIHsKKwkJZ3NwY2FfZGV2LT5pbnRfdXJiID0gTlVMTDsKKwkJdXNiX2tpbGxfdXJiKHVyYik7CisJCXVzYl9idWZmZXJfZnJlZShnc3BjYV9kZXYtPmRldiwKKwkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJdXJiLT50cmFuc2Zlcl9kbWEpOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwl9Cit9CisjZWxzZQorI2RlZmluZSBnc3BjYV9pbnB1dF9jb25uZWN0KGdzcGNhX2RldikJCTAKKyNkZWZpbmUgZ3NwY2FfaW5wdXRfY3JlYXRlX3VyYihnc3BjYV9kZXYpCisjZGVmaW5lIGdzcGNhX2lucHV0X2Rlc3Ryb3lfdXJiKGdzcGNhX2RldikKKyNlbmRpZgorCiAvKiBnZXQgdGhlIGN1cnJlbnQgaW5wdXQgZnJhbWUgYnVmZmVyICovCiBzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmdzcGNhX2dldF9pX2ZyYW1lKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOwotCWludCBpOwogCi0JaSA9IGdzcGNhX2Rldi0+ZnJfaTsKLQlpID0gZ3NwY2FfZGV2LT5mcl9xdWV1ZVtpXTsKLQlmcmFtZSA9ICZnc3BjYV9kZXYtPmZyYW1lW2ldOworCWZyYW1lID0gZ3NwY2FfZGV2LT5jdXJfZnJhbWU7CiAJaWYgKChmcmFtZS0+djRsMl9idWYuZmxhZ3MgJiBCVUZfQUxMX0ZMQUdTKQogCQkJCSE9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEKQogCQlyZXR1cm4gTlVMTDsKQEAgLTQ4NiwxMSArNjY0LDEzIEBACiAJCQlpLCBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKIAlnc3BjYV9kZXYtPmFsdCA9IGk7CQkvKiBtZW1vcml6ZSB0aGUgY3VycmVudCBhbHQgc2V0dGluZyAqLwogCWlmIChnc3BjYV9kZXYtPm5iYWx0ID4gMSkgeworCQlnc3BjYV9pbnB1dF9kZXN0cm95X3VyYihnc3BjYV9kZXYpOwogCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSwgaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQllcnIoInNldCBhbHQgJWQgZXJyICVkIiwgaSwgcmV0KTsKLQkJCXJldHVybiBOVUxMOworCQkJZXAgPSBOVUxMOwogCQl9CisJCWdzcGNhX2lucHV0X2NyZWF0ZV91cmIoZ3NwY2FfZGV2KTsKIAl9CiAJcmV0dXJuIGVwOwogfQpAQCAtNTM0LDI2ICs3MTQsMjIgQEAKIAkJCW51cmJzID0gMTsKIAl9CiAKLQlnc3BjYV9kZXYtPm51cmJzID0gbnVyYnM7CiAJZm9yIChuID0gMDsgbiA8IG51cmJzOyBuKyspIHsKIAkJdXJiID0gdXNiX2FsbG9jX3VyYihucGt0LCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF1cmIpIHsKIAkJCWVycigidXNiX2FsbG9jX3VyYiBmYWlsZWQiKTsKLQkJCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KKwkJZ3NwY2FfZGV2LT51cmJbbl0gPSB1cmI7CiAJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyhnc3BjYV9kZXYtPmRldiwKIAkJCQkJCWJzaXplLAogCQkJCQkJR0ZQX0tFUk5FTCwKIAkJCQkJCSZ1cmItPnRyYW5zZmVyX2RtYSk7CiAKIAkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKLQkJCXVzYl9mcmVlX3VyYih1cmIpOwotCQkJZXJyKCJ1c2JfYnVmZmVyX3VyYiBmYWlsZWQiKTsKLQkJCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOworCQkJZXJyKCJ1c2JfYnVmZmVyX2FsbG9jIGZhaWxlZCIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJZ3NwY2FfZGV2LT51cmJbbl0gPSB1cmI7CiAJCXVyYi0+ZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJCXVyYi0+Y29udGV4dCA9IGdzcGNhX2RldjsKIAkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYnNpemU7CkBAIC01ODUsNiArNzYxLDcgQEAKIHN0YXRpYyBpbnQgZ3NwY2FfaW5pdF90cmFuc2ZlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwlzdHJ1Y3QgdXJiICp1cmI7CiAJaW50IG4sIHJldDsKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQpAQCAtNTk1LDYgKzc3Miw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWdzcGNhX2Rldi0+dXNiX2VyciA9IDA7CisKIAkvKiBzZXQgdGhlIGhpZ2hlciBhbHRlcm5hdGUgc2V0dGluZyBhbmQKIAkgKiBsb29wIHVudGlsIHVyYiBzdWJtaXQgc3VjY2VlZHMgKi8KIAlpZiAoZ3NwY2FfZGV2LT5jYW0ucmV2ZXJzZV9hbHRzKQpAQCAtNjEzLDEwICs3OTIsMTUgQEAKIAkJZ290byBvdXQ7CiAJfQogCWZvciAoOzspIHsKLQkJUERFQlVHKERfU1RSRUFNLCAiaW5pdCB0cmFuc2ZlciBhbHQgJWQiLCBnc3BjYV9kZXYtPmFsdCk7Ci0JCXJldCA9IGNyZWF0ZV91cmJzKGdzcGNhX2RldiwgZXApOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OworCQlpZiAoIWdzcGNhX2Rldi0+Y2FtLm5vX3VyYl9jcmVhdGUpIHsKKwkJCVBERUJVRyhEX1NUUkVBTSwgImluaXQgdHJhbnNmZXIgYWx0ICVkIiwKKwkJCQlnc3BjYV9kZXYtPmFsdCk7CisJCQlyZXQgPSBjcmVhdGVfdXJicyhnc3BjYV9kZXYsIGVwKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KIAogCQkvKiBjbGVhciB0aGUgYnVsayBlbmRwb2ludCAqLwogCQlpZiAoZ3NwY2FfZGV2LT5jYW0uYnVsaykKQEAgLTYzNiw4ICs4MjAsMTEgQEAKIAkJCWJyZWFrOwogCiAJCS8qIHN1Ym1pdCB0aGUgVVJCcyAqLwotCQlmb3IgKG4gPSAwOyBuIDwgZ3NwY2FfZGV2LT5udXJiczsgbisrKSB7Ci0JCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihnc3BjYV9kZXYtPnVyYltuXSwgR0ZQX0tFUk5FTCk7CisJCWZvciAobiA9IDA7IG4gPCBNQVhfTlVSQlM7IG4rKykgeworCQkJdXJiID0gZ3NwY2FfZGV2LT51cmJbbl07CisJCQlpZiAodXJiID09IE5VTEwpCisJCQkJYnJlYWs7CisJCQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTY5NCw3ICs4ODEsOSBAQAogCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdG9wTikKIAkJCWdzcGNhX2Rldi0+c2RfZGVzYy0+c3RvcE4oZ3NwY2FfZGV2KTsKIAkJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7CisJCWdzcGNhX2lucHV0X2Rlc3Ryb3lfdXJiKGdzcGNhX2Rldik7CiAJCWdzcGNhX3NldF9hbHQwKGdzcGNhX2Rldik7CisJCWdzcGNhX2lucHV0X2NyZWF0ZV91cmIoZ3NwY2FfZGV2KTsKIAl9CiAKIAkvKiBhbHdheXMgY2FsbCBzdG9wMCB0byBmcmVlIHRoZSBzdWJkcml2ZXIncyByZXNvdXJjZXMgKi8KQEAgLTIwNjAsMTEgKzIyNDksMTIgQEAKIAkJUERFQlVHKERfRVJSLCAiVG9vIG1hbnkgY29uZmlnIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKworCS8qIHRoZSBVU0IgdmlkZW8gaW50ZXJmYWNlIG11c3QgYmUgdGhlIGZpcnN0IG9uZSAqLwogCWludGVyZmFjZSA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKLQlpZiAoaW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyID4gMCkgewotCQlQREVCVUcoRF9FUlIsICJpbnRmICE9IDAiKTsKKwlpZiAoZGV2LT5jb25maWctPmRlc2MuYk51bUludGVyZmFjZXMgIT0gMSAmJgorCSAgICBpbnRlcmZhY2UtPmJJbnRlcmZhY2VOdW1iZXIgIT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCiAJLyogY3JlYXRlIHRoZSBkZXZpY2UgKi8KIAlpZiAoZGV2X3NpemUgPCBzaXplb2YgKmdzcGNhX2RldikKQEAgLTIwOTYsNiArMjI4NiwxMCBAQAogCQlnb3RvIG91dDsKIAlnc3BjYV9zZXRfZGVmYXVsdF9tb2RlKGdzcGNhX2Rldik7CiAKKwlyZXQgPSBnc3BjYV9pbnB1dF9jb25uZWN0KGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKIAltdXRleF9pbml0KCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAltdXRleF9pbml0KCZnc3BjYV9kZXYtPnJlYWRfbG9jayk7CiAJbXV0ZXhfaW5pdCgmZ3NwY2FfZGV2LT5xdWV1ZV9sb2NrKTsKQEAgLTIxMTYsOCArMjMxMCwxNSBAQAogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBnc3BjYV9kZXYpOwogCVBERUJVRyhEX1BST0JFLCAiJXMgY3JlYXRlZCIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUoJmdzcGNhX2Rldi0+dmRldikpOworCisJZ3NwY2FfaW5wdXRfY3JlYXRlX3VyYihnc3BjYV9kZXYpOworCiAJcmV0dXJuIDA7CiBvdXQ6CisjaWZkZWYgQ09ORklHX0lOUFVUCisJaWYgKGdzcGNhX2Rldi0+aW5wdXRfZGV2KQorCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShnc3BjYV9kZXYtPmlucHV0X2Rldik7CisjZW5kaWYKIAlrZnJlZShnc3BjYV9kZXYtPnVzYl9idWYpOwogCWtmcmVlKGdzcGNhX2Rldik7CiAJcmV0dXJuIHJldDsKQEAgLTIxMzMsNiArMjMzNCw5IEBACiB2b2lkIGdzcGNhX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisjZW5kaWYKIAogCVBERUJVRyhEX1BST0JFLCAiJXMgZGlzY29ubmVjdCIsCiAJCXZpZGVvX2RldmljZV9ub2RlX25hbWUoJmdzcGNhX2Rldi0+dmRldikpOwpAQCAtMjE0NCw2ICsyMzQ4LDE1IEBACiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT53cSk7CiAJfQogCisjaWZkZWYgQ09ORklHX0lOUFVUCisJZ3NwY2FfaW5wdXRfZGVzdHJveV91cmIoZ3NwY2FfZGV2KTsKKwlpbnB1dF9kZXYgPSBnc3BjYV9kZXYtPmlucHV0X2RldjsKKwlpZiAoaW5wdXRfZGV2KSB7CisJCWdzcGNhX2Rldi0+aW5wdXRfZGV2ID0gTlVMTDsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwl9CisjZW5kaWYKKwogCS8qIHRoZSBkZXZpY2UgaXMgZnJlZWQgYXQgZXhpdCBvZiB0aGlzIGZ1bmN0aW9uICovCiAJZ3NwY2FfZGV2LT5kZXYgPSBOVUxMOwogCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CkBAIC0yMTY5LDYgKzIzODIsNyBAQAogCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3BOKQogCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3BOKGdzcGNhX2Rldik7CiAJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7CisJZ3NwY2FfaW5wdXRfZGVzdHJveV91cmIoZ3NwY2FfZGV2KTsKIAlnc3BjYV9zZXRfYWx0MChnc3BjYV9kZXYpOwogCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3AwKQogCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3AwKGdzcGNhX2Rldik7CkBAIC0yMTgyLDYgKzIzOTYsNyBAQAogCiAJZ3NwY2FfZGV2LT5mcm96ZW4gPSAwOwogCWdzcGNhX2Rldi0+c2RfZGVzYy0+aW5pdChnc3BjYV9kZXYpOworCWdzcGNhX2lucHV0X2NyZWF0ZV91cmIoZ3NwY2FfZGV2KTsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXJldHVybiBnc3BjYV9pbml0X3RyYW5zZmVyKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CkBAIC0yMjA1LDYgKzI0MjAsOCBAQAogCWludCByZXR2YWwgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IGdzcGNhX2Rldi0+c2RfZGVzYy0+bmN0cmxzOyBpKyspIHsKKwkJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBpKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybC5pZCA9PSBWNEwyX0NJRF9HQUlOKQogCQkJZ2Fpbl9jdHJsID0gJmdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV07CiAJCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldLnFjdHJsLmlkID09IFY0TDJfQ0lEX0VYUE9TVVJFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCmluZGV4IDU5Yzc5NDFkLi4wMmM2OTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCkBAIC00OCwyNiArNDgsMjcgQEAKIAogLyogdXNlZCB0byBsaXN0IGZyYW1lcmF0ZXMgc3VwcG9ydGVkIGJ5IGEgY2FtZXJhIG1vZGUgKHJlc29sdXRpb24pICovCiBzdHJ1Y3QgZnJhbWVyYXRlcyB7Ci0JaW50ICpyYXRlczsKKwljb25zdCB1OCAqcmF0ZXM7CiAJaW50IG5yYXRlczsKIH07CiAKIC8qIGRldmljZSBpbmZvcm1hdGlvbiAtIHNldCBhdCBwcm9iZSB0aW1lICovCiBzdHJ1Y3QgY2FtIHsKLQlpbnQgYnVsa19zaXplOwkJLyogYnVmZmVyIHNpemUgd2hlbiBpbWFnZSB0cmFuc2ZlciBieSBidWxrICovCiAJY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqY2FtX21vZGU7CS8qIHNpemUgbm1vZGVzICovCi0JY2hhciBubW9kZXM7CiAJY29uc3Qgc3RydWN0IGZyYW1lcmF0ZXMgKm1vZGVfZnJhbWVyYXRlczsgLyogbXVzdCBoYXZlIHNpemUgbm1vZGUsCiAJCQkJCQkgICAqIGp1c3QgbGlrZSBjYW1fbW9kZSAqLwotCV9fdTggYnVsa19udXJiczsJLyogbnVtYmVyIG9mIFVSQnMgaW4gYnVsayBtb2RlCisJdTMyIGJ1bGtfc2l6ZTsJCS8qIGJ1ZmZlciBzaXplIHdoZW4gaW1hZ2UgdHJhbnNmZXIgYnkgYnVsayAqLworCXUzMiBpbnB1dF9mbGFnczsJLyogdmFsdWUgZm9yIEVOVU1fSU5QVVQgc3RhdHVzIGZsYWdzICovCisJdTggbm1vZGVzOwkJLyogc2l6ZSBvZiBjYW1fbW9kZSAqLworCXU4IG5vX3VyYl9jcmVhdGU7CS8qIGRvbid0IGNyZWF0ZSB0cmFuc2ZlciBVUkJzICovCisJdTggYnVsa19udXJiczsJCS8qIG51bWJlciBvZiBVUkJzIGluIGJ1bGsgbW9kZQogCQkJCSAqIC0gY2Fubm90IGJlID4gTUFYX05VUkJTCiAJCQkJICogLSB3aGVuIDAgYW5kIGJ1bGtfc2l6ZSAhPSAwIG1lYW5zCiAJCQkJICogICAxIFVSQiBhbmQgc3VibWl0IGRvbmUgYnkgc3ViZHJpdmVyICovCiAJdTggYnVsazsJCS8qIGltYWdlIHRyYW5zZmVyIGJ5IDA6aXNvYyAvIDE6YnVsayAqLwogCXU4IG5wa3Q7CQkvKiBudW1iZXIgb2YgcGFja2V0cyBpbiBhbiBJU09DIG1lc3NhZ2UKIAkJCQkgKiAwIGlzIHRoZSBkZWZhdWx0IHZhbHVlOiAzMiBwYWNrZXRzICovCi0JdTMyIGlucHV0X2ZsYWdzOwkvKiB2YWx1ZSBmb3IgRU5VTV9JTlBVVCBzdGF0dXMgZmxhZ3MgKi8KLQljaGFyIHJldmVyc2VfYWx0czsJLyogQWx0IHNldHRpbmdzIGFyZSBpbiBoaWdoIHRvIGxvdyBvcmRlciAqLworCXU4IHJldmVyc2VfYWx0czsJLyogQWx0IHNldHRpbmdzIGFyZSBpbiBoaWdoIHRvIGxvdyBvcmRlciAqLwogfTsKIAogc3RydWN0IGdzcGNhX2RldjsKQEAgLTkwLDYgKzkxLDkgQEAKIHR5cGVkZWYgdm9pZCAoKmNhbV9wa3Rfb3ApIChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQkJdTggKmRhdGEsCiAJCQkJaW50IGxlbik7Cit0eXBlZGVmIGludCAoKmNhbV9pbnRfcGt0X29wKSAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJCXU4ICpkYXRhLAorCQkJCWludCBsZW4pOwogCiBzdHJ1Y3QgY3RybCB7CiAJc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjdHJsOwpAQCAtMTI1LDYgKzEyOSwxMiBAQAogCWNhbV9yZWdfb3AgZ2V0X3JlZ2lzdGVyOwogI2VuZGlmCiAJY2FtX2lkZW50X29wIGdldF9jaGlwX2lkZW50OworI2lmZGVmIENPTkZJR19JTlBVVAorCWNhbV9pbnRfcGt0X29wIGludF9wa3Rfc2NhbjsKKwkvKiBvdGhlcl9pbnB1dCBtYWtlcyB0aGUgZ3NwY2EgY29yZSBjcmVhdGUgZ3NwY2FfZGV2LT5pbnB1dCBldmVuIHdoZW4KKwkgICBpbnRfcGt0X3NjYW4gaXMgTlVMTCwgZm9yIGNhbXMgd2l0aCBub24gaW50ZXJydXB0IGRyaXZlbiBidXR0b25zICovCisJdTggb3RoZXJfaW5wdXQ7CisjZW5kaWYKIH07CiAKIC8qIHBhY2tldCB0eXBlcyB3aGVuIG1vdmluZyBmcm9tIGlzbyBidWYgdG8gZnJhbWUgYnVmICovCkBAIC0xNDcsNiArMTU3LDEwIEBACiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwkJLyogc3ViZHJpdmVyIGhhbmRsaW5nIHRoZSBkZXZpY2UgKi8KIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OwogCXN0cnVjdCBmaWxlICpjYXB0X2ZpbGU7CQkvKiBmaWxlIGRvaW5nIHZpZGVvIGNhcHR1cmUgKi8KKyNpZmRlZiBDT05GSUdfSU5QVVQKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJY2hhciBwaHlzWzY0XTsJCQkvKiBwaHlzaWNhbCBkZXZpY2UgcGF0aCAqLworI2VuZGlmCiAKIAlzdHJ1Y3QgY2FtIGNhbTsJCQkJLyogZGV2aWNlIGluZm9ybWF0aW9uICovCiAJY29uc3Qgc3RydWN0IHNkX2Rlc2MgKnNkX2Rlc2M7CQkvKiBzdWJkcml2ZXIgZGVzY3JpcHRpb24gKi8KQEAgLTE1Niw2ICsxNzAsOSBAQAogI2RlZmluZSBVU0JfQlVGX1NaIDY0CiAJX191OCAqdXNiX2J1ZjsJCQkJLyogYnVmZmVyIGZvciBVU0IgZXhjaGFuZ2VzICovCiAJc3RydWN0IHVyYiAqdXJiW01BWF9OVVJCU107CisjaWZkZWYgQ09ORklHX0lOUFVUCisJc3RydWN0IHVyYiAqaW50X3VyYjsKKyNlbmRpZgogCiAJX191OCAqZnJidWY7CQkJCS8qIGJ1ZmZlciBmb3IgbmZyYW1lcyAqLwogCXN0cnVjdCBnc3BjYV9mcmFtZSBmcmFtZVtHU1BDQV9NQVhfRlJBTUVTXTsKQEAgLTE4Nyw3ICsyMDQsNiBAQAogCWNoYXIgdXNlcnM7CQkJLyogbnVtYmVyIG9mIG9wZW5zICovCiAJY2hhciBwcmVzZW50OwkJCS8qIGRldmljZSBjb25uZWN0ZWQgKi8KIAljaGFyIG5idWZyZWFkOwkJCS8qIG51bWJlciBvZiBidWZmZXJzIGZvciByZWFkKCkgKi8KLQljaGFyIG51cmJzOwkJCS8qIG51bWJlciBvZiBhbGxvY2F0ZWQgVVJCcyAqLwogCWNoYXIgbWVtb3J5OwkJCS8qIG1lbW9yeSB0eXBlIChWNEwyX01FTU9SWV94eHgpICovCiAJX191OCBpZmFjZTsJCQkvKiBVU0IgaW50ZXJmYWNlIG51bWJlciAqLwogCV9fdTggYWx0OwkJCS8qIFVTQiBhbHRlcm5hdGUgc2V0dGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYwppbmRleCA4ZDA3MWRmLi5jMDcyMmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYwpAQCAtNDgsNyArNDgsNyBAQAogCX0KIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgY3RybCBtdDltMTExX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgbXQ5bTExMV9jdHJsc1tdID0gewogI2RlZmluZSBWRkxJUF9JRFggMAogCXsKIAkJewpAQCAtMTcxLDcgKzE3MSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWluZm8oIlByb2JpbmcgZm9yIGEgbXQ5bTExMSBzZW5zb3IiKTsKKwlQREVCVUcoRF9QUk9CRSwgIlByb2JpbmcgZm9yIGEgbXQ5bTExMSBzZW5zb3IiKTsKIAogCS8qIERvIHRoZSBwcmVpbml0ICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJlaW5pdF9tdDltMTExKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuYwppbmRleCAyYTI4Yjc0Li42MmMxY2JmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmMKQEAgLTMzLDcgKzMzLDcgQEAKIHN0YXRpYyBpbnQgb3Y3NjYwX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBvdjc2NjBfc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCBjdHJsIG92NzY2MF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIG92NzY2MF9jdHJsc1tdID0gewogI2RlZmluZSBHQUlOX0lEWCAxCiAJewogCQl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuaAppbmRleCBmNTU4OGViLi40ZDlkY2YyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmgKQEAgLTk0LDcgKzk0LDcgQEAKIGludCBvdjc2NjBfc3RvcChzdHJ1Y3Qgc2QgKnNkKTsKIHZvaWQgb3Y3NjYwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNkICpzZCk7CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgbTU2MDJfc2Vuc29yIG92NzY2MCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbTU2MDJfc2Vuc29yIG92NzY2MCA9IHsKIAkubmFtZSA9ICJvdjc2NjAiLAogCS5pMmNfc2xhdmVfaWQgPSAweDQyLAogCS5pMmNfcmVnVyA9IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuYwppbmRleCA5MjNjZGQ1Li4wNjliYTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmMKQEAgLTMwNyw3ICszMDcsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpbmZvKCJQcm9iaW5nIGZvciBhbiBvdjk2NTAgc2Vuc29yIik7CisJUERFQlVHKERfUFJPQkUsICJQcm9iaW5nIGZvciBhbiBvdjk2NTAgc2Vuc29yIik7CiAKIAkvKiBSdW4gdGhlIHByZS1pbml0IGJlZm9yZSBwcm9iaW5nIHRoZSBzZW5zb3IgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVpbml0X292OTY1MCkgJiYgIWVycjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuYwppbmRleCA4ZDc0ZDgwLi45MjViODdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpbmZvKCJQcm9iaW5nIGZvciBhIHBvMTAzMCBzZW5zb3IiKTsKKwlQREVCVUcoRF9QUk9CRSwgIlByb2JpbmcgZm9yIGEgcG8xMDMwIHNlbnNvciIpOwogCiAJLyogUnVuIHRoZSBwcmUtaW5pdCB0byBhY3R1YWxseSBwcm9iZSB0aGUgdW5pdCAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWluaXRfcG8xMDMwKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwppbmRleCAxYjUzNmY3ZC4uZGEwYTM4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaW5mbygiUHJvYmluZyBmb3IgYSBzNWs0YWEgc2Vuc29yIik7CisJUERFQlVHKERfUFJPQkUsICJQcm9iaW5nIGZvciBhIHM1azRhYSBzZW5zb3IiKTsKIAogCS8qIFByZWluaXQgdGhlIHNlbnNvciAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWluaXRfczVrNGFhKSAmJiAhZXJyOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5jCmluZGV4IDZiODlmMzMuLmZiZDkxNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWluZm8oIlByb2JpbmcgZm9yIGEgczVrODNhIHNlbnNvciIpOworCVBERUJVRyhEX1BST0JFLCAiUHJvYmluZyBmb3IgYSBzNWs4M2Egc2Vuc29yIik7CiAKIAkvKiBQcmVpbml0IHRoZSBzZW5zb3IgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVpbml0X3M1azgzYSkgJiYgIWVycjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCmluZGV4IDljZjhkNjguLjNkOTIyOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCkBAIC01NCw3ICs1NCw3IEBACiBzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKaW5kZXggOTE1NDg3MC4uMzM3NDRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYwpAQCAtNTcsNiArNTcsMTQgQEAKICNkZWZpbmUgTVI5NzMxMEFfR0FJTl9NQVgJCTMxCiAjZGVmaW5lIE1SOTczMTBBX0dBSU5fREVGQVVMVAkJMjUKIAorI2RlZmluZSBNUjk3MzEwQV9DT05UUkFTVF9NSU4JCTAKKyNkZWZpbmUgTVI5NzMxMEFfQ09OVFJBU1RfTUFYCQkzMQorI2RlZmluZSBNUjk3MzEwQV9DT05UUkFTVF9ERUZBVUxUCTIzCisKKyNkZWZpbmUgTVI5NzMxMEFfQ1NfR0FJTl9NSU4JCTAKKyNkZWZpbmUgTVI5NzMxMEFfQ1NfR0FJTl9NQVgJCTB4N2ZmCisjZGVmaW5lIE1SOTczMTBBX0NTX0dBSU5fREVGQVVMVAkweDExMAorCiAjZGVmaW5lIE1SOTczMTBBX01JTl9DTE9DS0RJVl9NSU4JMwogI2RlZmluZSBNUjk3MzEwQV9NSU5fQ0xPQ0tESVZfTUFYCTgKICNkZWZpbmUgTVI5NzMxMEFfTUlOX0NMT0NLRElWX0RFRkFVTFQJMwpAQCAtODIsNyArOTAsOCBAQAogCiAJaW50IGJyaWdodG5lc3M7CiAJdTE2IGV4cG9zdXJlOwotCXU4IGdhaW47CisJdTMyIGdhaW47CisJdTggY29udHJhc3Q7CiAJdTggbWluX2Nsb2NrZGl2OwogfTsKIApAQCAtOTgsNiArMTA3LDggQEAKIHN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0bWluX2Nsb2NrZGl2KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKQEAgLTEwNSwxMSArMTE2LDEzIEBACiBzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CiBzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOwogc3RhdGljIHZvaWQgc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKIC8qIFNlcGFyYXRlIGJyaWdodG5lc3MgY29udHJvbCBkZXNjcmlwdGlvbiBmb3IgQXJndXMgUXVpY2tDbGl4IGFzIGl0IGhhcwotICAgZGlmZmVyZW50IGxpbWl0cyBmcm9tIHRoZSBvdGhlciBtcjk3MzEwYSBjYW1lcmFzICovCisgKiBkaWZmZXJlbnQgbGltaXRzIGZyb20gdGhlIG90aGVyIG1yOTczMTBhIGNhbWVyYXMsIGFuZCBzZXBhcmF0ZSBnYWluCisgKiBjb250cm9sIGZvciBTYWthciBDeWJlclBpeCBjYW1lcmEuICovCiAJewogI2RlZmluZSBOT1JNX0JSSUdIVE5FU1NfSURYIDAKIAkJewpAQCAtMTcxLDcgKzE4NCwzNyBAQAogCQkuZ2V0ID0gc2RfZ2V0Z2FpbiwKIAl9LAogCXsKLSNkZWZpbmUgTUlOX0NMT0NLRElWX0lEWCA0CisjZGVmaW5lIFNBS0FSX0NTX0dBSU5fSURYIDQKKwkJeworCQkJLmlkID0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIkdhaW4iLAorCQkJLm1pbmltdW0gPSBNUjk3MzEwQV9DU19HQUlOX01JTiwKKwkJCS5tYXhpbXVtID0gTVI5NzMxMEFfQ1NfR0FJTl9NQVgsCisJCQkuc3RlcCA9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IE1SOTczMTBBX0NTX0dBSU5fREVGQVVMVCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRnYWluLAorCQkuZ2V0ID0gc2RfZ2V0Z2FpbiwKKwl9LAorCXsKKyNkZWZpbmUgQ09OVFJBU1RfSURYIDUKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJDb250cmFzdCIsCisJCQkubWluaW11bSA9IE1SOTczMTBBX0NPTlRSQVNUX01JTiwKKwkJCS5tYXhpbXVtID0gTVI5NzMxMEFfQ09OVFJBU1RfTUFYLAorCQkJLnN0ZXAgPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSBNUjk3MzEwQV9DT05UUkFTVF9ERUZBVUxULAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJLnNldCA9IHNkX3NldGNvbnRyYXN0LAorCQkuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisJfSwKKwl7CisjZGVmaW5lIE1JTl9DTE9DS0RJVl9JRFggNgogCQl7CiAJCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UsCiAJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC0zMjcsNyArMzcwLDYgQEAKIAlpZiAoZXJyX2NvZGUgPCAwKQogCQlyZXR1cm4gZXJyX2NvZGU7CiAKLQllcnJfY29kZSA9IG1yX3dyaXRlKGdzcGNhX2RldiwgMSk7CiAJZGF0YVswXSA9IDB4MTk7CiAJZGF0YVsxXSA9IDB4NTE7CiAJZXJyX2NvZGUgPSBtcl93cml0ZShnc3BjYV9kZXYsIDIpOwpAQCAtNDM3LDYgKzQ3OSw3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbTsKKwlpbnQgZ2Fpbl9kZWZhdWx0ID0gTVI5NzMxMEFfR0FJTl9ERUZBVUxUOwogCWludCBlcnJfY29kZTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKQEAgLTQ2MCwxMiArNTAzLDE0IEBACiAJaWYgKGVycl9jb2RlIDwgMCkKIAkJcmV0dXJuIGVycl9jb2RlOwogCisJLyogTm93LCB0aGUgcXVlcnkgZm9yIHNlbnNvciB0eXBlLiAqLworCWVycl9jb2RlID0gY2FtX2dldF9yZXNwb25zZTE2KGdzcGNhX2RldiwgMHgwNywgMSk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCiAJaWYgKGlkLT5pZFByb2R1Y3QgPT0gMHgwMTEwIHx8IGlkLT5pZFByb2R1Y3QgPT0gMHgwMTBlKSB7CiAJCXNkLT5jYW1fdHlwZSA9IENBTV9UWVBFX0NJRjsKIAkJY2FtLT5ubW9kZXMtLTsKLQkJZXJyX2NvZGUgPSBjYW1fZ2V0X3Jlc3BvbnNlMTYoZ3NwY2FfZGV2LCAweDA2LCAxKTsKLQkJaWYgKGVycl9jb2RlIDwgMCkKLQkJCXJldHVybiBlcnJfY29kZTsKIAkJLyoKIAkJICogQWxsIGJ1dCBvbmUgb2YgdGhlIGtub3duIENJRiBjYW1lcmFzIHNoYXJlIHRoZSBzYW1lIFVTQiBJRCwKIAkJICogYnV0IHR3byBkaWZmZXJlbnQgaW5pdCByb3V0aW5lcyBhcmUgaW4gdXNlLCBhbmQgdGhlIGNvbnRyb2wKQEAgLTQ3MywxMiArNTE4LDEyIEBACiAJCSAqIG9mIHRoZSB0d28ga25vd24gdmFyaWV0aWVzIGlzIGNvbm5lY3RlZCEKIAkJICoKIAkJICogQSBsaXN0IG9mIGtub3duIENJRiBjYW1lcmFzIGZvbGxvd3MuIFRoZXkgYWxsIHJlcG9ydCBlaXRoZXIKLQkJICogMDAwMiBmb3IgdHlwZSAwIG9yIDAwMDMgZm9yIHR5cGUgMS4KKwkJICogMDIwMCBmb3IgdHlwZSAwIG9yIDAzMDAgZm9yIHR5cGUgMS4KIAkJICogSWYgeW91IGhhdmUgYW5vdGhlciB0byByZXBvcnQsIHBsZWFzZSBkbwogCQkgKgogCQkgKiBOYW1lCQlzZC0+c2Vuc29yX3R5cGUJCXJlcG9ydGVkIGJ5CiAJCSAqCi0JCSAqIFNha2FyIFNweS1zaG90CTAJCVQuIEtpbGdvcmUKKwkJICogU2FrYXIgNTYzNzkgU3B5LXNob3QJMAkJVC4gS2lsZ29yZQogCQkgKiBJbm5vdmFnZQkJMAkJVC4gS2lsZ29yZQogCQkgKiBWaXZpdGFyIE1pbmkJCTAJCUguIERlIEdvZWRlCiAJCSAqIFZpdml0YXIgTWluaQkJMAkJRS4gUm9kcmlndWV6CkBAIC00ODcsNyArNTMyLDcgQEAKIAkJICogUGhpbGlwcyBkaWcuIGtleWNoLgkxCQlULiBLaWxnb3JlCiAJCSAqIFRydXN0IFNweWNAbSAxMDAJMQkJQS4gSmFjb2JzCiAJCSAqLwotCQlzd2l0Y2ggKGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSkgeworCQlzd2l0Y2ggKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSkgewogCQljYXNlIDI6CiAJCQlzZC0+c2Vuc29yX3R5cGUgPSAwOwogCQkJYnJlYWs7CkBAIC01MDQsMjAgKzU0OSwxOSBAQAogCX0gZWxzZSB7CiAJCXNkLT5jYW1fdHlwZSA9IENBTV9UWVBFX1ZHQTsKIAotCQllcnJfY29kZSA9IGNhbV9nZXRfcmVzcG9uc2UxNihnc3BjYV9kZXYsIDB4MDcsIDEpOwotCQlpZiAoZXJyX2NvZGUgPCAwKQotCQkJcmV0dXJuIGVycl9jb2RlOwotCiAJCS8qCi0JCSAqIEhlcmUgaXMgYSB0YWJsZSBvZiB0aGUgcmVzcG9uc2VzIHRvIHRoZSBwcmV2aW91cyBjb21tYW5kCi0JCSAqIGZyb20gdGhlIGtub3duIE1SOTczMTBBIFZHQSBjYW1lcmFzLgorCQkgKiBIZXJlIGlzIGEgdGFibGUgb2YgdGhlIHJlc3BvbnNlcyB0byB0aGUgcXVlcnkgZm9yIHNlbnNvcgorCQkgKiB0eXBlLCBmcm9tIHRoZSBrbm93biBNUjk3MzEwQSBWR0EgY2FtZXJhcy4gU2l4IGRpZmZlcmVudAorCQkgKiBjYW1lcmFzIG9mIHdoaWNoIGZpdmUgc2hhcmUgdGhlIHNhbWUgVVNCIElELgogCQkgKgogCQkgKiBOYW1lCQkJZ3NwY2FfZGV2LT51c2JfYnVmW10Jc2QtPnNlbnNvcl90eXBlCiAJCSAqCQkJCXNkLT5kb19sY2Rfc3RvcAogCQkgKiBBaXB0ZWsgUGVuY2FtIFZHQSsJMDMwMAkJMAkJMQotCQkgKiBJT04gZGlnaXRhbAkJMDM1MAkJMAkJMQorCQkgKiBJT04gZGlnaXRhbAkJMDMwMAkJMAkJMQogCQkgKiBBcmd1cyBEQy0xNjIwCTA0NTAJCTEJCTAKIAkJICogQXJndXMgUXVpY2tDbGl4CTA0MjAJCTEJCTEKKwkJICogU2FrYXIgNzczNzkgRGlnaXRhbAkwMzUwCQkwCQkxCisJCSAqIFNha2FyIDE2Mzh4IEN5YmVyUGl4CTAxMjAJCTAJCTIKIAkJICoKIAkJICogQmFzZWQgdXBvbiB0aGVzZSByZXN1bHRzLCB3ZSBhc3N1bWUgZGVmYXVsdCBzZXR0aW5ncwogCQkgKiBhbmQgdGhlbiBjb3JyZWN0IGFzIG5lY2Vzc2FyeSwgYXMgZm9sbG93cy4KQEAgLTUyNywxMCArNTcxLDEyIEBACiAJCXNkLT5zZW5zb3JfdHlwZSA9IDE7CiAJCXNkLT5kb19sY2Rfc3RvcCA9IDA7CiAJCXNkLT5hZGpfY29sb3JzID0gMDsKLQkJaWYgKChnc3BjYV9kZXYtPnVzYl9idWZbMF0gIT0gMHgwMykgJiYKKwkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAweDAxKSB7CisJCQlzZC0+c2Vuc29yX3R5cGUgPSAyOworCQl9IGVsc2UgaWYgKChnc3BjYV9kZXYtPnVzYl9idWZbMF0gIT0gMHgwMykgJiYKIAkJCQkJKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAhPSAweDA0KSkgewogCQkJUERFQlVHKERfRVJSLCAiVW5rbm93biBWR0EgU2Vuc29yIGlkIEJ5dGUgMDogJTAyeCIsCi0JCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSk7CisJCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CiAJCQlQREVCVUcoRF9FUlIsICJEZWZhdWx0cyBhc3N1bWVkLCBtYXkgbm90IHdvcmsiKTsKIAkJCVBERUJVRyhEX0VSUiwgIlBsZWFzZSByZXBvcnQgdGhpcyIpOwogCQl9CkBAIC01NjAsNyArNjA2LDcgQEAKIAkJUERFQlVHKERfUFJPQkUsICJNUjk3MzEwQSBWR0EgY2FtZXJhIGRldGVjdGVkLCBzZW5zb3I6ICVkIiwKIAkJICAgICAgIHNkLT5zZW5zb3JfdHlwZSk7CiAJfQotCS8qIFN0b3Agc3RyZWFtaW5nIGFzIHdlJ3ZlIHN0YXJ0ZWQgaXQgdG8gcHJvYmUgdGhlIHNlbnNvciB0eXBlLiAqLworCS8qIFN0b3Agc3RyZWFtaW5nIGFzIHdlJ3ZlIHN0YXJ0ZWQgaXQgb25seSB0byBwcm9iZSB0aGUgc2Vuc29yIHR5cGUuICovCiAJc2Rfc3RvcE4oZ3NwY2FfZGV2KTsKIAogCWlmIChmb3JjZV9zZW5zb3JfdHlwZSAhPSAtMSkgewpAQCAtNTc0LDkgKzYyMCwxMyBAQAogCQkvKiBObyBicmlnaHRuZXNzIGZvciBzZW5zb3JfdHlwZSAwICovCiAJCWlmIChzZC0+c2Vuc29yX3R5cGUgPT0gMCkKIAkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBOT1JNX0JSSUdIVE5FU1NfSURYKSB8Ci0JCQkJCSAgICAgICgxIDw8IEFSR1VTX1FDX0JSSUdIVE5FU1NfSURYKTsKKwkJCQkJICAgICAgKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgQ09OVFJBU1RfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IFNBS0FSX0NTX0dBSU5fSURYKTsKIAkJZWxzZQogCQkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEFSR1VTX1FDX0JSSUdIVE5FU1NfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IENPTlRSQVNUX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCkgfAogCQkJCQkgICAgICAoMSA8PCBNSU5fQ0xPQ0tESVZfSURYKTsKIAl9IGVsc2UgewogCQkvKiBBbGwgY29udHJvbHMgbmVlZCB0byBiZSBkaXNhYmxlZCBpZiBWR0Egc2Vuc29yX3R5cGUgaXMgMCAqLwpAQCAtNTg1LDE3ICs2MzUsMzAgQEAKIAkJCQkJICAgICAgKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKIAkJCQkJICAgICAgKDEgPDwgRVhQT1NVUkVfSURYKSB8CiAJCQkJCSAgICAgICgxIDw8IEdBSU5fSURYKSB8CisJCQkJCSAgICAgICgxIDw8IENPTlRSQVNUX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCkgfAogCQkJCQkgICAgICAoMSA8PCBNSU5fQ0xPQ0tESVZfSURYKTsKLQkJZWxzZSBpZiAoc2QtPmRvX2xjZF9zdG9wKQorCQllbHNlIGlmIChzZC0+c2Vuc29yX3R5cGUgPT0gMikgeworCQkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IE5PUk1fQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgR0FJTl9JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgTUlOX0NMT0NLRElWX0lEWCk7CisJCQlnYWluX2RlZmF1bHQgPSBNUjk3MzEwQV9DU19HQUlOX0RFRkFVTFQ7CisJCX0gZWxzZSBpZiAoc2QtPmRvX2xjZF9zdG9wKQogCQkJLyogQXJndXMgUXVpY2tDbGl4IGhhcyBkaWZmZXJlbnQgYnJpZ2h0bmVzcyBsaW1pdHMgKi8KLQkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBOT1JNX0JSSUdIVE5FU1NfSURYKTsKKwkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBOT1JNX0JSSUdIVE5FU1NfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IENPTlRSQVNUX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCk7CiAJCWVsc2UKLQkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBBUkdVU19RQ19CUklHSFRORVNTX0lEWCk7CisJCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgQ09OVFJBU1RfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IFNBS0FSX0NTX0dBSU5fSURYKTsKIAl9CiAKIAlzZC0+YnJpZ2h0bmVzcyA9IE1SOTczMTBBX0JSSUdIVE5FU1NfREVGQVVMVDsKIAlzZC0+ZXhwb3N1cmUgPSBNUjk3MzEwQV9FWFBPU1VSRV9ERUZBVUxUOwotCXNkLT5nYWluID0gTVI5NzMxMEFfR0FJTl9ERUZBVUxUOworCXNkLT5nYWluID0gZ2Fpbl9kZWZhdWx0OworCXNkLT5jb250cmFzdCA9IE1SOTczMTBBX0NPTlRSQVNUX0RFRkFVTFQ7CiAJc2QtPm1pbl9jbG9ja2RpdiA9IE1SOTczMTBBX01JTl9DTE9DS0RJVl9ERUZBVUxUOwogCiAJcmV0dXJuIDA7CkBAIC02OTcsNiArNzYwLDEyIEBACiAJCQl7MHgxMywgMHgwMCwgezB4MDF9LCAxfSwKIAkJCXswLCAwLCB7MH0sIDB9CiAJCX07CisJCS8qIFdpdGhvdXQgdGhpcyBjb21tYW5kIHRoZSBjYW0gd29uJ3Qgd29yayB3aXRoIFVTQi1VSENJICovCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4MGE7CisJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IDB4MDA7CisJCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAyKTsKKwkJaWYgKGVycl9jb2RlIDwgMCkKKwkJCXJldHVybiBlcnJfY29kZTsKIAkJZXJyX2NvZGUgPSBzZW5zb3Jfd3JpdGVfcmVncyhnc3BjYV9kZXYsIGNpZl9zZW5zb3IxX2luaXRfZGF0YSwKIAkJCQkJIEFSUkFZX1NJWkUoY2lmX3NlbnNvcjFfaW5pdF9kYXRhKSk7CiAJfQpAQCAtNzE3LDYgKzc4NiwxMCBAQAogCQlkYXRhWzVdICA9IDB4MDA7CiAJCWRhdGFbMTBdID0gMHg5MTsKIAl9CisJaWYgKHNkLT5zZW5zb3JfdHlwZSA9PSAyKSB7CisJCWRhdGFbNV0gID0gMHgwMDsKKwkJZGF0YVsxMF0gPSAweDE4OworCX0KIAogCXN3aXRjaCAoZ3NwY2FfZGV2LT53aWR0aCkgewogCWNhc2UgMTYwOgpAQCAtNzMxLDYgKzgwNCwxMCBAQAogCQlkYXRhWzRdID0gMHg3ODsgIC8qIHJlZyAzLCBWIHNpemUvNCAqLwogCQlkYXRhWzZdID0gMHgwNDsgIC8qIHJlZyA1LCBIIHN0YXJ0ICovCiAJCWRhdGFbOF0gPSAweDAzOyAgLyogcmVnIDcsIFYgc3RhcnQgKi8KKwkJaWYgKHNkLT5zZW5zb3JfdHlwZSA9PSAyKSB7CisJCQlkYXRhWzZdID0gMjsKKwkJCWRhdGFbOF0gPSAxOworCQl9CiAJCWlmIChzZC0+ZG9fbGNkX3N0b3ApCiAJCQlkYXRhWzhdID0gMHgwNDsgIC8qIEJheWVyIHRpbGUgc2hpZnRlZCAqLwogCQlicmVhazsKQEAgLTc1Myw3ICs4MzAsNiBAQAogCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAlpZiAoIXNkLT5zZW5zb3JfdHlwZSkgewotCQkvKiBUaGUgb25seSBrbm93biBzZW5zb3JfdHlwZSAwIGNhbSBpcyB0aGUgQXJndXMgREMtMTYyMCAqLwogCQljb25zdCBzdHJ1Y3Qgc2Vuc29yX3dfZGF0YSB2Z2Ffc2Vuc29yMF9pbml0X2RhdGFbXSA9IHsKIAkJCXsweDAxLCAweDAwLCB7MHgwYywgMHgwMCwgMHgwNH0sIDN9LAogCQkJezB4MTQsIDB4MDAsIHsweDAxLCAweGU0LCAweDAyLCAweDg0fSwgNH0sCkBAIC03NjQsNyArODQwLDcgQEAKIAkJfTsKIAkJZXJyX2NvZGUgPSBzZW5zb3Jfd3JpdGVfcmVncyhnc3BjYV9kZXYsIHZnYV9zZW5zb3IwX2luaXRfZGF0YSwKIAkJCQkJIEFSUkFZX1NJWkUodmdhX3NlbnNvcjBfaW5pdF9kYXRhKSk7Ci0JfSBlbHNlIHsJLyogc2QtPnNlbnNvcl90eXBlID0gMSAqLworCX0gZWxzZSBpZiAoc2QtPnNlbnNvcl90eXBlID09IDEpIHsKIAkJY29uc3Qgc3RydWN0IHNlbnNvcl93X2RhdGEgY29sb3JfYWRqW10gPSB7CiAJCQl7MHgwMiwgMHgwMCwgezB4MDYsIDB4NTksIDB4MGMsIDB4MTYsIDB4MDAsCiAJCQkJLyogYWRqdXN0ZWQgYmx1ZSwgZ3JlZW4sIHJlZCBnYWluIGNvcnJlY3QKQEAgLTgwMiw2ICs4NzgsNDggQEAKIAogCQllcnJfY29kZSA9IHNlbnNvcl93cml0ZV9yZWdzKGdzcGNhX2RldiwgdmdhX3NlbnNvcjFfaW5pdF9kYXRhLAogCQkJCQkgQVJSQVlfU0laRSh2Z2Ffc2Vuc29yMV9pbml0X2RhdGEpKTsKKwl9IGVsc2UgewkvKiBzZW5zb3IgdHlwZSA9PSAyICovCisJCWNvbnN0IHN0cnVjdCBzZW5zb3Jfd19kYXRhIHZnYV9zZW5zb3IyX2luaXRfZGF0YVtdID0geworCisJCQl7MHgwMSwgMHgwMCwgezB4NDh9LCAxfSwKKwkJCXsweDAyLCAweDAwLCB7MHgyMn0sIDF9LAorCQkJLyogUmVnIDMgbXNiIGFuZCA0IGlzIGxzYiBvZiB0aGUgZXhwb3N1cmUgc2V0dGluZyovCisJCQl7MHgwNSwgMHgwMCwgezB4MTB9LCAxfSwKKwkJCXsweDA2LCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MDcsIDB4MDAsIHsweDAwfSwgMX0sCisJCQl7MHgwOCwgMHgwMCwgezB4MDB9LCAxfSwKKwkJCXsweDA5LCAweDAwLCB7MHgwMH0sIDF9LAorCQkJLyogVGhlIGZvbGxvd2luZyBhcmUgdXNlZCBpbiB0aGUgZ2FpbiBjb250cm9sCisJCQkgKiB3aGljaCBpcyBCVFcgY29tcGxldGVseSBib3JrZWQgaW4gdGhlIE9FTSBkcml2ZXIKKwkJCSAqIFRoZSB2YWx1ZXMgZm9yIGVhY2ggY29sb3IgZ28gZnJvbSAwIHRvIDB4N2ZmCisJCQkgKnsweDBhLCAweDAwLCB7MHgwMX0sIDF9LCAgZ3JlZW4xIGdhaW4gbXNiCisJCQkgKnsweDBiLCAweDAwLCB7MHgxMH0sIDF9LCAgZ3JlZW4xIGdhaW4gbHNiCisJCQkgKnsweDBjLCAweDAwLCB7MHgwMX0sIDF9LCAgcmVkIGdhaW4gbXNiCisJCQkgKnsweDBkLCAweDAwLCB7MHgxMH0sIDF9LCAgcmVkIGdhaW4gbHNiCisJCQkgKnsweDBlLCAweDAwLCB7MHgwMX0sIDF9LCAgYmx1ZSBnYWluIG1zYgorCQkJICp7MHgwZiwgMHgwMCwgezB4MTB9LCAxfSwgIGJsdWUgZ2FpbiBsc2IKKwkJCSAqezB4MTAsIDB4MDAsIHsweDAxfSwgMX0sIGdyZWVuMiBnYWluIG1zYgorCQkJICp7MHgxMSwgMHgwMCwgezB4MTB9LCAxfSwgZ3JlZW4yIGdhaW4gbHNiCisJCQkgKi8KKwkJCXsweDEyLCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MTMsIDB4MDAsIHsweDA0fSwgMX0sIC8qIHdlaXJkIGVmZmVjdCBvbiBjb2xvcnMgKi8KKwkJCXsweDE0LCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MTUsIDB4MDAsIHsweDA2fSwgMX0sCisJCQl7MHgxNiwgMHgwMCwgezB4MDF9LCAxfSwKKwkJCXsweDE3LCAweDAwLCB7MHhlMn0sIDF9LCAvKiB2ZXJ0aWNhbCBhbGlnbm1lbnQgKi8KKwkJCXsweDE4LCAweDAwLCB7MHgwMn0sIDF9LAorCQkJezB4MTksIDB4MDAsIHsweDgyfSwgMX0sIC8qIGRvbid0IG1lc3Mgd2l0aCAqLworCQkJezB4MWEsIDB4MDAsIHsweDAwfSwgMX0sCisJCQl7MHgxYiwgMHgwMCwgezB4MjB9LCAxfSwKKwkJCS8qIHsweDFjLCAweDAwLCB7MHgxN30sIDF9LCBjb250cmFzdCBjb250cm9sICovCisJCQl7MHgxZCwgMHgwMCwgezB4ODB9LCAxfSwgLyogbW92aW5nIGNhdXNlcyBhIG1lc3MgKi8KKwkJCXsweDFlLCAweDAwLCB7MHgwOH0sIDF9LCAvKiBtb3ZpbmcgamFtcyB0aGUgY2FtZXJhICovCisJCQl7MHgxZiwgMHgwMCwgezB4MGN9LCAxfSwKKwkJCXsweDIwLCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezAsIDAsIHswfSwgMH0KKwkJfTsKKwkJZXJyX2NvZGUgPSBzZW5zb3Jfd3JpdGVfcmVncyhnc3BjYV9kZXYsIHZnYV9zZW5zb3IyX2luaXRfZGF0YSwKKwkJCQkJIEFSUkFZX1NJWkUodmdhX3NlbnNvcjJfaW5pdF9kYXRhKSk7CiAJfQogCXJldHVybiBlcnJfY29kZTsKIH0KQEAgLTgzNCw2ICs5NTIsNyBAQAogCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAlzZXRleHBvc3VyZShnc3BjYV9kZXYpOwogCXNldGdhaW4oZ3NwY2FfZGV2KTsKIApAQCAtODkzLDcgKzEwMTIsNyBAQAogc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgZXhwb3N1cmU7CisJaW50IGV4cG9zdXJlID0gTVI5NzMxMEFfRVhQT1NVUkVfREVGQVVMVDsKIAl1OCBidWZbMl07CiAKIAlpZiAoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IEVYUE9TVVJFX0lEWCkpCkBAIC05MDUsNiArMTAyNCwxMSBAQAogCQlleHBvc3VyZSA9IChzZC0+ZXhwb3N1cmUgKiA5MjY3KSAvIDEwMDAwICsgMzAwOwogCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMywgZXhwb3N1cmUgPj4gNCk7CiAJCXNlbnNvcl93cml0ZTEoZ3NwY2FfZGV2LCA0LCBleHBvc3VyZSAmIDB4MGYpOworCX0gZWxzZSBpZiAoc2QtPnNlbnNvcl90eXBlID09IDIpIHsKKwkJZXhwb3N1cmUgPSBzZC0+ZXhwb3N1cmU7CisJCWV4cG9zdXJlID4+PSAzOworCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMywgZXhwb3N1cmUgPj4gOCk7CisJCXNlbnNvcl93cml0ZTEoZ3NwY2FfZGV2LCA0LCBleHBvc3VyZSAmIDB4ZmYpOwogCX0gZWxzZSB7CiAJCS8qIFdlIGhhdmUgYm90aCBhIGNsb2NrIGRpdmlkZXIgYW5kIGFuIGV4cG9zdXJlIHJlZ2lzdGVyLgogCQkgICBXZSBmaXJzdCBjYWxjdWxhdGUgdGhlIGNsb2NrIGRpdmlkZXIsIGFzIHRoYXQgZGV0ZXJtaW5lcwpAQCAtOTQzLDE3ICsxMDY3LDM0IEBACiBzdGF0aWMgdm9pZCBzZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggZ2FpbnJlZzsKIAotCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgR0FJTl9JRFgpKQorCWlmICgoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IEdBSU5fSURYKSkgJiYKKwkgICAgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCkpKQogCQlyZXR1cm47CiAKLQlpZiAoc2QtPmNhbV90eXBlID09IENBTV9UWVBFX0NJRiAmJiBzZC0+c2Vuc29yX3R5cGUgPT0gMSkgeworCWlmIChzZC0+Y2FtX3R5cGUgPT0gQ0FNX1RZUEVfQ0lGICYmIHNkLT5zZW5zb3JfdHlwZSA9PSAxKQogCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMHgwZSwgc2QtPmdhaW4pOwotCX0gZWxzZSB7CisJZWxzZSBpZiAoc2QtPmNhbV90eXBlID09IENBTV9UWVBFX1ZHQSAmJiBzZC0+c2Vuc29yX3R5cGUgPT0gMikKKwkJZm9yIChnYWlucmVnID0gMHgwYTsgZ2FpbnJlZyA8IDB4MTE7IGdhaW5yZWcgKz0gMikgeworCQkJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIGdhaW5yZWcsIHNkLT5nYWluID4+IDgpOworCQkJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIGdhaW5yZWcgKyAxLCBzZC0+Z2FpbiAmIDB4ZmYpOworCQl9CisJZWxzZQogCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMHgxMCwgc2QtPmdhaW4pOwotCX0KIH0KIAorc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQ09OVFJBU1RfSURYKSkKKwkJcmV0dXJuOworCisJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIDB4MWMsIHNkLT5jb250cmFzdCk7Cit9CisKKwogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTEwMDgsNiArMTE0OSwyNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb250cmFzdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5jb250cmFzdDsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzZF9zZXRtaW5fY2xvY2tkaXYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCmluZGV4IGI0Zjk2NTcuLmJjNGNlZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKQEAgLTM4LDYgKzM4LDcgQEAKICAqLwogI2RlZmluZSBNT0RVTEVfTkFNRSAib3Y1MTkiCiAKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgImdzcGNhLmgiCiAKIE1PRFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+Iik7CkBAIC03MCw2ICs3MSw5IEBACiAJY2hhciBpbnZlcnRfbGVkOwogI2RlZmluZSBCUklER0VfSU5WRVJUX0xFRAk4CiAKKwljaGFyIHNuYXBzaG90X3ByZXNzZWQ7CisJY2hhciBzbmFwc2hvdF9uZWVkc19yZXNldDsKKwogCS8qIERldGVybWluZWQgYnkgc2Vuc29yIHR5cGUgKi8KIAlfX3U4IHNpZjsKIApAQCAtOTksMTAgKzEwMywxMiBAQAogI2RlZmluZSBTRU5fT1Y2NjMwOEFGIDUKICNkZWZpbmUgU0VOX09WNzYxMCA2CiAjZGVmaW5lIFNFTl9PVjc2MjAgNwotI2RlZmluZSBTRU5fT1Y3NjQwIDgKLSNkZWZpbmUgU0VOX09WNzY3MCA5Ci0jZGVmaW5lIFNFTl9PVjc2QkUgMTAKLSNkZWZpbmUgU0VOX09WODYxMCAxMQorI2RlZmluZSBTRU5fT1Y3NjIwQUUgOAorI2RlZmluZSBTRU5fT1Y3NjQwIDkKKyNkZWZpbmUgU0VOX09WNzY0OCAxMAorI2RlZmluZSBTRU5fT1Y3NjcwIDExCisjZGVmaW5lIFNFTl9PVjc2QkUgMTIKKyNkZWZpbmUgU0VOX09WODYxMCAxMwogCiAJdTggc2Vuc29yX2FkZHI7CiAJaW50IHNlbnNvcl93aWR0aDsKQEAgLTEzOSw2ICsxNDUsNyBAQAogc3RhdGljIHZvaWQgc2V0ZnJlcShzdHJ1Y3Qgc2QgKnNkKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisjZGVmaW5lIEJSSUdIVE5FU1NfSURYIDAKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtMTUzLDYgKzE2MCw3IEBACiAJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAogCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKIAl9LAorI2RlZmluZSBDT05UUkFTVF9JRFggMQogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULApAQCAtMTY3LDYgKzE3NSw3IEBACiAJICAgIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkgICAgLmdldCA9IHNkX2dldGNvbnRyYXN0LAogCX0sCisjZGVmaW5lIENPTE9SX0lEWCAyCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKQEAgLTI1NTQsNyArMjU2Myw3IEBACiAJCS8qIEkgZG9uJ3Qga25vdyB3aGF0J3MgZGlmZmVyZW50IGFib3V0IHRoZSA3NkJFIHlldC4gKi8KIAkJaWYgKGkyY19yKHNkLCAweDE1KSAmIDEpIHsKIAkJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIGlzIGFuIE9WNzYyMEFFIik7Ci0JCQlzZC0+c2Vuc29yID0gU0VOX09WNzYyMDsKKwkJCXNkLT5zZW5zb3IgPSBTRU5fT1Y3NjIwQUU7CiAJCX0gZWxzZSB7CiAJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjc2QkUiKTsKIAkJCXNkLT5zZW5zb3IgPSBTRU5fT1Y3NkJFOwpAQCAtMjU4OCw3ICsyNTk3LDcgQEAKIAkJCQlicmVhazsKIAkJCWNhc2UgMHg0ODoKIAkJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjc2NDgiKTsKLQkJCQlzZC0+c2Vuc29yID0gU0VOX09WNzY0MDsgLyogRklYTUUgKi8KKwkJCQlzZC0+c2Vuc29yID0gU0VOX09WNzY0ODsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJUERFQlVHKERfUFJPQkUsICJVbmtub3duIHNlbnNvcjogMHg3NiV4IiwgbG93KTsKQEAgLTI2ODAsNiArMjY4OSwzNiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc2RfcmVzZXRfc25hcHNob3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmICghc2QtPnNuYXBzaG90X25lZWRzX3Jlc2V0KQorCQlyZXR1cm47CisKKwkvKiBOb3RlIGl0IGlzIGltcG9ydGFudCB0aGF0IHdlIGNsZWFyIHNkLT5zbmFwc2hvdF9uZWVkc19yZXNldCwKKwkgICBiZWZvcmUgYWN0dWFsbHkgY2xlYXJpbmcgdGhlIHNuYXBzaG90IHN0YXRlIGluIHRoZSBicmlkZ2UKKwkgICBvdGhlcndpc2Ugd2UgbWlnaHQgcmFjZSB3aXRoIHRoZSBwa3Rfc2NhbiBpbnRlcnJ1cHQgaGFuZGxlciAqLworCXNkLT5zbmFwc2hvdF9uZWVkc19yZXNldCA9IDA7CisKKwlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwljYXNlIEJSSURHRV9PVjUxMToKKwljYXNlIEJSSURHRV9PVjUxMVBMVVM6CisJCXJlZ193KHNkLCBSNTF4X1NZU19TTkFQLCAweDAyKTsKKwkJcmVnX3coc2QsIFI1MXhfU1lTX1NOQVAsIDB4MDApOworCQlicmVhazsKKwljYXNlIEJSSURHRV9PVjUxODoKKwljYXNlIEJSSURHRV9PVjUxOFBMVVM6CisJCXJlZ193KHNkLCBSNTF4X1NZU19TTkFQLCAweDAyKTsgLyogUmVzZXQgKi8KKwkJcmVnX3coc2QsIFI1MXhfU1lTX1NOQVAsIDB4MDEpOyAvKiBFbmFibGUgKi8KKwkJYnJlYWs7CisJY2FzZSBCUklER0VfT1Y1MTk6CisJCXJlZ193KHNkLCBSNTF4X1NZU19SRVNFVCwgMHg0MCk7CisJCXJlZ193KHNkLCBSNTF4X1NZU19SRVNFVCwgMHgwMCk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGludCBvdjUxeF91cGxvYWRfcXVhbl90YWJsZXMoc3RydWN0IHNkICpzZCkKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyIHlRdWFuVGFibGU1MTFbXSA9IHsKQEAgLTMxMTUsNyArMzE1NCwxMSBAQAogCQkJCSAgICAgICgxIDw8IE9WNzY3MF9GUkVRX0lEWCk7CiAJfQogCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7Ci0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCB8fCBzZC0+c2Vuc29yID09IFNFTl9PVjc2NzApCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCB8fAorCSAgICBzZC0+c2Vuc29yID09IFNFTl9PVjc2NDgpCisJCWdzcGNhX2Rldi0+Y3RybF9kaXMgfD0gKDEgPDwgQVVUT0JSSUdIVF9JRFgpIHwKKwkJCQkgICAgICAgKDEgPDwgQ09OVFJBU1RfSURYKTsKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwKQogCQlnc3BjYV9kZXYtPmN0cmxfZGlzIHw9IDEgPDwgQVVUT0JSSUdIVF9JRFg7CiAJLyogT1Y4NjEwIEZyZXF1ZW5jeSBmaWx0ZXIgY29udHJvbCBzaG91bGQgd29yayBidXQgbmVlZHMgdGVzdGluZyAqLwogCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjg2MTApCkBAIC0zMTY5LDEwICszMjEyLDEyIEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOgogCQlpZiAod3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fNzYyMCwgQVJSQVlfU0laRShub3JtXzc2MjApKSkKIAkJCXJldHVybiAtRUlPOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCQlpZiAod3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fNzY0MCwgQVJSQVlfU0laRShub3JtXzc2NDApKSkKIAkJCXJldHVybiAtRUlPOwogCQlicmVhazsKQEAgLTMyNDYsNyArMzI5MSw5IEBACiAJLyogTm90ZSBvbmNlIHRoZSBGSVhNRSdzIGluIG1vZGVfaW5pdF9vdl9zZW5zb3JfcmVncygpIGFyZSBmaXhlZAogCSAgIGZvciBtb3JlIHNlbnNvcnMgd2UgbmVlZCB0byBkbyB0aGlzIGZvciB0aGVtIHRvbyAqLwogCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2MjBBRToKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCWNhc2UgU0VOX09WNzZCRToKIAkJaWYgKHNkLT5nc3BjYV9kZXYud2lkdGggPT0gMzIwKQogCQkJaW50ZXJsYWNlZCA9IDE7CkBAIC0zMzc3LDcgKzM0MjQsNyBAQAogCiAJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX09WNTE4UExVUykgewogCQlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKLQkJY2FzZSBTRU5fT1Y3NjIwOgorCQljYXNlIFNFTl9PVjc2MjBBRToKIAkJCWlmIChzZC0+Z3NwY2FfZGV2LndpZHRoID09IDMyMCkgewogCQkJCXJlZ193KHNkLCAweDIwLCAweDAwKTsKIAkJCQlyZWdfdyhzZCwgMHgyMSwgMHgxOSk7CkBAIC0zMzg2LDYgKzM0MzMsMTAgQEAKIAkJCQlyZWdfdyhzZCwgMHgyMSwgMHgxZik7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBTRU5fT1Y3NjIwOgorCQkJcmVnX3coc2QsIDB4MjAsIDB4MDApOworCQkJcmVnX3coc2QsIDB4MjEsIDB4MTkpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZWdfdyhzZCwgMHgyMSwgMHgxOSk7CiAJCX0KQEAgLTM0ODgsNyArMzUzOSw4IEBACiAJCWlmICh3cml0ZV9yZWd2YWxzKHNkLCBtb2RlX2luaXRfNTE5LAogCQkJCSAgQVJSQVlfU0laRShtb2RlX2luaXRfNTE5KSkpCiAJCQlyZXR1cm4gLUVJTzsKLQkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCkgeworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjQwIHx8CisJCSAgICBzZC0+c2Vuc29yID09IFNFTl9PVjc2NDgpIHsKIAkJCS8qIFNlbGVjdCA4LWJpdCBpbnB1dCBtb2RlICovCiAJCQlyZWdfd19tYXNrKHNkLCBPVjUxOV9SMjBfREZSLCAweDEwLCAweDEwKTsKIAkJfQpAQCAtMzUwMyw2ICszNTU1LDkgQEAKIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwICYmCiAJICAgIHNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlW3NkLT5nc3BjYV9kZXYuY3Vycl9tb2RlXS5wcml2KQogCQlyZWdfdyhzZCwgT1Y1MTlfUjEyX1hfT0ZGU0VUTCwgMHgwNCk7CisJZWxzZSBpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjQ4ICYmCisJICAgIHNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlW3NkLT5nc3BjYV9kZXYuY3Vycl9tb2RlXS5wcml2KQorCQlyZWdfdyhzZCwgT1Y1MTlfUjEyX1hfT0ZGU0VUTCwgMHgwMSk7CiAJZWxzZQogCQlyZWdfdyhzZCwgT1Y1MTlfUjEyX1hfT0ZGU0VUTCwgMHgwMCk7CiAJcmVnX3coc2QsIE9WNTE5X1IxM19YX09GRlNFVEgsCTB4MDApOwpAQCAtMzUyMCw2ICszNTc1LDcgQEAKIAlzZC0+Y2xvY2tkaXYgPSAwOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOX09WNzY0MDoKKwljYXNlIFNFTl9PVjc2NDg6CiAJCXN3aXRjaCAoc2QtPmZyYW1lX3JhdGUpIHsKIAkJZGVmYXVsdDoKIC8qCQljYXNlIDMwOiAqLwpAQCAtMzY0OSw2ICszNzA1LDcgQEAKIAkJaTJjX3dfbWFzayhzZCwgMHgxMiwgMHgwNCwgMHgwNik7IC8qIEFXQjogMSBUZXN0IHBhdHRlcm46IDAgKi8KIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOgogCWNhc2UgU0VOX09WNzZCRToKIAkJaTJjX3dfbWFzayhzZCwgMHgxNCwgcXZnYSA/IDB4MjAgOiAweDAwLCAweDIwKTsKIAkJaTJjX3dfbWFzayhzZCwgMHgyOCwgcXZnYSA/IDB4MDAgOiAweDIwLCAweDIwKTsKQEAgLTM2NjMsMTMgKzM3MjAsMTYgQEAKIAkJCWkyY193KHNkLCAweDM1LCBxdmdhID8gMHgxZSA6IDB4OWUpOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCQlpMmNfd19tYXNrKHNkLCAweDE0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOwogCQlpMmNfd19tYXNrKHNkLCAweDI4LCBxdmdhID8gMHgwMCA6IDB4MjAsIDB4MjApOwotLyoJCWkyY193KHNkLCAweDI0LCBxdmdhID8gMHgyMCA6IDB4M2EpOyAqLwotLyoJCWkyY193KHNkLCAweDI1LCBxdmdhID8gMHgzMCA6IDB4NjApOyAqLwotLyoJCWkyY193X21hc2soc2QsIDB4MmQsIHF2Z2EgPyAweDQwIDogMHgwMCwgMHg0MCk7ICovCi0vKgkJaTJjX3dfbWFzayhzZCwgMHg2NywgcXZnYSA/IDB4ZjAgOiAweDkwLCAweGYwKTsgKi8KLS8qCQlpMmNfd19tYXNrKHNkLCAweDc0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOyAqLworCQkvKiBTZXR0aW5nIHRoaXMgdW5kb2N1bWVudGVkIGJpdCBpbiBxdmdhIG1vZGUgcmVtb3ZlcyBhIHZlcnkKKwkJICAgYW5ub3lpbmcgdmVydGljYWwgc2hha2luZyBvZiB0aGUgaW1hZ2UgKi8KKwkJaTJjX3dfbWFzayhzZCwgMHgyZCwgcXZnYSA/IDB4NDAgOiAweDAwLCAweDQwKTsKKwkJLyogVW5rbm93biAqLworCQlpMmNfd19tYXNrKHNkLCAweDY3LCBxdmdhID8gMHhmMCA6IDB4OTAsIDB4ZjApOworCQkvKiBBbGxvdyBoaWdoZXIgYXV0b21hdGljIGdhaW4gKHRvIGFsbG93IGhpZ2hlciBmcmFtZXJhdGVzKSAqLworCQlpMmNfd19tYXNrKHNkLCAweDc0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOwogCQlpMmNfd19tYXNrKHNkLCAweDEyLCAweDA0LCAweDA0KTsgLyogQVdCOiAxICovCiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNzY3MDoKQEAgLTM3OTUsMTEgKzM4NTUsMTMgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2MjA6CisJY2FzZSBTRU5fT1Y3NjIwQUU6CiAJCWh3c2Jhc2UgPSAweDJmOwkJLyogRnJvbSA3NjIwLlNFVCAoc3BlYyBpcyB3cm9uZykgKi8KIAkJaHdlYmFzZSA9IDB4MmY7CiAJCXZ3c2Jhc2UgPSB2d2ViYXNlID0gMHgwNTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjQwOgorCWNhc2UgU0VOX09WNzY0ODoKIAkJaHdzYmFzZSA9IDB4MWE7CiAJCWh3ZWJhc2UgPSAweDFhOwogCQl2d3NiYXNlID0gdndlYmFzZSA9IDB4MDM7CkBAIC0zODkzLDYgKzM5NTUsMTIgQEAKIAlzZXRhdXRvYnJpZ2h0bmVzcyhzZCk7CiAJc2V0ZnJlcShzZCk7CiAKKwkvKiBGb3JjZSBjbGVhciBzbmFwc2hvdCBzdGF0ZSBpbiBjYXNlIHRoZSBzbmFwc2hvdCBidXR0b24gd2FzCisJICAgcHJlc3NlZCB3aGlsZSB3ZSB3ZXJlbid0IHN0cmVhbWluZyAqLworCXNkLT5zbmFwc2hvdF9uZWVkc19yZXNldCA9IDE7CisJc2RfcmVzZXRfc25hcHNob3QoZ3NwY2FfZGV2KTsKKwlzZC0+c25hcHNob3RfcHJlc3NlZCA9IDA7CisKIAlyZXQgPSBvdjUxeF9yZXN0YXJ0KHNkKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CkBAIC0zOTE5LDYgKzM5ODcsMzQgQEAKIAkJdzk5NjhjZl9zdG9wMChzZCk7CiB9CiAKK3N0YXRpYyB2b2lkIG92NTF4X2hhbmRsZV9idXR0b24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1OCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoc2QtPnNuYXBzaG90X3ByZXNzZWQgIT0gc3RhdGUpIHsKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgc3RhdGUpOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKyNlbmRpZgorCQlpZiAoc3RhdGUpCisJCQlzZC0+c25hcHNob3RfbmVlZHNfcmVzZXQgPSAxOworCisJCXNkLT5zbmFwc2hvdF9wcmVzc2VkID0gc3RhdGU7CisJfSBlbHNlIHsKKwkJLyogT24gdGhlIG92NTExIC8gb3Y1MTkgd2UgbmVlZCB0byByZXNldCB0aGUgYnV0dG9uIHN0YXRlCisJCSAgIG11bHRpcGxlIHRpbWVzLCBhcyByZXNldHRpbmcgZG9lcyBub3Qgd29yayBhcyBsb25nIGFzIHRoZQorCQkgICBidXR0b24gc3RheXMgcHJlc3NlZCAqLworCQlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwkJY2FzZSBCUklER0VfT1Y1MTE6CisJCWNhc2UgQlJJREdFX09WNTExUExVUzoKKwkJY2FzZSBCUklER0VfT1Y1MTk6CisJCQlpZiAoc3RhdGUpCisJCQkJc2QtPnNuYXBzaG90X25lZWRzX3Jlc2V0ID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCiBzdGF0aWMgdm9pZCBvdjUxMV9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQl1OCAqaW4sCQkJLyogaXNvYyBwYWNrZXQgKi8KIAkJCWludCBsZW4pCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwpAQCAtMzk0MCw2ICs0MDM2LDcgQEAKIAkgKi8KIAlpZiAoIShpblswXSB8IGluWzFdIHwgaW5bMl0gfCBpblszXSB8IGluWzRdIHwgaW5bNV0gfCBpbls2XSB8IGluWzddKSAmJgogCSAgICAoaW5bOF0gJiAweDA4KSkgeworCQlvdjUxeF9oYW5kbGVfYnV0dG9uKGdzcGNhX2RldiwgKGluWzhdID4+IDIpICYgMSk7CiAJCWlmIChpbls4XSAmIDB4ODApIHsKIAkJCS8qIEZyYW1lIGVuZCAqLwogCQkJaWYgKChpbls5XSArIDEpICogOCAhPSBnc3BjYV9kZXYtPndpZHRoIHx8CkBAIC0zOTc3LDYgKzQwNzQsNyBAQAogCS8qIEEgZmFsc2UgcG9zaXRpdmUgaGVyZSBpcyBsaWtlbHksIHVudGlsIE9WVCBnaXZlcyBtZQogCSAqIHRoZSBkZWZpbml0aXZlIFNPRi9FT0YgZm9ybWF0ICovCiAJaWYgKCghKGRhdGFbMF0gfCBkYXRhWzFdIHwgZGF0YVsyXSB8IGRhdGFbM10gfCBkYXRhWzVdKSkgJiYgZGF0YVs2XSkgeworCQlvdjUxeF9oYW5kbGVfYnV0dG9uKGdzcGNhX2RldiwgKGRhdGFbNl0gPj4gMSkgJiAxKTsKIAkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIE5VTEwsIDApOwogCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIE5VTEwsIDApOwogCQlzZC0+cGFja2V0X25yID0gMDsKQEAgLTQwMjQsNiArNDEyMiw5IEBACiAJaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZmYgJiYgZGF0YVsyXSA9PSAweGZmKSB7CiAJCXN3aXRjaCAoZGF0YVszXSkgewogCQljYXNlIDB4NTA6CQkvKiBzdGFydCBvZiBmcmFtZSAqLworCQkJLyogRG9uJ3QgY2hlY2sgdGhlIGJ1dHRvbiBzdGF0ZSBoZXJlLCBhcyB0aGUgc3RhdGUKKwkJCSAgIHVzdWFsbHkgKGFsd2F5cyA/KSBjaGFuZ2VzIGF0IEVPRiBhbmQgY2hlY2tpbmcgaXQKKwkJCSAgIGhlcmUgbGVhZHMgdG8gdW5uZWNlc3Nhcnkgc25hcHNob3Qgc3RhdGUgcmVzZXRzLiAqLwogI2RlZmluZSBIRFJTWiAxNgogCQkJZGF0YSArPSBIRFJTWjsKIAkJCWxlbiAtPSBIRFJTWjsKQEAgLTQwMzUsNiArNDEzNiw3IEBACiAJCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CiAJCQlyZXR1cm47CiAJCWNhc2UgMHg1MToJCS8qIGVuZCBvZiBmcmFtZSAqLworCQkJb3Y1MXhfaGFuZGxlX2J1dHRvbihnc3BjYV9kZXYsIGRhdGFbMTFdICYgMSk7CiAJCQlpZiAoZGF0YVs5XSAhPSAwKQogCQkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOwogCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCkBAIC00MTAzLDkgKzQyMDUsMTEgQEAKIAljYXNlIFNFTl9PVjY2MzA6CiAJY2FzZSBTRU5fT1Y2NjMwOEFGOgogCWNhc2UgU0VOX09WNzY0MDoKKwljYXNlIFNFTl9PVjc2NDg6CiAJCWkyY193KHNkLCBPVjc2MTBfUkVHX0JSVCwgdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOgogCQkvKiA3NjIwIGRvZXNuJ3QgbGlrZSBtYW51YWwgY2hhbmdlcyB3aGVuIGluIGF1dG8gbW9kZSAqLwogCQlpZiAoIXNkLT5hdXRvYnJpZ2h0bmVzcykKIAkJCWkyY193KHNkLCBPVjc2MTBfUkVHX0JSVCwgdmFsKTsKQEAgLTQxNDIsNyArNDI0Niw4IEBACiAJCWkyY193KHNkLCAweDY0LCBjdGFiW3ZhbCA+PiA1XSk7CiAJCWJyZWFrOwogCSAgICB9Ci0JY2FzZSBTRU5fT1Y3NjIwOiB7CisJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOiB7CiAJCXN0YXRpYyBjb25zdCBfX3U4IGN0YWJbXSA9IHsKIAkJCTB4MDEsIDB4MDUsIDB4MDksIDB4MTEsIDB4MTUsIDB4MzUsIDB4MzcsIDB4NTcsCiAJCQkweDViLCAweGE1LCAweGE3LCAweGM3LCAweGM5LCAweGNmLCAweGVmLCAweGZmCkBAIC00MTUyLDEwICs0MjU3LDYgQEAKIAkJaTJjX3coc2QsIDB4NjQsIGN0YWJbdmFsID4+IDRdKTsKIAkJYnJlYWs7CiAJICAgIH0KLQljYXNlIFNFTl9PVjc2NDA6Ci0JCS8qIFVzZSBnYWluIGNvbnRyb2wgaW5zdGVhZC4gKi8KLQkJaTJjX3coc2QsIE9WNzYxMF9SRUdfR0FJTiwgdmFsID4+IDIpOwotCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NzA6CiAJCS8qIGNoZWNrIHRoYXQgdGhpcyBpc24ndCBqdXN0IHRoZSBzYW1lIGFzIG92NzYxMCAqLwogCQlpMmNfdyhzZCwgT1Y3NjcwX1JFR19DT05UUkFTLCB2YWwgPj4gMSk7CkBAIC00MTc5LDYgKzQyODAsNyBAQAogCQlpMmNfdyhzZCwgT1Y3NjEwX1JFR19TQVQsIHZhbCk7CiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2MjBBRToKIAkJLyogVXNlIFVWIGdhbW1hIGNvbnRyb2wgaW5zdGVhZC4gQml0cyAwICYgNyBhcmUgcmVzZXJ2ZWQuICovCiAvKgkJcmMgPSBvdl9pMmNfd3JpdGUoc2QtPmRldiwgMHg2MiwgKHZhbCA+PiA5KSAmIDB4N2UpOwogCQlpZiAocmMgPCAwKQpAQCAtNDE4Niw2ICs0Mjg4LDcgQEAKIAkJaTJjX3coc2QsIE9WNzYxMF9SRUdfU0FULCB2YWwpOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCQlpMmNfdyhzZCwgT1Y3NjEwX1JFR19TQVQsIHZhbCAmIDB4ZjApOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NzA6CkBAIC00MTk4LDcgKzQzMDEsOCBAQAogCiBzdGF0aWMgdm9pZCBzZXRhdXRvYnJpZ2h0bmVzcyhzdHJ1Y3Qgc2QgKnNkKQogewotCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjc2NDAgfHwgc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwIHx8CisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCB8fCBzZC0+c2Vuc29yID09IFNFTl9PVjc2NDggfHwKKwkgICAgc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwIHx8CiAJICAgIHNkLT5zZW5zb3IgPT0gU0VOX09WMjYxMCB8fCBzZC0+c2Vuc29yID09IFNFTl9PVjM2MTApCiAJCXJldHVybjsKIApAQCAtNDQ3NSw5ICs0NTc5LDEzIEBACiAJLnN0b3BOID0gc2Rfc3RvcE4sCiAJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLmRxX2NhbGxiYWNrID0gc2RfcmVzZXRfc25hcHNob3QsCiAJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKIAkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAogCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCisjaWZkZWYgQ09ORklHX0lOUFVUCisJLm90aGVyX2lucHV0ID0gMSwKKyNlbmRpZgogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCkBAIC00NDk0LDcgKzQ2MDIsOCBAQAogCSAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfCBCUklER0VfSU5WRVJUX0xFRCB9LAogCXtVU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMjhjKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IH0sCiAJe1VTQl9ERVZJQ0UoMHgwNTRjLCAweDAxNTQpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKLQl7VVNCX0RFVklDRSgweDA1NGMsIDB4MDE1NSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB9LAorCXtVU0JfREVWSUNFKDB4MDU0YywgMHgwMTU1KSwKKwkgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IHwgQlJJREdFX0lOVkVSVF9MRUQgfSwKIAl7VVNCX0RFVklDRSgweDA1YTksIDB4MDUxMSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxMSB9LAogCXtVU0JfREVWSUNFKDB4MDVhOSwgMHgwNTE4KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE4IH0sCiAJe1VTQl9ERVZJQ0UoMHgwNWE5LCAweDA1MTkpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYwppbmRleCAwYTZiOGYwLi45NTdlMDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIG92NTM0IGdzcGNhIGRyaXZlcgorICogb3Y1MzQtb3Y3NzJ4IGdzcGNhIGRyaXZlcgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbnRvbmlvIE9zcGl0ZSA8b3NwaXRlQHN0dWRlbnRpLnVuaW5hLml0PgogICogQ29weXJpZ2h0IChDKSAyMDA4IEppbSBQYXJpcyA8amltQGp0YW4uY29tPgpAQCAtNjgsMTIgKzY4LDcgQEAKIAlzOCBzaGFycG5lc3M7CiAJdTggaGZsaXA7CiAJdTggdmZsaXA7Ci0JdTggc2F0dXI7Ci0JdTggbGlnaHRmcmVxOwogCi0JdTggc2Vuc29yOwotI2RlZmluZSBTRU5TT1JfT1Y3NzJYIDAKLSNkZWZpbmUgU0VOU09SX09WOTY1WCAxCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC0xMDEsMTIgKzk2LDggQEAKIHN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7Ci1zdGF0aWMgaW50IHNkX3NldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKLXN0YXRpYyBpbnQgc2RfZ2V0c2F0dXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKLXN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7Ci1zdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzX292NzcyeFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAgICAgewkJCQkJCQkvKiAwICovCiAJewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC0xMTUsOCArMTA2LDggQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDI1NSwKIAkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBCUklHSFRORVNTXzc3X0RFRiAyMAotCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfNzdfREVGLAorI2RlZmluZSBCUklHSFRORVNTX0RFRiAyMAorCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAogCX0sCiAJLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCiAJLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCkBAIC0xMjksOCArMTIwLDggQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDI1NSwKIAkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBDT05UUkFTVF83N19ERUYgMzcKLQkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF83N19ERUYsCisjZGVmaW5lIENPTlRSQVNUX0RFRiAzNworCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKIAl9LAogCS5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCkBAIC0xNTcsOCArMTQ4LDggQEAKIAkgICAgLm1pbmltdW0gPSAwLAogCSAgICAubWF4aW11bSA9IDI1NSwKIAkgICAgLnN0ZXAgICAgPSAxLAotI2RlZmluZSBFWFBPXzc3X0RFRiAxMjAKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSBFWFBPXzc3X0RFRiwKKyNkZWZpbmUgRVhQT19ERUYgMTIwCisJICAgIC5kZWZhdWx0X3ZhbHVlID0gRVhQT19ERUYsCiAJfSwKIAkuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCiAJLmdldCA9IHNkX2dldGV4cG9zdXJlLApAQCAtMjEzLDEzICsyMDQsMTMgQEAKIAkgICAgLm1pbmltdW0gPSAwLAogCSAgICAubWF4aW11bSA9IDEsCiAJICAgIC5zdGVwICAgID0gMSwKLSNkZWZpbmUgQVVUT0dBSU5fNzdfREVGIDAKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSBBVVRPR0FJTl83N19ERUYsCisjZGVmaW5lIEFVVE9HQUlOX0RFRiAwCisJICAgIC5kZWZhdWx0X3ZhbHVlID0gQVVUT0dBSU5fREVGLAogCX0sCiAJLnNldCA9IHNkX3NldGF1dG9nYWluLAogCS5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKICAgICB9LAotI2RlZmluZSBBV0JfNzdfSURYIDgKKyNkZWZpbmUgQVdCX0lEWCA4CiAgICAgewkJCQkJCQkvKiA4ICovCiAJewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRSwKQEAgLTI0Miw4ICsyMzMsOCBAQAogCSAgICAubWluaW11bSA9IDAsCiAJICAgIC5tYXhpbXVtID0gNjMsCiAJICAgIC5zdGVwICAgID0gMSwKLSNkZWZpbmUgU0hBUlBORVNTXzc3X0RFRiAwCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTXzc3X0RFRiwKKyNkZWZpbmUgU0hBUlBORVNTX0RFRiAwCisJICAgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTX0RFRiwKIAl9LAogCS5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCiAJLmdldCA9IHNkX2dldHNoYXJwbmVzcywKQEAgLTI3NywxMDcgKzI2OCw2IEBACiAJLmdldCA9IHNkX2dldHZmbGlwLAogICAgIH0sCiB9Owotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzX292OTY1eFtdID0gewotICAgIHsJCQkJCQkJLyogMCAqLwotCXsKLQkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAotCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gMTUsCi0JCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgQlJJR0hUTkVTU185Nl9ERUYgNwotCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfOTZfREVGLAotCX0sCi0JLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCi0JLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCi0gICAgfSwKLSAgICB7CQkJCQkJCS8qIDEgKi8KLQl7Ci0JCS5pZCAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCi0JCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgICAgPSAiQ29udHJhc3QiLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gMTUsCi0JCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgQ09OVFJBU1RfOTZfREVGIDMKLQkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF85Nl9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCi0JLmdldCA9IHNkX2dldGNvbnRyYXN0LAotICAgIH0sCi0gICAgewkJCQkJCQkvKiAyICovCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX0FVVE9HQUlOLAotCSAgICAudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JICAgIC5uYW1lICAgID0gIkF1dG9nYWluIiwKLQkgICAgLm1pbmltdW0gPSAwLAotCSAgICAubWF4aW11bSA9IDEsCi0JICAgIC5zdGVwICAgID0gMSwKLSNkZWZpbmUgQVVUT0dBSU5fOTZfREVGIDEKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSBBVVRPR0FJTl85Nl9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCi0JLmdldCA9IHNkX2dldGF1dG9nYWluLAotICAgIH0sCi0jZGVmaW5lIEVYUE9fOTZfSURYIDMKLSAgICB7CQkJCQkJCS8qIDMgKi8KLQl7Ci0JICAgIC5pZCAgICAgID0gVjRMMl9DSURfRVhQT1NVUkUsCi0JICAgIC50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkgICAgLm5hbWUgICAgPSAiRXhwb3N1cmUiLAotCSAgICAubWluaW11bSA9IDAsCi0JICAgIC5tYXhpbXVtID0gMywKLQkgICAgLnN0ZXAgICAgPSAxLAotI2RlZmluZSBFWFBPXzk2X0RFRiAwCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gRVhQT185Nl9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCi0JLmdldCA9IHNkX2dldGV4cG9zdXJlLAotICAgIH0sCi0gICAgewkJCQkJCQkvKiA0ICovCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKLQkgICAgLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCSAgICAubmFtZSAgICA9ICJTaGFycG5lc3MiLAotCSAgICAubWluaW11bSA9IC0xLAkJLyogLTEgPSBhdXRvICovCi0JICAgIC5tYXhpbXVtID0gNCwKLQkgICAgLnN0ZXAgICAgPSAxLAotI2RlZmluZSBTSEFSUE5FU1NfOTZfREVGIC0xCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTXzk2X0RFRiwKLQl9LAotCS5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCi0JLmdldCA9IHNkX2dldHNoYXJwbmVzcywKLSAgICB9LAotICAgIHsJCQkJCQkJLyogNSAqLwotCXsKLQkJLmlkICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAotCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lICAgID0gIlNhdHVyYXRpb24iLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gNCwKLQkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBTQVRVUl9ERUYgMgotCQkuZGVmYXVsdF92YWx1ZSA9IFNBVFVSX0RFRiwKLQl9LAotCS5zZXQgPSBzZF9zZXRzYXR1ciwKLQkuZ2V0ID0gc2RfZ2V0c2F0dXIsCi0gICAgfSwKLSAgICB7Ci0JewotCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCi0JCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfTUVOVSwKLQkJLm5hbWUgICAgPSAiTGlnaHQgZnJlcXVlbmN5IGZpbHRlciIsCi0JCS5taW5pbXVtID0gMCwKLQkJLm1heGltdW0gPSAyLAkvKiAwOiAwLCAxOiA1MEh6LCAyOjYwSHogKi8KLQkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBGUkVRX0RFRiAwCi0JCS5kZWZhdWx0X3ZhbHVlID0gRlJFUV9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0ZnJlcSwKLQkuZ2V0ID0gc2RfZ2V0ZnJlcSwKLSAgICB9LAotfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgb3Y3NzJ4X21vZGVbXSA9IHsKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9ZVVlWLCBWNEwyX0ZJRUxEX05PTkUsCkBAIC0zOTIsMzUgKzI4MiwyMSBAQAogCSAucHJpdiA9IDB9LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgb3Y5NjV4X21vZGVbXSA9IHsKLQl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCi0JIC5ieXRlc3BlcmxpbmUgPSAzMjAsCi0JIC5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSA0fSwKLQl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCi0JIC5ieXRlc3BlcmxpbmUgPSA2NDAsCi0JIC5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSAzfSwKLQl7ODAwLCA2MDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCi0JIC5ieXRlc3BlcmxpbmUgPSA4MDAsCi0JIC5zaXplaW1hZ2UgPSA4MDAgKiA2MDAgKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSAyfSwKLQl7MTAyNCwgNzY4LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAotCSAuYnl0ZXNwZXJsaW5lID0gMTAyNCwKLQkgLnNpemVpbWFnZSA9IDEwMjQgKiA3NjggKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSAxfSwKLQl7MTI4MCwgMTAyNCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKLQkgLmJ5dGVzcGVybGluZSA9IDEyODAsCi0JIC5zaXplaW1hZ2UgPSAxMjgwICogMTAyNCAqIDMgLyA4ICsgNTkwLAotCSAuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAotCSAucHJpdiA9IDB9LAorc3RhdGljIGNvbnN0IHU4IHF2Z2FfcmF0ZXNbXSA9IHsxMjUsIDEwMCwgNzUsIDYwLCA1MCwgNDAsIDMwfTsKK3N0YXRpYyBjb25zdCB1OCB2Z2FfcmF0ZXNbXSA9IHs2MCwgNTAsIDQwLCAzMCwgMTV9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZyYW1lcmF0ZXMgb3Y3NzJ4X2ZyYW1lcmF0ZXNbXSA9IHsKKwl7IC8qIDMyMHgyNDAgKi8KKwkJLnJhdGVzID0gcXZnYV9yYXRlcywKKwkJLm5yYXRlcyA9IEFSUkFZX1NJWkUocXZnYV9yYXRlcyksCisJfSwKKwl7IC8qIDY0MHg0ODAgKi8KKwkJLnJhdGVzID0gdmdhX3JhdGVzLAorCQkubnJhdGVzID0gQVJSQVlfU0laRSh2Z2FfcmF0ZXMpLAorCX0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRfb3Y3NzJ4W11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRbXVsyXSA9IHsKIAl7IDB4YzIsIDB4MGMgfSwKIAl7IDB4ODgsIDB4ZjggfSwKIAl7IDB4YzMsIDB4NjkgfSwKQEAgLTQ3OCw3ICszNTQsNyBAQAogCXsgMHhjMSwgMHgzYyB9LAogCXsgMHhjMiwgMHgwYyB9LAogfTsKLXN0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjc3MnhbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdFtdWzJdID0gewogCXsgMHgxMiwgMHg4MCB9LAogCXsgMHgxMSwgMHgwMSB9LAogLypmaXhtZTogYmV0dGVyIGhhdmUgYSBkZWxheT8qLwpAQCAtNTcxLDcgKzQ0Nyw3IEBACiAJeyAweDhlLCAweDAwIH0sCQkvKiBEZS1ub2lzZSB0aHJlc2hvbGQgKi8KIAl7IDB4MGMsIDB4ZDAgfQogfTsKLXN0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3ZnYVtdWzJdID0geworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF92Z2FbXVsyXSA9IHsKIAl7MHgxYywgMHgwMH0sCiAJezB4MWQsIDB4NDB9LAogCXsweDFkLCAweDAyfSwKQEAgLTU4Miw3ICs0NTgsNyBAQAogCXsweGMwLCAweDUwfSwKIAl7MHhjMSwgMHgzY30sCiB9Owotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjc3MnhfdmdhW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X3ZnYVtdWzJdID0gewogCXsweDEyLCAweDAwfSwKIAl7MHgxNywgMHgyNn0sCiAJezB4MTgsIDB4YTB9LApAQCAtNTkyLDcgKzQ2OCw3IEBACiAJezB4MmMsIDB4ZjB9LAogCXsweDY1LCAweDIwfSwKIH07Ci1zdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X292NzcyeF9xdmdhW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X3F2Z2FbXVsyXSA9IHsKIAl7MHgxYywgMHgwMH0sCiAJezB4MWQsIDB4NDB9LAogCXsweDFkLCAweDAyfSwKQEAgLTYwMyw3ICs0NzksNyBAQAogCXsweGMwLCAweDI4fSwKIAl7MHhjMSwgMHgxZX0sCiB9Owotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjc3MnhfcXZnYVtdWzJdID0geworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9xdmdhW11bMl0gPSB7CiAJezB4MTIsIDB4NDB9LAogCXsweDE3LCAweDNmfSwKIAl7MHgxOCwgMHg1MH0sCkBAIC02MTQsNTcxICs0OTAsNiBAQAogCXsweDY1LCAweDJmfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1OCBicmlkZ2VfaW5pdF9vdjk2NXhbXVsyXSA9IHsKLQl7MHg4OCwgMHhmOH0sCi0JezB4ODksIDB4ZmZ9LAotCXsweDc2LCAweDAzfSwKLQl7MHg5MiwgMHgwM30sCi0JezB4OTUsIDB4MTB9LAotCXsweGUyLCAweDAwfSwKLQl7MHhlNywgMHgzZX0sCi0JezB4OGQsIDB4MWN9LAotCXsweDhlLCAweDAwfSwKLQl7MHg4ZiwgMHgwMH0sCi0JezB4MWYsIDB4MDB9LAotCXsweGMzLCAweGY5fSwKLQl7MHg4OSwgMHhmZn0sCi0JezB4ODgsIDB4Zjh9LAotCXsweDc2LCAweDAzfSwKLQl7MHg5MiwgMHgwMX0sCi0JezB4OTMsIDB4MTh9LAotCXsweDFjLCAweDBhfSwKLQl7MHgxZCwgMHg0OH0sCi0JezB4YzAsIDB4NTB9LAotCXsweGMxLCAweDNjfSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4YzIsIDB4MGN9LAotCXsweGMzLCAweGY5fSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4ZTcsIDB4MmV9LAotCXsweDMxLCAweGY5fSwKLQl7MHgzNSwgMHgwMn0sCi0JezB4ZDksIDB4MTB9LAotCXsweDI1LCAweDQyfSwKLQl7MHg5NCwgMHgxMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRfb3Y5NjV4W11bMl0gPSB7Ci0JezB4MTIsIDB4ODB9LAkvKiBjb203IC0gU1NDQiByZXNldCAqLwotCXsweDAwLCAweDAwfSwJLyogZ2FpbiAqLwotCXsweDAxLCAweDgwfSwJLyogYmx1ZSAqLwotCXsweDAyLCAweDgwfSwJLyogcmVkICovCi0JezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCi0JezB4MDQsIDB4MDN9LAkvKiBjb20xIC0gZXhwb3N1cmUgbG93IGJpdHMgKi8KLQl7MHgwYiwgMHg1N30sCS8qIHZlciAqLwotCXsweDBlLCAweDYxfSwJLyogY29tNSAqLwotCXsweDBmLCAweDQyfSwJLyogY29tNiAqLwotCXsweDExLCAweDAwfSwJLyogY2xrcmMgKi8KLQl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgLSAxNWZwcyBWR0EgWVVZViAqLwotCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCi0JezB4MTQsIDB4Mjh9LAkvKiBjb205ICovCi0JezB4MTYsIDB4MjR9LAkvKiByZWcxNiAqLwotCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0Ki8KLQl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDgxfSwJLyogdnN0b3AqLwotCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLwotCXsweDI0LCAweDNjfSwJLyogYWV3ICovCi0JezB4MjUsIDB4MzZ9LAkvKiBhZWIgKi8KLQl7MHgyNiwgMHg3MX0sCS8qIHZwdCAqLwotCXsweDI3LCAweDA4fSwJLyogYmJpYXMgKi8KLQl7MHgyOCwgMHgwOH0sCS8qIGdiYmlhcyAqLwotCXsweDI5LCAweDE1fSwJLyogZ3IgY29tICovCi0JezB4MmEsIDB4MDB9LAkvKiBleGhjaCAqLwotCXsweDJiLCAweDAwfSwJLyogZXhoY2wgKi8KLQl7MHgyYywgMHgwOH0sCS8qIHJiaWFzICovCi0JezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCi0JezB4MzMsIDB4MDB9LAkvKiBjaGxmICovCi0JezB4MzQsIDB4M2Z9LAkvKiBhcmVmMSAqLwotCXsweDM1LCAweDAwfSwJLyogYXJlZjIgKi8KLQl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCi0JezB4MzgsIDB4NzJ9LAkvKiBhZGMyICovCi0JezB4MzksIDB4NTd9LAkvKiBhcmVmNCAqLwotCXsweDNhLCAweDgwfSwJLyogdHNsYiAtIHl1eXYgKi8KLQl7MHgzYiwgMHhjNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLwotCXsweDNkLCAweDk5fSwJLyogY29tMTMgKi8KLQl7MHgzZiwgMHhjMX0sCS8qIGVkZ2UgKi8KLQl7MHg0MCwgMHhjMH0sCS8qIGNvbTE1ICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCXsweDQyLCAweGMwfSwJLyogY29tMTcgKi8KLQl7MHg0MywgMHgwYX0sCS8qIHJzdmQgKi8KLQl7MHg0NCwgMHhmMH0sCi0JezB4NDUsIDB4NDZ9LAotCXsweDQ2LCAweDYyfSwKLQl7MHg0NywgMHgyYX0sCi0JezB4NDgsIDB4M2N9LAotCXsweDRhLCAweGZjfSwKLQl7MHg0YiwgMHhmY30sCi0JezB4NGMsIDB4N2Z9LAotCXsweDRkLCAweDdmfSwKLQl7MHg0ZSwgMHg3Zn0sCi0JezB4NGYsIDB4OTh9LAkvKiBtYXRyaXggKi8KLQl7MHg1MCwgMHg5OH0sCi0JezB4NTEsIDB4MDB9LAotCXsweDUyLCAweDI4fSwKLQl7MHg1MywgMHg3MH0sCi0JezB4NTQsIDB4OTh9LAotCXsweDU4LCAweDFhfSwJLyogbWF0cml4IGNvZWYgc2lnbiAqLwotCXsweDU5LCAweDg1fSwJLyogQVdCIGNvbnRyb2wgKi8KLQl7MHg1YSwgMHhhOX0sCi0JezB4NWIsIDB4NjR9LAotCXsweDVjLCAweDg0fSwKLQl7MHg1ZCwgMHg1M30sCi0JezB4NWUsIDB4MGV9LAotCXsweDVmLCAweGYwfSwJLyogQVdCIGJsdWUgbGltaXQgKi8KLQl7MHg2MCwgMHhmMH0sCS8qIEFXQiByZWQgbGltaXQgKi8KLQl7MHg2MSwgMHhmMH0sCS8qIEFXQiBncmVlbiBsaW1pdCAqLwotCXsweDYyLCAweDAwfSwJLyogbGNjMSAqLwotCXsweDYzLCAweDAwfSwJLyogbGNjMiAqLwotCXsweDY0LCAweDAyfSwJLyogbGNjMyAqLwotCXsweDY1LCAweDE2fSwJLyogbGNjNCAqLwotCXsweDY2LCAweDAxfSwJLyogbGNjNSAqLwotCXsweDY5LCAweDAyfSwJLyogaHYgKi8KLQl7MHg2YiwgMHg1YX0sCS8qIGRidmwgKi8KLQl7MHg2YywgMHgwNH0sCi0JezB4NmQsIDB4NTV9LAotCXsweDZlLCAweDAwfSwKLQl7MHg2ZiwgMHg5ZH0sCi0JezB4NzAsIDB4MjF9LAkvKiBkbnN0aCAqLwotCXsweDcxLCAweDc4fSwKLQl7MHg3MiwgMHgwMH0sCS8qIHBvaWR4ICovCi0JezB4NzMsIDB4MDF9LAkvKiBwY2tkdiAqLwotCXsweDc0LCAweDNhfSwJLyogeGluZHggKi8KLQl7MHg3NSwgMHgzNX0sCS8qIHlpbmR4ICovCi0JezB4NzYsIDB4MDF9LAotCXsweDc3LCAweDAyfSwKLQl7MHg3YSwgMHgxMn0sCS8qIGdhbW1hIGN1cnZlICovCi0JezB4N2IsIDB4MDh9LAotCXsweDdjLCAweDE2fSwKLQl7MHg3ZCwgMHgzMH0sCi0JezB4N2UsIDB4NWV9LAotCXsweDdmLCAweDcyfSwKLQl7MHg4MCwgMHg4Mn0sCi0JezB4ODEsIDB4OGV9LAotCXsweDgyLCAweDlhfSwKLQl7MHg4MywgMHhhNH0sCi0JezB4ODQsIDB4YWN9LAotCXsweDg1LCAweGI4fSwKLQl7MHg4NiwgMHhjM30sCi0JezB4ODcsIDB4ZDZ9LAotCXsweDg4LCAweGU2fSwKLQl7MHg4OSwgMHhmMn0sCi0JezB4OGEsIDB4MDN9LAotCXsweDhjLCAweDg5fSwJLyogY29tMTkgKi8KLQl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KLQl7MHg5MCwgMHg3ZH0sCi0JezB4OTEsIDB4N2J9LAotCXsweDlkLCAweDAzfSwJLyogbGNjNiAqLwotCXsweDllLCAweDA0fSwJLyogbGNjNyAqLwotCXsweDlmLCAweDdhfSwKLQl7MHhhMCwgMHg3OX0sCi0JezB4YTEsIDB4NDB9LAkvKiBhZWNobSAqLwotCXsweGE0LCAweDUwfSwJLyogY29tMjEgKi8KLQl7MHhhNSwgMHg2OH0sCS8qIGNvbTI2ICovCi0JezB4YTYsIDB4NGF9LAkvKiBBV0IgZ3JlZW4gKi8KLQl7MHhhOCwgMHhjMX0sCS8qIHJlZmE4ICovCi0JezB4YTksIDB4ZWZ9LAkvKiByZWZhOSAqLwotCXsweGFhLCAweDkyfSwKLQl7MHhhYiwgMHgwNH0sCi0JezB4YWMsIDB4ODB9LAkvKiBibGFjayBsZXZlbCBjb250cm9sICovCi0JezB4YWQsIDB4ODB9LAotCXsweGFlLCAweDgwfSwKLQl7MHhhZiwgMHg4MH0sCi0JezB4YjIsIDB4ZjJ9LAotCXsweGIzLCAweDIwfSwKLQl7MHhiNCwgMHgyMH0sCS8qIGN0cmxiNCAqLwotCXsweGI1LCAweDAwfSwKLQl7MHhiNiwgMHhhZn0sCi0JezB4YmIsIDB4YWV9LAotCXsweGJjLCAweDdmfSwJLyogQURDIGNoYW5uZWwgb2Zmc2V0cyAqLwotCXsweGRiLCAweDdmfSwKLQl7MHhiZSwgMHg3Zn0sCi0JezB4YmYsIDB4N2Z9LAotCXsweGMwLCAweGUyfSwKLQl7MHhjMSwgMHhjMH0sCi0JezB4YzIsIDB4MDF9LAotCXsweGMzLCAweDRlfSwKLQl7MHhjNiwgMHg4NX0sCi0JezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLwotCXsweGM5LCAweGUwfSwKLQl7MHhjYSwgMHhlOH0sCi0JezB4Y2IsIDB4ZjB9LAotCXsweGNjLCAweGQ4fSwKLQl7MHhjZCwgMHhmMX0sCi0JezB4NGYsIDB4OTh9LAkvKiBtYXRyaXggKi8KLQl7MHg1MCwgMHg5OH0sCi0JezB4NTEsIDB4MDB9LAotCXsweDUyLCAweDI4fSwKLQl7MHg1MywgMHg3MH0sCi0JezB4NTQsIDB4OTh9LAotCXsweDU4LCAweDFhfSwKLQl7MHhmZiwgMHg0MX0sCS8qIHJlYWQgNDEsIHdyaXRlIGZmIDAwICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCi0JezB4YzUsIDB4MDN9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLwotCXsweDZhLCAweDAyfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQotCXsweDEyLCAweDYyfSwJLyogY29tNyAtIDMwZnBzIFZHQSBZVVYgKi8KLQl7MHgzNiwgMHhmYX0sCS8qIGFyZWYzICovCi0JezB4NjksIDB4MGF9LAkvKiBodiAqLwotCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KLQl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KLQl7MHgzZSwgMHgwY30sCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCXsweDcyLCAweDAwfSwKLQl7MHg3MywgMHgwMH0sCi0JezB4NzQsIDB4M2F9LAotCXsweDc1LCAweDM1fSwKLQl7MHg3NiwgMHgwMX0sCi0JezB4YzcsIDB4ODB9LAotCXsweDAzLCAweDEyfSwJLyogdnJlZiAqLwotCXsweDE3LCAweDE2fSwJLyogaHN0YXJ0ICovCi0JezB4MTgsIDB4MDJ9LAkvKiBoc3RvcCAqLwotCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KLQl7MHgxYSwgMHgzZH0sCS8qIHZzdG9wICovCi0JezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCi0JezB4YzAsIDB4YWF9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9pbml0X292OTY1eF8yW11bMl0gPSB7Ci0JezB4OTQsIDB4YWF9LAotCXsweGYxLCAweDYwfSwKLQl7MHhlNSwgMHgwNH0sCi0JezB4YzAsIDB4NTB9LAotCXsweGMxLCAweDNjfSwKLQl7MHg4YywgMHgwMH0sCi0JezB4OGQsIDB4MWN9LAotCXsweDM0LCAweDA1fSwKLQotCXsweGMyLCAweDBjfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4ZGEsIDB4MDF9LAotCXsweDUwLCAweDAwfSwKLQl7MHg1MSwgMHhhMH0sCi0JezB4NTIsIDB4M2N9LAotCXsweDUzLCAweDAwfSwKLQl7MHg1NCwgMHgwMH0sCi0JezB4NTUsIDB4MDB9LAotCXsweDU3LCAweDAwfSwKLQl7MHg1YywgMHgwMH0sCi0JezB4NWEsIDB4YTB9LAotCXsweDViLCAweDc4fSwKLQl7MHgzNSwgMHgwMn0sCi0JezB4ZDksIDB4MTB9LAotCXsweDk0LCAweDExfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjk2NXhfMltdWzJdID0gewotCXsweDNiLCAweGM0fSwKLQl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KLQl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KLQl7MHgwMCwgMHgwMH0sCS8qIGdhaW4gKi8KLQl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLwotCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KLQl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KLQl7MHg2YSwgMHgwNX0sCi0JezB4YzUsIDB4MDd9LAotCXsweGEyLCAweDRifSwKLQl7MHhhMywgMHgzZX0sCi0JezB4MmQsIDB4MDB9LAotCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KLQl7MHg0MiwgMHhjMH0sCS8qIGNvbTE3ICovCi0JezB4MmQsIDB4MDB9LAotCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KLQl7MHg0MiwgMHhjMX0sCS8qIGNvbTE3ICovCi0vKiBzaGFycG5lc3MgKi8KLQl7MHgzZiwgMHgwMX0sCi0JezB4ZmYsIDB4NDJ9LAkvKiByZWFkIDQyLCB3cml0ZSBmZiAwMCAqLwotCXsweDQyLCAweGMxfSwJLyogY29tMTcgKi8KLS8qIHNhdHVyYXRpb24gKi8KLQl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLwotCXsweDUwLCAweDk4fSwKLQl7MHg1MSwgMHgwMH0sCi0JezB4NTIsIDB4Mjh9LAotCXsweDUzLCAweDcwfSwKLQl7MHg1NCwgMHg5OH0sCi0JezB4NTgsIDB4MWF9LAotCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0vKiBjb250cmFzdCAqLwotCXsweDU2LCAweDQwfSwKLS8qIGJyaWdodG5lc3MgKi8KLQl7MHg1NSwgMHg4Zn0sCi0vKiBleHBvICovCi0JezB4MTAsIDB4MjV9LAkvKiBhZWNoIC0gZXhwb3N1cmUgaGlnaCBiaXRzICovCi0JezB4ZmYsIDB4MTN9LAkvKiByZWFkIDEzLCB3cml0ZSBmZiAwMCAqLwotCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3ZnYVtdWzJdID0gewkvKiBzYW1lIGZvciBxdmdhICovCi0JezB4MTIsIDB4NjJ9LAkvKiBjb203IC0gMzBmcHMgVkdBIFlVViAqLwotCXsweDM2LCAweGZhfSwJLyogYXJlZjMgKi8KLQl7MHg2OSwgMHgwYX0sCS8qIGh2ICovCi0JezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLwotCXsweDE0LCAweDI4fSwJLyogY29tOSAqLwotCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0JezB4NzIsIDB4MDB9LAotCXsweDczLCAweDAwfSwKLQl7MHg3NCwgMHgzYX0sCi0JezB4NzUsIDB4MzV9LAotCXsweDc2LCAweDAxfSwKLQl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCi0JezB4MDMsIDB4MTJ9LAkvKiB2cmVmICovCi0JezB4MTcsIDB4MTZ9LAkvKiBoc3RhcnQgKi8KLQl7MHgxOCwgMHgwMn0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDNkfSwJLyogdnN0b3AgKi8KLQl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KLQl7MHhjMCwgMHhhYX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N2Z2FbXVsyXSA9IHsKLQl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgLSBZVVlWIC0gVkdBIDE1IGZ1bGwgcmVzb2x1dGlvbiAqLwotCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KLQl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCi0JezB4OGMsIDB4MGR9LAkvKiBjb20yMiAqLwotCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0JezB4NzIsIDB4MDB9LAotCXsweDczLCAweDAxfSwKLQl7MHg3NCwgMHgzYX0sCi0JezB4NzUsIDB4MzV9LAotCXsweDc2LCAweDAxfSwKLQl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCi0JezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCi0JezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KLQl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KLQl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KLQl7MHhjMCwgMHhlMn0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3hnYVtdWzJdID0gewotCXsweDEyLCAweDAyfSwJLyogY29tNyAqLwotCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KLQl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCi0JezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLwotCXsweDE0LCAweDI4fSwJLyogY29tOSAqLwotCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0JezB4NzIsIDB4MDB9LAotCXsweDczLCAweDAxfSwKLQl7MHg3NCwgMHgzYX0sCi0JezB4NzUsIDB4MzV9LAotCXsweDc2LCAweDAxfSwKLQl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCi0JezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCi0JezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KLQl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KLQl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KLQl7MHhjMCwgMHhlMn0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N4Z2FbXVsyXSA9IHsKLQl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgKi8KLQl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCi0JezB4NjksIDB4MDJ9LAkvKiBodiAqLwotCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KLQl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KLQl7MHgzZSwgMHgwY30sCS8qIGNvbTE0ICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCXsweDcyLCAweDAwfSwKLQl7MHg3MywgMHgwMX0sCi0JezB4NzQsIDB4M2F9LAotCXsweDc1LCAweDM1fSwKLQl7MHg3NiwgMHgwMX0sCi0JezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLwotCXsweDAzLCAweDFifSwJLyogdnJlZiAqLwotCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0ICovCi0JezB4MTgsIDB4MDJ9LAkvKiBoc3RvcCAqLwotCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KLQl7MHgxYSwgMHg4MX0sCS8qIHZzdG9wICovCi0JezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCi0JezB4YzAsIDB4ZTJ9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF9vdjk2NXhfcXZnYVtdWzJdID0gewotCXsweDk0LCAweGFhfSwKLQl7MHhmMSwgMHg2MH0sCi0JezB4ZTUsIDB4MDR9LAotCXsweGMwLCAweDUwfSwKLQl7MHhjMSwgMHgzY30sCi0JezB4OGMsIDB4MDB9LAotCXsweDhkLCAweDFjfSwKLQl7MHgzNCwgMHgwNX0sCi0KLQl7MHhjMiwgMHg0Y30sCi0JezB4YzMsIDB4Zjl9LAotCXsweGRhLCAweDAwfSwKLQl7MHg1MCwgMHgwMH0sCi0JezB4NTEsIDB4YTB9LAotCXsweDUyLCAweDc4fSwKLQl7MHg1MywgMHgwMH0sCi0JezB4NTQsIDB4MDB9LAotCXsweDU1LCAweDAwfSwKLQl7MHg1NywgMHgwMH0sCi0JezB4NWMsIDB4MDB9LAotCXsweDVhLCAweDUwfSwKLQl7MHg1YiwgMHgzY30sCi0JezB4MzUsIDB4MDJ9LAotCXsweGQ5LCAweDEwfSwKLQl7MHg5NCwgMHgxMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X292OTY1eF92Z2FbXVsyXSA9IHsKLQl7MHg5NCwgMHhhYX0sCi0JezB4ZjEsIDB4NjB9LAotCXsweGU1LCAweDA0fSwKLQl7MHhjMCwgMHg1MH0sCi0JezB4YzEsIDB4M2N9LAotCXsweDhjLCAweDAwfSwKLQl7MHg4ZCwgMHgxY30sCi0JezB4MzQsIDB4MDV9LAotCXsweGMyLCAweDBjfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4ZGEsIDB4MDF9LAotCXsweDUwLCAweDAwfSwKLQl7MHg1MSwgMHhhMH0sCi0JezB4NTIsIDB4M2N9LAotCXsweDUzLCAweDAwfSwKLQl7MHg1NCwgMHgwMH0sCi0JezB4NTUsIDB4MDB9LAotCXsweDU3LCAweDAwfSwKLQl7MHg1YywgMHgwMH0sCi0JezB4NWEsIDB4YTB9LAotCXsweDViLCAweDc4fSwKLQl7MHgzNSwgMHgwMn0sCi0JezB4ZDksIDB4MTB9LAotCXsweDk0LCAweDExfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3N2Z2FbXVsyXSA9IHsKLQl7MHg5NCwgMHhhYX0sCi0JezB4ZjEsIDB4NjB9LAotCXsweGU1LCAweDA0fSwKLQl7MHhjMCwgMHhhMH0sCi0JezB4YzEsIDB4ODB9LAotCXsweDhjLCAweDAwfSwKLQl7MHg4ZCwgMHgxY30sCi0JezB4MzQsIDB4MDV9LAotCXsweGMyLCAweDRjfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4NTAsIDB4MDB9LAotCXsweDUxLCAweDQwfSwKLQl7MHg1MiwgMHgwMH0sCi0JezB4NTMsIDB4MDB9LAotCXsweDU0LCAweDAwfSwKLQl7MHg1NSwgMHg4OH0sCi0JezB4NTcsIDB4MDB9LAotCXsweDVjLCAweDAwfSwKLQl7MHg1YSwgMHhjOH0sCi0JezB4NWIsIDB4OTZ9LAotCXsweDM1LCAweDAyfSwKLQl7MHhkOSwgMHgxMH0sCi0JezB4ZGEsIDB4MDB9LAotCXsweDk0LCAweDExfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3hnYVtdWzJdID0gewotCXsweDk0LCAweGFhfSwKLQl7MHhmMSwgMHg2MH0sCi0JezB4ZTUsIDB4MDR9LAotCXsweGMwLCAweGEwfSwKLQl7MHhjMSwgMHg4MH0sCi0JezB4OGMsIDB4MDB9LAotCXsweDhkLCAweDFjfSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4YzIsIDB4NGN9LAotCXsweGMzLCAweGY5fSwKLQl7MHg1MCwgMHgwMH0sCi0JezB4NTEsIDB4NDB9LAotCXsweDUyLCAweDAwfSwKLQl7MHg1MywgMHgwMH0sCi0JezB4NTQsIDB4MDB9LAotCXsweDU1LCAweDg4fSwKLQl7MHg1NywgMHgwMH0sCi0JezB4NWMsIDB4MDF9LAotCXsweDVhLCAweDAwfSwKLQl7MHg1YiwgMHhjMH0sCi0JezB4MzUsIDB4MDJ9LAotCXsweGQ5LCAweDEwfSwKLQl7MHhkYSwgMHgwMX0sCi0JezB4OTQsIDB4MTF9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF9vdjk2NXhfc3hnYVtdWzJdID0gewotCXsweDk0LCAweGFhfSwKLQl7MHhmMSwgMHg2MH0sCi0JezB4ZTUsIDB4MDR9LAotCXsweGMwLCAweGEwfSwKLQl7MHhjMSwgMHg4MH0sCi0JezB4OGMsIDB4MDB9LAotCXsweDhkLCAweDFjfSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4YzIsIDB4MGN9LAotCXsweGMzLCAweGY5fSwKLQl7MHhkYSwgMHgwMH0sCi0JezB4MzUsIDB4MDJ9LAotCXsweGQ5LCAweDEwfSwKLQl7MHg5NCwgMHgxMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8yX3F2Z2FbXVsyXSA9IHsKLQl7MHgzYiwgMHhlNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLwotCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLwotCXsweDEzLCAweGUwfSwJLyogY29tOCAqLwotCXsweDAwLCAweDAwfSwKLQl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLwotCXsweDExLCAweDAxfSwJLyogY2xrcmMgKi8KLQl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KLQl7MHg2YSwgMHgwMn0sCS8qIDUwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0JezB4YzUsIDB4MDN9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLwotCXsweGEyLCAweDk2fSwJLyogYmQ1MCAqLwotCXsweGEzLCAweDdkfSwJLyogYmQ2MCAqLwotCi0JezB4ZmYsIDB4MTN9LAkvKiByZWFkIDEzLCB3cml0ZSBmZiAwMCAqLwotCXsweDEzLCAweGU3fSwKLQl7MHgzYSwgMHg4MH0sCS8qIHRzbGIgLSB5dXl2ICovCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8yX3ZnYVtdWzJdID0gewotCXsweDNiLCAweGM0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCi0JezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCi0JezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCi0JezB4MDAsIDB4MDB9LAotCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCi0JezB4MTEsIDB4MDN9LAkvKiBjbGtyYyAqLwotCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLwotCXsweDZhLCAweDA1fSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQl7MHhjNSwgMHgwN30sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0JezB4YTIsIDB4NGJ9LAkvKiBiZDUwICovCi0JezB4YTMsIDB4M2V9LAkvKiBiZDYwICovCi0KLQl7MHgyZCwgMHgwMH0sCS8qIGFkdmZsICovCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N2Z2FbXVsyXSA9IHsJLyogc2FtZSBmb3IgeGdhICovCi0JezB4M2IsIDB4YzR9LAkvKiBjb20xMSAtIG5pZ2h0IG1vZGUgMS80IGZyYW1lIHJhdGUgKi8KLQl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KLQl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KLQl7MHgwMCwgMHgwMH0sCi0JezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KLQl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCi0JezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCi0JezB4NmEsIDB4MGN9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLwotCXsweGM1LCAweDBmfSwJLyogNjAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQl7MHhhMiwgMHg0ZX0sCS8qIGJkNTAgKi8KLQl7MHhhMywgMHg0MX0sCS8qIGJkNjAgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3hnYVtdWzJdID0gewotCXsweDEzLCAweGUwfSwJLyogY29tOCAqLwotCXsweDAwLCAweDAwfSwKLQl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLwotCXsweDNiLCAweGM0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCi0JezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCi0JezB4MTEsIDB4MDF9LAkvKiBjbGtyYyAqLwotCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLwotCXsweDZhLCAweDBjfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQl7MHhjNSwgMHgwZn0sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0JezB4YTIsIDB4NGV9LAkvKiBiZDUwICovCi0JezB4YTMsIDB4NDF9LAkvKiBiZDYwICovCi19OwotCiBzdGF0aWMgdm9pZCBvdjUzNF9yZWdfd3JpdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCB1OCB2YWwpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKQEAgLTEzNjAsMTQgKzY3MSwxNCBAQAogCVBERUJVRyhEX1BST0JFLCAiZnJhbWVfcmF0ZTogJWQiLCByLT5mcHMpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzXzc3KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg5Qiwgc2QtPmJyaWdodG5lc3MpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRjb250cmFzdF83NyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCkBAIC0xNDAxLDcgKzcxMiw3IEBACiAJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDAwLCB2YWwpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRleHBvc3VyZV83NyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXU4IHZhbDsKQEAgLTE0MzIsNyArNzQzLDcgQEAKIAlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MDEsIHNkLT5odWUpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRhdXRvZ2Fpbl83NyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCkBAIC0xNDU3LDcgKzc2OCw3IEBACiAJCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg2MywgMHhhYSk7CS8qIEFXQiBvZmYgKi8KIH0KIAotc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzXzc3KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXU4IHZhbDsKQEAgLTE0OTEsMTMyICs4MDIsNiBAQAogCQkJCXNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDBjKSAmIDB4N2YpOwogfQogCi0vKiBvdjk2NXggc3BlY2lmaWMgY29udHJvbHMgKi8KLXN0YXRpYyB2b2lkIHNldGJyaWdodG5lc3NfOTYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQl1OCB2YWw7Ci0KLQl2YWwgPSBzZC0+YnJpZ2h0bmVzczsKLQlpZiAodmFsIDwgOCkKLQkJdmFsID0gMTUgLSB2YWw7CQkvKiBmIC4uIDggKi8KLQllbHNlCi0JCXZhbCA9IHZhbCAtIDg7CQkvKiAwIC4uIDcgKi8KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NTUsCS8qIGJydG4gLSBicmlnaHRuZXNzIGFkanVzdG1lbnQgKi8KLQkJCTB4MGYgfCAodmFsIDw8IDQpKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0Y29udHJhc3RfOTYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg1NiwJLyogY25zdDEgLSBjb250cmFzdCAxIGN0cmwgY29lZmYgKi8KLQkJCXNkLT5jb250cmFzdCA8PCA0KTsKLX0KLQotc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmVfOTYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQl1OCB2YWw7Ci0Jc3RhdGljIGNvbnN0IHU4IGV4cG9bNF0gPSB7MHgwMCwgMHgyNSwgMHgzOCwgMHg1ZX07Ci0KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MTAsCQkJLyogYWVjWzk6Ml0gKi8KLQkJCWV4cG9bc2QtPmV4cG9zdXJlXSk7Ci0JdmFsID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MTMpOwkJLyogY29tOCAqLwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDEzLCB2YWwpOwotCXZhbCA9IHNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweGExKTsJCS8qIGFlY2ggKi8KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhhMSwgdmFsICYgMHhlMCk7CS8qIGFlY1sxNToxMF0gPSAwICovCi19Ci0KLXN0YXRpYyB2b2lkIHNldHNoYXJwbmVzc185NihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXM4IHZhbDsKLQotCXZhbCA9IHNkLT5zaGFycG5lc3M7Ci0JaWYgKHZhbCA8IDApIHsJCQkJLyogYXV0byAqLwotCQl2YWwgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHg0Mik7CS8qIGNvbTE3ICovCi0JCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0JCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg0MiwgdmFsIHwgMHg0MCk7Ci0JCQkJLyogRWRnZSBlbmhhbmNlbWVudCBzdHJlbmd0aCBhdXRvIGFkanVzdCAqLwotCQlyZXR1cm47Ci0JfQotCWlmICh2YWwgIT0gMCkKLQkJdmFsID0gMSA8PCAodmFsIC0gMSk7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDNmLAkvKiBlZGdlIC0gZWRnZSBlbmhhbmNlLiBmYWN0b3IgKi8KLQkJCXZhbCk7Ci0JdmFsID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4NDIpOwkJLyogY29tMTcgKi8KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg0MiwgdmFsICYgMHhiZik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldGF1dG9nYWluXzk2KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JdTggdmFsOwotCi0vKmZpeG1lOiBzaG91bGQgYWRqdXN0IGFnYy9hd2IvYWVjIGJ5IGRpZmZlcmVudCBjb250cm9scyAqLwotCXZhbCA9IHNkLT5hdXRvZ2FpbjsKLQl2YWwgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHgxMyk7CQkvKiBjb204ICovCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKLQlpZiAoc2QtPmF1dG9nYWluKQotCQl2YWwgfD0gMHgwNTsJCS8qIGFnYyAmIGFlYyAqLwotCWVsc2UKLQkJdmFsICY9IDB4ZmE7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDEzLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXU4IHZhbDEsIHZhbDIsIHZhbDM7Ci0Jc3RhdGljIGNvbnN0IHU4IG1hdHJpeFs1XVsyXSA9IHsKLQkJezB4MTQsIDB4Mzh9LAotCQl7MHgxZSwgMHg1NH0sCi0JCXsweDI4LCAweDcwfSwKLQkJezB4MzIsIDB4OGN9LAotCQl7MHg0OCwgMHg5MH0KLQl9OwotCi0JdmFsMSA9IG1hdHJpeFtzZC0+c2F0dXJdWzBdOwotCXZhbDIgPSBtYXRyaXhbc2QtPnNhdHVyXVsxXTsKLQl2YWwzID0gdmFsMSArIHZhbDI7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDRmLCB2YWwzKTsJLyogbWF0cml4IGNvZWZmICovCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDUwLCB2YWwzKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NTEsIDB4MDApOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg1MiwgdmFsMSk7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDUzLCB2YWwyKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NTQsIHZhbDMpOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg1OCwgMHgxYSk7CS8qIG10eHMgLSBjb2VmZiBzaWducyAqLwotCXZhbDEgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHg0MSk7CS8qIGNvbTE2ICovCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NDEsIHZhbDEpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JdTggdmFsOwotCi0JdmFsID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MTMpOwkJLyogY29tOCAqLwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0JaWYgKHNkLT5saWdodGZyZXEgPT0gMCkgewotCQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MTMsIHZhbCAmIDB4ZGYpOwotCQlyZXR1cm47Ci0JfQotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgxMywgdmFsIHwgMHgyMCk7Ci0KLQl2YWwgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHg0Mik7CQkvKiBjb20xNyAqLwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0JaWYgKHNkLT5saWdodGZyZXEgPT0gMSkKLQkJdmFsIHw9IDB4MDE7Ci0JZWxzZQotCQl2YWwgJj0gMHhmZTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NDIsIHZhbCk7Ci19Ci0KIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC0xNjI0LDc3ICs4MDksNTAgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtOwogCi0Jc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbzsKLQogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKIAotCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpIHsKLQkJY2FtLT5jYW1fbW9kZSA9IG92NzcyeF9tb2RlOwotCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3Y3NzJ4X21vZGUpOworCWNhbS0+Y2FtX21vZGUgPSBvdjc3MnhfbW9kZTsKKwljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3Y3NzJ4X21vZGUpOworCWNhbS0+bW9kZV9mcmFtZXJhdGVzID0gb3Y3NzJ4X2ZyYW1lcmF0ZXM7CiAKLQkJY2FtLT5idWxrID0gMTsKLQkJY2FtLT5idWxrX3NpemUgPSAxNjM4NDsKLQkJY2FtLT5idWxrX251cmJzID0gMjsKLQl9IGVsc2UgewkJLyogb3Y5NjV4ICovCi0JCWNhbS0+Y2FtX21vZGUgPSBvdjk2NXhfbW9kZTsKLQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG92OTY1eF9tb2RlKTsKLQl9CisJY2FtLT5idWxrID0gMTsKKwljYW0tPmJ1bGtfc2l6ZSA9IDE2Mzg0OworCWNhbS0+YnVsa19udXJicyA9IDI7CiAKIAlzZC0+ZnJhbWVfcmF0ZSA9IDMwOwogCi0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzcyWCkgewotCQlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfNzdfREVGOwotCQlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF83N19ERUY7Ci0JCXNkLT5nYWluID0gR0FJTl9ERUY7Ci0JCXNkLT5leHBvc3VyZSA9IEVYUE9fNzdfREVGOwotCQlzZC0+cmVkYmxjID0gUkVEX0JBTEFOQ0VfREVGOwotCQlzZC0+Ymx1ZWJsYyA9IEJMVUVfQkFMQU5DRV9ERUY7Ci0JCXNkLT5odWUgPSBIVUVfREVGOwotI2lmIEFVVE9HQUlOXzc3X0RFRiAhPSAwCi0JCXNkLT5hdXRvZ2FpbiA9IEFVVE9HQUlOXzc3X0RFRjsKKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKKwlzZC0+Z2FpbiA9IEdBSU5fREVGOworCXNkLT5leHBvc3VyZSA9IEVYUE9fREVGOworCXNkLT5yZWRibGMgPSBSRURfQkFMQU5DRV9ERUY7CisJc2QtPmJsdWVibGMgPSBCTFVFX0JBTEFOQ0VfREVGOworCXNkLT5odWUgPSBIVUVfREVGOworI2lmIEFVVE9HQUlOX0RFRiAhPSAwCisJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOwogI2Vsc2UKLQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgfD0gKDEgPDwgQVdCXzc3X0lEWCk7CisJZ3NwY2FfZGV2LT5jdHJsX2luYWMgfD0gKDEgPDwgQVdCX0lEWCk7CiAjZW5kaWYKICNpZiBBV0JfREVGICE9IDAKLQkJc2QtPmF3YiA9IEFXQl9ERUYKKwlzZC0+YXdiID0gQVdCX0RFRgogI2VuZGlmCi0jaWYgU0hBUlBORVNTXzc3X0RFRiAhPSAwCi0JCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfNzdfREVGOworI2lmIFNIQVJQTkVTU19ERUYgIT0gMAorCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOwogI2VuZGlmCiAjaWYgSEZMSVBfREVGICE9IDAKLQkJc2QtPmhmbGlwID0gSEZMSVBfREVGOworCXNkLT5oZmxpcCA9IEhGTElQX0RFRjsKICNlbmRpZgogI2lmIFZGTElQX0RFRiAhPSAwCi0JCXNkLT52ZmxpcCA9IFZGTElQX0RFRjsKKwlzZC0+dmZsaXAgPSBWRkxJUF9ERUY7CiAjZW5kaWYKLQl9IGVsc2UgewotCQlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfOTZfREVGOwotCQlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF85Nl9ERUY7Ci0jaWYgQVVUT0dBSU5fOTZfREVGICE9IDAKLQkJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fOTZfREVGOwotCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyB8PSAoMSA8PCBFWFBPXzk2X0lEWCk7Ci0jZW5kaWYKLSNpZiBFWFBPXzk2X0RFRiAhPSAwCi0JCXNkLT5leHBvc3VyZSA9IEVYUE9fOTZfREVGOwotI2VuZGlmCi0jaWYgU0hBUlBORVNTXzk2X0RFRiAhPSAwCi0JCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfOTZfREVGOwotI2VuZGlmCi0JCXNkLT5zYXR1ciA9IFNBVFVSX0RFRjsKLQkJc2QtPmxpZ2h0ZnJlcSA9IEZSRVFfREVGOwotCX0KKwogCXJldHVybiAwOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXUxNiBzZW5zb3JfaWQ7Ci0Jc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9hZGRyWzJdID0gewotCQkweDQyLAkJCS8qIDAgU0VOU09SX09WNzcyWCAqLwotCQkweDYwLAkJCS8qIDEgU0VOU09SX09WOTY1WCAqLwotCX07CiAKIAkvKiByZXNldCBicmlkZ2UgKi8KIAlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGU3LCAweDNhKTsKQEAgLTE3MDIsOCArODYwLDcgQEAKIAltc2xlZXAoMTAwKTsKIAogCS8qIGluaXRpYWxpemUgdGhlIHNlbnNvciBhZGRyZXNzICovCi0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX0FERFJFU1MsCi0JCQkJc2Vuc29yX2FkZHJbc2QtPnNlbnNvcl0pOworCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19BRERSRVNTLCAweDQyKTsKIAogCS8qIHJlc2V0IHNlbnNvciAqLwogCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgxMiwgMHg4MCk7CkBAIC0xNzE3LDY0ICs4NzQsNDYgQEAKIAlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBJRDogJTA0eCIsIHNlbnNvcl9pZCk7CiAKIAkvKiBpbml0aWFsaXplICovCi0Jc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfT1Y3NzJYOgotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0X292NzcyeCwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292NzcyeCkpOwotCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0X292NzcyeCwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9pbml0X292NzcyeCkpOwotCQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDA5KTsKLQkJb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOwotCQlzZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotLyoJY2FzZSBTRU5TT1JfT1Y5NjVYOiAqLwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0X292OTY1eCwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292OTY1eCkpOwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdF9vdjk2NXgsCi0JCQkJQVJSQVlfU0laRShzZW5zb3JfaW5pdF9vdjk2NXgpKTsKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdF9vdjk2NXhfMiwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292OTY1eF8yKSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0X292OTY1eF8yLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXRfb3Y5NjV4XzIpKTsKLQkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci0JCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDEpOwotCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7Ci0JCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOwotCX0KKwlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0LAorCQkJQVJSQVlfU0laRShicmlkZ2VfaW5pdCkpOworCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKKwlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdCwKKwkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXQpKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDA5KTsKKwlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7CisJc2V0X2ZyYW1lX3JhdGUoZ3NwY2FfZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNkX3N0YXJ0X292NzcyeChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgbW9kZTsKIAogCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKIAlpZiAobW9kZSAhPSAwKSB7CS8qIDMyMHgyNDAgKi8KLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3F2Z2EsCi0JCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3F2Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292NzcyeF9xdmdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292NzcyeF9xdmdhKSk7CisJCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X3F2Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfcXZnYSkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfcXZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9xdmdhKSk7CiAJfSBlbHNlIHsJCS8qIDY0MHg0ODAgKi8KLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3ZnYSwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9vdjc3MnhfdmdhKSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjc3MnhfdmdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292NzcyeF92Z2EpKTsKKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfdmdhLAorCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X3ZnYSkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfdmdhLAorCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X3ZnYSkpOwogCX0KIAlzZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOwogCi0Jc2V0YXV0b2dhaW5fNzcoZ3NwY2FfZGV2KTsKKwlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwogCXNldGF3Yihnc3BjYV9kZXYpOwogCXNldGdhaW4oZ3NwY2FfZGV2KTsKIAlzZXRyZWRibGMoZ3NwY2FfZGV2KTsKIAlzZXRibHVlYmxjKGdzcGNhX2Rldik7CiAJc2V0aHVlKGdzcGNhX2Rldik7Ci0Jc2V0ZXhwb3N1cmVfNzcoZ3NwY2FfZGV2KTsKLQlzZXRicmlnaHRuZXNzXzc3KGdzcGNhX2Rldik7Ci0Jc2V0Y29udHJhc3RfNzcoZ3NwY2FfZGV2KTsKLQlzZXRzaGFycG5lc3NfNzcoZ3NwY2FfZGV2KTsKKwlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOwogCXNldHZmbGlwKGdzcGNhX2Rldik7CiAJc2V0aGZsaXAoZ3NwY2FfZGV2KTsKIApAQCAtMTc4Myw4MSArOTIyLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2Rfc3RhcnRfb3Y5NjV4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlpbnQgbW9kZTsKLQotCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKLQlzd2l0Y2ggKG1vZGUpIHsKLQlkZWZhdWx0OgotLyoJY2FzZSA0OgkJCSAqIDMyMHgyNDAgKi8KLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8xX3ZnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXhfMV92Z2EpKTsKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3F2Z2EsCi0JCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfb3Y5NjV4X3F2Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3F2Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfcXZnYSkpOwotCQlicmVhazsKLQljYXNlIDM6CQkJLyogNjQweDQ4MCAqLwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzFfdmdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8xX3ZnYSkpOwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9vdjk2NXhfdmdhLAotCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X292OTY1eF92Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3ZnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXhfMl92Z2EpKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgkJCS8qIDgwMHg2MDAgKi8KLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N2Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzFfc3ZnYSkpOwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9vdjk2NXhfc3ZnYSwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9vdjk2NXhfc3ZnYSkpOwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3ZnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXhfMl9zdmdhKSk7Ci0JCWJyZWFrOwotCWNhc2UgMToJCQkvKiAxMDI0eDc2OCAqLwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzFfeGdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8xX3hnYSkpOwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9vdjk2NXhfeGdhLAotCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X292OTY1eF94Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N2Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3ZnYSkpOwotCQlicmVhazsKLQljYXNlIDA6CQkJLyogMTI4MHgxMDI0ICovCi0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjk2NXhfMV9zeGdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N4Z2EpKTsKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3N4Z2EsCi0JCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfb3Y5NjV4X3N4Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N4Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3hnYSkpOwotCQlicmVhazsKLQl9Ci0Jc2V0ZnJlcShnc3BjYV9kZXYpOwotCXNldGF1dG9nYWluXzk2KGdzcGNhX2Rldik7Ci0Jc2V0YnJpZ2h0bmVzc185Nihnc3BjYV9kZXYpOwotCXNldGNvbnRyYXN0Xzk2KGdzcGNhX2Rldik7Ci0Jc2V0ZXhwb3N1cmVfOTYoZ3NwY2FfZGV2KTsKLQlzZXRzaGFycG5lc3NfOTYoZ3NwY2FfZGV2KTsKLQlzZXRzYXR1cihnc3BjYV9kZXYpOwotCi0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci0Jb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzZF9zdG9wTl9vdjc3Mngoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDkpOwogCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAwKTsKIH0KIAotc3RhdGljIHZvaWQgc2Rfc3RvcE5fb3Y5NjV4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDAxKTsKLQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci19Ci0KIC8qIFZhbHVlcyBmb3IgYm1IZWFkZXJJbmZvIChWaWRlbyBhbmQgU3RpbGwgSW1hZ2UgUGF5bG9hZCBIZWFkZXJzLCAyLjQuMy4zKSAqLwogI2RlZmluZSBVVkNfU1RSRUFNX0VPSAkoMSA8PCA3KQogI2RlZmluZSBVVkNfU1RSRUFNX0VSUgkoMSA8PCA2KQpAQCAtMTg3NSwxMSArOTQ1LDkgQEAKIAlfX3UzMiB0aGlzX3B0czsKIAl1MTYgdGhpc19maWQ7CiAJaW50IHJlbWFpbmluZ19sZW4gPSBsZW47Ci0JaW50IHBheWxvYWRfbGVuOwogCi0JcGF5bG9hZF9sZW4gPSBnc3BjYV9kZXYtPmNhbS5idWxrID8gMjA0OCA6IDIwNDA7CiAJZG8gewotCQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgcGF5bG9hZF9sZW4pOworCQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgMjA0OCk7CiAKIAkJLyogUGF5bG9hZHMgYXJlIHByZWZpeGVkIHdpdGggYSBVVkMtc3R5bGUgaGVhZGVyLiAgV2UKIAkJICAgY29uc2lkZXIgYSBmcmFtZSB0byBzdGFydCB3aGVuIHRoZSBGSUQgdG9nZ2xlcywgb3IgdGhlIFBUUwpAQCAtMTkxOCw3ICs5ODYsMTcgQEAKIAkJCQkJZGF0YSArIDEyLCBsZW4gLSAxMik7CiAJCS8qIElmIHRoaXMgcGFja2V0IGlzIG1hcmtlZCBhcyBFT0YsIGVuZCB0aGUgZnJhbWUgKi8KIAkJfSBlbHNlIGlmIChkYXRhWzFdICYgVVZDX1NUUkVBTV9FT0YpIHsKKwkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CisKIAkJCXNkLT5sYXN0X3B0cyA9IDA7CisJCQlmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKGdzcGNhX2Rldik7CisJCQlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJCQlnb3RvIGRpc2NhcmQ7CisJCQlpZiAoZnJhbWUtPmRhdGFfZW5kIC0gZnJhbWUtPmRhdGEgKyAobGVuIC0gMTIpICE9CisJCQkgICAgZ3NwY2FfZGV2LT53aWR0aCAqIGdzcGNhX2Rldi0+aGVpZ2h0ICogMikgeworCQkJCVBERUJVRyhEX1BBQ0ssICJ3cm9uZyBzaXplZCBmcmFtZSIpOworCQkJCWdvdG8gZGlzY2FyZDsKKwkJCX0KIAkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAogCQkJCQlkYXRhICsgMTIsIGxlbiAtIDEyKTsKIAkJfSBlbHNlIHsKQEAgLTE5NjUsMTIgKzEwNDMsOCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNkLT5leHBvc3VyZSA9IHZhbDsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKLQkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzcyWCkKLQkJCXNldGV4cG9zdXJlXzc3KGdzcGNhX2Rldik7Ci0JCWVsc2UKLQkJCXNldGV4cG9zdXJlXzk2KGdzcGNhX2Rldik7Ci0JfQorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk4NywxMiArMTA2MSw4IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJc2QtPmJyaWdodG5lc3MgPSB2YWw7Ci0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpCi0JCQlzZXRicmlnaHRuZXNzXzc3KGdzcGNhX2Rldik7Ci0JCWVsc2UKLQkJCXNldGJyaWdodG5lc3NfOTYoZ3NwY2FfZGV2KTsKLQl9CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwMDksMTIgKzEwNzksOCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNkLT5jb250cmFzdCA9IHZhbDsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKLQkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzcyWCkKLQkJCXNldGNvbnRyYXN0Xzc3KGdzcGNhX2Rldik7Ci0JCWVsc2UKLQkJCXNldGNvbnRyYXN0Xzk2KGdzcGNhX2Rldik7Ci0JfQorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjAyNiw0MSArMTA5Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2Rfc2V0c2F0dXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0Jc2QtPnNhdHVyID0gdmFsOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJc2V0c2F0dXIoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZF9nZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0JKnZhbCA9IHNkLT5zYXR1cjsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlzZC0+bGlnaHRmcmVxID0gdmFsOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJc2V0ZnJlcShnc3BjYV9kZXYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCSp2YWwgPSBzZC0+bGlnaHRmcmVxOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHNkX3NldHJlZGJsYyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0yMTIyLDIyICsxMTUzLDE0IEBACiAJc2QtPmF1dG9nYWluID0gdmFsOwogCiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpIHsKIAotCQkJLyogdGhlIGF1dG8gd2hpdGUgYmFsYW5jZSBjb250cm9sIHdvcmtzIG9ubHkKLQkJCSAqIHdoZW4gYXV0byBnYWluIGlzIHNldCAqLwotCQkJaWYgKHZhbCkKLQkJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyAmPSB+KDEgPDwgQVdCXzc3X0lEWCk7Ci0JCQllbHNlCi0JCQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgfD0gKDEgPDwgQVdCXzc3X0lEWCk7Ci0JCQlzZXRhdXRvZ2Fpbl83Nyhnc3BjYV9kZXYpOwotCQl9IGVsc2UgewotCQkJaWYgKHZhbCkKLQkJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyB8PSAoMSA8PCBFWFBPXzk2X0lEWCk7Ci0JCQllbHNlCi0JCQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgJj0gfigxIDw8IEVYUE9fOTZfSURYKTsKLQkJCXNldGF1dG9nYWluXzk2KGdzcGNhX2Rldik7Ci0JCX0KKwkJLyogdGhlIGF1dG8gd2hpdGUgYmFsYW5jZSBjb250cm9sIHdvcmtzIG9ubHkKKwkJICogd2hlbiBhdXRvIGdhaW4gaXMgc2V0ICovCisJCWlmICh2YWwpCisJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyAmPSB+KDEgPDwgQVdCX0lEWCk7CisJCWVsc2UKKwkJCWdzcGNhX2Rldi0+Y3RybF9pbmFjIHw9ICgxIDw8IEFXQl9JRFgpOworCQlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIxNzMsMTIgKzExOTYsOCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNkLT5zaGFycG5lc3MgPSB2YWw7Ci0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpCi0JCQlzZXRzaGFycG5lc3NfNzcoZ3NwY2FfZGV2KTsKLQkJZWxzZQotCQkJc2V0c2hhcnBuZXNzXzk2KGdzcGNhX2Rldik7Ci0JfQorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyNTcsNyArMTI3Niw3IEBACiAKIAkvKiBTZXQgcmVxdWVzdGVkIGZyYW1lcmF0ZSAqLwogCXNkLT5mcmFtZV9yYXRlID0gdHBmLT5kZW5vbWluYXRvciAvIHRwZi0+bnVtZXJhdG9yOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZyAmJiBzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpCisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOwogCiAJLyogUmV0dXJuIHRoZSBhY3R1YWwgZnJhbWVyYXRlICovCkBAIC0yMjY3LDU3ICsxMjg2LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSkKLXsKLQlzd2l0Y2ggKG1lbnUtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWToKLQkJc3dpdGNoIChtZW51LT5pbmRleCkgewotCQljYXNlIDA6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9ESVNBQkxFRCAqLwotCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICJOb0ZsaWtlciIpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgMToJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzUwSFogKi8KLQkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNTAgSHoiKTsKLQkJCXJldHVybiAwOwotCQljYXNlIDI6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV82MEhaICovCi0JCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjYwIEh6Iik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlicmVhazsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292NzcyeCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lICAgICA9IE1PRFVMRV9OQU1FLAotCS5jdHJscyAgICA9IHNkX2N0cmxzX292NzcyeCwKLQkubmN0cmxzICAgPSBBUlJBWV9TSVpFKHNkX2N0cmxzX292NzcyeCksCisJLmN0cmxzICAgID0gc2RfY3RybHMsCisJLm5jdHJscyAgID0gQVJSQVlfU0laRShzZF9jdHJscyksCiAJLmNvbmZpZyAgID0gc2RfY29uZmlnLAogCS5pbml0ICAgICA9IHNkX2luaXQsCi0JLnN0YXJ0ICAgID0gc2Rfc3RhcnRfb3Y3NzJ4LAotCS5zdG9wTiAgICA9IHNkX3N0b3BOX292NzcyeCwKKwkuc3RhcnQgICAgPSBzZF9zdGFydCwKKwkuc3RvcE4gICAgPSBzZF9zdG9wTiwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKIAkuZ2V0X3N0cmVhbXBhcm0gPSBzZF9nZXRfc3RyZWFtcGFybSwKIAkuc2V0X3N0cmVhbXBhcm0gPSBzZF9zZXRfc3RyZWFtcGFybSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292OTY1eCA9IHsKLQkubmFtZSAgICAgPSBNT0RVTEVfTkFNRSwKLQkuY3RybHMgICAgPSBzZF9jdHJsc19vdjk2NXgsCi0JLm5jdHJscyAgID0gQVJSQVlfU0laRShzZF9jdHJsc19vdjk2NXgpLAotCS5jb25maWcgICA9IHNkX2NvbmZpZywKLQkuaW5pdCAgICAgPSBzZF9pbml0LAotCS5zdGFydCAgICA9IHNkX3N0YXJ0X292OTY1eCwKLQkuc3RvcE4gICAgPSBzZF9zdG9wTl9vdjk2NXgsCi0JLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCi0JLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKLX07Ci0KIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7Ci0Je1VTQl9ERVZJQ0UoMHgwNmY4LCAweDMwMDMpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfT1Y5NjVYfSwKLQl7VVNCX0RFVklDRSgweDE0MTUsIDB4MjAwMCksIC5kcml2ZXJfaW5mbyA9IFNFTlNPUl9PVjc3Mlh9LAorCXtVU0JfREVWSUNFKDB4MTQxNSwgMHgyMDAwKX0sCiAJe30KIH07CiAKQEAgLTIzMjYsMTEgKzEzMTEsNyBAQAogLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KIHN0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLAotCQkJCWlkLT5kcml2ZXJfaW5mbyA9PSBTRU5TT1JfT1Y3NzJYCi0JCQkJCT8gJnNkX2Rlc2Nfb3Y3NzJ4Ci0JCQkJCTogJnNkX2Rlc2Nfb3Y5NjV4LAotCQkJCXNpemVvZihzdHJ1Y3Qgc2QpLAorCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKIAkJCQlUSElTX01PRFVMRSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzRfOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNF85LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJlNWEwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzRfOS5jCkBAIC0wLDAgKzEsMTQ3NyBAQAorLyoKKyAqIG92NTM0LW92OTY1eCBnc3BjYSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBKZWFuLUZyYW5jb2lzIE1vaW5lIGh0dHA6Ly9tb2luZWpmLmZyZWUuZnIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbnRvbmlvIE9zcGl0ZSA8b3NwaXRlQHN0dWRlbnRpLnVuaW5hLml0PgorICogQ29weXJpZ2h0IChDKSAyMDA4IEppbSBQYXJpcyA8amltQGp0YW4uY29tPgorICoKKyAqIEJhc2VkIG9uIGEgcHJvdG90eXBlIHdyaXR0ZW4gYnkgTWFyayBGZXJyZWxsIDxtYWpvcnRyaXBzQGdtYWlsLmNvbT4KKyAqIFVTQiBwcm90b2NvbCByZXZlcnNlIGVuZ2luZWVyZWQgYnkgSmltIFBhcmlzIDxqaW1AanRhbi5jb20+CisgKiBodHRwczovL2ppbS5zaC9zdm4vamltL2RldmwvcGxheXN0YXRpb24vcHMzL2V5ZS90ZXN0LworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAib3Y1MzRfOSIKKworI2luY2x1ZGUgImdzcGNhLmgiCisKKyNkZWZpbmUgT1Y1MzRfUkVHX0FERFJFU1MJMHhmMQkvKiBzZW5zb3IgYWRkcmVzcyAqLworI2RlZmluZSBPVjUzNF9SRUdfU1VCQUREUgkweGYyCisjZGVmaW5lIE9WNTM0X1JFR19XUklURQkJMHhmMworI2RlZmluZSBPVjUzNF9SRUdfUkVBRAkJMHhmNAorI2RlZmluZSBPVjUzNF9SRUdfT1BFUkFUSU9OCTB4ZjUKKyNkZWZpbmUgT1Y1MzRfUkVHX1NUQVRVUwkweGY2CisKKyNkZWZpbmUgT1Y1MzRfT1BfV1JJVEVfMwkweDM3CisjZGVmaW5lIE9WNTM0X09QX1dSSVRFXzIJMHgzMworI2RlZmluZSBPVjUzNF9PUF9SRUFEXzIJCTB4ZjkKKworI2RlZmluZSBDVFJMX1RJTUVPVVQgNTAwCisKK01PRFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPG1vaW5lamZAZnJlZS5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EvT1Y1MzRfOSBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCV9fdTMyIGxhc3RfcHRzOworCXU4IGxhc3RfZmlkOworCisJdTggYnJpZ2h0bmVzczsKKwl1OCBjb250cmFzdDsKKwl1OCBhdXRvZ2FpbjsKKwl1OCBleHBvc3VyZTsKKwlzOCBzaGFycG5lc3M7CisJdTggc2F0dXI7CisJdTggZnJlcTsKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2F0dXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisgICAgewkJCQkJCQkvKiAwICovCisJeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxNSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBCUklHSFRORVNTX0RFRiA3CisJCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCisJfSwKKwkuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKKwkuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKyAgICB9LAorICAgIHsJCQkJCQkJLyogMSAqLworCXsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJDb250cmFzdCIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxNSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBDT05UUkFTVF9ERUYgMworCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRjb250cmFzdCwKKwkuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisgICAgfSwKKyAgICB7CQkJCQkJCS8qIDIgKi8KKwl7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQVVUT0dBSU4sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUgICAgPSAiQXV0b2dhaW4iLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBBVVRPR0FJTl9ERUYgMQorCQkuZGVmYXVsdF92YWx1ZSA9IEFVVE9HQUlOX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRhdXRvZ2FpbiwKKwkuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCisgICAgfSwKKyNkZWZpbmUgRVhQT19JRFggMworICAgIHsJCQkJCQkJLyogMyAqLworCXsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJFeHBvc3VyZSIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAzLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEVYUE9fREVGIDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBFWFBPX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRleHBvc3VyZSwKKwkuZ2V0ID0gc2RfZ2V0ZXhwb3N1cmUsCisgICAgfSwKKyAgICB7CQkJCQkJCS8qIDQgKi8KKwl7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0hBUlBORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIlNoYXJwbmVzcyIsCisJCS5taW5pbXVtID0gLTEsCQkvKiAtMSA9IGF1dG8gKi8KKwkJLm1heGltdW0gPSA0LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNIQVJQTkVTU19ERUYgLTEKKwkJLmRlZmF1bHRfdmFsdWUgPSBTSEFSUE5FU1NfREVGLAorCX0sCisJLnNldCA9IHNkX3NldHNoYXJwbmVzcywKKwkuZ2V0ID0gc2RfZ2V0c2hhcnBuZXNzLAorICAgIH0sCisgICAgewkJCQkJCQkvKiA1ICovCisJeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiU2F0dXJhdGlvbiIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSA0LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNBVFVSX0RFRiAyCisJCS5kZWZhdWx0X3ZhbHVlID0gU0FUVVJfREVGLAorCX0sCisJLnNldCA9IHNkX3NldHNhdHVyLAorCS5nZXQgPSBzZF9nZXRzYXR1ciwKKyAgICB9LAorICAgIHsKKwl7CisJCS5pZAkgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAorCQkubmFtZSAgICA9ICJMaWdodCBmcmVxdWVuY3kgZmlsdGVyIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDIsCS8qIDA6IDAsIDE6IDUwSHosIDI6NjBIeiAqLworCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEZSRVFfREVGIDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBGUkVRX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRmcmVxLAorCS5nZXQgPSBzZF9nZXRmcmVxLAorICAgIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBvdjk2NXhfbW9kZVtdID0geworI2RlZmluZSBRVkdBX01PREUgMAorCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHfSwKKyNkZWZpbmUgVkdBX01PREUgMQorCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHfSwKKyNkZWZpbmUgU1ZHQV9NT0RFIDIKKwl7ODAwLCA2MDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA4MDAsCisJCS5zaXplaW1hZ2UgPSA4MDAgKiA2MDAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisjZGVmaW5lIFhHQV9NT0RFIDMKKwl7MTAyNCwgNzY4LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTAyNCwKKwkJLnNpemVpbWFnZSA9IDEwMjQgKiA3NjggKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisjZGVmaW5lIFNYR0FfTU9ERSA0CisJezEyODAsIDEwMjQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxMjgwLAorCQkuc2l6ZWltYWdlID0gMTI4MCAqIDEwMjQgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCit9OworCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRbXVsyXSA9IHsKKwl7MHg4OCwgMHhmOH0sCisJezB4ODksIDB4ZmZ9LAorCXsweDc2LCAweDAzfSwKKwl7MHg5MiwgMHgwM30sCisJezB4OTUsIDB4MTB9LAorCXsweGUyLCAweDAwfSwKKwl7MHhlNywgMHgzZX0sCisJezB4OGQsIDB4MWN9LAorCXsweDhlLCAweDAwfSwKKwl7MHg4ZiwgMHgwMH0sCisJezB4MWYsIDB4MDB9LAorCXsweGMzLCAweGY5fSwKKwl7MHg4OSwgMHhmZn0sCisJezB4ODgsIDB4Zjh9LAorCXsweDc2LCAweDAzfSwKKwl7MHg5MiwgMHgwMX0sCisJezB4OTMsIDB4MTh9LAorCXsweDFjLCAweDBhfSwKKwl7MHgxZCwgMHg0OH0sCisJezB4YzAsIDB4NTB9LAorCXsweGMxLCAweDNjfSwKKwl7MHgzNCwgMHgwNX0sCisJezB4YzIsIDB4MGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHgzNCwgMHgwNX0sCisJezB4ZTcsIDB4MmV9LAorCXsweDMxLCAweGY5fSwKKwl7MHgzNSwgMHgwMn0sCisJezB4ZDksIDB4MTB9LAorCXsweDI1LCAweDQyfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRbXVsyXSA9IHsKKwl7MHgxMiwgMHg4MH0sCS8qIGNvbTcgLSBTU0NCIHJlc2V0ICovCisJezB4MDAsIDB4MDB9LAkvKiBnYWluICovCisJezB4MDEsIDB4ODB9LAkvKiBibHVlICovCisJezB4MDIsIDB4ODB9LAkvKiByZWQgKi8KKwl7MHgwMywgMHgxYn0sCS8qIHZyZWYgKi8KKwl7MHgwNCwgMHgwM30sCS8qIGNvbTEgLSBleHBvc3VyZSBsb3cgYml0cyAqLworCXsweDBiLCAweDU3fSwJLyogdmVyICovCisJezB4MGUsIDB4NjF9LAkvKiBjb201ICovCisJezB4MGYsIDB4NDJ9LAkvKiBjb202ICovCisJezB4MTEsIDB4MDB9LAkvKiBjbGtyYyAqLworCXsweDEyLCAweDAyfSwJLyogY29tNyAtIDE1ZnBzIFZHQSBZVVlWICovCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KKwl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KKwl7MHgxNiwgMHgyNH0sCS8qIHJlZzE2ICovCisJezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQqLworCXsweDE4LCAweGJkfSwJLyogaHN0b3AgKi8KKwl7MHgxOSwgMHgwMX0sCS8qIHZzdHJ0ICovCisJezB4MWEsIDB4ODF9LAkvKiB2c3RvcCovCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MjQsIDB4M2N9LAkvKiBhZXcgKi8KKwl7MHgyNSwgMHgzNn0sCS8qIGFlYiAqLworCXsweDI2LCAweDcxfSwJLyogdnB0ICovCisJezB4MjcsIDB4MDh9LAkvKiBiYmlhcyAqLworCXsweDI4LCAweDA4fSwJLyogZ2JiaWFzICovCisJezB4MjksIDB4MTV9LAkvKiBnciBjb20gKi8KKwl7MHgyYSwgMHgwMH0sCS8qIGV4aGNoICovCisJezB4MmIsIDB4MDB9LAkvKiBleGhjbCAqLworCXsweDJjLCAweDA4fSwJLyogcmJpYXMgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHgzMywgMHgwMH0sCS8qIGNobGYgKi8KKwl7MHgzNCwgMHgzZn0sCS8qIGFyZWYxICovCisJezB4MzUsIDB4MDB9LAkvKiBhcmVmMiAqLworCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KKwl7MHgzOCwgMHg3Mn0sCS8qIGFkYzIgKi8KKwl7MHgzOSwgMHg1N30sCS8qIGFyZWY0ICovCisJezB4M2EsIDB4ODB9LAkvKiB0c2xiIC0geXV5diAqLworCXsweDNiLCAweGM0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCisJezB4M2QsIDB4OTl9LAkvKiBjb20xMyAqLworCXsweDNmLCAweGMxfSwJLyogZWRnZSAqLworCXsweDQwLCAweGMwfSwJLyogY29tMTUgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NDIsIDB4YzB9LAkvKiBjb20xNyAqLworCXsweDQzLCAweDBhfSwJLyogcnN2ZCAqLworCXsweDQ0LCAweGYwfSwKKwl7MHg0NSwgMHg0Nn0sCisJezB4NDYsIDB4NjJ9LAorCXsweDQ3LCAweDJhfSwKKwl7MHg0OCwgMHgzY30sCisJezB4NGEsIDB4ZmN9LAorCXsweDRiLCAweGZjfSwKKwl7MHg0YywgMHg3Zn0sCisJezB4NGQsIDB4N2Z9LAorCXsweDRlLCAweDdmfSwKKwl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLworCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAkvKiBtYXRyaXggY29lZiBzaWduICovCisJezB4NTksIDB4ODV9LAkvKiBBV0IgY29udHJvbCAqLworCXsweDVhLCAweGE5fSwKKwl7MHg1YiwgMHg2NH0sCisJezB4NWMsIDB4ODR9LAorCXsweDVkLCAweDUzfSwKKwl7MHg1ZSwgMHgwZX0sCisJezB4NWYsIDB4ZjB9LAkvKiBBV0IgYmx1ZSBsaW1pdCAqLworCXsweDYwLCAweGYwfSwJLyogQVdCIHJlZCBsaW1pdCAqLworCXsweDYxLCAweGYwfSwJLyogQVdCIGdyZWVuIGxpbWl0ICovCisJezB4NjIsIDB4MDB9LAkvKiBsY2MxICovCisJezB4NjMsIDB4MDB9LAkvKiBsY2MyICovCisJezB4NjQsIDB4MDJ9LAkvKiBsY2MzICovCisJezB4NjUsIDB4MTZ9LAkvKiBsY2M0ICovCisJezB4NjYsIDB4MDF9LAkvKiBsY2M1ICovCisJezB4NjksIDB4MDJ9LAkvKiBodiAqLworCXsweDZiLCAweDVhfSwJLyogZGJ2bCAqLworCXsweDZjLCAweDA0fSwKKwl7MHg2ZCwgMHg1NX0sCisJezB4NmUsIDB4MDB9LAorCXsweDZmLCAweDlkfSwKKwl7MHg3MCwgMHgyMX0sCS8qIGRuc3RoICovCisJezB4NzEsIDB4Nzh9LAorCXsweDcyLCAweDAwfSwJLyogcG9pZHggKi8KKwl7MHg3MywgMHgwMX0sCS8qIHBja2R2ICovCisJezB4NzQsIDB4M2F9LAkvKiB4aW5keCAqLworCXsweDc1LCAweDM1fSwJLyogeWluZHggKi8KKwl7MHg3NiwgMHgwMX0sCisJezB4NzcsIDB4MDJ9LAorCXsweDdhLCAweDEyfSwJLyogZ2FtbWEgY3VydmUgKi8KKwl7MHg3YiwgMHgwOH0sCisJezB4N2MsIDB4MTZ9LAorCXsweDdkLCAweDMwfSwKKwl7MHg3ZSwgMHg1ZX0sCisJezB4N2YsIDB4NzJ9LAorCXsweDgwLCAweDgyfSwKKwl7MHg4MSwgMHg4ZX0sCisJezB4ODIsIDB4OWF9LAorCXsweDgzLCAweGE0fSwKKwl7MHg4NCwgMHhhY30sCisJezB4ODUsIDB4Yjh9LAorCXsweDg2LCAweGMzfSwKKwl7MHg4NywgMHhkNn0sCisJezB4ODgsIDB4ZTZ9LAorCXsweDg5LCAweGYyfSwKKwl7MHg4YSwgMHgwM30sCisJezB4OGMsIDB4ODl9LAkvKiBjb20xOSAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDkwLCAweDdkfSwKKwl7MHg5MSwgMHg3Yn0sCisJezB4OWQsIDB4MDN9LAkvKiBsY2M2ICovCisJezB4OWUsIDB4MDR9LAkvKiBsY2M3ICovCisJezB4OWYsIDB4N2F9LAorCXsweGEwLCAweDc5fSwKKwl7MHhhMSwgMHg0MH0sCS8qIGFlY2htICovCisJezB4YTQsIDB4NTB9LAkvKiBjb20yMSAqLworCXsweGE1LCAweDY4fSwJLyogY29tMjYgKi8KKwl7MHhhNiwgMHg0YX0sCS8qIEFXQiBncmVlbiAqLworCXsweGE4LCAweGMxfSwJLyogcmVmYTggKi8KKwl7MHhhOSwgMHhlZn0sCS8qIHJlZmE5ICovCisJezB4YWEsIDB4OTJ9LAorCXsweGFiLCAweDA0fSwKKwl7MHhhYywgMHg4MH0sCS8qIGJsYWNrIGxldmVsIGNvbnRyb2wgKi8KKwl7MHhhZCwgMHg4MH0sCisJezB4YWUsIDB4ODB9LAorCXsweGFmLCAweDgwfSwKKwl7MHhiMiwgMHhmMn0sCisJezB4YjMsIDB4MjB9LAorCXsweGI0LCAweDIwfSwJLyogY3RybGI0ICovCisJezB4YjUsIDB4MDB9LAorCXsweGI2LCAweGFmfSwKKwl7MHhiYiwgMHhhZX0sCisJezB4YmMsIDB4N2Z9LAkvKiBBREMgY2hhbm5lbCBvZmZzZXRzICovCisJezB4ZGIsIDB4N2Z9LAorCXsweGJlLCAweDdmfSwKKwl7MHhiZiwgMHg3Zn0sCisJezB4YzAsIDB4ZTJ9LAorCXsweGMxLCAweGMwfSwKKwl7MHhjMiwgMHgwMX0sCisJezB4YzMsIDB4NGV9LAorCXsweGM2LCAweDg1fSwKKwl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCisJezB4YzksIDB4ZTB9LAorCXsweGNhLCAweGU4fSwKKwl7MHhjYiwgMHhmMH0sCisJezB4Y2MsIDB4ZDh9LAorCXsweGNkLCAweGYxfSwKKwl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLworCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAorCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisKKwl7MHhjNSwgMHgwM30sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCisJezB4NmEsIDB4MDJ9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCisJezB4MTIsIDB4NjJ9LAkvKiBjb203IC0gMzBmcHMgVkdBIFlVViAqLworCXsweDM2LCAweGZhfSwJLyogYXJlZjMgKi8KKwl7MHg2OSwgMHgwYX0sCS8qIGh2ICovCisJezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDNlLCAweDBjfSwKKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NzIsIDB4MDB9LAorCXsweDczLCAweDAwfSwKKwl7MHg3NCwgMHgzYX0sCisJezB4NzUsIDB4MzV9LAorCXsweDc2LCAweDAxfSwKKwl7MHhjNywgMHg4MH0sCisJezB4MDMsIDB4MTJ9LAkvKiB2cmVmICovCisJezB4MTcsIDB4MTZ9LAkvKiBoc3RhcnQgKi8KKwl7MHgxOCwgMHgwMn0sCS8qIGhzdG9wICovCisJezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLworCXsweDFhLCAweDNkfSwJLyogdnN0b3AgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHhjMCwgMHhhYX0sCit9OworCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRfMltdWzJdID0geworCXsweDk0LCAweGFhfSwKKwl7MHhmMSwgMHg2MH0sCisJezB4ZTUsIDB4MDR9LAorCXsweGMwLCAweDUwfSwKKwl7MHhjMSwgMHgzY30sCisJezB4OGMsIDB4MDB9LAorCXsweDhkLCAweDFjfSwKKwl7MHgzNCwgMHgwNX0sCisKKwl7MHhjMiwgMHgwY30sCisJezB4YzMsIDB4Zjl9LAorCXsweGRhLCAweDAxfSwKKwl7MHg1MCwgMHgwMH0sCisJezB4NTEsIDB4YTB9LAorCXsweDUyLCAweDNjfSwKKwl7MHg1MywgMHgwMH0sCisJezB4NTQsIDB4MDB9LAorCXsweDU1LCAweDAwfSwKKwl7MHg1NywgMHgwMH0sCisJezB4NWMsIDB4MDB9LAorCXsweDVhLCAweGEwfSwKKwl7MHg1YiwgMHg3OH0sCisJezB4MzUsIDB4MDJ9LAorCXsweGQ5LCAweDEwfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRfMltdWzJdID0geworCXsweDNiLCAweGM0fSwKKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KKwl7MHgwMCwgMHgwMH0sCS8qIGdhaW4gKi8KKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KKwl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KKwl7MHg2YSwgMHgwNX0sCisJezB4YzUsIDB4MDd9LAorCXsweGEyLCAweDRifSwKKwl7MHhhMywgMHgzZX0sCisJezB4MmQsIDB4MDB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMH0sCS8qIGNvbTE3ICovCisJezB4MmQsIDB4MDB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMX0sCS8qIGNvbTE3ICovCisvKiBzaGFycG5lc3MgKi8KKwl7MHgzZiwgMHgwMX0sCisJezB4ZmYsIDB4NDJ9LAkvKiByZWFkIDQyLCB3cml0ZSBmZiAwMCAqLworCXsweDQyLCAweGMxfSwJLyogY29tMTcgKi8KKy8qIHNhdHVyYXRpb24gKi8KKwl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLworCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAorCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisvKiBjb250cmFzdCAqLworCXsweDU2LCAweDQwfSwKKy8qIGJyaWdodG5lc3MgKi8KKwl7MHg1NSwgMHg4Zn0sCisvKiBleHBvICovCisJezB4MTAsIDB4MjV9LAkvKiBhZWNoIC0gZXhwb3N1cmUgaGlnaCBiaXRzICovCisJezB4ZmYsIDB4MTN9LAkvKiByZWFkIDEzLCB3cml0ZSBmZiAwMCAqLworCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0XzFfdmdhW11bMl0gPSB7CS8qIHNhbWUgZm9yIHF2Z2EgKi8KKwl7MHgxMiwgMHg2Mn0sCS8qIGNvbTcgLSAzMGZwcyBWR0EgWVVWICovCisJezB4MzYsIDB4ZmF9LAkvKiBhcmVmMyAqLworCXsweDY5LCAweDBhfSwJLyogaHYgKi8KKwl7MHg4YywgMHg4OX0sCS8qIGNvbTIyICovCisJezB4MTQsIDB4Mjh9LAkvKiBjb205ICovCisJezB4M2UsIDB4MGN9LAkvKiBjb20xNCAqLworCXsweDQxLCAweDQwfSwJLyogY29tMTYgKi8KKwl7MHg3MiwgMHgwMH0sCisJezB4NzMsIDB4MDB9LAorCXsweDc0LCAweDNhfSwKKwl7MHg3NSwgMHgzNX0sCisJezB4NzYsIDB4MDF9LAorCXsweGM3LCAweDgwfSwJLyogY29tMjQgKi8KKwl7MHgwMywgMHgxMn0sCS8qIHZyZWYgKi8KKwl7MHgxNywgMHgxNn0sCS8qIGhzdGFydCAqLworCXsweDE4LCAweDAyfSwJLyogaHN0b3AgKi8KKwl7MHgxOSwgMHgwMX0sCS8qIHZzdHJ0ICovCisJezB4MWEsIDB4M2R9LAkvKiB2c3RvcCAqLworCXsweDMyLCAweGZmfSwJLyogaHJlZiAqLworCXsweGMwLCAweGFhfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfMV9zdmdhW11bMl0gPSB7CisJezB4MTIsIDB4MDJ9LAkvKiBjb203IC0gWVVZViAtIFZHQSAxNSBmdWxsIHJlc29sdXRpb24gKi8KKwl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCisJezB4NjksIDB4MDJ9LAkvKiBodiAqLworCXsweDhjLCAweDBkfSwJLyogY29tMjIgKi8KKwl7MHgzZSwgMHgwY30sCS8qIGNvbTE0ICovCisJezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLworCXsweDcyLCAweDAwfSwKKwl7MHg3MywgMHgwMX0sCisJezB4NzQsIDB4M2F9LAorCXsweDc1LCAweDM1fSwKKwl7MHg3NiwgMHgwMX0sCisJezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLworCXsweDAzLCAweDFifSwJLyogdnJlZiAqLworCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0ICovCisJezB4MTgsIDB4YmR9LAkvKiBoc3RvcCAqLworCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KKwl7MHgxYSwgMHg4MX0sCS8qIHZzdG9wICovCisJezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCisJezB4YzAsIDB4ZTJ9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF8xX3hnYVtdWzJdID0geworCXsweDEyLCAweDAyfSwJLyogY29tNyAqLworCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KKwl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCisJezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NzIsIDB4MDB9LAorCXsweDczLCAweDAxfSwKKwl7MHg3NCwgMHgzYX0sCisJezB4NzUsIDB4MzV9LAorCXsweDc2LCAweDAxfSwKKwl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCisJezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCisJezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KKwl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCisJezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLworCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHhjMCwgMHhlMn0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0XzFfc3hnYVtdWzJdID0geworCXsweDEyLCAweDAyfSwJLyogY29tNyAqLworCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KKwl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCisJezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NzIsIDB4MDB9LAorCXsweDczLCAweDAxfSwKKwl7MHg3NCwgMHgzYX0sCisJezB4NzUsIDB4MzV9LAorCXsweDc2LCAweDAxfSwKKwl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCisJezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCisJezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KKwl7MHgxOCwgMHgwMn0sCS8qIGhzdG9wICovCisJezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLworCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHhjMCwgMHhlMn0sCit9OworCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X3F2Z2FbXVsyXSA9IHsKKwl7MHg5NCwgMHhhYX0sCisJezB4ZjEsIDB4NjB9LAorCXsweGU1LCAweDA0fSwKKwl7MHhjMCwgMHg1MH0sCisJezB4YzEsIDB4M2N9LAorCXsweDhjLCAweDAwfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4MzQsIDB4MDV9LAorCisJezB4YzIsIDB4NGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHhkYSwgMHgwMH0sCisJezB4NTAsIDB4MDB9LAorCXsweDUxLCAweGEwfSwKKwl7MHg1MiwgMHg3OH0sCisJezB4NTMsIDB4MDB9LAorCXsweDU0LCAweDAwfSwKKwl7MHg1NSwgMHgwMH0sCisJezB4NTcsIDB4MDB9LAorCXsweDVjLCAweDAwfSwKKwl7MHg1YSwgMHg1MH0sCisJezB4NWIsIDB4M2N9LAorCXsweDM1LCAweDAyfSwKKwl7MHhkOSwgMHgxMH0sCisJezB4OTQsIDB4MTF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF92Z2FbXVsyXSA9IHsKKwl7MHg5NCwgMHhhYX0sCisJezB4ZjEsIDB4NjB9LAorCXsweGU1LCAweDA0fSwKKwl7MHhjMCwgMHg1MH0sCisJezB4YzEsIDB4M2N9LAorCXsweDhjLCAweDAwfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4MzQsIDB4MDV9LAorCXsweGMyLCAweDBjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4ZGEsIDB4MDF9LAorCXsweDUwLCAweDAwfSwKKwl7MHg1MSwgMHhhMH0sCisJezB4NTIsIDB4M2N9LAorCXsweDUzLCAweDAwfSwKKwl7MHg1NCwgMHgwMH0sCisJezB4NTUsIDB4MDB9LAorCXsweDU3LCAweDAwfSwKKwl7MHg1YywgMHgwMH0sCisJezB4NWEsIDB4YTB9LAorCXsweDViLCAweDc4fSwKKwl7MHgzNSwgMHgwMn0sCisJezB4ZDksIDB4MTB9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfc3ZnYVtdWzJdID0geworCXsweDk0LCAweGFhfSwKKwl7MHhmMSwgMHg2MH0sCisJezB4ZTUsIDB4MDR9LAorCXsweGMwLCAweGEwfSwKKwl7MHhjMSwgMHg4MH0sCisJezB4OGMsIDB4MDB9LAorCXsweDhkLCAweDFjfSwKKwl7MHgzNCwgMHgwNX0sCisJezB4YzIsIDB4NGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHg1MCwgMHgwMH0sCisJezB4NTEsIDB4NDB9LAorCXsweDUyLCAweDAwfSwKKwl7MHg1MywgMHgwMH0sCisJezB4NTQsIDB4MDB9LAorCXsweDU1LCAweDg4fSwKKwl7MHg1NywgMHgwMH0sCisJezB4NWMsIDB4MDB9LAorCXsweDVhLCAweGM4fSwKKwl7MHg1YiwgMHg5Nn0sCisJezB4MzUsIDB4MDJ9LAorCXsweGQ5LCAweDEwfSwKKwl7MHhkYSwgMHgwMH0sCisJezB4OTQsIDB4MTF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF94Z2FbXVsyXSA9IHsKKwl7MHg5NCwgMHhhYX0sCisJezB4ZjEsIDB4NjB9LAorCXsweGU1LCAweDA0fSwKKwl7MHhjMCwgMHhhMH0sCisJezB4YzEsIDB4ODB9LAorCXsweDhjLCAweDAwfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4MzQsIDB4MDV9LAorCXsweGMyLCAweDRjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4NTAsIDB4MDB9LAorCXsweDUxLCAweDQwfSwKKwl7MHg1MiwgMHgwMH0sCisJezB4NTMsIDB4MDB9LAorCXsweDU0LCAweDAwfSwKKwl7MHg1NSwgMHg4OH0sCisJezB4NTcsIDB4MDB9LAorCXsweDVjLCAweDAxfSwKKwl7MHg1YSwgMHgwMH0sCisJezB4NWIsIDB4YzB9LAorCXsweDM1LCAweDAyfSwKKwl7MHhkOSwgMHgxMH0sCisJezB4ZGEsIDB4MDF9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfc3hnYVtdWzJdID0geworCXsweDk0LCAweGFhfSwKKwl7MHhmMSwgMHg2MH0sCisJezB4ZTUsIDB4MDR9LAorCXsweGMwLCAweGEwfSwKKwl7MHhjMSwgMHg4MH0sCisJezB4OGMsIDB4MDB9LAorCXsweDhkLCAweDFjfSwKKwl7MHgzNCwgMHgwNX0sCisJezB4YzIsIDB4MGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHhkYSwgMHgwMH0sCisJezB4MzUsIDB4MDJ9LAorCXsweGQ5LCAweDEwfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0XzJfcXZnYVtdWzJdID0geworCXsweDNiLCAweGU0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCisJezB4MDAsIDB4MDB9LAorCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCisJezB4MTEsIDB4MDF9LAkvKiBjbGtyYyAqLworCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLworCXsweDZhLCAweDAyfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKwl7MHhjNSwgMHgwM30sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCisJezB4YTIsIDB4OTZ9LAkvKiBiZDUwICovCisJezB4YTMsIDB4N2R9LAkvKiBiZDYwICovCisKKwl7MHhmZiwgMHgxM30sCS8qIHJlYWQgMTMsIHdyaXRlIGZmIDAwICovCisJezB4MTMsIDB4ZTd9LAorCXsweDNhLCAweDgwfSwJLyogdHNsYiAtIHl1eXYgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfMl92Z2FbXVsyXSA9IHsKKwl7MHgzYiwgMHhjNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLworCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLworCXsweDEzLCAweGUwfSwJLyogY29tOCAqLworCXsweDAwLCAweDAwfSwKKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KKwl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KKwl7MHg2YSwgMHgwNX0sCS8qIDUwIEh6IGJhbmRpbmcgZmlsdGVyICovCisJezB4YzUsIDB4MDd9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCXsweGEyLCAweDRifSwJLyogYmQ1MCAqLworCXsweGEzLCAweDNlfSwJLyogYmQ2MCAqLworCisJezB4MmQsIDB4MDB9LAkvKiBhZHZmbCAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF8yX3N2Z2FbXVsyXSA9IHsJLyogc2FtZSBmb3IgeGdhICovCisJezB4M2IsIDB4YzR9LAkvKiBjb20xMSAtIG5pZ2h0IG1vZGUgMS80IGZyYW1lIHJhdGUgKi8KKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KKwl7MHgwMCwgMHgwMH0sCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KKwl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCisJezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCisJezB4NmEsIDB4MGN9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCXsweGM1LCAweDBmfSwJLyogNjAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKwl7MHhhMiwgMHg0ZX0sCS8qIGJkNTAgKi8KKwl7MHhhMywgMHg0MX0sCS8qIGJkNjAgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfMl9zeGdhW11bMl0gPSB7CisJezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCisJezB4MDAsIDB4MDB9LAorCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCisJezB4M2IsIDB4YzR9LAkvKiBjb20xMSAtIG5pZ2h0IG1vZGUgMS80IGZyYW1lIHJhdGUgKi8KKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCisJezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCisJezB4NmEsIDB4MGN9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCXsweGM1LCAweDBmfSwJLyogNjAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKwl7MHhhMiwgMHg0ZX0sCS8qIGJkNTAgKi8KKwl7MHhhMywgMHg0MX0sCS8qIGJkNjAgKi8KK307CisKK3N0YXRpYyB2b2lkIHJlZ193X2koc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCB1OCB2YWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcmV0OworCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWw7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDAxLAorCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMHgwMCwgcmVnLCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsIENUUkxfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmVnX3cgZmFpbGVkICVkIiwgcmV0KTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KK30KKworc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCB1OCB2YWwpCit7CisJUERFQlVHKERfVVNCTywgInJlZ193IFslMDR4XSA9ICUwMngiLCByZWcsIHZhbCk7CisJcmVnX3dfaShnc3BjYV9kZXYsIHJlZywgdmFsKTsKK30KKworc3RhdGljIHU4IHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByZXQ7CisKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDAxLAorCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAweDAwLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgQ1RSTF9USU1FT1VUKTsKKwlQREVCVUcoRF9VU0JJLCAicmVnX3IgWyUwNHhdIC0+ICUwMngiLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmVnX3IgZXJyICVkIiwgcmV0KTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworfQorCitzdGF0aWMgaW50IHNjY2JfY2hlY2tfc3RhdHVzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwl1OCBkYXRhOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlkYXRhID0gcmVnX3IoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1RBVFVTKTsKKworCQlzd2l0Y2ggKGRhdGEpIHsKKwkJY2FzZSAweDAwOgorCQkJcmV0dXJuIDE7CisJCWNhc2UgMHgwNDoKKwkJCXJldHVybiAwOworCQljYXNlIDB4MDM6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVBERUJVRyhEX1VTQkl8RF9VU0JPLAorCQkJCSJzY2NiIHN0YXR1cyAweCUwMngsIGF0dGVtcHQgJWQvNSIsCisJCQkJZGF0YSwgaSArIDEpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzY2NiX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnLCB1OCB2YWwpCit7CisJUERFQlVHKERfVVNCTywgInNjY2Jfd3JpdGUgWyUwMnhdID0gJTAyeCIsIHJlZywgdmFsKTsKKwlyZWdfd19pKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7CisJcmVnX3dfaShnc3BjYV9kZXYsIE9WNTM0X1JFR19XUklURSwgdmFsKTsKKwlyZWdfd19pKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMyk7CisKKwlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJCVBERUJVRyhEX0VSUiwgInNjY2Jfd3JpdGUgZmFpbGVkIik7Cit9CisKK3N0YXRpYyB1OCBzY2NiX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnKQoreworCXJlZ193KGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7CisJcmVnX3coZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9XUklURV8yKTsKKwlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJCVBERUJVRyhEX0VSUiwgInNjY2JfcmVhZCBmYWlsZWQgMSIpOworCisJcmVnX3coZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9SRUFEXzIpOworCWlmICghc2NjYl9jaGVja19zdGF0dXMoZ3NwY2FfZGV2KSkKKwkJUERFQlVHKERfRVJSLCAic2NjYl9yZWFkIGZhaWxlZCAyIik7CisKKwlyZXR1cm4gcmVnX3IoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfUkVBRCk7Cit9CisKKy8qIG91dHB1dCBhIGJyaWRnZSBzZXF1ZW5jZSAocmVnIC0gdmFsKSAqLworc3RhdGljIHZvaWQgcmVnX3dfYXJyYXkoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3QgdTggKCpkYXRhKVsyXSwgaW50IGxlbikKK3sKKwl3aGlsZSAoLS1sZW4gPj0gMCkgeworCQlyZWdfdyhnc3BjYV9kZXYsICgqZGF0YSlbMF0sICgqZGF0YSlbMV0pOworCQlkYXRhKys7CisJfQorfQorCisvKiBvdXRwdXQgYSBzZW5zb3Igc2VxdWVuY2UgKHJlZyAtIHZhbCkgKi8KK3N0YXRpYyB2b2lkIHNjY2Jfd19hcnJheShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCB1OCAoKmRhdGEpWzJdLCBpbnQgbGVuKQoreworCXdoaWxlICgtLWxlbiA+PSAwKSB7CisJCWlmICgoKmRhdGEpWzBdICE9IDB4ZmYpIHsKKwkJCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAoKmRhdGEpWzBdLCAoKmRhdGEpWzFdKTsKKwkJfSBlbHNlIHsKKwkJCXNjY2JfcmVhZChnc3BjYV9kZXYsICgqZGF0YSlbMV0pOworCQkJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCQl9CisJCWRhdGErKzsKKwl9Cit9CisKKy8qIFR3byBiaXRzIGNvbnRyb2wgTEVEOiAweDIxIGJpdCA3IGFuZCAweDIzIGJpdCA3LgorICogKGRpcmVjdGlvbiBhbmQgb3V0cHV0KT8gKi8KK3N0YXRpYyB2b2lkIHNldF9sZWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgc3RhdHVzKQoreworCXU4IGRhdGE7CisKKwlQREVCVUcoRF9DT05GLCAibGVkIHN0YXR1czogJWQiLCBzdGF0dXMpOworCisJZGF0YSA9IHJlZ19yKGdzcGNhX2RldiwgMHgyMSk7CisJZGF0YSB8PSAweDgwOworCXJlZ193KGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisKKwlkYXRhID0gcmVnX3IoZ3NwY2FfZGV2LCAweDIzKTsKKwlpZiAoc3RhdHVzKQorCQlkYXRhIHw9IDB4ODA7CisJZWxzZQorCQlkYXRhICY9IH4weDgwOworCisJcmVnX3coZ3NwY2FfZGV2LCAweDIzLCBkYXRhKTsKKworCWlmICghc3RhdHVzKSB7CisJCWRhdGEgPSByZWdfcihnc3BjYV9kZXYsIDB4MjEpOworCQlkYXRhICY9IH4weDgwOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MjEsIGRhdGEpOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IHZhbDsKKworCXZhbCA9IHNkLT5icmlnaHRuZXNzOworCWlmICh2YWwgPCA4KQorCQl2YWwgPSAxNSAtIHZhbDsJCS8qIGYgLi4gOCAqLworCWVsc2UKKwkJdmFsID0gdmFsIC0gODsJCS8qIDAgLi4gNyAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDU1LAkvKiBicnRuIC0gYnJpZ2h0bmVzcyBhZGp1c3RtZW50ICovCisJCQkweDBmIHwgKHZhbCA8PCA0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg1NiwJLyogY25zdDEgLSBjb250cmFzdCAxIGN0cmwgY29lZmYgKi8KKwkJCXNkLT5jb250cmFzdCA8PCA0KTsKK30KKworc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCB2YWw7CisKKy8qZml4bWU6IHNob3VsZCBhZGp1c3QgYWdjL2F3Yi9hZWMgYnkgZGlmZmVyZW50IGNvbnRyb2xzICovCisJdmFsID0gc2QtPmF1dG9nYWluOworCXZhbCA9IHNjY2JfcmVhZChnc3BjYV9kZXYsIDB4MTMpOwkJLyogY29tOCAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKKwlpZiAoc2QtPmF1dG9nYWluKQorCQl2YWwgfD0gMHgwNTsJCS8qIGFnYyAmIGFlYyAqLworCWVsc2UKKwkJdmFsICY9IDB4ZmE7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTMsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggdmFsOworCXN0YXRpYyBjb25zdCB1OCBleHBvWzRdID0gezB4MDAsIDB4MjUsIDB4MzgsIDB4NWV9OworCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTAsCQkJLyogYWVjWzk6Ml0gKi8KKwkJCWV4cG9bc2QtPmV4cG9zdXJlXSk7CisKKwl2YWwgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDEzKTsJCS8qIGNvbTggKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTMsIHZhbCk7CisKKwl2YWwgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweGExKTsJCS8qIGFlY2ggKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4YTEsIHZhbCAmIDB4ZTApOwkvKiBhZWNbMTU6MTBdID0gMCAqLworfQorCitzdGF0aWMgdm9pZCBzZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzOCB2YWw7CisKKwl2YWwgPSBzZC0+c2hhcnBuZXNzOworCWlmICh2YWwgPCAwKSB7CQkJCS8qIGF1dG8gKi8KKwkJdmFsID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHg0Mik7CS8qIGNvbTE3ICovCisJCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKKwkJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NDIsIHZhbCB8IDB4NDApOworCQkJCS8qIEVkZ2UgZW5oYW5jZW1lbnQgc3RyZW5ndGggYXV0byBhZGp1c3QgKi8KKwkJcmV0dXJuOworCX0KKwlpZiAodmFsICE9IDApCisJCXZhbCA9IDEgPDwgKHZhbCAtIDEpOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDNmLAkvKiBlZGdlIC0gZWRnZSBlbmhhbmNlLiBmYWN0b3IgKi8KKwkJCXZhbCk7CisJdmFsID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHg0Mik7CQkvKiBjb20xNyAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg0MiwgdmFsICYgMHhiZik7Cit9CisKK3N0YXRpYyB2b2lkIHNldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggdmFsMSwgdmFsMiwgdmFsMzsKKwlzdGF0aWMgY29uc3QgdTggbWF0cml4WzVdWzJdID0geworCQl7MHgxNCwgMHgzOH0sCisJCXsweDFlLCAweDU0fSwKKwkJezB4MjgsIDB4NzB9LAorCQl7MHgzMiwgMHg4Y30sCisJCXsweDQ4LCAweDkwfQorCX07CisKKwl2YWwxID0gbWF0cml4W3NkLT5zYXR1cl1bMF07CisJdmFsMiA9IG1hdHJpeFtzZC0+c2F0dXJdWzFdOworCXZhbDMgPSB2YWwxICsgdmFsMjsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg0ZiwgdmFsMyk7CS8qIG1hdHJpeCBjb2VmZiAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDUwLCB2YWwzKTsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg1MSwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NTIsIHZhbDEpOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDUzLCB2YWwyKTsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg1NCwgdmFsMyk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NTgsIDB4MWEpOwkvKiBtdHhzIC0gY29lZmYgc2lnbnMgKi8KKworCXZhbDEgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDQxKTsJLyogY29tMTYgKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NDEsIHZhbDEpOworfQorCitzdGF0aWMgdm9pZCBzZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggdmFsOworCisJdmFsID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgxMyk7CQkvKiBjb204ICovCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCWlmIChzZC0+ZnJlcSA9PSAwKSB7CisJCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDEzLCB2YWwgJiAweGRmKTsKKwkJcmV0dXJuOworCX0KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHgxMywgdmFsIHwgMHgyMCk7CisKKwl2YWwgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDQyKTsJCS8qIGNvbTE3ICovCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCWlmIChzZC0+ZnJlcSA9PSAxKQorCQl2YWwgfD0gMHgwMTsKKwllbHNlCisJCXZhbCAmPSAweGZlOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDQyLCB2YWwpOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW07CisKKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisKKwljYW0tPmNhbV9tb2RlID0gb3Y5NjV4X21vZGU7CisJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG92OTY1eF9tb2RlKTsKKworCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CisJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOworI2lmIEFVVE9HQUlOX0RFRiAhPSAwCisJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOworCWdzcGNhX2Rldi0+Y3RybF9pbmFjIHw9ICgxIDw8IEVYUE9fSURYKTsKKyNlbmRpZgorI2lmIEVYUE9fREVGICE9IDAKKwlzZC0+ZXhwb3N1cmUgPSBFWFBPX0RFRjsKKyNlbmRpZgorI2lmIFNIQVJQTkVTU19ERUYgIT0gMAorCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOworI2VuZGlmCisJc2QtPnNhdHVyID0gU0FUVVJfREVGOworCXNkLT5mcmVxID0gRlJFUV9ERUY7CisKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXUxNiBzZW5zb3JfaWQ7CisKKwkvKiByZXNldCBicmlkZ2UgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTcsIDB4M2EpOworCXJlZ193KGdzcGNhX2RldiwgMHhlMCwgMHgwOCk7CisJbXNsZWVwKDEwMCk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBzZW5zb3IgYWRkcmVzcyAqLworCXJlZ193KGdzcGNhX2RldiwgT1Y1MzRfUkVHX0FERFJFU1MsIDB4NjApOworCisJLyogcmVzZXQgc2Vuc29yICovCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTIsIDB4ODApOworCW1zbGVlcCgxMCk7CisKKwkvKiBwcm9iZSB0aGUgc2Vuc29yICovCisJc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgwYSk7CisJc2Vuc29yX2lkID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgwYSkgPDwgODsKKwlzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDBiKTsKKwlzZW5zb3JfaWQgfD0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgwYik7CisJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgSUQ6ICUwNHgiLCBzZW5zb3JfaWQpOworCisJLyogaW5pdGlhbGl6ZSAqLworCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX2luaXQsCisJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0KSk7CisJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX2luaXQsCisJCQlBUlJBWV9TSVpFKHNlbnNvcl9pbml0KSk7CisJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdF8yLAorCQkJQVJSQVlfU0laRShicmlkZ2VfaW5pdF8yKSk7CisJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX2luaXRfMiwKKwkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXRfMikpOworCXJlZ193KGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGUwLCAweDAxKTsKKwlzZXRfbGVkKGdzcGNhX2RldiwgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGUwLCAweDAwKTsKKworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN3aXRjaCAoZ3NwY2FfZGV2LT5jdXJyX21vZGUpIHsKKwljYXNlIFFWR0FfTU9ERToJCQkvKiAzMjB4MjQwICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3ZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3ZnYSkpOworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9xdmdhLAorCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X3F2Z2EpKTsKKwkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0XzJfcXZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8yX3F2Z2EpKTsKKwkJYnJlYWs7CisJY2FzZSBWR0FfTU9ERToJCQkvKiA2NDB4NDgwICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3ZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3ZnYSkpOworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF92Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfdmdhKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8yX3ZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8yX3ZnYSkpOworCQlicmVhazsKKwljYXNlIFNWR0FfTU9ERToJCQkvKiA4MDB4NjAwICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3N2Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMV9zdmdhKSk7CisJCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X3N2Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfc3ZnYSkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfMl9zdmdhLAorCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0XzJfc3ZnYSkpOworCQlicmVhazsKKwljYXNlIFhHQV9NT0RFOgkJCS8qIDEwMjR4NzY4ICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3hnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3hnYSkpOworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF94Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfeGdhKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8yX3N2Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMl9zdmdhKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNYR0FfTU9ERToJCQkgKiAxMjgweDEwMjQgKi8KKwkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0XzFfc3hnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3N4Z2EpKTsKKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfc3hnYSwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9zeGdhKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8yX3N4Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMl9zeGdhKSk7CisJCWJyZWFrOworCX0KKwlzZXRmcmVxKGdzcGNhX2Rldik7CisJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKKwlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOworCXNldHNhdHVyKGdzcGNhX2Rldik7CisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworCXJlZ193KGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJc2V0X2xlZChnc3BjYV9kZXYsIDEpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTAsIDB4MDEpOworCXNldF9sZWQoZ3NwY2FfZGV2LCAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworfQorCisvKiBWYWx1ZXMgZm9yIGJtSGVhZGVySW5mbyAoVmlkZW8gYW5kIFN0aWxsIEltYWdlIFBheWxvYWQgSGVhZGVycywgMi40LjMuMykgKi8KKyNkZWZpbmUgVVZDX1NUUkVBTV9FT0gJKDEgPDwgNykKKyNkZWZpbmUgVVZDX1NUUkVBTV9FUlIJKDEgPDwgNikKKyNkZWZpbmUgVVZDX1NUUkVBTV9TVEkJKDEgPDwgNSkKKyNkZWZpbmUgVVZDX1NUUkVBTV9SRVMJKDEgPDwgNCkKKyNkZWZpbmUgVVZDX1NUUkVBTV9TQ1IJKDEgPDwgMykKKyNkZWZpbmUgVVZDX1NUUkVBTV9QVFMJKDEgPDwgMikKKyNkZWZpbmUgVVZDX1NUUkVBTV9FT0YJKDEgPDwgMSkKKyNkZWZpbmUgVVZDX1NUUkVBTV9GSUQJKDEgPDwgMCkKKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTMyIHRoaXNfcHRzOworCXU4IHRoaXNfZmlkOworCWludCByZW1haW5pbmdfbGVuID0gbGVuOworCisJZG8geworCQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgMjA0MCk7CisKKwkJLyogUGF5bG9hZHMgYXJlIHByZWZpeGVkIHdpdGggYSBVVkMtc3R5bGUgaGVhZGVyLiAgV2UKKwkJICAgY29uc2lkZXIgYSBmcmFtZSB0byBzdGFydCB3aGVuIHRoZSBGSUQgdG9nZ2xlcywgb3IgdGhlIFBUUworCQkgICBjaGFuZ2VzLiAgQSBmcmFtZSBlbmRzIHdoZW4gRU9GIGlzIHNldCwgYW5kIHdlJ3ZlIHJlY2VpdmVkCisJCSAgIHRoZSBjb3JyZWN0IG51bWJlciBvZiBieXRlcy4gKi8KKworCQkvKiBWZXJpZnkgVVZDIGhlYWRlci4gIEhlYWRlciBsZW5ndGggaXMgYWx3YXlzIDEyICovCisJCWlmIChkYXRhWzBdICE9IDEyIHx8IGxlbiA8IDEyKSB7CisJCQlQREVCVUcoRF9QQUNLLCAiYmFkIGhlYWRlciIpOworCQkJZ290byBkaXNjYXJkOworCQl9CisKKwkJLyogQ2hlY2sgZXJyb3JzICovCisJCWlmIChkYXRhWzFdICYgVVZDX1NUUkVBTV9FUlIpIHsKKwkJCVBERUJVRyhEX1BBQ0ssICJwYXlsb2FkIGVycm9yIik7CisJCQlnb3RvIGRpc2NhcmQ7CisJCX0KKworCQkvKiBFeHRyYWN0IFBUUyBhbmQgRklEICovCisJCWlmICghKGRhdGFbMV0gJiBVVkNfU1RSRUFNX1BUUykpIHsKKwkJCVBERUJVRyhEX1BBQ0ssICJQVFMgbm90IHByZXNlbnQiKTsKKwkJCWdvdG8gZGlzY2FyZDsKKwkJfQorCQl0aGlzX3B0cyA9IChkYXRhWzVdIDw8IDI0KSB8IChkYXRhWzRdIDw8IDE2KQorCQkJCQkJfCAoZGF0YVszXSA8PCA4KSB8IGRhdGFbMl07CisJCXRoaXNfZmlkID0gZGF0YVsxXSAmIFVWQ19TVFJFQU1fRklEOworCisJCS8qIElmIFBUUyBvciBGSUQgaGFzIGNoYW5nZWQsIHN0YXJ0IGEgbmV3IGZyYW1lLiAqLworCQlpZiAodGhpc19wdHMgIT0gc2QtPmxhc3RfcHRzIHx8IHRoaXNfZmlkICE9IHNkLT5sYXN0X2ZpZCkgeworCQkJaWYgKGdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9PSBJTlRFUl9QQUNLRVQpCisJCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCisJCQkJCQlOVUxMLCAwKTsKKwkJCXNkLT5sYXN0X3B0cyA9IHRoaXNfcHRzOworCQkJc2QtPmxhc3RfZmlkID0gdGhpc19maWQ7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCisJCQkJCWRhdGEgKyAxMiwgbGVuIC0gMTIpOworCQkvKiBJZiB0aGlzIHBhY2tldCBpcyBtYXJrZWQgYXMgRU9GLCBlbmQgdGhlIGZyYW1lICovCisJCX0gZWxzZSBpZiAoZGF0YVsxXSAmIFVWQ19TVFJFQU1fRU9GKSB7CisJCQlzZC0+bGFzdF9wdHMgPSAwOworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCisJCQkJCWRhdGEgKyAxMiwgbGVuIC0gMTIpOworCQl9IGVsc2UgeworCisJCQkvKiBBZGQgdGhlIGRhdGEgZnJvbSB0aGlzIHBheWxvYWQgKi8KKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwKKwkJCQkJZGF0YSArIDEyLCBsZW4gLSAxMik7CisJCX0KKworCQkvKiBEb25lIHRoaXMgcGF5bG9hZCAqLworCQlnb3RvIHNjYW5fbmV4dDsKKworZGlzY2FyZDoKKwkJLyogRGlzY2FyZCBkYXRhIHVudGlsIGEgbmV3IGZyYW1lIHN0YXJ0cy4gKi8KKwkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisKK3NjYW5fbmV4dDoKKwkJcmVtYWluaW5nX2xlbiAtPSBsZW47CisJCWRhdGEgKz0gbGVuOworCX0gd2hpbGUgKHJlbWFpbmluZ19sZW4gPiAwKTsKK30KKworLyogY29udHJvbHMgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29udHJhc3QgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29udHJhc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmF1dG9nYWluID0gdmFsOworCisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisJCWlmICh2YWwpCisJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyB8PSAoMSA8PCBFWFBPX0lEWCk7CisJCWVsc2UKKwkJCWdzcGNhX2Rldi0+Y3RybF9pbmFjICY9IH4oMSA8PCBFWFBPX0lEWCk7CisJCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CisJfQorCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YXV0b2dhaW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmV4cG9zdXJlID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmV4cG9zdXJlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+c2hhcnBuZXNzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+c2hhcnBuZXNzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5zYXR1ciA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldHNhdHVyKGdzcGNhX2Rldik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworc3RhdGljIGludCBzZF9nZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5zYXR1cjsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+ZnJlcSA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGZyZXEoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+ZnJlcTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9xdWVyeW1lbnUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICptZW51KQoreworCXN3aXRjaCAobWVudS0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZOgorCQlzd2l0Y2ggKG1lbnUtPmluZGV4KSB7CisJCWNhc2UgMDoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0RJU0FCTEVEICovCisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIk5vRmxpa2VyIik7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAxOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNTBIWiAqLworCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICI1MCBIeiIpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgMjoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNjAgSHoiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CisJLm5hbWUgICAgID0gTU9EVUxFX05BTUUsCisJLmN0cmxzICAgID0gc2RfY3RybHMsCisJLm5jdHJscyAgID0gQVJSQVlfU0laRShzZF9jdHJscyksCisJLmNvbmZpZyAgID0gc2RfY29uZmlnLAorCS5pbml0ICAgICA9IHNkX2luaXQsCisJLnN0YXJ0ICAgID0gc2Rfc3RhcnQsCisJLnN0b3BOICAgID0gc2Rfc3RvcE4sCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNmY4LCAweDMwMDMpfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSAgID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSAgICAgID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kICAgID0gZ3NwY2Ffc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYwppbmRleCA0NzA2YTgyLi4wYzg3YzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2RlZmluZSBNT0RVTEVfTkFNRSAicGFjMjA3IgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogCiBNT0RVTEVfQVVUSE9SKCJIYW5zIGRlIEdvZWRlIDxoZGdvZWRlQHJlZGhhdC5jb20+Iik7CkBAIC03Nyw3ICs3OCw3IEBACiBzdGF0aWMgaW50IHNkX3NldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAjZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgICAgewpAQCAtNDk1LDYgKzQ5NiwyNSBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0lOUFVUCitzdGF0aWMgaW50IHNkX2ludF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwJCS8qIGludGVycnVwdCBwYWNrZXQgZGF0YSAqLworCQkJaW50IGxlbikJCS8qIGludGVycnB1dCBwYWNrZXQgbGVuZ3RoICovCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAobGVuID09IDIgJiYgZGF0YVswXSA9PSAweDVhICYmIGRhdGFbMV0gPT0gMHg1YSkgeworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAxKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC01MDYsNiArNTI2LDkgQEAKIAkuc3RvcE4gPSBzZF9zdG9wTiwKIAkuZHFfY2FsbGJhY2sgPSBwYWMyMDdfZG9fYXV0b19nYWluLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzAyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYwppbmRleCBkZTBiNjZjLi4yYTY4MjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYwpAQCAtNCw3ICs0LDkgQEAKICAqCiAgKiBWNEwyIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CiAgKgotICogU2VwYXJhdGVkIGZyb20gUGl4YXJ0IFBBQzczMTEgbGlicmFyeSBieSBN4XJ0b24gTultZXRoIDxubTEyN0BmcmVlbWFpbC5odT4KKyAqIFNlcGFyYXRlZCBmcm9tIFBpeGFydCBQQUM3MzExIGxpYnJhcnkgYnkgTcOhcnRvbiBOw6ltZXRoCisgKiBDYW1lcmEgYnV0dG9uIGlucHV0IGhhbmRsaW5nIGJ5IE3DoXJ0b24gTsOpbWV0aCA8bm0xMjdAZnJlZW1haWwuaHU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNw6FydG9uIE7DqW1ldGggPG5tMTI3QGZyZWVtYWlsLmh1PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjIsMzMgKzI0LDI2IEBACiAgKi8KIAogLyogU29tZSBkb2N1bWVudGF0aW9uIGFib3V0IHZhcmlvdXMgcmVnaXN0ZXJzIGFzIGRldGVybWluZWQgYnkgdHJpYWwgYW5kIGVycm9yLgotICAgV2hlbiB0aGUgcmVnaXN0ZXIgYWRkcmVzc2VzIGRpZmZlciBiZXR3ZWVuIHRoZSA3MjAyIGFuZCB0aGUgNzMxMSB0aGUgMgotICAgZGlmZmVyZW50IGFkZHJlc3NlcyBhcmUgd3JpdHRlbiBhcyA3MzAyYWRkci83MzExYWRkciwgd2hlbiBvbmUgb2YgdGhlIDIKLSAgIGFkZHJlc3NlcyBpcyBhIC0gc2lnbiB0aGF0IHJlZ2lzdGVyIGRlc2NyaXB0aW9uIGlzIG5vdCB2YWxpZCBmb3IgdGhlCi0gICBtYXRjaGluZyBJQy4KIAogICAgUmVnaXN0ZXIgcGFnZSAxOgogCiAgICBBZGRyZXNzCURlc2NyaXB0aW9uCi0gICAtLzB4MDgJVW5rbm93biBjb21wcmVzc29yIHJlbGF0ZWQsIG11c3QgYWx3YXlzIGJlIDggZXhjZXB0IHdoZW4gbm90Ci0JCWluIDY0MHg0ODAgcmVzb2x1dGlvbiBhbmQgcGFnZSA0IHJlZyAyIDw9IDMgdGhlbiBzZXQgaXQgdG8gOSAhCi0gICAtLzB4MWIJQXV0byB3aGl0ZSBiYWxhbmNlIHJlbGF0ZWQsIGJpdCAwIGlzIEFXQiBlbmFibGUgKGludmVydGVkKQotCQliaXRzIDM0NSBzZWVtIHRvIHRvZ2dsZSBwZXIgY29sb3IgZ2FpbnMgb24vb2ZmIChpbnZlcnRlZCkKICAgIDB4NzgJCUdsb2JhbCBjb250cm9sLCBiaXQgNiBjb250cm9scyB0aGUgTEVEIChpbnZlcnRlZCkKLSAgIC0vMHg4MAlKUEVHIGNvbXByZXNzaW9uIHJhdGlvID8gQmVzdCBub3QgdG91Y2hlZAogCi0gICBSZWdpc3RlciBwYWdlIDMvNDoKKyAgIFJlZ2lzdGVyIHBhZ2UgMzoKIAogICAgQWRkcmVzcwlEZXNjcmlwdGlvbgotICAgMHgwMgkJQ2xvY2sgZGl2aWRlciAyLTYzLCBmcHMgPX4gNjAgLyB2YWwuIE11c3QgYmUgYSBtdWx0aXBsZSBvZiAzIG9uCisgICAweDAyCQlDbG9jayBkaXZpZGVyIDMtNjMsIGZwcyA9IDkwIC8gdmFsLiBNdXN0IGJlIGEgbXVsdGlwbGUgb2YgMyBvbgogCQl0aGUgNzMwMiwgc28gb25lIG9mIDMsIDYsIDksIC4uLiwgZXhjZXB0IHdoZW4gYmV0d2VlbiA2IGFuZCAxMj8KLSAgIC0vMHgwZglNYXN0ZXIgZ2FpbiAxLTI0NSwgbG93IHZhbHVlID0gaGlnaCBnYWluCi0gICAweDEwLy0JTWFzdGVyIGdhaW4gMC0zMQotICAgLS8weDEwCUFub3RoZXIgZ2FpbiAwLTE1LCBsaW1pdGVkIGluZmx1ZW5jZSAoMS0yeCBnYWluIEkgZ3Vlc3MpCisgICAweDAzCQlWYXJpYWJsZSBmcmFtZXJhdGUgY3RybCByZWcyPT0zOiAwIC0+IH4zMCBmcHMsIDI1NSAtPiB+MjJmcHMKKyAgIDB4MDQJCUFub3RoZXIgdmFyIGZyYW1lcmF0ZSBjdHJsIHJlZzI9PTMsIHJlZzM9PTA6IDAgLT4gfjMwIGZwcywKKwkJNjMgLT4gfjI3IGZwcywgdGhlIDIgbXNiJ3MgbXVzdCBhbHdheXMgYmUgMSAhIQorICAgMHgwNQkJQW5vdGhlciB2YXIgZnJhbWVyYXRlIGN0cmwgcmVnMj09MywgcmVnMz09MCwgcmVnND09MHhjMDoKKwkJMSAtPiB+MzAgZnBzLCAyIC0+IH4yMCBmcHMKKyAgIDB4MGUJCUV4cG9zdXJlIGJpdHMgMC03LCAwLTQ0OCwgMCA9IHVzZSBmdWxsIGZyYW1lIHRpbWUKKyAgIDB4MGYJCUV4cG9zdXJlIGJpdCA4LCAwLTQ0OCwgNDQ4ID0gbm8gZXhwb3N1cmUgYXQgYWxsCisgICAweDEwCQlNYXN0ZXIgZ2FpbiAwLTMxCiAgICAweDIxCQlCaXRmaWVsZDogMC0xIHVudXNlZCwgMi0zIHZmbGlwL2hmbGlwLCA0LTUgdW5rbm93biwgNi03IHVudXNlZAotICAgLS8weDI3CVNlZW1zIHRvIHRvZ2dsZSB2YXJpb3VzIGdhaW5zIG9uIC8gb2ZmLCBTZXR0aW5nIGJpdCA3IHNlZW1zIHRvCi0JCWNvbXBsZXRlbHkgZGlzYWJsZSB0aGUgYW5hbG9nIGFtcGxpZmljYXRpb24gYmxvY2suIFNldCB0byAweDY4Ci0JCWZvciBtYXggZ2FpbiwgMHgxNCBmb3IgbWluaW1hbCBnYWluLgogCiAgICBUaGUgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBpbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIApAQCAtNjgsNiArNjMsNyBAQAogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJwYWM3MzAyIgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogCkBAIC04Niw4ICs4Miw4IEBACiAJdW5zaWduZWQgY2hhciByZWRfYmFsYW5jZTsKIAl1bnNpZ25lZCBjaGFyIGJsdWVfYmFsYW5jZTsKIAl1bnNpZ25lZCBjaGFyIGdhaW47Ci0JdW5zaWduZWQgY2hhciBleHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGF1dG9nYWluOworCXVuc2lnbmVkIHNob3J0IGV4cG9zdXJlOwogCV9fdTggaGZsaXA7CiAJX191OCB2ZmxpcDsKIAl1OCBmbGFnczsKQEAgLTEyNCw4ICsxMjAsNyBAQAogc3RhdGljIGludCBzZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewotLyogVGhpcyBjb250cm9sIGlzIHBhYzczMDIgb25seSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTE0MSw3ICsxMzYsNiBAQAogCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCiAJfSwKLS8qIFRoaXMgY29udHJvbCBpcyBmb3IgYm90aCB0aGUgNzMwMiBhbmQgdGhlIDczMTEgKi8KIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKQEAgLTE1Nyw3ICsxNTEsNiBAQAogCSAgICAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCiAJICAgIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKIAl9LAotLyogVGhpcyBjb250cm9sIGlzIHBhYzczMDIgb25seSAqLwogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCkBAIC0yMTUsNyArMjA4LDYgQEAKIAkgICAgLnNldCA9IHNkX3NldGJsdWViYWxhbmNlLAogCSAgICAuZ2V0ID0gc2RfZ2V0Ymx1ZWJhbGFuY2UsCiAJfSwKLS8qIEFsbCBjb250cm9scyBiZWxvdyBhcmUgZm9yIGJvdGggdGhlIDczMDIgYW5kIHRoZSA3MzExICovCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfR0FJTiwKQEAgLTIzOCwxMSArMjMwLDEwIEBACiAJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgICAgPSAiRXhwb3N1cmUiLAogCQkubWluaW11bSA9IDAsCi0jZGVmaW5lIEVYUE9TVVJFX01BWCAyNTUKLQkJLm1heGltdW0gPSBFWFBPU1VSRV9NQVgsCisJCS5tYXhpbXVtID0gMTAyMywKIAkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBFWFBPU1VSRV9ERUYgIDE2IC8qICAzMiBtcyAvIDMwIGZwcyAqLwotI2RlZmluZSBFWFBPU1VSRV9LTkVFIDUwIC8qIDEwMCBtcyAvIDEwIGZwcyAqLworI2RlZmluZSBFWFBPU1VSRV9ERUYgIDY2ICAvKiAgMzMgbXMgLyAzMCBmcHMgKi8KKyNkZWZpbmUgRVhQT1NVUkVfS05FRSAxMzMgLyogIDY2IG1zIC8gMTUgZnBzICovCiAJCS5kZWZhdWx0X3ZhbHVlID0gRVhQT1NVUkVfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCkBAIC0zMDEsNyArMjkyLDYgQEAKIH07CiAKICNkZWZpbmUgTE9BRF9QQUdFMwkJMjU1Ci0jZGVmaW5lIExPQURfUEFHRTQJCTI1NAogI2RlZmluZSBFTkRfT0ZfU0VRVUVOQ0UJCTAKIAogLyogcGFjIDczMDIgKi8KQEAgLTM3OSw3ICszNjksNyBAQAogI2RlZmluZSBTS0lQCQkweGFhCiAvKiBwYWdlIDMgLSB0aGUgdmFsdWUgU0tJUCBzYXlzIHNraXAgdGhlIGluZGV4IC0gc2VlIHJlZ193X3BhZ2UoKSAqLwogc3RhdGljIGNvbnN0IF9fdTggcGFnZTNfNzMwMltdID0gewotCTB4OTAsIDB4NDAsIDB4MDMsIDB4NTAsIDB4YzIsIDB4MDEsIDB4MTQsIDB4MTYsCisJMHg5MCwgMHg0MCwgMHgwMywgMHgwMCwgMHhjMCwgMHgwMSwgMHgxNCwgMHgxNiwKIAkweDE0LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDMzLCAweDAwLAogCTB4MGYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgwMSwgMHhiMywgMHgwMSwgMHgwMCwKQEAgLTM4OCw3ICszNzgsNyBAQAogCTB4YTQsIDB4YjgsIDB4ZTAsIDB4MmEsIDB4ZjYsIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkweDAwLCAweGZjLCAweDAwLCAweGYyLCAweDFmLCAweDA0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzAsIDB4MTAsIDB4MDAsIDB4MDAsCisJU0tJUCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhjMCwgMHgxMCwgMHgwMCwgMHgwMCwKIAkweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4NDAsIDB4ZmYsIDB4MDMsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKQEAgLTQwMSwxMiArMzkxLDE0IEBACiAJMHgwMAogfTsKIAotc3RhdGljIGludCByZWdfd19idWYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICBfX3U4IGluZGV4LAogCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBidWZmZXIsIGxlbik7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTQxNSwyMCArNDA3LDIzIEBACiAJCQkwLAkJLyogdmFsdWUgKi8KIAkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwKIAkJCTUwMCk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKIAkJUERFQlVHKERfRVJSLCAicmVnX3dfYnVmKCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlcnMgdG8gaW5kZXggMHgleCwgZXJyb3IgJWkiLAogCQlpbmRleCwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCiAKLXN0YXRpYyBpbnQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgIF9fdTggaW5kZXgsCiAJCSAgX191OCB2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWx1ZTsKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtNDM2LDMyICs0MzEsMzIgQEAKIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsIGluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsCiAJCQk1MDApOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwKSB7CiAJCVBERUJVRyhEX0VSUiwgInJlZ193KCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCB2YWx1ZSAweCV4LCBlcnJvciAlaSIsCiAJCWluZGV4LCB2YWx1ZSwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCi1zdGF0aWMgaW50IHJlZ193X3NlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfd19zZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQljb25zdCBfX3U4ICpzZXEsIGludCBsZW4pCiB7Ci0JaW50IHJldCA9IDA7CiAJd2hpbGUgKC0tbGVuID49IDApIHsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCBzZXFbMF0sIHNlcVsxXSk7CisJCXJlZ193KGdzcGNhX2Rldiwgc2VxWzBdLCBzZXFbMV0pOwogCQlzZXEgKz0gMjsKIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogbG9hZCB0aGUgYmVnaW5uaW5nIG9mIGEgcGFnZSAqLwotc3RhdGljIGludCByZWdfd19wYWdlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3BhZ2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJY29uc3QgX191OCAqcGFnZSwgaW50IGxlbikKIHsKIAlpbnQgaW5kZXg7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykgewogCQlpZiAocGFnZVtpbmRleF0gPT0gU0tJUCkJCS8qIHNraXAgdGhpcyBpbmRleCAqLwogCQkJY29udGludWU7CkBAIC00NzcsNTYgKzQ3Miw0NyBAQAogCQkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCAiCiAJCQkidmFsdWUgMHgleCwgZXJyb3IgJWkiLAogCQkJaW5kZXgsIHBhZ2VbaW5kZXhdLCByZXQpOworCQkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogb3V0cHV0IGEgdmFyaWFibGUgc2VxdWVuY2UgKi8KLXN0YXRpYyBpbnQgcmVnX3dfdmFyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3ZhcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQljb25zdCBfX3U4ICpzZXEsCi0JCQljb25zdCBfX3U4ICpwYWdlMywgdW5zaWduZWQgaW50IHBhZ2UzX2xlbiwKLQkJCWNvbnN0IF9fdTggKnBhZ2U0LCB1bnNpZ25lZCBpbnQgcGFnZTRfbGVuKQorCQkJY29uc3QgX191OCAqcGFnZTMsIHVuc2lnbmVkIGludCBwYWdlM19sZW4pCiB7CiAJaW50IGluZGV4LCBsZW47Ci0JaW50IHJldCA9IDA7CiAKIAlmb3IgKDs7KSB7CiAJCWluZGV4ID0gKnNlcSsrOwogCQlsZW4gPSAqc2VxKys7CiAJCXN3aXRjaCAobGVuKSB7CiAJCWNhc2UgRU5EX09GX1NFUVVFTkNFOgotCQkJcmV0dXJuIHJldDsKLQkJY2FzZSBMT0FEX1BBR0U0OgotCQkJcmV0ID0gcmVnX3dfcGFnZShnc3BjYV9kZXYsIHBhZ2U0LCBwYWdlNF9sZW4pOwotCQkJYnJlYWs7CisJCQlyZXR1cm47CiAJCWNhc2UgTE9BRF9QQUdFMzoKLQkJCXJldCA9IHJlZ193X3BhZ2UoZ3NwY2FfZGV2LCBwYWdlMywgcGFnZTNfbGVuKTsKKwkJCXJlZ193X3BhZ2UoZ3NwY2FfZGV2LCBwYWdlMywgcGFnZTNfbGVuKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJaWYgKGxlbiA+IFVTQl9CVUZfU1opIHsKIAkJCQlQREVCVUcoRF9FUlJ8RF9TVFJFQU0sCiAJCQkJCSJJbmNvcnJlY3QgdmFyaWFibGUgc2VxdWVuY2UiKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQlyZXR1cm47CiAJCQl9CiAJCQl3aGlsZSAobGVuID4gMCkgewogCQkJCWlmIChsZW4gPCA4KSB7Ci0JCQkJCXJldCA9IHJlZ193X2J1Zihnc3BjYV9kZXYsCisJCQkJCXJlZ193X2J1Zihnc3BjYV9kZXYsCiAJCQkJCQlpbmRleCwgc2VxLCBsZW4pOwotCQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJCXJldHVybiByZXQ7CiAJCQkJCXNlcSArPSBsZW47CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQlyZXQgPSByZWdfd19idWYoZ3NwY2FfZGV2LCBpbmRleCwgc2VxLCA4KTsKKwkJCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBpbmRleCwgc2VxLCA4KTsKIAkJCQlzZXEgKz0gODsKIAkJCQlpbmRleCArPSA4OwogCQkJCWxlbiAtPSA4OwogCQkJfQogCQl9Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKIAl9CiAJLyogbm90IHJlYWNoZWQgKi8KIH0KQEAgLTU2MCwxMSArNTQ2LDEwIEBACiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBwYWM3MzAyIG9ubHkgKi8KLXN0YXRpYyBpbnQgc2V0YnJpZ2h0Y29udChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRicmlnaHRjb250KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGksIHY7Ci0JaW50IHJldDsKIAlzdGF0aWMgY29uc3QgX191OCBtYXhbMTBdID0KIAkJezB4MjksIDB4MzMsIDB4NDIsIDB4NWEsIDB4NmUsIDB4ODAsIDB4OWYsIDB4YmIsCiAJCSAweGQ0LCAweGVjfTsKQEAgLTU3Miw3ICs1NTcsNyBAQAogCQl7MHgzNSwgMHgzMywgMHgzMywgMHgyZiwgMHgyYSwgMHgyNSwgMHgxZSwgMHgxNywKIAkJIDB4MTEsIDB4MGJ9OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJCS8qIHBhZ2UgMCAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCXYgPSBtYXhbaV07CiAJCXYgKz0gKHNkLT5icmlnaHRuZXNzIC0gQlJJR0hUTkVTU19NQVgpCkBAIC01ODIsMTM2ICs1NjcsMTIxIEBACiAJCQl2ID0gMDsKIAkJZWxzZSBpZiAodiA+IDB4ZmYpCiAJCQl2ID0gMHhmZjsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGEyICsgaSwgdik7CisJCXJlZ193KGdzcGNhX2RldiwgMHhhMiArIGksIHYpOwogCX0KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhkYywgMHgwMSk7Ci0JcmV0dXJuIHJldDsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgcGFjNzMwMiBvbmx5ICovCi1zdGF0aWMgaW50IHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaSwgdjsKLQlpbnQgcmV0OwogCXN0YXRpYyBjb25zdCBpbnQgYVs5XSA9CiAJCXsyMTcsIC0yMTIsIDAsIC0xMDEsIDE3MCwgLTY3LCAtMzgsIC0zMTUsIDM1NX07CiAJc3RhdGljIGNvbnN0IGludCBiWzldID0KIAkJezE5LCAxMDYsIDAsIDE5LCAxMDYsIDEsIDE5LCAxMDYsIDF9OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJLyogcGFnZSAzICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJCQkvKiBwYWdlIDMgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CQkJLyogcGFnZSAwICovCiAJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgewogCQl2ID0gYVtpXSAqIHNkLT5jb2xvcnMgLyBDT0xPUl9NQVggKyBiW2ldOwotCQlpZiAoMCA8PSByZXQpCi0JCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MGYgKyAyICogaSwgKHYgPj4gOCkgJiAweDA3KTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDBmICsgMiAqIGkgKyAxLCB2KTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDBmICsgMiAqIGksICh2ID4+IDgpICYgMHgwNyk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwZiArIDIgKiBpICsgMSwgdik7CiAJfQotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogCVBERUJVRyhEX0NPTkZ8RF9TVFJFQU0sICJjb2xvcjogJWkiLCBzZC0+Y29sb3JzKTsKLQlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXR3aGl0ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4YzYsIHNkLT53aGl0ZV9iYWxhbmNlKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwkJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGM2LCBzZC0+d2hpdGVfYmFsYW5jZSk7CiAKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhkYywgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKIAlQREVCVUcoRF9DT05GfERfU1RSRUFNLCAid2hpdGVfYmFsYW5jZTogJWkiLCBzZC0+d2hpdGVfYmFsYW5jZSk7Ci0JcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzZXRyZWRiYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldHJlZGJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4YzUsIHNkLT5yZWRfYmFsYW5jZSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJCS8qIHBhZ2UgMCAqLworCXJlZ193KGdzcGNhX2RldiwgMHhjNSwgc2QtPnJlZF9iYWxhbmNlKTsKIAotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogCVBERUJVRyhEX0NPTkZ8RF9TVFJFQU0sICJyZWRfYmFsYW5jZTogJWkiLCBzZC0+cmVkX2JhbGFuY2UpOwotCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc2V0Ymx1ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0Ymx1ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4YzcsIHNkLT5ibHVlX2JhbGFuY2UpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CQkJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGM3LCBzZC0+Ymx1ZV9iYWxhbmNlKTsKIAotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogCVBERUJVRyhEX0NPTkZ8RF9TVFJFQU0sICJibHVlX2JhbGFuY2U6ICVpIiwgc2QtPmJsdWVfYmFsYW5jZSk7Ci0JcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJCS8qIHBhZ2UgMyAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDEwLCBzZC0+Z2FpbiA+PiAzKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDMpOwkJCS8qIHBhZ2UgMyAqLworCXJlZ193KGdzcGNhX2RldiwgMHgxMCwgc2QtPmdhaW4gPj4gMyk7CiAKIAkvKiBsb2FkIHJlZ2lzdGVycyB0byBzZW5zb3IgKEJpdCAwLCBhdXRvIGNsZWFyKSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKLQlyZXR1cm4gcmV0OworCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7CiB9CiAKLXN0YXRpYyBpbnQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwotCV9fdTggcmVnOworCV9fdTggY2xvY2tkaXY7CisJX191MTYgZXhwb3N1cmU7CiAKLQkvKiByZWdpc3RlciAyIG9mIGZyYW1lIDMvNCBjb250YWlucyB0aGUgY2xvY2sgZGl2aWRlciBjb25maWd1cmluZyB0aGUKLQkgICBubyBmcHMgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOiA2MCAvIHJlZy4gc2QtPmV4cG9zdXJlIGlzIHRoZQotCSAgIGRlc2lyZWQgZXhwb3N1cmUgdGltZSBpbiBtcy4gKi8KLQlyZWcgPSAxMjAgKiBzZC0+ZXhwb3N1cmUgLyAxMDAwOwotCWlmIChyZWcgPCAyKQotCQlyZWcgPSAyOwotCWVsc2UgaWYgKHJlZyA+IDYzKQotCQlyZWcgPSA2MzsKKwkvKiByZWdpc3RlciAyIG9mIGZyYW1lIDMgY29udGFpbnMgdGhlIGNsb2NrIGRpdmlkZXIgY29uZmlndXJpbmcgdGhlCisJICAgbm8gZnBzIGFjY29yZGluZyB0byB0aGUgZm9ybXVsYTogOTAgLyByZWcuIHNkLT5leHBvc3VyZSBpcyB0aGUKKwkgICBkZXNpcmVkIGV4cG9zdXJlIHRpbWUgaW4gMC41IG1zLiAqLworCWNsb2NrZGl2ID0gKDkwICogc2QtPmV4cG9zdXJlICsgMTk5OSkgLyAyMDAwOwogCi0JLyogT24gdGhlIHBhYzczMDIgcmVnMiBNVVNUIGJlIGEgbXVsdGlwbGUgb2YgMywgc28gcm91bmQgaXQgdG8KLQkgICB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiAzLCBleGNlcHQgd2hlbiBiZXR3ZWVuIDYgYW5kIDEyPyAqLwotCWlmIChyZWcgPCA2IHx8IHJlZyA+IDEyKQotCQlyZWcgPSAoKHJlZyArIDEpIC8gMykgKiAzOwotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMyk7CQkvKiBwYWdlIDMgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgwMiwgcmVnKTsKKwkvKiBOb3RlIGNsb2NrZGl2ID0gMyBhbHNvIHdvcmtzLCBidXQgd2hlbiBydW5uaW5nIGF0IDMwIGZwcywgZGVwZW5kaW5nCisJICAgb24gdGhlIHNjZW5lIGJlaW5nIHJlY29yZGVkLCB0aGUgY2FtZXJhIHN3aXRjaGVzIHRvIGFub3RoZXIKKwkgICBxdWFudGl6YXRpb24gdGFibGUgZm9yIGNlcnRhaW4gSlBFRyBibG9ja3MsIGFuZCB3ZSBkb24ndCBrbm93IGhvdworCSAgIHRvIGRlY29tcHJlc3MgdGhlc2UgYmxvY2tzLiBTbyB3ZSBjYXAgdGhlIGZyYW1lcmF0ZSBhdCAxNSBmcHMgKi8KKwlpZiAoY2xvY2tkaXYgPCA2KQorCQljbG9ja2RpdiA9IDY7CisJZWxzZSBpZiAoY2xvY2tkaXYgPiA2MykKKwkJY2xvY2tkaXYgPSA2MzsKKworCS8qIHJlZzIgTVVTVCBiZSBhIG11bHRpcGxlIG9mIDMsIGV4Y2VwdCB3aGVuIGJldHdlZW4gNiBhbmQgMTI/CisJICAgQWx3YXlzIHJvdW5kIHVwLCBvdGhlcndpc2Ugd2UgY2Fubm90IGdldCB0aGUgZGVzaXJlZCBmcmFtZXRpbWUKKwkgICB1c2luZyB0aGUgcGFydGlhbCBmcmFtZSB0aW1lIGV4cG9zdXJlIGNvbnRyb2wgKi8KKwlpZiAoY2xvY2tkaXYgPCA2IHx8IGNsb2NrZGl2ID4gMTIpCisJCWNsb2NrZGl2ID0gKChjbG9ja2RpdiArIDIpIC8gMykgKiAzOworCisJLyogZnJhbWUgZXhwb3N1cmUgdGltZSBpbiBtcyA9IDEwMDAgKiBjbG9ja2RpdiAvIDkwICAgIC0+CisJZXhwb3N1cmUgPSAoc2QtPmV4cG9zdXJlIC8gMikgKiA0NDggLyAoMTAwMCAqIGNsb2NrZGl2IC8gOTApICovCisJZXhwb3N1cmUgPSAoc2QtPmV4cG9zdXJlICogNDUgKiA0NDgpIC8gKDEwMDAgKiBjbG9ja2Rpdik7CisJLyogMCA9IHVzZSBmdWxsIGZyYW1ldGltZSwgNDQ4ID0gbm8gZXhwb3N1cmUsIHJldmVyc2UgaXQgKi8KKwlleHBvc3VyZSA9IDQ0OCAtIGV4cG9zdXJlOworCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJCQkvKiBwYWdlIDMgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDIsIGNsb2NrZGl2KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MGUsIGV4cG9zdXJlICYgMHhmZik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDBmLCBleHBvc3VyZSA+PiA4KTsKIAogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAotc3RhdGljIGludCBzZXRodmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0aHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKIAl1OCBkYXRhLCBoZmxpcCwgdmZsaXA7CiAKIAloZmxpcCA9IHNkLT5oZmxpcDsKQEAgLTcyMSw0OCArNjkxLDM3IEBACiAJaWYgKHNkLT5mbGFncyAmIEZMX1ZGTElQKQogCQl2ZmxpcCA9ICF2ZmxpcDsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMyk7CQkvKiBwYWdlIDMgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDMpOwkJCS8qIHBhZ2UgMyAqLwogCWRhdGEgPSAoaGZsaXAgPyAweDA4IDogMHgwMCkgfCAodmZsaXAgPyAweDA0IDogMHgwMCk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MjEsIGRhdGEpOworCXJlZ193KGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisKIAkvKiBsb2FkIHJlZ2lzdGVycyB0byBzZW5zb3IgKEJpdCAwLCBhdXRvIGNsZWFyKSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKLQlyZXR1cm4gcmV0OworCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSBmb3IgcGFjNzMwMiAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlyZXR1cm4gcmVnX3dfc2VxKGdzcGNhX2RldiwgaW5pdF83MzAyLCBzaXplb2YoaW5pdF83MzAyKS8yKTsKKwlyZWdfd19zZXEoZ3NwY2FfZGV2LCBpbml0XzczMDIsIHNpemVvZihpbml0XzczMDIpLzIpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0ID0gMDsKIAogCXNkLT5zb2ZfcmVhZCA9IDA7CiAKLQlyZXQgPSByZWdfd192YXIoZ3NwY2FfZGV2LCBzdGFydF83MzAyLAotCQlwYWdlM183MzAyLCBzaXplb2YocGFnZTNfNzMwMiksCi0JCU5VTEwsIDApOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0YnJpZ2h0Y29udChnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0Y29sb3JzKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXR3aGl0ZWJhbGFuY2UoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldHJlZGJhbGFuY2UoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGJsdWViYWxhbmNlKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRnYWluKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRleHBvc3VyZShnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0aHZmbGlwKGdzcGNhX2Rldik7CisJcmVnX3dfdmFyKGdzcGNhX2Rldiwgc3RhcnRfNzMwMiwKKwkJcGFnZTNfNzMwMiwgc2l6ZW9mKHBhZ2UzXzczMDIpKTsKKwlzZXRicmlnaHRjb250KGdzcGNhX2Rldik7CisJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJc2V0d2hpdGViYWxhbmNlKGdzcGNhX2Rldik7CisJc2V0cmVkYmFsYW5jZShnc3BjYV9kZXYpOworCXNldGJsdWViYWxhbmNlKGdzcGNhX2Rldik7CisJc2V0Z2Fpbihnc3BjYV9kZXYpOworCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7CisJc2V0aHZmbGlwKGdzcGNhX2Rldik7CiAKIAkvKiBvbmx5IHJlc29sdXRpb24gNjQweDQ4MCBpcyBzdXBwb3J0ZWQgZm9yIHBhYzczMDIgKi8KIApAQCAtNzcxLDM0ICs3MzAsMjcgQEAKIAlhdG9taWNfc2V0KCZzZC0+YXZnX2x1bSwgLTEpOwogCiAJLyogc3RhcnQgc3RyZWFtICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHgwMSk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlpbnQgcmV0OwogCiAJLyogc3RvcCBzdHJlYW0gKi8KLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHgwMCk7CiB9CiAKIC8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQgMCBhbmQgb24gZGlzY29ubmVjdCBmb3IgcGFjNzMwMiAqLwogc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCWludCByZXQ7Ci0KIAlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKIAkJcmV0dXJuOwotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4NDApOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQwKTsKIH0KIAogLyogSW5jbHVkZSBwYWMgY29tbW9uIHNvZiBkZXRlY3Rpb24gZnVuY3Rpb25zICovCkBAIC04MDgsMjIgKzc2MCwxMyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgYXZnX2x1bSA9IGF0b21pY19yZWFkKCZzZC0+YXZnX2x1bSk7Ci0JaW50IGRlc2lyZWRfbHVtLCBkZWFkem9uZTsKKwlpbnQgZGVzaXJlZF9sdW07CisJY29uc3QgaW50IGRlYWR6b25lID0gMzA7CiAKIAlpZiAoYXZnX2x1bSA9PSAtMSkKIAkJcmV0dXJuOwogCi0JZGVzaXJlZF9sdW0gPSAyNzAgKyBzZC0+YnJpZ2h0bmVzcyAqIDQ7Ci0JLyogSGFjayBoYWNrLCB3aXRoIHRoZSA3MjAyIHRoZSBmaXJzdCBleHBvc3VyZSBzdGVwIGlzCi0JICAgcHJldHR5IGxhcmdlLCBzbyBpZiB3ZSdyZSBhYm91dCB0byBtYWtlIHRoZSBmaXJzdAotCSAgIGV4cG9zdXJlIGluY3JlYXNlIG1ha2UgdGhlIGRlYWR6b25lIGxhcmdlIHRvIGF2b2lkCi0JICAgb3NjaWxhdGluZyAqLwotCWlmIChkZXNpcmVkX2x1bSA+IGF2Z19sdW0gJiYgc2QtPmdhaW4gPT0gR0FJTl9ERUYgJiYKLQkJCXNkLT5leHBvc3VyZSA+IEVYUE9TVVJFX0RFRiAmJgotCQkJc2QtPmV4cG9zdXJlIDwgNDIpCi0JCWRlYWR6b25lID0gOTA7Ci0JZWxzZQotCQlkZWFkem9uZSA9IDMwOworCWRlc2lyZWRfbHVtID0gMjcwICsgc2QtPmJyaWdodG5lc3M7CiAKIAlpZiAoc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMgPiAwKQogCQlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcy0tOwpAQCAtOTQ3LDcgKzg5MCw3IEBACiAJc2QtPmJyaWdodG5lc3MgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRicmlnaHRjb250KGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTk2Niw3ICs5MDksNyBAQAogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgewogCQlzZXRicmlnaHRjb250KGdzcGNhX2Rldik7CiAJfQotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtOTg0LDcgKzkyNyw3IEBACiAJc2QtPmNvbG9ycyA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGNvbG9ycyhnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTk5OCwxNCArOTQxLDExIEBACiBzdGF0aWMgaW50IHNkX3NldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldCA9IDA7CiAKIAlzZC0+d2hpdGVfYmFsYW5jZSA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0JCXJldCA9IHNldHdoaXRlYmFsYW5jZShnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gMDsKLQlyZXR1cm4gcmV0OworCQlzZXR3aGl0ZWJhbGFuY2UoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMDE5LDE0ICs5NTksMTEgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0cmVkYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldCA9IDA7CiAKIAlzZC0+cmVkX2JhbGFuY2UgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlyZXQgPSBzZXRyZWRiYWxhbmNlKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSAwOwotCXJldHVybiByZXQ7CisJCXNldHJlZGJhbGFuY2UoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHJlZGJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTA0MCwxNCArOTc3LDExIEBACiBzdGF0aWMgaW50IHNkX3NldGJsdWViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0ID0gMDsKIAogCXNkLT5ibHVlX2JhbGFuY2UgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlyZXQgPSBzZXRibHVlYmFsYW5jZShnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gMDsKLQlyZXR1cm4gcmV0OworCQlzZXRibHVlYmFsYW5jZShnc3BjYV9kZXYpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Ymx1ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTA2NSw3ICs5OTksNyBAQAogCXNkLT5nYWluID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0Z2Fpbihnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMDgzLDcgKzEwMTcsNyBAQAogCXNkLT5leHBvc3VyZSA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMTE0LDcgKzEwNDgsNyBAQAogCQl9CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMTMyLDcgKzEwNjYsNyBAQAogCXNkLT5oZmxpcCA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGh2ZmxpcChnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0aGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTE1MCw3ICsxMDg0LDcgQEAKIAlzZC0+dmZsaXAgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRodmZsaXAoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTExNjUsNyArMTA5OSw2IEBACiBzdGF0aWMgaW50IHNkX2RiZ19zX3JlZ2lzdGVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewotCWludCByZXQgPSAtRUlOVkFMOwogCV9fdTggaW5kZXg7CiAJX191OCB2YWx1ZTsKIApAQCAtMTE4NSwxNCArMTExOCwxMiBAQAogCQkvKiBOb3RlIHRoYXQgdGhlcmUgc2hhbGwgYmUgbm8gYWNjZXNzIHRvIG90aGVyIHBhZ2UKIAkJICAgYnkgYW55IG90aGVyIGZ1bmN0aW9uIGJldHdlZW4gdGhlIHBhZ2Ugc3dpdGggYW5kCiAJCSAgIHRoZSBhY3R1YWwgcmVnaXN0ZXIgd3JpdGUgKi8KLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgaW5kZXgsIHZhbHVlKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJCS8qIHBhZ2UgMCAqLworCQlyZWdfdyhnc3BjYV9kZXYsIGluZGV4LCB2YWx1ZSk7CiAKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKIAl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2NoaXBfaWRlbnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LApAQCAtMTIxMCw4ICsxMTQxLDM5IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19JTlBVVAorc3RhdGljIGludCBzZF9pbnRfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCQkvKiBpbnRlcnJ1cHQgcGFja2V0IGRhdGEgKi8KKwkJCWludCBsZW4pCQkvKiBpbnRlcnJwdXQgcGFja2V0IGxlbmd0aCAqLworeworCWludCByZXQgPSAtRUlOVkFMOworCXU4IGRhdGEwLCBkYXRhMTsKKworCWlmIChsZW4gPT0gMikgeworCQlkYXRhMCA9IGRhdGFbMF07CisJCWRhdGExID0gZGF0YVsxXTsKKwkJaWYgKChkYXRhMCA9PSAweDAwICYmIGRhdGExID09IDB4MTEpIHx8CisJCSAgICAoZGF0YTAgPT0gMHgyMiAmJiBkYXRhMSA9PSAweDMzKSB8fAorCQkgICAgKGRhdGEwID09IDB4NDQgJiYgZGF0YTEgPT0gMHg1NSkgfHwKKwkJICAgIChkYXRhMCA9PSAweDY2ICYmIGRhdGExID09IDB4NzcpIHx8CisJCSAgICAoZGF0YTAgPT0gMHg4OCAmJiBkYXRhMSA9PSAweDk5KSB8fAorCQkgICAgKGRhdGEwID09IDB4YWEgJiYgZGF0YTEgPT0gMHhiYikgfHwKKwkJICAgIChkYXRhMCA9PSAweGNjICYmIGRhdGExID09IDB4ZGQpIHx8CisJCSAgICAoZGF0YTAgPT0gMHhlZSAmJiBkYXRhMSA9PSAweGZmKSkgeworCQkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOworCQkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCQlyZXQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uIGZvciBwYWM3MzAyICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApAQCAtMTIyNiw2ICsxMTg4LDkgQEAKIAkuc2V0X3JlZ2lzdGVyID0gc2RfZGJnX3NfcmVnaXN0ZXIsCiAJLmdldF9jaGlwX2lkZW50ID0gc2RfY2hpcF9pZGVudCwKICNlbmRpZgorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYwppbmRleCA0MmNmY2RmLi40NGZlZDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYwpAQCAtNTEsNiArNTEsNyBAQAogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJwYWM3MzExIgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogCiBNT0RVTEVfQVVUSE9SKCJUaG9tYXMgS2Fpc2VyIHRob21hc0BrYWlzZXItbGludXgubGkiKTsKQEAgLTg4LDcgKzg5LDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogLyogVGhpcyBjb250cm9sIGlzIGZvciBib3RoIHRoZSA3MzAyIGFuZCB0aGUgNzMxMSAqLwogCXsKIAkgICAgewpAQCAtMjAwLDcgKzIwMSw2IEBACiAJCS5wcml2ID0gMH0sCiB9OwogCi0jZGVmaW5lIExPQURfUEFHRTMJCTI1NQogI2RlZmluZSBMT0FEX1BBR0U0CQkyNTQKICNkZWZpbmUgRU5EX09GX1NFUVVFTkNFCQkwCiAKQEAgLTI1OSwxMiArMjU5LDE0IEBACiAJMHgyMywgMHgyOCwgMHgwNCwgMHgxMSwgMHgwMCwgMHgwMAogfTsKIAotc3RhdGljIGludCByZWdfd19idWYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICBfX3U4IGluZGV4LAogCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBidWZmZXIsIGxlbik7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTI3MywyMCArMjc1LDIzIEBACiAJCQkwLAkJLyogdmFsdWUgKi8KIAkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwKIAkJCTUwMCk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKIAkJUERFQlVHKERfRVJSLCAicmVnX3dfYnVmKCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlcnMgdG8gaW5kZXggMHgleCwgZXJyb3IgJWkiLAogCQlpbmRleCwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCiAKLXN0YXRpYyBpbnQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgIF9fdTggaW5kZXgsCiAJCSAgX191OCB2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWx1ZTsKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtMjk0LDMyICsyOTksMzIgQEAKIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsIGluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsCiAJCQk1MDApOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwKSB7CiAJCVBERUJVRyhEX0VSUiwgInJlZ193KCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCB2YWx1ZSAweCV4LCBlcnJvciAlaSIsCiAJCWluZGV4LCB2YWx1ZSwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCi1zdGF0aWMgaW50IHJlZ193X3NlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfd19zZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQljb25zdCBfX3U4ICpzZXEsIGludCBsZW4pCiB7Ci0JaW50IHJldCA9IDA7CiAJd2hpbGUgKC0tbGVuID49IDApIHsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCBzZXFbMF0sIHNlcVsxXSk7CisJCXJlZ193KGdzcGNhX2Rldiwgc2VxWzBdLCBzZXFbMV0pOwogCQlzZXEgKz0gMjsKIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogbG9hZCB0aGUgYmVnaW5uaW5nIG9mIGEgcGFnZSAqLwotc3RhdGljIGludCByZWdfd19wYWdlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3BhZ2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJY29uc3QgX191OCAqcGFnZSwgaW50IGxlbikKIHsKIAlpbnQgaW5kZXg7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykgewogCQlpZiAocGFnZVtpbmRleF0gPT0gU0tJUCkJCS8qIHNraXAgdGhpcyBpbmRleCAqLwogCQkJY29udGludWU7CkBAIC0zMzUsNTYgKzM0MCw0NyBAQAogCQkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCAiCiAJCQkidmFsdWUgMHgleCwgZXJyb3IgJWkiLAogCQkJaW5kZXgsIHBhZ2VbaW5kZXhdLCByZXQpOworCQkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogb3V0cHV0IGEgdmFyaWFibGUgc2VxdWVuY2UgKi8KLXN0YXRpYyBpbnQgcmVnX3dfdmFyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3ZhcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQljb25zdCBfX3U4ICpzZXEsCi0JCQljb25zdCBfX3U4ICpwYWdlMywgdW5zaWduZWQgaW50IHBhZ2UzX2xlbiwKIAkJCWNvbnN0IF9fdTggKnBhZ2U0LCB1bnNpZ25lZCBpbnQgcGFnZTRfbGVuKQogewogCWludCBpbmRleCwgbGVuOwotCWludCByZXQgPSAwOwogCiAJZm9yICg7OykgewogCQlpbmRleCA9ICpzZXErKzsKIAkJbGVuID0gKnNlcSsrOwogCQlzd2l0Y2ggKGxlbikgewogCQljYXNlIEVORF9PRl9TRVFVRU5DRToKLQkJCXJldHVybiByZXQ7CisJCQlyZXR1cm47CiAJCWNhc2UgTE9BRF9QQUdFNDoKLQkJCXJldCA9IHJlZ193X3BhZ2UoZ3NwY2FfZGV2LCBwYWdlNCwgcGFnZTRfbGVuKTsKLQkJCWJyZWFrOwotCQljYXNlIExPQURfUEFHRTM6Ci0JCQlyZXQgPSByZWdfd19wYWdlKGdzcGNhX2RldiwgcGFnZTMsIHBhZ2UzX2xlbik7CisJCQlyZWdfd19wYWdlKGdzcGNhX2RldiwgcGFnZTQsIHBhZ2U0X2xlbik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWlmIChsZW4gPiBVU0JfQlVGX1NaKSB7CiAJCQkJUERFQlVHKERfRVJSfERfU1RSRUFNLAogCQkJCQkiSW5jb3JyZWN0IHZhcmlhYmxlIHNlcXVlbmNlIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJcmV0dXJuOwogCQkJfQogCQkJd2hpbGUgKGxlbiA+IDApIHsKIAkJCQlpZiAobGVuIDwgOCkgewotCQkJCQlyZXQgPSByZWdfd19idWYoZ3NwY2FfZGV2LAorCQkJCQlyZWdfd19idWYoZ3NwY2FfZGV2LAogCQkJCQkJaW5kZXgsIHNlcSwgbGVuKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwogCQkJCQlzZXEgKz0gbGVuOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJcmV0ID0gcmVnX3dfYnVmKGdzcGNhX2RldiwgaW5kZXgsIHNlcSwgOCk7CisJCQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgaW5kZXgsIHNlcSwgOCk7CiAJCQkJc2VxICs9IDg7CiAJCQkJaW5kZXggKz0gODsKIAkJCQlsZW4gLT0gODsKIAkJCX0KIAkJfQotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7CiAJfQogCS8qIG5vdCByZWFjaGVkICovCiB9CkBAIC00MTIsNDYgKzQwOCwzNiBAQAogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgcGFjNzMxMSBvbmx5ICovCi1zdGF0aWMgaW50IHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTAsIHNkLT5jb250cmFzdCA+PiA0KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOworCXJlZ193KGdzcGNhX2RldiwgMHgxMCwgc2QtPmNvbnRyYXN0ID4+IDQpOwogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAotc3RhdGljIGludCBzZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgZ2FpbiA9IEdBSU5fTUFYIC0gc2QtPmdhaW47Ci0JaW50IHJldDsKIAogCWlmIChnYWluIDwgMSkKIAkJZ2FpbiA9IDE7CiAJZWxzZSBpZiAoZ2FpbiA+IDI0NSkKIAkJZ2FpbiA9IDI0NTsKLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwkJLyogcGFnZSA0ICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MGUsIDB4MDApOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDBmLCBnYWluKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwkJCS8qIHBhZ2UgNCAqLworCXJlZ193KGdzcGNhX2RldiwgMHgwZSwgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDBmLCBnYWluKTsKIAogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAotc3RhdGljIGludCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQ7CiAJX191OCByZWc7CiAKIAkvKiByZWdpc3RlciAyIG9mIGZyYW1lIDMvNCBjb250YWlucyB0aGUgY2xvY2sgZGl2aWRlciBjb25maWd1cmluZyB0aGUKQEAgLTQ2Myw5NCArNDQ5LDcyIEBACiAJZWxzZSBpZiAocmVnID4gNjMpCiAJCXJlZyA9IDYzOwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDA0KTsJCS8qIHBhZ2UgNCAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDAyLCByZWcpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7CQkJLyogcGFnZSA0ICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDAyLCByZWcpOworCiAJLyogUGFnZSAxIHJlZ2lzdGVyIDggbXVzdCBhbHdheXMgYmUgMHgwOCBleGNlcHQgd2hlbiBub3QgaW4KIAkgICA2NDB4NDgwIG1vZGUgYW5kIFBhZ2UzLzQgcmVnIDIgPD0gMyB0aGVuIGl0IG11c3QgYmUgOSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwogCWlmIChnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KWdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2ICYmCiAJCQlyZWcgPD0gMykgewotCQlpZiAoMCA8PSByZXQpCi0JCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MDgsIDB4MDkpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDgsIDB4MDkpOwogCX0gZWxzZSB7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgwOCwgMHgwOCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwOCwgMHgwOCk7CiAJfQogCiAJLyogbG9hZCByZWdpc3RlcnMgdG8gc2Vuc29yIChCaXQgMCwgYXV0byBjbGVhcikgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7Ci0JcmV0dXJuIHJldDsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwogfQogCi1zdGF0aWMgaW50IHNldGh2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRodmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCV9fdTggZGF0YTsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7CQkvKiBwYWdlIDQgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwkJCS8qIHBhZ2UgNCAqLwogCWRhdGEgPSAoc2QtPmhmbGlwID8gMHgwNCA6IDB4MDApIHwgKHNkLT52ZmxpcCA/IDB4MDggOiAweDAwKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDIxLCBkYXRhKTsKKwogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lIGZvciBwYWM3MzExICovCiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCXJldHVybiByZWdfd19zZXEoZ3NwY2FfZGV2LCBpbml0XzczMTEsIHNpemVvZihpbml0XzczMTEpLzIpOworCXJlZ193X3NlcShnc3BjYV9kZXYsIGluaXRfNzMxMSwgc2l6ZW9mKGluaXRfNzMxMSkvMik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQ7CiAKIAlzZC0+c29mX3JlYWQgPSAwOwogCi0JcmV0ID0gcmVnX3dfdmFyKGdzcGNhX2Rldiwgc3RhcnRfNzMxMSwKLQkJTlVMTCwgMCwKKwlyZWdfd192YXIoZ3NwY2FfZGV2LCBzdGFydF83MzExLAogCQlwYWdlNF83MzExLCBzaXplb2YocGFnZTRfNzMxMSkpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGdhaW4oZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGV4cG9zdXJlKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRodmZsaXAoZ3NwY2FfZGV2KTsKKwlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXNldGdhaW4oZ3NwY2FfZGV2KTsKKwlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXNldGh2ZmxpcChnc3BjYV9kZXYpOwogCiAJLyogc2V0IGNvcnJlY3QgcmVzb2x1dGlvbiAqLwogCXN3aXRjaCAoZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXYpIHsKIAljYXNlIDI6CQkJCQkvKiAxNjB4MTIwIHBhYzczMTEgKi8KLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDIwKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDIwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEwKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgkJCQkJLyogMzIweDI0MCBwYWM3MzExICovCi0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgxNywgMHgzMCk7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHg4NywgMHgxMSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgxNywgMHgzMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHg4NywgMHgxMSk7CiAJCWJyZWFrOwogCWNhc2UgMDoJCQkJCS8qIDY0MHg0ODAgKi8KLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDAwKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEyKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDAwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEyKTsKIAkJYnJlYWs7CiAJfQogCkBAIC01NTksMzcgKzUyMywyNCBAQAogCWF0b21pY19zZXQoJnNkLT5hdmdfbHVtLCAtMSk7CiAKIAkvKiBzdGFydCBzdHJlYW0gKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4MDUpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDA1KTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCWludCByZXQ7Ci0KLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDI3LCAweDgwKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgyOCwgMHhjYSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MjksIDB4NTMpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDJhLCAweDBlKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4M2UsIDB4MjApOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQ0KTsgLyogQml0XzA9c3RhcnQgc3RyZWFtLCBCaXRfNj1MRUQgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHg0NCk7IC8qIEJpdF8wPXN0YXJ0IHN0cmVhbSwgQml0XzY9TEVEICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4NDQpOyAvKiBCaXRfMD1zdGFydCBzdHJlYW0sIEJpdF82PUxFRCAqLworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDI3LCAweDgwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MjgsIDB4Y2EpOworCXJlZ193KGdzcGNhX2RldiwgMHgyOSwgMHg1Myk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDJhLCAweDBlKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgzZSwgMHgyMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQ0KTsgLyogQml0XzA9c3RhcnQgc3RyZWFtLCBCaXRfNj1MRUQgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4NDQpOyAvKiBCaXRfMD1zdGFydCBzdHJlYW0sIEJpdF82PUxFRCAqLworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHg0NCk7IC8qIEJpdF8wPXN0YXJ0IHN0cmVhbSwgQml0XzY9TEVEICovCiB9CiAKIC8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQgMCBhbmQgb24gZGlzY29ubmVjdCBmb3IgNzMxMSAqLwpAQCAtNzM0LDcgKzY4NSw3IEBACiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CiAJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJfQotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtNzUyLDcgKzcwMyw3IEBACiAJc2QtPmdhaW4gPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRnYWluKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTc3MCw3ICs3MjEsNyBAQAogCXNkLT5leHBvc3VyZSA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC04MDEsNyArNzUyLDcgQEAKIAkJfQogCX0KIAotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtODE5LDcgKzc3MCw3IEBACiAJc2QtPmhmbGlwID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0aHZmbGlwKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRoZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC04MzcsNyArNzg4LDcgQEAKIAlzZC0+dmZsaXAgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRodmZsaXAoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTg0OCw4ICs3OTksMzkgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19JTlBVVAorc3RhdGljIGludCBzZF9pbnRfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCQkvKiBpbnRlcnJ1cHQgcGFja2V0IGRhdGEgKi8KKwkJCWludCBsZW4pCQkvKiBpbnRlcnJ1cHQgcGFja2V0IGxlbmd0aCAqLworeworCWludCByZXQgPSAtRUlOVkFMOworCXU4IGRhdGEwLCBkYXRhMTsKKworCWlmIChsZW4gPT0gMikgeworCQlkYXRhMCA9IGRhdGFbMF07CisJCWRhdGExID0gZGF0YVsxXTsKKwkJaWYgKChkYXRhMCA9PSAweDAwICYmIGRhdGExID09IDB4MTEpIHx8CisJCSAgICAoZGF0YTAgPT0gMHgyMiAmJiBkYXRhMSA9PSAweDMzKSB8fAorCQkgICAgKGRhdGEwID09IDB4NDQgJiYgZGF0YTEgPT0gMHg1NSkgfHwKKwkJICAgIChkYXRhMCA9PSAweDY2ICYmIGRhdGExID09IDB4NzcpIHx8CisJCSAgICAoZGF0YTAgPT0gMHg4OCAmJiBkYXRhMSA9PSAweDk5KSB8fAorCQkgICAgKGRhdGEwID09IDB4YWEgJiYgZGF0YTEgPT0gMHhiYikgfHwKKwkJICAgIChkYXRhMCA9PSAweGNjICYmIGRhdGExID09IDB4ZGQpIHx8CisJCSAgICAoZGF0YTAgPT0gMHhlZSAmJiBkYXRhMSA9PSAweGZmKSkgeworCQkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOworCQkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCQlyZXQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uIGZvciBwYWM3MzExICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApAQCAtODYwLDYgKzg0Miw5IEBACiAJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCiAJLmRxX2NhbGxiYWNrID0gZG9fYXV0b2dhaW4sCisjaWZkZWYgQ09ORklHX0lOUFVUCisJLmludF9wa3Rfc2NhbiA9IHNkX2ludF9wa3Rfc2NhbiwKKyNlbmRpZgogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhY19jb21tb24uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjX2NvbW1vbi5oCmluZGV4IDIwZjY3ZDkuLjg0NjJhN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjX2NvbW1vbi5oCkBAIC0yNCwxMSArMjQsMTAgQEAKICAqLwogCiAvKiBXZSBjYWxjdWxhdGUgdGhlIGF1dG9nYWluIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zZmVyIG9mIGEgZnJhbWUsIGF0IHRoaXMKLSAgIG1vbWVudCBhIGZyYW1lIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBpcyBiZWluZyB0cmFuc21pdHRlZCwgYW5kIGEgZnJhbWUgaXMKLSAgIGJlaW5nIGNhcHR1cmVkIHdpdGggdGhlIG9sZCBzZXR0aW5ncy4gU28gaWYgd2UgYWRqdXN0IHRoZSBhdXRvZ2FpbiB3ZSBtdXN0Ci0gICBpZ25vcmUgYXRsZWFzdCB0aGUgMiBuZXh0IGZyYW1lcyBmb3IgdGhlIG5ldyBzZXR0aW5ncyB0byBjb21lIGludG8gZWZmZWN0Ci0gICBiZWZvcmUgZG9pbmcgYW55IG90aGVyIGFkanVzdG1lbnRzICovCi0jZGVmaW5lIFBBQ19BVVRPR0FJTl9JR05PUkVfRlJBTUVTCTMKKyAgIG1vbWVudCBhIGZyYW1lIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBpcyBiZWluZyBjYXB0dXJlZCBhbmQgdHJhbnNtaXR0ZWQuIFNvCisgICBpZiB3ZSBhZGp1c3QgdGhlIGdhaW4gb3IgZXhwb3N1cmUgd2UgbXVzdCBpZ25vcmUgYXRsZWFzdCB0aGUgbmV4dCBmcmFtZSBmb3IKKyAgIHRoZSBuZXcgc2V0dGluZ3MgdG8gY29tZSBpbnRvIGVmZmVjdCBiZWZvcmUgZG9pbmcgYW55IG90aGVyIGFkanVzdG1lbnRzLiAqLworI2RlZmluZSBQQUNfQVVUT0dBSU5fSUdOT1JFX0ZSQU1FUwkyCiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhY19zb2ZfbWFya2VyWzVdID0KIAkJeyAweGZmLCAweGZmLCAweDAwLCAweGZmLCAweDk2IH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhNWZkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIwMjguYwpAQCAtMCwwICsxLDc1NyBAQAorLyoKKyAqIFNOOUMyMDI4IGxpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlb2RvcmUgS2lsZ29yZSA8a2lsZ290YUBhdWJ1cm4uZWR1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAic245YzIwMjgiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJUaGVvZG9yZSBLaWxnb3JlIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNvbml4IFNOOUMyMDI4IFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OyAgLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCXU4IHNvZl9yZWFkOworCXUxNiBtb2RlbDsKK307CisKK3N0cnVjdCBpbml0X2NvbW1hbmQgeworCXVuc2lnbmVkIGNoYXIgaW5zdHJ1Y3Rpb25bNl07CisJdW5zaWduZWQgY2hhciB0b19yZWFkOyAvKiBsZW5ndGggdG8gcmVhZC4gMCBtZWFucyBubyByZXBseSByZXF1ZXN0ZWQgKi8KK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworfTsKKworLyogSG93IHRvIGNoYW5nZSB0aGUgcmVzb2x1dGlvbiBvZiBhbnkgb2YgdGhlIFZHQSBjYW1zIGlzIHVua25vd24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfU045QzIwMjgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCAqIDMgLyA0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKKworLyogTm8gd2F5IHRvIGNoYW5nZSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgQ0lGIGNhbXMgaXMga25vd24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGNpZl9tb2RlW10gPSB7CisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfU045QzIwMjgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDM1MiwKKwkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCAqIDMgLyA0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKKworLyogdGhlIGJ5dGVzIHRvIHdyaXRlIGFyZSBpbiBnc3BjYV9kZXYtPnVzYl9idWYgKi8KK3N0YXRpYyBpbnQgc245YzIwMjhfY29tbWFuZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4ICpjb21tYW5kKQoreworCWludCByYzsKKworCVBERUJVRyhEX1VTQk8sICJzZW5kaW5nIGNvbW1hbmQgJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IiwgY29tbWFuZFswXSwKKwkgICAgICAgY29tbWFuZFsxXSwgY29tbWFuZFsyXSwgY29tbWFuZFszXSwgY29tbWFuZFs0XSwgY29tbWFuZFs1XSk7CisKKwltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBjb21tYW5kLCA2KTsKKwlyYyA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQlVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJMiwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCA2LCA1MDApOworCWlmIChyYyA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiY29tbWFuZCB3cml0ZSBbJTAyeF0gZXJyb3IgJWQiLAorCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc245YzIwMjhfcmVhZDEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByYzsKKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJMSwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLCA1MDApOworCWlmIChyYyAhPSAxKSB7CisJCVBERUJVRyhEX0VSUiwgInJlYWQxIGVycm9yICVkIiwgcmMpOworCQlyZXR1cm4gKHJjIDwgMCkgPyByYyA6IC1FSU87CisJfQorCVBERUJVRyhEX1VTQkksICJyZWFkMSByZXNwb25zZSAlMDJ4IiwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworfQorCitzdGF0aWMgaW50IHNuOWMyMDI4X3JlYWQ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggKnJlYWRpbmcpCit7CisJaW50IHJjOworCXJjID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJNCwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCA0LCA1MDApOworCWlmIChyYyAhPSA0KSB7CisJCVBERUJVRyhEX0VSUiwgInJlYWQ0IGVycm9yICVkIiwgcmMpOworCQlyZXR1cm4gKHJjIDwgMCkgPyByYyA6IC1FSU87CisJfQorCW1lbWNweShyZWFkaW5nLCBnc3BjYV9kZXYtPnVzYl9idWYsIDQpOworCVBERUJVRyhEX1VTQkksICJyZWFkNCByZXNwb25zZSAlMDJ4JTAyeCUwMnglMDJ4IiwgcmVhZGluZ1swXSwKKwkgICAgICAgcmVhZGluZ1sxXSwgcmVhZGluZ1syXSwgcmVhZGluZ1szXSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHNuOWMyMDI4X2xvbmdfY29tbWFuZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4ICpjb21tYW5kKQoreworCWludCBpLCBzdGF0dXM7CisJX191OCByZWFkaW5nWzRdOworCisJc3RhdHVzID0gc245YzIwMjhfY29tbWFuZChnc3BjYV9kZXYsIGNvbW1hbmQpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJc3RhdHVzID0gLTE7CisJZm9yIChpID0gMDsgaSA8IDI1NiAmJiBzdGF0dXMgPCAyOyBpKyspCisJCXN0YXR1cyA9IHNuOWMyMDI4X3JlYWQxKGdzcGNhX2Rldik7CisJaWYgKHN0YXR1cyAhPSAyKSB7CisJCVBERUJVRyhEX0VSUiwgImxvbmcgY29tbWFuZCBzdGF0dXMgcmVhZCBlcnJvciAlZCIsIHN0YXR1cyk7CisJCXJldHVybiAoc3RhdHVzIDwgMCkgPyBzdGF0dXMgOiAtRUlPOworCX0KKworCW1lbXNldChyZWFkaW5nLCAwLCA0KTsKKwlzdGF0dXMgPSBzbjljMjAyOF9yZWFkNChnc3BjYV9kZXYsIHJlYWRpbmcpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJLyogaW4gZ2VuZXJhbCwgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJlc3BvbnNlIGlzIHRoZSBmaXJzdCBieXRlIG9mCisJICogdGhlIGNvbW1hbmQsIG9yJ2VkIHdpdGggOCAqLworCXN0YXR1cyA9IHNuOWMyMDI4X3JlYWQxKGdzcGNhX2Rldik7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbjljMjAyOF9zaG9ydF9jb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggKmNvbW1hbmQpCit7CisJaW50IGVycl9jb2RlOworCisJZXJyX2NvZGUgPSBzbjljMjAyOF9jb21tYW5kKGdzcGNhX2RldiwgY29tbWFuZCk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZXJyX2NvZGUgPSBzbjljMjAyOF9yZWFkMShnc3BjYV9kZXYpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisKKwlQREVCVUcoRF9QUk9CRSwgIlNOOUMyMDI4IGNhbWVyYSBkZXRlY3RlZCAodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsCisJICAgICAgIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CisKKwlzZC0+bW9kZWwgPSBpZC0+aWRQcm9kdWN0OworCisJc3dpdGNoIChzZC0+bW9kZWwpIHsKKwljYXNlIDB4NzAwNToKKwkJUERFQlVHKERfUFJPQkUsICJHZW5pdXMgU21hcnQgMzAwIGNhbWVyYSIpOworCQlicmVhazsKKwljYXNlIDB4ODAwMDoKKwkJUERFQlVHKERfUFJPQkUsICJEQzMxVkMiKTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMDE6CisJCVBERUJVRyhEX1BST0JFLCAiU3B5IGNhbWVyYSIpOworCQlicmVhazsKKwljYXNlIDB4ODAwMzoKKwkJUERFQlVHKERfUFJPQkUsICJDSUYgY2FtZXJhIik7CisJCWJyZWFrOworCWNhc2UgMHg4MDA4OgorCQlQREVCVUcoRF9QUk9CRSwgIk1pbmktU2hvdHogbXMtMzUwIGNhbWVyYSIpOworCQlicmVhazsKKwljYXNlIDB4ODAwYToKKwkJUERFQlVHKERfUFJPQkUsICJWaXZpdGFyIDMzNTBiIHR5cGUgY2FtZXJhIik7CisJCWNhbS0+aW5wdXRfZmxhZ3MgPSBWNEwyX0lOX1NUX1ZGTElQIHwgVjRMMl9JTl9TVF9IRkxJUDsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChzZC0+bW9kZWwpIHsKKwljYXNlIDB4ODAwMDoKKwljYXNlIDB4ODAwMToKKwljYXNlIDB4ODAwMzoKKwkJY2FtLT5jYW1fbW9kZSA9IGNpZl9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoY2lmX21vZGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CisJfQorCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHN0YXR1cyA9IC0xOworCisJc245YzIwMjhfcmVhZDEoZ3NwY2FfZGV2KTsKKwlzbjljMjAyOF9yZWFkMShnc3BjYV9kZXYpOworCXN0YXR1cyA9IHNuOWMyMDI4X3JlYWQxKGdzcGNhX2Rldik7CisKKwlyZXR1cm4gKHN0YXR1cyA8IDApID8gc3RhdHVzIDogMDsKK30KKworc3RhdGljIGludCBydW5fc3RhcnRfY29tbWFuZHMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICAgICAgc3RydWN0IGluaXRfY29tbWFuZCAqY2FtX2NvbW1hbmRzLCBpbnQgbikKK3sKKwlpbnQgaSwgZXJyX2NvZGUgPSAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJc3dpdGNoIChjYW1fY29tbWFuZHNbaV0udG9fcmVhZCkgeworCQljYXNlIDQ6CisJCQllcnJfY29kZSA9IHNuOWMyMDI4X2xvbmdfY29tbWFuZChnc3BjYV9kZXYsCisJCQkJCWNhbV9jb21tYW5kc1tpXS5pbnN0cnVjdGlvbik7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZXJyX2NvZGUgPSBzbjljMjAyOF9zaG9ydF9jb21tYW5kKGdzcGNhX2RldiwKKwkJCQkJY2FtX2NvbW1hbmRzW2ldLmluc3RydWN0aW9uKTsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQllcnJfY29kZSA9IHNuOWMyMDI4X2NvbW1hbmQoZ3NwY2FfZGV2LAorCQkJCQljYW1fY29tbWFuZHNbaV0uaW5zdHJ1Y3Rpb24pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGVycl9jb2RlIDwgMCkKKwkJCXJldHVybiBlcnJfY29kZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfc3B5X2NhbShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IGluaXRfY29tbWFuZCBzcHlfc3RhcnRfY29tbWFuZHNbXSA9IHsKKwkJe3sweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIyLCAweDAxLCAweDA0LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMywgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDE2LCAweDAwLCAweDAwfSwgNH0sIC8qIHdpZHRoICAzNTIgKi8KKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDEyLCAweDAwLCAweDAwfSwgNH0sIC8qIGhlaWdodCAyODggKi8KKwkJLyoge3sweDEzLCAweDI3LCAweDAxLCAweDI4LCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHg2OCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MDksIDB4MDAsIDB4MDB9LCA0fSwgLyogcmVkIGdhaW4gPyovCisJCS8qIHt7MHgxMywgMHgyOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCAqLworCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDEzLCAweDI5LCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyYywgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmQsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDEzLCAweDJlLCAweDAxLCAweDA5LCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwOSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MDcsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEyLCAweDM0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgzNCwgMHgwMSwgMHhhMSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDAyLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwMywgMHgxMywgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCAvKmRvbid0IG1lc3Mgd2l0aCovCisJCS8qe3sweDExLCAweDA0LCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sIG9ic2VydmVkICovCisJCXt7MHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCAvKiBicmlnaHRlciAqLworCQkvKnt7MHgxMSwgMHgwNSwgMHg2NSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCBvYnNlcnZlZCAqLworCQl7ezB4MTEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwgLyogYnJpZ2h0ZXIgKi8KKwkJe3sweDExLCAweDA2LCAweGIxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sIC8qIG9ic2VydmVkICovCisJCXt7MHgxMSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQkvKnt7MHgxMSwgMHgwOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCBvYnNlcnZlZCAqLworCQl7ezB4MTEsIDB4MDgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDA5LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDExLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sICovCisJCS8qIGJyaWdodG5lc3Mgb3IgZ2Fpbi4gMCBpcyBkZWZhdWx0LiA0IGlzIGdvb2QKKwkJICogaW5kb29ycyBhdCBuaWdodCB3aXRoIGluY2FuZGVzY2VudCBsaWdodGluZyAqLworCQl7ezB4MTEsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDEwLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sIC8qaHN0YXJ0IG9yIGhvZmZzKi8KKwkJe3sweDExLCAweDExLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDEzLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIHt7MHgxYiwgMHgwMiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LCBvYnNlcnZlZCAqLworCQl7ezB4MWIsIDB4MDIsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwgLyogYnJpZ2h0ZXIgKi8KKwkJLyoge3sweDFiLCAweDEzLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgMX0sIG9ic2VydmVkICovCisJCXt7MHgxYiwgMHgxMywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MjAsIDB4MzQsIDB4YTEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwgLyogY29tcHJlc3NlcyAqLworCQkvKiBDYW1lcmEgc2hvdWxkIHN0YXJ0IHRvIGNhcHR1cmUgbm93LiAqLworCX07CisKKwlyZXR1cm4gcnVuX3N0YXJ0X2NvbW1hbmRzKGdzcGNhX2Rldiwgc3B5X3N0YXJ0X2NvbW1hbmRzLAorCQkJCSAgQVJSQVlfU0laRShzcHlfc3RhcnRfY29tbWFuZHMpKTsKK30KKworc3RhdGljIGludCBzdGFydF9jaWZfY2FtKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgaW5pdF9jb21tYW5kIGNpZl9zdGFydF9jb21tYW5kc1tdID0geworCQl7ezB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyogVGhlIGVudGlyZSBzZXF1ZW5jZSBiZWxvdyBzZWVtcyByZWR1bmRhbnQgKi8KKwkJLyoge3sweDEzLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjIsIDB4MDEsIDB4MDYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIzLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MTYsIDB4MDAsIDB4MDB9LCA0fSwgd2lkdGg/CisJCXt7MHgxMywgMHgyNiwgMHgwMSwgMHgxMiwgMHgwMCwgMHgwMH0sIDR9LCBoZWlnaHQ/CisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHg2OCwgMHgwMCwgMHgwMH0sIDR9LCBzdWJzYW1wbGU/CisJCXt7MHgxMywgMHgyOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJhLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmMsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJkLCAweDAxLCAweDAzLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwZiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MGMsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEyLCAweDM0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgzNCwgMHgwMSwgMHhhMSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwqLworCQl7ezB4MWIsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDIsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAzLCAweDVhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwNCwgMHgyNywgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDEyLCAweDE0LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NzcsIDB4YTIsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDA2LCAweDBmLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDgsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDA5LCAweDEwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDE2LCAweDAwLCAweDAwfSwgMX0sIC8qIHdpZHRoLzggKi8KKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDEyLCAweDAwLCAweDAwfSwgMX0sIC8qIGhlaWdodC84ICovCisJCS8qIHt7MHgxMywgMHgyNywgMHgwMSwgMHg2OCwgMHgwMCwgMHgwMH0sIDR9LCBzdWJzYW1wbGU/CisJCSAqIHt7MHgxMywgMHgyOCwgMHgwMSwgMHgxZSwgMHgwMCwgMHgwMH0sIDR9LCBkb2VzIG5vdGhpbmcKKwkJICoge3sweDEzLCAweDI3LCAweDAxLCAweDIwLCAweDAwLCAweDAwfSwgNH0sICovCisJCS8qIHt7MHgxMywgMHgyOSwgMHgwMSwgMHgyMiwgMHgwMCwgMHgwMH0sIDR9LAorCQkgKiBjYXVzZXMgc3Vic2FtcGxpbmcKKwkJICogYnV0IG5vdCBhIGNoYW5nZSBpbiB0aGUgcmVzb2x1dGlvbiBzZXR0aW5nISAqLworCQl7ezB4MTMsIDB4MmMsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJkLCAweDAxLCAweDAxLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MDYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI4LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxYiwgMHgwNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDIwLCAweDM2LCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MTIsIDB4MjcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDFiLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgyMCwgMHgzNiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAyLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MjAsIDB4MzQsIDB4YTEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwvKiB1c2UgY29tcHJlc3Npb24gKi8KKwkJLyogQ2FtZXJhIHNob3VsZCBzdGFydCB0byBjYXB0dXJlIG5vdy4gKi8KKwl9OworCisJcmV0dXJuIHJ1bl9zdGFydF9jb21tYW5kcyhnc3BjYV9kZXYsIGNpZl9zdGFydF9jb21tYW5kcywKKwkJCQkgIEFSUkFZX1NJWkUoY2lmX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfbXMzNTBfY2FtKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgaW5pdF9jb21tYW5kIG1zMzUwX3N0YXJ0X2NvbW1hbmRzW10gPSB7CisJCXt7MHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjIsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIzLCAweDAxLCAweDAzLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MTYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDEyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyOCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MDksIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI5LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MGYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMiwgMHgzNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzQsIDB4MDEsIDB4YTEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDM1LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDEsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDAyLCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwMywgMHg1ZCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDA1LCAweDI1LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDcsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBiLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBlLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTMsIDB4NjMsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE1LCAweDcwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDI4LCAweDAwLCAweDAwfSwgNH0sIC8qIHdpZHRoICAqLworCQl7ezB4MTMsIDB4MjYsIDB4MDEsIDB4MWUsIDB4MDAsIDB4MDB9LCA0fSwgLyogaGVpZ2h0ICovCisJCXt7MHgxMywgMHgyOCwgMHgwMSwgMHgwOSwgMHgwMCwgMHgwMH0sIDR9LCAvKiB2c3RhcnQ/ICovCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyOCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4NDAsIDB4MDAsIDB4MDB9LCA0fSwgLyogaHN0YXJ0PyAqLworCQl7ezB4MTMsIDB4MmMsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJkLCAweDAxLCAweDAzLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwZiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MGMsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDFiLCAweDAyLCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MjAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAyLCAweDBhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDB9LAorCQkvKiBDYW1lcmEgc2hvdWxkIHN0YXJ0IHRvIGNhcHR1cmUgbm93LiAqLworCX07CisKKwlyZXR1cm4gcnVuX3N0YXJ0X2NvbW1hbmRzKGdzcGNhX2RldiwgbXMzNTBfc3RhcnRfY29tbWFuZHMsCisJCQkJICBBUlJBWV9TSVpFKG1zMzUwX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfZ2VuaXVzX2NhbShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IGluaXRfY29tbWFuZCBnZW5pdXNfc3RhcnRfY29tbWFuZHNbXSA9IHsKKwkJe3sweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxNiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDE2LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNiwgMHgwMSwgMHgxMiwgMHgwMCwgMHgwMH0sIDR9LAorCQkvKiAicHJlbGltaW5hcnkiIHdpZHRoIGFuZCBoZWlnaHQgc2V0dGluZ3MgKi8KKwkJe3sweDEzLCAweDI4LCAweDAxLCAweDBlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4MjIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MDksIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDA3LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjEsIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDExLCAweDY0LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTMsIDB4OTEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxNSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE3LCAweDYwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjEsIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDI2LCAweDAyLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyNywgMHg4OCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MzAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDMxLCAweDJhLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgzMiwgMHgyYSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MzMsIDB4MmEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDM0LCAweDAyLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHg1YiwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MjgsIDB4MDAsIDB4MDB9LCA0fSwgLyogcmVhbCB3aWR0aCAqLworCQl7ezB4MTMsIDB4MjYsIDB4MDEsIDB4MWUsIDB4MDAsIDB4MDB9LCA0fSwgLyogcmVhbCBoZWlnaHQgKi8KKwkJe3sweDEzLCAweDI4LCAweDAxLCAweDBlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4NjIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MGYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjEsIDB4MmEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMywgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxNSwgMHhlMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTYsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE3LCAweDgwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxYywgMHgyMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWMsIDB4MjAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDIwLCAweDM0LCAweGExLCAweDAwLCAweDAwLCAweDAwfSwgMH0KKwkJLyogQ2FtZXJhIHNob3VsZCBzdGFydCB0byBjYXB0dXJlIG5vdy4gKi8KKwl9OworCisJcmV0dXJuIHJ1bl9zdGFydF9jb21tYW5kcyhnc3BjYV9kZXYsIGdlbml1c19zdGFydF9jb21tYW5kcywKKwkJCQkgIEFSUkFZX1NJWkUoZ2VuaXVzX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfdml2aXRhcl9jYW0oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBpbml0X2NvbW1hbmQgdml2aXRhcl9zdGFydF9jb21tYW5kc1tdID0geworCQl7ezB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIzLCAweDAxLCAweDAxLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MjgsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDFlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MGEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoKKwkJICogQWJvdmUgaXMgY2hhbmdlZCBmcm9tIE9FTSAweDBiLiBGaXhlcyBCYXllciB0aWxpbmcuCisJCSAqIFByZXN1bWFibHkgZ2l2ZXMgYSB2ZXJ0aWNhbCBzaGlmdCBvZiBvbmUgcm93LgorCQkgKi8KKwkJe3sweDEzLCAweDI5LCAweDAxLCAweDIwLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIEFib3ZlIHNlZW1zIHRvIGRvIGhvcml6b250YWwgc2hpZnQuICovCisJCXt7MHgxMywgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MGYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIEFib3ZlIHRocmVlIGNvbW1hbmRzIHNlZW0gdG8gcmVsYXRlIHRvIGJyaWdodG5lc3MuICovCisJCXt7MHgxMiwgMHgzNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzQsIDB4MDEsIDB4YTEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDM1LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxYiwgMHgxMiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDEsIDB4NzcsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAyLCAweDNhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMiwgMHg3OCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE0LCAweDgwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxNSwgMHgzNCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MWIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDIwLCAweDQ0LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgyMywgMHhlZSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MjYsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDI3LCAweDlhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgyOCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MjksIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDJhLCAweDgwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MmYsIDB4M2QsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDMwLCAweDI0LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgzMiwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NjAsIDB4YTksIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDYxLCAweDQyLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg2NSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NjksIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDZmLCAweDg4LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg3MCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDc0LCAweDIxLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg3NSwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDdkLCAweGYzLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxNywgMHgxYywgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE5LCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxYSwgMHhmNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQkvKiB7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MjgsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDFlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyOCwgMHgwMSwgMHgwYiwgMHgwMCwgMHgwMH0sIDR9LCAqLworCQl7ezB4MjAsIDB4MzYsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDEwLCAweDI2LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxMiwgMHgyNywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MWIsIDB4NzYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDIwLCAweDM2LCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQkvKiBBYm92ZSBpcyBicmlnaHRuZXNzOyBPRU0gZHJpdmVyIHNldHRpbmcgaXMgMHgxMCAqLworCQl7ezB4MTIsIDB4MjcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDIwLCAweDI5LCAweDMwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgyMCwgMHgzNCwgMHhhMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9CisJfTsKKworCXJldHVybiBydW5fc3RhcnRfY29tbWFuZHMoZ3NwY2FfZGV2LCB2aXZpdGFyX3N0YXJ0X2NvbW1hbmRzLAorCQkJCSAgQVJSQVlfU0laRSh2aXZpdGFyX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgZXJyX2NvZGU7CisKKwlzZC0+c29mX3JlYWQgPSAwOworCisJc3dpdGNoIChzZC0+bW9kZWwpIHsKKwljYXNlIDB4NzAwNToKKwkJZXJyX2NvZGUgPSBzdGFydF9nZW5pdXNfY2FtKGdzcGNhX2Rldik7CisJCWJyZWFrOworCWNhc2UgMHg4MDAxOgorCQllcnJfY29kZSA9IHN0YXJ0X3NweV9jYW0oZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMDM6CisJCWVycl9jb2RlID0gc3RhcnRfY2lmX2NhbShnc3BjYV9kZXYpOworCQlicmVhazsKKwljYXNlIDB4ODAwODoKKwkJZXJyX2NvZGUgPSBzdGFydF9tczM1MF9jYW0oZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMGE6CisJCWVycl9jb2RlID0gc3RhcnRfdml2aXRhcl9jYW0oZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUERFQlVHKERfRVJSLCAiU3RhcnRpbmcgdW5rbm93biBjYW1lcmEsIHBsZWFzZSByZXBvcnQgdGhpcyIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXJldHVybiBlcnJfY29kZTsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByZXN1bHQ7CisJX191OCBkYXRhWzZdOworCisJcmVzdWx0ID0gc245YzIwMjhfcmVhZDEoZ3NwY2FfZGV2KTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAiQ2FtZXJhIFN0b3AgcmVhZCBmYWlsZWQiKTsKKworCW1lbXNldChkYXRhLCAwLCA2KTsKKwlkYXRhWzBdID0gMHgxNDsKKwlyZXN1bHQgPSBzbjljMjAyOF9jb21tYW5kKGdzcGNhX2RldiwgZGF0YSk7CisJaWYgKHJlc3VsdCA8IDApCisJCVBERUJVRyhEX0VSUiwgIkNhbWVyYSBTdG9wIGNvbW1hbmQgZmFpbGVkIik7Cit9CisKKy8qIEluY2x1ZGUgc245YzIwMjggc29mIGRldGVjdGlvbiBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlICJzbjljMjAyOC5oIgorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJdW5zaWduZWQgY2hhciAqc29mOworCisJc29mID0gc245YzIwMjhfZmluZF9zb2YoZ3NwY2FfZGV2LCBkYXRhLCBsZW4pOworCWlmIChzb2YpIHsKKwkJaW50IG47CisKKwkJLyogZmluaXNoIGRlY29kaW5nIGN1cnJlbnQgZnJhbWUgKi8KKwkJbiA9IHNvZiAtIGRhdGE7CisJCWlmIChuID4gc2l6ZW9mIHNuOWMyMDI4X3NvZl9tYXJrZXIpCisJCQluIC09IHNpemVvZiBzbjljMjAyOF9zb2ZfbWFya2VyOworCQllbHNlCisJCQluID0gMDsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGRhdGEsIG4pOworCQkvKiBTdGFydCBuZXh0IGZyYW1lLiAqLworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCisJCQlzbjljMjAyOF9zb2ZfbWFya2VyLCBzaXplb2Ygc245YzIwMjhfc29mX21hcmtlcik7CisJCWxlbiAtPSBzb2YgLSBkYXRhOworCQlkYXRhID0gc29mOworCX0KKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGRhdGEsIGxlbik7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLmluaXQgPSBzZF9pbml0LAorCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA0NTgsIDB4NzAwNSl9LCAvKiBHZW5pdXMgU21hcnQgMzAwLCB2ZXJzaW9uIDIgKi8KKwkvKiBUaGUgR2VuaXVzIFNtYXJ0IGlzIHVudGVzdGVkLiBJIGNhbid0IGZpbmQgYW4gb3duZXIgISAqLworCS8qIHtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDAwKX0sIERDMzFWQywgRG9uJ3Qga25vdyB0aGlzIGNhbWVyYSAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDAxKX0sIC8qIFdpbGQgUGxhbmV0IGRpZ2l0YWwgc3B5IGNhbSAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDAzKX0sIC8qIFNldmVyYWwgc21hbGwgQ0lGIGNhbWVyYXMgKi8KKwkvKiB7VVNCX0RFVklDRSgweDBjNDUsIDB4ODAwNil9LCBVbmtub3duIFZHQSBjYW1lcmEgKi8KKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4ODAwOCl9LCAvKiBNaW5pLVNob3R6IG1zLTM1MCAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDBhKX0sIC8qIFZpdmljYW0gMzM1MEIgKi8KKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkgICAgICAgVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IGdzcGNhX3N1c3BlbmQsCisJLnJlc3VtZSA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZkMWQzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIwMjguaApAQCAtMCwwICsxLDUxIEBACisvKgorICogU045QzIwMjggY29tbW9uIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGVvZG9yZSBLaWxnb3JlIDxraWxnb3RhQGF1YnVybixlZHU+CisgKgorICogQmFzZWQgY2xvc2VseSB1cG9uIHRoZSBmaWxlIGdzcGNhL3BhY19jb21tb24uaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc245YzIwMjhfc29mX21hcmtlcls1XSA9CisJeyAweGZmLCAweGZmLCAweDAwLCAweGM0LCAweGM0IH07CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpzbjljMjAyOF9maW5kX3NvZihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkJCXVuc2lnbmVkIGNoYXIgKm0sIGludCBsZW4pCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpOworCisJLyogU2VhcmNoIGZvciB0aGUgU09GIG1hcmtlciAoZml4ZWQgcGFydCkgaW4gdGhlIGhlYWRlciAqLworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAobVtpXSA9PSBzbjljMjAyOF9zb2ZfbWFya2VyW3NkLT5zb2ZfcmVhZF0pIHsKKwkJCXNkLT5zb2ZfcmVhZCsrOworCQkJaWYgKHNkLT5zb2ZfcmVhZCA9PSBzaXplb2Yoc245YzIwMjhfc29mX21hcmtlcikpIHsKKwkJCQlQREVCVUcoRF9GUkFNLAorCQkJCQkiU09GIGZvdW5kLCBieXRlcyB0byBhbmFseXplOiAldS4iCisJCQkJCSIgRnJhbWUgc3RhcnRzIGF0IGJ5dGUgIyV1IiwKKwkJCQkJbGVuLCBpICsgMSk7CisJCQkJc2QtPnNvZl9yZWFkID0gMDsKKwkJCQlyZXR1cm4gbSArIGkgKyAxOworCQkJfQorCQl9IGVsc2UgeworCQkJc2QtPnNvZl9yZWFkID0gMDsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjB4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMHguYwppbmRleCAwY2ExYzA2Li40YTFiYzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMHguYwpAQCAtMTI5LDcgKzEyOSw3IEBACiBzdGF0aWMgaW50IHNkX3NldGF1dG9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHMzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRhdXRvZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogI2RlZmluZSBCUklHSFRORVNTX0lEWCAwCiAJICAgIHsKQEAgLTE1MDYsMzYgKzE1MDYsMzYgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJczMyIGh1ZV9jb29yZCwgaHVlX2luZGV4ID0gMTgwICsgc2QtPmh1ZTsKIAl1OCBjbWF0cml4WzIxXTsKLQltZW1zZXQoY21hdHJpeCwgMCwgMjEpOwogCisJbWVtc2V0KGNtYXRyaXgsIDAsIHNpemVvZiBjbWF0cml4KTsKIAljbWF0cml4WzJdID0gKHNkLT5jb250cmFzdCAqIDB4MjUgLyAweDEwMCkgKyAweDI2OwogCWNtYXRyaXhbMF0gPSAweDEzICsgKGNtYXRyaXhbMl0gLSAweDI2KSAqIDB4MTMgLyAweDI1OwogCWNtYXRyaXhbNF0gPSAweDA3ICsgKGNtYXRyaXhbMl0gLSAweDI2KSAqIDB4MDcgLyAweDI1OwogCWNtYXRyaXhbMThdID0gc2QtPmJyaWdodG5lc3MgLSAweDgwOwogCiAJaHVlX2Nvb3JkID0gKGhzdl9yZWRfeFtodWVfaW5kZXhdICogc2QtPnNhdHVyYXRpb24pID4+IDg7Ci0JY21hdHJpeFs2XSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzddID0gKHVuc2lnbmVkIGNoYXIpKChodWVfY29vcmQgPj4gOCkgJiAweDBmKTsKKwljbWF0cml4WzZdID0gaHVlX2Nvb3JkOworCWNtYXRyaXhbN10gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCWh1ZV9jb29yZCA9IChoc3ZfcmVkX3lbaHVlX2luZGV4XSAqIHNkLT5zYXR1cmF0aW9uKSA+PiA4OwotCWNtYXRyaXhbOF0gPSAodW5zaWduZWQgY2hhcikoaHVlX2Nvb3JkICYgMHhmZik7Ci0JY21hdHJpeFs5XSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFs4XSA9IGh1ZV9jb29yZDsKKwljbWF0cml4WzldID0gKGh1ZV9jb29yZCA+PiA4KSAmIDB4MGY7CiAKIAlodWVfY29vcmQgPSAoaHN2X2dyZWVuX3hbaHVlX2luZGV4XSAqIHNkLT5zYXR1cmF0aW9uKSA+PiA4OwotCWNtYXRyaXhbMTBdID0gKHVuc2lnbmVkIGNoYXIpKGh1ZV9jb29yZCAmIDB4ZmYpOwotCWNtYXRyaXhbMTFdID0gKHVuc2lnbmVkIGNoYXIpKChodWVfY29vcmQgPj4gOCkgJiAweDBmKTsKKwljbWF0cml4WzEwXSA9IGh1ZV9jb29yZDsKKwljbWF0cml4WzExXSA9IChodWVfY29vcmQgPj4gOCkgJiAweDBmOwogCiAJaHVlX2Nvb3JkID0gKGhzdl9ncmVlbl95W2h1ZV9pbmRleF0gKiBzZC0+c2F0dXJhdGlvbikgPj4gODsKLQljbWF0cml4WzEyXSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzEzXSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFsxMl0gPSBodWVfY29vcmQ7CisJY21hdHJpeFsxM10gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCWh1ZV9jb29yZCA9IChoc3ZfYmx1ZV94W2h1ZV9pbmRleF0gKiBzZC0+c2F0dXJhdGlvbikgPj4gODsKLQljbWF0cml4WzE0XSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzE1XSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFsxNF0gPSBodWVfY29vcmQ7CisJY21hdHJpeFsxNV0gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCWh1ZV9jb29yZCA9IChoc3ZfYmx1ZV95W2h1ZV9pbmRleF0gKiBzZC0+c2F0dXJhdGlvbikgPj4gODsKLQljbWF0cml4WzE2XSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzE3XSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFsxNl0gPSBodWVfY29vcmQ7CisJY21hdHJpeFsxN10gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCXJldHVybiByZWdfdyhnc3BjYV9kZXYsIDB4MTBlMSwgY21hdHJpeCwgMjEpOwogfQpAQCAtMjAxNSw2ICsyMDE1LDcgQEAKIAlkZWZhdWx0OgogCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CiAJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CisJCWJyZWFrOwogCX0KIAogCXNkLT5vbGRfc3RlcCA9IDA7CkBAIC0yMzE5LDcgKzIzMjAsNyBAQAogCQl9CiAJfQogCWlmIChhdmdfbHVtID4gTUFYX0FWR19MVU0pIHsKLQkJaWYgKHNkLT5nYWluID49IDEpIHsKKwkJaWYgKHNkLT5nYWluID4gMCkgewogCQkJc2QtPmdhaW4tLTsKIAkJCXNldF9nYWluKGdzcGNhX2Rldik7CiAJCX0KQEAgLTIzNDcsNyArMjM0OCw3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBhdmdfbHVtOwotCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGZyYW1lX2hlYWRlcltdID0KKwlzdGF0aWMgdTggZnJhbWVfaGVhZGVyW10gPQogCQl7MHhmZiwgMHhmZiwgMHgwMCwgMHhjNCwgMHhjNCwgMHg5Nn07CiAJaWYgKGxlbiA9PSA2NCAmJiBtZW1jbXAoZGF0YSwgZnJhbWVfaGVhZGVyLCA2KSA9PSAwKSB7CiAJCWF2Z19sdW0gPSAoKGRhdGFbMzVdID4+IDIpICYgMykgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKaW5kZXggZGRmZjJiNS4uNzg1ZWViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCkBAIC00Miw2ICs0Miw3IEBACiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInNvbml4YiIKIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAiZ3NwY2EuaCIKIAogTU9EVUxFX0FVVEhPUigiTWljaGVsIFhoYWFyZCA8bXhoYWFyZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Iik7CkBAIC01Myw5ICs1NCwxMSBAQAogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAJYXRvbWljX3QgYXZnX2x1bTsKIAlpbnQgcHJldl9hdmdfbHVtOworCWludCBleHBfdG9vX2xvd19jbnQ7CisJaW50IGV4cF90b29faGlnaF9jbnQ7CiAKKwl1bnNpZ25lZCBzaG9ydCBleHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGdhaW47Ci0JdW5zaWduZWQgY2hhciBleHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7CiAJdW5zaWduZWQgY2hhciBhdXRvZ2FpbjsKIAl1bnNpZ25lZCBjaGFyIGF1dG9nYWluX2lnbm9yZV9mcmFtZXM7CkBAIC03Myw4ICs3Niw5IEBACiAjZGVmaW5lIFNFTlNPUl9PVjc2MzAgMgogI2RlZmluZSBTRU5TT1JfUEFTMTA2IDMKICNkZWZpbmUgU0VOU09SX1BBUzIwMiA0Ci0jZGVmaW5lIFNFTlNPUl9UQVM1MTEwIDUKLSNkZWZpbmUgU0VOU09SX1RBUzUxMzBDWFggNgorI2RlZmluZSBTRU5TT1JfVEFTNTExMEMgNQorI2RlZmluZSBTRU5TT1JfVEFTNTExMEQgNgorI2RlZmluZSBTRU5TT1JfVEFTNTEzMENYWCA3CiAJX191OCByZWcxMTsKIH07CiAKQEAgLTk1LDEzICs5OSwxNSBAQAogLyogc2Vuc29yX2RhdGEgZmxhZ3MgKi8KICNkZWZpbmUgRl9HQUlOIDB4MDEJCS8qIGhhcyBnYWluICovCiAjZGVmaW5lIEZfU0lGICAweDAyCQkvKiBzaWYgb3IgdmdhICovCisjZGVmaW5lIEZfQ09BUlNFX0VYUE8gMHgwNAkvKiBleHBvc3VyZSBjb250cm9sIGlzIGNvYXJzZSAqLwogCiAvKiBwcml2IGZpZWxkIG9mIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgZmxhZ3MgKGRvIG5vdCB1c2UgbG93IG5pYmJsZSEpICovCiAjZGVmaW5lIE1PREVfUkFXIDB4MTAJCS8qIHJhdyBiYXllciBtb2RlICovCiAjZGVmaW5lIE1PREVfUkVEVUNFRF9TSUYgMHgyMAkvKiB2Z2EgbW9kZSAoMzIweDI0MCAvIDE2MHgxMjApIG9uIHNpZiBjYW0gKi8KIAogLyogY3RybF9kaXMgaGVscGVyIG1hY3JvcyAqLwotI2RlZmluZSBOT19FWFBPICgoMSA8PCBFWFBPU1VSRV9JRFgpIHwgKDEgPDwgQVVUT0dBSU5fSURYKSkKKyNkZWZpbmUgTk9fRVhQTyAoKDEgPDwgRVhQT1NVUkVfSURYKSB8ICgxIDw8IENPQVJTRV9FWFBPU1VSRV9JRFgpIHwgXAorCQkgKDEgPDwgQVVUT0dBSU5fSURYKSkKICNkZWZpbmUgTk9fRlJFUSAoMSA8PCBGUkVRX0lEWCkKICNkZWZpbmUgTk9fQlJJR0hUTkVTUyAoMSA8PCBCUklHSFRORVNTX0lEWCkKIApAQCAtMTI3LDExICsxMzMsMTAgQEAKIH0KIAogLyogV2UgY2FsY3VsYXRlIHRoZSBhdXRvZ2FpbiBhdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2ZlciBvZiBhIGZyYW1lLCBhdCB0aGlzCi0gICBtb21lbnQgYSBmcmFtZSB3aXRoIHRoZSBvbGQgc2V0dGluZ3MgaXMgYmVpbmcgdHJhbnNtaXR0ZWQsIGFuZCBhIGZyYW1lIGlzCi0gICBiZWluZyBjYXB0dXJlZCB3aXRoIHRoZSBvbGQgc2V0dGluZ3MuIFNvIGlmIHdlIGFkanVzdCB0aGUgYXV0b2dhaW4gd2UgbXVzdAotICAgaWdub3JlIGF0bGVhc3QgdGhlIDIgbmV4dCBmcmFtZXMgZm9yIHRoZSBuZXcgc2V0dGluZ3MgdG8gY29tZSBpbnRvIGVmZmVjdAotICAgYmVmb3JlIGRvaW5nIGFueSBvdGhlciBhZGp1c3RtZW50cyAqLwotI2RlZmluZSBBVVRPR0FJTl9JR05PUkVfRlJBTUVTIDMKKyAgIG1vbWVudCBhIGZyYW1lIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBpcyBiZWluZyBjYXB0dXJlZCBhbmQgdHJhbnNtaXR0ZWQuIFNvCisgICBpZiB3ZSBhZGp1c3QgdGhlIGdhaW4gb3IgZXhwb3N1cmUgd2UgbXVzdCBpZ25vcmUgYXRsZWFzdCB0aGUgbmV4dCBmcmFtZSBmb3IKKyAgIHRoZSBuZXcgc2V0dGluZ3MgdG8gY29tZSBpbnRvIGVmZmVjdCBiZWZvcmUgZG9pbmcgYW55IG90aGVyIGFkanVzdG1lbnRzLiAqLworI2RlZmluZSBBVVRPR0FJTl9JR05PUkVfRlJBTUVTIDEKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKQEAgLTE0NSw3ICsxNTAsNyBAQAogc3RhdGljIGludCBzZF9zZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogI2RlZmluZSBCUklHSFRORVNTX0lEWCAwCiAJewogCSAgICB7CkBAIC0xNzEsNyArMTc2LDcgQEAKIAkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKICNkZWZpbmUgR0FJTl9ERUYgMTI3Ci0jZGVmaW5lIEdBSU5fS05FRSAyMDAKKyNkZWZpbmUgR0FJTl9LTkVFIDIzMAogCQkuZGVmYXVsdF92YWx1ZSA9IEdBSU5fREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0Z2FpbiwKQEAgLTE4MywxMCArMTg4LDEwIEBACiAJCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKIAkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJCS5uYW1lID0gIkV4cG9zdXJlIiwKLSNkZWZpbmUgRVhQT1NVUkVfREVGICAxNiAvKiAgMzIgbXMgLyAzMCBmcHMgKi8KLSNkZWZpbmUgRVhQT1NVUkVfS05FRSA1MCAvKiAxMDAgbXMgLyAxMCBmcHMgKi8KKyNkZWZpbmUgRVhQT1NVUkVfREVGICA2NiAvKiAgMzMgbXMgLyAzMCBmcHMgKGV4Y2VwdCBvbiBQQVNYWFgpICovCisjZGVmaW5lIEVYUE9TVVJFX0tORUUgMjAwIC8qIDEwMCBtcyAvIDEwIGZwcyAoZXhjZXB0IG9uIFBBU1hYWCkgKi8KIAkJCS5taW5pbXVtID0gMCwKLQkJCS5tYXhpbXVtID0gMjU1LAorCQkJLm1heGltdW0gPSAxMDIzLAogCQkJLnN0ZXAgPSAxLAogCQkJLmRlZmF1bHRfdmFsdWUgPSBFWFBPU1VSRV9ERUYsCiAJCQkuZmxhZ3MgPSAwLApAQCAtMTk0LDcgKzE5OSwyMyBAQAogCQkuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCiAJCS5nZXQgPSBzZF9nZXRleHBvc3VyZSwKIAl9LAotI2RlZmluZSBBVVRPR0FJTl9JRFggMworI2RlZmluZSBDT0FSU0VfRVhQT1NVUkVfSURYIDMKKwl7CisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiRXhwb3N1cmUiLAorI2RlZmluZSBDT0FSU0VfRVhQT1NVUkVfREVGICAyIC8qIDMwIGZwcyAqLworCQkJLm1pbmltdW0gPSAyLAorCQkJLm1heGltdW0gPSAxNSwKKwkJCS5zdGVwID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gQ09BUlNFX0VYUE9TVVJFX0RFRiwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRleHBvc3VyZSwKKwkJLmdldCA9IHNkX2dldGV4cG9zdXJlLAorCX0sCisjZGVmaW5lIEFVVE9HQUlOX0lEWCA0CiAJewogCQl7CiAJCQkuaWQgPSBWNEwyX0NJRF9BVVRPR0FJTiwKQEAgLTIxMCw3ICsyMzEsNyBAQAogCQkuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCiAJCS5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKIAl9LAotI2RlZmluZSBGUkVRX0lEWCA0CisjZGVmaW5lIEZSRVFfSURYIDUKIAl7CiAJCXsKIAkJCS5pZAkgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKQEAgLTIxOSw3ICsyNDAsNyBAQAogCQkJLm1pbmltdW0gPSAwLAogCQkJLm1heGltdW0gPSAyLAkvKiAwOiAwLCAxOiA1MEh6LCAyOjYwSHogKi8KIAkJCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgRlJFUV9ERUYgMQorI2RlZmluZSBGUkVRX0RFRiAwCiAJCQkuZGVmYXVsdF92YWx1ZSA9IEZSRVFfREVGLAogCQl9LAogCQkuc2V0ID0gc2Rfc2V0ZnJlcSwKQEAgLTM0NSw3ICszNjYsNyBAQAogfTsKIHN0YXRpYyBjb25zdCBfX3U4IGluaXRPdjc2MzBfM1tdID0gewogCTB4NDQsIDB4NDQsIDB4MDAsIDB4MWEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4ODAsCS8qIHIwMSAuLiByMDggKi8KLQkweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAkvKiByMDkgLi4gcjEwICovCisJMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogcjA5IC4uIHIxMCAqLwogCTB4MDAsIDB4MDIsIDB4MDEsIDB4MGEsCQkJCS8qIHIxMSAuLiByMTQgKi8KIAkweDI4LCAweDFlLAkJCS8qIEggJiBWIHNpemVzICAgICByMTUgLi4gcjE2ICovCiAJMHg2OCwgMHg4ZiwgTUNLX0lOSVQxLAkJCQkvKiByMTcgLi4gcjE5ICovCkBAIC0zODcsNiArNDA4LDMwIEBACiAJMHgxOCwgMHgxMCwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwNwogfTsKIC8qIGNvbXByZXNzaW9uIDB4ODYgbWNraW5pdDEgMHgyYiAqLworCisvKiAiS25vd24iIFBBUzEwNkIgcmVnaXN0ZXJzOgorICAweDAyIGNsb2NrIGRpdmlkZXIKKyAgMHgwMyBWYXJpYWJsZSBmcmFtZXJhdGUgYml0cyA0LTExCisgIDB4MDQgVmFyIGZyYW1lcmF0ZSBiaXRzIDAtMywgb25lIG11c3QgbGVhdmUgdGhlIDQgbXNiJ3MgYXQgMCAhIQorICAgICAgIFRoZSB2YXJpYWJsZSBmcmFtZXJhdGUgY29udHJvbCBtdXN0IG5ldmVyIGJlIHNldCBsb3dlciB0aGVuIDMwMCwKKyAgICAgICB3aGljaCBzZXRzIHRoZSBmcmFtZXJhdGUgYXQgOTAgLyByZWcwMiwgb3RoZXJ3aXNlIHZzeW5jIGlzIGxvc3QuCisgIDB4MDUgU2h1dHRlciBUaW1lIExpbmUgT2Zmc2V0LCB0aGlzIGNhbiBiZSB1c2VkIGFzIGFuIGV4cG9zdXJlIGNvbnRyb2w6CisgICAgICAgMCA9IHVzZSBmdWxsIGZyYW1lIHRpbWUsIDI1NSA9IG5vIGV4cG9zdXJlIGF0IGFsbAorICAgICAgIE5vdGUgdGhpcyBtYXkgbmV2ZXIgYmUgbGFyZ2VyIHRoZW4gInZhci1mcmFtZXJhdGUgY29udHJvbCIgLyAyIC0gMi4KKyAgICAgICBXaGVuIHZhci1mcmFtZXJhdGUgY29udHJvbCBpcyA8IDUxNCwgbm8gZXhwb3N1cmUgaXMgcmVhY2hlZCBhdCB0aGUgbWF4CisgICAgICAgYWxsb3dlZCB2YWx1ZSBmb3IgdGhlIGZyYW1lcmF0ZSBjb250cm9sIHZhbHVlLCByYXRoZXIgdGhlbiBhdCAyNTUuCisgIDB4MDYgU2h1dHRlciBUaW1lIFBpeGVsIE9mZnNldCwgbGlrZSByZWcwNSB0aGlzIGluZmx1ZW5jZXMgZXhwb3N1cmUsIGJ1dAorICAgICAgIG9ubHkgYSB2ZXJ5IGxpdHRsZSBiaXQsIGxlYXZlIGF0IDB4Y2QKKyAgMHgwNyBvZmZzZXQgc2lnbiBiaXQgKGJpdDAgMSA+IG5lZ2F0aXZlIG9mZnNldCkKKyAgMHgwOCBvZmZzZXQKKyAgMHgwOSBCbHVlIEdhaW4KKyAgMHgwYSBHcmVlbjEgR2FpbgorICAweDBiIEdyZWVuMiBHYWluCisgIDB4MGMgUmVkIEdhaW4KKyAgMHgwZSBHbG9iYWwgZ2FpbgorICAweDEzIFdyaXRlIDEgdG8gY29tbWl0IHNldHRpbmdzIHRvIHNlbnNvcgorKi8KKwogc3RhdGljIGNvbnN0IF9fdTggcGFzMTA2X3NlbnNvcl9pbml0W11bOF0gPSB7CiAJLyogUGl4ZWwgQ2xvY2sgRGl2aWRlciA2ICovCiAJeyAweGExLCAweDQwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDE0IH0sCkBAIC00MzMsMzcgKzQ3OCw1NSBAQAogCTB4NDQsIDB4NDQsIDB4MjEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwKIAkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAzLCAweDBhLAotCTB4MjgsIDB4MWUsIDB4MjgsIDB4ODksIDB4MjAsCisJMHgyOCwgMHgxZSwgMHgyMCwgMHg4OSwgMHgyMCwKIAkweDAwLCAweDAwLCAweDAyLCAweDAzLCAweDBmLCAweDBjCiB9OworCisvKiAiS25vd24iIFBBUzIwMkJDQiByZWdpc3RlcnM6CisgIDB4MDIgY2xvY2sgZGl2aWRlcgorICAweDA0IFZhcmlhYmxlIGZyYW1lcmF0ZSBiaXRzIDYtMTEgKCopCisgIDB4MDUgVmFyIGZyYW1lcmF0ZSAgYml0cyAwLTUsIG9uZSBtdXN0IGxlYXZlIHRoZSAyIG1zYidzIGF0IDAgISEKKyAgMHgwNyBCbHVlIEdhaW4KKyAgMHgwOCBHcmVlbiBHYWluCisgIDB4MDkgUmVkIEdhaW4KKyAgMHgwYiBvZmZzZXQgc2lnbiBiaXQgKGJpdDAgMSA+IG5lZ2F0aXZlIG9mZnNldCkKKyAgMHgwYyBvZmZzZXQKKyAgMHgwZSBVbmtub3duIGltYWdlIGlzIHNsaWdodGx5IGJyaWdodGVyIHdoZW4gYml0IDAgaXMgMCwgaWYgcmVnMGYgaXMgMCB0b28sCisgICAgICAgbGVhdmUgYXQgMSBvdGhlcndpc2Ugd2UgZ2V0IGEganVtcCBpbiBvdXIgZXhwb3N1cmUgY29udHJvbAorICAweDBmIEV4cG9zdXJlIDAtMjU1LCAwID0gdXNlIGZ1bGwgZnJhbWUgdGltZSwgMjU1ID0gbm8gZXhwb3N1cmUgYXQgYWxsCisgIDB4MTAgTWFzdGVyIGdhaW4gMCAtIDMxCisgIDB4MTEgd3JpdGUgMSB0byBhcHBseSBjaGFuZ2VzCisgICgqKSBUaGUgdmFyaWFibGUgZnJhbWVyYXRlIGNvbnRyb2wgbXVzdCBuZXZlciBiZSBzZXQgbG93ZXIgdGhlbiA1MDAKKyAgICAgIHdoaWNoIHNldHMgdGhlIGZyYW1lcmF0ZSBhdCAzMCAvIHJlZzAyLCBvdGhlcndpc2UgdnN5bmMgaXMgbG9zdC4KKyovCiBzdGF0aWMgY29uc3QgX191OCBwYXMyMDJfc2Vuc29yX2luaXRbXVs4XSA9IHsKLQl7MHhhMCwgMHg0MCwgMHgwMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJLyogU2V0IHRoZSBjbG9jayBkaXZpZGVyIHRvIDQgLT4gMzAgLyA0ID0gNy41IGZwcywgd2Ugd291bGQgbGlrZQorCSAgIHRvIHNldCBpdCBsb3dlciwgYnV0IGZvciBzb21lIHJlYXNvbiB0aGUgYnJpZGdlIHN0YXJ0cyBtaXNzaW5nCisJICAgdnN5bmMncyB0aGVuICovCisJezB4YTAsIDB4NDAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXsweGQwLCAweDQwLCAweDA0LCAweDA3LCAweDM0LCAweDAwLCAweDA5LCAweDEwfSwKIAl7MHhkMCwgMHg0MCwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMH0sCi0JezB4ZDAsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzIsIDB4MTB9LAorCXsweGQwLCAweDQwLCAweDBDLCAweDAwLCAweDBDLCAweDAxLCAweDMyLCAweDEwfSwKIAl7MHhkMCwgMHg0MCwgMHgxMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHgxMH0sCiAJezB4YTAsIDB4NDAsIDB4MTUsIDB4NzAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MTB9LAogCXsweGEwLCAweDQwLCAweDE4LCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweDEwfSwKIAl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHg2MywgMHgxMH0sCiAJezB4YTAsIDB4NDAsIDB4MDMsIDB4NTYsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MTB9LAogCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDAxLCAweDAwLCAweDYzLCAweDEwfSwKLQl7MHhiMCwgMHg0MCwgMHgwNCwgMHgwNywgMHgyYSwgMHgwMCwgMHg2MywgMHgxMH0sCi0JezB4YjAsIDB4NDAsIDB4MGUsIDB4MDAsIDB4M2QsIDB4MDAsIDB4NjMsIDB4MTB9LAotCi0JezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4M2QsIDB4MDAsIDB4NjMsIDB4MTZ9LAotCXsweGEwLCAweDQwLCAweDEwLCAweDA4LCAweDNkLCAweDAwLCAweDYzLCAweDE1fSwKLQl7MHhhMCwgMHg0MCwgMHgwMiwgMHgwNCwgMHgzZCwgMHgwMCwgMHg2MywgMHgxNn0sCi0JezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4M2QsIDB4MDAsIDB4NjMsIDB4MTZ9LAotCXsweGIwLCAweDQwLCAweDBlLCAweDAwLCAweDMxLCAweDAwLCAweDYzLCAweDE2fSwKLQl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgzMSwgMHgwMCwgMHg2MywgMHgxNn0sCi0JezB4YTAsIDB4NDAsIDB4MTAsIDB4MGUsIDB4MzEsIDB4MDAsIDB4NjMsIDB4MTV9LAotCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDMxLCAweDAwLCAweDYzLCAweDE2fSwKIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IGluaXRUYXM1MTEwW10gPSB7CitzdGF0aWMgY29uc3QgX191OCBpbml0VGFzNTExMGNbXSA9IHsKIAkweDQ0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDExLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHgwOSwgMHgwYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDA5LCAweDBhLAorCTB4MTYsIDB4MTIsIDB4NjAsIDB4ODYsIDB4MmIsCisJMHgxNCwgMHgwYSwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwNworfTsKKy8qIFNhbWUgYXMgYWJvdmUsIGV4Y2VwdCBhIGRpZmZlcmVudCBoc3RhcnQgKi8KK3N0YXRpYyBjb25zdCBfX3U4IGluaXRUYXM1MTEwZFtdID0geworCTB4NDQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA5LCAweDBhLAogCTB4MTYsIDB4MTIsIDB4NjAsIDB4ODYsIDB4MmIsCiAJMHgxNCwgMHgwYSwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwNwogfTsKQEAgLTQ3Niw3ICs1MzksNyBAQAogc3RhdGljIGNvbnN0IF9fdTggaW5pdFRhczUxMzBbXSA9IHsKIAkweDA0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDExLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwYywgMHgwYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBjLCAweDBhLAogCTB4MjgsIDB4MWUsIDB4NjAsIENPTVAsIE1DS19JTklULAogCTB4MTgsIDB4MTAsIDB4MDQsIDB4MDMsIDB4MTEsIDB4MGMKIH07CkBAIC00OTMsMTIgKzU1NiwxNCBAQAogU0VOUyhpbml0T3Y2NjUwLCBOVUxMLCBvdjY2NTBfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTnxGX1NJRiwgMCwgMHg2MCksCiBTRU5TKGluaXRPdjc2MzAsIGluaXRPdjc2MzBfMywgb3Y3NjMwX3NlbnNvcl9pbml0LCBOVUxMLCBvdjc2MzBfc2Vuc29yX2luaXRfMywKIAlGX0dBSU4sIDAsIDB4MjEpLAotU0VOUyhpbml0UGFzMTA2LCBOVUxMLCBwYXMxMDZfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfU0lGLCBOT19FWFBPfE5PX0ZSRVEsCitTRU5TKGluaXRQYXMxMDYsIE5VTEwsIHBhczEwNl9zZW5zb3JfaW5pdCwgTlVMTCwgTlVMTCwgRl9HQUlOfEZfU0lGLCBOT19GUkVRLAogCTApLAotU0VOUyhpbml0UGFzMjAyLCBpbml0UGFzMjAyLCBwYXMyMDJfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIDAsCi0JTk9fRVhQT3xOT19GUkVRLCAwKSwKLVNFTlMoaW5pdFRhczUxMTAsIE5VTEwsIHRhczUxMTBfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTnxGX1NJRiwKLQlOT19CUklHSFRORVNTfE5PX0ZSRVEsIDApLAorU0VOUyhpbml0UGFzMjAyLCBpbml0UGFzMjAyLCBwYXMyMDJfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTiwKKwlOT19GUkVRLCAwKSwKK1NFTlMoaW5pdFRhczUxMTBjLCBOVUxMLCB0YXM1MTEwX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLAorCUZfR0FJTnxGX1NJRnxGX0NPQVJTRV9FWFBPLCBOT19CUklHSFRORVNTfE5PX0ZSRVEsIDApLAorU0VOUyhpbml0VGFzNTExMGQsIE5VTEwsIHRhczUxMTBfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsCisJRl9HQUlOfEZfU0lGfEZfQ09BUlNFX0VYUE8sIE5PX0JSSUdIVE5FU1N8Tk9fRlJFUSwgMCksCiBTRU5TKGluaXRUYXM1MTMwLCBOVUxMLCB0YXM1MTMwX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLCAwLCBOT19FWFBPfE5PX0ZSRVEsCiAJMCksCiB9OwpAQCAtNTg3LDQyICs2NTIsMjggQEAKIAkJCWdvdG8gZXJyOwogCQlicmVhazsKIAkgICAgfQotCWNhc2UgU0VOU09SX1BBUzEwNjogewotCQlfX3U4IGkyYzFbXSA9Ci0JCQl7MHhhMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07Ci0KLQkJaTJjMVszXSA9IHNkLT5icmlnaHRuZXNzID4+IDM7Ci0JCWkyYzFbMl0gPSAweDBlOwotCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmMxKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJaTJjMVszXSA9IDB4MDE7Ci0JCWkyYzFbMl0gPSAweDEzOwotCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmMxKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJYnJlYWs7Ci0JICAgIH0KKwljYXNlIFNFTlNPUl9QQVMxMDY6CiAJY2FzZSBTRU5TT1JfUEFTMjAyOiB7Ci0JCS8qIF9fdTggaTJjcGV4cG8xW10gPQotCQkJezB4YjAsIDB4NDAsIDB4MDQsIDB4MDcsIDB4MmEsIDB4MDAsIDB4NjMsIDB4MTZ9OyAqLwotCQlfX3U4IGkyY3BleHBvW10gPQotCQkJezB4YjAsIDB4NDAsIDB4MGUsIDB4MDEsIDB4YWIsIDB4MDAsIDB4NjMsIDB4MTZ9OwotCQlfX3U4IGkyY3AyMDJbXSA9Ci0JCQl7MHhhMCwgMHg0MCwgMHgxMCwgMHgwZSwgMHgzMSwgMHgwMCwgMHg2MywgMHgxNX07Ci0JCXN0YXRpYyBfX3U4IGkyY3Bkb2l0W10gPQotCQkJezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4MzEsIDB4MDAsIDB4NjMsIDB4MTZ9OworCQlfX3U4IGkyY3BicmlnaHRbXSA9CisJCQl7MHhiMCwgMHg0MCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn07CisJCV9fdTggaTJjcGRvaXRbXSA9CisJCQl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn07CiAKLQkJLyogY2hhbmdlIHJlZyAweDEwICovCi0JCWkyY3BleHBvWzRdID0gMHhmZiAtIHNkLT5icmlnaHRuZXNzOwotLyoJCWlmKGkyY193KGdzcGNhX2RldixpMmNwZXhwbzEpIDwgMCkKLQkJCWdvdG8gZXJyOyAqLwotLyoJCWlmKGkyY193KGdzcGNhX2RldixpMmNwZG9pdCkgPCAwKQotCQkJZ290byBlcnI7ICovCi0JCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BleHBvKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGRvaXQpIDwgMCkKLQkJCWdvdG8gZXJyOwotCQlpMmNwMjAyWzNdID0gc2QtPmJyaWdodG5lc3MgPj4gMzsKLQkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcDIwMikgPCAwKQorCQkvKiBQQVMxMDYgdXNlcyByZWcgNyBhbmQgOCBpbnN0ZWFkIG9mIGIgYW5kIGMgKi8KKwkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BBUzEwNikgeworCQkJaTJjcGJyaWdodFsyXSA9IDc7CisJCQlpMmNwZG9pdFsyXSA9IDB4MTM7CisJCX0KKworCQlpZiAoc2QtPmJyaWdodG5lc3MgPCAxMjcpIHsKKwkJCS8qIGNoYW5nZSByZWcgMHgwYiwgc2lnbnJlZyAqLworCQkJaTJjcGJyaWdodFszXSA9IDB4MDE7CisJCQkvKiBzZXQgcmVnIDB4MGMsIG9mZnNldCAqLworCQkJaTJjcGJyaWdodFs0XSA9IDEyNyAtIHNkLT5icmlnaHRuZXNzOworCQl9IGVsc2UKKwkJCWkyY3BicmlnaHRbNF0gPSBzZC0+YnJpZ2h0bmVzcyAtIDEyNzsKKworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwYnJpZ2h0KSA8IDApCiAJCQlnb3RvIGVycjsKIAkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGRvaXQpIDwgMCkKIAkJCWdvdG8gZXJyOwpAQCAtNjUyLDcgKzcwMyw4IEBACiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAotCWNhc2UgU0VOU09SX1RBUzUxMTA6IHsKKwljYXNlIFNFTlNPUl9UQVM1MTEwQzoKKwljYXNlIFNFTlNPUl9UQVM1MTEwRDogewogCQlfX3U4IGkyY1tdID0KIAkJCXsweDMwLCAweDExLCAweDAyLCAweDIwLCAweDcwLCAweDAwLCAweDAwLCAweDEwfTsKIApAQCAtNjc0LDYgKzcyNiwzNyBAQAogCQkJZ290byBlcnI7CiAJCWJyZWFrOwogCSAgICB9CisJY2FzZSBTRU5TT1JfUEFTMTA2OgorCWNhc2UgU0VOU09SX1BBUzIwMjogeworCQlfX3U4IGkyY3BnYWluW10gPQorCQkJezB4YTAsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTV9OworCQlfX3U4IGkyY3Bjb2xvcmdhaW5bXSA9CisJCQl7MHhjMCwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNX07CisJCV9fdTggaTJjcGRvaXRbXSA9CisJCQl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn07CisKKwkJLyogUEFTMTA2IHVzZXMgZGlmZmVyZW50IHJlZ3MgKGFuZCBoYXMgc3BsaXQgZ3JlZW4gZ2FpbnMpICovCisJCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QQVMxMDYpIHsKKwkJCWkyY3BnYWluWzJdID0gMHgwZTsKKwkJCWkyY3Bjb2xvcmdhaW5bMF0gPSAweGQwOworCQkJaTJjcGNvbG9yZ2FpblsyXSA9IDB4MDk7CisJCQlpMmNwZG9pdFsyXSA9IDB4MTM7CisJCX0KKworCQlpMmNwZ2FpblszXSA9IHNkLT5nYWluID4+IDM7CisJCWkyY3Bjb2xvcmdhaW5bM10gPSBzZC0+Z2FpbiA+PiA0OworCQlpMmNwY29sb3JnYWluWzRdID0gc2QtPmdhaW4gPj4gNDsKKwkJaTJjcGNvbG9yZ2Fpbls1XSA9IHNkLT5nYWluID4+IDQ7CisJCWkyY3Bjb2xvcmdhaW5bNl0gPSBzZC0+Z2FpbiA+PiA0OworCisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BnYWluKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGNvbG9yZ2FpbikgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3Bkb2l0KSA8IDApCisJCQlnb3RvIGVycjsKKwkJYnJlYWs7CisJICAgIH0KIAl9CiAJcmV0dXJuOwogZXJyOgpAQCAtNjg0LDE5ICs3NjcsMjEgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJX191OCBnYWluOwotCV9fdTggcmdiX3ZhbHVlOworCV9fdTggYnVmWzJdID0geyAwLCAwIH07CisKKwlpZiAoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0dBSU4pIHsKKwkJLyogVXNlIHRoZSBzZW5zb3IgZ2FpbiB0byBkbyB0aGUgYWN0dWFsIGdhaW4gKi8KKwkJc2V0c2Vuc29yZ2Fpbihnc3BjYV9kZXYpOworCQlyZXR1cm47CisJfQogCiAJZ2FpbiA9IHNkLT5nYWluID4+IDQ7CiAKIAkvKiByZWQgYW5kIGJsdWUgZ2FpbiAqLwotCXJnYl92YWx1ZSA9IGdhaW4gPDwgNCB8IGdhaW47Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDEwLCAmcmdiX3ZhbHVlLCAxKTsKKwlidWZbMF0gPSBnYWluIDw8IDQgfCBnYWluOwogCS8qIGdyZWVuIGdhaW4gKi8KLQlyZ2JfdmFsdWUgPSBnYWluOwotCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgJnJnYl92YWx1ZSwgMSk7Ci0KLQlpZiAoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0dBSU4pCi0JCXNldHNlbnNvcmdhaW4oZ3NwY2FfZGV2KTsKKwlidWZbMV0gPSBnYWluOworCXJlZ193KGdzcGNhX2RldiwgMHgxMCwgYnVmLCAyKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtNzA0LDE3ICs3ODksMTIgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKLQljYXNlIFNFTlNPUl9UQVM1MTEwOiB7Ci0JCV9fdTggcmVnOwotCisJY2FzZSBTRU5TT1JfVEFTNTExMEM6CisJY2FzZSBTRU5TT1JfVEFTNTExMEQ6IHsKIAkJLyogcmVnaXN0ZXIgMTkncyBoaWdoIG5pYmJsZSBjb250YWlucyB0aGUgc245YzEweCBjbG9jayBkaXZpZGVyCiAJCSAgIFRoZSBoaWdoIG5pYmJsZSBjb25maWd1cmVzIHRoZSBubyBmcHMgYWNjb3JkaW5nIHRvIHRoZQogCQkgICBmb3JtdWxhOiA2MCAvIGhpZ2hfbmliYmxlLiBXaXRoIGEgbWF4aW11bSBvZiAzMCBmcHMgKi8KLQkJcmVnID0gMTIwICogc2QtPmV4cG9zdXJlIC8gMTAwMDsKLQkJaWYgKHJlZyA8IDIpCi0JCQlyZWcgPSAyOwotCQllbHNlIGlmIChyZWcgPiAxNSkKLQkJCXJlZyA9IDE1OworCQlfX3U4IHJlZyA9IHNkLT5leHBvc3VyZTsKIAkJcmVnID0gKHJlZyA8PCA0KSB8IDB4MGI7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgxOSwgJnJlZywgMSk7CiAJCWJyZWFrOwpAQCAtNzUwLDIwICs4MzAsMjEgQEAKIAkJfSBlbHNlCiAJCQlyZWcxMF9tYXggPSAweDQxOwogCi0JCXJlZzExID0gKDYwICogc2QtPmV4cG9zdXJlICsgOTk5KSAvIDEwMDA7CisJCXJlZzExID0gKDE1ICogc2QtPmV4cG9zdXJlICsgOTk5KSAvIDEwMDA7CiAJCWlmIChyZWcxMSA8IDEpCiAJCQlyZWcxMSA9IDE7CiAJCWVsc2UgaWYgKHJlZzExID4gMTYpCiAJCQlyZWcxMSA9IDE2OwogCi0JCS8qIEluIDY0MHg0ODAsIGlmIHRoZSByZWcxMSBoYXMgbGVzcyB0aGFuIDMsIHRoZSBpbWFnZSBpcwotCQkgICB1bnN0YWJsZSAobm90IGVub3VnaCBiYW5kd2lkdGgpLiAqLwotCQlpZiAoZ3NwY2FfZGV2LT53aWR0aCA9PSA2NDAgJiYgcmVnMTEgPCAzKQotCQkJcmVnMTEgPSAzOworCQkvKiBJbiA2NDB4NDgwLCBpZiB0aGUgcmVnMTEgaGFzIGxlc3MgdGhhbiA0LCB0aGUgaW1hZ2UgaXMKKwkJICAgdW5zdGFibGUgKHRoZSBicmlkZ2UgZ29lcyBpbnRvIGEgaGlnaGVyIGNvbXByZXNzaW9uIG1vZGUKKwkJICAgd2hpY2ggd2UgaGF2ZSBub3QgcmV2ZXJzZSBlbmdpbmVlcmVkIHlldCkuICovCisJCWlmIChnc3BjYV9kZXYtPndpZHRoID09IDY0MCAmJiByZWcxMSA8IDQpCisJCQlyZWcxMSA9IDQ7CiAKIAkJLyogZnJhbWUgZXhwb3N1cmUgdGltZSBpbiBtcyA9IDEwMDAgKiByZWcxMSAvIDMwICAgIC0+Ci0JCXJlZzEwID0gc2QtPmV4cG9zdXJlICogMiAqIHJlZzEwX21heCAvICgxMDAwICogcmVnMTEgLyAzMCkgKi8KLQkJcmVnMTAgPSAoc2QtPmV4cG9zdXJlICogNjAgKiByZWcxMF9tYXgpIC8gKDEwMDAgKiByZWcxMSk7CisJCXJlZzEwID0gKHNkLT5leHBvc3VyZSAvIDIpICogcmVnMTBfbWF4IC8gKDEwMDAgKiByZWcxMSAvIDMwKSAqLworCQlyZWcxMCA9IChzZC0+ZXhwb3N1cmUgKiAxNSAqIHJlZzEwX21heCkgLyAoMTAwMCAqIHJlZzExKTsKIAogCQkvKiBEb24ndCBhbGxvdyB0aGlzIHRvIGdldCBiZWxvdyAxMCB3aGVuIHVzaW5nIGF1dG9nYWluLCB0aGUKIAkJICAgc3RlcHMgYmVjb21lIHZlcnkgbGFyZ2UgKHJlbGF0aXZlbHkpIHdoZW4gYmVsb3cgMTAgY2F1c2luZwpAQCAtNzg2LDEwICs4NjcsODUgQEAKIAkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjKSA9PSAwKQogCQkJc2QtPnJlZzExID0gcmVnMTE7CiAJCWVsc2UKLQkJCVBERUJVRyhEX0VSUiwgImkyYyBlcnJvciBleHBvc3VyZSIpOworCQkJZ290byBlcnI7CisJCWJyZWFrOworCSAgICB9CisJY2FzZSBTRU5TT1JfUEFTMjAyOiB7CisJCV9fdTggaTJjcGZyYW1lcmF0ZVtdID0KKwkJCXsweGIwLCAweDQwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2fTsKKwkJX191OCBpMmNwZXhwb1tdID0KKwkJCXsweGEwLCAweDQwLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2fTsKKwkJY29uc3QgX191OCBpMmNwZG9pdFtdID0KKwkJCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE2fTsKKwkJaW50IGZyYW1lcmF0ZV9jdHJsOworCisJCS8qIFRoZSBleHBvc3VyZSBrbmVlIGZvciB0aGUgYXV0b2dhaW4gYWxnb3JpdGhtIGlzIDIwMAorCQkgICAoMTAwIG1zIC8gMTAgZnBzIG9uIG90aGVyIHNlbnNvcnMpLCBmb3IgdmFsdWVzIGJlbG93IHRoaXMKKwkJICAgdXNlIHRoZSBjb250cm9sIGZvciBzZXR0aW5nIHRoZSBwYXJ0aWFsIGZyYW1lIGV4cG9zZSB0aW1lLAorCQkgICBhYm92ZSB0aGF0IHVzZSB2YXJpYWJsZSBmcmFtZXJhdGUuIFRoaXMgd2F5IHdlIHJ1biBhdCBtYXgKKwkJICAgZnJhbWVyYXRlICg2NDB4NDgwQDcuNSBmcHMsIDMyMHgyNDBAMTBmcHMpIHVudGlsIHRoZSBrbmVlCisJCSAgIGlzIHJlYWNoZWQuIFVzaW5nIHRoZSB2YXJpYWJsZSBmcmFtZXJhdGUgY29udHJvbCBhYm92ZSAyMDAKKwkJICAgaXMgYmV0dGVyIHRoZW4gcGxheWluZyBhcm91bmQgd2l0aCBib3RoIGNsb2NrZGl2ICsgcGFydGlhbAorCQkgICBmcmFtZSBleHBvc3VyZSB0aW1lcyAobGlrZSB3ZSBhcmUgZG9pbmcgd2l0aCB0aGUgb3YgY2hpcHMpLAorCQkgICBhcyB0aGF0IHNvbWV0aW1lcyBsZWFkcyB0byBqdW1wcyBpbiB0aGUgZXhwb3N1cmUgY29udHJvbCwKKwkJICAgd2hpY2ggYXJlIGJhZCBmb3IgYXV0byBleHBvc3VyZS4gKi8KKwkJaWYgKHNkLT5leHBvc3VyZSA8IDIwMCkgeworCQkJaTJjcGV4cG9bM10gPSAyNTUgLSAoc2QtPmV4cG9zdXJlICogMjU1KSAvIDIwMDsKKwkJCWZyYW1lcmF0ZV9jdHJsID0gNTAwOworCQl9IGVsc2UgeworCQkJLyogVGhlIFBBUzIwMidzIGV4cG9zdXJlIGNvbnRyb2wgZ29lcyBmcm9tIDAgLSA0MDk1LAorCQkJICAgYnV0IGFueXRoaW5nIGJlbG93IDUwMCBjYXVzZXMgdnN5bmMgaXNzdWVzLCBzbyBzY2FsZQorCQkJICAgb3VyIDIwMC0xMDIzIHRvIDUwMC00MDk1ICovCisJCQlmcmFtZXJhdGVfY3RybCA9IChzZC0+ZXhwb3N1cmUgLSAyMDApICogMTAwMCAvIDIyOSArCisJCQkJCSA1MDA7CisJCX0KKworCQlpMmNwZnJhbWVyYXRlWzNdID0gZnJhbWVyYXRlX2N0cmwgPj4gNjsKKwkJaTJjcGZyYW1lcmF0ZVs0XSA9IGZyYW1lcmF0ZV9jdHJsICYgMHgzZjsKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGZyYW1lcmF0ZSkgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BleHBvKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGRvaXQpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlicmVhazsKKwkgICAgfQorCWNhc2UgU0VOU09SX1BBUzEwNjogeworCQlfX3U4IGkyY3BmcmFtZXJhdGVbXSA9CisJCQl7MHhiMSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07CisJCV9fdTggaTJjcGV4cG9bXSA9CisJCQl7MHhhMSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07CisJCWNvbnN0IF9fdTggaTJjcGRvaXRbXSA9CisJCQl7MHhhMSwgMHg0MCwgMHgxMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07CisJCWludCBmcmFtZXJhdGVfY3RybDsKKworCQkvKiBGb3IgdmFsdWVzIGJlbG93IDE1MCB1c2UgcGFydGlhbCBmcmFtZSBleHBvc3VyZSwgYWJvdmUKKwkJICAgdGhhdCB1c2UgZnJhbWVyYXRlIGN0cmwgKi8KKwkJaWYgKHNkLT5leHBvc3VyZSA8IDE1MCkgeworCQkJaTJjcGV4cG9bM10gPSAxNTAgLSBzZC0+ZXhwb3N1cmU7CisJCQlmcmFtZXJhdGVfY3RybCA9IDMwMDsKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBQQVMxMDYncyBleHBvc3VyZSBjb250cm9sIGdvZXMgZnJvbSAwIC0gNDA5NSwKKwkJCSAgIGJ1dCBhbnl0aGluZyBiZWxvdyAzMDAgY2F1c2VzIHZzeW5jIGlzc3Vlcywgc28gc2NhbGUKKwkJCSAgIG91ciAxNTAtMTAyMyB0byAzMDAtNDA5NSAqLworCQkJZnJhbWVyYXRlX2N0cmwgPSAoc2QtPmV4cG9zdXJlIC0gMTUwKSAqIDEwMDAgLyAyMzAgKworCQkJCQkgMzAwOworCQl9CisKKwkJaTJjcGZyYW1lcmF0ZVszXSA9IGZyYW1lcmF0ZV9jdHJsID4+IDQ7CisJCWkyY3BmcmFtZXJhdGVbNF0gPSBmcmFtZXJhdGVfY3RybCAmIDB4MGY7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BmcmFtZXJhdGUpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwZXhwbykgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3Bkb2l0KSA8IDApCisJCQlnb3RvIGVycjsKIAkJYnJlYWs7CiAJICAgIH0KIAl9CisJcmV0dXJuOworZXJyOgorCVBERUJVRyhEX0VSUiwgImkyYyBlcnJvciBleHBvc3VyZSIpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTgyMywzMCArOTc5LDQzIEBACiAJfQogfQogCisjaW5jbHVkZSAiY29hcnNlX2V4cG9fYXV0b2dhaW4uaCIKKwogc3RhdGljIHZvaWQgZG9fYXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCWludCBkZWFkem9uZSwgZGVzaXJlZF9hdmdfbHVtOworCWludCBkZWFkem9uZSwgZGVzaXJlZF9hdmdfbHVtLCByZXN1bHQ7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBhdmdfbHVtID0gYXRvbWljX3JlYWQoJnNkLT5hdmdfbHVtKTsKIAotCWlmIChhdmdfbHVtID09IC0xKQorCWlmIChhdmdfbHVtID09IC0xIHx8ICFzZC0+YXV0b2dhaW4pCiAJCXJldHVybjsKIAorCWlmIChzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcyA+IDApIHsKKwkJc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMtLTsKKwkJcmV0dXJuOworCX0KKwogCS8qIFNJRiAvIFZHQSBzZW5zb3JzIGhhdmUgYSBkaWZmZXJlbnQgYXV0b2V4cG9zdXJlIGFyZWEgYW5kIHRodXMKIAkgICBkaWZmZXJlbnQgYXZnX2x1bSB2YWx1ZXMgZm9yIHRoZSBzYW1lIHBpY3R1cmUgYnJpZ2h0bmVzcyAqLwogCWlmIChzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5mbGFncyAmIEZfU0lGKSB7Ci0JCWRlYWR6b25lID0gMTAwMDsKLQkJZGVzaXJlZF9hdmdfbHVtID0gNzAwMDsKKwkJZGVhZHpvbmUgPSA1MDA7CisJCS8qIFNJRiBzZW5zb3JzIHRlbmQgdG8gb3ZlcmV4cG9zZSwgc28ga2VlcCB0aGlzIHNtYWxsICovCisJCWRlc2lyZWRfYXZnX2x1bSA9IDUwMDA7CiAJfSBlbHNlIHsKLQkJZGVhZHpvbmUgPSAzMDAwOwotCQlkZXNpcmVkX2F2Z19sdW0gPSAyMzAwMDsKKwkJZGVhZHpvbmUgPSAxNTAwOworCQlkZXNpcmVkX2F2Z19sdW0gPSAxODAwMDsKIAl9CiAKLQlpZiAoc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMgPiAwKQotCQlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcy0tOwotCWVsc2UgaWYgKGdzcGNhX2F1dG9fZ2Fpbl9uX2V4cG9zdXJlKGdzcGNhX2RldiwgYXZnX2x1bSwKLQkJCXNkLT5icmlnaHRuZXNzICogZGVzaXJlZF9hdmdfbHVtIC8gMTI3LAotCQkJZGVhZHpvbmUsIEdBSU5fS05FRSwgRVhQT1NVUkVfS05FRSkpIHsKKwlpZiAoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0NPQVJTRV9FWFBPKQorCQlyZXN1bHQgPSBnc3BjYV9jb2Fyc2VfZ3JhaW5lZF9leHBvX2F1dG9nYWluKGdzcGNhX2RldiwgYXZnX2x1bSwKKwkJCQlzZC0+YnJpZ2h0bmVzcyAqIGRlc2lyZWRfYXZnX2x1bSAvIDEyNywKKwkJCQlkZWFkem9uZSk7CisJZWxzZQorCQlyZXN1bHQgPSBnc3BjYV9hdXRvX2dhaW5fbl9leHBvc3VyZShnc3BjYV9kZXYsIGF2Z19sdW0sCisJCQkJc2QtPmJyaWdodG5lc3MgKiBkZXNpcmVkX2F2Z19sdW0gLyAxMjcsCisJCQkJZGVhZHpvbmUsIEdBSU5fS05FRSwgRVhQT1NVUkVfS05FRSk7CisKKwlpZiAocmVzdWx0KSB7CiAJCVBERUJVRyhEX0ZSQU0sICJhdXRvZ2FpbjogZ2FpbiBjaGFuZ2VkOiBnYWluOiAlZCBleHBvOiAlZCIsCiAJCQkoaW50KXNkLT5nYWluLCAoaW50KXNkLT5leHBvc3VyZSk7CiAJCXNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzID0gQVVUT0dBSU5fSUdOT1JFX0ZSQU1FUzsKQEAgLTg4MSw3ICsxMDUwLDEzIEBACiAKIAlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXNkLT5nYWluID0gR0FJTl9ERUY7Ci0Jc2QtPmV4cG9zdXJlID0gRVhQT1NVUkVfREVGOworCWlmIChzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5mbGFncyAmIEZfQ09BUlNFX0VYUE8pIHsKKwkJc2QtPmV4cG9zdXJlID0gQ09BUlNFX0VYUE9TVVJFX0RFRjsKKwkJZ3NwY2FfZGV2LT5jdHJsX2RpcyB8PSAoMSA8PCBFWFBPU1VSRV9JRFgpOworCX0gZWxzZSB7CisJCXNkLT5leHBvc3VyZSA9IEVYUE9TVVJFX0RFRjsKKwkJZ3NwY2FfZGV2LT5jdHJsX2RpcyB8PSAoMSA8PCBDT0FSU0VfRVhQT1NVUkVfSURYKTsKKwl9CiAJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBBVVRPR0FJTl9JRFgpKQogCQlzZC0+YXV0b2dhaW4gPSAwOyAvKiBEaXNhYmxlIGRvX2F1dG9nYWluIGNhbGxiYWNrICovCiAJZWxzZQpAQCAtOTE3LDkgKzEwOTIsNiBAQAogCXJlZzEyXzE5WzZdID0gc245YzEweFsweDE4IC0gMV0gfCAobW9kZSA8PCA0KTsKIAkvKiBTcGVjaWFsIGNhc2VzIHdoZXJlIHJlZyAxNyBhbmQgb3IgMTkgdmFsdWUgZGVwZW5kcyBvbiBtb2RlICovCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfUEFTMjAyOgotCQlyZWcxMl8xOVs1XSA9IG1vZGUgPyAweDI0IDogMHgyMDsKLQkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfVEFTNTEzMENYWDoKIAkJLyogcHJvYmFibHkgbm90IG1vZGUgc3BlY2lmaWMgYXQgYWxsIG1vc3QgbGlrZWx5IHRoZSB1cHBlcgogCQkgICBuaWJibGUgb2YgMHgxOSBpcyBleHBvc3VyZSAoY2xvY2sgZGl2aWRlcikganVzdCBhcyB3aXRoCkBAIC05NTUsNiArMTEyNywxNiBAQAogCQkJc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc2Vuc29yX2JyaWRnZV9pbml0X3NpemVbCiAJCQkJc2QtPmJyaWRnZV0pOwogCisJLyogTW9kZSBzcGVjaWZpYyBzZW5zb3Igc2V0dXAgKi8KKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9QQVMyMDI6IHsKKwkJY29uc3QgX191OCBpMmNwY2xvY2tkaXZbXSA9CisJCQl7MHhhMCwgMHg0MCwgMHgwMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH07CisJCS8qIGNsb2NrZGl2IGZyb20gNCB0byAzICg3LjUgLT4gMTAgZnBzKSB3aGVuIGluIGxvdyByZXMgbW9kZSAqLworCQlpZiAobW9kZSkKKwkJCWkyY193KGdzcGNhX2RldiwgaTJjcGNsb2NrZGl2KTsKKwkgICAgfQorCX0KIAkvKiBIX3NpemUgVl9zaXplIDB4MjgsIDB4MWUgLT4gNjQweDQ4MC4gMHgxNiwgMHgxMiAtPiAzNTJ4Mjg4ICovCiAJcmVnX3coZ3NwY2FfZGV2LCAweDE1LCAmcmVnMTJfMTlbM10sIDIpOwogCS8qIGNvbXByZXNzaW9uIHJlZ2lzdGVyICovCkBAIC05ODUsNiArMTE2Nyw4IEBACiAKIAlzZC0+ZnJhbWVzX3RvX2Ryb3AgPSAwOwogCXNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzID0gMDsKKwlzZC0+ZXhwX3Rvb19oaWdoX2NudCA9IDA7CisJc2QtPmV4cF90b29fbG93X2NudCA9IDA7CiAJYXRvbWljX3NldCgmc2QtPmF2Z19sdW0sIC0xKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExNDMsMTEgKzEzMjcsMTQgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzZC0+YXV0b2dhaW4gPSB2YWw7CisJc2QtPmV4cF90b29faGlnaF9jbnQgPSAwOworCXNkLT5leHBfdG9vX2xvd19jbnQgPSAwOworCiAJLyogd2hlbiBzd2l0Y2hpbmcgdG8gYXV0b2dhaW4gc2V0IGRlZmF1bHRzIHRvIG1ha2Ugc3VyZQogCSAgIHdlIGFyZSBvbiBhIHZhbGlkIHBvaW50IG9mIHRoZSBhdXRvZ2FpbiBnYWluIC8KIAkgICBleHBvc3VyZSBrbmVlIGdyYXBoLCBhbmQgZ2l2ZSB0aGlzIGNoYW5nZSB0aW1lIHRvCiAJICAgdGFrZSBlZmZlY3QgYmVmb3JlIGRvaW5nIGF1dG9nYWluLiAqLwotCWlmIChzZC0+YXV0b2dhaW4pIHsKKwlpZiAoc2QtPmF1dG9nYWluICYmICEoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0NPQVJTRV9FWFBPKSkgewogCQlzZC0+ZXhwb3N1cmUgPSBFWFBPU1VSRV9ERUY7CiAJCXNkLT5nYWluID0gR0FJTl9ERUY7CiAJCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgewpAQCAtMTIwNyw2ICsxMzk0LDI1IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJydXB0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChsZW4gPT0gMSAmJiBkYXRhWzBdID09IDEpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAwKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLApAQCAtMTIxOSw2ICsxNDI1LDkgQEAKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKIAkucXVlcnltZW51ID0gc2RfcXVlcnltZW51LAogCS5kcV9jYWxsYmFjayA9IGRvX2F1dG9nYWluLAorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpAQCAtMTIyNywyMSArMTQzNiwyMSBAQAogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSBfX2RldmluaXRjb25zdCA9IHsKLQl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAwMSksIFNCKFRBUzUxMTAsIDEwMil9LCAvKiBUQVM1MTEwQzFCICovCi0Je1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDUpLCBTQihUQVM1MTEwLCAxMDEpfSwgLyogVEFTNTExMEMxQiAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDAxKSwgU0IoVEFTNTExMEMsIDEwMil9LCAvKiBUQVM1MTEwQzFCICovCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDUpLCBTQihUQVM1MTEwQywgMTAxKX0sIC8qIFRBUzUxMTBDMUIgKi8KICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQotCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA3KSwgU0IoVEFTNTExMCwgMTAxKX0sIC8qIFRBUzUxMTBEICovCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDcpLCBTQihUQVM1MTEwRCwgMTAxKX0sIC8qIFRBUzUxMTBEICovCisjZW5kaWYKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAwOSksIFNCKFBBUzEwNiwgMTAxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMGQpLCBTQihQQVMxMDYsIDEwMSl9LAotI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMTEpLCBTQihPVjY2NTAsIDEwMSl9LAogI2lmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMiAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDJfTU9EVUxFCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMTkpLCBTQihPVjc2MzAsIDEwMSl9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI0KSwgU0IoVEFTNTEzMENYWCwgMTAyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjUpLCBTQihUQVM1MTMwQ1hYLCAxMDIpfSwKKyNlbmRpZgogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI4KSwgU0IoUEFTMjAyLCAxMDIpfSwKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOSksIFNCKFBBUzEwNiwgMTAyKX0sCi0jZW5kaWYKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYyksIFNCKE9WNzYzMCwgMTAyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmQpLCBTQihIVjcxMzFSLCAxMDIpfSwKICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKaW5kZXggMGJkMzZhMC4uODNkNTc3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCkBAIC0yMSw2ICsyMSw3IEBACiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInNvbml4aiIKIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAiZ3NwY2EuaCIKICNpbmNsdWRlICJqcGVnLmgiCiAKQEAgLTQ1LDYgKzQ2LDcgQEAKIAl1OCByZWQ7CiAJdTggZ2FtbWE7CiAJdTggdmZsaXA7CQkJLyogb3Y3NjMwL292NzY0OCBvbmx5ICovCisJdTggc2hhcnBuZXNzOwogCXU4IGluZnJhcmVkOwkJCS8qIG10OXYxMTEgb25seSAqLwogCXU4IGZyZXE7CQkJLyogb3Y3Nnh4IG9ubHkgKi8KIAl1OCBxdWFsaXR5OwkJCS8qIGltYWdlIHF1YWxpdHkgKi8KQEAgLTY0LDE2ICs2NiwxNyBAQAogI2RlZmluZSBCUklER0VfU045QzExMCAyCiAjZGVmaW5lIEJSSURHRV9TTjlDMTIwIDMKIAl1OCBzZW5zb3I7CQkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAqLwotI2RlZmluZSBTRU5TT1JfSFY3MTMxUiAwCi0jZGVmaW5lIFNFTlNPUl9NSTAzNjAgMQotI2RlZmluZSBTRU5TT1JfTU80MDAwIDIKLSNkZWZpbmUgU0VOU09SX01UOVYxMTEgMwotI2RlZmluZSBTRU5TT1JfT002ODAyIDQKLSNkZWZpbmUgU0VOU09SX09WNzYzMCA1Ci0jZGVmaW5lIFNFTlNPUl9PVjc2NDggNgotI2RlZmluZSBTRU5TT1JfT1Y3NjYwIDcKLSNkZWZpbmUgU0VOU09SX1BPMTAzMCA4Ci0jZGVmaW5lIFNFTlNPUl9TUDgwNzA4IDkKKyNkZWZpbmUgU0VOU09SX0FEQ00xNzAwIDAKKyNkZWZpbmUgU0VOU09SX0hWNzEzMVIgMQorI2RlZmluZSBTRU5TT1JfTUkwMzYwIDIKKyNkZWZpbmUgU0VOU09SX01PNDAwMCAzCisjZGVmaW5lIFNFTlNPUl9NVDlWMTExIDQKKyNkZWZpbmUgU0VOU09SX09NNjgwMiA1CisjZGVmaW5lIFNFTlNPUl9PVjc2MzAgNgorI2RlZmluZSBTRU5TT1JfT1Y3NjQ4IDcKKyNkZWZpbmUgU0VOU09SX09WNzY2MCA4CisjZGVmaW5lIFNFTlNPUl9QTzEwMzAgOQorI2RlZmluZSBTRU5TT1JfU1A4MDcwOCAxMAogCXU4IGkyY19hZGRyOwogCiAJdTggKmpwZWdfaGRyOwpAQCAtOTYsMTIgKzk5LDE0IEBACiBzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldGluZnJhcmVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0aW5mcmFyZWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKICNkZWZpbmUgQlJJR0hUTkVTU19JRFggMAogCXsKIAkgICAgewpAQCAtMjI1LDggKzIzMCwyMyBAQAogCSAgICAuc2V0ID0gc2Rfc2V0dmZsaXAsCiAJICAgIC5nZXQgPSBzZF9nZXR2ZmxpcCwKIAl9LAorI2RlZmluZSBTSEFSUE5FU1NfSURYIDgKKwl7CisJICAgIHsKKwkJLmlkCSA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJTaGFycG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNIQVJQTkVTU19ERUYgOTAKKwkJLmRlZmF1bHRfdmFsdWUgPSBTSEFSUE5FU1NfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0c2hhcnBuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0c2hhcnBuZXNzLAorCX0sCiAvKiBtdDl2MTExIG9ubHkgKi8KLSNkZWZpbmUgSU5GUkFSRURfSURYIDgKKyNkZWZpbmUgSU5GUkFSRURfSURYIDkKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9JTkZSQVJFRCwKQEAgLTI0Miw3ICsyNjIsNyBAQAogCSAgICAuZ2V0ID0gc2RfZ2V0aW5mcmFyZWQsCiAJfSwKIC8qIG92NzYzMC9vdjc2NDgvb3Y3NjYwIG9ubHkgKi8KLSNkZWZpbmUgRlJFUV9JRFggOQorI2RlZmluZSBGUkVRX0lEWCAxMAogCXsKIAkgICAgewogCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCkBAIC0yNjEsMjggKzI4MSwzNyBAQAogCiAvKiB0YWJsZSBvZiB0aGUgZGlzYWJsZWQgY29udHJvbHMgKi8KIHN0YXRpYyBfX3UzMiBjdHJsX2Rpc1tdID0geworCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgRlJFUV9JRFgpIHwKKwkJCSgxIDw8IEFVVE9HQUlOX0lEWCksCS8qIFNFTlNPUl9BRENNMTcwMCAwICovCisJKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IEZSRVFfSURYKSwKKwkJCQkJCS8qIFNFTlNPUl9IVjcxMzFSIDEgKi8KIAkoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8ICgxIDw8IEZSRVFfSURYKSwKLQkJCQkJCS8qIFNFTlNPUl9IVjcxMzFSIDAgKi8KKwkJCQkJCS8qIFNFTlNPUl9NSTAzNjAgMiAqLwogCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgRlJFUV9JRFgpLAotCQkJCQkJLyogU0VOU09SX01JMDM2MCAxICovCi0JKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBGUkVRX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfTU80MDAwIDIgKi8KKwkJCQkJCS8qIFNFTlNPUl9NTzQwMDAgMyAqLwogCSgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBGUkVRX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfTVQ5VjExMSAzICovCisJCQkJCQkvKiBTRU5TT1JfTVQ5VjExMSA0ICovCiAJKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBGUkVRX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT002ODAyIDQgKi8KKwkJCQkJCS8qIFNFTlNPUl9PTTY4MDIgNSAqLwogCSgxIDw8IElORlJBUkVEX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjMwIDUgKi8KKwkJCQkJCS8qIFNFTlNPUl9PVjc2MzAgNiAqLwogCSgxIDw8IElORlJBUkVEX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjQ4IDYgKi8KKwkJCQkJCS8qIFNFTlNPUl9PVjc2NDggNyAqLwogCSgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSwKLQkJCQkJCS8qIFNFTlNPUl9PVjc2NjAgNyAqLworCQkJCQkJLyogU0VOU09SX09WNzY2MCA4ICovCiAJKDEgPDwgQVVUT0dBSU5fSURYKSB8ICgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwKLQkJCSAgICAgICgxIDw8IEZSRVFfSURYKSwJLyogU0VOU09SX1BPMTAzMCA4ICovCisJCQkgICAgICAoMSA8PCBGUkVRX0lEWCksCS8qIFNFTlNPUl9QTzEwMzAgOSAqLwogCSgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8Ci0JCQkgICAgICAoMSA8PCBGUkVRX0lEWCksCS8qIFNFTlNPUl9TUDgwNzA4IDkgKi8KKwkJCSAgICAgICgxIDw8IEZSRVFfSURYKSwJLyogU0VOU09SX1NQODA3MDggMTAgKi8KIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGNpZl9tb2RlW10gPSB7CisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzUyLAorCQkuc2l6ZWltYWdlID0gMzUyICogMjg4ICogNCAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMH0sCit9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKIAl7MTYwLCAxMjAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCkBAIC0zMDIsNiArMzMxLDE3IEBACiAJCS5wcml2ID0gMH0sCiB9OwogCitzdGF0aWMgY29uc3QgdTggc25fYWRjbTE3MDBbMHgxY10gPSB7CisvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KKwkweDAwLAkweDQzLAkweDYwLAkweDAwLAkweDFhLAkweDAwLAkweDAwLAkweDAwLAorLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCisJMHg4MCwJMHg1MSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKKy8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCisJMHgwMywJMHgwMCwJMHgwNSwJMHgwMSwJMHgwNSwJMHgxNiwJMHgxMiwJMHg0MiwKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwNiwJMHgwMCwJMHgwMCwJMHgwMAorfTsKKwogLypEYXRhIGZyb20gc245YzEwMnAraHY3MTMxciAqLwogc3RhdGljIGNvbnN0IHU4IHNuX2h2NzEzMVsweDFjXSA9IHsKIC8qCXJlZzAJcmVnMQlyZWcyCXJlZzMJcmVnNAlyZWc1CXJlZzYJcmVnNyAqLwpAQCAtNDE1LDYgKzQ1NSw3IEBACiAKIC8qIHNlcXVlbmNlIHNwZWNpZmljIHRvIHRoZSBzZW5zb3JzIC0gISEgaW5kZXggPSBTRU5TT1JfeHh4ICovCiBzdGF0aWMgY29uc3QgdTggKnNuX3RiW10gPSB7CisJc25fYWRjbTE3MDAsCiAJc25faHY3MTMxLAogCXNuX21pMDM2MCwKIAlzbl9tbzQwMDAsCkBAIC00MzIsNiArNDczLDExIEBACiAJMHgwMCwgMHgyZCwgMHg0NiwgMHg1YSwgMHg2YywgMHg3YywgMHg4YiwgMHg5OSwKIAkweGE2LCAweGIyLCAweGJmLCAweGNhLCAweGQ1LCAweGUwLCAweGViLCAweGY1LCAweGZmCiB9OworLyogZ2FtbWEgZm9yIHNlbnNvciBBRENNMTcwMCAqLworc3RhdGljIGNvbnN0IHU4IGdhbW1hX3NwZWNfMFsxN10gPSB7CisJMHgwZiwgMHgzOSwgMHg1YSwgMHg3NCwgMHg4NiwgMHg5NSwgMHhhNiwgMHhiNCwKKwkweGJkLCAweGM0LCAweGNjLCAweGQ0LCAweGQ1LCAweGRlLCAweGU0LCAweGVkLCAweGY1Cit9OwogLyogZ2FtbWEgZm9yIHNlbnNvcnMgSFY3MTMxUiBhbmQgTVQ5VjExMSAqLwogc3RhdGljIGNvbnN0IHU4IGdhbW1hX3NwZWNfMVsxN10gPSB7CiAJMHgwOCwgMHgzYSwgMHg1MiwgMHg2NSwgMHg3NSwgMHg4MywgMHg5MSwgMHg5ZCwKQEAgLTQ1MCw2ICs0OTYsNDIgQEAKIAkweDNlLCAweDAwLCAweGNkLCAweDBmLCAweGY3LCAweDBmLAkvKiBWUiBWRyBWQiAqLwogCTB4MDAsIDB4MDAsIDB4MDAJCQkvKiBZVVYgb2Zmc2V0cyAqLwogfTsKK3N0YXRpYyBjb25zdCB1OCBhZGNtMTcwMF9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweGEwLCAweDUxLCAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgwNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCS8qIHJlc2V0ICovCisJezB4ZGQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweGIwLCAweDUxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkZCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4YjAsIDB4NTEsIDB4MGMsIDB4ZTAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDEwLCAweDAyLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgxNCwgMHgwZSwgMHgwZSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkZCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4YjAsIDB4NTEsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGRkLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHhiMCwgMHg1MSwgMHgwNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTAsIDB4NTEsIDB4ZmUsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJe30KK307CitzdGF0aWMgY29uc3QgdTggYWRjbTE3MDBfc2Vuc29yX3BhcmFtMVtdWzhdID0geworCXsweGIwLCAweDUxLCAweDI2LCAweGY5LCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwJLyogZXhwb3N1cmU/ICovCisJezB4ZDAsIDB4NTEsIDB4MWUsIDB4OGUsIDB4OGUsIDB4OGUsIDB4OGUsIDB4MTB9LAorCisJezB4YTAsIDB4NTEsIDB4ZmUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMCwgMHg1MSwgMHhmZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MzIsIDB4MDAsIDB4NzIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQwLCAweDUxLCAweDFlLCAweGJlLCAweGQ3LCAweGU4LCAweGJlLCAweDEwfSwJLyogZXhwb3N1cmU/ICovCisKKwl7MHhhMCwgMHg1MSwgMHhmZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGEwLCAweDUxLCAweGZlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgzMiwgMHgwMCwgMHhhMiwgMHgwMCwgMHgwMCwgMHgxMH0sCisJe30KK307CiBzdGF0aWMgY29uc3QgdTggaHY3MTMxcl9zZW5zb3JfaW5pdFtdWzhdID0gewogCXsweGMxLCAweDExLCAweDAxLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKIAl7MHhiMSwgMHgxMSwgMHgzNCwgMHgxNywgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxMH0sCkBAIC05ODYsMTcgKzEwNjgsMTggQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHU4ICgqc2Vuc29yX2luaXRbMTBdKVs4XSA9IHsKLQlodjcxMzFyX3NlbnNvcl9pbml0LAkvKiBIVjcxMzFSIDAgKi8KLQltaTAzNjBfc2Vuc29yX2luaXQsCS8qIE1JMDM2MCAxICovCi0JbW80MDAwX3NlbnNvcl9pbml0LAkvKiBNTzQwMDAgMiAqLwotCW10OXYxMTFfc2Vuc29yX2luaXQsCS8qIE1UOVYxMTEgMyAqLwotCW9tNjgwMl9zZW5zb3JfaW5pdCwJLyogT002ODAyIDQgKi8KLQlvdjc2MzBfc2Vuc29yX2luaXQsCS8qIE9WNzYzMCA1ICovCi0Jb3Y3NjQ4X3NlbnNvcl9pbml0LAkvKiBPVjc2NDggNiAqLwotCW92NzY2MF9zZW5zb3JfaW5pdCwJLyogT1Y3NjYwIDcgKi8KLQlwbzEwMzBfc2Vuc29yX2luaXQsCS8qIFBPMTAzMCA4ICovCi0Jc3A4MDcwOF9zZW5zb3JfaW5pdCwJLyogU1A4MDcwOCA5ICovCitzdGF0aWMgY29uc3QgdTggKCpzZW5zb3JfaW5pdFsxMV0pWzhdID0geworCWFkY20xNzAwX3NlbnNvcl9pbml0LAkvKiBBRENNMTcwMCAwICovCisJaHY3MTMxcl9zZW5zb3JfaW5pdCwJLyogSFY3MTMxUiAxICovCisJbWkwMzYwX3NlbnNvcl9pbml0LAkvKiBNSTAzNjAgMiAqLworCW1vNDAwMF9zZW5zb3JfaW5pdCwJLyogTU80MDAwIDMgKi8KKwltdDl2MTExX3NlbnNvcl9pbml0LAkvKiBNVDlWMTExIDQgKi8KKwlvbTY4MDJfc2Vuc29yX2luaXQsCS8qIE9NNjgwMiA1ICovCisJb3Y3NjMwX3NlbnNvcl9pbml0LAkvKiBPVjc2MzAgNiAqLworCW92NzY0OF9zZW5zb3JfaW5pdCwJLyogT1Y3NjQ4IDcgKi8KKwlvdjc2NjBfc2Vuc29yX2luaXQsCS8qIE9WNzY2MCA4ICovCisJcG8xMDMwX3NlbnNvcl9pbml0LAkvKiBQTzEwMzAgOSAqLworCXNwODA3MDhfc2Vuc29yX2luaXQsCS8qIFNQODA3MDggMTAgKi8KIH07CiAKIC8qIHJlYWQgPGxlbj4gYnl0ZXMgdG8gZ3NwY2FfZGV2LT51c2JfYnVmICovCkBAIC0xMDY0LDYgKzExNDcsNyBAQAogCiAJUERFQlVHKERfVVNCTywgImkyY193MiBbJTAyeF0gPSAlMDJ4IiwgcmVnLCB2YWwpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0FEQ00xNzAwOgogCWNhc2UgU0VOU09SX09NNjgwMjoJCS8qIGkyYyBjb21tYW5kID0gYTAgKDEwMCBrSHopICovCiAJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4ODAgfCAoMiA8PCA0KTsKIAkJYnJlYWs7CkBAIC0xMTEwLDYgKzExOTQsNyBAQAogCXU4IG1vZGVbOF07CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKIAljYXNlIFNFTlNPUl9PTTY4MDI6CQkvKiBpMmMgY29tbWFuZCA9IDkwICgxMDAga0h6KSAqLwogCQltb2RlWzBdID0gMHg4MCB8IDB4MTA7CiAJCWJyZWFrOwpAQCAtMTI2MCw3ICsxMzQ1LDggQEAKIAkJezB4MDAsIDB4NDAsIDB4MzgsIDB4MzAsIDB4MDAsIDB4MjB9OwogCXN0YXRpYyBjb25zdCB1OCByZWdkNFtdID0gezB4NjAsIDB4MDAsIDB4MDB9OwogCi0JcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7CisJLyogc2Vuc29yIGNsb2NrIGFscmVhZHkgZW5hYmxlZCBpbiBzZF9pbml0ICovCisJLyogcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7ICovCiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgc245YzF4eFsxXSk7CiAKIAkvKiBjb25maWd1cmUgZ3BpbyAqLwpAQCAtMTI4NCw2ICsxMzcwLDEyIEBACiAJcmVnX3coZ3NwY2FfZGV2LCAweDAzLCAmc245YzF4eFszXSwgMHgwZik7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Myk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIDB4NjIpOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDQyKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Mik7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX01UOVYxMTE6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NjEpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCAweDYxKTsKQEAgLTEzNTcsMTQgKzE0NDksMTkgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtOwogCi0JY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKLQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwotCWNhbS0+bnBrdCA9IDI0OwkJCS8qIDI0IHBhY2tldHMgcGVyIElTT0MgbWVzc2FnZSAqLwotCiAJc2QtPmJyaWRnZSA9IGlkLT5kcml2ZXJfaW5mbyA+PiAxNjsKIAlzZC0+c2Vuc29yID0gaWQtPmRyaXZlcl9pbmZvOwogCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9BRENNMTcwMCkgeworCQljYW0tPmNhbV9tb2RlID0gY2lmX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShjaWZfbW9kZSk7CisJfSBlbHNlIHsKKwkJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOworCX0KKwljYW0tPm5wa3QgPSAyNDsJCQkvKiAyNCBwYWNrZXRzIHBlciBJU09DIG1lc3NhZ2UgKi8KKwogCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CiAJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOwogCXNkLT5jb2xvcnMgPSBDT0xPUl9ERUY7CkBAIC0xMzc0LDYgKzE0NzEsMTQgQEAKIAlzZC0+YXV0b2dhaW4gPSBBVVRPR0FJTl9ERUY7CiAJc2QtPmFnX2NudCA9IC0xOwogCXNkLT52ZmxpcCA9IFZGTElQX0RFRjsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9PTTY4MDI6CisJCXNkLT5zaGFycG5lc3MgPSAweDEwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKKwkJYnJlYWs7CisJfQogCXNkLT5pbmZyYXJlZCA9IElORlJBUkVEX0RFRjsKIAlzZC0+ZnJlcSA9IEZSRVFfREVGOwogCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CkBAIC0xNDMzLDcgKzE1MzgsOSBAQAogCQlicmVhazsKIAl9CiAKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweGYxLCAweDAxKTsKKwkvKiBOb3RlIHdlIGRvIG5vdCBkaXNhYmxlIHRoZSBzZW5zb3IgY2xvY2sgaGVyZSAocG93ZXIgc2F2aW5nIG1vZGUpLAorCSAgIGFzIHRoYXQgYWxzbyBkaXNhYmxlcyB0aGUgYnV0dG9uIG9uIHRoZSBjYW0uICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7CiAKIAkvKiBzZXQgdGhlIGkyYyBhZGRyZXNzICovCiAJc245YzF4eCA9IHNuX3RiW3NkLT5zZW5zb3JdOwpAQCAtMTU0Myw2ICsxNjUwLDEwIEBACiAKIAlrMiA9ICgoaW50KSBzZC0+YnJpZ2h0bmVzcyAtIDB4ODAwMCkgPj4gMTA7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CisJCWlmIChrMiA+IDB4MWYpCisJCQlrMiA9IDA7CQkvKiBvbmx5IHBvc2l0aXZlIFkgb2Zmc2V0ICovCisJCWJyZWFrOwogCWNhc2UgU0VOU09SX0hWNzEzMVI6CiAJCWV4cG8gPSBzZC0+YnJpZ2h0bmVzcyA8PCA0OwogCQlpZiAoZXhwbyA+IDB4MDAyZGM2YzApCkBAIC0xNjI1LDYgKzE3MzYsOSBAQAogCX07CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKKwkJZ2FtbWFfYmFzZSA9IGdhbW1hX3NwZWNfMDsKKwkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfSFY3MTMxUjoKIAljYXNlIFNFTlNPUl9NVDlWMTExOgogCQlnYW1tYV9iYXNlID0gZ2FtbWFfc3BlY18xOwpAQCAtMTY3MCwyMyArMTc4NCwzOSBAQAogCQlzZC0+YWdfY250ID0gLTE7CiB9CiAKLS8qIG92NzYzMC9vdjc2NDggb25seSAqLworLyogaHY3MTMxci9vdjc2MzAvb3Y3NjQ4IG9ubHkgKi8KIHN0YXRpYyB2b2lkIHNldHZmbGlwKHN0cnVjdCBzZCAqc2QpCiB7CiAJdTggY29tbjsKIAogCWlmIChzZC0+Z3NwY2FfZGV2LmN0cmxfZGlzICYgKDEgPDwgVkZMSVBfSURYKSkKIAkJcmV0dXJuOwotCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc2MzApIHsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgorCQljb21uID0gMHgxODsJCQkvKiBjbGtkaXYgPSAxLCBhYmxjZW4gPSAxICovCisJCWlmIChzZC0+dmZsaXApCisJCQljb21uIHw9IDB4MDE7CisJCWkyY193MSgmc2QtPmdzcGNhX2RldiwgMHgwMSwgY29tbik7CS8qIHNjdHJhICovCisJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzYzMDoKIAkJY29tbiA9IDB4MDI7CiAJCWlmICghc2QtPnZmbGlwKQogCQkJY29tbiB8PSAweDgwOwotCX0gZWxzZSB7CisJCWkyY193MSgmc2QtPmdzcGNhX2RldiwgMHg3NSwgY29tbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9PVjc2NDg6ICovCiAJCWNvbW4gPSAweDA2OwogCQlpZiAoc2QtPnZmbGlwKQogCQkJY29tbiB8PSAweDgwOworCQlpMmNfdzEoJnNkLT5nc3BjYV9kZXYsIDB4NzUsIGNvbW4pOworCQlicmVhazsKIAl9Ci0JaTJjX3cxKCZzZC0+Z3NwY2FfZGV2LCAweDc1LCBjb21uKTsKK30KKworc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzKHN0cnVjdCBzZCAqc2QpCit7CisJcmVnX3cxKCZzZC0+Z3NwY2FfZGV2LCAweDk5LCBzZC0+c2hhcnBuZXNzKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0aW5mcmFyZWQoc3RydWN0IHNkICpzZCkKQEAgLTE4MDQsNiArMTkzNCw4IEBACiAJaW50IG1vZGU7CiAJc3RhdGljIGNvbnN0IHU4IEMwW10gPSB7IDB4MmQsIDB4MmQsIDB4M2EsIDB4MDUsIDB4MDQsIDB4M2YgfTsKIAlzdGF0aWMgY29uc3QgdTggQ0FbXSA9IHsgMHgyOCwgMHhkOCwgMHgxNCwgMHhlYyB9OworCXN0YXRpYyBjb25zdCB1OCBDQV9hZGNtMTcwMFtdID0KKwkJCQl7IDB4MTQsIDB4ZWMsIDB4MGEsIDB4ZjYgfTsKIAlzdGF0aWMgY29uc3QgdTggQ0VbXSA9IHsgMHgzMiwgMHhkZCwgMHgyZCwgMHhkZCB9OwkvKiBNSTAzNjAgKi8KIAlzdGF0aWMgY29uc3QgdTggQ0Vfb3Y3Nnh4W10gPQogCQkJCXsgMHgzMiwgMHhkZCwgMHgzMiwgMHhkZCB9OwpAQCAtMTgyNCw2ICsxOTU2LDkgQEAKIAlpMmNfd19zZXEoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdFtzZC0+c2Vuc29yXSk7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKKwkJcmVnMiA9IDB4NjA7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX09NNjgwMjoKIAkJcmVnMiA9IDB4NzE7CiAJCWJyZWFrOwpAQCAtMTg0MiwxNyArMTk3NywyOCBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4MTIsIHNuOWMxeHhbMHgxMl0pOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTMsIHNuOWMxeHhbMHgxM10pOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTgsIHNuOWMxeHhbMHgxOF0pOwotCXJlZ193MShnc3BjYV9kZXYsIDB4ZDIsIDB4NmEpOwkJLyogREMyOSAqLwotCXJlZ193MShnc3BjYV9kZXYsIDB4ZDMsIDB4NTApOworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9BRENNMTcwMCkgeworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweGQyLCAweDNhKTsJLyogQUVfSF9TSVpFID0gMTE2ICovCisJCXJlZ193MShnc3BjYV9kZXYsIDB4ZDMsIDB4MzApOwkvKiBBRV9WX1NJWkUgPSA5NiAqLworCX0gZWxzZSB7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4ZDIsIDB4NmEpOwkvKiBBRV9IX1NJWkUgPSAyMTIgKi8KKwkJcmVnX3cxKGdzcGNhX2RldiwgMHhkMywgMHg1MCk7CS8qIEFFX1ZfU0laRSA9IDE2MCAqLworCX0KIAlyZWdfdzEoZ3NwY2FfZGV2LCAweGM2LCAweDAwKTsKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweGM3LCAweDAwKTsKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM4LCAweDUwKTsKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM5LCAweDNjKTsKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfQURDTTE3MDApIHsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHhjOCwgMHgyYyk7CS8qIEFXX0hfU1RPUCA9IDM1MiAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM5LCAweDI0KTsJLyogQVdfVl9TVE9QID0gMjg4ICovCisJfSBlbHNlIHsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHhjOCwgMHg1MCk7CS8qIEFXX0hfU1RPUCA9IDY0MCAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM5LCAweDNjKTsJLyogQVdfVl9TVE9QID0gNDgwICovCisJfQogCXJlZ193MShnc3BjYV9kZXYsIDB4MTgsIHNuOWMxeHhbMHgxOF0pOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX01UOVYxMTE6CiAJCXJlZzE3ID0gMHhlMDsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CiAJY2FzZSBTRU5TT1JfT1Y3NjMwOgogCQlyZWcxNyA9IDB4ZTI7CiAJCWJyZWFrOwpAQCAtMTg3MCw0NCArMjAxNiwzOSBAQAogCQlicmVhazsKIAl9CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgcmVnMTcpOwotLyogc2V0IHJlZzEgd2FzIGhlcmUgKi8KLQlyZWdfdzEoZ3NwY2FfZGV2LCAweDA1LCBzbjljMXh4WzVdKTsJLyogcmVkICovCi0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNywgc245YzF4eFs3XSk7CS8qIGdyZWVuICovCi0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNiwgc245YzF4eFs2XSk7CS8qIGJsdWUgKi8KKworCXJlZ193MShnc3BjYV9kZXYsIDB4MDUsIDB4MDApOwkJLyogcmVkICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHgwNywgMHgwMCk7CQkvKiBncmVlbiAqLworCXJlZ193MShnc3BjYV9kZXYsIDB4MDYsIDB4MDApOwkJLyogYmx1ZSAqLwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTQsIHNuOWMxeHhbMHgxNF0pOwogCiAJc2V0Z2FtbWEoZ3NwY2FfZGV2KTsKIAorLypmaXhtZTogOCB0aW1lcyB3aXRoIGFsbCB6ZXJvZXMgYW5kIDEgb3IgMiB0aW1lcyB3aXRoIG5vcm1hbCB2YWx1ZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODQsIHJlZzg0LCBzaXplb2YgcmVnODQpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCWNhc2UgU0VOU09SX01UOVYxMTE6Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OWEsIDB4MDcpOwotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk5LCAweDU5KTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5TT1JfT002ODAyOgotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDA4KTsKLQkJcmVnX3cxKGdzcGNhX2RldiwgMHg5OSwgMHgxMCk7Ci0JCWJyZWFrOwotCWNhc2UgU0VOU09SX09WNzY0ODoKLQkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwYSk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NjApOwotCQlicmVhazsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKIAljYXNlIFNFTlNPUl9PVjc2NjA6CiAJY2FzZSBTRU5TT1JfU1A4MDcwODoKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwNSk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NTkpOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9NVDlWMTExOgorCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDA3KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfT1Y3NjQ4OgorCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDBhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwOCk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NTkpOwogCQlicmVhazsKIAl9CisJc2V0c2hhcnBuZXNzKHNkKTsKIAogCXJlZ193KGdzcGNhX2RldiwgMHg4NCwgcmVnODQsIHNpemVvZiByZWc4NCk7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNSwgc245YzF4eFs1XSk7CS8qIHJlZCAqLwotCXJlZ193MShnc3BjYV9kZXYsIDB4MDcsIHNuOWMxeHhbN10pOwkvKiBncmVlbiAqLwotCXJlZ193MShnc3BjYV9kZXYsIDB4MDYsIHNuOWMxeHhbNl0pOwkvKiBibHVlICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHgwNSwgMHgyMCk7CQkvKiByZWQgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDA3LCAweDIwKTsJCS8qIGdyZWVuICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHgwNiwgMHgyMCk7CQkvKiBibHVlICovCiAKIAlpbml0ID0gTlVMTDsKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CkBAIC0xOTE3LDYgKzIwNTgsMTEgQEAKIAkJcmVnMSA9IDB4MDY7CS8qIDY0MHg0ODA6IGNsayAyNE1oeiwgdmlkZW8gdHJmIGVuYWJsZSAqLwogCXJlZzE3ID0gMHg2MTsJCS8qIDB4OjIwOiBlbmFibGUgc2Vuc29yIGNsb2NrICovCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CisJCWluaXQgPSBhZGNtMTcwMF9zZW5zb3JfcGFyYW0xOworCQlyZWcxID0gMHg0NjsKKwkJcmVnMTcgPSAweGUyOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9NTzQwMDA6CiAJCWlmIChtb2RlKSB7CiAvKgkJCXJlZzEgPSAweDQ2OwkgKiAzMjAgY2xrIDQ4TWh6IDYwZnAvcyAqLwpAQCAtMTk0MCw3ICsyMDg2LDYgQEAKIAkJcmVnMTcgPSAweDY0OwkJLyogNjQwIE1DS1NJWkUgKi8KIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjMwOgotCQlzZXR2ZmxpcChzZCk7CiAJCXJlZzE3ID0gMHhlMjsKIAkJcmVnMSA9IDB4NDQ7CiAJCWJyZWFrOwpAQCAtMTk4Niw4ICsyMTMxLDEyIEBACiAJfQogCiAJcmVnX3coZ3NwY2FfZGV2LCAweGMwLCBDMCwgNik7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweGNhLCBDQSwgNCk7CisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX0FEQ00xNzAwKQorCQlyZWdfdyhnc3BjYV9kZXYsIDB4Y2EsIENBX2FkY20xNzAwLCA0KTsKKwllbHNlCisJCXJlZ193KGdzcGNhX2RldiwgMHhjYSwgQ0EsIDQpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0FEQ00xNzAwOgogCWNhc2UgU0VOU09SX09WNzYzMDoKIAljYXNlIFNFTlNPUl9PVjc2NDg6CiAJY2FzZSBTRU5TT1JfT1Y3NjYwOgpAQCAtMjAwOCwxMSArMjE1Nyw3IEBACiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgcmVnMTcpOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIHJlZzEpOwogCi0Jc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfT1Y3NjMwOgotCQlzZXR2ZmxpcChzZCk7Ci0JCWJyZWFrOwotCX0KKwlzZXR2ZmxpcChzZCk7CiAJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKQEAgLTIwNTYsNyArMjIwMSw4IEBACiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgc245YzF4eFsweDE3XSk7CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgc245YzF4eFsxXSk7CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgZGF0YSk7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7CisJLyogRG9uJ3QgZGlzYWJsZSBzZW5zb3IgY2xvY2sgYXMgdGhhdCBkaXNhYmxlcyB0aGUgYnV0dG9uIG9uIHRoZSBjYW0gKi8KKwkvKiByZWdfdzEoZ3NwY2FfZGV2LCAweGYxLCAweDAxKTsgKi8KIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtMjI4OCw2ICsyNDM0LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5zaGFycG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRzaGFycG5lc3Moc2QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5zaGFycG5lc3M7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc2Rfc2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMjM5MSw2ICsyNTU1LDI1IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJydXB0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChsZW4gPT0gMSAmJiBkYXRhWzBdID09IDEpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAwKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLApAQCAtMjQwNiw2ICsyNTg5LDkgQEAKIAkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAogCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiAJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwkuaW50X3BrdF9zY2FuID0gc2RfaW50X3BrdF9zY2FuLAorI2VuZGlmCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTI0NzIsNiArMjY1OCw3IEBACiAvKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjE0MiksIEJTKFNOOUMxMjAsIFBPMjAzME4pfSwJICpzbjljMTIwYiovCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNDMpLCBCUyhTTjlDMTIwLCBTUDgwNzA4KX0sCS8qc245YzEyMGIqLwogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTQ4KSwgQlMoU045QzEyMCwgT002ODAyKX0sCS8qc245YzEyMGIqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTRhKSwgQlMoU045QzEyMCwgQURDTTE3MDApfSwJLypzbjljMTIwYiovCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKaW5kZXggZmU0Njg2OC4uYjg2NmM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKQEAgLTY4LDcgKzY4LDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTEwNDcsNyArMTA0Nyw3IEBACiB9CiAKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgPSBzZF9jdHJscywKIAkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCmluZGV4IDY3NjFhMzAuLmM5OTMzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCkBAIC01OSw3ICs1OSw3IEBACiBzdGF0aWMgaW50IHNkX3NldHJlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0cmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKICNkZWZpbmUgTVlfQlJJR0hUTkVTUyAwCiAJewogCSAgICB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCmluZGV4IDBmOTIzMmYuLmM1NzZlZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCkBAIC00Miw3ICs0Miw3IEBACiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKaW5kZXggMzkyNTdlNC4uODlmZWM0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKQEAgLTUxLDcgKzUxLDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAjZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgICAgewpAQCAtNjczLDcgKzY3Myw3IEBACiB9CiAKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgPSBzZF9jdHJscywKIAkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCmluZGV4IDRkOGU2Y2YuLjE1YjJlZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCkBAIC00NSw3ICs0NSw3IEBACiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKaW5kZXggNThjMmYwMC4uZGM3ZjJiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKQEAgLTkyMiw3ICs5MjIsNyBAQAogfQogCiAvKiBjb250cm9sIHRhYmxlcyAqLwotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzXzEyYVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzXzEyYVtdID0gewogCXsKIAkgICAgewogCQkuaWQgPSBWNEwyX0NJRF9IVUUsCkBAIC05NjQsNyArOTY0LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzXzcyYVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzXzcyYVtdID0gewogCXsKIAkgICAgewogCQkuaWQgPSBWNEwyX0NJRF9IVUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNWMuYwppbmRleCBkNzBiMTU2Li5lNjQ2NjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDVjLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIAogLyogQ29tbWFuZHMuIFRoZXNlIGdvIGluIHRoZSAidmFsdWUiIHNsb3QuICovCiAjZGVmaW5lIFNROTA1Q19DTEVBUiAgIDB4YTAJCS8qIGNsZWFyIGV2ZXJ5dGhpbmcgKi8KKyNkZWZpbmUgU1E5MDVDX0dFVF9JRCAgMHgxNGY0CQkvKiBSZWFkIHZlcnNpb24gbnVtYmVyICovCiAjZGVmaW5lIFNROTA1Q19DQVBUVVJFX0xPVyAweGEwNDAJLyogU3RhcnRzIGNhcHR1cmUgYXQgMTYweDEyMCAqLwogI2RlZmluZSBTUTkwNUNfQ0FQVFVSRV9NRUQgMHgxNDQwCS8qIFN0YXJ0cyBjYXB0dXJlIGF0IDMyMHgyNDAgKi8KICNkZWZpbmUgU1E5MDVDX0NBUFRVUkVfSEkgMHgyODQwCS8qIFN0YXJ0cyBjYXB0dXJlIGF0IDMyMHgyNDAgKi8KQEAgLTEwMSw2ICsxMDIsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzcTkwNWNfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiBjb21tYW5kLCB1MTYgaW5kZXgsCisJCSAgICAgICBpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgIFVTQl9SRVFfU1lOQ0hfRlJBTUUsCQkvKiByZXF1ZXN0ICovCisJCQkgICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIGNvbW1hbmQsIGluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIHNpemUsCisJCQkgICAgICBTUTkwNUNfQ01EX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIiVzOiB1c2JfY29udHJvbF9tc2cgZmFpbGVkICglZCkiLAorCQkgICAgICAgX19mdW5jX18sIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIGFuZCBydW5zIHdoZW5ldmVyIHRoZSBjYW1lcmEKICAqIGlzIHN0cmVhbWluZyBkYXRhLiBCZWNhdXNlIGl0IGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIGl0IGlzIGFsbG93ZWQgdG8gc2xlZXAKICAqIHNvIHdlIGNhbiB1c2Ugc3luY2hyb25vdXMgVVNCIGNhbGxzLiBUbyBhdm9pZCBwb3NzaWJsZSBjb2xsaXNpb25zIHdpdGggb3RoZXIKQEAgLTE4MywxMyArMjA0LDM0IEBACiB7CiAJc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCXN0cnVjdCBzZCAqZGV2ID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKIAogCVBERUJVRyhEX1BST0JFLAogCQkiU1E5MDUwIGNhbWVyYSBkZXRlY3RlZCIKIAkJIiAodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CisKKwlyZXQgPSBzcTkwNWNfY29tbWFuZChnc3BjYV9kZXYsIFNROTA1Q19HRVRfSUQsIDApOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIkdldCB2ZXJzaW9uIGNvbW1hbmQgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc3E5MDVjX3JlYWQoZ3NwY2FfZGV2LCAweGY1LCAwLCAyMCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiUmVhZGluZyB2ZXJzaW9uIGNvbW1hbmQgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCS8qIE5vdGUgd2UgbGVhdmUgb3V0IHRoZSB1c2IgaWQgYW5kIHRoZSBtYW51ZmFjdHVyaW5nIGRhdGUgKi8KKwlQREVCVUcoRF9QUk9CRSwKKwkgICAgICAgIlNROTA1MCBJRCBzdHJpbmc6ICUwMnggLSAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlszXSwKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzE0XSwgZ3NwY2FfZGV2LT51c2JfYnVmWzE1XSwKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzE2XSwgZ3NwY2FfZGV2LT51c2JfYnVmWzE3XSwKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzE4XSwgZ3NwY2FfZGV2LT51c2JfYnVmWzE5XSk7CisKIAljYW0tPmNhbV9tb2RlID0gc3E5MDVjX21vZGU7CiAJY2FtLT5ubW9kZXMgPSAyOwotCWlmIChpZC0+aWRQcm9kdWN0ID09IDB4OTA1MCkKKwlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzE1XSA9PSAwKQogCQljYW0tPm5tb2RlcyA9IDE7CiAJLyogV2UgZG9uJ3QgdXNlIHRoZSBidWZmZXIgZ3NwY2EgYWxsb2NhdGVzIHNvIG1ha2UgaXQgc21hbGwuICovCiAJY2FtLT5idWxrX3NpemUgPSAzMjsKQEAgLTI1OCw2ICszMDAsNyBAQAogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkwNWMpfSwKIAl7VVNCX0RFVklDRSgweDI3NzAsIDB4OTA1MCl9LAorCXtVU0JfREVWSUNFKDB4Mjc3MCwgMHg5MDUyKX0sCiAJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkxM2QpfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jCmluZGV4IDJlMjkzNTUuLjBmYjUzNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwpAQCAtNTMsNyArNTMsNyBAQAogc3RhdGljIGludCBzZF9zZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2ODAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDY4MC5jCmluZGV4IDJhNjlkN2MuLmU1MGRkNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDY4MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDY4MC5jCkBAIC00NSw3ICs0NSw3IEBACiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogfTsKIAogc3RhdGljIGludCBzdHZfc25kY3RybChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIGludCBzZXQsIHU4IHJlcSwgdTE2IHZhbCwKQEAgLTUzLDI0ICs1MywyOCBAQAogewogCWludCByZXQgPSAtMTsKIAl1OCByZXFfdHlwZSA9IDA7CisJdW5zaWduZWQgaW50IHBpcGUgPSAwOwogCiAJc3dpdGNoIChzZXQpIHsKIAljYXNlIDA6IC8qICAweGMxICAqLwogCQlyZXFfdHlwZSA9IFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQ7CisJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApOwogCQlicmVhazsKIAljYXNlIDE6IC8qICAweDQxICAqLwogCQlyZXFfdHlwZSA9IFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UOworCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgkvKiAgMHg4MCAgKi8KIAkJcmVxX3R5cGUgPSBVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0RFVklDRTsKKwkJcGlwZSA9IHVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCk7CiAJCWJyZWFrOwogCWNhc2UgMzoJLyogIDB4NDAgICovCiAJCXJlcV90eXBlID0gVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFOworCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKTsKIAkJYnJlYWs7CiAJfQogCi0JcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAotCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsIHBpcGUsCiAJCQkgICAgICByZXEsIHJlcV90eXBlLAogCQkJICAgICAgdmFsLCAwLCBnc3BjYV9kZXYtPnVzYl9idWYsIHNpemUsIDUwMCk7CiAKQEAgLTEzOCw2ICsxNDIsMTAgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCisJLyogR2l2ZSB0aGUgY2FtZXJhIHNvbWUgdGltZSB0byBzZXR0bGUsIG90aGVyd2lzZSBpbml0YWxpemF0aW9uIHdpbGwKKwkgICBmYWlsIG9uIGhvdHBsdWcsIGFuZCB5ZXMgaXQgcmVhbGx5IG5lZWRzIGEgZnVsbCBzZWNvbmQuICovCisJbXNsZWVwKDEwMDApOworCiAJLyogcGluZyBjYW1lcmEgdG8gYmUgc3VyZSBTVFYwNjgwIGlzIHByZXNlbnQgKi8KIAlpZiAoc3R2X3NuZGN0cmwoZ3NwY2FfZGV2LCAwLCAweDg4LCAweDU2NzgsIDB4MDIpICE9IDB4MDIgfHwKIAkgICAgZ3NwY2FfZGV2LT51c2JfYnVmWzBdICE9IDB4NTYgfHwgZ3NwY2FfZGV2LT51c2JfYnVmWzFdICE9IDB4NzgpIHsKQEAgLTE2OSw2ICsxNzcsOCBAQAogCQlQREVCVUcoRF9QUk9CRSwgIkNhbWVyYSBzdXBwb3J0cyBDSUYgbW9kZSIpOwogCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbN10gJiAweDAyKQogCQlQREVCVUcoRF9QUk9CRSwgIkNhbWVyYSBzdXBwb3J0cyBWR0EgbW9kZSIpOworCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbN10gJiAweDA0KQorCQlQREVCVUcoRF9QUk9CRSwgIkNhbWVyYSBzdXBwb3J0cyBRQ0lGIG1vZGUiKTsKIAlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzddICYgMHgwOCkKIAkJUERFQlVHKERfUFJPQkUsICJDYW1lcmEgc3VwcG9ydHMgUVZHQSBtb2RlIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCmluZGV4IDVkMDI0MWIuLmFmNzNkYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYwpAQCAtMjcsNiArMjcsNyBAQAogICogUC9OIDg2MTA0MC0wMDAwOiBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYxMCAgIC0gUXVpY2tDYW0gV2ViCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAic3R2MDZ4eF9zZW5zb3IuaCIKIAogTU9EVUxFX0FVVEhPUigiRXJpayBBbmRyw6luIik7CkBAIC0yMTksNiArMjIwLDcgQEAKIAkJaW5mbygiUmVhZCAweCV4IGZyb20gYWRkcmVzcyAweCV4IiwgZGF0YSwgaSk7CiAJfQogCisJaW5mbygiVGVzdGluZyBzdHYwNnh4IGJyaWRnZSByZWdpc3RlcnMgZm9yIHdyaXRhYmlsaXR5Iik7CiAJZm9yIChpID0gMHgxNDAwOyBpIDwgMHgxNjBmOyBpKyspIHsKIAkJc3R2MDZ4eF9yZWFkX2JyaWRnZShzZCwgaSwgJmRhdGEpOwogCQlidWYgPSBkYXRhOwpAQCAtMjI5LDcgKzIzMSw3IEBACiAJCQlpbmZvKCJSZWdpc3RlciAweCV4IGlzIHJlYWQvd3JpdGUiLCBpKTsKIAkJZWxzZSBpZiAoZGF0YSAhPSBidWYpCiAJCQlpbmZvKCJSZWdpc3RlciAweCV4IGlzIHJlYWQvd3JpdGUsIgotCQkJICAgICAiYnV0IG9ubHkgcGFydGlhbGx5IiwgaSk7CisJCQkgICAgICIgYnV0IG9ubHkgcGFydGlhbGx5IiwgaSk7CiAJCWVsc2UKIAkJCWluZm8oIlJlZ2lzdGVyIDB4JXggaXMgcmVhZC1vbmx5IiwgaSk7CiAKQEAgLTQyNiw2ICs0MjgsMjkgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJydXB0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChsZW4gPT0gMSAmJiBkYXRhWzBdID09IDB4ODApIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlyZXQgPSAwOworCX0KKworCWlmIChsZW4gPT0gMSAmJiBkYXRhWzBdID09IDB4ODgpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMCk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBzdHYwNnh4X2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQkgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CiAKQEAgLTQzNiw3ICs0NjEsMTAgQEAKIAkuaW5pdCA9IHN0djA2eHhfaW5pdCwKIAkuc3RhcnQgPSBzdHYwNnh4X3N0YXJ0LAogCS5zdG9wTiA9IHN0djA2eHhfc3RvcE4sCi0JLnBrdF9zY2FuID0gc3R2MDZ4eF9wa3Rfc2NhbgorCS5wa3Rfc2NhbiA9IHN0djA2eHhfcGt0X3NjYW4sCisjaWZkZWYgQ09ORklHX0lOUFVUCisJLmludF9wa3Rfc2NhbiA9IHNkX2ludF9wa3Rfc2NhbiwKKyNlbmRpZgogfTsKIAogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwppbmRleCAzMDZiN2Q3Li4wYzc4NmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwpAQCAtNjcsNyArNjcsNyBAQAogc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTI2NywxNDIgKzI2Nyw2IEBACiAJezB4MDYsIDB4MDAwMCwgMHgwMDAwfSwKIAl7MHgwMCwgMHgwMDA0LCAweDI4ODB9LAogCXsweDAwLCAweDAwMDEsIDB4Mjg4MX0sCi0vKiBsb29rIGxpa2Ugc2V0dGluZyBhIHFUYWJsZSAqLwotCXsweDAwLCAweDAwMDYsIDB4MjgwMH0sCi0JezB4MDAsIDB4MDAwNCwgMHgyODAxfSwKLQl7MHgwMCwgMHgwMDA0LCAweDI4MDJ9LAotCXsweDAwLCAweDAwMDYsIDB4MjgwM30sCi0JezB4MDAsIDB4MDAwYSwgMHgyODA0fSwKLQl7MHgwMCwgMHgwMDEwLCAweDI4MDV9LAotCXsweDAwLCAweDAwMTQsIDB4MjgwNn0sCi0JezB4MDAsIDB4MDAxOCwgMHgyODA3fSwKLQl7MHgwMCwgMHgwMDA1LCAweDI4MDh9LAotCXsweDAwLCAweDAwMDUsIDB4MjgwOX0sCi0JezB4MDAsIDB4MDAwNiwgMHgyODBhfSwKLQl7MHgwMCwgMHgwMDA4LCAweDI4MGJ9LAotCXsweDAwLCAweDAwMGEsIDB4MjgwY30sCi0JezB4MDAsIDB4MDAxNywgMHgyODBkfSwKLQl7MHgwMCwgMHgwMDE4LCAweDI4MGV9LAotCXsweDAwLCAweDAwMTYsIDB4MjgwZn0sCi0KLQl7MHgwMCwgMHgwMDA2LCAweDI4MTB9LAotCXsweDAwLCAweDAwMDUsIDB4MjgxMX0sCi0JezB4MDAsIDB4MDAwNiwgMHgyODEyfSwKLQl7MHgwMCwgMHgwMDBhLCAweDI4MTN9LAotCXsweDAwLCAweDAwMTAsIDB4MjgxNH0sCi0JezB4MDAsIDB4MDAxNywgMHgyODE1fSwKLQl7MHgwMCwgMHgwMDFjLCAweDI4MTZ9LAotCXsweDAwLCAweDAwMTYsIDB4MjgxN30sCi0JezB4MDAsIDB4MDAwNiwgMHgyODE4fSwKLQl7MHgwMCwgMHgwMDA3LCAweDI4MTl9LAotCXsweDAwLCAweDAwMDksIDB4MjgxYX0sCi0JezB4MDAsIDB4MDAwYywgMHgyODFifSwKLQl7MHgwMCwgMHgwMDE0LCAweDI4MWN9LAotCXsweDAwLCAweDAwMjMsIDB4MjgxZH0sCi0JezB4MDAsIDB4MDAyMCwgMHgyODFlfSwKLQl7MHgwMCwgMHgwMDE5LCAweDI4MWZ9LAotCi0JezB4MDAsIDB4MDAwNywgMHgyODIwfSwKLQl7MHgwMCwgMHgwMDA5LCAweDI4MjF9LAotCXsweDAwLCAweDAwMGYsIDB4MjgyMn0sCi0JezB4MDAsIDB4MDAxNiwgMHgyODIzfSwKLQl7MHgwMCwgMHgwMDFiLCAweDI4MjR9LAotCXsweDAwLCAweDAwMmMsIDB4MjgyNX0sCi0JezB4MDAsIDB4MDAyOSwgMHgyODI2fSwKLQl7MHgwMCwgMHgwMDFmLCAweDI4Mjd9LAotCXsweDAwLCAweDAwMGEsIDB4MjgyOH0sCi0JezB4MDAsIDB4MDAwZSwgMHgyODI5fSwKLQl7MHgwMCwgMHgwMDE2LCAweDI4MmF9LAotCXsweDAwLCAweDAwMWEsIDB4MjgyYn0sCi0JezB4MDAsIDB4MDAyMCwgMHgyODJjfSwKLQl7MHgwMCwgMHgwMDJhLCAweDI4MmR9LAotCXsweDAwLCAweDAwMmQsIDB4MjgyZX0sCi0JezB4MDAsIDB4MDAyNSwgMHgyODJmfSwKLQotCXsweDAwLCAweDAwMTQsIDB4MjgzMH0sCi0JezB4MDAsIDB4MDAxYSwgMHgyODMxfSwKLQl7MHgwMCwgMHgwMDFmLCAweDI4MzJ9LAotCXsweDAwLCAweDAwMjMsIDB4MjgzM30sCi0JezB4MDAsIDB4MDAyOSwgMHgyODM0fSwKLQl7MHgwMCwgMHgwMDMwLCAweDI4MzV9LAotCXsweDAwLCAweDAwMzAsIDB4MjgzNn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODM3fSwKLQl7MHgwMCwgMHgwMDFkLCAweDI4Mzh9LAotCXsweDAwLCAweDAwMjUsIDB4MjgzOX0sCi0JezB4MDAsIDB4MDAyNiwgMHgyODNhfSwKLQl7MHgwMCwgMHgwMDI3LCAweDI4M2J9LAotCXsweDAwLCAweDAwMmQsIDB4MjgzY30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODNkfSwKLQl7MHgwMCwgMHgwMDI5LCAweDI4M2V9LAotCXsweDAwLCAweDAwMjgsIDB4MjgzZn0sCi0KLQl7MHgwMCwgMHgwMDA3LCAweDI4NDB9LAotCXsweDAwLCAweDAwMDcsIDB4Mjg0MX0sCi0JezB4MDAsIDB4MDAwYSwgMHgyODQyfSwKLQl7MHgwMCwgMHgwMDEzLCAweDI4NDN9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg0NH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODQ1fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NDZ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg0N30sCi0JezB4MDAsIDB4MDAwNywgMHgyODQ4fSwKLQl7MHgwMCwgMHgwMDA4LCAweDI4NDl9LAotCXsweDAwLCAweDAwMGEsIDB4Mjg0YX0sCi0JezB4MDAsIDB4MDAxYSwgMHgyODRifSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NGN9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg0ZH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODRlfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NGZ9LAotCi0JezB4MDAsIDB4MDAwYSwgMHgyODUwfSwKLQl7MHgwMCwgMHgwMDBhLCAweDI4NTF9LAotCXsweDAwLCAweDAwMTYsIDB4Mjg1Mn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODUzfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NTR9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1NX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODU2fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NTd9LAotCXsweDAwLCAweDAwMTMsIDB4Mjg1OH0sCi0JezB4MDAsIDB4MDAxYSwgMHgyODU5fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NWF9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1Yn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODVjfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NWR9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1ZX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODVmfSwKLQotCXsweDAwLCAweDAwMjgsIDB4Mjg2MH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODYxfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NjJ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2M30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODY0fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NjV9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2Nn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODY3fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4Njh9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2OX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODZhfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NmJ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2Y30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODZkfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NmV9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2Zn0sCi0KLQl7MHgwMCwgMHgwMDI4LCAweDI4NzB9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3MX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODcyfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NzN9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3NH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODc1fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NzZ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3N30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODc4fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4Nzl9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3YX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODdifSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4N2N9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3ZH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODdlfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4N2Z9LAogCiAJezB4YTAsIDB4MDAwMCwgMHgwNTAzfSwKIH07CkBAIC02MjIsNiArNDg2LDIwIEBACiAJUERFQlVHKERfRlJBTSwgImFmdGVyIHdhaXQgMHglMDR4Iiwgbm90ZG9uZSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNwY2E1MDRfcmVhZF9pbmZvKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgaTsKKwl1OCBpbmZvWzZdOworCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJaW5mb1tpXSA9IHJlZ19yXzEoZ3NwY2FfZGV2LCBpKTsKKwlQREVCVUcoRF9TVFJFQU0sCisJCSJSZWFkIGluZm86ICVkICVkICVkICVkICVkICVkLiIKKwkJIiBTaG91bGQgYmUgMSwwLDIsMiwwLDAiLAorCQlpbmZvWzBdLCBpbmZvWzFdLCBpbmZvWzJdLAorCQlpbmZvWzNdLCBpbmZvWzRdLCBpbmZvWzVdKTsKK30KKwogc3RhdGljIHZvaWQgc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJdTggcmVxLAogCQkJdTE2IGlkeCwgdTE2IHZhbCwgdTE2IGVuZGNvZGUsIHU4IGNvdW50KQpAQCAtODgxLDggKzc1OSw2IEBACiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgaTsKLQl1OCBpbmZvWzZdOwogCiAJc3dpdGNoIChzZC0+YnJpZGdlKSB7CiAJY2FzZSBCUklER0VfU1BDQTUwNEI6CkBAIC05MjQsMTUgKzgwMCw4IEBACiAvKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLwogCQlQREVCVUcoRF9TVFJFQU0sICJPcGVuaW5nIFNQQ0E1MDQiKTsKIAkJaWYgKHNkLT5zdWJ0eXBlID09IEFpcHRla01pbmlQZW5DYW0xMykgewotCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJCQlpbmZvW2ldID0gcmVnX3JfMShnc3BjYV9kZXYsIGkpOwotCQkJUERFQlVHKERfU1RSRUFNLAotCQkJCSJSZWFkIGluZm86ICVkICVkICVkICVkICVkICVkLiIKLQkJCQkiIFNob3VsZCBiZSAxLDAsMiwyLDAsMCIsCi0JCQkJaW5mb1swXSwgaW5mb1sxXSwgaW5mb1syXSwKLQkJCQlpbmZvWzNdLCBpbmZvWzRdLCBpbmZvWzVdKTsKLQkJCS8qIHNwY2E1MDRhIGFpcHRlayAqLworCQkJc3BjYTUwNF9yZWFkX2luZm8oZ3NwY2FfZGV2KTsKKwogCQkJLyogU2V0IEFFIEFXQiBCYW5kaW5nIFR5cGUgMy0+IDUwSHogMi0+IDYwSHogKi8KIAkJCXNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgyNCwKIAkJCQkJCQk4LCAzLCAweDllLCAxKTsKQEAgLTk3MSw4ICs4NDAsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgZW5hYmxlOwotCWludCBpOwotCXU4IGluZm9bNl07CiAKIAkvKiBjcmVhdGUgdGhlIEpQRUcgaGVhZGVyICovCiAJc2QtPmpwZWdfaGRyID0ga21hbGxvYyhKUEVHX0hEUl9TWiwgR0ZQX0tFUk5FTCk7CkBAIC0xMDA4LDE0ICs4NzUsOCBAQAogCQlicmVhazsKIAljYXNlIEJSSURHRV9TUENBNTA0OgogCQlpZiAoc2QtPnN1YnR5cGUgPT0gQWlwdGVrTWluaVBlbkNhbTEzKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQkJCWluZm9baV0gPSByZWdfcl8xKGdzcGNhX2RldiwgaSk7Ci0JCQlQREVCVUcoRF9TVFJFQU0sCi0JCQkJIlJlYWQgaW5mbzogJWQgJWQgJWQgJWQgJWQgJWQuIgotCQkJCSIgU2hvdWxkIGJlIDEsMCwyLDIsMCwwIiwKLQkJCQlpbmZvWzBdLCBpbmZvWzFdLCBpbmZvWzJdLAotCQkJCWluZm9bM10sIGluZm9bNF0sIGluZm9bNV0pOwotCQkJLyogc3BjYTUwNGEgYWlwdGVrICovCisJCQlzcGNhNTA0X3JlYWRfaW5mbyhnc3BjYV9kZXYpOworCiAJCQkvKiBTZXQgQUUgQVdCIEJhbmRpbmcgVHlwZSAzLT4gNTBIeiAyLT4gNjBIeiAqLwogCQkJc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LAogCQkJCQkJCTgsIDMsIDB4OWUsIDEpOwpAQCAtMTAyNiwxMyArODg3LDcgQEAKIAkJCQkJCQkwLCAwLCAweDlkLCAxKTsKIAkJfSBlbHNlIHsKIAkJCXNwY2E1MDRfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LCA4LCAzKTsKLQkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCQkJaW5mb1tpXSA9IHJlZ19yXzEoZ3NwY2FfZGV2LCBpKTsKLQkJCVBERUJVRyhEX1NUUkVBTSwKLQkJCQkiUmVhZCBpbmZvOiAlZCAlZCAlZCAlZCAlZCAlZC4iCi0JCQkJIiBTaG91bGQgYmUgMSwwLDIsMiwwLDAiLAotCQkJCWluZm9bMF0sIGluZm9bMV0sIGluZm9bMl0sCi0JCQkJaW5mb1szXSwgaW5mb1s0XSwgaW5mb1s1XSk7CisJCQlzcGNhNTA0X3JlYWRfaW5mbyhnc3BjYV9kZXYpOwogCQkJc3BjYTUwNF9hY2tub3dsZWRnZWRfY29tbWFuZChnc3BjYV9kZXYsIDB4MjQsIDgsIDMpOwogCQkJc3BjYTUwNF9hY2tub3dsZWRnZWRfY29tbWFuZChnc3BjYV9kZXYsIDB4MjQsIDAsIDApOwogCQl9CkBAIC0xMzM2LDYgKzExOTEsNyBAQAogCXtVU0JfREVWSUNFKDB4MDRmYywgMHg1MzMwKSwgQlMoU1BDQTUzMywgMCl9LAogCXtVU0JfREVWSUNFKDB4MDRmYywgMHg1MzYwKSwgQlMoU1BDQTUzNiwgMCl9LAogCXtVU0JfREVWSUNFKDB4MDRmYywgMHhmZmZmKSwgQlMoU1BDQTUwNEIsIDApfSwKKwl7VVNCX0RFVklDRSgweDA1MmIsIDB4MTUwNyksIEJTKFNQQ0E1MzMsIE1lZ2FwaXhWNCl9LAogCXtVU0JfREVWSUNFKDB4MDUyYiwgMHgxNTEzKSwgQlMoU1BDQTUzMywgTWVnYXBpeFY0KX0sCiAJe1VTQl9ERVZJQ0UoMHgwNTJiLCAweDE4MDMpLCBCUyhTUENBNTMzLCBNZWdhSW1hZ2VWSSl9LAogCXtVU0JfREVWSUNFKDB4MDU0NiwgMHgzMTU1KSwgQlMoU1BDQTUzMywgMCl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwppbmRleCA1NWVmNmE3Li42NjhhNzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwpAQCAtNTIsNiArNTIsNyBAQAogI2RlZmluZSBTRU5TT1JfT002ODAyIDAKICNkZWZpbmUgU0VOU09SX09USEVSIDEKICNkZWZpbmUgU0VOU09SX1RBUzUxMzBBIDIKKyNkZWZpbmUgU0VOU09SX0xUMTY4RyAzICAgICAvKiBtdXN0IHZlcmlmeSBpZiB0aGlzIGlzIHRoZSBhY3R1YWwgbW9kZWwgKi8KIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KQEAgLTc4LDcgKzc5LDcgQEAKIHN0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtMzA2LDYgKzMwNywxNyBAQAogCTB4YmUsIDB4MzYsIDB4YmYsIDB4ZmYsIDB4YzIsIDB4ODgsIDB4YzUsIDB4YzgsCiAJMHhjNiwgMHhkYQogfTsKK3N0YXRpYyBjb25zdCB1OCBuNF9sdDE2OGdbXSA9IHsKKwkweDY2LCAweDAxLCAweDdmLCAweDAwLCAweDgwLCAweDdjLCAweDgxLCAweDI4LAorCTB4ODMsIDB4NDQsIDB4ODQsIDB4MjAsIDB4ODYsIDB4MjAsIDB4OGEsIDB4NzAsCisJMHg4YiwgMHg1OCwgMHg4YywgMHg4OCwgMHg4ZCwgMHhhMCwgMHg4ZSwgMHhiMywKKwkweDhmLCAweDI0LCAweGExLCAweGIwLCAweGEyLCAweDM4LCAweGE1LCAweDIwLAorCTB4YTYsIDB4NGEsIDB4YTgsIDB4ZTgsIDB4YWYsIDB4MzgsIDB4YjAsIDB4NjgsCisJMHhiMSwgMHg0NCwgMHhiMiwgMHg4OCwgMHhiYiwgMHg4NiwgMHhiZCwgMHg0MCwKKwkweGJlLCAweDI2LCAweGMxLCAweDA1LCAweGMyLCAweDg4LCAweGM1LCAweGMwLAorCTB4ZGEsIDB4OGUsIDB4ZGIsIDB4Y2EsIDB4ZGMsIDB4YTgsIDB4ZGQsIDB4OGMsCisJMHhkZSwgMHg0NCwgMHhkZiwgMHgwYywgMHhlOSwgMHg4MAorfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRpdGlvbmFsX3NlbnNvcl9kYXRhIHNlbnNvcl9kYXRhW10gPSB7CiAgICAgewkJCQkvKiAwOiBPTTY4MDIgKi8KQEAgLTM4MCw2ICszOTIsMjMgQEAKIAkuc3RyZWFtID0KIAkJezB4MGIsIDB4MDQsIDB4MGEsIDB4NDB9LAogICAgIH0sCisgICAgewkJCQkvKiAzOiBMVDE2OEcgKi8KKwkubjMgPSB7MHg2MSwgMHhjMiwgMHg2NSwgMHg2OCwgMHg2MCwgMHgwMH0sCisJLm40ID0gbjRfbHQxNjhnLAorCS5uNHN6ID0gc2l6ZW9mIG40X2x0MTY4ZywKKwkucmVnODAgPSAweDdjLAorCS5yZWc4ZSA9IDB4YjMsCisJLm5zZXQ4ID0gezB4YTgsIDB4ZjAsIDB4YzYsIDB4YmEsIDB4YzAsIDB4MDB9LAorCS5kYXRhMSA9IHsweGMwLCAweDM4LCAweDA4LCAweDEwLCAweGMwLCAweDMwLCAweDEwLCAweDQwLAorCQkgMHhiMCwgMHhmNH0sCisJLmRhdGEyID0gezB4NDAsIDB4ODAsIDB4YzAsIDB4NTAsIDB4YTAsIDB4ZjAsIDB4NTMsIDB4YTYsCisJCSAweGZmfSwKKwkuZGF0YTMgPSB7MHg0MCwgMHg4MCwgMHhjMCwgMHg1MCwgMHhhMCwgMHhmMCwgMHg1MywgMHhhNiwKKwkJIDB4ZmZ9LAorCS5kYXRhNCA9IHsweDY2LCAweDQxLCAweGE4LCAweGYwfSwKKwkuZGF0YTUgPSB7MHgwYywgMHgwMywgMHhhYiwgMHg0YiwgMHg4MSwgMHgyYn0sCisJLnN0cmVhbSA9IHsweDBiLCAweDA0LCAweDBhLCAweDI4fSwKKyAgICB9LAogfTsKIAogI2RlZmluZSBNQVhfRUZGRUNUUyA3CkBAIC03MTYsNiArNzQ1LDEwIEBACiAJCVBERUJVRyhEX1BST0JFLCAic2Vuc29yIHRhczUxMzBhIik7CiAJCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMEE7CiAJCWJyZWFrOworCWNhc2UgMHgwODAyOgorCQlQREVCVUcoRF9QUk9CRSwgInNlbnNvciBsdDE2OGciKTsKKwkJc2QtPnNlbnNvciA9IFNFTlNPUl9MVDE2OEc7CisJCWJyZWFrOwogCWNhc2UgMHgwODAzOgogCQlQREVCVUcoRF9QUk9CRSwgInNlbnNvciAnb3RoZXInIik7CiAJCXNkLT5zZW5zb3IgPSBTRU5TT1JfT1RIRVI7CkBAIC03NTgsNiArNzkxLDEzIEBACiAJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yLT5uMywgc2l6ZW9mIHNlbnNvci0+bjMpOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvci0+bjQsIHNlbnNvci0+bjRzeik7CiAKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfTFQxNjhHKSB7CisJCXRlc3RfYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHg4MCk7CisJCVBERUJVRyhEX1NUUkVBTSwgIlJlZyAweCUwMnggPSAweCUwMngiLCAweDgwLAorCQkgICAgICAgdGVzdF9ieXRlKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDZjODApOworCX0KKwogCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhkMCwgc2Vuc29yLT5kYXRhMSwgc2l6ZW9mIHNlbnNvci0+ZGF0YTEpOwogCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhjNywgc2Vuc29yLT5kYXRhMiwgc2l6ZW9mIHNlbnNvci0+ZGF0YTIpOwogCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhlMCwgc2Vuc29yLT5kYXRhMywgc2l6ZW9mIHNlbnNvci0+ZGF0YTMpOwpAQCAtNzgyLDYgKzgyMiwxMyBAQAogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvci0+bnNldDgsIHNpemVvZiBzZW5zb3ItPm5zZXQ4KTsKIAlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3ItPnN0cmVhbSwgc2l6ZW9mIHNlbnNvci0+c3RyZWFtKTsKIAorCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9MVDE2OEcpIHsKKwkJdGVzdF9ieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDgwKTsKKwkJUERFQlVHKERfU1RSRUFNLCAiUmVnIDB4JTAyeCA9IDB4JTAyeCIsIDB4ODAsCisJCSAgICAgICB0ZXN0X2J5dGUpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4NmM4MCk7CisJfQorCiAJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGQwLCBzZW5zb3ItPmRhdGExLCBzaXplb2Ygc2Vuc29yLT5kYXRhMSk7CiAJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGM3LCBzZW5zb3ItPmRhdGEyLCBzaXplb2Ygc2Vuc29yLT5kYXRhMik7CiAJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGUwLCBzZW5zb3ItPmRhdGEzLCBzaXplb2Ygc2Vuc29yLT5kYXRhMyk7CkBAIC04ODgsNiArOTM1LDggQEAKIAljYXNlIFNFTlNPUl9PTTY4MDI6CiAJCW9tNjgwMl9zZW5zb3JfaW5pdChnc3BjYV9kZXYpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9MVDE2OEc6CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX09USEVSOgogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKaW5kZXggYjc0YTNiNi4uYzdiNmViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCkBAIC0zOSw3ICszOSw3IEBACiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKaW5kZXggNzE5MjFjOC4uNDk4OWY5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCkBAIC0zMiwxMCArMzIsMTMgQEAKIHN0cnVjdCBzZCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAorCXU4IGJyaWdodG5lc3M7CisJdTggY29udHJhc3Q7CisJdTggY29sb3JzOwogCXU4IGhmbGlwOwogCXU4IHZmbGlwOwogCXU4IGxpZ2h0ZnJlcTsKLQl1OCBzaGFycG5lc3M7CisJczggc2hhcnBuZXNzOwogCiAJdTggaW1hZ2Vfb2Zmc2V0OwogCkBAIC01Miw2ICs1NSw3IEBACiAjZGVmaW5lIFNFTlNPUl9PVjc2NzAgNgogI2RlZmluZSBTRU5TT1JfUE8xMjAwIDcKICNkZWZpbmUgU0VOU09SX1BPMzEzME5DIDgKKyNkZWZpbmUgU0VOU09SX1BPeHh4eCA5CiAJdTggZmxhZ3M7CiAjZGVmaW5lIEZMX1NBTVNVTkcgMHgwMQkJLyogU2Ftc3VuZ1ExICgyIHNlbnNvcnMpICovCiAjZGVmaW5lIEZMX0hGTElQIDB4MDIJCS8qIG1pcnJvcmVkIGJ5IGRlZmF1bHQgKi8KQEAgLTU5LDYgKzYzLDEyIEBACiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldGhmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0aGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwpAQCAtNjgsOSArNzgsNTQgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisjZGVmaW5lIEJSSUdIVE5FU1NfSURYIDAKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDEyOAorCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKKwkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCisJfSwKKyNkZWZpbmUgQ09OVFJBU1RfSURYIDEKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJDb250cmFzdCIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAyNTUsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQ09OVFJBU1RfREVGIDEyNworCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbnRyYXN0LAorCSAgICAuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisJfSwKKyNkZWZpbmUgQ09MT1JTX0lEWCAyCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJTYXR1cmF0aW9uIiwKKwkJLm1pbmltdW0gPSAxLAorCQkubWF4aW11bSA9IDEyNywKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBDT0xPUl9ERUYgNjMKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT0xPUl9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRjb2xvcnMsCisJICAgIC5nZXQgPSBzZF9nZXRjb2xvcnMsCisJfSwKIC8qIG5leHQgMiBjb250cm9scyB3b3JrIHdpdGggc29tZSBzZW5zb3JzIG9ubHkgKi8KLSNkZWZpbmUgSEZMSVBfSURYIDAKKyNkZWZpbmUgSEZMSVBfSURYIDMKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9IRkxJUCwKQEAgLTg1LDcgKzE0MCw3IEBACiAJICAgIC5zZXQgPSBzZF9zZXRoZmxpcCwKIAkgICAgLmdldCA9IHNkX2dldGhmbGlwLAogCX0sCi0jZGVmaW5lIFZGTElQX0lEWCAxCisjZGVmaW5lIFZGTElQX0lEWCA0CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfVkZMSVAsCkBAIC0xMDAsNyArMTU1LDcgQEAKIAkgICAgLnNldCA9IHNkX3NldHZmbGlwLAogCSAgICAuZ2V0ID0gc2RfZ2V0dmZsaXAsCiAJfSwKLSNkZWZpbmUgTElHSFRGUkVRX0lEWCAyCisjZGVmaW5lIExJR0hURlJFUV9JRFggNQogCXsKIAkgICAgewogCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCkBAIC0xMTUsMTcgKzE3MCwxNiBAQAogCSAgICAuc2V0ID0gc2Rfc2V0ZnJlcSwKIAkgICAgLmdldCA9IHNkX2dldGZyZXEsCiAJfSwKLS8qIHBvMTIwMCBvbmx5ICovCi0jZGVmaW5lIFNIQVJQTkVTU19JRFggMworI2RlZmluZSBTSEFSUE5FU1NfSURYIDYKIAl7CiAJIHsKIAkgIC5pZCA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKIAkgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkgIC5uYW1lID0gIlNoYXJwbmVzcyIsCi0JICAubWluaW11bSA9IDAsCisJICAubWluaW11bSA9IC0xLAogCSAgLm1heGltdW0gPSAyLAogCSAgLnN0ZXAgPSAxLAotI2RlZmluZSBTSEFSUE5FU1NfREVGIDEKKyNkZWZpbmUgU0hBUlBORVNTX0RFRiAtMQogCSAgLmRlZmF1bHRfdmFsdWUgPSBTSEFSUE5FU1NfREVGLAogCSAgfSwKIAkgLnNldCA9IHNkX3NldHNoYXJwbmVzcywKQEAgLTEzMyw2ICsxODcsNDIgQEAKIAkgfSwKIH07CiAKKy8qIHRhYmxlIG9mIHRoZSBkaXNhYmxlZCBjb250cm9scyAqLworc3RhdGljIHUzMiBjdHJsX2Rpc1tdID0geworLyogU0VOU09SX0hWNzEzMVIgMCAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCkKKwkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9NSTAzNjAgMSAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCkKKwkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9NSTEzMTBfU09DIDIgKi8KKwkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKKwkJfCAoMSA8PCBMSUdIVEZSRVFfSURYKSB8ICgxIDw8IFNIQVJQTkVTU19JRFgpLAorLyogU0VOU09SX01JMTMyMCAzICovCisJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCisJCXwgKDEgPDwgTElHSFRGUkVRX0lEWCkgfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9NSTEzMjBfU09DIDQgKi8KKwkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKKwkJfCAoMSA8PCBMSUdIVEZSRVFfSURYKSB8ICgxIDw8IFNIQVJQTkVTU19JRFgpLAorLyogU0VOU09SX09WNzY2MCA1ICovCisJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCisJCXwgKDEgPDwgTElHSFRGUkVRX0lEWCkgfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9PVjc2NzAgNiAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IFNIQVJQTkVTU19JRFgpLAorLyogU0VOU09SX1BPMTIwMCA3ICovCisJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCisJCXwgKDEgPDwgTElHSFRGUkVRX0lEWCksCisvKiBTRU5TT1JfUE8zMTMwTkMgOCAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCkKKwkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9QT3h4eHggOSAqLworCSgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCksCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2YzAzMjFfbW9kZVtdID0gewogCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX1lWWVUsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDMyMCwKQEAgLTIxNSw3ICszMDUsNyBAQAogCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCiAJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCS8qIGkyYyBhZGQ6IDVkICovCiAJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAogCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKIAl7MHhiYywgMHgwMCwgMHg3MSwgMHhjY30sCkBAIC00MzUsNyArNTI1LDcgQEAKIAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAogCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4ZGQsIDB4Y2N9LAkvKiBpMmMgYWRkOiA1ZCAqLwogCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCiAJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LApAQCAtODYwLDcgKzk1MCw4IEBACiAJezB4YjAsIDB4MTYsIDB4MDMsIDB4Y2N9LAl7MHhiMywgMHgwNSwgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MDYsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCi0JezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAkvKiBpMmMgYWRkOiA0OCAqLworCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCXsweGIzLCAweDA0LCAweDA1LCAweGNjfSwKIAl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgyMiwgMHgwMywgMHhjY30sCXsweGIzLCAweDIzLCAweGMwLCAweGNjfSwKQEAgLTkwMSw3ICs5OTIsOCBAQAogCXsweGMzLCAweDAxLCAweDAzLCAweGJifSwJezB4YzQsIDB4MDAsIDB4MDQsIDB4YmJ9LAogCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwJezB4MDUsIDB4MDEsIDB4MTMsIDB4YmJ9LAogCXsweDA2LCAweDAwLCAweDExLCAweGJifSwJezB4MDcsIDB4MDAsIDB4ODUsIDB4YmJ9LAotCXsweDA4LCAweDAwLCAweDI3LCAweGJifSwJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDI3LCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMCwgMHhiYn0sCS8qIGgvdiBmbGlwcyAtIHdhcyAwMyAqLwogCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwJezB4MjIsIDB4MGQsIDB4MGYsIDB4YmJ9LAogCXsweDI0LCAweDgwLCAweDAwLCAweGJifSwJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAogCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwJezB4MzksIDB4MDMsIDB4MGQsIDB4YmJ9LApAQCAtMTAxMiw3ICsxMTA0LDcgQEAKIAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAogCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAkvKiBpMmMgYWRkOiA0OCAqLwogCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCiAJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LApAQCAtMTM1OSw3ICsxNDUxLDggQEAKIAl7MHhiMywgMHgyMywgMHhlOCwgMHhjY30sCXsweGI4LCAweDA4LCAweGU4LCAweGNjfSwKIAl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKLQl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCXsweGIzLCAweDM1LCAweGY2LCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4ZjYsIDB4Y2N9LAkvKiBpMmMgYWRkOiA3NiAqLwogCXsweGIzLCAweDAwLCAweDI3LCAweGNjfSwJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAogCXsweGI4LCAweDAwLCAweDIxLCAweGNjfSwJezB4YjgsIDB4MjcsIDB4MjAsIDB4Y2N9LAogCXsweGI4LCAweDAxLCAweDc5LCAweGNjfSwJezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LApAQCAtMTU2MSw3ICsxNjU0LDcgQEAKIAl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCiAJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAogCXsweGIzLCAweDM0LCAweDAxLCAweGNjfSwKLQl7MHhiMywgMHgzNSwgMHg5MSwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4OTEsIDB4Y2N9LAkvKiBpMmMgYWRkOiAxMSAqLwogCXsweGIzLCAweDAwLCAweDI3LCAweGNjfSwKIAl7MHhiYywgMHgwMCwgMHg3MywgMHhjY30sCiAJezB4YjgsIDB4MDAsIDB4MjMsIDB4Y2N9LApAQCAtMTc0Nyw3ICsxODQwLDggQEAKIAl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCXsweGIzLCAweDFkLCAweDAxLCAweGNjfSwKIAl7MHhiMywgMHgxZiwgMHgwMiwgMHhjY30sCiAJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweGExLCAweGNjfSwJezB4YjMsIDB4MDAsIDB4MjYsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGExLCAweGNjfSwJLyogaTJjIGFkZDogMjEgKi8KKwl7MHhiMywgMHgwMCwgMHgyNiwgMHhjY30sCiAJezB4YjgsIDB4MDAsIDB4MzMsIDB4Y2N9LCAvKiAxMyAqLwogCXsweGI4LCAweDAxLCAweDdkLCAweGNjfSwKIAl7MHhiYywgMHgwMCwgMHg3MywgMHhjY30sCXsweGI4LCAweDgxLCAweDA5LCAweGNjfSwKQEAgLTE4ODMsNyArMTk3Nyw4IEBACiAJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAogCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAogCXsweGIzLCAweDAwLCAweDY2LCAweGNjfSwJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweGExLCAweGNjfSwJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGExLCAweGNjfSwJLyogaTJjIGFkZDogMjEgKi8KKwl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAl7MHhiMywgMHgwNiwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCiAJezB4YjMsIDB4MDIsIDB4MDIsIDB4Y2N9LAl7MHhiMywgMHgwMywgMHgxZiwgMHhjY30sCkBAIC0yMTgxLDcgKzIyNzYsNyBAQAogCXsweGIwLCAweDU0LCAweDEzLCAweGNjfSwKIAl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCiAJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweGRjLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhkYywgMHhjY30sCS8qIGkyYyBhZGQ6IDVjICovCiAJezB4MDAsIDB4MDMsIDB4MDAsIDB4YWF9LAogCXsweDAwLCAweDEyLCAweDA1LCAweGFhfSwKIAl7MHgwMCwgMHgxMywgMHgwMiwgMHhhYX0sCkBAIC0yNDA4LDYgKzI1MDMsMjUxIEBACiAJezB4MDAsIDB4YjYsIDB4MzksIDB4YWF9LAogCXsweDAwLCAweGI3LCAweDI0LCAweGFhfSwKIC8qd3JpdGUgODkgMDQwMCAxNDE1Ki8KKwl7fQorfTsKKworc3RhdGljIGNvbnN0IHU4IHBveHh4eF9pbml0X2NvbW1vbltdWzRdID0geworCXsweGIzLCAweDAwLCAweDA0LCAweGNjfSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4YjMsIDB4MDAsIDB4NjQsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKKwl7MHhiMCwgMHgwMywgMHgwOSwgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4ZjYsIDB4Y2N9LAkvKiBpMmMgYWRkOiA3NiAqLworCXsweGIzLCAweDAyLCAweGIwLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgxOCwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MTUsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHhmZiwgMHhjY30sCisJezB4YjMsIDB4MmMsIDB4MDMsIDB4Y2N9LAorCXsweGIzLCAweDJkLCAweDU2LCAweGNjfSwKKwl7MHhiMywgMHgyZSwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MmYsIDB4MGEsIDB4Y2N9LAorCXsweGIzLCAweDQwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHg0MSwgMHgzNCwgMHhjY30sCisJezB4YjMsIDB4NDIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDQzLCAweGUwLCAweGNjfSwKKwl7MHhiYywgMHgwMCwgMHg3MSwgMHhjY30sCisJezB4YmMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKKwl7MHhiMywgMHg0ZCwgMHgwMCwgMHhjY30sCisJezB4MDAsIDB4MGIsIDB4MmEsIDB4YWF9LAorCXsweDAwLCAweDBlLCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHgwZiwgMHhlYSwgMHhhYX0sCisJezB4MDAsIDB4MTIsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDFlLCAweDA2LCAweGFhfSwKKwl7MHgwMCwgMHgyMSwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4MzEsIDB4MWYsIDB4YWF9LAorCXsweDAwLCAweDMzLCAweDM4LCAweGFhfSwKKwl7MHgwMCwgMHgzNiwgMHhjMCwgMHhhYX0sCisJezB4MDAsIDB4MzcsIDB4YzgsIDB4YWF9LAorCXsweDAwLCAweDNiLCAweDM2LCAweGFhfSwKKwl7MHgwMCwgMHg0YiwgMHhmZSwgMHhhYX0sCisJezB4MDAsIDB4NGQsIDB4MmUsIDB4YWF9LAorCXsweDAwLCAweDUxLCAweDFjLCAweGFhfSwKKwl7MHgwMCwgMHg1MiwgMHgwMSwgMHhhYX0sCisJezB4MDAsIDB4NTUsIDB4MGEsIDB4YWF9LAorCXsweDAwLCAweDU2LCAweDBhLCAweGFhfSwKKwl7MHgwMCwgMHg1NywgMHgwNywgMHhhYX0sCisJezB4MDAsIDB4NTgsIDB4MDcsIDB4YWF9LAorCXsweDAwLCAweDU5LCAweDA0LCAweGFhfSwKKwl7MHgwMCwgMHg3MCwgMHg2OCwgMHhhYX0sCisJezB4MDAsIDB4NzEsIDB4MDQsIDB4YWF9LAorCXsweDAwLCAweDcyLCAweDEwLCAweGFhfSwKKwl7MHgwMCwgMHg4MCwgMHg3MSwgMHhhYX0sCisJezB4MDAsIDB4ODEsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDgyLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg4MywgMHg1NSwgMHhhYX0sCisJezB4MDAsIDB4ODQsIDB4MDYsIDB4YWF9LAorCXsweDAwLCAweDg1LCAweDA2LCAweGFhfSwKKwl7MHgwMCwgMHg4YiwgMHgyNSwgMHhhYX0sCisJezB4MDAsIDB4OGMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDhkLCAweDg2LCAweGFhfSwKKwl7MHgwMCwgMHg4ZSwgMHg4MiwgMHhhYX0sCisJezB4MDAsIDB4OGYsIDB4MmQsIDB4YWF9LAorCXsweDAwLCAweDkwLCAweDhiLCAweGFhfSwKKwl7MHgwMCwgMHg5MSwgMHg4MSwgMHhhYX0sCisJezB4MDAsIDB4OTIsIDB4ODEsIDB4YWF9LAorCXsweDAwLCAweDkzLCAweDIzLCAweGFhfSwKKwl7MHgwMCwgMHhhMywgMHgyYSwgMHhhYX0sCisJezB4MDAsIDB4YTQsIDB4MDMsIDB4YWF9LAorCXsweDAwLCAweGE1LCAweGVhLCAweGFhfSwKKwl7MHgwMCwgMHhiMCwgMHg2OCwgMHhhYX0sCisJezB4MDAsIDB4YmMsIDB4MDQsIDB4YWF9LAorCXsweDAwLCAweGJlLCAweDNiLCAweGFhfSwKKwl7MHgwMCwgMHg0ZSwgMHg0MCwgMHhhYX0sCisJezB4MDAsIDB4MDYsIDB4MDQsIDB4YWF9LAorCXsweDAwLCAweDA3LCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHhjZCwgMHgxOCwgMHhhYX0sCisJezB4MDAsIDB4MjgsIDB4MDMsIDB4YWF9LAorCXsweDAwLCAweDI5LCAweGVmLCAweGFhfSwKKy8qIHJlaW5pdCBvbiBhbHQgMiAocXZnYSkgb3IgYWx0NyAodmdhKSAqLworCXsweGIzLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MDEsIDB4Y2N9LAorCisJezB4MDAsIDB4MWQsIDB4ODUsIDB4YWF9LAorCXsweDAwLCAweDFlLCAweGM2LCAweGFhfSwKKwl7MHgwMCwgMHgwMCwgMHg0MCwgMHhkZH0sCisJezB4MDAsIDB4MWQsIDB4MDUsIDB4YWF9LAorCisJezB4MDAsIDB4ZDYsIDB4MjIsIDB4YWF9LAkvKiBnYW1tYSAwICovCisJezB4MDAsIDB4NzMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDc0LCAweDBhLCAweGFhfSwKKwl7MHgwMCwgMHg3NSwgMHgxNiwgMHhhYX0sCisJezB4MDAsIDB4NzYsIDB4MjUsIDB4YWF9LAorCXsweDAwLCAweDc3LCAweDM0LCAweGFhfSwKKwl7MHgwMCwgMHg3OCwgMHg0OSwgMHhhYX0sCisJezB4MDAsIDB4NzksIDB4NWEsIDB4YWF9LAorCXsweDAwLCAweDdhLCAweDdmLCAweGFhfSwKKwl7MHgwMCwgMHg3YiwgMHg5YiwgMHhhYX0sCisJezB4MDAsIDB4N2MsIDB4YmEsIDB4YWF9LAorCXsweDAwLCAweDdkLCAweGQ0LCAweGFhfSwKKwl7MHgwMCwgMHg3ZSwgMHhlYSwgMHhhYX0sCisKKwl7MHgwMCwgMHhkNiwgMHg2MiwgMHhhYX0sCS8qIGdhbW1hIDEgKi8KKwl7MHgwMCwgMHg3MywgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4NzQsIDB4MGEsIDB4YWF9LAorCXsweDAwLCAweDc1LCAweDE2LCAweGFhfSwKKwl7MHgwMCwgMHg3NiwgMHgyNSwgMHhhYX0sCisJezB4MDAsIDB4NzcsIDB4MzQsIDB4YWF9LAorCXsweDAwLCAweDc4LCAweDQ5LCAweGFhfSwKKwl7MHgwMCwgMHg3OSwgMHg1YSwgMHhhYX0sCisJezB4MDAsIDB4N2EsIDB4N2YsIDB4YWF9LAorCXsweDAwLCAweDdiLCAweDliLCAweGFhfSwKKwl7MHgwMCwgMHg3YywgMHhiYSwgMHhhYX0sCisJezB4MDAsIDB4N2QsIDB4ZDQsIDB4YWF9LAorCXsweDAwLCAweDdlLCAweGVhLCAweGFhfSwKKworCXsweDAwLCAweGQ2LCAweGEyLCAweGFhfSwJLyogZ2FtbWEgMiAqLworCXsweDAwLCAweDczLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg3NCwgMHgwYSwgMHhhYX0sCisJezB4MDAsIDB4NzUsIDB4MTYsIDB4YWF9LAorCXsweDAwLCAweDc2LCAweDI1LCAweGFhfSwKKwl7MHgwMCwgMHg3NywgMHgzNCwgMHhhYX0sCisJezB4MDAsIDB4NzgsIDB4NDksIDB4YWF9LAorCXsweDAwLCAweDc5LCAweDVhLCAweGFhfSwKKwl7MHgwMCwgMHg3YSwgMHg3ZiwgMHhhYX0sCisJezB4MDAsIDB4N2IsIDB4OWIsIDB4YWF9LAorCXsweDAwLCAweDdjLCAweGJhLCAweGFhfSwKKwl7MHgwMCwgMHg3ZCwgMHhkNCwgMHhhYX0sCisJezB4MDAsIDB4N2UsIDB4ZWEsIDB4YWF9LAorCisJezB4MDAsIDB4YWEsIDB4ZmYsIDB4YWF9LAkvKiBiYWNrIGxpZ2h0IGNvbXAgKi8KKwl7MHgwMCwgMHhjNCwgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4YzUsIDB4MTksIDB4YWF9LAorCXsweDAwLCAweGM2LCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHhjNywgMHg5MSwgMHhhYX0sCisJezB4MDAsIDB4YzgsIDB4MDEsIDB4YWF9LAorCXsweDAwLCAweGM5LCAweGRkLCAweGFhfSwKKwl7MHgwMCwgMHhjYSwgMHgwMiwgMHhhYX0sCisJezB4MDAsIDB4Y2IsIDB4MzcsIDB4YWF9LAorCisvKiByZWFkIGQxICovCisJezB4MDAsIDB4ZDEsIDB4M2MsIDB4YWF9LAorCXsweDAwLCAweGI4LCAweDI4LCAweGFhfSwKKwl7MHgwMCwgMHhiOSwgMHgxZSwgMHhhYX0sCisJezB4MDAsIDB4YjYsIDB4MTQsIDB4YWF9LAorCXsweDAwLCAweGI3LCAweDBmLCAweGFhfSwKKwl7MHgwMCwgMHg1YywgMHgxMCwgMHhhYX0sCisJezB4MDAsIDB4NWQsIDB4MTgsIDB4YWF9LAorCXsweDAwLCAweDVlLCAweDI0LCAweGFhfSwKKwl7MHgwMCwgMHg1ZiwgMHgyNCwgMHhhYX0sCisJezB4MDAsIDB4ODYsIDB4MWEsIDB4YWF9LAorCXsweDAwLCAweDYwLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg2MSwgMHgxYiwgMHhhYX0sCisJezB4MDAsIDB4NjIsIDB4MzAsIDB4YWF9LAorCXsweDAwLCAweDYzLCAweDQwLCAweGFhfSwKKwl7MHgwMCwgMHg4NywgMHgxYSwgMHhhYX0sCisJezB4MDAsIDB4NjQsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDY1LCAweDA4LCAweGFhfSwKKwl7MHgwMCwgMHg2NiwgMHgxMCwgMHhhYX0sCisJezB4MDAsIDB4NjcsIDB4MjAsIDB4YWF9LAorCXsweDAwLCAweDg4LCAweDEwLCAweGFhfSwKKwl7MHgwMCwgMHg2OCwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4NjksIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDZhLCAweDBmLCAweGFhfSwKKwl7MHgwMCwgMHg2YiwgMHgwZiwgMHhhYX0sCisJezB4MDAsIDB4ODksIDB4MDcsIDB4YWF9LAorCXsweDAwLCAweGQ1LCAweDRjLCAweGFhfSwKKwl7MHgwMCwgMHgwYSwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4MGIsIDB4MmEsIDB4YWF9LAorCXsweDAwLCAweDBlLCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHgwZiwgMHhlYSwgMHhhYX0sCisJezB4MDAsIDB4YTIsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweGEzLCAweDJhLCAweGFhfSwKKwl7MHgwMCwgMHhhNCwgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4YTUsIDB4ZWEsIDB4YWF9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IHBveHh4eF9pbml0VkdBW11bNF0gPSB7CisJezB4MDAsIDB4MjAsIDB4MTEsIDB4YWF9LAorCXsweDAwLCAweDMzLCAweDM4LCAweGFhfSwKKwl7MHgwMCwgMHhiYiwgMHgwZCwgMHhhYX0sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKKwl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweGIwLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweDAwLCAweDA0LCAweDA2LCAweGFhfSwKKwl7MHgwMCwgMHgwNSwgMHgzZiwgMHhhYX0sCisJezB4MDAsIDB4MDQsIDB4MDAsIDB4ZGR9LAkvKiBkZWxheSAxcyAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IHBveHh4eF9pbml0UVZHQVtdWzRdID0geworCXsweDAwLCAweDIwLCAweDMzLCAweGFhfSwKKwl7MHgwMCwgMHgzMywgMHgzOCwgMHhhYX0sCisJezB4MDAsIDB4YmIsIDB4MGQsIDB4YWF9LAorCXsweGIzLCAweDIyLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMywgMHhmMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweDNmLCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHhiMCwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAwLCAweGNjfSwKKwl7MHgwMCwgMHgwNCwgMHgwNiwgMHhhYX0sCisJezB4MDAsIDB4MDUsIDB4M2YsIDB4YWF9LAorCXsweDAwLCAweDA0LCAweDAwLCAweGRkfSwJLyogZGVsYXkgMXMgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCB1OCBwb3h4eHhfaW5pdF9lbmRfMVtdWzRdID0geworCXsweDAwLCAweDQ3LCAweDI1LCAweGFhfSwKKwl7MHgwMCwgMHg0OCwgMHg4MCwgMHhhYX0sCisJezB4MDAsIDB4NDksIDB4MWYsIDB4YWF9LAorCXsweDAwLCAweDRhLCAweDQwLCAweGFhfSwKKwl7MHgwMCwgMHg0NCwgMHg0MCwgMHhhYX0sCisJezB4MDAsIDB4YWIsIDB4NGEsIDB4YWF9LAorCXsweDAwLCAweGIxLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHhiMiwgMHgwNCwgMHhhYX0sCisJezB4MDAsIDB4YjMsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweGI0LCAweDBiLCAweGFhfSwKKwl7MHgwMCwgMHhiNSwgMHgwZCwgMHhhYX0sCisJezB4MDAsIDB4NTksIDB4N2UsIDB4YWF9LAkvKiBzaGFycG5lc3MgKi8KKwl7MHgwMCwgMHgxNiwgMHgwMCwgMHhhYX0sCS8qIHdoaXRlIGJhbGFuY2UgKi8KKwl7MHgwMCwgMHgxOCwgMHgwMCwgMHhhYX0sCisJe30KK307CitzdGF0aWMgY29uc3QgdTggcG94eHh4X2luaXRfZW5kXzJbXVs0XSA9IHsKKwl7MHgwMCwgMHgxZCwgMHg4NSwgMHhhYX0sCisJezB4MDAsIDB4MWUsIDB4MDYsIDB4YWF9LAorCXsweDAwLCAweDFkLCAweDA1LCAweGFhfSwKKwl7fQogfTsKIAogc3RydWN0IHNlbnNvcl9pbmZvIHsKQEAgLTI0MjAsMzMgKzI3NjAsODkgQEAKIAl1OCBvcDsKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gc2Vuc29yX2luZm9fZGF0YVtdID0gewotLyogICAgICBzZW5zb3JJZCwgICAgICAgICBJMmNBZGQsCUlkQWRkLCAgVnBJZCwgIG0xLCAgICBtMiwgIG9wICovCisvKiBwcm9iZSB2YWx1ZXMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gdmMwMzIxX3Byb2JlX2RhdGFbXSA9IHsKKy8qICAgICAgc2Vuc29ySWQsCSAgIEkyY0FkZCwJSWRBZGQsICBWcElkLCAgbTEsICAgIG0yLCAgb3AgKi8KKy8qIDAgT1Y5NjQwICovCiAJey0xLAkJICAgIDB4ODAgfCAweDMwLCAweDBhLCAweDAwMDAsIDB4MjUsIDB4MjQsIDB4MDV9LAorLyogMSBJQ00xMDhUIChtYXkgcmVzcG9uZCBvbiBJZEFkZCA9PSAweDgzIC0gdGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpICovCiAJey0xLAkJICAgIDB4ODAgfCAweDIwLCAweDgyLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAotLyogKHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yKSAqLwotLyoJey0xLAkJICAgIDB4ODAgfCAweDIwLCAweDgzLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLwotCXtTRU5TT1JfUE8zMTMwTkMsICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MzEzMCwgMHgyNCwgMHgyNSwgMHgwMX0sCi0Je1NFTlNPUl9NSTEzMTBfU09DLCAweDgwIHwgMHg1ZCwgMHgwMCwgMHgxNDNhLCAweDI0LCAweDI1LCAweDAxfSwKLS8qICh0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvcikgKi8KKy8qIDIgUE8yMTMwIChtYXkgZGV0ZWN0IFBPMzEzME5DIC0gdGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAzIE1JMTMxMCAqLworCXstMSwJCSAgICAweDgwIHwgMHg1ZCwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDQgTUkzNjAgLSB0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvciAqLwogLyoJe1NFTlNPUl9NSTAzNjAsCSAgICAweDgwIHwgMHg1ZCwgMHgwMCwgMHg4MjQzLCAweDI0LCAweDI1LCAweDAxfSwgKi8KKy8qIDUgNzEzMVIgKi8KIAl7U0VOU09SX0hWNzEzMVIsICAgIDB4ODAgfCAweDExLCAweDAwLCAweDAyMDksIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogNiBPVjc2NDkgKi8KIAl7LTEsCQkgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4MDAwMCwgMHgyMSwgMHgyMCwgMHgwNX0sCisvKiA3IFBBUzMwMkJDVyAqLwogCXstMSwJCSAgICAweDgwIHwgMHg0MCwgMHgwMCwgMHgwMDAwLCAweDIwLCAweDIyLCAweDA1fSwKKy8qIDggT1Y3NjYwICovCiAJe1NFTlNPUl9PVjc2NjAsICAgICAweDgwIHwgMHgyMSwgMHgwYSwgMHg3NjYwLCAweDI2LCAweDI2LCAweDA1fSwKLS8qCXtTRU5TT1JfUE8zMTMwTkMsICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sICovCisvKiA5IFBPMzEzME5DIC0gKHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yKSAqLworLyoJe1NFTlNPUl9QTzMxMzBOQywgICAweDgwIHwgMHg3NiwgMHgwMCwgMHgzMTMwLCAweDI0LCAweDI1LCAweDAxfSwgKi8KKy8qIDEwIFBPMTAzMEtDICovCiAJey0xLAkJICAgIDB4ODAgfCAweDZlLCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAotLyoJe1NFTlNPUl9NSTEzMTBfU09DLCAweDgwIHwgMHg1ZCwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwgKi8KLS8qCXstMSwJCSAgICAweDgwIHwgMHgzMCwgMHgwYSwgMHgwMDAwLCAweDI1LCAweDI0LCAweDA1fSwgKi8KKy8qIDExIE1JMTMxMF9TT0MgKi8KKwl7U0VOU09SX01JMTMxMF9TT0MsIDB4ODAgfCAweDVkLCAweDAwLCAweDE0M2EsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogMTIgT1Y5NjUwICovCisJey0xLAkJICAgIDB4ODAgfCAweDMwLCAweDBhLCAweDAwMDAsIDB4MjUsIDB4MjQsIDB4MDV9LAorLyogMTMgUzVLNTMyICovCiAJey0xLAkJICAgIDB4ODAgfCAweDExLCAweDM5LCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogMTQgTUkzNjBfU09DIC0gPz8/ICovCisvKiAxNSBQTzEyMDBOICovCiAJe1NFTlNPUl9QTzEyMDAsICAgICAweDgwIHwgMHg1YywgMHgwMCwgMHgxMjAwLCAweDY3LCAweDY3LCAweDAxfSwKLQl7LTEsCQkgICAgMHg4MCB8IDB4MmQsIDB4MDAsIDB4MDAwMCwgMHg2NSwgMHg2NywgMHgwMX0sCisvKiAxNiBQTzMwMzBLICovCisJey0xLAkJICAgIDB4ODAgfCAweDE4LCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogMTcgUE8yMDMwICovCiAJey0xLAkJICAgIDB4ODAgfCAweDZlLCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogPz8gKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NTYsIDB4MDEsIDB4MDAwMCwgMHg2NCwgMHg2NywgMHgwMX0sCisJe1NFTlNPUl9NSTEzMjAsICAgICAweDgwIHwgMHg0OCwgMHgwMCwgMHgxNDhjLCAweDY0LCAweDY1LCAweDAxfSwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlbnNvcl9pbmZvIHZjMDMyM19wcm9iZV9kYXRhW10gPSB7CisvKiAgICAgIHNlbnNvcklkLAkgICBJMmNBZGQsCUlkQWRkLCAgVnBJZCwgIG0xLCAgICBtMiwgIG9wICovCisvKiAwIE9WOTY0MCAqLworCXstMSwJCSAgICAweDgwIHwgMHgzMCwgMHgwYSwgMHgwMDAwLCAweDI1LCAweDI0LCAweDA1fSwKKy8qIDEgSUNNMTA4VCAobWF5IHJlc3BvbmQgb24gSWRBZGQgPT0gMHg4MyAtIHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yKSAqLworCXstMSwJCSAgICAweDgwIHwgMHgyMCwgMHg4MiwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDIgUE8yMTMwIChtYXkgZGV0ZWN0IFBPMzEzME5DIC0gdGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAzIE1JMTMxMCAqLworCXstMSwJCSAgICAweDgwIHwgMHg1ZCwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDQgTUkzNjAgLSB0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvciAqLworLyoJe1NFTlNPUl9NSTAzNjAsCSAgICAweDgwIHwgMHg1ZCwgMHgwMCwgMHg4MjQzLCAweDI0LCAweDI1LCAweDAxfSwgKi8KKy8qIDUgNzEzMVIgKi8KKwl7U0VOU09SX0hWNzEzMVIsICAgIDB4ODAgfCAweDExLCAweDAwLCAweDAyMDksIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogNiBPVjc2NDkgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4MDAwMCwgMHgyMSwgMHgyMCwgMHgwNX0sCisvKiA3IFBBUzMwMkJDVyAqLworCXstMSwJCSAgICAweDgwIHwgMHg0MCwgMHgwMCwgMHgwMDAwLCAweDIwLCAweDIyLCAweDA1fSwKKy8qIDggT1Y3NjYwICovCisJe1NFTlNPUl9PVjc2NjAsICAgICAweDgwIHwgMHgyMSwgMHgwYSwgMHg3NjYwLCAweDI2LCAweDI2LCAweDA1fSwKKy8qIDkgUE8zMTMwTkMgLSAodGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpICovCisvKgl7U0VOU09SX1BPMzEzME5DLCAgIDB4ODAgfCAweDc2LCAweDAwLCAweDMxMzAsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLworLyogMTAgUE8xMDMwS0MgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NmUsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAxMSBNSTEzMTBfU09DICovCisJe1NFTlNPUl9NSTEzMTBfU09DLCAweDgwIHwgMHg1ZCwgMHgwMCwgMHgxNDNhLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDEyIE9WOTY1MCAqLworCXstMSwJCSAgICAweDgwIHwgMHgzMCwgMHgwYSwgMHgwMDAwLCAweDI1LCAweDI0LCAweDA1fSwKKy8qIDEzIFM1SzUzMiAqLworCXstMSwJCSAgICAweDgwIHwgMHgxMSwgMHgzOSwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDE0IE1JMzYwX1NPQyAtID8/PyAqLworLyogMTUgUE8xMjAwTiAqLworCXtTRU5TT1JfUE8xMjAwLCAgICAgMHg4MCB8IDB4NWMsIDB4MDAsIDB4MTIwMCwgMHg2NywgMHg2NywgMHgwMX0sCisvKiAxNiA/PyAqLworCXstMSwJCSAgICAweDgwIHwgMHgyZCwgMHgwMCwgMHgwMDAwLCAweDY1LCAweDY3LCAweDAxfSwKKy8qIDE3IFBPMjAzMCAqLworCXstMSwJCSAgICAweDgwIHwgMHg2ZSwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qID8/ICovCiAJey0xLAkJICAgIDB4ODAgfCAweDU2LCAweDAxLCAweDAwMDAsIDB4NjQsIDB4NjcsIDB4MDF9LAogCXtTRU5TT1JfTUkxMzIwX1NPQywgMHg4MCB8IDB4NDgsIDB4MDAsIDB4MTQ4YywgMHg2NCwgMHg2NywgMHgwMX0sCi0vKmZpeG1lOiBwcmV2aW91c2x5IGRldGVjdGVkPyovCi0Je1NFTlNPUl9NSTEzMjAsICAgICAweDgwIHwgMHg0OCwgMHgwMCwgMHgxNDhjLCAweDY0LCAweDY1LCAweDAxfSwKLS8qZml4bWU6IG5vdCBpbiB0aGUgbXMtd2luIHByb2JlIC0gbWF5IGJlIGZvdW5kIGJlZm9yZT8qLworLypmaXhtZTogbm90IGluIHRoZSBtcy13aW4gcHJvYmUgLSBtYXkgYmUgZm91bmQgYmVmb3JlPyAqLwogCXtTRU5TT1JfT1Y3NjcwLCAgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4NzY3MywgMHg2NiwgMHg2NywgMHgwNX0sCiB9OwogCkBAIC0yNTIwLDcgKzI5MTYsNyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7Ci0JaW50IGk7CisJaW50IGksIG47CiAJdTE2IHZhbHVlOwogCWNvbnN0IHN0cnVjdCBzZW5zb3JfaW5mbyAqcHRzZW5zb3JfaW5mbzsKIApAQCAtMjUzMSw5ICsyOTI3LDE2IEBACiAJfQogCiAJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGJmY2YsIDEpOwotCVBERUJVRyhEX1BST0JFLCAiY2hlY2sgc2Vuc29yIGhlYWRlciAlMDJ4IiwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZW5zb3JfaW5mb19kYXRhKTsgaSsrKSB7Ci0JCXB0c2Vuc29yX2luZm8gPSAmc2Vuc29yX2luZm9fZGF0YVtpXTsKKwlQREVCVUcoRF9QUk9CRSwgInZjMDMyJWQgY2hlY2sgc2Vuc29yIGhlYWRlciAlMDJ4IiwKKwkJc2QtPmJyaWRnZSA9PSBCUklER0VfVkMwMzIxID8gMSA6IDMsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CisJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1ZDMDMyMSkgeworCQlwdHNlbnNvcl9pbmZvID0gdmMwMzIxX3Byb2JlX2RhdGE7CisJCW4gPSBBUlJBWV9TSVpFKHZjMDMyMV9wcm9iZV9kYXRhKTsKKwl9IGVsc2UgeworCQlwdHNlbnNvcl9pbmZvID0gdmMwMzIzX3Byb2JlX2RhdGE7CisJCW4gPSBBUlJBWV9TSVpFKHZjMDMyM19wcm9iZV9kYXRhKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogCQlyZWdfdyhkZXYsIDB4YTAsIDB4MDIsIDB4YjMzNCk7CiAJCXJlZ193KGRldiwgMHhhMCwgcHRzZW5zb3JfaW5mby0+bTEsIDB4YjMwMCk7CiAJCXJlZ193KGRldiwgMHhhMCwgcHRzZW5zb3JfaW5mby0+bTIsIDB4YjMwMCk7CkBAIC0yNTUxLDEzICsyOTU0LDE1IEBACiAJCQkJcmV0dXJuIHB0c2Vuc29yX2luZm8tPnNlbnNvcklkOwogCiAJCQlzd2l0Y2ggKHZhbHVlKSB7CisJCQljYXNlIDB4MzEzMDoKKwkJCQlyZXR1cm4gU0VOU09SX1BPMzEzME5DOwogCQkJY2FzZSAweDc2NzM6CiAJCQkJcmV0dXJuIFNFTlNPUl9PVjc2NzA7CiAJCQljYXNlIDB4ODI0MzoKIAkJCQlyZXR1cm4gU0VOU09SX01JMDM2MDsKIAkJCX0KLS8qZml4bWU6IHNob3VsZCByZXR1cm4gaGVyZSovCiAJCX0KKwkJcHRzZW5zb3JfaW5mbysrOwogCX0KIAlyZXR1cm4gLTE7CiB9CkBAIC0yNjE5LDcgKzMwMjQsNyBAQAogCQkJaTJjX3dyaXRlKGdzcGNhX2RldiwgZGF0YVtpXVswXSwgJmRhdGFbaV1bMV0sIDIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHhkZDoKLQkJCW1zbGVlcChkYXRhW2ldWzJdICsgMTApOworCQkJbXNsZWVwKGRhdGFbaV1bMV0gKiAyNTYgKyBkYXRhW2ldWzJdICsgMTApOwogCQkJYnJlYWs7CiAJCX0KIAkJaSsrOwpAQCAtMjY0NiwxMiArMzA1MSwxNyBAQAogCQk2NCwJCS8qIE9WNzY3MCA2ICovCiAJCTEyOCwJCS8qIFBPMTIwMCA3ICovCiAJCTEyOCwJCS8qIFBPMzEzME5DIDggKi8KKwkJMTI4LAkJLyogUE94eHh4IDkgKi8KIAl9OwogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCXNkLT5icmlkZ2UgPSBpZC0+ZHJpdmVyX2luZm8gPj4gODsKIAlzZC0+ZmxhZ3MgPSBpZC0+ZHJpdmVyX2luZm8gJiAweGZmOwotCXNlbnNvciA9IHZjMDMyeF9wcm9iZV9zZW5zb3IoZ3NwY2FfZGV2KTsKKwlpZiAoaWQtPmlkVmVuZG9yID09IDB4MDQ2ZCAmJgorCSAgICAoaWQtPmlkUHJvZHVjdCA9PSAweDA4OTIgfHwgaWQtPmlkUHJvZHVjdCA9PSAweDA4OTYpKQorCQlzZW5zb3IgPSBTRU5TT1JfUE94eHh4OworCWVsc2UKKwkJc2Vuc29yID0gdmMwMzJ4X3Byb2JlX3NlbnNvcihnc3BjYV9kZXYpOwogCXN3aXRjaCAoc2Vuc29yKSB7CiAJY2FzZSAtMToKIAkJUERFQlVHKERfUFJPQkUsICJVbmtub3duIHNlbnNvci4uLiIpOwpAQCAtMjY4NCw2ICszMDk0LDkgQEAKIAljYXNlIFNFTlNPUl9QTzMxMzBOQzoKIAkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBQTzMxMzBOQyIpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9QT3h4eHg6CisJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIFBPeHh4eCIpOworCQlicmVhazsKIAl9CiAJc2QtPnNlbnNvciA9IHNlbnNvcjsKIApAQCAtMjcxMiwyNyArMzEyNSwxOCBAQAogCX0KIAljYW0tPm5wa3QgPSBucGt0W3NkLT5zZW5zb3JdOwogCisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJc2QtPmNvbG9ycyA9IENPTE9SX0RFRjsKIAlzZC0+aGZsaXAgPSBIRkxJUF9ERUY7CiAJc2QtPnZmbGlwID0gVkZMSVBfREVGOworCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKKwlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKKworCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSBjdHJsX2Rpc1tzZC0+c2Vuc29yXTsKKwogCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc2NzApCiAJCXNkLT5mbGFncyB8PSBGTF9IRkxJUCB8IEZMX1ZGTElQOwotCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKLQlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfT1Y3NjcwKQotCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgTElHSFRGUkVRX0lEWCk7Ci0Jc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfTUkxMzEwX1NPQzoKLQljYXNlIFNFTlNPUl9NSTEzMjBfU09DOgotCWNhc2UgU0VOU09SX09WNzY2MDoKLQljYXNlIFNFTlNPUl9PVjc2NzA6Ci0JY2FzZSBTRU5TT1JfUE8xMjAwOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgSEZMSVBfSURYKQotCQkJCQl8ICgxIDw8IFZGTElQX0lEWCk7Ci0JCWJyZWFrOwotCX0KLQotCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOwogCiAJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1ZDMDMyMSkgewogCQlyZWdfcihnc3BjYV9kZXYsIDB4OGEsIDAsIDMpOwpAQCAtMjc0NywxMCArMzE1MSw1NSBAQAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QT3h4eHgpIHsKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzMDAsIDEpOworCQlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdICE9IDApIHsKKwkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDI2LCAweGIzMDApOworCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4MDQsIDB4YjMwMCk7CisJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgwMCwgMHhiMzAwKTsKKwkJfQorCX0KIAlyZXR1cm4gMDsKIH0KIAotLyogc29tZSBzZW5zb3JzIG9ubHkgKi8KK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBkYXRhOworCisJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBCUklHSFRORVNTX0lEWCkpCisJCXJldHVybjsKKwlkYXRhID0gc2QtPmJyaWdodG5lc3M7CisJaWYgKGRhdGEgPj0gMHg4MCkKKwkJZGF0YSAmPSAweDdmOworCWVsc2UKKwkJZGF0YSA9IDB4ZmYgXiBkYXRhOworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4OTgsICZkYXRhLCAxKTsKK30KKworc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQ09OVFJBU1RfSURYKSkKKwkJcmV0dXJuOworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4OTksICZzZC0+Y29udHJhc3QsIDEpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBkYXRhOworCisJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBDT0xPUlNfSURYKSkKKwkJcmV0dXJuOworCWRhdGEgPSBzZC0+Y29sb3JzIC0gKHNkLT5jb2xvcnMgPj4gMykgLSAxOworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4OTQsICZkYXRhLCAxKTsKKwlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDk1LCAmc2QtPmNvbG9ycywgMSk7Cit9CisKIHN0YXRpYyB2b2lkIHNldGh2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMjc2NCw2ICszMjEzLDcgQEAKIAkJdmZsaXAgPSAhdmZsaXA7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfTUkxMzEwX1NPQzoKKwljYXNlIFNFTlNPUl9NSTEzMjA6CiAJY2FzZSBTRU5TT1JfTUkxMzIwX1NPQzoKIAkJZGF0YVswXSA9IGRhdGFbMV0gPSAwOwkJLyogc2VsZWN0IHBhZ2UgMCAqLwogCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweGYwLCBkYXRhLCAyKTsKQEAgLTI4MDEsMTggKzMyNTEsMjkgQEAKIAl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBvdjc2NjBfZnJlcV90YltzZC0+bGlnaHRmcmVxXSk7CiB9CiAKLS8qIHBvMTIwMCBvbmx5ICovCiBzdGF0aWMgdm9pZCBzZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAl1OCBkYXRhOwogCi0JaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX1BPMTIwMCkKLQkJcmV0dXJuOwotCWRhdGEgPSAwOwotCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MDMsICZkYXRhLCAxKTsKLQlkYXRhID0gMHhiNSArIHNkLT5zaGFycG5lc3MgKiAzOwotCWkyY193cml0ZShnc3BjYV9kZXYsIDB4NjEsICZkYXRhLCAxKTsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9QTzEyMDA6CisJCWRhdGEgPSAwOworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAzLCAmZGF0YSwgMSk7CisJCWlmIChzZC0+c2hhcnBuZXNzIDwgMCkKKwkJCWRhdGEgPSAweDZhOworCQllbHNlCisJCQlkYXRhID0gMHhiNSArIHNkLT5zaGFycG5lc3MgKiAzOworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDYxLCAmZGF0YSwgMSk7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1BPeHh4eDoKKwkJaWYgKHNkLT5zaGFycG5lc3MgPCAwKQorCQkJZGF0YSA9IDB4N2U7CS8qIGRlZiA9IG1heCAqLworCQllbHNlCisJCQlkYXRhID0gMHg2MCArIHNkLT5zaGFycG5lc3MgKiAweDBmOworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDU5LCAmZGF0YSwgMSk7CisJCWJyZWFrOworCX0KIH0KIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC0yOTIyLDEyICszMzgzLDI3IEBACiAJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIGluaXQpOwogCQlpbml0ID0gcG8zMTMwX3J1bmRhdGE7CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0vKgljYXNlIFNFTlNPUl9QTzEyMDA6ICovCisJY2FzZSBTRU5TT1JfUE8xMjAwOgogCQlHYW1tYVQgPSBwbzEyMDBfZ2FtbWE7CiAJCU1hdHJpeFQgPSBwbzEyMDBfbWF0cml4OwogCQlpbml0ID0gcG8xMjAwX2luaXRWR0FfZGF0YTsKIAkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgU0VOU09SX1BPeHh4eDogKi8KKwkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG94eHh4X2luaXRfY29tbW9uKTsKKwkJaWYgKG1vZGUpCisJCQlpbml0ID0gcG94eHh4X2luaXRRVkdBOworCQllbHNlCisJCQlpbml0ID0gcG94eHh4X2luaXRWR0E7CisJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIGluaXQpOworCQlyZWdfcihnc3BjYV9kZXYsIDB4OGMsIDB4MDAwMCwgMyk7CisJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLAorCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlsyXSAmIDEgPyAwIDogMSwKKwkJCQkweGIzNWMpOworCQltc2xlZXAoMzAwKTsKKy8qZml4bWU6IGkyYyByZWFkIDA0IGFuZCAwNSovCisJCWluaXQgPSBwb3h4eHhfaW5pdF9lbmRfMTsKKwkJYnJlYWs7CiAJfQogCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIGluaXQpOwogCWlmIChHYW1tYVQgJiYgTWF0cml4VCkgewpAQCAtMjkzNiw3ICszNDEyLDYgQEAKIAkJcHV0X3RhYl90b19yZWcoZ3NwY2FfZGV2LCBHYW1tYVQsIDE3LCAweGI4NmMpOwogCQlwdXRfdGFiX3RvX3JlZyhnc3BjYV9kZXYsIE1hdHJpeFQsIDksIDB4YjgyYyk7CiAKLQkJLyogc2V0IHRoZSBsZWQgb24gMHgwODkyIDB4MDg5NiAqLwogCQlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAkJY2FzZSBTRU5TT1JfUE8xMjAwOgogCQljYXNlIFNFTlNPUl9IVjcxMzFSOgpAQCAtMjk0NSwxNiArMzQyMCwyMiBAQAogCQljYXNlIFNFTlNPUl9NSTEzMTBfU09DOgogCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4ODksIDB4MDU4YywgMHgwMDAwKTsKIAkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaWYgKCEoc2QtPmZsYWdzICYgRkxfU0FNU1VORykpCi0JCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4ODksIDB4ZmZmZiwgMHhmZGZmKTsKLQkJCWJyZWFrOwogCQl9CiAJCW1zbGVlcCgxMDApOwogCQlzZXRzaGFycG5lc3MoZ3NwY2FfZGV2KTsKIAkJc2V0aHZmbGlwKGdzcGNhX2Rldik7CiAJCXNldGxpZ2h0ZnJlcShnc3BjYV9kZXYpOwogCX0KKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfUE94eHh4KSB7CisJCXNldGNvbG9ycyhnc3BjYV9kZXYpOworCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisKKwkJLyogbGVkIG9uICovCisJCW1zbGVlcCg4MCk7CisJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDg5LCAweGZmZmYsIDB4ZmRmZik7CisJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHBveHh4eF9pbml0X2VuZF8yKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5NjMsMTAgKzM0NDQsMTcgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX01JMTMxMF9TT0MpCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfTUkxMzEwX1NPQzoKIAkJcmVnX3coZGV2LCAweDg5LCAweDA1OGMsIDB4MDBmZik7Ci0JZWxzZSBpZiAoIShzZC0+ZmxhZ3MgJiBGTF9TQU1TVU5HKSkKLQkJcmVnX3coZGV2LCAweDg5LCAweGZmZmYsIDB4ZmZmZik7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1BPeHh4eDoKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWlmICghKHNkLT5mbGFncyAmIEZMX1NBTVNVTkcpKQorCQkJcmVnX3coZGV2LCAweDg5LCAweGZmZmYsIDB4ZmZmZik7CisJCWJyZWFrOworCX0KIAlyZWdfdyhkZXYsIDB4YTAsIDB4MDEsIDB4YjMwMSk7CiAJcmVnX3coZGV2LCAweGEwLCAweDA5LCAweGIwMDMpOwogfQpAQCAtMjk4NCw2ICszNDcyLDEyIEBACiAJCXJlZ193KGRldiwgMHg4OSwgMHgwNThjLCAweDAwZmYpOwogCWVsc2UgaWYgKCEoc2QtPmZsYWdzICYgRkxfU0FNU1VORykpCiAJCXJlZ193KGRldiwgMHg4OSwgMHhmZmZmLCAweGZmZmYpOworCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BPeHh4eCkgeworCQlyZWdfdyhkZXYsIDB4YTAsIDB4MjYsIDB4YjMwMCk7CisJCXJlZ193KGRldiwgMHhhMCwgMHgwNCwgMHhiMzAwKTsKKwkJcmVnX3coZGV2LCAweGEwLCAweDAwLCAweGIzMDApOworCX0KIH0KIAogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LApAQCAtMzAyMCw2ICszNTE0LDYwIEBACiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBsZW4pOwogfQogCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmJyaWdodG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5icmlnaHRuZXNzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb250cmFzdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29udHJhc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb2xvcnMgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29sb3JzOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNkX3NldGhmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYwppbmRleCAxYTgwMGZjLi41MDk4NmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCkBAIC0xLDkgKzEsOCBAQAogLyoKLSAqCVotU3Rhci9WaW1pY3JvIHpjMzAxL3pjMzAycC92YzMweCBsaWJyYXJ5Ci0gKglDb3B5cmlnaHQgKEMpIDIwMDQgMjAwNSAyMDA2IE1pY2hlbCBYaGFhcmQKLSAqCQlteGhhYXJkQG1hZ2ljLmZyCisgKiBaLVN0YXIvVmltaWNybyB6YzMwMS96YzMwMnAvdmMzMHggbGlicmFyeQogICoKLSAqIFY0TDIgYnkgSmVhbi1GcmFuY29pcyBNb2luZSA8aHR0cDovL21vaW5lamYuZnJlZS5mcj4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgMjAwNSAyMDA2IE1pY2hlbCBYaGFhcmQgbXhoYWFyZEBtYWdpYy5mcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjIsMTAgKzIxLDExIEBACiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInpjM3h4IgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogI2luY2x1ZGUgImpwZWcuaCIKIAotTU9EVUxFX0FVVEhPUigiTWljaGVsIFhoYWFyZCA8bXhoYWFyZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LCAiCitNT0RVTEVfQVVUSE9SKCJKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPiwgIgogCQkiU2VyZ2UgQS4gU3VjaGtvdiA8U2VyZ2UuQS5TQHRvY2hrYS5ydT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EgWkMwM3h4L1ZDM3h4IFVTQiBDYW1lcmEgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0zOSwxOCArMzksMTggQEAKIHN0cnVjdCBzZCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAotCV9fdTggYnJpZ2h0bmVzczsKLQlfX3U4IGNvbnRyYXN0OwotCV9fdTggZ2FtbWE7Ci0JX191OCBhdXRvZ2FpbjsKLQlfX3U4IGxpZ2h0ZnJlcTsKLQlfX3U4IHNoYXJwbmVzczsKKwl1OCBicmlnaHRuZXNzOworCXU4IGNvbnRyYXN0OworCXU4IGdhbW1hOworCXU4IGF1dG9nYWluOworCXU4IGxpZ2h0ZnJlcTsKKwl1OCBzaGFycG5lc3M7CiAJdTggcXVhbGl0eTsJCQkvKiBpbWFnZSBxdWFsaXR5ICovCiAjZGVmaW5lIFFVQUxJVFlfTUlOIDQwCiAjZGVmaW5lIFFVQUxJVFlfTUFYIDYwCiAjZGVmaW5lIFFVQUxJVFlfREVGIDUwCiAKLQlzaWduZWQgY2hhciBzZW5zb3I7CQkvKiBUeXBlIG9mIGltYWdlIHNlbnNvciBjaGlwICovCisJdTggc2Vuc29yOwkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAqLwogLyogISEgdmFsdWVzIHVzZWQgaW4gZGlmZmVyZW50IHRhYmxlcyAqLwogI2RlZmluZSBTRU5TT1JfQURDTTI3MDAgMAogI2RlZmluZSBTRU5TT1JfQ1MyMTAyIDEKQEAgLTkyLDkgKzkyLDggQEAKIHN0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAjZGVmaW5lIEJSSUdIVE5FU1NfSURYIDAKLSNkZWZpbmUgU0RfQlJJR0hUTkVTUyAwCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTEwMywyNiArMTAyLDI2IEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxMjgsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDEyOAorCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCiAJfSwKLSNkZWZpbmUgU0RfQ09OVFJBU1QgMQogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAogCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lICAgID0gIkNvbnRyYXN0IiwKIAkJLm1pbmltdW0gPSAwLAotCQkubWF4aW11bSA9IDI1NiwKKwkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxMjgsCisjZGVmaW5lIENPTlRSQVNUX0RFRiAxMjgKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF9ERUYsCiAJICAgIH0sCiAJICAgIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkgICAgLmdldCA9IHNkX2dldGNvbnRyYXN0LAogCX0sCi0jZGVmaW5lIFNEX0dBTU1BIDIKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9HQU1NQSwKQEAgLTEzNiw3ICsxMzUsNiBAQAogCSAgICAuc2V0ID0gc2Rfc2V0Z2FtbWEsCiAJICAgIC5nZXQgPSBzZF9nZXRnYW1tYSwKIAl9LAotI2RlZmluZSBTRF9BVVRPR0FJTiAzCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQVVUT0dBSU4sCkBAIC0xNDUsMTMgKzE0MywxMyBAQAogCQkubWluaW11bSA9IDAsCiAJCS5tYXhpbXVtID0gMSwKIAkJLnN0ZXAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisjZGVmaW5lIEFVVE9HQUlOX0RFRiAxCisJCS5kZWZhdWx0X3ZhbHVlID0gQVVUT0dBSU5fREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCiAJICAgIC5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKIAl9LAogI2RlZmluZSBMSUdIVEZSRVFfSURYIDQKLSNkZWZpbmUgU0RfRlJFUSA0CiAJewogCSAgICB7CiAJCS5pZAkgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKQEAgLTE2MCwxMiArMTU4LDEyIEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAyLAkvKiAwOiAwLCAxOiA1MEh6LCAyOjYwSHogKi8KIAkJLnN0ZXAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisjZGVmaW5lIEZSRVFfREVGIDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBGUkVRX0RFRiwKIAkgICAgfSwKIAkgICAgLnNldCA9IHNkX3NldGZyZXEsCiAJICAgIC5nZXQgPSBzZF9nZXRmcmVxLAogCX0sCi0jZGVmaW5lIFNEX1NIQVJQTkVTUyA1CiAJewogCSAgICB7CiAJCS5pZAkgPSBWNEwyX0NJRF9TSEFSUE5FU1MsCkBAIC0xNzQsNyArMTcyLDggQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDMsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAyLAorI2RlZmluZSBTSEFSUE5FU1NfREVGIDIKKwkJLmRlZmF1bHRfdmFsdWUgPSBTSEFSUE5FU1NfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0c2hhcnBuZXNzLAogCSAgICAuZ2V0ID0gc2RfZ2V0c2hhcnBuZXNzLApAQCAtMTk0LDYgKzE5MywxOSBAQAogCQkucHJpdiA9IDB9LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgYnJva2VuX3ZnYV9tb2RlW10gPSB7CisJezMyMCwgMjMyLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjMyICogNCAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMX0sCisJezY0MCwgNDcyLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDcyICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMH0sCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzaWZfbW9kZVtdID0gewogCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE3NiwKQEAgLTIwOSw5ICsyMjEsOSBAQAogCiAvKiB1c2IgZXhjaGFuZ2VzICovCiBzdHJ1Y3QgdXNiX2FjdGlvbiB7Ci0JX191OAlyZXE7Ci0JX191OAl2YWw7Ci0JX191MTYJaWR4OworCXU4CXJlcTsKKwl1OAl2YWw7CisJdTE2CWlkeDsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBhZGNtMjcwMF9Jbml0aWFsW10gPSB7CkBAIC00MjEsNyArNDMzLDcgQEAKIAl7MHhhYSwgMHhmZSwgMHgwMDEwfSwJCQkJLyogMDAsZmUsMTAsYWEgKi8KIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfSW5pdGlhbFtdID0gewkvKiAzMjB4MjQwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyX0luaXRpYWxTY2FsZVtdID0gewkvKiAzMjB4MjQwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LApAQCAtNDczLDcgKzQ4NSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDY0MHg0ODAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfSW5pdGlhbFtdID0gewkvKiA2NDB4NDgwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LApAQCAtNTI0LDcgKzUzNiw3IEBACiAJezB4YTAsIDB4MDAsIDB4MDFhZH0sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzUwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfNTBIWlNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCiAJezB4YWEsIDB4MjMsIDB4MDAwMX0sCiAJezB4YWEsIDB4MjQsIDB4MDA1Zn0sCkBAIC01NDYsNyArNTU4LDcgQEAKIAl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfNTBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzUwSFpbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKIAl7MHhhYSwgMHgyMywgMHgwMDAwfSwKIAl7MHhhYSwgMHgyNCwgMHgwMGFmfSwKQEAgLTU2OCw3ICs1ODAsNyBAQAogCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl82MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzYwSFpTY2FsZVtdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAogCXsweGFhLCAweDIzLCAweDAwMDF9LAogCXsweGFhLCAweDI0LCAweDAwNTV9LApAQCAtNTkwLDcgKzYwMiw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzYwSFpTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl82MEhaW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCiAJezB4YWEsIDB4MjMsIDB4MDAwMH0sCiAJezB4YWEsIDB4MjQsIDB4MDBhYX0sCkBAIC02MTIsNyArNjI0LDcgQEAKIAl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfTm9GbGlrZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfTm9GbGlrZXJTY2FsZVtdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAogCXsweGFhLCAweDIzLCAweDAwMDF9LAogCXsweGFhLCAweDI0LCAweDAwNWZ9LApAQCAtNjM0LDcgKzY0Niw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyX05vRmxpa2VyU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfTm9GbGlrZXJbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKIAl7MHhhYSwgMHgyMywgMHgwMDAwfSwKIAl7MHhhYSwgMHgyNCwgMHgwMGFmfSwKQEAgLTY1OCw3ICs2NzAsNyBAQAogfTsKIAogLyogQ1MyMTAyX0tPQ09NICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyS19Jbml0aWFsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyS19Jbml0aWFsU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgxMSwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKQEAgLTkxNyw3ICs5MjksNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyS19Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJLX0luaXRpYWxbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKQEAgLTE0OTUsNyArMTUwNyw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBoZGNzMjAyMHhiX0luaXRpYWxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBoZGNzMjAyMGJfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MTEsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIHF0YWJsZSAweDA1ICovCkBAIC0xNjI3LDcgKzE2MzksNyBAQAogCXsweGEwLCAweDQwLCBaQzNYWF9SMTE4X0JHQUlOfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBoZGNzMjAyMHhiX0luaXRpYWxTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGhkY3MyMDIwYl9Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCkBAIC0xODE5LDcgKzE4MzEsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxYnh4X0luaXRpYWxbXSA9IHsJCS8qIDMyMHgyNDAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFiX0luaXRpYWxTY2FsZVtdID0gewkvKiAzMjB4MjQwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LApAQCAtMTg2Niw3ICsxODc4LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMWJ4eF9Jbml0aWFsU2NhbGVbXSA9IHsJLyogNjQweDQ4MCovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxYl9Jbml0aWFsW10gPSB7CS8qIDY0MHg0ODAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKQEAgLTIwNjMsNyArMjA3NSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFjeHhfSW5pdGlhbFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMXJfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LApAQCAtMjE1Nyw3ICsyMTY5LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMWN4eF9Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFyX0luaXRpYWxbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwJLyogZGlmZiAqLwpAQCAtMjI1OSw3ICsyMjcxLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWF4eF9Jbml0aWFsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV9Jbml0aWFsU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKQEAgLTI0MzYsNyArMjQ0OCw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVheHhfSW5pdGlhbFNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV9Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCkBAIC0yNjE1LDcgKzI2MjcsNyBAQAogCXsweGEwLCAweDQwLCBaQzNYWF9SMTE4X0JHQUlOfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzUwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzUwSFpTY2FsZVtdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLwogCXsweGFhLCAweDBkLCAweDAwMDN9LCAvKiAwMCwwZCwwMyxhYSAqLwogCXsweGFhLCAweDBjLCAweDAwMjB9LCAvKiAwMCwwYywyMCxhYSAqLwpAQCAtMjY0Niw3ICsyNjU4LDcgQEAKIAl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwgLyogMDAsMjAsZmYsY2MgKi8KIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzUwSFpTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfNTBIWltdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLwogCXsweGFhLCAweDBkLCAweDAwMDN9LCAvKiAwMCwwZCwwMyxhYSAqLwogCXsweGFhLCAweDBjLCAweDAwOGN9LCAvKiAwMCwwYyw4YyxhYSAqLwpAQCAtMjY3OSw3ICsyNjkxLDcgQEAKIAl7MHhhMCwgMHhjMCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sIC8qIDAxLGE4LGMwLGNjICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV82MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV82MEhaU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KIAl7MHhhYSwgMHgwYywgMHgwMDA0fSwgLyogMDAsMGMsMDQsYWEgKi8KQEAgLTI3MTAsNyArMjcyMiw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sIC8qIDAwLDIwLGZmLGNjICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV82MEhaU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzYwSFpbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KIAl7MHhhYSwgMHgwYywgMHgwMDA4fSwgLyogMDAsMGMsMDgsYWEgKi8KQEAgLTI3NDMsNyArMjc1NSw3IEBACiAJezB4YTAsIDB4YzAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LCAvKiAwMSxhOCxjMCxjYyAqLwogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfTm9GbGlrZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhX05vRmxpa2VyU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KIAl7MHhhYSwgMHgwYywgMHgwMDA0fSwgLyogMDAsMGMsMDQsYWEgKi8KQEAgLTI3NzQsNyArMjc4Niw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sIC8qIDAwLDIwLGZmLGNjICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV9Ob0ZsaWtlclNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV9Ob0ZsaWtlcltdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLwogCXsweGFhLCAweDBkLCAweDAwMDN9LCAvKiAwMCwwZCwwMyxhYSAqLwogCXsweGFhLCAweDBjLCAweDAwMDR9LCAvKiAwMCwwYywwNCxhYSAqLwpAQCAtMjgwOCw3ICsyODIwLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfSW5pdGlhbFNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbWM1MDFjYl9Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sIC8qIDAwLDAwLDAxLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LCAvKiAwMCwwMiwwMCxjYyAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LCAvKiAwMCwxMCwwMSxjYyAqLwpAQCAtMjkyOCw3ICsyOTQwLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfSW5pdGlhbFtdID0gewkgLyogMzIweDI0MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfSW5pdGlhbFNjYWxlW10gPSB7CSAvKiAzMjB4MjQwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sIC8qIDAwLDAwLDAxLGNjICovCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LCAvKiAwMCwwMiwxMCxjYyAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LCAvKiAwMCwxMCwwMSxjYyAqLwpAQCAtMzA0Nyw3ICszMDU5LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfNTBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfNTBIWlNjYWxlW10gPSB7CiAJezB4YWEsIDB4MDMsIDB4MDAwM30sIC8qIDAwLDAzLDAzLGFhICovCiAJezB4YWEsIDB4MTAsIDB4MDBmY30sIC8qIDAwLDEwLGZjLGFhICovCiAJezB4YWEsIDB4MzYsIDB4MDAxZH0sIC8qIDAwLDM2LDFELGFhICovCkBAIC0zMDY0LDcgKzMwNzYsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gTUM1MDFDQl81MEhaU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtYzUwMWNiXzUwSFpbXSA9IHsKIAl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KIAl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KIAl7MHhhYSwgMHgzNiwgMHgwMDNhfSwgLyogMDAsMzYsM0EsYWEgKi8KQEAgLTMwODEsNyArMzA5Myw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBNQzUwMUNCXzYwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtYzUwMWNiXzYwSFpTY2FsZVtdID0gewogCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLwogCXsweGFhLCAweDEwLCAweDAwZmN9LCAvKiAwMCwxMCxmYyxhYSAqLwogCXsweGFhLCAweDM2LCAweDAwMTh9LCAvKiAwMCwzNiwxOCxhYSAqLwpAQCAtMzA5OCw3ICszMTEwLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfNjBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbWM1MDFjYl82MEhaW10gPSB7CiAJezB4YWEsIDB4MDMsIDB4MDAwM30sIC8qIDAwLDAzLDAzLGFhICovCiAJezB4YWEsIDB4MTAsIDB4MDBmY30sIC8qIDAwLDEwLGZjLGFhICovCiAJezB4YWEsIDB4MzYsIDB4MDAzMH0sIC8qIDAwLDM2LDMwLGFhICovCkBAIC0zMTE1LDcgKzMxMjcsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gTUM1MDFDQl9Ob0ZsaWtlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfTm9GbGlrZXJTY2FsZVtdID0gewogCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLwogCXsweGFhLCAweDEwLCAweDAwZmN9LCAvKiAwMCwxMCxmYyxhYSAqLwogCXsweGFhLCAweDM2LCAweDAwMTh9LCAvKiAwMCwzNiwxOCxhYSAqLwpAQCAtMzEzMiw3ICszMTQ0LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfTm9GbGlrZXJTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfTm9GbGlrZXJbXSA9IHsKIAl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KIAl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KIAl7MHhhYSwgMHgzNiwgMHgwMDMwfSwgLyogMDAsMzYsMzAsYWEgKi8KQEAgLTMxNDQsOCArMzE1Niw4IEBACiAJe30KIH07CiAKLS8qIGZyb20genMyMTEuaW5mIC0gSEtSLCVPVjc2MjAlLEluaXRpYWwgLSA2NDB4NDgwICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gT1Y3NjIwX21vZGUwW10gPSB7CisvKiBmcm9tIHpzMjExLmluZiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG92NzYyMF9Jbml0aWFsW10gPSB7CS8qIDY0MHg0ODAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwgLyogMDAsMDAsMDEsY2MgKi8KIAl7MHhhMCwgMHg0MCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sIC8qIDAwLDAyLDQwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwgLyogMDAsMDgsMDAsY2MgKi8KQEAgLTMyMTQsOSArMzIyNiw3IEBACiAJezB4YTAsIDB4NTAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LCAvKiAwMSxhOCw1MCxjYyAqLwogCXt9CiB9OwotCi0vKiBmcm9tIHpzMjExLmluZiAtIEhLUiwlT1Y3NjIwJSxJbml0aWFsU2NhbGUgLSAzMjB4MjQwICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gT1Y3NjIwX21vZGUxW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjIwX0luaXRpYWxTY2FsZVtdID0gewkvKiAzMjB4MjQwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sIC8qIDAwLDAwLDAxLGNjICovCiAJezB4YTAsIDB4NTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkvKiAwMCwwMiw1MCxjYyAqLwogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIDAwLDA4LDAwLGNjICovCkBAIC0zMjg3LDkgKzMyOTcsNyBAQAogCXsweGEwLCAweDUwLCBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOfSwJLyogMDEsYTgsNTAsY2MgKi8KIAl7fQogfTsKLQotLyogZnJvbSB6czIxMS5pbmYgLSBIS1IsJU9WNzYyMCVcQUUsNTBIWiAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE9WNzYyMF81MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjIwXzUwSFpbXSA9IHsKIAl7MHhhYSwgMHgxMywgMHgwMGEzfSwJLyogMDAsMTMsYTMsYWEgKi8KIAl7MHhkZCwgMHgwMCwgMHgwMTAwfSwJLyogMDAsMDEsMDAsZGQgKi8KIAl7MHhhYSwgMHgyYiwgMHgwMDk2fSwJLyogMDAsMmIsOTYsYWEgKi8KQEAgLTMzMDcsOSArMzMxNSw3IEBACiAJCQkJCQkJIGlmIG1vZGUwICg2NDB4NDgwKSAqLwogCXt9CiB9OwotCi0vKiBmcm9tIHpzMjExLmluZiAtIEhLUiwlT1Y3NjIwJVxBRSw2MEhaICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gT1Y3NjIwXzYwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBvdjc2MjBfNjBIWltdID0gewogCXsweGFhLCAweDEzLCAweDAwYTN9LAkJCS8qIDAwLDEzLGEzLGFhICovCiAJCQkJCQkvKiAoYnVnIGluIHpzMjExLmluZikgKi8KIAl7MHhkZCwgMHgwMCwgMHgwMTAwfSwJCQkvKiAwMCwwMSwwMCxkZCAqLwpAQCAtMzMzMSw5ICszMzM3LDcgQEAKIAl7MHhhMSwgMHgwMSwgMHgwMDM3fSwJCSovCiAJe30KIH07Ci0KLS8qIGZyb20genMyMTEuaW5mIC0gSEtSLCVPVjc2MjAlXEFFLE5vRmxpa2VyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gT1Y3NjIwX05vRmxpa2VyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjIwX05vRmxpa2VyW10gPSB7CiAJezB4YWEsIDB4MTMsIDB4MDBhM30sCQkJLyogMDAsMTMsYTMsYWEgKi8KIAkJCQkJCS8qIChidWcgaW4genMyMTEuaW5mKSAqLwogCXsweGRkLCAweDAwLCAweDAxMDB9LAkJCS8qIDAwLDAxLDAwLGRkICovCkBAIC0zMzU0LDcgKzMzNTgsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjMwY19Jbml0aWFsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjMwY19Jbml0aWFsU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCkBAIC0zNTExLDcgKzM1MTUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjMwY19Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBvdjc2MzBjX0luaXRpYWxbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKQEAgLTM2ODIsNyArMzY4Niw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYXMxMDZiX0luaXRpYWxbXSA9IHsJLyogMTc2eDE0NCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczEwNmJfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDE3NngxNDQgKi8KIC8qIEpQRUcgY29udHJvbCAqLwogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCiAvKiBTcmVhbSBhbmQgU2Vuc29yIHNwZWNpZmljICovCkBAIC0zODAwLDcgKzM4MDQsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMTA2Yl9Jbml0aWFsU2NhbGVbXSA9IHsJLyogMzUyeDI4OCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczEwNmJfSW5pdGlhbFtdID0gewkvKiAzNTJ4Mjg4ICovCiAvKiBKUEVHIGNvbnRyb2wgKi8KIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAogLyogU3JlYW0gYW5kIFNlbnNvciBzcGVjaWZpYyAqLwpAQCAtMzk3MiwxMCArMzk3NiwxMCBAQAogCXt9CiB9OwogCi0vKiBmcm9tIHVzYnZtMzFiLmluZiAqLworLyogZnJvbSBsdldJTXYuaW5mIDA0NmQ6MDhhMi86MDhhYSAyMDA3LzA2LzAzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMjAyYl9Jbml0aWFsW10gPSB7CS8qIDY0MHg0ODAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJCS8qIDAwLDAwLDAxLGNjICovCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJCS8qIDAwLDA4LDAwLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKIAl7MHhhMCwgMHgwZSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGUsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCQkvKiAwMCwwMiwwMCxjYyAqLwogCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwJLyogMDAsMDMsMDIsY2MgKi8KQEAgLTQwMDAsNyArNDAwNCw3IEBACiAJezB4YWEsIDB4MDksIDB4MDAwNn0sCQkJCS8qIDAwLDA5LDA2LGFhICovCiAJezB4YWEsIDB4MGEsIDB4MDAwMX0sCQkJCS8qIDAwLDBhLDAxLGFhICovCiAJezB4YWEsIDB4MGIsIDB4MDAwMX0sCQkJCS8qIDAwLDBiLDAxLGFhICovCi0JezB4YWEsIDB4MGMsIDB4MDAwOH0sCQkJCS8qIDAwLDBjLDA4LGFhICovCisJezB4YWEsIDB4MGMsIDB4MDAwNn0sCiAJezB4YWEsIDB4MGQsIDB4MDAwMH0sCQkJCS8qIDAwLDBkLDAwLGFhICovCiAJezB4YWEsIDB4MTAsIDB4MDAwMH0sCQkJCS8qIDAwLDEwLDAwLGFhICovCiAJezB4YWEsIDB4MTIsIDB4MDAwNX0sCQkJCS8qIDAwLDEyLDA1LGFhICovCkBAIC00MDE5LDEzICs0MDIzLDEzIEBACiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczIwMmJfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDMyMHgyNDAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJCS8qIDAwLDAwLDAxLGNjICovCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJCS8qIDAwLDA4LDAwLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKIAl7MHhhMCwgMHgwZSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGUsY2MgKi8KIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCQkvKiAwMCwwMiwxMCxjYyAqLwogCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwJLyogMDAsMDMsMDIsY2MgKi8KIAl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwJCS8qIDAwLDA0LDgwLGNjICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwJLyogMDAsMDUsMDEsY2MgKi8KLQl7MHhhMCwgMHhkMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCS8qIDAwLDA2LGQwLGNjICovCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCS8qIDAwLDAxLDAxLGNjICovCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAzLGNjICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAxLGNjICovCkBAIC00MDM1LDcgKzQwMzksNyBAQAogCXsweGEwLCAweDA4LCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCQkvKiAwMSwxYSwwOCxjYyAqLwogCXsweGEwLCAweDAyLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCQkvKiAwMSwxYywwMixjYyAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDlCX1dJTkhFSUdIVEhJR0h9LAkJLyogMDAsOWIsMDEsY2MgKi8KLQl7MHhhMCwgMHhkOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAkJLyogMDAsOWMsZDgsY2MgKi8KKwl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAogCXsweGEwLCAweDAyLCBaQzNYWF9SMDlEX1dJTldJRFRISElHSH0sCQkvKiAwMCw5ZCwwMixjYyAqLwogCXsweGEwLCAweDg4LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwJCS8qIDAwLDllLDg4LGNjICovCiAJezB4YWEsIDB4MDIsIDB4MDAwMn0sCQkJCS8qIDAwLDAyLDAyLGFhICovCkBAIC00MDQ0LDcgKzQwNDgsNyBAQAogCXsweGFhLCAweDA5LCAweDAwMDZ9LAkJCQkvKiAwMCwwOSwwNixhYSAqLwogCXsweGFhLCAweDBhLCAweDAwMDF9LAkJCQkvKiAwMCwwYSwwMSxhYSAqLwogCXsweGFhLCAweDBiLCAweDAwMDF9LAkJCQkvKiAwMCwwYiwwMSxhYSAqLwotCXsweGFhLCAweDBjLCAweDAwMDh9LAkJCQkvKiAwMCwwYywwOCxhYSAqLworCXsweGFhLCAweDBjLCAweDAwMDZ9LAogCXsweGFhLCAweDBkLCAweDAwMDB9LAkJCQkvKiAwMCwwZCwwMCxhYSAqLwogCXsweGFhLCAweDEwLCAweDAwMDB9LAkJCQkvKiAwMCwxMCwwMCxhYSAqLwogCXsweGFhLCAweDEyLCAweDAwMDV9LAkJCQkvKiAwMCwxMiwwNSxhYSAqLwpAQCAtNDA1OSw2ICs0MDYzLDggQEAKIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCS8qIDAyLDUwLDA4LGNjICovCiAJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwJCS8qIDAzLDAxLDA4LGNjICovCiAJezB4YTAsIDB4NzAsIFpDM1hYX1IxOERfWVRBUkdFVH0sCQkvKiAwMSw4ZCw3MCxjYyAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMDk3X1dJTllTVEFSVEhJR0h9LAorCXsweGEwLCAweGZlLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCiAJe30KIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMjAyYl81MEhaW10gPSB7CkBAIC00MDY2LDIyICs0MDcyLDIyIEBACiAJezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCQkvKiAwMCw4NywyMCxjYyAqLwogCXsweGEwLCAweDIxLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAkJLyogMDAsODgsMjEsY2MgKi8KIAl7MHhhYSwgMHgyMCwgMHgwMDAyfSwJCQkJLyogMDAsMjAsMDIsYWEgKi8KLQl7MHhhYSwgMHgyMSwgMHgwMDY4fSwJCQkJLyogMDAsMjEsNjgsYWEgKi8KKwl7MHhhYSwgMHgyMSwgMHgwMDFifSwKIAl7MHhhYSwgMHgwMywgMHgwMDQ0fSwJCQkJLyogMDAsMDMsNDQsYWEgKi8KLQl7MHhhYSwgMHgwNCwgMHgwMDA5fSwJCQkJLyogMDAsMDQsMDksYWEgKi8KLQl7MHhhYSwgMHgwNSwgMHgwMDI4fSwJCQkJLyogMDAsMDUsMjgsYWEgKi8KKwl7MHhhYSwgMHgwNCwgMHgwMDA4fSwKKwl7MHhhYSwgMHgwNSwgMHgwMDFifSwKIAl7MHhhYSwgMHgwZSwgMHgwMDAxfSwJCQkJLyogMDAsMGUsMDEsYWEgKi8KIAl7MHhhYSwgMHgwZiwgMHgwMDAwfSwJCQkJLyogMDAsMGYsMDAsYWEgKi8KLQl7MHhhMCwgMHgxNCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMTQsY2MgKi8KKwl7MHhhMCwgMHgxYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKIAl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwyNCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MgKi8KLQl7MHhhMCwgMHgwNywgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMDcsY2MgKi8KLQl7MHhhMCwgMHhkMiwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsZDIsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHgxYiwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KIAl7MHhhMCwgMHg0ZCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDRkLGNjICovCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MGUsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDFiLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAogCXsweGEwLCAweDQ0LCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDQsY2MgKi8KIAl7MHhhMCwgMHg2ZiwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDZmLGNjICovCiAJezB4YTAsIDB4YWQsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZixhZCxjYyAqLwpAQCAtNDA5NCwyMyArNDEwMCwyMyBAQAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAkJLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhMCwgMHgyMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwJCS8qIDAwLDg3LDIwLGNjICovCiAJezB4YTAsIDB4MjEsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCQkvKiAwMCw4OCwyMSxjYyAqLwotCXsweGFhLCAweDIwLCAweDAwMDJ9LAkJCQkvKiAwMCwyMCwwMixhYSAqLwotCXsweGFhLCAweDIxLCAweDAwNmN9LAkJCQkvKiAwMCwyMSw2YyxhYSAqLworCXsweGFhLCAweDIwLCAweDAwMDR9LAorCXsweGFhLCAweDIxLCAweDAwM2R9LAogCXsweGFhLCAweDAzLCAweDAwNDF9LAkJCQkvKiAwMCwwMyw0MSxhYSAqLwotCXsweGFhLCAweDA0LCAweDAwMDl9LAkJCQkvKiAwMCwwNCwwOSxhYSAqLwotCXsweGFhLCAweDA1LCAweDAwMmN9LAkJCQkvKiAwMCwwNSwyYyxhYSAqLworCXsweGFhLCAweDA0LCAweDAwMTB9LAorCXsweGFhLCAweDA1LCAweDAwM2R9LAogCXsweGFhLCAweDBlLCAweDAwMDF9LAkJCQkvKiAwMCwwZSwwMSxhYSAqLwogCXsweGFhLCAweDBmLCAweDAwMDB9LAkJCQkvKiAwMCwwZiwwMCxhYSAqLwotCXsweGEwLCAweDE0LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAkvKiAwMSxhOSwxNCxjYyAqLworCXsweGEwLCAweDFjLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAogCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIDAxLGFhLDI0LGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwwMCxjYyAqLwotCXsweGEwLCAweDBmLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSwwZixjYyAqLwotCXsweGEwLCAweGJlLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAkvKiAwMSw5MixiZSxjYyAqLworCXsweGEwLCAweDA0LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDNkLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIDAxLDk1LDAwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAkvKiAwMSw5NiwwMCxjYyAqLwogCXsweGEwLCAweDliLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwJLyogMDEsOTcsOWIsY2MgKi8KLQl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCQkvKiAwMSw4YywxMCxjYyAqLwotCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkJLyogMDEsOGYsMjAsY2MgKi8KKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MWIsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCiAJezB4YTAsIDB4NDEsIFpDM1hYX1IwMURfSFNZTkNfMH0sCQkvKiAwMCwxZCw0MSxjYyAqLwogCXsweGEwLCAweDZmLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAkJLyogMDAsMWUsNmYsY2MgKi8KIAl7MHhhMCwgMHhhZCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJCS8qIDAwLDFmLGFkLGNjICovCkBAIC00MTMwLDE2ICs0MTM2LDE2IEBACiAJezB4YWEsIDB4MDUsIDB4MDAwMH0sCQkJCS8qIDAwLDA1LDAwLGFhICovCiAJezB4YWEsIDB4MGUsIDB4MDAwMX0sCQkJCS8qIDAwLDBlLDAxLGFhICovCiAJezB4YWEsIDB4MGYsIDB4MDAwMH0sCQkJCS8qIDAwLDBmLDAwLGFhICovCi0JezB4YTAsIDB4MTQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDE0LGNjICovCisJezB4YTAsIDB4MWMsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCiAJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMjQsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAxLDkwLDAwLGNjICovCi0JezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDAxLDkxLDA3LGNjICovCi0JezB4YTAsIDB4YzAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDAxLDkyLGMwLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMDEsOTUsMDAsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCS8qIDAxLDk2LDAwLGNjICovCiAJezB4YTAsIDB4NDAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAkvKiAwMSw5Nyw0MCxjYyAqLwotCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJCS8qIDAxLDhjLDEwLGNjICovCi0JezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCQkvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDBlLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgxYiwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKIAl7MHhhMCwgMHg0NSwgWkMzWFhfUjAxRF9IU1lOQ18wfSwJCS8qIDAwLDFkLDQ1LGNjICovCiAJezB4YTAsIDB4OGUsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCQkvKiAwMCwxZSw4ZSxjYyAqLwogCXsweGEwLCAweGMxLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAkJLyogMDAsMWYsYzEsY2MgKi8KQEAgLTQxNTIsMjMgKzQxNTgsMjMgQEAKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwJCS8qIDAwLDE5LDAwLGNjICovCiAJezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCQkvKiAwMCw4NywyMCxjYyAqLwogCXsweGEwLCAweDIxLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAkJLyogMDAsODgsMjEsY2MgKi8KLQl7MHhhYSwgMHgyMCwgMHgwMDAyfSwJCQkJLyogMDAsMjAsMDIsYWEgKi8KLQl7MHhhYSwgMHgyMSwgMHgwMDA0fSwJCQkJLyogMDAsMjEsMDQsYWEgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDA0fSwKKwl7MHhhYSwgMHgyMSwgMHgwMDA4fSwKIAl7MHhhYSwgMHgwMywgMHgwMDQyfSwJCQkJLyogMDAsMDMsNDIsYWEgKi8KLQl7MHhhYSwgMHgwNCwgMHgwMDA4fSwJCQkJLyogMDAsMDQsMDgsYWEgKi8KLQl7MHhhYSwgMHgwNSwgMHgwMDA0fSwJCQkJLyogMDAsMDUsMDQsYWEgKi8KKwl7MHhhYSwgMHgwNCwgMHgwMDEwfSwKKwl7MHhhYSwgMHgwNSwgMHgwMDA4fSwKIAl7MHhhYSwgMHgwZSwgMHgwMDAxfSwJCQkJLyogMDAsMGUsMDEsYWEgKi8KIAl7MHhhYSwgMHgwZiwgMHgwMDAwfSwJCQkJLyogMDAsMGYsMDAsYWEgKi8KLQl7MHhhMCwgMHgxNCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMTQsY2MgKi8KKwl7MHhhMCwgMHgxYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKIAl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwyNCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MgKi8KLQl7MHhhMCwgMHgwZiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMGYsY2MgKi8KLQl7MHhhMCwgMHg5ZiwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsOWYsY2MgKi8KKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KIAl7MHhhMCwgMHg4MSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDgxLGNjICovCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MGUsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDFiLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAogCXsweGEwLCAweDQyLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDIsY2MgKi8KIAl7MHhhMCwgMHg2ZiwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDZmLGNjICovCiAJezB4YTAsIDB4YWYsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZixhZixjYyAqLwpAQCAtNDE4MiwyMiArNDE4OCwyMiBAQAogCXsweGEwLCAweDIwLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkJLyogMDAsODcsMjAsY2MgKi8KIAl7MHhhMCwgMHgyMSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJCS8qIDAwLDg4LDIxLGNjICovCiAJezB4YWEsIDB4MjAsIDB4MDAwMn0sCQkJCS8qIDAwLDIwLDAyLGFhICovCi0JezB4YWEsIDB4MjEsIDB4MDAyMH0sCQkJCS8qIDAwLDIxLDIwLGFhICovCisJezB4YWEsIDB4MjEsIDB4MDAwNn0sCiAJezB4YWEsIDB4MDMsIDB4MDA0MH0sCQkJCS8qIDAwLDAzLDQwLGFhICovCiAJezB4YWEsIDB4MDQsIDB4MDAwOH0sCQkJCS8qIDAwLDA0LDA4LGFhICovCi0JezB4YWEsIDB4MDUsIDB4MDAyMH0sCQkJCS8qIDAwLDA1LDIwLGFhICovCisJezB4YWEsIDB4MDUsIDB4MDAwNn0sCiAJezB4YWEsIDB4MGUsIDB4MDAwMX0sCQkJCS8qIDAwLDBlLDAxLGFhICovCiAJezB4YWEsIDB4MGYsIDB4MDAwMH0sCQkJCS8qIDAwLDBmLDAwLGFhICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwwMCxjYyAqLwotCXsweGEwLCAweDA3LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSwwNyxjYyAqLwotCXsweGEwLCAweGYwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAkvKiAwMSw5MixmMCxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIDAxLDk1LDAwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAkvKiAwMSw5NiwwMCxjYyAqLwotCXsweGEwLCAweDAyLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwJLyogMDEsOTcsMDIsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KIAl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDAwLGNjICovCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAogCXsweGEwLCAweDQwLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDAsY2MgKi8KIAl7MHhhMCwgMHg2MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDYwLGNjICovCiAJezB4YTAsIDB4OTAsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZiw5MCxjYyAqLwpAQCAtNDIxMCwyMyArNDIxNiwyMyBAQAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAkJLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhMCwgMHgyMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwJCS8qIDAwLDg3LDIwLGNjICovCiAJezB4YTAsIDB4MjEsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCQkvKiAwMCw4OCwyMSxjYyAqLwotCXsweGFhLCAweDIwLCAweDAwMDJ9LAkJCQkvKiAwMCwyMCwwMixhYSAqLwotCXsweGFhLCAweDIxLCAweDAwMTB9LAkJCQkvKiAwMCwyMSwxMCxhYSAqLworCXsweGFhLCAweDIwLCAweDAwMDR9LAorCXsweGFhLCAweDIxLCAweDAwMGN9LAogCXsweGFhLCAweDAzLCAweDAwNDB9LAkJCQkvKiAwMCwwMyw0MCxhYSAqLwotCXsweGFhLCAweDA0LCAweDAwMDh9LAkJCQkvKiAwMCwwNCwwOCxhYSAqLwotCXsweGFhLCAweDA1LCAweDAwMTB9LAkJCQkvKiAwMCwwNSwxMCxhYSAqLworCXsweGFhLCAweDA0LCAweDAwMTB9LAorCXsweGFhLCAweDA1LCAweDAwMGN9LAogCXsweGFhLCAweDBlLCAweDAwMDF9LAkJCQkvKiAwMCwwZSwwMSxhYSAqLwogCXsweGFhLCAweDBmLCAweDAwMDB9LAkJCQkvKiAwMCwwZiwwMCxhYSAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MgKi8KLQl7MHhhMCwgMHgwZiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMGYsY2MgKi8KLQl7MHhhMCwgMHhmMCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsZjAsY2MgKi8KKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHgwYywgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDAyLGNjICovCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KIAl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDAwLGNjICovCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAogCXsweGEwLCAweDQwLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDAsY2MgKi8KIAl7MHhhMCwgMHg2MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDYwLGNjICovCiAJezB4YTAsIDB4OTAsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZiw5MCxjYyAqLwpAQCAtNDcxMyw4ICs0NzE5LDggQEAKIAl7fQogfTsKIAotLyogZnJvbSBvZW05LmluZiAtIEhLUiwlUE8yMDMwJSxJbml0aWFsIC0gNjQweDQ4MCAtIChjbG9zZSB0byBDUzIxMDIpICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gUE8yMDMwX21vZGUwW10gPSB7CisvKiBmcm9tIG9lbTkuaW5mICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcG8yMDMwX0luaXRpYWxbXSA9IHsJLyogNjQweDQ4MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LCAvKiAwMCwwMCwwMSxjYyAqLwogCXsweGEwLCAweDA0LCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwJLyogMDAsMDIsMDQsY2MgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwgLyogMDAsMTAsMDEsY2MgKi8KQEAgLTQ3OTAsOCArNDc5Niw4IEBACiAJe30KIH07CiAKLS8qIGZyb20gb2VtOS5pbmYgLSBIS1IsJVBPMjAzMCUsSW5pdGlhbFNjYWxlIC0gMzIweDI0MCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIFBPMjAzMF9tb2RlMVtdID0geworLyogZnJvbSBvZW05LmluZiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBvMjAzMF9Jbml0aWFsU2NhbGVbXSA9IHsJLyogMzIweDI0MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LCAvKiAwMCwwMCwwMSxjYyAqLwogCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwgLyogMDAsMDIsMTAsY2MgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwgLyogMDAsMTAsMDEsY2MgKi8KQEAgLTQ4NjcsNyArNDg3Myw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBQTzIwMzBfNTBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBvMjAzMF81MEhaW10gPSB7CiAJezB4YWEsIDB4OGQsIDB4MDAwOH0sIC8qIDAwLDhkLDA4LGFhICovCiAJezB4YWEsIDB4MWEsIDB4MDAwMX0sIC8qIDAwLDFhLDAxLGFhICovCiAJezB4YWEsIDB4MWIsIDB4MDAwYX0sIC8qIDAwLDFiLDBhLGFhICovCkBAIC00ODg5LDcgKzQ4OTUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gUE8yMDMwXzYwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwbzIwMzBfNjBIWltdID0gewogCXsweGFhLCAweDhkLCAweDAwMDh9LCAvKiAwMCw4ZCwwOCxhYSAqLwogCXsweGFhLCAweDFhLCAweDAwMDB9LCAvKiAwMCwxYSwwMCxhYSAqLwogCXsweGFhLCAweDFiLCAweDAwZGV9LCAvKiAwMCwxYixkZSxhYSAqLwpAQCAtNDkxMiw3ICs0OTE4LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIFBPMjAzMF9Ob0ZsaWtlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBvMjAzMF9Ob0ZsaWtlcltdID0gewogCXsweGEwLCAweDAyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwgLyogMDEsODAsMDIsY2MgKi8KIAl7MHhhYSwgMHg4ZCwgMHgwMDBkfSwgLyogMDAsOGQsMGQsYWEgKi8KIAl7MHhhYSwgMHgxYSwgMHgwMDAwfSwgLyogMDAsMWEsMDAsYWEgKi8KQEAgLTQ5MjQsNyArNDkzMCw3IEBACiB9OwogCiAvKiBURVNUICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMENLX0luaXRpYWxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY0tfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDEsIDB4MDAzYn0sCiAJezB4YTAsIDB4MGUsIDB4MDAzYX0sCkBAIC01MTI3LDcgKzUxMzMsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMENLX0luaXRpYWxTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjS19Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDEsIDB4MDAzYn0sCiAJezB4YTAsIDB4MGUsIDB4MDAzYX0sCkBAIC01NTYwLDcgKzU1NjYsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwX0luaXRpYWxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCQkvKiAwMCwwMCwwMSxjYywgKi8KIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkJLyogMDAsMDgsMDIsY2MsICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjLCAqLwpAQCAtNTYyNyw3ICs1NjMzLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF9Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAkJLyogMDAsMDAsMDEsY2MsICovCiAJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJCS8qIDAwLDA4LDAyLGNjLCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYywgKi8KQEAgLTU2OTIsOCArNTY5OCw3IEBACiAJezB4YTAsIDB4NjUsIFpDM1hYX1IxMThfQkdBSU59LAkJLyogMDEsMTgsNjUsY2MgKi8KIAl7fQogfTsKLS8qICI1MEhaIiBsaWdodCBmcmVxdWVuY3kgYmFuZGluZyBmaWx0ZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNTBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF81MEhaU2NhbGVbXSA9IHsKIAl7MHhhYSwgMHg4MiwgMHgwMDAwfSwJCS8qIDAwLDgyLDAwLGFhICovCiAJezB4YWEsIDB4ODMsIDB4MDAwMX0sCQkvKiAwMCw4MywwMSxhYSAqLwogCXsweGFhLCAweDg0LCAweDAwYWF9LAkJLyogMDAsODQsYWEsYWEgKi8KQEAgLTU3MTcsOCArNTcyMiw3IEBACiAJe30KIH07CiAKLS8qICI1MEhaU2NhbGUiIGxpZ2h0IGZyZXF1ZW5jeSBiYW5kaW5nIGZpbHRlciAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF81MEhaU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNTBIWltdID0gewogCXsweGFhLCAweDgyLCAweDAwMDB9LAkJLyogMDAsODIsMDAsYWEgKi8KIAl7MHhhYSwgMHg4MywgMHgwMDAzfSwJCS8qIDAwLDgzLDAzLGFhICovCiAJezB4YWEsIDB4ODQsIDB4MDA1NH0sCQkvKiAwMCw4NCw1NCxhYSAqLwpAQCAtNTc0Miw4ICs1NzQ2LDcgQEAKIAl7fQogfTsKIAotLyogIjYwSFoiIGxpZ2h0IGZyZXF1ZW5jeSBiYW5kaW5nIGZpbHRlciAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF82MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzYwSFpTY2FsZVtdID0gewogCXsweGFhLCAweDgyLCAweDAwMDB9LAkJLyogMDAsODIsMDAsYWEgKi8KIAl7MHhhYSwgMHg4MywgMHgwMDAxfSwJCS8qIDAwLDgzLDAxLGFhICovCiAJezB4YWEsIDB4ODQsIDB4MDA2Mn0sCQkvKiAwMCw4NCw2MixhYSAqLwpAQCAtNTc2Nyw4ICs1NzcwLDcgQEAKIAl7fQogfTsKIAotLyogIjYwSFpTY2FsZSIgbGlnaHQgZnJlcXVlbmN5IGJhbmRpbmcgaWx0ZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNjBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzYwSFpbXSA9IHsKIAl7MHhhYSwgMHg4MiwgMHgwMDAwfSwJCS8qIDAwLDgyLDAwLGFhICovCiAJezB4YWEsIDB4ODMsIDB4MDAwMn0sCQkvKiAwMCw4MywwMixhYSAqLwogCXsweGFhLCAweDg0LCAweDAwYzR9LAkJLyogMDAsODQsYzQsYWEgKi8KQEAgLTU3OTIsOCArNTc5NCw3IEBACiAJe30KIH07CiAKLS8qICJOb0ZsaWtlciIgbGlnaHQgZnJlcXVlbmN5IGJhbmRpbmcgZmx0ZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJTY2FsZVtdID0gewogCXsweGEwLCAweDBjLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkJLyogMDEsMDAsMGMsY2MsICovCiAJezB4YWEsIDB4ODIsIDB4MDAwMH0sCQkvKiAwMCw4MiwwMCxhYSAqLwogCXsweGFhLCAweDgzLCAweDAwMDB9LAkJLyogMDAsODMsMDAsYWEgKi8KQEAgLTU4MTUsOCArNTgxNiw3IEBACiAJe30KIH07CiAKLS8qICJOb0ZsaWtlclNjYWxlIiBsaWdodCBmcmVxdWVuY3kgYmFuZGluZyBmaWx0ZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF9Ob0ZsaWtlcltdID0gewogCXsweGEwLCAweDBjLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkJLyogMDEsMDAsMGMsY2MsICovCiAJezB4YWEsIDB4ODIsIDB4MDAwMH0sCQkvKiAwMCw4MiwwMCxhYSAqLwogCXsweGFhLCAweDgzLCAweDAwMDB9LAkJLyogMDAsODMsMDAsYWEgKi8KQEAgLTU4MzksNyArNTgzOSw3IEBACiB9OwogCiBzdGF0aWMgdTggcmVnX3JfaShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCV9fdTE2IGluZGV4KQorCQl1MTYgaW5kZXgpCiB7CiAJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTU4NTIsNyArNTg1Miw3IEBACiB9CiAKIHN0YXRpYyB1OCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCV9fdTE2IGluZGV4KQorCQl1MTYgaW5kZXgpCiB7CiAJdTggcmV0OwogCkBAIC01ODYyLDggKzU4NjIsOCBAQAogfQogCiBzdGF0aWMgdm9pZCByZWdfd19pKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCi0JCQlfX3U4IHZhbHVlLAotCQkJX191MTYgaW5kZXgpCisJCQl1OCB2YWx1ZSwKKwkJCXUxNiBpbmRleCkKIHsKIAl1c2JfY29udHJvbF9tc2coZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCkBAIC01ODc0LDE4ICs1ODc0LDE4IEBACiB9CiAKIHN0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCi0JCQlfX3U4IHZhbHVlLAotCQkJX191MTYgaW5kZXgpCisJCQl1OCB2YWx1ZSwKKwkJCXUxNiBpbmRleCkKIHsKIAlQREVCVUcoRF9VU0JPLCAicmVnIHcgWyUwNHhdID0gJTAyeCIsIGluZGV4LCB2YWx1ZSk7CiAJcmVnX3dfaShkZXYsIHZhbHVlLCBpbmRleCk7CiB9CiAKLXN0YXRpYyBfX3UxNiBpMmNfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQlfX3U4IHJlZykKK3N0YXRpYyB1MTYgaTJjX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggcmVnKQogewotCV9fdTggcmV0Ynl0ZTsKLQlfX3UxNiByZXR2YWw7CisJdTggcmV0Ynl0ZTsKKwl1MTYgcmV0dmFsOwogCiAJcmVnX3dfaShnc3BjYV9kZXYtPmRldiwgcmVnLCAweDAwOTIpOwogCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIDB4MDIsIDB4MDA5MCk7CQkvKiA8LSByZWFkIGNvbW1hbmQgKi8KQEAgLTU5MDAsMTIgKzU5MDAsMTIgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgX191OCBpMmNfd3JpdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJX191OCByZWcsCi0JCQlfX3U4IHZhbEwsCi0JCQlfX3U4IHZhbEgpCitzdGF0aWMgdTggaTJjX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4IHJlZywKKwkJCXU4IHZhbEwsCisJCQl1OCB2YWxIKQogewotCV9fdTggcmV0Ynl0ZTsKKwl1OCByZXRieXRlOwogCiAJcmVnX3dfaShnc3BjYV9kZXYtPmRldiwgcmVnLCAweDkyKTsKIAlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCB2YWxMLCAweDkzKTsKQEAgLTU5NTcsMjQgKzU5NTcsMjQgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGk7Ci0JY29uc3QgX191OCAqbWF0cml4OworCWNvbnN0IHU4ICptYXRyaXg7CiAJc3RhdGljIGNvbnN0IHU4IGFkY20yNzAwX21hdHJpeFs5XSA9CiAvKgkJezB4NjYsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NjYsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NjZ9OyAqLwogLyptcy13aW4qLwogCQl7MHg3NCwgMHhlZCwgMHhlZCwgMHhlZCwgMHg3NCwgMHhlZCwgMHhlZCwgMHhlZCwgMHg3NH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggZ2MwMzA1X21hdHJpeFs5XSA9CisJc3RhdGljIGNvbnN0IHU4IGdjMDMwNV9tYXRyaXhbOV0gPQogCQl7MHg1MCwgMHhmOCwgMHhmOCwgMHhmOCwgMHg1MCwgMHhmOCwgMHhmOCwgMHhmOCwgMHg1MH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggb3Y3NjIwX21hdHJpeFs5XSA9CisJc3RhdGljIGNvbnN0IHU4IG92NzYyMF9tYXRyaXhbOV0gPQogCQl7MHg1OCwgMHhmNCwgMHhmNCwgMHhmNCwgMHg1OCwgMHhmNCwgMHhmNCwgMHhmNCwgMHg1OH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggcGFzMjAyYl9tYXRyaXhbOV0gPQorCXN0YXRpYyBjb25zdCB1OCBwYXMyMDJiX21hdHJpeFs5XSA9CiAJCXsweDRjLCAweGY1LCAweGZmLCAweGY5LCAweDUxLCAweGY1LCAweGZiLCAweGVkLCAweDVmfTsKLQlzdGF0aWMgY29uc3QgX191OCBwbzIwMzBfbWF0cml4WzldID0KKwlzdGF0aWMgY29uc3QgdTggcG8yMDMwX21hdHJpeFs5XSA9CiAJCXsweDYwLCAweGYwLCAweGYwLCAweGYwLCAweDYwLCAweGYwLCAweGYwLCAweGYwLCAweDYwfTsKIAlzdGF0aWMgY29uc3QgdTggdGFzNTEzMGNfbWF0cml4WzldID0KIAkJezB4NjgsIDB4ZWMsIDB4ZWMsIDB4ZWMsIDB4NjgsIDB4ZWMsIDB4ZWMsIDB4ZWMsIDB4Njh9OwotCXN0YXRpYyBjb25zdCBfX3U4IHZmMDI1MF9tYXRyaXhbOV0gPQorCXN0YXRpYyBjb25zdCB1OCB2ZjAyNTBfbWF0cml4WzldID0KIAkJezB4N2IsIDB4ZWEsIDB4ZWEsIDB4ZWEsIDB4N2IsIDB4ZWEsIDB4ZWEsIDB4ZWEsIDB4N2J9OwotCXN0YXRpYyBjb25zdCBfX3U4ICptYXRyaXhfdGJbU0VOU09SX01BWF0gPSB7CisJc3RhdGljIGNvbnN0IHU4ICptYXRyaXhfdGJbU0VOU09SX01BWF0gPSB7CiAJCWFkY20yNzAwX21hdHJpeCwgLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KIAkJb3Y3NjIwX21hdHJpeCwJLyogU0VOU09SX0NTMjEwMiAxICovCiAJCU5VTEwsCQkvKiBTRU5TT1JfQ1MyMTAySyAyICovCkBAIC02MDA2LDExICs2MDA2LDEyIEBACiBzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191OCBicmlnaHRuZXNzOworCXU4IGJyaWdodG5lc3M7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgorCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCQlyZXR1cm47CiAJfQpAQCAtNjAzNCw3ICs2MDM1LDcgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBzaGFycG5lc3M7Ci0Jc3RhdGljIGNvbnN0IF9fdTggc2hhcnBuZXNzX3RiW11bMl0gPSB7CisJc3RhdGljIGNvbnN0IHU4IHNoYXJwbmVzc190YltdWzJdID0gewogCQl7MHgwMiwgMHgwM30sCiAJCXsweDA0LCAweDA3fSwKIAkJezB4MDgsIDB4MGZ9LApAQCAtNjA1MywxMTggKzYwNTQsNjkgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWNvbnN0IF9fdTggKlRnYW1tYSwgKlRncmFkaWVudDsKLQlpbnQgZywgaSwgazsKLQlzdGF0aWMgY29uc3QgX191OCBrZ2FtbWFfdGJbMTZdID0JLyogZGVsdGEgZm9yIGNvbnRyYXN0ICovCisJY29uc3QgdTggKlRnYW1tYTsKKwlpbnQgZywgaSwgaywgYWRqLCBncDsKKwl1OCBnclsxNl07CisJc3RhdGljIGNvbnN0IHU4IGRlbHRhX3RiWzE2XSA9CQkvKiBkZWx0YSBmb3IgY29udHJhc3QgKi8KIAkJezB4MTUsIDB4MGQsIDB4MGEsIDB4MDksIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsCiAJCSAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4fTsKLQlzdGF0aWMgY29uc3QgX191OCBrZ3JhZF90YlsxNl0gPQotCQl7MHgxYiwgMHgwNiwgMHgwMywgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDYsIDB4MDR9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV8xWzE2XSA9CisJc3RhdGljIGNvbnN0IHU4IGdhbW1hX3RiWzZdWzE2XSA9IHsKIAkJezB4MDAsIDB4MDAsIDB4MDMsIDB4MGQsIDB4MWIsIDB4MmUsIDB4NDUsIDB4NWYsCi0JCSAweDc5LCAweDkzLCAweGFiLCAweGMxLCAweGQ0LCAweGU1LCAweGYzLCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfMVsxNl0gPQotCQl7MHgwMCwgMHgwMSwgMHgwNSwgMHgwYiwgMHgxMCwgMHgxNSwgMHgxOCwgMHgxYSwKLQkJIDB4MWEsIDB4MTgsIDB4MTYsIDB4MTQsIDB4MTIsIDB4MGYsIDB4MGQsIDB4MDZ9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV8yWzE2XSA9CisJCSAweDc5LCAweDkzLCAweGFiLCAweGMxLCAweGQ0LCAweGU1LCAweGYzLCAweGZmfSwKIAkJezB4MDEsIDB4MGMsIDB4MWYsIDB4M2EsIDB4NTMsIDB4NmQsIDB4ODUsIDB4OWMsCi0JCSAweGIwLCAweGMyLCAweGQxLCAweGRlLCAweGU5LCAweGYyLCAweGY5LCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfMlsxNl0gPQotCQl7MHgwNSwgMHgwZiwgMHgxNiwgMHgxYSwgMHgxOSwgMHgxOSwgMHgxNywgMHgxNSwKLQkJIDB4MTIsIDB4MTAsIDB4MGUsIDB4MGIsIDB4MDksIDB4MDgsIDB4MDYsIDB4MDN9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV8zWzE2XSA9CisJCSAweGIwLCAweGMyLCAweGQxLCAweGRlLCAweGU5LCAweGYyLCAweGY5LCAweGZmfSwKIAkJezB4MDQsIDB4MTYsIDB4MzAsIDB4NGUsIDB4NjgsIDB4ODEsIDB4OTgsIDB4YWMsCi0JCSAweGJlLCAweGNkLCAweGRhLCAweGU0LCAweGVkLCAweGY1LCAweGZiLCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfM1sxNl0gPQotCQl7MHgwYywgMHgxNiwgMHgxYiwgMHgxYywgMHgxOSwgMHgxOCwgMHgxNSwgMHgxMiwKLQkJIDB4MTAsIDB4MGQsIDB4MGIsIDB4MDksIDB4MDgsIDB4MDYsIDB4MDUsIDB4MDN9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV80WzE2XSA9CisJCSAweGJlLCAweGNkLCAweGRhLCAweGU0LCAweGVkLCAweGY1LCAweGZiLCAweGZmfSwKIAkJezB4MTMsIDB4MzgsIDB4NTksIDB4NzksIDB4OTIsIDB4YTcsIDB4YjksIDB4YzgsCi0JCSAweGQ0LCAweGRmLCAweGU3LCAweGVlLCAweGY0LCAweGY5LCAweGZjLCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfNFsxNl0gPQotCQl7MHgyNiwgMHgyMiwgMHgyMCwgMHgxYywgMHgxNiwgMHgxMywgMHgxMCwgMHgwZCwKLQkJIDB4MGIsIDB4MDksIDB4MDcsIDB4MDYsIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDJ9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV81WzE2XSA9CisJCSAweGQ0LCAweGRmLCAweGU3LCAweGVlLCAweGY0LCAweGY5LCAweGZjLCAweGZmfSwKIAkJezB4MjAsIDB4NGIsIDB4NmUsIDB4OGQsIDB4YTMsIDB4YjUsIDB4YzUsIDB4ZDIsCi0JCSAweGRjLCAweGU1LCAweGVjLCAweGYyLCAweGY2LCAweGZhLCAweGZkLCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfNVsxNl0gPQotCQl7MHgzNywgMHgyNiwgMHgyMCwgMHgxYSwgMHgxNCwgMHgxMCwgMHgwZSwgMHgwYiwKLQkJIDB4MDksIDB4MDcsIDB4MDYsIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDJ9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV82WzE2XSA9CQkvKiA/PyB3YXMgZ2FtbWEgNSAqLworCQkgMHhkYywgMHhlNSwgMHhlYywgMHhmMiwgMHhmNiwgMHhmYSwgMHhmZCwgMHhmZn0sCiAJCXsweDI0LCAweDQ0LCAweDY0LCAweDg0LCAweDlkLCAweGIyLCAweGM0LCAweGQzLAotCQkgMHhlMCwgMHhlYiwgMHhmNCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0Jc3RhdGljIGNvbnN0IF9fdTggVGdyYWRpZW50XzZbMTZdID0KLQkJezB4MTgsIDB4MjAsIDB4MjAsIDB4MWMsIDB4MTYsIDB4MTMsIDB4MTAsIDB4MGUsCi0JCSAweDBiLCAweDA5LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxfTsKLQlzdGF0aWMgY29uc3QgX191OCAqZ2FtbWFfdGJbXSA9IHsKLQkJTlVMTCwgVGdhbW1hXzEsIFRnYW1tYV8yLAotCQlUZ2FtbWFfMywgVGdhbW1hXzQsIFRnYW1tYV81LCBUZ2FtbWFfNgorCQkgMHhlMCwgMHhlYiwgMHhmNCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn0sCiAJfTsKLQlzdGF0aWMgY29uc3QgX191OCAqZ3JhZGllbnRfdGJbXSA9IHsKLQkJTlVMTCwgVGdyYWRpZW50XzEsIFRncmFkaWVudF8yLAotCQlUZ3JhZGllbnRfMywgVGdyYWRpZW50XzQsIFRncmFkaWVudF81LCBUZ3JhZGllbnRfNgotCX07Ci0jaWZkZWYgR1NQQ0FfREVCVUcKLQlfX3U4IHZbMTZdOwotI2VuZGlmCiAKLQlUZ2FtbWEgPSBnYW1tYV90YltzZC0+Z2FtbWFdOwotCVRncmFkaWVudCA9IGdyYWRpZW50X3RiW3NkLT5nYW1tYV07CisJVGdhbW1hID0gZ2FtbWFfdGJbc2QtPmdhbW1hIC0gMV07CiAKLQlrID0gKHNkLT5jb250cmFzdCAtIDEyOCkJCS8qIC0xMjggLyAxMjggKi8KLQkJCSogVGdhbW1hWzBdOwotCVBERUJVRyhEX0NPTkYsICJnYW1tYTolZCBjb250cmFzdDolZCBnYW1tYSBjb2VmZjogJWQvMTI4IiwKLQkJc2QtPmdhbW1hLCBzZC0+Y29udHJhc3QsIGspOworCWsgPSAoKGludCkgc2QtPmNvbnRyYXN0IC0gMTI4KTsJCS8qIC0xMjggLyAxMjggKi8KKwlhZGogPSAwOworCWdwID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlnID0gVGdhbW1hW2ldICsga2dhbW1hX3RiW2ldICogayAvIDEyODsKKwkJZyA9IFRnYW1tYVtpXSAtIGRlbHRhX3RiW2ldICogayAvIDEyOCAtIGFkaiAvIDI7CiAJCWlmIChnID4gMHhmZikKIAkJCWcgPSAweGZmOwogCQllbHNlIGlmIChnIDw9IDApCiAJCQlnID0gMTsKIAkJcmVnX3coZGV2LCBnLCAweDAxMjAgKyBpKTsJLyogZ2FtbWEgKi8KLSNpZmRlZiBHU1BDQV9ERUJVRwotCQlpZiAoZ3NwY2FfZGVidWcgJiBEX0NPTkYpCi0JCQl2W2ldID0gZzsKLSNlbmRpZgotCX0KLQlQREVCVUcoRF9DT05GLCAidGI6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsCi0JCXZbMF0sIHZbMV0sIHZbMl0sIHZbM10sIHZbNF0sIHZbNV0sIHZbNl0sIHZbN10pOwotCVBERUJVRyhEX0NPTkYsICIgICAgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwKLQkJdls4XSwgdls5XSwgdlsxMF0sIHZbMTFdLCB2WzEyXSwgdlsxM10sIHZbMTRdLCB2WzE1XSk7Ci0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJZyA9IFRncmFkaWVudFtpXSAtIGtncmFkX3RiW2ldICogayAvIDEyODsKLQkJaWYgKGcgPiAweGZmKQotCQkJZyA9IDB4ZmY7Ci0JCWVsc2UgaWYgKGcgPD0gMCkgewotCQkJaWYgKGkgIT0gMTUpCi0JCQkJZyA9IDA7CisJCWlmIChrID4gMCkKKwkJCWFkai0tOworCQllbHNlCisJCQlhZGorKzsKKworCQlpZiAoaSAhPSAwKSB7CisJCQlpZiAoZ3AgPT0gMCkKKwkJCQlncltpIC0gMV0gPSAwOwogCQkJZWxzZQotCQkJCWcgPSAxOworCQkJCWdyW2kgLSAxXSA9IGcgLSBncDsKIAkJfQotCQlyZWdfdyhkZXYsIGcsIDB4MDEzMCArIGkpOwkvKiBncmFkaWVudCAqLwotI2lmZGVmIEdTUENBX0RFQlVHCi0JCWlmIChnc3BjYV9kZWJ1ZyAmIERfQ09ORikKLQkJCXZbaV0gPSBnOwotI2VuZGlmCisJCWdwID0gZzsKIAl9Ci0JUERFQlVHKERfQ09ORiwgIiAgICAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngiLAotCQl2WzBdLCB2WzFdLCB2WzJdLCB2WzNdLCB2WzRdLCB2WzVdLCB2WzZdLCB2WzddKTsKLQlQREVCVUcoRF9DT05GLCAiICAgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsCi0JCXZbOF0sIHZbOV0sIHZbMTBdLCB2WzExXSwgdlsxMl0sIHZbMTNdLCB2WzE0XSwgdlsxNV0pOworCWdyWzE1XSA9IGdyWzE0XSAvIDI7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCXJlZ193KGRldiwgZ3JbaV0sIDB4MDEzMCArIGkpOwkvKiBncmFkaWVudCAqLwogfQogCiBzdGF0aWMgdm9pZCBzZXRxdWFsaXR5KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCV9fdTggZnJ4dDsKKwl1OCBmcnh0OwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfQURDTTI3MDA6CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX0hWNzEzMUI6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgorCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCQlyZXR1cm47CiAJfQpAQCAtNjIxOCw5ICs2MTcwLDkgQEAKIAkJIGhkY3MyMDIwYl81MEhaLCBoZGNzMjAyMGJfNTBIWiwKIAkJIGhkY3MyMDIwYl82MEhaLCBoZGNzMjAyMGJfNjBIWn0sCiAvKiBTRU5TT1JfSFY3MTMxQiA1ICovCi0JCXtodjcxMzFiX05vRmxpa2VyU2NhbGUsIGh2NzEzMWJfTm9GbGlrZXIsCi0JCSBodjcxMzFiXzUwSFpTY2FsZSwgaHY3MTMxYl81MEhaLAotCQkgaHY3MTMxYl82MEhaU2NhbGUsIGh2NzEzMWJfNjBIWn0sCisJCXtodjcxMzFiX05vRmxpa2VyLCBodjcxMzFiX05vRmxpa2VyU2NhbGUsCisJCSBodjcxMzFiXzUwSFosIGh2NzEzMWJfNTBIWlNjYWxlLAorCQkgaHY3MTMxYl82MEhaLCBodjcxMzFiXzYwSFpTY2FsZX0sCiAvKiBTRU5TT1JfSFY3MTMxQyA2ICovCiAJCXtOVUxMLCBOVUxMLAogCQkgTlVMTCwgTlVMTCwKQEAgLTYyMzAsMTcgKzYxODIsMTcgQEAKIAkJIGljbTEwNWFfNTBIWiwgaWNtMTA1YV81MEhaU2NhbGUsCiAJCSBpY20xMDVhXzYwSFosIGljbTEwNWFfNjBIWlNjYWxlfSwKIC8qIFNFTlNPUl9NQzUwMUNCIDggKi8KLQkJe01DNTAxQ0JfTm9GbGlrZXIsIE1DNTAxQ0JfTm9GbGlrZXJTY2FsZSwKLQkJIE1DNTAxQ0JfNTBIWiwgTUM1MDFDQl81MEhaU2NhbGUsCi0JCSBNQzUwMUNCXzYwSFosIE1DNTAxQ0JfNjBIWlNjYWxlfSwKKwkJe21jNTAxY2JfTm9GbGlrZXIsIG1jNTAxY2JfTm9GbGlrZXJTY2FsZSwKKwkJIG1jNTAxY2JfNTBIWiwgbWM1MDFjYl81MEhaU2NhbGUsCisJCSBtYzUwMWNiXzYwSFosIG1jNTAxY2JfNjBIWlNjYWxlfSwKIC8qIFNFTlNPUl9NSTAzNjBTT0MgOSAqLwotCQl7bWkzNjBzb2NfQUVOb0ZsaWtlclNjYWxlLCBtaTM2MHNvY19BRU5vRmxpa2VyLAotCQkgbWkzNjBzb2NfQUU1MEhaU2NhbGUsIG1pMzYwc29jX0FFNTBIWiwKLQkJIG1pMzYwc29jX0FFNjBIWlNjYWxlLCBtaTM2MHNvY19BRTYwSFp9LAorCQl7bWkzNjBzb2NfQUVOb0ZsaWtlciwgbWkzNjBzb2NfQUVOb0ZsaWtlclNjYWxlLAorCQkgbWkzNjBzb2NfQUU1MEhaLCBtaTM2MHNvY19BRTUwSFpTY2FsZSwKKwkJIG1pMzYwc29jX0FFNjBIWiwgbWkzNjBzb2NfQUU2MEhaU2NhbGV9LAogLyogU0VOU09SX09WNzYyMCAxMCAqLwotCQl7T1Y3NjIwX05vRmxpa2VyLCBPVjc2MjBfTm9GbGlrZXIsCi0JCSBPVjc2MjBfNTBIWiwgT1Y3NjIwXzUwSFosCi0JCSBPVjc2MjBfNjBIWiwgT1Y3NjIwXzYwSFp9LAorCQl7b3Y3NjIwX05vRmxpa2VyLCBvdjc2MjBfTm9GbGlrZXIsCisJCSBvdjc2MjBfNTBIWiwgb3Y3NjIwXzUwSFosCisJCSBvdjc2MjBfNjBIWiwgb3Y3NjIwXzYwSFp9LAogLyogU0VOU09SX09WNzYzMEMgMTEgKi8KIAkJe05VTEwsIE5VTEwsCiAJCSBOVUxMLCBOVUxMLApAQCAtNjI1OCwxNyArNjIxMCwxNyBAQAogCQkgcGIwMzMwXzUwSFpTY2FsZSwgcGIwMzMwXzUwSFosCiAJCSBwYjAzMzBfNjBIWlNjYWxlLCBwYjAzMzBfNjBIWn0sCiAvKiBTRU5TT1JfUE8yMDMwIDE1ICovCi0JCXtQTzIwMzBfTm9GbGlrZXIsIFBPMjAzMF9Ob0ZsaWtlciwKLQkJIFBPMjAzMF81MEhaLCBQTzIwMzBfNTBIWiwKLQkJIFBPMjAzMF82MEhaLCBQTzIwMzBfNjBIWn0sCisJCXtwbzIwMzBfTm9GbGlrZXIsIHBvMjAzMF9Ob0ZsaWtlciwKKwkJIHBvMjAzMF81MEhaLCBwbzIwMzBfNTBIWiwKKwkJIHBvMjAzMF82MEhaLCBwbzIwMzBfNjBIWn0sCiAvKiBTRU5TT1JfVEFTNTEzMENLIDE2ICovCi0JCXt0YXM1MTMwY3h4X05vRmxpa2VyU2NhbGUsIHRhczUxMzBjeHhfTm9GbGlrZXIsCi0JCSB0YXM1MTMwY3h4XzUwSFpTY2FsZSwgdGFzNTEzMGN4eF81MEhaLAotCQkgdGFzNTEzMGN4eF82MEhaU2NhbGUsIHRhczUxMzBjeHhfNjBIWn0sCisJCXt0YXM1MTMwY3h4X05vRmxpa2VyLCB0YXM1MTMwY3h4X05vRmxpa2VyU2NhbGUsCisJCSB0YXM1MTMwY3h4XzUwSFosIHRhczUxMzBjeHhfNTBIWlNjYWxlLAorCQkgdGFzNTEzMGN4eF82MEhaLCB0YXM1MTMwY3h4XzYwSFpTY2FsZX0sCiAvKiBTRU5TT1JfVEFTNTEzMENYWCAxNyAqLwotCQl7dGFzNTEzMGN4eF9Ob0ZsaWtlclNjYWxlLCB0YXM1MTMwY3h4X05vRmxpa2VyLAotCQkgdGFzNTEzMGN4eF81MEhaU2NhbGUsIHRhczUxMzBjeHhfNTBIWiwKLQkJIHRhczUxMzBjeHhfNjBIWlNjYWxlLCB0YXM1MTMwY3h4XzYwSFp9LAorCQl7dGFzNTEzMGN4eF9Ob0ZsaWtlciwgdGFzNTEzMGN4eF9Ob0ZsaWtlclNjYWxlLAorCQkgdGFzNTEzMGN4eF81MEhaLCB0YXM1MTMwY3h4XzUwSFpTY2FsZSwKKwkJIHRhczUxMzBjeHhfNjBIWiwgdGFzNTEzMGN4eF82MEhaU2NhbGV9LAogLyogU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCAxOCAqLwogCQl7dGFzNTEzMGNfdmYwMjUwX05vRmxpa2VyLCB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJTY2FsZSwKIAkJIHRhczUxMzBjX3ZmMDI1MF81MEhaLCB0YXM1MTMwY192ZjAyNTBfNTBIWlNjYWxlLApAQCAtNjI3Nyw5ICs2MjI5LDkgQEAKIAogCWkgPSBzZC0+bGlnaHRmcmVxICogMjsKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7Ci0JaWYgKCFtb2RlKQotCQlpKys7CQkJLyogNjQweDQ4MCAqLwotCXpjM19mcmVxID0gZnJlcV90YlsoaW50KSBzZC0+c2Vuc29yXVtpXTsKKwlpZiAobW9kZSkKKwkJaSsrOwkJCS8qIDMyMHgyNDAgKi8KKwl6YzNfZnJlcSA9IGZyZXFfdGJbc2QtPnNlbnNvcl1baV07CiAJaWYgKHpjM19mcmVxICE9IE5VTEwpIHsKIAkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgemMzX2ZyZXEpOwogCQlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKQEAgLTYyOTcsNiArNjI0OSw5IEBACiAJCQkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDQ0LCAweDAwMDIpOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgU0VOU09SX1BBUzIwMkI6CisJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwMCwgMHgwMWE3KTsKKwkJCWJyZWFrOwogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtNjMwNSw3ICs2MjYwLDcgQEAKIHN0YXRpYyB2b2lkIHNldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191OCBhdXRvdmFsOworCXU4IGF1dG92YWw7CiAKIAlpZiAoc2QtPmF1dG9nYWluKQogCQlhdXRvdmFsID0gMHg0MjsKQEAgLTYzMzMsNiArNjI4OCwxMiBAQAogCQlyZWdfdyhkZXYsIDB4MDIsIDB4MDAzYik7CiAJCXJlZ193KGRldiwgMHgwMCwgMHgwMDM4KTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfUEFTMjAyQjoKKwkJcmVnX3coZGV2LCAweDAzLCAweDAwM2IpOworCQlyZWdfdyhkZXYsIDB4MGMsIDB4MDAzYSk7CisJCXJlZ193KGRldiwgMHgwYiwgMHgwMDM5KTsKKwkJcmVnX3coZGV2LCAweDBiLCAweDAwMzgpOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTYzNDksNyArNjMxMCw3IEBACiAKIHN0YXRpYyBpbnQgc2lmX3Byb2JlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlfX3UxNiBjaGVja3dvcmQ7CisJdTE2IGNoZWNrd29yZDsKIAogCXN0YXJ0XzJ3cl9wcm9iZShnc3BjYV9kZXYtPmRldiwgMHgwZik7CQkvKiBQQVMxMDYgKi8KIAlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwOCwgMHgwMDhkKTsKQEAgLTYzOTIsNiArNjM1Myw3IEBACiAJfQogCiAJc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwOCk7CQkvKiBIRENTMjAyMCAqLworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MWMsIDB4MDAsIDB4MDApOwogCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MTUsIDB4YWEsIDB4MDApOwogCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTUpOwogCWlmIChyZXR3b3JkICE9IDApCkBAIC02NDIwLDggKzYzODIsMTAgQEAKIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAzLCAweGFhLCAweDAwKTsKIAltc2xlZXAoNTApOwogCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDMpOwotCWlmIChyZXR3b3JkICE9IDApCisJaWYgKHJldHdvcmQgIT0gMCkgeworCQlzZW5kX3Vua25vd24oZGV2LCBTRU5TT1JfUEFTMjAyQik7CiAJCXJldHVybiAweDBlOwkJCS8qIFBBUzIwMkJDQiAqLworCX0KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MDIpOwkJLyogVEFTNTEzMEMgKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweGFhLCAweDAwKTsKQEAgLTY0NTcsOCArNjQyMSw4IEBACiB9CiAKIHN0cnVjdCBzZW5zb3JfYnlfY2hpcHNldF9yZXZpc2lvbiB7Ci0JX191MTYgcmV2aXNpb247Ci0JX191OCBpbnRlcm5hbF9zZW5zb3JfaWQ7CisJdTE2IHJldmlzaW9uOworCXU4IGludGVybmFsX3NlbnNvcl9pZDsKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlbnNvcl9ieV9jaGlwc2V0X3JldmlzaW9uIGNoaXBzZXRfcmV2aXNpb25fc2Vuc29yW10gPSB7CiAJezB4YzAwMCwgMHgxMn0sCQkvKiBUQVM1MTMwQyAqLwpAQCAtNjQ2Nyw2ICs2NDMxLDcgQEAKIAl7MHg4MDAxLCAweDEzfSwKIAl7MHg4MDAwLCAweDE0fSwJCS8qIENTMjEwMksgKi8KIAl7MHg4NDAwLCAweDE1fSwJCS8qIFRBUzUxMzBLICovCisJezB4ZTQwMCwgMHgxNX0sCiB9OwogCiBzdGF0aWMgaW50IHZnYV8zd3JfcHJvYmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtNjQ3NCw3ICs2NDM5LDcgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBpOwotCV9fdTggcmV0Ynl0ZTsKKwl1OCByZXRieXRlOwogCXUxNiByZXR3b3JkOwogCiAvKmZpeG1lOiBsYWNrIG9mIDhiPWIzICgxMSwxMiktPiAxMCwgOGI9ZTAgKDE0LDE1LDE2KS0+IDEyIGZvdW5kIGluIGdzcGNhdjEqLwpAQCAtNjYyMiw4ICs2NTg3LDcgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtOwogCWludCBzZW5zb3I7Ci0JaW50IHZnYSA9IDE7CQkvKiAxOiB2Z2EsIDA6IHNpZiAqLwotCXN0YXRpYyBjb25zdCBfX3U4IGdhbW1hW1NFTlNPUl9NQVhdID0geworCXN0YXRpYyBjb25zdCB1OCBnYW1tYVtTRU5TT1JfTUFYXSA9IHsKIAkJNCwJLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KIAkJNCwJLyogU0VOU09SX0NTMjEwMiAxICovCiAJCTUsCS8qIFNFTlNPUl9DUzIxMDJLIDIgKi8KQEAgLTY2NDQsOSArNjYwOCwzMCBAQAogCQkzLAkvKiBTRU5TT1JfVEFTNTEzMENYWCAxNyAqLwogCQkzLAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE4ICovCiAJfTsKKwlzdGF0aWMgY29uc3QgdTggbW9kZV90YltTRU5TT1JfTUFYXSA9IHsKKwkJMiwJLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KKwkJMSwJLyogU0VOU09SX0NTMjEwMiAxICovCisJCTEsCS8qIFNFTlNPUl9DUzIxMDJLIDIgKi8KKwkJMSwJLyogU0VOU09SX0dDMDMwNSAzICovCisJCTEsCS8qIFNFTlNPUl9IRENTMjAyMGIgNCAqLworCQkxLAkvKiBTRU5TT1JfSFY3MTMxQiA1ICovCisJCTEsCS8qIFNFTlNPUl9IVjcxMzFDIDYgKi8KKwkJMSwJLyogU0VOU09SX0lDTTEwNUEgNyAqLworCQkyLAkvKiBTRU5TT1JfTUM1MDFDQiA4ICovCisJCTEsCS8qIFNFTlNPUl9NSTAzNjBTT0MgOSAqLworCQkyLAkvKiBTRU5TT1JfT1Y3NjIwIDEwICovCisJCTEsCS8qIFNFTlNPUl9PVjc2MzBDIDExICovCisJCTAsCS8qIFNFTlNPUl9QQVMxMDYgMTIgKi8KKwkJMSwJLyogU0VOU09SX1BBUzIwMkIgMTMgKi8KKwkJMSwJLyogU0VOU09SX1BCMDMzMCAxNCAqLworCQkxLAkvKiBTRU5TT1JfUE8yMDMwIDE1ICovCisJCTEsCS8qIFNFTlNPUl9UQVM1MTMwQ0sgMTYgKi8KKwkJMSwJLyogU0VOU09SX1RBUzUxMzBDWFggMTcgKi8KKwkJMSwJLyogU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCAxOCAqLworCX07CiAKIAkvKiBkZWZpbmUgc29tZSBzZW5zb3JzIGZyb20gdGhlIHZlbmRvci9wcm9kdWN0ICovCi0Jc2QtPnNoYXJwbmVzcyA9IDI7CisJc2QtPnNoYXJwbmVzcyA9IFNIQVJQTkVTU19ERUY7CiAJc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbzsKIAlzZW5zb3IgPSB6Y3h4X3Byb2JlU2Vuc29yKGdzcGNhX2Rldik7CiAJaWYgKHNlbnNvciA+PSAwKQpAQCAtNjY3MSw4ICs2NjU2LDIxIEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAwOgotCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBIVjcxMzFCIik7Ci0JCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMUI7CisJCQkvKiBjaGVjayB0aGUgc2Vuc29yIHR5cGUgKi8KKwkJCXNlbnNvciA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMCk7CisJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBodjcxMzEgdHlwZSAlZCIsIHNlbnNvcik7CisJCQlzd2l0Y2ggKHNlbnNvcikgeworCQkJY2FzZSAwOgkJCS8qIGh2NzEzMWIgKi8KKwkJCWNhc2UgMToJCQkvKiBodjcxMzFlICovCisJCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBIVjcxMzFCIik7CisJCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9IVjcxMzFCOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKy8qCQkJY2FzZSAyOgkJCSAqIGh2NzEzMXIgKi8KKwkJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIEhWNzEzMVIoYykiKTsKKwkJCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMUM7CisJCQkJYnJlYWs7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAweDAyOgogCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgVEFTNTEzMEMiKTsKQEAgLTY2OTksMTIgKzY2OTcsMTEgQEAKIAkJY2FzZSAweDBlOgogCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBQQVMyMDJCIik7CiAJCQlzZC0+c2Vuc29yID0gU0VOU09SX1BBUzIwMkI7Ci0JCQlzZC0+c2hhcnBuZXNzID0gMTsKKy8qCQkJc2QtPnNoYXJwbmVzcyA9IDE7ICovCiAJCQlicmVhazsKIAkJY2FzZSAweDBmOgogCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBQQVMxMDYiKTsKIAkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfUEFTMTA2OwotCQkJdmdhID0gMDsJCS8qIFNJRiAqLwogCQkJYnJlYWs7CiAJCWNhc2UgMHgxMDoKIAkJY2FzZSAweDEyOgpAQCAtNjc3MCwzMSArNjc2NywzOCBAQAogCWlmIChzZW5zb3IgPCAweDIwKSB7CiAJCWlmIChzZW5zb3IgPT0gLTEgfHwgc2Vuc29yID09IDB4MTAgfHwgc2Vuc29yID09IDB4MTIpCiAJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwMiwgMHgwMDEwKTsKLQkJZWxzZQotCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIHNlbnNvciAmIDB4MGYsIDB4MDAxMCk7CiAJCXJlZ19yKGdzcGNhX2RldiwgMHgwMDEwKTsKIAl9CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAvKmZpeG1lOnRlc3QqLwogCWdzcGNhX2Rldi0+bmJhbHQtLTsKLQlpZiAodmdhKSB7Ci0JCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKLQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKLQl9IGVsc2UgeworCXN3aXRjaCAobW9kZV90YltzZC0+c2Vuc29yXSkgeworCWNhc2UgMDoKIAkJY2FtLT5jYW1fbW9kZSA9IHNpZl9tb2RlOwogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOworCQlicmVhazsKKwljYXNlIDE6CisJCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgMjogKi8KKwkJY2FtLT5jYW1fbW9kZSA9IGJyb2tlbl92Z2FfbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKGJyb2tlbl92Z2FfbW9kZSk7CisJCWJyZWFrOwogCX0KLQlzZC0+YnJpZ2h0bmVzcyA9IHNkX2N0cmxzW1NEX0JSSUdIVE5FU1NdLnFjdHJsLmRlZmF1bHRfdmFsdWU7Ci0Jc2QtPmNvbnRyYXN0ID0gc2RfY3RybHNbU0RfQ09OVFJBU1RdLnFjdHJsLmRlZmF1bHRfdmFsdWU7Ci0Jc2QtPmdhbW1hID0gZ2FtbWFbKGludCkgc2QtPnNlbnNvcl07Ci0Jc2QtPmF1dG9nYWluID0gc2RfY3RybHNbU0RfQVVUT0dBSU5dLnFjdHJsLmRlZmF1bHRfdmFsdWU7Ci0Jc2QtPmxpZ2h0ZnJlcSA9IHNkX2N0cmxzW1NEX0ZSRVFdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJc2QtPmdhbW1hID0gZ2FtbWFbc2QtPnNlbnNvcl07CisJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOworCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKIAlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX09WNzYyMDoKKwljYXNlIFNFTlNPUl9QQVMyMDJCOgogCWNhc2UgU0VOU09SX1BPMjAzMDoKIAkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEJSSUdIVE5FU1NfSURYKTsKIAkJYnJlYWs7CkBAIC02ODA1LDE0ICs2ODA5LDEzIEBACiAJCWJyZWFrOwogCX0KIAotCS8qIHN3aXRjaCB0aGUgbGVkIG9mZiAqLwotCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDAxLCAweDAwMDApOwogCXJldHVybiAwOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJLyogc3dpdGNoIG9mZiB0aGUgbGVkICovCiAJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDEsIDB4MDAwMCk7CiAJcmV0dXJuIDA7CiB9CkBAIC02ODIxLDI4ICs2ODI0LDI3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQljb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiAqemMzX2luaXQ7CiAJaW50IG1vZGU7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uICppbml0X3RiW1NFTlNPUl9NQVhdWzJdID0gewogCQl7YWRjbTI3MDBfSW5pdGlhbCwgYWRjbTI3MDBfSW5pdGlhbFNjYWxlfSwJLyogMCAqLwotCQl7Y3MyMTAyX0luaXRpYWxTY2FsZSwgY3MyMTAyX0luaXRpYWx9LAkJLyogMSAqLwotCQl7Y3MyMTAyS19Jbml0aWFsU2NhbGUsIGNzMjEwMktfSW5pdGlhbH0sCS8qIDIgKi8KKwkJe2NzMjEwMl9Jbml0aWFsLCBjczIxMDJfSW5pdGlhbFNjYWxlfSwJCS8qIDEgKi8KKwkJe2NzMjEwMktfSW5pdGlhbCwgY3MyMTAyS19Jbml0aWFsU2NhbGV9LAkvKiAyICovCiAJCXtnYzAzMDVfSW5pdGlhbCwgZ2MwMzA1X0luaXRpYWxTY2FsZX0sCQkvKiAzICovCi0JCXtoZGNzMjAyMHhiX0luaXRpYWxTY2FsZSwgaGRjczIwMjB4Yl9Jbml0aWFsfSwJLyogNCAqLwotCQl7aHY3MTMxYnh4X0luaXRpYWxTY2FsZSwgaHY3MTMxYnh4X0luaXRpYWx9LAkvKiA1ICovCi0JCXtodjcxMzFjeHhfSW5pdGlhbFNjYWxlLCBodjcxMzFjeHhfSW5pdGlhbH0sCS8qIDYgKi8KLQkJe2ljbTEwNWF4eF9Jbml0aWFsU2NhbGUsIGljbTEwNWF4eF9Jbml0aWFsfSwJLyogNyAqLwotCQl7TUM1MDFDQl9Jbml0aWFsU2NhbGUsIE1DNTAxQ0JfSW5pdGlhbH0sCS8qIDggKi8KKwkJe2hkY3MyMDIwYl9Jbml0aWFsLCBoZGNzMjAyMGJfSW5pdGlhbFNjYWxlfSwJLyogNCAqLworCQl7aHY3MTMxYl9Jbml0aWFsLCBodjcxMzFiX0luaXRpYWxTY2FsZX0sCS8qIDUgKi8KKwkJe2h2NzEzMXJfSW5pdGlhbCwgaHY3MTMxcl9Jbml0aWFsU2NhbGV9LAkvKiA2ICovCisJCXtpY20xMDVhX0luaXRpYWwsIGljbTEwNWFfSW5pdGlhbFNjYWxlfSwJLyogNyAqLworCQl7bWM1MDFjYl9Jbml0aWFsLCBtYzUwMWNiX0luaXRpYWxTY2FsZX0sCS8qIDggKi8KIAkJe21pMDM2MHNvY19Jbml0aWFsLCBtaTAzNjBzb2NfSW5pdGlhbFNjYWxlfSwJLyogOSAqLwotCQl7T1Y3NjIwX21vZGUwLCBPVjc2MjBfbW9kZTF9LAkJCS8qIDEwICovCi0JCXtvdjc2MzBjX0luaXRpYWxTY2FsZSwgb3Y3NjMwY19Jbml0aWFsfSwJLyogMTEgKi8KLQkJe3BhczEwNmJfSW5pdGlhbFNjYWxlLCBwYXMxMDZiX0luaXRpYWx9LAkvKiAxMiAqLworCQl7b3Y3NjIwX0luaXRpYWwsIG92NzYyMF9Jbml0aWFsU2NhbGV9LAkJLyogMTAgKi8KKwkJe292NzYzMGNfSW5pdGlhbCwgb3Y3NjMwY19Jbml0aWFsU2NhbGV9LAkvKiAxMSAqLworCQl7cGFzMTA2Yl9Jbml0aWFsLCBwYXMxMDZiX0luaXRpYWxTY2FsZX0sCS8qIDEyICovCiAJCXtwYXMyMDJiX0luaXRpYWwsIHBhczIwMmJfSW5pdGlhbFNjYWxlfSwJLyogMTMgKi8KIAkJe3BiMDMzMF9Jbml0aWFsLCBwYjAzMzBfSW5pdGlhbFNjYWxlfSwJCS8qIDE0ICovCi0JCXtQTzIwMzBfbW9kZTAsIFBPMjAzMF9tb2RlMX0sCQkJLyogMTUgKi8KLQkJe3RhczUxMzBDS19Jbml0aWFsU2NhbGUsIHRhczUxMzBDS19Jbml0aWFsfSwJLyogMTYgKi8KKwkJe3BvMjAzMF9Jbml0aWFsLCBwbzIwMzBfSW5pdGlhbFNjYWxlfSwJCS8qIDE1ICovCisJCXt0YXM1MTMwY0tfSW5pdGlhbCwgdGFzNTEzMGNLX0luaXRpYWxTY2FsZX0sCS8qIDE2ICovCiAJCXt0YXM1MTMwY3h4X0luaXRpYWwsIHRhczUxMzBjeHhfSW5pdGlhbFNjYWxlfSwJLyogMTcgKi8KLQkJe3RhczUxMzBjX3ZmMDI1MF9Jbml0aWFsU2NhbGUsIHRhczUxMzBjX3ZmMDI1MF9Jbml0aWFsfSwKKwkJe3RhczUxMzBjX3ZmMDI1MF9Jbml0aWFsLCB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFNjYWxlfSwKIAkJCQkJCQkJLyogMTggKi8KIAl9OwogCkBAIC02ODU0LDggKzY4NTYsNyBAQAogCQkJMHgyMSk7CQkvKiBKUEVHIDQyMiAqLwogCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CiAKLQltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7Ci0JemMzX2luaXQgPSBpbml0X3RiWyhpbnQpIHNkLT5zZW5zb3JdW21vZGVdOworCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9IVjcxMzFDOgogCQl6Y3h4X3Byb2JlU2Vuc29yKGdzcGNhX2Rldik7CkBAIC02ODY0LDcgKzY4NjUsNyBAQAogCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBwYXMxMDZiX0luaXRpYWxfY29tKTsKIAkJYnJlYWs7CiAJfQotCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHpjM19pbml0KTsKKwl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBpbml0X3RiW3NkLT5zZW5zb3JdW21vZGVdKTsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX0FEQ00yNzAwOgpAQCAtNjg4Myw2ICs2ODg0LDExIEBACiAJCXJlZ193KGRldiwgMHgwMiwgMHgwMDNiKTsKIAkJcmVnX3coZGV2LCAweDAwLCAweDAwMzgpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9QQVMyMDJCOgorCQlyZWdfdyhkZXYsIDB4MDMsIDB4MDAzYik7CisJCXJlZ193KGRldiwgMHgwYywgMHgwMDNhKTsKKwkJcmVnX3coZGV2LCAweDBiLCAweDAwMzkpOworCQlicmVhazsKIAl9CiAKIAlzZXRtYXRyaXgoZ3NwY2FfZGV2KTsKQEAgLTY5NjEsMTMgKzY5NjcsMTMgQEAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9QTzIwMzA6CiAJCW1zbGVlcCg1MCk7Ci0JCXJlZ19yKGdzcGNhX2RldiwgMHgwMDA4KTsKLQkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDcpOwotCQkvKmZhbGwgdGhydSovCi0JY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAkJcmVnX3coZGV2LCAweDAwLCAweDAwMDcpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwogCQlyZWdfdyhkZXYsIDB4MDIsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfUEFTMjAyQjoKKwkJcmVnX3coZGV2LCAweDMyLCAweDAwMDcpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLworCQlyZWdfdyhkZXYsIDB4MDIsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HKTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzE2NSw2ICs3MTcxLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJycHV0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpZiAobGVuID09IDggJiYgZGF0YVs0XSA9PSAxKSB7CisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDEpOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMCk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCkBAIC03MTc3LDYgKzcxOTksOSBAQAogCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCiAJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKIAkuc2V0X2pjb21wID0gc2Rfc2V0X2pjb21wLAorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwppbmRleCA1MWYzOTNkLi4yZmM5ODY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwpAQCAtMzksMTIgKzM5LDEyIEBACiBtb2R1bGVfcGFyYW0oaGRwdnJfZGVidWcsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoaGRwdnJfZGVidWcsICJlbmFibGUgZGVidWdnaW5nIG91dHB1dCIpOwogCi11aW50IGRlZmF1bHRfdmlkZW9faW5wdXQgPSBIRFBWUl9WSURFT19JTlBVVFM7CitzdGF0aWMgdWludCBkZWZhdWx0X3ZpZGVvX2lucHV0ID0gSERQVlJfVklERU9fSU5QVVRTOwogbW9kdWxlX3BhcmFtKGRlZmF1bHRfdmlkZW9faW5wdXQsIHVpbnQsIFNfSVJVR098U19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfdmlkZW9faW5wdXQsICJkZWZhdWx0IHZpZGVvIGlucHV0OiAwPUNvbXBvbmVudCAvICIKIAkJICIxPVMtVmlkZW8gLyAyPUNvbXBvc2l0ZSIpOwogCi11aW50IGRlZmF1bHRfYXVkaW9faW5wdXQgPSBIRFBWUl9BVURJT19JTlBVVFM7CitzdGF0aWMgdWludCBkZWZhdWx0X2F1ZGlvX2lucHV0ID0gSERQVlJfQVVESU9fSU5QVVRTOwogbW9kdWxlX3BhcmFtKGRlZmF1bHRfYXVkaW9faW5wdXQsIHVpbnQsIFNfSVJVR098U19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfYXVkaW9faW5wdXQsICJkZWZhdWx0IGF1ZGlvIGlucHV0OiAwPVJDQSBiYWNrIC8gIgogCQkgIjE9UkNBIGZyb250IC8gMj1TL1BESUYiKTsKQEAgLTU5LDYgKzU5LDcgQEAKIAl7IFVTQl9ERVZJQ0UoSERfUFZSX1ZFTkRPUl9JRCwgSERfUFZSX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKEhEX1BWUl9WRU5ET1JfSUQsIEhEX1BWUl9QUk9EVUNUX0lEMSkgfSwKIAl7IFVTQl9ERVZJQ0UoSERfUFZSX1ZFTkRPUl9JRCwgSERfUFZSX1BST0RVQ1RfSUQyKSB9LAorCXsgVVNCX0RFVklDRShIRF9QVlJfVkVORE9SX0lELCBIRF9QVlJfUFJPRFVDVF9JRDMpIH0sCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBoZHB2cl90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMKaW5kZXggZmRkNzgyMC4uMTk2ZjgyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYwpAQCAtMzAyLDcgKzMwMiw4IEBACiAvKiBmdW5jdGlvbiBleHBlY3RzIGRldi0+aW9fbXV0ZXggdG8gYmUgaG9sZCBieSBjYWxsZXIgKi8KIHN0YXRpYyBpbnQgaGRwdnJfc3RvcF9zdHJlYW1pbmcoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQogewotCXVpbnQgYWN0dWFsX2xlbmd0aCwgYyA9IDA7CisJaW50IGFjdHVhbF9sZW5ndGg7CisJdWludCBjID0gMDsKIAl1OCAqYnVmOwogCiAJaWYgKGRldi0+c3RhdHVzID09IFNUQVRVU19JRExFKQpAQCAtNTcyLDcgKzU3Myw3IEBACiAJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN0cmNweShjYXAtPmRyaXZlciwgImhkcHZyIik7Ci0Jc3RyY3B5KGNhcC0+Y2FyZCwgIkhhdXBhdWdlIEhEIFBWUiIpOworCXN0cmNweShjYXAtPmNhcmQsICJIYXVwcGF1Z2UgSEQgUFZSIik7CiAJdXNiX21ha2VfcGF0aChkZXYtPnVkZXYsIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CiAJY2FwLT52ZXJzaW9uID0gSERQVlJfVkVSU0lPTjsKIAljYXAtPmNhcGFiaWxpdGllcyA9ICAgICBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaAppbmRleCAxZWRkODc1Li40OWFlMjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIEhEX1BWUl9QUk9EVUNUX0lECTB4NDkwMAogI2RlZmluZSBIRF9QVlJfUFJPRFVDVF9JRDEJMHg0OTAxCiAjZGVmaW5lIEhEX1BWUl9QUk9EVUNUX0lEMgkweDQ5MDIKKyNkZWZpbmUgSERfUFZSX1BST0RVQ1RfSUQzCTB4NDk4MgogCiAjZGVmaW5lIFVOU0VUICAgICgtMVUpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fZ2VtaW5pLmMKaW5kZXggNjBkOTkyZS4uZTYyMGEzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fZ2VtaW5pLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fZ2VtaW5pLmMKQEAgLTM1Miw5ICszNTIsMTMgQEAKIHN0YXRpYyBpbnQgaGV4aXVtX2F0dGFjaChzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IHNhYTcxNDZfcGNpX2V4dGVuc2lvbl9kYXRhICppbmZvKQogewogCXN0cnVjdCBoZXhpdW0gKmhleGl1bSA9IChzdHJ1Y3QgaGV4aXVtICopIGRldi0+ZXh0X3ByaXY7CisJaW50IHJldDsKIAogCURFQl9FRSgoIi5cbiIpKTsKIAorCXJldCA9IHNhYTcxNDZfdnZfZGV2aW5pdChkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAJaGV4aXVtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhleGl1bSksIEdGUF9LRVJORUwpOwogCWlmIChOVUxMID09IGhleGl1bSkgewogCQlwcmludGsoImhleGl1bV9nZW1pbmk6IG5vdCBlbm91Z2gga2VybmVsIG1lbW9yeSBpbiBoZXhpdW1fYXR0YWNoKCkuXG4iKTsKQEAgLTQwMCw5ICs0MDQsMTAgQEAKIAl2dl9kYXRhLm9wcy52aWRpb2NfZW51bV9pbnB1dCA9IHZpZGlvY19lbnVtX2lucHV0OwogCXZ2X2RhdGEub3BzLnZpZGlvY19nX2lucHV0ID0gdmlkaW9jX2dfaW5wdXQ7CiAJdnZfZGF0YS5vcHMudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dDsKLQlpZiAoMCAhPSBzYWE3MTQ2X3JlZ2lzdGVyX2RldmljZSgmaGV4aXVtLT52aWRlb19kZXYsIGRldiwgImhleGl1bSBnZW1pbmkiLCBWRkxfVFlQRV9HUkFCQkVSKSkgeworCXJldCA9IHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZoZXhpdW0tPnZpZGVvX2RldiwgZGV2LCAiaGV4aXVtIGdlbWluaSIsIFZGTF9UWVBFX0dSQUJCRVIpOworCWlmIChyZXQgPCAwKSB7CiAJCXByaW50aygiaGV4aXVtX2dlbWluaTogY2Fubm90IHJlZ2lzdGVyIGNhcHR1cmUgdjRsMiBkZXZpY2UuIHNraXBwaW5nLlxuIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlwcmludGsoImhleGl1bV9nZW1pbmk6IGZvdW5kICdoZXhpdW0gZ2VtaW5pJyBmcmFtZSBncmFiYmVyLSVkLlxuIiwgaGV4aXVtX251bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9vcmlvbi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYwppbmRleCA5MzhhMWY4Li5mZTU5NmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9vcmlvbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX29yaW9uLmMKQEAgLTIxNiw2ICsyMTYsMTAgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCisJZXJyID0gc2FhNzE0Nl92dl9kZXZpbml0KGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCWhleGl1bSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZXhpdW0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoTlVMTCA9PSBoZXhpdW0pIHsKIAkJcHJpbnRrKCJoZXhpdW1fb3Jpb246IGhleGl1bV9wcm9iZTogbm90IGVub3VnaCBrZXJuZWwgbWVtb3J5LlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCmluZGV4IGI4NmUzNTMuLmRhMThkNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCkBAIC0yOTksNyArMjk5LDcgQEAKIHsKIAlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzID0gTlVMTDsKIAljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKLQlpbnQgaXJfdHlwZSA9IDA7CisJdTY0IGlyX3R5cGUgPSAwOwogCXN0cnVjdCBJUl9pMmMgKmlyOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBjbGllbnQtPmFkYXB0ZXI7CkBAIC0zMzEsNiArMzMxLDcgQEAKIAkJaXJfY29kZXMgICAgPSAmaXJfY29kZXNfcHY5NTFfdGFibGU7CiAJCWJyZWFrOwogCWNhc2UgMHgxODoKKwljYXNlIDB4MWY6CiAJY2FzZSAweDFhOgogCQluYW1lICAgICAgICA9ICJIYXVwcGF1Z2UiOwogCQlpci0+Z2V0X2tleSA9IGdldF9rZXlfaGF1cDsKQEAgLTQ0Niw3ICs0NDcsNyBAQAogCWlucHV0X2Rldi0+bmFtZSAgICAgICA9IGlyLT5uYW1lOwogCWlucHV0X2Rldi0+cGh5cyAgICAgICA9IGlyLT5waHlzOwogCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmlucHV0LCBpci0+aXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgaXItPmlyX2NvZGVzLCBOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfZnJlZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmMKaW5kZXggNzlkMGZlNC4uY2ExZmQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5jCkBAIC0xMjEwLDYgKzEyMTAsNTMgQEAKIAkuaTJjID0gJml2dHZfaTJjX3N0ZCwKIH07CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFNvbnkgS2lreW91ICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXZ0dl9jYXJkX3BjaV9pbmZvIGl2dHZfcGNpX2tpa3lvdVtdID0geworCXsgUENJX0RFVklDRV9JRF9JVlRWMTYsIElWVFZfUENJX0lEX1NPTlksIDB4ODEzZCB9LAorCXsgMCwgMCwgMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGl2dHZfY2FyZCBpdnR2X2NhcmRfa2lreW91ID0geworCS50eXBlID0gSVZUVl9DQVJEX0tJS1lPVSwKKwkubmFtZSA9ICJTb255IFZBSU8gR2lnYSBQb2NrZXQgKEVOWCBLaWt5b3UpIiwKKwkudjRsMl9jYXBhYmlsaXRpZXMgPSBJVlRWX0NBUF9FTkNPREVSLAorCS5od192aWRlbyA9IElWVFZfSFdfU0FBNzExNSwKKwkuaHdfYXVkaW8gPSBJVlRWX0hXX0dQSU8sCisJLmh3X2F1ZGlvX2N0cmwgPSBJVlRWX0hXX0dQSU8sCisJLmh3X2FsbCA9IElWVFZfSFdfR1BJTyB8IElWVFZfSFdfU0FBNzExNSB8IElWVFZfSFdfVFVORVIsCisJLnZpZGVvX2lucHV0cyA9IHsKKwl7IElWVFZfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBJVlRWX1NBQTcxWFhfQ09NUE9TSVRFMSB9LAorCXsgSVZUVl9DQVJEX0lOUFVUX0NPTVBPU0lURTEsIDEsIElWVFZfU0FBNzFYWF9DT01QT1NJVEUxIH0sCisJeyBJVlRWX0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwgSVZUVl9TQUE3MVhYX1NWSURFTzEgfSwKKwl9LAorCS5hdWRpb19pbnB1dHMgPSB7CisJICAgICB7IElWVFZfQ0FSRF9JTlBVVF9BVURfVFVORVIsICBJVlRWX0dQSU9fVFVORVIgfSwKKwkgICAgIHsgSVZUVl9DQVJEX0lOUFVUX0xJTkVfSU4xLCAgIElWVFZfR1BJT19MSU5FX0lOIH0sCisJICAgICB7IElWVFZfQ0FSRF9JTlBVVF9MSU5FX0lOMiwgICBJVlRWX0dQSU9fTElORV9JTiB9LAorCX0sCisJLmdwaW9faW5pdCA9IHsgLmRpcmVjdGlvbiA9IDB4MDNlMSwgLmluaXRpYWxfdmFsdWUgPSAweDAzMjAgfSwKKwkuZ3Bpb19hdWRpb19pbnB1dCA9IHsgLm1hc2sgICA9IDB4MDA2MCwKKwkJCSAgICAgIC50dW5lciAgPSAweDAwMjAsCisJCQkgICAgICAubGluZWluID0gMHgwMDAwLAorCQkJICAgICAgLnJhZGlvICA9IDB4MDA2MCB9LAorCS5ncGlvX2F1ZGlvX211dGUgID0geyAubWFzayA9IDB4MDAwMCwKKwkJCSAgICAgIC5tdXRlID0gMHgwMDAwIH0sIC8qIDB4MjAwPyBEaXNhYmxlIGZvciBub3cuICovCisJLmdwaW9fYXVkaW9fbW9kZSAgPSB7IC5tYXNrICAgPSAweDAwODAsCisJCQkgICAgICAubW9ubyAgID0gMHgwMDAwLAorCQkJICAgICAgLnN0ZXJlbyA9IDB4MDAwMCwgLyogU0FQICovCisJCQkgICAgICAubGFuZzEgID0gMHgwMDgwLAorCQkJICAgICAgLmxhbmcyICA9IDB4MDAwMCwKKwkJCSAgICAgIC5ib3RoICAgPSAweDAwODAgfSwKKwkudHVuZXJzID0geworCSAgICAgeyAuc3RkID0gVjRMMl9TVERfQUxMLCAudHVuZXIgPSBUVU5FUl9TT05ZX0JURl9QWE4wMVogfSwKKwl9LAorCS5wY2lfbGlzdCA9IGl2dHZfcGNpX2tpa3lvdSwKKwkuaTJjID0gJml2dHZfaTJjX3N0ZCwKK307CisKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpdnR2X2NhcmQgKml2dHZfY2FyZF9saXN0W10gPSB7CiAJJml2dHZfY2FyZF9wdnIyNTAsCiAJJml2dHZfY2FyZF9wdnIzNTAsCkBAIC0xMjM4LDYgKzEyODUsNyBAQAogCSZpdnR2X2NhcmRfYXZlcl9tMTA0LAogCSZpdnR2X2NhcmRfYnVmZmFsbywKIAkmaXZ0dl9jYXJkX2F2ZXJfdWx0cmExNTAwbWNlLAorCSZpdnR2X2NhcmRfa2lreW91LAogCiAJLyogVmFyaWF0aW9ucyBvZiBzdGFuZGFyZCBjYXJkcyBidXQgd2l0aCB0aGUgc2FtZSBQQ0kgSURzLgogCSAgIFRoZXNlIGNhcmRzIG11c3QgY29tZSBsYXN0IGluIHRoaXMgbGlzdC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5oCmluZGV4IDYxNDg4MjcuLjc4ZWNhOTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmgKQEAgLTUxLDcgKzUxLDggQEAKICNkZWZpbmUgSVZUVl9DQVJEX0FWRVJfTTEwNCAgICAgICAgICAyNCAvKiBBdmVyTWVkaWEgTTEwNCBtaW5pUENJIGNhcmQgKi8KICNkZWZpbmUgSVZUVl9DQVJEX0JVRkZBTE9fTVY1TCAgICAgICAyNSAvKiBCdWZmYWxvIFBDLU1WNUwvUENJIGNhcmQgKi8KICNkZWZpbmUgSVZUVl9DQVJEX0FWRVJfVUxUUkExNTAwTUNFICAyNiAvKiBBVmVyTWVkaWEgVWx0cmFUViAxNTAwIE1DRSAqLwotI2RlZmluZSBJVlRWX0NBUkRfTEFTVCAJCSAgICAgMjYKKyNkZWZpbmUgSVZUVl9DQVJEX0tJS1lPVSAgICAgICAgICAgICAyNyAvKiBTb255IFZBSU8gR2lnYSBQb2NrZXQgKEVOWCBLaWt5b3UpICovCisjZGVmaW5lIElWVFZfQ0FSRF9MQVNUIAkJICAgICAyNwogCiAvKiBWYXJpYW50cyBvZiBleGlzdGluZyBjYXJkcyBidXQgd2l0aCB0aGUgc2FtZSBQQ0kgSURzLiBUaGUgZHJpdmVyCiAgICBkZXRlY3RzIHRoZXNlIGJhc2VkIG9uIG90aGVyIGRldmljZSBpbmZvcm1hdGlvbi4KQEAgLTg2LDYgKzg3LDcgQEAKICNkZWZpbmUgSVZUVl9QQ0lfSURfTUVMQ08gCQkweDExNTQKICNkZWZpbmUgSVZUVl9QQ0lfSURfR09UVklFVzEJCTB4ZmZhYwogI2RlZmluZSBJVlRWX1BDSV9JRF9HT1RWSUVXMiAJCTB4ZmZhZAorI2RlZmluZSBJVlRWX1BDSV9JRF9TT05ZIAkJMHgxMDRkCiAKIC8qIGhhcmR3YXJlIGZsYWdzLCBubyBnYXBzIGFsbG93ZWQgKi8KICNkZWZpbmUgSVZUVl9IV19DWDI1ODQwCQkJKDEgPDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKaW5kZXggMzQ3YzMzNC4uOWEyNTA1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKQEAgLTE5Myw2ICsxOTMsNyBAQAogCQkgIlx0XHRcdDI1ID0gQXZlck1lZGlhIE0xMDQgKG5vdCB5ZXQgd29ya2luZylcbiIKIAkJICJcdFx0XHQyNiA9IEJ1ZmZhbG8gUEMtTVY1TC9QQ0lcbiIKIAkJICJcdFx0XHQyNyA9IEFWZXJNZWRpYSBVbHRyYVRWIDE1MDAgTUNFXG4iCisJCSAiXHRcdFx0MjggPSBTb255IFZBSU8gR2lnYSBQb2NrZXQgKEVOWCBLaWt5b3UpXG4iCiAJCSAiXHRcdFx0IDAgPSBBdXRvZGV0ZWN0IChkZWZhdWx0KVxuIgogCQkgIlx0XHRcdC0xID0gSWdub3JlIHRoaXMgY2FyZFxuXHRcdCIpOwogTU9EVUxFX1BBUk1fREVTQyhwYWwsICJTZXQgUEFMIHN0YW5kYXJkOiBCR0gsIERLLCBJLCBNLCBOLCBOYywgNjAiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCmluZGV4IGMxYjdlYzQuLmE3MWU4YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJCUlWVFZfRVJSKCJpdnR2X2luaXRfbXBlZ19kZWNvZGVyIGZhaWxlZCB0byBzdGFydCBwbGF5YmFja1xuIik7CiAJCXJldHVybjsKIAl9Ci0JaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZGVjX21ib3gsIElWVFZfTUJPWF9ETUEsIGRhdGEpOworCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmRlY19tYm94LCBJVlRWX01CT1hfRE1BLCAyLCBkYXRhKTsKIAltZW1fb2Zmc2V0ID0gaXR2LT5kZWNfbWVtICsgZGF0YVsxXTsKIAogCWlmICgocmVhZGJ5dGVzID0gbG9hZF9md19kaXJlY3QoSVZUVl9ERUNPREVfSU5JVF9NUEVHX0ZJTEVOQU1FLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pcnEuYwppbmRleCBjZDlkYjBiLi4xMmQzNmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pcnEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pcnEuYwpAQCAtNTYyLDcgKzU2Miw3IEBACiAJdTMyIGRhdGFbQ1gyMzQxWF9NQk9YX01BWF9EQVRBXTsKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnM7CiAKLQlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5lbmNfbWJveCwgSVZUVl9NQk9YX0RNQV9FTkQsIGRhdGEpOworCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmVuY19tYm94LCBJVlRWX01CT1hfRE1BX0VORCwgMiwgZGF0YSk7CiAJSVZUVl9ERUJVR19ISV9JUlEoIkVOQyBETUEgQ09NUExFVEUgJXggJWQgKCVkKVxuIiwgZGF0YVswXSwgZGF0YVsxXSwgaXR2LT5jdXJfZG1hX3N0cmVhbSk7CiAKIAlkZWxfdGltZXIoJml0di0+ZG1hX3RpbWVyKTsKQEAgLTYzOCw3ICs2MzgsNyBAQAogCXUzMiBkYXRhW0NYMjM0MVhfTUJPWF9NQVhfREFUQV07CiAKIAlkZWxfdGltZXIoJml0di0+ZG1hX3RpbWVyKTsKLQlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5lbmNfbWJveCwgSVZUVl9NQk9YX0RNQV9FTkQsIGRhdGEpOworCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmVuY19tYm94LCBJVlRWX01CT1hfRE1BX0VORCwgMiwgZGF0YSk7CiAJSVZUVl9ERUJVR19XQVJOKCJETUEgRVJST1IgJTA4eCAlMDh4ICUwOHggJWRcbiIsIGRhdGFbMF0sIGRhdGFbMV0sCiAJCQkJcmVhZF9yZWcoSVZUVl9SRUdfRE1BU1RBVFVTKSwgaXR2LT5jdXJfZG1hX3N0cmVhbSk7CiAJd3JpdGVfcmVnKHJlYWRfcmVnKElWVFZfUkVHX0RNQVNUQVRVUykgJiAzLCBJVlRWX1JFR19ETUFTVEFUVVMpOwpAQCAtNjY5LDcgKzY2OSw3IEBACiAJc3RydWN0IGl2dHZfc3RyZWFtICpzOwogCiAJLyogR2V0IERNQSBkZXN0aW5hdGlvbiBhbmQgc2l6ZSBhcmd1bWVudHMgZnJvbSBjYXJkICovCi0JaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZW5jX21ib3gsIElWVFZfTUJPWF9ETUEsIGRhdGEpOworCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmVuY19tYm94LCBJVlRWX01CT1hfRE1BLCA3LCBkYXRhKTsKIAlJVlRWX0RFQlVHX0hJX0lSUSgiRU5DIFNUQVJUIENBUCAlZDogJTA4eCAlMDh4XG4iLCBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdKTsKIAogCWlmIChkYXRhWzBdID4gMiB8fCBkYXRhWzFdID09IDAgfHwgZGF0YVsyXSA9PSAwKSB7CkBAIC03MTMsOSArNzEzLDkgQEAKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnM7CiAKIAkvKiBZVVYgb3IgTVBHICovCi0JaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZGVjX21ib3gsIElWVFZfTUJPWF9ETUEsIGRhdGEpOwogCiAJaWYgKHRlc3RfYml0KElWVFZfRl9JX0RFQ19ZVVYsICZpdHYtPmlfZmxhZ3MpKSB7CisJCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmRlY19tYm94LCBJVlRWX01CT1hfRE1BLCAyLCBkYXRhKTsKIAkJaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZSA9CiAJCQkJIDEwODAgKiAoKGl0di0+eXV2X2luZm8udjRsMl9zcmNfaCArIDMxKSAmIH4zMSk7CiAJCWl0di0+ZG1hX2RhdGFfcmVxX29mZnNldCA9IGRhdGFbMV07CkBAIC03MjQsNiArNzI0LDcgQEAKIAkJcyA9ICZpdHYtPnN0cmVhbXNbSVZUVl9ERUNfU1RSRUFNX1RZUEVfWVVWXTsKIAl9CiAJZWxzZSB7CisJCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmRlY19tYm94LCBJVlRWX01CT1hfRE1BLCAzLCBkYXRhKTsKIAkJaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZSA9IG1pbl90KHUzMiwgZGF0YVsyXSwgMHgxMDAwMCk7CiAJCWl0di0+ZG1hX2RhdGFfcmVxX29mZnNldCA9IGRhdGFbMV07CiAJCXMgPSAmaXR2LT5zdHJlYW1zW0lWVFZfREVDX1NUUkVBTV9UWVBFX01QR107CkBAIC05NDAsOSArOTQxLDEwIEBACiAJCQkJaXZ0dl9kbWFfZW5jX3N0YXJ0KHMpOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGkgPT0gSVZUVl9NQVhfU1RSRUFNUyAmJiB0ZXN0X2FuZF9jbGVhcl9iaXQoSVZUVl9GX0lfVURNQV9QRU5ESU5HLCAmaXR2LT5pX2ZsYWdzKSkgeworCisJCWlmIChpID09IElWVFZfTUFYX1NUUkVBTVMgJiYKKwkJICAgIHRlc3RfYml0KElWVFZfRl9JX1VETUFfUEVORElORywgJml0di0+aV9mbGFncykpCiAJCQlpdnR2X3VkbWFfc3RhcnQoaXR2KTsKLQkJfQogCX0KIAogCWlmICgoY29tYm8gJiBJVlRWX0lSUV9ETUEpICYmICF0ZXN0X2JpdChJVlRWX0ZfSV9QSU8sICZpdHYtPmlfZmxhZ3MpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmMKaW5kZXggMWI1YzBhYy4uODQ1NzdmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LW1haWxib3guYwpAQCAtMzY5LDEwICszNjksMTEgQEAKIH0KIAogLyogVGhpcyBvbmUgaXMgZm9yIHN0dWZmIHRoYXQgY2FuJ3Qgc2xlZXAuLiBpcnEgaGFuZGxlcnMsIGV0Yy4uICovCi12b2lkIGl2dHZfYXBpX2dldF9kYXRhKHN0cnVjdCBpdnR2X21haWxib3hfZGF0YSAqbWJkYXRhLCBpbnQgbWIsIHUzMiBkYXRhW10pCit2b2lkIGl2dHZfYXBpX2dldF9kYXRhKHN0cnVjdCBpdnR2X21haWxib3hfZGF0YSAqbWJkYXRhLCBpbnQgbWIsCisJCSAgICAgICBpbnQgYXJnYywgdTMyIGRhdGFbXSkKIHsKKwl2b2xhdGlsZSB1MzIgX19pb21lbSAqcCA9IG1iZGF0YS0+bWJveFttYl0uZGF0YTsKIAlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBDWDIzNDFYX01CT1hfTUFYX0RBVEE7IGkrKykKLQkJZGF0YVtpXSA9IHJlYWRsKCZtYmRhdGEtPm1ib3hbbWJdLmRhdGFbaV0pOworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyssIHArKykKKwkJZGF0YVtpXSA9IHJlYWRsKHApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5oCmluZGV4IDZlZjEyMDkuLjgyNDc2NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LW1haWxib3guaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmgKQEAgLTI0LDcgKzI0LDggQEAKICNkZWZpbmUgSVZUVl9NQk9YX0RNQV9FTkQgICAgICAgICA4CiAjZGVmaW5lIElWVFZfTUJPWF9ETUEgICAgICAgICAgICAgOQogCi12b2lkIGl2dHZfYXBpX2dldF9kYXRhKHN0cnVjdCBpdnR2X21haWxib3hfZGF0YSAqbWJveCwgaW50IG1iLCB1MzIgZGF0YVtdKTsKK3ZvaWQgaXZ0dl9hcGlfZ2V0X2RhdGEoc3RydWN0IGl2dHZfbWFpbGJveF9kYXRhICptYmRhdGEsIGludCBtYiwKKwkJICAgICAgIGludCBhcmdjLCB1MzIgZGF0YVtdKTsKIGludCBpdnR2X2FwaShzdHJ1Y3QgaXZ0diAqaXR2LCBpbnQgY21kLCBpbnQgYXJncywgdTMyIGRhdGFbXSk7CiBpbnQgaXZ0dl92YXBpX3Jlc3VsdChzdHJ1Y3QgaXZ0diAqaXR2LCB1MzIgZGF0YVtDWDIzNDFYX01CT1hfTUFYX0RBVEFdLCBpbnQgY21kLCBpbnQgYXJncywgLi4uKTsKIGludCBpdnR2X3ZhcGkoc3RydWN0IGl2dHYgKml0diwgaW50IGNtZCwgaW50IGFyZ3MsIC4uLik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKaW5kZXggZTEyYzYwMi4uMWY5Mzg3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwpAQCAtNTc3LDEwICs1NzcsMTQgQEAKIAkJY2xlYXJfYml0KElWVFZfRl9JX0VPUywgJml0di0+aV9mbGFncyk7CiAKIAkJLyogSW5pdGlhbGl6ZSBEaWdpdGl6ZXIgZm9yIENhcHR1cmUgKi8KKwkJLyogQXZvaWQgdGlubnkgYXVkaW8gcHJvYmxlbSAtIGVuc3VyZSBhdWRpbyBjbG9ja3MgYXJlIGdvaW5nICovCisJCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF9hdWRpbywgYXVkaW8sIHNfc3RyZWFtLCAxKTsKKwkJLyogQXZvaWQgdW5wcmVkaWN0YWJsZSBQQ0kgYnVzIGhhbmcgLSBkaXNhYmxlIHZpZGVvIGNsb2NrcyAqLwogCQl2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfdmlkZW8sIHZpZGVvLCBzX3N0cmVhbSwgMCk7Ci0JCWl2dHZfbXNsZWVwX3RpbWVvdXQoMzAwLCAxKTsKKwkJaXZ0dl9tc2xlZXBfdGltZW91dCgxNTAsIDEpOwogCQlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX0VOQ19JTklUSUFMSVpFX0lOUFVULCAwKTsKIAkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCB2aWRlbywgc19zdHJlYW0sIDEpOworCQlpdnR2X21zbGVlcF90aW1lb3V0KDE1MCwgMSk7CiAJfQogCiAJLyogYmVnaW5fY2FwdHVyZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5jCmluZGV4IGQwN2FkNmMuLjFkYWYxZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmMKQEAgLTIxMyw2ICsyMTMsNyBAQAogCXdyaXRlX3JlZ19zeW5jKHJlYWRfcmVnKElWVFZfUkVHX0RNQVhGRVIpIHwgMHgwMSwgSVZUVl9SRUdfRE1BWEZFUik7CiAJc2V0X2JpdChJVlRWX0ZfSV9ETUEsICZpdHYtPmlfZmxhZ3MpOwogCXNldF9iaXQoSVZUVl9GX0lfVURNQSwgJml0di0+aV9mbGFncyk7CisJY2xlYXJfYml0KElWVFZfRl9JX1VETUFfUEVORElORywgJml0di0+aV9mbGFncyk7CiB9CiAKIHZvaWQgaXZ0dl91ZG1hX3ByZXBhcmUoc3RydWN0IGl2dHYgKml0dikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDExMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MTEyLmMKaW5kZXggZmM0ZGQ2MC4uNzQzOGY4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MTEyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MTEyLmMKQEAgLTUxNCw3ICs1MTQsNyBAQAogCS8qIHBvbGwgdG8gdmVyaWZ5IG91dCBvZiBzdGFuZGJ5LiBNdXN0IFBvbGwgdGhpcyBiaXQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKIAkJbXQ5dDExMl9yZWdfcmVhZChkYXRhLCBjbGllbnQsIDB4MDAxOCk7Ci0JCWlmICgweDQwMDAgJiBkYXRhKQorCQlpZiAoISgweDQwMDAgJiBkYXRhKSkKIAkJCWJyZWFrOwogCiAJCW1kZWxheSgxMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCmluZGV4IDkxZGY3ZWMuLjFhMzRkMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCkBAIC0yNTcsMTkgKzI1NywxOCBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbXQ5djAyMl9xdWVyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7Ci0JdW5zaWduZWQgaW50IHdpZHRoX2ZsYWc7Ci0KLQlpZiAoaWNsLT5xdWVyeV9idXNfcGFyYW0pCi0JCXdpZHRoX2ZsYWcgPSBpY2wtPnF1ZXJ5X2J1c19wYXJhbShpY2wpICYKLQkJCVNPQ0FNX0RBVEFXSURUSF9NQVNLOwotCWVsc2UKLQkJd2lkdGhfZmxhZyA9IFNPQ0FNX0RBVEFXSURUSF8xMDsKLQotCXJldHVybiBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HIHwKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBTT0NBTV9NQVNURVIgfCBTT0NBTV9TTEFWRSB8CisJCVNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkcgfAogCQlTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cgfAogCQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cgfAotCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIIHwgU09DQU1fTUFTVEVSIHwgU09DQU1fU0xBVkUgfAotCQl3aWR0aF9mbGFnOworCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIOworCisJaWYgKGljbC0+cXVlcnlfYnVzX3BhcmFtKQorCQlmbGFncyB8PSBpY2wtPnF1ZXJ5X2J1c19wYXJhbShpY2wpICYgU09DQU1fREFUQVdJRFRIX01BU0s7CisJZWxzZQorCQlmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfMTA7CisKKwlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgbXQ5djAyMl9zX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCmluZGV4IGMxZmM2ZGMuLjlmMDFmMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYwpAQCAtMTY5LDcgKzE2OSwxMSBAQAogc3RhdGljIGludCBteGJfcHJvYmUoc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYpCiB7CiAJc3RydWN0IG14YiAqbXhiID0gTlVMTDsKKwlpbnQgZXJyOwogCisJZXJyID0gc2FhNzE0Nl92dl9kZXZpbml0KGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAlteGIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXhiKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG14YiA9PSBOVUxMKSB7CiAJCURFQl9EKCgibm90IGVub3VnaCBrZXJuZWwgbWVtb3J5LlxuIikpOwpAQCAtMjk0LDcgKzI5OCw3IEBACiAJLyogc2VsZWN0IHR1bmVyLW91dHB1dCBvbiBzYWE3MTExYSAqLwogCWkgPSAwOwogCXNhYTcxMTFhX2NhbGwobXhiLCB2aWRlbywgc19yb3V0aW5nLCBTQUE3MTE1X0NPTVBPU0lURTAsCi0JCVNBQTcxMTFfRk1UX0NDSVIgfCBTQUE3MTExX1ZCSV9CWVBBU1MsIDApOworCQlTQUE3MTExX0ZNVF9DQ0lSLCAwKTsKIAogCS8qIHNlbGVjdCBhIHR1bmVyIHR5cGUgKi8KIAl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFY7CkBAIC01MTgsOCArNTIyLDggQEAKIAkJcmV0dXJuIGVycjsKIAogCS8qIHN3aXRjaCB2aWRlbyBpbiBzYWE3MTExYSAqLwotCWlmIChzYWE3MTExYV9jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgaSwgMCwgMCkpCi0JCXByaW50ayhLRVJOX0VSUiAiVklESU9DX1NfSU5QVVQ6IGNvdWxkIG5vdCBhZGRyZXNzIHNhYTcxMTFhICMxLlxuIik7CisJaWYgKHNhYTcxMTFhX2NhbGwobXhiLCB2aWRlbywgc19yb3V0aW5nLCBpLCBTQUE3MTExX0ZNVF9DQ0lSLCAwKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3Mgc2FhNzExMWEuXG4iKTsKIAogCS8qIHN3aXRjaCB0aGUgYXVkaW8tc291cmNlIG9ubHkgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKDAgPT0gbXhiLT5jdXJfbXV0ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jCmluZGV4IDNhNDVlOTQuLjdmOGVjZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYwpAQCAtNTQ3LDcgKzU0Nyw2IEBACiAJfSwKIH07CiAKLQogLyoKICAqIGdlbmVyYWwgZnVuY3Rpb24KICAqLwpAQCAtNjM0LDcgKzYzMywxMiBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9NQVNURVIgfAogCQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwKLQkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8IHByaXYtPmluZm8tPmJ1c3dpZHRoOworCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIOworCisJaWYgKHByaXYtPmluZm8tPmZsYWdzICYgT1Y3NzJYX0ZMQUdfOEJJVCkKKwkJZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzg7CisJZWxzZQorCQlmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfMTA7CiAKIAlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CiB9CkBAIC0xMDQwLDE1ICsxMDQ0LDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKgotCSAqIG92NzcyeCBvbmx5IHVzZSA4IG9yIDEwIGJpdCBidXMgd2lkdGgKLQkgKi8KLQlpZiAoU09DQU1fREFUQVdJRFRIXzEwICE9IHByaXYtPmluZm8tPmJ1c3dpZHRoICYmCi0JICAgIFNPQ0FNX0RBVEFXSURUSF84ICAhPSBwcml2LT5pbmZvLT5idXN3aWR0aCkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImJ1cyB3aWR0aCBlcnJvclxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qCiAJICogY2hlY2sgYW5kIHNob3cgcHJvZHVjdCBJRCBhbmQgbWFudWZhY3R1cmVyIElECiAJICovCiAJcGlkID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgUElEKTsKQEAgLTExMzAsNyArMTEyNSw2IEBACiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqZGlkKQogewogCXN0cnVjdCBvdjc3MnhfcHJpdiAgICAgICAgKnByaXY7Ci0Jc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbyAqaW5mbzsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBpMmNfYWRhcHRlciAgICAgICAgKmFkYXB0ZXIgPSB0b19pMmNfYWRhcHRlcihjbGllbnQtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgICAgKmljbDsKQEAgLTExNDUsOCArMTEzOSw2IEBACiAJaWYgKCFpY2wgfHwgIWljbC0+cHJpdikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpbmZvID0gaWNsLT5wcml2OwotCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7CiAJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwKIAkJCSJJMkMtQWRhcHRlciBkb2Vzbid0IHN1cHBvcnQgIgpAQCAtMTE1OCw3ICsxMTUwLDcgQEAKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcHJpdi0+aW5mbyA9IGluZm87CisJcHJpdi0+aW5mbyA9IGljbC0+cHJpdjsKIAogCXY0bDJfaTJjX3N1YmRldl9pbml0KCZwcml2LT5zdWJkZXYsIGNsaWVudCwgJm92NzcyeF9zdWJkZXZfb3BzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaAppbmRleCBkZTU0ODVmLi5jYjQwNTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaApAQCAtMjMzLDggKzIzMyw5IEBACiAJaW50IHN0YXRlX2VuY29kZXJfd2FpdG9rOyAgICAgLyogRW5jb2RlciBwcmUtd2FpdCBkb25lICovCiAJaW50IHN0YXRlX2VuY29kZXJfcnVub2s7ICAgICAgLyogRW5jb2RlciBoYXMgcnVuIGZvciA+PSAuMjUgc2VjICovCiAJaW50IHN0YXRlX2RlY29kZXJfcnVuOyAgICAgICAgLyogRGVjb2RlciBpcyBydW5uaW5nICovCisJaW50IHN0YXRlX2RlY29kZXJfcmVhZHk7ICAgICAgLyogRGVjb2RlciBpcyBzdGFiaWxpemVkICYgc3RyZWFtYWJsZSAqLwogCWludCBzdGF0ZV91c2JzdHJlYW1fcnVuOyAgICAgIC8qIEZYMiBpcyBzdHJlYW1pbmcgKi8KLQlpbnQgc3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQ7ICAvKiBEZWNvZGVyIGlkbGUgZm9yID4gNTBtc2VjICovCisJaW50IHN0YXRlX2RlY29kZXJfcXVpZXNjZW50OyAgLyogRGVjb2RlciBpZGxlIGZvciBtaW5pbWFsIGludGVydmFsICovCiAJaW50IHN0YXRlX3BpcGVsaW5lX2NvbmZpZzsgICAgLyogUGlwZWxpbmUgaXMgY29uZmlndXJlZCAqLwogCWludCBzdGF0ZV9waXBlbGluZV9yZXE7ICAgICAgIC8qIFNvbWVib2R5IHdhbnRzIHRvIHN0cmVhbSAqLwogCWludCBzdGF0ZV9waXBlbGluZV9wYXVzZTsgICAgIC8qIFBpcGVsaW5lIG11c3QgYmUgcGF1c2VkICovCkBAIC0yNTUsOSArMjU2LDE2IEBACiAJdm9pZCAoKnN0YXRlX2Z1bmMpKHZvaWQgKik7CiAJdm9pZCAqc3RhdGVfZGF0YTsKIAotCS8qIFRpbWVyIGZvciBtZWFzdXJpbmcgZGVjb2RlciBzZXR0bGluZyB0aW1lICovCisJLyogVGltZXIgZm9yIG1lYXN1cmluZyByZXF1aXJlZCBkZWNvZGVyIHNldHRsaW5nIHRpbWUgYmVmb3JlIHdlJ3JlCisJICAgYWxsb3dlZCB0byBmaXJlIGl0IHVwIGFnYWluLiAqLwogCXN0cnVjdCB0aW1lcl9saXN0IHF1aWVzY2VudF90aW1lcjsKIAorCS8qIFRpbWVyIGZvciBtZWFzdXJpbmcgZGVjb2RlciBzdGFiaWxpemF0aW9uIHRpbWUsIHdoaWNoIGlzIHRoZQorCSAgIGFtb3VudCBvZiB0aW1lIHdlIG5lZWQgdG8gbGV0IHRoZSBkZWNvZGVyIHJ1biBiZWZvcmUgd2UgY2FuCisJICAgdHJ1c3QgaXRzIG91dHB1dCAob3RoZXJ3aXNlIHRoZSBlbmNvZGVyIG1pZ2h0IHNlZSBnYXJiYWdlIGFuZAorCSAgIHRoZW4gZmFpbCB0byBzdGFydCBjb3JyZWN0bHkpLiAqLworCXN0cnVjdCB0aW1lcl9saXN0IGRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lcjsKKwogCS8qIFRpbWVyIGZvciBtZWFzdXJpbmcgZW5jb2RlciBwcmUtd2FpdCB0aW1lICovCiAJc3RydWN0IHRpbWVyX2xpc3QgZW5jb2Rlcl93YWl0X3RpbWVyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCmluZGV4IDFiYmRhYjAuLjcxMmIzMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCkBAIC00OCwxMSArNDgsMTMgQEAKICAgIGJlZm9yZSB3ZSBhcmUgYWxsb3dlZCB0byBzdGFydCBpdCBydW5uaW5nLiAqLwogI2RlZmluZSBUSU1FX01TRUNfREVDT0RFUl9XQUlUIDUwCiAKKy8qIFRoaXMgZGVmaW5lcyBhIG1pbmltdW0gaW50ZXJ2YWwgdGhhdCB0aGUgZGVjb2RlciBtdXN0IGJlIGFsbG93ZWQgdG8gcnVuCisgICBiZWZvcmUgd2UgY2FuIHNhZmVseSBiZWdpbiB1c2luZyBpdHMgc3RyZWFtaW5nIG91dHB1dC4gKi8KKyNkZWZpbmUgVElNRV9NU0VDX0RFQ09ERVJfU1RBQklMSVpBVElPTl9XQUlUIDMwMAorCiAvKiBUaGlzIGRlZmluZXMgYSBtaW5pbXVtIGludGVydmFsIHRoYXQgdGhlIGVuY29kZXIgbXVzdCByZW1haW4gcXVpZXQKLSAgIGJlZm9yZSB3ZSBhcmUgYWxsb3dlZCB0byBjb25maWd1cmUgaXQuICBJIGhhZCB0aGlzIG9yaWdpbmFsbHkgc2V0IHRvCi0gICA1MG1zZWMsIGJ1dCBNYXJ0aW4gRGF1c2thcmR0IDxtYXJ0aW4uZGF1c2thcmR0QGdteC5kZT4gcmVwb3J0cyB0aGF0Ci0gICB0aGluZ3Mgd29yayBiZXR0ZXIgd2hlbiBpdCdzIHNldCB0byAxMDBtc2VjLiAqLwotI2RlZmluZSBUSU1FX01TRUNfRU5DT0RFUl9XQUlUIDEwMAorICAgYmVmb3JlIHdlIGFyZSBhbGxvd2VkIHRvIGNvbmZpZ3VyZSBpdC4gKi8KKyNkZWZpbmUgVElNRV9NU0VDX0VOQ09ERVJfV0FJVCA1MAogCiAvKiBUaGlzIGRlZmluZXMgdGhlIG1pbmltdW0gaW50ZXJ2YWwgdGhhdCB0aGUgZW5jb2RlciBtdXN0IHN1Y2Nlc3NmdWxseSBydW4KICAgIGJlZm9yZSB3ZSBjb25zaWRlciB0aGF0IHRoZSBlbmNvZGVyIGhhcyBydW4gYXQgbGVhc3Qgb25jZSBzaW5jZSBpdHMKQEAgLTMzNCw2ICszMzYsNyBAQAogc3RhdGljIHZvaWQgcHZyMl9oZHdfaW50ZXJuYWxfZmluZF9zdGRlbnVtKHN0cnVjdCBwdnIyX2hkdyAqaGR3KTsKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X2ludGVybmFsX3NldF9zdGRfYXZhaWwoc3RydWN0IHB2cjJfaGR3ICpoZHcpOwogc3RhdGljIHZvaWQgcHZyMl9oZHdfcXVpZXNjZW50X3RpbWVvdXQodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgdm9pZCBwdnIyX2hkd19kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZW91dCh1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X2VuY29kZXJfd2FpdF90aW1lb3V0KHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIHZvaWQgcHZyMl9oZHdfZW5jb2Rlcl9ydW5fdGltZW91dCh1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyBpbnQgcHZyMl9pc3N1ZV9zaW1wbGVfY21kKHN0cnVjdCBwdnIyX2hkdyAqLHUzMik7CkBAIC0xNzA1LDYgKzE3MDgsNyBAQAogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB2NGwyIHN0cmVhbT0lcyIsCiAJCSAgIChlbmFibGVmbCA/ICJvbiIgOiAib2ZmIikpOwogCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCB2aWRlbywgc19zdHJlYW0sIGVuYWJsZWZsKTsKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwgYXVkaW8sIHNfc3RyZWFtLCBlbmFibGVmbCk7CiAJaWYgKGhkdy0+ZGVjb2Rlcl9jbGllbnRfaWQpIHsKIAkJLyogV2UgZ2V0IGhlcmUgaWYgdGhlIGVuY29kZXIgaGFzIGJlZW4gbm90aWNlZC4gIE90aGVyd2lzZQogCQkgICB3ZSdsbCBpc3N1ZSBhIHdhcm5pbmcgdG8gdGhlIHVzZXIgKHdoaWNoIHNob3VsZApAQCAtMjQ2MSw2ICsyNDY1LDExIEBACiAJaGR3LT5xdWllc2NlbnRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhkdzsKIAloZHctPnF1aWVzY2VudF90aW1lci5mdW5jdGlvbiA9IHB2cjJfaGR3X3F1aWVzY2VudF90aW1lb3V0OwogCisJaW5pdF90aW1lcigmaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIpOworCWhkdy0+ZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyloZHc7CisJaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIuZnVuY3Rpb24gPQorCQlwdnIyX2hkd19kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZW91dDsKKwogCWluaXRfdGltZXIoJmhkdy0+ZW5jb2Rlcl93YWl0X3RpbWVyKTsKIAloZHctPmVuY29kZXJfd2FpdF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaGR3OwogCWhkdy0+ZW5jb2Rlcl93YWl0X3RpbWVyLmZ1bmN0aW9uID0gcHZyMl9oZHdfZW5jb2Rlcl93YWl0X3RpbWVvdXQ7CkBAIC0yNjc0LDYgKzI2ODMsNyBAQAogIGZhaWw6CiAJaWYgKGhkdykgewogCQlkZWxfdGltZXJfc3luYygmaGR3LT5xdWllc2NlbnRfdGltZXIpOworCQlkZWxfdGltZXJfc3luYygmaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIpOwogCQlkZWxfdGltZXJfc3luYygmaGR3LT5lbmNvZGVyX3J1bl90aW1lcik7CiAJCWRlbF90aW1lcl9zeW5jKCZoZHctPmVuY29kZXJfd2FpdF90aW1lcik7CiAJCWlmIChoZHctPndvcmtxdWV1ZSkgewpAQCAtMjc0MSw2ICsyNzUxLDcgQEAKIAkJaGR3LT53b3JrcXVldWUgPSBOVUxMOwogCX0KIAlkZWxfdGltZXJfc3luYygmaGR3LT5xdWllc2NlbnRfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZoZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lcik7CiAJZGVsX3RpbWVyX3N5bmMoJmhkdy0+ZW5jb2Rlcl9ydW5fdGltZXIpOwogCWRlbF90aW1lcl9zeW5jKCZoZHctPmVuY29kZXJfd2FpdF90aW1lcik7CiAJaWYgKGhkdy0+ZndfYnVmZmVyKSB7CkBAIC00NDUyLDcgKzQ0NjMsNyBAQAogCiAJc3dpdGNoIChoZHctPnBhdGh3YXlfc3RhdGUpIHsKIAljYXNlIFBWUjJfUEFUSFdBWV9BTkFMT0c6Ci0JCWlmIChoZHctPnN0YXRlX2RlY29kZXJfcnVuKSB7CisJCWlmIChoZHctPnN0YXRlX2RlY29kZXJfcnVuICYmIGhkdy0+c3RhdGVfZGVjb2Rlcl9yZWFkeSkgewogCQkJLyogSW4gYW5hbG9nIG1vZGUsIGlmIHRoZSBkZWNvZGVyIGlzIHJ1bm5pbmcsIHRoZW4KIAkJCSAgIHJ1biB0aGUgZW5jb2Rlci4gKi8KIAkJCXJldHVybiAhMDsKQEAgLTQ1MTksNiArNDUzMCwxNyBAQAogfQogCiAKKy8qIFRpbWVvdXQgZnVuY3Rpb24gZm9yIGRlY29kZXIgc3RhYmlsaXphdGlvbiB0aW1lci4gKi8KK3N0YXRpYyB2b2lkIHB2cjJfaGR3X2RlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IChzdHJ1Y3QgcHZyMl9oZHcgKilkYXRhOworCWhkdy0+c3RhdGVfZGVjb2Rlcl9yZWFkeSA9ICEwOworCXRyYWNlX3N0Yml0KCJzdGF0ZV9kZWNvZGVyX3JlYWR5IiwgaGR3LT5zdGF0ZV9kZWNvZGVyX3JlYWR5KTsKKwloZHctPnN0YXRlX3N0YWxlID0gITA7CisJcXVldWVfd29yayhoZHctPndvcmtxdWV1ZSwgJmhkdy0+d29ya3BvbGwpOworfQorCisKIC8qIFRpbWVvdXQgZnVuY3Rpb24gZm9yIGVuY29kZXIgd2FpdCB0aW1lci4gKi8KIHN0YXRpYyB2b2lkIHB2cjJfaGR3X2VuY29kZXJfd2FpdF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTQ1NTcsOCArNDU3OSwxMyBAQAogCQl9CiAJCWhkdy0+c3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQgPSAwOwogCQloZHctPnN0YXRlX2RlY29kZXJfcnVuID0gMDsKLQkJLyogcGFyYW5vaWEgLSBzb2x2ZSByYWNlIGlmIHRpbWVyIGp1c3QgY29tcGxldGVkICovCisJCS8qIHBhcmFub2lhIC0gc29sdmUgcmFjZSBpZiB0aW1lcihzKSBqdXN0IGNvbXBsZXRlZCAqLwogCQlkZWxfdGltZXJfc3luYygmaGR3LT5xdWllc2NlbnRfdGltZXIpOworCQkvKiBLaWxsIHRoZSBzdGFiaWxpemF0aW9uIHRpbWVyLCBpbiBjYXNlIHdlJ3JlIGtpbGxpbmcgdGhlCisJCSAgIGVuY29kZXIgYmVmb3JlIHRoZSBwcmV2aW91cyBzdGFiaWxpemF0aW9uIGludGVydmFsIGhhcworCQkgICBiZWVuIHByb3Blcmx5IHRpbWVkLiAqLworCQlkZWxfdGltZXJfc3luYygmaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIpOworCQloZHctPnN0YXRlX2RlY29kZXJfcmVhZHkgPSAwOwogCX0gZWxzZSB7CiAJCWlmICghaGR3LT5zdGF0ZV9kZWNvZGVyX3F1aWVzY2VudCkgewogCQkJaWYgKCF0aW1lcl9wZW5kaW5nKCZoZHctPnF1aWVzY2VudF90aW1lcikpIHsKQEAgLTQ1OTYsMTAgKzQ2MjMsMjEgQEAKIAkJaWYgKGhkdy0+ZmxhZ19kZWNvZGVyX21pc3NlZCkgcmV0dXJuIDA7CiAJCWlmIChwdnIyX2RlY29kZXJfZW5hYmxlKGhkdywhMCkgPCAwKSByZXR1cm4gMDsKIAkJaGR3LT5zdGF0ZV9kZWNvZGVyX3F1aWVzY2VudCA9IDA7CisJCWhkdy0+c3RhdGVfZGVjb2Rlcl9yZWFkeSA9IDA7CiAJCWhkdy0+c3RhdGVfZGVjb2Rlcl9ydW4gPSAhMDsKKwkJaWYgKGhkdy0+ZGVjb2Rlcl9jbGllbnRfaWQgPT0gUFZSMl9DTElFTlRfSURfU0FBNzExNSkgeworCQkJaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIuZXhwaXJlcyA9CisJCQkJamlmZmllcyArCisJCQkJKEhaICogVElNRV9NU0VDX0RFQ09ERVJfU1RBQklMSVpBVElPTl9XQUlUIC8KKwkJCQkgMTAwMCk7CisJCQlhZGRfdGltZXIoJmhkdy0+ZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVyKTsKKwkJfSBlbHNlIHsKKwkJCWhkdy0+c3RhdGVfZGVjb2Rlcl9yZWFkeSA9ICEwOworCQl9CiAJfQogCXRyYWNlX3N0Yml0KCJzdGF0ZV9kZWNvZGVyX3F1aWVzY2VudCIsaGR3LT5zdGF0ZV9kZWNvZGVyX3F1aWVzY2VudCk7CiAJdHJhY2Vfc3RiaXQoInN0YXRlX2RlY29kZXJfcnVuIixoZHctPnN0YXRlX2RlY29kZXJfcnVuKTsKKwl0cmFjZV9zdGJpdCgic3RhdGVfZGVjb2Rlcl9yZWFkeSIsIGhkdy0+c3RhdGVfZGVjb2Rlcl9yZWFkeSk7CiAJcmV0dXJuICEwOwogfQogCkBAIC00Nzk3LDcgKzQ4MzUsOCBAQAogCQkJYnVmLGFjbnQsCiAJCQkid29ya2VyOiVzJXMlcyVzJXMlcyVzIiwKIAkJCShoZHctPnN0YXRlX2RlY29kZXJfcnVuID8KLQkJCSAiIDxkZWNvZGU6cnVuPiIgOgorCQkJIChoZHctPnN0YXRlX2RlY29kZXJfcmVhZHkgPworCQkJICAiPGRlY29kZTpydW4+IiA6ICIgPGRlY29kZTpzdGFydD4iKSA6CiAJCQkgKGhkdy0+c3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQgPwogCQkJICAiIiA6ICIgPGRlY29kZTpzdG9wPiIpKSwKIAkJCShoZHctPnN0YXRlX2RlY29kZXJfcXVpZXNjZW50ID8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKaW5kZXggNTZlNzBlYS4uNTFkMzAwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKQEAgLTMwNiw2ICszMDYsNyBAQAogCWludCBzdGF0ZV9lbmNvZGVyX29rOwogCWludCBzdGF0ZV9lbmNvZGVyX3J1bjsKIAlpbnQgc3RhdGVfZGVjb2Rlcl9ydW47CisJaW50IHN0YXRlX2RlY29kZXJfcmVhZHk7CiAJaW50IHN0YXRlX3VzYnN0cmVhbV9ydW47CiAJaW50IHN0YXRlX2RlY29kZXJfcXVpZXNjZW50OwogCWludCBzdGF0ZV9waXBlbGluZV9jb25maWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtY3RybC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWN0cmwuYwppbmRleCA1MGI0MTVlLi5mN2Y3ZTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtY3RybC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1jdHJsLmMKQEAgLTc1Myw3ICs3NTMsNyBAQAogCQlidWZbMF0gPSAweGZmOyAvKiBmaXhlZCAqLwogCiAJcmV0ID0gc2VuZF9jb250cm9sX21zZyhwZGV2LAotCQlTRVRfTFVNX0NUTCwgU0hVVFRFUl9NT0RFX0ZPUk1BVFRFUiwgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlTRVRfTFVNX0NUTCwgU0hVVFRFUl9NT0RFX0ZPUk1BVFRFUiwgJmJ1ZiwgMSk7CiAKIAlpZiAoIW1vZGUgJiYgcmV0ID49IDApIHsKIAkJaWYgKHZhbHVlIDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKaW5kZXggMjk0Zjg2MC4uMzIyYWM0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKQEAgLTg5OCwxOCArODk4LDggQEAKIAogc3RhdGljIHZvaWQgcHhhX2NhbWVyYV9hY3RpdmF0ZShzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2KQogewotCXN0cnVjdCBweGFjYW1lcmFfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwY2Rldi0+cGRhdGE7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gcGNkZXYtPnNvY19ob3N0LnY0bDJfZGV2LmRldjsKIAl1MzIgY2ljcjQgPSAwOwogCi0JZGV2X2RiZyhkZXYsICJSZWdpc3RlcmVkIHBsYXRmb3JtIGRldmljZSBhdCAlcCBkYXRhICVwXG4iLAotCQlwY2RldiwgcGRhdGEpOwotCi0JaWYgKHBkYXRhICYmIHBkYXRhLT5pbml0KSB7Ci0JCWRldl9kYmcoZGV2LCAiJXM6IEluaXQgZ3Bpb3NcbiIsIF9fZnVuY19fKTsKLQkJcGRhdGEtPmluaXQoZGV2KTsKLQl9Ci0KIAkvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCiAJX19yYXdfd3JpdGVsKDB4M2ZmLCBwY2Rldi0+YmFzZSArIENJQ1IwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9yajU0bjFjYjBjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3JqNTRuMWNiMGMuYwppbmRleCA4MDUyMjZlLi45Mjc3MTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3JqNTRuMWNiMGMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3JqNTRuMWNiMGMuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJdTggdmFsOwogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua180W10gPSB7CiAJezB4NDE3LCAwfSwKIAl7MHg0MmMsIDB9LAogCXsweDQyZCwgMHhmMH0sCkBAIC0xODYsNyArMTg2LDcgQEAKIAl7MHg0ZmUsIDJ9LAogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua181W10gPSB7CiAJezB4NTE0LCAwfSwKIAl7MHg1MTYsIDB9LAogCXsweDUxOCwgMH0sCkBAIC0yMDcsNyArMjA3LDcgQEAKIAl7MHg1ZmUsIDJ9LAogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzdbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua183W10gPSB7CiAJezB4NzBhLCAwfSwKIAl7MHg3MTQsIDB4ZmZ9LAogCXsweDcxNSwgMHhmZn0sCkBAIC0yMTUsNyArMjE1LDcgQEAKIAl7MHg3RkUsIDJ9LAogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzhbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua184W10gPSB7CiAJezB4ODAwLCAweDAwfSwKIAl7MHg4MDEsIDB4MDF9LAogCXsweDgwMiwgMHg2MX0sCkBAIC00MDMsMTIgKzQwMywxMiBAQAogCXsweDhGRSwgMn0sCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfMTBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua18xMFtdID0gewogCXsweDEwYmYsIDB4Njl9CiB9OwogCiAvKiBDbG9jayBkaXZpZGVycyAtIHRoZXNlIGFyZSBkZWZhdWx0IHJlZ2lzdGVyIHZhbHVlcywgZGl2aWRlciA9IHJlZ2lzdGVyICsgMSAqLwotY29uc3Qgc3RhdGljIHN0cnVjdCByajU0bjFfY2xvY2tfZGl2IGNsa19kaXYgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJqNTRuMV9jbG9ja19kaXYgY2xrX2RpdiA9IHsKIAkucmF0aW9fdGcJPSAzIC8qIGRlZmF1bHQ6IDUgKi8sCiAJLnJhdGlvX3QJPSA0IC8qIGRlZmF1bHQ6IDEgKi8sCiAJLnJhdGlvX3IJPSA0IC8qIGRlZmF1bHQ6IDAgKi8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCmluZGV4IDQ0ODczYTAuLmMwYTdmOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCkBAIC0xMDQsNiArMTA0LDEwIEBACiAJaWYgKGlkID09IFY0TDJfSURFTlRfU0FBNzExMSkKIAkJcmV0dXJuIHJlZyA8IDB4MjAgJiYgcmVnICE9IDB4MDEgJiYgcmVnICE9IDB4MGYgJiYKIAkJICAgICAgIChyZWcgPCAweDEzIHx8IHJlZyA+IDB4MTkpICYmIHJlZyAhPSAweDFkICYmIHJlZyAhPSAweDFlOworCWlmIChpZCA9PSBWNEwyX0lERU5UX1NBQTcxMTFBKQorCQlyZXR1cm4gcmVnIDwgMHgyMCAmJiByZWcgIT0gMHgwMSAmJiByZWcgIT0gMHgwZiAmJgorCQkgICAgICAgcmVnICE9IDB4MTQgJiYgcmVnICE9IDB4MTggJiYgcmVnICE9IDB4MTkgJiYKKwkJICAgICAgIHJlZyAhPSAweDFkICYmIHJlZyAhPSAweDFlOwogCiAJLyogY29tbW9uIGZvciBzYWE3MTEzLzQvNS84ICovCiAJaWYgKHVubGlrZWx5KChyZWcgPj0gMHgzYiAmJiByZWcgPD0gMHgzZikgfHwgcmVnID09IDB4NWMgfHwgcmVnID09IDB4NWYgfHwKQEAgLTk1NCw4ICs5NTgsNyBAQAogCTAxMSBOVFNDIE4gKDMuNThNSHopICAgICAgICAgICAgUEFMIE0gKDMuNThNSHopCiAJMTAwIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICBOVFNDLUphcGFuICgzLjU4TUh6KQogCSovCi0JaWYgKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTEgfHwKLQkgICAgc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMykgeworCWlmIChzdGF0ZS0+aWRlbnQgPD0gVjRMMl9JREVOVF9TQUE3MTEzKSB7CiAJCXU4IHJlZyA9IHNhYTcxMXhfcmVhZChzZCwgUl8wRV9DSFJPTUFfQ05UTF8xKSAmIDB4OGY7CiAKIAkJaWYgKHN0ZCA9PSBWNEwyX1NURF9QQUxfTSkgewpAQCAtMTIzMiwyMiArMTIzNSwxOSBAQAogCQkJICAgICB1MzIgaW5wdXQsIHUzMiBvdXRwdXQsIHUzMiBjb25maWcpCiB7CiAJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwotCXU4IG1hc2sgPSAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMSkgPyAweGY4IDogMHhmMDsKKwl1OCBtYXNrID0gKHN0YXRlLT5pZGVudCA8PSBWNEwyX0lERU5UX1NBQTcxMTFBKSA/IDB4ZjggOiAweGYwOwogCiAJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiZGVjb2RlciBzZXQgaW5wdXQgJWQgb3V0cHV0ICVkXG4iLAogCQlpbnB1dCwgb3V0cHV0KTsKIAogCS8qIHNhYTcxMTEvMyBkb2VzIG5vdCBoYXZlIHRoZXNlIGlucHV0cyAqLwotCWlmICgoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMyB8fAotCSAgICAgc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMSkgJiYKKwlpZiAoc3RhdGUtPmlkZW50IDw9IFY0TDJfSURFTlRfU0FBNzExMyAmJgogCSAgICAoaW5wdXQgPT0gU0FBNzExNV9DT01QT1NJVEU0IHx8CiAJICAgICBpbnB1dCA9PSBTQUE3MTE1X0NPTVBPU0lURTUpKSB7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoaW5wdXQgPiBTQUE3MTE1X1NWSURFTzMpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChvdXRwdXQgPiBTQUE3MTE1X0lQT1JUX09OKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoc3RhdGUtPmlucHV0ID09IGlucHV0ICYmIHN0YXRlLT5vdXRwdXQgPT0gb3V0cHV0KQogCQlyZXR1cm4gMDsKIAl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJub3cgc2V0dGluZyAlcyBpbnB1dCAlcyBvdXRwdXRcbiIsCkBAIC0xMjU2LDcgKzEyNTYsNyBAQAogCXN0YXRlLT5pbnB1dCA9IGlucHV0OwogCiAJLyogc2FhNzExMSBoYXMgc2xpZ2h0bHkgZGlmZmVyZW50IGlucHV0IG51bWJlcmluZyAqLwotCWlmIChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTExKSB7CisJaWYgKHN0YXRlLT5pZGVudCA8PSBWNEwyX0lERU5UX1NBQTcxMTFBKSB7CiAJCWlmIChpbnB1dCA+PSBTQUE3MTE1X0NPTVBPU0lURTQpCiAJCQlpbnB1dCAtPSAyOwogCQkvKiBzYWE3MTExIHNwZWNpZmljICovCkBAIC0xMjkyLDcgKzEyOTIsNyBAQAogewogCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAotCWlmIChzdGF0ZS0+aWRlbnQgIT0gVjRMMl9JREVOVF9TQUE3MTExKQorCWlmIChzdGF0ZS0+aWRlbnQgPiBWNEwyX0lERU5UX1NBQTcxMTFBKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlzYWE3MTF4X3dyaXRlKHNkLCAweDExLCAoc2FhNzExeF9yZWFkKHNkLCAweDExKSAmIDB4N2YpIHwKIAkJKHZhbCA/IDB4ODAgOiAwKSk7CkBAIC0xNTk2LDYgKzE1OTYsMTAgQEAKIAlzd2l0Y2ggKGNoaXBfaWQpIHsKIAljYXNlICcxJzoKIAkJc3RhdGUtPmlkZW50ID0gVjRMMl9JREVOVF9TQUE3MTExOworCQlpZiAoc2FhNzExeF9yZWFkKHNkLCBSXzAwX0NISVBfVkVSU0lPTikgJiAweGYwKSB7CisJCQl2NGxfaW5mbyhjbGllbnQsICJzYWE3MTExYSB2YXJpYW50IGZvdW5kXG4iKTsKKwkJCXN0YXRlLT5pZGVudCA9IFY0TDJfSURFTlRfU0FBNzExMUE7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSAnMyc6CiAJCXN0YXRlLT5pZGVudCA9IFY0TDJfSURFTlRfU0FBNzExMzsKQEAgLTE2MTIsNyArMTYxNiw3IEBACiAJZGVmYXVsdDoKIAkJc3RhdGUtPmlkZW50ID0gVjRMMl9JREVOVF9TQUE3MTExOwogCQl2NGwyX2luZm8oc2QsICJXQVJOSU5HOiBDaGlwIGlzIG5vdCBrbm93biAtIEZhbGxpbmcgYmFjayB0byBzYWE3MTExXG4iKTsKLQorCQlicmVhazsKIAl9CiAKIAlzdGF0ZS0+YXVkY2xrX2ZyZXEgPSA0ODAwMDsKQEAgLTE2MjMsNiArMTYyNyw3IEBACiAJc3RhdGUtPmNyeXN0YWxfZnJlcSA9IFNBQTcxMTVfRlJFUV8yNF81NzZfTUhaOwogCXN3aXRjaCAoc3RhdGUtPmlkZW50KSB7CiAJY2FzZSBWNEwyX0lERU5UX1NBQTcxMTE6CisJY2FzZSBWNEwyX0lERU5UX1NBQTcxMTFBOgogCQlzYWE3MTF4X3dyaXRlcmVncyhzZCwgc2FhNzExMV9pbml0KTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0lERU5UX1NBQTcxMTM6CkBAIC0xNjMyLDcgKzE2MzcsNyBAQAogCQlzdGF0ZS0+Y3J5c3RhbF9mcmVxID0gU0FBNzExNV9GUkVRXzMyXzExX01IWjsKIAkJc2FhNzExeF93cml0ZXJlZ3Moc2QsIHNhYTcxMTVfaW5pdF9hdXRvX2lucHV0KTsKIAl9Ci0JaWYgKHN0YXRlLT5pZGVudCAhPSBWNEwyX0lERU5UX1NBQTcxMTEpCisJaWYgKHN0YXRlLT5pZGVudCA+IFY0TDJfSURFTlRfU0FBNzExMUEpCiAJCXNhYTcxMXhfd3JpdGVyZWdzKHNkLCBzYWE3MTE1X2luaXRfbWlzYyk7CiAJc2FhNzExeF9zZXRfdjRsc3RkKHNkLCBWNEwyX1NURF9OVFNDKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYwppbmRleCAyZmU3YTcwLi4yNTBlZjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAjZGVmaW5lIFNBQTcxMjdfNjBIWl9EQUNfQ09OVFJPTCAweDE1CiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgc2FhNzEyN19pbml0X2NvbmZpZ182MGh6W10gPSB7CiAJeyBTQUE3MTI3X1JFR19CVVJTVF9TVEFSVCwgCQkJMHgxOSB9LAotCS8qIEJVUlNUX0VORCBpcyBhbHNvIHVzZWQgYXMgYSBjaGlwIElEIGluIHNhYTcxMjdfZGV0ZWN0X2NsaWVudCAqLworCS8qIEJVUlNUX0VORCBpcyBhbHNvIHVzZWQgYXMgYSBjaGlwIElEIGluIHNhYTcxMjdfcHJvYmUgKi8KIAl7IFNBQTcxMjdfUkVHX0JVUlNUX0VORCwgCQkJMHgxZCB9LAogCXsgU0FBNzEyN19SRUdfQ0hST01BX1BIQVNFLCAJCQkweGEzIH0sCiAJeyBTQUE3MTI3X1JFR19HQUlOVSwgCQkJCTB4OTggfSwKQEAgLTIwMCwxMCArMjAwLDEwIEBACiAJeyAwLCAwIH0KIH07CiAKLSNkZWZpbmUgU0FBNzEyN181MEhaX0RBQ19DT05UUk9MIDB4MDIKLXN0YXRpYyBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSBzYWE3MTI3X2luaXRfY29uZmlnXzUwaHpbXSA9IHsKKyNkZWZpbmUgU0FBNzEyN181MEhaX1BBTF9EQUNfQ09OVFJPTCAweDAyCitzdGF0aWMgc3RydWN0IGkyY19yZWdfdmFsdWUgc2FhNzEyN19pbml0X2NvbmZpZ181MGh6X3BhbFtdID0gewogCXsgU0FBNzEyN19SRUdfQlVSU1RfU1RBUlQsIAkJCTB4MjEgfSwKLQkvKiBCVVJTVF9FTkQgaXMgYWxzbyB1c2VkIGFzIGEgY2hpcCBJRCBpbiBzYWE3MTI3X2RldGVjdF9jbGllbnQgKi8KKwkvKiBCVVJTVF9FTkQgaXMgYWxzbyB1c2VkIGFzIGEgY2hpcCBJRCBpbiBzYWE3MTI3X3Byb2JlICovCiAJeyBTQUE3MTI3X1JFR19CVVJTVF9FTkQsIAkJCTB4MWQgfSwKIAl7IFNBQTcxMjdfUkVHX0NIUk9NQV9QSEFTRSwgCQkJMHgzZiB9LAogCXsgU0FBNzEyN19SRUdfR0FJTlUsIAkJCQkweDdkIH0sCkBAIC0yMjIsNiArMjIyLDI4IEBACiAJeyAwLCAwIH0KIH07CiAKKyNkZWZpbmUgU0FBNzEyN181MEhaX1NFQ0FNX0RBQ19DT05UUk9MIDB4MDgKK3N0YXRpYyBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSBzYWE3MTI3X2luaXRfY29uZmlnXzUwaHpfc2VjYW1bXSA9IHsKKwl7IFNBQTcxMjdfUkVHX0JVUlNUX1NUQVJULCAJCQkweDIxIH0sCisJLyogQlVSU1RfRU5EIGlzIGFsc28gdXNlZCBhcyBhIGNoaXAgSUQgaW4gc2FhNzEyN19wcm9iZSAqLworCXsgU0FBNzEyN19SRUdfQlVSU1RfRU5ELCAJCQkweDFkIH0sCisJeyBTQUE3MTI3X1JFR19DSFJPTUFfUEhBU0UsIAkJCTB4M2YgfSwKKwl7IFNBQTcxMjdfUkVHX0dBSU5VLCAJCQkJMHg2YSB9LAorCXsgU0FBNzEyN19SRUdfR0FJTlYsIAkJCQkweDgxIH0sCisJeyBTQUE3MTI3X1JFR19CTEFDS19MRVZFTCwgCQkJMHgzMyB9LAorCXsgU0FBNzEyN19SRUdfQkxBTktJTkdfTEVWRUwsIAkJCTB4MzUgfSwKKwl7IFNBQTcxMjdfUkVHX1ZCSV9CTEFOS0lORywgCQkJMHgzNSB9LAorCXsgU0FBNzEyN19SRUdfREFDX0NPTlRST0wsIAkJCTB4MDggfSwKKwl7IFNBQTcxMjdfUkVHX0JVUlNUX0FNUCwgCQkJMHgyZiB9LAorCXsgU0FBNzEyN19SRUdfU1VCQzMsIAkJCQkweGIyIH0sCisJeyBTQUE3MTI3X1JFR19TVUJDMiwgCQkJCTB4M2IgfSwKKwl7IFNBQTcxMjdfUkVHX1NVQkMxLCAJCQkJMHhhMyB9LAorCXsgU0FBNzEyN19SRUdfU1VCQzAsIAkJCQkweDI4IH0sCisJeyBTQUE3MTI3X1JFR19NVUxUSSwgCQkJCTB4OTAgfSwKKwl7IFNBQTcxMjdfUkVHX0NMT1NFRF9DQVBUSU9OLCAJCQkweDAwIH0sCisJeyAwLCAwIH0KK307CisKIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTQ2MywxMCArNDg1LDIxIEBACiAJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlNlbGVjdGluZyA2MCBIeiB2aWRlbyBTdGFuZGFyZFxuIik7CiAJCWluaXR0YWIgPSBzYWE3MTI3X2luaXRfY29uZmlnXzYwaHo7CiAJCXN0YXRlLT5yZWdfNjEgPSBTQUE3MTI3XzYwSFpfREFDX0NPTlRST0w7CisKKwl9IGVsc2UgaWYgKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMjkgJiYKKwkJICAgKHN0ZCAmIFY0TDJfU1REX1NFQ0FNKSAmJgorCQkgICAhKHN0ZCAmIChWNEwyX1NURF82MjVfNTAgJiB+VjRMMl9TVERfU0VDQU0pKSkgeworCisJCS8qIElmIGFuZCBvbmx5IGlmIFNFQ0FNLCB3aXRoIGEgU0FBNzEyWzg5XSAqLworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkgIlNlbGVjdGluZyA1MCBIeiBTRUNBTSB2aWRlbyBTdGFuZGFyZFxuIik7CisJCWluaXR0YWIgPSBzYWE3MTI3X2luaXRfY29uZmlnXzUwaHpfc2VjYW07CisJCXN0YXRlLT5yZWdfNjEgPSBTQUE3MTI3XzUwSFpfU0VDQU1fREFDX0NPTlRST0w7CisKIAl9IGVsc2UgewotCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJTZWxlY3RpbmcgNTAgSHogdmlkZW8gU3RhbmRhcmRcbiIpOwotCQlpbml0dGFiID0gc2FhNzEyN19pbml0X2NvbmZpZ181MGh6OwotCQlzdGF0ZS0+cmVnXzYxID0gU0FBNzEyN181MEhaX0RBQ19DT05UUk9MOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJTZWxlY3RpbmcgNTAgSHogUEFMIHZpZGVvIFN0YW5kYXJkXG4iKTsKKwkJaW5pdHRhYiA9IHNhYTcxMjdfaW5pdF9jb25maWdfNTBoel9wYWw7CisJCXN0YXRlLT5yZWdfNjEgPSBTQUE3MTI3XzUwSFpfUEFMX0RBQ19DT05UUk9MOwogCX0KIAogCS8qIFdyaXRlIFRhYmxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCAwM2Y1NzI3Li4yOTc4MzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTQxNjAsNyArNDE2MCw3IEBACiAJCQkuYW11eCA9IExJTkUyLAogCQl9LAogCX0sCi0JW1NBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU10gPSB7CisJW1NBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzVdID0gewogCQkvKiAgICAgICBCZWhvbGRlciBJbnRsLiBMdGQuIDIwMDggICAgICAqLwogCQkvKkRtaXRyeSBCZWxpbW92IDxkLmJlbGltb3ZAZ21haWwuY29tPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQmVob2xkZXIgQmVob2xkVFYgNTA1IFJEUyIsCkBAIC01MzIwLDYgKzUzMjAsNDEgQEAKIAkJCS52bXV4ID0gOCwKIAkJfSB9LAogCX0sCisJW1NBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzNdID0geworCQkvKiAgICAgICBCZWhvbGRlciBJbnRsLiBMdGQuIDIwMDggICAgICAqLworCQkvKkRtaXRyeSBCZWxpbW92IDxkLmJlbGltb3ZAZ21haWwuY29tPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiQmVob2xkZXIgQmVob2xkVFYgNTA1IFJEUyIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAyMDAwMDAsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJkc19hZGRyIAk9IDB4MTAsCisJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMDAwODAwMCwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMywKKwkJCS5hbXV4ID0gTElORTIsCisJCQkudHYgICA9IDEsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gTElORTEsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCA9IDgsCisJCQkuYW11eCA9IExJTkUxLAorCQl9IH0sCisJCS5tdXRlID0geworCQkJLm5hbWUgPSBuYW1lX211dGUsCisJCQkuYW11eCA9IExJTkUxLAorCQl9LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCA9IExJTkUyLAorCQl9LAorCX0sCiAKIH07CiAKQEAgLTYyMzUsNyArNjI3MCwxMyBAQAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzAsCiAJCS5zdWJ2ZW5kb3IgICAgPSAweDAwMDAsCiAJCS5zdWJkZXZpY2UgICAgPSAweDUwNUIsCi0JCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFMsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUs1LAorCX0sIHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMwLAorCQkuc3VidmVuZG9yICAgID0gMHgwMDAwLAorCQkuc3ViZGV2aWNlICAgID0gMHg1MDUxLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LMywKIAl9LHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMwLApAQCAtNjc5Miw3ICs2ODMzLDggQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzQwN0ZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNDA5OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1Rk06Ci0JY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFM6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUs1OgorCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LMzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN185Rk06CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdSRFNfTUszOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA3UkRTX01LNToKQEAgLTY5NTMsOCArNjk5NSw4IEBACiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfUzM1MDoKIAkJZGV2LT5oYXNfcmVtb3RlID0gU0FBNzEzNF9SRU1PVEVfR1BJTzsKLQkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BNT0RFMCA+PiAyLCAgIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDApOwotCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMiwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCk7CisJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgICAweDAwMDBDMDAwLCAweDAwMDBDMDAwKTsKKwkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIDB4MDAwMEMwMDAsIDB4MDAwMEMwMDApOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKaW5kZXggN2RmZWNmYy4uZWU1YmZmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYwpAQCAtOTMsOSArOTMsOSBAQAogCWRwcmludGsoIm9wZW4gZGV2PSVzXG4iLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHZkZXYpKTsKIAllcnIgPSAtRUJVU1k7CiAJaWYgKCFtdXRleF90cnlsb2NrKCZkZXYtPmVtcHJlc3NfdHNxLnZiX2xvY2spKQotCQlnb3RvIGRvbmU7CisJCXJldHVybiBlcnI7CiAJaWYgKGF0b21pY19yZWFkKCZkZXYtPmVtcHJlc3NfdXNlcnMpKQotCQlnb3RvIGRvbmVfdXA7CisJCWdvdG8gZG9uZTsKIAogCS8qIFVubXV0ZSBhdWRpbyAqLwogCXNhYV93cml0ZWIoU0FBNzEzNF9BVURJT19NVVRFX0NUUkwsCkBAIC0xMDUsMTAgKzEwNSw4IEBACiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OwogCWVyciA9IDA7CiAKLWRvbmVfdXA6Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPmVtcHJlc3NfdHNxLnZiX2xvY2spOwogZG9uZToKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmVtcHJlc3NfdHNxLnZiX2xvY2spOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCmluZGV4IGY4ZTk4NTkuLjk0OTkwMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAJaW50IHBvbGxpbmcgICAgICA9IDA7CiAJaW50IHJjNV9ncGlvCSA9IDA7CiAJaW50IG5lY19ncGlvCSA9IDA7Ci0JaW50IGlyX3R5cGUgICAgICA9IElSX1RZUEVfT1RIRVI7CisJdTY0IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOwogCWludCBlcnI7CiAKIAlpZiAoZGV2LT5oYXNfcmVtb3RlICE9IFNBQTcxMzRfUkVNT1RFX0dQSU8pCkBAIC01NjgsNyArNTY4LDggQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzQwN0ZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNDA5OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1Rk06Ci0JY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFM6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUs1OgorCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LMzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN185Rk06CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdSRFNfTUszOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA3UkRTX01LNToKQEAgLTcyOCw3ICs3MjksNyBAQAogCWRldi0+cmVtb3RlID0gaXI7CiAJc2FhNzEzNF9pcl9zdGFydChkZXYsIGlyKTsKIAotCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5kZXYsIGlyX2NvZGVzKTsKKwllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+ZGV2LCBpcl9jb2RlcywgTlVMTCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X3N0b3A7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCmluZGV4IGNiNzMyNjQuLjMxMTM4ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAKICNkZWZpbmUgTk9STV81MjVfNjAJCQlcCiAJCS5oX3N0YXJ0ICAgICAgID0gMCwJXAotCQkuaF9zdG9wICAgICAgICA9IDcwMywJXAorCQkuaF9zdG9wICAgICAgICA9IDcxOSwJXAogCQkudmlkZW9fdl9zdGFydCA9IDIzLAlcCiAJCS52aWRlb192X3N0b3AgID0gMjYyLAlcCiAJCS52Ymlfdl9zdGFydF8wID0gMTAsCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCmluZGV4IDUzYjdlMGIuLmJmMTMwOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaApAQCAtMjgyLDcgKzI4Miw3IEBACiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjAgICAxNTYKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfU1RVRElPXzUwN1VBIDE1NwogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9DQVJEQlVTXzUwMSAxNTgKLSNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTICAgICAgICAgMTU5CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzUgICAgIDE1OQogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdSRFNfTUszICAgICAxNjAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA3UkRTX01LNSAgICAgMTYxCiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzYwN0ZNX01LNSAgICAgIDE2MgpAQCAtMjk5LDYgKzI5OSw3IEBACiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfWk9MSURfSFlCUklEX1BDSQkJMTczCiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVNVU19FVVJPUEFfSFlCUklECTE3NAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0xFQURURUtfV0lORkFTVF9EVFYxMDAwUyAxNzUKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LMyAgICAgMTc2CiAKICNkZWZpbmUgU0FBNzEzNF9NQVhCT0FSRFMgMzIKICNkZWZpbmUgU0FBNzEzNF9JTlBVVF9NQVggOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtYXBpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYwppbmRleCA2ZjA5NGE5Li4xZDQ4N2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYwpAQCAtNTIzLDcgKzUyMyw3IEBACiAJfQogCiAJcmVnbGVuID0gc2FhNzE2NF9pMmNhZGRyX3RvX3JlZ2xlbihidXMsIGFkZHIpOwotCWlmICh1bml0aWQgPCAwKSB7CisJaWYgKHJlZ2xlbiA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkiJXMoKSBlcnJvciwgY2Fubm90IHRyYW5zbGF0ZSByZWdhZGRyIHRvIHJlZ2xlblxuIiwKIAkJCV9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwppbmRleCBmMDljNzE0Li5mYjg4YzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCkBAIC0xNzQ4LDYgKzE3NDgsMjIgQEAKIAkJCQkgICAgICAgaWNkKTsKIH0KIAorc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X2dldF9wYXJtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCSAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19wYXJtLCBwYXJtKTsKK30KKworc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3NldF9wYXJtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCSAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19wYXJtLCBwYXJtKTsKK30KKwogc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X2dldF9jdHJsKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKQEAgLTE4MDgsNiArMTgyNCw4IEBACiAJLnRyeV9mbXQJPSBzaF9tb2JpbGVfY2V1X3RyeV9mbXQsCiAJLnNldF9jdHJsCT0gc2hfbW9iaWxlX2NldV9zZXRfY3RybCwKIAkuZ2V0X2N0cmwJPSBzaF9tb2JpbGVfY2V1X2dldF9jdHJsLAorCS5zZXRfcGFybQk9IHNoX21vYmlsZV9jZXVfc2V0X3Bhcm0sCisJLmdldF9wYXJtCT0gc2hfbW9iaWxlX2NldV9nZXRfcGFybSwKIAkucmVxYnVmcwk9IHNoX21vYmlsZV9jZXVfcmVxYnVmcywKIAkucG9sbAkJPSBzaF9tb2JpbGVfY2V1X3BvbGwsCiAJLnF1ZXJ5Y2FwCT0gc2hfbW9iaWxlX2NldV9xdWVyeWNhcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL0tjb25maWcKaW5kZXggZjcxZjI3Mi4uNmViYWYyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL0tjb25maWcKQEAgLTEsNyArMSwxMCBAQAogY29uZmlnIFVTQl9TTjlDMTAyCi0JdHJpc3RhdGUgIlVTQiBTTjlDMXh4IFBDIENhbWVyYSBDb250cm9sbGVyIHN1cHBvcnQiCisJdHJpc3RhdGUgIlVTQiBTTjlDMXh4IFBDIENhbWVyYSBDb250cm9sbGVyIHN1cHBvcnQgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gVklERU9fVjRMMgogCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQgcGxlYXNlIHVzZSB0aGUgZ3NwY2Egc29uaXhiIGFuZAorCSAgc29uaXhqIG1vZHVsZXMgaW5zdGVhZC4KKwogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIFNPTmlYIFNOOUMxMDEsCiAJICBTTjlDMTAyLCBTTjlDMTAzLCBTTjlDMTA1IGFuZCBTTjlDMTIwIFBDIENhbWVyYSBDb250cm9sbGVycy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKaW5kZXggMzZlZTQzYS4uY2M0MGQ2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCkBAIC00NSwyMCArNDUsMjQgQEAKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwNSwgQlJJREdFX1NOOUMxMDIpLCB9LAogI2VuZGlmCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDcsIEJSSURHRV9TTjlDMTAyKSwgfSwKKyNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBICYmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0FfTU9EVUxFCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDksIEJSSURHRV9TTjlDMTAyKSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwZCwgQlJJREdFX1NOOUMxMDIpLCB9LAogLyoJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMTEsIEJSSURHRV9TTjlDMTAyKSwgfSwgT1Y2NjUwICovCisjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAxOSwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI0LCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjUsIEJSSURHRV9TTjlDMTAyKSwgfSwKKyNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBICYmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0FfTU9EVUxFCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjgsIEJSSURHRV9TTjlDMTAyKSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOSwgQlJJREdFX1NOOUMxMDIpLCB9LAorI2VuZGlmCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmEsIEJSSURHRV9TTjlDMTAyKSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYiwgQlJJREdFX1NOOUMxMDIpLCB9LAogI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYywgQlJJREdFX1NOOUMxMDIpLCB9LAotI2VuZGlmCiAvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyZCwgQlJJREdFX1NOOUMxMDIpLCB9LCBIVjcxMzFSICovCisjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyZSwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDMwLCBCUklER0VfU045QzEwMiksIH0sCiAJLyogU045QzEwMyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwppbmRleCA2YjNmYmNjLi44MGY2YmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwpAQCAtNzgxLDYgKzc4MSwzMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9nX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICphKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCisJaWYgKGljaS0+b3BzLT5nZXRfcGFybSkKKwkJcmV0dXJuIGljaS0+b3BzLT5nZXRfcGFybShpY2QsIGEpOworCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIGludCBzb2NfY2FtZXJhX3NfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkgICAgIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisKKwlpZiAoaWNpLT5vcHMtPnNldF9wYXJtKQorCQlyZXR1cm4gaWNpLT5vcHMtPnNldF9wYXJtKGljZCwgYSk7CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkgICBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqaWQpCiB7CkBAIC04NDYsMTAgKzg3Miw4IEBACiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gaTJjX2dldF9hZGFwdGVyKGljbC0+aTJjX2FkYXB0ZXJfaWQpOwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2OwotCWludCByZXQ7CiAKIAlpZiAoIWFkYXApIHsKLQkJcmV0ID0gLUVOT0RFVjsKIAkJZGV2X2VycigmaWNkLT5kZXYsICJDYW5ub3QgZ2V0IEkyQyBhZGFwdGVyICMlZC4gTm8gZHJpdmVyP1xuIiwKIAkJCWljbC0+aTJjX2FkYXB0ZXJfaWQpOwogCQlnb3RvIGVpMmNnYTsKQEAgLTg1OSwxMCArODgzLDggQEAKIAogCXN1YmRldiA9IHY0bDJfaTJjX25ld19zdWJkZXZfYm9hcmQoJmljaS0+djRsMl9kZXYsIGFkYXAsCiAJCQkJaWNsLT5tb2R1bGVfbmFtZSwgaWNsLT5ib2FyZF9pbmZvLCBOVUxMKTsKLQlpZiAoIXN1YmRldikgewotCQlyZXQgPSAtRU5PTUVNOworCWlmICghc3ViZGV2KQogCQlnb3RvIGVpMmNuZDsKLQl9CiAKIAljbGllbnQgPSBzdWJkZXYtPnByaXY7CiAKQEAgLTg3Myw3ICs4OTUsNyBAQAogZWkyY25kOgogCWkyY19wdXRfYWRhcHRlcihhZGFwKTsKIGVpMmNnYToKLQlyZXR1cm4gcmV0OworCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgdm9pZCBzb2NfY2FtZXJhX2ZyZWVfaTJjKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQpAQCAtMTI2MCw2ICsxMjgyLDggQEAKIAkudmlkaW9jX2Nyb3BjYXAJCSA9IHNvY19jYW1lcmFfY3JvcGNhcCwKIAkudmlkaW9jX2dfY3JvcAkJID0gc29jX2NhbWVyYV9nX2Nyb3AsCiAJLnZpZGlvY19zX2Nyb3AJCSA9IHNvY19jYW1lcmFfc19jcm9wLAorCS52aWRpb2NfZ19wYXJtCQkgPSBzb2NfY2FtZXJhX2dfcGFybSwKKwkudmlkaW9jX3NfcGFybQkJID0gc29jX2NhbWVyYV9zX3Bhcm0sCiAJLnZpZGlvY19nX2NoaXBfaWRlbnQgICAgID0gc29jX2NhbWVyYV9nX2NoaXBfaWRlbnQsCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwogCS52aWRpb2NfZ19yZWdpc3RlcgkgPSBzb2NfY2FtZXJhX2dfcmVnaXN0ZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19tZWRpYWJ1cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfbWVkaWFidXMuYwppbmRleCBmOGQ1Yzg3Li44YjYzYjY1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfbWVkaWFidXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19tZWRpYWJ1cy5jCkBAIC0yNCw5MSArMjQsMTA2IEBACiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoWVZZVThfMlg4X0xFKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoWVZZVThfMlg4X0xFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9ZVllVLAogCQkubmFtZQkJCT0gIllWWVUiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFlVWVY4XzJYOF9CRSldID0geworCX0sCisJW01CVVNfSURYKFlVWVY4XzJYOF9CRSldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfVVlWWSwKIAkJLm5hbWUJCQk9ICJVWVZZIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChZVllVOF8yWDhfQkUpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChZVllVOF8yWDhfQkUpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1ZZVVksCiAJCS5uYW1lCQkJPSAiVllVWSIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoUkdCNTU1XzJYOF9QQURISV9MRSldID0geworCX0sCisJW01CVVNfSURYKFJHQjU1NV8yWDhfUEFESElfTEUpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1JHQjU1NSwKIAkJLm5hbWUJCQk9ICJSR0I1NTUiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFJHQjU1NV8yWDhfUEFESElfQkUpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChSR0I1NTVfMlg4X1BBREhJX0JFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9SR0I1NTVYLAogCQkubmFtZQkJCT0gIlJHQjU1NVgiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFJHQjU2NV8yWDhfTEUpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChSR0I1NjVfMlg4X0xFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9SR0I1NjUsCiAJCS5uYW1lCQkJPSAiUkdCNTY1IiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChSR0I1NjVfMlg4X0JFKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoUkdCNTY1XzJYOF9CRSldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfUkdCNTY1WCwKIAkJLm5hbWUJCQk9ICJSR0I1NjVYIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChTQkdHUjhfMVg4KV0gPSB7CisJfSwKKwlbTUJVU19JRFgoU0JHR1I4XzFYOCldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfU0JHR1I4LAogCQkubmFtZQkJCT0gIkJheWVyIDggQkdHUiIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HX05PTkUsCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFNCR0dSMTBfMVgxMCldID0geworCX0sCisJW01CVVNfSURYKFNCR0dSMTBfMVgxMCldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMCwKIAkJLm5hbWUJCQk9ICJCYXllciAxMCBCR0dSIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDEwLAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HX0VYVEVORDE2LAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChHUkVZOF8xWDgpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChHUkVZOF8xWDgpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX0dSRVksCiAJCS5uYW1lCQkJPSAiR3JleSIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HX05PTkUsCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFkxMF8xWDEwKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoWTEwXzFYMTApXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1kxMCwKIAkJLm5hbWUJCQk9ICJHcmV5IDEwYml0IiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDEwLAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HX0VYVEVORDE2LAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChTQkdHUjEwXzJYOF9QQURISV9MRSldID0geworCX0sCisJW01CVVNfSURYKFNCR0dSMTBfMlg4X1BBREhJX0xFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjEwLAogCQkubmFtZQkJCT0gIkJheWVyIDEwIEJHR1IiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFNCR0dSMTBfMlg4X1BBRExPX0xFKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoU0JHR1IxMF8yWDhfUEFETE9fTEUpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1NCR0dSMTAsCiAJCS5uYW1lCQkJPSAiQmF5ZXIgMTAgQkdHUiIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURMTywKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoU0JHR1IxMF8yWDhfUEFESElfQkUpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChTQkdHUjEwXzJYOF9QQURISV9CRSldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMCwKIAkJLm5hbWUJCQk9ICJCYXllciAxMCBCR0dSIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0JFLAotCX0sIFtNQlVTX0lEWChTQkdHUjEwXzJYOF9QQURMT19CRSldID0geworCX0sCisJW01CVVNfSURYKFNCR0dSMTBfMlg4X1BBRExPX0JFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjEwLAogCQkubmFtZQkJCT0gIkJheWVyIDEwIEJHR1IiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKQEAgLTEzNCw3ICsxNDksOCBAQAogY29uc3Qgc3RydWN0IHNvY19tYnVzX3BpeGVsZm10ICpzb2NfbWJ1c19nZXRfZm10ZGVzYygKIAllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgY29kZSkKIHsKLQlpZiAoKHVuc2lnbmVkIGludCkoY29kZSAtIFY0TDJfTUJVU19GTVRfRklYRUQpID4gQVJSQVlfU0laRShtYnVzX2ZtdCkpCisJaWYgKGNvZGUgLSBWNEwyX01CVVNfRk1UX0ZJWEVEID4gQVJSQVlfU0laRShtYnVzX2ZtdCkgfHwKKwkgICAgY29kZSA8PSBWNEwyX01CVVNfRk1UX0ZJWEVEKQogCQlyZXR1cm4gTlVMTDsKIAlyZXR1cm4gbWJ1c19mbXQgKyBjb2RlIC0gVjRMMl9NQlVTX0ZNVF9GSVhFRCAtIDE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjllYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvS2NvbmZpZwpAQCAtMCwwICsxLDE2IEBACitjb25maWcgVklERU9fVExHMjMwMAorCXRyaXN0YXRlICJUZWxlZ2VudCBUTEcyMzAwIFVTQiB2aWRlbyBjYXB0dXJlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDICYmIElOUFVUICYmIFNORCAmJiBEVkJfQ09SRQorCXNlbGVjdCBWSURFT19UVU5FUgorCXNlbGVjdCBWSURFT19UVkVFUFJPTQorCXNlbGVjdCBWSURFT19JUgorCXNlbGVjdCBWSURFT0JVRl9WTUFMTE9DCisJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgVklERU9CVUZfRFZCCisKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBUZWxlZ2VudCB0bGcyMzAwIGJhc2VkIFRWIGNhcmRzLgorCSAgVGhlIGRyaXZlciBzdXBwb3J0cyBWNEwyLCBEVkItVCBhbmQgcmFkaW8uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBvc2VpZG9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiYjdmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKK3Bvc2VpZG9uLW9ianMgOj0gcGQtdmlkZW8ubyBwZC1hbHNhLm8gcGQtZHZiLm8gcGQtcmFkaW8ubyBwZC1tYWluLm8KKworb2JqLSQoQ09ORklHX1ZJREVPX1RMRzIzMDApICs9IHBvc2VpZG9uLm8KKworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS92aWRlbworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQorRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1hbHNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtYWxzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNDI2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtYWxzYS5jCkBAIC0wLDAgKzEsMzMyIEBACisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NvdW5kLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSAicGQtY29tbW9uLmgiCisjaW5jbHVkZSAidmVuZG9yY21kcy5oIgorCitzdGF0aWMgdm9pZCBjb21wbGV0ZV9oYW5kbGVyX2F1ZGlvKHN0cnVjdCB1cmIgKnVyYik7CisjZGVmaW5lIEFVRElPX0VQCSgweDgzKQorI2RlZmluZSBBVURJT19CVUZfU0laRQkoNTEyKQorI2RlZmluZSBQRVJJT0RfU0laRQkoMTAyNCAqIDgpCisjZGVmaW5lIFBFUklPRF9NSU4JKDQpCisjZGVmaW5lIFBFUklPRF9NQVggCVBFUklPRF9NSU4KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9wZF9od19jYXB0dXJlID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQICAgICAgICAgICB8CisJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCwKKworCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCisKKwkucmF0ZV9taW4gPSA0ODAwMCwKKwkucmF0ZV9tYXggPSA0ODAwMCwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gMiwKKwkuYnVmZmVyX2J5dGVzX21heCA9IFBFUklPRF9TSVpFICogUEVSSU9EX01JTiwKKwkucGVyaW9kX2J5dGVzX21pbiA9IFBFUklPRF9TSVpFLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gUEVSSU9EX1NJWkUsCisJLnBlcmlvZHNfbWluID0gUEVSSU9EX01JTiwKKwkucGVyaW9kc19tYXggPSBQRVJJT0RfTUFYLAorCS8qCisJLmJ1ZmZlcl9ieXRlc19tYXggPSA2MjcyMCAqIDgsCisJLnBlcmlvZF9ieXRlc19taW4gPSA2NCwKKwkucGVyaW9kX2J5dGVzX21heCA9IDEyNTQ0LAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gOTgKKwkqLworfTsKKworc3RhdGljIGludCBzbmRfcGRfY2FwdHVyZV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gJnAtPmF1ZGlvOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwlpZiAoIXApCisJCXJldHVybiAtRU5PREVWOworCXBhLT51c2VycysrOworCXBhLT5jYXJkX2Nsb3NlIAkJPSAwOworCXBhLT5jYXB0dXJlX3BjbV9zdWJzdHJlYW0JPSBzdWJzdHJlYW07CisJcnVudGltZS0+cHJpdmF0ZV9kYXRhCQk9IHA7CisKKwlydW50aW1lLT5odyA9IHNuZF9wZF9od19jYXB0dXJlOworCXNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKKwl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UocC0+aW50ZXJmYWNlKTsKKwlrcmVmX2dldCgmcC0+a3JlZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3BkX3BjbV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9ICZwLT5hdWRpbzsKKworCXBhLT51c2Vycy0tOworCXBhLT5jYXJkX2Nsb3NlIAkJPSAxOworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwLT5pbnRlcmZhY2UpOworCWtyZWZfcHV0KCZwLT5rcmVmLCBwb3NlaWRvbl9kZWxldGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9wZF9od19jYXB0dXJlX3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCXNpemUgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcyk7CisJaWYgKHJ1bnRpbWUtPmRtYV9hcmVhKSB7CisJCWlmIChydW50aW1lLT5kbWFfYnl0ZXMgPiBzaXplKQorCQkJcmV0dXJuIDA7CisJCXZmcmVlKHJ1bnRpbWUtPmRtYV9hcmVhKTsKKwl9CisJcnVudGltZS0+ZG1hX2FyZWEgPSB2bWFsbG9jKHNpemUpOworCWlmICghcnVudGltZS0+ZG1hX2FyZWEpCisJCXJldHVybiAtRU5PTUVNOworCWVsc2UKKwkJcnVudGltZS0+ZG1hX2J5dGVzID0gc2l6ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdWRpb19idWZfZnJlZShzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9ICZwLT5hdWRpbzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBVURJT19CVUZTOyBpKyspCisJCWlmIChwYS0+dXJiX2FycmF5W2ldKQorCQkJdXNiX2tpbGxfdXJiKHBhLT51cmJfYXJyYXlbaV0pOworCWZyZWVfYWxsX3VyYl9nZW5lcmljKHBhLT51cmJfYXJyYXksIEFVRElPX0JVRlMpOworCWxvZ3BtKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3BkX2h3X2NhcHR1cmVfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlsb2dwbSgpOworCWF1ZGlvX2J1Zl9mcmVlKHApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9wZF9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCisjZGVmaW5lIEFVRElPX1RSQUlMRVJfU0laRQkoMTYpCitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2F1ZGlvX2RhdGEoc3RydWN0IHVyYiAqdXJiLCBpbnQgKnBlcmlvZF9lbGFwc2VkKQoreworCXN0cnVjdCBwb3NlaWRvbl9hdWRpbyAqcGEgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHBhLT5jYXB0dXJlX3BjbV9zdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwlpbnQgc3RyaWRlCT0gcnVudGltZS0+ZnJhbWVfYml0cyA+PiAzOworCWludCBsZW4JCT0gdXJiLT5hY3R1YWxfbGVuZ3RoIC8gc3RyaWRlOworCXVuc2lnbmVkIGNoYXIgKmNwCT0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgaW50IG9sZHB0cgk9IHBhLT5yY3ZfcG9zaXRpb247CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IEFVRElPX0JVRl9TSVpFIC0gNCkKKwkJbGVuIC09IChBVURJT19UUkFJTEVSX1NJWkUgLyBzdHJpZGUpOworCisJLyogZG8gdGhlIGNvcHkgKi8KKwlpZiAob2xkcHRyICsgbGVuID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7CisJCXVuc2lnbmVkIGludCBjbnQgPSBydW50aW1lLT5idWZmZXJfc2l6ZSAtIG9sZHB0cjsKKworCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBvbGRwdHIgKiBzdHJpZGUsIGNwLCBjbnQgKiBzdHJpZGUpOworCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEsIChjcCArIGNudCAqIHN0cmlkZSksCisJCQkJCShsZW4gKiBzdHJpZGUgLSBjbnQgKiBzdHJpZGUpKTsKKwl9IGVsc2UKKwkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgb2xkcHRyICogc3RyaWRlLCBjcCwgbGVuICogc3RyaWRlKTsKKworCS8qIHVwZGF0ZSB0aGUgc3RhdGFzICovCisJc25kX3BjbV9zdHJlYW1fbG9jayhwYS0+Y2FwdHVyZV9wY21fc3Vic3RyZWFtKTsKKwlwYS0+cmN2X3Bvc2l0aW9uCSs9IGxlbjsKKwlpZiAocGEtPnJjdl9wb3NpdGlvbiA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJcGEtPnJjdl9wb3NpdGlvbiAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKworCXBhLT5jb3BpZWRfcG9zaXRpb24gKz0gKGxlbik7CisJaWYgKHBhLT5jb3BpZWRfcG9zaXRpb24gPj0gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJcGEtPmNvcGllZF9wb3NpdGlvbiAtPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwkJKnBlcmlvZF9lbGFwc2VkID0gMTsKKwl9CisJc25kX3BjbV9zdHJlYW1fdW5sb2NrKHBhLT5jYXB0dXJlX3BjbV9zdWJzdHJlYW0pOworfQorCitzdGF0aWMgdm9pZCBjb21wbGV0ZV9oYW5kbGVyX2F1ZGlvKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGEtPmNhcHR1cmVfcGNtX3N1YnN0cmVhbTsKKwlpbnQgICAgcGVyaW9kX2VsYXBzZWQgPSAwOworCWludCAgICByZXQ7CisKKwlpZiAoMSA9PSBwYS0+Y2FyZF9jbG9zZSB8fCBwYS0+Y2FwdHVyZV9zdHJlYW0gIT0gU1RSRUFNX09OKQorCQlyZXR1cm47CisKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQkvKmlmICh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSovCisJCQlyZXR1cm47CisJfQorCisJaWYgKHN1YnN0cmVhbSkgeworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQloYW5kbGVfYXVkaW9fZGF0YSh1cmIsICZwZXJpb2RfZWxhcHNlZCk7CisJCQlpZiAocGVyaW9kX2VsYXBzZWQpCisJCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworCQl9CisJfQorCisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0IDwgMCkKKwkJbG9nKCJhdWRpbyB1cmIgZmFpbGVkIChlcnJjb2QgPSAlaSkiLCByZXQpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBmaXJlX2F1ZGlvX3VyYihzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJaW50IGksIHJldCA9IDA7CisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9ICZwLT5hdWRpbzsKKworCWFsbG9jX2J1bGtfdXJic19nZW5lcmljKHBhLT51cmJfYXJyYXksIEFVRElPX0JVRlMsCisJCQlwLT51ZGV2LCBBVURJT19FUCwKKwkJCUFVRElPX0JVRl9TSVpFLCBHRlBfQVRPTUlDLAorCQkJY29tcGxldGVfaGFuZGxlcl9hdWRpbywgcGEpOworCisJZm9yIChpID0gMDsgaSA8IEFVRElPX0JVRlM7IGkrKykgeworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihwYS0+dXJiX2FycmF5W2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldCkKKwkJCWxvZygidXJiIGVyciA6ICVkIiwgcmV0KTsKKwl9CisJbG9nKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzbmRfcGRfY2FwdHVyZV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gJnAtPmF1ZGlvOworCisJaWYgKGRlYnVnX21vZGUpCisJCWxvZygiY21kICVkLCBhdWRpbyBzdGF0IDogJWRcbiIsIGNtZCwgcGEtPmNhcHR1cmVfc3RyZWFtKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJaWYgKHBhLT5jYXB0dXJlX3N0cmVhbSA9PSBTVFJFQU1fT04pCisJCQlyZXR1cm4gMDsKKworCQlwYS0+cmN2X3Bvc2l0aW9uID0gcGEtPmNvcGllZF9wb3NpdGlvbiA9IDA7CisJCXBhLT5jYXB0dXJlX3N0cmVhbSA9IFNUUkVBTV9PTjsKKworCQlpZiAoaW5faGliZXJuYXRpb24ocCkpCisJCQlyZXR1cm4gMDsKKwkJZmlyZV9hdWRpb191cmIocCk7CisJCXJldHVybiAwOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCQlwYS0+Y2FwdHVyZV9zdHJlYW0gPSBTVFJFQU1fU1VTUEVORDsKKwkJcmV0dXJuIDA7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlwYS0+Y2FwdHVyZV9zdHJlYW0gPSBTVFJFQU1fT0ZGOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorc25kX3BkX2NhcHR1cmVfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9ICZwLT5hdWRpbzsKKwlyZXR1cm4gcGEtPnJjdl9wb3NpdGlvbjsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICpzbmRfcGNtX3BkX2dldF9wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicywKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwl2b2lkICpwYWdlcHRyID0gc3Vicy0+cnVudGltZS0+ZG1hX2FyZWEgKyBvZmZzZXQ7CisJcmV0dXJuIHZtYWxsb2NfdG9fcGFnZShwYWdlcHRyKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBwY21fY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4gICAgICA9IHNuZF9wZF9jYXB0dXJlX29wZW4sCisJLmNsb3NlICAgICA9IHNuZF9wZF9wY21fY2xvc2UsCisJLmlvY3RsICAgICA9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPSBzbmRfcGRfaHdfY2FwdHVyZV9wYXJhbXMsCisJLmh3X2ZyZWUgICA9IHNuZF9wZF9od19jYXB0dXJlX2ZyZWUsCisJLnByZXBhcmUgICA9IHNuZF9wZF9wcmVwYXJlLAorCS50cmlnZ2VyICAgPSBzbmRfcGRfY2FwdHVyZV90cmlnZ2VyLAorCS5wb2ludGVyICAgPSBzbmRfcGRfY2FwdHVyZV9wb2ludGVyLAorCS5wYWdlICAgICAgPSBzbmRfcGNtX3BkX2dldF9wYWdlLAorfTsKKworI2lmZGVmIENPTkZJR19QTQoraW50IHBtX2Fsc2Ffc3VzcGVuZChzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJbG9ncG0ocCk7CisJYXVkaW9fYnVmX2ZyZWUocCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwbV9hbHNhX3Jlc3VtZShzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJbG9ncG0ocCk7CisJZmlyZV9hdWRpb191cmIocCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworaW50IHBvc2VpZG9uX2F1ZGlvX2luaXQoc3RydWN0IHBvc2VpZG9uICpwKQoreworCXN0cnVjdCBwb3NlaWRvbl9hdWRpbyAqcGEgPSAmcC0+YXVkaW87CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfcGNtICpwY207CisJaW50IHJldDsKKworCXJldCA9IHNuZF9jYXJkX2NyZWF0ZSgtMSwgIlRlbGVnZW50IiwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfcGNtX25ldyhjYXJkLCAicG9zZWlkb24gYXVkaW8iLCAwLCAwLCAxLCAmcGNtKTsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZwY21fY2FwdHVyZV9vcHMpOworCXBjbS0+aW5mb19mbGFncyAgID0gMDsKKwlwY20tPnByaXZhdGVfZGF0YSA9IHA7CisJc3RyY3B5KHBjbS0+bmFtZSwgInBvc2VpZG9uIGF1ZGlvIGNhcHR1cmUiKTsKKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJBTFNBIGRyaXZlciIpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJwb3NlaWRvbiBBdWRpbyIpOworCXN0cmNweShjYXJkLT5sb25nbmFtZSwgInBvc2VpZG9uIEFMU0EgQXVkaW8iKTsKKworCWlmIChzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcGEtPmNhcmQgPSBjYXJkOworCXJldHVybiAwOworfQorCitpbnQgcG9zZWlkb25fYXVkaW9fZnJlZShzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9ICZwLT5hdWRpbzsKKworCWlmIChwYS0+Y2FyZCkKKwkJc25kX2NhcmRfZnJlZShwYS0+Y2FyZCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtY29tbW9uLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYwNjZiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1jb21tb24uaApAQCAtMCwwICsxLDI4MiBAQAorI2lmbmRlZiBQRF9DT01NT05fSAorI2RlZmluZSBQRF9DT01NT05fSAorCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtdm1hbGxvYy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJkdmJkZXYuaCIKKyNpbmNsdWRlICJkdmJfZGVtdXguaCIKKyNpbmNsdWRlICJkbXhkZXYuaCIKKworI2RlZmluZSBTQlVGX05VTQk4CisjZGVmaW5lIE1BWF9CVUZGRVJfTlVNCTYKKyNkZWZpbmUgUEtfUEVSX1VSQgkzMgorI2RlZmluZSBJU09fUEtUX1NJWkUJMzA3MgorCisjZGVmaW5lIFBPU0VJRE9OX1NUQVRFX05PTkUJCSgweDAwMDApCisjZGVmaW5lIFBPU0VJRE9OX1NUQVRFX0FOQUxPRwkJKDB4MDAwMSkKKyNkZWZpbmUgUE9TRUlET05fU1RBVEVfRk0JCSgweDAwMDIpCisjZGVmaW5lIFBPU0VJRE9OX1NUQVRFX0RWQlQJCSgweDAwMDQpCisjZGVmaW5lIFBPU0VJRE9OX1NUQVRFX1ZCSQkJKDB4MDAwOCkKKyNkZWZpbmUgUE9TRUlET05fU1RBVEVfRElTQ09OTkVDVAkoMHgwMDgwKQorCisjZGVmaW5lIFBNX1NVU1BFTkRfREVMQVkJMworCisjZGVmaW5lIFY0TF9QQUxfVkJJX0xJTkVTCTE4CisjZGVmaW5lIFY0TF9OVFNDX1ZCSV9MSU5FUwkxMgorI2RlZmluZSBWNExfUEFMX1ZCSV9GUkFNRVNJWkUJKFY0TF9QQUxfVkJJX0xJTkVTICogMTQ0MCAqIDIpCisjZGVmaW5lIFY0TF9OVFNDX1ZCSV9GUkFNRVNJWkUJKFY0TF9OVFNDX1ZCSV9MSU5FUyAqIDE0NDAgKiAyKQorCisjZGVmaW5lIFRVTkVSX0ZSRVFfTUlOCQkoNDUwMDAwMDApCisjZGVmaW5lIFRVTkVSX0ZSRVFfTUFYCQkoODYyMDAwMDAwKQorCitzdHJ1Y3QgdmJpX2RhdGEgeworCXN0cnVjdCB2aWRlb19kZXZpY2UJKnZfZGV2OworCXN0cnVjdCB2aWRlb19kYXRhCSp2aWRlbzsKKwlzdHJ1Y3QgZnJvbnRfZmFjZQkqZnJvbnQ7CisKKwl1bnNpZ25lZCBpbnQJCWNvcGllZDsKKwl1bnNpZ25lZCBpbnQJCXZiaV9zaXplOyAvKiB0aGUgd2hvbGUgc2l6ZSBvZiB0d28gZmllbGRzICovCisJaW50IAkJCXVzZXJzOworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIHJ1bm5pbmcgY29udGV4dCBvZiB0aGUgdmlkZW8sIGl0IGlzIHVzZWZ1bCBmb3IKKyAqIHJlc3VtZSgpCisgKi8KK3N0cnVjdCBydW5uaW5nX2NvbnRleHQgeworCXUzMgkJZnJlcTsJCS8qIFZJRElPQ19TX0ZSRVFVRU5DWSAqLworCWludAkJYXVkaW9faWR4OwkvKiBWSURJT0NfU19UVU5FUiAgICAqLworCXY0bDJfc3RkX2lkCXR2bm9ybWlkOwkvKiBWSURJT0NfU19TVEQgICAgICovCisJaW50CQlzaWdfaW5kZXg7CS8qIFZJRElPQ19TX0lOUFVUICAqLworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgcGl4OwkvKiBWSURJT0NfU19GTVQgICAqLworfTsKKworc3RydWN0IHZpZGVvX2RhdGEgeworCS8qIHY0bDIgdmlkZW8gZGV2aWNlICovCisJc3RydWN0IHZpZGVvX2RldmljZQkqdl9kZXY7CisKKwkvKiB0aGUgd29ya2luZyBjb250ZXh0ICovCisJc3RydWN0IHJ1bm5pbmdfY29udGV4dAljb250ZXh0OworCisJLyogZm9yIGRhdGEgY29weSAqLworCWludAkJZmllbGRfY291bnQ7CisKKwljaGFyCQkqZHN0OworCWludAkJbGluZXNfY29waWVkOworCWludAkJcHJldl9sZWZ0OworCisJaW50CQlsaW5lc19wZXJfZmllbGQ7CisJaW50CQlsaW5lc19zaXplOworCisJLyogZm9yIGNvbW11bmljYXRpb24gKi8KKwl1OAkJCWVuZHBvaW50X2FkZHI7CisJc3RydWN0IHVyYiAJCSp1cmJfYXJyYXlbU0JVRl9OVU1dOworCXN0cnVjdCB2YmlfZGF0YQkJKnZiaTsKKwlzdHJ1Y3QgcG9zZWlkb24gCSpwZDsKKwlzdHJ1Y3QgZnJvbnRfZmFjZQkqZnJvbnQ7CisKKwlpbnQJCQlpc19zdHJlYW1pbmc7CisJaW50CQkJdXNlcnM7CisKKwkvKiBmb3IgYnViYmxlIGhhbmRsZXIgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJYnViYmxlX3dvcms7Cit9OworCitlbnVtIHBjbV9zdHJlYW1fc3RhdGUgeworCVNUUkVBTV9PRkYsCisJU1RSRUFNX09OLAorCVNUUkVBTV9TVVNQRU5ELAorfTsKKworI2RlZmluZSBBVURJT19CVUZTICgzKQorI2RlZmluZSBDQVBUVVJFX1NUUkVBTV9FTiAxCitzdHJ1Y3QgcG9zZWlkb25fYXVkaW8geworCXN0cnVjdCB1cmIJCSp1cmJfYXJyYXlbQVVESU9fQlVGU107CisJdW5zaWduZWQgaW50IAkJY29waWVkX3Bvc2l0aW9uOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAgICpjYXB0dXJlX3BjbV9zdWJzdHJlYW07CisKKwl1bnNpZ25lZCBpbnQgCQlyY3ZfcG9zaXRpb247CisJc3RydWN0CXNuZF9jYXJkCSpjYXJkOworCWludCAJCQljYXJkX2Nsb3NlOworCisJaW50IAkJCXVzZXJzOworCWludAkJCXBtX3N0YXRlOworCWVudW0gcGNtX3N0cmVhbV9zdGF0ZSAJY2FwdHVyZV9zdHJlYW07Cit9OworCitzdHJ1Y3QgcmFkaW9fZGF0YSB7CisJX191MzIJCWZtX2ZyZXE7CisJaW50CQl1c2VyczsKKwl1bnNpZ25lZCBpbnQJaXNfcmFkaW9fc3RyZWFtaW5nOworCWludAkJcHJlX2VtcGhhc2lzOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmZtX2RldjsKK307CisKKyNkZWZpbmUgRFZCX1NCVUZfTlVNCQk0CisjZGVmaW5lIERWQl9VUkJfQlVGX1NJWkUJMHgyMDAwCitzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgeworCXN0cnVjdCBkdmJfYWRhcHRlcglkdmJfYWRhcDsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kCWR2Yl9mZTsKKwlzdHJ1Y3QgZG14ZGV2CQlkbXhkZXY7CisJc3RydWN0IGR2Yl9kZW11eAlkZW11eDsKKworCWF0b21pY190CQl1c2VyczsKKwlhdG9taWNfdAkJYWN0aXZlX2ZlZWQ7CisKKwkvKiBkYXRhIHRyYW5zZmVyICovCisJczMyCQkJaXNfc3RyZWFtaW5nOworCXN0cnVjdCB1cmIJCSp1cmJfYXJyYXlbRFZCX1NCVUZfTlVNXTsKKwlzdHJ1Y3QgcG9zZWlkb24JCSpwZF9kZXZpY2U7CisJdTgJCQllcF9hZGRyOworCXU4CQkJcmVzZXJ2ZWRbM107CisKKwkvKiBkYXRhIGZvciBwb3dlciByZXN1bWUqLworCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyBmZV9wYXJhbTsKKworCS8qIGZvciBjaGFubmVsIHNjYW5uaW5nICovCisJaW50CQlwcmV2X2ZyZXE7CisJaW50CQliYW5kd2lkdGg7CisJdW5zaWduZWQgbG9uZwlsYXN0X2ppZmZpZXM7Cit9OworCitzdHJ1Y3QgZnJvbnRfZmFjZSB7CisJLyogdXNlIHRoaXMgZmllbGQgdG8gZGlzdGluZ3Vpc2ggVklERU8gYW5kIFZCSSAqLworCWVudW0gdjRsMl9idWZfdHlwZQl0eXBlOworCisJLyogZm9yIGhvc3QgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUJcTsKKworCS8qIHRoZSBicmlkZ2UgZm9yIGhvc3QgYW5kIGRldmljZSAqLworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIJKmN1cnJfZnJhbWU7CisKKwkvKiBmb3IgZGV2aWNlICovCisJc3BpbmxvY2tfdAkJcXVldWVfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZTsKKwlzdHJ1Y3QgcG9zZWlkb24JCSpwZDsKK307CisKK3N0cnVjdCBwb3NlaWRvbiB7CisJc3RydWN0IGxpc3RfaGVhZAlkZXZpY2VfbGlzdDsKKworCXN0cnVjdCBtdXRleAkJbG9jazsKKwlzdHJ1Y3Qga3JlZgkJa3JlZjsKKworCS8qIGZvciBWNEwyICovCisJc3RydWN0IHY0bDJfZGV2aWNlCXY0bDJfZGV2OworCisJLyogaGFyZHdhcmUgaW5mbyAqLworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRlcmZhY2U7CisJaW50IAkJCWN1cl90cmFuc2Zlcl9tb2RlOworCisJc3RydWN0IHZpZGVvX2RhdGEJdmlkZW9fZGF0YTsJLyogdmlkZW8gKi8KKwlzdHJ1Y3QgdmJpX2RhdGEJCXZiaV9kYXRhOwkvKiB2YmkJICovCisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvCWF1ZGlvOwkJLyogYXVkaW8gKGFsc2EpICovCisJc3RydWN0IHJhZGlvX2RhdGEJcmFkaW9fZGF0YTsJLyogRk0JICovCisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyCWR2Yl9kYXRhOwkvKiBEVkIJICovCisKKwl1MzIJCQlzdGF0ZTsKKwlzdHJ1Y3QgZmlsZQkJKmZpbGVfZm9yX3N0cmVhbTsgLyogdGhlIGFjdGl2ZSBzdHJlYW0qLworCisjaWZkZWYgQ09ORklHX1BNCisJaW50ICgqcG1fc3VzcGVuZCkoc3RydWN0IHBvc2VpZG9uICopOworCWludCAoKnBtX3Jlc3VtZSkoc3RydWN0IHBvc2VpZG9uICopOworCXBtX21lc3NhZ2VfdAkJbXNnOworCisJc3RydWN0IHdvcmtfc3RydWN0CXBtX3dvcms7CisJdTgJCQlwb3J0bnVtOworI2VuZGlmCit9OworCitzdHJ1Y3QgcG9zZWlkb25fZm9ybWF0IHsKKwljaGFyIAkqbmFtZTsKKwlpbnQJZm91cmNjOwkJIC8qIHZpZGVvNGxpbnV4IDIJICAqLworCWludAlkZXB0aDsJCSAvKiBiaXQvcGl4ZWwJCSAgKi8KKwlpbnQJZmxhZ3M7Cit9OworCitzdHJ1Y3QgcG9zZWlkb25fdHZub3JtIHsKKwl2NGwyX3N0ZF9pZAl2NGwyX2lkOworCWNoYXIJCW5hbWVbMTJdOworCXUzMgkJdGxnX3R2bm9ybTsKK307CisKKy8qIHZpZGVvICovCitpbnQgcGRfdmlkZW9faW5pdChzdHJ1Y3QgcG9zZWlkb24gKik7Cit2b2lkIHBkX3ZpZGVvX2V4aXQoc3RydWN0IHBvc2VpZG9uICopOworaW50IHN0b3BfYWxsX3ZpZGVvX3N0cmVhbShzdHJ1Y3QgcG9zZWlkb24gKik7CisKKy8qIGFsc2EgYXVkaW8gKi8KK2ludCBwb3NlaWRvbl9hdWRpb19pbml0KHN0cnVjdCBwb3NlaWRvbiAqKTsKK2ludCBwb3NlaWRvbl9hdWRpb19mcmVlKHN0cnVjdCBwb3NlaWRvbiAqKTsKKyNpZmRlZiBDT05GSUdfUE0KK2ludCBwbV9hbHNhX3N1c3BlbmQoc3RydWN0IHBvc2VpZG9uICopOworaW50IHBtX2Fsc2FfcmVzdW1lKHN0cnVjdCBwb3NlaWRvbiAqKTsKKyNlbmRpZgorCisvKiBkdmIgKi8KK2ludCBwZF9kdmJfdXNiX2RldmljZV9pbml0KHN0cnVjdCBwb3NlaWRvbiAqKTsKK3ZvaWQgcGRfZHZiX3VzYl9kZXZpY2VfZXhpdChzdHJ1Y3QgcG9zZWlkb24gKik7Cit2b2lkIHBkX2R2Yl91c2JfZGV2aWNlX2NsZWFudXAoc3RydWN0IHBvc2VpZG9uICopOworaW50IHBkX2R2Yl9nZXRfYWRhcHRlcl9udW0oc3RydWN0IHBkX2R2Yl9hZGFwdGVyICopOwordm9pZCBkdmJfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHBkX2R2Yl9hZGFwdGVyICopOworCisvKiBGTSAqLworaW50IHBvc2VpZG9uX2ZtX2luaXQoc3RydWN0IHBvc2VpZG9uICopOworaW50IHBvc2VpZG9uX2ZtX2V4aXQoc3RydWN0IHBvc2VpZG9uICopOworc3RydWN0IHZpZGVvX2RldmljZSAqdmRldl9pbml0KHN0cnVjdCBwb3NlaWRvbiAqLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlICopOworCisvKiB2ZW5kb3IgY29tbWFuZCBvcHMgKi8KK2ludCBzZW5kX3NldF9yZXEoc3RydWN0IHBvc2VpZG9uKiwgdTgsIHMzMiwgczMyKik7CitpbnQgc2VuZF9nZXRfcmVxKHN0cnVjdCBwb3NlaWRvbiosIHU4LCBzMzIsIHZvaWQqLCBzMzIqLCBzMzIpOworczMyIHNldF90dW5lcl9tb2RlKHN0cnVjdCBwb3NlaWRvbiosIHVuc2lnbmVkIGNoYXIpOworCisvKiBidWxrIHVyYiBhbGxvYy9mcmVlICovCitpbnQgYWxsb2NfYnVsa191cmJzX2dlbmVyaWMoc3RydWN0IHVyYiAqKnVyYl9hcnJheSwgaW50IG51bSwKKwkJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1OCBlcF9hZGRyLAorCQkJaW50IGJ1Zl9zaXplLCBnZnBfdCBnZnBfZmxhZ3MsCisJCQl1c2JfY29tcGxldGVfdCBjb21wbGV0ZV9mbiwgdm9pZCAqY29udGV4dCk7Cit2b2lkIGZyZWVfYWxsX3VyYl9nZW5lcmljKHN0cnVjdCB1cmIgKip1cmJfYXJyYXksIGludCBudW0pOworCisvKiBtaXNjICovCit2b2lkIHBvc2VpZG9uX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZik7Cit2b2lkIGRlc3Ryb3lfdmlkZW9fZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKip2X2Rldik7CitleHRlcm4gaW50IGRlYnVnX21vZGU7Cit2b2lkIHNldF9kZWJ1Z19tb2RlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCwgaW50IGRlYnVnX21vZGUpOworCisjaWZkZWYgQ09ORklHX1BNCisjZGVmaW5lIGluX2hpYmVybmF0aW9uKHBkKSAocGQtPm1zZy5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpCisjZWxzZQorI2RlZmluZSBpbl9oaWJlcm5hdGlvbihwZCkgKDApCisjZW5kaWYKKyNkZWZpbmUgZ2V0X3BtX2NvdW50KHApIChhdG9taWNfcmVhZCgmKHApLT5pbnRlcmZhY2UtPnBtX3VzYWdlX2NudCkpCisKKyNkZWZpbmUgbG9nKGEsIC4uLikgcHJpbnRrKEtFUk5fREVCVUcgIlx0WyAlcyA6ICUuM2QgXSAiYSJcbiIsIFwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sICAjIyBfX1ZBX0FSR1NfXykKKworLyogZm9yIHBvd2VyIG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgbG9ncG0ocGQpIGRvIHtcCisJCQlpZiAoZGVidWdfbW9kZSAmIDB4MTApXAorCQkJCWxvZygpO1wKKwkJfSB3aGlsZSAoMCkKKworI2RlZmluZSBsb2dzKGYpIGRvIHsgXAorCQkJaWYgKChkZWJ1Z19tb2RlICYgMHg0KSAmJiBcCisJCQkJKGYpLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpIFwKKwkJCQkJbG9nKCJ0eXBlIDogVkJJIik7XAorCQkJCQkJCQlcCisJCQlpZiAoKGRlYnVnX21vZGUgJiAweDgpICYmIFwKKwkJCQkoZiktPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSBcCisJCQkJCWxvZygidHlwZSA6IFZJREVPIik7XAorCQl9IHdoaWxlICgwKQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtZHZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEzM2FlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1kdmIuYwpAQCAtMCwwICsxLDU5MyBAQAorI2luY2x1ZGUgInBkLWNvbW1vbi5oIgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi9kbXguaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAidmVuZG9yY21kcy5oIgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitzdGF0aWMgdm9pZCBkdmJfdXJiX2NsZWFudXAoc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIpOworCitzdGF0aWMgaW50IGR2Yl9iYW5kd2lkdGhbXVsyXSA9IHsKKwl7IFRMR19CV184LCBCQU5EV0lEVEhfOF9NSFogfSwKKwl7IFRMR19CV183LCBCQU5EV0lEVEhfN19NSFogfSwKKwl7IFRMR19CV182LCBCQU5EV0lEVEhfNl9NSFogfQorfTsKK3N0YXRpYyBpbnQgZHZiX2JhbmR3aWR0aF9sZW5ndGggPSBBUlJBWV9TSVpFKGR2Yl9iYW5kd2lkdGgpOworCitzdGF0aWMgczMyIGR2Yl9zdGFydF9zdHJlYW1pbmcoc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIpOworc3RhdGljIGludCBwb3NlaWRvbl9jaGVja19tb2RlX2R2YnQoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzMzIgcmV0ID0gMCwgY21kX3N0YXR1cyA9IDA7CisKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXNjaGVkdWxlX3RpbWVvdXQoSFovNCk7CisKKwlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShwZC0+dWRldiwgMCwgQlVMS19BTFRFUk5BVEVfSUZBQ0UpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNldF90dW5lcl9tb2RlKHBkLCBUTEdfTU9ERV9DQVBTX0RWQl9UKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogc2lnbmFsIHNvdXJjZSAqLworCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgU0dOTF9TUkNfU0VMLCBUTEdfU0lHX1NSQ19BTlRFTk5BLCAmY21kX3N0YXR1cyk7CisJaWYgKHJldHxjbWRfc3RhdHVzKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKKy8qIGFjcXVpcmUgOgorICogCTEgPT0gb3BlbgorICogCTAgPT0gcmVsZWFzZQorICovCitzdGF0aWMgaW50IHBvc2VpZG9uX3RzX2J1c19jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgYWNxdWlyZSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmI7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXBkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBkX2R2YiA9IGNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHBkX2R2Yl9hZGFwdGVyLCBkdmJfZmUpOworCWlmIChhY3F1aXJlKSB7CisJCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwkJaWYgKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1QpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIG9wZW5fb3V0OworCQl9CisKKwkJaWYgKHBkLT5zdGF0ZSAmJiAhKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0RWQlQpKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIG9wZW5fb3V0OworCQl9CisKKwkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHBkLT5pbnRlcmZhY2UpOworCQlpZiAoMCA9PSBwZC0+c3RhdGUpIHsKKwkJCXJldCA9IHBvc2VpZG9uX2NoZWNrX21vZGVfZHZidChwZCk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKKwkJCQlnb3RvIG9wZW5fb3V0OworCQkJfQorCQkJcGQtPnN0YXRlIHw9IFBPU0VJRE9OX1NUQVRFX0RWQlQ7CisJCQlwZF9kdmItPmJhbmR3aWR0aCA9IDA7CisJCQlwZF9kdmItPnByZXZfZnJlcSA9IDA7CisJCX0KKwkJYXRvbWljX2luYygmcGRfZHZiLT51c2Vycyk7CisJCWtyZWZfZ2V0KCZwZC0+a3JlZik7CitvcGVuX291dDoKKwkJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJfSBlbHNlIHsKKwkJZHZiX3N0b3Bfc3RyZWFtaW5nKHBkX2R2Yik7CisKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBkX2R2Yi0+dXNlcnMpKSB7CisJCQltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJCQlwZC0+c3RhdGUgJj0gflBPU0VJRE9OX1NUQVRFX0RWQlQ7CisJCQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwkJfQorCQlrcmVmX3B1dCgmcGQtPmtyZWYsIHBvc2VpZG9uX2RlbGV0ZSk7CisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcG9zZWlkb25fZmVfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKyNpZmRlZiBDT05GSUdfUE0KKwlwZC0+cG1fc3VzcGVuZCA9IE5VTEw7CisJcGQtPnBtX3Jlc3VtZSAgPSBOVUxMOworI2VuZGlmCit9CisKK3N0YXRpYyBzMzIgcG9zZWlkb25fZmVfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZXR1cm4gdHJ1ZSBpZiB3ZSBjYW4gc2F0aXNmeSB0aGUgY29uZGl0aW9ucywgZWxzZSByZXR1cm4gZmFsc2UuCisgKi8KK3N0YXRpYyBib29sIGNoZWNrX3NjYW5fb2soX191MzIgZnJlcSwgaW50IGJhbmR3aWR0aCwKKwkJCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYmFuZHdpZHRoIDwgMCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGFkYXB0ZXItPnByZXZfZnJlcSA9PSBmcmVxCisJCSYmIGFkYXB0ZXItPmJhbmR3aWR0aCA9PSBiYW5kd2lkdGgpIHsKKwkJbG9uZyBubCA9IGppZmZpZXMgLSBhZGFwdGVyLT5sYXN0X2ppZmZpZXM7CisJCXVuc2lnbmVkIGludCBtc2VjIDsKKworCQltc2VjID0gamlmZmllc190b19tc2VjcyhhYnMobmwpKTsKKwkJcmV0dXJuIG1zZWMgPiAxNTAwMCA/IHRydWUgOiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgZmlybXdhcmUgZGVsYXlzIHRvbyBsb25nIGZvciBhbiBpbnZhbGlkIGZyZXF1ZW5jeS4KKyAqLworc3RhdGljIGludCBmd19kZWxheV9vdmVyZmxvdyhzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJbG9uZyBubCA9IGppZmZpZXMgLSBhZGFwdGVyLT5sYXN0X2ppZmZpZXM7CisJdW5zaWduZWQgaW50IG1zZWMgOworCisJbXNlYyA9IGppZmZpZXNfdG9fbXNlY3MoYWJzKG5sKSk7CisJcmV0dXJuIG1zZWMgPiA4MDAgPyB0cnVlIDogZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fc2V0X2ZlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCit7CisJczMyIHJldCA9IDAsIGNtZF9zdGF0dXMgPSAwOworCXMzMiBpLCBiYW5kd2lkdGggPSAtMTsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSAmcGQtPmR2Yl9kYXRhOworCisJaWYgKGluX2hpYmVybmF0aW9uKHBkKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgZHZiX2JhbmR3aWR0aF9sZW5ndGg7IGkrKykKKwkJaWYgKGZlcC0+dS5vZmRtLmJhbmR3aWR0aCA9PSBkdmJfYmFuZHdpZHRoW2ldWzFdKQorCQkJYmFuZHdpZHRoID0gZHZiX2JhbmR3aWR0aFtpXVswXTsKKworCWlmIChjaGVja19zY2FuX29rKGZlcC0+ZnJlcXVlbmN5LCBiYW5kd2lkdGgsIHBkX2R2YikpIHsKKwkJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUVU5FX0ZSRVFfU0VMRUNULAorCQkJCQlmZXAtPmZyZXF1ZW5jeSAvIDEwMDAsICZjbWRfc3RhdHVzKTsKKwkJaWYgKHJldCB8IGNtZF9zdGF0dXMpIHsKKwkJCWxvZygiZXJyb3IgbGluZSIpOworCQkJZ290byBmcm9udF9vdXQ7CisJCX0KKworCQlyZXQgPSBzZW5kX3NldF9yZXEocGQsIERWQlRfQkFORFdfU0VMLAorCQkJCQkJYmFuZHdpZHRoLCAmY21kX3N0YXR1cyk7CisJCWlmIChyZXQgfCBjbWRfc3RhdHVzKSB7CisJCQlsb2coImVycm9yIGxpbmUiKTsKKwkJCWdvdG8gZnJvbnRfb3V0OworCQl9CisKKwkJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUQUtFX1JFUVVFU1QsIDAsICZjbWRfc3RhdHVzKTsKKwkJaWYgKHJldCB8IGNtZF9zdGF0dXMpIHsKKwkJCWxvZygiZXJyb3IgbGluZSIpOworCQkJZ290byBmcm9udF9vdXQ7CisJCX0KKworCQkvKiBzYXZlIHRoZSBjb250ZXh0IGZvciBmdXR1cmUgKi8KKwkJbWVtY3B5KCZwZF9kdmItPmZlX3BhcmFtLCBmZXAsIHNpemVvZigqZmVwKSk7CisJCXBkX2R2Yi0+YmFuZHdpZHRoID0gYmFuZHdpZHRoOworCQlwZF9kdmItPnByZXZfZnJlcSA9IGZlcC0+ZnJlcXVlbmN5OworCQlwZF9kdmItPmxhc3RfamlmZmllcyA9IGppZmZpZXM7CisJfQorZnJvbnRfb3V0OgorCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcG1fZHZiX3N1c3BlbmQoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YiA9ICZwZC0+ZHZiX2RhdGE7CisJZHZiX3N0b3Bfc3RyZWFtaW5nKHBkX2R2Yik7CisJZHZiX3VyYl9jbGVhbnVwKHBkX2R2Yik7CisJbXNsZWVwKDUwMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG1fZHZiX3Jlc3VtZShzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKKworCXBvc2VpZG9uX2NoZWNrX21vZGVfZHZidChwZCk7CisJbXNsZWVwKDMwMCk7CisJcG9zZWlkb25fc2V0X2ZlKCZwZF9kdmItPmR2Yl9mZSwgJnBkX2R2Yi0+ZmVfcGFyYW0pOworCisJZHZiX3N0YXJ0X3N0cmVhbWluZyhwZF9kdmIpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBzMzIgcG9zZWlkb25fZmVfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSAmcGQtPmR2Yl9kYXRhOworCisjaWZkZWYgQ09ORklHX1BNCisJcGQtPnBtX3N1c3BlbmQgPSBwbV9kdmJfc3VzcGVuZDsKKwlwZC0+cG1fcmVzdW1lICA9IHBtX2R2Yl9yZXN1bWU7CisjZW5kaWYKKwltZW1zZXQoJnBkX2R2Yi0+ZmVfcGFyYW0sIDAsCisJCQlzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fZ2V0X2ZlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKKworCW1lbWNweShmZXAsICZwZF9kdmItPmZlX3BhcmFtLCBzaXplb2YoKmZlcCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvc2VpZG9uX2ZlX2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyAqdHVuZSkKK3sKKwl0dW5lLT5taW5fZGVsYXlfbXMgPSAxMDAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvc2VpZG9uX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdCkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJczMyIHJldCA9IC0xLCBjbWRfc3RhdHVzOworCXN0cnVjdCB0dW5lcl9kdHZfc2lnX3N0YXRfcyBzdGF0dXMgPSB7fTsKKworCWlmIChpbl9oaWJlcm5hdGlvbihwZCkpCisJCXJldHVybiAtRUJVU1k7CisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCisJcmV0ID0gc2VuZF9nZXRfcmVxKHBkLCBUVU5FUl9TVEFUVVMsIFRMR19NT0RFX0RWQl9ULAorCQkJCSZzdGF0dXMsICZjbWRfc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJaWYgKHJldCB8IGNtZF9zdGF0dXMpIHsKKwkJbG9nKCJnZXQgdHVuZXIgc3RhdHVzIGVycm9yIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkZWJ1Z19tb2RlKQorCQlsb2coIlAgOiAlZCwgTCAlZCwgTEIgOiVkIiwgc3RhdHVzLnNpZ19wcmVzZW50LAorCQkJc3RhdHVzLnNpZ19sb2NrZWQsIHN0YXR1cy5zaWdfbG9ja19idXN5KTsKKworCWlmIChzdGF0dXMuc2lnX2xvY2tfYnVzeSkgeworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKHN0YXR1cy5zaWdfcHJlc2VudCB8fCBzdGF0dXMuc2lnX2xvY2tlZCkgeworCQkqc3RhdCB8PSBGRV9IQVNfTE9DSyB8IEZFX0hBU19TSUdOQUwgfCBGRV9IQVNfQ0FSUklFUgorCQkJCXwgRkVfSEFTX1NZTkMgfCBGRV9IQVNfVklURVJCSTsKKwl9IGVsc2UgeworCQlpZiAoZndfZGVsYXlfb3ZlcmZsb3coJnBkLT5kdmJfZGF0YSkpCisJCQkqc3RhdCB8PSBGRV9USU1FRE9VVDsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwb3NlaWRvbl9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCB0dW5lcl9iZXJfcmF0ZV9zIHRsZ19iZXIgPSB7fTsKKwlzMzIgcmV0ID0gLTEsIGNtZF9zdGF0dXM7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJcmV0ID0gc2VuZF9nZXRfcmVxKHBkLCBUVU5FUl9CRVJfUkFURSwgMCwKKwkJCQkmdGxnX2JlciwgJmNtZF9zdGF0dXMsIHNpemVvZih0bGdfYmVyKSk7CisJaWYgKHJldCB8IGNtZF9zdGF0dXMpCisJCWdvdG8gb3V0OworCSpiZXIgPSB0bGdfYmVyLmJlcl9yYXRlOworb3V0OgorCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzMzIgcG9zZWlkb25fcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc3RyZW5ndGgpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCB0dW5lcl9kdHZfc2lnX3N0YXRfcyBzdGF0dXMgPSB7fTsKKwlzMzIgcmV0ID0gMCwgY21kX3N0YXR1czsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlyZXQgPSBzZW5kX2dldF9yZXEocGQsIFRVTkVSX1NUQVRVUywgVExHX01PREVfRFZCX1QsCisJCQkJJnN0YXR1cywgJmNtZF9zdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKKwlpZiAocmV0IHwgY21kX3N0YXR1cykKKwkJZ290byBvdXQ7CisJaWYgKChzdGF0dXMuc2lnX3ByZXNlbnQgfHwgc3RhdHVzLnNpZ19sb2NrZWQpICYmICFzdGF0dXMuc2lnX3N0cmVuZ3RoKQorCQkqc3RyZW5ndGggPSAweEZGRkY7CisJZWxzZQorCQkqc3RyZW5ndGggPSBzdGF0dXMuc2lnX3N0cmVuZ3RoOworb3V0OgorCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvc2VpZG9uX3JlYWRfdW5jX2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1bmMpCit7CisJKnVuYyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBwb3NlaWRvbl9mcm9udGVuZF9vcHMgPSB7CisJLmluZm8gPSB7CisJCS5uYW1lCQk9ICJQb3NlaWRvbiBEVkItVCIsCisJCS50eXBlCQk9IEZFX09GRE0sCisJCS5mcmVxdWVuY3lfbWluCT0gMTc0MDAwMDAwLAorCQkuZnJlcXVlbmN5X21heCAgPSA4NjIwMDAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcHNpemUJICA9IDYyNTAwLC8qIEZJWE1FICovCisJCS5jYXBzID0gRkVfQ0FOX0lOVkVSU0lPTl9BVVRPIHwKKwkJCUZFX0NBTl9GRUNfMV8yIHwgRkVfQ0FOX0ZFQ18yXzMgfCBGRV9DQU5fRkVDXzNfNCB8CisJCQlGRV9DQU5fRkVDXzVfNiB8IEZFX0NBTl9GRUNfN184IHwgRkVfQ0FOX0ZFQ19BVVRPIHwKKwkJCUZFX0NBTl9RUFNLIHwgRkVfQ0FOX1FBTV8xNiB8IEZFX0NBTl9RQU1fNjQgfAorCQkJRkVfQ0FOX1FBTV9BVVRPIHwgRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8gfAorCQkJRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gfAorCQkJRkVfQ0FOX1JFQ09WRVIgfAorCQkJRkVfQ0FOX0hJRVJBUkNIWV9BVVRPLAorCX0sCisKKwkucmVsZWFzZSA9IHBvc2VpZG9uX2ZlX3JlbGVhc2UsCisKKwkuaW5pdCA9IHBvc2VpZG9uX2ZlX2luaXQsCisJLnNsZWVwID0gcG9zZWlkb25fZmVfc2xlZXAsCisKKwkuc2V0X2Zyb250ZW5kID0gcG9zZWlkb25fc2V0X2ZlLAorCS5nZXRfZnJvbnRlbmQgPSBwb3NlaWRvbl9nZXRfZmUsCisJLmdldF90dW5lX3NldHRpbmdzID0gcG9zZWlkb25fZmVfZ2V0X3R1bmVfc2V0dGluZ3MsCisKKwkucmVhZF9zdGF0dXMJPSBwb3NlaWRvbl9yZWFkX3N0YXR1cywKKwkucmVhZF9iZXIJPSBwb3NlaWRvbl9yZWFkX2JlciwKKwkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBwb3NlaWRvbl9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKKwkucmVhZF9zbnIJPSBwb3NlaWRvbl9yZWFkX3NuciwKKwkucmVhZF91Y2Jsb2Nrcwk9IHBvc2VpZG9uX3JlYWRfdW5jX2Jsb2NrcywKKworCS50c19idXNfY3RybCA9IHBvc2VpZG9uX3RzX2J1c19jdHJsLAorfTsKKworc3RhdGljIHZvaWQgZHZiX3VyYl9pcnEoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gdXJiLT5jb250ZXh0OworCWludCBsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJc3RydWN0IGR2Yl9kZW11eCAqZGVtdXggPSAmcGRfZHZiLT5kZW11eDsKKwlzMzIgcmV0OworCisJaWYgKCFwZF9kdmItPmlzX3N0cmVhbWluZyB8fCB1cmItPnN0YXR1cykgeworCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVQUk9UTykKKwkJCWdvdG8gcmVzZW5kOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSBsZW4pCisJCWR2Yl9kbXhfc3dmaWx0ZXIoZGVtdXgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW4pOworCWVsc2UgaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSBsZW4gLSA0KSB7CisJCWludCBvZmZzZXQ7CisJCXU4ICpidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCQkvKgorCQkgKiBUaGUgcGFja2V0IHNpemUgaXMgNTEyLAorCQkgKiBsYXN0IHBhY2tldCBjb250YWlucyA0NTYgYnl0ZXMgdHNwIGRhdGEKKwkJICovCisJCWZvciAob2Zmc2V0ID0gNDU2OyBvZmZzZXQgPCBsZW47IG9mZnNldCArPSA1MTIpIHsKKwkJCWlmICghc3RybmNtcChidWYgKyBvZmZzZXQsICJEVkhTIiwgNCkpIHsKKwkJCQlkdmJfZG14X3N3ZmlsdGVyKGRlbXV4LCBidWYsIG9mZnNldCk7CisJCQkJaWYgKGxlbiA+IG9mZnNldCArIDUyICsgNCkgeworCQkJCQkvKjE2IGJ5dGVzIHRyYWlsZXIgKyAzNiBieXRlcyBwYWRkaW5nICovCisJCQkJCWJ1ZiArPSBvZmZzZXQgKyA1MjsKKwkJCQkJbGVuIC09IG9mZnNldCArIDUyICsgNDsKKwkJCQkJZHZiX2RteF9zd2ZpbHRlcihkZW11eCwgYnVmLCBsZW4pOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworcmVzZW5kOgorCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCkKKwkJbG9nKCIgdXNiX3N1Ym1pdF91cmIgZmFpbGVkOiBlcnJvciAlZCIsIHJldCk7Cit9CisKK3N0YXRpYyBpbnQgZHZiX3VyYl9pbml0KHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKQoreworCWlmIChwZF9kdmItPnVyYl9hcnJheVswXSkKKwkJcmV0dXJuIDA7CisKKwlhbGxvY19idWxrX3VyYnNfZ2VuZXJpYyhwZF9kdmItPnVyYl9hcnJheSwgRFZCX1NCVUZfTlVNLAorCQkJcGRfZHZiLT5wZF9kZXZpY2UtPnVkZXYsIHBkX2R2Yi0+ZXBfYWRkciwKKwkJCURWQl9VUkJfQlVGX1NJWkUsIEdGUF9LRVJORUwsCisJCQlkdmJfdXJiX2lycSwgcGRfZHZiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHZiX3VyYl9jbGVhbnVwKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKQoreworCWZyZWVfYWxsX3VyYl9nZW5lcmljKHBkX2R2Yi0+dXJiX2FycmF5LCBEVkJfU0JVRl9OVU0pOworfQorCitzdGF0aWMgczMyIGR2Yl9zdGFydF9zdHJlYW1pbmcoc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IHBkX2R2Yi0+cGRfZGV2aWNlOworCWludCByZXQgPSAwOworCisJaWYgKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1QpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCWlmICghcGRfZHZiLT5pc19zdHJlYW1pbmcpIHsKKwkJczMyIGksIGNtZF9zdGF0dXMgPSAwOworCQkvKgorCQkgKiBPbmNlIHVwb24gYSB0aW1lLCB0aGVyZSB3YXMgYSBkaWZmaWN1bHQgYnVnIGx5aW5nIGhlcmUuCisJCSAqIHJldCA9IHNlbmRfc2V0X3JlcShwZCwgVEFLRV9SRVFVRVNULCAwLCAmY21kX3N0YXR1cyk7CisJCSAqLworCisJCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgUExBWV9TRVJWSUNFLCAxLCAmY21kX3N0YXR1cyk7CisJCWlmIChyZXQgfCBjbWRfc3RhdHVzKQorCQkJZ290byBvdXQ7CisKKwkJcmV0ID0gZHZiX3VyYl9pbml0KHBkX2R2Yik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJcGRfZHZiLT5pc19zdHJlYW1pbmcgPSAxOworCQlmb3IgKGkgPSAwOyBpIDwgRFZCX1NCVUZfTlVNOyBpKyspIHsKKwkJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBkX2R2Yi0+dXJiX2FycmF5W2ldLAorCQkJCQkJICAgICAgIEdGUF9LRVJORUwpOworCQkJaWYgKHJldCkgeworCQkJCWxvZygiIHN1Ym1pdCB1cmIgZXJyb3IgJWQiLCByZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgZHZiX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBwZF9kdmItPnBkX2RldmljZTsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlpZiAocGRfZHZiLT5pc19zdHJlYW1pbmcpIHsKKwkJczMyIGksIHJldCwgY21kX3N0YXR1cyA9IDA7CisKKwkJcGRfZHZiLT5pc19zdHJlYW1pbmcgPSAwOworCisJCWZvciAoaSA9IDA7IGkgPCBEVkJfU0JVRl9OVU07IGkrKykKKwkJCWlmIChwZF9kdmItPnVyYl9hcnJheVtpXSkKKwkJCQl1c2Jfa2lsbF91cmIocGRfZHZiLT51cmJfYXJyYXlbaV0pOworCisJCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgUExBWV9TRVJWSUNFLCBUTEdfVFVORV9QTEFZX1NWQ19TVE9QLAorCQkJCQkmY21kX3N0YXR1cyk7CisJCWlmIChyZXQgfCBjbWRfc3RhdHVzKQorCQkJbG9nKCJlcnJvciIpOworCX0KKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKK30KKworc3RhdGljIGludCBwZF9zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZCkKK3sKKwlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YiA9IGZlZWQtPmRlbXV4LT5wcml2OworCWludCByZXQgPSAwOworCisJaWYgKCFwZF9kdmIpCisJCXJldHVybiAtMTsKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBkX2R2Yi0+YWN0aXZlX2ZlZWQpID09IDEpCisJCXJldCA9IGR2Yl9zdGFydF9zdHJlYW1pbmcocGRfZHZiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBkX3N0b3BfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQpCit7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSBmZWVkLT5kZW11eC0+cHJpdjsKKworCWlmICghcGRfZHZiKQorCQlyZXR1cm4gLTE7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBkX2R2Yi0+YWN0aXZlX2ZlZWQpKQorCQlkdmJfc3RvcF9zdHJlYW1pbmcocGRfZHZiKTsKKwlyZXR1cm4gMDsKK30KKworRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CitpbnQgcGRfZHZiX3VzYl9kZXZpY2VfaW5pdChzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eDsKKwlpbnQgcmV0ID0gMDsKKworCXBkX2R2Yi0+ZXBfYWRkciA9IDB4ODI7CisJYXRvbWljX3NldCgmcGRfZHZiLT51c2VycywgMCk7CisJYXRvbWljX3NldCgmcGRfZHZiLT5hY3RpdmVfZmVlZCwgMCk7CisJcGRfZHZiLT5wZF9kZXZpY2UgPSBwZDsKKworCXJldCA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZwZF9kdmItPmR2Yl9hZGFwLAorCQkJCSJQb3NlaWRvbiBkdmJ0IGFkYXB0ZXIiLAorCQkJCVRISVNfTU9EVUxFLAorCQkJCU5VTEwgLyogZm9yIGhpYmVybmF0aW9uIGNvcnJlY3RseSovLAorCQkJCWFkYXB0ZXJfbnIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yMTsKKworCS8qIHJlZ2lzdGVyIGZyb250ZW5kICovCisJcGRfZHZiLT5kdmJfZmUuZGVtb2R1bGF0b3JfcHJpdiA9IHBkOworCW1lbWNweSgmcGRfZHZiLT5kdmJfZmUub3BzLCAmcG9zZWlkb25fZnJvbnRlbmRfb3BzLAorCQkJc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJcmV0ID0gZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZwZF9kdmItPmR2Yl9hZGFwLCAmcGRfZHZiLT5kdmJfZmUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yMjsKKworCS8qIHJlZ2lzdGVyIGRlbXV4IGRldmljZSAqLworCWR2YmRlbXV4ID0gJnBkX2R2Yi0+ZGVtdXg7CisJZHZiZGVtdXgtPmRteC5jYXBhYmlsaXRpZXMgPSBETVhfVFNfRklMVEVSSU5HIHwgRE1YX1NFQ1RJT05fRklMVEVSSU5HOworCWR2YmRlbXV4LT5wcml2ID0gcGRfZHZiOworCWR2YmRlbXV4LT5mZWVkbnVtID0gZHZiZGVtdXgtPmZpbHRlcm51bSA9IDY0OworCWR2YmRlbXV4LT5zdGFydF9mZWVkID0gcGRfc3RhcnRfZmVlZDsKKwlkdmJkZW11eC0+c3RvcF9mZWVkID0gcGRfc3RvcF9mZWVkOworCWR2YmRlbXV4LT53cml0ZV90b19kZWNvZGVyID0gTlVMTDsKKworCXJldCA9IGR2Yl9kbXhfaW5pdChkdmJkZW11eCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3IzOworCisJcGRfZHZiLT5kbXhkZXYuZmlsdGVybnVtID0gcGRfZHZiLT5kZW11eC5maWx0ZXJudW07CisJcGRfZHZiLT5kbXhkZXYuZGVtdXggPSAmcGRfZHZiLT5kZW11eC5kbXg7CisJcGRfZHZiLT5kbXhkZXYuY2FwYWJpbGl0aWVzID0gMDsKKworCXJldCA9IGR2Yl9kbXhkZXZfaW5pdCgmcGRfZHZiLT5kbXhkZXYsICZwZF9kdmItPmR2Yl9hZGFwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjM7CisJcmV0dXJuIDA7CisKK2Vycm9yMzoKKwlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZCgmcGRfZHZiLT5kdmJfZmUpOworZXJyb3IyOgorCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJnBkX2R2Yi0+ZHZiX2FkYXApOworZXJyb3IxOgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcGRfZHZiX3VzYl9kZXZpY2VfZXhpdChzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKKworCXdoaWxlIChhdG9taWNfcmVhZCgmcGRfZHZiLT51c2VycykgIT0gMAorCQl8fCBhdG9taWNfcmVhZCgmcGRfZHZiLT5hY3RpdmVfZmVlZCkgIT0gMCkgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsKKwl9CisJZHZiX2RteGRldl9yZWxlYXNlKCZwZF9kdmItPmRteGRldik7CisJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoJnBkX2R2Yi0+ZHZiX2ZlKTsKKwlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZwZF9kdmItPmR2Yl9hZGFwKTsKKwlwZF9kdmJfdXNiX2RldmljZV9jbGVhbnVwKHBkKTsKK30KKwordm9pZCBwZF9kdmJfdXNiX2RldmljZV9jbGVhbnVwKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSAmcGQtPmR2Yl9kYXRhOworCisJZHZiX3VyYl9jbGVhbnVwKHBkX2R2Yik7Cit9CisKK2ludCBwZF9kdmJfZ2V0X2FkYXB0ZXJfbnVtKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKQoreworCXJldHVybiBwZF9kdmItPmR2Yl9hZGFwLm51bTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZjBlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtbWFpbi5jCkBAIC0wLDAgKzEsNTM5IEBACisvKgorICogZGV2aWNlIGRyaXZlciBmb3IgVGVsZWdlbnQgdGxnMjMwMCBiYXNlZCBUViBjYXJkcworICoKKyAqIEF1dGhvciA6CisgKiAJS2FuZyBZb25nCTxrYW5neW9uZ0B0ZWxlZ2VudC5jb20+CisgKiAJWmhhbmcgWGlhb2JpbmcJPHhiemhhbmdAdGVsZWdlbnQuY29tPgorICogCUh1YW5nIFNoaWppZQk8enl6aWlpQHRlbGVnZW50LmNvbT4gb3IgPHNoaWppZThAZ21haWwuY29tPgorICoKKyAqCShjKSAyMDA5IFRlbGVnZW50IFN5c3RlbXMKKyAqCShjKSAyMDEwIFRlbGVnZW50IFN5c3RlbXMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3F1aXJrcy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisKKyNpbmNsdWRlICJ2ZW5kb3JjbWRzLmgiCisjaW5jbHVkZSAicGQtY29tbW9uLmgiCisKKyNkZWZpbmUgVkVORE9SX0lECTB4MUIyNAorI2RlZmluZSBQUk9EVUNUX0lECTB4NDAwMQorc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhWRU5ET1JfSUQsIFBST0RVQ1RfSUQsIDI1NSwgMSwgMCkgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFZFTkRPUl9JRCwgUFJPRFVDVF9JRCwgMjU1LCAxLCAxKSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCitpbnQgZGVidWdfbW9kZTsKK21vZHVsZV9wYXJhbShkZWJ1Z19tb2RlLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19tb2RlLCAiMCA9IGRpc2FibGUsIDEgPSBlbmFibGUsIDIgPSB2ZXJib3NlIik7CisKK2NvbnN0IGNoYXIgKmZpcm13YXJlX25hbWUgPSAidGxnMjMwMF9maXJtd2FyZS5iaW4iOworc3RydWN0IHVzYl9kcml2ZXIgcG9zZWlkb25fZHJpdmVyOworc3RhdGljIExJU1RfSEVBRChwZF9kZXZpY2VfbGlzdCk7CisKKy8qCisgKiBzZW5kIHNldCByZXF1ZXN0IHRvIFVTQiBmaXJtd2FyZS4KKyAqLworczMyIHNlbmRfc2V0X3JlcShzdHJ1Y3QgcG9zZWlkb24gKnBkLCB1OCBjbWRpZCwgczMyIHBhcmFtLCBzMzIgKmNtZF9zdGF0dXMpCit7CisJczMyIHJldDsKKwlzOCAgZGF0YVszMl0gPSB7fTsKKwl1MTYgbG93ZXJfMTYsIHVwcGVyXzE2OworCisJaWYgKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1QpCisJCXJldHVybiAtRU5PREVWOworCisJbWRlbGF5KDMwKTsKKworCWlmIChwYXJhbSA9PSAwKSB7CisJCXVwcGVyXzE2ID0gbG93ZXJfMTYgPSAwOworCX0gZWxzZSB7CisJCS8qIHNlbmQgMzIgYml0IHBhcmFtIGFzICB0d28gMTYgYml0IHBhcmFtLGxpdHRsZSBlbmRpYW4gKi8KKwkJbG93ZXJfMTYgPSAodW5zaWduZWQgc2hvcnQpKHBhcmFtICYgMHhmZmZmKTsKKwkJdXBwZXJfMTYgPSAodW5zaWduZWQgc2hvcnQpKChwYXJhbSA+PiAxNikgJiAweGZmZmYpOworCX0KKwlyZXQgPSB1c2JfY29udHJvbF9tc2cocGQtPnVkZXYsCisJCQkgdXNiX3JjdmN0cmxwaXBlKHBkLT51ZGV2LCAwKSwKKwkJCSBSRVFfU0VUX0NNRCB8IGNtZGlkLAorCQkJIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJIGxvd2VyXzE2LAorCQkJIHVwcGVyXzE2LAorCQkJICZkYXRhLAorCQkJIHNpemVvZigqY21kX3N0YXR1cyksCisJCQkgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCisJaWYgKCFyZXQpIHsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9IGVsc2UgeworCQkvKiAgMXN0IDQgYnl0ZXMgaW50byBjbWRfc3RhdHVzICAgKi8KKwkJbWVtY3B5KChjaGFyICopY21kX3N0YXR1cywgJihkYXRhWzBdKSwgc2l6ZW9mKCpjbWRfc3RhdHVzKSk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogc2VuZCBnZXQgcmVxdWVzdCB0byBQb3NlaWRvbiBmaXJtd2FyZS4KKyAqLworczMyIHNlbmRfZ2V0X3JlcShzdHJ1Y3QgcG9zZWlkb24gKnBkLCB1OCBjbWRpZCwgczMyIHBhcmFtLAorCQkJdm9pZCAqYnVmLCBzMzIgKmNtZF9zdGF0dXMsIHMzMiBkYXRhbGVuKQoreworCXMzMiByZXQ7CisJczggZGF0YVsxMjhdID0ge307CisJdTE2IGxvd2VyXzE2LCB1cHBlcl8xNjsKKworCWlmIChwZC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9ESVNDT05ORUNUKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1kZWxheSgzMCk7CisJaWYgKHBhcmFtID09IDApIHsKKwkJdXBwZXJfMTYgPSBsb3dlcl8xNiA9IDA7CisJfSBlbHNlIHsKKwkJLypzZW5kIDMyIGJpdCBwYXJhbSBhcyB0d28gMTYgYml0IHBhcmFtLCBsaXR0bGUgZW5kaWFuICovCisJCWxvd2VyXzE2ID0gKHVuc2lnbmVkIHNob3J0KShwYXJhbSAmIDB4ZmZmZik7CisJCXVwcGVyXzE2ID0gKHVuc2lnbmVkIHNob3J0KSgocGFyYW0gPj4gMTYpICYgMHhmZmZmKTsKKwl9CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHBkLT51ZGV2LAorCQkJIHVzYl9yY3ZjdHJscGlwZShwZC0+dWRldiwgMCksCisJCQkgUkVRX0dFVF9DTUQgfCBjbWRpZCwKKwkJCSBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSBsb3dlcl8xNiwKKwkJCSB1cHBlcl8xNiwKKwkJCSAmZGF0YSwKKwkJCSAoZGF0YWxlbiArIHNpemVvZigqY21kX3N0YXR1cykpLAorCQkJIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXJldHVybiAtRU5YSU87CisJfSBlbHNlIHsKKwkJLyogMXN0IDQgYnl0ZXMgaW50byBjbWRfc3RhdHVzLCByZW1haW5pbmcgZGF0YSBpbnRvIGNtZF9kYXRhICovCisJCW1lbWNweSgoY2hhciAqKWNtZF9zdGF0dXMsICZkYXRhWzBdLCBzaXplb2YoKmNtZF9zdGF0dXMpKTsKKwkJbWVtY3B5KChjaGFyICopYnVmLCAmZGF0YVtzaXplb2YoKmNtZF9zdGF0dXMpXSwgZGF0YWxlbik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBtX25vdGlmaWVyX2Jsb2NrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZHVtbXkpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKm5leHQ7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBQTV9QT1NUX0hJQkVSTkFUSU9OOgorCQlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgJnBkX2RldmljZV9saXN0KSB7CisJCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZTsKKwkJCWludCByYyA9IDA7CisKKwkJCXBkID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBwb3NlaWRvbiwgZGV2aWNlX2xpc3QpOworCQkJdWRldiA9IHBkLT51ZGV2OworCQkJaWZhY2UgPSBwZC0+aW50ZXJmYWNlOworCisJCQkvKiBJdCB3aWxsIGNhdXNlIHRoZSBzeXN0ZW0gdG8gcmVsb2FkIHRoZSBmaXJtd2FyZSAqLworCQkJcmMgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHVkZXYsIGlmYWNlKTsKKwkJCWlmIChyYyA+PSAwKSB7CisJCQkJdXNiX3Jlc2V0X2RldmljZSh1ZGV2KTsKKwkJCQl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJbG9nKCJldmVudCA6JWxkXG4iLCBldmVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcG1fbm90aWZlciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHBtX25vdGlmaWVyX2Jsb2NrLAorfTsKKworaW50IHNldF90dW5lcl9tb2RlKHN0cnVjdCBwb3NlaWRvbiAqcGQsIHVuc2lnbmVkIGNoYXIgbW9kZSkKK3sKKwlzMzIgcmV0LCBjbWRfc3RhdHVzOworCisJaWYgKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1QpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUVU5FX01PREVfU0VMRUNULCBtb2RlLCAmY21kX3N0YXR1cyk7CisJaWYgKHJldCB8fCBjbWRfc3RhdHVzKQorCQlyZXR1cm4gLUVOWElPOworCXJldHVybiAwOworfQorCit2b2lkIHBvc2VpZG9uX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBwb3NlaWRvbiwga3JlZik7CisKKwlpZiAoIXBkKQorCQlyZXR1cm47CisJbGlzdF9kZWxfaW5pdCgmcGQtPmRldmljZV9saXN0KTsKKworCXBkX2R2Yl91c2JfZGV2aWNlX2NsZWFudXAocGQpOworCS8qIGNsZWFuX2F1ZGlvX2RhdGEoJnBkLT5hdWRpb19kYXRhKTsqLworCisJaWYgKHBkLT51ZGV2KSB7CisJCXVzYl9wdXRfZGV2KHBkLT51ZGV2KTsKKwkJcGQtPnVkZXYgPSBOVUxMOworCX0KKwlpZiAocGQtPmludGVyZmFjZSkgeworCQl1c2JfcHV0X2ludGYocGQtPmludGVyZmFjZSk7CisJCXBkLT5pbnRlcmZhY2UgPSBOVUxMOworCX0KKwlrZnJlZShwZCk7CisJbG9nKCk7Cit9CisKK3N0YXRpYyBpbnQgZmlybXdhcmVfZG93bmxvYWQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IHJldCA9IDAsIGFjdHVhbF9sZW5ndGg7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7CisJdm9pZCAqZndidWYgPSBOVUxMOworCXNpemVfdCBmd2xlbmd0aCA9IDAsIG9mZnNldDsKKwlzaXplX3QgbWF4X3BhY2tldF9zaXplOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZpcm13YXJlX25hbWUsICZ1ZGV2LT5kZXYpOworCWlmIChyZXQpIHsKKwkJbG9nKCJkb3dubG9hZCBlcnIgOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZndsZW5ndGggPSBmdy0+c2l6ZTsKKworCWZ3YnVmID0ga3phbGxvYyhmd2xlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmd2J1ZikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJbWVtY3B5KGZ3YnVmLCBmdy0+ZGF0YSwgZndsZW5ndGgpOworCisJbWF4X3BhY2tldF9zaXplID0gdWRldi0+ZXBfb3V0WzB4MV0tPmRlc2Mud01heFBhY2tldFNpemU7CisJbG9nKCJcdFx0IGRvd25sb2FkIHNpemUgOiAlZCIsIChpbnQpbWF4X3BhY2tldF9zaXplKTsKKworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZndsZW5ndGg7IG9mZnNldCArPSBtYXhfcGFja2V0X3NpemUpIHsKKwkJYWN0dWFsX2xlbmd0aCA9IDA7CisJCXJldCA9IHVzYl9idWxrX21zZyh1ZGV2LAorCQkJCXVzYl9zbmRidWxrcGlwZSh1ZGV2LCAweDAxKSwgLyogZXAgMSAqLworCQkJCWZ3YnVmICsgb2Zmc2V0LAorCQkJCW1pbihtYXhfcGFja2V0X3NpemUsIGZ3bGVuZ3RoIC0gb2Zmc2V0KSwKKwkJCQkmYWN0dWFsX2xlbmd0aCwKKwkJCQlIWiAqIDEwKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKwlrZnJlZShmd2J1Zik7CitvdXQ6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcG9zZWlkb24gKmdldF9wZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlyZXR1cm4gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKK30KKworI2lmZGVmIENPTkZJR19QTQorLyogb25lLXRvLW9uZSBtYXAgOiBwb3NlaWRvbnt9IDwtLS0tPiB1c2JfZGV2aWNle30ncyBwb3J0ICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X21hcF9mbGFncyhzdHJ1Y3QgcG9zZWlkb24gKnBkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlwZC0+cG9ydG51bSA9IHVkZXYtPnBvcnRudW07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9hdXRvcG1fcmVmKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJcmV0dXJuICBwZC0+dmlkZW9fZGF0YS51c2VycyArIHBkLT52YmlfZGF0YS51c2VycyArIHBkLT5hdWRpby51c2VycworCQkrIGF0b21pY19yZWFkKCZwZC0+ZHZiX2RhdGEudXNlcnMpICsgcGQtPnJhZGlvX2RhdGEudXNlcnM7Cit9CisKKy8qIGZpeHVwIHNvbWV0aGluZyBmb3IgcG9zZWlkb24gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBvc2VpZG9uICpmaXh1cChzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCWludCBjb3VudDsKKworCS8qIG9sZCB1ZGV2IGFuZCBpbnRlcmZhY2UgaGF2ZSBnb25lLCBzbyBwdXQgYmFjayByZWZlcmVuY2UgLiAqLworCWNvdW50ID0gZ2V0X2F1dG9wbV9yZWYocGQpOworCWxvZygiY291bnQgOiAlZCwgcmVmIGNvdW50IDogJWQiLCBjb3VudCwgZ2V0X3BtX2NvdW50KHBkKSk7CisJd2hpbGUgKGNvdW50LS0pCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKKwkvKnVzYl9hdXRvcG1fc2V0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsgKi8KKworCXVzYl9wdXRfZGV2KHBkLT51ZGV2KTsKKwl1c2JfcHV0X2ludGYocGQtPmludGVyZmFjZSk7CisJbG9nKCJldmVudCA6ICVkXG4iLCBwZC0+bXNnLmV2ZW50KTsKKwlyZXR1cm4gcGQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG9zZWlkb24gKmZpbmRfb2xkX3Bvc2VpZG9uKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBkLCAmcGRfZGV2aWNlX2xpc3QsIGRldmljZV9saXN0KSB7CisJCWlmIChwZC0+cG9ydG51bSA9PSB1ZGV2LT5wb3J0bnVtICYmIGluX2hpYmVybmF0aW9uKHBkKSkKKwkJCXJldHVybiBmaXh1cChwZCk7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBJcyB0aGUgY2FyZCB3b3JraW5nIG5vdyA/ICovCitzdGF0aWMgaW5saW5lIGludCBpc193b3JraW5nKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJcmV0dXJuIGdldF9wbV9jb3VudChwZCkgPiAwOworfQorCitzdGF0aWMgaW50IHBvc2VpZG9uX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGdldF9wZChpbnRmKTsKKworCWlmICghcGQpCisJCXJldHVybiAwOworCWlmICghaXNfd29ya2luZyhwZCkpIHsKKwkJaWYgKGdldF9wbV9jb3VudChwZCkgPD0gMCAmJiAhaW5faGliZXJuYXRpb24ocGQpKSB7CisJCQlwZC0+bXNnLmV2ZW50ID0gUE1fRVZFTlRfQVVUT19TVVNQRU5EOworCQkJcGQtPnBtX3Jlc3VtZSA9IE5VTEw7IC8qICBhIGdvb2QgZ3VhcmQgKi8KKwkJCXByaW50ayhLRVJOX0RFQlVHICJcblx0KyBUTEcyMzAwIGF1dG8gc3VzcGVuZCArXG5cbiIpOworCQl9CisJCXJldHVybiAwOworCX0KKwlwZC0+bXNnID0gbXNnOyAvKiBzYXZlIGl0IGhlcmUgKi8KKwlsb2dwbShwZCk7CisJcmV0dXJuIHBkLT5wbV9zdXNwZW5kID8gcGQtPnBtX3N1c3BlbmQocGQpIDogMDsKK30KKworc3RhdGljIGludCBwb3NlaWRvbl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGdldF9wZChpbnRmKTsKKworCWlmICghcGQpCisJCXJldHVybiAwOworCXByaW50ayhLRVJOX0RFQlVHICJcblx0ICsrIFRMRzIzMDAgcmVzdW1lICsrXG5cbiIpOworCisJaWYgKCFpc193b3JraW5nKHBkKSkgeworCQlpZiAoUE1fRVZFTlRfQVVUT19TVVNQRU5EID09IHBkLT5tc2cuZXZlbnQpCisJCQlwZC0+bXNnID0gUE1TR19PTjsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChpbl9oaWJlcm5hdGlvbihwZCkpIHsKKwkJbG9ncG0ocGQpOworCQlyZXR1cm4gMDsKKwl9CisJbG9ncG0ocGQpOworCXJldHVybiBwZC0+cG1fcmVzdW1lID8gcGQtPnBtX3Jlc3VtZShwZCkgOiAwOworfQorCitzdGF0aWMgdm9pZCBoaWJlcm5hdGlvbl9yZXN1bWUoc3RydWN0IHdvcmtfc3RydWN0ICp3KQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBjb250YWluZXJfb2Yodywgc3RydWN0IHBvc2VpZG9uLCBwbV93b3JrKTsKKwlpbnQgY291bnQ7CisKKwlwZC0+bXNnLmV2ZW50ID0gMDsgLyogY2xlYXIgaXQgaGVyZSAqLworCXBkLT5zdGF0ZSAmPSB+UE9TRUlET05fU1RBVEVfRElTQ09OTkVDVDsKKworCS8qIHNldCB0aGUgbmV3IGludGVyZmFjZSdzIHJlZmVyZW5jZSAqLworCWNvdW50ID0gZ2V0X2F1dG9wbV9yZWYocGQpOworCXdoaWxlIChjb3VudC0tKQorCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UocGQtPmludGVyZmFjZSk7CisKKwkvKiByZXN1bWUgdGhlIGNvbnRleHQgKi8KKwlsb2dwbShwZCk7CisJaWYgKHBkLT5wbV9yZXN1bWUpCisJCXBkLT5wbV9yZXN1bWUocGQpOworfQorI2Vsc2UgLyogQ09ORklHX1BNIGlzIG5vdCBlbmFibGVkOiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcG9zZWlkb24gKmZpbmRfb2xkX3Bvc2VpZG9uKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X21hcF9mbGFncyhzdHJ1Y3QgcG9zZWlkb24gKnBkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKK30KKyNlbmRpZgorCitzdGF0aWMgYm9vbCBjaGVja19maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50ICpkb3duX2Zpcm13YXJlKQoreworCXZvaWQgKmJ1ZjsKKwlpbnQgcmV0OworCXN0cnVjdCBjbWRfZmlybXdhcmVfdmVyc19zICpjbWRfZmlybTsKKworCWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpjbWRfZmlybSkgKyBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQkJIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSBSRVFfR0VUX0NNRCB8IEdFVF9GV19JRCwKKwkJCSBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAwLAorCQkJIDAsCisJCQkgYnVmLAorCQkJIHNpemVvZigqY21kX2Zpcm0pICsgc2l6ZW9mKHUzMiksCisJCQkgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCWtmcmVlKGJ1Zik7CisKKwlpZiAocmV0IDwgMCkgeworCQkqZG93bl9maXJtd2FyZSA9IDE7CisJCXJldHVybiBmaXJtd2FyZV9kb3dubG9hZCh1ZGV2KTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwb3NlaWRvbl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbmV3X29uZSA9IDA7CisKKwkvKiBkb3dubG9hZCBmaXJtd2FyZSAqLworCWNoZWNrX2Zpcm13YXJlKHVkZXYsICZyZXQpOworCWlmIChyZXQpCisJCXJldHVybiAwOworCisJLyogRG8gSSByZWNvdmVyeSBmcm9tIHRoZSBoaWJlcm5hdGUgPyAqLworCXBkID0gZmluZF9vbGRfcG9zZWlkb24odWRldik7CisJaWYgKCFwZCkgeworCQlwZCA9IGt6YWxsb2Moc2l6ZW9mKCpwZCksIEdGUF9LRVJORUwpOworCQlpZiAoIXBkKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWtyZWZfaW5pdCgmcGQtPmtyZWYpOworCQlzZXRfbWFwX2ZsYWdzKHBkLCB1ZGV2KTsKKwkJbmV3X29uZSA9IDE7CisJfQorCisJcGQtPnVkZXYJPSB1c2JfZ2V0X2Rldih1ZGV2KTsKKwlwZC0+aW50ZXJmYWNlCT0gdXNiX2dldF9pbnRmKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHBkKTsKKworCWlmIChuZXdfb25lKSB7CisJCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpbnRlcmZhY2UtPmRldjsKKworCQlsb2dwbShwZCk7CisJCW11dGV4X2luaXQoJnBkLT5sb2NrKTsKKworCQkvKiByZWdpc3RlciB2NGwyIGRldmljZSAqLworCQlzbnByaW50ZihwZC0+djRsMl9kZXYubmFtZSwgc2l6ZW9mKHBkLT52NGwyX2Rldi5uYW1lKSwgIiVzICVzIiwKKwkJCWRldi0+ZHJpdmVyLT5uYW1lLCBkZXZfbmFtZShkZXYpKTsKKwkJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgJnBkLT52NGwyX2Rldik7CisKKwkJLyogcmVnaXN0ZXIgZGV2aWNlcyBpbiBkaXJlY3RvcnkgL2RldiAqLworCQlyZXQgPSBwZF92aWRlb19pbml0KHBkKTsKKwkJcG9zZWlkb25fYXVkaW9faW5pdChwZCk7CisJCXBvc2VpZG9uX2ZtX2luaXQocGQpOworCQlwZF9kdmJfdXNiX2RldmljZV9pbml0KHBkKTsKKworCQlJTklUX0xJU1RfSEVBRCgmcGQtPmRldmljZV9saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCgmcGQtPmRldmljZV9saXN0LCAmcGRfZGV2aWNlX2xpc3QpOworCX0KKworCWRldmljZV9pbml0X3dha2V1cCgmdWRldi0+ZGV2LCAxKTsKKyNpZmRlZiBDT05GSUdfUE0KKwlwZC0+dWRldi0+YXV0b3N1c3BlbmRfZGlzYWJsZWQgPSAwOworCXBkLT51ZGV2LT5hdXRvc3VzcGVuZF9kZWxheSA9IEhaICogUE1fU1VTUEVORF9ERUxBWTsKKworCWlmIChpbl9oaWJlcm5hdGlvbihwZCkpIHsKKwkJSU5JVF9XT1JLKCZwZC0+cG1fd29yaywgaGliZXJuYXRpb25fcmVzdW1lKTsKKwkJc2NoZWR1bGVfd29yaygmcGQtPnBtX3dvcmspOworCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwb3NlaWRvbl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGdldF9wZChpbnRlcmZhY2UpOworCisJaWYgKCFwZCkKKwkJcmV0dXJuOworCWxvZ3BtKHBkKTsKKwlpZiAoaW5faGliZXJuYXRpb24ocGQpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJcGQtPnN0YXRlIHw9IFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1Q7CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisKKwkvKiBzdG9wIHVyYiB0cmFuc2ZlcnJpbmcgKi8KKwlzdG9wX2FsbF92aWRlb19zdHJlYW0ocGQpOworCWR2Yl9zdG9wX3N0cmVhbWluZygmcGQtPmR2Yl9kYXRhKTsKKworCS8qdW5yZWdpc3RlciB2NGwyIGRldmljZSAqLworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnBkLT52NGwyX2Rldik7CisKKwlsb2NrX2tlcm5lbCgpOworCXsKKwkJcGRfZHZiX3VzYl9kZXZpY2VfZXhpdChwZCk7CisJCXBvc2VpZG9uX2ZtX2V4aXQocGQpOworCisJCXBvc2VpZG9uX2F1ZGlvX2ZyZWUocGQpOworCQlwZF92aWRlb19leGl0KHBkKTsKKwl9CisJdW5sb2NrX2tlcm5lbCgpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCWtyZWZfcHV0KCZwZC0+a3JlZiwgcG9zZWlkb25fZGVsZXRlKTsKK30KKworc3RydWN0IHVzYl9kcml2ZXIgcG9zZWlkb25fZHJpdmVyID0geworCS5uYW1lCQk9ICJwb3NlaWRvbiIsCisJLnByb2JlCQk9IHBvc2VpZG9uX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gcG9zZWlkb25fZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSBpZF90YWJsZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IHBvc2VpZG9uX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBwb3NlaWRvbl9yZXN1bWUsCisjZW5kaWYKKwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPSAxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcG9zZWlkb25faW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnBvc2VpZG9uX2RyaXZlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZWdpc3Rlcl9wbV9ub3RpZmllcigmcG1fbm90aWZlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBvc2VpZG9uX2V4aXQodm9pZCkKK3sKKwlsb2coKTsKKwl1bnJlZ2lzdGVyX3BtX25vdGlmaWVyKCZwbV9ub3RpZmVyKTsKKwl1c2JfZGVyZWdpc3RlcigmcG9zZWlkb25fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocG9zZWlkb25faW5pdCk7Cittb2R1bGVfZXhpdChwb3NlaWRvbl9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiVGVsZWdlbnQgU3lzdGVtcyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGb3IgdGxnMjMwMC1iYXNlZCBVU0IgZGV2aWNlICIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLXJhZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtcmFkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTU3NjZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLXJhZGlvLmMKQEAgLTAsMCArMSw0MjAgQEAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2luY2x1ZGUgInBkLWNvbW1vbi5oIgorI2luY2x1ZGUgInZlbmRvcmNtZHMuaCIKKworc3RhdGljIGludCBzZXRfZnJlcXVlbmN5KHN0cnVjdCBwb3NlaWRvbiAqcCwgX191MzIgZnJlcXVlbmN5KTsKK3N0YXRpYyBpbnQgcG9zZWlkb25fZm1fY2xvc2Uoc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCBwb3NlaWRvbl9mbV9vcGVuKHN0cnVjdCBmaWxlICpmaWxwKTsKKworI2RlZmluZSBUVU5FUl9GUkVRX01JTl9GTSA3NjAwMDAwMAorI2RlZmluZSBUVU5FUl9GUkVRX01BWF9GTSAxMDgwMDAwMDAKKworI2RlZmluZSBNQVhfUFJFRU1QSEFTSVMgKFY0TDJfUFJFRU1QSEFTSVNfNzVfdVMgKyAxKQorc3RhdGljIGludCBwcmVlbXBoYXNpc1tNQVhfUFJFRU1QSEFTSVNdID0geworCVRMR19UVU5FX0FTVERfTk9ORSwgICAvKiBWNEwyX1BSRUVNUEhBU0lTX0RJU0FCTEVEICovCisJVExHX1RVTkVfQVNURF9GTV9FVVIsIC8qIFY0TDJfUFJFRU1QSEFTSVNfNTBfdVMgICAgKi8KKwlUTEdfVFVORV9BU1REX0ZNX1VTLCAgLyogVjRMMl9QUkVFTVBIQVNJU183NV91UyAgICAqLworfTsKKworc3RhdGljIGludCBwb3NlaWRvbl9jaGVja19tb2RlX3JhZGlvKHN0cnVjdCBwb3NlaWRvbiAqcCkKK3sKKwlpbnQgcmV0OworCXUzMiBzdGF0dXM7CisKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXNjaGVkdWxlX3RpbWVvdXQoSFovMik7CisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UocC0+dWRldiwgMCwgQlVMS19BTFRFUk5BVEVfSUZBQ0UpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHNldF90dW5lcl9tb2RlKHAsIFRMR19NT0RFX0ZNX1JBRElPKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gc2VuZF9zZXRfcmVxKHAsIFNHTkxfU1JDX1NFTCwgVExHX1NJR19TUkNfQU5URU5OQSwgJnN0YXR1cyk7CisJcmV0ID0gc2VuZF9zZXRfcmVxKHAsIFRVTkVSX0FVRF9BTkFfU1RELAorCQkJCXAtPnJhZGlvX2RhdGEucHJlX2VtcGhhc2lzLCAmc3RhdHVzKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHAsIFRVTkVSX0FVRF9NT0RFLAorCQkJCVRMR19UVU5FX1RWQVVESU9fTU9ERV9TVEVSRU8sICZzdGF0dXMpOworCXJldCB8PSBzZW5kX3NldF9yZXEocCwgQVVESU9fU0FNUExFX1JBVEVfU0VMLAorCQkJCUFUVl9BVURJT19SQVRFXzQ4SywgJnN0YXR1cyk7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwLCBUVU5FX0ZSRVFfU0VMRUNULCBUVU5FUl9GUkVRX01JTl9GTSwgJnN0YXR1cyk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwbV9mbV9zdXNwZW5kKHN0cnVjdCBwb3NlaWRvbiAqcCkKK3sKKwlsb2dwbShwKTsKKwlwbV9hbHNhX3N1c3BlbmQocCk7CisJdXNiX3NldF9pbnRlcmZhY2UocC0+dWRldiwgMCwgMCk7CisJbXNsZWVwKDMwMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG1fZm1fcmVzdW1lKHN0cnVjdCBwb3NlaWRvbiAqcCkKK3sKKwlsb2dwbShwKTsKKwlwb3NlaWRvbl9jaGVja19tb2RlX3JhZGlvKHApOworCXNldF9mcmVxdWVuY3kocCwgcC0+cmFkaW9fZGF0YS5mbV9mcmVxKTsKKwlwbV9hbHNhX3Jlc3VtZShwKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHBvc2VpZG9uX2ZtX29wZW4oc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZmQpOworCWludCByZXQgPSAwOworCisJaWYgKCFwKQorCQlyZXR1cm4gLTE7CisKKwltdXRleF9sb2NrKCZwLT5sb2NrKTsKKwlpZiAocC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9ESVNDT05ORUNUKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwLT5zdGF0ZSAmJiAhKHAtPnN0YXRlICYgUE9TRUlET05fU1RBVEVfRk0pKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHAtPmludGVyZmFjZSk7CisJaWYgKDAgPT0gcC0+c3RhdGUpIHsKKwkJLyogZGVmYXVsdCBwcmUtZW1waGFzaXMgKi8KKwkJaWYgKHAtPnJhZGlvX2RhdGEucHJlX2VtcGhhc2lzID09IDApCisJCQlwLT5yYWRpb19kYXRhLnByZV9lbXBoYXNpcyA9IFRMR19UVU5FX0FTVERfRk1fRVVSOworCQlzZXRfZGVidWdfbW9kZSh2ZmQsIGRlYnVnX21vZGUpOworCisJCXJldCA9IHBvc2VpZG9uX2NoZWNrX21vZGVfcmFkaW8ocCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocC0+aW50ZXJmYWNlKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXAtPnN0YXRlIHw9IFBPU0VJRE9OX1NUQVRFX0ZNOworCX0KKwlwLT5yYWRpb19kYXRhLnVzZXJzKys7CisJa3JlZl9nZXQoJnAtPmtyZWYpOworCWZpbHAtPnByaXZhdGVfZGF0YSA9IHA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBvc2VpZG9uX2ZtX2Nsb3NlKHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcmFkaW9fZGF0YSAqZm0gPSAmcC0+cmFkaW9fZGF0YTsKKwl1aW50MzJfdCBzdGF0dXM7CisKKwltdXRleF9sb2NrKCZwLT5sb2NrKTsKKwlmbS0+dXNlcnMtLTsKKwlpZiAoMCA9PSBmbS0+dXNlcnMpCisJCXAtPnN0YXRlICY9IH5QT1NFSURPTl9TVEFURV9GTTsKKworCWlmIChmbS0+aXNfcmFkaW9fc3RyZWFtaW5nICYmIGZpbHAgPT0gcC0+ZmlsZV9mb3Jfc3RyZWFtKSB7CisJCWZtLT5pc19yYWRpb19zdHJlYW1pbmcgPSAwOworCQlzZW5kX3NldF9yZXEocCwgUExBWV9TRVJWSUNFLCBUTEdfVFVORV9QTEFZX1NWQ19TVE9QLCAmc3RhdHVzKTsKKwl9CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHAtPmludGVyZmFjZSk7CisJbXV0ZXhfdW5sb2NrKCZwLT5sb2NrKTsKKworCWtyZWZfcHV0KCZwLT5rcmVmLCBwb3NlaWRvbl9kZWxldGUpOworCWZpbHAtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdikKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlzdHJsY3B5KHYtPmRyaXZlciwgInRlbGUtcmFkaW8iLCBzaXplb2Yodi0+ZHJpdmVyKSk7CisJc3RybGNweSh2LT5jYXJkLCAiVGVsZWdlbnQgUG9zZWlkb24iLCBzaXplb2Yodi0+Y2FyZCkpOworCXVzYl9tYWtlX3BhdGgocC0+dWRldiwgdi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbykpOworCXYtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigwLCAwLCAxKTsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHBvc2VpZG9uX2ZtX2ZvcHMgPSB7CisJLm93bmVyICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICAgICAgICA9IHBvc2VpZG9uX2ZtX29wZW4sCisJLnJlbGVhc2UgICAgICAgPSBwb3NlaWRvbl9mbV9jbG9zZSwKKwkuaW9jdGwJICAgICAgID0gdmlkZW9faW9jdGwyLAorfTsKKworaW50IHRsZ19mbV92aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQoreworCXN0cnVjdCB0dW5lcl9mbV9zaWdfc3RhdF9zIGZtX3N0YXQgPSB7fTsKKwlpbnQgcmV0LCBzdGF0dXMsIGNvdW50ID0gNTsKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAodnQtPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdnQtPnR5cGUJPSBWNEwyX1RVTkVSX1JBRElPOworCXZ0LT5jYXBhYmlsaXR5CT0gVjRMMl9UVU5FUl9DQVBfU1RFUkVPOworCXZ0LT5yYW5nZWxvdwk9IFRVTkVSX0ZSRVFfTUlOX0ZNIC8gNjI1MDA7CisJdnQtPnJhbmdlaGlnaAk9IFRVTkVSX0ZSRVFfTUFYX0ZNIC8gNjI1MDA7CisJdnQtPnJ4c3ViY2hhbnMJPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJdnQtPmF1ZG1vZGUJPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCXZ0LT5zaWduYWwJPSAwOworCXZ0LT5hZmMgCT0gMDsKKworCW11dGV4X2xvY2soJnAtPmxvY2spOworCXJldCA9IHNlbmRfZ2V0X3JlcShwLCBUVU5FUl9TVEFUVVMsIFRMR19NT0RFX0ZNX1JBRElPLAorCQkJICAgICAgJmZtX3N0YXQsICZzdGF0dXMsIHNpemVvZihmbV9zdGF0KSk7CisKKwl3aGlsZSAoZm1fc3RhdC5zaWdfbG9ja19idXN5ICYmIGNvdW50LS0gJiYgIXJldCkgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsKKworCQlyZXQgPSBzZW5kX2dldF9yZXEocCwgVFVORVJfU1RBVFVTLCBUTEdfTU9ERV9GTV9SQURJTywKKwkJCQkgICZmbV9zdGF0LCAmc3RhdHVzLCBzaXplb2YoZm1fc3RhdCkpOworCX0KKwltdXRleF91bmxvY2soJnAtPmxvY2spOworCisJaWYgKHJldCB8fCBzdGF0dXMpIHsKKwkJdnQtPnNpZ25hbCA9IDA7CisJfSBlbHNlIGlmICgoZm1fc3RhdC5zaWdfcHJlc2VudCB8fCBmbV9zdGF0LnNpZ19sb2NrZWQpCisJCQkmJiBmbV9zdGF0LnNpZ19zdHJlbmd0aCA9PSAwKSB7CisJCXZ0LT5zaWduYWwgPSAweGZmZmY7CisJfSBlbHNlCisJCXZ0LT5zaWduYWwgPSAoZm1fc3RhdC5zaWdfc3RyZW5ndGggKiAyNTUgLyAxMCkgPDwgODsKKworCXJldHVybiAwOworfQorCitpbnQgZm1fZ2V0X2ZyZXEoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqYXJncCkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlhcmdwLT5mcmVxdWVuY3kgPSBwLT5yYWRpb19kYXRhLmZtX2ZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgcG9zZWlkb24gKnAsIF9fdTMyIGZyZXF1ZW5jeSkKK3sKKwlfX3UzMiBmcmVxIDsKKwlpbnQgcmV0LCBzdGF0dXM7CisKKwltdXRleF9sb2NrKCZwLT5sb2NrKTsKKworCXJldCA9IHNlbmRfc2V0X3JlcShwLCBUVU5FUl9BVURfQU5BX1NURCwKKwkJCQlwLT5yYWRpb19kYXRhLnByZV9lbXBoYXNpcywgJnN0YXR1cyk7CisKKwlmcmVxID0gIChmcmVxdWVuY3kgKiAxMjUpICogNTAwIC8gMTAwMDsvKiBrSFogKi8KKwlpZiAoZnJlcSA8IFRVTkVSX0ZSRVFfTUlOX0ZNLzEwMDAgfHwgZnJlcSA+IFRVTkVSX0ZSRVFfTUFYX0ZNLzEwMDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyZXQgPSBzZW5kX3NldF9yZXEocCwgVFVORV9GUkVRX1NFTEVDVCwgZnJlcSwgJnN0YXR1cyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3IgOworCXJldCA9IHNlbmRfc2V0X3JlcShwLCBUQUtFX1JFUVVFU1QsIDAsICZzdGF0dXMpOworCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlzY2hlZHVsZV90aW1lb3V0KEhaLzQpOworCWlmICghcC0+cmFkaW9fZGF0YS5pc19yYWRpb19zdHJlYW1pbmcpIHsKKwkJcmV0ID0gc2VuZF9zZXRfcmVxKHAsIFRBS0VfUkVRVUVTVCwgMCwgJnN0YXR1cyk7CisJCXJldCA9IHNlbmRfc2V0X3JlcShwLCBQTEFZX1NFUlZJQ0UsCisJCQkJVExHX1RVTkVfUExBWV9TVkNfU1RBUlQsICZzdGF0dXMpOworCQlwLT5yYWRpb19kYXRhLmlzX3JhZGlvX3N0cmVhbWluZyA9IDE7CisJfQorCXAtPnJhZGlvX2RhdGEuZm1fZnJlcSA9IGZyZXF1ZW5jeTsKK2Vycm9yOgorCW11dGV4X3VubG9jaygmcC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGZtX3NldF9mcmVxKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmFyZ3ApCit7CisJc3RydWN0IHBvc2VpZG9uICpwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcC0+ZmlsZV9mb3Jfc3RyZWFtICA9IGZpbGU7CisjaWZkZWYgQ09ORklHX1BNCisJcC0+cG1fc3VzcGVuZCA9IHBtX2ZtX3N1c3BlbmQ7CisJcC0+cG1fcmVzdW1lICA9IHBtX2ZtX3Jlc3VtZTsKKyNlbmRpZgorCXJldHVybiBzZXRfZnJlcXVlbmN5KHAsIGFyZ3AtPmZyZXF1ZW5jeSk7Cit9CisKK2ludCB0bGdfZm1fdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqYXJnKQoreworCXJldHVybiAwOworfQorCitpbnQgdGxnX2ZtX3ZpZGlvY19nX2V4dHNfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscykKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IGk7CisKKwlpZiAoY3RybHMtPmN0cmxfY2xhc3MgIT0gVjRMMl9DVFJMX0NMQVNTX0ZNX1RYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBjdHJscy0+Y291bnQ7IGkrKykgeworCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY3RybCA9IGN0cmxzLT5jb250cm9scyArIGk7CisKKwkJaWYgKGN0cmwtPmlkICE9IFY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVMpCisJCQljb250aW51ZTsKKworCQlpZiAoaSA8IE1BWF9QUkVFTVBIQVNJUykKKwkJCWN0cmwtPnZhbHVlID0gcC0+cmFkaW9fZGF0YS5wcmVfZW1waGFzaXM7CisJfQorCXJldHVybiAwOworfQorCitpbnQgdGxnX2ZtX3ZpZGlvY19zX2V4dHNfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzKQoreworCWludCBpOworCisJaWYgKGN0cmxzLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19GTV9UWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKKwkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwgPSBjdHJscy0+Y29udHJvbHMgKyBpOworCisJCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9UVU5FX1BSRUVNUEhBU0lTKQorCQkJY29udGludWU7CisKKwkJaWYgKGN0cmwtPnZhbHVlID49IDAgJiYgY3RybC0+dmFsdWUgPCBNQVhfUFJFRU1QSEFTSVMpIHsKKwkJCXN0cnVjdCBwb3NlaWRvbiAqcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwkJCWludCBwcmVfZW1waGFzaXMgPSBwcmVlbXBoYXNpc1tjdHJsLT52YWx1ZV07CisJCQl1MzIgc3RhdHVzOworCisJCQlzZW5kX3NldF9yZXEocCwgVFVORVJfQVVEX0FOQV9TVEQsCisJCQkJCQlwcmVfZW1waGFzaXMsICZzdGF0dXMpOworCQkJcC0+cmFkaW9fZGF0YS5wcmVfZW1waGFzaXMgPSBwcmVfZW1waGFzaXM7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCB0bGdfZm1fdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IHRsZ19mbV92aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwpCit7CisJaWYgKCEoY3RybC0+aWQgJiBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN0cmwtPmlkICY9IH5WNEwyX0NUUkxfRkxBR19ORVhUX0NUUkw7CisJaWYgKGN0cmwtPmlkICE9IFY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVMpIHsKKwkJLyogcmV0dXJuIHRoZSBuZXh0IHN1cHBvcnRlZCBjb250cm9sICovCisJCWN0cmwtPmlkID0gVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUzsKKwkJdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwoY3RybCwgVjRMMl9QUkVFTVBIQVNJU19ESVNBQkxFRCwKKwkJCQkJVjRMMl9QUkVFTVBIQVNJU183NV91UywgMSwKKwkJCQkJVjRMMl9QUkVFTVBIQVNJU181MF91Uyk7CisJCWN0cmwtPmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfVVBEQVRFOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCB0bGdfZm1fdmlkaW9jX3F1ZXJ5bWVudShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbWVudSkKK3sKKwlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnUocW1lbnUsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCit7CisJcmV0dXJuIHZ0LT5pbmRleCA+IDAgPyAtRUlOVkFMIDogMDsKK30KK3N0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2F1ZGlvICp2YSkKK3sKKwlyZXR1cm4gKHZhLT5pbmRleCAhPSAwKSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCAgICA9IDA7CisJYS0+bW9kZSAgICA9IDA7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHUzMiBpKQoreworCXJldHVybiAoaSAhPSAwKSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1MzIgKmkpCit7CisJcmV0dXJuICgqaSAhPSAwKSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHBvc2VpZG9uX2ZtX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZ19hdWRpbyAgICAgPSB2aWRpb2NfZ19hdWRpbywKKwkudmlkaW9jX3NfYXVkaW8gICAgID0gdmlkaW9jX3NfYXVkaW8sCisJLnZpZGlvY19nX2lucHV0ICAgICA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCAgICAgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX3F1ZXJ5Y3RybCAgID0gdGxnX2ZtX3ZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19xdWVyeW1lbnUgICA9IHRsZ19mbV92aWRpb2NfcXVlcnltZW51LAorCS52aWRpb2NfZ19jdHJsICAgICAgPSB0bGdfZm1fdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCAgICAgID0gdGxnX2ZtX3ZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19zX2V4dF9jdHJscyA9IHRsZ19mbV92aWRpb2Nfc19leHRzX2N0cmwsCisJLnZpZGlvY19nX2V4dF9jdHJscyA9IHRsZ19mbV92aWRpb2NfZ19leHRzX2N0cmwsCisJLnZpZGlvY19zX3R1bmVyICAgICA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ190dW5lciAgICAgPSB0bGdfZm1fdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IGZtX2dldF9mcmVxLAorCS52aWRpb2Nfc19mcmVxdWVuY3kgPSBmbV9zZXRfZnJlcSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHBvc2VpZG9uX2ZtX3RlbXBsYXRlID0geworCS5uYW1lICAgICAgID0gIlRlbGVnZW50LVJhZGlvIiwKKwkuZm9wcyAgICAgICA9ICZwb3NlaWRvbl9mbV9mb3BzLAorCS5taW5vciAgICAgID0gLTEsCisJLnJlbGVhc2UgICAgPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKKwkuaW9jdGxfb3BzICA9ICZwb3NlaWRvbl9mbV9pb2N0bF9vcHMsCit9OworCitpbnQgcG9zZWlkb25fZm1faW5pdChzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZm1fZGV2OworCisJZm1fZGV2ID0gdmRldl9pbml0KHAsICZwb3NlaWRvbl9mbV90ZW1wbGF0ZSk7CisJaWYgKGZtX2RldiA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGZtX2RldiwgVkZMX1RZUEVfUkFESU8sIC0xKSA8IDApIHsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZm1fZGV2KTsKKwkJcmV0dXJuIC0xOworCX0KKwlwLT5yYWRpb19kYXRhLmZtX2RldiA9IGZtX2RldjsKKwlyZXR1cm4gMDsKK30KKworaW50IHBvc2VpZG9uX2ZtX2V4aXQoc3RydWN0IHBvc2VpZG9uICpwKQoreworCWRlc3Ryb3lfdmlkZW9fZGV2aWNlKCZwLT5yYWRpb19kYXRhLmZtX2Rldik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC12aWRlby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlY2ZiYTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtdmlkZW8uYwpAQCAtMCwwICsxLDE2NjcgQEAKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KKworI2luY2x1ZGUgInBkLWNvbW1vbi5oIgorI2luY2x1ZGUgInZlbmRvcmNtZHMuaCIKKworc3RhdGljIGludCBwbV92aWRlb19zdXNwZW5kKHN0cnVjdCBwb3NlaWRvbiAqcGQpOworc3RhdGljIGludCBwbV92aWRlb19yZXN1bWUoc3RydWN0IHBvc2VpZG9uICpwZCk7CitzdGF0aWMgdm9pZCBpc29fYnViYmxlX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KTsKKworaW50IHVzYl90cmFuc2Zlcl9tb2RlOworbW9kdWxlX3BhcmFtKHVzYl90cmFuc2Zlcl9tb2RlLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh1c2JfdHJhbnNmZXJfbW9kZSwgIjAgPSBCdWxrLCAxID0gSXNvY2hyb25vdXMiKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwb3NlaWRvbl9mb3JtYXQgcG9zZWlkb25fZm9ybWF0c1tdID0geworCXsgIllVViA0MjIiLCBWNEwyX1BJWF9GTVRfWVVZViwgMTYsIDB9LAorCXsgIlJHQjU2NSIsIFY0TDJfUElYX0ZNVF9SR0I1NjUsIDE2LCAwfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG9zZWlkb25fdHZub3JtIHBvc2VpZG9uX3R2bm9ybXNbXSA9IHsKKwl7IFY0TDJfU1REX1BBTF9ELCAiUEFMLUQiLCAgVExHX1RVTkVfVlNURF9QQUxfRCB9LAorCXsgVjRMMl9TVERfUEFMX0IsICJQQUwtQiIsICBUTEdfVFVORV9WU1REX1BBTF9CIH0sCisJeyBWNEwyX1NURF9QQUxfRywgIlBBTC1HIiwgIFRMR19UVU5FX1ZTVERfUEFMX0cgfSwKKwl7IFY0TDJfU1REX1BBTF9ILCAiUEFMLUgiLCAgVExHX1RVTkVfVlNURF9QQUxfSCB9LAorCXsgVjRMMl9TVERfUEFMX0ksICJQQUwtSSIsICBUTEdfVFVORV9WU1REX1BBTF9JIH0sCisJeyBWNEwyX1NURF9QQUxfTSwgIlBBTC1NIiwgIFRMR19UVU5FX1ZTVERfUEFMX00gfSwKKwl7IFY0TDJfU1REX1BBTF9OLCAiUEFMLU4iLCAgVExHX1RVTkVfVlNURF9QQUxfTl9DT01CTyB9LAorCXsgVjRMMl9TVERfUEFMX05jLCAiUEFMLU5jIiwgVExHX1RVTkVfVlNURF9QQUxfTl9DT01CTyB9LAorCXsgVjRMMl9TVERfTlRTQ19NLCAiTlRTQy1NIiwgVExHX1RVTkVfVlNURF9OVFNDX00gfSwKKwl7IFY0TDJfU1REX05UU0NfTV9KUCwgIk5UU0MtSlAiLCBUTEdfVFVORV9WU1REX05UU0NfTV9KIH0sCisJeyBWNEwyX1NURF9TRUNBTV9CLCAiU0VDQU0tQiIsIFRMR19UVU5FX1ZTVERfU0VDQU1fQiB9LAorCXsgVjRMMl9TVERfU0VDQU1fRCwgIlNFQ0FNLUQiLCBUTEdfVFVORV9WU1REX1NFQ0FNX0QgfSwKKwl7IFY0TDJfU1REX1NFQ0FNX0csICJTRUNBTS1HIiwgVExHX1RVTkVfVlNURF9TRUNBTV9HIH0sCisJeyBWNEwyX1NURF9TRUNBTV9ILCAiU0VDQU0tSCIsIFRMR19UVU5FX1ZTVERfU0VDQU1fSCB9LAorCXsgVjRMMl9TVERfU0VDQU1fSywgIlNFQ0FNLUsiLCBUTEdfVFVORV9WU1REX1NFQ0FNX0sgfSwKKwl7IFY0TDJfU1REX1NFQ0FNX0sxLCAiU0VDQU0tSzEiLCBUTEdfVFVORV9WU1REX1NFQ0FNX0sxIH0sCisJeyBWNEwyX1NURF9TRUNBTV9MLCAiU0VDQU0tTCIsIFRMR19UVU5FX1ZTVERfU0VDQU1fTCB9LAorCXsgVjRMMl9TVERfU0VDQU1fTEMsICJTRUNBTS1MQyIsIFRMR19UVU5FX1ZTVERfU0VDQU1fTDEgfSwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFBPU0VJRE9OX1RWTk9STVMgPSBBUlJBWV9TSVpFKHBvc2VpZG9uX3R2bm9ybXMpOworCitzdHJ1Y3QgcGRfYXVkaW9fbW9kZSB7CisJdTMyIHRsZ19hdWRpb19tb2RlOworCXUzMiB2NGwyX2F1ZGlvX3N1YjsKKwl1MzIgdjRsMl9hdWRpb19tb2RlOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwZF9hdWRpb19tb2RlIHBkX2F1ZGlvX21vZGVzW10gPSB7CisJeyBUTEdfVFVORV9UVkFVRElPX01PREVfTU9OTywgVjRMMl9UVU5FUl9TVUJfTU9OTywKKwkJVjRMMl9UVU5FUl9NT0RFX01PTk8gfSwKKwl7IFRMR19UVU5FX1RWQVVESU9fTU9ERV9TVEVSRU8sIFY0TDJfVFVORVJfU1VCX1NURVJFTywKKwkJVjRMMl9UVU5FUl9NT0RFX1NURVJFTyB9LAorCXsgVExHX1RVTkVfVFZBVURJT19NT0RFX0xBTkdfQSwgVjRMMl9UVU5FUl9TVUJfTEFORzEsCisJCVY0TDJfVFVORVJfTU9ERV9MQU5HMSB9LAorCXsgVExHX1RVTkVfVFZBVURJT19NT0RFX0xBTkdfQiwgVjRMMl9UVU5FUl9TVUJfTEFORzIsCisJCVY0TDJfVFVORVJfTU9ERV9MQU5HMiB9LAorCXsgVExHX1RVTkVfVFZBVURJT19NT0RFX0xBTkdfQywgVjRMMl9UVU5FUl9TVUJfTEFORzEsCisJCVY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMiB9Cit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBQT1NFSURPTl9BVURJT01PRFMgPSBBUlJBWV9TSVpFKHBkX2F1ZGlvX21vZGVzKTsKKworc3RydWN0IHBkX2lucHV0IHsKKwljaGFyICpuYW1lOworCXVpbnQzMl90IHRsZ19zcmM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBkX2lucHV0IHBkX2lucHV0c1tdID0geworCXsgIlRWIEFudGVubmEiLCBUTEdfU0lHX1NSQ19BTlRFTk5BIH0sCisJeyAiVFYgQ2FibGUiLCBUTEdfU0lHX1NSQ19DQUJMRSB9LAorCXsgIlRWIFNWaWRlbyIsIFRMR19TSUdfU1JDX1NWSURFTyB9LAorCXsgIlRWIENvbXBvc2l0ZSIsIFRMR19TSUdfU1JDX0NPTVBPU0lURSB9Cit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBQT1NFSURPTl9JTlBVVFMgPSBBUlJBWV9TSVpFKHBkX2lucHV0cyk7CisKK3N0cnVjdCBwb3NlaWRvbl9jb250cm9sIHsKKwlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgdjRsMl9jdHJsOworCWVudW0gY21kX2N1c3RvbV9wYXJhbV9pZCB2Y19pZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG9zZWlkb25fY29udHJvbCBjb250cm9sc1tdID0geworCXsKKwkJeyBWNEwyX0NJRF9CUklHSFRORVNTLCBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJImJyaWdodG5lc3MiLCAwLCAxMDAwMCwgMSwgMTAwLCAwLCB9LAorCQlDVVNUX1BBUk1fSURfQlJJR0hUTkVTU19DVFJMCisJfSwgeworCQl7IFY0TDJfQ0lEX0NPTlRSQVNULCBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJImNvbnRyYXN0IiwgMCwgMTAwMDAsIDEsIDEwMCwgMCwgfSwKKwkJQ1VTVF9QQVJNX0lEX0NPTlRSQVNUX0NUUkwsCisJfSwgeworCQl7IFY0TDJfQ0lEX0hVRSwgVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCSJodWUiLCAwLCAxMDAwMCwgMSwgMTAwLCAwLCB9LAorCQlDVVNUX1BBUk1fSURfSFVFX0NUUkwsCisJfSwgeworCQl7IFY0TDJfQ0lEX1NBVFVSQVRJT04sIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkic2F0dXJhdGlvbiIsIDAsIDEwMDAwLCAxLCAxMDAsIDAsIH0sCisJCUNVU1RfUEFSTV9JRF9TQVRVUkFUSU9OX0NUUkwsCisJfSwKK307CisKK3N0cnVjdCB2aWRlb19zdGRfdG9fYXVkaW9fc3RkIHsKKwl2NGwyX3N0ZF9pZAl2aWRlb19zdGQ7CisJaW50IAkJYXVkaW9fc3RkOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19zdGRfdG9fYXVkaW9fc3RkIHZpZGVvX3RvX2F1ZGlvX21hcFtdID0geworCS8qIGNvdW50cnkgOiB7IDI3LCAzMiwgMzMsIDM0LCAzNiwgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA2NCwKKwkJCTY1LCA4NiwgMzUxLCAzNTIsIDM1MywgMzU0LCAzNTgsIDM3MiwgODUyLCA5NzIgfSAqLworCXsgKFY0TDJfU1REX1BBTF9JIHwgVjRMMl9TVERfUEFMX0IgfCBWNEwyX1NURF9QQUxfRCB8CisJCVY0TDJfU1REX1NFQ0FNX0wgfCBWNEwyX1NURF9TRUNBTV9EKSwgVExHX1RVTkVfQVNURF9OSUNBTSB9LAorCisJLyogY291bnRyeSA6IHsgMSwgNTIsIDU0LCA1NSwgODg2IH0gKi8KKwl7VjRMMl9TVERfTlRTQ19NIHwgVjRMMl9TVERfUEFMX04gfCBWNEwyX1NURF9QQUxfTSwgVExHX1RVTkVfQVNURF9CVFNDfSwKKworCS8qIGNvdW50cnkgOiB7IDgxIH0gKi8KKwl7IFY0TDJfU1REX05UU0NfTV9KUCwgVExHX1RVTkVfQVNURF9FSUFKIH0sCisKKwkvKiBvdGhlciBjb3VudHJ5IDogVExHX1RVTkVfQVNURF9BMiAqLworfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWFwX3NpemUgPSBBUlJBWV9TSVpFKHZpZGVvX3RvX2F1ZGlvX21hcCk7CisKK3N0YXRpYyBpbnQgZ2V0X2F1ZGlvX3N0ZCh2NGwyX3N0ZF9pZCB2NGwyX3N0ZCkKK3sKKwlpbnQgaSA9IDA7CisKKwlmb3IgKDsgaSA8IG1hcF9zaXplOyBpKyspIHsKKwkJaWYgKHY0bDJfc3RkICYgdmlkZW9fdG9fYXVkaW9fbWFwW2ldLnZpZGVvX3N0ZCkKKwkJCXJldHVybiB2aWRlb190b19hdWRpb19tYXBbaV0uYXVkaW9fc3RkOworCX0KKwlyZXR1cm4gVExHX1RVTkVfQVNURF9BMjsKK30KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IGZyb250LT5wZDsKKworCWxvZ3MoZnJvbnQpOworCisJc3RyY3B5KGNhcC0+ZHJpdmVyLCAidGVsZS12aWRlbyIpOworCXN0cmNweShjYXAtPmNhcmQsICJUZWxlZ2VudCBQb3NlaWRvbiIpOworCXVzYl9tYWtlX3BhdGgocC0+dWRldiwgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwljYXAtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigwLCAwLCAxKTsKKwljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9UVU5FUiB8CisJCQkJVjRMMl9DQVBfQVVESU8gfCBWNEwyX0NBUF9TVFJFQU1JTkcgfAorCQkJCVY0TDJfQ0FQX1JFQURXUklURSB8IFY0TDJfQ0FQX1ZCSV9DQVBUVVJFOworCXJldHVybiAwOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK3N0YXRpYyB2b2lkIGluaXRfY29weShzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8sIGJvb2wgaW5kZXgpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gdmlkZW8tPmZyb250OworCisJdmlkZW8tPmZpZWxkX2NvdW50CT0gaW5kZXg7CisJdmlkZW8tPmxpbmVzX2NvcGllZAk9IDA7CisJdmlkZW8tPnByZXZfbGVmdAk9IDAgOworCXZpZGVvLT5kc3QgCQk9IChjaGFyICopdmlkZW9idWZfdG9fdm1hbGxvYyhmcm9udC0+Y3Vycl9mcmFtZSkKKwkJCQkJKyBpbmRleCAqIHZpZGVvLT5saW5lc19zaXplOworCXZpZGVvLT52YmktPmNvcGllZCAJPSAwOyAvKiBzZXQgaXQgaGVyZSAqLworfQorCitzdGF0aWMgYm9vbCBnZXRfZnJhbWUoc3RydWN0IGZyb250X2ZhY2UgKmZyb250LCBpbnQgKm5lZWRfaW5pdCkKK3sKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiA9IGZyb250LT5jdXJyX2ZyYW1lOworCisJaWYgKHZiKQorCQlyZXR1cm4gdHJ1ZTsKKworCXNwaW5fbG9jaygmZnJvbnQtPnF1ZXVlX2xvY2spOworCWlmICghbGlzdF9lbXB0eSgmZnJvbnQtPmFjdGl2ZSkpIHsKKwkJdmIgPSBsaXN0X2VudHJ5KGZyb250LT5hY3RpdmUubmV4dCwKKwkJCSAgICAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyLCBxdWV1ZSk7CisJCWlmIChuZWVkX2luaXQpCisJCQkqbmVlZF9pbml0ID0gMTsKKwkJZnJvbnQtPmN1cnJfZnJhbWUgPSB2YjsKKwkJbGlzdF9kZWxfaW5pdCgmdmItPnF1ZXVlKTsKKwl9CisJc3Bpbl91bmxvY2soJmZyb250LT5xdWV1ZV9sb2NrKTsKKworCXJldHVybiAhIXZiOworfQorCisvKiBjaGVjayBpZiB0aGUgdmlkZW8ncyBidWZmZXIgaXMgcmVhZHkgKi8KK3N0YXRpYyBib29sIGdldF92aWRlb19mcmFtZShzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQsIHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbykKK3sKKwlpbnQgbmVlZF9pbml0ID0gMDsKKwlib29sIHJldCA9IHRydWU7CisKKwlyZXQgPSBnZXRfZnJhbWUoZnJvbnQsICZuZWVkX2luaXQpOworCWlmIChyZXQgJiYgbmVlZF9pbml0KQorCQlpbml0X2NvcHkodmlkZW8sIDApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHN1Ym1pdF9mcmFtZShzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQpCit7CisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIgPSBmcm9udC0+Y3Vycl9mcmFtZTsKKworCWlmICh2YiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmcm9udC0+Y3Vycl9mcmFtZQk9IE5VTEw7CisJdmItPnN0YXRlCQk9IFZJREVPQlVGX0RPTkU7CisJdmItPmZpZWxkX2NvdW50Kys7CisJZG9fZ2V0dGltZW9mZGF5KCZ2Yi0+dHMpOworCisJd2FrZV91cCgmdmItPmRvbmUpOworfQorCisvKgorICogQSBmcmFtZSBpcyBjb21wb3NlZCBvZiB0d28gZmllbGRzLiBJZiB3ZSByZWNlaXZlIGFsbCB0aGUgdHdvIGZpZWxkcywKKyAqIGNhbGwgdGhlICBzdWJtaXRfZnJhbWUoKSB0byBzdWJtaXQgdGhlIHdob2xlIGZyYW1lIHRvIGFwcGxpY2F0aW9ucy4KKyAqLworc3RhdGljIHZvaWQgZW5kX2ZpZWxkKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbykKK3sKKwkvKiBsb2dzKHZpZGVvLT5mcm9udCk7ICovCisJaWYgKDEgPT0gdmlkZW8tPmZpZWxkX2NvdW50KQorCQlzdWJtaXRfZnJhbWUodmlkZW8tPmZyb250KTsKKwllbHNlCisJCWluaXRfY29weSh2aWRlbywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfdmlkZW9fZGF0YShzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8sIGNoYXIgKnNyYywKKwkJCQl1bnNpZ25lZCBpbnQgY291bnQpCit7CisjZGVmaW5lIGNvcHlfZGF0YShsZW4pICBcCisJZG8geyBcCisJCWlmICgrK3ZpZGVvLT5saW5lc19jb3BpZWQgPiB2aWRlby0+bGluZXNfcGVyX2ZpZWxkKSBcCisJCQlnb3RvIG92ZXJmbG93OyBcCisJCW1lbWNweSh2aWRlby0+ZHN0LCBzcmMsIGxlbik7XAorCQl2aWRlby0+ZHN0ICs9IGxlbiArIHZpZGVvLT5saW5lc19zaXplOyBcCisJCXNyYyArPSBsZW47IFwKKwkJY291bnQgLT0gbGVuOyBcCisJIH0gd2hpbGUgKDApCisKKwl3aGlsZSAoY291bnQgJiYgY291bnQgPj0gdmlkZW8tPmxpbmVzX3NpemUpIHsKKwkJaWYgKHZpZGVvLT5wcmV2X2xlZnQpIHsKKwkJCWNvcHlfZGF0YSh2aWRlby0+cHJldl9sZWZ0KTsKKwkJCXZpZGVvLT5wcmV2X2xlZnQgPSAwOworCQkJY29udGludWU7CisJCX0KKwkJY29weV9kYXRhKHZpZGVvLT5saW5lc19zaXplKTsKKwl9CisJaWYgKGNvdW50ICYmIGNvdW50IDwgdmlkZW8tPmxpbmVzX3NpemUpIHsKKwkJbWVtY3B5KHZpZGVvLT5kc3QsIHNyYywgY291bnQpOworCisJCXZpZGVvLT5wcmV2X2xlZnQgPSB2aWRlby0+bGluZXNfc2l6ZSAtIGNvdW50OworCQl2aWRlby0+ZHN0ICs9IGNvdW50OworCX0KKwlyZXR1cm47CisKK292ZXJmbG93OgorCWVuZF9maWVsZCh2aWRlbyk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3RyYWlsZXIoc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvLCBjaGFyICpzcmMsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdmJpX2RhdGEgKnZiaSA9IHZpZGVvLT52Ymk7CisJaW50IG9mZnNldDsgLyogdHJhaWxlcidzIG9mZnNldCAqLworCWNoYXIgKmJ1ZjsKKworCW9mZnNldCA9ICh2aWRlby0+Y29udGV4dC5waXguc2l6ZWltYWdlIC8gMiArIHZiaS0+dmJpX3NpemUgLyAyKQorCQktICh2YmktPmNvcGllZCArIHZpZGVvLT5saW5lc19zaXplICogdmlkZW8tPmxpbmVzX2NvcGllZCk7CisJaWYgKHZpZGVvLT5wcmV2X2xlZnQpCisJCW9mZnNldCAtPSAodmlkZW8tPmxpbmVzX3NpemUgLSB2aWRlby0+cHJldl9sZWZ0KTsKKworCWlmIChvZmZzZXQgPiBjb3VudCB8fCBvZmZzZXQgPD0gMCkKKwkJZ290byBzaG9ydF9wYWNrYWdlOworCisJYnVmID0gc3JjICsgb2Zmc2V0OworCisJLyogdHJhaWxlciA6IChWRkhTKSArIFUzMiArIFUzMiArIGZpZWxkX251bSAqLworCWlmICghc3RybmNtcChidWYsICJWRkhTIiwgNCkpIHsKKwkJaW50IGZpZWxkX251bSA9ICooKHUzMiAqKShidWYgKyAxMikpOworCisJCWlmICgoZmllbGRfbnVtICYgMSkgXiB2aWRlby0+ZmllbGRfY291bnQpIHsKKwkJCWluaXRfY29weSh2aWRlbywgdmlkZW8tPmZpZWxkX2NvdW50KTsKKwkJCXJldHVybjsKKwkJfQorCQljb3B5X3ZpZGVvX2RhdGEodmlkZW8sIHNyYywgb2Zmc2V0KTsKKwl9CitzaG9ydF9wYWNrYWdlOgorCWVuZF9maWVsZCh2aWRlbyk7Cit9CisKKy8qID09PT09PT09PT0gIENoZWNrIHRoaXMgbW9yZSBjYXJlZnVsbHkhID09PT09PT09PT09ICovCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV92YmlfZGF0YShzdHJ1Y3QgdmJpX2RhdGEgKnZiaSwKKwkJCQljaGFyICpzcmMsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSB2YmktPmZyb250OworCisJaWYgKGZyb250ICYmIGdldF9mcmFtZShmcm9udCwgTlVMTCkpIHsKKwkJY2hhciAqYnVmID0gdmlkZW9idWZfdG9fdm1hbGxvYyhmcm9udC0+Y3Vycl9mcmFtZSk7CisKKwkJaWYgKHZiaS0+dmlkZW8tPmZpZWxkX2NvdW50KQorCQkJYnVmICs9ICh2YmktPnZiaV9zaXplIC8gMik7CisJCW1lbWNweShidWYgKyB2YmktPmNvcGllZCwgc3JjLCBjb3VudCk7CisJfQorCXZiaS0+Y29waWVkICs9IGNvdW50OworfQorCisvKgorICogQ29weSB0aGUgbm9ybWFsIGRhdGEgKFZCSSBvciBWSURFTykgd2l0aG91dCB0aGUgdHJhaWxlci4KKyAqIFZCSSBpcyBub3QgaW50ZXJsYWNlZCwgd2hpbGUgVklERU8gaXMgaW50ZXJsYWNlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfdmJpX3ZpZGVvX2RhdGEoc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvLAorCQkJCWNoYXIgKnNyYywgdW5zaWduZWQgaW50IGNvdW50KQoreworCXN0cnVjdCB2YmlfZGF0YSAqdmJpID0gdmlkZW8tPnZiaTsKKwl1bnNpZ25lZCBpbnQgdmJpX2RlbHRhID0gKHZiaS0+dmJpX3NpemUgLyAyKSAtIHZiaS0+Y29waWVkOworCisJaWYgKHZiaV9kZWx0YSA+PSBjb3VudCkgeworCQljb3B5X3ZiaV9kYXRhKHZiaSwgc3JjLCBjb3VudCk7CisJfSBlbHNlIHsKKwkJaWYgKHZiaV9kZWx0YSkgeworCQkJY29weV92YmlfZGF0YSh2YmksIHNyYywgdmJpX2RlbHRhKTsKKworCQkJLyogd2UgcmVjZWl2ZSB0aGUgdHdvIGZpZWxkcyBvZiB0aGUgVkJJKi8KKwkJCWlmICh2YmktPmZyb250ICYmIHZpZGVvLT5maWVsZF9jb3VudCkKKwkJCQlzdWJtaXRfZnJhbWUodmJpLT5mcm9udCk7CisJCX0KKwkJY29weV92aWRlb19kYXRhKHZpZGVvLCBzcmMgKyB2YmlfZGVsdGEsIGNvdW50IC0gdmJpX2RlbHRhKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVyYl9jb21wbGV0ZV9idWxrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvID0gJmZyb250LT5wZC0+dmlkZW9fZGF0YTsKKwljaGFyICpzcmMgPSAoY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBjb3VudCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghdmlkZW8tPmlzX3N0cmVhbWluZyB8fCB1cmItPnN0YXR1cykgeworCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVQUk9UTykKKwkJCWdvdG8gcmVzZW5kX2l0OworCQlyZXR1cm47CisJfQorCWlmICghZ2V0X3ZpZGVvX2ZyYW1lKGZyb250LCB2aWRlbykpCisJCWdvdG8gcmVzZW5kX2l0OworCisJaWYgKGNvdW50ID09IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKKwkJY29weV92YmlfdmlkZW9fZGF0YSh2aWRlbywgc3JjLCBjb3VudCk7CisJZWxzZQorCQljaGVja190cmFpbGVyKHZpZGVvLCBzcmMsIGNvdW50KTsKKworcmVzZW5kX2l0OgorCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCkKKwkJbG9nKCIgc3VibWl0IGZhaWxlZDogZXJyb3IgJWQiLCByZXQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKiBmb3IgSVNPICoqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgR0VUX1NVQ0NFU1MJCSgwKQorI2RlZmluZSBHRVRfVFJBSUxFUgkJKDEpCisjZGVmaW5lIEdFVF9UT09fTVVDSF9CVUJCTEUJKDIpCisjZGVmaW5lIEdFVF9OT05FCQkoMykKK3N0YXRpYyBpbnQgZ2V0X2NodW5rKGludCBzdGFydCwgc3RydWN0IHVyYiAqdXJiLAorCQkJaW50ICpoZWFkLCBpbnQgKnRhaWwsIGludCAqYnViYmxlX2VycikKK3sKKwlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqcGt0ID0gTlVMTDsKKwlpbnQgcmV0ID0gR0VUX1NVQ0NFU1M7CisKKwlmb3IgKCpoZWFkID0gKnRhaWwgPSAtMTsgc3RhcnQgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBzdGFydCsrKSB7CisJCXBrdCA9ICZ1cmItPmlzb19mcmFtZV9kZXNjW3N0YXJ0XTsKKworCQkvKiBoYW5kbGUgdGhlIGJ1YmJsZSBvZiB0aGUgSHViICovCisJCWlmICgtRU9WRVJGTE9XID09IHBrdC0+c3RhdHVzKSB7CisJCQlpZiAoKysqYnViYmxlX2VyciA+IHVyYi0+bnVtYmVyX29mX3BhY2tldHMgLyAzKQorCQkJCXJldHVybiBHRVRfVE9PX01VQ0hfQlVCQkxFOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBUaGlzIGlzIHRoZSBnYXAgKi8KKwkJaWYgKHBrdC0+c3RhdHVzIHx8IHBrdC0+YWN0dWFsX2xlbmd0aCA8PSAwCisJCQkJfHwgcGt0LT5hY3R1YWxfbGVuZ3RoID4gSVNPX1BLVF9TSVpFKSB7CisJCQlpZiAoKmhlYWQgIT0gLTEpCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGEgZ29vZCBpc29jaHJvbm91cyBwYWNrZXQgKi8KKwkJaWYgKHBrdC0+YWN0dWFsX2xlbmd0aCA9PSBJU09fUEtUX1NJWkUpIHsKKwkJCWlmICgqaGVhZCA9PSAtMSkKKwkJCQkqaGVhZCA9IHN0YXJ0OworCQkJKnRhaWwgPSBzdGFydDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogdHJhaWxlciBpcyBoZXJlICovCisJCWlmIChwa3QtPmFjdHVhbF9sZW5ndGggPCBJU09fUEtUX1NJWkUpIHsKKwkJCWlmICgqaGVhZCA9PSAtMSkgeworCQkJCSpoZWFkID0gc3RhcnQ7CisJCQkJKnRhaWwgPSBzdGFydDsKKwkJCQlyZXR1cm4gR0VUX1RSQUlMRVI7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICgqaGVhZCA9PSAtMSAmJiAqdGFpbCA9PSAtMSkKKwkJcmV0ID0gR0VUX05PTkU7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHxfX3wtLS0tLS18X19ffC0tLS0tfF9fX19fX198CisgKiAgICAgICBeICAgICAgICAgIF4KKyAqICAgICAgIHwgICAgICAgICAgfAorICogICAgICBnYXAgICAgICAgIGdhcAorICovCitzdGF0aWMgdm9pZCB1cmJfY29tcGxldGVfaXNvKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvID0gJmZyb250LT5wZC0+dmlkZW9fZGF0YTsKKwlpbnQgYnViYmxlX2VyciA9IDAsIGhlYWQgPSAwLCB0YWlsID0gMDsKKwljaGFyICpzcmMgPSAoY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCByZXQgPSAwOworCisJaWYgKCF2aWRlby0+aXNfc3RyZWFtaW5nKQorCQlyZXR1cm47CisKKwlkbyB7CisJCWlmICghZ2V0X3ZpZGVvX2ZyYW1lKGZyb250LCB2aWRlbykpCisJCQlnb3RvIG91dDsKKworCQlzd2l0Y2ggKGdldF9jaHVuayhoZWFkLCB1cmIsICZoZWFkLCAmdGFpbCwgJmJ1YmJsZV9lcnIpKSB7CisJCWNhc2UgR0VUX1NVQ0NFU1M6CisJCQljb3B5X3ZiaV92aWRlb19kYXRhKHZpZGVvLCBzcmMgKyAoaGVhZCAqIElTT19QS1RfU0laRSksCisJCQkJCSh0YWlsIC0gaGVhZCArIDEpICogSVNPX1BLVF9TSVpFKTsKKwkJCWJyZWFrOworCQljYXNlIEdFVF9UUkFJTEVSOgorCQkJY2hlY2tfdHJhaWxlcih2aWRlbywgc3JjICsgKGhlYWQgKiBJU09fUEtUX1NJWkUpLAorCQkJCQlJU09fUEtUX1NJWkUpOworCQkJYnJlYWs7CisJCWNhc2UgR0VUX05PTkU6CisJCQlnb3RvIG91dDsKKwkJY2FzZSBHRVRfVE9PX01VQ0hfQlVCQkxFOgorCQkJbG9nKCJcdCBXZSBnb3QgdG9vIG11Y2ggYnViYmxlIik7CisJCQlzY2hlZHVsZV93b3JrKCZ2aWRlby0+YnViYmxlX3dvcmspOworCQkJcmV0dXJuOworCQl9CisJfSB3aGlsZSAoaGVhZCA9IHRhaWwgKyAxLCBoZWFkIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0cyk7CisKK291dDoKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQpCisJCWxvZygidXNiX3N1Ym1pdF91cmIgZXJyIDogJWQiLCByZXQpOworfQorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBbICBlbmQgIF0gPT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBwcmVwYXJlX2lzb191cmIoc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gdmlkZW8tPnBkLT51ZGV2OworCWludCBpOworCisJaWYgKHZpZGVvLT51cmJfYXJyYXlbMF0pCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IFNCVUZfTlVNOyBpKyspIHsKKwkJc3RydWN0IHVyYiAqdXJiOworCQl2b2lkICptZW07CisJCWludCBqOworCisJCXVyYiA9IHVzYl9hbGxvY191cmIoUEtfUEVSX1VSQiwgR0ZQX0tFUk5FTCk7CisJCWlmICh1cmIgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCisJCXZpZGVvLT51cmJfYXJyYXlbaV0gPSB1cmI7CisJCW1lbSA9IHVzYl9idWZmZXJfYWxsb2ModWRldiwKKwkJCQkJSVNPX1BLVF9TSVpFICogUEtfUEVSX1VSQiwKKwkJCQkJR0ZQX0tFUk5FTCwKKwkJCQkJJnVyYi0+dHJhbnNmZXJfZG1hKTsKKworCQl1cmItPmNvbXBsZXRlCT0gdXJiX2NvbXBsZXRlX2lzbzsJLyogaGFuZGxlciAqLworCQl1cmItPmRldgk9IHVkZXY7CisJCXVyYi0+Y29udGV4dAk9IHZpZGVvLT5mcm9udDsKKwkJdXJiLT5waXBlCT0gdXNiX3Jjdmlzb2NwaXBlKHVkZXYsCisJCQkJCQl2aWRlby0+ZW5kcG9pbnRfYWRkcik7CisJCXVyYi0+aW50ZXJ2YWwJPSAxOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQIHwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMJPSBQS19QRVJfVVJCOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcgk9IG1lbTsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gUEtfUEVSX1VSQiAqIElTT19QS1RfU0laRTsKKworCQlmb3IgKGogPSAwOyBqIDwgUEtfUEVSX1VSQjsgaisrKSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IElTT19QS1RfU0laRSAqIGo7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9IElTT19QS1RfU0laRTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK291dDoKKwlmb3IgKDsgaSA+IDA7IGktLSkKKwkJOworCXJldHVybiAtRU5PTUVNOworfQorCisvKiByZXR1cm4gdGhlIHN1Y2NlZWRlZCBudW1iZXIgb2YgdGhlIGFsbG9jYXRpb24gKi8KK2ludCBhbGxvY19idWxrX3VyYnNfZ2VuZXJpYyhzdHJ1Y3QgdXJiICoqdXJiX2FycmF5LCBpbnQgbnVtLAorCQkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4IGVwX2FkZHIsCisJCQlpbnQgYnVmX3NpemUsIGdmcF90IGdmcF9mbGFncywKKwkJCXVzYl9jb21wbGV0ZV90IGNvbXBsZXRlX2ZuLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCB1cmIgKnVyYjsKKwl2b2lkICptZW07CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBnZnBfZmxhZ3MpOworCQlpZiAodXJiID09IE5VTEwpCisJCQlyZXR1cm4gaTsKKworCQltZW0gPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIGJ1Zl9zaXplLCBnZnBfZmxhZ3MsCisJCQkJCSZ1cmItPnRyYW5zZmVyX2RtYSk7CisJCWlmIChtZW0gPT0gTlVMTCkKKwkJCXJldHVybiBpOworCisJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgdWRldiwgdXNiX3JjdmJ1bGtwaXBlKHVkZXYsIGVwX2FkZHIpLAorCQkJCW1lbSwgYnVmX3NpemUsIGNvbXBsZXRlX2ZuLCBjb250ZXh0KTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwkJdXJiX2FycmF5W2ldID0gdXJiOworCX0KKwlyZXR1cm4gaTsKK30KKwordm9pZCBmcmVlX2FsbF91cmJfZ2VuZXJpYyhzdHJ1Y3QgdXJiICoqdXJiX2FycmF5LCBpbnQgbnVtKQoreworCWludCBpOworCXN0cnVjdCB1cmIgKnVyYjsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQl1cmIgPSB1cmJfYXJyYXlbaV07CisJCWlmICh1cmIpIHsKKwkJCXVzYl9idWZmZXJfZnJlZSh1cmItPmRldiwKKwkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkJdXJiLT50cmFuc2Zlcl9kbWEpOworCQkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCQl1cmJfYXJyYXlbaV0gPSBOVUxMOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHByZXBhcmVfYnVsa191cmIoc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvKQoreworCWlmICh2aWRlby0+dXJiX2FycmF5WzBdKQorCQlyZXR1cm4gMDsKKworCWFsbG9jX2J1bGtfdXJic19nZW5lcmljKHZpZGVvLT51cmJfYXJyYXksIFNCVUZfTlVNLAorCQkJdmlkZW8tPnBkLT51ZGV2LCB2aWRlby0+ZW5kcG9pbnRfYWRkciwKKwkJCTB4MjAwMCwgR0ZQX0tFUk5FTCwKKwkJCXVyYl9jb21wbGV0ZV9idWxrLCB2aWRlby0+ZnJvbnQpOworCXJldHVybiAwOworfQorCisvKiBmcmVlIHRoZSBVUkJzICovCitzdGF0aWMgdm9pZCBmcmVlX2FsbF91cmIoc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvKQoreworCWZyZWVfYWxsX3VyYl9nZW5lcmljKHZpZGVvLT51cmJfYXJyYXksIFNCVUZfTlVNKTsKK30KKworc3RhdGljIHZvaWQgcGRfYnVmX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwl2aWRlb2J1Zl92bWFsbG9jX2ZyZWUodmIpOworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7Cit9CisKK3N0YXRpYyB2b2lkIHBkX2J1Zl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHEtPnByaXZfZGF0YTsKKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJbGlzdF9hZGRfdGFpbCgmdmItPnF1ZXVlLCAmZnJvbnQtPmFjdGl2ZSk7Cit9CisKK3N0YXRpYyBpbnQgcGRfYnVmX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKKwkJCSAgIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBxLT5wcml2X2RhdGE7CisJaW50IHJjOworCisJc3dpdGNoIChmcm9udC0+dHlwZSkgeworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQlpZiAoVklERU9CVUZfTkVFRFNfSU5JVCA9PSB2Yi0+c3RhdGUpIHsKKwkJCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeDsKKworCQkJcGl4ID0gJmZyb250LT5wZC0+dmlkZW9fZGF0YS5jb250ZXh0LnBpeDsKKwkJCXZiLT5zaXplCT0gcGl4LT5zaXplaW1hZ2U7IC8qIHJlYWwgZnJhbWUgc2l6ZSAqLworCQkJdmItPndpZHRoCT0gcGl4LT53aWR0aDsKKwkJCXZiLT5oZWlnaHQJPSBwaXgtPmhlaWdodDsKKwkJCXJjID0gdmlkZW9idWZfaW9sb2NrKHEsIHZiLCBOVUxMKTsKKwkJCWlmIChyYyA8IDApCisJCQkJcmV0dXJuIHJjOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKKwkJaWYgKFZJREVPQlVGX05FRURTX0lOSVQgPT0gdmItPnN0YXRlKSB7CisJCQl2Yi0+c2l6ZQk9IGZyb250LT5wZC0+dmJpX2RhdGEudmJpX3NpemU7CisJCQlyYyA9IHZpZGVvYnVmX2lvbG9jayhxLCB2YiwgTlVMTCk7CisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdmItPmZpZWxkID0gZmllbGQ7CisJdmItPnN0YXRlID0gVklERU9CVUZfUFJFUEFSRUQ7CisJcmV0dXJuIDA7Cit9CisKK2ludCBmaXJlX2FsbF91cmIoc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvKQoreworCWludCBpLCByZXQ7CisKKwl2aWRlby0+aXNfc3RyZWFtaW5nID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBTQlVGX05VTTsgaSsrKSB7CisJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHZpZGVvLT51cmJfYXJyYXlbaV0sIEdGUF9LRVJORUwpOworCQlpZiAocmV0KQorCQkJbG9nKCIoJWQpIGZhaWxlZDogZXJyb3IgJWQiLCBpLCByZXQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHN0YXJ0X3ZpZGVvX3N0cmVhbShzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbyA9ICZwZC0+dmlkZW9fZGF0YTsKKwlzMzIgY21kX3N0YXR1czsKKworCXNlbmRfc2V0X3JlcShwZCwgVEFLRV9SRVFVRVNULCAwLCAmY21kX3N0YXR1cyk7CisJc2VuZF9zZXRfcmVxKHBkLCBQTEFZX1NFUlZJQ0UsIFRMR19UVU5FX1BMQVlfU1ZDX1NUQVJULCAmY21kX3N0YXR1cyk7CisKKwlpZiAocGQtPmN1cl90cmFuc2Zlcl9tb2RlKSB7CisJCXByZXBhcmVfaXNvX3VyYih2aWRlbyk7CisJCUlOSVRfV09SSygmdmlkZW8tPmJ1YmJsZV93b3JrLCBpc29fYnViYmxlX2hhbmRsZXIpOworCX0gZWxzZSB7CisJCS8qIFRoZSBidWxrIG1vZGUgZG9lcyBub3QgbmVlZCBhIGJ1YmJsZSBoYW5kbGVyICovCisJCXByZXBhcmVfYnVsa191cmIodmlkZW8pOworCX0KKwlmaXJlX2FsbF91cmIodmlkZW8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBkX2J1Zl9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHVuc2lnbmVkIGludCAqY291bnQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gcS0+cHJpdl9kYXRhOworCXN0cnVjdCBwb3NlaWRvbiAqcGQJPSBmcm9udC0+cGQ7CisKKwlzd2l0Y2ggKGZyb250LT50eXBlKSB7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IHsKKwkJc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvID0gJnBkLT52aWRlb19kYXRhOworCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmdmlkZW8tPmNvbnRleHQucGl4OworCisJCSpzaXplID0gUEFHRV9BTElHTihwaXgtPnNpemVpbWFnZSk7LyogcGFnZSBhbGlnbmVkIGZyYW1lIHNpemUgKi8KKwkJaWYgKCpjb3VudCA8IDQpCisJCQkqY291bnQgPSA0OworCQlpZiAoMSkgeworCQkJLyogc2FtZSBpbiBkaWZmZXJlbnQgYWx0ZXJzZXR0aW5nICovCisJCQl2aWRlby0+ZW5kcG9pbnRfYWRkcgk9IDB4ODI7CisJCQl2aWRlby0+dmJpCQk9ICZwZC0+dmJpX2RhdGE7CisJCQl2aWRlby0+dmJpLT52aWRlbwk9IHZpZGVvOworCQkJdmlkZW8tPnBkCQk9IHBkOworCQkJdmlkZW8tPmxpbmVzX3Blcl9maWVsZAk9IHBpeC0+aGVpZ2h0IC8gMjsKKwkJCXZpZGVvLT5saW5lc19zaXplCT0gcGl4LT53aWR0aCAqIDI7CisJCQl2aWRlby0+ZnJvbnQgCQk9IGZyb250OworCQl9CisJCXJldHVybiBzdGFydF92aWRlb19zdHJlYW0ocGQpOworCX0KKworCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTogeworCQlzdHJ1Y3QgdmJpX2RhdGEgKnZiaSA9ICZwZC0+dmJpX2RhdGE7CisKKwkJKnNpemUgPSBQQUdFX0FMSUdOKHZiaS0+dmJpX3NpemUpOworCQlsb2coInNpemUgOiAlZCIsICpzaXplKTsKKwkJaWYgKCpjb3VudCA9PSAwKQorCQkJKmNvdW50ID0gNDsKKwl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgcGRfdmlkZW9fcW9wcyA9IHsKKwkuYnVmX3NldHVwICAgICAgPSBwZF9idWZfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlICAgID0gcGRfYnVmX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSAgICAgID0gcGRfYnVmX3F1ZXVlLAorCS5idWZfcmVsZWFzZSAgICA9IHBkX2J1Zl9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJaWYgKEFSUkFZX1NJWkUocG9zZWlkb25fZm9ybWF0cykgPD0gZi0+aW5kZXgpCisJCXJldHVybiAtRUlOVkFMOworCWYtPnR5cGUJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWYtPmZsYWdzCT0gMDsKKwlmLT5waXhlbGZvcm1hdAk9IHBvc2VpZG9uX2Zvcm1hdHNbZi0+aW5kZXhdLmZvdXJjYzsKKwlzdHJjcHkoZi0+ZGVzY3JpcHRpb24sIHBvc2VpZG9uX2Zvcm1hdHNbZi0+aW5kZXhdLm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaDsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZnJvbnQtPnBkOworCisJbG9ncyhmcm9udCk7CisJZi0+Zm10LnBpeCA9IHBkLT52aWRlb19kYXRhLmNvbnRleHQucGl4OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY190cnlfZm10KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXJldHVybiAwOworfQorCisvKgorICogVkxDIGNhbGxzIFZJRElPQ19TX1NURCBiZWZvcmUgVklESU9DX1NfRk1ULCB3aGlsZQorICogTXBsYXllciBjYWxscyB0aGVtIGluIHRoZSByZXZlcnNlIG9yZGVyLgorICovCitzdGF0aWMgaW50IHBkX3ZpZGlvY19zX2ZtdChzdHJ1Y3QgcG9zZWlkb24gKnBkLCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXgpCit7CisJc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvCT0gJnBkLT52aWRlb19kYXRhOworCXN0cnVjdCBydW5uaW5nX2NvbnRleHQgKmNvbnRleHQgPSAmdmlkZW8tPmNvbnRleHQ7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4X2RlZgk9ICZjb250ZXh0LT5waXg7CisJczMyIHJldCA9IDAsIGNtZF9zdGF0dXMgPSAwLCB2aWRfcmVzb2w7CisKKwkvKiBzZXQgdGhlIHBpeGVsIGZvcm1hdCB0byBmaXJtd2FyZSAqLworCWlmIChwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9SR0I1NjUpIHsKKwkJdmlkX3Jlc29sID0gVExHX1RVTkVSX1ZJRF9GT1JNQVRfUkdCXzU2NTsKKwl9IGVsc2UgeworCQlwaXgtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVWVY7CisJCXZpZF9yZXNvbCA9IFRMR19UVU5FUl9WSURfRk9STUFUX1lVVjsKKwl9CisJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBWSURFT19TVFJFQU1fRk1UX1NFTCwKKwkJCQl2aWRfcmVzb2wsICZjbWRfc3RhdHVzKTsKKworCS8qIHNldCB0aGUgcmVzb2x1dGlvbiB0byBmaXJtd2FyZSAqLworCXZpZF9yZXNvbCA9IFRMR19UVU5FX1ZJRF9SRVNfNzIwOworCXN3aXRjaCAocGl4LT53aWR0aCkgeworCWNhc2UgNzA0OgorCQl2aWRfcmVzb2wgPSBUTEdfVFVORV9WSURfUkVTXzcwNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGl4LT53aWR0aCA9IDcyMDsKKwljYXNlIDcyMDoKKwkJYnJlYWs7CisJfQorCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFZJREVPX1JPU09MVV9TRUwsCisJCQkJdmlkX3Jlc29sLCAmY21kX3N0YXR1cyk7CisJaWYgKHJldCB8fCBjbWRfc3RhdHVzKSB7CisJCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXBpeF9kZWYtPnBpeGVsZm9ybWF0ID0gcGl4LT5waXhlbGZvcm1hdDsgLyogc2F2ZSBpdCAqLworCXBpeC0+aGVpZ2h0ID0gKGNvbnRleHQtPnR2bm9ybWlkICYgVjRMMl9TVERfNTI1XzYwKSA/ICA0ODAgOiA1NzY7CisKKwkvKiBDb21wYXJlIHdpdGggdGhlIGRlZmF1bHQgc2V0dGluZyAqLworCWlmICgocGl4X2RlZi0+d2lkdGggIT0gcGl4LT53aWR0aCkKKwkJfHwgKHBpeF9kZWYtPmhlaWdodCAhPSBwaXgtPmhlaWdodCkpIHsKKwkJcGl4X2RlZi0+d2lkdGgJCT0gcGl4LT53aWR0aDsKKwkJcGl4X2RlZi0+aGVpZ2h0CQk9IHBpeC0+aGVpZ2h0OworCQlwaXhfZGVmLT5ieXRlc3BlcmxpbmUJPSBwaXgtPndpZHRoICogMjsKKwkJcGl4X2RlZi0+c2l6ZWltYWdlIAk9IHBpeC0+d2lkdGggKiBwaXgtPmhlaWdodCAqIDI7CisJfQorCSpwaXggPSAqcGl4X2RlZjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQJPSBmaDsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkCQk9IGZyb250LT5wZDsKKworCWxvZ3MoZnJvbnQpOworCS8qIHN0b3AgVkJJIGhlcmUgKi8KKwlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICE9IGYtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCWlmIChwZC0+ZmlsZV9mb3Jfc3RyZWFtID09IE5VTEwpCisJCXBkLT5maWxlX2Zvcl9zdHJlYW0gPSBmaWxlOworCWVsc2UgaWYgKGZpbGUgIT0gcGQtPmZpbGVfZm9yX3N0cmVhbSkgeworCQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcGRfdmlkaW9jX3NfZm10KHBkLCAmZi0+Zm10LnBpeCk7CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZiaShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkgICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICp2NGwyX2YpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250CT0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZAkJPSBmcm9udC0+cGQ7CisJc3RydWN0IHY0bDJfdmJpX2Zvcm1hdCAqdmJpX2ZtdAk9ICZ2NGwyX2YtPmZtdC52Ymk7CisKKwl2YmlfZm10LT5zYW1wbGVzX3Blcl9saW5lCT0gNzIwICogMjsKKwl2YmlfZm10LT5zYW1wbGluZ19yYXRlCQk9IDY3NTAwMDAgKiA0OworCXZiaV9mbXQtPnNhbXBsZV9mb3JtYXQJCT0gVjRMMl9QSVhfRk1UX0dSRVk7CisJdmJpX2ZtdC0+b2Zmc2V0CQkJPSA2NCAqIDQ7ICAvKkZJWE1FOiB3aHkgb2Zmc2V0ICovCisJaWYgKHBkLT52aWRlb19kYXRhLmNvbnRleHQudHZub3JtaWQgJiBWNEwyX1NURF81MjVfNjApIHsKKwkJdmJpX2ZtdC0+c3RhcnRbMF0gPSAxMDsKKwkJdmJpX2ZtdC0+c3RhcnRbMV0gPSAyNjQ7CisJCXZiaV9mbXQtPmNvdW50WzBdID0gVjRMX05UU0NfVkJJX0xJTkVTOworCQl2YmlfZm10LT5jb3VudFsxXSA9IFY0TF9OVFNDX1ZCSV9MSU5FUzsKKwl9IGVsc2UgeworCQl2YmlfZm10LT5zdGFydFswXSA9IDY7CisJCXZiaV9mbXQtPnN0YXJ0WzFdID0gMzE0OworCQl2YmlfZm10LT5jb3VudFswXSA9IFY0TF9QQUxfVkJJX0xJTkVTOworCQl2YmlfZm10LT5jb3VudFsxXSA9IFY0TF9QQUxfVkJJX0xJTkVTOworCX0KKwl2YmlfZm10LT5mbGFncyA9IFY0TDJfVkJJX1VOU1lOQzsKKwlsb2dzKGZyb250KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfc3RkKHN0cnVjdCBwb3NlaWRvbiAqcGQsIHY0bDJfc3RkX2lkICpub3JtKQoreworCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbyA9ICZwZC0+dmlkZW9fZGF0YTsKKwlzdHJ1Y3QgdmJpX2RhdGEgKnZiaQk9ICZwZC0+dmJpX2RhdGE7CisJc3RydWN0IHJ1bm5pbmdfY29udGV4dCAqY29udGV4dDsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXg7CisJczMyIGksIHJldCA9IDAsIGNtZF9zdGF0dXMsIHBhcmFtOworCWludCBoZWlnaHQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgUE9TRUlET05fVFZOT1JNUzsgaSsrKSB7CisJCWlmICgqbm9ybSAmIHBvc2VpZG9uX3R2bm9ybXNbaV0udjRsMl9pZCkgeworCQkJcGFyYW0gPSBwb3NlaWRvbl90dm5vcm1zW2ldLnRsZ190dm5vcm07CisJCQlsb2coIm5hbWUgOiAlcyIsIHBvc2VpZG9uX3R2bm9ybXNbaV0ubmFtZSk7CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworZm91bmQ6CisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgVklERU9fU1REX1NFTCwgcGFyYW0sICZjbWRfc3RhdHVzKTsKKwlpZiAocmV0IHx8IGNtZF9zdGF0dXMpCisJCWdvdG8gb3V0OworCisJLyogU2V0IHZiaSBzaXplIGFuZCBjaGVjayB0aGUgaGVpZ2h0IG9mIHRoZSBmcmFtZSAqLworCWNvbnRleHQgPSAmdmlkZW8tPmNvbnRleHQ7CisJY29udGV4dC0+dHZub3JtaWQgPSBwb3NlaWRvbl90dm5vcm1zW2ldLnY0bDJfaWQ7CisJaWYgKGNvbnRleHQtPnR2bm9ybWlkICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCXZiaS0+dmJpX3NpemUgPSBWNExfTlRTQ19WQklfRlJBTUVTSVpFOworCQloZWlnaHQgPSA0ODA7CisJfSBlbHNlIHsKKwkJdmJpLT52Ymlfc2l6ZSA9IFY0TF9QQUxfVkJJX0ZSQU1FU0laRTsKKwkJaGVpZ2h0ID0gNTc2OworCX0KKworCXBpeCA9ICZjb250ZXh0LT5waXg7CisJaWYgKHBpeC0+aGVpZ2h0ICE9IGhlaWdodCkgeworCQlwaXgtPmhlaWdodAk9IGhlaWdodDsKKwkJcGl4LT5zaXplaW1hZ2UgCT0gcGl4LT53aWR0aCAqIHBpeC0+aGVpZ2h0ICogMjsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdmlkaW9jX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKm5vcm0pCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7CisJbG9ncyhmcm9udCk7CisJcmV0dXJuIHNldF9zdGQoZnJvbnQtPnBkLCBub3JtKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2lucHV0ICppbikKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaDsKKworCWlmIChpbi0+aW5kZXggPCAwIHx8IGluLT5pbmRleCA+PSBQT1NFSURPTl9JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCXN0cmNweShpbi0+bmFtZSwgcGRfaW5wdXRzW2luLT5pbmRleF0ubmFtZSk7CisJaW4tPnR5cGUgID0gVjRMMl9JTlBVVF9UWVBFX1RVTkVSOworCisJLyoKKwkgKiB0aGUgYXVkaW8gaW5wdXQgaW5kZXggbWl4ZWQgd2l0aCB0aGlzIHZpZGVvIGlucHV0LAorCSAqIFBvc2VpZG9uIG9ubHkgaGF2ZSBvbmUgYXVkaW8vdmlkZW8sIHNldCB0byAiMCIKKwkgKi8KKwlpbi0+YXVkaW9zZXQJPSAwOworCWluLT50dW5lcgk9IDA7CisJaW4tPnN0ZAkJPSBWNEwyX1NURF9BTEw7CisJaW4tPnN0YXR1cwk9IDA7CisJbG9ncyhmcm9udCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgKmkpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZyb250LT5wZDsKKwlzdHJ1Y3QgcnVubmluZ19jb250ZXh0ICpjb250ZXh0ID0gJnBkLT52aWRlb19kYXRhLmNvbnRleHQ7CisKKwlsb2dzKGZyb250KTsKKwkqaSA9IGNvbnRleHQtPnNpZ19pbmRleDsKKwlyZXR1cm4gMDsKK30KKworLyogV2UgY2FuIHN1cHBvcnQgc2V2ZXJhbCBpbnB1dHMgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaDsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZnJvbnQtPnBkOworCXMzMiByZXQsIGNtZF9zdGF0dXM7CisKKwlpZiAoaSA8IDAgfHwgaSA+PSBQT1NFSURPTl9JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgU0dOTF9TUkNfU0VMLAorCQkJcGRfaW5wdXRzW2ldLnRsZ19zcmMsICZjbWRfc3RhdHVzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcGQtPnZpZGVvX2RhdGEuY29udGV4dC5zaWdfaW5kZXggPSBpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBvc2VpZG9uX2NvbnRyb2wgKmNoZWNrX2NvbnRyb2xfaWQoX191MzIgaWQpCit7CisJc3RydWN0IHBvc2VpZG9uX2NvbnRyb2wgKmNvbnRyb2wgPSAmY29udHJvbHNbMF07CisJaW50IGFycmF5X3NpemUgPSBBUlJBWV9TSVpFKGNvbnRyb2xzKTsKKworCWZvciAoOyBjb250cm9sIDwgJmNvbnRyb2xzW2FycmF5X3NpemVdOyBjb250cm9sKyspCisJCWlmIChjb250cm9sLT52NGwyX2N0cmwuaWQgID09IGlkKQorCQkJcmV0dXJuIGNvbnRyb2w7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmEpCit7CisJc3RydWN0IHBvc2VpZG9uX2NvbnRyb2wgKmNvbnRyb2wgPSBOVUxMOworCisJY29udHJvbCA9IGNoZWNrX2NvbnRyb2xfaWQoYS0+aWQpOworCWlmICghY29udHJvbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqYSA9IGNvbnRyb2wtPnY0bDJfY3RybDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaDsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZnJvbnQtPnBkOworCXN0cnVjdCBwb3NlaWRvbl9jb250cm9sICpjb250cm9sID0gTlVMTDsKKwlzdHJ1Y3QgdHVuZXJfY3VzdG9tX3BhcmFtZXRlcl9zIHR1bmVyX3BhcmFtOworCXMzMiByZXQgPSAwLCBjbWRfc3RhdHVzOworCisJY29udHJvbCA9IGNoZWNrX2NvbnRyb2xfaWQoY3RybC0+aWQpOworCWlmICghY29udHJvbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJcmV0ID0gc2VuZF9nZXRfcmVxKHBkLCBUVU5FUl9DVVNUT01fUEFSQU1FVEVSLCBjb250cm9sLT52Y19pZCwKKwkJCSZ0dW5lcl9wYXJhbSwgJmNtZF9zdGF0dXMsIHNpemVvZih0dW5lcl9wYXJhbSkpOworCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCisJaWYgKHJldCB8fCBjbWRfc3RhdHVzKQorCQlyZXR1cm4gLTE7CisKKwljdHJsLT52YWx1ZSA9IHR1bmVyX3BhcmFtLnBhcmFtX3ZhbHVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICphKQoreworCXN0cnVjdCB0dW5lcl9jdXN0b21fcGFyYW1ldGVyX3MgcGFyYW0gPSB7MH07CisJc3RydWN0IHBvc2VpZG9uX2NvbnRyb2wgKmNvbnRyb2wgPSBOVUxMOworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udAk9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcGQJCT0gZnJvbnQtPnBkOworCXMzMiByZXQgPSAwLCBjbWRfc3RhdHVzLCBwYXJhbXM7CisKKwljb250cm9sID0gY2hlY2tfY29udHJvbF9pZChhLT5pZCk7CisJaWYgKCFjb250cm9sKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBhcmFtLnBhcmFtX3ZhbHVlID0gYS0+dmFsdWU7CisJcGFyYW0ucGFyYW1faWQJPSBjb250cm9sLT52Y19pZDsKKwlwYXJhbXMgPSAqKHMzMiAqKSZwYXJhbTsgLyogdGVtcCBjb2RlICovCisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUVU5FUl9DVVNUT01fUEFSQU1FVEVSLCBwYXJhbXMsICZjbWRfc3RhdHVzKTsKKwlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFRBS0VfUkVRVUVTVCwgMCwgJmNtZF9zdGF0dXMpOworCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlzY2hlZHVsZV90aW1lb3V0KEhaLzQpOworCXJldHVybiByZXQ7Cit9CisKKy8qIEF1ZGlvIGlvY3RscyAqLworc3RhdGljIGludCB2aWRpb2NfZW51bWF1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJaWYgKDAgIT0gYS0+aW5kZXgpCisJCXJldHVybiAtRUlOVkFMOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisJc3RyY3B5KGEtPm5hbWUsICJVU0IgYXVkaW8gaW4iKTsKKwkvKlBvc2VpZG9uIGhhdmUgbm8gQVZMIGZ1bmN0aW9uLiovCisJYS0+bW9kZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCXN0cmNweShhLT5uYW1lLCAiVVNCIGF1ZGlvIGluIik7CisJYS0+bW9kZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCXJldHVybiAoMCA9PSBhLT5pbmRleCkgPyAwIDogLUVJTlZBTDsKK30KKworLyogVHVuZXIgaW9jdGxzICovCitzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfdHVuZXIgKnR1bmVyKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udAk9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcGQJCT0gZnJvbnQtPnBkOworCXN0cnVjdCB0dW5lcl9hdHZfc2lnX3N0YXRfcyBhdHZfc3RhdDsKKwlzMzIgY291bnQgPSA1LCByZXQsIGNtZF9zdGF0dXM7CisJaW50IGluZGV4OworCisJaWYgKDAgIT0gdHVuZXItPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlyZXQgPSBzZW5kX2dldF9yZXEocGQsIFRVTkVSX1NUQVRVUywgVExHX01PREVfQU5BTE9HX1RWLAorCQkJCSZhdHZfc3RhdCwgJmNtZF9zdGF0dXMsIHNpemVvZihhdHZfc3RhdCkpOworCisJd2hpbGUgKGF0dl9zdGF0LnNpZ19sb2NrX2J1c3kgJiYgY291bnQtLSAmJiAhcmV0KSB7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQoSFopOworCisJCXJldCA9IHNlbmRfZ2V0X3JlcShwZCwgVFVORVJfU1RBVFVTLCBUTEdfTU9ERV9BTkFMT0dfVFYsCisJCQkJJmF0dl9zdGF0LCAmY21kX3N0YXR1cywgc2l6ZW9mKGF0dl9zdGF0KSk7CisJfQorCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCisJaWYgKGRlYnVnX21vZGUpCisJCWxvZygiUDolZCxTOiVkIiwgYXR2X3N0YXQuc2lnX3ByZXNlbnQsIGF0dl9zdGF0LnNpZ19zdHJlbmd0aCk7CisKKwlpZiAocmV0IHx8IGNtZF9zdGF0dXMpCisJCXR1bmVyLT5zaWduYWwgPSAwOworCWVsc2UgaWYgKGF0dl9zdGF0LnNpZ19wcmVzZW50ICYmICFhdHZfc3RhdC5zaWdfc3RyZW5ndGgpCisJCXR1bmVyLT5zaWduYWwgPSAweEZGRkY7CisJZWxzZQorCQl0dW5lci0+c2lnbmFsID0gKGF0dl9zdGF0LnNpZ19zdHJlbmd0aCAqIDI1NSAvIDEwKSA8PCA4OworCisJc3RyY3B5KHR1bmVyLT5uYW1lLCAiVGVsZWdlbnQgU3lzdGVtcyIpOworCXR1bmVyLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJdHVuZXItPnJhbmdlbG93ID0gVFVORVJfRlJFUV9NSU4gLyA2MjUwMDsKKwl0dW5lci0+cmFuZ2VoaWdoID0gVFVORVJfRlJFUV9NQVggLyA2MjUwMDsKKwl0dW5lci0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk0gfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfAorCQkJCVY0TDJfVFVORVJfQ0FQX0xBTkcxIHwgVjRMMl9UVU5FUl9DQVBfTEFORzI7CisJaW5kZXggPSBwZC0+dmlkZW9fZGF0YS5jb250ZXh0LmF1ZGlvX2lkeDsKKwl0dW5lci0+cnhzdWJjaGFucyA9IHBkX2F1ZGlvX21vZGVzW2luZGV4XS52NGwyX2F1ZGlvX3N1YjsKKwl0dW5lci0+YXVkbW9kZSA9IHBkX2F1ZGlvX21vZGVzW2luZGV4XS52NGwyX2F1ZGlvX21vZGU7CisJdHVuZXItPmFmYyA9IDA7CisJbG9ncyhmcm9udCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGRfdmlkaW9jX3NfdHVuZXIoc3RydWN0IHBvc2VpZG9uICpwZCwgaW50IGluZGV4KQoreworCXMzMiByZXQgPSAwLCBjbWRfc3RhdHVzLCBwYXJhbSwgYXVkaW9tb2RlOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCXBhcmFtID0gcGRfYXVkaW9fbW9kZXNbaW5kZXhdLnRsZ19hdWRpb19tb2RlOworCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgVFVORVJfQVVEX01PREUsIHBhcmFtLCAmY21kX3N0YXR1cyk7CisJYXVkaW9tb2RlID0gZ2V0X2F1ZGlvX3N0ZChwZC0+dmlkZW9fZGF0YS5jb250ZXh0LnR2bm9ybWlkKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBUVU5FUl9BVURfQU5BX1NURCwgYXVkaW9tb2RlLAorCQkJCSZjbWRfc3RhdHVzKTsKKwlpZiAoIXJldCkKKwkJcGQtPnZpZGVvX2RhdGEuY29udGV4dC5hdWRpb19pZHggPSBpbmRleDsKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfdHVuZXIgKmEpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250CT0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZAkJPSBmcm9udC0+cGQ7CisJaW50IGluZGV4OworCisJaWYgKDAgIT0gYS0+aW5kZXgpCisJCXJldHVybiAtRUlOVkFMOworCWxvZ3MoZnJvbnQpOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFBPU0VJRE9OX0FVRElPTU9EUzsgaW5kZXgrKykKKwkJaWYgKGEtPmF1ZG1vZGUgPT0gcGRfYXVkaW9fbW9kZXNbaW5kZXhdLnY0bDJfYXVkaW9fbW9kZSkKKwkJCXJldHVybiBwZF92aWRpb2Nfc190dW5lcihwZCwgaW5kZXgpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmZyZXEpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZyb250LT5wZDsKKwlzdHJ1Y3QgcnVubmluZ19jb250ZXh0ICpjb250ZXh0ID0gJnBkLT52aWRlb19kYXRhLmNvbnRleHQ7CisKKwlpZiAoMCAhPSBmcmVxLT50dW5lcikKKwkJcmV0dXJuIC1FSU5WQUw7CisJZnJlcS0+ZnJlcXVlbmN5ID0gY29udGV4dC0+ZnJlcTsKKwlmcmVxLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgcG9zZWlkb24gKnBkLCBfX3UzMiBmcmVxdWVuY3kpCit7CisJczMyIHJldCA9IDAsIHBhcmFtLCBjbWRfc3RhdHVzOworCXN0cnVjdCBydW5uaW5nX2NvbnRleHQgKmNvbnRleHQgPSAmcGQtPnZpZGVvX2RhdGEuY29udGV4dDsKKworCXBhcmFtID0gZnJlcXVlbmN5ICogNjI1MDAgLyAxMDAwOworCWlmIChwYXJhbSA8IFRVTkVSX0ZSRVFfTUlOLzEwMDAgfHwgcGFyYW0gPiBUVU5FUl9GUkVRX01BWCAvIDEwMDApCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgVFVORV9GUkVRX1NFTEVDVCwgcGFyYW0sICZjbWRfc3RhdHVzKTsKKwlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFRBS0VfUkVRVUVTVCwgMCwgJmNtZF9zdGF0dXMpOworCisJbXNsZWVwKDI1MCk7IC8qIHdhaXQgZm9yIGEgd2hpbGUgdW50aWwgdGhlIGhhcmR3YXJlIGlzIHJlYWR5LiAqLworCWNvbnRleHQtPmZyZXEgPSBmcmVxdWVuY3k7CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaDsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZnJvbnQtPnBkOworCisJbG9ncyhmcm9udCk7CisjaWZkZWYgQ09ORklHX1BNCisJcGQtPnBtX3N1c3BlbmQgPSBwbV92aWRlb19zdXNwZW5kOworCXBkLT5wbV9yZXN1bWUgPSBwbV92aWRlb19yZXN1bWU7CisjZW5kaWYKKwlyZXR1cm4gc2V0X2ZyZXF1ZW5jeShwZCwgZnJlcS0+ZnJlcXVlbmN5KTsKK30KKworc3RhdGljIGludCB2aWRpb2NfcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKmIpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWxvZ3MoZnJvbnQpOworCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKCZmcm9udC0+cSwgYik7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlsb2dzKGZyb250KTsKKwlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmZyb250LT5xLCBiKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHZpZGVvYnVmX3FidWYoJmZyb250LT5xLCBiKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZigmZnJvbnQtPnEsIGIsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKK30KKworLyogSnVzdCBzdG9wIHRoZSBVUkJzLCBkbyBub3QgZnJlZSB0aGUgVVJCcyAqLworaW50IHVzYl90cmFuc2Zlcl9zdG9wKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbykKK3sKKwlpZiAodmlkZW8tPmlzX3N0cmVhbWluZykgeworCQlpbnQgaTsKKwkJczMyIGNtZF9zdGF0dXM7CisJCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSB2aWRlby0+cGQ7CisKKwkJdmlkZW8tPmlzX3N0cmVhbWluZyA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBTQlVGX05VTTsgKytpKSB7CisJCQlpZiAodmlkZW8tPnVyYl9hcnJheVtpXSkKKwkJCQl1c2Jfa2lsbF91cmIodmlkZW8tPnVyYl9hcnJheVtpXSk7CisJCX0KKworCQlzZW5kX3NldF9yZXEocGQsIFBMQVlfU0VSVklDRSwgVExHX1RVTkVfUExBWV9TVkNfU1RPUCwKKwkJCSAgICAgICAmY21kX3N0YXR1cyk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgc3RvcF9hbGxfdmlkZW9fc3RyZWFtKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvID0gJnBkLT52aWRlb19kYXRhOworCXN0cnVjdCB2YmlfZGF0YSAqdmJpCT0gJnBkLT52YmlfZGF0YTsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlpZiAodmlkZW8tPmlzX3N0cmVhbWluZykgeworCQlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSB2aWRlby0+ZnJvbnQ7CisKKwkJLyogc3RvcCB0aGUgVVJCcyAqLworCQl1c2JfdHJhbnNmZXJfc3RvcCh2aWRlbyk7CisJCWZyZWVfYWxsX3VyYih2aWRlbyk7CisKKwkJLyogc3RvcCB0aGUgaG9zdCBzaWRlIG9mIFZJREVPICovCisJCXZpZGVvYnVmX3N0b3AoJmZyb250LT5xKTsKKwkJdmlkZW9idWZfbW1hcF9mcmVlKCZmcm9udC0+cSk7CisKKwkJLyogc3RvcCB0aGUgaG9zdCBzaWRlIG9mIFZCSSAqLworCQlmcm9udCA9IHZiaS0+ZnJvbnQ7CisJCWlmIChmcm9udCkgeworCQkJdmlkZW9idWZfc3RvcCgmZnJvbnQtPnEpOworCQkJdmlkZW9idWZfbW1hcF9mcmVlKCZmcm9udC0+cSk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgYnViYmxlcyBjYW4gc2VyaW91c2x5IGRhbWFnZSB0aGUgdmlkZW8ncyBxdWFsaXR5LAorICogdGhvdWdoIGl0IG9jY3VycyBpbiB2ZXJ5IHJhcmUgc2l0dWF0aW9uLgorICovCitzdGF0aWMgdm9pZCBpc29fYnViYmxlX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KQoreworCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbzsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkOworCisJdmlkZW8gPSBjb250YWluZXJfb2Yodywgc3RydWN0IHZpZGVvX2RhdGEsIGJ1YmJsZV93b3JrKTsKKwlwZCA9IHZpZGVvLT5wZDsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwl1c2JfdHJhbnNmZXJfc3RvcCh2aWRlbyk7CisJbXNsZWVwKDUwMCk7CisJc3RhcnRfdmlkZW9fc3RyZWFtKHBkKTsKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKK30KKworCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7CisKKwlsb2dzKGZyb250KTsKKwlpZiAodW5saWtlbHkodHlwZSAhPSBmcm9udC0+dHlwZSkpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbigmZnJvbnQtPnEpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWxvZ3MoZnJvbnQpOworCWlmICh1bmxpa2VseSh0eXBlICE9IGZyb250LT50eXBlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9mZigmZnJvbnQtPnEpOworfQorCisvKiBTZXQgdGhlIGZpcm13YXJlJ3MgZGVmYXVsdCB2YWx1ZXMgOiBuZWVkIGFsdGVyc2V0dGluZyAqLworc3RhdGljIGludCBwZF92aWRlb19jaGVja21vZGUoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzMzIgcmV0ID0gMCwgY21kX3N0YXR1cywgYXVkaW9tb2RlOworCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlzY2hlZHVsZV90aW1lb3V0KEhaLzIpOworCisJLyogY2hvb3NlIHRoZSBhbHRlcnNldHRpbmcgKi8KKwlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShwZC0+dWRldiwgMCwKKwkJCQkJKHBkLT5jdXJfdHJhbnNmZXJfbW9kZSA/CisJCQkJCSBJU09fM0tfQlVMS19BTFRFUk5BVEVfSUZBQ0UgOgorCQkJCQkgQlVMS19BTFRFUk5BVEVfSUZBQ0UpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIHNldCBkZWZhdWx0IHBhcmFtZXRlcnMgZm9yIFBBTC1EICwgd2l0aCB0aGUgVkJJIGVuYWJsZWQqLworCXJldCA9IHNldF90dW5lcl9tb2RlKHBkLCBUTEdfTU9ERV9BTkFMT0dfVFYpOworCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFNHTkxfU1JDX1NFTCwKKwkJCQlUTEdfU0lHX1NSQ19BTlRFTk5BLCAmY21kX3N0YXR1cyk7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVklERU9fU1REX1NFTCwKKwkJCQlUTEdfVFVORV9WU1REX1BBTF9ELCAmY21kX3N0YXR1cyk7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVklERU9fU1RSRUFNX0ZNVF9TRUwsCisJCQkJVExHX1RVTkVSX1ZJRF9GT1JNQVRfWVVWLCAmY21kX3N0YXR1cyk7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVklERU9fUk9TT0xVX1NFTCwKKwkJCQlUTEdfVFVORV9WSURfUkVTXzcyMCwgJmNtZF9zdGF0dXMpOworCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFRVTkVfRlJFUV9TRUxFQ1QsIFRVTkVSX0ZSRVFfTUlOLCAmY21kX3N0YXR1cyk7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVkJJX0RBVEFfU0VMLCAxLCAmY21kX3N0YXR1cyk7LyogZW5hYmxlIHZiaSAqLworCisJLyogc2V0IHRoZSBhdWRpbyAqLworCWF1ZGlvbW9kZSA9IGdldF9hdWRpb19zdGQocGQtPnZpZGVvX2RhdGEuY29udGV4dC50dm5vcm1pZCk7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVFVORVJfQVVEX0FOQV9TVEQsIGF1ZGlvbW9kZSwgJmNtZF9zdGF0dXMpOworCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFRVTkVSX0FVRF9NT0RFLAorCQkJCVRMR19UVU5FX1RWQVVESU9fTU9ERV9TVEVSRU8sICZjbWRfc3RhdHVzKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBBVURJT19TQU1QTEVfUkFURV9TRUwsCisJCQkJQVRWX0FVRElPX1JBVEVfNDhLLCAmY21kX3N0YXR1cyk7CitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHBtX3ZpZGVvX3N1c3BlbmQoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwkvKiBzdG9wIGF1ZGlvICovCisJcG1fYWxzYV9zdXNwZW5kKHBkKTsKKworCS8qIHN0b3AgYW5kIGZyZWUgYWxsIHRoZSBVUkJzICovCisJdXNiX3RyYW5zZmVyX3N0b3AoJnBkLT52aWRlb19kYXRhKTsKKwlmcmVlX2FsbF91cmIoJnBkLT52aWRlb19kYXRhKTsKKworCS8qIHJlc2V0IHRoZSBpbnRlcmZhY2UgKi8KKwl1c2Jfc2V0X2ludGVyZmFjZShwZC0+dWRldiwgMCwgMCk7CisJbXNsZWVwKDMwMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVzdG9yZV92NGwyX2NvbnRleHQoc3RydWN0IHBvc2VpZG9uICpwZCwKKwkJCQlzdHJ1Y3QgcnVubmluZ19jb250ZXh0ICpjb250ZXh0KQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHBkLT52aWRlb19kYXRhLmZyb250OworCisJcGRfdmlkZW9fY2hlY2ttb2RlKHBkKTsKKworCXNldF9zdGQocGQsICZjb250ZXh0LT50dm5vcm1pZCk7CisJdmlkaW9jX3NfaW5wdXQoTlVMTCwgZnJvbnQsIGNvbnRleHQtPnNpZ19pbmRleCk7CisJcGRfdmlkaW9jX3NfdHVuZXIocGQsIGNvbnRleHQtPmF1ZGlvX2lkeCk7CisJcGRfdmlkaW9jX3NfZm10KHBkLCAmY29udGV4dC0+cGl4KTsKKwlzZXRfZnJlcXVlbmN5KHBkLCBjb250ZXh0LT5mcmVxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbV92aWRlb19yZXN1bWUoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmcGQtPnZpZGVvX2RhdGE7CisKKwkvKiByZXN1bWUgdGhlIHZpZGVvICovCisJLyogWzFdIHJlc3RvcmUgdGhlIG9yaWdpbiBWNEwyIHBhcmFtZXRlcnMgKi8KKwlyZXN0b3JlX3Y0bDJfY29udGV4dChwZCwgJnZpZGVvLT5jb250ZXh0KTsKKworCS8qIFsyXSBpbml0aWF0ZSB2aWRlbyBjb3B5IHZhcmlhYmxlcyAqLworCWlmICh2aWRlby0+ZnJvbnQtPmN1cnJfZnJhbWUpCisJCWluaXRfY29weSh2aWRlbywgMCk7CisKKwkvKiBbM10gZmlyZSB1cmJzCSovCisJc3RhcnRfdmlkZW9fc3RyZWFtKHBkKTsKKworCS8qIHJlc3VtZSB0aGUgYXVkaW8gKi8KKwlwbV9hbHNhX3Jlc3VtZShwZCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwordm9pZCBzZXRfZGVidWdfbW9kZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQsIGludCBkZWJ1Z19tb2RlKQoreworCXZmZC0+ZGVidWcgPSAwOworCWlmIChkZWJ1Z19tb2RlICYgMHgxKQorCQl2ZmQtPmRlYnVnID0gVjRMMl9ERUJVR19JT0NUTDsKKwlpZiAoZGVidWdfbW9kZSAmIDB4MikKKwkJdmZkLT5kZWJ1ZyA9IFY0TDJfREVCVUdfSU9DVEwgfCBWNEwyX0RFQlVHX0lPQ1RMX0FSRzsKK30KKworc3RhdGljIHZvaWQgaW5pdF92aWRlb19jb250ZXh0KHN0cnVjdCBydW5uaW5nX2NvbnRleHQgKmNvbnRleHQpCit7CisJY29udGV4dC0+c2lnX2luZGV4CT0gMDsKKwljb250ZXh0LT5hdWRpb19pZHgJPSAxOyAvKiBzdGVyZW8gKi8KKwljb250ZXh0LT50dm5vcm1pZCAgCT0gVjRMMl9TVERfUEFMX0Q7CisJY29udGV4dC0+cGl4ID0gKHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQpIHsKKwkJCQkud2lkdGgJCT0gNzIwLAorCQkJCS5oZWlnaHQJCT0gNTc2LAorCQkJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9ZVVlWLAorCQkJCS5maWVsZAkJPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCisJCQkJLmJ5dGVzcGVybGluZQk9IDcyMCAqIDIsCisJCQkJLnNpemVpbWFnZQk9IDcyMCAqIDU3NiAqIDIsCisJCQkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNLAorCQkJCS5wcml2CQk9IDAKKwkJCX07Cit9CisKK3N0YXRpYyBpbnQgcGRfdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZmQpOworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IE5VTEw7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHBkLT5pbnRlcmZhY2UpOworCisJaWYgKHZmZC0+dmZsX3R5cGUgPT0gVkZMX1RZUEVfR1JBQkJFUgorCQkmJiAhKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0FOQUxPRykpIHsKKwkJZnJvbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnJvbnRfZmFjZSksIEdGUF9LRVJORUwpOworCQlpZiAoIWZyb250KQorCQkJZ290byBvdXQ7CisKKwkJcGQtPmN1cl90cmFuc2Zlcl9tb2RlCT0gdXNiX3RyYW5zZmVyX21vZGU7LyogYnVsayBvciBpc28gKi8KKwkJaW5pdF92aWRlb19jb250ZXh0KCZwZC0+dmlkZW9fZGF0YS5jb250ZXh0KTsKKworCQlyZXQgPSBwZF92aWRlb19jaGVja21vZGUocGQpOworCQlpZiAocmV0IDwgMCkgeworCQkJa2ZyZWUoZnJvbnQpOworCQkJcmV0ID0gLTE7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXBkLT5zdGF0ZQkJfD0gUE9TRUlET05fU1RBVEVfQU5BTE9HOworCQlmcm9udC0+dHlwZQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCXBkLT52aWRlb19kYXRhLnVzZXJzKys7CisJCXNldF9kZWJ1Z19tb2RlKHZmZCwgZGVidWdfbW9kZSk7CisKKwkJdmlkZW9idWZfcXVldWVfdm1hbGxvY19pbml0KCZmcm9udC0+cSwgJnBkX3ZpZGVvX3FvcHMsCisJCQkJTlVMTCwgJmZyb250LT5xdWV1ZV9sb2NrLAorCQkJCVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCQlWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsLyogdmlkZW8gaXMgaW50ZXJsYWNkICovCisJCQkJc2l6ZW9mKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIpLC8qaXQncyBlbm91Z2gqLworCQkJCWZyb250KTsKKwl9IGVsc2UgaWYgKHZmZC0+dmZsX3R5cGUgPT0gVkZMX1RZUEVfVkJJCisJCSYmICEocGQtPnN0YXRlICYgUE9TRUlET05fU1RBVEVfVkJJKSkgeworCQlmcm9udCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmcm9udF9mYWNlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZnJvbnQpCisJCQlnb3RvIG91dDsKKworCQlwZC0+c3RhdGUJfD0gUE9TRUlET05fU1RBVEVfVkJJOworCQlmcm9udC0+dHlwZQk9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU7CisJCXBkLT52YmlfZGF0YS5mcm9udCA9IGZyb250OworCQlwZC0+dmJpX2RhdGEudXNlcnMrKzsKKworCQl2aWRlb2J1Zl9xdWV1ZV92bWFsbG9jX2luaXQoJmZyb250LT5xLCAmcGRfdmlkZW9fcW9wcywKKwkJCQlOVUxMLCAmZnJvbnQtPnF1ZXVlX2xvY2ssCisJCQkJVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSwKKwkJCQlWNEwyX0ZJRUxEX05PTkUsIC8qIHZiaSBpcyBOT05FIG1vZGUgKi8KKwkJCQlzaXplb2Yoc3RydWN0IHZpZGVvYnVmX2J1ZmZlciksCisJCQkJZnJvbnQpOworCX0gZWxzZSB7CisJCS8qIG1heWJlIGFkZCBGTSBzdXBwb3J0IGhlcmUgKi8KKwkJbG9nKCJvdGhlciAiKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJZnJvbnQtPnBkCQk9IHBkOworCWZyb250LT5jdXJyX2ZyYW1lCT0gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmZnJvbnQtPmFjdGl2ZSk7CisJc3Bpbl9sb2NrX2luaXQoJmZyb250LT5xdWV1ZV9sb2NrKTsKKworCWZpbGUtPnByaXZhdGVfZGF0YQk9IGZyb250OworCWtyZWZfZ2V0KCZwZC0+a3JlZik7CisKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwlyZXR1cm4gMDsKK291dDoKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocGQtPmludGVyZmFjZSk7CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwZF92aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZnJvbnQtPnBkOworCXMzMiBjbWRfc3RhdHVzID0gMDsKKworCWxvZ3MoZnJvbnQpOworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKworCWlmIChmcm9udC0+dHlwZQk9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJcGQtPnN0YXRlICY9IH5QT1NFSURPTl9TVEFURV9BTkFMT0c7CisKKwkJLyogc3RvcCB0aGUgZGV2aWNlLCBhbmQgZnJlZSB0aGUgVVJCcyAqLworCQl1c2JfdHJhbnNmZXJfc3RvcCgmcGQtPnZpZGVvX2RhdGEpOworCQlmcmVlX2FsbF91cmIoJnBkLT52aWRlb19kYXRhKTsKKworCQkvKiBzdG9wIHRoZSBmaXJtd2FyZSAqLworCQlzZW5kX3NldF9yZXEocGQsIFBMQVlfU0VSVklDRSwgVExHX1RVTkVfUExBWV9TVkNfU1RPUCwKKwkJCSAgICAgICAmY21kX3N0YXR1cyk7CisKKwkJcGQtPmZpbGVfZm9yX3N0cmVhbSA9IE5VTEw7CisJCXBkLT52aWRlb19kYXRhLnVzZXJzLS07CisJfSBlbHNlIGlmIChmcm9udC0+dHlwZQk9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7CisJCXBkLT5zdGF0ZSAmPSB+UE9TRUlET05fU1RBVEVfVkJJOworCQlwZC0+dmJpX2RhdGEuZnJvbnQgPSBOVUxMOworCQlwZC0+dmJpX2RhdGEudXNlcnMtLTsKKwl9CisJdmlkZW9idWZfc3RvcCgmZnJvbnQtPnEpOworCXZpZGVvYnVmX21tYXBfZnJlZSgmZnJvbnQtPnEpOworCisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHBkLT5pbnRlcmZhY2UpOworCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCisJa2ZyZWUoZnJvbnQpOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJa3JlZl9wdXQoJnBkLT5rcmVmLCBwb3NlaWRvbl9kZWxldGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBkX3ZpZGVvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gIHZpZGVvYnVmX21tYXBfbWFwcGVyKCZmcm9udC0+cSwgdm1hKTsKK30KKwordW5zaWduZWQgaW50IHBkX3ZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKnRhYmxlKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gdmlkZW9idWZfcG9sbF9zdHJlYW0oZmlsZSwgJmZyb250LT5xLCB0YWJsZSk7Cit9CisKK3NzaXplX3QgcGRfdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gdmlkZW9idWZfcmVhZF9zdHJlYW0oJmZyb250LT5xLCBidWZmZXIsIGNvdW50LCBwcG9zLAorCQkJCTAsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKK30KKworLyogVGhpcyBzdHJ1Y3Qgd29ya3MgZm9yIGJvdGggVklERU8gYW5kIFZCSSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBwZF92aWRlb19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBwZF92aWRlb19vcGVuLAorCS5yZWxlYXNlCT0gcGRfdmlkZW9fcmVsZWFzZSwKKwkucmVhZAkJPSBwZF92aWRlb19yZWFkLAorCS5wb2xsCQk9IHBkX3ZpZGVvX3BvbGwsCisJLm1tYXAJCT0gcGRfdmlkZW9fbW1hcCwKKwkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLCAvKiBtYXliZSBjaGFuZ2VkIGluIGZ1dHVyZSAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBwZF92aWRlb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcAk9IHZpZGlvY19xdWVyeWNhcCwKKworCS8qIFZpZGVvIGZvcm1hdCAqLworCS52aWRpb2NfZ19mbXRfdmlkX2NhcAk9IHZpZGlvY19nX2ZtdCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAJPSB2aWRpb2NfZW51bV9mbXQsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwCT0gdmlkaW9jX3NfZm10LAorCS52aWRpb2NfZ19mbXRfdmJpX2NhcAk9IHZpZGlvY19nX2ZtdF92YmksIC8qIFZCSSAqLworCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwID0gdmlkaW9jX3RyeV9mbXQsCisKKwkvKiBJbnB1dCAqLworCS52aWRpb2NfZ19pbnB1dAkJPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQJCT0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19lbnVtX2lucHV0CT0gdmlkaW9jX2VudW1faW5wdXQsCisKKwkvKiBBdWRpbyBpb2N0bHMgKi8KKwkudmlkaW9jX2VudW1hdWRpbwk9IHZpZGlvY19lbnVtYXVkaW8sCisJLnZpZGlvY19nX2F1ZGlvCQk9IHZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbwkJPSB2aWRpb2Nfc19hdWRpbywKKworCS8qIFR1bmVyIGlvY3RscyAqLworCS52aWRpb2NfZ190dW5lcgkJPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIJCT0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19zX3N0ZAkJPSB2aWRpb2Nfc19zdGQsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeQk9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5CT0gdmlkaW9jX3NfZnJlcXVlbmN5LAorCisJLyogQnVmZmVyIGhhbmRsZXJzICovCisJLnZpZGlvY19yZXFidWZzCQk9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYJPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmCQk9IHZpZGlvY19xYnVmLAorCS52aWRpb2NfZHFidWYJCT0gdmlkaW9jX2RxYnVmLAorCisJLyogU3RyZWFtIG9uL29mZiAqLworCS52aWRpb2Nfc3RyZWFtb24JPSB2aWRpb2Nfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYJPSB2aWRpb2Nfc3RyZWFtb2ZmLAorCisJLyogQ29udHJvbCBoYW5kbGluZyAqLworCS52aWRpb2NfcXVlcnljdHJsCT0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybAkJPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsCQk9IHZpZGlvY19zX2N0cmwsCit9OworCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBwZF92aWRlb190ZW1wbGF0ZSA9IHsKKwkubmFtZSA9ICJUZWxlZ2VudC1WaWRlbyIsCisJLmZvcHMgPSAmcGRfdmlkZW9fZm9wcywKKwkubWlub3IgPSAtMSwKKwkucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlLAorCS50dm5vcm1zID0gVjRMMl9TVERfQUxMLAorCS5pb2N0bF9vcHMgPSAmcGRfdmlkZW9faW9jdGxfb3BzLAorfTsKKworc3RydWN0IHZpZGVvX2RldmljZSAqdmRldl9pbml0KHN0cnVjdCBwb3NlaWRvbiAqcGQsIHN0cnVjdCB2aWRlb19kZXZpY2UgKnRtcCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQ7CisKKwl2ZmQgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAodmZkID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCSp2ZmQJCT0gKnRtcDsKKwl2ZmQtPm1pbm9yCT0gLTE7CisJdmZkLT52NGwyX2Rldgk9ICZwZC0+djRsMl9kZXY7CisJLyp2ZmQtPnBhcmVudAk9ICYocGQtPnVkZXYtPmRldik7ICovCisJdmZkLT5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJdmlkZW9fc2V0X2RydmRhdGEodmZkLCBwZCk7CisJcmV0dXJuIHZmZDsKK30KKwordm9pZCBkZXN0cm95X3ZpZGVvX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICoqdl9kZXYpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gKnZfZGV2OworCisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZChkZXYpKQorCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYpOworCWVsc2UKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2KTsKKwkqdl9kZXYgPSBOVUxMOworfQorCit2b2lkIHBkX3ZpZGVvX2V4aXQoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmcGQtPnZpZGVvX2RhdGE7CisJc3RydWN0IHZiaV9kYXRhICp2YmkgPSAmcGQtPnZiaV9kYXRhOworCisJZGVzdHJveV92aWRlb19kZXZpY2UoJnZpZGVvLT52X2Rldik7CisJZGVzdHJveV92aWRlb19kZXZpY2UoJnZiaS0+dl9kZXYpOworCWxvZygpOworfQorCitpbnQgcGRfdmlkZW9faW5pdChzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbyA9ICZwZC0+dmlkZW9fZGF0YTsKKwlzdHJ1Y3QgdmJpX2RhdGEgKnZiaQk9ICZwZC0+dmJpX2RhdGE7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwl2aWRlby0+dl9kZXYgPSB2ZGV2X2luaXQocGQsICZwZF92aWRlb190ZW1wbGF0ZSk7CisJaWYgKHZpZGVvLT52X2RldiA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2aWRlby0+dl9kZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gb3V0OworCisJLyogVkJJIHVzZXMgdGhlIHNhbWUgdGVtcGxhdGUgYXMgdmlkZW8gKi8KKwl2YmktPnZfZGV2ID0gdmRldl9pbml0KHBkLCAmcGRfdmlkZW9fdGVtcGxhdGUpOworCWlmICh2YmktPnZfZGV2ID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2YmktPnZfZGV2LCBWRkxfVFlQRV9WQkksIC0xKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gb3V0OworCWxvZygicmVnaXN0ZXIgVklERU8vVkJJIGRldmljZXMiKTsKKwlyZXR1cm4gMDsKK291dDoKKwlsb2coIlZJREVPL1ZCSSBkZXZpY2VzIHJlZ2lzdGVyIGZhaWxlZCwgOiAlZCIsIHJldCk7CisJcGRfdmlkZW9fZXhpdChwZCk7CisJcmV0dXJuIHJldDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3ZlbmRvcmNtZHMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC92ZW5kb3JjbWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE2ZjRhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC92ZW5kb3JjbWRzLmgKQEAgLTAsMCArMSwyNDMgQEAKKyNpZm5kZWYgVkVORE9SX0NNRF9IXworI2RlZmluZSBWRU5ET1JfQ01EX0hfCisKKyNkZWZpbmUgQlVMS19BTFRFUk5BVEVfSUZBQ0UJCSgyKQorI2RlZmluZSBJU09fM0tfQlVMS19BTFRFUk5BVEVfSUZBQ0UgICAgICgxKQorI2RlZmluZSBSRVFfU0VUX0NNRAkJCSgwWDAwKQorI2RlZmluZSBSRVFfR0VUX0NNRAkJCSgwWDgwKQorCitlbnVtIHRsZ19fYW5hbG9nX2F1ZGlvX3N0YW5kYXJkIHsKKwlUTEdfVFVORV9BU1REX05PTkUJPSAweDAwMDAwMDAwLAorCVRMR19UVU5FX0FTVERfQTIJPSAweDAwMDAwMDAxLAorCVRMR19UVU5FX0FTVERfTklDQU0JPSAweDAwMDAwMDAyLAorCVRMR19UVU5FX0FTVERfRUlBSgk9IDB4MDAwMDAwMDQsCisJVExHX1RVTkVfQVNURF9CVFNDCT0gMHgwMDAwMDAwOCwKKwlUTEdfVFVORV9BU1REX0ZNX1VTCT0gMHgwMDAwMDAxMCwKKwlUTEdfVFVORV9BU1REX0ZNX0VVUgk9IDB4MDAwMDAwMjAsCisJVExHX1RVTkVfQVNURF9BTEwJPSAweDAwMDAwMDNmCit9OworCisvKgorICogaWRlbnRpZmllcnMgZm9yIEN1c3RvbSBQYXJhbWV0ZXIgbWVzc2FnZXMuCisgKiBAdHlwZWRlZiBjbWRfY3VzdG9tX3BhcmFtX2lkX3QKKyAqLworZW51bSBjbWRfY3VzdG9tX3BhcmFtX2lkIHsKKwlDVVNUX1BBUk1fSURfTk9ORQkJPSAweDAwLAorCUNVU1RfUEFSTV9JRF9CUklHSFRORVNTX0NUUkwJPSAweDAxLAorCUNVU1RfUEFSTV9JRF9DT05UUkFTVF9DVFJMCT0gMHgwMiwKKwlDVVNUX1BBUk1fSURfSFVFX0NUUkwJCT0gMHgwMywKKwlDVVNUX1BBUk1fSURfU0FUVVJBVElPTl9DVFJMCSAgPSAweDA0LAorCUNVU1RfUEFSTV9JRF9BVURJT19TTlJfVEhSRVNIT0xEICA9IDB4MTAsCisJQ1VTVF9QQVJNX0lEX0FVRElPX0FHQ19USFJFU0hPTEQgID0gMHgxMSwKKwlDVVNUX1BBUk1fSURfTUFYCit9OworCitzdHJ1Y3QgIHR1bmVyX2N1c3RvbV9wYXJhbWV0ZXJfcyB7CisJdWludDE2X3QJcGFyYW1faWQ7CSAvKiAgUGFyYW1ldGVyIGlkZW50aWZpZXIgICovCisJdWludDE2X3QJcGFyYW1fdmFsdWU7CSAvKiAgUGFyYW1ldGVyIHZhbHVlCSAgICovCit9OworCitzdHJ1Y3QgIHR1bmVyX2Jlcl9yYXRlX3MgeworCXVpbnQzMl90CWJlcl9yYXRlOyAgLyogIEJFUiBzYW1wbGUgcmF0ZSBpbiBzZWNvbmRzICAgKi8KK307CisKK3N0cnVjdCB0dW5lcl9hdHZfc2lnX3N0YXRfcyB7CisJdWludDMyX3QJc2lnX3ByZXNlbnQ7CisJdWludDMyX3QJc2lnX2xvY2tlZDsKKwl1aW50MzJfdAlzaWdfbG9ja19idXN5OworCXVpbnQzMl90CXNpZ19zdHJlbmd0aDsJICAgLyogIG1pbGxpRGIJICAqLworCXVpbnQzMl90CXR2X2F1ZGlvX2NoYW47CSAgLyogIG1vbm8vc3RlcmVvL3NhcCovCisJdWludDMyX3QgCW12aXNpb25fc3RhdDsJICAgLyogIG1hY3JvdmlzaW9uIHN0YXR1cyAqLworfTsKKworc3RydWN0IHR1bmVyX2R0dl9zaWdfc3RhdF9zIHsKKwl1aW50MzJfdCBzaWdfcHJlc2VudDsgICAvKiAgQm9vbGVhbiovCisJdWludDMyX3Qgc2lnX2xvY2tlZDsJLyogIEJvb2xlYW4gKi8KKwl1aW50MzJfdCBzaWdfbG9ja19idXN5OyAvKiAgQm9vbGVhbgkoQ2FuIHRoaXMgdGltZS1vdXQ/KSAqLworCXVpbnQzMl90IHNpZ19zdHJlbmd0aDsgIC8qICBtaWxsaURiKi8KK307CisKK3N0cnVjdCB0dW5lcl9mbV9zaWdfc3RhdF9zIHsKKwl1aW50MzJfdCBzaWdfcHJlc2VudDsJLyogQm9vbGVhbiovCisJdWludDMyX3Qgc2lnX2xvY2tlZDsJIC8qIEJvb2xlYW4gKi8KKwl1aW50MzJfdCBzaWdfbG9ja19idXN5OyAgLyogQm9vbGVhbiAqLworCXVpbnQzMl90IHNpZ19zdGVyZW9fbW9ubzsvKiBUQkQqLworCXVpbnQzMl90IHNpZ19zdHJlbmd0aDsgICAvKiBtaWxsaURiKi8KK307CisKK2VudW0gX3RhZ190bGdfdHVuZV9zcnZfY21kIHsKKwlUTEdfVFVORV9QTEFZX1NWQ19TVEFSVCA9IDEsCisJVExHX1RVTkVfUExBWV9TVkNfU1RPUAorfTsKKworZW51bSAgX3RhZ190dW5lX2F0dl9hdWRpb19tb2RlX2NhcHMgeworCVRMR19UVU5FX1RWQVVESU9fTU9ERV9NT05PCT0gMHgwMDAwMDAwMSwKKwlUTEdfVFVORV9UVkFVRElPX01PREVfU1RFUkVPCT0gMHgwMDAwMDAwMiwKKwlUTEdfVFVORV9UVkFVRElPX01PREVfTEFOR19BCT0gMHgwMDAwMDAxMCwvKiBQcmltYXJ5IGxhbmd1YWdlKi8KKwlUTEdfVFVORV9UVkFVRElPX01PREVfTEFOR19CCT0gMHgwMDAwMDAyMCwvKiAybmQgYXZhaWwgbGFuZ3VhZ2UqLworCVRMR19UVU5FX1RWQVVESU9fTU9ERV9MQU5HX0MJPSAweDAwMDAwMDQwCit9OworCisKK2VudW0gICBfdGFnX3R1bmVyX2F0dl9hdWRpb19yYXRlcyB7CisJQVRWX0FVRElPX1JBVEVfTk9ORQk9IDB4MDAsLyogQXVkaW8gbm90IHN1cHBvcnRlZCovCisJQVRWX0FVRElPX1JBVEVfMzJLCT0gMHgwMSwvKiBBdWRpbyByYXRlID0gMzIgS0h6Ki8KKwlBVFZfQVVESU9fUkFURV80OEsJPSAweDAyLCAvKiBBdWRpbyByYXRlID0gNDggS0h6Ki8KKwlBVFZfQVVESU9fUkFURV8zMV8yNUsJPSAweDA0IC8qIEF1ZGlvIHJhdGUgPSAzMS4yNUtIeiAqLworfTsKKworZW51bSAgX3RhZ190dW5lX2F0dl92aWRfcmVzX2NhcHMgeworCVRMR19UVU5FX1ZJRF9SRVNfTk9ORQk9IDB4MDAwMDAwMDAsCisJVExHX1RVTkVfVklEX1JFU183MjAJPSAweDAwMDAwMDAxLAorCVRMR19UVU5FX1ZJRF9SRVNfNzA0CT0gMHgwMDAwMDAwMiwKKwlUTEdfVFVORV9WSURfUkVTXzM2MAk9IDB4MDAwMDAwMDQKK307CisKK2VudW0gX3RhZ190dW5lcl9hbmFsb2dfdmlkZW9fZm9ybWF0IHsKKwlUTEdfVFVORVJfVklEX0ZPUk1BVF9ZVVYJPSAweDAwMDAwMDAxLAorCVRMR19UVU5FUl9WSURfRk9STUFUX1lDUkNCCT0gMHgwMDAwMDAwMiwKKwlUTEdfVFVORVJfVklEX0ZPUk1BVF9SR0JfNTY1CT0gMHgwMDAwMDAwNCwKK307CisKK2VudW0gIHRsZ19leHRfYXVkaW9fc3VwcG9ydCB7CisJVExHX0VYVF9BVURJT19OT05FIAk9IDB4MDAsLyogIE5vIGV4dGVybmFsIGF1ZGlvIGlucHV0IHN1cHBvcnRlZCAqLworCVRMR19FWFRfQVVESU9fTFIJPSAweDAxLyogIExSIGV4dGVybmFsIGF1ZGlvIGlucHV0cyBzdXBwb3J0ZWQqLworfTsKKworZW51bSB7CisJVExHX01PREVfTk9ORQkJCT0gMHgwMCwgLyogTm8gTW9kZSBzcGVjaWZpZWQqLworCVRMR19NT0RFX0FOQUxPR19UVgkJPSAweDAxLCAvKiBBbmFsb2cgVGVsZXZpc2lvbiBtb2RlKi8KKwlUTEdfTU9ERV9BTkFMT0dfVFZfVU5DT01QCT0gMHgwMSwgLyogQW5hbG9nIFRlbGV2aXNpb24gbW9kZSovCisJVExHX01PREVfQU5BTE9HX1RWX0NPTVAgIAk9IDB4MDIsIC8qIEFuYWxvZyBUViBtb2RlIChjb21wcmVzc2VkKSovCisJVExHX01PREVfRk1fUkFESU8JCT0gMHgwNCwgLyogRk0gUmFkaW8gbW9kZSovCisJVExHX01PREVfRFZCX1QJCQk9IDB4MDgsIC8qIERpZ2l0YWwgVFYgKERWQi1UKSovCit9OworCitlbnVtICB0bGdfc2lnbmFsX3NvdXJjZXNfdCB7CisJVExHX1NJR19TUkNfTk9ORQk9IDB4MDAsLyogU2lnbmFsIHNvdXJjZSBub3Qgc3BlY2lmaWVkICovCisJVExHX1NJR19TUkNfQU5URU5OQQk9IDB4MDEsLyogU2lnbmFsIHNyYyBpczogQW50ZW5uYSAqLworCVRMR19TSUdfU1JDX0NBQkxFCT0gMHgwMiwvKiBTaWduYWwgc3JjIGlzOiBDb2F4IENhYmxlKi8KKwlUTEdfU0lHX1NSQ19TVklERU8JPSAweDA0LC8qIFNpZ25hbCBzcmMgaXM6IFNfVklERU8gICAqLworCVRMR19TSUdfU1JDX0NPTVBPU0lURSAgID0gMHgwOCAvKiBTaWduYWwgc3JjIGlzOiBDb21wb3NpdGUgVmlkZW8gKi8KK307CisKK2VudW0gdHVuZXJfYW5hbG9nX3ZpZGVvX3N0YW5kYXJkIHsKKwlUTEdfVFVORV9WU1REX05PTkUJPSAweDAwMDAwMDAwLAorCVRMR19UVU5FX1ZTVERfTlRTQ19NCT0gMHgwMDAwMDAwMSwKKwlUTEdfVFVORV9WU1REX05UU0NfTV9KCT0gMHgwMDAwMDAwMiwvKiBKYXBhbiAgICovCisJVExHX1RVTkVfVlNURF9QQUxfQgk9IDB4MDAwMDAwMTAsCisJVExHX1RVTkVfVlNURF9QQUxfRAk9IDB4MDAwMDAwMjAsCisJVExHX1RVTkVfVlNURF9QQUxfRwk9IDB4MDAwMDAwNDAsCisJVExHX1RVTkVfVlNURF9QQUxfSAk9IDB4MDAwMDAwODAsCisJVExHX1RVTkVfVlNURF9QQUxfSQk9IDB4MDAwMDAxMDAsCisJVExHX1RVTkVfVlNURF9QQUxfTQk9IDB4MDAwMDAyMDAsCisJVExHX1RVTkVfVlNURF9QQUxfTgk9IDB4MDAwMDA0MDAsCisJVExHX1RVTkVfVlNURF9TRUNBTV9CCT0gMHgwMDAwMTAwMCwKKwlUTEdfVFVORV9WU1REX1NFQ0FNX0QJPSAweDAwMDAyMDAwLAorCVRMR19UVU5FX1ZTVERfU0VDQU1fRwk9IDB4MDAwMDQwMDAsCisJVExHX1RVTkVfVlNURF9TRUNBTV9ICT0gMHgwMDAwODAwMCwKKwlUTEdfVFVORV9WU1REX1NFQ0FNX0sJPSAweDAwMDEwMDAwLAorCVRMR19UVU5FX1ZTVERfU0VDQU1fSzEJPSAweDAwMDIwMDAwLAorCVRMR19UVU5FX1ZTVERfU0VDQU1fTAk9IDB4MDAwNDAwMDAsCisJVExHX1RVTkVfVlNURF9TRUNBTV9MMQk9IDB4MDAwODAwMDAsCisJVExHX1RVTkVfVlNURF9QQUxfTl9DT01CTyA9IDB4MDAxMDAwMDAKK307CisKK2VudW0gdGxnX21vZGVfY2FwcyB7CisJVExHX01PREVfQ0FQU19OT05FCQk9IDB4MDAsICAvKiAgTm8gTW9kZSBzcGVjaWZpZWQJKi8KKwlUTEdfTU9ERV9DQVBTX0FOQUxPR19UVl9VTkNPTVAgID0gMHgwMSwgIC8qICBBbmFsb2cgVFYgbW9kZSAgICAgKi8KKwlUTEdfTU9ERV9DQVBTX0FOQUxPR19UVl9DT01QCT0gMHgwMiwgIC8qICBBbmFsb2cgVFYgKGNvbXByZXNzZWQpKi8KKwlUTEdfTU9ERV9DQVBTX0ZNX1JBRElPCQk9IDB4MDQsICAvKiAgRk0gUmFkaW8gbW9kZQkqLworCVRMR19NT0RFX0NBUFNfRFZCX1QJCT0gMHgwOCwgIC8qICBEaWdpdGFsIFRWIChEVkItVCkJKi8KK307CisKK2VudW0gcG9zZWlkb25fdmVuZG9yX2NtZHMgeworCUxBU1RfQ01EX1NUQVQJCT0gMHgwMCwKKwlHRVRfQ0hJUF9JRAkJPSAweDAxLAorCUdFVF9GV19JRAkJPSAweDAyLAorCVBST0RVQ1RfQ0FQUwkJPSAweDAzLAorCisJVFVORV9NT0RFX0NBUF9BVFYJPSAweDEwLAorCVRVTkVfTU9ERV9DQVBfQVRWQ09NUAk9IDBYMTAsCisJVFVORV9NT0RFX0NBUF9EVkJUCT0gMHgxMCwKKwlUVU5FX01PREVfQ0FQX0ZNCT0gMHgxMCwKKwlUVU5FX01PREVfU0VMRUNUCT0gMHgxMSwKKwlUVU5FX0ZSRVFfU0VMRUNUCT0gMHgxMiwKKwlTR05MX1NSQ19TRUwJCT0gMHgxMywKKworCVZJREVPX1NURF9TRUwJCT0gMHgxNCwKKwlWSURFT19TVFJFQU1fRk1UX1NFTAk9IDB4MTUsCisJVklERU9fUk9TT0xVX0FWQUlMCT0gMHgxNiwKKwlWSURFT19ST1NPTFVfU0VMCT0gMHgxNywKKwlWSURFT19DT05UX1BST1RFQ1QJPSAweDIwLAorCisJVkNSX1RJTUlOR19NT0RTRUwJPSAweDIxLAorCUVYVF9BVURJT19DQVAJCT0gMHgyMiwKKwlFWFRfQVVESU9fU0VMCQk9IDB4MjMsCisJVEVTVF9QQVRURVJOX1NFTAk9IDB4MjQsCisJVkJJX0RBVEFfU0VMCQk9IDB4MjUsCisJQVVESU9fU0FNUExFX1JBVEVfQ0FQICAgPSAweDI4LAorCUFVRElPX1NBTVBMRV9SQVRFX1NFTCAgID0gMHgyOSwKKwlUVU5FUl9BVURfTU9ERQkJPSAweDJhLAorCVRVTkVSX0FVRF9NT0RFX0FWQUlMCT0gMHgyYiwKKwlUVU5FUl9BVURfQU5BX1NURAk9IDB4MmMsCisJVFVORVJfQ1VTVE9NX1BBUkFNRVRFUgk9IDB4MmYsCisKKwlEVkJUX1RVTkVfTU9ERV9TRUwJPSAweDMwLAorCURWQlRfQkFORFdfQ0FQCQk9IDB4MzEsCisJRFZCVF9CQU5EV19TRUwJCT0gMHgzMiwKKwlEVkJUX0dVQVJEX0lOVEVSVl9DQVAgICA9IDB4MzMsCisJRFZCVF9HVUFSRF9JTlRFUlZfU0VMICAgPSAweDM0LAorCURWQlRfTU9EVUxBVElPTl9DQVAJPSAweDM1LAorCURWQlRfTU9EVUxBVElPTl9TRUwJPSAweDM2LAorCURWQlRfSU5ORVJfRkVDX1JBVEVfQ0FQID0gMHgzNywKKwlEVkJUX0lOTkVSX0ZFQ19SQVRFX1NFTCA9IDB4MzgsCisJRFZCVF9UUkFOU19NT0RFX0NBUAk9IDB4MzksCisJRFZCVF9UUkFOU19NT0RFX1NFTAk9IDB4M2EsCisJRFZCVF9TRUFSQ0hfUkFORwk9IDB4M2MsCisKKwlUVU5FUl9TRVRVUF9BTkFMT0cJPSAweDQwLAorCVRVTkVSX1NFVFVQX0RJR0lUQUwJPSAweDQxLAorCVRVTkVSX1NFVFVQX0ZNX1JBRElPCT0gMHg0MiwKKwlUQUtFX1JFUVVFU1QJCT0gMHg0MywgLyogVGFrZSBlZmZlY3Qgb2YgdGhlIGNvbW1hbmQgKi8KKwlQTEFZX1NFUlZJQ0UJCT0gMHg0NCwgLyogUGxheSBzdGFydCBvciBQbGF5IHN0b3AgKi8KKwlUVU5FUl9TVEFUVVMJCT0gMHg0NSwKKwlUVU5FX1BST1BfRFZCVAkJPSAweDQ2LAorCUVSUl9SQVRFX1NUQVRTCQk9IDB4NDcsCisJVFVORVJfQkVSX1JBVEUJCT0gMHg0OCwKKworCVNDQU5fQ0FQUwkJPSAweDUwLAorCVNDQU5fU0VUVVAJCT0gMHg1MSwKKwlTQ0FOX1NFUlZJQ0UJCT0gMHg1MiwKKwlTQ0FOX1NUQVRTCQk9IDB4NTMsCisKKwlQSURfU0VUCQkJPSAweDU4LAorCVBJRF9VTlNFVAkJPSAweDU5LAorCVBJRF9MSVNUCQk9IDB4NWEsCisKKwlJUkRfQ0FQCQkJPSAweDYwLAorCUlSRF9NT0RFX1NFTAkJPSAweDYxLAorCUlSRF9TRVRVUAkJPSAweDYyLAorCisJUFRNX01PREVfQ0FQCQk9IDB4NzAsCisJUFRNX01PREVfU0VMCQk9IDB4NzEsCisJUFRNX1NFUlZJQ0UJCT0gMHg3MiwKKwlUVU5FUl9SRUdfU0NSSVBUCT0gMHg3MywKKwlDTURfQ0hJUF9SU1QJCT0gMHg3NCwKK307CisKK2VudW0gdGxnX2J3IHsKKwlUTEdfQldfNSA9IDUsCisJVExHX0JXXzYgPSA2LAorCVRMR19CV183ID0gNywKKwlUTEdfQldfOCA9IDgsCisJVExHX0JXXzEyID0gMTIsCisJVExHX0JXXzE1ID0gMTUKK307CisKK3N0cnVjdCBjbWRfZmlybXdhcmVfdmVyc19zIHsKKwl1aW50OF90CSBmd19yZXZfbWFqb3I7CisJdWludDhfdAkgZndfcmV2X21pbm9yOworCXVpbnQxNl90IGZ3X3BhdGNoOworfTsKKyNlbmRpZiAvKiBWRU5ET1JfQ01EX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCmluZGV4IDViM2VhYTEuLmM0ZGFiNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCkBAIC0xMDc4LDYgKzEwNzgsNyBAQAogCiAJCQkJZ290byByZWdpc3Rlcl9jbGllbnQ7CiAJCQl9CisJCQlrZnJlZSh0KTsKIAkJCXJldHVybiAtRU5PREVWOwogCQljYXNlIDB4NDI6CiAJCWNhc2UgMHg0MzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwppbmRleCBkNTMzZWE1Li4wYTg3NzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCkBAIC02ODAsMTAgKzY4MCw3IEBACiAJdHZlZXByb21faW5mbygiSGF1cHBhdWdlIG1vZGVsICVkLCByZXYgJXMsIHNlcmlhbCMgJWRcbiIsCiAJCXR2ZWUtPm1vZGVsLCB0dmVlLT5yZXZfc3RyLCB0dmVlLT5zZXJpYWxfbnVtYmVyKTsKIAlpZiAodHZlZS0+aGFzX01BQ19hZGRyZXNzID09IDEpCi0JCXR2ZWVwcm9tX2luZm8oIk1BQyBhZGRyZXNzIGlzICUwMlgtJTAyWC0lMDJYLSUwMlgtJTAyWC0lMDJYXG4iLAotCQkJdHZlZS0+TUFDX2FkZHJlc3NbMF0sIHR2ZWUtPk1BQ19hZGRyZXNzWzFdLAotCQkJdHZlZS0+TUFDX2FkZHJlc3NbMl0sIHR2ZWUtPk1BQ19hZGRyZXNzWzNdLAotCQkJdHZlZS0+TUFDX2FkZHJlc3NbNF0sIHR2ZWUtPk1BQ19hZGRyZXNzWzVdKTsKKwkJdHZlZXByb21faW5mbygiTUFDIGFkZHJlc3MgaXMgJXBNXG4iLCB0dmVlLT5NQUNfYWRkcmVzcyk7CiAJdHZlZXByb21faW5mbygidHVuZXIgbW9kZWwgaXMgJXMgKGlkeCAlZCwgdHlwZSAlZClcbiIsCiAJCXRfbmFtZTEsIHR1bmVyMSwgdHZlZS0+dHVuZXJfdHlwZSk7CiAJdHZlZXByb21faW5mbygiVFYgc3RhbmRhcmRzJXMlcyVzJXMlcyVzJXMlcyAoZWVwcm9tIDB4JTAyeClcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDcwMDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNzAwMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhODc4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDcwMDIuYwpAQCAtMCwwICsxLDExODcgQEAKKy8qIFRleGFzIEluc3RydW1lbnRzIFRyaXBsZSA4LS8xMC1CSVQgMTY1LS8xMTAtTVNQUyBWaWRlbyBhbmQgR3JhcGhpY3MKKyAqIERpZ2l0aXplciB3aXRoIEhvcml6b250YWwgUExMIHJlZ2lzdGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqIEF1dGhvcjogU2FudGlhZ28gTnVuZXotQ29ycmFsZXMgPHNhbnRpYWdvLm51bmV6QHJpZGdlcnVuLmNvbT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgcGFydGlhbGx5IGJhc2VkIHVwb24gdGhlIFRWUDUxNTAgZHJpdmVyCisgKiB3cml0dGVuIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiAobWNoZWhhYkBpbmZyYWRlYWQub3JnKSwKKyAqIHRoZSBUVlA1MTR4IGRyaXZlciB3cml0dGVuIGJ5IFZhaWJoYXYgSGlyZW1hdGggPGh2YWliaGF2QHRpLmNvbT4KKyAqIGFuZCB0aGUgVFZQNzAwMiBkcml2ZXIgaW4gdGhlIFRJIExTUCAyLjEwLjAwLjE0LiBSZXZpc2lvbnMgYnkKKyAqIE11cmFsaWRoYXJhbiBLYXJpY2hlcmkgYW5kIFNuZWhhcHJhYmhhIE5hcm5ha2FqZSAoVEkpLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS90dnA3MDAyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgInR2cDcwMDJfcmVnLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiVEkgVFZQNzAwMiBWaWRlbyBhbmQgR3JhcGhpY3MgRGlnaXRpemVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiU2FudGlhZ28gTnVuZXotQ29ycmFsZXMgPHNhbnRpYWdvLm51bmV6QHJpZGdlcnVuLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogTW9kdWxlIE5hbWUgKi8KKyNkZWZpbmUgVFZQNzAwMl9NT0RVTEVfTkFNRQkidHZwNzAwMiIKKworLyogSTJDIHJldHJ5IGF0dGVtcHRzICovCisjZGVmaW5lIEkyQ19SRVRSWV9DT1VOVAkJKDUpCisKKy8qIEVuZCBvZiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNzAwMl9FT1IJCTB4NWMKKworLyogUmVhZCB3cml0ZSBkZWZpbml0aW9uIGZvciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNzAwMl9SRUFECQkwCisjZGVmaW5lIFRWUDcwMDJfV1JJVEUJCTEKKyNkZWZpbmUgVFZQNzAwMl9SRVNFUlZFRAkyCisKKy8qIEludGVybGFjZWQgdnMgcHJvZ3Jlc3NpdmUgbWFzayBhbmQgc2hpZnQgKi8KKyNkZWZpbmUgVFZQNzAwMl9JUF9TSElGVAk1CisjZGVmaW5lIFRWUDcwMDJfSU5QUl9NQVNLCSgweDAxIDw8IFRWUDcwMDJfSVBfU0hJRlQpCisKKy8qIFNoaWZ0IGZvciBDUEwgYW5kIExQRiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNzAwMl9DTF9TSElGVAk4CisjZGVmaW5lIFRWUDcwMDJfQ0xfTUFTSwkJMHgwZgorCisvKiBEZWJ1ZyBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTIpIik7CisKKy8qIFN0cnVjdHVyZSBmb3IgcmVnaXN0ZXIgdmFsdWVzICovCitzdHJ1Y3QgaTJjX3JlZ192YWx1ZSB7CisJdTggcmVnOworCXU4IHZhbHVlOworCXU4IHR5cGU7Cit9OworCisvKgorICogUmVnaXN0ZXIgZGVmYXVsdCB2YWx1ZXMgKGFjY29yZGluZyB0byB0dnA3MDAyIGRhdGFzaGVldCkKKyAqIEluIHRoZSBjYXNlIG9mIHJlYWQtb25seSByZWdpc3RlcnMsIHRoZSB2YWx1ZSAoMHhmZikgaXMKKyAqIG5ldmVyIHdyaXR0ZW4uIFIvVyBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgYnkgdGhlCisgKiB3cml0YWJsZSBiaXQgaW4gdGhlIHJlZ2lzdGVyIHN0cnVjdCBkZWZpbml0aW9uLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgdHZwNzAwMl9pbml0X2RlZmF1bHRbXSA9IHsKKwl7IFRWUDcwMDJfQ0hJUF9SRVYsIDB4ZmYsIFRWUDcwMDJfUkVBRCB9LAorCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX01TQlMsIDB4NjcsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9MU0JTLCAweDIwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfQ1JUTCwgMHhhMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BIQVNFX1NFTCwgMHg4MCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9TVEFSVCwgMHgzMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9XLCAweDIwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hTWU5DX09VVF9XLCAweDYwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0JfRklORV9HQUlOLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0dfRklORV9HQUlOLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1JfRklORV9HQUlOLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0JfRklORV9PRkZfTVNCUywgMHg4MCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9HX0ZJTkVfT0ZGX01TQlMsIDB4ODAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfUl9GSU5FX09GRl9NU0JTLCAweDgwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1NZTkNfQ1RMXzEsIDB4MjAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9BTkRfQ0xBTVBfQ1RMLCAweDJlLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1NZTkNfT05fR19USFJTLCAweDVkLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1NZTkNfU0VQQVJBVE9SX1RIUlMsIDB4NDcsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QUkVfQ09BU1QsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QT1NUX0NPQVNULCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1NZTkNfREVURUNUX1NUQVQsIDB4ZmYsIFRWUDcwMDJfUkVBRCB9LAorCXsgVFZQNzAwMl9PVVRfRk9STUFUVEVSLCAweDQ3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX01JU0NfQ1RMXzEsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfTUlTQ19DVExfMiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9NSVNDX0NUTF8zLCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0lOX01VWF9TRUxfMSwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9JTl9NVVhfU0VMXzIsIDB4NjcsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQl9BTkRfR19DT0FSU0VfR0FJTiwgMHg3NywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9SX0NPQVJTRV9HQUlOLCAweDA3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0ZJTkVfT0ZGX0xTQlMsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQl9DT0FSU0VfT0ZGLCAweDEwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0dfQ09BUlNFX09GRiwgMHgxMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9SX0NPQVJTRV9PRkYsIDB4MTAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFNPVVRfT1VUX1NUQVJULCAweDA4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX01JU0NfQ1RMXzQsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQl9ER1RMX0FMQ19PVVRfTFNCUywgMHhmZiwgVFZQNzAwMl9SRUFEIH0sCisJeyBUVlA3MDAyX0dfREdUTF9BTENfT1VUX0xTQlMsIDB4ZmYsIFRWUDcwMDJfUkVBRCB9LAorCXsgVFZQNzAwMl9SX0RHVExfQUxDX09VVF9MU0JTLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfQVVUT19MVkxfQ1RMX0VOQUJMRSwgMHg4MCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ER1RMX0FMQ19PVVRfTVNCUywgMHhmZiwgVFZQNzAwMl9SRUFEIH0sCisJeyBUVlA3MDAyX0FVVE9fTFZMX0NUTF9GSUxURVIsIDB4NTMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IDB4MjksIDB4MDgsIFRWUDcwMDJfUkVTRVJWRUQgfSwKKwl7IFRWUDcwMDJfRklORV9DTEFNUF9DVEwsIDB4MDcsIFRWUDcwMDJfV1JJVEUgfSwKKwkvKiBQV1JfQ1RMIGlzIGNvbnRyb2xsZWQgb25seSBieSB0aGUgcHJvYmUgYW5kIHJlc2V0IGZ1bmN0aW9ucyAqLworCXsgVFZQNzAwMl9QV1JfQ1RMLCAweDAwLCBUVlA3MDAyX1JFU0VSVkVEIH0sCisJeyBUVlA3MDAyX0FEQ19TRVRVUCwgMHg1MCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DT0FSU0VfQ0xBTVBfQ1RMLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1NPR19DTEFNUCwgMHg4MCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9SR0JfQ09BUlNFX0NMQU1QX0NUTCwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9TT0dfQ09BUlNFX0NMQU1QX0NUTCwgMHgwNCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BTENfUExBQ0VNRU5ULCAweDVhLCBUVlA3MDAyX1dSSVRFIH0sCisJeyAweDMyLCAweDE4LCBUVlA3MDAyX1JFU0VSVkVEIH0sCisJeyAweDMzLCAweDYwLCBUVlA3MDAyX1JFU0VSVkVEIH0sCisJeyBUVlA3MDAyX01WSVNfU1RSSVBQRVJfVywgMHhmZiwgVFZQNzAwMl9SRVNFUlZFRCB9LAorCXsgVFZQNzAwMl9WU1lOQ19BTEdOLCAweDEwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1NZTkNfQllQQVNTLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0xfRlJBTUVfU1RBVF9MU0JTLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfTF9GUkFNRV9TVEFUX01TQlMsIDB4ZmYsIFRWUDcwMDJfUkVBRCB9LAorCXsgVFZQNzAwMl9DTEtfTF9TVEFUX0xTQlMsIDB4ZmYsIFRWUDcwMDJfUkVBRCB9LAorCXsgVFZQNzAwMl9DTEtfTF9TVEFUX01TQlMsIDB4ZmYsIFRWUDcwMDJfUkVBRCB9LAorCXsgVFZQNzAwMl9IU1lOQ19XLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfVlNZTkNfVywgMHhmZiwgVFZQNzAwMl9SRUFEIH0sCisJeyBUVlA3MDAyX0xfTEVOR1RIX1RPTCwgMHgwMywgVFZQNzAwMl9XUklURSB9LAorCXsgMHgzZSwgMHg2MCwgVFZQNzAwMl9SRVNFUlZFRCB9LAorCXsgVFZQNzAwMl9WSURFT19CV1RIX0NUTCwgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX0xTQlMsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9NU0JTLCAweDJjLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9MU0JTLCAweDA2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9NU0JTLCAweDJjLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX1NUQVJUX0xfT0ZGLCAweDA1LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX1NUQVJUX0xfT0ZGLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX0RVUkFUSU9OLCAweDFlLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX0RVUkFUSU9OLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0ZCSVRfRl8wX1NUQVJUX0xfT0ZGLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0ZCSVRfRl8xX1NUQVJUX0xfT0ZGLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9ZX0dfQ09FRl9MU0JTLCAweGUzLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9ZX0dfQ09FRl9NU0JTLCAweDE2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9ZX0JfQ09FRl9MU0JTLCAweDRmLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9ZX0JfQ09FRl9NU0JTLCAweDAyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9ZX1JfQ09FRl9MU0JTLCAweGNlLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9ZX1JfQ09FRl9NU0JTLCAweDA2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9VX0dfQ09FRl9MU0JTLCAweGFiLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9VX0dfQ09FRl9NU0JTLCAweGYzLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9VX0JfQ09FRl9MU0JTLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9VX0JfQ09FRl9NU0JTLCAweDEwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9VX1JfQ09FRl9MU0JTLCAweDU1LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9VX1JfQ09FRl9NU0JTLCAweGZjLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9WX0dfQ09FRl9MU0JTLCAweDc4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9WX0dfQ09FRl9NU0JTLCAweGYxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9WX0JfQ09FRl9MU0JTLCAweDg4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9WX0JfQ09FRl9NU0JTLCAweGZlLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9WX1JfQ09FRl9MU0JTLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1lVVl9WX1JfQ09FRl9NU0JTLCAweDEwLCBUVlA3MDAyX1dSSVRFIH0sCisJLyogVGhpcyBzaWduYWxzIGVuZCBvZiByZWdpc3RlciB2YWx1ZXMgKi8KKwl7IFRWUDcwMDJfRU9SLCAweGZmLCBUVlA3MDAyX1JFU0VSVkVEIH0KK307CisKKy8qIFJlZ2lzdGVyIHBhcmFtZXRlcnMgZm9yIDQ4MFAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSB0dnA3MDAyX3Bhcm1zXzQ4MFBbXSA9IHsKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9NU0JTLCAweDM1LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTFNCUywgMHgwYSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0NSVEwsIDB4MDIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QSEFTRV9TRUwsIDB4MTQsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9MU0JTLCAweDkxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTVNCUywgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTFNCUywgMHgwQiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTVNCUywgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9TVEFSVF9MX09GRiwgMHgwMywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9TVEFSVF9MX09GRiwgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9EVVJBVElPTiwgMHgxMywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9EVVJBVElPTiwgMHgxMywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BTENfUExBQ0VNRU5ULCAweDE4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1NUQVJULCAweDA2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1csIDB4MTAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QUkVfQ09BU1QsIDB4MDMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QT1NUX0NPQVNULCAweDAzLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0VPUiwgMHhmZiwgVFZQNzAwMl9SRVNFUlZFRCB9Cit9OworCisvKiBSZWdpc3RlciBwYXJhbWV0ZXJzIGZvciA1NzZQICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgdHZwNzAwMl9wYXJtc181NzZQW10gPSB7CisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTVNCUywgMHgzNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9DUlRMLCAweDE4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUEhBU0VfU0VMLCAweDE0LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTFNCUywgMHg5QiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX01TQlMsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX0xTQlMsIDB4MEYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX01TQlMsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfU1RBUlRfTF9PRkYsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfU1RBUlRfTF9PRkYsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfRFVSQVRJT04sIDB4MkQsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfRFVSQVRJT04sIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQUxDX1BMQUNFTUVOVCwgMHgxOCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9TVEFSVCwgMHgwNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9XLCAweDEwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUFJFX0NPQVNULCAweDAzLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUE9TVF9DT0FTVCwgMHgwMywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9FT1IsIDB4ZmYsIFRWUDcwMDJfUkVTRVJWRUQgfQorfTsKKworLyogUmVnaXN0ZXIgcGFyYW1ldGVycyBmb3IgMTA4MEk2MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHR2cDcwMDJfcGFybXNfMTA4MEk2MFtdID0geworCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX01TQlMsIDB4ODksIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9MU0JTLCAweDA4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfQ1JUTCwgMHg5OCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BIQVNFX1NFTCwgMHgxNCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX0xTQlMsIDB4MDYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9NU0JTLCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9MU0JTLCAweDhhLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9NU0JTLCAweDA4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX1NUQVJUX0xfT0ZGLCAweDAyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX1NUQVJUX0xfT0ZGLCAweDAyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX0RVUkFUSU9OLCAweDE2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX0RVUkFUSU9OLCAweDE3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FMQ19QTEFDRU1FTlQsIDB4NWEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfU1RBUlQsIDB4MzIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfVywgMHgyMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BSRV9DT0FTVCwgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BPU1RfQ09BU1QsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfRU9SLCAweGZmLCBUVlA3MDAyX1JFU0VSVkVEIH0KK307CisKKy8qIFJlZ2lzdGVyIHBhcmFtZXRlcnMgZm9yIDEwODBQNjAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSB0dnA3MDAyX3Bhcm1zXzEwODBQNjBbXSA9IHsKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9NU0JTLCAweDg5LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTFNCUywgMHgwOCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0NSVEwsIDB4RTAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QSEFTRV9TRUwsIDB4MTQsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9MU0JTLCAweDA2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTVNCUywgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTFNCUywgMHg4YSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTVNCUywgMHgwOCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9TVEFSVF9MX09GRiwgMHgwMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9TVEFSVF9MX09GRiwgMHgwMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9EVVJBVElPTiwgMHgxNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9EVVJBVElPTiwgMHgxNywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BTENfUExBQ0VNRU5ULCAweDVhLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1NUQVJULCAweDMyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1csIDB4MjAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QUkVfQ09BU1QsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QT1NUX0NPQVNULCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0VPUiwgMHhmZiwgVFZQNzAwMl9SRVNFUlZFRCB9Cit9OworCisvKiBSZWdpc3RlciBwYXJhbWV0ZXJzIGZvciAxMDgwSTUwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgdHZwNzAwMl9wYXJtc18xMDgwSTUwW10gPSB7CisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTVNCUywgMHhhNSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9DUlRMLCAweDk4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUEhBU0VfU0VMLCAweDE0LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTFNCUywgMHgwNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX01TQlMsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX0xTQlMsIDB4OGEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX01TQlMsIDB4MDgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfU1RBUlRfTF9PRkYsIDB4MDIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfU1RBUlRfTF9PRkYsIDB4MDIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfRFVSQVRJT04sIDB4MTYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfRFVSQVRJT04sIDB4MTcsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQUxDX1BMQUNFTUVOVCwgMHg1YSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9TVEFSVCwgMHgzMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9XLCAweDIwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUFJFX0NPQVNULCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUE9TVF9DT0FTVCwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9FT1IsIDB4ZmYsIFRWUDcwMDJfUkVTRVJWRUQgfQorfTsKKworLyogUmVnaXN0ZXIgcGFyYW1ldGVycyBmb3IgNzIwUDYwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgdHZwNzAwMl9wYXJtc183MjBQNjBbXSA9IHsKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9NU0JTLCAweDY3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTFNCUywgMHgwMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0NSVEwsIDB4YTAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QSEFTRV9TRUwsIDB4MTYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9MU0JTLCAweDQ3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTVNCUywgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTFNCUywgMHg0QiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTVNCUywgMHgwNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9TVEFSVF9MX09GRiwgMHgwNSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9TVEFSVF9MX09GRiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9EVVJBVElPTiwgMHgyRCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9EVVJBVElPTiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BTENfUExBQ0VNRU5ULCAweDVhLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1NUQVJULCAweDMyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1csIDB4MjAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QUkVfQ09BU1QsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QT1NUX0NPQVNULCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0VPUiwgMHhmZiwgVFZQNzAwMl9SRVNFUlZFRCB9Cit9OworCisvKiBSZWdpc3RlciBwYXJhbWV0ZXJzIGZvciA3MjBQNTAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSB0dnA3MDAyX3Bhcm1zXzcyMFA1MFtdID0geworCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX01TQlMsIDB4N2IsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9MU0JTLCAweDBjLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfQ1JUTCwgMHg5OCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BIQVNFX1NFTCwgMHgxNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX0xTQlMsIDB4NDcsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9NU0JTLCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9MU0JTLCAweDRCLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9NU0JTLCAweDA2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX1NUQVJUX0xfT0ZGLCAweDA1LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX1NUQVJUX0xfT0ZGLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX0RVUkFUSU9OLCAweDJELCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX0RVUkFUSU9OLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FMQ19QTEFDRU1FTlQsIDB4NWEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfU1RBUlQsIDB4MzIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfVywgMHgyMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BSRV9DT0FTVCwgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BPU1RfQ09BU1QsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfRU9SLCAweGZmLCBUVlA3MDAyX1JFU0VSVkVEIH0KK307CisKKy8qIFN0cnVjdCBsaXN0IGZvciBhdmFpbGFibGUgZm9ybWF0cyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZtdGRlc2MgdHZwNzAwMl9mbXRfbGlzdFtdID0geworCXsKKwkgLmluZGV4ID0gMCwKKwkgLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJIC5mbGFncyA9IDAsCisJIC5kZXNjcmlwdGlvbiA9ICI4LWJpdCBVWVZZIDQ6MjoyIEZvcm1hdCIsCisJIC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZLAorCX0sCit9OworCisjZGVmaW5lIE5VTV9GT1JNQVRTCQlBUlJBWV9TSVpFKHR2cDcwMDJfZm10X2xpc3QpCisKKy8qIFByZXNldCBkZWZpbml0aW9uIGZvciBoYW5kbGluZyBkZXZpY2Ugb3BlcmF0aW9uICovCitzdHJ1Y3QgdHZwNzAwMl9wcmVzZXRfZGVmaW5pdGlvbiB7CisJdTMyIHByZXNldDsKKwljb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSAqcF9zZXR0aW5nczsKKwllbnVtIHY0bDJfY29sb3JzcGFjZSBjb2xvcl9zcGFjZTsKKwllbnVtIHY0bDJfZmllbGQgc2Nhbm1vZGU7CisJdTE2IHByb2dyZXNzaXZlOworCXUxNiBsaW5lc19wZXJfZnJhbWU7CisJdTE2IGNwbF9taW47CisJdTE2IGNwbF9tYXg7Cit9OworCisvKiBTdHJ1Y3QgbGlzdCBmb3IgZGlnaXRhbCB2aWRlbyBwcmVzZXRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHR2cDcwMDJfcHJlc2V0X2RlZmluaXRpb24gdHZwNzAwMl9wcmVzZXRzW10gPSB7CisJeworCQlWNEwyX0RWXzcyMFA2MCwKKwkJdHZwNzAwMl9wYXJtc183MjBQNjAsCisJCVY0TDJfQ09MT1JTUEFDRV9SRUM3MDksCisJCVY0TDJfRklFTERfTk9ORSwKKwkJMSwKKwkJMHgyRUUsCisJCTEzNSwKKwkJMTUzCisJfSwKKwl7CisJCVY0TDJfRFZfMTA4MEk2MCwKKwkJdHZwNzAwMl9wYXJtc18xMDgwSTYwLAorCQlWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5LAorCQlWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCisJCTAsCisJCTB4NDY1LAorCQkxODEsCisJCTIwNQorCX0sCisJeworCQlWNEwyX0RWXzEwODBJNTAsCisJCXR2cDcwMDJfcGFybXNfMTA4MEk1MCwKKwkJVjRMMl9DT0xPUlNQQUNFX1JFQzcwOSwKKwkJVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkwLAorCQkweDQ2NSwKKwkJMjE3LAorCQkyNDUKKwl9LAorCXsKKwkJVjRMMl9EVl83MjBQNTAsCisJCXR2cDcwMDJfcGFybXNfNzIwUDUwLAorCQlWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCTEsCisJCTB4MkVFLAorCQkxNjMsCisJCTE4MworCX0sCisJeworCQlWNEwyX0RWXzEwODBQNjAsCisJCXR2cDcwMDJfcGFybXNfMTA4MFA2MCwKKwkJVjRMMl9DT0xPUlNQQUNFX1JFQzcwOSwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkxLAorCQkweDQ2NSwKKwkJOTAsCisJCTEwMgorCX0sCisJeworCQlWNEwyX0RWXzQ4MFA1OV85NCwKKwkJdHZwNzAwMl9wYXJtc180ODBQLAorCQlWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNLAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCTEsCisJCTB4MjBELAorCQkweGZmZmYsCisJCTB4ZmZmZgorCX0sCisJeworCQlWNEwyX0RWXzU3NlA1MCwKKwkJdHZwNzAwMl9wYXJtc181NzZQLAorCQlWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNLAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCTEsCisJCTB4MjcxLAorCQkweGZmZmYsCisJCTB4ZmZmZgorCX0KK307CisKKyNkZWZpbmUgTlVNX1BSRVNFVFMJQVJSQVlfU0laRSh0dnA3MDAyX3ByZXNldHMpCisKKy8qIERldmljZSBkZWZpbml0aW9uICovCitzdHJ1Y3QgdHZwNzAwMiB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCWNvbnN0IHN0cnVjdCB0dnA3MDAyX2NvbmZpZyAqcGRhdGE7CisKKwlpbnQgdmVyOworCWludCBzdHJlYW1pbmc7CisKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHBpeDsKKwljb25zdCBzdHJ1Y3QgdHZwNzAwMl9wcmVzZXRfZGVmaW5pdGlvbiAqY3VycmVudF9wcmVzZXQ7CisJdTggZ2FpbjsKK307CisKKy8qCisgKiB0b190dnA3MDAyIC0gT2J0YWluIGRldmljZSBoYW5kbGVyIFRWUDcwMDIKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICoKKyAqIFJldHVybnMgZGV2aWNlIGhhbmRsZXIgdHZwNzAwMi4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdHZwNzAwMiAqdG9fdHZwNzAwMihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCB0dnA3MDAyLCBzZCk7Cit9CisKKy8qCisgKiB0dnA3MDAyX3JlYWQgLSBSZWFkIGEgdmFsdWUgZnJvbSBhIHJlZ2lzdGVyIGluIGFuIFRWUDcwMDIKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICogQHJlZzogVFZQNzAwMiByZWdpc3RlciBhZGRyZXNzCisgKiBAZHN0OiBwb2ludGVyIHRvIDgtYml0IGRlc3RpbmF0aW9uCisgKgorICogUmV0dXJucyB2YWx1ZSByZWFkIGlmIHN1Y2Nlc3NmdWwsIG9yIG5vbi16ZXJvICgtMSkgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCBhZGRyLCB1OCAqZHN0KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJaW50IHJldHJ5OworCWludCBlcnJvcjsKKworCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IEkyQ19SRVRSWV9DT1VOVDsgcmV0cnkrKykgeworCQllcnJvciA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjLCBhZGRyKTsKKworCQlpZiAoZXJyb3IgPj0gMCkgeworCQkJKmRzdCA9ICh1OCllcnJvcjsKKwkJCXJldHVybiAwOworCQl9CisKKwkJbXNsZWVwX2ludGVycnVwdGlibGUoMTApOworCX0KKwl2NGwyX2VycihzZCwgIlRWUDcwMDIgcmVhZCBlcnJvciAlZFxuIiwgZXJyb3IpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIHR2cDcwMDJfcmVhZF9lcnIoKSAtIFJlYWQgYSByZWdpc3RlciB2YWx1ZSB3aXRoIGVycm9yIGNvZGUKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCisgKiBAcmVnOiBkZXN0aW5hdGlvbiByZWdpc3RlcgorICogQHZhbDogdmFsdWUgdG8gYmUgcmVhZAorICogQGVycm9yOiBwb2ludGVyIHRvIGVycm9yIHZhbHVlCisgKgorICogUmVhZCBhIHZhbHVlIGluIGEgcmVnaXN0ZXIgYW5kIHNhdmUgZXJyb3IgdmFsdWUgaW4gcG9pbnRlci4KKyAqIEFsc28gdXBkYXRlIHRoZSByZWdpc3RlciB0YWJsZSBpZiBzdWNjZXNzZnVsCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0dnA3MDAyX3JlYWRfZXJyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywKKwkJCQkJCQl1OCAqZHN0LCBpbnQgKmVycikKK3sKKwlpZiAoISplcnIpCisJCSplcnIgPSB0dnA3MDAyX3JlYWQoc2QsIHJlZywgZHN0KTsKK30KKworLyoKKyAqIHR2cDcwMDJfd3JpdGUoKSAtIFdyaXRlIGEgdmFsdWUgdG8gYSByZWdpc3RlciBpbiBUVlA3MDAyCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEBhZGRyOiBUVlA3MDAyIHJlZ2lzdGVyIGFkZHJlc3MKKyAqIEB2YWx1ZTogdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgcmVnaXN0ZXIKKyAqCisgKiBXcml0ZSBhIHZhbHVlIHRvIGEgcmVnaXN0ZXIgaW4gYW4gVFZQNzAwMiBkZWNvZGVyIGRldmljZS4KKyAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLCBvciBub24temVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCBhZGRyLCB1OCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKKwlpbnQgcmV0cnk7CisJaW50IGVycm9yOworCisJYyA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgSTJDX1JFVFJZX0NPVU5UOyByZXRyeSsrKSB7CisJCWVycm9yID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjLCBhZGRyLCB2YWx1ZSk7CisKKwkJaWYgKGVycm9yID49IDApCisJCQlyZXR1cm4gMDsKKworCQl2NGwyX3dhcm4oc2QsICJXcml0ZTogcmV0cnkgLi4uICVkXG4iLCByZXRyeSk7CisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKwl9CisJdjRsMl9lcnIoc2QsICJUVlA3MDAyIHdyaXRlIGVycm9yICVkXG4iLCBlcnJvcik7CisJcmV0dXJuIGVycm9yOworfQorCisvKgorICogdHZwNzAwMl93cml0ZV9lcnIoKSAtIFdyaXRlIGEgcmVnaXN0ZXIgdmFsdWUgd2l0aCBlcnJvciBjb2RlCisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQorICogQHJlZzogZGVzdGluYXRpb24gcmVnaXN0ZXIKKyAqIEB2YWw6IHZhbHVlIHRvIGJlIHdyaXR0ZW4KKyAqIEBlcnJvcjogcG9pbnRlciB0byBlcnJvciB2YWx1ZQorICoKKyAqIFdyaXRlIGEgdmFsdWUgaW4gYSByZWdpc3RlciBhbmQgc2F2ZSBlcnJvciB2YWx1ZSBpbiBwb2ludGVyLgorICogQWxzbyB1cGRhdGUgdGhlIHJlZ2lzdGVyIHRhYmxlIGlmIHN1Y2Nlc3NmdWwKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHR2cDcwMDJfd3JpdGVfZXJyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywKKwkJCQkJCQl1OCB2YWwsIGludCAqZXJyKQoreworCWlmICghKmVycikKKwkJKmVyciA9IHR2cDcwMDJfd3JpdGUoc2QsIHJlZywgdmFsKTsKK30KKworLyoKKyAqIHR2cDcwMDJfZ19jaGlwX2lkZW50KCkgLSBHZXQgY2hpcCBpZGVudGlmaWNhdGlvbiBudW1iZXIKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICogQGNoaXA6IHB0ciB0byB2NGwyX2RiZ19jaGlwX2lkZW50IHN0cnVjdAorICoKKyAqIE9idGFpbnMgdGhlIGNoaXAncyBpZGVudGlmaWNhdGlvbiBudW1iZXIuCisgKiBSZXR1cm5zIHplcm8gb3IgLUVJTlZBTCBpZiByZWFkIG9wZXJhdGlvbiBmYWlscy4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwl1OCByZXY7CisJaW50IGVycm9yOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCWVycm9yID0gdHZwNzAwMl9yZWFkKHNkLCBUVlA3MDAyX0NISVBfUkVWLCAmcmV2KTsKKworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfVFZQNzAwMiwgcmV2KTsKK30KKworLyoKKyAqIHR2cDcwMDJfd3JpdGVfaW5pdHRhYigpIC0gV3JpdGUgaW5pdGlhbGl6YXRpb24gdmFsdWVzCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEByZWdzOiBwdHIgdG8gaTJjX3JlZ192YWx1ZSBzdHJ1Y3QKKyAqCisgKiBXcml0ZSBpbml0aWFsaXphdGlvbiB2YWx1ZXMuCisgKiBSZXR1cm5zIHplcm8gb3IgLUVJTlZBTCBpZiByZWFkIG9wZXJhdGlvbiBmYWlscy4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3dyaXRlX2luaXR0YWIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkJY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgKnJlZ3MpCit7CisJaW50IGVycm9yID0gMDsKKworCS8qIEluaXRpYWxpemUgdGhlIGZpcnN0IChkZWZpbmVkKSByZWdpc3RlcnMgKi8KKwl3aGlsZSAoVFZQNzAwMl9FT1IgIT0gcmVncy0+cmVnKSB7CisJCWlmIChUVlA3MDAyX1dSSVRFID09IHJlZ3MtPnR5cGUpCisJCQl0dnA3MDAyX3dyaXRlX2VycihzZCwgcmVncy0+cmVnLCByZWdzLT52YWx1ZSwgJmVycm9yKTsKKwkJcmVncysrOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIHR2cDcwMDJfc19kdl9wcmVzZXQoKSAtIFNldCBkaWdpdGFsIHZpZGVvIHByZXNldAorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAc3RkOiBwdHIgdG8gdjRsMl9kdl9wcmVzZXQgc3RydWN0CisgKgorICogU2V0IHRoZSBkaWdpdGFsIHZpZGVvIHByZXNldCBmb3IgYSBUVlA3MDAyIGRlY29kZXIgZGV2aWNlLgorICogUmV0dXJucyB6ZXJvIHdoZW4gc3VjY2Vzc2Z1bCBvciAtRUlOVkFMIGlmIHJlZ2lzdGVyIGFjY2VzcyBmYWlscy4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3NfZHZfcHJlc2V0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJCXN0cnVjdCB2NGwyX2R2X3ByZXNldCAqZHZfcHJlc2V0KQoreworCXN0cnVjdCB0dnA3MDAyICpkZXZpY2UgPSB0b190dnA3MDAyKHNkKTsKKwl1MzIgcHJlc2V0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9QUkVTRVRTOyBpKyspIHsKKwkJcHJlc2V0ID0gdHZwNzAwMl9wcmVzZXRzW2ldLnByZXNldDsKKwkJaWYgKHByZXNldCA9PSBkdl9wcmVzZXQtPnByZXNldCkgeworCQkJZGV2aWNlLT5jdXJyZW50X3ByZXNldCA9ICZ0dnA3MDAyX3ByZXNldHNbaV07CisJCQlyZXR1cm4gdHZwNzAwMl93cml0ZV9pbml0dGFiKHNkLCB0dnA3MDAyX3ByZXNldHNbaV0ucF9zZXR0aW5ncyk7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIHR2cDcwMDJfZ19jdHJsKCkgLSBHZXQgYSBjb250cm9sCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEBjdHJsOiBwdHIgdG8gdjRsMl9jb250cm9sIHN0cnVjdAorICoKKyAqIEdldCBhIGNvbnRyb2wgZm9yIGEgVFZQNzAwMiBkZWNvZGVyIGRldmljZS4KKyAqIFJldHVybnMgemVybyB3aGVuIHN1Y2Nlc3NmdWwgb3IgLUVJTlZBTCBpZiByZWdpc3RlciBhY2Nlc3MgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgdHZwNzAwMiAqZGV2aWNlID0gdG9fdHZwNzAwMihzZCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQljdHJsLT52YWx1ZSA9IGRldmljZS0+Z2FpbjsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisvKgorICogdHZwNzAwMl9zX2N0cmwoKSAtIFNldCBhIGNvbnRyb2wKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICogQGN0cmw6IHB0ciB0byB2NGwyX2NvbnRyb2wgc3RydWN0CisgKgorICogU2V0IGEgY29udHJvbCBpbiBUVlA3MDAyIGRlY29kZXIgZGV2aWNlLgorICogUmV0dXJucyB6ZXJvIHdoZW4gc3VjY2Vzc2Z1bCBvciAtRUlOVkFMIGlmIHJlZ2lzdGVyIGFjY2VzcyBmYWlscy4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB0dnA3MDAyICpkZXZpY2UgPSB0b190dnA3MDAyKHNkKTsKKwlpbnQgZXJyb3IgPSAwOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJdHZwNzAwMl93cml0ZV9lcnIoc2QsIFRWUDcwMDJfUl9GSU5FX0dBSU4sCisJCQkJCQljdHJsLT52YWx1ZSAmIDB4ZmYsICZlcnJvcik7CisJCXR2cDcwMDJfd3JpdGVfZXJyKHNkLCBUVlA3MDAyX0dfRklORV9HQUlOLAorCQkJCQkJY3RybC0+dmFsdWUgJiAweGZmLCAmZXJyb3IpOworCQl0dnA3MDAyX3dyaXRlX2VycihzZCwgVFZQNzAwMl9CX0ZJTkVfR0FJTiwKKwkJCQkJCWN0cmwtPnZhbHVlICYgMHhmZiwgJmVycm9yKTsKKworCQlpZiAoZXJyb3IgPCAwKQorCQkJcmV0dXJuIGVycm9yOworCisJCS8qIFNldCBvbmx5IGFmdGVyIGtub3dpbmcgdGhlcmUgaXMgbm8gZXJyb3IgKi8KKwkJZGV2aWNlLT5nYWluID0gY3RybC0+dmFsdWUgJiAweGZmOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qCisgKiB0dnA3MDAyX3F1ZXJ5Y3RybCgpIC0gUXVlcnkgYSBjb250cm9sCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEBjdHJsOiBwdHIgdG8gdjRsMl9xdWVyeWN0cmwgc3RydWN0CisgKgorICogUXVlcnkgYSBjb250cm9sIG9mIGEgVFZQNzAwMiBkZWNvZGVyIGRldmljZS4KKyAqIFJldHVybnMgemVybyB3aGVuIHN1Y2Nlc3NmdWwgb3IgLUVJTlZBTCBpZiByZWdpc3RlciByZWFkIGZhaWxzLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCS8qCisJCSAqIEdhaW4gaXMgc3VwcG9ydGVkIFswLTI1NSwgZGVmYXVsdD0wLCBzdGVwPTFdCisJCSAqLworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDI1NSwgMSwgMCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisvKgorICogdHZwNzAwMl90cnlfZm10X2NhcCgpIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciB0cnlfZm10CisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQorICogQGY6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBWSURJT0NfVFJZX0ZNVCBpb2N0bCBzdHJ1Y3R1cmUKKyAqCisgKiBJbXBsZW1lbnQgdGhlIFZJRElPQ19UUllfRk1UIGlvY3RsIGZvciB0aGUgQ0FQVFVSRSBidWZmZXIgdHlwZS4gVGhpcworICogaW9jdGwgaXMgdXNlZCB0byBuZWdvdGlhdGUgdGhlIGltYWdlIGNhcHR1cmUgc2l6ZSBhbmQgcGl4ZWwgZm9ybWF0CisgKiB3aXRob3V0IGFjdHVhbGx5IG1ha2luZyBpdCB0YWtlIGVmZmVjdC4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3RyeV9mbXRfY2FwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgdHZwNzAwMiAqZGV2aWNlID0gdG9fdHZwNzAwMihzZCk7CisJc3RydWN0IHY0bDJfZHZfZW51bV9wcmVzZXQgZV9wcmVzZXQ7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4OworCWludCBlcnJvciA9IDA7CisKKwlwaXggPSAmZi0+Zm10LnBpeDsKKworCS8qIENhbGN1bGF0ZSBoZWlnaHQgYW5kIHdpZHRoIGJhc2VkIG9uIGN1cnJlbnQgc3RhbmRhcmQgKi8KKwllcnJvciA9IHY0bF9maWxsX2R2X3ByZXNldF9pbmZvKGRldmljZS0+Y3VycmVudF9wcmVzZXQtPnByZXNldCwgJmVfcHJlc2V0KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAtRUlOVkFMOworCisJcGl4LT53aWR0aCA9IGVfcHJlc2V0LndpZHRoOworCXBpeC0+aGVpZ2h0ID0gZV9wcmVzZXQuaGVpZ2h0OworCXBpeC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfVVlWWTsKKwlwaXgtPmZpZWxkID0gZGV2aWNlLT5jdXJyZW50X3ByZXNldC0+c2Nhbm1vZGU7CisJcGl4LT5ieXRlc3BlcmxpbmUgPSBwaXgtPndpZHRoICogMjsKKwlwaXgtPnNpemVpbWFnZSA9IHBpeC0+Ynl0ZXNwZXJsaW5lICogcGl4LT5oZWlnaHQ7CisJcGl4LT5jb2xvcnNwYWNlID0gZGV2aWNlLT5jdXJyZW50X3ByZXNldC0+Y29sb3Jfc3BhY2U7CisJcGl4LT5wcml2ID0gMDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlRyeSBGTVQ6IHBpeGVsZm9ybWF0IC0gJXMsIGJ5dGVzcGVybGluZSAtICVkIgorCQkJIldpZHRoIC0gJWQsIEhlaWdodCAtICVkIiwgIjgtYml0IFVZVlkgNDoyOjIgRm9ybWF0IiwKKwkJCXBpeC0+Ynl0ZXNwZXJsaW5lLCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisJcmV0dXJuIGVycm9yOworfQorCisvKgorICogdHZwNzAwMl9zX2ZtdCgpIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBzX2ZtdAorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKKyAqIEBmOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgVklESU9DX1NfRk1UIGlvY3RsIHN0cnVjdHVyZQorICoKKyAqIElmIHRoZSByZXF1ZXN0ZWQgZm9ybWF0IGlzIHN1cHBvcnRlZCwgY29uZmlndXJlcyB0aGUgSFcgdG8gdXNlIHRoYXQKKyAqIGZvcm1hdCwgcmV0dXJucyBlcnJvciBjb2RlIGlmIGZvcm1hdCBub3Qgc3VwcG9ydGVkIG9yIEhXIGNhbid0IGJlCisgKiBjb3JyZWN0bHkgY29uZmlndXJlZC4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgdHZwNzAwMiAqZGVjb2RlciA9IHRvX3R2cDcwMDIoc2QpOworCWludCBydmFsOworCisJcnZhbCA9IHR2cDcwMDJfdHJ5X2ZtdF9jYXAoc2QsIGYpOworCWlmICghcnZhbCkKKwkJZGVjb2Rlci0+cGl4ID0gZi0+Zm10LnBpeDsKKwlyZXR1cm4gcnZhbDsKK30KKworLyoKKyAqIHR2cDcwMDJfZ19mbXQoKSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgdHZwNzAwMl9nX2ZtdAorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKKyAqIEBmOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgdjRsMl9mb3JtYXQgc3RydWN0dXJlCisgKgorICogUmV0dXJucyB0aGUgZGVjb2RlcidzIGN1cnJlbnQgcGl4ZWwgZm9ybWF0IGluIHRoZSB2NGwyX2Zvcm1hdAorICogcGFyYW1ldGVyLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB0dnA3MDAyICpkZWNvZGVyID0gdG9fdHZwNzAwMihzZCk7CisKKwlmLT5mbXQucGl4ID0gZGVjb2Rlci0+cGl4OworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiQ3VycmVudCBGTVQ6IGJ5dGVzcGVybGluZSAtICVkIgorCQkJIldpZHRoIC0gJWQsIEhlaWdodCAtICVkIiwKKwkJCWRlY29kZXItPnBpeC5ieXRlc3BlcmxpbmUsCisJCQlkZWNvZGVyLT5waXgud2lkdGgsIGRlY29kZXItPnBpeC5oZWlnaHQpOworCXJldHVybiAwOworfQorCisvKgorICogdHZwNzAwMl9xdWVyeV9kdl9wcmVzZXQoKSAtIHF1ZXJ5IERWIHByZXNldAorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKKyAqIEBzdGRfaWQ6IHN0YW5kYXJkIFY0TDIgdjRsMl9kdl9wcmVzZXQKKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IERWIHByZXNldCBieSBUVlA3MDAyLiBJZiBubyBhY3RpdmUgaW5wdXQgaXMKKyAqIGRldGVjdGVkLCByZXR1cm5zIC1FSU5WQUwKKyAqLworc3RhdGljIGludCB0dnA3MDAyX3F1ZXJ5X2R2X3ByZXNldChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCQkJc3RydWN0IHY0bDJfZHZfcHJlc2V0ICpxcHJlc2V0KQoreworCWNvbnN0IHN0cnVjdCB0dnA3MDAyX3ByZXNldF9kZWZpbml0aW9uICpwcmVzZXRzID0gdHZwNzAwMl9wcmVzZXRzOworCXN0cnVjdCB2NGwyX2R2X2VudW1fcHJlc2V0IGVfcHJlc2V0OworCXN0cnVjdCB0dnA3MDAyICpkZXZpY2U7CisJdTggcHJvZ3Jlc3NpdmU7CisJdTMyIGxwZnI7CisJdTMyIGNwbG47CisJaW50IGVycm9yID0gMDsKKwl1OCBscGZfbHNiOworCXU4IGxwZl9tc2I7CisJdTggY3BsX2xzYjsKKwl1OCBjcGxfbXNiOworCWludCBpbmRleDsKKworCWRldmljZSA9IHRvX3R2cDcwMDIoc2QpOworCisJLyogUmVhZCBzdGFuZGFyZHMgZnJvbSBkZXZpY2UgcmVnaXN0ZXJzICovCisJdHZwNzAwMl9yZWFkX2VycihzZCwgVFZQNzAwMl9MX0ZSQU1FX1NUQVRfTFNCUywgJmxwZl9sc2IsICZlcnJvcik7CisJdHZwNzAwMl9yZWFkX2VycihzZCwgVFZQNzAwMl9MX0ZSQU1FX1NUQVRfTVNCUywgJmxwZl9tc2IsICZlcnJvcik7CisKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisKKwl0dnA3MDAyX3JlYWRfZXJyKHNkLCBUVlA3MDAyX0NMS19MX1NUQVRfTFNCUywgJmNwbF9sc2IsICZlcnJvcik7CisJdHZwNzAwMl9yZWFkX2VycihzZCwgVFZQNzAwMl9DTEtfTF9TVEFUX01TQlMsICZjcGxfbXNiLCAmZXJyb3IpOworCisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJLyogR2V0IGxpbmVzIHBlciBmcmFtZSwgY2xvY2tzIHBlciBsaW5lIGFuZCBpbnRlcmxhY2VkL3Byb2dyZXNpdmUgKi8KKwlscGZyID0gbHBmX2xzYiB8ICgoVFZQNzAwMl9DTF9NQVNLICYgbHBmX21zYikgPDwgVFZQNzAwMl9DTF9TSElGVCk7CisJY3BsbiA9IGNwbF9sc2IgfCAoKFRWUDcwMDJfQ0xfTUFTSyAmIGNwbF9tc2IpIDw8IFRWUDcwMDJfQ0xfU0hJRlQpOworCXByb2dyZXNzaXZlID0gKGxwZl9tc2IgJiBUVlA3MDAyX0lOUFJfTUFTSykgPj4gVFZQNzAwMl9JUF9TSElGVDsKKworCS8qIERvIGNoZWNraW5nIG9mIHZpZGVvIG1vZGVzICovCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTlVNX1BSRVNFVFM7IGluZGV4KyssIHByZXNldHMrKykKKwkJaWYgKGxwZnIgID09IHByZXNldHMtPmxpbmVzX3Blcl9mcmFtZSAmJgorCQkJcHJvZ3Jlc3NpdmUgPT0gcHJlc2V0cy0+cHJvZ3Jlc3NpdmUpIHsKKwkJCWlmIChwcmVzZXRzLT5jcGxfbWluID09IDB4ZmZmZikKKwkJCQlicmVhazsKKwkJCWlmIChjcGxuID49IHByZXNldHMtPmNwbF9taW4gJiYgY3BsbiA8PSBwcmVzZXRzLT5jcGxfbWF4KQorCQkJCWJyZWFrOworCQl9CisKKwlpZiAoaW5kZXggPT0gTlVNX1BSRVNFVFMpIHsKKwkJdjRsMl9lcnIoc2QsICJxdWVyeXN0ZCBlcnJvciwgbHBmID0gJXgsIGNwbCA9ICV4XG4iLAorCQkJCQkJCQlscGZyLCBjcGxuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHY0bF9maWxsX2R2X3ByZXNldF9pbmZvKHByZXNldHMtPnByZXNldCwgJmVfcHJlc2V0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTZXQgdmFsdWVzIGluIGZvdW5kIHByZXNldCAqLworCXFwcmVzZXQtPnByZXNldCA9IHByZXNldHMtPnByZXNldDsKKworCS8qIFVwZGF0ZSBsaW5lcyBwZXIgZnJhbWUgYW5kIGNsb2NrcyBwZXIgbGluZSBpbmZvICovCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiQ3VycmVudCBwcmVzZXQ6ICVkICVkIiwKKwkJCQkJZV9wcmVzZXQud2lkdGgsIGVfcHJlc2V0LmhlaWdodCk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisvKgorICogdHZwNzAwMl9nX3JlZ2lzdGVyKCkgLSBHZXQgdGhlIHZhbHVlIG9mIGEgcmVnaXN0ZXIKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICogQHZyZWc6IHB0ciB0byB2NGwyX2RiZ19yZWdpc3RlciBzdHJ1Y3QKKyAqCisgKiBHZXQgdGhlIHZhbHVlIG9mIGEgVFZQNzAwMiBkZWNvZGVyIGRldmljZSByZWdpc3Rlci4KKyAqIFJldHVybnMgemVybyB3aGVuIHN1Y2Nlc3NmdWwsIC1FSU5WQUwgaWYgcmVnaXN0ZXIgcmVhZCBmYWlscyBvcgorICogYWNjZXNzIHRvIEkyQyBjbGllbnQgZmFpbHMsIC1FUEVSTSBpZiB0aGUgY2FsbCBpcyBub3QgYWxsb3dlZAorICogYnkgZGlhYmxlZCBDQVBfU1lTX0FETUlOLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfZ19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCQkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IHZhbDsKKwlpbnQgcmV0OworCisJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudChjbGllbnQsICZyZWctPm1hdGNoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJcmV0ID0gdHZwNzAwMl9yZWFkKHNkLCByZWctPnJlZyAmIDB4ZmYsICZ2YWwpOworCXJlZy0+dmFsID0gdmFsOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB0dnA3MDAyX3NfcmVnaXN0ZXIoKSAtIHNldCBhIGNvbnRyb2wKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICogQGN0cmw6IHB0ciB0byB2NGwyX2NvbnRyb2wgc3RydWN0CisgKgorICogR2V0IHRoZSB2YWx1ZSBvZiBhIFRWUDcwMDIgZGVjb2RlciBkZXZpY2UgcmVnaXN0ZXIuCisgKiBSZXR1cm5zIHplcm8gd2hlbiBzdWNjZXNzZnVsLCAtRUlOVkFMIGlmIHJlZ2lzdGVyIHJlYWQgZmFpbHMgb3IKKyAqIC1FUEVSTSBpZiBjYWxsIG5vdCBhbGxvd2VkLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCQkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudChjbGllbnQsICZyZWctPm1hdGNoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJcmV0dXJuIHR2cDcwMDJfd3JpdGUoc2QsIHJlZy0+cmVnICYgMHhmZiwgcmVnLT52YWwgJiAweGZmKTsKK30KKyNlbmRpZgorCisvKgorICogdHZwNzAwMl9lbnVtX2ZtdCgpIC0gRW51bSBzdXBwb3J0ZWQgZm9ybWF0cworICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKKyAqIEBlbmFibGU6IHBvaW50ZXIgdG8gZm9ybWF0IHN0cnVjdAorICoKKyAqIEVudW1lcmF0ZSBzdXBwb3J0ZWQgZm9ybWF0cy4KKyAqLworCitzdGF0aWMgaW50IHR2cDcwMDJfZW51bV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdGRlc2MpCit7CisJLyogQ2hlY2sgcmVxdWVzdGVkIGZvcm1hdCBpbmRleCBpcyB3aXRoaW4gcmFuZ2UgKi8KKwlpZiAoZm10ZGVzYy0+aW5kZXggPCAwIHx8IGZtdGRlc2MtPmluZGV4ID49IE5VTV9GT1JNQVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqZm10ZGVzYyA9IHR2cDcwMDJfZm10X2xpc3RbZm10ZGVzYy0+aW5kZXhdOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0dnA3MDAyX3Nfc3RyZWFtKCkgLSBWNEwyIGRlY29kZXIgaS9mIGhhbmRsZXIgZm9yIHNfc3RyZWFtCisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQorICogQGVuYWJsZTogc3RyZWFtaW5nIGVuYWJsZSBvciBkaXNhYmxlCisgKgorICogU2V0cyBzdHJlYW1pbmcgdG8gZW5hYmxlIG9yIGRpc2FibGUsIGlmIHBvc3NpYmxlLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgdHZwNzAwMiAqZGV2aWNlID0gdG9fdHZwNzAwMihzZCk7CisJaW50IGVycm9yID0gMDsKKworCWlmIChkZXZpY2UtPnN0cmVhbWluZyA9PSBlbmFibGUpCisJCXJldHVybiAwOworCisJaWYgKGVuYWJsZSkgeworCQkvKiBTZXQgb3V0cHV0IHN0YXRlIG9uIChsb3cgaW1wZWRhbmNlIG1lYW5zIHN0cmVhbSBvbikgKi8KKwkJZXJyb3IgPSB0dnA3MDAyX3dyaXRlKHNkLCBUVlA3MDAyX01JU0NfQ1RMXzIsIDB4MDApOworCQlkZXZpY2UtPnN0cmVhbWluZyA9IGVuYWJsZTsKKwl9IGVsc2UgeworCQkvKiBTZXQgb3V0cHV0IHN0YXRlIG9mZiAoaGlnaCBpbXBlZGFuY2UgbWVhbnMgc3RyZWFtIG9mZikgKi8KKwkJZXJyb3IgPSB0dnA3MDAyX3dyaXRlKHNkLCBUVlA3MDAyX01JU0NfQ1RMXzIsIDB4MDMpOworCQlpZiAoZXJyb3IpCisJCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJVbmFibGUgdG8gc3RvcCBzdHJlYW1pbmdcbiIpOworCisJCWRldmljZS0+c3RyZWFtaW5nID0gZW5hYmxlOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIHR2cDcwMDJfbG9nX3N0YXR1cygpIC0gUHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXIgc2V0dGluZ3MKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICoKKyAqIExvZyByZWdpc3RlciB2YWx1ZXMgb2YgYSBUVlA3MDAyIGRlY29kZXIgZGV2aWNlLgorICogUmV0dXJucyB6ZXJvIG9yIC1FSU5WQUwgaWYgcmVhZCBvcGVyYXRpb24gZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJY29uc3Qgc3RydWN0IHR2cDcwMDJfcHJlc2V0X2RlZmluaXRpb24gKnByZXNldHMgPSB0dnA3MDAyX3ByZXNldHM7CisJc3RydWN0IHR2cDcwMDIgKmRldmljZSA9IHRvX3R2cDcwMDIoc2QpOworCXN0cnVjdCB2NGwyX2R2X2VudW1fcHJlc2V0IGVfcHJlc2V0OworCXN0cnVjdCB2NGwyX2R2X3ByZXNldCBkZXRlY3RlZDsKKwlpbnQgaTsKKworCWRldGVjdGVkLnByZXNldCA9IFY0TDJfRFZfSU5WQUxJRDsKKwkvKiBGaW5kIG15IGN1cnJlbnQgc3RhbmRhcmQqLworCXR2cDcwMDJfcXVlcnlfZHZfcHJlc2V0KHNkLCAmZGV0ZWN0ZWQpOworCisJLyogUHJpbnQgc3RhbmRhcmQgcmVsYXRlZCBjb2RlIHZhbHVlcyAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fUFJFU0VUUzsgaSsrLCBwcmVzZXRzKyspCisJCWlmIChwcmVzZXRzLT5wcmVzZXQgPT0gZGV0ZWN0ZWQucHJlc2V0KQorCQkJYnJlYWs7CisKKwlpZiAodjRsX2ZpbGxfZHZfcHJlc2V0X2luZm8oZGV2aWNlLT5jdXJyZW50X3ByZXNldC0+cHJlc2V0LCAmZV9wcmVzZXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXY0bDJfaW5mbyhzZCwgIlNlbGVjdGVkIERWIFByZXNldDogJXNcbiIsIGVfcHJlc2V0Lm5hbWUpOworCXY0bDJfaW5mbyhzZCwgIiAgIFBpeGVscyBwZXIgbGluZTogJXVcbiIsIGVfcHJlc2V0LndpZHRoKTsKKwl2NGwyX2luZm8oc2QsICIgICBMaW5lcyBwZXIgZnJhbWU6ICV1XG5cbiIsIGVfcHJlc2V0LmhlaWdodCk7CisJaWYgKGkgPT0gTlVNX1BSRVNFVFMpIHsKKwkJdjRsMl9pbmZvKHNkLCAiRGV0ZWN0ZWQgRFYgUHJlc2V0OiBOb25lXG4iKTsKKwl9IGVsc2UgeworCQlpZiAodjRsX2ZpbGxfZHZfcHJlc2V0X2luZm8ocHJlc2V0cy0+cHJlc2V0LCAmZV9wcmVzZXQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXY0bDJfaW5mbyhzZCwgIkRldGVjdGVkIERWIFByZXNldDogJXNcbiIsIGVfcHJlc2V0Lm5hbWUpOworCQl2NGwyX2luZm8oc2QsICIgIFBpeGVscyBwZXIgbGluZTogJXVcbiIsIGVfcHJlc2V0LndpZHRoKTsKKwkJdjRsMl9pbmZvKHNkLCAiICBMaW5lcyBwZXIgZnJhbWU6ICV1XG5cbiIsIGVfcHJlc2V0LmhlaWdodCk7CisJfQorCXY0bDJfaW5mbyhzZCwgIlN0cmVhbWluZyBlbmFibGVkOiAlc1xuIiwKKwkJCQkJZGV2aWNlLT5zdHJlYW1pbmcgPyAieWVzIiA6ICJubyIpOworCisJLyogUHJpbnQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGdhaW4gY29udHJvbCAqLworCXY0bDJfaW5mbyhzZCwgIkdhaW46ICV1XG4iLCBkZXZpY2UtPmdhaW4pOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFY0TDIgY29yZSBvcGVyYXRpb24gaGFuZGxlcnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdHZwNzAwMl9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gdHZwNzAwMl9nX2NoaXBfaWRlbnQsCisJLmxvZ19zdGF0dXMgPSB0dnA3MDAyX2xvZ19zdGF0dXMsCisJLmdfY3RybCA9IHR2cDcwMDJfZ19jdHJsLAorCS5zX2N0cmwgPSB0dnA3MDAyX3NfY3RybCwKKwkucXVlcnljdHJsID0gdHZwNzAwMl9xdWVyeWN0cmwsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nX3JlZ2lzdGVyID0gdHZwNzAwMl9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyID0gdHZwNzAwMl9zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCisvKiBTcGVjaWZpYyB2aWRlbyBzdWJzeXN0ZW0gb3BlcmF0aW9uIGhhbmRsZXJzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyB0dnA3MDAyX3ZpZGVvX29wcyA9IHsKKwkuc19kdl9wcmVzZXQgPSB0dnA3MDAyX3NfZHZfcHJlc2V0LAorCS5xdWVyeV9kdl9wcmVzZXQgPSB0dnA3MDAyX3F1ZXJ5X2R2X3ByZXNldCwKKwkuc19zdHJlYW0gPSB0dnA3MDAyX3Nfc3RyZWFtLAorCS5nX2ZtdCA9IHR2cDcwMDJfZ19mbXQsCisJLnNfZm10ID0gdHZwNzAwMl9zX2ZtdCwKKwkuZW51bV9mbXQgPSB0dnA3MDAyX2VudW1fZm10LAorfTsKKworLyogVjRMMiB0b3AgbGV2ZWwgb3BlcmF0aW9uIGhhbmRsZXJzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB0dnA3MDAyX29wcyA9IHsKKwkuY29yZSA9ICZ0dnA3MDAyX2NvcmVfb3BzLAorCS52aWRlbyA9ICZ0dnA3MDAyX3ZpZGVvX29wcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHZwNzAwMiB0dnA3MDAyX2RldiA9IHsKKwkuc3RyZWFtaW5nID0gMCwKKworCS5waXggPSB7CisJCS53aWR0aCA9IDEyODAsCisJCS5oZWlnaHQgPSA3MjAsCisJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZLAorCQkuZmllbGQgPSBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxMjgwICogMiwKKwkJLnNpemVpbWFnZSA9IDEyODAgKiAyICogNzIwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9SRUM3MDksCisJCX0sCisKKwkuY3VycmVudF9wcmVzZXQgPSB0dnA3MDAyX3ByZXNldHMsCisJLmdhaW4gPSAwLAorfTsKKworLyoKKyAqIHR2cDcwMDJfcHJvYmUgLSBQcm9iZSBhIFRWUDcwMDIgZGV2aWNlCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEBjdHJsOiBwdHIgdG8gaTJjX2RldmljZV9pZCBzdHJ1Y3QKKyAqCisgKiBJbml0aWFsaXplIHRoZSBUVlA3MDAyIGRldmljZQorICogUmV0dXJucyB6ZXJvIHdoZW4gc3VjY2Vzc2Z1bCwgLUVJTlZBTCBpZiByZWdpc3RlciByZWFkIGZhaWxzIG9yCisgKiAtRUlPIGlmIGkyYyBhY2Nlc3MgaXMgbm90IGF2YWlsYWJsZS4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjLCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwlzdHJ1Y3QgdHZwNzAwMiAqZGV2aWNlOworCXN0cnVjdCB2NGwyX2R2X3ByZXNldCBwcmVzZXQ7CisJaW50IHBvbGFyaXR5X2E7CisJaW50IHBvbGFyaXR5X2I7CisJdTggcmV2aXNpb247CisKKwlpbnQgZXJyb3I7CisKKwkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjLT5hZGFwdGVyLAorCQlJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEUgfCBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICghYy0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKKwkJdjRsX2VycihjLCAiTm8gcGxhdGZvcm0gZGF0YSEhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2aWNlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHR2cDcwMDIpLCBHRlBfS0VSTkVMKTsKKworCWlmICghZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCSpkZXZpY2UgPSB0dnA3MDAyX2RldjsKKwlzZCA9ICZkZXZpY2UtPnNkOworCWRldmljZS0+cGRhdGEgPSBjLT5kZXYucGxhdGZvcm1fZGF0YTsKKworCS8qIFRlbGwgdjRsMiB0aGUgZGV2aWNlIGlzIHJlYWR5ICovCisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGMsICZ0dnA3MDAyX29wcyk7CisJdjRsX2luZm8oYywgInR2cDcwMDIgZm91bmQgQCAweCUwMnggKCVzKVxuIiwKKwkJCQkJYy0+YWRkciwgYy0+YWRhcHRlci0+bmFtZSk7CisKKwllcnJvciA9IHR2cDcwMDJfcmVhZChzZCwgVFZQNzAwMl9DSElQX1JFViwgJnJldmlzaW9uKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIGZvdW5kX2Vycm9yOworCisJLyogR2V0IHJldmlzaW9uIG51bWJlciAqLworCXY0bDJfaW5mbyhzZCwgIlJldi4gJTAyeCBkZXRlY3RlZC5cbiIsIHJldmlzaW9uKTsKKwlpZiAocmV2aXNpb24gIT0gMHgwMikKKwkJdjRsMl9pbmZvKHNkLCAiVW5rbm93biByZXZpc2lvbiBkZXRlY3RlZC5cbiIpOworCisJLyogSW5pdGlhbGl6ZXMgVFZQNzAwMiB0byBpdHMgZGVmYXVsdCB2YWx1ZXMgKi8KKwllcnJvciA9IHR2cDcwMDJfd3JpdGVfaW5pdHRhYihzZCwgdHZwNzAwMl9pbml0X2RlZmF1bHQpOworCisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBmb3VuZF9lcnJvcjsKKworCS8qIFNldCBwb2xhcml0eSBpbmZvcm1hdGlvbiBhZnRlciByZWdpc3RlcnMgaGF2ZSBiZWVuIHNldCAqLworCXBvbGFyaXR5X2EgPSAweDIwIHwgZGV2aWNlLT5wZGF0YS0+aHNfcG9sYXJpdHkgPDwgNQorCQkJfCBkZXZpY2UtPnBkYXRhLT52c19wb2xhcml0eSA8PCAyOworCWVycm9yID0gdHZwNzAwMl93cml0ZShzZCwgVFZQNzAwMl9TWU5DX0NUTF8xLCBwb2xhcml0eV9hKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIGZvdW5kX2Vycm9yOworCisJcG9sYXJpdHlfYiA9IDB4MDEgIHwgZGV2aWNlLT5wZGF0YS0+ZmlkX3BvbGFyaXR5IDw8IDIKKwkJCXwgZGV2aWNlLT5wZGF0YS0+c29nX3BvbGFyaXR5IDw8IDEKKwkJCXwgZGV2aWNlLT5wZGF0YS0+Y2xrX3BvbGFyaXR5OworCWVycm9yID0gdHZwNzAwMl93cml0ZShzZCwgVFZQNzAwMl9NSVNDX0NUTF8zLCBwb2xhcml0eV9iKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIGZvdW5kX2Vycm9yOworCisJLyogU2V0IHJlZ2lzdGVycyBhY2NvcmRpbmcgdG8gZGVmYXVsdCB2aWRlbyBtb2RlICovCisJcHJlc2V0LnByZXNldCA9IGRldmljZS0+Y3VycmVudF9wcmVzZXQtPnByZXNldDsKKwllcnJvciA9IHR2cDcwMDJfc19kdl9wcmVzZXQoc2QsICZwcmVzZXQpOworCitmb3VuZF9lcnJvcjoKKwlpZiAoZXJyb3IgPCAwKQorCQlrZnJlZShkZXZpY2UpOworCisJcmV0dXJuIGVycm9yOworfQorCisvKgorICogdHZwNzAwMl9yZW1vdmUgLSBSZW1vdmUgVFZQNzAwMiBkZXZpY2Ugc3VwcG9ydAorICogQGM6IHB0ciB0byBpMmNfY2xpZW50IHN0cnVjdAorICoKKyAqIFJlc2V0IHRoZSBUVlA3MDAyIGRldmljZQorICogUmV0dXJucyB6ZXJvLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjKQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CisJc3RydWN0IHR2cDcwMDIgKmRldmljZSA9IHRvX3R2cDcwMDIoc2QpOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiUmVtb3ZpbmcgdHZwNzAwMiBhZGFwdGVyIgorCQkJCSJvbiBhZGRyZXNzIDB4JXhcbiIsIGMtPmFkZHIpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKGRldmljZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIEkyQyBEZXZpY2UgSUQgdGFibGUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0dnA3MDAyX2lkW10gPSB7CisJeyAidHZwNzAwMiIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdHZwNzAwMl9pZCk7CisKKy8qIEkyQyBkcml2ZXIgZGF0YSAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHR2cDcwMDJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9IFRWUDcwMDJfTU9EVUxFX05BTUUsCisJfSwKKwkucHJvYmUgPSB0dnA3MDAyX3Byb2JlLAorCS5yZW1vdmUgPSB0dnA3MDAyX3JlbW92ZSwKKwkuaWRfdGFibGUgPSB0dnA3MDAyX2lkLAorfTsKKworLyoKKyAqIHR2cDcwMDJfaW5pdCAtIEluaXRpYWxpemUgZHJpdmVyIHZpYSBJMkMgaW50ZXJmYWNlCisgKgorICogUmVnaXN0ZXIgdGhlIFRWUDcwMDIgZHJpdmVyLgorICogUmV0dXJuIDAgb24gc3VjY2VzcyBvciBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHR2cDcwMDJfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdHZwNzAwMl9kcml2ZXIpOworfQorCisvKgorICogdHZwNzAwMl9leGl0IC0gUmVtb3ZlIGRyaXZlciB2aWEgSTJDIGludGVyZmFjZQorICoKKyAqIFVucmVnaXN0ZXIgdGhlIFRWUDcwMDIgZHJpdmVyLgorICogUmV0dXJucyBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgdHZwNzAwMl9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJnR2cDcwMDJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodHZwNzAwMl9pbml0KTsKK21vZHVsZV9leGl0KHR2cDcwMDJfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDcwMDJfcmVnLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDcwMDJfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUzNGNhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNzAwMl9yZWcuaApAQCAtMCwwICsxLDE1MCBAQAorLyogVGV4YXMgSW5zdHJ1bWVudHMgVHJpcGxlIDgtLzEwLUJJVCAxNjUtLzExMC1NU1BTIFZpZGVvIGFuZCBHcmFwaGljcworICogRGlnaXRpemVyIHdpdGggSG9yaXpvbnRhbCBQTEwgcmVnaXN0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICogQXV0aG9yOiBTYW50aWFnbyBOdW5lei1Db3JyYWxlcyA8c2FudGlhZ28ubnVuZXpAcmlkZ2VydW4uY29tPgorICoKKyAqIFRoaXMgY29kZSBpcyBwYXJ0aWFsbHkgYmFzZWQgdXBvbiB0aGUgVFZQNTE1MCBkcml2ZXIKKyAqIHdyaXR0ZW4gYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIChtY2hlaGFiQGluZnJhZGVhZC5vcmcpLAorICogdGhlIFRWUDUxNHggZHJpdmVyIHdyaXR0ZW4gYnkgVmFpYmhhdiBIaXJlbWF0aCA8aHZhaWJoYXZAdGkuY29tPgorICogYW5kIHRoZSBUVlA3MDAyIGRyaXZlciBpbiB0aGUgVEkgTFNQIDIuMTAuMDAuMTQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiBOYW1pbmcgY29udmVudGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEZEQks6ICBGZWVkYmFjaworICogRElWOiAgIERpdmlkZXIKKyAqIENUTDogICBDb250cm9sCisgKiBTRUw6ICAgU2VsZWN0CisgKiBJTjogICAgSW5wdXQKKyAqIE9VVDogICBPdXRwdXQKKyAqIFI6ICAgICBSZWQKKyAqIEc6ICAgICBHcmVlbgorICogQjogICAgIEJsdWUKKyAqIE9GRjogICBPZmZzZXQKKyAqIFRIUlM6ICBUaHJlc2hvbGQKKyAqIERHVEw6ICBEaWdpdGFsCisgKiBMVkw6ICAgTGV2ZWwKKyAqIFBXUjogICBQb3dlcgorICogTVZJUzogIE1hY3JvdmlzaW9uCisgKiBXOiAgICAgV2lkdGgKKyAqIEg6ICAgICBIZWlnaHQKKyAqIEFMR046ICBBbGlnbm1lbnQKKyAqIENMSzogICBDbG9ja3MKKyAqIFRPTDogICBUb2xlcmFuY2UKKyAqIEJXVEg6ICBCYW5kd2lkdGgKKyAqIENPRUY6ICBDb2VmZmljaWVudAorICogU1RBVDogIFN0YXR1cworICogQVVUTzogIEF1dG9tYXRpYworICogRkxEOiAgIEZpZWxkCisgKiBMOgkgIExpbmUKKyAqLworCisjZGVmaW5lIFRWUDcwMDJfQ0hJUF9SRVYJCTB4MDAKKyNkZWZpbmUgVFZQNzAwMl9IUExMX0ZEQktfRElWX01TQlMJMHgwMQorI2RlZmluZSBUVlA3MDAyX0hQTExfRkRCS19ESVZfTFNCUwkweDAyCisjZGVmaW5lIFRWUDcwMDJfSFBMTF9DUlRMCQkweDAzCisjZGVmaW5lIFRWUDcwMDJfSFBMTF9QSEFTRV9TRUwJCTB4MDQKKyNkZWZpbmUgVFZQNzAwMl9DTEFNUF9TVEFSVAkJMHgwNQorI2RlZmluZSBUVlA3MDAyX0NMQU1QX1cJCQkweDA2CisjZGVmaW5lIFRWUDcwMDJfSFNZTkNfT1VUX1cJCTB4MDcKKyNkZWZpbmUgVFZQNzAwMl9CX0ZJTkVfR0FJTgkJMHgwOAorI2RlZmluZSBUVlA3MDAyX0dfRklORV9HQUlOCQkweDA5CisjZGVmaW5lIFRWUDcwMDJfUl9GSU5FX0dBSU4JCTB4MGEKKyNkZWZpbmUgVFZQNzAwMl9CX0ZJTkVfT0ZGX01TQlMJCTB4MGIKKyNkZWZpbmUgVFZQNzAwMl9HX0ZJTkVfT0ZGX01TQlMgICAgICAgICAweDBjCisjZGVmaW5lIFRWUDcwMDJfUl9GSU5FX09GRl9NU0JTICAgICAgICAgMHgwZAorI2RlZmluZSBUVlA3MDAyX1NZTkNfQ1RMXzEJCTB4MGUKKyNkZWZpbmUgVFZQNzAwMl9IUExMX0FORF9DTEFNUF9DVEwJMHgwZgorI2RlZmluZSBUVlA3MDAyX1NZTkNfT05fR19USFJTCQkweDEwCisjZGVmaW5lIFRWUDcwMDJfU1lOQ19TRVBBUkFUT1JfVEhSUwkweDExCisjZGVmaW5lIFRWUDcwMDJfSFBMTF9QUkVfQ09BU1QJCTB4MTIKKyNkZWZpbmUgVFZQNzAwMl9IUExMX1BPU1RfQ09BU1QJCTB4MTMKKyNkZWZpbmUgVFZQNzAwMl9TWU5DX0RFVEVDVF9TVEFUCTB4MTQKKyNkZWZpbmUgVFZQNzAwMl9PVVRfRk9STUFUVEVSCQkweDE1CisjZGVmaW5lIFRWUDcwMDJfTUlTQ19DVExfMQkJMHgxNgorI2RlZmluZSBUVlA3MDAyX01JU0NfQ1RMXzIgICAgICAgICAgICAgIDB4MTcKKyNkZWZpbmUgVFZQNzAwMl9NSVNDX0NUTF8zICAgICAgICAgICAgICAweDE4CisjZGVmaW5lIFRWUDcwMDJfSU5fTVVYX1NFTF8xCQkweDE5CisjZGVmaW5lIFRWUDcwMDJfSU5fTVVYX1NFTF8yICAgICAgICAgICAgMHgxYQorI2RlZmluZSBUVlA3MDAyX0JfQU5EX0dfQ09BUlNFX0dBSU4JMHgxYgorI2RlZmluZSBUVlA3MDAyX1JfQ09BUlNFX0dBSU4JCTB4MWMKKyNkZWZpbmUgVFZQNzAwMl9GSU5FX09GRl9MU0JTCQkweDFkCisjZGVmaW5lIFRWUDcwMDJfQl9DT0FSU0VfT0ZGCQkweDFlCisjZGVmaW5lIFRWUDcwMDJfR19DT0FSU0VfT0ZGICAgICAgICAgICAgMHgxZgorI2RlZmluZSBUVlA3MDAyX1JfQ09BUlNFX09GRiAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgVFZQNzAwMl9IU09VVF9PVVRfU1RBUlQJCTB4MjEKKyNkZWZpbmUgVFZQNzAwMl9NSVNDX0NUTF80CQkweDIyCisjZGVmaW5lIFRWUDcwMDJfQl9ER1RMX0FMQ19PVVRfTFNCUwkweDIzCisjZGVmaW5lIFRWUDcwMDJfR19ER1RMX0FMQ19PVVRfTFNCUyAgICAgMHgyNAorI2RlZmluZSBUVlA3MDAyX1JfREdUTF9BTENfT1VUX0xTQlMgICAgIDB4MjUKKyNkZWZpbmUgVFZQNzAwMl9BVVRPX0xWTF9DVExfRU5BQkxFCTB4MjYKKyNkZWZpbmUgVFZQNzAwMl9ER1RMX0FMQ19PVVRfTVNCUwkweDI3CisjZGVmaW5lIFRWUDcwMDJfQVVUT19MVkxfQ1RMX0ZJTFRFUgkweDI4CisvKiBSZXNlcnZlZCAweDI5Ki8KKyNkZWZpbmUgVFZQNzAwMl9GSU5FX0NMQU1QX0NUTAkJMHgyYQorI2RlZmluZSBUVlA3MDAyX1BXUl9DVEwJCQkweDJiCisjZGVmaW5lIFRWUDcwMDJfQURDX1NFVFVQCQkweDJjCisjZGVmaW5lIFRWUDcwMDJfQ09BUlNFX0NMQU1QX0NUTAkweDJkCisjZGVmaW5lIFRWUDcwMDJfU09HX0NMQU1QCQkweDJlCisjZGVmaW5lIFRWUDcwMDJfUkdCX0NPQVJTRV9DTEFNUF9DVEwJMHgyZgorI2RlZmluZSBUVlA3MDAyX1NPR19DT0FSU0VfQ0xBTVBfQ1RMCTB4MzAKKyNkZWZpbmUgVFZQNzAwMl9BTENfUExBQ0VNRU5UCQkweDMxCisvKiBSZXNlcnZlZCAweDMyICovCisvKiBSZXNlcnZlZCAweDMzICovCisjZGVmaW5lIFRWUDcwMDJfTVZJU19TVFJJUFBFUl9XCQkweDM0CisjZGVmaW5lIFRWUDcwMDJfVlNZTkNfQUxHTgkJMHgzNQorI2RlZmluZSBUVlA3MDAyX1NZTkNfQllQQVNTCQkweDM2CisjZGVmaW5lIFRWUDcwMDJfTF9GUkFNRV9TVEFUX0xTQlMJMHgzNworI2RlZmluZSBUVlA3MDAyX0xfRlJBTUVfU1RBVF9NU0JTCTB4MzgKKyNkZWZpbmUgVFZQNzAwMl9DTEtfTF9TVEFUX0xTQlMJCTB4MzkKKyNkZWZpbmUgVFZQNzAwMl9DTEtfTF9TVEFUX01TQlMgICAgICAJMHgzYQorI2RlZmluZSBUVlA3MDAyX0hTWU5DX1cJCQkweDNiCisjZGVmaW5lIFRWUDcwMDJfVlNZTkNfVyAgICAgICAgICAgICAgICAgMHgzYworI2RlZmluZSBUVlA3MDAyX0xfTEVOR1RIX1RPTCAJCTB4M2QKKy8qIFJlc2VydmVkIDB4M2UgKi8KKyNkZWZpbmUgVFZQNzAwMl9WSURFT19CV1RIX0NUTAkJMHgzZgorI2RlZmluZSBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTFNCUwkweDQwCisjZGVmaW5lIFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9NU0JTICAgMHg0MQorI2RlZmluZSBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9MU0JTICAJMHg0MgorI2RlZmluZSBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9NU0JTICAgIDB4NDMKKyNkZWZpbmUgVFZQNzAwMl9WQkxLX0ZfMF9TVEFSVF9MX09GRgkweDQ0CisjZGVmaW5lIFRWUDcwMDJfVkJMS19GXzFfU1RBUlRfTF9PRkYgICAgMHg0NQorI2RlZmluZSBUVlA3MDAyX1ZCTEtfRl8wX0RVUkFUSU9OCTB4NDYKKyNkZWZpbmUgVFZQNzAwMl9WQkxLX0ZfMV9EVVJBVElPTiAgICAgICAweDQ3CisjZGVmaW5lIFRWUDcwMDJfRkJJVF9GXzBfU1RBUlRfTF9PRkYJMHg0OAorI2RlZmluZSBUVlA3MDAyX0ZCSVRfRl8xX1NUQVJUX0xfT0ZGICAgIDB4NDkKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfWV9HX0NPRUZfTFNCUwkweDRhCisjZGVmaW5lIFRWUDcwMDJfWVVWX1lfR19DT0VGX01TQlMgICAgICAgMHg0YgorI2RlZmluZSBUVlA3MDAyX1lVVl9ZX0JfQ09FRl9MU0JTICAgICAgIDB4NGMKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfWV9CX0NPRUZfTVNCUyAgICAgICAweDRkCisjZGVmaW5lIFRWUDcwMDJfWVVWX1lfUl9DT0VGX0xTQlMgICAgICAgMHg0ZQorI2RlZmluZSBUVlA3MDAyX1lVVl9ZX1JfQ09FRl9NU0JTICAgICAgIDB4NGYKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVV9HX0NPRUZfTFNCUyAgICAgICAweDUwCisjZGVmaW5lIFRWUDcwMDJfWVVWX1VfR19DT0VGX01TQlMgICAgICAgMHg1MQorI2RlZmluZSBUVlA3MDAyX1lVVl9VX0JfQ09FRl9MU0JTICAgICAgIDB4NTIKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVV9CX0NPRUZfTVNCUyAgICAgICAweDUzCisjZGVmaW5lIFRWUDcwMDJfWVVWX1VfUl9DT0VGX0xTQlMgICAgICAgMHg1NAorI2RlZmluZSBUVlA3MDAyX1lVVl9VX1JfQ09FRl9NU0JTICAgICAgIDB4NTUKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVl9HX0NPRUZfTFNCUyAgICAgICAweDU2CisjZGVmaW5lIFRWUDcwMDJfWVVWX1ZfR19DT0VGX01TQlMgICAgICAgMHg1NworI2RlZmluZSBUVlA3MDAyX1lVVl9WX0JfQ09FRl9MU0JTICAgICAgIDB4NTgKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVl9CX0NPRUZfTVNCUyAgICAgICAweDU5CisjZGVmaW5lIFRWUDcwMDJfWVVWX1ZfUl9DT0VGX0xTQlMgICAgICAgMHg1YQorI2RlZmluZSBUVlA3MDAyX1lVVl9WX1JfQ09FRl9NU0JTICAgICAgIDB4NWIKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMKaW5kZXggNWI4MDFhNi4uNzZiZTczMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jCkBAIC0yMzMsMTAgKzIzMywxMCBAQAogfTsKIAogc3RydWN0IHR3OTkxMF9wcml2IHsKLQlzdHJ1Y3QgdjRsMl9zdWJkZXYgICAgICAgICAgICAgICAgc3ViZGV2OwotCXN0cnVjdCB0dzk5MTBfdmlkZW9faW5mbyAgICAgICAqaW5mbzsKLQljb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwgKnNjYWxlOwotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb247CisJc3RydWN0IHY0bDJfc3ViZGV2CQlzdWJkZXY7CisJc3RydWN0IHR3OTkxMF92aWRlb19pbmZvCSppbmZvOworCWNvbnN0IHN0cnVjdCB0dzk5MTBfc2NhbGVfY3RybAkqc2NhbGU7CisJdTMyCQkJCXJldmlzaW9uOwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0dzk5MTBfc2NhbGVfY3RybCB0dzk5MTBfbnRzY19zY2FsZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKaW5kZXggMTA1NDU0Ni4uN2MxN2VjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKQEAgLTE0ODcsNyArMTQ4Nyw3IEBACiAJCXVzYnZpc2lvbi0+dmJpID0gdXNidmlzaW9uX3ZkZXZfaW5pdCh1c2J2aXNpb24sCiAJCQkJCQkgICAgICZ1c2J2aXNpb25fdmJpX3RlbXBsYXRlLAogCQkJCQkJICAgICAiVVNCVmlzaW9uIFZCSSIpOwotCQlpZiAodXNidmlzaW9uLT52ZGV2ID09IE5VTEwpIHsKKwkJaWYgKHVzYnZpc2lvbi0+dmJpID09IE5VTEwpIHsKIAkJCWdvdG8gZXJyX2V4aXQ7CiAJCX0KIAkJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSh1c2J2aXNpb24tPnZiaSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCmluZGV4IGVjOGVmOGMuLjNiMmU3ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYwpAQCAtMjMsOSArMjMsMTMgQEAKIAogI2luY2x1ZGUgInV2Y3ZpZGVvLmgiCiAKLSNkZWZpbmUgVVZDX0NUUkxfTkRBVEEJCTIKICNkZWZpbmUgVVZDX0NUUkxfREFUQV9DVVJSRU5UCTAKICNkZWZpbmUgVVZDX0NUUkxfREFUQV9CQUNLVVAJMQorI2RlZmluZSBVVkNfQ1RSTF9EQVRBX01JTgkyCisjZGVmaW5lIFVWQ19DVFJMX0RBVEFfTUFYCTMKKyNkZWZpbmUgVVZDX0NUUkxfREFUQV9SRVMJNAorI2RlZmluZSBVVkNfQ1RSTF9EQVRBX0RFRgk1CisjZGVmaW5lIFVWQ19DVFJMX0RBVEFfTEFTVAk2CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ29udHJvbHMKQEAgLTc1NSw2ICs3NTksNDkgQEAKIAlyZXR1cm4gY3RybDsKIH0KIAorc3RhdGljIGludCB1dmNfY3RybF9wb3B1bGF0ZV9jYWNoZShzdHJ1Y3QgdXZjX3ZpZGVvX2NoYWluICpjaGFpbiwKKwlzdHJ1Y3QgdXZjX2NvbnRyb2wgKmN0cmwpCit7CisJaW50IHJldDsKKworCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9ERUYpIHsKKwkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoY2hhaW4tPmRldiwgVVZDX0dFVF9ERUYsIGN0cmwtPmVudGl0eS0+aWQsCisJCQkJICAgICBjaGFpbi0+ZGV2LT5pbnRmbnVtLCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKKwkJCQkgICAgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9ERUYpLAorCQkJCSAgICAgY3RybC0+aW5mby0+c2l6ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfTUlOKSB7CisJCXJldCA9IHV2Y19xdWVyeV9jdHJsKGNoYWluLT5kZXYsIFVWQ19HRVRfTUlOLCBjdHJsLT5lbnRpdHktPmlkLAorCQkJCSAgICAgY2hhaW4tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCisJCQkJICAgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfTUlOKSwKKwkJCQkgICAgIGN0cmwtPmluZm8tPnNpemUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9NQVgpIHsKKwkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoY2hhaW4tPmRldiwgVVZDX0dFVF9NQVgsIGN0cmwtPmVudGl0eS0+aWQsCisJCQkJICAgICBjaGFpbi0+ZGV2LT5pbnRmbnVtLCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKKwkJCQkgICAgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9NQVgpLAorCQkJCSAgICAgY3RybC0+aW5mby0+c2l6ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX1JFUykgeworCQlyZXQgPSB1dmNfcXVlcnlfY3RybChjaGFpbi0+ZGV2LCBVVkNfR0VUX1JFUywgY3RybC0+ZW50aXR5LT5pZCwKKwkJCQkgICAgIGNoYWluLT5kZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAorCQkJCSAgICAgdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX1JFUyksCisJCQkJICAgICBjdHJsLT5pbmZvLT5zaXplKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWN0cmwtPmNhY2hlZCA9IDE7CisJcmV0dXJuIDA7Cit9CisKIGludCB1dmNfcXVlcnlfdjRsMl9jdHJsKHN0cnVjdCB1dmNfdmlkZW9fY2hhaW4gKmNoYWluLAogCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqdjRsMl9jdHJsKQogewpAQCAtNzYyLDE3ICs4MDksMTIgQEAKIAlzdHJ1Y3QgdXZjX2NvbnRyb2xfbWFwcGluZyAqbWFwcGluZzsKIAlzdHJ1Y3QgdXZjX21lbnVfaW5mbyAqbWVudTsKIAl1bnNpZ25lZCBpbnQgaTsKLQlfX3U4ICpkYXRhOwogCWludCByZXQ7CiAKIAljdHJsID0gdXZjX2ZpbmRfY29udHJvbChjaGFpbiwgdjRsMl9jdHJsLT5pZCwgJm1hcHBpbmcpOwogCWlmIChjdHJsID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZGF0YSA9IGttYWxsb2MoY3RybC0+aW5mby0+c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRhdGEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAltZW1zZXQodjRsMl9jdHJsLCAwLCBzaXplb2YgKnY0bDJfY3RybCk7CiAJdjRsMl9jdHJsLT5pZCA9IG1hcHBpbmctPmlkOwogCXY0bDJfY3RybC0+dHlwZSA9IG1hcHBpbmctPnY0bDJfdHlwZTsKQEAgLTc4MiwxNCArODI0LDE1IEBACiAJaWYgKCEoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9TRVRfQ1VSKSkKIAkJdjRsMl9jdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFk7CiAKLQlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfREVGKSB7Ci0JCXJldCA9IHV2Y19xdWVyeV9jdHJsKGNoYWluLT5kZXYsIFVWQ19HRVRfREVGLCBjdHJsLT5lbnRpdHktPmlkLAotCQkJCSAgICAgY2hhaW4tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCi0JCQkJICAgICBkYXRhLCBjdHJsLT5pbmZvLT5zaXplKTsKKwlpZiAoIWN0cmwtPmNhY2hlZCkgeworCQlyZXQgPSB1dmNfY3RybF9wb3B1bGF0ZV9jYWNoZShjaGFpbiwgY3RybCk7CiAJCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0JCXY0bDJfY3RybC0+ZGVmYXVsdF92YWx1ZSA9Ci0JCQltYXBwaW5nLT5nZXQobWFwcGluZywgVVZDX0dFVF9ERUYsIGRhdGEpOworCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfREVGKSB7CisJCXY0bDJfY3RybC0+ZGVmYXVsdF92YWx1ZSA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX0RFRiwKKwkJCQl1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfREVGKSk7CiAJfQogCiAJc3dpdGNoIChtYXBwaW5nLT52NGwyX3R5cGUpIHsKQEAgLTgwNiw1NiArODQ5LDM3IEBACiAJCQl9CiAJCX0KIAotCQlyZXQgPSAwOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIDA7CiAKIAljYXNlIFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU46CiAJCXY0bDJfY3RybC0+bWluaW11bSA9IDA7CiAJCXY0bDJfY3RybC0+bWF4aW11bSA9IDE7CiAJCXY0bDJfY3RybC0+c3RlcCA9IDE7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gMDsKIAogCWNhc2UgVjRMMl9DVFJMX1RZUEVfQlVUVE9OOgogCQl2NGwyX2N0cmwtPm1pbmltdW0gPSAwOwogCQl2NGwyX2N0cmwtPm1heGltdW0gPSAwOwogCQl2NGwyX2N0cmwtPnN0ZXAgPSAwOwotCQlyZXQgPSAwOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIDA7CiAKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CiAKLQlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfTUlOKSB7Ci0JCXJldCA9IHV2Y19xdWVyeV9jdHJsKGNoYWluLT5kZXYsIFVWQ19HRVRfTUlOLCBjdHJsLT5lbnRpdHktPmlkLAotCQkJCSAgICAgY2hhaW4tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCi0JCQkJICAgICBkYXRhLCBjdHJsLT5pbmZvLT5zaXplKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQkJdjRsMl9jdHJsLT5taW5pbXVtID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfTUlOLCBkYXRhKTsKLQl9Ci0JaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX01BWCkgewotCQlyZXQgPSB1dmNfcXVlcnlfY3RybChjaGFpbi0+ZGV2LCBVVkNfR0VUX01BWCwgY3RybC0+ZW50aXR5LT5pZCwKLQkJCQkgICAgIGNoYWluLT5kZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAotCQkJCSAgICAgZGF0YSwgY3RybC0+aW5mby0+c2l6ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0JCXY0bDJfY3RybC0+bWF4aW11bSA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX01BWCwgZGF0YSk7Ci0JfQotCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9SRVMpIHsKLQkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoY2hhaW4tPmRldiwgVVZDX0dFVF9SRVMsIGN0cmwtPmVudGl0eS0+aWQsCi0JCQkJICAgICBjaGFpbi0+ZGV2LT5pbnRmbnVtLCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKLQkJCQkgICAgIGRhdGEsIGN0cmwtPmluZm8tPnNpemUpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCQl2NGwyX2N0cmwtPnN0ZXAgPSBtYXBwaW5nLT5nZXQobWFwcGluZywgVVZDX0dFVF9SRVMsIGRhdGEpOwotCX0KKwlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfTUlOKQorCQl2NGwyX2N0cmwtPm1pbmltdW0gPSBtYXBwaW5nLT5nZXQobWFwcGluZywgVVZDX0dFVF9NSU4sCisJCQkJICAgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfTUlOKSk7CiAKLQlyZXQgPSAwOwotb3V0OgotCWtmcmVlKGRhdGEpOwotCXJldHVybiByZXQ7CisJaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX01BWCkKKwkJdjRsMl9jdHJsLT5tYXhpbXVtID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfTUFYLAorCQkJCSAgICAgdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX01BWCkpOworCisJaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX1JFUykKKwkJdjRsMl9jdHJsLT5zdGVwID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfUkVTLAorCQkJCSAgdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX1JFUykpOworCisJcmV0dXJuIDA7CiB9CiAKIApAQCAtOTk3LDE5ICsxMDIxLDU3IEBACiB7CiAJc3RydWN0IHV2Y19jb250cm9sICpjdHJsOwogCXN0cnVjdCB1dmNfY29udHJvbF9tYXBwaW5nICptYXBwaW5nOwotCXMzMiB2YWx1ZSA9IHhjdHJsLT52YWx1ZTsKKwlzMzIgdmFsdWU7CisJdTMyIHN0ZXA7CisJczMyIG1pbjsKKwlzMzIgbWF4OwogCWludCByZXQ7CiAKIAljdHJsID0gdXZjX2ZpbmRfY29udHJvbChjaGFpbiwgeGN0cmwtPmlkLCAmbWFwcGluZyk7CiAJaWYgKGN0cmwgPT0gTlVMTCB8fCAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9TRVRfQ1VSKSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChtYXBwaW5nLT52NGwyX3R5cGUgPT0gVjRMMl9DVFJMX1RZUEVfTUVOVSkgewotCQlpZiAodmFsdWUgPCAwIHx8IHZhbHVlID49IG1hcHBpbmctPm1lbnVfY291bnQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJdmFsdWUgPSBtYXBwaW5nLT5tZW51X2luZm9bdmFsdWVdLnZhbHVlOworCS8qIENsYW1wIG91dCBvZiByYW5nZSB2YWx1ZXMuICovCisJc3dpdGNoIChtYXBwaW5nLT52NGwyX3R5cGUpIHsKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI6CisJCWlmICghY3RybC0+Y2FjaGVkKSB7CisJCQlyZXQgPSB1dmNfY3RybF9wb3B1bGF0ZV9jYWNoZShjaGFpbiwgY3RybCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJbWluID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfTUlOLAorCQkJCSAgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9NSU4pKTsKKwkJbWF4ID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfTUFYLAorCQkJCSAgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9NQVgpKTsKKwkJc3RlcCA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX1JFUywKKwkJCQkgICAgdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX1JFUykpOworCisJCXhjdHJsLT52YWx1ZSA9IG1pbiArICh4Y3RybC0+dmFsdWUgLSBtaW4gKyBzdGVwLzIpIC8gc3RlcCAqIHN0ZXA7CisJCXhjdHJsLT52YWx1ZSA9IGNsYW1wKHhjdHJsLT52YWx1ZSwgbWluLCBtYXgpOworCQl2YWx1ZSA9IHhjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU46CisJCXhjdHJsLT52YWx1ZSA9IGNsYW1wKHhjdHJsLT52YWx1ZSwgMCwgMSk7CisJCXZhbHVlID0geGN0cmwtPnZhbHVlOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DVFJMX1RZUEVfTUVOVToKKwkJaWYgKHhjdHJsLT52YWx1ZSA8IDAgfHwgeGN0cmwtPnZhbHVlID49IG1hcHBpbmctPm1lbnVfY291bnQpCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJdmFsdWUgPSBtYXBwaW5nLT5tZW51X2luZm9beGN0cmwtPnZhbHVlXS52YWx1ZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQl2YWx1ZSA9IHhjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CiAJfQogCisJLyogSWYgdGhlIG1hcHBpbmcgZG9lc24ndCBzcGFuIHRoZSB3aG9sZSBVVkMgY29udHJvbCwgdGhlIGN1cnJlbnQgdmFsdWUKKwkgKiBuZWVkcyB0byBiZSBsb2FkZWQgZnJvbSB0aGUgZGV2aWNlIHRvIHBlcmZvcm0gdGhlIHJlYWQtbW9kaWZ5LXdyaXRlCisJICogb3BlcmF0aW9uLgorCSAqLwogCWlmICghY3RybC0+bG9hZGVkICYmIChjdHJsLT5pbmZvLT5zaXplICogOCkgIT0gbWFwcGluZy0+c2l6ZSkgewogCQlpZiAoKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX0NVUikgPT0gMCkgewogCQkJbWVtc2V0KHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9DVVJSRU5UKSwKQEAgLTEwMjcsNiArMTA4OSw3IEBACiAJCWN0cmwtPmxvYWRlZCA9IDE7CiAJfQogCisJLyogQmFja3VwIHRoZSBjdXJyZW50IHZhbHVlIGluIGNhc2Ugd2UgbmVlZCB0byByb2xsYmFjayBsYXRlci4gKi8KIAlpZiAoIWN0cmwtPmRpcnR5KSB7CiAJCW1lbWNweSh1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfQkFDS1VQKSwKIAkJICAgICAgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9DVVJSRU5UKSwKQEAgLTEwODAsMTAgKzExNDMsOCBAQAogCX0KIAogCWlmICghZm91bmQpIHsKLQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLAotCQkJIkNvbnRyb2wgIiBVVkNfR1VJRF9GT1JNQVQgIi8ldSBub3QgZm91bmQuXG4iLAotCQkJVVZDX0dVSURfQVJHUyhlbnRpdHktPmV4dGVuc2lvbi5ndWlkRXh0ZW5zaW9uQ29kZSksCi0JCQl4Y3RybC0+c2VsZWN0b3IpOworCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJDb250cm9sICVwVWwvJXUgbm90IGZvdW5kLlxuIiwKKwkJCWVudGl0eS0+ZXh0ZW5zaW9uLmd1aWRFeHRlbnNpb25Db2RlLCB4Y3RybC0+c2VsZWN0b3IpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTExNTksOSArMTIyMCw5IEBACiAJCQkgICAgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfUkVTVE9SRSkgPT0gMCkKIAkJCQljb250aW51ZTsKIAotCQkJcHJpbnRrKEtFUk5fSU5GTyAicmVzdG9yaW5nIGNvbnRyb2wgIiBVVkNfR1VJRF9GT1JNQVQKLQkJCQkiLyV1LyV1XG4iLCBVVkNfR1VJRF9BUkdTKGN0cmwtPmluZm8tPmVudGl0eSksCi0JCQkJY3RybC0+aW5mby0+aW5kZXgsIGN0cmwtPmluZm8tPnNlbGVjdG9yKTsKKwkJCXByaW50ayhLRVJOX0lORk8gInJlc3RvcmluZyBjb250cm9sICVwVWwvJXUvJXVcbiIsCisJCQkJY3RybC0+aW5mby0+ZW50aXR5LCBjdHJsLT5pbmZvLT5pbmRleCwKKwkJCQljdHJsLT5pbmZvLT5zZWxlY3Rvcik7CiAJCQljdHJsLT5kaXJ0eSA9IDE7CiAJCX0KIApAQCAtMTIxNSw0NyArMTI3Niw0MyBAQAogCQlyZXQgPSB1dmNfcXVlcnlfY3RybChkZXYsIFVWQ19HRVRfTEVOLCBjdHJsLT5lbnRpdHktPmlkLAogCQkJZGV2LT5pbnRmbnVtLCBpbmZvLT5zZWxlY3RvciwgKF9fdTggKikmc2l6ZSwgMik7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJHRVRfTEVOIGZhaWxlZCBvbiAiCi0JCQkJImNvbnRyb2wgIiBVVkNfR1VJRF9GT1JNQVQgIi8ldSAoJWQpLlxuIiwKLQkJCQlVVkNfR1VJRF9BUkdTKGluZm8tPmVudGl0eSksIGluZm8tPnNlbGVjdG9yLAotCQkJCXJldCk7CisJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsCisJCQkJIkdFVF9MRU4gZmFpbGVkIG9uIGNvbnRyb2wgJXBVbC8ldSAoJWQpLlxuIiwKKwkJCQlpbmZvLT5lbnRpdHksIGluZm8tPnNlbGVjdG9yLCByZXQpOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJaWYgKGluZm8tPnNpemUgIT0gbGUxNl90b19jcHUoc2l6ZSkpIHsKLQkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkNvbnRyb2wgIiBVVkNfR1VJRF9GT1JNQVQKLQkJCQkiLyV1IHNpemUgZG9lc24ndCBtYXRjaCB1c2VyIHN1cHBsaWVkICIKLQkJCQkidmFsdWUuXG4iLCBVVkNfR1VJRF9BUkdTKGluZm8tPmVudGl0eSksCi0JCQkJaW5mby0+c2VsZWN0b3IpOworCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiQ29udHJvbCAlcFVsLyV1IHNpemUgIgorCQkJCSJkb2Vzbid0IG1hdGNoIHVzZXIgc3VwcGxpZWQgdmFsdWUuXG4iLAorCQkJCWluZm8tPmVudGl0eSwgaW5mby0+c2VsZWN0b3IpOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoZGV2LCBVVkNfR0VUX0lORk8sIGN0cmwtPmVudGl0eS0+aWQsCiAJCQlkZXYtPmludGZudW0sIGluZm8tPnNlbGVjdG9yLCAmaW5mLCAxKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkdFVF9JTkZPIGZhaWxlZCBvbiAiCi0JCQkJImNvbnRyb2wgIiBVVkNfR1VJRF9GT1JNQVQgIi8ldSAoJWQpLlxuIiwKLQkJCQlVVkNfR1VJRF9BUkdTKGluZm8tPmVudGl0eSksIGluZm8tPnNlbGVjdG9yLAotCQkJCXJldCk7CisJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsCisJCQkJIkdFVF9JTkZPIGZhaWxlZCBvbiBjb250cm9sICVwVWwvJXUgKCVkKS5cbiIsCisJCQkJaW5mby0+ZW50aXR5LCBpbmZvLT5zZWxlY3RvciwgcmV0KTsKIAkJCXJldHVybjsKIAkJfQogCiAJCWZsYWdzID0gaW5mby0+ZmxhZ3M7CiAJCWlmICgoKGZsYWdzICYgVVZDX0NPTlRST0xfR0VUX0NVUikgJiYgIShpbmYgJiAoMSA8PCAwKSkpIHx8CiAJCSAgICAoKGZsYWdzICYgVVZDX0NPTlRST0xfU0VUX0NVUikgJiYgIShpbmYgJiAoMSA8PCAxKSkpKSB7Ci0JCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJDb250cm9sICIKLQkJCQlVVkNfR1VJRF9GT1JNQVQgIi8ldSBmbGFncyBkb24ndCBtYXRjaCAiCi0JCQkJInN1cHBvcnRlZCBvcGVyYXRpb25zLlxuIiwKLQkJCQlVVkNfR1VJRF9BUkdTKGluZm8tPmVudGl0eSksIGluZm8tPnNlbGVjdG9yKTsKKwkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkNvbnRyb2wgJXBVbC8ldSBmbGFncyAiCisJCQkJImRvbid0IG1hdGNoIHN1cHBvcnRlZCBvcGVyYXRpb25zLlxuIiwKKwkJCQlpbmZvLT5lbnRpdHksIGluZm8tPnNlbGVjdG9yKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAogCWN0cmwtPmluZm8gPSBpbmZvOwotCWN0cmwtPmRhdGEgPSBrbWFsbG9jKGN0cmwtPmluZm8tPnNpemUgKiBVVkNfQ1RSTF9OREFUQSwgR0ZQX0tFUk5FTCk7Ci0JdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiQWRkZWQgY29udHJvbCAiIFVWQ19HVUlEX0ZPUk1BVCAiLyV1ICIKLQkJInRvIGRldmljZSAlcyBlbnRpdHkgJXVcbiIsIFVWQ19HVUlEX0FSR1MoY3RybC0+aW5mby0+ZW50aXR5KSwKLQkJY3RybC0+aW5mby0+c2VsZWN0b3IsIGRldi0+dWRldi0+ZGV2cGF0aCwgZW50aXR5LT5pZCk7CisJY3RybC0+ZGF0YSA9IGttYWxsb2MoY3RybC0+aW5mby0+c2l6ZSAqIFVWQ19DVFJMX0RBVEFfTEFTVCwgR0ZQX0tFUk5FTCk7CisJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiQWRkZWQgY29udHJvbCAlcFVsLyV1IHRvIGRldmljZSAlcyAiCisJCSJlbnRpdHkgJXVcbiIsIGN0cmwtPmluZm8tPmVudGl0eSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCisJCWRldi0+dWRldi0+ZGV2cGF0aCwgZW50aXR5LT5pZCk7CiB9CiAKIC8qCkBAIC0xMjgxLDE3ICsxMzM4LDE2IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoY3RybC0+c2VsZWN0b3IgPT0gaW5mby0+c2VsZWN0b3IpIHsKLQkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkNvbnRyb2wgIgotCQkJCVVWQ19HVUlEX0ZPUk1BVCAiLyV1IGlzIGFscmVhZHkgZGVmaW5lZC5cbiIsCi0JCQkJVVZDX0dVSURfQVJHUyhpbmZvLT5lbnRpdHkpLCBpbmZvLT5zZWxlY3Rvcik7CisJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsCisJCQkJIkNvbnRyb2wgJXBVbC8ldSBpcyBhbHJlYWR5IGRlZmluZWQuXG4iLAorCQkJCWluZm8tPmVudGl0eSwgaW5mby0+c2VsZWN0b3IpOwogCQkJcmV0ID0gLUVFWElTVDsKIAkJCWdvdG8gZW5kOwogCQl9CiAJCWlmIChjdHJsLT5pbmRleCA9PSBpbmZvLT5pbmRleCkgewotCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiQ29udHJvbCAiCi0JCQkJVVZDX0dVSURfRk9STUFUICIvJXUgd291bGQgb3ZlcndyaXRlIGluZGV4ICIKLQkJCQkiJWQuXG4iLCBVVkNfR1VJRF9BUkdTKGluZm8tPmVudGl0eSksCi0JCQkJaW5mby0+c2VsZWN0b3IsIGluZm8tPmluZGV4KTsKKwkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwKKwkJCQkiQ29udHJvbCAlcFVsLyV1IHdvdWxkIG92ZXJ3cml0ZSBpbmRleCAlZC5cbiIsCisJCQkJaW5mby0+ZW50aXR5LCBpbmZvLT5zZWxlY3RvciwgaW5mby0+aW5kZXgpOwogCQkJcmV0ID0gLUVFWElTVDsKIAkJCWdvdG8gZW5kOwogCQl9CkBAIC0xMzMyLDEwICsxMzg4LDkgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChpbmZvLT5zaXplICogOCA8IG1hcHBpbmctPnNpemUgKyBtYXBwaW5nLT5vZmZzZXQpIHsKLQkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIk1hcHBpbmcgJyVzJyB3b3VsZCAiCi0JCQkJIm92ZXJmbG93IGNvbnRyb2wgIiBVVkNfR1VJRF9GT1JNQVQgIi8ldVxuIiwKLQkJCQltYXBwaW5nLT5uYW1lLCBVVkNfR1VJRF9BUkdTKGluZm8tPmVudGl0eSksCi0JCQkJaW5mby0+c2VsZWN0b3IpOworCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLAorCQkJCSJNYXBwaW5nICclcycgd291bGQgb3ZlcmZsb3cgY29udHJvbCAlcFVsLyV1XG4iLAorCQkJCW1hcHBpbmctPm5hbWUsIGluZm8tPmVudGl0eSwgaW5mby0+c2VsZWN0b3IpOwogCQkJcmV0ID0gLUVPVkVSRkxPVzsKIAkJCWdvdG8gZW5kOwogCQl9CkBAIC0xMzU0LDkgKzE0MDksOSBAQAogCiAJCW1hcHBpbmctPmN0cmwgPSBpbmZvOwogCQlsaXN0X2FkZF90YWlsKCZtYXBwaW5nLT5saXN0LCAmaW5mby0+bWFwcGluZ3MpOwotCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJBZGRpbmcgbWFwcGluZyAlcyB0byBjb250cm9sICIKLQkJCVVWQ19HVUlEX0ZPUk1BVCAiLyV1LlxuIiwgbWFwcGluZy0+bmFtZSwKLQkJCVVWQ19HVUlEX0FSR1MoaW5mby0+ZW50aXR5KSwgaW5mby0+c2VsZWN0b3IpOworCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsCisJCQkiQWRkaW5nIG1hcHBpbmcgJXMgdG8gY29udHJvbCAlcFVsLyV1LlxuIiwKKwkJCW1hcHBpbmctPm5hbWUsIGluZm8tPmVudGl0eSwgaW5mby0+c2VsZWN0b3IpOwogCiAJCXJldCA9IDA7CiAJCWJyZWFrOwpAQCAtMTM3OCw2ICsxNDMzLDcgQEAKIAkJc3RydWN0IHVzYl9kZXZpY2VfaWQgaWQ7CiAJCXU4IGluZGV4OwogCX0gYmxhY2tsaXN0W10gPSB7CisJCXsgeyBVU0JfREVWSUNFKDB4MTNkMywgMHg1MDliKSB9LCA5IH0sIC8qIEdhaW4gKi8KIAkJeyB7IFVTQl9ERVZJQ0UoMHgxYzRmLCAweDMwMDApIH0sIDYgfSwgLyogV0IgVGVtcGVyYXR1cmUgKi8KIAkJeyB7IFVTQl9ERVZJQ0UoMHg1OTg2LCAweDAyNDEpIH0sIDIgfSwgLyogSHVlICovCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYwppbmRleCAzOTFjY2NjLi5hODE0ODIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCkBAIC00Myw4ICs0Myw5IEBACiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkidjAuMS4wIgogI2VuZGlmCiAKK3Vuc2lnbmVkIGludCB1dmNfY2xvY2tfcGFyYW0gPSBDTE9DS19NT05PVE9OSUM7CiB1bnNpZ25lZCBpbnQgdXZjX25vX2Ryb3BfcGFyYW07Ci1zdGF0aWMgdW5zaWduZWQgaW50IHV2Y19xdWlya3NfcGFyYW07CitzdGF0aWMgdW5zaWduZWQgaW50IHV2Y19xdWlya3NfcGFyYW0gPSAtMTsKIHVuc2lnbmVkIGludCB1dmNfdHJhY2VfcGFyYW07CiB1bnNpZ25lZCBpbnQgdXZjX3RpbWVvdXRfcGFyYW0gPSBVVkNfQ1RSTF9TVFJFQU1JTkdfVElNRU9VVDsKIApAQCAtNTksNiArNjAsMTEgQEAKIAkJLmZjYwkJPSBWNEwyX1BJWF9GTVRfWVVZViwKIAl9LAogCXsKKwkJLm5hbWUJCT0gIllVViA0OjI6MiAoWVVZVikiLAorCQkuZ3VpZAkJPSBVVkNfR1VJRF9GT1JNQVRfWVVZMl9JU0lHSFQsCisJCS5mY2MJCT0gVjRMMl9QSVhfRk1UX1lVWVYsCisJfSwKKwl7CiAJCS5uYW1lCQk9ICJZVVYgNDoyOjAgKE5WMTIpIiwKIAkJLmd1aWQJCT0gVVZDX0dVSURfRk9STUFUX05WMTIsCiAJCS5mY2MJCT0gVjRMMl9QSVhfRk1UX05WMTIsCkBAIC0zMDksMTEgKzMxNSwxMCBAQAogCQkJCXNpemVvZiBmb3JtYXQtPm5hbWUpOwogCQkJZm9ybWF0LT5mY2MgPSBmbXRkZXNjLT5mY2M7CiAJCX0gZWxzZSB7Ci0JCQl1dmNfcHJpbnRrKEtFUk5fSU5GTywgIlVua25vd24gdmlkZW8gZm9ybWF0ICIKLQkJCQlVVkNfR1VJRF9GT1JNQVQgIlxuIiwKLQkJCQlVVkNfR1VJRF9BUkdTKCZidWZmZXJbNV0pKTsKLQkJCXNucHJpbnRmKGZvcm1hdC0+bmFtZSwgc2l6ZW9mIGZvcm1hdC0+bmFtZSwKLQkJCQlVVkNfR1VJRF9GT1JNQVQsIFVWQ19HVUlEX0FSR1MoJmJ1ZmZlcls1XSkpOworCQkJdXZjX3ByaW50ayhLRVJOX0lORk8sICJVbmtub3duIHZpZGVvIGZvcm1hdCAlcFVsXG4iLAorCQkJCSZidWZmZXJbNV0pOworCQkJc25wcmludGYoZm9ybWF0LT5uYW1lLCBzaXplb2YoZm9ybWF0LT5uYW1lKSwgIiVwVWxcbiIsCisJCQkJJmJ1ZmZlcls1XSk7CiAJCQlmb3JtYXQtPmZjYyA9IDA7CiAJCX0KIApAQCAtMTc1MCw3ICsxNzU1LDggQEAKIAlkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKIAlkZXYtPmludGYgPSB1c2JfZ2V0X2ludGYoaW50Zik7CiAJZGV2LT5pbnRmbnVtID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQlkZXYtPnF1aXJrcyA9IGlkLT5kcml2ZXJfaW5mbyB8IHV2Y19xdWlya3NfcGFyYW07CisJZGV2LT5xdWlya3MgPSAodXZjX3F1aXJrc19wYXJhbSA9PSAtMSkKKwkJICAgID8gaWQtPmRyaXZlcl9pbmZvIDogdXZjX3F1aXJrc19wYXJhbTsKIAogCWlmICh1ZGV2LT5wcm9kdWN0ICE9IE5VTEwpCiAJCXN0cmxjcHkoZGV2LT5uYW1lLCB1ZGV2LT5wcm9kdWN0LCBzaXplb2YgZGV2LT5uYW1lKTsKQEAgLTE3NzMsOSArMTc3OSw5IEBACiAJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAogCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwogCi0JaWYgKHV2Y19xdWlya3NfcGFyYW0gIT0gMCkgewotCQl1dmNfcHJpbnRrKEtFUk5fSU5GTywgIkZvcmNpbmcgZGV2aWNlIHF1aXJrcyAweCV4IGJ5IG1vZHVsZSAiCi0JCQkicGFyYW1ldGVyIGZvciB0ZXN0aW5nIHB1cnBvc2UuXG4iLCB1dmNfcXVpcmtzX3BhcmFtKTsKKwlpZiAoZGV2LT5xdWlya3MgIT0gaWQtPmRyaXZlcl9pbmZvKSB7CisJCXV2Y19wcmludGsoS0VSTl9JTkZPLCAiRm9yY2luZyBkZXZpY2UgcXVpcmtzIHRvIDB4JXggYnkgbW9kdWxlICIKKwkJCSJwYXJhbWV0ZXIgZm9yIHRlc3RpbmcgcHVycG9zZS5cbiIsIGRldi0+cXVpcmtzKTsKIAkJdXZjX3ByaW50ayhLRVJOX0lORk8sICJQbGVhc2UgcmVwb3J0IHJlcXVpcmVkIHF1aXJrcyB0byB0aGUgIgogCQkJImxpbnV4LXV2Yy1kZXZlbCBtYWlsaW5nIGxpc3QuXG4iKTsKIAl9CkBAIC0xODkyLDYgKzE4OTgsNDUgQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBNb2R1bGUgcGFyYW1ldGVycworICovCisKK3N0YXRpYyBpbnQgdXZjX2Nsb2NrX3BhcmFtX2dldChjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWlmICh1dmNfY2xvY2tfcGFyYW0gPT0gQ0xPQ0tfTU9OT1RPTklDKQorCQlyZXR1cm4gc3ByaW50ZihidWZmZXIsICJDTE9DS19NT05PVE9OSUMiKTsKKwllbHNlCisJCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIkNMT0NLX1JFQUxUSU1FIik7Cit9CisKK3N0YXRpYyBpbnQgdXZjX2Nsb2NrX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWlmIChzdHJuY2FzZWNtcCh2YWwsICJjbG9ja18iLCBzdHJsZW4oImNsb2NrXyIpKSA9PSAwKQorCQl2YWwgKz0gc3RybGVuKCJjbG9ja18iKTsKKworCWlmIChzdHJjYXNlY21wKHZhbCwgIm1vbm90b25pYyIpID09IDApCisJCXV2Y19jbG9ja19wYXJhbSA9IENMT0NLX01PTk9UT05JQzsKKwllbHNlIGlmIChzdHJjYXNlY21wKHZhbCwgInJlYWx0aW1lIikgPT0gMCkKKwkJdXZjX2Nsb2NrX3BhcmFtID0gQ0xPQ0tfUkVBTFRJTUU7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCittb2R1bGVfcGFyYW1fY2FsbChjbG9jaywgdXZjX2Nsb2NrX3BhcmFtX3NldCwgdXZjX2Nsb2NrX3BhcmFtX2dldCwKKwkJICAmdXZjX2Nsb2NrX3BhcmFtLCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhjbG9jaywgIlZpZGVvIGJ1ZmZlcnMgdGltZXN0YW1wIGNsb2NrIik7Cittb2R1bGVfcGFyYW1fbmFtZWQobm9kcm9wLCB1dmNfbm9fZHJvcF9wYXJhbSwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0Mobm9kcm9wLCAiRG9uJ3QgZHJvcCBpbmNvbXBsZXRlIGZyYW1lcyIpOworbW9kdWxlX3BhcmFtX25hbWVkKHF1aXJrcywgdXZjX3F1aXJrc19wYXJhbSwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MocXVpcmtzLCAiRm9yY2VkIGRldmljZSBxdWlya3MiKTsKK21vZHVsZV9wYXJhbV9uYW1lZCh0cmFjZSwgdXZjX3RyYWNlX3BhcmFtLCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyh0cmFjZSwgIlRyYWNlIGxldmVsIGJpdG1hc2siKTsKK21vZHVsZV9wYXJhbV9uYW1lZCh0aW1lb3V0LCB1dmNfdGltZW91dF9wYXJhbSwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0ModGltZW91dCwgIlN0cmVhbWluZyBjb250cm9sIHJlcXVlc3RzIHRpbWVvdXQiKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBEcml2ZXIgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAKICAqLwogCkBAIC0yMTk3LDE1ICsyMjQyLDYgQEAKIG1vZHVsZV9pbml0KHV2Y19pbml0KTsKIG1vZHVsZV9leGl0KHV2Y19jbGVhbnVwKTsKIAotbW9kdWxlX3BhcmFtX25hbWVkKG5vZHJvcCwgdXZjX25vX2Ryb3BfcGFyYW0sIHVpbnQsIFNfSVJVR098U19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vZHJvcCwgIkRvbid0IGRyb3AgaW5jb21wbGV0ZSBmcmFtZXMiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChxdWlya3MsIHV2Y19xdWlya3NfcGFyYW0sIHVpbnQsIFNfSVJVR098U19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKHF1aXJrcywgIkZvcmNlZCBkZXZpY2UgcXVpcmtzIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQodHJhY2UsIHV2Y190cmFjZV9wYXJhbSwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0ModHJhY2UsICJUcmFjZSBsZXZlbCBiaXRtYXNrIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQodGltZW91dCwgdXZjX3RpbWVvdXRfcGFyYW0sIHVpbnQsIFNfSVJVR098U19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsICJTdHJlYW1pbmcgY29udHJvbCByZXF1ZXN0cyB0aW1lb3V0Iik7Ci0KIE1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3F1ZXVlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfcXVldWUuYwppbmRleCBlYTExODM5Li40YTkyNWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfcXVldWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfcXVldWUuYwpAQCAtNTAyLDcgKzUwMiw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPmlycWxvY2ssIGZsYWdzKTsKIAogCWJ1Zi0+YnVmLnNlcXVlbmNlID0gcXVldWUtPnNlcXVlbmNlKys7Ci0JZG9fZ2V0dGltZW9mZGF5KCZidWYtPmJ1Zi50aW1lc3RhbXApOwogCiAJd2FrZV91cCgmYnVmLT53YWl0KTsKIAlyZXR1cm4gbmV4dGJ1ZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCmluZGV4IDIzMjM5YTQuLjQzMTUyYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYwpAQCAtNTM5LDcgKzUzOSw3IEBACiAJCXhjdHJsLmlkID0gY3RybC0+aWQ7CiAJCXhjdHJsLnZhbHVlID0gY3RybC0+dmFsdWU7CiAKLQkJdXZjX2N0cmxfYmVnaW4oY2hhaW4pOworCQlyZXQgPSB1dmNfY3RybF9iZWdpbihjaGFpbik7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIApAQCAtNTQ5LDYgKzU0OSw4IEBACiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCXJldCA9IHV2Y19jdHJsX2NvbW1pdChjaGFpbik7CisJCWlmIChyZXQgPT0gMCkKKwkJCWN0cmwtPnZhbHVlID0geGN0cmwudmFsdWU7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYwppbmRleCA3ZGNmNTM0Li42YjA2NjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYwpAQCAtNDEwLDYgKzQxMCw4IEBACiAJICogd2hlbiB0aGUgRU9GIGJpdCBpcyBzZXQgdG8gZm9yY2Ugc3luY2hyb25pc2F0aW9uIG9uIHRoZSBuZXh0IHBhY2tldC4KIAkgKi8KIAlpZiAoYnVmLT5zdGF0ZSAhPSBVVkNfQlVGX1NUQVRFX0FDVElWRSkgeworCQlzdHJ1Y3QgdGltZXNwZWMgdHM7CisKIAkJaWYgKGZpZCA9PSBzdHJlYW0tPmxhc3RfZmlkKSB7CiAJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0ZSQU1FLCAiRHJvcHBpbmcgcGF5bG9hZCAob3V0IG9mICIKIAkJCQkic3luYykuXG4iKTsKQEAgLTQxOSw2ICs0MjEsMTQgQEAKIAkJCXJldHVybiAtRU5PREFUQTsKIAkJfQogCisJCWlmICh1dmNfY2xvY2tfcGFyYW0gPT0gQ0xPQ0tfTU9OT1RPTklDKQorCQkJa3RpbWVfZ2V0X3RzKCZ0cyk7CisJCWVsc2UKKwkJCWt0aW1lX2dldF9yZWFsX3RzKCZ0cyk7CisKKwkJYnVmLT5idWYudGltZXN0YW1wLnR2X3NlYyA9IHRzLnR2X3NlYzsKKwkJYnVmLT5idWYudGltZXN0YW1wLnR2X3VzZWMgPSB0cy50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQzsKKwogCQkvKiBUT0RPOiBIYW5kbGUgUFRTIGFuZCBTQ1IuICovCiAJCWJ1Zi0+c3RhdGUgPSBVVkNfQlVGX1NUQVRFX0FDVElWRTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaAppbmRleCAyMzM3NTg1Li4yYmJhMDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKQEAgLTExMyw2ICsxMTMsOSBAQAogI2RlZmluZSBVVkNfR1VJRF9GT1JNQVRfWVVZMiBcCiAJeyAnWScsICAnVScsICAnWScsICAnMicsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIFwKIAkgMHg4MCwgMHgwMCwgMHgwMCwgMHhhYSwgMHgwMCwgMHgzOCwgMHg5YiwgMHg3MX0KKyNkZWZpbmUgVVZDX0dVSURfRk9STUFUX1lVWTJfSVNJR0hUIFwKKwl7ICdZJywgICdVJywgICdZJywgICcyJywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgXAorCSAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDliLCAweDcxfQogI2RlZmluZSBVVkNfR1VJRF9GT1JNQVRfTlYxMiBcCiAJeyAnTicsICAnVicsICAnMScsICAnMicsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIFwKIAkgMHg4MCwgMHgwMCwgMHgwMCwgMHhhYSwgMHgwMCwgMHgzOCwgMHg5YiwgMHg3MX0KQEAgLTE0OSw3ICsxNTIsNyBAQAogI2RlZmluZSBVVkNfTUFYX1NUQVRVU19TSVpFCTE2CiAKICNkZWZpbmUgVVZDX0NUUkxfQ09OVFJPTF9USU1FT1VUCTMwMAotI2RlZmluZSBVVkNfQ1RSTF9TVFJFQU1JTkdfVElNRU9VVAkzMDAwCisjZGVmaW5lIFVWQ19DVFJMX1NUUkVBTUlOR19USU1FT1VUCTUwMDAKIAogLyogRGV2aWNlcyBxdWlya3MgKi8KICNkZWZpbmUgVVZDX1FVSVJLX1NUQVRVU19JTlRFUlZBTAkweDAwMDAwMDAxCkBAIC0yNDIsNyArMjQ1LDggQEAKIAkJCSAgIHV2Y19jb250cm9sX2luZm8uICovCiAJX191OCBkaXJ0eSA6IDEsCiAJICAgICBsb2FkZWQgOiAxLAotCSAgICAgbW9kaWZpZWQgOiAxOworCSAgICAgbW9kaWZpZWQgOiAxLAorCSAgICAgY2FjaGVkIDogMTsKIAogCV9fdTggKmRhdGE7CiB9OwpAQCAtNTMzLDYgKzUzNyw3IEBACiAjZGVmaW5lIFVWQ19XQVJOX01JTk1BWAkJMAogI2RlZmluZSBVVkNfV0FSTl9QUk9CRV9ERUYJMQogCitleHRlcm4gdW5zaWduZWQgaW50IHV2Y19jbG9ja19wYXJhbTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgdXZjX25vX2Ryb3BfcGFyYW07CiBleHRlcm4gdW5zaWduZWQgaW50IHV2Y190cmFjZV9wYXJhbTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgdXZjX3RpbWVvdXRfcGFyYW07CkBAIC01NTIsMTYgKzU1Nyw2IEBACiAjZGVmaW5lIHV2Y19wcmludGsobGV2ZWwsIG1zZy4uLikgXAogCXByaW50ayhsZXZlbCAidXZjdmlkZW86ICIgbXNnKQogCi0jZGVmaW5lIFVWQ19HVUlEX0ZPUk1BVCAiJTAyeCUwMnglMDJ4JTAyeC0lMDJ4JTAyeC0lMDJ4JTAyeC0lMDJ4JTAyeC0iIFwKLQkJCSIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngiCi0jZGVmaW5lIFVWQ19HVUlEX0FSR1MoZ3VpZCkgXAotCShndWlkKVszXSwgIChndWlkKVsyXSwgIChndWlkKVsxXSwgIChndWlkKVswXSwgXAotCShndWlkKVs1XSwgIChndWlkKVs0XSwgXAotCShndWlkKVs3XSwgIChndWlkKVs2XSwgXAotCShndWlkKVs4XSwgIChndWlkKVs5XSwgXAotCShndWlkKVsxMF0sIChndWlkKVsxMV0sIChndWlkKVsxMl0sIFwKLQkoZ3VpZClbMTNdLCAoZ3VpZClbMTRdLCAoZ3VpZClbMTVdCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbnRlcm5hbCBmdW5jdGlvbnMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKaW5kZXggYzQxNTBiZC4uZjc3Zjg0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKQEAgLTI4OCw3ICsyODgsNyBAQAogCiBzdGF0aWMgaW50IHB1dF92NGwyX3dpbmRvdzMyKHN0cnVjdCB2NGwyX3dpbmRvdyAqa3AsIHN0cnVjdCB2NGwyX3dpbmRvdzMyIF9fdXNlciAqdXApCiB7Ci0JaWYgKGNvcHlfdG9fdXNlcigmdXAtPncsICZrcC0+dywgc2l6ZW9mKHVwLT53KSkgfHwKKwlpZiAoY29weV90b191c2VyKCZ1cC0+dywgJmtwLT53LCBzaXplb2Yoa3AtPncpKSB8fAogCQlwdXRfdXNlcihrcC0+ZmllbGQsICZ1cC0+ZmllbGQpIHx8CiAJCXB1dF91c2VyKGtwLT5jaHJvbWFrZXksICZ1cC0+Y2hyb21ha2V5KSB8fAogCQlwdXRfdXNlcihrcC0+Y2xpcGNvdW50LCAmdXAtPmNsaXBjb3VudCkpCkBAIC00NzUsNiArNDc1LDkgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCXN3aXRjaCAoa3AtPm1lbW9yeSkgewogCWNhc2UgVjRMMl9NRU1PUllfTU1BUDoKKwkJaWYgKGdldF91c2VyKGtwLT5sZW5ndGgsICZ1cC0+bGVuZ3RoKSB8fAorCQkJZ2V0X3VzZXIoa3AtPm0ub2Zmc2V0LCAmdXAtPm0ub2Zmc2V0KSkKKwkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKIAljYXNlIFY0TDJfTUVNT1JZX1VTRVJQVFI6CiAJCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jCmluZGV4IGZhNzg1NTUuLmZjZDA0NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYwpAQCAtNDE4LDYgKzQxOCw4IEBACiAJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmI7CiAKIAl2YiA9IGt6YWxsb2Moc2l6ZStzaXplb2YoKm1lbSksR0ZQX0tFUk5FTCk7CisJaWYgKCF2YikKKwkJcmV0dXJuIHZiOwogCiAJbWVtID0gdmItPnByaXYgPSAoKGNoYXIgKil2Yikrc2l6ZTsKIAltZW0tPm1hZ2ljPU1BR0lDX1NHX01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMKaW5kZXggZDZlNmEyOC4uMTM2ZTA5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMKQEAgLTEzOCw2ICsxMzgsOCBAQAogCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiOwogCiAJdmIgPSBremFsbG9jKHNpemUrc2l6ZW9mKCptZW0pLEdGUF9LRVJORUwpOworCWlmICghdmIpCisJCXJldHVybiB2YjsKIAogCW1lbSA9IHZiLT5wcml2ID0gKChjaGFyICopdmIpK3NpemU7CiAJbWVtLT5tYWdpYz1NQUdJQ19WTUFMX01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKaW5kZXggMzc2MzJhMC4uY2RiZTcwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKQEAgLTEzNzEsNyArMTM3MSw3IEBACiAJLyogTm93IHRoYXQgZXZlcnl0aGluZyBpcyBmaW5lLCBsZXQncyBhZGQgaXQgdG8gZGV2aWNlIGxpc3QgKi8KIAlsaXN0X2FkZF90YWlsKCZkZXYtPnZpdmlfZGV2bGlzdCwgJnZpdmlfZGV2bGlzdCk7CiAKLQlpZiAodmlkZW9fbnIgPj0gMCkKKwlpZiAodmlkZW9fbnIgIT0gLTEpCiAJCXZpZGVvX25yKys7CiAKIAlkZXYtPnZmZCA9IHZmZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS9LY29uZmlnCmluZGV4IGVkYjAwMjkuLmE3ZTYxMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvS2NvbmZpZwpAQCAtMSw3ICsxLDExIEBACiBjb25maWcgVVNCX1pDMDMwMQotCXRyaXN0YXRlICJVU0IgWkMwMzAxW1BdIEltYWdlIFByb2Nlc3NvciBhbmQgQ29udHJvbCBDaGlwIHN1cHBvcnQiCisJdHJpc3RhdGUgIlVTQiBaQzAzMDFbUF0gd2ViY2FtIHN1cHBvcnQgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gVklERU9fVjRMMgorCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQgcGxlYXNlIHVzZSB0aGUgZ3NwY2EgemMzeHggbW9kdWxlCisJICBpbnN0ZWFkLgorCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFpDMDMwMSBvcgogCSAgWkMwMzAxUCBJbWFnZSBQcm9jZXNzb3JzIGFuZCBDb250cm9sIENoaXBzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuYwppbmRleCBmNmMyZmI0Li5lNmFkNGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMKQEAgLTExOTYsNyArMTE5Niw4IEBACiBzdGF0aWMgdm9pZCB6b3Jhbl9yZXN0YXJ0KHN0cnVjdCB6b3JhbiAqenIpCiB7CiAJLyogTm93IHRoZSBzdGF0X2NvbW0gYnVmZmVyIGlzIHJlYWR5IGZvciByZXN0YXJ0ICovCi0JaW50IHN0YXR1cyA9IDAsIG1vZGU7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CisJaW50IG1vZGU7CiAKIAlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7CiAJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIGdfaW5wdXRfc3RhdHVzLCAmc3RhdHVzKTsKQEAgLTEyMjgsNyArMTIyOSw3IEBACiAJICAgICAgIHUzMiAgICAgICAgICAgYXN0YXQsCiAJICAgICAgIHUzMiAgICAgICAgICAgc3RhdCkKIHsKLQlpbnQgaSwgajsKKwlpbnQgaTsKIAogCS8qIFRoaXMgaXMgSlBFRyBlcnJvciBoYW5kbGluZyBwYXJ0ICovCiAJaWYgKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUyAmJgpAQCAtMTI3OSw2ICsxMjgwLDcgQEAKIAkvKiBSZXBvcnQgZXJyb3IgKi8KIAlpZiAoenIzNjA2N19kZWJ1ZyA+IDEgJiYgenItPm51bV9lcnJvcnMgPD0gOCkgewogCQlsb25nIGZyYW1lOworCQlpbnQgajsKIAogCQlmcmFtZSA9IHpyLT5qcGdfcGVuZFt6ci0+anBnX2RtYV90YWlsICYgQlVaX01BU0tfRlJBTUVdOwogCQlwcmludGsoS0VSTl9FUlIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCmluZGV4IDJkZGZmZWQuLmVjNDEzMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYwpAQCAtMzI0LDcgKzMyNCw3IEBACiAJCS8qIEFsbG9jYXRlIGZyYWdtZW50IHRhYmxlIGZvciB0aGlzIGJ1ZmZlciAqLwogCiAJCW1lbSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCQlpZiAobWVtID09IDApIHsKKwkJaWYgKCFtZW0pIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgogCQkJCSIlczogJXMgLSBnZXRfemVyb2VkX3BhZ2UgKGZyYWdfdGFiKSBmYWlsZWQgZm9yIGJ1ZmZlciAlZFxuIiwKQEAgLTE0NDQsNyArMTQ0NCw3IEBACiAJfQogCiAJaWYgKG5vcm0gPT0gVjRMMl9TVERfQUxMKSB7Ci0JCWludCBzdGF0dXMgPSAwOworCQl1bnNpZ25lZCBpbnQgc3RhdHVzID0gMDsKIAkJdjRsMl9zdGRfaWQgc3RkID0gMDsKIAogCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBxdWVyeXN0ZCwgJnN0ZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jCmluZGV4IGYwZWFlODMuLjNkNGJhYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jCkBAIC03OCw2ICs3OCw3IEBACiAjZGVmaW5lIE1FVEhPRDAgMAogI2RlZmluZSBNRVRIT0QxIDEKICNkZWZpbmUgTUVUSE9EMiAyCisjZGVmaW5lIE1FVEhPRDMgMwogCiAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCkBAIC0xMTQsNyArMTE1LDcgQEAKIAl7VVNCX0RFVklDRSgweDA2ZDYsIDB4MDAzYiksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDAgfSwKIAl7VVNCX0RFVklDRSgweDBhMTcsIDB4MDA0ZSksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDIgfSwKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA1ZCksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDIgfSwKLQl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MjEwMiksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDIgfSwKKwl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MjEwMiksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDMgfSwKIAl7VVNCX0RFVklDRSgweDA2ZDYsIDB4MDAzZCksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDAgfSwKIAl7fQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtMzAyLDcgKzMwMyw3IEBACiB9OwogCiAvKiBpbml0IHRhYmxlICovCi1zdGF0aWMgbWVzc2FnZSAqaW5pdFszXSA9IHsgbTAsIG0xLCBtMiB9Oworc3RhdGljIG1lc3NhZ2UgKmluaXRbNF0gPSB7IG0wLCBtMSwgbTIsIG0yIH07CiAKIAogLyogSlBFRyBzdGF0aWMgZGF0YSBpbiBoZWFkZXIgKEh1ZmZtYW4gdGFibGUsIGV0YykgKi8KQEAgLTk2Nyw2ICs5NjgsMjIgQEAKIAltMGQxWzBdID0gbW9kZTsKIAltMVsyXS52YWx1ZSA9IDB4ZjAwMCArIG1vZGU7CiAJbTJbMV0udmFsdWUgPSAweGYwMDAgKyBtb2RlOworCisJLyogc3BlY2lhbCBjYXNlIGZvciBNRVRIT0QzLCB0aGUgbW9kZXMgYXJlIGRpZmZlcmVudCAqLworCWlmIChjYW0tPm1ldGhvZCA9PSBNRVRIT0QzKSB7CisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIDE6CisJCQltMlsxXS52YWx1ZSA9IDB4ZjAwMCArIDQ7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJbTJbMV0udmFsdWUgPSAweGYwMDAgKyAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltMlsxXS52YWx1ZSA9IDB4ZjAwMCArIDE7CisJCQlicmVhazsKKwkJfQorCX0KKwogCWhlYWRlcjJbNDM3XSA9IGNhbS0+aGVpZ2h0IC8gMjU2OwogCWhlYWRlcjJbNDM4XSA9IGNhbS0+aGVpZ2h0ICUgMjU2OwogCWhlYWRlcjJbNDM5XSA9IGNhbS0+d2lkdGggLyAyNTY7CkBAIC0xNTgyLDYgKzE1OTksMjIgQEAKIAltMGQxWzBdID0gbW9kZTsKIAltMVsyXS52YWx1ZSA9IDB4ZjAwMCArIG1vZGU7CiAJbTJbMV0udmFsdWUgPSAweGYwMDAgKyBtb2RlOworCisJLyogc3BlY2lhbCBjYXNlIGZvciBNRVRIT0QzLCB0aGUgbW9kZXMgYXJlIGRpZmZlcmVudCAqLworCWlmIChjYW0tPm1ldGhvZCA9PSBNRVRIT0QzKSB7CisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIDE6CisJCQltMlsxXS52YWx1ZSA9IDB4ZjAwMCArIDQ7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJbTJbMV0udmFsdWUgPSAweGYwMDAgKyAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltMlsxXS52YWx1ZSA9IDB4ZjAwMCArIDE7CisJCQlicmVhazsKKwkJfQorCX0KKwogCWhlYWRlcjJbNDM3XSA9IGNhbS0+aGVpZ2h0IC8gMjU2OwogCWhlYWRlcjJbNDM4XSA9IGNhbS0+aGVpZ2h0ICUgMjU2OwogCWhlYWRlcjJbNDM5XSA9IGNhbS0+d2lkdGggLyAyNTY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCmluZGV4IGJkODNmYTAuLjk3MmI4NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCisrKyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jCkBAIC0xMjI2LDkgKzEyMjYsOCBAQAogCWJsa19xdWV1ZV9wcmVwX3JxKG1zYi0+cXVldWUsIG1zcHJvX2Jsb2NrX3ByZXBhcmVfcmVxKTsKIAogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQobXNiLT5xdWV1ZSwgbGltaXQpOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtc2ItPnF1ZXVlLCBNU1BST19CTE9DS19NQVhfUEFHRVMpOwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhtc2ItPnF1ZXVlLCBNU1BST19CTE9DS19NQVhfU0VHUyk7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhtc2ItPnF1ZXVlLCBNU1BST19CTE9DS19NQVhfU0VHUyk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKG1zYi0+cXVldWUsIE1TUFJPX0JMT0NLX01BWF9QQUdFUyk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhtc2ItPnF1ZXVlLCBNU1BST19CTE9DS19NQVhfU0VHUyk7CiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUobXNiLT5xdWV1ZSwKIAkJCQkgICBNU1BST19CTE9DS19NQVhfUEFHRVMgKiBtc2ItPnBhZ2Vfc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKaW5kZXggNDRkMjAzNy4uNTM4MmI1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKQEAgLTEyNiw4ICsxMjYsNiBAQAogICogIFB1YmxpYyBkYXRhLi4uCiAgKi8KIAotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqbXB0X3Byb2Nfcm9vdF9kaXI7Ci0KICNkZWZpbmUgV0hPSU5JVF9VTktOT1dOCQkweEFBCiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KQEAgLTE0Niw2ICsxNDQsOSBAQAogc3RhdGljIE1QVF9SRVNFVEhBTkRMRVIJCSBNcHRSZXNldEhhbmRsZXJzW01QVF9NQVhfUFJPVE9DT0xfRFJJVkVSU107CiBzdGF0aWMgc3RydWN0IG1wdF9wY2lfZHJpdmVyIAkqTXB0RGV2aWNlRHJpdmVySGFuZGxlcnNbTVBUX01BWF9QUk9UT0NPTF9EUklWRVJTXTsKIAorI2lmZGVmIENPTkZJR19QUk9DX0ZTCitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5IAkqbXB0X3Byb2Nfcm9vdF9kaXI7CisjZW5kaWYKIAogLyoKICAqICBEcml2ZXIgQ2FsbGJhY2sgSW5kZXgncwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAppbmRleCBiNDk0ODY3Li45NzE4YzhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaApAQCAtNzYsOCArNzYsOCBAQAogI2RlZmluZSBDT1BZUklHSFQJIkNvcHlyaWdodCAoYykgMTk5OS0yMDA4ICIgTU9EVUxFQVVUSE9SCiAjZW5kaWYKIAotI2RlZmluZSBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04JIjMuMDQuMTMiCi0jZGVmaW5lIE1QVF9MSU5VWF9QQUNLQUdFX05BTUUJCSJAKCMpbXB0bGludXgtMy4wNC4xMyIKKyNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjA0LjE0IgorI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDQuMTQiCiAjZGVmaW5lIFdIQVRfTUFHSUNfU1RSSU5HCQkiQCIgIigiICIjIiAiKSIKIAogI2RlZmluZSBzaG93X21wdG1vZF92ZXIocyx2ZXIpICBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwppbmRleCAzNTJhY2QwLi5jYWE4ZjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKQEAgLTM2MCw4ICszNjAsOCBAQAogCXUxNgkJIGlvY3N0YXR1czsKIAogCS8qIGJ1cyByZXNldCBpcyBvbmx5IGdvb2QgZm9yIFNDU0kgSU8sIFJBSUQgUEFTU1RIUlUgKi8KLQlpZiAoIShmdW5jdGlvbiA9PSBNUElfRlVOQ1RJT05fUkFJRF9TQ1NJX0lPX1BBU1NUSFJPVUdIKSB8fAotCSAgICAoZnVuY3Rpb24gPT0gTVBJX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVCkpIHsKKwlpZiAoIShmdW5jdGlvbiA9PSBNUElfRlVOQ1RJT05fUkFJRF9TQ1NJX0lPX1BBU1NUSFJPVUdIIHx8CisJCWZ1bmN0aW9uID09IE1QSV9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1QpKSB7CiAJCWR0bXByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX1dBUk5fRk1UCiAJCQkiVGFza01nbXQsIG5vdCBTQ1NJX0lPISFcbiIsIGlvYy0+bmFtZSkpOwogCQlyZXR1cm4gLUVQRVJNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCmluZGV4IGViZjZhZTAuLjYxMmFiM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKQEAgLTE5NSwyOSArMTk1LDM0IEBACiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAJaW50CQkJcmVhZHk7CiAJTVBUX0FEQVBURVIgCQkqaW9jOworCWludAkJCWxvb3BzID0gNDA7CS8qIHNlY29uZHMgKi8KIAogCWhkID0gc2hvc3RfcHJpdihTQ3BudC0+ZGV2aWNlLT5ob3N0KTsKIAlpb2MgPSBoZC0+aW9jOwogCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQl3aGlsZSAoKHJlYWR5ID0gZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpID4+IDE2KSA9PSBESURfSU1NX1JFVFJZKSB7CisJd2hpbGUgKChyZWFkeSA9IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5KHJwb3J0KSA+PiAxNikgPT0gRElEX0lNTV9SRVRSWQorCSB8fCAobG9vcHMgPiAwICYmIGlvYy0+YWN0aXZlID09IDApKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCQlkZmNwcmludGsgKGlvYywgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UCiAJCQkibXB0ZmNfYmxvY2tfZXJyb3JfaGFuZGxlci4lZDogJWQ6JWQsIHBvcnQgc3RhdHVzIGlzICIKLQkJCSJESURfSU1NX1JFVFJZLCBkZWZlcnJpbmcgJXMgcmVjb3ZlcnkuXG4iLAorCQkJIiV4LCBhY3RpdmUgZmxhZyAlZCwgZGVmZXJyaW5nICVzIHJlY292ZXJ5LlxuIiwKIAkJCWlvYy0+bmFtZSwgaW9jLT5zaC0+aG9zdF9ubywKLQkJCVNDcG50LT5kZXZpY2UtPmlkLCBTQ3BudC0+ZGV2aWNlLT5sdW4sIGNhbGxlcikpOworCQkJU0NwbnQtPmRldmljZS0+aWQsIFNDcG50LT5kZXZpY2UtPmx1biwKKwkJCXJlYWR5LCBpb2MtPmFjdGl2ZSwgY2FsbGVyKSk7CiAJCW1zbGVlcCgxMDAwKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlsb29wcyAtLTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKLQlpZiAocmVhZHkgPT0gRElEX05PX0NPTk5FQ1QgfHwgIVNDcG50LT5kZXZpY2UtPmhvc3RkYXRhKSB7CisJaWYgKHJlYWR5ID09IERJRF9OT19DT05ORUNUIHx8ICFTQ3BudC0+ZGV2aWNlLT5ob3N0ZGF0YQorCSB8fCBpb2MtPmFjdGl2ZSA9PSAwKSB7CiAJCWRmY3ByaW50ayAoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKIAkJCSIlcy4lZDogJWQ6JWQsIGZhaWxpbmcgcmVjb3ZlcnksICIKLQkJCSJwb3J0IHN0YXRlICVkLCB2ZGV2aWNlICVwLlxuIiwgY2FsbGVyLAorCQkJInBvcnQgc3RhdGUgJXgsIGFjdGl2ZSAlZCwgdmRldmljZSAlcC5cbiIsIGNhbGxlciwKIAkJCWlvYy0+bmFtZSwgaW9jLT5zaC0+aG9zdF9ubywKIAkJCVNDcG50LT5kZXZpY2UtPmlkLCBTQ3BudC0+ZGV2aWNlLT5sdW4sIHJlYWR5LAotCQkJU0NwbnQtPmRldmljZS0+aG9zdGRhdGEpKTsKKwkJCWlvYy0+YWN0aXZlLCBTQ3BudC0+ZGV2aWNlLT5ob3N0ZGF0YSkpOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KIAlkZmNwcmludGsgKGlvYywgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwppbmRleCA4Mzg3M2UzLi5jMjBiYmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKQEAgLTEwNzUsNiArMTA3NSwxOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorbXB0c2FzX2Jsb2NrX2lvX3NkZXYoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB2b2lkICpkYXRhKQoreworCXNjc2lfZGV2aWNlX3NldF9zdGF0ZShzZGV2LCBTREVWX0JMT0NLKTsKK30KKworc3RhdGljIHZvaWQKK21wdHNhc19ibG9ja19pb19zdGFyZ2V0KHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlpZiAoc3RhcmdldCkKKwkJc3RhcmdldF9mb3JfZWFjaF9kZXZpY2Uoc3RhcmdldCwgTlVMTCwgbXB0c2FzX2Jsb2NrX2lvX3NkZXYpOworfQorCiAvKioKICAqIG1wdHNhc190YXJnZXRfcmVzZXRfcXVldWUKICAqCkBAIC0xMDk4LDEwICsxMTExLDExIEBACiAJaWQgPSBzYXNfZXZlbnRfZGF0YS0+VGFyZ2V0SUQ7CiAJY2hhbm5lbCA9IHNhc19ldmVudF9kYXRhLT5CdXM7CiAKLQlpZiAoISh2dGFyZ2V0ID0gbXB0c2FzX2ZpbmRfdnRhcmdldChpb2MsIGNoYW5uZWwsIGlkKSkpCi0JCXJldHVybjsKLQotCXZ0YXJnZXQtPmRlbGV0ZWQgPSAxOyAvKiBibG9jayBJTyAqLworCXZ0YXJnZXQgPSBtcHRzYXNfZmluZF92dGFyZ2V0KGlvYywgY2hhbm5lbCwgaWQpOworCWlmICh2dGFyZ2V0KSB7CisJCW1wdHNhc19ibG9ja19pb19zdGFyZ2V0KHZ0YXJnZXQtPnN0YXJnZXQpOworCQl2dGFyZ2V0LT5kZWxldGVkID0gMTsgLyogYmxvY2sgSU8gKi8KKwl9CiAKIAl0YXJnZXRfcmVzZXRfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtcHRzYXNfdGFyZ2V0X3Jlc2V0X2V2ZW50KSwKIAkgICAgR0ZQX0FUT01JQyk7CkBAIC0xODY4LDcgKzE4ODIsOCBAQAogCWlmIChpb2MtPnNhc19kaXNjb3ZlcnlfcXVpZXNjZV9pbykKIAkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CiAKLS8vCXNjc2lfcHJpbnRfY29tbWFuZChTQ3BudCk7CisJaWYgKGlvYy0+ZGVidWdfbGV2ZWwgJiBNUFRfREVCVUdfU0NTSSkKKwkJc2NzaV9wcmludF9jb21tYW5kKFNDcG50KTsKIAogCXJldHVybiBtcHRzY3NpaF9xY21kKFNDcG50LGRvbmUpOwogfQpAQCAtMjY4Niw2ICsyNzAxLDE4NyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RydWN0IHJlcF9tYW51X3JlcXVlc3R7CisJdTggc21wX2ZyYW1lX3R5cGU7CisJdTggZnVuY3Rpb247CisJdTggcmVzZXJ2ZWQ7CisJdTggcmVxdWVzdF9sZW5ndGg7Cit9OworCitzdHJ1Y3QgcmVwX21hbnVfcmVwbHl7CisJdTggc21wX2ZyYW1lX3R5cGU7IC8qIDB4NDEgKi8KKwl1OCBmdW5jdGlvbjsgLyogMHgwMSAqLworCXU4IGZ1bmN0aW9uX3Jlc3VsdDsKKwl1OCByZXNwb25zZV9sZW5ndGg7CisJdTE2IGV4cGFuZGVyX2NoYW5nZV9jb3VudDsKKwl1OCByZXNlcnZlZDBbMl07CisJdTggc2FzX2Zvcm1hdDoxOworCXU4IHJlc2VydmVkMTo3OworCXU4IHJlc2VydmVkMlszXTsKKwl1OCB2ZW5kb3JfaWRbU0FTX0VYUEFOREVSX1ZFTkRPUl9JRF9MRU5dOworCXU4IHByb2R1Y3RfaWRbU0FTX0VYUEFOREVSX1BST0RVQ1RfSURfTEVOXTsKKwl1OCBwcm9kdWN0X3JldltTQVNfRVhQQU5ERVJfUFJPRFVDVF9SRVZfTEVOXTsKKwl1OCBjb21wb25lbnRfdmVuZG9yX2lkW1NBU19FWFBBTkRFUl9DT01QT05FTlRfVkVORE9SX0lEX0xFTl07CisJdTE2IGNvbXBvbmVudF9pZDsKKwl1OCBjb21wb25lbnRfcmV2aXNpb25faWQ7CisJdTggcmVzZXJ2ZWQzOworCXU4IHZlbmRvcl9zcGVjaWZpY1s4XTsKK307CisKKy8qKgorICAqIG1wdHNhc19leHBfcmVwbWFudWZhY3R1cmVfaW5mbyAtCisgICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgICogQHNhc19hZGRyZXNzOiBleHBhbmRlciBzYXMgYWRkcmVzcworICAqIEBlZGV2OiB0aGUgc2FzX2V4cGFuZGVyX2RldmljZSBvYmplY3QKKyAgKgorICAqIEZpbGxzIGluIHRoZSBzYXNfZXhwYW5kZXJfZGV2aWNlIG9iamVjdCB3aGVuIFNNUCBwb3J0IGlzIGNyZWF0ZWQuCisgICoKKyAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICAqLworc3RhdGljIGludAorbXB0c2FzX2V4cF9yZXBtYW51ZmFjdHVyZV9pbmZvKE1QVF9BREFQVEVSICppb2MsCisJdTY0IHNhc19hZGRyZXNzLCBzdHJ1Y3Qgc2FzX2V4cGFuZGVyX2RldmljZSAqZWRldikKK3sKKwlNUFRfRlJBTUVfSERSICptZjsKKwlTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdCAqc21wcmVxOworCVNtcFBhc3N0aHJvdWdoUmVwbHlfdCAqc21wcmVwOworCXN0cnVjdCByZXBfbWFudV9yZXBseSAqbWFudWZhY3R1cmVfcmVwbHk7CisJc3RydWN0IHJlcF9tYW51X3JlcXVlc3QgKm1hbnVmYWN0dXJlX3JlcXVlc3Q7CisJaW50IHJldDsKKwlpbnQgZmxhZ3NMZW5ndGg7CisJdW5zaWduZWQgbG9uZyB0aW1lbGVmdDsKKwljaGFyICpwc2dlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqZGF0YV9vdXQgPSBOVUxMOworCWRtYV9hZGRyX3QgZGF0YV9vdXRfZG1hID0gMDsKKwl1MzIgc3o7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT50YXNrbWdtdF9sb2NrLCBmbGFncyk7CisJaWYgKGlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+dGFza21nbXRfbG9jaywgZmxhZ3MpOworCQlwcmludGsoTVlJT0Nfc19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MhXG4iLAorCQkJX19mdW5jX18sIGlvYy0+bmFtZSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnRhc2ttZ210X2xvY2ssIGZsYWdzKTsKKworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW9jLT5zYXNfbWdtdC5tdXRleCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwltZiA9IG1wdF9nZXRfbXNnX2ZyYW1lKG1wdHNhc01nbXRDdHgsIGlvYyk7CisJaWYgKCFtZikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJc21wcmVxID0gKFNtcFBhc3N0aHJvdWdoUmVxdWVzdF90ICopbWY7CisJbWVtc2V0KHNtcHJlcSwgMCwgc2l6ZW9mKCpzbXByZXEpKTsKKworCXN6ID0gc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVwbHkpOworCisJZGF0YV9vdXQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2MtPnBjaWRldiwgc3osICZkYXRhX291dF9kbWEpOworCWlmICghZGF0YV9vdXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcHV0X21mOworCX0KKworCW1hbnVmYWN0dXJlX3JlcXVlc3QgPSBkYXRhX291dDsKKwltYW51ZmFjdHVyZV9yZXF1ZXN0LT5zbXBfZnJhbWVfdHlwZSA9IDB4NDA7CisJbWFudWZhY3R1cmVfcmVxdWVzdC0+ZnVuY3Rpb24gPSAxOworCW1hbnVmYWN0dXJlX3JlcXVlc3QtPnJlc2VydmVkID0gMDsKKwltYW51ZmFjdHVyZV9yZXF1ZXN0LT5yZXF1ZXN0X2xlbmd0aCA9IDA7CisKKwlzbXByZXEtPkZ1bmN0aW9uID0gTVBJX0ZVTkNUSU9OX1NNUF9QQVNTVEhST1VHSDsKKwlzbXByZXEtPlBoeXNpY2FsUG9ydCA9IDB4RkY7CisJKigodTY0ICopJnNtcHJlcS0+U0FTQWRkcmVzcykgPSBjcHVfdG9fbGU2NChzYXNfYWRkcmVzcyk7CisJc21wcmVxLT5SZXF1ZXN0RGF0YUxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdCk7CisKKwlwc2dlID0gKGNoYXIgKikKKwkJKCgoaW50ICopIG1mKSArIChvZmZzZXRvZihTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdCwgU0dMKSAvIDQpKTsKKworCWZsYWdzTGVuZ3RoID0gTVBJX1NHRV9GTEFHU19TSU1QTEVfRUxFTUVOVCB8CisJCU1QSV9TR0VfRkxBR1NfU1lTVEVNX0FERFJFU1MgfAorCQlNUElfU0dFX0ZMQUdTX0hPU1RfVE9fSU9DIHwKKwkJTVBJX1NHRV9GTEFHU19FTkRfT0ZfQlVGRkVSOworCWZsYWdzTGVuZ3RoID0gZmxhZ3NMZW5ndGggPDwgTVBJX1NHRV9GTEFHU19TSElGVDsKKwlmbGFnc0xlbmd0aCB8PSBzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcXVlc3QpOworCisJaW9jLT5hZGRfc2dlKHBzZ2UsIGZsYWdzTGVuZ3RoLCBkYXRhX291dF9kbWEpOworCXBzZ2UgKz0gaW9jLT5TR0Vfc2l6ZTsKKworCWZsYWdzTGVuZ3RoID0gTVBJX1NHRV9GTEFHU19TSU1QTEVfRUxFTUVOVCB8CisJCU1QSV9TR0VfRkxBR1NfU1lTVEVNX0FERFJFU1MgfAorCQlNUElfU0dFX0ZMQUdTX0lPQ19UT19IT1NUIHwKKwkJTVBJX1NHRV9GTEFHU19FTkRfT0ZfQlVGRkVSOworCWZsYWdzTGVuZ3RoID0gZmxhZ3NMZW5ndGggPDwgTVBJX1NHRV9GTEFHU19TSElGVDsKKwlmbGFnc0xlbmd0aCB8PSBzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcGx5KTsKKwlpb2MtPmFkZF9zZ2UocHNnZSwgZmxhZ3NMZW5ndGgsIGRhdGFfb3V0X2RtYSArCisJc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXF1ZXN0KSk7CisKKwlJTklUSUFMSVpFX01HTVRfU1RBVFVTKGlvYy0+c2FzX21nbXQuc3RhdHVzKQorCW1wdF9wdXRfbXNnX2ZyYW1lKG1wdHNhc01nbXRDdHgsIGlvYywgbWYpOworCisJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+c2FzX21nbXQuZG9uZSwgMTAgKiBIWik7CisJaWYgKCEoaW9jLT5zYXNfbWdtdC5zdGF0dXMgJiBNUFRfTUdNVF9TVEFUVVNfQ09NTUFORF9HT09EKSkgeworCQlyZXQgPSAtRVRJTUU7CisJCW1wdF9mcmVlX21zZ19mcmFtZShpb2MsIG1mKTsKKwkJbWYgPSBOVUxMOworCQlpZiAoaW9jLT5zYXNfbWdtdC5zdGF0dXMgJiBNUFRfTUdNVF9TVEFUVVNfRElEX0lPQ1JFU0VUKQorCQkJZ290byBvdXRfZnJlZTsKKwkJaWYgKCF0aW1lbGVmdCkKKwkJCW1wdF9IYXJkUmVzZXRIYW5kbGVyKGlvYywgQ0FOX1NMRUVQKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwltZiA9IE5VTEw7CisKKwlpZiAoaW9jLT5zYXNfbWdtdC5zdGF0dXMgJiBNUFRfTUdNVF9TVEFUVVNfUkZfVkFMSUQpIHsKKwkJdTggKnRtcDsKKworCXNtcHJlcCA9IChTbXBQYXNzdGhyb3VnaFJlcGx5X3QgKilpb2MtPnNhc19tZ210LnJlcGx5OworCWlmIChsZTE2X3RvX2NwdShzbXByZXAtPlJlc3BvbnNlRGF0YUxlbmd0aCkgIT0KKwkJc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXBseSkpCisJCQlnb3RvIG91dF9mcmVlOworCisJbWFudWZhY3R1cmVfcmVwbHkgPSBkYXRhX291dCArIHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdCk7CisJc3RybmNweShlZGV2LT52ZW5kb3JfaWQsIG1hbnVmYWN0dXJlX3JlcGx5LT52ZW5kb3JfaWQsCisJCVNBU19FWFBBTkRFUl9WRU5ET1JfSURfTEVOKTsKKwlzdHJuY3B5KGVkZXYtPnByb2R1Y3RfaWQsIG1hbnVmYWN0dXJlX3JlcGx5LT5wcm9kdWN0X2lkLAorCQlTQVNfRVhQQU5ERVJfUFJPRFVDVF9JRF9MRU4pOworCXN0cm5jcHkoZWRldi0+cHJvZHVjdF9yZXYsIG1hbnVmYWN0dXJlX3JlcGx5LT5wcm9kdWN0X3JldiwKKwkJU0FTX0VYUEFOREVSX1BST0RVQ1RfUkVWX0xFTik7CisJZWRldi0+bGV2ZWwgPSBtYW51ZmFjdHVyZV9yZXBseS0+c2FzX2Zvcm1hdDsKKwlpZiAobWFudWZhY3R1cmVfcmVwbHktPnNhc19mb3JtYXQpIHsKKwkJc3RybmNweShlZGV2LT5jb21wb25lbnRfdmVuZG9yX2lkLAorCQkJbWFudWZhY3R1cmVfcmVwbHktPmNvbXBvbmVudF92ZW5kb3JfaWQsCisJCQkJU0FTX0VYUEFOREVSX0NPTVBPTkVOVF9WRU5ET1JfSURfTEVOKTsKKwkJdG1wID0gKHU4ICopJm1hbnVmYWN0dXJlX3JlcGx5LT5jb21wb25lbnRfaWQ7CisJCWVkZXYtPmNvbXBvbmVudF9pZCA9IHRtcFswXSA8PCA4IHwgdG1wWzFdOworCQllZGV2LT5jb21wb25lbnRfcmV2aXNpb25faWQgPQorCQkJbWFudWZhY3R1cmVfcmVwbHktPmNvbXBvbmVudF9yZXZpc2lvbl9pZDsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ayhNWUlPQ19zX0VSUl9GTVQKKwkJCSIlczogc21wIHBhc3N0aHJ1IHJlcGx5IGZhaWxlZCB0byBiZSByZXR1cm5lZFxuIiwKKwkJCWlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXQgPSAtRU5YSU87CisJfQorb3V0X2ZyZWU6CisJaWYgKGRhdGFfb3V0X2RtYSkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBjaWRldiwgc3osIGRhdGFfb3V0LCBkYXRhX291dF9kbWEpOworcHV0X21mOgorCWlmIChtZikKKwkJbXB0X2ZyZWVfbXNnX2ZyYW1lKGlvYywgbWYpOworb3V0X3VubG9jazoKKwlDTEVBUl9NR01UX1NUQVRVUyhpb2MtPnNhc19tZ210LnN0YXR1cykKKwltdXRleF91bmxvY2soJmlvYy0+c2FzX21nbXQubXV0ZXgpOworb3V0OgorCXJldHVybiByZXQ7CisgfQorCiBzdGF0aWMgdm9pZAogbXB0c2FzX3BhcnNlX2RldmljZV9pbmZvKHN0cnVjdCBzYXNfaWRlbnRpZnkgKmlkZW50aWZ5LAogCQlzdHJ1Y3QgbXB0c2FzX2RldmluZm8gKmRldmljZV9pbmZvKQpAQCAtMjk2Nyw2ICszMTYzLDExIEBACiAJCQlnb3RvIG91dDsKIAkJfQogCQltcHRzYXNfc2V0X3JwaHkoaW9jLCBwaHlfaW5mbywgcnBoeSk7CisJCWlmIChpZGVudGlmeS5kZXZpY2VfdHlwZSA9PSBTQVNfRURHRV9FWFBBTkRFUl9ERVZJQ0UgfHwKKwkJCWlkZW50aWZ5LmRldmljZV90eXBlID09IFNBU19GQU5PVVRfRVhQQU5ERVJfREVWSUNFKQorCQkJCW1wdHNhc19leHBfcmVwbWFudWZhY3R1cmVfaW5mbyhpb2MsCisJCQkJCWlkZW50aWZ5LnNhc19hZGRyZXNzLAorCQkJCQlycGh5X3RvX2V4cGFuZGVyX2RldmljZShycGh5KSk7CiAJfQogCiAgb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCmluZGV4IDU3NzUyNzUuLjRhN2QxYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKQEAgLTE0MzgsOSArMTQzOCwxNCBAQAogCSAgICAmJiAodmRldmljZS0+dnRhcmdldC0+dGZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19RX1lFUykKIAkgICAgJiYgKFNDcG50LT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpKSB7CiAJCXNjc2ljdGwgPSBzY3NpZGlyIHwgTVBJX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7Ci0JfSBlbHNlIHsKKwkJaWYgKFNDcG50LT5yZXF1ZXN0ICYmIFNDcG50LT5yZXF1ZXN0LT5pb3ByaW8pIHsKKwkJCWlmICgoKFNDcG50LT5yZXF1ZXN0LT5pb3ByaW8gJiAweDcpID09IDEpIHx8CisJCQkJIShTQ3BudC0+cmVxdWVzdC0+aW9wcmlvICYgMHg3KSkKKwkJCQlzY3NpY3RsIHw9IE1QSV9TQ1NJSU9fQ09OVFJPTF9IRUFET0ZROworCQl9CisJfSBlbHNlCiAJCXNjc2ljdGwgPSBzY3NpZGlyIHwgTVBJX1NDU0lJT19DT05UUk9MX1VOVEFHR0VEOwotCX0KKwogCiAJLyogVXNlIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiB0byBzZXQgdXAgdGhlIG1lc3NhZ2UgZnJhbWUKIAkgKi8KQEAgLTE3OTYsNyArMTgwMSw3IEBACiAJCWR0bXByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0RFQlVHX0ZNVCAidGFzayBhYm9ydDogIgogCQkgICAiQ29tbWFuZCBub3QgaW4gdGhlIGFjdGl2ZSBsaXN0ISAoc2M9JXApXG4iLCBpb2MtPm5hbWUsCiAJCSAgIFNDcG50KSk7Ci0JCXJldHZhbCA9IDA7CisJCXJldHZhbCA9IFNVQ0NFU1M7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMKaW5kZXggZTM5OTg2YS4uMjY1OGIxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCkBAIC0xMDY1LDkgKzEwNjUsOCBAQAogCXF1ZXVlID0gZ2QtPnF1ZXVlOwogCXF1ZXVlLT5xdWV1ZWRhdGEgPSBpMm9fYmxrX2RldjsKIAotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxdWV1ZSwgSTJPX01BWF9QSFlTX1NFR01FTlRTKTsKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocXVldWUsIG1heF9zZWN0b3JzKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHF1ZXVlLCBpMm9fc2dfdGFibGVzaXplKGMsIGJvZHlfc2l6ZSkpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhxdWV1ZSwgbWF4X3NlY3RvcnMpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocXVldWUsIGkyb19zZ190YWJsZXNpemUoYywgYm9keV9zaXplKSk7CiAKIAlvc21fZGVidWcoIm1heCBzZWN0b3JzID0gJWRcbiIsIHF1ZXVlLT5tYXhfc2VjdG9ycyk7CiAJb3NtX2RlYnVnKCJwaHlzIHNlZ21lbnRzID0gJWRcbiIsIHF1ZXVlLT5tYXhfcGh5c19zZWdtZW50cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCA4NzgyOTc4Li40MTM1NzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTM0OCw2ICszNDgsMTYgQEAKIAkgIHJlYWQvd3JpdGUgZnVuY3Rpb25zIGZvciB0aGUgZGV2aWNlcyB0byBnZXQgYWNjZXNzIHRvIHRoaXMgY2hpcC4KIAkgIFRoaXMgY2hpcCBlbWJlZHMgdmFyaW91cyBvdGhlciBtdWx0aW1lZGlhIGZ1bnRpb25hbGl0aWVzIGFzIHdlbGwuCiAKK2NvbmZpZyBNRkRfVElNQkVSREFMRQorCXRyaXN0YXRlICJTdXBwb3J0IGZvciB0aGUgVGltYmVyZGFsZSBGUEdBIgorCXNlbGVjdCBNRkRfQ09SRQorCWRlcGVuZHMgb24gUENJICYmIEdQSU9MSUIKKwktLS1oZWxwLS0tCisJVGhpcyBpcyB0aGUgY29yZSBkcml2ZXIgZm9yIHRoZSB0aW1iZXJkYWxlIEZQR0EuIFRoaXMgZGV2aWNlIGlzIGEKKwltdWx0aWZ1bmN0aW9uIGRldmljZSB3aGljaCBleHBvc2VzIG51bWVyb3VzIHBsYXRmb3JtIGRldmljZXMuCisKKwlUaGUgdGltYmVyZGFsZSBGUEdBIGNhbiBiZSBmb3VuZCBvbiB0aGUgSW50ZWwgQXRvbSBkZXZlbG9wbWVudCBib2FyZAorCWZvciBpbi12ZWhpY2xlIGluZm9udGFpbm1lbnQsIGNhbGxlZCBSdXNzZWxsdmlsbGUuCiBlbmRtZW51CiAKIG1lbnUgIk11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKaW5kZXggZTA5ZWI0OC4uNzgyOTVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKQEAgLTU0LDUgKzU0LDYgQEAKIG9iai0kKENPTkZJR19BQjMxMDBfQ09SRSkJKz0gYWIzMTAwLWNvcmUubwogb2JqLSQoQ09ORklHX0FCMzEwMF9PVFApCSs9IGFiMzEwMC1vdHAubwogb2JqLSQoQ09ORklHX0FCNDUwMF9DT1JFKQkrPSBhYjQ1MDAtY29yZS5vCitvYmotJChDT05GSUdfTUZEX1RJTUJFUkRBTEUpICAgICs9IHRpbWJlcmRhbGUubwogb2JqLSQoQ09ORklHX01GRF84OFBNODYwNykJKz0gODhwbTg2MDcubwotb2JqLSQoQ09ORklHX1BNSUNfQURQNTUyMCkJKz0gYWRwNTUyMC5vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorb2JqLSQoQ09ORklHX1BNSUNfQURQNTUyMCkJKz0gYWRwNTUyMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90aW1iZXJkYWxlLmMgYi9kcml2ZXJzL21mZC90aW1iZXJkYWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkNDRkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3RpbWJlcmRhbGUuYwpAQCAtMCwwICsxLDcyNyBAQAorLyoKKyAqIHRpbWJlcmRhbGUuYyB0aW1iZXJkYWxlIEZQR0EgTUZEIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyogU3VwcG9ydHM6CisgKiBUaW1iZXJkYWxlIEZQR0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbXNpLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKworI2luY2x1ZGUgPGxpbnV4L3RpbWJfZ3Bpby5oPgorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLW9jb3Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90c2MyMDA3Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3hpbGlueF9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvbWF4NzMwMS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9tYzMzODgwLmg+CisKKyNpbmNsdWRlIDxtZWRpYS90aW1iX3JhZGlvLmg+CisKKyNpbmNsdWRlICJ0aW1iZXJkYWxlLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInRpbWJlcmRhbGUiCisKK3N0cnVjdCB0aW1iZXJkYWxlX2RldmljZSB7CisJcmVzb3VyY2Vfc2l6ZV90CQljdGxfbWFwYmFzZTsKKwl1bnNpZ25lZCBjaGFyIF9faW9tZW0gICAqY3RsX21lbWJhc2U7CisJc3RydWN0IHsKKwkJdTMyIG1ham9yOworCQl1MzIgbWlub3I7CisJCXUzMiBjb25maWc7CisJfSBmdzsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHRzYzIwMDdfcGxhdGZvcm1fZGF0YSB0aW1iZXJkYWxlX3RzYzIwMDdfcGxhdGZvcm1fZGF0YSA9IHsKKwkubW9kZWwgPSAyMDAzLAorCS54X3BsYXRlX29obXMgPSAxMDAKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gdGltYmVyZGFsZV9pMmNfYm9hcmRfaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInRzYzIwMDciLCAweDQ4KSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV90c2MyMDA3X3BsYXRmb3JtX2RhdGEsCisJCS5pcnEgPSBJUlFfVElNQkVSREFMRV9UU0NfSU5UCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBvY29yZXNfaTJjX3BsYXRmb3JtX2RhdGEKK3RpbWJlcmRhbGVfb2NvcmVzX3BsYXRmb3JtX2RhdGEgPSB7CisJLnJlZ3N0ZXAgPSA0LAorCS5jbG9ja19raHogPSA2MjUwMCwKKwkuZGV2aWNlcyA9IHRpbWJlcmRhbGVfaTJjX2JvYXJkX2luZm8sCisJLm51bV9kZXZpY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2kyY19ib2FyZF9pbmZvKQorfTsKKworY29uc3Qgc3RhdGljIF9fZGV2aW5pdGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0aW1iZXJkYWxlX29jb3Jlc19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IE9DT1JFU09GRlNFVCwKKwkJLmVuZAk9IE9DT1JFU0VORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydCAJPSBJUlFfVElNQkVSREFMRV9JMkMsCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9JMkMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitjb25zdCBzdHJ1Y3QgbWF4NzMwMV9wbGF0Zm9ybV9kYXRhIHRpbWJlcmRhbGVfbWF4NzMwMV9wbGF0Zm9ybV9kYXRhID0geworCS5iYXNlID0gMjAwCit9OworCitjb25zdCBzdHJ1Y3QgbWMzMzg4MF9wbGF0Zm9ybV9kYXRhIHRpbWJlcmRhbGVfbWMzMzg4MF9wbGF0Zm9ybV9kYXRhID0geworCS5iYXNlID0gMTAwCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHRpbWJlcmRhbGVfc3BpXzE2Yml0X2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCS5tb2RhbGlhcyA9ICJtYXg3MzAxIiwKKwkJLm1heF9zcGVlZF9oeiA9IDI2MDAwLAorCQkuY2hpcF9zZWxlY3QgPSAyLAorCQkubW9kZSA9IFNQSV9NT0RFXzAsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfbWF4NzMwMV9wbGF0Zm9ybV9kYXRhCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gdGltYmVyZGFsZV9zcGlfOGJpdF9ib2FyZF9pbmZvW10gPSB7CisJeworCQkubW9kYWxpYXMgPSAibWMzMzg4MCIsCisJCS5tYXhfc3BlZWRfaHogPSA0MDAwLAorCQkuY2hpcF9zZWxlY3QgPSAxLAorCQkubW9kZSA9IFNQSV9NT0RFXzEsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfbWMzMzg4MF9wbGF0Zm9ybV9kYXRhCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCB4c3BpX3BsYXRmb3JtX2RhdGEgdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEgPSB7CisJLm51bV9jaGlwc2VsZWN0ID0gMywKKwkubGl0dGxlX2VuZGlhbiA9IHRydWUsCisJLyogYml0cyBwZXIgd29yZCBhbmQgZGV2aWNlcyB3aWxsIGJlIGZpbGxlZCBpbiBydW50aW1lIGRlcGVuZGluZworCSAqIG9uIHRoZSBIVyBjb25maWcKKwkgKi8KK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgCT0gU1BJT0ZGU0VULAorCQkuZW5kCT0gU1BJRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfU1BJLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfU1BJLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworY29uc3Qgc3RhdGljIF9fZGV2aW5pdGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0aW1iZXJkYWxlX2V0aF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IEVUSE9GRlNFVCwKKwkJLmVuZAk9IEVUSEVORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9USU1CRVJEQUxFX0VUSFNXX0lGLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfRVRIU1dfSUYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdGltYmdwaW9fcGxhdGZvcm1fZGF0YQorCXRpbWJlcmRhbGVfZ3Bpb19wbGF0Zm9ybV9kYXRhID0geworCS5ncGlvX2Jhc2UgPSAwLAorCS5ucl9waW5zID0gR1BJT19OUl9QSU5TLAorCS5pcnFfYmFzZSA9IDIwMCwKK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9ncGlvX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gR1BJT09GRlNFVCwKKwkJLmVuZAk9IEdQSU9FTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9HUElPLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfR1BJTywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9tbG9naWNvcmVfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBNTENPUkVPRkZTRVQsCisJCS5lbmQJPSBNTENPUkVFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9NTENPUkUsCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9NTENPUkUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9NTENPUkVfQlVGLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfTUxDT1JFX0JVRiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV91YXJ0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gVUFSVE9GRlNFVCwKKwkJLmVuZAk9IFVBUlRFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9VQVJULAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfVUFSVCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV91YXJ0bGl0ZV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IFVBUlRMSVRFT0ZGU0VULAorCQkuZW5kCT0gVUFSVExJVEVFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9VQVJUTElURSwKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX1VBUlRMSVRFLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworY29uc3Qgc3RhdGljIF9fZGV2aW5pdGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gUkRTT0ZGU0VULAorCQkuZW5kCT0gUkRTRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfUkRTLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfUkRTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IGkyY19ib2FyZF9pbmZvIHRpbWJlcmRhbGVfdGVmNjg2OF9pMmNfYm9hcmRfaW5mbyA9IHsKKwlJMkNfQk9BUkRfSU5GTygidGVmNjg2MiIsIDB4NjApCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gdGltYmVyZGFsZV9zYWE3NzA2X2kyY19ib2FyZF9pbmZvID0geworCUkyQ19CT0FSRF9JTkZPKCJzYWE3NzA2aCIsIDB4MUMpCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdGltYl9yYWRpb19wbGF0Zm9ybV9kYXRhCisJdGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhID0geworCS5pMmNfYWRhcHRlciA9IDAsCisJLnR1bmVyID0geworCQkubW9kdWxlX25hbWUgPSAidGVmNjg2MiIsCisJCS5pbmZvID0gJnRpbWJlcmRhbGVfdGVmNjg2OF9pMmNfYm9hcmRfaW5mbworCX0sCisJLmRzcCA9IHsKKwkJLm1vZHVsZV9uYW1lID0gInNhYTc3MDZoIiwKKwkJLmluZm8gPSAmdGltYmVyZGFsZV9zYWE3NzA2X2kyY19ib2FyZF9pbmZvCisJfQorfTsKKworY29uc3Qgc3RhdGljIF9fZGV2aW5pdGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IERNQU9GRlNFVCwKKwkJLmVuZAk9IERNQUVORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9USU1CRVJEQUxFX0RNQSwKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX0RNQSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBtZmRfY2VsbCB0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMFtdID0geworCXsKKwkJLm5hbWUgPSAidGltYi11YXJ0IiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV91YXJ0X3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1ncGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9ncGlvX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLXJhZGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3JhZGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAieGlsaW54X3NwaSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3NwaV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gImtzODg0MiIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2V0aF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9ldGhfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLWRtYSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9kbWFfcmVzb3VyY2VzLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgbWZkX2NlbGwgdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzFbXSA9IHsKKwl7CisJCS5uYW1lID0gInRpbWItdWFydCIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3VhcnRfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gInVhcnRsaXRlIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfdWFydGxpdGVfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfdWFydGxpdGVfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLWdwaW8iLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9ncGlvX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2dwaW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX2dwaW9fcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX2dwaW9fcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItbWxvZ2ljb3JlIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfbWxvZ2ljb3JlX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX21sb2dpY29yZV9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItcmFkaW8iLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfcmFkaW9fcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX3JhZGlvX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ4aWxpbnhfc3BpIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfc3BpX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3NwaV9yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAia3M4ODQyIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZXRoX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2V0aF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItZG1hIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZG1hX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXMsCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBtZmRfY2VsbCB0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMltdID0geworCXsKKwkJLm5hbWUgPSAidGltYi11YXJ0IiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV91YXJ0X3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1ncGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9ncGlvX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLXJhZGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3JhZGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAieGlsaW54X3NwaSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3NwaV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItZG1hIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZG1hX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXMsCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBtZmRfY2VsbCB0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnM1tdID0geworCXsKKwkJLm5hbWUgPSAidGltYi11YXJ0IiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV91YXJ0X3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAib2NvcmVzLWkyYyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX29jb3Jlc19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9vY29yZXNfcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX29jb3Jlc19wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfb2NvcmVzX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLWdwaW8iLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9ncGlvX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2dwaW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX2dwaW9fcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX2dwaW9fcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItcmFkaW8iLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfcmFkaW9fcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX3JhZGlvX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ4aWxpbnhfc3BpIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfc3BpX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3NwaV9yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAia3M4ODQyIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZXRoX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2V0aF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItZG1hIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZG1hX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXMsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9zZGhjX3Jlc291cmNlc1tdID0geworCS8qIGxvY2F0ZWQgaW4gYmFyIDEgYW5kIGJhciAyICovCisJeworCQkuc3RhcnQJPSBTREhDME9GRlNFVCwKKwkJLmVuZAk9IFNESEMwRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfU0RIQywKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX1NESEMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgbWZkX2NlbGwgdGltYmVyZGFsZV9jZWxsc19iYXIxW10gPSB7CisJeworCQkubmFtZSA9ICJzZGhjaSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3NkaGNfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfc2RoY19yZXNvdXJjZXMsCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBtZmRfY2VsbCB0aW1iZXJkYWxlX2NlbGxzX2JhcjJbXSA9IHsKKwl7CisJCS5uYW1lID0gInNkaGNpIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfc2RoY19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9zZGhjX3Jlc291cmNlcywKKwl9LAorfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19md192ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwljaGFyICpidWYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IHRpbWJlcmRhbGVfZGV2aWNlICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWQuJWRcbiIsIHByaXYtPmZ3Lm1ham9yLCBwcml2LT5mdy5taW5vciwKKwkJcHJpdi0+ZncuY29uZmlnKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGZ3X3ZlciwgU19JUlVHTywgc2hvd19md192ZXIsIE5VTEwpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2RldmluaXQgdGltYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdGltYmVyZGFsZV9kZXZpY2UgKnByaXY7CisJaW50IGVyciwgaTsKKwlyZXNvdXJjZV9zaXplX3QgbWFwYmFzZTsKKwlzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpeF9lbnRyaWVzID0gTlVMTDsKKwl1OCBpcF9zZXR1cDsKKworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBwcml2KTsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfZW5hYmxlOworCisJbWFwYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApOworCWlmICghbWFwYmFzZSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIk5vIHJlc291cmNlXG4iKTsKKwkJZ290byBlcnJfc3RhcnQ7CisJfQorCisJLyogY3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoZSBQQ0kgbWFzdGVyIHJlZ2lzdGVyICovCisJcHJpdi0+Y3RsX21hcGJhc2UgPSBtYXBiYXNlICsgQ0hJUENUTE9GRlNFVDsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwcml2LT5jdGxfbWFwYmFzZSwgQ0hJUENUTFNJWkUsICJ0aW1iLWN0bCIpKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgY3RsIG1lbVxuIik7CisJCWdvdG8gZXJyX3JlcXVlc3Q7CisJfQorCisJcHJpdi0+Y3RsX21lbWJhc2UgPSBpb3JlbWFwKHByaXYtPmN0bF9tYXBiYXNlLCBDSElQQ1RMU0laRSk7CisJaWYgKCFwcml2LT5jdGxfbWVtYmFzZSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkIGZvciBjdGwgbWVtXG4iKTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKKwkvKiByZWFkIHRoZSBIVyBjb25maWcgKi8KKwlwcml2LT5mdy5tYWpvciA9IGlvcmVhZDMyKHByaXYtPmN0bF9tZW1iYXNlICsgVElNQl9SRVZfTUFKT1IpOworCXByaXYtPmZ3Lm1pbm9yID0gaW9yZWFkMzIocHJpdi0+Y3RsX21lbWJhc2UgKyBUSU1CX1JFVl9NSU5PUik7CisJcHJpdi0+ZncuY29uZmlnID0gaW9yZWFkMzIocHJpdi0+Y3RsX21lbWJhc2UgKyBUSU1CX0hXX0NPTkZJRyk7CisKKwlpZiAocHJpdi0+ZncubWFqb3IgPiBUSU1CX1NVUFBPUlRFRF9NQUpPUikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIlRoZSBkcml2ZXIgc3VwcG9ydHMgYW4gb2xkZXIgIgorCQkJInZlcnNpb24gb2YgdGhlIEZQR0EsIHBsZWFzZSB1cGRhdGUgdGhlIGRyaXZlciB0byAiCisJCQkic3VwcG9ydCAlZC4lZFxuIiwgcHJpdi0+ZncubWFqb3IsIHByaXYtPmZ3Lm1pbm9yKTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisJaWYgKHByaXYtPmZ3Lm1ham9yIDwgVElNQl9TVVBQT1JURURfTUFKT1IgfHwKKwkJcHJpdi0+ZncubWlub3IgPCBUSU1CX1JFUVVJUkVEX01JTk9SKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiVGhlIEZQR0EgaW1hZ2UgaXMgdG9vIG9sZCAoJWQuJWQpLCAiCisJCQkicGxlYXNlIHVwZ3JhZGUgdGhlIEZQR0EgdG8gYXQgbGVhc3Q6ICVkLiVkXG4iLAorCQkJcHJpdi0+ZncubWFqb3IsIHByaXYtPmZ3Lm1pbm9yLAorCQkJVElNQl9TVVBQT1JURURfTUFKT1IsIFRJTUJfUkVRVUlSRURfTUlOT1IpOworCQlnb3RvIGVycl9pb3JlbWFwOworCX0KKworCW1zaXhfZW50cmllcyA9IGt6YWxsb2MoVElNQkVSREFMRV9OUl9JUlFTICogc2l6ZW9mKCptc2l4X2VudHJpZXMpLAorCQlHRlBfS0VSTkVMKTsKKwlpZiAoIW1zaXhfZW50cmllcykKKwkJZ290byBlcnJfaW9yZW1hcDsKKworCWZvciAoaSA9IDA7IGkgPCBUSU1CRVJEQUxFX05SX0lSUVM7IGkrKykKKwkJbXNpeF9lbnRyaWVzW2ldLmVudHJ5ID0gaTsKKworCWVyciA9IHBjaV9lbmFibGVfbXNpeChkZXYsIG1zaXhfZW50cmllcywgVElNQkVSREFMRV9OUl9JUlFTKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJIk1TSS1YIGluaXQgZmFpbGVkOiAlZCwgZXhwZWN0ZWQgZW50cmllczogJWRcbiIsCisJCQllcnIsIFRJTUJFUkRBTEVfTlJfSVJRUyk7CisJCWdvdG8gZXJyX21zaXg7CisJfQorCisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2Z3X3Zlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfY3JlYXRlX2ZpbGU7CisKKwkvKiBSZXNldCBhbGwgRlBHQSBQTEIgcGVyaXBoZXJhbHMgKi8KKwlpb3dyaXRlMzIoMHgxLCBwcml2LT5jdGxfbWVtYmFzZSArIFRJTUJfU1dfUlNUKTsKKworCS8qIHVwZGF0ZSBJUlEgb2Zmc2V0cyBpbiBJMkMgYm9hcmQgaW5mbyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfaTJjX2JvYXJkX2luZm8pOyBpKyspCisJCXRpbWJlcmRhbGVfaTJjX2JvYXJkX2luZm9baV0uaXJxID0KKwkJCW1zaXhfZW50cmllc1t0aW1iZXJkYWxlX2kyY19ib2FyZF9pbmZvW2ldLmlycV0udmVjdG9yOworCisJLyogVXBkYXRlIHRoZSBTUEkgY29uZmlndXJhdGlvbiBkZXBlbmRpbmcgb24gdGhlIEhXICg4IG9yIDE2IGJpdCkgKi8KKwlpZiAocHJpdi0+ZncuY29uZmlnICYgVElNQl9IV19DT05GSUdfU1BJXzhCSVQpIHsKKwkJdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEuYml0c19wZXJfd29yZCA9IDg7CisJCXRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLmRldmljZXMgPQorCQkJdGltYmVyZGFsZV9zcGlfOGJpdF9ib2FyZF9pbmZvOworCQl0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YS5udW1fZGV2aWNlcyA9CisJCQlBUlJBWV9TSVpFKHRpbWJlcmRhbGVfc3BpXzhiaXRfYm9hcmRfaW5mbyk7CisJfSBlbHNlIHsKKwkJdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEuYml0c19wZXJfd29yZCA9IDE2OworCQl0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YS5kZXZpY2VzID0KKwkJCXRpbWJlcmRhbGVfc3BpXzE2Yml0X2JvYXJkX2luZm87CisJCXRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLm51bV9kZXZpY2VzID0KKwkJCUFSUkFZX1NJWkUodGltYmVyZGFsZV9zcGlfMTZiaXRfYm9hcmRfaW5mbyk7CisJfQorCisJaXBfc2V0dXAgPSBwcml2LT5mdy5jb25maWcgJiBUSU1CX0hXX1ZFUl9NQVNLOworCXN3aXRjaCAoaXBfc2V0dXApIHsKKwljYXNlIFRJTUJfSFdfVkVSMDoKKwkJZXJyID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgLTEsCisJCQl0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMCwKKwkJCUFSUkFZX1NJWkUodGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzApLAorCQkJJmRldi0+cmVzb3VyY2VbMF0sIG1zaXhfZW50cmllc1swXS52ZWN0b3IpOworCQlicmVhazsKKwljYXNlIFRJTUJfSFdfVkVSMToKKwkJZXJyID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgLTEsCisJCQl0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMSwKKwkJCUFSUkFZX1NJWkUodGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzEpLAorCQkJJmRldi0+cmVzb3VyY2VbMF0sIG1zaXhfZW50cmllc1swXS52ZWN0b3IpOworCQlicmVhazsKKwljYXNlIFRJTUJfSFdfVkVSMjoKKwkJZXJyID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgLTEsCisJCQl0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMiwKKwkJCUFSUkFZX1NJWkUodGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzIpLAorCQkJJmRldi0+cmVzb3VyY2VbMF0sIG1zaXhfZW50cmllc1swXS52ZWN0b3IpOworCQlicmVhazsKKwljYXNlIFRJTUJfSFdfVkVSMzoKKwkJZXJyID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgLTEsCisJCQl0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMywKKwkJCUFSUkFZX1NJWkUodGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzMpLAorCQkJJmRldi0+cmVzb3VyY2VbMF0sIG1zaXhfZW50cmllc1swXS52ZWN0b3IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZkZXYtPmRldiwgIlVrbm93biBJUCBzZXR1cDogJWQuJWQuJWRcbiIsCisJCQlwcml2LT5mdy5tYWpvciwgcHJpdi0+ZncubWlub3IsIGlwX3NldHVwKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfbWZkOworCQlicmVhazsKKwl9CisKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibWZkX2FkZF9kZXZpY2VzIGZhaWxlZDogJWRcbiIsIGVycik7CisJCWdvdG8gZXJyX21mZDsKKwl9CisKKwllcnIgPSBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCAwLAorCQl0aW1iZXJkYWxlX2NlbGxzX2JhcjEsIEFSUkFZX1NJWkUodGltYmVyZGFsZV9jZWxsc19iYXIxKSwKKwkJJmRldi0+cmVzb3VyY2VbMV0sIG1zaXhfZW50cmllc1swXS52ZWN0b3IpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJtZmRfYWRkX2RldmljZXMgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJZ290byBlcnJfbWZkMjsKKwl9CisKKwkvKiBvbmx5IHZlcnNpb24gMCBhbmQgMyBoYXZlIHRoZSBpTmFuZCByb3V0ZWQgdG8gU0RIQ0kgKi8KKwlpZiAoKChwcml2LT5mdy5jb25maWcgJiBUSU1CX0hXX1ZFUl9NQVNLKSA9PSBUSU1CX0hXX1ZFUjApIHx8CisJCSgocHJpdi0+ZncuY29uZmlnICYgVElNQl9IV19WRVJfTUFTSykgPT0gVElNQl9IV19WRVIzKSkgeworCQllcnIgPSBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCAxLCB0aW1iZXJkYWxlX2NlbGxzX2JhcjIsCisJCQlBUlJBWV9TSVpFKHRpbWJlcmRhbGVfY2VsbHNfYmFyMiksCisJCQkmZGV2LT5yZXNvdXJjZVsyXSwgbXNpeF9lbnRyaWVzWzBdLnZlY3Rvcik7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAibWZkX2FkZF9kZXZpY2VzIGZhaWxlZDogJWRcbiIsIGVycik7CisJCQlnb3RvIGVycl9tZmQyOworCQl9CisJfQorCisJa2ZyZWUobXNpeF9lbnRyaWVzKTsKKworCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJIkZvdW5kIFRpbWJlcmRhbGUgQ2FyZC4gUmV2OiAlZC4lZCwgSFcgY29uZmlnOiAweCUwMnhcbiIsCisJCXByaXYtPmZ3Lm1ham9yLCBwcml2LT5mdy5taW5vciwgcHJpdi0+ZncuY29uZmlnKTsKKworCXJldHVybiAwOworCitlcnJfbWZkMjoKKwltZmRfcmVtb3ZlX2RldmljZXMoJmRldi0+ZGV2KTsKK2Vycl9tZmQ6CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2Z3X3Zlcik7CitlcnJfY3JlYXRlX2ZpbGU6CisJcGNpX2Rpc2FibGVfbXNpeChkZXYpOworZXJyX21zaXg6CisJaW91bm1hcChwcml2LT5jdGxfbWVtYmFzZSk7CitlcnJfaW9yZW1hcDoKKwlyZWxlYXNlX21lbV9yZWdpb24ocHJpdi0+Y3RsX21hcGJhc2UsIENISVBDVExTSVpFKTsKK2Vycl9yZXF1ZXN0OgorCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworZXJyX3N0YXJ0OgorCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworZXJyX2VuYWJsZToKKwlrZnJlZShtc2l4X2VudHJpZXMpOworCWtmcmVlKHByaXYpOworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgdGltYl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdGltYmVyZGFsZV9kZXZpY2UgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKworCW1mZF9yZW1vdmVfZGV2aWNlcygmZGV2LT5kZXYpOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2Z3X3Zlcik7CisKKwlpb3VubWFwKHByaXYtPmN0bF9tZW1iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocHJpdi0+Y3RsX21hcGJhc2UsIENISVBDVExTSVpFKTsKKworCXBjaV9kaXNhYmxlX21zaXgoZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlrZnJlZShwcml2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHRpbWJlcmRhbGVfcGNpX3RibFtdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RJTUIsIFBDSV9ERVZJQ0VfSURfVElNQikgfSwKKwl7IDAgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB0aW1iZXJkYWxlX3BjaV90YmwpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdGltYmVyZGFsZV9wY2lfZHJpdmVyID0geworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlID0gdGltYmVyZGFsZV9wY2lfdGJsLAorCS5wcm9iZSA9IHRpbWJfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHRpbWJfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRpbWJlcmRhbGVfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ0aW1iZXJkYWxlX3BjaV9kcml2ZXIpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIkZhaWxlZCB0byByZWdpc3RlciBQQ0kgZHJpdmVyIGZvciAlcyBkZXZpY2UuXG4iLAorCQkJdGltYmVyZGFsZV9wY2lfZHJpdmVyLm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJEcml2ZXIgZm9yICVzIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLlxuIiwKKwkJdGltYmVyZGFsZV9wY2lfZHJpdmVyLm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0aW1iZXJkYWxlX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnRpbWJlcmRhbGVfcGNpX2RyaXZlcik7CisKKwlwcmludGsoS0VSTl9JTkZPICJEcml2ZXIgZm9yICVzIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1bnJlZ2lzdGVyZWQuXG4iLAorCQl0aW1iZXJkYWxlX3BjaV9kcml2ZXIubmFtZSk7Cit9CisKK21vZHVsZV9pbml0KHRpbWJlcmRhbGVfaW5pdCk7Cittb2R1bGVfZXhpdCh0aW1iZXJkYWxlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNb2NlYW4gTGFib3JhdG9yaWVzIDxpbmZvQG1vY2Vhbi1sYWJzLmNvbT4iKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RpbWJlcmRhbGUuaCBiL2RyaXZlcnMvbWZkL3RpbWJlcmRhbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDI3ZmZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvdGltYmVyZGFsZS5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogdGltYmVyZGFsZS5oIHRpbWJlcmRhbGUgRlBHQSBNRkQgZHJpdmVyIGRlZmluZXMKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIFN1cHBvcnRzOgorICogVGltYmVyZGFsZSBGUEdBCisgKi8KKworI2lmbmRlZiBNRkRfVElNQkVSREFMRV9ICisjZGVmaW5lIE1GRF9USU1CRVJEQUxFX0gKKworI2RlZmluZSBEUlZfVkVSU0lPTgkJIjAuMSIKKworLyogVGhpcyBkcml2ZXIgb25seSBzdXBwb3J0IHZlcnNpb25zID49IDMuOCBhbmQgPCA0LjAgICovCisjZGVmaW5lIFRJTUJfU1VQUE9SVEVEX01BSk9SCTMKKworLyogVGhpcyBkcml2ZXIgb25seSBzdXBwb3J0IG1pbm9yID49IDggKi8KKyNkZWZpbmUgVElNQl9SRVFVSVJFRF9NSU5PUgk4CisKKy8qIFJlZ2lzdGVycyBvZiB0aGUgY29udHJvbCBhcmVhICovCisjZGVmaW5lIFRJTUJfUkVWX01BSk9SCTB4MDAKKyNkZWZpbmUgVElNQl9SRVZfTUlOT1IJMHgwNAorI2RlZmluZSBUSU1CX0hXX0NPTkZJRwkweDA4CisjZGVmaW5lIFRJTUJfU1dfUlNUCTB4NDAKKworLyogYml0cyBpbiB0aGUgVElNQl9IV19DT05GSUcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVElNQl9IV19DT05GSUdfU1BJXzhCSVQJMHg4MAorCisjZGVmaW5lIFRJTUJfSFdfVkVSX01BU0sJMHgwZgorI2RlZmluZSBUSU1CX0hXX1ZFUjAJCTB4MDAKKyNkZWZpbmUgVElNQl9IV19WRVIxCQkweDAxCisjZGVmaW5lIFRJTUJfSFdfVkVSMgkJMHgwMgorI2RlZmluZSBUSU1CX0hXX1ZFUjMJCTB4MDMKKworI2RlZmluZSBPQ09SRVNPRkZTRVQJMHgwCisjZGVmaW5lIE9DT1JFU0VORAkweDFmCisKKyNkZWZpbmUgU1BJT0ZGU0VUCTB4ODAKKyNkZWZpbmUgU1BJRU5ECQkweGZmCisKKyNkZWZpbmUgVUFSVExJVEVPRkZTRVQJMHgxMDAKKyNkZWZpbmUgVUFSVExJVEVFTkQJMHgxMGYKKworI2RlZmluZSBSRFNPRkZTRVQJMHgxODAKKyNkZWZpbmUgUkRTRU5ECQkweDE4MworCisjZGVmaW5lIEVUSE9GRlNFVAkweDMwMAorI2RlZmluZSBFVEhFTkQJCTB4M2ZmCisKKyNkZWZpbmUgR1BJT09GRlNFVAkweDQwMAorI2RlZmluZSBHUElPRU5ECQkweDdmZgorCisjZGVmaW5lIENISVBDVExPRkZTRVQJMHg4MDAKKyNkZWZpbmUgQ0hJUENUTEVORAkweDhmZgorI2RlZmluZSBDSElQQ1RMU0laRQkoQ0hJUENUTEVORCAtIENISVBDVExPRkZTRVQpCisKKyNkZWZpbmUgSU5UQ09GRlNFVAkweGMwMAorI2RlZmluZSBJTlRDRU5ECQkweGZmZgorI2RlZmluZSBJTlRDU0laRQkoSU5UQ0VORCAtIElOVENPRkZTRVQpCisKKyNkZWZpbmUgTU9TVE9GRlNFVAkweDEwMDAKKyNkZWZpbmUgTU9TVEVORAkJMHgxM2ZmCisKKyNkZWZpbmUgVUFSVE9GRlNFVAkweDE0MDAKKyNkZWZpbmUgVUFSVEVORAkJMHgxN2ZmCisKKyNkZWZpbmUgWElJQ09GRlNFVAkweDE4MDAKKyNkZWZpbmUgWElJQ0VORAkJMHgxOWZmCisKKyNkZWZpbmUgSTJTT0ZGU0VUCTB4MUMwMAorI2RlZmluZSBJMlNFTkQJCTB4MWZmZgorCisjZGVmaW5lIExPR0lXT0ZGU0VUCTB4MzAwMDAKKyNkZWZpbmUgTE9HSVdFTkQJMHgzN2ZmZgorCisjZGVmaW5lIE1MQ09SRU9GRlNFVAkweDQwMDAwCisjZGVmaW5lIE1MQ09SRUVORAkweDQzZmZmCisKKyNkZWZpbmUgRE1BT0ZGU0VUCTB4MDEwMDAwMDAKKyNkZWZpbmUgRE1BRU5ECQkweDAxM2ZmZmZmCisKKy8qIFNESEMwIGlzIHBsYWNlZCBpbiBQQ0kgYmFyIDEgKi8KKyNkZWZpbmUgU0RIQzBPRkZTRVQJMHgwMAorI2RlZmluZSBTREhDMEVORAkweGZmCisKKy8qIFNESEMxIGlzIHBsYWNlZCBpbiBQQ0kgYmFyIDIgKi8KKyNkZWZpbmUgU0RIQzFPRkZTRVQJMHgwMAorI2RlZmluZSBTREhDMUVORAkweGZmCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9USU1CCTB4MTBlZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJTUIJMHhhMTIzCisKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfSU5JQwkJMAorI2RlZmluZSBJUlFfVElNQkVSREFMRV9NTEIJCTEKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfR1BJTwkJMgorI2RlZmluZSBJUlFfVElNQkVSREFMRV9JMkMJCTMKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfVUFSVAkJNAorI2RlZmluZSBJUlFfVElNQkVSREFMRV9ETUEJCTUKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfSTJTCQk2CisjZGVmaW5lIElSUV9USU1CRVJEQUxFX1RTQ19JTlQJCTcKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfU0RIQwkJOAorI2RlZmluZSBJUlFfVElNQkVSREFMRV9BRFY3MTgwCQk5CisjZGVmaW5lIElSUV9USU1CRVJEQUxFX0VUSFNXX0lGCQkxMAorI2RlZmluZSBJUlFfVElNQkVSREFMRV9TUEkJCTExCisjZGVmaW5lIElSUV9USU1CRVJEQUxFX1VBUlRMSVRFCQkxMgorI2RlZmluZSBJUlFfVElNQkVSREFMRV9NTENPUkUJCTEzCisjZGVmaW5lIElSUV9USU1CRVJEQUxFX01MQ09SRV9CVUYJMTQKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfUkRTCQkxNQorI2RlZmluZSBUSU1CRVJEQUxFX05SX0lSUVMJCTE2CisKKyNkZWZpbmUgR1BJT19QSU5fQVNDQgkJOAorI2RlZmluZSBHUElPX1BJTl9JTklDX1JTVAkxNAorI2RlZmluZSBHUElPX1BJTl9CVF9SU1QJCTE1CisjZGVmaW5lIEdQSU9fTlJfUElOUwkJMTYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2wtY29yZS5jIGIvZHJpdmVycy9tZmQvdHdsLWNvcmUuYwppbmRleCAyYTc2MDY1Li4xOWE5MzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2wtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3R3bC1jb3JlLmMKQEAgLTExNSw3ICsxMTUsOCBAQAogI2RlZmluZSB0d2xfaGFzX3dhdGNoZG9nKCkgICAgICAgIGZhbHNlCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1RXTDQwMzBfQ09ERUMpIHx8IGRlZmluZWQoQ09ORklHX1RXTDQwMzBfQ09ERUNfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX1RXTDQwMzBfQ09ERUMpIHx8IGRlZmluZWQoQ09ORklHX1RXTDQwMzBfQ09ERUNfTU9EVUxFKSB8fFwKKwlkZWZpbmVkKENPTkZJR19TTkRfU09DX1RXTDYwMzApIHx8IGRlZmluZWQoQ09ORklHX1NORF9TT0NfVFdMNjAzMF9NT0RVTEUpCiAjZGVmaW5lIHR3bF9oYXNfY29kZWMoKQl0cnVlCiAjZWxzZQogI2RlZmluZSB0d2xfaGFzX2NvZGVjKCkJZmFsc2UKQEAgLTcxMSw4ICs3MTIsMTkgQEAKIAkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKIAl9CiAKLQlpZiAodHdsX2hhc19jb2RlYygpICYmIHBkYXRhLT5jb2RlYykgewotCQljaGlsZCA9IGFkZF9jaGlsZCgxLCAidHdsNDAzMF9jb2RlYyIsCisJaWYgKHR3bF9oYXNfY29kZWMoKSAmJiBwZGF0YS0+Y29kZWMgJiYgdHdsX2NsYXNzX2lzXzQwMzAoKSkgeworCQlzdWJfY2hpcF9pZCA9IHR3bF9tYXBbVFdMX01PRFVMRV9BVURJT19WT0lDRV0uc2lkOworCQljaGlsZCA9IGFkZF9jaGlsZChzdWJfY2hpcF9pZCwgInR3bDQwMzBfY29kZWMiLAorCQkJCXBkYXRhLT5jb2RlYywgc2l6ZW9mKCpwZGF0YS0+Y29kZWMpLAorCQkJCWZhbHNlLCAwLCAwKTsKKwkJaWYgKElTX0VSUihjaGlsZCkpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisJfQorCisJLyogUGhvZW5peCovCisJaWYgKHR3bF9oYXNfY29kZWMoKSAmJiBwZGF0YS0+Y29kZWMgJiYgdHdsX2NsYXNzX2lzXzYwMzAoKSkgeworCQlzdWJfY2hpcF9pZCA9IHR3bF9tYXBbVFdMX01PRFVMRV9BVURJT19WT0lDRV0uc2lkOworCQljaGlsZCA9IGFkZF9jaGlsZChzdWJfY2hpcF9pZCwgInR3bDYwMzBfY29kZWMiLAogCQkJCXBkYXRhLT5jb2RlYywgc2l6ZW9mKCpwZGF0YS0+Y29kZWMpLAogCQkJCWZhbHNlLCAwLCAwKTsKIAkJaWYgKElTX0VSUihjaGlsZCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMgYi9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMKaW5kZXggYjlmMWU4NC4uZTdmODAyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYwpAQCAtNzQsNiArNzQsOSBAQAogCX0KIAogCW1ycS0+Y21kLT5hcmcgPSBkZXZfYWRkcjsKKwlpZiAoIW1tY19jYXJkX2Jsb2NrYWRkcih0ZXN0LT5jYXJkKSkKKwkJbXJxLT5jbWQtPmFyZyA8PD0gOTsKKwogCW1ycS0+Y21kLT5mbGFncyA9IE1NQ19SU1BfUjEgfCBNTUNfQ01EX0FEVEM7CiAKIAlpZiAoYmxvY2tzID09IDEpCkBAIC0xOTAsNyArMTkzLDcgQEAKIAl9CiAKIAlmb3IgKGkgPSAwO2kgPCBCVUZGRVJfU0laRSAvIDUxMjtpKyspIHsKLQkJcmV0ID0gbW1jX3Rlc3RfYnVmZmVyX3RyYW5zZmVyKHRlc3QsIHRlc3QtPmJ1ZmZlciwgaSAqIDUxMiwgNTEyLCAxKTsKKwkJcmV0ID0gbW1jX3Rlc3RfYnVmZmVyX3RyYW5zZmVyKHRlc3QsIHRlc3QtPmJ1ZmZlciwgaSwgNTEyLCAxKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtMjE5LDcgKzIyMiw3IEBACiAJbWVtc2V0KHRlc3QtPmJ1ZmZlciwgMCwgNTEyKTsKIAogCWZvciAoaSA9IDA7aSA8IEJVRkZFUl9TSVpFIC8gNTEyO2krKykgewotCQlyZXQgPSBtbWNfdGVzdF9idWZmZXJfdHJhbnNmZXIodGVzdCwgdGVzdC0+YnVmZmVyLCBpICogNTEyLCA1MTIsIDEpOworCQlyZXQgPSBtbWNfdGVzdF9idWZmZXJfdHJhbnNmZXIodGVzdCwgdGVzdC0+YnVmZmVyLCBpLCA1MTIsIDEpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC00MjYsNyArNDI5LDcgQEAKIAkJZm9yIChpID0gMDtpIDwgc2VjdG9ycztpKyspIHsKIAkJCXJldCA9IG1tY190ZXN0X2J1ZmZlcl90cmFuc2Zlcih0ZXN0LAogCQkJCXRlc3QtPmJ1ZmZlciArIGkgKiA1MTIsCi0JCQkJZGV2X2FkZHIgKyBpICogNTEyLCA1MTIsIDApOworCQkJCWRldl9hZGRyICsgaSwgNTEyLCAwKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jIGIvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jCmluZGV4IGM1YTdhODUuLjM4MWZlMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYworKysgYi9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMKQEAgLTE1NCw5ICsxNTQsOCBAQAogCiAJCWlmIChtcS0+Ym91bmNlX2J1ZikgewogCQkJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChtcS0+cXVldWUsIEJMS19CT1VOQ0VfQU5ZKTsKLQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtcS0+cXVldWUsIGJvdW5jZXN6IC8gNTEyKTsKLQkJCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhtcS0+cXVldWUsIGJvdW5jZXN6IC8gNTEyKTsKLQkJCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMobXEtPnF1ZXVlLCBib3VuY2VzeiAvIDUxMik7CisJCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobXEtPnF1ZXVlLCBib3VuY2VzeiAvIDUxMik7CisJCQlibGtfcXVldWVfbWF4X3NlZ21lbnRzKG1xLT5xdWV1ZSwgYm91bmNlc3ogLyA1MTIpOwogCQkJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUobXEtPnF1ZXVlLCBib3VuY2Vzeik7CiAKIAkJCW1xLT5zZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCksCkBAIC0xODAsMTAgKzE3OSw5IEBACiAKIAlpZiAoIW1xLT5ib3VuY2VfYnVmKSB7CiAJCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQobXEtPnF1ZXVlLCBsaW1pdCk7Ci0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtcS0+cXVldWUsCisJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhtcS0+cXVldWUsCiAJCQltaW4oaG9zdC0+bWF4X2Jsa19jb3VudCwgaG9zdC0+bWF4X3JlcV9zaXplIC8gNTEyKSk7Ci0JCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhtcS0+cXVldWUsIGhvc3QtPm1heF9waHlzX3NlZ3MpOwotCQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKG1xLT5xdWV1ZSwgaG9zdC0+bWF4X2h3X3NlZ3MpOworCQlibGtfcXVldWVfbWF4X3NlZ21lbnRzKG1xLT5xdWV1ZSwgaG9zdC0+bWF4X2h3X3NlZ3MpOwogCQlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShtcS0+cXVldWUsIGhvc3QtPm1heF9zZWdfc2l6ZSk7CiAKIAkJbXEtPnNnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jCmluZGV4IGQzZjU1NjEuLjU3YjIxMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jCkBAIC02NTAsMTEgKzY1MCwxMSBAQAogCQkJCWZsYWdzID0gRERNQV9GTEFHU19JRTsKIAogCQkJaWYgKGhvc3QtPmZsYWdzICYgSE9TVF9GX1hNSVQpIHsKLQkJCQlyZXQgPSBhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZV9mbGFncyhjaGFubmVsLAotCQkJCQkodm9pZCAqKXNnX3ZpcnQoc2cpLCBsZW4sIGZsYWdzKTsKKwkJCQlyZXQgPSBhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShjaGFubmVsLAorCQkJCQlzZ19waHlzKHNnKSwgbGVuLCBmbGFncyk7CiAJCQl9IGVsc2UgewotCQkJCXJldCA9IGF1MXh4eF9kYmRtYV9wdXRfZGVzdF9mbGFncyhjaGFubmVsLAotCQkJCQkodm9pZCAqKXNnX3ZpcnQoc2cpLCBsZW4sIGZsYWdzKTsKKwkJCQlyZXQgPSBhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoY2hhbm5lbCwKKwkJCQkJc2dfcGh5cyhzZyksIGxlbiwgZmxhZ3MpOwogCQkJfQogCiAJCQlpZiAoIXJldCkKQEAgLTEwMTcsNiArMTAxNywxMCBAQAogCX0gZWxzZQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9ORUVEU19QT0xMOwogCisJLyogcGxhdGZvcm0gbWF5IG5vdCBiZSBhYmxlIHRvIHVzZSBhbGwgYWR2ZXJ0aXNlZCBjYXBzICovCisJaWYgKGhvc3QtPnBsYXRkYXRhKQorCQltbWMtPmNhcHMgJj0gfihob3N0LT5wbGF0ZGF0YS0+bWFza19ob3N0X2NhcHMpOworCiAJdGFza2xldF9pbml0KCZob3N0LT5kYXRhX3Rhc2ssIGF1MXhtbWNfdGFza2xldF9kYXRhLAogCQkJKHVuc2lnbmVkIGxvbmcpaG9zdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKaW5kZXggOTBkMTY4YS4uODRjMTAzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKQEAgLTIsNiArMiw3IEBACiAgKiAgbGludXgvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMgLSBBUk0gUHJpbWVDZWxsIE1NQ0kgUEwxODAvMSBkcml2ZXIKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIERlZXAgQmx1ZSBTb2x1dGlvbnMsIEx0ZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgU1QtRXJpY3Nzb24gQUIuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0zNCw5ICszNSw2IEBACiAKICNkZWZpbmUgRFJJVkVSX05BTUUgIm1tY2ktcGwxOHgiCiAKLSNkZWZpbmUgREJHKGhvc3QsZm10LGFyZ3MuLi4pCVwKLQlwcl9kZWJ1ZygiJXM6ICVzOiAiIGZtdCwgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIF9fZnVuY19fICwgYXJncykKLQogc3RhdGljIHVuc2lnbmVkIGludCBmbWF4ID0gNTE1NjMzOwogCiAvKgpAQCAtMTA1LDggKzEwMyw4IEBACiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCWludCBibGtzel9iaXRzOwogCi0JREJHKGhvc3QsICJibGtzeiAlMDR4IGJsa3MgJTA0eCBmbGFncyAlMDh4XG4iLAotCSAgICBkYXRhLT5ibGtzeiwgZGF0YS0+YmxvY2tzLCBkYXRhLT5mbGFncyk7CisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJibGtzeiAlMDR4IGJsa3MgJTA0eCBmbGFncyAlMDh4XG4iLAorCQlkYXRhLT5ibGtzeiwgZGF0YS0+YmxvY2tzLCBkYXRhLT5mbGFncyk7CiAKIAlob3N0LT5kYXRhID0gZGF0YTsKIAlob3N0LT5zaXplID0gZGF0YS0+Ymxrc3o7CkBAIC0xNTUsNyArMTUzLDcgQEAKIHsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSBob3N0LT5iYXNlOwogCi0JREJHKGhvc3QsICJvcCAlMDJ4IGFyZyAlMDh4IGZsYWdzICUwOHhcbiIsCisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJvcCAlMDJ4IGFyZyAlMDh4IGZsYWdzICUwOHhcbiIsCiAJICAgIGNtZC0+b3Bjb2RlLCBjbWQtPmFyZywgY21kLT5mbGFncyk7CiAKIAlpZiAocmVhZGwoYmFzZSArIE1NQ0lDT01NQU5EKSAmIE1DSV9DUFNNX0VOQUJMRSkgewpAQCAtMTg0LDggKzE4MiwyMCBAQAogewogCWlmIChzdGF0dXMgJiBNQ0lfREFUQUJMT0NLRU5EKSB7CiAJCWhvc3QtPmRhdGFfeGZlcmVkICs9IGRhdGEtPmJsa3N6OworI2lmZGVmIENPTkZJR19BUkNIX1UzMDAKKwkJLyoKKwkJICogT24gdGhlIFUzMDAgc29tZSBzaWduYWwgb3Igb3RoZXIgaXMKKwkJICogYmFkbHkgcm91dGVkIHNvIHRoYXQgYSBkYXRhIHdyaXRlIGRvZXMKKwkJICogbm90IHByb3Blcmx5IHRlcm1pbmF0ZSB3aXRoIGEgTUNJX0RBVEFFTkQKKwkJICogc3RhdHVzIGZsYWcuIFRoaXMgcXVpcmsgd2lsbCBtYWtlIHdyaXRlcworCQkgKiB3b3JrIGFnYWluLgorCQkgKi8KKwkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpCisJCQlzdGF0dXMgfD0gTUNJX0RBVEFFTkQ7CisjZW5kaWYKIAl9CiAJaWYgKHN0YXR1cyAmIChNQ0lfREFUQUNSQ0ZBSUx8TUNJX0RBVEFUSU1FT1VUfE1DSV9UWFVOREVSUlVOfE1DSV9SWE9WRVJSVU4pKSB7CisJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiTUNJIEVSUk9SIElSUSAoc3RhdHVzICUwOHgpXG4iLCBzdGF0dXMpOwogCQlpZiAoc3RhdHVzICYgTUNJX0RBVEFDUkNGQUlMKQogCQkJZGF0YS0+ZXJyb3IgPSAtRUlMU0VROwogCQllbHNlIGlmIChzdGF0dXMgJiBNQ0lfREFUQVRJTUVPVVQpCkBAIC0zMDcsNyArMzE3LDcgQEAKIAogCXN0YXR1cyA9IHJlYWRsKGJhc2UgKyBNTUNJU1RBVFVTKTsKIAotCURCRyhob3N0LCAiaXJxMSAlMDh4XG4iLCBzdGF0dXMpOworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiaXJxMSAocGlvKSAlMDh4XG4iLCBzdGF0dXMpOwogCiAJZG8gewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDAxLDcgKzQxMSw3IEBACiAJCXN0YXR1cyAmPSByZWFkbChob3N0LT5iYXNlICsgTU1DSU1BU0swKTsKIAkJd3JpdGVsKHN0YXR1cywgaG9zdC0+YmFzZSArIE1NQ0lDTEVBUik7CiAKLQkJREJHKGhvc3QsICJpcnEwICUwOHhcbiIsIHN0YXR1cyk7CisJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiaXJxMCAoZGF0YStjbWQpICUwOHhcbiIsIHN0YXR1cyk7CiAKIAkJZGF0YSA9IGhvc3QtPmRhdGE7CiAJCWlmIChzdGF0dXMgJiAoTUNJX0RBVEFDUkNGQUlMfE1DSV9EQVRBVElNRU9VVHxNQ0lfVFhVTkRFUlJVTnwKQEAgLTQyOCw4ICs0MzgsOCBAQAogCVdBUk5fT04oaG9zdC0+bXJxICE9IE5VTEwpOwogCiAJaWYgKG1ycS0+ZGF0YSAmJiAhaXNfcG93ZXJfb2ZfMihtcnEtPmRhdGEtPmJsa3N6KSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbnN1cHBvcnRlZCBibG9jayBzaXplICglZCBieXRlcylcbiIsCi0JCQltbWNfaG9zdG5hbWUobW1jKSwgbXJxLT5kYXRhLT5ibGtzeik7CisJCWRldl9lcnIobW1jX2RldihtbWMpLCAidW5zdXBwb3J0ZWQgYmxvY2sgc2l6ZSAoJWQgYnl0ZXMpXG4iLAorCQkJbXJxLT5kYXRhLT5ibGtzeik7CiAJCW1ycS0+Y21kLT5lcnJvciA9IC1FSU5WQUw7CiAJCW1tY19yZXF1ZXN0X2RvbmUobW1jLCBtcnEpOwogCQlyZXR1cm47CkBAIC01ODIsOCArNTkyLDggQEAKIAogCWhvc3QtPmh3X2Rlc2lnbmVyID0gYW1iYV9tYW5mKGRldik7CiAJaG9zdC0+aHdfcmV2aXNpb24gPSBhbWJhX3JldihkZXYpOwotCURCRyhob3N0LCAiZGVzaWduZXIgSUQgPSAweCUwMnhcbiIsIGhvc3QtPmh3X2Rlc2lnbmVyKTsKLQlEQkcoaG9zdCwgInJldmlzaW9uID0gMHglMDF4XG4iLCBob3N0LT5od19yZXZpc2lvbik7CisJZGV2X2RiZyhtbWNfZGV2KG1tYyksICJkZXNpZ25lciBJRCA9IDB4JTAyeFxuIiwgaG9zdC0+aHdfZGVzaWduZXIpOworCWRldl9kYmcobW1jX2RldihtbWMpLCAicmV2aXNpb24gPSAweCUwMXhcbiIsIGhvc3QtPmh3X3JldmlzaW9uKTsKIAogCWhvc3QtPmNsayA9IGNsa19nZXQoJmRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKGhvc3QtPmNsaykpIHsKQEAgLTYwOCw3ICs2MTgsOCBAQAogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gY2xrX2Rpc2FibGU7CiAJCWhvc3QtPm1jbGsgPSBjbGtfZ2V0X3JhdGUoaG9zdC0+Y2xrKTsKLQkJREJHKGhvc3QsICJldmVudHVhbCBtY2xrIHJhdGU6ICV1IEh6XG4iLCBob3N0LT5tY2xrKTsKKwkJZGV2X2RiZyhtbWNfZGV2KG1tYyksICJldmVudHVhbCBtY2xrIHJhdGU6ICV1IEh6XG4iLAorCQkJaG9zdC0+bWNsayk7CiAJfQogCWhvc3QtPmJhc2UgPSBpb3JlbWFwKGRldi0+cmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZkZXYtPnJlcykpOwogCWlmICghaG9zdC0+YmFzZSkgewpAQCAtNjE5LDYgKzYzMCw4IEBACiAJbW1jLT5vcHMgPSAmbW1jaV9vcHM7CiAJbW1jLT5mX21pbiA9IChob3N0LT5tY2xrICsgNTExKSAvIDUxMjsKIAltbWMtPmZfbWF4ID0gbWluKGhvc3QtPm1jbGssIGZtYXgpOworCWRldl9kYmcobW1jX2RldihtbWMpLCAiY2xvY2tpbmcgYmxvY2sgYXQgJXUgSHpcbiIsIG1tYy0+Zl9tYXgpOworCiAjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgogCS8qIElmIHdlJ3JlIHVzaW5nIHRoZSByZWd1bGF0b3IgZnJhbWV3b3JrLCB0cnkgdG8gZmV0Y2ggYSByZWd1bGF0b3IgKi8KIAlob3N0LT52Y2MgPSByZWd1bGF0b3JfZ2V0KCZkZXYtPmRldiwgInZtbWMiKTsKQEAgLTcxMiw3ICs3MjUsNyBAQAogCiAJbW1jX2FkZF9ob3N0KG1tYyk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogTU1DSSByZXYgJXggY2ZnICUwMnggYXQgMHglMDE2bGx4IGlycSAlZCwlZFxuIiwKKwlkZXZfaW5mbygmZGV2LT5kZXYsICIlczogTU1DSSByZXYgJXggY2ZnICUwMnggYXQgMHglMDE2bGx4IGlycSAlZCwlZFxuIiwKIAkJbW1jX2hvc3RuYW1lKG1tYyksIGFtYmFfcmV2KGRldiksIGFtYmFfY29uZmlnKGRldiksCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpZGV2LT5yZXMuc3RhcnQsIGRldi0+aXJxWzBdLCBkZXYtPmlycVsxXSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCAyZGUwY2M4Li4yYmIwM2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC0yNTEsMTIgKzI1MSw2IEBACiAJaGVscAogCSAgU3VwcG9ydCBmb3IgZmxhc2ggY2hpcHMgb24gTkVUdGVsL1NlY3VyZUVkZ2UvU25hcEdlYXIgYm9hcmRzLgogCi1jb25maWcgTVREX0FMQ0hFTVkKLQl0cmlzdGF0ZSAiQU1EIEFsY2hlbXkgUGIxeHh4L0RiMXh4eC9SREsgTVREIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT0NfQVUxWDAwICYmIE1URF9QQVJUSVRJT05TICYmIE1URF9DRkkKLQloZWxwCi0JICBGbGFzaCBtZW1vcnkgYWNjZXNzIG9uIEFNRCBBbGNoZW15IFBiL0RiL1JESyBSZWZlcmVuY2UgQm9hcmRzCi0KIGNvbmZpZyBNVERfRElMTkVUUEMKIAl0cmlzdGF0ZSAiQ0ZJIEZsYXNoIGRldmljZSBtYXBwZWQgb24gRElML05ldCBQQyIKIAlkZXBlbmRzIG9uIFg4NiAmJiBNVERfQ09OQ0FUICYmIE1URF9QQVJUSVRJT05TICYmIE1URF9DRklfSU5URUxFWFQgJiYgQlJPS0VOCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQppbmRleCBjZTMxNTIxLi5hNDQ5MTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKQEAgLTQwLDcgKzQwLDYgQEAKIG9iai0kKENPTkZJR19NVERfREJPWDIpCQkrPSBkYm94Mi1mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX1NPTFVUSU9ORU5HSU5FKSs9IHNvbHV0aW9uZW5naW5lLm8KIG9iai0kKENPTkZJR19NVERfUENJKQkJKz0gcGNpLm8KLW9iai0kKENPTkZJR19NVERfQUxDSEVNWSkgICAgICAgKz0gYWxjaGVteS1mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX0FVVENQVTEyKQkrPSBhdXRjcHUxMi1udnJhbS5vCiBvYmotJChDT05GSUdfTVREX0VEQjczMTIpCSs9IGVkYjczMTIubwogb2JqLSQoQ09ORklHX01URF9JTVBBNykJCSs9IGltcGE3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvYWxjaGVteS1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9hbGNoZW15LWZsYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NWFkNGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9hbGNoZW15LWZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoKLSAqIEZsYXNoIG1lbW9yeSBhY2Nlc3Mgb24gQU1EIEFsY2hlbXkgZXZhbHVhdGlvbiBib2FyZHMKLSAqCi0gKiAoQykgMjAwMywgMjAwNCBQZXRlIFBvcG92IDxwcG9wb3ZAZW1iZWRkZWRhbGxleS5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotCi0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpZmRlZiBDT05GSUdfTUlQU19QQjEwMDAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIlBiMTAwMCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDAwODAwMDAwIC8qIDhNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCA0IC8qIDMyLWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxNTAwCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJQYjE1MDAgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwNDAwMDAwMCAvKiA2NE1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDQgLyogMzItYml0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19QQjExMDAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIlBiMTEwMCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDA0MDAwMDAwIC8qIDY0TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX1BCMTU1MAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiUGIxNTUwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDgwMDAwMDAgLyogMTI4TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX1BCMTIwMAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiUGIxMjAwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDgwMDAwMDAgLyogMTI4TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggMiAvKiAxNi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTAwMAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiRGIxMDAwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDIwMDAwMDAgLyogMzJNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCA0IC8qIDMyLWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfREIxNTAwCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJEYjE1MDAgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwMjAwMDAwMCAvKiAzMk1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDQgLyogMzItYml0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19EQjExMDAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIkRiMTEwMCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDAyMDAwMDAwIC8qIDMyTUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTU1MAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiRGIxNTUwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDgwMDAwMDAgLyogMTI4TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTIwMAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiRGIxMjAwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDQwMDAwMDAgLyogNjRNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCAyIC8qIDE2LWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIkJvc3BvcnVzIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDEwMDAwMDAgLyogMTZNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCAyIC8qIDE2LWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfTUlSQUdFCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJNaXJhZ2UgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwNDAwMDAwMCAvKiA2NE1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDQgLyogMzItYml0cyAqLwotI2RlZmluZSBVU0VfTE9DQUxfQUNDRVNTT1JTIC8qIHdoeT8gKi8KLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IG1hcF9pbmZvIGFsY2hlbXlfbWFwID0gewotCS5uYW1lID0JQk9BUkRfTUFQX05BTUUsCi19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYWxjaGVteV9wYXJ0aXRpb25zW10gPSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgICAgICAubmFtZSA9ICJVc2VyIEZTIiwKLSAgICAgICAgICAgICAgICAuc2l6ZSA9IEJPQVJEX0ZMQVNIX1NJWkUgLSAweDAwNDAwMDAwLAotICAgICAgICAgICAgICAgIC5vZmZzZXQgPSAweDAwMDAwMDAKLSAgICAgICAgfSx7Ci0gICAgICAgICAgICAgICAgLm5hbWUgPSAiWUFNT04iLAotICAgICAgICAgICAgICAgIC5zaXplID0gMHgwMTAwMDAwLAotCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAotICAgICAgICAgICAgICAgIC5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRQotICAgICAgICB9LHsKLSAgICAgICAgICAgICAgICAubmFtZSA9ICJyYXcga2VybmVsIiwKLQkJLnNpemUgPSAoMHgzMDAwMDAgLSAweDQwMDAwKSwgLyogbGFzdCAyNTZLQiBpcyB5YW1vbiBlbnYgKi8KLQkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKLSAgICAgICAgfQotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqbXltdGQ7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFsY2hlbXlfbXRkX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7Ci0JaW50IG5iX3BhcnRzID0gMDsKLQl1bnNpZ25lZCBsb25nIHdpbmRvd19hZGRyOwotCXVuc2lnbmVkIGxvbmcgd2luZG93X3NpemU7Ci0KLQkvKiBEZWZhdWx0IGZsYXNoIGJ1c3dpZHRoICovCi0JYWxjaGVteV9tYXAuYmFua3dpZHRoID0gQk9BUkRfRkxBU0hfV0lEVEg7Ci0KLQl3aW5kb3dfYWRkciA9IDB4MjAwMDAwMDAgLSBCT0FSRF9GTEFTSF9TSVpFOwotCXdpbmRvd19zaXplID0gQk9BUkRfRkxBU0hfU0laRTsKLQotCS8qCi0JICogU3RhdGljIHBhcnRpdGlvbiBkZWZpbml0aW9uIHNlbGVjdGlvbgotCSAqLwotCXBhcnRzID0gYWxjaGVteV9wYXJ0aXRpb25zOwotCW5iX3BhcnRzID0gQVJSQVlfU0laRShhbGNoZW15X3BhcnRpdGlvbnMpOwotCWFsY2hlbXlfbWFwLnNpemUgPSB3aW5kb3dfc2l6ZTsKLQotCS8qCi0JICogTm93IGxldCdzIHByb2JlIGZvciB0aGUgYWN0dWFsIGZsYXNoLiAgRG8gaXQgaGVyZSBzaW5jZQotCSAqIHNwZWNpZmljIG1hY2hpbmUgc2V0dGluZ3MgbWlnaHQgaGF2ZSBiZWVuIHNldCBhYm92ZS4KLQkgKi8KLQlwcmludGsoS0VSTl9OT1RJQ0UgQk9BUkRfTUFQX05BTUUgIjogcHJvYmluZyAlZC1iaXQgZmxhc2ggYnVzXG4iLAotCQkJYWxjaGVteV9tYXAuYmFua3dpZHRoKjgpOwotCWFsY2hlbXlfbWFwLnZpcnQgPSBpb3JlbWFwKHdpbmRvd19hZGRyLCB3aW5kb3dfc2l6ZSk7Ci0JbXltdGQgPSBkb19tYXBfcHJvYmUoImNmaV9wcm9iZSIsICZhbGNoZW15X21hcCk7Ci0JaWYgKCFteW10ZCkgewotCQlpb3VubWFwKGFsY2hlbXlfbWFwLnZpcnQpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQlteW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQotCWFkZF9tdGRfcGFydGl0aW9ucyhteW10ZCwgcGFydHMsIG5iX3BhcnRzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFsY2hlbXlfbXRkX2NsZWFudXAodm9pZCkKLXsKLQlpZiAobXltdGQpIHsKLQkJZGVsX210ZF9wYXJ0aXRpb25zKG15bXRkKTsKLQkJbWFwX2Rlc3Ryb3kobXltdGQpOwotCQlpb3VubWFwKGFsY2hlbXlfbWFwLnZpcnQpOwotCX0KLX0KLQotbW9kdWxlX2luaXQoYWxjaGVteV9tdGRfaW5pdCk7Ci1tb2R1bGVfZXhpdChhbGNoZW15X210ZF9jbGVhbnVwKTsKLQotTU9EVUxFX0FVVEhPUigiRW1iZWRkZWQgQWxsZXkgU29sdXRpb25zLCBJbmMiKTsKLU1PRFVMRV9ERVNDUklQVElPTihCT0FSRF9NQVBfTkFNRSAiIE1URCBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwppbmRleCA2NzdjZDUzLi5iYjY0NjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCkBAIC00NTcsMTAgKzQ1NywxMCBAQAogCiBjb25maWcgTVREX05BTkRfU0hfRkxDVEwKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBvbiBSZW5lc2FzIFN1cGVySCBGTENUTCIKLQlkZXBlbmRzIG9uIE1URF9OQU5EICYmIFNVUEVSSCAmJiBDUFVfU1VCVFlQRV9TSDc3MjMKKwlkZXBlbmRzIG9uIE1URF9OQU5EICYmIFNVUEVSSAogCWhlbHAKIAkgIFNldmVyYWwgUmVuZXNhcyBTdXBlckggQ1BVIGhhcyBGTENUTC4gVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0Ci0JICBmb3IgTkFORCBGbGFzaCB1c2luZyBGTENUTC4gVGhpcyBkcml2ZXIgc3VwcG9ydCBTSDc3MjMuCisJICBmb3IgTkFORCBGbGFzaCB1c2luZyBGTENUTC4KIAogY29uZmlnIE1URF9OQU5EX0RBVklOQ0kKICAgICAgICAgdHJpc3RhdGUgIlN1cHBvcnQgTkFORCBvbiBEYVZpbmNpIFNvQyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYwppbmRleCA5MmMzMzRmLi40M2Q0NmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KIAogLyoKICAqIE1URCBzdHJ1Y3R1cmUgZm9yIE5BTkQgY29udHJvbGxlcgpAQCAtNDc1LDcgKzQ3Niw4IEBACiAJLyogc2V0IGdwaW8yMDYgaGlnaCAqLwogCWF1X3dyaXRlbChhdV9yZWFkbChHUElPMl9ESVIpICYgfigxIDw8IDYpLCBHUElPMl9ESVIpOwogCi0JYm9vdF9zd2FwYm9vdCA9IChhdV9yZWFkbChNRU1fU1RTVEFUKSAmICgweDcgPDwgMSkpIHwgKChiY3NyLT5zdGF0dXMgPj4gNikgJiAweDEpOworCWJvb3Rfc3dhcGJvb3QgPSAoYXVfcmVhZGwoTUVNX1NUU1RBVCkgJiAoMHg3IDw8IDEpKSB8ICgoYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSA+PiA2KSAmIDB4MSk7CisKIAlzd2l0Y2ggKGJvb3Rfc3dhcGJvb3QpIHsKIAljYXNlIDA6CiAJY2FzZSAyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jIGIvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jCmluZGV4IDAyYmVmMjEuLjE4NDJkZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3NoX2ZsY3RsLmMKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBTdXBlckggRkxDVEwgbmFuZCBjb250cm9sbGVyCiAgKgotICogQ29weXJpZ2h0IMKpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KLSAqIENvcHlyaWdodCDCqSAyMDA4IEF0b20gQ3JlYXRlIEVuZ2luZWVyaW5nIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRvbSBDcmVhdGUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCiAgKgotICogQmFzZWQgb24gZnNsX2VsYmNfbmFuZC5jLCBDb3B5cmlnaHQgwqkgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yCisgKiBCYXNlZCBvbiBmc2xfZWxiY19uYW5kLmMsIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC03NSw2ICs3NSwxMSBAQAogCXdyaXRlYihUUlNUUlQsIEZMVFJDUihmbGN0bCkpOwogfQogCitzdGF0aWMgdm9pZCB0aW1lb3V0X2Vycm9yKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlkZXZfZXJyKCZmbGN0bC0+cGRldi0+ZGV2LCAiVGltZW91dCBvY2N1cmVkIGluICVzXG4iLCBzdHIpOworfQorCiBzdGF0aWMgdm9pZCB3YWl0X2NvbXBsZXRpb24oc3RydWN0IHNoX2ZsY3RsICpmbGN0bCkKIHsKIAl1aW50MzJfdCB0aW1lb3V0ID0gTE9PUF9USU1FT1VUX01BWDsKQEAgLTg3LDcgKzkyLDcgQEAKIAkJdWRlbGF5KDEpOwogCX0KIAotCXByaW50ayhLRVJOX0VSUiAid2FpdF9jb21wbGV0aW9uKCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXRpbWVvdXRfZXJyb3IoZmxjdGwsIF9fZnVuY19fKTsKIAl3cml0ZWIoMHgwLCBGTFRSQ1IoZmxjdGwpKTsKIH0KIApAQCAtMTAwLDYgKzEwNSw4IEBACiAJCWFkZHIgPSBwYWdlX2FkZHI7CS8qIEVSQVNFMSAqLwogCX0gZWxzZSBpZiAocGFnZV9hZGRyICE9IC0xKSB7CiAJCS8qIFNFUUlOLCBSRUFEMCwgZXRjLi4gKi8KKwkJaWYgKGZsY3RsLT5jaGlwLm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQorCQkJY29sdW1uID4+PSAxOwogCQlpZiAoZmxjdGwtPnBhZ2Vfc2l6ZSkgewogCQkJYWRkciA9IGNvbHVtbiAmIDB4MEZGRjsKIAkJCWFkZHIgfD0gKHBhZ2VfYWRkciAmIDB4ZmYpIDw8IDE2OwpAQCAtMTMyLDcgKzEzOSw3IEBACiAJCQlyZXR1cm47CiAJCXVkZWxheSgxKTsKIAl9Ci0JcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3JmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXRpbWVvdXRfZXJyb3IoZmxjdGwsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIHZvaWQgd2FpdF93Zmlmb19yZWFkeShzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQpAQCAtMTQ2LDcgKzE1Myw3IEBACiAJCQlyZXR1cm47CiAJCXVkZWxheSgxKTsKIAl9Ci0JcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3dmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXRpbWVvdXRfZXJyb3IoZmxjdGwsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIGludCB3YWl0X3JlY2ZpZm9fcmVhZHkoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgaW50IHNlY3Rvcl9udW1iZXIpCkBAIC0xOTgsNyArMjA1LDcgQEAKIAkJd3JpdGVsKDAsIEZMNEVDQ0NSKGZsY3RsKSk7CiAJfQogCi0JcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3JlY2ZpZm9fcmVhZHkoKTogVGltZW91dCBvY2N1cmVkIFxuIik7CisJdGltZW91dF9lcnJvcihmbGN0bCwgX19mdW5jX18pOwogCXJldHVybiAxOwkvKiB0aW1lb3V0ICovCiB9CiAKQEAgLTIxNCw3ICsyMjEsNyBAQAogCQkJcmV0dXJuOwogCQl1ZGVsYXkoMSk7CiAJfQotCXByaW50ayhLRVJOX0VSUiAid2FpdF93ZWNmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXRpbWVvdXRfZXJyb3IoZmxjdGwsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIHZvaWQgcmVhZF9kYXRhcmVnKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwsIGludCBvZmZzZXQpCkBAIC0yNzUsNyArMjgyLDcgQEAKIHN0YXRpYyB2b2lkIHNldF9jbWRfcmVncyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDMyX3QgY21kLCB1aW50MzJfdCBmbGNtY2RyX3ZhbCkKIHsKIAlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7Ci0JdWludDMyX3QgZmxjbW5jcl92YWwgPSByZWFkbChGTENNTkNSKGZsY3RsKSk7CisJdWludDMyX3QgZmxjbW5jcl92YWwgPSByZWFkbChGTENNTkNSKGZsY3RsKSkgJiB+U0VMXzE2QklUOwogCXVpbnQzMl90IGZsY21kY3JfdmFsLCBhZGRyX2xlbl9ieXRlcyA9IDA7CiAKIAkvKiBTZXQgU05BTkQgYml0IGlmIHBhZ2Ugc2l6ZSBpcyAyMDQ4Ynl0ZSAqLwpAQCAtMjk3LDYgKzMwNCw4IEBACiAJY2FzZSBOQU5EX0NNRF9SRUFET09COgogCQlhZGRyX2xlbl9ieXRlcyA9IGZsY3RsLT5yd19BRFJDTlQ7CiAJCWZsY21kY3JfdmFsIHw9IENEU1JDX0U7CisJCWlmIChmbGN0bC0+Y2hpcC5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKKwkJCWZsY21uY3JfdmFsIHw9IFNFTF8xNkJJVDsKIAkJYnJlYWs7CiAJY2FzZSBOQU5EX0NNRF9TRVFJTjoKIAkJLyogVGhpcyBjYXNlIGlzIHRoYXQgY21kIGlzIFJFQUQwIG9yIFJFQUQxIG9yIFJFQUQwMCAqLwpAQCAtMzA1LDYgKzMxNCw4IEBACiAJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKIAkJYWRkcl9sZW5fYnl0ZXMgPSBmbGN0bC0+cndfQURSQ05UOwogCQlmbGNtZGNyX3ZhbCB8PSBET0NNRDJfRSB8IENEU1JDX0UgfCBTRUxSVzsKKwkJaWYgKGZsY3RsLT5jaGlwLm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQorCQkJZmxjbW5jcl92YWwgfD0gU0VMXzE2QklUOwogCQlicmVhazsKIAljYXNlIE5BTkRfQ01EX1JFQURJRDoKIAkJZmxjbW5jcl92YWwgJj0gflNOQU5EX0U7CkBAIC01MjMsNiArNTM0LDggQEAKIAkJc2V0X2FkZHIobXRkLCAwLCBwYWdlX2FkZHIpOwogCiAJCWZsY3RsLT5yZWFkX2J5dGVzID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7CisJCWlmIChmbGN0bC0+Y2hpcC5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKKwkJCWNvbHVtbiA+Pj0gMTsKIAkJZmxjdGwtPmluZGV4ICs9IGNvbHVtbjsKIAkJZ290byByZWFkX25vcm1hbF9leGl0OwogCkBAIC02ODYsNiArNjk5LDE4IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKK3N0YXRpYyB1aW50MTZfdCBmbGN0bF9yZWFkX3dvcmQoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisgICAgICAgc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworICAgICAgIGludCBpbmRleCA9IGZsY3RsLT5pbmRleDsKKyAgICAgICB1aW50MTZfdCBkYXRhOworICAgICAgIHVpbnQxNl90ICpidWYgPSAodWludDE2X3QgKikmZmxjdGwtPmRvbmVfYnVmZltpbmRleF07CisKKyAgICAgICBkYXRhID0gKmJ1ZjsKKyAgICAgICBmbGN0bC0+aW5kZXggKz0gMjsKKyAgICAgICByZXR1cm4gZGF0YTsKK30KKwogc3RhdGljIHZvaWQgZmxjdGxfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKQEAgLTc2OSwzOCArNzk0LDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGZsY3RsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBmbGN0bF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGw7CiAJc3RydWN0IG10ZF9pbmZvICpmbGN0bF9tdGQ7CiAJc3RydWN0IG5hbmRfY2hpcCAqbmFuZDsKIAlzdHJ1Y3Qgc2hfZmxjdGxfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLUVOWElPOwogCiAJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpZiAocGRhdGEgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInNoX2ZsY3RsIHBsYXRmb3JtX2RhdGEgbm90IGZvdW5kLlxuIik7Ci0JCXJldHVybiAtRU5PREVWOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIGRlZmluZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlmbGN0bCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaF9mbGN0bCksIEdGUF9LRVJORUwpOwogCWlmICghZmxjdGwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgTkFORCBNVEQgZGV2IHN0cnVjdHVyZS5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgZHJpdmVyIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlc291cmNlIG5vdCBmb3VuZC5cbiIsIF9fZnVuY19fKTsKLQkJcmV0ID0gLUVOT0RFVjsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJL08gbWVtb3J5XG4iKTsKIAkJZ290byBlcnI7CiAJfQogCi0JZmxjdGwtPnJlZyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJZmxjdGwtPnJlZyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoZmxjdGwtPnJlZyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGlvcmVtYXAgZXJyb3IuXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldCA9IC1FTk9NRU07CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZW1hcCBJL08gbWVtb3J5XG4iKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC04MDgsNiArODMxLDcgQEAKIAlmbGN0bF9tdGQgPSAmZmxjdGwtPm10ZDsKIAluYW5kID0gJmZsY3RsLT5jaGlwOwogCWZsY3RsX210ZC0+cHJpdiA9IG5hbmQ7CisJZmxjdGwtPnBkZXYgPSBwZGV2OwogCWZsY3RsLT5od2VjYyA9IHBkYXRhLT5oYXNfaHdlY2M7CiAKIAlmbGN0bF9yZWdpc3Rlcl9pbml0KGZsY3RsLCBwZGF0YS0+ZmxjbW5jcl92YWwpOwpAQCAtODI1LDYgKzg0OSwxMSBAQAogCW5hbmQtPnNlbGVjdF9jaGlwID0gZmxjdGxfc2VsZWN0X2NoaXA7CiAJbmFuZC0+Y21kZnVuYyA9IGZsY3RsX2NtZGZ1bmM7CiAKKwlpZiAocGRhdGEtPmZsY21uY3JfdmFsICYgU0VMXzE2QklUKSB7CisJCW5hbmQtPm9wdGlvbnMgfD0gTkFORF9CVVNXSURUSF8xNjsKKwkJbmFuZC0+cmVhZF93b3JkID0gZmxjdGxfcmVhZF93b3JkOworCX0KKwogCXJldCA9IG5hbmRfc2Nhbl9pZGVudChmbGN0bF9tdGQsIDEpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwpAQCAtODQ2LDcgKzg3NSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgZmxjdGxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBmbGN0bF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwppbmRleCA2YmFjMDQ2Li42ZTVhNjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgpAQCAtNjMsNiArNjQsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogI2luY2x1ZGUgPGF1MTAwMC5oPgorI2luY2x1ZGUgPGF1MXh4eF9ldGguaD4KICNpbmNsdWRlIDxwcm9tLmg+CiAKICNpbmNsdWRlICJhdTEwMDBfZXRoLmgiCkBAIC0xMTIsMTUgKzExNCwxNSBAQAogICoKICAqIFBIWSBkZXRlY3Rpb24gYWxnb3JpdGhtCiAgKgotICogSWYgQVUxWFhYX1BIWV9TVEFUSUNfQ09ORklHIGlzIHVuZGVmaW5lZCwgdGhlIFBIWSBzZXR1cCBpcworICogSWYgcGh5X3N0YXRpY19jb25maWcgaXMgdW5kZWZpbmVkLCB0aGUgUEhZIHNldHVwIGlzCiAgKiBhdXRvZGV0ZWN0ZWQ6CiAgKgogICogbWlpX3Byb2JlKCkgZmlyc3Qgc2VhcmNoZXMgdGhlIGN1cnJlbnQgTUFDJ3MgTUlJIGJ1cyBmb3IgYSBQSFksCi0gKiBzZWxlY3RpbmcgdGhlIGZpcnN0IChvciBsYXN0LCBpZiBBVTFYWFhfUEhZX1NFQVJDSF9ISUdIRVNUX0FERFIgaXMKKyAqIHNlbGVjdGluZyB0aGUgZmlyc3QgKG9yIGxhc3QsIGlmIHBoeV9zZWFyY2hfaGlnaGVzdF9hZGRyIGlzCiAgKiBkZWZpbmVkKSBQSFkgYWRkcmVzcyBub3QgYWxyZWFkeSBjbGFpbWVkIGJ5IGFub3RoZXIgbmV0ZGV2LgogICoKICAqIElmIG5vdGhpbmcgd2FzIGZvdW5kIHRoYXQgd2F5IHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgMm5kIGV0aGVybmV0Ci0gKiBjb250cm9sbGVyJ3MgUEhZIGFuZCBBVTFYWFhfUEhZMV9TRUFSQ0hfT05fTUFDMCBpcyBkZWZpbmVkLCB0aGVuCisgKiBjb250cm9sbGVyJ3MgUEhZIGFuZCBwaHkxX3NlYXJjaF9tYWMwIGlzIGRlZmluZWQsIHRoZW4KICAqIHRoZSBmaXJzdCBNSUkgYnVzIGlzIHNlYXJjaGVkIGFzIHdlbGwgZm9yIGFuIHVuY2xhaW1lZCBQSFk7IHRoaXMgaXMKICAqIG5lZWRlZCBpbiBjYXNlIG9mIGEgZHVhbC1QSFkgYWNjZXNzaWJsZSBvbmx5IHRocm91Z2ggdGhlIE1BQzAncyBNSUkKICAqIGJ1cy4KQEAgLTEyOSw5ICsxMzEsNyBAQAogICogY29udHJvbGxlciBpcyBub3QgcmVnaXN0ZXJlZCB0byB0aGUgbmV0d29yayBzdWJzeXN0ZW0uCiAgKi8KIAotLyogYXV0b2RldGVjdGlvbiBkZWZhdWx0cyAqLwotI3VuZGVmICBBVTFYWFhfUEhZX1NFQVJDSF9ISUdIRVNUX0FERFIKLSNkZWZpbmUgQVUxWFhYX1BIWTFfU0VBUkNIX09OX01BQzAKKy8qIGF1dG9kZXRlY3Rpb24gZGVmYXVsdHM6IHBoeTFfc2VhcmNoX21hYzAgKi8KIAogLyogc3RhdGljIFBIWSBzZXR1cAogICoKQEAgLTE0OCwyOSArMTQ4LDYgQEAKICAqIHNwZWNpZmljIGlycS1tYXAKICAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19CT1NQT1JVUykKLS8qCi0gKiBNaWNyZWwvS2VuZGluIDUgcG9ydCBzd2l0Y2ggYXR0YWNoZWQgdG8gTUFDMCwKLSAqIE1BQzAgaXMgYXNzb2NpYXRlZCB3aXRoIFBIWSBhZGRyZXNzIDUgKD09IFdBTiBwb3J0KQotICogTUFDMSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBQSFksIHNpbmNlIGl0J3MgY29ubmVjdGVkIGRpcmVjdGx5Ci0gKiB0byB0aGUgc3dpdGNoLgotICogbm8gaW50ZXJydXB0cyBhcmUgdXNlZAotICovCi0jIGRlZmluZSBBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcKLQotIyBkZWZpbmUgQVUxWFhYX1BIWTBfQUREUiAgNQotIyBkZWZpbmUgQVUxWFhYX1BIWTBfQlVTSUQgMAotIyAgdW5kZWYgQVUxWFhYX1BIWTBfSVJRCi0KLSMgIHVuZGVmIEFVMVhYWF9QSFkxX0FERFIKLSMgIHVuZGVmIEFVMVhYWF9QSFkxX0JVU0lECi0jICB1bmRlZiBBVTFYWFhfUEhZMV9JUlEKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChBVTFYWFhfUEhZMF9CVVNJRCkgJiYgKEFVMVhYWF9QSFkwX0JVU0lEID4gMCkKLSMgZXJyb3IgTUFDMC1hc3NvY2lhdGVkIFBIWSBhdHRhY2hlZCAybmQgTUFDcyBNSUkgYnVzIG5vdCBzdXBwb3J0ZWQgeWV0Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgZW5hYmxlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZm9yY2VfcmVzZXQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM5MCw2NyArMzY3LDU1IEBACiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICpjb25zdCBhdXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBOVUxMOwogCi0jaWYgZGVmaW5lZChBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcpCi0JQlVHX09OKGF1cC0+bWFjX2lkIDwgMCB8fCBhdXAtPm1hY19pZCA+IDEpOworCWlmIChhdXAtPnBoeV9zdGF0aWNfY29uZmlnKSB7CisJCUJVR19PTihhdXAtPm1hY19pZCA8IDAgfHwgYXVwLT5tYWNfaWQgPiAxKTsKIAotCWlmKGF1cC0+bWFjX2lkID09IDApIHsgLyogZ2V0IFBIWTAgKi8KLSMgaWYgZGVmaW5lZChBVTFYWFhfUEhZMF9BRERSKQotCQlwaHlkZXYgPSBhdV9tYWNzW0FVMVhYWF9QSFkwX0JVU0lEXS0+bWlpX2J1cy0+cGh5X21hcFtBVTFYWFhfUEhZMF9BRERSXTsKLSMgZWxzZQotCQlwcmludGsgKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiVzOiB1c2luZyBQSFktbGVzcyBzZXR1cFxuIiwKLQkJCWRldi0+bmFtZSk7CisJCWlmIChhdXAtPnBoeV9hZGRyKQorCQkJcGh5ZGV2ID0gYXVwLT5taWlfYnVzLT5waHlfbWFwW2F1cC0+cGh5X2FkZHJdOworCQllbHNlCisJCQlwcmludGsgKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiVzOiB1c2luZyBQSFktbGVzcyBzZXR1cFxuIiwKKwkJCQlkZXYtPm5hbWUpOwogCQlyZXR1cm4gMDsKLSMgZW5kaWYgLyogZGVmaW5lZChBVTFYWFhfUEhZMF9BRERSKSAqLwotCX0gZWxzZSBpZiAoYXVwLT5tYWNfaWQgPT0gMSkgeyAvKiBnZXQgUEhZMSAqLwotIyBpZiBkZWZpbmVkKEFVMVhYWF9QSFkxX0FERFIpCi0JCXBoeWRldiA9IGF1X21hY3NbQVUxWFhYX1BIWTFfQlVTSURdLT5taWlfYnVzLT5waHlfbWFwW0FVMVhYWF9QSFkxX0FERFJdOwotIyBlbHNlCi0JCXByaW50ayAoS0VSTl9JTkZPIERSVl9OQU1FICI6JXM6IHVzaW5nIFBIWS1sZXNzIHNldHVwXG4iLAotCQkJZGV2LT5uYW1lKTsKLQkJcmV0dXJuIDA7Ci0jIGVuZGlmIC8qIGRlZmluZWQoQVUxWFhYX1BIWTFfQUREUikgKi8KLQl9CisJfSBlbHNlIHsKKwkJaW50IHBoeV9hZGRyOwogCi0jZWxzZSAvKiBkZWZpbmVkKEFVMVhYWF9QSFlfU1RBVElDX0NPTkZJRykgKi8KLQlpbnQgcGh5X2FkZHI7CisJCS8qIGZpbmQgdGhlIGZpcnN0IChsb3dlc3QgYWRkcmVzcykgUEhZIG9uIHRoZSBjdXJyZW50IE1BQydzIE1JSSBidXMgKi8KKwkJZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKQorCQkJaWYgKGF1cC0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl0pIHsKKwkJCQlwaHlkZXYgPSBhdXAtPm1paV9idXMtPnBoeV9tYXBbcGh5X2FkZHJdOworCQkJCWlmICghYXVwLT5waHlfc2VhcmNoX2hpZ2hlc3RfYWRkcikKKwkJCQkJYnJlYWs7IC8qIGJyZWFrIG91dCB3aXRoIGZpcnN0IG9uZSBmb3VuZCAqLworCQkJfQogCi0JLyogZmluZCB0aGUgZmlyc3QgKGxvd2VzdCBhZGRyZXNzKSBQSFkgb24gdGhlIGN1cnJlbnQgTUFDJ3MgTUlJIGJ1cyAqLwotCWZvciAocGh5X2FkZHIgPSAwOyBwaHlfYWRkciA8IFBIWV9NQVhfQUREUjsgcGh5X2FkZHIrKykKLQkJaWYgKGF1cC0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl0pIHsKLQkJCXBoeWRldiA9IGF1cC0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl07Ci0jIGlmICFkZWZpbmVkKEFVMVhYWF9QSFlfU0VBUkNIX0hJR0hFU1RfQUREUikKLQkJCWJyZWFrOyAvKiBicmVhayBvdXQgd2l0aCBmaXJzdCBvbmUgZm91bmQgKi8KLSMgZW5kaWYKLQkJfQorCQlpZiAoYXVwLT5waHkxX3NlYXJjaF9tYWMwKSB7CisJCQkvKiB0cnkgaGFyZGVyIHRvIGZpbmQgYSBQSFkgKi8KKwkJCWlmICghcGh5ZGV2ICYmIChhdXAtPm1hY19pZCA9PSAxKSkgeworCQkJCS8qIG5vIFBIWSBmb3VuZCwgbWF5YmUgd2UgaGF2ZSBhIGR1YWwgUEhZPyAqLworCQkJCXByaW50ayAoS0VSTl9JTkZPIERSVl9OQU1FICI6IG5vIFBIWSBmb3VuZCBvbiBNQUMxLCAiCisJCQkJCSJsZXQncyBzZWUgaWYgaXQncyBhdHRhY2hlZCB0byBNQUMwLi4uXG4iKTsKIAotIyBpZiBkZWZpbmVkKEFVMVhYWF9QSFkxX1NFQVJDSF9PTl9NQUMwKQotCS8qIHRyeSBoYXJkZXIgdG8gZmluZCBhIFBIWSAqLwotCWlmICghcGh5ZGV2ICYmIChhdXAtPm1hY19pZCA9PSAxKSkgewotCQkvKiBubyBQSFkgZm91bmQsIG1heWJlIHdlIGhhdmUgYSBkdWFsIFBIWT8gKi8KLQkJcHJpbnRrIChLRVJOX0lORk8gRFJWX05BTUUgIjogbm8gUEhZIGZvdW5kIG9uIE1BQzEsICIKLQkJCSJsZXQncyBzZWUgaWYgaXQncyBhdHRhY2hlZCB0byBNQUMwLi4uXG4iKTsKKwkJCQkvKiBmaW5kIHRoZSBmaXJzdCAobG93ZXN0IGFkZHJlc3MpIG5vbi1hdHRhY2hlZCBQSFkgb24KKwkJCQkgKiB0aGUgTUFDMCBNSUkgYnVzICovCisJCQkJZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKSB7CisJCQkJCXN0cnVjdCBwaHlfZGV2aWNlICpjb25zdCB0bXBfcGh5ZGV2ID0KKwkJCQkJCQlhdXAtPm1paV9idXMtPnBoeV9tYXBbcGh5X2FkZHJdOwogCi0JCUJVR19PTighYXVfbWFjc1swXSk7CisJCQkJCWlmIChhdXAtPm1hY19pZCA9PSAxKQorCQkJCQkJYnJlYWs7CiAKLQkJLyogZmluZCB0aGUgZmlyc3QgKGxvd2VzdCBhZGRyZXNzKSBub24tYXR0YWNoZWQgUEhZIG9uCi0JCSAqIHRoZSBNQUMwIE1JSSBidXMgKi8KLQkJZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKSB7Ci0JCQlzdHJ1Y3QgcGh5X2RldmljZSAqY29uc3QgdG1wX3BoeWRldiA9Ci0JCQkJYXVfbWFjc1swXS0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl07CisJCQkJCWlmICghdG1wX3BoeWRldikKKwkJCQkJCWNvbnRpbnVlOyAvKiBubyBQSFkgaGVyZS4uLiAqLwogCi0JCQlpZiAoIXRtcF9waHlkZXYpCi0JCQkJY29udGludWU7IC8qIG5vIFBIWSBoZXJlLi4uICovCisJCQkJCWlmICh0bXBfcGh5ZGV2LT5hdHRhY2hlZF9kZXYpCisJCQkJCQljb250aW51ZTsgLyogYWxyZWFkeSBjbGFpbWVkIGJ5IE1BQzAgKi8KIAotCQkJaWYgKHRtcF9waHlkZXYtPmF0dGFjaGVkX2RldikKLQkJCQljb250aW51ZTsgLyogYWxyZWFkeSBjbGFpbWVkIGJ5IE1BQzAgKi8KLQotCQkJcGh5ZGV2ID0gdG1wX3BoeWRldjsKLQkJCWJyZWFrOyAvKiBmb3VuZCBpdCAqLworCQkJCQlwaHlkZXYgPSB0bXBfcGh5ZGV2OworCQkJCQlicmVhazsgLyogZm91bmQgaXQgKi8KKwkJCQl9CisJCQl9CiAJCX0KIAl9Ci0jIGVuZGlmIC8qIGRlZmluZWQoQVUxWFhYX1BIWTFfU0VBUkNIX09USEVSX0JVUykgKi8KIAotI2VuZGlmIC8qIGRlZmluZWQoQVUxWFhYX1BIWV9TVEFUSUNfQ09ORklHKSAqLwogCWlmICghcGh5ZGV2KSB7CiAJCXByaW50ayAoS0VSTl9FUlIgRFJWX05BTUUgIjolczogbm8gUEhZIGZvdW5kXG4iLCBkZXYtPm5hbWUpOwogCQlyZXR1cm4gLTE7CkBAIC01NzgsMzEgKzU0Myw2IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHsKLQl1MzIgYmFzZV9hZGRyOwotCXUzMiBtYWNlbl9hZGRyOwotCWludCBpcnE7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLX0gaWZsaXN0WzJdID0gewotI2lmZGVmIENPTkZJR19TT0NfQVUxMDAwCi0Je0FVMTAwMF9FVEgwX0JBU0UsIEFVMTAwMF9NQUMwX0VOQUJMRSwgQVUxMDAwX01BQzBfRE1BX0lOVH0sCi0Je0FVMTAwMF9FVEgxX0JBU0UsIEFVMTAwMF9NQUMxX0VOQUJMRSwgQVUxMDAwX01BQzFfRE1BX0lOVH0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19TT0NfQVUxMTAwCi0Je0FVMTEwMF9FVEgwX0JBU0UsIEFVMTEwMF9NQUMwX0VOQUJMRSwgQVUxMTAwX01BQzBfRE1BX0lOVH0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19TT0NfQVUxNTAwCi0Je0FVMTUwMF9FVEgwX0JBU0UsIEFVMTUwMF9NQUMwX0VOQUJMRSwgQVUxNTAwX01BQzBfRE1BX0lOVH0sCi0Je0FVMTUwMF9FVEgxX0JBU0UsIEFVMTUwMF9NQUMxX0VOQUJMRSwgQVUxNTAwX01BQzFfRE1BX0lOVH0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19TT0NfQVUxNTUwCi0Je0FVMTU1MF9FVEgwX0JBU0UsIEFVMTU1MF9NQUMwX0VOQUJMRSwgQVUxNTUwX01BQzBfRE1BX0lOVH0sCi0Je0FVMTU1MF9FVEgxX0JBU0UsIEFVMTU1MF9NQUMxX0VOQUJMRSwgQVUxNTUwX01BQzFfRE1BX0lOVH0KLSNlbmRpZgotfTsKLQotc3RhdGljIGludCBudW1faWZzOwotCiAvKgogICogZXRodG9vbCBvcGVyYXRpb25zCiAgKi8KQEAgLTcxMSw3ICs2NTEsNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3J4X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdGF0dXMpCiB7Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwcyA9ICZkZXYtPnN0YXRzOwogCiAJcHMtPnJ4X3BhY2tldHMrKzsKQEAgLTk2OSw3ICs5MDgsNyBAQAogCX0KIAogCXBEQiA9IGF1cC0+dHhfZGJfaW51c2VbYXVwLT50eF9oZWFkXTsKLQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgcERCLT52YWRkciwgc2tiLT5sZW4pOworCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCAodm9pZCAqKXBEQi0+dmFkZHIsIHNrYi0+bGVuKTsKIAlpZiAoc2tiLT5sZW4gPCBFVEhfWkxFTikgewogCQlmb3IgKGk9c2tiLT5sZW47IGk8RVRIX1pMRU47IGkrKykgewogCQkJKChjaGFyICopcERCLT52YWRkcilbaV0gPSAwOwpAQCAtMTA1OCw1MyArOTk3LDU5IEBACiAJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAogfTsKIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICogYXUxMDAwX3Byb2JlKGludCBwb3J0X251bSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF1MTAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0YXRpYyB1bnNpZ25lZCB2ZXJzaW9uX3ByaW50ZWQgPSAwOwogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gTlVMTDsKKwlzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhICpwZDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlkYl9kZXN0X3QgKnBEQiwgKnBEQmZyZWU7CisJaW50IGlycSwgaSwgZXJyID0gMDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmJhc2UsICptYWNlbjsKIAljaGFyIGV0aGFkZHJbNl07Ci0JaW50IGlycSwgaSwgZXJyOwotCXUzMiBiYXNlLCBtYWNlbjsKIAotCWlmIChwb3J0X251bSA+PSBOVU1fRVRIX0lOVEVSRkFDRVMpCi0JCXJldHVybiBOVUxMOworCWJhc2UgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIHJldHJpZXZlIGJhc2UgcmVnaXN0ZXJcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAKLQliYXNlICA9IENQSFlTQUREUihpZmxpc3RbcG9ydF9udW1dLmJhc2VfYWRkciApOwotCW1hY2VuID0gQ1BIWVNBRERSKGlmbGlzdFtwb3J0X251bV0ubWFjZW5fYWRkcik7Ci0JaXJxID0gaWZsaXN0W3BvcnRfbnVtXS5pcnE7CisJbWFjZW4gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlmICghbWFjZW4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byByZXRyaWV2ZSBNQUMgRW5hYmxlIHJlZ2lzdGVyXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oIGJhc2UsIE1BQ19JT1NJWkUsICJBdTF4MDAgRU5FVCIpIHx8Ci0JICAgICFyZXF1ZXN0X21lbV9yZWdpb24obWFjZW4sIDQsICJBdTF4MDAgRU5FVCIpKQotCQlyZXR1cm4gTlVMTDsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gcmV0cmlldmUgSVJRXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQogCi0JaWYgKHZlcnNpb25fcHJpbnRlZCsrID09IDApCi0JCXByaW50aygiJXMgdmVyc2lvbiAlcyAlc1xuIiwgRFJWX05BTUUsIERSVl9WRVJTSU9OLCBEUlZfQVVUSE9SKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihiYXNlLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShiYXNlKSwgcGRldi0+bmFtZSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byByZXF1ZXN0IG1lbW9yeSByZWdpb24gZm9yIGJhc2UgcmVnaXN0ZXJzXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihtYWNlbi0+c3RhcnQsIHJlc291cmNlX3NpemUobWFjZW4pLCBwZGV2LT5uYW1lKSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIHJlcXVlc3QgbWVtb3J5IHJlZ2lvbiBmb3IgTUFDIGVuYWJsZSByZWdpc3RlclxuIik7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBlcnJfcmVxdWVzdDsKKwl9CiAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGF1MTAwMF9wcml2YXRlKSk7CiAJaWYgKCFkZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogYWxsb2NfZXRoZXJkZXYgZmFpbGVkXG4iLCBEUlZfTkFNRSk7Ci0JCXJldHVybiBOVUxMOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9hbGxvYzsKIAl9CiAKLQlkZXYtPmJhc2VfYWRkciA9IGJhc2U7Ci0JZGV2LT5pcnEgPSBpcnE7Ci0JZGV2LT5uZXRkZXZfb3BzID0gJmF1MTAwMF9uZXRkZXZfb3BzOwotCVNFVF9FVEhUT09MX09QUyhkZXYsICZhdTEwMDBfZXRodG9vbF9vcHMpOwotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBFVEhfVFhfVElNRU9VVDsKLQotCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwotCWlmIChlcnIgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgZXJyb3IgJWRcbiIsCi0JCQkJRFJWX05BTUUsIGVycik7Ci0JCWZyZWVfbmV0ZGV2KGRldik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXByaW50aygiJXM6IEF1MXh4MCBFdGhlcm5ldCBmb3VuZCBhdCAweCV4LCBpcnEgJWRcbiIsCi0JCWRldi0+bmFtZSwgYmFzZSwgaXJxKTsKLQorCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAlhdXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmF1cC0+bG9jayk7CkBAIC0xMTE1LDIxICsxMDYwLDI5IEBACiAJCQkJCQkoTlVNX1RYX0JVRkZTICsgTlVNX1JYX0JVRkZTKSwKIAkJCQkJCSZhdXAtPmRtYV9hZGRyLAkwKTsKIAlpZiAoIWF1cC0+dmFkZHIpIHsKLQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKCBiYXNlLCBNQUNfSU9TSVpFKTsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKG1hY2VuLCA0KTsKLQkJcmV0dXJuIE5VTEw7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gYWxsb2NhdGUgZGF0YSBidWZmZXJzXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfdmFkZHI7CiAJfQogCiAJLyogYXVwLT5tYWMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgTUFDJ3MgcmVnaXN0ZXJzICovCi0JYXVwLT5tYWMgPSAodm9sYXRpbGUgbWFjX3JlZ190ICopaWZsaXN0W3BvcnRfbnVtXS5iYXNlX2FkZHI7CisJYXVwLT5tYWMgPSAodm9sYXRpbGUgbWFjX3JlZ190ICopaW9yZW1hcF9ub2NhY2hlKGJhc2UtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGJhc2UpKTsKKwlpZiAoIWF1cC0+bWFjKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gaW9yZW1hcCBNQUMgcmVnaXN0ZXJzXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9yZW1hcDE7CisJfQogCi0JLyogU2V0dXAgc29tZSB2YXJpYWJsZXMgZm9yIHF1aWNrIHJlZ2lzdGVyIGFkZHJlc3MgYWNjZXNzICovCi0JYXVwLT5lbmFibGUgPSAodm9sYXRpbGUgdTMyICopaWZsaXN0W3BvcnRfbnVtXS5tYWNlbl9hZGRyOwotCWF1cC0+bWFjX2lkID0gcG9ydF9udW07Ci0JYXVfbWFjc1twb3J0X251bV0gPSBhdXA7CisgICAgICAgIC8qIFNldHVwIHNvbWUgdmFyaWFibGVzIGZvciBxdWljayByZWdpc3RlciBhZGRyZXNzIGFjY2VzcyAqLworCWF1cC0+ZW5hYmxlID0gKHZvbGF0aWxlIHUzMiAqKWlvcmVtYXBfbm9jYWNoZShtYWNlbi0+c3RhcnQsIHJlc291cmNlX3NpemUobWFjZW4pKTsKKwlpZiAoIWF1cC0+ZW5hYmxlKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gaW9yZW1hcCBNQUMgZW5hYmxlIHJlZ2lzdGVyXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9yZW1hcDI7CisJfQorCWF1cC0+bWFjX2lkID0gcGRldi0+aWQ7CiAKLQlpZiAocG9ydF9udW0gPT0gMCkgeworCWlmIChwZGV2LT5pZCA9PSAwKSB7CiAJCWlmIChwcm9tX2dldF9ldGhlcm5ldF9hZGRyKGV0aGFkZHIpID09IDApCiAJCQltZW1jcHkoYXUxMDAwX21hY19hZGRyLCBldGhhZGRyLCBzaXplb2YoYXUxMDAwX21hY19hZGRyKSk7CiAJCWVsc2UgewpAQCAtMTEzOSw3ICsxMDkyLDcgQEAKIAkJfQogCiAJCXNldHVwX2h3X3JpbmdzKGF1cCwgTUFDMF9SWF9ETUFfQUREUiwgTUFDMF9UWF9ETUFfQUREUik7Ci0JfSBlbHNlIGlmIChwb3J0X251bSA9PSAxKQorCX0gZWxzZSBpZiAocGRldi0+aWQgPT0gMSkKIAkJc2V0dXBfaHdfcmluZ3MoYXVwLCBNQUMxX1JYX0RNQV9BRERSLCBNQUMxX1RYX0RNQV9BRERSKTsKIAogCS8qCkBAIC0xMTQ3LDE0ICsxMTAwLDM3IEBACiAJICogdG8gbWF0Y2ggdGhvc2UgdGhhdCBhcmUgcHJpbnRlZCBvbiB0aGVpciBzdGlja2VycwogCSAqLwogCW1lbWNweShkZXYtPmRldl9hZGRyLCBhdTEwMDBfbWFjX2FkZHIsIHNpemVvZihhdTEwMDBfbWFjX2FkZHIpKTsKLQlkZXYtPmRldl9hZGRyWzVdICs9IHBvcnRfbnVtOworCWRldi0+ZGV2X2FkZHJbNV0gKz0gcGRldi0+aWQ7CiAKIAkqYXVwLT5lbmFibGUgPSAwOwogCWF1cC0+bWFjX2VuYWJsZWQgPSAwOwogCisJcGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkKSB7CisJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogbm8gcGxhdGZvcm1fZGF0YSBwYXNzZWQsIFBIWSBzZWFyY2ggb24gTUFDMFxuIik7CisJCWF1cC0+cGh5MV9zZWFyY2hfbWFjMCA9IDE7CisJfSBlbHNlIHsKKwkJYXVwLT5waHlfc3RhdGljX2NvbmZpZyA9IHBkLT5waHlfc3RhdGljX2NvbmZpZzsKKwkJYXVwLT5waHlfc2VhcmNoX2hpZ2hlc3RfYWRkciA9IHBkLT5waHlfc2VhcmNoX2hpZ2hlc3RfYWRkcjsKKwkJYXVwLT5waHkxX3NlYXJjaF9tYWMwID0gcGQtPnBoeTFfc2VhcmNoX21hYzA7CisJCWF1cC0+cGh5X2FkZHIgPSBwZC0+cGh5X2FkZHI7CisJCWF1cC0+cGh5X2J1c2lkID0gcGQtPnBoeV9idXNpZDsKKwkJYXVwLT5waHlfaXJxID0gcGQtPnBoeV9pcnE7CisJfQorCisJaWYgKGF1cC0+cGh5X2J1c2lkICYmIGF1cC0+cGh5X2J1c2lkID4gMCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogTUFDMC1hc3NvY2lhdGVkIFBIWSBhdHRhY2hlZCAybmQgTUFDcyBNSUkiCisJCQkJImJ1cyBub3Qgc3VwcG9ydGVkIHlldFxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX21kaW9idXNfYWxsb2M7CisJfQorCiAJYXVwLT5taWlfYnVzID0gbWRpb2J1c19hbGxvYygpOwotCWlmIChhdXAtPm1paV9idXMgPT0gTlVMTCkKLQkJZ290byBlcnJfb3V0OworCWlmIChhdXAtPm1paV9idXMgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIGFsbG9jYXRlIG1kaW9idXMgc3RydWN0dXJlXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfbWRpb2J1c19hbGxvYzsKKwl9CiAKIAlhdXAtPm1paV9idXMtPnByaXYgPSBkZXY7CiAJYXVwLT5taWlfYnVzLT5yZWFkID0gYXUxMDAwX21kaW9idXNfcmVhZDsKQEAgLTExNjgsMjQgKzExNDQsMjAgQEAKIAogCWZvcihpID0gMDsgaSA8IFBIWV9NQVhfQUREUjsgKytpKQogCQlhdXAtPm1paV9idXMtPmlycVtpXSA9IFBIWV9QT0xMOwotCiAJLyogaWYga25vd24sIHNldCBjb3JyZXNwb25kaW5nIFBIWSBJUlFzICovCi0jaWYgZGVmaW5lZChBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcpCi0jIGlmIGRlZmluZWQoQVUxWFhYX1BIWTBfSVJRKQotCWlmIChBVTFYWFhfUEhZMF9CVVNJRCA9PSBhdXAtPm1hY19pZCkKLQkJYXVwLT5taWlfYnVzLT5pcnFbQVUxWFhYX1BIWTBfQUREUl0gPSBBVTFYWFhfUEhZMF9JUlE7Ci0jIGVuZGlmCi0jIGlmIGRlZmluZWQoQVUxWFhYX1BIWTFfSVJRKQotCWlmIChBVTFYWFhfUEhZMV9CVVNJRCA9PSBhdXAtPm1hY19pZCkKLQkJYXVwLT5taWlfYnVzLT5pcnFbQVUxWFhYX1BIWTFfQUREUl0gPSBBVTFYWFhfUEhZMV9JUlE7Ci0jIGVuZGlmCi0jZW5kaWYKLQltZGlvYnVzX3JlZ2lzdGVyKGF1cC0+bWlpX2J1cyk7CisJaWYgKGF1cC0+cGh5X3N0YXRpY19jb25maWcpCisJCWlmIChhdXAtPnBoeV9pcnEgJiYgYXVwLT5waHlfYnVzaWQgPT0gYXVwLT5tYWNfaWQpCisJCQlhdXAtPm1paV9idXMtPmlycVthdXAtPnBoeV9hZGRyXSA9IGF1cC0+cGh5X2lycTsKIAotCWlmIChtaWlfcHJvYmUoZGV2KSAhPSAwKSB7Ci0JCWdvdG8gZXJyX291dDsKKwllcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGF1cC0+bWlpX2J1cyk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIiBmYWlsZWQgdG8gcmVnaXN0ZXIgTURJTyBidXNcbiIpOworCQlnb3RvIGVycl9tZGlvYnVzX3JlZzsKIAl9CiAKKwlpZiAobWlpX3Byb2JlKGRldikgIT0gMCkKKwkJZ290byBlcnJfb3V0OworCiAJcERCZnJlZSA9IE5VTEw7CiAJLyogc2V0dXAgdGhlIGRhdGEgYnVmZmVyIGRlc2NyaXB0b3JzIGFuZCBhdHRhY2ggYSBidWZmZXIgdG8gZWFjaCBvbmUgKi8KIAlwREIgPSBhdXAtPmRiOwpAQCAtMTIxNiwxOSArMTE4OCwzNSBAQAogCQlhdXAtPnR4X2RiX2ludXNlW2ldID0gcERCOwogCX0KIAorCWRldi0+YmFzZV9hZGRyID0gYmFzZS0+c3RhcnQ7CisJZGV2LT5pcnEgPSBpcnE7CisJZGV2LT5uZXRkZXZfb3BzID0gJmF1MTAwMF9uZXRkZXZfb3BzOworCVNFVF9FVEhUT09MX09QUyhkZXYsICZhdTEwMDBfZXRodG9vbF9vcHMpOworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBFVEhfVFhfVElNRU9VVDsKKwogCS8qCiAJICogVGhlIGJvb3QgY29kZSB1c2VzIHRoZSBldGhlcm5ldCBjb250cm9sbGVyLCBzbyByZXNldCBpdCB0byBzdGFydAogCSAqIGZyZXNoLiAgYXUxMDAwX2luaXQoKSBleHBlY3RzIHRoYXQgdGhlIGRldmljZSBpcyBpbiByZXNldCBzdGF0ZS4KIAkgKi8KIAlyZXNldF9tYWMoZGV2KTsKIAotCXJldHVybiBkZXY7CisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmcuXG4iLAorCQkJCQlkZXYtPm5hbWUpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJcHJpbnRrKCIlczogQXUxeHgwIEV0aGVybmV0IGZvdW5kIGF0IDB4JWx4LCBpcnEgJWRcbiIsCisJCQlkZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nKWJhc2UtPnN0YXJ0LCBpcnEpOworCWlmICh2ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKQorCQlwcmludGsoIiVzIHZlcnNpb24gJXMgJXNcbiIsIERSVl9OQU1FLCBEUlZfVkVSU0lPTiwgRFJWX0FVVEhPUik7CisKKwlyZXR1cm4gMDsKIAogZXJyX291dDoKLQlpZiAoYXVwLT5taWlfYnVzICE9IE5VTEwpIHsKKwlpZiAoYXVwLT5taWlfYnVzICE9IE5VTEwpCiAJCW1kaW9idXNfdW5yZWdpc3RlcihhdXAtPm1paV9idXMpOwotCQltZGlvYnVzX2ZyZWUoYXVwLT5taWlfYnVzKTsKLQl9CiAKIAkvKiBoZXJlIHdlIHNob3VsZCBoYXZlIGEgdmFsaWQgZGV2IHBsdXMgYXVwLT4gcmVnaXN0ZXIgYWRkcmVzc2VzCiAJICogc28gd2UgY2FuIHJlc2V0IHRoZSBtYWMgcHJvcGVybHkuKi8KQEAgLTEyNDIsNjcgKzEyMzAsODQgQEAKIAkJaWYgKGF1cC0+dHhfZGJfaW51c2VbaV0pCiAJCQlSZWxlYXNlREIoYXVwLCBhdXAtPnR4X2RiX2ludXNlW2ldKTsKIAl9CitlcnJfbWRpb2J1c19yZWc6CisJbWRpb2J1c19mcmVlKGF1cC0+bWlpX2J1cyk7CitlcnJfbWRpb2J1c19hbGxvYzoKKwlpb3VubWFwKGF1cC0+ZW5hYmxlKTsKK2Vycl9yZW1hcDI6CisJaW91bm1hcChhdXAtPm1hYyk7CitlcnJfcmVtYXAxOgogCWRtYV9mcmVlX25vbmNvaGVyZW50KE5VTEwsIE1BWF9CVUZfU0laRSAqIChOVU1fVFhfQlVGRlMgKyBOVU1fUlhfQlVGRlMpLAogCQkJICAgICAodm9pZCAqKWF1cC0+dmFkZHIsIGF1cC0+ZG1hX2FkZHIpOwotCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CitlcnJfdmFkZHI6CiAJZnJlZV9uZXRkZXYoZGV2KTsKLQlyZWxlYXNlX21lbV9yZWdpb24oIGJhc2UsIE1BQ19JT1NJWkUpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihtYWNlbiwgNCk7Ci0JcmV0dXJuIE5VTEw7CitlcnJfYWxsb2M6CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1hY2VuLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtYWNlbikpOworZXJyX3JlcXVlc3Q6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGJhc2UtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGJhc2UpKTsKK291dDoKKwlyZXR1cm4gZXJyOwogfQogCi0vKgotICogU2V0dXAgdGhlIGJhc2UgYWRkcmVzcyBhbmQgaW50ZXJydXB0IG9mIHRoZSBBdTF4eHggZXRoZXJuZXQgbWFjcwotICogYmFzZWQgb24gY3B1IHR5cGUgYW5kIHdoZXRoZXIgdGhlIGludGVyZmFjZSBpcyBlbmFibGVkIGluIHN5c19waW5mdW5jCi0gKiByZWdpc3Rlci4gVGhlIGxhc3QgaW50ZXJmYWNlIGlzIGVuYWJsZWQgaWYgU1lTX1BGX05JMiAoYml0IDQpIGlzIDAuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGF1MTAwMF9pbml0X21vZHVsZSh2b2lkKQorc3RhdGljIGludCBfX2RldmV4aXQgYXUxMDAwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWludCBuaSA9IChpbnQpKChhdV9yZWFkbChTWVNfUElORlVOQykgJiAodTMyKShTWVNfUEZfTkkyKSkgPj4gNCk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgaSwgZm91bmRfb25lID0gMDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpOworCXN0cnVjdCByZXNvdXJjZSAqYmFzZSwgKm1hY2VuOwogCi0JbnVtX2lmcyA9IE5VTV9FVEhfSU5URVJGQUNFUyAtIG5pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCi0JZm9yKGkgPSAwOyBpIDwgbnVtX2lmczsgaSsrKSB7Ci0JCWRldiA9IGF1MTAwMF9wcm9iZShpKTsKLQkJaWZsaXN0W2ldLmRldiA9IGRldjsKLQkJaWYgKGRldikKLQkJCWZvdW5kX29uZSsrOwotCX0KLQlpZiAoIWZvdW5kX29uZSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwltZGlvYnVzX3VucmVnaXN0ZXIoYXVwLT5taWlfYnVzKTsKKwltZGlvYnVzX2ZyZWUoYXVwLT5taWlfYnVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfRE1BOyBpKyspCisJCWlmIChhdXAtPnJ4X2RiX2ludXNlW2ldKQorCQkJUmVsZWFzZURCKGF1cCwgYXVwLT5yeF9kYl9pbnVzZVtpXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX0RNQTsgaSsrKQorCQlpZiAoYXVwLT50eF9kYl9pbnVzZVtpXSkKKwkJCVJlbGVhc2VEQihhdXAsIGF1cC0+dHhfZGJfaW51c2VbaV0pOworCisJZG1hX2ZyZWVfbm9uY29oZXJlbnQoTlVMTCwgTUFYX0JVRl9TSVpFICoKKwkJCShOVU1fVFhfQlVGRlMgKyBOVU1fUlhfQlVGRlMpLAorCQkJKHZvaWQgKilhdXAtPnZhZGRyLCBhdXAtPmRtYV9hZGRyKTsKKworCWlvdW5tYXAoYXVwLT5tYWMpOworCWlvdW5tYXAoYXVwLT5lbmFibGUpOworCisJYmFzZSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGJhc2UtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGJhc2UpKTsKKworCW1hY2VuID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obWFjZW4tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1hY2VuKSk7CisKKwlmcmVlX25ldGRldihkZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBhdTEwMDBfY2xlYW51cF9tb2R1bGUodm9pZCkKLXsKLQlpbnQgaSwgajsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXUxMDAwX2V0aF9kcml2ZXIgPSB7CisJLnByb2JlICA9IGF1MTAwMF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYXUxMDAwX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgICA9ICJhdTEwMDAtZXRoIiwKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCX0sCit9OworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphdTEwMDAtZXRoIik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2lmczsgaSsrKSB7Ci0JCWRldiA9IGlmbGlzdFtpXS5kZXY7Ci0JCWlmIChkZXYpIHsKLQkJCWF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0JCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCQkJbWRpb2J1c191bnJlZ2lzdGVyKGF1cC0+bWlpX2J1cyk7Ci0JCQltZGlvYnVzX2ZyZWUoYXVwLT5taWlfYnVzKTsKLQkJCWZvciAoaiA9IDA7IGogPCBOVU1fUlhfRE1BOyBqKyspCi0JCQkJaWYgKGF1cC0+cnhfZGJfaW51c2Vbal0pCi0JCQkJCVJlbGVhc2VEQihhdXAsIGF1cC0+cnhfZGJfaW51c2Vbal0pOwotCQkJZm9yIChqID0gMDsgaiA8IE5VTV9UWF9ETUE7IGorKykKLQkJCQlpZiAoYXVwLT50eF9kYl9pbnVzZVtqXSkKLQkJCQkJUmVsZWFzZURCKGF1cCwgYXVwLT50eF9kYl9pbnVzZVtqXSk7Ci0JCQlkbWFfZnJlZV9ub25jb2hlcmVudChOVUxMLCBNQVhfQlVGX1NJWkUgKgotCQkJCQkgICAgIChOVU1fVFhfQlVGRlMgKyBOVU1fUlhfQlVGRlMpLAotCQkJCQkgICAgICh2b2lkICopYXVwLT52YWRkciwgYXVwLT5kbWFfYWRkcik7Ci0JCQlyZWxlYXNlX21lbV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIE1BQ19JT1NJWkUpOwotCQkJcmVsZWFzZV9tZW1fcmVnaW9uKENQSFlTQUREUihpZmxpc3RbaV0ubWFjZW5fYWRkciksIDQpOwotCQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJfQotCX0KKworc3RhdGljIGludCBfX2luaXQgYXUxMDAwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXUxMDAwX2V0aF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXUxMDAwX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTAwMF9ldGhfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYXUxMDAwX2luaXRfbW9kdWxlKTsKLW1vZHVsZV9leGl0KGF1MTAwMF9jbGVhbnVwX21vZHVsZSk7Cittb2R1bGVfZXhpdChhdTEwMDBfZXhpdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5oIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5oCmluZGV4IDgyNGVjZDUuLmY5ZDI5YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguaAorKysgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmgKQEAgLTEwOCw2ICsxMDgsMTUgQEAKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldjsKIAlzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1czsKIAorCS8qIFBIWSBjb25maWd1cmF0aW9uICovCisJaW50IHBoeV9zdGF0aWNfY29uZmlnOworCWludCBwaHlfc2VhcmNoX2hpZ2hlc3RfYWRkcjsKKwlpbnQgcGh5MV9zZWFyY2hfbWFjMDsKKworCWludCBwaHlfYWRkcjsKKwlpbnQgcGh5X2J1c2lkOworCWludCBwaHlfaXJxOworCiAJLyogVGhlc2UgdmFyaWFibGVzIGFyZSBqdXN0IGZvciBxdWljayBhY2Nlc3MgdG8gY2VydGFpbiByZWdzIGFkZHJlc3Nlcy4gKi8KIAl2b2xhdGlsZSBtYWNfcmVnX3QgKm1hYzsgIC8qIG1hYyByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgKi8KIAl2b2xhdGlsZSB1MzIgKmVuYWJsZTsgICAgIC8qIGFkZHJlc3Mgb2YgTUFDIEVuYWJsZSBSZWdpc3RlciAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F4ODg3OTYuYyBiL2RyaXZlcnMvbmV0L2F4ODg3OTYuYwppbmRleCA2MmQ5YzljLi4xZGQ0NDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9heDg4Nzk2LmMKKysrIGIvZHJpdmVycy9uZXQvYXg4ODc5Ni5jCkBAIC05MjEsNyArOTIxLDcgQEAKICAJCXNpemUgPSAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSArIDE7CiAKIAkJYXgtPm1lbTIgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgcGRldi0+bmFtZSk7Ci0JCWlmIChheC0+bWVtID09IE5VTEwpIHsKKwkJaWYgKGF4LT5tZW0yID09IE5VTEwpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZXNlcnZlIHJlZ2lzdGVyc1xuIik7CiAJCQlyZXQgPSAtRU5YSU87CiAJCQlnb3RvIGV4aXRfbWVtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCmluZGV4IDlmZDhlNWUuLjViYzc0NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmUuaApAQCAtMjc2LDggKzI3NiwxMyBAQAogCWludCBsaW5rX3NwZWVkOwogCXU4IHBvcnRfdHlwZTsKIAl1OCB0cmFuc2NlaXZlcjsKKwl1OCBnZW5lcmF0aW9uOwkJLyogQmxhZGVFbmdpbmUgQVNJQyBnZW5lcmF0aW9uICovCiB9OwogCisvKiBCbGFkZUVuZ2luZSBHZW5lcmF0aW9uIG51bWJlcnMgKi8KKyNkZWZpbmUgQkVfR0VOMiAyCisjZGVmaW5lIEJFX0dFTjMgMworCiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJlX2V0aHRvb2xfb3BzOwogCiAjZGVmaW5lIGRydnJfc3RhdHMoYWRhcHRlcikJCSgmYWRhcHRlci0+c3RhdHMuZHJ2cl9zdGF0cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwppbmRleCBmZWU2ZWVlLi4wMDZjYjJlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwpAQCAtMjk2LDYgKzI5Niw3IEBACiAJcmVxX2hkci0+b3Bjb2RlID0gb3Bjb2RlOwogCXJlcV9oZHItPnN1YnN5c3RlbSA9IHN1YnN5c3RlbTsKIAlyZXFfaGRyLT5yZXF1ZXN0X2xlbmd0aCA9IGNwdV90b19sZTMyKGNtZF9sZW4gLSBzaXplb2YoKnJlcV9oZHIpKTsKKwlyZXFfaGRyLT52ZXJzaW9uID0gMDsKIH0KIAogc3RhdGljIHZvaWQgYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShzdHJ1Y3QgcGh5c19hZGRyICpwYWdlcywgdTMyIG1heF9wYWdlcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaAppbmRleCBjMDAyYjgzLi4xM2IzM2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCkBAIC0xNjQsNyArMTY0LDggQEAKIAl1OCBkb21haW47CQkvKiBkd29yZCAwICovCiAJdTMyIHRpbWVvdXQ7CQkvKiBkd29yZCAxICovCiAJdTMyIHJlcXVlc3RfbGVuZ3RoOwkvKiBkd29yZCAyICovCi0JdTMyIHJzdmQ7CQkvKiBkd29yZCAzICovCisJdTggdmVyc2lvbjsJCS8qIGR3b3JkIDMgKi8KKwl1OCByc3ZkWzNdOwkJLyogZHdvcmQgMyAqLwogfTsKIAogI2RlZmluZSBSRVNQX0hEUl9JTkZPX09QQ09ERV9TSElGVAkwCS8qIGJpdHMgMCAtIDcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYwppbmRleCAzM2FiOGM3Li42MjZiNzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCkBAIC0xMzUwLDcgKzEzNTAsNyBAQAogCWludCBpc3I7CiAKIAlpc3IgPSBpb3JlYWQzMihhZGFwdGVyLT5jc3IgKyBDRVZfSVNSMF9PRkZTRVQgKwotCQkJYmVfcGNpX2Z1bmMoYWRhcHRlcikgKiBDRVZfSVNSX1NJWkUpOworCQkoYWRhcHRlci0+dHhfZXEucS5pZC8gOCkgKiBDRVZfSVNSX1NJWkUpOwogCWlmICghaXNyKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKQEAgLTIwNTEsNiArMjA1MSw3IEBACiBzdGF0aWMgaW50IGJlX21hcF9wY2lfYmFycyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1OCBfX2lvbWVtICphZGRyOworCWludCBwY2ljZmdfcmVnOwogCiAJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgMiksCiAJCQlwY2lfcmVzb3VyY2VfbGVuKGFkYXB0ZXItPnBkZXYsIDIpKTsKQEAgLTIwNjQsOCArMjA2NSwxMyBAQAogCQlnb3RvIHBjaV9tYXBfZXJyOwogCWFkYXB0ZXItPmRiID0gYWRkcjsKIAotCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KGFkYXB0ZXItPnBkZXYsIDEpLAotCQkJcGNpX3Jlc291cmNlX2xlbihhZGFwdGVyLT5wZGV2LCAxKSk7CisJaWYgKGFkYXB0ZXItPmdlbmVyYXRpb24gPT0gQkVfR0VOMikKKwkJcGNpY2ZnX3JlZyA9IDE7CisJZWxzZQorCQlwY2ljZmdfcmVnID0gMDsKKworCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KGFkYXB0ZXItPnBkZXYsIHBjaWNmZ19yZWcpLAorCQkJcGNpX3Jlc291cmNlX2xlbihhZGFwdGVyLT5wZGV2LCBwY2ljZmdfcmVnKSk7CiAJaWYgKGFkZHIgPT0gTlVMTCkKIAkJZ290byBwY2lfbWFwX2VycjsKIAlhZGFwdGVyLT5wY2ljZmcgPSBhZGRyOwpAQCAtMjE2Miw2ICsyMTY4LDcgQEAKIAljbWQtPnZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgY21kLT5zaXplLCAmY21kLT5kbWEpOwogCWlmIChjbWQtPnZhID09IE5VTEwpCiAJCXJldHVybiAtMTsKKwltZW1zZXQoY21kLT52YSwgMCwgY21kLT5zaXplKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI0MCw2ICsyMjQ3LDIwIEBACiAJCWdvdG8gcmVsX3JlZzsKIAl9CiAJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlzd2l0Y2ggKHBkZXYtPmRldmljZSkgeworCWNhc2UgQkVfREVWSUNFX0lEMToKKwljYXNlIE9DX0RFVklDRV9JRDE6CisJCWFkYXB0ZXItPmdlbmVyYXRpb24gPSBCRV9HRU4yOworCQlicmVhazsKKwljYXNlIEJFX0RFVklDRV9JRDI6CisJY2FzZSBPQ19ERVZJQ0VfSUQyOgorCQlhZGFwdGVyLT5nZW5lcmF0aW9uID0gQkVfR0VOMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYWRhcHRlci0+Z2VuZXJhdGlvbiA9IDA7CisJfQorCiAJYWRhcHRlci0+cGRldiA9IHBkZXY7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGFkYXB0ZXIpOwogCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDNmMDA3MWMuLmVmYTBlNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMzYzOSw3ICszNjM5LDcgQEAKIAkJICovCiAJCWlmIChib25kX2FsYl9pbml0aWFsaXplKGJvbmQsIChib25kLT5wYXJhbXMubW9kZSA9PSBCT05EX01PREVfQUxCKSkpIHsKIAkJCS8qIHNvbWV0aGluZyB3ZW50IHdyb25nIC0gZmFpbCB0aGUgb3BlbiBvcGVyYXRpb24gKi8KLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKIAkJSU5JVF9ERUxBWUVEX1dPUksoJmJvbmQtPmFsYl93b3JrLCBib25kX2FsYl9tb25pdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NwbWFjLmMgYi9kcml2ZXJzL25ldC9jcG1hYy5jCmluZGV4IDhkMGJlMjYuLmJmMjA3MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NwbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvY3BtYWMuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BoeV9maXhlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8YXNtL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKQEAgLTI5NCw5ICsyOTUsMTYgQEAKIAogc3RhdGljIGludCBjcG1hY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCiB7CisJc3RydWN0IGNsayAqY3BtYWNfY2xrOworCisJY3BtYWNfY2xrID0gY2xrX2dldCgmYnVzLT5kZXYsICJjcG1hYyIpOworCWlmIChJU19FUlIoY3BtYWNfY2xrKSkgeworCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBnZXQgY3BtYWMgY2xvY2tcbiIpOworCQlyZXR1cm4gLTE7CisJfQogCWFyN19kZXZpY2VfcmVzZXQoQVI3X1JFU0VUX0JJVF9NRElPKTsKIAljcG1hY193cml0ZShidXMtPnByaXYsIENQTUFDX01ESU9fQ09OVFJPTCwgTURJT0NfRU5BQkxFIHwKLQkJICAgIE1ESU9DX0NMS0RJVihhcjdfY3BtYWNfZnJlcSgpIC8gMjIwMDAwMCAtIDEpKTsKKwkJICAgIE1ESU9DX0NMS0RJVihjbGtfZ2V0X3JhdGUoY3BtYWNfY2xrKSAvIDIyMDAwMDAgLSAxKSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jIGIvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKaW5kZXggYmRiZDE0Ny4uMzE4YTAxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKQEAgLTIwNzksNiArMjA3OSw3IEBACiAJCQkgc3RydWN0IHNnZV9mbCAqZmwsIGludCBsZW4sIGludCBjb21wbGV0ZSkKIHsKIAlzdHJ1Y3Qgcnhfc3dfZGVzYyAqc2QgPSAmZmwtPnNkZXNjW2ZsLT5jaWR4XTsKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KHFzLT5uZXRkZXYpOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCXN0cnVjdCBjcGxfcnhfcGt0ICpjcGw7CiAJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqcnhfZnJhZzsKQEAgLTIxMTYsMTEgKzIxMTcsMTggQEAKIAogCWlmICghbnJfZnJhZ3MpIHsKIAkJb2Zmc2V0ID0gMiArIHNpemVvZihzdHJ1Y3QgY3BsX3J4X3BrdCk7Ci0JCXFzLT5scm9fdmEgPSBzZC0+cGdfY2h1bmsudmEgKyAyOwotCX0KLQlsZW4gLT0gb2Zmc2V0OworCQljcGwgPSBxcy0+bHJvX3ZhID0gc2QtPnBnX2NodW5rLnZhICsgMjsKIAotCXByZWZldGNoKHFzLT5scm9fdmEpOworCQlpZiAoKHBpLT5yeF9vZmZsb2FkICYgVDNfUlhfQ1NVTSkgJiYKKwkJICAgICBjcGwtPmNzdW1fdmFsaWQgJiYgY3BsLT5jc3VtID09IGh0b25zKDB4ZmZmZikpIHsKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCQlxcy0+cG9ydF9zdGF0c1tTR0VfUFNUQVRfUlhfQ1NVTV9HT09EXSsrOworCQl9IGVsc2UKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwl9IGVsc2UKKwkJY3BsID0gcXMtPmxyb192YTsKKworCWxlbiAtPSBvZmZzZXQ7CiAKIAlyeF9mcmFnICs9IG5yX2ZyYWdzOwogCXJ4X2ZyYWctPnBhZ2UgPSBzZC0+cGdfY2h1bmsucGFnZTsKQEAgLTIxMzYsMTIgKzIxNDQsOCBAQAogCQlyZXR1cm47CiAKIAlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcXMgLSAmYWRhcC0+c2dlLnFzWzBdKTsKLQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCWNwbCA9IHFzLT5scm9fdmE7CiAKIAlpZiAodW5saWtlbHkoY3BsLT52bGFuX3ZhbGlkKSkgewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcXMtPm5ldGRldjsKLQkJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwogCQlzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwID0gcGktPnZsYW5fZ3JwOwogCiAJCWlmIChsaWtlbHkoZ3JwICE9IE5VTEwpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggZDI5YmI1My4uNzY1NTQzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtNDAwNiwxMSArNDAwNiwyMSBAQAogCQkJfQogCQl9CiAKLQkJaWYgKCFidWZmZXJfaW5mby0+ZG1hKQorCQlpZiAoIWJ1ZmZlcl9pbmZvLT5kbWEpIHsKIAkJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3BhZ2UocGRldiwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2luZm8tPnBhZ2UsIDAsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9pbmZvLT5sZW5ndGgsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEpKSB7CisJCQkJcHV0X3BhZ2UoYnVmZmVyX2luZm8tPnBhZ2UpOworCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCQlidWZmZXJfaW5mby0+cGFnZSA9IE5VTEw7CisJCQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJCQkJYnVmZmVyX2luZm8tPmRtYSA9IDA7CisJCQkJYWRhcHRlci0+YWxsb2NfcnhfYnVmZl9mYWlsZWQrKzsKKwkJCQlicmVhazsgLyogd2hpbGUgIWJ1ZmZlcl9pbmZvLT5za2IgKi8KKwkJCX0KKwkJfQogCiAJCXJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDKCpyeF9yaW5nLCBpKTsKIAkJcnhfZGVzYy0+YnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChidWZmZXJfaW5mby0+ZG1hKTsKQEAgLTQxMDEsNiArNDExMSwxMyBAQAogCQkJCQkJICBza2ItPmRhdGEsCiAJCQkJCQkgIGJ1ZmZlcl9pbmZvLT5sZW5ndGgsCiAJCQkJCQkgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgYnVmZmVyX2luZm8tPmRtYSkpIHsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOworCQkJYnVmZmVyX2luZm8tPmRtYSA9IDA7CisJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOworCQkJYnJlYWs7IC8qIHdoaWxlICFidWZmZXJfaW5mby0+c2tiICovCisJCX0KIAogCQkvKgogCQkgKiBYWFggaWYgaXQgd2FzIGFsbG9jYXRlZCBjbGVhbmx5IGl0IHdpbGwgbmV2ZXIgbWFwIHRvIGEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKaW5kZXggOTk3MTI0ZC4uYzg4MTM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKQEAgLTQyMSw2ICs0MjEsOCBAQAogCQkJbXNpeGJtID0gRTEwMDBfRUlDUl9SWF9RVUVVRTAgPDwgcnhfcXVldWU7CiAJCWlmICh0eF9xdWV1ZSA+IElHQl9OMF9RVUVVRSkKIAkJCW1zaXhibSB8PSBFMTAwMF9FSUNSX1RYX1FVRVVFMCA8PCB0eF9xdWV1ZTsKKwkJaWYgKCFhZGFwdGVyLT5tc2l4X2VudHJpZXMgJiYgbXNpeF92ZWN0b3IgPT0gMCkKKwkJCW1zaXhibSB8PSBFMTAwMF9FSU1TX09USEVSOwogCQlhcnJheV93cjMyKEUxMDAwX01TSVhCTSgwKSwgbXNpeF92ZWN0b3IsIG1zaXhibSk7CiAJCXFfdmVjdG9yLT5laW1zX3ZhbHVlID0gbXNpeGJtOwogCQlicmVhazsKQEAgLTg3Nyw3ICs4NzksNiBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwotCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKSB7CkBAIC05MDksMjAgKzkxMCw3IEBACiAJCWlnYl9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCQlpZ2Jfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhhZGFwdGVyKTsKIAl9IGVsc2UgewotCQlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgewotCQljYXNlIGUxMDAwXzgyNTc1OgotCQkJd3IzMihFMTAwMF9NU0lYQk0oMCksCi0JCQkgICAgIChFMTAwMF9FSUNSX1JYX1FVRVVFMCB8Ci0JCQkgICAgICBFMTAwMF9FSUNSX1RYX1FVRVVFMCB8Ci0JCQkgICAgICBFMTAwMF9FSU1TX09USEVSKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBlMTAwMF84MjU4MDoKLQkJY2FzZSBlMTAwMF84MjU3NjoKLQkJCXdyMzIoRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQorCQlpZ2JfYXNzaWduX3ZlY3RvcihhZGFwdGVyLT5xX3ZlY3RvclswXSwgMCk7CiAJfQogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfSEFTX01TSSkgewpAQCAtMTE0MCw2ICsxMTI4LDggQEAKIAl9CiAJaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykKIAkJaWdiX2NvbmZpZ3VyZV9tc2l4KGFkYXB0ZXIpOworCWVsc2UKKwkJaWdiX2Fzc2lnbl92ZWN0b3IoYWRhcHRlci0+cV92ZWN0b3JbMF0sIDApOwogCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cy4gKi8KIAlyZDMyKEUxMDAwX0lDUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jCmluZGV4IDI5N2E1ZGQuLjJhYTcxYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jCkBAIC0yMTE3LDYgKzIxMTcsNyBAQAogCS8qIHNldCB0aW1lX3N0YW1wICpiZWZvcmUqIGRtYSB0byBoZWxwIGF2b2lkIGEgcG9zc2libGUgcmFjZSAqLwogCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKIAlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CisJYnVmZmVyX2luZm8tPm1hcHBlZF9hc19wYWdlID0gZmFsc2U7CiAJYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgbGVuLAogCQkJCQkgIFBDSV9ETUFfVE9ERVZJQ0UpOwogCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgYnVmZmVyX2luZm8tPmRtYSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2F1MWtfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvYXUxa19pci5jCmluZGV4IDliMmVlYmQuLmI1Y2JkMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvYXUxa19pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvYXUxa19pci5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8YXNtL3BiMTAwMC5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjEwMDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfREIxMTAwKQogI2luY2x1ZGUgPGFzbS9kYjF4MDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgogI2Vsc2UgCiAjZXJyb3IgYXUxa19pcjogdW5zdXBwb3J0ZWQgYm9hcmQKICNlbmRpZgpAQCAtNjYsMTAgKzY3LDYgQEAKIAogI2RlZmluZSBSVU5fQVQoeCkgKGppZmZpZXMgKyAoeCkpCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApCi1zdGF0aWMgQkNTUiAqIGNvbnN0IGJjc3IgPSAoQkNTUiAqKTB4QUUwMDAwMDA7Ci0jZW5kaWYKLQogc3RhdGljIERFRklORV9TUElOTE9DSyhpcl9sb2NrKTsKIAogLyoKQEAgLTI4Miw5ICsyNzksOCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjEwMDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfREIxMTAwKQogCS8qIHBvd2VyIG9uICovCi0JYmNzci0+cmVzZXRzICY9IH5CQ1NSX1JFU0VUU19JUkRBX01PREVfTUFTSzsKLQliY3NyLT5yZXNldHMgfD0gQkNTUl9SRVNFVFNfSVJEQV9NT0RFX0ZVTEw7Ci0JYXVfc3luYygpOworCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19JUkRBX01PREVfTUFTSywKKwkJCSAgICAgIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9GVUxMKTsKICNlbmRpZgogCiAJcmV0dXJuIDA7CkBAIC03MjAsMTQgKzcxNiwxNCBAQAogCiAJaWYgKHNwZWVkID09IDQwMDAwMDApIHsKICNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApCi0JCWJjc3ItPnJlc2V0cyB8PSBCQ1NSX1JFU0VUU19GSVJfU0VMOworCQliY3NyX21vZChCQ1NSX1JFU0VUUywgMCwgQkNTUl9SRVNFVFNfRklSX1NFTCk7CiAjZWxzZSAvKiBQYjEwMDAgYW5kIFBiMTEwMCAqLwogCQl3cml0ZWwoMTw8MTMsIENQTERfQVVYMSk7CiAjZW5kaWYKIAl9CiAJZWxzZSB7CiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjEwMDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfREIxMTAwKQotCQliY3NyLT5yZXNldHMgJj0gfkJDU1JfUkVTRVRTX0ZJUl9TRUw7CisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19GSVJfU0VMLCAwKTsKICNlbHNlIC8qIFBiMTAwMCBhbmQgUGIxMTAwICovCiAJCXdyaXRlbChyZWFkbChDUExEX0FVWDEpICYgfigxPDwxMyksIENQTERfQVVYMSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCmluZGV4IDMxMDNmNDEuLjM1YTA2YjQ3NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYwpAQCAtMzU3LDEyICszNTcsMzQgQEAKIAl1MzIgZmN0cmxfcmVnOwogCXUzMiBybWNzX3JlZzsKIAl1MzIgcmVnOworCXUzMiBsaW5rX3NwZWVkID0gMDsKKwlib29sIGxpbmtfdXA7CiAKICNpZmRlZiBDT05GSUdfRENCCiAJaWYgKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBpeGdiZV9mY19wZmMpCiAJCWdvdG8gb3V0OwogCiAjZW5kaWYgLyogQ09ORklHX0RDQiAqLworCS8qCisJICogT24gODI1OTggaGF2aW5nIFJ4IEZDIG9uIGNhdXNlcyByZXNldHMgd2hpbGUgZG9pbmcgMUcKKwkgKiBzbyBpZiBpdCdzIG9uIHR1cm4gaXQgb2ZmIG9uY2Ugd2Uga25vdyBsaW5rX3NwZWVkLiBGb3IKKwkgKiBtb3JlIGRldGFpbHMgc2VlIDgyNTk4IFNwZWNpZmljYXRpb24gdXBkYXRlLgorCSAqLworCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZsaW5rX3NwZWVkLCAmbGlua191cCwgZmFsc2UpOworCWlmIChsaW5rX3VwICYmIGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkgeworCQlzd2l0Y2ggKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSkgeworCQljYXNlIGl4Z2JlX2ZjX2Z1bGw6CisJCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY190eF9wYXVzZTsKKwkJCWJyZWFrOworCQljYXNlIGl4Z2JlX2ZjX3J4X3BhdXNlOgorCQkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfbm9uZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogbm8gY2hhbmdlICovCisJCQlicmVhazsKKwkJfQorCX0KKwogCS8qIE5lZ290aWF0ZSB0aGUgZmMgbW9kZSB0byB1c2UgKi8KIAlyZXRfdmFsID0gaXhnYmVfZmNfYXV0b25lZyhodyk7CiAJaWYgKHJldF92YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jCmluZGV4IDU2ZjM3ZjYuLmRkNDg4M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jCkBAIC0yMjMsNyArMjIzLDcgQEAKIAogCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYndfcGVyY2VudGFnZVswXVtid2dfaWRdICE9CiAJICAgIGFkYXB0ZXItPmRjYl9jZmcuYndfcGVyY2VudGFnZVswXVtid2dfaWRdKSB7Ci0JCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9QR19SWDsKKwkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX1BHX1RYOwogCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfUkVTRVRMSU5LOwogCX0KIH0KQEAgLTM0MSw2ICszNDEsMTIgQEAKIAlpZiAoIWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwKQogCQlyZXR1cm4gRENCX05PX0hXX0NIRzsKIAorCXJldCA9IGl4Z2JlX2NvcHlfZGNiX2NmZygmYWRhcHRlci0+dGVtcF9kY2JfY2ZnLCAmYWRhcHRlci0+ZGNiX2NmZywKKwkJCQkgYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXMpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIERDQl9OT19IV19DSEc7CisKIAkvKgogCSAqIE9ubHkgdGFrZSBkb3duIHRoZSBhZGFwdGVyIGlmIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZQogCSAqIHJlcXVpcmVzIGEgcmVzZXQuCkBAIC0zNTksMTQgKzM2NSw2IEBACiAJCX0KIAl9CiAKLQlyZXQgPSBpeGdiZV9jb3B5X2RjYl9jZmcoJmFkYXB0ZXItPnRlbXBfZGNiX2NmZywgJmFkYXB0ZXItPmRjYl9jZmcsCi0JCQkJIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzKTsKLQlpZiAocmV0KSB7Ci0JCWlmIChhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCAmIEJJVF9SRVNFVExJTkspCi0JCQljbGVhcl9iaXQoX19JWEdCRV9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7Ci0JCXJldHVybiBEQ0JfTk9fSFdfQ0hHOwotCX0KLQogCWlmIChhZGFwdGVyLT5kY2JfY2ZnLnBmY19tb2RlX2VuYWJsZSkgewogCQlpZiAoKGFkYXB0ZXItPmh3Lm1hYy50eXBlICE9IGl4Z2JlX21hY184MjU5OEVCKSAmJgogCQkJKGFkYXB0ZXItPmh3LmZjLmN1cnJlbnRfbW9kZSAhPSBpeGdiZV9mY19wZmMpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IGI1ZjY0YWQuLjk1MWI3M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTUxNzksNyArNTE3OSw3IEBACiAJCWl4Z2JlX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKGFkYXB0ZXIsIHR4X2J1ZmZlcl9pbmZvKTsKIAl9CiAKLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGl4Z2JlX3R4X3F1ZXVlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLApAQCAtNTMyOSw4ICs1MzI5LDExIEBACiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCB0eHEgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfSEFTSF9DQVBBQkxFKQorCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEUpIHsKKwkJd2hpbGUgKHVubGlrZWx5KHR4cSA+PSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcykpCisJCQl0eHEgLT0gZGV2LT5yZWFsX251bV90eF9xdWV1ZXM7CiAJCXJldHVybiB0eHE7CisJfQogCiAjaWZkZWYgSVhHQkVfRkNPRQogCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkgJiYKQEAgLTU3NjAsNiArNTc2MywxMCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3N3X2luaXQ7CiAKKwkvKiBNYWtlIGl0IHBvc3NpYmxlIHRoZSBhZGFwdGVyIHRvIGJlIHdva2VuIHVwIHZpYSBXT0wgKi8KKwlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1dVUywgfjApOworCiAJLyoKIAkgKiBJZiB0aGVyZSBpcyBhIGZhbiBvbiB0aGlzIGRldmljZSBhbmQgaXQgaGFzIGZhaWxlZCBsb2cgdGhlCiAJICogZmFpbHVyZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2tzODg1MV9tbGwuYyBiL2RyaXZlcnMvbmV0L2tzODg1MV9tbGwuYwppbmRleCBjMTQ2MzA0Li5jMGNlZWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMKKysrIGIvZHJpdmVycy9uZXQva3M4ODUxX21sbC5jCkBAIC04NTQsOCArODU0LDggQEAKIAogc3RhdGljIGlycXJldHVybl90IGtzX2lycShpbnQgaXJxLCB2b2lkICpwdykKIHsKLQlzdHJ1Y3Qga3NfbmV0ICprcyA9IHB3OwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBrcy0+bmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwdzsKKwlzdHJ1Y3Qga3NfbmV0ICprcyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdTE2IHN0YXR1czsKIAogCS8qdGhpcyBzaG91bGQgYmUgdGhlIGZpcnN0IGluIElSUSBoYW5kbGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNlLmMgYi9kcml2ZXJzL25ldC9tYWNlLmMKaW5kZXggZDlmYmFkMy4uNDNhZWE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjZS5jCisrKyBiL2RyaXZlcnMvbmV0L21hY2UuYwpAQCAtMjA2LDcgKzIwNiw3IEBACiAJCW1wLT5wb3J0X2FhdWkgPSBwb3J0X2FhdWk7CiAJZWxzZSB7CiAJCS8qIEFwcGxlIE5ldHdvcmsgU2VydmVyIHVzZXMgdGhlIEFBVUkgcG9ydCAqLwotCQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFNoaW5lckVTQiIpKQorCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFNoaW5lckVTQiIpKQogCQkJbXAtPnBvcnRfYWF1aSA9IDE7CiAJCWVsc2UgewogI2lmZGVmIENPTkZJR19NQUNFX0FBVUlfUE9SVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjbWFjZS5jIGIvZHJpdmVycy9uZXQvbWFjbWFjZS5jCmluZGV4IDQ0ZjNjMjguLjc5NDA4YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY21hY2UuYworKysgYi9kcml2ZXJzL25ldC9tYWNtYWNlLmMKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJtYWNlLmgiCiAKIHN0YXRpYyBjaGFyIG1hY19tYWNlX3N0cmluZ1tdID0gIm1hY21hY2UiOwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1hY19tYWNlX2RldmljZTsKIAogI2RlZmluZSBOX1RYX0JVRkZfT1JERVIJMAogI2RlZmluZSBOX1RYX1JJTkcJKDEgPDwgTl9UWF9CVUZGX09SREVSKQpAQCAtNzUyLDYgKzc1MSw3IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTWFjaW50b3NoIE1BQ0UgZXRoZXJuZXQgZHJpdmVyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm1hY21hY2UiKTsKIAogc3RhdGljIGludCBfX2RldmV4aXQgbWFjX21hY2VfZGV2aWNlX3JlbW92ZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKQEAgLTc3Nyw0NyArNzc3LDIyIEBACiAJLnByb2JlICA9IG1hY2VfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG1hY19tYWNlX2RldmljZV9yZW1vdmUpLAogCS5kcml2ZXIJPSB7Ci0JCS5uYW1lID0gbWFjX21hY2Vfc3RyaW5nLAorCQkubmFtZQk9IG1hY19tYWNlX3N0cmluZywKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1hY19tYWNlX2luaXRfbW9kdWxlKHZvaWQpCiB7Ci0JaW50IGVycjsKLQogCWlmICghTUFDSF9JU19NQUMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKChlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1hY19tYWNlX2RyaXZlcikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRHJpdmVyIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCW1hY19tYWNlX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhtYWNfbWFjZV9zdHJpbmcsIDApOwotCWlmICghbWFjX21hY2VfZGV2aWNlKQotCQlnb3RvIG91dF91bnJlZ2lzdGVyOwotCi0JaWYgKHBsYXRmb3JtX2RldmljZV9hZGQobWFjX21hY2VfZGV2aWNlKSkgewotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KG1hY19tYWNlX2RldmljZSk7Ci0JCW1hY19tYWNlX2RldmljZSA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLW91dF91bnJlZ2lzdGVyOgotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYWNfbWFjZV9kcml2ZXIpOwotCi0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWFjX21hY2VfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG1hY19tYWNlX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1hY19tYWNlX2RyaXZlcik7Ci0KLQlpZiAobWFjX21hY2VfZGV2aWNlKSB7Ci0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1hY19tYWNlX2RldmljZSk7Ci0JCW1hY19tYWNlX2RldmljZSA9IE5VTEw7Ci0JfQogfQogCiBtb2R1bGVfaW5pdChtYWNfbWFjZV9pbml0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNzb25pYy5jIGIvZHJpdmVycy9uZXQvbWFjc29uaWMuYwppbmRleCA4NzVkMzYxLi4yNDEwOWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKQEAgLTYyLDcgKzYyLDYgQEAKICNpbmNsdWRlIDxhc20vbWFjX3ZpYS5oPgogCiBzdGF0aWMgY2hhciBtYWNfc29uaWNfc3RyaW5nW10gPSAibWFjc29uaWMiOwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1hY19zb25pY19kZXZpY2U7CiAKICNpbmNsdWRlICJzb25pYy5oIgogCkBAIC02MDcsNiArNjA2LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiTWFjaW50b3NoIFNPTklDIGV0aGVybmV0IGRyaXZlciIpOwogbW9kdWxlX3BhcmFtKHNvbmljX2RlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhzb25pY19kZWJ1ZywgIm1hY3NvbmljIGRlYnVnIGxldmVsICgxLTQpIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm1hY3NvbmljIik7CiAKICNpbmNsdWRlICJzb25pYy5jIgogCkBAIC02MjcsNDQgKzYyNywxOSBAQAogCS5wcm9iZSAgPSBtYWNfc29uaWNfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG1hY19zb25pY19kZXZpY2VfcmVtb3ZlKSwKIAkuZHJpdmVyCT0gewotCQkubmFtZSA9IG1hY19zb25pY19zdHJpbmcsCisJCS5uYW1lCT0gbWFjX3NvbmljX3N0cmluZywKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1hY19zb25pY19pbml0X21vZHVsZSh2b2lkKQogewotCWludCBlcnI7Ci0KLQlpZiAoKGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWFjX3NvbmljX2RyaXZlcikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRHJpdmVyIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCW1hY19zb25pY19kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MobWFjX3NvbmljX3N0cmluZywgMCk7Ci0JaWYgKCFtYWNfc29uaWNfZGV2aWNlKQotCQlnb3RvIG91dF91bnJlZ2lzdGVyOwotCi0JaWYgKHBsYXRmb3JtX2RldmljZV9hZGQobWFjX3NvbmljX2RldmljZSkpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChtYWNfc29uaWNfZGV2aWNlKTsKLQkJbWFjX3NvbmljX2RldmljZSA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLW91dF91bnJlZ2lzdGVyOgotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYWNfc29uaWNfZHJpdmVyKTsKLQotCXJldHVybiAtRU5PTUVNOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1hY19zb25pY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWFjX3NvbmljX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1hY19zb25pY19kcml2ZXIpOwotCi0JaWYgKG1hY19zb25pY19kZXZpY2UpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobWFjX3NvbmljX2RldmljZSk7Ci0JCW1hY19zb25pY19kZXZpY2UgPSBOVUxMOwotCX0KIH0KIAogbW9kdWxlX2luaXQobWFjX3NvbmljX2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwppbmRleCA5ZjlkNjA4Li4yNDI3OWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCkBAIC0xOTQxLDcgKzE5NDEsNyBAQAogCQluZXRpZl93YWtlX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CiAKIAkJY2xlYXJfYml0KF9fTlhfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwotCisJCXJldHVybjsKIAl9IGVsc2UgewogCQljbGVhcl9iaXQoX19OWF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiAJCWlmICghbmV0eGVuX25pY19yZXNldF9jb250ZXh0KGFkYXB0ZXIpKSB7CkBAIC0yMjQwLDcgKzIyNDAsOSBAQAogCiAJbmV0eGVuX25pY19kb3duKGFkYXB0ZXIsIG5ldGRldik7CiAKKwlydG5sX2xvY2soKTsKIAluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKKwlydG5sX3VubG9jaygpOwogCiAJc3RhdHVzID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9QRUdfSEFMVF9TVEFUVVMxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwppbmRleCA2ZGQ0ODZkLi5hYTU3Y2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwpAQCAtNDUzLDggKzQ1Myw3IEBACiAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKICAgICBsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwotICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0KLQlJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CisgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAgICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSAxNjsKICAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwogICAgIGxpbmstPmlvLk51bVBvcnRzMiA9IDg7CkBAIC02NTIsOCArNjUxLDcgQEAKIAogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOwogICAgIGxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7Ci0gICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPQotCUlSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOworICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDY0OwogICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAgICAgbGluay0+aW8uTnVtUG9ydHMyID0gODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwppbmRleCAxMDNlOGIwLi40Njk5N2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCkBAIC0yMjg0LDYgKzIyODQsNyBAQAogIGZhaWwyOgogCWVmeF9maW5pX3N0cnVjdChlZngpOwogIGZhaWwxOgorCVdBUk5fT04ocmMgPiAwKTsKIAlFRlhfTE9HKGVmeCwgImluaXRpYWxpc2F0aW9uIGZhaWxlZC4gcmM9JWRcbiIsIHJjKTsKIAlmcmVlX25ldGRldihuZXRfZGV2KTsKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uX2JvYXJkcy5jIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9ib2FyZHMuYwppbmRleCBiZjBiOTZhLi41NzEyZmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uX2JvYXJkcy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25fYm9hcmRzLmMKQEAgLTI5LDYgKzI5LDE1IEBACiAjZGVmaW5lIEZBTENPTl9CT0FSRF9TRk40MTExVCAweDUxCiAjZGVmaW5lIEZBTENPTl9CT0FSRF9TRk40MTEyRiAweDUyCiAKKy8qIEJvYXJkIHRlbXBlcmF0dXJlIGlzIGFib3V0IDE1wrBDIGFib3ZlIGFtYmllbnQgd2hlbiBhaXIgZmxvdyBpcworICogbGltaXRlZC4gKi8KKyNkZWZpbmUgRkFMQ09OX0JPQVJEX1RFTVBfQklBUwkxNQorCisvKiBTRkM0MDAwIGRhdGFzaGVldCBzYXlzOiAnVGhlIG1heGltdW0gcGVybWl0dGVkIGp1bmN0aW9uIHRlbXBlcmF0dXJlCisgKiBpcyAxMjXCsEM7IHRoZSB0aGVybWFsIGRlc2lnbiBvZiB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSBTRkM0MDAwCisgKiBzaG91bGQgYWltIHRvIGtlZXAgdGhpcyB3ZWxsIGJlbG93IDEwMMKwQy4nICovCisjZGVmaW5lIEZBTENPTl9KVU5DX1RFTVBfTUFYCTkwCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU3VwcG9ydCBmb3IgTE04NyBzZW5zb3IgY2hpcCB1c2VkIG9uIHNldmVyYWwgYm9hcmRzCiAgKi8KQEAgLTU0OCwxNiArNTU3LDE2IEBACiBzdGF0aWMgdTggc2ZlNDAwMl9sbTg3X2NoYW5uZWwgPSAweDAzOyAvKiB1c2UgQUlOIG5vdCBGQU4gaW5wdXRzICovCiAKIHN0YXRpYyBjb25zdCB1OCBzZmU0MDAyX2xtODdfcmVnc1tdID0gewotCUxNODdfSU5fTElNSVRTKDAsIDB4ODMsIDB4OTEpLAkJLyogMi41VjogIDEuOFYgKy8tIDUlICovCi0JTE04N19JTl9MSU1JVFMoMSwgMHg1MSwgMHg1YSksCQkvKiBWY2NwMTogMS4yViArLy0gNSUgKi8KLQlMTTg3X0lOX0xJTUlUUygyLCAweGI2LCAweGNhKSwJCS8qIDMuM1Y6ICAzLjNWICsvLSA1JSAqLwotCUxNODdfSU5fTElNSVRTKDMsIDB4YjAsIDB4YzkpLAkJLyogNVY6ICAgIDQuNi01LjJWICovCi0JTE04N19JTl9MSU1JVFMoNCwgMHhiMCwgMHhlMCksCQkvKiAxMlY6ICAgMTEtMTRWICovCi0JTE04N19JTl9MSU1JVFMoNSwgMHg0NCwgMHg0YiksCQkvKiBWY2NwMjogMS4wViArLy0gNSUgKi8KLQlMTTg3X0FJTl9MSU1JVFMoMCwgMHhhMCwgMHhiMiksCQkvKiBBSU4xOiAgMS42NlYgKy8tIDUlICovCi0JTE04N19BSU5fTElNSVRTKDEsIDB4OTEsIDB4YTEpLAkJLyogQUlOMjogIDEuNVYgKy8tIDUlICovCi0JTE04N19URU1QX0lOVF9MSU1JVFMoMTAsIDYwKSwJCS8qIGJvYXJkICovCi0JTE04N19URU1QX0VYVDFfTElNSVRTKDEwLCA3MCksCQkvKiBGYWxjb24gKi8KKwlMTTg3X0lOX0xJTUlUUygwLCAweDdjLCAweDk5KSwJCS8qIDIuNVY6ICAxLjhWICsvLSAxMCUgKi8KKwlMTTg3X0lOX0xJTUlUUygxLCAweDRjLCAweDVlKSwJCS8qIFZjY3AxOiAxLjJWICsvLSAxMCUgKi8KKwlMTTg3X0lOX0xJTUlUUygyLCAweGFjLCAweGQ0KSwJCS8qIDMuM1Y6ICAzLjNWICsvLSAxMCUgKi8KKwlMTTg3X0lOX0xJTUlUUygzLCAweGFjLCAweGQ0KSwJCS8qIDVWOiAgICA1LjBWICsvLSAxMCUgKi8KKwlMTTg3X0lOX0xJTUlUUyg0LCAweGFjLCAweGUwKSwJCS8qIDEyVjogICAxMC44LTE0ViAqLworCUxNODdfSU5fTElNSVRTKDUsIDB4M2YsIDB4NGYpLAkJLyogVmNjcDI6IDEuMFYgKy8tIDEwJSAqLworCUxNODdfQUlOX0xJTUlUUygwLCAweDk4LCAweGJiKSwJCS8qIEFJTjE6ICAxLjY2ViArLy0gMTAlICovCisJTE04N19BSU5fTElNSVRTKDEsIDB4OGEsIDB4YTkpLAkJLyogQUlOMjogIDEuNVYgKy8tIDEwJSAqLworCUxNODdfVEVNUF9JTlRfTElNSVRTKDAsIDgwICsgRkFMQ09OX0JPQVJEX1RFTVBfQklBUyksCisJTE04N19URU1QX0VYVDFfTElNSVRTKDAsIEZBTENPTl9KVU5DX1RFTVBfTUFYKSwKIAkwCiB9OwogCkBAIC02MTksMTQgKzYyOCwxNCBAQAogc3RhdGljIHU4IHNmbjQxMTJmX2xtODdfY2hhbm5lbCA9IDB4MDM7IC8qIHVzZSBBSU4gbm90IEZBTiBpbnB1dHMgKi8KIAogc3RhdGljIGNvbnN0IHU4IHNmbjQxMTJmX2xtODdfcmVnc1tdID0gewotCUxNODdfSU5fTElNSVRTKDAsIDB4ODMsIDB4OTEpLAkJLyogMi41VjogIDEuOFYgKy8tIDUlICovCi0JTE04N19JTl9MSU1JVFMoMSwgMHg1MSwgMHg1YSksCQkvKiBWY2NwMTogMS4yViArLy0gNSUgKi8KLQlMTTg3X0lOX0xJTUlUUygyLCAweGI2LCAweGNhKSwJCS8qIDMuM1Y6ICAzLjNWICsvLSA1JSAqLwotCUxNODdfSU5fTElNSVRTKDQsIDB4YjAsIDB4ZTApLAkJLyogMTJWOiAgIDExLTE0ViAqLwotCUxNODdfSU5fTElNSVRTKDUsIDB4NDQsIDB4NGIpLAkJLyogVmNjcDI6IDEuMFYgKy8tIDUlICovCi0JTE04N19BSU5fTElNSVRTKDEsIDB4OTEsIDB4YTEpLAkJLyogQUlOMjogIDEuNVYgKy8tIDUlICovCi0JTE04N19URU1QX0lOVF9MSU1JVFMoMTAsIDYwKSwJCS8qIGJvYXJkICovCi0JTE04N19URU1QX0VYVDFfTElNSVRTKDEwLCA3MCksCQkvKiBGYWxjb24gKi8KKwlMTTg3X0lOX0xJTUlUUygwLCAweDdjLCAweDk5KSwJCS8qIDIuNVY6ICAxLjhWICsvLSAxMCUgKi8KKwlMTTg3X0lOX0xJTUlUUygxLCAweDRjLCAweDVlKSwJCS8qIFZjY3AxOiAxLjJWICsvLSAxMCUgKi8KKwlMTTg3X0lOX0xJTUlUUygyLCAweGFjLCAweGQ0KSwJCS8qIDMuM1Y6ICAzLjNWICsvLSAxMCUgKi8KKwlMTTg3X0lOX0xJTUlUUyg0LCAweGFjLCAweGUwKSwJCS8qIDEyVjogICAxMC44LTE0ViAqLworCUxNODdfSU5fTElNSVRTKDUsIDB4M2YsIDB4NGYpLAkJLyogVmNjcDI6IDEuMFYgKy8tIDEwJSAqLworCUxNODdfQUlOX0xJTUlUUygxLCAweDhhLCAweGE5KSwJCS8qIEFJTjI6ICAxLjVWICsvLSAxMCUgKi8KKwlMTTg3X1RFTVBfSU5UX0xJTUlUUygwLCA2MCArIEZBTENPTl9CT0FSRF9URU1QX0JJQVMpLAorCUxNODdfVEVNUF9FWFQxX0xJTUlUUygwLCBGQUxDT05fSlVOQ19URU1QX01BWCksCiAJMAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL21jZGkuYyBiL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmMKaW5kZXggOWYwMzViOS4uZjY2YjNkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21jZGkuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbWNkaS5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAllZnhfZHdvcmRfdCByZWc7CiAKIAkvKiBDaGVjayBmb3IgYSByZWJvb3QgYXRvbWljYWxseSB3aXRoIHJlc3BlY3QgdG8gZWZ4X21jZGlfY29weW91dCgpICovCi0JcmMgPSBlZnhfbWNkaV9wb2xsX3JlYm9vdChlZngpOworCXJjID0gLWVmeF9tY2RpX3BvbGxfcmVib290KGVmeCk7CiAJaWYgKHJjKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3F0MjAyeF9waHkuYyBiL2RyaXZlcnMvbmV0L3NmYy9xdDIwMnhfcGh5LmMKaW5kZXggZTBkMTNhNC4uNjdlZWM3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3F0MjAyeF9waHkuYworKysgYi9kcml2ZXJzL25ldC9zZmMvcXQyMDJ4X3BoeS5jCkBAIC0zMjAsNyArMzIwLDcgQEAKIAogCWZhbGNvbl9ib2FyZChlZngpLT50eXBlLT5pbml0X3BoeShlZngpOwogCi0JcmV0dXJuIHJjOworCXJldHVybiAwOwogCiAgZmFpbDoKIAlFRlhfRVJSKGVmeCwgIlBIWSByZXNldCB0aW1lZCBvdXRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5jIGIvZHJpdmVycy9uZXQvc2t5Mi5jCmluZGV4IGQ3NjA2NTAuLjY3MjQ5YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuYworKysgYi9kcml2ZXJzL25ldC9za3kyLmMKQEAgLTEwMjUsMTEgKzEwMjUsOCBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2t5Ml90eF9sZSAqZ2V0X3R4X2xlKHN0cnVjdCBza3kyX3BvcnQgKnNreTIsIHUxNiAqc2xvdCkKIHsKIAlzdHJ1Y3Qgc2t5Ml90eF9sZSAqbGUgPSBza3kyLT50eF9sZSArICpzbG90OwotCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJlID0gc2t5Mi0+dHhfcmluZyArICpzbG90OwogCiAJKnNsb3QgPSBSSU5HX05FWFQoKnNsb3QsIHNreTItPnR4X3Jpbmdfc2l6ZSk7Ci0JcmUtPmZsYWdzID0gMDsKLQlyZS0+c2tiID0gTlVMTDsKIAlsZS0+Y3RybCA9IDA7CiAJcmV0dXJuIGxlOwogfQpAQCAtMTYyMiw4ICsxNjE5LDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNreTJfdHhfdW5tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkgIGNvbnN0IHN0cnVjdCB0eF9yaW5nX2luZm8gKnJlKQorc3RhdGljIHZvaWQgc2t5Ml90eF91bm1hcChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHR4X3JpbmdfaW5mbyAqcmUpCiB7CiAJaWYgKHJlLT5mbGFncyAmIFRYX01BUF9TSU5HTEUpCiAJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgcGNpX3VubWFwX2FkZHIocmUsIG1hcGFkZHIpLApAQCAtMTYzMyw2ICsxNjI5LDcgQEAKIAkJcGNpX3VubWFwX3BhZ2UocGRldiwgcGNpX3VubWFwX2FkZHIocmUsIG1hcGFkZHIpLAogCQkJICAgICAgIHBjaV91bm1hcF9sZW4ocmUsIG1hcGxlbiksCiAJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJcmUtPmZsYWdzID0gMDsKIH0KIAogLyoKQEAgLTE4MzksNiArMTgzNiw3IEBACiAJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKKwkJCXJlLT5za2IgPSBOVUxMOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAogCQkJc2t5Mi0+dHhfbmV4dCA9IFJJTkdfTkVYVChpZHgsIHNreTItPnR4X3Jpbmdfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwppbmRleCA5NWRiNjBhLi5mOTUyMTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKQEAgLTEwNjMsNyArMTA2Myw3IEBACiAJaWYgKHJldHZhbCkgewogCQlwcmludGsoS0VSTl9FUlIgInN0YXJmaXJlOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCiAJCSAgICAgICBGSVJNV0FSRV9SWCk7Ci0JCXJldHVybiByZXR2YWw7CisJCWdvdG8gb3V0X2luaXQ7CiAJfQogCWlmIChmd19yeC0+c2l6ZSAlIDQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzdGFyZmlyZTogYm9ndXMgbGVuZ3RoICV6dSBpbiBcIiVzXCJcbiIsCkBAIC0xMTA4LDYgKzExMDgsOSBAQAogCXJlbGVhc2VfZmlybXdhcmUoZndfdHgpOwogb3V0X3J4OgogCXJlbGVhc2VfZmlybXdhcmUoZndfcngpOworb3V0X2luaXQ6CisJaWYgKHJldHZhbCkKKwkJbmV0ZGV2X2Nsb3NlKGRldik7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCmluZGV4IDc1YTY2OWQuLmQ3MWMxOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYworKysgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKQEAgLTE0MzcsNyArMTQzNyw2IEBACiAJCS8qIFRyYW5zbWl0IGNvbXBsZXRlLiAqLwogCQlscC0+bHN0YXRzLnR4X2ludHMrKzsKIAkJdGMzNTgxNV90eGRvbmUoZGV2KTsKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldCA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jCmluZGV4IDIxZTE4M2EuLjVmM2I5ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKQEAgLTQxOSw3ICs0MTksNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWNkY19pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9CSJDREMgRXRoZXJuZXQgRGV2aWNlIiwKLQkuZmxhZ3MgPQlGTEFHX0VUSEVSIHwgRkxBR19MSU5LX0lOVFIsCisJLmZsYWdzID0JRkxBR19FVEhFUiwKIAkvLyAuY2hlY2tfY29ubmVjdCA9IGNkY19jaGVja19jb25uZWN0LAogCS5iaW5kID0JCWNkY19iaW5kLAogCS51bmJpbmQgPQl1c2JuZXRfY2RjX3VuYmluZCwKQEAgLTU4NCw2ICs1ODQsMTEgQEAKIAkJCVVTQl9DRENfU1VCQ0xBU1NfTURMTSwgVVNCX0NEQ19QUk9UT19OT05FKSwKIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJm1ibV9pbmZvLAogfSwgeworCS8qIEVyaWNzc29uIEMzNjA3dyB2ZXIgMiAqLworCVVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MGJkYiwgMHgxOTBiLCBVU0JfQ0xBU1NfQ09NTSwKKwkJCVVTQl9DRENfU1VCQ0xBU1NfTURMTSwgVVNCX0NEQ19QUk9UT19OT05FKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJm1ibV9pbmZvLAorfSwgewogCS8qIFRvc2hpYmEgRjM1MDdnICovCiAJVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwOTMwLCAweDEzMGIsIFVTQl9DTEFTU19DT01NLAogCQkJVVNCX0NEQ19TVUJDTEFTU19NRExNLCBVU0JfQ0RDX1BST1RPX05PTkUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwppbmRleCBjOTNmNThmLi4zMTdhYTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYworKysgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwpAQCAtMTg3NywxMyArMTg3NywxMiBAQAogLyoqCiAgKgl0eF9zcnYJCS0JdHJhbnNtaXQgaW50ZXJydXB0IHNlcnZpY2UKICAqCUB2cHRyOyBWZWxvY2l0eQotICoJQHN0YXR1czoKICAqCiAgKglTY2FuIHRoZSBxdWV1ZXMgbG9va2luZyBmb3IgdHJhbnNtaXR0ZWQgcGFja2V0cyB0aGF0CiAgKgl3ZSBjYW4gY29tcGxldGUgYW5kIGNsZWFuIHVwLiBVcGRhdGUgYW55IHN0YXRpc3RpY3MgYXMKICAqCW5lY2Vzc2FyeS8KICAqLwotc3RhdGljIGludCB2ZWxvY2l0eV90eF9zcnYoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIHUzMiBzdGF0dXMpCitzdGF0aWMgaW50IHZlbG9jaXR5X3R4X3NydihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKIHsKIAlzdHJ1Y3QgdHhfZGVzYyAqdGQ7CiAJaW50IHFudW07CkBAIC0yMDkwLDE0ICsyMDg5LDEyIEBACiAvKioKICAqCXZlbG9jaXR5X3J4X3NydgkJLQlzZXJ2aWNlIFJYIGludGVycnVwdAogICoJQHZwdHI6IHZlbG9jaXR5Ci0gKglAc3RhdHVzOiBhZGFwdGVyIHN0YXR1cyAodW51c2VkKQogICoKICAqCVdhbGsgdGhlIHJlY2VpdmUgcmluZyBvZiB0aGUgdmVsb2NpdHkgYWRhcHRlciBhbmQgcmVtb3ZlCiAgKglhbnkgcmVjZWl2ZWQgcGFja2V0cyBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlLiBIYW5kIHRoZSByaW5nCiAgKglzbG90cyBiYWNrIHRvIHRoZSBhZGFwdGVyIGZvciByZXVzZS4KICAqLwotc3RhdGljIGludCB2ZWxvY2l0eV9yeF9zcnYoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIGludCBzdGF0dXMsCi0JCWludCBidWRnZXRfbGVmdCkKK3N0YXRpYyBpbnQgdmVsb2NpdHlfcnhfc3J2KHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBpbnQgYnVkZ2V0X2xlZnQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnZwdHItPmRldi0+c3RhdHM7CiAJaW50IHJkX2N1cnIgPSB2cHRyLT5yeC5jdXJyOwpAQCAtMjE1MSwzMiArMjE0OCwyNCBAQAogCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gY29udGFpbmVyX29mKG5hcGksCiAJCQlzdHJ1Y3QgdmVsb2NpdHlfaW5mbywgbmFwaSk7CiAJdW5zaWduZWQgaW50IHJ4X2RvbmU7Ci0JdTMyIGlzcl9zdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmdnB0ci0+bG9jayk7Ci0JaXNyX3N0YXR1cyA9IG1hY19yZWFkX2lzcih2cHRyLT5tYWNfcmVncyk7Ci0KLQkvKiBBY2sgdGhlIGludGVycnVwdCAqLwotCW1hY193cml0ZV9pc3IodnB0ci0+bWFjX3JlZ3MsIGlzcl9zdGF0dXMpOwotCWlmIChpc3Jfc3RhdHVzICYgKH4oSVNSX1BSWEkgfCBJU1JfUFBSWEkgfCBJU1JfUFRYSSB8IElTUl9QUFRYSSkpKQotCQl2ZWxvY2l0eV9lcnJvcih2cHRyLCBpc3Jfc3RhdHVzKTsKLQorCXNwaW5fbG9ja19pcnFzYXZlKCZ2cHRyLT5sb2NrLCBmbGFncyk7CiAJLyoKIAkgKiBEbyByeCBhbmQgdHggdHdpY2UgZm9yIHBlcmZvcm1hbmNlICh0YWtlbiBmcm9tIHRoZSBWSUEKIAkgKiBvdXQtb2YtdHJlZSBkcml2ZXIpLgogCSAqLwotCXJ4X2RvbmUgPSB2ZWxvY2l0eV9yeF9zcnYodnB0ciwgaXNyX3N0YXR1cywgYnVkZ2V0IC8gMik7Ci0JdmVsb2NpdHlfdHhfc3J2KHZwdHIsIGlzcl9zdGF0dXMpOwotCXJ4X2RvbmUgKz0gdmVsb2NpdHlfcnhfc3J2KHZwdHIsIGlzcl9zdGF0dXMsIGJ1ZGdldCAtIHJ4X2RvbmUpOwotCXZlbG9jaXR5X3R4X3Nydih2cHRyLCBpc3Jfc3RhdHVzKTsKLQotCXNwaW5fdW5sb2NrKCZ2cHRyLT5sb2NrKTsKKwlyeF9kb25lID0gdmVsb2NpdHlfcnhfc3J2KHZwdHIsIGJ1ZGdldCAvIDIpOworCXZlbG9jaXR5X3R4X3Nydih2cHRyKTsKKwlyeF9kb25lICs9IHZlbG9jaXR5X3J4X3Nydih2cHRyLCBidWRnZXQgLSByeF9kb25lKTsKKwl2ZWxvY2l0eV90eF9zcnYodnB0cik7CiAKIAkvKiBJZiBidWRnZXQgbm90IGZ1bGx5IGNvbnN1bWVkLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KIAlpZiAocnhfZG9uZSA8IGJ1ZGdldCkgewogCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQltYWNfZW5hYmxlX2ludCh2cHRyLT5tYWNfcmVncyk7CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByeF9kb25lOwogfQpAQCAtMjIwNiwxMCArMjE5NSwxNyBAQAogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQogCisJLyogQWNrIHRoZSBpbnRlcnJ1cHQgKi8KKwltYWNfd3JpdGVfaXNyKHZwdHItPm1hY19yZWdzLCBpc3Jfc3RhdHVzKTsKKwogCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZ2cHRyLT5uYXBpKSkpIHsKIAkJbWFjX2Rpc2FibGVfaW50KHZwdHItPm1hY19yZWdzKTsKIAkJX19uYXBpX3NjaGVkdWxlKCZ2cHRyLT5uYXBpKTsKIAl9CisKKwlpZiAoaXNyX3N0YXR1cyAmICh+KElTUl9QUlhJIHwgSVNSX1BQUlhJIHwgSVNSX1BUWEkgfCBJU1JfUFBUWEkpKSkKKwkJdmVsb2NpdHlfZXJyb3IodnB0ciwgaXNyX3N0YXR1cyk7CisKIAlzcGluX3VubG9jaygmdnB0ci0+bG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0zMTAwLDcgKzMwOTYsNyBAQAogCXZlbG9jaXR5X2luaXRfcmVnaXN0ZXJzKHZwdHIsIFZFTE9DSVRZX0lOSVRfV09MKTsKIAltYWNfZGlzYWJsZV9pbnQodnB0ci0+bWFjX3JlZ3MpOwogCi0JdmVsb2NpdHlfdHhfc3J2KHZwdHIsIDApOworCXZlbG9jaXR5X3R4X3Nydih2cHRyKTsKIAogCWZvciAoaSA9IDA7IGkgPCB2cHRyLT50eC5udW1xOyBpKyspIHsKIAkJaWYgKHZwdHItPnR4LnVzZWRbaV0pCkBAIC0zMzQ0LDYgKzMzNDAsNyBAQAogewogCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgbWF4X3VzID0gMHgzZiAqIDY0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiA2IGJpdHMgb2YgICovCiAJaWYgKGVjbWQtPnR4X2NvYWxlc2NlX3VzZWNzID4gbWF4X3VzKQpAQCAtMzM2NSw2ICszMzYyLDcgQEAKIAkJCWVjbWQtPnR4X2NvYWxlc2NlX3VzZWNzKTsKIAogCS8qIFNldHVwIHRoZSBpbnRlcnJ1cHQgc3VwcHJlc3Npb24gYW5kIHF1ZXVlIHRpbWVycyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ2cHRyLT5sb2NrLCBmbGFncyk7CiAJbWFjX2Rpc2FibGVfaW50KHZwdHItPm1hY19yZWdzKTsKIAlzZXR1cF9hZGFwdGl2ZV9pbnRlcnJ1cHRzKHZwdHIpOwogCXNldHVwX3F1ZXVlX3RpbWVycyh2cHRyKTsKQEAgLTMzNzIsNiArMzM3MCw3IEBACiAJbWFjX3dyaXRlX2ludF9tYXNrKHZwdHItPmludF9tYXNrLCB2cHRyLT5tYWNfcmVncyk7CiAJbWFjX2NsZWFyX2lzcih2cHRyLT5tYWNfcmVncyk7CiAJbWFjX2VuYWJsZV9pbnQodnB0ci0+bWFjX3JlZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwppbmRleCAyZWM2MWYwLi5hZTM3MTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwpAQCAtODU1LDEyICs4NTUsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfMTFhX2VlcHJvbV9maXgoc3RydWN0IGF0aF9odyAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X2VlcHJvbV9maXgoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIGksIGo7CiAKLQlpZiAoKGFoLT5od192ZXJzaW9uLmRldmlkID09IEFSOTI4MF9ERVZJRF9QQ0kpICYmCi0JICAgIHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBhaC0+Y2Fwcy53aXJlbGVzc19tb2RlcykpIHsKKwlpZiAoYWgtPmh3X3ZlcnNpb24uZGV2aWQgPT0gQVI5MjgwX0RFVklEX1BDSSkgewogCiAJCS8qIEVFUFJPTSBGaXh1cCAqLwogCQlmb3IgKGkgPSAwOyBpIDwgYWgtPmluaU1vZGVzLmlhX3Jvd3M7IGkrKykgewpAQCAtOTgwLDcgKzk3OSw3IEBACiAJaWYgKHIpCiAJCXJldHVybiByOwogCi0JYXRoOWtfaHdfaW5pdF8xMWFfZWVwcm9tX2ZpeChhaCk7CisJYXRoOWtfaHdfaW5pdF9lZXByb21fZml4KGFoKTsKIAogCXIgPSBhdGg5a19od19pbml0X21hY2FkZHIoYWgpOwogCWlmIChyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwppbmRleCA5OTZlYjkwLi42NDNiZWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKQEAgLTI2NTUsMTAgKzI2NTUsMTAgQEAKIAkgICAgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKSB7CiAJCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJCWF0aDlrX2h3X3N0b3B0eGRtYShzYy0+c2NfYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7Ci0JCWF0aF9iZWFjb25fcmV0dXJuKHNjLCBhdnApOwogCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAl9CiAKKwlhdGhfYmVhY29uX3JldHVybihzYywgYXZwKTsKIAlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0JFQUNPTlM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+YmVhY29uLmJzbG90KTsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYwppbmRleCBmYTEyYjkwLi4yOWJmMzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKQEAgLTE2MTUsNyArMTYxNSw3IEBACiAJCWJmLT5iZl9mcm1sZW4gLT0gcGFkc2l6ZTsKIAl9CiAKLQlpZiAoY29uZl9pc19odCgmaHctPmNvbmYpICYmICFpc19wYWUoc2tiKSkKKwlpZiAoY29uZl9pc19odCgmaHctPmNvbmYpKQogCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfSFQ7CiAKIAliZi0+YmZfZmxhZ3MgPSBzZXR1cF90eF9mbGFncyhzYywgc2tiLCB0eGN0bC0+dHhxKTsKQEAgLTE3MDEsNyArMTcwMSw3IEBACiAJCQlnb3RvIHR4X2RvbmU7CiAJCX0KIAotCQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7CisJCWlmICgodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSAmJiAhaXNfcGFlKHNrYikpIHsKIAkJCS8qCiAJCQkgKiBUcnkgYWdncmVnYXRpb24gaWYgaXQncyBhIHVuaWNhc3QgZGF0YSBmcmFtZQogCQkJICogYW5kIHRoZSBkZXN0aW5hdGlvbiBpcyBIVCBjYXBhYmxlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCmluZGV4IGZlM2JmOTQuLmM0ODRjYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKQEAgLTExNSw2ICsxMTUsNyBAQAogI2RlZmluZSBCNDNfTU1JT19UU0ZfMgkJCTB4NjM2CS8qIGNvcmUgcmV2IDwgMyBvbmx5ICovCiAjZGVmaW5lIEI0M19NTUlPX1RTRl8zCQkJMHg2MzgJLyogY29yZSByZXYgPCAzIG9ubHkgKi8KICNkZWZpbmUgQjQzX01NSU9fUk5HCQkJMHg2NUEKKyNkZWZpbmUgQjQzX01NSU9fSUZTU0xPVAkJMHg2ODQJLyogSW50ZXJmcmFtZSBzbG90IHRpbWUgKi8KICNkZWZpbmUgQjQzX01NSU9fSUZTQ1RMCQkJMHg2ODggLyogSW50ZXJmcmFtZSBzcGFjZSBjb250cm9sICovCiAjZGVmaW5lICBCNDNfTU1JT19JRlNDVExfVVNFX0VEQ0YJMHgwMDA0CiAjZGVmaW5lIEI0M19NTUlPX1BPV0VSVVBfREVMQVkJCTB4NkE4CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwppbmRleCA0YzQxY2ZlLi40OTBmYjQ1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCkBAIC02MjgsMTAgKzYyOCwxNyBAQAogc3RhdGljIHZvaWQgYjQzX3NldF9zbG90X3RpbWUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgc2xvdF90aW1lKQogewogCS8qIHNsb3RfdGltZSBpcyBpbiB1c2VjLiAqLwotCWlmIChkZXYtPnBoeS50eXBlICE9IEI0M19QSFlUWVBFX0cpCisJLyogVGhpcyB0ZXN0IHVzZWQgdG8gZXhpdCBmb3IgYWxsIGJ1dCBhIEcgUEhZLiAqLworCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCXJldHVybjsKLQliNDNfd3JpdGUxNihkZXYsIDB4Njg0LCA1MTAgKyBzbG90X3RpbWUpOwotCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCAweDAwMTAsIHNsb3RfdGltZSk7CisJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19JRlNTTE9ULCA1MTAgKyBzbG90X3RpbWUpOworCS8qIFNoYXJlZCBtZW1vcnkgbG9jYXRpb24gMHgwMDEwIGlzIHRoZSBzbG90IHRpbWUgYW5kIHNob3VsZCBiZQorCSAqIHNldCB0byBzbG90X3RpbWU7IGhvd2V2ZXIsIHRoaXMgcmVnaXN0ZXIgaXMgaW5pdGlhbGx5IDAgYW5kIGNoYW5naW5nCisJICogdGhlIHZhbHVlIGFkdmVyc2VseSBhZmZlY3RzIHRoZSB0cmFuc21pdCByYXRlIGZvciBCQ000MzExCisJICogZGV2aWNlcy4gVW50aWwgdGhpcyBiZWhhdmlvciBpcyB1bnRlcnN0b29kLCBkZWxldGUgdGhpcyBzdGVwCisJICoKKwkgKiBiNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgMHgwMDEwLCBzbG90X3RpbWUpOworCSAqLwogfQogCiBzdGF0aWMgdm9pZCBiNDNfc2hvcnRfc2xvdF90aW1pbmdfZW5hYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwppbmRleCA5YjRiOGI1Li4zMTQ2MjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCkBAIC0yMDA4LDcgKzIwMDgsNyBAQAogCQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJSZXRyeSBzY2hlZHVsZXIgcmVjbGFpbSBzY2Rfc3NuICIKIAkJCQkJICAgIiVkIGluZGV4ICVkXG4iLCBzY2Rfc3NuICwgaW5kZXgpOwogCQkJZnJlZWQgPSBpd2xfdHhfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4KTsKLQkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0udGZkc19pbl9xdWV1ZSAtPSBmcmVlZDsKKwkJCWl3bF9mcmVlX3RmZHNfaW5fcXVldWUocHJpdiwgc3RhX2lkLCB0aWQsIGZyZWVkKTsKIAogCQkJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgJiYKIAkJCSAgICAoaXdsX3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrKSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCmluZGV4IGRlNDVmMzAuLmNmZmFhZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKQEAgLTExMjUsNyArMTEyNSw3IEBACiAJCQkJCXNjZF9zc24gLCBpbmRleCwgdHhxX2lkLCB0eHEtPnN3cV9pZCk7CiAKIAkJCWZyZWVkID0gaXdsX3R4X3F1ZXVlX3JlY2xhaW0ocHJpdiwgdHhxX2lkLCBpbmRleCk7Ci0JCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUgLT0gZnJlZWQ7CisJCQlpd2xfZnJlZV90ZmRzX2luX3F1ZXVlKHByaXYsIHN0YV9pZCwgdGlkLCBmcmVlZCk7CiAKIAkJCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkICYmCiAJCQkgICAgKGl3bF9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyaykgJiYKQEAgLTExNTMsMTYgKzExNTMsMTQgQEAKIAkJCQkgICB0eF9yZXNwLT5mYWlsdXJlX2ZyYW1lKTsKIAogCQlmcmVlZCA9IGl3bF90eF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOwotCQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKHR4X3Jlc3AtPmZyYW1lX2N0cmwpKQotCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlIC09IGZyZWVkOworCQlpd2xfZnJlZV90ZmRzX2luX3F1ZXVlKHByaXYsIHN0YV9pZCwgdGlkLCBmcmVlZCk7CiAKIAkJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgJiYKIAkJICAgIChpd2xfcXVldWVfc3BhY2UoJnR4cS0+cSkgPiB0eHEtPnEubG93X21hcmspKQogCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxX2lkKTsKIAl9CiAKLQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKHR4X3Jlc3AtPmZyYW1lX2N0cmwpKQotCQlpd2xfdHhxX2NoZWNrX2VtcHR5KHByaXYsIHN0YV9pZCwgdGlkLCB0eHFfaWQpOworCWl3bF90eHFfY2hlY2tfZW1wdHkocHJpdiwgc3RhX2lkLCB0aWQsIHR4cV9pZCk7CiAKIAlpZiAoaXdsX2NoZWNrX2JpdHMoc3RhdHVzLCBUWF9BQk9SVF9SRVFVSVJFRF9NU0spKQogCQlJV0xfRVJSKHByaXYsICJUT0RPOiAgSW1wbGVtZW50IFR4IEFCT1JUIFJFUVVJUkVEISEhXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwppbmRleCA1NDYxZjEwLi5mMzZmODA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCkBAIC0yNzQ1LDYgKzI3NDUsNyBAQAogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzID0gMDsKIAogCQlpd2xfc2V0X3J4b25fY2hhbm5lbChwcml2LCBjb25mLT5jaGFubmVsKTsKKwkJaXdsX3NldF9yeG9uX2h0KHByaXYsIGh0X2NvbmYpOwogCiAJCWl3bF9zZXRfZmxhZ3NfZm9yX2JhbmQocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaAppbmRleCAyN2NhODU5Li5iNjllOTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCkBAIC00NDYsNiArNDQ2LDggQEAKIGludCBpd2xfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKIGludCBpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwordm9pZCBpd2xfZnJlZV90ZmRzX2luX3F1ZXVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICBpbnQgc3RhX2lkLCBpbnQgdGlkLCBpbnQgZnJlZWQpOwogaW50IGl3bF90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAogCQkgICAgICBpbnQgc2xvdHNfbnVtLCB1MzIgdHhxX2lkKTsKIHZvaWQgaXdsX3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCmluZGV4IDZmMzZiNmUuLjJkYmNlODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYwpAQCAtOTI4LDcgKzkyOCwxMCBAQAogCWlmIChpZWVlODAyMTFfaXNfbWdtdChmYykgfHwKIAkgICAgaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoZmMpIHx8CiAJICAgIGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSB8fAotCSAgICBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpCisJICAgIGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYgSUVFRTgwMjExX1NDVExfRlJBRyB8fAorCSAgICAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSAmJgorCSAgICAgKmllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpICYKKwkgICAgIElFRUU4MDIxMV9RT1NfQ09OVFJPTF9BX01TRFVfUFJFU0VOVCkpCiAJCXJldCA9IHNrYl9saW5lYXJpemUoc2tiKTsKIAllbHNlCiAJCXJldCA9IF9fcHNrYl9wdWxsX3RhaWwoc2tiLCBtaW5fdCh1MTYsIElXTF9MSU5LX0hEUl9NQVgsIGxlbikpID8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMKaW5kZXggY2RlMDlhOC4uOTBmYmRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMKQEAgLTI5Nyw3ICsyOTcsNyBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfYWRkX3N0YXRpb24pOwogCi1zdGF0aWMgdm9pZCBpd2xfc3RhX3Vjb2RlX2RlYWN0aXZhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCBjaGFyICphZGRyKQorc3RhdGljIHZvaWQgaXdsX3N0YV91Y29kZV9kZWFjdGl2YXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOwpAQCAtMzI0LDcgKzMyNCw3IEBACiB7CiAJc3RydWN0IGl3bF9yZW1fc3RhX2NtZCAqcm1fc3RhID0KIAkJCShzdHJ1Y3QgaXdsX3JlbV9zdGFfY21kICopY21kLT5jbWQucGF5bG9hZDsKLQljb25zdCBjaGFyICphZGRyID0gcm1fc3RhLT5hZGRyOworCWNvbnN0IHU4ICphZGRyID0gcm1fc3RhLT5hZGRyOwogCiAJaWYgKHBrdC0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7CiAJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SRU1PVkVfU1RBICgweCUwOFgpXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKaW5kZXggODdjZTJiZC4uOGY0MDcxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCkBAIC0xMjAsNiArMTIwLDIwIEBACiBFWFBPUlRfU1lNQk9MKGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cik7CiAKIAordm9pZCBpd2xfZnJlZV90ZmRzX2luX3F1ZXVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICBpbnQgc3RhX2lkLCBpbnQgdGlkLCBpbnQgZnJlZWQpCit7CisJaWYgKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0udGZkc19pbl9xdWV1ZSA+PSBmcmVlZCkKKwkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlIC09IGZyZWVkOworCWVsc2UgeworCQlJV0xfRVJSKHByaXYsICJmcmVlIG1vcmUgdGhhbiB0ZmRzX2luX3F1ZXVlICgldTolZClcbiIsCisJCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUsCisJCQlmcmVlZCk7CisJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0udGZkc19pbl9xdWV1ZSA9IDA7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfZnJlZV90ZmRzX2luX3F1ZXVlKTsKKwogLyoqCiAgKiBpd2xfdHhfcXVldWVfZnJlZSAtIERlYWxsb2NhdGUgRE1BIHF1ZXVlLgogICogQHR4cTogVHJhbnNtaXQgcXVldWUgdG8gZGVhbGxvY2F0ZS4KQEAgLTExMzEsNiArMTE0NSw3IEBACiAJc3RydWN0IGl3bF9xdWV1ZSAqcSA9ICZ0eHEtPnE7CiAJc3RydWN0IGl3bF90eF9pbmZvICp0eF9pbmZvOwogCWludCBuZnJlZWQgPSAwOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAKIAlpZiAoKGluZGV4ID49IHEtPm5fYmQpIHx8IChpd2xfcXVldWVfdXNlZChxLCBpbmRleCkgPT0gMCkpIHsKIAkJSVdMX0VSUihwcml2LCAiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cSBpZCAoJWQpLCBpbmRleCAlZCwgIgpAQCAtMTE0NSwxMyArMTE2MCwxNiBAQAogCiAJCXR4X2luZm8gPSAmdHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXTsKIAkJaXdsX3R4X3N0YXR1cyhwcml2LCB0eF9pbmZvLT5za2JbMF0pOworCisJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXR4X2luZm8tPnNrYlswXS0+ZGF0YTsKKwkJaWYgKGhkciAmJiBpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJCW5mcmVlZCsrOwogCQl0eF9pbmZvLT5za2JbMF0gPSBOVUxMOwogCiAJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50eHFfaW52YWxfYnl0ZV9jbnRfdGJsKQogCQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2ludmFsX2J5dGVfY250X3RibChwcml2LCB0eHEpOwogCiAJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9mcmVlX3RmZChwcml2LCB0eHEpOwotCQluZnJlZWQrKzsKIAl9CiAJcmV0dXJuIG5mcmVlZDsKIH0KQEAgLTE1NTksNyArMTU3Nyw3IEBACiAJaWYgKHR4cS0+cS5yZWFkX3B0ciAhPSAoYmFfcmVzcF9zY2Rfc3NuICYgMHhmZikpIHsKIAkJLyogY2FsY3VsYXRlIG1hYzgwMjExIGFtcGR1IHN3IHF1ZXVlIHRvIHdha2UgKi8KIAkJaW50IGZyZWVkID0gaXdsX3R4X3F1ZXVlX3JlY2xhaW0ocHJpdiwgc2NkX2Zsb3csIGluZGV4KTsKLQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlIC09IGZyZWVkOworCQlpd2xfZnJlZV90ZmRzX2luX3F1ZXVlKHByaXYsIHN0YV9pZCwgdGlkLCBmcmVlZCk7CiAKIAkJaWYgKChpd2xfcXVldWVfc3BhY2UoJnR4cS0+cSkgPiB0eHEtPnEubG93X21hcmspICYmCiAJCSAgICBwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCmluZGV4IDZkNmVkNzQuLmY3MjdiNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCkBAIC03OTQsNyArNzk0LDcgQEAKIAl9CiAKIAlic3MtPmJzcyA9IGt6YWxsb2MoYnNzX2xlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFic3MpIHsKKwlpZiAoIWJzcy0+YnNzKSB7CiAJCWtmcmVlKGJzcyk7CiAJCUlXTV9FUlIoaXdtLCAiQ291bGRuJ3QgYWxsb2NhdGUgYnNzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMKaW5kZXggYmM1NzI2ZC4uN2JhMzA1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYwpAQCAtNjUsNiArNjUsNyBAQAogCS8qIFNpdGVjb20gKi8KIAl7VVNCX0RFVklDRSgweDBkZjYsIDB4MDAwZCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKIAl7VVNCX0RFVklDRSgweDBkZjYsIDB4MDAyOCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3Qn0sCisJe1VTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMjkpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N0J9LAogCS8qIFNwaGFpcm9uIEFjY2VzcyBTeXN0ZW1zIEdtYkggKi8KIAl7VVNCX0RFVklDRSgweDExNEIsIDB4MDE1MCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKIAkvKiBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL0tjb25maWcgYi9kcml2ZXJzL29mL0tjb25maWcKaW5kZXggZDJmYTI3Yy4uN2NlY2M4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9LY29uZmlnCisrKyBiL2RyaXZlcnMvb2YvS2NvbmZpZwpAQCAtMSwzICsxLDExIEBACitjb25maWcgT0ZfRkxBVFRSRUUKKwlib29sCisJZGVwZW5kcyBvbiBPRgorCitjb25maWcgT0ZfRFlOQU1JQworCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIE9GICYmIFBQQ19PRgorCiBjb25maWcgT0ZfREVWSUNFCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gT0YgJiYgKFNQQVJDIHx8IFBQQ19PRiB8fCBNSUNST0JMQVpFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9NYWtlZmlsZSBiL2RyaXZlcnMvb2YvTWFrZWZpbGUKaW5kZXggYmRmYjVmNS4uZjIzMmNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL29mL01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogb2JqLXkgPSBiYXNlLm8KK29iai0kKENPTkZJR19PRl9GTEFUVFJFRSkgKz0gZmR0Lm8KIG9iai0kKENPTkZJR19PRl9ERVZJQ0UpICs9IGRldmljZS5vIHBsYXRmb3JtLm8KIG9iai0kKENPTkZJR19PRl9HUElPKSAgICs9IGdwaW8ubwogb2JqLSQoQ09ORklHX09GX0kyQykJKz0gb2ZfaTJjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvYmFzZS5jIGIvZHJpdmVycy9vZi9iYXNlLmMKaW5kZXggZTY2MjdiMi4uY2I5Njg4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9iYXNlLmMKKysrIGIvZHJpdmVycy9vZi9iYXNlLmMKQEAgLTIwLDggKzIwLDEwIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAogc3RydWN0IGRldmljZV9ub2RlICphbGxub2RlczsKK3N0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfY2hvc2VuOwogCiAvKiB1c2Ugd2hlbiB0cmF2ZXJzaW5nIHRyZWUgdGhyb3VnaCB0aGUgYWxsbmV4dCwgY2hpbGQsIHNpYmxpbmcsCiAgKiBvciBwYXJlbnQgbWVtYmVycyBvZiBzdHJ1Y3QgZGV2aWNlX25vZGUuCkBAIC0zNyw3ICszOSw3IEBACiAJCQlucCA9IG5wLT5wYXJlbnQ7CiAJCWlwID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiI2FkZHJlc3MtY2VsbHMiLCBOVUxMKTsKIAkJaWYgKGlwKQotCQkJcmV0dXJuICppcDsKKwkJCXJldHVybiBiZTMyX3RvX2NwdXAoaXApOwogCX0gd2hpbGUgKG5wLT5wYXJlbnQpOwogCS8qIE5vICNhZGRyZXNzLWNlbGxzIHByb3BlcnR5IGZvciB0aGUgcm9vdCBub2RlICovCiAJcmV0dXJuIE9GX1JPT1RfTk9ERV9BRERSX0NFTExTX0RFRkFVTFQ7CkBAIC01MywxMyArNTUsODggQEAKIAkJCW5wID0gbnAtPnBhcmVudDsKIAkJaXAgPSBvZl9nZXRfcHJvcGVydHkobnAsICIjc2l6ZS1jZWxscyIsIE5VTEwpOwogCQlpZiAoaXApCi0JCQlyZXR1cm4gKmlwOworCQkJcmV0dXJuIGJlMzJfdG9fY3B1cChpcCk7CiAJfSB3aGlsZSAobnAtPnBhcmVudCk7CiAJLyogTm8gI3NpemUtY2VsbHMgcHJvcGVydHkgZm9yIHRoZSByb290IG5vZGUgKi8KIAlyZXR1cm4gT0ZfUk9PVF9OT0RFX1NJWkVfQ0VMTFNfREVGQVVMVDsKIH0KIEVYUE9SVF9TWU1CT0wob2Zfbl9zaXplX2NlbGxzKTsKIAorI2lmICFkZWZpbmVkKENPTkZJR19TUEFSQykgICAvKiBTUEFSQyBkb2Vzbid0IGRvIHJlZiBjb3VudGluZyAoeWV0KSAqLworLyoqCisgKglvZl9ub2RlX2dldCAtIEluY3JlbWVudCByZWZjb3VudCBvZiBhIG5vZGUKKyAqCUBub2RlOglOb2RlIHRvIGluYyByZWZjb3VudCwgTlVMTCBpcyBzdXBwb3J0ZWQgdG8KKyAqCQlzaW1wbGlmeSB3cml0aW5nIG9mIGNhbGxlcnMKKyAqCisgKglSZXR1cm5zIG5vZGUuCisgKi8KK3N0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZV9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCWlmIChub2RlKQorCQlrcmVmX2dldCgmbm9kZS0+a3JlZik7CisJcmV0dXJuIG5vZGU7Cit9CitFWFBPUlRfU1lNQk9MKG9mX25vZGVfZ2V0KTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKmtyZWZfdG9fZGV2aWNlX25vZGUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZGV2aWNlX25vZGUsIGtyZWYpOworfQorCisvKioKKyAqCW9mX25vZGVfcmVsZWFzZSAtIHJlbGVhc2UgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbm9kZQorICoJQGtyZWY6ICBrcmVmIGVsZW1lbnQgb2YgdGhlIG5vZGUgdG8gYmUgcmVsZWFzZWQKKyAqCisgKglJbiBvZl9ub2RlX3B1dCgpIHRoaXMgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIGtyZWZfcHV0KCkKKyAqCWFzIHRoZSBkZXN0cnVjdG9yLgorICovCitzdGF0aWMgdm9pZCBvZl9ub2RlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0ga3JlZl90b19kZXZpY2Vfbm9kZShrcmVmKTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBub2RlLT5wcm9wZXJ0aWVzOworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIHJlbGVhc2luZyBub2RlcyB0aGF0IGhhdmVuJ3QgYmVlbiBkZXRhY2hlZC4gKi8KKwlpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9ERVRBQ0hFRCkpIHsKKwkJcHJfZXJyKCJFUlJPUjogQmFkIG9mX25vZGVfcHV0KCkgb24gJXNcbiIsIG5vZGUtPmZ1bGxfbmFtZSk7CisJCWR1bXBfc3RhY2soKTsKKwkJa3JlZl9pbml0KCZub2RlLT5rcmVmKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX0RZTkFNSUMpKQorCQlyZXR1cm47CisKKwl3aGlsZSAocHJvcCkgeworCQlzdHJ1Y3QgcHJvcGVydHkgKm5leHQgPSBwcm9wLT5uZXh0OworCQlrZnJlZShwcm9wLT5uYW1lKTsKKwkJa2ZyZWUocHJvcC0+dmFsdWUpOworCQlrZnJlZShwcm9wKTsKKwkJcHJvcCA9IG5leHQ7CisKKwkJaWYgKCFwcm9wKSB7CisJCQlwcm9wID0gbm9kZS0+ZGVhZHByb3BzOworCQkJbm9kZS0+ZGVhZHByb3BzID0gTlVMTDsKKwkJfQorCX0KKwlrZnJlZShub2RlLT5mdWxsX25hbWUpOworCWtmcmVlKG5vZGUtPmRhdGEpOworCWtmcmVlKG5vZGUpOworfQorCisvKioKKyAqCW9mX25vZGVfcHV0IC0gRGVjcmVtZW50IHJlZmNvdW50IG9mIGEgbm9kZQorICoJQG5vZGU6CU5vZGUgdG8gZGVjIHJlZmNvdW50LCBOVUxMIGlzIHN1cHBvcnRlZCB0bworICoJCXNpbXBsaWZ5IHdyaXRpbmcgb2YgY2FsbGVycworICoKKyAqLwordm9pZCBvZl9ub2RlX3B1dChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJaWYgKG5vZGUpCisJCWtyZWZfcHV0KCZub2RlLT5rcmVmLCBvZl9ub2RlX3JlbGVhc2UpOworfQorRVhQT1JUX1NZTUJPTChvZl9ub2RlX3B1dCk7CisjZW5kaWYgLyogIUNPTkZJR19TUEFSQyAqLworCiBzdHJ1Y3QgcHJvcGVydHkgKm9mX2ZpbmRfcHJvcGVydHkoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJICBpbnQgKmxlbnApCkBAIC0xNDQsNiArMjIxLDI3IEBACiBFWFBPUlRfU1lNQk9MKG9mX2RldmljZV9pc19jb21wYXRpYmxlKTsKIAogLyoqCisgKiBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUgLSBUZXN0IHJvb3Qgb2YgZGV2aWNlIHRyZWUgZm9yIGEgZ2l2ZW4gY29tcGF0aWJsZSB2YWx1ZQorICogQGNvbXBhdDogY29tcGF0aWJsZSBzdHJpbmcgdG8gbG9vayBmb3IgaW4gcm9vdCBub2RlJ3MgY29tcGF0aWJsZSBwcm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgbm9kZSBoYXMgdGhlIGdpdmVuIHZhbHVlIGluIGl0cworICogY29tcGF0aWJsZSBwcm9wZXJ0eS4KKyAqLworaW50IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpyb290OworCWludCByYyA9IDA7CisKKwlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKKwlpZiAocm9vdCkgeworCQlyYyA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHJvb3QsIGNvbXBhdCk7CisJCW9mX25vZGVfcHV0KHJvb3QpOworCX0KKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSk7CisKKy8qKgogICogIG9mX2RldmljZV9pc19hdmFpbGFibGUgLSBjaGVjayBpZiBhIGRldmljZSBpcyBhdmFpbGFibGUgZm9yIHVzZQogICoKICAqICBAZGV2aWNlOiBOb2RlIHRvIGNoZWNrIGZvciBhdmFpbGFiaWxpdHkKQEAgLTUxOSw2ICs2MTcsMjcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKG9mX21vZGFsaWFzX25vZGUpOwogCiAvKioKKyAqIG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlIC0gRmluZCBhIG5vZGUgZ2l2ZW4gYSBwaGFuZGxlCisgKiBAaGFuZGxlOglwaGFuZGxlIG9mIHRoZSBub2RlIHRvIGZpbmQKKyAqCisgKiBSZXR1cm5zIGEgbm9kZSBwb2ludGVyIHdpdGggcmVmY291bnQgaW5jcmVtZW50ZWQsIHVzZQorICogb2Zfbm9kZV9wdXQoKSBvbiBpdCB3aGVuIGRvbmUuCisgKi8KK3N0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUocGhhbmRsZSBoYW5kbGUpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCXJlYWRfbG9jaygmZGV2dHJlZV9sb2NrKTsKKwlmb3IgKG5wID0gYWxsbm9kZXM7IG5wOyBucCA9IG5wLT5hbGxuZXh0KQorCQlpZiAobnAtPnBoYW5kbGUgPT0gaGFuZGxlKQorCQkJYnJlYWs7CisJb2Zfbm9kZV9nZXQobnApOworCXJlYWRfdW5sb2NrKCZkZXZ0cmVlX2xvY2spOworCXJldHVybiBucDsKK30KK0VYUE9SVF9TWU1CT0wob2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUpOworCisvKioKICAqIG9mX3BhcnNlX3BoYW5kbGUgLSBSZXNvbHZlIGEgcGhhbmRsZSBwcm9wZXJ0eSB0byBhIGRldmljZV9ub2RlIHBvaW50ZXIKICAqIEBucDogUG9pbnRlciB0byBkZXZpY2Ugbm9kZSBob2xkaW5nIHBoYW5kbGUgcHJvcGVydHkKICAqIEBwaGFuZGxlX25hbWU6IE5hbWUgb2YgcHJvcGVydHkgaG9sZGluZyBhIHBoYW5kbGUgdmFsdWUKQEAgLTU3OCw4ICs2OTcsOCBAQAogCQkJCWNvbnN0IHZvaWQgKipvdXRfYXJncykKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKLQljb25zdCB1MzIgKmxpc3Q7Ci0JY29uc3QgdTMyICpsaXN0X2VuZDsKKwljb25zdCBfX2JlMzIgKmxpc3Q7CisJY29uc3QgX19iZTMyICpsaXN0X2VuZDsKIAlpbnQgc2l6ZTsKIAlpbnQgY3VyX2luZGV4ID0gMDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBOVUxMOwpAQCAtNTkzLDcgKzcxMiw3IEBACiAJbGlzdF9lbmQgPSBsaXN0ICsgc2l6ZSAvIHNpemVvZigqbGlzdCk7CiAKIAl3aGlsZSAobGlzdCA8IGxpc3RfZW5kKSB7Ci0JCWNvbnN0IHUzMiAqY2VsbHM7CisJCWNvbnN0IF9fYmUzMiAqY2VsbHM7CiAJCWNvbnN0IHBoYW5kbGUgKnBoYW5kbGU7CiAKIAkJcGhhbmRsZSA9IGxpc3QrKzsKQEAgLTYxNyw3ICs3MzYsNyBAQAogCQkJZ290byBlcnIxOwogCQl9CiAKLQkJbGlzdCArPSAqY2VsbHM7CisJCWxpc3QgKz0gYmUzMl90b19jcHVwKGNlbGxzKTsKIAkJaWYgKGxpc3QgPiBsaXN0X2VuZCkgewogCQkJcHJfZGVidWcoIiVzOiBpbnN1ZmZpY2llbnQgYXJndW1lbnRzIGxlbmd0aFxuIiwKIAkJCQkgbnAtPmZ1bGxfbmFtZSk7CkBAIC02NTgsMyArNzc3LDE5MCBAQAogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKG9mX3BhcnNlX3BoYW5kbGVzX3dpdGhfYXJncyk7CisKKy8qKgorICogcHJvbV9hZGRfcHJvcGVydHkgLSBBZGQgYSBwcm9wZXJ0eSB0byBhIG5vZGUKKyAqLworaW50IHByb21fYWRkX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwcm9wLT5uZXh0ID0gTlVMTDsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOworCW5leHQgPSAmbnAtPnByb3BlcnRpZXM7CisJd2hpbGUgKCpuZXh0KSB7CisJCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgKCpuZXh0KS0+bmFtZSkgPT0gMCkgeworCQkJLyogZHVwbGljYXRlICEgZG9uJ3QgaW5zZXJ0IGl0ICovCisJCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OworCX0KKwkqbmV4dCA9IHByb3A7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOworCisjaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQorCS8qIHRyeSB0byBhZGQgdG8gcHJvYyBhcyB3ZWxsIGlmIGl0IHdhcyBpbml0aWFsaXplZCAqLworCWlmIChucC0+cGRlKQorCQlwcm9jX2RldmljZV90cmVlX2FkZF9wcm9wKG5wLT5wZGUsIHByb3ApOworI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHByb21fcmVtb3ZlX3Byb3BlcnR5IC0gUmVtb3ZlIGEgcHJvcGVydHkgZnJvbSBhIG5vZGUuCisgKgorICogTm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHJlbW92ZSBpdCwgc2luY2Ugd2UgaGF2ZSBnaXZlbiBvdXQKKyAqIHdoby1rbm93cy1ob3ctbWFueSBwb2ludGVycyB0byB0aGUgZGF0YSB1c2luZyBnZXQtcHJvcGVydHkuCisgKiBJbnN0ZWFkIHdlIGp1c3QgbW92ZSB0aGUgcHJvcGVydHkgdG8gdGhlICJkZWFkIHByb3BlcnRpZXMiCisgKiBsaXN0LCBzbyBpdCB3b24ndCBiZSBmb3VuZCBhbnkgbW9yZS4KKyAqLworaW50IHByb21fcmVtb3ZlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGZvdW5kID0gMDsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisJbmV4dCA9ICZucC0+cHJvcGVydGllczsKKwl3aGlsZSAoKm5leHQpIHsKKwkJaWYgKCpuZXh0ID09IHByb3ApIHsKKwkJCS8qIGZvdW5kIHRoZSBub2RlICovCisJCQkqbmV4dCA9IHByb3AtPm5leHQ7CisJCQlwcm9wLT5uZXh0ID0gbnAtPmRlYWRwcm9wczsKKwkJCW5wLT5kZWFkcHJvcHMgPSBwcm9wOworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OworCX0KKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gLUVOT0RFVjsKKworI2lmZGVmIENPTkZJR19QUk9DX0RFVklDRVRSRUUKKwkvKiB0cnkgdG8gcmVtb3ZlIHRoZSBwcm9jIG5vZGUgYXMgd2VsbCAqLworCWlmIChucC0+cGRlKQorCQlwcm9jX2RldmljZV90cmVlX3JlbW92ZV9wcm9wKG5wLT5wZGUsIHByb3ApOworI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KKworCXJldHVybiAwOworfQorCisvKgorICogcHJvbV91cGRhdGVfcHJvcGVydHkgLSBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhIG5vZGUuCisgKgorICogTm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHJlbW92ZSBpdCwgc2luY2Ugd2UgaGF2ZSBnaXZlbiBvdXQKKyAqIHdoby1rbm93cy1ob3ctbWFueSBwb2ludGVycyB0byB0aGUgZGF0YSB1c2luZyBnZXQtcHJvcGVydHkuCisgKiBJbnN0ZWFkIHdlIGp1c3QgbW92ZSB0aGUgcHJvcGVydHkgdG8gdGhlICJkZWFkIHByb3BlcnRpZXMiIGxpc3QsCisgKiBhbmQgYWRkIHRoZSBuZXcgcHJvcGVydHkgdG8gdGhlIHByb3BlcnR5IGxpc3QKKyAqLworaW50IHByb21fdXBkYXRlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkgc3RydWN0IHByb3BlcnR5ICpuZXdwcm9wLAorCQkJIHN0cnVjdCBwcm9wZXJ0eSAqb2xkcHJvcCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGZvdW5kID0gMDsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisJbmV4dCA9ICZucC0+cHJvcGVydGllczsKKwl3aGlsZSAoKm5leHQpIHsKKwkJaWYgKCpuZXh0ID09IG9sZHByb3ApIHsKKwkJCS8qIGZvdW5kIHRoZSBub2RlICovCisJCQluZXdwcm9wLT5uZXh0ID0gb2xkcHJvcC0+bmV4dDsKKwkJCSpuZXh0ID0gbmV3cHJvcDsKKwkJCW9sZHByb3AtPm5leHQgPSBucC0+ZGVhZHByb3BzOworCQkJbnAtPmRlYWRwcm9wcyA9IG9sZHByb3A7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCQluZXh0ID0gJigqbmV4dCktPm5leHQ7CisJfQorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKKworCWlmICghZm91bmQpCisJCXJldHVybiAtRU5PREVWOworCisjaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQorCS8qIHRyeSB0byBhZGQgdG8gcHJvYyBhcyB3ZWxsIGlmIGl0IHdhcyBpbml0aWFsaXplZCAqLworCWlmIChucC0+cGRlKQorCQlwcm9jX2RldmljZV90cmVlX3VwZGF0ZV9wcm9wKG5wLT5wZGUsIG5ld3Byb3AsIG9sZHByb3ApOworI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KKworCXJldHVybiAwOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfRFlOQU1JQykKKy8qCisgKiBTdXBwb3J0IGZvciBkeW5hbWljIGRldmljZSB0cmVlcy4KKyAqCisgKiBPbiBzb21lIHBsYXRmb3JtcywgdGhlIGRldmljZSB0cmVlIGNhbiBiZSBtYW5pcHVsYXRlZCBhdCBydW50aW1lLgorICogVGhlIHJvdXRpbmVzIGluIHRoaXMgc2VjdGlvbiBzdXBwb3J0IGFkZGluZywgcmVtb3ZpbmcgYW5kIGNoYW5naW5nCisgKiBkZXZpY2UgdHJlZSBub2Rlcy4KKyAqLworCisvKioKKyAqIG9mX2F0dGFjaF9ub2RlIC0gUGx1ZyBhIGRldmljZSBub2RlIGludG8gdGhlIHRyZWUgYW5kIGdsb2JhbCBsaXN0LgorICovCit2b2lkIG9mX2F0dGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisJbnAtPnNpYmxpbmcgPSBucC0+cGFyZW50LT5jaGlsZDsKKwlucC0+YWxsbmV4dCA9IGFsbG5vZGVzOworCW5wLT5wYXJlbnQtPmNoaWxkID0gbnA7CisJYWxsbm9kZXMgPSBucDsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogb2ZfZGV0YWNoX25vZGUgLSAiVW5wbHVnIiBhIG5vZGUgZnJvbSB0aGUgZGV2aWNlIHRyZWUuCisgKgorICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIG5vZGUuICBUaGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aAorICogdGhlIG5vZGUgaXMgbm90IGZyZWVkIHVudGlsIGl0cyByZWZjb3VudCBnb2VzIHRvIHplcm8uCisgKi8KK3ZvaWQgb2ZfZGV0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKKworCXBhcmVudCA9IG5wLT5wYXJlbnQ7CisJaWYgKCFwYXJlbnQpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWlmIChhbGxub2RlcyA9PSBucCkKKwkJYWxsbm9kZXMgPSBucC0+YWxsbmV4dDsKKwllbHNlIHsKKwkJc3RydWN0IGRldmljZV9ub2RlICpwcmV2OworCQlmb3IgKHByZXYgPSBhbGxub2RlczsKKwkJICAgICBwcmV2LT5hbGxuZXh0ICE9IG5wOworCQkgICAgIHByZXYgPSBwcmV2LT5hbGxuZXh0KQorCQkJOworCQlwcmV2LT5hbGxuZXh0ID0gbnAtPmFsbG5leHQ7CisJfQorCisJaWYgKHBhcmVudC0+Y2hpbGQgPT0gbnApCisJCXBhcmVudC0+Y2hpbGQgPSBucC0+c2libGluZzsKKwllbHNlIHsKKwkJc3RydWN0IGRldmljZV9ub2RlICpwcmV2c2liOworCQlmb3IgKHByZXZzaWIgPSBucC0+cGFyZW50LT5jaGlsZDsKKwkJICAgICBwcmV2c2liLT5zaWJsaW5nICE9IG5wOworCQkgICAgIHByZXZzaWIgPSBwcmV2c2liLT5zaWJsaW5nKQorCQkJOworCQlwcmV2c2liLT5zaWJsaW5nID0gbnAtPnNpYmxpbmc7CisJfQorCisJb2Zfbm9kZV9zZXRfZmxhZyhucCwgT0ZfREVUQUNIRUQpOworCitvdXRfdW5sb2NrOgorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19PRl9EWU5BTUlDKSAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2ZkdC5jIGIvZHJpdmVycy9vZi9mZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDY3NTdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9vZi9mZHQuYwpAQCAtMCwwICsxLDU5MCBAQAorLyoKKyAqIEZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIHRoZSBGbGF0dGVuZWQgRGV2aWNlIFRyZWUgZGF0YSBmb3JtYXQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycAorICogYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjaWZkZWYgQ09ORklHX1BQQworI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjZW5kaWYgLyogQ09ORklHX1BQQyAqLworCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworaW50IF9faW5pdGRhdGEgZHRfcm9vdF9hZGRyX2NlbGxzOworaW50IF9faW5pdGRhdGEgZHRfcm9vdF9zaXplX2NlbGxzOworCitzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgKmluaXRpYWxfYm9vdF9wYXJhbXM7CisKK2NoYXIgKmZpbmRfZmxhdF9kdF9zdHJpbmcodTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gKChjaGFyICopaW5pdGlhbF9ib290X3BhcmFtcykgKworCQliZTMyX3RvX2NwdShpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RyaW5ncykgKyBvZmZzZXQ7Cit9CisKKy8qKgorICogb2Zfc2Nhbl9mbGF0X2R0IC0gc2NhbiBmbGF0dGVuZWQgdHJlZSBibG9iIGFuZCBjYWxsIGNhbGxiYWNrIG9uIGVhY2guCisgKiBAaXQ6IGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAZGF0YTogY29udGV4dCBkYXRhIHBvaW50ZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2NhbiB0aGUgZmxhdHRlbmVkIGRldmljZS10cmVlLCBpdCBpcworICogdXNlZCB0byBleHRyYWN0IHRoZSBtZW1vcnkgaW5mb3JtYXRpb24gYXQgYm9vdCBiZWZvcmUgd2UgY2FuCisgKiB1bmZsYXR0ZW4gdGhlIHRyZWUKKyAqLworaW50IF9faW5pdCBvZl9zY2FuX2ZsYXRfZHQoaW50ICgqaXQpKHVuc2lnbmVkIGxvbmcgbm9kZSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsCisJCQkJICAgICB2b2lkICpkYXRhKSwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBwID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKKwkJYmUzMl90b19jcHUoaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdCk7CisJaW50IHJjID0gMDsKKwlpbnQgZGVwdGggPSAtMTsKKworCWRvIHsKKwkJdTMyIHRhZyA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopcCk7CisJCWNoYXIgKnBhdGhwOworCisJCXAgKz0gNDsKKwkJaWYgKHRhZyA9PSBPRl9EVF9FTkRfTk9ERSkgeworCQkJZGVwdGgtLTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0YWcgPT0gT0ZfRFRfTk9QKQorCQkJY29udGludWU7CisJCWlmICh0YWcgPT0gT0ZfRFRfRU5EKQorCQkJYnJlYWs7CisJCWlmICh0YWcgPT0gT0ZfRFRfUFJPUCkgeworCQkJdTMyIHN6ID0gYmUzMl90b19jcHVwKChfX2JlMzIgKilwKTsKKwkJCXAgKz0gODsKKwkJCWlmIChiZTMyX3RvX2NwdShpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uKSA8IDB4MTApCisJCQkJcCA9IF9BTElHTihwLCBzeiA+PSA4ID8gOCA6IDQpOworCQkJcCArPSBzejsKKwkJCXAgPSBfQUxJR04ocCwgNCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodGFnICE9IE9GX0RUX0JFR0lOX05PREUpIHsKKwkJCXByX2VycigiSW52YWxpZCB0YWcgJXggaW4gZmxhdCBkZXZpY2UgdHJlZSFcbiIsIHRhZyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZXB0aCsrOworCQlwYXRocCA9IChjaGFyICopcDsKKwkJcCA9IF9BTElHTihwICsgc3RybGVuKHBhdGhwKSArIDEsIDQpOworCQlpZiAoKCpwYXRocCkgPT0gJy8nKSB7CisJCQljaGFyICpscCwgKm5wOworCQkJZm9yIChscCA9IE5VTEwsIG5wID0gcGF0aHA7ICpucDsgbnArKykKKwkJCQlpZiAoKCpucCkgPT0gJy8nKQorCQkJCQlscCA9IG5wKzE7CisJCQlpZiAobHAgIT0gTlVMTCkKKwkJCQlwYXRocCA9IGxwOworCQl9CisJCXJjID0gaXQocCwgcGF0aHAsIGRlcHRoLCBkYXRhKTsKKwkJaWYgKHJjICE9IDApCisJCQlicmVhazsKKwl9IHdoaWxlICgxKTsKKworCXJldHVybiByYzsKK30KKworLyoqCisgKiBvZl9nZXRfZmxhdF9kdF9yb290IC0gZmluZCB0aGUgcm9vdCBub2RlIGluIHRoZSBmbGF0IGJsb2IKKyAqLwordW5zaWduZWQgbG9uZyBfX2luaXQgb2ZfZ2V0X2ZsYXRfZHRfcm9vdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCisJCWJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3QpOworCisJd2hpbGUgKGJlMzJfdG9fY3B1cCgoX19iZTMyICopcCkgPT0gT0ZfRFRfTk9QKQorCQlwICs9IDQ7CisJQlVHX09OKGJlMzJfdG9fY3B1cCgoX19iZTMyICopcCkgIT0gT0ZfRFRfQkVHSU5fTk9ERSk7CisJcCArPSA0OworCXJldHVybiBfQUxJR04ocCArIHN0cmxlbigoY2hhciAqKXApICsgMSwgNCk7Cit9CisKKy8qKgorICogb2ZfZ2V0X2ZsYXRfZHRfcHJvcCAtIEdpdmVuIGEgbm9kZSBpbiB0aGUgZmxhdCBibG9iLCByZXR1cm4gdGhlIHByb3BlcnR5IHB0cgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgd2l0aGluIHNjYW5fZmxhdHRlbmVkX2R0IGNhbGxiYWNrIHRvIGdldAorICogYWNjZXNzIHRvIHByb3BlcnRpZXMKKyAqLwordm9pZCAqX19pbml0IG9mX2dldF9mbGF0X2R0X3Byb3AodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSB1bnNpZ25lZCBsb25nICpzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcCA9IG5vZGU7CisKKwlkbyB7CisJCXUzMiB0YWcgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKXApOworCQl1MzIgc3osIG5vZmY7CisJCWNvbnN0IGNoYXIgKm5zdHI7CisKKwkJcCArPSA0OworCQlpZiAodGFnID09IE9GX0RUX05PUCkKKwkJCWNvbnRpbnVlOworCQlpZiAodGFnICE9IE9GX0RUX1BST1ApCisJCQlyZXR1cm4gTlVMTDsKKworCQlzeiA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopcCk7CisJCW5vZmYgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKShwICsgNCkpOworCQlwICs9IDg7CisJCWlmIChiZTMyX3RvX2NwdShpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uKSA8IDB4MTApCisJCQlwID0gX0FMSUdOKHAsIHN6ID49IDggPyA4IDogNCk7CisKKwkJbnN0ciA9IGZpbmRfZmxhdF9kdF9zdHJpbmcobm9mZik7CisJCWlmIChuc3RyID09IE5VTEwpIHsKKwkJCXByX3dhcm5pbmcoIkNhbid0IGZpbmQgcHJvcGVydHkgaW5kZXggbmFtZSAhXG4iKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWlmIChzdHJjbXAobmFtZSwgbnN0cikgPT0gMCkgeworCQkJaWYgKHNpemUpCisJCQkJKnNpemUgPSBzejsKKwkJCXJldHVybiAodm9pZCAqKXA7CisJCX0KKwkJcCArPSBzejsKKwkJcCA9IF9BTElHTihwLCA0KTsKKwl9IHdoaWxlICgxKTsKK30KKworLyoqCisgKiBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUgLSBSZXR1cm4gdHJ1ZSBpZiBnaXZlbiBub2RlIGhhcyBjb21wYXQgaW4gY29tcGF0aWJsZSBsaXN0CisgKiBAbm9kZTogbm9kZSB0byB0ZXN0CisgKiBAY29tcGF0OiBjb21wYXRpYmxlIHN0cmluZyB0byBjb21wYXJlIHdpdGggY29tcGF0aWJsZSBsaXN0LgorICovCitpbnQgX19pbml0IG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKmNvbXBhdCkKK3sKKwljb25zdCBjaGFyICpjcDsKKwl1bnNpZ25lZCBsb25nIGNwbGVuLCBsOworCisJY3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJjb21wYXRpYmxlIiwgJmNwbGVuKTsKKwlpZiAoY3AgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKGNwbGVuID4gMCkgeworCQlpZiAoc3RybmNhc2VjbXAoY3AsIGNvbXBhdCwgc3RybGVuKGNvbXBhdCkpID09IDApCisJCQlyZXR1cm4gMTsKKwkJbCA9IHN0cmxlbihjcCkgKyAxOworCQljcCArPSBsOworCQljcGxlbiAtPSBsOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqX19pbml0IHVuZmxhdHRlbl9kdF9hbGxvYyh1bnNpZ25lZCBsb25nICptZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbikKK3sKKwl2b2lkICpyZXM7CisKKwkqbWVtID0gX0FMSUdOKCptZW0sIGFsaWduKTsKKwlyZXMgPSAodm9pZCAqKSptZW07CisJKm1lbSArPSBzaXplOworCisJcmV0dXJuIHJlczsKK30KKworLyoqCisgKiB1bmZsYXR0ZW5fZHRfbm9kZSAtIEFsbG9jIGFuZCBwb3B1bGF0ZSBhIGRldmljZV9ub2RlIGZyb20gdGhlIGZsYXQgdHJlZQorICogQHA6IHBvaW50ZXIgdG8gbm9kZSBpbiBmbGF0IHRyZWUKKyAqIEBkYWQ6IFBhcmVudCBzdHJ1Y3QgZGV2aWNlX25vZGUKKyAqIEBhbGxuZXh0cHA6IHBvaW50ZXIgdG8gLT5hbGxuZXh0IGZyb20gbGFzdCBhbGxvY2F0ZWQgZGV2aWNlX25vZGUKKyAqIEBmcHNpemU6IFNpemUgb2YgdGhlIG5vZGUgcGF0aCB1cCBhdCB0aGUgY3VycmVudCBkZXB0aC4KKyAqLwordW5zaWduZWQgbG9uZyBfX2luaXQgdW5mbGF0dGVuX2R0X25vZGUodW5zaWduZWQgbG9uZyBtZW0sCisJCQkJCXVuc2lnbmVkIGxvbmcgKnAsCisJCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGFkLAorCQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKioqYWxsbmV4dHBwLAorCQkJCQl1bnNpZ25lZCBsb25nIGZwc2l6ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBwcm9wZXJ0eSAqcHAsICoqcHJldl9wcCA9IE5VTEw7CisJY2hhciAqcGF0aHA7CisJdTMyIHRhZzsKKwl1bnNpZ25lZCBpbnQgbCwgYWxsb2NsOworCWludCBoYXNfbmFtZSA9IDA7CisJaW50IG5ld19mb3JtYXQgPSAwOworCisJdGFnID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikoKnApKTsKKwlpZiAodGFnICE9IE9GX0RUX0JFR0lOX05PREUpIHsKKwkJcHJfZXJyKCJXZWlyZCB0YWcgYXQgc3RhcnQgb2Ygbm9kZTogJXhcbiIsIHRhZyk7CisJCXJldHVybiBtZW07CisJfQorCSpwICs9IDQ7CisJcGF0aHAgPSAoY2hhciAqKSpwOworCWwgPSBhbGxvY2wgPSBzdHJsZW4ocGF0aHApICsgMTsKKwkqcCA9IF9BTElHTigqcCArIGwsIDQpOworCisJLyogdmVyc2lvbiAweDEwIGhhcyBhIG1vcmUgY29tcGFjdCB1bml0IG5hbWUgaGVyZSBpbnN0ZWFkIG9mIHRoZSBmdWxsCisJICogcGF0aC4gd2UgYWNjdW11bGF0ZSB0aGUgZnVsbCBwYXRoIHNpemUgdXNpbmcgImZwc2l6ZSIsIHdlJ2xsIHJlYnVpbGQKKwkgKiBpdCBsYXRlci4gV2UgZGV0ZWN0IHRoaXMgYmVjYXVzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBuYW1lIGlzCisJICogbm90ICcvJy4KKwkgKi8KKwlpZiAoKCpwYXRocCkgIT0gJy8nKSB7CisJCW5ld19mb3JtYXQgPSAxOworCQlpZiAoZnBzaXplID09IDApIHsKKwkJCS8qIHJvb3Qgbm9kZTogc3BlY2lhbCBjYXNlLiBmcHNpemUgYWNjb3VudHMgZm9yIHBhdGgKKwkJCSAqIHBsdXMgdGVybWluYXRpbmcgemVyby4gcm9vdCBub2RlIG9ubHkgaGFzICcvJywgc28KKwkJCSAqIGZwc2l6ZSBzaG91bGQgYmUgMiwgYnV0IHdlIHdhbnQgdG8gYXZvaWQgdGhlIGZpcnN0CisJCQkgKiBsZXZlbCBub2RlcyB0byBoYXZlIHR3byAnLycgc28gd2UgdXNlIGZwc2l6ZSAxIGhlcmUKKwkJCSAqLworCQkJZnBzaXplID0gMTsKKwkJCWFsbG9jbCA9IDI7CisJCX0gZWxzZSB7CisJCQkvKiBhY2NvdW50IGZvciAnLycgYW5kIHBhdGggc2l6ZSBtaW51cyB0ZXJtaW5hbCAwCisJCQkgKiBhbHJlYWR5IGluICdsJworCQkJICovCisJCQlmcHNpemUgKz0gbDsKKwkJCWFsbG9jbCA9IGZwc2l6ZTsKKwkJfQorCX0KKworCW5wID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgZGV2aWNlX25vZGUpICsgYWxsb2NsLAorCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBkZXZpY2Vfbm9kZSkpOworCWlmIChhbGxuZXh0cHApIHsKKwkJbWVtc2V0KG5wLCAwLCBzaXplb2YoKm5wKSk7CisJCW5wLT5mdWxsX25hbWUgPSAoKGNoYXIgKilucCkgKyBzaXplb2Yoc3RydWN0IGRldmljZV9ub2RlKTsKKwkJaWYgKG5ld19mb3JtYXQpIHsKKwkJCWNoYXIgKmZuID0gbnAtPmZ1bGxfbmFtZTsKKwkJCS8qIHJlYnVpbGQgZnVsbCBwYXRoIGZvciBuZXcgZm9ybWF0ICovCisJCQlpZiAoZGFkICYmIGRhZC0+cGFyZW50KSB7CisJCQkJc3RyY3B5KGZuLCBkYWQtPmZ1bGxfbmFtZSk7CisjaWZkZWYgREVCVUcKKwkJCQlpZiAoKHN0cmxlbihmbikgKyBsICsgMSkgIT0gYWxsb2NsKSB7CisJCQkJCXByX2RlYnVnKCIlczogcDogJWQsIGw6ICVkLCBhOiAlZFxuIiwKKwkJCQkJCXBhdGhwLCAoaW50KXN0cmxlbihmbiksCisJCQkJCQlsLCBhbGxvY2wpOworCQkJCX0KKyNlbmRpZgorCQkJCWZuICs9IHN0cmxlbihmbik7CisJCQl9CisJCQkqKGZuKyspID0gJy8nOworCQkJbWVtY3B5KGZuLCBwYXRocCwgbCk7CisJCX0gZWxzZQorCQkJbWVtY3B5KG5wLT5mdWxsX25hbWUsIHBhdGhwLCBsKTsKKwkJcHJldl9wcCA9ICZucC0+cHJvcGVydGllczsKKwkJKiphbGxuZXh0cHAgPSBucDsKKwkJKmFsbG5leHRwcCA9ICZucC0+YWxsbmV4dDsKKwkJaWYgKGRhZCAhPSBOVUxMKSB7CisJCQlucC0+cGFyZW50ID0gZGFkOworCQkJLyogd2UgdGVtcG9yYXJpbHkgdXNlIHRoZSBuZXh0IGZpZWxkIGFzIGBsYXN0X2NoaWxkJyovCisJCQlpZiAoZGFkLT5uZXh0ID09IE5VTEwpCisJCQkJZGFkLT5jaGlsZCA9IG5wOworCQkJZWxzZQorCQkJCWRhZC0+bmV4dC0+c2libGluZyA9IG5wOworCQkJZGFkLT5uZXh0ID0gbnA7CisJCX0KKwkJa3JlZl9pbml0KCZucC0+a3JlZik7CisJfQorCXdoaWxlICgxKSB7CisJCXUzMiBzeiwgbm9mZjsKKwkJY2hhciAqcG5hbWU7CisKKwkJdGFnID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikoKnApKTsKKwkJaWYgKHRhZyA9PSBPRl9EVF9OT1ApIHsKKwkJCSpwICs9IDQ7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodGFnICE9IE9GX0RUX1BST1ApCisJCQlicmVhazsKKwkJKnAgKz0gNDsKKwkJc3ogPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSgqcCkpOworCQlub2ZmID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikoKCpwKSArIDQpKTsKKwkJKnAgKz0gODsKKwkJaWYgKGJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPnZlcnNpb24pIDwgMHgxMCkKKwkJCSpwID0gX0FMSUdOKCpwLCBzeiA+PSA4ID8gOCA6IDQpOworCisJCXBuYW1lID0gZmluZF9mbGF0X2R0X3N0cmluZyhub2ZmKTsKKwkJaWYgKHBuYW1lID09IE5VTEwpIHsKKwkJCXByX2luZm8oIkNhbid0IGZpbmQgcHJvcGVydHkgbmFtZSBpbiBsaXN0ICFcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0cmNtcChwbmFtZSwgIm5hbWUiKSA9PSAwKQorCQkJaGFzX25hbWUgPSAxOworCQlsID0gc3RybGVuKHBuYW1lKSArIDE7CisJCXBwID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgcHJvcGVydHkpLAorCQkJCQlfX2FsaWdub2ZfXyhzdHJ1Y3QgcHJvcGVydHkpKTsKKwkJaWYgKGFsbG5leHRwcCkgeworCQkJLyogV2UgYWNjZXB0IGZsYXR0ZW5lZCB0cmVlIHBoYW5kbGVzIGVpdGhlciBpbgorCQkJICogZVBBUFItc3R5bGUgInBoYW5kbGUiIHByb3BlcnRpZXMsIG9yIHRoZQorCQkJICogbGVnYWN5ICJsaW51eCxwaGFuZGxlIiBwcm9wZXJ0aWVzLiAgSWYgYm90aAorCQkJICogYXBwZWFyIGFuZCBoYXZlIGRpZmZlcmVudCB2YWx1ZXMsIHRoaW5ncworCQkJICogd2lsbCBnZXQgd2VpcmQuICBEb24ndCBkbyB0aGF0LiAqLworCQkJaWYgKChzdHJjbXAocG5hbWUsICJwaGFuZGxlIikgPT0gMCkgfHwKKwkJCSAgICAoc3RyY21wKHBuYW1lLCAibGludXgscGhhbmRsZSIpID09IDApKSB7CisJCQkJaWYgKG5wLT5waGFuZGxlID09IDApCisJCQkJCW5wLT5waGFuZGxlID0gKigodTMyICopKnApOworCQkJfQorCQkJLyogQW5kIHdlIHByb2Nlc3MgdGhlICJpYm0scGhhbmRsZSIgcHJvcGVydHkKKwkJCSAqIHVzZWQgaW4gcFNlcmllcyBkeW5hbWljIGRldmljZSB0cmVlCisJCQkgKiBzdHVmZiAqLworCQkJaWYgKHN0cmNtcChwbmFtZSwgImlibSxwaGFuZGxlIikgPT0gMCkKKwkJCQlucC0+cGhhbmRsZSA9ICooKHUzMiAqKSpwKTsKKwkJCXBwLT5uYW1lID0gcG5hbWU7CisJCQlwcC0+bGVuZ3RoID0gc3o7CisJCQlwcC0+dmFsdWUgPSAodm9pZCAqKSpwOworCQkJKnByZXZfcHAgPSBwcDsKKwkJCXByZXZfcHAgPSAmcHAtPm5leHQ7CisJCX0KKwkJKnAgPSBfQUxJR04oKCpwKSArIHN6LCA0KTsKKwl9CisJLyogd2l0aCB2ZXJzaW9uIDB4MTAgd2UgbWF5IG5vdCBoYXZlIHRoZSBuYW1lIHByb3BlcnR5LCByZWNyZWF0ZQorCSAqIGl0IGhlcmUgZnJvbSB0aGUgdW5pdCBuYW1lIGlmIGFic2VudAorCSAqLworCWlmICghaGFzX25hbWUpIHsKKwkJY2hhciAqcDEgPSBwYXRocCwgKnBzID0gcGF0aHAsICpwYSA9IE5VTEw7CisJCWludCBzejsKKworCQl3aGlsZSAoKnAxKSB7CisJCQlpZiAoKCpwMSkgPT0gJ0AnKQorCQkJCXBhID0gcDE7CisJCQlpZiAoKCpwMSkgPT0gJy8nKQorCQkJCXBzID0gcDEgKyAxOworCQkJcDErKzsKKwkJfQorCQlpZiAocGEgPCBwcykKKwkJCXBhID0gcDE7CisJCXN6ID0gKHBhIC0gcHMpICsgMTsKKwkJcHAgPSB1bmZsYXR0ZW5fZHRfYWxsb2MoJm1lbSwgc2l6ZW9mKHN0cnVjdCBwcm9wZXJ0eSkgKyBzeiwKKwkJCQkJX19hbGlnbm9mX18oc3RydWN0IHByb3BlcnR5KSk7CisJCWlmIChhbGxuZXh0cHApIHsKKwkJCXBwLT5uYW1lID0gIm5hbWUiOworCQkJcHAtPmxlbmd0aCA9IHN6OworCQkJcHAtPnZhbHVlID0gcHAgKyAxOworCQkJKnByZXZfcHAgPSBwcDsKKwkJCXByZXZfcHAgPSAmcHAtPm5leHQ7CisJCQltZW1jcHkocHAtPnZhbHVlLCBwcywgc3ogLSAxKTsKKwkJCSgoY2hhciAqKXBwLT52YWx1ZSlbc3ogLSAxXSA9IDA7CisJCQlwcl9kZWJ1ZygiZml4ZWQgdXAgbmFtZSBmb3IgJXMgLT4gJXNcbiIsIHBhdGhwLAorCQkJCShjaGFyICopcHAtPnZhbHVlKTsKKwkJfQorCX0KKwlpZiAoYWxsbmV4dHBwKSB7CisJCSpwcmV2X3BwID0gTlVMTDsKKwkJbnAtPm5hbWUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJuYW1lIiwgTlVMTCk7CisJCW5wLT50eXBlID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKKworCQlpZiAoIW5wLT5uYW1lKQorCQkJbnAtPm5hbWUgPSAiPE5VTEw+IjsKKwkJaWYgKCFucC0+dHlwZSkKKwkJCW5wLT50eXBlID0gIjxOVUxMPiI7CisJfQorCXdoaWxlICh0YWcgPT0gT0ZfRFRfQkVHSU5fTk9ERSkgeworCQltZW0gPSB1bmZsYXR0ZW5fZHRfbm9kZShtZW0sIHAsIG5wLCBhbGxuZXh0cHAsIGZwc2l6ZSk7CisJCXRhZyA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopKCpwKSk7CisJfQorCWlmICh0YWcgIT0gT0ZfRFRfRU5EX05PREUpIHsKKwkJcHJfZXJyKCJXZWlyZCB0YWcgYXQgZW5kIG9mIG5vZGU6ICV4XG4iLCB0YWcpOworCQlyZXR1cm4gbWVtOworCX0KKwkqcCArPSA0OworCXJldHVybiBtZW07Cit9CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKKy8qKgorICogZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkIC0gRGVjb2RlIGluaXRyZCBsb2NhdGlvbiBmcm9tIGZsYXQgdHJlZQorICogQG5vZGU6IHJlZmVyZW5jZSB0byBub2RlIGNvbnRhaW5pbmcgaW5pdHJkIGxvY2F0aW9uICgnY2hvc2VuJykKKyAqLwordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkKHVuc2lnbmVkIGxvbmcgbm9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIGxlbjsKKwlfX2JlMzIgKnByb3A7CisKKwlwcl9kZWJ1ZygiTG9va2luZyBmb3IgaW5pdHJkIHByb3BlcnRpZXMuLi4gIik7CisKKwlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsaW5pdHJkLXN0YXJ0IiwgJmxlbik7CisJaWYgKCFwcm9wKQorCQlyZXR1cm47CisJc3RhcnQgPSBvZl9yZWFkX3Vsb25nKHByb3AsIGxlbi80KTsKKworCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxpbml0cmQtZW5kIiwgJmxlbik7CisJaWYgKCFwcm9wKQorCQlyZXR1cm47CisJZW5kID0gb2ZfcmVhZF91bG9uZyhwcm9wLCBsZW4vNCk7CisKKwllYXJseV9pbml0X2R0X3NldHVwX2luaXRyZF9hcmNoKHN0YXJ0LCBlbmQpOworCXByX2RlYnVnKCJpbml0cmRfc3RhcnQ9MHglbHggIGluaXRyZF9lbmQ9MHglbHhcbiIsIHN0YXJ0LCBlbmQpOworfQorI2Vsc2UKK2lubGluZSB2b2lkIGVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZCh1bnNpZ25lZCBsb25nIG5vZGUpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU5JVFJEICovCisKKy8qKgorICogZWFybHlfaW5pdF9kdF9zY2FuX3Jvb3QgLSBmZXRjaCB0aGUgdG9wIGxldmVsIGFkZHJlc3MgYW5kIHNpemUgY2VsbHMKKyAqLworaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fcm9vdCh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAorCQkJCSAgIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKK3sKKwlfX2JlMzIgKnByb3A7CisKKwlpZiAoZGVwdGggIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlkdF9yb290X3NpemVfY2VsbHMgPSBPRl9ST09UX05PREVfU0laRV9DRUxMU19ERUZBVUxUOworCWR0X3Jvb3RfYWRkcl9jZWxscyA9IE9GX1JPT1RfTk9ERV9BRERSX0NFTExTX0RFRkFVTFQ7CisKKwlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiI3NpemUtY2VsbHMiLCBOVUxMKTsKKwlpZiAocHJvcCkKKwkJZHRfcm9vdF9zaXplX2NlbGxzID0gYmUzMl90b19jcHVwKHByb3ApOworCXByX2RlYnVnKCJkdF9yb290X3NpemVfY2VsbHMgPSAleFxuIiwgZHRfcm9vdF9zaXplX2NlbGxzKTsKKworCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICIjYWRkcmVzcy1jZWxscyIsIE5VTEwpOworCWlmIChwcm9wKQorCQlkdF9yb290X2FkZHJfY2VsbHMgPSBiZTMyX3RvX2NwdXAocHJvcCk7CisJcHJfZGVidWcoImR0X3Jvb3RfYWRkcl9jZWxscyA9ICV4XG4iLCBkdF9yb290X2FkZHJfY2VsbHMpOworCisJLyogYnJlYWsgbm93ICovCisJcmV0dXJuIDE7Cit9CisKK3U2NCBfX2luaXQgZHRfbWVtX25leHRfY2VsbChpbnQgcywgX19iZTMyICoqY2VsbHApCit7CisJX19iZTMyICpwID0gKmNlbGxwOworCisJKmNlbGxwID0gcCArIHM7CisJcmV0dXJuIG9mX3JlYWRfbnVtYmVyKHAsIHMpOworfQorCisvKioKKyAqIGVhcmx5X2luaXRfZHRfc2Nhbl9tZW1vcnkgLSBMb29rIGZvciBhbiBwYXJzZSBtZW1vcnkgbm9kZXMKKyAqLworaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5KHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCisJCQkJICAgICBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCit7CisJY2hhciAqdHlwZSA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7CisJX19iZTMyICpyZWcsICplbmRwOworCXVuc2lnbmVkIGxvbmcgbDsKKworCS8qIFdlIGFyZSBzY2FubmluZyAibWVtb3J5IiBub2RlcyBvbmx5ICovCisJaWYgKHR5cGUgPT0gTlVMTCkgeworCQkvKgorCQkgKiBUaGUgbG9uZ3RyYWlsIGRvZXNuJ3QgaGF2ZSBhIGRldmljZV90eXBlIG9uIHRoZQorCQkgKiAvbWVtb3J5IG5vZGUsIHNvIGxvb2sgZm9yIHRoZSBub2RlIGNhbGxlZCAvbWVtb3J5QDAuCisJCSAqLworCQlpZiAoZGVwdGggIT0gMSB8fCBzdHJjbXAodW5hbWUsICJtZW1vcnlAMCIpICE9IDApCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHN0cmNtcCh0eXBlLCAibWVtb3J5IikgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZWcgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCx1c2FibGUtbWVtb3J5IiwgJmwpOworCWlmIChyZWcgPT0gTlVMTCkKKwkJcmVnID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAicmVnIiwgJmwpOworCWlmIChyZWcgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwllbmRwID0gcmVnICsgKGwgLyBzaXplb2YoX19iZTMyKSk7CisKKwlwcl9kZWJ1ZygibWVtb3J5IHNjYW4gbm9kZSAlcywgcmVnIHNpemUgJWxkLCBkYXRhOiAleCAleCAleCAleCxcbiIsCisJICAgIHVuYW1lLCBsLCByZWdbMF0sIHJlZ1sxXSwgcmVnWzJdLCByZWdbM10pOworCisJd2hpbGUgKChlbmRwIC0gcmVnKSA+PSAoZHRfcm9vdF9hZGRyX2NlbGxzICsgZHRfcm9vdF9zaXplX2NlbGxzKSkgeworCQl1NjQgYmFzZSwgc2l6ZTsKKworCQliYXNlID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X2FkZHJfY2VsbHMsICZyZWcpOworCQlzaXplID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X3NpemVfY2VsbHMsICZyZWcpOworCisJCWlmIChzaXplID09IDApCisJCQljb250aW51ZTsKKwkJcHJfZGVidWcoIiAtICVsbHggLCAgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyliYXNlLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplKTsKKworCQllYXJseV9pbml0X2R0X2FkZF9tZW1vcnlfYXJjaChiYXNlLCBzaXplKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCisJCQkJICAgICBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBsOworCWNoYXIgKnA7CisKKwlwcl9kZWJ1Zygic2VhcmNoIFwiY2hvc2VuXCIsIGRlcHRoOiAlZCwgdW5hbWU6ICVzXG4iLCBkZXB0aCwgdW5hbWUpOworCisJaWYgKGRlcHRoICE9IDEgfHwKKwkgICAgKHN0cmNtcCh1bmFtZSwgImNob3NlbiIpICE9IDAgJiYgc3RyY21wKHVuYW1lLCAiY2hvc2VuQDAiKSAhPSAwKSkKKwkJcmV0dXJuIDA7CisKKwllYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQobm9kZSk7CisKKwkvKiBSZXRyZWl2ZSBjb21tYW5kIGxpbmUgKi8KKwlwID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiYm9vdGFyZ3MiLCAmbCk7CisJaWYgKHAgIT0gTlVMTCAmJiBsID4gMCkKKwkJc3RybGNweShjbWRfbGluZSwgcCwgbWluKChpbnQpbCwgQ09NTUFORF9MSU5FX1NJWkUpKTsKKworI2lmZGVmIENPTkZJR19DTURMSU5FCisjaWZuZGVmIENPTkZJR19DTURMSU5FX0ZPUkNFCisJaWYgKHAgPT0gTlVMTCB8fCBsID09IDAgfHwgKGwgPT0gMSAmJiAoKnApID09IDApKQorI2VuZGlmCisJCXN0cmxjcHkoY21kX2xpbmUsIENPTkZJR19DTURMSU5FLCBDT01NQU5EX0xJTkVfU0laRSk7CisjZW5kaWYgLyogQ09ORklHX0NNRExJTkUgKi8KKworCWVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW5fYXJjaChub2RlKTsKKworCXByX2RlYnVnKCJDb21tYW5kIGxpbmUgaXM6ICVzXG4iLCBjbWRfbGluZSk7CisKKwkvKiBicmVhayBub3cgKi8KKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUgLSBjcmVhdGUgdHJlZSBvZiBkZXZpY2Vfbm9kZXMgZnJvbSBmbGF0IGJsb2IKKyAqCisgKiB1bmZsYXR0ZW5zIHRoZSBkZXZpY2UtdHJlZSBwYXNzZWQgYnkgdGhlIGZpcm13YXJlLCBjcmVhdGluZyB0aGUKKyAqIHRyZWUgb2Ygc3RydWN0IGRldmljZV9ub2RlLiBJdCBhbHNvIGZpbGxzIHRoZSAibmFtZSIgYW5kICJ0eXBlIgorICogcG9pbnRlcnMgb2YgdGhlIG5vZGVzIHNvIHRoZSBub3JtYWwgZGV2aWNlLXRyZWUgd2Fsa2luZyBmdW5jdGlvbnMKKyAqIGNhbiBiZSB1c2VkLgorICovCit2b2lkIF9faW5pdCB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBtZW0sIHNpemU7CisJc3RydWN0IGRldmljZV9ub2RlICoqYWxsbmV4dHAgPSAmYWxsbm9kZXM7CisKKwlwcl9kZWJ1ZygiIC0+IHVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpXG4iKTsKKworCS8qIEZpcnN0IHBhc3MsIHNjYW4gZm9yIHNpemUgKi8KKwlzdGFydCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCisJCWJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3QpOworCXNpemUgPSB1bmZsYXR0ZW5fZHRfbm9kZSgwLCAmc3RhcnQsIE5VTEwsIE5VTEwsIDApOworCXNpemUgPSAoc2l6ZSB8IDMpICsgMTsKKworCXByX2RlYnVnKCIgIHNpemUgaXMgJWx4LCBhbGxvY2F0aW5nLi4uXG4iLCBzaXplKTsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGV4cGFuZGVkIGRldmljZSB0cmVlICovCisJbWVtID0gZWFybHlfaW5pdF9kdF9hbGxvY19tZW1vcnlfYXJjaChzaXplICsgNCwKKwkJCV9fYWxpZ25vZl9fKHN0cnVjdCBkZXZpY2Vfbm9kZSkpOworCW1lbSA9ICh1bnNpZ25lZCBsb25nKSBfX3ZhKG1lbSk7CisKKwkoKF9fYmUzMiAqKW1lbSlbc2l6ZSAvIDRdID0gY3B1X3RvX2JlMzIoMHhkZWFkYmVlZik7CisKKwlwcl9kZWJ1ZygiICB1bmZsYXR0ZW5pbmcgJWx4Li4uXG4iLCBtZW0pOworCisJLyogU2Vjb25kIHBhc3MsIGRvIGFjdHVhbCB1bmZsYXR0ZW5pbmcgKi8KKwlzdGFydCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCisJCWJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3QpOworCXVuZmxhdHRlbl9kdF9ub2RlKG1lbSwgJnN0YXJ0LCBOVUxMLCAmYWxsbmV4dHAsIDApOworCWlmIChiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKXN0YXJ0KSAhPSBPRl9EVF9FTkQpCisJCXByX3dhcm5pbmcoIldlaXJkIHRhZyBhdCBlbmQgb2YgdHJlZTogJTA4eFxuIiwgKigodTMyICopc3RhcnQpKTsKKwlpZiAoYmUzMl90b19jcHUoKChfX2JlMzIgKiltZW0pW3NpemUgLyA0XSkgIT0gMHhkZWFkYmVlZikKKwkJcHJfd2FybmluZygiRW5kIG9mIHRyZWUgbWFya2VyIG92ZXJ3cml0dGVuOiAlMDh4XG4iLAorCQkJICAgYmUzMl90b19jcHUoKChfX2JlMzIgKiltZW0pW3NpemUgLyA0XSkpOworCSphbGxuZXh0cCA9IE5VTEw7CisKKwkvKiBHZXQgcG9pbnRlciB0byBPRiAiL2Nob3NlbiIgbm9kZSBmb3IgdXNlIGV2ZXJ5d2hlcmUgKi8KKwlvZl9jaG9zZW4gPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2Nob3NlbiIpOworCWlmIChvZl9jaG9zZW4gPT0gTlVMTCkKKwkJb2ZfY2hvc2VuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jaG9zZW5AMCIpOworCisJcHJfZGVidWcoIiA8LSB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUoKVxuIik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2dwaW8uYyBiL2RyaXZlcnMvb2YvZ3Bpby5jCmluZGV4IDZlZWE2MDEuLjI0YzM2MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvZ3Bpby5jCisrKyBiL2RyaXZlcnMvb2YvZ3Bpby5jCkBAIC0zNiw3ICszNiw3IEBACiAJc3RydWN0IG9mX2dwaW9fY2hpcCAqb2ZfZ2MgPSBOVUxMOwogCWludCBzaXplOwogCWNvbnN0IHZvaWQgKmdwaW9fc3BlYzsKLQljb25zdCB1MzIgKmdwaW9fY2VsbHM7CisJY29uc3QgX19iZTMyICpncGlvX2NlbGxzOwogCiAJcmV0ID0gb2ZfcGFyc2VfcGhhbmRsZXNfd2l0aF9hcmdzKG5wLCAiZ3Bpb3MiLCAiI2dwaW8tY2VsbHMiLCBpbmRleCwKIAkJCQkJICAmZ2MsICZncGlvX3NwZWMpOwpAQCAtNTUsNyArNTUsNyBAQAogCiAJZ3Bpb19jZWxscyA9IG9mX2dldF9wcm9wZXJ0eShnYywgIiNncGlvLWNlbGxzIiwgJnNpemUpOwogCWlmICghZ3Bpb19jZWxscyB8fCBzaXplICE9IHNpemVvZigqZ3Bpb19jZWxscykgfHwKLQkJCSpncGlvX2NlbGxzICE9IG9mX2djLT5ncGlvX2NlbGxzKSB7CisJCQliZTMyX3RvX2NwdXAoZ3Bpb19jZWxscykgIT0gb2ZfZ2MtPmdwaW9fY2VsbHMpIHsKIAkJcHJfZGVidWcoIiVzOiB3cm9uZyAjZ3Bpby1jZWxscyBmb3IgJXNcbiIsCiAJCQkgbnAtPmZ1bGxfbmFtZSwgZ2MtPmZ1bGxfbmFtZSk7CiAJCXJldCA9IC1FSU5WQUw7CkBAIC0xMjcsNyArMTI3LDggQEAKIGludCBvZl9ncGlvX3NpbXBsZV94bGF0ZShzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYywgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCSBjb25zdCB2b2lkICpncGlvX3NwZWMsIGVudW0gb2ZfZ3Bpb19mbGFncyAqZmxhZ3MpCiB7Ci0JY29uc3QgdTMyICpncGlvID0gZ3Bpb19zcGVjOworCWNvbnN0IF9fYmUzMiAqZ3BpbyA9IGdwaW9fc3BlYzsKKwljb25zdCB1MzIgbiA9IGJlMzJfdG9fY3B1cChncGlvKTsKIAogCS8qCiAJICogV2UncmUgZGlzY291cmFnaW5nIGdwaW9fY2VsbHMgPCAyLCBzaW5jZSB0aGF0IHdheSB5b3UnbGwgaGF2ZSB0bwpAQCAtMTQwLDEzICsxNDEsMTMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCpncGlvID4gb2ZfZ2MtPmdjLm5ncGlvKQorCWlmIChuID4gb2ZfZ2MtPmdjLm5ncGlvKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmbGFncykKLQkJKmZsYWdzID0gZ3Bpb1sxXTsKKwkJKmZsYWdzID0gYmUzMl90b19jcHUoZ3Bpb1sxXSk7CiAKLQlyZXR1cm4gKmdwaW87CisJcmV0dXJuIG47CiB9CiBFWFBPUlRfU1lNQk9MKG9mX2dwaW9fc2ltcGxlX3hsYXRlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9pMmMuYyBiL2RyaXZlcnMvb2Yvb2ZfaTJjLmMKaW5kZXggZmE2NWEyYi4uYTNhNzA4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9pMmMuYworKysgYi9kcml2ZXJzL29mL29mX2kyYy5jCkBAIC0yNSw3ICsyNSw3IEBACiAJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShhZGFwX25vZGUsIG5vZGUpIHsKIAkJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm8gPSB7fTsKIAkJc3RydWN0IGRldl9hcmNoZGF0YSBkZXZfYWQgPSB7fTsKLQkJY29uc3QgdTMyICphZGRyOworCQljb25zdCBfX2JlMzIgKmFkZHI7CiAJCWludCBsZW47CiAKIAkJaWYgKG9mX21vZGFsaWFzX25vZGUobm9kZSwgaW5mby50eXBlLCBzaXplb2YoaW5mby50eXBlKSkgPCAwKQpAQCAtNDAsNyArNDAsNyBAQAogCiAJCWluZm8uaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobm9kZSwgMCk7CiAKLQkJaW5mby5hZGRyID0gKmFkZHI7CisJCWluZm8uYWRkciA9IGJlMzJfdG9fY3B1cChhZGRyKTsKIAogCQlkZXZfYXJjaGRhdGFfc2V0X25vZGUoJmRldl9hZCwgbm9kZSk7CiAJCWluZm8uYXJjaGRhdGEgPSAmZGV2X2FkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9tZGlvLmMgYi9kcml2ZXJzL29mL29mX21kaW8uYwppbmRleCA0YjIyYmE1Li4xOGVjYWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL29mX21kaW8uYworKysgYi9kcml2ZXJzL29mL29mX21kaW8uYwpAQCAtNTEsNyArNTEsNyBAQAogCiAJLyogTG9vcCBvdmVyIHRoZSBjaGlsZCBub2RlcyBhbmQgcmVnaXN0ZXIgYSBwaHlfZGV2aWNlIGZvciBlYWNoIG9uZSAqLwogCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7Ci0JCWNvbnN0IHUzMiAqYWRkcjsKKwkJY29uc3QgX19iZTMyICphZGRyOwogCQlpbnQgbGVuOwogCiAJCS8qIEEgUEhZIG11c3QgaGF2ZSBhIHJlZyBwcm9wZXJ0eSBpbiB0aGUgcmFuZ2UgWzAtMzFdICovCkBAIC02OCw3ICs2OCw3IEBACiAJCQkJbWRpby0+aXJxWyphZGRyXSA9IFBIWV9QT0xMOwogCQl9CiAKLQkJcGh5ID0gZ2V0X3BoeV9kZXZpY2UobWRpbywgKmFkZHIpOworCQlwaHkgPSBnZXRfcGh5X2RldmljZShtZGlvLCBiZTMyX3RvX2NwdXAoYWRkcikpOwogCQlpZiAoIXBoeSkgewogCQkJZGV2X2VycigmbWRpby0+ZGV2LCAiZXJyb3IgcHJvYmluZyBQSFkgYXQgYWRkcmVzcyAlaVxuIiwKIAkJCQkqYWRkcik7CkBAIC0xNjAsNyArMTYwLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5ldF9ucDsKIAljaGFyIGJ1c19pZFtNSUlfQlVTX0lEX1NJWkUgKyAzXTsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OwotCWNvbnN0IHUzMiAqcGh5X2lkOworCWNvbnN0IF9fYmUzMiAqcGh5X2lkOwogCWludCBzejsKIAogCWlmICghZGV2LT5kZXYucGFyZW50KQpAQCAtMTc0LDcgKzE3NCw3IEBACiAJaWYgKCFwaHlfaWQgfHwgc3ogPCBzaXplb2YoKnBoeV9pZCkpCiAJCXJldHVybiBOVUxMOwogCi0Jc3ByaW50ZihidXNfaWQsIFBIWV9JRF9GTVQsICIwIiwgcGh5X2lkWzBdKTsKKwlzcHJpbnRmKGJ1c19pZCwgUEhZX0lEX0ZNVCwgIjAiLCBiZTMyX3RvX2NwdShwaHlfaWRbMF0pKTsKIAogCXBoeSA9IHBoeV9jb25uZWN0KGRldiwgYnVzX2lkLCBobmRsciwgMCwgaWZhY2UpOwogCXJldHVybiBJU19FUlIocGh5KSA/IE5VTEwgOiBwaHk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX3NwaS5jIGIvZHJpdmVycy9vZi9vZl9zcGkuYwppbmRleCBiZWQwZWQ2Li5mNjVmNDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL29mX3NwaS5jCisrKyBiL2RyaXZlcnMvb2Yvb2Zfc3BpLmMKQEAgLTIzLDcgKzIzLDcgQEAKIHsKIAlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbmM7Ci0JY29uc3QgdTMyICpwcm9wOworCWNvbnN0IF9fYmUzMiAqcHJvcDsKIAlpbnQgcmM7CiAJaW50IGxlbjsKIApAQCAtNTQsNyArNTQsNyBAQAogCQkJc3BpX2Rldl9wdXQoc3BpKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXNwaS0+Y2hpcF9zZWxlY3QgPSAqcHJvcDsKKwkJc3BpLT5jaGlwX3NlbGVjdCA9IGJlMzJfdG9fY3B1cChwcm9wKTsKIAogCQkvKiBNb2RlIChjbG9jayBwaGFzZS9wb2xhcml0eS9ldGMuKSAqLwogCQlpZiAob2ZfZmluZF9wcm9wZXJ0eShuYywgInNwaS1jcGhhIiwgTlVMTCkpCkBAIC03Miw3ICs3Miw3IEBACiAJCQlzcGlfZGV2X3B1dChzcGkpOwogCQkJY29udGludWU7CiAJCX0KLQkJc3BpLT5tYXhfc3BlZWRfaHogPSAqcHJvcDsKKwkJc3BpLT5tYXhfc3BlZWRfaHogPSBiZTMyX3RvX2NwdXAocHJvcCk7CiAKIAkJLyogSVJRICovCiAJCXNwaS0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobmMsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL0tjb25maWcKaW5kZXggYjFlY2VmYS4uNzg1OGExMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnCkBAIC0yMSwxNyArMjEsNiBAQAogCiAJICAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KIAotY29uZmlnIFBDSV9MRUdBQ1kKLQlib29sICJFbmFibGUgZGVwcmVjYXRlZCBwY2lfZmluZF8qIEFQSSIKLQlkZXBlbmRzIG9uIFBDSQotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgZGVwcmVjYXRlZAotCSAgcGNpX2ZpbmRfZGV2aWNlKCkgQVBJLiAgTW9zdCBkcml2ZXJzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgb3ZlcgotCSAgdG8gdXNpbmcgdGhlIHByb3BlciBob3RwbHVnIEFQSXMsIHNvIHRoaXMgb3B0aW9uIHNlcnZlcyB0bwotCSAgaW5jbHVkZS9leGNsdWRlIG9ubHkgYSBmZXcgZHJpdmVycyB0aGF0IGFyZSBzdGlsbCB1c2luZyB0aGlzCi0JICBBUEkuCi0KIGNvbmZpZyBQQ0lfREVCVUcKIAlib29sICJQQ0kgRGVidWdnaW5nIgogCWRlcGVuZHMgb24gUENJICYmIERFQlVHX0tFUk5FTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQppbmRleCA0ZGY0OGQ1Li44Njc0YzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQpAQCAtMiwxNCArMiwxMyBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIFBDSSBidXMgc3BlY2lmaWMgZHJpdmVycy4KICMKIAotb2JqLXkJCSs9IGFjY2Vzcy5vIGJ1cy5vIHByb2JlLm8gcmVtb3ZlLm8gcGNpLm8gcXVpcmtzLm8gXAorb2JqLXkJCSs9IGFjY2Vzcy5vIGJ1cy5vIHByb2JlLm8gcmVtb3ZlLm8gcGNpLm8gXAogCQkJcGNpLWRyaXZlci5vIHNlYXJjaC5vIHBjaS1zeXNmcy5vIHJvbS5vIHNldHVwLXJlcy5vIFwKIAkJCWlycS5vCiBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCiBvYmotJChDT05GSUdfU1lTRlMpICs9IHNsb3QubwogCi1vYmotJChDT05GSUdfUENJX0xFR0FDWSkgKz0gbGVnYWN5Lm8KLUNGTEFHU19sZWdhY3kubyArPSAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zCitvYmotJChDT05GSUdfUENJX1FVSVJLUykgKz0gcXVpcmtzLm8KIAogIyBCdWlsZCBQQ0kgRXhwcmVzcyBzdHVmZiBpZiBuZWVkZWQKIG9iai0kKENPTkZJR19QQ0lFUE9SVEJVUykgKz0gcGNpZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2J1cy5jIGIvZHJpdmVycy9wY2kvYnVzLmMKaW5kZXggY2VmMjhhNy4uNzEyMjUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvYnVzLmMKQEAgLTE3LDYgKzE3LDUyIEBACiAKICNpbmNsdWRlICJwY2kuaCIKIAordm9pZCBwY2lfYnVzX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCSAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBwY2lfYnVzX3Jlc291cmNlICpidXNfcmVzOworCisJYnVzX3JlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfYnVzX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidXNfcmVzKSB7CisJCWRldl9lcnIoJmJ1cy0+ZGV2LCAiY2FuJ3QgYWRkICVwUiByZXNvdXJjZVxuIiwgcmVzKTsKKwkJcmV0dXJuOworCX0KKworCWJ1c19yZXMtPnJlcyA9IHJlczsKKwlidXNfcmVzLT5mbGFncyA9IGZsYWdzOworCWxpc3RfYWRkX3RhaWwoJmJ1c19yZXMtPmxpc3QsICZidXMtPnJlc291cmNlcyk7Cit9CisKK3N0cnVjdCByZXNvdXJjZSAqcGNpX2J1c19yZXNvdXJjZV9uKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBuKQoreworCXN0cnVjdCBwY2lfYnVzX3Jlc291cmNlICpidXNfcmVzOworCisJaWYgKG4gPCBQQ0lfQlJJREdFX1JFU09VUkNFX05VTSkKKwkJcmV0dXJuIGJ1cy0+cmVzb3VyY2Vbbl07CisKKwluIC09IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzX3JlcywgJmJ1cy0+cmVzb3VyY2VzLCBsaXN0KSB7CisJCWlmIChuLS0gPT0gMCkKKwkJCXJldHVybiBidXNfcmVzLT5yZXM7CisJfQorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX2J1c19yZXNvdXJjZV9uKTsKKwordm9pZCBwY2lfYnVzX3JlbW92ZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2J1c19yZXNvdXJjZSAqYnVzX3JlcywgKnRtcDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlJJREdFX1JFU09VUkNFX05VTTsgaSsrKQorCQlidXMtPnJlc291cmNlW2ldID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShidXNfcmVzLCB0bXAsICZidXMtPnJlc291cmNlcywgbGlzdCkgeworCQlsaXN0X2RlbCgmYnVzX3Jlcy0+bGlzdCk7CisJCWtmcmVlKGJ1c19yZXMpOworCX0KK30KKwogLyoqCiAgKiBwY2lfYnVzX2FsbG9jX3Jlc291cmNlIC0gYWxsb2NhdGUgYSByZXNvdXJjZSBmcm9tIGEgcGFyZW50IGJ1cwogICogQGJ1czogUENJIGJ1cwpAQCAtMzYsMTEgKzgyLDE0IEBACiBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduLAogCQlyZXNvdXJjZV9zaXplX3QgbWluLCB1bnNpZ25lZCBpbnQgdHlwZV9tYXNrLAotCQl2b2lkICgqYWxpZ25mKSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLCByZXNvdXJjZV9zaXplX3QsCi0JCQkJcmVzb3VyY2Vfc2l6ZV90KSwKKwkJcmVzb3VyY2Vfc2l6ZV90ICgqYWxpZ25mKSh2b2lkICosCisJCQkJCSAgY29uc3Qgc3RydWN0IHJlc291cmNlICosCisJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90LAorCQkJCQkgIHJlc291cmNlX3NpemVfdCksCiAJCXZvaWQgKmFsaWduZl9kYXRhKQogewogCWludCBpLCByZXQgPSAtRU5PTUVNOworCXN0cnVjdCByZXNvdXJjZSAqcjsKIAlyZXNvdXJjZV9zaXplX3QgbWF4ID0gLTE7CiAKIAl0eXBlX21hc2sgfD0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNOwpAQCAtNDksOCArOTgsNyBAQAogCWlmICghKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTV82NCkpCiAJCW1heCA9IFBDSUJJT1NfTUFYX01FTV8zMjsKIAotCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBidXMtPnJlc291cmNlW2ldOworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByLCBpKSB7CiAJCWlmICghcikKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2NvcmUuYwppbmRleCA0ZGQ3MTE0Li5lZmE5ZjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMKQEAgLTMzMiw4ICszMzIsNiBAQAogCXNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mby0+YXR0ZW50aW9uX3N0YXR1cyA9IDA7CiAJc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvLT5sYXRjaF9zdGF0dXMgPSBhY3BpcGhwX2dldF9sYXRjaF9zdGF0dXMoc2xvdC0+YWNwaV9zbG90KTsKIAlzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8tPmFkYXB0ZXJfc3RhdHVzID0gYWNwaXBocF9nZXRfYWRhcHRlcl9zdGF0dXMoc2xvdC0+YWNwaV9zbG90KTsKLQlzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8tPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQlzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8tPmN1cl9idXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKIAogCWFjcGlwaHBfc2xvdC0+c2xvdCA9IHNsb3Q7CiAJc25wcmludGYobmFtZSwgU0xPVF9OQU1FX1NJWkUsICIlbGx1Iiwgc2xvdC0+YWNwaV9zbG90LT5zdW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKaW5kZXggOGU5NTJmZC4uY2IyZmQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCkBAIC03MjAsMTIgKzcyMCw2IEBACiAJCQktcmV0X3ZhbCk7CiAJCWdvdG8gYWNwaXBocF9idXNfYWRkX291dDsKIAl9Ci0JLyoKLQkgKiB0cnkgdG8gc3RhcnQgYW55d2F5LiAgV2UgY291bGQgaGF2ZSBmYWlsZWQgdG8gYWRkCi0JICogc2ltcGx5IGJlY2F1c2UgdGhpcyBidXMgaGFkIHByZXZpb3VzbHkgYmVlbiBhZGRlZAotCSAqIG9uIGFub3RoZXIgYWRkLiAgRG9uJ3QgYm90aGVyIHdpdGggdGhlIHJldHVybiB2YWx1ZQotCSAqIHdlIGp1c3Qga2VlcCBnb2luZy4KLQkgKi8KIAlyZXRfdmFsID0gYWNwaV9idXNfc3RhcnQoZGV2aWNlKTsKIAogYWNwaXBocF9idXNfYWRkX291dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaWhwX2dlbmVyaWMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaWhwX2dlbmVyaWMuYwppbmRleCAxNDhmYjQ2Li5mYjNmODQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2locF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpaHBfZ2VuZXJpYy5jCkBAIC0xNjIsNiArMTYyLDcgQEAKIAlkZXYgPSBwY2lfZ2V0X3Nsb3QoYnVzLCBQQ0lfREVWRk4oYnJpZGdlX3Nsb3QsIDApKTsKIAlpZighZGV2IHx8IGRldi0+aGRyX3R5cGUgIT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewogCQllcnIoIkludmFsaWQgYnJpZGdlIGRldmljZSAlcyIsIGJyaWRnZSk7CisJCXBjaV9kZXZfcHV0KGRldik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlidXMgPSBkZXYtPnN1Ym9yZGluYXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmgKaW5kZXggOWM2YTlmZC4uZDhmZmM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oCkBAIC0zMTAsOCArMzEwLDYgQEAKIAl1OCBmaXJzdF9zbG90OwogCXU4IGFkZF9zdXBwb3J0OwogCXU4IHB1c2hfZmxhZzsKLQllbnVtIHBjaV9idXNfc3BlZWQgc3BlZWQ7Ci0JZW51bSBwY2lfYnVzX3NwZWVkIHNwZWVkX2NhcGFiaWxpdHk7CiAJdTggcHVzaF9idXR0b247CQkJLyogMCA9IG5vIHB1c2hidXR0b24sIDEgPSBwdXNoYnV0dG9uIHByZXNlbnQgKi8KIAl1OCBzbG90X3N3aXRjaF90eXBlOwkJLyogMCA9IG5vIHN3aXRjaCwgMSA9IHN3aXRjaCBwcmVzZW50ICovCiAJdTggZGVmZWF0dXJlX1BIUDsJCS8qIDAgPSBQSFAgbm90IHN1cHBvcnRlZCwgMSA9IFBIUCBzdXBwb3J0ZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2NvcmUuYwppbmRleCAwNzViNGY0Li5mMTg0ZDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY29yZS5jCkBAIC01ODMsMzAgKzU4Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X21heF9idXNfc3BlZWQgKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHNsb3QtPmN0cmw7Ci0KLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKLQotCSp2YWx1ZSA9IGN0cmwtPnNwZWVkX2NhcGFiaWxpdHk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBnZXRfY3VyX2J1c19zcGVlZCAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gc2xvdC0+Y3RybDsKLQotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwotCi0JKnZhbHVlID0gY3RybC0+c3BlZWQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBob3RwbHVnX3Nsb3Rfb3BzIGNwcXBocF9ob3RwbHVnX3Nsb3Rfb3BzID0gewogCS5zZXRfYXR0ZW50aW9uX3N0YXR1cyA9CXNldF9hdHRlbnRpb25fc3RhdHVzLAogCS5lbmFibGVfc2xvdCA9CQlwcm9jZXNzX1NJLApAQCAtNjE2LDggKzU5Miw2IEBACiAJLmdldF9hdHRlbnRpb25fc3RhdHVzID0JZ2V0X2F0dGVudGlvbl9zdGF0dXMsCiAJLmdldF9sYXRjaF9zdGF0dXMgPQlnZXRfbGF0Y2hfc3RhdHVzLAogCS5nZXRfYWRhcHRlcl9zdGF0dXMgPQlnZXRfYWRhcHRlcl9zdGF0dXMsCi0JLmdldF9tYXhfYnVzX3NwZWVkID0JZ2V0X21heF9idXNfc3BlZWQsCi0JLmdldF9jdXJfYnVzX3NwZWVkID0JZ2V0X2N1cl9idXNfc3BlZWQsCiB9OwogCiAjZGVmaW5lIFNMT1RfTkFNRV9TSVpFIDEwCkBAIC02MjksNiArNjAzLDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdDsKIAlzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3Q7CiAJc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvICpob3RwbHVnX3Nsb3RfaW5mbzsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gY3RybC0+cGNpX2J1czsKIAl1OCBudW1iZXJfb2Zfc2xvdHM7CiAJdTggc2xvdF9kZXZpY2U7CiAJdTggc2xvdF9udW1iZXI7CkBAIC02OTQsNyArNjY5LDcgQEAKIAkJCXNsb3QtPmNhcGFiaWxpdGllcyB8PSBQQ0lTTE9UXzY0X0JJVF9TVVBQT1JURUQ7CiAJCWlmIChpc19zbG90NjZtaHooc2xvdCkpCiAJCQlzbG90LT5jYXBhYmlsaXRpZXMgfD0gUENJU0xPVF82Nl9NSFpfU1VQUE9SVEVEOwotCQlpZiAoY3RybC0+c3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6KQorCQlpZiAoYnVzLT5jdXJfYnVzX3NwZWVkID09IFBDSV9TUEVFRF82Nk1IeikKIAkJCXNsb3QtPmNhcGFiaWxpdGllcyB8PSBQQ0lTTE9UXzY2X01IWl9PUEVSQVRJT047CiAKIAkJY3RybF9zbG90ID0KQEAgLTg0NCw2ICs4MTksNyBAQAogCXUzMiByYzsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybDsKIAlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmM7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKIAlpbnQgZXJyOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CkBAIC04NTIsNiArODI4LDcgQEAKIAkJCXBjaV9uYW1lKHBkZXYpLCBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KKwlidXMgPSBwZGV2LT5zdWJvcmRpbmF0ZTsKIAogCS8qIE5lZWQgdG8gcmVhZCBWSUQgZWFybHkgYi9jIGl0J3MgdXNlZCB0byBkaWZmZXJlbnRpYXRlIENQUSBhbmQgSU5UQwogCSAqIGRpc2NvdmVyeQpAQCAtOTI5LDIyICs5MDYsMjIgQEAKIAkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDEsICZidXNfY2FwKTsKIAkJCWlmIChidXNfY2FwICYgMHg4MCkgewogCQkJCWRiZygiYnVzIG1heCBzdXBwb3J0cyAxMzNNSHogUENJLVhcbiIpOwotCQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7CisJCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKGJ1c19jYXAgJiAweDQwKSB7CiAJCQkJZGJnKCJidXMgbWF4IHN1cHBvcnRzIDEwME1IeiBQQ0ktWFxuIik7Ci0JCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWDsKKwkJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVg7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAoYnVzX2NhcCAmIDIwKSB7CiAJCQkJZGJnKCJidXMgbWF4IHN1cHBvcnRzIDY2TUh6IFBDSS1YXG4iKTsKLQkJCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzY2TUh6X1BDSVg7CisJCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6X1BDSVg7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAoYnVzX2NhcCAmIDEwKSB7CiAJCQkJZGJnKCJidXMgbWF4IHN1cHBvcnRzIDY2TUh6IFBDSVxuIik7Ci0JCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF82Nk1IejsKKwkJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHo7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTk1NSw3ICs5MzIsNyBAQAogCQljYXNlIFBDSV9TVUJfSFBDX0lEOgogCQkJLyogT3JpZ2luYWwgNjUwMC83MDAwIGltcGxlbWVudGF0aW9uICovCiAJCQljdHJsLT5zbG90X3N3aXRjaF90eXBlID0gMTsKLQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfMzNNSHo7CisJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfMzNNSHo7CiAJCQljdHJsLT5wdXNoX2J1dHRvbiA9IDA7CiAJCQljdHJsLT5wY2lfY29uZmlnX3NwYWNlID0gMTsKIAkJCWN0cmwtPmRlZmVhdHVyZV9QSFAgPSAxOwpAQCAtOTY2LDcgKzk0Myw3IEBACiAJCQkvKiBGaXJzdCBQdXNoYnV0dG9uIGltcGxlbWVudGF0aW9uICovCiAJCQljdHJsLT5wdXNoX2ZsYWcgPSAxOwogCQkJY3RybC0+c2xvdF9zd2l0Y2hfdHlwZSA9IDE7Ci0JCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzMzTUh6OworCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzMzTUh6OwogCQkJY3RybC0+cHVzaF9idXR0b24gPSAxOwogCQkJY3RybC0+cGNpX2NvbmZpZ19zcGFjZSA9IDE7CiAJCQljdHJsLT5kZWZlYXR1cmVfUEhQID0gMTsKQEAgLTk3Niw3ICs5NTMsNyBAQAogCQljYXNlIFBDSV9TVUJfSFBDX0lEX0lOVEM6CiAJCQkvKiBUaGlyZCBwYXJ0eSAoNjUwMC83MDAwKSAqLwogCQkJY3RybC0+c2xvdF9zd2l0Y2hfdHlwZSA9IDE7Ci0JCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzMzTUh6OworCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzMzTUh6OwogCQkJY3RybC0+cHVzaF9idXR0b24gPSAwOwogCQkJY3RybC0+cGNpX2NvbmZpZ19zcGFjZSA9IDE7CiAJCQljdHJsLT5kZWZlYXR1cmVfUEhQID0gMTsKQEAgLTk4Nyw3ICs5NjQsNyBAQAogCQkJLyogRmlyc3QgNjYgTWh6IGltcGxlbWVudGF0aW9uICovCiAJCQljdHJsLT5wdXNoX2ZsYWcgPSAxOwogCQkJY3RybC0+c2xvdF9zd2l0Y2hfdHlwZSA9IDE7Ci0JCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzY2TUh6OworCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6OwogCQkJY3RybC0+cHVzaF9idXR0b24gPSAxOwogCQkJY3RybC0+cGNpX2NvbmZpZ19zcGFjZSA9IDE7CiAJCQljdHJsLT5kZWZlYXR1cmVfUEhQID0gMTsKQEAgLTk5OCw3ICs5NzUsNyBAQAogCQkJLyogRmlyc3QgUENJLVggaW1wbGVtZW50YXRpb24sIDEwME1IeiAqLwogCQkJY3RybC0+cHVzaF9mbGFnID0gMTsKIAkJCWN0cmwtPnNsb3Rfc3dpdGNoX3R5cGUgPSAxOwotCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWDsKKwkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWDsKIAkJCWN0cmwtPnB1c2hfYnV0dG9uID0gMTsKIAkJCWN0cmwtPnBjaV9jb25maWdfc3BhY2UgPSAxOwogCQkJY3RybC0+ZGVmZWF0dXJlX1BIUCA9IDE7CkBAIC0xMDE1LDkgKzk5Miw5IEBACiAJY2FzZSBQQ0lfVkVORE9SX0lEX0lOVEVMOgogCQkvKiBDaGVjayBmb3Igc3BlZWQgY2FwYWJpbGl0eSAoMD0zMywgMT02NikgKi8KIAkJaWYgKHN1YnN5c3RlbV9kZXZpY2VpZCAmIDB4MDAwMSkKLQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfNjZNSHo7CisJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHo7CiAJCWVsc2UKLQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfMzNNSHo7CisJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfMzNNSHo7CiAKIAkJLyogQ2hlY2sgZm9yIHB1c2ggYnV0dG9uICovCiAJCWlmIChzdWJzeXN0ZW1fZGV2aWNlaWQgJiAweDAwMDIpCkBAIC0xMDc5LDcgKzEwNTYsNyBAQAogCQkJCQlwZGV2LT5idXMtPm51bWJlcik7CiAKIAlkYmcoIkhvdHBsdWcgY29udHJvbGxlciBjYXBhYmlsaXRpZXM6XG4iKTsKLQlkYmcoIiAgICBzcGVlZF9jYXBhYmlsaXR5ICAgICAgICVkXG4iLCBjdHJsLT5zcGVlZF9jYXBhYmlsaXR5KTsKKwlkYmcoIiAgICBzcGVlZF9jYXBhYmlsaXR5ICAgICAgICVkXG4iLCBidXMtPm1heF9idXNfc3BlZWQpOwogCWRiZygiICAgIHNsb3Rfc3dpdGNoX3R5cGUgICAgICAgJXNcbiIsIGN0cmwtPnNsb3Rfc3dpdGNoX3R5cGUgPwogCQkJCQkic3dpdGNoIHByZXNlbnQiIDogIm5vIHN3aXRjaCIpOwogCWRiZygiICAgIGRlZmVhdHVyZV9QSFAgICAgICAgICAgJXNcbiIsIGN0cmwtPmRlZmVhdHVyZV9QSFAgPwpAQCAtMTE0Miw3ICsxMTE5LDcgQEAKIAl9CiAKIAkvKiBDaGVjayBmb3IgNjZNaHogb3BlcmF0aW9uICovCi0JY3RybC0+c3BlZWQgPSBnZXRfY29udHJvbGxlcl9zcGVlZChjdHJsKTsKKwlidXMtPmN1cl9idXNfc3BlZWQgPSBnZXRfY29udHJvbGxlcl9zcGVlZChjdHJsKTsKIAogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jdHJsLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jdHJsLmMKaW5kZXggMGZmNjg5YS4uZTQzOTA4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY3RybC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2N0cmwuYwpAQCAtMTEzMCwxMiArMTEzMCwxMyBAQAogc3RhdGljIHU4IHNldF9jb250cm9sbGVyX3NwZWVkKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCB1OCBhZGFwdGVyX3NwZWVkLCB1OCBocF9zbG90KQogewogCXN0cnVjdCBzbG90ICpzbG90OworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBjdHJsLT5wY2lfYnVzOwogCXU4IHJlZzsKIAl1OCBzbG90X3Bvd2VyID0gcmVhZGIoY3RybC0+aHBjX3JlZyArIFNMT1RfUE9XRVIpOwogCXUxNiByZWcxNjsKIAl1MzIgbGVkcyA9IHJlYWRsKGN0cmwtPmhwY19yZWcgKyBMRURfQ09OVFJPTCk7CiAKLQlpZiAoY3RybC0+c3BlZWQgPT0gYWRhcHRlcl9zcGVlZCkKKwlpZiAoYnVzLT5jdXJfYnVzX3NwZWVkID09IGFkYXB0ZXJfc3BlZWQpCiAJCXJldHVybiAwOwogCiAJLyogV2UgZG9uJ3QgYWxsb3cgZnJlcS9tb2RlIGNoYW5nZXMgaWYgd2UgZmluZCBhbm90aGVyIGFkYXB0ZXIgcnVubmluZwpAQCAtMTE1Miw3ICsxMTUzLDcgQEAKIAkJICogbG93ZXIgc3BlZWQvbW9kZSwgd2UgYWxsb3cgdGhlIG5ldyBhZGFwdGVyIHRvIGZ1bmN0aW9uIGF0CiAJCSAqIHRoaXMgcmF0ZSBpZiBzdXBwb3J0ZWQKIAkJICovCi0JCWlmIChjdHJsLT5zcGVlZCA8IGFkYXB0ZXJfc3BlZWQpCisJCWlmIChidXMtPmN1cl9idXNfc3BlZWQgPCBhZGFwdGVyX3NwZWVkKQogCQkJcmV0dXJuIDA7CiAKIAkJcmV0dXJuIDE7CkBAIC0xMTYxLDIwICsxMTYyLDIwIEBACiAJLyogSWYgdGhlIGNvbnRyb2xsZXIgZG9lc24ndCBzdXBwb3J0IGZyZXEvbW9kZSBjaGFuZ2VzIGFuZCB0aGUKIAkgKiBjb250cm9sbGVyIGlzIHJ1bm5pbmcgYXQgYSBoaWdoZXIgbW9kZSwgd2UgYmFpbAogCSAqLwotCWlmICgoY3RybC0+c3BlZWQgPiBhZGFwdGVyX3NwZWVkKSAmJiAoIWN0cmwtPnBjaXhfc3BlZWRfY2FwYWJpbGl0eSkpCisJaWYgKChidXMtPmN1cl9idXNfc3BlZWQgPiBhZGFwdGVyX3NwZWVkKSAmJiAoIWN0cmwtPnBjaXhfc3BlZWRfY2FwYWJpbGl0eSkpCiAJCXJldHVybiAxOwogCiAJLyogQnV0IHdlIGFsbG93IHRoZSBhZGFwdGVyIHRvIHJ1biBhdCBhIGxvd2VyIHJhdGUgaWYgcG9zc2libGUgKi8KLQlpZiAoKGN0cmwtPnNwZWVkIDwgYWRhcHRlcl9zcGVlZCkgJiYgKCFjdHJsLT5wY2l4X3NwZWVkX2NhcGFiaWxpdHkpKQorCWlmICgoYnVzLT5jdXJfYnVzX3NwZWVkIDwgYWRhcHRlcl9zcGVlZCkgJiYgKCFjdHJsLT5wY2l4X3NwZWVkX2NhcGFiaWxpdHkpKQogCQlyZXR1cm4gMDsKIAogCS8qIFdlIHRyeSB0byBzZXQgdGhlIG1heCBzcGVlZCBzdXBwb3J0ZWQgYnkgYm90aCB0aGUgYWRhcHRlciBhbmQKIAkgKiBjb250cm9sbGVyCiAJICovCi0JaWYgKGN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPCBhZGFwdGVyX3NwZWVkKSB7Ci0JCWlmIChjdHJsLT5zcGVlZCA9PSBjdHJsLT5zcGVlZF9jYXBhYmlsaXR5KQorCWlmIChidXMtPm1heF9idXNfc3BlZWQgPCBhZGFwdGVyX3NwZWVkKSB7CisJCWlmIChidXMtPmN1cl9idXNfc3BlZWQgPT0gYnVzLT5tYXhfYnVzX3NwZWVkKQogCQkJcmV0dXJuIDA7Ci0JCWFkYXB0ZXJfc3BlZWQgPSBjdHJsLT5zcGVlZF9jYXBhYmlsaXR5OworCQlhZGFwdGVyX3NwZWVkID0gYnVzLT5tYXhfYnVzX3NwZWVkOwogCX0KIAogCXdyaXRlbCgweDBMLCBjdHJsLT5ocGNfcmVnICsgTEVEX0NPTlRST0wpOwpAQCAtMTIyOSw4ICsxMjMwLDggQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoY3RybC0+cGNpX2RldiwgMHg0MywgcmVnKTsKIAogCS8qIE9ubHkgaWYgbW9kZSBjaGFuZ2UuLi4qLwotCWlmICgoKGN0cmwtPnNwZWVkID09IFBDSV9TUEVFRF82Nk1IeikgJiYgKGFkYXB0ZXJfc3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6X1BDSVgpKSB8fAotCQkoKGN0cmwtPnNwZWVkID09IFBDSV9TUEVFRF82Nk1Iel9QQ0lYKSAmJiAoYWRhcHRlcl9zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHopKSkgCisJaWYgKCgoYnVzLT5jdXJfYnVzX3NwZWVkID09IFBDSV9TUEVFRF82Nk1IeikgJiYgKGFkYXB0ZXJfc3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6X1BDSVgpKSB8fAorCQkoKGJ1cy0+Y3VyX2J1c19zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHpfUENJWCkgJiYgKGFkYXB0ZXJfc3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6KSkpIAogCQkJc2V0X1NPR08oY3RybCk7CiAKIAl3YWl0X2Zvcl9jdHJsX2lycShjdHJsKTsKQEAgLTEyNDMsNyArMTI0NCw3IEBACiAJc2V0X1NPR08oY3RybCk7CiAJd2FpdF9mb3JfY3RybF9pcnEoY3RybCk7CiAKLQljdHJsLT5zcGVlZCA9IGFkYXB0ZXJfc3BlZWQ7CisJYnVzLT5jdXJfYnVzX3NwZWVkID0gYWRhcHRlcl9zcGVlZDsKIAlzbG90ID0gY3BxaHBfZmluZF9zbG90KGN0cmwsIGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpOwogCiAJaW5mbygiU3VjY2Vzc2Z1bGx5IGNoYW5nZWQgZnJlcXVlbmN5L21vZGUgZm9yIGFkYXB0ZXIgaW4gc2xvdCAlZFxuIiwKQEAgLTEyNjksNiArMTI3MCw3IEBACiAgKi8KIHN0YXRpYyB1MzIgYm9hcmRfcmVwbGFjZWQoc3RydWN0IHBjaV9mdW5jICpmdW5jLCBzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKIHsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gY3RybC0+cGNpX2J1czsKIAl1OCBocF9zbG90OwogCXU4IHRlbXBfYnl0ZTsKIAl1OCBhZGFwdGVyX3NwZWVkOwpAQCAtMTMwOSw3ICsxMzExLDcgQEAKIAkJd2FpdF9mb3JfY3RybF9pcnEgKGN0cmwpOwogCiAJCWFkYXB0ZXJfc3BlZWQgPSBnZXRfYWRhcHRlcl9zcGVlZChjdHJsLCBocF9zbG90KTsKLQkJaWYgKGN0cmwtPnNwZWVkICE9IGFkYXB0ZXJfc3BlZWQpCisJCWlmIChidXMtPmN1cl9idXNfc3BlZWQgIT0gYWRhcHRlcl9zcGVlZCkKIAkJCWlmIChzZXRfY29udHJvbGxlcl9zcGVlZChjdHJsLCBhZGFwdGVyX3NwZWVkLCBocF9zbG90KSkKIAkJCQlyYyA9IFdST05HX0JVU19GUkVRVUVOQ1k7CiAKQEAgLTE0MjYsNiArMTQyOCw3IEBACiAJdTMyIHRlbXBfcmVnaXN0ZXIgPSAweEZGRkZGRkZGOwogCXUzMiByYyA9IDA7CiAJc3RydWN0IHBjaV9mdW5jICpuZXdfc2xvdCA9IE5VTEw7CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGN0cmwtPnBjaV9idXM7CiAJc3RydWN0IHNsb3QgKnBfc2xvdDsKIAlzdHJ1Y3QgcmVzb3VyY2VfbGlzdHMgcmVzX2xpc3RzOwogCkBAIC0xNDU2LDcgKzE0NTksNyBAQAogCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKIAogCWFkYXB0ZXJfc3BlZWQgPSBnZXRfYWRhcHRlcl9zcGVlZChjdHJsLCBocF9zbG90KTsKLQlpZiAoY3RybC0+c3BlZWQgIT0gYWRhcHRlcl9zcGVlZCkKKwlpZiAoYnVzLT5jdXJfYnVzX3NwZWVkICE9IGFkYXB0ZXJfc3BlZWQpCiAJCWlmIChzZXRfY29udHJvbGxlcl9zcGVlZChjdHJsLCBhZGFwdGVyX3NwZWVkLCBocF9zbG90KSkKIAkJCXJjID0gV1JPTkdfQlVTX0ZSRVFVRU5DWTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfY29yZS5jCmluZGV4IDc0ODVmZmQuLmQ5MzRkZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9jb3JlLmMKQEAgLTM5NSw4OSArMzk1LDQwIEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGdldF9tYXhfYnVzX3NwZWVkKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKK3N0YXRpYyBpbnQgZ2V0X21heF9idXNfc3BlZWQoc3RydWN0IHNsb3QgKnNsb3QpCiB7Ci0JaW50IHJjID0gLUVOT0RFVjsKLQlzdHJ1Y3Qgc2xvdCAqcHNsb3Q7CisJaW50IHJjOwogCXU4IG1vZGUgPSAwOworCWVudW0gcGNpX2J1c19zcGVlZCBzcGVlZDsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gc2xvdC0+aG90cGx1Z19zbG90LT5wY2lfc2xvdC0+YnVzOwogCi0JZGVidWcoIiVzIC0gRW50cnkgaG90cGx1Z19zbG90WyVwXSBwdmFsdWVbJXBdXG4iLCBfX2Z1bmNfXywKLQkJaG90cGx1Z19zbG90LCB2YWx1ZSk7CisJZGVidWcoIiVzIC0gRW50cnkgc2xvdFslcF1cbiIsIF9fZnVuY19fLCBzbG90KTsKIAogCWlibXBocF9sb2NrX29wZXJhdGlvbnMoKTsKKwltb2RlID0gc2xvdC0+c3VwcG9ydGVkX2J1c19tb2RlOworCXNwZWVkID0gc2xvdC0+c3VwcG9ydGVkX3NwZWVkOyAKKwlpYm1waHBfdW5sb2NrX29wZXJhdGlvbnMoKTsKIAotCWlmIChob3RwbHVnX3Nsb3QpIHsKLQkJcHNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7Ci0JCWlmIChwc2xvdCkgewotCQkJcmMgPSAwOwotCQkJbW9kZSA9IHBzbG90LT5zdXBwb3J0ZWRfYnVzX21vZGU7Ci0JCQkqdmFsdWUgPSBwc2xvdC0+c3VwcG9ydGVkX3NwZWVkOyAKLQkJCXN3aXRjaCAoKnZhbHVlKSB7Ci0JCQljYXNlIEJVU19TUEVFRF8zMzoKLQkJCQlicmVhazsKLQkJCWNhc2UgQlVTX1NQRUVEXzY2OgotCQkJCWlmIChtb2RlID09IEJVU19NT0RFX1BDSVgpIAotCQkJCQkqdmFsdWUgKz0gMHgwMTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQlVTX1NQRUVEXzEwMDoKLQkJCWNhc2UgQlVTX1NQRUVEXzEzMzoKLQkJCQkqdmFsdWUgPSBwc2xvdC0+c3VwcG9ydGVkX3NwZWVkICsgMHgwMTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJLyogTm90ZSAod2lsbCBuZWVkIHRvIGNoYW5nZSk6IHRoZXJlIHdvdWxkIGJlIHNvb24gMjU2LCA1MTIgYWxzbyAqLwotCQkJCXJjID0gLUVOT0RFVjsKLQkJCX0KLQkJfQorCXN3aXRjaCAoc3BlZWQpIHsKKwljYXNlIEJVU19TUEVFRF8zMzoKKwkJYnJlYWs7CisJY2FzZSBCVVNfU1BFRURfNjY6CisJCWlmIChtb2RlID09IEJVU19NT0RFX1BDSVgpIAorCQkJc3BlZWQgKz0gMHgwMTsKKwkJYnJlYWs7CisJY2FzZSBCVVNfU1BFRURfMTAwOgorCWNhc2UgQlVTX1NQRUVEXzEzMzoKKwkJc3BlZWQgKz0gMHgwMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogTm90ZSAod2lsbCBuZWVkIHRvIGNoYW5nZSk6IHRoZXJlIHdvdWxkIGJlIHNvb24gMjU2LCA1MTIgYWxzbyAqLworCQlyYyA9IC1FTk9ERVY7CiAJfQogCi0JaWJtcGhwX3VubG9ja19vcGVyYXRpb25zKCk7Ci0JZGVidWcoIiVzIC0gRXhpdCByY1slZF0gdmFsdWVbJXhdXG4iLCBfX2Z1bmNfXywgcmMsICp2YWx1ZSk7Ci0JcmV0dXJuIHJjOwotfQorCWlmICghcmMpCisJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IHNwZWVkOwogCi1zdGF0aWMgaW50IGdldF9jdXJfYnVzX3NwZWVkKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlpbnQgcmMgPSAtRU5PREVWOwotCXN0cnVjdCBzbG90ICpwc2xvdDsKLQl1OCBtb2RlID0gMDsKLQotCWRlYnVnKCIlcyAtIEVudHJ5IGhvdHBsdWdfc2xvdFslcF0gcHZhbHVlWyVwXVxuIiwgX19mdW5jX18sCi0JCWhvdHBsdWdfc2xvdCwgdmFsdWUpOwotCi0JaWJtcGhwX2xvY2tfb3BlcmF0aW9ucygpOwotCi0JaWYgKGhvdHBsdWdfc2xvdCkgewotCQlwc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKLQkJaWYgKHBzbG90KSB7Ci0JCQlyYyA9IGdldF9jdXJfYnVzX2luZm8oJnBzbG90KTsKLQkJCWlmICghcmMpIHsKLQkJCQltb2RlID0gcHNsb3QtPmJ1c19vbi0+Y3VycmVudF9idXNfbW9kZTsKLQkJCQkqdmFsdWUgPSBwc2xvdC0+YnVzX29uLT5jdXJyZW50X3NwZWVkOwotCQkJCXN3aXRjaCAoKnZhbHVlKSB7Ci0JCQkJY2FzZSBCVVNfU1BFRURfMzM6Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgQlVTX1NQRUVEXzY2OgotCQkJCQlpZiAobW9kZSA9PSBCVVNfTU9ERV9QQ0lYKSAKLQkJCQkJCSp2YWx1ZSArPSAweDAxOwotCQkJCQllbHNlIGlmIChtb2RlID09IEJVU19NT0RFX1BDSSkKLQkJCQkJCTsKLQkJCQkJZWxzZQotCQkJCQkJKnZhbHVlID0gUENJX1NQRUVEX1VOS05PV047Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgQlVTX1NQRUVEXzEwMDoKLQkJCQljYXNlIEJVU19TUEVFRF8xMzM6Ci0JCQkJCSp2YWx1ZSArPSAweDAxOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQkvKiBOb3RlIG9mIGNoYW5nZTogdGhlcmUgd291bGQgYWxzbyBiZSAyNTYsIDUxMiBzb29uICovCi0JCQkJCXJjID0gLUVOT0RFVjsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpYm1waHBfdW5sb2NrX29wZXJhdGlvbnMoKTsKLQlkZWJ1ZygiJXMgLSBFeGl0IHJjWyVkXSB2YWx1ZVsleF1cbiIsIF9fZnVuY19fLCByYywgKnZhbHVlKTsKKwlkZWJ1ZygiJXMgLSBFeGl0IHJjWyVkXSBzcGVlZFsleF1cbiIsIF9fZnVuY19fLCByYywgc3BlZWQpOwogCXJldHVybiByYzsKIH0KIApAQCAtNTcyLDYgKzUyMyw3IEBACiAJCWlmIChzbG90X2N1ci0+YnVzX29uLT5jdXJyZW50X3NwZWVkID09IDB4RkYpIAogCQkJaWYgKGdldF9jdXJfYnVzX2luZm8oJnNsb3RfY3VyKSkgCiAJCQkJcmV0dXJuIC0xOworCQlnZXRfbWF4X2J1c19zcGVlZChzbG90X2N1cik7CiAKIAkJaWYgKHNsb3RfY3VyLT5jdHJsLT5vcHRpb25zID09IDB4RkYpCiAJCQlpZiAoZ2V0X2hwY19vcHRpb25zKHNsb3RfY3VyLCAmc2xvdF9jdXItPmN0cmwtPm9wdGlvbnMpKQpAQCAtNjU1LDYgKzYwNyw3IEBACiBpbnQgaWJtcGhwX3VwZGF0ZV9zbG90X2luZm8oc3RydWN0IHNsb3QgKnNsb3RfY3VyKQogewogCXN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gc2xvdF9jdXItPmhvdHBsdWdfc2xvdC0+cGNpX3Nsb3QtPmJ1czsKIAlpbnQgcmM7CiAJdTggYnVzX3NwZWVkOwogCXU4IG1vZGU7CkBAIC03MDAsOCArNjUzLDcgQEAKIAkJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwogCX0KIAotCWluZm8tPmN1cl9idXNfc3BlZWQgPSBidXNfc3BlZWQ7Ci0JaW5mby0+bWF4X2J1c19zcGVlZCA9IHNsb3RfY3VyLT5ob3RwbHVnX3Nsb3QtPmluZm8tPm1heF9idXNfc3BlZWQ7CisJYnVzLT5jdXJfYnVzX3NwZWVkID0gYnVzX3NwZWVkOwogCS8vIFRvIGRvOiBidXNfbmFtZXMgCiAJCiAJcmMgPSBwY2lfaHBfY2hhbmdlX3Nsb3RfaW5mbyhzbG90X2N1ci0+aG90cGx1Z19zbG90LCBpbmZvKTsKQEAgLTEzMjYsOCArMTI3OCw2IEBACiAJLmdldF9hdHRlbnRpb25fc3RhdHVzID0JCWdldF9hdHRlbnRpb25fc3RhdHVzLAogCS5nZXRfbGF0Y2hfc3RhdHVzID0JCWdldF9sYXRjaF9zdGF0dXMsCiAJLmdldF9hZGFwdGVyX3N0YXR1cyA9CQlnZXRfYWRhcHRlcl9wcmVzZW50LAotCS5nZXRfbWF4X2J1c19zcGVlZCA9CQlnZXRfbWF4X2J1c19zcGVlZCwKLQkuZ2V0X2N1cl9idXNfc3BlZWQgPQkJZ2V0X2N1cl9idXNfc3BlZWQsCiAvKgkuZ2V0X21heF9hZGFwdGVyX3NwZWVkID0JZ2V0X21heF9hZGFwdGVyX3NwZWVkLAogCS5nZXRfYnVzX25hbWVfc3RhdHVzID0JCWdldF9idXNfbmFtZSwKICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMKaW5kZXggYzFhYmFjOC4uNWJlY2JkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2ViZGEuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAKIGludCBfX2luaXQgaWJtcGhwX2FjY2Vzc19lYmRhICh2b2lkKQogewotCXU4IGZvcm1hdCwgbnVtX2N0bHJzLCByaW9fY29tcGxldGUsIGhzX2NvbXBsZXRlOworCXU4IGZvcm1hdCwgbnVtX2N0bHJzLCByaW9fY29tcGxldGUsIGhzX2NvbXBsZXRlLCBlYmRhX3N6OwogCXUxNiBlYmRhX3NlZywgbnVtX2VudHJpZXMsIG5leHRfb2Zmc2V0LCBvZmZzZXQsIGJsa19pZCwgc3ViX2FkZHIsIHJlLCByY19pZCwgcmVfaWQsIGJhc2U7CiAJaW50IHJjID0gMDsKIApAQCAtMjYwLDcgKzI2MCwxNiBAQAogCWlvdW5tYXAgKGlvX21lbSk7CiAJZGVidWcgKCJyZXR1cm5lZCBlYmRhIHNlZ21lbnQ6ICV4XG4iLCBlYmRhX3NlZyk7CiAJCi0JaW9fbWVtID0gaW9yZW1hcChlYmRhX3NlZzw8NCwgMTAyNCk7CisJaW9fbWVtID0gaW9yZW1hcChlYmRhX3NlZzw8NCwgMSk7CisJaWYgKCFpb19tZW0pCisJCXJldHVybiAtRU5PTUVNOworCWViZGFfc3ogPSByZWFkYihpb19tZW0pOworCWlvdW5tYXAoaW9fbWVtKTsKKwlkZWJ1ZygiZWJkYSBzaXplOiAlZChLaUIpXG4iLCBlYmRhX3N6KTsKKwlpZiAoZWJkYV9zeiA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlvX21lbSA9IGlvcmVtYXAoZWJkYV9zZWc8PDQsIChlYmRhX3N6ICogMTAyNCkpOwogCWlmICghaW9fbWVtICkKIAkJcmV0dXJuIC1FTk9NRU07CiAJbmV4dF9vZmZzZXQgPSAweDE4MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2hwYy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfaHBjLmMKaW5kZXggYzcwODRmMC4uMWFhZjNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfaHBjLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfaHBjLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlICJpYm1waHAuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Z19jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYwppbmRleCAzODE4M2E1Li43MjhiMTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYwpAQCAtNjQsMzIgKzY0LDYgQEAKIHN0YXRpYyBMSVNUX0hFQUQocGNpX2hvdHBsdWdfc2xvdF9saXN0KTsKIHN0YXRpYyBERUZJTkVfTVVURVgocGNpX2hwX211dGV4KTsKIAotLyogdGhlc2Ugc3RyaW5ncyBtYXRjaCB1cCB3aXRoIHRoZSB2YWx1ZXMgaW4gcGNpX2J1c19zcGVlZCAqLwotc3RhdGljIGNoYXIgKnBjaV9idXNfc3BlZWRfc3RyaW5nc1tdID0gewotCSIzMyBNSHogUENJIiwJCS8qIDB4MDAgKi8KLQkiNjYgTUh6IFBDSSIsCQkvKiAweDAxICovCi0JIjY2IE1IeiBQQ0ktWCIsCQkvKiAweDAyICovCi0JIjEwMCBNSHogUENJLVgiLAkvKiAweDAzICovCi0JIjEzMyBNSHogUENJLVgiLAkvKiAweDA0ICovCi0JTlVMTCwJCQkvKiAweDA1ICovCi0JTlVMTCwJCQkvKiAweDA2ICovCi0JTlVMTCwJCQkvKiAweDA3ICovCi0JTlVMTCwJCQkvKiAweDA4ICovCi0JIjY2IE1IeiBQQ0ktWCAyNjYiLAkvKiAweDA5ICovCi0JIjEwMCBNSHogUENJLVggMjY2IiwJLyogMHgwYSAqLwotCSIxMzMgTUh6IFBDSS1YIDI2NiIsCS8qIDB4MGIgKi8KLQlOVUxMLAkJCS8qIDB4MGMgKi8KLQlOVUxMLAkJCS8qIDB4MGQgKi8KLQlOVUxMLAkJCS8qIDB4MGUgKi8KLQlOVUxMLAkJCS8qIDB4MGYgKi8KLQlOVUxMLAkJCS8qIDB4MTAgKi8KLQkiNjYgTUh6IFBDSS1YIDUzMyIsCS8qIDB4MTEgKi8KLQkiMTAwIE1IeiBQQ0ktWCA1MzMiLAkvKiAweDEyICovCi0JIjEzMyBNSHogUENJLVggNTMzIiwJLyogMHgxMyAqLwotCSIyLjUgR1QvcyBQQ0llIiwJLyogMHgxNCAqLwotCSI1LjAgR1QvcyBQQ0llIiwJLyogMHgxNSAqLwotfTsKLQogI2lmZGVmIENPTkZJR19IT1RQTFVHX1BDSV9DUENJCiBleHRlcm4gaW50IGNwY2lfaG90cGx1Z19pbml0KGludCBkZWJ1Zyk7CiBleHRlcm4gdm9pZCBjcGNpX2hvdHBsdWdfZXhpdCh2b2lkKTsKQEAgLTExOCw4ICs5Miw2IEBACiBHRVRfU1RBVFVTKGF0dGVudGlvbl9zdGF0dXMsIHU4KQogR0VUX1NUQVRVUyhsYXRjaF9zdGF0dXMsIHU4KQogR0VUX1NUQVRVUyhhZGFwdGVyX3N0YXR1cywgdTgpCi1HRVRfU1RBVFVTKG1heF9idXNfc3BlZWQsIGVudW0gcGNpX2J1c19zcGVlZCkKLUdFVF9TVEFUVVMoY3VyX2J1c19zcGVlZCwgZW51bSBwY2lfYnVzX3NwZWVkKQogCiBzdGF0aWMgc3NpemVfdCBwb3dlcl9yZWFkX2ZpbGUoc3RydWN0IHBjaV9zbG90ICpzbG90LCBjaGFyICpidWYpCiB7CkBAIC0yNjMsNjAgKzIzNSw2IEBACiAJLnNob3cgPSBwcmVzZW5jZV9yZWFkX2ZpbGUsCiB9OwogCi1zdGF0aWMgY2hhciAqdW5rbm93bl9zcGVlZCA9ICJVbmtub3duIGJ1cyBzcGVlZCI7Ci0KLXN0YXRpYyBzc2l6ZV90IG1heF9idXNfc3BlZWRfcmVhZF9maWxlKHN0cnVjdCBwY2lfc2xvdCAqc2xvdCwgY2hhciAqYnVmKQotewotCWNoYXIgKnNwZWVkX3N0cmluZzsKLQlpbnQgcmV0dmFsOwotCWVudW0gcGNpX2J1c19zcGVlZCB2YWx1ZTsKLQkKLQlyZXR2YWwgPSBnZXRfbWF4X2J1c19zcGVlZChzbG90LT5ob3RwbHVnLCAmdmFsdWUpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXhpdDsKLQotCWlmICh2YWx1ZSA9PSBQQ0lfU1BFRURfVU5LTk9XTikKLQkJc3BlZWRfc3RyaW5nID0gdW5rbm93bl9zcGVlZDsKLQllbHNlCi0JCXNwZWVkX3N0cmluZyA9IHBjaV9idXNfc3BlZWRfc3RyaW5nc1t2YWx1ZV07Ci0JCi0JcmV0dmFsID0gc3ByaW50ZiAoYnVmLCAiJXNcbiIsIHNwZWVkX3N0cmluZyk7Ci0KLWV4aXQ6Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfc2xvdF9hdHRyaWJ1dGUgaG90cGx1Z19zbG90X2F0dHJfbWF4X2J1c19zcGVlZCA9IHsKLQkuYXR0ciA9IHsubmFtZSA9ICJtYXhfYnVzX3NwZWVkIiwgLm1vZGUgPSBTX0lGUkVHIHwgU19JUlVHT30sCi0JLnNob3cgPSBtYXhfYnVzX3NwZWVkX3JlYWRfZmlsZSwKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IGN1cl9idXNfc3BlZWRfcmVhZF9maWxlKHN0cnVjdCBwY2lfc2xvdCAqc2xvdCwgY2hhciAqYnVmKQotewotCWNoYXIgKnNwZWVkX3N0cmluZzsKLQlpbnQgcmV0dmFsOwotCWVudW0gcGNpX2J1c19zcGVlZCB2YWx1ZTsKLQotCXJldHZhbCA9IGdldF9jdXJfYnVzX3NwZWVkKHNsb3QtPmhvdHBsdWcsICZ2YWx1ZSk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0OwotCi0JaWYgKHZhbHVlID09IFBDSV9TUEVFRF9VTktOT1dOKQotCQlzcGVlZF9zdHJpbmcgPSB1bmtub3duX3NwZWVkOwotCWVsc2UKLQkJc3BlZWRfc3RyaW5nID0gcGNpX2J1c19zcGVlZF9zdHJpbmdzW3ZhbHVlXTsKLQkKLQlyZXR2YWwgPSBzcHJpbnRmIChidWYsICIlc1xuIiwgc3BlZWRfc3RyaW5nKTsKLQotZXhpdDoKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgc3RydWN0IHBjaV9zbG90X2F0dHJpYnV0ZSBob3RwbHVnX3Nsb3RfYXR0cl9jdXJfYnVzX3NwZWVkID0gewotCS5hdHRyID0gey5uYW1lID0gImN1cl9idXNfc3BlZWQiLCAubW9kZSA9IFNfSUZSRUcgfCBTX0lSVUdPfSwKLQkuc2hvdyA9IGN1cl9idXNfc3BlZWRfcmVhZF9maWxlLAotfTsKLQogc3RhdGljIHNzaXplX3QgdGVzdF93cml0ZV9maWxlKHN0cnVjdCBwY2lfc2xvdCAqcGNpX3Nsb3QsIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJc2l6ZV90IGNvdW50KQogewpAQCAtMzkxLDI2ICszMDksNiBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgaGFzX21heF9idXNfc3BlZWRfZmlsZShzdHJ1Y3QgcGNpX3Nsb3QgKnBjaV9zbG90KQotewotCXN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QgPSBwY2lfc2xvdC0+aG90cGx1ZzsKLQlpZiAoKCFzbG90KSB8fCAoIXNsb3QtPm9wcykpCi0JCXJldHVybiBmYWxzZTsKLQlpZiAoc2xvdC0+b3BzLT5nZXRfbWF4X2J1c19zcGVlZCkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBoYXNfY3VyX2J1c19zcGVlZF9maWxlKHN0cnVjdCBwY2lfc2xvdCAqcGNpX3Nsb3QpCi17Ci0Jc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCA9IHBjaV9zbG90LT5ob3RwbHVnOwotCWlmICgoIXNsb3QpIHx8ICghc2xvdC0+b3BzKSkKLQkJcmV0dXJuIGZhbHNlOwotCWlmIChzbG90LT5vcHMtPmdldF9jdXJfYnVzX3NwZWVkKQotCQlyZXR1cm4gdHJ1ZTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBib29sIGhhc190ZXN0X2ZpbGUoc3RydWN0IHBjaV9zbG90ICpwY2lfc2xvdCkKIHsKIAlzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90ID0gcGNpX3Nsb3QtPmhvdHBsdWc7CkBAIC00NTYsMjAgKzM1NCw2IEBACiAJCQlnb3RvIGV4aXRfYWRhcHRlcjsKIAl9CiAKLQlpZiAoaGFzX21heF9idXNfc3BlZWRfZmlsZShzbG90KSkgewotCQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfZmlsZSgmc2xvdC0+a29iaiwKLQkJCQkJJmhvdHBsdWdfc2xvdF9hdHRyX21heF9idXNfc3BlZWQuYXR0cik7Ci0JCWlmIChyZXR2YWwpCi0JCQlnb3RvIGV4aXRfbWF4X3NwZWVkOwotCX0KLQotCWlmIChoYXNfY3VyX2J1c19zcGVlZF9maWxlKHNsb3QpKSB7Ci0JCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLAotCQkJCQkmaG90cGx1Z19zbG90X2F0dHJfY3VyX2J1c19zcGVlZC5hdHRyKTsKLQkJaWYgKHJldHZhbCkKLQkJCWdvdG8gZXhpdF9jdXJfc3BlZWQ7Ci0JfQotCiAJaWYgKGhhc190ZXN0X2ZpbGUoc2xvdCkpIHsKIAkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnNsb3QtPmtvYmosCiAJCQkJCSAgICZob3RwbHVnX3Nsb3RfYXR0cl90ZXN0LmF0dHIpOwpAQCAtNDgwLDE0ICszNjQsNiBAQAogCWdvdG8gZXhpdDsKIAogZXhpdF90ZXN0OgotCWlmIChoYXNfY3VyX2J1c19zcGVlZF9maWxlKHNsb3QpKQotCQlzeXNmc19yZW1vdmVfZmlsZSgmc2xvdC0+a29iaiwKLQkJCQkgICZob3RwbHVnX3Nsb3RfYXR0cl9jdXJfYnVzX3NwZWVkLmF0dHIpOwotZXhpdF9jdXJfc3BlZWQ6Ci0JaWYgKGhhc19tYXhfYnVzX3NwZWVkX2ZpbGUoc2xvdCkpCi0JCXN5c2ZzX3JlbW92ZV9maWxlKCZzbG90LT5rb2JqLAotCQkJCSAgJmhvdHBsdWdfc2xvdF9hdHRyX21heF9idXNfc3BlZWQuYXR0cik7Ci1leGl0X21heF9zcGVlZDoKIAlpZiAoaGFzX2FkYXB0ZXJfZmlsZShzbG90KSkKIAkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnNsb3QtPmtvYmosCiAJCQkJICAmaG90cGx1Z19zbG90X2F0dHJfcHJlc2VuY2UuYXR0cik7CkBAIC01MjMsMTQgKzM5OSw2IEBACiAJCXN5c2ZzX3JlbW92ZV9maWxlKCZzbG90LT5rb2JqLAogCQkJCSAgJmhvdHBsdWdfc2xvdF9hdHRyX3ByZXNlbmNlLmF0dHIpOwogCi0JaWYgKGhhc19tYXhfYnVzX3NwZWVkX2ZpbGUoc2xvdCkpCi0JCXN5c2ZzX3JlbW92ZV9maWxlKCZzbG90LT5rb2JqLAotCQkJCSAgJmhvdHBsdWdfc2xvdF9hdHRyX21heF9idXNfc3BlZWQuYXR0cik7Ci0KLQlpZiAoaGFzX2N1cl9idXNfc3BlZWRfZmlsZShzbG90KSkKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnNsb3QtPmtvYmosCi0JCQkJICAmaG90cGx1Z19zbG90X2F0dHJfY3VyX2J1c19zcGVlZC5hdHRyKTsKLQogCWlmIChoYXNfdGVzdF9maWxlKHNsb3QpKQogCQlzeXNmc19yZW1vdmVfZmlsZSgmc2xvdC0+a29iaiwgJmhvdHBsdWdfc2xvdF9hdHRyX3Rlc3QuYXR0cik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYwppbmRleCA1Njc0YjIwLi45MjBmODIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCkBAIC02OSw4ICs2OSw2IEBACiBzdGF0aWMgaW50IGdldF9hdHRlbnRpb25fc3RhdHVzCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOwogc3RhdGljIGludCBnZXRfbGF0Y2hfc3RhdHVzCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOwogc3RhdGljIGludCBnZXRfYWRhcHRlcl9zdGF0dXMJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7Ci1zdGF0aWMgaW50IGdldF9tYXhfYnVzX3NwZWVkCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKTsKLXN0YXRpYyBpbnQgZ2V0X2N1cl9idXNfc3BlZWQJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpOwogCiAvKioKICAqIHJlbGVhc2Vfc2xvdCAtIGZyZWUgdXAgdGhlIG1lbW9yeSB1c2VkIGJ5IGEgc2xvdApAQCAtMTEzLDggKzExMSw2IEBACiAJb3BzLT5kaXNhYmxlX3Nsb3QgPSBkaXNhYmxlX3Nsb3Q7CiAJb3BzLT5nZXRfcG93ZXJfc3RhdHVzID0gZ2V0X3Bvd2VyX3N0YXR1czsKIAlvcHMtPmdldF9hZGFwdGVyX3N0YXR1cyA9IGdldF9hZGFwdGVyX3N0YXR1czsKLQlvcHMtPmdldF9tYXhfYnVzX3NwZWVkID0gZ2V0X21heF9idXNfc3BlZWQ7Ci0Jb3BzLT5nZXRfY3VyX2J1c19zcGVlZCA9IGdldF9jdXJfYnVzX3NwZWVkOwogCWlmIChNUkxfU0VOUyhjdHJsKSkKIAkJb3BzLT5nZXRfbGF0Y2hfc3RhdHVzID0gZ2V0X2xhdGNoX3N0YXR1czsKIAlpZiAoQVRUTl9MRUQoY3RybCkpIHsKQEAgLTIyNywyNyArMjIzLDYgQEAKIAlyZXR1cm4gcGNpZWhwX2dldF9hZGFwdGVyX3N0YXR1cyhzbG90LCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X21heF9idXNfc3BlZWQoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LAotCQkJCWVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7Ci0KLQljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKLQkJIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwotCi0JcmV0dXJuIHBjaWVocF9nZXRfbWF4X2xpbmtfc3BlZWQoc2xvdCwgdmFsdWUpOwotfQotCi1zdGF0aWMgaW50IGdldF9jdXJfYnVzX3NwZWVkKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKLQotCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlczogcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAotCQkgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7Ci0KLQlyZXR1cm4gcGNpZWhwX2dldF9jdXJfbGlua19zcGVlZChzbG90LCB2YWx1ZSk7Ci19Ci0KIHN0YXRpYyBpbnQgcGNpZWhwX3Byb2JlKHN0cnVjdCBwY2llX2RldmljZSAqZGV2KQogewogCWludCByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYwppbmRleCBkNmFjMWIyLi45YTdmMjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCkBAIC0zNDEsNiArMzQxLDcgQEAKIAkJcF9zbG90LT5zdGF0ZSA9IFBPV0VST05fU1RBVEU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCWtmcmVlKGluZm8pOwogCQlnb3RvIG91dDsKIAl9CiAJcXVldWVfd29yayhwY2llaHBfd3EsICZpbmZvLT53b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKaW5kZXggMTAwNDBkNS4uNDBiNDhmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKQEAgLTQ5Miw2ICs0OTIsNyBAQAogCXUxNiBzbG90X2NtZDsKIAl1MTYgY21kX21hc2s7CiAJdTE2IHNsb3Rfc3RhdHVzOworCXUxNiBsbmtfc3RhdHVzOwogCWludCByZXR2YWwgPSAwOwogCiAJLyogQ2xlYXIgc3RpY2t5IHBvd2VyLWZhdWx0IGJpdCBmcm9tIHByZXZpb3VzIHBvd2VyIGZhaWx1cmVzICovCkBAIC01MjMsNiArNTI0LDE0IEBACiAJY3RybF9kYmcoY3RybCwgIiVzOiBTTE9UQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsIF9fZnVuY19fLAogCQkgcGNpX3BjaWVfY2FwKGN0cmwtPnBjaWUtPnBvcnQpICsgUENJX0VYUF9TTFRDVEwsIHNsb3RfY21kKTsKIAorCXJldHZhbCA9IHBjaWVocF9yZWFkdyhjdHJsLCBQQ0lfRVhQX0xOS1NUQSwgJmxua19zdGF0dXMpOworCWlmIChyZXR2YWwpIHsKKwkJY3RybF9lcnIoY3RybCwgIiVzOiBDYW5ub3QgcmVhZCBMTktTVEEgcmVnaXN0ZXJcbiIsCisJCQkJX19mdW5jX18pOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlwY2llX3VwZGF0ZV9saW5rX3NwZWVkKGN0cmwtPnBjaWUtPnBvcnQtPnN1Ym9yZGluYXRlLCBsbmtfc3RhdHVzKTsKKwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTYxMCwzNyArNjE5LDYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLWludCBwY2llaHBfZ2V0X21heF9saW5rX3NwZWVkKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gc2xvdC0+Y3RybDsKLQllbnVtIHBjaWVfbGlua19zcGVlZCBsbmtfc3BlZWQ7Ci0JdTMyCWxua19jYXA7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlyZXR2YWwgPSBwY2llaHBfcmVhZGwoY3RybCwgUENJX0VYUF9MTktDQVAsICZsbmtfY2FwKTsKLQlpZiAocmV0dmFsKSB7Ci0JCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgTE5LQ0FQIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0Jc3dpdGNoIChsbmtfY2FwICYgMHgwMDBGKSB7Ci0JY2FzZSAxOgotCQlsbmtfc3BlZWQgPSBQQ0lFXzJfNUdCOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWxua19zcGVlZCA9IFBDSUVfNV8wR0I7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWxua19zcGVlZCA9IFBDSUVfTE5LX1NQRUVEX1VOS05PV047Ci0JCWJyZWFrOwotCX0KLQotCSp2YWx1ZSA9IGxua19zcGVlZDsKLQljdHJsX2RiZyhjdHJsLCAiTWF4IGxpbmsgc3BlZWQgPSAlZFxuIiwgbG5rX3NwZWVkKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KIGludCBwY2llaHBfZ2V0X21heF9sbmtfd2lkdGgoc3RydWN0IHNsb3QgKnNsb3QsCiAJCQkJIGVudW0gcGNpZV9saW5rX3dpZHRoICp2YWx1ZSkKIHsKQEAgLTY5MSwzOCArNjY5LDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1pbnQgcGNpZWhwX2dldF9jdXJfbGlua19zcGVlZChzdHJ1Y3Qgc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHNsb3QtPmN0cmw7Ci0JZW51bSBwY2llX2xpbmtfc3BlZWQgbG5rX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047Ci0JaW50IHJldHZhbCA9IDA7Ci0JdTE2IGxua19zdGF0dXM7Ci0KLQlyZXR2YWwgPSBwY2llaHBfcmVhZHcoY3RybCwgUENJX0VYUF9MTktTVEEsICZsbmtfc3RhdHVzKTsKLQlpZiAocmV0dmFsKSB7Ci0JCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgTE5LU1RBVFVTIHJlZ2lzdGVyXG4iLAotCQkJIF9fZnVuY19fKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlzd2l0Y2ggKGxua19zdGF0dXMgJiBQQ0lfRVhQX0xOS1NUQV9DTFMpIHsKLQljYXNlIDE6Ci0JCWxua19zcGVlZCA9IFBDSUVfMl81R0I7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJbG5rX3NwZWVkID0gUENJRV81XzBHQjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbG5rX3NwZWVkID0gUENJRV9MTktfU1BFRURfVU5LTk9XTjsKLQkJYnJlYWs7Ci0JfQotCi0JKnZhbHVlID0gbG5rX3NwZWVkOwotCWN0cmxfZGJnKGN0cmwsICJDdXJyZW50IGxpbmsgc3BlZWQgPSAlZFxuIiwgbG5rX3NwZWVkKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KIGludCBwY2llaHBfZ2V0X2N1cl9sbmtfd2lkdGgoc3RydWN0IHNsb3QgKnNsb3QsCiAJCQkJIGVudW0gcGNpZV9saW5rX3dpZHRoICp2YWx1ZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMKaW5kZXggMjE3MzMxMC4uMGExNjQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMKQEAgLTUzLDE3ICs1MywxNSBAQAogCQlidXNuciA9IHBjaV9zY2FuX2JyaWRnZShwYXJlbnQsIGRldiwgYnVzbnIsIHBhc3MpOwogCWlmICghZGV2LT5zdWJvcmRpbmF0ZSkKIAkJcmV0dXJuIC0xOwotCXBjaV9idXNfc2l6ZV9icmlkZ2VzKGRldi0+c3Vib3JkaW5hdGUpOwotCXBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhwYXJlbnQpOwotCXBjaV9lbmFibGVfYnJpZGdlcyhwYXJlbnQpOwotCXBjaV9idXNfYWRkX2RldmljZXMocGFyZW50KTsKKwogCXJldHVybiAwOwogfQogCiBpbnQgcGNpZWhwX2NvbmZpZ3VyZV9kZXZpY2Uoc3RydWN0IHNsb3QgKnBfc2xvdCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCXN0cnVjdCBwY2lfYnVzICpwYXJlbnQgPSBwX3Nsb3QtPmN0cmwtPnBjaWUtPnBvcnQtPnN1Ym9yZGluYXRlOworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBwX3Nsb3QtPmN0cmwtPnBjaWUtPnBvcnQ7CisJc3RydWN0IHBjaV9idXMgKnBhcmVudCA9IGJyaWRnZS0+c3Vib3JkaW5hdGU7CiAJaW50IG51bSwgZm47CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwX3Nsb3QtPmN0cmw7CiAKQEAgLTk2LDEyICs5NCwyNSBAQAogCQkJCShkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTKSkgewogCQkJcGNpZWhwX2FkZF9icmlkZ2UoZGV2KTsKIAkJfQorCQlwY2lfZGV2X3B1dChkZXYpOworCX0KKworCXBjaV9hc3NpZ25fdW5hc3NpZ25lZF9icmlkZ2VfcmVzb3VyY2VzKGJyaWRnZSk7CisKKwlmb3IgKGZuID0gMDsgZm4gPCA4OyBmbisrKSB7CisJCWRldiA9IHBjaV9nZXRfc2xvdChwYXJlbnQsIFBDSV9ERVZGTigwLCBmbikpOworCQlpZiAoIWRldikKKwkJCWNvbnRpbnVlOworCQlpZiAoKGRldi0+Y2xhc3MgPj4gMTYpID09IFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkpIHsKKwkJCXBjaV9kZXZfcHV0KGRldik7CisJCQljb250aW51ZTsKKwkJfQogCQlwY2lfY29uZmlndXJlX3Nsb3QoZGV2KTsKIAkJcGNpX2Rldl9wdXQoZGV2KTsKIAl9CiAKLQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMocGFyZW50KTsKIAlwY2lfYnVzX2FkZF9kZXZpY2VzKHBhcmVudCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCmluZGV4IGMxNTkyMjMuLmRjYWFlNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKQEAgLTEzMCwxMCArMTMwLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfbWF4X2J1c19zcGVlZChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCitzdGF0aWMgZW51bSBwY2lfYnVzX3NwZWVkIGdldF9tYXhfYnVzX3NwZWVkKHN0cnVjdCBzbG90ICpzbG90KQogewotCXN0cnVjdCBzbG90ICpzbG90ID0gKHN0cnVjdCBzbG90ICopaG90cGx1Z19zbG90LT5wcml2YXRlOwotCisJZW51bSBwY2lfYnVzX3NwZWVkIHNwZWVkOwogCXN3aXRjaCAoc2xvdC0+dHlwZSkgewogCWNhc2UgMToKIAljYXNlIDI6CkBAIC0xNDEsMzAgKzE0MCwzMCBAQAogCWNhc2UgNDoKIAljYXNlIDU6CiAJY2FzZSA2OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMzNNSHo7CS8qIHNwZWVkIGZvciBjYXNlIDEtNiAqLworCQlzcGVlZCA9IFBDSV9TUEVFRF8zM01IejsJLyogc3BlZWQgZm9yIGNhc2UgMS02ICovCiAJCWJyZWFrOwogCWNhc2UgNzoKIAljYXNlIDg6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF82Nk1IejsKKwkJc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHo7CiAJCWJyZWFrOwogCWNhc2UgMTE6CiAJY2FzZSAxNDoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzY2TUh6X1BDSVg7CisJCXNwZWVkID0gUENJX1NQRUVEXzY2TUh6X1BDSVg7CiAJCWJyZWFrOwogCWNhc2UgMTI6CiAJY2FzZSAxNToKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOworCQlzcGVlZCA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWDsKIAkJYnJlYWs7CiAJY2FzZSAxMzoKIAljYXNlIDE2OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7CisJCXNwZWVkID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfVU5LTk9XTjsKKwkJc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKIAkJYnJlYWs7Ci0KIAl9Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gc3BlZWQ7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X2NoaWxkcmVuX3Byb3BzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGNvbnN0IGludCAqKmRyY19pbmRleGVzLApAQCAtNDA4LDYgKzQwNyw4IEBACiAJCXNsb3QtPnN0YXRlID0gTk9UX1ZBTElEOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisKKwlzbG90LT5idXMtPm1heF9idXNfc3BlZWQgPSBnZXRfbWF4X2J1c19zcGVlZChzbG90KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDI5LDcgKzQzMCw2IEBACiAJLmdldF9wb3dlcl9zdGF0dXMgPSBnZXRfcG93ZXJfc3RhdHVzLAogCS5nZXRfYXR0ZW50aW9uX3N0YXR1cyA9IGdldF9hdHRlbnRpb25fc3RhdHVzLAogCS5nZXRfYWRhcHRlcl9zdGF0dXMgPSBnZXRfYWRhcHRlcl9zdGF0dXMsCi0JLmdldF9tYXhfYnVzX3NwZWVkID0gZ2V0X21heF9idXNfc3BlZWQsCiB9OwogCiBtb2R1bGVfaW5pdChycGFwaHBfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaAppbmRleCA4ZTIxMGNkNy4uZDI2MjdlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCkBAIC0zMzMsOCArMzMzLDYgQEAKIAlpbnQgKCpzZXRfYXR0ZW50aW9uX3N0YXR1cykoc3RydWN0IHNsb3QgKnNsb3QsIHU4IHN0YXR1cyk7CiAJaW50ICgqZ2V0X2xhdGNoX3N0YXR1cykoc3RydWN0IHNsb3QgKnNsb3QsIHU4ICpzdGF0dXMpOwogCWludCAoKmdldF9hZGFwdGVyX3N0YXR1cykoc3RydWN0IHNsb3QgKnNsb3QsIHU4ICpzdGF0dXMpOwotCWludCAoKmdldF9tYXhfYnVzX3NwZWVkKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICpzcGVlZCk7Ci0JaW50ICgqZ2V0X2N1cl9idXNfc3BlZWQpKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnNwZWVkKTsKIAlpbnQgKCpnZXRfYWRhcHRlcl9zcGVlZCkoc3RydWN0IHNsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqc3BlZWQpOwogCWludCAoKmdldF9tb2RlMV9FQ0NfY2FwKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgdTggKm1vZGUpOwogCWludCAoKmdldF9wcm9nX2ludCkoc3RydWN0IHNsb3QgKnNsb3QsIHU4ICpwcm9nX2ludCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jb3JlLmMKaW5kZXggOGE1MjBhMy4uYTUwNjIyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2NvcmUuYwpAQCAtNjUsOCArNjUsNiBAQAogc3RhdGljIGludCBnZXRfYXR0ZW50aW9uX3N0YXR1cwkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgdTggKnZhbHVlKTsKIHN0YXRpYyBpbnQgZ2V0X2xhdGNoX3N0YXR1cwkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgdTggKnZhbHVlKTsKIHN0YXRpYyBpbnQgZ2V0X2FkYXB0ZXJfc3RhdHVzCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOwotc3RhdGljIGludCBnZXRfbWF4X2J1c19zcGVlZAkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSk7Ci1zdGF0aWMgaW50IGdldF9jdXJfYnVzX3NwZWVkCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKTsKIAogc3RhdGljIHN0cnVjdCBob3RwbHVnX3Nsb3Rfb3BzIHNocGNocF9ob3RwbHVnX3Nsb3Rfb3BzID0gewogCS5zZXRfYXR0ZW50aW9uX3N0YXR1cyA9CXNldF9hdHRlbnRpb25fc3RhdHVzLApAQCAtNzYsOCArNzQsNiBAQAogCS5nZXRfYXR0ZW50aW9uX3N0YXR1cyA9CWdldF9hdHRlbnRpb25fc3RhdHVzLAogCS5nZXRfbGF0Y2hfc3RhdHVzID0JZ2V0X2xhdGNoX3N0YXR1cywKIAkuZ2V0X2FkYXB0ZXJfc3RhdHVzID0JZ2V0X2FkYXB0ZXJfc3RhdHVzLAotCS5nZXRfbWF4X2J1c19zcGVlZCA9CWdldF9tYXhfYnVzX3NwZWVkLAotCS5nZXRfY3VyX2J1c19zcGVlZCA9CWdldF9jdXJfYnVzX3NwZWVkLAogfTsKIAogLyoqCkBAIC0yNzksMzcgKzI3NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X21heF9idXNfc3BlZWQoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LAotCQkJCWVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdChob3RwbHVnX3Nsb3QpOwotCWludCByZXR2YWw7Ci0KLQljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKLQkJIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwotCi0JcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X21heF9idXNfc3BlZWQoc2xvdCwgdmFsdWUpOwotCWlmIChyZXR2YWwgPCAwKQotCQkqdmFsdWUgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGdldF9jdXJfYnVzX3NwZWVkIChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdChob3RwbHVnX3Nsb3QpOwotCWludCByZXR2YWw7Ci0KLQljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKLQkJIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwotCi0JcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X2N1cl9idXNfc3BlZWQoc2xvdCwgdmFsdWUpOwotCWlmIChyZXR2YWwgPCAwKQotCQkqdmFsdWUgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGlzX3NocGNfY2FwYWJsZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCWlmICgoZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BTUQpIHx8IChkZXYtPmRldmljZSA9PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY3RybC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY3RybC5jCmluZGV4IGI4YWIyNzkuLjNiYmEwYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jdHJsLmMKQEAgLTI4NSwxNyArMjg1LDggQEAKIAkJcmV0dXJuIFdST05HX0JVU19GUkVRVUVOQ1k7CiAJfQogCi0JcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9jdXJfYnVzX3NwZWVkKHBfc2xvdCwgJmJzcCk7Ci0JaWYgKHJjKSB7Ci0JCWN0cmxfZXJyKGN0cmwsICJDYW4ndCBnZXQgYnVzIG9wZXJhdGlvbiBzcGVlZFxuIik7Ci0JCXJldHVybiBXUk9OR19CVVNfRlJFUVVFTkNZOwotCX0KLQotCXJjID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfbWF4X2J1c19zcGVlZChwX3Nsb3QsICZtc3ApOwotCWlmIChyYykgewotCQljdHJsX2VycihjdHJsLCAiQ2FuJ3QgZ2V0IG1heCBidXMgb3BlcmF0aW9uIHNwZWVkXG4iKTsKLQkJbXNwID0gYnNwOwotCX0KKwlic3AgPSBjdHJsLT5wY2lfZGV2LT5idXMtPmN1cl9idXNfc3BlZWQ7CisJbXNwID0gY3RybC0+cGNpX2Rldi0+YnVzLT5tYXhfYnVzX3NwZWVkOwogCiAJLyogQ2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHNsb3RzIG9yIGRldmljZXMgb24gdGhlIHNhbWUgYnVzICovCiAJaWYgKCFsaXN0X2VtcHR5KCZjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZS0+ZGV2aWNlcykpCkBAIC00NjIsNiArNDUzLDcgQEAKIAkJcF9zbG90LT5zdGF0ZSA9IFBPV0VST05fU1RBVEU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCWtmcmVlKGluZm8pOwogCQlnb3RvIG91dDsKIAl9CiAJcXVldWVfd29yayhzaHBjaHBfd3EsICZpbmZvLT53b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2hwYy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfaHBjLmMKaW5kZXggODZkYzM5OC4uNWY1ZThkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfaHBjLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfaHBjLmMKQEAgLTY2MCw2ICs2NjAsNzUgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCitzdGF0aWMgaW50IHNocGNfZ2V0X2N1cl9idXNfc3BlZWQoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCit7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlOworCWVudW0gcGNpX2J1c19zcGVlZCBidXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKKwl1MTYgc2VjX2J1c19yZWcgPSBzaHBjX3JlYWR3KGN0cmwsIFNFQ19CVVNfQ09ORklHKTsKKwl1OCBwaSA9IHNocGNfcmVhZGIoY3RybCwgUFJPR19JTlRFUkZBQ0UpOworCXU4IHNwZWVkX21vZGUgPSAocGkgPT0gMikgPyAoc2VjX2J1c19yZWcgJiAweEYpIDogKHNlY19idXNfcmVnICYgMHg3KTsKKworCWlmICgocGkgPT0gMSkgJiYgKHNwZWVkX21vZGUgPiA0KSkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlzd2l0Y2ggKHNwZWVkX21vZGUpIHsKKwljYXNlIDB4MDoKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzMzTUh6OworCQlicmVhazsKKwljYXNlIDB4MToKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6OworCQlicmVhazsKKwljYXNlIDB4MjoKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6X1BDSVg7CisJCWJyZWFrOworCWNhc2UgMHgzOgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVg7CisJCWJyZWFrOworCWNhc2UgMHg0OgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7CisJCWJyZWFrOworCWNhc2UgMHg1OgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHpfUENJWF9FQ0M7CisJCWJyZWFrOworCWNhc2UgMHg2OgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVhfRUNDOworCQlicmVhazsKKwljYXNlIDB4NzoKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYX0VDQzsKKwkJYnJlYWs7CisJY2FzZSAweDg6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYXzI2NjsKKwkJYnJlYWs7CisJY2FzZSAweDk6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWF8yNjY7CisJCWJyZWFrOworCWNhc2UgMHhhOgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfMjY2OworCQlicmVhazsKKwljYXNlIDB4YjoKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6X1BDSVhfNTMzOworCQlicmVhazsKKwljYXNlIDB4YzoKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYXzUzMzsKKwkJYnJlYWs7CisJY2FzZSAweGQ6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWF81MzM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWJyZWFrOworCX0KKworIG91dDoKKwlidXMtPmN1cl9idXNfc3BlZWQgPSBidXNfc3BlZWQ7CisJZGJnKCJDdXJyZW50IGJ1cyBzcGVlZCA9ICVkXG4iLCBidXNfc3BlZWQpOworCXJldHVybiByZXR2YWw7Cit9CisKKwogc3RhdGljIGludCBocGNfc2V0X2J1c19zcGVlZF9tb2RlKHN0cnVjdCBzbG90ICogc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkIHZhbHVlKQogewogCWludCByZXR2YWw7CkBAIC03MjAsNiArNzg5LDggQEAKIAlyZXR2YWwgPSBzaHBjX3dyaXRlX2NtZChzbG90LCAwLCBjbWQpOwogCWlmIChyZXR2YWwpCiAJCWN0cmxfZXJyKGN0cmwsICIlczogV3JpdGUgY29tbWFuZCBmYWlsZWQhXG4iLCBfX2Z1bmNfXyk7CisJZWxzZQorCQlzaHBjX2dldF9jdXJfYnVzX3NwZWVkKGN0cmwpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTgwMywxMCArODc0LDEwIEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IGhwY19nZXRfbWF4X2J1c19zcGVlZCAoc3RydWN0IHNsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCitzdGF0aWMgaW50IHNocGNfZ2V0X21heF9idXNfc3BlZWQoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCiB7CiAJaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZTsKIAllbnVtIHBjaV9idXNfc3BlZWQgYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047CiAJdTggcGkgPSBzaHBjX3JlYWRiKGN0cmwsIFBST0dfSU5URVJGQUNFKTsKIAl1MzIgc2xvdF9hdmFpbDEgPSBzaHBjX3JlYWRsKGN0cmwsIFNMT1RfQVZBSUwxKTsKQEAgLTg0Miw3OSArOTEzLDEyIEBACiAJCQlyZXR2YWwgPSAtRU5PREVWOwogCX0KIAotCSp2YWx1ZSA9IGJ1c19zcGVlZDsKKwlidXMtPm1heF9idXNfc3BlZWQgPSBidXNfc3BlZWQ7CiAJY3RybF9kYmcoY3RybCwgIk1heCBidXMgc3BlZWQgPSAlZFxuIiwgYnVzX3NwZWVkKTsKIAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgaHBjX2dldF9jdXJfYnVzX3NwZWVkIChzdHJ1Y3Qgc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHNsb3QtPmN0cmw7Ci0JZW51bSBwY2lfYnVzX3NwZWVkIGJ1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwotCXUxNiBzZWNfYnVzX3JlZyA9IHNocGNfcmVhZHcoY3RybCwgU0VDX0JVU19DT05GSUcpOwotCXU4IHBpID0gc2hwY19yZWFkYihjdHJsLCBQUk9HX0lOVEVSRkFDRSk7Ci0JdTggc3BlZWRfbW9kZSA9IChwaSA9PSAyKSA/IChzZWNfYnVzX3JlZyAmIDB4RikgOiAoc2VjX2J1c19yZWcgJiAweDcpOwotCi0JaWYgKChwaSA9PSAxKSAmJiAoc3BlZWRfbW9kZSA+IDQpKSB7Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF9VTktOT1dOOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlzd2l0Y2ggKHNwZWVkX21vZGUpIHsKLQljYXNlIDB4MDoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzMzTUh6OwotCQlicmVhazsKLQljYXNlIDB4MToKLQkJKnZhbHVlID0gUENJX1NQRUVEXzY2TUh6OwotCQlicmVhazsKLQljYXNlIDB4MjoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzY2TUh6X1BDSVg7Ci0JCWJyZWFrOwotCWNhc2UgMHgzOgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVg7Ci0JCWJyZWFrOwotCWNhc2UgMHg0OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7Ci0JCWJyZWFrOwotCWNhc2UgMHg1OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHpfUENJWF9FQ0M7Ci0JCWJyZWFrOwotCWNhc2UgMHg2OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVhfRUNDOwotCQlicmVhazsKLQljYXNlIDB4NzoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYX0VDQzsKLQkJYnJlYWs7Ci0JY2FzZSAweDg6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYXzI2NjsKLQkJYnJlYWs7Ci0JY2FzZSAweDk6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWF8yNjY7Ci0JCWJyZWFrOwotCWNhc2UgMHhhOgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfMjY2OwotCQlicmVhazsKLQljYXNlIDB4YjoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzY2TUh6X1BDSVhfNTMzOwotCQlicmVhazsKLQljYXNlIDB4YzoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYXzUzMzsKLQkJYnJlYWs7Ci0JY2FzZSAweGQ6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWF81MzM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF9VTktOT1dOOwotCQlyZXR2YWwgPSAtRU5PREVWOwotCQlicmVhazsKLQl9Ci0KLQljdHJsX2RiZyhjdHJsLCAiQ3VycmVudCBidXMgc3BlZWQgPSAlZFxuIiwgYnVzX3NwZWVkKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCiBzdGF0aWMgc3RydWN0IGhwY19vcHMgc2hwY2hwX2hwY19vcHMgPSB7CiAJLnBvd2VyX29uX3Nsb3QJCQk9IGhwY19wb3dlcl9vbl9zbG90LAogCS5zbG90X2VuYWJsZQkJCT0gaHBjX3Nsb3RfZW5hYmxlLApAQCAtOTI2LDggKzkzMCw2IEBACiAJLmdldF9sYXRjaF9zdGF0dXMJCT0gaHBjX2dldF9sYXRjaF9zdGF0dXMsCiAJLmdldF9hZGFwdGVyX3N0YXR1cwkJPSBocGNfZ2V0X2FkYXB0ZXJfc3RhdHVzLAogCi0JLmdldF9tYXhfYnVzX3NwZWVkCQk9IGhwY19nZXRfbWF4X2J1c19zcGVlZCwKLQkuZ2V0X2N1cl9idXNfc3BlZWQJCT0gaHBjX2dldF9jdXJfYnVzX3NwZWVkLAogCS5nZXRfYWRhcHRlcl9zcGVlZAkJPSBocGNfZ2V0X2FkYXB0ZXJfc3BlZWQsCiAJLmdldF9tb2RlMV9FQ0NfY2FwCQk9IGhwY19nZXRfbW9kZTFfRUNDX2NhcCwKIAkuZ2V0X3Byb2dfaW50CQkJPSBocGNfZ2V0X3Byb2dfaW50LApAQCAtMTA4Niw2ICsxMDg4LDkgQEAKIAl9CiAJY3RybF9kYmcoY3RybCwgIkhQQyBhdCAlcyBpcnE9JXhcbiIsIHBjaV9uYW1lKHBkZXYpLCBwZGV2LT5pcnEpOwogCisJc2hwY19nZXRfbWF4X2J1c19zcGVlZChjdHJsKTsKKwlzaHBjX2dldF9jdXJfYnVzX3NwZWVkKGN0cmwpOworCiAJLyoKIAkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBjb250cm9sbGVyIHRvIGJlIGluaXRpYWxpemVkLAogCSAqIGluaXRpYWxpemUgdGhlIHNocGNocGQgd29yayBxdWV1ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfc3lzZnMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3N5c2ZzLmMKaW5kZXggMjlmYTlkMi4uMDcxYjdkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfc3lzZnMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9zeXNmcy5jCkBAIC00Nyw4ICs0Nyw3IEBACiAJYnVzID0gcGRldi0+c3Vib3JkaW5hdGU7CiAKIAlvdXQgKz0gc3ByaW50ZihidWYsICJGcmVlIHJlc291cmNlczogbWVtb3J5XG4iKTsKLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGluZGV4KyspIHsKLQkJcmVzID0gYnVzLT5yZXNvdXJjZVtpbmRleF07CisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaW5kZXgpIHsKIAkJaWYgKHJlcyAmJiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSAmJgogCQkJCSEocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfUFJFRkVUQ0gpKSB7CiAJCQlvdXQgKz0gc3ByaW50ZihvdXQsICJzdGFydCA9ICU4LjhsbHgsICIKQEAgLTU4LDggKzU3LDcgQEAKIAkJfQogCX0KIAlvdXQgKz0gc3ByaW50ZihvdXQsICJGcmVlIHJlc291cmNlczogcHJlZmV0Y2hhYmxlIG1lbW9yeVxuIik7Ci0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpbmRleCsrKSB7Ci0JCXJlcyA9IGJ1cy0+cmVzb3VyY2VbaW5kZXhdOworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIGluZGV4KSB7CiAJCWlmIChyZXMgJiYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgJiYKIAkJCSAgICAgICAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfUFJFRkVUQ0gpKSB7CiAJCQlvdXQgKz0gc3ByaW50ZihvdXQsICJzdGFydCA9ICU4LjhsbHgsICIKQEAgLTY5LDggKzY3LDcgQEAKIAkJfQogCX0KIAlvdXQgKz0gc3ByaW50ZihvdXQsICJGcmVlIHJlc291cmNlczogSU9cbiIpOwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaW5kZXgrKykgewotCQlyZXMgPSBidXMtPnJlc291cmNlW2luZGV4XTsKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgcmVzLCBpbmRleCkgewogCQlpZiAocmVzICYmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykpIHsKIAkJCW91dCArPSBzcHJpbnRmKG91dCwgInN0YXJ0ID0gJTguOGxseCwgIgogCQkJCQkibGVuZ3RoID0gJTguOGxseFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2xlZ2FjeS5jIGIvZHJpdmVycy9wY2kvbGVnYWN5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MWY2NWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9wY2kvbGVnYWN5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgInBjaS5oIgotCi0vKioKLSAqIHBjaV9maW5kX2RldmljZSAtIGJlZ2luIG9yIGNvbnRpbnVlIHNlYXJjaGluZyBmb3IgYSBQQ0kgZGV2aWNlIGJ5IHZlbmRvci9kZXZpY2UgaWQKLSAqIEB2ZW5kb3I6IFBDSSB2ZW5kb3IgaWQgdG8gbWF0Y2gsIG9yICVQQ0lfQU5ZX0lEIHRvIG1hdGNoIGFsbCB2ZW5kb3IgaWRzCi0gKiBAZGV2aWNlOiBQQ0kgZGV2aWNlIGlkIHRvIG1hdGNoLCBvciAlUENJX0FOWV9JRCB0byBtYXRjaCBhbGwgZGV2aWNlIGlkcwotICogQGZyb206IFByZXZpb3VzIFBDSSBkZXZpY2UgZm91bmQgaW4gc2VhcmNoLCBvciAlTlVMTCBmb3IgbmV3IHNlYXJjaC4KLSAqCi0gKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBsaXN0IG9mIGtub3duIFBDSSBkZXZpY2VzLiAgSWYgYSBQQ0kgZGV2aWNlIGlzIGZvdW5kCi0gKiB3aXRoIGEgbWF0Y2hpbmcgQHZlbmRvciBhbmQgQGRldmljZSwgYSBwb2ludGVyIHRvIGl0cyBkZXZpY2Ugc3RydWN0dXJlIGlzCi0gKiByZXR1cm5lZC4gIE90aGVyd2lzZSwgJU5VTEwgaXMgcmV0dXJuZWQuCi0gKiBBIG5ldyBzZWFyY2ggaXMgaW5pdGlhdGVkIGJ5IHBhc3NpbmcgJU5VTEwgYXMgdGhlIEBmcm9tIGFyZ3VtZW50LgotICogT3RoZXJ3aXNlIGlmIEBmcm9tIGlzIG5vdCAlTlVMTCwgc2VhcmNoZXMgY29udGludWUgZnJvbSBuZXh0IGRldmljZQotICogb24gdGhlIGdsb2JhbCBsaXN0LgotICoKLSAqIE5PVEU6IERvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiBhbnkgbW9yZTsgdXNlIHBjaV9nZXRfZGV2aWNlKCkgaW5zdGVhZCwgYXMKLSAqIHRoZSBQQ0kgZGV2aWNlIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIGRpc2FwcGVhciBhdCBhbnkgbW9tZW50IGluCi0gKiB0aW1lLgotICovCi1zdHJ1Y3QgcGNpX2RldiAqcGNpX2ZpbmRfZGV2aWNlKHVuc2lnbmVkIGludCB2ZW5kb3IsIHVuc2lnbmVkIGludCBkZXZpY2UsCi0JCQkJc3RydWN0IHBjaV9kZXYgKmZyb20pCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0KLQlwY2lfZGV2X2dldChmcm9tKTsKLQlwZGV2ID0gcGNpX2dldF9zdWJzeXModmVuZG9yLCBkZXZpY2UsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGZyb20pOwotCXBjaV9kZXZfcHV0KHBkZXYpOwotCXJldHVybiBwZGV2OwotfQotRVhQT1JUX1NZTUJPTChwY2lfZmluZF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWFjcGkuYyBiL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKaW5kZXggN2UyODI5NS4uMmU3YTNiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWFjcGkuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCkBAIC0xNiw4ICsxNiwxNDQgQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAKICNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlICJwY2kuaCIKIAorc3RhdGljIERFRklORV9NVVRFWChwY2lfYWNwaV9wbV9ub3RpZnlfbXR4KTsKKworLyoqCisgKiBwY2lfYWNwaV93YWtlX2J1cyAtIFdha2UtdXAgbm90aWZpY2F0aW9uIGhhbmRsZXIgZm9yIHJvb3QgYnVzZXMuCisgKiBAaGFuZGxlOiBBQ1BJIGhhbmRsZSBvZiBhIGRldmljZSB0aGUgbm90aWZpY2F0aW9uIGlzIGZvci4KKyAqIEBldmVudDogVHlwZSBvZiB0aGUgc2lnbmFsZWQgZXZlbnQuCisgKiBAY29udGV4dDogUENJIHJvb3QgYnVzIHRvIHdha2UgdXAgZGV2aWNlcyBvbi4KKyAqLworc3RhdGljIHZvaWQgcGNpX2FjcGlfd2FrZV9idXMoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHBjaV9idXMgKnBjaV9idXMgPSBjb250ZXh0OworCisJaWYgKGV2ZW50ID09IEFDUElfTk9USUZZX0RFVklDRV9XQUtFICYmIHBjaV9idXMpCisJCXBjaV9wbWVfd2FrZXVwX2J1cyhwY2lfYnVzKTsKK30KKworLyoqCisgKiBwY2lfYWNwaV93YWtlX2RldiAtIFdha2UtdXAgbm90aWZpY2F0aW9uIGhhbmRsZXIgZm9yIFBDSSBkZXZpY2VzLgorICogQGhhbmRsZTogQUNQSSBoYW5kbGUgb2YgYSBkZXZpY2UgdGhlIG5vdGlmaWNhdGlvbiBpcyBmb3IuCisgKiBAZXZlbnQ6IFR5cGUgb2YgdGhlIHNpZ25hbGVkIGV2ZW50LgorICogQGNvbnRleHQ6IFBDSSBkZXZpY2Ugb2JqZWN0IHRvIHdha2UgdXAuCisgKi8KK3N0YXRpYyB2b2lkIHBjaV9hY3BpX3dha2VfZGV2KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gY29udGV4dDsKKworCWlmIChldmVudCA9PSBBQ1BJX05PVElGWV9ERVZJQ0VfV0FLRSAmJiBwY2lfZGV2KSB7CisJCXBjaV9jaGVja19wbWVfc3RhdHVzKHBjaV9kZXYpOworCQlwbV9ydW50aW1lX3Jlc3VtZSgmcGNpX2Rldi0+ZGV2KTsKKwkJaWYgKHBjaV9kZXYtPnN1Ym9yZGluYXRlKQorCQkJcGNpX3BtZV93YWtldXBfYnVzKHBjaV9kZXYtPnN1Ym9yZGluYXRlKTsKKwl9Cit9CisKKy8qKgorICogYWRkX3BtX25vdGlmaWVyIC0gUmVnaXN0ZXIgUE0gbm90aWZpZXIgZm9yIGdpdmVuIEFDUEkgZGV2aWNlLgorICogQGRldjogQUNQSSBkZXZpY2UgdG8gYWRkIHRoZSBub3RpZmllciBmb3IuCisgKiBAY29udGV4dDogUENJIGRldmljZSBvciBidXMgdG8gY2hlY2sgZm9yIFBNRSBzdGF0dXMgaWYgYW4gZXZlbnQgaXMgc2lnbmFsZWQuCisgKgorICogTk9URTogQGRldiBuZWVkIG5vdCBiZSBhIHJ1bi13YWtlIG9yIHdha2UtdXAgZGV2aWNlIHRvIGJlIGEgdmFsaWQgc291cmNlIG9mCisgKiBQTSB3YWtlLXVwIGV2ZW50cy4gIEZvciBleGFtcGxlLCB3YWtlLXVwIGV2ZW50cyBtYXkgYmUgZ2VuZXJhdGVkIGZvciBicmlkZ2VzCisgKiBpZiBvbmUgb2YgdGhlIGRldmljZXMgYmVsb3cgdGhlIGJyaWRnZSBpcyBzaWduYWxpbmcgUE1FLCBldmVuIGlmIHRoZSBicmlkZ2UKKyAqIGl0c2VsZiBkb2Vzbid0IGhhdmUgYSB3YWtlLXVwIEdQRSBhc3NvY2lhdGVkIHdpdGggaXQuCisgKi8KK3N0YXRpYyBhY3BpX3N0YXR1cyBhZGRfcG1fbm90aWZpZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsCisJCQkJICAgYWNwaV9ub3RpZnlfaGFuZGxlciBoYW5kbGVyLAorCQkJCSAgIHZvaWQgKmNvbnRleHQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfQUxSRUFEWV9FWElTVFM7CisKKwltdXRleF9sb2NrKCZwY2lfYWNwaV9wbV9ub3RpZnlfbXR4KTsKKworCWlmIChkZXYtPndha2V1cC5mbGFncy5ub3RpZmllcl9wcmVzZW50KQorCQlnb3RvIG91dDsKKworCXN0YXR1cyA9IGFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihkZXYtPmhhbmRsZSwKKwkJCQkJICAgICBBQ1BJX1NZU1RFTV9OT1RJRlksCisJCQkJCSAgICAgaGFuZGxlciwgY29udGV4dCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlnb3RvIG91dDsKKworCWRldi0+d2FrZXVwLmZsYWdzLm5vdGlmaWVyX3ByZXNlbnQgPSB0cnVlOworCisgb3V0OgorCW11dGV4X3VubG9jaygmcGNpX2FjcGlfcG1fbm90aWZ5X210eCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiByZW1vdmVfcG1fbm90aWZpZXIgLSBVbnJlZ2lzdGVyIFBNIG5vdGlmaWVyIGZyb20gZ2l2ZW4gQUNQSSBkZXZpY2UuCisgKiBAZGV2OiBBQ1BJIGRldmljZSB0byByZW1vdmUgdGhlIG5vdGlmaWVyIGZyb20uCisgKi8KK3N0YXRpYyBhY3BpX3N0YXR1cyByZW1vdmVfcG1fbm90aWZpZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsCisJCQkJICAgICAgYWNwaV9ub3RpZnlfaGFuZGxlciBoYW5kbGVyKQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CisKKwltdXRleF9sb2NrKCZwY2lfYWNwaV9wbV9ub3RpZnlfbXR4KTsKKworCWlmICghZGV2LT53YWtldXAuZmxhZ3Mubm90aWZpZXJfcHJlc2VudCkKKwkJZ290byBvdXQ7CisKKwlzdGF0dXMgPSBhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihkZXYtPmhhbmRsZSwKKwkJCQkJICAgIEFDUElfU1lTVEVNX05PVElGWSwKKwkJCQkJICAgIGhhbmRsZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJZ290byBvdXQ7CisKKwlkZXYtPndha2V1cC5mbGFncy5ub3RpZmllcl9wcmVzZW50ID0gZmFsc2U7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwY2lfYWNwaV9wbV9ub3RpZnlfbXR4KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHBjaV9hY3BpX2FkZF9idXNfcG1fbm90aWZpZXIgLSBSZWdpc3RlciBQTSBub3RpZmllciBmb3IgZ2l2ZW4gUENJIGJ1cy4KKyAqIEBkZXY6IEFDUEkgZGV2aWNlIHRvIGFkZCB0aGUgbm90aWZpZXIgZm9yLgorICogQHBjaV9idXM6IFBDSSBidXMgdG8gd2FsayBjaGVja2luZyBmb3IgUE1FIHN0YXR1cyBpZiBhbiBldmVudCBpcyBzaWduYWxlZC4KKyAqLworYWNwaV9zdGF0dXMgcGNpX2FjcGlfYWRkX2J1c19wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBwY2lfYnVzICpwY2lfYnVzKQoreworCXJldHVybiBhZGRfcG1fbm90aWZpZXIoZGV2LCBwY2lfYWNwaV93YWtlX2J1cywgcGNpX2J1cyk7Cit9CisKKy8qKgorICogcGNpX2FjcGlfcmVtb3ZlX2J1c19wbV9ub3RpZmllciAtIFVucmVnaXN0ZXIgUENJIGJ1cyBQTSBub3RpZmllci4KKyAqIEBkZXY6IEFDUEkgZGV2aWNlIHRvIHJlbW92ZSB0aGUgbm90aWZpZXIgZnJvbS4KKyAqLworYWNwaV9zdGF0dXMgcGNpX2FjcGlfcmVtb3ZlX2J1c19wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcmVtb3ZlX3BtX25vdGlmaWVyKGRldiwgcGNpX2FjcGlfd2FrZV9idXMpOworfQorCisvKioKKyAqIHBjaV9hY3BpX2FkZF9wbV9ub3RpZmllciAtIFJlZ2lzdGVyIFBNIG5vdGlmaWVyIGZvciBnaXZlbiBQQ0kgZGV2aWNlLgorICogQGRldjogQUNQSSBkZXZpY2UgdG8gYWRkIHRoZSBub3RpZmllciBmb3IuCisgKiBAcGNpX2RldjogUENJIGRldmljZSB0byBjaGVjayBmb3IgdGhlIFBNRSBzdGF0dXMgaWYgYW4gZXZlbnQgaXMgc2lnbmFsZWQuCisgKi8KK2FjcGlfc3RhdHVzIHBjaV9hY3BpX2FkZF9wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQoreworCXJldHVybiBhZGRfcG1fbm90aWZpZXIoZGV2LCBwY2lfYWNwaV93YWtlX2RldiwgcGNpX2Rldik7Cit9CisKKy8qKgorICogcGNpX2FjcGlfcmVtb3ZlX3BtX25vdGlmaWVyIC0gVW5yZWdpc3RlciBQQ0kgZGV2aWNlIFBNIG5vdGlmaWVyLgorICogQGRldjogQUNQSSBkZXZpY2UgdG8gcmVtb3ZlIHRoZSBub3RpZmllciBmcm9tLgorICovCithY3BpX3N0YXR1cyBwY2lfYWNwaV9yZW1vdmVfcG1fbm90aWZpZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHJlbW92ZV9wbV9ub3RpZmllcihkZXYsIHBjaV9hY3BpX3dha2VfZGV2KTsKK30KKwogLyoKICAqIF9TeEQgcmV0dXJucyB0aGUgRC1zdGF0ZSB3aXRoIHRoZSBoaWdoZXN0IHBvd2VyCiAgKiAobG93ZXN0IEQtc3RhdGUgbnVtYmVyKSBzdXBwb3J0ZWQgaW4gdGhlIFMtc3RhdGUgIngiLgpAQCAtMTMxLDE5ICsyNjcsOTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBhY3BpX2Rldl9ydW5fd2FrZSAtIEVuYWJsZS9kaXNhYmxlIHdha2UtdXAgZm9yIGdpdmVuIGRldmljZS4KKyAqIEBwaHlzX2RldjogRGV2aWNlIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBwbGF0Zm9ybSB0byB3YWtlLXVwIHRoZSBzeXN0ZW0gZm9yLgorICogQGVuYWJsZTogV2hldGhlciBlbmFibGUgb3IgZGlzYWJsZSB0aGUgd2FrZS11cCBmdW5jdGlvbmFsaXR5LgorICoKKyAqIEZpbmQgdGhlIEFDUEkgZGV2aWNlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIEBwY2lfZGV2IGFuZCB0cnkgdG8KKyAqIGVuYWJsZS9kaXNhYmxlIHRoZSBHUEUgYXNzb2NpYXRlZCB3aXRoIGl0LgorICovCitzdGF0aWMgaW50IGFjcGlfZGV2X3J1bl93YWtlKHN0cnVjdCBkZXZpY2UgKnBoeXNfZGV2LCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldjsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJaW50IGVycm9yID0gLUVOT0RFVjsKKworCWlmICghZGV2aWNlX3J1bl93YWtlKHBoeXNfZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUocGh5c19kZXYpOworCWlmICghaGFuZGxlIHx8IEFDUElfRkFJTFVSRShhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldikpKSB7CisJCWRldl9kYmcocGh5c19kZXYsICJBQ1BJIGhhbmRsZSBoYXMgbm8gY29udGV4dCBpbiAlcyFcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChlbmFibGUpIHsKKwkJaWYgKCFkZXYtPndha2V1cC5ydW5fd2FrZV9jb3VudCsrKSB7CisJCQlhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGRldiwgQUNQSV9TVEFURV9TMCk7CisJCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKKwkJCQkJZGV2LT53YWtldXAuZ3BlX251bWJlciwKKwkJCQkJQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKKwkJfQorCX0gZWxzZSBpZiAoZGV2LT53YWtldXAucnVuX3dha2VfY291bnQgPiAwKSB7CisJCWlmICghLS1kZXYtPndha2V1cC5ydW5fd2FrZV9jb3VudCkgeworCQkJYWNwaV9kaXNhYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAorCQkJCQkgZGV2LT53YWtldXAuZ3BlX251bWJlciwKKwkJCQkJIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7CisJCQlhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihkZXYpOworCQl9CisJfSBlbHNlIHsKKwkJZXJyb3IgPSAtRUFMUkVBRFk7CisJfQorCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBhY3BpX3BjaV9wcm9wYWdhdGVfcnVuX3dha2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgYm9vbCBlbmFibGUpCit7CisJd2hpbGUgKGJ1cy0+cGFyZW50KSB7CisJCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CisKKwkJaWYgKGJyaWRnZS0+cG1lX2ludGVycnVwdCkKKwkJCXJldHVybjsKKwkJaWYgKCFhY3BpX2Rldl9ydW5fd2FrZSgmYnJpZGdlLT5kZXYsIGVuYWJsZSkpCisJCQlyZXR1cm47CisJCWJ1cyA9IGJ1cy0+cGFyZW50OworCX0KKworCS8qIFdlIGhhdmUgcmVhY2hlZCB0aGUgcm9vdCBidXMuICovCisJaWYgKGJ1cy0+YnJpZGdlKQorCQlhY3BpX2Rldl9ydW5fd2FrZShidXMtPmJyaWRnZSwgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBhY3BpX3BjaV9ydW5fd2FrZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIGVuYWJsZSkKK3sKKwlpZiAoZGV2LT5wbWVfaW50ZXJydXB0KQorCQlyZXR1cm4gMDsKKworCWlmICghYWNwaV9kZXZfcnVuX3dha2UoJmRldi0+ZGV2LCBlbmFibGUpKQorCQlyZXR1cm4gMDsKKworCWFjcGlfcGNpX3Byb3BhZ2F0ZV9ydW5fd2FrZShkZXYtPmJ1cywgZW5hYmxlKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBwY2lfcGxhdGZvcm1fcG1fb3BzIGFjcGlfcGNpX3BsYXRmb3JtX3BtID0gewogCS5pc19tYW5hZ2VhYmxlID0gYWNwaV9wY2lfcG93ZXJfbWFuYWdlYWJsZSwKIAkuc2V0X3N0YXRlID0gYWNwaV9wY2lfc2V0X3Bvd2VyX3N0YXRlLAogCS5jaG9vc2Vfc3RhdGUgPSBhY3BpX3BjaV9jaG9vc2Vfc3RhdGUsCiAJLmNhbl93YWtldXAgPSBhY3BpX3BjaV9jYW5fd2FrZXVwLAogCS5zbGVlcF93YWtlID0gYWNwaV9wY2lfc2xlZXBfd2FrZSwKKwkucnVuX3dha2UgPSBhY3BpX3BjaV9ydW5fd2FrZSwKIH07CiAKIC8qIEFDUEkgYnVzIHR5cGUgKi8KIHN0YXRpYyBpbnQgYWNwaV9wY2lfZmluZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBhY3BpX2hhbmRsZSAqaGFuZGxlKQogewogCXN0cnVjdCBwY2lfZGV2ICogcGNpX2RldjsKLQlhY3BpX2ludGVnZXIJYWRkcjsKKwl1NjQJYWRkcjsKIAogCXBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CiAJLyogUGxlYXNlIHJlZiB0byBBQ1BJIHNwZWMgZm9yIHRoZSBzeW50YXggb2YgX0FEUiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IGU1ZDQ3YmUuLmY5YTBhZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKIHN0cnVjdCBwY2lfZHluaWQgewpAQCAtNDA0LDYgKzQwNSwzNSBAQAogCXBjaV9tc2l4X3NodXRkb3duKHBjaV9kZXYpOwogfQogCisjaWZkZWYgQ09ORklHX1BNX09QUworCisvKiBBdXhpbGlhcnkgZnVuY3Rpb25zIHVzZWQgZm9yIHN5c3RlbSByZXN1bWUgYW5kIHJ1bi10aW1lIHJlc3VtZS4gKi8KKworLyoqCisgKiBwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcgLSByZXN0b3JlIHN0YW5kYXJkIGNvbmZpZyByZWdpc3RlcnMgb2YgUENJIGRldmljZQorICogQHBjaV9kZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlCisgKi8KK3N0YXRpYyBpbnQgcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQoreworCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShwY2lfZGV2LCBQQ0lfVU5LTk9XTik7CisKKwlpZiAocGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDApIHsKKwkJaW50IGVycm9yID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDApOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfQorCisJcmV0dXJuIHBjaV9yZXN0b3JlX3N0YXRlKHBjaV9kZXYpOworfQorCitzdGF0aWMgdm9pZCBwY2lfcG1fZGVmYXVsdF9yZXN1bWVfZWFybHkoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCit7CisJcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHBjaV9kZXYpOworCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX3Jlc3VtZV9lYXJseSwgcGNpX2Rldik7Cit9CisKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAKIC8qCkBAIC01MjAsMjkgKzU1MCw2IEBACiAKIC8qIEF1eGlsaWFyeSBmdW5jdGlvbnMgdXNlZCBieSB0aGUgbmV3IHBvd2VyIG1hbmFnZW1lbnQgZnJhbWV3b3JrICovCiAKLS8qKgotICogcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnIC0gcmVzdG9yZSBzdGFuZGFyZCBjb25maWcgcmVnaXN0ZXJzIG9mIFBDSSBkZXZpY2UKLSAqIEBwY2lfZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZQotICovCi1zdGF0aWMgaW50IHBjaV9yZXN0b3JlX3N0YW5kYXJkX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKLXsKLQlwY2lfdXBkYXRlX2N1cnJlbnRfc3RhdGUocGNpX2RldiwgUENJX1VOS05PV04pOwotCi0JaWYgKHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX0QwKSB7Ci0JCWludCBlcnJvciA9IHBjaV9zZXRfcG93ZXJfc3RhdGUocGNpX2RldiwgUENJX0QwKTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOwotCX0KLQotCXJldHVybiBwY2lfcmVzdG9yZV9zdGF0ZShwY2lfZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgcGNpX3BtX2RlZmF1bHRfcmVzdW1lX25vaXJxKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQotewotCXBjaV9yZXN0b3JlX3N0YW5kYXJkX2NvbmZpZyhwY2lfZGV2KTsKLQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9yZXN1bWVfZWFybHksIHBjaV9kZXYpOwotfQotCiBzdGF0aWMgdm9pZCBwY2lfcG1fZGVmYXVsdF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7CiAJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfcmVzdW1lLCBwY2lfZGV2KTsKQEAgLTU4MSw2ICs1ODgsMTcgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IGVycm9yID0gMDsKIAorCS8qCisJICogUENJIGRldmljZXMgc3VzcGVuZGVkIGF0IHJ1biB0aW1lIG5lZWQgdG8gYmUgcmVzdW1lZCBhdCB0aGlzCisJICogcG9pbnQsIGJlY2F1c2UgaW4gZ2VuZXJhbCBpdCBpcyBuZWNlc3NhcnkgdG8gcmVjb25maWd1cmUgdGhlbSBmb3IKKwkgKiBzeXN0ZW0gc3VzcGVuZC4gIE5hbWVseSwgaWYgdGhlIGRldmljZSBpcyBzdXBwb3NlZCB0byB3YWtlIHVwIHRoZQorCSAqIHN5c3RlbSBmcm9tIHRoZSBzbGVlcCBzdGF0ZSwgd2UgbWF5IG5lZWQgdG8gcmVjb25maWd1cmUgaXQgZm9yIHRoaXMKKwkgKiBwdXJwb3NlLiAgSW4gdHVybiwgaWYgdGhlIGRldmljZSBpcyBub3Qgc3VwcG9zZWQgdG8gd2FrZSB1cCB0aGUKKwkgKiBzeXN0ZW0gZnJvbSB0aGUgc2xlZXAgc3RhdGUsIHdlJ2xsIGhhdmUgdG8gcHJldmVudCBpdCBmcm9tIHNpZ25hbGluZworCSAqIHdha2UtdXAuCisJICovCisJcG1fcnVudGltZV9yZXN1bWUoZGV2KTsKKwogCWlmIChkcnYgJiYgZHJ2LT5wbSAmJiBkcnYtPnBtLT5wcmVwYXJlKQogCQllcnJvciA9IGRydi0+cG0tPnByZXBhcmUoZGV2KTsKIApAQCAtNTk1LDYgKzYxMywxMyBAQAogCQlkcnYtPnBtLT5jb21wbGV0ZShkZXYpOwogfQogCisjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCisKKyNkZWZpbmUgcGNpX3BtX3ByZXBhcmUJTlVMTAorI2RlZmluZSBwY2lfcG1fY29tcGxldGUJTlVMTAorCisjZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLworCiAjaWZkZWYgQ09ORklHX1NVU1BFTkQKIAogc3RhdGljIGludCBwY2lfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC02ODEsNyArNzA2LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IGVycm9yID0gMDsKIAotCXBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9ub2lycShwY2lfZGV2KTsKKwlwY2lfcG1fZGVmYXVsdF9yZXN1bWVfZWFybHkocGNpX2Rldik7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfcmVzdW1lX2Vhcmx5KGRldik7CkBAIC04NzksNyArOTA0LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IGVycm9yID0gMDsKIAotCXBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9ub2lycShwY2lfZGV2KTsKKwlwY2lfcG1fZGVmYXVsdF9yZXN1bWVfZWFybHkocGNpX2Rldik7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfcmVzdW1lX2Vhcmx5KGRldik7CkBAIC05MzEsNiArOTU2LDg0IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX0hJQkVSTkFUSU9OICovCiAKKyNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorCitzdGF0aWMgaW50IHBjaV9wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKwlwY2lfcG93ZXJfdCBwcmV2ID0gcGNpX2Rldi0+Y3VycmVudF9zdGF0ZTsKKwlpbnQgZXJyb3I7CisKKwlpZiAoIXBtIHx8ICFwbS0+cnVudGltZV9zdXNwZW5kKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCWVycm9yID0gcG0tPnJ1bnRpbWVfc3VzcGVuZChkZXYpOworCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChwbS0+cnVudGltZV9zdXNwZW5kLCBlcnJvcik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9zdXNwZW5kLCBwY2lfZGV2KTsKKworCWlmICghcGNpX2Rldi0+c3RhdGVfc2F2ZWQgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDAKKwkgICAgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfVU5LTk9XTikgeworCQlXQVJOX09OQ0UocGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBwcmV2LAorCQkJIlBDSSBQTTogU3RhdGUgb2YgZGV2aWNlIG5vdCBzYXZlZCBieSAlcEZcbiIsCisJCQlwbS0+cnVudGltZV9zdXNwZW5kKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFwY2lfZGV2LT5zdGF0ZV9zYXZlZCkKKwkJcGNpX3NhdmVfc3RhdGUocGNpX2Rldik7CisKKwlwY2lfZmluaXNoX3J1bnRpbWVfc3VzcGVuZChwY2lfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaV9wbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOworCisJaWYgKCFwbSB8fCAhcG0tPnJ1bnRpbWVfcmVzdW1lKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCXBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9lYXJseShwY2lfZGV2KTsKKwlfX3BjaV9lbmFibGVfd2FrZShwY2lfZGV2LCBQQ0lfRDAsIHRydWUsIGZhbHNlKTsKKwlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9yZXN1bWUsIHBjaV9kZXYpOworCisJcmV0dXJuIHBtLT5ydW50aW1lX3Jlc3VtZShkZXYpOworfQorCitzdGF0aWMgaW50IHBjaV9wbV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKworCWlmICghcG0pCisJCXJldHVybiAtRU5PU1lTOworCisJaWYgKHBtLT5ydW50aW1lX2lkbGUpIHsKKwkJaW50IHJldCA9IHBtLT5ydW50aW1lX2lkbGUoZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcG1fcnVudGltZV9zdXNwZW5kKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UgLyogIUNPTkZJR19QTV9SVU5USU1FICovCisKKyNkZWZpbmUgcGNpX3BtX3J1bnRpbWVfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHBjaV9wbV9ydW50aW1lX3Jlc3VtZQlOVUxMCisjZGVmaW5lIHBjaV9wbV9ydW50aW1lX2lkbGUJTlVMTAorCisjZW5kaWYgLyogIUNPTkZJR19QTV9SVU5USU1FICovCisKKyNpZmRlZiBDT05GSUdfUE1fT1BTCisKIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHBjaV9kZXZfcG1fb3BzID0gewogCS5wcmVwYXJlID0gcGNpX3BtX3ByZXBhcmUsCiAJLmNvbXBsZXRlID0gcGNpX3BtX2NvbXBsZXRlLApAQCAtOTQ2LDE1ICsxMDQ5LDE4IEBACiAJLnRoYXdfbm9pcnEgPSBwY2lfcG1fdGhhd19ub2lycSwKIAkucG93ZXJvZmZfbm9pcnEgPSBwY2lfcG1fcG93ZXJvZmZfbm9pcnEsCiAJLnJlc3RvcmVfbm9pcnEgPSBwY2lfcG1fcmVzdG9yZV9ub2lycSwKKwkucnVudGltZV9zdXNwZW5kID0gcGNpX3BtX3J1bnRpbWVfc3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgPSBwY2lfcG1fcnVudGltZV9yZXN1bWUsCisJLnJ1bnRpbWVfaWRsZSA9IHBjaV9wbV9ydW50aW1lX2lkbGUsCiB9OwogCiAjZGVmaW5lIFBDSV9QTV9PUFNfUFRSCSgmcGNpX2Rldl9wbV9vcHMpCiAKLSNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KKyNlbHNlIC8qICFDT01GSUdfUE1fT1BTICovCiAKICNkZWZpbmUgUENJX1BNX09QU19QVFIJTlVMTAogCi0jZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLworI2VuZGlmIC8qICFDT01GSUdfUE1fT1BTICovCiAKIC8qKgogICogX19wY2lfcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBuZXcgcGNpIGRyaXZlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCAzMTVmZWE0Li41YjU0OGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fd2FrZXVwLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgkvKiBpc2FfZG1hX2JyaWRnZV9idWdneSAqLwogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlICJwY2kuaCIKIApAQCAtMjksNiArMjksMTIgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcG93ZXJfbmFtZXMpOwogCitpbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7CitFWFBPUlRfU1lNQk9MKGlzYV9kbWFfYnJpZGdlX2J1Z2d5KTsKKworaW50IHBjaV9wY2lfcHJvYmxlbXM7CitFWFBPUlRfU1lNQk9MKHBjaV9wY2lfcHJvYmxlbXMpOworCiB1bnNpZ25lZCBpbnQgcGNpX3BtX2QzX2RlbGF5OwogCiBzdGF0aWMgdm9pZCBwY2lfZGV2X2QzX3NsZWVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0zODAsMTAgKzM4Niw5IEBACiB7CiAJY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cyA9IGRldi0+YnVzOwogCWludCBpOwotCXN0cnVjdCByZXNvdXJjZSAqYmVzdCA9IE5VTEw7CisJc3RydWN0IHJlc291cmNlICpiZXN0ID0gTlVMTCwgKnI7CiAKLQlmb3IoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBidXMtPnJlc291cmNlW2ldOworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByLCBpKSB7CiAJCWlmICghcikKIAkJCWNvbnRpbnVlOwogCQlpZiAocmVzLT5zdGFydCAmJiAhKHJlcy0+c3RhcnQgPj0gci0+c3RhcnQgJiYgcmVzLT5lbmQgPD0gci0+ZW5kKSkKQEAgLTQ1Nyw2ICs0NjIsMTIgQEAKIAkJCXBjaV9wbGF0Zm9ybV9wbS0+c2xlZXBfd2FrZShkZXYsIGVuYWJsZSkgOiAtRU5PREVWOwogfQogCitzdGF0aWMgaW5saW5lIGludCBwbGF0Zm9ybV9wY2lfcnVuX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBlbmFibGUpCit7CisJcmV0dXJuIHBjaV9wbGF0Zm9ybV9wbSA/CisJCQlwY2lfcGxhdGZvcm1fcG0tPnJ1bl93YWtlKGRldiwgZW5hYmxlKSA6IC1FTk9ERVY7Cit9CisKIC8qKgogICogcGNpX3Jhd19zZXRfcG93ZXJfc3RhdGUgLSBVc2UgUENJIFBNIHJlZ2lzdGVycyB0byBzZXQgdGhlIHBvd2VyIHN0YXRlIG9mCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIFBDSSBkZXZpY2UKQEAgLTExOTAsNiArMTIwMSw2NiBAQAogfQogCiAvKioKKyAqIHBjaV9jaGVja19wbWVfc3RhdHVzIC0gQ2hlY2sgaWYgZ2l2ZW4gZGV2aWNlIGhhcyBnZW5lcmF0ZWQgUE1FLgorICogQGRldjogRGV2aWNlIHRvIGNoZWNrLgorICoKKyAqIENoZWNrIHRoZSBQTUUgc3RhdHVzIG9mIHRoZSBkZXZpY2UgYW5kIGlmIHNldCwgY2xlYXIgaXQgYW5kIGNsZWFyIFBNRSBlbmFibGUKKyAqIChpZiBzZXQpLiAgUmV0dXJuICd0cnVlJyBpZiBQTUUgc3RhdHVzIGFuZCBQTUUgZW5hYmxlIHdlcmUgYm90aCBzZXQgb3IKKyAqICdmYWxzZScgb3RoZXJ3aXNlLgorICovCitib29sIHBjaV9jaGVja19wbWVfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHBtY3NyX3BvczsKKwl1MTYgcG1jc3I7CisJYm9vbCByZXQgPSBmYWxzZTsKKworCWlmICghZGV2LT5wbV9jYXApCisJCXJldHVybiBmYWxzZTsKKworCXBtY3NyX3BvcyA9IGRldi0+cG1fY2FwICsgUENJX1BNX0NUUkw7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwbWNzcl9wb3MsICZwbWNzcik7CisJaWYgKCEocG1jc3IgJiBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ2xlYXIgUE1FIHN0YXR1cy4gKi8KKwlwbWNzciB8PSBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTOworCWlmIChwbWNzciAmIFBDSV9QTV9DVFJMX1BNRV9FTkFCTEUpIHsKKwkJLyogRGlzYWJsZSBQTUUgdG8gYXZvaWQgaW50ZXJydXB0IGZsb29kLiAqLworCQlwbWNzciAmPSB+UENJX1BNX0NUUkxfUE1FX0VOQUJMRTsKKwkJcmV0ID0gdHJ1ZTsKKwl9CisKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwbWNzcl9wb3MsIHBtY3NyKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogcGNpX3BtZV93YWtldXAgLSBXYWtlIHVwIGEgUENJIGRldmljZSBpZiBpdHMgUE1FIFN0YXR1cyBiaXQgaXMgc2V0LgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBpZ246IElnbm9yZWQuCisgKgorICogQ2hlY2sgaWYgQGRldiBoYXMgZ2VuZXJhdGVkIFBNRSBhbmQgcXVldWUgYSByZXN1bWUgcmVxdWVzdCBmb3IgaXQgaW4gdGhhdAorICogY2FzZS4KKyAqLworc3RhdGljIGludCBwY2lfcG1lX3dha2V1cChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICppZ24pCit7CisJaWYgKHBjaV9jaGVja19wbWVfc3RhdHVzKGRldikpCisJCXBtX3JlcXVlc3RfcmVzdW1lKCZkZXYtPmRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpX3BtZV93YWtldXBfYnVzIC0gV2FsayBnaXZlbiBidXMgYW5kIHdha2UgdXAgZGV2aWNlcyBvbiBpdCwgaWYgbmVjZXNzYXJ5LgorICogQGJ1czogVG9wIGJ1cyBvZiB0aGUgc3VidHJlZSB0byB3YWxrLgorICovCit2b2lkIHBjaV9wbWVfd2FrZXVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCWlmIChidXMpCisJCXBjaV93YWxrX2J1cyhidXMsIHBjaV9wbWVfd2FrZXVwLCBOVUxMKTsKK30KKworLyoqCiAgKiBwY2lfcG1lX2NhcGFibGUgLSBjaGVjayB0aGUgY2FwYWJpbGl0eSBvZiBQQ0kgZGV2aWNlIHRvIGdlbmVyYXRlIFBNRSMKICAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlLgogICogQHN0YXRlOiBQQ0kgc3RhdGUgZnJvbSB3aGljaCBkZXZpY2Ugd2lsbCBpc3N1ZSBQTUUjLgpAQCAtMTIzMCw5ICsxMzAxLDEwIEBACiB9CiAKIC8qKgotICogcGNpX2VuYWJsZV93YWtlIC0gZW5hYmxlIFBDSSBkZXZpY2UgYXMgd2FrZXVwIGV2ZW50IHNvdXJjZQorICogX19wY2lfZW5hYmxlX3dha2UgLSBlbmFibGUgUENJIGRldmljZSBhcyB3YWtldXAgZXZlbnQgc291cmNlCiAgKiBAZGV2OiBQQ0kgZGV2aWNlIGFmZmVjdGVkCiAgKiBAc3RhdGU6IFBDSSBzdGF0ZSBmcm9tIHdoaWNoIGRldmljZSB3aWxsIGlzc3VlIHdha2V1cCBldmVudHMKKyAqIEBydW50aW1lOiBUcnVlIGlmIHRoZSBldmVudHMgYXJlIHRvIGJlIGdlbmVyYXRlZCBhdCBydW4gdGltZQogICogQGVuYWJsZTogVHJ1ZSB0byBlbmFibGUgZXZlbnQgZ2VuZXJhdGlvbjsgZmFsc2UgdG8gZGlzYWJsZQogICoKICAqIFRoaXMgZW5hYmxlcyB0aGUgZGV2aWNlIGFzIGEgd2FrZXVwIGV2ZW50IHNvdXJjZSwgb3IgZGlzYWJsZXMgaXQuCkBAIC0xMjQ4LDExICsxMzIwLDEyIEBACiAgKiBFcnJvciBjb2RlIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gaXMgcmV0dXJuZWQgaWYgYm90aCB0aGUgcGxhdGZvcm0gYW5kCiAgKiB0aGUgbmF0aXZlIG1lY2hhbmlzbSBmYWlsIHRvIGVuYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiB3YWtlLXVwIGV2ZW50cwogICovCi1pbnQgcGNpX2VuYWJsZV93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLCBib29sIGVuYWJsZSkKK2ludCBfX3BjaV9lbmFibGVfd2FrZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSwKKwkJICAgICAgYm9vbCBydW50aW1lLCBib29sIGVuYWJsZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChlbmFibGUgJiYgIWRldmljZV9tYXlfd2FrZXVwKCZkZXYtPmRldikpCisJaWYgKGVuYWJsZSAmJiAhcnVudGltZSAmJiAhZGV2aWNlX21heV93YWtldXAoJmRldi0+ZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBEb24ndCBkbyB0aGUgc2FtZSB0aGluZyB0d2ljZSBpbiBhIHJvdyBmb3Igb25lIGRldmljZS4gKi8KQEAgLTEyNzIsMTkgKzEzNDUsMjQgQEAKIAkJCXBjaV9wbWVfYWN0aXZlKGRldiwgdHJ1ZSk7CiAJCWVsc2UKIAkJCXJldCA9IDE7Ci0JCWVycm9yID0gcGxhdGZvcm1fcGNpX3NsZWVwX3dha2UoZGV2LCB0cnVlKTsKKwkJZXJyb3IgPSBydW50aW1lID8gcGxhdGZvcm1fcGNpX3J1bl93YWtlKGRldiwgdHJ1ZSkgOgorCQkJCQlwbGF0Zm9ybV9wY2lfc2xlZXBfd2FrZShkZXYsIHRydWUpOwogCQlpZiAocmV0KQogCQkJcmV0ID0gZXJyb3I7CiAJCWlmICghcmV0KQogCQkJZGV2LT53YWtldXBfcHJlcGFyZWQgPSB0cnVlOwogCX0gZWxzZSB7Ci0JCXBsYXRmb3JtX3BjaV9zbGVlcF93YWtlKGRldiwgZmFsc2UpOworCQlpZiAocnVudGltZSkKKwkJCXBsYXRmb3JtX3BjaV9ydW5fd2FrZShkZXYsIGZhbHNlKTsKKwkJZWxzZQorCQkJcGxhdGZvcm1fcGNpX3NsZWVwX3dha2UoZGV2LCBmYWxzZSk7CiAJCXBjaV9wbWVfYWN0aXZlKGRldiwgZmFsc2UpOwogCQlkZXYtPndha2V1cF9wcmVwYXJlZCA9IGZhbHNlOwogCX0KIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKF9fcGNpX2VuYWJsZV93YWtlKTsKIAogLyoqCiAgKiBwY2lfd2FrZV9mcm9tX2QzIC0gZW5hYmxlL2Rpc2FibGUgZGV2aWNlIHRvIHdha2UgdXAgZnJvbSBEM19ob3Qgb3IgRDNfY29sZApAQCAtMTM5NCw2ICsxNDcyLDY2IEBACiB9CiAKIC8qKgorICogcGNpX2ZpbmlzaF9ydW50aW1lX3N1c3BlbmQgLSBDYXJyeSBvdXQgUENJLXNwZWNpZmljIHBhcnQgb2YgcnVudGltZSBzdXNwZW5kLgorICogQGRldjogUENJIGRldmljZSBiZWluZyBzdXNwZW5kZWQuCisgKgorICogUHJlcGFyZSBAZGV2IHRvIGdlbmVyYXRlIHdha2UtdXAgZXZlbnRzIGF0IHJ1biB0aW1lIGFuZCBwdXQgaXQgaW50byBhIGxvdworICogcG93ZXIgc3RhdGUuCisgKi8KK2ludCBwY2lfZmluaXNoX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXBjaV9wb3dlcl90IHRhcmdldF9zdGF0ZSA9IHBjaV90YXJnZXRfc3RhdGUoZGV2KTsKKwlpbnQgZXJyb3I7CisKKwlpZiAodGFyZ2V0X3N0YXRlID09IFBDSV9QT1dFUl9FUlJPUikKKwkJcmV0dXJuIC1FSU87CisKKwlfX3BjaV9lbmFibGVfd2FrZShkZXYsIHRhcmdldF9zdGF0ZSwgdHJ1ZSwgcGNpX2Rldl9ydW5fd2FrZShkZXYpKTsKKworCWVycm9yID0gcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHRhcmdldF9zdGF0ZSk7CisKKwlpZiAoZXJyb3IpCisJCV9fcGNpX2VuYWJsZV93YWtlKGRldiwgdGFyZ2V0X3N0YXRlLCB0cnVlLCBmYWxzZSk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogcGNpX2Rldl9ydW5fd2FrZSAtIENoZWNrIGlmIGRldmljZSBjYW4gZ2VuZXJhdGUgcnVuLXRpbWUgd2FrZS11cCBldmVudHMuCisgKiBAZGV2OiBEZXZpY2UgdG8gY2hlY2suCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGRldmljZSBpdHNlbGYgaXMgY2FiYWJsZSBvZiBnZW5lcmF0aW5nIHdha2UtdXAgZXZlbnRzCisgKiAodGhyb3VnaCB0aGUgcGxhdGZvcm0gb3IgdXNpbmcgdGhlIG5hdGl2ZSBQQ0llIFBNRSkgb3IgaWYgdGhlIGRldmljZSBzdXBwb3J0cworICogUE1FIGFuZCBvbmUgb2YgaXRzIHVwc3RyZWFtIGJyaWRnZXMgY2FuIGdlbmVyYXRlIHdha2UtdXAgZXZlbnRzLgorICovCitib29sIHBjaV9kZXZfcnVuX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gZGV2LT5idXM7CisKKwlpZiAoZGV2aWNlX3J1bl93YWtlKCZkZXYtPmRldikpCisJCXJldHVybiB0cnVlOworCisJaWYgKCFkZXYtPnBtZV9zdXBwb3J0KQorCQlyZXR1cm4gZmFsc2U7CisKKwl3aGlsZSAoYnVzLT5wYXJlbnQpIHsKKwkJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IGJ1cy0+c2VsZjsKKworCQlpZiAoZGV2aWNlX3J1bl93YWtlKCZicmlkZ2UtPmRldikpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQlidXMgPSBidXMtPnBhcmVudDsKKwl9CisKKwkvKiBXZSBoYXZlIHJlYWNoZWQgdGhlIHJvb3QgYnVzLiAqLworCWlmIChidXMtPmJyaWRnZSkKKwkJcmV0dXJuIGRldmljZV9ydW5fd2FrZShidXMtPmJyaWRnZSk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZGV2X3J1bl93YWtlKTsKKworLyoqCiAgKiBwY2lfcG1faW5pdCAtIEluaXRpYWxpemUgUE0gZnVuY3Rpb25zIG9mIGdpdmVuIFBDSSBkZXZpY2UKICAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlLgogICovCkBAIC0xNDAyLDYgKzE1NDAsNyBAQAogCWludCBwbTsKIAl1MTYgcG1jOwogCisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZkZXYtPmRldik7CiAJZGV2LT53YWtldXBfcHJlcGFyZWQgPSBmYWxzZTsKIAlkZXYtPnBtX2NhcCA9IDA7CiAKQEAgLTI2MTUsNiArMjc1NCwyMyBAQAogCXJldHVybiAwOwogfQogCisvKiBTb21lIGFyY2hpdGVjdHVyZXMgcmVxdWlyZSBhZGRpdGlvbmFsIHByb2dyYW1taW5nIHRvIGVuYWJsZSBWR0EgKi8KK3N0YXRpYyBhcmNoX3NldF92Z2Ffc3RhdGVfdCBhcmNoX3NldF92Z2Ffc3RhdGU7CisKK3ZvaWQgX19pbml0IHBjaV9yZWdpc3Rlcl9zZXRfdmdhX3N0YXRlKGFyY2hfc2V0X3ZnYV9zdGF0ZV90IGZ1bmMpCit7CisJYXJjaF9zZXRfdmdhX3N0YXRlID0gZnVuYzsJLyogTlVMTCBkaXNhYmxlcyAqLworfQorCitzdGF0aWMgaW50IHBjaV9zZXRfdmdhX3N0YXRlX2FyY2goc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBkZWNvZGUsCisJCSAgICAgIHVuc2lnbmVkIGludCBjb21tYW5kX2JpdHMsIGJvb2wgY2hhbmdlX2JyaWRnZSkKK3sKKwlpZiAoYXJjaF9zZXRfdmdhX3N0YXRlKQorCQlyZXR1cm4gYXJjaF9zZXRfdmdhX3N0YXRlKGRldiwgZGVjb2RlLCBjb21tYW5kX2JpdHMsCisJCQkJCQljaGFuZ2VfYnJpZGdlKTsKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBwY2lfc2V0X3ZnYV9zdGF0ZSAtIHNldCBWR0EgZGVjb2RlIHN0YXRlIG9uIGRldmljZSBhbmQgcGFyZW50cyBpZiByZXF1ZXN0ZWQKICAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlCkBAIC0yNjI4LDkgKzI3ODQsMTUgQEAKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwogCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2U7CiAJdTE2IGNtZDsKKwlpbnQgcmM7CiAKIAlXQVJOX09OKGNvbW1hbmRfYml0cyAmIH4oUENJX0NPTU1BTkRfSU98UENJX0NPTU1BTkRfTUVNT1JZKSk7CiAKKwkvKiBBUkNIIHNwZWNpZmljIFZHQSBlbmFibGVzICovCisJcmMgPSBwY2lfc2V0X3ZnYV9zdGF0ZV9hcmNoKGRldiwgZGVjb2RlLCBjb21tYW5kX2JpdHMsIGNoYW5nZV9icmlkZ2UpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CiAJaWYgKGRlY29kZSA9PSB0cnVlKQogCQljbWQgfD0gY29tbWFuZF9iaXRzOwpAQCAtMjg0NSw2ICszMDA3LDcgQEAKIEVYUE9SVF9TWU1CT0wocGNpX2Rpc2FibGVfZGV2aWNlKTsKIEVYUE9SVF9TWU1CT0wocGNpX2ZpbmRfY2FwYWJpbGl0eSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9idXNfZmluZF9jYXBhYmlsaXR5KTsKK0VYUE9SVF9TWU1CT0wocGNpX3JlZ2lzdGVyX3NldF92Z2Ffc3RhdGUpOwogRVhQT1JUX1NZTUJPTChwY2lfcmVsZWFzZV9yZWdpb25zKTsKIEVYUE9SVF9TWU1CT0wocGNpX3JlcXVlc3RfcmVnaW9ucyk7CiBFWFBPUlRfU1lNQk9MKHBjaV9yZXF1ZXN0X3JlZ2lvbnNfZXhjbHVzaXZlKTsKQEAgLTI4NzEsMTAgKzMwMzQsOCBAQAogRVhQT1JUX1NZTUJPTChwY2lfcmVzdG9yZV9zdGF0ZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9wbWVfY2FwYWJsZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9wbWVfYWN0aXZlKTsKLUVYUE9SVF9TWU1CT0wocGNpX2VuYWJsZV93YWtlKTsKIEVYUE9SVF9TWU1CT0wocGNpX3dha2VfZnJvbV9kMyk7CiBFWFBPUlRfU1lNQk9MKHBjaV90YXJnZXRfc3RhdGUpOwogRVhQT1JUX1NZTUJPTChwY2lfcHJlcGFyZV90b19zbGVlcCk7CiBFWFBPUlRfU1lNQk9MKHBjaV9iYWNrX2Zyb21fc2xlZXApOwogRVhQT1JUX1NZTUJPTF9HUEwocGNpX3NldF9wY2llX3Jlc2V0X3N0YXRlKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaAppbmRleCBmYmQwZTNhLi40ZWIxMGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAorKysgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtMzUsNiArMzUsMTAgQEAKICAqCiAgKiBAc2xlZXBfd2FrZTogZW5hYmxlcy9kaXNhYmxlcyB0aGUgc3lzdGVtIHdha2UgdXAgY2FwYWJpbGl0eSBvZiBnaXZlbiBkZXZpY2UKICAqCisgKiBAcnVuX3dha2U6IGVuYWJsZXMvZGlzYWJsZXMgdGhlIHBsYXRmb3JtIHRvIGdlbmVyYXRlIHJ1bi10aW1lIHdha2UtdXAgZXZlbnRzCisgKgkJZm9yIGdpdmVuIGRldmljZSAodGhlIGRldmljZSdzIHdha2UtdXAgY2FwYWJpbGl0eSBoYXMgdG8gYmUKKyAqCQllbmFibGVkIGJ5IEBzbGVlcF93YWtlIGZvciB0aGlzIGZlYXR1cmUgdG8gd29yaykKKyAqCiAgKiBJZiBnaXZlbiBwbGF0Zm9ybSBpcyBnZW5lcmFsbHkgY2FwYWJsZSBvZiBwb3dlciBtYW5hZ2luZyBQQ0kgZGV2aWNlcywgYWxsIG9mCiAgKiB0aGVzZSBjYWxsYmFja3MgYXJlIG1hbmRhdG9yeS4KICAqLwpAQCAtNDQsMTEgKzQ4LDE2IEBACiAJcGNpX3Bvd2VyX3QgKCpjaG9vc2Vfc3RhdGUpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCWJvb2wgKCpjYW5fd2FrZXVwKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIAlpbnQgKCpzbGVlcF93YWtlKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIGVuYWJsZSk7CisJaW50ICgqcnVuX3dha2UpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKTsKIH07CiAKIGV4dGVybiBpbnQgcGNpX3NldF9wbGF0Zm9ybV9wbShzdHJ1Y3QgcGNpX3BsYXRmb3JtX3BtX29wcyAqb3BzKTsKIGV4dGVybiB2b2lkIHBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSk7CiBleHRlcm4gdm9pZCBwY2lfZGlzYWJsZV9lbmFibGVkX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiBib29sIHBjaV9jaGVja19wbWVfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIGludCBwY2lfZmluaXNoX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgX19wY2lfcG1lX3dha2V1cChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICppZ24pOworZXh0ZXJuIHZvaWQgcGNpX3BtZV93YWtldXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogZXh0ZXJuIHZvaWQgcGNpX3BtX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gdm9pZCBwbGF0Zm9ybV9wY2lfd2FrZXVwX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gdm9pZCBwY2lfYWxsb2NhdGVfY2FwX3NhdmVfYnVmZmVycyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKQEAgLTMxOSw2ICszMjgsMTMgQEAKIAlpbnQgKCpyZXNldCkoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHByb2JlKTsKIH07CiAKKyNpZmRlZiBDT05GSUdfUENJX1FVSVJLUwogZXh0ZXJuIGludCBwY2lfZGV2X3NwZWNpZmljX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcm9iZSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcGNpX2Rldl9zcGVjaWZpY19yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcHJvYmUpCit7CisJcmV0dXJuIC1FTk9UVFk7Cit9CisjZW5kaWYKIAogI2VuZGlmIC8qIERSSVZFUlNfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZwppbmRleCA1YTBjNmFkLi5iOGI0OTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnCkBAIC00NiwzICs0Niw3IEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIFBDSSBFeHByZXNzIEFTUE0gZGVidWcgc3VwcG9ydC4gSXQgd2lsbCBhZGQgcGVyLWRldmljZQogCSAgaW50ZXJmYWNlIHRvIGNvbnRyb2wgQVNQTS4KKworY29uZmlnIFBDSUVfUE1FCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gUENJRVBPUlRCVVMgJiYgUE1fUlVOVElNRSAmJiBFWFBFUklNRU5UQUwgJiYgQUNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL3BjaWUvTWFrZWZpbGUKaW5kZXggMTFmNmJiMWUuLmVhNjU0NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9NYWtlZmlsZQpAQCAtMTEsMyArMTEsNSBAQAogCiAjIEJ1aWxkIFBDSSBFeHByZXNzIEFFUiBpZiBuZWVkZWQKIG9iai0kKENPTkZJR19QQ0lFQUVSKQkJKz0gYWVyLworCitvYmotJChDT05GSUdfUENJRV9QTUUpICs9IHBtZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG1lL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5MjM4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG1lL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorIworIyBNYWtlZmlsZSBmb3IgUENJLUV4cHJlc3MgUm9vdCBQb3J0IFBNRSBzaWduYWxpbmcgZHJpdmVyCisjCisKK29iai0kKENPTkZJR19QQ0lFX1BNRSkgKz0gcG1lZHJpdmVyLm8KKworcG1lZHJpdmVyLW9ianMgOj0gcGNpZV9wbWUubworcG1lZHJpdmVyLSQoQ09ORklHX0FDUEkpICs9IHBjaWVfcG1lX2FjcGkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG1lL3BjaWVfcG1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzY2JmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG1lL3BjaWVfcG1lLmMKQEAgLTAsMCArMSw1MDUgQEAKKy8qCisgKiBQQ0llIE5hdGl2ZSBQTUUgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycAorICogQ29weXJpZ2h0IChDKSAyMDA3IC0gMjAwOSBTaGFvaHVhIExpIDxzaGFvaHVhLmxpQGludGVsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+LCBOb3ZlbGwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFYyLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2llcG9ydF9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworI2luY2x1ZGUgIi4uLy4uL3BjaS5oIgorI2luY2x1ZGUgInBjaWVfcG1lLmgiCisKKyNkZWZpbmUgUENJX0VYUF9SVFNUQV9QTUUJMHgxMDAwMCAvKiBQTUUgc3RhdHVzICovCisjZGVmaW5lIFBDSV9FWFBfUlRTVEFfUEVORElORwkweDIwMDAwIC8qIFBNRSBwZW5kaW5nICovCisKKy8qCisgKiBJZiBzZXQsIHRoaXMgc3dpdGNoIHdpbGwgcHJldmVudCB0aGUgUENJZSByb290IHBvcnQgUE1FIHNlcnZpY2UgZHJpdmVyIGZyb20KKyAqIGJlaW5nIHJlZ2lzdGVyZWQuICBDb25zZXF1ZW50bHksIHRoZSBpbnRlcnJ1cHQtYmFzZWQgUENJZSBQTUUgc2lnbmFsaW5nIHdpbGwKKyAqIG5vdCBiZSB1c2VkIGJ5IGFueSBQQ0llIHJvb3QgcG9ydHMgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgYm9vbCBwY2llX3BtZV9kaXNhYmxlZDsKKworLyoKKyAqIFRoZSBQQ0kgRXhwcmVzcyBCYXNlIFNwZWNpZmljYXRpb24gMi4wLCBTZWN0aW9uIDYuMS44LCBzdGF0ZXMgdGhlIGZvbGxvd2luZzoKKyAqICJJbiBvcmRlciB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggbm9uLVBDSSBFeHByZXNzLWF3YXJlIHN5c3RlbQorICogc29mdHdhcmUsIHN5c3RlbSBwb3dlciBtYW5hZ2VtZW50IGxvZ2ljIG11c3QgYmUgY29uZmlndXJlZCBieSBmaXJtd2FyZSB0byB1c2UKKyAqIHRoZSBsZWdhY3kgbWVjaGFuaXNtIG9mIHNpZ25hbGluZyBQTUUgYnkgZGVmYXVsdC4gIFBDSSBFeHByZXNzLWF3YXJlIHN5c3RlbQorICogc29mdHdhcmUgbXVzdCBub3RpZnkgdGhlIGZpcm13YXJlIHByaW9yIHRvIGVuYWJsaW5nIG5hdGl2ZSwgaW50ZXJydXB0LWJhc2VkCisgKiBQTUUgc2lnbmFsaW5nLiIgIEhvd2V2ZXIsIGlmIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IHByb3ZpZGUgdXMgd2l0aCBhIHN1aXRhYmxlCisgKiBub3RpZmljYXRpb24gbWVjaGFuaXNtIG9yIHRoZSBub3RpZmljYXRpb24gZmFpbHMsIGl0IGlzIG5vdCBjbGVhciB3aGV0aGVyIG9yCisgKiBub3Qgd2UgYXJlIHN1cHBvc2VkIHRvIHVzZSB0aGUgaW50ZXJydXB0LWJhc2VkIFBDSWUgUE1FIHNpZ25hbGluZy4gIFRoZQorICogc3dpdGNoIGJlbG93IGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIHRoZSBkZXNpcmVkIGJlaGF2aW91ci4gIFdoZW4gc2V0LCBpdAorICogd2lsbCBtYWtlIHRoZSBrZXJuZWwgdXNlIHRoZSBpbnRlcnJ1cHQtYmFzZWQgUENJZSBQTUUgc2lnbmFsaW5nIHJlZ2FyZGxlc3Mgb2YKKyAqIHRoZSBwbGF0Zm9ybSBub3RpZmljYXRpb24gc3RhdHVzLCBhbHRob3VnaCB0aGUga2VybmVsIHdpbGwgYXR0ZW1wdCB0byBub3RpZnkKKyAqIHRoZSBwbGF0Zm9ybSBhbnl3YXkuICBXaGVuIHVuc2V0LCBpdCB3aWxsIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIHVzaW5nIHRoZQorICogdGhlIGludGVycnVwdC1iYXNlZCBQQ0llIFBNRSBzaWduYWxpbmcgaWYgdGhlIHBsYXRmb3JtIG5vdGlmaWNhdGlvbiBmYWlscywKKyAqIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgorICovCitzdGF0aWMgYm9vbCBwY2llX3BtZV9mb3JjZV9lbmFibGU7CisKKy8qCisgKiBJZiB0aGlzIHN3aXRjaCBpcyBzZXQsIE1TSSB3aWxsIG5vdCBiZSB1c2VkIGZvciBQQ0llIFBNRSBzaWduYWxpbmcuICBUaGlzCisgKiBjYXVzZXMgdGhlIFBDSWUgcG9ydCBkcml2ZXIgdG8gdXNlIElOVHggaW50ZXJydXB0cyBvbmx5LCBidXQgaXQgdHVybnMgb3V0CisgKiB0aGF0IHVzaW5nIE1TSSBmb3IgUENJZSBQTUUgc2lnbmFsaW5nIGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggUENJZSBQTUUtYmFzZWQKKyAqIHdha2UtdXAgZnJvbSBzeXN0ZW0gc2xlZXAgc3RhdGVzLgorICovCitib29sIHBjaWVfcG1lX21zaV9kaXNhYmxlZDsKKworc3RhdGljIGludCBfX2luaXQgcGNpZV9wbWVfc2V0dXAoY2hhciAqc3RyKQoreworCWlmICghc3RyY21wKHN0ciwgIm9mZiIpKQorCQlwY2llX3BtZV9kaXNhYmxlZCA9IHRydWU7CisJZWxzZSBpZiAoIXN0cmNtcChzdHIsICJmb3JjZSIpKQorCQlwY2llX3BtZV9mb3JjZV9lbmFibGUgPSB0cnVlOworCWVsc2UgaWYgKCFzdHJjbXAoc3RyLCAibm9tc2kiKSkKKwkJcGNpZV9wbWVfbXNpX2Rpc2FibGVkID0gdHJ1ZTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoInBjaWVfcG1lPSIsIHBjaWVfcG1lX3NldHVwKTsKKworLyoqCisgKiBwY2llX3BtZV9wbGF0Zm9ybV9zZXR1cCAtIEVuc3VyZSB0aGF0IHRoZSBrZXJuZWwgY29udHJvbHMgdGhlIFBDSWUgUE1FLgorICogQHNydjogUENJZSBQTUUgcm9vdCBwb3J0IHNlcnZpY2UgdG8gdXNlIGZvciBjYXJyeWluZyBvdXQgdGhlIGNoZWNrLgorICoKKyAqIE5vdGlmeSB0aGUgcGxhdGZvcm0gdGhhdCB0aGUgbmF0aXZlIFBDSWUgUE1FIGlzIGdvaW5nIHRvIGJlIHVzZWQgYW5kIHJldHVybgorICogJ3RydWUnIGlmIHRoZSBjb250cm9sIG9mIHRoZSBQQ0llIFBNRSByZWdpc3RlcnMgaGFzIGJlZW4gYWNxdWlyZWQgZnJvbSB0aGUKKyAqIHBsYXRmb3JtLgorICovCitzdGF0aWMgYm9vbCBwY2llX3BtZV9wbGF0Zm9ybV9zZXR1cChzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydikKK3sKKwlpZiAoIXBjaWVfcG1lX3BsYXRmb3JtX25vdGlmeShzcnYpKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gcGNpZV9wbWVfZm9yY2VfZW5hYmxlOworfQorCitzdHJ1Y3QgcGNpZV9wbWVfc2VydmljZV9kYXRhIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHBjaWVfZGV2aWNlICpzcnY7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJYm9vbCBub2lycTsgLyogRG9uJ3QgZW5hYmxlIHRoZSBQTUUgaW50ZXJydXB0IHVzZWQgYnkgdGhpcyBzZXJ2aWNlLiAqLworfTsKKworLyoqCisgKiBwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlIC0gRW5hYmxlL2Rpc2FibGUgUENJZSBQTUUgaW50ZXJydXB0IGdlbmVyYXRpb24uCisgKiBAZGV2OiBQQ0llIHJvb3QgcG9ydCBvciBldmVudCBjb2xsZWN0b3IuCisgKiBAZW5hYmxlOiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgaW50ZXJydXB0LgorICovCitzdGF0aWMgdm9pZCBwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKQoreworCWludCBydGN0bF9wb3M7CisJdTE2IHJ0Y3RsOworCisJcnRjdGxfcG9zID0gcGNpX3BjaWVfY2FwKGRldikgKyBQQ0lfRVhQX1JUQ1RMOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBydGN0bF9wb3MsICZydGN0bCk7CisJaWYgKGVuYWJsZSkKKwkJcnRjdGwgfD0gUENJX0VYUF9SVENUTF9QTUVJRTsKKwllbHNlCisJCXJ0Y3RsICY9IH5QQ0lfRVhQX1JUQ1RMX1BNRUlFOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHJ0Y3RsX3BvcywgcnRjdGwpOworfQorCisvKioKKyAqIHBjaWVfcG1lX2NsZWFyX3N0YXR1cyAtIENsZWFyIHJvb3QgcG9ydCBQTUUgaW50ZXJydXB0IHN0YXR1cy4KKyAqIEBkZXY6IFBDSWUgcm9vdCBwb3J0IG9yIGV2ZW50IGNvbGxlY3Rvci4KKyAqLworc3RhdGljIHZvaWQgcGNpZV9wbWVfY2xlYXJfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHJ0c3RhX3BvczsKKwl1MzIgcnRzdGE7CisKKwlydHN0YV9wb3MgPSBwY2lfcGNpZV9jYXAoZGV2KSArIFBDSV9FWFBfUlRTVEE7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBydHN0YV9wb3MsICZydHN0YSk7CisJcnRzdGEgfD0gUENJX0VYUF9SVFNUQV9QTUU7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHJ0c3RhX3BvcywgcnRzdGEpOworfQorCisvKioKKyAqIHBjaWVfcG1lX3dhbGtfYnVzIC0gU2NhbiBhIFBDSSBidXMgZm9yIGRldmljZXMgYXNzZXJ0aW5nIFBNRSMuCisgKiBAYnVzOiBQQ0kgYnVzIHRvIHNjYW4uCisgKgorICogU2NhbiBnaXZlbiBQQ0kgYnVzIGFuZCBhbGwgYnVzZXMgdW5kZXIgaXQgZm9yIGRldmljZXMgYXNzZXJ0aW5nIFBNRSMuCisgKi8KK3N0YXRpYyBib29sIHBjaWVfcG1lX3dhbGtfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlib29sIHJldCA9IGZhbHNlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCS8qIFNraXAgUENJZSBkZXZpY2VzIGluIGNhc2Ugd2Ugc3RhcnRlZCBmcm9tIGEgcm9vdCBwb3J0LiAqLworCQlpZiAoIXBjaV9pc19wY2llKGRldikgJiYgcGNpX2NoZWNrX3BtZV9zdGF0dXMoZGV2KSkgeworCQkJcG1fcmVxdWVzdF9yZXN1bWUoJmRldi0+ZGV2KTsKKwkJCXJldCA9IHRydWU7CisJCX0KKworCQlpZiAoZGV2LT5zdWJvcmRpbmF0ZSAmJiBwY2llX3BtZV93YWxrX2J1cyhkZXYtPnN1Ym9yZGluYXRlKSkKKwkJCXJldCA9IHRydWU7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwY2llX3BtZV9mcm9tX3BjaV9icmlkZ2UgLSBDaGVjayBpZiBQQ0llLVBDSSBicmlkZ2UgZ2VuZXJhdGVkIGEgUE1FLgorICogQGJ1czogU2Vjb25kYXJ5IGJ1cyBvZiB0aGUgYnJpZGdlLgorICogQGRldmZuOiBEZXZpY2UvZnVuY3Rpb24gbnVtYmVyIHRvIGNoZWNrLgorICoKKyAqIFBNRSBmcm9tIFBDSSBkZXZpY2VzIHVuZGVyIGEgUENJZS1QQ0kgYnJpZGdlIG1heSBiZSBjb252ZXJ0ZWQgdG8gYW4gaW4tYmFuZAorICogUENJZSBQTUUgbWVzc2FnZS4gIEluIHN1Y2ggdGhhdCBjYXNlIHRoZSBicmlkZ2Ugc2hvdWxkIHVzZSB0aGUgUmVxdWVzdGVyIElECisgKiBvZiBkZXZpY2UvZnVuY3Rpb24gbnVtYmVyIDAgb24gaXRzIHNlY29uZGFyeSBidXMuCisgKi8KK3N0YXRpYyBib29sIHBjaWVfcG1lX2Zyb21fcGNpX2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1OCBkZXZmbikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCWlmIChkZXZmbikKKwkJcmV0dXJuIGZhbHNlOworCisJZGV2ID0gcGNpX2Rldl9nZXQoYnVzLT5zZWxmKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHBjaV9pc19wY2llKGRldikgJiYgZGV2LT5wY2llX3R5cGUgPT0gUENJX0VYUF9UWVBFX1BDSV9CUklER0UpIHsKKwkJZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7CisJCWlmIChwY2llX3BtZV93YWxrX2J1cyhidXMpKQorCQkJZm91bmQgPSB0cnVlOworCQl1cF9yZWFkKCZwY2lfYnVzX3NlbSk7CisJfQorCisJcGNpX2Rldl9wdXQoZGV2KTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qKgorICogcGNpZV9wbWVfaGFuZGxlX3JlcXVlc3QgLSBGaW5kIGRldmljZSB0aGF0IGdlbmVyYXRlZCBQTUUgYW5kIGhhbmRsZSBpdC4KKyAqIEBwb3J0OiBSb290IHBvcnQgb3IgZXZlbnQgY29sbGVjdG9yIHRoYXQgZ2VuZXJhdGVkIHRoZSBQTUUgaW50ZXJydXB0LgorICogQHJlcV9pZDogUENJZSBSZXF1ZXN0ZXIgSUQgb2YgdGhlIGRldmljZSB0aGF0IGdlbmVyYXRlZCB0aGUgUE1FLgorICovCitzdGF0aWMgdm9pZCBwY2llX3BtZV9oYW5kbGVfcmVxdWVzdChzdHJ1Y3QgcGNpX2RldiAqcG9ydCwgdTE2IHJlcV9pZCkKK3sKKwl1OCBidXNuciA9IHJlcV9pZCA+PiA4LCBkZXZmbiA9IHJlcV9pZCAmIDB4ZmY7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCS8qIEZpcnN0LCBjaGVjayBpZiB0aGUgUE1FIGlzIGZyb20gdGhlIHJvb3QgcG9ydCBpdHNlbGYuICovCisJaWYgKHBvcnQtPmRldmZuID09IGRldmZuICYmIHBvcnQtPmJ1cy0+bnVtYmVyID09IGJ1c25yKSB7CisJCWlmIChwY2lfY2hlY2tfcG1lX3N0YXR1cyhwb3J0KSkgeworCQkJcG1fcmVxdWVzdF9yZXN1bWUoJnBvcnQtPmRldik7CisJCQlmb3VuZCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQXBwYXJlbnRseSwgdGhlIHJvb3QgcG9ydCBnZW5lcmF0ZWQgdGhlIFBNRSBvbiBiZWhhbGYKKwkJCSAqIG9mIGEgbm9uLVBDSWUgZGV2aWNlIGRvd25zdHJlYW0uICBJZiB0aGlzIGlzIGRvbmUgYnkKKwkJCSAqIGEgcm9vdCBwb3J0LCB0aGUgUmVxdWVzdGVyIElEIGZpZWxkIGluIGl0cyBzdGF0dXMKKwkJCSAqIHJlZ2lzdGVyIG1heSBjb250YWluIGVpdGhlciB0aGUgcm9vdCBwb3J0J3MsIG9yIHRoZQorCQkJICogc291cmNlIGRldmljZSdzIGluZm9ybWF0aW9uIChQQ0kgRXhwcmVzcyBCYXNlCisJCQkgKiBTcGVjaWZpY2F0aW9uLCBSZXYuIDIuMCwgU2VjdGlvbiA2LjEuOSkuCisJCQkgKi8KKwkJCWRvd25fcmVhZCgmcGNpX2J1c19zZW0pOworCQkJZm91bmQgPSBwY2llX3BtZV93YWxrX2J1cyhwb3J0LT5zdWJvcmRpbmF0ZSk7CisJCQl1cF9yZWFkKCZwY2lfYnVzX3NlbSk7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJLyogU2Vjb25kLCBmaW5kIHRoZSBidXMgdGhlIHNvdXJjZSBkZXZpY2UgaXMgb24uICovCisJYnVzID0gcGNpX2ZpbmRfYnVzKHBjaV9kb21haW5fbnIocG9ydC0+YnVzKSwgYnVzbnIpOworCWlmICghYnVzKQorCQlnb3RvIG91dDsKKworCS8qIE5leHQsIGNoZWNrIGlmIHRoZSBQTUUgaXMgZnJvbSBhIFBDSWUtUENJIGJyaWRnZS4gKi8KKwlmb3VuZCA9IHBjaWVfcG1lX2Zyb21fcGNpX2JyaWRnZShidXMsIGRldmZuKTsKKwlpZiAoZm91bmQpCisJCWdvdG8gb3V0OworCisJLyogRmluYWxseSwgdHJ5IHRvIGZpbmQgdGhlIFBNRSBzb3VyY2Ugb24gdGhlIGJ1cy4gKi8KKwlkb3duX3JlYWQoJnBjaV9idXNfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJcGNpX2Rldl9nZXQoZGV2KTsKKwkJaWYgKGRldi0+ZGV2Zm4gPT0gZGV2Zm4pIHsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJCXBjaV9kZXZfcHV0KGRldik7CisJfQorCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKKworCWlmIChmb3VuZCkgeworCQkvKiBUaGUgZGV2aWNlIGlzIHRoZXJlLCBidXQgd2UgaGF2ZSB0byBjaGVjayBpdHMgUE1FIHN0YXR1cy4gKi8KKwkJZm91bmQgPSBwY2lfY2hlY2tfcG1lX3N0YXR1cyhkZXYpOworCQlpZiAoZm91bmQpCisJCQlwbV9yZXF1ZXN0X3Jlc3VtZSgmZGV2LT5kZXYpOworCQlwY2lfZGV2X3B1dChkZXYpOworCX0gZWxzZSBpZiAoZGV2Zm4pIHsKKwkJLyoKKwkJICogVGhlIGRldmljZSBpcyBub3QgdGhlcmUsIGJ1dCB3ZSBjYW4gc3RpbGwgdHJ5IHRvIHJlY292ZXIgYnkKKwkJICogYXNzdW1pbmcgdGhhdCB0aGUgUE1FIHdhcyByZXBvcnRlZCBieSBhIFBDSWUtUENJIGJyaWRnZSB0aGF0CisJCSAqIHVzZWQgZGV2Zm4gZGlmZmVyZW50IGZyb20gemVyby4KKwkJICovCisJCWRldl9kYmcoJnBvcnQtPmRldiwgIlBNRSBpbnRlcnJ1cHQgZ2VuZXJhdGVkIGZvciAiCisJCQkibm9uLWV4aXN0ZW50IGRldmljZSAlMDJ4OiUwMnguJWRcbiIsCisJCQlidXNuciwgUENJX1NMT1QoZGV2Zm4pLCBQQ0lfRlVOQyhkZXZmbikpOworCQlmb3VuZCA9IHBjaWVfcG1lX2Zyb21fcGNpX2JyaWRnZShidXMsIDApOworCX0KKworIG91dDoKKwlpZiAoIWZvdW5kKQorCQlkZXZfZGJnKCZwb3J0LT5kZXYsICJTcHVyaW91cyBuYXRpdmUgUE1FIGludGVycnVwdCFcbiIpOworfQorCisvKioKKyAqIHBjaWVfcG1lX3dvcmtfZm4gLSBXb3JrIGhhbmRsZXIgZm9yIFBDSWUgUE1FIGludGVycnVwdC4KKyAqIEB3b3JrOiBXb3JrIHN0cnVjdHVyZSBnaXZpbmcgYWNjZXNzIHRvIHNlcnZpY2UgZGF0YS4KKyAqLworc3RhdGljIHZvaWQgcGNpZV9wbWVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBjaWVfcG1lX3NlcnZpY2VfZGF0YSAqZGF0YSA9CisJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBjaWVfcG1lX3NlcnZpY2VfZGF0YSwgd29yayk7CisJc3RydWN0IHBjaV9kZXYgKnBvcnQgPSBkYXRhLT5zcnYtPnBvcnQ7CisJaW50IHJ0c3RhX3BvczsKKwl1MzIgcnRzdGE7CisKKwlydHN0YV9wb3MgPSBwY2lfcGNpZV9jYXAocG9ydCkgKyBQQ0lfRVhQX1JUU1RBOworCisJc3Bpbl9sb2NrX2lycSgmZGF0YS0+bG9jayk7CisKKwlmb3IgKDs7KSB7CisJCWlmIChkYXRhLT5ub2lycSkKKwkJCWJyZWFrOworCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwb3J0LCBydHN0YV9wb3MsICZydHN0YSk7CisJCWlmIChydHN0YSAmIFBDSV9FWFBfUlRTVEFfUE1FKSB7CisJCQkvKgorCQkJICogQ2xlYXIgUE1FIHN0YXR1cyBvZiB0aGUgcG9ydC4gIElmIHRoZXJlIGFyZSBvdGhlcgorCQkJICogcGVuZGluZyBQTUVzLCB0aGUgc3RhdHVzIHdpbGwgYmUgc2V0IGFnYWluLgorCQkJICovCisJCQlwY2llX3BtZV9jbGVhcl9zdGF0dXMocG9ydCk7CisKKwkJCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bG9jayk7CisJCQlwY2llX3BtZV9oYW5kbGVfcmVxdWVzdChwb3J0LCBydHN0YSAmIDB4ZmZmZik7CisJCQlzcGluX2xvY2tfaXJxKCZkYXRhLT5sb2NrKTsKKworCQkJY29udGludWU7CisJCX0KKworCQkvKiBObyBuZWVkIHRvIGxvb3AgaWYgdGhlcmUgYXJlIG5vIG1vcmUgUE1FcyBwZW5kaW5nLiAqLworCQlpZiAoIShydHN0YSAmIFBDSV9FWFBfUlRTVEFfUEVORElORykpCisJCQlicmVhazsKKworCQlzcGluX3VubG9ja19pcnEoJmRhdGEtPmxvY2spOworCQljcHVfcmVsYXgoKTsKKwkJc3Bpbl9sb2NrX2lycSgmZGF0YS0+bG9jayk7CisJfQorCisJaWYgKCFkYXRhLT5ub2lycSkKKwkJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCB0cnVlKTsKKworCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bG9jayk7Cit9CisKKy8qKgorICogcGNpZV9wbWVfaXJxIC0gSW50ZXJydXB0IGhhbmRsZXIgZm9yIFBDSWUgcm9vdCBwb3J0IFBNRSBpbnRlcnJ1cHQuCisgKiBAaXJxOiBJbnRlcnJ1cHQgdmVjdG9yLgorICogQGNvbnRleHQ6IEludGVycnVwdCBjb250ZXh0IHBvaW50ZXIuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBwY2llX3BtZV9pcnEoaW50IGlycSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcG9ydDsKKwlzdHJ1Y3QgcGNpZV9wbWVfc2VydmljZV9kYXRhICpkYXRhOworCWludCBydHN0YV9wb3M7CisJdTMyIHJ0c3RhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwb3J0ID0gKChzdHJ1Y3QgcGNpZV9kZXZpY2UgKiljb250ZXh0KS0+cG9ydDsKKwlkYXRhID0gZ2V0X3NlcnZpY2VfZGF0YSgoc3RydWN0IHBjaWVfZGV2aWNlICopY29udGV4dCk7CisKKwlydHN0YV9wb3MgPSBwY2lfcGNpZV9jYXAocG9ydCkgKyBQQ0lfRVhQX1JUU1RBOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocG9ydCwgcnRzdGFfcG9zLCAmcnRzdGEpOworCisJaWYgKCEocnRzdGEgJiBQQ0lfRVhQX1JUU1RBX1BNRSkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCBmYWxzZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCisJLyogV2UgZG9uJ3QgdXNlIHBtX3dxLCBiZWNhdXNlIGl0J3MgZnJlZXphYmxlLiAqLworCXNjaGVkdWxlX3dvcmsoJmRhdGEtPndvcmspOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIHBjaWVfcG1lX3NldF9uYXRpdmUgLSBTZXQgdGhlIFBNRSBpbnRlcnJ1cHQgZmxhZyBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQGRldjogUENJIGRldmljZSB0byBoYW5kbGUuCisgKiBAaWduOiBJZ25vcmVkLgorICovCitzdGF0aWMgaW50IHBjaWVfcG1lX3NldF9uYXRpdmUoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqaWduKQoreworCWRldl9pbmZvKCZkZXYtPmRldiwgIlNpZ25hbGluZyBQTUUgdGhyb3VnaCBQQ0llIFBNRSBpbnRlcnJ1cHRcbiIpOworCisJZGV2aWNlX3NldF9ydW5fd2FrZSgmZGV2LT5kZXYsIHRydWUpOworCWRldi0+cG1lX2ludGVycnVwdCA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpZV9wbWVfbWFya19kZXZpY2VzIC0gU2V0IHRoZSBQTUUgaW50ZXJydXB0IGZsYWcgZm9yIGRldmljZXMgYmVsb3cgYSBwb3J0LgorICogQHBvcnQ6IFBDSWUgcm9vdCBwb3J0IG9yIGV2ZW50IGNvbGxlY3RvciB0byBoYW5kbGUuCisgKgorICogRm9yIGVhY2ggZGV2aWNlIGJlbG93IGdpdmVuIHJvb3QgcG9ydCwgaW5jbHVkaW5nIHRoZSBwb3J0IGl0c2VsZiAob3IgZm9yIGVhY2gKKyAqIHJvb3QgY29tcGxleCBpbnRlZ3JhdGVkIGVuZHBvaW50IGlmIEBwb3J0IGlzIGEgcm9vdCBjb21wbGV4IGV2ZW50IGNvbGxlY3RvcikKKyAqIHNldCB0aGUgZmxhZyBpbmRpY2F0aW5nIHRoYXQgaXQgY2FuIHNpZ25hbCBydW4tdGltZSB3YWtlLXVwIGV2ZW50cyB2aWEgUENJZQorICogUE1FIGludGVycnVwdHMuCisgKi8KK3N0YXRpYyB2b2lkIHBjaWVfcG1lX21hcmtfZGV2aWNlcyhzdHJ1Y3QgcGNpX2RldiAqcG9ydCkKK3sKKwlwY2llX3BtZV9zZXRfbmF0aXZlKHBvcnQsIE5VTEwpOworCWlmIChwb3J0LT5zdWJvcmRpbmF0ZSkgeworCQlwY2lfd2Fsa19idXMocG9ydC0+c3Vib3JkaW5hdGUsIHBjaWVfcG1lX3NldF9uYXRpdmUsIE5VTEwpOworCX0gZWxzZSB7CisJCXN0cnVjdCBwY2lfYnVzICpidXMgPSBwb3J0LT5idXM7CisJCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwkJLyogQ2hlY2sgaWYgdGhpcyBpcyBhIHJvb3QgcG9ydCBldmVudCBjb2xsZWN0b3IuICovCisJCWlmIChwb3J0LT5wY2llX3R5cGUgIT0gUENJX0VYUF9UWVBFX1JDX0VDIHx8ICFidXMpCisJCQlyZXR1cm47CisKKwkJZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKKwkJCWlmIChwY2lfaXNfcGNpZShkZXYpCisJCQkgICAgJiYgZGV2LT5wY2llX3R5cGUgPT0gUENJX0VYUF9UWVBFX1JDX0VORCkKKwkJCQlwY2llX3BtZV9zZXRfbmF0aXZlKGRldiwgTlVMTCk7CisJCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKKwl9Cit9CisKKy8qKgorICogcGNpZV9wbWVfcHJvYmUgLSBJbml0aWFsaXplIFBDSWUgUE1FIHNlcnZpY2UgZm9yIGdpdmVuIHJvb3QgcG9ydC4KKyAqIEBzcnY6IFBDSWUgc2VydmljZSB0byBpbml0aWFsaXplLgorICovCitzdGF0aWMgaW50IHBjaWVfcG1lX3Byb2JlKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwb3J0OworCXN0cnVjdCBwY2llX3BtZV9zZXJ2aWNlX2RhdGEgKmRhdGE7CisJaW50IHJldDsKKworCWlmICghcGNpZV9wbWVfcGxhdGZvcm1fc2V0dXAoc3J2KSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJmRhdGEtPmxvY2spOworCUlOSVRfV09SSygmZGF0YS0+d29yaywgcGNpZV9wbWVfd29ya19mbik7CisJZGF0YS0+c3J2ID0gc3J2OworCXNldF9zZXJ2aWNlX2RhdGEoc3J2LCBkYXRhKTsKKworCXBvcnQgPSBzcnYtPnBvcnQ7CisJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCBmYWxzZSk7CisJcGNpZV9wbWVfY2xlYXJfc3RhdHVzKHBvcnQpOworCisJcmV0ID0gcmVxdWVzdF9pcnEoc3J2LT5pcnEsIHBjaWVfcG1lX2lycSwgSVJRRl9TSEFSRUQsICJQQ0llIFBNRSIsIHNydik7CisJaWYgKHJldCkgeworCQlrZnJlZShkYXRhKTsKKwl9IGVsc2UgeworCQlwY2llX3BtZV9tYXJrX2RldmljZXMocG9ydCk7CisJCXBjaWVfcG1lX2ludGVycnVwdF9lbmFibGUocG9ydCwgdHJ1ZSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwY2llX3BtZV9zdXNwZW5kIC0gU3VzcGVuZCBQQ0llIFBNRSBzZXJ2aWNlIGRldmljZS4KKyAqIEBzcnY6IFBDSWUgc2VydmljZSBkZXZpY2UgdG8gc3VzcGVuZC4KKyAqLworc3RhdGljIGludCBwY2llX3BtZV9zdXNwZW5kKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCXN0cnVjdCBwY2llX3BtZV9zZXJ2aWNlX2RhdGEgKmRhdGEgPSBnZXRfc2VydmljZV9kYXRhKHNydik7CisJc3RydWN0IHBjaV9kZXYgKnBvcnQgPSBzcnYtPnBvcnQ7CisKKwlzcGluX2xvY2tfaXJxKCZkYXRhLT5sb2NrKTsKKwlwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlKHBvcnQsIGZhbHNlKTsKKwlwY2llX3BtZV9jbGVhcl9zdGF0dXMocG9ydCk7CisJZGF0YS0+bm9pcnEgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bG9jayk7CisKKwlzeW5jaHJvbml6ZV9pcnEoc3J2LT5pcnEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpZV9wbWVfcmVzdW1lIC0gUmVzdW1lIFBDSWUgUE1FIHNlcnZpY2UgZGV2aWNlLgorICogQHNydiAtIFBDSWUgc2VydmljZSBkZXZpY2UgdG8gcmVzdW1lLgorICovCitzdGF0aWMgaW50IHBjaWVfcG1lX3Jlc3VtZShzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydikKK3sKKwlzdHJ1Y3QgcGNpZV9wbWVfc2VydmljZV9kYXRhICpkYXRhID0gZ2V0X3NlcnZpY2VfZGF0YShzcnYpOworCXN0cnVjdCBwY2lfZGV2ICpwb3J0ID0gc3J2LT5wb3J0OworCisJc3Bpbl9sb2NrX2lycSgmZGF0YS0+bG9jayk7CisJZGF0YS0+bm9pcnEgPSBmYWxzZTsKKwlwY2llX3BtZV9jbGVhcl9zdGF0dXMocG9ydCk7CisJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCB0cnVlKTsKKwlzcGluX3VubG9ja19pcnEoJmRhdGEtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpZV9wbWVfcmVtb3ZlIC0gUHJlcGFyZSBQQ0llIFBNRSBzZXJ2aWNlIGRldmljZSBmb3IgcmVtb3ZhbC4KKyAqIEBzcnYgLSBQQ0llIHNlcnZpY2UgZGV2aWNlIHRvIHJlc3VtZS4KKyAqLworc3RhdGljIHZvaWQgcGNpZV9wbWVfcmVtb3ZlKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCXBjaWVfcG1lX3N1c3BlbmQoc3J2KTsKKwlmcmVlX2lycShzcnYtPmlycSwgc3J2KTsKKwlrZnJlZShnZXRfc2VydmljZV9kYXRhKHNydikpOworfQorCitzdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciBwY2llX3BtZV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInBjaWVfcG1lIiwKKwkucG9ydF90eXBlIAk9IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQsCisJLnNlcnZpY2UgCT0gUENJRV9QT1JUX1NFUlZJQ0VfUE1FLAorCisJLnByb2JlCQk9IHBjaWVfcG1lX3Byb2JlLAorCS5zdXNwZW5kCT0gcGNpZV9wbWVfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHBjaWVfcG1lX3Jlc3VtZSwKKwkucmVtb3ZlCQk9IHBjaWVfcG1lX3JlbW92ZSwKK307CisKKy8qKgorICogcGNpZV9wbWVfc2VydmljZV9pbml0IC0gUmVnaXN0ZXIgdGhlIFBDSWUgUE1FIHNlcnZpY2UgZHJpdmVyLgorICovCitzdGF0aWMgaW50IF9faW5pdCBwY2llX3BtZV9zZXJ2aWNlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpZV9wbWVfZGlzYWJsZWQgPworCQktRU5PREVWIDogcGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIoJnBjaWVfcG1lX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBjaWVfcG1lX3NlcnZpY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZS5oIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzBkMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuaAorICoKKyAqIFBDSSBFeHByZXNzIFJvb3QgUG9ydCBQTUUgc2lnbmFsaW5nIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPiwgTm92ZWxsIEluYy4KKyAqLworCisjaWZuZGVmIF9QQ0lFX1BNRV9IXworI2RlZmluZSBfUENJRV9QTUVfSF8KKworc3RydWN0IHBjaWVfZGV2aWNlOworCisjaWZkZWYgQ09ORklHX0FDUEkKK2V4dGVybiBpbnQgcGNpZV9wbWVfYWNwaV9zZXR1cChzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydik7CisKK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfcG1lX3BsYXRmb3JtX25vdGlmeShzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydikKK3sKKwlyZXR1cm4gcGNpZV9wbWVfYWNwaV9zZXR1cChzcnYpOworfQorI2Vsc2UgLyogIUNPTkZJR19BQ1BJICovCitzdGF0aWMgaW5saW5lIGludCBwY2llX3BtZV9wbGF0Zm9ybV9ub3RpZnkoc3RydWN0IHBjaWVfZGV2aWNlICpzcnYpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogIUNPTkZJR19BQ1BJICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWVfYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWVfYWNwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYWIyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZV9hY3BpLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIFBDSWUgTmF0aXZlIFBNRSBzdXBwb3J0LCBBQ1BJLXJlbGF0ZWQgcGFydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+LCBOb3ZlbGwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFYyLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaWVwb3J0X2lmLmg+CisKKy8qKgorICogcGNpZV9wbWVfYWNwaV9zZXR1cCAtIFJlcXVlc3QgdGhlIEFDUEkgQklPUyB0byByZWxlYXNlIGNvbnRyb2wgb3ZlciBQQ0llIFBNRS4KKyAqIEBzcnYgLSBQQ0llIFBNRSBzZXJ2aWNlIGZvciBhIHJvb3QgcG9ydCBvciBldmVudCBjb2xsZWN0b3IuCisgKgorICogSW52b2tlZCB3aGVuIHRoZSBQQ0llIGJ1cyB0eXBlIGxvYWRzIFBDSWUgUE1FIHNlcnZpY2UgZHJpdmVyLiAgVG8gYXZvaWQKKyAqIGNvbmZsaWN0IHdpdGggdGhlIEJJT1MgUENJZSBzdXBwb3J0IHJlcXVpcmVzIHRoZSBCSU9TIHRvIHlpZWxkIFBDSWUgUE1FCisgKiBjb250cm9sIHRvIHRoZSBrZXJuZWwuCisgKi8KK2ludCBwY2llX3BtZV9hY3BpX3NldHVwKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX05PVF9GT1VORDsKKwlzdHJ1Y3QgcGNpX2RldiAqcG9ydCA9IHNydi0+cG9ydDsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJaW50IGVycm9yID0gMDsKKworCWlmIChhY3BpX3BjaV9kaXNhYmxlZCkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlkZXZfaW5mbygmcG9ydC0+ZGV2LCAiUmVxdWVzdGluZyBjb250cm9sIG9mIFBDSWUgUE1FIGZyb20gQUNQSSBCSU9TXG4iKTsKKworCWhhbmRsZSA9IGFjcGlfZmluZF9yb290X2JyaWRnZV9oYW5kbGUocG9ydCk7CisJaWYgKCFoYW5kbGUpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RhdHVzID0gYWNwaV9wY2lfb3NjX2NvbnRyb2xfc2V0KGhhbmRsZSwKKwkJCU9TQ19QQ0lfRVhQUkVTU19QTUVfQ09OVFJPTCB8CisJCQlPU0NfUENJX0VYUFJFU1NfQ0FQX1NUUlVDVFVSRV9DT05UUk9MKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJZGV2X2luZm8oJnBvcnQtPmRldiwKKwkJCSJGYWlsZWQgdG8gcmVjZWl2ZSBjb250cm9sIG9mIFBDSWUgUE1FIHNlcnZpY2U6ICVzXG4iLAorCQkJKHN0YXR1cyA9PSBBRV9TVVBQT1JUIHx8IHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpID8KKwkJCSJubyBfT1NDIHN1cHBvcnQiIDogIkFDUEkgX09TQyBmYWlsZWQiKTsKKwkJZXJyb3IgPSAtRU5PREVWOworCX0KKworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydi5oIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKaW5kZXggYWFlYjlkMi4uODEzYTVjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKQEAgLTMwLDQgKzMwLDIxIEBACiBleHRlcm4gaW50IF9fbXVzdF9jaGVjayBwY2llX3BvcnRfYnVzX3JlZ2lzdGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGNpZV9wb3J0X2J1c191bnJlZ2lzdGVyKHZvaWQpOwogCisjaWZkZWYgQ09ORklHX1BDSUVfUE1FCitleHRlcm4gYm9vbCBwY2llX3BtZV9tc2lfZGlzYWJsZWQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2llX3BtZV9kaXNhYmxlX21zaSh2b2lkKQoreworCXBjaWVfcG1lX21zaV9kaXNhYmxlZCA9IHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2llX3BtZV9ub19tc2kodm9pZCkKK3sKKwlyZXR1cm4gcGNpZV9wbWVfbXNpX2Rpc2FibGVkOworfQorI2Vsc2UgLyogIUNPTkZJR19QQ0lFX1BNRSAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaWVfcG1lX2Rpc2FibGVfbXNpKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV9wbWVfbm9fbXNpKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYgLyogIUNPTkZJR19QQ0lFX1BNRSAqLworCiAjZW5kaWYgLyogX1BPUlREUlZfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCmluZGV4IGIxNzQxODguLmU3M2VmZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYwpAQCAtMTg2LDE2ICsxODYsMjQgQEAKICAqLwogc3RhdGljIGludCBpbml0X3NlcnZpY2VfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgKmlycXMsIGludCBtYXNrKQogewotCWludCBpLCBpcnE7CisJaW50IGksIGlycSA9IC0xOworCisJLyogV2UgaGF2ZSB0byB1c2UgSU5UeCBpZiBNU0kgY2Fubm90IGJlIHVzZWQgZm9yIFBDSWUgUE1FLiAqLworCWlmICgobWFzayAmIFBDSUVfUE9SVF9TRVJWSUNFX1BNRSkgJiYgcGNpZV9wbWVfbm9fbXNpKCkpIHsKKwkJaWYgKGRldi0+cGluKQorCQkJaXJxID0gZGV2LT5pcnE7CisJCWdvdG8gbm9fbXNpOworCX0KIAogCS8qIFRyeSB0byB1c2UgTVNJLVggaWYgc3VwcG9ydGVkICovCiAJaWYgKCFwY2llX3BvcnRfZW5hYmxlX21zaXgoZGV2LCBpcnFzLCBtYXNrKSkKIAkJcmV0dXJuIDA7CisKIAkvKiBXZSdyZSBub3QgZ29pbmcgdG8gdXNlIE1TSS1YLCBzbyB0cnkgTVNJIGFuZCBmYWxsIGJhY2sgdG8gSU5UeCAqLwotCWlycSA9IC0xOwogCWlmICghcGNpX2VuYWJsZV9tc2koZGV2KSB8fCBkZXYtPnBpbikKIAkJaXJxID0gZGV2LT5pcnE7CiAKKyBub19tc2k6CiAJZm9yIChpID0gMDsgaSA8IFBDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVM7IGkrKykKIAkJaXJxc1tpXSA9IGlycTsKIAlpcnFzW1BDSUVfUE9SVF9TRVJWSUNFX1ZDX1NISUZUXSA9IC0xOwpAQCAtMjc3LDYgKzI4NSw3IEBACiAJCSAgICAgcGNpX25hbWUocGRldiksCiAJCSAgICAgZ2V0X2Rlc2NyaXB0b3JfaWQocGRldi0+cGNpZV90eXBlLCBzZXJ2aWNlKSk7CiAJZGV2aWNlLT5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZChkZXZpY2UpOwogCiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKGRldmljZSk7CiAJaWYgKHJldHZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwppbmRleCAxM2M4OTcyLi4xMjdlOGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaWVwb3J0X2lmLmg+CiAjaW5jbHVkZSA8bGludXgvYWVyLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKICNpbmNsdWRlICJwb3J0ZHJ2LmgiCiAjaW5jbHVkZSAiYWVyL2FlcmRydi5oIgpAQCAtMjczLDEwICsyNzQsMzYgQEAKIAkuZHJpdmVyLnBtIAk9IFBDSUVfUE9SVERSVl9QTV9PUFMsCiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBkbWlfcGNpZV9wbWVfZGlzYWJsZV9tc2koY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCit7CisJcHJfbm90aWNlKCIlcyBkZXRlY3RlZDogd2lsbCBub3QgdXNlIE1TSSBmb3IgUENJZSBQTUUgc2lnbmFsaW5nXG4iLAorCQkJZC0+aWRlbnQpOworCXBjaWVfcG1lX2Rpc2FibGVfbXNpKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIHBjaWVfcG9ydGRydl9kbWlfdGFibGVbXSA9IHsKKwkvKgorCSAqIEJveGVzIHRoYXQgc2hvdWxkIG5vdCB1c2UgTVNJIGZvciBQQ0llIFBNRSBzaWduYWxpbmcuCisJICovCisJeworCSAuY2FsbGJhY2sgPSBkbWlfcGNpZV9wbWVfZGlzYWJsZV9tc2ksCisJIC5pZGVudCA9ICJNU0kgV2luZCBVLTEwMCIsCisJIC5tYXRjaGVzID0geworCQkgICAgIERNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKKwkJICAgICAJCSJNSUNSTy1TVEFSIElOVEVSTkFUSU9OQUwgQ08uLCBMVEQiKSwKKwkJICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlUtMTAwIiksCisJCSAgICAgfSwKKwkgfSwKKwkge30KK307CisKIHN0YXRpYyBpbnQgX19pbml0IHBjaWVfcG9ydGRydl9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbDsKIAorCWRtaV9jaGVja19zeXN0ZW0ocGNpZV9wb3J0ZHJ2X2RtaV90YWJsZSk7CisKIAlyZXR2YWwgPSBwY2llX3BvcnRfYnVzX3JlZ2lzdGVyKCk7CiAJaWYgKHJldHZhbCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ0lFOiBidXNfcmVnaXN0ZXIgZXJyb3I6ICVkXG4iLCByZXR2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKaW5kZXggOThmZmIyZC4uMmE5NDMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcHJvYmUuYworKysgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCkBAIC04OSw2ICs4OSw3IEBACiAKIAlpZiAocGNpX2J1cy0+YnJpZGdlKQogCQlwdXRfZGV2aWNlKHBjaV9idXMtPmJyaWRnZSk7CisJcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKHBjaV9idXMpOwogCWtmcmVlKHBjaV9idXMpOwogfQogCkBAIC0yODEsMjYgKzI4MiwxMiBAQAogCX0KIH0KIAotdm9pZCBfX2RldmluaXQgcGNpX3JlYWRfYnJpZGdlX2Jhc2VzKHN0cnVjdCBwY2lfYnVzICpjaGlsZCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2lfcmVhZF9icmlkZ2VfaW8oc3RydWN0IHBjaV9idXMgKmNoaWxkKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKIAl1OCBpb19iYXNlX2xvLCBpb19saW1pdF9sbzsKLQl1MTYgbWVtX2Jhc2VfbG8sIG1lbV9saW1pdF9sbzsKIAl1bnNpZ25lZCBsb25nIGJhc2UsIGxpbWl0OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWludCBpOwotCi0JaWYgKHBjaV9pc19yb290X2J1cyhjaGlsZCkpCS8qIEl0J3MgYSBob3N0IGJ1cywgbm90aGluZyB0byByZWFkICovCi0JCXJldHVybjsKLQotCWRldl9pbmZvKCZkZXYtPmRldiwgIlBDSSBicmlkZ2UgdG8gW2J1cyAlMDJ4LSUwMnhdJXNcbiIsCi0JCSBjaGlsZC0+c2Vjb25kYXJ5LCBjaGlsZC0+c3Vib3JkaW5hdGUsCi0JCSBkZXYtPnRyYW5zcGFyZW50ID8gIiAoc3VidHJhY3RpdmUgZGVjb2RlKSI6ICIiKTsKLQotCWlmIChkZXYtPnRyYW5zcGFyZW50KSB7Ci0JCWZvcihpID0gMzsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKQotCQkJY2hpbGQtPnJlc291cmNlW2ldID0gY2hpbGQtPnBhcmVudC0+cmVzb3VyY2VbaSAtIDNdOwotCX0KIAogCXJlcyA9IGNoaWxkLT5yZXNvdXJjZVswXTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9JT19CQVNFLCAmaW9fYmFzZV9sbyk7CkBAIC0zMTYsMjYgKzMwMyw1MCBAQAogCQlsaW1pdCB8PSAoaW9fbGltaXRfaGkgPDwgMTYpOwogCX0KIAotCWlmIChiYXNlIDw9IGxpbWl0KSB7CisJaWYgKGJhc2UgJiYgYmFzZSA8PSBsaW1pdCkgewogCQlyZXMtPmZsYWdzID0gKGlvX2Jhc2VfbG8gJiBQQ0lfSU9fUkFOR0VfVFlQRV9NQVNLKSB8IElPUkVTT1VSQ0VfSU87CiAJCWlmICghcmVzLT5zdGFydCkKIAkJCXJlcy0+c3RhcnQgPSBiYXNlOwogCQlpZiAoIXJlcy0+ZW5kKQogCQkJcmVzLT5lbmQgPSBsaW1pdCArIDB4ZmZmOwogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgIiAgYnJpZGdlIHdpbmRvdyAlcFJcbiIsIHJlcyk7CisJfSBlbHNlIHsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCQkgIiAgYnJpZGdlIHdpbmRvdyBbaW8gICUwNGx4IC0gJTA0bHhdIHJlZyByZWFkaW5nXG4iLAorCQkJCSBiYXNlLCBsaW1pdCk7CiAJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpX3JlYWRfYnJpZGdlX21taW8oc3RydWN0IHBjaV9idXMgKmNoaWxkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKKwl1MTYgbWVtX2Jhc2VfbG8sIG1lbV9saW1pdF9sbzsKKwl1bnNpZ25lZCBsb25nIGJhc2UsIGxpbWl0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJcmVzID0gY2hpbGQtPnJlc291cmNlWzFdOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX01FTU9SWV9CQVNFLCAmbWVtX2Jhc2VfbG8pOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX01FTU9SWV9MSU1JVCwgJm1lbV9saW1pdF9sbyk7CiAJYmFzZSA9IChtZW1fYmFzZV9sbyAmIFBDSV9NRU1PUllfUkFOR0VfTUFTSykgPDwgMTY7CiAJbGltaXQgPSAobWVtX2xpbWl0X2xvICYgUENJX01FTU9SWV9SQU5HRV9NQVNLKSA8PCAxNjsKLQlpZiAoYmFzZSA8PSBsaW1pdCkgeworCWlmIChiYXNlICYmIGJhc2UgPD0gbGltaXQpIHsKIAkJcmVzLT5mbGFncyA9IChtZW1fYmFzZV9sbyAmIFBDSV9NRU1PUllfUkFOR0VfVFlQRV9NQVNLKSB8IElPUkVTT1VSQ0VfTUVNOwogCQlyZXMtPnN0YXJ0ID0gYmFzZTsKIAkJcmVzLT5lbmQgPSBsaW1pdCArIDB4ZmZmZmY7CiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiICBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwKKwkJCSIgIGJyaWRnZSB3aW5kb3cgW21lbSAweCUwOGx4IC0gMHglMDhseF0gcmVnIHJlYWRpbmdcbiIsCisJCQkJCSBiYXNlLCBsaW1pdCArIDB4ZmZmZmYpOwogCX0KK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaV9yZWFkX2JyaWRnZV9tbWlvX3ByZWYoc3RydWN0IHBjaV9idXMgKmNoaWxkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKKwl1MTYgbWVtX2Jhc2VfbG8sIG1lbV9saW1pdF9sbzsKKwl1bnNpZ25lZCBsb25nIGJhc2UsIGxpbWl0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJcmVzID0gY2hpbGQtPnJlc291cmNlWzJdOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX1BSRUZfTUVNT1JZX0JBU0UsICZtZW1fYmFzZV9sbyk7CkBAIC0zNjYsNyArMzc3LDcgQEAKICNlbmRpZgogCQl9CiAJfQotCWlmIChiYXNlIDw9IGxpbWl0KSB7CisJaWYgKGJhc2UgJiYgYmFzZSA8PSBsaW1pdCkgewogCQlyZXMtPmZsYWdzID0gKG1lbV9iYXNlX2xvICYgUENJX1BSRUZfUkFOR0VfVFlQRV9NQVNLKSB8CiAJCQkJCSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7CiAJCWlmIChyZXMtPmZsYWdzICYgUENJX1BSRUZfUkFOR0VfVFlQRV82NCkKQEAgLTM3NCw2ICszODUsNDQgQEAKIAkJcmVzLT5zdGFydCA9IGJhc2U7CiAJCXJlcy0+ZW5kID0gbGltaXQgKyAweGZmZmZmOwogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgIiAgYnJpZGdlIHdpbmRvdyAlcFJcbiIsIHJlcyk7CisJfSBlbHNlIHsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCSAgICAgIiAgYnJpZGdlIHdpbmRvdyBbbWVtIDB4JTA4bHggLSAlMDhseCBwcmVmXSByZWcgcmVhZGluZ1xuIiwKKwkJCQkJIGJhc2UsIGxpbWl0ICsgMHhmZmZmZik7CisJfQorfQorCit2b2lkIF9fZGV2aW5pdCBwY2lfcmVhZF9icmlkZ2VfYmFzZXMoc3RydWN0IHBjaV9idXMgKmNoaWxkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaTsKKworCWlmIChwY2lfaXNfcm9vdF9idXMoY2hpbGQpKQkvKiBJdCdzIGEgaG9zdCBidXMsIG5vdGhpbmcgdG8gcmVhZCAqLworCQlyZXR1cm47CisKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJQQ0kgYnJpZGdlIHRvIFtidXMgJTAyeC0lMDJ4XSVzXG4iLAorCQkgY2hpbGQtPnNlY29uZGFyeSwgY2hpbGQtPnN1Ym9yZGluYXRlLAorCQkgZGV2LT50cmFuc3BhcmVudCA/ICIgKHN1YnRyYWN0aXZlIGRlY29kZSkiIDogIiIpOworCisJcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKGNoaWxkKTsKKwlmb3IgKGkgPSAwOyBpIDwgUENJX0JSSURHRV9SRVNPVVJDRV9OVU07IGkrKykKKwkJY2hpbGQtPnJlc291cmNlW2ldID0gJmRldi0+cmVzb3VyY2VbUENJX0JSSURHRV9SRVNPVVJDRVMraV07CisKKwlwY2lfcmVhZF9icmlkZ2VfaW8oY2hpbGQpOworCXBjaV9yZWFkX2JyaWRnZV9tbWlvKGNoaWxkKTsKKwlwY2lfcmVhZF9icmlkZ2VfbW1pb19wcmVmKGNoaWxkKTsKKworCWlmIChkZXYtPnRyYW5zcGFyZW50KSB7CisJCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoY2hpbGQtPnBhcmVudCwgcmVzLCBpKSB7CisJCQlpZiAocmVzKSB7CisJCQkJcGNpX2J1c19hZGRfcmVzb3VyY2UoY2hpbGQsIHJlcywKKwkJCQkJCSAgICAgUENJX1NVQlRSQUNUSVZFX0RFQ09ERSk7CisJCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCQkJCSAgICIgIGJyaWRnZSB3aW5kb3cgJXBSIChzdWJ0cmFjdGl2ZSBkZWNvZGUpXG4iLAorCQkJCQkgICByZXMpOworCQkJfQorCQl9CiAJfQogfQogCkBAIC0zODcsMTAgKzQzNiwxNDcgQEAKIAkJSU5JVF9MSVNUX0hFQUQoJmItPmNoaWxkcmVuKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmItPmRldmljZXMpOwogCQlJTklUX0xJU1RfSEVBRCgmYi0+c2xvdHMpOworCQlJTklUX0xJU1RfSEVBRCgmYi0+cmVzb3VyY2VzKTsKKwkJYi0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOworCQliLT5jdXJfYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047CiAJfQogCXJldHVybiBiOwogfQogCitzdGF0aWMgdW5zaWduZWQgY2hhciBwY2l4X2J1c19zcGVlZFtdID0geworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogMCAqLworCVBDSV9TUEVFRF82Nk1Iel9QQ0lYLAkJLyogMSAqLworCVBDSV9TUEVFRF8xMDBNSHpfUENJWCwJCS8qIDIgKi8KKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVgsCQkvKiAzICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiA0ICovCisJUENJX1NQRUVEXzY2TUh6X1BDSVhfRUNDLAkvKiA1ICovCisJUENJX1NQRUVEXzEwME1Iel9QQ0lYX0VDQywJLyogNiAqLworCVBDSV9TUEVFRF8xMzNNSHpfUENJWF9FQ0MsCS8qIDcgKi8KKwlQQ0lfU1BFRURfVU5LTk9XTiwJCS8qIDggKi8KKwlQQ0lfU1BFRURfNjZNSHpfUENJWF8yNjYsCS8qIDkgKi8KKwlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfMjY2LAkvKiBBICovCisJUENJX1NQRUVEXzEzM01Iel9QQ0lYXzI2NiwJLyogQiAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQyAqLworCVBDSV9TUEVFRF82Nk1Iel9QQ0lYXzUzMywJLyogRCAqLworCVBDSV9TUEVFRF8xMDBNSHpfUENJWF81MzMsCS8qIEUgKi8KKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzCS8qIEYgKi8KK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBjaWVfbGlua19zcGVlZFtdID0geworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogMCAqLworCVBDSUVfU1BFRURfMl81R1QsCQkvKiAxICovCisJUENJRV9TUEVFRF81XzBHVCwJCS8qIDIgKi8KKwlQQ0lFX1NQRUVEXzhfMEdULAkJLyogMyAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNCAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNSAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNiAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNyAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogOCAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogOSAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQSAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQiAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQyAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogRCAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogRSAqLworCVBDSV9TUEVFRF9VTktOT1dOCQkvKiBGICovCit9OworCit2b2lkIHBjaWVfdXBkYXRlX2xpbmtfc3BlZWQoc3RydWN0IHBjaV9idXMgKmJ1cywgdTE2IGxpbmtzdGEpCit7CisJYnVzLT5jdXJfYnVzX3NwZWVkID0gcGNpZV9saW5rX3NwZWVkW2xpbmtzdGEgJiAweGZdOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpZV91cGRhdGVfbGlua19zcGVlZCk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFncF9zcGVlZHNbXSA9IHsKKwlBR1BfVU5LTk9XTiwKKwlBR1BfMVgsCisJQUdQXzJYLAorCUFHUF80WCwKKwlBR1BfOFgKK307CisKK3N0YXRpYyBlbnVtIHBjaV9idXNfc3BlZWQgYWdwX3NwZWVkKGludCBhZ3AzLCBpbnQgYWdwc3RhdCkKK3sKKwlpbnQgaW5kZXggPSAwOworCisJaWYgKGFncHN0YXQgJiA0KQorCQlpbmRleCA9IDM7CisJZWxzZSBpZiAoYWdwc3RhdCAmIDIpCisJCWluZGV4ID0gMjsKKwllbHNlIGlmIChhZ3BzdGF0ICYgMSkKKwkJaW5kZXggPSAxOworCWVsc2UKKwkJZ290byBvdXQ7CisJCisJaWYgKGFncDMpIHsKKwkJaW5kZXggKz0gMjsKKwkJaWYgKGluZGV4ID09IDUpCisJCQlpbmRleCA9IDA7CisJfQorCisgb3V0OgorCXJldHVybiBhZ3Bfc3BlZWRzW2luZGV4XTsKK30KKworCitzdGF0aWMgdm9pZCBwY2lfc2V0X2J1c19zcGVlZChzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CisJaW50IHBvczsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX0FHUCk7CisJaWYgKCFwb3MpCisJCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX0FHUDMpOworCWlmIChwb3MpIHsKKwkJdTMyIGFncHN0YXQsIGFncGNtZDsKKworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlLCBwb3MgKyBQQ0lfQUdQX1NUQVRVUywgJmFncHN0YXQpOworCQlidXMtPm1heF9idXNfc3BlZWQgPSBhZ3Bfc3BlZWQoYWdwc3RhdCAmIDgsIGFncHN0YXQgJiA3KTsKKworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlLCBwb3MgKyBQQ0lfQUdQX0NPTU1BTkQsICZhZ3BjbWQpOworCQlidXMtPmN1cl9idXNfc3BlZWQgPSBhZ3Bfc3BlZWQoYWdwc3RhdCAmIDgsIGFncGNtZCAmIDcpOworCX0KKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX1BDSVgpOworCWlmIChwb3MpIHsKKwkJdTE2IHN0YXR1czsKKwkJZW51bSBwY2lfYnVzX3NwZWVkIG1heDsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoYnJpZGdlLCBwb3MgKyAyLCAmc3RhdHVzKTsKKworCQlpZiAoc3RhdHVzICYgMHg4MDAwKSB7CisJCQltYXggPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzOworCQl9IGVsc2UgaWYgKHN0YXR1cyAmIDB4NDAwMCkgeworCQkJbWF4ID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYXzI2NjsKKwkJfSBlbHNlIGlmIChzdGF0dXMgJiAweDAwMDIpIHsKKwkJCWlmICgoKHN0YXR1cyA+PiAxMikgJiAweDMpID09IDIpIHsKKwkJCQltYXggPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfRUNDOworCQkJfSBlbHNlIHsKKwkJCQltYXggPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7CisJCQl9CisJCX0gZWxzZSB7CisJCQltYXggPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKKwkJfQorCisJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IG1heDsKKwkJYnVzLT5jdXJfYnVzX3NwZWVkID0gcGNpeF9idXNfc3BlZWRbKHN0YXR1cyA+PiA2KSAmIDB4Zl07CisKKwkJcmV0dXJuOworCX0KKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX0VYUCk7CisJaWYgKHBvcykgeworCQl1MzIgbGlua2NhcDsKKwkJdTE2IGxpbmtzdGE7CisKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJyaWRnZSwgcG9zICsgUENJX0VYUF9MTktDQVAsICZsaW5rY2FwKTsKKwkJYnVzLT5tYXhfYnVzX3NwZWVkID0gcGNpZV9saW5rX3NwZWVkW2xpbmtjYXAgJiAweGZdOworCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJyaWRnZSwgcG9zICsgUENJX0VYUF9MTktTVEEsICZsaW5rc3RhKTsKKwkJcGNpZV91cGRhdGVfbGlua19zcGVlZChidXMsIGxpbmtzdGEpOworCX0KK30KKworCiBzdGF0aWMgc3RydWN0IHBjaV9idXMgKnBjaV9hbGxvY19jaGlsZF9idXMoc3RydWN0IHBjaV9idXMgKnBhcmVudCwKIAkJCQkJICAgc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwgaW50IGJ1c25yKQogewpAQCAtNDMwLDYgKzYxNiw4IEBACiAJY2hpbGQtPnNlbGYgPSBicmlkZ2U7CiAJY2hpbGQtPmJyaWRnZSA9IGdldF9kZXZpY2UoJmJyaWRnZS0+ZGV2KTsKIAorCXBjaV9zZXRfYnVzX3NwZWVkKGNoaWxkKTsKKwogCS8qIFNldCB1cCBkZWZhdWx0IHJlc291cmNlIHBvaW50ZXJzIGFuZCBuYW1lcy4uICovCiAJZm9yIChpID0gMDsgaSA8IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNOyBpKyspIHsKIAkJY2hpbGQtPnJlc291cmNlW2ldID0gJmJyaWRnZS0+cmVzb3VyY2VbUENJX0JSSURHRV9SRVNPVVJDRVMraV07CkBAIC02ODEsNyArODY5LDcgQEAKIAlkZXYtPmlycSA9IGlycTsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3BjaWVfcG9ydF90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQordm9pZCBzZXRfcGNpZV9wb3J0X3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJaW50IHBvczsKIAl1MTYgcmVnMTY7CkBAIC02OTUsNyArODgzLDcgQEAKIAlwZGV2LT5wY2llX3R5cGUgPSAocmVnMTYgJiBQQ0lfRVhQX0ZMQUdTX1RZUEUpID4+IDQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9wY2llX2hvdHBsdWdfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQordm9pZCBzZXRfcGNpZV9ob3RwbHVnX2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlpbnQgcG9zOwogCXUxNiByZWcxNjsKQEAgLTEwODEsNiArMTI2OSw0NSBAQAogfQogRVhQT1JUX1NZTUJPTChwY2lfc2Nhbl9zaW5nbGVfZGV2aWNlKTsKIAorc3RhdGljIHVuc2lnbmVkIG5leHRfYXJpX2ZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGZuKQoreworCXUxNiBjYXA7CisJdW5zaWduZWQgcG9zLCBuZXh0X2ZuOworCisJaWYgKCFkZXYpCisJCXJldHVybiAwOworCisJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9BUkkpOworCWlmICghcG9zKQorCQlyZXR1cm4gMDsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIDQsICZjYXApOworCW5leHRfZm4gPSBjYXAgPj4gODsKKwlpZiAobmV4dF9mbiA8PSBmbikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIG5leHRfZm47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuZXh0X3RyYWRfZm4oc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgZm4pCit7CisJcmV0dXJuIChmbiArIDEpICUgODsKK30KKworc3RhdGljIHVuc2lnbmVkIG5vX25leHRfZm4oc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgZm4pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb25seV9vbmVfY2hpbGQoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGFyZW50ID0gYnVzLT5zZWxmOworCWlmICghcGFyZW50IHx8ICFwY2lfaXNfcGNpZShwYXJlbnQpKQorCQlyZXR1cm4gMDsKKwlpZiAocGFyZW50LT5wY2llX3R5cGUgPT0gUENJX0VYUF9UWVBFX1JPT1RfUE9SVCB8fAorCSAgICBwYXJlbnQtPnBjaWVfdHlwZSA9PSBQQ0lfRVhQX1RZUEVfRE9XTlNUUkVBTSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogcGNpX3NjYW5fc2xvdCAtIHNjYW4gYSBQQ0kgc2xvdCBvbiBhIGJ1cyBmb3IgZGV2aWNlcy4KICAqIEBidXM6IFBDSSBidXMgdG8gc2NhbgpAQCAtMTA5NCwyMSArMTMyMSwzMCBAQAogICovCiBpbnQgcGNpX3NjYW5fc2xvdChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4pCiB7Ci0JaW50IGZuLCBuciA9IDA7CisJdW5zaWduZWQgZm4sIG5yID0gMDsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXVuc2lnbmVkICgqbmV4dF9mbikoc3RydWN0IHBjaV9kZXYgKiwgdW5zaWduZWQpID0gbm9fbmV4dF9mbjsKKworCWlmIChvbmx5X29uZV9jaGlsZChidXMpICYmIChkZXZmbiA+IDApKQorCQlyZXR1cm4gMDsgLyogQWxyZWFkeSBzY2FubmVkIHRoZSBlbnRpcmUgc2xvdCAqLwogCiAJZGV2ID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShidXMsIGRldmZuKTsKLQlpZiAoZGV2ICYmICFkZXYtPmlzX2FkZGVkKQkvKiBuZXcgZGV2aWNlPyAqLworCWlmICghZGV2KQorCQlyZXR1cm4gMDsKKwlpZiAoIWRldi0+aXNfYWRkZWQpCiAJCW5yKys7CiAKLQlpZiAoZGV2ICYmIGRldi0+bXVsdGlmdW5jdGlvbikgewotCQlmb3IgKGZuID0gMTsgZm4gPCA4OyBmbisrKSB7Ci0JCQlkZXYgPSBwY2lfc2Nhbl9zaW5nbGVfZGV2aWNlKGJ1cywgZGV2Zm4gKyBmbik7Ci0JCQlpZiAoZGV2KSB7Ci0JCQkJaWYgKCFkZXYtPmlzX2FkZGVkKQotCQkJCQlucisrOwotCQkJCWRldi0+bXVsdGlmdW5jdGlvbiA9IDE7Ci0JCQl9CisJaWYgKHBjaV9hcmlfZW5hYmxlZChidXMpKQorCQluZXh0X2ZuID0gbmV4dF9hcmlfZm47CisJZWxzZSBpZiAoZGV2LT5tdWx0aWZ1bmN0aW9uKQorCQluZXh0X2ZuID0gbmV4dF90cmFkX2ZuOworCisJZm9yIChmbiA9IG5leHRfZm4oZGV2LCAwKTsgZm4gPiAwOyBmbiA9IG5leHRfZm4oZGV2LCBmbikpIHsKKwkJZGV2ID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShidXMsIGRldmZuICsgZm4pOworCQlpZiAoZGV2KSB7CisJCQlpZiAoIWRldi0+aXNfYWRkZWQpCisJCQkJbnIrKzsKKwkJCWRldi0+bXVsdGlmdW5jdGlvbiA9IDE7CiAJCX0KIAl9CiAKQEAgLTEyMDAsNiArMTQzNiw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGRldl9yZWdfZXJyOwogCWItPmJyaWRnZSA9IGdldF9kZXZpY2UoZGV2KTsKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoYi0+YnJpZGdlKTsKIAogCWlmICghcGFyZW50KQogCQlzZXRfZGV2X25vZGUoYi0+YnJpZGdlLCBwY2lidXNfdG9fbm9kZShiKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IGM3NDY5NDMuLjc5MGViNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0yNSwxNCArMjUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgkvKiBpc2FfZG1hX2JyaWRnZV9idWdneSAqLwogI2luY2x1ZGUgInBjaS5oIgogCi1pbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7Ci1FWFBPUlRfU1lNQk9MKGlzYV9kbWFfYnJpZGdlX2J1Z2d5KTsKLWludCBwY2lfcGNpX3Byb2JsZW1zOwotRVhQT1JUX1NZTUJPTChwY2lfcGNpX3Byb2JsZW1zKTsKLQotI2lmZGVmIENPTkZJR19QQ0lfUVVJUktTCiAvKgogICogVGhpcyBxdWlyayBmdW5jdGlvbiBkaXNhYmxlcyBtZW1vcnkgZGVjb2RpbmcgYW5kIHJlbGVhc2VzIG1lbW9yeSByZXNvdXJjZXMKICAqIG9mIHRoZSBkZXZpY2Ugc3BlY2lmaWVkIGJ5IGtlcm5lbCdzIGJvb3QgcGFyYW1ldGVyICdwY2k9cmVzb3VyY2VfYWxpZ25tZW50PScuCkBAIC0zMzgsNiArMzMzLDIzIEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9TMywJUENJX0RFVklDRV9JRF9TM184NjgsCQlxdWlya19zM182NE0pOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfUzMsCVBDSV9ERVZJQ0VfSURfUzNfOTY4LAkJcXVpcmtfczNfNjRNKTsKIAorLyoKKyAqIFNvbWUgQ1M1NTM2IEJJT1NlcyAoZm9yIGV4YW1wbGUsIHRoZSBTb2VrcmlzIE5FVDU1MDEgYm9hcmQgdy8gY29tQklPUworICogdmVyLiAxLjMzICAyMDA3MDEwMykgZG9uJ3Qgc2V0IHRoZSBjb3JyZWN0IElTQSBQQ0kgcmVnaW9uIGhlYWRlciBpbmZvLgorICogQkFSMCBzaG91bGQgYmUgOCBieXRlczsgaW5zdGVhZCwgaXQgbWF5IGJlIHNldCB0byBzb21ldGhpbmcgbGlrZSA4aworICogKHdoaWNoIGNvbmZsaWN0cyB3LyBCQVIxJ3MgbWVtb3J5IHJhbmdlKS4KKyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2NzNTUzNl92c2Eoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAocGNpX3Jlc291cmNlX2xlbihkZXYsIDApICE9IDgpIHsKKwkJc3RydWN0IHJlc291cmNlICpyZXMgPSAmZGV2LT5yZXNvdXJjZVswXTsKKwkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgOCAtIDE7CisJCWRldl9pbmZvKCZkZXYtPmRldiwgIkNTNTUzNiBJU0EgYnJpZGdlIGJ1ZyBkZXRlY3RlZCAiCisJCQkJIihpbmNvcnJlY3QgaGVhZGVyKTsgd29ya2Fyb3VuZCBhcHBsaWVkLlxuIik7CisJfQorfQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSVNBLCBxdWlya19jczU1MzZfdnNhKTsKKwogc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2lvX3JlZ2lvbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCByZWdpb24sCiAJdW5zaWduZWQgc2l6ZSwgaW50IG5yLCBjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMjU5NSw2ICsyNjA3LDcgQEAKIAl9CiAJcGNpX2RvX2ZpeHVwcyhkZXYsIHN0YXJ0LCBlbmQpOwogfQorRVhQT1JUX1NZTUJPTChwY2lfZml4dXBfZGV2aWNlKTsKIAogc3RhdGljIGludCBfX2luaXQgcGNpX2FwcGx5X2ZpbmFsX3F1aXJrcyh2b2lkKQogewpAQCAtMjcwNiw5ICsyNzE5LDMgQEAKIAogCXJldHVybiAtRU5PVFRZOwogfQotCi0jZWxzZQotdm9pZCBwY2lfZml4dXBfZGV2aWNlKGVudW0gcGNpX2ZpeHVwX3Bhc3MgcGFzcywgc3RydWN0IHBjaV9kZXYgKmRldikge30KLWludCBwY2lfZGV2X3NwZWNpZmljX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcm9iZSkgeyByZXR1cm4gLUVOT1RUWTsgfQotI2VuZGlmCi1FWFBPUlRfU1lNQk9MKHBjaV9maXh1cF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCBjNDhjZDM3Li40ZmUzNmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtMjcsMzcgKzI3LDkxIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgInBjaS5oIgogCi1zdGF0aWMgdm9pZCBwYnVzX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKK3N0cnVjdCByZXNvdXJjZV9saXN0X3ggeworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKm5leHQ7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0Jc3RydWN0IHJlc291cmNlX2xpc3QgaGVhZCwgKmxpc3QsICp0bXA7Ci0JaW50IGlkeDsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXJlc291cmNlX3NpemVfdCBzdGFydDsKKwlyZXNvdXJjZV9zaXplX3QgZW5kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cit9OwogCi0JaGVhZC5uZXh0ID0gTlVMTDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKLQkJdTE2IGNsYXNzID0gZGV2LT5jbGFzcyA+PiA4Oworc3RhdGljIHZvaWQgYWRkX3RvX2ZhaWxlZF9saXN0KHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmhlYWQsCisJCQkJIHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmxpc3QgPSBoZWFkOworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmxuID0gbGlzdC0+bmV4dDsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICp0bXA7CiAKLQkJLyogRG9uJ3QgdG91Y2ggY2xhc3NsZXNzIGRldmljZXMgb3IgaG9zdCBicmlkZ2VzIG9yIGlvYXBpY3MuICAqLwotCQlpZiAoY2xhc3MgPT0gUENJX0NMQVNTX05PVF9ERUZJTkVEIHx8Ci0JCSAgICBjbGFzcyA9PSBQQ0lfQ0xBU1NfQlJJREdFX0hPU1QpCi0JCQljb250aW51ZTsKLQotCQkvKiBEb24ndCB0b3VjaCBpb2FwaWMgZGV2aWNlcyBhbHJlYWR5IGVuYWJsZWQgYnkgZmlybXdhcmUgKi8KLQkJaWYgKGNsYXNzID09IFBDSV9DTEFTU19TWVNURU1fUElDKSB7Ci0JCQl1MTYgY29tbWFuZDsKLQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKLQkJCWlmIChjb21tYW5kICYgKFBDSV9DT01NQU5EX0lPIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkKLQkJCQljb250aW51ZTsKLQkJfQotCi0JCXBkZXZfc29ydF9yZXNvdXJjZXMoZGV2LCAmaGVhZCk7CisJdG1wID0ga21hbGxvYyhzaXplb2YoKnRtcCksIEdGUF9LRVJORUwpOworCWlmICghdG1wKSB7CisJCXByX3dhcm5pbmcoImFkZF90b19mYWlsZWRfbGlzdDoga21hbGxvYygpIGZhaWxlZCFcbiIpOworCQlyZXR1cm47CiAJfQogCi0JZm9yIChsaXN0ID0gaGVhZC5uZXh0OyBsaXN0OykgeworCXRtcC0+bmV4dCA9IGxuOworCXRtcC0+cmVzID0gcmVzOworCXRtcC0+ZGV2ID0gZGV2OworCXRtcC0+c3RhcnQgPSByZXMtPnN0YXJ0OworCXRtcC0+ZW5kID0gcmVzLT5lbmQ7CisJdG1wLT5mbGFncyA9IHJlcy0+ZmxhZ3M7CisJbGlzdC0+bmV4dCA9IHRtcDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9mYWlsZWRfbGlzdChzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpoZWFkKQoreworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmxpc3QsICp0bXA7CisKKwlmb3IgKGxpc3QgPSBoZWFkLT5uZXh0OyBsaXN0OykgeworCQl0bXAgPSBsaXN0OworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJa2ZyZWUodG1wKTsKKwl9CisKKwloZWFkLT5uZXh0ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgX19kZXZfc29ydF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkgc3RydWN0IHJlc291cmNlX2xpc3QgKmhlYWQpCit7CisJdTE2IGNsYXNzID0gZGV2LT5jbGFzcyA+PiA4OworCisJLyogRG9uJ3QgdG91Y2ggY2xhc3NsZXNzIGRldmljZXMgb3IgaG9zdCBicmlkZ2VzIG9yIGlvYXBpY3MuICAqLworCWlmIChjbGFzcyA9PSBQQ0lfQ0xBU1NfTk9UX0RFRklORUQgfHwgY2xhc3MgPT0gUENJX0NMQVNTX0JSSURHRV9IT1NUKQorCQlyZXR1cm47CisKKwkvKiBEb24ndCB0b3VjaCBpb2FwaWMgZGV2aWNlcyBhbHJlYWR5IGVuYWJsZWQgYnkgZmlybXdhcmUgKi8KKwlpZiAoY2xhc3MgPT0gUENJX0NMQVNTX1NZU1RFTV9QSUMpIHsKKwkJdTE2IGNvbW1hbmQ7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKKwkJaWYgKGNvbW1hbmQgJiAoUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlkpKQorCQkJcmV0dXJuOworCX0KKworCXBkZXZfc29ydF9yZXNvdXJjZXMoZGV2LCBoZWFkKTsKK30KKworc3RhdGljIHZvaWQgX19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqaGVhZCwKKwkJCQkgc3RydWN0IHJlc291cmNlX2xpc3RfeCAqZmFpbF9oZWFkKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCByZXNvdXJjZV9saXN0ICpsaXN0LCAqdG1wOworCWludCBpZHg7CisKKwlmb3IgKGxpc3QgPSBoZWFkLT5uZXh0OyBsaXN0OykgewogCQlyZXMgPSBsaXN0LT5yZXM7CiAJCWlkeCA9IHJlcyAtICZsaXN0LT5kZXYtPnJlc291cmNlWzBdOworCiAJCWlmIChwY2lfYXNzaWduX3Jlc291cmNlKGxpc3QtPmRldiwgaWR4KSkgeworCQkJaWYgKGZhaWxfaGVhZCAmJiAhcGNpX2lzX3Jvb3RfYnVzKGxpc3QtPmRldi0+YnVzKSkgeworCQkJCS8qCisJCQkJICogaWYgdGhlIGZhaWxlZCByZXMgaXMgZm9yIFJPTSBCQVIsIGFuZCBpdCB3aWxsCisJCQkJICogYmUgZW5hYmxlZCBsYXRlciwgZG9uJ3QgYWRkIGl0IHRvIHRoZSBsaXN0CisJCQkJICovCisJCQkJaWYgKCEoKGlkeCA9PSBQQ0lfUk9NX1JFU09VUkNFKSAmJgorCQkJCSAgICAgICghKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1JPTV9FTkFCTEUpKSkpCisJCQkJCWFkZF90b19mYWlsZWRfbGlzdChmYWlsX2hlYWQsIGxpc3QtPmRldiwgcmVzKTsKKwkJCX0KIAkJCXJlcy0+c3RhcnQgPSAwOwogCQkJcmVzLT5lbmQgPSAwOwogCQkJcmVzLT5mbGFncyA9IDA7CkBAIC02OCw2ICsxMjIsMzAgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHBkZXZfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkgc3RydWN0IHJlc291cmNlX2xpc3RfeCAqZmFpbF9oZWFkKQoreworCXN0cnVjdCByZXNvdXJjZV9saXN0IGhlYWQ7CisKKwloZWFkLm5leHQgPSBOVUxMOworCV9fZGV2X3NvcnRfcmVzb3VyY2VzKGRldiwgJmhlYWQpOworCV9fYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoJmhlYWQsIGZhaWxfaGVhZCk7CisKK30KKworc3RhdGljIHZvaWQgcGJ1c19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkgc3RydWN0IHJlc291cmNlX2xpc3RfeCAqZmFpbF9oZWFkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJc3RydWN0IHJlc291cmNlX2xpc3QgaGVhZDsKKworCWhlYWQubmV4dCA9IE5VTEw7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KQorCQlfX2Rldl9zb3J0X3Jlc291cmNlcyhkZXYsICZoZWFkKTsKKworCV9fYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoJmhlYWQsIGZhaWxfaGVhZCk7Cit9CisKIHZvaWQgcGNpX3NldHVwX2NhcmRidXMoc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOwpAQCAtMTM0LDE4ICsyMTIsMTIgQEAKICAgIGNvbmZpZyBzcGFjZSB3cml0ZXMsIHNvIGl0J3MgcXVpdGUgcG9zc2libGUgdGhhdCBhbiBJL08gd2luZG93IG9mCiAgICB0aGUgYnJpZGdlIHdpbGwgaGF2ZSBzb21lIHVuZGVzaXJhYmxlIGFkZHJlc3MgKGUuZy4gMCkgYWZ0ZXIgdGhlCiAgICBmaXJzdCB3cml0ZS4gRGl0dG8gNjQtYml0IHByZWZldGNoYWJsZSBNTUlPLiAgKi8KLXN0YXRpYyB2b2lkIHBjaV9zZXR1cF9icmlkZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cykKK3N0YXRpYyB2b2lkIHBjaV9zZXR1cF9icmlkZ2VfaW8oc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiByZWdpb247Ci0JdTMyIGwsIGJ1LCBsdSwgaW9fdXBwZXIxNjsKLQotCWlmIChwY2lfaXNfZW5hYmxlZChicmlkZ2UpKQotCQlyZXR1cm47Ci0KLQlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICJQQ0kgYnJpZGdlIHRvIFtidXMgJTAyeC0lMDJ4XVxuIiwKLQkJIGJ1cy0+c2Vjb25kYXJ5LCBidXMtPnN1Ym9yZGluYXRlKTsKKwl1MzIgbCwgaW9fdXBwZXIxNjsKIAogCS8qIFNldCB1cCB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGhlIFBDSSBJL08gc2VnbWVudCBmb3IgdGhpcyBidXMuICovCiAJcmVzID0gYnVzLT5yZXNvdXJjZVswXTsKQEAgLTE1OCw4ICsyMzAsNyBAQAogCQkvKiBTZXQgdXAgdXBwZXIgMTYgYml0cyBvZiBJL08gYmFzZS9saW1pdC4gKi8KIAkJaW9fdXBwZXIxNiA9IChyZWdpb24uZW5kICYgMHhmZmZmMDAwMCkgfCAocmVnaW9uLnN0YXJ0ID4+IDE2KTsKIAkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJLyogQ2xlYXIgdXBwZXIgMTYgYml0cyBvZiBJL08gYmFzZS9saW1pdC4gKi8KIAkJaW9fdXBwZXIxNiA9IDA7CiAJCWwgPSAweDAwZjA7CkBAIC0xNzEsMjEgKzI0MiwzNSBAQAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLCBQQ0lfSU9fQkFTRSwgbCk7CiAJLyogVXBkYXRlIHVwcGVyIDE2IGJpdHMgb2YgSS9PIGJhc2UvbGltaXQuICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIFBDSV9JT19CQVNFX1VQUEVSMTYsIGlvX3VwcGVyMTYpOworfQogCi0JLyogU2V0IHVwIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgUENJIE1lbW9yeSBzZWdtZW50Ci0JICAgZm9yIHRoaXMgYnVzLiAqLworc3RhdGljIHZvaWQgcGNpX3NldHVwX2JyaWRnZV9tbWlvKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IGJ1cy0+c2VsZjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gcmVnaW9uOworCXUzMiBsOworCisJLyogU2V0IHVwIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgUENJIE1lbW9yeSBzZWdtZW50IGZvciB0aGlzIGJ1cy4gKi8KIAlyZXMgPSBidXMtPnJlc291cmNlWzFdOwogCXBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKGJyaWRnZSwgJnJlZ2lvbiwgcmVzKTsKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7CiAJCWwgPSAocmVnaW9uLnN0YXJ0ID4+IDE2KSAmIDB4ZmZmMDsKIAkJbCB8PSByZWdpb24uZW5kICYgMHhmZmYwMDAwMDsKIAkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJbCA9IDB4MDAwMGZmZjA7CiAJCWRldl9pbmZvKCZicmlkZ2UtPmRldiwgIiAgYnJpZGdlIHdpbmRvdyBbbWVtIGRpc2FibGVkXVxuIik7CiAJfQogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLCBQQ0lfTUVNT1JZX0JBU0UsIGwpOworfQorCitzdGF0aWMgdm9pZCBwY2lfc2V0dXBfYnJpZGdlX21taW9fcHJlZihzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHBjaV9idXNfcmVnaW9uIHJlZ2lvbjsKKwl1MzIgbCwgYnUsIGx1OwogCiAJLyogQ2xlYXIgb3V0IHRoZSB1cHBlciAzMiBiaXRzIG9mIFBSRUYgbGltaXQuCiAJICAgSWYgUENJX1BSRUZfQkFTRV9VUFBFUjMyIHdhcyBub24temVybywgdGhpcyB0ZW1wb3JhcmlseQpAQCAtMjA0LDggKzI4OSw3IEBACiAJCQlsdSA9IHVwcGVyXzMyX2JpdHMocmVnaW9uLmVuZCk7CiAJCX0KIAkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJbCA9IDB4MDAwMGZmZjA7CiAJCWRldl9pbmZvKCZicmlkZ2UtPmRldiwgIiAgYnJpZGdlIHdpbmRvdyBbbWVtIHByZWYgZGlzYWJsZWRdXG4iKTsKIAl9CkBAIC0yMTQsMTAgKzI5OCwzNSBAQAogCS8qIFNldCB0aGUgdXBwZXIgMzIgYml0cyBvZiBQUkVGIGJhc2UgJiBsaW1pdC4gKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgUENJX1BSRUZfQkFTRV9VUFBFUjMyLCBidSk7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIFBDSV9QUkVGX0xJTUlUX1VQUEVSMzIsIGx1KTsKK30KKworc3RhdGljIHZvaWQgX19wY2lfc2V0dXBfYnJpZGdlKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOworCisJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiUENJIGJyaWRnZSB0byBbYnVzICUwMngtJTAyeF1cbiIsCisJCSBidXMtPnNlY29uZGFyeSwgYnVzLT5zdWJvcmRpbmF0ZSk7CisKKwlpZiAodHlwZSAmIElPUkVTT1VSQ0VfSU8pCisJCXBjaV9zZXR1cF9icmlkZ2VfaW8oYnVzKTsKKworCWlmICh0eXBlICYgSU9SRVNPVVJDRV9NRU0pCisJCXBjaV9zZXR1cF9icmlkZ2VfbW1pbyhidXMpOworCisJaWYgKHR5cGUgJiBJT1JFU09VUkNFX1BSRUZFVENIKQorCQlwY2lfc2V0dXBfYnJpZGdlX21taW9fcHJlZihidXMpOwogCiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGJyaWRnZSwgUENJX0JSSURHRV9DT05UUk9MLCBidXMtPmJyaWRnZV9jdGwpOwogfQogCitzdGF0aWMgdm9pZCBwY2lfc2V0dXBfYnJpZGdlKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJdW5zaWduZWQgbG9uZyB0eXBlID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNIHwKKwkJCQkgIElPUkVTT1VSQ0VfUFJFRkVUQ0g7CisKKwlfX3BjaV9zZXR1cF9icmlkZ2UoYnVzLCB0eXBlKTsKK30KKwogLyogQ2hlY2sgd2hldGhlciB0aGUgYnJpZGdlIHN1cHBvcnRzIG9wdGlvbmFsIEkvTyBhbmQKICAgIHByZWZldGNoYWJsZSBtZW1vcnkgcmFuZ2VzLiBJZiBub3QsIHRoZSByZXNwZWN0aXZlCiAgICBiYXNlL2xpbWl0IHJlZ2lzdGVycyBtdXN0IGJlIHJlYWQtb25seSBhbmQgcmVhZCBhcyAwLiAqLwpAQCAtMjUzLDggKzM2MiwxMSBAQAogCX0KIAlpZiAocG1lbSkgewogCQliX3Jlc1syXS5mbGFncyB8PSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7Ci0JCWlmICgocG1lbSAmIFBDSV9QUkVGX1JBTkdFX1RZUEVfTUFTSykgPT0gUENJX1BSRUZfUkFOR0VfVFlQRV82NCkKKwkJaWYgKChwbWVtICYgUENJX1BSRUZfUkFOR0VfVFlQRV9NQVNLKSA9PQorCQkgICAgUENJX1BSRUZfUkFOR0VfVFlQRV82NCkgewogCQkJYl9yZXNbMl0uZmxhZ3MgfD0gSU9SRVNPVVJDRV9NRU1fNjQ7CisJCQliX3Jlc1syXS5mbGFncyB8PSBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0OworCQl9CiAJfQogCiAJLyogZG91YmxlIGNoZWNrIGlmIGJyaWRnZSBkb2VzIHN1cHBvcnQgNjQgYml0IHByZWYgKi8KQEAgLTI4Myw4ICszOTUsNyBAQAogCXVuc2lnbmVkIGxvbmcgdHlwZV9tYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNIHwKIAkJCQkgIElPUkVTT1VSQ0VfUFJFRkVUQ0g7CiAKLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLQkJciA9IGJ1cy0+cmVzb3VyY2VbaV07CisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHIsIGkpIHsKIAkJaWYgKHIgPT0gJmlvcG9ydF9yZXNvdXJjZSB8fCByID09ICZpb21lbV9yZXNvdXJjZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAociAmJiAoci0+ZmxhZ3MgJiB0eXBlX21hc2spID09IHR5cGUgJiYgIXItPnBhcmVudCkKQEAgLTMwMSw3ICs0MTIsNyBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IHJlc291cmNlICpiX3JlcyA9IGZpbmRfZnJlZV9idXNfcmVzb3VyY2UoYnVzLCBJT1JFU09VUkNFX0lPKTsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSAwLCBzaXplMSA9IDA7CisJdW5zaWduZWQgbG9uZyBzaXplID0gMCwgc2l6ZTEgPSAwLCBvbGRfc2l6ZTsKIAogCWlmICghYl9yZXMpCiAgCQlyZXR1cm47CkBAIC0zMjYsMTIgKzQzNywxNyBAQAogCX0KIAlpZiAoc2l6ZSA8IG1pbl9zaXplKQogCQlzaXplID0gbWluX3NpemU7CisJb2xkX3NpemUgPSByZXNvdXJjZV9zaXplKGJfcmVzKTsKKwlpZiAob2xkX3NpemUgPT0gMSkKKwkJb2xkX3NpemUgPSAwOwogLyogVG8gYmUgZml4ZWQgaW4gMi41OiB3ZSBzaG91bGQgaGF2ZSBzb3J0IG9mIEhBVkVfSVNBCiAgICBmbGFnIGluIHRoZSBzdHJ1Y3QgcGNpX2J1cy4gKi8KICNpZiBkZWZpbmVkKENPTkZJR19JU0EpIHx8IGRlZmluZWQoQ09ORklHX0VJU0EpCiAJc2l6ZSA9IChzaXplICYgMHhmZikgKyAoKHNpemUgJiB+MHhmZlVMKSA8PCAyKTsKICNlbmRpZgogCXNpemUgPSBBTElHTihzaXplICsgc2l6ZTEsIDQwOTYpOworCWlmIChzaXplIDwgb2xkX3NpemUpCisJCXNpemUgPSBvbGRfc2l6ZTsKIAlpZiAoIXNpemUpIHsKIAkJaWYgKGJfcmVzLT5zdGFydCB8fCBiX3Jlcy0+ZW5kKQogCQkJZGV2X2luZm8oJmJ1cy0+c2VsZi0+ZGV2LCAiZGlzYWJsaW5nIGJyaWRnZSB3aW5kb3cgIgpAQCAtMzUyLDcgKzQ2OCw3IEBACiAJCQkgdW5zaWduZWQgbG9uZyB0eXBlLCByZXNvdXJjZV9zaXplX3QgbWluX3NpemUpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKLQlyZXNvdXJjZV9zaXplX3QgbWluX2FsaWduLCBhbGlnbiwgc2l6ZTsKKwlyZXNvdXJjZV9zaXplX3QgbWluX2FsaWduLCBhbGlnbiwgc2l6ZSwgb2xkX3NpemU7CiAJcmVzb3VyY2Vfc2l6ZV90IGFsaWduc1sxMl07CS8qIEFsaWdubWVudHMgZnJvbSAxTWIgdG8gMkdiICovCiAJaW50IG9yZGVyLCBtYXhfb3JkZXI7CiAJc3RydWN0IHJlc291cmNlICpiX3JlcyA9IGZpbmRfZnJlZV9idXNfcmVzb3VyY2UoYnVzLCB0eXBlKTsKQEAgLTQwMiw2ICs1MTgsMTEgQEAKIAl9CiAJaWYgKHNpemUgPCBtaW5fc2l6ZSkKIAkJc2l6ZSA9IG1pbl9zaXplOworCW9sZF9zaXplID0gcmVzb3VyY2Vfc2l6ZShiX3Jlcyk7CisJaWYgKG9sZF9zaXplID09IDEpCisJCW9sZF9zaXplID0gMDsKKwlpZiAoc2l6ZSA8IG9sZF9zaXplKQorCQlzaXplID0gb2xkX3NpemU7CiAKIAlhbGlnbiA9IDA7CiAJbWluX2FsaWduID0gMDsKQEAgLTUzOCwyMyArNjU5LDI1IEBACiB9CiBFWFBPUlRfU1lNQk9MKHBjaV9idXNfc2l6ZV9icmlkZ2VzKTsKIAotdm9pZCBfX3JlZiBwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cykKK3N0YXRpYyB2b2lkIF9fcmVmIF9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCiB7CiAJc3RydWN0IHBjaV9idXMgKmI7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAotCXBidXNfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoYnVzKTsKKwlwYnVzX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKGJ1cywgZmFpbF9oZWFkKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewogCQliID0gZGV2LT5zdWJvcmRpbmF0ZTsKIAkJaWYgKCFiKQogCQkJY29udGludWU7CiAKLQkJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGIpOworCQlfX3BjaV9idXNfYXNzaWduX3Jlc291cmNlcyhiLCBmYWlsX2hlYWQpOwogCiAJCXN3aXRjaCAoZGV2LT5jbGFzcyA+PiA4KSB7CiAJCWNhc2UgUENJX0NMQVNTX0JSSURHRV9QQ0k6Ci0JCQlwY2lfc2V0dXBfYnJpZGdlKGIpOworCQkJaWYgKCFwY2lfaXNfZW5hYmxlZChkZXYpKQorCQkJCXBjaV9zZXR1cF9icmlkZ2UoYik7CiAJCQlicmVhazsKIAogCQljYXNlIFBDSV9DTEFTU19CUklER0VfQ0FSREJVUzoKQEAgLTU2OCwxNSArNjkxLDEzMCBAQAogCQl9CiAJfQogfQorCit2b2lkIF9fcmVmIHBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCV9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cywgTlVMTCk7Cit9CiBFWFBPUlRfU1lNQk9MKHBjaV9idXNfYXNzaWduX3Jlc291cmNlcyk7CiAKK3N0YXRpYyB2b2lkIF9fcmVmIF9fcGNpX2JyaWRnZV9hc3NpZ25fcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UsCisJCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCit7CisJc3RydWN0IHBjaV9idXMgKmI7CisKKwlwZGV2X2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKChzdHJ1Y3QgcGNpX2RldiAqKWJyaWRnZSwgZmFpbF9oZWFkKTsKKworCWIgPSBicmlkZ2UtPnN1Ym9yZGluYXRlOworCWlmICghYikKKwkJcmV0dXJuOworCisJX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYiwgZmFpbF9oZWFkKTsKKworCXN3aXRjaCAoYnJpZGdlLT5jbGFzcyA+PiA4KSB7CisJY2FzZSBQQ0lfQ0xBU1NfQlJJREdFX1BDSToKKwkJcGNpX3NldHVwX2JyaWRnZShiKTsKKwkJYnJlYWs7CisKKwljYXNlIFBDSV9DTEFTU19CUklER0VfQ0FSREJVUzoKKwkJcGNpX3NldHVwX2NhcmRidXMoYik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAibm90IHNldHRpbmcgdXAgYnJpZGdlIGZvciBidXMgIgorCQkJICIlMDR4OiUwMnhcbiIsIHBjaV9kb21haW5fbnIoYiksIGItPm51bWJlcik7CisJCWJyZWFrOworCX0KK30KK3N0YXRpYyB2b2lkIHBjaV9icmlkZ2VfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQkJICB1bnNpZ25lZCBsb25nIHR5cGUpCit7CisJaW50IGlkeDsKKwlib29sIGNoYW5nZWQgPSBmYWxzZTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwl1bnNpZ25lZCBsb25nIHR5cGVfbWFzayA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSB8CisJCQkJICBJT1JFU09VUkNFX1BSRUZFVENIOworCisJZGV2ID0gYnVzLT5zZWxmOworCWZvciAoaWR4ID0gUENJX0JSSURHRV9SRVNPVVJDRVM7IGlkeCA8PSBQQ0lfQlJJREdFX1JFU09VUkNFX0VORDsKKwkgICAgIGlkeCsrKSB7CisJCXIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOworCQlpZiAoKHItPmZsYWdzICYgdHlwZV9tYXNrKSAhPSB0eXBlKQorCQkJY29udGludWU7CisJCWlmICghci0+cGFyZW50KQorCQkJY29udGludWU7CisJCS8qCisJCSAqIGlmIHRoZXJlIGFyZSBjaGlsZHJlbiB1bmRlciB0aGF0LCB3ZSBzaG91bGQgcmVsZWFzZSB0aGVtCisJCSAqICBhbGwKKwkJICovCisJCXJlbGVhc2VfY2hpbGRfcmVzb3VyY2VzKHIpOworCQlpZiAoIXJlbGVhc2VfcmVzb3VyY2UocikpIHsKKwkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LAorCQkJCSAicmVzb3VyY2UgJWQgJXBSIHJlbGVhc2VkXG4iLCBpZHgsIHIpOworCQkJLyoga2VlcCB0aGUgb2xkIHNpemUgKi8KKwkJCXItPmVuZCA9IHJlc291cmNlX3NpemUocikgLSAxOworCQkJci0+c3RhcnQgPSAwOworCQkJci0+ZmxhZ3MgPSAwOworCQkJY2hhbmdlZCA9IHRydWU7CisJCX0KKwl9CisKKwlpZiAoY2hhbmdlZCkgeworCQkvKiBhdm9pZGluZyB0b3VjaCB0aGUgb25lIHdpdGhvdXQgUFJFRiAqLworCQlpZiAodHlwZSAmIElPUkVTT1VSQ0VfUFJFRkVUQ0gpCisJCQl0eXBlID0gSU9SRVNPVVJDRV9QUkVGRVRDSDsKKwkJX19wY2lfc2V0dXBfYnJpZGdlKGJ1cywgdHlwZSk7CisJfQorfQorCitlbnVtIHJlbGVhc2VfdHlwZSB7CisJbGVhZl9vbmx5LAorCXdob2xlX3N1YnRyZWUsCit9OworLyoKKyAqIHRyeSB0byByZWxlYXNlIHBjaSBicmlkZ2UgcmVzb3VyY2VzIHRoYXQgaXMgZnJvbSBsZWFmIGJyaWRnZSwKKyAqIHNvIHdlIGNhbiBhbGxvY2F0ZSBiaWcgbmV3IG9uZSBsYXRlcgorICovCitzdGF0aWMgdm9pZCBfX3JlZiBwY2lfYnVzX3JlbGVhc2VfYnJpZGdlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyB0eXBlLAorCQkJCQkJICAgZW51bSByZWxlYXNlX3R5cGUgcmVsX3R5cGUpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlib29sIGlzX2xlYWZfYnJpZGdlID0gdHJ1ZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQlzdHJ1Y3QgcGNpX2J1cyAqYiA9IGRldi0+c3Vib3JkaW5hdGU7CisJCWlmICghYikKKwkJCWNvbnRpbnVlOworCisJCWlzX2xlYWZfYnJpZGdlID0gZmFsc2U7CisKKwkJaWYgKChkZXYtPmNsYXNzID4+IDgpICE9IFBDSV9DTEFTU19CUklER0VfUENJKQorCQkJY29udGludWU7CisKKwkJaWYgKHJlbF90eXBlID09IHdob2xlX3N1YnRyZWUpCisJCQlwY2lfYnVzX3JlbGVhc2VfYnJpZGdlX3Jlc291cmNlcyhiLCB0eXBlLAorCQkJCQkJIHdob2xlX3N1YnRyZWUpOworCX0KKworCWlmIChwY2lfaXNfcm9vdF9idXMoYnVzKSkKKwkJcmV0dXJuOworCisJaWYgKChidXMtPnNlbGYtPmNsYXNzID4+IDgpICE9IFBDSV9DTEFTU19CUklER0VfUENJKQorCQlyZXR1cm47CisKKwlpZiAoKHJlbF90eXBlID09IHdob2xlX3N1YnRyZWUpIHx8IGlzX2xlYWZfYnJpZGdlKQorCQlwY2lfYnJpZGdlX3JlbGVhc2VfcmVzb3VyY2VzKGJ1cywgdHlwZSk7Cit9CisKIHN0YXRpYyB2b2lkIHBjaV9idXNfZHVtcF9yZXMoc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKLSAgICAgICAgaW50IGk7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGk7CiAKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IHJlc291cmNlICpyZXMgPSBidXMtPnJlc291cmNlW2ldOwotICAgICAgICAgICAgICAgIGlmICghcmVzIHx8ICFyZXMtPmVuZCkKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgcmVzLCBpKSB7CisJCWlmICghcmVzIHx8ICFyZXMtPmVuZCB8fCAhcmVzLT5mbGFncykKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmJ1cy0+ZGV2LCAicmVzb3VyY2UgJWQgJXBSXG4iLCBpLCByZXMpOwpAQCAtNjAwLDExICs4MzgsNjUgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IHBjaV9idXNfZ2V0X2RlcHRoKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJaW50IGRlcHRoID0gMDsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCWludCByZXQ7CisJCXN0cnVjdCBwY2lfYnVzICpiID0gZGV2LT5zdWJvcmRpbmF0ZTsKKwkJaWYgKCFiKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gcGNpX2J1c19nZXRfZGVwdGgoYik7CisJCWlmIChyZXQgKyAxID4gZGVwdGgpCisJCQlkZXB0aCA9IHJldCArIDE7CisJfQorCisJcmV0dXJuIGRlcHRoOworfQorc3RhdGljIGludCBfX2luaXQgcGNpX2dldF9tYXhfZGVwdGgodm9pZCkKK3sKKwlpbnQgZGVwdGggPSAwOworCXN0cnVjdCBwY2lfYnVzICpidXM7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1cywgJnBjaV9yb290X2J1c2VzLCBub2RlKSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gcGNpX2J1c19nZXRfZGVwdGgoYnVzKTsKKwkJaWYgKHJldCA+IGRlcHRoKQorCQkJZGVwdGggPSByZXQ7CisJfQorCisJcmV0dXJuIGRlcHRoOworfQorCisvKgorICogZmlyc3QgdHJ5IHdpbGwgbm90IHRvdWNoIHBjaSBicmlkZ2UgcmVzCisgKiBzZWNvbmQgIGFuZCBsYXRlciB0cnkgd2lsbCBjbGVhciBzbWFsbCBsZWFmIGJyaWRnZSByZXMKKyAqIHdpbGwgc3RvcCB0aWxsIHRvIHRoZSBtYXggIGRlZXB0aCBpZiBjYW4gbm90IGZpbmQgZ29vZCBvbmUKKyAqLwogdm9pZCBfX2luaXQKIHBjaV9hc3NpZ25fdW5hc3NpZ25lZF9yZXNvdXJjZXModm9pZCkKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOworCWludCB0cmllZF90aW1lcyA9IDA7CisJZW51bSByZWxlYXNlX3R5cGUgcmVsX3R5cGUgPSBsZWFmX29ubHk7CisJc3RydWN0IHJlc291cmNlX2xpc3RfeCBoZWFkLCAqbGlzdDsKKwl1bnNpZ25lZCBsb25nIHR5cGVfbWFzayA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSB8CisJCQkJICBJT1JFU09VUkNFX1BSRUZFVENIOworCXVuc2lnbmVkIGxvbmcgZmFpbGVkX3R5cGU7CisJaW50IG1heF9kZXB0aCA9IHBjaV9nZXRfbWF4X2RlcHRoKCk7CisJaW50IHBjaV90cnlfbnVtOwogCisJaGVhZC5uZXh0ID0gTlVMTDsKKworCXBjaV90cnlfbnVtID0gbWF4X2RlcHRoICsgMTsKKwlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBtYXggYnVzIGRlcHRoOiAlZCBwY2lfdHJ5X251bTogJWRcbiIsCisJCSBtYXhfZGVwdGgsIHBjaV90cnlfbnVtKTsKKworYWdhaW46CiAJLyogRGVwdGggZmlyc3QsIGNhbGN1bGF0ZSBzaXplcyBhbmQgYWxpZ25tZW50cyBvZiBhbGwKIAkgICBzdWJvcmRpbmF0ZSBidXNlcy4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1cywgJnBjaV9yb290X2J1c2VzLCBub2RlKSB7CkBAIC02MTIsMTIgKzkwNCwxMzAgQEAKIAl9CiAJLyogRGVwdGggbGFzdCwgYWxsb2NhdGUgcmVzb3VyY2VzIGFuZCB1cGRhdGUgdGhlIGhhcmR3YXJlLiAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcGNpX3Jvb3RfYnVzZXMsIG5vZGUpIHsKLQkJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cyk7Ci0JCXBjaV9lbmFibGVfYnJpZGdlcyhidXMpOworCQlfX3BjaV9idXNfYXNzaWduX3Jlc291cmNlcyhidXMsICZoZWFkKTsKIAl9CisJdHJpZWRfdGltZXMrKzsKKworCS8qIGFueSBkZXZpY2UgY29tcGxhaW4/ICovCisJaWYgKCFoZWFkLm5leHQpCisJCWdvdG8gZW5hYmxlX2FuZF9kdW1wOworCWZhaWxlZF90eXBlID0gMDsKKwlmb3IgKGxpc3QgPSBoZWFkLm5leHQ7IGxpc3Q7KSB7CisJCWZhaWxlZF90eXBlIHw9IGxpc3QtPmZsYWdzOworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwl9CisJLyoKKwkgKiBpbyBwb3J0IGFyZSB0aWdodCwgZG9uJ3QgdHJ5IGV4dHJhCisJICogb3IgaWYgcmVhY2ggdGhlIGxpbWl0LCBkb24ndCB3YW50IHRvIHRyeSBtb3JlCisJICovCisJZmFpbGVkX3R5cGUgJj0gdHlwZV9tYXNrOworCWlmICgoZmFpbGVkX3R5cGUgPT0gSU9SRVNPVVJDRV9JTykgfHwgKHRyaWVkX3RpbWVzID49IHBjaV90cnlfbnVtKSkgeworCQlmcmVlX2ZhaWxlZF9saXN0KCZoZWFkKTsKKwkJZ290byBlbmFibGVfYW5kX2R1bXA7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogTm8uICVkIHRyeSB0byBhc3NpZ24gdW5hc3NpZ25lZCByZXNcbiIsCisJCQkgdHJpZWRfdGltZXMgKyAxKTsKKworCS8qIHRoaXJkIHRpbWVzIGFuZCBsYXRlciB3aWxsIG5vdCBjaGVjayBpZiBpdCBpcyBsZWFmICovCisJaWYgKCh0cmllZF90aW1lcyArIDEpID4gMikKKwkJcmVsX3R5cGUgPSB3aG9sZV9zdWJ0cmVlOworCisJLyoKKwkgKiBUcnkgdG8gcmVsZWFzZSBsZWFmIGJyaWRnZSdzIHJlc291cmNlcyB0aGF0IGRvZXNuJ3QgZml0IHJlc291cmNlIG9mCisJICogY2hpbGQgZGV2aWNlIHVuZGVyIHRoYXQgYnJpZGdlCisJICovCisJZm9yIChsaXN0ID0gaGVhZC5uZXh0OyBsaXN0OykgeworCQlidXMgPSBsaXN0LT5kZXYtPmJ1czsKKwkJcGNpX2J1c19yZWxlYXNlX2JyaWRnZV9yZXNvdXJjZXMoYnVzLCBsaXN0LT5mbGFncyAmIHR5cGVfbWFzaywKKwkJCQkJCSAgcmVsX3R5cGUpOworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwl9CisJLyogcmVzdG9yZSBzaXplIGFuZCBmbGFncyAqLworCWZvciAobGlzdCA9IGhlYWQubmV4dDsgbGlzdDspIHsKKwkJc3RydWN0IHJlc291cmNlICpyZXMgPSBsaXN0LT5yZXM7CisKKwkJcmVzLT5zdGFydCA9IGxpc3QtPnN0YXJ0OworCQlyZXMtPmVuZCA9IGxpc3QtPmVuZDsKKwkJcmVzLT5mbGFncyA9IGxpc3QtPmZsYWdzOworCQlpZiAobGlzdC0+ZGV2LT5zdWJvcmRpbmF0ZSkKKwkJCXJlcy0+ZmxhZ3MgPSAwOworCisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKwlmcmVlX2ZhaWxlZF9saXN0KCZoZWFkKTsKKworCWdvdG8gYWdhaW47CisKK2VuYWJsZV9hbmRfZHVtcDoKKwkvKiBEZXB0aCBsYXN0LCB1cGRhdGUgdGhlIGhhcmR3YXJlLiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcGNpX3Jvb3RfYnVzZXMsIG5vZGUpCisJCXBjaV9lbmFibGVfYnJpZGdlcyhidXMpOwogCiAJLyogZHVtcCB0aGUgcmVzb3VyY2Ugb24gYnVzZXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1cywgJnBjaV9yb290X2J1c2VzLCBub2RlKSB7CiAJCXBjaV9idXNfZHVtcF9yZXNvdXJjZXMoYnVzKTsKIAl9CiB9CisKK3ZvaWQgcGNpX2Fzc2lnbl91bmFzc2lnbmVkX2JyaWRnZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50ID0gYnJpZGdlLT5zdWJvcmRpbmF0ZTsKKwlpbnQgdHJpZWRfdGltZXMgPSAwOworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggaGVhZCwgKmxpc3Q7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIHR5cGVfbWFzayA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSB8CisJCQkJICBJT1JFU09VUkNFX1BSRUZFVENIOworCisJaGVhZC5uZXh0ID0gTlVMTDsKKworYWdhaW46CisJcGNpX2J1c19zaXplX2JyaWRnZXMocGFyZW50KTsKKwlfX3BjaV9icmlkZ2VfYXNzaWduX3Jlc291cmNlcyhicmlkZ2UsICZoZWFkKTsKKwlyZXR2YWwgPSBwY2lfcmVlbmFibGVfZGV2aWNlKGJyaWRnZSk7CisJcGNpX3NldF9tYXN0ZXIoYnJpZGdlKTsKKwlwY2lfZW5hYmxlX2JyaWRnZXMocGFyZW50KTsKKworCXRyaWVkX3RpbWVzKys7CisKKwlpZiAoIWhlYWQubmV4dCkKKwkJcmV0dXJuOworCisJaWYgKHRyaWVkX3RpbWVzID49IDIpIHsKKwkJLyogc3RpbGwgZmFpbCwgZG9uJ3QgbmVlZCB0byB0cnkgbW9yZSAqLworCQlmcmVlX2ZhaWxlZF9saXN0KCZoZWFkKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IE5vLiAlZCB0cnkgdG8gYXNzaWduIHVuYXNzaWduZWQgcmVzXG4iLAorCQkJIHRyaWVkX3RpbWVzICsgMSk7CisKKwkvKgorCSAqIFRyeSB0byByZWxlYXNlIGxlYWYgYnJpZGdlJ3MgcmVzb3VyY2VzIHRoYXQgZG9lc24ndCBmaXQgcmVzb3VyY2Ugb2YKKwkgKiBjaGlsZCBkZXZpY2UgdW5kZXIgdGhhdCBicmlkZ2UKKwkgKi8KKwlmb3IgKGxpc3QgPSBoZWFkLm5leHQ7IGxpc3Q7KSB7CisJCXN0cnVjdCBwY2lfYnVzICpidXMgPSBsaXN0LT5kZXYtPmJ1czsKKwkJdW5zaWduZWQgbG9uZyBmbGFncyA9IGxpc3QtPmZsYWdzOworCisJCXBjaV9idXNfcmVsZWFzZV9icmlkZ2VfcmVzb3VyY2VzKGJ1cywgZmxhZ3MgJiB0eXBlX21hc2ssCisJCQkJCQkgd2hvbGVfc3VidHJlZSk7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKwkvKiByZXN0b3JlIHNpemUgYW5kIGZsYWdzICovCisJZm9yIChsaXN0ID0gaGVhZC5uZXh0OyBsaXN0OykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGxpc3QtPnJlczsKKworCQlyZXMtPnN0YXJ0ID0gbGlzdC0+c3RhcnQ7CisJCXJlcy0+ZW5kID0gbGlzdC0+ZW5kOworCQlyZXMtPmZsYWdzID0gbGlzdC0+ZmxhZ3M7CisJCWlmIChsaXN0LT5kZXYtPnN1Ym9yZGluYXRlKQorCQkJcmVzLT5mbGFncyA9IDA7CisKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorCWZyZWVfZmFpbGVkX2xpc3QoJmhlYWQpOworCisJZ290byBhZ2FpbjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9hc3NpZ25fdW5hc3NpZ25lZF9icmlkZ2VfcmVzb3VyY2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Nsb3QuYyBiL2RyaXZlcnMvcGNpL3Nsb3QuYwppbmRleCA4YzAyYjZjLi40OWM5ZTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zbG90LmMKKysrIGIvZHJpdmVycy9wY2kvc2xvdC5jCkBAIC00Nyw2ICs0Nyw1NSBAQAogCQkJCXNsb3QtPm51bWJlcik7CiB9CiAKKy8qIHRoZXNlIHN0cmluZ3MgbWF0Y2ggdXAgd2l0aCB0aGUgdmFsdWVzIGluIHBjaV9idXNfc3BlZWQgKi8KK3N0YXRpYyBjaGFyICpwY2lfYnVzX3NwZWVkX3N0cmluZ3NbXSA9IHsKKwkiMzMgTUh6IFBDSSIsCQkvKiAweDAwICovCisJIjY2IE1IeiBQQ0kiLAkJLyogMHgwMSAqLworCSI2NiBNSHogUENJLVgiLCAJLyogMHgwMiAqLworCSIxMDAgTUh6IFBDSS1YIiwJLyogMHgwMyAqLworCSIxMzMgTUh6IFBDSS1YIiwJLyogMHgwNCAqLworCU5VTEwsCQkJLyogMHgwNSAqLworCU5VTEwsCQkJLyogMHgwNiAqLworCU5VTEwsCQkJLyogMHgwNyAqLworCU5VTEwsCQkJLyogMHgwOCAqLworCSI2NiBNSHogUENJLVggMjY2IiwJLyogMHgwOSAqLworCSIxMDAgTUh6IFBDSS1YIDI2NiIsCS8qIDB4MGEgKi8KKwkiMTMzIE1IeiBQQ0ktWCAyNjYiLAkvKiAweDBiICovCisJIlVua25vd24gQUdQIiwJCS8qIDB4MGMgKi8KKwkiMXggQUdQIiwJCS8qIDB4MGQgKi8KKwkiMnggQUdQIiwJCS8qIDB4MGUgKi8KKwkiNHggQUdQIiwJCS8qIDB4MGYgKi8KKwkiOHggQUdQIiwJCS8qIDB4MTAgKi8KKwkiNjYgTUh6IFBDSS1YIDUzMyIsCS8qIDB4MTEgKi8KKwkiMTAwIE1IeiBQQ0ktWCA1MzMiLAkvKiAweDEyICovCisJIjEzMyBNSHogUENJLVggNTMzIiwJLyogMHgxMyAqLworCSIyLjUgR1QvcyBQQ0llIiwJLyogMHgxNCAqLworCSI1LjAgR1QvcyBQQ0llIiwJLyogMHgxNSAqLworCSI4LjAgR1QvcyBQQ0llIiwJLyogMHgxNiAqLworfTsKKworc3RhdGljIHNzaXplX3QgYnVzX3NwZWVkX3JlYWQoZW51bSBwY2lfYnVzX3NwZWVkIHNwZWVkLCBjaGFyICpidWYpCit7CisJY29uc3QgY2hhciAqc3BlZWRfc3RyaW5nOworCisJaWYgKHNwZWVkIDwgQVJSQVlfU0laRShwY2lfYnVzX3NwZWVkX3N0cmluZ3MpKQorCQlzcGVlZF9zdHJpbmcgPSBwY2lfYnVzX3NwZWVkX3N0cmluZ3Nbc3BlZWRdOworCWVsc2UKKwkJc3BlZWRfc3RyaW5nID0gIlVua25vd24iOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHNwZWVkX3N0cmluZyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1heF9zcGVlZF9yZWFkX2ZpbGUoc3RydWN0IHBjaV9zbG90ICpzbG90LCBjaGFyICpidWYpCit7CisJcmV0dXJuIGJ1c19zcGVlZF9yZWFkKHNsb3QtPmJ1cy0+bWF4X2J1c19zcGVlZCwgYnVmKTsKK30KKworc3RhdGljIHNzaXplX3QgY3VyX3NwZWVkX3JlYWRfZmlsZShzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gYnVzX3NwZWVkX3JlYWQoc2xvdC0+YnVzLT5jdXJfYnVzX3NwZWVkLCBidWYpOworfQorCiBzdGF0aWMgdm9pZCBwY2lfc2xvdF9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CkBAIC02Niw5ICsxMTUsMTUgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfc2xvdF9hdHRyaWJ1dGUgcGNpX3Nsb3RfYXR0cl9hZGRyZXNzID0KIAlfX0FUVFIoYWRkcmVzcywgKFNfSUZSRUcgfCBTX0lSVUdPKSwgYWRkcmVzc19yZWFkX2ZpbGUsIE5VTEwpOworc3RhdGljIHN0cnVjdCBwY2lfc2xvdF9hdHRyaWJ1dGUgcGNpX3Nsb3RfYXR0cl9tYXhfc3BlZWQgPQorCV9fQVRUUihtYXhfYnVzX3NwZWVkLCAoU19JRlJFRyB8IFNfSVJVR08pLCBtYXhfc3BlZWRfcmVhZF9maWxlLCBOVUxMKTsKK3N0YXRpYyBzdHJ1Y3QgcGNpX3Nsb3RfYXR0cmlidXRlIHBjaV9zbG90X2F0dHJfY3VyX3NwZWVkID0KKwlfX0FUVFIoY3VyX2J1c19zcGVlZCwgKFNfSUZSRUcgfCBTX0lSVUdPKSwgY3VyX3NwZWVkX3JlYWRfZmlsZSwgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwY2lfc2xvdF9kZWZhdWx0X2F0dHJzW10gPSB7CiAJJnBjaV9zbG90X2F0dHJfYWRkcmVzcy5hdHRyLAorCSZwY2lfc2xvdF9hdHRyX21heF9zcGVlZC5hdHRyLAorCSZwY2lfc2xvdF9hdHRyX2N1cl9zcGVlZC5hdHRyLAogCU5VTEwsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwppbmRleCA5ZjNhZGJkLi4wYTY2MDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKQEAgLTg0LDcgKzg0LDcgQEAKIAl0cmlzdGF0ZSAiQ2FyZEJ1cyB5ZW50YS1jb21wYXRpYmxlIGJyaWRnZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IENBUkRCVVMgaWYgIUVNQkVEREVECi0Jc2VsZWN0IFBDQ0FSRF9OT05TVEFUSUMKKwlzZWxlY3QgUENDQVJEX05PTlNUQVRJQyBpZiBQQ01DSUEgIT0gbgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgQ2FyZEJ1cyBob3N0IGJyaWRnZXMuICBWaXJ0dWFsbHkKIAkgIGFsbCBtb2Rlcm4gUENNQ0lBIGJyaWRnZXMgYXJlIENhcmRCdXMgY29tcGF0aWJsZS4gIEEgImJyaWRnZSIgaXMKQEAgLTE2MSw5ICsxNjEsOCBAQAogCiBjb25maWcgUENNQ0lBX004WFgKIAl0cmlzdGF0ZSAiTVBDOHh4IFBDTUNJQSBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENNQ0lBICYmIFBQQyAmJiA4eHgKLQlzZWxlY3QgUENDQVJEX0lPRFlOCi0Jc2VsZWN0IFBDQ0FSRF9OT05TVEFUSUMKKwlkZXBlbmRzIG9uIFBDQ0FSRCAmJiBQUEMgJiYgOHh4CisJc2VsZWN0IFBDQ0FSRF9JT0RZTiBpZiBQQ01DSUEgIT0gbgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBQb3dlclBDIDh4eCBzZXJpZXMgUENNQ0lBCiAJICBjb250cm9sbGVyLgpAQCAtMTc0LDYgKzE3MywyNyBAQAogCXRyaXN0YXRlICJBdTF4MDAgcGNtY2lhIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTT0NfQVUxWDAwICYmIFBDTUNJQQogCitjb25maWcgUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQKKwl0cmlzdGF0ZSAiQWxjaGVteSBEYi9QYjF4eHggUENNQ0lBIHNvY2tldCBzZXJ2aWNlcyIKKwlkZXBlbmRzIG9uIFNPQ19BVTFYMDAgJiYgUENNQ0lBCisJc2VsZWN0IDY0QklUX1BIWVNfQUREUgorCWhlbHAKKwkgIEVuYWJsZSB0aGlzIGRyaXZlciBvZiB5b3Ugd2FudCBQQ01DSUEgc3VwcG9ydCBvbiB5b3VyIEFsY2hlbXkKKwkgIERiMTAwMCwgRGIvUGIxMTAwLCBEYi9QYjE1MDAsIERiL1BiMTU1MCwgRGIvUGIxMjAwIGJvYXJkLgorCSAgTk9UIHN1aXRhYmxlIGZvciB0aGUgUEIxMDAwIQorCisJICBUaGlzIGRyaXZlciBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSBjYWxsZWQgZGIxeHh4X3NzLmtvCisKK2NvbmZpZyBQQ01DSUFfWFhTMTUwMAorCXRyaXN0YXRlICJNeUNhYmxlIFhYUzE1MDAgUENNQ0lBIHNvY2tldCBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENNQ0lBICYmIE1JUFNfWFhTMTUwMAorCXNlbGVjdCA2NEJJVF9QSFlTX0FERFIKKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgUENNQ0lBL0NGIHNvY2tldCBpbnRlcmZhY2Ugb24gTXlDYWJsZSBYWFMxNTAwCisJICBzeXN0ZW1zLgorCisJICBUaGlzIGRyaXZlciBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSBjYWxsZWQgeHhzMTUwMF9zcy5rbworCiBjb25maWcgUENNQ0lBX0JDTTYzWFgKIAl0cmlzdGF0ZSAiYmNtNjN4eCBwY21jaWEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEJDTTYzWFggJiYgUENNQ0lBCkBAIC0yMzgsMTQgKzI1OCwxMiBAQAogY29uZmlnIE0zMlJfUENDCiAJYm9vbCAiTTMyUiBQQ01DSUEgSS9GIgogCWRlcGVuZHMgb24gTTMyUiAmJiBDSElQX00zMjcwMCAmJiBQQ01DSUEKLQlzZWxlY3QgUENDQVJEX05PTlNUQVRJQwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gdXNlIHRoZSBNMzJSIFBDTUNJQSBjb250cm9sbGVyLgogCiBjb25maWcgTTMyUl9DRkMKIAlib29sICJNMzJSIENGIEkvRiBDb250cm9sbGVyIgogCWRlcGVuZHMgb24gTTMyUiAmJiAoUExBVF9VU1JWIHx8IFBMQVRfTTMyNzAwVVQgfHwgUExBVF9NQVBQSTIgfHwgUExBVF9NQVBQSTMgfHwgUExBVF9PUFNQVVQpCi0Jc2VsZWN0IFBDQ0FSRF9OT05TVEFUSUMKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHVzZSB0aGUgTTMyUiBDb21wYWN0Rmxhc2ggY29udHJvbGxlci4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQppbmRleCA4M2ZmODAyLi4zODFiMDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQpAQCAtMiwxMSArMiwxMSBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGtlcm5lbCBwY21jaWEgc3Vic3lzdGVtIChjL28gRGF2aWQgSGluZHMpCiAjCiAKLXBjbWNpYV9jb3JlLXkJCQkJCSs9IGNzLm8gY2lzdHBsLm8gcnNyY19tZ3IubyBzb2NrZXRfc3lzZnMubworcGNtY2lhX2NvcmUteQkJCQkJKz0gY3MubyByc3JjX21nci5vIHNvY2tldF9zeXNmcy5vCiBwY21jaWFfY29yZS0kKENPTkZJR19DQVJEQlVTKQkJCSs9IGNhcmRidXMubwogb2JqLSQoQ09ORklHX1BDQ0FSRCkJCQkJKz0gcGNtY2lhX2NvcmUubwogCi1wY21jaWEteQkJCQkJKz0gZHMubyBwY21jaWFfcmVzb3VyY2UubworcGNtY2lhLXkJCQkJCSs9IGRzLm8gcGNtY2lhX3Jlc291cmNlLm8gY2lzdHBsLm8KIHBjbWNpYS0kKENPTkZJR19QQ01DSUFfSU9DVEwpCQkJKz0gcGNtY2lhX2lvY3RsLm8KIG9iai0kKENPTkZJR19QQ01DSUEpCQkJCSs9IHBjbWNpYS5vCiAKQEAgLTM1LDE4ICszNSwxMCBAQAogb2JqLSQoQ09ORklHX0JGSU5fQ0ZQQ01DSUEpCQkJKz0gYmZpbl9jZl9wY21jaWEubwogb2JqLSQoQ09ORklHX0FUOTFfQ0YpCQkJCSs9IGF0OTFfY2Yubwogb2JqLSQoQ09ORklHX0VMRUNUUkFfQ0YpCQkJKz0gZWxlY3RyYV9jZi5vCitvYmotJChDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQpCQkrPSBkYjF4eHhfc3MubwogCiBhdTF4MDBfc3MteQkJCQkJKz0gYXUxMDAwX2dlbmVyaWMubwogYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfUEIxMDAwKQkJCSs9IGF1MTAwMF9wYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfUEIxMTAwKQkJCSs9IGF1MTAwMF9wYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfUEIxMjAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfUEIxNTAwKQkJCSs9IGF1MTAwMF9wYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxMDAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxMTAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxMjAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxNTAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxNTUwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfWFhTMTUwMCkJCSs9IGF1MTAwMF94eHMxNTAwLm8KIAogc2ExMTExX2NzLXkJCQkJCSs9IHNhMTExMV9nZW5lcmljLm8KIHNhMTExMV9jcy0kKENPTkZJR19BU1NBQkVUX05FUE9OU0VUKQkJKz0gc2ExMTAwX25lcG9uc2V0Lm8KQEAgLTc2LDMgKzY4LDUgQEAKIHB4YTJ4eC1vYmotJChDT05GSUdfTUFDSF9TVEFSR0FURTIpCQkrPSBweGEyeHhfc3RhcmdhdGUyLm8KIAogb2JqLSQoQ09ORklHX1BDTUNJQV9QWEEyWFgpCQkJKz0gcHhhMnh4X2Jhc2UubyAkKHB4YTJ4eC1vYmoteSkKKworb2JqLSQoQ09ORklHX1BDTUNJQV9YWFMxNTAwKQkJCSs9IHh4czE1MDBfc3MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jIGIvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCmluZGV4IGUxZGNjZWQuLjVkMjI4MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKQEAgLTUyLDggKzUyLDYgQEAKIAl1bnNpZ25lZCBsb25nCQlwaHlzX2Jhc2VhZGRyOwogfTsKIAotI2RlZmluZQlTWl8ySwkJCSgyICogU1pfMUspCi0KIHN0YXRpYyBpbmxpbmUgaW50IGF0OTFfY2ZfcHJlc2VudChzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQgKmNmKQogewogCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoY2YtPmJvYXJkLT5kZXRfcGluKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc4ZDc3Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZGIxeDAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDUgKzAsMCBAQAotLyoKLSAqCi0gKiBBbGNoZW15IFNlbWkgRGIxeDAwIGJvYXJkcyBzcGVjaWZpYyBwY21jaWEgcm91dGluZXMuCi0gKgotICogQ29weXJpZ2h0IDIwMDIgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogQ29weXJpZ2h0IDIwMDQgUGV0ZSBQb3BvdiwgdXBkYXRlZCB0aGUgZHJpdmVyIHRvIDIuNi4KLSAqIEZvbGxvd2VkIHRoZSBzYTExeHggQVBJIGFuZCBsYXJnZWx5IGNvcGllZCBtYW55IG9mIHRoZSBoYXJkd2FyZQotICogaW5kZXBlbmRlbnQgZnVuY3Rpb25zLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTIwMCkKLQkjaW5jbHVkZSA8ZGIxMjAwLmg+Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTIwMCkKLQkjaW5jbHVkZSA8cGIxMjAwLmg+Ci0jZWxzZQotCSNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvZGIxeDAwLmg+Ci0Jc3RhdGljIEJDU1IgKiBjb25zdCBiY3NyID0gKEJDU1IgKilCQ1NSX0tTRUcxX0FERFI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgImF1MTAwMF9nZW5lcmljLmgiCi0KLSNpZiAwCi0jZGVmaW5lIGRlYnVnKHgsYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIHgsIF9fZnVuY19fICwgIyNhcmdzKQotI2Vsc2UKLSNkZWZpbmUgZGVidWcoeCxhcmdzLi4uKQotI2VuZGlmCi0KLQotc3RydWN0IGF1MTAwMF9wY21jaWFfc29ja2V0IGF1MTAwMF9wY21jaWFfc29ja2V0W1BDTUNJQV9OVU1fU09DS1NdOwotZXh0ZXJuIGludCBhdTF4MDBfcGNtY2lhX3NvY2tldF9wcm9iZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBwY21jaWFfbG93X2xldmVsICosIGludCwgaW50KTsKLQotc3RhdGljIGludCBkYjF4MDBfcGNtY2lhX2h3X2luaXQoc3RydWN0IGF1MTAwMF9wY21jaWFfc29ja2V0ICpza3QpCi17Ci0jaWZkZWYgQ09ORklHX01JUFNfREIxNTUwCi0Jc2t0LT5pcnEgPSBza3QtPm5yID8gQVUxMDAwX0dQSU9fNSA6IEFVMTAwMF9HUElPXzM7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTIwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19QQjEyMDApCi0Jc2t0LT5pcnEgPSBza3QtPm5yID8gQk9BUkRfUEMxX0lOVCA6IEJPQVJEX1BDMF9JTlQ7Ci0jZWxzZQotCXNrdC0+aXJxID0gc2t0LT5uciA/IEFVMTAwMF9HUElPXzUgOiBBVTEwMDBfR1BJT18yOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRiMXgwMF9wY21jaWFfc2h1dGRvd24oc3RydWN0IGF1MTAwMF9wY21jaWFfc29ja2V0ICpza3QpCi17Ci0JYmNzci0+cGNtY2lhID0gMDsgLyogdHVybiBvZmYgcG93ZXIgKi8KLQlhdV9zeW5jX2RlbGF5KDIpOwotfQotCi1zdGF0aWMgdm9pZAotZGIxeDAwX3BjbWNpYV9zb2NrZXRfc3RhdGUoc3RydWN0IGF1MTAwMF9wY21jaWFfc29ja2V0ICpza3QsIHN0cnVjdCBwY21jaWFfc3RhdGUgKnN0YXRlKQotewotCXUzMiBpbnNlcnRlZDsKLQl1bnNpZ25lZCBjaGFyIHZzOwotCi0Jc3RhdGUtPnJlYWR5ID0gMDsKLQlzdGF0ZS0+dnNfWHYgPSAwOwotCXN0YXRlLT52c18zdiA9IDA7Ci0Jc3RhdGUtPmRldGVjdCA9IDA7Ci0KLQlzd2l0Y2ggKHNrdC0+bnIpIHsKLQljYXNlIDA6Ci0JCXZzID0gYmNzci0+c3RhdHVzICYgMHgzOwotI2lmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMjAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTIwMCkKLQkJaW5zZXJ0ZWQgPSBCT0FSRF9DQVJEX0lOU0VSVEVEKDApOwotI2Vsc2UKLQkJaW5zZXJ0ZWQgPSAhKGJjc3ItPnN0YXR1cyAmICgxPDw0KSk7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQl2cyA9IChiY3NyLT5zdGF0dXMgJiAweEMpPj4yOwotI2lmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMjAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTIwMCkKLQkJaW5zZXJ0ZWQgPSBCT0FSRF9DQVJEX0lOU0VSVEVEKDEpOwotI2Vsc2UKLQkJaW5zZXJ0ZWQgPSAhKGJjc3ItPnN0YXR1cyAmICgxPDw1KSk7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JZGVmYXVsdDovKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCi0JCXJldHVybjsKLQl9Ci0KLQlpZiAoaW5zZXJ0ZWQpCi0JCWRlYnVnKCJkYjF4MDAgc29ja2V0ICVkOiBpbnNlcnRlZCAlZCwgdnMgJWQgcGNtY2lhICV4XG4iLAotCQkJCXNrdC0+bnIsIGluc2VydGVkLCB2cywgYmNzci0+cGNtY2lhKTsKLQotCWlmIChpbnNlcnRlZCkgewotCQlzd2l0Y2ggKHZzKSB7Ci0JCQljYXNlIDA6Ci0JCQljYXNlIDI6Ci0JCQkJc3RhdGUtPnZzXzN2PTE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDM6IC8qIDVWICovCi0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCS8qIHJldHVybiB3aXRob3V0IHNldHRpbmcgJ2RldGVjdCcgKi8KLQkJCQlwcmludGsoS0VSTl9FUlIgImRiMXgwMCBiYWQgVlMgKCVkKVxuIiwKLQkJCQkJCXZzKTsKLQkJfQotCQlzdGF0ZS0+ZGV0ZWN0ID0gMTsKLQkJc3RhdGUtPnJlYWR5ID0gMTsKLQl9Ci0JZWxzZSB7Ci0JCS8qIGlmIHRoZSBjYXJkIHdhcyBwcmV2aW91c2x5IGluc2VydGVkIGFuZCB0aGVuIGVqZWN0ZWQsCi0JCSAqIHdlIHNob3VsZCB0dXJuIG9mZiBwb3dlciB0byBpdAotCQkgKi8KLQkJaWYgKChza3QtPm5yID09IDApICYmIChiY3NyLT5wY21jaWEgJiBCQ1NSX1BDTUNJQV9QQzBSU1QpKSB7Ci0JCQliY3NyLT5wY21jaWEgJj0gfihCQ1NSX1BDTUNJQV9QQzBSU1QgfAotCQkJCQlCQ1NSX1BDTUNJQV9QQzBEUlZFTiB8Ci0JCQkJCUJDU1JfUENNQ0lBX1BDMFZQUCB8Ci0JCQkJCUJDU1JfUENNQ0lBX1BDMFZDQyk7Ci0JCQlhdV9zeW5jX2RlbGF5KDEwKTsKLQkJfQotCQllbHNlIGlmICgoc2t0LT5uciA9PSAxKSAmJiBiY3NyLT5wY21jaWEgJiBCQ1NSX1BDTUNJQV9QQzFSU1QpIHsKLQkJCWJjc3ItPnBjbWNpYSAmPSB+KEJDU1JfUENNQ0lBX1BDMVJTVCB8Ci0JCQkJCUJDU1JfUENNQ0lBX1BDMURSVkVOIHwKLQkJCQkJQkNTUl9QQ01DSUFfUEMxVlBQIHwKLQkJCQkJQkNTUl9QQ01DSUFfUEMxVkNDKTsKLQkJCWF1X3N5bmNfZGVsYXkoMTApOwotCQl9Ci0JfQotCi0Jc3RhdGUtPmJ2ZDE9MTsKLQlzdGF0ZS0+YnZkMj0xOwotCXN0YXRlLT53cnByb3Q9MDsKLX0KLQotc3RhdGljIGludAotZGIxeDAwX3BjbWNpYV9jb25maWd1cmVfc29ja2V0KHN0cnVjdCBhdTEwMDBfcGNtY2lhX3NvY2tldCAqc2t0LCBzdHJ1Y3Qgc29ja2V0X3N0YXRlX3QgKnN0YXRlKQotewotCXUxNiBwd3I7Ci0JaW50IHNvY2sgPSBza3QtPm5yOwotCi0JZGVidWcoImNvbmZpZ19za3QgJWQgVmNjICVkViBWcHAgJWRWLCByZXNldCAlZFxuIiwKLQkJCXNvY2ssIHN0YXRlLT5WY2MsIHN0YXRlLT5WcHAsCi0JCQlzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCk7Ci0KLQkvKiBwY21jaWEgcmVnIHdhcyBzZXQgdG8gemVybyBhdCBpbml0IHRpbWUuIEJlIGNhcmVmdWwgd2hlbgotCSAqIGluaXRpYWxpemluZyBhIHNvY2tldCBub3QgdG8gd2lwZSBvdXQgdGhlIHNldHRpbmdzIG9mIHRoZQotCSAqIG90aGVyIHNvY2tldC4KLQkgKi8KLQlwd3IgPSBiY3NyLT5wY21jaWE7Ci0JcHdyICY9IH4oMHhmIDw8IHNvY2sqOCk7IC8qIGNsZWFyIHZvbHRhZ2Ugc2V0dGluZ3MgKi8KLQotCXN0YXRlLT5WcHAgPSAwOwotCXN3aXRjaChzdGF0ZS0+VmNjKXsKLQkJY2FzZSAwOiAgLyogVmNjIDAgKi8KLQkJCXB3ciB8PSBTRVRfVkNDX1ZQUCgwLDAsc29jayk7Ci0JCQlicmVhazsKLQkJY2FzZSA1MDogLyogVmNjIDVWICovCi0JCQlzd2l0Y2goc3RhdGUtPlZwcCkgewotCQkJCWNhc2UgMDoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDIsMCxzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA1MDoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDIsMSxzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAxMjoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDIsMixzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAzMzoKLQkJCQlkZWZhdWx0OgotCQkJCQlwd3IgfD0gU0VUX1ZDQ19WUFAoMCwwLHNvY2spOwotCQkJCQlwcmludGsoIiVzOiBiYWQgVmNjL1ZwcCAoJWQ6JWQpXG4iLAotCQkJCQkJCV9fZnVuY19fLAotCQkJCQkJCXN0YXRlLT5WY2MsCi0JCQkJCQkJc3RhdGUtPlZwcCk7Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgMzM6IC8qIFZjYyAzLjNWICovCi0JCQlzd2l0Y2goc3RhdGUtPlZwcCkgewotCQkJCWNhc2UgMDoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDEsMCxzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAxMjoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDEsMixzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAzMzoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDEsMSxzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA1MDoKLQkJCQlkZWZhdWx0OgotCQkJCQlwd3IgfD0gU0VUX1ZDQ19WUFAoMCwwLHNvY2spOwotCQkJCQlwcmludGsoIiVzOiBiYWQgVmNjL1ZwcCAoJWQ6JWQpXG4iLAotCQkJCQkJCV9fZnVuY19fLAotCQkJCQkJCXN0YXRlLT5WY2MsCi0JCQkJCQkJc3RhdGUtPlZwcCk7Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6IC8qIHdoYXQncyB0aGlzID8gKi8KLQkJCXB3ciB8PSBTRVRfVkNDX1ZQUCgwLDAsc29jayk7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBiYWQgVmNjICVkXG4iLAotCQkJCQlfX2Z1bmNfXywgc3RhdGUtPlZjYyk7Ci0JCQlicmVhazsKLQl9Ci0KLQliY3NyLT5wY21jaWEgPSBwd3I7Ci0JYXVfc3luY19kZWxheSgzMDApOwotCi0JaWYgKHNvY2sgPT0gMCkgewotCQlpZiAoIShzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkpIHsKLQkJCXB3ciB8PSBCQ1NSX1BDTUNJQV9QQzBEUlZFTjsKLQkJCWJjc3ItPnBjbWNpYSA9IHB3cjsKLQkJCWF1X3N5bmNfZGVsYXkoMzAwKTsKLQkJCXB3ciB8PSBCQ1NSX1BDTUNJQV9QQzBSU1Q7Ci0JCQliY3NyLT5wY21jaWEgPSBwd3I7Ci0JCQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwd3IgJj0gfihCQ1NSX1BDTUNJQV9QQzBSU1QgfCBCQ1NSX1BDTUNJQV9QQzBEUlZFTik7Ci0JCQliY3NyLT5wY21jaWEgPSBwd3I7Ci0JCQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JCX0KLQl9Ci0JZWxzZSB7Ci0JCWlmICghKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKSkgewotCQkJcHdyIHw9IEJDU1JfUENNQ0lBX1BDMURSVkVOOwotCQkJYmNzci0+cGNtY2lhID0gcHdyOwotCQkJYXVfc3luY19kZWxheSgzMDApOwotCQkJcHdyIHw9IEJDU1JfUENNQ0lBX1BDMVJTVDsKLQkJCWJjc3ItPnBjbWNpYSA9IHB3cjsKLQkJCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQkJfQotCQllbHNlIHsKLQkJCXB3ciAmPSB+KEJDU1JfUENNQ0lBX1BDMVJTVCB8IEJDU1JfUENNQ0lBX1BDMURSVkVOKTsKLQkJCWJjc3ItPnBjbWNpYSA9IHB3cjsKLQkJCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEVuYWJsZSBjYXJkIHN0YXR1cyBJUlFzIG9uIChyZS0paW5pdGlhbGlzYXRpb24uICBUaGlzIGNhbgotICogYmUgY2FsbGVkIGF0IGluaXRpYWxpc2F0aW9uLCBwb3dlciBtYW5hZ2VtZW50IGV2ZW50LCBvcgotICogcGNtY2lhIGV2ZW50LgotICovCi12b2lkIGRiMXgwMF9zb2NrZXRfaW5pdChzdHJ1Y3QgYXUxMDAwX3BjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQkvKiBub3RoaW5nIHRvIGRvIGZvciBub3cgKi8KLX0KLQotLyoKLSAqIERpc2FibGUgY2FyZCBzdGF0dXMgSVJRcyBhbmQgUENNQ0lBIGJ1cyBvbiBzdXNwZW5kLgotICovCi12b2lkIGRiMXgwMF9zb2NrZXRfc3VzcGVuZChzdHJ1Y3QgYXUxMDAwX3BjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQkvKiBub3RoaW5nIHRvIGRvIGZvciBub3cgKi8KLX0KLQotc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgZGIxeDAwX3BjbWNpYV9vcHMgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQotCS5od19pbml0IAkJPSBkYjF4MDBfcGNtY2lhX2h3X2luaXQsCi0JLmh3X3NodXRkb3duCQk9IGRiMXgwMF9wY21jaWFfc2h1dGRvd24sCi0KLQkuc29ja2V0X3N0YXRlCQk9IGRiMXgwMF9wY21jaWFfc29ja2V0X3N0YXRlLAotCS5jb25maWd1cmVfc29ja2V0CT0gZGIxeDAwX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAotCi0JLnNvY2tldF9pbml0CQk9IGRiMXgwMF9zb2NrZXRfaW5pdCwKLQkuc29ja2V0X3N1c3BlbmQJCT0gZGIxeDAwX3NvY2tldF9zdXNwZW5kCi19OwotCi1pbnQgYXUxeF9ib2FyZF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0ID0gLUVOT0RFVjsKLQliY3NyLT5wY21jaWEgPSAwOyAvKiB0dXJuIG9mZiBwb3dlciwgaWYgaXQncyBub3QgYWxyZWFkeSBvZmYgKi8KLQlhdV9zeW5jX2RlbGF5KDIpOwotCXJldCA9IGF1MXgwMF9wY21jaWFfc29ja2V0X3Byb2JlKGRldiwgJmRiMXgwMF9wY21jaWFfb3BzLCAwLCAyKTsKLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKaW5kZXggMDIwODg3MC4uMTcxYzhhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCkBAIC00MDUsMTggKzQwNSwxNiBAQAogCQkJc2t0LT52aXJ0X2lvID0gKHZvaWQgKikKIAkJCQkoaW9yZW1hcCgocGh5c190KUFVMVhfU09DSzBfSU8sIDB4MTAwMCkgLQogCQkJCSh1MzIpbWlwc19pb19wb3J0X2Jhc2UpOwotCQkJc2t0LT5waHlzX2F0dHIgPSBBVTFYX1NPQ0swX1BTRVVET19QSFlTX0FUVFI7Ci0JCQlza3QtPnBoeXNfbWVtID0gQVUxWF9TT0NLMF9QU0VVRE9fUEhZU19NRU07CisJCQlza3QtPnBoeXNfYXR0ciA9IEFVMVhfU09DSzBfUEhZU19BVFRSOworCQkJc2t0LT5waHlzX21lbSA9IEFVMVhfU09DSzBfUEhZU19NRU07CiAJCX0KLSNpZm5kZWYgQ09ORklHX01JUFNfWFhTMTUwMAogCQllbHNlICB7CiAJCQlza3QtPnZpcnRfaW8gPSAodm9pZCAqKQogCQkJCShpb3JlbWFwKChwaHlzX3QpQVUxWF9TT0NLMV9JTywgMHgxMDAwKSAtCiAJCQkJKHUzMiltaXBzX2lvX3BvcnRfYmFzZSk7Ci0JCQlza3QtPnBoeXNfYXR0ciA9IEFVMVhfU09DSzFfUFNFVURPX1BIWVNfQVRUUjsKLQkJCXNrdC0+cGh5c19tZW0gPSBBVTFYX1NPQ0sxX1BTRVVET19QSFlTX01FTTsKKwkJCXNrdC0+cGh5c19hdHRyID0gQVUxWF9TT0NLMV9QSFlTX0FUVFI7CisJCQlza3QtPnBoeXNfbWVtID0gQVUxWF9TT0NLMV9QSFlTX01FTTsKIAkJfQotI2VuZGlmCiAJCXBjbWNpYV9iYXNlX3ZhZGRyc1tpXSA9ICh1MzIgKilza3QtPnZpcnRfaW87CiAJCXJldCA9IG9wcy0+aHdfaW5pdChza3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaAppbmRleCAxM2E0ZmJjLi5hMzI0ZDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmgKQEAgLTM2LDMwICszNiwxNCBAQAogI2RlZmluZSBBVTFYX1NPQ0swX0lPICAgICAgICAweEYwMDAwMDAwMFVMTAogI2RlZmluZSBBVTFYX1NPQ0swX1BIWVNfQVRUUiAweEY0MDAwMDAwMFVMTAogI2RlZmluZSBBVTFYX1NPQ0swX1BIWVNfTUVNICAweEY4MDAwMDAwMFVMTAotLyogcHNldWRvIDMyIGJpdCBwaHlzIGFkZHJlc3Nlcywgd2hpY2ggZ2V0IGZpeGVkIHVwIHRvIHRoZQotICogcmVhbCAzNiBiaXQgYWRkcmVzcyBpbiBmaXh1cF9iaWdwaHlzX2FkZHIoKSAqLwotI2RlZmluZSBBVTFYX1NPQ0swX1BTRVVET19QSFlTX0FUVFIgMHhGNDAwMDAwMAotI2RlZmluZSBBVTFYX1NPQ0swX1BTRVVET19QSFlTX01FTSAgMHhGODAwMDAwMAogCiAvKiBwY21jaWEgc29ja2V0IDEgbmVlZHMgZXh0ZXJuYWwgZ2x1ZSBsb2dpYyBzbyB0aGUgbWVtb3J5IG1hcAogICogZGlmZmVycyBmcm9tIGJvYXJkIHRvIGJvYXJkLgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19QQjEwMDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfUEIxMTAwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfTUlQU19QQjE1MDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfUEIxNTUwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfTUlQU19QQjEyMDApCisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19QQjEwMDApCiAjZGVmaW5lIEFVMVhfU09DSzFfSU8gICAgICAgIDB4RjA4MDAwMDAwVUxMCiAjZGVmaW5lIEFVMVhfU09DSzFfUEhZU19BVFRSIDB4RjQ4MDAwMDAwVUxMCiAjZGVmaW5lIEFVMVhfU09DSzFfUEhZU19NRU0gIDB4Rjg4MDAwMDAwVUxMCi0jZGVmaW5lIEFVMVhfU09DSzFfUFNFVURPX1BIWVNfQVRUUiAweEY0ODAwMDAwCi0jZGVmaW5lIEFVMVhfU09DSzFfUFNFVURPX1BIWVNfTUVNICAweEY4ODAwMDAwCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX01JUFNfREIxNTAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTU1MCkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfTUlQU19EQjEyMDApCi0jZGVmaW5lIEFVMVhfU09DSzFfSU8gICAgICAgIDB4RjA0MDAwMDAwVUxMCi0jZGVmaW5lIEFVMVhfU09DSzFfUEhZU19BVFRSIDB4RjQ0MDAwMDAwVUxMCi0jZGVmaW5lIEFVMVhfU09DSzFfUEhZU19NRU0gIDB4Rjg0MDAwMDAwVUxMCi0jZGVmaW5lIEFVMVhfU09DSzFfUFNFVURPX1BIWVNfQVRUUiAweEY0NDAwMDAwCi0jZGVmaW5lIEFVMVhfU09DSzFfUFNFVURPX1BIWVNfTUVNICAweEY4NDAwMDAwCiAjZW5kaWYKIAogc3RydWN0IHBjbWNpYV9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMKaW5kZXggYjE5ODRlZC4uNWE5NzljYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKgotICogQWxjaGVteSBTZW1pIFBiMXgwMCBib2FyZHMgc3BlY2lmaWMgcGNtY2lhIHJvdXRpbmVzLgorICogQWxjaGVteSBTZW1pIFBiMTAwMCBib2FyZHMgc3BlY2lmaWMgcGNtY2lhIHJvdXRpbmVzLgogICoKICAqIENvcHlyaWdodCAyMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgogICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCkBAIC00NiwyMCArNDYsMTEgQEAKIAogI2RlZmluZSBkZWJ1ZyhmbXQsIGFyZy4uLikgZG8geyB9IHdoaWxlICgwKQogCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxMDAwCiAjaW5jbHVkZSA8YXNtL3BiMTAwMC5oPgogI2RlZmluZSBQQ01DSUFfSVJRIEFVMTAwMF9HUElPXzE1Ci0jZWxpZiBkZWZpbmVkIChDT05GSUdfTUlQU19QQjE1MDApCi0jaW5jbHVkZSA8YXNtL3BiMTUwMC5oPgotI2RlZmluZSBQQ01DSUFfSVJRIEFVMTUwMF9HUElPXzIwMwotI2VsaWYgZGVmaW5lZCAoQ09ORklHX01JUFNfUEIxMTAwKQotI2luY2x1ZGUgPGFzbS9wYjExMDAuaD4KLSNkZWZpbmUgUENNQ0lBX0lSUSBBVTEwMDBfR1BJT18xMQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgcGIxeDAwX3BjbWNpYV9pbml0KHN0cnVjdCBwY21jaWFfaW5pdCAqaW5pdCkKIHsKLSNpZmRlZiBDT05GSUdfTUlQU19QQjEwMDAKIAl1MTYgcGNyOwogCXBjciA9IFBDUl9TTE9UXzBfUlNUIHwgUENSX1NMT1RfMV9SU1Q7CiAKQEAgLTc0LDIxICs2NSwxMCBAQAogCWF1X3N5bmNfZGVsYXkoMjApOwogCSAgCiAJcmV0dXJuIFBDTUNJQV9OVU1fU09DS1M7Ci0KLSNlbHNlIC8qIGZpeG1lIC0tIHRha2UgY2FyZSBvZiB0aGUgUGIxNTAwIGF0IHNvbWUgcG9pbnQgKi8KLQotCXUxNiBwY3I7Ci0JcGNyID0gYXVfcmVhZHcoUENNQ0lBX0JPQVJEX1JFRykgJiB+MHhmOyAvKiB0dXJuIG9mZiBwb3dlciAqLwotCXBjciAmPSB+KFBDX0RFQVNTRVJUX1JTVCB8IFBDX0RSVl9FTik7Ci0JYXVfd3JpdGV3KHBjciwgUENNQ0lBX0JPQVJEX1JFRyk7Ci0JYXVfc3luY19kZWxheSg1MDApOwotCXJldHVybiBQQ01DSUFfTlVNX1NPQ0tTOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgcGIxeDAwX3BjbWNpYV9zaHV0ZG93bih2b2lkKQogewotI2lmZGVmIENPTkZJR19NSVBTX1BCMTAwMAogCXUxNiBwY3I7CiAJcGNyID0gUENSX1NMT1RfMF9SU1QgfCBQQ1JfU0xPVF8xX1JTVDsKIAlwY3IgfD0gU0VUX1ZDQ19WUFAoVkNDX0hJWixWUFBfSElaLDApOwpAQCAtOTYsMTQgKzc2LDYgQEAKIAlhdV93cml0ZWwocGNyLCBQQjEwMDBfUENSKTsKIAlhdV9zeW5jX2RlbGF5KDIwKTsKIAlyZXR1cm4gMDsKLSNlbHNlCi0JdTE2IHBjcjsKLQlwY3IgPSBhdV9yZWFkdyhQQ01DSUFfQk9BUkRfUkVHKSAmIH4weGY7IC8qIHR1cm4gb2ZmIHBvd2VyICovCi0JcGNyICY9IH4oUENfREVBU1NFUlRfUlNUIHwgUENfRFJWX0VOKTsKLQlhdV93cml0ZXcocGNyLCBQQ01DSUFfQk9BUkRfUkVHKTsKLQlhdV9zeW5jX2RlbGF5KDIpOwotCXJldHVybiAwOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgCkBAIC0xMTIsMjEgKzg0LDExIEBACiAJdTMyIGluc2VydGVkMCwgaW5zZXJ0ZWQxOwogCXUxNiB2czAsIHZzMTsKIAotI2lmZGVmIENPTkZJR19NSVBTX1BCMTAwMAogCXZzMCA9IHZzMSA9ICh1MTYpYXVfcmVhZGwoUEIxMDAwX0FDUjEpOwogCWluc2VydGVkMCA9ICEodnMwICYgKEFDUjFfU0xPVF8wX0NEMSB8IEFDUjFfU0xPVF8wX0NEMikpOwogCWluc2VydGVkMSA9ICEodnMxICYgKEFDUjFfU0xPVF8xX0NEMSB8IEFDUjFfU0xPVF8xX0NEMikpOwogCXZzMCA9ICh2czAgPj4gNCkgJiAweDM7CiAJdnMxID0gKHZzMSA+PiAxMikgJiAweDM7Ci0jZWxzZQotCXZzMCA9IChhdV9yZWFkdyhCT0FSRF9TVEFUVVNfUkVHKSA+PiA0KSAmIDB4MzsKLSNpZmRlZiBDT05GSUdfTUlQU19QQjE1MDAKLQlpbnNlcnRlZDAgPSAhKChhdV9yZWFkbChHUElPMl9QSU5TVEFURSkgPj4gMSkgJiAweDEpOyAvKiBncGlvIDIwMSAqLwotI2Vsc2UgLyogUGIxMTAwICovCi0JaW5zZXJ0ZWQwID0gISgoYXVfcmVhZGwoU1lTX1BJTlNUQVRFUkQpID4+IDkpICYgMHgxKTsgLyogZ3BpbyA5ICovCi0jZW5kaWYKLQlpbnNlcnRlZDEgPSAwOwotI2VuZGlmCiAKIAlzdGF0ZS0+cmVhZHkgPSAwOwogCXN0YXRlLT52c19YdiA9IDA7CkBAIC0yMDMsNyArMTY1LDYgQEAKIAogCWlmKGNvbmZpZ3VyZS0+c29jayA+IFBDTUNJQV9NQVhfU09DSykgcmV0dXJuIC0xOwogCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxMDAwCiAJcGNyID0gYXVfcmVhZGwoUEIxMDAwX1BDUik7CiAKIAlpZiAoY29uZmlndXJlLT5zb2NrID09IDApIHsKQEAgLTMyMyw4NCArMjg0LDYgQEAKIAlhdV93cml0ZWwocGNyLCBQQjEwMDBfUENSKTsKIAlhdV9zeW5jX2RlbGF5KDMwMCk7CiAKLSNlbHNlCi0KLQlwY3IgPSBhdV9yZWFkdyhQQ01DSUFfQk9BUkRfUkVHKSAmIH4weGY7Ci0KLQlkZWJ1ZygiVmNjICVkViBWcHAgJWRWLCBwY3IgJXgsIHJlc2V0ICVkXG4iLCAKLQkJCWNvbmZpZ3VyZS0+dmNjLCBjb25maWd1cmUtPnZwcCwgcGNyLCBjb25maWd1cmUtPnJlc2V0KTsKLQotCi0Jc3dpdGNoKGNvbmZpZ3VyZS0+dmNjKXsKLQkJY2FzZSAwOiAgLyogVmNjIDAgKi8KLQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgwLDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgNTA6IC8qIFZjYyA1ViAqLwotCQkJc3dpdGNoKGNvbmZpZ3VyZS0+dnBwKSB7Ci0JCQkJY2FzZSAwOgotCQkJCQlwY3IgfD0gU0VUX1ZDQ19WUFAoMiwwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA1MDoKLQkJCQkJcGNyIHw9IFNFVF9WQ0NfVlBQKDIsMSk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMTI6Ci0JCQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgyLDIpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDMzOgotCQkJCWRlZmF1bHQ6Ci0JCQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgwLDApOwotCQkJCQlwcmludGsoIiVzOiBiYWQgVmNjL1ZwcCAoJWQ6JWQpXG4iLCAKLQkJCQkJCQlfX2Z1bmNfXywKLQkJCQkJCQljb25maWd1cmUtPnZjYywgCi0JCQkJCQkJY29uZmlndXJlLT52cHApOwotCQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIDMzOiAvKiBWY2MgMy4zViAqLwotCQkJc3dpdGNoKGNvbmZpZ3VyZS0+dnBwKSB7Ci0JCQkJY2FzZSAwOgotCQkJCQlwY3IgfD0gU0VUX1ZDQ19WUFAoMSwwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAxMjoKLQkJCQkJcGNyIHw9IFNFVF9WQ0NfVlBQKDEsMik7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMzM6Ci0JCQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgxLDEpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDUwOgotCQkJCWRlZmF1bHQ6Ci0JCQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgwLDApOwotCQkJCQlwcmludGsoIiVzOiBiYWQgVmNjL1ZwcCAoJWQ6JWQpXG4iLCAKLQkJCQkJCQlfX2Z1bmNfXywKLQkJCQkJCQljb25maWd1cmUtPnZjYywgCi0JCQkJCQkJY29uZmlndXJlLT52cHApOwotCQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OiAvKiB3aGF0J3MgdGhpcyA/ICovCi0JCQlwY3IgfD0gU0VUX1ZDQ19WUFAoMCwwKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJhZCBWY2MgJWRcbiIsIAotCQkJCQlfX2Z1bmNfXywgY29uZmlndXJlLT52Y2MpOwotCQkJYnJlYWs7Ci0JfQotCi0JYXVfd3JpdGV3KHBjciwgUENNQ0lBX0JPQVJEX1JFRyk7Ci0JYXVfc3luY19kZWxheSgzMDApOwotCi0JaWYgKCFjb25maWd1cmUtPnJlc2V0KSB7Ci0JCXBjciB8PSBQQ19EUlZfRU47Ci0JCWF1X3dyaXRldyhwY3IsIFBDTUNJQV9CT0FSRF9SRUcpOwotCQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JCXBjciB8PSBQQ19ERUFTU0VSVF9SU1Q7Ci0JCWF1X3dyaXRldyhwY3IsIFBDTUNJQV9CT0FSRF9SRUcpOwotCQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JfQotCWVsc2UgewotCQlwY3IgJj0gfihQQ19ERUFTU0VSVF9SU1QgfCBQQ19EUlZfRU4pOwotCQlhdV93cml0ZXcocGNyLCBQQ01DSUFfQk9BUkRfUkVHKTsKLQkJYXVfc3luY19kZWxheSgxMDApOwotCX0KLSNlbmRpZgogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3h4czE1MDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQzZDQ3Yi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qCi0gKgotICogTXlDYWJsZSBib2FyZCBzcGVjaWZpYyBwY21jaWEgcm91dGluZXMuCi0gKgotICogQ29weXJpZ2h0IDIwMDMgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IFBldGUgUG9wb3YsIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KLSNpbmNsdWRlIDxwY21jaWEvYnVzX29wcy5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLQotI2luY2x1ZGUgPGFzbS9hdTEwMDAuaD4KLSNpbmNsdWRlIDxhc20vYXUxMDAwX3BjbWNpYS5oPgotCi0jZGVmaW5lIFBDTUNJQV9NQVhfU09DSwkJMAotI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTCShQQ01DSUFfTUFYX1NPQ0sgKyAxKQotI2RlZmluZSBQQ01DSUFfSVJRCQlBVTEwMDBfR1BJT180Ci0KLSNpZiAwCi0jZGVmaW5lIERFQlVHKHgsIGFyZ3MuLi4pCXByaW50ayhfX2Z1bmNfXyAiOiAiIHgsICMjYXJncykKLSNlbHNlCi0jZGVmaW5lIERFQlVHKHgsYXJncy4uLikKLSNlbmRpZgotCi1zdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX2luaXQoc3RydWN0IHBjbWNpYV9pbml0ICppbml0KQotewotCXJldHVybiBQQ01DSUFfTlVNX1NPQ0tTOwotfQotCi1zdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX3NodXRkb3duKHZvaWQpCi17Ci0JLyogdHVybiBvZmYgcG93ZXIgKi8KLQlhdV93cml0ZWwoYXVfcmVhZGwoR1BJTzJfUElOU1RBVEUpIHwgKDE8PDE0KXwoMTw8MzApLAotCQkJR1BJTzJfT1VUUFVUKTsKLQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0KLQkvKiBhc3NlcnQgcmVzZXQgKi8KLQlhdV93cml0ZWwoYXVfcmVhZGwoR1BJTzJfUElOU1RBVEUpIHwgKDE8PDQpfCgxPDwyMCksCi0JCQlHUElPMl9PVVRQVVQpOwotCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci14eHMxNTAwX3BjbWNpYV9zb2NrZXRfc3RhdGUodW5zaWduZWQgc29jaywgc3RydWN0IHBjbWNpYV9zdGF0ZSAqc3RhdGUpCi17Ci0JdTMyIGluc2VydGVkOyB1MzIgdnM7Ci0JdW5zaWduZWQgbG9uZyBncGlvLCBncGlvMjsKLQotCWlmKHNvY2sgPiBQQ01DSUFfTUFYX1NPQ0spIHJldHVybiAtMTsKLQotCWdwaW8gPSBhdV9yZWFkbChTWVNfUElOU1RBVEVSRCk7Ci0JZ3BpbzIgPSBhdV9yZWFkbChHUElPMl9QSU5TVEFURSk7Ci0KLQl2cyA9IGdwaW8yICYgKCgxPDw4KSB8ICgxPDw5KSk7Ci0JaW5zZXJ0ZWQgPSAoIShncGlvICYgMHgxKSAmJiAhKGdwaW8gJiAweDIpKTsKLQotCXN0YXRlLT5yZWFkeSA9IDA7Ci0Jc3RhdGUtPnZzX1h2ID0gMDsKLQlzdGF0ZS0+dnNfM3YgPSAwOwotCXN0YXRlLT5kZXRlY3QgPSAwOwotCi0JaWYgKGluc2VydGVkKSB7Ci0JCXN3aXRjaCAodnMpIHsKLQkJCWNhc2UgMDoKLQkJCWNhc2UgMToKLQkJCWNhc2UgMjoKLQkJCQlzdGF0ZS0+dnNfM3Y9MTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMzogLyogNVYgKi8KLQkJCWRlZmF1bHQ6Ci0JCQkJLyogcmV0dXJuIHdpdGhvdXQgc2V0dGluZyAnZGV0ZWN0JyAqLwotCQkJCXByaW50ayhLRVJOX0VSUiAiYXUxeDAwX2NzOiB1bnN1cHBvcnRlZCBWU1xuIiwKLQkJCQkJCXZzKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJc3RhdGUtPmRldGVjdCA9IDE7Ci0JfQotCi0JaWYgKHN0YXRlLT5kZXRlY3QpIHsKLQkJc3RhdGUtPnJlYWR5ID0gMTsKLQl9Ci0KLQlzdGF0ZS0+YnZkMT0gZ3BpbzIgJiAoMTw8MTApOwotCXN0YXRlLT5idmQyID0gZ3BpbzIgJiAoMTw8MTEpOwotCXN0YXRlLT53cnByb3Q9MDsKLQlyZXR1cm4gMTsKLX0KLQotCi1zdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX2dldF9pcnFfaW5mbyhzdHJ1Y3QgcGNtY2lhX2lycV9pbmZvICppbmZvKQotewotCi0JaWYoaW5mby0+c29jayA+IFBDTUNJQV9NQVhfU09DSykgcmV0dXJuIC0xOwotCWluZm8tPmlycSA9IFBDTUNJQV9JUlE7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludAoteHhzMTUwMF9wY21jaWFfY29uZmlndXJlX3NvY2tldChjb25zdCBzdHJ1Y3QgcGNtY2lhX2NvbmZpZ3VyZSAqY29uZmlndXJlKQotewotCi0JaWYoY29uZmlndXJlLT5zb2NrID4gUENNQ0lBX01BWF9TT0NLKSByZXR1cm4gLTE7Ci0KLQlERUJVRygiVmNjICVkViBWcHAgJWRWLCByZXNldCAlZFxuIiwKLQkJCWNvbmZpZ3VyZS0+dmNjLCBjb25maWd1cmUtPnZwcCwgY29uZmlndXJlLT5yZXNldCk7Ci0KLQlzd2l0Y2goY29uZmlndXJlLT52Y2MpewotCQljYXNlIDMzOiAvKiBWY2MgMy4zViAqLwotCQkJLyogdHVybiBvbiBwb3dlciAqLwotCQkJREVCVUcoInR1cm4gb24gcG93ZXJcbiIpOwotCQkJYXVfd3JpdGVsKChhdV9yZWFkbChHUElPMl9QSU5TVEFURSkgJiB+KDE8PDE0KSl8KDE8PDMwKSwKLQkJCQkJR1BJTzJfT1VUUFVUKTsKLQkJCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQkJCWJyZWFrOwotCQljYXNlIDUwOiAvKiBWY2MgNVYgKi8KLQkJZGVmYXVsdDogLyogd2hhdCdzIHRoaXMgPyAqLwotCQkJcHJpbnRrKEtFUk5fRVJSICJhdTF4MDBfY3M6IHVuc3VwcG9ydGVkIFZDQ1xuIik7Ci0JCWNhc2UgMDogIC8qIFZjYyAwICovCi0JCQkvKiB0dXJuIG9mZiBwb3dlciAqLwotCQkJYXVfc3luY19kZWxheSgxMDApOwotCQkJYXVfd3JpdGVsKGF1X3JlYWRsKEdQSU8yX1BJTlNUQVRFKSB8ICgxPDwxNCl8KDE8PDMwKSwKLQkJCQkJR1BJTzJfT1VUUFVUKTsKLQkJCWJyZWFrOwotCX0KLQotCWlmICghY29uZmlndXJlLT5yZXNldCkgewotCQlERUJVRygiZGVhc3NlcnQgcmVzZXRcbiIpOwotCQlhdV93cml0ZWwoKGF1X3JlYWRsKEdQSU8yX1BJTlNUQVRFKSAmIH4oMTw8NCkpfCgxPDwyMCksCi0JCQkJR1BJTzJfT1VUUFVUKTsKLQkJYXVfc3luY19kZWxheSgxMDApOwotCQlhdV93cml0ZWwoKGF1X3JlYWRsKEdQSU8yX1BJTlNUQVRFKSAmIH4oMTw8NSkpfCgxPDwyMSksCi0JCQkJR1BJTzJfT1VUUFVUKTsKLQl9Ci0JZWxzZSB7Ci0JCURFQlVHKCJhc3NlcnQgcmVzZXRcbiIpOwotCQlhdV93cml0ZWwoYXVfcmVhZGwoR1BJTzJfUElOU1RBVEUpIHwgKDE8PDQpfCgxPDwyMCksCi0JCQkJR1BJTzJfT1VUUFVUKTsKLQl9Ci0JYXVfc3luY19kZWxheSgxMDApOwotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCB4eHMxNTAwX3BjbWNpYV9vcHMgPSB7Ci0JeHhzMTUwMF9wY21jaWFfaW5pdCwKLQl4eHMxNTAwX3BjbWNpYV9zaHV0ZG93biwKLQl4eHMxNTAwX3BjbWNpYV9zb2NrZXRfc3RhdGUsCi0JeHhzMTUwMF9wY21jaWFfZ2V0X2lycV9pbmZvLAotCXh4czE1MDBfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9iZmluX2NmX3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvYmZpbl9jZl9wY21jaWEuYwppbmRleCAzMDBiMzY4Li4yNDgyY2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9iZmluX2NmX3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2JmaW5fY2ZfcGNtY2lhLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJCbGFja2ZpbiBDb21wYWN0Rmxhc2gvUENNQ0lBIFNvY2tldCBEcml2ZXJcbiIpOwogCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoIWlycSkKKwlpZiAoaXJxIDw9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJY2RfcGZ4ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsJLypDYXJkIERldGVjdCBHUElPIFBJTiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jIGIvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCmluZGV4IGQ5OWY4NDYuLmFjMDY4NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKQEAgLTIwLDE3MCArMjAsMTIgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KLSNpbmNsdWRlICJjc19pbnRlcm5hbC5oIgogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotLyogT2Zmc2V0cyBpbiB0aGUgRXhwYW5zaW9uIFJPTSBJbWFnZSBIZWFkZXIgKi8KLSNkZWZpbmUgUk9NX1NJR05BVFVSRQkJMHgwMDAwCS8qIDIgYnl0ZXMgKi8KLSNkZWZpbmUgUk9NX0RBVEFfUFRSCQkweDAwMTgJLyogMiBieXRlcyAqLwotCi0vKiBPZmZzZXRzIGluIHRoZSBDYXJkQnVzIFBDIENhcmQgRGF0YSBTdHJ1Y3R1cmUgKi8KLSNkZWZpbmUgUENEQVRBX1NJR05BVFVSRQkweDAwMDAJLyogNCBieXRlcyAqLwotI2RlZmluZSBQQ0RBVEFfVlBEX1BUUgkJMHgwMDA4CS8qIDIgYnl0ZXMgKi8KLSNkZWZpbmUgUENEQVRBX0xFTkdUSAkJMHgwMDBhCS8qIDIgYnl0ZXMgKi8KLSNkZWZpbmUgUENEQVRBX1JFVklTSU9OCQkweDAwMGMKLSNkZWZpbmUgUENEQVRBX0lNQUdFX1NaCQkweDAwMTAJLyogMiBieXRlcyAqLwotI2RlZmluZSBQQ0RBVEFfUk9NX0xFVkVMCTB4MDAxMgkvKiAyIGJ5dGVzICovCi0jZGVmaW5lIFBDREFUQV9DT0RFX1RZUEUJMHgwMDE0Ci0jZGVmaW5lIFBDREFUQV9JTkRJQ0FUT1IJMHgwMDE1Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBFeHBhbnNpb24gUk9NJ3MgaGF2ZSBhIHNwZWNpYWwgbGF5b3V0LCBhbmQgcG9pbnRlcnMgc3BlY2lmeSBhbgotICAgIGltYWdlIG51bWJlciBhbmQgYW4gb2Zmc2V0IHdpdGhpbiB0aGF0IGltYWdlLiAgeGxhdGVfcm9tX2FkZHIoKQotICAgIGNvbnZlcnRzIGFuIGltYWdlL29mZnNldCBhZGRyZXNzIHRvIGFuIGFic29sdXRlIG9mZnNldCBmcm9tIHRoZQotICAgIFJPTSdzIGJhc2UgYWRkcmVzcy4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHVfaW50IHhsYXRlX3JvbV9hZGRyKHZvaWQgX19pb21lbSAqYiwgdV9pbnQgYWRkcikKLXsKLQl1X2ludCBpbWcgPSAwLCBvZnMgPSAwLCBzejsKLQl1X3Nob3J0IGRhdGE7Ci0Jd2hpbGUgKChyZWFkYihiKSA9PSAweDU1KSAmJiAocmVhZGIoYiArIDEpID09IDB4YWEpKSB7Ci0JCWlmIChpbWcgPT0gKGFkZHIgPj4gMjgpKQotCQkJcmV0dXJuIChhZGRyICYgMHgwZmZmZmZmZikgKyBvZnM7Ci0JCWRhdGEgPSByZWFkYihiICsgUk9NX0RBVEFfUFRSKSArIChyZWFkYihiICsgUk9NX0RBVEFfUFRSICsgMSkgPDwgOCk7Ci0JCXN6ID0gNTEyICogKHJlYWRiKGIgKyBkYXRhICsgUENEQVRBX0lNQUdFX1NaKSArCi0JCQkgICAgKHJlYWRiKGIgKyBkYXRhICsgUENEQVRBX0lNQUdFX1NaICsgMSkgPDwgOCkpOwotCQlpZiAoKHN6ID09IDApIHx8IChyZWFkYihiICsgZGF0YSArIFBDREFUQV9JTkRJQ0FUT1IpICYgMHg4MCkpCi0JCQlicmVhazsKLQkJYiArPSBzejsKLQkJb2ZzICs9IHN6OwotCQlpbWcrKzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBUaGVzZSBhcmUgc2ltaWxhciB0byBzZXR1cF9jaXNfbWVtIGFuZCByZWxlYXNlX2Npc19tZW0gZm9yIDE2LWJpdAotICAgIGNhcmRzLiAgVGhlICJyZXN1bHQiIHRoYXQgaXMgdXNlZCBleHRlcm5hbGx5IGlzIHRoZSBjYl9jaXNfdmlydAotICAgIHBvaW50ZXIgaW4gdGhlIHN0cnVjdCBwY21jaWFfc29ja2V0IHN0cnVjdHVyZS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgY2JfcmVsZWFzZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQotewotCWlmIChzLT5jYl9jaXNfdmlydCkgewotCQlkZXZfZGJnKCZzLT5kZXYsICJjYl9yZWxlYXNlX2Npc19tZW0oKVxuIik7Ci0JCWlvdW5tYXAocy0+Y2JfY2lzX3ZpcnQpOwotCQlzLT5jYl9jaXNfdmlydCA9IE5VTEw7Ci0JCXMtPmNiX2Npc19yZXMgPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIGludCBjYl9zZXR1cF9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKLXsKLQl1bnNpZ25lZCBpbnQgc3RhcnQsIHNpemU7Ci0KLQlpZiAocmVzID09IHMtPmNiX2Npc19yZXMpCi0JCXJldHVybiAwOwotCi0JaWYgKHMtPmNiX2Npc19yZXMpCi0JCWNiX3JlbGVhc2VfY2lzX21lbShzKTsKLQotCXN0YXJ0ID0gcmVzLT5zdGFydDsKLQlzaXplID0gcmVzLT5lbmQgLSBzdGFydCArIDE7Ci0Jcy0+Y2JfY2lzX3ZpcnQgPSBpb3JlbWFwKHN0YXJ0LCBzaXplKTsKLQotCWlmICghcy0+Y2JfY2lzX3ZpcnQpCi0JCXJldHVybiAtMTsKLQotCXMtPmNiX2Npc19yZXMgPSByZXM7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIFRoaXMgaXMgdXNlZCBieSB0aGUgQ0lTIHByb2Nlc3NpbmcgY29kZSB0byByZWFkIENJUyBpbmZvcm1hdGlvbgotICAgIGZyb20gYSBDYXJkQnVzIGRldmljZS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotaW50IHJlYWRfY2JfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgc3BhY2UsIHVfaW50IGFkZHIsIHVfaW50IGxlbiwKLQkJdm9pZCAqcHRyKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0KLQlkZXZfZGJnKCZzLT5kZXYsICJyZWFkX2NiX21lbSglZCwgJSN4LCAldSlcbiIsIHNwYWNlLCBhZGRyLCBsZW4pOwotCi0JZGV2ID0gcGNpX2dldF9zbG90KHMtPmNiX2Rldi0+c3Vib3JkaW5hdGUsIDApOwotCWlmICghZGV2KQotCQlnb3RvIGZhaWw7Ci0KLQkvKiBDb25maWcgc3BhY2U/ICovCi0JaWYgKHNwYWNlID09IDApIHsKLQkJaWYgKGFkZHIgKyBsZW4gPiAweDEwMCkKLQkJCWdvdG8gZmFpbHB1dDsKLQkJZm9yICg7IGxlbjsgYWRkcisrLCBwdHIrKywgbGVuLS0pCi0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIGFkZHIsIHB0cik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJlcyA9IGRldi0+cmVzb3VyY2UgKyBzcGFjZSAtIDE7Ci0KLQlwY2lfZGV2X3B1dChkZXYpOwotCi0JaWYgKCFyZXMtPmZsYWdzKQotCQlnb3RvIGZhaWw7Ci0KLQlpZiAoY2Jfc2V0dXBfY2lzX21lbShzLCByZXMpICE9IDApCi0JCWdvdG8gZmFpbDsKLQotCWlmIChzcGFjZSA9PSA3KSB7Ci0JCWFkZHIgPSB4bGF0ZV9yb21fYWRkcihzLT5jYl9jaXNfdmlydCwgYWRkcik7Ci0JCWlmIChhZGRyID09IDApCi0JCQlnb3RvIGZhaWw7Ci0JfQotCi0JaWYgKGFkZHIgKyBsZW4gPiByZXMtPmVuZCAtIHJlcy0+c3RhcnQpCi0JCWdvdG8gZmFpbDsKLQotCW1lbWNweV9mcm9taW8ocHRyLCBzLT5jYl9jaXNfdmlydCArIGFkZHIsIGxlbik7Ci0JcmV0dXJuIDA7Ci0KLWZhaWxwdXQ6Ci0JcGNpX2Rldl9wdXQoZGV2KTsKLWZhaWw6Ci0JbWVtc2V0KHB0ciwgMHhmZiwgbGVuKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBjYl9hbGxvYygpIGFuZCBjYl9mcmVlKCkgYWxsb2NhdGUgYW5kIGZyZWUgdGhlIGtlcm5lbCBkYXRhCi0gICAgc3RydWN0dXJlcyBmb3IgYSBDYXJkYnVzIGRldmljZSwgYW5kIGhhbmRsZSB0aGUgbG93ZXN0IGxldmVsIFBDSQotICAgIGRldmljZSBzZXR1cCBpc3N1ZXMuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB2b2lkIGNhcmRidXNfY29uZmlnX2lycV9hbmRfY2xzKHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBpcnEpCiB7CkBAIC0yMTUsNiArNTcsMTMgQEAKIAl9CiB9CiAKKy8qKgorICogY2JfYWxsb2MoKSAtIGFkZCBDYXJkQnVzIGRldmljZQorICogQHM6CQl0aGUgcGNtY2lhX3NvY2tldCB3aGVyZSB0aGUgQ2FyZEJ1cyBkZXZpY2UgaXMgbG9jYXRlZAorICoKKyAqIGNiX2FsbG9jKCkgYWxsb2NhdGVzIHRoZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhIENhcmRidXMgZGV2aWNlCisgKiBhbmQgaGFuZGxlcyB0aGUgbG93ZXN0IGxldmVsIFBDSSBkZXZpY2Ugc2V0dXAgaXNzdWVzLgorICovCiBpbnQgX19yZWYgY2JfYWxsb2Moc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7CiAJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHMtPmNiX2Rldi0+c3Vib3JkaW5hdGU7CkBAIC0yNDksMTIgKzk4LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogY2JfZnJlZSgpIC0gcmVtb3ZlIENhcmRCdXMgZGV2aWNlCisgKiBAczoJCXRoZSBwY21jaWFfc29ja2V0IHdoZXJlIHRoZSBDYXJkQnVzIGRldmljZSB3YXMgbG9jYXRlZAorICoKKyAqIGNiX2ZyZWUoKSBoYW5kbGVzIHRoZSBsb3dlc3QgbGV2ZWwgUENJIGRldmljZSBjbGVhbnVwLgorICovCiB2b2lkIGNiX2ZyZWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IHMtPmNiX2RldjsKIAotCWNiX3JlbGVhc2VfY2lzX21lbShzKTsKLQogCWlmIChicmlkZ2UpCiAJCXBjaV9yZW1vdmVfYmVoaW5kX2JyaWRnZShicmlkZ2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMgYi9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYwppbmRleCAyNWIxY2QyLi4yZjM2MjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYwpAQCAtNjQsNiArNjQsNyBAQAogCiB2b2lkIHJlbGVhc2VfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKKyAgICBtdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogICAgIGlmIChzLT5jaXNfbWVtLmZsYWdzICYgTUFQX0FDVElWRSkgewogCXMtPmNpc19tZW0uZmxhZ3MgJj0gfk1BUF9BQ1RJVkU7CiAJcy0+b3BzLT5zZXRfbWVtX21hcChzLCAmcy0+Y2lzX21lbSk7CkBAIC03NSwxMyArNzYsMTUgQEAKIAlpb3VubWFwKHMtPmNpc192aXJ0KTsKIAlzLT5jaXNfdmlydCA9IE5VTEw7CiAgICAgfQorICAgIG11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIH0KLUVYUE9SVF9TWU1CT0wocmVsZWFzZV9jaXNfbWVtKTsKIAogLyoKICAqIE1hcCB0aGUgY2FyZCBtZW1vcnkgYXQgImNhcmRfb2Zmc2V0IiBpbnRvIHZpcnR1YWwgc3BhY2UuCiAgKiBJZiBmbGFncyAmIE1BUF9BVFRSSUIsIG1hcCB0aGUgYXR0cmlidXRlIHNwYWNlLCBvdGhlcndpc2UKICAqIG1hcCB0aGUgbWVtb3J5IHNwYWNlLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggb3BzX211dGV4IGhlbGQuCiAgKi8KIHN0YXRpYyB2b2lkIF9faW9tZW0gKgogc2V0X2Npc19tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBjYXJkX29mZnNldCwgdW5zaWduZWQgaW50IGZsYWdzKQpAQCAtMTQwLDYgKzE0Myw3IEBACiAKICAgICBkZXZfZGJnKCZzLT5kZXYsICJwY21jaWFfcmVhZF9jaXNfbWVtKCVkLCAlI3gsICV1KVxuIiwgYXR0ciwgYWRkciwgbGVuKTsKIAorICAgIG11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAgICAgaWYgKGF0dHIgJiBJU19JTkRJUkVDVCkgewogCS8qIEluZGlyZWN0IGFjY2Vzc2VzIHVzZSBhIGJ1bmNoIG9mIHNwZWNpYWwgcmVnaXN0ZXJzIGF0IGZpeGVkCiAJICAgbG9jYXRpb25zIGluIGNvbW1vbiBtZW1vcnkgKi8KQEAgLTE1MSw3ICsxNTUsOSBAQAogCiAJc3lzID0gc2V0X2Npc19tYXAocywgMCwgTUFQX0FDVElWRSB8ICgoY2lzX3dpZHRoKSA/IE1BUF8xNkJJVCA6IDApKTsKIAlpZiAoIXN5cykgeworCSAgICBkZXZfZGJnKCZzLT5kZXYsICJjb3VsZCBub3QgbWFwIG1lbW9yeVxuIik7CiAJICAgIG1lbXNldChwdHIsIDB4ZmYsIGxlbik7CisJICAgIG11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkgICAgcmV0dXJuIC0xOwogCX0KIApAQCAtMTY1LDYgKzE3MSw5IEBACiAgICAgfSBlbHNlIHsKIAl1X2ludCBpbmMgPSAxLCBjYXJkX29mZnNldCwgZmxhZ3M7CiAKKwlpZiAoYWRkciA+IENJU1RQTF9NQVhfQ0lTX1NJWkUpCisJCWRldl9kYmcoJnMtPmRldiwgImF0dGVtcHQgdG8gcmVhZCBDSVMgbWVtIGF0IGFkZHIgJSN4IiwgYWRkcik7CisKIAlmbGFncyA9IE1BUF9BQ1RJVkUgfCAoKGNpc193aWR0aCkgPyBNQVBfMTZCSVQgOiAwKTsKIAlpZiAoYXR0cikgewogCSAgICBmbGFncyB8PSBNQVBfQVRUUklCOwpAQCAtMTc2LDcgKzE4NSw5IEBACiAJd2hpbGUgKGxlbikgewogCSAgICBzeXMgPSBzZXRfY2lzX21hcChzLCBjYXJkX29mZnNldCwgZmxhZ3MpOwogCSAgICBpZiAoIXN5cykgeworCQlkZXZfZGJnKCZzLT5kZXYsICJjb3VsZCBub3QgbWFwIG1lbW9yeVxuIik7CiAJCW1lbXNldChwdHIsIDB4ZmYsIGxlbik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC0xOwogCSAgICB9CiAJICAgIGVuZCA9IHN5cyArIHMtPm1hcF9zaXplOwpAQCAtMTkwLDEyICsyMDEsMTIgQEAKIAkgICAgYWRkciA9IDA7CiAJfQogICAgIH0KKyAgICBtdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAgICAgZGV2X2RiZygmcy0+ZGV2LCAiICAlIzIuMnggJSMyLjJ4ICUjMi4yeCAlIzIuMnggLi4uXG4iLAogCSAgKih1X2NoYXIgKikocHRyKzApLCAqKHVfY2hhciAqKShwdHIrMSksCiAJICAqKHVfY2hhciAqKShwdHIrMiksICoodV9jaGFyICopKHB0ciszKSk7CiAgICAgcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV9yZWFkX2Npc19tZW0pOwogCiAKIHZvaWQgcGNtY2lhX3dyaXRlX2Npc19tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBhdHRyLCB1X2ludCBhZGRyLApAQCAtMjA2LDYgKzIxNyw3IEBACiAKICAgICBkZXZfZGJnKCZzLT5kZXYsICJwY21jaWFfd3JpdGVfY2lzX21lbSglZCwgJSN4LCAldSlcbiIsIGF0dHIsIGFkZHIsIGxlbik7CiAKKyAgICBtdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogICAgIGlmIChhdHRyICYgSVNfSU5ESVJFQ1QpIHsKIAkvKiBJbmRpcmVjdCBhY2Nlc3NlcyB1c2UgYSBidW5jaCBvZiBzcGVjaWFsIHJlZ2lzdGVycyBhdCBmaXhlZAogCSAgIGxvY2F0aW9ucyBpbiBjb21tb24gbWVtb3J5ICovCkBAIC0yMTYsOCArMjI4LDExIEBACiAJfQogCiAJc3lzID0gc2V0X2Npc19tYXAocywgMCwgTUFQX0FDVElWRSB8ICgoY2lzX3dpZHRoKSA/IE1BUF8xNkJJVCA6IDApKTsKLQlpZiAoIXN5cykKKwlpZiAoIXN5cykgeworCQlkZXZfZGJnKCZzLT5kZXYsICJjb3VsZCBub3QgbWFwIG1lbW9yeVxuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuOyAvKiBGSVhNRTogRXJyb3IgKi8KKwl9CiAKIAl3cml0ZWIoZmxhZ3MsIHN5cytDSVNSRUdfSUNUUkwwKTsKIAl3cml0ZWIoYWRkciAmIDB4ZmYsIHN5cytDSVNSRUdfSUFERFIwKTsKQEAgLTIzOSw4ICsyNTQsMTEgQEAKIAljYXJkX29mZnNldCA9IGFkZHIgJiB+KHMtPm1hcF9zaXplLTEpOwogCXdoaWxlIChsZW4pIHsKIAkgICAgc3lzID0gc2V0X2Npc19tYXAocywgY2FyZF9vZmZzZXQsIGZsYWdzKTsKLQkgICAgaWYgKCFzeXMpCisJICAgIGlmICghc3lzKSB7CisJCWRldl9kYmcoJnMtPmRldiwgImNvdWxkIG5vdCBtYXAgbWVtb3J5XG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm47IC8qIEZJWE1FOiBlcnJvciAqLworCSAgICB9CiAKIAkgICAgZW5kID0gc3lzICsgcy0+bWFwX3NpemU7CiAJICAgIHN5cyA9IHN5cyArIChhZGRyICYgKHMtPm1hcF9zaXplLTEpKTsKQEAgLTI1Myw4ICsyNzEsOCBAQAogCSAgICBhZGRyID0gMDsKIAl9CiAgICAgfQorICAgIG11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIH0KLUVYUE9SVF9TWU1CT0wocGNtY2lhX3dyaXRlX2Npc19tZW0pOwogCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjY1LDMyICsyODMsMzYgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIHJlYWRfY2lzX2NhY2hlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwgdV9pbnQgYWRkciwKLQkJCSAgIHNpemVfdCBsZW4sIHZvaWQgKnB0cikKK3N0YXRpYyBpbnQgcmVhZF9jaXNfY2FjaGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBhdHRyLCB1X2ludCBhZGRyLAorCQkJc2l6ZV90IGxlbiwgdm9pZCAqcHRyKQogewotICAgIHN0cnVjdCBjaXNfY2FjaGVfZW50cnkgKmNpczsKLSAgICBpbnQgcmV0OworCXN0cnVjdCBjaXNfY2FjaGVfZW50cnkgKmNpczsKKwlpbnQgcmV0ID0gMDsKIAotICAgIGlmIChzLT5mYWtlX2NpcykgewotCWlmIChzLT5mYWtlX2Npc19sZW4gPj0gYWRkcitsZW4pCi0JICAgIG1lbWNweShwdHIsIHMtPmZha2VfY2lzK2FkZHIsIGxlbik7Ci0JZWxzZQotCSAgICBtZW1zZXQocHRyLCAweGZmLCBsZW4pOwotCXJldHVybjsKLSAgICB9CisJaWYgKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgbGlzdF9mb3JfZWFjaF9lbnRyeShjaXMsICZzLT5jaXNfY2FjaGUsIG5vZGUpIHsKLQlpZiAoY2lzLT5hZGRyID09IGFkZHIgJiYgY2lzLT5sZW4gPT0gbGVuICYmIGNpcy0+YXR0ciA9PSBhdHRyKSB7Ci0JICAgIG1lbWNweShwdHIsIGNpcy0+Y2FjaGUsIGxlbik7Ci0JICAgIHJldHVybjsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCWlmIChzLT5mYWtlX2NpcykgeworCQlpZiAocy0+ZmFrZV9jaXNfbGVuID49IGFkZHIrbGVuKQorCQkJbWVtY3B5KHB0ciwgcy0+ZmFrZV9jaXMrYWRkciwgbGVuKTsKKwkJZWxzZSB7CisJCQltZW1zZXQocHRyLCAweGZmLCBsZW4pOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJfQorCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJCXJldHVybiByZXQ7CiAJfQotICAgIH0KIAotI2lmZGVmIENPTkZJR19DQVJEQlVTCi0gICAgaWYgKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpCi0JcmV0ID0gcmVhZF9jYl9tZW0ocywgYXR0ciwgYWRkciwgbGVuLCBwdHIpOwotICAgIGVsc2UKLSNlbmRpZgorCWxpc3RfZm9yX2VhY2hfZW50cnkoY2lzLCAmcy0+Y2lzX2NhY2hlLCBub2RlKSB7CisJCWlmIChjaXMtPmFkZHIgPT0gYWRkciAmJiBjaXMtPmxlbiA9PSBsZW4gJiYgY2lzLT5hdHRyID09IGF0dHIpIHsKKwkJCW1lbWNweShwdHIsIGNpcy0+Y2FjaGUsIGxlbik7CisJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisKIAlyZXQgPSBwY21jaWFfcmVhZF9jaXNfbWVtKHMsIGF0dHIsIGFkZHIsIGxlbiwgcHRyKTsKIAogCWlmIChyZXQgPT0gMCkgewpAQCAtMzAxLDkgKzMyMywxMiBAQAogCQkJY2lzLT5sZW4gPSBsZW47CiAJCQljaXMtPmF0dHIgPSBhdHRyOwogCQkJbWVtY3B5KGNpcy0+Y2FjaGUsIHB0ciwgbGVuKTsKKwkJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJCQlsaXN0X2FkZCgmY2lzLT5ub2RlLCAmcy0+Y2lzX2NhY2hlKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJfQogCX0KKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZApAQCAtMzExLDMyICszMzYsMzUgQEAKIHsKIAlzdHJ1Y3QgY2lzX2NhY2hlX2VudHJ5ICpjaXM7CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2lzLCAmcy0+Y2lzX2NhY2hlLCBub2RlKQogCQlpZiAoY2lzLT5hZGRyID09IGFkZHIgJiYgY2lzLT5sZW4gPT0gbGVuICYmIGNpcy0+YXR0ciA9PSBhdHRyKSB7CiAJCQlsaXN0X2RlbCgmY2lzLT5ub2RlKTsKIAkJCWtmcmVlKGNpcyk7CiAJCQlicmVhazsKIAkJfQorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIH0KIAorLyoqCisgKiBkZXN0cm95X2Npc19jYWNoZSgpIC0gZGVzdHJveSB0aGUgQ0lTIGNhY2hlCisgKiBAczoJCXBjbWNpYV9zb2NrZXQgZm9yIHdoaWNoIENJUyBjYWNoZSBzaGFsbCBiZSBkZXN0cm95ZWQKKyAqCisgKiBUaGlzIGRlc3Ryb3lzIHRoZSBDSVMgY2FjaGUgYnV0IGtlZXBzIGFueSBmYWtlIENJUyBhbGl2ZS4gTXVzdCBiZQorICogY2FsbGVkIHdpdGggb3BzX211dGV4IGhlbGQuCisgKi8KKwogdm9pZCBkZXN0cm95X2Npc19jYWNoZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbjsKKwlzdHJ1Y3QgY2lzX2NhY2hlX2VudHJ5ICpjaXM7CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbiwgJnMtPmNpc19jYWNoZSkgewotCQlzdHJ1Y3QgY2lzX2NhY2hlX2VudHJ5ICpjaXMgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBjaXNfY2FjaGVfZW50cnksIG5vZGUpOwotCisJCWNpcyA9IGxpc3RfZW50cnkobCwgc3RydWN0IGNpc19jYWNoZV9lbnRyeSwgbm9kZSk7CiAJCWxpc3RfZGVsKCZjaXMtPm5vZGUpOwogCQlrZnJlZShjaXMpOwogCX0KLQotCS8qCi0JICogSWYgdGhlcmUgd2FzIGEgZmFrZSBDSVMsIGRlc3Ryb3kgdGhhdCBhcyB3ZWxsLgotCSAqLwotCWtmcmVlKHMtPmZha2VfY2lzKTsKLQlzLT5mYWtlX2NpcyA9IE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MKGRlc3Ryb3lfY2lzX2NhY2hlKTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTM0OSw2ICszNzcsMTAgQEAKIHsKIAlzdHJ1Y3QgY2lzX2NhY2hlX2VudHJ5ICpjaXM7CiAJY2hhciAqYnVmOworCWludCByZXQ7CisKKwlpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlidWYgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1ZiA9PSBOVUxMKSB7CkBAIC0zNjEsMTQgKzM5Myw5IEBACiAKIAkJaWYgKGxlbiA+IDI1NikKIAkJCWxlbiA9IDI1NjsKLSNpZmRlZiBDT05GSUdfQ0FSREJVUwotCQlpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykKLQkJCXJlYWRfY2JfbWVtKHMsIGNpcy0+YXR0ciwgY2lzLT5hZGRyLCBsZW4sIGJ1Zik7Ci0JCWVsc2UKLSNlbmRpZgotCQkJcGNtY2lhX3JlYWRfY2lzX21lbShzLCBjaXMtPmF0dHIsIGNpcy0+YWRkciwgbGVuLCBidWYpOwogCi0JCWlmIChtZW1jbXAoYnVmLCBjaXMtPmNhY2hlLCBsZW4pICE9IDApIHsKKwkJcmV0ID0gcGNtY2lhX3JlYWRfY2lzX21lbShzLCBjaXMtPmF0dHIsIGNpcy0+YWRkciwgbGVuLCBidWYpOworCQlpZiAocmV0IHx8IG1lbWNtcChidWYsIGNpcy0+Y2FjaGUsIGxlbikgIT0gMCkgewogCQkJa2ZyZWUoYnVmKTsKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtMzkxLDE3ICs0MTgsMjAgQEAKIAkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzLT5kZXYsICJyZXBsYWNlbWVudCBDSVMgdG9vIGJpZ1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWtmcmVlKHMtPmZha2VfY2lzKTsKIAlzLT5mYWtlX2NpcyA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAocy0+ZmFrZV9jaXMgPT0gTlVMTCkgewogCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnMtPmRldiwgIm5vIG1lbW9yeSB0byByZXBsYWNlIENJU1xuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXMtPmZha2VfY2lzX2xlbiA9IGxlbjsKIAltZW1jcHkocy0+ZmFrZV9jaXMsIGRhdGEsIGxlbik7CisJZGV2X2luZm8oJnMtPmRldiwgIlVzaW5nIHJlcGxhY2VtZW50IENJU1xuIik7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChwY21jaWFfcmVwbGFjZV9jaXMpOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNDI1LDI1ICs0NTUsMTYgQEAKIHsKICAgICBpZiAoIXMpCiAJcmV0dXJuIC1FSU5WQUw7Ci0gICAgaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCisKKyAgICBpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSB8fCAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykpCiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgdHVwbGUtPlR1cGxlTGluayA9IHR1cGxlLT5GbGFncyA9IDA7Ci0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLSAgICBpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBzLT5jYl9kZXY7Ci0JdV9pbnQgcHRyOwotCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQoZGV2LT5zdWJvcmRpbmF0ZSwgMCwgUENJX0NBUkRCVVNfQ0lTLCAmcHRyKTsKLQl0dXBsZS0+Q0lTT2Zmc2V0ID0gcHRyICYgfjc7Ci0JU1BBQ0UodHVwbGUtPkZsYWdzKSA9IChwdHIgJiA3KTsKLSAgICB9IGVsc2UKLSNlbmRpZgotICAgIHsKLQkvKiBBc3N1bWUgcHJlc2VuY2Ugb2YgYSBMT05HTElOS19DIHRvIGFkZHJlc3MgMCAqLwotCXR1cGxlLT5DSVNPZmZzZXQgPSB0dXBsZS0+TGlua09mZnNldCA9IDA7Ci0JU1BBQ0UodHVwbGUtPkZsYWdzKSA9IEhBU19MSU5LKHR1cGxlLT5GbGFncykgPSAxOwotICAgIH0KLSAgICBpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSAmJiAocy0+ZnVuY3Rpb25zID4gMSkgJiYKLQkhKHR1cGxlLT5BdHRyaWJ1dGVzICYgVFVQTEVfUkVUVVJOX0NPTU1PTikpIHsKKworICAgIC8qIEFzc3VtZSBwcmVzZW5jZSBvZiBhIExPTkdMSU5LX0MgdG8gYWRkcmVzcyAwICovCisgICAgdHVwbGUtPkNJU09mZnNldCA9IHR1cGxlLT5MaW5rT2Zmc2V0ID0gMDsKKyAgICBTUEFDRSh0dXBsZS0+RmxhZ3MpID0gSEFTX0xJTksodHVwbGUtPkZsYWdzKSA9IDE7CisKKyAgICBpZiAoKHMtPmZ1bmN0aW9ucyA+IDEpICYmICEodHVwbGUtPkF0dHJpYnV0ZXMgJiBUVVBMRV9SRVRVUk5fQ09NTU9OKSkgewogCWNpc2RhdGFfdCByZXEgPSB0dXBsZS0+RGVzaXJlZFR1cGxlOwogCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTE9OR0xJTktfTUZDOwogCWlmIChwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgZnVuY3Rpb24sIHR1cGxlKSA9PSAwKSB7CkBAIC00NTYsMTcgKzQ3NywxOSBAQAogICAgIH0KICAgICByZXR1cm4gcGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIGZ1bmN0aW9uLCB0dXBsZSk7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUpOwogCiBzdGF0aWMgaW50IGZvbGxvd19saW5rKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB0dXBsZV90ICp0dXBsZSkKIHsKICAgICB1X2NoYXIgbGlua1s1XTsKICAgICB1X2ludCBvZnM7CisgICAgaW50IHJldDsKIAogICAgIGlmIChNRkNfRk4odHVwbGUtPkZsYWdzKSkgewogCS8qIEdldCBpbmRpcmVjdCBsaW5rIGZyb20gdGhlIE1GQyB0dXBsZSAqLwotCXJlYWRfY2lzX2NhY2hlKHMsIExJTktfU1BBQ0UodHVwbGUtPkZsYWdzKSwKKwlyZXQgPSByZWFkX2Npc19jYWNoZShzLCBMSU5LX1NQQUNFKHR1cGxlLT5GbGFncyksCiAJCSAgICAgICB0dXBsZS0+TGlua09mZnNldCwgNSwgbGluayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC0xOwogCW9mcyA9IGdldF91bmFsaWduZWRfbGUzMihsaW5rICsgMSk7CiAJU1BBQ0UodHVwbGUtPkZsYWdzKSA9IChsaW5rWzBdID09IENJU1RQTF9NRkNfQVRUUik7CiAJLyogTW92ZSB0byB0aGUgbmV4dCBpbmRpcmVjdCBsaW5rICovCkBAIC00NzksMTAgKzUwMiwxMiBAQAogICAgIH0gZWxzZSB7CiAJcmV0dXJuIC0xOwogICAgIH0KLSAgICBpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSAmJiBTUEFDRSh0dXBsZS0+RmxhZ3MpKSB7CisgICAgaWYgKFNQQUNFKHR1cGxlLT5GbGFncykpIHsKIAkvKiBUaGlzIGlzIHVnbHksIGJ1dCBhIGNvbW1vbiBDSVMgZXJyb3IgaXMgdG8gY29kZSB0aGUgbG9uZwogCSAgIGxpbmsgb2Zmc2V0IGluY29ycmVjdGx5LCBzbyB3ZSBjaGVjayB0aGUgcmlnaHQgc3BvdC4uLiAqLwotCXJlYWRfY2lzX2NhY2hlKHMsIFNQQUNFKHR1cGxlLT5GbGFncyksIG9mcywgNSwgbGluayk7CisJcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgU1BBQ0UodHVwbGUtPkZsYWdzKSwgb2ZzLCA1LCBsaW5rKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLTE7CiAJaWYgKChsaW5rWzBdID09IENJU1RQTF9MSU5LVEFSR0VUKSAmJiAobGlua1sxXSA+PSAzKSAmJgogCSAgICAoc3RybmNtcChsaW5rKzIsICJDSVMiLCAzKSA9PSAwKSkKIAkgICAgcmV0dXJuIG9mczsKQEAgLTQ5MCw3ICs1MTUsOSBAQAogCS8qIFRoZW4sIHdlIHRyeSB0aGUgd3Jvbmcgc3BvdC4uLiAqLwogCW9mcyA9IG9mcyA+PiAxOwogICAgIH0KLSAgICByZWFkX2Npc19jYWNoZShzLCBTUEFDRSh0dXBsZS0+RmxhZ3MpLCBvZnMsIDUsIGxpbmspOworICAgIHJldCA9IHJlYWRfY2lzX2NhY2hlKHMsIFNQQUNFKHR1cGxlLT5GbGFncyksIG9mcywgNSwgbGluayk7CisgICAgaWYgKHJldCkKKwkgICAgcmV0dXJuIC0xOwogICAgIGlmICgobGlua1swXSA9PSBDSVNUUExfTElOS1RBUkdFVCkgJiYgKGxpbmtbMV0gPj0gMykgJiYKIAkoc3RybmNtcChsaW5rKzIsICJDSVMiLCAzKSA9PSAwKSkKIAlyZXR1cm4gb2ZzOwpAQCAtNTAyLDEwICs1MjksMTEgQEAKIHsKICAgICB1X2NoYXIgbGlua1syXSwgdG1wOwogICAgIGludCBvZnMsIGksIGF0dHI7CisgICAgaW50IHJldDsKIAogICAgIGlmICghcykKIAlyZXR1cm4gLUVJTlZBTDsKLSAgICBpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKKyAgICBpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSB8fCAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykpCiAJcmV0dXJuIC1FTk9ERVY7CiAKICAgICBsaW5rWzFdID0gdHVwbGUtPlR1cGxlTGluazsKQEAgLTUxNiw3ICs1NDQsOSBAQAogCWlmIChsaW5rWzFdID09IDB4ZmYpIHsKIAkgICAgbGlua1swXSA9IENJU1RQTF9FTkQ7CiAJfSBlbHNlIHsKLQkgICAgcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzLCAyLCBsaW5rKTsKKwkgICAgcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzLCAyLCBsaW5rKTsKKwkgICAgaWYgKHJldCkKKwkJICAgIHJldHVybiAtMTsKIAkgICAgaWYgKGxpbmtbMF0gPT0gQ0lTVFBMX05VTEwpIHsKIAkJb2ZzKys7IGNvbnRpbnVlOwogCSAgICB9CkBAIC01MjgsNyArNTU4LDkgQEAKIAkgICAgaWYgKG9mcyA8IDApCiAJCXJldHVybiAtRU5PU1BDOwogCSAgICBhdHRyID0gU1BBQ0UodHVwbGUtPkZsYWdzKTsKLQkgICAgcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzLCAyLCBsaW5rKTsKKwkgICAgcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzLCAyLCBsaW5rKTsKKwkgICAgaWYgKHJldCkKKwkJICAgIHJldHVybiAtMTsKIAl9CiAKIAkvKiBJcyB0aGlzIGEgbGluayB0dXBsZT8gIE1ha2UgYSBub3RlIG9mIGl0ICovCkBAIC01NDIsMTIgKzU3NCwxNiBAQAogCSAgICBjYXNlIENJU1RQTF9MT05HTElOS19BOgogCQlIQVNfTElOSyh0dXBsZS0+RmxhZ3MpID0gMTsKIAkJTElOS19TUEFDRSh0dXBsZS0+RmxhZ3MpID0gYXR0ciB8IElTX0FUVFI7Ci0JCXJlYWRfY2lzX2NhY2hlKHMsIGF0dHIsIG9mcysyLCA0LCAmdHVwbGUtPkxpbmtPZmZzZXQpOworCQlyZXQgPSByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMrMiwgNCwgJnR1cGxlLT5MaW5rT2Zmc2V0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtMTsKIAkJYnJlYWs7CiAJICAgIGNhc2UgQ0lTVFBMX0xPTkdMSU5LX0M6CiAJCUhBU19MSU5LKHR1cGxlLT5GbGFncykgPSAxOwogCQlMSU5LX1NQQUNFKHR1cGxlLT5GbGFncykgPSBhdHRyICYgfklTX0FUVFI7Ci0JCXJlYWRfY2lzX2NhY2hlKHMsIGF0dHIsIG9mcysyLCA0LCAmdHVwbGUtPkxpbmtPZmZzZXQpOworCQlyZXQgPSByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMrMiwgNCwgJnR1cGxlLT5MaW5rT2Zmc2V0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtMTsKIAkJYnJlYWs7CiAJICAgIGNhc2UgQ0lTVFBMX0lORElSRUNUOgogCQlIQVNfTElOSyh0dXBsZS0+RmxhZ3MpID0gMTsKQEAgLTU1OSw3ICs1OTUsOSBAQAogCQlMSU5LX1NQQUNFKHR1cGxlLT5GbGFncykgPSBhdHRyOwogCQlpZiAoZnVuY3Rpb24gPT0gQklORF9GTl9BTEwpIHsKIAkJICAgIC8qIEZvbGxvdyBhbGwgdGhlIE1GQyBsaW5rcyAqLwotCQkgICAgcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzKzIsIDEsICZ0bXApOworCQkgICAgcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzKzIsIDEsICZ0bXApOworCQkgICAgaWYgKHJldCkKKwkJCSAgICByZXR1cm4gLTE7CiAJCSAgICBNRkNfRk4odHVwbGUtPkZsYWdzKSA9IHRtcDsKIAkJfSBlbHNlIHsKIAkJICAgIC8qIEZvbGxvdyBleGFjdGx5IG9uZSBvZiB0aGUgbGlua3MgKi8KQEAgLTU5Miw3ICs2MzAsNiBAQAogICAgIHR1cGxlLT5DSVNPZmZzZXQgPSBvZnMgKyAyOwogICAgIHJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChwY2NhcmRfZ2V0X25leHRfdHVwbGUpOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApAQCAtNjAxLDYgKzYzOCw3IEBACiBpbnQgcGNjYXJkX2dldF90dXBsZV9kYXRhKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB0dXBsZV90ICp0dXBsZSkKIHsKICAgICB1X2ludCBsZW47CisgICAgaW50IHJldDsKIAogICAgIGlmICghcykKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTYxMSwxMiArNjQ5LDEzIEBACiAgICAgdHVwbGUtPlR1cGxlRGF0YUxlbiA9IHR1cGxlLT5UdXBsZUxpbms7CiAgICAgaWYgKGxlbiA9PSAwKQogCXJldHVybiAwOwotICAgIHJlYWRfY2lzX2NhY2hlKHMsIFNQQUNFKHR1cGxlLT5GbGFncyksCisgICAgcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgU1BBQ0UodHVwbGUtPkZsYWdzKSwKIAkJICAgdHVwbGUtPkNJU09mZnNldCArIHR1cGxlLT5UdXBsZU9mZnNldCwKIAkJICAgX01JTihsZW4sIHR1cGxlLT5UdXBsZURhdGFNYXgpLCB0dXBsZS0+VHVwbGVEYXRhKTsKKyAgICBpZiAocmV0KQorCSAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjY2FyZF9nZXRfdHVwbGVfZGF0YSk7CiAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMTkwLDExOSArMTIyOSw2IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLQotc3RhdGljIGludCBwYXJzZV9iYXIodHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9iYXJfdCAqYmFyKQotewotICAgIHVfY2hhciAqcDsKLSAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDYpCi0JcmV0dXJuIC1FSU5WQUw7Ci0gICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwotICAgIGJhci0+YXR0ciA9ICpwOwotICAgIHAgKz0gMjsKLSAgICBiYXItPnNpemUgPSBnZXRfdW5hbGlnbmVkX2xlMzIocCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGFyc2VfY29uZmlnX2NiKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfY29uZmlnX3QgKmNvbmZpZykKLXsKLSAgICB1X2NoYXIgKnA7Ci0KLSAgICBwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7Ci0gICAgaWYgKCgqcCAhPSAzKSB8fCAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDYpKQotCXJldHVybiAtRUlOVkFMOwotICAgIGNvbmZpZy0+bGFzdF9pZHggPSAqKCsrcCk7Ci0gICAgcCsrOwotICAgIGNvbmZpZy0+YmFzZSA9IGdldF91bmFsaWduZWRfbGUzMihwKTsKLSAgICBjb25maWctPnN1YnR1cGxlcyA9IHR1cGxlLT5UdXBsZURhdGFMZW4gLSA2OwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBhcnNlX2NmdGFibGVfZW50cnlfY2IodHVwbGVfdCAqdHVwbGUsCi0JCQkJICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV9jYl90ICplbnRyeSkKLXsKLSAgICB1X2NoYXIgKnAsICpxLCBmZWF0dXJlczsKLQotICAgIHAgPSB0dXBsZS0+VHVwbGVEYXRhOwotICAgIHEgPSBwICsgdHVwbGUtPlR1cGxlRGF0YUxlbjsKLSAgICBlbnRyeS0+aW5kZXggPSAqcCAmIDB4M2Y7Ci0gICAgZW50cnktPmZsYWdzID0gMDsKLSAgICBpZiAoKnAgJiAweDQwKQotCWVudHJ5LT5mbGFncyB8PSBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUOwotCi0gICAgLyogUHJvY2VzcyBvcHRpb25hbCBmZWF0dXJlcyAqLwotICAgIGlmICgrK3AgPT0gcSkKLQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgZmVhdHVyZXMgPSAqcDsgcCsrOwotCi0gICAgLyogUG93ZXIgb3B0aW9ucyAqLwotICAgIGlmICgoZmVhdHVyZXMgJiAzKSA+IDApIHsKLQlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52Y2MpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotICAgIH0gZWxzZQotCWVudHJ5LT52Y2MucHJlc2VudCA9IDA7Ci0gICAgaWYgKChmZWF0dXJlcyAmIDMpID4gMSkgewotCXAgPSBwYXJzZV9wb3dlcihwLCBxLCAmZW50cnktPnZwcDEpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotICAgIH0gZWxzZQotCWVudHJ5LT52cHAxLnByZXNlbnQgPSAwOwotICAgIGlmICgoZmVhdHVyZXMgJiAzKSA+IDIpIHsKLQlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52cHAyKTsKLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLSAgICB9IGVsc2UKLQllbnRyeS0+dnBwMi5wcmVzZW50ID0gMDsKLQotICAgIC8qIEkvTyB3aW5kb3cgb3B0aW9ucyAqLwotICAgIGlmIChmZWF0dXJlcyAmIDB4MDgpIHsKLQlpZiAocCA9PSBxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbnRyeS0+aW8gPSAqcDsgcCsrOwotICAgIH0gZWxzZQotCWVudHJ5LT5pbyA9IDA7Ci0KLSAgICAvKiBJbnRlcnJ1cHQgb3B0aW9ucyAqLwotICAgIGlmIChmZWF0dXJlcyAmIDB4MTApIHsKLQlwID0gcGFyc2VfaXJxKHAsIHEsICZlbnRyeS0+aXJxKTsKLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLSAgICB9IGVsc2UKLQllbnRyeS0+aXJxLklSUUluZm8xID0gMDsKLQotICAgIGlmIChmZWF0dXJlcyAmIDB4MjApIHsKLQlpZiAocCA9PSBxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbnRyeS0+bWVtID0gKnA7IHArKzsKLSAgICB9IGVsc2UKLQllbnRyeS0+bWVtID0gMDsKLQotICAgIC8qIE1pc2MgZmVhdHVyZXMgKi8KLSAgICBpZiAoZmVhdHVyZXMgJiAweDgwKSB7Ci0JaWYgKHAgPT0gcSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZW50cnktPmZsYWdzIHw9ICgqcCA8PCA4KTsKLQlpZiAoKnAgJiAweDgwKSB7Ci0JICAgIGlmICgrK3AgPT0gcSkKLQkJICAgIHJldHVybiAtRUlOVkFMOwotCSAgICBlbnRyeS0+ZmxhZ3MgfD0gKCpwIDw8IDE2KTsKLQl9Ci0Jd2hpbGUgKCpwICYgMHg4MCkKLQkgICAgaWYgKCsrcCA9PSBxKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0JcCsrOwotICAgIH0KLQotICAgIGVudHJ5LT5zdWJ0dXBsZXMgPSBxLXA7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotI2VuZGlmCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCiBzdGF0aWMgaW50IHBhcnNlX2RldmljZV9nZW8odHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9kZXZpY2VfZ2VvX3QgKmdlbykKIHsKICAgICB1X2NoYXIgKnAsICpxOwpAQCAtMTQwNCwxNyArMTMzMCw2IEBACiAgICAgY2FzZSBDSVNUUExfREVWSUNFX0E6CiAJcmV0ID0gcGFyc2VfZGV2aWNlKHR1cGxlLCAmcGFyc2UtPmRldmljZSk7CiAJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLSAgICBjYXNlIENJU1RQTF9CQVI6Ci0JcmV0ID0gcGFyc2VfYmFyKHR1cGxlLCAmcGFyc2UtPmJhcik7Ci0JYnJlYWs7Ci0gICAgY2FzZSBDSVNUUExfQ09ORklHX0NCOgotCXJldCA9IHBhcnNlX2NvbmZpZ19jYih0dXBsZSwgJnBhcnNlLT5jb25maWcpOwotCWJyZWFrOwotICAgIGNhc2UgQ0lTVFBMX0NGVEFCTEVfRU5UUllfQ0I6Ci0JcmV0ID0gcGFyc2VfY2Z0YWJsZV9lbnRyeV9jYih0dXBsZSwgJnBhcnNlLT5jZnRhYmxlX2VudHJ5X2NiKTsKLQlicmVhazsKLSNlbmRpZgogICAgIGNhc2UgQ0lTVFBMX0NIRUNLU1VNOgogCXJldCA9IHBhcnNlX2NoZWNrc3VtKHR1cGxlLCAmcGFyc2UtPmNoZWNrc3VtKTsKIAlicmVhazsKQEAgLTE1MTMsNyArMTQyOCw2IEBACiAgICAga2ZyZWUoYnVmKTsKICAgICByZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChwY2NhcmRfcmVhZF90dXBsZSk7CiAKIAogLyoqCkBAIC0xNTczLDg0ICsxNDg3LDIzOCBAQAogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0wocGNjYXJkX2xvb3BfdHVwbGUpOwogCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgVGhpcyB0cmllcyB0byBkZXRlcm1pbmUgaWYgYSBjYXJkIGhhcyBhIHNlbnNpYmxlIENJUy4gIEl0IHJldHVybnMKLSAgICB0aGUgbnVtYmVyIG9mIHR1cGxlcyBpbiB0aGUgQ0lTLCBvciAwIGlmIHRoZSBDSVMgbG9va3MgYmFkLiAgVGhlCi0gICAgY2hlY2tzIGluY2x1ZGUgbWFraW5nIHN1cmUgc2V2ZXJhbCBjcml0aWNhbCB0dXBsZXMgYXJlIHByZXNlbnQgYW5kCi0gICAgdmFsaWQ7IHNlZWluZyBpZiB0aGUgdG90YWwgbnVtYmVyIG9mIHR1cGxlcyBpcyByZWFzb25hYmxlOyBhbmQKLSAgICBsb29raW5nIGZvciB0dXBsZXMgdGhhdCB1c2UgcmVzZXJ2ZWQgY29kZXMuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCisvKioKKyAqIHBjY2FyZF92YWxpZGF0ZV9jaXMoKSAtIGNoZWNrIHdoZXRoZXIgY2FyZCBoYXMgYSBzZW5zaWJsZSBDSVMKKyAqIEBzOgkJdGhlIHN0cnVjdCBwY21jaWFfc29ja2V0IHdlIGFyZSB0byBjaGVjaworICogQGluZm86CXJldHVybnMgdGhlIG51bWJlciBvZiB0dXBsZXMgaW4gdGhlICh2YWxpZCkgQ0lTLCBvciAwCisgKgorICogVGhpcyB0cmllcyB0byBkZXRlcm1pbmUgaWYgYSBjYXJkIGhhcyBhIHNlbnNpYmxlIENJUy4gIEluIEBpbmZvLCBpdAorICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIHR1cGxlcyBpbiB0aGUgQ0lTLCBvciAwIGlmIHRoZSBDSVMgbG9va3MgYmFkLiBUaGUKKyAqIGNoZWNrcyBpbmNsdWRlIG1ha2luZyBzdXJlIHNldmVyYWwgY3JpdGljYWwgdHVwbGVzIGFyZSBwcmVzZW50IGFuZAorICogdmFsaWQ7IHNlZWluZyBpZiB0aGUgdG90YWwgbnVtYmVyIG9mIHR1cGxlcyBpcyByZWFzb25hYmxlOyBhbmQKKyAqIGxvb2tpbmcgZm9yIHR1cGxlcyB0aGF0IHVzZSByZXNlcnZlZCBjb2Rlcy4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKi8KIGludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgKmluZm8pCiB7Ci0gICAgdHVwbGVfdCAqdHVwbGU7Ci0gICAgY2lzcGFyc2VfdCAqcDsKLSAgICB1bnNpZ25lZCBpbnQgY291bnQgPSAwOwotICAgIGludCByZXQsIHJlc2VydmVkLCBkZXZfb2sgPSAwLCBpZGVudF9vayA9IDA7CisJdHVwbGVfdCAqdHVwbGU7CisJY2lzcGFyc2VfdCAqcDsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCWludCByZXQsIHJlc2VydmVkLCBkZXZfb2sgPSAwLCBpZGVudF9vayA9IDA7CiAKLSAgICBpZiAoIXMpCi0JcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFzKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIHR1cGxlID0ga21hbGxvYyhzaXplb2YoKnR1cGxlKSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKHR1cGxlID09IE5VTEwpIHsKLQkgICAgZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzLT5kZXYsICJubyBtZW1vcnkgdG8gdmFsaWRhdGUgQ0lTXG4iKTsKLQkgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgfQotICAgIHAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOwotICAgIGlmIChwID09IE5VTEwpIHsKLQkgICAga2ZyZWUodHVwbGUpOwotCSAgICBkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnMtPmRldiwgIm5vIG1lbW9yeSB0byB2YWxpZGF0ZSBDSVNcbiIpOwotCSAgICByZXR1cm4gLUVOT01FTTsKLSAgICB9CisJLyogV2UgZG8gbm90IHdhbnQgdG8gdmFsaWRhdGUgdGhlIENJUyBjYWNoZS4uLiAqLworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJZGVzdHJveV9jaXNfY2FjaGUocyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCi0gICAgY291bnQgPSByZXNlcnZlZCA9IDA7Ci0gICAgdHVwbGUtPkRlc2lyZWRUdXBsZSA9IFJFVFVSTl9GSVJTVF9UVVBMRTsKLSAgICB0dXBsZS0+QXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047Ci0gICAgcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgdHVwbGUpOwotICAgIGlmIChyZXQgIT0gMCkKLQlnb3RvIGRvbmU7CisJdHVwbGUgPSBrbWFsbG9jKHNpemVvZigqdHVwbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAodHVwbGUgPT0gTlVMTCkgeworCQlkZXZfd2Fybigmcy0+ZGV2LCAibm8gbWVtb3J5IHRvIHZhbGlkYXRlIENJU1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKwlpZiAocCA9PSBOVUxMKSB7CisJCWtmcmVlKHR1cGxlKTsKKwkJZGV2X3dhcm4oJnMtPmRldiwgIm5vIG1lbW9yeSB0byB2YWxpZGF0ZSBDSVNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKLSAgICAvKiBGaXJzdCB0dXBsZSBzaG91bGQgYmUgREVWSUNFOyB3ZSBzaG91bGQgcmVhbGx5IGhhdmUgZWl0aGVyIHRoYXQKLSAgICAgICBvciBhIENGVEFCTEVfRU5UUlkgb2Ygc29tZSBzb3J0ICovCi0gICAgaWYgKCh0dXBsZS0+VHVwbGVDb2RlID09IENJU1RQTF9ERVZJQ0UpIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWSwgcCkgPT0gMCkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9DRlRBQkxFX0VOVFJZX0NCLCBwKSA9PSAwKSkKLQlkZXZfb2srKzsKLQotICAgIC8qIEFsbCBjYXJkcyBzaG91bGQgaGF2ZSBhIE1BTkZJRCB0dXBsZSwgYW5kL29yIGEgVkVSU18xIG9yIFZFUlNfMgotICAgICAgIHR1cGxlLCBmb3IgY2FyZCBpZGVudGlmaWNhdGlvbi4gIENlcnRhaW4gb2xkIEQtTGluayBhbmQgTGlua3N5cwotICAgICAgIGNhcmRzIGhhdmUgb25seSBhIGJyb2tlbiBWRVJTXzIgdHVwbGU7IGhlbmNlIHRoZSBib2d1cyB0ZXN0LiAqLwotICAgIGlmICgocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9NQU5GSUQsIHApID09IDApIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18xLCBwKSA9PSAwKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX1ZFUlNfMiwgcCkgIT0gLUVOT1NQQykpCi0JaWRlbnRfb2srKzsKLQotICAgIGlmICghZGV2X29rICYmICFpZGVudF9vaykKLQlnb3RvIGRvbmU7Ci0KLSAgICBmb3IgKGNvdW50ID0gMTsgY291bnQgPCBNQVhfVFVQTEVTOyBjb3VudCsrKSB7Ci0JcmV0ID0gcGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIEJJTkRfRk5fQUxMLCB0dXBsZSk7CisJY291bnQgPSByZXNlcnZlZCA9IDA7CisJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IFJFVFVSTl9GSVJTVF9UVVBMRTsKKwl0dXBsZS0+QXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047CisJcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgdHVwbGUpOwogCWlmIChyZXQgIT0gMCkKLQkJYnJlYWs7Ci0JaWYgKCgodHVwbGUtPlR1cGxlQ29kZSA+IDB4MjMpICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHg0MCkpIHx8Ci0JICAgICgodHVwbGUtPlR1cGxlQ29kZSA+IDB4NDcpICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHg4MCkpIHx8Ci0JICAgICgodHVwbGUtPlR1cGxlQ29kZSA+IDB4OTApICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHhmZikpKQotCSAgICByZXNlcnZlZCsrOwotICAgIH0KLSAgICBpZiAoKGNvdW50ID09IE1BWF9UVVBMRVMpIHx8IChyZXNlcnZlZCA+IDUpIHx8Ci0JKCghZGV2X29rIHx8ICFpZGVudF9vaykgJiYgKGNvdW50ID4gMTApKSkKLQljb3VudCA9IDA7CisJCWdvdG8gZG9uZTsKKworCS8qIEZpcnN0IHR1cGxlIHNob3VsZCBiZSBERVZJQ0U7IHdlIHNob3VsZCByZWFsbHkgaGF2ZSBlaXRoZXIgdGhhdAorCSAgIG9yIGEgQ0ZUQUJMRV9FTlRSWSBvZiBzb21lIHNvcnQgKi8KKwlpZiAoKHR1cGxlLT5UdXBsZUNvZGUgPT0gQ0lTVFBMX0RFVklDRSkgfHwKKwkgICAgKCFwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX0NGVEFCTEVfRU5UUlksIHApKSB8fAorCSAgICAoIXBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWV9DQiwgcCkpKQorCQlkZXZfb2srKzsKKworCS8qIEFsbCBjYXJkcyBzaG91bGQgaGF2ZSBhIE1BTkZJRCB0dXBsZSwgYW5kL29yIGEgVkVSU18xIG9yIFZFUlNfMgorCSAgIHR1cGxlLCBmb3IgY2FyZCBpZGVudGlmaWNhdGlvbi4gIENlcnRhaW4gb2xkIEQtTGluayBhbmQgTGlua3N5cworCSAgIGNhcmRzIGhhdmUgb25seSBhIGJyb2tlbiBWRVJTXzIgdHVwbGU7IGhlbmNlIHRoZSBib2d1cyB0ZXN0LiAqLworCWlmICgocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9NQU5GSUQsIHApID09IDApIHx8CisJICAgIChwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX1ZFUlNfMSwgcCkgPT0gMCkgfHwKKwkgICAgKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18yLCBwKSAhPSAtRU5PU1BDKSkKKwkJaWRlbnRfb2srKzsKKworCWlmICghZGV2X29rICYmICFpZGVudF9vaykKKwkJZ290byBkb25lOworCisJZm9yIChjb3VudCA9IDE7IGNvdW50IDwgTUFYX1RVUExFUzsgY291bnQrKykgeworCQlyZXQgPSBwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgQklORF9GTl9BTEwsIHR1cGxlKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisJCWlmICgoKHR1cGxlLT5UdXBsZUNvZGUgPiAweDIzKSAmJiAodHVwbGUtPlR1cGxlQ29kZSA8IDB4NDApKSB8fAorCQkgICAgKCh0dXBsZS0+VHVwbGVDb2RlID4gMHg0NykgJiYgKHR1cGxlLT5UdXBsZUNvZGUgPCAweDgwKSkgfHwKKwkJICAgICgodHVwbGUtPlR1cGxlQ29kZSA+IDB4OTApICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHhmZikpKQorCQkJcmVzZXJ2ZWQrKzsKKwl9CisJaWYgKChjb3VudCA9PSBNQVhfVFVQTEVTKSB8fCAocmVzZXJ2ZWQgPiA1KSB8fAorCQkoKCFkZXZfb2sgfHwgIWlkZW50X29rKSAmJiAoY291bnQgPiAxMCkpKQorCQljb3VudCA9IDA7CisKKwlyZXQgPSAwOwogCiBkb25lOgotICAgIGlmIChpbmZvKQotCSAgICAqaW5mbyA9IGNvdW50OwotICAgIGtmcmVlKHR1cGxlKTsKLSAgICBrZnJlZShwKTsKLSAgICByZXR1cm4gMDsKKwkvKiBpbnZhbGlkYXRlIENJUyBjYWNoZSBvbiBmYWlsdXJlICovCisJaWYgKCFkZXZfb2sgfHwgIWlkZW50X29rIHx8ICFjb3VudCkgeworCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCQlkZXN0cm95X2Npc19jYWNoZShzKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCQlyZXQgPSAtRUlPOworCX0KKworCWlmIChpbmZvKQorCQkqaW5mbyA9IGNvdW50OworCWtmcmVlKHR1cGxlKTsKKwlrZnJlZShwKTsKKwlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChwY2NhcmRfdmFsaWRhdGVfY2lzKTsKKworCisjZGVmaW5lIHRvX3NvY2tldChfZGV2KSBjb250YWluZXJfb2YoX2Rldiwgc3RydWN0IHBjbWNpYV9zb2NrZXQsIGRldikKKworc3RhdGljIHNzaXplX3QgcGNjYXJkX2V4dHJhY3RfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBjaGFyICpidWYsCisJCQkJICBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJdHVwbGVfdCB0dXBsZTsKKwlpbnQgc3RhdHVzLCBpOworCWxvZmZfdCBwb2ludGVyID0gMDsKKwlzc2l6ZV90IHJldCA9IDA7CisJdV9jaGFyICp0dXBsZWJ1ZmZlcjsKKwl1X2NoYXIgKnRlbXBidWZmZXI7CisKKwl0dXBsZWJ1ZmZlciA9IGttYWxsb2Moc2l6ZW9mKHVfY2hhcikgKiAyNTYsIEdGUF9LRVJORUwpOworCWlmICghdHVwbGVidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJdGVtcGJ1ZmZlciA9IGttYWxsb2Moc2l6ZW9mKHVfY2hhcikgKiAyNTgsIEdGUF9LRVJORUwpOworCWlmICghdGVtcGJ1ZmZlcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfdHVwbGU7CisJfQorCisJbWVtc2V0KCZ0dXBsZSwgMCwgc2l6ZW9mKHR1cGxlX3QpKTsKKworCXR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fTElOSyB8IFRVUExFX1JFVFVSTl9DT01NT047CisJdHVwbGUuRGVzaXJlZFR1cGxlID0gUkVUVVJOX0ZJUlNUX1RVUExFOworCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKworCXN0YXR1cyA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgQklORF9GTl9BTEwsICZ0dXBsZSk7CisJd2hpbGUgKCFzdGF0dXMpIHsKKwkJdHVwbGUuVHVwbGVEYXRhID0gdHVwbGVidWZmZXI7CisJCXR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKKwkJbWVtc2V0KHR1cGxlYnVmZmVyLCAwLCBzaXplb2YodV9jaGFyKSAqIDI1NSk7CisKKwkJc3RhdHVzID0gcGNjYXJkX2dldF90dXBsZV9kYXRhKHMsICZ0dXBsZSk7CisJCWlmIChzdGF0dXMpCisJCQlicmVhazsKKworCQlpZiAob2ZmIDwgKHBvaW50ZXIgKyAyICsgdHVwbGUuVHVwbGVEYXRhTGVuKSkgeworCQkJdGVtcGJ1ZmZlclswXSA9IHR1cGxlLlR1cGxlQ29kZSAmIDB4ZmY7CisJCQl0ZW1wYnVmZmVyWzFdID0gdHVwbGUuVHVwbGVMaW5rICYgMHhmZjsKKwkJCWZvciAoaSA9IDA7IGkgPCB0dXBsZS5UdXBsZURhdGFMZW47IGkrKykKKwkJCQl0ZW1wYnVmZmVyW2kgKyAyXSA9IHR1cGxlYnVmZmVyW2ldICYgMHhmZjsKKworCQkJZm9yIChpID0gMDsgaSA8ICgyICsgdHVwbGUuVHVwbGVEYXRhTGVuKTsgaSsrKSB7CisJCQkJaWYgKCgoaSArIHBvaW50ZXIpID49IG9mZikgJiYKKwkJCQkgICAgKGkgKyBwb2ludGVyKSA8IChvZmYgKyBjb3VudCkpIHsKKwkJCQkJYnVmW3JldF0gPSB0ZW1wYnVmZmVyW2ldOworCQkJCQlyZXQrKzsKKwkJCQl9CisJCQl9CisJCX0KKworCQlwb2ludGVyICs9IDIgKyB0dXBsZS5UdXBsZURhdGFMZW47CisKKwkJaWYgKHBvaW50ZXIgPj0gKG9mZiArIGNvdW50KSkKKwkJCWJyZWFrOworCisJCWlmICh0dXBsZS5UdXBsZUNvZGUgPT0gQ0lTVFBMX0VORCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSBwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgQklORF9GTl9BTEwsICZ0dXBsZSk7CisJfQorCisJa2ZyZWUodGVtcGJ1ZmZlcik7CisgZnJlZV90dXBsZToKKwlrZnJlZSh0dXBsZWJ1ZmZlcik7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBzc2l6ZV90IHBjY2FyZF9zaG93X2NpcyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCSAgICAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCisJCQkgICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgaW50IHNpemUgPSAweDIwMDsKKworCWlmIChvZmYgPj0gc2l6ZSkKKwkJY291bnQgPSAwOworCWVsc2UgeworCQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKKwkJdW5zaWduZWQgaW50IGNoYWluczsKKworCQlpZiAob2ZmICsgY291bnQgPiBzaXplKQorCQkJY291bnQgPSBzaXplIC0gb2ZmOworCisJCXMgPSB0b19zb2NrZXQoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKKworCQlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKKwkJCXJldHVybiAtRU5PREVWOworCQlpZiAocGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmY2hhaW5zKSkKKwkJCXJldHVybiAtRUlPOworCQlpZiAoIWNoYWlucykKKwkJCXJldHVybiAtRU5PREFUQTsKKworCQljb3VudCA9IHBjY2FyZF9leHRyYWN0X2NpcyhzLCBidWYsIG9mZiwgY291bnQpOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgc3NpemVfdCBwY2NhcmRfc3RvcmVfY2lzKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCXN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKKwkJCQljaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKKwlpbnQgZXJyb3I7CisKKwlzID0gdG9fc29ja2V0KGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7CisKKwlpZiAob2ZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3VudCA+PSBDSVNUUExfTUFYX0NJU19TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVycm9yID0gcGNtY2lhX3JlcGxhY2VfY2lzKHMsIGJ1ZiwgY291bnQpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIC1FSU87CisKKwlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1JFUVVFUlkpOworCisJcmV0dXJuIGNvdW50OworfQorCisKK3N0cnVjdCBiaW5fYXR0cmlidXRlIHBjY2FyZF9jaXNfYXR0ciA9IHsKKwkuYXR0ciA9IHsgLm5hbWUgPSAiY2lzIiwgLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAorCS5zaXplID0gMHgyMDAsCisJLnJlYWQgPSBwY2NhcmRfc2hvd19jaXMsCisJLndyaXRlID0gcGNjYXJkX3N0b3JlX2NpcywKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jcy5jIGIvZHJpdmVycy9wY21jaWEvY3MuYwppbmRleCA2ZDZmODJiLi5lNjc5ZTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NzLmMKQEAgLTE0MCwxOSArMTQwLDEzIEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gZ2V0X2RldmljZSgmc2t0LT5kZXYpOwogCWlmICghZGV2KQogCQlyZXR1cm4gTlVMTDsKLQlza3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHNrdC0+b3duZXIpKSB7Ci0JCXB1dF9kZXZpY2UoJnNrdC0+ZGV2KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiBza3Q7CisJcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfZ2V0X3NvY2tldCk7CiAKIAogdm9pZCBwY21jaWFfcHV0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewotCW1vZHVsZV9wdXQoc2t0LT5vd25lcik7CiAJcHV0X2RldmljZSgmc2t0LT5kZXYpOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfcHV0X3NvY2tldCk7CkBAIC0xODEsOCArMTc1LDYgQEAKIAogCWRldl9kYmcoJnNvY2tldC0+ZGV2LCAicGNtY2lhX3JlZ2lzdGVyX3NvY2tldCgweCVwKVxuIiwgc29ja2V0LT5vcHMpOwogCi0Jc3Bpbl9sb2NrX2luaXQoJnNvY2tldC0+bG9jayk7Ci0KIAkvKiB0cnkgdG8gb2J0YWluIGEgc29ja2V0IG51bWJlciBbeWVzLCBpdCBnZXRzIHVnbHkgaWYgd2UKIAkgKiByZWdpc3RlciBtb3JlIHRoYW4gMl5zaXplb2YodW5zaWduZWQgaW50KSBwY21jaWEKIAkgKiBzb2NrZXRzLi4uIGJ1dCB0aGUgc29ja2V0IG51bWJlciBpcyBkZXByZWNhdGVkCkBAIC0yMjgsMTAgKzIyMCwxMyBAQAogCWluaXRfY29tcGxldGlvbigmc29ja2V0LT5zb2NrZXRfcmVsZWFzZWQpOwogCWluaXRfY29tcGxldGlvbigmc29ja2V0LT50aHJlYWRfZG9uZSk7CiAJbXV0ZXhfaW5pdCgmc29ja2V0LT5za3RfbXV0ZXgpOworCW11dGV4X2luaXQoJnNvY2tldC0+b3BzX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmc29ja2V0LT50aHJlYWRfbG9jayk7CiAKIAlpZiAoc29ja2V0LT5yZXNvdXJjZV9vcHMtPmluaXQpIHsKKwkJbXV0ZXhfbG9jaygmc29ja2V0LT5vcHNfbXV0ZXgpOwogCQlyZXQgPSBzb2NrZXQtPnJlc291cmNlX29wcy0+aW5pdChzb2NrZXQpOworCQltdXRleF91bmxvY2soJnNvY2tldC0+b3BzX211dGV4KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCX0KQEAgLTI4MywxNSArMjc4LDE3IEBACiAJaWYgKHNvY2tldC0+dGhyZWFkKQogCQlrdGhyZWFkX3N0b3Aoc29ja2V0LT50aHJlYWQpOwogCi0JcmVsZWFzZV9jaXNfbWVtKHNvY2tldCk7Ci0KIAkvKiByZW1vdmUgZnJvbSBvdXIgb3duIGxpc3QgKi8KIAlkb3duX3dyaXRlKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwogCWxpc3RfZGVsKCZzb2NrZXQtPnNvY2tldF9saXN0KTsKIAl1cF93cml0ZSgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKIAogCS8qIHdhaXQgZm9yIHN5c2ZzIHRvIGRyb3AgYWxsIHJlZmVyZW5jZXMgKi8KLQlyZWxlYXNlX3Jlc291cmNlX2RiKHNvY2tldCk7CisJaWYgKHNvY2tldC0+cmVzb3VyY2Vfb3BzLT5leGl0KSB7CisJCW11dGV4X2xvY2soJnNvY2tldC0+b3BzX211dGV4KTsKKwkJc29ja2V0LT5yZXNvdXJjZV9vcHMtPmV4aXQoc29ja2V0KTsKKwkJbXV0ZXhfdW5sb2NrKCZzb2NrZXQtPm9wc19tdXRleCk7CisJfQogCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNvY2tldC0+c29ja2V0X3JlbGVhc2VkKTsKIH0gLyogcGNtY2lhX3VucmVnaXN0ZXJfc29ja2V0ICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV91bnJlZ2lzdGVyX3NvY2tldCk7CkBAIC0zMjgsNyArMzI1LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpCisJaWYgKChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSAmJiAoZXZlbnQgIT0gQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMKSkKIAkJcmV0dXJuIDA7CiAKIAlkZXZfZGJnKCZzLT5kZXYsICJzZW5kX2V2ZW50KGV2ZW50ICVkLCBwcmkgJWQsIGNhbGxiYWNrIDB4JXApXG4iLApAQCAtMzQ2LDEzICszNDMsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNvY2tldF9yZW1vdmVfZHJpdmVycyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQotewotCWRldl9kYmcoJnNrdC0+ZGV2LCAicmVtb3ZlX2RyaXZlcnNcbiIpOwotCi0Jc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0NBUkRfUkVNT1ZBTCwgQ1NfRVZFTlRfUFJJX0hJR0gpOwotfQotCiBzdGF0aWMgaW50IHNvY2tldF9yZXNldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewogCWludCBzdGF0dXMsIGk7CkBAIC0zOTUsNyArMzg1LDkgQEAKIAogCWRldl9kYmcoJnMtPmRldiwgInNodXRkb3duXG4iKTsKIAotCXNvY2tldF9yZW1vdmVfZHJpdmVycyhzKTsKKwlzZW5kX2V2ZW50KHMsIENTX0VWRU5UX0NBUkRfUkVNT1ZBTCwgQ1NfRVZFTlRfUFJJX0hJR0gpOworCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlzLT5zdGF0ZSAmPSBTT0NLRVRfSU5VU0UgfCBTT0NLRVRfUFJFU0VOVDsKIAltc2xlZXAoc2h1dGRvd25fZGVsYXkgKiAxMCk7CiAJcy0+c3RhdGUgJj0gU09DS0VUX0lOVVNFOwpAQCAtNDA2LDExICszOTgsMjEgQEAKIAlzLT5vcHMtPnNldF9zb2NrZXQocywgJnMtPnNvY2tldCk7CiAJcy0+aXJxLkFzc2lnbmVkSVJRID0gcy0+aXJxLkNvbmZpZyA9IDA7CiAJcy0+bG9ja19jb3VudCA9IDA7Ci0JZGVzdHJveV9jaXNfY2FjaGUocyk7CisJa2ZyZWUocy0+ZmFrZV9jaXMpOworCXMtPmZha2VfY2lzID0gTlVMTDsKKwlzLT5mdW5jdGlvbnMgPSAwOworCisJLyogRnJvbSBoZXJlIG9uIHdlIGNhbiBiZSBzdXJlIHRoYXQgb25seSB3ZSAodGhhdCBpcywgdGhlCisJICogcGNjYXJkZCB0aHJlYWQpIGFjY2Vzc2VzIHRoaXMgc29ja2V0LCBhbmQgYWxsICgxNi1iaXQpCisJICogUENNQ0lBIGludGVyYWN0aW9ucyBhcmUgZ29uZS4gVGhlcmVmb3JlLCByZWxlYXNlCisJICogb3BzX211dGV4IHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGEgc3lzZnMtcmVsYXRlZCBsb2NrZGVwCisJICogd2FybmluZy4KKwkgKi8KKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisKICNpZmRlZiBDT05GSUdfQ0FSREJVUwogCWNiX2ZyZWUocyk7CiAjZW5kaWYKLQlzLT5mdW5jdGlvbnMgPSAwOwogCiAJLyogZ2l2ZSBzb2NrZXQgc29tZSB0aW1lIHRvIHBvd2VyIGRvd24gKi8KIAltc2xlZXAoMTAwKTsKQEAgLTQyMSw3ICs0MjMsNyBAQAogCQkJICAgIioqKiBEQU5HRVIgKioqIHVuYWJsZSB0byByZW1vdmUgc29ja2V0IHBvd2VyXG4iKTsKIAl9CiAKLQljc19zb2NrZXRfcHV0KHMpOworCXMtPnN0YXRlICY9IH5TT0NLRVRfSU5VU0U7CiB9CiAKIHN0YXRpYyBpbnQgc29ja2V0X3NldHVwKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsIGludCBpbml0aWFsX2RlbGF5KQpAQCAtNDYwLDcgKzQ2Miw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlza3QtPnN0YXRlIHw9IFNPQ0tFVF9DQVJEQlVTOwotCX0KKwl9IGVsc2UKKwkJc2t0LT5zdGF0ZSAmPSB+U09DS0VUX0NBUkRCVVM7CiAKIAkvKgogCSAqIERlY29kZSB0aGUgY2FyZCB2b2x0YWdlIHJlcXVpcmVtZW50cywgYW5kIGFwcGx5IHBvd2VyIHRvIHRoZSBjYXJkLgpAQCAtNTA5LDggKzUxMiwxMiBAQAogCiAJZGV2X2RiZygmc2t0LT5kZXYsICJpbnNlcnRcbiIpOwogCi0JaWYgKCFjc19zb2NrZXRfZ2V0KHNrdCkpCi0JCXJldHVybiAtRU5PREVWOworCW11dGV4X2xvY2soJnNrdC0+b3BzX211dGV4KTsKKwlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9JTlVTRSkgeworCQltdXRleF91bmxvY2soJnNrdC0+b3BzX211dGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNrdC0+c3RhdGUgfD0gU09DS0VUX0lOVVNFOwogCiAJcmV0ID0gc29ja2V0X3NldHVwKHNrdCwgc2V0dXBfZGVsYXkpOwogCWlmIChyZXQgPT0gMCkgewpAQCAtNTI4LDkgKzUzNSwxMSBAQAogCQl9CiAjZW5kaWYKIAkJZGV2X2RiZygmc2t0LT5kZXYsICJpbnNlcnQgZG9uZVxuIik7CisJCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOwogCiAJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9DQVJEX0lOU0VSVElPTiwgQ1NfRVZFTlRfUFJJX0xPVyk7CiAJfSBlbHNlIHsKKwkJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CiAJCXNvY2tldF9zaHV0ZG93bihza3QpOwogCX0KIApAQCAtNTQyLDU4ICs1NTEsNjYgQEAKIAlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKQogCQlyZXR1cm4gLUVCVVNZOwogCisJbXV0ZXhfbG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCXNrdC0+c3VzcGVuZGVkX3N0YXRlID0gc2t0LT5zdGF0ZTsKKwogCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9QTV9TVVNQRU5ELCBDU19FVkVOVF9QUklfTE9XKTsKIAlza3QtPnNvY2tldCA9IGRlYWRfc29ja2V0OwogCXNrdC0+b3BzLT5zZXRfc29ja2V0KHNrdCwgJnNrdC0+c29ja2V0KTsKIAlpZiAoc2t0LT5vcHMtPnN1c3BlbmQpCiAJCXNrdC0+b3BzLT5zdXNwZW5kKHNrdCk7CiAJc2t0LT5zdGF0ZSB8PSBTT0NLRVRfU1VTUEVORDsKLQorCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNvY2tldF9lYXJseV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKKwltdXRleF9sb2NrKCZza3QtPm9wc19tdXRleCk7CiAJc2t0LT5zb2NrZXQgPSBkZWFkX3NvY2tldDsKIAlza3QtPm9wcy0+aW5pdChza3QpOwogCXNrdC0+b3BzLT5zZXRfc29ja2V0KHNrdCwgJnNrdC0+c29ja2V0KTsKIAlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKQogCQlza3QtPnJlc3VtZV9zdGF0dXMgPSBzb2NrZXRfc2V0dXAoc2t0LCByZXN1bWVfZGVsYXkpOworCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNvY2tldF9sYXRlX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewotCWlmICghKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKLQkJc2t0LT5zdGF0ZSAmPSB+U09DS0VUX1NVU1BFTkQ7CisJbXV0ZXhfbG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCXNrdC0+c3RhdGUgJj0gflNPQ0tFVF9TVVNQRU5EOworCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCisJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKKwkJcmV0dXJuIHNvY2tldF9pbnNlcnQoc2t0KTsKKworCWlmIChza3QtPnJlc3VtZV9zdGF0dXMpIHsKKwkJc29ja2V0X3NodXRkb3duKHNrdCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChza3QtPnN1c3BlbmRlZF9zdGF0ZSAhPSBza3QtPnN0YXRlKSB7CisJCWRldl9kYmcoJnNrdC0+ZGV2LAorCQkJInN1c3BlbmQgc3RhdGUgMHgleCAhPSByZXN1bWUgc3RhdGUgMHgleFxuIiwKKwkJCXNrdC0+c3VzcGVuZGVkX3N0YXRlLCBza3QtPnN0YXRlKTsKKworCQlzb2NrZXRfc2h1dGRvd24oc2t0KTsKIAkJcmV0dXJuIHNvY2tldF9pbnNlcnQoc2t0KTsKIAl9CiAKLQlpZiAoc2t0LT5yZXN1bWVfc3RhdHVzID09IDApIHsKLQkJLyoKLQkJICogRklYTUU6IG5lZWQgYSBiZXR0ZXIgY2hlY2sgaGVyZSBmb3IgY2FyZGJ1cyBjYXJkcy4KLQkJICovCi0JCWlmICh2ZXJpZnlfY2lzX2NhY2hlKHNrdCkgIT0gMCkgewotCQkJZGV2X2RiZygmc2t0LT5kZXYsICJjaXMgbWlzbWF0Y2ggLSBkaWZmZXJlbnQgY2FyZFxuIik7Ci0JCQlzb2NrZXRfcmVtb3ZlX2RyaXZlcnMoc2t0KTsKLQkJCWRlc3Ryb3lfY2lzX2NhY2hlKHNrdCk7Ci0JCQkvKgotCQkJICogV29ya2Fyb3VuZDogZ2l2ZSBEUyB0aW1lIHRvIHNjaGVkdWxlIHJlbW92YWwuCi0JCQkgKiBSZW1vdmUgbWUgb25jZSB0aGUgMTAwbXMgZGVsYXkgaXMgZWxpbWluYXRlZAotCQkJICogaW4gZHMuYwotCQkJICovCi0JCQltc2xlZXAoMjAwKTsKLQkJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9DQVJEX0lOU0VSVElPTiwgQ1NfRVZFTlRfUFJJX0xPVyk7Ci0JCX0gZWxzZSB7Ci0JCQlkZXZfZGJnKCZza3QtPmRldiwgImNpcyBtYXRjaGVzIGNhY2hlXG4iKTsKLQkJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9QTV9SRVNVTUUsIENTX0VWRU5UX1BSSV9MT1cpOwotCQl9Ci0JfSBlbHNlIHsKLQkJc29ja2V0X3NodXRkb3duKHNrdCk7CisjaWZkZWYgQ09ORklHX0NBUkRCVVMKKwlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSB7CisJCS8qIFdlIGNhbid0IGJlIHN1cmUgdGhlIENhcmRCdXMgY2FyZCBpcyB0aGUgc2FtZQorCQkgKiBhcyB0aGUgb25lIHByZXZpb3VzbHkgaW5zZXJ0ZWQuIFRoZXJlZm9yZSwgcmVtb3ZlCisJCSAqIGFuZCByZS1hZGQuLi4gKi8KKwkJY2JfZnJlZShza3QpOworCQljYl9hbGxvYyhza3QpOworCQlyZXR1cm4gMDsKIAl9CisjZW5kaWYKIAotCXNrdC0+c3RhdGUgJj0gflNPQ0tFVF9TVVNQRU5EOwotCisJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1BNX1JFU1VNRSwgQ1NfRVZFTlRfUFJJX0xPVyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY3MiwyMCArNjg5LDI2IEBACiAKIAljb21wbGV0ZSgmc2t0LT50aHJlYWRfZG9uZSk7CiAKKwkvKiB3YWl0IGZvciB1c2Vyc3BhY2UgdG8gY2F0Y2ggdXAgKi8KKwltc2xlZXAoMjUwKTsKKwogCXNldF9mcmVlemFibGUoKTsKIAlmb3IgKDs7KSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXVuc2lnbmVkIGludCBldmVudHM7CisJCXVuc2lnbmVkIGludCBzeXNmc19ldmVudHM7CiAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2t0LT50aHJlYWRfbG9jaywgZmxhZ3MpOwogCQlldmVudHMgPSBza3QtPnRocmVhZF9ldmVudHM7CiAJCXNrdC0+dGhyZWFkX2V2ZW50cyA9IDA7CisJCXN5c2ZzX2V2ZW50cyA9IHNrdC0+c3lzZnNfZXZlbnRzOworCQlza3QtPnN5c2ZzX2V2ZW50cyA9IDA7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNrdC0+dGhyZWFkX2xvY2ssIGZsYWdzKTsKIAorCQltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7CiAJCWlmIChldmVudHMpIHsKLQkJCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKIAkJCWlmIChldmVudHMgJiBTU19ERVRFQ1QpCiAJCQkJc29ja2V0X2RldGVjdF9jaGFuZ2Uoc2t0KTsKIAkJCWlmIChldmVudHMgJiBTU19CQVRERUFEKQpAQCAtNjk0LDEwICs3MTcsMzkgQEAKIAkJCQlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfQkFUVEVSWV9MT1csIENTX0VWRU5UX1BSSV9MT1cpOwogCQkJaWYgKGV2ZW50cyAmIFNTX1JFQURZKQogCQkJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9SRUFEWV9DSEFOR0UsIENTX0VWRU5UX1BSSV9MT1cpOwotCQkJbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0JCQljb250aW51ZTsKIAkJfQogCisJCWlmIChzeXNmc19ldmVudHMpIHsKKwkJCWlmIChzeXNmc19ldmVudHMgJiBQQ01DSUFfVUVWRU5UX0VKRUNUKQorCQkJCXNvY2tldF9yZW1vdmUoc2t0KTsKKwkJCWlmIChzeXNmc19ldmVudHMgJiBQQ01DSUFfVUVWRU5UX0lOU0VSVCkKKwkJCQlzb2NrZXRfaW5zZXJ0KHNrdCk7CisJCQlpZiAoKHN5c2ZzX2V2ZW50cyAmIFBDTUNJQV9VRVZFTlRfUkVTVU1FKSAmJgorCQkJCSEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkgeworCQkJCXJldCA9IHNvY2tldF9yZXN1bWUoc2t0KTsKKwkJCQlpZiAoIXJldCAmJiBza3QtPmNhbGxiYWNrKQorCQkJCQlza3QtPmNhbGxiYWNrLT5yZXN1bWUoc2t0KTsKKwkJCX0KKwkJCWlmICgoc3lzZnNfZXZlbnRzICYgUENNQ0lBX1VFVkVOVF9TVVNQRU5EKSAmJgorCQkJCSEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkgeworCQkJCWlmIChza3QtPmNhbGxiYWNrKQorCQkJCQlyZXQgPSBza3QtPmNhbGxiYWNrLT5zdXNwZW5kKHNrdCk7CisJCQkJZWxzZQorCQkJCQlyZXQgPSAwOworCQkJCWlmICghcmV0KQorCQkJCQlzb2NrZXRfc3VzcGVuZChza3QpOworCQkJfQorCQkJaWYgKChzeXNmc19ldmVudHMgJiBQQ01DSUFfVUVWRU5UX1JFUVVFUlkpICYmCisJCQkJIShza3QtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpKSB7CisJCQkJaWYgKCFyZXQgJiYgc2t0LT5jYWxsYmFjaykKKwkJCQkJc2t0LT5jYWxsYmFjay0+cmVxdWVyeShza3QpOworCQkJfQorCQl9CisJCW11dGV4X3VubG9jaygmc2t0LT5za3RfbXV0ZXgpOworCisJCWlmIChldmVudHMgfHwgc3lzZnNfZXZlbnRzKQorCQkJY29udGludWU7CisKIAkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCWJyZWFrOwogCkBAIC03MDcsNiArNzU5LDEzIEBACiAJLyogbWFrZSBzdXJlIHdlIGFyZSBydW5uaW5nIGJlZm9yZSB3ZSBleGl0ICovCiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAorCS8qIHNodXQgZG93biBzb2NrZXQsIGlmIGEgZGV2aWNlIGlzIHN0aWxsIHByZXNlbnQgKi8KKwlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSB7CisJCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKKwkJc29ja2V0X3JlbW92ZShza3QpOworCQltdXRleF91bmxvY2soJnNrdC0+c2t0X211dGV4KTsKKwl9CisKIAkvKiByZW1vdmUgZnJvbSB0aGUgZGV2aWNlIGNvcmUgKi8KIAlwY2NhcmRfc3lzZnNfcmVtb3ZlX3NvY2tldCgmc2t0LT5kZXYpOwogCWRldmljZV91bnJlZ2lzdGVyKCZza3QtPmRldik7CkBAIC03MzIsNiArNzkxLDMxIEBACiB9IC8qIHBjbWNpYV9wYXJzZV9ldmVudHMgKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3BhcnNlX2V2ZW50cyk7CiAKKy8qKgorICogcGNtY2lhX3BhcnNlX3VldmVudHMoKSAtIHRlbGwgcGNjYXJkZCB0byBpc3N1ZSBtYW51YWwgY29tbWFuZHMKKyAqIEBzOgkJdGhlIFBDTUNJQSBzb2NrZXQgd2Ugd2FuJ3QgdG8gY29tbWFuZAorICogQGV2ZW50czoJZXZlbnRzIHRvIHBhc3MgdG8gcGNjYXJkZAorICoKKyAqIHVzZXJzcGFjZS1pc3N1ZWQgaW5zZXJ0LCBlamVjdCwgc3VzcGVuZCBhbmQgcmVzdW1lIGNvbW1hbmRzIG11c3QgYmUKKyAqIGhhbmRsZWQgYnkgcGNjYXJkZCB0byBhdm9pZCBhbnkgc3lzZnMtcmVsYXRlZCBkZWFkbG9ja3MuIFZhbGlkIGV2ZW50cworICogYXJlIFBDTUNJQV9VRVZFTlRfRUpFQ1QgKGZvciBlamVjdCksIFBDTUNJQV9VRVZFTlRfX0lOU0VSVCAoZm9yIGluc2VydCksCisgKiBQQ01DSUFfVUVWRU5UX1JFU1VNRSAoZm9yIHJlc3VtZSksIFBDTUNJQV9VRVZFTlRfU1VTUEVORCAoZm9yIHN1c3BlbmQpCisgKiBhbmQgUENNQ0lBX1VFVkVOVF9SRVFVRVJZIChmb3IgcmUtcXVlcnlpbmcgdGhlIFBDTUNJQSBjYXJkKS4KKyAqLwordm9pZCBwY21jaWFfcGFyc2VfdWV2ZW50cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdV9pbnQgZXZlbnRzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZGV2X2RiZygmcy0+ZGV2LCAicGFyc2VfdWV2ZW50czogZXZlbnRzICUwOHhcbiIsIGV2ZW50cyk7CisJaWYgKHMtPnRocmVhZCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+dGhyZWFkX2xvY2ssIGZsYWdzKTsKKwkJcy0+c3lzZnNfZXZlbnRzIHw9IGV2ZW50czsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+dGhyZWFkX2xvY2ssIGZsYWdzKTsKKworCQl3YWtlX3VwX3Byb2Nlc3Mocy0+dGhyZWFkKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHBjbWNpYV9wYXJzZV91ZXZlbnRzKTsKKwogCiAvKiByZWdpc3RlciBwY21jaWFfY2FsbGJhY2sgKi8KIGludCBwY2NhcmRfcmVnaXN0ZXJfcGNtY2lhKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrICpjKQpAQCAtNzk2LDcgKzg4MCwxMCBAQAogCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMLCBDU19FVkVOVF9QUklfTE9XKTsKIAkJCWlmIChza3QtPmNhbGxiYWNrKQogCQkJCXNrdC0+Y2FsbGJhY2stPnN1c3BlbmQoc2t0KTsKLQkJCWlmIChzb2NrZXRfcmVzZXQoc2t0KSA9PSAwKSB7CisJCQltdXRleF9sb2NrKCZza3QtPm9wc19tdXRleCk7CisJCQlyZXQgPSBzb2NrZXRfcmVzZXQoc2t0KTsKKwkJCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCQkJaWYgKHJldCA9PSAwKSB7CiAJCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0NBUkRfUkVTRVQsIENTX0VWRU5UX1BSSV9MT1cpOwogCQkJCWlmIChza3QtPmNhbGxiYWNrKQogCQkJCQlza3QtPmNhbGxiYWNrLT5yZXN1bWUoc2t0KTsKQEAgLTgxMiwxMjEgKzg5OSw2IEBACiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXNldF9jYXJkKTsKIAogCi0vKiBUaGVzZSBzaHV0IGRvd24gb3Igd2FrZSB1cCBhIHNvY2tldC4gIFRoZXkgYXJlIHNvcnQgb2YgdXNlcgotICogaW5pdGlhdGVkIHZlcnNpb25zIG9mIHRoZSBBUE0gc3VzcGVuZCBhbmQgcmVzdW1lIGFjdGlvbnMuCi0gKi8KLWludCBwY21jaWFfc3VzcGVuZF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCi17Ci0JaW50IHJldDsKLQotCWRldl9kYmcoJnNrdC0+ZGV2LCAic3VzcGVuZGluZyBzb2NrZXRcbiIpOwotCi0JbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwotCWRvIHsKLQkJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewotCQkJcmV0ID0gLUVOT0RFVjsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChza3QtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpIHsKLQkJCXJldCA9IC1FUEVSTTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChza3QtPmNhbGxiYWNrKSB7Ci0JCQlyZXQgPSBza3QtPmNhbGxiYWNrLT5zdXNwZW5kKHNrdCk7Ci0JCQlpZiAocmV0KQotCQkJCWJyZWFrOwotCQl9Ci0JCXJldCA9IHNvY2tldF9zdXNwZW5kKHNrdCk7Ci0JfSB3aGlsZSAoMCk7Ci0JbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfSAvKiBzdXNwZW5kX2NhcmQgKi8KLUVYUE9SVF9TWU1CT0wocGNtY2lhX3N1c3BlbmRfY2FyZCk7Ci0KLQotaW50IHBjbWNpYV9yZXN1bWVfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQotewotCWludCByZXQ7Ci0KLQlkZXZfZGJnKCZza3QtPmRldiwgIndha2luZyB1cCBzb2NrZXRcbiIpOwotCi0JbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwotCWRvIHsKLQkJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewotCQkJcmV0ID0gLUVOT0RFVjsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChza3QtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpIHsKLQkJCXJldCA9IC1FUEVSTTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJldCA9IHNvY2tldF9yZXN1bWUoc2t0KTsKLQkJaWYgKCFyZXQgJiYgc2t0LT5jYWxsYmFjaykKLQkJCXNrdC0+Y2FsbGJhY2stPnJlc3VtZShza3QpOwotCX0gd2hpbGUgKDApOwotCW11dGV4X3VubG9jaygmc2t0LT5za3RfbXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0gLyogcmVzdW1lX2NhcmQgKi8KLUVYUE9SVF9TWU1CT0wocGNtY2lhX3Jlc3VtZV9jYXJkKTsKLQotCi0vKiBUaGVzZSBoYW5kbGUgdXNlciByZXF1ZXN0cyB0byBlamVjdCBvciBpbnNlcnQgYSBjYXJkLiAqLwotaW50IHBjbWNpYV9lamVjdF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCi17Ci0JaW50IHJldDsKLQotCWRldl9kYmcoJnNrdC0+ZGV2LCAidXNlciBlamVjdCByZXF1ZXN0XG4iKTsKLQotCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKLQlkbyB7Ci0JCWlmICghKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKLQkJCXJldCA9IC1FTk9ERVY7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldCA9IHNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9FSkVDVElPTl9SRVFVRVNULCBDU19FVkVOVF9QUklfTE9XKTsKLQkJaWYgKHJldCAhPSAwKSB7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlzb2NrZXRfcmVtb3ZlKHNrdCk7Ci0JCXJldCA9IDA7Ci0JfSB3aGlsZSAoMCk7Ci0JbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfSAvKiBlamVjdF9jYXJkICovCi1FWFBPUlRfU1lNQk9MKHBjbWNpYV9lamVjdF9jYXJkKTsKLQotCi1pbnQgcGNtY2lhX2luc2VydF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCi17Ci0JaW50IHJldDsKLQotCWRldl9kYmcoJnNrdC0+ZGV2LCAidXNlciBpbnNlcnQgcmVxdWVzdFxuIik7Ci0KLQltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0JZG8gewotCQlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSB7Ci0JCQlyZXQgPSAtRUJVU1k7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc29ja2V0X2luc2VydChza3QpID09IC1FTk9ERVYpIHsKLQkJCXJldCA9IC1FTk9ERVY7Ci0JCQlicmVhazsKLQkJfQotCQlyZXQgPSAwOwotCX0gd2hpbGUgKDApOwotCW11dGV4X3VubG9jaygmc2t0LT5za3RfbXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0gLyogaW5zZXJ0X2NhcmQgKi8KLUVYUE9SVF9TWU1CT0wocGNtY2lhX2luc2VydF9jYXJkKTsKLQotCiBzdGF0aWMgaW50IHBjbWNpYV9zb2NrZXRfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oIGIvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaAppbmRleCAzYmMwMmQ1Li5mOTU4NjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKQEAgLTg3LDM3ICs4NywxMSBAQAogI2RlZmluZSBTT0NLRVRfQ0FSREJVUwkJMHg4MDAwCiAjZGVmaW5lIFNPQ0tFVF9DQVJEQlVTX0NPTkZJRwkweDEwMDAwCiAKLXN0YXRpYyBpbmxpbmUgaW50IGNzX3NvY2tldF9nZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQlpbnQgcmV0OwotCi0JV0FSTl9PTihza3QtPnN0YXRlICYgU09DS0VUX0lOVVNFKTsKLQotCXJldCA9IHRyeV9tb2R1bGVfZ2V0KHNrdC0+b3duZXIpOwotCWlmIChyZXQpCi0JCXNrdC0+c3RhdGUgfD0gU09DS0VUX0lOVVNFOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjc19zb2NrZXRfcHV0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCi17Ci0JaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfSU5VU0UpIHsKLQkJc2t0LT5zdGF0ZSAmPSB+U09DS0VUX0lOVVNFOwotCQltb2R1bGVfcHV0KHNrdC0+b3duZXIpOwotCX0KLX0KLQogCiAvKgogICogU3R1ZmYgaW50ZXJuYWwgdG8gbW9kdWxlICJwY21jaWFfY29yZSI6CiAgKi8KIAotLyogY2lzdHBsLmMgKi8KLWludCB2ZXJpZnlfY2lzX2NhY2hlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLQotLyogcnNyY19tZ3IuYyAqLwotdm9pZCByZWxlYXNlX3Jlc291cmNlX2RiKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLQogLyogc29ja2V0X3N5c2ZzLmMgKi8KIGV4dGVybiBpbnQgcGNjYXJkX3N5c2ZzX2FkZF9zb2NrZXQoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHBjY2FyZF9zeXNmc19yZW1vdmVfc29ja2V0KHN0cnVjdCBkZXZpY2UgKmRldik7CkBAIC0xMjUsOCArOTksNiBAQAogLyogY2FyZGJ1cy5jICovCiBpbnQgY2JfYWxsb2Moc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogdm9pZCBjYl9mcmVlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLWludCByZWFkX2NiX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IHNwYWNlLCB1X2ludCBhZGRyLCB1X2ludCBsZW4sCi0JCXZvaWQgKnB0cik7CiAKIAogCkBAIC0xMzgsNyArMTEwLDggQEAKIAlzdHJ1Y3QgbW9kdWxlCSpvd25lcjsKIAlpbnQJCSgqZXZlbnQpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKIAkJCQkgIGV2ZW50X3QgZXZlbnQsIGludCBwcmlvcml0eSk7Ci0Jdm9pZAkJKCpyZXF1ZXJ5KSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBuZXdfY2lzKTsKKwl2b2lkCQkoKnJlcXVlcnkpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CisJaW50CQkoKnZhbGlkYXRlKSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCAqaSk7CiAJaW50CQkoKnN1c3BlbmQpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CiAJaW50CQkoKnJlc3VtZSkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIH07CkBAIC0xNTEsMTYgKzEyNCwzNSBAQAogaW50IHBjY2FyZF9yZWdpc3Rlcl9wY21jaWEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCBwY21jaWFfY2FsbGJhY2sgKmMpOwogc3RydWN0IHBjbWNpYV9zb2NrZXQgKnBjbWNpYV9nZXRfc29ja2V0X2J5X25yKHVuc2lnbmVkIGludCBucik7CiAKLWludCBwY21jaWFfc3VzcGVuZF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwotaW50IHBjbWNpYV9yZXN1bWVfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKLQotaW50IHBjbWNpYV9lamVjdF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwotaW50IHBjbWNpYV9pbnNlcnRfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKK3ZvaWQgcGNtY2lhX3BhcnNlX3VldmVudHMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2tldCwgdW5zaWduZWQgaW50IGV2ZW50cyk7CisjZGVmaW5lIFBDTUNJQV9VRVZFTlRfRUpFQ1QJMHgwMDAxCisjZGVmaW5lIFBDTUNJQV9VRVZFTlRfSU5TRVJUCTB4MDAwMgorI2RlZmluZSBQQ01DSUFfVUVWRU5UX1NVU1BFTkQJMHgwMDA0CisjZGVmaW5lIFBDTUNJQV9VRVZFTlRfUkVTVU1FCTB4MDAwOAorI2RlZmluZSBQQ01DSUFfVUVWRU5UX1JFUVVFUlkJMHgwMDEwCiAKIHN0cnVjdCBwY21jaWFfc29ja2V0ICpwY21jaWFfZ2V0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIHZvaWQgcGNtY2lhX3B1dF9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CiAKKy8qCisgKiBTdHVmZiBpbnRlcm5hbCB0byBtb2R1bGUgInBjbWNpYSIuCisgKi8KKy8qIGRzLmMgKi8KK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGNtY2lhX2J1c190eXBlOworCisvKiBwY21jaWFfcmVzb3VyY2UuYyAqLworZXh0ZXJuIGludCBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CitleHRlcm4gaW50IHBjbWNpYV92YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbih1X2xvbmcgYmFzZSwKKwkJCQkJICAgICAgIHVfbG9uZyBudW0sCisJCQkJCSAgICAgICB1X2xvbmcgYWxpZ24sCisJCQkJCSAgICAgICBpbnQgbG93LAorCQkJCQkgICAgICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworCisKIC8qIGNpc3RwbC5jICovCitleHRlcm4gc3RydWN0IGJpbl9hdHRyaWJ1dGUgcGNjYXJkX2Npc19hdHRyOworCiBpbnQgcGNtY2lhX3JlYWRfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsCiAJCQl1X2ludCBhZGRyLCB1X2ludCBsZW4sIHZvaWQgKnB0cik7CiB2b2lkIHBjbWNpYV93cml0ZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwKQEAgLTE3Miw4ICsxNjQsOCBAQAogaW50IHBjbWNpYV9yZXBsYWNlX2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKIAkJICAgICAgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKTsKIGludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgKmNvdW50KTsKK2ludCB2ZXJpZnlfY2lzX2NhY2hlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIAotLyogbG9vcCBvdmVyIENJUyBlbnRyaWVzICovCiBpbnQgcGNjYXJkX2xvb3BfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKIAkJICAgICAgY2lzZGF0YV90IGNvZGUsIGNpc3BhcnNlX3QgKnBhcnNlLCB2b2lkICpwcml2X2RhdGEsCiAJCSAgICAgIGludCAoKmxvb3BfdHVwbGUpICh0dXBsZV90ICp0dXBsZSwKQEAgLTE4OSwzNSArMTgxLDggQEAKIGludCBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHR1cGxlX3QgKnR1cGxlKTsKIAogCi0vKiByc3JjX21nci5jICovCi1pbnQgcGNtY2lhX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci1zdHJ1Y3QgcmVzb3VyY2UgKnBjbWNpYV9maW5kX2lvX3JlZ2lvbih1bnNpZ25lZCBsb25nIGJhc2UsCi0JCQkJICAgICAgIGludCBudW0sCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sCi0JCQkJICAgICAgIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLWludCBwY21jaWFfYWRqdXN0X2lvX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCSAgICB1bnNpZ25lZCBsb25nIHJfc3RhcnQsCi0JCQkgICAgdW5zaWduZWQgbG9uZyByX2VuZCwKLQkJCSAgICBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci1zdHJ1Y3QgcmVzb3VyY2UgKnBjbWNpYV9maW5kX21lbV9yZWdpb24odV9sb25nIGJhc2UsCi0JCQkJCXVfbG9uZyBudW0sCi0JCQkJCXVfbG9uZyBhbGlnbiwKLQkJCQkJaW50IGxvdywKLQkJCQkJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotCi0vKgotICogU3R1ZmYgaW50ZXJuYWwgdG8gbW9kdWxlICJwY21jaWEiLgotICovCi0vKiBkcy5jICovCi1leHRlcm4gc3RydWN0IGJ1c190eXBlIHBjbWNpYV9idXNfdHlwZTsKLQotLyogcGNtY2lhX3Jlc291cmNlLmMgKi8KLWV4dGVybiBpbnQgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwotCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAogLyogZHMuYyAqLwotZXh0ZXJuIHNwaW5sb2NrX3QgcGNtY2lhX2Rldl9saXN0X2xvY2s7Ci0KIGV4dGVybiBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2dldF9kZXYoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIGV4dGVybiB2b2lkIHBjbWNpYV9wdXRfZGV2KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jIGIvZHJpdmVycy9wY21jaWEvZGIxeHh4X3NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg4OWNmMDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjbWNpYS9kYjF4eHhfc3MuYwpAQCAtMCwwICsxLDYyMyBAQAorLyoKKyAqIFBDTUNJQSBzb2NrZXQgY29kZSBmb3IgdGhlIEFsY2hlbXkgRGIxeHh4L1BiMXh4eCBib2FyZHMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE1hbnVlbCBMYXVzcyA8bWFudWVsLmxhdXNzQGdtYWlsLmNvbT4KKyAqCisgKi8KKworLyogVGhpcyBpcyBhIGZhaXJseSBnZW5lcmljIFBDTUNJQSBzb2NrZXQgZHJpdmVyIHN1aXRhYmxlIGZvciB0aGUKKyAqIGZvbGxvd2luZyBBbGNoZW15IERldmVsb3BtZW50IGJvYXJkczoKKyAqICBEYjEwMDAsIERiL1BiMTUwMCwgRGIvUGIxMTAwLCBEYi9QYjE1NTAsIERiL1BiMTIwMC4KKyAqCisgKiBUaGUgRGIxMDAwIGlzIHVzZWQgYXMgYSByZWZlcmVuY2U6ICBQZXItc29ja2V0IGNhcmQtLCBjYXJkZGV0ZWN0LSBhbmQKKyAqICBzdGF0dXNjaGFuZ2UgSVJRcyBjb25uZWN0ZWQgdG8gU29DIEdQSU9zLCBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIKKyAqICBiaXRzIGFycmFuZ2VkIGluIHBlci1zb2NrZXQgZ3JvdXBzIGluIGFuIGV4dGVybmFsIFBMRC4gIEFsbCBib2FyZHMKKyAqICBsaXN0ZWQgaGVyZSB1c2UgdGhpcyBsYXlvdXQsIGluY2x1ZGluZyBiaXQgcG9zaXRpb25zIGFuZCBtZWFuaW5ncy4KKyAqICBPZiBjb3Vyc2UgdGhlcmUgYXJlIGV4Y2VwdGlvbnMgaW4gbGF0ZXIgYm9hcmRzOgorICoKKyAqCS0gUGIxMTAwL1BiMTUwMDogIHNpbmdsZSBzb2NrZXQgb25seTsgdm9sdGFnZSBrZXkgYml0cyBWUyBhcmUKKyAqCQkJICBhdCBTVEFUVVNbNTo0XSAoaW5zdGVhZCBvZiBTVEFUVVNbMTowXSkuCisgKgktIEF1MTIwMC1iYXNlZDoJICBhZGRpdGlvbmFsIGNhcmQtZWplY3QgaXJxcywgaXJxcyBub3QgZ3Bpb3MhCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CisjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKworI2RlZmluZSBNRU1fTUFQX1NJWkUJMHg0MDAwMDAKKyNkZWZpbmUgSU9fTUFQX1NJWkUJMHgxMDAwCisKK3N0cnVjdCBkYjF4X3BjbWNpYV9zb2NrIHsKKwlzdHJ1Y3QgcGNtY2lhX3NvY2tldAlzb2NrZXQ7CisJaW50CQlucjsJCS8qIHNvY2tldCBudW1iZXIgKi8KKwl2b2lkCQkqdmlydF9pbzsKKworCS8qIHRoZSAicHNldWRvIiBhZGRyZXNzZXMgb2YgdGhlIFBDTUNJQSBzcGFjZS4gKi8KKwlwaHlzX2FkZHJfdAlwaHlzX2lvOworCXBoeXNfYWRkcl90CXBoeXNfYXR0cjsKKwlwaHlzX2FkZHJfdAlwaHlzX21lbTsKKworCS8qIHByZXZpb3VzIGZsYWdzIGZvciBzZXRfc29ja2V0KCkgKi8KKwl1bnNpZ25lZCBpbnQgb2xkX2ZsYWdzOworCisJLyogaW50ZXJydXB0IHNvdXJjZXM6IGxpbnV4IGlycSBudW1iZXJzISAqLworCWludAlpbnNlcnRfaXJxOwkvKiBkZWZhdWx0IGNhcmRkZXRlY3QgaXJxICovCisJaW50CXN0c2NoZ19pcnE7CS8qIGNhcmQtc3RhdHVzLWNoYW5nZSBpcnEgKi8KKwlpbnQJY2FyZF9pcnE7CS8qIGNhcmQgaXJxICovCisJaW50CWVqZWN0X2lycTsJLyogZGIxMjAwL3BiMTIwMCBoYXZlIHRoZXNlICovCisKKyNkZWZpbmUgQk9BUkRfVFlQRV9ERUZBVUxUCTAJLyogbW9zdCBib2FyZHMgKi8KKyNkZWZpbmUgQk9BUkRfVFlQRV9EQjEyMDAJMQkvKiBJUlFzIGFyZW4ndCBncGlvcyAqLworI2RlZmluZSBCT0FSRF9UWVBFX1BCMTEwMAkyCS8qIFZTIGJpdHMgc2xpZ2h0bHkgZGlmZmVyZW50ICovCisJaW50CWJvYXJkX3R5cGU7Cit9OworCisjZGVmaW5lIHRvX2RiMXhfc29ja2V0KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZGIxeF9wY21jaWFfc29jaywgc29ja2V0KQorCisvKiBEQi9QQjEyMDA6IGNoZWNrIENQTEQgU0lHU1RBVFVTIHJlZ2lzdGVyIGJpdCAxMC8xMiAqLworc3RhdGljIGludCBkYjEyMDBfY2FyZF9pbnNlcnRlZChzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jaykKK3sKKwl1bnNpZ25lZCBzaG9ydCBzaWdzdGF0OworCisJc2lnc3RhdCA9IGJjc3JfcmVhZChCQ1NSX1NJR1NUQVQpOworCXJldHVybiBzaWdzdGF0ICYgMSA8PCAoOCArIDIgKiBzb2NrLT5ucik7Cit9CisKKy8qIGNhcmRkZXRlY3QgZ3BpbzogbG93LWFjdGl2ZSAqLworc3RhdGljIGludCBkYjEwMDBfY2FyZF9pbnNlcnRlZChzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jaykKK3sKKwlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlKGlycV90b19ncGlvKHNvY2stPmluc2VydF9pcnEpKTsKK30KKworc3RhdGljIGludCBkYjF4X2NhcmRfaW5zZXJ0ZWQoc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2spCit7CisJc3dpdGNoIChzb2NrLT5ib2FyZF90eXBlKSB7CisJY2FzZSBCT0FSRF9UWVBFX0RCMTIwMDoKKwkJcmV0dXJuIGRiMTIwMF9jYXJkX2luc2VydGVkKHNvY2spOworCWRlZmF1bHQ6CisJCXJldHVybiBkYjEwMDBfY2FyZF9pbnNlcnRlZChzb2NrKTsKKwl9Cit9CisKKy8qIFNUU0NIRyB0ZW5kcyB0byBib3VuY2UgaGVhdmlseSB3aGVuIGNhcmRzIGFyZSBpbnNlcnRlZC9lamVjdGVkLgorICogVG8gYXZvaWQgdGhpcywgdGhlIGludGVycnVwdCBpcyBub3JtYWxseSBkaXNhYmxlZCBhbmQgb25seSBlbmFibGVkCisgKiBhZnRlciByZXNldCB0byBhIGNhcmQgaGFzIGJlZW4gZGUtYXNzZXJ0ZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3RzY2hnKHN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrLCBpbnQgZW4pCit7CisJaWYgKHNvY2stPnN0c2NoZ19pcnEgIT0gLTEpIHsKKwkJaWYgKGVuKQorCQkJZW5hYmxlX2lycShzb2NrLT5zdHNjaGdfaXJxKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pcnEoc29jay0+c3RzY2hnX2lycSk7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZGIxMDAwX3BjbWNpYV9jZGlycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrID0gZGF0YTsKKworCXBjbWNpYV9wYXJzZV9ldmVudHMoJnNvY2stPnNvY2tldCwgU1NfREVURUNUKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGRiMTAwMF9wY21jaWFfc3RzY2hnaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2sgPSBkYXRhOworCisJcGNtY2lhX3BhcnNlX2V2ZW50cygmc29jay0+c29ja2V0LCBTU19TVFNDSEcpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZGIxMjAwX3BjbWNpYV9jZGlycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrID0gZGF0YTsKKworCS8qIERiL1BiMTIwMCBoYXZlIHNlcGFyYXRlIHBlci1zb2NrZXQgaW5zZXJ0aW9uIGFuZCBlamVjdGlvbgorCSAqIGludGVycnVwdHMgd2hpY2ggc3RheSBhc3NlcnRlZCBhcyBsb25nIGFzIHRoZSBjYXJkIGlzCisJICogaW5zZXJ0ZWQvbWlzc2luZy4gIFRoZSBvbmUgd2hpY2ggY2F1c2VkIHVzIHRvIGJlIGNhbGxlZAorCSAqIG5lZWRzIHRvIGJlIGRpc2FibGVkIGFuZCB0aGUgb3RoZXIgb25lIGVuYWJsZWQuCisJICovCisJaWYgKGlycSA9PSBzb2NrLT5pbnNlcnRfaXJxKSB7CisJCWRpc2FibGVfaXJxX25vc3luYyhzb2NrLT5pbnNlcnRfaXJxKTsKKwkJZW5hYmxlX2lycShzb2NrLT5lamVjdF9pcnEpOworCX0gZWxzZSB7CisJCWRpc2FibGVfaXJxX25vc3luYyhzb2NrLT5lamVjdF9pcnEpOworCQllbmFibGVfaXJxKHNvY2stPmluc2VydF9pcnEpOworCX0KKworCXBjbWNpYV9wYXJzZV9ldmVudHMoJnNvY2stPnNvY2tldCwgU1NfREVURUNUKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBkYjF4X3BjbWNpYV9zZXR1cF9pcnFzKHN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChzb2NrLT5zdHNjaGdfaXJxICE9IC0xKSB7CisJCXJldCA9IHJlcXVlc3RfaXJxKHNvY2stPnN0c2NoZ19pcnEsIGRiMTAwMF9wY21jaWFfc3RzY2hnaXJxLAorCQkJCSAgMCwgInBjbWNpYV9zdHNjaGciLCBzb2NrKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogRGIvUGIxMjAwIGhhdmUgc2VwYXJhdGUgcGVyLXNvY2tldCBpbnNlcnRpb24gYW5kIGVqZWN0aW9uCisJICogaW50ZXJydXB0cywgd2hpY2ggc2hvdWxkIHNob3cgZWRnZSBiZWhhdmlvdXIgYnV0IGRvbid0LgorCSAqIFNvIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHVudGlsIGJvdGggaW5zZXJ0aW9uIGFuZAorCSAqIGVqZWN0aW9uIGhhbmRsZXIgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYW5kIHRoZSBjdXJyZW50bHkKKwkgKiBhY3RpdmUgb25lIGRpc2FibGVkLgorCSAqLworCWlmIChzb2NrLT5ib2FyZF90eXBlID09IEJPQVJEX1RZUEVfREIxMjAwKSB7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCQlyZXQgPSByZXF1ZXN0X2lycShzb2NrLT5pbnNlcnRfaXJxLCBkYjEyMDBfcGNtY2lhX2NkaXJxLAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInBjbWNpYV9pbnNlcnQiLCBzb2NrKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0MTsKKworCQlyZXQgPSByZXF1ZXN0X2lycShzb2NrLT5lamVjdF9pcnEsIGRiMTIwMF9wY21jaWFfY2RpcnEsCisJCQkJICBJUlFGX0RJU0FCTEVELCAicGNtY2lhX2VqZWN0Iiwgc29jayk7CisJCWlmIChyZXQpIHsKKwkJCWZyZWVfaXJxKHNvY2stPmluc2VydF9pcnEsIHNvY2spOworCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJZ290byBvdXQxOworCQl9CisKKwkJLyogZGlzYWJsZSB0aGUgY3VycmVudGx5IGFjdGl2ZSBvbmUgKi8KKwkJaWYgKGRiMTIwMF9jYXJkX2luc2VydGVkKHNvY2spKQorCQkJZGlzYWJsZV9pcnFfbm9zeW5jKHNvY2stPmluc2VydF9pcnEpOworCQllbHNlCisJCQlkaXNhYmxlX2lycV9ub3N5bmMoc29jay0+ZWplY3RfaXJxKTsKKworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfSBlbHNlIHsKKwkJLyogYWxsIG90aGVyIChvbGRlcikgRGIxeDAwIGJvYXJkcyB1c2UgYSBHUElPIHRvIHNob3cKKwkJICogY2FyZCBkZXRlY3Rpb24gc3RhdHVzOiAgdXNlIGJvdGgtZWRnZSB0cmlnZ2Vycy4KKwkJICovCisJCXNldF9pcnFfdHlwZShzb2NrLT5pbnNlcnRfaXJxLCBJUlFfVFlQRV9FREdFX0JPVEgpOworCQlyZXQgPSByZXF1ZXN0X2lycShzb2NrLT5pbnNlcnRfaXJxLCBkYjEwMDBfcGNtY2lhX2NkaXJxLAorCQkJCSAgMCwgInBjbWNpYV9jYXJkZGV0ZWN0Iiwgc29jayk7CisKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0MTsKKwl9CisKKwlyZXR1cm4gMDsJLyogYWxsIGRvbmUgKi8KKworb3V0MToKKwlpZiAoc29jay0+c3RzY2hnX2lycSAhPSAtMSkKKwkJZnJlZV9pcnEoc29jay0+c3RzY2hnX2lycSwgc29jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBkYjF4X3BjbWNpYV9mcmVlX2lycXMoc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2spCit7CisJaWYgKHNvY2stPnN0c2NoZ19pcnEgIT0gLTEpCisJCWZyZWVfaXJxKHNvY2stPnN0c2NoZ19pcnEsIHNvY2spOworCisJZnJlZV9pcnEoc29jay0+aW5zZXJ0X2lycSwgc29jayk7CisJaWYgKHNvY2stPmVqZWN0X2lycSAhPSAtMSkKKwkJZnJlZV9pcnEoc29jay0+ZWplY3RfaXJxLCBzb2NrKTsKK30KKworLyoKKyAqIGNvbmZpZ3VyZSBhIFBDTUNJQSBzb2NrZXQgb24gdGhlIERiMXgwMCBzZXJpZXMgb2YgYm9hcmRzIChhbmQKKyAqIGNvbXBhdGlibGVzKS4KKyAqCisgKiAyIGV4dGVybmFsIHJlZ2lzdGVycyBhcmUgaW52b2x2ZWQ6CisgKiAgIHBjbWNpYV9zdGF0dXMgKG9mZnNldCAweDA0KTogYml0cyBbMDoxLzI6M106IHJlYWQgY2FyZCB2b2x0YWdlIGlkCisgKiAgIHBjbWNpYV9jb250cm9sKG9mZnNldCAweDEwKToKKyAqCWJpdHNbMDoxXSBzZXQgdmNjIGZvciBjYXJkCisgKgliaXRzWzI6M10gc2V0IHZwcCBmb3IgY2FyZAorICoJYml0IDQ6CWVuYWJsZSBkYXRhIGJ1ZmZlcnMKKyAqCWJpdCA3OglyZXNldCMgZm9yIGNhcmQKKyAqCWFkZCA4IGZvciBzZWNvbmQgc29ja2V0LgorICovCitzdGF0aWMgaW50IGRiMXhfcGNtY2lhX2NvbmZpZ3VyZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSBzdHJ1Y3Qgc29ja2V0X3N0YXRlX3QgKnN0YXRlKQoreworCXN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrID0gdG9fZGIxeF9zb2NrZXQoc2t0KTsKKwl1bnNpZ25lZCBzaG9ydCBjcl9jbHIsIGNyX3NldDsKKwl1bnNpZ25lZCBpbnQgY2hhbmdlZDsKKwlpbnQgdiwgcCwgcmV0OworCisJLyogY2FyZCB2b2x0YWdlIHNldHVwICovCisJY3JfY2xyID0gKDB4ZiA8PCAoc29jay0+bnIgKiA4KSk7IC8qIGNsZWFyIHZvbHRhZ2Ugc2V0dGluZ3MgKi8KKwljcl9zZXQgPSAwOworCXYgPSBwID0gcmV0ID0gMDsKKworCXN3aXRjaCAoc3RhdGUtPlZjYykgeworCWNhc2UgNTA6CisJCSsrdjsKKwljYXNlIDMzOgorCQkrK3Y7CisJY2FzZSAwOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWElZCB1bnN1cHBvcnRlZCBWY2MgJWRcbiIsCisJCQlzb2NrLT5uciwgc3RhdGUtPlZjYyk7CisJfQorCisJc3dpdGNoIChzdGF0ZS0+VnBwKSB7CisJY2FzZSAxMjoKKwkJKytwOworCWNhc2UgMzM6CisJY2FzZSA1MDoKKwkJKytwOworCWNhc2UgMDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhJWQgdW5zdXBwb3J0ZWQgVnBwICVkXG4iLAorCQkJc29jay0+bnIsIHN0YXRlLT5WcHApOworCX0KKworCS8qIHNhbml0eSBjaGVjazogVnBwIG11c3QgYmUgMCwgMTIsIG9yIFZjYyAqLworCWlmICgoKHN0YXRlLT5WY2MgPT0gMzMpICYmIChzdGF0ZS0+VnBwID09IDUwKSkgfHwKKwkgICAgKChzdGF0ZS0+VmNjID09IDUwKSAmJiAoc3RhdGUtPlZwcCA9PSAzMykpKSB7CisJCXByaW50ayhLRVJOX0lORk8gInBjbWNpYSVkIGJhZCBWY2MvVnBwIGNvbWJvICglZCAlZClcbiIsCisJCQlzb2NrLT5uciwgc3RhdGUtPlZjYywgc3RhdGUtPlZwcCk7CisJCXYgPSBwID0gMDsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwkvKiBjcmVhdGUgbmV3IHZvbHRhZ2UgY29kZSAqLworCWNyX3NldCB8PSAoKHYgPDwgMikgfCBwKSA8PCAoc29jay0+bnIgKiA4KTsKKworCWNoYW5nZWQgPSBzdGF0ZS0+ZmxhZ3MgXiBzb2NrLT5vbGRfZmxhZ3M7CisKKwlpZiAoY2hhbmdlZCAmIFNTX1JFU0VUKSB7CisJCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkgeworCQkJc2V0X3N0c2NoZyhzb2NrLCAwKTsKKwkJCS8qIGFzc2VydCByZXNldCwgZGlzYWJsZSBpbyBidWZmZXJzICovCisJCQljcl9jbHIgfD0gKDEgPDwgKDcgKyAoc29jay0+bnIgKiA4KSkpOworCQkJY3JfY2xyIHw9ICgxIDw8ICg0ICsgKHNvY2stPm5yICogOCkpKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGRlLWFzc2VydCByZXNldCwgZW5hYmxlIGlvIGJ1ZmZlcnMgKi8KKwkJCWNyX3NldCB8PSAxIDw8ICg3ICsgKHNvY2stPm5yICogOCkpOworCQkJY3Jfc2V0IHw9IDEgPDwgKDQgKyAoc29jay0+bnIgKiA4KSk7CisJCX0KKwl9CisKKwkvKiB1cGRhdGUgUENNQ0lBIGNvbmZpZ3VyYXRpb24gKi8KKwliY3NyX21vZChCQ1NSX1BDTUNJQSwgY3JfY2xyLCBjcl9zZXQpOworCisJc29jay0+b2xkX2ZsYWdzID0gc3RhdGUtPmZsYWdzOworCisJLyogcmVzZXQgd2FzIHRha2VuIGF3YXk6IGdpdmUgY2FyZCB0aW1lIHRvIGluaXRpYWxpemUgcHJvcGVybHkgKi8KKwlpZiAoKGNoYW5nZWQgJiBTU19SRVNFVCkgJiYgIShzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkpIHsKKwkJbXNsZWVwKDUwMCk7CisJCXNldF9zdHNjaGcoc29jaywgMSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogVkNDIGJpdHMgYXQgWzM6Ml0vWzExOjEwXSAqLworI2RlZmluZSBHRVRfVkNDKGNyLCBzb2NrbnIpCQlcCisJKCgoKGNyKSA+PiAyKSA+PiAoKHNvY2tucikgKiA4KSkgJiAzKQorCisvKiBWUyBiaXRzIGF0IFswOjFdL1szOjJdICovCisjZGVmaW5lIEdFVF9WUyhzciwgc29ja25yKQkJXAorCSgoKHNyKSA+PiAoMiAqIChzb2NrbnIpKSkgJiAzKQorCisvKiByZXNldCBiaXRzIGF0IFs3XS9bMTVdICovCisjZGVmaW5lIEdFVF9SRVNFVChjciwgc29ja25yKQkJXAorCSgoY3IpICYgKDEgPDwgKDcgKyAoOCAqIChzb2NrbnIpKSkpKQorCitzdGF0aWMgaW50IGRiMXhfcGNtY2lhX2dldF9zdGF0dXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkgIHVuc2lnbmVkIGludCAqdmFsdWUpCit7CisJc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2sgPSB0b19kYjF4X3NvY2tldChza3QpOworCXVuc2lnbmVkIHNob3J0IGNyLCBzcjsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJc3RhdHVzID0gZGIxeF9jYXJkX2luc2VydGVkKHNvY2spID8gU1NfREVURUNUIDogMDsKKworCWNyID0gYmNzcl9yZWFkKEJDU1JfUENNQ0lBKTsKKwlzciA9IGJjc3JfcmVhZChCQ1NSX1NUQVRVUyk7CisKKwkvKiBQQjExMDAvUEIxNTAwOiB2b2x0YWdlIGtleSBiaXRzIGFyZSBhdCBbNTo0XSAqLworCWlmIChzb2NrLT5ib2FyZF90eXBlID09IEJPQVJEX1RZUEVfUEIxMTAwKQorCQlzciA+Pj0gNDsKKworCS8qIGRldGVybWluZSBjYXJkIHR5cGUgKi8KKwlzd2l0Y2ggKEdFVF9WUyhzciwgc29jay0+bnIpKSB7CisJY2FzZSAwOgorCWNhc2UgMjoKKwkJc3RhdHVzIHw9IFNTXzNWQ0FSRDsJLyogM1YgY2FyZCAqLworCWNhc2UgMzoKKwkJYnJlYWs7CQkJLyogNVYgY2FyZDogc2V0IG5vdGhpbmcgKi8KKwlkZWZhdWx0OgorCQlzdGF0dXMgfD0gU1NfWFZDQVJEOwkvKiB0cmVhdGVkIGFzIHVuc3VwcG9ydGVkIGluIGNvcmUgKi8KKwl9CisKKwkvKiBpZiBWY2MgaXMgbm90IHplcm8sIHdlIGhhdmUgYXBwbGllZCBwb3dlciB0byBhIGNhcmQgKi8KKwlzdGF0dXMgfD0gR0VUX1ZDQyhjciwgc29jay0+bnIpID8gU1NfUE9XRVJPTiA6IDA7CisKKwkvKiByZXNldCBkZS1hc3NlcnRlZD8gdGhlbiB3ZSdyZSByZWFkeSAqLworCXN0YXR1cyB8PSAoR0VUX1JFU0VUKGNyLCBzb2NrLT5ucikpID8gU1NfUkVBRFkgOiBTU19SRVNFVDsKKworCSp2YWx1ZSA9IHN0YXR1czsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRiMXhfcGNtY2lhX3NvY2tfaW5pdChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRiMXhfcGNtY2lhX3NvY2tfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1MXgwMF9wY21jaWFfc2V0X2lvX21hcChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSAgICBzdHJ1Y3QgcGNjYXJkX2lvX21hcCAqbWFwKQoreworCXN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrID0gdG9fZGIxeF9zb2NrZXQoc2t0KTsKKworCW1hcC0+c3RhcnQgPSAodTMyKXNvY2stPnZpcnRfaW87CisJbWFwLT5zdG9wID0gbWFwLT5zdGFydCArIElPX01BUF9TSVpFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXUxeDAwX3BjbWNpYV9zZXRfbWVtX21hcChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSAgICAgc3RydWN0IHBjY2FyZF9tZW1fbWFwICptYXApCit7CisJc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2sgPSB0b19kYjF4X3NvY2tldChza3QpOworCisJaWYgKG1hcC0+ZmxhZ3MgJiBNQVBfQVRUUklCKQorCQltYXAtPnN0YXRpY19zdGFydCA9IHNvY2stPnBoeXNfYXR0ciArIG1hcC0+Y2FyZF9zdGFydDsKKwllbHNlCisJCW1hcC0+c3RhdGljX3N0YXJ0ID0gc29jay0+cGh5c19tZW0gKyBtYXAtPmNhcmRfc3RhcnQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwY2NhcmRfb3BlcmF0aW9ucyBkYjF4X3BjbWNpYV9vcGVyYXRpb25zID0geworCS5pbml0CQkJPSBkYjF4X3BjbWNpYV9zb2NrX2luaXQsCisJLnN1c3BlbmQJCT0gZGIxeF9wY21jaWFfc29ja19zdXNwZW5kLAorCS5nZXRfc3RhdHVzCQk9IGRiMXhfcGNtY2lhX2dldF9zdGF0dXMsCisJLnNldF9zb2NrZXQJCT0gZGIxeF9wY21jaWFfY29uZmlndXJlLAorCS5zZXRfaW9fbWFwCQk9IGF1MXgwMF9wY21jaWFfc2V0X2lvX21hcCwKKwkuc2V0X21lbV9tYXAJCT0gYXUxeDAwX3BjbWNpYV9zZXRfbWVtX21hcCwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRiMXhfcGNtY2lhX3NvY2tldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlpbnQgcmV0LCBiaWQ7CisKKwlzb2NrID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRiMXhfcGNtY2lhX3NvY2spLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNvY2spCisJCXJldHVybiAtRU5PTUVNOworCisJc29jay0+bnIgPSBwZGV2LT5pZDsKKworCWJpZCA9IEJDU1JfV0hPQU1JX0JPQVJEKGJjc3JfcmVhZChCQ1NSX1dIT0FNSSkpOworCXN3aXRjaCAoYmlkKSB7CisJY2FzZSBCQ1NSX1dIT0FNSV9QQjE1MDA6CisJY2FzZSBCQ1NSX1dIT0FNSV9QQjE1MDBSMjoKKwljYXNlIEJDU1JfV0hPQU1JX1BCMTEwMDoKKwkJc29jay0+Ym9hcmRfdHlwZSA9IEJPQVJEX1RZUEVfUEIxMTAwOworCQlicmVhazsKKwljYXNlIEJDU1JfV0hPQU1JX0RCMTAwMCAuLi4gQkNTUl9XSE9BTUlfUEIxNTUwX1NEUjoKKwkJc29jay0+Ym9hcmRfdHlwZSA9IEJPQVJEX1RZUEVfREVGQVVMVDsKKwkJYnJlYWs7CisJY2FzZSBCQ1NSX1dIT0FNSV9QQjEyMDAgLi4uIEJDU1JfV0hPQU1JX0RCMTIwMDoKKwkJc29jay0+Ym9hcmRfdHlwZSA9IEJPQVJEX1RZUEVfREIxMjAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPICJkYjF4eHgtc3M6IHVua25vd24gYm9hcmQgJWQhXG4iLCBiaWQpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDA7CisJfTsKKworCS8qCisJICogZ2F0aGVyIHJlc291cmNlcyBuZWNlc3NhcnkgYW5kIG9wdGlvbmFsIG5pY2UtdG8taGF2ZXMgdG8KKwkgKiBvcGVyYXRlIGEgc29ja2V0OgorCSAqIFRoaXMgaW5jbHVkZXMgSVJRcyBmb3IgQ2FyZGRldGVjdGlvbi9lamVjdGlvbiwgdGhlIGNhcmQKKwkgKiAgaXRzZWxmIGFuZCBvcHRpb25hbCBzdGF0dXMgY2hhbmdlIGRldGVjdGlvbi4KKwkgKiBBbHNvLCB0aGUgbWVtb3J5IGFyZWFzIGNvdmVyZWQgYnkgYSBzb2NrZXQuICBGb3IgdGhlc2UKKwkgKiAgd2UgcmVxdWlyZSB0aGUgMzJiaXQgInBzZXVkbyIgYWRkcmVzc2VzIChzZWUgdGhlIGF1MTAwMC5oCisJICogIGhlYWRlciBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisJICovCisKKwkvKiBjYXJkOiBpcnEgYXNzaWduZWQgdG8gdGhlIGNhcmQgaXRzZWxmLiAqLworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAiY2FyZCIpOworCXNvY2stPmNhcmRfaXJxID0gciA/IHItPnN0YXJ0IDogMDsKKworCS8qIGluc2VydDogaXJxIHdoaWNoIHRyaWdnZXJzIG9uIGNhcmQgaW5zZXJ0aW9uL2VqZWN0aW9uICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9JUlEsICJpbnNlcnQiKTsKKwlzb2NrLT5pbnNlcnRfaXJxID0gciA/IHItPnN0YXJ0IDogLTE7CisKKwkvKiBzdHNjaGc6IGlycSB3aGljaCB0cmlnZ2VyIG9uIGNhcmQgc3RhdHVzIGNoYW5nZSAob3B0aW9uYWwpICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9JUlEsICJzdHNjaGciKTsKKwlzb2NrLT5zdHNjaGdfaXJxID0gciA/IHItPnN0YXJ0IDogLTE7CisKKwkvKiBlamVjdDogaXJxIHdoaWNoIHRyaWdnZXJzIG9uIGVqZWN0aW9uIChEQjEyMDAvUEIxMjAwIG9ubHkpICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9JUlEsICJlamVjdCIpOworCXNvY2stPmVqZWN0X2lycSA9IHIgPyByLT5zdGFydCA6IC0xOworCisJcmV0ID0gLUVOT0RFVjsKKworCS8qCisJICogcHNldWRvLWF0dHI6ICBUaGUgMzJiaXQgYWRkcmVzcyBvZiB0aGUgUENNQ0lBIGF0dHJpYnV0ZSBzcGFjZQorCSAqIGZvciB0aGlzIHNvY2tldCAodXN1YWxseSB0aGUgMzZiaXQgYWRkcmVzcyBzaGlmdGVkIDQgdG8gdGhlCisJICogcmlnaHQpLgorCSAqLworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicGNtY2lhLWF0dHIiKTsKKwlpZiAoIXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwY21jaWElZCBoYXMgbm8gJ3BzZXVkby1hdHRyJyByZXNvdXJjZSFcbiIsCisJCQlzb2NrLT5ucik7CisJCWdvdG8gb3V0MDsKKwl9CisJc29jay0+cGh5c19hdHRyID0gci0+c3RhcnQ7CisKKwkvKgorCSAqIHBzZXVkby1tZW06ICBUaGUgMzJiaXQgYWRkcmVzcyBvZiB0aGUgUENNQ0lBIG1lbW9yeSBzcGFjZSBmb3IKKwkgKiB0aGlzIHNvY2tldCAodXN1YWxseSB0aGUgMzZiaXQgYWRkcmVzcyBzaGlmdGVkIDQgdG8gdGhlIHJpZ2h0KQorCSAqLworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicGNtY2lhLW1lbSIpOworCWlmICghcikgeworCQlwcmludGsoS0VSTl9FUlIgInBjbWNpYSVkIGhhcyBubyAncHNldWRvLW1lbScgcmVzb3VyY2UhXG4iLAorCQkJc29jay0+bnIpOworCQlnb3RvIG91dDA7CisJfQorCXNvY2stPnBoeXNfbWVtID0gci0+c3RhcnQ7CisKKwkvKgorCSAqIHBzZXVkby1pbzogIFRoZSAzMmJpdCBhZGRyZXNzIG9mIHRoZSBQQ01DSUEgSU8gc3BhY2UgZm9yIHRoaXMKKwkgKiBzb2NrZXQgKHVzdWFsbHkgdGhlIDM2Yml0IGFkZHJlc3Mgc2hpZnRlZCA0IHRvIHRoZSByaWdodCkuCisJICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwY21jaWEtaW8iKTsKKwlpZiAoIXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwY21jaWElZCBoYXMgbm8gJ3BzZXVkby1pbycgcmVzb3VyY2UhXG4iLAorCQkJc29jay0+bnIpOworCQlnb3RvIG91dDA7CisJfQorCXNvY2stPnBoeXNfaW8gPSByLT5zdGFydDsKKworCS8qCisJICogUENNQ0lBIGNsaWVudCBkcml2ZXJzIHVzZSB0aGUgaW5iL291dGIgbWFjcm9zIHRvIGFjY2VzcworCSAqIHRoZSBJTyByZWdpc3RlcnMuICBTaW5jZSBtaXBzX2lvX3BvcnRfYmFzZSBpcyBhZGRlZAorCSAqIHRvIHRoZSBhY2Nlc3MgYWRkcmVzcyBvZiB0aGUgbWlwcyBpbXBsZW1lbnRhdGlvbiBvZgorCSAqIGluYi9vdXRiLCB3ZSBuZWVkIHRvIHN1YnRyYWN0IGl0IGhlcmUgYmVjYXVzZSB3ZSB3YW50CisJICogdG8gYWNjZXNzIHRoZSBJL08gb3IgTUVNIGFkZHJlc3MgZGlyZWN0bHksIHdpdGhvdXQKKwkgKiBnb2luZyB0aHJvdWdoIHRoaXMgIm1pcHNfaW9fcG9ydF9iYXNlIiBtZWNoYW5pc20uCisJICovCisJc29jay0+dmlydF9pbyA9ICh2b2lkICopKGlvcmVtYXAoc29jay0+cGh5c19pbywgSU9fTUFQX1NJWkUpIC0KKwkJCQkgbWlwc19pb19wb3J0X2Jhc2UpOworCisJaWYgKCFzb2NrLT52aXJ0X2lvKSB7CisJCXByaW50ayhLRVJOX0VSUiAicGNtY2lhJWQ6IGNhbm5vdCByZW1hcCBJTyBhcmVhXG4iLAorCQkJc29jay0+bnIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDA7CisJfQorCisJc29jay0+c29ja2V0Lm9wcwk9ICZkYjF4X3BjbWNpYV9vcGVyYXRpb25zOworCXNvY2stPnNvY2tldC5vd25lcgk9IFRISVNfTU9EVUxFOworCXNvY2stPnNvY2tldC5wY2lfaXJxCT0gc29jay0+Y2FyZF9pcnE7CisJc29jay0+c29ja2V0LmZlYXR1cmVzCT0gU1NfQ0FQX1NUQVRJQ19NQVAgfCBTU19DQVBfUENDQVJEOworCXNvY2stPnNvY2tldC5tYXBfc2l6ZQk9IE1FTV9NQVBfU0laRTsKKwlzb2NrLT5zb2NrZXQuaW9fb2Zmc2V0CT0gKHVuc2lnbmVkIGxvbmcpc29jay0+dmlydF9pbzsKKwlzb2NrLT5zb2NrZXQuZGV2LnBhcmVudAk9ICZwZGV2LT5kZXY7CisJc29jay0+c29ja2V0LnJlc291cmNlX29wcyA9ICZwY2NhcmRfc3RhdGljX29wczsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNvY2spOworCisJcmV0ID0gZGIxeF9wY21jaWFfc2V0dXBfaXJxcyhzb2NrKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAicGNtY2lhJWQgY2Fubm90IHNldHVwIGludGVycnVwdHNcbiIsCisJCQlzb2NrLT5ucik7CisJCWdvdG8gb3V0MTsKKwl9CisKKwlzZXRfc3RzY2hnKHNvY2ssIDApOworCisJcmV0ID0gcGNtY2lhX3JlZ2lzdGVyX3NvY2tldCgmc29jay0+c29ja2V0KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAicGNtY2lhJWQgZmFpbGVkIHRvIHJlZ2lzdGVyXG4iLCBzb2NrLT5ucik7CisJCWdvdG8gb3V0MjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJBbGNoZW15IERiL1BiMXh4eCBwY21jaWElZCBAIGlvL2F0dHIvbWVtICUwOWxseCIKKwkJIiglcCkgJTA5bGx4ICUwOWxseCAgY2FyZC9pbnNlcnQvc3RzY2hnL2VqZWN0IGlycXMgQCAlZCAiCisJCSIlZCAlZCAlZFxuIiwgc29jay0+bnIsIHNvY2stPnBoeXNfaW8sIHNvY2stPnZpcnRfaW8sCisJCXNvY2stPnBoeXNfYXR0ciwgc29jay0+cGh5c19tZW0sIHNvY2stPmNhcmRfaXJxLAorCQlzb2NrLT5pbnNlcnRfaXJxLCBzb2NrLT5zdHNjaGdfaXJxLCBzb2NrLT5lamVjdF9pcnEpOworCisJcmV0dXJuIDA7CisKK291dDI6CisJZGIxeF9wY21jaWFfZnJlZV9pcnFzKHNvY2spOworb3V0MToKKwlpb3VubWFwKCh2b2lkICopKHNvY2stPnZpcnRfaW8gKyAodTMyKW1pcHNfaW9fcG9ydF9iYXNlKSk7CitvdXQwOgorCWtmcmVlKHNvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRiMXhfcGNtY2lhX3NvY2tldF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZGIxeF9wY21jaWFfZnJlZV9pcnFzKHNvY2spOworCXBjbWNpYV91bnJlZ2lzdGVyX3NvY2tldCgmc29jay0+c29ja2V0KTsKKwlpb3VubWFwKCh2b2lkICopKHNvY2stPnZpcnRfaW8gKyAodTMyKW1pcHNfaW9fcG9ydF9iYXNlKSk7CisJa2ZyZWUoc29jayk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBkYjF4X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChkZXYpOworfQorCitzdGF0aWMgaW50IGRiMXhfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZShkZXYpOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZGIxeF9wY21jaWFfcG1vcHMgPSB7CisJLnJlc3VtZQkJPSBkYjF4X3BjbWNpYV9yZXN1bWUsCisJLnN1c3BlbmQJPSBkYjF4X3BjbWNpYV9zdXNwZW5kLAorCS50aGF3CQk9IGRiMXhfcGNtY2lhX3Jlc3VtZSwKKwkuZnJlZXplCQk9IGRiMXhfcGNtY2lhX3N1c3BlbmQsCit9OworCisjZGVmaW5lIERCMVhYWF9TU19QTU9QUyAmZGIxeF9wY21jaWFfcG1vcHMKKworI2Vsc2UKKworI2RlZmluZSBEQjFYWFhfU1NfUE1PUFMgTlVMTAorCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGIxeF9wY21jaWFfc29ja2V0X2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJkYjF4eHhfcGNtY2lhIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9IERCMVhYWF9TU19QTU9QUworCX0sCisJLnByb2JlCQk9IGRiMXhfcGNtY2lhX3NvY2tldF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGRiMXhfcGNtY2lhX3NvY2tldF9yZW1vdmUpLAorfTsKKworaW50IF9faW5pdCBkYjF4X3BjbWNpYV9zb2NrZXRfbG9hZCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRiMXhfcGNtY2lhX3NvY2tldF9kcml2ZXIpOworfQorCit2b2lkICBfX2V4aXQgZGIxeF9wY21jaWFfc29ja2V0X3VubG9hZCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkYjF4X3BjbWNpYV9zb2NrZXRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZGIxeF9wY21jaWFfc29ja2V0X2xvYWQpOworbW9kdWxlX2V4aXQoZGIxeF9wY21jaWFfc29ja2V0X3VubG9hZCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUENNQ0lBIFNvY2tldCBTZXJ2aWNlcyBmb3IgQWxjaGVteSBEYi9QYjF4MDAgYm9hcmRzIik7CitNT0RVTEVfQVVUSE9SKCJNYW51ZWwgTGF1c3MiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2RzLmMgYi9kcml2ZXJzL3BjbWNpYS9kcy5jCmluZGV4IDFhNGEzYzQuLjBmOThiZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2RzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvZHMuYwpAQCAtNDIsOCArNDIsNiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAKLXNwaW5sb2NrX3QgcGNtY2lhX2Rldl9saXN0X2xvY2s7Ci0KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgdm9pZCBwY21jaWFfY2hlY2tfZHJpdmVyKHN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydikKQEAgLTEyNiw5ICsxMjQsOSBAQAogCWR5bmlkLT5pZC5kZXZpY2Vfbm8gPSBkZXZpY2Vfbm87CiAJbWVtY3B5KGR5bmlkLT5pZC5wcm9kX2lkX2hhc2gsIHByb2RfaWRfaGFzaCwgc2l6ZW9mKF9fdTMyKSAqIDQpOwogCi0Jc3Bpbl9sb2NrKCZwZHJ2LT5keW5pZHMubG9jayk7CisJbXV0ZXhfbG9jaygmcGRydi0+ZHluaWRzLmxvY2spOwogCWxpc3RfYWRkX3RhaWwoJmR5bmlkLT5ub2RlLCAmcGRydi0+ZHluaWRzLmxpc3QpOwotCXNwaW5fdW5sb2NrKCZwZHJ2LT5keW5pZHMubG9jayk7CisJbXV0ZXhfdW5sb2NrKCZwZHJ2LT5keW5pZHMubG9jayk7CiAKIAlpZiAoZ2V0X2RyaXZlcigmcGRydi0+ZHJ2KSkgewogCQlyZXR2YWwgPSBkcml2ZXJfYXR0YWNoKCZwZHJ2LT5kcnYpOwpAQCAtMTQ2LDEyICsxNDQsMTIgQEAKIHsKIAlzdHJ1Y3QgcGNtY2lhX2R5bmlkICpkeW5pZCwgKm47CiAKLQlzcGluX2xvY2soJmRydi0+ZHluaWRzLmxvY2spOworCW11dGV4X2xvY2soJmRydi0+ZHluaWRzLmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkeW5pZCwgbiwgJmRydi0+ZHluaWRzLmxpc3QsIG5vZGUpIHsKIAkJbGlzdF9kZWwoJmR5bmlkLT5ub2RlKTsKIAkJa2ZyZWUoZHluaWQpOwogCX0KLQlzcGluX3VubG9jaygmZHJ2LT5keW5pZHMubG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkcnYtPmR5bmlkcy5sb2NrKTsKIH0KIAogc3RhdGljIGludApAQCAtMTgyLDcgKzE4MCw3IEBACiAJLyogaW5pdGlhbGl6ZSBjb21tb24gZmllbGRzICovCiAJZHJpdmVyLT5kcnYuYnVzID0gJnBjbWNpYV9idXNfdHlwZTsKIAlkcml2ZXItPmRydi5vd25lciA9IGRyaXZlci0+b3duZXI7Ci0Jc3Bpbl9sb2NrX2luaXQoJmRyaXZlci0+ZHluaWRzLmxvY2spOworCW11dGV4X2luaXQoJmRyaXZlci0+ZHluaWRzLmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZkcml2ZXItPmR5bmlkcy5saXN0KTsKIAogCXByX2RlYnVnKCJyZWdpc3RlcmluZyBkcml2ZXIgJXNcbiIsIGRyaXZlci0+ZHJ2Lm5hbWUpOwpAQCAtMjM5LDMwICsyMzcsMjEgQEAKIHN0YXRpYyB2b2lkIHBjbWNpYV9yZWxlYXNlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gdG9fcGNtY2lhX2RldihkZXYpOworCWludCBpOwogCWRldl9kYmcoZGV2LCAicmVsZWFzaW5nIGRldmljZVxuIik7CiAJcGNtY2lhX3B1dF9zb2NrZXQocF9kZXYtPnNvY2tldCk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJa2ZyZWUocF9kZXYtPnByb2RfaWRbaV0pOwogCWtmcmVlKHBfZGV2LT5kZXZuYW1lKTsKIAlrcmVmX3B1dCgmcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZy0+cmVmLCBwY21jaWFfcmVsZWFzZV9mdW5jdGlvbik7CiAJa2ZyZWUocF9kZXYpOwogfQogCi1zdGF0aWMgdm9pZCBwY21jaWFfYWRkX2RldmljZV9sYXRlcihzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IG1mYykKLXsKLQlpZiAoIXMtPnBjbWNpYV9zdGF0ZS5kZXZpY2VfYWRkX3BlbmRpbmcpIHsKLQkJZGV2X2RiZygmcy0+ZGV2LCAic2NoZWR1bGluZyB0byBhZGQgJXMgc2Vjb25kYXJ5IgotCQkgICAgICAgIiBkZXZpY2UgdG8gJWRcbiIsIG1mYyA/ICJtZmMiIDogInBmYyIsIHMtPnNvY2spOwotCQlzLT5wY21jaWFfc3RhdGUuZGV2aWNlX2FkZF9wZW5kaW5nID0gMTsKLQkJcy0+cGNtY2lhX3N0YXRlLm1mY19wZmMgPSBtZmM7Ci0JCXNjaGVkdWxlX3dvcmsoJnMtPmRldmljZV9hZGQpOwotCX0KLQlyZXR1cm47Ci19CiAKIHN0YXRpYyBpbnQgcGNtY2lhX2RldmljZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OwogCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydjsKLQlzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCAqZGlkOwogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwogCWNpc3RwbF9jb25maWdfdCBjaXNfY29uZmlnOwogCWludCByZXQgPSAwOwpAQCAtMjc1LDE4ICsyNjQsNiBAQAogCXBfZHJ2ID0gdG9fcGNtY2lhX2RydihkZXYtPmRyaXZlcik7CiAJcyA9IHBfZGV2LT5zb2NrZXQ7CiAKLQkvKiBUaGUgUENNQ0lBIGNvZGUgcGFzc2VzIHRoZSBtYXRjaCBkYXRhIGluIHZpYSBkZXZfc2V0X2RydmRhdGEoZGV2KQotCSAqIHdoaWNoIGlzIGFuIHVnbHkgaGFjay4gT25jZSB0aGUgZHJpdmVyIHByb2JlIGlzIGNhbGxlZCBpdCBtYXkKLQkgKiBhbmQgb2Z0ZW4gd2lsbCBvdmVyd3JpdGUgdGhlIG1hdGNoIGRhdGEgc28gd2UgbXVzdCBzYXZlIGl0IGZpcnN0Ci0JICoKLQkgKiBoYW5kbGUgcHNldWRvIG11bHRpZnVuY3Rpb24gZGV2aWNlczoKLQkgKiB0aGVyZSBhcmUgYXQgbW9zdCB0d28gcHNldWRvIG11bHRpZnVuY3Rpb24gZGV2aWNlcy4KLQkgKiBpZiB3ZSdyZSBtYXRjaGluZyBhZ2FpbnN0IHRoZSBmaXJzdCwgc2NoZWR1bGUgYQotCSAqIGNhbGwgd2hpY2ggd2lsbCB0aGVuIGNoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIHR3bwotCSAqIHBzZXVkbyBkZXZpY2VzLCBhbmQgaWYgbm90LCBhZGQgdGhlIHNlY29uZCBvbmUuCi0JICovCi0JZGlkID0gZGV2X2dldF9kcnZkYXRhKCZwX2Rldi0+ZGV2KTsKLQogCWRldl9kYmcoZGV2LCAidHJ5aW5nIHRvIGJpbmQgdG8gJXNcbiIsIHBfZHJ2LT5kcnYubmFtZSk7CiAKIAlpZiAoKCFwX2Rydi0+cHJvYmUpIHx8ICghcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZykgfHwKQEAgLTMxNSw5ICsyOTIsMTEgQEAKIAkJZ290byBwdXRfbW9kdWxlOwogCX0KIAotCWlmIChkaWQgJiYgKGRpZC0+bWF0Y2hfZmxhZ3MgJiBQQ01DSUFfREVWX0lEX01BVENIX0RFVklDRV9OTykgJiYKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCWlmICgocy0+cGNtY2lhX3N0YXRlLmhhc19wZmMpICYmCiAJICAgIChwX2Rldi0+c29ja2V0LT5kZXZpY2VfY291bnQgPT0gMSkgJiYgKHBfZGV2LT5kZXZpY2Vfbm8gPT0gMCkpCi0JCXBjbWNpYV9hZGRfZGV2aWNlX2xhdGVyKHBfZGV2LT5zb2NrZXQsIDApOworCQlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1JFUVVFUlkpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogcHV0X21vZHVsZToKIAlpZiAocmV0KQpAQCAtMzM2LDI2ICszMTUsMjcgQEAKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnRtcDsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAogCWRldl9kYmcobGVmdG92ZXIgPyAmbGVmdG92ZXItPmRldiA6ICZzLT5kZXYsCiAJCSAgICJwY21jaWFfY2FyZF9yZW1vdmUoJWQpICVzXG4iLCBzLT5zb2NrLAogCQkgICBsZWZ0b3ZlciA/IGxlZnRvdmVyLT5kZXZuYW1lIDogIiIpOwogCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlpZiAoIWxlZnRvdmVyKQogCQlzLT5kZXZpY2VfY291bnQgPSAwOwogCWVsc2UKIAkJcy0+ZGV2aWNlX2NvdW50ID0gMTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAkvKiB1bnJlZ2lzdGVyIGFsbCBwY21jaWFfZGV2aWNlcyByZWdpc3RlcmVkIHdpdGggdGhpcyBzb2NrZXQsIGV4Y2VwdCBsZWZ0b3ZlciAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwX2RldiwgdG1wLCAmcy0+ZGV2aWNlc19saXN0LCBzb2NrZXRfZGV2aWNlX2xpc3QpIHsKIAkJaWYgKHBfZGV2ID09IGxlZnRvdmVyKQogCQkJY29udGludWU7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJCWxpc3RfZGVsKCZwX2Rldi0+c29ja2V0X2RldmljZV9saXN0KTsKIAkJcF9kZXYtPl9yZW1vdmVkID0gMTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJCWRldl9kYmcoJnBfZGV2LT5kZXYsICJ1bnJlZ2lzdGVyaW5nIGRldmljZVxuIik7CiAJCWRldmljZV91bnJlZ2lzdGVyKCZwX2Rldi0+ZGV2KTsKQEAgLTM2OCw3ICszNDgsNiBAQAogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKIAlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnY7Ci0Jc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgKmRpZDsKIAlpbnQgaTsKIAogCXBfZGV2ID0gdG9fcGNtY2lhX2RldihkZXYpOwpAQCAtMzgwLDkgKzM1OSw4IEBACiAJICogcHNldWRvIG11bHRpLWZ1bmN0aW9uIGNhcmQsIHdlIG5lZWQgdG8gdW5iaW5kCiAJICogYWxsIGRldmljZXMKIAkgKi8KLQlkaWQgPSBkZXZfZ2V0X2RydmRhdGEoJnBfZGV2LT5kZXYpOwotCWlmIChkaWQgJiYgKGRpZC0+bWF0Y2hfZmxhZ3MgJiBQQ01DSUFfREVWX0lEX01BVENIX0RFVklDRV9OTykgJiYKLQkgICAgKHBfZGV2LT5zb2NrZXQtPmRldmljZV9jb3VudCAhPSAwKSAmJgorCWlmICgocF9kZXYtPnNvY2tldC0+cGNtY2lhX3N0YXRlLmhhc19wZmMpICYmCisJICAgIChwX2Rldi0+c29ja2V0LT5kZXZpY2VfY291bnQgPiAwKSAmJgogCSAgICAocF9kZXYtPmRldmljZV9ubyA9PSAwKSkKIAkJcGNtY2lhX2NhcmRfcmVtb3ZlKHBfZGV2LT5zb2NrZXQsIHBfZGV2KTsKIApAQCAtNDMxLDE2ICs0MDksMjAgQEAKIAogCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocF9kZXYtPnNvY2tldCwgQklORF9GTl9BTEwsCiAJCQkgICAgICAgQ0lTVFBMX01BTkZJRCwgJm1hbmZfaWQpKSB7CisJCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCXBfZGV2LT5tYW5mX2lkID0gbWFuZl9pZC5tYW5mOwogCQlwX2Rldi0+Y2FyZF9pZCA9IG1hbmZfaWQuY2FyZDsKIAkJcF9kZXYtPmhhc19tYW5mX2lkID0gMTsKIAkJcF9kZXYtPmhhc19jYXJkX2lkID0gMTsKKwkJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCX0KIAogCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocF9kZXYtPnNvY2tldCwgcF9kZXYtPmZ1bmMsCiAJCQkgICAgICAgQ0lTVFBMX0ZVTkNJRCwgJmZ1bmNfaWQpKSB7CisJCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCXBfZGV2LT5mdW5jX2lkID0gZnVuY19pZC5mdW5jOwogCQlwX2Rldi0+aGFzX2Z1bmNfaWQgPSAxOworCQltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJfSBlbHNlIHsKIAkJLyogcnVsZSBvZiB0aHVtYjogY2FyZHMgd2l0aCBubyBGVU5DSUQsIGJ1dCB3aXRoCiAJCSAqIGNvbW1vbiBtZW1vcnkgZGV2aWNlIGdlb21ldHJ5IGluZm9ybWF0aW9uLCBhcmUKQEAgLTQ1NywxNyArNDM5LDIxIEBACiAJCQlkZXZfZGJnKCZwX2Rldi0+ZGV2LAogCQkJCSAgICJtZW0gZGV2aWNlIGdlb21ldHJ5IHByb2JhYmx5IG1lYW5zICIKIAkJCQkgICAiRlVOQ0lEX01FTU9SWVxuIik7CisJCQltdXRleF9sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCQkJcF9kZXYtPmZ1bmNfaWQgPSBDSVNUUExfRlVOQ0lEX01FTU9SWTsKIAkJCXBfZGV2LT5oYXNfZnVuY19pZCA9IDE7CisJCQltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCX0KIAkJa2ZyZWUoZGV2Z2VvKTsKIAl9CiAKIAlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18xLAogCQkJICAgICAgIHZlcnMxKSkgeworCQltdXRleF9sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCQlmb3IgKGkgPSAwOyBpIDwgbWluX3QodW5zaWduZWQgaW50LCA0LCB2ZXJzMS0+bnMpOyBpKyspIHsKIAkJCWNoYXIgKnRtcDsKIAkJCXVuc2lnbmVkIGludCBsZW5ndGg7CisJCQljaGFyICpuZXc7CiAKIAkJCXRtcCA9IHZlcnMxLT5zdHIgKyB2ZXJzMS0+b2ZzW2ldOwogCkBAIC00NzUsMTQgKzQ2MSwxNyBAQAogCQkJaWYgKChsZW5ndGggPCAyKSB8fCAobGVuZ3RoID4gMjU1KSkKIAkJCQljb250aW51ZTsKIAotCQkJcF9kZXYtPnByb2RfaWRbaV0gPSBrbWFsbG9jKHNpemVvZihjaGFyKSAqIGxlbmd0aCwKLQkJCQkJCSAgICBHRlBfS0VSTkVMKTsKLQkJCWlmICghcF9kZXYtPnByb2RfaWRbaV0pCisJCQluZXcgPSBrbWFsbG9jKHNpemVvZihjaGFyKSAqIGxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIW5ldykKIAkJCQljb250aW51ZTsKIAotCQkJcF9kZXYtPnByb2RfaWRbaV0gPSBzdHJuY3B5KHBfZGV2LT5wcm9kX2lkW2ldLAotCQkJCQkJICAgIHRtcCwgbGVuZ3RoKTsKKwkJCW5ldyA9IHN0cm5jcHkobmV3LCB0bXAsIGxlbmd0aCk7CisKKwkJCXRtcCA9IHBfZGV2LT5wcm9kX2lkW2ldOworCQkJcF9kZXYtPnByb2RfaWRbaV0gPSBuZXc7CisJCQlrZnJlZSh0bXApOwogCQl9CisJCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAl9CiAKIAlrZnJlZSh2ZXJzMSk7CkBAIC01MDIsNyArNDkxLDcgQEAKIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWFfZGV2aWNlX2FkZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uKQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgKnRtcF9kZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKIAogCXMgPSBwY21jaWFfZ2V0X3NvY2tldChzKTsKIAlpZiAoIXMpCkBAIC01MTIsMTYgKzUwMSwxOSBAQAogCiAJcHJfZGVidWcoImFkZGluZyBkZXZpY2UgdG8gJWQsIGZ1bmN0aW9uICVkXG4iLCBzLT5zb2NrLCBmdW5jdGlvbik7CiAKLQkvKiBtYXggb2YgNCBkZXZpY2VzIHBlciBjYXJkICovCi0JaWYgKHMtPmRldmljZV9jb3VudCA9PSA0KQotCQlnb3RvIGVycl9wdXQ7Ci0KIAlwX2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY21jaWFfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwX2RldikKIAkJZ290byBlcnJfcHV0OwogCi0JcF9kZXYtPnNvY2tldCA9IHM7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlwX2Rldi0+ZGV2aWNlX25vID0gKHMtPmRldmljZV9jb3VudCsrKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisKKwkvKiBtYXggb2YgMiBkZXZpY2VzIHBlciBjYXJkICovCisJaWYgKHBfZGV2LT5kZXZpY2Vfbm8gPj0gMikKKwkJZ290byBlcnJfZnJlZTsKKworCXBfZGV2LT5zb2NrZXQgPSBzOwogCXBfZGV2LT5mdW5jICAgPSBmdW5jdGlvbjsKIAogCXBfZGV2LT5kZXYuYnVzID0gJnBjbWNpYV9idXNfdHlwZTsKQEAgLTUzOCw3ICs1MzAsNyBAQAogCQlnb3RvIGVycl9mcmVlOwogCWRldl9kYmcoJnBfZGV2LT5kZXYsICJkZXZuYW1lIGlzICVzXG4iLCBwX2Rldi0+ZGV2bmFtZSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJLyoKIAkgKiBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnIG11c3QgYmUgdGhlIHNhbWUgZm9yIGFsbCBjYXJkIGZ1bmN0aW9ucy4KQEAgLTU1Niw3ICs1NDgsNyBAQAogCS8qIEFkZCB0byB0aGUgbGlzdCBpbiBwY21jaWFfYnVzX3NvY2tldCAqLwogCWxpc3RfYWRkKCZwX2Rldi0+c29ja2V0X2RldmljZV9saXN0LCAmcy0+ZGV2aWNlc19saXN0KTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJaWYgKCFwX2Rldi0+ZnVuY3Rpb25fY29uZmlnKSB7CiAJCWRldl9kYmcoJnBfZGV2LT5kZXYsICJjcmVhdGluZyBjb25maWdfdFxuIik7CkBAIC01ODEsMTQgKzU3MywxOSBAQAogCXJldHVybiBwX2RldjsKIAogIGVycl91bnJlZzoKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWxpc3RfZGVsKCZwX2Rldi0+c29ja2V0X2RldmljZV9saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogIGVycl9mcmVlOgorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJcy0+ZGV2aWNlX2NvdW50LS07CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJa2ZyZWUocF9kZXYtPnByb2RfaWRbaV0pOwogCWtmcmVlKHBfZGV2LT5kZXZuYW1lKTsKIAlrZnJlZShwX2Rldik7Ci0Jcy0+ZGV2aWNlX2NvdW50LS07CiAgZXJyX3B1dDoKIAltdXRleF91bmxvY2soJmRldmljZV9hZGRfbG9jayk7CiAJcGNtY2lhX3B1dF9zb2NrZXQocyk7CkBAIC02MDEsMTkgKzU5OCwyMyBAQAogewogCWNpc3RwbF9sb25nbGlua19tZmNfdCBtZmM7CiAJdW5zaWduZWQgaW50IG5vX2Z1bmNzLCBpLCBub19jaGFpbnM7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldCA9IC1FQUdBSU47CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWlmICghKHMtPnJlc291cmNlX3NldHVwX2RvbmUpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwKIAkJCSAgICJubyByZXNvdXJjZXMgYXZhaWxhYmxlLCBkZWxheWluZyBjYXJkX2FkZFxuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FQUdBSU47IC8qIHRyeSBhZ2FpbiwgYnV0IGxhdGVyLi4uICovCiAJfQogCiAJaWYgKHBjbWNpYV92YWxpZGF0ZV9tZW0ocykpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAidmFsaWRhdGluZyBtZW0gcmVzb3VyY2VzIGZhaWxlZCwgIgogCQkgICAgICAgImRlbGF5aW5nIGNhcmRfYWRkXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVBR0FJTjsgLyogdHJ5IGFnYWluLCBidXQgbGF0ZXIuLi4gKi8KIAl9CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmbm9fY2hhaW5zKTsKIAlpZiAocmV0IHx8ICFub19jaGFpbnMpIHsKQEAgLTYzNCwxNyArNjM1LDcgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBwY21jaWFfZGVsYXllZF9hZGRfZGV2aWNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCwgZGV2aWNlX2FkZCk7Ci0JZGV2X2RiZygmcy0+ZGV2LCAiYWRkaW5nIGFkZGl0aW9uYWwgZGV2aWNlIHRvICVkXG4iLCBzLT5zb2NrKTsKLQlwY21jaWFfZGV2aWNlX2FkZChzLCBzLT5wY21jaWFfc3RhdGUubWZjX3BmYyk7Ci0Jcy0+cGNtY2lhX3N0YXRlLmRldmljZV9hZGRfcGVuZGluZyA9IDA7Ci0Jcy0+cGNtY2lhX3N0YXRlLm1mY19wZmMgPSAwOwotfQotCi1zdGF0aWMgaW50IHBjbWNpYV9yZXF1ZXJ5KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqIF9kYXRhKQorc3RhdGljIGludCBwY21jaWFfcmVxdWVyeV9jYWxsYmFjayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKiBfZGF0YSkKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CiAJaWYgKCFwX2Rldi0+ZGV2LmRyaXZlcikgewpAQCAtNjU1LDQ1ICs2NDYsNjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcGNtY2lhX2J1c19yZXNjYW4oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwgaW50IG5ld19jaXMpCisKK3N0YXRpYyB2b2lkIHBjbWNpYV9yZXF1ZXJ5KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogewotCWludCBub19kZXZpY2VzID0gMDsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBwcmVzZW50LCBoYXNfcGZjOwogCi0JLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBza3RfbXV0ZXggaGVsZCAqLwotCWRldl9kYmcoJnNrdC0+ZGV2LCAicmUtc2Nhbm5pbmcgc29ja2V0ICVkXG4iLCBza3QtPnNvY2spOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJcHJlc2VudCA9IHMtPnBjbWNpYV9zdGF0ZS5wcmVzZW50OworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwotCWlmIChsaXN0X2VtcHR5KCZza3QtPmRldmljZXNfbGlzdCkpCi0JCW5vX2RldmljZXMgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJaWYgKCFwcmVzZW50KQorCQlyZXR1cm47CiAKLQkvKiBJZiB0aGlzIGlzIGJlY2F1c2Ugb2YgYSBDSVMgb3ZlcnJpZGUsIHN0YXJ0IG92ZXIgKi8KLQlpZiAobmV3X2NpcyAmJiAhbm9fZGV2aWNlcykKLQkJcGNtY2lhX2NhcmRfcmVtb3ZlKHNrdCwgTlVMTCk7Ci0KLQkvKiBpZiBubyBkZXZpY2VzIHdlcmUgYWRkZWQgZm9yIHRoaXMgc29ja2V0IHlldCBiZWNhdXNlIG9mCi0JICogbWlzc2luZyByZXNvdXJjZSBpbmZvcm1hdGlvbiBvciBvdGhlciB0cm91YmxlLCB3ZSBuZWVkIHRvCi0JICogZG8gdGhpcyBub3cuICovCi0JaWYgKG5vX2RldmljZXMgfHwgbmV3X2NpcykgewotCQlyZXQgPSBwY21jaWFfY2FyZF9hZGQoc2t0KTsKLQkJaWYgKHJldCkKLQkJCXJldHVybjsKKwlpZiAocy0+ZnVuY3Rpb25zID09IDApIHsKKwkJcGNtY2lhX2NhcmRfYWRkKHMpOworCQlyZXR1cm47CiAJfQogCiAJLyogc29tZSBkZXZpY2UgaW5mb3JtYXRpb24gbWlnaHQgaGF2ZSBjaGFuZ2VkIGJlY2F1c2Ugb2YgYSBDSVMKIAkgKiB1cGRhdGUgb3IgYmVjYXVzZSB3ZSBjYW4gZmluYWxseSByZWFkIGl0IGNvcnJlY3RseS4uLiBzbwogCSAqIGRldGVybWluZSBpdCBhZ2Fpbiwgb3ZlcndyaXRpbmcgb2xkIHZhbHVlcyBpZiBuZWNlc3NhcnkuICovCi0JYnVzX2Zvcl9lYWNoX2RldigmcGNtY2lhX2J1c190eXBlLCBOVUxMLCBOVUxMLCBwY21jaWFfcmVxdWVyeSk7CisJYnVzX2Zvcl9lYWNoX2RldigmcGNtY2lhX2J1c190eXBlLCBOVUxMLCBOVUxMLCBwY21jaWFfcmVxdWVyeV9jYWxsYmFjayk7CisKKwkvKiBpZiB0aGUgQ0lTIGNoYW5nZWQsIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgbnVtYmVyIG9mCisJICogZnVuY3Rpb25zIGNoYW5nZWQuICovCisJaWYgKHMtPmZha2VfY2lzKSB7CisJCWludCBvbGRfZnVuY3MsIG5ld19mdW5jczsKKwkJY2lzdHBsX2xvbmdsaW5rX21mY190IG1mYzsKKworCQkvKiBkb2VzIHRoaXMgY2lzIG92ZXJyaWRlIGFkZCBvciByZW1vdmUgZnVuY3Rpb25zPyAqLworCQlvbGRfZnVuY3MgPSBzLT5mdW5jdGlvbnM7CisKKwkJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX0xPTkdMSU5LX01GQywKKwkJCQkJJm1mYykpCisJCQluZXdfZnVuY3MgPSBtZmMubmZuOworCQllbHNlCisJCQluZXdfZnVuY3MgPSAxOworCQlpZiAob2xkX2Z1bmNzID4gbmV3X2Z1bmNzKSB7CisJCQlwY21jaWFfY2FyZF9yZW1vdmUocywgTlVMTCk7CisJCQlwY21jaWFfY2FyZF9hZGQocyk7CisJCX0gZWxzZSBpZiAobmV3X2Z1bmNzID4gb2xkX2Z1bmNzKSB7CisJCQlzLT5mdW5jdGlvbnMgPSBuZXdfZnVuY3M7CisJCQlwY21jaWFfZGV2aWNlX2FkZChzLCAxKTsKKwkJfQorCX0KKworCS8qIElmIHRoZSBQQ01DSUEgZGV2aWNlIGNvbnNpc3RzIG9mIHR3byBwc2V1ZG8gZGV2aWNlcywKKwkgKiBjYWxsIHBjbWNpYV9kZXZpY2VfYWRkKCkgLS0gd2hpY2ggd2lsbCBmYWlsIGlmIGJvdGgKKwkgKiBkZXZpY2VzIGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQuICovCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwloYXNfcGZjID0gcy0+cGNtY2lhX3N0YXRlLmhhc19wZmM7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCWlmIChoYXNfcGZjKQorCQlwY21jaWFfZGV2aWNlX2FkZChzLCAwKTsKIAogCS8qIHdlIHJlLXNjYW4gYWxsIGRldmljZXMsIG5vdCBqdXN0IHRoZSBvbmVzIGNvbm5lY3RlZCB0byB0aGlzCiAJICogc29ja2V0LiBUaGlzIGRvZXMgbm90IG1hdHRlciwgdGhvdWdoLiAqLwotCXJldCA9IGJ1c19yZXNjYW5fZGV2aWNlcygmcGNtY2lhX2J1c190eXBlKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IGJ1c19yZXNjYW5fZGV2aWNlcyBmYWlsZWRcbiIpOworCWlmIChidXNfcmVzY2FuX2RldmljZXMoJnBjbWNpYV9idXNfdHlwZSkpCisJCWRldl93YXJuKCZzLT5kZXYsICJyZXNjYW5uaW5nIHRoZSBidXMgZmFpbGVkXG4iKTsKIH0KIAorCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9MT0FEX0NJUwogCiAvKioKQEAgLTcxMCw5ICs3MjMsNiBAQAogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gZGV2LT5zb2NrZXQ7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAlpbnQgcmV0ID0gLUVOT01FTTsKLQlpbnQgbm9fZnVuY3M7Ci0JaW50IG9sZF9mdW5jczsKLQljaXN0cGxfbG9uZ2xpbmtfbWZjX3QgbWZjOwogCiAJaWYgKCFmaWxlbmFtZSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03MzksMTkgKzc0OSw4IEBACiAJCS8qIHVwZGF0ZSBpbmZvcm1hdGlvbiAqLwogCQlwY21jaWFfZGV2aWNlX3F1ZXJ5KGRldik7CiAKLQkJLyogZG9lcyB0aGlzIGNpcyBvdmVycmlkZSBhZGQgb3IgcmVtb3ZlIGZ1bmN0aW9ucz8gKi8KLQkJb2xkX2Z1bmNzID0gcy0+ZnVuY3Rpb25zOwotCi0JCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9MT05HTElOS19NRkMsICZtZmMpKQotCQkJbm9fZnVuY3MgPSBtZmMubmZuOwotCQllbHNlCi0JCQlub19mdW5jcyA9IDE7Ci0JCXMtPmZ1bmN0aW9ucyA9IG5vX2Z1bmNzOwotCi0JCWlmIChvbGRfZnVuY3MgPiBub19mdW5jcykKLQkJCXBjbWNpYV9jYXJkX3JlbW92ZShzLCBkZXYpOwotCQllbHNlIGlmIChub19mdW5jcyA+IG9sZF9mdW5jcykKLQkJCXBjbWNpYV9hZGRfZGV2aWNlX2xhdGVyKHMsIDEpOworCQkvKiByZXF1ZXJ5IChhcyBudW1iZXIgb2YgZnVuY3Rpb25zIG1pZ2h0IGhhdmUgY2hhbmdlZCkgKi8KKwkJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9SRVFVRVJZKTsKIAl9CiAgcmVsZWFzZToKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKQEAgLTgxOCw5ICs4MTcsMTQgQEAKIAlpZiAoZGlkLT5tYXRjaF9mbGFncyAmIFBDTUNJQV9ERVZfSURfTUFUQ0hfREVWSUNFX05PKSB7CiAJCWlmIChkZXYtPmRldmljZV9ubyAhPSBkaWQtPmRldmljZV9ubykKIAkJCXJldHVybiAwOworCQltdXRleF9sb2NrKCZkZXYtPnNvY2tldC0+b3BzX211dGV4KTsKKwkJZGV2LT5zb2NrZXQtPnBjbWNpYV9zdGF0ZS5oYXNfcGZjID0gMTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAl9CiAKIAlpZiAoZGlkLT5tYXRjaF9mbGFncyAmIFBDTUNJQV9ERVZfSURfTUFUQ0hfRlVOQ19JRCkgeworCQlpbnQgcmV0OworCiAJCWlmICgoIWRldi0+aGFzX2Z1bmNfaWQpIHx8IChkZXYtPmZ1bmNfaWQgIT0gZGlkLT5mdW5jX2lkKSkKIAkJCXJldHVybiAwOwogCkBAIC04MzUsMTAgKzgzOSwxNSBAQAogCQkgKiBhZnRlciBpdCBoYXMgcmUtY2hlY2tlZCB0aGF0IHRoZXJlIGlzIG5vIHBvc3NpYmxlIG1vZHVsZQogCQkgKiB3aXRoIGEgcHJvZF9pZC9tYW5mX2lkL2NhcmRfaWQgbWF0Y2guCiAJCSAqLwotCQlkZXZfZGJnKCZkZXYtPmRldiwKLQkJCSJza2lwcGluZyBGVU5DX0lEIG1hdGNoIHVudGlsIHVzZXJzcGFjZSBpbnRlcmFjdGlvblxuIik7Ci0JCWlmICghZGV2LT5hbGxvd19mdW5jX2lkX21hdGNoKQorCQltdXRleF9sb2NrKCZkZXYtPnNvY2tldC0+b3BzX211dGV4KTsKKwkJcmV0ID0gZGV2LT5hbGxvd19mdW5jX2lkX21hdGNoOworCQltdXRleF91bmxvY2soJmRldi0+c29ja2V0LT5vcHNfbXV0ZXgpOworCisJCWlmICghcmV0KSB7CisJCQlkZXZfZGJnKCZkZXYtPmRldiwKKwkJCQkic2tpcHBpbmcgRlVOQ19JRCBtYXRjaCB1bnRpbCB1c2Vyc3BhY2UgQUNLXG4iKTsKIAkJCXJldHVybiAwOworCQl9CiAJfQogCiAJaWYgKGRpZC0+bWF0Y2hfZmxhZ3MgJiBQQ01DSUFfREVWX0lEX01BVENIX0ZBS0VfQ0lTKSB7CkBAIC04NTksOCArODY4LDYgQEAKIAkJCXJldHVybiAwOwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGRpZCk7Ci0KIAlyZXR1cm4gMTsKIH0KIApAQCAtODczLDE2ICs4ODAsMTYgQEAKIAlzdHJ1Y3QgcGNtY2lhX2R5bmlkICpkeW5pZDsKIAogCS8qIG1hdGNoIGR5bmFtaWMgZGV2aWNlcyBmaXJzdCAqLwotCXNwaW5fbG9jaygmcF9kcnYtPmR5bmlkcy5sb2NrKTsKKwltdXRleF9sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHluaWQsICZwX2Rydi0+ZHluaWRzLmxpc3QsIG5vZGUpIHsKIAkJZGV2X2RiZyhkZXYsICJ0cnlpbmcgdG8gbWF0Y2ggdG8gJXNcbiIsIGRydi0+bmFtZSk7CiAJCWlmIChwY21jaWFfZGV2bWF0Y2gocF9kZXYsICZkeW5pZC0+aWQpKSB7CiAJCQlkZXZfZGJnKGRldiwgIm1hdGNoZWQgdG8gJXNcbiIsIGRydi0+bmFtZSk7Ci0JCQlzcGluX3VubG9jaygmcF9kcnYtPmR5bmlkcy5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmcF9kcnYtPmR5bmlkcy5sb2NrKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOworCW11dGV4X3VubG9jaygmcF9kcnYtPmR5bmlkcy5sb2NrKTsKIAogI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKIAkvKiBtYXRjaGluZyBieSBjYXJkbWdyICovCkBAIC05NzAsMTMgKzk3NywxNCBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaW50IHJjOwogCiAJZG93bigmZGV2LT5zZW0pOwogCXJjID0gcGNtY2lhX2Rldl9yZXN1bWUoZGV2KTsKIAl1cCgmZGV2LT5zZW0pOworCXJldHVybiByYzsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKiBwZXItZGV2aWNlIHN5c2ZzIG91dHB1dCAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMDI3LDcgKzEwMzUsNyBAQAogCWlmICgoIXBfZGV2LT5zdXNwZW5kZWQpICYmICFzdHJuY21wKGJ1ZiwgIm9mZiIsIDMpKQogCQlyZXQgPSBydW50aW1lX3N1c3BlbmQoZGV2KTsKIAllbHNlIGlmIChwX2Rldi0+c3VzcGVuZGVkICYmICFzdHJuY21wKGJ1ZiwgIm9uIiwgMikpCi0JCXJ1bnRpbWVfcmVzdW1lKGRldik7CisJCXJldCA9IHJ1bnRpbWVfcmVzdW1lKGRldik7CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CiB9CkBAIC0xMDU5LDE5ICsxMDY3LDE0IEBACiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7Ci0JaW50IHJldDsKIAogCWlmICghY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+c2t0X211dGV4KTsKKwltdXRleF9sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCXBfZGV2LT5hbGxvd19mdW5jX2lkX21hdGNoID0gMTsKLQltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPnNrdF9tdXRleCk7Ci0KLQlyZXQgPSBidXNfcmVzY2FuX2RldmljZXMoJnBjbWNpYV9idXNfdHlwZSk7Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBidXNfcmVzY2FuX2RldmljZXMgZmFpbGVkIGFmdGVyICIKLQkJICAgICAgICJhbGxvd2luZyBmdW5jX2lkIG1hdGNoZXNcbiIpOworCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKKwlwY21jaWFfcGFyc2VfdWV2ZW50cyhwX2Rldi0+c29ja2V0LCBQQ01DSUFfVUVWRU5UX1JFUVVFUlkpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMTA5OSw4ICsxMTAyLDEzIEBACiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2ID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChwX2Rldi0+c3VzcGVuZGVkKQorCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CisJaWYgKHBfZGV2LT5zdXNwZW5kZWQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gMDsKKwl9CisJcF9kZXYtPnN1c3BlbmRlZCA9IDE7CisJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCiAJZGV2X2RiZyhkZXYsICJzdXNwZW5kaW5nXG4iKTsKIApAQCAtMTExNyw2ICsxMTI1LDkgQEAKIAkJCQkgICAicGNtY2lhOiBkZXZpY2UgJXMgKGRyaXZlciAlcykgZGlkICIKIAkJCQkgICAibm90IHdhbnQgdG8gZ28gdG8gc2xlZXAgKCVkKVxuIiwKIAkJCQkgICBwX2Rldi0+ZGV2bmFtZSwgcF9kcnYtPmRydi5uYW1lLCByZXQpOworCQkJbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKKwkJCXBfZGV2LT5zdXNwZW5kZWQgPSAwOworCQkJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC0xMTI3LDggKzExMzgsNiBAQAogCX0KIAogIG91dDoKLQlpZiAoIXJldCkKLQkJcF9kZXYtPnN1c3BlbmRlZCA9IDE7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTEzOSw4ICsxMTQ4LDEzIEBACiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2ID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghcF9kZXYtPnN1c3BlbmRlZCkKKwltdXRleF9sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOworCWlmICghcF9kZXYtPnN1c3BlbmRlZCkgeworCQltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCXJldHVybiAwOworCX0KKwlwX2Rldi0+c3VzcGVuZGVkID0gMDsKKwltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAKIAlkZXZfZGJnKGRldiwgInJlc3VtaW5nXG4iKTsKIApAQCAtMTE2MSw4ICsxMTc1LDYgQEAKIAkJcmV0ID0gcF9kcnYtPnJlc3VtZShwX2Rldik7CiAKICBvdXQ6Ci0JaWYgKCFyZXQpCi0JCXBfZGV2LT5zdXNwZW5kZWQgPSAwOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyMzcsMTMgKzEyNDksMjIgQEAKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIENTX0VWRU5UX0NBUkRfUkVNT1ZBTDoKKwkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAkJcy0+cGNtY2lhX3N0YXRlLnByZXNlbnQgPSAwOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXBjbWNpYV9jYXJkX3JlbW92ZShza3QsIE5VTEwpOwogCQloYW5kbGVfZXZlbnQoc2t0LCBldmVudCk7CisJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJCWRlc3Ryb3lfY2lzX2NhY2hlKHMpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCWJyZWFrOwogCiAJY2FzZSBDU19FVkVOVF9DQVJEX0lOU0VSVElPTjoKKwkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwkJcy0+cGNtY2lhX3N0YXRlLmhhc19wZmMgPSAwOwogCQlzLT5wY21jaWFfc3RhdGUucHJlc2VudCA9IDE7CisJCWRlc3Ryb3lfY2lzX2NhY2hlKHMpOyAvKiB0byBiZSBvbiB0aGUgc2FmZSBzaWRlLi4uICovCisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcGNtY2lhX2NhcmRfYWRkKHNrdCk7CiAJCWhhbmRsZV9ldmVudChza3QsIGV2ZW50KTsKIAkJYnJlYWs7CkBAIC0xMjUxLDggKzEyNzIsMjQgQEAKIAljYXNlIENTX0VWRU5UX0VKRUNUSU9OX1JFUVVFU1Q6CiAJCWJyZWFrOwogCi0JY2FzZSBDU19FVkVOVF9QTV9TVVNQRU5EOgogCWNhc2UgQ1NfRVZFTlRfUE1fUkVTVU1FOgorCQlpZiAodmVyaWZ5X2Npc19jYWNoZShza3QpICE9IDApIHsKKwkJCWRldl9kYmcoJnNrdC0+ZGV2LCAiY2lzIG1pc21hdGNoIC0gZGlmZmVyZW50IGNhcmRcbiIpOworCQkJLyogZmlyc3QsIHJlbW92ZSB0aGUgY2FyZCAqLworCQkJZHNfZXZlbnQoc2t0LCBDU19FVkVOVF9DQVJEX1JFTU9WQUwsIENTX0VWRU5UX1BSSV9ISUdIKTsKKwkJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJCQlkZXN0cm95X2Npc19jYWNoZShza3QpOworCQkJa2ZyZWUoc2t0LT5mYWtlX2Npcyk7CisJCQlza3QtPmZha2VfY2lzID0gTlVMTDsKKwkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwkJCS8qIG5vdywgYWRkIHRoZSBuZXcgY2FyZCAqLworCQkJZHNfZXZlbnQoc2t0LCBDU19FVkVOVF9DQVJEX0lOU0VSVElPTiwKKwkJCQkgQ1NfRVZFTlRfUFJJX0xPVyk7CisJCX0KKwkJaGFuZGxlX2V2ZW50KHNrdCwgZXZlbnQpOworCQlicmVhazsKKworCWNhc2UgQ1NfRVZFTlRfUE1fU1VTUEVORDoKIAljYXNlIENTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMOgogCWNhc2UgQ1NfRVZFTlRfQ0FSRF9SRVNFVDoKIAlkZWZhdWx0OgpAQCAtMTI3NSw5ICsxMzEyLDEzIEBACiAJaWYgKCFwX2RldikKIAkJcmV0dXJuIE5VTEw7CiAKKwltdXRleF9sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCWlmICghcF9kZXYtPnNvY2tldC0+cGNtY2lhX3N0YXRlLnByZXNlbnQpCiAJCWdvdG8gb3V0OwogCisJaWYgKHBfZGV2LT5zb2NrZXQtPnBjbWNpYV9zdGF0ZS5kZWFkKQorCQlnb3RvIG91dDsKKwogCWlmIChwX2Rldi0+X3JlbW92ZWQpCiAJCWdvdG8gb3V0OwogCkBAIC0xMjg2LDYgKzEzMjcsNyBAQAogCiAJcmV0ID0gcF9kZXY7CiAgb3V0OgorCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAlwY21jaWFfcHV0X2RldihwX2Rldik7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyOTUsNyArMTMzNyw4IEBACiBzdGF0aWMgc3RydWN0IHBjbWNpYV9jYWxsYmFjayBwY21jaWFfYnVzX2NhbGxiYWNrID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5ldmVudCA9IGRzX2V2ZW50LAotCS5yZXF1ZXJ5ID0gcGNtY2lhX2J1c19yZXNjYW4sCisJLnJlcXVlcnkgPSBwY21jaWFfcmVxdWVyeSwKKwkudmFsaWRhdGUgPSBwY2NhcmRfdmFsaWRhdGVfY2lzLAogCS5zdXNwZW5kID0gcGNtY2lhX2J1c19zdXNwZW5kLAogCS5yZXN1bWUgPSBwY21jaWFfYnVzX3Jlc3VtZSwKIH07CkBAIC0xMzEzLDE3ICsxMzU2LDE3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qCi0JICogVWdseS4gQnV0IHdlIHdhbnQgdG8gd2FpdCBmb3IgdGhlIHNvY2tldCB0aHJlYWRzIHRvIGhhdmUgc3RhcnRlZCB1cC4KLQkgKiBXZSByZWFsbHkgc2hvdWxkIGxldCB0aGUgZHJpdmVycyB0aGVtc2VsdmVzIGRyaXZlIHNvbWUgb2YgdGhpcy4uCi0JICovCi0JbXNsZWVwKDI1MCk7CisJcmV0ID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZkZXYtPmtvYmosICZwY2NhcmRfY2lzX2F0dHIpOworCWlmIChyZXQpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgZGV2LCAiUENNQ0lBIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCQlwY21jaWFfcHV0X3NvY2tldChzb2NrZXQpOworCQlyZXR1cm4gcmV0OworCX0KIAogI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzb2NrZXQtPnF1ZXVlKTsKICNlbmRpZgogCUlOSVRfTElTVF9IRUFEKCZzb2NrZXQtPmRldmljZXNfbGlzdCk7Ci0JSU5JVF9XT1JLKCZzb2NrZXQtPmRldmljZV9hZGQsIHBjbWNpYV9kZWxheWVkX2FkZF9kZXZpY2UpOwogCW1lbXNldCgmc29ja2V0LT5wY21jaWFfc3RhdGUsIDAsIHNpemVvZih1OCkpOwogCXNvY2tldC0+ZGV2aWNlX2NvdW50ID0gMDsKIApAQCAtMTM0NSwxNCArMTM4OCwyMCBAQAogCWlmICghc29ja2V0KQogCQlyZXR1cm47CiAKKwltdXRleF9sb2NrKCZzb2NrZXQtPm9wc19tdXRleCk7CiAJc29ja2V0LT5wY21jaWFfc3RhdGUuZGVhZCA9IDE7CisJbXV0ZXhfdW5sb2NrKCZzb2NrZXQtPm9wc19tdXRleCk7CisKIAlwY2NhcmRfcmVnaXN0ZXJfcGNtY2lhKHNvY2tldCwgTlVMTCk7CiAKIAkvKiB1bnJlZ2lzdGVyIGFueSB1bmJvdW5kIGRldmljZXMgKi8KIAltdXRleF9sb2NrKCZzb2NrZXQtPnNrdF9tdXRleCk7CiAJcGNtY2lhX2NhcmRfcmVtb3ZlKHNvY2tldCwgTlVMTCk7CisJcmVsZWFzZV9jaXNfbWVtKHNvY2tldCk7CiAJbXV0ZXhfdW5sb2NrKCZzb2NrZXQtPnNrdF9tdXRleCk7CiAKKwlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmRldi0+a29iaiwgJnBjY2FyZF9jaXNfYXR0cik7CisKIAlwY21jaWFfcHV0X3NvY2tldChzb2NrZXQpOwogCiAJcmV0dXJuOwpAQCAtMTM4Myw4ICsxNDMyLDYgQEAKIHsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrX2luaXQoJnBjbWNpYV9kZXZfbGlzdF9sb2NrKTsKLQogCXJldCA9IGJ1c19yZWdpc3RlcigmcGNtY2lhX2J1c190eXBlKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJwY21jaWE6IGJ1c19yZWdpc3RlciBlcnJvcjogJWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9lbGVjdHJhX2NmLmMgYi9kcml2ZXJzL3BjbWNpYS9lbGVjdHJhX2NmLmMKaW5kZXggZDE4N2JhNC4uODljZmRkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2VsZWN0cmFfY2YuYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVsZWN0cmFfY2ZfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVsZWN0cmFfY2ZfbWF0Y2hbXSA9IHsKIAl7CiAJCS5jb21wYXRpYmxlICAgPSAiZWxlY3RyYS1jZiIsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5oIGIvZHJpdmVycy9wY21jaWEvaTgyMzY1LmgKaW5kZXggNjIyODYwYy4uODQ5ZWYxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmgKKysrIGIvZHJpdmVycy9wY21jaWEvaTgyMzY1LmgKQEAgLTc3LDggKzc3LDggQEAKICNkZWZpbmUgSTM2NV9WUFAyXzVWCTB4MDQJLyogVnBwMiA9IDUuMHYgKi8KICNkZWZpbmUgSTM2NV9WUFAyXzEyVgkweDA4CS8qIFZwcDIgPSAxMi4wdiAqLwogI2RlZmluZSBJMzY1X1ZQUDFfTUFTSwkweDAzCS8qIE1hc2sgZm9yIHR1cm5pbmcgb2ZmIFZwcDEgKi8KLSNkZWZpbmUgSTM2NV9WUFAxXzVWCTB4MDEJLyogVnBwMiA9IDUuMHYgKi8KLSNkZWZpbmUgSTM2NV9WUFAxXzEyVgkweDAyCS8qIFZwcDIgPSAxMi4wdiAqLworI2RlZmluZSBJMzY1X1ZQUDFfNVYJMHgwMQkvKiBWcHAxID0gNS4wdiAqLworI2RlZmluZSBJMzY1X1ZQUDFfMTJWCTB4MDIJLyogVnBwMSA9IDEyLjB2ICovCiAKIC8qIEZsYWdzIGZvciBJMzY1X0lOVENUTCAqLwogI2RlZmluZSBJMzY1X1JJTkdfRU5BCTB4ODAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCmluZGV4IDI2YTYyMWMuLjBlY2UyY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwpAQCAtNzY0LDcgKzc2NCw3IEBACiAJZm9yIChpID0gMCA7IGkgPCBwY2Nfc29ja2V0cyA7IGkrKykgewogCQlzb2NrZXRbaV0uc29ja2V0LmRldi5wYXJlbnQgPSAmcGNjX2RldmljZS5kZXY7CiAJCXNvY2tldFtpXS5zb2NrZXQub3BzID0gJnBjY19vcGVyYXRpb25zOwotCQlzb2NrZXRbaV0uc29ja2V0LnJlc291cmNlX29wcyA9ICZwY2NhcmRfbm9uc3RhdGljX29wczsKKwkJc29ja2V0W2ldLnNvY2tldC5yZXNvdXJjZV9vcHMgPSAmcGNjYXJkX3N0YXRpY19vcHM7CiAJCXNvY2tldFtpXS5zb2NrZXQub3duZXIgPSBUSElTX01PRFVMRTsKIAkJc29ja2V0W2ldLm51bWJlciA9IGk7CiAJCXJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoJnNvY2tldFtpXS5zb2NrZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKaW5kZXggN2Y3OWM0ZS4uNjFjMjE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCkBAIC0xMjMzLDcgKzEyMzMsNyBAQAogCQlzb2NrZXRbaV0uc29ja2V0LmlvX29mZnNldCA9IDA7CiAJCXNvY2tldFtpXS5zb2NrZXQucGNpX2lycSA9IHBjbWNpYV9zY2hsdmw7CiAJCXNvY2tldFtpXS5zb2NrZXQub3BzID0gJm04eHhfc2VydmljZXM7Ci0JCXNvY2tldFtpXS5zb2NrZXQucmVzb3VyY2Vfb3BzID0gJnBjY2FyZF9ub25zdGF0aWNfb3BzOworCQlzb2NrZXRbaV0uc29ja2V0LnJlc291cmNlX29wcyA9ICZwY2NhcmRfaW9keW5fb3BzOwogCQlzb2NrZXRbaV0uc29ja2V0LmNiX2RldiA9IE5VTEw7CiAJCXNvY2tldFtpXS5zb2NrZXQuZGV2LnBhcmVudCA9ICZvZmRldi0+ZGV2OwogCQlzb2NrZXRbaV0ucGNtY2lhID0gcGNtY2lhOwpAQCAtMTMwMyw3ICsxMzAzLDcgQEAKICNkZWZpbmUgbTh4eF9yZXN1bWUgTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG04eHhfcGNtY2lhX21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtOHh4X3BjbWNpYV9tYXRjaFtdID0gewogCXsKIAkgLnR5cGUgPSAicGNtY2lhIiwKIAkgLmNvbXBhdGlibGUgPSAiZnNsLHBxLXBjbWNpYSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9vMm1pY3JvLmggYi9kcml2ZXJzL3BjbWNpYS9vMm1pY3JvLmgKaW5kZXggNjI0NDQyZi4uZTc0YmViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbzJtaWNyby5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL28ybWljcm8uaApAQCAtMTE2LDEzICsxMTYsMTIgQEAKIAkgKiBmcm9tIEVyaWMgU3RpbGwsIDAyTWljcm8uCiAJICovCiAJdTggYSwgYjsKKwlib29sIHVzZV9zcGVlZHVwOwogCiAJaWYgKFBDSV9GVU5DKHNvY2tldC0+ZGV2LT5kZXZmbikgPT0gMCkgewogCQlhID0gY29uZmlnX3JlYWRiKHNvY2tldCwgTzJfUkVTRVJWRUQxKTsKIAkJYiA9IGNvbmZpZ19yZWFkYihzb2NrZXQsIE8yX1JFU0VSVkVEMik7Ci0KLQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzb2NrZXQtPmRldi0+ZGV2LAotCQkJICAgIk8yOiByZXMgYXQgMHg5NC8weEQ0OiAlMDJ4LyUwMnhcbiIsIGEsIGIpOworCQlkZXZfZGJnKCZzb2NrZXQtPmRldi0+ZGV2LCAiTzI6IDB4OTQvMHhENDogJTAyeC8lMDJ4XG4iLCBhLCBiKTsKIAogCQlzd2l0Y2ggKHNvY2tldC0+ZGV2LT5kZXZpY2UpIHsKIAkJLyoKQEAgLTEzNSwyMyArMTM0LDM3IEBACiAJCWNhc2UgUENJX0RFVklDRV9JRF9PMl82ODEyOgogCQljYXNlIFBDSV9ERVZJQ0VfSURfTzJfNjgzMjoKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX08yXzY4MzY6Ci0gCQljYXNlIFBDSV9ERVZJQ0VfSURfTzJfNjkzMzoKLQkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKLQkJCQkgICAiWWVudGEgTzI6IG9sZCBicmlkZ2UsIGRpc2FibGluZyByZWFkICIKLQkJCQkgICAicHJlZmV0Y2gvd3JpdGUgYnVyc3RcbiIpOwotCQkJY29uZmlnX3dyaXRlYihzb2NrZXQsIE8yX1JFU0VSVkVEMSwKLQkJCSAgICAgICAgICAgICAgYSAmIH4oTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpKTsKLQkJCWNvbmZpZ193cml0ZWIoc29ja2V0LCBPMl9SRVNFUlZFRDIsCi0JCQkgICAgICAgICAgICAgIGIgJiB+KE8yX1JFU19SRUFEX1BSRUZFVENIIHwgTzJfUkVTX1dSSVRFX0JVUlNUKSk7CisJCWNhc2UgUENJX0RFVklDRV9JRF9PMl82OTMzOgorCQkJdXNlX3NwZWVkdXAgPSBmYWxzZTsKIAkJCWJyZWFrOwotCiAJCWRlZmF1bHQ6Ci0JCQlkZXZfcHJpbnRrKEtFUk5fSU5GTyAsICZzb2NrZXQtPmRldi0+ZGV2LAotCQkJCSAgICJPMjogZW5hYmxpbmcgcmVhZCBwcmVmZXRjaC93cml0ZSBidXJzdFxuIik7CisJCQl1c2Vfc3BlZWR1cCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCisJCS8qIHRoZSB1c2VyIG1heSBvdmVycmlkZSBvdXIgZGVjaXNpb24gKi8KKwkJaWYgKHN0cmNhc2VjbXAobzJfc3BlZWR1cCwgIm9uIikgPT0gMCkKKwkJCXVzZV9zcGVlZHVwID0gdHJ1ZTsKKwkJZWxzZSBpZiAoc3RyY2FzZWNtcChvMl9zcGVlZHVwLCAib2ZmIikgPT0gMCkKKwkJCXVzZV9zcGVlZHVwID0gZmFsc2U7CisJCWVsc2UgaWYgKHN0cmNhc2VjbXAobzJfc3BlZWR1cCwgImRlZmF1bHQiKSAhPSAwKQorCQkJZGV2X3dhcm4oJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkJIk8yOiBVbmtub3duIHBhcmFtZXRlciwgdXNpbmcgJ2RlZmF1bHQnIik7CisKKwkJaWYgKHVzZV9zcGVlZHVwKSB7CisJCQlkZXZfaW5mbygmc29ja2V0LT5kZXYtPmRldiwKKwkJCQkiTzI6IGVuYWJsaW5nIHJlYWQgcHJlZmV0Y2gvd3JpdGUgYnVyc3RcbiIpOwogCQkJY29uZmlnX3dyaXRlYihzb2NrZXQsIE8yX1JFU0VSVkVEMSwKLQkJCSAgICAgICAgICAgICAgYSB8IE8yX1JFU19SRUFEX1BSRUZFVENIIHwgTzJfUkVTX1dSSVRFX0JVUlNUKTsKKwkJCQkgICAgICBhIHwgTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpOwogCQkJY29uZmlnX3dyaXRlYihzb2NrZXQsIE8yX1JFU0VSVkVEMiwKLQkJCSAgICAgICAgICAgICAgYiB8IE8yX1JFU19SRUFEX1BSRUZFVENIIHwgTzJfUkVTX1dSSVRFX0JVUlNUKTsKKwkJCQkgICAgICBiIHwgTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpOworCQl9IGVsc2UgeworCQkJZGV2X2luZm8oJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkJIk8yOiBkaXNhYmxpbmcgcmVhZCBwcmVmZXRjaC93cml0ZSBidXJzdFxuIik7CisJCQljb25maWdfd3JpdGViKHNvY2tldCwgTzJfUkVTRVJWRUQxLAorCQkJCSAgICAgIGEgJiB+KE8yX1JFU19SRUFEX1BSRUZFVENIIHwgTzJfUkVTX1dSSVRFX0JVUlNUKSk7CisJCQljb25maWdfd3JpdGViKHNvY2tldCwgTzJfUkVTRVJWRUQyLAorCQkJCSAgICAgIGIgJiB+KE8yX1JFU19SRUFEX1BSRUZFVENIIHwgTzJfUkVTX1dSSVRFX0JVUlNUKSk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYyBiL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYwppbmRleCA2NjM3ODFkLi4zZWY5OTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCkBAIC03MSw4ICs3MSw2IEBACiAKICNkZWZpbmUJUE9MTF9JTlRFUlZBTAkJKDIgKiBIWikKIAotI2RlZmluZQlTWl8ySwkJCSgyICogU1pfMUspCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IG9tYXBfY2Zfc3NfaW5pdChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKaW5kZXggZjczZmQ1Yi4uMTNhNzEzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKQEAgLTYyLDE2ICs2MiwxNSBAQAogCQkJCQkJdW5zaWduZWQgaW50IGZ1bmN0aW9uKQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwX2RldiwgJnMtPmRldmljZXNfbGlzdCwgc29ja2V0X2RldmljZV9saXN0KSB7CiAJCWlmIChwX2Rldi0+ZnVuYyA9PSBmdW5jdGlvbikgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCXJldHVybiBwY21jaWFfZ2V0X2RldihwX2Rldik7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE2OSw3ICsxNjgsNiBAQAogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwogCWludCByZXQgPSAtRU5PU1lTOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkb3duX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmcGNtY2lhX3NvY2tldF9saXN0LCBzb2NrZXRfbGlzdCkgewpAQCAtMTgyLDE0ICsxODAsMTMgQEAKIAogCQkJLyogeW91IGNhbid0IHVzZSB0aGUgb2xkIGludGVyZmFjZSBpZiB0aGUgbmV3CiAJCQkgKiBvbmUgd2FzIHVzZWQgYmVmb3JlICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOworCQkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAkJCWlmICgocy0+cmVzb3VyY2Vfc2V0dXBfbmV3KSAmJgogCQkJICAgICEocy0+cmVzb3VyY2Vfc2V0dXBfb2xkKSkgewotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKKwkJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UgaWYgKCEocy0+cmVzb3VyY2Vfc2V0dXBfb2xkKSkKIAkJCQlzLT5yZXNvdXJjZV9zZXR1cF9vbGQgPSAxOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCiAJCQlzd2l0Y2ggKGFkai0+UmVzb3VyY2UpIHsKIAkJCWNhc2UgUkVTX01FTU9SWV9SQU5HRToKQEAgLTIwOCwxMCArMjA1LDkgQEAKIAkJCQkgKiBsYXN0IGNhbGwgdG8gYWRqdXN0X3Jlc291cmNlX2luZm8sIHdlCiAJCQkJICogYWx3YXlzIG5lZWQgdG8gYXNzdW1lIHRoaXMgaXMgdGhlIGxhdGVzdAogCQkJCSAqIG9uZS4uLiAqLwotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAJCQkJcy0+cmVzb3VyY2Vfc2V0dXBfZG9uZSA9IDE7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQl9CiAJfQogCXVwX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7CkBAIC00NzAsNyArNDY2LDYgQEAKIAlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnY7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OwogCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzID0gcGNtY2lhX2dldF9zb2NrZXQocyk7CiAJaWYgKCFzKQpAQCAtNDkwLDcgKzQ4NSw3IEBACiAJCWdvdG8gZXJyX3B1dF9kcml2ZXI7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBfZGV2LCAmcy0+ZGV2aWNlc19saXN0LCBzb2NrZXRfZGV2aWNlX2xpc3QpIHsKIAkJaWYgKHBfZGV2LT5mdW5jID09IGJpbmRfaW5mby0+ZnVuY3Rpb24pIHsKIAkJCWlmICgocF9kZXYtPmRldi5kcml2ZXIgPT0gJnBfZHJ2LT5kcnYpKSB7CkBAIC00OTksNyArNDk0LDcgQEAKIAkJCQkJICogcmVnaXN0ZXJlZCwgYW5kIGl0IHdhcyByZWdpc3RlcmVkCiAJCQkJCSAqIGJ5IHVzZXJzcGFjZSBiZWZvcmUsIHdlIG5lZWQgdG8KIAkJCQkJICogcmV0dXJuIHRoZSAiaW5zdGFuY2UiLiAqLwotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCQkJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCQkJCWJpbmRfaW5mby0+aW5zdGFuY2UgPSBwX2RldjsKIAkJCQkJcmV0ID0gLUVCVVNZOwogCQkJCQlnb3RvIGVycl9wdXRfbW9kdWxlOwpAQCAtNTA3LDcgKzUwMiw3IEBACiAJCQkJCS8qIHRoZSBjb3JyZWN0IGRyaXZlciBtYW5hZ2VkIHRvIGJpbmQKIAkJCQkJICogaXRzZWxmIG1hZ2ljYWxseSB0byB0aGUgY29ycmVjdAogCQkJCQkgKiBkZXZpY2UuICovCi0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJCQkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCQkJcF9kZXYtPmNhcmRtZ3IgPSBwX2RydjsKIAkJCQkJcmV0ID0gMDsKIAkJCQkJZ290byBlcnJfcHV0X21vZHVsZTsKQEAgLTUxNiwxMiArNTExLDEyIEBACiAJCQkJLyogdGhlcmUncyBhbHJlYWR5IGEgZGV2aWNlIGF2YWlsYWJsZSB3aGVyZQogCQkJCSAqIG5vIGRldmljZSBoYXMgYmVlbiBib3VuZCB0byB5ZXQuIFNvIHdlIGRvbid0CiAJCQkJICogbmVlZCB0byByZWdpc3RlciBhIGRldmljZSEgKi8KLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCQkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCQlnb3RvIHJlc2NhbjsKIAkJCX0KIAkJfQogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCXBfZGV2ID0gcGNtY2lhX2RldmljZV9hZGQocywgYmluZF9pbmZvLT5mdW5jdGlvbik7CiAJaWYgKCFwX2RldikgewpAQCAtNTc4LDcgKzU3Myw2IEBACiAJZGV2X25vZGVfdCAqbm9kZTsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBDT05GSUdfQ0FSREJVUwpAQCAtNjE3LDcgKzYxMSw3IEBACiAJfQogI2VuZGlmCiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocF9kZXYsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkgewogCQlpZiAocF9kZXYtPmZ1bmMgPT0gYmluZF9pbmZvLT5mdW5jdGlvbikgewogCQkJcF9kZXYgPSBwY21jaWFfZ2V0X2RldihwX2Rldik7CkBAIC02MjYsMTEgKzYyMCwxMSBAQAogCQkJZ290byBmb3VuZDsKIAkJfQogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAlyZXR1cm4gLUVOT0RFVjsKIAogIGZvdW5kOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcF9kcnYgPSB0b19wY21jaWFfZHJ2KHBfZGV2LT5kZXYuZHJpdmVyKTsKIAlpZiAocF9kcnYgJiYgIXBfZGV2LT5fbG9ja2VkKSB7CkBAIC05MzEsMTYgKzkyNSwxNiBAQAogCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJmJ1Zi0+Y2lzaW5mby5DaGFpbnMpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfU1VTUEVORF9DQVJEOgotCXJldCA9IHBjbWNpYV9zdXNwZW5kX2NhcmQocyk7CisJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9TVVNQRU5EKTsKIAlicmVhazsKICAgICBjYXNlIERTX1JFU1VNRV9DQVJEOgotCXJldCA9IHBjbWNpYV9yZXN1bWVfY2FyZChzKTsKKwlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1JFU1VNRSk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19FSkVDVF9DQVJEOgotCWVyciA9IHBjbWNpYV9lamVjdF9jYXJkKHMpOworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfRUpFQ1QpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfSU5TRVJUX0NBUkQ6Ci0JZXJyID0gcGNtY2lhX2luc2VydF9jYXJkKHMpOworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfSU5TRVJUKTsKIAlicmVhazsKICAgICBjYXNlIERTX0FDQ0VTU19DT05GSUdVUkFUSU9OX1JFR0lTVEVSOgogCWlmICgoYnVmLT5jb25mX3JlZy5BY3Rpb24gPT0gQ1NfV1JJVEUpICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCmluZGV4IGQ1ZGI5NTYuLmIyZGYwNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCkBAIC00Myw2ICs0MywzOSBAQAogc3RhdGljIHU4IHBjbWNpYV91c2VkX2lycVtOUl9JUlFTXTsKICNlbmRpZgogCitzdGF0aWMgaW50IHBjbWNpYV9hZGp1c3RfaW9fcmVnaW9uKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKK3sKKwlpZiAocy0+cmVzb3VyY2Vfb3BzLT5hZGp1c3RfaW9fcmVnaW9uKQorCQlyZXR1cm4gcy0+cmVzb3VyY2Vfb3BzLT5hZGp1c3RfaW9fcmVnaW9uKHJlcywgc3RhcnQsIGVuZCwgcyk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKnBjbWNpYV9maW5kX2lvX3JlZ2lvbih1bnNpZ25lZCBsb25nIGJhc2UsIGludCBudW0sCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkJCSAgICAgIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQoreworCWlmIChzLT5yZXNvdXJjZV9vcHMtPmZpbmRfaW8pCisJCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPmZpbmRfaW8oYmFzZSwgbnVtLCBhbGlnbiwgcyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBwY21jaWFfdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQoreworCWlmIChzLT5yZXNvdXJjZV9vcHMtPnZhbGlkYXRlX21lbSkKKwkJcmV0dXJuIHMtPnJlc291cmNlX29wcy0+dmFsaWRhdGVfbWVtKHMpOworCS8qIGlmIHRoZXJlIGlzIG5vIGNhbGxiYWNrLCB3ZSBjYW4gYXNzdW1lIHRoYXQgZXZlcnl0aGluZyBpcyBPSyAqLworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcmVzb3VyY2UgKnBjbWNpYV9maW5kX21lbV9yZWdpb24odV9sb25nIGJhc2UsIHVfbG9uZyBudW0sIHVfbG9uZyBhbGlnbiwKKwkJCQkgaW50IGxvdywgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCit7CisJaWYgKHMtPnJlc291cmNlX29wcy0+ZmluZF9tZW0pCisJCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPmZpbmRfbWVtKGJhc2UsIG51bSwgYWxpZ24sIGxvdywgcyk7CisJcmV0dXJuIE5VTEw7Cit9CisKIAogLyoqIGFsbG9jX2lvX3NwYWNlCiAgKgpAQCAtMTU4LDE0ICsxOTEsMTggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzID0gcF9kZXYtPnNvY2tldDsKKworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKIAlpZiAoIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIkNvbmZpZ3VyYXRpb24gaXNudCd0IGxvY2tlZFxuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCiAJYWRkciA9IChjLT5Db25maWdCYXNlICsgcmVnLT5PZmZzZXQpID4+IDE7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJc3dpdGNoIChyZWctPkFjdGlvbikgewogCWNhc2UgQ1NfUkVBRDoKQEAgLTE5MCw2ICsyMjcsNyBAQAogCQkJbWVtcmVxX3QgKnJlcSkKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7CisJaW50IHJldDsKIAogCXdoLS07CiAJaWYgKHdoID49IE1BWF9XSU4pCkBAIC0xOTgsMTIgKzIzNiwxMyBAQAogCQlkZXZfZGJnKCZzLT5kZXYsICJmYWlsdXJlOiByZXF1ZXN0ZWQgcGFnZSBpcyB6ZXJvXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJcy0+d2luW3doXS5jYXJkX3N0YXJ0ID0gcmVxLT5DYXJkT2Zmc2V0OwotCWlmIChzLT5vcHMtPnNldF9tZW1fbWFwKHMsICZzLT53aW5bd2hdKSAhPSAwKSB7Ci0JCWRldl9kYmcoJnMtPmRldiwgImZhaWxlZCB0byBzZXRfbWVtX21hcFxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlyZXR1cm4gMDsKKwlyZXQgPSBzLT5vcHMtPnNldF9tZW1fbWFwKHMsICZzLT53aW5bd2hdKTsKKwlpZiAocmV0KQorCQlkZXZfd2Fybigmcy0+ZGV2LCAiZmFpbGVkIHRvIHNldF9tZW1fbWFwXG4iKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJcmV0dXJuIHJldDsKIH0gLyogcGNtY2lhX21hcF9tZW1fcGFnZSAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfbWFwX21lbV9wYWdlKTsKIApAQCAtMjE5LDE0ICsyNTgsMTggQEAKIAljb25maWdfdCAqYzsKIAogCXMgPSBwX2Rldi0+c29ja2V0OworCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAogCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIk5vIGNhcmQgcHJlc2VudFxuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmICghKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpc250J3QgbG9ja2VkXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CiAKQEAgLTI1MSwxMCArMjk0LDEyIEBACiAJICAgIChtb2QtPkF0dHJpYnV0ZXMgJiBDT05GX1ZQUDJfQ0hBTkdFX1ZBTElEKSkgewogCQlpZiAobW9kLT5WcHAxICE9IG1vZC0+VnBwMikgewogCQkJZGV2X2RiZygmcy0+ZGV2LCAiVnBwMSBhbmQgVnBwMiBtdXN0IGJlIHRoZSBzYW1lXG4iKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXMtPnNvY2tldC5WcHAgPSBtb2QtPlZwcDE7CiAJCWlmIChzLT5vcHMtPnNldF9zb2NrZXQocywgJnMtPnNvY2tldCkpIHsKKwkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LAogCQkJCSAgICJVbmFibGUgdG8gc2V0IFZQUFxuIik7CiAJCQlyZXR1cm4gLUVJTzsKQEAgLTI2Miw2ICszMDcsNyBAQAogCX0gZWxzZSBpZiAoKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVlBQMV9DSEFOR0VfVkFMSUQpIHx8CiAJCSAgIChtb2QtPkF0dHJpYnV0ZXMgJiBDT05GX1ZQUDJfQ0hBTkdFX1ZBTElEKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJjaGFuZ2luZyBWY2MgaXMgbm90IGFsbG93ZWQgYXQgdGhpcyB0aW1lXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI4Niw2ICszMzIsNyBAQAogCQkJcy0+b3BzLT5zZXRfaW9fbWFwKHMsICZpb19vbik7CiAJCX0KIAl9CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9IC8qIG1vZGlmeV9jb25maWd1cmF0aW9uICovCkBAIC0yOTYsOSArMzQzLDExIEBACiB7CiAJcGNjYXJkX2lvX21hcCBpbyA9IHsgMCwgMCwgMCwgMCwgMSB9OwogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKLQljb25maWdfdCAqYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CisJY29uZmlnX3QgKmM7CiAJaW50IGk7CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWlmIChwX2Rldi0+X2xvY2tlZCkgewogCQlwX2Rldi0+X2xvY2tlZCA9IDA7CiAJCWlmICgtLShzLT5sb2NrX2NvdW50KSA9PSAwKSB7CkBAIC0zMjEsNiArMzcwLDcgQEAKIAkJCQlzLT5vcHMtPnNldF9pb19tYXAocywgJmlvKTsKIAkJCX0KIAl9CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9IC8qIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24gKi8KQEAgLTMzNywxMCArMzg3LDE0IEBACiBzdGF0aWMgaW50IHBjbWNpYV9yZWxlYXNlX2lvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaW9fcmVxX3QgKnJlcSkKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7Ci0JY29uZmlnX3QgKmMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOworCWludCByZXQgPSAtRUlOVkFMOworCWNvbmZpZ190ICpjOworCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAogCWlmICghcF9kZXYtPl9pbykKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCiAJcF9kZXYtPl9pbyA9IDA7CiAKQEAgLTM0OCw3ICs0MDIsNyBAQAogCSAgICAoYy0+aW8uTnVtUG9ydHMxICE9IHJlcS0+TnVtUG9ydHMxKSB8fAogCSAgICAoYy0+aW8uQmFzZVBvcnQyICE9IHJlcS0+QmFzZVBvcnQyKSB8fAogCSAgICAoYy0+aW8uTnVtUG9ydHMyICE9IHJlcS0+TnVtUG9ydHMyKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCiAJYy0+c3RhdGUgJj0gfkNPTkZJR19JT19SRVE7CiAKQEAgLTM1NiwyOCArNDEwLDM4IEBACiAJaWYgKHJlcS0+TnVtUG9ydHMyKQogCQlyZWxlYXNlX2lvX3NwYWNlKHMsIHJlcS0+QmFzZVBvcnQyLCByZXEtPk51bVBvcnRzMik7CiAKLQlyZXR1cm4gMDsKK291dDoKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfSAvKiBwY21jaWFfcmVsZWFzZV9pbyAqLwogCiAKIHN0YXRpYyBpbnQgcGNtY2lhX3JlbGVhc2VfaXJxKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaXJxX3JlcV90ICpyZXEpCiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwX2Rldi0+c29ja2V0OwotCWNvbmZpZ190ICpjID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKKwljb25maWdfdCAqYzsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisKKwljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAogCWlmICghcF9kZXYtPl9pcnEpCi0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKKwogCXBfZGV2LT5faXJxID0gMDsKIAogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpCi0JCXJldHVybiAtRUFDQ0VTOworCQlnb3RvIG91dDsKKwogCWlmIChjLT5pcnEuQXR0cmlidXRlcyAhPSByZXEtPkF0dHJpYnV0ZXMpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiSVJRIGF0dHJpYnV0ZXMgbXVzdCBtYXRjaCBhc3NpZ25lZCBvbmVzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAocy0+aXJxLkFzc2lnbmVkSVJRICE9IHJlcS0+QXNzaWduZWRJUlEpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiSVJRIG11c3QgbWF0Y2ggYXNzaWduZWQgb25lXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAoLS1zLT5pcnEuQ29uZmlnID09IDApIHsKIAkJYy0+c3RhdGUgJj0gfkNPTkZJR19JUlFfUkVROwpAQCAtMzkwLDggKzQ1NCwxMiBAQAogI2lmZGVmIENPTkZJR19QQ01DSUFfUFJPQkUKIAlwY21jaWFfdXNlZF9pcnFbcmVxLT5Bc3NpZ25lZElSUV0tLTsKICNlbmRpZgorCXJldCA9IDA7CiAKLQlyZXR1cm4gMDsKK291dDoKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfSAvKiBwY21jaWFfcmVsZWFzZV9pcnEgKi8KIAogCkBAIC00MDQsMTAgKzQ3MiwxMiBAQAogCWlmICh3aCA+PSBNQVhfV0lOKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJd2luID0gJnMtPndpblt3aF07CiAKIAlpZiAoIShwX2Rldi0+X3dpbiAmIENMSUVOVF9XSU5fUkVRKHdoKSkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAibm90IHJlbGVhc2luZyB1bmtub3duIHdpbmRvd1xuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00MjMsNiArNDkzLDcgQEAKIAkJd2luLT5yZXMgPSBOVUxMOwogCX0KIAlwX2Rldi0+X3dpbiAmPSB+Q0xJRU5UX1dJTl9SRVEod2gpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCXJldHVybiAwOwogfSAvKiBwY21jaWFfcmVsZWFzZV93aW5kb3cgKi8KQEAgLTQ0NSw4ICs1MTYsMTEgQEAKIAkJZGV2X2RiZygmcy0+ZGV2LCAiSW50VHlwZSBtYXkgbm90IGJlIElOVF9DQVJEQlVTXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKSB7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpcyBsb2NrZWRcbiIpOwogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CkBAIC00NTQsNiArNTI4LDcgQEAKIAkvKiBEbyBwb3dlciBjb250cm9sLiAgV2UgZG9uJ3QgYWxsb3cgY2hhbmdlcyBpbiBWY2MuICovCiAJcy0+c29ja2V0LlZwcCA9IHJlcS0+VnBwOwogCWlmIChzLT5vcHMtPnNldF9zb2NrZXQocywgJnMtPnNvY2tldCkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnMtPmRldiwKIAkJCSAgICJVbmFibGUgdG8gc2V0IHNvY2tldCBzdGF0ZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDc2LDYgKzU1MSw3IEBACiAJCXMtPnNvY2tldC5pb19pcnEgPSAwOwogCXMtPm9wcy0+c2V0X3NvY2tldChzLCAmcy0+c29ja2V0KTsKIAlzLT5sb2NrX2NvdW50Kys7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJLyogU2V0IHVwIENJUyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwogCWJhc2UgPSBjLT5Db25maWdCYXNlID0gcmVxLT5Db25maWdCYXNlOwpAQCAtNTI0LDYgKzYwMCw3IEBACiAKIAkvKiBDb25maWd1cmUgSS9PIHdpbmRvd3MgKi8KIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfSU9fUkVRKSB7CisJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJCWlvbWFwLnNwZWVkID0gaW9fc3BlZWQ7CiAJCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9fV0lOOyBpKyspCiAJCQlpZiAocy0+aW9baV0ucmVzKSB7CkBAIC01NDIsNiArNjE5LDcgQEAKIAkJCQlzLT5vcHMtPnNldF9pb19tYXAocywgJmlvbWFwKTsKIAkJCQlzLT5pb1tpXS5Db25maWcrKzsKIAkJCX0KKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCX0KIAogCWMtPnN0YXRlIHw9IENPTkZJR19MT0NLRUQ7CkBAIC01NjAsNTQgKzYzOCw2NSBAQAogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKIAljb25maWdfdCAqYzsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAKIAlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJObyBjYXJkIHByZXNlbnRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCFyZXEpCi0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKKwogCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpcyBsb2NrZWRcbiIpOwotCQlyZXR1cm4gLUVBQ0NFUzsKKwkJZ290byBvdXQ7CiAJfQogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19JT19SRVEpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiSU8gYWxyZWFkeSBjb25maWd1cmVkXG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJZ290byBvdXQ7CiAJfQogCWlmIChyZXEtPkF0dHJpYnV0ZXMxICYgKElPX1NIQVJFRCB8IElPX0ZPUkNFX0FMSUFTX0FDQ0VTUykpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiYmFkIGF0dHJpYnV0ZSBzZXR0aW5nIGZvciBJTyByZWdpb24gMVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAJaWYgKChyZXEtPk51bVBvcnRzMiA+IDApICYmCiAJICAgIChyZXEtPkF0dHJpYnV0ZXMyICYgKElPX1NIQVJFRCB8IElPX0ZPUkNFX0FMSUFTX0FDQ0VTUykpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgImJhZCBhdHRyaWJ1dGUgc2V0dGluZyBmb3IgSU8gcmVnaW9uIDJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCiAJZGV2X2RiZygmcy0+ZGV2LCAidHJ5aW5nIHRvIGFsbG9jYXRlIHJlc291cmNlIDFcbiIpOwotCWlmIChhbGxvY19pb19zcGFjZShzLCByZXEtPkF0dHJpYnV0ZXMxLCAmcmVxLT5CYXNlUG9ydDEsCi0JCQkgICByZXEtPk51bVBvcnRzMSwgcmVxLT5JT0FkZHJMaW5lcykpIHsKKwlyZXQgPSBhbGxvY19pb19zcGFjZShzLCByZXEtPkF0dHJpYnV0ZXMxLCAmcmVxLT5CYXNlUG9ydDEsCisJCQkgICAgIHJlcS0+TnVtUG9ydHMxLCByZXEtPklPQWRkckxpbmVzKTsKKwlpZiAocmV0KSB7CiAJCWRldl9kYmcoJnMtPmRldiwgImFsbG9jYXRpb24gb2YgcmVzb3VyY2UgMSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVCVVNZOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAocmVxLT5OdW1Qb3J0czIpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAidHJ5aW5nIHRvIGFsbG9jYXRlIHJlc291cmNlIDJcbiIpOwotCQlpZiAoYWxsb2NfaW9fc3BhY2UocywgcmVxLT5BdHRyaWJ1dGVzMiwgJnJlcS0+QmFzZVBvcnQyLAotCQkJCSAgIHJlcS0+TnVtUG9ydHMyLCByZXEtPklPQWRkckxpbmVzKSkgeworCQlyZXQgPSBhbGxvY19pb19zcGFjZShzLCByZXEtPkF0dHJpYnV0ZXMyLCAmcmVxLT5CYXNlUG9ydDIsCisJCQkJICAgICByZXEtPk51bVBvcnRzMiwgcmVxLT5JT0FkZHJMaW5lcyk7CisJCWlmIChyZXQpIHsKIAkJCWRldl9kYmcoJnMtPmRldiwgImFsbG9jYXRpb24gb2YgcmVzb3VyY2UgMiBmYWlsZWRcbiIpOwogCQkJcmVsZWFzZV9pb19zcGFjZShzLCByZXEtPkJhc2VQb3J0MSwgcmVxLT5OdW1Qb3J0czEpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCWdvdG8gb3V0OwogCQl9CiAJfQogCiAJYy0+aW8gPSAqcmVxOwogCWMtPnN0YXRlIHw9IENPTkZJR19JT19SRVE7CiAJcF9kZXYtPl9pbyA9IDE7Ci0JcmV0dXJuIDA7CisJZGV2X2RiZygmcy0+ZGV2LCAiYWxsb2NhdGluZyByZXNvdXJjZXMgc3VjY2VlZGVkOiAlZFxuIiwgcmV0KTsKKworb3V0OgorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKworCXJldHVybiByZXQ7CiB9IC8qIHBjbWNpYV9yZXF1ZXN0X2lvICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXF1ZXN0X2lvKTsKIApAQCAtNjM2LDE4ICs3MjUsMjAgQEAKIAlpbnQgcmV0ID0gLUVJTlZBTCwgaXJxID0gMDsKIAlpbnQgdHlwZTsKIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisKIAlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJObyBjYXJkIHByZXNlbnRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBvdXQ7CiAJfQogCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpcyBsb2NrZWRcbiIpOwotCQlyZXR1cm4gLUVBQ0NFUzsKKwkJZ290byBvdXQ7CiAJfQogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19JUlFfUkVRKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIklSUSBhbHJlYWR5IGNvbmZpZ3VyZWRcbiIpOwotCQlyZXR1cm4gLUVCVVNZOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBEZWNpZGUgd2hhdCB0eXBlIG9mIGludGVycnVwdCB3ZSBhcmUgcmVnaXN0ZXJpbmcgKi8KQEAgLTcwOCw3ICs3OTksNyBAQAogCWlmIChyZXQgJiYgIXMtPmlycS5Bc3NpZ25lZElSUSkgewogCQlpZiAoIXMtPnBjaV9pcnEpIHsKIAkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcy0+ZGV2LCAibm8gSVJRIGZvdW5kXG4iKTsKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIG91dDsKIAkJfQogCQl0eXBlID0gSVJRRl9TSEFSRUQ7CiAJCWlycSA9IHMtPnBjaV9pcnE7CkBAIC03MjAsNyArODExLDcgQEAKIAkJaWYgKHJldCkgewogCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzLT5kZXYsCiAJCQkJInJlcXVlc3RfaXJxKCkgZmFpbGVkXG4iKTsKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIG91dDsKIAkJfQogCX0KIApAQCAtNzQzLDcgKzgzNCwxMCBAQAogCXBjbWNpYV91c2VkX2lycVtpcnFdKys7CiAjZW5kaWYKIAotCXJldHVybiAwOworCXJldCA9IDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCXJldHVybiByZXQ7CiB9IC8qIHBjbWNpYV9yZXF1ZXN0X2lycSAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfcmVxdWVzdF9pcnEpOwogCkBAIC03OTYsNiArODkwLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAl3aW4gPSAmcy0+d2luW3ddOwogCiAJaWYgKCEocy0+ZmVhdHVyZXMgJiBTU19DQVBfU1RBVElDX01BUCkpIHsKQEAgLTgwMyw2ICs4OTgsNyBAQAogCQkJCQkJICAgICAgKHJlcS0+QXR0cmlidXRlcyAmIFdJTl9NQVBfQkVMT1dfMU1CKSwgcyk7CiAJCWlmICghd2luLT5yZXMpIHsKIAkJCWRldl9kYmcoJnMtPmRldiwgImFsbG9jYXRpbmcgbWVtIHJlZ2lvbiBmYWlsZWRcbiIpOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC04MjEsOCArOTE3LDEwIEBACiAJaWYgKHJlcS0+QXR0cmlidXRlcyAmIFdJTl9VU0VfV0FJVCkKIAkJd2luLT5mbGFncyB8PSBNQVBfVVNFX1dBSVQ7CiAJd2luLT5jYXJkX3N0YXJ0ID0gMDsKKwogCWlmIChzLT5vcHMtPnNldF9tZW1fbWFwKHMsIHdpbikgIT0gMCkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJmYWlsZWQgdG8gc2V0IG1lbW9yeSBtYXBwaW5nXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcy0+c3RhdGUgfD0gU09DS0VUX1dJTl9SRVEodyk7CkBAIC04MzMsNiArOTMxLDcgQEAKIAllbHNlCiAJCXJlcS0+QmFzZSA9IHdpbi0+cmVzLT5zdGFydDsKIAorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkqd2ggPSB3ICsgMTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKaW5kZXggNTJkYjE3Mi4uZTZmN2Q0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCkBAIC0yMSw2MCArMjEsMTIgQEAKICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSAiY3NfaW50ZXJuYWwuaCIKIAotCi1pbnQgcGNtY2lhX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKLXsKLQlpZiAocy0+cmVzb3VyY2Vfb3BzLT52YWxpZGF0ZV9tZW0pCi0JCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPnZhbGlkYXRlX21lbShzKTsKLQkvKiBpZiB0aGVyZSBpcyBubyBjYWxsYmFjaywgd2UgY2FuIGFzc3VtZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgT0sgKi8KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0wocGNtY2lhX3ZhbGlkYXRlX21lbSk7Ci0KLWludCBwY21jaWFfYWRqdXN0X2lvX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgbG9uZyByX3N0YXJ0LAotCQkgICAgIHVuc2lnbmVkIGxvbmcgcl9lbmQsIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQotewotCWlmIChzLT5yZXNvdXJjZV9vcHMtPmFkanVzdF9pb19yZWdpb24pCi0JCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPmFkanVzdF9pb19yZWdpb24ocmVzLCByX3N0YXJ0LCByX2VuZCwgcyk7Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV9hZGp1c3RfaW9fcmVnaW9uKTsKLQotc3RydWN0IHJlc291cmNlICpwY21jaWFfZmluZF9pb19yZWdpb24odW5zaWduZWQgbG9uZyBiYXNlLCBpbnQgbnVtLAotCQkgICB1bnNpZ25lZCBsb25nIGFsaWduLCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKLXsKLQlpZiAocy0+cmVzb3VyY2Vfb3BzLT5maW5kX2lvKQotCQlyZXR1cm4gcy0+cmVzb3VyY2Vfb3BzLT5maW5kX2lvKGJhc2UsIG51bSwgYWxpZ24sIHMpOwotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTChwY21jaWFfZmluZF9pb19yZWdpb24pOwotCi1zdHJ1Y3QgcmVzb3VyY2UgKnBjbWNpYV9maW5kX21lbV9yZWdpb24odV9sb25nIGJhc2UsIHVfbG9uZyBudW0sIHVfbG9uZyBhbGlnbiwKLQkJCQkgaW50IGxvdywgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCi17Ci0JaWYgKHMtPnJlc291cmNlX29wcy0+ZmluZF9tZW0pCi0JCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPmZpbmRfbWVtKGJhc2UsIG51bSwgYWxpZ24sIGxvdywgcyk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV9maW5kX21lbV9yZWdpb24pOwotCi12b2lkIHJlbGVhc2VfcmVzb3VyY2VfZGIoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCi17Ci0JaWYgKHMtPnJlc291cmNlX29wcy0+ZXhpdCkKLQkJcy0+cmVzb3VyY2Vfb3BzLT5leGl0KHMpOwotfQotCi0KIHN0YXRpYyBpbnQgc3RhdGljX2luaXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCS8qIHRoZSBnb29kIHRoaW5nIGFib3V0IFNTX0NBUF9TVEFUSUNfTUFQIHNvY2tldHMgaXMKIAkgKiB0aGF0IHRoZXkgZG9uJ3QgbmVlZCBhIHJlc291cmNlIGRhdGFiYXNlICovCiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwogCXMtPnJlc291cmNlX3NldHVwX2RvbmUgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTE0LDIyICs2NiwyMSBAQAogCXVuc2lnbmVkIGxvbmcJb2Zmc2V0OwogfTsKIAotc3RhdGljIHZvaWQgcGNtY2lhX2FsaWduKHZvaWQgKmFsaWduX2RhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduKQorc3RhdGljIHJlc291cmNlX3NpemVfdCBwY21jaWFfYWxpZ24odm9pZCAqYWxpZ25fZGF0YSwKKwkJCQljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY21jaWFfYWxpZ25fZGF0YSAqZGF0YSA9IGFsaWduX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBzdGFydDsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQ7CiAKIAlzdGFydCA9IChyZXMtPnN0YXJ0ICYgfmRhdGEtPm1hc2spICsgZGF0YS0+b2Zmc2V0OwogCWlmIChzdGFydCA8IHJlcy0+c3RhcnQpCiAJCXN0YXJ0ICs9IGRhdGEtPm1hc2sgKyAxOwotCXJlcy0+c3RhcnQgPSBzdGFydDsKIAogI2lmZGVmIENPTkZJR19YODYKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKIAkJaWYgKHN0YXJ0ICYgMHgzMDApIHsKIAkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwotCQkJcmVzLT5zdGFydCA9IHN0YXJ0OwogCQl9CiAJfQogI2VuZGlmCkBAIC0xMzcsOSArODgsMTEgQEAKICNpZmRlZiBDT05GSUdfTTY4SwogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewogCQlpZiAoKHJlcy0+c3RhcnQgKyBzaXplIC0gMSkgPj0gMTAyNCkKLQkJCXJlcy0+c3RhcnQgPSByZXMtPmVuZDsKKwkJCXN0YXJ0ID0gcmVzLT5lbmQ7CiAJfQogI2VuZGlmCisKKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKaW5kZXggOWIwZGM0My4uNDY2M2IzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCkBAIC01NSwxMSArNTUsMTAgQEAKIAogc3RydWN0IHNvY2tldF9kYXRhIHsKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwCQltZW1fZGI7CisJc3RydWN0IHJlc291cmNlX21hcAkJbWVtX2RiX3ZhbGlkOwogCXN0cnVjdCByZXNvdXJjZV9tYXAJCWlvX2RiOwotCXVuc2lnbmVkIGludAkJCXJzcmNfbWVtX3Byb2JlOwogfTsKIAotc3RhdGljIERFRklORV9NVVRFWChyc3JjX211dGV4KTsKICNkZWZpbmUgTUVNX1BST0JFX0xPVwkoMSA8PCAwKQogI2RlZmluZSBNRU1fUFJPQkVfSElHSAkoMSA8PCAxKQogCkBAIC0xMjUsOCArMTI0LDEwIEBACiAJc3RydWN0IHJlc291cmNlX21hcCAqcCwgKnE7CiAKIAlmb3IgKHAgPSBtYXA7IDsgcCA9IHAtPm5leHQpIHsKLQkJaWYgKChwICE9IG1hcCkgJiYgKHAtPmJhc2UrcC0+bnVtLTEgPj0gYmFzZSkpCi0JCQlyZXR1cm4gLTE7CisJCWlmICgocCAhPSBtYXApICYmIChwLT5iYXNlK3AtPm51bSA+PSBiYXNlKSkgeworCQkJcC0+bnVtID0gbWF4KG51bSArIGJhc2UgLSBwLT5iYXNlLCBwLT5udW0pOworCQkJcmV0dXJuIDA7CisJCX0KIAkJaWYgKChwLT5uZXh0ID09IG1hcCkgfHwgKHAtPm5leHQtPmJhc2UgPiBiYXNlK251bS0xKSkKIAkJCWJyZWFrOwogCX0KQEAgLTI2NCwzNiArMjY1LDQ0IEBACiB9CiAjZW5kaWYKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0gICAgVGhpcyBpcyB0cmlja3kuLi4gd2hlbiB3ZSBzZXQgdXAgQ0lTIG1lbW9yeSwgd2UgdHJ5IHRvIHZhbGlkYXRlCi0gICAgdGhlIG1lbW9yeSB3aW5kb3cgc3BhY2UgYWxsb2NhdGlvbnMuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0vKiBWYWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBjYXJkcyB3aXRoIGEgdmFsaWQgQ0lTICovCisvKioKKyAqIHJlYWRhYmxlKCkgLSBpb21lbSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBjYXJkcyB3aXRoIGEgdmFsaWQgQ0lTCisgKi8KIHN0YXRpYyBpbnQgcmVhZGFibGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkgICAgdW5zaWduZWQgaW50ICpjb3VudCkKIHsKLQlpbnQgcmV0ID0gLTE7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAocy0+ZmFrZV9jaXMpIHsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiZmFrZSBDSVMgaXMgYmVpbmcgdXNlZDogY2FuJ3QgdmFsaWRhdGUgbWVtXG4iKTsKKwkJcmV0dXJuIDA7CisJfQogCiAJcy0+Y2lzX21lbS5yZXMgPSByZXM7CiAJcy0+Y2lzX3ZpcnQgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHMtPm1hcF9zaXplKTsKIAlpZiAocy0+Y2lzX3ZpcnQpIHsKLQkJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCBjb3VudCk7Ci0JCS8qIGludmFsaWRhdGUgbWFwcGluZyBhbmQgQ0lTIGNhY2hlICovCisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwkJLyogYXMgd2UncmUgb25seSBjYWxsZWQgZnJvbSBwY21jaWEuYywgd2UncmUgc2FmZSAqLworCQlpZiAocy0+Y2FsbGJhY2stPnZhbGlkYXRlKQorCQkJcmV0ID0gcy0+Y2FsbGJhY2stPnZhbGlkYXRlKHMsIGNvdW50KTsKKwkJLyogaW52YWxpZGF0ZSBtYXBwaW5nICovCisJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJCWlvdW5tYXAocy0+Y2lzX3ZpcnQpOwogCQlzLT5jaXNfdmlydCA9IE5VTEw7Ci0JCWRlc3Ryb3lfY2lzX2NhY2hlKHMpOwogCX0KIAlzLT5jaXNfbWVtLnJlcyA9IE5VTEw7Ci0JaWYgKChyZXQgIT0gMCkgfHwgKCpjb3VudCA9PSAwKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIDE7CisJaWYgKChyZXQpIHx8ICgqY291bnQgPT0gMCkpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOwogfQogCi0vKiBWYWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBzaW1wbGUgbWVtb3J5IGNhcmRzICovCi1zdGF0aWMgaW50IGNoZWNrc3VtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKKy8qKgorICogY2hlY2tzdW0oKSAtIGlvbWVtIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIHNpbXBsZSBtZW1vcnkgY2FyZHMKKyAqLworc3RhdGljIGludCBjaGVja3N1bShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHJlc291cmNlICpyZXMsCisJCSAgICB1bnNpZ25lZCBpbnQgKnZhbHVlKQogewogCXBjY2FyZF9tZW1fbWFwIG1hcDsKIAlpbnQgaSwgYSA9IDAsIGIgPSAtMSwgZDsKQEAgLTMyMSw2MSArMzMwLDkwIEBACiAJCWlvdW5tYXAodmlydCk7CiAJfQogCi0JcmV0dXJuIChiID09IC0xKSA/IC0xIDogKGE+PjEpOworCWlmIChiID09IC0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSp2YWx1ZSA9IGE7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotY2lzX3JlYWRhYmxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKKy8qKgorICogZG9fdmFsaWRhdGVfbWVtKCkgLSBsb3cgbGV2ZWwgdmFsaWRhdGUgYSBtZW1vcnkgcmVnaW9uIGZvciBQQ01DSUEgdXNlCisgKiBAczoJCVBDTUNJQSBzb2NrZXQgdG8gdmFsaWRhdGUKKyAqIEBiYXNlOglzdGFydCBhZGRyZXNzIG9mIHJlc291cmNlIHRvIGNoZWNrCisgKiBAc2l6ZToJc2l6ZSBvZiByZXNvdXJjZSB0byBjaGVjaworICogQHZhbGlkYXRlOgl2YWxpZGF0aW9uIGZ1bmN0aW9uIHRvIHVzZQorICoKKyAqIGRvX3ZhbGlkYXRlX21lbSgpIHNwbGl0cyB1cCB0aGUgbWVtb3J5IHJlZ2lvbiB3aGljaCBpcyB0byBiZSBjaGVja2VkCisgKiBpbnRvIHR3byBwYXJ0cy4gQm90aCBhcmUgcGFzc2VkIHRvIHRoZSBAdmFsaWRhdGUoKSBmdW5jdGlvbi4gSWYKKyAqIEB2YWxpZGF0ZSgpIHJldHVybnMgbm9uLXplcm8sIG9yIHRoZSB2YWx1ZSBwYXJhbWV0ZXIgdG8gQHZhbGlkYXRlKCkKKyAqIGlzIHplcm8sIG9yIHRoZSB2YWx1ZSBwYXJhbWV0ZXIgaXMgZGlmZmVyZW50IGJldHdlZW4gYm90aCBjYWxscywKKyAqIHRoZSBjaGVjayBmYWlscywgYW5kIC1FSU5WQUwgaXMgcmV0dXJuZWQuIEVsc2UsIDAgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbnQgZG9fdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAorCQkJICAgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICBpbnQgdmFsaWRhdGUgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAorCQkJCQkgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJCSB1bnNpZ25lZCBpbnQgKnZhbHVlKSkKIHsKKwlzdHJ1Y3Qgc29ja2V0X2RhdGEgKnNfZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXMxLCAqcmVzMjsKLQl1bnNpZ25lZCBpbnQgaW5mbzEsIGluZm8yOwotCWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBpbmZvMSA9IDEsIGluZm8yID0gMTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCXJlczEgPSBjbGFpbV9yZWdpb24ocywgYmFzZSwgc2l6ZS8yLCBJT1JFU09VUkNFX01FTSwgIlBDTUNJQSBtZW1wcm9iZSIpOwogCXJlczIgPSBjbGFpbV9yZWdpb24ocywgYmFzZSArIHNpemUvMiwgc2l6ZS8yLCBJT1JFU09VUkNFX01FTSwKIAkJCSJQQ01DSUEgbWVtcHJvYmUiKTsKIAogCWlmIChyZXMxICYmIHJlczIpIHsKLQkJcmV0ID0gcmVhZGFibGUocywgcmVzMSwgJmluZm8xKTsKLQkJcmV0ICs9IHJlYWRhYmxlKHMsIHJlczIsICZpbmZvMik7CisJCXJldCA9IDA7CisJCWlmICh2YWxpZGF0ZSkgeworCQkJcmV0ID0gdmFsaWRhdGUocywgcmVzMSwgJmluZm8xKTsKKwkJCXJldCArPSB2YWxpZGF0ZShzLCByZXMyLCAmaW5mbzIpOworCQl9CiAJfQogCiAJZnJlZV9yZWdpb24ocmVzMik7CiAJZnJlZV9yZWdpb24ocmVzMSk7CiAKLQlyZXR1cm4gKHJldCA9PSAyKSAmJiAoaW5mbzEgPT0gaW5mbzIpOwotfQorCWRldl9kYmcoJnMtPmRldiwgImNzOiBtZW1vcnkgcHJvYmUgMHglMDZseC0weCUwNmx4OiAlcCAlcCAldSAldSAldSIsCisJCWJhc2UsIGJhc2Urc2l6ZS0xLCByZXMxLCByZXMyLCByZXQsIGluZm8xLCBpbmZvMik7CiAKLXN0YXRpYyBpbnQKLWNoZWNrc3VtX21hdGNoKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczEsICpyZXMyOwotCWludCBhID0gLTEsIGIgPSAtMTsKKwlpZiAoKHJldCkgfHwgKGluZm8xICE9IGluZm8yKSB8fCAoaW5mbzEgPT0gMCkpCisJCXJldHVybiAtRUlOVkFMOwogCi0JcmVzMSA9IGNsYWltX3JlZ2lvbihzLCBiYXNlLCBzaXplLzIsIElPUkVTT1VSQ0VfTUVNLCAiUENNQ0lBIG1lbXByb2JlIik7Ci0JcmVzMiA9IGNsYWltX3JlZ2lvbihzLCBiYXNlICsgc2l6ZS8yLCBzaXplLzIsIElPUkVTT1VSQ0VfTUVNLAotCQkJIlBDTUNJQSBtZW1wcm9iZSIpOwotCi0JaWYgKHJlczEgJiYgcmVzMikgewotCQlhID0gY2hlY2tzdW0ocywgcmVzMSk7Ci0JCWIgPSBjaGVja3N1bShzLCByZXMyKTsKKwlpZiAodmFsaWRhdGUgJiYgIXMtPmZha2VfY2lzKSB7CisJCS8qIG1vdmUgaXQgdG8gdGhlIHZhbGlkYXRlZCBkYXRhIHNldCAqLworCQlhZGRfaW50ZXJ2YWwoJnNfZGF0YS0+bWVtX2RiX3ZhbGlkLCBiYXNlLCBzaXplKTsKKwkJc3ViX2ludGVydmFsKCZzX2RhdGEtPm1lbV9kYiwgYmFzZSwgc2l6ZSk7CiAJfQogCi0JZnJlZV9yZWdpb24ocmVzMik7Ci0JZnJlZV9yZWdpb24ocmVzMSk7Ci0KLQlyZXR1cm4gKGEgPT0gYikgJiYgKGEgPj0gMCk7CisJcmV0dXJuIDA7CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gICAgVGhlIG1lbW9yeSBwcm9iZS4gIElmIHRoZSBtZW1vcnkgbGlzdCBpbmNsdWRlcyBhIDY0Sy1hbGlnbmVkIGJsb2NrCi0gICAgYmVsb3cgMU1CLCB3ZSBwcm9iZSBpbiA2NEsgY2h1bmtzLCBhbmQgYXMgc29vbiBhcyB3ZSBhY2N1bXVsYXRlIGF0Ci0gICAgbGVhc3QgbWVtX2xpbWl0IGZyZWUgc3BhY2UsIHdlIHF1aXQuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGRvX21lbV9wcm9iZSh1X2xvbmcgYmFzZSwgdV9sb25nIG51bSwgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCisvKioKKyAqIGRvX21lbV9wcm9iZSgpIC0gdmFsaWRhdGUgYSBtZW1vcnkgcmVnaW9uIGZvciBQQ01DSUEgdXNlCisgKiBAczoJCVBDTUNJQSBzb2NrZXQgdG8gdmFsaWRhdGUKKyAqIEBiYXNlOglzdGFydCBhZGRyZXNzIG9mIHJlc291cmNlIHRvIGNoZWNrCisgKiBAbnVtOglzaXplIG9mIHJlc291cmNlIHRvIGNoZWNrCisgKiBAdmFsaWRhdGU6CXZhbGlkYXRpb24gZnVuY3Rpb24gdG8gdXNlCisgKiBAZmFsbGJhY2s6CXZhbGlkYXRpb24gZnVuY3Rpb24gdG8gdXNlIGlmIHZhbGlkYXRlIGZhaWxzCisgKgorICogZG9fbWVtX3Byb2JlKCkgY2hlY2tzIGEgbWVtb3J5IHJlZ2lvbiBmb3IgdXNlIGJ5IHRoZSBQQ01DSUEgc3Vic3lzdGVtLgorICogVG8gZG8gc28sIHRoZSBhcmVhIGlzIHNwbGl0IHVwIGludG8gc2Vuc2libGUgcGFydHMsIGFuZCB0aGVuIHBhc3NlZAorICogaW50byB0aGUgQHZhbGlkYXRlKCkgZnVuY3Rpb24uIE9ubHkgaWYgQHZhbGlkYXRlKCkgYW5kIEBmYWxsYmFjaygpIGZhaWwsCisgKiB0aGUgYXJlYSBpcyBtYXJrZWQgYXMgdW5hdmFpYmFsZSBmb3IgdXNlIGJ5IHRoZSBQQ01DSUEgc3Vic3lzdGVtLiBUaGUKKyAqIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIHVzYWJsZSBtZW1vcnkgYXJlYS4KKyAqLworc3RhdGljIGludCBkb19tZW1fcHJvYmUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVfbG9uZyBiYXNlLCB1X2xvbmcgbnVtLAorCQkJaW50IHZhbGlkYXRlIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKKwkJCQkgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgKnZhbHVlKSwKKwkJCWludCBmYWxsYmFjayAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCQkJICAgICAgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJICAgICAgdW5zaWduZWQgaW50ICp2YWx1ZSkpCiB7CiAJc3RydWN0IHNvY2tldF9kYXRhICpzX2RhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCXVfbG9uZyBpLCBqLCBiYWQsIGZhaWwsIHN0ZXA7CkBAIC0zOTMsMTUgKzQzMSwxNCBAQAogCWZvciAoaSA9IGogPSBiYXNlOyBpIDwgYmFzZStudW07IGkgPSBqICsgc3RlcCkgewogCQlpZiAoIWZhaWwpIHsKIAkJCWZvciAoaiA9IGk7IGogPCBiYXNlK251bTsgaiArPSBzdGVwKSB7Ci0JCQkJaWYgKGNpc19yZWFkYWJsZShzLCBqLCBzdGVwKSkKKwkJCQlpZiAoIWRvX3ZhbGlkYXRlX21lbShzLCBqLCBzdGVwLCB2YWxpZGF0ZSkpCiAJCQkJCWJyZWFrOwogCQkJfQogCQkJZmFpbCA9ICgoaSA9PSBiYXNlKSAmJiAoaiA9PSBiYXNlK251bSkpOwogCQl9Ci0JCWlmIChmYWlsKSB7Ci0JCQlmb3IgKGogPSBpOyBqIDwgYmFzZStudW07IGogKz0gMipzdGVwKQotCQkJCWlmIChjaGVja3N1bV9tYXRjaChzLCBqLCBzdGVwKSAmJgotCQkJCQljaGVja3N1bV9tYXRjaChzLCBqICsgc3RlcCwgc3RlcCkpCisJCWlmICgoZmFpbCkgJiYgKGZhbGxiYWNrKSkgeworCQkJZm9yIChqID0gaTsgaiA8IGJhc2UrbnVtOyBqICs9IHN0ZXApCisJCQkJaWYgKCFkb192YWxpZGF0ZV9tZW0ocywgaiwgc3RlcCwgZmFsbGJhY2spKQogCQkJCQlicmVhazsKIAkJfQogCQlpZiAoaSAhPSBqKSB7CkBAIC00MTYsOCArNDUzLDE0IEBACiAJcmV0dXJuIG51bSAtIGJhZDsKIH0KIAorCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRQogCisvKioKKyAqIGludl9wcm9iZSgpIC0gdG9wLXRvLWJvdHRvbSBzZWFyY2ggZm9yIG9uZSB1c3VhYmxlIGhpZ2ggbWVtb3J5IGFyZWEKKyAqIEBzOgkJUENNQ0lBIHNvY2tldCB0byB2YWxpZGF0ZQorICogQG06CQlyZXNvdXJjZV9tYXAgdG8gY2hlY2sKKyAqLwogc3RhdGljIHVfbG9uZyBpbnZfcHJvYmUoc3RydWN0IHJlc291cmNlX21hcCAqbSwgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7CiAJc3RydWN0IHNvY2tldF9kYXRhICpzX2RhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwpAQCAtNDMyLDkgKzQ3NSwxOCBAQAogCX0KIAlpZiAobS0+YmFzZSA8IDB4MTAwMDAwKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gZG9fbWVtX3Byb2JlKG0tPmJhc2UsIG0tPm51bSwgcyk7CisJcmV0dXJuIGRvX21lbV9wcm9iZShzLCBtLT5iYXNlLCBtLT5udW0sIHJlYWRhYmxlLCBjaGVja3N1bSk7CiB9CiAKKy8qKgorICogdmFsaWRhdGVfbWVtKCkgLSBtZW1vcnkgcHJvYmUgZnVuY3Rpb24KKyAqIEBzOgkJUENNQ0lBIHNvY2tldCB0byB2YWxpZGF0ZQorICogQHByb2JlX21hc2s6IE1FTV9QUk9CRV9MT1cgfCBNRU1fUFJPQkVfSElHSAorICoKKyAqIFRoZSBtZW1vcnkgcHJvYmUuICBJZiB0aGUgbWVtb3J5IGxpc3QgaW5jbHVkZXMgYSA2NEstYWxpZ25lZCBibG9jaworICogYmVsb3cgMU1CLCB3ZSBwcm9iZSBpbiA2NEsgY2h1bmtzLCBhbmQgYXMgc29vbiBhcyB3ZSBhY2N1bXVsYXRlIGF0CisgKiBsZWFzdCBtZW1fbGltaXQgZnJlZSBzcGFjZSwgd2UgcXVpdC4gUmV0dXJucyAwIG9uIHVzdWFibGUgcG9ydHMuCisgKi8KIHN0YXRpYyBpbnQgdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgcHJvYmVfbWFzaykKIHsKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwICptLCBtbTsKQEAgLTQ0Niw2ICs0OTgsOCBAQAogCWlmIChwcm9iZV9tYXNrICYgTUVNX1BST0JFX0hJR0gpIHsKIAkJaWYgKGludl9wcm9iZShzX2RhdGEtPm1lbV9kYi5uZXh0LCBzKSA+IDApCiAJCQlyZXR1cm4gMDsKKwkJaWYgKHNfZGF0YS0+bWVtX2RiX3ZhbGlkLm5leHQgIT0gJnNfZGF0YS0+bWVtX2RiX3ZhbGlkKQorCQkJcmV0dXJuIDA7CiAJCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZzLT5kZXYsCiAJCQkgICAiY3M6IHdhcm5pbmc6IG5vIGhpZ2ggbWVtb3J5IHNwYWNlIGF2YWlsYWJsZSFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTQ1Nyw3ICs1MTEsOCBAQAogCQlpZiAobW0uYmFzZSA+PSAweDEwMDAwMCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoKG1tLmJhc2UgfCBtbS5udW0pICYgMHhmZmZmKSB7Ci0JCQlvayArPSBkb19tZW1fcHJvYmUobW0uYmFzZSwgbW0ubnVtLCBzKTsKKwkJCW9rICs9IGRvX21lbV9wcm9iZShzLCBtbS5iYXNlLCBtbS5udW0sIHJlYWRhYmxlLAorCQkJCQkgICBjaGVja3N1bSk7CiAJCQljb250aW51ZTsKIAkJfQogCQkvKiBTcGVjaWFsIHByb2JlIGZvciA2NEstYWxpZ25lZCBibG9jayAqLwpAQCAtNDY3LDcgKzUyMiw4IEBACiAJCQkJaWYgKG9rID49IG1lbV9saW1pdCkKIAkJCQkJc3ViX2ludGVydmFsKCZzX2RhdGEtPm1lbV9kYiwgYiwgMHgxMDAwMCk7CiAJCQkJZWxzZQotCQkJCQlvayArPSBkb19tZW1fcHJvYmUoYiwgMHgxMDAwMCwgcyk7CisJCQkJCW9rICs9IGRvX21lbV9wcm9iZShzLCBiLCAweDEwMDAwLAorCQkJCQkJCSAgIHJlYWRhYmxlLCBjaGVja3N1bSk7CiAJCQl9CiAJCX0KIAl9CkBAIC00ODAsNiArNTM2LDEzIEBACiAKICNlbHNlIC8qIENPTkZJR19QQ01DSUFfUFJPQkUgKi8KIAorLyoqCisgKiB2YWxpZGF0ZV9tZW0oKSAtIG1lbW9yeSBwcm9iZSBmdW5jdGlvbgorICogQHM6CQlQQ01DSUEgc29ja2V0IHRvIHZhbGlkYXRlCisgKiBAcHJvYmVfbWFzazogaWdub3JlZAorICoKKyAqIFJldHVybnMgMCBvbiB1c3VhYmxlIHBvcnRzLgorICovCiBzdGF0aWMgaW50IHZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IHByb2JlX21hc2spCiB7CiAJc3RydWN0IHJlc291cmNlX21hcCAqbSwgbW07CkBAIC00ODgsNyArNTUxLDcgQEAKIAogCWZvciAobSA9IHNfZGF0YS0+bWVtX2RiLm5leHQ7IG0gIT0gJnNfZGF0YS0+bWVtX2RiOyBtID0gbW0ubmV4dCkgewogCQltbSA9ICptOwotCQlvayArPSBkb19tZW1fcHJvYmUobW0uYmFzZSwgbW0ubnVtLCBzKTsKKwkJb2sgKz0gZG9fbWVtX3Byb2JlKHMsIG1tLmJhc2UsIG1tLm51bSwgcmVhZGFibGUsIGNoZWNrc3VtKTsKIAl9CiAJaWYgKG9rID4gMCkKIAkJcmV0dXJuIDA7CkBAIC00OTgsMzEgKzU2MSwzMSBAQAogI2VuZGlmIC8qIENPTkZJR19QQ01DSUFfUFJPQkUgKi8KIAogCi0vKgorLyoqCisgKiBwY21jaWFfbm9uc3RhdGljX3ZhbGlkYXRlX21lbSgpIC0gdHJ5IHRvIHZhbGlkYXRlIGlvbWVtIGZvciBQQ01DSUEgdXNlCisgKiBAczoJCVBDTUNJQSBzb2NrZXQgdG8gdmFsaWRhdGUKKyAqCisgKiBUaGlzIGlzIHRyaWNreS4uLiB3aGVuIHdlIHNldCB1cCBDSVMgbWVtb3J5LCB3ZSB0cnkgdG8gdmFsaWRhdGUKKyAqIHRoZSBtZW1vcnkgd2luZG93IHNwYWNlIGFsbG9jYXRpb25zLgorICoKICAqIExvY2tpbmcgbm90ZTogTXVzdCBiZSBjYWxsZWQgd2l0aCBza3RfbXV0ZXggaGVsZCEKICAqLwogc3RhdGljIGludCBwY21jaWFfbm9uc3RhdGljX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKIAlzdHJ1Y3Qgc29ja2V0X2RhdGEgKnNfZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CiAJdW5zaWduZWQgaW50IHByb2JlX21hc2sgPSBNRU1fUFJPQkVfTE9XOwotCWludCByZXQgPSAwOworCWludCByZXQ7CiAKLQlpZiAoIXByb2JlX21lbSkKKwlpZiAoIXByb2JlX21lbSB8fCAhKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQogCQlyZXR1cm4gMDsKIAotCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwotCiAJaWYgKHMtPmZlYXR1cmVzICYgU1NfQ0FQX1BBR0VfUkVHUykKIAkJcHJvYmVfbWFzayA9IE1FTV9QUk9CRV9ISUdIOwogCi0JaWYgKHByb2JlX21hc2sgJiB+c19kYXRhLT5yc3JjX21lbV9wcm9iZSkgewotCQlpZiAocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkKLQkJCXJldCA9IHZhbGlkYXRlX21lbShzLCBwcm9iZV9tYXNrKTsKLQkJaWYgKCFyZXQpCi0JCQlzX2RhdGEtPnJzcmNfbWVtX3Byb2JlIHw9IHByb2JlX21hc2s7Ci0JfQorCXJldCA9IHZhbGlkYXRlX21lbShzLCBwcm9iZV9tYXNrKTsKIAotCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CisJaWYgKHNfZGF0YS0+bWVtX2RiX3ZhbGlkLm5leHQgIT0gJnNfZGF0YS0+bWVtX2RiX3ZhbGlkKQorCQlyZXR1cm4gMDsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01MzMsOCArNTk2LDggQEAKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwCSptYXA7CiB9OwogCi1zdGF0aWMgdm9pZAotcGNtY2lhX2NvbW1vbl9hbGlnbih2b2lkICphbGlnbl9kYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKK3N0YXRpYyByZXNvdXJjZV9zaXplX3QKK3BjbWNpYV9jb21tb25fYWxpZ24odm9pZCAqYWxpZ25fZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY21jaWFfYWxpZ25fZGF0YSAqZGF0YSA9IGFsaWduX2RhdGE7CkBAIC01NDUsMTcgKzYwOCwxOCBAQAogCXN0YXJ0ID0gKHJlcy0+c3RhcnQgJiB+ZGF0YS0+bWFzaykgKyBkYXRhLT5vZmZzZXQ7CiAJaWYgKHN0YXJ0IDwgcmVzLT5zdGFydCkKIAkJc3RhcnQgKz0gZGF0YS0+bWFzayArIDE7Ci0JcmVzLT5zdGFydCA9IHN0YXJ0OworCXJldHVybiBzdGFydDsKIH0KIAotc3RhdGljIHZvaWQKLXBjbWNpYV9hbGlnbih2b2lkICphbGlnbl9kYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCi0JCXJlc291cmNlX3NpemVfdCBhbGlnbikKK3N0YXRpYyByZXNvdXJjZV9zaXplX3QKK3BjbWNpYV9hbGlnbih2b2lkICphbGlnbl9kYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY21jaWFfYWxpZ25fZGF0YSAqZGF0YSA9IGFsaWduX2RhdGE7CiAJc3RydWN0IHJlc291cmNlX21hcCAqbTsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQ7CiAKLQlwY21jaWFfY29tbW9uX2FsaWduKGRhdGEsIHJlcywgc2l6ZSwgYWxpZ24pOworCXN0YXJ0ID0gcGNtY2lhX2NvbW1vbl9hbGlnbihkYXRhLCByZXMsIHNpemUsIGFsaWduKTsKIAogCWZvciAobSA9IGRhdGEtPm1hcC0+bmV4dDsgbSAhPSBkYXRhLT5tYXA7IG0gPSBtLT5uZXh0KSB7CiAJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBtLT5iYXNlOwpAQCAtNTY3LDggKzYzMSw3IEBACiAJCSAqIGZpdCBoZXJlLgogCQkgKi8KIAkJaWYgKHJlcy0+c3RhcnQgPCBzdGFydCkgewotCQkJcmVzLT5zdGFydCA9IHN0YXJ0OwotCQkJcGNtY2lhX2NvbW1vbl9hbGlnbihkYXRhLCByZXMsIHNpemUsIGFsaWduKTsKKwkJCXN0YXJ0ID0gcGNtY2lhX2NvbW1vbl9hbGlnbihkYXRhLCByZXMsIHNpemUsIGFsaWduKTsKIAkJfQogCiAJCS8qCkBAIC01ODYsNyArNjQ5LDkgQEAKIAkgKiBJZiB3ZSBmYWlsZWQgdG8gZmluZCBzb21ldGhpbmcgc3VpdGFibGUsIGVuc3VyZSB3ZSBmYWlsLgogCSAqLwogCWlmIChtID09IGRhdGEtPm1hcCkKLQkJcmVzLT5zdGFydCA9IHJlcy0+ZW5kOworCQlzdGFydCA9IHJlcy0+ZW5kOworCisJcmV0dXJuIHN0YXJ0OwogfQogCiAvKgpAQCAtNjAwLDcgKzY2NSw2IEBACiAJc3RydWN0IHNvY2tldF9kYXRhICpzX2RhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCWludCByZXQgPSAtRU5PTUVNOwogCi0JbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CiAJZm9yIChtID0gc19kYXRhLT5pb19kYi5uZXh0OyBtICE9ICZzX2RhdGEtPmlvX2RiOyBtID0gbS0+bmV4dCkgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbS0+YmFzZTsKIAkJdW5zaWduZWQgbG9uZyBlbmQgPSBtLT5iYXNlICsgbS0+bnVtIC0gMTsKQEAgLTYxMSw3ICs2NzUsNiBAQAogCQlyZXQgPSBhZGp1c3RfcmVzb3VyY2UocmVzLCByX3N0YXJ0LCByX2VuZCAtIHJfc3RhcnQgKyAxKTsKIAkJYnJlYWs7CiAJfQotCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNjQ1LDcgKzcwOCw2IEBACiAJZGF0YS5vZmZzZXQgPSBiYXNlICYgZGF0YS5tYXNrOwogCWRhdGEubWFwID0gJnNfZGF0YS0+aW9fZGI7CiAKLQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKICNpZmRlZiBDT05GSUdfUENJCiAJaWYgKHMtPmNiX2RldikgewogCQlyZXQgPSBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKHMtPmNiX2Rldi0+YnVzLCByZXMsIG51bSwgMSwKQEAgLTY1NCw3ICs3MTYsNiBAQAogI2VuZGlmCiAJCXJldCA9IGFsbG9jYXRlX3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsIHJlcywgbnVtLCBtaW4sIH4wVUwsCiAJCQkJCTEsIHBjbWNpYV9hbGlnbiwgJmRhdGEpOwotCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CiAKIAlpZiAocmV0ICE9IDApIHsKIAkJa2ZyZWUocmVzKTsKQEAgLTY3MCwxNSArNzMxLDE1IEBACiAJc3RydWN0IHNvY2tldF9kYXRhICpzX2RhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCXN0cnVjdCBwY21jaWFfYWxpZ25fZGF0YSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgbWluLCBtYXg7Ci0JaW50IHJldCwgaTsKKwlpbnQgcmV0LCBpLCBqOwogCiAJbG93ID0gbG93IHx8ICEocy0+ZmVhdHVyZXMgJiBTU19DQVBfUEFHRV9SRUdTKTsKIAogCWRhdGEubWFzayA9IGFsaWduIC0gMTsKIAlkYXRhLm9mZnNldCA9IGJhc2UgJiBkYXRhLm1hc2s7Ci0JZGF0YS5tYXAgPSAmc19kYXRhLT5tZW1fZGI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWRhdGEubWFwID0gJnNfZGF0YS0+bWVtX2RiX3ZhbGlkOwogCQlpZiAobG93KSB7CiAJCQltYXggPSAweDEwMDAwMFVMOwogCQkJbWluID0gYmFzZSA8IG1heCA/IGJhc2UgOiAwOwpAQCAtNjg3LDE3ICs3NDgsMjMgQEAKIAkJCW1pbiA9IDB4MTAwMDAwVUwgKyBiYXNlOwogCQl9CiAKLQkJbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CisJCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKICNpZmRlZiBDT05GSUdfUENJCi0JCWlmIChzLT5jYl9kZXYpIHsKLQkJCXJldCA9IHBjaV9idXNfYWxsb2NfcmVzb3VyY2Uocy0+Y2JfZGV2LT5idXMsIHJlcywgbnVtLAotCQkJCQkJICAgICAxLCBtaW4sIDAsCi0JCQkJCQkgICAgIHBjbWNpYV9hbGlnbiwgJmRhdGEpOwotCQl9IGVsc2UKKwkJCWlmIChzLT5jYl9kZXYpIHsKKwkJCQlyZXQgPSBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKHMtPmNiX2Rldi0+YnVzLAorCQkJCQkJCXJlcywgbnVtLCAxLCBtaW4sIDAsCisJCQkJCQkJcGNtY2lhX2FsaWduLCAmZGF0YSk7CisJCQl9IGVsc2UKICNlbmRpZgotCQkJcmV0ID0gYWxsb2NhdGVfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCByZXMsIG51bSwgbWluLAotCQkJCQkJbWF4LCAxLCBwY21jaWFfYWxpZ24sICZkYXRhKTsKLQkJbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKKwkJCXsKKwkJCQlyZXQgPSBhbGxvY2F0ZV9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsCisJCQkJCQkJcmVzLCBudW0sIG1pbiwgbWF4LCAxLAorCQkJCQkJCXBjbWNpYV9hbGlnbiwgJmRhdGEpOworCQkJfQorCQkJaWYgKHJldCA9PSAwKQorCQkJCWJyZWFrOworCQkJZGF0YS5tYXAgPSAmc19kYXRhLT5tZW1fZGI7CisJCX0KIAkJaWYgKHJldCA9PSAwIHx8IGxvdykKIAkJCWJyZWFrOwogCQlsb3cgPSAxOwpAQCAtNzIwLDI1ICs3ODcsMTggQEAKIAlpZiAoZW5kIDwgc3RhcnQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIEFERF9NQU5BR0VEX1JFU09VUkNFOgogCQlyZXQgPSBhZGRfaW50ZXJ2YWwoJmRhdGEtPm1lbV9kYiwgc3RhcnQsIHNpemUpOworCQlpZiAoIXJldCkKKwkJCWRvX21lbV9wcm9iZShzLCBzdGFydCwgc2l6ZSwgTlVMTCwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgUkVNT1ZFX01BTkFHRURfUkVTT1VSQ0U6CiAJCXJldCA9IHN1Yl9pbnRlcnZhbCgmZGF0YS0+bWVtX2RiLCBzdGFydCwgc2l6ZSk7Ci0JCWlmICghcmV0KSB7Ci0JCQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0OwotCQkJZG93bl9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzb2NrZXQsICZwY21jaWFfc29ja2V0X2xpc3QsIHNvY2tldF9saXN0KQotCQkJCXJlbGVhc2VfY2lzX21lbShzb2NrZXQpOwotCQkJdXBfcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKLQkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwogCX0KLQltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTc1Niw3ICs4MTYsNiBAQAogCWlmIChlbmQgPiBJT19TUEFDRV9MSU1JVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQUREX01BTkFHRURfUkVTT1VSQ0U6CiAJCWlmIChhZGRfaW50ZXJ2YWwoJmRhdGEtPmlvX2RiLCBzdGFydCwgc2l6ZSkgIT0gMCkgewpAQCAtNzc1LDcgKzgzNCw2IEBACiAJCXJldCA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KLQltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTgwMSw4ICs4NTksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKICNlbmRpZgogCi0JZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0JCXJlcyA9IHMtPmNiX2Rldi0+YnVzLT5yZXNvdXJjZVtpXTsKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKHMtPmNiX2Rldi0+YnVzLCByZXMsIGkpIHsKIAkJaWYgKCFyZXMpCiAJCQljb250aW51ZTsKIApAQCAtODU5LDYgKzkxNiw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJZGF0YS0+bWVtX2RiLm5leHQgPSAmZGF0YS0+bWVtX2RiOworCWRhdGEtPm1lbV9kYl92YWxpZC5uZXh0ID0gJmRhdGEtPm1lbV9kYl92YWxpZDsKIAlkYXRhLT5pb19kYi5uZXh0ID0gJmRhdGEtPmlvX2RiOwogCiAJcy0+cmVzb3VyY2VfZGF0YSA9ICh2b2lkICopIGRhdGE7CkBAIC04NzMsNyArOTMxLDEwIEBACiAJc3RydWN0IHNvY2tldF9kYXRhICpkYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwICpwLCAqcTsKIAotCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOworCWZvciAocCA9IGRhdGEtPm1lbV9kYl92YWxpZC5uZXh0OyBwICE9ICZkYXRhLT5tZW1fZGJfdmFsaWQ7IHAgPSBxKSB7CisJCXEgPSBwLT5uZXh0OworCQlrZnJlZShwKTsKKwl9CiAJZm9yIChwID0gZGF0YS0+bWVtX2RiLm5leHQ7IHAgIT0gJmRhdGEtPm1lbV9kYjsgcCA9IHEpIHsKIAkJcSA9IHAtPm5leHQ7CiAJCWtmcmVlKHApOwpAQCAtODgyLDcgKzk0Myw2IEBACiAJCXEgPSBwLT5uZXh0OwogCQlrZnJlZShwKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIH0KIAogCkBAIC05MDksNyArOTY5LDcgQEAKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwICpwOwogCXNzaXplX3QgcmV0ID0gMDsKIAotCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CiAKIAlmb3IgKHAgPSBkYXRhLT5pb19kYi5uZXh0OyBwICE9ICZkYXRhLT5pb19kYjsgcCA9IHAtPm5leHQpIHsKQEAgLTkyMSw3ICs5ODEsNyBAQAogCQkJCSgodW5zaWduZWQgbG9uZykgcC0+YmFzZSArIHAtPm51bSAtIDEpKTsKIAl9CiAKLQltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05NDksOSArMTAwOSwxMSBAQAogCWlmIChlbmRfYWRkciA8IHN0YXJ0X2FkZHIpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlyZXQgPSBhZGp1c3RfaW8ocywgYWRkLCBzdGFydF9hZGRyLCBlbmRfYWRkcik7CiAJaWYgKCFyZXQpCiAJCXMtPnJlc291cmNlX3NldHVwX25ldyA9IDE7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwogfQpAQCAtOTY1LDkgKzEwMjcsMTkgQEAKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwICpwOwogCXNzaXplX3QgcmV0ID0gMDsKIAotCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CiAKKwlmb3IgKHAgPSBkYXRhLT5tZW1fZGJfdmFsaWQubmV4dDsgcCAhPSAmZGF0YS0+bWVtX2RiX3ZhbGlkOworCSAgICAgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHJldCA+IChQQUdFX1NJWkUgLSAxMCkpCisJCQljb250aW51ZTsKKwkJcmV0ICs9IHNucHJpbnRmKCZidWZbcmV0XSwgKFBBR0VfU0laRSAtIHJldCAtIDEpLAorCQkJCSIweCUwOGx4IC0gMHglMDhseFxuIiwKKwkJCQkoKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UpLAorCQkJCSgodW5zaWduZWQgbG9uZykgcC0+YmFzZSArIHAtPm51bSAtIDEpKTsKKwl9CisKIAlmb3IgKHAgPSBkYXRhLT5tZW1fZGIubmV4dDsgcCAhPSAmZGF0YS0+bWVtX2RiOyBwID0gcC0+bmV4dCkgewogCQlpZiAocmV0ID4gKFBBR0VfU0laRSAtIDEwKSkKIAkJCWNvbnRpbnVlOwpAQCAtOTc3LDcgKzEwNDksNyBAQAogCQkJCSgodW5zaWduZWQgbG9uZykgcC0+YmFzZSArIHAtPm51bSAtIDEpKTsKIAl9CiAKLQltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMDA1LDkgKzEwNzcsMTEgQEAKIAlpZiAoZW5kX2FkZHIgPCBzdGFydF9hZGRyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJcmV0ID0gYWRqdXN0X21lbW9yeShzLCBhZGQsIHN0YXJ0X2FkZHIsIGVuZF9hZGRyKTsKIAlpZiAoIXJldCkKIAkJcy0+cmVzb3VyY2Vfc2V0dXBfbmV3ID0gMTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYyBiL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCmluZGV4IDdhNDU2MDAuLjA4Mjc4MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCkBAIC04OCwxNSArODgsMTQgQEAKIHN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9pbnNlcnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzc2l6ZV90IHJldDsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHRvX3NvY2tldChkZXYpOwogCiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBwY21jaWFfaW5zZXJ0X2NhcmQocyk7CisJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9JTlNFUlQpOwogCi0JcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OworCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihjYXJkX2luc2VydCwgMDIwMCwgTlVMTCwgcGNjYXJkX3N0b3JlX2luc2VydCk7CiAKQEAgLTExMywxOCArMTEyLDIyIEBACiAJCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3NpemVfdCByZXQgPSAtRUlOVkFMOwogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gdG9fc29ja2V0KGRldik7CisJc3NpemVfdCByZXQgPSBjb3VudDsKIAogCWlmICghY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfU1VTUEVORCkgJiYgIXN0cm5jbXAoYnVmLCAib2ZmIiwgMykpCi0JCXJldCA9IHBjbWNpYV9zdXNwZW5kX2NhcmQocyk7Ci0JZWxzZSBpZiAoKHMtPnN0YXRlICYgU09DS0VUX1NVU1BFTkQpICYmICFzdHJuY21wKGJ1ZiwgIm9uIiwgMikpCi0JCXJldCA9IHBjbWNpYV9yZXN1bWVfY2FyZChzKTsKKwlpZiAoIXN0cm5jbXAoYnVmLCAib2ZmIiwgMykpCisJCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfU1VTUEVORCk7CisJZWxzZSB7CisJCWlmICghc3RybmNtcChidWYsICJvbiIsIDIpKQorCQkJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9SRVNVTUUpOworCQllbHNlCisJCQlyZXQgPSAtRUlOVkFMOworCX0KIAotCXJldHVybiByZXQgPyAtRU5PREVWIDogY291bnQ7CisJcmV0dXJuIHJldDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihjYXJkX3BtX3N0YXRlLCAwNjQ0LCBwY2NhcmRfc2hvd19jYXJkX3BtX3N0YXRlLCBwY2NhcmRfc3RvcmVfY2FyZF9wbV9zdGF0ZSk7CiAKQEAgLTEzMiwxNSArMTM1LDE0IEBACiAJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXNzaXplX3QgcmV0OwogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gdG9fc29ja2V0KGRldik7CiAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IHBjbWNpYV9lamVjdF9jYXJkKHMpOworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfRUpFQ1QpOwogCi0JcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OworCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihjYXJkX2VqZWN0LCAwMjAwLCBOVUxMLCBwY2NhcmRfc3RvcmVfZWplY3QpOwogCkBAIC0xNjcsNyArMTY5LDkgQEAKIAlyZXQgPSBzc2NhbmYoYnVmLCAiMHgleFxuIiwgJm1hc2spOwogCiAJaWYgKHJldCA9PSAxKSB7CisJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJCXMtPmlycV9tYXNrICY9IG1hc2s7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0ID0gMDsKIAl9CiAKQEAgLTE4NywxNjQgKzE5MSwyMiBAQAogCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gdG9fc29ja2V0KGRldik7CiAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlpZiAoIXMtPnJlc291cmNlX3NldHVwX2RvbmUpCiAJCXMtPnJlc291cmNlX3NldHVwX2RvbmUgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKLQltdXRleF9sb2NrKCZzLT5za3RfbXV0ZXgpOwotCWlmICgocy0+Y2FsbGJhY2spICYmCi0JICAgIChzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSAmJgotCSAgICAhKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpKSB7Ci0JCWlmICh0cnlfbW9kdWxlX2dldChzLT5jYWxsYmFjay0+b3duZXIpKSB7Ci0JCQlzLT5jYWxsYmFjay0+cmVxdWVyeShzLCAwKTsKLQkJCW1vZHVsZV9wdXQocy0+Y2FsbGJhY2stPm93bmVyKTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJnMtPnNrdF9tdXRleCk7CisJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9SRVFVRVJZKTsKIAogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihhdmFpbGFibGVfcmVzb3VyY2VzX3NldHVwX2RvbmUsIDA2MDAsIHBjY2FyZF9zaG93X3Jlc291cmNlLCBwY2NhcmRfc3RvcmVfcmVzb3VyY2UpOwogCi0KLXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9leHRyYWN0X2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCi17Ci0JdHVwbGVfdCB0dXBsZTsKLQlpbnQgc3RhdHVzLCBpOwotCWxvZmZfdCBwb2ludGVyID0gMDsKLQlzc2l6ZV90IHJldCA9IDA7Ci0JdV9jaGFyICp0dXBsZWJ1ZmZlcjsKLQl1X2NoYXIgKnRlbXBidWZmZXI7Ci0KLQl0dXBsZWJ1ZmZlciA9IGttYWxsb2Moc2l6ZW9mKHVfY2hhcikgKiAyNTYsIEdGUF9LRVJORUwpOwotCWlmICghdHVwbGVidWZmZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JdGVtcGJ1ZmZlciA9IGttYWxsb2Moc2l6ZW9mKHVfY2hhcikgKiAyNTgsIEdGUF9LRVJORUwpOwotCWlmICghdGVtcGJ1ZmZlcikgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWVfdHVwbGU7Ci0JfQotCi0JbWVtc2V0KCZ0dXBsZSwgMCwgc2l6ZW9mKHR1cGxlX3QpKTsKLQotCXR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fTElOSyB8IFRVUExFX1JFVFVSTl9DT01NT047Ci0JdHVwbGUuRGVzaXJlZFR1cGxlID0gUkVUVVJOX0ZJUlNUX1RVUExFOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQotCXN0YXR1cyA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgQklORF9GTl9BTEwsICZ0dXBsZSk7Ci0Jd2hpbGUgKCFzdGF0dXMpIHsKLQkJdHVwbGUuVHVwbGVEYXRhID0gdHVwbGVidWZmZXI7Ci0JCXR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKLQkJbWVtc2V0KHR1cGxlYnVmZmVyLCAwLCBzaXplb2YodV9jaGFyKSAqIDI1NSk7Ci0KLQkJc3RhdHVzID0gcGNjYXJkX2dldF90dXBsZV9kYXRhKHMsICZ0dXBsZSk7Ci0JCWlmIChzdGF0dXMpCi0JCQlicmVhazsKLQotCQlpZiAob2ZmIDwgKHBvaW50ZXIgKyAyICsgdHVwbGUuVHVwbGVEYXRhTGVuKSkgewotCQkJdGVtcGJ1ZmZlclswXSA9IHR1cGxlLlR1cGxlQ29kZSAmIDB4ZmY7Ci0JCQl0ZW1wYnVmZmVyWzFdID0gdHVwbGUuVHVwbGVMaW5rICYgMHhmZjsKLQkJCWZvciAoaSA9IDA7IGkgPCB0dXBsZS5UdXBsZURhdGFMZW47IGkrKykKLQkJCQl0ZW1wYnVmZmVyW2kgKyAyXSA9IHR1cGxlYnVmZmVyW2ldICYgMHhmZjsKLQotCQkJZm9yIChpID0gMDsgaSA8ICgyICsgdHVwbGUuVHVwbGVEYXRhTGVuKTsgaSsrKSB7Ci0JCQkJaWYgKCgoaSArIHBvaW50ZXIpID49IG9mZikgJiYKLQkJCQkgICAgKGkgKyBwb2ludGVyKSA8IChvZmYgKyBjb3VudCkpIHsKLQkJCQkJYnVmW3JldF0gPSB0ZW1wYnVmZmVyW2ldOwotCQkJCQlyZXQrKzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlwb2ludGVyICs9IDIgKyB0dXBsZS5UdXBsZURhdGFMZW47Ci0KLQkJaWYgKHBvaW50ZXIgPj0gKG9mZiArIGNvdW50KSkKLQkJCWJyZWFrOwotCi0JCWlmICh0dXBsZS5UdXBsZUNvZGUgPT0gQ0lTVFBMX0VORCkKLQkJCWJyZWFrOwotCQlzdGF0dXMgPSBwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgQklORF9GTl9BTEwsICZ0dXBsZSk7Ci0JfQotCi0Ja2ZyZWUodGVtcGJ1ZmZlcik7Ci0gZnJlZV90dXBsZToKLQlrZnJlZSh0dXBsZWJ1ZmZlcik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBwY2NhcmRfc2hvd19jaXMoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkgICAgICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAotCQkJICAgICAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQotewotCXVuc2lnbmVkIGludCBzaXplID0gMHgyMDA7Ci0KLQlpZiAob2ZmID49IHNpemUpCi0JCWNvdW50ID0gMDsKLQllbHNlIHsKLQkJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7Ci0JCXVuc2lnbmVkIGludCBjaGFpbnM7Ci0KLQkJaWYgKG9mZiArIGNvdW50ID4gc2l6ZSkKLQkJCWNvdW50ID0gc2l6ZSAtIG9mZjsKLQotCQlzID0gdG9fc29ja2V0KGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7Ci0KLQkJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJaWYgKHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJmNoYWlucykpCi0JCQlyZXR1cm4gLUVJTzsKLQkJaWYgKCFjaGFpbnMpCi0JCQlyZXR1cm4gLUVOT0RBVEE7Ci0KLQkJY291bnQgPSBwY2NhcmRfZXh0cmFjdF9jaXMocywgYnVmLCBvZmYsIGNvdW50KTsKLQl9Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9jaXMoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAotCQkJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gdG9fc29ja2V0KGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7Ci0JaW50IGVycm9yOwotCi0JaWYgKG9mZikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY291bnQgPj0gQ0lTVFBMX01BWF9DSVNfU0laRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQllcnJvciA9IHBjbWNpYV9yZXBsYWNlX2NpcyhzLCBidWYsIGNvdW50KTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiAtRUlPOwotCi0JbXV0ZXhfbG9jaygmcy0+c2t0X211dGV4KTsKLQlpZiAoKHMtPmNhbGxiYWNrKSAmJiAocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkgJiYKLQkgICAgIShzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkgewotCQlpZiAodHJ5X21vZHVsZV9nZXQocy0+Y2FsbGJhY2stPm93bmVyKSkgewotCQkJcy0+Y2FsbGJhY2stPnJlcXVlcnkocywgMSk7Ci0JCQltb2R1bGVfcHV0KHMtPmNhbGxiYWNrLT5vd25lcik7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZzLT5za3RfbXV0ZXgpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi0KIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwY2NhcmRfc29ja2V0X2F0dHJpYnV0ZXNbXSA9IHsKIAkmZGV2X2F0dHJfY2FyZF90eXBlLmF0dHIsCiAJJmRldl9hdHRyX2NhcmRfdm9sdGFnZS5hdHRyLApAQCAtMzYyLDI4ICsyMjQsMTIgQEAKIAkuYXR0cnMgPSBwY2NhcmRfc29ja2V0X2F0dHJpYnV0ZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgcGNjYXJkX2Npc19hdHRyID0gewotCS5hdHRyID0geyAubmFtZSA9ICJjaXMiLCAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSIH0sCi0JLnNpemUgPSAweDIwMCwKLQkucmVhZCA9IHBjY2FyZF9zaG93X2NpcywKLQkud3JpdGUgPSBwY2NhcmRfc3RvcmVfY2lzLAotfTsKLQogaW50IHBjY2FyZF9zeXNmc19hZGRfc29ja2V0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpbnQgcmV0ID0gMDsKLQotCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmc29ja2V0X2F0dHJzKTsKLQlpZiAoIXJldCkgewotCQlyZXQgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmRldi0+a29iaiwgJnBjY2FyZF9jaXNfYXR0cik7Ci0JCWlmIChyZXQpCi0JCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnNvY2tldF9hdHRycyk7Ci0JfQotCXJldHVybiByZXQ7CisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmc29ja2V0X2F0dHJzKTsKIH0KIAogdm9pZCBwY2NhcmRfc3lzZnNfcmVtb3ZlX3NvY2tldChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZkZXYtPmtvYmosICZwY2NhcmRfY2lzX2F0dHIpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmc29ja2V0X2F0dHJzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYyBiL2RyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTU2MGNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICogUENNQ0lBIHNvY2tldCBjb2RlIGZvciB0aGUgTXlDYWJsZSBYWFMxNTAwIHN5c3RlbS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTWFudWVsIExhdXNzIDxtYW51ZWwubGF1c3NAZ21haWwuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CisjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisKKyNkZWZpbmUgTUVNX01BUF9TSVpFCTB4NDAwMDAwCisjZGVmaW5lIElPX01BUF9TSVpFCTB4MTAwMAorCisKKy8qCisgKiAzLjNWIGNhcmRzIG9ubHk7IGFsbCBpbnRlcmZhY2luZyBpcyBkb25lIHZpYSBncGlvczoKKyAqCisgKiAwLzE6ICBjYXJkZGV0ZWN0ICgwMCA9IGNhcmQgcHJlc2VudCwgeHggPSBodWgpCisgKiA0OgkgY2FyZCBpcnEKKyAqIDIwNDogIHJlc2V0IChoaWdoLWFjdCkKKyAqIDIwNTogIGJ1ZmZlciBlbmFibGUgKGxvdy1hY3QpCisgKiAyMDgvMjA5OiBjYXJkIHZvbHRhZ2Uga2V5ICgwMCwwMSwxMCwxMSkKKyAqIDIxMDogIGJhdHR3YXJuCisgKiAyMTE6ICBiYXRkZWFkCisgKiAyMTQ6ICBwb3dlciAobG93LWFjdCkKKyAqLworI2RlZmluZSBHUElPX0NEQQkwCisjZGVmaW5lIEdQSU9fQ0RCCTEKKyNkZWZpbmUgR1BJT19DQVJESVJRCTQKKyNkZWZpbmUgR1BJT19SRVNFVAkyMDQKKyNkZWZpbmUgR1BJT19PVVRFTgkyMDUKKyNkZWZpbmUgR1BJT19WU0wJMjA4CisjZGVmaW5lIEdQSU9fVlNICTIwOQorI2RlZmluZSBHUElPX0JBVFRERUFECTIxMAorI2RlZmluZSBHUElPX0JBVFRXQVJOCTIxMQorI2RlZmluZSBHUElPX1BPV0VSCTIxNAorCitzdHJ1Y3QgeHhzMTUwMF9wY21jaWFfc29jayB7CisJc3RydWN0IHBjbWNpYV9zb2NrZXQJc29ja2V0OworCXZvaWQJCSp2aXJ0X2lvOworCisJcGh5c19hZGRyX3QJcGh5c19pbzsKKwlwaHlzX2FkZHJfdAlwaHlzX2F0dHI7CisJcGh5c19hZGRyX3QJcGh5c19tZW07CisKKwkvKiBwcmV2aW91cyBmbGFncyBmb3Igc2V0X3NvY2tldCgpICovCisJdW5zaWduZWQgaW50IG9sZF9mbGFnczsKK307CisKKyNkZWZpbmUgdG9feHhzX3NvY2tldCh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IHh4czE1MDBfcGNtY2lhX3NvY2ssIHNvY2tldCkKKworc3RhdGljIGlycXJldHVybl90IGNkaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHh4czE1MDBfcGNtY2lhX3NvY2sgKnNvY2sgPSBkYXRhOworCisJcGNtY2lhX3BhcnNlX2V2ZW50cygmc29jay0+c29ja2V0LCBTU19ERVRFQ1QpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX2NvbmZpZ3VyZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSAgICBzdHJ1Y3Qgc29ja2V0X3N0YXRlX3QgKnN0YXRlKQoreworCXN0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrICpzb2NrID0gdG9feHhzX3NvY2tldChza3QpOworCXVuc2lnbmVkIGludCBjaGFuZ2VkOworCisJLyogcG93ZXIgY29udHJvbCAqLworCXN3aXRjaCAoc3RhdGUtPlZjYykgeworCWNhc2UgMDoKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19QT1dFUiwgMSk7CS8qIHBvd2VyIG9mZiAqLworCQlicmVhazsKKwljYXNlIDMzOgorCQlncGlvX3NldF92YWx1ZShHUElPX1BPV0VSLCAwKTsJLyogcG93ZXIgb24gKi8KKwkJYnJlYWs7CisJY2FzZSA1MDoKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljaGFuZ2VkID0gc3RhdGUtPmZsYWdzIF4gc29jay0+b2xkX2ZsYWdzOworCisJaWYgKGNoYW5nZWQgJiBTU19SRVNFVCkgeworCQlpZiAoc3RhdGUtPmZsYWdzICYgU1NfUkVTRVQpIHsKKwkJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUkVTRVQsIDEpOwkvKiBhc3NlcnQgcmVzZXQgKi8KKwkJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fT1VURU4sIDEpOwkvKiBidWZmZXJzIG9mZiAqLworCQl9IGVsc2UgeworCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19SRVNFVCwgMCk7CS8qIGRlYXNzZXJ0IHJlc2V0ICovCisJCQlncGlvX3NldF92YWx1ZShHUElPX09VVEVOLCAwKTsJLyogYnVmZmVycyBvbiAqLworCQkJbXNsZWVwKDUwMCk7CisJCX0KKwl9CisKKwlzb2NrLT5vbGRfZmxhZ3MgPSBzdGF0ZS0+ZmxhZ3M7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4eHMxNTAwX3BjbWNpYV9nZXRfc3RhdHVzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgKnZhbHVlKQoreworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJaW50IGk7CisKKwlzdGF0dXMgPSAwOworCisJLyogY2hlY2sgY2FyZGRldGVjdHM6IEdQSU9bMDoxXSBtdXN0IGJvdGggYmUgbG93ICovCisJaWYgKCFncGlvX2dldF92YWx1ZShHUElPX0NEQSkgJiYgIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fQ0RCKSkKKwkJc3RhdHVzIHw9IFNTX0RFVEVDVDsKKworCS8qIGRldGVybWluZSBjYXJkIHZvbHRhZ2U6IEdQSU9bMjA4OjIwOV0gYmluYXJ5IHZhbHVlICovCisJaSA9ICghIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fVlNMKSkgfCAoKCEhZ3Bpb19nZXRfdmFsdWUoR1BJT19WU0gpKSA8PCAxKTsKKworCXN3aXRjaCAoaSkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJY2FzZSAyOgorCQlzdGF0dXMgfD0gU1NfM1ZDQVJEOwkvKiAzViBjYXJkICovCisJCWJyZWFrOworCWNhc2UgMzoJCQkJLyogNVYgY2FyZCwgdW5zdXBwb3J0ZWQgKi8KKwlkZWZhdWx0OgorCQlzdGF0dXMgfD0gU1NfWFZDQVJEOwkvKiB0cmVhdGVkIGFzIHVuc3VwcG9ydGVkIGluIGNvcmUgKi8KKwl9CisKKwkvKiBHUElPMjE0OiBsb3cgYWN0aXZlIHBvd2VyIHN3aXRjaCAqLworCXN0YXR1cyB8PSBncGlvX2dldF92YWx1ZShHUElPX1BPV0VSKSA/IDAgOiBTU19QT1dFUk9OOworCisJLyogR1BJTzIwNDogaGlnaC1hY3RpdmUgcmVzZXQgbGluZSAqLworCXN0YXR1cyB8PSBncGlvX2dldF92YWx1ZShHUElPX1JFU0VUKSA/IFNTX1JFU0VUIDogU1NfUkVBRFk7CisKKwkvKiBvdGhlciBzdHVmZiAqLworCXN0YXR1cyB8PSBncGlvX2dldF92YWx1ZShHUElPX0JBVFRERUFEKSA/IDAgOiBTU19CQVRERUFEOworCXN0YXR1cyB8PSBncGlvX2dldF92YWx1ZShHUElPX0JBVFRXQVJOKSA/IDAgOiBTU19CQVRXQVJOOworCisJKnZhbHVlID0gc3RhdHVzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeHhzMTUwMF9wY21jaWFfc29ja19pbml0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCit7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19DREEpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fQ0RCKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1ZTTCk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19WU0gpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fQkFUVERFQUQpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fQkFUVFdBUk4pOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1JFU0VULCAxKTsJLyogYXNzZXJ0IHJlc2V0ICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fT1VURU4sIDEpOwkvKiBkaXNhYmxlIGJ1ZmZlcnMgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QT1dFUiwgMSk7CS8qIHBvd2VyIG9mZiAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeHhzMTUwMF9wY21jaWFfc29ja19zdXNwZW5kKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXUxeDAwX3BjbWNpYV9zZXRfaW9fbWFwKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsCisJCQkJICAgIHN0cnVjdCBwY2NhcmRfaW9fbWFwICptYXApCit7CisJc3RydWN0IHh4czE1MDBfcGNtY2lhX3NvY2sgKnNvY2sgPSB0b194eHNfc29ja2V0KHNrdCk7CisKKwltYXAtPnN0YXJ0ID0gKHUzMilzb2NrLT52aXJ0X2lvOworCW1hcC0+c3RvcCA9IG1hcC0+c3RhcnQgKyBJT19NQVBfU0laRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1MXgwMF9wY21jaWFfc2V0X21lbV9tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkgICAgIHN0cnVjdCBwY2NhcmRfbWVtX21hcCAqbWFwKQoreworCXN0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrICpzb2NrID0gdG9feHhzX3NvY2tldChza3QpOworCisJaWYgKG1hcC0+ZmxhZ3MgJiBNQVBfQVRUUklCKQorCQltYXAtPnN0YXRpY19zdGFydCA9IHNvY2stPnBoeXNfYXR0ciArIG1hcC0+Y2FyZF9zdGFydDsKKwllbHNlCisJCW1hcC0+c3RhdGljX3N0YXJ0ID0gc29jay0+cGh5c19tZW0gKyBtYXAtPmNhcmRfc3RhcnQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwY2NhcmRfb3BlcmF0aW9ucyB4eHMxNTAwX3BjbWNpYV9vcGVyYXRpb25zID0geworCS5pbml0CQkJPSB4eHMxNTAwX3BjbWNpYV9zb2NrX2luaXQsCisJLnN1c3BlbmQJCT0geHhzMTUwMF9wY21jaWFfc29ja19zdXNwZW5kLAorCS5nZXRfc3RhdHVzCQk9IHh4czE1MDBfcGNtY2lhX2dldF9zdGF0dXMsCisJLnNldF9zb2NrZXQJCT0geHhzMTUwMF9wY21jaWFfY29uZmlndXJlLAorCS5zZXRfaW9fbWFwCQk9IGF1MXgwMF9wY21jaWFfc2V0X2lvX21hcCwKKwkuc2V0X21lbV9tYXAJCT0gYXUxeDAwX3BjbWNpYV9zZXRfbWVtX21hcCwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHh4czE1MDBfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHh4czE1MDBfcGNtY2lhX3NvY2sgKnNvY2s7CisJc3RydWN0IHJlc291cmNlICpyOworCWludCByZXQsIGlycTsKKworCXNvY2sgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgeHhzMTUwMF9wY21jaWFfc29jayksIEdGUF9LRVJORUwpOworCWlmICghc29jaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSAtRU5PREVWOworCisJLyoKKwkgKiBwc2V1ZG8tYXR0cjogIFRoZSAzMmJpdCBhZGRyZXNzIG9mIHRoZSBQQ01DSUEgYXR0cmlidXRlIHNwYWNlCisJICogZm9yIHRoaXMgc29ja2V0ICh1c3VhbGx5IHRoZSAzNmJpdCBhZGRyZXNzIHNoaWZ0ZWQgNCB0byB0aGUKKwkgKiByaWdodCkuCisJICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwY21jaWEtYXR0ciIpOworCWlmICghcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nICdwY21jaWEtYXR0cicgcmVzb3VyY2UhXG4iKTsKKwkJZ290byBvdXQwOworCX0KKwlzb2NrLT5waHlzX2F0dHIgPSByLT5zdGFydDsKKworCS8qCisJICogcHNldWRvLW1lbTogIFRoZSAzMmJpdCBhZGRyZXNzIG9mIHRoZSBQQ01DSUEgbWVtb3J5IHNwYWNlIGZvcgorCSAqIHRoaXMgc29ja2V0ICh1c3VhbGx5IHRoZSAzNmJpdCBhZGRyZXNzIHNoaWZ0ZWQgNCB0byB0aGUgcmlnaHQpCisJICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwY21jaWEtbWVtIik7CisJaWYgKCFyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1pc3NpbmcgJ3BjbWNpYS1tZW0nIHJlc291cmNlIVxuIik7CisJCWdvdG8gb3V0MDsKKwl9CisJc29jay0+cGh5c19tZW0gPSByLT5zdGFydDsKKworCS8qCisJICogcHNldWRvLWlvOiAgVGhlIDMyYml0IGFkZHJlc3Mgb2YgdGhlIFBDTUNJQSBJTyBzcGFjZSBmb3IgdGhpcworCSAqIHNvY2tldCAodXN1YWxseSB0aGUgMzZiaXQgYWRkcmVzcyBzaGlmdGVkIDQgdG8gdGhlIHJpZ2h0KS4KKwkgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBjbWNpYS1pbyIpOworCWlmICghcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nICdwY21jaWEtaW8nIHJlc291cmNlIVxuIik7CisJCWdvdG8gb3V0MDsKKwl9CisJc29jay0+cGh5c19pbyA9IHItPnN0YXJ0OworCisKKwkvKgorCSAqIFBDTUNJQSBjbGllbnQgZHJpdmVycyB1c2UgdGhlIGluYi9vdXRiIG1hY3JvcyB0byBhY2Nlc3MKKwkgKiB0aGUgSU8gcmVnaXN0ZXJzLiAgU2luY2UgbWlwc19pb19wb3J0X2Jhc2UgaXMgYWRkZWQKKwkgKiB0byB0aGUgYWNjZXNzIGFkZHJlc3Mgb2YgdGhlIG1pcHMgaW1wbGVtZW50YXRpb24gb2YKKwkgKiBpbmIvb3V0Yiwgd2UgbmVlZCB0byBzdWJ0cmFjdCBpdCBoZXJlIGJlY2F1c2Ugd2Ugd2FudAorCSAqIHRvIGFjY2VzcyB0aGUgSS9PIG9yIE1FTSBhZGRyZXNzIGRpcmVjdGx5LCB3aXRob3V0CisJICogZ29pbmcgdGhyb3VnaCB0aGlzICJtaXBzX2lvX3BvcnRfYmFzZSIgbWVjaGFuaXNtLgorCSAqLworCXNvY2stPnZpcnRfaW8gPSAodm9pZCAqKShpb3JlbWFwKHNvY2stPnBoeXNfaW8sIElPX01BUF9TSVpFKSAtCisJCQkJIG1pcHNfaW9fcG9ydF9iYXNlKTsKKworCWlmICghc29jay0+dmlydF9pbykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgSU8gYXJlYVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0MDsKKwl9CisKKwlzb2NrLT5zb2NrZXQub3BzCT0gJnh4czE1MDBfcGNtY2lhX29wZXJhdGlvbnM7CisJc29jay0+c29ja2V0Lm93bmVyCT0gVEhJU19NT0RVTEU7CisJc29jay0+c29ja2V0LnBjaV9pcnEJPSBncGlvX3RvX2lycShHUElPX0NBUkRJUlEpOworCXNvY2stPnNvY2tldC5mZWF0dXJlcwk9IFNTX0NBUF9TVEFUSUNfTUFQIHwgU1NfQ0FQX1BDQ0FSRDsKKwlzb2NrLT5zb2NrZXQubWFwX3NpemUJPSBNRU1fTUFQX1NJWkU7CisJc29jay0+c29ja2V0LmlvX29mZnNldAk9ICh1bnNpZ25lZCBsb25nKXNvY2stPnZpcnRfaW87CisJc29jay0+c29ja2V0LmRldi5wYXJlbnQJPSAmcGRldi0+ZGV2OworCXNvY2stPnNvY2tldC5yZXNvdXJjZV9vcHMgPSAmcGNjYXJkX3N0YXRpY19vcHM7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzb2NrKTsKKworCS8qIHNldHVwIGNhcmRkZXRlY3QgaXJxOiB1c2Ugb25lIG9mIHRoZSAyIEdQSU9zIGFzIGFuCisJICogZWRnZSBkZXRlY3Rvci4KKwkgKi8KKwlpcnEgPSBncGlvX3RvX2lycShHUElPX0NEQSk7CisJc2V0X2lycV90eXBlKGlycSwgSVJRX1RZUEVfRURHRV9CT1RIKTsKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGNkaXJxLCAwLCAicGNtY2lhX2NhcmRkZXRlY3QiLCBzb2NrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBzZXR1cCBjZCBpcnFcbiIpOworCQlnb3RvIG91dDE7CisJfQorCisJcmV0ID0gcGNtY2lhX3JlZ2lzdGVyX3NvY2tldCgmc29jay0+c29ja2V0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlclxuIik7CisJCWdvdG8gb3V0MjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJNeUNhYmxlIFhYUzE1MDAgUENNQ0lBIHNvY2tldCBzZXJ2aWNlc1xuIik7CisKKwlyZXR1cm4gMDsKKworb3V0MjoKKwlmcmVlX2lycShncGlvX3RvX2lycShHUElPX0NEQSksIHNvY2spOworb3V0MToKKwlpb3VubWFwKCh2b2lkICopKHNvY2stPnZpcnRfaW8gKyAodTMyKW1pcHNfaW9fcG9ydF9iYXNlKSk7CitvdXQwOgorCWtmcmVlKHNvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHh4czE1MDBfcGNtY2lhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrICpzb2NrID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlwY21jaWFfdW5yZWdpc3Rlcl9zb2NrZXQoJnNvY2stPnNvY2tldCk7CisJZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19DREEpLCBzb2NrKTsKKwlpb3VubWFwKCh2b2lkICopKHNvY2stPnZpcnRfaW8gKyAodTMyKW1pcHNfaW9fcG9ydF9iYXNlKSk7CisJa2ZyZWUoc29jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeHhzMTUwMF9wY21jaWFfc29ja2V0X2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJ4eHMxNTAwX3BjbWNpYSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHh4czE1MDBfcGNtY2lhX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoeHhzMTUwMF9wY21jaWFfcmVtb3ZlKSwKK307CisKK2ludCBfX2luaXQgeHhzMTUwMF9wY21jaWFfc29ja2V0X2xvYWQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ4eHMxNTAwX3BjbWNpYV9zb2NrZXRfZHJpdmVyKTsKK30KKwordm9pZCAgX19leGl0IHh4czE1MDBfcGNtY2lhX3NvY2tldF91bmxvYWQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmeHhzMTUwMF9wY21jaWFfc29ja2V0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHh4czE1MDBfcGNtY2lhX3NvY2tldF9sb2FkKTsKK21vZHVsZV9leGl0KHh4czE1MDBfcGNtY2lhX3NvY2tldF91bmxvYWQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBDTUNJQSBTb2NrZXQgU2VydmljZXMgZm9yIE15Q2FibGUgWFhTMTUwMCBzeXN0ZW1zIik7CitNT0RVTEVfQVVUSE9SKCJNYW51ZWwgTGF1c3MiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKaW5kZXggZTRkMTJhYy4uYjg1Mzc1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKKysrIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKQEAgLTM3LDYgKzM3LDExIEBACiBtb2R1bGVfcGFyYW0ocHdyX2lycXNfb2ZmLCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocHdyX2lycXNfb2ZmLCAiRm9yY2UgSVJRcyBvZmYgZHVyaW5nIHBvd2VyLW9uIG9mIHNsb3QuIFVzZSBvbmx5IHdoZW4gc2VlaW5nIElSUSBzdG9ybXMhIik7CiAKK3N0YXRpYyBjaGFyIG8yX3NwZWVkdXBbXSA9ICJkZWZhdWx0IjsKK21vZHVsZV9wYXJhbV9zdHJpbmcobzJfc3BlZWR1cCwgbzJfc3BlZWR1cCwgc2l6ZW9mKG8yX3NwZWVkdXApLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobzJfc3BlZWR1cCwgIlVzZSBwcmVmZXRjaC9idXJzdCBmb3IgTzItYnJpZGdlczogJ29uJywgJ29mZicgIgorCSJvciAnZGVmYXVsdCcgKHVzZXMgcmVjb21tZW5kZWQgYmVoYXZpb3VyIGZvciB0aGUgZGV0ZWN0ZWQgYnJpZGdlKSIpOworCiAjZGVmaW5lIGRlYnVnKHgsIHMsIGFyZ3MuLi4pIGRldl9kYmcoJnMtPmRldi0+ZGV2LCB4LCAjI2FyZ3MpCiAKIC8qIERvbid0IGFzay4uICovCkBAIC02NDksOSArNjU0LDEwIEBACiBzdGF0aWMgaW50IHllbnRhX3NlYXJjaF9yZXMoc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJCSAgICB1MzIgbWluKQogeworCXN0cnVjdCByZXNvdXJjZSAqcm9vdDsKIAlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLQkJc3RydWN0IHJlc291cmNlICpyb290ID0gc29ja2V0LT5kZXYtPmJ1cy0+cmVzb3VyY2VbaV07CisKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKHNvY2tldC0+ZGV2LT5idXMsIHJvb3QsIGkpIHsKIAkJaWYgKCFyb290KQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCmluZGV4IGY1MjZlNzMuLjY4NDhmMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZwpAQCAtNzksNiArNzksNyBAQAogCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCWRlcGVuZHMgb24gUkZLSUxMIHx8IFJGS0lMTCA9IG4KIAlkZXBlbmRzIG9uIFBPV0VSX1NVUFBMWQorCWRlcGVuZHMgb24gU0VSSU9fSTgwNDIKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciByZmtpbGwgYW5kIGJhY2tsaWdodCBjb250cm9sIHRvIERlbGwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCmluZGV4IDA3ZDE0ZGYuLjIyNmIzZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYwpAQCAtOTM0LDcgKzkzNCw3IEBACiAJYWNlcl9iYWNrbGlnaHRfZGV2aWNlID0gYmQ7CiAKIAliZC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOwotCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gbWF4X2JyaWdodG5lc3M7CisJYmQtPnByb3BzLmJyaWdodG5lc3MgPSByZWFkX2JyaWdodG5lc3MoYmQpOwogCWJkLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IG1heF9icmlnaHRuZXNzOwogCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJkKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYwppbmRleCBlZDkwMDgyLi44Y2IyMGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jCkBAIC0zNCw2ICszNCwxMSBAQAogI2RlZmluZSBDTVBDX0FDQ0VMX1NFTlNJVElWSVRZX0RFRkFVTFQJCTUKIAogCisjZGVmaW5lIENNUENfQUNDRUxfSElECQkiQUNDRTAwMDAiCisjZGVmaW5lIENNUENfVEFCTEVUX0hJRAkJIlRCTFQwMDAwIgorI2RlZmluZSBDTVBDX0JMX0hJRAkJIklQTUwyMDAiCisjZGVmaW5lIENNUENfS0VZU19ISUQJCSJGbkJUMDAwMCIKKwogLyoKICAqIEdlbmVyaWMgaW5wdXQgZGV2aWNlIGNvZGUuCiAgKi8KQEAgLTI4MiwxMCArMjg3LDkgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX2FjY2VsX2RldmljZV9pZHNbXSA9IHsKLQl7IkFDQ0UwMDAwIiwgMH0sCisJe0NNUENfQUNDRUxfSElELCAwfSwKIAl7IiIsIDB9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX2FjY2VsX2RldmljZV9pZHMpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGNtcGNfYWNjZWxfYWNwaV9kcml2ZXIgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCkBAIC0zNjYsMTAgKzM3MCw5IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgY21wY190YWJsZXRfZGV2aWNlX2lkc1tdID0gewotCXsiVEJMVDAwMDAiLCAwfSwKKwl7Q01QQ19UQUJMRVRfSElELCAwfSwKIAl7IiIsIDB9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX3RhYmxldF9kZXZpY2VfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBjbXBjX3RhYmxldF9hY3BpX2RyaXZlciA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKQEAgLTQ3NywxNyArNDgwLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgY21wY19kZXZpY2VfaWRzW10gPSB7Ci0JeyJJUE1MMjAwIiwgMH0sCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNtcGNfYmxfZGV2aWNlX2lkc1tdID0geworCXtDTVBDX0JMX0hJRCwgMH0sCiAJeyIiLCAwfQogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgY21wY19kZXZpY2VfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBjbXBjX2JsX2FjcGlfZHJpdmVyID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5uYW1lID0gImNtcGMiLAogCS5jbGFzcyA9ICJjbXBjIiwKLQkuaWRzID0gY21wY19kZXZpY2VfaWRzLAorCS5pZHMgPSBjbXBjX2JsX2RldmljZV9pZHMsCiAJLm9wcyA9IHsKIAkJLmFkZCA9IGNtcGNfYmxfYWRkLAogCQkucmVtb3ZlID0gY21wY19ibF9yZW1vdmUKQEAgLTU0MCwxMCArNTQyLDkgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX2tleXNfZGV2aWNlX2lkc1tdID0gewotCXsiRm5CVDAwMDAiLCAwfSwKKwl7Q01QQ19LRVlTX0hJRCwgMH0sCiAJeyIiLCAwfQogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgY21wY19rZXlzX2RldmljZV9pZHMpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGNtcGNfa2V5c19hY3BpX2RyaXZlciA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKQEAgLTYwNywzICs2MDgsMTMgQEAKIAogbW9kdWxlX2luaXQoY21wY19pbml0KTsKIG1vZHVsZV9leGl0KGNtcGNfZXhpdCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgY21wY19kZXZpY2VfaWRzW10gPSB7CisJe0NNUENfQUNDRUxfSElELCAwfSwKKwl7Q01QQ19UQUJMRVRfSElELCAwfSwKKwl7Q01QQ19CTF9ISUQsIDB9LAorCXtDTVBDX0tFWVNfSElELCAwfSwKKwl7IiIsIDB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGNtcGNfZGV2aWNlX2lkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jb21wYWwtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jb21wYWwtbGFwdG9wLmMKaW5kZXggMWEzODdlNy4uMjc0MGI0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYwpAQCAtMjYsMTcgKzI2LDggQEAKIC8qCiAgKiBjb21hcGwtbGFwdG9wLmMgLSBDb21wYWwgbGFwdG9wIHN1cHBvcnQuCiAgKgotICogVGhpcyBkcml2ZXIgZXhwb3J0cyBhIGZldyBmaWxlcyBpbiAvc3lzL2RldmljZXMvcGxhdGZvcm0vY29tcGFsLWxhcHRvcC86Ci0gKgotICogICB3bGFuIC0gd2xhbiBzdWJzeXN0ZW0gc3RhdGU6IGNvbnRhaW5zIDAgb3IgMSAocncpCi0gKgotICogICBibHVldG9vdGggLSBCbHVldG9vdGggc3Vic3lzdGVtIHN0YXRlOiBjb250YWlucyAwIG9yIDEgKHJ3KQotICoKLSAqICAgcmF3IC0gcmF3IHZhbHVlIHRha2VuIGZyb20gZW1iZWRkZWQgY29udHJvbGxlciByZWdpc3RlciAocm8pCi0gKgotICogSW4gYWRkaXRpb24gdG8gdGhlc2UgcGxhdGZvcm0gZGV2aWNlIGF0dHJpYnV0ZXMgdGhlIGRyaXZlcgotICogcmVnaXN0ZXJzIGl0c2VsZiBpbiB0aGUgTGludXggYmFja2xpZ2h0IGNvbnRyb2wgc3Vic3lzdGVtIGFuZCBpcwotICogYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSB1bmRlciAvc3lzL2NsYXNzL2JhY2tsaWdodC9jb21wYWwtbGFwdG9wLy4KKyAqIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIHRoZSByZmtpbGwgc3Vic3lzdGVtIGFuZAorICogdGhlIExpbnV4IGJhY2tsaWdodCBjb250cm9sIHN1YnN5c3RlbS4KICAqCiAgKiBUaGlzIGRyaXZlciBtaWdodCB3b3JrIG9uIG90aGVyIGxhcHRvcHMgcHJvZHVjZWQgYnkgQ29tcGFsLiBJZiB5b3UKICAqIHdhbnQgdG8gdHJ5IGl0IHlvdSBjYW4gcGFzcyBmb3JjZT0xIGFzIGFyZ3VtZW50IHRvIHRoZSBtb2R1bGUgd2hpY2gKQEAgLTUxLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KIAogI2RlZmluZSBDT01QQUxfRFJJVkVSX1ZFUlNJT04gIjAuMi42IgogCkBAIC02Myw2ICs1NSwxMCBAQAogI2RlZmluZSBXTEFOX01BU0sJMHgwMQogI2RlZmluZSBCVF9NQVNLIAkweDAyCiAKK3N0YXRpYyBzdHJ1Y3QgcmZraWxsICp3aWZpX3Jma2lsbDsKK3N0YXRpYyBzdHJ1Y3QgcmZraWxsICpidF9yZmtpbGw7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqY29tcGFsX2RldmljZTsKKwogc3RhdGljIGludCBmb3JjZTsKIG1vZHVsZV9wYXJhbShmb3JjZSwgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZvcmNlLCAiRm9yY2UgZHJpdmVyIGxvYWQsIGlnbm9yZSBETUkgZGF0YSIpOwpAQCAtODgsNjUgKzg0LDc1IEBACiAJcmV0dXJuIChpbnQpIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBzZXRfd2xhbl9zdGF0ZShpbnQgc3RhdGUpCitzdGF0aWMgaW50IGNvbXBhbF9yZmtpbGxfc2V0KHZvaWQgKmRhdGEsIGJvb2wgYmxvY2tlZCkKIHsKKwl1bnNpZ25lZCBsb25nIHJhZGlvID0gKHVuc2lnbmVkIGxvbmcpIGRhdGE7CiAJdTggcmVzdWx0LCB2YWx1ZTsKIAogCWVjX3JlYWQoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsICZyZXN1bHQpOwogCi0JaWYgKChyZXN1bHQgJiBLSUxMU1dJVENIX01BU0spID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCWVsc2UgewotCQlpZiAoc3RhdGUpCi0JCQl2YWx1ZSA9ICh1OCkgKHJlc3VsdCB8IFdMQU5fTUFTSyk7Ci0JCWVsc2UKLQkJCXZhbHVlID0gKHU4KSAocmVzdWx0ICYgfldMQU5fTUFTSyk7Ci0JCWVjX3dyaXRlKENPTVBBTF9FQ19DT01NQU5EX1dJUkVMRVNTLCB2YWx1ZSk7Ci0JfQorCWlmICghYmxvY2tlZCkKKwkJdmFsdWUgPSAodTgpIChyZXN1bHQgfCByYWRpbyk7CisJZWxzZQorCQl2YWx1ZSA9ICh1OCkgKHJlc3VsdCAmIH5yYWRpbyk7CisJZWNfd3JpdGUoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsIHZhbHVlKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNldF9ibHVldG9vdGhfc3RhdGUoaW50IHN0YXRlKQotewotCXU4IHJlc3VsdCwgdmFsdWU7Ci0KLQllY19yZWFkKENPTVBBTF9FQ19DT01NQU5EX1dJUkVMRVNTLCAmcmVzdWx0KTsKLQotCWlmICgocmVzdWx0ICYgS0lMTFNXSVRDSF9NQVNLKSA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlIHsKLQkJaWYgKHN0YXRlKQotCQkJdmFsdWUgPSAodTgpIChyZXN1bHQgfCBCVF9NQVNLKTsKLQkJZWxzZQotCQkJdmFsdWUgPSAodTgpIChyZXN1bHQgJiB+QlRfTUFTSyk7Ci0JCWVjX3dyaXRlKENPTVBBTF9FQ19DT01NQU5EX1dJUkVMRVNTLCB2YWx1ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X3dpcmVsZXNzX3N0YXRlKGludCAqd2xhbiwgaW50ICpibHVldG9vdGgpCitzdGF0aWMgdm9pZCBjb21wYWxfcmZraWxsX3BvbGwoc3RydWN0IHJma2lsbCAqcmZraWxsLCB2b2lkICpkYXRhKQogewogCXU4IHJlc3VsdDsKKwlib29sIGh3X2Jsb2NrZWQ7CiAKIAllY19yZWFkKENPTVBBTF9FQ19DT01NQU5EX1dJUkVMRVNTLCAmcmVzdWx0KTsKIAotCWlmICh3bGFuKSB7Ci0JCWlmICgocmVzdWx0ICYgS0lMTFNXSVRDSF9NQVNLKSA9PSAwKQotCQkJKndsYW4gPSAwOwotCQllbHNlCi0JCQkqd2xhbiA9IHJlc3VsdCAmIFdMQU5fTUFTSzsKLQl9CisJaHdfYmxvY2tlZCA9ICEocmVzdWx0ICYgS0lMTFNXSVRDSF9NQVNLKTsKKwlyZmtpbGxfc2V0X2h3X3N0YXRlKHJma2lsbCwgaHdfYmxvY2tlZCk7Cit9CiAKLQlpZiAoYmx1ZXRvb3RoKSB7Ci0JCWlmICgocmVzdWx0ICYgS0lMTFNXSVRDSF9NQVNLKSA9PSAwKQotCQkJKmJsdWV0b290aCA9IDA7Ci0JCWVsc2UKLQkJCSpibHVldG9vdGggPSAocmVzdWx0ICYgQlRfTUFTSykgPj4gMTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmZraWxsX29wcyBjb21wYWxfcmZraWxsX29wcyA9IHsKKwkucG9sbCA9IGNvbXBhbF9yZmtpbGxfcG9sbCwKKwkuc2V0X2Jsb2NrID0gY29tcGFsX3Jma2lsbF9zZXQsCit9OworCitzdGF0aWMgaW50IHNldHVwX3Jma2lsbCh2b2lkKQoreworCWludCByZXQ7CisKKwl3aWZpX3Jma2lsbCA9IHJma2lsbF9hbGxvYygiY29tcGFsLXdpZmkiLCAmY29tcGFsX2RldmljZS0+ZGV2LAorCQkJCVJGS0lMTF9UWVBFX1dMQU4sICZjb21wYWxfcmZraWxsX29wcywKKwkJCQkodm9pZCAqKSBXTEFOX01BU0spOworCWlmICghd2lmaV9yZmtpbGwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gcmZraWxsX3JlZ2lzdGVyKHdpZmlfcmZraWxsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl93aWZpOworCisJYnRfcmZraWxsID0gcmZraWxsX2FsbG9jKCJjb21wYWwtYmx1ZXRvb3RoIiwgJmNvbXBhbF9kZXZpY2UtPmRldiwKKwkJCQlSRktJTExfVFlQRV9CTFVFVE9PVEgsICZjb21wYWxfcmZraWxsX29wcywKKwkJCQkodm9pZCAqKSBCVF9NQVNLKTsKKwlpZiAoIWJ0X3Jma2lsbCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9hbGxvY2F0ZV9idDsKIAl9CisJcmV0ID0gcmZraWxsX3JlZ2lzdGVyKGJ0X3Jma2lsbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVnaXN0ZXJfYnQ7CiAKIAlyZXR1cm4gMDsKKworZXJyX3JlZ2lzdGVyX2J0OgorCXJma2lsbF9kZXN0cm95KGJ0X3Jma2lsbCk7CisKK2Vycl9hbGxvY2F0ZV9idDoKKwlyZmtpbGxfdW5yZWdpc3Rlcih3aWZpX3Jma2lsbCk7CisKK2Vycl93aWZpOgorCXJma2lsbF9kZXN0cm95KHdpZmlfcmZraWxsKTsKKworCXJldHVybiByZXQ7CiB9CiAKIC8qIEJhY2tsaWdodCBkZXZpY2Ugc3R1ZmYgKi8KQEAgLTE2OSw4NiArMTc1LDYgQEAKIAogc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpjb21wYWxibF9kZXZpY2U7CiAKLS8qIFBsYXRmb3JtIGRldmljZSAqLwotCi1zdGF0aWMgc3NpemVfdCBzaG93X3dsYW4oc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0JaW50IHJldCwgZW5hYmxlZDsKLQotCXJldCA9IGdldF93aXJlbGVzc19zdGF0ZSgmZW5hYmxlZCwgTlVMTCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgZW5hYmxlZCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfcmF3KHN0cnVjdCBkZXZpY2UgKmRldiwKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXU4IHJlc3VsdDsKLQotCWVjX3JlYWQoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsICZyZXN1bHQpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIHJlc3VsdCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfYmx1ZXRvb3RoKHN0cnVjdCBkZXZpY2UgKmRldiwKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCWludCByZXQsIGVuYWJsZWQ7Ci0KLQlyZXQgPSBnZXRfd2lyZWxlc3Nfc3RhdGUoTlVMTCwgJmVuYWJsZWQpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGVuYWJsZWQpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzdG9yZV93bGFuX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0JaW50IHN0YXRlLCByZXQ7Ci0KLQlpZiAoc3NjYW5mKGJ1ZiwgIiVpIiwgJnN0YXRlKSAhPSAxIHx8IChzdGF0ZSA8IDAgfHwgc3RhdGUgPiAxKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBzZXRfd2xhbl9zdGF0ZShzdGF0ZSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2JsdWV0b290aF9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCWludCBzdGF0ZSwgcmV0OwotCi0JaWYgKHNzY2FuZihidWYsICIlaSIsICZzdGF0ZSkgIT0gMSB8fCAoc3RhdGUgPCAwIHx8IHN0YXRlID4gMSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0ID0gc2V0X2JsdWV0b290aF9zdGF0ZShzdGF0ZSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihibHVldG9vdGgsIDA2NDQsIHNob3dfYmx1ZXRvb3RoLCBzdG9yZV9ibHVldG9vdGhfc3RhdGUpOwotc3RhdGljIERFVklDRV9BVFRSKHdsYW4sIDA2NDQsIHNob3dfd2xhbiwgc3RvcmVfd2xhbl9zdGF0ZSk7Ci1zdGF0aWMgREVWSUNFX0FUVFIocmF3LCAwNDQ0LCBzaG93X3JhdywgTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjb21wYWxfYXR0cmlidXRlc1tdID0gewotCSZkZXZfYXR0cl9ibHVldG9vdGguYXR0ciwKLQkmZGV2X2F0dHJfd2xhbi5hdHRyLAotCSZkZXZfYXR0cl9yYXcuYXR0ciwKLQlOVUxMCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBjb21wYWxfYXR0cmlidXRlX2dyb3VwID0gewotCS5hdHRycyA9IGNvbXBhbF9hdHRyaWJ1dGVzCi19OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjb21wYWxfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CkBAIC0yNTcsOCArMTgzLDYgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqY29tcGFsX2RldmljZTsKLQogLyogSW5pdGlhbGl6YXRpb24gKi8KIAogc3RhdGljIGludCBkbWlfY2hlY2tfY2IoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQpAQCAtMzEwLDYgKzIzNCw0NyBAQAogCQl9LAogCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IKIAl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgTWluaSA5IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSW5zcGlyb24gOTEwIiksCisJCX0sCisJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYgorCX0sCisJeworCQkuaWRlbnQgPSAiRGVsbCBNaW5pIDEwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSW5zcGlyb24gMTAxMCIpLAorCQl9LAorCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IKKwl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgTWluaSAxMHYiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiAxMDExIiksCisJCX0sCisJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYgorCX0sCisJeworCQkuaWRlbnQgPSAiRGVsbCBJbnNwaXJvbiAxMXoiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiAxMTEwIiksCisJCX0sCisJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYgorCX0sCisJeworCQkuaWRlbnQgPSAiRGVsbCBNaW5pIDEyIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSW5zcGlyb24gMTIxMCIpLAorCQl9LAorCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IKKwl9LAorCiAJeyB9CiB9OwogCkBAIC0zNDgsMjMgKzMxMywyMSBAQAogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChjb21wYWxfZGV2aWNlKTsKIAlpZiAocmV0KQotCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlMTsKKwkJZ290byBmYWlsX3BsYXRmb3JtX2RldmljZTsKIAotCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY29tcGFsX2RldmljZS0+ZGV2LmtvYmosCi0JCSZjb21wYWxfYXR0cmlidXRlX2dyb3VwKTsKKwlyZXQgPSBzZXR1cF9yZmtpbGwoKTsKIAlpZiAocmV0KQotCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlMjsKKwkJZ290byBmYWlsX3Jma2lsbDsKIAogCXByaW50ayhLRVJOX0lORk8gImNvbXBhbC1sYXB0b3A6IGRyaXZlciAiQ09NUEFMX0RSSVZFUl9WRVJTSU9OCiAJCSIgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiIpOwogCiAJcmV0dXJuIDA7CiAKLWZhaWxfcGxhdGZvcm1fZGV2aWNlMjoKLQorZmFpbF9yZmtpbGw6CiAJcGxhdGZvcm1fZGV2aWNlX2RlbChjb21wYWxfZGV2aWNlKTsKIAotZmFpbF9wbGF0Zm9ybV9kZXZpY2UxOgorZmFpbF9wbGF0Zm9ybV9kZXZpY2U6CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KGNvbXBhbF9kZXZpY2UpOwogCkBAIC0zODIsMTAgKzM0NSwxMyBAQAogc3RhdGljIHZvaWQgX19leGl0IGNvbXBhbF9jbGVhbnVwKHZvaWQpCiB7CiAKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNvbXBhbF9kZXZpY2UtPmRldi5rb2JqLCAmY29tcGFsX2F0dHJpYnV0ZV9ncm91cCk7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoY29tcGFsX2RldmljZSk7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmNvbXBhbF9kcml2ZXIpOwogCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3Rlcihjb21wYWxibF9kZXZpY2UpOworCXJma2lsbF91bnJlZ2lzdGVyKHdpZmlfcmZraWxsKTsKKwlyZmtpbGxfZGVzdHJveSh3aWZpX3Jma2lsbCk7CisJcmZraWxsX3VucmVnaXN0ZXIoYnRfcmZraWxsKTsKKwlyZmtpbGxfZGVzdHJveShidF9yZmtpbGwpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiY29tcGFsLWxhcHRvcDogZHJpdmVyIHVubG9hZGVkLlxuIik7CiB9CkBAIC00MDMsMyArMzY5LDggQEAKIE1PRFVMRV9BTElBUygiZG1pOio6cm5JRkw5MTpydnJJRlQwMDoqIik7CiBNT0RVTEVfQUxJQVMoImRtaToqOnJuSkZMOTI6cnZySUZUMDA6KiIpOwogTU9EVUxFX0FMSUFTKCJkbWk6KjpybklGVDAwOnJ2cklGVDAwOioiKTsKK01PRFVMRV9BTElBUygiZG1pOio6c3ZuRGVsbEluYy46cG5JbnNwaXJvbjkxMDoqIik7CitNT0RVTEVfQUxJQVMoImRtaToqOnN2bkRlbGxJbmMuOnBuSW5zcGlyb24xMDEwOioiKTsKK01PRFVMRV9BTElBUygiZG1pOio6c3ZuRGVsbEluYy46cG5JbnNwaXJvbjEwMTE6KiIpOworTU9EVUxFX0FMSUFTKCJkbWk6Kjpzdm5EZWxsSW5jLjpwbkluc3Bpcm9uMTExMDoqIik7CitNT0RVTEVfQUxJQVMoImRtaToqOnN2bkRlbGxJbmMuOnBuSW5zcGlyb24xMjEwOioiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCmluZGV4IDM3ODA5OTQuLmI3ZjRkMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwpAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2k4MDQyLmg+CiAjaW5jbHVkZSAiLi4vLi4vZmlybXdhcmUvZGNkYmFzLmgiCiAKICNkZWZpbmUgQlJJR0hUTkVTU19UT0tFTiAweDdkCkBAIC03OSw5ICs4MSw3MyBAQAogCQkJRE1JX01BVENIKERNSV9DSEFTU0lTX1RZUEUsICI4IiksCiAJCX0sCiAJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIENvbXB1dGVyIENvcnBvcmF0aW9uIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIENvbXB1dGVyIENvcnBvcmF0aW9uIiksCisJCQlETUlfTUFUQ0goRE1JX0NIQVNTSVNfVFlQRSwgIjgiKSwKKwkJfSwKKwl9LAogCXsgfQogfTsKIAorc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9fZGV2aW5pdGRhdGEgZGVsbF9ibGFja2xpc3RbXSA9IHsKKwkvKiBTdXBwb3J0ZWQgYnkgY29tcGFsLWxhcHRvcCAqLworCXsKKwkJLmlkZW50ID0gIkRlbGwgTWluaSA5IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSW5zcGlyb24gOTEwIiksCisJCX0sCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIE1pbmkgMTAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiAxMDEwIiksCisJCX0sCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIE1pbmkgMTB2IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSW5zcGlyb24gMTAxMSIpLAorCQl9LAorCX0sCisJeworCQkuaWRlbnQgPSAiRGVsbCBJbnNwaXJvbiAxMXoiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiAxMTEwIiksCisJCX0sCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIE1pbmkgMTIiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiAxMjEwIiksCisJCX0sCisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIgKmJ1ZmZlcjsKK3N0cnVjdCBwYWdlICpidWZmZXJwYWdlOworREVGSU5FX01VVEVYKGJ1ZmZlcl9tdXRleCk7CisKK3N0YXRpYyBpbnQgaHdzd2l0Y2hfc3RhdGU7CisKK3N0YXRpYyB2b2lkIGdldF9idWZmZXIodm9pZCkKK3sKKwltdXRleF9sb2NrKCZidWZmZXJfbXV0ZXgpOworCW1lbXNldChidWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfYnVmZmVyKHZvaWQpCit7CisJbXV0ZXhfdW5sb2NrKCZidWZmZXJfbXV0ZXgpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfZGFfdGFibGUoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtKQogewogCS8qIEZpbmFsIHRva2VuIGlzIGEgdGVybWluYXRvciwgc28gd2UgZG9uJ3Qgd2FudCB0byBjb3B5IGl0ICovCkBAIC0xNjAsNiArMjI2LDggQEAKIC8qIERlcml2ZWQgZnJvbSBpbmZvcm1hdGlvbiBpbiBEZWxsV2lyZWxlc3NDdGwuY3BwOgogICAgQ2xhc3MgMTcsIHNlbGVjdCAxMSBpcyByYWRpbyBjb250cm9sLiBJdCByZXR1cm5zIGFuIGFycmF5IG9mIDMyLWJpdCB2YWx1ZXMuCiAKKyAgIElucHV0IGJ5dGUgMCA9IDA6IFdpcmVsZXNzIGluZm9ybWF0aW9uCisKICAgIHJlc3VsdFswXTogcmV0dXJuIGNvZGUKICAgIHJlc3VsdFsxXToKICAgICAgQml0IDA6ICAgICAgSGFyZHdhcmUgc3dpdGNoIHN1cHBvcnRlZApAQCAtMTgwLDMzICsyNDgsNjIgQEAKICAgICAgQml0cyAyMC0zMTogUmVzZXJ2ZWQKICAgIHJlc3VsdFsyXTogTlZSQU0gc2l6ZSBpbiBieXRlcwogICAgcmVzdWx0WzNdOiBOVlJBTSBmb3JtYXQgdmVyc2lvbiBudW1iZXIKKworICAgSW5wdXQgYnl0ZSAwID0gMjogV2lyZWxlc3Mgc3dpdGNoIGNvbmZpZ3VyYXRpb24KKyAgIHJlc3VsdFswXTogcmV0dXJuIGNvZGUKKyAgIHJlc3VsdFsxXToKKyAgICAgQml0IDA6ICAgICAgV2lmaSBjb250cm9sbGVkIGJ5IHN3aXRjaAorICAgICBCaXQgMTogICAgICBCbHVldG9vdGggY29udHJvbGxlZCBieSBzd2l0Y2gKKyAgICAgQml0IDI6ICAgICAgV1dBTiBjb250cm9sbGVkIGJ5IHN3aXRjaAorICAgICBCaXRzIDMtNjogICBSZXNlcnZlZAorICAgICBCaXQgNzogICAgICBXaXJlbGVzcyBzd2l0Y2ggY29uZmlnIGxvY2tlZAorICAgICBCaXQgODogICAgICBXaWZpIGxvY2F0b3IgZW5hYmxlZAorICAgICBCaXRzIDktMTQ6ICBSZXNlcnZlZAorICAgICBCaXQgMTU6ICAgICBXaWZpIGxvY2F0b3Igc2V0dGluZyBsb2NrZWQKKyAgICAgQml0cyAxNi0zMTogUmVzZXJ2ZWQKICovCiAKIHN0YXRpYyBpbnQgZGVsbF9yZmtpbGxfc2V0KHZvaWQgKmRhdGEsIGJvb2wgYmxvY2tlZCkKIHsKLQlzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyIGJ1ZmZlcjsKIAlpbnQgZGlzYWJsZSA9IGJsb2NrZWQgPyAxIDogMDsKIAl1bnNpZ25lZCBsb25nIHJhZGlvID0gKHVuc2lnbmVkIGxvbmcpZGF0YTsKKwlpbnQgaHdzd2l0Y2hfYml0ID0gKHVuc2lnbmVkIGxvbmcpZGF0YSAtIDE7CisJaW50IHJldCA9IDA7CiAKLQltZW1zZXQoJmJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIpKTsKLQlidWZmZXIuaW5wdXRbMF0gPSAoMSB8IChyYWRpbzw8OCkgfCAoZGlzYWJsZSA8PCAxNikpOwotCWRlbGxfc2VuZF9yZXF1ZXN0KCZidWZmZXIsIDE3LCAxMSk7CisJZ2V0X2J1ZmZlcigpOworCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMTcsIDExKTsKIAotCXJldHVybiAwOworCS8qIElmIHRoZSBoYXJkd2FyZSBzd2l0Y2ggY29udHJvbHMgdGhpcyByYWRpbywgYW5kIHRoZSBoYXJkd2FyZQorCSAgIHN3aXRjaCBpcyBkaXNhYmxlZCwgZG9uJ3QgYWxsb3cgY2hhbmdpbmcgdGhlIHNvZnR3YXJlIHN0YXRlICovCisJaWYgKChod3N3aXRjaF9zdGF0ZSAmIEJJVChod3N3aXRjaF9iaXQpKSAmJgorCSAgICAhKGJ1ZmZlci0+b3V0cHV0WzFdICYgQklUKDE2KSkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJYnVmZmVyLT5pbnB1dFswXSA9ICgxIHwgKHJhZGlvPDw4KSB8IChkaXNhYmxlIDw8IDE2KSk7CisJZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAxNywgMTEpOworCitvdXQ6CisJcmVsZWFzZV9idWZmZXIoKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBkZWxsX3Jma2lsbF9xdWVyeShzdHJ1Y3QgcmZraWxsICpyZmtpbGwsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlciBidWZmZXI7CiAJaW50IHN0YXR1czsKIAlpbnQgYml0ID0gKHVuc2lnbmVkIGxvbmcpZGF0YSArIDE2OworCWludCBod3N3aXRjaF9iaXQgPSAodW5zaWduZWQgbG9uZylkYXRhIC0gMTsKIAotCW1lbXNldCgmYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlcikpOwotCWRlbGxfc2VuZF9yZXF1ZXN0KCZidWZmZXIsIDE3LCAxMSk7Ci0Jc3RhdHVzID0gYnVmZmVyLm91dHB1dFsxXTsKKwlnZXRfYnVmZmVyKCk7CisJZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAxNywgMTEpOworCXN0YXR1cyA9IGJ1ZmZlci0+b3V0cHV0WzFdOworCXJlbGVhc2VfYnVmZmVyKCk7CiAKIAlyZmtpbGxfc2V0X3N3X3N0YXRlKHJma2lsbCwgISEoc3RhdHVzICYgQklUKGJpdCkpKTsKLQlyZmtpbGxfc2V0X2h3X3N0YXRlKHJma2lsbCwgIShzdGF0dXMgJiBCSVQoMTYpKSk7CisKKwlpZiAoaHdzd2l0Y2hfc3RhdGUgJiAoQklUKGh3c3dpdGNoX2JpdCkpKQorCQlyZmtpbGxfc2V0X2h3X3N0YXRlKHJma2lsbCwgIShzdGF0dXMgJiBCSVQoMTYpKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmZraWxsX29wcyBkZWxsX3Jma2lsbF9vcHMgPSB7CkBAIC0yMTQsMTUgKzMxMSwzNiBAQAogCS5xdWVyeSA9IGRlbGxfcmZraWxsX3F1ZXJ5LAogfTsKIAorc3RhdGljIHZvaWQgZGVsbF91cGRhdGVfcmZraWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZCkKK3sKKwlpZiAod2lmaV9yZmtpbGwpCisJCWRlbGxfcmZraWxsX3F1ZXJ5KHdpZmlfcmZraWxsLCAodm9pZCAqKTEpOworCWlmIChibHVldG9vdGhfcmZraWxsKQorCQlkZWxsX3Jma2lsbF9xdWVyeShibHVldG9vdGhfcmZraWxsLCAodm9pZCAqKTIpOworCWlmICh3d2FuX3Jma2lsbCkKKwkJZGVsbF9yZmtpbGxfcXVlcnkod3dhbl9yZmtpbGwsICh2b2lkICopMyk7Cit9CitzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksoZGVsbF9yZmtpbGxfd29yaywgZGVsbF91cGRhdGVfcmZraWxsKTsKKworCiBzdGF0aWMgaW50IF9faW5pdCBkZWxsX3NldHVwX3Jma2lsbCh2b2lkKQogewotCXN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIgYnVmZmVyOwogCWludCBzdGF0dXM7CiAJaW50IHJldDsKIAotCW1lbXNldCgmYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlcikpOwotCWRlbGxfc2VuZF9yZXF1ZXN0KCZidWZmZXIsIDE3LCAxMSk7Ci0Jc3RhdHVzID0gYnVmZmVyLm91dHB1dFsxXTsKKwlpZiAoZG1pX2NoZWNrX3N5c3RlbShkZWxsX2JsYWNrbGlzdCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZGVsbC1sYXB0b3A6IEJsYWNrbGlzdGVkIGhhcmR3YXJlIGRldGVjdGVkIC0gIgorCQkJCSJub3QgZW5hYmxpbmcgcmZraWxsXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZ2V0X2J1ZmZlcigpOworCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMTcsIDExKTsKKwlzdGF0dXMgPSBidWZmZXItPm91dHB1dFsxXTsKKwlidWZmZXItPmlucHV0WzBdID0gMHgyOworCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMTcsIDExKTsKKwlod3N3aXRjaF9zdGF0ZSA9IGJ1ZmZlci0+b3V0cHV0WzFdOworCXJlbGVhc2VfYnVmZmVyKCk7CiAKIAlpZiAoKHN0YXR1cyAmICgxPDwyfDE8PDgpKSA9PSAoMTw8MnwxPDw4KSkgewogCQl3aWZpX3Jma2lsbCA9IHJma2lsbF9hbGxvYygiZGVsbC13aWZpIiwgJnBsYXRmb3JtX2RldmljZS0+ZGV2LApAQCAtMjk4LDM5ICs0MTYsNDkgQEAKIAogc3RhdGljIGludCBkZWxsX3NlbmRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKLQlzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyIGJ1ZmZlcjsKKwlpbnQgcmV0ID0gMDsKIAotCW1lbXNldCgmYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlcikpOwotCWJ1ZmZlci5pbnB1dFswXSA9IGZpbmRfdG9rZW5fbG9jYXRpb24oQlJJR0hUTkVTU19UT0tFTik7Ci0JYnVmZmVyLmlucHV0WzFdID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CisJZ2V0X2J1ZmZlcigpOworCWJ1ZmZlci0+aW5wdXRbMF0gPSBmaW5kX3Rva2VuX2xvY2F0aW9uKEJSSUdIVE5FU1NfVE9LRU4pOworCWJ1ZmZlci0+aW5wdXRbMV0gPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKIAotCWlmIChidWZmZXIuaW5wdXRbMF0gPT0gLTEpCi0JCXJldHVybiAtRU5PREVWOworCWlmIChidWZmZXItPmlucHV0WzBdID09IC0xKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KIAogCWlmIChwb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKCkgPiAwKQotCQlkZWxsX3NlbmRfcmVxdWVzdCgmYnVmZmVyLCAxLCAyKTsKKwkJZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAxLCAyKTsKIAllbHNlCi0JCWRlbGxfc2VuZF9yZXF1ZXN0KCZidWZmZXIsIDEsIDEpOworCQlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDEsIDEpOwogCitvdXQ6CisJcmVsZWFzZV9idWZmZXIoKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkZWxsX2dldF9pbnRlbnNpdHkoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewotCXN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIgYnVmZmVyOworCWludCByZXQgPSAwOwogCi0JbWVtc2V0KCZidWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyKSk7Ci0JYnVmZmVyLmlucHV0WzBdID0gZmluZF90b2tlbl9sb2NhdGlvbihCUklHSFRORVNTX1RPS0VOKTsKKwlnZXRfYnVmZmVyKCk7CisJYnVmZmVyLT5pbnB1dFswXSA9IGZpbmRfdG9rZW5fbG9jYXRpb24oQlJJR0hUTkVTU19UT0tFTik7CiAKLQlpZiAoYnVmZmVyLmlucHV0WzBdID09IC0xKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoYnVmZmVyLT5pbnB1dFswXSA9PSAtMSkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAocG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZCgpID4gMCkKLQkJZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMCwgMik7CisJCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMCwgMik7CiAJZWxzZQotCQlkZWxsX3NlbmRfcmVxdWVzdCgmYnVmZmVyLCAwLCAxKTsKKwkJZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAwLCAxKTsKIAotCXJldHVybiBidWZmZXIub3V0cHV0WzFdOworb3V0OgorCXJlbGVhc2VfYnVmZmVyKCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gYnVmZmVyLT5vdXRwdXRbMV07CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBkZWxsX29wcyA9IHsKQEAgLTMzOCw5ICs0NjYsMzIgQEAKIAkudXBkYXRlX3N0YXR1cyAgPSBkZWxsX3NlbmRfaW50ZW5zaXR5LAogfTsKIAorYm9vbCBkZWxsX2xhcHRvcF9pODA0Ml9maWx0ZXIodW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBjaGFyIHN0ciwKKwkJCSAgICAgIHN0cnVjdCBzZXJpbyAqcG9ydCkKK3sKKwlzdGF0aWMgYm9vbCBleHRlbmRlZDsKKworCWlmIChzdHIgJiAweDIwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAodW5saWtlbHkoZGF0YSA9PSAweGUwKSkgeworCQlleHRlbmRlZCA9IHRydWU7CisJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgaWYgKHVubGlrZWx5KGV4dGVuZGVkKSkgeworCQlzd2l0Y2ggKGRhdGEpIHsKKwkJY2FzZSAweDg6CisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRlbGxfcmZraWxsX3dvcmssCisJCQkJCSAgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFopKTsKKwkJCWJyZWFrOworCQl9CisJCWV4dGVuZGVkID0gZmFsc2U7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBkZWxsX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyIGJ1ZmZlcjsKIAlpbnQgbWF4X2ludGVuc2l0eSA9IDA7CiAJaW50IHJldDsKIApAQCAtMzY2LDYgKzUxNywxNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gZmFpbF9wbGF0Zm9ybV9kZXZpY2UyOwogCisJLyoKKwkgKiBBbGxvY2F0ZSBidWZmZXIgYmVsb3cgNEdCIGZvciBTTUkgZGF0YS0tb25seSAzMi1iaXQgcGh5c2ljYWwgYWRkcgorCSAqIGlzIHBhc3NlZCB0byBTTUkgaGFuZGxlci4KKwkgKi8KKwlidWZmZXJwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyKTsKKworCWlmICghYnVmZmVycGFnZSkKKwkJZ290byBmYWlsX2J1ZmZlcjsKKwlidWZmZXIgPSBwYWdlX2FkZHJlc3MoYnVmZmVycGFnZSk7CisJbXV0ZXhfaW5pdCgmYnVmZmVyX211dGV4KTsKKwogCXJldCA9IGRlbGxfc2V0dXBfcmZraWxsKCk7CiAKIAlpZiAocmV0KSB7CkBAIC0zNzMsNiArNTM1LDEzIEBACiAJCWdvdG8gZmFpbF9yZmtpbGw7CiAJfQogCisJcmV0ID0gaTgwNDJfaW5zdGFsbF9maWx0ZXIoZGVsbF9sYXB0b3BfaTgwNDJfZmlsdGVyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJkZWxsLWxhcHRvcDogVW5hYmxlIHRvIGluc3RhbGwga2V5IGZpbHRlclxuIik7CisJCWdvdG8gZmFpbF9maWx0ZXI7CisJfQorCiAjaWZkZWYgQ09ORklHX0FDUEkKIAkvKiBJbiB0aGUgZXZlbnQgb2YgYW4gQUNQSSBiYWNrbGlnaHQgYmVpbmcgYXZhaWxhYmxlLCBkb24ndAogCSAqIHJlZ2lzdGVyIHRoZSBwbGF0Zm9ybSBjb250cm9sbGVyLgpAQCAtMzgxLDEzICs1NTAsMTMgQEAKIAkJcmV0dXJuIDA7CiAjZW5kaWYKIAotCW1lbXNldCgmYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlcikpOwotCWJ1ZmZlci5pbnB1dFswXSA9IGZpbmRfdG9rZW5fbG9jYXRpb24oQlJJR0hUTkVTU19UT0tFTik7Ci0KLQlpZiAoYnVmZmVyLmlucHV0WzBdICE9IC0xKSB7Ci0JCWRlbGxfc2VuZF9yZXF1ZXN0KCZidWZmZXIsIDAsIDIpOwotCQltYXhfaW50ZW5zaXR5ID0gYnVmZmVyLm91dHB1dFszXTsKKwlnZXRfYnVmZmVyKCk7CisJYnVmZmVyLT5pbnB1dFswXSA9IGZpbmRfdG9rZW5fbG9jYXRpb24oQlJJR0hUTkVTU19UT0tFTik7CisJaWYgKGJ1ZmZlci0+aW5wdXRbMF0gIT0gLTEpIHsKKwkJZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAwLCAyKTsKKwkJbWF4X2ludGVuc2l0eSA9IGJ1ZmZlci0+b3V0cHV0WzNdOwogCX0KKwlyZWxlYXNlX2J1ZmZlcigpOwogCiAJaWYgKG1heF9pbnRlbnNpdHkpIHsKIAkJZGVsbF9iYWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigKQEAgLTQxMCw4ICs1NzksMTIgQEAKIAlyZXR1cm4gMDsKIAogZmFpbF9iYWNrbGlnaHQ6CisJaTgwNDJfcmVtb3ZlX2ZpbHRlcihkZWxsX2xhcHRvcF9pODA0Ml9maWx0ZXIpOworZmFpbF9maWx0ZXI6CiAJZGVsbF9jbGVhbnVwX3Jma2lsbCgpOwogZmFpbF9yZmtpbGw6CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1ZmZlcnBhZ2UpOworZmFpbF9idWZmZXI6CiAJcGxhdGZvcm1fZGV2aWNlX2RlbChwbGF0Zm9ybV9kZXZpY2UpOwogZmFpbF9wbGF0Zm9ybV9kZXZpY2UyOgogCXBsYXRmb3JtX2RldmljZV9wdXQocGxhdGZvcm1fZGV2aWNlKTsKQEAgLTQyNCw4ICs1OTcsMTYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGRlbGxfZXhpdCh2b2lkKQogeworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGVsbF9yZmtpbGxfd29yayk7CisJaTgwNDJfcmVtb3ZlX2ZpbHRlcihkZWxsX2xhcHRvcF9pODA0Ml9maWx0ZXIpOwogCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihkZWxsX2JhY2tsaWdodF9kZXZpY2UpOwogCWRlbGxfY2xlYW51cF9yZmtpbGwoKTsKKwlpZiAocGxhdGZvcm1fZGV2aWNlKSB7CisJCXBsYXRmb3JtX2RldmljZV9kZWwocGxhdGZvcm1fZGV2aWNlKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBsYXRmb3JtX2RyaXZlcik7CisJfQorCWtmcmVlKGRhX3Rva2Vucyk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1ZmZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGRlbGxfaW5pdCk7CkBAIC00MzUsMyArNjE2LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRGVsbCBsYXB0b3AgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVMoImRtaToqc3ZuRGVsbEluYy46KjpjdDg6KiIpOworTU9EVUxFX0FMSUFTKCJkbWk6KnN2bkRlbGxDb21wdXRlckNvcnBvcmF0aW9uLjoqOmN0ODoqIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jCmluZGV4IGFkNGM0MTRkLi4zYWE1N2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYwpAQCAtODksNiArODksNyBAQAogCXtLRV9LRVksIDB4MjBlNiwgS0VZX1BST0cxfSwKIAl7S0VfS0VZLCAweDIxNDIsIEtFWV9NRURJQX0sCiAJe0tFX0tFWSwgMHgyMTNiLCBLRVlfSU5GT30sCisJe0tFX0tFWSwgMHgyMTY5LCBLRVlfRElSRUNUSU9OfSwKIAl7S0VfS0VZLCAweDIzMWIsIEtFWV9IRUxQfSwKIAl7S0VfRU5ELCAwfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwppbmRleCBlNjdlNGZlLi5lYjYwM2YxZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKQEAgLTU3NzEsNyArNTc3MSw3IEBACiAJY2FzZSBUUEFDUElfVEhFUk1BTF9BQ1BJX1RNUDA3OgogCWNhc2UgVFBBQ1BJX1RIRVJNQUxfQUNQSV9VUERUOgogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnRwYWNwaV9zZW5zb3JzX3BkZXYtPmRldi5rb2JqLAotCQkJCSAgICZ0aGVybWFsX3RlbXBfaW5wdXQxNl9ncm91cCk7CisJCQkJICAgJnRoZXJtYWxfdGVtcF9pbnB1dDhfZ3JvdXApOwogCQlicmVhazsKIAljYXNlIFRQQUNQSV9USEVSTUFMX05PTkU6CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMKaW5kZXggNzdiZjVkOC4uMjZjMjExNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtNjIsOSArNjMsMTAgQEAKIAogLyogVG9zaGliYSBBQ1BJIG1ldGhvZCBwYXRocyAqLwogI2RlZmluZSBNRVRIT0RfTENEX0JSSUdIVE5FU1MJIlxcX1NCXy5QQ0kwLlZHQV8uTENEXy5fQkNNIgotI2RlZmluZSBNRVRIT0RfSENJXzEJCSJcXF9TQl8uVkFMRC5HSENJIgotI2RlZmluZSBNRVRIT0RfSENJXzIJCSJcXF9TQl8uVkFMWi5HSENJIgorI2RlZmluZSBUT1NIX0lOVEVSRkFDRV8xCSJcXF9TQl8uVkFMRCIKKyNkZWZpbmUgVE9TSF9JTlRFUkZBQ0VfMgkiXFxfU0JfLlZBTFoiCiAjZGVmaW5lIE1FVEhPRF9WSURFT19PVVQJIlxcX1NCXy5WQUxYLkRTU1giCisjZGVmaW5lIEdIQ0lfTUVUSE9ECQkiLkdIQ0kiCiAKIC8qIFRvc2hpYmEgSENJIGludGVyZmFjZSBkZWZpbml0aW9ucwogICoKQEAgLTExNiw2ICsxMTgsMzYgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIHRvc2hpYmFfZGV2aWNlX2lkcyk7CiAKK3N0cnVjdCBrZXlfZW50cnkgeworCWNoYXIgdHlwZTsKKwl1MTYgY29kZTsKKwl1MTYga2V5Y29kZTsKK307CisKK2VudW0ge0tFX0tFWSwgS0VfRU5EfTsKKworc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgdG9zaGliYV9hY3BpX2tleW1hcFtdICA9IHsKKwl7S0VfS0VZLCAweDEwMSwgS0VZX01VVEV9LAorCXtLRV9LRVksIDB4MTNiLCBLRVlfQ09GRkVFfSwKKwl7S0VfS0VZLCAweDEzYywgS0VZX0JBVFRFUll9LAorCXtLRV9LRVksIDB4MTNkLCBLRVlfU0xFRVB9LAorCXtLRV9LRVksIDB4MTNlLCBLRVlfU1VTUEVORH0sCisJe0tFX0tFWSwgMHgxM2YsIEtFWV9TV0lUQ0hWSURFT01PREV9LAorCXtLRV9LRVksIDB4MTQwLCBLRVlfQlJJR0hUTkVTU0RPV059LAorCXtLRV9LRVksIDB4MTQxLCBLRVlfQlJJR0hUTkVTU1VQfSwKKwl7S0VfS0VZLCAweDE0MiwgS0VZX1dMQU59LAorCXtLRV9LRVksIDB4MTQzLCBLRVlfUFJPRzF9LAorCXtLRV9LRVksIDB4YjA1LCBLRVlfUFJPRzJ9LAorCXtLRV9LRVksIDB4YjA2LCBLRVlfV1dXfSwKKwl7S0VfS0VZLCAweGIwNywgS0VZX01BSUx9LAorCXtLRV9LRVksIDB4YjMwLCBLRVlfU1RPUH0sCisJe0tFX0tFWSwgMHhiMzEsIEtFWV9QUkVWSU9VU1NPTkd9LAorCXtLRV9LRVksIDB4YjMyLCBLRVlfTkVYVFNPTkd9LAorCXtLRV9LRVksIDB4YjMzLCBLRVlfUExBWVBBVVNFfSwKKwl7S0VfS0VZLCAweGI1YSwgS0VZX01FRElBfSwKKwl7S0VfRU5ELCAwLCAwfSwKK307CisKIC8qIHV0aWxpdHkKICAqLwogCkBAIC0yNTEsNiArMjgzLDggQEAKIHN0cnVjdCB0b3NoaWJhX2FjcGlfZGV2IHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwX2RldjsKIAlzdHJ1Y3QgcmZraWxsICpidF9yZms7CisJc3RydWN0IGlucHV0X2RldiAqaG90a2V5X2RldjsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CiAKIAljb25zdCBjaGFyICpidF9uYW1lOwogCkBAIC03MTEsOCArNzQ1LDE1OSBAQAogICAgICAgICAudXBkYXRlX3N0YXR1cyAgPSBzZXRfbGNkX3N0YXR1cywKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICp0b3NoaWJhX2FjcGlfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKGludCBjb2RlKQoreworCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKKworCWZvciAoa2V5ID0gdG9zaGliYV9hY3BpX2tleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspCisJCWlmIChjb2RlID09IGtleS0+Y29kZSkKKwkJCXJldHVybiBrZXk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKnRvc2hpYmFfYWNwaV9nZXRfZW50cnlfYnlfa2V5Y29kZShpbnQgY29kZSkKK3sKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisKKwlmb3IgKGtleSA9IHRvc2hpYmFfYWNwaV9rZXltYXA7IGtleS0+dHlwZSAhPSBLRV9FTkQ7IGtleSsrKQorCQlpZiAoY29kZSA9PSBrZXktPmtleWNvZGUgJiYga2V5LT50eXBlID09IEtFX0tFWSkKKwkJCXJldHVybiBrZXk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCB0b3NoaWJhX2FjcGlfZ2V0a2V5Y29kZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBzY2FuY29kZSwKKwkJCQkgICBpbnQgKmtleWNvZGUpCit7CisJc3RydWN0IGtleV9lbnRyeSAqa2V5ID0gdG9zaGliYV9hY3BpX2dldF9lbnRyeV9ieV9zY2FuY29kZShzY2FuY29kZSk7CisKKwlpZiAoa2V5ICYmIGtleS0+dHlwZSA9PSBLRV9LRVkpIHsKKwkJKmtleWNvZGUgPSBrZXktPmtleWNvZGU7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHRvc2hpYmFfYWNwaV9zZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNjYW5jb2RlLAorCQkJCSAgIGludCBrZXljb2RlKQoreworCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKKwlpbnQgb2xkX2tleWNvZGU7CisKKwlpZiAoa2V5Y29kZSA8IDAgfHwga2V5Y29kZSA+IEtFWV9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJa2V5ID0gdG9zaGliYV9hY3BpX2dldF9lbnRyeV9ieV9zY2FuY29kZShzY2FuY29kZSk7CisJaWYgKGtleSAmJiBrZXktPnR5cGUgPT0gS0VfS0VZKSB7CisJCW9sZF9rZXljb2RlID0ga2V5LT5rZXljb2RlOworCQlrZXktPmtleWNvZGUgPSBrZXljb2RlOworCQlzZXRfYml0KGtleWNvZGUsIGRldi0+a2V5Yml0KTsKKwkJaWYgKCF0b3NoaWJhX2FjcGlfZ2V0X2VudHJ5X2J5X2tleWNvZGUob2xkX2tleWNvZGUpKQorCQkJY2xlYXJfYml0KG9sZF9rZXljb2RlLCBkZXYtPmtleWJpdCk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCB0b3NoaWJhX2FjcGlfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpjb250ZXh0KQoreworCXUzMiBoY2lfcmVzdWx0LCB2YWx1ZTsKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisKKwlpZiAoZXZlbnQgIT0gMHg4MCkKKwkJcmV0dXJuOworCWRvIHsKKwkJaGNpX3JlYWQxKEhDSV9TWVNURU1fRVZFTlQsICZ2YWx1ZSwgJmhjaV9yZXN1bHQpOworCQlpZiAoaGNpX3Jlc3VsdCA9PSBIQ0lfU1VDQ0VTUykgeworCQkJaWYgKHZhbHVlID09IDB4MTAwKQorCQkJCWNvbnRpbnVlOworCQkJZWxzZSBpZiAodmFsdWUgJiAweDgwKSB7CisJCQkJa2V5ID0gdG9zaGliYV9hY3BpX2dldF9lbnRyeV9ieV9zY2FuY29kZQorCQkJCQkodmFsdWUgJiB+MHg4MCk7CisJCQkJaWYgKCFrZXkpIHsKKwkJCQkJcHJpbnRrKE1ZX0lORk8gIlVua25vd24ga2V5ICV4XG4iLAorCQkJCQkgICAgICAgdmFsdWUgJiB+MHg4MCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpbnB1dF9yZXBvcnRfa2V5KHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LAorCQkJCQkJIGtleS0+a2V5Y29kZSwgMSk7CisJCQkJaW5wdXRfc3luYyh0b3NoaWJhX2FjcGkuaG90a2V5X2Rldik7CisJCQkJaW5wdXRfcmVwb3J0X2tleSh0b3NoaWJhX2FjcGkuaG90a2V5X2RldiwKKwkJCQkJCSBrZXktPmtleWNvZGUsIDApOworCQkJCWlucHV0X3N5bmModG9zaGliYV9hY3BpLmhvdGtleV9kZXYpOworCQkJfQorCQl9IGVsc2UgaWYgKGhjaV9yZXN1bHQgPT0gSENJX05PVF9TVVBQT1JURUQpIHsKKwkJCS8qIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhbiB1bnJlc29sdmVkIGlzc3VlIG9uCisJCQkgKiBzb21lIG1hY2hpbmVzIHdoZXJlIHN5c3RlbSBldmVudHMgc3BvcmFkaWNhbGx5CisJCQkgKiBiZWNvbWUgZGlzYWJsZWQuICovCisJCQloY2lfd3JpdGUxKEhDSV9TWVNURU1fRVZFTlQsIDEsICZoY2lfcmVzdWx0KTsKKwkJCXByaW50ayhNWV9OT1RJQ0UgIlJlLWVuYWJsZWQgaG90a2V5c1xuIik7CisJCX0KKwl9IHdoaWxlIChoY2lfcmVzdWx0ICE9IEhDSV9FTVBUWSk7Cit9CisKK3N0YXRpYyBpbnQgdG9zaGliYV9hY3BpX3NldHVwX2tleWJvYXJkKGNoYXIgKmRldmljZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9oYW5kbGUgaGFuZGxlOworCWludCByZXN1bHQ7CisJY29uc3Qgc3RydWN0IGtleV9lbnRyeSAqa2V5OworCisJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKE5VTEwsIGRldmljZSwgJmhhbmRsZSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXByaW50ayhNWV9JTkZPICJVbmFibGUgdG8gZ2V0IG5vdGlmaWNhdGlvbiBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl0b3NoaWJhX2FjcGkuaGFuZGxlID0gaGFuZGxlOworCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiRU5BQiIsIE5VTEwsIE5VTEwpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlwcmludGsoTVlfSU5GTyAiVW5hYmxlIHRvIGVuYWJsZSBob3RrZXlzXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGhhbmRsZSwgQUNQSV9ERVZJQ0VfTk9USUZZLAorCQkJCQkgICAgICB0b3NoaWJhX2FjcGlfbm90aWZ5LCBOVUxMKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcHJpbnRrKE1ZX0lORk8gIlVuYWJsZSB0byBpbnN0YWxsIGhvdGtleSBub3RpZmljYXRpb25cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl0b3NoaWJhX2FjcGkuaG90a2V5X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghdG9zaGliYV9hY3BpLmhvdGtleV9kZXYpIHsKKwkJcHJpbnRrKE1ZX0lORk8gIlVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl0b3NoaWJhX2FjcGkuaG90a2V5X2Rldi0+bmFtZSA9ICJUb3NoaWJhIGlucHV0IGRldmljZSI7CisJdG9zaGliYV9hY3BpLmhvdGtleV9kZXYtPnBoeXMgPSBkZXZpY2U7CisJdG9zaGliYV9hY3BpLmhvdGtleV9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwl0b3NoaWJhX2FjcGkuaG90a2V5X2Rldi0+Z2V0a2V5Y29kZSA9IHRvc2hpYmFfYWNwaV9nZXRrZXljb2RlOworCXRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LT5zZXRrZXljb2RlID0gdG9zaGliYV9hY3BpX3NldGtleWNvZGU7CisKKwlmb3IgKGtleSA9IHRvc2hpYmFfYWNwaV9rZXltYXA7IGtleS0+dHlwZSAhPSBLRV9FTkQ7IGtleSsrKSB7CisJCXNldF9iaXQoRVZfS0VZLCB0b3NoaWJhX2FjcGkuaG90a2V5X2Rldi0+ZXZiaXQpOworCQlzZXRfYml0KGtleS0+a2V5Y29kZSwgdG9zaGliYV9hY3BpLmhvdGtleV9kZXYtPmtleWJpdCk7CisJfQorCisJcmVzdWx0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2KTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhNWV9JTkZPICJVbmFibGUgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgdG9zaGliYV9hY3BpX2V4aXQodm9pZCkKIHsKKwlpZiAodG9zaGliYV9hY3BpLmhvdGtleV9kZXYpCisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2KTsKKwogCWlmICh0b3NoaWJhX2FjcGkuYnRfcmZrKSB7CiAJCXJma2lsbF91bnJlZ2lzdGVyKHRvc2hpYmFfYWNwaS5idF9yZmspOwogCQlyZmtpbGxfZGVzdHJveSh0b3NoaWJhX2FjcGkuYnRfcmZrKTsKQEAgLTcyNiw2ICs5MTEsOSBAQAogCWlmICh0b3NoaWJhX3Byb2NfZGlyKQogCQlyZW1vdmVfcHJvY19lbnRyeShQUk9DX1RPU0hJQkEsIGFjcGlfcm9vdF9kaXIpOwogCisJYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIodG9zaGliYV9hY3BpLmhhbmRsZSwgQUNQSV9ERVZJQ0VfTk9USUZZLAorCQkJCSAgIHRvc2hpYmFfYWNwaV9ub3RpZnkpOworCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodG9zaGliYV9hY3BpLnBfZGV2KTsKIAogCXJldHVybjsKQEAgLTc0MiwxMSArOTMwLDE1IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogc2ltcGxlIGRldmljZSBkZXRlY3Rpb246IGxvb2sgZm9yIEhDSSBtZXRob2QgKi8KLQlpZiAoaXNfdmFsaWRfYWNwaV9wYXRoKE1FVEhPRF9IQ0lfMSkpCi0JCW1ldGhvZF9oY2kgPSBNRVRIT0RfSENJXzE7Ci0JZWxzZSBpZiAoaXNfdmFsaWRfYWNwaV9wYXRoKE1FVEhPRF9IQ0lfMikpCi0JCW1ldGhvZF9oY2kgPSBNRVRIT0RfSENJXzI7Ci0JZWxzZQorCWlmIChpc192YWxpZF9hY3BpX3BhdGgoVE9TSF9JTlRFUkZBQ0VfMSBHSENJX01FVEhPRCkpIHsKKwkJbWV0aG9kX2hjaSA9IFRPU0hfSU5URVJGQUNFXzEgR0hDSV9NRVRIT0Q7CisJCWlmICh0b3NoaWJhX2FjcGlfc2V0dXBfa2V5Ym9hcmQoVE9TSF9JTlRFUkZBQ0VfMSkpCisJCQlwcmludGsoTVlfSU5GTyAiVW5hYmxlIHRvIGFjdGl2YXRlIGhvdGtleXNcbiIpOworCX0gZWxzZSBpZiAoaXNfdmFsaWRfYWNwaV9wYXRoKFRPU0hfSU5URVJGQUNFXzIgR0hDSV9NRVRIT0QpKSB7CisJCW1ldGhvZF9oY2kgPSBUT1NIX0lOVEVSRkFDRV8yIEdIQ0lfTUVUSE9EOworCQlpZiAodG9zaGliYV9hY3BpX3NldHVwX2tleWJvYXJkKFRPU0hfSU5URVJGQUNFXzIpKQorCQkJcHJpbnRrKE1ZX0lORk8gIlVuYWJsZSB0byBhY3RpdmF0ZSBob3RrZXlzXG4iKTsKKwl9IGVsc2UKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlwcmludGsoTVlfSU5GTyAiVG9zaGliYSBMYXB0b3AgQUNQSSBFeHRyYXMgdmVyc2lvbiAlc1xuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYmx1ZXRvb3RoLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2JsdWV0b290aC5jCmluZGV4IGEzNTA0MTguLjk0NDA2ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYmx1ZXRvb3RoLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9ibHVldG9vdGguYwpAQCAtNTcsNyArNTcsNyBAQAogc3RhdGljIGludCB0b3NoaWJhX2JsdWV0b290aF9lbmFibGUoYWNwaV9oYW5kbGUgaGFuZGxlKQogewogCWFjcGlfc3RhdHVzIHJlczEsIHJlczI7Ci0JYWNwaV9pbnRlZ2VyIHJlc3VsdDsKKwl1NjQgcmVzdWx0OwogCiAJLyoKIAkgKiBRdWVyeSBBQ1BJIHRvIHZlcmlmeSBSRktpbGwgc3dpdGNoIGlzIHNldCB0byAnb24nLgpAQCAtOTUsNyArOTUsNyBAQAogc3RhdGljIGludCB0b3NoaWJhX2J0X3Jma2lsbF9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCWFjcGlfaW50ZWdlciBidF9wcmVzZW50OworCXU2NCBidF9wcmVzZW50OwogCWludCByZXN1bHQgPSAtRU5PREVWOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3dtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMKaW5kZXggYjEwNDMwMi4uMDllOTkxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMKQEAgLTc5Niw3ICs3OTYsNyBAQAogICovCiBzdGF0aWMgYWNwaV9zdGF0dXMKIGFjcGlfd21pX2VjX3NwYWNlX2hhbmRsZXIodTMyIGZ1bmN0aW9uLCBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywKLQkJICAgICAgdTMyIGJpdHMsIGFjcGlfaW50ZWdlciAqIHZhbHVlLAorCQkgICAgICB1MzIgYml0cywgdTY0ICp2YWx1ZSwKIAkJICAgICAgdm9pZCAqaGFuZGxlcl9jb250ZXh0LCB2b2lkICpyZWdpb25fY29udGV4dCkKIHsKIAlpbnQgcmVzdWx0ID0gMCwgaSA9IDA7CkBAIC04MTMsNyArODEzLDcgQEAKIAogCWlmIChmdW5jdGlvbiA9PSBBQ1BJX1JFQUQpIHsKIAkJcmVzdWx0ID0gZWNfcmVhZChhZGRyZXNzLCAmdGVtcCk7Ci0JCSgqdmFsdWUpIHw9ICgoYWNwaV9pbnRlZ2VyKXRlbXApIDw8IGk7CisJCSgqdmFsdWUpIHw9ICgodTY0KXRlbXApIDw8IGk7CiAJfSBlbHNlIHsKIAkJdGVtcCA9IDB4ZmYgJiAoKCp2YWx1ZSkgPj4gaSk7CiAJCXJlc3VsdCA9IGVjX3dyaXRlKGFkZHJlc3MsIHRlbXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci93bTk3eHhfYmF0dGVyeS5jIGIvZHJpdmVycy9wb3dlci93bTk3eHhfYmF0dGVyeS5jCmluZGV4IGZhMzllNzUuLjZlYTNjYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvd205N3h4X2JhdHRlcnkuYworKysgYi9kcml2ZXJzL3Bvd2VyL3dtOTd4eF9iYXR0ZXJ5LmMKQEAgLTE3NSw4ICsxNzUsMTQgQEAKIAkJZGV2X2VycigmZGV2LT5kZXYsICJEbyBub3QgcGFzcyBwbGF0Zm9ybV9kYXRhIHRocm91Z2ggIgogCQkJIndtOTd4eF9iYXRfc2V0X3BkYXRhIVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZQotCQlwZGF0YSA9IHdtZGF0YS0+YmF0dF9wZGF0YTsKKwl9CisKKwlpZiAoIXdtZGF0YSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwZGF0YSA9IHdtZGF0YS0+YmF0dF9wZGF0YTsKIAogCWlmIChkZXYtPmlkICE9IC0xKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHMzL3BzM2F2LmMgYi9kcml2ZXJzL3BzMy9wczNhdi5jCmluZGV4IGU4MmQ4YzkuLjk1YTY4OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHMzL3BzM2F2LmMKKysrIGIvZHJpdmVycy9wczMvcHMzYXYuYwpAQCAtNTMyLDcgKzUzMiw3IEBACiAJcmVzID0gcHMzYXZfY21kX2F2Yl9wYXJhbSgmYXZiX3BhcmFtLCBsZW4pOwogCWlmIChyZXMgPT0gUFMzQVZfU1RBVFVTX05PX1NZTkNfSEVBRCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIiVzOiBDb21tYW5kIGZhaWxlZC4gUGxlYXNlIHRyeSB5b3VyIHJlcXVlc3QgYWdhaW4uIFxuIiwKKwkJICAgICAgICIlczogQ29tbWFuZCBmYWlsZWQuIFBsZWFzZSB0cnkgeW91ciByZXF1ZXN0IGFnYWluLlxuIiwKIAkJICAgICAgIF9fZnVuY19fKTsKIAllbHNlIGlmIChyZXMpCiAJCWRldl9kYmcoJnBzM2F2LT5kZXYtPmNvcmUsICJwczNhdl9jbWRfYXZiX3BhcmFtIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKaW5kZXggNjg2ZWYyNy4uYjYwYTRjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwpAQCAtNjYxLDcgKzY2MSw3IEBACiBzdGF0aWMgdm9pZCBwcmludF9jb25zdHJhaW50cyhzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqY29uc3RyYWludHMgPSByZGV2LT5jb25zdHJhaW50czsKLQljaGFyIGJ1Zls4MF07CisJY2hhciBidWZbODBdID0gIiI7CiAJaW50IGNvdW50ID0gMDsKIAlpbnQgcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9scDM5NzEuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2xwMzk3MS5jCmluZGV4IDc2ZDA4YzIuLjRmMzNhMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2xwMzk3MS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2xwMzk3MS5jCkBAIC0xODMsNyArMTgzLDcgQEAKIAkJaWYgKHZvbF9tYXBbdmFsXSA+PSBtaW5fdm9sKQogCQkJYnJlYWs7CiAKLQlpZiAodm9sX21hcFt2YWxdID4gbWF4X3ZvbCkKKwlpZiAodmFsID4gTERPX1ZPTF9NQVhfSURYIHx8IHZvbF9tYXBbdmFsXSA+IG1heF92b2wpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIGxwMzk3MV9zZXRfYml0cyhscDM5NzEsIExQMzk3MV9MRE9fVk9MX0NPTlRSX1JFRyhsZG8pLApAQCAtMjcyLDcgKzI3Miw3IEBACiAJCWlmICh2b2xfbWFwW3ZhbF0gPj0gbWluX3ZvbCkKIAkJCWJyZWFrOwogCi0JaWYgKHZvbF9tYXBbdmFsXSA+IG1heF92b2wpCisJaWYgKHZhbCA+IEJVQ0tfVEFSR0VUX1ZPTF9NQVhfSURYIHx8IHZvbF9tYXBbdmFsXSA+IG1heF92b2wpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0ID0gbHAzOTcxX3NldF9iaXRzKGxwMzk3MSwgTFAzOTcxX0JVQ0tfVEFSR0VUX1ZPTDFfUkVHKGJ1Y2spLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jCmluZGV4IDFiYmZmMDkuLmU3Yjg5ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzNTAtcmVndWxhdG9yLmMKQEAgLTE1MDQsNyArMTUwNCw4IEBACiAJbGVkLT5pc2lua19pbml0LmNvbnN1bWVyX3N1cHBsaWVzID0gJmxlZC0+aXNpbmtfY29uc3VtZXI7CiAJbGVkLT5pc2lua19pbml0LmNvbnN0cmFpbnRzLm1pbl91QSA9IDA7CiAJbGVkLT5pc2lua19pbml0LmNvbnN0cmFpbnRzLm1heF91QSA9IHBkYXRhLT5tYXhfdUE7Ci0JbGVkLT5pc2lua19pbml0LmNvbnN0cmFpbnRzLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9DVVJSRU5UOworCWxlZC0+aXNpbmtfaW5pdC5jb25zdHJhaW50cy52YWxpZF9vcHNfbWFzaworCQk9IFJFR1VMQVRPUl9DSEFOR0VfQ1VSUkVOVCB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTOwogCWxlZC0+aXNpbmtfaW5pdC5jb25zdHJhaW50cy52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMOwogCXJldCA9IHdtODM1MF9yZWdpc3Rlcl9yZWd1bGF0b3Iod204MzUwLCBpc2luaywgJmxlZC0+aXNpbmtfaW5pdCk7CiAJaWYgKHJldCAhPSAwKSB7CkBAIC0xNTE3LDYgKzE1MTgsNyBAQAogCWxlZC0+ZGNkY19pbml0Lm51bV9jb25zdW1lcl9zdXBwbGllcyA9IDE7CiAJbGVkLT5kY2RjX2luaXQuY29uc3VtZXJfc3VwcGxpZXMgPSAmbGVkLT5kY2RjX2NvbnN1bWVyOwogCWxlZC0+ZGNkY19pbml0LmNvbnN0cmFpbnRzLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7CisJbGVkLT5kY2RjX2luaXQuY29uc3RyYWludHMudmFsaWRfb3BzX21hc2sgPSAgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVM7CiAJcmV0ID0gd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIGRjZGMsICZsZWQtPmRjZGNfaW5pdCk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9LY29uZmlnIGIvZHJpdmVycy9ydGMvS2NvbmZpZwppbmRleCA4MTY3ZTllLi4yYmI4YThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcnRjL0tjb25maWcKQEAgLTg2OCw0ICs4NjgsMTQgQEAKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBNQzEzNzgzIFBNSUMgUlRDCiAKK2NvbmZpZyBSVENfRFJWX01QQzUxMjEKKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIE1QQzUxMjEgYnVpbHQtaW4gUlRDIgorCWRlcGVuZHMgb24gUFBDX01QQzUxMnggJiYgUlRDX0NMQVNTCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlCisJICBidWlsdC1pbiBSVEMgTVBDNTEyMS4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtbXBjNTEyMS4KKwogZW5kaWYgIyBSVENfQ0xBU1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL01ha2VmaWxlIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKaW5kZXggZTUxNjBmZC4uYjcxNDhhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKQEAgLTU1LDYgKzU1LDcgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX01BWDY5MDIpCSs9IHJ0Yy1tYXg2OTAyLm8KIG9iai0kKENPTkZJR19SVENfRFJWX01DMTM3ODMpCSs9IHJ0Yy1tYzEzNzgzLm8KIG9iai0kKENPTkZJR19SVENfRFJWX01TTTYyNDIpCSs9IHJ0Yy1tc202MjQyLm8KK29iai0kKENPTkZJR19SVENfRFJWX01QQzUxMjEpCSs9IHJ0Yy1tcGM1MTIxLm8KIG9iai0kKENPTkZJR19SVENfRFJWX01WKQkrPSBydGMtbXYubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTlVDOTAwKQkrPSBydGMtbnVjOTAwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX09NQVApCSs9IHJ0Yy1vbWFwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1mbTMxMzAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1mbTMxMzAuYwppbmRleCAzYTdiZTExLi44MTJjNjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZm0zMTMwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWZtMzEzMC5jCkBAIC0zNzYsMjAgKzM3NiwyMiBAQAogCX0KIAogCS8qIERpc2FibGluZyBjYWxpYnJhdGlvbiBtb2RlICovCi0JaWYgKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICYgRk0zMTMwX1JUQ19DT05UUk9MX0JJVF9DQUwpCisJaWYgKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICYgRk0zMTMwX1JUQ19DT05UUk9MX0JJVF9DQUwpIHsKIAkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEZNMzEzMF9SVENfQ09OVFJPTCwKIAkJCWZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICYKIAkJCQl+KEZNMzEzMF9SVENfQ09OVFJPTF9CSVRfQ0FMKSk7CiAJCWRldl93YXJuKCZjbGllbnQtPmRldiwgIkRpc2FibGluZyBjYWxpYnJhdGlvbiBtb2RlIVxuIik7CisJfQogCiAJLyogRGlzYWJsaW5nIHJlYWQgYW5kIHdyaXRlIG1vZGVzICovCiAJaWYgKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICYgRk0zMTMwX1JUQ19DT05UUk9MX0JJVF9XUklURSB8fAotCSAgICBmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19DT05UUk9MXSAmIEZNMzEzMF9SVENfQ09OVFJPTF9CSVRfUkVBRCkKKwkgICAgZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfQ09OVFJPTF0gJiBGTTMxMzBfUlRDX0NPTlRST0xfQklUX1JFQUQpIHsKIAkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEZNMzEzMF9SVENfQ09OVFJPTCwKIAkJCWZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICYKIAkJCQl+KEZNMzEzMF9SVENfQ09OVFJPTF9CSVRfUkVBRCB8CiAJCQkJCUZNMzEzMF9SVENfQ09OVFJPTF9CSVRfV1JJVEUpKTsKIAkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiRGlzYWJsaW5nIFJFQUQgb3IgV1JJVEUgbW9kZSFcbiIpOworCX0KIAogCS8qIG9zY2lsbGF0b3Igb2ZmPyAgdHVybiBpdCBvbiwgc28gY2xvY2sgY2FuIHRpY2suICovCiAJaWYgKGZtMzEzMC0+cmVnc1tGTTMxMzBfQ0FMX0NPTlRST0xdICYgRk0zMTMwX0NBTF9DT05UUk9MX0JJVF9uT1NDRU4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbXBjNTEyMS5jIGIvZHJpdmVycy9ydGMvcnRjLW1wYzUxMjEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzEzY2EwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLW1wYzUxMjEuYwpAQCAtMCwwICsxLDM4NyBAQAorLyoKKyAqIFJlYWwtdGltZSBjbG9jayBkcml2ZXIgZm9yIE1QQzUxMjEKKyAqCisgKiBDb3B5cmlnaHQgMjAwNywgRG9tZW4gUHVuY2VyIDxkb21lbi5wdW5jZXJAdGVsYXJnby5jb20+CisgKiBDb3B5cmlnaHQgMjAwOCwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCitzdHJ1Y3QgbXBjNTEyMV9ydGNfcmVncyB7CisJdTggc2V0X3RpbWU7CQkvKiBSVEMgKyAweDAwICovCisJdTggaG91cl9zZXQ7CQkvKiBSVEMgKyAweDAxICovCisJdTggbWludXRlX3NldDsJCS8qIFJUQyArIDB4MDIgKi8KKwl1OCBzZWNvbmRfc2V0OwkJLyogUlRDICsgMHgwMyAqLworCisJdTggc2V0X2RhdGU7CQkvKiBSVEMgKyAweDA0ICovCisJdTggbW9udGhfc2V0OwkJLyogUlRDICsgMHgwNSAqLworCXU4IHdlZWtkYXlfc2V0OwkJLyogUlRDICsgMHgwNiAqLworCXU4IGRhdGVfc2V0OwkJLyogUlRDICsgMHgwNyAqLworCisJdTggd3JpdGVfc3c7CQkvKiBSVEMgKyAweDA4ICovCisJdTggc3dfc2V0OwkJLyogUlRDICsgMHgwOSAqLworCXUxNiB5ZWFyX3NldDsJCS8qIFJUQyArIDB4MGEgKi8KKworCXU4IGFsbV9lbmFibGU7CQkvKiBSVEMgKyAweDBjICovCisJdTggYWxtX2hvdXJfc2V0OwkvKiBSVEMgKyAweDBkICovCisJdTggYWxtX21pbl9zZXQ7CQkvKiBSVEMgKyAweDBlICovCisJdTggaW50X2VuYWJsZTsJCS8qIFJUQyArIDB4MGYgKi8KKworCXU4IHJlc2VydmVkMTsKKwl1OCBob3VyOwkJLyogUlRDICsgMHgxMSAqLworCXU4IG1pbnV0ZTsJCS8qIFJUQyArIDB4MTIgKi8KKwl1OCBzZWNvbmQ7CQkvKiBSVEMgKyAweDEzICovCisKKwl1OCBtb250aDsJCS8qIFJUQyArIDB4MTQgKi8KKwl1OCB3ZGF5X21kYXk7CQkvKiBSVEMgKyAweDE1ICovCisJdTE2IHllYXI7CQkvKiBSVEMgKyAweDE2ICovCisKKwl1OCBpbnRfYWxtOwkJLyogUlRDICsgMHgxOCAqLworCXU4IGludF9zdzsJCS8qIFJUQyArIDB4MTkgKi8KKwl1OCBhbG1fc3RhdHVzOwkJLyogUlRDICsgMHgxYSAqLworCXU4IHN3X21pbnV0ZTsJCS8qIFJUQyArIDB4MWIgKi8KKworCXU4IGJ1c19lcnJvcl8xOwkJLyogUlRDICsgMHgxYyAqLworCXU4IGludF9kYXk7CQkvKiBSVEMgKyAweDFkICovCisJdTggaW50X21pbjsJCS8qIFJUQyArIDB4MWUgKi8KKwl1OCBpbnRfc2VjOwkJLyogUlRDICsgMHgxZiAqLworCisJLyoKKwkgKiB0YXJnZXRfdGltZToKKwkgKglpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBoaWJlcm5hdGlvbiBidXQgaGliZXJuYXRpb24KKwkgKglkb2VzIG5vdCB3b3JrIG9uIHNpbGljb24gcmV2IDEuNSBzbyB1c2UgaXQgZm9yIG5vbi12b2xhdGlsZQorCSAqCXN0b3JhZ2Ugb2Ygb2Zmc2V0IGJldHdlZW4gdGhlIGFjdHVhbF90aW1lIHJlZ2lzdGVyIGFuZCBsaW51eAorCSAqCXRpbWUKKwkgKi8KKwl1MzIgdGFyZ2V0X3RpbWU7CS8qIFJUQyArIDB4MjAgKi8KKwkvKgorCSAqIGFjdHVhbF90aW1lOgorCSAqIAlyZWFkb25seSB0aW1lIHNpbmNlIFZCQVRfUlRDIHdhcyBsYXN0IGNvbm5lY3RlZAorCSAqLworCXUzMiBhY3R1YWxfdGltZTsJLyogUlRDICsgMHgyNCAqLworCXUzMiBrZWVwX2FsaXZlOwkJLyogUlRDICsgMHgyOCAqLworfTsKKworc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgeworCXVuc2lnbmVkIGlycTsKKwl1bnNpZ25lZCBpcnFfcGVyaW9kaWM7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXN0cnVjdCBydGNfd2thbHJtIHdrYWxhcm07Cit9OworCisvKgorICogVXBkYXRlIHNlY29uZC9taW51dGUvaG91ciByZWdpc3RlcnMuCisgKgorICogVGhpcyBpcyBqdXN0IHNvIGFsYXJtIHdpbGwgd29yay4KKyAqLworc3RhdGljIHZvaWQgbXBjNTEyMV9ydGNfdXBkYXRlX3NtaChzdHJ1Y3QgbXBjNTEyMV9ydGNfcmVncyBfX2lvbWVtICpyZWdzLAorCQkJCSAgIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJb3V0XzgoJnJlZ3MtPnNlY29uZF9zZXQsIHRtLT50bV9zZWMpOworCW91dF84KCZyZWdzLT5taW51dGVfc2V0LCB0bS0+dG1fbWluKTsKKwlvdXRfOCgmcmVncy0+aG91cl9zZXQsIHRtLT50bV9ob3VyKTsKKworCS8qIHNldCB0aW1lIHNlcXVlbmNlICovCisJb3V0XzgoJnJlZ3MtPnNldF90aW1lLCAweDEpOworCW91dF84KCZyZWdzLT5zZXRfdGltZSwgMHgzKTsKKwlvdXRfOCgmcmVncy0+c2V0X3RpbWUsIDB4MSk7CisJb3V0XzgoJnJlZ3MtPnNldF90aW1lLCAweDApOworfQorCitzdGF0aWMgaW50IG1wYzUxMjFfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisJdW5zaWduZWQgbG9uZyBub3c7CisKKwkvKgorCSAqIGxpbnV4IHRpbWUgaXMgYWN0dWFsX3RpbWUgcGx1cyB0aGUgb2Zmc2V0IHNhdmVkIGluIHRhcmdldF90aW1lCisJICovCisJbm93ID0gaW5fYmUzMigmcmVncy0+YWN0dWFsX3RpbWUpICsgaW5fYmUzMigmcmVncy0+dGFyZ2V0X3RpbWUpOworCisJcnRjX3RpbWVfdG9fdG0obm93LCB0bSk7CisKKwkvKgorCSAqIHVwZGF0ZSBzZWNvbmQgbWludXRlIGhvdXIgcmVnaXN0ZXJzCisJICogc28gYWxhcm1zIHdpbGwgd29yaworCSAqLworCW1wYzUxMjFfcnRjX3VwZGF0ZV9zbWgocmVncywgdG0pOworCisJcmV0dXJuIHJ0Y192YWxpZF90bSh0bSk7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTEyMV9ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfcmVncyBfX2lvbWVtICpyZWdzID0gcnRjLT5yZWdzOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBub3c7CisKKwkvKgorCSAqIFRoZSBhY3R1YWxfdGltZSByZWdpc3RlciBpcyByZWFkIG9ubHkgc28gd2Ugd3JpdGUgdGhlIG9mZnNldAorCSAqIGJldHdlZW4gaXQgYW5kIGxpbnV4IHRpbWUgdG8gdGhlIHRhcmdldF90aW1lIHJlZ2lzdGVyLgorCSAqLworCXJldCA9IHJ0Y190bV90b190aW1lKHRtLCAmbm93KTsKKwlpZiAocmV0ID09IDApCisJCW91dF9iZTMyKCZyZWdzLT50YXJnZXRfdGltZSwgbm93IC0gaW5fYmUzMigmcmVncy0+YWN0dWFsX3RpbWUpKTsKKworCS8qCisJICogdXBkYXRlIHNlY29uZCBtaW51dGUgaG91ciByZWdpc3RlcnMKKwkgKiBzbyBhbGFybXMgd2lsbCB3b3JrCisJICovCisJbXBjNTEyMV9ydGNfdXBkYXRlX3NtaChyZWdzLCB0bSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGM1MTIxX3J0Y19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfcmVncyBfX2lvbWVtICpyZWdzID0gcnRjLT5yZWdzOworCisJKmFsYXJtID0gcnRjLT53a2FsYXJtOworCisJYWxhcm0tPnBlbmRpbmcgPSBpbl84KCZyZWdzLT5hbG1fc3RhdHVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wYzUxMjFfcnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKworCS8qCisJICogdGhlIGFsYXJtIGhhcyBubyBzZWNvbmRzIHNvIGRlYWwgd2l0aCBpdAorCSAqLworCWlmIChhbGFybS0+dGltZS50bV9zZWMpIHsKKwkJYWxhcm0tPnRpbWUudG1fc2VjID0gMDsKKwkJYWxhcm0tPnRpbWUudG1fbWluKys7CisJCWlmIChhbGFybS0+dGltZS50bV9taW4gPj0gNjApIHsKKwkJCWFsYXJtLT50aW1lLnRtX21pbiA9IDA7CisJCQlhbGFybS0+dGltZS50bV9ob3VyKys7CisJCQlpZiAoYWxhcm0tPnRpbWUudG1faG91ciA+PSAyNCkKKwkJCQlhbGFybS0+dGltZS50bV9ob3VyID0gMDsKKwkJfQorCX0KKworCWFsYXJtLT50aW1lLnRtX21kYXkgPSAtMTsKKwlhbGFybS0+dGltZS50bV9tb24gPSAtMTsKKwlhbGFybS0+dGltZS50bV95ZWFyID0gLTE7CisKKwlvdXRfOCgmcmVncy0+YWxtX21pbl9zZXQsIGFsYXJtLT50aW1lLnRtX21pbik7CisJb3V0XzgoJnJlZ3MtPmFsbV9ob3VyX3NldCwgYWxhcm0tPnRpbWUudG1faG91cik7CisKKwlvdXRfOCgmcmVncy0+YWxtX2VuYWJsZSwgYWxhcm0tPmVuYWJsZWQpOworCisJcnRjLT53a2FsYXJtID0gKmFsYXJtOworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXBjNTEyMV9ydGNfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YSgoc3RydWN0IGRldmljZSAqKWRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKworCWlmIChpbl84KCZyZWdzLT5pbnRfYWxtKSkgeworCQkvKiBhY2tub3dsZWRnZSBhbmQgY2xlYXIgc3RhdHVzICovCisJCW91dF84KCZyZWdzLT5pbnRfYWxtLCAxKTsKKwkJb3V0XzgoJnJlZ3MtPmFsbV9zdGF0dXMsIDEpOworCisJCXJ0Y191cGRhdGVfaXJxKHJ0Yy0+cnRjLCAxLCBSVENfSVJRRiB8IFJUQ19BRik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtcGM1MTIxX3J0Y19oYW5kbGVyX3VwZChpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YSgoc3RydWN0IGRldmljZSAqKWRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKworCWlmIChpbl84KCZyZWdzLT5pbnRfc2VjKSAmJiAoaW5fOCgmcmVncy0+aW50X2VuYWJsZSkgJiAweDEpKSB7CisJCS8qIGFja25vd2xlZGdlICovCisJCW91dF84KCZyZWdzLT5pbnRfc2VjLCAxKTsKKworCQlydGNfdXBkYXRlX2lycShydGMtPnJ0YywgMSwgUlRDX0lSUUYgfCBSVENfVUYpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgaW50IG1wYzUxMjFfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQl1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKwlpbnQgdmFsOworCisJaWYgKGVuYWJsZWQpCisJCXZhbCA9IDE7CisJZWxzZQorCQl2YWwgPSAwOworCisJb3V0XzgoJnJlZ3MtPmFsbV9lbmFibGUsIHZhbCk7CisJcnRjLT53a2FsYXJtLmVuYWJsZWQgPSB2YWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGM1MTIxX3J0Y191cGRhdGVfaXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKwlpbnQgdmFsOworCisJdmFsID0gaW5fOCgmcmVncy0+aW50X2VuYWJsZSk7CisKKwlpZiAoZW5hYmxlZCkKKwkJdmFsID0gKHZhbCAmIH4weDgpIHwgMHgxOworCWVsc2UKKwkJdmFsICY9IH4weDE7CisKKwlvdXRfOCgmcmVncy0+aW50X2VuYWJsZSwgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgbXBjNTEyMV9ydGNfb3BzID0geworCS5yZWFkX3RpbWUgPSBtcGM1MTIxX3J0Y19yZWFkX3RpbWUsCisJLnNldF90aW1lID0gbXBjNTEyMV9ydGNfc2V0X3RpbWUsCisJLnJlYWRfYWxhcm0gPSBtcGM1MTIxX3J0Y19yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0gPSBtcGM1MTIxX3J0Y19zZXRfYWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSBtcGM1MTIxX3J0Y19hbGFybV9pcnFfZW5hYmxlLAorCS51cGRhdGVfaXJxX2VuYWJsZSA9IG1wYzUxMjFfcnRjX3VwZGF0ZV9pcnFfZW5hYmxlLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbXBjNTEyMV9ydGNfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsCisJCQkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGM7CisJaW50IGVyciA9IDA7CisJdTMyIGthOworCisJcnRjID0ga3phbGxvYyhzaXplb2YoKnJ0YyksIEdGUF9LRVJORUwpOworCWlmICghcnRjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ0Yy0+cmVncyA9IG9mX2lvbWFwKG9wLT5ub2RlLCAwKTsKKwlpZiAoIXJ0Yy0+cmVncykgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiJXM6IGNvdWxkbid0IG1hcCBpbyBzcGFjZVxuIiwgX19mdW5jX18pOworCQllcnIgPSAtRU5PU1lTOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCWRldmljZV9pbml0X3dha2V1cCgmb3AtPmRldiwgMSk7CisKKwlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIHJ0Yyk7CisKKwlydGMtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5ub2RlLCAxKTsKKwllcnIgPSByZXF1ZXN0X2lycShydGMtPmlycSwgbXBjNTEyMV9ydGNfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwKKwkJCQkJCSJtcGM1MTIxLXJ0YyIsICZvcC0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICIlczogY291bGQgbm90IHJlcXVlc3QgaXJxOiAlaVxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcnRjLT5pcnEpOworCQlnb3RvIG91dF9kaXNwb3NlOworCX0KKworCXJ0Yy0+aXJxX3BlcmlvZGljID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob3AtPm5vZGUsIDApOworCWVyciA9IHJlcXVlc3RfaXJxKHJ0Yy0+aXJxX3BlcmlvZGljLCBtcGM1MTIxX3J0Y19oYW5kbGVyX3VwZCwKKwkJCQlJUlFGX0RJU0FCTEVELCAibXBjNTEyMS1ydGNfdXBkIiwgJm9wLT5kZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2Vycigmb3AtPmRldiwgIiVzOiBjb3VsZCBub3QgcmVxdWVzdCBpcnE6ICVpXG4iLAorCQkJCQkJX19mdW5jX18sIHJ0Yy0+aXJxX3BlcmlvZGljKTsKKwkJZ290byBvdXRfZGlzcG9zZTI7CisJfQorCisJa2EgPSBpbl9iZTMyKCZydGMtPnJlZ3MtPmtlZXBfYWxpdmUpOworCWlmIChrYSAmIDB4MDIpIHsKKwkJZGV2X3dhcm4oJm9wLT5kZXYsCisJCQkibXBjNTEyMS1ydGM6IEJhdHRlcnkgb3Igb3NjaWxsYXRvciBmYWlsdXJlIVxuIik7CisJCW91dF9iZTMyKCZydGMtPnJlZ3MtPmtlZXBfYWxpdmUsIGthKTsKKwl9CisKKwlydGMtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoIm1wYzUxMjEtcnRjIiwgJm9wLT5kZXYsCisJCQkJCSZtcGM1MTIxX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKHJ0Yy0+cnRjKSkgeworCQllcnIgPSBQVFJfRVJSKHJ0Yy0+cnRjKTsKKwkJZ290byBvdXRfZnJlZV9pcnE7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9mcmVlX2lycToKKwlmcmVlX2lycShydGMtPmlycV9wZXJpb2RpYywgJm9wLT5kZXYpOworb3V0X2Rpc3Bvc2UyOgorCWlycV9kaXNwb3NlX21hcHBpbmcocnRjLT5pcnFfcGVyaW9kaWMpOworCWZyZWVfaXJxKHJ0Yy0+aXJxLCAmb3AtPmRldik7CitvdXRfZGlzcG9zZToKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKHJ0Yy0+aXJxKTsKKwlpb3VubWFwKHJ0Yy0+cmVncyk7CitvdXRfZnJlZToKKwlrZnJlZShydGMpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbXBjNTEyMV9ydGNfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdCwgc28gdGhlcmUgYXJlIG5vIG5hc3R5IHN1cnByaXNlcyAqLworCW91dF84KCZyZWdzLT5hbG1fZW5hYmxlLCAwKTsKKwlvdXRfOCgmcmVncy0+aW50X2VuYWJsZSwgaW5fOCgmcmVncy0+aW50X2VuYWJsZSkgJiB+MHgxKTsKKworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMtPnJ0Yyk7CisJaW91bm1hcChydGMtPnJlZ3MpOworCWZyZWVfaXJxKHJ0Yy0+aXJxLCAmb3AtPmRldik7CisJZnJlZV9pcnEocnRjLT5pcnFfcGVyaW9kaWMsICZvcC0+ZGV2KTsKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKHJ0Yy0+aXJxKTsKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKHJ0Yy0+aXJxX3BlcmlvZGljKTsKKwlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIE5VTEwpOworCWtmcmVlKHJ0Yyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTEyMV9ydGNfbWF0Y2hbXSBfX2RldmluaXRkYXRhID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtcnRjIiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG1wYzUxMjFfcnRjX2RyaXZlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJtcGM1MTIxLXJ0YyIsCisJLm1hdGNoX3RhYmxlID0gbXBjNTEyMV9ydGNfbWF0Y2gsCisJLnByb2JlID0gbXBjNTEyMV9ydGNfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG1wYzUxMjFfcnRjX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtcGM1MTIxX3J0Y19pbml0KHZvaWQpCit7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTEyMV9ydGNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KG1wYzUxMjFfcnRjX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbXBjNTEyMV9ydGNfZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGM1MTIxX3J0Y19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobXBjNTEyMV9ydGNfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkpvaG4gUmlnYnkgPGpjcmlnYnlAZ21haWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYwppbmRleCAwMjY0YjExLi5jMjU2YWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYwpAQCAtNyw2ICs3LDkgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwNiAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICoKKyAqIEF1dGhvcjogTWlhbiBZb3VzYWYgS2F1a2FiIDxtaWFuLnlvdXNhZi5rYXVrYWJAc3Rlcmljc3Nvbi5jb20+CisgKiBDb3B5cmlnaHQgMjAxMCAoYykgU1QtRXJpY3Nzb24gQUIKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCkBAIC0xOCw2ICsyMSw5IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCiAvKgogICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMKQEAgLTMwLDM1ICszNiwyMDcgQEAKICNkZWZpbmUJUlRDX1JJUwkJMHgxNAkvKiBSYXcgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZQlSVENfTUlTCQkweDE4CS8qIE1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCiAjZGVmaW5lCVJUQ19JQ1IJCTB4MWMJLyogSW50ZXJydXB0IGNsZWFyIHJlZ2lzdGVyICovCisvKiBTVCB2YXJpYW50cyBoYXZlIGFkZGl0aW9uYWwgdGltZXIgZnVuY3Rpb25hbGl0eSAqLworI2RlZmluZSBSVENfVERSCQkweDIwCS8qIFRpbWVyIGRhdGEgcmVhZCByZWdpc3RlciAqLworI2RlZmluZSBSVENfVExSCQkweDI0CS8qIFRpbWVyIGRhdGEgbG9hZCByZWdpc3RlciAqLworI2RlZmluZSBSVENfVENSCQkweDI4CS8qIFRpbWVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRDX1lEUgkJMHgzMAkvKiBZZWFyIGRhdGEgcmVhZCByZWdpc3RlciAqLworI2RlZmluZSBSVENfWU1SCQkweDM0CS8qIFllYXIgbWF0Y2ggcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRDX1lMUgkJMHgzOAkvKiBZZWFyIGRhdGEgbG9hZCByZWdpc3RlciAqLworCisjZGVmaW5lIFJUQ19DUl9DV0VOCSgxIDw8IDI2KQkvKiBDbG9ja3dhdGNoIGVuYWJsZSBiaXQgKi8KKworI2RlZmluZSBSVENfVENSX0VOCSgxIDw8IDEpIC8qIFBlcmlvZGljIHRpbWVyIGVuYWJsZSBiaXQgKi8KKworLyogQ29tbW9uIGJpdCBkZWZpbml0aW9ucyBmb3IgSW50ZXJydXB0IHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUlRDX0JJVF9BSQkoMSA8PCAwKSAvKiBBbGFybSBpbnRlcnJ1cHQgYml0ICovCisjZGVmaW5lIFJUQ19CSVRfUEkJKDEgPDwgMSkgLyogUGVyaW9kaWMgaW50ZXJydXB0IGJpdC4gU1QgdmFyaWFudHMgb25seS4gKi8KKworLyogQ29tbW9uIGJpdCBkZWZpbmF0aW9ucyBmb3IgU1QgdjIgZm9yIHJlYWRpbmcvd3JpdGluZyB0aW1lICovCisjZGVmaW5lIFJUQ19TRUNfU0hJRlQgMAorI2RlZmluZSBSVENfU0VDX01BU0sgKDB4M0YgPDwgUlRDX1NFQ19TSElGVCkgLyogU2Vjb25kIFswLTU5XSAqLworI2RlZmluZSBSVENfTUlOX1NISUZUIDYKKyNkZWZpbmUgUlRDX01JTl9NQVNLICgweDNGIDw8IFJUQ19NSU5fU0hJRlQpIC8qIE1pbnV0ZSBbMC01OV0gKi8KKyNkZWZpbmUgUlRDX0hPVVJfU0hJRlQgMTIKKyNkZWZpbmUgUlRDX0hPVVJfTUFTSyAoMHgxRiA8PCBSVENfSE9VUl9TSElGVCkgLyogSG91ciBbMC0yM10gKi8KKyNkZWZpbmUgUlRDX1dEQVlfU0hJRlQgMTcKKyNkZWZpbmUgUlRDX1dEQVlfTUFTSyAoMHg3IDw8IFJUQ19XREFZX1NISUZUKSAvKiBEYXkgb2YgV2VlayBbMS03XSAxPVN1bmRheSAqLworI2RlZmluZSBSVENfTURBWV9TSElGVCAyMAorI2RlZmluZSBSVENfTURBWV9NQVNLICgweDFGIDw8IFJUQ19NREFZX1NISUZUKSAvKiBEYXkgb2YgTW9udGggWzEtMzFdICovCisjZGVmaW5lIFJUQ19NT05fU0hJRlQgMjUKKyNkZWZpbmUgUlRDX01PTl9NQVNLICgweEYgPDwgUlRDX01PTl9TSElGVCkgLyogTW9udGggWzEtMTJdIDE9SmFudWFyeSAqLworCisjZGVmaW5lIFJUQ19USU1FUl9GUkVRIDMyNzY4CiAKIHN0cnVjdCBwbDAzMV9sb2NhbCB7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CisJdTggaHdfZGVzaWduZXI7CisJdTggaHdfcmV2aXNpb246NDsKIH07CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBwbDAzMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGludCBwbDAzMV9hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwl1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKLQlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gZGV2X2lkOworCXN0cnVjdCBwbDAzMV9sb2NhbCAqbGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGltc2M7CiAKLQlydGNfdXBkYXRlX2lycShydGMsIDEsIFJUQ19BRik7CisJLyogQ2xlYXIgYW55IHBlbmRpbmcgYWxhcm0gaW50ZXJydXB0cy4gKi8KKwl3cml0ZWwoUlRDX0JJVF9BSSwgbGRhdGEtPmJhc2UgKyBSVENfSUNSKTsKIAotCXJldHVybiBJUlFfSEFORExFRDsKKwlpbXNjID0gcmVhZGwobGRhdGEtPmJhc2UgKyBSVENfSU1TQyk7CisKKwlpZiAoZW5hYmxlZCA9PSAxKQorCQl3cml0ZWwoaW1zYyB8IFJUQ19CSVRfQUksIGxkYXRhLT5iYXNlICsgUlRDX0lNU0MpOworCWVsc2UKKwkJd3JpdGVsKGltc2MgJiB+UlRDX0JJVF9BSSwgbGRhdGEtPmJhc2UgKyBSVENfSU1TQyk7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwbDAzMV9pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorLyoKKyAqIENvbnZlcnQgR3JlZ29yaWFuIGRhdGUgdG8gU1QgdjIgUlRDIGZvcm1hdC4KKyAqLworc3RhdGljIGludCBwbDAzMV9zdHYyX3RtX3RvX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgcnRjX3RpbWUgKnRtLCB1bnNpZ25lZCBsb25nICpzdF90aW1lLAorCXVuc2lnbmVkIGxvbmcgKmJjZF95ZWFyKQoreworCWludCB5ZWFyID0gdG0tPnRtX3llYXIgKyAxOTAwOworCWludCB3ZGF5ID0gdG0tPnRtX3dkYXk7CisKKwkvKiB3ZGF5IG1hc2tpbmcgaXMgbm90IHdvcmtpbmcgaW4gaGFyZHdhcmUgc28gd2RheSBtdXN0IGJlIHZhbGlkICovCisJaWYgKHdkYXkgPCAtMSB8fCB3ZGF5ID4gNikgeworCQlkZXZfZXJyKGRldiwgImludmFsaWQgd2RheSB2YWx1ZSAlZFxuIiwgdG0tPnRtX3dkYXkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKHdkYXkgPT0gLTEpIHsKKwkJLyogd2RheSBpcyBub3QgcHJvdmlkZWQsIGNhbGN1bGF0ZSBpdCBoZXJlICovCisJCXVuc2lnbmVkIGxvbmcgdGltZTsKKwkJc3RydWN0IHJ0Y190aW1lIGNhbGNfdG07CisKKwkJcnRjX3RtX3RvX3RpbWUodG0sICZ0aW1lKTsKKwkJcnRjX3RpbWVfdG9fdG0odGltZSwgJmNhbGNfdG0pOworCQl3ZGF5ID0gY2FsY190bS50bV93ZGF5OworCX0KKworCSpiY2RfeWVhciA9IChiaW4yYmNkKHllYXIgJSAxMDApIHwgYmluMmJjZCh5ZWFyIC8gMTAwKSA8PCA4KTsKKworCSpzdF90aW1lID0gKCh0bS0+dG1fbW9uICsgMSkgPDwgUlRDX01PTl9TSElGVCkKKwkJCXwJKHRtLT50bV9tZGF5IDw8IFJUQ19NREFZX1NISUZUKQorCQkJfAkoKHdkYXkgKyAxKSA8PCBSVENfV0RBWV9TSElGVCkKKwkJCXwJKHRtLT50bV9ob3VyIDw8IFJUQ19IT1VSX1NISUZUKQorCQkJfAkodG0tPnRtX21pbiA8PCBSVENfTUlOX1NISUZUKQorCQkJfAkodG0tPnRtX3NlYyA8PCBSVENfU0VDX1NISUZUKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQ29udmVydCBTVCB2MiBSVEMgZm9ybWF0IHRvIEdyZWdvcmlhbiBkYXRlLgorICovCitzdGF0aWMgaW50IHBsMDMxX3N0djJfdGltZV90b190bSh1bnNpZ25lZCBsb25nIHN0X3RpbWUsIHVuc2lnbmVkIGxvbmcgYmNkX3llYXIsCisJc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oYmNkX3llYXIpICsgKGJjZDJiaW4oYmNkX3llYXIgPj4gOCkgKiAxMDApOworCXRtLT50bV9tb24gID0gKChzdF90aW1lICYgUlRDX01PTl9NQVNLKSA+PiBSVENfTU9OX1NISUZUKSAtIDE7CisJdG0tPnRtX21kYXkgPSAoKHN0X3RpbWUgJiBSVENfTURBWV9NQVNLKSA+PiBSVENfTURBWV9TSElGVCk7CisJdG0tPnRtX3dkYXkgPSAoKHN0X3RpbWUgJiBSVENfV0RBWV9NQVNLKSA+PiBSVENfV0RBWV9TSElGVCkgLSAxOworCXRtLT50bV9ob3VyID0gKChzdF90aW1lICYgUlRDX0hPVVJfTUFTSykgPj4gUlRDX0hPVVJfU0hJRlQpOworCXRtLT50bV9taW4gID0gKChzdF90aW1lICYgUlRDX01JTl9NQVNLKSA+PiBSVENfTUlOX1NISUZUKTsKKwl0bS0+dG1fc2VjICA9ICgoc3RfdGltZSAmIFJUQ19TRUNfTUFTSykgPj4gUlRDX1NFQ19TSElGVCk7CisKKwl0bS0+dG1feWRheSA9IHJ0Y195ZWFyX2RheXModG0tPnRtX21kYXksIHRtLT50bV9tb24sIHRtLT50bV95ZWFyKTsKKwl0bS0+dG1feWVhciAtPSAxOTAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGwwMzFfc3R2Ml9yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCXN0cnVjdCBwbDAzMV9sb2NhbCAqbGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJd3JpdGVsKDEsIGxkYXRhLT5iYXNlICsgUlRDX01JUyk7Ci0JCXJldHVybiAwOwotCWNhc2UgUlRDX0FJRV9PTjoKLQkJd3JpdGVsKDAsIGxkYXRhLT5iYXNlICsgUlRDX01JUyk7Ci0JCXJldHVybiAwOworCXBsMDMxX3N0djJfdGltZV90b190bShyZWFkbChsZGF0YS0+YmFzZSArIFJUQ19EUiksCisJCQlyZWFkbChsZGF0YS0+YmFzZSArIFJUQ19ZRFIpLCB0bSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbDAzMV9zdHYyX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWU7CisJdW5zaWduZWQgbG9uZyBiY2RfeWVhcjsKKwlzdHJ1Y3QgcGwwMzFfbG9jYWwgKmxkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKKworCXJldCA9IHBsMDMxX3N0djJfdG1fdG9fdGltZShkZXYsIHRtLCAmdGltZSwgJmJjZF95ZWFyKTsKKwlpZiAocmV0ID09IDApIHsKKwkJd3JpdGVsKGJjZF95ZWFyLCBsZGF0YS0+YmFzZSArIFJUQ19ZTFIpOworCQl3cml0ZWwodGltZSwgbGRhdGEtPmJhc2UgKyBSVENfTFIpOwogCX0KIAotCXJldHVybiAtRU5PSU9DVExDTUQ7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwbDAzMV9zdHYyX3JlYWRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxhcm0pCit7CisJc3RydWN0IHBsMDMxX2xvY2FsICpsZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBwbDAzMV9zdHYyX3RpbWVfdG9fdG0ocmVhZGwobGRhdGEtPmJhc2UgKyBSVENfTVIpLAorCQkJcmVhZGwobGRhdGEtPmJhc2UgKyBSVENfWU1SKSwgJmFsYXJtLT50aW1lKTsKKworCWFsYXJtLT5wZW5kaW5nID0gcmVhZGwobGRhdGEtPmJhc2UgKyBSVENfUklTKSAmIFJUQ19CSVRfQUk7CisJYWxhcm0tPmVuYWJsZWQgPSByZWFkbChsZGF0YS0+YmFzZSArIFJUQ19JTVNDKSAmIFJUQ19CSVRfQUk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBsMDMxX3N0djJfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQoreworCXN0cnVjdCBwbDAzMV9sb2NhbCAqbGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHRpbWU7CisJdW5zaWduZWQgbG9uZyBiY2RfeWVhcjsKKwlpbnQgcmV0OworCisJLyogQXQgdGhlIG1vbWVudCwgd2UgY2FuIG9ubHkgZGVhbCB3aXRoIG5vbi13aWxkY2FyZGVkIGFsYXJtIHRpbWVzLiAqLworCXJldCA9IHJ0Y192YWxpZF90bSgmYWxhcm0tPnRpbWUpOworCWlmIChyZXQgPT0gMCkgeworCQlyZXQgPSBwbDAzMV9zdHYyX3RtX3RvX3RpbWUoZGV2LCAmYWxhcm0tPnRpbWUsCisJCQkJCSAgICAmdGltZSwgJmJjZF95ZWFyKTsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQl3cml0ZWwoYmNkX3llYXIsIGxkYXRhLT5iYXNlICsgUlRDX1lNUik7CisJCQl3cml0ZWwodGltZSwgbGRhdGEtPmJhc2UgKyBSVENfTVIpOworCisJCQlwbDAzMV9hbGFybV9pcnFfZW5hYmxlKGRldiwgYWxhcm0tPmVuYWJsZWQpOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlycXJldHVybl90IHBsMDMxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHBsMDMxX2xvY2FsICpsZGF0YSA9IGRldl9pZDsKKwl1bnNpZ25lZCBsb25nIHJ0Y21pczsKKwl1bnNpZ25lZCBsb25nIGV2ZW50cyA9IDA7CisKKwlydGNtaXMgPSByZWFkbChsZGF0YS0+YmFzZSArIFJUQ19NSVMpOworCWlmIChydGNtaXMpIHsKKwkJd3JpdGVsKHJ0Y21pcywgbGRhdGEtPmJhc2UgKyBSVENfSUNSKTsKKworCQlpZiAocnRjbWlzICYgUlRDX0JJVF9BSSkKKwkJCWV2ZW50cyB8PSAoUlRDX0FGIHwgUlRDX0lSUUYpOworCisJCS8qIFRpbWVyIGludGVycnVwdCBpcyBvbmx5IGF2YWlsYWJsZSBpbiBTVCB2YXJpYW50cyAqLworCQlpZiAoKHJ0Y21pcyAmIFJUQ19CSVRfUEkpICYmCisJCQkobGRhdGEtPmh3X2Rlc2lnbmVyID09IEFNQkFfVkVORE9SX1NUKSkKKwkJCWV2ZW50cyB8PSAoUlRDX1BGIHwgUlRDX0lSUUYpOworCisJCXJ0Y191cGRhdGVfaXJxKGxkYXRhLT5ydGMsIDEsIGV2ZW50cyk7CisKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCXJldHVybiBJUlFfTk9ORTsKIH0KIAogc3RhdGljIGludCBwbDAzMV9yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQpAQCAtNzQsMTEgKzI1MiwxNCBAQAogewogCXVuc2lnbmVkIGxvbmcgdGltZTsKIAlzdHJ1Y3QgcGwwMzFfbG9jYWwgKmxkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKIAotCXJ0Y190bV90b190aW1lKHRtLCAmdGltZSk7Ci0Jd3JpdGVsKHRpbWUsIGxkYXRhLT5iYXNlICsgUlRDX0xSKTsKKwlyZXQgPSBydGNfdG1fdG9fdGltZSh0bSwgJnRpbWUpOwogCi0JcmV0dXJuIDA7CisJaWYgKHJldCA9PSAwKQorCQl3cml0ZWwodGltZSwgbGRhdGEtPmJhc2UgKyBSVENfTFIpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBwbDAzMV9yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQpAQCAtODYsOCArMjY3LDkgQEAKIAlzdHJ1Y3QgcGwwMzFfbG9jYWwgKmxkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlydGNfdGltZV90b190bShyZWFkbChsZGF0YS0+YmFzZSArIFJUQ19NUiksICZhbGFybS0+dGltZSk7Ci0JYWxhcm0tPnBlbmRpbmcgPSByZWFkbChsZGF0YS0+YmFzZSArIFJUQ19SSVMpOwotCWFsYXJtLT5lbmFibGVkID0gcmVhZGwobGRhdGEtPmJhc2UgKyBSVENfSU1TQyk7CisKKwlhbGFybS0+cGVuZGluZyA9IHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX1JJUykgJiBSVENfQklUX0FJOworCWFsYXJtLT5lbmFibGVkID0gcmVhZGwobGRhdGEtPmJhc2UgKyBSVENfSU1TQykgJiBSVENfQklUX0FJOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05NiwyMiArMjc4LDcxIEBACiB7CiAJc3RydWN0IHBsMDMxX2xvY2FsICpsZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGxvbmcgdGltZTsKKwlpbnQgcmV0OwogCi0JcnRjX3RtX3RvX3RpbWUoJmFsYXJtLT50aW1lLCAmdGltZSk7CisJLyogQXQgdGhlIG1vbWVudCwgd2UgY2FuIG9ubHkgZGVhbCB3aXRoIG5vbi13aWxkY2FyZGVkIGFsYXJtIHRpbWVzLiAqLworCXJldCA9IHJ0Y192YWxpZF90bSgmYWxhcm0tPnRpbWUpOworCWlmIChyZXQgPT0gMCkgeworCQlyZXQgPSBydGNfdG1fdG9fdGltZSgmYWxhcm0tPnRpbWUsICZ0aW1lKTsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQl3cml0ZWwodGltZSwgbGRhdGEtPmJhc2UgKyBSVENfTVIpOworCQkJcGwwMzFfYWxhcm1faXJxX2VuYWJsZShkZXYsIGFsYXJtLT5lbmFibGVkKTsKKwkJfQorCX0KIAotCXdyaXRlbCh0aW1lLCBsZGF0YS0+YmFzZSArIFJUQ19NUik7Ci0Jd3JpdGVsKCFhbGFybS0+ZW5hYmxlZCwgbGRhdGEtPmJhc2UgKyBSVENfTUlTKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBQZXJpb2RpYyBpbnRlcnJ1cHQgaXMgb25seSBhdmFpbGFibGUgaW4gU1QgdmFyaWFudHMuICovCitzdGF0aWMgaW50IHBsMDMxX2lycV9zZXRfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgcGwwMzFfbG9jYWwgKmxkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoZW5hYmxlZCA9PSAxKSB7CisJCS8qIENsZWFyIGFueSBwZW5kaW5nIHRpbWVyIGludGVycnVwdC4gKi8KKwkJd3JpdGVsKFJUQ19CSVRfUEksIGxkYXRhLT5iYXNlICsgUlRDX0lDUik7CisKKwkJd3JpdGVsKHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX0lNU0MpIHwgUlRDX0JJVF9QSSwKKwkJCWxkYXRhLT5iYXNlICsgUlRDX0lNU0MpOworCisJCS8qIE5vdyBzdGFydCB0aGUgdGltZXIgKi8KKwkJd3JpdGVsKHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX1RDUikgfCBSVENfVENSX0VOLAorCQkJbGRhdGEtPmJhc2UgKyBSVENfVENSKTsKKworCX0gZWxzZSB7CisJCXdyaXRlbChyZWFkbChsZGF0YS0+YmFzZSArIFJUQ19JTVNDKSAmICh+UlRDX0JJVF9QSSksCisJCQlsZGF0YS0+YmFzZSArIFJUQ19JTVNDKTsKKworCQkvKiBBbHNvIHN0b3AgdGhlIHRpbWVyICovCisJCXdyaXRlbChyZWFkbChsZGF0YS0+YmFzZSArIFJUQ19UQ1IpICYgKH5SVENfVENSX0VOKSwKKwkJCWxkYXRhLT5iYXNlICsgUlRDX1RDUik7CisJfQorCS8qIFdhaXQgYXQgbGVhc3QgMSBSVEMzMiBjbG9jayBjeWNsZSB0byBlbnN1cmUgbmV4dCBhY2Nlc3MKKwkgKiB0byBSVENfVENSIHdpbGwgc3VjY2VlZC4KKwkgKi8KKwl1ZGVsYXkoNDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwbDAzMV9vcHMgPSB7Ci0JLmlvY3RsID0gcGwwMzFfaW9jdGwsCi0JLnJlYWRfdGltZSA9IHBsMDMxX3JlYWRfdGltZSwKLQkuc2V0X3RpbWUgPSBwbDAzMV9zZXRfdGltZSwKLQkucmVhZF9hbGFybSA9IHBsMDMxX3JlYWRfYWxhcm0sCi0JLnNldF9hbGFybSA9IHBsMDMxX3NldF9hbGFybSwKLX07CitzdGF0aWMgaW50IHBsMDMxX2lycV9zZXRfZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBmcmVxKQoreworCXN0cnVjdCBwbDAzMV9sb2NhbCAqbGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCS8qIENhbnQgc2V0IHRpbWVyIGlmIGl0IGlzIGFscmVhZHkgZW5hYmxlZCAqLworCWlmIChyZWFkbChsZGF0YS0+YmFzZSArIFJUQ19UQ1IpICYgUlRDX1RDUl9FTikgeworCQlkZXZfZXJyKGRldiwgImNhbid0IGNoYW5nZSBmcmVxdWVuY3kgd2hpbGUgdGltZXIgZW5hYmxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIElmIHNlbGYgc3RhcnQgYml0IGluIFJUQ19UQ1IgaXMgc2V0IHRpbWVyIHdpbGwgc3RhcnQgaGVyZSwKKwkgKiBidXQgd2UgbmV2ZXIgc2V0IHRoYXQgYml0LiBJbnN0ZWFkIHdlIHN0YXJ0IHRoZSB0aW1lciB3aGVuCisJICogc2V0X3N0YXRlIGlzIGNhbGxlZCB3aXRoIGVuYWJsZWQgPT0gMS4KKwkgKi8KKwl3cml0ZWwoUlRDX1RJTUVSX0ZSRVEgLyBmcmVxLCBsZGF0YS0+YmFzZSArIFJUQ19UTFIpOworCisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbnQgcGwwMzFfcmVtb3ZlKHN0cnVjdCBhbWJhX2RldmljZSAqYWRldikKIHsKQEAgLTEzMSwxOCArMzYyLDIwIEBACiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgcGwwMzFfbG9jYWwgKmxkYXRhOworCXN0cnVjdCBydGNfY2xhc3Nfb3BzICpvcHMgPSBpZC0+ZGF0YTsKIAogCXJldCA9IGFtYmFfcmVxdWVzdF9yZWdpb25zKGFkZXYsIE5VTEwpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX3JlcTsKIAotCWxkYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBsMDMxX2xvY2FsKSwgR0ZQX0tFUk5FTCk7CisJbGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGwwMzFfbG9jYWwpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxkYXRhKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAogCWxkYXRhLT5iYXNlID0gaW9yZW1hcChhZGV2LT5yZXMuc3RhcnQsIHJlc291cmNlX3NpemUoJmFkZXYtPnJlcykpOworCiAJaWYgKCFsZGF0YS0+YmFzZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9ub19yZW1hcDsKQEAgLTE1MCwyNCArMzgzLDM2IEBACiAKIAlhbWJhX3NldF9kcnZkYXRhKGFkZXYsIGxkYXRhKTsKIAotCWlmIChyZXF1ZXN0X2lycShhZGV2LT5pcnFbMF0sIHBsMDMxX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKLQkJCSJydGMtcGwwMzEiLCBsZGF0YS0+cnRjKSkgewotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dF9ub19pcnE7Ci0JfQorCWxkYXRhLT5od19kZXNpZ25lciA9IGFtYmFfbWFuZihhZGV2KTsKKwlsZGF0YS0+aHdfcmV2aXNpb24gPSBhbWJhX3JldihhZGV2KTsKIAotCWxkYXRhLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJwbDAzMSIsICZhZGV2LT5kZXYsICZwbDAzMV9vcHMsCi0JCQkJCSBUSElTX01PRFVMRSk7CisJZGV2X2RiZygmYWRldi0+ZGV2LCAiZGVzaWduZXIgSUQgPSAweCUwMnhcbiIsIGxkYXRhLT5od19kZXNpZ25lcik7CisJZGV2X2RiZygmYWRldi0+ZGV2LCAicmV2aXNpb24gPSAweCUwMXhcbiIsIGxkYXRhLT5od19yZXZpc2lvbik7CisKKwkvKiBFbmFibGUgdGhlIGNsb2Nrd2F0Y2ggb24gU1QgVmFyaWFudHMgKi8KKwlpZiAoKGxkYXRhLT5od19kZXNpZ25lciA9PSBBTUJBX1ZFTkRPUl9TVCkgJiYKKwkgICAgKGxkYXRhLT5od19yZXZpc2lvbiA+IDEpKQorCQl3cml0ZWwocmVhZGwobGRhdGEtPmJhc2UgKyBSVENfQ1IpIHwgUlRDX0NSX0NXRU4sCisJCSAgICAgICBsZGF0YS0+YmFzZSArIFJUQ19DUik7CisKKwlsZGF0YS0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigicGwwMzEiLCAmYWRldi0+ZGV2LCBvcHMsCisJCQkJCVRISVNfTU9EVUxFKTsKIAlpZiAoSVNfRVJSKGxkYXRhLT5ydGMpKSB7CiAJCXJldCA9IFBUUl9FUlIobGRhdGEtPnJ0Yyk7CiAJCWdvdG8gb3V0X25vX3J0YzsKIAl9CiAKKwlpZiAocmVxdWVzdF9pcnEoYWRldi0+aXJxWzBdLCBwbDAzMV9pbnRlcnJ1cHQsCisJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsICJydGMtcGwwMzEiLCBsZGF0YSkpIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXRfbm9faXJxOworCX0KKwogCXJldHVybiAwOwogCi1vdXRfbm9fcnRjOgotCWZyZWVfaXJxKGFkZXYtPmlycVswXSwgbGRhdGEtPnJ0Yyk7CiBvdXRfbm9faXJxOgorCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihsZGF0YS0+cnRjKTsKK291dF9ub19ydGM6CiAJaW91bm1hcChsZGF0YS0+YmFzZSk7CiAJYW1iYV9zZXRfZHJ2ZGF0YShhZGV2LCBOVUxMKTsKIG91dF9ub19yZW1hcDoKQEAgLTE3NSwxMyArNDIwLDU3IEBACiBvdXQ6CiAJYW1iYV9yZWxlYXNlX3JlZ2lvbnMoYWRldik7CiBlcnJfcmVxOgorCiAJcmV0dXJuIHJldDsKIH0KIAorLyogT3BlcmF0aW9ucyBmb3IgdGhlIG9yaWdpbmFsIEFSTSB2ZXJzaW9uICovCitzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgYXJtX3BsMDMxX29wcyA9IHsKKwkucmVhZF90aW1lID0gcGwwMzFfcmVhZF90aW1lLAorCS5zZXRfdGltZSA9IHBsMDMxX3NldF90aW1lLAorCS5yZWFkX2FsYXJtID0gcGwwMzFfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtID0gcGwwMzFfc2V0X2FsYXJtLAorCS5hbGFybV9pcnFfZW5hYmxlID0gcGwwMzFfYWxhcm1faXJxX2VuYWJsZSwKK307CisKKy8qIFRoZSBGaXJzdCBTVCBkZXJpdmF0aXZlICovCitzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgc3R2MV9wbDAzMV9vcHMgPSB7CisJLnJlYWRfdGltZSA9IHBsMDMxX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUgPSBwbDAzMV9zZXRfdGltZSwKKwkucmVhZF9hbGFybSA9IHBsMDMxX3JlYWRfYWxhcm0sCisJLnNldF9hbGFybSA9IHBsMDMxX3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHBsMDMxX2FsYXJtX2lycV9lbmFibGUsCisJLmlycV9zZXRfc3RhdGUgPSBwbDAzMV9pcnFfc2V0X3N0YXRlLAorCS5pcnFfc2V0X2ZyZXEgPSBwbDAzMV9pcnFfc2V0X2ZyZXEsCit9OworCisvKiBBbmQgdGhlIHNlY29uZCBTVCBkZXJpdmF0aXZlICovCitzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgc3R2Ml9wbDAzMV9vcHMgPSB7CisJLnJlYWRfdGltZSA9IHBsMDMxX3N0djJfcmVhZF90aW1lLAorCS5zZXRfdGltZSA9IHBsMDMxX3N0djJfc2V0X3RpbWUsCisJLnJlYWRfYWxhcm0gPSBwbDAzMV9zdHYyX3JlYWRfYWxhcm0sCisJLnNldF9hbGFybSA9IHBsMDMxX3N0djJfc2V0X2FsYXJtLAorCS5hbGFybV9pcnFfZW5hYmxlID0gcGwwMzFfYWxhcm1faXJxX2VuYWJsZSwKKwkuaXJxX3NldF9zdGF0ZSA9IHBsMDMxX2lycV9zZXRfc3RhdGUsCisJLmlycV9zZXRfZnJlcSA9IHBsMDMxX2lycV9zZXRfZnJlcSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9pZCBwbDAzMV9pZHNbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLmlkID0gMHgwMDA0MTAzMSwKIAkJLm1hc2sgPSAweDAwMGZmZmZmLAorCQkuZGF0YSA9ICZhcm1fcGwwMzFfb3BzLAorCX0sCisJLyogU1QgTWljcm8gdmFyaWFudHMgKi8KKwl7CisJCS5pZCA9IDB4MDAxODAwMzEsCisJCS5tYXNrID0gMHgwMGZmZmZmZiwKKwkJLmRhdGEgPSAmc3R2MV9wbDAzMV9vcHMsCisJfSwKKwl7CisJCS5pZCA9IDB4MDAyODAwMzEsCisJCS5tYXNrID0gMHgwMGZmZmZmZiwKKwkJLmRhdGEgPSAmc3R2Ml9wbDAzMV9vcHMsCiAJfSwKIAl7MCwgMH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKaW5kZXggNTkwNTkzNi4uNDk1MWFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2FzeW5jLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CkBAIC0xMTIsNiArMTEzLDcgQEAKIAlJTklUX1dPUksoJmRldmljZS0+cmVzdG9yZV9kZXZpY2UsIGRvX3Jlc3RvcmVfZGV2aWNlKTsKIAlkZXZpY2UtPnN0YXRlID0gREFTRF9TVEFURV9ORVc7CiAJZGV2aWNlLT50YXJnZXQgPSBEQVNEX1NUQVRFX05FVzsKKwltdXRleF9pbml0KCZkZXZpY2UtPnN0YXRlX211dGV4KTsKIAogCXJldHVybiBkZXZpY2U7CiB9CkBAIC0zMjEsOCArMzIzLDggQEAKIAkJCWRldmljZS0+c3RhdGUgPSBEQVNEX1NUQVRFX1JFQURZOwogCQkJcmV0dXJuIHJjOwogCQl9Ci0JCWRhc2RfZGVzdHJveV9wYXJ0aXRpb25zKGJsb2NrKTsKIAkJZGFzZF9mbHVzaF9yZXF1ZXN0X3F1ZXVlKGJsb2NrKTsKKwkJZGFzZF9kZXN0cm95X3BhcnRpdGlvbnMoYmxvY2spOwogCQlibG9jay0+YmxvY2tzID0gMDsKIAkJYmxvY2stPmJwX2Jsb2NrID0gMDsKIAkJYmxvY2stPnMyYl9zaGlmdCA9IDA7CkBAIC00ODQsMTAgKzQ4Niw4IEBACiAJaWYgKHJjKQogCQlkZXZpY2UtPnRhcmdldCA9IGRldmljZS0+c3RhdGU7CiAKLQlpZiAoZGV2aWNlLT5zdGF0ZSA9PSBkZXZpY2UtPnRhcmdldCkgeworCWlmIChkZXZpY2UtPnN0YXRlID09IGRldmljZS0+dGFyZ2V0KQogCQl3YWtlX3VwKCZkYXNkX2luaXRfd2FpdHEpOwotCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKLQl9CiAKIAkvKiBsZXQgdXNlci1zcGFjZSBrbm93IHRoYXQgdGhlIGRldmljZSBzdGF0dXMgY2hhbmdlZCAqLwogCWtvYmplY3RfdWV2ZW50KCZkZXZpY2UtPmNkZXYtPmRldi5rb2JqLCBLT0JKX0NIQU5HRSk7CkBAIC01MDIsNyArNTAyLDkgQEAKIHN0YXRpYyB2b2lkIGRvX2tpY2tfZGV2aWNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGFzZF9kZXZpY2UsIGtpY2tfd29yayk7CisJbXV0ZXhfbG9jaygmZGV2aWNlLT5zdGF0ZV9tdXRleCk7CiAJZGFzZF9jaGFuZ2Vfc3RhdGUoZGV2aWNlKTsKKwltdXRleF91bmxvY2soJmRldmljZS0+c3RhdGVfbXV0ZXgpOwogCWRhc2Rfc2NoZWR1bGVfZGV2aWNlX2JoKGRldmljZSk7CiAJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiB9CkBAIC01MzksMTggKzU0MSwxOSBAQAogdm9pZCBkYXNkX3NldF90YXJnZXRfc3RhdGUoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIGludCB0YXJnZXQpCiB7CiAJZGFzZF9nZXRfZGV2aWNlKGRldmljZSk7CisJbXV0ZXhfbG9jaygmZGV2aWNlLT5zdGF0ZV9tdXRleCk7CiAJLyogSWYgd2UgYXJlIGluIHByb2Jlb25seSBtb2RlIHN0b3AgYXQgREFTRF9TVEFURV9SRUFEWS4gKi8KIAlpZiAoZGFzZF9wcm9iZW9ubHkgJiYgdGFyZ2V0ID4gREFTRF9TVEFURV9SRUFEWSkKIAkJdGFyZ2V0ID0gREFTRF9TVEFURV9SRUFEWTsKIAlpZiAoZGV2aWNlLT50YXJnZXQgIT0gdGFyZ2V0KSB7Ci0JCWlmIChkZXZpY2UtPnN0YXRlID09IHRhcmdldCkgeworCQlpZiAoZGV2aWNlLT5zdGF0ZSA9PSB0YXJnZXQpCiAJCQl3YWtlX3VwKCZkYXNkX2luaXRfd2FpdHEpOwotCQkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7Ci0JCX0KIAkJZGV2aWNlLT50YXJnZXQgPSB0YXJnZXQ7CiAJfQogCWlmIChkZXZpY2UtPnN0YXRlICE9IGRldmljZS0+dGFyZ2V0KQogCQlkYXNkX2NoYW5nZV9zdGF0ZShkZXZpY2UpOworCW11dGV4X3VubG9jaygmZGV2aWNlLT5zdGF0ZV9tdXRleCk7CisJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiB9CiAKIC8qCkBAIC0xMDAwLDEyICsxMDAzLDIwIEBACiAJCXJldHVybjsKIAl9CiAKLQlkZXZpY2UgPSAoc3RydWN0IGRhc2RfZGV2aWNlICopIGNxci0+c3RhcnRkZXY7Ci0JaWYgKGRldmljZSA9PSBOVUxMIHx8Ci0JICAgIGRldmljZSAhPSBkYXNkX2RldmljZV9mcm9tX2NkZXZfbG9ja2VkKGNkZXYpIHx8Ci0JICAgIHN0cm5jbXAoZGV2aWNlLT5kaXNjaXBsaW5lLT5lYmNuYW1lLCAoY2hhciAqKSAmY3FyLT5tYWdpYywgNCkpIHsKKwlkZXZpY2UgPSBkYXNkX2RldmljZV9mcm9tX2NkZXZfbG9ja2VkKGNkZXYpOworCWlmIChJU19FUlIoZGV2aWNlKSkgeworCQlEQkZfRVZFTlRfREVWSUQoREJGX0RFQlVHLCBjZGV2LCAiJXMiLAorCQkJCSJ1bmFibGUgdG8gZ2V0IGRldmljZSBmcm9tIGNkZXYiKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghY3FyLT5zdGFydGRldiB8fAorCSAgICBkZXZpY2UgIT0gY3FyLT5zdGFydGRldiB8fAorCSAgICBzdHJuY21wKGNxci0+c3RhcnRkZXYtPmRpc2NpcGxpbmUtPmViY25hbWUsCisJCSAgICAoY2hhciAqKSAmY3FyLT5tYWdpYywgNCkpIHsKIAkJREJGX0VWRU5UX0RFVklEKERCRl9ERUJVRywgY2RldiwgIiVzIiwKIAkJCQkiaW52YWxpZCBkZXZpY2UgaW4gcmVxdWVzdCIpOworCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTY5Miw3ICsxNzAzLDYgQEAKIAkJCQljcXIsIHJjKTsKIAkJfSBlbHNlIHsKIAkJCWNxci0+c3RvcGNsayA9IGdldF9jbG9jaygpOwotCQkJcmMgPSAxOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6IC8qIGFscmVhZHkgZmluaXNoZWQgb3IgY2xlYXIgcGVuZGluZyAtIGRvIG5vdGhpbmcgKi8KQEAgLTIxMjksOSArMjEzOSw4IEBACiAKIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCBibG9jay0+YnBfYmxvY2spOwogCW1heCA9IGJsb2NrLT5iYXNlLT5kaXNjaXBsaW5lLT5tYXhfYmxvY2tzIDw8IGJsb2NrLT5zMmJfc2hpZnQ7Ci0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCBtYXgpOwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgbWF4KTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOwogCS8qIHdpdGggcGFnZSBzaXplZCBzZWdtZW50cyB3ZSBjYW4gdHJhbnNsYXRlIGVhY2ggc2VnZW1lbnQgaW50bwogCSAqIG9uZSBpZGF3L3RpZGF3CiAJICovCkBAIC0yMTcwLDkgKzIxNzksMTMgQEAKIHN0YXRpYyBpbnQgZGFzZF9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2sgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlID0gYmxvY2stPmJhc2U7CisJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlOwogCWludCByYzsKIAorCWlmICghYmxvY2spCisJCXJldHVybiAtRU5PREVWOworCisJYmFzZSA9IGJsb2NrLT5iYXNlOwogCWF0b21pY19pbmMoJmJsb2NrLT5vcGVuX2NvdW50KTsKIAlpZiAodGVzdF9iaXQoREFTRF9GTEFHX09GRkxJTkUsICZiYXNlLT5mbGFncykpIHsKIAkJcmMgPSAtRU5PREVWOwpAQCAtMjI4NSwxMSArMjI5OCw2IEBACiAJaWYgKHJldCkKIAkJcHJfd2FybmluZygiJXM6IFNldHRpbmcgdGhlIERBU0Qgb25saW5lIGZhaWxlZCB3aXRoIHJjPSVkXG4iLAogCQkJICAgZGV2X25hbWUoJmNkZXYtPmRldiksIHJldCk7Ci0JZWxzZSB7Ci0JCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2KGNkZXYpOwotCQl3YWl0X2V2ZW50KGRhc2RfaW5pdF93YWl0cSwgX3dhaXRfZm9yX2RldmljZShkZXZpY2UpKTsKLQkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7Ci0JfQogfQogCiAvKgpAQCAtMjQyNCw2ICsyNDMyLDkgQEAKIAl9IGVsc2UKIAkJcHJfZGVidWcoImRhc2RfZ2VuZXJpYyBkZXZpY2UgJXMgZm91bmRcbiIsCiAJCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCisJd2FpdF9ldmVudChkYXNkX2luaXRfd2FpdHEsIF93YWl0X2Zvcl9kZXZpY2UoZGV2aWNlKSk7CisKIAlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCmluZGV4IDRjYWM1YjUuLmQ0OTc2NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCkBAIC04NzQsMTIgKzg3NCwxOSBAQAogCXNzaXplX3QgbGVuOwogCiAJZGV2aWNlID0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2KHRvX2Njd2RldihkZXYpKTsKLQlpZiAoIUlTX0VSUihkZXZpY2UpICYmIGRldmljZS0+ZGlzY2lwbGluZSkgeworCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJZ290byBvdXQ7CisJZWxzZSBpZiAoIWRldmljZS0+ZGlzY2lwbGluZSkgeworCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKKwkJZ290byBvdXQ7CisJfSBlbHNlIHsKIAkJbGVuID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwKIAkJCSAgICAgICBkZXZpY2UtPmRpc2NpcGxpbmUtPm5hbWUpOwogCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKLQl9IGVsc2UKLQkJbGVuID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJub25lXG4iKTsKKwkJcmV0dXJuIGxlbjsKKwl9CitvdXQ6CisJbGVuID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJub25lXG4iKTsKIAlyZXR1cm4gbGVuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYwppbmRleCBkMzE5ODMwLi45NGY5MmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKQEAgLTg4LDYgKzg4LDcgQEAKIAlpZiAoYmxvY2stPmdkcCkgewogCQlkZWxfZ2VuZGlzayhibG9jay0+Z2RwKTsKIAkJYmxvY2stPmdkcC0+cXVldWUgPSBOVUxMOworCQlibG9jay0+Z2RwLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCQlwdXRfZGlzayhibG9jay0+Z2RwKTsKIAkJYmxvY2stPmdkcCA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmggYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAppbmRleCBlNGMyMTQzLi5lZDczY2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaApAQCAtMzY4LDYgKzM2OCw3IEBACiAKIAkvKiBEZXZpY2Ugc3RhdGUgYW5kIHRhcmdldCBzdGF0ZS4gKi8KIAlpbnQgc3RhdGUsIHRhcmdldDsKKwlzdHJ1Y3QgbXV0ZXggc3RhdGVfbXV0ZXg7CiAJaW50IHN0b3BwZWQ7CQkvKiBkZXZpY2UgKGNjd19kZXZpY2Vfc3RhcnQpIHdhcyBzdG9wcGVkICovCiAKIAkvKiByZWZlcmVuY2UgY291bnQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKaW5kZXggNzFmOTVmNS4uZjEzYTBiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYwpAQCAtMTY1LDUxICsxNjUsMzIgQEAKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAogfTsKIAotc3RhdGljIGludAotZGFzZF9jYWxjX21ldHJpY3MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCSAgaW50IGNvdW50LCBpbnQgKmVvZiwgaW50IGxlbikKLXsKLQlsZW4gPSAobGVuID4gb2ZmKSA/IGxlbiAtIG9mZiA6IDA7Ci0JaWYgKGxlbiA+IGNvdW50KQotCQlsZW4gPSBjb3VudDsKLQlpZiAobGVuIDwgY291bnQpCi0JCSplb2YgPSAxOwotCSpzdGFydCA9IHBhZ2UgKyBvZmY7Ci0JcmV0dXJuIGxlbjsKLX0KLQogI2lmZGVmIENPTkZJR19EQVNEX1BST0ZJTEUKLXN0YXRpYyBjaGFyICoKLWRhc2Rfc3RhdGlzdGljc19hcnJheShjaGFyICpzdHIsIHVuc2lnbmVkIGludCAqYXJyYXksIGludCBmYWN0b3IpCitzdGF0aWMgdm9pZCBkYXNkX3N0YXRpc3RpY3NfYXJyYXkoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBpbnQgKmFycmF5LCBpbnQgZmFjdG9yKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJc3RyICs9IHNwcmludGYoc3RyLCAiJTdkICIsIGFycmF5W2ldIC8gZmFjdG9yKTsKKwkJc2VxX3ByaW50ZihtLCAiJTdkICIsIGFycmF5W2ldIC8gZmFjdG9yKTsKIAkJaWYgKGkgPT0gMTUpCi0JCQlzdHIgKz0gc3ByaW50ZihzdHIsICJcbiIpOworCQkJc2VxX3B1dGMobSwgJ1xuJyk7CiAJfQotCXN0ciArPSBzcHJpbnRmKHN0ciwiXG4iKTsKLQlyZXR1cm4gc3RyOworCXNlcV9wdXRjKG0sICdcbicpOwogfQogI2VuZGlmIC8qIENPTkZJR19EQVNEX1BST0ZJTEUgKi8KIAotc3RhdGljIGludAotZGFzZF9zdGF0aXN0aWNzX3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCSAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgZGFzZF9zdGF0c19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXVuc2lnbmVkIGxvbmcgbGVuOwogI2lmZGVmIENPTkZJR19EQVNEX1BST0ZJTEUKIAlzdHJ1Y3QgZGFzZF9wcm9maWxlX2luZm9fdCAqcHJvZjsKLQljaGFyICpzdHI7CiAJaW50IGZhY3RvcjsKIAogCS8qIGNoZWNrIGZvciBhY3RpdmUgcHJvZmlsaW5nICovCiAJaWYgKGRhc2RfcHJvZmlsZV9sZXZlbCA9PSBEQVNEX1BST0ZJTEVfT0ZGKSB7Ci0JCWxlbiA9IHNwcmludGYocGFnZSwgIlN0YXRpc3RpY3MgYXJlIG9mZiAtIHRoZXkgbWlnaHQgYmUgIgorCQlzZXFfcHJpbnRmKG0sICJTdGF0aXN0aWNzIGFyZSBvZmYgLSB0aGV5IG1pZ2h0IGJlICIKIAkJCQkgICAgInN3aXRjaGVkIG9uIHVzaW5nICdlY2hvIHNldCBvbiA+ICIKIAkJCQkgICAgIi9wcm9jL2Rhc2Qvc3RhdGlzdGljcydcbiIpOwotCQlyZXR1cm4gZGFzZF9jYWxjX21ldHJpY3MocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJcHJvZiA9ICZkYXNkX2dsb2JhbF9wcm9maWxlOwpAQCAtMjE3LDQ3ICsxOTgsNDkgQEAKIAlmb3IgKGZhY3RvciA9IDE7IChwcm9mLT5kYXNkX2lvX3JlcXMgLyBmYWN0b3IpID4gOTk5OTk5OTsKIAkgICAgIGZhY3RvciAqPSAxMCk7CiAKLQlzdHIgPSBwYWdlOwotCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVkIGRhc2QgSS9PIHJlcXVlc3RzXG4iLCBwcm9mLT5kYXNkX2lvX3JlcXMpOwotCXN0ciArPSBzcHJpbnRmKHN0ciwgIndpdGggJXUgc2VjdG9ycyg1MTJCIGVhY2gpXG4iLAorCXNlcV9wcmludGYobSwgIiVkIGRhc2QgSS9PIHJlcXVlc3RzXG4iLCBwcm9mLT5kYXNkX2lvX3JlcXMpOworCXNlcV9wcmludGYobSwgIndpdGggJXUgc2VjdG9ycyg1MTJCIGVhY2gpXG4iLAogCQkgICAgICAgcHJvZi0+ZGFzZF9pb19zZWN0cyk7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAiU2NhbGUgRmFjdG9yIGlzICAlZFxuIiwgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsCisJc2VxX3ByaW50ZihtLCAiU2NhbGUgRmFjdG9yIGlzICAlZFxuIiwgZmFjdG9yKTsKKwlzZXFfcHJpbnRmKG0sCiAJCSAgICAgICAiICAgX188NAkgICBfX184CSAgIF9fMTYJICAgX18zMgkgICBfXzY0CSAgIF8xMjgJIgogCQkgICAgICAgIiAgIF8yNTYJICAgXzUxMgkgICBfXzFrCSAgIF9fMmsJICAgX180awkgICBfXzhrCSIKIAkJICAgICAgICIgICBfMTZrCSAgIF8zMmsJICAgXzY0awkgICAxMjhrXG4iKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsCisJc2VxX3ByaW50ZihtLAogCQkgICAgICAgIiAgIF8yNTYJICAgXzUxMgkgICBfXzFNCSAgIF9fMk0JICAgX180TQkgICBfXzhNCSIKIAkJICAgICAgICIgICBfMTZNCSAgIF8zMk0JICAgXzY0TQkgICAxMjhNCSAgIDI1Nk0JICAgNTEyTQkiCiAJCSAgICAgICAiICAgX18xRwkgICBfXzJHCSAgIF9fNEcgIiAiICAgXz40R1xuIik7CiAKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJIaXN0b2dyYW0gb2Ygc2l6ZXMgKDUxMkIgc2VjcylcbiIpOwotCXN0ciA9IGRhc2Rfc3RhdGlzdGljc19hcnJheShzdHIsIHByb2YtPmRhc2RfaW9fc2VjcywgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJIaXN0b2dyYW0gb2YgSS9PIHRpbWVzIChtaWNyb3NlY29uZHMpXG4iKTsKLQlzdHIgPSBkYXNkX3N0YXRpc3RpY3NfYXJyYXkoc3RyLCBwcm9mLT5kYXNkX2lvX3RpbWVzLCBmYWN0b3IpOwotCXN0ciArPSBzcHJpbnRmKHN0ciwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZXMgcGVyIHNlY3RvclxuIik7Ci0Jc3RyID0gZGFzZF9zdGF0aXN0aWNzX2FycmF5KHN0ciwgcHJvZi0+ZGFzZF9pb190aW1wcywgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgdGlsbCBzc2NoXG4iKTsKLQlzdHIgPSBkYXNkX3N0YXRpc3RpY3NfYXJyYXkoc3RyLCBwcm9mLT5kYXNkX2lvX3RpbWUxLCBmYWN0b3IpOwotCXN0ciArPSBzcHJpbnRmKHN0ciwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZSBiZXR3ZWVuIHNzY2ggYW5kIGlycVxuIik7Ci0Jc3RyID0gZGFzZF9zdGF0aXN0aWNzX2FycmF5KHN0ciwgcHJvZi0+ZGFzZF9pb190aW1lMiwgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgYmV0d2VlbiBzc2NoICIKKwlzZXFfcHJpbnRmKG0sICJIaXN0b2dyYW0gb2Ygc2l6ZXMgKDUxMkIgc2VjcylcbiIpOworCWRhc2Rfc3RhdGlzdGljc19hcnJheShtLCBwcm9mLT5kYXNkX2lvX3NlY3MsIGZhY3Rvcik7CisJc2VxX3ByaW50ZihtLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lcyAobWljcm9zZWNvbmRzKVxuIik7CisJZGFzZF9zdGF0aXN0aWNzX2FycmF5KG0sIHByb2YtPmRhc2RfaW9fdGltZXMsIGZhY3Rvcik7CisJc2VxX3ByaW50ZihtLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lcyBwZXIgc2VjdG9yXG4iKTsKKwlkYXNkX3N0YXRpc3RpY3NfYXJyYXkobSwgcHJvZi0+ZGFzZF9pb190aW1wcywgZmFjdG9yKTsKKwlzZXFfcHJpbnRmKG0sICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgdGlsbCBzc2NoXG4iKTsKKwlkYXNkX3N0YXRpc3RpY3NfYXJyYXkobSwgcHJvZi0+ZGFzZF9pb190aW1lMSwgZmFjdG9yKTsKKwlzZXFfcHJpbnRmKG0sICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgYmV0d2VlbiBzc2NoIGFuZCBpcnFcbiIpOworCWRhc2Rfc3RhdGlzdGljc19hcnJheShtLCBwcm9mLT5kYXNkX2lvX3RpbWUyLCBmYWN0b3IpOworCXNlcV9wcmludGYobSwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZSBiZXR3ZWVuIHNzY2ggIgogCQkJICAgICJhbmQgaXJxIHBlciBzZWN0b3JcbiIpOwotCXN0ciA9IGRhc2Rfc3RhdGlzdGljc19hcnJheShzdHIsIHByb2YtPmRhc2RfaW9fdGltZTJwcywgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgYmV0d2VlbiBpcnEgYW5kIGVuZFxuIik7Ci0Jc3RyID0gZGFzZF9zdGF0aXN0aWNzX2FycmF5KHN0ciwgcHJvZi0+ZGFzZF9pb190aW1lMywgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICIjIG9mIHJlcSBpbiBjaGFucSBhdCBlbnF1ZXVpbmcgKDEuLjMyKSBcbiIpOwotCXN0ciA9IGRhc2Rfc3RhdGlzdGljc19hcnJheShzdHIsIHByb2YtPmRhc2RfaW9fbnJfcmVxLCBmYWN0b3IpOwotCWxlbiA9IHN0ciAtIHBhZ2U7CisJZGFzZF9zdGF0aXN0aWNzX2FycmF5KG0sIHByb2YtPmRhc2RfaW9fdGltZTJwcywgZmFjdG9yKTsKKwlzZXFfcHJpbnRmKG0sICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgYmV0d2VlbiBpcnEgYW5kIGVuZFxuIik7CisJZGFzZF9zdGF0aXN0aWNzX2FycmF5KG0sIHByb2YtPmRhc2RfaW9fdGltZTMsIGZhY3Rvcik7CisJc2VxX3ByaW50ZihtLCAiIyBvZiByZXEgaW4gY2hhbnEgYXQgZW5xdWV1aW5nICgxLi4zMikgXG4iKTsKKwlkYXNkX3N0YXRpc3RpY3NfYXJyYXkobSwgcHJvZi0+ZGFzZF9pb19ucl9yZXEsIGZhY3Rvcik7CiAjZWxzZQotCWxlbiA9IHNwcmludGYocGFnZSwgIlN0YXRpc3RpY3MgYXJlIG5vdCBhY3RpdmF0ZWQgaW4gdGhpcyBrZXJuZWxcbiIpOworCXNlcV9wcmludGYobSwgIlN0YXRpc3RpY3MgYXJlIG5vdCBhY3RpdmF0ZWQgaW4gdGhpcyBrZXJuZWxcbiIpOwogI2VuZGlmCi0JcmV0dXJuIGRhc2RfY2FsY19tZXRyaWNzKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWRhc2Rfc3RhdGlzdGljc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkgICAgICB1bnNpZ25lZCBsb25nIHVzZXJfbGVuLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBkYXNkX3N0YXRzX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGFzZF9zdGF0c19wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBkYXNkX3N0YXRzX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IHVzZXJfbGVuLCBsb2ZmX3QgKnBvcykKIHsKICNpZmRlZiBDT05GSUdfREFTRF9QUk9GSUxFCiAJY2hhciAqYnVmZmVyLCAqc3RyOwpAQCAtMzA4LDYgKzI5MSwxNSBAQAogI2VuZGlmCQkJCS8qIENPTkZJR19EQVNEX1BST0ZJTEUgKi8KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGFzZF9zdGF0c19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGRhc2Rfc3RhdHNfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGRhc2Rfc3RhdHNfcHJvY193cml0ZSwKK307CisKIC8qCiAgKiBDcmVhdGUgZGFzZCBwcm9jLWZzIGVudHJpZXMuCiAgKiBJbiBjYXNlIGNyZWF0aW9uIGZhaWxlZCwgY2xlYW51cCBhbmQgcmV0dXJuIC1FTk9FTlQuCkBAIC0zMjQsMTMgKzMxNiwxMiBAQAogCQkJCQkgJmRhc2RfZGV2aWNlc19maWxlX29wcyk7CiAJaWYgKCFkYXNkX2RldmljZXNfZW50cnkpCiAJCWdvdG8gb3V0X25vZGV2aWNlczsKLQlkYXNkX3N0YXRpc3RpY3NfZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgic3RhdGlzdGljcyIsCi0JCQkJCQkgIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJCQkJCSAgZGFzZF9wcm9jX3Jvb3RfZW50cnkpOworCWRhc2Rfc3RhdGlzdGljc19lbnRyeSA9IHByb2NfY3JlYXRlKCJzdGF0aXN0aWNzIiwKKwkJCQkJICAgIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCQkJICAgIGRhc2RfcHJvY19yb290X2VudHJ5LAorCQkJCQkgICAgJmRhc2Rfc3RhdHNfcHJvY19mb3BzKTsKIAlpZiAoIWRhc2Rfc3RhdGlzdGljc19lbnRyeSkKIAkJZ290byBvdXRfbm9zdGF0aXN0aWNzOwotCWRhc2Rfc3RhdGlzdGljc19lbnRyeS0+cmVhZF9wcm9jID0gZGFzZF9zdGF0aXN0aWNzX3JlYWQ7Ci0JZGFzZF9zdGF0aXN0aWNzX2VudHJ5LT53cml0ZV9wcm9jID0gZGFzZF9zdGF0aXN0aWNzX3dyaXRlOwogCXJldHVybiAwOwogCiAgb3V0X25vc3RhdGlzdGljczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwppbmRleCA4ZDNkNzIwLi4wOTdkYThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCkBAIC0yMjIsOSArMjIyLDggQEAKIAkJZ290byBjbGVhbnVwX3F1ZXVlOwogCiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShibGtkYXQtPnJlcXVlc3RfcXVldWUsIFRBUEVCTE9DS19IU0VDX1NJWkUpOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhibGtkYXQtPnJlcXVlc3RfcXVldWUsIFRBUEVCTE9DS19NQVhfU0VDKTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoYmxrZGF0LT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMoYmxrZGF0LT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhibGtkYXQtPnJlcXVlc3RfcXVldWUsIFRBUEVCTE9DS19NQVhfU0VDKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKGJsa2RhdC0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKIAlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShibGtkYXQtPnJlcXVlc3RfcXVldWUsIC0xTCk7CiAJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkoYmxrZGF0LT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYwppbmRleCA4MmRhYTNjLi4zNDM4NjU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vaXBsLmg+CiAjaW5jbHVkZSA8YXNtL3NjbHAuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTQwLDEyICs0MSwxMiBAQAogLyogZHVtcCBzeXN0ZW0gaW5mbyAqLwogCiBzdHJ1Y3Qgc3lzX2luZm8gewotCWVudW0gYXJjaF9pZAlhcmNoOwotCXVuc2lnbmVkIGxvbmcJc2FfYmFzZTsKLQl1MzIJCXNhX3NpemU7Ci0JaW50CQljcHVfbWFwW05SX0NQVVNdOwotCXVuc2lnbmVkIGxvbmcJbWVtX3NpemU7Ci0JdW5pb24gc2F2ZV9hcmVhCWxjX21hc2s7CisJZW51bSBhcmNoX2lkCSBhcmNoOworCXVuc2lnbmVkIGxvbmcJIHNhX2Jhc2U7CisJdTMyCQkgc2Ffc2l6ZTsKKwlpbnQJCSBjcHVfbWFwW05SX0NQVVNdOworCXVuc2lnbmVkIGxvbmcJIG1lbV9zaXplOworCXN0cnVjdCBzYXZlX2FyZWEgbGNfbWFzazsKIH07CiAKIHN0cnVjdCBpcGliX2luZm8gewpAQCAtMTgzLDUyICsxODQsOSBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgX19zMzkweF9fCi0vKgotICogQ29udmVydCBzMzkweCAoNjQgYml0KSBjcHUgaW5mbyB0byBzMzkwICgzMiBiaXQpIGNwdSBpbmZvCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzMzkweF90b19zMzkwX3JlZ3ModW5pb24gc2F2ZV9hcmVhICpvdXQsIHVuaW9uIHNhdmVfYXJlYSAqaW4sCi0JCQkJICAgICAgaW50IGNwdSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCW91dC0+czM5MC5ncF9yZWdzW2ldID0gaW4tPnMzOTB4LmdwX3JlZ3NbaV0gJiAweDAwMDAwMDAwZmZmZmZmZmY7Ci0JCW91dC0+czM5MC5hY2NfcmVnc1tpXSA9IGluLT5zMzkweC5hY2NfcmVnc1tpXTsKLQkJb3V0LT5zMzkwLmN0cmxfcmVnc1tpXSA9Ci0JCQlpbi0+czM5MHguY3RybF9yZWdzW2ldICYgMHgwMDAwMDAwMGZmZmZmZmZmOwotCX0KLQkvKiBsb2NvcmUgZm9yIDMxIGJpdCBoYXMgb25seSBzcGFjZSBmb3IgZnByZWdzIDAsMiw0LDYgKi8KLQlvdXQtPnMzOTAuZnBfcmVnc1swXSA9IGluLT5zMzkweC5mcF9yZWdzWzBdOwotCW91dC0+czM5MC5mcF9yZWdzWzFdID0gaW4tPnMzOTB4LmZwX3JlZ3NbMl07Ci0Jb3V0LT5zMzkwLmZwX3JlZ3NbMl0gPSBpbi0+czM5MHguZnBfcmVnc1s0XTsKLQlvdXQtPnMzOTAuZnBfcmVnc1szXSA9IGluLT5zMzkweC5mcF9yZWdzWzZdOwotCW1lbWNweSgmKG91dC0+czM5MC5wc3dbMF0pLCAmKGluLT5zMzkweC5wc3dbMF0pLCA0KTsKLQlvdXQtPnMzOTAucHN3WzFdIHw9IDB4ODsgLyogc2V0IGJpdCAxMiAqLwotCW1lbWNweSgmKG91dC0+czM5MC5wc3dbNF0pLCYoaW4tPnMzOTB4LnBzd1sxMl0pLCA0KTsKLQlvdXQtPnMzOTAucHN3WzRdIHw9IDB4ODA7IC8qIHNldCAoMzFiaXQpIGFkZHJlc3NpbmcgYml0ICovCi0Jb3V0LT5zMzkwLnByZWZfcmVnID0gaW4tPnMzOTB4LnByZWZfcmVnOwotCW91dC0+czM5MC50aW1lciA9IGluLT5zMzkweC50aW1lcjsKLQlvdXQtPnMzOTAuY2xrX2NtcCA9IGluLT5zMzkweC5jbGtfY21wOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgczM5MHhfdG9fczM5MF9zYXZlX2FyZWFzKHZvaWQpCi17Ci0JaW50IGkgPSAxOwotCXN0YXRpYyB1bmlvbiBzYXZlX2FyZWEgdG1wOwotCi0Jd2hpbGUgKHpmY3BkdW1wX3NhdmVfYXJlYXNbaV0pIHsKLQkJczM5MHhfdG9fczM5MF9yZWdzKCZ0bXAsIHpmY3BkdW1wX3NhdmVfYXJlYXNbaV0sIGkpOwotCQltZW1jcHkoemZjcGR1bXBfc2F2ZV9hcmVhc1tpXSwgJnRtcCwgc2l6ZW9mKHRtcCkpOwotCQlpKys7Ci0JfQotfQotCi0jZW5kaWYgLyogX19zMzkweF9fICovCi0KIHN0YXRpYyBpbnQgX19pbml0IGluaXRfY3B1X2luZm8oZW51bSBhcmNoX2lkIGFyY2gpCiB7Ci0JdW5pb24gc2F2ZV9hcmVhICpzYTsKKwlzdHJ1Y3Qgc2F2ZV9hcmVhICpzYTsKIAogCS8qIGdldCBpbmZvIGZvciBib290IGNwdSBmcm9tIGxvd2NvcmUsIHN0b3JlZCBpbiB0aGUgSFNBICovCiAKQEAgLTI0MSwyMCArMTk5LDEyIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAl6ZmNwZHVtcF9zYXZlX2FyZWFzWzBdID0gc2E7Ci0KLSNpZmRlZiBfX3MzOTB4X18KLQkvKiBjb252ZXJ0IHMzOTB4IHJlZ3MgdG8gczM5MCwgaWYgd2UgYXJlIGR1bXBpbmcgYW4gczM5MCBMaW51eCAqLwotCi0JaWYgKGFyY2ggPT0gQVJDSF9TMzkwKQotCQlzMzkweF90b19zMzkwX3NhdmVfYXJlYXMoKTsKLSNlbmRpZgotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoemNvcmVfbXV0ZXgpOwogCi0jZGVmaW5lIERVTVBfVkVSU0lPTgkweDMKKyNkZWZpbmUgRFVNUF9WRVJTSU9OCTB4NQogI2RlZmluZSBEVU1QX01BR0lDCTB4YTgxOTAxNzM2MThmMjNmZFVMTAogI2RlZmluZSBEVU1QX0FSQ0hfUzM5MFgJMgogI2RlZmluZSBEVU1QX0FSQ0hfUzM5MAkxCkBAIC0yNzksNyArMjI5LDE0IEBACiAJdTMyIHZvbG5yOwogCXUzMiBidWlsZF9hcmNoOwogCXU2NCBybWVtX3NpemU7Ci0JY2hhciBwYWQyWzQwMTZdOworCXU4IG12ZHVtcDsKKwl1MTYgY3B1X2NudDsKKwl1MTYgcmVhbF9jcHVfY250OworCXU4IGVuZF9wYWQxWzB4MjAwLTB4MDYxXTsKKwl1NjQgbXZkdW1wX3NpZ247CisJdTY0IG12ZHVtcF96aXBsX3RpbWU7CisJdTggZW5kX3BhZDJbMHg4MDAtMHgyMTBdOworCXUzMiBsY192ZWNbNTEyXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkLF9fYWxpZ25lZF9fKDE2KSkpOwogCiBzdGF0aWMgc3RydWN0IHpjb3JlX2hlYWRlciB6Y29yZV9oZWFkZXIgPSB7CkBAIC0yODksNyArMjQ2LDcgQEAKIAkuZHVtcF9sZXZlbAk9IDAsCiAJLnBhZ2Vfc2l6ZQk9IFBBR0VfU0laRSwKIAkubWVtX3N0YXJ0CT0gMCwKLSNpZmRlZiBfX3MzOTB4X18KKyNpZmRlZiBDT05GSUdfNjRCSVQKIAkuYnVpbGRfYXJjaAk9IERVTVBfQVJDSF9TMzkwWCwKICNlbHNlCiAJLmJ1aWxkX2FyY2gJPSBEVU1QX0FSQ0hfUzM5MCwKQEAgLTM0MCwxMSArMjk3LDcgQEAKIAkJdW5zaWduZWQgbG9uZyBwcmVmaXg7CiAJCXVuc2lnbmVkIGxvbmcgc2Ffb2ZmLCBsZW4sIGJ1Zl9vZmY7CiAKLQkJaWYgKHN5c19pbmZvLmFyY2ggPT0gQVJDSF9TMzkwKQotCQkJcHJlZml4ID0gemZjcGR1bXBfc2F2ZV9hcmVhc1tpXS0+czM5MC5wcmVmX3JlZzsKLQkJZWxzZQotCQkJcHJlZml4ID0gemZjcGR1bXBfc2F2ZV9hcmVhc1tpXS0+czM5MHgucHJlZl9yZWc7Ci0KKwkJcHJlZml4ID0gemZjcGR1bXBfc2F2ZV9hcmVhc1tpXS0+cHJlZl9yZWc7CiAJCXNhX3N0YXJ0ID0gcHJlZml4ICsgc3lzX2luZm8uc2FfYmFzZTsKIAkJc2FfZW5kID0gcHJlZml4ICsgc3lzX2luZm8uc2FfYmFzZSArIHN5c19pbmZvLnNhX3NpemU7CiAKQEAgLTU2MSwzNCArNTE0LDM5IEBACiAJLnJlbGVhc2UJPSB6Y29yZV9yZWlwbF9yZWxlYXNlLAogfTsKIAorI2lmZGVmIENPTkZJR18zMkJJVAogCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0X3MzOTBfbGNfbWFzayh1bmlvbiBzYXZlX2FyZWEgKm1hcCkKK3N0YXRpYyB2b2lkIF9faW5pdCBzZXRfbGNfbWFzayhzdHJ1Y3Qgc2F2ZV9hcmVhICptYXApCiB7Ci0JbWVtc2V0KCZtYXAtPnMzOTAuZXh0X3NhdmUsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAuZXh0X3NhdmUpKTsKLQltZW1zZXQoJm1hcC0+czM5MC50aW1lciwgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MC50aW1lcikpOwotCW1lbXNldCgmbWFwLT5zMzkwLmNsa19jbXAsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAuY2xrX2NtcCkpOwotCW1lbXNldCgmbWFwLT5zMzkwLnBzdywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MC5wc3cpKTsKLQltZW1zZXQoJm1hcC0+czM5MC5wcmVmX3JlZywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MC5wcmVmX3JlZykpOwotCW1lbXNldCgmbWFwLT5zMzkwLmFjY19yZWdzLCAweGZmLCBzaXplb2YobWFwLT5zMzkwLmFjY19yZWdzKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTAuZnBfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MC5mcF9yZWdzKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTAuZ3BfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MC5ncF9yZWdzKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTAuY3RybF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5zMzkwLmN0cmxfcmVncykpOworCW1lbXNldCgmbWFwLT5leHRfc2F2ZSwgMHhmZiwgc2l6ZW9mKG1hcC0+ZXh0X3NhdmUpKTsKKwltZW1zZXQoJm1hcC0+dGltZXIsIDB4ZmYsIHNpemVvZihtYXAtPnRpbWVyKSk7CisJbWVtc2V0KCZtYXAtPmNsa19jbXAsIDB4ZmYsIHNpemVvZihtYXAtPmNsa19jbXApKTsKKwltZW1zZXQoJm1hcC0+cHN3LCAweGZmLCBzaXplb2YobWFwLT5wc3cpKTsKKwltZW1zZXQoJm1hcC0+cHJlZl9yZWcsIDB4ZmYsIHNpemVvZihtYXAtPnByZWZfcmVnKSk7CisJbWVtc2V0KCZtYXAtPmFjY19yZWdzLCAweGZmLCBzaXplb2YobWFwLT5hY2NfcmVncykpOworCW1lbXNldCgmbWFwLT5mcF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5mcF9yZWdzKSk7CisJbWVtc2V0KCZtYXAtPmdwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPmdwX3JlZ3MpKTsKKwltZW1zZXQoJm1hcC0+Y3RybF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5jdHJsX3JlZ3MpKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHNldF9zMzkweF9sY19tYXNrKHVuaW9uIHNhdmVfYXJlYSAqbWFwKQorI2Vsc2UgLyogQ09ORklHXzMyQklUICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBzZXRfbGNfbWFzayhzdHJ1Y3Qgc2F2ZV9hcmVhICptYXApCiB7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LmZwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LmZwX3JlZ3MpKTsKLQltZW1zZXQoJm1hcC0+czM5MHguZ3BfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MHguZ3BfcmVncykpOwotCW1lbXNldCgmbWFwLT5zMzkweC5wc3csIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LnBzdykpOwotCW1lbXNldCgmbWFwLT5zMzkweC5wcmVmX3JlZywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MHgucHJlZl9yZWcpKTsKLQltZW1zZXQoJm1hcC0+czM5MHguZnBfY3RybF9yZWcsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LmZwX2N0cmxfcmVnKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LnRvZF9yZWcsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LnRvZF9yZWcpKTsKLQltZW1zZXQoJm1hcC0+czM5MHgudGltZXIsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LnRpbWVyKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LmNsa19jbXAsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LmNsa19jbXApKTsKLQltZW1zZXQoJm1hcC0+czM5MHguYWNjX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LmFjY19yZWdzKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LmN0cmxfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MHguY3RybF9yZWdzKSk7CisJbWVtc2V0KCZtYXAtPmZwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPmZwX3JlZ3MpKTsKKwltZW1zZXQoJm1hcC0+Z3BfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+Z3BfcmVncykpOworCW1lbXNldCgmbWFwLT5wc3csIDB4ZmYsIHNpemVvZihtYXAtPnBzdykpOworCW1lbXNldCgmbWFwLT5wcmVmX3JlZywgMHhmZiwgc2l6ZW9mKG1hcC0+cHJlZl9yZWcpKTsKKwltZW1zZXQoJm1hcC0+ZnBfY3RybF9yZWcsIDB4ZmYsIHNpemVvZihtYXAtPmZwX2N0cmxfcmVnKSk7CisJbWVtc2V0KCZtYXAtPnRvZF9yZWcsIDB4ZmYsIHNpemVvZihtYXAtPnRvZF9yZWcpKTsKKwltZW1zZXQoJm1hcC0+dGltZXIsIDB4ZmYsIHNpemVvZihtYXAtPnRpbWVyKSk7CisJbWVtc2V0KCZtYXAtPmNsa19jbXAsIDB4ZmYsIHNpemVvZihtYXAtPmNsa19jbXApKTsKKwltZW1zZXQoJm1hcC0+YWNjX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPmFjY19yZWdzKSk7CisJbWVtc2V0KCZtYXAtPmN0cmxfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+Y3RybF9yZWdzKSk7CiB9CiAKKyNlbmRpZiAvKiBDT05GSUdfMzJCSVQgKi8KKwogLyoKICAqIEluaXRpYWxpemUgZHVtcCBnbG9iYWxzIGZvciBhIGdpdmVuIGFyY2hpdGVjdHVyZQogICovCkBAIC01OTksMjEgKzU1NywxOCBAQAogCXN3aXRjaCAoYXJjaCkgewogCWNhc2UgQVJDSF9TMzkwWDoKIAkJcHJfYWxlcnQoIkRFVEVDVEVEICdTMzkwWCAoNjQgYml0KSBPUydcbiIpOwotCQlzeXNfaW5mby5zYV9iYXNlID0gU0FWRV9BUkVBX0JBU0VfUzM5MFg7Ci0JCXN5c19pbmZvLnNhX3NpemUgPSBzaXplb2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCk7Ci0JCXNldF9zMzkweF9sY19tYXNrKCZzeXNfaW5mby5sY19tYXNrKTsKIAkJYnJlYWs7CiAJY2FzZSBBUkNIX1MzOTA6CiAJCXByX2FsZXJ0KCJERVRFQ1RFRCAnUzM5MCAoMzIgYml0KSBPUydcbiIpOwotCQlzeXNfaW5mby5zYV9iYXNlID0gU0FWRV9BUkVBX0JBU0VfUzM5MDsKLQkJc3lzX2luZm8uc2Ffc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTApOwotCQlzZXRfczM5MF9sY19tYXNrKCZzeXNfaW5mby5sY19tYXNrKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfYWxlcnQoIjB4JXggaXMgYW4gdW5rbm93biBhcmNoaXRlY3R1cmUuXG4iLGFyY2gpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJc3lzX2luZm8uc2FfYmFzZSA9IFNBVkVfQVJFQV9CQVNFOworCXN5c19pbmZvLnNhX3NpemUgPSBzaXplb2Yoc3RydWN0IHNhdmVfYXJlYSk7CiAJc3lzX2luZm8uYXJjaCA9IGFyY2g7CisJc2V0X2xjX21hc2soJnN5c19pbmZvLmxjX21hc2spOwogCXJjID0gaW5pdF9jcHVfaW5mbyhhcmNoKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKQEAgLTY2MCw4ICs2MTUsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB6Y29yZV9oZWFkZXJfaW5pdChpbnQgYXJjaCwgc3RydWN0IHpjb3JlX2hlYWRlciAqaGRyKQogewotCWludCByYzsKKwlpbnQgcmMsIGk7CiAJdW5zaWduZWQgbG9uZyBtZW1vcnkgPSAwOworCXUzMiBwcmVmaXg7CiAKIAlpZiAoYXJjaCA9PSBBUkNIX1MzOTBYKQogCQloZHItPmFyY2hfaWQgPSBEVU1QX0FSQ0hfUzM5MFg7CkBAIC02NzYsNiArNjMyLDE0IEBACiAJaGRyLT5udW1fcGFnZXMgPSBtZW1vcnkgLyBQQUdFX1NJWkU7CiAJaGRyLT50b2QgPSBnZXRfY2xvY2soKTsKIAlnZXRfY3B1X2lkKCZoZHItPmNwdV9pZCk7CisJZm9yIChpID0gMDsgemZjcGR1bXBfc2F2ZV9hcmVhc1tpXTsgaSsrKSB7CisJCXByZWZpeCA9IHpmY3BkdW1wX3NhdmVfYXJlYXNbaV0tPnByZWZfcmVnOworCQloZHItPnJlYWxfY3B1X2NudCsrOworCQlpZiAoIXByZWZpeCkKKwkJCWNvbnRpbnVlOworCQloZHItPmxjX3ZlY1toZHItPmNwdV9jbnRdID0gcHJlZml4OworCQloZHItPmNwdV9jbnQrKzsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc0MSwxNCArNzA1LDIxIEBACiAJaWYgKHJjKQogCQlnb3RvIGZhaWw7CiAKLSNpZm5kZWYgX19zMzkweF9fCisjaWZkZWYgQ09ORklHXzY0QklUCisJaWYgKGFyY2ggPT0gQVJDSF9TMzkwKSB7CisJCXByX2FsZXJ0KCJUaGUgNjQtYml0IGR1bXAgdG9vbCBjYW5ub3QgYmUgdXNlZCBmb3IgYSAiCisJCQkgIjMyLWJpdCBzeXN0ZW1cbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbDsKKwl9CisjZWxzZSAvKiBDT05GSUdfNjRCSVQgKi8KIAlpZiAoYXJjaCA9PSBBUkNIX1MzOTBYKSB7CiAJCXByX2FsZXJ0KCJUaGUgMzItYml0IGR1bXAgdG9vbCBjYW5ub3QgYmUgdXNlZCBmb3IgYSAiCiAJCQkgIjY0LWJpdCBzeXN0ZW1cbiIpOwogCQlyYyA9IC1FSU5WQUw7CiAJCWdvdG8gZmFpbDsKIAl9Ci0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAogCXJjID0gc3lzX2luZm9faW5pdChhcmNoKTsKIAlpZiAocmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jIGIvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYwppbmRleCA3YTI4YTMwLi4zN2RmNDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMKQEAgLTIyNCw4ICsyMjQsOCBAQAogICovCiB2b2lkIGNjd19yZXF1ZXN0X2hhbmRsZXIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CisJc3RydWN0IGlyYiAqaXJiID0gKHN0cnVjdCBpcmIgKikmUzM5MF9sb3djb3JlLmlyYjsKIAlzdHJ1Y3QgY2N3X3JlcXVlc3QgKnJlcSA9ICZjZGV2LT5wcml2YXRlLT5yZXE7Ci0Jc3RydWN0IGlyYiAqaXJiID0gKHN0cnVjdCBpcmIgKikgX19MQ19JUkI7CiAJZW51bSBpb19zdGF0dXMgc3RhdHVzOwogCWludCByYyA9IC1FT1BOT1RTVVBQOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCmluZGV4IDFlY2QzZTUuLjQwMzhmNWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwpAQCAtNTc0LDcgKzU3NCw3IEBACiAJc2VjbV9hcmVhLT5yZXF1ZXN0Lmxlbmd0aCA9IDB4MDA1MDsKIAlzZWNtX2FyZWEtPnJlcXVlc3QuY29kZSA9IDB4MDAxNjsKIAotCXNlY21fYXJlYS0+a2V5ID0gUEFHRV9ERUZBVUxUX0tFWTsKKwlzZWNtX2FyZWEtPmtleSA9IFBBR0VfREVGQVVMVF9LRVkgPj4gNDsKIAlzZWNtX2FyZWEtPmN1Yl9hZGRyMSA9ICh1NjQpKHVuc2lnbmVkIGxvbmcpY3NzLT5jdWJfYWRkcjE7CiAJc2VjbV9hcmVhLT5jdWJfYWRkcjIgPSAodTY0KSh1bnNpZ25lZCBsb25nKWNzcy0+Y3ViX2FkZHIyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMKaW5kZXggYzg0YWM5NC4uODUyNjEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYwpAQCAtNTEsNyArNTEsNyBAQAogewogCXN0cnVjdCBjaHNjX3ByaXZhdGUgKnByaXZhdGUgPSBzY2gtPnByaXZhdGU7CiAJc3RydWN0IGNoc2NfcmVxdWVzdCAqcmVxdWVzdCA9IHByaXZhdGUtPnJlcXVlc3Q7Ci0Jc3RydWN0IGlyYiAqaXJiID0gKHN0cnVjdCBpcmIgKilfX0xDX0lSQjsKKwlzdHJ1Y3QgaXJiICppcmIgPSAoc3RydWN0IGlyYiAqKSZTMzkwX2xvd2NvcmUuaXJiOwogCiAJQ0hTQ19MT0coNCwgImlyYiIpOwogCUNIU0NfTE9HX0hFWCg0LCBpcmIsIHNpemVvZigqaXJiKSk7CkBAIC0yMzcsNyArMjM3LDcgQEAKIAlpbnQgcmV0ID0gLUVOT0RFVjsKIAljaGFyIGRiZlsxMF07CiAKLQljaHNjX2FyZWEtPmhlYWRlci5rZXkgPSBQQUdFX0RFRkFVTFRfS0VZOworCWNoc2NfYXJlYS0+aGVhZGVyLmtleSA9IFBBR0VfREVGQVVMVF9LRVkgPj4gNDsKIAl3aGlsZSAoKHNjaCA9IGNoc2NfZ2V0X25leHRfc3ViY2hhbm5lbChzY2gpKSkgewogCQlzcGluX2xvY2soc2NoLT5sb2NrKTsKIAkJcHJpdmF0ZSA9IHNjaC0+cHJpdmF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCmluZGV4IDEyNmYyNDAuLmY3MzZjZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwpAQCAtNjI1LDggKzYyNSw4IEBACiAJLyoKIAkgKiBHZXQgaW50ZXJydXB0IGluZm9ybWF0aW9uIGZyb20gbG93Y29yZQogCSAqLwotCXRwaV9pbmZvID0gKHN0cnVjdCB0cGlfaW5mbyAqKSBfX0xDX1NVQkNIQU5ORUxfSUQ7Ci0JaXJiID0gKHN0cnVjdCBpcmIgKikgX19MQ19JUkI7CisJdHBpX2luZm8gPSAoc3RydWN0IHRwaV9pbmZvICopJlMzOTBfbG93Y29yZS5zdWJjaGFubmVsX2lkOworCWlyYiA9IChzdHJ1Y3QgaXJiICopJlMzOTBfbG93Y29yZS5pcmI7CiAJZG8gewogCQlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0lPX0lOVEVSUlVQVF0rKzsKIAkJLyoKQEAgLTY2MSw3ICs2NjEsNyBAQAogCQkgKiBXZSBkb24ndCBkbyB0aGlzIGZvciBWTSBiZWNhdXNlIGEgdHBpIGRyb3BzIHRoZSBjcHUKIAkJICogb3V0IG9mIHRoZSBzaWUgd2hpY2ggY29zdHMgbW9yZSBjeWNsZXMgdGhhbiBpdCBzYXZlcy4KIAkJICovCi0JfSB3aGlsZSAoIU1BQ0hJTkVfSVNfVk0gJiYgdHBpIChOVUxMKSAhPSAwKTsKKwl9IHdoaWxlIChNQUNISU5FX0lTX0xQQVIgJiYgdHBpKE5VTEwpICE9IDApOwogCWlycV9leGl0KCk7CiAJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKIH0KQEAgLTY4MiwxMCArNjgyLDEwIEBACiAJc3RydWN0IGlyYiAqaXJiOwogCWludCBpcnFfY29udGV4dDsKIAotCXRwaV9pbmZvID0gKHN0cnVjdCB0cGlfaW5mbyAqKSBfX0xDX1NVQkNIQU5ORUxfSUQ7CisJdHBpX2luZm8gPSAoc3RydWN0IHRwaV9pbmZvICopJlMzOTBfbG93Y29yZS5zdWJjaGFubmVsX2lkOwogCWlmICh0cGkoTlVMTCkgIT0gMSkKIAkJcmV0dXJuIDA7Ci0JaXJiID0gKHN0cnVjdCBpcmIgKikgX19MQ19JUkI7CisJaXJiID0gKHN0cnVjdCBpcmIgKikmUzM5MF9sb3djb3JlLmlyYjsKIAkvKiBTdG9yZSBpbnRlcnJ1cHQgcmVzcG9uc2UgYmxvY2sgdG8gbG93Y29yZS4gKi8KIAlpZiAodHNjaCh0cGlfaW5mby0+c2NoaWQsIGlyYikgIT0gMCkKIAkJLyogTm90IHN0YXR1cyBwZW5kaW5nIG9yIG5vdCBvcGVyYXRpb25hbC4gKi8KQEAgLTg4NSw3ICs4ODUsNyBAQAogCQlzdHJ1Y3QgdHBpX2luZm8gdGk7CiAKIAkJaWYgKHRwaSgmdGkpKSB7Ci0JCQl0c2NoKHRpLnNjaGlkLCAoc3RydWN0IGlyYiAqKV9fTENfSVJCKTsKKwkJCXRzY2godGkuc2NoaWQsIChzdHJ1Y3QgaXJiICopJlMzOTBfbG93Y29yZS5pcmIpOwogCQkJaWYgKHNjaGlkX2VxdWFsKCZ0aS5zY2hpZCwgJnNjaGlkKSkKIAkJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTA4Myw3ICsxMDgzLDcgQEAKIAlzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZDsKIAlzdHJ1Y3Qgc2NoaWIgc2NoaWI7CiAKLQlzY2hpZCA9ICooc3RydWN0IHN1YmNoYW5uZWxfaWQgKilfX0xDX1NVQkNIQU5ORUxfSUQ7CisJc2NoaWQgPSAqKHN0cnVjdCBzdWJjaGFubmVsX2lkICopJlMzOTBfbG93Y29yZS5zdWJjaGFubmVsX2lkOwogCWlmICghc2NoaWQub25lKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlpZiAoc3RzY2goc2NoaWQsICZzY2hpYikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nydy5jIGIvZHJpdmVycy9zMzkwL2Npby9jcncuYwppbmRleCBkMTU3NjY1Li40MjVmNzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Nydy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3J3LmMKQEAgLTgsMTUgKzgsMTYgQEAKICAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+LAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGFzbS9jcncuaD4KIAotc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgY3J3X3NlbWFwaG9yZTsKIHN0YXRpYyBERUZJTkVfTVVURVgoY3J3X2hhbmRsZXJfbXV0ZXgpOwogc3RhdGljIGNyd19oYW5kbGVyX3QgY3J3X2hhbmRsZXJzW05SX1JTQ1NdOworc3RhdGljIGF0b21pY190IGNyd19ucl9yZXEgPSBBVE9NSUNfSU5JVCgwKTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChjcndfaGFuZGxlcl93YWl0X3EpOwogCiAvKioKICAqIGNyd19yZWdpc3Rlcl9oYW5kbGVyKCkgLSByZWdpc3RlciBhIGNoYW5uZWwgcmVwb3J0IHdvcmQgaGFuZGxlcgpAQCAtNTksMTIgKzYwLDE0IEBACiBzdGF0aWMgaW50IGNyd19jb2xsZWN0X2luZm8odm9pZCAqdW51c2VkKQogewogCXN0cnVjdCBjcncgY3J3WzJdOwotCWludCBjY29kZTsKKwlpbnQgY2NvZGUsIHNpZ25hbDsKIAl1bnNpZ25lZCBpbnQgY2hhaW47Ci0JaW50IGlnbm9yZTsKIAogcmVwZWF0OgotCWlnbm9yZSA9IGRvd25faW50ZXJydXB0aWJsZSgmY3J3X3NlbWFwaG9yZSk7CisJc2lnbmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNyd19oYW5kbGVyX3dhaXRfcSwKKwkJCQkJICBhdG9taWNfcmVhZCgmY3J3X25yX3JlcSkgPiAwKTsKKwlpZiAodW5saWtlbHkoc2lnbmFsKSkKKwkJYXRvbWljX2luYygmY3J3X25yX3JlcSk7CiAJY2hhaW4gPSAwOwogCXdoaWxlICgxKSB7CiAJCWNyd19oYW5kbGVyX3QgaGFuZGxlcjsKQEAgLTEyMiwyNSArMTI1LDIzIEBACiAJCS8qIGNoYWluIGlzIGFsd2F5cyAwIG9yIDEgaGVyZS4gKi8KIAkJY2hhaW4gPSBjcndbY2hhaW5dLmNobiA/IGNoYWluICsgMSA6IDA7CiAJfQorCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjcndfbnJfcmVxKSkKKwkJd2FrZV91cCgmY3J3X2hhbmRsZXJfd2FpdF9xKTsKIAlnb3RvIHJlcGVhdDsKIAlyZXR1cm4gMDsKIH0KIAogdm9pZCBjcndfaGFuZGxlX2NoYW5uZWxfcmVwb3J0KHZvaWQpCiB7Ci0JdXAoJmNyd19zZW1hcGhvcmUpOworCWF0b21pY19pbmMoJmNyd19ucl9yZXEpOworCXdha2VfdXAoJmNyd19oYW5kbGVyX3dhaXRfcSk7CiB9CiAKLS8qCi0gKiBTZXBhcmF0ZSBpbml0Y2FsbCBuZWVkZWQgZm9yIHNlbWFwaG9yZSBpbml0aWFsaXphdGlvbiBzaW5jZQotICogY3J3X2hhbmRsZV9jaGFubmVsX3JlcG9ydCBtaWdodCBiZSBjYWxsZWQgYmVmb3JlIGNyd19tYWNoaW5lX2NoZWNrX2luaXQuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGNyd19pbml0X3NlbWFwaG9yZSh2b2lkKQordm9pZCBjcndfd2FpdF9mb3JfY2hhbm5lbF9yZXBvcnQodm9pZCkKIHsKLQlpbml0X01VVEVYX0xPQ0tFRCgmY3J3X3NlbWFwaG9yZSk7Ci0JcmV0dXJuIDA7CisJY3J3X2hhbmRsZV9jaGFubmVsX3JlcG9ydCgpOworCXdhaXRfZXZlbnQoY3J3X2hhbmRsZXJfd2FpdF9xLCBhdG9taWNfcmVhZCgmY3J3X25yX3JlcSkgPT0gMCk7CiB9Ci1wdXJlX2luaXRjYWxsKGNyd19pbml0X3NlbWFwaG9yZSk7CiAKIC8qCiAgKiBNYWNoaW5lIGNoZWNrcyBmb3IgdGhlIGNoYW5uZWwgc3Vic3lzdGVtIG11c3QgYmUgZW5hYmxlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jc3MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKaW5kZXggNzY3OWFlZS4uMjc2OWRhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jc3MuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8YXNtL2lzYy5oPgogI2luY2x1ZGUgPGFzbS9jcncuaD4KIApAQCAtMjMyLDcgKzIzMyw3IEBACiAJaWYgKCFnZXRfZGV2aWNlKCZzY2gtPmRldikpCiAJCXJldHVybjsKIAlzY2gtPnRvZG8gPSB0b2RvOwotCWlmICghcXVldWVfd29yayhzbG93X3BhdGhfd3EsICZzY2gtPnRvZG9fd29yaykpIHsKKwlpZiAoIXF1ZXVlX3dvcmsoY2lvX3dvcmtfcSwgJnNjaC0+dG9kb193b3JrKSkgewogCQkvKiBBbHJlYWR5IHF1ZXVlZCwgcmVsZWFzZSB3b3JrcXVldWUgcmVmLiAqLwogCQlwdXRfZGV2aWNlKCZzY2gtPmRldik7CiAJfQpAQCAtNTQzLDcgKzU0NCw3IEBACiB9CiAKIHN0YXRpYyBERUNMQVJFX1dPUksoc2xvd19wYXRoX3dvcmssIGNzc19zbG93X3BhdGhfZnVuYyk7Ci1zdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc2xvd19wYXRoX3dxOworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNpb193b3JrX3E7CiAKIHZvaWQgY3NzX3NjaGVkdWxlX2V2YWwoc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQpCiB7CkBAIC01NTIsNyArNTUzLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd19zdWJjaGFubmVsX2xvY2ssIGZsYWdzKTsKIAlpZHNldF9zY2hfYWRkKHNsb3dfc3ViY2hhbm5lbF9zZXQsIHNjaGlkKTsKIAlhdG9taWNfc2V0KCZjc3NfZXZhbF9zY2hlZHVsZWQsIDEpOwotCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmc2xvd19wYXRoX3dvcmspOworCXF1ZXVlX3dvcmsoY2lvX3dvcmtfcSwgJnNsb3dfcGF0aF93b3JrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogfQogCkBAIC01NjMsNyArNTY0LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd19zdWJjaGFubmVsX2xvY2ssIGZsYWdzKTsKIAlpZHNldF9maWxsKHNsb3dfc3ViY2hhbm5lbF9zZXQpOwogCWF0b21pY19zZXQoJmNzc19ldmFsX3NjaGVkdWxlZCwgMSk7Ci0JcXVldWVfd29yayhzbG93X3BhdGhfd3EsICZzbG93X3BhdGhfd29yayk7CisJcXVldWVfd29yayhjaW9fd29ya19xLCAmc2xvd19wYXRoX3dvcmspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTU5NCwxNCArNTk1LDE0IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiAJaWRzZXRfYWRkX3NldChzbG93X3N1YmNoYW5uZWxfc2V0LCB1bnJlZ19zZXQpOwogCWF0b21pY19zZXQoJmNzc19ldmFsX3NjaGVkdWxlZCwgMSk7Ci0JcXVldWVfd29yayhzbG93X3BhdGhfd3EsICZzbG93X3BhdGhfd29yayk7CisJcXVldWVfd29yayhjaW9fd29ya19xLCAmc2xvd19wYXRoX3dvcmspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiAJaWRzZXRfZnJlZSh1bnJlZ19zZXQpOwogfQogCiB2b2lkIGNzc193YWl0X2Zvcl9zbG93X3BhdGgodm9pZCkKIHsKLQlmbHVzaF93b3JrcXVldWUoc2xvd19wYXRoX3dxKTsKKwlmbHVzaF93b3JrcXVldWUoY2lvX3dvcmtfcSk7CiB9CiAKIC8qIFNjaGVkdWxlIHJlcHJvYmluZyBvZiBhbGwgdW5yZWdpc3RlcmVkIHN1YmNoYW5uZWxzLiAqLwpAQCAtOTkyLDEyICs5OTMsMjEgQEAKIAlyZXQgPSBjc3NfYnVzX2luaXQoKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCisJY2lvX3dvcmtfcSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJjaW8iKTsKKwlpZiAoIWNpb193b3JrX3EpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfYnVzOworCX0KIAlyZXQgPSBpb19zdWJjaGFubmVsX2luaXQoKTsKIAlpZiAocmV0KQotCQljc3NfYnVzX2NsZWFudXAoKTsKKwkJZ290byBvdXRfd3E7CiAKIAlyZXR1cm4gcmV0Oworb3V0X3dxOgorCWRlc3Ryb3lfd29ya3F1ZXVlKGNpb193b3JrX3EpOworb3V0X2J1czoKKwljc3NfYnVzX2NsZWFudXAoKTsKKwlyZXR1cm4gcmV0OwogfQogc3Vic3lzX2luaXRjYWxsKGNoYW5uZWxfc3Vic3lzdGVtX2luaXQpOwogCkBAIC0xMDA2LDEwICsxMDE2LDI1IEBACiAJc3RydWN0IGNzc19kcml2ZXIgKmNzc2RydiA9IHRvX2Nzc2RyaXZlcihkcnYpOwogCiAJaWYgKGNzc2Rydi0+c2V0dGxlKQotCQljc3NkcnYtPnNldHRsZSgpOworCQlyZXR1cm4gY3NzZHJ2LT5zZXR0bGUoKTsKIAlyZXR1cm4gMDsKIH0KIAoraW50IGNzc19jb21wbGV0ZV93b3JrKHZvaWQpCit7CisJaW50IHJldDsKKworCS8qIFdhaXQgZm9yIHRoZSBldmFsdWF0aW9uIG9mIHN1YmNoYW5uZWxzIHRvIGZpbmlzaC4gKi8KKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY3NzX2V2YWxfd3EsCisJCQkJICAgICAgIGF0b21pY19yZWFkKCZjc3NfZXZhbF9zY2hlZHVsZWQpID09IDApOworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVFI7CisJZmx1c2hfd29ya3F1ZXVlKGNpb193b3JrX3EpOworCS8qIFdhaXQgZm9yIHRoZSBzdWJjaGFubmVsIHR5cGUgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gdG8gZmluaXNoICovCisJcmV0dXJuIGJ1c19mb3JfZWFjaF9kcnYoJmNzc19idXNfdHlwZSwgTlVMTCwgTlVMTCwgY3NzX3NldHRsZSk7Cit9CisKKwogLyoKICAqIFdhaXQgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiBkZXZpY2VzIHRvIGZpbmlzaCwgdG8gbWFrZSBzdXJlIHdlIGFyZQogICogZG9uZSB3aXRoIG91ciBzZXR1cCBpZiB0aGUgc2VhcmNoIGZvciB0aGUgcm9vdCBkZXZpY2Ugc3RhcnRzLgpAQCAtMTAxOCwxMyArMTA0Myw0MSBAQAogewogCS8qIFN0YXJ0IGluaXRpYWwgc3ViY2hhbm5lbCBldmFsdWF0aW9uLiAqLwogCWNzc19zY2hlZHVsZV9ldmFsX2FsbCgpOwotCS8qIFdhaXQgZm9yIHRoZSBldmFsdWF0aW9uIG9mIHN1YmNoYW5uZWxzIHRvIGZpbmlzaC4gKi8KLQl3YWl0X2V2ZW50KGNzc19ldmFsX3dxLCBhdG9taWNfcmVhZCgmY3NzX2V2YWxfc2NoZWR1bGVkKSA9PSAwKTsKLQkvKiBXYWl0IGZvciB0aGUgc3ViY2hhbm5lbCB0eXBlIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIHRvIGZpbmlzaCAqLwotCXJldHVybiBidXNfZm9yX2VhY2hfZHJ2KCZjc3NfYnVzX3R5cGUsIE5VTEwsIE5VTEwsIGNzc19zZXR0bGUpOworCWNzc19jb21wbGV0ZV93b3JrKCk7CisJcmV0dXJuIDA7CiB9CiBzdWJzeXNfaW5pdGNhbGxfc3luYyhjaGFubmVsX3N1YnN5c3RlbV9pbml0X3N5bmMpOwogCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBzc2l6ZV90IGNpb19zZXR0bGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJaW50IHJldDsKKworCS8qIEhhbmRsZSBwZW5kaW5nIENSVydzLiAqLworCWNyd193YWl0X2Zvcl9jaGFubmVsX3JlcG9ydCgpOworCXJldCA9IGNzc19jb21wbGV0ZV93b3JrKCk7CisKKwlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpb19zZXR0bGVfcHJvY19mb3BzID0geworCS53cml0ZSA9IGNpb19zZXR0bGVfd3JpdGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjaW9fc2V0dGxlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OworCisJZW50cnkgPSBwcm9jX2NyZWF0ZSgiY2lvX3NldHRsZSIsIFNfSVdVU1IsIE5VTEwsCisJCQkgICAgJmNpb19zZXR0bGVfcHJvY19mb3BzKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChjaW9fc2V0dGxlX2luaXQpOworI2VuZGlmIC8qQ09ORklHX1BST0NfRlMqLworCiBpbnQgc2NoX2lzX3BzZXVkb19zY2goc3RydWN0IHN1YmNoYW5uZWwgKnNjaCkKIHsKIAlyZXR1cm4gc2NoID09IHRvX2NzcyhzY2gtPmRldi5wYXJlbnQpLT5wc2V1ZG9fc3ViY2hhbm5lbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmggYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oCmluZGV4IGZlODRiOTIuLjdlMzc4ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuaApAQCAtOTUsNyArOTUsNyBAQAogCWludCAoKmZyZWV6ZSkoc3RydWN0IHN1YmNoYW5uZWwgKik7CiAJaW50ICgqdGhhdykgKHN0cnVjdCBzdWJjaGFubmVsICopOwogCWludCAoKnJlc3RvcmUpKHN0cnVjdCBzdWJjaGFubmVsICopOwotCXZvaWQgKCpzZXR0bGUpKHZvaWQpOworCWludCAoKnNldHRsZSkodm9pZCk7CiAJY29uc3QgY2hhciAqbmFtZTsKIH07CiAKQEAgLTE0NiwxMiArMTQ2LDEzIEBACiAvKiBIZWxwZXIgZnVuY3Rpb25zIHRvIGJ1aWxkIGxpc3RzIGZvciB0aGUgc2xvdyBwYXRoLiAqLwogdm9pZCBjc3Nfc2NoZWR1bGVfZXZhbChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCk7CiB2b2lkIGNzc19zY2hlZHVsZV9ldmFsX2FsbCh2b2lkKTsKK2ludCBjc3NfY29tcGxldGVfd29yayh2b2lkKTsKIAogaW50IHNjaF9pc19wc2V1ZG9fc2NoKHN0cnVjdCBzdWJjaGFubmVsICopOwogc3RydWN0IHNjaGliOwogaW50IGNzc19zY2hfaXNfdmFsaWQoc3RydWN0IHNjaGliICopOwogCi1leHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNsb3dfcGF0aF93cTsKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2lvX3dvcmtfcTsKIHZvaWQgY3NzX3dhaXRfZm9yX3Nsb3dfcGF0aCh2b2lkKTsKIHZvaWQgY3NzX3NjaGVkX3NjaF90b2RvKHN0cnVjdCBzdWJjaGFubmVsICpzY2gsIGVudW0gc2NoX3RvZG8gdG9kbyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCmluZGV4IGE2YzdkNTQuLmM2YWJiNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwpAQCAtMTM2LDcgKzEzNiw2IEBACiBzdGF0aWMgaW50IGlvX3N1YmNoYW5uZWxfY2hwX2V2ZW50KHN0cnVjdCBzdWJjaGFubmVsICosIHN0cnVjdCBjaHBfbGluayAqLAogCQkJCSAgIGludCk7CiBzdGF0aWMgdm9pZCByZWNvdmVyeV9mdW5jKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1zdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2N3X2RldmljZV93b3JrOwogd2FpdF9xdWV1ZV9oZWFkX3QgY2N3X2RldmljZV9pbml0X3dxOwogYXRvbWljX3QgY2N3X2RldmljZV9pbml0X2NvdW50OwogCkBAIC0xNTksMTEgKzE1OCwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpb19zdWJjaGFubmVsX3NldHRsZSh2b2lkKQorc3RhdGljIGludCBpb19zdWJjaGFubmVsX3NldHRsZSh2b2lkKQogewotCXdhaXRfZXZlbnQoY2N3X2RldmljZV9pbml0X3dxLAotCQkgICBhdG9taWNfcmVhZCgmY2N3X2RldmljZV9pbml0X2NvdW50KSA9PSAwKTsKLQlmbHVzaF93b3JrcXVldWUoY2N3X2RldmljZV93b3JrKTsKKwlpbnQgcmV0OworCisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNjd19kZXZpY2VfaW5pdF93cSwKKwkJCQlhdG9taWNfcmVhZCgmY2N3X2RldmljZV9pbml0X2NvdW50KSA9PSAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlRSOworCWZsdXNoX3dvcmtxdWV1ZShjaW9fd29ya19xKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBjc3NfZHJpdmVyIGlvX3N1YmNoYW5uZWxfZHJpdmVyID0gewpAQCAtMTg4LDI3ICsxOTIsMTMgQEAKIAlhdG9taWNfc2V0KCZjY3dfZGV2aWNlX2luaXRfY291bnQsIDApOwogCXNldHVwX3RpbWVyKCZyZWNvdmVyeV90aW1lciwgcmVjb3ZlcnlfZnVuYywgMCk7CiAKLQljY3dfZGV2aWNlX3dvcmsgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiY2lvIik7Ci0JaWYgKCFjY3dfZGV2aWNlX3dvcmspCi0JCXJldHVybiAtRU5PTUVNOwotCXNsb3dfcGF0aF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrc2xvd2NydyIpOwotCWlmICghc2xvd19wYXRoX3dxKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2VycjsKLQl9Ci0JaWYgKChyZXQgPSBidXNfcmVnaXN0ZXIgKCZjY3dfYnVzX3R5cGUpKSkKLQkJZ290byBvdXRfZXJyOwotCisJcmV0ID0gYnVzX3JlZ2lzdGVyKCZjY3dfYnVzX3R5cGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAJcmV0ID0gY3NzX2RyaXZlcl9yZWdpc3RlcigmaW9fc3ViY2hhbm5lbF9kcml2ZXIpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0X2VycjsKKwkJYnVzX3VucmVnaXN0ZXIoJmNjd19idXNfdHlwZSk7CiAKLQlyZXR1cm4gMDsKLW91dF9lcnI6Ci0JaWYgKGNjd19kZXZpY2Vfd29yaykKLQkJZGVzdHJveV93b3JrcXVldWUoY2N3X2RldmljZV93b3JrKTsKLQlpZiAoc2xvd19wYXRoX3dxKQotCQlkZXN0cm95X3dvcmtxdWV1ZShzbG93X3BhdGhfd3EpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEzNDgsNyArMTMzOCw3IEBACiAJCS8qIE5vdCBvcGVyYXRpb25hbC4gKi8KIAkJaWYgKCFjZGV2KQogCQkJcmV0dXJuIElPX1NDSF9VTlJFRzsKLQkJaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkpCisJCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkgIT0gTk9USUZZX09LKQogCQkJcmV0dXJuIElPX1NDSF9VTlJFRzsKIAkJcmV0dXJuIElPX1NDSF9PUlBIX1VOUkVHOwogCX0KQEAgLTEzNTYsMTIgKzEzNDYsMTIgQEAKIAlpZiAoIWNkZXYpCiAJCXJldHVybiBJT19TQ0hfQVRUQUNIOwogCWlmIChzY2gtPnNjaGliLnBtY3cuZGV2ICE9IGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubykgewotCQlpZiAoIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSkKKwkJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSAhPSBOT1RJRllfT0spCiAJCQlyZXR1cm4gSU9fU0NIX1VOUkVHX0FUVEFDSDsKIAkJcmV0dXJuIElPX1NDSF9PUlBIX0FUVEFDSDsKIAl9CiAJaWYgKChzY2gtPnNjaGliLnBtY3cucGFtICYgc2NoLT5vcG0pID09IDApIHsKLQkJaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fTk9fUEFUSCkpCisJCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fTk9fUEFUSCkgIT0gTk9USUZZX09LKQogCQkJcmV0dXJuIElPX1NDSF9VTlJFRzsKIAkJcmV0dXJuIElPX1NDSF9ESVNDOwogCX0KQEAgLTE0MTAsNiArMTQwMCwxMiBAQAogCQlyYyA9IDA7CiAJCWdvdG8gb3V0X3VubG9jazsKIAljYXNlIElPX1NDSF9WRVJJRlk6CisJCWlmIChjZGV2LT5wcml2YXRlLT5mbGFncy5yZXN1bWluZyA9PSAxKSB7CisJCQlpZiAoY2lvX2VuYWJsZV9zdWJjaGFubmVsKHNjaCwgKHUzMikoYWRkcl90KXNjaCkpIHsKKwkJCQljY3dfZGV2aWNlX3NldF9ub3RvcGVyKGNkZXYpOworCQkJCWJyZWFrOworCQkJfQorCQl9CiAJCS8qIFRyaWdnZXIgcGF0aCB2ZXJpZmljYXRpb24uICovCiAJCWlvX3N1YmNoYW5uZWxfdmVyaWZ5KHNjaCk7CiAJCXJjID0gMDsKQEAgLTE0NDgsNyArMTQ0NCw4IEBACiAJCWJyZWFrOwogCWNhc2UgSU9fU0NIX1VOUkVHX0FUVEFDSDoKIAkJLyogVW5yZWdpc3RlciBjY3cgZGV2aWNlLiAqLwotCQljY3dfZGV2aWNlX3VucmVnaXN0ZXIoY2Rldik7CisJCWlmICghY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVzdW1pbmcpCisJCQljY3dfZGV2aWNlX3VucmVnaXN0ZXIoY2Rldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTQ1Nyw3ICsxNDU0LDggQEAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgSU9fU0NIX09SUEhfVU5SRUc6CiAJY2FzZSBJT19TQ0hfVU5SRUc6Ci0JCWNzc19zY2hfZGV2aWNlX3VucmVnaXN0ZXIoc2NoKTsKKwkJaWYgKCFjZGV2IHx8ICFjZGV2LT5wcml2YXRlLT5mbGFncy5yZXN1bWluZykKKwkJCWNzc19zY2hfZGV2aWNlX3VucmVnaXN0ZXIoc2NoKTsKIAkJYnJlYWs7CiAJY2FzZSBJT19TQ0hfT1JQSF9BVFRBQ0g6CiAJY2FzZSBJT19TQ0hfVU5SRUdfQVRUQUNIOgpAQCAtMTc3OSwyNiArMTc3Nyw0MiBAQAogewogCXN0cnVjdCBzdWJjaGFubmVsICpzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCi0JaWYgKGNpb19pc19jb25zb2xlKHNjaC0+c2NoaWQpKQotCQlnb3RvIG91dDsKKwlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7CisJaWYgKGNpb19pc19jb25zb2xlKHNjaC0+c2NoaWQpKSB7CisJCWNpb19lbmFibGVfc3ViY2hhbm5lbChzY2gsICh1MzIpKGFkZHJfdClzY2gpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQogCS8qCiAJICogV2hpbGUgd2Ugd2VyZSBzbGVlcGluZywgZGV2aWNlcyBtYXkgaGF2ZSBnb25lIG9yIGJlY29tZQogCSAqIGF2YWlsYWJsZSBhZ2Fpbi4gS2ljayByZS1kZXRlY3Rpb24uCiAJICovCi0Jc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOwogCWNkZXYtPnByaXZhdGUtPmZsYWdzLnJlc3VtaW5nID0gMTsKKwljc3Nfc2NoZWR1bGVfZXZhbChzY2gtPnNjaGlkKTsKKwlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKKwljc3NfY29tcGxldGVfd29yaygpOworCisJLyogY2RldiBtYXkgaGF2ZSBiZWVuIG1vdmVkIHRvIGEgZGlmZmVyZW50IHN1YmNoYW5uZWwuICovCisJc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKKwlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7CisJaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9PTkxJTkUgJiYKKwkgICAgY2Rldi0+cHJpdmF0ZS0+c3RhdGUgIT0gREVWX1NUQVRFX09GRkxJTkUpCisJCWdvdG8gb3V0X3VubG9jazsKKwogCWNjd19kZXZpY2VfcmVjb2duaXRpb24oY2Rldik7CiAJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiAJd2FpdF9ldmVudChjZGV2LT5wcml2YXRlLT53YWl0X3EsIGRldl9mc21fZmluYWxfc3RhdGUoY2RldikgfHwKIAkJICAgY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPT0gREVWX1NUQVRFX0RJU0NPTk5FQ1RFRCk7Ci1vdXQ6CisJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOworCitvdXRfdW5sb2NrOgogCWNkZXYtPnByaXZhdGUtPmZsYWdzLnJlc3VtaW5nID0gMDsKKwlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKIH0KIAogc3RhdGljIGludCByZXN1bWVfaGFuZGxlX2JveGVkKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewogCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX0JPWEVEOwotCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fQk9YRUQpKQorCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fQk9YRUQpID09IE5PVElGWV9PSykKIAkJcmV0dXJuIDA7CiAJY2N3X2RldmljZV9zY2hlZF90b2RvKGNkZXYsIENERVZfVE9ET19VTlJFRyk7CiAJcmV0dXJuIC1FTk9ERVY7CkBAIC0xODA3LDcgKzE4MjEsNyBAQAogc3RhdGljIGludCByZXN1bWVfaGFuZGxlX2Rpc2Moc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CiAJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfRElTQ09OTkVDVEVEOwotCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkpCisJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSA9PSBOT1RJRllfT0spCiAJCXJldHVybiAwOwogCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUcpOwogCXJldHVybiAtRU5PREVWOwpAQCAtMTgxNiw0MCArMTgzMCwzMSBAQAogc3RhdGljIGludCBjY3dfZGV2aWNlX3BtX3Jlc3RvcmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2ID0gdG9fY2N3ZGV2KGRldik7Ci0Jc3RydWN0IHN1YmNoYW5uZWwgKnNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7Ci0JaW50IHJldCA9IDAsIGNtX2VuYWJsZWQ7CisJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKKwlpbnQgcmV0ID0gMDsKIAogCV9fY2N3X2RldmljZV9wbV9yZXN0b3JlKGNkZXYpOworCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOwotCWlmIChjaW9faXNfY29uc29sZShzY2gtPnNjaGlkKSkgewotCQljaW9fZW5hYmxlX3N1YmNoYW5uZWwoc2NoLCAodTMyKShhZGRyX3Qpc2NoKTsKLQkJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CisJaWYgKGNpb19pc19jb25zb2xlKHNjaC0+c2NoaWQpKQogCQlnb3RvIG91dF9yZXN0b3JlOwotCX0KLQljZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSA9IDA7CisKIAkvKiBjaGVjayByZWNvZ25pdGlvbiByZXN1bHRzICovCiAJc3dpdGNoIChjZGV2LT5wcml2YXRlLT5zdGF0ZSkgewogCWNhc2UgREVWX1NUQVRFX09GRkxJTkU6CisJY2FzZSBERVZfU1RBVEVfT05MSU5FOgorCQljZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSA9IDA7CiAJCWJyZWFrOwogCWNhc2UgREVWX1NUQVRFX0JPWEVEOgogCQlyZXQgPSByZXN1bWVfaGFuZGxlX2JveGVkKGNkZXYpOwotCQlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfdW5sb2NrOwogCQlnb3RvIG91dF9yZXN0b3JlOwotCWNhc2UgREVWX1NUQVRFX0RJU0NPTk5FQ1RFRDoKLQkJZ290byBvdXRfZGlzY191bmxvY2s7CiAJZGVmYXVsdDoKLQkJZ290byBvdXRfdW5yZWdfdW5sb2NrOwotCX0KLQkvKiBjaGVjayBpZiB0aGUgZGV2aWNlIGlkIGhhcyBjaGFuZ2VkICovCi0JaWYgKHNjaC0+c2NoaWIucG1jdy5kZXYgIT0gY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vKSB7Ci0JCUNJT19NU0dfRVZFTlQoMCwgInJlc3VtZTogc2NoIDAuJXguJTA0eDogZmFpbGVkIChkZXZubyAiCi0JCQkgICAgICAiY2hhbmdlZCBmcm9tICUwNHggdG8gJTA0eClcbiIsCi0JCQkgICAgICBzY2gtPnNjaGlkLnNzaWQsIHNjaC0+c2NoaWQuc2NoX25vLAotCQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLAotCQkJICAgICAgc2NoLT5zY2hpYi5wbWN3LmRldik7Ci0JCWdvdG8gb3V0X3VucmVnX3VubG9jazsKKwkJcmV0ID0gcmVzdW1lX2hhbmRsZV9kaXNjKGNkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dF9yZXN0b3JlOwogCX0KIAkvKiBjaGVjayBpZiB0aGUgZGV2aWNlIHR5cGUgaGFzIGNoYW5nZWQgKi8KIAlpZiAoIWNjd19kZXZpY2VfdGVzdF9zZW5zZV9kYXRhKGNkZXYpKSB7CkBAIC0xODU4LDI0ICsxODYzLDMwIEBACiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0JaWYgKCFjZGV2LT5vbmxpbmUpIHsKLQkJcmV0ID0gMDsKKwlpZiAoIWNkZXYtPm9ubGluZSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJaWYgKGNjd19kZXZpY2Vfb25saW5lKGNkZXYpKSB7CisJCXJldCA9IHJlc3VtZV9oYW5kbGVfZGlzYyhjZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJZ290byBvdXRfcmVzdG9yZTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CisJd2FpdF9ldmVudChjZGV2LT5wcml2YXRlLT53YWl0X3EsIGRldl9mc21fZmluYWxfc3RhdGUoY2RldikpOworCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKKworCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fT1BFUikgPT0gTk9USUZZX0JBRCkgeworCQljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHKTsKKwkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQlyZXQgPSBjY3dfZGV2aWNlX29ubGluZShjZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9kaXNjX3VubG9jazsKIAotCWNtX2VuYWJsZWQgPSBjZGV2LT5wcml2YXRlLT5jbWIgIT0gTlVMTDsKLQlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKLQotCXdhaXRfZXZlbnQoY2Rldi0+cHJpdmF0ZS0+d2FpdF9xLCBkZXZfZnNtX2ZpbmFsX3N0YXRlKGNkZXYpKTsKLQlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgIT0gREVWX1NUQVRFX09OTElORSkgewotCQlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7Ci0JCWdvdG8gb3V0X2Rpc2NfdW5sb2NrOwotCX0KLQlpZiAoY21fZW5hYmxlZCkgeworCS8qIHJlZW5hYmxlIGNtZiwgaWYgbmVlZGVkICovCisJaWYgKGNkZXYtPnByaXZhdGUtPmNtYikgeworCQlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKIAkJcmV0ID0gY2N3X3NldF9jbWYoY2RldiwgMSk7CisJCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKIAkJaWYgKHJldCkgewogCQkJQ0lPX01TR19FVkVOVCgyLCAicmVzdW1lOiBjZGV2IDAuJXguJTA0eDogY21mIGZhaWxlZCAiCiAJCQkJICAgICAgIihyYz0lZClcbiIsIGNkZXYtPnByaXZhdGUtPmRldl9pZC5zc2lkLApAQCAtMTg4NSwyMSArMTg5NiwxMSBAQAogCX0KIAogb3V0X3Jlc3RvcmU6CisJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiAJaWYgKGNkZXYtPm9ubGluZSAmJiBjZGV2LT5kcnYgJiYgY2Rldi0+ZHJ2LT5yZXN0b3JlKQogCQlyZXQgPSBjZGV2LT5kcnYtPnJlc3RvcmUoY2Rldik7Ci1vdXQ6CiAJcmV0dXJuIHJldDsKIAotb3V0X2Rpc2NfdW5sb2NrOgotCXJldCA9IHJlc3VtZV9oYW5kbGVfZGlzYyhjZGV2KTsKLQlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCWdvdG8gb3V0X3Jlc3RvcmU7Ci0KLW91dF91bnJlZ191bmxvY2s6Ci0JY2N3X2RldmljZV9zY2hlZF90b2RvKGNkZXYsIENERVZfVE9ET19VTlJFR19FVkFMKTsKLQlyZXQgPSAtRU5PREVWOwogb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKIAlyZXR1cm4gcmV0OwpAQCAtMjAyOCw3ICsyMDI5LDcgQEAKIAkvKiBHZXQgd29ya3F1ZXVlIHJlZi4gKi8KIAlpZiAoIWdldF9kZXZpY2UoJmNkZXYtPmRldikpCiAJCXJldHVybjsKLQlpZiAoIXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmY2Rldi0+cHJpdmF0ZS0+dG9kb193b3JrKSkgeworCWlmICghcXVldWVfd29yayhjaW9fd29ya19xLCAmY2Rldi0+cHJpdmF0ZS0+dG9kb193b3JrKSkgewogCQkvKiBBbHJlYWR5IHF1ZXVlZCwgcmVsZWFzZSB3b3JrcXVldWUgcmVmLiAqLwogCQlwdXRfZGV2aWNlKCZjZGV2LT5kZXYpOwogCX0KQEAgLTIwNDEsNSArMjA0Miw0IEBACiBFWFBPUlRfU1lNQk9MKGNjd19kcml2ZXJfdW5yZWdpc3Rlcik7CiBFWFBPUlRfU1lNQk9MKGdldF9jY3dkZXZfYnlfYnVzaWQpOwogRVhQT1JUX1NZTUJPTChjY3dfYnVzX3R5cGUpOwotRVhQT1JUX1NZTUJPTChjY3dfZGV2aWNlX3dvcmspOwogRVhQT1JUX1NZTUJPTF9HUEwoY2N3X2RldmljZV9nZXRfc3ViY2hhbm5lbF9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaAppbmRleCBiY2ZlMTNlLi4zNzlkZTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgImlvX3NjaC5oIgogCiAvKgpAQCAtNzEsNyArNzEsNiBAQAogCQljZGV2LT5wcml2YXRlLT5zdGF0ZSA9PSBERVZfU1RBVEVfQk9YRUQpOwogfQogCi1leHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNjd19kZXZpY2Vfd29yazsKIGV4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBjY3dfZGV2aWNlX2luaXRfd3E7CiBleHRlcm4gYXRvbWljX3QgY2N3X2RldmljZV9pbml0X2NvdW50OwogaW50IF9faW5pdCBpb19zdWJjaGFubmVsX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCmluZGV4IGFlNzYwNjUuLmM1NmFiOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCkBAIC0zMTMsMjEgKzMxMyw0MyBAQAogCX0KIH0KIAorLyoqCisgICogY2N3X2RldmljZV9ub3RpZnkoKSAtIGluZm9ybSB0aGUgZGV2aWNlJ3MgZHJpdmVyIGFib3V0IGFuIGV2ZW50CisgICogQGNkZXY6IGRldmljZSBmb3Igd2hpY2ggYW4gZXZlbnQgb2NjdXJlZAorICAqIEBldmVudDogZXZlbnQgdGhhdCBvY2N1cnJlZAorICAqCisgICogUmV0dXJuczoKKyAgKiAgIC0lRUlOVkFMIGlmIHRoZSBkZXZpY2UgaXMgb2ZmbGluZSBvciBoYXMgbm8gZHJpdmVyLgorICAqICAgLSVFT1BOT1RTVVBQIGlmIHRoZSBkZXZpY2UncyBkcml2ZXIgaGFzIG5vIG5vdGlmaWVyIHJlZ2lzdGVyZWQuCisgICogICAlTk9USUZZX09LIGlmIHRoZSBkcml2ZXIgd2FudHMgdG8ga2VlcCB0aGUgZGV2aWNlLgorICAqICAgJU5PVElGWV9CQUQgaWYgdGhlIGRyaXZlciBkb2Vzbid0IHdhbnQgdG8ga2VlcCB0aGUgZGV2aWNlLgorICAqLwogaW50IGNjd19kZXZpY2Vfbm90aWZ5KHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBpbnQgZXZlbnQpCiB7CisJaW50IHJldCA9IC1FSU5WQUw7CisKIAlpZiAoIWNkZXYtPmRydikKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCWlmICghY2Rldi0+b25saW5lKQotCQlyZXR1cm4gMDsKKwkJZ290byBvdXQ7CiAJQ0lPX01TR19FVkVOVCgyLCAibm90aWZ5IGNhbGxlZCBmb3IgMC4leC4lMDR4LCBldmVudD0lZFxuIiwKIAkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLnNzaWQsIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubywKIAkJICAgICAgZXZlbnQpOwotCXJldHVybiBjZGV2LT5kcnYtPm5vdGlmeSA/IGNkZXYtPmRydi0+bm90aWZ5KGNkZXYsIGV2ZW50KSA6IDA7CisJaWYgKCFjZGV2LT5kcnYtPm5vdGlmeSkgeworCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChjZGV2LT5kcnYtPm5vdGlmeShjZGV2LCBldmVudCkpCisJCXJldCA9IE5PVElGWV9PSzsKKwllbHNlCisJCXJldCA9IE5PVElGWV9CQUQ7CitvdXQ6CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgY2N3X2RldmljZV9vcGVyX25vdGlmeShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKLQlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX09QRVIpKSB7CisJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19PUEVSKSA9PSBOT1RJRllfT0spIHsKIAkJLyogUmVlbmFibGUgY2hhbm5lbCBtZWFzdXJlbWVudHMsIGlmIG5lZWRlZC4gKi8KIAkJY2N3X2RldmljZV9zY2hlZF90b2RvKGNkZXYsIENERVZfVE9ET19FTkFCTEVfQ01GKTsKIAkJcmV0dXJuOwpAQCAtMzYxLDE0ICszODMsMTUgQEAKIAljYXNlIERFVl9TVEFURV9CT1hFRDoKIAkJQ0lPX01TR19FVkVOVCgwLCAiQm94ZWQgZGV2aWNlICUwNHggb24gc3ViY2hhbm5lbCAlMDR4XG4iLAogCQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLCBzY2gtPnNjaGlkLnNjaF9ubyk7Ci0JCWlmIChjZGV2LT5vbmxpbmUgJiYgIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19CT1hFRCkpCisJCWlmIChjZGV2LT5vbmxpbmUgJiYKKwkJICAgIGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19CT1hFRCkgIT0gTk9USUZZX09LKQogCQkJY2N3X2RldmljZV9zY2hlZF90b2RvKGNkZXYsIENERVZfVE9ET19VTlJFRyk7CiAJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5ID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBERVZfU1RBVEVfTk9UX09QRVI6CiAJCUNJT19NU0dfRVZFTlQoMCwgIkRldmljZSAlMDR4IGdvbmUgb24gc3ViY2hhbm5lbCAlMDR4XG4iLAogCQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLCBzY2gtPnNjaGlkLnNjaF9ubyk7Ci0JCWlmICghY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpKQorCQlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpICE9IE5PVElGWV9PSykKIAkJCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUcpOwogCQllbHNlCiAJCQljY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoY2Rldik7CkBAIC0zNzgsNyArNDAxLDcgQEAKIAkJQ0lPX01TR19FVkVOVCgwLCAiRGlzY29ubmVjdGVkIGRldmljZSAlMDR4IG9uIHN1YmNoYW5uZWwgIgogCQkJICAgICAgIiUwNHhcbiIsIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubywKIAkJCSAgICAgIHNjaC0+c2NoaWQuc2NoX25vKTsKLQkJaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fTk9fUEFUSCkpCisJCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fTk9fUEFUSCkgIT0gTk9USUZZX09LKQogCQkJY2N3X2RldmljZV9zY2hlZF90b2RvKGNkZXYsIENERVZfVE9ET19VTlJFRyk7CiAJCWVsc2UKIAkJCWNjd19kZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChjZGV2KTsKQEAgLTU4Niw3ICs2MDksNyBAQAogc3RhdGljIHZvaWQgY2N3X2RldmljZV9nZW5lcmljX25vdG9wZXIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsCiAJCQkJICAgICAgIGVudW0gZGV2X2V2ZW50IGRldl9ldmVudCkKIHsKLQlpZiAoIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSkKKwlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpICE9IE5PVElGWV9PSykKIAkJY2N3X2RldmljZV9zY2hlZF90b2RvKGNkZXYsIENERVZfVE9ET19VTlJFRyk7CiAJZWxzZQogCQljY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoY2Rldik7CkBAIC02NjcsNyArNjkwLDcgQEAKIAlzdHJ1Y3QgaXJiICppcmI7CiAJaW50IGlzX2NtZDsKIAotCWlyYiA9IChzdHJ1Y3QgaXJiICopIF9fTENfSVJCOworCWlyYiA9IChzdHJ1Y3QgaXJiICopJlMzOTBfbG93Y29yZS5pcmI7CiAJaXNfY21kID0gIXNjc3dfaXNfdG0oJmlyYi0+c2Nzdyk7CiAJLyogQ2hlY2sgZm9yIHVuc29saWNpdGVkIGludGVycnVwdC4gKi8KIAlpZiAoIXNjc3dfaXNfc29saWNpdGVkKCZpcmItPnNjc3cpKSB7CkBAIC03MzIsNyArNzU1LDcgQEAKIHsKIAlzdHJ1Y3QgaXJiICppcmI7CiAKLQlpcmIgPSAoc3RydWN0IGlyYiAqKSBfX0xDX0lSQjsKKwlpcmIgPSAoc3RydWN0IGlyYiAqKSZTMzkwX2xvd2NvcmUuaXJiOwogCS8qIENoZWNrIGZvciB1bnNvbGljaXRlZCBpbnRlcnJ1cHQuICovCiAJaWYgKHNjc3dfc3RjdGwoJmlyYi0+c2NzdykgPT0KIAkgICAgKFNDU1dfU1RDVExfU1RBVFVTX1BFTkQgfCBTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmgKaW5kZXggNDRmMmY2YS4uNDhhYTA2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmgKQEAgLTIwOCwxOCArMjA4LDI3IEBACiAJdW5zaWduZWQgaW50IGVxYnNfcGFydGlhbDsKIAl1bnNpZ25lZCBpbnQgc3FiczsKIAl1bnNpZ25lZCBpbnQgc3Fic19wYXJ0aWFsOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKK3N0cnVjdCBxZGlvX3F1ZXVlX3BlcmZfc3RhdCB7CisJLyoKKwkgKiBTb3J0ZWQgaW50byBvcmRlci0yIGJ1Y2tldHM6IDEsIDItMywgNC03LCAuLi4gNjQtMTI3LCAxMjguCisJICogU2luY2UgbWF4LiAxMjcgU0JBTHMgYXJlIHNjYW5uZWQgcmV1c2UgZW50cnkgZm9yIDEyOCBhcyBxdWV1ZSBmdWxsCisJICogYWthIDEyNyBTQkFMcyBmb3VuZC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgbnJfc2JhbHNbOF07CisJdW5zaWduZWQgaW50IG5yX3NiYWxfZXJyb3I7CisJdW5zaWduZWQgaW50IG5yX3NiYWxfbm9wOworCXVuc2lnbmVkIGludCBucl9zYmFsX3RvdGFsOwogfTsKIAogc3RydWN0IHFkaW9faW5wdXRfcSB7CiAJLyogaW5wdXQgYnVmZmVyIGFja25vd2xlZGdlbWVudCBmbGFnICovCiAJaW50IHBvbGxpbmc7Ci0KIAkvKiBmaXJzdCBBQ0snZWQgYnVmZmVyICovCiAJaW50IGFja19zdGFydDsKLQogCS8qIGhvdyBtdWNoIHNiYWxzIGFyZSBhY2tub3dsZWRnZWQgd2l0aCBxZWJzbSAqLwogCWludCBhY2tfY291bnQ7Ci0KIAkvKiBsYXN0IHRpbWUgb2Ygbm90aWNpbmcgaW5jb21pbmcgZGF0YSAqLwogCXU2NCB0aW1lc3RhbXA7CiB9OwpAQCAtMjI3LDIxICsyMzYsNDcgQEAKIHN0cnVjdCBxZGlvX291dHB1dF9xIHsKIAkvKiBQQ0lzIGFyZSBlbmFibGVkIGZvciB0aGUgcXVldWUgKi8KIAlpbnQgcGNpX291dF9lbmFibGVkOwotCiAJLyogSVFESU86IG91dHB1dCBtdWx0aXBsZSBidWZmZXJzIChlbmhhbmNlZCBTSUdBKSAqLwogCWludCB1c2VfZW5oX3NpZ2E7Ci0KIAkvKiB0aW1lciB0byBjaGVjayBmb3IgbW9yZSBvdXRib3VuZCB3b3JrICovCiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiB9OwogCisvKgorICogTm90ZSBvbiBjYWNoZSBhbGlnbm1lbnQ6IGdyb3VwZWQgc2xzYiBhbmQgd3JpdGUgbW9zdGx5IGRhdGEgYXQgdGhlIGJlZ2lubmluZworICogc2JhbFtdIGlzIHJlYWQtb25seSBhbmQgc3RhcnRzIG9uIGEgbmV3IGNhY2hlbGluZSBmb2xsb3dlZCBieSByZWFkIG1vc3RseS4KKyAqLwogc3RydWN0IHFkaW9fcSB7CiAJc3RydWN0IHNsc2Igc2xzYjsKKwogCXVuaW9uIHsKIAkJc3RydWN0IHFkaW9faW5wdXRfcSBpbjsKIAkJc3RydWN0IHFkaW9fb3V0cHV0X3Egb3V0OwogCX0gdTsKIAorCS8qCisJICogaW5ib3VuZDogbmV4dCBidWZmZXIgdGhlIHByb2dyYW0gc2hvdWxkIGNoZWNrIGZvcgorCSAqIG91dGJvdW5kOiBuZXh0IGJ1ZmZlciB0byBjaGVjayBpZiBhZGFwdGVyIHByb2Nlc3NlZCBpdAorCSAqLworCWludCBmaXJzdF90b19jaGVjazsKKworCS8qIGZpcnN0X3RvX2NoZWNrIG9mIHRoZSBsYXN0IHRpbWUgKi8KKwlpbnQgbGFzdF9tb3ZlOworCisJLyogYmVnaW5uaW5nIHBvc2l0aW9uIGZvciBjYWxsaW5nIHRoZSBwcm9ncmFtICovCisJaW50IGZpcnN0X3RvX2tpY2s7CisKKwkvKiBudW1iZXIgb2YgYnVmZmVycyBpbiB1c2UgYnkgdGhlIGFkYXB0ZXIgKi8KKwlhdG9taWNfdCBucl9idWZfdXNlZDsKKworCS8qIGVycm9yIGNvbmRpdGlvbiBkdXJpbmcgYSBkYXRhIHRyYW5zZmVyICovCisJdW5zaWduZWQgaW50IHFkaW9fZXJyb3I7CisKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKKwlzdHJ1Y3QgcWRpb19xdWV1ZV9wZXJmX3N0YXQgcV9zdGF0czsKKworCXN0cnVjdCBxZGlvX2J1ZmZlciAqc2JhbFtRRElPX01BWF9CVUZGRVJTX1BFUl9RXSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKIAkvKiBxdWV1ZSBudW1iZXIgKi8KIAlpbnQgbnI7CiAKQEAgLTI1NywzMiArMjkyLDkgQEAKIAkvKiB1cHBlci1sYXllciBwcm9ncmFtIGhhbmRsZXIgKi8KIAlxZGlvX2hhbmRsZXJfdCAoKmhhbmRsZXIpOwogCi0JLyoKLQkgKiBpbmJvdW5kOiBuZXh0IGJ1ZmZlciB0aGUgcHJvZ3JhbSBzaG91bGQgY2hlY2sgZm9yCi0JICogb3V0Ym91bmQ6IG5leHQgYnVmZmVyIHRvIGNoZWNrIGZvciBoYXZpbmcgYmVlbiBwcm9jZXNzZWQKLQkgKiBieSB0aGUgY2FyZAotCSAqLwotCWludCBmaXJzdF90b19jaGVjazsKLQotCS8qIGZpcnN0X3RvX2NoZWNrIG9mIHRoZSBsYXN0IHRpbWUgKi8KLQlpbnQgbGFzdF9tb3ZlOwotCi0JLyogYmVnaW5uaW5nIHBvc2l0aW9uIGZvciBjYWxsaW5nIHRoZSBwcm9ncmFtICovCi0JaW50IGZpcnN0X3RvX2tpY2s7Ci0KLQkvKiBudW1iZXIgb2YgYnVmZmVycyBpbiB1c2UgYnkgdGhlIGFkYXB0ZXIgKi8KLQlhdG9taWNfdCBucl9idWZfdXNlZDsKLQotCXN0cnVjdCBxZGlvX2lycSAqaXJxX3B0cjsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3E7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7Ci0KLQkvKiBlcnJvciBjb25kaXRpb24gZHVyaW5nIGEgZGF0YSB0cmFuc2ZlciAqLwotCXVuc2lnbmVkIGludCBxZGlvX2Vycm9yOwotCisJc3RydWN0IHFkaW9faXJxICppcnFfcHRyOwogCXN0cnVjdCBzbCAqc2w7Ci0Jc3RydWN0IHFkaW9fYnVmZmVyICpzYmFsW1FESU9fTUFYX0JVRkZFUlNfUEVSX1FdOwotCiAJLyoKIAkgKiBXYXJuaW5nOiBMZWF2ZSB0aGlzIG1lbWJlciBhdCB0aGUgZW5kIHNvIGl0IHdvbid0IGJlIGNsZWFyZWQgaW4KIAkgKiBxZGlvX2ZpbGxfcXMuIEEgcGFnZSBpcyBhbGxvY2F0ZWQgdW5kZXIgdGhpcyBwb2ludGVyIGFuZCB1c2VkIGZvcgpAQCAtMzE3LDEyICszMjksOCBAQAogCXN0cnVjdCBxZGlvX3NzcWRfZGVzYyBzc3FkX2Rlc2M7CiAJdm9pZCAoKm9yaWdfaGFuZGxlcikgKHN0cnVjdCBjY3dfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBpcmIgKik7CiAKLQlzdHJ1Y3QgcWRpb19kZXZfcGVyZl9zdGF0IHBlcmZfc3RhdDsKIAlpbnQgcGVyZl9zdGF0X2VuYWJsZWQ7Ci0JLyoKLQkgKiBXYXJuaW5nOiBMZWF2ZSB0aGVzZSBtZW1iZXJzIHRvZ2V0aGVyIGF0IHRoZSBlbmQgc28gdGhleSB3b24ndCBiZQotCSAqIGNsZWFyZWQgaW4gcWRpb19zZXR1cF9pcnEuCi0JICovCisKIAlzdHJ1Y3QgcWRyICpxZHI7CiAJdW5zaWduZWQgbG9uZyBjaHNjX3BhZ2U7CiAKQEAgLTMzMSw2ICszMzksNyBAQAogCiAJZGVidWdfaW5mb190ICpkZWJ1Z19hcmVhOwogCXN0cnVjdCBtdXRleCBzZXR1cF9tdXRleDsKKwlzdHJ1Y3QgcWRpb19kZXZfcGVyZl9zdGF0IHBlcmZfc3RhdDsKIH07CiAKIC8qIGhlbHBlciBmdW5jdGlvbnMgKi8KQEAgLTM0MSw5ICszNTAsMjAgQEAKIAkoaXJxLT5xaWIucWZtdCA9PSBRRElPX0lRRElPX1FGTVQgfHwgXAogCSBjc3NfZ2VuZXJhbF9jaGFyYWN0ZXJpc3RpY3MuYWlmX29zYSkKIAotI2RlZmluZSBxcGVyZihxZGV2LGF0dHIpCXFkZXYtPnBlcmZfc3RhdC5hdHRyCi0jZGVmaW5lIHFwZXJmX2luYyhxLGF0dHIpCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkgXAotCQkJCQlxLT5pcnFfcHRyLT5wZXJmX3N0YXQuYXR0cisrCisjZGVmaW5lIHFwZXJmKF9fcWRldiwgX19hdHRyKQkoKF9fcWRldiktPnBlcmZfc3RhdC4oX19hdHRyKSkKKworI2RlZmluZSBxcGVyZl9pbmMoX19xLCBfX2F0dHIpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJc3RydWN0IHFkaW9faXJxICpxZGV2ID0gKF9fcSktPmlycV9wdHI7CQkJCVwKKwlpZiAocWRldi0+cGVyZl9zdGF0X2VuYWJsZWQpCQkJCQlcCisJCShxZGV2LT5wZXJmX3N0YXQuX19hdHRyKSsrOwkJCQlcCit9KQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zYmFsc19lcnJvcihzdHJ1Y3QgcWRpb19xICpxLCBpbnQgY291bnQpCit7CisJcS0+cV9zdGF0cy5ucl9zYmFsX2Vycm9yICs9IGNvdW50OworCXEtPnFfc3RhdHMubnJfc2JhbF90b3RhbCArPSBjb3VudDsKK30KIAogLyogdGhlIGhpZ2hlc3QgaXFkaW8gcXVldWUgaXMgdXNlZCBmb3IgbXVsdGljYXN0ICovCiBzdGF0aWMgaW5saW5lIGludCBtdWx0aWNhc3Rfb3V0Ym91bmQoc3RydWN0IHFkaW9fcSAqcSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKaW5kZXggZjQ5NzYxZi4uYzk0ZWIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAlzZXFfcHJpbnRmKG0sICJmdGM6ICVkICBsYXN0X21vdmU6ICVkXG4iLCBxLT5maXJzdF90b19jaGVjaywgcS0+bGFzdF9tb3ZlKTsKIAlzZXFfcHJpbnRmKG0sICJwb2xsaW5nOiAlZCAgYWNrIHN0YXJ0OiAlZCAgYWNrIGNvdW50OiAlZFxuIiwKIAkJICAgcS0+dS5pbi5wb2xsaW5nLCBxLT51LmluLmFja19zdGFydCwgcS0+dS5pbi5hY2tfY291bnQpOwotCXNlcV9wcmludGYobSwgInNsc2IgYnVmZmVyIHN0YXRlczpcbiIpOworCXNlcV9wcmludGYobSwgIlNCQUwgc3RhdGVzOlxuIik7CiAJc2VxX3ByaW50ZihtLCAifDAgICAgICB8OCAgICAgIHwxNiAgICAgfDI0ICAgICB8MzIgICAgIHw0MCAgICAgfDQ4ICAgICB8NTYgIDYzfFxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUURJT19NQVhfQlVGRkVSU19QRVJfUTsgaSsrKSB7CkBAIC05Nyw2ICs5NywyMCBAQAogCX0KIAlzZXFfcHJpbnRmKG0sICJcbiIpOwogCXNlcV9wcmludGYobSwgInw2NCAgICAgfDcyICAgICB8ODAgICAgIHw4OCAgICAgfDk2ICAgICB8MTA0ICAgIHwxMTIgICAgfCAgIDEyN3xcbiIpOworCisJc2VxX3ByaW50ZihtLCAiXG5TQkFMIHN0YXRpc3RpY3M6Iik7CisJaWYgKCFxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkgeworCQlzZXFfcHJpbnRmKG0sICIgZGlzYWJsZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZXFfcHJpbnRmKG0sICJcbjEgICAgICAgICAgMi4uICAgICAgICA0Li4gICAgICAgIDguLiAgICAgICAgIgorCQkgICAiMTYuLiAgICAgICAzMi4uICAgICAgIDY0Li4gICAgICAgMTI3XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShxLT5xX3N0YXRzLm5yX3NiYWxzKTsgaSsrKQorCQlzZXFfcHJpbnRmKG0sICIlLTEwdSAiLCBxLT5xX3N0YXRzLm5yX3NiYWxzW2ldKTsKKwlzZXFfcHJpbnRmKG0sICJcbkVycm9yICAgICAgTk9QICAgICAgICBUb3RhbFxuJS0xMHUgJS0xMHUgJS0xMHVcblxuIiwKKwkJICAgcS0+cV9zdGF0cy5ucl9zYmFsX2Vycm9yLCBxLT5xX3N0YXRzLm5yX3NiYWxfbm9wLAorCQkgICBxLT5xX3N0YXRzLm5yX3NiYWxfdG90YWwpOwogCXJldHVybiAwOwogfQogCkBAIC0xODEsOSArMTk1LDEwIEBACiB7CiAJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHFkaW9faXJxICppcnFfcHRyID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBxZGlvX3EgKnE7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJY2hhciBidWZbOF07Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpOwogCiAJaWYgKCFpcnFfcHRyKQogCQlyZXR1cm4gMDsKQEAgLTIwMSw2ICsyMTYsMTAgQEAKIAljYXNlIDA6CiAJCWlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkID0gMDsKIAkJbWVtc2V0KCZpcnFfcHRyLT5wZXJmX3N0YXQsIDAsIHNpemVvZihpcnFfcHRyLT5wZXJmX3N0YXQpKTsKKwkJZm9yX2VhY2hfaW5wdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkKKwkJCW1lbXNldCgmcS0+cV9zdGF0cywgMCwgc2l6ZW9mKHEtPnFfc3RhdHMpKTsKKwkJZm9yX2VhY2hfb3V0cHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCisJCQltZW1zZXQoJnEtPnFfc3RhdHMsIDAsIHNpemVvZihxLT5xX3N0YXRzKSk7CiAJCWJyZWFrOwogCWNhc2UgMToKIAkJaXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKaW5kZXggOTk5ZmU4MC4uMjMyZWYwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCkBAIC0zOTIsNiArMzkyLDIwIEBACiAJCXNldF9idWZfc3RhdGUocSwgcS0+dS5pbi5hY2tfc3RhcnQsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X3NiYWxzKHN0cnVjdCBxZGlvX3EgKnEsIGludCBjb3VudCkKK3sKKwlpbnQgcG9zID0gMDsKKworCXEtPnFfc3RhdHMubnJfc2JhbF90b3RhbCArPSBjb3VudDsKKwlpZiAoY291bnQgPT0gUURJT19NQVhfQlVGRkVSU19NQVNLKSB7CisJCXEtPnFfc3RhdHMubnJfc2JhbHNbN10rKzsKKwkJcmV0dXJuOworCX0KKwl3aGlsZSAoY291bnQgPj49IDEpCisJCXBvcysrOworCXEtPnFfc3RhdHMubnJfc2JhbHNbcG9zXSsrOworfQorCiBzdGF0aWMgdm9pZCBhbm5vdW5jZV9idWZmZXJfZXJyb3Ioc3RydWN0IHFkaW9fcSAqcSwgaW50IGNvdW50KQogewogCXEtPnFkaW9fZXJyb3IgfD0gUURJT19FUlJPUl9TTFNCX1NUQVRFOwpAQCAtNDg3LDE2ICs1MDEsMjIgQEAKIAkJcS0+Zmlyc3RfdG9fY2hlY2sgPSBhZGRfYnVmKHEtPmZpcnN0X3RvX2NoZWNrLCBjb3VudCk7CiAJCWlmIChhdG9taWNfc3ViKGNvdW50LCAmcS0+bnJfYnVmX3VzZWQpID09IDApCiAJCQlxcGVyZl9pbmMocSwgaW5ib3VuZF9xdWV1ZV9mdWxsKTsKKwkJaWYgKHEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKQorCQkJYWNjb3VudF9zYmFscyhxLCBjb3VudCk7CiAJCWJyZWFrOwogCWNhc2UgU0xTQl9QX0lOUFVUX0VSUk9SOgogCQlhbm5vdW5jZV9idWZmZXJfZXJyb3IocSwgY291bnQpOwogCQkvKiBwcm9jZXNzIHRoZSBidWZmZXIsIHRoZSB1cHBlciBsYXllciB3aWxsIHRha2UgY2FyZSBvZiBpdCAqLwogCQlxLT5maXJzdF90b19jaGVjayA9IGFkZF9idWYocS0+Zmlyc3RfdG9fY2hlY2ssIGNvdW50KTsKIAkJYXRvbWljX3N1Yihjb3VudCwgJnEtPm5yX2J1Zl91c2VkKTsKKwkJaWYgKHEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKQorCQkJYWNjb3VudF9zYmFsc19lcnJvcihxLCBjb3VudCk7CiAJCWJyZWFrOwogCWNhc2UgU0xTQl9DVV9JTlBVVF9FTVBUWToKIAljYXNlIFNMU0JfUF9JTlBVVF9OT1RfSU5JVDoKIAljYXNlIFNMU0JfUF9JTlBVVF9BQ0s6CisJCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKKwkJCXEtPnFfc3RhdHMubnJfc2JhbF9ub3ArKzsKIAkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImluIG5vcCIpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNTE0LDcgKzUzNCw3IEBACiAKIAlpZiAoKGJ1Zm5yICE9IHEtPmxhc3RfbW92ZSkgfHwgcS0+cWRpb19lcnJvcikgewogCQlxLT5sYXN0X21vdmUgPSBidWZucjsKLQkJaWYgKCFpc190aGluaW50X2lycShxLT5pcnFfcHRyKSAmJiAhTUFDSElORV9JU19WTSkKKwkJaWYgKCFpc190aGluaW50X2lycShxLT5pcnFfcHRyKSAmJiBNQUNISU5FX0lTX0xQQVIpCiAJCQlxLT51LmluLnRpbWVzdGFtcCA9IGdldF91c2VjcygpOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UKQEAgLTUzMSw3ICs1NTEsNyBAQAogCXFkaW9fc2lnYV9zeW5jX3EocSk7CiAJZ2V0X2J1Zl9zdGF0ZShxLCBxLT5maXJzdF90b19jaGVjaywgJnN0YXRlLCAwKTsKIAotCWlmIChzdGF0ZSA9PSBTTFNCX1BfSU5QVVRfUFJJTUVEKQorCWlmIChzdGF0ZSA9PSBTTFNCX1BfSU5QVVRfUFJJTUVEIHx8IHN0YXRlID09IFNMU0JfUF9JTlBVVF9FUlJPUikKIAkJLyogbW9yZSB3b3JrIGNvbWluZyAqLwogCQlyZXR1cm4gMDsKIApAQCAtNjQzLDE1ICs2NjMsMjEgQEAKIAogCQlhdG9taWNfc3ViKGNvdW50LCAmcS0+bnJfYnVmX3VzZWQpOwogCQlxLT5maXJzdF90b19jaGVjayA9IGFkZF9idWYocS0+Zmlyc3RfdG9fY2hlY2ssIGNvdW50KTsKKwkJaWYgKHEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKQorCQkJYWNjb3VudF9zYmFscyhxLCBjb3VudCk7CiAJCWJyZWFrOwogCWNhc2UgU0xTQl9QX09VVFBVVF9FUlJPUjoKIAkJYW5ub3VuY2VfYnVmZmVyX2Vycm9yKHEsIGNvdW50KTsKIAkJLyogcHJvY2VzcyB0aGUgYnVmZmVyLCB0aGUgdXBwZXIgbGF5ZXIgd2lsbCB0YWtlIGNhcmUgb2YgaXQgKi8KIAkJcS0+Zmlyc3RfdG9fY2hlY2sgPSBhZGRfYnVmKHEtPmZpcnN0X3RvX2NoZWNrLCBjb3VudCk7CiAJCWF0b21pY19zdWIoY291bnQsICZxLT5ucl9idWZfdXNlZCk7CisJCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKKwkJCWFjY291bnRfc2JhbHNfZXJyb3IocSwgY291bnQpOwogCQlicmVhazsKIAljYXNlIFNMU0JfQ1VfT1VUUFVUX1BSSU1FRDoKIAkJLyogdGhlIGFkYXB0ZXIgaGFzIG5vdCBmZXRjaGVkIHRoZSBvdXRwdXQgeWV0ICovCisJCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKKwkJCXEtPnFfc3RhdHMubnJfc2JhbF9ub3ArKzsKIAkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgIm91dCBwcmltZWQ6JTFkIiwgcS0+bnIpOwogCQlicmVhazsKIAljYXNlIFNMU0JfUF9PVVRQVVRfTk9UX0lOSVQ6CkBAIC05NjAsNiArOTg2LDggQEAKIAkJCXFkaW9faGFuZGxlX2FjdGl2YXRlX2NoZWNrKGNkZXYsIGludHBhcm0sIGNzdGF0LAogCQkJCQkJICAgZHN0YXQpOwogCQlicmVhazsKKwljYXNlIFFESU9fSVJRX1NUQVRFX1NUT1BQRUQ6CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYwppbmRleCA4YzJkZWE1Li43ZjRhNzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYwpAQCAtMzMzLDEwICszMzMsMTAgQEAKIAlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5zbHNiYSA9CiAJCSh1bnNpZ25lZCBsb25nKSZpcnFfcHRyX3FzW2ldLT5zbHNiLnZhbFswXTsKIAotCWlycV9wdHItPnFkci0+cWRmMFtpICsgbnJdLmFrZXkgPSBQQUdFX0RFRkFVTFRfS0VZOwotCWlycV9wdHItPnFkci0+cWRmMFtpICsgbnJdLmJrZXkgPSBQQUdFX0RFRkFVTFRfS0VZOwotCWlycV9wdHItPnFkci0+cWRmMFtpICsgbnJdLmNrZXkgPSBQQUdFX0RFRkFVTFRfS0VZOwotCWlycV9wdHItPnFkci0+cWRmMFtpICsgbnJdLmRrZXkgPSBQQUdFX0RFRkFVTFRfS0VZOworCWlycV9wdHItPnFkci0+cWRmMFtpICsgbnJdLmFrZXkgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CisJaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uYmtleSA9IFBBR0VfREVGQVVMVF9LRVkgPj4gNDsKKwlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5ja2V5ID0gUEFHRV9ERUZBVUxUX0tFWSA+PiA0OworCWlycV9wdHItPnFkci0+cWRmMFtpICsgbnJdLmRrZXkgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNldHVwX3FkcihzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIsCkBAIC0zNTAsNyArMzUwLDcgQEAKIAlpcnFfcHRyLT5xZHItPmlxZHN6ID0gc2l6ZW9mKHN0cnVjdCBxZGVzZm10MCkgLyA0OyAvKiBzaXplIGluIHdvcmRzICovCiAJaXJxX3B0ci0+cWRyLT5vcWRzeiA9IHNpemVvZihzdHJ1Y3QgcWRlc2ZtdDApIC8gNDsKIAlpcnFfcHRyLT5xZHItPnFpYmEgPSAodW5zaWduZWQgbG9uZykmaXJxX3B0ci0+cWliOwotCWlycV9wdHItPnFkci0+cWtleSA9IFBBR0VfREVGQVVMVF9LRVk7CisJaXJxX3B0ci0+cWRyLT5xa2V5ID0gUEFHRV9ERUZBVUxUX0tFWSA+PiA0OwogCiAJZm9yIChpID0gMDsgaSA8IHFkaW9faW5pdC0+bm9faW5wdXRfcXM7IGkrKykKIAkJX19xZGlvX2FsbG9jYXRlX2ZpbGxfcWRyKGlycV9wdHIsIGlycV9wdHItPmlucHV0X3FzLCBpLCAwKTsKQEAgLTM4Miw3ICszODIsMTUgQEAKIAlzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIgPSBpbml0X2RhdGEtPmNkZXYtPnByaXZhdGUtPnFkaW9fZGF0YTsKIAlpbnQgcmM7CiAKLQltZW1zZXQoaXJxX3B0ciwgMCwgKChjaGFyICopJmlycV9wdHItPnFkcikgLSAoKGNoYXIgKilpcnFfcHRyKSk7CisJbWVtc2V0KCZpcnFfcHRyLT5xaWIsIDAsIHNpemVvZihpcnFfcHRyLT5xaWIpKTsKKwltZW1zZXQoJmlycV9wdHItPnNpZ2FfZmxhZywgMCwgc2l6ZW9mKGlycV9wdHItPnNpZ2FfZmxhZykpOworCW1lbXNldCgmaXJxX3B0ci0+Y2N3LCAwLCBzaXplb2YoaXJxX3B0ci0+Y2N3KSk7CisJbWVtc2V0KCZpcnFfcHRyLT5zc3FkX2Rlc2MsIDAsIHNpemVvZihpcnFfcHRyLT5zc3FkX2Rlc2MpKTsKKwltZW1zZXQoJmlycV9wdHItPnBlcmZfc3RhdCwgMCwgc2l6ZW9mKGlycV9wdHItPnBlcmZfc3RhdCkpOworCisJaXJxX3B0ci0+ZGVidWdmc19kZXYgPSBpcnFfcHRyLT5kZWJ1Z2ZzX3BlcmYgPSBOVUxMOworCWlycV9wdHItPnNjaF90b2tlbiA9IGlycV9wdHItPnN0YXRlID0gaXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQgPSAwOworCiAJLyogd2lwZXMgcWliLmFjLCByZXF1aXJlZCBieSBhcjcwNjMgKi8KIAltZW1zZXQoaXJxX3B0ci0+cWRyLCAwLCBzaXplb2Yoc3RydWN0IHFkcikpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYwppbmRleCAwOTFkOTA0Li45OTQyYzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKQEAgLTE5OCw4ICsxOTgsOCBAQAogCQkuY29kZQk9IDB4MDAyMSwKIAl9OwogCXNjc3NjX2FyZWEtPm9wZXJhdGlvbl9jb2RlID0gMDsKLQlzY3NzY19hcmVhLT5rcyA9IFBBR0VfREVGQVVMVF9LRVk7Ci0Jc2Nzc2NfYXJlYS0+a2MgPSBQQUdFX0RFRkFVTFRfS0VZOworCXNjc3NjX2FyZWEtPmtzID0gUEFHRV9ERUZBVUxUX0tFWSA+PiA0OworCXNjc3NjX2FyZWEtPmtjID0gUEFHRV9ERUZBVUxUX0tFWSA+PiA0OwogCXNjc3NjX2FyZWEtPmlzYyA9IFFESU9fQUlSUV9JU0M7CiAJc2Nzc2NfYXJlYS0+c2NoaWQgPSBpcnFfcHRyLT5zY2hpZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYwppbmRleCBjNjhiZTI0Li5iYTUwZmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpAQCAtOTEyLDEyNiArOTEzLDEwNSBAQAogICovCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICp6Y3J5cHRfZW50cnk7CiAKLXN0YXRpYyBpbnQgc3ByaW50Y2wodW5zaWduZWQgY2hhciAqb3V0YWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKLQkJICAgIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgdm9pZCBzcHJpbnRjbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHVuc2lnbmVkIGNoYXIgKmFkZHIsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JaW50IGhsLCBpOworCWludCBpOwogCi0JaGwgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLQkJaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiJTAxeCIsICh1bnNpZ25lZCBpbnQpIGFkZHJbaV0pOwotCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIiAiKTsKLQlyZXR1cm4gaGw7CisJCXNlcV9wcmludGYobSwgIiUwMXgiLCAodW5zaWduZWQgaW50KSBhZGRyW2ldKTsKKwlzZXFfcHV0YyhtLCAnICcpOwogfQogCi1zdGF0aWMgaW50IHNwcmludHJ3KHVuc2lnbmVkIGNoYXIgKm91dGFkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCi0JCSAgICB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgc3ByaW50cncoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBjaGFyICphZGRyLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWludCBobCwgaW5sLCBjLCBjeDsKKwlpbnQgaW5sLCBjLCBjeDsKIAotCWhsID0gc3ByaW50ZihvdXRhZGRyLCAiCSAgICIpOworCXNlcV9wcmludGYobSwgIgkgICAiKTsKIAlpbmwgPSAwOwogCWZvciAoYyA9IDA7IGMgPCAobGVuIC8gMTYpOyBjKyspIHsKLQkJaGwgKz0gc3ByaW50Y2wob3V0YWRkcitobCwgYWRkcitpbmwsIDE2KTsKKwkJc3ByaW50Y2wobSwgYWRkcitpbmwsIDE2KTsKIAkJaW5sICs9IDE2OwogCX0KIAljeCA9IGxlbiUxNjsKIAlpZiAoY3gpIHsKLQkJaGwgKz0gc3ByaW50Y2wob3V0YWRkcitobCwgYWRkcitpbmwsIGN4KTsKKwkJc3ByaW50Y2wobSwgYWRkcitpbmwsIGN4KTsKIAkJaW5sICs9IGN4OwogCX0KLQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICJcbiIpOwotCXJldHVybiBobDsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIH0KIAotc3RhdGljIGludCBzcHJpbnRoeCh1bnNpZ25lZCBjaGFyICp0aXRsZSwgdW5zaWduZWQgY2hhciAqb3V0YWRkciwKLQkJICAgIHVuc2lnbmVkIGNoYXIgKmFkZHIsIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgdm9pZCBzcHJpbnRoeCh1bnNpZ25lZCBjaGFyICp0aXRsZSwgc3RydWN0IHNlcV9maWxlICptLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgKmFkZHIsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JaW50IGhsLCBpbmwsIHIsIHJ4OworCWludCBpbmwsIHIsIHJ4OwogCi0JaGwgPSBzcHJpbnRmKG91dGFkZHIsICJcbiVzXG4iLCB0aXRsZSk7CisJc2VxX3ByaW50ZihtLCAiXG4lc1xuIiwgdGl0bGUpOwogCWlubCA9IDA7CiAJZm9yIChyID0gMDsgciA8IChsZW4gLyA2NCk7IHIrKykgewotCQlobCArPSBzcHJpbnRydyhvdXRhZGRyK2hsLCBhZGRyK2lubCwgNjQpOworCQlzcHJpbnRydyhtLCBhZGRyK2lubCwgNjQpOwogCQlpbmwgKz0gNjQ7CiAJfQogCXJ4ID0gbGVuICUgNjQ7CiAJaWYgKHJ4KSB7Ci0JCWhsICs9IHNwcmludHJ3KG91dGFkZHIraGwsIGFkZHIraW5sLCByeCk7CisJCXNwcmludHJ3KG0sIGFkZHIraW5sLCByeCk7CiAJCWlubCArPSByeDsKIAl9Ci0JaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiXG4iKTsKLQlyZXR1cm4gaGw7CisJc2VxX3B1dGMobSwgJ1xuJyk7CiB9CiAKLXN0YXRpYyBpbnQgc3ByaW50aHg0KHVuc2lnbmVkIGNoYXIgKnRpdGxlLCB1bnNpZ25lZCBjaGFyICpvdXRhZGRyLAotCQkgICAgIHVuc2lnbmVkIGludCAqYXJyYXksIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgdm9pZCBzcHJpbnRoeDQodW5zaWduZWQgY2hhciAqdGl0bGUsIHN0cnVjdCBzZXFfZmlsZSAqbSwKKwkJICAgICAgdW5zaWduZWQgaW50ICphcnJheSwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlpbnQgaGwsIHI7CisJaW50IHI7CiAKLQlobCA9IHNwcmludGYob3V0YWRkciwgIlxuJXNcbiIsIHRpdGxlKTsKKwlzZXFfcHJpbnRmKG0sICJcbiVzXG4iLCB0aXRsZSk7CiAJZm9yIChyID0gMDsgciA8IGxlbjsgcisrKSB7CiAJCWlmICgociAlIDgpID09IDApCi0JCQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICIgICAgIik7Ci0JCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIiUwOFggIiwgYXJyYXlbcl0pOworCQkJc2VxX3ByaW50ZihtLCAiICAgICIpOworCQlzZXFfcHJpbnRmKG0sICIlMDhYICIsIGFycmF5W3JdKTsKIAkJaWYgKChyICUgOCkgPT0gNykKLQkJCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIlxuIik7CisJCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAl9Ci0JaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiXG4iKTsKLQlyZXR1cm4gaGw7CisJc2VxX3B1dGMobSwgJ1xuJyk7CiB9CiAKLXN0YXRpYyBpbnQgemNyeXB0X3N0YXR1c19yZWFkKGNoYXIgKnJlc3BfYnVmZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkgICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCB6Y3J5cHRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQl1bnNpZ25lZCBjaGFyICp3b3JrYXJlYTsKLQlpbnQgbGVuOworCWNoYXIgd29ya2FyZWFbc2l6ZW9mKGludCkgKiBBUF9ERVZJQ0VTXTsKIAotCWxlbiA9IDA7Ci0KLQkvKiByZXNwX2J1ZmYgaXMgYSBwYWdlLiBVc2UgdGhlIHJpZ2h0IGhhbGYgZm9yIGEgd29yayBhcmVhICovCi0Jd29ya2FyZWEgPSByZXNwX2J1ZmYgKyAyMDAwOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIlxuemNyeXB0IHZlcnNpb246ICVkLiVkLiVkXG4iLAotCQlaQ1JZUFRfVkVSU0lPTiwgWkNSWVBUX1JFTEVBU0UsIFpDUllQVF9WQVJJQU5UKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJDcnlwdG9ncmFwaGljIGRvbWFpbjogJWRcbiIsCi0JCSAgICAgICBhcF9kb21haW5faW5kZXgpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIlRvdGFsIGRldmljZSBjb3VudDogJWRcbiIsCi0JCSAgICAgICB6Y3J5cHRfZGV2aWNlX2NvdW50KTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJQQ0lDQSBjb3VudDogJWRcbiIsCi0JCSAgICAgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJQ0EpKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJQQ0lDQyBjb3VudDogJWRcbiIsCi0JCSAgICAgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJQ0MpKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJQQ0lYQ0MgTUNMMiBjb3VudDogJWRcbiIsCi0JCSAgICAgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJWENDX01DTDIpKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJQQ0lYQ0MgTUNMMyBjb3VudDogJWRcbiIsCi0JCSAgICAgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJWENDX01DTDMpKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJDRVgyQyBjb3VudDogJWRcbiIsCi0JCSAgICAgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfQ0VYMkMpKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJDRVgyQSBjb3VudDogJWRcbiIsCi0JCSAgICAgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfQ0VYMkEpKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJDRVgzQyBjb3VudDogJWRcbiIsCi0JCSAgICAgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfQ0VYM0MpKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJDRVgzQSBjb3VudDogJWRcbiIsCi0JCSAgICAgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfQ0VYM0EpKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJyZXF1ZXN0cSBjb3VudDogJWRcbiIsCi0JCSAgICAgICB6Y3J5cHRfcmVxdWVzdHFfY291bnQoKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAicGVuZGluZ3EgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X3BlbmRpbmdxX2NvdW50KCkpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIlRvdGFsIG9wZW4gaGFuZGxlczogJWRcblxuIiwKLQkJICAgICAgIGF0b21pY19yZWFkKCZ6Y3J5cHRfb3Blbl9jb3VudCkpOworCXNlcV9wcmludGYobSwgIlxuemNyeXB0IHZlcnNpb246ICVkLiVkLiVkXG4iLAorCQkgICBaQ1JZUFRfVkVSU0lPTiwgWkNSWVBUX1JFTEVBU0UsIFpDUllQVF9WQVJJQU5UKTsKKwlzZXFfcHJpbnRmKG0sICJDcnlwdG9ncmFwaGljIGRvbWFpbjogJWRcbiIsIGFwX2RvbWFpbl9pbmRleCk7CisJc2VxX3ByaW50ZihtLCAiVG90YWwgZGV2aWNlIGNvdW50OiAlZFxuIiwgemNyeXB0X2RldmljZV9jb3VudCk7CisJc2VxX3ByaW50ZihtLCAiUENJQ0EgY291bnQ6ICVkXG4iLCB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJQ0EpKTsKKwlzZXFfcHJpbnRmKG0sICJQQ0lDQyBjb3VudDogJWRcbiIsIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lDQykpOworCXNlcV9wcmludGYobSwgIlBDSVhDQyBNQ0wyIGNvdW50OiAlZFxuIiwKKwkJICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSVhDQ19NQ0wyKSk7CisJc2VxX3ByaW50ZihtLCAiUENJWENDIE1DTDMgY291bnQ6ICVkXG4iLAorCQkgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJWENDX01DTDMpKTsKKwlzZXFfcHJpbnRmKG0sICJDRVgyQyBjb3VudDogJWRcbiIsIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgyQykpOworCXNlcV9wcmludGYobSwgIkNFWDJBIGNvdW50OiAlZFxuIiwgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX0NFWDJBKSk7CisJc2VxX3ByaW50ZihtLCAiQ0VYM0MgY291bnQ6ICVkXG4iLCB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfQ0VYM0MpKTsKKwlzZXFfcHJpbnRmKG0sICJDRVgzQSBjb3VudDogJWRcbiIsIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgzQSkpOworCXNlcV9wcmludGYobSwgInJlcXVlc3RxIGNvdW50OiAlZFxuIiwgemNyeXB0X3JlcXVlc3RxX2NvdW50KCkpOworCXNlcV9wcmludGYobSwgInBlbmRpbmdxIGNvdW50OiAlZFxuIiwgemNyeXB0X3BlbmRpbmdxX2NvdW50KCkpOworCXNlcV9wcmludGYobSwgIlRvdGFsIG9wZW4gaGFuZGxlczogJWRcblxuIiwKKwkJICAgYXRvbWljX3JlYWQoJnpjcnlwdF9vcGVuX2NvdW50KSk7CiAJemNyeXB0X3N0YXR1c19tYXNrKHdvcmthcmVhKTsKLQlsZW4gKz0gc3ByaW50aHgoIk9ubGluZSBkZXZpY2VzOiAxPVBDSUNBIDI9UENJQ0MgMz1QQ0lYQ0MoTUNMMikgIgotCQkJIjQ9UENJWENDKE1DTDMpIDU9Q0VYMkMgNj1DRVgyQSA3PUNFWDNDIDg9Q0VYM0EiLAotCQkJcmVzcF9idWZmK2xlbiwgd29ya2FyZWEsIEFQX0RFVklDRVMpOworCXNwcmludGh4KCJPbmxpbmUgZGV2aWNlczogMT1QQ0lDQSAyPVBDSUNDIDM9UENJWENDKE1DTDIpICIKKwkJICI0PVBDSVhDQyhNQ0wzKSA1PUNFWDJDIDY9Q0VYMkEgNz1DRVgzQyA4PUNFWDNBIiwKKwkJIG0sIHdvcmthcmVhLCBBUF9ERVZJQ0VTKTsKIAl6Y3J5cHRfcWRlcHRoX21hc2sod29ya2FyZWEpOwotCWxlbiArPSBzcHJpbnRoeCgiV2FpdGluZyB3b3JrIGVsZW1lbnQgY291bnRzIiwKLQkJCXJlc3BfYnVmZitsZW4sIHdvcmthcmVhLCBBUF9ERVZJQ0VTKTsKKwlzcHJpbnRoeCgiV2FpdGluZyB3b3JrIGVsZW1lbnQgY291bnRzIiwgbSwgd29ya2FyZWEsIEFQX0RFVklDRVMpOwogCXpjcnlwdF9wZXJkZXZfcmVxY250KChpbnQgKikgd29ya2FyZWEpOwotCWxlbiArPSBzcHJpbnRoeDQoIlBlci1kZXZpY2Ugc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCByZXF1ZXN0IGNvdW50cyIsCi0JCQkgcmVzcF9idWZmK2xlbiwodW5zaWduZWQgaW50ICopIHdvcmthcmVhLCBBUF9ERVZJQ0VTKTsKLQkqZW9mID0gMTsKLQltZW1zZXQoKHZvaWQgKikgd29ya2FyZWEsIDB4MDAsIEFQX0RFVklDRVMgKiBzaXplb2YodW5zaWduZWQgaW50KSk7Ci0JcmV0dXJuIGxlbjsKKwlzcHJpbnRoeDQoIlBlci1kZXZpY2Ugc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCByZXF1ZXN0IGNvdW50cyIsCisJCSAgbSwgKHVuc2lnbmVkIGludCAqKSB3b3JrYXJlYSwgQVBfREVWSUNFUyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemNyeXB0X3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgemNyeXB0X3Byb2Nfc2hvdywgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIHpjcnlwdF9kaXNhYmxlX2NhcmQoaW50IGluZGV4KQpAQCAtMTA2MSwxMSArMTA0MSwxMSBAQAogCXNwaW5fdW5sb2NrX2JoKCZ6Y3J5cHRfZGV2aWNlX2xvY2spOwogfQogCi1zdGF0aWMgaW50IHpjcnlwdF9zdGF0dXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBzc2l6ZV90IHpjcnlwdF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCXVuc2lnbmVkIGNoYXIgKmxidWYsICpwdHI7Ci0JdW5zaWduZWQgbG9uZyBsb2NhbF9jb3VudDsKKwlzaXplX3QgbG9jYWxfY291bnQ7CiAJaW50IGo7CiAKIAlpZiAoY291bnQgPD0gMCkKQEAgLTExMTUsNiArMTA5NSwxNSBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemNyeXB0X3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gemNyeXB0X3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSB6Y3J5cHRfcHJvY193cml0ZSwKK307CisKIHN0YXRpYyBpbnQgemNyeXB0X3JuZ19kZXZpY2VfY291bnQ7CiBzdGF0aWMgdTMyICp6Y3J5cHRfcm5nX2J1ZmZlcjsKIHN0YXRpYyBpbnQgemNyeXB0X3JuZ19idWZmZXJfaW5kZXg7CkBAIC0xMTk3LDE0ICsxMTg2LDExIEBACiAJCWdvdG8gb3V0OwogCiAJLyogU2V0IHVwIHRoZSBwcm9jIGZpbGUgc3lzdGVtICovCi0JemNyeXB0X2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoImRyaXZlci96OTBjcnlwdCIsIDA2NDQsIE5VTEwpOworCXpjcnlwdF9lbnRyeSA9IHByb2NfY3JlYXRlKCJkcml2ZXIvejkwY3J5cHQiLCAwNjQ0LCBOVUxMLCAmemNyeXB0X3Byb2NfZm9wcyk7CiAJaWYgKCF6Y3J5cHRfZW50cnkpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9taXNjOwogCX0KLQl6Y3J5cHRfZW50cnktPmRhdGEgPSBOVUxMOwotCXpjcnlwdF9lbnRyeS0+cmVhZF9wcm9jID0gemNyeXB0X3N0YXR1c19yZWFkOwotCXpjcnlwdF9lbnRyeS0+d3JpdGVfcHJvYyA9IHpjcnlwdF9zdGF0dXNfd3JpdGU7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMgYi9kcml2ZXJzL3MzOTAva3ZtL2t2bV92aXJ0aW8uYwppbmRleCAyOTMwZmM3Li5iMmZjNGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAva3ZtL2t2bV92aXJ0aW8uYworKysgYi9kcml2ZXJzL3MzOTAva3ZtL2t2bV92aXJ0aW8uYwpAQCAtMzQwLDExICszNDAsMTEgQEAKIAkJcmV0dXJuOwogCiAJLyogVGhlIExTQiBtaWdodCBiZSBvdmVybG9hZGVkLCB3ZSBoYXZlIHRvIG1hc2sgaXQgKi8KLQl2cSA9IChzdHJ1Y3QgdmlydHF1ZXVlICopICgoKihsb25nICopIF9fTENfUEZBVUxUX0lOVFBBUk0pICYgfjFVTCk7CisJdnEgPSAoc3RydWN0IHZpcnRxdWV1ZSAqKShTMzkwX2xvd2NvcmUuZXh0X3BhcmFtczIgJiB+MVVMKTsKIAogCS8qIFdlIHVzZSB0aGUgTFNCIG9mIGV4dHBhcmFtLCB0byBkZWNpZGUsIGlmIHRoaXMgaW50ZXJydXB0IGlzIGEgY29uZmlnCiAJICogY2hhbmdlIG9yIGEgInN0YW5kYXJkIiBpbnRlcnJ1cHQgKi8KLQljb25maWdfY2hhbmdlZCA9ICAoKihpbnQgKikgIF9fTENfRVhUX1BBUkFNUyAmIDEpOworCWNvbmZpZ19jaGFuZ2VkID0gUzM5MF9sb3djb3JlLmV4dF9wYXJhbXMgJiAxOwogCiAJaWYgKGNvbmZpZ19jaGFuZ2VkKSB7CiAJCXN0cnVjdCB2aXJ0aW9fZHJpdmVyICpkcnY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwppbmRleCA5ZDBjOTQxLi42NmQ2YzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogTW9kdWxlIGludGVyZmFjZSBhbmQgaGFuZGxpbmcgb2YgemZjcCBkYXRhIHN0cnVjdHVyZXMuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMTAKICAqLwogCiAvKgpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSAiemZjcF9leHQuaCIKICNpbmNsdWRlICJ6ZmNwX2ZjLmgiCisjaW5jbHVkZSAiemZjcF9yZXFsaXN0LmgiCiAKICNkZWZpbmUgWkZDUF9CVVNfSURfU0laRQkyMAogCkBAIC00OSwzNiArNTAsNiBAQAogCXJldHVybiBrbWVtX2NhY2hlX2NyZWF0ZShuYW1lLCBzaXplLCByb3VuZHVwX3Bvd19vZl90d28oc2l6ZSksIDAsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IHpmY3BfcmVxbGlzdF9hbGxvYyhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQotewotCWludCBpZHg7Ci0KLQlhZGFwdGVyLT5yZXFfbGlzdCA9IGtjYWxsb2MoUkVRVUVTVF9MSVNUX1NJWkUsIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwKLQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhZGFwdGVyLT5yZXFfbGlzdCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IFJFUVVFU1RfTElTVF9TSVpFOyBpZHgrKykKLQkJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPnJlcV9saXN0W2lkeF0pOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIHpmY3BfcmVxbGlzdF9pc2VtcHR5IC0gaXMgdGhlIHJlcXVlc3QgbGlzdCBlbXB0eQotICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfYWRhcHRlcgotICoKLSAqIFJldHVybnM6IHRydWUgaWYgbGlzdCBpcyBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlCi0gKi8KLWludCB6ZmNwX3JlcWxpc3RfaXNlbXB0eShzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQotewotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IFJFUVVFU1RfTElTVF9TSVpFOyBpZHgrKykKLQkJaWYgKCFsaXN0X2VtcHR5KCZhZGFwdGVyLT5yZXFfbGlzdFtpZHhdKSkKLQkJCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgemZjcF9pbml0X2RldmljZV9jb25maWd1cmUoY2hhciAqYnVzaWQsIHU2NCB3d3BuLCB1NjQgbHVuKQogewogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OwpAQCAtMTEwLDcgKzgxLDcgQEAKIAlmbHVzaF93b3JrKCZ1bml0LT5zY3NpX3dvcmspOwogCiBvdXRfdW5pdDoKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiBvdXRfcG9ydDoKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChhZGFwdGVyKTsKIG91dF9jY3dfZGV2aWNlOgpAQCAtMjU1LDcgKzIyNiw3IEBACiAJcmVhZF9sb2NrX2lycXNhdmUoJnBvcnQtPnVuaXRfbGlzdF9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh1bml0LCAmcG9ydC0+dW5pdF9saXN0LCBsaXN0KQogCQlpZiAodW5pdC0+ZmNwX2x1biA9PSBmY3BfbHVuKSB7Ci0JCQlpZiAoIWdldF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSkpCisJCQlpZiAoIWdldF9kZXZpY2UoJnVuaXQtPmRldikpCiAJCQkJdW5pdCA9IE5VTEw7CiAJCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT51bml0X2xpc3RfbG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIHVuaXQ7CkBAIC0yODAsNyArMjUxLDcgQEAKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cG9ydF9saXN0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZhZGFwdGVyLT5wb3J0X2xpc3QsIGxpc3QpCiAJCWlmIChwb3J0LT53d3BuID09IHd3cG4pIHsKLQkJCWlmICghZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKSkKKwkJCWlmICghZ2V0X2RldmljZSgmcG9ydC0+ZGV2KSkKIAkJCQlwb3J0ID0gTlVMTDsKIAkJCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnBvcnRfbGlzdF9sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gcG9ydDsKQEAgLTI5OCwxMCArMjY5LDkgQEAKICAqLwogc3RhdGljIHZvaWQgemZjcF91bml0X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgemZjcF91bml0LAotCQkJCQkgICAgICBzeXNmc19kZXZpY2UpOworCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgemZjcF91bml0LCBkZXYpOwogCi0JcHV0X2RldmljZSgmdW5pdC0+cG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZ1bml0LT5wb3J0LT5kZXYpOwogCWtmcmVlKHVuaXQpOwogfQogCkBAIC0zMTgsMTEgKzI4OCwxMSBAQAogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CiAKLQlnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCWdldF9kZXZpY2UoJnBvcnQtPmRldik7CiAKIAl1bml0ID0gemZjcF9nZXRfdW5pdF9ieV9sdW4ocG9ydCwgZmNwX2x1bik7CiAJaWYgKHVuaXQpIHsKLQkJcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAkJcmV0dmFsID0gLUVFWElTVDsKIAkJZ290byBlcnJfb3V0OwogCX0KQEAgLTMzMywxMCArMzAzLDEwIEBACiAKIAl1bml0LT5wb3J0ID0gcG9ydDsKIAl1bml0LT5mY3BfbHVuID0gZmNwX2x1bjsKLQl1bml0LT5zeXNmc19kZXZpY2UucGFyZW50ID0gJnBvcnQtPnN5c2ZzX2RldmljZTsKLQl1bml0LT5zeXNmc19kZXZpY2UucmVsZWFzZSA9IHpmY3BfdW5pdF9yZWxlYXNlOworCXVuaXQtPmRldi5wYXJlbnQgPSAmcG9ydC0+ZGV2OworCXVuaXQtPmRldi5yZWxlYXNlID0gemZjcF91bml0X3JlbGVhc2U7CiAKLQlpZiAoZGV2X3NldF9uYW1lKCZ1bml0LT5zeXNmc19kZXZpY2UsICIweCUwMTZsbHgiLAorCWlmIChkZXZfc2V0X25hbWUoJnVuaXQtPmRldiwgIjB4JTAxNmxseCIsCiAJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgZmNwX2x1bikpIHsKIAkJa2ZyZWUodW5pdCk7CiAJCWdvdG8gZXJyX291dDsKQEAgLTM1MywxMyArMzIzLDEyIEBACiAJdW5pdC0+bGF0ZW5jaWVzLmNtZC5jaGFubmVsLm1pbiA9IDB4RkZGRkZGRkY7CiAJdW5pdC0+bGF0ZW5jaWVzLmNtZC5mYWJyaWMubWluID0gMHhGRkZGRkZGRjsKIAotCWlmIChkZXZpY2VfcmVnaXN0ZXIoJnVuaXQtPnN5c2ZzX2RldmljZSkpIHsKLQkJcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZ1bml0LT5kZXYpKSB7CisJCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKCZ1bml0LT5zeXNmc19kZXZpY2Uua29iaiwKLQkJCSAgICAgICAmemZjcF9zeXNmc191bml0X2F0dHJzKSkKKwlpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKCZ1bml0LT5kZXYua29iaiwgJnpmY3Bfc3lzZnNfdW5pdF9hdHRycykpCiAJCWdvdG8gZXJyX291dF9wdXQ7CiAKIAl3cml0ZV9sb2NrX2lycSgmcG9ydC0+dW5pdF9saXN0X2xvY2spOwpAQCAtMzcxLDkgKzM0MCw5IEBACiAJcmV0dXJuIHVuaXQ7CiAKIGVycl9vdXRfcHV0OgotCWRldmljZV91bnJlZ2lzdGVyKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCWRldmljZV91bnJlZ2lzdGVyKCZ1bml0LT5kZXYpOwogZXJyX291dDoKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKIH0KIApAQCAtNTM5LDcgKzUwOCw4IEBACiAJaWYgKHpmY3BfYWxsb2NhdGVfbG93X21lbV9idWZmZXJzKGFkYXB0ZXIpKQogCQlnb3RvIGZhaWxlZDsKIAotCWlmICh6ZmNwX3JlcWxpc3RfYWxsb2MoYWRhcHRlcikpCisJYWRhcHRlci0+cmVxX2xpc3QgPSB6ZmNwX3JlcWxpc3RfYWxsb2MoKTsKKwlpZiAoIWFkYXB0ZXItPnJlcV9saXN0KQogCQlnb3RvIGZhaWxlZDsKIAogCWlmICh6ZmNwX2RiZl9hZGFwdGVyX3JlZ2lzdGVyKGFkYXB0ZXIpKQpAQCAtNTYwLDggKzUzMCw2IEBACiAJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPmVycF9yZWFkeV9oZWFkKTsKIAlJTklUX0xJU1RfSEVBRCgmYWRhcHRlci0+ZXJwX3J1bm5pbmdfaGVhZCk7CiAKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+cmVxX2xpc3RfbG9jayk7Ci0KIAlyd2xvY2tfaW5pdCgmYWRhcHRlci0+ZXJwX2xvY2spOwogCXJ3bG9ja19pbml0KCZhZGFwdGVyLT5hYm9ydF9sb2NrKTsKIApAQCAtNjQwLDggKzYwOCw3IEBACiAKIHN0YXRpYyB2b2lkIHpmY3BfcG9ydF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfcG9ydCwKLQkJCQkJICAgICAgc3lzZnNfZGV2aWNlKTsKKwlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfcG9ydCwgZGV2KTsKIAogCXpmY3BfY2N3X2FkYXB0ZXJfcHV0KHBvcnQtPmFkYXB0ZXIpOwogCWtmcmVlKHBvcnQpOwpAQCAtNjY5LDcgKzYzNiw3IEBACiAKIAlwb3J0ID0gemZjcF9nZXRfcG9ydF9ieV93d3BuKGFkYXB0ZXIsIHd3cG4pOwogCWlmIChwb3J0KSB7Ci0JCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJCXJldHZhbCA9IC1FRVhJU1Q7CiAJCWdvdG8gZXJyX291dDsKIAl9CkBAIC02ODksMjIgKzY1NiwyMSBAQAogCXBvcnQtPmRfaWQgPSBkX2lkOwogCXBvcnQtPnd3cG4gPSB3d3BuOwogCXBvcnQtPnJwb3J0X3Rhc2sgPSBSUE9SVF9OT05FOwotCXBvcnQtPnN5c2ZzX2RldmljZS5wYXJlbnQgPSAmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2OwotCXBvcnQtPnN5c2ZzX2RldmljZS5yZWxlYXNlID0gemZjcF9wb3J0X3JlbGVhc2U7CisJcG9ydC0+ZGV2LnBhcmVudCA9ICZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXY7CisJcG9ydC0+ZGV2LnJlbGVhc2UgPSB6ZmNwX3BvcnRfcmVsZWFzZTsKIAotCWlmIChkZXZfc2V0X25hbWUoJnBvcnQtPnN5c2ZzX2RldmljZSwgIjB4JTAxNmxseCIsCi0JCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyl3d3BuKSkgeworCWlmIChkZXZfc2V0X25hbWUoJnBvcnQtPmRldiwgIjB4JTAxNmxseCIsICh1bnNpZ25lZCBsb25nIGxvbmcpd3dwbikpIHsKIAkJa2ZyZWUocG9ydCk7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAJcmV0dmFsID0gLUVJTlZBTDsKIAotCWlmIChkZXZpY2VfcmVnaXN0ZXIoJnBvcnQtPnN5c2ZzX2RldmljZSkpIHsKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZwb3J0LT5kZXYpKSB7CisJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKCZwb3J0LT5zeXNmc19kZXZpY2Uua29iaiwKKwlpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKCZwb3J0LT5kZXYua29iaiwKIAkJCSAgICAgICAmemZjcF9zeXNmc19wb3J0X2F0dHJzKSkKIAkJZ290byBlcnJfb3V0X3B1dDsKIApAQCAtNzE3LDcgKzY4Myw3IEBACiAJcmV0dXJuIHBvcnQ7CiAKIGVycl9vdXRfcHV0OgotCWRldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCWRldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5kZXYpOwogZXJyX291dDoKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChhZGFwdGVyKTsKIAlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKaW5kZXggYzIyY2I3Mi4uY2UxY2M3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCkBAIC0zLDEzICszLDE0IEBACiAgKgogICogUmVnaXN0cmF0aW9uIGFuZCBjYWxsYmFjayBmb3IgdGhlIHMzOTAgY29tbW9uIEkvTyBsYXllci4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDkKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAxMAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCiAjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CiAKICNpbmNsdWRlICJ6ZmNwX2V4dC5oIgorI2luY2x1ZGUgInpmY3BfcmVxbGlzdC5oIgogCiAjZGVmaW5lIFpGQ1BfTU9ERUxfUFJJViAweDQKIApAQCAtMTIyLDEyICsxMjMsMTAgQEAKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChhZGFwdGVyKTsgLyogcHV0IGZyb20gemZjcF9jY3dfYWRhcHRlcl9ieV9jZGV2ICovCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5pdCwgdSwgJnVuaXRfcmVtb3ZlX2xoLCBsaXN0KQotCQl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZ1bml0LT5zeXNmc19kZXZpY2UsCi0JCQkJICAgICAgICZ6ZmNwX3N5c2ZzX3VuaXRfYXR0cnMpOworCQl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZ1bml0LT5kZXYsICZ6ZmNwX3N5c2ZzX3VuaXRfYXR0cnMpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcnQsIHAsICZwb3J0X3JlbW92ZV9saCwgbGlzdCkKLQkJemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+c3lzZnNfZGV2aWNlLAotCQkJCSAgICAgICAmemZjcF9zeXNmc19wb3J0X2F0dHJzKTsKKwkJemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+ZGV2LCAmemZjcF9zeXNmc19wb3J0X2F0dHJzKTsKIAogCXpmY3BfYWRhcHRlcl91bnJlZ2lzdGVyKGFkYXB0ZXIpOwogfQpAQCAtMTYyLDcgKzE2MSw3IEBACiAJfQogCiAJLyogaW5pdGlhbGl6ZSByZXF1ZXN0IGNvdW50ZXIgKi8KLQlCVUdfT04oIXpmY3BfcmVxbGlzdF9pc2VtcHR5KGFkYXB0ZXIpKTsKKwlCVUdfT04oIXpmY3BfcmVxbGlzdF9pc2VtcHR5KGFkYXB0ZXItPnJlcV9saXN0KSk7CiAJYWRhcHRlci0+cmVxX25vID0gMDsKIAogCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLCAiY2Nzb25sMSIsIE5VTEwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYwppbmRleCA3MzY5Yzg5Li43YTE0OWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMKQEAgLTE0MCw5ICsxNDAsOSBAQAogCW1lbWNweShyZXNwb25zZS0+ZnNmX3N0YXR1c19xdWFsLAogCSAgICAgICBmc2Zfc3RhdHVzX3F1YWwsIEZTRl9TVEFUVVNfUVVBTElGSUVSX1NJWkUpOwogCXJlc3BvbnNlLT5mc2ZfcmVxX3N0YXR1cyA9IGZzZl9yZXEtPnN0YXR1czsKLQlyZXNwb25zZS0+c2JhbF9maXJzdCA9IGZzZl9yZXEtPnF1ZXVlX3JlcS5zYmFsX2ZpcnN0OwotCXJlc3BvbnNlLT5zYmFsX2xhc3QgPSBmc2ZfcmVxLT5xdWV1ZV9yZXEuc2JhbF9sYXN0OwotCXJlc3BvbnNlLT5zYmFsX3Jlc3BvbnNlID0gZnNmX3JlcS0+cXVldWVfcmVxLnNiYWxfcmVzcG9uc2U7CisJcmVzcG9uc2UtPnNiYWxfZmlyc3QgPSBmc2ZfcmVxLT5xZGlvX3JlcS5zYmFsX2ZpcnN0OworCXJlc3BvbnNlLT5zYmFsX2xhc3QgPSBmc2ZfcmVxLT5xZGlvX3JlcS5zYmFsX2xhc3Q7CisJcmVzcG9uc2UtPnNiYWxfcmVzcG9uc2UgPSBmc2ZfcmVxLT5xZGlvX3JlcS5zYmFsX3Jlc3BvbnNlOwogCXJlc3BvbnNlLT5wb29sID0gZnNmX3JlcS0+cG9vbCAhPSBOVUxMOwogCXJlc3BvbnNlLT5lcnBfYWN0aW9uID0gKHVuc2lnbmVkIGxvbmcpZnNmX3JlcS0+ZXJwX2FjdGlvbjsKIApAQCAtNTc2LDcgKzU3Niw4IEBACiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGRiZi0+YWRhcHRlcjsKIAogCXpmY3BfZGJmX3JlY190YXJnZXQoaWQsIHJlZiwgZGJmLCAmYWRhcHRlci0+c3RhdHVzLAotCQkJCSAgJmFkYXB0ZXItPmVycF9jb3VudGVyLCAwLCAwLCAwKTsKKwkJCSAgICAmYWRhcHRlci0+ZXJwX2NvdW50ZXIsIDAsIDAsCisJCQkgICAgWkZDUF9EQkZfSU5WQUxJRF9MVU4pOwogfQogCiAvKioKQEAgLTU5MCw4ICs1OTEsOCBAQAogCXN0cnVjdCB6ZmNwX2RiZiAqZGJmID0gcG9ydC0+YWRhcHRlci0+ZGJmOwogCiAJemZjcF9kYmZfcmVjX3RhcmdldChpZCwgcmVmLCBkYmYsICZwb3J0LT5zdGF0dXMsCi0JCQkJICAmcG9ydC0+ZXJwX2NvdW50ZXIsIHBvcnQtPnd3cG4sIHBvcnQtPmRfaWQsCi0JCQkJICAwKTsKKwkJCSAgICAmcG9ydC0+ZXJwX2NvdW50ZXIsIHBvcnQtPnd3cG4sIHBvcnQtPmRfaWQsCisJCQkgICAgWkZDUF9EQkZfSU5WQUxJRF9MVU4pOwogfQogCiAvKioKQEAgLTY0MiwxMCArNjQzLDkgQEAKIAkJci0+dS50cmlnZ2VyLnBzID0gYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cyk7CiAJCXItPnUudHJpZ2dlci53d3BuID0gcG9ydC0+d3dwbjsKIAl9Ci0JaWYgKHVuaXQpIHsKKwlpZiAodW5pdCkKIAkJci0+dS50cmlnZ2VyLnVzID0gYXRvbWljX3JlYWQoJnVuaXQtPnN0YXR1cyk7Ci0JCXItPnUudHJpZ2dlci5mY3BfbHVuID0gdW5pdC0+ZmNwX2x1bjsKLQl9CisJci0+dS50cmlnZ2VyLmZjcF9sdW4gPSB1bml0ID8gdW5pdC0+ZmNwX2x1biA6IFpGQ1BfREJGX0lOVkFMSURfTFVOOwogCWRlYnVnX2V2ZW50KGRiZi0+cmVjLCBhY3Rpb24gPyAxIDogNCwgciwgc2l6ZW9mKCpyKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5yZWNfbG9jaywgZmxhZ3MpOwogfQpAQCAtNjY4LDcgKzY2OCw3IEBACiAJci0+dS5hY3Rpb24uYWN0aW9uID0gKHVuc2lnbmVkIGxvbmcpZXJwX2FjdGlvbjsKIAlyLT51LmFjdGlvbi5zdGF0dXMgPSBlcnBfYWN0aW9uLT5zdGF0dXM7CiAJci0+dS5hY3Rpb24uc3RlcCA9IGVycF9hY3Rpb24tPnN0ZXA7Ci0Jci0+dS5hY3Rpb24uZnNmX3JlcSA9ICh1bnNpZ25lZCBsb25nKWVycF9hY3Rpb24tPmZzZl9yZXE7CisJci0+dS5hY3Rpb24uZnNmX3JlcSA9IGVycF9hY3Rpb24tPmZzZl9yZXFfaWQ7CiAJZGVidWdfZXZlbnQoZGJmLT5yZWMsIDUsIHIsIHNpemVvZigqcikpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+cmVjX2xvY2ssIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oCmluZGV4IDhiN2ZkOWEuLjQ1N2UwNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuaApAQCAtMzAsNiArMzAsOCBAQAogI2RlZmluZSBaRkNQX0RCRl9UQUdfU0laRSAgICAgIDQKICNkZWZpbmUgWkZDUF9EQkZfSURfU0laRSAgICAgICA3CiAKKyNkZWZpbmUgWkZDUF9EQkZfSU5WQUxJRF9MVU4JMHhGRkZGRkZGRkZGRkZGRkZGdWxsCisKIHN0cnVjdCB6ZmNwX2RiZl9kdW1wIHsKIAl1OCB0YWdbWkZDUF9EQkZfVEFHX1NJWkVdOwogCXUzMiB0b3RhbF9zaXplOwkJLyogc2l6ZSBvZiB0b3RhbCBkdW1wIGRhdGEgKi8KQEAgLTE5MiwxMCArMTk0LDEwIEBACiAJCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkX2N0X3Jlc3BvbnNlIGN0X3Jlc3A7CiAJCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkX2VscyBlbHM7CiAJfSB1OwotI2RlZmluZSBaRkNQX0RCRl9TQU5fTUFYX1BBWUxPQUQgMTAyNAotCXU4IHBheWxvYWRbMzJdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgWkZDUF9EQkZfU0FOX01BWF9QQVlMT0FEIDEwMjQKKwogc3RydWN0IHpmY3BfZGJmX3Njc2lfcmVjb3JkIHsKIAl1OCB0YWdbWkZDUF9EQkZfVEFHX1NJWkVdOwogCXU4IHRhZzJbWkZDUF9EQkZfVEFHX1NJWkVdOwpAQCAtMzAxLDE3ICszMDMsMzEgQEAKIAogLyoqCiAgKiB6ZmNwX2RiZl9zY3NpX3Jlc3VsdCAtIHRyYWNlIGV2ZW50IGZvciBTQ1NJIGNvbW1hbmQgY29tcGxldGlvbgotICogQHRhZzogdGFnIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlIG9mIFNDU0kgY29tbWFuZAotICogQGxldmVsOiB0cmFjZSBsZXZlbCBhcHBsaWNhYmxlIGZvciB0aGlzIGV2ZW50Ci0gKiBAYWRhcHRlcjogYWRhcHRlciB0aGF0IGhhcyBiZWVuIHVzZWQgdG8gaXNzdWUgdGhlIFNDU0kgY29tbWFuZAorICogQGRiZjogYWRhcHRlciBkYmYgdHJhY2UKICAqIEBzY21kOiBTQ1NJIGNvbW1hbmQgcG9pbnRlcgotICogQGZzZl9yZXE6IHJlcXVlc3QgdXNlZCB0byBpc3N1ZSBTQ1NJIGNvbW1hbmQgKG1pZ2h0IGJlIE5VTEwpCisgKiBAcmVxOiBGU0YgcmVxdWVzdCB1c2VkIHRvIGlzc3VlIFNDU0kgY29tbWFuZAogICovCiBzdGF0aWMgaW5saW5lCi12b2lkIHpmY3BfZGJmX3Njc2lfcmVzdWx0KGNvbnN0IGNoYXIgKnRhZywgaW50IGxldmVsLCBzdHJ1Y3QgemZjcF9kYmYgKmRiZiwKLQkJCSAgc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3ZvaWQgemZjcF9kYmZfc2NzaV9yZXN1bHQoc3RydWN0IHpmY3BfZGJmICpkYmYsIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsCisJCQkgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKIHsKLQl6ZmNwX2RiZl9zY3NpKCJyc2x0IiwgdGFnLCBsZXZlbCwgZGJmLCBzY21kLCBmc2ZfcmVxLCAwKTsKKwlpZiAoc2NtZC0+cmVzdWx0ICE9IDApCisJCXpmY3BfZGJmX3Njc2koInJzbHQiLCAiZXJybyIsIDMsIGRiZiwgc2NtZCwgcmVxLCAwKTsKKwllbHNlIGlmIChzY21kLT5yZXRyaWVzID4gMCkKKwkJemZjcF9kYmZfc2NzaSgicnNsdCIsICJyZXRyIiwgNCwgZGJmLCBzY21kLCByZXEsIDApOworCWVsc2UKKwkJemZjcF9kYmZfc2NzaSgicnNsdCIsICJub3JtIiwgNiwgZGJmLCBzY21kLCByZXEsIDApOworfQorCisvKioKKyAqIHpmY3BfZGJmX3Njc2lfZmFpbF9zZW5kIC0gdHJhY2UgZXZlbnQgZm9yIGZhaWx1cmUgdG8gc2VuZCBTQ1NJIGNvbW1hbmQKKyAqIEBkYmY6IGFkYXB0ZXIgZGJmIHRyYWNlCisgKiBAc2NtZDogU0NTSSBjb21tYW5kIHBvaW50ZXIKKyAqLworc3RhdGljIGlubGluZQordm9pZCB6ZmNwX2RiZl9zY3NpX2ZhaWxfc2VuZChzdHJ1Y3QgemZjcF9kYmYgKmRiZiwgc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwl6ZmNwX2RiZl9zY3NpKCJyc2x0IiwgImZhaWwiLCA0LCBkYmYsIHNjbWQsIE5VTEwsIDApOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCmluZGV4IGUxYjViODguLjcxMzFjN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBHbG9iYWwgZGVmaW5pdGlvbnMgZm9yIHRoZSB6ZmNwIGRldmljZSBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMTAKICAqLwogCiAjaWZuZGVmIFpGQ1BfREVGX0gKQEAgLTMzLDE1ICszMywxMyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfZmMuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfYnNnX2ZjLmg+CiAjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgotI2luY2x1ZGUgPGFzbS9xZGlvLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgogI2luY2x1ZGUgPGFzbS9zeXNpbmZvLmg+CiAjaW5jbHVkZSAiemZjcF9mc2YuaCIKKyNpbmNsdWRlICJ6ZmNwX3FkaW8uaCIKIAotLyoqKioqKioqKioqKioqKioqKioqKiBHRU5FUkFMIERFRklORVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFJFUVVFU1RfTElTVF9TSVpFIDEyOAorc3RydWN0IHpmY3BfcmVxbGlzdDsKIAogLyoqKioqKioqKioqKioqKioqKioqKiBTQ1NJIFNQRUNJRklDIERFRklORVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBaRkNQX1NDU0lfRVJfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgKDEwKkhaKQpAQCAtMTI5LDEyICsxMjcsNiBAQAogCW1lbXBvb2xfdCAqcXRjYl9wb29sOwogfTsKIAotc3RydWN0IHpmY3BfcWRpb19xdWV1ZSB7Ci0Jc3RydWN0IHFkaW9fYnVmZmVyICpzYmFsW1FESU9fTUFYX0JVRkZFUlNfUEVSX1FdOwotCXU4CQkgICBmaXJzdDsJLyogaW5kZXggb2YgbmV4dCBmcmVlIGJmciBpbiBxdWV1ZSAqLwotCWF0b21pY190ICAgICAgICAgICBjb3VudDsJLyogbnVtYmVyIG9mIGZyZWUgYnVmZmVycyBpbiBxdWV1ZSAqLwotfTsKLQogc3RydWN0IHpmY3BfZXJwX2FjdGlvbiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWludCBhY3Rpb247CSAgICAgICAgICAgICAgLyogcmVxdWVzdGVkIGFjdGlvbiBjb2RlICovCkBAIC0xNDMsOCArMTM1LDcgQEAKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwogCXUzMgkJc3RhdHVzOwkgICAgICAvKiByZWNvdmVyeSBzdGF0dXMgKi8KIAl1MzIgc3RlcDsJICAgICAgICAgICAgICAvKiBhY3RpdmUgc3RlcCBvZiB0aGlzIGVycCBhY3Rpb24gKi8KLQlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxOyAvKiBmc2YgcmVxdWVzdCBjdXJyZW50bHkgcGVuZGluZwotCQkJCQkgZm9yIHRoaXMgYWN0aW9uICovCisJdW5zaWduZWQgbG9uZwkJZnNmX3JlcV9pZDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIH07CiAKQEAgLTE2NywyOSArMTU4LDYgQEAKIAlzcGlubG9ja190IGxvY2s7CiB9OwogCi0vKiogc3RydWN0IHpmY3BfcWRpbyAtIGJhc2ljIFFESU8gZGF0YSBzdHJ1Y3R1cmUKLSAqIEByZXNwX3E6IHJlc3BvbnNlIHF1ZXVlCi0gKiBAcmVxX3E6IHJlcXVlc3QgcXVldWUKLSAqIEBzdGF0X2xvY2s6IGxvY2sgdG8gcHJvdGVjdCByZXFfcV91dGlsIGFuZCByZXFfcV90aW1lCi0gKiBAcmVxX3FfbG9jazsgbG9jayB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHJlcXVlc3QgcXVldWUKLSAqIEByZXFfcV90aW1lOiB0aW1lIG9mIGxhc3QgZmlsbCBsZXZlbCBjaGFuZ2UKLSAqIEByZXFfcV91dGlsOiB1c2VkIGZvciBhY2NvdW50aW5nCi0gKiBAcmVxX3FfZnVsbDogcXVldWUgZnVsbCBpbmNpZGVudHMKLSAqIEByZXFfcV93cTogdXNlZCB0byB3YWl0IGZvciBTQkFMIGF2YWlsYWJpbGl0eQotICogQGFkYXB0ZXI6IGFkYXB0ZXIgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoaXMgUURJTyBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IHpmY3BfcWRpbyB7Ci0Jc3RydWN0IHpmY3BfcWRpb19xdWV1ZQlyZXNwX3E7Ci0Jc3RydWN0IHpmY3BfcWRpb19xdWV1ZQlyZXFfcTsKLQlzcGlubG9ja190CQlzdGF0X2xvY2s7Ci0Jc3BpbmxvY2tfdAkJcmVxX3FfbG9jazsKLQl1bnNpZ25lZCBsb25nIGxvbmcJcmVxX3FfdGltZTsKLQl1NjQJCQlyZXFfcV91dGlsOwotCWF0b21pY190CQlyZXFfcV9mdWxsOwotCXdhaXRfcXVldWVfaGVhZF90CXJlcV9xX3dxOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIJKmFkYXB0ZXI7Ci19OwotCiBzdHJ1Y3QgemZjcF9hZGFwdGVyIHsKIAlzdHJ1Y3Qga3JlZgkJcmVmOwogCXU2NAkJCXBlZXJfd3dubjsJICAgLyogUDJQIHBlZXIgV1dOTiAqLwpAQCAtMjA3LDggKzE3NSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZAlwb3J0X2xpc3Q7CSAgIC8qIHJlbW90ZSBwb3J0IGxpc3QgKi8KIAlyd2xvY2tfdAkJcG9ydF9saXN0X2xvY2s7ICAgIC8qIHBvcnQgbGlzdCBsb2NrICovCiAJdW5zaWduZWQgbG9uZwkJcmVxX25vOwkJICAgLyogdW5pcXVlIEZTRiByZXEgbnVtYmVyICovCi0Jc3RydWN0IGxpc3RfaGVhZAkqcmVxX2xpc3Q7CSAgIC8qIGxpc3Qgb2YgcGVuZGluZyByZXFzICovCi0Jc3BpbmxvY2tfdAkJcmVxX2xpc3RfbG9jazsJICAgLyogcmVxdWVzdCBsaXN0IGxvY2sgKi8KKwlzdHJ1Y3QgemZjcF9yZXFsaXN0CSpyZXFfbGlzdDsKIAl1MzIJCQlmc2ZfcmVxX3NlcV9ubzsJICAgLyogRlNGIGNtbmQgc2VxIG51bWJlciAqLwogCXJ3bG9ja190CQlhYm9ydF9sb2NrOyAgICAgICAgLyogUHJvdGVjdHMgYWdhaW5zdCBTQ1NJCiAJCQkJCQkgICAgICBzdGFjayBhYm9ydC9jb21tYW5kCkBAIC0yNDEsNyArMjA4LDcgQEAKIH07CiAKIHN0cnVjdCB6ZmNwX3BvcnQgewotCXN0cnVjdCBkZXZpY2UgICAgICAgICAgc3lzZnNfZGV2aWNlOyAgIC8qIHN5c2ZzIGRldmljZSAqLworCXN0cnVjdCBkZXZpY2UgICAgICAgICAgZGV2OwogCXN0cnVjdCBmY19ycG9ydCAgICAgICAgKnJwb3J0OyAgICAgICAgIC8qIHJwb3J0IG9mIGZjIHRyYW5zcG9ydCBjbGFzcyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgbGlzdDsJICAgICAgIC8qIGxpc3Qgb2YgcmVtb3RlIHBvcnRzICovCiAJc3RydWN0IHpmY3BfYWRhcHRlciAgICAqYWRhcHRlcjsgICAgICAgLyogYWRhcHRlciB1c2VkIHRvIGFjY2VzcyBwb3J0ICovCkBAIC0yNjMsNyArMjMwLDcgQEAKIH07CiAKIHN0cnVjdCB6ZmNwX3VuaXQgewotCXN0cnVjdCBkZXZpY2UgICAgICAgICAgc3lzZnNfZGV2aWNlOyAgIC8qIHN5c2ZzIGRldmljZSAqLworCXN0cnVjdCBkZXZpY2UgICAgICAgICAgZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgbGlzdDsJICAgICAgIC8qIGxpc3Qgb2YgbG9naWNhbCB1bml0cyAqLwogCXN0cnVjdCB6ZmNwX3BvcnQgICAgICAgKnBvcnQ7CSAgICAgICAvKiByZW1vdGUgcG9ydCBvZiB1bml0ICovCiAJYXRvbWljX3QJICAgICAgIHN0YXR1czsJICAgICAgIC8qIHN0YXR1cyBvZiB0aGlzIGxvZ2ljYWwgdW5pdCAqLwpAQCAtMjc3LDMzICsyNDQsMTEgQEAKIH07CiAKIC8qKgotICogc3RydWN0IHpmY3BfcXVldWVfcmVxIC0gcXVldWUgcmVsYXRlZCB2YWx1ZXMgZm9yIGEgcmVxdWVzdAotICogQHNiYWxfbnVtYmVyOiBudW1iZXIgb2YgZnJlZSBTQkFMcwotICogQHNiYWxfZmlyc3Q6IGZpcnN0IFNCQUwgZm9yIHRoaXMgcmVxdWVzdAotICogQHNiYWxfbGFzdDogbGFzdCBTQkFMIGZvciB0aGlzIHJlcXVlc3QKLSAqIEBzYmFsX2xpbWl0OiBsYXN0IHBvc3NpYmxlIFNCQUwgZm9yIHRoaXMgcmVxdWVzdAotICogQHNiYWxlX2N1cnI6IGN1cnJlbnQgU0JBTEUgYXQgY3JlYXRpb24gb2YgdGhpcyByZXF1ZXN0Ci0gKiBAc2JhbF9yZXNwb25zZTogU0JBTCB1c2VkIGluIGludGVycnVwdAotICogQHFkaW9fb3V0Yl91c2FnZTogdXNhZ2Ugb2Ygb3V0Ym91bmQgcXVldWUKLSAqIEBxZGlvX2luYl91c2FnZTogdXNhZ2Ugb2YgaW5ib3VuZCBxdWV1ZQotICovCi1zdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgewotCXU4CQkgICAgICAgc2JhbF9udW1iZXI7Ci0JdTgJCSAgICAgICBzYmFsX2ZpcnN0OwotCXU4CQkgICAgICAgc2JhbF9sYXN0OwotCXU4CQkgICAgICAgc2JhbF9saW1pdDsKLQl1OAkJICAgICAgIHNiYWxlX2N1cnI7Ci0JdTgJCSAgICAgICBzYmFsX3Jlc3BvbnNlOwotCXUxNgkJICAgICAgIHFkaW9fb3V0Yl91c2FnZTsKLQl1MTYJCSAgICAgICBxZGlvX2luYl91c2FnZTsKLX07Ci0KLS8qKgogICogc3RydWN0IHpmY3BfZnNmX3JlcSAtIGJhc2ljIEZTRiByZXF1ZXN0IHN0cnVjdHVyZQogICogQGxpc3Q6IGxpc3Qgb2YgRlNGIHJlcXVlc3RzCiAgKiBAcmVxX2lkOiB1bmlxdWUgcmVxdWVzdCBJRAogICogQGFkYXB0ZXI6IGFkYXB0ZXIgdGhpcyByZXF1ZXN0IGJlbG9uZ3MgdG8KLSAqIEBxdWV1ZV9yZXE6IHF1ZXVlIHJlbGF0ZWQgdmFsdWVzCisgKiBAcWRpb19yZXE6IHFkaW8gcXVldWUgcmVsYXRlZCB2YWx1ZXMKICAqIEBjb21wbGV0aW9uOiB1c2VkIHRvIHNpZ25hbCB0aGUgY29tcGxldGlvbiBvZiB0aGUgcmVxdWVzdAogICogQHN0YXR1czogc3RhdHVzIG9mIHRoZSByZXF1ZXN0CiAgKiBAZnNmX2NvbW1hbmQ6IEZTRiBjb21tYW5kIGlzc3VlZApAQCAtMzIxLDcgKzI2Niw3IEBACiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXVuc2lnbmVkIGxvbmcJCXJlcV9pZDsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyCSphZGFwdGVyOwotCXN0cnVjdCB6ZmNwX3F1ZXVlX3JlcQlxdWV1ZV9yZXE7CisJc3RydWN0IHpmY3BfcWRpb19yZXEJcWRpb19yZXE7CiAJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGlvbjsKIAl1MzIJCQlzdGF0dXM7CiAJdTMyCQkJZnNmX2NvbW1hbmQ7CkBAIC0zNTIsNDUgKzI5Nyw0IEBACiAjZGVmaW5lIFpGQ1BfU0VUICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKICNkZWZpbmUgWkZDUF9DTEVBUiAgICAgICAgICAgICAgMHgwMDAwMDIwMAogCi0vKgotICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgcmVxdWVzdCBJRCBtYW5hZ2VtZW50LgotICovCi1zdGF0aWMgaW5saW5lIGludCB6ZmNwX3JlcWxpc3RfaGFzaCh1bnNpZ25lZCBsb25nIHJlcV9pZCkKLXsKLQlyZXR1cm4gcmVxX2lkICUgUkVRVUVTVF9MSVNUX1NJWkU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB6ZmNwX3JlcWxpc3RfcmVtb3ZlKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICAgICAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCi17Ci0JbGlzdF9kZWwoJmZzZl9yZXEtPmxpc3QpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKgotemZjcF9yZXFsaXN0X2ZpbmQoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgbG9uZyByZXFfaWQpCi17Ci0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxdWVzdDsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JaWR4ID0gemZjcF9yZXFsaXN0X2hhc2gocmVxX2lkKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcXVlc3QsICZhZGFwdGVyLT5yZXFfbGlzdFtpZHhdLCBsaXN0KQotCQlpZiAocmVxdWVzdC0+cmVxX2lkID09IHJlcV9pZCkKLQkJCXJldHVybiByZXF1ZXN0OwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKgotemZjcF9yZXFsaXN0X2ZpbmRfc2FmZShzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCi17Ci0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxdWVzdDsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBSRVFVRVNUX0xJU1RfU0laRTsgaWR4KyspIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXF1ZXN0LCAmYWRhcHRlci0+cmVxX2xpc3RbaWR4XSwgbGlzdCkKLQkJCWlmIChyZXF1ZXN0ID09IHJlcSkKLQkJCQlyZXR1cm4gcmVxdWVzdDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KICNlbmRpZiAvKiBaRkNQX0RFRl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwppbmRleCBiNTFhMTFhLi4wYmU1ZTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogRXJyb3IgUmVjb3ZlcnkgUHJvY2VkdXJlcyAoRVJQKS4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDkKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAxMAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCkBAIC0xMSw2ICsxMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSAiemZjcF9leHQuaCIKKyNpbmNsdWRlICJ6ZmNwX3JlcWxpc3QuaCIKIAogI2RlZmluZSBaRkNQX01BWF9FUlBTICAgICAgICAgICAgICAgICAgIDMKIApAQCAtMTc0LDcgKzE3NSw3IEBACiAKIAlzd2l0Y2ggKG5lZWQpIHsKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fVU5JVDoKLQkJaWYgKCFnZXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpKQorCQlpZiAoIWdldF9kZXZpY2UoJnVuaXQtPmRldikpCiAJCQlyZXR1cm4gTlVMTDsKIAkJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfSU5VU0UsICZ1bml0LT5zdGF0dXMpOwogCQllcnBfYWN0aW9uID0gJnVuaXQtPmVycF9hY3Rpb247CkBAIC0xODQsNyArMTg1LDcgQEAKIAogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUOgogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUX0ZPUkNFRDoKLQkJaWYgKCFnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpKQorCQlpZiAoIWdldF9kZXZpY2UoJnBvcnQtPmRldikpCiAJCQlyZXR1cm4gTlVMTDsKIAkJemZjcF9lcnBfYWN0aW9uX2Rpc21pc3NfcG9ydChwb3J0KTsKIAkJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfSU5VU0UsICZwb3J0LT5zdGF0dXMpOwpAQCAtNDc4LDI2ICs0NzksMjcgQEAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX3N0cmF0ZWd5X2NoZWNrX2ZzZnJlcShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICphY3QpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGFjdC0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXE7CiAKLQlpZiAoIWFjdC0+ZnNmX3JlcSkKKwlpZiAoIWFjdC0+ZnNmX3JlcV9pZCkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKLQlpZiAoemZjcF9yZXFsaXN0X2ZpbmRfc2FmZShhZGFwdGVyLCBhY3QtPmZzZl9yZXEpICYmCi0JICAgIGFjdC0+ZnNmX3JlcS0+ZXJwX2FjdGlvbiA9PSBhY3QpIHsKKwlzcGluX2xvY2soJmFkYXB0ZXItPnJlcV9saXN0LT5sb2NrKTsKKwlyZXEgPSBfemZjcF9yZXFsaXN0X2ZpbmQoYWRhcHRlci0+cmVxX2xpc3QsIGFjdC0+ZnNmX3JlcV9pZCk7CisJaWYgKHJlcSAmJiByZXEtPmVycF9hY3Rpb24gPT0gYWN0KSB7CiAJCWlmIChhY3QtPnN0YXR1cyAmIChaRkNQX1NUQVRVU19FUlBfRElTTUlTU0VEIHwKIAkJCQkgICBaRkNQX1NUQVRVU19FUlBfVElNRURPVVQpKSB7Ci0JCQlhY3QtPmZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRElTTUlTU0VEOworCQkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0RJU01JU1NFRDsKIAkJCXpmY3BfZGJmX3JlY19hY3Rpb24oImVyc2NmXzEiLCBhY3QpOwotCQkJYWN0LT5mc2ZfcmVxLT5lcnBfYWN0aW9uID0gTlVMTDsKKwkJCXJlcS0+ZXJwX2FjdGlvbiA9IE5VTEw7CiAJCX0KIAkJaWYgKGFjdC0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRVJQX1RJTUVET1VUKQogCQkJemZjcF9kYmZfcmVjX2FjdGlvbigiZXJzY2ZfMiIsIGFjdCk7Ci0JCWlmIChhY3QtPmZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQpCi0JCQlhY3QtPmZzZl9yZXEgPSBOVUxMOworCQlpZiAocmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRElTTUlTU0VEKQorCQkJYWN0LT5mc2ZfcmVxX2lkID0gMDsKIAl9IGVsc2UKLQkJYWN0LT5mc2ZfcmVxID0gTlVMTDsKLQlzcGluX3VubG9jaygmYWRhcHRlci0+cmVxX2xpc3RfbG9jayk7CisJCWFjdC0+ZnNmX3JlcV9pZCA9IDA7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9saXN0LT5sb2NrKTsKIH0KIAogLyoqCkBAIC0xMTc5LDE5ICsxMTgxLDE5IEBACiAJc3dpdGNoIChhY3QtPmFjdGlvbikgewogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9VTklUOgogCQlpZiAoKHJlc3VsdCA9PSBaRkNQX0VSUF9TVUNDRUVERUQpICYmICF1bml0LT5kZXZpY2UpIHsKLQkJCWdldF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJCQlnZXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogCQkJaWYgKHNjc2lfcXVldWVfd29yayh1bml0LT5wb3J0LT5hZGFwdGVyLT5zY3NpX2hvc3QsCiAJCQkJCSAgICAmdW5pdC0+c2NzaV93b3JrKSA8PSAwKQotCQkJCXB1dF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJCQkJcHV0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAkJfQotCQlwdXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCQlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogCQlicmVhazsKIAogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUX0ZPUkNFRDoKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVDoKIAkJaWYgKHJlc3VsdCA9PSBaRkNQX0VSUF9TVUNDRUVERUQpCiAJCQl6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRfcmVnaXN0ZXIocG9ydCk7Ci0JCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJCWJyZWFrOwogCiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX0FEQVBURVI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAppbmRleCA2NmJkYjM0Li44Nzg2YTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKQEAgLTIxLDcgKzIxLDYgQEAKIGV4dGVybiBzdHJ1Y3QgemZjcF9wb3J0ICp6ZmNwX3BvcnRfZW5xdWV1ZShzdHJ1Y3QgemZjcF9hZGFwdGVyICosIHU2NCwgdTMyLAogCQkJCQkgICB1MzIpOwogZXh0ZXJuIHN0cnVjdCB6ZmNwX3VuaXQgKnpmY3BfdW5pdF9lbnF1ZXVlKHN0cnVjdCB6ZmNwX3BvcnQgKiwgdTY0KTsKLWV4dGVybiBpbnQgemZjcF9yZXFsaXN0X2lzZW1wdHkoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKIGV4dGVybiB2b2lkIHpmY3Bfc2dfZnJlZV90YWJsZShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50KTsKIGV4dGVybiBpbnQgemZjcF9zZ19zZXR1cF90YWJsZShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50KTsKIGV4dGVybiB2b2lkIHpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGRldmljZSAqLApAQCAtMTQ0LDEzICsxNDMsOSBAQAogLyogemZjcF9xZGlvLmMgKi8KIGV4dGVybiBpbnQgemZjcF9xZGlvX3NldHVwKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CiBleHRlcm4gdm9pZCB6ZmNwX3FkaW9fZGVzdHJveShzdHJ1Y3QgemZjcF9xZGlvICopOwotZXh0ZXJuIGludCB6ZmNwX3FkaW9fc2VuZChzdHJ1Y3QgemZjcF9xZGlvICosIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqKTsKLWV4dGVybiBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudAotCSp6ZmNwX3FkaW9fc2JhbGVfcmVxKHN0cnVjdCB6ZmNwX3FkaW8gKiwgc3RydWN0IHpmY3BfcXVldWVfcmVxICopOwotZXh0ZXJuIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50Ci0JKnpmY3BfcWRpb19zYmFsZV9jdXJyKHN0cnVjdCB6ZmNwX3FkaW8gKiwgc3RydWN0IHpmY3BfcXVldWVfcmVxICopOworZXh0ZXJuIGludCB6ZmNwX3FkaW9fc2VuZChzdHJ1Y3QgemZjcF9xZGlvICosIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICopOwogZXh0ZXJuIGludCB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhzdHJ1Y3QgemZjcF9xZGlvICosCi0JCQkJICAgc3RydWN0IHpmY3BfcXVldWVfcmVxICosIHVuc2lnbmVkIGxvbmcsCisJCQkJICAgc3RydWN0IHpmY3BfcWRpb19yZXEgKiwgdW5zaWduZWQgbG9uZywKIAkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50KTsKIGV4dGVybiBpbnQgemZjcF9xZGlvX29wZW4oc3RydWN0IHpmY3BfcWRpbyAqKTsKIGV4dGVybiB2b2lkIHpmY3BfcWRpb19jbG9zZShzdHJ1Y3QgemZjcF9xZGlvICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCmluZGV4IDBmN2I0OTMuLjUyMTk2NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogRmlicmUgQ2hhbm5lbCByZWxhdGVkIGZ1bmN0aW9ucyBmb3IgdGhlIHpmY3AgZGV2aWNlIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDgsIDIwMDkKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwOCwgMjAxMAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCkBAIC0zMTYsNyArMzE2LDcgQEAKIAogCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsICJmY2dwbl8zIiwgTlVMTCk7CiBvdXQ6Ci0JcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogfQogCiAvKioKQEAgLTMyNSw5ICszMjUsOSBAQAogICovCiB2b2lkIHpmY3BfZmNfdHJpZ2dlcl9kaWRfbG9va3VwKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCiB7Ci0JZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlnZXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCWlmICghcXVldWVfd29yayhwb3J0LT5hZGFwdGVyLT53b3JrX3F1ZXVlLCAmcG9ydC0+Z2lkX3BuX3dvcmspKQotCQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogfQogCiAvKioKQEAgLTM4OSw3ICszODksNyBAQAogCXpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydF9yZWdpc3Rlcihwb3J0KTsKICBvdXQ6CiAJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfUE9SVF9MSU5LX1RFU1QsICZwb3J0LT5zdGF0dXMpOwotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAlrbWVtX2NhY2hlX2ZyZWUoemZjcF9kYXRhLmFkaXNjX2NhY2hlLCBhZGlzYyk7CiB9CiAKQEAgLTQzNiw3ICs0MzYsNyBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHpmY3BfcG9ydCwgdGVzdF9saW5rX3dvcmspOwogCWludCByZXR2YWw7CiAKLQlnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCWdldF9kZXZpY2UoJnBvcnQtPmRldik7CiAJcG9ydC0+cnBvcnRfdGFzayA9IFJQT1JUX0RFTDsKIAl6ZmNwX3Njc2lfcnBvcnRfd29yaygmcG9ydC0+cnBvcnRfd29yayk7CiAKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCXpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbihwb3J0LCAwLCAiZmNsdHdrMSIsIE5VTEwpOwogCiBvdXQ6Ci0JcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogfQogCiAvKioKQEAgLTQ2OCw5ICs0NjgsOSBAQAogICovCiB2b2lkIHpmY3BfZmNfdGVzdF9saW5rKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCiB7Ci0JZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlnZXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCWlmICghcXVldWVfd29yayhwb3J0LT5hZGFwdGVyLT53b3JrX3F1ZXVlLCAmcG9ydC0+dGVzdF9saW5rX3dvcmspKQotCQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX2ZyZWVfc2dfZW52KHN0cnVjdCB6ZmNwX2ZjX2dwbl9mdCAqZ3BuX2Z0LCBpbnQgYnVmX251bSkKQEAgLTYxNyw4ICs2MTcsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcnQsIHRtcCwgJnJlbW92ZV9saCwgbGlzdCkgewogCQl6ZmNwX2VycF9wb3J0X3NodXRkb3duKHBvcnQsIDAsICJmY2VncGYyIiwgTlVMTCk7Ci0JCXpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoJnBvcnQtPnN5c2ZzX2RldmljZSwKLQkJCQkgICAgICAgJnpmY3Bfc3lzZnNfcG9ydF9hdHRycyk7CisJCXpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoJnBvcnQtPmRldiwgJnpmY3Bfc3lzZnNfcG9ydF9hdHRycyk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTY3MSwxMiArNjcwLDExIEBACiB7CiAJc3RydWN0IGZjX2JzZ19qb2IgKmpvYiA9IGRhdGE7CiAJc3RydWN0IHpmY3BfZnNmX2N0X2VscyAqemZjcF9jdF9lbHMgPSBqb2ItPmRkX2RhdGE7Ci0JaW50IHN0YXR1cyA9IHpmY3BfY3RfZWxzLT5zdGF0dXM7Ci0JaW50IHJlcGx5X3N0YXR1czsKKwlzdHJ1Y3QgZmNfYnNnX3JlcGx5ICpqciA9IGpvYi0+cmVwbHk7CiAKLQlyZXBseV9zdGF0dXMgPSBzdGF0dXMgPyBGQ19DVEVMU19TVEFUVVNfUkVKRUNUIDogRkNfQ1RFTFNfU1RBVFVTX09LOwotCWpvYi0+cmVwbHktPnJlcGx5X2RhdGEuY3RlbHNfcmVwbHkuc3RhdHVzID0gcmVwbHlfc3RhdHVzOwotCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IGpvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwlqci0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuOworCWpyLT5yZXBseV9kYXRhLmN0ZWxzX3JlcGx5LnN0YXR1cyA9IEZDX0NURUxTX1NUQVRVU19PSzsKKwlqci0+cmVzdWx0ID0gemZjcF9jdF9lbHMtPnN0YXR1cyA/IC1FSU8gOiAwOwogCWpvYi0+am9iX2RvbmUoam9iKTsKIH0KIApAQCAtNzMyLDcgKzczMCw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlkX2lkID0gcG9ydC0+ZF9pZDsKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAl9IGVsc2UKIAkJZF9pZCA9IG50b2gyNChqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2Vscy5wb3J0X2lkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKaW5kZXggZThmYjRkOS4uNjUzODc0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEltcGxlbWVudGF0aW9uIG9mIEZTRiBjb21tYW5kcy4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDkKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAxMAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCkBAIC0xNCw2ICsxNCw4IEBACiAjaW5jbHVkZSAiemZjcF9leHQuaCIKICNpbmNsdWRlICJ6ZmNwX2ZjLmgiCiAjaW5jbHVkZSAiemZjcF9kYmYuaCIKKyNpbmNsdWRlICJ6ZmNwX3FkaW8uaCIKKyNpbmNsdWRlICJ6ZmNwX3JlcWxpc3QuaCIKIAogc3RhdGljIHZvaWQgemZjcF9mc2ZfcmVxdWVzdF90aW1lb3V0X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewpAQCAtMzkzLDcgKzM5NSw3IEBACiAJY2FzZSBGU0ZfUFJPVF9MSU5LX0RPV046CiAJCXpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwocmVxLCAiZnNwc2VfNSIsCiAJCQkJCSAgICAgJnBzcS0+bGlua19kb3duX2luZm8pOwotCQkvKiBGSVhNRTogcmVvcGVuaW5nIGFkYXB0ZXIgbm93PyBiZXR0ZXIgd2FpdCBmb3IgbGluayB1cCAqLworCQkvKiBnbyB0aHJvdWdoIHJlb3BlbiB0byBmbHVzaCBwZW5kaW5nIHJlcXVlc3RzICovCiAJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsICJmc3BzZV82IiwgcmVxKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfUFJPVF9SRUVTVF9RVUVVRToKQEAgLTQ1NywxNSArNDU5LDEwIEBACiB2b2lkIHpmY3BfZnNmX3JlcV9kaXNtaXNzX2FsbChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSwgKnRtcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCUxJU1RfSEVBRChyZW1vdmVfcXVldWUpOwotCXVuc2lnbmVkIGludCBpOwogCiAJQlVHX09OKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVApOwotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gMDsgaSA8IFJFUVVFU1RfTElTVF9TSVpFOyBpKyspCi0JCWxpc3Rfc3BsaWNlX2luaXQoJmFkYXB0ZXItPnJlcV9saXN0W2ldLCAmcmVtb3ZlX3F1ZXVlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7CisJemZjcF9yZXFsaXN0X21vdmUoYWRhcHRlci0+cmVxX2xpc3QsICZyZW1vdmVfcXVldWUpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCAmcmVtb3ZlX3F1ZXVlLCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOwpAQCAtNDk1LDggKzQ5Miw2IEBACiAJZmNfaG9zdF9wb3J0X2lkKHNob3N0KSA9IG50b2gyNChib3R0b20tPnNfaWQpOwogCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gYm90dG9tLT5mY19saW5rX3NwZWVkOwogCWZjX2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMoc2hvc3QpID0gRkNfQ09TX0NMQVNTMiB8IEZDX0NPU19DTEFTUzM7Ci0JZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhzaG9zdClbMl0gPSAxOyAvKiBGQ1AgKi8KLQlmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KVsyXSA9IDE7IC8qIEZDUCAqLwogCiAJYWRhcHRlci0+aHlkcmFfdmVyc2lvbiA9IGJvdHRvbS0+YWRhcHRlcl90eXBlOwogCWFkYXB0ZXItPnRpbWVyX3RpY2tzID0gYm90dG9tLT50aW1lcl9pbnRlcnZhbDsKQEAgLTYxOSw2ICs2MTQsMTAgQEAKIAkJZmNfaG9zdF9wZXJtYW5lbnRfcG9ydF9uYW1lKHNob3N0KSA9IGZjX2hvc3RfcG9ydF9uYW1lKHNob3N0KTsKIAlmY19ob3N0X21heGZyYW1lX3NpemUoc2hvc3QpID0gYm90dG9tLT5tYXhpbXVtX2ZyYW1lX3NpemU7CiAJZmNfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzKHNob3N0KSA9IGJvdHRvbS0+c3VwcG9ydGVkX3NwZWVkOworCW1lbWNweShmY19ob3N0X3N1cHBvcnRlZF9mYzRzKHNob3N0KSwgYm90dG9tLT5zdXBwb3J0ZWRfZmM0X3R5cGVzLAorCSAgICAgICBGQ19GQzRfTElTVF9TSVpFKTsKKwltZW1jcHkoZmNfaG9zdF9hY3RpdmVfZmM0cyhzaG9zdCksIGJvdHRvbS0+YWN0aXZlX2ZjNF90eXBlcywKKwkgICAgICAgRkNfRkM0X0xJU1RfU0laRSk7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YV9oYW5kbGVyKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKQEAgLTcyNSwxMiArNzI0LDEyIEBACiAJcmVxLT5hZGFwdGVyID0gYWRhcHRlcjsKIAlyZXEtPmZzZl9jb21tYW5kID0gZnNmX2NtZDsKIAlyZXEtPnJlcV9pZCA9IGFkYXB0ZXItPnJlcV9ubzsKLQlyZXEtPnF1ZXVlX3JlcS5zYmFsX251bWJlciA9IDE7Ci0JcmVxLT5xdWV1ZV9yZXEuc2JhbF9maXJzdCA9IHJlcV9xLT5maXJzdDsKLQlyZXEtPnF1ZXVlX3JlcS5zYmFsX2xhc3QgPSByZXFfcS0+Zmlyc3Q7Ci0JcmVxLT5xdWV1ZV9yZXEuc2JhbGVfY3VyciA9IDE7CisJcmVxLT5xZGlvX3JlcS5zYmFsX251bWJlciA9IDE7CisJcmVxLT5xZGlvX3JlcS5zYmFsX2ZpcnN0ID0gcmVxX3EtPmZpcnN0OworCXJlcS0+cWRpb19yZXEuc2JhbF9sYXN0ID0gcmVxX3EtPmZpcnN0OworCXJlcS0+cWRpb19yZXEuc2JhbGVfY3VyciA9IDE7CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmFkZHIgPSAodm9pZCAqKSByZXEtPnJlcV9pZDsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9DT01NQU5EOwogCkBAIC03NDUsNiArNzQ0LDcgQEAKIAkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCQl9CiAKKwkJcmVxLT5zZXFfbm8gPSBhZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubzsKIAkJcmVxLT5xdGNiLT5wcmVmaXgucmVxX3NlcV9ubyA9IGFkYXB0ZXItPmZzZl9yZXFfc2VxX25vOwogCQlyZXEtPnF0Y2ItPnByZWZpeC5yZXFfaWQgPSByZXEtPnJlcV9pZDsKIAkJcmVxLT5xdGNiLT5wcmVmaXgudWxwX2luZm8gPSAyNjsKQEAgLTc1Miw4ICs3NTIsNiBAQAogCQlyZXEtPnF0Y2ItPnByZWZpeC5xdGNiX3ZlcnNpb24gPSBGU0ZfUVRDQl9DVVJSRU5UX1ZFUlNJT047CiAJCXJlcS0+cXRjYi0+aGVhZGVyLnJlcV9oYW5kbGUgPSByZXEtPnJlcV9pZDsKIAkJcmVxLT5xdGNiLT5oZWFkZXIuZnNmX2NvbW1hbmQgPSByZXEtPmZzZl9jb21tYW5kOwotCQlyZXEtPnNlcV9ubyA9IGFkYXB0ZXItPmZzZl9yZXFfc2VxX25vOwotCQlyZXEtPnF0Y2ItPnByZWZpeC5yZXFfc2VxX25vID0gYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm87CiAJCXNiYWxlWzFdLmFkZHIgPSAodm9pZCAqKSByZXEtPnF0Y2I7CiAJCXNiYWxlWzFdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgZnNmX3F0Y2IpOwogCX0KQEAgLTc3MCwyNSArNzY4LDE3IEBACiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHJlcS0+YWRhcHRlcjsKIAlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gYWRhcHRlci0+cWRpbzsKLQl1bnNpZ25lZCBsb25nCSAgICAgZmxhZ3M7Ci0JaW50CQkgICAgIGlkeDsKLQlpbnQJCSAgICAgd2l0aF9xdGNiID0gKHJlcS0+cXRjYiAhPSBOVUxMKTsKKwlpbnQgd2l0aF9xdGNiID0gKHJlcS0+cXRjYiAhPSBOVUxMKTsKKwlpbnQgcmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAKLQkvKiBwdXQgYWxsb2NhdGVkIEZTRiByZXF1ZXN0IGludG8gaGFzaCB0YWJsZSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0JaWR4ID0gemZjcF9yZXFsaXN0X2hhc2gocmVxLT5yZXFfaWQpOwotCWxpc3RfYWRkX3RhaWwoJnJlcS0+bGlzdCwgJmFkYXB0ZXItPnJlcV9saXN0W2lkeF0pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKKwl6ZmNwX3JlcWxpc3RfYWRkKGFkYXB0ZXItPnJlcV9saXN0LCByZXEpOwogCi0JcmVxLT5xdWV1ZV9yZXEucWRpb19vdXRiX3VzYWdlID0gYXRvbWljX3JlYWQoJnFkaW8tPnJlcV9xLmNvdW50KTsKKwlyZXEtPnFkaW9fcmVxLnFkaW9fb3V0Yl91c2FnZSA9IGF0b21pY19yZWFkKCZxZGlvLT5yZXFfcS5jb3VudCk7CiAJcmVxLT5pc3N1ZWQgPSBnZXRfY2xvY2soKTsKLQlpZiAoemZjcF9xZGlvX3NlbmQocWRpbywgJnJlcS0+cXVldWVfcmVxKSkgeworCWlmICh6ZmNwX3FkaW9fc2VuZChxZGlvLCAmcmVxLT5xZGlvX3JlcSkpIHsKIAkJZGVsX3RpbWVyKCZyZXEtPnRpbWVyKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKIAkJLyogbG9va3VwIHJlcXVlc3QgYWdhaW4sIGxpc3QgbWlnaHQgaGF2ZSBjaGFuZ2VkICovCi0JCWlmICh6ZmNwX3JlcWxpc3RfZmluZF9zYWZlKGFkYXB0ZXIsIHJlcSkpCi0JCQl6ZmNwX3JlcWxpc3RfcmVtb3ZlKGFkYXB0ZXIsIHJlcSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKKwkJemZjcF9yZXFsaXN0X2ZpbmRfcm0oYWRhcHRlci0+cmVxX2xpc3QsIHJlcV9pZCk7CiAJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsICJmc3JzX18xIiwgcmVxKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtODI2LDkgKzgxNiw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMl0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwotCXJlcS0+cXVldWVfcmVxLnNiYWxlX2N1cnIgPSAyOworCXJlcS0+cWRpb19yZXEuc2JhbGVfY3VyciA9IDI7CiAKIAlzcl9idWYgPSBtZW1wb29sX2FsbG9jKGFkYXB0ZXItPnBvb2wuc3RhdHVzX3JlYWRfZGF0YSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFzcl9idWYpIHsKQEAgLTgzNyw3ICs4MjcsNyBAQAogCX0KIAltZW1zZXQoc3JfYnVmLCAwLCBzaXplb2YoKnNyX2J1ZikpOwogCXJlcS0+ZGF0YSA9IHNyX2J1ZjsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfY3VycihxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGUtPmFkZHIgPSAodm9pZCAqKSBzcl9idWY7CiAJc2JhbGUtPmxlbmd0aCA9IHNpemVvZigqc3JfYnVmKTsKIApAQCAtOTM0LDcgKzkyNCw3IEBACiAJCSAgICAgICBaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VEKSkpCiAJCWdvdG8gb3V0X2Vycm9yX2ZyZWU7CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTEwMjksNyArMTAxOSw3IEBACiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHJlcS0+YWRhcHRlcjsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKGFkYXB0ZXItPnFkaW8sCi0JCQkJCQkJICAgICAgICZyZXEtPnF1ZXVlX3JlcSk7CisJCQkJCQkJICAgICAgICZyZXEtPnFkaW9fcmVxKTsKIAl1MzIgZmVhdCA9IGFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXM7CiAJaW50IGJ5dGVzOwogCkBAIC0xMDQ3LDE1ICsxMDM3LDE1IEBACiAJCXJldHVybiAwOwogCX0KIAotCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coYWRhcHRlci0+cWRpbywgJnJlcS0+cXVldWVfcmVxLAorCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coYWRhcHRlci0+cWRpbywgJnJlcS0+cWRpb19yZXEsCiAJCQkJCVNCQUxfRkxBR1MwX1RZUEVfV1JJVEVfUkVBRCwKIAkJCQkJc2dfcmVxLCBtYXhfc2JhbHMpOwogCWlmIChieXRlcyA8PSAwKQogCQlyZXR1cm4gLUVJTzsKIAlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnJlcV9idWZfbGVuZ3RoID0gYnl0ZXM7Ci0JcmVxLT5xdWV1ZV9yZXEuc2JhbGVfY3VyciA9IFpGQ1BfTEFTVF9TQkFMRV9QRVJfU0JBTDsKKwlyZXEtPnFkaW9fcmVxLnNiYWxlX2N1cnIgPSBaRkNQX0xBU1RfU0JBTEVfUEVSX1NCQUw7CiAKLQlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKGFkYXB0ZXItPnFkaW8sICZyZXEtPnF1ZXVlX3JlcSwKKwlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKGFkYXB0ZXItPnFkaW8sICZyZXEtPnFkaW9fcmVxLAogCQkJCQlTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFX1JFQUQsCiAJCQkJCXNnX3Jlc3AsIG1heF9zYmFscyk7CiAJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5yZXNwX2J1Zl9sZW5ndGggPSBieXRlczsKQEAgLTEyNTEsNyArMTI0MSw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xMjYyLDEzICsxMjUyLDEzIEBACiAJCQlGU0ZfRkVBVFVSRV9VUERBVEVfQUxFUlQ7CiAJcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9leGNoYW5nZV9jb25maWdfZGF0YV9oYW5kbGVyOwotCWVycF9hY3Rpb24tPmZzZl9yZXEgPSByZXE7CisJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IHJlcS0+cmVxX2lkOwogCiAJemZjcF9mc2Zfc3RhcnRfZXJwX3RpbWVyKHJlcSk7CiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKIAlpZiAocmV0dmFsKSB7CiAJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7Ci0JCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOworCQllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gMDsKIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwpAQCAtMTI5Myw3ICsxMjgzLDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9leGNoYW5nZV9jb25maWdfZGF0YV9oYW5kbGVyOwpAQCAtMTM0OSwxOSArMTMzOSwxOSBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIAogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YV9oYW5kbGVyOwogCXJlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IHJlcTsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAKIAl6ZmNwX2ZzZl9zdGFydF9lcnBfdGltZXIocmVxKTsKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXR2YWwpIHsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CisJCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSAwOwogCX0KIG91dDoKIAlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CkBAIC0xMzk4LDcgKzEzODgsNyBAQAogCWlmIChkYXRhKQogCQlyZXEtPmRhdGEgPSBkYXRhOwogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xNDg0LDcgKzE0NzQsNyBAQAogCX0KIAogb3V0OgotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogLyoqCkBAIC0xNTEzLDcgKzE1MDMsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAgICAgICAgIHNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKICAgICAgICAgc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xNTIxLDE1ICsxNTExLDE1IEBACiAJaHRvbjI0KHJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuZF9pZCwgcG9ydC0+ZF9pZCk7CiAJcmVxLT5kYXRhID0gcG9ydDsKIAlyZXEtPmVycF9hY3Rpb24gPSBlcnBfYWN0aW9uOwotCWVycF9hY3Rpb24tPmZzZl9yZXEgPSByZXE7Ci0JZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gcmVxLT5yZXFfaWQ7CisJZ2V0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAogCXpmY3BfZnNmX3N0YXJ0X2VycF90aW1lcihyZXEpOwogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9zZW5kKHJlcSk7CiAJaWYgKHJldHZhbCkgewogCQl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwotCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IDA7CisJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJfQogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKQEAgLTE1ODMsNyArMTU3Myw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xNTkxLDEzICsxNTgxLDEzIEBACiAJcmVxLT5kYXRhID0gZXJwX2FjdGlvbi0+cG9ydDsKIAlyZXEtPmVycF9hY3Rpb24gPSBlcnBfYWN0aW9uOwogCXJlcS0+cXRjYi0+aGVhZGVyLnBvcnRfaGFuZGxlID0gZXJwX2FjdGlvbi0+cG9ydC0+aGFuZGxlOwotCWVycF9hY3Rpb24tPmZzZl9yZXEgPSByZXE7CisJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IHJlcS0+cmVxX2lkOwogCiAJemZjcF9mc2Zfc3RhcnRfZXJwX3RpbWVyKHJlcSk7CiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKIAlpZiAocmV0dmFsKSB7CiAJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7Ci0JCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOworCQllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gMDsKIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwpAQCAtMTY2MCw3ICsxNjUwLDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE3MTUsNyArMTcwNSw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xODA5LDcgKzE3OTksNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMTgxNywxMyArMTgwNywxMyBAQAogCXJlcS0+cXRjYi0+aGVhZGVyLnBvcnRfaGFuZGxlID0gZXJwX2FjdGlvbi0+cG9ydC0+aGFuZGxlOwogCXJlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247CiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2ZfY2xvc2VfcGh5c2ljYWxfcG9ydF9oYW5kbGVyOwotCWVycF9hY3Rpb24tPmZzZl9yZXEgPSByZXE7CisJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IHJlcS0+cmVxX2lkOwogCiAJemZjcF9mc2Zfc3RhcnRfZXJwX3RpbWVyKHJlcSk7CiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKIAlpZiAocmV0dmFsKSB7CiAJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7Ci0JCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOworCQllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gMDsKIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwpAQCAtMTk4Miw3ICsxOTcyLDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogICAgICAgICBzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAgICAgICAgIHNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMTk5MSw3ICsxOTgxLDcgQEAKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9vcGVuX3VuaXRfaGFuZGxlcjsKIAlyZXEtPmRhdGEgPSBlcnBfYWN0aW9uLT51bml0OwogCXJlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IHJlcTsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAKIAlpZiAoIShhZGFwdGVyLT5jb25uZWN0aW9uX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfTlBJVl9NT0RFKSkKIAkJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5vcHRpb24gPSBGU0ZfT1BFTl9MVU5fU1VQUFJFU1NfQk9YSU5HOwpAQCAtMjAwMCw3ICsxOTkwLDcgQEAKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXR2YWwpIHsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CisJCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSAwOwogCX0KIG91dDoKIAlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CkBAIC0yMDY4LDcgKzIwNTgsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMjA3NywxMyArMjA2NywxMyBAQAogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX2Nsb3NlX3VuaXRfaGFuZGxlcjsKIAlyZXEtPmRhdGEgPSBlcnBfYWN0aW9uLT51bml0OwogCXJlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IHJlcTsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAKIAl6ZmNwX2ZzZl9zdGFydF9lcnBfdGltZXIocmVxKTsKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXR2YWwpIHsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CisJCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSAwOwogCX0KIG91dDoKIAlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CkBAIC0yMTExLDggKzIxMDEsOCBAQAogCWJsa3RyYy5tYWdpYyA9IFpGQ1BfQkxLX0RSVl9EQVRBX01BR0lDOwogCWlmIChyZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUikKIAkJYmxrdHJjLmZsYWdzIHw9IFpGQ1BfQkxLX1JFUV9FUlJPUjsKLQlibGt0cmMuaW5iX3VzYWdlID0gcmVxLT5xdWV1ZV9yZXEucWRpb19pbmJfdXNhZ2U7Ci0JYmxrdHJjLm91dGJfdXNhZ2UgPSByZXEtPnF1ZXVlX3JlcS5xZGlvX291dGJfdXNhZ2U7CisJYmxrdHJjLmluYl91c2FnZSA9IHJlcS0+cWRpb19yZXEucWRpb19pbmJfdXNhZ2U7CisJYmxrdHJjLm91dGJfdXNhZ2UgPSByZXEtPnFkaW9fcmVxLnFkaW9fb3V0Yl91c2FnZTsKIAogCWlmIChyZXEtPmFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9NRUFTVVJFTUVOVF9EQVRBKSB7CiAJCWJsa3RyYy5mbGFncyB8PSBaRkNQX0JMS19MQVRfVkFMSUQ7CkBAIC0yMTY5LDEyICsyMTU5LDcgQEAKIAl6ZmNwX2ZzZl9yZXFfdHJhY2UocmVxLCBzY3BudCk7CiAKIHNraXBfZnNmc3RhdHVzOgotCWlmIChzY3BudC0+cmVzdWx0ICE9IDApCi0JCXpmY3BfZGJmX3Njc2lfcmVzdWx0KCJlcnJvIiwgMywgcmVxLT5hZGFwdGVyLT5kYmYsIHNjcG50LCByZXEpOwotCWVsc2UgaWYgKHNjcG50LT5yZXRyaWVzID4gMCkKLQkJemZjcF9kYmZfc2NzaV9yZXN1bHQoInJldHIiLCA0LCByZXEtPmFkYXB0ZXItPmRiZiwgc2NwbnQsIHJlcSk7Ci0JZWxzZQotCQl6ZmNwX2RiZl9zY3NpX3Jlc3VsdCgibm9ybSIsIDYsIHJlcS0+YWRhcHRlci0+ZGJmLCBzY3BudCwgcmVxKTsKKwl6ZmNwX2RiZl9zY3NpX3Jlc3VsdChyZXEtPmFkYXB0ZXItPmRiZiwgc2NwbnQsIHJlcSk7CiAKIAlzY3BudC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiAJKHNjcG50LT5zY3NpX2RvbmUpIChzY3BudCk7CkBAIC0yMjc0LDcgKzIyNTksNyBAQAogCWVsc2UgewogCQl6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX3Rhc2tfaGFuZGxlcihyZXEpOwogCQlyZXEtPnVuaXQgPSBOVUxMOwotCQlwdXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCQlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogCX0KIH0KIApAQCAtMjMxMiw3ICsyMjk3LDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlnZXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCWdldF9kZXZpY2UoJnVuaXQtPmRldik7CiAJcmVxLT51bml0ID0gdW5pdDsKIAlyZXEtPmRhdGEgPSBzY3NpX2NtbmQ7CiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2Zfc2VuZF9mY3BfY29tbWFuZF9oYW5kbGVyOwpAQCAtMjM0NiwxMSArMjMzMSwxMSBAQAogCWZjcF9jbW5kID0gKHN0cnVjdCBmY3BfY21uZCAqKSAmcmVxLT5xdGNiLT5ib3R0b20uaW8uZmNwX2NtbmQ7CiAJemZjcF9mY19zY3NpX3RvX2ZjcChmY3BfY21uZCwgc2NzaV9jbW5kKTsKIAotCXJlYWxfYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhxZGlvLCAmcmVxLT5xdWV1ZV9yZXEsIHNidHlwZSwKKwlyZWFsX2J5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2cocWRpbywgJnJlcS0+cWRpb19yZXEsIHNidHlwZSwKIAkJCQkJICAgICBzY3NpX3NnbGlzdChzY3NpX2NtbmQpLAogCQkJCQkgICAgIEZTRl9NQVhfU0JBTFNfUEVSX1JFUSk7CiAJaWYgKHVubGlrZWx5KHJlYWxfYnl0ZXMgPCAwKSkgewotCQlpZiAocmVxLT5xdWV1ZV9yZXEuc2JhbF9udW1iZXIgPj0gRlNGX01BWF9TQkFMU19QRVJfUkVRKSB7CisJCWlmIChyZXEtPnFkaW9fcmVxLnNiYWxfbnVtYmVyID49IEZTRl9NQVhfU0JBTFNfUEVSX1JFUSkgewogCQkJZGV2X2VycigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJCSJPdmVyc2l6ZSBkYXRhIHBhY2thZ2UsIHVuaXQgMHglMDE2THggIgogCQkJCSJvbiBwb3J0IDB4JTAxNkx4IGNsb3NlZFxuIiwKQEAgLTIzNjksNyArMjM1NCw3IEBACiAJZ290byBvdXQ7CiAKIGZhaWxlZF9zY3NpX2NtbmQ6Ci0JcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7CiAJc2NzaV9jbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKIG91dDoKQEAgLTI0MTUsNyArMjQwMCw3IEBACiAJcmVxLT5xdGNiLT5ib3R0b20uaW8uc2VydmljZV9jbGFzcyA9IEZTRl9DTEFTU18zOwogCXJlcS0+cXRjYi0+Ym90dG9tLmlvLmZjcF9jbW5kX2xlbmd0aCA9IEZDUF9DTU5EX0xFTjsKIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9XUklURTsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTI0NzgsMTQgKzI0NjMsMTQgQEAKIAogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX2NvbnRyb2xfZmlsZV9oYW5kbGVyOwogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBkaXJlY3Rpb247CiAKIAlib3R0b20gPSAmcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydDsKIAlib3R0b20tPm9wZXJhdGlvbl9zdWJ0eXBlID0gRlNGX0NGRENfT1BFUkFUSU9OX1NVQlRZUEU7CiAJYm90dG9tLT5vcHRpb24gPSBmc2ZfY2ZkYy0+b3B0aW9uOwogCi0JYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhxZGlvLCAmcmVxLT5xdWV1ZV9yZXEsCisJYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhxZGlvLCAmcmVxLT5xZGlvX3JlcSwKIAkJCQkJZGlyZWN0aW9uLCBmc2ZfY2ZkYy0+c2csCiAJCQkJCUZTRl9NQVhfU0JBTFNfUEVSX1JFUSk7CiAJaWYgKGJ5dGVzICE9IFpGQ1BfQ0ZEQ19NQVhfU0laRSkgewpAQCAtMjUxNiwxNSArMjUwMSwxNCBAQAogCXN0cnVjdCBxZGlvX2J1ZmZlciAqc2JhbCA9IHFkaW8tPnJlc3BfcS5zYmFsW3NiYWxfaWR4XTsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCByZXFfaWQ7CisJdW5zaWduZWQgbG9uZyByZXFfaWQ7CiAJaW50IGlkeDsKIAogCWZvciAoaWR4ID0gMDsgaWR4IDwgUURJT19NQVhfRUxFTUVOVFNfUEVSX0JVRkZFUjsgaWR4KyspIHsKIAogCQlzYmFsZSA9ICZzYmFsLT5lbGVtZW50W2lkeF07CiAJCXJlcV9pZCA9ICh1bnNpZ25lZCBsb25nKSBzYmFsZS0+YWRkcjsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKLQkJZnNmX3JlcSA9IHpmY3BfcmVxbGlzdF9maW5kKGFkYXB0ZXIsIHJlcV9pZCk7CisJCWZzZl9yZXEgPSB6ZmNwX3JlcWxpc3RfZmluZF9ybShhZGFwdGVyLT5yZXFfbGlzdCwgcmVxX2lkKTsKIAogCQlpZiAoIWZzZl9yZXEpCiAJCQkvKgpAQCAtMjUzNCwxMSArMjUxOCw4IEBACiAJCQlwYW5pYygiZXJyb3I6IHVua25vd24gcmVxX2lkICglbHgpIG9uIGFkYXB0ZXIgJXMuXG4iLAogCQkJICAgICAgcmVxX2lkLCBkZXZfbmFtZSgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2KSk7CiAKLQkJbGlzdF9kZWwoJmZzZl9yZXEtPmxpc3QpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0KLQkJZnNmX3JlcS0+cXVldWVfcmVxLnNiYWxfcmVzcG9uc2UgPSBzYmFsX2lkeDsKLQkJZnNmX3JlcS0+cXVldWVfcmVxLnFkaW9faW5iX3VzYWdlID0KKwkJZnNmX3JlcS0+cWRpb19yZXEuc2JhbF9yZXNwb25zZSA9IHNiYWxfaWR4OworCQlmc2ZfcmVxLT5xZGlvX3JlcS5xZGlvX2luYl91c2FnZSA9CiAJCQlhdG9taWNfcmVhZCgmcWRpby0+cmVzcF9xLmNvdW50KTsKIAkJemZjcF9mc2ZfcmVxX2NvbXBsZXRlKGZzZl9yZXEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCmluZGV4IDZjNTIyOGIuLjcxYjk3ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CiAKICNpbmNsdWRlICJ6ZmNwX2V4dC5oIgorI2luY2x1ZGUgInpmY3BfcWRpby5oIgogCiAjZGVmaW5lIFFCVUZGX1BFUl9QQUdFCQkoUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBxZGlvX2J1ZmZlcikpCiAKQEAgLTI4LDEyICsyOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqCi16ZmNwX3FkaW9fc2JhbGUoc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAqcSwgaW50IHNiYWxfaWR4LCBpbnQgc2JhbGVfaWR4KQotewotCXJldHVybiAmcS0+c2JhbFtzYmFsX2lkeF0tPmVsZW1lbnRbc2JhbGVfaWR4XTsKLX0KLQogc3RhdGljIHZvaWQgemZjcF9xZGlvX2hhbmRsZXJfZXJyb3Ioc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgY2hhciAqaWQpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHFkaW8tPmFkYXB0ZXI7CkBAIC0xMDYsNyArMTAxLDcgQEAKIAogCWlmICh1bmxpa2VseShyZXR2YWwpKSB7CiAJCWF0b21pY19zZXQoJnF1ZXVlLT5jb3VudCwgY291bnQpOwotCQkvKiBGSVhNRTogUmVjb3ZlciB0aGlzIHdpdGggYW4gYWRhcHRlciByZW9wZW4/ICovCisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHFkaW8tPmFkYXB0ZXIsIDAsICJxZHJwYl8xIiwgTlVMTCk7CiAJfSBlbHNlIHsKIAkJcXVldWUtPmZpcnN0ICs9IGNvdW50OwogCQlxdWV1ZS0+Zmlyc3QgJT0gUURJT19NQVhfQlVGRkVSU19QRVJfUTsKQEAgLTE0NSwzMiArMTQwLDggQEAKIAl6ZmNwX3FkaW9fcmVzcF9wdXRfYmFjayhxZGlvLCBjb3VudCk7CiB9CiAKLS8qKgotICogemZjcF9xZGlvX3NiYWxlX3JlcSAtIHJldHVybiBwdHIgdG8gU0JBTEUgb2YgcmVxX3EgZm9yIGEgc3RydWN0IHpmY3BfZnNmX3JlcQotICogQHFkaW86IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpbwotICogQHFfcmVjOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlYwotICogUmV0dXJuczogcG9pbnRlciB0byBxZGlvX2J1ZmZlcl9lbGVtZW50IChTQkFMRSkgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICp6ZmNwX3FkaW9fc2JhbGVfcmVxKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkJCQlzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxKQotewotCXJldHVybiB6ZmNwX3FkaW9fc2JhbGUoJnFkaW8tPnJlcV9xLCBxX3JlcS0+c2JhbF9sYXN0LCAwKTsKLX0KLQotLyoqCi0gKiB6ZmNwX3FkaW9fc2JhbGVfY3VyciAtIHJldHVybiBjdXJyIFNCQUxFIG9uIHJlcV9xIGZvciBhIHN0cnVjdCB6ZmNwX2ZzZl9yZXEKLSAqIEBmc2ZfcmVxOiBwb2ludGVyIHRvIHN0cnVjdCBmc2ZfcmVxCi0gKiBSZXR1cm5zOiBwb2ludGVyIHRvIHFkaW9fYnVmZmVyX2VsZW1lbnQgKFNCQUxFKSBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnpmY3BfcWRpb19zYmFsZV9jdXJyKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkJCQkgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSkKLXsKLQlyZXR1cm4gemZjcF9xZGlvX3NiYWxlKCZxZGlvLT5yZXFfcSwgcV9yZXEtPnNiYWxfbGFzdCwKLQkJCSAgICAgICBxX3JlcS0+c2JhbGVfY3Vycik7Ci19Ci0KIHN0YXRpYyB2b2lkIHpmY3BfcWRpb19zYmFsX2xpbWl0KHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkJIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqcV9yZXEsIGludCBtYXhfc2JhbHMpCisJCQkJIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSwgaW50IG1heF9zYmFscykKIHsKIAlpbnQgY291bnQgPSBhdG9taWNfcmVhZCgmcWRpby0+cmVxX3EuY291bnQpOwogCWNvdW50ID0gbWluKGNvdW50LCBtYXhfc2JhbHMpOwpAQCAtMTc5LDcgKzE1MCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqCi16ZmNwX3FkaW9fc2JhbF9jaGFpbihzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxLAoremZjcF9xZGlvX3NiYWxfY2hhaW4oc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgc2J0eXBlKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKQEAgLTIxNCw3ICsxODUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKgotemZjcF9xZGlvX3NiYWxlX25leHQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSwKK3pmY3BfcWRpb19zYmFsZV9uZXh0KHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSwKIAkJICAgICB1bnNpZ25lZCBpbnQgc2J0eXBlKQogewogCWlmIChxX3JlcS0+c2JhbGVfY3VyciA9PSBaRkNQX0xBU1RfU0JBTEVfUEVSX1NCQUwpCkBAIC0yMjQsNyArMTk1LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgemZjcF9xZGlvX3VuZG9fc2JhbHMoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKLQkJCQkgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSkKKwkJCQkgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlciAqKnNiYWwgPSBxZGlvLT5yZXFfcS5zYmFsOwogCWludCBmaXJzdCA9IHFfcmVxLT5zYmFsX2ZpcnN0OwpAQCAtMjM1LDcgKzIwNiw3IEBACiB9CiAKIHN0YXRpYyBpbnQgemZjcF9xZGlvX2ZpbGxfc2JhbHMoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKLQkJCQlzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxLAorCQkJCXN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSwKIAkJCQl1bnNpZ25lZCBpbnQgc2J0eXBlLCB2b2lkICpzdGFydF9hZGRyLAogCQkJCXVuc2lnbmVkIGludCB0b3RhbF9sZW5ndGgpCiB7CkBAIC0yNzEsOCArMjQyLDcgQEAKICAqIEBtYXhfc2JhbHM6IHVwcGVyIGJvdW5kIGZvciBudW1iZXIgb2YgU0JBTHMgdG8gYmUgdXNlZAogICogUmV0dXJuczogbnVtYmVyIG9mIGJ5dGVzLCBvciBlcnJvciAobmVnYXRpdikKICAqLwotaW50IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkgICAgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSwKK2ludCB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBzYnR5cGUsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCiAJCQkgICAgaW50IG1heF9zYmFscykKIHsKQEAgLTMwNCwxMCArMjc0LDEwIEBACiAvKioKICAqIHpmY3BfcWRpb19zZW5kIC0gc2V0IFBDSSBmbGFnIGluIGZpcnN0IFNCQUxFIGFuZCBzZW5kIHJlcSB0byBRRElPCiAgKiBAcWRpbzogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9xZGlvCi0gKiBAcV9yZXE6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcXVldWVfcmVxCisgKiBAcV9yZXE6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpb19yZXEKICAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgZXJyb3Igb3RoZXJ3aXNlCiAgKi8KLWludCB6ZmNwX3FkaW9fc2VuZChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxKQoraW50IHpmY3BfcWRpb19zZW5kKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSkKIHsKIAlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpyZXFfcSA9ICZxZGlvLT5yZXFfcTsKIAlpbnQgZmlyc3QgPSBxX3JlcS0+c2JhbF9maXJzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNjYTU0NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogemZjcCBkZXZpY2UgZHJpdmVyCisgKgorICogSGVhZGVyIGZpbGUgZm9yIHpmY3AgcWRpbyBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMTAKKyAqLworCisjaWZuZGVmIFpGQ1BfUURJT19ICisjZGVmaW5lIFpGQ1BfUURJT19ICisKKyNpbmNsdWRlIDxhc20vcWRpby5oPgorCisvKioKKyAqIHN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgLSBxZGlvIHF1ZXVlIGJ1ZmZlciwgemZjcCBpbmRleCBhbmQgZnJlZSBjb3VudAorICogQHNiYWw6IHFkaW8gYnVmZmVycworICogQGZpcnN0OiBpbmRleCBvZiBuZXh0IGZyZWUgYnVmZmVyIGluIHF1ZXVlCisgKiBAY291bnQ6IG51bWJlciBvZiBmcmVlIGJ1ZmZlcnMgaW4gcXVldWUKKyAqLworc3RydWN0IHpmY3BfcWRpb19xdWV1ZSB7CisJc3RydWN0IHFkaW9fYnVmZmVyICpzYmFsW1FESU9fTUFYX0JVRkZFUlNfUEVSX1FdOworCXU4CQkgICBmaXJzdDsKKwlhdG9taWNfdCAgICAgICAgICAgY291bnQ7Cit9OworCisvKioKKyAqIHN0cnVjdCB6ZmNwX3FkaW8gLSBiYXNpYyBxZGlvIGRhdGEgc3RydWN0dXJlCisgKiBAcmVzcF9xOiByZXNwb25zZSBxdWV1ZQorICogQHJlcV9xOiByZXF1ZXN0IHF1ZXVlCisgKiBAc3RhdF9sb2NrOiBsb2NrIHRvIHByb3RlY3QgcmVxX3FfdXRpbCBhbmQgcmVxX3FfdGltZQorICogQHJlcV9xX2xvY2s6IGxvY2sgdG8gc2VyaWFsaXplIGFjY2VzcyB0byByZXF1ZXN0IHF1ZXVlCisgKiBAcmVxX3FfdGltZTogdGltZSBvZiBsYXN0IGZpbGwgbGV2ZWwgY2hhbmdlCisgKiBAcmVxX3FfdXRpbDogdXNlZCBmb3IgYWNjb3VudGluZworICogQHJlcV9xX2Z1bGw6IHF1ZXVlIGZ1bGwgaW5jaWRlbnRzCisgKiBAcmVxX3Ffd3E6IHVzZWQgdG8gd2FpdCBmb3IgU0JBTCBhdmFpbGFiaWxpdHkKKyAqIEBhZGFwdGVyOiBhZGFwdGVyIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGlzIHFkaW8gc3RydWN0dXJlCisgKi8KK3N0cnVjdCB6ZmNwX3FkaW8geworCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVzcF9xOworCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVxX3E7CisJc3BpbmxvY2tfdAkJc3RhdF9sb2NrOworCXNwaW5sb2NrX3QJCXJlcV9xX2xvY2s7CisJdW5zaWduZWQgbG9uZyBsb25nCXJlcV9xX3RpbWU7CisJdTY0CQkJcmVxX3FfdXRpbDsKKwlhdG9taWNfdAkJcmVxX3FfZnVsbDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlyZXFfcV93cTsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyCSphZGFwdGVyOworfTsKKworLyoqCisgKiBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAtIHFkaW8gcXVldWUgcmVsYXRlZCB2YWx1ZXMgZm9yIGEgcmVxdWVzdAorICogQHNiYWxfbnVtYmVyOiBudW1iZXIgb2YgZnJlZSBzYmFscworICogQHNiYWxfZmlyc3Q6IGZpcnN0IHNiYWwgZm9yIHRoaXMgcmVxdWVzdAorICogQHNiYWxfbGFzdDogbGFzdCBzYmFsIGZvciB0aGlzIHJlcXVlc3QKKyAqIEBzYmFsX2xpbWl0OiBsYXN0IHBvc3NpYmxlIHNiYWwgZm9yIHRoaXMgcmVxdWVzdAorICogQHNiYWxlX2N1cnI6IGN1cnJlbnQgc2JhbGUgYXQgY3JlYXRpb24gb2YgdGhpcyByZXF1ZXN0CisgKiBAc2JhbF9yZXNwb25zZTogc2JhbCB1c2VkIGluIGludGVycnVwdAorICogQHFkaW9fb3V0Yl91c2FnZTogdXNhZ2Ugb2Ygb3V0Ym91bmQgcXVldWUKKyAqIEBxZGlvX2luYl91c2FnZTogdXNhZ2Ugb2YgaW5ib3VuZCBxdWV1ZQorICovCitzdHJ1Y3QgemZjcF9xZGlvX3JlcSB7CisJdTgJc2JhbF9udW1iZXI7CisJdTgJc2JhbF9maXJzdDsKKwl1OAlzYmFsX2xhc3Q7CisJdTgJc2JhbF9saW1pdDsKKwl1OAlzYmFsZV9jdXJyOworCXU4CXNiYWxfcmVzcG9uc2U7CisJdTE2CXFkaW9fb3V0Yl91c2FnZTsKKwl1MTYJcWRpb19pbmJfdXNhZ2U7Cit9OworCisvKioKKyAqIHpmY3BfcWRpb19zYmFsZSAtIHJldHVybiBwb2ludGVyIHRvIHNiYWxlIGluIHFkaW8gcXVldWUKKyAqIEBxOiBxdWV1ZSB3aGVyZSB0byBmaW5kIHNiYWwKKyAqIEBzYmFsX2lkeDogc2JhbCBpbmRleCBpbiBxdWV1ZQorICogQHNiYWxlX2lkeDogc2JhbGUgaW5kZXggaW4gc2JhbAorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoKK3pmY3BfcWRpb19zYmFsZShzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpxLCBpbnQgc2JhbF9pZHgsIGludCBzYmFsZV9pZHgpCit7CisJcmV0dXJuICZxLT5zYmFsW3NiYWxfaWR4XS0+ZWxlbWVudFtzYmFsZV9pZHhdOworfQorCisvKioKKyAqIHpmY3BfcWRpb19zYmFsZV9yZXEgLSByZXR1cm4gcG9pbnRlciB0byBzYmFsZSBvbiByZXFfcSBmb3IgYSByZXF1ZXN0CisgKiBAcWRpbzogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9xZGlvCisgKiBAcV9yZWM6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpb19yZXEKKyAqIFJldHVybnM6IHBvaW50ZXIgdG8gcWRpb19idWZmZXJfZWxlbWVudCAoc2JhbGUpIHN0cnVjdHVyZQorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoKK3pmY3BfcWRpb19zYmFsZV9yZXEoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxKQoreworCXJldHVybiB6ZmNwX3FkaW9fc2JhbGUoJnFkaW8tPnJlcV9xLCBxX3JlcS0+c2JhbF9sYXN0LCAwKTsKK30KKworLyoqCisgKiB6ZmNwX3FkaW9fc2JhbGVfY3VyciAtIHJldHVybiBjdXJyZW50IHNiYWxlIG9uIHJlcV9xIGZvciBhIHJlcXVlc3QKKyAqIEBxZGlvOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3FkaW8KKyAqIEBmc2ZfcmVxOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX2ZzZl9yZXEKKyAqIFJldHVybnM6IHBvaW50ZXIgdG8gcWRpb19idWZmZXJfZWxlbWVudCAoc2JhbGUpIHN0cnVjdHVyZQorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoKK3pmY3BfcWRpb19zYmFsZV9jdXJyKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSkKK3sKKwlyZXR1cm4gemZjcF9xZGlvX3NiYWxlKCZxZGlvLT5yZXFfcSwgcV9yZXEtPnNiYWxfbGFzdCwKKwkJCSAgICAgICBxX3JlcS0+c2JhbGVfY3Vycik7Cit9CisKKyNlbmRpZiAvKiBaRkNQX1FESU9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9yZXFsaXN0LmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3JlcWxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzJkMWI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9yZXFsaXN0LmgKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiB6ZmNwIGRldmljZSBkcml2ZXIKKyAqCisgKiBEYXRhIHN0cnVjdHVyZSBhbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdHJhY2tpbmcgcGVuZGluZyBGU0YKKyAqIHJlcXVlc3RzLgorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwOQorICovCisKKyNpZm5kZWYgWkZDUF9SRVFMSVNUX0gKKyNkZWZpbmUgWkZDUF9SRVFMSVNUX0gKKworLyogbnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqLworI2RlZmluZSBaRkNQX1JFUV9MSVNUX0JVQ0tFVFMgMTI4CisKKy8qKgorICogc3RydWN0IHpmY3BfcmVxbGlzdCAtIENvbnRhaW5lciBmb3IgcmVxdWVzdCBsaXN0IChyZXFsaXN0KQorICogQGxvY2s6IFNwaW5sb2NrIGZvciBwcm90ZWN0aW5nIHRoZSBoYXNoIGxpc3QKKyAqIEBsaXN0OiBBcnJheSBvZiBoYXNoYnVja2V0cywgZWFjaCBpcyBhIGxpc3Qgb2YgcmVxdWVzdHMgaW4gdGhpcyBidWNrZXQKKyAqLworc3RydWN0IHpmY3BfcmVxbGlzdCB7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgYnVja2V0c1taRkNQX1JFUV9MSVNUX0JVQ0tFVFNdOworfTsKKworc3RhdGljIGlubGluZSBpbnQgemZjcF9yZXFsaXN0X2hhc2godW5zaWduZWQgbG9uZyByZXFfaWQpCit7CisJcmV0dXJuIHJlcV9pZCAlIFpGQ1BfUkVRX0xJU1RfQlVDS0VUUzsKK30KKworLyoqCisgKiB6ZmNwX3JlcWxpc3RfYWxsb2MgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSByZXFsaXN0CisgKgorICogUmV0dXJucyBwb2ludGVyIHRvIGFsbG9jYXRlZCByZXFsaXN0IG9uIHN1Y2Nlc3MsIG9yIE5VTEwgb24KKyAqIGFsbG9jYXRpb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgemZjcF9yZXFsaXN0ICp6ZmNwX3JlcWxpc3RfYWxsb2Modm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgemZjcF9yZXFsaXN0ICpybDsKKworCXJsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHpmY3BfcmVxbGlzdCksIEdGUF9LRVJORUwpOworCWlmICghcmwpCisJCXJldHVybiBOVUxMOworCisJc3Bpbl9sb2NrX2luaXQoJnJsLT5sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBaRkNQX1JFUV9MSVNUX0JVQ0tFVFM7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJnJsLT5idWNrZXRzW2ldKTsKKworCXJldHVybiBybDsKK30KKworLyoqCisgKiB6ZmNwX3JlcWxpc3RfaXNlbXB0eSAtIENoZWNrIHdoZXRoZXIgdGhlIHJlcXVlc3QgbGlzdCBlbXB0eQorICogQHJsOiBwb2ludGVyIHRvIHJlcWxpc3QKKyAqCisgKiBSZXR1cm5zOiAxIGlmIGxpc3QgaXMgZW1wdHksIDAgaWYgbm90CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHpmY3BfcmVxbGlzdF9pc2VtcHR5KHN0cnVjdCB6ZmNwX3JlcWxpc3QgKnJsKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IFpGQ1BfUkVRX0xJU1RfQlVDS0VUUzsgaSsrKQorCQlpZiAoIWxpc3RfZW1wdHkoJnJsLT5idWNrZXRzW2ldKSkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKioKKyAqIHpmY3BfcmVxbGlzdF9mcmVlIC0gRnJlZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciByZXFsaXN0CisgKiBAcmw6IFRoZSByZXFsaXN0IHdoZXJlIHRvIGZyZWUgbWVtb3J5CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB6ZmNwX3JlcWxpc3RfZnJlZShzdHJ1Y3QgemZjcF9yZXFsaXN0ICpybCkKK3sKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlCVUdfT04oIXpmY3BfcmVxbGlzdF9pc2VtcHR5KHJsKSk7CisKKwlrZnJlZShybCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHpmY3BfZnNmX3JlcSAqCitfemZjcF9yZXFsaXN0X2ZpbmQoc3RydWN0IHpmY3BfcmVxbGlzdCAqcmwsIHVuc2lnbmVkIGxvbmcgcmVxX2lkKQoreworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWkgPSB6ZmNwX3JlcWxpc3RfaGFzaChyZXFfaWQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmcmwtPmJ1Y2tldHNbaV0sIGxpc3QpCisJCWlmIChyZXEtPnJlcV9pZCA9PSByZXFfaWQpCisJCQlyZXR1cm4gcmVxOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHpmY3BfcmVxbGlzdF9maW5kIC0gTG9va3VwIEZTRiByZXF1ZXN0IGJ5IGl0cyByZXF1ZXN0IGlkCisgKiBAcmw6IFRoZSByZXFsaXN0IHdoZXJlIHRvIGxvb2t1cCB0aGUgRlNGIHJlcXVlc3QKKyAqIEByZXFfaWQ6IFRoZSByZXF1ZXN0IGlkIHRvIGxvb2sgZm9yCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIEZTRiByZXF1ZXN0IHdpdGggdGhlIHNwZWNpZmllZCByZXF1ZXN0IGlkCisgKiBvciBOVUxMIGlmIHRoZXJlIGlzIG5vIGtub3duIEZTRiByZXF1ZXN0IHdpdGggdGhpcyBpZC4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgemZjcF9mc2ZfcmVxICoKK3pmY3BfcmVxbGlzdF9maW5kKHN0cnVjdCB6ZmNwX3JlcWxpc3QgKnJsLCB1bnNpZ25lZCBsb25nIHJlcV9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZybC0+bG9jaywgZmxhZ3MpOworCXJlcSA9IF96ZmNwX3JlcWxpc3RfZmluZChybCwgcmVxX2lkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlcTsKK30KKworLyoqCisgKiB6ZmNwX3JlcWxpc3RfZmluZF9ybSAtIExvb2t1cCByZXF1ZXN0IGJ5IGlkIGFuZCByZW1vdmUgaXQgZnJvbSByZXFsaXN0CisgKiBAcmw6IHJlcWxpc3Qgd2hlcmUgdG8gc2VhcmNoIGFuZCByZW1vdmUgZW50cnkKKyAqIEByZXFfaWQ6IFRoZSByZXF1ZXN0IGlkIG9mIHRoZSByZXF1ZXN0IHRvIGxvb2sgZm9yCisgKgorICogVGhpcyBmdW5jdGlvbnMgdHJpZXMgdG8gZmluZCB0aGUgRlNGIHJlcXVlc3Qgd2l0aCB0aGUgc3BlY2lmaWVkCisgKiBpZCBhbmQgdGhlbiByZW1vdmVzIGl0IGZyb20gdGhlIHJlcWxpc3QuIFRoZSByZXFsaXN0IGxvY2sgaXMgaGVsZAorICogZHVyaW5nIGJvdGggc3RlcHMgb2YgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBQb2ludGVyIHRvIHRoZSBGU0YgcmVxdWVzdCBpZiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBmb3VuZCwKKyAqIE5VTEwgaWYgaXQgaGFzIG5vdCBiZWVuIGZvdW5kLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKgoremZjcF9yZXFsaXN0X2ZpbmRfcm0oc3RydWN0IHpmY3BfcmVxbGlzdCAqcmwsIHVuc2lnbmVkIGxvbmcgcmVxX2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJsLT5sb2NrLCBmbGFncyk7CisJcmVxID0gX3pmY3BfcmVxbGlzdF9maW5kKHJsLCByZXFfaWQpOworCWlmIChyZXEpCisJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJsLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVxOworfQorCisvKioKKyAqIHpmY3BfcmVxbGlzdF9hZGQgLSBBZGQgZW50cnkgdG8gcmVxbGlzdAorICogQHJsOiByZXFsaXN0IHdoZXJlIHRvIGFkZCB0aGUgZW50cnkKKyAqIEByZXE6IFRoZSBlbnRyeSB0byBhZGQKKyAqCisgKiBUaGUgcmVxdWVzdCBpZCBhbHdheXMgaW5jcmVhc2VzLiBBcyBhbiBvcHRpbWl6YXRpb24gbmV3IHJlcXVlc3RzCisgKiBhcmUgYWRkZWQgaGVyZSB3aXRoIGxpc3RfYWRkX3RhaWwgYXQgdGhlIGVuZCBvZiB0aGUgYnVja2V0IGxpc3RzCisgKiB3aGlsZSBvbGQgcmVxdWVzdHMgYXJlIGxvb2tlZCB1cCBzdGFydGluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICogbGlzdHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB6ZmNwX3JlcWxpc3RfYWRkKHN0cnVjdCB6ZmNwX3JlcWxpc3QgKnJsLAorCQkJCSAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWkgPSB6ZmNwX3JlcWxpc3RfaGFzaChyZXEtPnJlcV9pZCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmwtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZyZXEtPmxpc3QsICZybC0+YnVja2V0c1tpXSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmwtPmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiB6ZmNwX3JlcWxpc3RfbW92ZSAtIE1vdmUgYWxsIGVudHJpZXMgZnJvbSByZXFsaXN0IHRvIHNpbXBsZSBsaXN0CisgKiBAcmw6IFRoZSB6ZmNwX3JlcWxpc3Qgd2hlcmUgdG8gcmVtb3ZlIGFsbCBlbnRyaWVzCisgKiBAbGlzdDogVGhlIGxpc3Qgd2hlcmUgdG8gbW92ZSBhbGwgZW50cmllcworICovCitzdGF0aWMgaW5saW5lIHZvaWQgemZjcF9yZXFsaXN0X21vdmUoc3RydWN0IHpmY3BfcmVxbGlzdCAqcmwsCisJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmwtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgWkZDUF9SRVFfTElTVF9CVUNLRVRTOyBpKyspCisJCWxpc3Rfc3BsaWNlX2luaXQoJnJsLT5idWNrZXRzW2ldLCBsaXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybC0+bG9jaywgZmxhZ3MpOworfQorCisjZW5kaWYgLyogWkZDUF9SRVFMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKaW5kZXggOGU2ZmM2OC4uYzNjNDE3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogSW50ZXJmYWNlIHRvIExpbnV4IFNDU0kgbWlkbGF5ZXIuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMTAKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgInpmY3BfZXh0LmgiCiAjaW5jbHVkZSAiemZjcF9kYmYuaCIKICNpbmNsdWRlICJ6ZmNwX2ZjLmgiCisjaW5jbHVkZSAiemZjcF9yZXFsaXN0LmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9kZXB0aCA9IDMyOwogbW9kdWxlX3BhcmFtX25hbWVkKHF1ZXVlX2RlcHRoLCBkZWZhdWx0X2RlcHRoLCB1aW50LCAwNjAwKTsKQEAgLTQzLDcgKzQ0LDcgQEAKIHsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQgKikgc2RwbnQtPmhvc3RkYXRhOwogCXVuaXQtPmRldmljZSA9IE5VTEw7Ci0JcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHpmY3Bfc2NzaV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZHApCkBAIC01OSwxMCArNjAsOSBAQAogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPQogCQkoc3RydWN0IHpmY3BfYWRhcHRlciAqKSBzY3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKKwogCXNldF9ob3N0X2J5dGUoc2NwbnQsIHJlc3VsdCk7Ci0JaWYgKChzY3BudC0+ZGV2aWNlICE9IE5VTEwpICYmIChzY3BudC0+ZGV2aWNlLT5ob3N0ICE9IE5VTEwpKQotCQl6ZmNwX2RiZl9zY3NpX3Jlc3VsdCgiZmFpbCIsIDQsIGFkYXB0ZXItPmRiZiwgc2NwbnQsIE5VTEwpOwotCS8qIHJldHVybiBkaXJlY3RseSAqLworCXpmY3BfZGJmX3Njc2lfZmFpbF9zZW5kKGFkYXB0ZXItPmRiZiwgc2NwbnQpOwogCXNjcG50LT5zY3NpX2RvbmUoc2NwbnQpOwogfQogCkBAIC04NiwxOCArODYsMTAgQEAKIAlhZGFwdGVyID0gKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgc2NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CiAJdW5pdCA9IHNjcG50LT5kZXZpY2UtPmhvc3RkYXRhOwogCi0JQlVHX09OKCFhZGFwdGVyIHx8IChhZGFwdGVyICE9IHVuaXQtPnBvcnQtPmFkYXB0ZXIpKTsKLQlCVUdfT04oIXNjcG50LT5zY3NpX2RvbmUpOwotCi0JaWYgKHVubGlrZWx5KCF1bml0KSkgewotCQl6ZmNwX3Njc2lfY29tbWFuZF9mYWlsKHNjcG50LCBESURfTk9fQ09OTkVDVCk7Ci0JCXJldHVybiAwOwotCX0KLQogCXNjc2lfcmVzdWx0ID0gZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpOwogCWlmICh1bmxpa2VseShzY3NpX3Jlc3VsdCkpIHsKIAkJc2NwbnQtPnJlc3VsdCA9IHNjc2lfcmVzdWx0OwotCQl6ZmNwX2RiZl9zY3NpX3Jlc3VsdCgiZmFpbCIsIDQsIGFkYXB0ZXItPmRiZiwgc2NwbnQsIE5VTEwpOworCQl6ZmNwX2RiZl9zY3NpX2ZhaWxfc2VuZChhZGFwdGVyLT5kYmYsIHNjcG50KTsKIAkJc2NwbnQtPnNjc2lfZG9uZShzY3BudCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTE4OSw5ICsxODEsNyBAQAogCS8qIGF2b2lkIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gbGF0ZSBub3JtYWwgY29tcGxldGlvbiBhbmQgYWJvcnQgKi8KIAl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFib3J0X2xvY2ssIGZsYWdzKTsKIAotCXNwaW5fbG9jaygmYWRhcHRlci0+cmVxX2xpc3RfbG9jayk7Ci0Jb2xkX3JlcSA9IHpmY3BfcmVxbGlzdF9maW5kKGFkYXB0ZXIsIG9sZF9yZXFpZCk7Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOworCW9sZF9yZXEgPSB6ZmNwX3JlcWxpc3RfZmluZChhZGFwdGVyLT5yZXFfbGlzdCwgb2xkX3JlcWlkKTsKIAlpZiAoIW9sZF9yZXEpIHsKIAkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFib3J0X2xvY2ssIGZsYWdzKTsKIAkJemZjcF9kYmZfc2NzaV9hYm9ydCgibHRlMSIsIGFkYXB0ZXItPmRiZiwgc2NwbnQsIE5VTEwsCkBAIC01MjEsNyArNTExLDcgQEAKIAogCWlmIChwb3J0KSB7CiAJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsICJzY3RycGkxIiwgTlVMTCk7Ci0JCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJfQogfQogCkBAIC01NjMsMjMgKzU1MywyMyBAQAogCiB2b2lkIHpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydF9yZWdpc3RlcihzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewotCWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJZ2V0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAlwb3J0LT5ycG9ydF90YXNrID0gUlBPUlRfQUREOwogCiAJaWYgKCFxdWV1ZV93b3JrKHBvcnQtPmFkYXB0ZXItPndvcmtfcXVldWUsICZwb3J0LT5ycG9ydF93b3JrKSkKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogdm9pZCB6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRfYmxvY2soc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKIHsKLQlnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCWdldF9kZXZpY2UoJnBvcnQtPmRldik7CiAJcG9ydC0+cnBvcnRfdGFzayA9IFJQT1JUX0RFTDsKIAogCWlmIChwb3J0LT5ycG9ydCAmJiBxdWV1ZV93b3JrKHBvcnQtPmFkYXB0ZXItPndvcmtfcXVldWUsCiAJCQkJICAgICAgJnBvcnQtPnJwb3J0X3dvcmspKQogCQlyZXR1cm47CiAKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiB9CiAKIHZvaWQgemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0c19ibG9jayhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQpAQCAtNjA4LDcgKzU5OCw3IEBACiAJCX0KIAl9CiAKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiB9CiAKIApAQCAtNjI2LDcgKzYxNiw3IEBACiAJCQkJIHNjc2lsdW5fdG9faW50KChzdHJ1Y3Qgc2NzaV9sdW4gKikKIAkJCQkJCSZ1bml0LT5mY3BfbHVuKSwgMCk7CiAKLQlwdXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiB9CiAKIHN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSB6ZmNwX3RyYW5zcG9ydF9mdW5jdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKaW5kZXggZjUzOWUwMC4uYTQzMDM1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBzeXNmcyBhdHRyaWJ1dGVzLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwOCwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA4LCAyMDEwCiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiemZjcCIKQEAgLTE5LDggKzE5LDcgQEAKIAkJCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdCxcCiAJCQkJCQkgICBjaGFyICpidWYpCQkgICAgICAgXAogewkJCQkJCQkJCSAgICAgICBcCi0Jc3RydWN0IF9mZWF0X2RlZiAqX2ZlYXQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgX2ZlYXRfZGVmLAkgICAgICAgXAotCQkJCQkgICAgICAgc3lzZnNfZGV2aWNlKTsJCSAgICAgICBcCisJc3RydWN0IF9mZWF0X2RlZiAqX2ZlYXQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgX2ZlYXRfZGVmLCBkZXYpOyAgICBcCiAJCQkJCQkJCQkgICAgICAgXAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgX2Zvcm1hdCwgX3ZhbHVlKTsJCQkJICAgICAgIFwKIH0JCQkJCQkJCQkgICAgICAgXApAQCAtODcsOCArODYsNyBAQAogCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKIAkJCQkJCWNoYXIgKmJ1ZikJCSAgICAgICBcCiB7CQkJCQkJCQkJICAgICAgIFwKLQlzdHJ1Y3QgX2ZlYXRfZGVmICpfZmVhdCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBfZmVhdF9kZWYsCSAgICAgICBcCi0JCQkJCSAgICAgICBzeXNmc19kZXZpY2UpOwkJICAgICAgIFwKKwlzdHJ1Y3QgX2ZlYXRfZGVmICpfZmVhdCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBfZmVhdF9kZWYsIGRldik7ICAgIFwKIAkJCQkJCQkJCSAgICAgICBcCiAJaWYgKGF0b21pY19yZWFkKCZfZmVhdC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKSAgICAgICBcCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjFcbiIpOwkJCQkgICAgICAgXApAQCAtOTksMTIgKzk3LDExIEBACiAJCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXAogCQkJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVwKIHsJCQkJCQkJCQkgICAgICAgXAotCXN0cnVjdCBfZmVhdF9kZWYgKl9mZWF0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IF9mZWF0X2RlZiwJICAgICAgIFwKLQkJCQkJICAgICAgIHN5c2ZzX2RldmljZSk7CQkgICAgICAgXAorCXN0cnVjdCBfZmVhdF9kZWYgKl9mZWF0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IF9mZWF0X2RlZiwgZGV2KTsgICAgXAogCXVuc2lnbmVkIGxvbmcgdmFsOwkJCQkJCSAgICAgICBcCiAJaW50IHJldHZhbCA9IDA7CQkJCQkJCSAgICAgICBcCiAJCQkJCQkJCQkgICAgICAgXAotCWlmICghKF9mZWF0ICYmIGdldF9kZXZpY2UoJl9mZWF0LT5zeXNmc19kZXZpY2UpKSkJCSAgICAgICBcCisJaWYgKCEoX2ZlYXQgJiYgZ2V0X2RldmljZSgmX2ZlYXQtPmRldikpKQkJCSAgICAgICBcCiAJCXJldHVybiAtRUJVU1k7CQkJCQkJICAgICAgIFwKIAkJCQkJCQkJCSAgICAgICBcCiAJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCkgfHwgdmFsICE9IDApIHsJCQkgICAgICAgXApAQCAtMTE4LDcgKzExNSw3IEBACiAJCQkJICBfcmVvcGVuX2lkLCBOVUxMKTsJCQkgICAgICAgXAogCXpmY3BfZXJwX3dhaXQoX2FkYXB0ZXIpOwkJCQkJICAgICAgIFwKIG91dDoJCQkJCQkJCQkgICAgICAgXAotCXB1dF9kZXZpY2UoJl9mZWF0LT5zeXNmc19kZXZpY2UpOwkJCQkgICAgICAgXAorCXB1dF9kZXZpY2UoJl9mZWF0LT5kZXYpOwkJCQkJICAgICAgIFwKIAlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogKHNzaXplX3QpIGNvdW50OwkJCSAgICAgICBcCiB9CQkJCQkJCQkJICAgICAgIFwKIHN0YXRpYyBaRkNQX0RFVl9BVFRSKF9mZWF0LCBmYWlsZWQsIFNfSVdVU1IgfCBTX0lSVUdPLAkJCSAgICAgICBcCkBAIC0yMjQsMTAgKzIyMSwxMCBAQAogCWxpc3RfZGVsKCZwb3J0LT5saXN0KTsKIAl3cml0ZV91bmxvY2tfaXJxKCZhZGFwdGVyLT5wb3J0X2xpc3RfbG9jayk7CiAKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAKIAl6ZmNwX2VycF9wb3J0X3NodXRkb3duKHBvcnQsIDAsICJzeXByc18xIiwgTlVMTCk7Ci0JemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+c3lzZnNfZGV2aWNlLCAmemZjcF9zeXNmc19wb3J0X2F0dHJzKTsKKwl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5kZXYsICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpOwogIG91dDoKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChhZGFwdGVyKTsKIAlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogKHNzaXplX3QpIGNvdW50OwpAQCAtMjU4LDEzICsyNTUsMTIgQEAKIAkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB6ZmNwX3BvcnQsCi0JCQkJCSAgICAgIHN5c2ZzX2RldmljZSk7CisJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB6ZmNwX3BvcnQsIGRldik7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAl1NjQgZmNwX2x1bjsKIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsKIAotCWlmICghKHBvcnQgJiYgZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKSkpCisJaWYgKCEocG9ydCAmJiBnZXRfZGV2aWNlKCZwb3J0LT5kZXYpKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmIChzdHJpY3Rfc3RydG91bGwoYnVmLCAwLCAodW5zaWduZWQgbG9uZyBsb25nICopICZmY3BfbHVuKSkKQEAgLTI4MCw3ICsyNzYsNyBAQAogCXpmY3BfZXJwX3dhaXQodW5pdC0+cG9ydC0+YWRhcHRlcik7CiAJZmx1c2hfd29yaygmdW5pdC0+c2NzaV93b3JrKTsKIG91dDoKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IChzc2l6ZV90KSBjb3VudDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUih1bml0X2FkZCwgU19JV1VTUiwgTlVMTCwgemZjcF9zeXNmc191bml0X2FkZF9zdG9yZSk7CkBAIC0yODksMTMgKzI4NSwxMiBAQAogCQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfcG9ydCwKLQkJCQkJICAgICAgc3lzZnNfZGV2aWNlKTsKKwlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfcG9ydCwgZGV2KTsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwogCXU2NCBmY3BfbHVuOwogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCi0JaWYgKCEocG9ydCAmJiBnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpKSkKKwlpZiAoIShwb3J0ICYmIGdldF9kZXZpY2UoJnBvcnQtPmRldikpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKHN0cmljdF9zdHJ0b3VsbChidWYsIDAsICh1bnNpZ25lZCBsb25nIGxvbmcgKikgJmZjcF9sdW4pKQpAQCAtMzE0LDEyICszMDksMTIgQEAKIAlsaXN0X2RlbCgmdW5pdC0+bGlzdCk7CiAJd3JpdGVfdW5sb2NrX2lycSgmcG9ydC0+dW5pdF9saXN0X2xvY2spOwogCi0JcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogCiAJemZjcF9lcnBfdW5pdF9zaHV0ZG93bih1bml0LCAwLCAic3l1cnNfMSIsIE5VTEwpOwotCXpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoJnVuaXQtPnN5c2ZzX2RldmljZSwgJnpmY3Bfc3lzZnNfdW5pdF9hdHRycyk7CisJemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmdW5pdC0+ZGV2LCAmemZjcF9zeXNmc191bml0X2F0dHJzKTsKIG91dDoKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IChzc2l6ZV90KSBjb3VudDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUih1bml0X3JlbW92ZSwgU19JV1VTUiwgTlVMTCwgemZjcF9zeXNmc191bml0X3JlbW92ZV9zdG9yZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jIGIvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYwppbmRleCA3NWFjMTliLi5mYzJmNjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogCiAJcGggPSAwOwogCWlmIChkcCkKLQkJcGggPSBkcC0+bm9kZTsKKwkJcGggPSBkcC0+cGhhbmRsZTsKIAogCWRhdGEtPmN1cnJlbnRfbm9kZSA9IGRwOwogCSooKGludCAqKSBvcC0+b3Byb21fYXJyYXkpID0gcGg7CkBAIC0yNTYsNyArMjU2LDcgQEAKIAogCQlkcCA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShwZGV2KTsKIAkJZGF0YS0+Y3VycmVudF9ub2RlID0gZHA7Ci0JCSooKGludCAqKW9wLT5vcHJvbV9hcnJheSkgPSBkcC0+bm9kZTsKKwkJKigoaW50ICopb3AtPm9wcm9tX2FycmF5KSA9IGRwLT5waGFuZGxlOwogCQlvcC0+b3Byb21fc2l6ZSA9IHNpemVvZihpbnQpOwogCQllcnIgPSBjb3B5b3V0KGFyZ3AsIG9wLCBidWZzaXplICsgc2l6ZW9mKGludCkpOwogCkBAIC0yNzMsNyArMjczLDcgQEAKIAogCWRwID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgob3AtPm9wcm9tX2FycmF5KTsKIAlpZiAoZHApCi0JCXBoID0gZHAtPm5vZGU7CisJCXBoID0gZHAtPnBoYW5kbGU7CiAJZGF0YS0+Y3VycmVudF9ub2RlID0gZHA7CiAJKigoaW50ICopb3AtPm9wcm9tX2FycmF5KSA9IHBoOwogCW9wLT5vcHJvbV9zaXplID0gc2l6ZW9mKGludCk7CkBAIC01NDAsNyArNTQwLDcgQEAKIAkJfQogCX0KIAlpZiAoZHApCi0JCW5kID0gZHAtPm5vZGU7CisJCW5kID0gZHAtPnBoYW5kbGU7CiAJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmbmQsIHNpemVvZihwaGFuZGxlKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCkBAIC01NzAsNyArNTcwLDcgQEAKIAljYXNlIE9QSU9DR0VUT1BUTk9ERToKIAkJQlVJTERfQlVHX09OKHNpemVvZihwaGFuZGxlKSAhPSBzaXplb2YoaW50KSk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmb3B0aW9uc19ub2RlLT5ub2RlLCBzaXplb2YocGhhbmRsZSkpKQorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZvcHRpb25zX25vZGUtPnBoYW5kbGUsIHNpemVvZihwaGFuZGxlKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMgYi9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jCmluZGV4IGI4OThkMzguLmU0MGNkZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMKKysrIGIvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYwpAQCAtMzkyNCw3ICszOTI0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gKmN1cnJUYXJfSW5mbzsKIAotCWlmICgocF9zY2NiLT5UYXJnSUQgPiBNQVhfU0NTSV9UQVIpIHx8IChwX3NjY2ItPkx1biA+IE1BWF9MVU4pKSB7CisJaWYgKChwX3NjY2ItPlRhcmdJRCA+PSBNQVhfU0NTSV9UQVIpIHx8IChwX3NjY2ItPkx1biA+PSBNQVhfTFVOKSkgewogCQlyZXR1cm47CiAJfQogCWN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW3Bfc2NjYi0+VGFyZ0lEXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vZmFzMjE2LmMgYi9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5jCmluZGV4IDQ3NzU0MjYuLjllNzFhYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vZmFzMjE2LmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuYwpAQCAtMjUxNiw3ICsyNTE2LDcgQEAKIAkJaWYgKGluZm8tPnNjc2kucGhhc2UgPT0gUEhBU0VfSURMRSkKIAkJCWZhczIxNl9raWNrKGluZm8pOwogCi0JCW1vZF90aW1lcigmaW5mby0+ZWhfdGltZXIsIDMwICogSFopOworCQltb2RfdGltZXIoJmluZm8tPmVoX3RpbWVyLCBqaWZmaWVzICsgMzAgKiBIWik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZS5oCmluZGV4IGE5M2E1MDQuLjEzNmI0OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZS5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNCw2ICsyNCwxMCBAQAogI2RlZmluZSBGV19WRVJfTEVOCTMyCiAjZGVmaW5lIE1DQ19RX0xFTgkxMjgKICNkZWZpbmUgTUNDX0NRX0xFTgkyNTYKKyNkZWZpbmUgTUFYX01DQ19DTUQJMTYKKy8qIEJsYWRlRW5naW5lIEdlbmVyYXRpb24gbnVtYmVycyAqLworI2RlZmluZSBCRV9HRU4yIDIKKyNkZWZpbmUgQkVfR0VOMyAzCiAKIHN0cnVjdCBiZV9kbWFfbWVtIHsKIAl2b2lkICp2YTsKQEAgLTU3LDYgKzYxLDExIEBACiAJcmV0dXJuIHEtPmRtYV9tZW0udmEgKyBxLT5oZWFkICogcS0+ZW50cnlfc2l6ZTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkICpxdWV1ZV9nZXRfd3JiKHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxLCB1bnNpZ25lZCBpbnQgd3JiX251bSkKK3sKKwlyZXR1cm4gcS0+ZG1hX21lbS52YSArIHdyYl9udW0gKiBxLT5lbnRyeV9zaXplOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgKnF1ZXVlX3RhaWxfbm9kZShzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSkKIHsKIAlyZXR1cm4gcS0+ZG1hX21lbS52YSArIHEtPnRhaWwgKiBxLT5lbnRyeV9zaXplOwpAQCAtMTA0LDE1ICsxMTMsMTkgQEAKIAlzcGlubG9ja190IG1jY19sb2NrOwkvKiBGb3Igc2VyaWFsaXppbmcgbWNjIGNtZHMgdG8gQkUgY2FyZCAqLwogCXNwaW5sb2NrX3QgbWNjX2NxX2xvY2s7CiAKLQkvKiBNQ0MgQXN5bmMgY2FsbGJhY2sgKi8KLQl2b2lkICgqYXN5bmNfY2IpICh2b2lkICphZGFwdGVyLCBib29sIGxpbmtfdXApOwotCXZvaWQgKmFkYXB0ZXJfY3R4dDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBtY2Nfd2FpdFtNQVhfTUNDX0NNRCArIDFdOworCXVuc2lnbmVkIGludCBtY2NfdGFnW01BWF9NQ0NfQ01EXTsKKwl1bnNpZ25lZCBpbnQgbWNjX251bXRhZ1tNQVhfTUNDX0NNRCArIDFdOworCXVuc2lnbmVkIHNob3J0IG1jY19hbGxvY19pbmRleDsKKwl1bnNpZ25lZCBzaG9ydCBtY2NfZnJlZV9pbmRleDsKKwl1bnNpZ25lZCBpbnQgbWNjX3RhZ19hdmFpbGFibGU7CiB9OwogCiAjaW5jbHVkZSAiYmVfY21kcy5oIgogCiAjZGVmaW5lIFBBR0VfU0hJRlRfNEsgMTIKICNkZWZpbmUgUEFHRV9TSVpFXzRLICgxIDw8IFBBR0VfU0hJRlRfNEspCisjZGVmaW5lIG1jY190aW1lb3V0CQkxMjAwMDAgLyogNXMgdGltZW91dCAqLwogCiAvKiBSZXR1cm5zIG51bWJlciBvZiBwYWdlcyBzcGFubmVkIGJ5IHRoZSBkYXRhIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBhZGRyICovCiAjZGVmaW5lIFBBR0VTXzRLX1NQQU5ORUQoX2FkZHJlc3MsIHNpemUpIAkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYwppbmRleCBmMDA4NzA4Li42NzA5ODU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlICJiZV9tZ210LmgiCiAjaW5jbHVkZSAiYmVfbWFpbi5oIgogCi1zdGF0aWMgdm9pZCBiZV9tY2Nfbm90aWZ5KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3ZvaWQgYmVfbWNjX25vdGlmeShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCiB7CiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gKm1jY3EgPSAmcGhiYS0+Y3RybC5tY2Nfb2JqLnE7CiAJdTMyIHZhbCA9IDA7CkBAIC0yOSw2ICsyOSw1MiBAQAogCWlvd3JpdGUzMih2YWwsIHBoYmEtPmRiX3ZhICsgREJfTUNDUV9PRkZTRVQpOwogfQogCit1bnNpZ25lZCBpbnQgYWxsb2NfbWNjX3RhZyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJdW5zaWduZWQgaW50IHRhZyA9IDA7CisJdW5zaWduZWQgaW50IG51bSA9IDA7CisKK21jY190YWdfcmR5OgorCWlmIChwaGJhLT5jdHJsLm1jY190YWdfYXZhaWxhYmxlKSB7CisJCXRhZyA9IHBoYmEtPmN0cmwubWNjX3RhZ1twaGJhLT5jdHJsLm1jY19hbGxvY19pbmRleF07CisJCXBoYmEtPmN0cmwubWNjX3RhZ1twaGJhLT5jdHJsLm1jY19hbGxvY19pbmRleF0gPSAwOworCQlwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSA9IDA7CisJfSBlbHNlIHsKKwkJdWRlbGF5KDEwMCk7CisJCW51bSsrOworCQlpZiAobnVtIDwgbWNjX3RpbWVvdXQpCisJCQlnb3RvIG1jY190YWdfcmR5OworCX0KKwlpZiAodGFnKSB7CisJCXBoYmEtPmN0cmwubWNjX3RhZ19hdmFpbGFibGUtLTsKKwkJaWYgKHBoYmEtPmN0cmwubWNjX2FsbG9jX2luZGV4ID09IChNQVhfTUNDX0NNRCAtIDEpKQorCQkJcGhiYS0+Y3RybC5tY2NfYWxsb2NfaW5kZXggPSAwOworCQllbHNlCisJCQlwaGJhLT5jdHJsLm1jY19hbGxvY19pbmRleCsrOworCX0KKwlyZXR1cm4gdGFnOworfQorCit2b2lkIGZyZWVfbWNjX3RhZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1bnNpZ25lZCBpbnQgdGFnKQoreworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwl0YWcgPSB0YWcgJiAweDAwMDAwMEZGOworCWN0cmwtPm1jY190YWdbY3RybC0+bWNjX2ZyZWVfaW5kZXhdID0gdGFnOworCWlmIChjdHJsLT5tY2NfZnJlZV9pbmRleCA9PSAoTUFYX01DQ19DTUQgLSAxKSkKKwkJY3RybC0+bWNjX2ZyZWVfaW5kZXggPSAwOworCWVsc2UKKwkJY3RybC0+bWNjX2ZyZWVfaW5kZXgrKzsKKwljdHJsLT5tY2NfdGFnX2F2YWlsYWJsZSsrOworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworfQorCitib29sIGlzX2xpbmtfc3RhdGVfZXZ0KHUzMiB0cmFpbGVyKQoreworCXJldHVybiAoKCh0cmFpbGVyID4+IEFTWU5DX1RSQUlMRVJfRVZFTlRfQ09ERV9TSElGVCkgJgorCQkgIEFTWU5DX1RSQUlMRVJfRVZFTlRfQ09ERV9NQVNLKSA9PQorCQkgIEFTWU5DX0VWRU5UX0NPREVfTElOS19TVEFURSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBiZV9tY2NfY29tcGxfaXNfbmV3KHN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsKQogewogCWlmIChjb21wbC0+ZmxhZ3MgIT0gMCkgewpAQCAtNjQsMTIgKzExMCwzMCBAQAogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19saW5rX3N0YXRlX2V2dCh1MzIgdHJhaWxlcikKK2ludCBiZV9tY2NfY29tcGxfcHJvY2Vzc19pc3Ioc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQkgICAgc3RydWN0IGJlX21jY19jb21wbCAqY29tcGwpCiB7Ci0JcmV0dXJuICgoKHRyYWlsZXIgPj4gQVNZTkNfVFJBSUxFUl9FVkVOVF9DT0RFX1NISUZUKSAmCi0JCSAgQVNZTkNfVFJBSUxFUl9FVkVOVF9DT0RFX01BU0spID09Ci0JCSAgQVNZTkNfRVZFTlRfQ09ERV9MSU5LX1NUQVRFKTsKKwl1MTYgY29tcGxfc3RhdHVzLCBleHRkX3N0YXR1czsKKwl1bnNpZ25lZCBzaG9ydCB0YWc7CisKKwliZV9kd3NfbGVfdG9fY3B1KGNvbXBsLCA0KTsKKworCWNvbXBsX3N0YXR1cyA9IChjb21wbC0+c3RhdHVzID4+IENRRV9TVEFUVVNfQ09NUExfU0hJRlQpICYKKwkJCQkJQ1FFX1NUQVRVU19DT01QTF9NQVNLOworCS8qIFRoZSBjdHJsLm1jY19udW10YWdbdGFnXSBpcyBmaWxsZWQgd2l0aAorCSAqIFszMV0gPSB2YWxpZCwgWzMwOjI0XSA9IFJzdmQsIFsyMzoxNl0gPSB3cmIsIFsxNTo4XSA9IGV4dGRfc3RhdHVzLAorCSAqIFs3OjBdID0gY29tcGxfc3RhdHVzCisJICovCisJdGFnID0gKGNvbXBsLT50YWcwICYgMHgwMDAwMDBGRik7CisJZXh0ZF9zdGF0dXMgPSAoY29tcGwtPnN0YXR1cyA+PiBDUUVfU1RBVFVTX0VYVERfU0hJRlQpICYKKwkJCQkJQ1FFX1NUQVRVU19FWFREX01BU0s7CisKKwljdHJsLT5tY2NfbnVtdGFnW3RhZ10gID0gMHg4MDAwMDAwMDsKKwljdHJsLT5tY2NfbnVtdGFnW3RhZ10gfD0gKGNvbXBsLT50YWcwICYgMHgwMEZGMDAwMCk7CisJY3RybC0+bWNjX251bXRhZ1t0YWddIHw9IChleHRkX3N0YXR1cyAmIDB4MDAwMDAwRkYpIDw8IDg7CisJY3RybC0+bWNjX251bXRhZ1t0YWddIHw9IChjb21wbF9zdGF0dXMgJiAweDAwMDAwMEZGKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmN0cmwtPm1jY193YWl0W3RhZ10pOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGJlX21jY19jb21wbCAqYmVfbWNjX2NvbXBsX2dldChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCkBAIC04OSw3ICsxNTMsNyBAQAogCWlzY3NpX3Nlc3Npb25fZmFpbHVyZShjbHNfc2Vzc2lvbi0+ZGRfZGF0YSwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKIH0KIAotc3RhdGljIHZvaWQgYmVpc2NzaV9hc3luY19saW5rX3N0YXRlX3Byb2Nlc3Moc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAordm9pZCBiZWlzY3NpX2FzeW5jX2xpbmtfc3RhdGVfcHJvY2VzcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCiAJCXN0cnVjdCBiZV9hc3luY19ldmVudF9saW5rX3N0YXRlICpldnQpCiB7CiAJc3dpdGNoIChldnQtPnBvcnRfbGlua19zdGF0dXMpIHsKQEAgLTk3LDEzICsxNjEsMTMgQEAKIAkJU0VfREVCVUcoREJHX0xWTF8xLCAiTGluayBEb3duIG9uIFBoeXNpY2FsIFBvcnQgJWQgXG4iLAogCQkJCQkJZXZ0LT5waHlzaWNhbF9wb3J0KTsKIAkJcGhiYS0+c3RhdGUgfD0gQkVfQURBUFRFUl9MSU5LX0RPV047CisJCWlzY3NpX2hvc3RfZm9yX2VhY2hfc2Vzc2lvbihwaGJhLT5zaG9zdCwKKwkJCQkJICAgIGJlMmlzY3NpX2ZhaWxfc2Vzc2lvbik7CiAJCWJyZWFrOwogCWNhc2UgQVNZTkNfRVZFTlRfTElOS19VUDoKIAkJcGhiYS0+c3RhdGUgPSBCRV9BREFQVEVSX1VQOwogCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJMaW5rIFVQIG9uIFBoeXNpY2FsIFBvcnQgJWQgXG4iLAogCQkJCQkJZXZ0LT5waHlzaWNhbF9wb3J0KTsKLQkJaXNjc2lfaG9zdF9mb3JfZWFjaF9zZXNzaW9uKHBoYmEtPnNob3N0LAotCQkJCQkgICAgYmUyaXNjc2lfZmFpbF9zZXNzaW9uKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJU0VfREVCVUcoREJHX0xWTF8xLCAiVW5leHBlY3RlZCBBc3luYyBOb3RpZmljYXRpb24gJWQgb24iCkBAIC0xNjIsNyArMjI2LDYgQEAKIC8qIFdhaXQgdGlsbCBubyBtb3JlIHBlbmRpbmcgbWNjIHJlcXVlc3RzIGFyZSBwcmVzZW50ICovCiBzdGF0aWMgaW50IGJlX21jY193YWl0X2NvbXBsKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKIHsKLSNkZWZpbmUgbWNjX3RpbWVvdXQJCTEyMDAwMCAvKiA1cyB0aW1lb3V0ICovCiAJaW50IGksIHN0YXR1czsKIAlmb3IgKGkgPSAwOyBpIDwgbWNjX3RpbWVvdXQ7IGkrKykgewogCQlzdGF0dXMgPSBiZWlzY3NpX3Byb2Nlc3NfbWNjKHBoYmEpOwpAQCAtMzcyLDkgKzQzNSwxMCBAQAogCiAJQlVHX09OKGF0b21pY19yZWFkKCZtY2NxLT51c2VkKSA+PSBtY2NxLT5sZW4pOwogCXdyYiA9IHF1ZXVlX2hlYWRfbm9kZShtY2NxKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCXdyYi0+dGFnMCA9IChtY2NxLT5oZWFkICYgMHgwMDAwMDBGRikgPDwgMTY7CiAJcXVldWVfaGVhZF9pbmMobWNjcSk7CiAJYXRvbWljX2luYygmbWNjcS0+dXNlZCk7Ci0JbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKIAlyZXR1cm4gd3JiOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaAppbmRleCA1ZGU4YWNiLi40OWZjYzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTQyNSwxNCArNDI1LDIwIEBACiBpbnQgYmVfcG9sbF9tY2Moc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7CiB1bnNpZ25lZCBjaGFyIG1nbXRfY2hlY2tfc3VwcG9ydGVkX2Z3KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCiAJCQkJICAgICAgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKLWludCBiZV9jbWRfZ2V0X21hY19hZGRyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdTggKm1hY19hZGRyKTsKLQordW5zaWduZWQgaW50IGJlX2NtZF9nZXRfbWFjX2FkZHIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKK3ZvaWQgZnJlZV9tY2NfdGFnKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHVuc2lnbmVkIGludCB0YWcpOwogLypJU0NTSSBGdW5jdHVpb25zICovCiBpbnQgYmVfY21kX2Z3X2luaXRpYWxpemUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7CiAKIHN0cnVjdCBiZV9tY2Nfd3JiICp3cmJfZnJvbV9tYm94KHN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbSk7CiBzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiX2Zyb21fbWNjcShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpOwogaW50IGJlX21jY19ub3RpZnlfd2FpdChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpOwordm9pZCBiZV9tY2Nfbm90aWZ5KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSk7Cit1bnNpZ25lZCBpbnQgYWxsb2NfbWNjX3RhZyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpOwordm9pZCBiZWlzY3NpX2FzeW5jX2xpbmtfc3RhdGVfcHJvY2VzcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCXN0cnVjdCBiZV9hc3luY19ldmVudF9saW5rX3N0YXRlICpldnQpOworaW50IGJlX21jY19jb21wbF9wcm9jZXNzX2lzcihzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJCSAgICBzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCk7CiAKIGludCBiZV9tYm94X25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKIApAQCAtNDQ4LDYgKzQ1NCw4IEBACiBpbnQgYmVfY21kX3dyYnFfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSwKIAkJICAgICAgIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICp3cmJxKTsKIAorYm9vbCBpc19saW5rX3N0YXRlX2V2dCh1MzIgdHJhaWxlcik7CisKIHN0cnVjdCBiZV9kZWZhdWx0X3BkdV9jb250ZXh0IHsKIAl1MzIgZHdbNF07CiB9IF9fcGFja2VkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYwppbmRleCBkNTg3YjAzLi4yOWEzYWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTAxLDYgKzEwMSw3IEBACiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3MgPSBjbHNfc2Vzc2lvbi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uICpiZWlzY3NpX3Nlc3MgPSBzZXNzLT5kZF9kYXRhOwogCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9zZXNzaW9uX2Rlc3Ryb3lcbiIpOwogCXBjaV9wb29sX2Rlc3Ryb3koYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCk7CiAJaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihjbHNfc2Vzc2lvbik7CiB9CkBAIC0yMjQsNiArMjI1LDcgQEAKIAlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOwogCWludCBsZW4gPSAwOwogCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX2dldF9wYXJhbSwgcGFyYW09ICVkXG4iLCBwYXJhbSk7CiAJYmVpc2NzaV9lcCA9IGJlaXNjc2lfY29ubi0+ZXA7CiAJaWYgKCFiZWlzY3NpX2VwKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfMSwKQEAgLTI1NCw2ICsyNTYsNyBAQAogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKIAlpbnQgcmV0OwogCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX3NldF9wYXJhbSwgcGFyYW09ICVkXG4iLCBwYXJhbSk7CiAJcmV0ID0gaXNjc2lfc2V0X3BhcmFtKGNsc19jb25uLCBwYXJhbSwgYnVmLCBidWZsZW4pOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0yNzEsOCArMjc0LDggQEAKIAkJCWNvbm4tPm1heF9yZWN2X2RsZW5ndGggPSA2NTUzNjsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9QQVJBTV9NQVhfQlVSU1Q6Ci0JCWlmIChzZXNzaW9uLT5maXJzdF9idXJzdCA+IDI2MjE0NCkKLQkJCXNlc3Npb24tPmZpcnN0X2J1cnN0ID0gMjYyMTQ0OworCQlpZiAoc2Vzc2lvbi0+bWF4X2J1cnN0ID4gMjYyMTQ0KQorCQkJc2Vzc2lvbi0+bWF4X2J1cnN0ID0gMjYyMTQ0OwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKQEAgLTI5MywxMiArMjk2LDQxIEBACiAJCQkgICBlbnVtIGlzY3NpX2hvc3RfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSAoc3RydWN0IGJlaXNjc2lfaGJhICopaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X21hY19hZGRyICpyZXNwOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJdW5zaWduZWQgaW50IHRhZywgd3JiX251bTsKIAlpbnQgbGVuID0gMDsKKwl1bnNpZ25lZCBzaG9ydCBzdGF0dXMsIGV4dGRfc3RhdHVzOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICptY2NxID0gJnBoYmEtPmN0cmwubWNjX29iai5xOwogCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9nZXRfaG9zdF9wYXJhbSwgcGFyYW09ICVkXG4iLCBwYXJhbSk7CiAJc3dpdGNoIChwYXJhbSkgewogCWNhc2UgSVNDU0lfSE9TVF9QQVJBTV9IV0FERFJFU1M6Ci0JCWJlX2NtZF9nZXRfbWFjX2FkZHIocGhiYSwgcGhiYS0+bWFjX2FkZHJlc3MpOwotCQlsZW4gPSBzeXNmc19mb3JtYXRfbWFjKGJ1ZiwgcGhiYS0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKwkJdGFnID0gYmVfY21kX2dldF9tYWNfYWRkcihwaGJhKTsKKwkJaWYgKCF0YWcpIHsKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwgImJlX2NtZF9nZXRfbWFjX2FkZHIgRmFpbGVkIFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0gZWxzZQorCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBoYmEtPmN0cmwubWNjX3dhaXRbdGFnXSwKKwkJCQkJCSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSk7CisKKwkJd3JiX251bSA9IChwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSAmIDB4MDBGRjAwMDApID4+IDE2OworCQlleHRkX3N0YXR1cyA9IChwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSAmIDB4MDAwMEZGMDApID4+IDg7CisJCXN0YXR1cyA9IHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddICYgMHgwMDAwMDBGRjsKKwkJaWYgKHN0YXR1cyB8fCBleHRkX3N0YXR1cykgeworCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiYmVfY21kX2dldF9tYWNfYWRkciBGYWlsZWQiCisJCQkJCSAgICAiIHN0YXR1cyA9ICVkIGV4dGRfc3RhdHVzID0gJWQgXG4iLAorCQkJCQkgICAgc3RhdHVzLCBleHRkX3N0YXR1cyk7CisJCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CisJCQlyZXR1cm4gLTE7CisJCX0gZWxzZSB7CisJCQl3cmIgPSBxdWV1ZV9nZXRfd3JiKG1jY3EsIHdyYl9udW0pOworCQkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOworCQkJcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwkJCW1lbWNweShwaGJhLT5tYWNfYWRkcmVzcywgcmVzcC0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKwkJCWxlbiA9IHN5c2ZzX2Zvcm1hdF9tYWMoYnVmLCBwaGJhLT5tYWNfYWRkcmVzcywKKwkJCQkJICAgICAgIEVUSF9BTEVOKTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gaXNjc2lfaG9zdF9nZXRfcGFyYW0oc2hvc3QsIHBhcmFtLCBidWYpOwpAQCAtMzc4LDYgKzQxMCw3IEBACiAJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CiAJc3RydWN0IGJlaXNjc2lfb2ZmbG9hZF9wYXJhbXMgcGFyYW1zOwogCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX3N0YXJ0XG4iKTsKIAltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHN0cnVjdCBiZWlzY3NpX29mZmxvYWRfcGFyYW1zKSk7CiAJYmVpc2NzaV9lcCA9IGJlaXNjc2lfY29ubi0+ZXA7CiAJaWYgKCFiZWlzY3NpX2VwKQpAQCAtNDIyLDggKzQ1NSwxNCBAQAogewogCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqbWNjcSA9ICZwaGJhLT5jdHJsLm1jY19vYmoucTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9vdXQgKnB0Y3BjbmN0X291dDsKKwl1bnNpZ25lZCBzaG9ydCBzdGF0dXMsIGV4dGRfc3RhdHVzOworCXVuc2lnbmVkIGludCB0YWcsIHdyYl9udW07CiAJaW50IHJldCA9IC0xOwogCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9vcGVuX2Nvbm5cbiIpOwogCWJlaXNjc2lfZXAtPmVwX2NpZCA9IGJlaXNjc2lfZ2V0X2NpZChwaGJhKTsKIAlpZiAoYmVpc2NzaV9lcC0+ZXBfY2lkID09IDB4RkZGRikgewogCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJObyBmcmVlIGNpZCBhdmFpbGFibGVcbiIpOwpAQCAtNDMxLDE1ICs0NzAsNDQgQEAKIAl9CiAJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9vcGVuX2Nvbm4sIGVwX2NpZD0lZCAiLAogCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKLQlwaGJhLT5lcF9hcnJheVtiZWlzY3NpX2VwLT5lcF9jaWRdID0gZXA7Ci0JaWYgKGJlaXNjc2lfZXAtPmVwX2NpZCA+Ci0JICAgIChwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0ICsgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwpKSB7CisJcGhiYS0+ZXBfYXJyYXlbYmVpc2NzaV9lcC0+ZXBfY2lkIC0KKwkJICAgICAgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnRdID0gZXA7CisJaWYgKGJlaXNjc2lfZXAtPmVwX2NpZCA+IChwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0ICsKKwkJCQkgIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsICogMikpIHsKIAkJU0VfREVCVUcoREJHX0xWTF8xLCAiRmFpbGVkIGluIGFsbG9jYXRlIGlzY3NpIGNpZFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJYmVpc2NzaV9lcC0+Y2lkX3ZsZCA9IDA7Ci0JcmV0dXJuIG1nbXRfb3Blbl9jb25uZWN0aW9uKHBoYmEsIGRzdF9hZGRyLCBiZWlzY3NpX2VwKTsKKwl0YWcgPSBtZ210X29wZW5fY29ubmVjdGlvbihwaGJhLCBkc3RfYWRkciwgYmVpc2NzaV9lcCk7CisJaWYgKCF0YWcpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJICJtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbiBGYWlsZWQgZm9yIGNpZD0lZCBcbiIsCisJCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwl9IGVsc2UgeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGhiYS0+Y3RybC5tY2Nfd2FpdFt0YWddLAorCQkJCQkgcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10pOworCX0KKwl3cmJfbnVtID0gKHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddICYgMHgwMEZGMDAwMCkgPj4gMTY7CisJZXh0ZF9zdGF0dXMgPSAocGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10gJiAweDAwMDBGRjAwKSA+PiA4OworCXN0YXR1cyA9IHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddICYgMHgwMDAwMDBGRjsKKwlpZiAoc3RhdHVzIHx8IGV4dGRfc3RhdHVzKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIm1nbXRfb3Blbl9jb25uZWN0aW9uIEZhaWxlZCIKKwkJCQkgICAgIiBzdGF0dXMgPSAlZCBleHRkX3N0YXR1cyA9ICVkIFxuIiwKKwkJCQkgICAgc3RhdHVzLCBleHRkX3N0YXR1cyk7CisJCWZyZWVfbWNjX3RhZygmcGhiYS0+Y3RybCwgdGFnKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCXdyYiA9IHF1ZXVlX2dldF93cmIobWNjcSwgd3JiX251bSk7CisJCWZyZWVfbWNjX3RhZygmcGhiYS0+Y3RybCwgdGFnKTsKKworCQlwdGNwY25jdF9vdXQgPSAJZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCQliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJCWJlaXNjc2lfZXAtPmZ3X2hhbmRsZSA9IHB0Y3BjbmN0X291dC0+Y29ubmVjdGlvbl9oYW5kbGU7CisJCWJlaXNjc2lfZXAtPmNpZF92bGQgPSAxOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJtZ210X29wZW5fY29ubmVjdGlvbiBTdWNjZXNzXG4iKTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNDU5LDE0ICs1MjcsMTIgQEAKICAqIGJlaXNjc2lfZnJlZV9lcCAtIGZyZWUgZW5kcG9pbnQKICAqIEBlcDoJcG9pbnRlciB0byBpc2NzaSBlbmRwb2ludCBzdHJ1Y3R1cmUKICAqLwotc3RhdGljIHZvaWQgYmVpc2NzaV9mcmVlX2VwKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXApCitzdGF0aWMgdm9pZCBiZWlzY3NpX2ZyZWVfZXAoc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXApCiB7Ci0Jc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2VwLT5waGJhOwogCiAJYmVpc2NzaV9wdXRfY2lkKHBoYmEsIGJlaXNjc2lfZXAtPmVwX2NpZCk7CiAJYmVpc2NzaV9lcC0+cGhiYSA9IE5VTEw7Ci0JaXNjc2lfZGVzdHJveV9lbmRwb2ludChlcCk7CiB9CiAKIC8qKgpAQCAtNDk1LDkgKzU2MSw5IEBACiAJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJfQogCi0JaWYgKHBoYmEtPnN0YXRlKSB7CisJaWYgKHBoYmEtPnN0YXRlICE9IEJFX0FEQVBURVJfVVApIHsKIAkJcmV0ID0gLUVCVVNZOwotCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJUaGUgQWRhcGV0IHN0YXRlIGlzIE5vdCBVUCBcbiIpOworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJUaGUgQWRhcHRlciBzdGF0ZSBpcyBOb3QgVVAgXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAl9CiAKQEAgLTUwOSw5ICs1NzUsOSBAQAogCiAJYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOwogCWJlaXNjc2lfZXAtPnBoYmEgPSBwaGJhOwotCisJYmVpc2NzaV9lcC0+b3BlbmlzY3NpX2VwID0gZXA7CiAJaWYgKGJlaXNjc2lfb3Blbl9jb25uKGVwLCBOVUxMLCBkc3RfYWRkciwgbm9uX2Jsb2NraW5nKSkgewotCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJGYWlsZWQgaW4gYWxsb2NhdGUgaXNjc2kgY2lkXG4iKTsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiRmFpbGVkIGluIGJlaXNjc2lfb3Blbl9jb25uIFxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZnJlZV9lcDsKIAl9CkBAIC01MTksNyArNTg1LDcgQEAKIAlyZXR1cm4gZXA7CiAKIGZyZWVfZXA6Ci0JYmVpc2NzaV9mcmVlX2VwKGVwKTsKKwliZWlzY3NpX2ZyZWVfZXAoYmVpc2NzaV9lcCk7CiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIApAQCAtNTQ2LDIwICs2MTIsMjIgQEAKICAqIEBlcDogVGhlIGlzY3NpIGVuZHBvaW50CiAgKiBAZmxhZzogVGhlIHR5cGUgb2YgY29ubmVjdGlvbiBjbG9zdXJlCiAgKi8KLXN0YXRpYyBpbnQgYmVpc2NzaV9jbG9zZV9jb25uKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAsIGludCBmbGFnKQorc3RhdGljIGludCBiZWlzY3NpX2Nsb3NlX2Nvbm4oc3RydWN0ICBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwLCBpbnQgZmxhZykKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOworCXVuc2lnbmVkIGludCB0YWc7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKIAotCWlmIChNR01UX1NUQVRVU19TVUNDRVNTICE9Ci0JICAgIG1nbXRfdXBsb2FkX2Nvbm5lY3Rpb24ocGhiYSwgYmVpc2NzaV9lcC0+ZXBfY2lkLAotCQlDT05ORUNUSU9OX1VQTE9BRF9HUkFDRUZVTCkpIHsKKwl0YWcgPSBtZ210X3VwbG9hZF9jb25uZWN0aW9uKHBoYmEsIGJlaXNjc2lfZXAtPmVwX2NpZCwgZmxhZyk7CisJaWYgKCF0YWcpIHsKIAkJU0VfREVCVUcoREJHX0xWTF84LCAidXBsb2FkIGZhaWxlZCBmb3IgY2lkIDB4JXgiLAogCQkJIGJlaXNjc2lfZXAtPmVwX2NpZCk7CiAJCXJldCA9IC0xOworCX0gZWxzZSB7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwaGJhLT5jdHJsLm1jY193YWl0W3RhZ10sCisJCQkJCSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSk7CisJCWZyZWVfbWNjX3RhZygmcGhiYS0+Y3RybCwgdGFnKTsKIAl9Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC01NzQsMTkgKzY0MiwxNyBAQAogCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubjsKIAlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKIAlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7Ci0JaW50IGZsYWcgPSAwOwogCiAJYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOwogCXBoYmEgPSBiZWlzY3NpX2VwLT5waGJhOwotCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfZXBfZGlzY29ubmVjdFxuIik7CisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9lcF9kaXNjb25uZWN0IGZvciBlcF9jaWQgPSAlZFxuIiwKKwkJCSAgICAgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKIAogCWlmIChiZWlzY3NpX2VwLT5jb25uKSB7CiAJCWJlaXNjc2lfY29ubiA9IGJlaXNjc2lfZXAtPmNvbm47CiAJCWlzY3NpX3N1c3BlbmRfcXVldWUoYmVpc2NzaV9jb25uLT5jb25uKTsKLQkJYmVpc2NzaV9jbG9zZV9jb25uKGVwLCBmbGFnKTsKIAl9CiAKLQliZWlzY3NpX2ZyZWVfZXAoZXApOwogfQogCiAvKioKQEAgLTYxOSwyMyArNjg1LDMxIEBACiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChzZXNzaW9uLT5jbHNfc2Vzc2lvbik7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCB0YWc7CiAJdW5zaWduZWQgc2hvcnQgc2F2ZWNmZ19mbGFnID0gQ01EX0lTQ1NJX1NFU1NJT05fU0FWRV9DRkdfT05fRkxBU0g7CiAKLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fc3RvcFxuIik7CiAJYmVpc2NzaV9lcCA9IGJlaXNjc2lfY29ubi0+ZXA7CiAJaWYgKCFiZWlzY3NpX2VwKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9zdG9wICwgbm8gYmVpc2NzaV9lcFxuIik7CiAJCXJldHVybjsKIAl9Ci0Jc3RhdHVzID0gbWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24ocGhiYSwgYmVpc2NzaV9lcCwKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fc3RvcCAgZXBfY2lkID0gJWRcbiIsCisJCQkgICAgIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJdGFnID0gbWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24ocGhiYSwgYmVpc2NzaV9lcCwKIAkJCQkJICAgIGJlaXNjc2lfZXAtPmVwX2NpZCwgMSwKIAkJCQkJICAgIHNhdmVjZmdfZmxhZyk7Ci0JaWYgKHN0YXR1cyAhPSBNR01UX1NUQVRVU19TVUNDRVNTKSB7CisJaWYgKCF0YWcpIHsKIAkJU0VfREVCVUcoREJHX0xWTF8xLAogCQkJICJtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbiBGYWlsZWQgZm9yIGNpZD0lZCBcbiIsCiAJCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwl9IGVsc2UgeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGhiYS0+Y3RybC5tY2Nfd2FpdFt0YWddLAorCQkJCQkgcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10pOworCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CiAJfQorCWJlaXNjc2lfY2xvc2VfY29ubihiZWlzY3NpX2VwLCBDT05ORUNUSU9OX1VQTE9BRF9HUkFDRUZVTCk7CisJYmVpc2NzaV9mcmVlX2VwKGJlaXNjc2lfZXApOworCWlzY3NpX2Rlc3Ryb3lfZW5kcG9pbnQoYmVpc2NzaV9lcC0+b3BlbmlzY3NpX2VwKTsKIAliZWlzY3NpX3VuYmluZF9jb25uX3RvX2NpZChwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQpOwogCWlzY3NpX2Nvbm5fc3RvcChjbHNfY29ubiwgZmxhZyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oCmluZGV4IGY5MmZmYzUuLjFmNTEyYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYwppbmRleCAxYTU1N2ZhLi43YzIyNjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTQwLDcgKzQwLDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmVfaW9wb2xsX2J1ZGdldCA9IDEwOwogc3RhdGljIHVuc2lnbmVkIGludCBiZV9tYXhfcGh5c19zaXplID0gNjQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IGVuYWJsZV9tc2l4ID0gMTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmluZ19tb2RlOwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYmVpc2NzaV9wY2lfaWRfdGFibGUpOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDICIgIiBCVUlMRF9TVFIpOwpAQCAtNjIsMTAgKzYxLDEwIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0gUENJIERyaXZlciBvcGVyYXRpb25zIGFuZCBkYXRhIC0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYmVpc2NzaV9wY2lfaWRfdGFibGUpID0gewogCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIEJFX0RFVklDRV9JRDEpIH0sCisJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgQkVfREVWSUNFX0lEMikgfSwKIAl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQxKSB9LAogCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIE9DX0RFVklDRV9JRDIpIH0sCiAJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lEMykgfSwKLQl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQ0KSB9LAogCXsgMCB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlaXNjc2lfcGNpX2lkX3RhYmxlKTsKQEAgLTExMiw2ICsxMTEsNyBAQAogCW1lbXNldChwaGJhLCAwLCBzaXplb2YoKnBoYmEpKTsKIAlwaGJhLT5zaG9zdCA9IHNob3N0OwogCXBoYmEtPnBjaWRldiA9IHBjaV9kZXZfZ2V0KHBjaWRldik7CisJcGNpX3NldF9kcnZkYXRhKHBjaWRldiwgcGhiYSk7CiAKIAlpZiAoaXNjc2lfaG9zdF9hZGQoc2hvc3QsICZwaGJhLT5wY2lkZXYtPmRldikpCiAJCWdvdG8gZnJlZV9kZXZpY2VzOwpAQCAtMTQzLDYgKzE0Myw3IEBACiAJCQkJc3RydWN0IHBjaV9kZXYgKnBjaWRldikKIHsKIAl1OCBfX2lvbWVtICphZGRyOworCWludCBwY2ljZmdfcmVnOwogCiAJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKSwKIAkJCSAgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMikpOwpAQCAtMTU5LDEzICsxNjAsMTkgQEAKIAlwaGJhLT5kYl92YSA9IGFkZHI7CiAJcGhiYS0+ZGJfcGEudS5hNjQuYWRkcmVzcyA9ICBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCA0KTsKIAotCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMSksCi0JCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDEpKTsKKwlpZiAocGhiYS0+Z2VuZXJhdGlvbiA9PSBCRV9HRU4yKQorCQlwY2ljZmdfcmVnID0gMTsKKwllbHNlCisJCXBjaWNmZ19yZWcgPSAwOworCisJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCBwY2ljZmdfcmVnKSwKKwkJCSAgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgcGNpY2ZnX3JlZykpOworCiAJaWYgKGFkZHIgPT0gTlVMTCkKIAkJZ290byBwY2lfbWFwX2VycjsKIAlwaGJhLT5jdHJsLnBjaWNmZyA9IGFkZHI7CiAJcGhiYS0+cGNpX3ZhID0gYWRkcjsKLQlwaGJhLT5wY2lfcGEudS5hNjQuYWRkcmVzcyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDEpOworCXBoYmEtPnBjaV9wYS51LmE2NC5hZGRyZXNzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgcGNpY2ZnX3JlZyk7CiAJcmV0dXJuIDA7CiAKIHBjaV9tYXBfZXJyOgpAQCAtMjMwLDI5ICsyMzcsMjcgQEAKIAogc3RhdGljIHZvaWQgYmVpc2NzaV9nZXRfcGFyYW1zKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKIHsKLQlwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsID0gQkUyX0lPX0RFUFRIOwotCXBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsID0gQkUyX01BWF9TRVNTSU9OUzsKLQlwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsID0gQkUyX0FTWU5DUERVUzsKLQlwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybCA9IEJFMl9NQVhfSUNEUyAvIDI7CisJcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCA9IChwaGJhLT5md19jb25maWcuaXNjc2lfaWNkX2NvdW50CisJCQkJICAgIC0gKHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQKKwkJCQkgICAgKyBCRTJfVE1GUworCQkJCSAgICArIEJFMl9OT1BPVVRfUkVRKSk7CisJcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgPSBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50OworCXBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgPSBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50OzsKKwlwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybCA9IHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9pY2RfY291bnQ7OwogCXBoYmEtPnBhcmFtcy5udW1fc2dlX3Blcl9pbyA9IEJFMl9TR0U7CiAJcGhiYS0+cGFyYW1zLmRlZnBkdV9oZHJfc3ogPSBCRTJfREVGUERVX0hEUl9TWjsKIAlwaGJhLT5wYXJhbXMuZGVmcGR1X2RhdGFfc3ogPSBCRTJfREVGUERVX0RBVEFfU1o7CiAJcGhiYS0+cGFyYW1zLmVxX3RpbWVyID0gNjQ7CiAJcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzID0KLQkgICAgKCgoQkUyX0NNRFNfUEVSX0NYTiAqIDIgKyBCRTJfTE9HT1VUUyArIEJFMl9UTUZTICsgQkUyX0FTWU5DUERVUykgLwotCQkJCQkJCQk1MTIpICsgMSkgKiA1MTI7CisJICAgICgoKEJFMl9DTURTX1BFUl9DWE4gKiAyICsgcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudCAqIDIKKwkJCQkgICAgKyBCRTJfVE1GUykgLyA1MTIpICsgMSkgKiA1MTI7CiAJcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzID0gKHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyA8IDEwMjQpCiAJCQkJPyAxMDI0IDogcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzOwogCVNFX0RFQlVHKERCR19MVkxfOCwgInBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcz0lZCBcbiIsCi0JCSBwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMpOworCQkJICAgICBwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMpOwogCXBoYmEtPnBhcmFtcy5udW1fY3FfZW50cmllcyA9Ci0JICAgICgoKEJFMl9DTURTX1BFUl9DWE4gKiAyICsgQkUyX0xPR09VVFMgKyBCRTJfVE1GUyArIEJFMl9BU1lOQ1BEVVMpIC8KLQkJCQkJCQkJNTEyKSArIDEpICogNTEyOwotCVNFX0RFQlVHKERCR19MVkxfOCwKLQkJInBoYmEtPnBhcmFtcy5udW1fY3FfZW50cmllcz0lZCBCRTJfQ01EU19QRVJfQ1hOPSVkIgotCQkiQkUyX0xPR09VVFM9JWQgQkUyX1RNRlM9JWQgQkUyX0FTWU5DUERVUz0lZCBcbiIsCi0JCXBoYmEtPnBhcmFtcy5udW1fY3FfZW50cmllcywgQkUyX0NNRFNfUEVSX0NYTiwKLQkJQkUyX0xPR09VVFMsIEJFMl9UTUZTLCBCRTJfQVNZTkNQRFVTKTsKKwkgICAgKCgoQkUyX0NNRFNfUEVSX0NYTiAqIDIgKyAgcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudCAqIDIKKwkJCQkgICAgKyBCRTJfVE1GUykgLyA1MTIpICsgMSkgKiA1MTI7CiAJcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biA9IDI1NjsKIH0KIApAQCAtNDQzLDcgKzQ0OCw3IEBACiAJCQlpZiAocGhiYS0+dG9kb19tY2NfY3EpCiAJCQkJcXVldWVfd29yayhwaGJhLT53cSwgJnBoYmEtPndvcmtfY3FzKTsKIAotCQlpZiAoKG51bV9tY2NlcV9wcm9jZXNzZWQpICYmICghbnVtX2lvZXFfcHJvY2Vzc2VkKSkKKwkJCWlmICgobnVtX21jY2VxX3Byb2Nlc3NlZCkgJiYgKCFudW1faW9lcV9wcm9jZXNzZWQpKQogCQkJCWh3aV9yaW5nX2VxX2RiKHBoYmEsIGVxLT5pZCwgMCwKIAkJCQkJICAgICAgKG51bV9pb2VxX3Byb2Nlc3NlZCArCiAJCQkJCSAgICAgICBudW1fbWNjZXFfcHJvY2Vzc2VkKSAsIDEsIDEpOwpAQCAtNTYxLDYgKzU2Niw3IEBACiAJCVNFX0RFQlVHKERCR19MVkxfMSwgIkluIElTQ1NJX09QX1JFSkVDVFxuIik7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfT1BfTE9HSU5fUlNQOgorCWNhc2UgSVNDU0lfT1BfVEVYVF9SU1A6CiAJCXRhc2sgPSBjb25uLT5sb2dpbl90YXNrOwogCQlpb190YXNrID0gdGFzay0+ZGRfZGF0YTsKIAkJbG9naW5faGRyID0gKHN0cnVjdCBpc2NzaV9oZHIgKilwcGR1OwpAQCAtNjMxLDI5ICs2MzcsMjkgQEAKICAqIGFsbG9jX3dyYl9oYW5kbGUgLSBUbyBhbGxvY2F0ZSBhIHdyYiBoYW5kbGUKICAqIEBwaGJhOiBUaGUgaGJhIHBvaW50ZXIKICAqIEBjaWQ6IFRoZSBjaWQgdG8gdXNlIGZvciBhbGxvY2F0aW9uCi0gKiBAaW5kZXg6IGluZGV4IGFsbG9jYXRpb24gYW5kIHdyYiBpbmRleAogICoKICAqIFRoaXMgaGFwcGVucyB1bmRlciBzZXNzaW9uX2xvY2sgdW50aWwgc3VibWlzc2lvbiB0byBjaGlwCiAgKi8KLXN0cnVjdCB3cmJfaGFuZGxlICphbGxvY193cmJfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgaW50IGNpZCwKLQkJCQkgICAgaW50IGluZGV4KQorc3RydWN0IHdyYl9oYW5kbGUgKmFsbG9jX3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBpbnQgY2lkKQogewogCXN0cnVjdCBod2lfd3JiX2NvbnRleHQgKnB3cmJfY29udGV4dDsKIAlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7Ci0Jc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlOworCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZSwgKnB3cmJfaGFuZGxlX3RtcDsKIAogCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOwogCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtjaWRdOwotCWlmIChwd3JiX2NvbnRleHQtPndyYl9oYW5kbGVzX2F2YWlsYWJsZSkgeworCWlmIChwd3JiX2NvbnRleHQtPndyYl9oYW5kbGVzX2F2YWlsYWJsZSA+PSAyKSB7CiAJCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlWwogCQkJCQkgICAgcHdyYl9jb250ZXh0LT5hbGxvY19pbmRleF07CiAJCXB3cmJfY29udGV4dC0+d3JiX2hhbmRsZXNfYXZhaWxhYmxlLS07Ci0JCXB3cmJfaGFuZGxlLT5ueHRfd3JiX2luZGV4ID0gcHdyYl9oYW5kbGUtPndyYl9pbmRleDsKIAkJaWYgKHB3cmJfY29udGV4dC0+YWxsb2NfaW5kZXggPT0KIAkJCQkJCShwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huIC0gMSkpCiAJCQlwd3JiX2NvbnRleHQtPmFsbG9jX2luZGV4ID0gMDsKIAkJZWxzZQogCQkJcHdyYl9jb250ZXh0LT5hbGxvY19pbmRleCsrOworCQlwd3JiX2hhbmRsZV90bXAgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VbCisJCQkJCQlwd3JiX2NvbnRleHQtPmFsbG9jX2luZGV4XTsKKwkJcHdyYl9oYW5kbGUtPm54dF93cmJfaW5kZXggPSBwd3JiX2hhbmRsZV90bXAtPndyYl9pbmRleDsKIAl9IGVsc2UKIAkJcHdyYl9oYW5kbGUgPSBOVUxMOwogCXJldHVybiBwd3JiX2hhbmRsZTsKQEAgLTY3MSw5ICs2NzcsNyBAQAogZnJlZV93cmJfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0LAogCQlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGUpCiB7Ci0JaWYgKCFyaW5nX21vZGUpCi0JCXB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVtwd3JiX2NvbnRleHQtPmZyZWVfaW5kZXhdID0KLQkJCQkJICAgICAgIHB3cmJfaGFuZGxlOworCXB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVtwd3JiX2NvbnRleHQtPmZyZWVfaW5kZXhdID0gcHdyYl9oYW5kbGU7CiAJcHdyYl9jb250ZXh0LT53cmJfaGFuZGxlc19hdmFpbGFibGUrKzsKIAlpZiAocHdyYl9jb250ZXh0LT5mcmVlX2luZGV4ID09IChwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huIC0gMSkpCiAJCXB3cmJfY29udGV4dC0+ZnJlZV9pbmRleCA9IDA7CkBAIC03OTAsNiArNzk0LDcgQEAKIAkJbWVtY3B5KHRhc2stPnNjLT5zZW5zZV9idWZmZXIsIHNlbnNlLAogCQkgICAgICAgbWluX3QodTE2LCBzZW5zZV9sZW4sIFNDU0lfU0VOU0VfQlVGRkVSU0laRSkpOwogCX0KKwogCWlmIChpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHIuZmxhZ3MgJiBJU0NTSV9GTEFHX0NNRF9SRUFEKSB7CiAJCWlmIChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3Jlc19jbnQpIC8gMzJdCiAJCQkJCQkJJiBTT0xfUkVTX0NOVF9NQVNLKQpAQCAtODExLDYgKzgxNiw3IEBACiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CiAKIAloZHIgPSAoc3RydWN0IGlzY3NpX2xvZ291dF9yc3AgKil0YXNrLT5oZHI7CisJaGRyLT5vcGNvZGUgPSBJU0NTSV9PUF9MT0dPVVRfUlNQOwogCWhkci0+dDJ3YWl0ID0gNTsKIAloZHItPnQycmV0YWluID0gMDsKIAloZHItPmZsYWdzID0gKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2ZsYWdzKSAvIDMyXQpAQCAtODI1LDYgKzgzMSw5IEBACiAJCQkJCSYgU09MX0VYUF9DTURfU05fTUFTSykgKwogCQkJKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2NtZF93bmQpCiAJCQkJCS8gMzJdICYgU09MX0NNRF9XTkRfTUFTSykgPj4gMjQpIC0gMSk7CisJaGRyLT5kbGVuZ3RoWzBdID0gMDsKKwloZHItPmRsZW5ndGhbMV0gPSAwOworCWhkci0+ZGxlbmd0aFsyXSA9IDA7CiAJaGRyLT5obGVuZ3RoID0gMDsKIAloZHItPml0dCA9IGlvX3Rhc2stPmxpYmlzY3NpX2l0dDsKIAlfX2lzY3NpX2NvbXBsZXRlX3BkdShjb25uLCAoc3RydWN0IGlzY3NpX2hkciAqKWhkciwgTlVMTCwgMCk7CkBAIC04MzksNiArODQ4LDcgQEAKIAlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrID0gdGFzay0+ZGRfZGF0YTsKIAogCWhkciA9IChzdHJ1Y3QgaXNjc2lfdG1fcnNwICopdGFzay0+aGRyOworCWhkci0+b3Bjb2RlID0gSVNDU0lfT1BfU0NTSV9UTUZVTkNfUlNQOwogCWhkci0+ZmxhZ3MgPSAoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZmxhZ3MpIC8gMzJdCiAJCQkJCSYgU09MX0ZMQUdTX01BU0spID4+IDI0KSB8IDB4ODA7CiAJaGRyLT5yZXNwb25zZSA9IChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3Jlc3ApIC8KQEAgLTg1OSw3ICs4NjksNiBAQAogewogCXN0cnVjdCBod2lfd3JiX2NvbnRleHQgKnB3cmJfY29udGV4dDsKIAlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGUgPSBOVUxMOwotCXN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZSA9IE5VTEw7CiAJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOwogCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrOwogCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2s7CkBAIC04NjcsMjIgKzg3NiwxNCBAQAogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKIAogCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOwotCWlmIChyaW5nX21vZGUpIHsKLQkJcHNnbF9oYW5kbGUgPSBwaGJhLT5zZ2xfaG5kbF9hcnJheVsoKHBzb2wtPgotCQkJICAgICAgZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZV9yaW5nLCBpY2RfaW5kZXgpIC8KLQkJCQkzMl0gJiBTT0xfSUNEX0lOREVYX01BU0spID4+IDYpXTsKLQkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W3BzZ2xfaGFuZGxlLT5jaWRdOwotCQl0YXNrID0gcHNnbF9oYW5kbGUtPnRhc2s7Ci0JCXB3cmJfaGFuZGxlID0gTlVMTDsKLQl9IGVsc2UgewotCQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbKChwc29sLT4KKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbKChwc29sLT4KIAkJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8gMzJdICYKLQkJCQlTT0xfQ0lEX01BU0spID4+IDYpXTsKLQkJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbKChwc29sLT4KKwkJCQlTT0xfQ0lEX01BU0spID4+IDYpIC0KKwkJCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XTsKKwlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZFsoKHBzb2wtPgogCQkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIHdyYl9pbmRleCkgLwogCQkJCTMyXSAmIFNPTF9XUkJfSU5ERVhfTUFTSykgPj4gMTYpXTsKLQkJdGFzayA9IHB3cmJfaGFuZGxlLT5waW9faGFuZGxlOwotCX0KKwl0YXNrID0gcHdyYl9oYW5kbGUtPnBpb19oYW5kbGU7CiAKIAlpb190YXNrID0gdGFzay0+ZGRfZGF0YTsKIAlzcGluX2xvY2soJnBoYmEtPm1nbXRfc2dsX2xvY2spOwpAQCAtOTIzLDMxICs5MjQsMjMgQEAKIAlzdHJ1Y3QgaXNjc2lfd3JiICpwd3JiID0gTlVMTDsKIAlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CiAJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2s7Ci0Jc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgdHlwZTsKIAlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGJlaXNjc2lfY29ubi0+Y29ubjsKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CiAKIAlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKLQlpZiAocmluZ19tb2RlKSB7Ci0JCXBzZ2xfaGFuZGxlID0gcGhiYS0+c2dsX2huZGxfYXJyYXlbKChwc29sLT4KLQkJCSAgICAgIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWVfcmluZywgaWNkX2luZGV4KSAvCi0JCQkgICAgICAzMl0gJiBTT0xfSUNEX0lOREVYX01BU0spID4+IDYpXTsKLQkJdGFzayA9IHBzZ2xfaGFuZGxlLT50YXNrOwotCQl0eXBlID0gcHNnbF9oYW5kbGUtPnR5cGU7Ci0JfSBlbHNlIHsKLQkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPgotCQkJCXdyYl9jb250ZXh0WygocHNvbC0+ZHdbb2Zmc2V0b2YKKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbKChwc29sLT5kd1tvZmZzZXRvZgogCQkJCShzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8gMzJdCi0JCQkJJiBTT0xfQ0lEX01BU0spID4+IDYpXTsKLQkJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbKChwc29sLT4KKwkJCQkmIFNPTF9DSURfTUFTSykgPj4gNikgLQorCQkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnRdOworCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkWygocHNvbC0+CiAJCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgd3JiX2luZGV4KSAvCiAJCQkJMzJdICYgU09MX1dSQl9JTkRFWF9NQVNLKSA+PiAxNildOwotCQl0YXNrID0gcHdyYl9oYW5kbGUtPnBpb19oYW5kbGU7Ci0JCXB3cmIgPSBwd3JiX2hhbmRsZS0+cHdyYjsKLQkJdHlwZSA9IChwd3JiLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUpIC8gMzJdICYKLQkJCSBXUkJfVFlQRV9NQVNLKSA+PiAyODsKLQl9CisJdGFzayA9IHB3cmJfaGFuZGxlLT5waW9faGFuZGxlOworCXB3cmIgPSBwd3JiX2hhbmRsZS0+cHdyYjsKKwl0eXBlID0gKHB3cmItPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSkgLyAzMl0gJgorCQkJCSBXUkJfVFlQRV9NQVNLKSA+PiAyODsKKwogCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBIV0hfVFlQRV9JTzoKQEAgLTk3OCwxNSArOTcxLDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlpZiAocmluZ19tb2RlKQotCQkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCi0JCQkJIkluIGh3aV9jb21wbGV0ZV9jbWQsIHVua25vd24gdHlwZSA9ICVkIgotCQkJCSJpY2RfaW5kZXggMHgleCBDSUQgMHgleFxuIiwgdHlwZSwKLQkJCQkoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWVfcmluZywKLQkJCQlpY2RfaW5kZXgpIC8gMzJdICYgU09MX0lDRF9JTkRFWF9NQVNLKSA+PiA2KSwKLQkJCQlwc2dsX2hhbmRsZS0+Y2lkKTsKLQkJZWxzZQotCQkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAogCQkJCSJJbiBod2lfY29tcGxldGVfY21kLCB1bmtub3duIHR5cGUgPSAlZCIKIAkJCQkid3JiX2luZGV4IDB4JXggQ0lEIDB4JXhcbiIsIHR5cGUsCiAJCQkJKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsCkBAIC0xMDc3LDcgKzEwNjIsOCBAQAogCiAJV0FSTl9PTighcGFzeW5jX2hhbmRsZSk7CiAKLQlwYXN5bmNfaGFuZGxlLT5jcmkgPSAodW5zaWduZWQgc2hvcnQpYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkOworCXBhc3luY19oYW5kbGUtPmNyaSA9ICh1bnNpZ25lZCBzaG9ydCliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgLQorCQkJCQkgICAgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQ7CiAJcGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyID0gaXNfaGVhZGVyOwogCXBhc3luY19oYW5kbGUtPmJ1ZmZlcl9sZW4gPSAoKHBkcGR1X2NxZS0+CiAJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsIGRwbCkgLyAzMl0KQEAgLTEzMjcsOSArMTMxMywxMCBAQAogCX0KIAogCXN0YXR1cyA9IGJlaXNjc2lfcHJvY2Vzc19hc3luY19wZHUoYmVpc2NzaV9jb25uLCBwaGJhLAotCQkJCQkgICBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQsCi0JCQkJCSAgIHBoZHIsIGhkcl9sZW4sIHBmaXJzdF9idWZmZXIsCi0JCQkJCSAgIGJ1Zl9sZW4pOworCQkJCQkgICAoYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkIC0KKwkJCQkJICAgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQpLAorCQkJCQkgICAgcGhkciwgaGRyX2xlbiwgcGZpcnN0X2J1ZmZlciwKKwkJCQkJICAgIGJ1Zl9sZW4pOwogCiAJaWYgKHN0YXR1cyA9PSAwKQogCQlod2lfZnJlZV9hc3luY19tc2cocGhiYSwgY3JpKTsKQEAgLTE0MjIsNiArMTQwOSw0OCBAQAogCWh3aV9wb3N0X2FzeW5jX2J1ZmZlcnMocGhiYSwgcGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyKTsKIH0KIAorc3RhdGljIHZvaWQgIGJlaXNjc2lfcHJvY2Vzc19tY2NfaXNyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqbWNjX2NxOworCXN0cnVjdCAgYmVfbWNjX2NvbXBsICptY2NfY29tcGw7CisJdW5zaWduZWQgaW50IG51bV9wcm9jZXNzZWQgPSAwOworCisJbWNjX2NxID0gJnBoYmEtPmN0cmwubWNjX29iai5jcTsKKwltY2NfY29tcGwgPSBxdWV1ZV90YWlsX25vZGUobWNjX2NxKTsKKwltY2NfY29tcGwtPmZsYWdzID0gbGUzMl90b19jcHUobWNjX2NvbXBsLT5mbGFncyk7CisJd2hpbGUgKG1jY19jb21wbC0+ZmxhZ3MgJiBDUUVfRkxBR1NfVkFMSURfTUFTSykgeworCisJCWlmIChudW1fcHJvY2Vzc2VkID49IDMyKSB7CisJCQlod2lfcmluZ19jcV9kYihwaGJhLCBtY2NfY3EtPmlkLAorCQkJCQludW1fcHJvY2Vzc2VkLCAwLCAwKTsKKwkJCW51bV9wcm9jZXNzZWQgPSAwOworCQl9CisJCWlmIChtY2NfY29tcGwtPmZsYWdzICYgQ1FFX0ZMQUdTX0FTWU5DX01BU0spIHsKKwkJCS8qIEludGVycHJldCBmbGFncyBhcyBhbiBhc3luYyB0cmFpbGVyICovCisJCQlpZiAoaXNfbGlua19zdGF0ZV9ldnQobWNjX2NvbXBsLT5mbGFncykpCisJCQkJLyogSW50ZXJwcmV0IGNvbXBsIGFzIGEgYXN5bmMgbGluayBldnQgKi8KKwkJCQliZWlzY3NpX2FzeW5jX2xpbmtfc3RhdGVfcHJvY2VzcyhwaGJhLAorCQkJCShzdHJ1Y3QgYmVfYXN5bmNfZXZlbnRfbGlua19zdGF0ZSAqKSBtY2NfY29tcGwpOworCQkJZWxzZQorCQkJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCQkJIiBVbnN1cHBvcnRlZCBBc3luYyBFdmVudCwgZmxhZ3MiCisJCQkJCSIgPSAweCUwOHggXG4iLCBtY2NfY29tcGwtPmZsYWdzKTsKKwkJfSBlbHNlIGlmIChtY2NfY29tcGwtPmZsYWdzICYgQ1FFX0ZMQUdTX0NPTVBMRVRFRF9NQVNLKSB7CisJCQliZV9tY2NfY29tcGxfcHJvY2Vzc19pc3IoJnBoYmEtPmN0cmwsIG1jY19jb21wbCk7CisJCQlhdG9taWNfZGVjKCZwaGJhLT5jdHJsLm1jY19vYmoucS51c2VkKTsKKwkJfQorCisJCW1jY19jb21wbC0+ZmxhZ3MgPSAwOworCQlxdWV1ZV90YWlsX2luYyhtY2NfY3EpOworCQltY2NfY29tcGwgPSBxdWV1ZV90YWlsX25vZGUobWNjX2NxKTsKKwkJbWNjX2NvbXBsLT5mbGFncyA9IGxlMzJfdG9fY3B1KG1jY19jb21wbC0+ZmxhZ3MpOworCQludW1fcHJvY2Vzc2VkKys7CisJfQorCisJaWYgKG51bV9wcm9jZXNzZWQgPiAwKQorCQlod2lfcmluZ19jcV9kYihwaGJhLCBtY2NfY3EtPmlkLCBudW1fcHJvY2Vzc2VkLCAxLCAwKTsKKworfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGJlaXNjc2lfcHJvY2Vzc19jcShzdHJ1Y3QgYmVfZXFfb2JqICpwYmVfZXEpCiB7CkBAIC0xNDMxLDcgKzE0NjAsOCBAQAogCXVuc2lnbmVkIGludCBudW1fcHJvY2Vzc2VkID0gMDsKIAl1bnNpZ25lZCBpbnQgdG90X251bXAgPSAwOwogCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubjsKLQlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGUgPSBOVUxMOworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOworCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXA7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOwogCiAJY3EgPSBwYmVfZXEtPmNxOwpAQCAtMTQ0MiwzMiArMTQ3MiwxMyBAQAogCSAgICAgICBDUUVfVkFMSURfTUFTSykgewogCQliZV9kd3NfbGVfdG9fY3B1KHNvbCwgc2l6ZW9mKHN0cnVjdCBzb2xfY3FlKSk7CiAKLQkJaWYgKHJpbmdfbW9kZSkgewotCQkJcHNnbF9oYW5kbGUgPSBwaGJhLT5zZ2xfaG5kbF9hcnJheVsoKHNvbC0+Ci0JCQkJICAgICAgZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZV9yaW5nLAotCQkJCSAgICAgIGljZF9pbmRleCkgLyAzMl0gJiBTT0xfSUNEX0lOREVYX01BU0spCi0JCQkJICAgICAgPj4gNildOwotCQkJYmVpc2NzaV9jb25uID0gcGhiYS0+Y29ubl90YWJsZVtwc2dsX2hhbmRsZS0+Y2lkXTsKLQkJCWlmICghYmVpc2NzaV9jb25uIHx8ICFiZWlzY3NpX2Nvbm4tPmVwKSB7Ci0JCQkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCi0JCQkJICAgICAiQ29ubmVjdGlvbiB0YWJsZSBlbXB0eSBmb3IgY2lkID0gJWRcbiIsCi0JCQkJICAgICAgcHNnbF9oYW5kbGUtPmNpZCk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9CisJCWVwID0gcGhiYS0+ZXBfYXJyYXlbKHUzMikgKChzb2wtPgorCQkJCSAgIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLyAzMl0gJgorCQkJCSAgIFNPTF9DSURfTUFTSykgPj4gNikgLQorCQkJCSAgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnRdOwogCi0JCX0gZWxzZSB7Ci0JCQliZWlzY3NpX2Nvbm4gPSBwaGJhLT5jb25uX3RhYmxlWyh1MzIpIChzb2wtPgotCQkJCSBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8gMzJdICYKLQkJCQkgU09MX0NJRF9NQVNLKSA+PiA2XTsKLQotCQkJaWYgKCFiZWlzY3NpX2Nvbm4gfHwgIWJlaXNjc2lfY29ubi0+ZXApIHsKLQkJCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKLQkJCQkgICAgICJDb25uZWN0aW9uIHRhYmxlIGVtcHR5IGZvciBjaWQgPSAlZFxuIiwKLQkJCQkgICAgICh1MzIpKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwKLQkJCQkgICAgIGNpZCkgLyAzMl0gJiBTT0xfQ0lEX01BU0spID4+IDYpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9CisJCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwkJYmVpc2NzaV9jb25uID0gYmVpc2NzaV9lcC0+Y29ubjsKIAogCQlpZiAobnVtX3Byb2Nlc3NlZCA+PSAzMikgewogCQkJaHdpX3JpbmdfY3FfZGIocGhiYSwgY3EtPmlkLApAQCAtMTUxMSwyMSArMTUyMiwxMyBAQAogCQljYXNlIENNRF9DWE5fS0lMTEVEX0lUVF9JTlZBTElEOgogCQljYXNlIENNRF9DWE5fS0lMTEVEX1NFUV9PVVRPRk9SREVSOgogCQljYXNlIENNRF9DWE5fS0lMTEVEX0lOVkFMSURfREFUQVNOX1JDVkQ6Ci0JCQlpZiAocmluZ19tb2RlKSB7Ci0JCQkJU0VfREVCVUcoREJHX0xWTF8xLAotCQkJCSAiQ1EgRXJyb3Igbm90aWZpY2F0aW9uIGZvciBjbWQuLiAiCi0JCQkJICJjb2RlICVkIGNpZCAweCV4XG4iLAotCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KLQkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywgcHNnbF9oYW5kbGUtPmNpZCk7Ci0JCQl9IGVsc2UgewotCQkJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwKIAkJCQkgIkNRIEVycm9yIG5vdGlmaWNhdGlvbiBmb3IgY21kLi4gIgogCQkJCSAiY29kZSAlZCBjaWQgMHgleFxuIiwKIAkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCiAJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCiAJCQkJIChzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLwogCQkJCSAzMl0gJiBTT0xfQ0lEX01BU0spKTsKLQkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFVOU09MX0RBVEFfRElHRVNUX0VSUk9SX05PVElGWToKIAkJCVNFX0RFQlVHKERCR19MVkxfMSwKQEAgLTE1NDcsMzcgKzE1NTAsMjMgQEAKIAkJY2FzZSBDWE5fS0lMTEVEX09WRVJfUlVOX1JFU0lEVUFMOgogCQljYXNlIENYTl9LSUxMRURfVU5ERVJfUlVOX1JFU0lEVUFMOgogCQljYXNlIENYTl9LSUxMRURfQ01ORF9EQVRBX05PVF9PTl9TQU1FX0NPTk46Ci0JCQlpZiAocmluZ19tb2RlKSB7Ci0JCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0IENJRCAiCi0JCQkJICIweCV4Li4uXG4iLAotCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KLQkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywgcHNnbF9oYW5kbGUtPmNpZCk7Ci0JCQl9IGVsc2UgewotCQkJCVNFX0RFQlVHKERCR19MVkxfMSwgIkNRIEVycm9yICVkLCByZXNldCBDSUQgIgorCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0IENJRCAiCiAJCQkJICIweCV4Li4uXG4iLAogCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KIAkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywKLQkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KLQkJCQkgMzJdICYgQ1FFX0NJRF9NQVNLKTsKLQkJCX0KKwkJCQkgKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCisJCQkJIDMyXSAmIENRRV9DSURfTUFTSykpOwogCQkJaXNjc2lfY29ubl9mYWlsdXJlKGJlaXNjc2lfY29ubi0+Y29ubiwKIAkJCQkJICAgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKIAkJCWJyZWFrOwogCQljYXNlIENYTl9LSUxMRURfUlNUX1NFTlQ6CiAJCWNhc2UgQ1hOX0tJTExFRF9SU1RfUkNWRDoKLQkJCWlmIChyaW5nX21vZGUpIHsKLQkJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJDUSBFcnJvciAlZCwgcmVzZXQiCi0JCQkJInJlY2VpdmVkL3NlbnQgb24gQ0lEIDB4JXguLi5cbiIsCi0JCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLwotCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLCBwc2dsX2hhbmRsZS0+Y2lkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0IgorCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0IgogCQkJCSJyZWNlaXZlZC9zZW50IG9uIENJRCAweCV4Li4uXG4iLAogCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KIAkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywKLQkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KLQkJCQkgMzJdICYgQ1FFX0NJRF9NQVNLKTsKLQkJCX0KKwkJCQkgKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCisJCQkJIDMyXSAmIENRRV9DSURfTUFTSykpOwogCQkJaXNjc2lfY29ubl9mYWlsdXJlKGJlaXNjc2lfY29ubi0+Y29ubiwKIAkJCQkJICAgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKIAkJCWJyZWFrOwpAQCAtMTU4Niw4ICsxNTc1LDggQEAKIAkJCQkgInJlY2VpdmVkIG9uIENJRCAweCV4Li4uXG4iLAogCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KIAkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywKLQkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KLQkJCQkgMzJdICYgQ1FFX0NJRF9NQVNLKTsKKwkJCQkgKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCisJCQkJIDMyXSAmIENRRV9DSURfTUFTSykpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTYwNCw3ICsxNTkzLDcgQEAKIAlyZXR1cm4gdG90X251bXA7CiB9CiAKLXN0YXRpYyB2b2lkIGJlaXNjc2lfcHJvY2Vzc19hbGxfY3FzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3ZvaWQgYmVpc2NzaV9wcm9jZXNzX2FsbF9jcXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOwpAQCAtMTYyNCw2ICsxNjEzLDcgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CiAJCXBoYmEtPnRvZG9fbWNjX2NxID0gMDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aXNyX2xvY2ssIGZsYWdzKTsKKwkJYmVpc2NzaV9wcm9jZXNzX21jY19pc3IocGhiYSk7CiAJfQogCiAJaWYgKHBoYmEtPnRvZG9fY3EpIHsKQEAgLTE2NjgsNyArMTY1OCw4IEBACiAJCQkJICAgICAgaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfaGkpOwogCiAJbF9zZyA9IHNnOwotCWZvciAoaW5kZXggPSAwOyAoaW5kZXggPCBudW1fc2cpICYmIChpbmRleCA8IDIpOyBpbmRleCsrLCBzZ19uZXh0KHNnKSkgeworCWZvciAoaW5kZXggPSAwOyAoaW5kZXggPCBudW1fc2cpICYmIChpbmRleCA8IDIpOyBpbmRleCsrLAorCQkJCQkJCSBzZyA9IHNnX25leHQoc2cpKSB7CiAJCWlmIChpbmRleCA9PSAwKSB7CiAJCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKIAkJCWFkZHIgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CkBAIC0xNjc5LDExICsxNjcwLDcgQEAKIAkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xlbiwgcHdyYiwKIAkJCQkJCQlzZ19sZW4pOwogCQkJc2dlX2xlbiA9IHNnX2xlbjsKLQkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xhc3QsIHB3cmIsCi0JCQkJCQkJMSk7CiAJCX0gZWxzZSB7Ci0JCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sYXN0LCBwd3JiLAotCQkJCQkJCTApOwogCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfcjJ0X29mZnNldCwKIAkJCQkJCQlwd3JiLCBzZ2VfbGVuKTsKIAkJCXNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOwpAQCAtMTcwNiwxMyArMTY5MywyNyBAQAogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2xvLCBwc2dsLAogCQkJaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfbG8pOwogCi0JaWYgKG51bV9zZyA9PSAyKQotCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9sYXN0LCBwd3JiLCAxKTsKKwlpZiAobnVtX3NnID09IDEpIHsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGFzdCwgcHdyYiwKKwkJCQkJCQkJMSk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX2xhc3QsIHB3cmIsCisJCQkJCQkJCTApOworCX0gZWxzZSBpZiAobnVtX3NnID09IDIpIHsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGFzdCwgcHdyYiwKKwkJCQkJCQkJMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX2xhc3QsIHB3cmIsCisJCQkJCQkJCTEpOworCX0gZWxzZSB7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xhc3QsIHB3cmIsCisJCQkJCQkJCTApOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9sYXN0LCBwd3JiLAorCQkJCQkJCQkwKTsKKwl9CiAJc2cgPSBsX3NnOwogCXBzZ2wrKzsKIAlwc2dsKys7CiAJb2Zmc2V0ID0gMDsKLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBudW1fc2c7IGluZGV4KyssIHNnX25leHQoc2cpLCBwc2dsKyspIHsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBudW1fc2c7IGluZGV4KyssIHNnID0gc2dfbmV4dChzZyksIHBzZ2wrKykgewogCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKIAkJYWRkciA9ICh1NjQpIHNnX2RtYV9hZGRyZXNzKHNnKTsKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBzZ2wsCkBAIC0yMDQ4LDEwICsyMDQ5LDkgQEAKIAl9CiAJaWR4ID0gMDsKIAlwd3JiID0gbWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOwotCW51bV9jeG5fd3JiID0KLQkgICAgKChtZW1fZGVzY3Jfd3JiLT5tZW1fYXJyYXlbaWR4XS5zaXplKSAvIChzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpICoKLQkgICAgIHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pOwotCisJbnVtX2N4bl93cmIgPSAobWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0uc2l6ZSkgLworCQkgICAgICAoKHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSAqCisJCQlwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKSk7CiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmw7IGluZGV4ICs9IDIpIHsKIAkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2luZGV4XTsKIAkJaWYgKG51bV9jeG5fd3JiKSB7CkBAIC0yMDY0LDkgKzIwNjQsOSBAQAogCQl9IGVsc2UgewogCQkJaWR4Kys7CiAJCQlwd3JiID0gbWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOwotCQkJbnVtX2N4bl93cmIgPSAoKG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnNpemUpIC8KLQkJCQkJKHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSkgKgotCQkJCQlwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKTsKKwkJCW51bV9jeG5fd3JiID0gKG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnNpemUpIC8KKwkJCQkgICAgICAoKHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSAqCisJCQkJCXBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pKTsKIAkJCWZvciAoaiA9IDA7IGogPCBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huOyBqKyspIHsKIAkJCQlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVtqXTsKIAkJCQlwd3JiX2hhbmRsZS0+cHdyYiA9IHB3cmI7CkBAIC0yMzgzLDcgKzIzODMsNyBAQAogCQkJCQkJICAgICAmcGFkZHIpOwogCQlpZiAoIWNxX3ZhZGRyZXNzKQogCQkJZ290byBjcmVhdGVfY3FfZXJyb3I7Ci0JCXJldCA9IGJlX2ZpbGxfcXVldWUoY3EsIHBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsIC8gMiwKKwkJcmV0ID0gYmVfZmlsbF9xdWV1ZShjcSwgcGhiYS0+cGFyYW1zLm51bV9jcV9lbnRyaWVzLAogCQkJCSAgICBzaXplb2Yoc3RydWN0IHNvbF9jcWUpLCBjcV92YWRkcmVzcyk7CiAJCWlmIChyZXQpIHsKIAkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCkBAIC0yNjM0LDcgKzI2MzQsOCBAQAogCQkJCSAgICAgIndyYnEgY3JlYXRlIGZhaWxlZC4iKTsKIAkJCXJldHVybiBzdGF0dXM7CiAJCX0KLQkJcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbaV0uY2lkID0gcGh3aV9jb250ZXh0LT5iZV93cmJxW2ldLmlkOworCQlwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpICogMl0uY2lkID0gcGh3aV9jb250ZXh0LT5iZV93cmJxW2ldLgorCQkJCQkJCQkgICBpZDsKIAl9CiAJa2ZyZWUocHdyYl9hcnIpOwogCXJldHVybiAwOwpAQCAtMjgwMywxNyArMjgwNCw2IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JaWYgKHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9mZWF0dXJlcyA9PSAweDEpCi0JCXJpbmdfbW9kZSA9IDE7Ci0JZWxzZQotCQlyaW5nX21vZGUgPSAwOwotCXN0YXR1cyA9IG1nbXRfZ2V0X2Z3X2NvbmZpZyhjdHJsLCBwaGJhKTsKLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKLQkJCSAgICAgIkVycm9yIGdldHRpbmcgZncgY29uZmlnXG4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KIAlzdGF0dXMgPSBiZWlzY3NpX2NyZWF0ZV9jcXMocGhiYSwgcGh3aV9jb250ZXh0KTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgIkNRIG5vdCBjcmVhdGVkXG4iKTsKQEAgLTI5NDEsMTcgKzI5MzEsNiBAQAogCXBoYmEtPmlvX3NnbF9obmRsX2F2YmwgPSAwOwogCXBoYmEtPmVoX3NnbF9obmRsX2F2YmwgPSAwOwogCi0JaWYgKHJpbmdfbW9kZSkgewotCQlwaGJhLT5zZ2xfaG5kbF9hcnJheSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZ2xfaGFuZGxlICopICoKLQkJCQkJICAgICAgcGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwsCi0JCQkJCQkgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGhiYS0+c2dsX2huZGxfYXJyYXkpIHsKLQkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCi0JCQkgICAgICJNZW0gQWxsb2MgRmFpbGVkLiBGYWlsaW5nIHRvIGxvYWRcbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQl9Ci0KIAltZW1fZGVzY3Jfc2dsaCA9IHBoYmEtPmluaXRfbWVtOwogCW1lbV9kZXNjcl9zZ2xoICs9IEhXSV9NRU1fU0dMSDsKIAlpZiAoMSA9PSBtZW1fZGVzY3Jfc2dsaC0+bnVtX2VsZW1lbnRzKSB7CkBAIC0yOTU5LDggKzI5MzgsNiBAQAogCQkJCQkJIHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwsCiAJCQkJCQkgR0ZQX0tFUk5FTCk7CiAJCWlmICghcGhiYS0+aW9fc2dsX2huZGxfYmFzZSkgewotCQkJaWYgKHJpbmdfbW9kZSkKLQkJCQlrZnJlZShwaGJhLT5zZ2xfaG5kbF9hcnJheSk7CiAJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAogCQkJCSAgICAgIk1lbSBBbGxvYyBGYWlsZWQuIEZhaWxpbmcgdG8gbG9hZFxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTMwMzIsNyArMzAwOSw3IEBACiAJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcGZyYWcsIDApOwogCQkJcGZyYWcgKz0gcGhiYS0+cGFyYW1zLm51bV9zZ2VfcGVyX2lvOwogCQkJcHNnbF9oYW5kbGUtPnNnbF9pbmRleCA9Ci0JCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydCArIGFycl9pbmRleCsrOworCQkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9pY2Rfc3RhcnQgKyBhcnJfaW5kZXgrKzsKIAkJfQogCQlpZHgrKzsKIAl9CkBAIC0zMDQ3LDcgKzMwMjQsNyBAQAogewogCWludCBpLCBuZXdfY2lkOwogCi0JcGhiYS0+Y2lkX2FycmF5ID0ga21hbGxvYyhzaXplb2Yodm9pZCAqKSAqIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsLAorCXBoYmEtPmNpZF9hcnJheSA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikgKiBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCwKIAkJCQkgIEdGUF9LRVJORUwpOwogCWlmICghcGhiYS0+Y2lkX2FycmF5KSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCkBAIC0zMDU1LDcgKzMwMzIsNyBAQAogCQkJICAgICAiaGJhX3NldHVwX2NpZF90YmxzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXBoYmEtPmVwX2FycmF5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlzY3NpX2VuZHBvaW50ICopICoKKwlwaGJhLT5lcF9hcnJheSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqKSAqCiAJCQkJIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsICogMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwaGJhLT5lcF9hcnJheSkgewogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LApAQCAtMzA2NCw3ICszMDQxLDcgQEAKIAkJa2ZyZWUocGhiYS0+Y2lkX2FycmF5KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW5ld19jaWQgPSBwaGJhLT5md19jb25maWcuaXNjc2lfaWNkX3N0YXJ0OworCW5ld19jaWQgPSBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0OwogCWZvciAoaSA9IDA7IGkgPCBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybDsgaSsrKSB7CiAJCXBoYmEtPmNpZF9hcnJheVtpXSA9IG5ld19jaWQ7CiAJCW5ld19jaWQgKz0gMjsKQEAgLTMxNDUsOCArMzEyMiw2IEBACiAJaWYgKGhiYV9zZXR1cF9jaWRfdGJscyhwaGJhKSkgewogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAogCQkJICAgICAiRmFpbGVkIGluIGhiYV9zZXR1cF9jaWRfdGJsc1xuIik7Ci0JCWlmIChyaW5nX21vZGUpCi0JCQlrZnJlZShwaGJhLT5zZ2xfaG5kbF9hcnJheSk7CiAJCWtmcmVlKHBoYmEtPmlvX3NnbF9obmRsX2Jhc2UpOwogCQlrZnJlZShwaGJhLT5laF9zZ2xfaG5kbF9iYXNlKTsKIAkJZ290byBkb19jbGVhbnVwX2N0cmxyOwpAQCAtMzE2Niw2ICszMTQxLDcgQEAKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXE7CiAJc3RydWN0IGJlX2VxX2VudHJ5ICplcWUgPSBOVUxMOwogCWludCBpLCBlcV9tc2l4OworCXVuc2lnbmVkIGludCBudW1fcHJvY2Vzc2VkOwogCiAJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CiAJcGh3aV9jb250ZXh0ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0OwpAQCAtMzE3NywxMyArMzE1MywxNyBAQAogCWZvciAoaSA9IDA7IGkgPCAocGhiYS0+bnVtX2NwdXMgKyBlcV9tc2l4KTsgaSsrKSB7CiAJCWVxID0gJnBod2lfY29udGV4dC0+YmVfZXFbaV0ucTsKIAkJZXFlID0gcXVldWVfdGFpbF9ub2RlKGVxKTsKLQorCQludW1fcHJvY2Vzc2VkID0gMDsKIAkJd2hpbGUgKGVxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfZXFfZW50cnksIHZhbGlkKSAvIDMyXQogCQkJCQkmIEVRRV9WQUxJRF9NQVNLKSB7CiAJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCwgZXFlLCAwKTsKIAkJCXF1ZXVlX3RhaWxfaW5jKGVxKTsKIAkJCWVxZSA9IHF1ZXVlX3RhaWxfbm9kZShlcSk7CisJCQludW1fcHJvY2Vzc2VkKys7CiAJCX0KKworCQlpZiAobnVtX3Byb2Nlc3NlZCkKKwkJCWh3aV9yaW5nX2VxX2RiKHBoYmEsIGVxLT5pZCwgMSwJbnVtX3Byb2Nlc3NlZCwgMSwgMSk7CiAJfQogfQogCkBAIC0zMTk1LDEwICszMTc1LDkgQEAKIAlpZiAobWdtdF9zdGF0dXMpCiAJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAogCQkJICAgICAibWdtdF9lcGZ3X2NsZWFudXAgRkFJTEVEIFxuIik7Ci0JaHdpX2NsZWFudXAocGhiYSk7CisKIAlod2lfcHVyZ2VfZXEocGhiYSk7Ci0JaWYgKHJpbmdfbW9kZSkKLQkJa2ZyZWUocGhiYS0+c2dsX2huZGxfYXJyYXkpOworCWh3aV9jbGVhbnVwKHBoYmEpOwogCWtmcmVlKHBoYmEtPmlvX3NnbF9obmRsX2Jhc2UpOwogCWtmcmVlKHBoYmEtPmVoX3NnbF9obmRsX2Jhc2UpOwogCWtmcmVlKHBoYmEtPmNpZF9hcnJheSk7CkBAIC0zMjE5LDcgKzMxOTgsOCBAQAogCSAqIFdlIGNhbiBhbHdheXMgdXNlIDAgaGVyZSBiZWNhdXNlIGl0IGlzIHJlc2VydmVkIGJ5IGxpYmlzY3NpIGZvcgogCSAqIGxvZ2luL3N0YXJ0dXAgcmVsYXRlZCB0YXNrcy4KIAkgKi8KLQlwd3JiX2hhbmRsZSA9IGFsbG9jX3dyYl9oYW5kbGUocGhiYSwgYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkLCAwKTsKKwlwd3JiX2hhbmRsZSA9IGFsbG9jX3dyYl9oYW5kbGUocGhiYSwgKGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAtCisJCQkJICAgICAgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQpKTsKIAlwd3JiID0gKHN0cnVjdCBpc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiICopcHdyYl9oYW5kbGUtPnB3cmI7CiAJbWVtc2V0KHB3cmIsIDAsIHNpemVvZigqcHdyYikpOwogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwKQEAgLTMyODMsOCArMzI2Myw3IEBACiAJYmVfZHdzX2xlX3RvX2NwdShwd3JiLCBzaXplb2Yoc3RydWN0IGlzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIpKTsKIAogCWRvb3JiZWxsIHw9IGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAmIERCX1dSQl9QT1NUX0NJRF9NQVNLOwotCWlmICghcmluZ19tb2RlKQotCQlkb29yYmVsbCB8PSAocHdyYl9oYW5kbGUtPndyYl9pbmRleCAmIERCX0RFRl9QRFVfV1JCX0lOREVYX01BU0spCisJZG9vcmJlbGwgfD0gKHB3cmJfaGFuZGxlLT53cmJfaW5kZXggJiBEQl9ERUZfUERVX1dSQl9JTkRFWF9NQVNLKQogCQkJICAgICA8PCBEQl9ERUZfUERVX1dSQl9JTkRFWF9TSElGVDsKIAlkb29yYmVsbCB8PSAxIDw8IERCX0RFRl9QRFVfTlVNX1BPU1RFRF9TSElGVDsKIApAQCAtMzMyOCw4ICszMzA3LDkgQEAKIAlpb190YXNrLT5iaHNfcGEudS5hNjQuYWRkcmVzcyA9IHBhZGRyOwogCWlvX3Rhc2stPmxpYmlzY3NpX2l0dCA9IChpdHRfdCl0YXNrLT5pdHQ7CiAJaW9fdGFzay0+cHdyYl9oYW5kbGUgPSBhbGxvY193cmJfaGFuZGxlKHBoYmEsCi0JCQkJCQliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQsCi0JCQkJCQl0YXNrLT5pdHQpOworCQkJCQkJYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkIC0KKwkJCQkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQKKwkJCQkJCSk7CiAJaW9fdGFzay0+Y29ubiA9IGJlaXNjc2lfY29ubjsKIAogCXRhc2stPmhkciA9IChzdHJ1Y3QgaXNjc2lfaGRyICopJmlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkcjsKQEAgLTMzNDMsNyArMzMyMyw3IEBACiAJCQlnb3RvIGZyZWVfaG5kbHM7CiAJfSBlbHNlIHsKIAkJaW9fdGFzay0+c2NzaV9jbW5kID0gTlVMTDsKLQkJaWYgKCh0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSA9PSBJU0NTSV9PUF9MT0dJTikgeworCQlpZiAoKG9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSA9PSBJU0NTSV9PUF9MT0dJTikgewogCQkJaWYgKCFiZWlzY3NpX2Nvbm4tPmxvZ2luX2luX3Byb2dyZXNzKSB7CiAJCQkJc3Bpbl9sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKIAkJCQlpb190YXNrLT5wc2dsX2hhbmRsZSA9IChzdHJ1Y3Qgc2dsX2hhbmRsZSAqKQpAQCAtMzM3MCwyMSArMzM1MCwxNiBAQAogCWl0dCA9IChpdHRfdCkgY3B1X3RvX2JlMzIoKCh1bnNpZ25lZCBpbnQpaW9fdGFzay0+cHdyYl9oYW5kbGUtPgogCQkJCSB3cmJfaW5kZXggPDwgMTYpIHwgKHVuc2lnbmVkIGludCkKIAkJCQkoaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCkpOwotCWlmIChyaW5nX21vZGUpIHsKLQkJcGhiYS0+c2dsX2huZGxfYXJyYXlbaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCAtCi0JCQkJICAgICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XSA9Ci0JCQkJICAgICBpb190YXNrLT5wc2dsX2hhbmRsZTsKLQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPnRhc2sgPSB0YXNrOwotCQlpb190YXNrLT5wc2dsX2hhbmRsZS0+Y2lkID0gYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkOwotCX0gZWxzZQotCQlpb190YXNrLT5wd3JiX2hhbmRsZS0+cGlvX2hhbmRsZSA9IHRhc2s7CisJaW9fdGFzay0+cHdyYl9oYW5kbGUtPnBpb19oYW5kbGUgPSB0YXNrOwogCiAJaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLml0dCA9IGl0dDsKIAlyZXR1cm4gMDsKIAogZnJlZV9obmRsczoKIAlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKLQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkXTsKKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbCisJCQliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgLQorCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydF07CiAJZnJlZV93cmJfaGFuZGxlKHBoYmEsIHB3cmJfY29udGV4dCwgaW9fdGFzay0+cHdyYl9oYW5kbGUpOwogCWlvX3Rhc2stPnB3cmJfaGFuZGxlID0gTlVMTDsKIAlwY2lfcG9vbF9mcmVlKGJlaXNjc2lfc2Vzcy0+YmhzX3Bvb2wsIGlvX3Rhc2stPmNtZF9iaHMsCkBAIC0zNDA0LDcgKzMzNzksOCBAQAogCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKIAogCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOwotCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWRdOworCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQKKwkJCS0gcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydF07CiAJaWYgKGlvX3Rhc2stPnB3cmJfaGFuZGxlKSB7CiAJCWZyZWVfd3JiX2hhbmRsZShwaGJhLCBwd3JiX2NvbnRleHQsIGlvX3Rhc2stPnB3cmJfaGFuZGxlKTsKIAkJaW9fdGFzay0+cHdyYl9oYW5kbGUgPSBOVUxMOwpAQCAtMzQ2MCwxOCArMzQzNiwxMiBAQAogCQkJICAgICAgSVNDU0lfT1BDT0RFX1NDU0lfREFUQV9PVVQpOwogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3BkdV9kYXRhX291dCwgZmluYWxfYml0LAogCQkJICAgICAgJmlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2RhdGFfcGR1LCAxKTsKLQkJaWYgKHJpbmdfbW9kZSkKLQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT50eXBlID0gSU5JX1dSX0NNRDsKLQkJZWxzZQotCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCi0JCQkJICAgICAgSU5JX1dSX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAorCQkJICAgICAgSU5JX1dSX0NNRCk7CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDEpOwogCX0gZWxzZSB7Ci0JCWlmIChyaW5nX21vZGUpCi0JCQlpb190YXNrLT5wc2dsX2hhbmRsZS0+dHlwZSA9IElOSV9SRF9DTUQ7Ci0JCWVsc2UKLQkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAotCQkJCSAgICAgIElOSV9SRF9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKKwkJCSAgICAgIElOSV9SRF9DTUQpOwogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZHNwLCBwd3JiLCAwKTsKIAl9CiAJbWVtY3B5KCZpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9kYXRhX3BkdS4KQEAgLTM0OTYsOCArMzQ2Niw3IEBACiAJYmVfZHdzX2xlX3RvX2NwdShwd3JiLCBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpOwogCiAJZG9vcmJlbGwgfD0gYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkICYgREJfV1JCX1BPU1RfQ0lEX01BU0s7Ci0JaWYgKCFyaW5nX21vZGUpCi0JCWRvb3JiZWxsIHw9IChpb190YXNrLT5wd3JiX2hhbmRsZS0+d3JiX2luZGV4ICYKKwlkb29yYmVsbCB8PSAoaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCAmCiAJCSAgICAgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSykgPDwgREJfREVGX1BEVV9XUkJfSU5ERVhfU0hJRlQ7CiAJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQ7CiAKQEAgLTM1MTksNDkgKzM0ODgsNDYgQEAKIAl1bnNpZ25lZCBpbnQgZG9vcmJlbGwgPSAwOwogCXVuc2lnbmVkIGludCBpLCBjaWQ7CiAJc3RydWN0IGlzY3NpX3Rhc2sgKmFib3J0ZWRfdGFzazsKKwl1bnNpZ25lZCBpbnQgdGFnOwogCiAJY2lkID0gYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkOwogCXB3cmIgPSBpb190YXNrLT5wd3JiX2hhbmRsZS0+cHdyYjsKKwltZW1zZXQocHdyYiwgMCwgc2l6ZW9mKCpwd3JiKSk7CiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGNtZHNuX2l0dCwgcHdyYiwKIAkJICAgICAgYmUzMl90b19jcHUodGFzay0+Y21kc24pKTsKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgd3JiX2lkeCwgcHdyYiwKIAkJICAgICAgaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCk7CiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnbF9pY2RfaWR4LCBwd3JiLAogCQkgICAgICBpb190YXNrLT5wc2dsX2hhbmRsZS0+c2dsX2luZGV4KTsKLQogCXN3aXRjaCAodGFzay0+aGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSykgewogCWNhc2UgSVNDU0lfT1BfTE9HSU46Ci0JCWlmIChyaW5nX21vZGUpCi0JCQlpb190YXNrLT5wc2dsX2hhbmRsZS0+dHlwZSA9IFRHVF9ETV9DTUQ7Ci0JCWVsc2UKLQkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAotCQkJCSAgICAgIFRHVF9ETV9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKKwkJCSAgICAgIFRHVF9ETV9DTUQpOwogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMCk7CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBjbWRzbl9pdHQsIHB3cmIsIDEpOwogCQlod2lfd3JpdGVfYnVmZmVyKHB3cmIsIHRhc2spOwogCQlicmVhazsKIAljYXNlIElTQ1NJX09QX05PT1BfT1VUOgotCQlpZiAocmluZ19tb2RlKQotCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPnR5cGUgPSBJTklfUkRfQ01EOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKKwkJCSAgICAgIElOSV9SRF9DTUQpOworCQlpZiAodGFzay0+aGRyLT50dHQgPT0gSVNDU0lfUkVTRVJWRURfVEFHKQorCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRtc2csIHB3cmIsIDApOwogCQllbHNlCi0JCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKLQkJCQkgICAgICBJTklfUkRfQ01EKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAxKTsKIAkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9PUF9URVhUOgotCQlpZiAocmluZ19tb2RlKQotCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPnR5cGUgPSBJTklfV1JfQ01EOwotCQllbHNlCi0JCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKLQkJCQkgICAgICBJTklfV1JfQ01EKTsKLQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRzcCwgcHdyYiwgMSk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAorCQkJICAgICAgVEdUX0RNX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKIAkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9PUF9TQ1NJX1RNRlVOQzoKIAkJc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CiAJCWkgPSAoKHN0cnVjdCBpc2NzaV90bSAqKXRhc2stPmhkciktPnJ0dDsKIAkJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7Ci0JCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtjaWRdOworCQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbY2lkIC0KKwkJCQkJICAgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnRdOwogCQlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZFtiZTMyX3RvX2NwdShpKQogCQkJCQkJCQk+PiAxNl07CiAJCWFib3J0ZWRfdGFzayA9IHB3cmJfaGFuZGxlLT5waW9faGFuZGxlOwpAQCAtMzU3MiwyMiArMzUzOCwyNSBAQAogCQlpZiAoIWFib3J0ZWRfaW9fdGFzay0+c2NzaV9jbW5kKQogCQkJcmV0dXJuIDA7CiAKLQkJbWdtdF9pbnZhbGlkYXRlX2ljZHMocGhiYSwKKwkJdGFnID0gbWdtdF9pbnZhbGlkYXRlX2ljZHMocGhiYSwKIAkJCQkgICAgIGFib3J0ZWRfaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCwKIAkJCQkgICAgIGNpZCk7Ci0JCWlmIChyaW5nX21vZGUpCi0JCQlpb190YXNrLT5wc2dsX2hhbmRsZS0+dHlwZSA9IElOSV9UTUZfQ01EOwotCQllbHNlCi0JCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKLQkJCQkgICAgICBJTklfVE1GX0NNRCk7CisJCWlmICghdGFnKSB7CisJCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCQkgICAgICJtZ210X2ludmFsaWRhdGVfaWNkcyBjb3VsZCBub3QgYmUiCisJCQkJICAgICAiIHN1Ym1pdHRlZFxuIik7CisJCX0gZWxzZSB7CisJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGhiYS0+Y3RybC5tY2Nfd2FpdFt0YWddLAorCQkJCQkJIHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddKTsKKwkJCWZyZWVfbWNjX3RhZygmcGhiYS0+Y3RybCwgdGFnKTsKKwkJfQorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKKwkJCSAgICAgIElOSV9UTUZfQ01EKTsKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRtc2csIHB3cmIsIDApOwogCQlod2lfd3JpdGVfYnVmZmVyKHB3cmIsIHRhc2spOwogCQlicmVhazsKIAljYXNlIElTQ1NJX09QX0xPR09VVDoKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRtc2csIHB3cmIsIDApOwotCQlpZiAocmluZ19tb2RlKQotCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPnR5cGUgPSBIV0hfVFlQRV9MT0dPVVQ7Ci0JCWVsc2UKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCiAJCQkJSFdIX1RZUEVfTE9HT1VUKTsKIAkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKQEAgLTM2MDAsMTQgKzM1NjksMTMgQEAKIAl9CiAKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgcjJ0X2V4cF9kdGwsIHB3cmIsCi0JCSAgICAgIGJlMzJfdG9fY3B1KHRhc2stPmRhdGFfY291bnQpKTsKKwkJICAgICAgdGFzay0+ZGF0YV9jb3VudCk7CiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHB0cjJuZXh0d3JiLCBwd3JiLAogCQkgICAgICBpb190YXNrLT5wd3JiX2hhbmRsZS0+bnh0X3dyYl9pbmRleCk7CiAJYmVfZHdzX2xlX3RvX2NwdShwd3JiLCBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpOwogCiAJZG9vcmJlbGwgfD0gY2lkICYgREJfV1JCX1BPU1RfQ0lEX01BU0s7Ci0JaWYgKCFyaW5nX21vZGUpCi0JCWRvb3JiZWxsIHw9IChpb190YXNrLT5wd3JiX2hhbmRsZS0+d3JiX2luZGV4ICYKKwlkb29yYmVsbCB8PSAoaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCAmCiAJCSAgICAgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSykgPDwgREJfREVGX1BEVV9XUkJfSU5ERVhfU0hJRlQ7CiAJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQ7CiAJaW93cml0ZTMyKGRvb3JiZWxsLCBwaGJhLT5kYl92YSArIERCX1RYVUxQMF9PRkZTRVQpOwpAQCAtMzY0OSw3ICszNjE3LDYgQEAKIAlyZXR1cm4gYmVpc2NzaV9pb3Rhc2sodGFzaywgc2csIG51bV9zZywgeGZlcmxlbiwgd3JpdGVkaXIpOwogfQogCi0KIHN0YXRpYyB2b2lkIGJlaXNjc2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCiB7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gTlVMTDsKQEAgLTM3MzQsNyArMzcwMSwyMCBAQAogCX0KIAlTRV9ERUJVRyhEQkdfTFZMXzgsICIgcGhiYSA9ICVwIFxuIiwgcGhiYSk7CiAKLQlwY2lfc2V0X2RydmRhdGEocGNpZGV2LCBwaGJhKTsKKwlzd2l0Y2ggKHBjaWRldi0+ZGV2aWNlKSB7CisJY2FzZSBCRV9ERVZJQ0VfSUQxOgorCWNhc2UgT0NfREVWSUNFX0lEMToKKwljYXNlIE9DX0RFVklDRV9JRDI6CisJCXBoYmEtPmdlbmVyYXRpb24gPSBCRV9HRU4yOworCQlicmVhazsKKwljYXNlIEJFX0RFVklDRV9JRDI6CisJY2FzZSBPQ19ERVZJQ0VfSUQzOgorCQlwaGJhLT5nZW5lcmF0aW9uID0gQkVfR0VOMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGhiYS0+Z2VuZXJhdGlvbiA9IDA7CisJfQorCiAJaWYgKGVuYWJsZV9tc2l4KQogCQludW1fY3B1cyA9IGZpbmRfbnVtX2NwdXMoKTsKIAllbHNlCkBAIC0zNzU0LDcgKzM3MzQsMTUgQEAKIAlzcGluX2xvY2tfaW5pdCgmcGhiYS0+aW9fc2dsX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcGhiYS0+aXNyX2xvY2spOworCXJldCA9IG1nbXRfZ2V0X2Z3X2NvbmZpZygmcGhiYS0+Y3RybCwgcGhiYSk7CisJaWYgKHJldCAhPSAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJFcnJvciBnZXR0aW5nIGZ3IGNvbmZpZ1xuIik7CisJCWdvdG8gZnJlZV9wb3J0OworCX0KKwlwaGJhLT5zaG9zdC0+bWF4X2lkID0gcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudDsKIAliZWlzY3NpX2dldF9wYXJhbXMocGhiYSk7CisJcGhiYS0+c2hvc3QtPmNhbl9xdWV1ZSA9IHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmw7CiAJcmV0ID0gYmVpc2NzaV9pbml0X3BvcnQocGhiYSk7CiAJaWYgKHJldCA8IDApIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfZGV2X3Byb2JlLSIKQEAgLTM3NjIsNiArMzc1MCwxNSBAQAogCQlnb3RvIGZyZWVfcG9ydDsKIAl9CiAKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX01DQ19DTUQgOyBpKyspIHsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmcGhiYS0+Y3RybC5tY2Nfd2FpdFtpICsgMV0pOworCQlwaGJhLT5jdHJsLm1jY190YWdbaV0gPSBpICsgMTsKKwkJcGhiYS0+Y3RybC5tY2NfbnVtdGFnW2kgKyAxXSA9IDA7CisJCXBoYmEtPmN0cmwubWNjX3RhZ19hdmFpbGFibGUrKzsKKwl9CisKKwlwaGJhLT5jdHJsLm1jY19hbGxvY19pbmRleCA9IHBoYmEtPmN0cmwubWNjX2ZyZWVfaW5kZXggPSAwOworCiAJc25wcmludGYocGhiYS0+d3FfbmFtZSwgc2l6ZW9mKHBoYmEtPndxX25hbWUpLCAiYmVpc2NzaV9xX2lycSV1IiwKIAkJIHBoYmEtPnNob3N0LT5ob3N0X25vKTsKIAlwaGJhLT53cSA9IGNyZWF0ZV93b3JrcXVldWUocGhiYS0+d3FfbmFtZSk7CkBAIC0zODM2LDcgKzM4MzMsNyBAQAogc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBiZWlzY3NpX2lzY3NpX3RyYW5zcG9ydCA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubmFtZSA9IERSVl9OQU1FLAotCS5jYXBzID0gQ0FQX1JFQ09WRVJZX0wwIHwgQ0FQX0hEUkRHU1QgfAorCS5jYXBzID0gQ0FQX1JFQ09WRVJZX0wwIHwgQ0FQX0hEUkRHU1QgfCBDQVBfVEVYVF9ORUdPIHwKIAkJQ0FQX01VTFRJX1IyVCB8IENBUF9EQVRBREdTVCB8IENBUF9EQVRBX1BBVEhfT0ZGTE9BRCwKIAkucGFyYW1fbWFzayA9IElTQ1NJX01BWF9SRUNWX0RMRU5HVEggfAogCQlJU0NTSV9NQVhfWE1JVF9ETEVOR1RIIHwKQEAgLTM4NTksNyArMzg1Niw3IEBACiAJCUlTQ1NJX1VTRVJOQU1FIHwgSVNDU0lfUEFTU1dPUkQgfAogCQlJU0NTSV9VU0VSTkFNRV9JTiB8IElTQ1NJX1BBU1NXT1JEX0lOIHwKIAkJSVNDU0lfRkFTVF9BQk9SVCB8IElTQ1NJX0FCT1JUX1RNTyB8Ci0JCUlTQ1NJX0xVX1JFU0VUX1RNTyB8IElTQ1NJX1RHVF9SRVNFVF9UTU8gfAorCQlJU0NTSV9MVV9SRVNFVF9UTU8gfAogCQlJU0NTSV9QSU5HX1RNTyB8IElTQ1NJX1JFQ1ZfVE1PIHwKIAkJSVNDU0lfSUZBQ0VfTkFNRSB8IElTQ1NJX0lOSVRJQVRPUl9OQU1FLAogCS5ob3N0X3BhcmFtX21hc2sgPSBJU0NTSV9IT1NUX0hXQUREUkVTUyB8IElTQ1NJX0hPU1RfSVBBRERSRVNTIHwKQEAgLTM5MDUsNyArMzkwMiw3IEBACiAJCVNFX0RFQlVHKERCR19MVkxfMSwKIAkJCSAiYmVpc2NzaV9tb2R1bGVfaW5pdCAtIFVuYWJsZSB0byAgcmVnaXN0ZXIgYmVpc2NzaSIKIAkJCSAidHJhbnNwb3J0LlxuIik7Ci0JCXJldCA9IC1FTk9NRU07CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX21vZHVsZV9pbml0LCB0dD0lcCBcbiIsCiAJCSAmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQpOwpAQCAtMzkxNyw3ICszOTE0LDYgQEAKIAkJCSAiYmVpc2NzaSBwY2kgZHJpdmVyLlxuIik7CiAJCWdvdG8gdW5yZWdpc3Rlcl9pc2NzaV90cmFuc3BvcnQ7CiAJfQotCXJpbmdfbW9kZSA9IDA7CiAJcmV0dXJuIDA7CiAKIHVucmVnaXN0ZXJfaXNjc2lfdHJhbnNwb3J0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmgKaW5kZXggMjVlNmIyMC4uYzUzYTgwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC00MCwzMSArNDAsMjkgQEAKICNkZWZpbmUgRFJWX0RFU0MJCUJFX05BTUUgIiAiICJEcml2ZXIiCiAKICNkZWZpbmUgQkVfVkVORE9SX0lEIAkJMHgxOUEyCisvKiBERVZJQ0UgSUQncyBmb3IgQkUyICovCiAjZGVmaW5lIEJFX0RFVklDRV9JRDEJCTB4MjEyCiAjZGVmaW5lIE9DX0RFVklDRV9JRDEJCTB4NzAyCiAjZGVmaW5lIE9DX0RFVklDRV9JRDIJCTB4NzAzCi0jZGVmaW5lIE9DX0RFVklDRV9JRDMJCTB4NzEyCi0jZGVmaW5lIE9DX0RFVklDRV9JRDQJCTB4MjIyCiAKLSNkZWZpbmUgQkUyX01BWF9TRVNTSU9OUwk2NAorLyogREVWSUNFIElEJ3MgZm9yIEJFMyAqLworI2RlZmluZSBCRV9ERVZJQ0VfSUQyCQkweDIyMgorI2RlZmluZSBPQ19ERVZJQ0VfSUQzCQkweDcxMgorCisjZGVmaW5lIEJFMl9JT19ERVBUSAkJMTAyNAorI2RlZmluZSBCRTJfTUFYX1NFU1NJT05TCTI1NgogI2RlZmluZSBCRTJfQ01EU19QRVJfQ1hOCTEyOAotI2RlZmluZSBCRTJfTE9HT1VUUwkJQkUyX01BWF9TRVNTSU9OUwogI2RlZmluZSBCRTJfVE1GUwkJMTYKICNkZWZpbmUgQkUyX05PUE9VVF9SRVEJCTE2Ci0jZGVmaW5lIEJFMl9BU1lOQ1BEVVMJCUJFMl9NQVhfU0VTU0lPTlMKLSNkZWZpbmUgQkUyX01BWF9JQ0RTCQkyMDQ4CiAjZGVmaW5lIEJFMl9TR0UJCQkzMgogI2RlZmluZSBCRTJfREVGUERVX0hEUl9TWgk2NAogI2RlZmluZSBCRTJfREVGUERVX0RBVEFfU1oJODE5MgotI2RlZmluZSBCRTJfSU9fREVQVEggXAotCShCRTJfTUFYX0lDRFMgLyAyIC0gKEJFMl9MT0dPVVRTICsgQkUyX1RNRlMgKyBCRTJfTk9QT1VUX1JFUSkpCiAKICNkZWZpbmUgTUFYX0NQVVMJCTMxCi0jZGVmaW5lIEJFSVNDU0lfU0dMSVNUX0VMRU1FTlRTCUJFMl9TR0UKKyNkZWZpbmUgQkVJU0NTSV9TR0xJU1RfRUxFTUVOVFMJMzAKIAotI2RlZmluZSBCRUlTQ1NJX01BWF9DTU5EUwkxMDI0CS8qIE1heCBJTydzIHBlciBDdHJsciBzaHQtPmNhbl9xdWV1ZSAqLwogI2RlZmluZSBCRUlTQ1NJX0NNRF9QRVJfTFVOCTEyOAkvKiBzY3NpX2hvc3QtPmNtZF9wZXJfbHVuICovCi0jZGVmaW5lIEJFSVNDU0lfTUFYX1NFQ1RPUlMJMjA0OAkvKiBzY3NpX2hvc3QtPm1heF9zZWN0b3JzICovCisjZGVmaW5lIEJFSVNDU0lfTUFYX1NFQ1RPUlMJMjU2CS8qIHNjc2lfaG9zdC0+bWF4X3NlY3RvcnMgKi8KIAogI2RlZmluZSBCRUlTQ1NJX01BWF9DTURfTEVOCTE2CS8qIHNjc2lfaG9zdC0+bWF4X2NtZF9sZW4gKi8KICNkZWZpbmUgQkVJU0NTSV9OVU1fTUFYX0xVTgkyNTYJLyogc2NzaV9ob3N0LT5tYXhfbHVuICovCkBAIC0zMzAsNiArMzI4LDcgQEAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CS8qIFRoZSBhY3R1YWsgd29yayBxdWV1ZSAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX2NxczsJLyogVGhlIHdvcmsgYmVpbmcgcXVldWVkICovCiAJc3RydWN0IGJlX2N0cmxfaW5mbyBjdHJsOworCXVuc2lnbmVkIGludCBnZW5lcmF0aW9uOwogfTsKIAogc3RydWN0IGJlaXNjc2lfc2Vzc2lvbiB7CkBAIC02NTYsMTEgKzY1NSwxMiBAQAogCiB9IF9fcGFja2VkOwogCi1zdHJ1Y3Qgd3JiX2hhbmRsZSAqYWxsb2Nfd3JiX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHVuc2lnbmVkIGludCBjaWQsCi0JCQkJICAgIGludCBpbmRleCk7CitzdHJ1Y3Qgd3JiX2hhbmRsZSAqYWxsb2Nfd3JiX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHVuc2lnbmVkIGludCBjaWQpOwogdm9pZAogZnJlZV9tZ210X3NnbF9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGUpOwogCit2b2lkIGJlaXNjc2lfcHJvY2Vzc19hbGxfY3FzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKIHN0cnVjdCBwZHVfbm9wX291dCB7CiAJdTMyIGR3WzEyXTsKIH07CkBAIC04MDIsNyArODAyLDYgQEAKIAlzdHJ1Y3QgYmVfcmluZyBkZWZhdWx0X3BkdV9oZHI7CiAJc3RydWN0IGJlX3JpbmcgZGVmYXVsdF9wZHVfZGF0YTsKIAlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2N0eHQ7Ci0JdW5zaWduZWQgc2hvcnQgY3FfZXJyb3JzW0NYTl9LSUxMRURfQ01ORF9EQVRBX05PVF9PTl9TQU1FX0NPTk5dOwogfTsKIAogZW51bSBod2hfdHlwZV9lbnVtIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jCmluZGV4IDc5YzJiZDUuLjMxN2JjZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDgsNiArNDgsMTQgQEAKIAkJCQkJcGZ3X2NmZy0+dWxwWzBdLnNxX2Jhc2U7CiAJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQgPQogCQkJCQlwZndfY2ZnLT51bHBbMF0uc3FfY291bnQ7CisJCWlmIChwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50ID4gKEJFMl9NQVhfU0VTU0lPTlMgLyAyKSkgeworCQkJU0VfREVCVUcoREJHX0xWTF84LAorCQkJCSJGVyByZXBvcnRlZCBNQVggQ1hOUyBhcyAlZCBcdCIKKwkJCQkiTWF4IFN1cHBvcnRlZCA9ICVkLlxuIiwKKwkJCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50LAorCQkJCUJFMl9NQVhfU0VTU0lPTlMpOworCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudCA9IEJFMl9NQVhfU0VTU0lPTlMgLyAyOworCQl9CiAJfSBlbHNlIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCiAJCQkgICAgICJGYWlsZWQgaW4gbWdtdF9nZXRfZndfY29uZmlnIFxuIik7CkBAIC03Nyw2ICs4NSw3IEBACiAJfQogCW5vbmVtYl9jbWQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmVfbWdtdF9jb250cm9sbGVyX2F0dHJpYnV0ZXMpOwogCXJlcSA9IG5vbmVtYl9jbWQudmE7CisJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKIAlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CiAJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIGZhbHNlLCAxKTsKQEAgLTE0MCwxMCArMTQ5LDE3IEBACiB7CiAJc3RydWN0IGJlX2RtYV9tZW0gbm9uZW1iX2NtZDsKIAlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7Ci0Jc3RydWN0IGJlX3NnZSAqc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwlzdHJ1Y3QgYmVfc2dlICpzZ2U7CiAJc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX2luICpyZXE7Ci0JaW50IHN0YXR1cyA9IDA7CisJdW5zaWduZWQgaW50IHRhZyA9IDA7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJdGFnID0gYWxsb2NfbWNjX3RhZyhwaGJhKTsKKwlpZiAoIXRhZykgeworCQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwkJcmV0dXJuIHRhZzsKKwl9CiAKIAlub25lbWJfY21kLnZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoY3RybC0+cGRldiwKIAkJCQlzaXplb2Yoc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX2luKSwKQEAgLTE1Niw4ICsxNzIsMTAgQEAKIAl9CiAJbm9uZW1iX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbik7CiAJcmVxID0gbm9uZW1iX2NtZC52YTsKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOworCXdyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7CisJc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CisJd3JiLT50YWcwIHw9IHRhZzsKIAogCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgZmFsc2UsIDEpOwogCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCkBAIC0xNzIsMTQgKzE5MCwxMiBAQAogCXNnZS0+cGFfbG8gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLmRtYSAmIDB4RkZGRkZGRkYpOwogCXNnZS0+bGVuID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC5zaXplKTsKIAotCXN0YXR1cyA9IGJlX21jY19ub3RpZnlfd2FpdChwaGJhKTsKLQlpZiAoc3RhdHVzKQotCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJJQ0RTIEludmFsaWRhdGlvbiBGYWlsZWRcbiIpOworCWJlX21jY19ub3RpZnkocGhiYSk7CiAJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CiAJaWYgKG5vbmVtYl9jbWQudmEpCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoY3RybC0+cGRldiwgbm9uZW1iX2NtZC5zaXplLAogCQkJCSAgICBub25lbWJfY21kLnZhLCBub25lbWJfY21kLmRtYSk7Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gdGFnOwogfQogCiB1bnNpZ25lZCBjaGFyIG1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKQEAgLTE4OSwxMyArMjA1LDE5IEBACiAJCQkJCSB1bnNpZ25lZCBzaG9ydCBzYXZlY2ZnX2ZsYWcpCiB7CiAJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOwotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOwotCXN0cnVjdCBpc2NzaV9pbnZhbGlkYXRlX2Nvbm5lY3Rpb25fcGFyYW1zX2luICpyZXEgPQotCQkJCQkJZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwotCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfaW4gKnJlcTsKKwl1bnNpZ25lZCBpbnQgdGFnID0gMDsKIAogCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCXRhZyA9IGFsbG9jX21jY190YWcocGhiYSk7CisJaWYgKCF0YWcpIHsKKwkJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJCXJldHVybiB0YWc7CisJfQorCXdyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7CisJd3JiLT50YWcwIHw9IHRhZzsKKwlyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwogCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0lfSU5JLApAQCAtMjA4LDM1ICsyMzAsMzcgQEAKIAllbHNlCiAJCXJlcS0+Y2xlYW51cF90eXBlID0gQ01EX0lTQ1NJX0NPTk5FQ1RJT05fSU5WQUxJREFURTsKIAlyZXEtPnNhdmVfY2ZnID0gc2F2ZWNmZ19mbGFnOwotCXN0YXR1cyA9ICBiZV9tY2Nfbm90aWZ5X3dhaXQocGhiYSk7Ci0JaWYgKHN0YXR1cykKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAiSW52YWxpZGF0aW9uIEZhaWxlZFxuIik7Ci0KKwliZV9tY2Nfbm90aWZ5KHBoYmEpOwogCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIHRhZzsKIH0KIAogdW5zaWduZWQgY2hhciBtZ210X3VwbG9hZF9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKIAkJCQl1bnNpZ25lZCBzaG9ydCBjaWQsIHVuc2lnbmVkIGludCB1cGxvYWRfZmxhZykKIHsKIAlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7Ci0Jc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX2luICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7Ci0JaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwlzdHJ1Y3QgdGNwX3VwbG9hZF9wYXJhbXNfaW4gKnJlcTsKKwl1bnNpZ25lZCBpbnQgdGFnID0gMDsKIAogCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCXRhZyA9IGFsbG9jX21jY190YWcocGhiYSk7CisJaWYgKCF0YWcpIHsKKwkJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJCXJldHVybiB0YWc7CisJfQorCXdyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7CisJcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXdyYi0+dGFnMCB8PSB0YWc7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwogCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9DT01NT05fVENQX1VQTE9BRCwKIAkJCSAgIE9QQ09ERV9DT01NT05fVENQX1VQTE9BRCwgc2l6ZW9mKCpyZXEpKTsKIAlyZXEtPmlkID0gKHVuc2lnbmVkIHNob3J0KWNpZDsKIAlyZXEtPnVwbG9hZF90eXBlID0gKHVuc2lnbmVkIGNoYXIpdXBsb2FkX2ZsYWc7Ci0Jc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KHBoYmEpOwotCWlmIChzdGF0dXMpCi0JCVNFX0RFQlVHKERCR19MVkxfMSwgIm1nbXRfdXBsb2FkX2Nvbm5lY3Rpb24gRmFpbGVkXG4iKTsKKwliZV9tY2Nfbm90aWZ5KHBoYmEpOwogCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIHRhZzsKIH0KIAogaW50IG1nbXRfb3Blbl9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKQEAgLTI0OCwxMyArMjcyLDEzIEBACiAJc3RydWN0IHNvY2thZGRyX2luICpkYWRkcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilkc3RfYWRkcjsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpkYWRkcl9pbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWRzdF9hZGRyOwogCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWNjcShwaGJhKTsKLQlzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfaW4gKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9pbiAqcmVxOwogCXVuc2lnbmVkIHNob3J0IGRlZl9oZHJfaWQ7CiAJdW5zaWduZWQgc2hvcnQgZGVmX2RhdGFfaWQ7CiAJc3RydWN0IHBoeXNfYWRkciB0ZW1wbGF0ZV9hZGRyZXNzID0geyAwLCAwIH07CiAJc3RydWN0IHBoeXNfYWRkciAqcHRlbXBsYXRlX2FkZHJlc3M7Ci0JaW50IHN0YXR1cyA9IDA7CisJdW5zaWduZWQgaW50IHRhZyA9IDA7CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgc2hvcnQgY2lkID0gYmVpc2NzaV9lcC0+ZXBfY2lkOwogCkBAIC0yNjYsNyArMjkwLDE0IEBACiAJcHRlbXBsYXRlX2FkZHJlc3MgPSAmdGVtcGxhdGVfYWRkcmVzczsKIAlJU0NTSV9HRVRfUERVX1RFTVBMQVRFX0FERFJFU1MocGhiYSwgcHRlbXBsYXRlX2FkZHJlc3MpOwogCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCXRhZyA9IGFsbG9jX21jY190YWcocGhiYSk7CisJaWYgKCF0YWcpIHsKKwkJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJCXJldHVybiB0YWc7CisJfQorCXdyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7CisJcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXdyYi0+dGFnMCB8PSB0YWc7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwogCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCkBAIC0zMTEsNDYgKzM0MiwzNiBAQAogCXJlcS0+ZG9fb2ZmbG9hZCA9IDE7CiAJcmVxLT5kYXRhb3V0X3RlbXBsYXRlX3BhLmxvID0gcHRlbXBsYXRlX2FkZHJlc3MtPmxvOwogCXJlcS0+ZGF0YW91dF90ZW1wbGF0ZV9wYS5oaSA9IHB0ZW1wbGF0ZV9hZGRyZXNzLT5oaTsKLQlzdGF0dXMgPSBiZV9tY2Nfbm90aWZ5X3dhaXQocGhiYSk7Ci0JaWYgKCFzdGF0dXMpIHsKLQkJc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcDsKLQkJc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX291dCAqcHRjcGNuY3Rfb3V0ID0KLQkJCQkJCQllbWJlZGRlZF9wYXlsb2FkKHdyYik7Ci0KLQkJZXAgPSBwaGJhLT5lcF9hcnJheVtwdGNwY25jdF9vdXQtPmNpZF07Ci0JCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKLQkJYmVpc2NzaV9lcC0+ZndfaGFuZGxlID0gcHRjcGNuY3Rfb3V0LT5jb25uZWN0aW9uX2hhbmRsZTsKLQkJYmVpc2NzaV9lcC0+Y2lkX3ZsZCA9IDE7Ci0JCVNFX0RFQlVHKERCR19MVkxfOCwgIm1nbXRfb3Blbl9jb25uZWN0aW9uIFN1Y2Nlc3NcbiIpOwotCX0gZWxzZQotCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJtZ210X29wZW5fY29ubmVjdGlvbiBGYWlsZWRcbiIpOworCWJlX21jY19ub3RpZnkocGhiYSk7CiAJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gdGFnOwogfQogCi1pbnQgYmVfY21kX2dldF9tYWNfYWRkcihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHU4ICptYWNfYWRkcikKK3Vuc2lnbmVkIGludCBiZV9jbWRfZ2V0X21hY19hZGRyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKIHsKIAlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7Ci0Jc3RydWN0IGJlX2NtZF9yZXFfZ2V0X21hY19hZGRyICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7Ci0JaW50IHN0YXR1czsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCBiZV9jbWRfcmVxX2dldF9tYWNfYWRkciAqcmVxOworCXVuc2lnbmVkIGludCB0YWcgPSAwOwogCiAJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVfY21kX2dldF9tYWNfYWRkclxuIik7CiAJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOwotCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisJdGFnID0gYWxsb2NfbWNjX3RhZyhwaGJhKTsKKwlpZiAoIXRhZykgeworCQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwkJcmV0dXJuIHRhZzsKKwl9CisKKwl3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOworCXJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwl3cmItPnRhZzAgfD0gdGFnOwogCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CiAJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKIAkJCSAgIE9QQ09ERV9DT01NT05fSVNDU0lfTlRXS19HRVRfTklDX0NPTkZJRywKIAkJCSAgIHNpemVvZigqcmVxKSk7CiAKLQlzdGF0dXMgPSBiZV9tY2Nfbm90aWZ5X3dhaXQocGhiYSk7Ci0JaWYgKCFzdGF0dXMpIHsKLQkJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9tYWNfYWRkciAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKLQotCQltZW1jcHkobWFjX2FkZHIsIHJlc3AtPm1hY19hZGRyZXNzLCBFVEhfQUxFTik7Ci0JfQotCisJYmVfbWNjX25vdGlmeShwaGJhKTsKIAlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiB0YWc7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5oCmluZGV4IDI0ZWFmZjkuLmVjZWFkNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmgKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuaApAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjMxLDYgKzIzMSw3IEBACiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOwogCXN0cnVjdCBiZWlzY3NpX3Nlc3MgKnNlc3M7CiAJc3RydWN0IGJlaXNjc2lfY29ubiAqY29ubjsKKwlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKm9wZW5pc2NzaV9lcDsKIAl1bnNpZ25lZCBzaG9ydCBpcF90eXBlOwogCWNoYXIgZHN0Nl9hZGRyW0lTQ1NJX0FERFJFU1NfQlVGX0xFTl07CiAJdW5zaWduZWQgbG9uZyBkc3RfYWRkcjsKQEAgLTI0OSw3ICsyNTAsNCBAQAogCQkJCQkgdW5zaWduZWQgc2hvcnQgaXNzdWVfcmVzZXQsCiAJCQkJCSB1bnNpZ25lZCBzaG9ydCBzYXZlY2ZnX2ZsYWcpOwogCi11bnNpZ25lZCBjaGFyIG1nbXRfZndfY21kKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCi0JCQkgIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKLQkJCSAgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYwppbmRleCAzM2IyMjk0Li4xYzRkMTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYwpAQCAtMTQyNiw4ICsxNDI2LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9QQVJBTV9DT05OX0FERFJFU1M6CiAJCWlmIChibngyaV9jb25uLT5lcCkKLQkJCWxlbiA9IHNwcmludGYoYnVmLCBOSVBRVUFEX0ZNVCAiXG4iLAotCQkJCSAgICAgIE5JUFFVQUQoYm54MmlfY29ubi0+ZXAtPmNtX3NrLT5kc3RfaXApKTsKKwkJCWxlbiA9IHNwcmludGYoYnVmLCAiJXBJNFxuIiwKKwkJCQkgICAgICAmYm54MmlfY29ubi0+ZXAtPmNtX3NrLT5kc3RfaXApOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gaXNjc2lfY29ubl9nZXRfcGFyYW0oY2xzX2Nvbm4sIHBhcmFtLCBidWYpOwpAQCAtMTk5MCw2ICsxOTkwLDcgQEAKIAkuZWhfYWJvcnRfaGFuZGxlcgk9IGlzY3NpX2VoX2Fib3J0LAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IGlzY3NpX2VoX2RldmljZV9yZXNldCwKIAkuZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIgPSBpc2NzaV9laF90YXJnZXRfcmVzZXQsCisJLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IGlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuY2FuX3F1ZXVlCQk9IDEwMjQsCiAJLm1heF9zZWN0b3JzCQk9IDEyNywKIAkuY21kX3Blcl9sdW4JCT0gMzIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKaW5kZXggOTEyOWJjZi4uY2QwNWUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYwpAQCAtMjE5LDE4ICsyMTksMTUgQEAKIAkJCWJyZWFrOwogCQl9CiAJCXNhID0gKGNkYnBbOF0gPDwgOCkgKyBjZGJwWzldOwotCQluYW1lID0gZ2V0X3NhX25hbWUobWFpbnRfaW5fYXJyLCBNQUlOVF9JTl9TWiwgc2EpOwotCQlpZiAobmFtZSkgeworCQluYW1lID0gZ2V0X3NhX25hbWUodmFyaWFibGVfbGVuZ3RoX2FyciwgVkFSSUFCTEVfTEVOR1RIX1NaLCBzYSk7CisJCWlmIChuYW1lKQogCQkJcHJpbnRrKCIlcyIsIG5hbWUpOwotCQkJaWYgKChjZGJfbGVuID4gMCkgJiYgKGxlbiAhPSBjZGJfbGVuKSkKLQkJCQlwcmludGsoIiwgaW5fY2RiX2xlbj0lZCwgZXh0X2xlbj0lZCIsCi0JCQkJICAgICAgIGxlbiwgY2RiX2xlbik7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCXByaW50aygiY2RiWzBdPTB4JXgsIHNhPTB4JXgiLCBjZGIwLCBzYSk7Ci0JCQlpZiAoKGNkYl9sZW4gPiAwKSAmJiAobGVuICE9IGNkYl9sZW4pKQotCQkJCXByaW50aygiLCBpbl9jZGJfbGVuPSVkLCBleHRfbGVuPSVkIiwKLQkJCQkgICAgICAgbGVuLCBjZGJfbGVuKTsKLQkJfQorCisJCWlmICgoY2RiX2xlbiA+IDApICYmIChsZW4gIT0gY2RiX2xlbikpCisJCQlwcmludGsoIiwgaW5fY2RiX2xlbj0lZCwgZXh0X2xlbj0lZCIsIGxlbiwgY2RiX2xlbik7CisKIAkJYnJlYWs7CiAJY2FzZSBNQUlOVEVOQU5DRV9JTjoKIAkJc2EgPSBjZGJwWzFdICYgMHgxZjsKQEAgLTM0OSw2ICszNDYsOSBAQAogewogCWludCBrOwogCisJaWYgKGNtZC0+Y21uZCA9PSBOVUxMKQorCQlyZXR1cm47CisKIAlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwgIkNEQjogIik7CiAJcHJpbnRfb3Bjb2RlX25hbWUoY21kLT5jbW5kLCBjbWQtPmNtZF9sZW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYwppbmRleCA5NjljODMxLi40MTI4NTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMKQEAgLTU5MSw4ICs1OTEsNyBAQAogCWN4Z2IzaV9jb25uX21heF9yZWN2X2RsZW5ndGgoY29ubik7CiAKIAlzcGluX2xvY2tfYmgoJmNvbm4tPnNlc3Npb24tPmxvY2spOwotCXNwcmludGYoY29ubi0+cG9ydGFsX2FkZHJlc3MsIE5JUFFVQURfRk1ULAotCQlOSVBRVUFEKGMzY24tPmRhZGRyLnNpbl9hZGRyLnNfYWRkcikpOworCXNwcmludGYoY29ubi0+cG9ydGFsX2FkZHJlc3MsICIlcEk0IiwgJmMzY24tPmRhZGRyLnNpbl9hZGRyLnNfYWRkcik7CiAJY29ubi0+cG9ydGFsX3BvcnQgPSBudG9ocyhjM2NuLT5kYWRkci5zaW5fcG9ydCk7CiAJc3Bpbl91bmxvY2tfYmgoJmNvbm4tPnNlc3Npb24tPmxvY2spOwogCkBAIC03MDksNiArNzA4LDEyIEBACiB7CiAJc3RydWN0IGN4Z2IzaV9oYmEgKmhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CiAKKwlpZiAoIWhiYS0+bmRldikgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHNob3N0LCAiQ291bGQgbm90IHNldCBob3N0IHBhcmFtLiAiCisJCQkgICAgICJOZXRkZXYgZm9yIGhvc3Qgbm90IHNldC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAljeGdiM2lfYXBpX2RlYnVnKCJwYXJhbSAlZCwgYnVmICVzLlxuIiwgcGFyYW0sIGJ1Zik7CiAKIAlzd2l0Y2ggKHBhcmFtKSB7CkBAIC03MzksNiArNzQ0LDEyIEBACiAJc3RydWN0IGN4Z2IzaV9oYmEgKmhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CiAJaW50IGxlbiA9IDA7CiAKKwlpZiAoIWhiYS0+bmRldikgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHNob3N0LCAiQ291bGQgbm90IHNldCBob3N0IHBhcmFtLiAiCisJCQkgICAgICJOZXRkZXYgZm9yIGhvc3Qgbm90IHNldC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAljeGdiM2lfYXBpX2RlYnVnKCJoYmEgJXMsIHBhcmFtICVkLlxuIiwgaGJhLT5uZGV2LT5uYW1lLCBwYXJhbSk7CiAKIAlzd2l0Y2ggKHBhcmFtKSB7CkBAIC03NTMsNyArNzY0LDcgQEAKIAkJX19iZTMyIGFkZHI7CiAKIAkJYWRkciA9IGN4Z2IzaV9nZXRfcHJpdmF0ZV9pcHY0YWRkcihoYmEtPm5kZXYpOwotCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgTklQUVVBRF9GTVQsIE5JUFFVQUQoYWRkcikpOworCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVwSTQiLCAmYWRkcik7CiAJCWJyZWFrOwogCX0KIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jCmluZGV4IDE1YTAwZTguLjNlMDhjNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMKQEAgLTE2NzUsMTAgKzE2NzUsMTEgQEAKIAl9IGVsc2UKIAkJYzNjbi0+c2FkZHIuc2luX2FkZHIuc19hZGRyID0gc2lwdjQ7CiAKLQljM2NuX2Nvbm5fZGVidWcoImMzY24gMHglcCwgJXUuJXUuJXUuJXUsJXUtJXUuJXUuJXUuJXUsJXUgU1lOX1NFTlQuXG4iLAotCQkJYzNjbiwgTklQUVVBRChjM2NuLT5zYWRkci5zaW5fYWRkci5zX2FkZHIpLAorCWMzY25fY29ubl9kZWJ1ZygiYzNjbiAweCVwLCAlcEk0LCV1LSVwSTQsJXUgU1lOX1NFTlQuXG4iLAorCQkJYzNjbiwKKwkJCSZjM2NuLT5zYWRkci5zaW5fYWRkci5zX2FkZHIsCiAJCQludG9ocyhjM2NuLT5zYWRkci5zaW5fcG9ydCksCi0JCQlOSVBRVUFEKGMzY24tPmRhZGRyLnNpbl9hZGRyLnNfYWRkciksCisJCQkmYzNjbi0+ZGFkZHIuc2luX2FkZHIuc19hZGRyLAogCQkJbnRvaHMoYzNjbi0+ZGFkZHIuc2luX3BvcnQpKTsKIAogCWMzY25fc2V0X3N0YXRlKGMzY24sIEMzQ05fU1RBVEVfQ09OTkVDVElORyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9wZHUuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX3BkdS5jCmluZGV4IDFmZTNiMGYuLjljMzg1MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX3BkdS5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX3BkdS5jCkBAIC00NjEsMTAgKzQ2MSw4IEBACiAJCXNrYiA9IHNrYl9wZWVrKCZjM2NuLT5yZWNlaXZlX3F1ZXVlKTsKIAl9CiAJcmVhZF91bmxvY2soJmMzY24tPmNhbGxiYWNrX2xvY2spOwotCWlmIChjM2NuKSB7Ci0JCWMzY24tPmNvcGllZF9zZXEgKz0gcmVhZDsKLQkJY3hnYjNpX2MzY25fcnhfY3JlZGl0cyhjM2NuLCByZWFkKTsKLQl9CisJYzNjbi0+Y29waWVkX3NlcSArPSByZWFkOworCWN4Z2IzaV9jM2NuX3J4X2NyZWRpdHMoYzNjbiwgcmVhZCk7CiAJY29ubi0+cnhkYXRhX29jdGV0cyArPSByZWFkOwogCiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCmluZGV4IDRmMGQwMTMuLmJjOWU5NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKQEAgLTcxNyw2ICs3MTcsOCBAQAogCXsiSUJNIiwgIjIxNDUiIH0sCiAJeyJQaWxsYXIiLCAiQXhpb20iIH0sCiAJeyJJbnRlbCIsICJNdWx0aS1GbGV4In0sCisJeyJORVRBUFAiLCAiTFVOIn0sCisJeyJBSVgiLCAiTlZESVNLIn0sCiAJe05VTEwsIE5VTEx9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZWF0YS5jIGIvZHJpdmVycy9zY3NpL2VhdGEuYwppbmRleCBjNzA3NmNlLi4zYzVhYmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZWF0YS5jCisrKyBiL2RyaXZlcnMvc2NzaS9lYXRhLmMKQEAgLTE1MDksNyArMTUwOSw3IEBACiAJY2hhciAqY3VyID0gc3RyOwogCWludCBpID0gMTsKIAotCXdoaWxlIChjdXIgJiYgaXNkaWdpdCgqY3VyKSAmJiBpIDw9IE1BWF9JTlRfUEFSQU0pIHsKKwl3aGlsZSAoY3VyICYmIGlzZGlnaXQoKmN1cikgJiYgaSA8IE1BWF9JTlRfUEFSQU0pIHsKIAkJaW50c1tpKytdID0gc2ltcGxlX3N0cnRvdWwoY3VyLCBOVUxMLCAwKTsKIAogCQlpZiAoKGN1ciA9IHN0cmNocihjdXIsICcsJykpICE9IE5VTEwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCmluZGV4IGE2ODBlMTguLmUyYmM3NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCkBAIC0xNDQ5LDkgKzE0NDksNiBAQAogCWlmIChvZmZzZXQgPiAxNSkKIAkJZ290byBkb19yZWplY3Q7CiAKLQlpZiAoZXNwLT5mbGFncyAmIEVTUF9GTEFHX0RJU0FCTEVfU1lOQykKLQkJb2Zmc2V0ID0gMDsKLQogCWlmIChvZmZzZXQpIHsKIAkJaW50IG9uZV9jbG9jazsKIApAQCAtMjQwNSwxMiArMjQwMiw2IEBACiAJc3RydWN0IGVzcF90YXJnZXRfZGF0YSAqdHAgPSAmZXNwLT50YXJnZXRbZGV2LT5pZF07CiAJaW50IGdvYWxfdGFncywgcXVldWVfZGVwdGg7CiAKLQlpZiAoZXNwLT5mbGFncyAmIEVTUF9GTEFHX0RJU0FCTEVfU1lOQykgewotCQkvKiBCeXBhc3MgYXN5bmMgZG9tYWluIHZhbGlkYXRpb24gKi8KLQkJZGV2LT5wcHIgID0gMDsKLQkJZGV2LT5zZHRyID0gMDsKLQl9Ci0KIAlnb2FsX3RhZ3MgPSAwOwogCiAJaWYgKGRldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewpAQCAtMjY2MCw3ICsyNjUxLDEwIEBACiAJc3RydWN0IGVzcCAqZXNwID0gc2hvc3RfcHJpdihob3N0KTsKIAlzdHJ1Y3QgZXNwX3RhcmdldF9kYXRhICp0cCA9ICZlc3AtPnRhcmdldFt0YXJnZXQtPmlkXTsKIAotCXRwLT5uZWdvX2dvYWxfb2Zmc2V0ID0gb2Zmc2V0OworCWlmIChlc3AtPmZsYWdzICYgRVNQX0ZMQUdfRElTQUJMRV9TWU5DKQorCQl0cC0+bmVnb19nb2FsX29mZnNldCA9IDA7CisJZWxzZQorCQl0cC0+bmVnb19nb2FsX29mZnNldCA9IG9mZnNldDsKIAl0cC0+ZmxhZ3MgfD0gRVNQX1RHVF9DSEVDS19ORUdPOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMKaW5kZXggMTBiZTlmMy4uMmY0N2FlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYwpAQCAtMjAwOSw2ICsyMDA5LDggQEAKIAlmY29lX2ludGVyZmFjZV9jbGVhbnVwKGZjb2UpOwogCXJ0bmxfdW5sb2NrKCk7CiAJZmNvZV9pZl9kZXN0cm95KGZjb2UtPmN0bHIubHApOworCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworCiBvdXRfcHV0ZGV2OgogCWRldl9wdXQobmV0ZGV2KTsKIG91dF9ub2RldjoKQEAgLTIwNTksNiArMjA2MSwxMSBAQAogCX0KICNlbmRpZgogCisJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dF9ub21vZDsKKwl9CisKIAlydG5sX2xvY2soKTsKIAluZXRkZXYgPSBmY29lX2lmX3RvX25ldGRldihidWZmZXIpOwogCWlmICghbmV0ZGV2KSB7CkBAIC0yMDk5LDE3ICsyMTA2LDI0IEBACiAJaWYgKCFmY29lX2xpbmtfb2sobHBvcnQpKQogCQlmY29lX2N0bHJfbGlua191cCgmZmNvZS0+Y3Rscik7CiAKLQlyYyA9IDA7Ci1vdXRfZnJlZToKIAkvKgogCSAqIFJlbGVhc2UgZnJvbSBpbml0IGluIGZjb2VfaW50ZXJmYWNlX2NyZWF0ZSgpLCBvbiBzdWNjZXNzIGxwb3J0CiAJICogc2hvdWxkIGJlIGhvbGRpbmcgYSByZWZlcmVuY2UgdGFrZW4gaW4gZmNvZV9pZl9jcmVhdGUoKS4KIAkgKi8KIAlmY29lX2ludGVyZmFjZV9wdXQoZmNvZSk7CisJZGV2X3B1dChuZXRkZXYpOworCXJ0bmxfdW5sb2NrKCk7CisJbXV0ZXhfdW5sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CisKKwlyZXR1cm4gMDsKK291dF9mcmVlOgorCWZjb2VfaW50ZXJmYWNlX3B1dChmY29lKTsKIG91dF9wdXRkZXY6CiAJZGV2X3B1dChuZXRkZXYpOwogb3V0X25vZGV2OgogCXJ0bmxfdW5sb2NrKCk7CisJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CitvdXRfbm9tb2Q6CiAJbXV0ZXhfdW5sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jCmluZGV4IDk4MjMyOTEuLjUxMWNiNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYworKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9saWJmY29lLmMKQEAgLTExODcsNyArMTE4Nyw3IEBACiAJCQluZXh0X3RpbWVyID0gZmlwLT5jdGxyX2thX3RpbWU7CiAKIAkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZmlwLT5wb3J0X2thX3RpbWUpKSB7Ci0JCQlmaXAtPnBvcnRfa2FfdGltZSArPSBqaWZmaWVzICsKKwkJCWZpcC0+cG9ydF9rYV90aW1lID0gamlmZmllcyArCiAJCQkJbXNlY3NfdG9famlmZmllcyhGSVBfVk5fS0FfUEVSSU9EKTsKIAkJCWZpcC0+c2VuZF9wb3J0X2thID0gMTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pYy5oIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pYy5oCmluZGV4IGJiMjA4YTYuLjM5NjZjNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaAorKysgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljLmgKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2RlZmluZSBEUlZfTkFNRQkJImZuaWMiCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkJIkNpc2NvIEZDb0UgSEJBIERyaXZlciIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAuMC4xMTIxIgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuNC4wLjk4IgogI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiOiAiCiAjZGVmaW5lIERGWCAgICAgICAgICAgICAgICAgICAgIERSVl9OQU1FICIlZDogIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfbWFpbi5jCmluZGV4IGZlMWIxMDMxLi41MDdlMjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYworKysgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYwpAQCAtNjIwLDYgKzYyMCw4IEBACiAJaWYgKGZuaWMtPmNvbmZpZy5mbGFncyAmIFZGQ0ZfRklQX0NBUEFCTEUpIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgZm5pYy0+bHBvcnQtPmhvc3QsCiAJCQkgICAgICJmaXJtd2FyZSBzdXBwb3J0cyBGSVBcbiIpOworCQkvKiBlbmFibGUgZGlyZWN0ZWQgYW5kIG11bHRpY2FzdCAqLworCQl2bmljX2Rldl9wYWNrZXRfZmlsdGVyKGZuaWMtPnZkZXYsIDEsIDEsIDAsIDAsIDApOwogCQl2bmljX2Rldl9hZGRfYWRkcihmbmljLT52ZGV2LCBGSVBfQUxMX0VOT0RFX01BQ1MpOwogCQl2bmljX2Rldl9hZGRfYWRkcihmbmljLT52ZGV2LCBmbmljLT5jdGxyLmN0bF9zcmNfYWRkcik7CiAJfSBlbHNlIHsKQEAgLTY5OCw2ICs3MDAsOCBAQAogCQlnb3RvIGVycl9vdXRfcmVtb3ZlX3Njc2lfaG9zdDsKIAl9CiAKKwlmY19scG9ydF9pbml0X3N0YXRzKGxwKTsKKwogCWZjX2xwb3J0X2NvbmZpZyhscCk7CiAKIAlpZiAoZmNfc2V0X21mcyhscCwgZm5pYy0+Y29uZmlnLm1heGRhdGFmaWVsZHNpemUgKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvdm5pY19kZXZjbWQuaCBiL2RyaXZlcnMvc2NzaS9mbmljL3ZuaWNfZGV2Y21kLmgKaW5kZXggZDYyYjkwNi4uN2M5Y2NiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2ZuaWMvdm5pY19kZXZjbWQuaAorKysgYi9kcml2ZXJzL3Njc2kvZm5pYy92bmljX2RldmNtZC5oCkBAIC05NCw3ICs5NCw3IEBACiAJQ01EX1NUQVRTX0RVTVAgICAgICAgICAgPSBfQ01EQyhfQ01EX0RJUl9XUklURSwgX0NNRF9WVFlQRV9BTEwsIDQpLAogCiAJLyogc2V0IFJ4IHBhY2tldCBmaWx0ZXI6ICh1MzIpYTA9ZmlsdGVycyAoc2VlIENNRF9QRklMVEVSXyopICovCi0JQ01EX1BBQ0tFVF9GSUxURVIJPSBfQ01EQ05XKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0VORVQsIDcpLAorCUNNRF9QQUNLRVRfRklMVEVSICAgICAgID0gX0NNRENOVyhfQ01EX0RJUl9XUklURSwgX0NNRF9WVFlQRV9BTEwsIDcpLAogCiAJLyogaGFuZyBkZXRlY3Rpb24gbm90aWZpY2F0aW9uICovCiAJQ01EX0hBTkdfTk9USUZZICAgICAgICAgPSBfQ01EQyhfQ01EX0RJUl9OT05FLCBfQ01EX1ZUWVBFX0FMTCwgOCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ2R0aC5jIGIvZHJpdmVycy9zY3NpL2dkdGguYwppbmRleCA5ZThmY2UwLi5iYTNjOTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aC5jCisrKyBiL2RyaXZlcnMvc2NzaS9nZHRoLmMKQEAgLTE0MCw0MCArMTQwLDQwIEBACiAjaW5jbHVkZSAiZ2R0aC5oIgogCiBzdGF0aWMgdm9pZCBnZHRoX2RlbGF5KGludCBtaWxsaXNlY29uZHMpOwotc3RhdGljIHZvaWQgZ2R0aF9ldmFsX21hcHBpbmcodWxvbmczMiBzaXplLCB1bG9uZzMyICpjeWxzLCBpbnQgKmhlYWRzLCBpbnQgKnNlY3MpOworc3RhdGljIHZvaWQgZ2R0aF9ldmFsX21hcHBpbmcodTMyIHNpemUsIHUzMiAqY3lscywgaW50ICpoZWFkcywgaW50ICpzZWNzKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBnZHRoX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGlycXJldHVybl90IF9fZ2R0aF9pbnRlcnJ1cHQoZ2R0aF9oYV9zdHIgKmhhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdkdGhfZnJvbV93YWl0LCBpbnQqIHBJbmRleCk7Ci1zdGF0aWMgaW50IGdkdGhfc3luY19ldmVudChnZHRoX2hhX3N0ciAqaGEsIGludCBzZXJ2aWNlLCB1bmNoYXIgaW5kZXgsCitzdGF0aWMgaW50IGdkdGhfc3luY19ldmVudChnZHRoX2hhX3N0ciAqaGEsIGludCBzZXJ2aWNlLCB1OCBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjc2lfQ21uZCAqc2NwKTsKIHN0YXRpYyBpbnQgZ2R0aF9hc3luY19ldmVudChnZHRoX2hhX3N0ciAqaGEpOwogc3RhdGljIHZvaWQgZ2R0aF9sb2dfZXZlbnQoZ2R0aF9ldnRfZGF0YSAqZHZyLCBjaGFyICpidWZmZXIpOwogCi1zdGF0aWMgdm9pZCBnZHRoX3B1dHEoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdW5jaGFyIHByaW9yaXR5KTsKK3N0YXRpYyB2b2lkIGdkdGhfcHV0cShnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLCB1OCBwcmlvcml0eSk7CiBzdGF0aWMgdm9pZCBnZHRoX25leHQoZ2R0aF9oYV9zdHIgKmhhKTsKLXN0YXRpYyBpbnQgZ2R0aF9maWxsX3Jhd19jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdW5jaGFyIGIpOworc3RhdGljIGludCBnZHRoX2ZpbGxfcmF3X2NtZChnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLCB1OCBiKTsKIHN0YXRpYyBpbnQgZ2R0aF9zcGVjaWFsX2NtZChnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwKTsKLXN0YXRpYyBnZHRoX2V2dF9zdHIgKmdkdGhfc3RvcmVfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCB1c2hvcnQgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2hvcnQgaWR4LCBnZHRoX2V2dF9kYXRhICpldnQpOworc3RhdGljIGdkdGhfZXZ0X3N0ciAqZ2R0aF9zdG9yZV9ldmVudChnZHRoX2hhX3N0ciAqaGEsIHUxNiBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBpZHgsIGdkdGhfZXZ0X2RhdGEgKmV2dCk7CiBzdGF0aWMgaW50IGdkdGhfcmVhZF9ldmVudChnZHRoX2hhX3N0ciAqaGEsIGludCBoYW5kbGUsIGdkdGhfZXZ0X3N0ciAqZXN0cik7Ci1zdGF0aWMgdm9pZCBnZHRoX3JlYWRhcHBfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCB1bmNoYXIgYXBwbGljYXRpb24sIAorc3RhdGljIHZvaWQgZ2R0aF9yZWFkYXBwX2V2ZW50KGdkdGhfaGFfc3RyICpoYSwgdTggYXBwbGljYXRpb24sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkdGhfZXZ0X3N0ciAqZXN0cik7CiBzdGF0aWMgdm9pZCBnZHRoX2NsZWFyX2V2ZW50cyh2b2lkKTsKIAogc3RhdGljIHZvaWQgZ2R0aF9jb3B5X2ludGVybmFsX2RhdGEoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgdXNob3J0IGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgdTE2IGNvdW50KTsKIHN0YXRpYyBpbnQgZ2R0aF9pbnRlcm5hbF9jYWNoZV9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCk7Ci1zdGF0aWMgaW50IGdkdGhfZmlsbF9jYWNoZV9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdXNob3J0IGhkcml2ZSk7CitzdGF0aWMgaW50IGdkdGhfZmlsbF9jYWNoZV9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdTE2IGhkcml2ZSk7CiAKIHN0YXRpYyB2b2lkIGdkdGhfZW5hYmxlX2ludChnZHRoX2hhX3N0ciAqaGEpOwogc3RhdGljIGludCBnZHRoX3Rlc3RfYnVzeShnZHRoX2hhX3N0ciAqaGEpOwogc3RhdGljIGludCBnZHRoX2dldF9jbWRfaW5kZXgoZ2R0aF9oYV9zdHIgKmhhKTsKIHN0YXRpYyB2b2lkIGdkdGhfcmVsZWFzZV9ldmVudChnZHRoX2hhX3N0ciAqaGEpOwotc3RhdGljIGludCBnZHRoX3dhaXQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgaW5kZXgsdWxvbmczMiB0aW1lKTsKLXN0YXRpYyBpbnQgZ2R0aF9pbnRlcm5hbF9jbWQoZ2R0aF9oYV9zdHIgKmhhLCB1bmNoYXIgc2VydmljZSwgdXNob3J0IG9wY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nMzIgcDEsIHVsb25nNjQgcDIsdWxvbmc2NCBwMyk7CitzdGF0aWMgaW50IGdkdGhfd2FpdChnZHRoX2hhX3N0ciAqaGEsIGludCBpbmRleCx1MzIgdGltZSk7CitzdGF0aWMgaW50IGdkdGhfaW50ZXJuYWxfY21kKGdkdGhfaGFfc3RyICpoYSwgdTggc2VydmljZSwgdTE2IG9wY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBwMSwgdTY0IHAyLHU2NCBwMyk7CiBzdGF0aWMgaW50IGdkdGhfc2VhcmNoX2RyaXZlcyhnZHRoX2hhX3N0ciAqaGEpOwotc3RhdGljIGludCBnZHRoX2FuYWx5c2VfaGRyaXZlKGdkdGhfaGFfc3RyICpoYSwgdXNob3J0IGhkcml2ZSk7CitzdGF0aWMgaW50IGdkdGhfYW5hbHlzZV9oZHJpdmUoZ2R0aF9oYV9zdHIgKmhhLCB1MTYgaGRyaXZlKTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmdkdGhfY3RyX25hbWUoZ2R0aF9oYV9zdHIgKmhhKTsKIApAQCAtMTg5LDcgKzE4OSw3IEBACiBzdGF0aWMgdm9pZCBnZHRoX3Njc2lfZG9uZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY3ApOwogCiAjaWZkZWYgREVCVUdfR0RUSAotc3RhdGljIHVuY2hhciAgIERlYnVnU3RhdGUgPSBERUJVR19HRFRIOworc3RhdGljIHU4ICAgRGVidWdTdGF0ZSA9IERFQlVHX0dEVEg7CiAKICNpZmRlZiBfX1NFUklBTF9fCiAjZGVmaW5lIE1BWF9TRVJCVUYgMTYwCkBAIC0yNzAsMzAgKzI3MCwzMCBAQAogI2VuZGlmCiAKICNpZmRlZiBHRFRIX1NUQVRJU1RJQ1MKLXN0YXRpYyB1bG9uZzMyIG1heF9ycT0wLCBtYXhfaW5kZXg9MCwgbWF4X3NnPTA7CitzdGF0aWMgdTMyIG1heF9ycT0wLCBtYXhfaW5kZXg9MCwgbWF4X3NnPTA7CiAjaWZkZWYgSU5UX0NPQUwKLXN0YXRpYyB1bG9uZzMyIG1heF9pbnRfY29hbD0wOworc3RhdGljIHUzMiBtYXhfaW50X2NvYWw9MDsKICNlbmRpZgotc3RhdGljIHVsb25nMzIgYWN0X2ludHM9MCwgYWN0X2lvcz0wLCBhY3Rfc3RhdHM9MCwgYWN0X3JxPTA7CitzdGF0aWMgdTMyIGFjdF9pbnRzPTAsIGFjdF9pb3M9MCwgYWN0X3N0YXRzPTAsIGFjdF9ycT0wOwogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGdkdGhfdGltZXI7CiAjZW5kaWYKIAotI2RlZmluZSBQVFIyVVNIT1JUKGEpICAgKHVzaG9ydCkodWxvbmcpKGEpCisjZGVmaW5lIFBUUjJVU0hPUlQoYSkgICAodTE2KSh1bnNpZ25lZCBsb25nKShhKQogI2RlZmluZSBHRFRPRkZTT0YoYSxiKSAgKHNpemVfdCkmKCgoYSopMCktPmIpCiAjZGVmaW5lIElOREVYX09LKGksdCkgICAoKGkpPEFSUkFZX1NJWkUodCkpCiAKICNkZWZpbmUgQlVTX0wyUChhLGIpICAgICgoYik+KGEpLT52aXJ0X2J1cyA/IChiLTEpOihiKSkKIAogI2lmZGVmIENPTkZJR19JU0EKLXN0YXRpYyB1bmNoYXIgICBnZHRoX2RycV90YWJbNF0gPSB7NSw2LDcsN307ICAgICAgICAgICAgLyogRFJRIHRhYmxlICovCitzdGF0aWMgdTggICBnZHRoX2RycV90YWJbNF0gPSB7NSw2LDcsN307ICAgICAgICAgICAgLyogRFJRIHRhYmxlICovCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19FSVNBKSB8fCBkZWZpbmVkKENPTkZJR19JU0EpCi1zdGF0aWMgdW5jaGFyICAgZ2R0aF9pcnFfdGFiWzZdID0gezAsMTAsMTEsMTIsMTQsMH07ICAgIC8qIElSUSB0YWJsZSAqLworc3RhdGljIHU4ICAgZ2R0aF9pcnFfdGFiWzZdID0gezAsMTAsMTEsMTIsMTQsMH07ICAgIC8qIElSUSB0YWJsZSAqLwogI2VuZGlmCi1zdGF0aWMgdW5jaGFyICAgZ2R0aF9wb2xsaW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvbGxpbmcgaWYgVFJVRSAqLworc3RhdGljIHU4ICAgZ2R0aF9wb2xsaW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvbGxpbmcgaWYgVFJVRSAqLwogc3RhdGljIGludCAgICAgIGdkdGhfY3RyX2NvdW50ICA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGNvdW50ICovCiBzdGF0aWMgTElTVF9IRUFEKGdkdGhfaW5zdGFuY2VzKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbGlzdCAqLwotc3RhdGljIHVuY2hhciAgIGdkdGhfd3JpdGVfdGhyb3VnaCA9IEZBTFNFOyAgICAgICAgICAgICAvKiB3cml0ZSB0aHJvdWdoICovCitzdGF0aWMgdTggICBnZHRoX3dyaXRlX3Rocm91Z2ggPSBGQUxTRTsgICAgICAgICAgICAgLyogd3JpdGUgdGhyb3VnaCAqLwogc3RhdGljIGdkdGhfZXZ0X3N0ciBlYnVmZmVyW01BWF9FVkVOVFNdOyAgICAgICAgICAgICAgICAvKiBldmVudCBidWZmZXIgKi8KIHN0YXRpYyBpbnQgZWxhc3RpZHg7CiBzdGF0aWMgaW50IGVvbGRpZHg7CkBAIC0zMDMsNyArMzAzLDcgQEAKICNkZWZpbmUgRE9VICAgICAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9VVCBkYXRhIGRpcmVjdGlvbiAqLwogI2RlZmluZSBETk8gICAgIERJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gZGF0YSB0cmFuc2ZlciAqLwogI2RlZmluZSBEVU4gICAgIERJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdW5rbm93biBkYXRhIGRpcmVjdGlvbiAqLwotc3RhdGljIHVuY2hhciBnZHRoX2RpcmVjdGlvbl90YWJbMHgxMDBdID0geworc3RhdGljIHU4IGdkdGhfZGlyZWN0aW9uX3RhYlsweDEwMF0gPSB7CiAgICAgRE5PLEROTyxESU4sRElOLERPVSxESU4sRElOLERPVSxESU4sRFVOLERPVSxET1UsRFVOLERVTixEVU4sRElOLAogICAgIEROTyxESU4sRElOLERPVSxESU4sRE9VLEROTyxETk8sRE9VLEROTyxESU4sRE5PLERJTixET1UsRE5PLERVTiwKICAgICBESU4sRFVOLERJTixEVU4sRE9VLERJTixEVU4sRFVOLERJTixESU4sRE9VLEROTyxEVU4sRElOLERPVSxET1UsCkBAIC0zOTAsNyArMzkwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZ2R0aF9jbW5kaW5mbyAqZ2R0aF9nZXRfY21uZGluZm8oZ2R0aF9oYV9zdHIgKmhhKQogewogCXN0cnVjdCBnZHRoX2NtbmRpbmZvICpwcml2ID0gTlVMTDsKLQl1bG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwpAQCAtNDkzLDcgKzQ5Myw3IEBACiAgICAgcmV0dXJuIHJ2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIGdkdGhfZXZhbF9tYXBwaW5nKHVsb25nMzIgc2l6ZSwgdWxvbmczMiAqY3lscywgaW50ICpoZWFkcywgaW50ICpzZWNzKQorc3RhdGljIHZvaWQgZ2R0aF9ldmFsX21hcHBpbmcodTMyIHNpemUsIHUzMiAqY3lscywgaW50ICpoZWFkcywgaW50ICpzZWNzKQogewogICAgICpjeWxzID0gc2l6ZSAvSEVBRFMvU0VDUzsKICAgICBpZiAoKmN5bHMgPD0gTUFYQ1lMUykgewpAQCAtNTE0LDkgKzUxNCw5IEBACiAKIC8qIGNvbnRyb2xsZXIgc2VhcmNoIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KICNpZmRlZiBDT05GSUdfRUlTQQotc3RhdGljIGludCBfX2luaXQgZ2R0aF9zZWFyY2hfZWlzYSh1c2hvcnQgZWlzYV9hZHIpCitzdGF0aWMgaW50IF9faW5pdCBnZHRoX3NlYXJjaF9laXNhKHUxNiBlaXNhX2FkcikKIHsKLSAgICB1bG9uZzMyIGlkOworICAgIHUzMiBpZDsKICAgICAKICAgICBUUkFDRSgoImdkdGhfc2VhcmNoX2Vpc2EoKSBhZHIuICV4XG4iLGVpc2FfYWRyKSk7CiAgICAgaWQgPSBpbmwoZWlzYV9hZHIrSUQwUkVHKTsKQEAgLTUzMywxMyArNTMzLDEzIEBACiAjZW5kaWYgLyogQ09ORklHX0VJU0EgKi8KIAogI2lmZGVmIENPTkZJR19JU0EKLXN0YXRpYyBpbnQgX19pbml0IGdkdGhfc2VhcmNoX2lzYSh1bG9uZzMyIGJpb3NfYWRyKQorc3RhdGljIGludCBfX2luaXQgZ2R0aF9zZWFyY2hfaXNhKHUzMiBiaW9zX2FkcikKIHsKICAgICB2b2lkIF9faW9tZW0gKmFkZHI7Ci0gICAgdWxvbmczMiBpZDsKKyAgICB1MzIgaWQ7CiAKICAgICBUUkFDRSgoImdkdGhfc2VhcmNoX2lzYSgpIGJpb3MgYWRyLiAleFxuIixiaW9zX2FkcikpOwotICAgIGlmICgoYWRkciA9IGlvcmVtYXAoYmlvc19hZHIrQklPU19JRF9PRkZTLCBzaXplb2YodWxvbmczMikpKSAhPSBOVUxMKSB7CisgICAgaWYgKChhZGRyID0gaW9yZW1hcChiaW9zX2FkcitCSU9TX0lEX09GRlMsIHNpemVvZih1MzIpKSkgIT0gTlVMTCkgewogICAgICAgICBpZCA9IHJlYWRsKGFkZHIpOwogICAgICAgICBpb3VubWFwKGFkZHIpOwogICAgICAgICBpZiAoaWQgPT0gR0RUMl9JRCkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdEVDIwMDAgKi8KQEAgLTU1MSw3ICs1NTEsNyBAQAogCiAjaWZkZWYgQ09ORklHX1BDSQogCi1zdGF0aWMgYm9vbCBnZHRoX3NlYXJjaF92b3J0ZXgodXNob3J0IGRldmljZSkKK3N0YXRpYyBib29sIGdkdGhfc2VhcmNoX3ZvcnRleCh1MTYgZGV2aWNlKQogewogCWlmIChkZXZpY2UgPD0gUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjU1NSkKIAkJcmV0dXJuIHRydWU7CkBAIC02MDMsOSArNjAzLDkgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGdkdGhfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCXVzaG9ydCB2ZW5kb3IgPSBwZGV2LT52ZW5kb3I7Ci0JdXNob3J0IGRldmljZSA9IHBkZXYtPmRldmljZTsKLQl1bG9uZyBiYXNlMCwgYmFzZTEsIGJhc2UyOworCXUxNiB2ZW5kb3IgPSBwZGV2LT52ZW5kb3I7CisJdTE2IGRldmljZSA9IHBkZXYtPmRldmljZTsKKwl1bnNpZ25lZCBsb25nIGJhc2UwLCBiYXNlMSwgYmFzZTI7CiAJaW50IHJjOwogCWdkdGhfcGNpX3N0ciBnZHRoX3BjaXN0cjsKIAlnZHRoX2hhX3N0ciAqaGEgPSBOVUxMOwpAQCAtNjU4LDEwICs2NTgsMTAgQEAKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKICNpZmRlZiBDT05GSUdfRUlTQQotc3RhdGljIGludCBfX2luaXQgZ2R0aF9pbml0X2Vpc2EodXNob3J0IGVpc2FfYWRyLGdkdGhfaGFfc3RyICpoYSkKK3N0YXRpYyBpbnQgX19pbml0IGdkdGhfaW5pdF9laXNhKHUxNiBlaXNhX2FkcixnZHRoX2hhX3N0ciAqaGEpCiB7Ci0gICAgdWxvbmczMiByZXRyaWVzLGlkOwotICAgIHVuY2hhciBwcm90X3ZlcixlaXNhY2YsaSxpcnFfZm91bmQ7CisgICAgdTMyIHJldHJpZXMsaWQ7CisgICAgdTggcHJvdF92ZXIsZWlzYWNmLGksaXJxX2ZvdW5kOwogCiAgICAgVFJBQ0UoKCJnZHRoX2luaXRfZWlzYSgpIGFkci4gJXhcbiIsZWlzYV9hZHIpKTsKICAgICAKQEAgLTY4OCw3ICs2ODgsNyBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaGEtPmJtaWMgPSBlaXNhX2FkcjsKLSAgICBoYS0+YnJkX3BoeXMgPSAodWxvbmczMillaXNhX2FkciA+PiAxMjsKKyAgICBoYS0+YnJkX3BoeXMgPSAodTMyKWVpc2FfYWRyID4+IDEyOwogCiAgICAgb3V0bCgwLGVpc2FfYWRyK01BSUxCT1hSRUcpOwogICAgIG91dGwoMCxlaXNhX2FkcitNQUlMQk9YUkVHKzQpOwpAQCAtNzUyLDEyICs3NTIsMTIgQEAKICNlbmRpZiAvKiBDT05GSUdfRUlTQSAqLwogCiAjaWZkZWYgQ09ORklHX0lTQQotc3RhdGljIGludCBfX2luaXQgZ2R0aF9pbml0X2lzYSh1bG9uZzMyIGJpb3NfYWRyLGdkdGhfaGFfc3RyICpoYSkKK3N0YXRpYyBpbnQgX19pbml0IGdkdGhfaW5pdF9pc2EodTMyIGJpb3NfYWRyLGdkdGhfaGFfc3RyICpoYSkKIHsKICAgICByZWdpc3RlciBnZHQyX2RwcmFtX3N0ciBfX2lvbWVtICpkcDJfcHRyOwogICAgIGludCBpOwotICAgIHVuY2hhciBpcnFfZHJxLHByb3RfdmVyOwotICAgIHVsb25nMzIgcmV0cmllczsKKyAgICB1OCBpcnFfZHJxLHByb3RfdmVyOworICAgIHUzMiByZXRyaWVzOwogCiAgICAgVFJBQ0UoKCJnZHRoX2luaXRfaXNhKCkgYmlvcyBhZHIuICV4XG4iLGJpb3NfYWRyKSk7CiAKQEAgLTgxMiw3ICs4MTIsNyBAQAogICAgICAgICB9CiAgICAgICAgIGdkdGhfZGVsYXkoMSk7CiAgICAgfQotICAgIHByb3RfdmVyID0gKHVuY2hhcilyZWFkbCgmZHAyX3B0ci0+dS5pYy5TX0luZm9bMF0pOworICAgIHByb3RfdmVyID0gKHU4KXJlYWRsKCZkcDJfcHRyLT51LmljLlNfSW5mb1swXSk7CiAgICAgd3JpdGViKDAsICZkcDJfcHRyLT51LmljLlN0YXR1cyk7CiAgICAgd3JpdGViKDB4ZmYsICZkcDJfcHRyLT5pby5pcnFkZWwpOwogICAgIGlmIChwcm90X3ZlciAhPSBQUk9UT0NPTF9WRVJTSU9OKSB7CkBAIC04NTksOSArODU5LDkgQEAKICAgICByZWdpc3RlciBnZHQ2X2RwcmFtX3N0ciBfX2lvbWVtICpkcDZfcHRyOwogICAgIHJlZ2lzdGVyIGdkdDZjX2RwcmFtX3N0ciBfX2lvbWVtICpkcDZjX3B0cjsKICAgICByZWdpc3RlciBnZHQ2bV9kcHJhbV9zdHIgX19pb21lbSAqZHA2bV9wdHI7Ci0gICAgdWxvbmczMiByZXRyaWVzOwotICAgIHVuY2hhciBwcm90X3ZlcjsKLSAgICB1c2hvcnQgY29tbWFuZDsKKyAgICB1MzIgcmV0cmllczsKKyAgICB1OCBwcm90X3ZlcjsKKyAgICB1MTYgY29tbWFuZDsKICAgICBpbnQgaSwgZm91bmQgPSBGQUxTRTsKIAogICAgIFRSQUNFKCgiZ2R0aF9pbml0X3BjaSgpXG4iKSk7CkBAIC04NzEsNyArODcxLDcgQEAKICAgICBlbHNlCiAgICAgICAgIGhhLT5vZW1faWQgPSBPRU1fSURfSUNQOwogICAgIGhhLT5icmRfcGh5cyA9IChwZGV2LT5idXMtPm51bWJlciA8PCA4KSB8IChwZGV2LT5kZXZmbiAmIDB4ZjgpOwotICAgIGhhLT5zdHlwZSA9ICh1bG9uZzMyKXBkZXYtPmRldmljZTsKKyAgICBoYS0+c3R5cGUgPSAodTMyKXBkZXYtPmRldmljZTsKICAgICBoYS0+aXJxID0gcGRldi0+aXJxOwogICAgIGhhLT5wZGV2ID0gcGRldjsKICAgICAKQEAgLTg5MSw3ICs4OTEsNyBAQAogICAgICAgICAgICAgZm91bmQgPSBGQUxTRTsKICAgICAgICAgICAgIGZvciAoaSA9IDB4QzgwMDA7IGkgPCAweEU4MDAwOyBpICs9IDB4NDAwMCkgewogICAgICAgICAgICAgICAgIGlvdW5tYXAoaGEtPmJyZCk7Ci0gICAgICAgICAgICAgICAgaGEtPmJyZCA9IGlvcmVtYXAoaSwgc2l6ZW9mKHVzaG9ydCkpOyAKKyAgICAgICAgICAgICAgICBoYS0+YnJkID0gaW9yZW1hcChpLCBzaXplb2YodTE2KSk7IAogICAgICAgICAgICAgICAgIGlmIChoYS0+YnJkID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJHRFQtUENJOiBJbml0aWFsaXphdGlvbiBlcnJvciAoRFBNRU0gcmVtYXAgZXJyb3IpXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC05NDcsNyArOTQ3LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGdkdGhfZGVsYXkoMSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJvdF92ZXIgPSAodW5jaGFyKXJlYWRsKCZkcDZfcHRyLT51LmljLlNfSW5mb1swXSk7CisgICAgICAgIHByb3RfdmVyID0gKHU4KXJlYWRsKCZkcDZfcHRyLT51LmljLlNfSW5mb1swXSk7CiAgICAgICAgIHdyaXRlYigwLCAmZHA2X3B0ci0+dS5pYy5TX1N0YXR1cyk7CiAgICAgICAgIHdyaXRlYigweGZmLCAmZHA2X3B0ci0+aW8uaXJxZGVsKTsKICAgICAgICAgaWYgKHByb3RfdmVyICE9IFBST1RPQ09MX1ZFUlNJT04pIHsKQEAgLTEwMDAsNyArMTAwMCw3IEBACiAgICAgICAgICAgICBmb3VuZCA9IEZBTFNFOwogICAgICAgICAgICAgZm9yIChpID0gMHhDODAwMDsgaSA8IDB4RTgwMDA7IGkgKz0gMHg0MDAwKSB7CiAgICAgICAgICAgICAgICAgaW91bm1hcChoYS0+YnJkKTsKLSAgICAgICAgICAgICAgICBoYS0+YnJkID0gaW9yZW1hcChpLCBzaXplb2YodXNob3J0KSk7IAorICAgICAgICAgICAgICAgIGhhLT5icmQgPSBpb3JlbWFwKGksIHNpemVvZih1MTYpKTsgCiAgICAgICAgICAgICAgICAgaWYgKGhhLT5icmQgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBwcmludGsoIkdEVC1QQ0k6IEluaXRpYWxpemF0aW9uIGVycm9yIChEUE1FTSByZW1hcCBlcnJvcilcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTEwNTksNyArMTA1OSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBnZHRoX2RlbGF5KDEpOwogICAgICAgICB9Ci0gICAgICAgIHByb3RfdmVyID0gKHVuY2hhcilyZWFkbCgmZHA2Y19wdHItPnUuaWMuU19JbmZvWzBdKTsKKyAgICAgICAgcHJvdF92ZXIgPSAodTgpcmVhZGwoJmRwNmNfcHRyLT51LmljLlNfSW5mb1swXSk7CiAgICAgICAgIHdyaXRlYigwLCAmZHA2Y19wdHItPnUuaWMuU3RhdHVzKTsKICAgICAgICAgaWYgKHByb3RfdmVyICE9IFBST1RPQ09MX1ZFUlNJT04pIHsKICAgICAgICAgICAgIHByaW50aygiR0RULVBDSTogSWxsZWdhbCBwcm90b2NvbCB2ZXJzaW9uXG4iKTsKQEAgLTExMjgsNyArMTEyOCw3IEBACiAgICAgICAgICAgICBmb3VuZCA9IEZBTFNFOwogICAgICAgICAgICAgZm9yIChpID0gMHhDODAwMDsgaSA8IDB4RTgwMDA7IGkgKz0gMHg0MDAwKSB7CiAgICAgICAgICAgICAgICAgaW91bm1hcChoYS0+YnJkKTsKLSAgICAgICAgICAgICAgICBoYS0+YnJkID0gaW9yZW1hcChpLCBzaXplb2YodXNob3J0KSk7IAorICAgICAgICAgICAgICAgIGhhLT5icmQgPSBpb3JlbWFwKGksIHNpemVvZih1MTYpKTsgCiAgICAgICAgICAgICAgICAgaWYgKGhhLT5icmQgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBwcmludGsoIkdEVC1QQ0k6IEluaXRpYWxpemF0aW9uIGVycm9yIChEUE1FTSByZW1hcCBlcnJvcilcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTExODAsNyArMTE4MCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBnZHRoX2RlbGF5KDEpOwogICAgICAgICB9Ci0gICAgICAgIHByb3RfdmVyID0gKHVuY2hhcilyZWFkbCgmZHA2bV9wdHItPnUuaWMuU19JbmZvWzBdKTsKKyAgICAgICAgcHJvdF92ZXIgPSAodTgpcmVhZGwoJmRwNm1fcHRyLT51LmljLlNfSW5mb1swXSk7CiAgICAgICAgIHdyaXRlYigwLCAmZHA2bV9wdHItPnUuaWMuU19TdGF0dXMpOwogICAgICAgICBpZiAocHJvdF92ZXIgIT0gUFJPVE9DT0xfVkVSU0lPTikgewogICAgICAgICAgICAgcHJpbnRrKCJHRFQtUENJOiBJbGxlZ2FsIHByb3RvY29sIHZlcnNpb25cbiIpOwpAQCAtMTIyMyw3ICsxMjIzLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGdkdGhfZGVsYXkoMSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJvdF92ZXIgPSAodW5jaGFyKShyZWFkbCgmZHA2bV9wdHItPnUuaWMuU19JbmZvWzBdKSA+PiAxNik7CisgICAgICAgIHByb3RfdmVyID0gKHU4KShyZWFkbCgmZHA2bV9wdHItPnUuaWMuU19JbmZvWzBdKSA+PiAxNik7CiAgICAgICAgIHdyaXRlYigwLCAmZHA2bV9wdHItPnUuaWMuU19TdGF0dXMpOwogICAgICAgICBpZiAocHJvdF92ZXIgPCAweDJiKSAgICAgIC8qIEZXIDwgeC40Mzogbm8gNjQtYml0IERNQSBzdXBwb3J0ICovCiAgICAgICAgICAgICBoYS0+ZG1hNjRfc3VwcG9ydCA9IDA7CkBAIC0xMjM5LDcgKzEyMzksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgZ2R0aF9lbmFibGVfaW50KGdkdGhfaGFfc3RyICpoYSkKIHsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgIGdkdDJfZHByYW1fc3RyIF9faW9tZW0gKmRwMl9wdHI7CiAgICAgZ2R0Nl9kcHJhbV9zdHIgX19pb21lbSAqZHA2X3B0cjsKICAgICBnZHQ2bV9kcHJhbV9zdHIgX19pb21lbSAqZHA2bV9wdHI7CkBAIC0xMjc0LDE0ICsxMjc0LDE0IEBACiB9CiAKIC8qIHJldHVybiBJU3RhdHVzIGlmIGludGVycnVwdCB3YXMgZnJvbSB0aGlzIGNhcmQgZWxzZSAwICovCi1zdGF0aWMgdW5jaGFyIGdkdGhfZ2V0X3N0YXR1cyhnZHRoX2hhX3N0ciAqaGEpCitzdGF0aWMgdTggZ2R0aF9nZXRfc3RhdHVzKGdkdGhfaGFfc3RyICpoYSkKIHsKLSAgICB1bmNoYXIgSVN0YXR1cyA9IDA7CisgICAgdTggSVN0YXR1cyA9IDA7CiAKICAgICBUUkFDRSgoImdkdGhfZ2V0X3N0YXR1cygpIGlycSAlZCBjdHJfY291bnQgJWRcbiIsIGhhLT5pcnEsIGdkdGhfY3RyX2NvdW50KSk7CiAKICAgICAgICAgaWYgKGhhLT50eXBlID09IEdEVF9FSVNBKQotICAgICAgICAgICAgSVN0YXR1cyA9IGluYigodXNob3J0KWhhLT5ibWljICsgRURPT1JSRUcpOworICAgICAgICAgICAgSVN0YXR1cyA9IGluYigodTE2KWhhLT5ibWljICsgRURPT1JSRUcpOwogICAgICAgICBlbHNlIGlmIChoYS0+dHlwZSA9PSBHRFRfSVNBKQogICAgICAgICAgICAgSVN0YXR1cyA9CiAgICAgICAgICAgICAgICAgcmVhZGIoJigoZ2R0Ml9kcHJhbV9zdHIgX19pb21lbSAqKWhhLT5icmQpLT51LmljLkNtZF9JbmRleCk7CkBAIC0xMzI5LDcgKzEzMjksNyBAQAogICAgICAgICBpZiAoaGEtPmNtZF90YWJbaV0uY21uZCA9PSBVTlVTRURfQ01ORCkgewogICAgICAgICAgICAgaGEtPmNtZF90YWJbaV0uY21uZCA9IGhhLT5wY2NiLT5SZXF1ZXN0QnVmZmVyOwogICAgICAgICAgICAgaGEtPmNtZF90YWJbaV0uc2VydmljZSA9IGhhLT5wY2NiLT5TZXJ2aWNlOwotICAgICAgICAgICAgaGEtPnBjY2ItPkNvbW1hbmRJbmRleCA9ICh1bG9uZzMyKWkrMjsKKyAgICAgICAgICAgIGhhLT5wY2NiLT5Db21tYW5kSW5kZXggPSAodTMyKWkrMjsKICAgICAgICAgICAgIHJldHVybiAoaSsyKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEzNjIsNyArMTM2Miw3IEBACiAgICAgcmVnaXN0ZXIgZ2R0NmNfZHByYW1fc3RyIF9faW9tZW0gKmRwNmNfcHRyOwogICAgIGdkdDZfZHByYW1fc3RyIF9faW9tZW0gKmRwNl9wdHI7CiAgICAgZ2R0Ml9kcHJhbV9zdHIgX19pb21lbSAqZHAyX3B0cjsKLSAgICB1c2hvcnQgY3BfY291bnQsZHBfb2Zmc2V0LGNtZF9ubzsKKyAgICB1MTYgY3BfY291bnQsZHBfb2Zmc2V0LGNtZF9ubzsKICAgICAKICAgICBUUkFDRSgoImdkdGhfY29weV9jb21tYW5kKCkgaGFudW0gJWRcbiIsIGhhLT5oYW51bSkpOwogCkBAIC0xMzg2LDI4ICsxMzg2LDI4IEBACiAgICAgICAgIGRwMl9wdHIgPSBoYS0+YnJkOwogICAgICAgICB3cml0ZXcoZHBfb2Zmc2V0ICsgRFBNRU1fQ09NTUFORF9PRkZTRVQsCiAgICAgICAgICAgICAgICAgICAgICZkcDJfcHRyLT51LmljLmNvbW1fcXVldWVbY21kX25vXS5vZmZzZXQpOwotICAgICAgICB3cml0ZXcoKHVzaG9ydCljbWRfcHRyLT5TZXJ2aWNlLAorICAgICAgICB3cml0ZXcoKHUxNiljbWRfcHRyLT5TZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAmZHAyX3B0ci0+dS5pYy5jb21tX3F1ZXVlW2NtZF9ub10uc2Vydl9pZCk7CiAgICAgICAgIG1lbWNweV90b2lvKCZkcDJfcHRyLT51LmljLmdkdF9kcHJfY21kW2RwX29mZnNldF0sY21kX3B0cixjcF9jb3VudCk7CiAgICAgfSBlbHNlIGlmIChoYS0+dHlwZSA9PSBHRFRfUENJKSB7CiAgICAgICAgIGRwNl9wdHIgPSBoYS0+YnJkOwogICAgICAgICB3cml0ZXcoZHBfb2Zmc2V0ICsgRFBNRU1fQ09NTUFORF9PRkZTRVQsCiAgICAgICAgICAgICAgICAgICAgICZkcDZfcHRyLT51LmljLmNvbW1fcXVldWVbY21kX25vXS5vZmZzZXQpOwotICAgICAgICB3cml0ZXcoKHVzaG9ydCljbWRfcHRyLT5TZXJ2aWNlLAorICAgICAgICB3cml0ZXcoKHUxNiljbWRfcHRyLT5TZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAmZHA2X3B0ci0+dS5pYy5jb21tX3F1ZXVlW2NtZF9ub10uc2Vydl9pZCk7CiAgICAgICAgIG1lbWNweV90b2lvKCZkcDZfcHRyLT51LmljLmdkdF9kcHJfY21kW2RwX29mZnNldF0sY21kX3B0cixjcF9jb3VudCk7CiAgICAgfSBlbHNlIGlmIChoYS0+dHlwZSA9PSBHRFRfUENJTkVXKSB7CiAgICAgICAgIGRwNmNfcHRyID0gaGEtPmJyZDsKICAgICAgICAgd3JpdGV3KGRwX29mZnNldCArIERQTUVNX0NPTU1BTkRfT0ZGU0VULAogICAgICAgICAgICAgICAgICAgICAmZHA2Y19wdHItPnUuaWMuY29tbV9xdWV1ZVtjbWRfbm9dLm9mZnNldCk7Ci0gICAgICAgIHdyaXRldygodXNob3J0KWNtZF9wdHItPlNlcnZpY2UsCisgICAgICAgIHdyaXRldygodTE2KWNtZF9wdHItPlNlcnZpY2UsCiAgICAgICAgICAgICAgICAgICAgICZkcDZjX3B0ci0+dS5pYy5jb21tX3F1ZXVlW2NtZF9ub10uc2Vydl9pZCk7CiAgICAgICAgIG1lbWNweV90b2lvKCZkcDZjX3B0ci0+dS5pYy5nZHRfZHByX2NtZFtkcF9vZmZzZXRdLGNtZF9wdHIsY3BfY291bnQpOwogICAgIH0gZWxzZSBpZiAoaGEtPnR5cGUgPT0gR0RUX1BDSU1QUikgewogICAgICAgICBkcDZtX3B0ciA9IGhhLT5icmQ7CiAgICAgICAgIHdyaXRldyhkcF9vZmZzZXQgKyBEUE1FTV9DT01NQU5EX09GRlNFVCwKICAgICAgICAgICAgICAgICAgICAgJmRwNm1fcHRyLT51LmljLmNvbW1fcXVldWVbY21kX25vXS5vZmZzZXQpOwotICAgICAgICB3cml0ZXcoKHVzaG9ydCljbWRfcHRyLT5TZXJ2aWNlLAorICAgICAgICB3cml0ZXcoKHUxNiljbWRfcHRyLT5TZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAmZHA2bV9wdHItPnUuaWMuY29tbV9xdWV1ZVtjbWRfbm9dLnNlcnZfaWQpOwogICAgICAgICBtZW1jcHlfdG9pbygmZHA2bV9wdHItPnUuaWMuZ2R0X2Rwcl9jbWRbZHBfb2Zmc2V0XSxjbWRfcHRyLGNwX2NvdW50KTsKICAgICB9CkBAIC0xNDIwLDE0ICsxNDIwLDE0IEBACiAKICNpZmRlZiBHRFRIX1NUQVRJU1RJQ1MKICAgICB7Ci0gICAgICAgIHVsb25nMzIgaSxqOworICAgICAgICB1MzIgaSxqOwogICAgICAgICBmb3IgKGk9MCxqPTA7IGo8R0RUSF9NQVhDTURTOyArK2opIHsKICAgICAgICAgICAgIGlmIChoYS0+Y21kX3RhYltqXS5jbW5kICE9IFVOVVNFRF9DTU5EKQogICAgICAgICAgICAgICAgICsraTsKICAgICAgICAgfQogICAgICAgICBpZiAobWF4X2luZGV4IDwgaSkgewogICAgICAgICAgICAgbWF4X2luZGV4ID0gaTsKLSAgICAgICAgICAgIFRSQUNFMygoIkdEVDogbWF4X2luZGV4ID0gJWRcbiIsKHVzaG9ydClpKSk7CisgICAgICAgICAgICBUUkFDRTMoKCJHRFQ6IG1heF9pbmRleCA9ICVkXG4iLCh1MTYpaSkpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCkBAIC0xNDUwLDcgKzE0NTAsNyBAQAogICAgIH0KIH0KIAotc3RhdGljIGludCBnZHRoX3dhaXQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgaW5kZXgsIHVsb25nMzIgdGltZSkKK3N0YXRpYyBpbnQgZ2R0aF93YWl0KGdkdGhfaGFfc3RyICpoYSwgaW50IGluZGV4LCB1MzIgdGltZSkKIHsKICAgICBpbnQgYW5zd2VyX2ZvdW5kID0gRkFMU0U7CiAgICAgaW50IHdhaXRfaW5kZXggPSAwOwpAQCAtMTQ3Niw4ICsxNDc2LDggQEAKIH0KIAogCi1zdGF0aWMgaW50IGdkdGhfaW50ZXJuYWxfY21kKGdkdGhfaGFfc3RyICpoYSwgdW5jaGFyIHNlcnZpY2UsIHVzaG9ydCBvcGNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nMzIgcDEsIHVsb25nNjQgcDIsIHVsb25nNjQgcDMpCitzdGF0aWMgaW50IGdkdGhfaW50ZXJuYWxfY21kKGdkdGhfaGFfc3RyICpoYSwgdTggc2VydmljZSwgdTE2IG9wY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHAxLCB1NjQgcDIsIHU2NCBwMykKIHsKICAgICByZWdpc3RlciBnZHRoX2NtZF9zdHIgKmNtZF9wdHI7CiAgICAgaW50IHJldHJpZXMsaW5kZXg7CkBAIC0xNTAxLDM1ICsxNTAxLDM1IEBACiAgICAgICAgIGlmIChzZXJ2aWNlID09IENBQ0hFU0VSVklDRSkgewogICAgICAgICAgICAgaWYgKG9wY29kZSA9PSBHRFRfSU9DVEwpIHsKICAgICAgICAgICAgICAgICBjbWRfcHRyLT51LmlvY3RsLnN1YmZ1bmMgPSBwMTsKLSAgICAgICAgICAgICAgICBjbWRfcHRyLT51LmlvY3RsLmNoYW5uZWwgPSAodWxvbmczMilwMjsKLSAgICAgICAgICAgICAgICBjbWRfcHRyLT51LmlvY3RsLnBhcmFtX3NpemUgPSAodXNob3J0KXAzOworICAgICAgICAgICAgICAgIGNtZF9wdHItPnUuaW9jdGwuY2hhbm5lbCA9ICh1MzIpcDI7CisgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5pb2N0bC5wYXJhbV9zaXplID0gKHUxNilwMzsKICAgICAgICAgICAgICAgICBjbWRfcHRyLT51LmlvY3RsLnBfcGFyYW0gPSBoYS0+c2NyYXRjaF9waHlzOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoaGEtPmNhY2hlX2ZlYXQgJiBHRFRfNjRCSVQpIHsKLSAgICAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5jYWNoZTY0LkRldmljZU5vID0gKHVzaG9ydClwMTsKKyAgICAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5jYWNoZTY0LkRldmljZU5vID0gKHUxNilwMTsKICAgICAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5jYWNoZTY0LkJsb2NrTm8gID0gcDI7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5jYWNoZS5EZXZpY2VObyA9ICh1c2hvcnQpcDE7Ci0gICAgICAgICAgICAgICAgICAgIGNtZF9wdHItPnUuY2FjaGUuQmxvY2tObyAgPSAodWxvbmczMilwMjsKKyAgICAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5jYWNoZS5EZXZpY2VObyA9ICh1MTYpcDE7CisgICAgICAgICAgICAgICAgICAgIGNtZF9wdHItPnUuY2FjaGUuQmxvY2tObyAgPSAodTMyKXAyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChzZXJ2aWNlID09IFNDU0lSQVdTRVJWSUNFKSB7CiAgICAgICAgICAgICBpZiAoaGEtPnJhd19mZWF0ICYgR0RUXzY0QklUKSB7CiAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXc2NC5kaXJlY3Rpb24gID0gcDE7Ci0gICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXc2NC5idXMgICAgICAgID0gKHVuY2hhcilwMjsKLSAgICAgICAgICAgICAgICBjbWRfcHRyLT51LnJhdzY0LnRhcmdldCAgICAgPSAodW5jaGFyKXAzOwotICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3NjQubHVuICAgICAgICA9ICh1bmNoYXIpKHAzID4+IDgpOworICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3NjQuYnVzICAgICAgICA9ICh1OClwMjsKKyAgICAgICAgICAgICAgICBjbWRfcHRyLT51LnJhdzY0LnRhcmdldCAgICAgPSAodTgpcDM7CisgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXc2NC5sdW4gICAgICAgID0gKHU4KShwMyA+PiA4KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXcuZGlyZWN0aW9uICA9IHAxOwotICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3LmJ1cyAgICAgICAgPSAodW5jaGFyKXAyOwotICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3LnRhcmdldCAgICAgPSAodW5jaGFyKXAzOwotICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3Lmx1biAgICAgICAgPSAodW5jaGFyKShwMyA+PiA4KTsKKyAgICAgICAgICAgICAgICBjbWRfcHRyLT51LnJhdy5idXMgICAgICAgID0gKHU4KXAyOworICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3LnRhcmdldCAgICAgPSAodTgpcDM7CisgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXcubHVuICAgICAgICA9ICh1OCkocDMgPj4gOCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoc2VydmljZSA9PSBTQ1JFRU5TRVJWSUNFKSB7CiAgICAgICAgICAgICBpZiAob3Bjb2RlID09IEdEVF9SRUFMVElNRSkgewotICAgICAgICAgICAgICAgICoodWxvbmczMiAqKSZjbWRfcHRyLT51LnNjcmVlbi5zdS5kYXRhWzBdID0gcDE7Ci0gICAgICAgICAgICAgICAgKih1bG9uZzMyICopJmNtZF9wdHItPnUuc2NyZWVuLnN1LmRhdGFbNF0gPSAodWxvbmczMilwMjsKLSAgICAgICAgICAgICAgICAqKHVsb25nMzIgKikmY21kX3B0ci0+dS5zY3JlZW4uc3UuZGF0YVs4XSA9ICh1bG9uZzMyKXAzOworICAgICAgICAgICAgICAgICoodTMyICopJmNtZF9wdHItPnUuc2NyZWVuLnN1LmRhdGFbMF0gPSBwMTsKKyAgICAgICAgICAgICAgICAqKHUzMiAqKSZjbWRfcHRyLT51LnNjcmVlbi5zdS5kYXRhWzRdID0gKHUzMilwMjsKKyAgICAgICAgICAgICAgICAqKHUzMiAqKSZjbWRfcHRyLT51LnNjcmVlbi5zdS5kYXRhWzhdID0gKHUzMilwMzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBoYS0+Y21kX2xlbiAgICAgICAgICA9IHNpemVvZihnZHRoX2NtZF9zdHIpOwpAQCAtMTU1NSw5ICsxNTU1LDkgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgZ2R0aF9zZWFyY2hfZHJpdmVzKGdkdGhfaGFfc3RyICpoYSkKIHsKLSAgICB1c2hvcnQgY2Rldl9jbnQsIGk7CisgICAgdTE2IGNkZXZfY250LCBpOwogICAgIGludCBvazsKLSAgICB1bG9uZzMyIGJ1c19ubywgZHJ2X2NudCwgZHJ2X25vLCBqOworICAgIHUzMiBidXNfbm8sIGRydl9jbnQsIGRydl9ubywgajsKICAgICBnZHRoX2dldGNoX3N0ciAqY2huOwogICAgIGdkdGhfZHJsaXN0X3N0ciAqZHJsOwogICAgIGdkdGhfaW9jaGFuX3N0ciAqaW9jOwpAQCAtMTU3MCw4ICsxNTcwLDggQEAKICNlbmRpZgogCiAjaWZkZWYgR0RUSF9SVEMKLSAgICB1bmNoYXIgcnRjWzEyXTsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1OCBydGNbMTJdOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAjZW5kaWYgICAgIAogICAgCiAgICAgVFJBQ0UoKCJnZHRoX3NlYXJjaF9kcml2ZXMoKSBoYW51bSAlZFxuIiwgaGEtPmhhbnVtKSk7CkBAIC0xNTg0LDcgKzE1ODQsNyBAQAogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICBoYS0+c2NyZWVuX2ZlYXQgPSBHRFRfNjRCSVQ7CiAgICAgfQotICAgIGlmIChmb3JjZV9kbWEzMiB8fCAoIW9rICYmIGhhLT5zdGF0dXMgPT0gKHVzaG9ydClTX05PRlVOQykpCisgICAgaWYgKGZvcmNlX2RtYTMyIHx8ICghb2sgJiYgaGEtPnN0YXR1cyA9PSAodTE2KVNfTk9GVU5DKSkKICAgICAgICAgb2sgPSBnZHRoX2ludGVybmFsX2NtZChoYSwgU0NSRUVOU0VSVklDRSwgR0RUX0lOSVQsIDAsIDAsIDApOwogICAgIGlmICghb2spIHsKICAgICAgICAgcHJpbnRrKCJHRFQtSEEgJWQ6IEluaXRpYWxpemF0aW9uIGVycm9yIHNjcmVlbiBzZXJ2aWNlIChjb2RlICVkKVxuIiwKQEAgLTE2MDksMTEgKzE2MDksMTEgQEAKICAgICAgICAgICAgIHJ0Y1tqXSA9IENNT1NfUkVBRChqKTsKICAgICB9IHdoaWxlIChydGNbMF0gIT0gQ01PU19SRUFEKDApKTsKICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwotICAgIFRSQUNFMigoImdkdGhfc2VhcmNoX2RyaXZlcygpOiBSVEM6ICV4LyV4LyV4XG4iLCoodWxvbmczMiAqKSZydGNbMF0sCi0gICAgICAgICAgICAqKHVsb25nMzIgKikmcnRjWzRdLCAqKHVsb25nMzIgKikmcnRjWzhdKSk7CisgICAgVFJBQ0UyKCgiZ2R0aF9zZWFyY2hfZHJpdmVzKCk6IFJUQzogJXgvJXgvJXhcbiIsKih1MzIgKikmcnRjWzBdLAorICAgICAgICAgICAgKih1MzIgKikmcnRjWzRdLCAqKHUzMiAqKSZydGNbOF0pKTsKICAgICAvKiAzLiBzZW5kIHRvIGNvbnRyb2xsZXIgZmlybXdhcmUgKi8KLSAgICBnZHRoX2ludGVybmFsX2NtZChoYSwgU0NSRUVOU0VSVklDRSwgR0RUX1JFQUxUSU1FLCAqKHVsb25nMzIgKikmcnRjWzBdLAotICAgICAgICAgICAgICAgICAgICAgICoodWxvbmczMiAqKSZydGNbNF0sICoodWxvbmczMiAqKSZydGNbOF0pOworICAgIGdkdGhfaW50ZXJuYWxfY21kKGhhLCBTQ1JFRU5TRVJWSUNFLCBHRFRfUkVBTFRJTUUsICoodTMyICopJnJ0Y1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAqKHUzMiAqKSZydGNbNF0sICoodTMyICopJnJ0Y1s4XSk7CiAjZW5kaWYgIAogIAogICAgIC8qIHVuZnJlZXplIGFsbCBJT3MgKi8KQEAgLTE2MjcsNyArMTYyNyw3IEBACiAgICAgICAgIGlmIChvaykKICAgICAgICAgICAgIGhhLT5jYWNoZV9mZWF0ID0gR0RUXzY0QklUOwogICAgIH0KLSAgICBpZiAoZm9yY2VfZG1hMzIgfHwgKCFvayAmJiBoYS0+c3RhdHVzID09ICh1c2hvcnQpU19OT0ZVTkMpKQorICAgIGlmIChmb3JjZV9kbWEzMiB8fCAoIW9rICYmIGhhLT5zdGF0dXMgPT0gKHUxNilTX05PRlVOQykpCiAgICAgICAgIG9rID0gZ2R0aF9pbnRlcm5hbF9jbWQoaGEsIENBQ0hFU0VSVklDRSwgR0RUX0lOSVQsIExJTlVYX09TLCAwLCAwKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIHByaW50aygiR0RULUhBICVkOiBJbml0aWFsaXphdGlvbiBlcnJvciBjYWNoZSBzZXJ2aWNlIChjb2RlICVkKVxuIiwKQEAgLTE2MzUsNyArMTYzNSw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBUUkFDRTIoKCJnZHRoX3NlYXJjaF9kcml2ZXMoKTogQ0FDSEVTRVJWSUNFIGluaXRpYWxpemVkXG4iKSk7Ci0gICAgY2Rldl9jbnQgPSAodXNob3J0KWhhLT5pbmZvOworICAgIGNkZXZfY250ID0gKHUxNiloYS0+aW5mbzsKICAgICBoYS0+ZndfdmVycyA9IGhhLT5zZXJ2aWNlOwogCiAjaWZkZWYgSU5UX0NPQUwKQEAgLTE2NDQsNyArMTY0NCw3IEBACiAgICAgICAgIHBtb2QgPSAoZ2R0aF9wZXJmX21vZGVzICopaGEtPnBzY3JhdGNoOwogICAgICAgICBwbW9kLT52ZXJzaW9uICAgICAgICAgID0gMTsKICAgICAgICAgcG1vZC0+c3RfbW9kZSAgICAgICAgICA9IDE7ICAgIC8qIGVuYWJsZSBvbmUgc3RhdHVzIGJ1ZmZlciAqLwotICAgICAgICAqKCh1bG9uZzY0ICopJnBtb2QtPnN0X2J1ZmZfYWRkcjEpID0gaGEtPmNvYWxfc3RhdF9waHlzOworICAgICAgICAqKCh1NjQgKikmcG1vZC0+c3RfYnVmZl9hZGRyMSkgPSBoYS0+Y29hbF9zdGF0X3BoeXM7CiAgICAgICAgIHBtb2QtPnN0X2J1ZmZfaW5keDEgICAgPSBDT0FMSU5ERVg7CiAgICAgICAgIHBtb2QtPnN0X2J1ZmZfYWRkcjIgICAgPSAwOwogICAgICAgICBwbW9kLT5zdF9idWZmX3VfYWRkcjIgID0gMDsKQEAgLTE3MDUsNyArMTcwNSw3IEBACiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaGEtPmJ1c19pZFtidXNfbm9dID0gMHhmZjsKICAgICAgICAgfSAgICAgICAKLSAgICAgICAgaGEtPmJ1c19jbnQgPSAodW5jaGFyKWJ1c19ubzsKKyAgICAgICAgaGEtPmJ1c19jbnQgPSAodTgpYnVzX25vOwogICAgIH0KICAgICBUUkFDRTIoKCJnZHRoX3NlYXJjaF9kcml2ZXMoKSAlZCBjaGFubmVsc1xuIixoYS0+YnVzX2NudCkpOwogCkBAIC0xNzg5LDEyICsxNzg5LDEyIEBACiAKICAgICAgICAgLyogbG9naWNhbCBkcml2ZXMgKi8KICAgICAgICAgaWYgKGdkdGhfaW50ZXJuYWxfY21kKGhhLCBDQUNIRVNFUlZJQ0UsIEdEVF9JT0NUTCwgQ0FDSEVfRFJWX0NOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVkFMSURfQ0hBTk5FTCxzaXplb2YodWxvbmczMikpKSB7Ci0gICAgICAgICAgICBkcnZfY250ID0gKih1bG9uZzMyICopaGEtPnBzY3JhdGNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9DSEFOTkVMLHNpemVvZih1MzIpKSkgeworICAgICAgICAgICAgZHJ2X2NudCA9ICoodTMyICopaGEtPnBzY3JhdGNoOwogICAgICAgICAgICAgaWYgKGdkdGhfaW50ZXJuYWxfY21kKGhhLCBDQUNIRVNFUlZJQ0UsIEdEVF9JT0NUTCwgQ0FDSEVfRFJWX0xJU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9DSEFOTkVMLGRydl9jbnQgKiBzaXplb2YodWxvbmczMikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9DSEFOTkVMLGRydl9jbnQgKiBzaXplb2YodTMyKSkpIHsKICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZHJ2X2NudDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRydl9ubyA9ICgodWxvbmczMiAqKWhhLT5wc2NyYXRjaClbal07CisgICAgICAgICAgICAgICAgICAgIGRydl9ubyA9ICgodTMyICopaGEtPnBzY3JhdGNoKVtqXTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRydl9ubyA8IE1BWF9MRFJJVkVTKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBoYS0+aGRyW2Rydl9ub10uaXNfbG9nZHJ2ID0gVFJVRTsKICAgICAgICAgICAgICAgICAgICAgICAgIFRSQUNFMigoIkRyaXZlICVkIGlzIGxvZy4gZHJpdmVcbiIsZHJ2X25vKSk7CkBAIC0xODM4LDcgKzE4MzgsNyBAQAogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICBoYS0+cmF3X2ZlYXQgPSBHRFRfNjRCSVQ7CiAgICAgfQotICAgIGlmIChmb3JjZV9kbWEzMiB8fCAoIW9rICYmIGhhLT5zdGF0dXMgPT0gKHVzaG9ydClTX05PRlVOQykpCisgICAgaWYgKGZvcmNlX2RtYTMyIHx8ICghb2sgJiYgaGEtPnN0YXR1cyA9PSAodTE2KVNfTk9GVU5DKSkKICAgICAgICAgb2sgPSBnZHRoX2ludGVybmFsX2NtZChoYSwgU0NTSVJBV1NFUlZJQ0UsIEdEVF9JTklULCAwLCAwLCAwKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIHByaW50aygiR0RULUhBICVkOiBJbml0aWFsaXphdGlvbiBlcnJvciByYXcgc2VydmljZSAoY29kZSAlZClcbiIsCkBAIC0xODU0LDcgKzE4NTQsNyBAQAogICAgICAgICBpZiAoZ2R0aF9pbnRlcm5hbF9jbWQoaGEsIFNDU0lSQVdTRVJWSUNFLCBHRFRfR0VUX0ZFQVQsIDAsIDAsIDApKSB7CiAgICAgICAgICAgICBUUkFDRTIoKCJnZHRoX3NlYXJjaF9kcigpOiBnZXQgZmVhdCBSQVdTRVJWSUNFICVkXG4iLAogICAgICAgICAgICAgICAgICAgICBoYS0+aW5mbykpOwotICAgICAgICAgICAgaGEtPnJhd19mZWF0IHw9ICh1c2hvcnQpaGEtPmluZm87CisgICAgICAgICAgICBoYS0+cmF3X2ZlYXQgfD0gKHUxNiloYS0+aW5mbzsKICAgICAgICAgfQogICAgIH0gCiAKQEAgLTE4NjUsNyArMTg2NSw3IEBACiAgICAgICAgIGlmIChnZHRoX2ludGVybmFsX2NtZChoYSwgQ0FDSEVTRVJWSUNFLCBHRFRfR0VUX0ZFQVQsIDAsIDAsIDApKSB7CiAgICAgICAgICAgICBUUkFDRTIoKCJnZHRoX3NlYXJjaF9kcigpOiBnZXQgZmVhdCBDQUNIRVNFUlYuICVkXG4iLAogICAgICAgICAgICAgICAgICAgICBoYS0+aW5mbykpOwotICAgICAgICAgICAgaGEtPmNhY2hlX2ZlYXQgfD0gKHVzaG9ydCloYS0+aW5mbzsKKyAgICAgICAgICAgIGhhLT5jYWNoZV9mZWF0IHw9ICh1MTYpaGEtPmluZm87CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE5MjMsOSArMTkyMyw5IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgZ2R0aF9hbmFseXNlX2hkcml2ZShnZHRoX2hhX3N0ciAqaGEsIHVzaG9ydCBoZHJpdmUpCitzdGF0aWMgaW50IGdkdGhfYW5hbHlzZV9oZHJpdmUoZ2R0aF9oYV9zdHIgKmhhLCB1MTYgaGRyaXZlKQogewotICAgIHVsb25nMzIgZHJ2X2N5bHM7CisgICAgdTMyIGRydl9jeWxzOwogICAgIGludCBkcnZfaGRzLCBkcnZfc2VjczsKIAogICAgIFRSQUNFKCgiZ2R0aF9hbmFseXNlX2hkcml2ZSgpIGhhbnVtICVkIGRyaXZlICVkXG4iLCBoYS0+aGFudW0sIGhkcml2ZSkpOwpAQCAtMTk0NCwxNyArMTk0NCwxNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGRydl9oZHMgPSBoYS0+aW5mbzIgJiAweGZmOwogICAgICAgICBkcnZfc2VjcyA9IChoYS0+aW5mbzIgPj4gOCkgJiAweGZmOwotICAgICAgICBkcnZfY3lscyA9ICh1bG9uZzMyKWhhLT5oZHJbaGRyaXZlXS5zaXplIC8gZHJ2X2hkcyAvIGRydl9zZWNzOworICAgICAgICBkcnZfY3lscyA9ICh1MzIpaGEtPmhkcltoZHJpdmVdLnNpemUgLyBkcnZfaGRzIC8gZHJ2X3NlY3M7CiAgICAgfQotICAgIGhhLT5oZHJbaGRyaXZlXS5oZWFkcyA9ICh1bmNoYXIpZHJ2X2hkczsKLSAgICBoYS0+aGRyW2hkcml2ZV0uc2VjcyAgPSAodW5jaGFyKWRydl9zZWNzOworICAgIGhhLT5oZHJbaGRyaXZlXS5oZWFkcyA9ICh1OClkcnZfaGRzOworICAgIGhhLT5oZHJbaGRyaXZlXS5zZWNzICA9ICh1OClkcnZfc2VjczsKICAgICAvKiByb3VuZCBzaXplICovCiAgICAgaGEtPmhkcltoZHJpdmVdLnNpemUgID0gZHJ2X2N5bHMgKiBkcnZfaGRzICogZHJ2X3NlY3M7CiAgICAgCiAgICAgaWYgKGhhLT5jYWNoZV9mZWF0ICYgR0RUXzY0QklUKSB7CiAgICAgICAgIGlmIChnZHRoX2ludGVybmFsX2NtZChoYSwgQ0FDSEVTRVJWSUNFLCBHRFRfWF9JTkZPLCBoZHJpdmUsIDAsIDApCiAgICAgICAgICAgICAmJiBoYS0+aW5mbzIgIT0gMCkgewotICAgICAgICAgICAgaGEtPmhkcltoZHJpdmVdLnNpemUgPSAoKHVsb25nNjQpaGEtPmluZm8yIDw8IDMyKSB8IGhhLT5pbmZvOworICAgICAgICAgICAgaGEtPmhkcltoZHJpdmVdLnNpemUgPSAoKHU2NCloYS0+aW5mbzIgPDwgMzIpIHwgaGEtPmluZm87CiAgICAgICAgIH0KICAgICB9CiAgICAgVFJBQ0UyKCgiZ2R0aF9zZWFyY2hfZHIoKSBjZHIuICVkIHNpemUgJWQgaGRzICVkIHNjcyAlZFxuIiwKQEAgLTE5NjQsNyArMTk2NCw3IEBACiAgICAgaWYgKGdkdGhfaW50ZXJuYWxfY21kKGhhLCBDQUNIRVNFUlZJQ0UsIEdEVF9ERVZUWVBFLCBoZHJpdmUsIDAsIDApKSB7CiAgICAgICAgIFRSQUNFMigoImdkdGhfc2VhcmNoX2RyKCkgY2FjaGUgZHJpdmUgJWQgZGV2dHlwZSAlZFxuIiwKICAgICAgICAgICAgICAgICBoZHJpdmUsaGEtPmluZm8pKTsKLSAgICAgICAgaGEtPmhkcltoZHJpdmVdLmRldnR5cGUgPSAodXNob3J0KWhhLT5pbmZvOworICAgICAgICBoYS0+aGRyW2hkcml2ZV0uZGV2dHlwZSA9ICh1MTYpaGEtPmluZm87CiAgICAgfQogCiAgICAgLyogY2x1c3RlciBpbmZvICovCkBAIC0xOTcyLDE0ICsxOTcyLDE0IEBACiAgICAgICAgIFRSQUNFMigoImdkdGhfc2VhcmNoX2RyKCkgY2FjaGUgZHJpdmUgJWQgY2x1c3RlciBpbmZvICVkXG4iLAogICAgICAgICAgICAgICAgIGhkcml2ZSxoYS0+aW5mbykpOwogICAgICAgICBpZiAoIXNoYXJlZF9hY2Nlc3MpCi0gICAgICAgICAgICBoYS0+aGRyW2hkcml2ZV0uY2x1c3Rlcl90eXBlID0gKHVuY2hhciloYS0+aW5mbzsKKyAgICAgICAgICAgIGhhLT5oZHJbaGRyaXZlXS5jbHVzdGVyX3R5cGUgPSAodTgpaGEtPmluZm87CiAgICAgfQogCiAgICAgLyogUi9XIGF0dHJpYnV0ZXMgKi8KICAgICBpZiAoZ2R0aF9pbnRlcm5hbF9jbWQoaGEsIENBQ0hFU0VSVklDRSwgR0RUX1JXX0FUVFJJQlMsIGhkcml2ZSwgMCwgMCkpIHsKICAgICAgICAgVFJBQ0UyKCgiZ2R0aF9zZWFyY2hfZHIoKSBjYWNoZSBkcml2ZSAlZCByL3cgYXR0cmliLiAlZFxuIiwKICAgICAgICAgICAgICAgICBoZHJpdmUsaGEtPmluZm8pKTsKLSAgICAgICAgaGEtPmhkcltoZHJpdmVdLnJ3X2F0dHJpYnMgPSAodW5jaGFyKWhhLT5pbmZvOworICAgICAgICBoYS0+aGRyW2hkcml2ZV0ucndfYXR0cmlicyA9ICh1OCloYS0+aW5mbzsKICAgICB9CiAKICAgICByZXR1cm4gMTsKQEAgLTE5ODgsMTIgKzE5ODgsMTIgQEAKIAogLyogY29tbWFuZCBxdWV1ZWluZy9zZW5kaW5nIGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgdm9pZCBnZHRoX3B1dHEoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdW5jaGFyIHByaW9yaXR5KQorc3RhdGljIHZvaWQgZ2R0aF9wdXRxKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsIHU4IHByaW9yaXR5KQogewogICAgIHN0cnVjdCBnZHRoX2NtbmRpbmZvICpjbW5kaW5mbyA9IGdkdGhfY21uZF9wcml2KHNjcCk7CiAgICAgcmVnaXN0ZXIgU2NzaV9DbW5kICpwc2NwOwogICAgIHJlZ2lzdGVyIFNjc2lfQ21uZCAqbnNjcDsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAgICAgVFJBQ0UoKCJnZHRoX3B1dHEoKSBwcmlvcml0eSAlZFxuIixwcmlvcml0eSkpOwogICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKQEAgLTIwMjMsNyArMjAyMyw3IEBACiAgICAgICAgICsrZmxhZ3M7CiAgICAgaWYgKG1heF9ycSA8IGZsYWdzKSB7CiAgICAgICAgIG1heF9ycSA9IGZsYWdzOwotICAgICAgICBUUkFDRTMoKCJHRFQ6IG1heF9ycSA9ICVkXG4iLCh1c2hvcnQpbWF4X3JxKSk7CisgICAgICAgIFRSQUNFMygoIkdEVDogbWF4X3JxID0gJWRcbiIsKHUxNiltYXhfcnEpKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTIwMzIsOSArMjAzMiw5IEBACiB7CiAgICAgcmVnaXN0ZXIgU2NzaV9DbW5kICpwc2NwOwogICAgIHJlZ2lzdGVyIFNjc2lfQ21uZCAqbnNjcDsKLSAgICB1bmNoYXIgYiwgdCwgbCwgZmlyc3R0aW1lOwotICAgIHVuY2hhciB0aGlzX2NtZCwgbmV4dF9jbWQ7Ci0gICAgdWxvbmcgZmxhZ3MgPSAwOworICAgIHU4IGIsIHQsIGwsIGZpcnN0dGltZTsKKyAgICB1OCB0aGlzX2NtZCwgbmV4dF9jbWQ7CisgICAgdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAgICAgaW50IGNtZF9pbmRleDsKIAogICAgIFRSQUNFKCgiZ2R0aF9uZXh0KCkgaGFudW0gJWRcbiIsIGhhLT5oYW51bSkpOwpAQCAtMjI4MiwyMCArMjI4MiwyMCBAQAogICogYnVmZmVycywga21hcF9hdG9taWMoKSBhcyBuZWVkZWQuCiAgKi8KIHN0YXRpYyB2b2lkIGdkdGhfY29weV9pbnRlcm5hbF9kYXRhKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHVzaG9ydCBjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgdTE2IGNvdW50KQogewotICAgIHVzaG9ydCBjcGNvdW50LGksIG1heF9zZyA9IHNjc2lfc2dfY291bnQoc2NwKTsKLSAgICB1c2hvcnQgY3BzdW0sY3Bub3c7CisgICAgdTE2IGNwY291bnQsaSwgbWF4X3NnID0gc2NzaV9zZ19jb3VudChzY3ApOworICAgIHUxNiBjcHN1bSxjcG5vdzsKICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNsOwogICAgIGNoYXIgKmFkZHJlc3M7CiAKLSAgICBjcGNvdW50ID0gbWluX3QodXNob3J0LCBjb3VudCwgc2NzaV9idWZmbGVuKHNjcCkpOworICAgIGNwY291bnQgPSBtaW5fdCh1MTYsIGNvdW50LCBzY3NpX2J1ZmZsZW4oc2NwKSk7CiAKICAgICBpZiAoY3Bjb3VudCkgewogICAgICAgICBjcHN1bT0wOwogICAgICAgICBzY3NpX2Zvcl9lYWNoX3NnKHNjcCwgc2wsIG1heF9zZywgaSkgewogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICAgICAgIGNwbm93ID0gKHVzaG9ydClzbC0+bGVuZ3RoOworICAgICAgICAgICAgY3Bub3cgPSAodTE2KXNsLT5sZW5ndGg7CiAgICAgICAgICAgICBUUkFDRSgoImNvcHlfaW50ZXJuYWwoKSBub3cgJWQgc3VtICVkIGNvdW50ICVkICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjcG5vdywgY3BzdW0sIGNwY291bnQsIHNjc2lfYnVmZmxlbihzY3ApKSk7CiAgICAgICAgICAgICBpZiAoY3BzdW0rY3Bub3cgPiBjcGNvdW50KSAKQEAgLTIzMjUsNyArMjMyNSw3IEBACiAKIHN0YXRpYyBpbnQgZ2R0aF9pbnRlcm5hbF9jYWNoZV9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCkKIHsKLSAgICB1bmNoYXIgdDsKKyAgICB1OCB0OwogICAgIGdkdGhfaW5xX2RhdGEgaW5xOwogICAgIGdkdGhfcmRjYXBfZGF0YSByZGM7CiAgICAgZ2R0aF9zZW5zZV9kYXRhIHNkOwpAQCAtMjM4OSw3ICsyMzg5LDcgQEAKIAogICAgICAgY2FzZSBSRUFEX0NBUEFDSVRZOgogICAgICAgICBUUkFDRTIoKCJSZWFkIGNhcGFjaXR5IGhkcml2ZSAlZFxuIix0KSk7Ci0gICAgICAgIGlmIChoYS0+aGRyW3RdLnNpemUgPiAodWxvbmc2NCkweGZmZmZmZmZmKQorICAgICAgICBpZiAoaGEtPmhkclt0XS5zaXplID4gKHU2NCkweGZmZmZmZmZmKQogICAgICAgICAgICAgcmRjLmxhc3RfYmxvY2tfbm8gPSAweGZmZmZmZmZmOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZGMubGFzdF9ibG9ja19ubyA9IGNwdV90b19iZTMyKGhhLT5oZHJbdF0uc2l6ZS0xKTsKQEAgLTI0MjUsMTIgKzI0MjUsMTIgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZHRoX2ZpbGxfY2FjaGVfY21kKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsIHVzaG9ydCBoZHJpdmUpCitzdGF0aWMgaW50IGdkdGhfZmlsbF9jYWNoZV9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdTE2IGhkcml2ZSkKIHsKICAgICByZWdpc3RlciBnZHRoX2NtZF9zdHIgKmNtZHA7CiAgICAgc3RydWN0IGdkdGhfY21uZGluZm8gKmNtbmRpbmZvID0gZ2R0aF9jbW5kX3ByaXYoc2NwKTsKLSAgICB1bG9uZzMyIGNudCwgYmxvY2tjbnQ7Ci0gICAgdWxvbmc2NCBubywgYmxvY2tubzsKKyAgICB1MzIgY250LCBibG9ja2NudDsKKyAgICB1NjQgbm8sIGJsb2Nrbm87CiAgICAgaW50IGksIGNtZF9pbmRleCwgcmVhZF93cml0ZSwgc2djbnQsIG1vZGU2NDsKIAogICAgIGNtZHAgPSBoYS0+cGNjYjsKQEAgLTI0OTgsMTcgKzI0OTgsMTcgQEAKIAogICAgIGlmIChyZWFkX3dyaXRlKSB7CiAgICAgICAgIGlmIChzY3AtPmNtZF9sZW4gPT0gMTYpIHsKLSAgICAgICAgICAgIG1lbWNweSgmbm8sICZzY3AtPmNtbmRbMl0sIHNpemVvZih1bG9uZzY0KSk7CisgICAgICAgICAgICBtZW1jcHkoJm5vLCAmc2NwLT5jbW5kWzJdLCBzaXplb2YodTY0KSk7CiAgICAgICAgICAgICBibG9ja25vID0gYmU2NF90b19jcHUobm8pOwotICAgICAgICAgICAgbWVtY3B5KCZjbnQsICZzY3AtPmNtbmRbMTBdLCBzaXplb2YodWxvbmczMikpOworICAgICAgICAgICAgbWVtY3B5KCZjbnQsICZzY3AtPmNtbmRbMTBdLCBzaXplb2YodTMyKSk7CiAgICAgICAgICAgICBibG9ja2NudCA9IGJlMzJfdG9fY3B1KGNudCk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2NwLT5jbWRfbGVuID09IDEwKSB7Ci0gICAgICAgICAgICBtZW1jcHkoJm5vLCAmc2NwLT5jbW5kWzJdLCBzaXplb2YodWxvbmczMikpOworICAgICAgICAgICAgbWVtY3B5KCZubywgJnNjcC0+Y21uZFsyXSwgc2l6ZW9mKHUzMikpOwogICAgICAgICAgICAgYmxvY2tubyA9IGJlMzJfdG9fY3B1KG5vKTsKLSAgICAgICAgICAgIG1lbWNweSgmY250LCAmc2NwLT5jbW5kWzddLCBzaXplb2YodXNob3J0KSk7CisgICAgICAgICAgICBtZW1jcHkoJmNudCwgJnNjcC0+Y21uZFs3XSwgc2l6ZW9mKHUxNikpOwogICAgICAgICAgICAgYmxvY2tjbnQgPSBiZTE2X3RvX2NwdShjbnQpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWVtY3B5KCZubywgJnNjcC0+Y21uZFswXSwgc2l6ZW9mKHVsb25nMzIpKTsKKyAgICAgICAgICAgIG1lbWNweSgmbm8sICZzY3AtPmNtbmRbMF0sIHNpemVvZih1MzIpKTsKICAgICAgICAgICAgIGJsb2Nrbm8gPSBiZTMyX3RvX2NwdShubykgJiAweDAwMWZmZmZmVUw7CiAgICAgICAgICAgICBibG9ja2NudD0gc2NwLT5jbW5kWzRdPT0wID8gMHgxMDAgOiBzY3AtPmNtbmRbNF07CiAgICAgICAgIH0KQEAgLTI1MTYsNyArMjUxNiw3IEBACiAgICAgICAgICAgICBjbWRwLT51LmNhY2hlNjQuQmxvY2tObyA9IGJsb2Nrbm87CiAgICAgICAgICAgICBjbWRwLT51LmNhY2hlNjQuQmxvY2tDbnQgPSBibG9ja2NudDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNtZHAtPnUuY2FjaGUuQmxvY2tObyA9ICh1bG9uZzMyKWJsb2Nrbm87CisgICAgICAgICAgICBjbWRwLT51LmNhY2hlLkJsb2NrTm8gPSAodTMyKWJsb2Nrbm87CiAgICAgICAgICAgICBjbWRwLT51LmNhY2hlLkJsb2NrQ250ID0gYmxvY2tjbnQ7CiAgICAgICAgIH0KIApAQCAtMjUyOCwxMiArMjUyOCwxMiBAQAogICAgICAgICAgICAgaWYgKG1vZGU2NCkgewogICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2w7CiAKLSAgICAgICAgICAgICAgICBjbWRwLT51LmNhY2hlNjQuRGVzdEFkZHI9ICh1bG9uZzY0KS0xOworICAgICAgICAgICAgICAgIGNtZHAtPnUuY2FjaGU2NC5EZXN0QWRkcj0gKHU2NCktMTsKICAgICAgICAgICAgICAgICBjbWRwLT51LmNhY2hlNjQuc2dfY2FueiA9IHNnY250OwogICAgICAgICAgICAgICAgIHNjc2lfZm9yX2VhY2hfc2coc2NwLCBzbCwgc2djbnQsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgY21kcC0+dS5jYWNoZTY0LnNnX2xzdFtpXS5zZ19wdHIgPSBzZ19kbWFfYWRkcmVzcyhzbCk7CiAjaWZkZWYgR0RUSF9ETUFfU1RBVElTVElDUwotICAgICAgICAgICAgICAgICAgICBpZiAoY21kcC0+dS5jYWNoZTY0LnNnX2xzdFtpXS5zZ19wdHIgPiAodWxvbmc2NCkweGZmZmZmZmZmKQorICAgICAgICAgICAgICAgICAgICBpZiAoY21kcC0+dS5jYWNoZTY0LnNnX2xzdFtpXS5zZ19wdHIgPiAodTY0KTB4ZmZmZmZmZmYpCiAgICAgICAgICAgICAgICAgICAgICAgICBoYS0+ZG1hNjRfY250Kys7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGhhLT5kbWEzMl9jbnQrKzsKQEAgLTI1NTUsOCArMjU1NSw4IEBACiAgICAgICAgICAgICB9CiAKICNpZmRlZiBHRFRIX1NUQVRJU1RJQ1MKLSAgICAgICAgICAgIGlmIChtYXhfc2cgPCAodWxvbmczMilzZ2NudCkgewotICAgICAgICAgICAgICAgIG1heF9zZyA9ICh1bG9uZzMyKXNnY250OworICAgICAgICAgICAgaWYgKG1heF9zZyA8ICh1MzIpc2djbnQpIHsKKyAgICAgICAgICAgICAgICBtYXhfc2cgPSAodTMyKXNnY250OwogICAgICAgICAgICAgICAgIFRSQUNFMygoIkdEVDogbWF4X3NnID0gJWRcbiIsbWF4X3NnKSk7CiAgICAgICAgICAgICB9CiAjZW5kaWYKQEAgLTI1NzIsNyArMjU3Miw3IEBACiAgICAgICAgIFRSQUNFKCgiY2FjaGUgY21kOiBjbWQgJWQgYmxvY2tuby4gJWQsIGJsb2NrY250ICVkXG4iLAogICAgICAgICAgICAgICAgY21kcC0+T3BDb2RlLGNtZHAtPnUuY2FjaGU2NC5CbG9ja05vLGNtZHAtPnUuY2FjaGU2NC5CbG9ja0NudCkpOwogICAgICAgICBoYS0+Y21kX2xlbiA9IEdEVE9GRlNPRihnZHRoX2NtZF9zdHIsdS5jYWNoZTY0LnNnX2xzdCkgKwotICAgICAgICAgICAgKHVzaG9ydCljbWRwLT51LmNhY2hlNjQuc2dfY2FueiAqIHNpemVvZihnZHRoX3NnNjRfc3RyKTsKKyAgICAgICAgICAgICh1MTYpY21kcC0+dS5jYWNoZTY0LnNnX2NhbnogKiBzaXplb2YoZ2R0aF9zZzY0X3N0cik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgVFJBQ0UoKCJjYWNoZSBjbWQ6IGFkZHIuICV4IHNnYW56ICV4IHNncHRyMCAleCBzZ2xlbjAgJXhcbiIsCiAgICAgICAgICAgICAgICBjbWRwLT51LmNhY2hlLkRlc3RBZGRyLGNtZHAtPnUuY2FjaGUuc2dfY2FueiwKQEAgLTI1ODEsNyArMjU4MSw3IEBACiAgICAgICAgIFRSQUNFKCgiY2FjaGUgY21kOiBjbWQgJWQgYmxvY2tuby4gJWQsIGJsb2NrY250ICVkXG4iLAogICAgICAgICAgICAgICAgY21kcC0+T3BDb2RlLGNtZHAtPnUuY2FjaGUuQmxvY2tObyxjbWRwLT51LmNhY2hlLkJsb2NrQ250KSk7CiAgICAgICAgIGhhLT5jbWRfbGVuID0gR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LmNhY2hlLnNnX2xzdCkgKwotICAgICAgICAgICAgKHVzaG9ydCljbWRwLT51LmNhY2hlLnNnX2NhbnogKiBzaXplb2YoZ2R0aF9zZ19zdHIpOworICAgICAgICAgICAgKHUxNiljbWRwLT51LmNhY2hlLnNnX2NhbnogKiBzaXplb2YoZ2R0aF9zZ19zdHIpOwogICAgIH0KICAgICBpZiAoaGEtPmNtZF9sZW4gJiAzKQogICAgICAgICBoYS0+Y21kX2xlbiArPSAoNCAtIChoYS0+Y21kX2xlbiAmIDMpKTsKQEAgLTI2MDAsMTUgKzI2MDAsMTUgQEAKICAgICByZXR1cm4gY21kX2luZGV4OwogfQogCi1zdGF0aWMgaW50IGdkdGhfZmlsbF9yYXdfY21kKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsIHVuY2hhciBiKQorc3RhdGljIGludCBnZHRoX2ZpbGxfcmF3X2NtZChnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLCB1OCBiKQogewogICAgIHJlZ2lzdGVyIGdkdGhfY21kX3N0ciAqY21kcDsKLSAgICB1c2hvcnQgaTsKKyAgICB1MTYgaTsKICAgICBkbWFfYWRkcl90IHNlbnNlX3BhZGRyOwogICAgIGludCBjbWRfaW5kZXgsIHNnY250LCBtb2RlNjQ7Ci0gICAgdW5jaGFyIHQsbDsKKyAgICB1OCB0LGw7CiAgICAgc3RydWN0IHBhZ2UgKnBhZ2U7Ci0gICAgdWxvbmcgb2Zmc2V0OworICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogICAgIHN0cnVjdCBnZHRoX2NtbmRpbmZvICpjbW5kaW5mbzsKIAogICAgIHQgPSBzY3AtPmRldmljZS0+aWQ7CkBAIC0yNjU0LDcgKzI2NTQsNyBAQAogCiAgICAgfSBlbHNlIHsKICAgICAgICAgcGFnZSA9IHZpcnRfdG9fcGFnZShzY3AtPnNlbnNlX2J1ZmZlcik7Ci0gICAgICAgIG9mZnNldCA9ICh1bG9uZylzY3AtPnNlbnNlX2J1ZmZlciAmIH5QQUdFX01BU0s7CisgICAgICAgIG9mZnNldCA9ICh1bnNpZ25lZCBsb25nKXNjcC0+c2Vuc2VfYnVmZmVyICYgflBBR0VfTUFTSzsKICAgICAgICAgc2Vuc2VfcGFkZHIgPSBwY2lfbWFwX3BhZ2UoaGEtPnBkZXYscGFnZSxvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LFBDSV9ETUFfRlJPTURFVklDRSk7CiAKQEAgLTI3MDMsMTIgKzI3MDMsMTIgQEAKICAgICAgICAgICAgIGlmIChtb2RlNjQpIHsKICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNsOwogCi0gICAgICAgICAgICAgICAgY21kcC0+dS5yYXc2NC5zZGF0YSA9ICh1bG9uZzY0KS0xOworICAgICAgICAgICAgICAgIGNtZHAtPnUucmF3NjQuc2RhdGEgPSAodTY0KS0xOwogICAgICAgICAgICAgICAgIGNtZHAtPnUucmF3NjQuc2dfcmFueiA9IHNnY250OwogICAgICAgICAgICAgICAgIHNjc2lfZm9yX2VhY2hfc2coc2NwLCBzbCwgc2djbnQsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgY21kcC0+dS5yYXc2NC5zZ19sc3RbaV0uc2dfcHRyID0gc2dfZG1hX2FkZHJlc3Moc2wpOwogI2lmZGVmIEdEVEhfRE1BX1NUQVRJU1RJQ1MKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNtZHAtPnUucmF3NjQuc2dfbHN0W2ldLnNnX3B0ciA+ICh1bG9uZzY0KTB4ZmZmZmZmZmYpCisgICAgICAgICAgICAgICAgICAgIGlmIChjbWRwLT51LnJhdzY0LnNnX2xzdFtpXS5zZ19wdHIgPiAodTY0KTB4ZmZmZmZmZmYpCiAgICAgICAgICAgICAgICAgICAgICAgICBoYS0+ZG1hNjRfY250Kys7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGhhLT5kbWEzMl9jbnQrKzsKQEAgLTI3NDQsNyArMjc0NCw3IEBACiAgICAgICAgICAgICAgICAgICAgY21kcC0+dS5yYXc2NC5zZ19sc3RbMF0uc2dfbGVuKSk7CiAgICAgICAgICAgICAvKiBldmFsdWF0ZSBjb21tYW5kIHNpemUgKi8KICAgICAgICAgICAgIGhhLT5jbWRfbGVuID0gR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LnJhdzY0LnNnX2xzdCkgKwotICAgICAgICAgICAgICAgICh1c2hvcnQpY21kcC0+dS5yYXc2NC5zZ19yYW56ICogc2l6ZW9mKGdkdGhfc2c2NF9zdHIpOworICAgICAgICAgICAgICAgICh1MTYpY21kcC0+dS5yYXc2NC5zZ19yYW56ICogc2l6ZW9mKGdkdGhfc2c2NF9zdHIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgVFJBQ0UoKCJyYXcgY21kOiBhZGRyLiAleCBzZ2FueiAleCBzZ3B0cjAgJXggc2dsZW4wICV4XG4iLAogICAgICAgICAgICAgICAgICAgIGNtZHAtPnUucmF3LnNkYXRhLGNtZHAtPnUucmF3LnNnX3JhbnosCkBAIC0yNzUyLDcgKzI3NTIsNyBAQAogICAgICAgICAgICAgICAgICAgIGNtZHAtPnUucmF3LnNnX2xzdFswXS5zZ19sZW4pKTsKICAgICAgICAgICAgIC8qIGV2YWx1YXRlIGNvbW1hbmQgc2l6ZSAqLwogICAgICAgICAgICAgaGEtPmNtZF9sZW4gPSBHRFRPRkZTT0YoZ2R0aF9jbWRfc3RyLHUucmF3LnNnX2xzdCkgKwotICAgICAgICAgICAgICAgICh1c2hvcnQpY21kcC0+dS5yYXcuc2dfcmFueiAqIHNpemVvZihnZHRoX3NnX3N0cik7CisgICAgICAgICAgICAgICAgKHUxNiljbWRwLT51LnJhdy5zZ19yYW56ICogc2l6ZW9mKGdkdGhfc2dfc3RyKTsKICAgICAgICAgfQogICAgIH0KICAgICAvKiBjaGVjayBzcGFjZSAqLwpAQCAtMjgwMiw3ICsyODAyLDcgQEAKICAgICBpZiAoY21kcC0+T3BDb2RlID09IEdEVF9JT0NUTCkgewogICAgICAgICBUUkFDRTIoKCJJT0NUTFxuIikpOwogICAgICAgICBoYS0+Y21kX2xlbiA9IAotICAgICAgICAgICAgR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LmlvY3RsLnBfcGFyYW0pICsgc2l6ZW9mKHVsb25nNjQpOworICAgICAgICAgICAgR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LmlvY3RsLnBfcGFyYW0pICsgc2l6ZW9mKHU2NCk7CiAgICAgfSBlbHNlIGlmIChjbWRwLT5TZXJ2aWNlID09IENBQ0hFU0VSVklDRSkgewogICAgICAgICBUUkFDRTIoKCJjYWNoZSBjb21tYW5kICVkXG4iLGNtZHAtPk9wQ29kZSkpOwogICAgICAgICBpZiAoaGEtPmNhY2hlX2ZlYXQgJiBHRFRfNjRCSVQpCkBAIC0yODQwLDggKzI4NDAsOCBAQAogCiAKIC8qIENvbnRyb2xsZXIgZXZlbnQgaGFuZGxpbmcgZnVuY3Rpb25zICovCi1zdGF0aWMgZ2R0aF9ldnRfc3RyICpnZHRoX3N0b3JlX2V2ZW50KGdkdGhfaGFfc3RyICpoYSwgdXNob3J0IHNvdXJjZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaG9ydCBpZHgsIGdkdGhfZXZ0X2RhdGEgKmV2dCkKK3N0YXRpYyBnZHRoX2V2dF9zdHIgKmdkdGhfc3RvcmVfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCB1MTYgc291cmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGlkeCwgZ2R0aF9ldnRfZGF0YSAqZXZ0KQogewogICAgIGdkdGhfZXZ0X3N0ciAqZTsKICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKQEAgLTI4OTAsNyArMjg5MCw3IEBACiB7CiAgICAgZ2R0aF9ldnRfc3RyICplOwogICAgIGludCBlaW5kZXg7Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgIFRSQUNFMigoImdkdGhfcmVhZF9ldmVudCgpIGhhbmRsZSAlZFxuIiwgaGFuZGxlKSk7CiAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwpAQCAtMjkxOSwxMiArMjkxOSwxMiBAQAogfQogCiBzdGF0aWMgdm9pZCBnZHRoX3JlYWRhcHBfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuY2hhciBhcHBsaWNhdGlvbiwgZ2R0aF9ldnRfc3RyICplc3RyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGFwcGxpY2F0aW9uLCBnZHRoX2V2dF9zdHIgKmVzdHIpCiB7CiAgICAgZ2R0aF9ldnRfc3RyICplOwogICAgIGludCBlaW5kZXg7Ci0gICAgdWxvbmcgZmxhZ3M7Ci0gICAgdW5jaGFyIGZvdW5kID0gRkFMU0U7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICB1OCBmb3VuZCA9IEZBTFNFOwogCiAgICAgVFJBQ0UyKCgiZ2R0aF9yZWFkYXBwX2V2ZW50KCkgYXBwLiAlZFxuIiwgYXBwbGljYXRpb24pKTsKICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CkBAIC0yOTY5LDkgKzI5NjksOSBAQAogICAgIGdkdDJfZHByYW1fc3RyIF9faW9tZW0gKmRwMl9wdHI7CiAgICAgU2NzaV9DbW5kICpzY3A7CiAgICAgaW50IHJ2YWwsIGk7Ci0gICAgdW5jaGFyIElTdGF0dXM7Ci0gICAgdXNob3J0IFNlcnZpY2U7Ci0gICAgdWxvbmcgZmxhZ3MgPSAwOworICAgIHU4IElTdGF0dXM7CisgICAgdTE2IFNlcnZpY2U7CisgICAgdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAjaWZkZWYgSU5UX0NPQUwKICAgICBpbnQgY29hbGVzY2VkID0gRkFMU0U7CiAgICAgaW50IG5leHQgPSBGQUxTRTsKQEAgLTMwMTgsNyArMzAxOCw3IEBACiAgICAgICAgIGlmIChjb2FsZXNjZWQpIHsKICAgICAgICAgICAgIC8qIEZvciBjb2FsZXNjZWQgcmVxdWVzdHMgYWxsIHN0YXR1cwogICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gaXMgZm91bmQgaW4gdGhlIHN0YXR1cyBidWZmZXIgKi8KLSAgICAgICAgICAgIElTdGF0dXMgPSAodW5jaGFyKShwY3MtPnN0YXR1cyAmIDB4ZmYpOworICAgICAgICAgICAgSVN0YXR1cyA9ICh1OCkocGNzLT5zdGF0dXMgJiAweGZmKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgCkBAIC0zMTk3LDcgKzMxOTcsNyBAQAogICAgICAgICAgICAgKythY3RfaW50X2NvYWw7CiAgICAgICAgICAgICBpZiAoYWN0X2ludF9jb2FsID4gbWF4X2ludF9jb2FsKSB7CiAgICAgICAgICAgICAgICAgbWF4X2ludF9jb2FsID0gYWN0X2ludF9jb2FsOwotICAgICAgICAgICAgICAgIHByaW50aygiR0RUOiBtYXhfaW50X2NvYWwgPSAlZFxuIiwodXNob3J0KW1heF9pbnRfY29hbCk7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJHRFQ6IG1heF9pbnRfY29hbCA9ICVkXG4iLCh1MTYpbWF4X2ludF9jb2FsKTsKICAgICAgICAgICAgIH0KICNlbmRpZiAgICAgIAogICAgICAgICAgICAgLyogc2VlIGlmIHRoZXJlIGlzIGFub3RoZXIgc3RhdHVzICovCkBAIC0zMjI1LDEyICszMjI1LDEyIEBACiAJcmV0dXJuIF9fZ2R0aF9pbnRlcnJ1cHQoaGEsIGZhbHNlLCBOVUxMKTsKIH0KIAotc3RhdGljIGludCBnZHRoX3N5bmNfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgc2VydmljZSwgdW5jaGFyIGluZGV4LAorc3RhdGljIGludCBnZHRoX3N5bmNfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgc2VydmljZSwgdTggaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjc2lfQ21uZCAqc2NwKQogewogICAgIGdkdGhfbXNnX3N0ciAqbXNnOwogICAgIGdkdGhfY21kX3N0ciAqY21kcDsKLSAgICB1bmNoYXIgYiwgdDsKKyAgICB1OCBiLCB0OwogICAgIHN0cnVjdCBnZHRoX2NtbmRpbmZvICpjbW5kaW5mbyA9IGdkdGhfY21uZF9wcml2KHNjcCk7CiAKICAgICBjbWRwID0gaGEtPnBjY2I7CkBAIC0zMjYzLDcgKzMyNjMsNyBAQAogICAgICAgICAgICAgY21kcC0+dS5zY3JlZW4uc3UubXNnLm1zZ19hZGRyICA9IGhhLT5tc2dfcGh5czsKICAgICAgICAgICAgIGhhLT5jbWRfb2Zmc19kcG1lbSA9IDA7CiAgICAgICAgICAgICBoYS0+Y21kX2xlbiA9IEdEVE9GRlNPRihnZHRoX2NtZF9zdHIsdS5zY3JlZW4uc3UubXNnLm1zZ19hZGRyKSAKLSAgICAgICAgICAgICAgICArIHNpemVvZih1bG9uZzY0KTsKKyAgICAgICAgICAgICAgICArIHNpemVvZih1NjQpOwogICAgICAgICAgICAgaGEtPmNtZF9jbnQgPSAwOwogICAgICAgICAgICAgZ2R0aF9jb3B5X2NvbW1hbmQoaGEpOwogICAgICAgICAgICAgZ2R0aF9yZWxlYXNlX2V2ZW50KGhhKTsKQEAgLTMyOTcsNyArMzI5Nyw3IEBACiAgICAgICAgICAgICBjbWRwLT51LnNjcmVlbi5zdS5tc2cubXNnX2FkZHIgID0gaGEtPm1zZ19waHlzOwogICAgICAgICAgICAgaGEtPmNtZF9vZmZzX2RwbWVtID0gMDsKICAgICAgICAgICAgIGhhLT5jbWRfbGVuID0gR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LnNjcmVlbi5zdS5tc2cubXNnX2FkZHIpIAotICAgICAgICAgICAgICAgICsgc2l6ZW9mKHVsb25nNjQpOworICAgICAgICAgICAgICAgICsgc2l6ZW9mKHU2NCk7CiAgICAgICAgICAgICBoYS0+Y21kX2NudCA9IDA7CiAgICAgICAgICAgICBnZHRoX2NvcHlfY29tbWFuZChoYSk7CiAgICAgICAgICAgICBnZHRoX3JlbGVhc2VfZXZlbnQoaGEpOwpAQCAtMzMzNSw3ICszMzM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNtbmRpbmZvLT5PcENvZGUpKTsKICAgICAgICAgICAgICAgICAvKiBzcGVjaWFsIGNvbW1hbmRzIEdEVF9DTFVTVF9JTkZPL0dEVF9NT1VOVCA/ICovCiAgICAgICAgICAgICAgICAgaWYgKGNtbmRpbmZvLT5PcENvZGUgPT0gR0RUX0NMVVNUX0lORk8pIHsKLSAgICAgICAgICAgICAgICAgICAgaGEtPmhkclt0XS5jbHVzdGVyX3R5cGUgPSAodW5jaGFyKWhhLT5pbmZvOworICAgICAgICAgICAgICAgICAgICBoYS0+aGRyW3RdLmNsdXN0ZXJfdHlwZSA9ICh1OCloYS0+aW5mbzsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaGEtPmhkclt0XS5jbHVzdGVyX3R5cGUgJiAKICAgICAgICAgICAgICAgICAgICAgICAgIENMVVNURVJfTU9VTlRFRCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5PVCBNT1VOVEVEIC0+IE1PVU5UICovCkBAIC0zMzk3LDcgKzMzOTcsNyBAQAogICAgICAgICAgICAgICAgICAgICBoYS0+aGRyW3RdLmNsdXN0ZXJfdHlwZSAmPSB+Q0xVU1RFUl9SRVNFUlZFRDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWVtc2V0KChjaGFyKilzY3AtPnNlbnNlX2J1ZmZlciwwLDE2KTsKLSAgICAgICAgICAgICAgICBpZiAoaGEtPnN0YXR1cyA9PSAodXNob3J0KVNfQ0FDSEVfUkVTRVJWKSB7CisgICAgICAgICAgICAgICAgaWYgKGhhLT5zdGF0dXMgPT0gKHUxNilTX0NBQ0hFX1JFU0VSVikgewogICAgICAgICAgICAgICAgICAgICBzY3AtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpIHwgKFJFU0VSVkFUSU9OX0NPTkZMSUNUIDw8IDEpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNjcC0+c2Vuc2VfYnVmZmVyWzBdID0gMHg3MDsKQEAgLTM2MTQsMTYgKzM2MTQsMTYgQEAKICAgICAgICAgICAgIGNtZHAtPnUuc2NyZWVuLnN1Lm1zZy5tc2dfYWRkciAgPSBoYS0+bXNnX3BoeXM7CiAgICAgICAgICAgICBoYS0+Y21kX29mZnNfZHBtZW0gPSAwOwogICAgICAgICAgICAgaGEtPmNtZF9sZW4gPSBHRFRPRkZTT0YoZ2R0aF9jbWRfc3RyLHUuc2NyZWVuLnN1Lm1zZy5tc2dfYWRkcikgCi0gICAgICAgICAgICAgICAgKyBzaXplb2YodWxvbmc2NCk7CisgICAgICAgICAgICAgICAgKyBzaXplb2YodTY0KTsKICAgICAgICAgICAgIGhhLT5jbWRfY250ID0gMDsKICAgICAgICAgICAgIGdkdGhfY29weV9jb21tYW5kKGhhKTsKICAgICAgICAgICAgIGlmIChoYS0+dHlwZSA9PSBHRFRfRUlTQSkKLSAgICAgICAgICAgICAgICBwcmludGsoIltFSVNBIHNsb3QgJWRdICIsKHVzaG9ydCloYS0+YnJkX3BoeXMpOworICAgICAgICAgICAgICAgIHByaW50aygiW0VJU0Egc2xvdCAlZF0gIiwodTE2KWhhLT5icmRfcGh5cyk7CiAgICAgICAgICAgICBlbHNlIGlmIChoYS0+dHlwZSA9PSBHRFRfSVNBKQotICAgICAgICAgICAgICAgIHByaW50aygiW0RQTUVNIDB4JTRYXSAiLCh1c2hvcnQpaGEtPmJyZF9waHlzKTsKKyAgICAgICAgICAgICAgICBwcmludGsoIltEUE1FTSAweCU0WF0gIiwodTE2KWhhLT5icmRfcGh5cyk7CiAgICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgICAgIHByaW50aygiW1BDSSAlZC8lZF0gIiwodXNob3J0KShoYS0+YnJkX3BoeXM+PjgpLAotICAgICAgICAgICAgICAgICAgICAgICAodXNob3J0KSgoaGEtPmJyZF9waHlzPj4zKSYweDFmKSk7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJbUENJICVkLyVkXSAiLCh1MTYpKGhhLT5icmRfcGh5cz4+OCksCisgICAgICAgICAgICAgICAgICAgICAgICh1MTYpKChoYS0+YnJkX3BoeXM+PjMpJjB4MWYpKTsKICAgICAgICAgICAgIGdkdGhfcmVsZWFzZV9ldmVudChoYSk7CiAgICAgICAgIH0KIApAQCAtMzY0MCw3ICszNjQwLDcgQEAKICAgICAgICAgICAgIGhhLT5kdnIuZXUuYXN5bmMuc2VydmljZSA9IGhhLT5zZXJ2aWNlOwogICAgICAgICAgICAgaGEtPmR2ci5ldS5hc3luYy5zdGF0dXMgID0gaGEtPnN0YXR1czsKICAgICAgICAgICAgIGhhLT5kdnIuZXUuYXN5bmMuaW5mbyAgICA9IGhhLT5pbmZvOwotICAgICAgICAgICAgKih1bG9uZzMyICopaGEtPmR2ci5ldS5hc3luYy5zY3NpX2Nvb3JkICA9IGhhLT5pbmZvMjsKKyAgICAgICAgICAgICoodTMyICopaGEtPmR2ci5ldS5hc3luYy5zY3NpX2Nvb3JkICA9IGhhLT5pbmZvMjsKICAgICAgICAgfQogICAgICAgICBnZHRoX3N0b3JlX2V2ZW50KCBoYSwgRVNfQVNZTkMsIGhhLT5zZXJ2aWNlLCAmaGEtPmR2ciApOwogICAgICAgICBnZHRoX2xvZ19ldmVudCggJmhhLT5kdnIsIE5VTEwgKTsKQEAgLTM2NDgsOCArMzY0OCw4IEBACiAgICAgICAgIC8qIG5ldyBob3N0IGRyaXZlIGZyb20gZXhwYW5kPyAqLwogICAgICAgICBpZiAoaGEtPnNlcnZpY2UgPT0gQ0FDSEVTRVJWSUNFICYmIGhhLT5zdGF0dXMgPT0gNTYpIHsKICAgICAgICAgICAgIFRSQUNFMigoImdkdGhfYXN5bmNfZXZlbnQoKTogbmV3IGhvc3QgZHJpdmUgJWQgY3JlYXRlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKHVzaG9ydCloYS0+aW5mbykpOwotICAgICAgICAgICAgLyogZ2R0aF9hbmFseXNlX2hkcml2ZShoYW51bSwgKHVzaG9ydCloYS0+aW5mbyk7ICovCisgICAgICAgICAgICAgICAgICAgICh1MTYpaGEtPmluZm8pKTsKKyAgICAgICAgICAgIC8qIGdkdGhfYW5hbHlzZV9oZHJpdmUoaGFudW0sICh1MTYpaGEtPmluZm8pOyAqLwogICAgICAgICB9ICAgCiAgICAgfQogICAgIHJldHVybiAxOwpAQCAtMzY4MCwxMyArMzY4MCwxMyBAQAogICAgICAgICBmb3IgKGo9MCxpPTE7IGkgPCBmWzBdOyBpKz0yKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGZbaSsxXSkgewogICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgc3RhY2suYltqKytdID0gKih1bG9uZzMyKikmZHZyLT5ldS5zdHJlYW1bKGludClmW2ldXTsKKyAgICAgICAgICAgICAgICBzdGFjay5iW2orK10gPSAqKHUzMiopJmR2ci0+ZXUuc3RyZWFtWyhpbnQpZltpXV07CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICBzdGFjay5iW2orK10gPSAqKHVzaG9ydCopJmR2ci0+ZXUuc3RyZWFtWyhpbnQpZltpXV07CisgICAgICAgICAgICAgICAgc3RhY2suYltqKytdID0gKih1MTYqKSZkdnItPmV1LnN0cmVhbVsoaW50KWZbaV1dOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgc3RhY2suYltqKytdID0gKih1bmNoYXIqKSZkdnItPmV1LnN0cmVhbVsoaW50KWZbaV1dOworICAgICAgICAgICAgICAgIHN0YWNrLmJbaisrXSA9ICoodTgqKSZkdnItPmV1LnN0cmVhbVsoaW50KWZbaV1dOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzcxMiwxNCArMzcxMiwxNCBAQAogfQogCiAjaWZkZWYgR0RUSF9TVEFUSVNUSUNTCi1zdGF0aWMgdW5jaGFyCWdkdGhfdGltZXJfcnVubmluZzsKK3N0YXRpYyB1OAlnZHRoX3RpbWVyX3J1bm5pbmc7CiAKLXN0YXRpYyB2b2lkIGdkdGhfdGltZW91dCh1bG9uZyBkYXRhKQorc3RhdGljIHZvaWQgZ2R0aF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLSAgICB1bG9uZzMyIGk7CisgICAgdTMyIGk7CiAgICAgU2NzaV9DbW5kICpuc2NwOwogICAgIGdkdGhfaGFfc3RyICpoYTsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAgICAgaWYodW5saWtlbHkobGlzdF9lbXB0eSgmZ2R0aF9pbnN0YW5jZXMpKSkgewogCSAgICBnZHRoX3RpbWVyX3J1bm5pbmcgPSAwOwpAQCAtMzg5MSw4ICszODkxLDggQEAKIHsKIAlnZHRoX2hhX3N0ciAqaGEgPSBzaG9zdF9wcml2KHNjcC0+ZGV2aWNlLT5ob3N0KTsKIAlzdHJ1Y3QgZ2R0aF9jbW5kaW5mbyAqY21uZGluZm8gPSBnZHRoX2NtbmRfcHJpdihzY3ApOwotCXVuY2hhciBiLCB0OwotCXVsb25nIGZsYWdzOworCXU4IGIsIHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAllbnVtIGJsa19laF90aW1lcl9yZXR1cm4gcmV0dmFsID0gQkxLX0VIX05PVF9IQU5ETEVEOwogCiAJVFJBQ0UoKCIlcygpIGNtZCAweCV4XG4iLCBzY3AtPmNtbmRbMF0sIF9fZnVuY19fKSk7CkBAIC0zOTI0LDkgKzM5MjQsOSBAQAogewogICAgIGdkdGhfaGFfc3RyICpoYSA9IHNob3N0X3ByaXYoc2NwLT5kZXZpY2UtPmhvc3QpOwogICAgIGludCBpOwotICAgIHVsb25nIGZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgU2NzaV9DbW5kICpjbW5kOwotICAgIHVuY2hhciBiOworICAgIHU4IGI7CiAKICAgICBUUkFDRTIoKCJnZHRoX2VoX2J1c19yZXNldCgpXG4iKSk7CiAKQEAgLTM5NzQsNyArMzk3NCw3IEBACiAKIHN0YXRpYyBpbnQgZ2R0aF9iaW9zX3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldixzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LHNlY3Rvcl90IGNhcCxpbnQgKmlwKQogewotICAgIHVuY2hhciBiLCB0OworICAgIHU4IGIsIHQ7CiAgICAgZ2R0aF9oYV9zdHIgKmhhID0gc2hvc3RfcHJpdihzZGV2LT5ob3N0KTsKICAgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkOwogICAgIHVuc2lnbmVkIGNhcGFjaXR5OwpAQCAtNDA2Miw3ICs0MDYyLDcgQEAKIHsKICAgICBnZHRoX2lvY3RsX2V2ZW50IGV2dDsKICAgICBnZHRoX2hhX3N0ciAqaGE7Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgIGlmIChjb3B5X2Zyb21fdXNlcigmZXZ0LCBhcmcsIHNpemVvZihnZHRoX2lvY3RsX2V2ZW50KSkpCiAgICAgICAgIHJldHVybiAtRUZBVUxUOwpAQCAtNDA5OCw4ICs0MDk4LDggQEAKIHN0YXRpYyBpbnQgaW9jX2xvY2tkcnYodm9pZCBfX3VzZXIgKmFyZykKIHsKICAgICBnZHRoX2lvY3RsX2xvY2tkcnYgbGRydjsKLSAgICB1bmNoYXIgaSwgajsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1OCBpLCBqOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgZ2R0aF9oYV9zdHIgKmhhOwogCiAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZsZHJ2LCBhcmcsIHNpemVvZihnZHRoX2lvY3RsX2xvY2tkcnYpKSkKQEAgLTQxNjUsNyArNDE2NSw3IEBACiB7CiAgICAgZ2R0aF9pb2N0bF9nZW5lcmFsIGdlbjsKICAgICBjaGFyICpidWYgPSBOVUxMOwotICAgIHVsb25nNjQgcGFkZHI7IAorICAgIHU2NCBwYWRkcjsgCiAgICAgZ2R0aF9oYV9zdHIgKmhhOwogICAgIGludCBydmFsOwogCkBAIC00MTk0LDcgKzQxOTQsNyBAQAogICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGU2NC5EZXZpY2VObyA9IGdlbi5jb21tYW5kLnUuY2FjaGUuRGV2aWNlTm87CiAgICAgICAgICAgICAgICAgLyogYWRkcmVzc2VzICovCiAgICAgICAgICAgICAgICAgaWYgKGhhLT5jYWNoZV9mZWF0ICYgU0NBVFRFUl9HQVRIRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZTY0LkRlc3RBZGRyID0gKHVsb25nNjQpLTE7CisgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGU2NC5EZXN0QWRkciA9ICh1NjQpLTE7CiAgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGU2NC5zZ19jYW56ID0gMTsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZTY0LnNnX2xzdFswXS5zZ19wdHIgPSBwYWRkcjsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZTY0LnNnX2xzdFswXS5zZ19sZW4gPSBnZW4uZGF0YV9sZW47CkBAIC00MjA3LDcgKzQyMDcsNyBAQAogICAgICAgICAgICAgICAgIGlmIChoYS0+Y2FjaGVfZmVhdCAmIFNDQVRURVJfR0FUSEVSKSB7CiAgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGUuRGVzdEFkZHIgPSAweGZmZmZmZmZmOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LmNhY2hlLnNnX2NhbnogPSAxOwotICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LmNhY2hlLnNnX2xzdFswXS5zZ19wdHIgPSAodWxvbmczMilwYWRkcjsKKyAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZS5zZ19sc3RbMF0uc2dfcHRyID0gKHUzMilwYWRkcjsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZS5zZ19sc3RbMF0uc2dfbGVuID0gZ2VuLmRhdGFfbGVuOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LmNhY2hlLnNnX2xzdFsxXS5zZ19sZW4gPSAwOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC00MjMwLDcgKzQyMzAsNyBAQAogICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3NjQuZGlyZWN0aW9uID0gZ2VuLmNvbW1hbmQudS5yYXcuZGlyZWN0aW9uOwogICAgICAgICAgICAgICAgIC8qIGFkZHJlc3NlcyAqLwogICAgICAgICAgICAgICAgIGlmIChoYS0+cmF3X2ZlYXQgJiBTQ0FUVEVSX0dBVEhFUikgewotICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdzY0LnNkYXRhID0gKHVsb25nNjQpLTE7CisgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3NjQuc2RhdGEgPSAodTY0KS0xOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdzY0LnNnX3JhbnogPSAxOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdzY0LnNnX2xzdFswXS5zZ19wdHIgPSBwYWRkcjsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5yYXc2NC5zZ19sc3RbMF0uc2dfbGVuID0gZ2VuLmRhdGFfbGVuOwpAQCAtNDI0NCwxNCArNDI0NCwxNCBAQAogICAgICAgICAgICAgICAgIGlmIChoYS0+cmF3X2ZlYXQgJiBTQ0FUVEVSX0dBVEhFUikgewogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZGF0YSA9IDB4ZmZmZmZmZmY7CiAgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3LnNnX3JhbnogPSAxOwotICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZ19sc3RbMF0uc2dfcHRyID0gKHVsb25nMzIpcGFkZHI7CisgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3LnNnX2xzdFswXS5zZ19wdHIgPSAodTMyKXBhZGRyOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZ19sc3RbMF0uc2dfbGVuID0gZ2VuLmRhdGFfbGVuOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZ19sc3RbMV0uc2dfbGVuID0gMDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZGF0YSA9IHBhZGRyOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZ19yYW56ID0gMDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5yYXcuc2Vuc2VfZGF0YSA9ICh1bG9uZzMyKXBhZGRyICsgZ2VuLmRhdGFfbGVuOworICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3LnNlbnNlX2RhdGEgPSAodTMyKXBhZGRyICsgZ2VuLmRhdGFfbGVuOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZ2R0aF9pb2N0bF9mcmVlKGhhLCBnZW4uZGF0YV9sZW4rZ2VuLnNlbnNlX2xlbiwgYnVmLCBwYWRkcik7CkBAIC00MjgzLDcgKzQyODMsNyBAQAogICAgIGdkdGhfaW9jdGxfcmVzY2FuICpyc2M7CiAgICAgZ2R0aF9jbWRfc3RyICpjbWQ7CiAgICAgZ2R0aF9oYV9zdHIgKmhhOwotICAgIHVuY2hhciBpOworICAgIHU4IGk7CiAgICAgaW50IHJjID0gLUVOT01FTTsKICAgICB1MzIgY2x1c3Rlcl90eXBlID0gMDsKIApAQCAtNDMzNSwxMSArNDMzNSwxMSBAQAogewogICAgIGdkdGhfaW9jdGxfcmVzY2FuICpyc2M7CiAgICAgZ2R0aF9jbWRfc3RyICpjbWQ7Ci0gICAgdXNob3J0IGksIHN0YXR1cywgaGRyX2NudDsKLSAgICB1bG9uZzMyIGluZm87CisgICAgdTE2IGksIHN0YXR1cywgaGRyX2NudDsKKyAgICB1MzIgaW5mbzsKICAgICBpbnQgY3lscywgaGRzLCBzZWNzOwogICAgIGludCByYyA9IC1FTk9NRU07Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICBnZHRoX2hhX3N0ciAqaGE7IAogCiAgICAgcnNjID0ga21hbGxvYyhzaXplb2YoKnJzYyksIEdGUF9LRVJORUwpOwpAQCAtNDM2Nyw3ICs0MzY3LDcgQEAKIAogICAgICAgICBzdGF0dXMgPSBfX2dkdGhfZXhlY3V0ZShoYS0+c2RldiwgY21kLCBjbW5kLCAzMCwgJmluZm8pOwogICAgICAgICBpID0gMDsKLSAgICAgICAgaGRyX2NudCA9IChzdGF0dXMgPT0gU19PSyA/ICh1c2hvcnQpaW5mbyA6IDApOworICAgICAgICBoZHJfY250ID0gKHN0YXR1cyA9PSBTX09LID8gKHUxNilpbmZvIDogMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaSA9IHJzYy0+aGRyX25vOwogICAgICAgICBoZHJfY250ID0gaSArIDE7CkBAIC00NDE4LDcgKzQ0MTgsNyBAQAogICAgICAgICBzdGF0dXMgPSBfX2dkdGhfZXhlY3V0ZShoYS0+c2RldiwgY21kLCBjbW5kLCAzMCwgJmluZm8pOwogCiAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKLSAgICAgICAgaGEtPmhkcltpXS5kZXZ0eXBlID0gKHN0YXR1cyA9PSBTX09LID8gKHVzaG9ydClpbmZvIDogMCk7CisgICAgICAgIGhhLT5oZHJbaV0uZGV2dHlwZSA9IChzdGF0dXMgPT0gU19PSyA/ICh1MTYpaW5mbyA6IDApOwogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKIAogICAgICAgICBjbWQtPlNlcnZpY2UgPSBDQUNIRVNFUlZJQ0U7CkBAIC00NDMyLDcgKzQ0MzIsNyBAQAogCiAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKICAgICAgICAgaGEtPmhkcltpXS5jbHVzdGVyX3R5cGUgPSAKLSAgICAgICAgICAgICgoc3RhdHVzID09IFNfT0sgJiYgIXNoYXJlZF9hY2Nlc3MpID8gKHVzaG9ydClpbmZvIDogMCk7CisgICAgICAgICAgICAoKHN0YXR1cyA9PSBTX09LICYmICFzaGFyZWRfYWNjZXNzKSA/ICh1MTYpaW5mbyA6IDApOwogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKICAgICAgICAgcnNjLT5oZHJfbGlzdFtpXS5jbHVzdGVyX3R5cGUgPSBoYS0+aGRyW2ldLmNsdXN0ZXJfdHlwZTsKIApAQCAtNDQ0Niw3ICs0NDQ2LDcgQEAKICAgICAgICAgc3RhdHVzID0gX19nZHRoX2V4ZWN1dGUoaGEtPnNkZXYsIGNtZCwgY21uZCwgMzAsICZpbmZvKTsKIAogICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7Ci0gICAgICAgIGhhLT5oZHJbaV0ucndfYXR0cmlicyA9IChzdGF0dXMgPT0gU19PSyA/ICh1c2hvcnQpaW5mbyA6IDApOworICAgICAgICBoYS0+aGRyW2ldLnJ3X2F0dHJpYnMgPSAoc3RhdHVzID09IFNfT0sgPyAodTE2KWluZm8gOiAwKTsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CiAgICAgfQogIApAQCAtNDQ2Niw3ICs0NDY2LDcgQEAKIHsKICAgICBnZHRoX2hhX3N0ciAqaGE7IAogICAgIFNjc2lfQ21uZCAqc2NwOwotICAgIHVsb25nIGZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgY2hhciBjbW5kW01BWF9DT01NQU5EX1NJWkVdOyAgIAogICAgIHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCkBAIC00NDk1LDkgKzQ0OTUsOSBAQAogICAgICAgeyAKICAgICAgICAgZ2R0aF9pb2N0bF9vc3ZlcnMgb3N2OyAKIAotICAgICAgICBvc3YudmVyc2lvbiA9ICh1bmNoYXIpKExJTlVYX1ZFUlNJT05fQ09ERSA+PiAxNik7Ci0gICAgICAgIG9zdi5zdWJ2ZXJzaW9uID0gKHVuY2hhcikoTElOVVhfVkVSU0lPTl9DT0RFID4+IDgpOwotICAgICAgICBvc3YucmV2aXNpb24gPSAodXNob3J0KShMSU5VWF9WRVJTSU9OX0NPREUgJiAweGZmKTsKKyAgICAgICAgb3N2LnZlcnNpb24gPSAodTgpKExJTlVYX1ZFUlNJT05fQ09ERSA+PiAxNik7CisgICAgICAgIG9zdi5zdWJ2ZXJzaW9uID0gKHU4KShMSU5VWF9WRVJTSU9OX0NPREUgPj4gOCk7CisgICAgICAgIG9zdi5yZXZpc2lvbiA9ICh1MTYpKExJTlVYX1ZFUlNJT05fQ09ERSAmIDB4ZmYpOwogICAgICAgICBpZiAoY29weV90b191c2VyKGFyZ3AsICZvc3YsIHNpemVvZihnZHRoX2lvY3RsX29zdmVycykpKQogICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwogICAgICAgICBicmVhazsKQEAgLTQ1MTIsMTAgKzQ1MTIsMTAgQEAKICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwogCiAgICAgICAgIGlmIChoYS0+dHlwZSA9PSBHRFRfSVNBIHx8IGhhLT50eXBlID09IEdEVF9FSVNBKSB7Ci0gICAgICAgICAgICBjdHJ0LnR5cGUgPSAodW5jaGFyKSgoaGEtPnN0eXBlPj4yMCkgLSAweDEwKTsKKyAgICAgICAgICAgIGN0cnQudHlwZSA9ICh1OCkoKGhhLT5zdHlwZT4+MjApIC0gMHgxMCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoaGEtPnR5cGUgIT0gR0RUX1BDSU1QUikgewotICAgICAgICAgICAgICAgIGN0cnQudHlwZSA9ICh1bmNoYXIpKChoYS0+c3R5cGU8PDQpICsgNik7CisgICAgICAgICAgICAgICAgY3RydC50eXBlID0gKHU4KSgoaGEtPnN0eXBlPDw0KSArIDYpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBjdHJ0LnR5cGUgPSAKICAgICAgICAgICAgICAgICAgICAgKGhhLT5vZW1faWQgPT0gT0VNX0lEX0lOVEVMID8gMHhmZCA6IDB4ZmUpOwpAQCAtNDU0Niw3ICs0NTQ2LDcgQEAKICAgICAgIGNhc2UgR0RUSU9DVExfTE9DS0NITjoKICAgICAgIHsKICAgICAgICAgZ2R0aF9pb2N0bF9sb2NrY2huIGxjaG47Ci0gICAgICAgIHVuY2hhciBpLCBqOworICAgICAgICB1OCBpLCBqOwogCiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmbGNobiwgYXJncCwgc2l6ZW9mKGdkdGhfaW9jdGxfbG9ja2NobikpIHx8CiAgICAgICAgICAgICAoTlVMTCA9PSAoaGEgPSBnZHRoX2ZpbmRfaGEobGNobi5pb25vZGUpKSkpCkBAIC00NjcwLDcgKzQ2NzAsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19JU0EKLXN0YXRpYyBpbnQgX19pbml0IGdkdGhfaXNhX3Byb2JlX29uZSh1bG9uZzMyIGlzYV9iaW9zKQorc3RhdGljIGludCBfX2luaXQgZ2R0aF9pc2FfcHJvYmVfb25lKHUzMiBpc2FfYmlvcykKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHA7CiAJZ2R0aF9oYV9zdHIgKmhhOwpAQCAtNDgwMiw3ICs0ODAyLDcgQEAKICNlbmRpZiAvKiBDT05GSUdfSVNBICovCiAKICNpZmRlZiBDT05GSUdfRUlTQQotc3RhdGljIGludCBfX2luaXQgZ2R0aF9laXNhX3Byb2JlX29uZSh1c2hvcnQgZWlzYV9zbG90KQorc3RhdGljIGludCBfX2luaXQgZ2R0aF9laXNhX3Byb2JlX29uZSh1MTYgZWlzYV9zbG90KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNocDsKIAlnZHRoX2hhX3N0ciAqaGE7CkBAIC01MTIwLDcgKzUxMjAsNyBAQAogCXNjc2lfaG9zdF9wdXQoc2hwKTsKIH0KIAotc3RhdGljIGludCBnZHRoX2hhbHQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdWxvbmcgZXZlbnQsIHZvaWQgKmJ1ZikKK3N0YXRpYyBpbnQgZ2R0aF9oYWx0KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmJ1ZikKIHsKIAlnZHRoX2hhX3N0ciAqaGE7CiAKQEAgLTUxNTgsMTQgKzUxNTgsMTQgQEAKIAlpZiAocHJvYmVfZWlzYV9pc2EpIHsKIAkJLyogc2Nhbm5pbmcgZm9yIGNvbnRyb2xsZXJzLCBhdCBmaXJzdDogSVNBIGNvbnRyb2xsZXIgKi8KICNpZmRlZiBDT05GSUdfSVNBCi0JCXVsb25nMzIgaXNhX2Jpb3M7CisJCXUzMiBpc2FfYmlvczsKIAkJZm9yIChpc2FfYmlvcyA9IDB4YzgwMDBVTDsgaXNhX2Jpb3MgPD0gMHhkODAwMFVMOwogCQkgICAgICAgICAgICAgICAgaXNhX2Jpb3MgKz0gMHg4MDAwVUwpCiAJCQlnZHRoX2lzYV9wcm9iZV9vbmUoaXNhX2Jpb3MpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0VJU0EKIAkJewotCQkJdXNob3J0IGVpc2Ffc2xvdDsKKwkJCXUxNiBlaXNhX3Nsb3Q7CiAJCQlmb3IgKGVpc2Ffc2xvdCA9IDB4MTAwMDsgZWlzYV9zbG90IDw9IDB4ODAwMDsKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICBlaXNhX3Nsb3QgKz0gMHgxMDAwKQogCQkJCWdkdGhfZWlzYV9wcm9iZV9vbmUoZWlzYV9zbG90KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nZHRoLmggYi9kcml2ZXJzL3Njc2kvZ2R0aC5oCmluZGV4IDE2NDY0NDQuLjEyMGEwNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoLmgKKysrIGIvZHJpdmVycy9zY3NpL2dkdGguaApAQCAtMzIxLDUyNCArMzIxLDUyNCBAQAogCiAvKiBzY3JlZW5zZXJ2aWNlIG1lc3NhZ2UgKi8KIHR5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgdWxvbmczMiAgICAgbXNnX2hhbmRsZTsgICAgICAgICAgICAgICAgICAgICAvKiBtZXNzYWdlIGhhbmRsZSAqLwotICAgIHVsb25nMzIgICAgIG1zZ19sZW47ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBtZXNzYWdlICovCi0gICAgdWxvbmczMiAgICAgbXNnX2FsZW47ICAgICAgICAgICAgICAgICAgICAgICAvKiBhbnN3ZXIgbGVuZ3RoICovCi0gICAgdW5jaGFyICAgICAgbXNnX2Fuc3dlcjsgICAgICAgICAgICAgICAgICAgICAvKiBhbnN3ZXIgZmxhZyAqLwotICAgIHVuY2hhciAgICAgIG1zZ19leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbW9yZSBtZXNzYWdlcyAqLwotICAgIHVuY2hhciAgICAgIG1zZ19yZXNlcnZlZFsyXTsKKyAgICB1MzIgICAgIG1zZ19oYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgLyogbWVzc2FnZSBoYW5kbGUgKi8KKyAgICB1MzIgICAgIG1zZ19sZW47ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBtZXNzYWdlICovCisgICAgdTMyICAgICBtc2dfYWxlbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuc3dlciBsZW5ndGggKi8KKyAgICB1OCAgICAgIG1zZ19hbnN3ZXI7ICAgICAgICAgICAgICAgICAgICAgLyogYW5zd2VyIGZsYWcgKi8KKyAgICB1OCAgICAgIG1zZ19leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbW9yZSBtZXNzYWdlcyAqLworICAgIHU4ICAgICAgbXNnX3Jlc2VydmVkWzJdOwogICAgIGNoYXIgICAgICAgIG1zZ190ZXh0W01TR0xFTisyXTsgICAgICAgICAgICAgLyogdGhlIG1lc3NhZ2UgdGV4dCAqLwotfSBQQUNLRUQgZ2R0aF9tc2dfc3RyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX21zZ19zdHI7CiAKIAogLyogSU9DVEwgZGF0YSBzdHJ1Y3R1cmVzICovCiAKIC8qIFN0YXR1cyBjb2FsZXNjaW5nIGJ1ZmZlciBmb3IgcmV0dXJuaW5nIG11bHRpcGxlIHJlcXVlc3RzIHBlciBpbnRlcnJ1cHQgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBzdGF0dXM7Ci0gICAgdWxvbmczMiAgICAgZXh0X3N0YXR1czsKLSAgICB1bG9uZzMyICAgICBpbmZvMDsKLSAgICB1bG9uZzMyICAgICBpbmZvMTsKLX0gUEFDS0VEIGdkdGhfY29hbF9zdGF0dXM7CisgICAgdTMyICAgICBzdGF0dXM7CisgICAgdTMyICAgICBleHRfc3RhdHVzOworICAgIHUzMiAgICAgaW5mbzA7CisgICAgdTMyICAgICBpbmZvMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9jb2FsX3N0YXR1czsKIAogLyogcGVyZm9ybWFuY2UgbW9kZSBkYXRhIHN0cnVjdHVyZSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIHZlcnNpb247ICAgICAgICAgICAgLyogVGhlIHZlcnNpb24gb2YgdGhpcyBJT0NUTCBzdHJ1Y3R1cmUuICovCi0gICAgdWxvbmczMiAgICAgc3RfbW9kZTsgICAgICAgICAgICAvKiAwPWRpcy4sIDE9c3RfYnVmX2FkZHIxIHZhbGlkLCAyPWJvdGggICovCi0gICAgdWxvbmczMiAgICAgc3RfYnVmZl9hZGRyMTsgICAgICAvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIHN0YXR1cyBidWZmZXIgMSAqLwotICAgIHVsb25nMzIgICAgIHN0X2J1ZmZfdV9hZGRyMTsgICAgLyogcmVzZXJ2ZWQgZm9yIDY0IGJpdCBhZGRyZXNzaW5nICovCi0gICAgdWxvbmczMiAgICAgc3RfYnVmZl9pbmR4MTsgICAgICAvKiByZXNlcnZlZCBjb21tYW5kIGlkeC4gZm9yIHRoaXMgYnVmZmVyICovCi0gICAgdWxvbmczMiAgICAgc3RfYnVmZl9hZGRyMjsgICAgICAvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIHN0YXR1cyBidWZmZXIgMSAqLwotICAgIHVsb25nMzIgICAgIHN0X2J1ZmZfdV9hZGRyMjsgICAgLyogcmVzZXJ2ZWQgZm9yIDY0IGJpdCBhZGRyZXNzaW5nICovCi0gICAgdWxvbmczMiAgICAgc3RfYnVmZl9pbmR4MjsgICAgICAvKiByZXNlcnZlZCBjb21tYW5kIGlkeC4gZm9yIHRoaXMgYnVmZmVyICovCi0gICAgdWxvbmczMiAgICAgc3RfYnVmZl9zaXplOyAgICAgICAvKiBzaXplIG9mIGVhY2ggYnVmZmVyIGluIGJ5dGVzICovCi0gICAgdWxvbmczMiAgICAgY21kX21vZGU7ICAgICAgICAgICAvKiAwID0gbW9kZSBkaXNhYmxlZCwgMSA9IGNtZF9idWZmX2FkZHIxICovIAotICAgIHVsb25nMzIgICAgIGNtZF9idWZmX2FkZHIxOyAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQgYnVmZmVyIDEgKi8gICAKLSAgICB1bG9uZzMyICAgICBjbWRfYnVmZl91X2FkZHIxOyAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLwotICAgIHVsb25nMzIgICAgIGNtZF9idWZmX2luZHgxOyAgICAgLyogY21kIGJ1ZiBhZGRyMSB1bmlxdWUgaWRlbnRpZmllciAqLwotICAgIHVsb25nMzIgICAgIGNtZF9idWZmX2FkZHIyOyAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQgYnVmZmVyIDEgKi8gICAKLSAgICB1bG9uZzMyICAgICBjbWRfYnVmZl91X2FkZHIyOyAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLwotICAgIHVsb25nMzIgICAgIGNtZF9idWZmX2luZHgyOyAgICAgLyogY21kIGJ1ZiBhZGRyMSB1bmlxdWUgaWRlbnRpZmllciAqLwotICAgIHVsb25nMzIgICAgIGNtZF9idWZmX3NpemU7ICAgICAgLyogc2l6ZSBvZiBlYWNoIGNtZCBidWZlciBpbiBieXRlcyAqLwotICAgIHVsb25nMzIgICAgIHJlc2VydmVkMTsKLSAgICB1bG9uZzMyICAgICByZXNlcnZlZDI7Ci19IFBBQ0tFRCBnZHRoX3BlcmZfbW9kZXM7CisgICAgdTMyICAgICB2ZXJzaW9uOyAgICAgICAgICAgIC8qIFRoZSB2ZXJzaW9uIG9mIHRoaXMgSU9DVEwgc3RydWN0dXJlLiAqLworICAgIHUzMiAgICAgc3RfbW9kZTsgICAgICAgICAgICAvKiAwPWRpcy4sIDE9c3RfYnVmX2FkZHIxIHZhbGlkLCAyPWJvdGggICovCisgICAgdTMyICAgICBzdF9idWZmX2FkZHIxOyAgICAgIC8qIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3RhdHVzIGJ1ZmZlciAxICovCisgICAgdTMyICAgICBzdF9idWZmX3VfYWRkcjE7ICAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLworICAgIHUzMiAgICAgc3RfYnVmZl9pbmR4MTsgICAgICAvKiByZXNlcnZlZCBjb21tYW5kIGlkeC4gZm9yIHRoaXMgYnVmZmVyICovCisgICAgdTMyICAgICBzdF9idWZmX2FkZHIyOyAgICAgIC8qIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3RhdHVzIGJ1ZmZlciAxICovCisgICAgdTMyICAgICBzdF9idWZmX3VfYWRkcjI7ICAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLworICAgIHUzMiAgICAgc3RfYnVmZl9pbmR4MjsgICAgICAvKiByZXNlcnZlZCBjb21tYW5kIGlkeC4gZm9yIHRoaXMgYnVmZmVyICovCisgICAgdTMyICAgICBzdF9idWZmX3NpemU7ICAgICAgIC8qIHNpemUgb2YgZWFjaCBidWZmZXIgaW4gYnl0ZXMgKi8KKyAgICB1MzIgICAgIGNtZF9tb2RlOyAgICAgICAgICAgLyogMCA9IG1vZGUgZGlzYWJsZWQsIDEgPSBjbWRfYnVmZl9hZGRyMSAqLyAKKyAgICB1MzIgICAgIGNtZF9idWZmX2FkZHIxOyAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQgYnVmZmVyIDEgKi8gICAKKyAgICB1MzIgICAgIGNtZF9idWZmX3VfYWRkcjE7ICAgLyogcmVzZXJ2ZWQgZm9yIDY0IGJpdCBhZGRyZXNzaW5nICovCisgICAgdTMyICAgICBjbWRfYnVmZl9pbmR4MTsgICAgIC8qIGNtZCBidWYgYWRkcjEgdW5pcXVlIGlkZW50aWZpZXIgKi8KKyAgICB1MzIgICAgIGNtZF9idWZmX2FkZHIyOyAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQgYnVmZmVyIDEgKi8gICAKKyAgICB1MzIgICAgIGNtZF9idWZmX3VfYWRkcjI7ICAgLyogcmVzZXJ2ZWQgZm9yIDY0IGJpdCBhZGRyZXNzaW5nICovCisgICAgdTMyICAgICBjbWRfYnVmZl9pbmR4MjsgICAgIC8qIGNtZCBidWYgYWRkcjEgdW5pcXVlIGlkZW50aWZpZXIgKi8KKyAgICB1MzIgICAgIGNtZF9idWZmX3NpemU7ICAgICAgLyogc2l6ZSBvZiBlYWNoIGNtZCBidWZlciBpbiBieXRlcyAqLworICAgIHUzMiAgICAgcmVzZXJ2ZWQxOworICAgIHUzMiAgICAgcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX3BlcmZfbW9kZXM7CiAKIC8qIFNDU0kgZHJpdmUgaW5mbyAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuY2hhciAgICAgIHZlbmRvcls4XTsgICAgICAgICAgICAgICAgICAgICAgLyogdmVuZG9yIHN0cmluZyAqLwotICAgIHVuY2hhciAgICAgIHByb2R1Y3RbMTZdOyAgICAgICAgICAgICAgICAgICAgLyogcHJvZHVjdCBzdHJpbmcgKi8KLSAgICB1bmNoYXIgICAgICByZXZpc2lvbls0XTsgICAgICAgICAgICAgICAgICAgIC8qIHJldmlzaW9uICovCi0gICAgdWxvbmczMiAgICAgc3lfcmF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IHJhdGUgZm9yIHN5bmMuIHRyLiAqLwotICAgIHVsb25nMzIgICAgIHN5X21heF9yYXRlOyAgICAgICAgICAgICAgICAgICAgLyogbWF4LiByYXRlIGZvciBzeW5jLiB0ci4gKi8KLSAgICB1bG9uZzMyICAgICBub19sZHJpdmU7ICAgICAgICAgICAgICAgICAgICAgIC8qIGJlbG9uZ3MgdG8gdGhpcyBsb2cuIGRydi4qLwotICAgIHVsb25nMzIgICAgIGJsa2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJsb2NrcyAqLwotICAgIHVzaG9ydCAgICAgIGJsa3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBibG9jayBpbiBieXRlcyAqLwotICAgIHVuY2hhciAgICAgIGF2YWlsYWJsZTsgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogYWNjZXNzIGlzIGF2YWlsYWJsZSAqLwotICAgIHVuY2hhciAgICAgIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVkaXVtIGlzIGluaXRpYWxpemVkICovCi0gICAgdW5jaGFyICAgICAgZGV2dHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGRldmljZXR5cGUgKi8KLSAgICB1bmNoYXIgICAgICBybV9tZWRpdW07ICAgICAgICAgICAgICAgICAgICAgIC8qIG1lZGl1bSBpcyByZW1vdmFibGUgKi8KLSAgICB1bmNoYXIgICAgICB3cF9tZWRpdW07ICAgICAgICAgICAgICAgICAgICAgIC8qIG1lZGl1bSBpcyB3cml0ZSBwcm90ZWN0ZWQgKi8KLSAgICB1bmNoYXIgICAgICBhbnNpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgSS9JSSBvciBJSUk/ICovCi0gICAgdW5jaGFyICAgICAgcHJvdG9jb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzYW1lIGFzIGFuc2kgKi8KLSAgICB1bmNoYXIgICAgICBzeW5jOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IHN5bmMuIHRyYW5zZmVyIGVuYWIuICovCi0gICAgdW5jaGFyICAgICAgZGlzYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFnOiBkaXNjb25uZWN0IGVuYWJsZWQgKi8KLSAgICB1bmNoYXIgICAgICBxdWV1ZWluZzsgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGNvbW1hbmQgcXVlaW5nIGVuYWIuICovCi0gICAgdW5jaGFyICAgICAgY2FjaGVkOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFnOiBjYWNoaW5nIGVuYWJsZWQgKi8KLSAgICB1bmNoYXIgICAgICB0YXJnZXRfaWQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBJRCBvZiBkZXZpY2UgKi8KLSAgICB1bmNoYXIgICAgICBsdW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExVTiBpZCBvZiBkZXZpY2UgKi8KLSAgICB1bmNoYXIgICAgICBvcnBoYW47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGRyaXZlIGZyYWdtZW50ICovCi0gICAgdWxvbmczMiAgICAgbGFzdF9lcnJvcjsgICAgICAgICAgICAgICAgICAgICAvKiBzZW5zZSBrZXkgb3IgZHJpdmUgc3RhdGUgKi8KLSAgICB1bG9uZzMyICAgICBsYXN0X3Jlc3VsdDsgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VsdCBvZiBsYXN0IGNvbW1hbmQgKi8KLSAgICB1bG9uZzMyICAgICBjaGVja19lcnJvcnM7ICAgICAgICAgICAgICAgICAgIC8qIGVyci4gaW4gbGFzdCBzdXJmYWNlIGNoZWNrICovCi0gICAgdW5jaGFyICAgICAgcGVyY2VudDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm9ncmVzcyBmb3Igc3VyZmFjZSBjaGVjayAqLwotICAgIHVuY2hhciAgICAgIGxhc3RfY2hlY2s7ICAgICAgICAgICAgICAgICAgICAgLyogSU9DVFJMIG9wZXJhdGlvbiAqLwotICAgIHVuY2hhciAgICAgIHJlc1syXTsKLSAgICB1bG9uZzMyICAgICBmbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZyb20gMS4xOS8yLjE5OiByYXcgcmVzZXJ2LiovCi0gICAgdW5jaGFyICAgICAgbXVsdGlfYnVzOyAgICAgICAgICAgICAgICAgICAgICAvKiBtdWx0aSBidXMgZGV2PyAoZmlicmUgY2guKSAqLwotICAgIHVuY2hhciAgICAgIG1iX3N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogc3RhdHVzOiBhdmFpbGFibGU/ICovCi0gICAgdW5jaGFyICAgICAgcmVzMlsyXTsKLSAgICB1bmNoYXIgICAgICBtYl9hbHRfc3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyBvbiBzZWNvbmQgYnVzICovCi0gICAgdW5jaGFyICAgICAgbWJfYWx0X2JpZDsgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2Ygc2Vjb25kIGJ1cyAqLwotICAgIHVuY2hhciAgICAgIG1iX2FsdF90aWQ7ICAgICAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IGlkIG9uIHNlY29uZCBidXMgKi8KLSAgICB1bmNoYXIgICAgICByZXMzOwotICAgIHVuY2hhciAgICAgIGZjX2ZsYWc7ICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJvbSAxLjIyLzIuMjI6IGluZm8gdmFsaWQ/Ki8KLSAgICB1bmNoYXIgICAgICByZXM0OwotICAgIHVzaG9ydCAgICAgIGZjX2ZyYW1lX3NpemU7ICAgICAgICAgICAgICAgICAgLyogZnJhbWUgc2l6ZSAoYnl0ZXMpICovCisgICAgdTggICAgICB2ZW5kb3JbOF07ICAgICAgICAgICAgICAgICAgICAgIC8qIHZlbmRvciBzdHJpbmcgKi8KKyAgICB1OCAgICAgIHByb2R1Y3RbMTZdOyAgICAgICAgICAgICAgICAgICAgLyogcHJvZHVjdCBzdHJpbmcgKi8KKyAgICB1OCAgICAgIHJldmlzaW9uWzRdOyAgICAgICAgICAgICAgICAgICAgLyogcmV2aXNpb24gKi8KKyAgICB1MzIgICAgIHN5X3JhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogY3VycmVudCByYXRlIGZvciBzeW5jLiB0ci4gKi8KKyAgICB1MzIgICAgIHN5X21heF9yYXRlOyAgICAgICAgICAgICAgICAgICAgLyogbWF4LiByYXRlIGZvciBzeW5jLiB0ci4gKi8KKyAgICB1MzIgICAgIG5vX2xkcml2ZTsgICAgICAgICAgICAgICAgICAgICAgLyogYmVsb25ncyB0byB0aGlzIGxvZy4gZHJ2LiovCisgICAgdTMyICAgICBibGtjbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBibG9ja3MgKi8KKyAgICB1MTYgICAgICBibGtzaXplOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpemUgb2YgYmxvY2sgaW4gYnl0ZXMgKi8KKyAgICB1OCAgICAgIGF2YWlsYWJsZTsgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogYWNjZXNzIGlzIGF2YWlsYWJsZSAqLworICAgIHU4ICAgICAgaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtZWRpdW0gaXMgaW5pdGlhbGl6ZWQgKi8KKyAgICB1OCAgICAgIGRldnR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBkZXZpY2V0eXBlICovCisgICAgdTggICAgICBybV9tZWRpdW07ICAgICAgICAgICAgICAgICAgICAgIC8qIG1lZGl1bSBpcyByZW1vdmFibGUgKi8KKyAgICB1OCAgICAgIHdwX21lZGl1bTsgICAgICAgICAgICAgICAgICAgICAgLyogbWVkaXVtIGlzIHdyaXRlIHByb3RlY3RlZCAqLworICAgIHU4ICAgICAgYW5zaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIEkvSUkgb3IgSUlJPyAqLworICAgIHU4ICAgICAgcHJvdG9jb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzYW1lIGFzIGFuc2kgKi8KKyAgICB1OCAgICAgIHN5bmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogc3luYy4gdHJhbnNmZXIgZW5hYi4gKi8KKyAgICB1OCAgICAgIGRpc2M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogZGlzY29ubmVjdCBlbmFibGVkICovCisgICAgdTggICAgICBxdWV1ZWluZzsgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGNvbW1hbmQgcXVlaW5nIGVuYWIuICovCisgICAgdTggICAgICBjYWNoZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGNhY2hpbmcgZW5hYmxlZCAqLworICAgIHU4ICAgICAgdGFyZ2V0X2lkOyAgICAgICAgICAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgb2YgZGV2aWNlICovCisgICAgdTggICAgICBsdW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExVTiBpZCBvZiBkZXZpY2UgKi8KKyAgICB1OCAgICAgIG9ycGhhbjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogZHJpdmUgZnJhZ21lbnQgKi8KKyAgICB1MzIgICAgIGxhc3RfZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgLyogc2Vuc2Uga2V5IG9yIGRyaXZlIHN0YXRlICovCisgICAgdTMyICAgICBsYXN0X3Jlc3VsdDsgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VsdCBvZiBsYXN0IGNvbW1hbmQgKi8KKyAgICB1MzIgICAgIGNoZWNrX2Vycm9yczsgICAgICAgICAgICAgICAgICAgLyogZXJyLiBpbiBsYXN0IHN1cmZhY2UgY2hlY2sgKi8KKyAgICB1OCAgICAgIHBlcmNlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvZ3Jlc3MgZm9yIHN1cmZhY2UgY2hlY2sgKi8KKyAgICB1OCAgICAgIGxhc3RfY2hlY2s7ICAgICAgICAgICAgICAgICAgICAgLyogSU9DVFJMIG9wZXJhdGlvbiAqLworICAgIHU4ICAgICAgcmVzWzJdOworICAgIHUzMiAgICAgZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmcm9tIDEuMTkvMi4xOTogcmF3IHJlc2Vydi4qLworICAgIHU4ICAgICAgbXVsdGlfYnVzOyAgICAgICAgICAgICAgICAgICAgICAvKiBtdWx0aSBidXMgZGV2PyAoZmlicmUgY2guKSAqLworICAgIHU4ICAgICAgbWJfc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAvKiBzdGF0dXM6IGF2YWlsYWJsZT8gKi8KKyAgICB1OCAgICAgIHJlczJbMl07CisgICAgdTggICAgICBtYl9hbHRfc3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyBvbiBzZWNvbmQgYnVzICovCisgICAgdTggICAgICBtYl9hbHRfYmlkOyAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzZWNvbmQgYnVzICovCisgICAgdTggICAgICBtYl9hbHRfdGlkOyAgICAgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBpZCBvbiBzZWNvbmQgYnVzICovCisgICAgdTggICAgICByZXMzOworICAgIHU4ICAgICAgZmNfZmxhZzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBmcm9tIDEuMjIvMi4yMjogaW5mbyB2YWxpZD8qLworICAgIHU4ICAgICAgcmVzNDsKKyAgICB1MTYgICAgICBmY19mcmFtZV9zaXplOyAgICAgICAgICAgICAgICAgIC8qIGZyYW1lIHNpemUgKGJ5dGVzKSAqLwogICAgIGNoYXIgICAgICAgIHd3bls4XTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogd29ybGQgd2lkZSBuYW1lICovCi19IFBBQ0tFRCBnZHRoX2Rpc2tpbmZvX3N0cjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9kaXNraW5mb19zdHI7CiAKIC8qIGdldCBTQ1NJIGNoYW5uZWwgY291bnQgICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgY2hhbm5lbF9ubzsgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY2hhbm5lbCAqLwotICAgIHVsb25nMzIgICAgIGRyaXZlX2NudDsgICAgICAgICAgICAgICAgICAgICAgLyogZHJpdmUgY291bnQgKi8KLSAgICB1bmNoYXIgICAgICBzaW9wX2lkOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgcHJvY2Vzc29yIElEICovCi0gICAgdW5jaGFyICAgICAgc2lvcF9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIHByb2Nlc3NvciBzdGF0ZSAqLyAKLX0gUEFDS0VEIGdkdGhfZ2V0Y2hfc3RyOworICAgIHUzMiAgICAgY2hhbm5lbF9ubzsgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY2hhbm5lbCAqLworICAgIHUzMiAgICAgZHJpdmVfY250OyAgICAgICAgICAgICAgICAgICAgICAvKiBkcml2ZSBjb3VudCAqLworICAgIHU4ICAgICAgc2lvcF9pZDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIHByb2Nlc3NvciBJRCAqLworICAgIHU4ICAgICAgc2lvcF9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIHByb2Nlc3NvciBzdGF0ZSAqLyAKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9nZXRjaF9zdHI7CiAKIC8qIGdldCBTQ1NJIGRyaXZlIG51bWJlcnMgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBzY19ubzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY2hhbm5lbCAqLwotICAgIHVsb25nMzIgICAgIHNjX2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NfbGlzdFtdIGVsZW1lbnRzICovCi0gICAgdWxvbmczMiAgICAgc2NfbGlzdFtNQVhJRF07ICAgICAgICAgICAgICAgICAvKiBtaW5vciBkZXZpY2UgbnVtYmVycyAqLwotfSBQQUNLRUQgZ2R0aF9kcmxpc3Rfc3RyOworICAgIHUzMiAgICAgc2Nfbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGNoYW5uZWwgKi8KKyAgICB1MzIgICAgIHNjX2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NfbGlzdFtdIGVsZW1lbnRzICovCisgICAgdTMyICAgICBzY19saXN0W01BWElEXTsgICAgICAgICAgICAgICAgIC8qIG1pbm9yIGRldmljZSBudW1iZXJzICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfZHJsaXN0X3N0cjsKIAogLyogZ2V0IGdyb3duL3ByaW1hcnkgZGVmZWN0IGNvdW50ICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgc2RkY190eXBlOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4OiBncm93biwgMHgxMDogcHJpbS4gKi8KLSAgICB1bmNoYXIgICAgICBzZGRjX2Zvcm1hdDsgICAgICAgICAgICAgICAgICAgIC8qIGxpc3QgZW50cnkgZm9ybWF0ICovCi0gICAgdW5jaGFyICAgICAgc2RkY19sZW47ICAgICAgICAgICAgICAgICAgICAgICAvKiBsaXN0IGVudHJ5IGxlbmd0aCAqLwotICAgIHVuY2hhciAgICAgIHNkZGNfcmVzOwotICAgIHVsb25nMzIgICAgIHNkZGNfY250OyAgICAgICAgICAgICAgICAgICAgICAgLyogZW50cnkgY291bnQgKi8KLX0gUEFDS0VEIGdkdGhfZGVmY250X3N0cjsKKyAgICB1OCAgICAgIHNkZGNfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwODogZ3Jvd24sIDB4MTA6IHByaW0uICovCisgICAgdTggICAgICBzZGRjX2Zvcm1hdDsgICAgICAgICAgICAgICAgICAgIC8qIGxpc3QgZW50cnkgZm9ybWF0ICovCisgICAgdTggICAgICBzZGRjX2xlbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIGxpc3QgZW50cnkgbGVuZ3RoICovCisgICAgdTggICAgICBzZGRjX3JlczsKKyAgICB1MzIgICAgIHNkZGNfY250OyAgICAgICAgICAgICAgICAgICAgICAgLyogZW50cnkgY291bnQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9kZWZjbnRfc3RyOwogCiAvKiBkaXNrIHN0YXRpc3RpY3MgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBiaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY2hhbm5lbCAqLwotICAgIHVsb25nMzIgICAgIGZpcnN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgU0NTSSBkaXNrICovCi0gICAgdWxvbmczMiAgICAgZW50cmllczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgKi8KLSAgICB1bG9uZzMyICAgICBjb3VudDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChSKSBudW1iZXIgb2YgaW5pdC4gZWwuICovCi0gICAgdWxvbmczMiAgICAgbW9uX3RpbWU7ICAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lIHN0YW1wICovCisgICAgdTMyICAgICBiaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY2hhbm5lbCAqLworICAgIHUzMiAgICAgZmlyc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXJzdCBTQ1NJIGRpc2sgKi8KKyAgICB1MzIgICAgIGVudHJpZXM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzICovCisgICAgdTMyICAgICBjb3VudDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChSKSBudW1iZXIgb2YgaW5pdC4gZWwuICovCisgICAgdTMyICAgICBtb25fdGltZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHRpbWUgc3RhbXAgKi8KICAgICBzdHJ1Y3QgewotICAgICAgICB1bmNoYXIgIHRpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCi0gICAgICAgIHVuY2hhciAgbHVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMVU4gKi8KLSAgICAgICAgdW5jaGFyICByZXNbMl07Ci0gICAgICAgIHVsb25nMzIgYmxrX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBibG9jayBzaXplIGluIGJ5dGVzICovCi0gICAgICAgIHVsb25nMzIgcmRfY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBieXRlcyByZWFkICovCi0gICAgICAgIHVsb25nMzIgd3JfY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBieXRlcyB3cml0dGVuICovCi0gICAgICAgIHVsb25nMzIgcmRfYmxrX2NvdW50OyAgICAgICAgICAgICAgICAgICAvKiBibG9ja3MgcmVhZCAqLwotICAgICAgICB1bG9uZzMyIHdyX2Jsa19jb3VudDsgICAgICAgICAgICAgICAgICAgLyogYmxvY2tzIHdyaXR0ZW4gKi8KLSAgICAgICAgdWxvbmczMiByZXRyaWVzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHJpZXMgKi8KLSAgICAgICAgdWxvbmczMiByZWFzc2lnbnM7ICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYXNzaWducyAqLwotICAgIH0gUEFDS0VEIGxpc3RbMV07Ci19IFBBQ0tFRCBnZHRoX2Rza3N0YXRfc3RyOworICAgICAgICB1OCAgdGlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgKi8KKyAgICAgICAgdTggIGx1bjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTFVOICovCisgICAgICAgIHU4ICByZXNbMl07CisgICAgICAgIHUzMiBibGtfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGJsb2NrIHNpemUgaW4gYnl0ZXMgKi8KKyAgICAgICAgdTMyIHJkX2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgLyogYnl0ZXMgcmVhZCAqLworICAgICAgICB1MzIgd3JfY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBieXRlcyB3cml0dGVuICovCisgICAgICAgIHUzMiByZF9ibGtfY291bnQ7ICAgICAgICAgICAgICAgICAgIC8qIGJsb2NrcyByZWFkICovCisgICAgICAgIHUzMiB3cl9ibGtfY291bnQ7ICAgICAgICAgICAgICAgICAgIC8qIGJsb2NrcyB3cml0dGVuICovCisgICAgICAgIHUzMiByZXRyaWVzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHJpZXMgKi8KKyAgICAgICAgdTMyIHJlYXNzaWduczsgICAgICAgICAgICAgICAgICAgICAgLyogcmVhc3NpZ25zICovCisgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBsaXN0WzFdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2Rza3N0YXRfc3RyOwogCiAvKiBJTyBjaGFubmVsIGhlYWRlciAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIHZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgLyogdmVyc2lvbiAoLTFVTDogbmV3ZXN0KSAqLwotICAgIHVuY2hhciAgICAgIGxpc3RfZW50cmllczsgICAgICAgICAgICAgICAgICAgLyogbGlzdCBlbnRyeSBjb3VudCAqLwotICAgIHVuY2hhciAgICAgIGZpcnN0X2NoYW47ICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgY2hhbm5lbCBudW1iZXIgKi8KLSAgICB1bmNoYXIgICAgICBsYXN0X2NoYW47ICAgICAgICAgICAgICAgICAgICAgIC8qIGxhc3QgY2hhbm5lbCBudW1iZXIgKi8KLSAgICB1bmNoYXIgICAgICBjaGFuX2NvdW50OyAgICAgICAgICAgICAgICAgICAgIC8qIChSKSBjaGFubmVsIGNvdW50ICovCi0gICAgdWxvbmczMiAgICAgbGlzdF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQgb2YgbGlzdFswXSAqLwotfSBQQUNLRUQgZ2R0aF9pb2NoYW5faGVhZGVyOworICAgIHUzMiAgICAgdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiB2ZXJzaW9uICgtMVVMOiBuZXdlc3QpICovCisgICAgdTggICAgICBsaXN0X2VudHJpZXM7ICAgICAgICAgICAgICAgICAgIC8qIGxpc3QgZW50cnkgY291bnQgKi8KKyAgICB1OCAgICAgIGZpcnN0X2NoYW47ICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgY2hhbm5lbCBudW1iZXIgKi8KKyAgICB1OCAgICAgIGxhc3RfY2hhbjsgICAgICAgICAgICAgICAgICAgICAgLyogbGFzdCBjaGFubmVsIG51bWJlciAqLworICAgIHU4ICAgICAgY2hhbl9jb3VudDsgICAgICAgICAgICAgICAgICAgICAvKiAoUikgY2hhbm5lbCBjb3VudCAqLworICAgIHUzMiAgICAgbGlzdF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQgb2YgbGlzdFswXSAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2lvY2hhbl9oZWFkZXI7CiAKIC8qIGdldCBJTyBjaGFubmVsIGRlc2NyaXB0aW9uICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgZ2R0aF9pb2NoYW5faGVhZGVyICBoZHI7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdWxvbmczMiAgICAgICAgIGFkZHJlc3M7ICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgYWRkcmVzcyAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgdHlwZTsgICAgICAgICAgICAgICAgICAgLyogdHlwZSAoU0NTSSwgRkNBTCkgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2FsX25vOyAgICAgICAgICAgICAgIC8qIGxvY2FsIG51bWJlciAqLwotICAgICAgICB1c2hvcnQgICAgICAgICAgZmVhdHVyZXM7ICAgICAgICAgICAgICAgLyogY2hhbm5lbCBmZWF0dXJlcyAqLwotICAgIH0gUEFDS0VEIGxpc3RbTUFYQlVTXTsKLX0gUEFDS0VEIGdkdGhfaW9jaGFuX3N0cjsKKyAgICAgICAgdTMyICAgICAgICAgYWRkcmVzczsgICAgICAgICAgICAgICAgLyogY2hhbm5lbCBhZGRyZXNzICovCisgICAgICAgIHU4ICAgICAgICAgIHR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIHR5cGUgKFNDU0ksIEZDQUwpICovCisgICAgICAgIHU4ICAgICAgICAgIGxvY2FsX25vOyAgICAgICAgICAgICAgIC8qIGxvY2FsIG51bWJlciAqLworICAgICAgICB1MTYgICAgICAgICAgZmVhdHVyZXM7ICAgICAgICAgICAgICAgLyogY2hhbm5lbCBmZWF0dXJlcyAqLworICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbGlzdFtNQVhCVVNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2lvY2hhbl9zdHI7CiAKIC8qIGdldCByYXcgSU8gY2hhbm5lbCBkZXNjcmlwdGlvbiAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGdkdGhfaW9jaGFuX2hlYWRlciAgaGRyOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciAgICAgIHByb2NfaWQ7ICAgICAgICAgICAgICAgICAgICAvKiBwcm9jZXNzb3IgaWQgKi8KLSAgICAgICAgdW5jaGFyICAgICAgcHJvY19kZWZlY3Q7ICAgICAgICAgICAgICAgIC8qIGRlZmVjdCA/ICovCi0gICAgICAgIHVuY2hhciAgICAgIHJlc2VydmVkWzJdOwotICAgIH0gUEFDS0VEIGxpc3RbTUFYQlVTXTsKLX0gUEFDS0VEIGdkdGhfcmF3X2lvY2hhbl9zdHI7CisgICAgICAgIHU4ICAgICAgcHJvY19pZDsgICAgICAgICAgICAgICAgICAgIC8qIHByb2Nlc3NvciBpZCAqLworICAgICAgICB1OCAgICAgIHByb2NfZGVmZWN0OyAgICAgICAgICAgICAgICAvKiBkZWZlY3QgPyAqLworICAgICAgICB1OCAgICAgIHJlc2VydmVkWzJdOworICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbGlzdFtNQVhCVVNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX3Jhd19pb2NoYW5fc3RyOwogCiAvKiBhcnJheSBkcml2ZSBjb21wb25lbnQgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBhbF9jb250cm9sbGVyOyAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgSUQgKi8KLSAgICB1bmNoYXIgICAgICBhbF9jYWNoZV9kcml2ZTsgICAgICAgICAgICAgICAgIC8qIGNhY2hlIGRyaXZlIG51bWJlciAqLwotICAgIHVuY2hhciAgICAgIGFsX3N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgZHJpdmUgc3RhdGUgKi8KLSAgICB1bmNoYXIgICAgICBhbF9yZXNbMl07ICAgICAKLX0gUEFDS0VEIGdkdGhfYXJyYXljb21wX3N0cjsKKyAgICB1MzIgICAgIGFsX2NvbnRyb2xsZXI7ICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBJRCAqLworICAgIHU4ICAgICAgYWxfY2FjaGVfZHJpdmU7ICAgICAgICAgICAgICAgICAvKiBjYWNoZSBkcml2ZSBudW1iZXIgKi8KKyAgICB1OCAgICAgIGFsX3N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgZHJpdmUgc3RhdGUgKi8KKyAgICB1OCAgICAgIGFsX3Jlc1syXTsgICAgIAorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2FycmF5Y29tcF9zdHI7CiAKIC8qIGFycmF5IGRyaXZlIGluZm9ybWF0aW9uICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgYWlfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBhcnJheSB0eXBlIChSQUlEMCw0LDUpICovCi0gICAgdW5jaGFyICAgICAgYWlfY2FjaGVfZHJpdmVfY250OyAgICAgICAgICAgICAvKiBhY3RpdmUgY2FjaGVkcml2ZXMgKi8KLSAgICB1bmNoYXIgICAgICBhaV9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGFycmF5IGRyaXZlIHN0YXRlICovCi0gICAgdW5jaGFyICAgICAgYWlfbWFzdGVyX2NkOyAgICAgICAgICAgICAgICAgICAvKiBtYXN0ZXIgY2FjaGVkcml2ZSAqLwotICAgIHVsb25nMzIgICAgIGFpX21hc3Rlcl9jb250cm9sbGVyOyAgICAgICAgICAgLyogSUQgb2YgbWFzdGVyIGNvbnRyb2xsZXIgKi8KLSAgICB1bG9uZzMyICAgICBhaV9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVzZXIgY2FwYWNpdHkgW3NlY3RvcnNdICovCi0gICAgdWxvbmczMiAgICAgYWlfc3RyaXBpbmdfc2l6ZTsgICAgICAgICAgICAgICAvKiBzdHJpcGluZyBzaXplIFtzZWN0b3JzXSAqLwotICAgIHVsb25nMzIgICAgIGFpX3NlY3NpemU7ICAgICAgICAgICAgICAgICAgICAgLyogc2VjdG9yIHNpemUgW2J5dGVzXSAqLwotICAgIHVsb25nMzIgICAgIGFpX2Vycl9pbmZvOyAgICAgICAgICAgICAgICAgICAgLyogZmFpbGVkIGNhY2hlIGRyaXZlICovCi0gICAgdW5jaGFyICAgICAgYWlfbmFtZVs4XTsgICAgICAgICAgICAgICAgICAgICAvKiBuYW1lIG9mIHRoZSBhcnJheSBkcml2ZSAqLwotICAgIHVuY2hhciAgICAgIGFpX2NvbnRyb2xsZXJfY250OyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvbnRyb2xsZXJzICovCi0gICAgdW5jaGFyICAgICAgYWlfcmVtb3ZhYmxlOyAgICAgICAgICAgICAgICAgICAvKiBmbGFnOiByZW1vdmFibGUgKi8KLSAgICB1bmNoYXIgICAgICBhaV93cml0ZV9wcm90ZWN0ZWQ7ICAgICAgICAgICAgIC8qIGZsYWc6IHdyaXRlIHByb3RlY3RlZCAqLwotICAgIHVuY2hhciAgICAgIGFpX2RldnR5cGU7ICAgICAgICAgICAgICAgICAgICAgLyogdHlwZTogYWx3YXlzIGRpcmVjdCBhY2Nlc3MgKi8KKyAgICB1OCAgICAgIGFpX3R5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogYXJyYXkgdHlwZSAoUkFJRDAsNCw1KSAqLworICAgIHU4ICAgICAgYWlfY2FjaGVfZHJpdmVfY250OyAgICAgICAgICAgICAvKiBhY3RpdmUgY2FjaGVkcml2ZXMgKi8KKyAgICB1OCAgICAgIGFpX3N0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgLyogYXJyYXkgZHJpdmUgc3RhdGUgKi8KKyAgICB1OCAgICAgIGFpX21hc3Rlcl9jZDsgICAgICAgICAgICAgICAgICAgLyogbWFzdGVyIGNhY2hlZHJpdmUgKi8KKyAgICB1MzIgICAgIGFpX21hc3Rlcl9jb250cm9sbGVyOyAgICAgICAgICAgLyogSUQgb2YgbWFzdGVyIGNvbnRyb2xsZXIgKi8KKyAgICB1MzIgICAgIGFpX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNlciBjYXBhY2l0eSBbc2VjdG9yc10gKi8KKyAgICB1MzIgICAgIGFpX3N0cmlwaW5nX3NpemU7ICAgICAgICAgICAgICAgLyogc3RyaXBpbmcgc2l6ZSBbc2VjdG9yc10gKi8KKyAgICB1MzIgICAgIGFpX3NlY3NpemU7ICAgICAgICAgICAgICAgICAgICAgLyogc2VjdG9yIHNpemUgW2J5dGVzXSAqLworICAgIHUzMiAgICAgYWlfZXJyX2luZm87ICAgICAgICAgICAgICAgICAgICAvKiBmYWlsZWQgY2FjaGUgZHJpdmUgKi8KKyAgICB1OCAgICAgIGFpX25hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgLyogbmFtZSBvZiB0aGUgYXJyYXkgZHJpdmUgKi8KKyAgICB1OCAgICAgIGFpX2NvbnRyb2xsZXJfY250OyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvbnRyb2xsZXJzICovCisgICAgdTggICAgICBhaV9yZW1vdmFibGU7ICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IHJlbW92YWJsZSAqLworICAgIHU4ICAgICAgYWlfd3JpdGVfcHJvdGVjdGVkOyAgICAgICAgICAgICAvKiBmbGFnOiB3cml0ZSBwcm90ZWN0ZWQgKi8KKyAgICB1OCAgICAgIGFpX2RldnR5cGU7ICAgICAgICAgICAgICAgICAgICAgLyogdHlwZTogYWx3YXlzIGRpcmVjdCBhY2Nlc3MgKi8KICAgICBnZHRoX2FycmF5Y29tcF9zdHIgIGFpX2RyaXZlc1szNV07ICAgICAgICAgIC8qIGRyaXZlIGNvbXBvbmVudHM6ICovCi0gICAgdW5jaGFyICAgICAgYWlfZHJpdmVfZW50cmllczsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZHJpdmUgY29tcG9uZW50cyAqLwotICAgIHVuY2hhciAgICAgIGFpX3Byb3RlY3RlZDsgICAgICAgICAgICAgICAgICAgLyogcHJvdGVjdGlvbiBmbGFnICovCi0gICAgdW5jaGFyICAgICAgYWlfdmVyaWZ5X3N0YXRlOyAgICAgICAgICAgICAgICAvKiBzdGF0ZSBvZiBhIHBhcml0eSB2ZXJpZnkgKi8KLSAgICB1bmNoYXIgICAgICBhaV9leHRfc3RhdGU7ICAgICAgICAgICAgICAgICAgIC8qIGV4dGVuZGVkIGFycmF5IGRyaXZlIHN0YXRlICovCi0gICAgdW5jaGFyICAgICAgYWlfZXhwYW5kX3N0YXRlOyAgICAgICAgICAgICAgICAvKiBhcnJheSBleHBhbmQgc3RhdGUgKD49Mi4xOCkqLwotICAgIHVuY2hhciAgICAgIGFpX3Jlc2VydmVkWzNdOwotfSBQQUNLRUQgZ2R0aF9hcnJheWluZl9zdHI7CisgICAgdTggICAgICBhaV9kcml2ZV9lbnRyaWVzOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBkcml2ZSBjb21wb25lbnRzICovCisgICAgdTggICAgICBhaV9wcm90ZWN0ZWQ7ICAgICAgICAgICAgICAgICAgIC8qIHByb3RlY3Rpb24gZmxhZyAqLworICAgIHU4ICAgICAgYWlfdmVyaWZ5X3N0YXRlOyAgICAgICAgICAgICAgICAvKiBzdGF0ZSBvZiBhIHBhcml0eSB2ZXJpZnkgKi8KKyAgICB1OCAgICAgIGFpX2V4dF9zdGF0ZTsgICAgICAgICAgICAgICAgICAgLyogZXh0ZW5kZWQgYXJyYXkgZHJpdmUgc3RhdGUgKi8KKyAgICB1OCAgICAgIGFpX2V4cGFuZF9zdGF0ZTsgICAgICAgICAgICAgICAgLyogYXJyYXkgZXhwYW5kIHN0YXRlICg+PTIuMTgpKi8KKyAgICB1OCAgICAgIGFpX3Jlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2FycmF5aW5mX3N0cjsKIAogLyogZ2V0IGFycmF5IGRyaXZlIGxpc3QgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBjb250cm9sbGVyX25vOyAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbm8uICovCi0gICAgdW5jaGFyICAgICAgY2RfaGFuZGxlOyAgICAgICAgICAgICAgICAgICAgICAvKiBtYXN0ZXIgY2FjaGVkcml2ZSAqLwotICAgIHVuY2hhciAgICAgIGlzX2FycmF5ZDsgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZzogaXMgYXJyYXkgZHJpdmU/ICovCi0gICAgdW5jaGFyICAgICAgaXNfbWFzdGVyOyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnOiBpcyBhcnJheSBtYXN0ZXI/ICovCi0gICAgdW5jaGFyICAgICAgaXNfcGFyaXR5OyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnOiBpcyBwYXJpdHkgZHJpdmU/ICovCi0gICAgdW5jaGFyICAgICAgaXNfaG90Zml4OyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnOiBpcyBob3RmaXggZHJpdmU/ICovCi0gICAgdW5jaGFyICAgICAgcmVzWzNdOwotfSBQQUNLRUQgZ2R0aF9hbGlzdF9zdHI7CisgICAgdTMyICAgICBjb250cm9sbGVyX25vOyAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbm8uICovCisgICAgdTggICAgICBjZF9oYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIG1hc3RlciBjYWNoZWRyaXZlICovCisgICAgdTggICAgICBpc19hcnJheWQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWc6IGlzIGFycmF5IGRyaXZlPyAqLworICAgIHU4ICAgICAgaXNfbWFzdGVyOyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnOiBpcyBhcnJheSBtYXN0ZXI/ICovCisgICAgdTggICAgICBpc19wYXJpdHk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWc6IGlzIHBhcml0eSBkcml2ZT8gKi8KKyAgICB1OCAgICAgIGlzX2hvdGZpeDsgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZzogaXMgaG90Zml4IGRyaXZlPyAqLworICAgIHU4ICAgICAgcmVzWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2FsaXN0X3N0cjsKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIGVudHJpZXNfYXZhaWw7ICAgICAgICAgICAgICAgICAgLyogYWxsb2NhdGVkIGVudHJpZXMgKi8KLSAgICB1bG9uZzMyICAgICBlbnRyaWVzX2luaXQ7ICAgICAgICAgICAgICAgICAgIC8qIHJldHVybmVkIGVudHJpZXMgKi8KLSAgICB1bG9uZzMyICAgICBmaXJzdF9lbnRyeTsgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IGVudHJ5IG51bWJlciAqLwotICAgIHVsb25nMzIgICAgIGxpc3Rfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0IG9mIGZvbGxvd2luZyBsaXN0ICovCisgICAgdTMyICAgICBlbnRyaWVzX2F2YWlsOyAgICAgICAgICAgICAgICAgIC8qIGFsbG9jYXRlZCBlbnRyaWVzICovCisgICAgdTMyICAgICBlbnRyaWVzX2luaXQ7ICAgICAgICAgICAgICAgICAgIC8qIHJldHVybmVkIGVudHJpZXMgKi8KKyAgICB1MzIgICAgIGZpcnN0X2VudHJ5OyAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgZW50cnkgbnVtYmVyICovCisgICAgdTMyICAgICBsaXN0X29mZnNldDsgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldCBvZiBmb2xsb3dpbmcgbGlzdCAqLwogICAgIGdkdGhfYWxpc3Rfc3RyIGxpc3RbMV07ICAgICAgICAgICAgICAgICAgICAgLyogbGlzdCAqLwotfSBQQUNLRUQgZ2R0aF9hcmNkbF9zdHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfYXJjZGxfc3RyOwogCiAvKiBjYWNoZSBpbmZvL2NvbmZpZyBJT0NUTCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIHZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgLyogZmlybXdhcmUgdmVyc2lvbiAqLwotICAgIHVzaG9ydCAgICAgIHN0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc3RhdGUgKG9uL29mZikgKi8KLSAgICB1c2hvcnQgICAgICBzdHJhdGVneTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIHN0cmF0ZWd5ICovCi0gICAgdXNob3J0ICAgICAgd3JpdGVfYmFjazsgICAgICAgICAgICAgICAgICAgICAvKiB3cml0ZSBiYWNrIHN0YXRlIChvbi9vZmYpICovCi0gICAgdXNob3J0ICAgICAgYmxvY2tfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAvKiBjYWNoZSBibG9jayBzaXplICovCi19IFBBQ0tFRCBnZHRoX2NwYXJfc3RyOworICAgIHUzMiAgICAgdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXJtd2FyZSB2ZXJzaW9uICovCisgICAgdTE2ICAgICAgc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWNoZSBzdGF0ZSAob24vb2ZmKSAqLworICAgIHUxNiAgICAgIHN0cmF0ZWd5OyAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc3RyYXRlZ3kgKi8KKyAgICB1MTYgICAgICB3cml0ZV9iYWNrOyAgICAgICAgICAgICAgICAgICAgIC8qIHdyaXRlIGJhY2sgc3RhdGUgKG9uL29mZikgKi8KKyAgICB1MTYgICAgICBibG9ja19zaXplOyAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIGJsb2NrIHNpemUgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9jcGFyX3N0cjsKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIGNzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc2l6ZSAqLwotICAgIHVsb25nMzIgICAgIHJlYWRfY250OyAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZC93cml0ZSBjb3VudGVyICovCi0gICAgdWxvbmczMiAgICAgd3JpdGVfY250OwotICAgIHVsb25nMzIgICAgIHRyX2hpdHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogaGl0cyAqLwotICAgIHVsb25nMzIgICAgIHNlY19oaXRzOwotICAgIHVsb25nMzIgICAgIHNlY19taXNzOyAgICAgICAgICAgICAgICAgICAgICAgLyogbWlzc2VzICovCi19IFBBQ0tFRCBnZHRoX2NzdGF0X3N0cjsKKyAgICB1MzIgICAgIGNzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc2l6ZSAqLworICAgIHUzMiAgICAgcmVhZF9jbnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkL3dyaXRlIGNvdW50ZXIgKi8KKyAgICB1MzIgICAgIHdyaXRlX2NudDsKKyAgICB1MzIgICAgIHRyX2hpdHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogaGl0cyAqLworICAgIHUzMiAgICAgc2VjX2hpdHM7CisgICAgdTMyICAgICBzZWNfbWlzczsgICAgICAgICAgICAgICAgICAgICAgIC8qIG1pc3NlcyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2NzdGF0X3N0cjsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGdkdGhfY3Bhcl9zdHIgICBjcGFyOwogICAgIGdkdGhfY3N0YXRfc3RyICBjc3RhdDsKLX0gUEFDS0VEIGdkdGhfY2luZm9fc3RyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2NpbmZvX3N0cjsKIAogLyogY2FjaGUgZHJpdmUgaW5mbyAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuY2hhciAgICAgIGNkX25hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgZHJpdmUgbmFtZSAqLwotICAgIHVsb25nMzIgICAgIGNkX2RldnR5cGU7ICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBkZXZpY2V0eXBlICovCi0gICAgdWxvbmczMiAgICAgY2RfbGRjbnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgbG9nLiBkcml2ZXMgKi8KLSAgICB1bG9uZzMyICAgICBjZF9sYXN0X2Vycm9yOyAgICAgICAgICAgICAgICAgIC8qIGxhc3QgZXJyb3IgKi8KLSAgICB1bmNoYXIgICAgICBjZF9pbml0aWFsaXplZDsgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGlzIGluaXRpYWxpemVkICovCi0gICAgdW5jaGFyICAgICAgY2RfcmVtb3ZhYmxlOyAgICAgICAgICAgICAgICAgICAvKiBtZWRpYSBpcyByZW1vdmFibGUgKi8KLSAgICB1bmNoYXIgICAgICBjZF93cml0ZV9wcm90ZWN0ZWQ7ICAgICAgICAgICAgIC8qIHdyaXRlIHByb3RlY3RlZCAqLwotICAgIHVuY2hhciAgICAgIGNkX2ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogUG9vbCBIb3QgRml4PyAqLwotICAgIHVsb25nMzIgICAgIGxkX2Jsa2NudDsgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJsb2NrcyAqLwotICAgIHVsb25nMzIgICAgIGxkX2Jsa3NpemU7ICAgICAgICAgICAgICAgICAgICAgLyogYmxvY2tzaXplICovCi0gICAgdWxvbmczMiAgICAgbGRfZGNudDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZGlza3MgKi8KLSAgICB1bG9uZzMyICAgICBsZF9zbGF2ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvZy4gZHJpdmUgaW5kZXggKi8KLSAgICB1bG9uZzMyICAgICBsZF9kdHlwZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHR5cGUgb2YgbG9naWNhbCBkcml2ZSAqLwotICAgIHVsb25nMzIgICAgIGxkX2xhc3RfZXJyb3I7ICAgICAgICAgICAgICAgICAgLyogbGFzdCBlcnJvciAqLwotICAgIHVuY2hhciAgICAgIGxkX25hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgLyogbG9nLiBkcml2ZSBuYW1lICovCi0gICAgdW5jaGFyICAgICAgbGRfZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAvKiBlcnJvciAqLwotfSBQQUNLRUQgZ2R0aF9jZHJpbmZvX3N0cjsKKyAgICB1OCAgICAgIGNkX25hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgZHJpdmUgbmFtZSAqLworICAgIHUzMiAgICAgY2RfZGV2dHlwZTsgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGRldmljZXR5cGUgKi8KKyAgICB1MzIgICAgIGNkX2xkY250OyAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGxvZy4gZHJpdmVzICovCisgICAgdTMyICAgICBjZF9sYXN0X2Vycm9yOyAgICAgICAgICAgICAgICAgIC8qIGxhc3QgZXJyb3IgKi8KKyAgICB1OCAgICAgIGNkX2luaXRpYWxpemVkOyAgICAgICAgICAgICAgICAgLyogZHJpdmUgaXMgaW5pdGlhbGl6ZWQgKi8KKyAgICB1OCAgICAgIGNkX3JlbW92YWJsZTsgICAgICAgICAgICAgICAgICAgLyogbWVkaWEgaXMgcmVtb3ZhYmxlICovCisgICAgdTggICAgICBjZF93cml0ZV9wcm90ZWN0ZWQ7ICAgICAgICAgICAgIC8qIHdyaXRlIHByb3RlY3RlZCAqLworICAgIHU4ICAgICAgY2RfZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBQb29sIEhvdCBGaXg/ICovCisgICAgdTMyICAgICBsZF9ibGtjbnQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBibG9ja3MgKi8KKyAgICB1MzIgICAgIGxkX2Jsa3NpemU7ICAgICAgICAgICAgICAgICAgICAgLyogYmxvY2tzaXplICovCisgICAgdTMyICAgICBsZF9kY250OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBkaXNrcyAqLworICAgIHUzMiAgICAgbGRfc2xhdmU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2cuIGRyaXZlIGluZGV4ICovCisgICAgdTMyICAgICBsZF9kdHlwZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHR5cGUgb2YgbG9naWNhbCBkcml2ZSAqLworICAgIHUzMiAgICAgbGRfbGFzdF9lcnJvcjsgICAgICAgICAgICAgICAgICAvKiBsYXN0IGVycm9yICovCisgICAgdTggICAgICBsZF9uYW1lWzhdOyAgICAgICAgICAgICAgICAgICAgIC8qIGxvZy4gZHJpdmUgbmFtZSAqLworICAgIHU4ICAgICAgbGRfZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAvKiBlcnJvciAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2NkcmluZm9fc3RyOwogCiAvKiBPRU0gc3RyaW5nICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgY3RsX3ZlcnNpb247Ci0gICAgdWxvbmczMiAgICAgZmlsZV9tYWpvcl92ZXJzaW9uOwotICAgIHVsb25nMzIgICAgIGZpbGVfbWlub3JfdmVyc2lvbjsKLSAgICB1bG9uZzMyICAgICBidWZmZXJfc2l6ZTsKLSAgICB1bG9uZzMyICAgICBjcHlfY291bnQ7Ci0gICAgdWxvbmczMiAgICAgZXh0X2Vycm9yOwotICAgIHVsb25nMzIgICAgIG9lbV9pZDsKLSAgICB1bG9uZzMyICAgICBib2FyZF9pZDsKLX0gUEFDS0VEIGdkdGhfb2VtX3N0cl9wYXJhbXM7CisgICAgdTMyICAgICBjdGxfdmVyc2lvbjsKKyAgICB1MzIgICAgIGZpbGVfbWFqb3JfdmVyc2lvbjsKKyAgICB1MzIgICAgIGZpbGVfbWlub3JfdmVyc2lvbjsKKyAgICB1MzIgICAgIGJ1ZmZlcl9zaXplOworICAgIHUzMiAgICAgY3B5X2NvdW50OworICAgIHUzMiAgICAgZXh0X2Vycm9yOworICAgIHUzMiAgICAgb2VtX2lkOworICAgIHUzMiAgICAgYm9hcmRfaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfb2VtX3N0cl9wYXJhbXM7CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgICAgICBwcm9kdWN0XzBfMV9uYW1lWzE2XTsKLSAgICB1bmNoYXIgICAgICBwcm9kdWN0XzRfNV9uYW1lWzE2XTsKLSAgICB1bmNoYXIgICAgICBwcm9kdWN0X2NsdXN0ZXJfbmFtZVsxNl07Ci0gICAgdW5jaGFyICAgICAgcHJvZHVjdF9yZXNlcnZlZFsxNl07Ci0gICAgdW5jaGFyICAgICAgc2NzaV9jbHVzdGVyX3RhcmdldF92ZW5kb3JfaWRbMTZdOwotICAgIHVuY2hhciAgICAgIGNsdXN0ZXJfcmFpZF9md19uYW1lWzE2XTsKLSAgICB1bmNoYXIgICAgICBvZW1fYnJhbmRfbmFtZVsxNl07Ci0gICAgdW5jaGFyICAgICAgb2VtX3JhaWRfdHlwZVsxNl07Ci0gICAgdW5jaGFyICAgICAgYmlvc190eXBlWzEzXTsKLSAgICB1bmNoYXIgICAgICBiaW9zX3RpdGxlWzUwXTsKLSAgICB1bmNoYXIgICAgICBvZW1fY29tcGFueV9uYW1lWzM3XTsKLSAgICB1bG9uZzMyICAgICBwY2lfaWRfMTsKLSAgICB1bG9uZzMyICAgICBwY2lfaWRfMjsKLSAgICB1bmNoYXIgICAgICB2YWxpZGF0aW9uX3N0YXR1c1s4MF07Ci0gICAgdW5jaGFyICAgICAgcmVzZXJ2ZWRfMVs0XTsKLSAgICB1bmNoYXIgICAgICBzY3NpX2hvc3RfZHJpdmVfaW5xdWlyeV92ZW5kb3JfaWRbMTZdOwotICAgIHVuY2hhciAgICAgIGxpYnJhcnlfZmlsZV90ZW1wbGF0ZVsxNl07Ci0gICAgdW5jaGFyICAgICAgcmVzZXJ2ZWRfMlsxNl07Ci0gICAgdW5jaGFyICAgICAgdG9vbF9uYW1lXzFbMzJdOwotICAgIHVuY2hhciAgICAgIHRvb2xfbmFtZV8yWzMyXTsKLSAgICB1bmNoYXIgICAgICB0b29sX25hbWVfM1szMl07Ci0gICAgdW5jaGFyICAgICAgb2VtX2NvbnRhY3RfMVs4NF07Ci0gICAgdW5jaGFyICAgICAgb2VtX2NvbnRhY3RfMls4NF07Ci0gICAgdW5jaGFyICAgICAgb2VtX2NvbnRhY3RfM1s4NF07Ci19IFBBQ0tFRCBnZHRoX29lbV9zdHI7CisgICAgdTggICAgICBwcm9kdWN0XzBfMV9uYW1lWzE2XTsKKyAgICB1OCAgICAgIHByb2R1Y3RfNF81X25hbWVbMTZdOworICAgIHU4ICAgICAgcHJvZHVjdF9jbHVzdGVyX25hbWVbMTZdOworICAgIHU4ICAgICAgcHJvZHVjdF9yZXNlcnZlZFsxNl07CisgICAgdTggICAgICBzY3NpX2NsdXN0ZXJfdGFyZ2V0X3ZlbmRvcl9pZFsxNl07CisgICAgdTggICAgICBjbHVzdGVyX3JhaWRfZndfbmFtZVsxNl07CisgICAgdTggICAgICBvZW1fYnJhbmRfbmFtZVsxNl07CisgICAgdTggICAgICBvZW1fcmFpZF90eXBlWzE2XTsKKyAgICB1OCAgICAgIGJpb3NfdHlwZVsxM107CisgICAgdTggICAgICBiaW9zX3RpdGxlWzUwXTsKKyAgICB1OCAgICAgIG9lbV9jb21wYW55X25hbWVbMzddOworICAgIHUzMiAgICAgcGNpX2lkXzE7CisgICAgdTMyICAgICBwY2lfaWRfMjsKKyAgICB1OCAgICAgIHZhbGlkYXRpb25fc3RhdHVzWzgwXTsKKyAgICB1OCAgICAgIHJlc2VydmVkXzFbNF07CisgICAgdTggICAgICBzY3NpX2hvc3RfZHJpdmVfaW5xdWlyeV92ZW5kb3JfaWRbMTZdOworICAgIHU4ICAgICAgbGlicmFyeV9maWxlX3RlbXBsYXRlWzE2XTsKKyAgICB1OCAgICAgIHJlc2VydmVkXzJbMTZdOworICAgIHU4ICAgICAgdG9vbF9uYW1lXzFbMzJdOworICAgIHU4ICAgICAgdG9vbF9uYW1lXzJbMzJdOworICAgIHU4ICAgICAgdG9vbF9uYW1lXzNbMzJdOworICAgIHU4ICAgICAgb2VtX2NvbnRhY3RfMVs4NF07CisgICAgdTggICAgICBvZW1fY29udGFjdF8yWzg0XTsKKyAgICB1OCAgICAgIG9lbV9jb250YWN0XzNbODRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX29lbV9zdHI7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBnZHRoX29lbV9zdHJfcGFyYW1zIHBhcmFtczsKICAgICBnZHRoX29lbV9zdHIgICAgICAgIHRleHQ7Ci19IFBBQ0tFRCBnZHRoX29lbV9zdHJfaW9jdGw7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfb2VtX3N0cl9pb2N0bDsKIAogLyogYm9hcmQgZmVhdHVyZXMgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgICAgICBjaGFpbmluZzsgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYWluaW5nIHN1cHBvcnRlZCAqLwotICAgIHVuY2hhciAgICAgIHN0cmlwaW5nOyAgICAgICAgICAgICAgICAgICAgICAgLyogU3RyaXBpbmcgKFJBSUQtMCkgc3VwcC4gKi8KLSAgICB1bmNoYXIgICAgICBtaXJyb3Jpbmc7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1pcnJvcmluZyAoUkFJRC0xKSBzdXBwLiAqLwotICAgIHVuY2hhciAgICAgIHJhaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkFJRC00LzUvMTAgc3VwcG9ydGVkICovCi19IFBBQ0tFRCBnZHRoX2JmZWF0X3N0cjsKKyAgICB1OCAgICAgIGNoYWluaW5nOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhaW5pbmcgc3VwcG9ydGVkICovCisgICAgdTggICAgICBzdHJpcGluZzsgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmlwaW5nIChSQUlELTApIHN1cHAuICovCisgICAgdTggICAgICBtaXJyb3Jpbmc7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1pcnJvcmluZyAoUkFJRC0xKSBzdXBwLiAqLworICAgIHU4ICAgICAgcmFpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSQUlELTQvNS8xMCBzdXBwb3J0ZWQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9iZmVhdF9zdHI7CiAKIC8qIGJvYXJkIGluZm8gSU9DVEwgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBzZXJfbm87ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlcmlhbCBuby4gKi8KLSAgICB1bmNoYXIgICAgICBvZW1faWRbMl07ICAgICAgICAgICAgICAgICAgICAgIC8qIE9FTSBJRCAqLwotICAgIHVzaG9ydCAgICAgIGVwX2ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogZXByb20gZmxhZ3MgKi8KLSAgICB1bG9uZzMyICAgICBwcm9jX2lkOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb2Nlc3NvciBJRCAqLwotICAgIHVsb25nMzIgICAgIG1lbXNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVtb3J5IHNpemUgKGJ5dGVzKSAqLwotICAgIHVuY2hhciAgICAgIG1lbV9iYW5rczsgICAgICAgICAgICAgICAgICAgICAgLyogbWVtb3J5IGJhbmtzICovCi0gICAgdW5jaGFyICAgICAgY2hhbl90eXBlOyAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIHR5cGUgKi8KLSAgICB1bmNoYXIgICAgICBjaGFuX2NvdW50OyAgICAgICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgY291bnQgKi8KLSAgICB1bmNoYXIgICAgICByZG9uZ2xlX3ByZXM7ICAgICAgICAgICAgICAgICAgIC8qIGRvbmdsZSBwcmVzZW50PyAqLwotICAgIHVsb25nMzIgICAgIGVwcl9md192ZXI7ICAgICAgICAgICAgICAgICAgICAgLyogKGVwcm9tKSBmaXJtd2FyZSB2ZXJzaW9uICovCi0gICAgdWxvbmczMiAgICAgdXBkX2Z3X3ZlcjsgICAgICAgICAgICAgICAgICAgICAvKiAodXBkYXRlKSBmaXJtd2FyZSB2ZXJzaW9uICovCi0gICAgdWxvbmczMiAgICAgdXBkX3JldmlzaW9uOyAgICAgICAgICAgICAgICAgICAvKiB1cGRhdGUgcmV2aXNpb24gKi8KKyAgICB1MzIgICAgIHNlcl9ubzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VyaWFsIG5vLiAqLworICAgIHU4ICAgICAgb2VtX2lkWzJdOyAgICAgICAgICAgICAgICAgICAgICAvKiBPRU0gSUQgKi8KKyAgICB1MTYgICAgICBlcF9mbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIGVwcm9tIGZsYWdzICovCisgICAgdTMyICAgICBwcm9jX2lkOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb2Nlc3NvciBJRCAqLworICAgIHUzMiAgICAgbWVtc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtZW1vcnkgc2l6ZSAoYnl0ZXMpICovCisgICAgdTggICAgICBtZW1fYmFua3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIG1lbW9yeSBiYW5rcyAqLworICAgIHU4ICAgICAgY2hhbl90eXBlOyAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIHR5cGUgKi8KKyAgICB1OCAgICAgIGNoYW5fY291bnQ7ICAgICAgICAgICAgICAgICAgICAgLyogY2hhbm5lbCBjb3VudCAqLworICAgIHU4ICAgICAgcmRvbmdsZV9wcmVzOyAgICAgICAgICAgICAgICAgICAvKiBkb25nbGUgcHJlc2VudD8gKi8KKyAgICB1MzIgICAgIGVwcl9md192ZXI7ICAgICAgICAgICAgICAgICAgICAgLyogKGVwcm9tKSBmaXJtd2FyZSB2ZXJzaW9uICovCisgICAgdTMyICAgICB1cGRfZndfdmVyOyAgICAgICAgICAgICAgICAgICAgIC8qICh1cGRhdGUpIGZpcm13YXJlIHZlcnNpb24gKi8KKyAgICB1MzIgICAgIHVwZF9yZXZpc2lvbjsgICAgICAgICAgICAgICAgICAgLyogdXBkYXRlIHJldmlzaW9uICovCiAgICAgY2hhciAgICAgICAgdHlwZV9zdHJpbmdbMTZdOyAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG5hbWUgKi8KICAgICBjaGFyICAgICAgICByYWlkX3N0cmluZ1sxNl07ICAgICAgICAgICAgICAgIC8qIFJBSUQgZmlybXdhcmUgbmFtZSAqLwotICAgIHVuY2hhciAgICAgIHVwZGF0ZV9wcmVzOyAgICAgICAgICAgICAgICAgICAgLyogdXBkYXRlIHByZXNlbnQ/ICovCi0gICAgdW5jaGFyICAgICAgeG9yX3ByZXM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBYT1IgZW5naW5lIHByZXNlbnQ/ICovCi0gICAgdW5jaGFyICAgICAgcHJvbV90eXBlOyAgICAgICAgICAgICAgICAgICAgICAvKiBST00gdHlwZSAoZXByb20vZmxhc2gpICovCi0gICAgdW5jaGFyICAgICAgcHJvbV9jb3VudDsgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgUk9NIGRldmljZXMgKi8KLSAgICB1bG9uZzMyICAgICBkdXBfcHJlczsgICAgICAgICAgICAgICAgICAgICAgIC8qIGR1cGxleGluZyBtb2R1bGUgcHJlc2VudD8gKi8KLSAgICB1bG9uZzMyICAgICBjaGFuX3ByZXM7ICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBleHBhbnNpb24gY2huLiAqLwotICAgIHVsb25nMzIgICAgIG1lbV9wcmVzOyAgICAgICAgICAgICAgICAgICAgICAgLyogbWVtb3J5IGV4cGFuc2lvbiBpbnN0LiA/ICovCi0gICAgdW5jaGFyICAgICAgZnRfYnVzX3N5c3RlbTsgICAgICAgICAgICAgICAgICAvKiBmYXVsdCBidXMgc3VwcG9ydGVkPyAqLwotICAgIHVuY2hhciAgICAgIHN1YnR5cGVfdmFsaWQ7ICAgICAgICAgICAgICAgICAgLyogYm9hcmRfc3VidHlwZSB2YWxpZD8gKi8KLSAgICB1bmNoYXIgICAgICBib2FyZF9zdWJ0eXBlOyAgICAgICAgICAgICAgICAgIC8qIHN1YnR5cGUvaGFyZHdhcmUgbGV2ZWwgKi8KLSAgICB1bmNoYXIgICAgICByYW1wYXJpdHlfcHJlczsgICAgICAgICAgICAgICAgIC8qIFJBTSBwYXJpdHkgY2hlY2sgaGFyZHdhcmU/ICovCi19IFBBQ0tFRCBnZHRoX2JpbmZvX3N0cjsgCisgICAgdTggICAgICB1cGRhdGVfcHJlczsgICAgICAgICAgICAgICAgICAgIC8qIHVwZGF0ZSBwcmVzZW50PyAqLworICAgIHU4ICAgICAgeG9yX3ByZXM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBYT1IgZW5naW5lIHByZXNlbnQ/ICovCisgICAgdTggICAgICBwcm9tX3R5cGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJPTSB0eXBlIChlcHJvbS9mbGFzaCkgKi8KKyAgICB1OCAgICAgIHByb21fY291bnQ7ICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIFJPTSBkZXZpY2VzICovCisgICAgdTMyICAgICBkdXBfcHJlczsgICAgICAgICAgICAgICAgICAgICAgIC8qIGR1cGxleGluZyBtb2R1bGUgcHJlc2VudD8gKi8KKyAgICB1MzIgICAgIGNoYW5fcHJlczsgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGV4cGFuc2lvbiBjaG4uICovCisgICAgdTMyICAgICBtZW1fcHJlczsgICAgICAgICAgICAgICAgICAgICAgIC8qIG1lbW9yeSBleHBhbnNpb24gaW5zdC4gPyAqLworICAgIHU4ICAgICAgZnRfYnVzX3N5c3RlbTsgICAgICAgICAgICAgICAgICAvKiBmYXVsdCBidXMgc3VwcG9ydGVkPyAqLworICAgIHU4ICAgICAgc3VidHlwZV92YWxpZDsgICAgICAgICAgICAgICAgICAvKiBib2FyZF9zdWJ0eXBlIHZhbGlkPyAqLworICAgIHU4ICAgICAgYm9hcmRfc3VidHlwZTsgICAgICAgICAgICAgICAgICAvKiBzdWJ0eXBlL2hhcmR3YXJlIGxldmVsICovCisgICAgdTggICAgICByYW1wYXJpdHlfcHJlczsgICAgICAgICAgICAgICAgIC8qIFJBTSBwYXJpdHkgY2hlY2sgaGFyZHdhcmU/ICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfYmluZm9fc3RyOyAKIAogLyogZ2V0IGhvc3QgZHJpdmUgaW5mbyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGNoYXIgICAgICAgIG5hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgICAgLyogaG9zdCBkcml2ZSBuYW1lICovCi0gICAgdWxvbmczMiAgICAgc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaXplIChzZWN0b3JzKSAqLwotICAgIHVuY2hhciAgICAgIGhvc3RfZHJpdmU7ICAgICAgICAgICAgICAgICAgICAgLyogaG9zdCBkcml2ZSBudW1iZXIgKi8KLSAgICB1bmNoYXIgICAgICBsb2dfZHJpdmU7ICAgICAgICAgICAgICAgICAgICAgIC8qIGxvZy4gZHJpdmUgKG1hc3RlcikgKi8KLSAgICB1bmNoYXIgICAgICByZXNlcnZlZDsKLSAgICB1bmNoYXIgICAgICByd19hdHRyaWJzOyAgICAgICAgICAgICAgICAgICAgIC8qIHIvdyBhdHRyaWJzICovCi0gICAgdWxvbmczMiAgICAgc3RhcnRfc2VjOyAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFydCBzZWN0b3IgKi8KLX0gUEFDS0VEIGdkdGhfaGVudHJ5X3N0cjsKKyAgICB1MzIgICAgIHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSAoc2VjdG9ycykgKi8KKyAgICB1OCAgICAgIGhvc3RfZHJpdmU7ICAgICAgICAgICAgICAgICAgICAgLyogaG9zdCBkcml2ZSBudW1iZXIgKi8KKyAgICB1OCAgICAgIGxvZ19kcml2ZTsgICAgICAgICAgICAgICAgICAgICAgLyogbG9nLiBkcml2ZSAobWFzdGVyKSAqLworICAgIHU4ICAgICAgcmVzZXJ2ZWQ7CisgICAgdTggICAgICByd19hdHRyaWJzOyAgICAgICAgICAgICAgICAgICAgIC8qIHIvdyBhdHRyaWJzICovCisgICAgdTMyICAgICBzdGFydF9zZWM7ICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IHNlY3RvciAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2hlbnRyeV9zdHI7CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBlbnRyaWVzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVudHJ5IGNvdW50ICovCi0gICAgdWxvbmczMiAgICAgb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQgb2YgZW50cmllcyAqLwotICAgIHVuY2hhciAgICAgIHNlY3NfcF9oZWFkOyAgICAgICAgICAgICAgICAgICAgLyogc2VjdG9ycy9oZWFkICovCi0gICAgdW5jaGFyICAgICAgaGVhZHNfcF9jeWw7ICAgICAgICAgICAgICAgICAgICAvKiBoZWFkcy9jeWxpbmRlciAqLwotICAgIHVuY2hhciAgICAgIHJlc2VydmVkOwotICAgIHVuY2hhciAgICAgIGNsdXN0X2RydnR5cGU7ICAgICAgICAgICAgICAgICAgLyogY2x1c3RlciBkcml2ZSB0eXBlICovCi0gICAgdWxvbmczMiAgICAgbG9jYXRpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLworICAgIHUzMiAgICAgZW50cmllczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbnRyeSBjb3VudCAqLworICAgIHUzMiAgICAgb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQgb2YgZW50cmllcyAqLworICAgIHU4ICAgICAgc2Vjc19wX2hlYWQ7ICAgICAgICAgICAgICAgICAgICAvKiBzZWN0b3JzL2hlYWQgKi8KKyAgICB1OCAgICAgIGhlYWRzX3BfY3lsOyAgICAgICAgICAgICAgICAgICAgLyogaGVhZHMvY3lsaW5kZXIgKi8KKyAgICB1OCAgICAgIHJlc2VydmVkOworICAgIHU4ICAgICAgY2x1c3RfZHJ2dHlwZTsgICAgICAgICAgICAgICAgICAvKiBjbHVzdGVyIGRyaXZlIHR5cGUgKi8KKyAgICB1MzIgICAgIGxvY2F0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KICAgICBnZHRoX2hlbnRyeV9zdHIgZW50cnlbTUFYX0hEUklWRVNdOyAgICAgICAgIC8qIGVudHJpZXMgKi8KLX0gUEFDS0VEIGdkdGhfaGdldF9zdHI7ICAgIAorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2hnZXRfc3RyOyAgICAKIAogCiAvKiBEUFJBTSBzdHJ1Y3R1cmVzICovCiAKIC8qIGludGVyZmFjZSBhcmVhIElTQS9QQ0kgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgICAgICAgICAgICAgIFNfQ21kX0luZHg7ICAgICAgICAgICAgIC8qIHNwZWNpYWwgY29tbWFuZCAqLwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgU19TdGF0dXM7ICAgICAgICAgICAgICAgLyogc3RhdHVzIHNwZWNpYWwgY29tbWFuZCAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgcmVzZXJ2ZWQxOwotICAgIHVsb25nMzIgICAgICAgICAgICAgU19JbmZvWzRdOyAgICAgICAgICAgICAgLyogYWRkLiBpbmZvIHNwZWNpYWwgY29tbWFuZCAqLwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgU2VtYTA7ICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzZW1hcGhvcmUgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHJlc2VydmVkMlszXTsKLSAgICB1bmNoYXIgICAgICAgICAgICAgIENtZF9JbmRleDsgICAgICAgICAgICAgIC8qIGNvbW1hbmQgbnVtYmVyICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICByZXNlcnZlZDNbM107Ci0gICAgdXNob3J0IHZvbGF0aWxlICAgICBTdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgU2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZShmb3IgYXN5bmMuZXZlbnRzKSAqLwotICAgIHVsb25nMzIgICAgICAgICAgICAgSW5mb1syXTsgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvICovCisgICAgdTggICAgICAgICAgICAgIFNfQ21kX0luZHg7ICAgICAgICAgICAgIC8qIHNwZWNpYWwgY29tbWFuZCAqLworICAgIHU4IHZvbGF0aWxlICAgICBTX1N0YXR1czsgICAgICAgICAgICAgICAvKiBzdGF0dXMgc3BlY2lhbCBjb21tYW5kICovCisgICAgdTE2ICAgICAgICAgICAgICByZXNlcnZlZDE7CisgICAgdTMyICAgICAgICAgICAgIFNfSW5mb1s0XTsgICAgICAgICAgICAgIC8qIGFkZC4gaW5mbyBzcGVjaWFsIGNvbW1hbmQgKi8KKyAgICB1OCB2b2xhdGlsZSAgICAgU2VtYTA7ICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzZW1hcGhvcmUgKi8KKyAgICB1OCAgICAgICAgICAgICAgcmVzZXJ2ZWQyWzNdOworICAgIHU4ICAgICAgICAgICAgICBDbWRfSW5kZXg7ICAgICAgICAgICAgICAvKiBjb21tYW5kIG51bWJlciAqLworICAgIHU4ICAgICAgICAgICAgICByZXNlcnZlZDNbM107CisgICAgdTE2IHZvbGF0aWxlICAgICBTdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLworICAgIHUxNiAgICAgICAgICAgICAgU2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZShmb3IgYXN5bmMuZXZlbnRzKSAqLworICAgIHUzMiAgICAgICAgICAgICBJbmZvWzJdOyAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm8gKi8KICAgICBzdHJ1Y3QgewotICAgICAgICB1c2hvcnQgICAgICAgICAgb2Zmc2V0OyAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBvZmZzLiBpbiB0aGUgRFBSQU0qLwotICAgICAgICB1c2hvcnQgICAgICAgICAgc2Vydl9pZDsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLwotICAgIH0gUEFDS0VEIGNvbW1fcXVldWVbTUFYT0ZGU0VUU107ICAgICAgICAgICAgLyogY29tbWFuZCBxdWV1ZSAqLwotICAgIHVsb25nMzIgICAgICAgICAgICAgYmlvc19yZXNlcnZlZFsyXTsKLSAgICB1bmNoYXIgICAgICAgICAgICAgIGdkdF9kcHJfY21kWzFdOyAgICAgICAgIC8qIGNvbW1hbmRzICovCi19IFBBQ0tFRCBnZHRfZHByX2lmOworICAgICAgICB1MTYgICAgICAgICAgb2Zmc2V0OyAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBvZmZzLiBpbiB0aGUgRFBSQU0qLworICAgICAgICB1MTYgICAgICAgICAgc2Vydl9pZDsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLworICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgY29tbV9xdWV1ZVtNQVhPRkZTRVRTXTsgICAgICAgICAgICAvKiBjb21tYW5kIHF1ZXVlICovCisgICAgdTMyICAgICAgICAgICAgIGJpb3NfcmVzZXJ2ZWRbMl07CisgICAgdTggICAgICAgICAgICAgIGdkdF9kcHJfY21kWzFdOyAgICAgICAgIC8qIGNvbW1hbmRzICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdF9kcHJfaWY7CiAKIC8qIFNSQU0gc3RydWN0dXJlIFBDSSBjb250cm9sbGVycyAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIG1hZ2ljOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBJRCBmcm9tIEJJT1MgKi8KLSAgICB1c2hvcnQgICAgICBuZWVkX2RlaW5pdDsgICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBiZXR3LiBCSU9TL2RyaXZlciAqLwotICAgIHVuY2hhciAgICAgIHN3aXRjaF9zdXBwb3J0OyAgICAgICAgICAgICAgICAgLyogc2VlIG5lZWRfZGVpbml0ICovCi0gICAgdW5jaGFyICAgICAgcGFkZGluZ1s5XTsKLSAgICB1bmNoYXIgICAgICBvc191c2VkWzE2XTsgICAgICAgICAgICAgICAgICAgIC8qIE9TIGNvZGUgcGVyIHNlcnZpY2UgKi8KLSAgICB1bmNoYXIgICAgICB1bnVzZWRbMjhdOwotICAgIHVuY2hhciAgICAgIGZ3X21hZ2ljOyAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHIuIElEIGZyb20gZmlybXdhcmUgKi8KLX0gUEFDS0VEIGdkdF9wY2lfc3JhbTsKKyAgICB1MzIgICAgIG1hZ2ljOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBJRCBmcm9tIEJJT1MgKi8KKyAgICB1MTYgICAgICBuZWVkX2RlaW5pdDsgICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBiZXR3LiBCSU9TL2RyaXZlciAqLworICAgIHU4ICAgICAgc3dpdGNoX3N1cHBvcnQ7ICAgICAgICAgICAgICAgICAvKiBzZWUgbmVlZF9kZWluaXQgKi8KKyAgICB1OCAgICAgIHBhZGRpbmdbOV07CisgICAgdTggICAgICBvc191c2VkWzE2XTsgICAgICAgICAgICAgICAgICAgIC8qIE9TIGNvZGUgcGVyIHNlcnZpY2UgKi8KKyAgICB1OCAgICAgIHVudXNlZFsyOF07CisgICAgdTggICAgICBmd19tYWdpYzsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyLiBJRCBmcm9tIGZpcm13YXJlICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdF9wY2lfc3JhbTsKIAogLyogU1JBTSBzdHJ1Y3R1cmUgRUlTQSBjb250cm9sbGVycyAoYnV0IE5PVCBHRFQzMDAwLzMwMjApICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgb3NfdXNlZFsxNl07ICAgICAgICAgICAgICAgICAgICAvKiBPUyBjb2RlIHBlciBzZXJ2aWNlICovCi0gICAgdXNob3J0ICAgICAgbmVlZF9kZWluaXQ7ICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggYmV0dy4gQklPUy9kcml2ZXIgKi8KLSAgICB1bmNoYXIgICAgICBzd2l0Y2hfc3VwcG9ydDsgICAgICAgICAgICAgICAgIC8qIHNlZSBuZWVkX2RlaW5pdCAqLwotICAgIHVuY2hhciAgICAgIHBhZGRpbmc7Ci19IFBBQ0tFRCBnZHRfZWlzYV9zcmFtOworICAgIHU4ICAgICAgb3NfdXNlZFsxNl07ICAgICAgICAgICAgICAgICAgICAvKiBPUyBjb2RlIHBlciBzZXJ2aWNlICovCisgICAgdTE2ICAgICAgbmVlZF9kZWluaXQ7ICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggYmV0dy4gQklPUy9kcml2ZXIgKi8KKyAgICB1OCAgICAgIHN3aXRjaF9zdXBwb3J0OyAgICAgICAgICAgICAgICAgLyogc2VlIG5lZWRfZGVpbml0ICovCisgICAgdTggICAgICBwYWRkaW5nOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRfZWlzYV9zcmFtOwogCiAKIC8qIERQUkFNIElTQSBjb250cm9sbGVycyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgIGJpb3NfdXNlZFsweDNjMDAtMzJdOyAgIC8qIDE1S0IgLSAzMkJ5dGVzIEJJT1MgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIG1hZ2ljOyAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgKEVJU0EpIElEICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICBuZWVkX2RlaW5pdDsgICAgICAgICAgICAvKiBzd2l0Y2ggYmV0dy4gQklPUy9kcml2ZXIgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIHN3aXRjaF9zdXBwb3J0OyAgICAgICAgIC8qIHNlZSBuZWVkX2RlaW5pdCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgcGFkZGluZ1s5XTsKLSAgICAgICAgICAgIHVuY2hhciAgICAgIG9zX3VzZWRbMTZdOyAgICAgICAgICAgIC8qIE9TIGNvZGUgcGVyIHNlcnZpY2UgKi8KLSAgICAgICAgfSBQQUNLRUQgZHBfc3JhbTsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIGJpb3NfYXJlYVsweDQwMDBdOyAgICAgIC8qIDE2S0IgcmVzZXJ2ZWQgZm9yIEJJT1MgKi8KKyAgICAgICAgICAgIHU4ICAgICAgYmlvc191c2VkWzB4M2MwMC0zMl07ICAgLyogMTVLQiAtIDMyQnl0ZXMgQklPUyAqLworICAgICAgICAgICAgdTMyICAgICBtYWdpYzsgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIChFSVNBKSBJRCAqLworICAgICAgICAgICAgdTE2ICAgICAgbmVlZF9kZWluaXQ7ICAgICAgICAgICAgLyogc3dpdGNoIGJldHcuIEJJT1MvZHJpdmVyICovCisgICAgICAgICAgICB1OCAgICAgIHN3aXRjaF9zdXBwb3J0OyAgICAgICAgIC8qIHNlZSBuZWVkX2RlaW5pdCAqLworICAgICAgICAgICAgdTggICAgICBwYWRkaW5nWzldOworICAgICAgICAgICAgdTggICAgICBvc191c2VkWzE2XTsgICAgICAgICAgICAvKiBPUyBjb2RlIHBlciBzZXJ2aWNlICovCisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZHBfc3JhbTsKKyAgICAgICAgdTggICAgICAgICAgYmlvc19hcmVhWzB4NDAwMF07ICAgICAgLyogMTZLQiByZXNlcnZlZCBmb3IgQklPUyAqLwogICAgIH0gYnU7CiAgICAgdW5pb24gewogICAgICAgICBnZHRfZHByX2lmICAgICAgaWM7ICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJmYWNlIGFyZWEgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlmX2FyZWFbMHgzMDAwXTsgICAgICAgIC8qIDEyS0IgZm9yIGludGVyZmFjZSAqLworICAgICAgICB1OCAgICAgICAgICBpZl9hcmVhWzB4MzAwMF07ICAgICAgICAvKiAxMktCIGZvciBpbnRlcmZhY2UgKi8KICAgICB9IHU7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIG1lbWxvY2s7ICAgICAgICAgICAgICAgIC8qIHdyaXRlIHByb3RlY3Rpb24gRFBSQU0gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGV2ZW50OyAgICAgICAgICAgICAgICAgIC8qIHJlbGVhc2UgZXZlbnQgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlycWVuOyAgICAgICAgICAgICAgICAgIC8qIGJvYXJkIGludGVycnVwdHMgZW5hYmxlICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpcnFkZWw7ICAgICAgICAgICAgICAgICAvKiBhY2tub3dsZWRnZSBib2FyZCBpbnQuICovCi0gICAgICAgIHVuY2hhciB2b2xhdGlsZSBTZW1hMTsgICAgICAgICAgICAgICAgICAvKiBzdGF0dXMgc2VtYXBob3JlICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBycTsgICAgICAgICAgICAgICAgICAgICAvKiBJUlEvRFJRIGNvbmZpZ3VyYXRpb24gKi8KLSAgICB9IFBBQ0tFRCBpbzsKLX0gUEFDS0VEIGdkdDJfZHByYW1fc3RyOworICAgICAgICB1OCAgICAgICAgICBtZW1sb2NrOyAgICAgICAgICAgICAgICAvKiB3cml0ZSBwcm90ZWN0aW9uIERQUkFNICovCisgICAgICAgIHU4ICAgICAgICAgIGV2ZW50OyAgICAgICAgICAgICAgICAgIC8qIHJlbGVhc2UgZXZlbnQgKi8KKyAgICAgICAgdTggICAgICAgICAgaXJxZW47ICAgICAgICAgICAgICAgICAgLyogYm9hcmQgaW50ZXJydXB0cyBlbmFibGUgKi8KKyAgICAgICAgdTggICAgICAgICAgaXJxZGVsOyAgICAgICAgICAgICAgICAgLyogYWNrbm93bGVkZ2UgYm9hcmQgaW50LiAqLworICAgICAgICB1OCB2b2xhdGlsZSBTZW1hMTsgICAgICAgICAgICAgICAgICAvKiBzdGF0dXMgc2VtYXBob3JlICovCisgICAgICAgIHU4ICAgICAgICAgIHJxOyAgICAgICAgICAgICAgICAgICAgIC8qIElSUS9EUlEgY29uZmlndXJhdGlvbiAqLworICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgaW87Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDJfZHByYW1fc3RyOwogCiAvKiBEUFJBTSBQQ0kgY29udHJvbGxlcnMgKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgICB1bmlvbiB7CiAgICAgICAgIGdkdF9kcHJfaWYgICAgICBpYzsgICAgICAgICAgICAgICAgICAgICAvKiBpbnRlcmZhY2UgYXJlYSAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgaWZfYXJlYVsweGZmMC1zaXplb2YoZ2R0X3BjaV9zcmFtKV07CisgICAgICAgIHU4ICAgICAgICAgIGlmX2FyZWFbMHhmZjAtc2l6ZW9mKGdkdF9wY2lfc3JhbSldOwogICAgIH0gdTsKICAgICBnZHRfcGNpX3NyYW0gICAgICAgIGdkdDZzcjsgICAgICAgICAgICAgICAgIC8qIFNSQU0gc3RydWN0dXJlICovCiAgICAgc3RydWN0IHsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIHVudXNlZDBbMV07Ci0gICAgICAgIHVuY2hhciB2b2xhdGlsZSBTZW1hMTsgICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHNlbWFwaG9yZSAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgdW51c2VkMVszXTsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlycWVuOyAgICAgICAgICAgICAgICAgIC8qIGJvYXJkIGludGVycnVwdHMgZW5hYmxlICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICB1bnVzZWQyWzJdOwotICAgICAgICB1bmNoYXIgICAgICAgICAgZXZlbnQ7ICAgICAgICAgICAgICAgICAgLyogcmVsZWFzZSBldmVudCAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgdW51c2VkM1szXTsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlycWRlbDsgICAgICAgICAgICAgICAgIC8qIGFja25vd2xlZGdlIGJvYXJkIGludC4gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIHVudXNlZDRbM107Ci0gICAgfSBQQUNLRUQgaW87Ci19IFBBQ0tFRCBnZHQ2X2RwcmFtX3N0cjsKKyAgICAgICAgdTggICAgICAgICAgdW51c2VkMFsxXTsKKyAgICAgICAgdTggdm9sYXRpbGUgU2VtYTE7ICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzZW1hcGhvcmUgKi8KKyAgICAgICAgdTggICAgICAgICAgdW51c2VkMVszXTsKKyAgICAgICAgdTggICAgICAgICAgaXJxZW47ICAgICAgICAgICAgICAgICAgLyogYm9hcmQgaW50ZXJydXB0cyBlbmFibGUgKi8KKyAgICAgICAgdTggICAgICAgICAgdW51c2VkMlsyXTsKKyAgICAgICAgdTggICAgICAgICAgZXZlbnQ7ICAgICAgICAgICAgICAgICAgLyogcmVsZWFzZSBldmVudCAqLworICAgICAgICB1OCAgICAgICAgICB1bnVzZWQzWzNdOworICAgICAgICB1OCAgICAgICAgICBpcnFkZWw7ICAgICAgICAgICAgICAgICAvKiBhY2tub3dsZWRnZSBib2FyZCBpbnQuICovCisgICAgICAgIHU4ICAgICAgICAgIHVudXNlZDRbM107CisgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBpbzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0Nl9kcHJhbV9zdHI7CiAKIC8qIFBMWCByZWdpc3RlciBzdHJ1Y3R1cmUgKG5ldyBQQ0kgY29udHJvbGxlcnMpICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgICAgICAgICBjZmdfcmVnOyAgICAgICAgLyogRFBSQU0gY2ZnLigyOmJlbG93IDFNQiwwOmFueXdoZXJlKSovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQxWzB4M2ZdOwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgc2VtYTBfcmVnOyAgICAgICAgICAgICAgLyogY29tbWFuZCBzZW1hcGhvcmUgKi8KLSAgICB1bmNoYXIgdm9sYXRpbGUgICAgIHNlbWExX3JlZzsgICAgICAgICAgICAgIC8qIHN0YXR1cyBzZW1hcGhvcmUgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHVudXNlZDJbMl07Ci0gICAgdXNob3J0IHZvbGF0aWxlICAgICBzdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLwotICAgIHVsb25nMzIgICAgICAgICAgICAgaW5mb1syXTsgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQzWzB4MTBdOwotICAgIHVuY2hhciAgICAgICAgICAgICAgbGRvb3JfcmVnOyAgICAgICAgICAgICAgLyogUENJIHRvIGxvY2FsIGRvb3JiZWxsICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQ0WzNdOwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgZWRvb3JfcmVnOyAgICAgICAgICAgICAgLyogbG9jYWwgdG8gUENJIGRvb3JiZWxsICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQ1WzNdOwotICAgIHVuY2hhciAgICAgICAgICAgICAgY29udHJvbDA7ICAgICAgICAgICAgICAgLyogY29udHJvbDAgcmVnaXN0ZXIodW51c2VkKSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgY29udHJvbDE7ICAgICAgICAgICAgICAgLyogYm9hcmQgaW50ZXJydXB0cyBlbmFibGUgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHVudXNlZDZbMHgxNl07Ci19IFBBQ0tFRCBnZHQ2Y19wbHhfcmVnczsKKyAgICB1OCAgICAgICAgICAgICAgY2ZnX3JlZzsgICAgICAgIC8qIERQUkFNIGNmZy4oMjpiZWxvdyAxTUIsMDphbnl3aGVyZSkqLworICAgIHU4ICAgICAgICAgICAgICB1bnVzZWQxWzB4M2ZdOworICAgIHU4IHZvbGF0aWxlICAgICBzZW1hMF9yZWc7ICAgICAgICAgICAgICAvKiBjb21tYW5kIHNlbWFwaG9yZSAqLworICAgIHU4IHZvbGF0aWxlICAgICBzZW1hMV9yZWc7ICAgICAgICAgICAgICAvKiBzdGF0dXMgc2VtYXBob3JlICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDJbMl07CisgICAgdTE2IHZvbGF0aWxlICAgICBzdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLworICAgIHUxNiAgICAgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLworICAgIHUzMiAgICAgICAgICAgICBpbmZvWzJdOyAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm8gKi8KKyAgICB1OCAgICAgICAgICAgICAgdW51c2VkM1sweDEwXTsKKyAgICB1OCAgICAgICAgICAgICAgbGRvb3JfcmVnOyAgICAgICAgICAgICAgLyogUENJIHRvIGxvY2FsIGRvb3JiZWxsICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDRbM107CisgICAgdTggdm9sYXRpbGUgICAgIGVkb29yX3JlZzsgICAgICAgICAgICAgIC8qIGxvY2FsIHRvIFBDSSBkb29yYmVsbCAqLworICAgIHU4ICAgICAgICAgICAgICB1bnVzZWQ1WzNdOworICAgIHU4ICAgICAgICAgICAgICBjb250cm9sMDsgICAgICAgICAgICAgICAvKiBjb250cm9sMCByZWdpc3Rlcih1bnVzZWQpICovCisgICAgdTggICAgICAgICAgICAgIGNvbnRyb2wxOyAgICAgICAgICAgICAgIC8qIGJvYXJkIGludGVycnVwdHMgZW5hYmxlICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDZbMHgxNl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDZjX3BseF9yZWdzOwogCiAvKiBEUFJBTSBuZXcgUENJIGNvbnRyb2xsZXJzICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgdW5pb24gewogICAgICAgICBnZHRfZHByX2lmICAgICAgaWM7ICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJmYWNlIGFyZWEgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlmX2FyZWFbMHg0MDAwLXNpemVvZihnZHRfcGNpX3NyYW0pXTsKKyAgICAgICAgdTggICAgICAgICAgaWZfYXJlYVsweDQwMDAtc2l6ZW9mKGdkdF9wY2lfc3JhbSldOwogICAgIH0gdTsKICAgICBnZHRfcGNpX3NyYW0gICAgICAgIGdkdDZzcjsgICAgICAgICAgICAgICAgIC8qIFNSQU0gc3RydWN0dXJlICovCi19IFBBQ0tFRCBnZHQ2Y19kcHJhbV9zdHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDZjX2RwcmFtX3N0cjsKIAogLyogaTk2MCByZWdpc3RlciBzdHJ1Y3R1cmUgKFBDSSBNUFIgY29udHJvbGxlcnMpICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQxWzE2XTsKLSAgICB1bmNoYXIgdm9sYXRpbGUgICAgIHNlbWEwX3JlZzsgICAgICAgICAgICAgIC8qIGNvbW1hbmQgc2VtYXBob3JlICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQyOwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgc2VtYTFfcmVnOyAgICAgICAgICAgICAgLyogc3RhdHVzIHNlbWFwaG9yZSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdW51c2VkMzsKLSAgICB1c2hvcnQgdm9sYXRpbGUgICAgIHN0YXR1czsgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgc3RhdHVzICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICBzZXJ2aWNlOyAgICAgICAgICAgICAgICAvKiBzZXJ2aWNlICovCi0gICAgdWxvbmczMiAgICAgICAgICAgICBpbmZvWzJdOyAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm8gKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIGxkb29yX3JlZzsgICAgICAgICAgICAgIC8qIFBDSSB0byBsb2NhbCBkb29yYmVsbCAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdW51c2VkNFsxMV07Ci0gICAgdW5jaGFyIHZvbGF0aWxlICAgICBlZG9vcl9yZWc7ICAgICAgICAgICAgICAvKiBsb2NhbCB0byBQQ0kgZG9vcmJlbGwgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHVudXNlZDVbN107Ci0gICAgdW5jaGFyICAgICAgICAgICAgICBlZG9vcl9lbl9yZWc7ICAgICAgICAgICAvKiBib2FyZCBpbnRlcnJ1cHRzIGVuYWJsZSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdW51c2VkNlsyN107Ci0gICAgdWxvbmczMiAgICAgICAgICAgICB1bnVzZWQ3WzkzOV07ICAgICAgICAgCi0gICAgdWxvbmczMiAgICAgICAgICAgICBzZXZlcml0eTsgICAgICAgCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDFbMTZdOworICAgIHU4IHZvbGF0aWxlICAgICBzZW1hMF9yZWc7ICAgICAgICAgICAgICAvKiBjb21tYW5kIHNlbWFwaG9yZSAqLworICAgIHU4ICAgICAgICAgICAgICB1bnVzZWQyOworICAgIHU4IHZvbGF0aWxlICAgICBzZW1hMV9yZWc7ICAgICAgICAgICAgICAvKiBzdGF0dXMgc2VtYXBob3JlICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDM7CisgICAgdTE2IHZvbGF0aWxlICAgICBzdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLworICAgIHUxNiAgICAgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLworICAgIHUzMiAgICAgICAgICAgICBpbmZvWzJdOyAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm8gKi8KKyAgICB1OCAgICAgICAgICAgICAgbGRvb3JfcmVnOyAgICAgICAgICAgICAgLyogUENJIHRvIGxvY2FsIGRvb3JiZWxsICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDRbMTFdOworICAgIHU4IHZvbGF0aWxlICAgICBlZG9vcl9yZWc7ICAgICAgICAgICAgICAvKiBsb2NhbCB0byBQQ0kgZG9vcmJlbGwgKi8KKyAgICB1OCAgICAgICAgICAgICAgdW51c2VkNVs3XTsKKyAgICB1OCAgICAgICAgICAgICAgZWRvb3JfZW5fcmVnOyAgICAgICAgICAgLyogYm9hcmQgaW50ZXJydXB0cyBlbmFibGUgKi8KKyAgICB1OCAgICAgICAgICAgICAgdW51c2VkNlsyN107CisgICAgdTMyICAgICAgICAgICAgIHVudXNlZDdbOTM5XTsgICAgICAgICAKKyAgICB1MzIgICAgICAgICAgICAgc2V2ZXJpdHk7ICAgICAgIAogICAgIGNoYXIgICAgICAgICAgICAgICAgZXZ0X3N0clsyNTZdOyAgICAgICAgICAgLyogZXZlbnQgc3RyaW5nICovCi19IFBBQ0tFRCBnZHQ2bV9pOTYwX3JlZ3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDZtX2k5NjBfcmVnczsKIAogLyogRFBSQU0gUENJIE1QUiBjb250cm9sbGVycyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGdkdDZtX2k5NjBfcmVncyAgICAgaTk2MHI7ICAgICAgICAgICAgICAgICAgLyogNEtCIGk5NjAgcmVnaXN0ZXJzICovCiAgICAgdW5pb24gewogICAgICAgICBnZHRfZHByX2lmICAgICAgaWM7ICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJmYWNlIGFyZWEgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlmX2FyZWFbMHgzMDAwLXNpemVvZihnZHRfcGNpX3NyYW0pXTsKKyAgICAgICAgdTggICAgICAgICAgaWZfYXJlYVsweDMwMDAtc2l6ZW9mKGdkdF9wY2lfc3JhbSldOwogICAgIH0gdTsKICAgICBnZHRfcGNpX3NyYW0gICAgICAgIGdkdDZzcjsgICAgICAgICAgICAgICAgIC8qIFNSQU0gc3RydWN0dXJlICovCi19IFBBQ0tFRCBnZHQ2bV9kcHJhbV9zdHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDZtX2RwcmFtX3N0cjsKIAogCiAvKiBQQ0kgcmVzb3VyY2VzICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgc3RydWN0IHBjaV9kZXYgICAgICAqcGRldjsKLSAgICB1bG9uZyAgICAgICAgICAgICAgIGRwbWVtOyAgICAgICAgICAgICAgICAgIC8qIERQUkFNIGFkZHJlc3MgKi8KLSAgICB1bG9uZyAgICAgICAgICAgICAgIGlvOyAgICAgICAgICAgICAgICAgICAgIC8qIElPIGFkZHJlc3MgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgZHBtZW07ICAgICAgICAgICAgICAgICAgLyogRFBSQU0gYWRkcmVzcyAqLworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICBpbzsgICAgICAgICAgICAgICAgICAgICAvKiBJTyBhZGRyZXNzICovCiB9IGdkdGhfcGNpX3N0cjsKIAogCkBAIC04NDYsOTMgKzg0Niw5MyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIHN0cnVjdCBTY3NpX0hvc3QgICAgKnNob3N0OwogICAgIHN0cnVjdCBsaXN0X2hlYWQgICAgbGlzdDsKLSAgICB1c2hvcnQgICAgICAJaGFudW07Ci0gICAgdXNob3J0ICAgICAgICAgICAgICBvZW1faWQ7ICAgICAgICAgICAgICAgICAvKiBPRU0gKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIHR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgY2xhc3MgKi8KLSAgICB1bG9uZzMyICAgICAgICAgICAgIHN0eXBlOyAgICAgICAgICAgICAgICAgIC8qIHN1YnR5cGUgKFBDSTogZGV2aWNlIElEKSAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgZndfdmVyczsgICAgICAgICAgICAgICAgLyogZmlybXdhcmUgdmVyc2lvbiAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgY2FjaGVfZmVhdDsgICAgICAgICAgICAgLyogZmVhdC4gY2FjaGUgc2Vydi4gKHMvZywuLikqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgcmF3X2ZlYXQ7ICAgICAgICAgICAgICAgLyogZmVhdC4gcmF3IHNlcnZpY2UgKHMvZywuLikqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgc2NyZWVuX2ZlYXQ7ICAgICAgICAgICAgLyogZmVhdC4gcmF3IHNlcnZpY2UgKHMvZywuLikqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgYm1pYzsgICAgICAgICAgICAgICAgICAgLyogQk1JQyBhZGRyZXNzIChFSVNBKSAqLworICAgIHUxNiAgICAgIAloYW51bTsKKyAgICB1MTYgICAgICAgICAgICAgIG9lbV9pZDsgICAgICAgICAgICAgICAgIC8qIE9FTSAqLworICAgIHUxNiAgICAgICAgICAgICAgdHlwZTsgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBjbGFzcyAqLworICAgIHUzMiAgICAgICAgICAgICBzdHlwZTsgICAgICAgICAgICAgICAgICAvKiBzdWJ0eXBlIChQQ0k6IGRldmljZSBJRCkgKi8KKyAgICB1MTYgICAgICAgICAgICAgIGZ3X3ZlcnM7ICAgICAgICAgICAgICAgIC8qIGZpcm13YXJlIHZlcnNpb24gKi8KKyAgICB1MTYgICAgICAgICAgICAgIGNhY2hlX2ZlYXQ7ICAgICAgICAgICAgIC8qIGZlYXQuIGNhY2hlIHNlcnYuIChzL2csLi4pKi8KKyAgICB1MTYgICAgICAgICAgICAgIHJhd19mZWF0OyAgICAgICAgICAgICAgIC8qIGZlYXQuIHJhdyBzZXJ2aWNlIChzL2csLi4pKi8KKyAgICB1MTYgICAgICAgICAgICAgIHNjcmVlbl9mZWF0OyAgICAgICAgICAgIC8qIGZlYXQuIHJhdyBzZXJ2aWNlIChzL2csLi4pKi8KKyAgICB1MTYgICAgICAgICAgICAgIGJtaWM7ICAgICAgICAgICAgICAgICAgIC8qIEJNSUMgYWRkcmVzcyAoRUlTQSkgKi8KICAgICB2b2lkIF9faW9tZW0gICAgICAgICpicmQ7ICAgICAgICAgICAgICAgICAgIC8qIERQUkFNIGFkZHJlc3MgKi8KLSAgICB1bG9uZzMyICAgICAgICAgICAgIGJyZF9waHlzOyAgICAgICAgICAgICAgIC8qIHNsb3QgbnVtYmVyL0JJT1MgYWRkcmVzcyAqLworICAgIHUzMiAgICAgICAgICAgICBicmRfcGh5czsgICAgICAgICAgICAgICAvKiBzbG90IG51bWJlci9CSU9TIGFkZHJlc3MgKi8KICAgICBnZHQ2Y19wbHhfcmVncyAgICAgICpwbHg7ICAgICAgICAgICAgICAgICAgIC8qIFBMWCByZWdzIChuZXcgUENJIGNvbnRyLikgKi8KICAgICBnZHRoX2NtZF9zdHIgICAgICAgIGNtZGV4dDsKICAgICBnZHRoX2NtZF9zdHIgICAgICAgICpwY2NiOyAgICAgICAgICAgICAgICAgIC8qIGFkZHJlc3MgY29tbWFuZCBzdHJ1Y3R1cmUgKi8KLSAgICB1bG9uZzMyICAgICAgICAgICAgIGNjYl9waHlzOyAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3MgKi8KKyAgICB1MzIgICAgICAgICAgICAgY2NiX3BoeXM7ICAgICAgICAgICAgICAgLyogcGh5cy4gYWRkcmVzcyAqLwogI2lmZGVmIElOVF9DT0FMCiAgICAgZ2R0aF9jb2FsX3N0YXR1cyAgICAqY29hbF9zdGF0OyAgICAgICAgICAgICAvKiBidWZmZXIgZm9yIGNvYWxlc2NpbmcgaW50LiovCi0gICAgdWxvbmc2NCAgICAgICAgICAgICBjb2FsX3N0YXRfcGh5czsgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzICovCisgICAgdTY0ICAgICAgICAgICAgIGNvYWxfc3RhdF9waHlzOyAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3MgKi8KICNlbmRpZgogICAgIGNoYXIgICAgICAgICAgICAgICAgKnBzY3JhdGNoOyAgICAgICAgICAgICAgLyogc2NyYXRjaCAoRE1BKSBidWZmZXIgKi8KLSAgICB1bG9uZzY0ICAgICAgICAgICAgIHNjcmF0Y2hfcGh5czsgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3MgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHNjcmF0Y2hfYnVzeTsgICAgICAgICAgIC8qIGluIHVzZT8gKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIGRtYTY0X3N1cHBvcnQ7ICAgICAgICAgIC8qIDY0LWJpdCBETUEgc3VwcG9ydGVkPyAqLworICAgIHU2NCAgICAgICAgICAgICBzY3JhdGNoX3BoeXM7ICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzICovCisgICAgdTggICAgICAgICAgICAgIHNjcmF0Y2hfYnVzeTsgICAgICAgICAgIC8qIGluIHVzZT8gKi8KKyAgICB1OCAgICAgICAgICAgICAgZG1hNjRfc3VwcG9ydDsgICAgICAgICAgLyogNjQtYml0IERNQSBzdXBwb3J0ZWQ/ICovCiAgICAgZ2R0aF9tc2dfc3RyICAgICAgICAqcG1zZzsgICAgICAgICAgICAgICAgICAvKiBtZXNzYWdlIGJ1ZmZlciAqLwotICAgIHVsb25nNjQgICAgICAgICAgICAgbXNnX3BoeXM7ICAgICAgICAgICAgICAgLyogcGh5cy4gYWRkcmVzcyAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgc2Nhbl9tb2RlOyAgICAgICAgICAgICAgLyogY3VycmVudCBzY2FuIG1vZGUgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIGlycTsgICAgICAgICAgICAgICAgICAgIC8qIElSUSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgZHJxOyAgICAgICAgICAgICAgICAgICAgLyogRFJRIChJU0EgY29udHJvbGxlcnMpICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICBzdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZS9maXJtd2FyZSB2ZXIuLy4uICovCi0gICAgdWxvbmczMiAgICAgICAgICAgICBpbmZvOwotICAgIHVsb25nMzIgICAgICAgICAgICAgaW5mbzI7ICAgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvICovCisgICAgdTY0ICAgICAgICAgICAgIG1zZ19waHlzOyAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3MgKi8KKyAgICB1OCAgICAgICAgICAgICAgc2Nhbl9tb2RlOyAgICAgICAgICAgICAgLyogY3VycmVudCBzY2FuIG1vZGUgKi8KKyAgICB1OCAgICAgICAgICAgICAgaXJxOyAgICAgICAgICAgICAgICAgICAgLyogSVJRICovCisgICAgdTggICAgICAgICAgICAgIGRycTsgICAgICAgICAgICAgICAgICAgIC8qIERSUSAoSVNBIGNvbnRyb2xsZXJzKSAqLworICAgIHUxNiAgICAgICAgICAgICAgc3RhdHVzOyAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzdGF0dXMgKi8KKyAgICB1MTYgICAgICAgICAgICAgIHNlcnZpY2U7ICAgICAgICAgICAgICAgIC8qIHNlcnZpY2UvZmlybXdhcmUgdmVyLi8uLiAqLworICAgIHUzMiAgICAgICAgICAgICBpbmZvOworICAgIHUzMiAgICAgICAgICAgICBpbmZvMjsgICAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm8gKi8KICAgICBTY3NpX0NtbmQgICAgICAgICAgICpyZXFfZmlyc3Q7ICAgICAgICAgICAgIC8qIHRvcCBvZiByZXF1ZXN0IHF1ZXVlICovCiAgICAgc3RydWN0IHsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIHByZXNlbnQ7ICAgICAgICAgICAgICAgIC8qIEZsYWc6IGhvc3QgZHJpdmUgcHJlc2VudD8gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlzX2xvZ2RydjsgICAgICAgICAgICAgIC8qIEZsYWc6IGxvZy4gZHJpdmUgKG1hc3Rlcik/ICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpc19hcnJheWRydjsgICAgICAgICAgICAvKiBGbGFnOiBhcnJheSBkcml2ZT8gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlzX21hc3RlcjsgICAgICAgICAgICAgIC8qIEZsYWc6IGFycmF5IGRyaXZlIG1hc3Rlcj8gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlzX3Bhcml0eTsgICAgICAgICAgICAgIC8qIEZsYWc6IHBhcml0eSBkcml2ZT8gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlzX2hvdGZpeDsgICAgICAgICAgICAgIC8qIEZsYWc6IGhvdGZpeCBkcml2ZT8gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIG1hc3Rlcl9ubzsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBtYXN0ZXIgZHJpdmUgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGxvY2tlZD8gKGhvdCBwbHVnKSAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgaGVhZHM7ICAgICAgICAgICAgICAgICAgLyogbWFwcGluZyAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgc2VjczsKLSAgICAgICAgdXNob3J0ICAgICAgICAgIGRldnR5cGU7ICAgICAgICAgICAgICAgIC8qIGZ1cnRoZXIgaW5mb3JtYXRpb24gKi8KLSAgICAgICAgdWxvbmc2NCAgICAgICAgIHNpemU7ICAgICAgICAgICAgICAgICAgIC8qIGNhcGFjaXR5ICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBsZHJfbm87ICAgICAgICAgICAgICAgICAvKiBsb2cuIGRyaXZlIG5vLiAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgcndfYXR0cmliczsgICAgICAgICAgICAgLyogci93IGF0dHJpYnV0ZXMgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGNsdXN0ZXJfdHlwZTsgICAgICAgICAgIC8qIGNsdXN0ZXIgcHJvcGVydGllcyAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgbWVkaWFfY2hhbmdlZDsgICAgICAgICAgLyogRmxhZzpNT1VOVC9VTk1PVU5UIG9jY3VyZWQgKi8KLSAgICAgICAgdWxvbmczMiAgICAgICAgIHN0YXJ0X3NlYzsgICAgICAgICAgICAgIC8qIHN0YXJ0IHNlY3RvciAqLworICAgICAgICB1OCAgICAgICAgICBwcmVzZW50OyAgICAgICAgICAgICAgICAvKiBGbGFnOiBob3N0IGRyaXZlIHByZXNlbnQ/ICovCisgICAgICAgIHU4ICAgICAgICAgIGlzX2xvZ2RydjsgICAgICAgICAgICAgIC8qIEZsYWc6IGxvZy4gZHJpdmUgKG1hc3Rlcik/ICovCisgICAgICAgIHU4ICAgICAgICAgIGlzX2FycmF5ZHJ2OyAgICAgICAgICAgIC8qIEZsYWc6IGFycmF5IGRyaXZlPyAqLworICAgICAgICB1OCAgICAgICAgICBpc19tYXN0ZXI7ICAgICAgICAgICAgICAvKiBGbGFnOiBhcnJheSBkcml2ZSBtYXN0ZXI/ICovCisgICAgICAgIHU4ICAgICAgICAgIGlzX3Bhcml0eTsgICAgICAgICAgICAgIC8qIEZsYWc6IHBhcml0eSBkcml2ZT8gKi8KKyAgICAgICAgdTggICAgICAgICAgaXNfaG90Zml4OyAgICAgICAgICAgICAgLyogRmxhZzogaG90Zml4IGRyaXZlPyAqLworICAgICAgICB1OCAgICAgICAgICBtYXN0ZXJfbm87ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgbWFzdGVyIGRyaXZlICovCisgICAgICAgIHU4ICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGxvY2tlZD8gKGhvdCBwbHVnKSAqLworICAgICAgICB1OCAgICAgICAgICBoZWFkczsgICAgICAgICAgICAgICAgICAvKiBtYXBwaW5nICovCisgICAgICAgIHU4ICAgICAgICAgIHNlY3M7CisgICAgICAgIHUxNiAgICAgICAgICBkZXZ0eXBlOyAgICAgICAgICAgICAgICAvKiBmdXJ0aGVyIGluZm9ybWF0aW9uICovCisgICAgICAgIHU2NCAgICAgICAgIHNpemU7ICAgICAgICAgICAgICAgICAgIC8qIGNhcGFjaXR5ICovCisgICAgICAgIHU4ICAgICAgICAgIGxkcl9ubzsgICAgICAgICAgICAgICAgIC8qIGxvZy4gZHJpdmUgbm8uICovCisgICAgICAgIHU4ICAgICAgICAgIHJ3X2F0dHJpYnM7ICAgICAgICAgICAgIC8qIHIvdyBhdHRyaWJ1dGVzICovCisgICAgICAgIHU4ICAgICAgICAgIGNsdXN0ZXJfdHlwZTsgICAgICAgICAgIC8qIGNsdXN0ZXIgcHJvcGVydGllcyAqLworICAgICAgICB1OCAgICAgICAgICBtZWRpYV9jaGFuZ2VkOyAgICAgICAgICAvKiBGbGFnOk1PVU5UL1VOTU9VTlQgb2NjdXJlZCAqLworICAgICAgICB1MzIgICAgICAgICBzdGFydF9zZWM7ICAgICAgICAgICAgICAvKiBzdGFydCBzZWN0b3IgKi8KICAgICB9IGhkcltNQVhfTERSSVZFU107ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhvc3QgZHJpdmVzICovCiAgICAgc3RydWN0IHsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgbG9ja2VkPyAoaG90IHBsdWcpICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBwZGV2X2NudDsgICAgICAgICAgICAgICAvKiBwaHlzaWNhbCBkZXZpY2UgY291bnQgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2FsX25vOyAgICAgICAgICAgICAgIC8qIGxvY2FsIGNoYW5uZWwgbnVtYmVyICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpb19jbnRbTUFYSURdOyAgICAgICAgICAvKiBjdXJyZW50IElPIGNvdW50ICovCi0gICAgICAgIHVsb25nMzIgICAgICAgICBhZGRyZXNzOyAgICAgICAgICAgICAgICAvKiBjaGFubmVsIGFkZHJlc3MgKi8KLSAgICAgICAgdWxvbmczMiAgICAgICAgIGlkX2xpc3RbTUFYSURdOyAgICAgICAgIC8qIElEcyBvZiB0aGUgcGh5cy4gZGV2aWNlcyAqLworICAgICAgICB1OCAgICAgICAgICBsb2NrOyAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIGxvY2tlZD8gKGhvdCBwbHVnKSAqLworICAgICAgICB1OCAgICAgICAgICBwZGV2X2NudDsgICAgICAgICAgICAgICAvKiBwaHlzaWNhbCBkZXZpY2UgY291bnQgKi8KKyAgICAgICAgdTggICAgICAgICAgbG9jYWxfbm87ICAgICAgICAgICAgICAgLyogbG9jYWwgY2hhbm5lbCBudW1iZXIgKi8KKyAgICAgICAgdTggICAgICAgICAgaW9fY250W01BWElEXTsgICAgICAgICAgLyogY3VycmVudCBJTyBjb3VudCAqLworICAgICAgICB1MzIgICAgICAgICBhZGRyZXNzOyAgICAgICAgICAgICAgICAvKiBjaGFubmVsIGFkZHJlc3MgKi8KKyAgICAgICAgdTMyICAgICAgICAgaWRfbGlzdFtNQVhJRF07ICAgICAgICAgLyogSURzIG9mIHRoZSBwaHlzLiBkZXZpY2VzICovCiAgICAgfSByYXdbTUFYQlVTXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGNoYW5uZWxzICovCiAgICAgc3RydWN0IHsKICAgICAgICAgU2NzaV9DbW5kICAgICAgICpjbW5kOyAgICAgICAgICAgICAgICAgIC8qIHBlbmRpbmcgcmVxdWVzdCAqLwotICAgICAgICB1c2hvcnQgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLworICAgICAgICB1MTYgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLwogICAgIH0gY21kX3RhYltHRFRIX01BWENNRFNdOyAgICAgICAgICAgICAgICAgICAgLyogdGFibGUgb2YgcGVuZC4gcmVxdWVzdHMgKi8KICAgICBzdHJ1Y3QgZ2R0aF9jbW5kaW5mbyB7ICAgICAgICAgICAgICAgICAgICAgIC8qIHBlci1jb21tYW5kIHByaXZhdGUgaW5mbyAqLwogICAgICAgICBpbnQgaW5kZXg7CiAgICAgICAgIGludCBpbnRlcm5hbF9jb21tYW5kOyAgICAgICAgICAgICAgICAgICAvKiBkb24ndCBjYWxsIHNjc2lfZG9uZSAqLwogICAgICAgICBnZHRoX2NtZF9zdHIgKmludGVybmFsX2NtZF9zdHI7ICAgICAgICAgLyogY3JpZXIgZm9yIGludGVybmFsIG1lc3NhZ2VzKi8KICAgICAgICAgZG1hX2FkZHJfdCBzZW5zZV9wYWRkcjsgICAgICAgICAgICAgICAgIC8qIHNlbnNlIGRtYS1hZGRyICovCi0gICAgICAgIHVuY2hhciBwcmlvcml0eTsKKyAgICAgICAgdTggcHJpb3JpdHk7CiAJaW50IHRpbWVvdXRfY291bnQ7CQkJLyogIyBvZiB0aW1lb3V0IGNhbGxzICovCiAgICAgICAgIHZvbGF0aWxlIGludCB3YWl0X2Zvcl9jb21wbGV0aW9uOwotICAgICAgICB1c2hvcnQgc3RhdHVzOwotICAgICAgICB1bG9uZzMyIGluZm87CisgICAgICAgIHUxNiBzdGF0dXM7CisgICAgICAgIHUzMiBpbmZvOwogICAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGlyOwogICAgICAgICBpbnQgcGhhc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogPz8/PyAqLwogICAgICAgICBpbnQgT3BDb2RlOwogICAgIH0gY21uZGluZm9bR0RUSF9NQVhDTURTXTsgICAgICAgICAgICAgICAgICAgLyogaW5kZXg9PTAgaXMgZnJlZSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgYnVzX2NudDsgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgY291bnQgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHRpZF9jbnQ7ICAgICAgICAgICAgICAgIC8qIFRhcmdldCBJRCBjb3VudCAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgYnVzX2lkW01BWEJVU107ICAgICAgICAgLyogSU9QIElEcyAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdmlydF9idXM7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHZpcnR1YWwgYnVzICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICBtb3JlX3Byb2M7ICAgICAgICAgICAgICAvKiBtb3JlIC9wcm9jIGluZm8gc3VwcG9ydGVkICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICBjbWRfY250OyAgICAgICAgICAgICAgICAvKiBjb21tYW5kIGNvdW50IGluIERQUkFNICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICBjbWRfbGVuOyAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgYWN0dWFsIGNvbW1hbmQgKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIGNtZF9vZmZzX2RwbWVtOyAgICAgICAgIC8qIGFjdHVhbCBvZmZzZXQgaW4gRFBSQU0gKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIGljX2FsbF9zaXplOyAgICAgICAgICAgIC8qIHNpemVvZiBEUFJBTSBpbnRlcmYuIGFyZWEgKi8KKyAgICB1OCAgICAgICAgICAgICAgYnVzX2NudDsgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgY291bnQgKi8KKyAgICB1OCAgICAgICAgICAgICAgdGlkX2NudDsgICAgICAgICAgICAgICAgLyogVGFyZ2V0IElEIGNvdW50ICovCisgICAgdTggICAgICAgICAgICAgIGJ1c19pZFtNQVhCVVNdOyAgICAgICAgIC8qIElPUCBJRHMgKi8KKyAgICB1OCAgICAgICAgICAgICAgdmlydF9idXM7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHZpcnR1YWwgYnVzICovCisgICAgdTggICAgICAgICAgICAgIG1vcmVfcHJvYzsgICAgICAgICAgICAgIC8qIG1vcmUgL3Byb2MgaW5mbyBzdXBwb3J0ZWQgKi8KKyAgICB1MTYgICAgICAgICAgICAgIGNtZF9jbnQ7ICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgY291bnQgaW4gRFBSQU0gKi8KKyAgICB1MTYgICAgICAgICAgICAgIGNtZF9sZW47ICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBhY3R1YWwgY29tbWFuZCAqLworICAgIHUxNiAgICAgICAgICAgICAgY21kX29mZnNfZHBtZW07ICAgICAgICAgLyogYWN0dWFsIG9mZnNldCBpbiBEUFJBTSAqLworICAgIHUxNiAgICAgICAgICAgICAgaWNfYWxsX3NpemU7ICAgICAgICAgICAgLyogc2l6ZW9mIERQUkFNIGludGVyZi4gYXJlYSAqLwogICAgIGdkdGhfY3Bhcl9zdHIgICAgICAgY3BhcjsgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBjYWNoZSBwYXIuICovCiAgICAgZ2R0aF9iZmVhdF9zdHIgICAgICBiZmVhdDsgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGZlYXR1cmVzICovCiAgICAgZ2R0aF9iaW5mb19zdHIgICAgICBiaW5mbzsgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGluZm8gKi8KQEAgLTk0MSw3ICs5NDEsNyBAQAogICAgIHN0cnVjdCBwY2lfZGV2ICAgICAgKnBkZXY7CiAgICAgY2hhciAgICAgICAgICAgICAgICBvZW1fbmFtZVs4XTsKICNpZmRlZiBHRFRIX0RNQV9TVEFUSVNUSUNTCi0gICAgdWxvbmcgICAgICAgICAgICAgICBkbWEzMl9jbnQsIGRtYTY0X2NudDsgICAvKiBzdGF0aXN0aWNzOiBETUEgYnVmZmVyICovCisgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgIGRtYTMyX2NudCwgZG1hNjRfY250OyAgIC8qIHN0YXRpc3RpY3M6IERNQSBidWZmZXIgKi8KICNlbmRpZgogICAgIHN0cnVjdCBzY3NpX2RldmljZSAgICAgICAgICpzZGV2OwogfSBnZHRoX2hhX3N0cjsKQEAgLTk1Myw2NSArOTUzLDY1IEBACiAKIC8qIElOUVVJUlkgZGF0YSBmb3JtYXQgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgICAgICB0eXBlX3F1YWw7Ci0gICAgdW5jaGFyICAgICAgbW9kaWZfcm1iOwotICAgIHVuY2hhciAgICAgIHZlcnNpb247Ci0gICAgdW5jaGFyICAgICAgcmVzcF9hZW5jOwotICAgIHVuY2hhciAgICAgIGFkZF9sZW5ndGg7Ci0gICAgdW5jaGFyICAgICAgcmVzZXJ2ZWQxOwotICAgIHVuY2hhciAgICAgIHJlc2VydmVkMjsKLSAgICB1bmNoYXIgICAgICBtaXNjOwotICAgIHVuY2hhciAgICAgIHZlbmRvcls4XTsKLSAgICB1bmNoYXIgICAgICBwcm9kdWN0WzE2XTsKLSAgICB1bmNoYXIgICAgICByZXZpc2lvbls0XTsKLX0gUEFDS0VEIGdkdGhfaW5xX2RhdGE7CisgICAgdTggICAgICB0eXBlX3F1YWw7CisgICAgdTggICAgICBtb2RpZl9ybWI7CisgICAgdTggICAgICB2ZXJzaW9uOworICAgIHU4ICAgICAgcmVzcF9hZW5jOworICAgIHU4ICAgICAgYWRkX2xlbmd0aDsKKyAgICB1OCAgICAgIHJlc2VydmVkMTsKKyAgICB1OCAgICAgIHJlc2VydmVkMjsKKyAgICB1OCAgICAgIG1pc2M7CisgICAgdTggICAgICB2ZW5kb3JbOF07CisgICAgdTggICAgICBwcm9kdWN0WzE2XTsKKyAgICB1OCAgICAgIHJldmlzaW9uWzRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2lucV9kYXRhOwogCiAvKiBSRUFEX0NBUEFDSVRZIGRhdGEgZm9ybWF0ICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgbGFzdF9ibG9ja19ubzsKLSAgICB1bG9uZzMyICAgICBibG9ja19sZW5ndGg7Ci19IFBBQ0tFRCBnZHRoX3JkY2FwX2RhdGE7CisgICAgdTMyICAgICBsYXN0X2Jsb2NrX25vOworICAgIHUzMiAgICAgYmxvY2tfbGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX3JkY2FwX2RhdGE7CiAKIC8qIFJFQURfQ0FQQUNJVFkgKDE2KSBkYXRhIGZvcm1hdCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nNjQgICAgIGxhc3RfYmxvY2tfbm87Ci0gICAgdWxvbmczMiAgICAgYmxvY2tfbGVuZ3RoOwotfSBQQUNLRUQgZ2R0aF9yZGNhcDE2X2RhdGE7CisgICAgdTY0ICAgICBsYXN0X2Jsb2NrX25vOworICAgIHUzMiAgICAgYmxvY2tfbGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX3JkY2FwMTZfZGF0YTsKIAogLyogUkVRVUVTVF9TRU5TRSBkYXRhIGZvcm1hdCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuY2hhciAgICAgIGVycm9yY29kZTsKLSAgICB1bmNoYXIgICAgICBzZWdubzsKLSAgICB1bmNoYXIgICAgICBrZXk7Ci0gICAgdWxvbmczMiAgICAgaW5mbzsKLSAgICB1bmNoYXIgICAgICBhZGRfbGVuZ3RoOwotICAgIHVsb25nMzIgICAgIGNtZF9pbmZvOwotICAgIHVuY2hhciAgICAgIGFkc2M7Ci0gICAgdW5jaGFyICAgICAgYWRzcTsKLSAgICB1bmNoYXIgICAgICBmcnVjOwotICAgIHVuY2hhciAgICAgIGtleV9zcGVjWzNdOwotfSBQQUNLRUQgZ2R0aF9zZW5zZV9kYXRhOworICAgIHU4ICAgICAgZXJyb3Jjb2RlOworICAgIHU4ICAgICAgc2Vnbm87CisgICAgdTggICAgICBrZXk7CisgICAgdTMyICAgICBpbmZvOworICAgIHU4ICAgICAgYWRkX2xlbmd0aDsKKyAgICB1MzIgICAgIGNtZF9pbmZvOworICAgIHU4ICAgICAgYWRzYzsKKyAgICB1OCAgICAgIGFkc3E7CisgICAgdTggICAgICBmcnVjOworICAgIHU4ICAgICAga2V5X3NwZWNbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfc2Vuc2VfZGF0YTsKIAogLyogTU9ERV9TRU5TRSBkYXRhIGZvcm1hdCAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciAgZGF0YV9sZW5ndGg7Ci0gICAgICAgIHVuY2hhciAgbWVkX3R5cGU7Ci0gICAgICAgIHVuY2hhciAgZGV2X3BhcjsKLSAgICAgICAgdW5jaGFyICBiZF9sZW5ndGg7Ci0gICAgfSBQQUNLRUQgaGQ7CisgICAgICAgIHU4ICBkYXRhX2xlbmd0aDsKKyAgICAgICAgdTggIG1lZF90eXBlOworICAgICAgICB1OCAgZGV2X3BhcjsKKyAgICAgICAgdTggIGJkX2xlbmd0aDsKKyAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGhkOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciAgZGVuc19jb2RlOwotICAgICAgICB1bmNoYXIgIGJsb2NrX2NvdW50WzNdOwotICAgICAgICB1bmNoYXIgIHJlc2VydmVkOwotICAgICAgICB1bmNoYXIgIGJsb2NrX2xlbmd0aFszXTsKLSAgICB9IFBBQ0tFRCBiZDsKLX0gUEFDS0VEIGdkdGhfbW9kZXBfZGF0YTsKKyAgICAgICAgdTggIGRlbnNfY29kZTsKKyAgICAgICAgdTggIGJsb2NrX2NvdW50WzNdOworICAgICAgICB1OCAgcmVzZXJ2ZWQ7CisgICAgICAgIHU4ICBibG9ja19sZW5ndGhbM107CisgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBiZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9tb2RlcF9kYXRhOwogCiAvKiBzdGFjayBmcmFtZSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nICAgICAgIGJbMTBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzIvNjQgYml0IGNvbXBpbGVyICEgKi8KLX0gUEFDS0VEIGdkdGhfc3RhY2tmcmFtZTsKKyAgICB1bnNpZ25lZCBsb25nICAgICAgIGJbMTBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzIvNjQgYml0IGNvbXBpbGVyICEgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9zdGFja2ZyYW1lOwogCiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ2R0aF9pb2N0bC5oIGIvZHJpdmVycy9zY3NpL2dkdGhfaW9jdGwuaAppbmRleCA3ODNmYWU3Li5iMDA0YzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aF9pb2N0bC5oCisrKyBiL2RyaXZlcnMvc2NzaS9nZHRoX2lvY3RsLmgKQEAgLTMyLDEwOSArMzIsMTAxIEBACiAjZGVmaW5lIE1BWF9IRFJJVkVTICAgICBNQVhfTERSSVZFUyAgICAgICAgICAgICAvKiBtYXguIGhvc3QgZHJpdmUgY291bnQgKi8KICNlbmRpZgogCi0vKiB0eXBlZGVmcyAqLwotI2lmZGVmIF9fS0VSTkVMX18KLXR5cGVkZWYgdTMyICAgICB1bG9uZzMyOwotdHlwZWRlZiB1NjQgICAgIHVsb25nNjQ7Ci0jZW5kaWYKLQotI2RlZmluZSBQQUNLRUQgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCi0KIC8qIHNjYXR0ZXIvZ2F0aGVyIGVsZW1lbnQgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBzZ19wdHI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHJlc3MgKi8KLSAgICB1bG9uZzMyICAgICBzZ19sZW47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCAqLwotfSBQQUNLRUQgZ2R0aF9zZ19zdHI7CisgICAgdTMyICAgICBzZ19wdHI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHJlc3MgKi8KKyAgICB1MzIgICAgIHNnX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfc2dfc3RyOwogCiAvKiBzY2F0dGVyL2dhdGhlciBlbGVtZW50IC0gNjRiaXQgYWRkcmVzc2VzICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmc2NCAgICAgc2dfcHRyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGRyZXNzICovCi0gICAgdWxvbmczMiAgICAgc2dfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggKi8KLX0gUEFDS0VEIGdkdGhfc2c2NF9zdHI7CisgICAgdTY0ICAgICBzZ19wdHI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHJlc3MgKi8KKyAgICB1MzIgICAgIHNnX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfc2c2NF9zdHI7CiAKIC8qIGNvbW1hbmQgc3RydWN0dXJlICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgQm9hcmROb2RlOyAgICAgICAgICAgICAgICAgICAgICAvKiBib2FyZCBub2RlIChhbHdheXMgMCkgKi8KLSAgICB1bG9uZzMyICAgICBDb21tYW5kSW5kZXg7ICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgbnVtYmVyICovCi0gICAgdXNob3J0ICAgICAgT3BDb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgY29tbWFuZCAoUkVBRCwuLikgKi8KKyAgICB1MzIgICAgIEJvYXJkTm9kZTsgICAgICAgICAgICAgICAgICAgICAgLyogYm9hcmQgbm9kZSAoYWx3YXlzIDApICovCisgICAgdTMyICAgICBDb21tYW5kSW5kZXg7ICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgbnVtYmVyICovCisgICAgdTE2ICAgICAgT3BDb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgY29tbWFuZCAoUkVBRCwuLikgKi8KICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICBEZXZpY2VObzsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY2FjaGUgZHJpdmUgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIEJsb2NrTm87ICAgICAgICAgICAgICAgIC8qIGJsb2NrIG51bWJlciAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgQmxvY2tDbnQ7ICAgICAgICAgICAgICAgLyogYmxvY2sgY291bnQgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIERlc3RBZGRyOyAgICAgICAgICAgICAgIC8qIGRlc3QuIGFkZHIuIChpZiBzL2c6IC0xKSAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc2dfY2FuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgIERldmljZU5vOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjYWNoZSBkcml2ZSAqLworICAgICAgICAgICAgdTMyICAgICBCbG9ja05vOyAgICAgICAgICAgICAgICAvKiBibG9jayBudW1iZXIgKi8KKyAgICAgICAgICAgIHUzMiAgICAgQmxvY2tDbnQ7ICAgICAgICAgICAgICAgLyogYmxvY2sgY291bnQgKi8KKyAgICAgICAgICAgIHUzMiAgICAgRGVzdEFkZHI7ICAgICAgICAgICAgICAgLyogZGVzdC4gYWRkci4gKGlmIHMvZzogLTEpICovCisgICAgICAgICAgICB1MzIgICAgIHNnX2Nhbno7ICAgICAgICAgICAgICAgIC8qIHMvZyBlbGVtZW50IGNvdW50ICovCiAgICAgICAgICAgICBnZHRoX3NnX3N0ciBzZ19sc3RbR0RUSF9NQVhTR107ICAgICAvKiBzL2cgbGlzdCAqLwotICAgICAgICB9IFBBQ0tFRCBjYWNoZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc2VydmljZSBjbWQuIHN0ci4gKi8KKyAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBjYWNoZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc2VydmljZSBjbWQuIHN0ci4gKi8KICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgIERldmljZU5vOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjYWNoZSBkcml2ZSAqLwotICAgICAgICAgICAgdWxvbmc2NCAgICAgQmxvY2tObzsgICAgICAgICAgICAgICAgLyogYmxvY2sgbnVtYmVyICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBCbG9ja0NudDsgICAgICAgICAgICAgICAvKiBibG9jayBjb3VudCAqLwotICAgICAgICAgICAgdWxvbmc2NCAgICAgRGVzdEFkZHI7ICAgICAgICAgICAgICAgLyogZGVzdC4gYWRkci4gKGlmIHMvZzogLTEpICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZ19jYW56OyAgICAgICAgICAgICAgICAvKiBzL2cgZWxlbWVudCBjb3VudCAqLworICAgICAgICAgICAgdTE2ICAgICAgRGV2aWNlTm87ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNhY2hlIGRyaXZlICovCisgICAgICAgICAgICB1NjQgICAgIEJsb2NrTm87ICAgICAgICAgICAgICAgIC8qIGJsb2NrIG51bWJlciAqLworICAgICAgICAgICAgdTMyICAgICBCbG9ja0NudDsgICAgICAgICAgICAgICAvKiBibG9jayBjb3VudCAqLworICAgICAgICAgICAgdTY0ICAgICBEZXN0QWRkcjsgICAgICAgICAgICAgICAvKiBkZXN0LiBhZGRyLiAoaWYgcy9nOiAtMSkgKi8KKyAgICAgICAgICAgIHUzMiAgICAgc2dfY2FuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KICAgICAgICAgICAgIGdkdGhfc2c2NF9zdHIgc2dfbHN0W0dEVEhfTUFYU0ddOyAgIC8qIHMvZyBsaXN0ICovCi0gICAgICAgIH0gUEFDS0VEIGNhY2hlNjQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWNoZSBzZXJ2aWNlIGNtZC4gc3RyLiAqLworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGNhY2hlNjQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWNoZSBzZXJ2aWNlIGNtZC4gc3RyLiAqLwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgcGFyYW1fc2l6ZTsgICAgICAgICAgICAgLyogc2l6ZSBvZiBwX3BhcmFtIGJ1ZmZlciAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc3ViZnVuYzsgICAgICAgICAgICAgICAgLyogSU9DVEwgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIGNoYW5uZWw7ICAgICAgICAgICAgICAgIC8qIGRldmljZSAqLwotICAgICAgICAgICAgdWxvbmc2NCAgICAgcF9wYXJhbTsgICAgICAgICAgICAgICAgLyogYnVmZmVyICovCi0gICAgICAgIH0gUEFDS0VEIGlvY3RsOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJT0NUTCBjb21tYW5kIHN0cnVjdHVyZSAqLworICAgICAgICAgICAgdTE2ICAgICAgcGFyYW1fc2l6ZTsgICAgICAgICAgICAgLyogc2l6ZSBvZiBwX3BhcmFtIGJ1ZmZlciAqLworICAgICAgICAgICAgdTMyICAgICBzdWJmdW5jOyAgICAgICAgICAgICAgICAvKiBJT0NUTCBmdW5jdGlvbiAqLworICAgICAgICAgICAgdTMyICAgICBjaGFubmVsOyAgICAgICAgICAgICAgICAvKiBkZXZpY2UgKi8KKyAgICAgICAgICAgIHU2NCAgICAgcF9wYXJhbTsgICAgICAgICAgICAgICAgLyogYnVmZmVyICovCisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgaW9jdGw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElPQ1RMIGNvbW1hbmQgc3RydWN0dXJlICovCiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICByZXNlcnZlZDsKKyAgICAgICAgICAgIHUxNiAgICAgIHJlc2VydmVkOwogICAgICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAgICAgICAgIHVsb25nMzIgIG1zZ19oYW5kbGU7ICAgICAgICAvKiBtZXNzYWdlIGhhbmRsZSAqLwotICAgICAgICAgICAgICAgICAgICB1bG9uZzY0ICBtc2dfYWRkcjsgICAgICAgICAgLyogbWVzc2FnZSBidWZmZXIgYWRkcmVzcyAqLwotICAgICAgICAgICAgICAgIH0gUEFDS0VEIG1zZzsKLSAgICAgICAgICAgICAgICB1bmNoYXIgICAgICAgZGF0YVsxMl07ICAgICAgICAgIC8qIGJ1ZmZlciBmb3IgcnRjIGRhdGEsIC4uLiAqLworICAgICAgICAgICAgICAgICAgICB1MzIgIG1zZ19oYW5kbGU7ICAgICAgICAvKiBtZXNzYWdlIGhhbmRsZSAqLworICAgICAgICAgICAgICAgICAgICB1NjQgIG1zZ19hZGRyOyAgICAgICAgICAvKiBtZXNzYWdlIGJ1ZmZlciBhZGRyZXNzICovCisgICAgICAgICAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBtc2c7CisgICAgICAgICAgICAgICAgdTggICAgICAgZGF0YVsxMl07ICAgICAgICAgIC8qIGJ1ZmZlciBmb3IgcnRjIGRhdGEsIC4uLiAqLwogICAgICAgICAgICAgfSBzdTsKLSAgICAgICAgfSBQQUNLRUQgc2NyZWVuOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjcmVlbiBzZXJ2aWNlIGNtZC4gc3RyLiAqLworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjcmVlbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY3JlZW4gc2VydmljZSBjbWQuIHN0ci4gKi8KICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgIHJlc2VydmVkOwotICAgICAgICAgICAgdWxvbmczMiAgICAgZGlyZWN0aW9uOyAgICAgICAgICAgICAgLyogZGF0YSBkaXJlY3Rpb24gKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIG1kaXNjX3RpbWU7ICAgICAgICAgICAgIC8qIGRpc2MuIHRpbWUgKDA6IG5vIHRpbWVvdXQpKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIG1jb25fdGltZTsgICAgICAgICAgICAgIC8qIGNvbm5lY3QgdGltZSgwOiBubyB0by4pICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZGF0YTsgICAgICAgICAgICAgICAgICAvKiBkZXN0LiBhZGRyLiAoaWYgcy9nOiAtMSkgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIHNkbGVuOyAgICAgICAgICAgICAgICAgIC8qIGRhdGEgbGVuZ3RoIChieXRlcykgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIGNsZW47ICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY21kLiBsZW5ndGgoNiwxMCwxMikgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIGNtZFsxMl07ICAgICAgICAgICAgICAgIC8qIFNDU0kgY29tbWFuZCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgdGFyZ2V0OyAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICBsdW47ICAgICAgICAgICAgICAgICAgICAvKiBMVU4gKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIGJ1czsgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgYnVzIG51bWJlciAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgcHJpb3JpdHk7ICAgICAgICAgICAgICAgLyogb25seSAwIHVzZWQgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIHNlbnNlX2xlbjsgICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgbGVuZ3RoICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZW5zZV9kYXRhOyAgICAgICAgICAgICAvKiBzZW5zZSBkYXRhIGFkZHIuICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBsaW5rX3A7ICAgICAgICAgICAgICAgICAvKiBsaW5rZWQgY21kcyAobm90IHN1cHAuKSAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc2dfcmFuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgIHJlc2VydmVkOworICAgICAgICAgICAgdTMyICAgICBkaXJlY3Rpb247ICAgICAgICAgICAgICAvKiBkYXRhIGRpcmVjdGlvbiAqLworICAgICAgICAgICAgdTMyICAgICBtZGlzY190aW1lOyAgICAgICAgICAgICAvKiBkaXNjLiB0aW1lICgwOiBubyB0aW1lb3V0KSovCisgICAgICAgICAgICB1MzIgICAgIG1jb25fdGltZTsgICAgICAgICAgICAgIC8qIGNvbm5lY3QgdGltZSgwOiBubyB0by4pICovCisgICAgICAgICAgICB1MzIgICAgIHNkYXRhOyAgICAgICAgICAgICAgICAgIC8qIGRlc3QuIGFkZHIuIChpZiBzL2c6IC0xKSAqLworICAgICAgICAgICAgdTMyICAgICBzZGxlbjsgICAgICAgICAgICAgICAgICAvKiBkYXRhIGxlbmd0aCAoYnl0ZXMpICovCisgICAgICAgICAgICB1MzIgICAgIGNsZW47ICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY21kLiBsZW5ndGgoNiwxMCwxMikgKi8KKyAgICAgICAgICAgIHU4ICAgICAgY21kWzEyXTsgICAgICAgICAgICAgICAgLyogU0NTSSBjb21tYW5kICovCisgICAgICAgICAgICB1OCAgICAgIHRhcmdldDsgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLworICAgICAgICAgICAgdTggICAgICBsdW47ICAgICAgICAgICAgICAgICAgICAvKiBMVU4gKi8KKyAgICAgICAgICAgIHU4ICAgICAgYnVzOyAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgbnVtYmVyICovCisgICAgICAgICAgICB1OCAgICAgIHByaW9yaXR5OyAgICAgICAgICAgICAgIC8qIG9ubHkgMCB1c2VkICovCisgICAgICAgICAgICB1MzIgICAgIHNlbnNlX2xlbjsgICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgbGVuZ3RoICovCisgICAgICAgICAgICB1MzIgICAgIHNlbnNlX2RhdGE7ICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgYWRkci4gKi8KKyAgICAgICAgICAgIHUzMiAgICAgbGlua19wOyAgICAgICAgICAgICAgICAgLyogbGlua2VkIGNtZHMgKG5vdCBzdXBwLikgKi8KKyAgICAgICAgICAgIHUzMiAgICAgc2dfcmFuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KICAgICAgICAgICAgIGdkdGhfc2dfc3RyIHNnX2xzdFtHRFRIX01BWFNHXTsgICAgIC8qIHMvZyBsaXN0ICovCi0gICAgICAgIH0gUEFDS0VEIHJhdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByYXcgc2VydmljZSBjbWQuIHN0cnVjdC4gKi8KKyAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSByYXc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmF3IHNlcnZpY2UgY21kLiBzdHJ1Y3QuICovCiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICByZXNlcnZlZDsKLSAgICAgICAgICAgIHVsb25nMzIgICAgIGRpcmVjdGlvbjsgICAgICAgICAgICAgIC8qIGRhdGEgZGlyZWN0aW9uICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBtZGlzY190aW1lOyAgICAgICAgICAgICAvKiBkaXNjLiB0aW1lICgwOiBubyB0aW1lb3V0KSovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBtY29uX3RpbWU7ICAgICAgICAgICAgICAvKiBjb25uZWN0IHRpbWUoMDogbm8gdG8uKSAqLwotICAgICAgICAgICAgdWxvbmc2NCAgICAgc2RhdGE7ICAgICAgICAgICAgICAgICAgLyogZGVzdC4gYWRkci4gKGlmIHMvZzogLTEpICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZGxlbjsgICAgICAgICAgICAgICAgICAvKiBkYXRhIGxlbmd0aCAoYnl0ZXMpICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBjbGVuOyAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGNtZC4gbGVuZ3RoKDYsLi4sMTYpICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICBjbWRbMTZdOyAgICAgICAgICAgICAgICAvKiBTQ1NJIGNvbW1hbmQgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIHRhcmdldDsgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgbHVuOyAgICAgICAgICAgICAgICAgICAgLyogTFVOICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICBidXM7ICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGJ1cyBudW1iZXIgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIHByaW9yaXR5OyAgICAgICAgICAgICAgIC8qIG9ubHkgMCB1c2VkICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZW5zZV9sZW47ICAgICAgICAgICAgICAvKiBzZW5zZSBkYXRhIGxlbmd0aCAqLwotICAgICAgICAgICAgdWxvbmc2NCAgICAgc2Vuc2VfZGF0YTsgICAgICAgICAgICAgLyogc2Vuc2UgZGF0YSBhZGRyLiAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc2dfcmFuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgIHJlc2VydmVkOworICAgICAgICAgICAgdTMyICAgICBkaXJlY3Rpb247ICAgICAgICAgICAgICAvKiBkYXRhIGRpcmVjdGlvbiAqLworICAgICAgICAgICAgdTMyICAgICBtZGlzY190aW1lOyAgICAgICAgICAgICAvKiBkaXNjLiB0aW1lICgwOiBubyB0aW1lb3V0KSovCisgICAgICAgICAgICB1MzIgICAgIG1jb25fdGltZTsgICAgICAgICAgICAgIC8qIGNvbm5lY3QgdGltZSgwOiBubyB0by4pICovCisgICAgICAgICAgICB1NjQgICAgIHNkYXRhOyAgICAgICAgICAgICAgICAgIC8qIGRlc3QuIGFkZHIuIChpZiBzL2c6IC0xKSAqLworICAgICAgICAgICAgdTMyICAgICBzZGxlbjsgICAgICAgICAgICAgICAgICAvKiBkYXRhIGxlbmd0aCAoYnl0ZXMpICovCisgICAgICAgICAgICB1MzIgICAgIGNsZW47ICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY21kLiBsZW5ndGgoNiwuLiwxNikgKi8KKyAgICAgICAgICAgIHU4ICAgICAgY21kWzE2XTsgICAgICAgICAgICAgICAgLyogU0NTSSBjb21tYW5kICovCisgICAgICAgICAgICB1OCAgICAgIHRhcmdldDsgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLworICAgICAgICAgICAgdTggICAgICBsdW47ICAgICAgICAgICAgICAgICAgICAvKiBMVU4gKi8KKyAgICAgICAgICAgIHU4ICAgICAgYnVzOyAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgbnVtYmVyICovCisgICAgICAgICAgICB1OCAgICAgIHByaW9yaXR5OyAgICAgICAgICAgICAgIC8qIG9ubHkgMCB1c2VkICovCisgICAgICAgICAgICB1MzIgICAgIHNlbnNlX2xlbjsgICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgbGVuZ3RoICovCisgICAgICAgICAgICB1NjQgICAgIHNlbnNlX2RhdGE7ICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgYWRkci4gKi8KKyAgICAgICAgICAgIHUzMiAgICAgc2dfcmFuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KICAgICAgICAgICAgIGdkdGhfc2c2NF9zdHIgc2dfbHN0W0dEVEhfTUFYU0ddOyAgIC8qIHMvZyBsaXN0ICovCi0gICAgICAgIH0gUEFDS0VEIHJhdzY0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiByYXcgc2VydmljZSBjbWQuIHN0cnVjdC4gKi8KKyAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSByYXc2NDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmF3IHNlcnZpY2UgY21kLiBzdHJ1Y3QuICovCiAgICAgfSB1OwogICAgIC8qIGFkZGl0aW9uYWwgdmFyaWFibGVzICovCi0gICAgdW5jaGFyICAgICAgU2VydmljZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIHNlcnZpY2UgKi8KLSAgICB1bmNoYXIgICAgICByZXNlcnZlZDsKLSAgICB1c2hvcnQgICAgICBTdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgcmVzdWx0ICovCi0gICAgdWxvbmczMiAgICAgSW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uICovCisgICAgdTggICAgICBTZXJ2aWNlOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgc2VydmljZSAqLworICAgIHU4ICAgICAgcmVzZXJ2ZWQ7CisgICAgdTE2ICAgICAgU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHJlc3VsdCAqLworICAgIHUzMiAgICAgSW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uICovCiAgICAgdm9pZCAgICAgICAgKlJlcXVlc3RCdWZmZXI7ICAgICAgICAgICAgICAgICAvKiByZXF1ZXN0IGJ1ZmZlciAqLwotfSBQQUNLRUQgZ2R0aF9jbWRfc3RyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2NtZF9zdHI7CiAKIC8qIGNvbnRyb2xsZXIgZXZlbnQgc3RydWN0dXJlICovCiAjZGVmaW5lIEVTX0FTWU5DICAgIDEKQEAgLTE0MiwxMjkgKzEzNCwxMjkgQEAKICNkZWZpbmUgRVNfVEVTVCAgICAgMwogI2RlZmluZSBFU19TWU5DICAgICA0CiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdXNob3J0ICAgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgICAgICAvKiBzaXplIG9mIHN0cnVjdHVyZSAqLworICAgIHUxNiAgICAgICAgICAgICAgICAgIHNpemU7ICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBzdHJ1Y3R1cmUgKi8KICAgICB1bmlvbiB7CiAgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgc3RyZWFtWzE2XTsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBpb25vZGU7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgc2VydmljZTsKLSAgICAgICAgICAgIHVsb25nMzIgICAgICAgICBpbmRleDsKLSAgICAgICAgfSBQQUNLRUQgZHJpdmVyOworICAgICAgICAgICAgdTE2ICAgICAgICAgIGlvbm9kZTsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBzZXJ2aWNlOworICAgICAgICAgICAgdTMyICAgICAgICAgaW5kZXg7CisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZHJpdmVyOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGlvbm9kZTsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBzZXJ2aWNlOwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIHN0YXR1czsKLSAgICAgICAgICAgIHVsb25nMzIgICAgICAgICBpbmZvOwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIHNjc2lfY29vcmRbM107Ci0gICAgICAgIH0gUEFDS0VEIGFzeW5jOworICAgICAgICAgICAgdTE2ICAgICAgICAgIGlvbm9kZTsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBzZXJ2aWNlOworICAgICAgICAgICAgdTE2ICAgICAgICAgIHN0YXR1czsKKyAgICAgICAgICAgIHUzMiAgICAgICAgIGluZm87CisgICAgICAgICAgICB1OCAgICAgICAgICBzY3NpX2Nvb3JkWzNdOworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGFzeW5jOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGlvbm9kZTsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBzZXJ2aWNlOwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIHN0YXR1czsKLSAgICAgICAgICAgIHVsb25nMzIgICAgICAgICBpbmZvOwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGhvc3Rkcml2ZTsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBzY3NpX2Nvb3JkWzNdOwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIHNlbnNlX2tleTsKLSAgICAgICAgfSBQQUNLRUQgc3luYzsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBpb25vZGU7CisgICAgICAgICAgICB1MTYgICAgICAgICAgc2VydmljZTsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBzdGF0dXM7CisgICAgICAgICAgICB1MzIgICAgICAgICBpbmZvOworICAgICAgICAgICAgdTE2ICAgICAgICAgIGhvc3Rkcml2ZTsKKyAgICAgICAgICAgIHU4ICAgICAgICAgIHNjc2lfY29vcmRbM107CisgICAgICAgICAgICB1OCAgICAgICAgICBzZW5zZV9rZXk7CisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc3luYzsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVsb25nMzIgICAgICAgICBsMSwgbDIsIGwzLCBsNDsKLSAgICAgICAgfSBQQUNLRUQgdGVzdDsKKyAgICAgICAgICAgIHUzMiAgICAgICAgIGwxLCBsMiwgbDMsIGw0OworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHRlc3Q7CiAgICAgfSBldTsKLSAgICB1bG9uZzMyICAgICAgICAgICAgICAgICBzZXZlcml0eTsKLSAgICB1bmNoYXIgICAgICAgICAgICAgICAgICBldmVudF9zdHJpbmdbMjU2XTsgICAgICAgICAgCi19IFBBQ0tFRCBnZHRoX2V2dF9kYXRhOworICAgIHUzMiAgICAgICAgICAgICAgICAgc2V2ZXJpdHk7CisgICAgdTggICAgICAgICAgICAgICAgICBldmVudF9zdHJpbmdbMjU2XTsgICAgICAgICAgCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfZXZ0X2RhdGE7CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICAgICAgZmlyc3Rfc3RhbXA7Ci0gICAgdWxvbmczMiAgICAgICAgIGxhc3Rfc3RhbXA7Ci0gICAgdXNob3J0ICAgICAgICAgIHNhbWVfY291bnQ7Ci0gICAgdXNob3J0ICAgICAgICAgIGV2ZW50X3NvdXJjZTsKLSAgICB1c2hvcnQgICAgICAgICAgZXZlbnRfaWR4OwotICAgIHVuY2hhciAgICAgICAgICBhcHBsaWNhdGlvbjsKLSAgICB1bmNoYXIgICAgICAgICAgcmVzZXJ2ZWQ7CisgICAgdTMyICAgICAgICAgZmlyc3Rfc3RhbXA7CisgICAgdTMyICAgICAgICAgbGFzdF9zdGFtcDsKKyAgICB1MTYgICAgICAgICAgc2FtZV9jb3VudDsKKyAgICB1MTYgICAgICAgICAgZXZlbnRfc291cmNlOworICAgIHUxNiAgICAgICAgICBldmVudF9pZHg7CisgICAgdTggICAgICAgICAgYXBwbGljYXRpb247CisgICAgdTggICAgICAgICAgcmVzZXJ2ZWQ7CiAgICAgZ2R0aF9ldnRfZGF0YSAgIGV2ZW50X2RhdGE7Ci19IFBBQ0tFRCBnZHRoX2V2dF9zdHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfZXZ0X3N0cjsKIAogCiAjaWZkZWYgR0RUSF9JT0NUTF9QUk9DCiAvKiBJT0NUTCBzdHJ1Y3R1cmUgKHdyaXRlKSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgICAgICAgICAgICAgIG1hZ2ljOyAgICAgICAgICAgICAgLyogSU9DVEwgbWFnaWMgKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgICAgICBpb2N0bDsgICAgICAgICAgICAgIC8qIElPQ1RMICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICAgICAgaW9ub2RlOyAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgICAgIHNlcnZpY2U7ICAgICAgICAgICAgLyogY29udHJvbGxlciBzZXJ2aWNlICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICAgICAgdGltZW91dDsgICAgICAgICAgICAvKiB0aW1lb3V0ICovCisgICAgdTMyICAgICAgICAgICAgICAgICBtYWdpYzsgICAgICAgICAgICAgIC8qIElPQ1RMIG1hZ2ljICovCisgICAgdTE2ICAgICAgICAgICAgICAgICAgaW9jdGw7ICAgICAgICAgICAgICAvKiBJT0NUTCAqLworICAgIHUxNiAgICAgICAgICAgICAgICAgIGlvbm9kZTsgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KKyAgICB1MTYgICAgICAgICAgICAgICAgICBzZXJ2aWNlOyAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgc2VydmljZSAqLworICAgIHUxNiAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7ICAgICAgICAgICAgLyogdGltZW91dCAqLwogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBjb21tYW5kWzUxMl07ICAgICAgIC8qIGNvbnRyb2xsZXIgY29tbWFuZCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGRhdGFbMV07ICAgICAgICAgICAgLyogYWRkLiBkYXRhICovCisgICAgICAgICAgICB1OCAgICAgICAgICBjb21tYW5kWzUxMl07ICAgICAgIC8qIGNvbnRyb2xsZXIgY29tbWFuZCAqLworICAgICAgICAgICAgdTggICAgICAgICAgZGF0YVsxXTsgICAgICAgICAgICAvKiBhZGQuIGRhdGEgKi8KICAgICAgICAgfSBnZW5lcmFsOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgLyogbG9jay91bmxvY2sgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBkcml2ZV9jbnQ7ICAgICAgICAgIC8qIGRyaXZlIGNvdW50ICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgZHJpdmVzW01BWF9IRFJJVkVTXTsvKiBkcml2ZXMgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgLyogbG9jay91bmxvY2sgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGRyaXZlX2NudDsgICAgICAgICAgLyogZHJpdmUgY291bnQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgICAgICBkcml2ZXNbTUFYX0hEUklWRVNdOy8qIGRyaXZlcyAqLwogICAgICAgICB9IGxvY2tkcnY7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgbG9jazsgICAgICAgICAgICAgICAvKiBsb2NrL3VubG9jayAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGNoYW5uZWw7ICAgICAgICAgICAgLyogY2hhbm5lbCAqLworICAgICAgICAgICAgdTggICAgICAgICAgbG9jazsgICAgICAgICAgICAgICAvKiBsb2NrL3VubG9jayAqLworICAgICAgICAgICAgdTggICAgICAgICAgY2hhbm5lbDsgICAgICAgICAgICAvKiBjaGFubmVsICovCiAgICAgICAgIH0gbG9ja2NobjsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIGludCAgICAgICAgICAgICBlcmFzZTsgICAgICAgICAgICAgIC8qIGVyYXNlIGV2ZW50ID8gKi8KICAgICAgICAgICAgIGludCAgICAgICAgICAgICBoYW5kbGU7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgZXZ0W0VWRU5UX1NJWkVdOyAgICAvKiBldmVudCBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGV2dFtFVkVOVF9TSVpFXTsgICAgLyogZXZlbnQgc3RydWN0dXJlICovCiAgICAgICAgIH0gZXZlbnQ7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgYnVzOyAgICAgICAgICAgICAgICAvKiBTQ1NJIGJ1cyAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIHRhcmdldDsgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgbHVuOyAgICAgICAgICAgICAgICAvKiBMVU4gKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBjbWRfbGVuOyAgICAgICAgICAgIC8qIGNvbW1hbmQgbGVuZ3RoICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgY21kWzEyXTsgICAgICAgICAgICAvKiBTQ1NJIGNvbW1hbmQgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGJ1czsgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIHRhcmdldDsgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCisgICAgICAgICAgICB1OCAgICAgICAgICBsdW47ICAgICAgICAgICAgICAgIC8qIExVTiAqLworICAgICAgICAgICAgdTggICAgICAgICAgY21kX2xlbjsgICAgICAgICAgICAvKiBjb21tYW5kIGxlbmd0aCAqLworICAgICAgICAgICAgdTggICAgICAgICAgY21kWzEyXTsgICAgICAgICAgICAvKiBTQ1NJIGNvbW1hbmQgKi8KICAgICAgICAgfSBzY3NpOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGhkcl9ubzsgICAgICAgICAgICAgLyogaG9zdCBkcml2ZSBudW1iZXIgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBmbGFnOyAgICAgICAgICAgICAgIC8qIG9sZCBtZXRoLi9hZGQvcmVtb3ZlICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgaGRyX25vOyAgICAgICAgICAgICAvKiBob3N0IGRyaXZlIG51bWJlciAqLworICAgICAgICAgICAgdTggICAgICAgICAgZmxhZzsgICAgICAgICAgICAgICAvKiBvbGQgbWV0aC4vYWRkL3JlbW92ZSAqLwogICAgICAgICB9IHJlc2NhbjsKICAgICB9IGl1OwogfSBnZHRoX2lvd3Jfc3RyOwogCiAvKiBJT0NUTCBzdHJ1Y3R1cmUgKHJlYWQpICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgICAgICAvKiBidWZmZXIgc2l6ZSAqLwotICAgIHVsb25nMzIgICAgICAgICAgICAgICAgIHN0YXR1czsgICAgICAgICAgICAgLyogSU9DVEwgZXJyb3IgY29kZSAqLworICAgIHUzMiAgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgICAgICAvKiBidWZmZXIgc2l6ZSAqLworICAgIHUzMiAgICAgICAgICAgICAgICAgc3RhdHVzOyAgICAgICAgICAgICAvKiBJT0NUTCBlcnJvciBjb2RlICovCiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGRhdGFbMV07ICAgICAgICAgICAgLyogZGF0YSAqLworICAgICAgICAgICAgdTggICAgICAgICAgZGF0YVsxXTsgICAgICAgICAgICAvKiBkYXRhICovCiAgICAgICAgIH0gZ2VuZXJhbDsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICB2ZXJzaW9uOyAgICAgICAgICAgIC8qIGRyaXZlciB2ZXJzaW9uICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgdmVyc2lvbjsgICAgICAgICAgICAvKiBkcml2ZXIgdmVyc2lvbiAqLwogICAgICAgICB9IGRydmVyczsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICB0eXBlOyAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgdHlwZSAqLwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGluZm87ICAgICAgICAgICAgICAgLyogc2xvdCBldGMuICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgb2VtX2lkOyAgICAgICAgICAgICAvKiBPRU0gSUQgKi8KLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBiaW9zX3ZlcjsgICAgICAgICAgIC8qIG5vdCB1c2VkICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgYWNjZXNzOyAgICAgICAgICAgICAvKiBub3QgdXNlZCAqLwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGV4dF90eXBlOyAgICAgICAgICAgLyogZXh0ZW5kZWQgdHlwZSAqLwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGRldmljZV9pZDsgICAgICAgICAgLyogZGV2aWNlIElEICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgc3ViX2RldmljZV9pZDsgICAgICAvKiBzdWIgZGV2aWNlIElEICovCisgICAgICAgICAgICB1OCAgICAgICAgICB0eXBlOyAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgdHlwZSAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIGluZm87ICAgICAgICAgICAgICAgLyogc2xvdCBldGMuICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgb2VtX2lkOyAgICAgICAgICAgICAvKiBPRU0gSUQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgICAgICBiaW9zX3ZlcjsgICAgICAgICAgIC8qIG5vdCB1c2VkICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgYWNjZXNzOyAgICAgICAgICAgICAvKiBub3QgdXNlZCAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIGV4dF90eXBlOyAgICAgICAgICAgLyogZXh0ZW5kZWQgdHlwZSAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIGRldmljZV9pZDsgICAgICAgICAgLyogZGV2aWNlIElEICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgc3ViX2RldmljZV9pZDsgICAgICAvKiBzdWIgZGV2aWNlIElEICovCiAgICAgICAgIH0gY3RydHlwZTsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICB2ZXJzaW9uOyAgICAgICAgICAgIC8qIE9TIHZlcnNpb24gKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBzdWJ2ZXJzaW9uOyAgICAgICAgIC8qIE9TIHN1YnZlcnNpb24gKi8KLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICByZXZpc2lvbjsgICAgICAgICAgIC8qIHJldmlzaW9uICovCisgICAgICAgICAgICB1OCAgICAgICAgICB2ZXJzaW9uOyAgICAgICAgICAgIC8qIE9TIHZlcnNpb24gKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIHN1YnZlcnNpb247ICAgICAgICAgLyogT1Mgc3VidmVyc2lvbiAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIHJldmlzaW9uOyAgICAgICAgICAgLyogcmV2aXNpb24gKi8KICAgICAgICAgfSBvc3ZlcnM7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgY291bnQ7ICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGNvdW50ICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgY291bnQ7ICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGNvdW50ICovCiAgICAgICAgIH0gY3RyY250OwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGhhbmRsZTsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBldnRbRVZFTlRfU0laRV07ICAgIC8qIGV2ZW50IHN0cnVjdHVyZSAqLworICAgICAgICAgICAgdTggICAgICAgICAgZXZ0W0VWRU5UX1NJWkVdOyAgICAvKiBldmVudCBzdHJ1Y3R1cmUgKi8KICAgICAgICAgfSBldmVudDsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBidXM7ICAgICAgICAgICAgICAgIC8qIFNDU0kgYnVzLCAweGZmOiBpbnZhbGlkICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgdGFyZ2V0OyAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBsdW47ICAgICAgICAgICAgICAgIC8qIExVTiAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGNsdXN0ZXJfdHlwZTsgICAgICAgLyogY2x1c3RlciBwcm9wZXJ0aWVzICovCisgICAgICAgICAgICB1OCAgICAgICAgICBidXM7ICAgICAgICAgICAgICAgIC8qIFNDU0kgYnVzLCAweGZmOiBpbnZhbGlkICovCisgICAgICAgICAgICB1OCAgICAgICAgICB0YXJnZXQ7ICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLworICAgICAgICAgICAgdTggICAgICAgICAgbHVuOyAgICAgICAgICAgICAgICAvKiBMVU4gKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGNsdXN0ZXJfdHlwZTsgICAgICAgLyogY2x1c3RlciBwcm9wZXJ0aWVzICovCiAgICAgICAgIH0gaGRyX2xpc3RbTUFYX0hEUklWRVNdOyAgICAgICAgICAgICAgICAvKiBpbmRleCBpcyBob3N0IGRyaXZlIG51bWJlciAqLwogICAgIH0gaXU7CiB9IGdkdGhfaW9yZF9zdHI7CkBAIC0yNzIsNTMgKzI2NCw1MyBAQAogCiAvKiBHRFRJT0NUTF9HRU5FUkFMICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdXNob3J0IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLwotICAgIHVzaG9ydCB0aW1lb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGltZW91dCAqLwotICAgIHVsb25nMzIgaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXJyb3IgaW5mbyAqLyAKLSAgICB1c2hvcnQgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyAqLwotICAgIHVsb25nIGRhdGFfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGF0YSBidWZmZXIgc2l6ZSAqLwotICAgIHVsb25nIHNlbnNlX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2Vuc2UgYnVmZmVyIHNpemUgKi8KKyAgICB1MTYgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisgICAgdTE2IHRpbWVvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lb3V0ICovCisgICAgdTMyIGluZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVycm9yIGluZm8gKi8gCisgICAgdTE2IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGF0dXMgKi8KKyAgICB1bnNpZ25lZCBsb25nIGRhdGFfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGF0YSBidWZmZXIgc2l6ZSAqLworICAgIHVuc2lnbmVkIGxvbmcgc2Vuc2VfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZW5zZSBidWZmZXIgc2l6ZSAqLwogICAgIGdkdGhfY21kX3N0ciBjb21tYW5kOyAgICAgICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCAqLyAgICAgICAgICAgICAgICAgICAKIH0gZ2R0aF9pb2N0bF9nZW5lcmFsOwogCiAvKiBHRFRJT0NUTF9MT0NLRFJWICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdXNob3J0IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLwotICAgIHVuY2hhciBsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9jay91bmxvY2sgKi8KLSAgICB1bmNoYXIgZHJpdmVfY250OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGNvdW50ICovCi0gICAgdXNob3J0IGRyaXZlc1tNQVhfSERSSVZFU107ICAgICAgICAgICAgICAgICAvKiBkcml2ZXMgKi8KKyAgICB1MTYgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisgICAgdTggbG9jazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvY2svdW5sb2NrICovCisgICAgdTggZHJpdmVfY250OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGNvdW50ICovCisgICAgdTE2IGRyaXZlc1tNQVhfSERSSVZFU107ICAgICAgICAgICAgICAgICAvKiBkcml2ZXMgKi8KIH0gZ2R0aF9pb2N0bF9sb2NrZHJ2OwogCiAvKiBHRFRJT0NUTF9MT0NLQ0hOICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdXNob3J0IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLwotICAgIHVuY2hhciBsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9jay91bmxvY2sgKi8KLSAgICB1bmNoYXIgY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgKi8KKyAgICB1MTYgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisgICAgdTggbG9jazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvY2svdW5sb2NrICovCisgICAgdTggY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgKi8KIH0gZ2R0aF9pb2N0bF9sb2NrY2huOwogCiAvKiBHRFRJT0NUTF9PU1ZFUlMgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TIHZlcnNpb24gKi8KLSAgICB1bmNoYXIgc3VidmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TIHN1YnZlcnNpb24gKi8KLSAgICB1c2hvcnQgcmV2aXNpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldmlzaW9uICovCisgICAgdTggdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TIHZlcnNpb24gKi8KKyAgICB1OCBzdWJ2ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1Mgc3VidmVyc2lvbiAqLworICAgIHUxNiByZXZpc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV2aXNpb24gKi8KIH0gZ2R0aF9pb2N0bF9vc3ZlcnM7CiAKIC8qIEdEVElPQ1RMX0NUUlRZUEUgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1c2hvcnQgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCi0gICAgdW5jaGFyIHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIHR5cGUgKi8KLSAgICB1c2hvcnQgaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNsb3QgZXRjLiAqLwotICAgIHVzaG9ydCBvZW1faWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT0VNIElEICovCi0gICAgdXNob3J0IGJpb3NfdmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBub3QgdXNlZCAqLwotICAgIHVzaG9ydCBhY2Nlc3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IHVzZWQgKi8KLSAgICB1c2hvcnQgZXh0X3R5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4dGVuZGVkIHR5cGUgKi8KLSAgICB1c2hvcnQgZGV2aWNlX2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRldmljZSBJRCAqLwotICAgIHVzaG9ydCBzdWJfZGV2aWNlX2lkOyAgICAgICAgICAgICAgICAgICAgICAgLyogc3ViIGRldmljZSBJRCAqLworICAgIHUxNiBpb25vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KKyAgICB1OCB0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciB0eXBlICovCisgICAgdTE2IGluZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzbG90IGV0Yy4gKi8KKyAgICB1MTYgb2VtX2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9FTSBJRCAqLworICAgIHUxNiBiaW9zX3ZlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IHVzZWQgKi8KKyAgICB1MTYgYWNjZXNzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCB1c2VkICovCisgICAgdTE2IGV4dF90eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleHRlbmRlZCB0eXBlICovCisgICAgdTE2IGRldmljZV9pZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZXZpY2UgSUQgKi8KKyAgICB1MTYgc3ViX2RldmljZV9pZDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHN1YiBkZXZpY2UgSUQgKi8KIH0gZ2R0aF9pb2N0bF9jdHJ0eXBlOwogCiAvKiBHRFRJT0NUTF9FVkVOVCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVzaG9ydCBpb25vZGU7CisgICAgdTE2IGlvbm9kZTsKICAgICBpbnQgZXJhc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVyYXNlIGV2ZW50PyAqLwogICAgIGludCBoYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXZlbnQgaGFuZGxlICovCiAgICAgZ2R0aF9ldnRfc3RyIGV2ZW50OwpAQCAtMzI2LDIyICszMTgsMjIgQEAKIAogLyogR0RUSU9DVExfUkVTQ0FOL0dEVElPQ1RMX0hEUkxJU1QgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1c2hvcnQgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCi0gICAgdW5jaGFyIGZsYWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGQvcmVtb3ZlICovCi0gICAgdXNob3J0IGhkcl9ubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkcml2ZSBuby4gKi8KKyAgICB1MTYgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisgICAgdTggZmxhZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZC9yZW1vdmUgKi8KKyAgICB1MTYgaGRyX25vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIG5vLiAqLwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciBidXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGJ1cyAqLwotICAgICAgICB1bmNoYXIgdGFyZ2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCi0gICAgICAgIHVuY2hhciBsdW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMVU4gKi8KLSAgICAgICAgdW5jaGFyIGNsdXN0ZXJfdHlwZTsgICAgICAgICAgICAgICAgICAgIC8qIGNsdXN0ZXIgcHJvcGVydGllcyAqLworICAgICAgICB1OCBidXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGJ1cyAqLworICAgICAgICB1OCB0YXJnZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgKi8KKyAgICAgICAgdTggbHVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTFVOICovCisgICAgICAgIHU4IGNsdXN0ZXJfdHlwZTsgICAgICAgICAgICAgICAgICAgIC8qIGNsdXN0ZXIgcHJvcGVydGllcyAqLwogICAgIH0gaGRyX2xpc3RbTUFYX0hEUklWRVNdOyAgICAgICAgICAgICAgICAgICAgLyogaW5kZXggaXMgaG9zdCBkcml2ZSBudW1iZXIgKi8KIH0gZ2R0aF9pb2N0bF9yZXNjYW47CiAKIC8qIEdEVElPQ1RMX1JFU0VUX0JVUy9HRFRJT0NUTF9SRVNFVF9EUlYgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1c2hvcnQgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCi0gICAgdXNob3J0IG51bWJlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBidXMvaG9zdCBkcml2ZSBudW1iZXIgKi8KLSAgICB1c2hvcnQgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyAqLworICAgIHUxNiBpb25vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KKyAgICB1MTYgbnVtYmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ1cy9ob3N0IGRyaXZlIG51bWJlciAqLworICAgIHUxNiBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RhdHVzICovCiB9IGdkdGhfaW9jdGxfcmVzZXQ7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5jIGIvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5jCmluZGV4IDEyNThkYTMuLmZmYjJiMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoX3Byb2MuYworKysgYi9kcml2ZXJzL3Njc2kvZ2R0aF9wcm9jLmMKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBpbnQgaSwgZm91bmQ7CiAgICAgZ2R0aF9jbWRfc3RyICAgIGdkdGNtZDsKICAgICBnZHRoX2NwYXJfc3RyICAgKnBjcGFyOwotICAgIHVsb25nNjQgICAgICAgICBwYWRkcjsKKyAgICB1NjQgICAgICAgICBwYWRkcjsKIAogICAgIGNoYXIgICAgICAgICAgICBjbW5kW01BWF9DT01NQU5EX1NJWkVdOwogICAgIG1lbXNldChjbW5kLCAweGZmLCAxMik7CkBAIC0xNTYsOCArMTU2LDggQEAKICAgICBvZmZfdCBiZWdpbiA9IDAscG9zID0gMDsKICAgICBpbnQgaWQsIGksIGosIGssIHNlYywgZmxhZzsKICAgICBpbnQgbm9fbWRydiA9IDAsIGRydl9ubywgaXNfbWlycjsKLSAgICB1bG9uZzMyIGNudDsKLSAgICB1bG9uZzY0IHBhZGRyOworICAgIHUzMiBjbnQ7CisgICAgdTY0IHBhZGRyOwogICAgIGludCByYyA9IC1FTk9NRU07CiAKICAgICBnZHRoX2NtZF9zdHIgKmdkdGNtZDsKQEAgLTIyMCwxNCArMjIwLDE0IEBACiAKICAgICBpZiAoaGEtPm1vcmVfcHJvYykKICAgICAgICAgc3ByaW50ZihocmVjLCAiJWQuJTAyZC4lMDJkLSVjJTAzWCIsIAotICAgICAgICAgICAgICAgICh1bmNoYXIpKGhhLT5iaW5mby51cGRfZndfdmVyPj4yNCksCi0gICAgICAgICAgICAgICAgKHVuY2hhcikoaGEtPmJpbmZvLnVwZF9md192ZXI+PjE2KSwKLSAgICAgICAgICAgICAgICAodW5jaGFyKShoYS0+YmluZm8udXBkX2Z3X3ZlciksCisgICAgICAgICAgICAgICAgKHU4KShoYS0+YmluZm8udXBkX2Z3X3Zlcj4+MjQpLAorICAgICAgICAgICAgICAgICh1OCkoaGEtPmJpbmZvLnVwZF9md192ZXI+PjE2KSwKKyAgICAgICAgICAgICAgICAodTgpKGhhLT5iaW5mby51cGRfZndfdmVyKSwKICAgICAgICAgICAgICAgICBoYS0+YmZlYXQucmFpZCA/ICdSJzonTicsCiAgICAgICAgICAgICAgICAgaGEtPmJpbmZvLnVwZF9yZXZpc2lvbik7CiAgICAgZWxzZQotICAgICAgICBzcHJpbnRmKGhyZWMsICIlZC4lMDJkIiwgKHVuY2hhcikoaGEtPmNwYXIudmVyc2lvbj4+OCksCi0gICAgICAgICAgICAgICAgKHVuY2hhcikoaGEtPmNwYXIudmVyc2lvbikpOworICAgICAgICBzcHJpbnRmKGhyZWMsICIlZC4lMDJkIiwgKHU4KShoYS0+Y3Bhci52ZXJzaW9uPj44KSwKKyAgICAgICAgICAgICAgICAodTgpKGhhLT5jcGFyLnZlcnNpb24pKTsKIAogICAgIHNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sCiAgICAgICAgICAgICAgICAgICAgIiBEcml2ZXIgVmVyLjogIFx0JS0xMHNcdEZpcm13YXJlIFZlci46IFx0JXNcbiIsCkBAIC0yODEsNyArMjgxLDcgQEAKICAgICAgICAgICAgIHBkcy0+YmlkID0gaGEtPnJhd1tpXS5sb2NhbF9ubzsKICAgICAgICAgICAgIHBkcy0+Zmlyc3QgPSAwOwogICAgICAgICAgICAgcGRzLT5lbnRyaWVzID0gaGEtPnJhd1tpXS5wZGV2X2NudDsKLSAgICAgICAgICAgIGNudCA9ICgzKkdEVEhfU0NSQVRDSC80IC0gNSAqIHNpemVvZih1bG9uZzMyKSkgLworICAgICAgICAgICAgY250ID0gKDMqR0RUSF9TQ1JBVENILzQgLSA1ICogc2l6ZW9mKHUzMikpIC8KICAgICAgICAgICAgICAgICBzaXplb2YocGRzLT5saXN0WzBdKTsKICAgICAgICAgICAgIGlmIChwZHMtPmVudHJpZXMgPiBjbnQpCiAgICAgICAgICAgICAgICAgcGRzLT5lbnRyaWVzID0gY250OwpAQCAtNjA0LDcgKzYwNCw3IEBACiAKICAgICAgICAgICAgIHNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIENhcGFjaXR5IFtNQl06XHQlLTZkICAgIFx0U3RhcnQgU2VjdG9yOiAgXHQlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bG9uZzMyKShoYS0+aGRyW2ldLnNpemUvMjA0OCksIGhhLT5oZHJbaV0uc3RhcnRfc2VjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzIpKGhhLT5oZHJbaV0uc2l6ZS8yMDQ4KSwgaGEtPmhkcltpXS5zdGFydF9zZWMpOwogICAgICAgICAgICAgbGVuICs9IHNpemU7ICBwb3MgPSBiZWdpbiArIGxlbjsKICAgICAgICAgICAgIGlmIChwb3MgPCBvZmZzZXQpIHsKICAgICAgICAgICAgICAgICBsZW4gPSAwOwpAQCAtNjY0LDkgKzY2NCw5IEBACiB9CiAKIHN0YXRpYyBjaGFyICpnZHRoX2lvY3RsX2FsbG9jKGdkdGhfaGFfc3RyICpoYSwgaW50IHNpemUsIGludCBzY3JhdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxvbmc2NCAqcGFkZHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1NjQgKnBhZGRyKQogewotICAgIHVsb25nIGZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgY2hhciAqcmV0X3ZhbDsKIAogICAgIGlmIChzaXplID09IDApCkBAIC02OTEsOSArNjkxLDkgQEAKICAgICByZXR1cm4gcmV0X3ZhbDsKIH0KIAotc3RhdGljIHZvaWQgZ2R0aF9pb2N0bF9mcmVlKGdkdGhfaGFfc3RyICpoYSwgaW50IHNpemUsIGNoYXIgKmJ1ZiwgdWxvbmc2NCBwYWRkcikKK3N0YXRpYyB2b2lkIGdkdGhfaW9jdGxfZnJlZShnZHRoX2hhX3N0ciAqaGEsIGludCBzaXplLCBjaGFyICpidWYsIHU2NCBwYWRkcikKIHsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAgICAgaWYgKGJ1ZiA9PSBoYS0+cHNjcmF0Y2gpIHsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CkBAIC03MDUsMTYgKzcwNSwxNiBAQAogfQogCiAjaWZkZWYgR0RUSF9JT0NUTF9QUk9DCi1zdGF0aWMgaW50IGdkdGhfaW9jdGxfY2hlY2tfYmluKGdkdGhfaGFfc3RyICpoYSwgdXNob3J0IHNpemUpCitzdGF0aWMgaW50IGdkdGhfaW9jdGxfY2hlY2tfYmluKGdkdGhfaGFfc3RyICpoYSwgdTE2IHNpemUpCiB7Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICBpbnQgcmV0X3ZhbDsKIAogICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKIAogICAgIHJldF92YWwgPSBGQUxTRTsKICAgICBpZiAoaGEtPnNjcmF0Y2hfYnVzeSkgewotICAgICAgICBpZiAoKChnZHRoX2lvcmRfc3RyICopaGEtPnBzY3JhdGNoKS0+c2l6ZSA9PSAodWxvbmczMilzaXplKQorICAgICAgICBpZiAoKChnZHRoX2lvcmRfc3RyICopaGEtPnBzY3JhdGNoKS0+c2l6ZSA9PSAodTMyKXNpemUpCiAgICAgICAgICAgICByZXRfdmFsID0gVFJVRTsKICAgICB9CiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CkBAIC03MjQsMTEgKzcyNCwxMSBAQAogCiBzdGF0aWMgdm9pZCBnZHRoX3dhaXRfY29tcGxldGlvbihnZHRoX2hhX3N0ciAqaGEsIGludCBidXNudW0sIGludCBpZCkKIHsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgIGludCBpOwogICAgIFNjc2lfQ21uZCAqc2NwOwogICAgIHN0cnVjdCBnZHRoX2NtbmRpbmZvICpjbW5kaW5mbzsKLSAgICB1bmNoYXIgYiwgdDsKKyAgICB1OCBiLCB0OwogCiAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwogCkBAIC03MzgsOCArNzM4LDggQEAKIAogICAgICAgICBiID0gc2NwLT5kZXZpY2UtPmNoYW5uZWw7CiAgICAgICAgIHQgPSBzY3AtPmRldmljZS0+aWQ7Ci0gICAgICAgIGlmICghU1BFQ0lBTF9TQ1Aoc2NwKSAmJiB0ID09ICh1bmNoYXIpaWQgJiYgCi0gICAgICAgICAgICBiID09ICh1bmNoYXIpYnVzbnVtKSB7CisgICAgICAgIGlmICghU1BFQ0lBTF9TQ1Aoc2NwKSAmJiB0ID09ICh1OClpZCAmJiAKKyAgICAgICAgICAgIGIgPT0gKHU4KWJ1c251bSkgewogICAgICAgICAgICAgY21uZGluZm8tPndhaXRfZm9yX2NvbXBsZXRpb24gPSAwOwogICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CiAgICAgICAgICAgICB3aGlsZSAoIWNtbmRpbmZvLT53YWl0X2Zvcl9jb21wbGV0aW9uKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5oIGIvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5oCmluZGV4IDliOTAwY2MuLmRhYjE1ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoX3Byb2MuaAorKysgYi9kcml2ZXJzL3Njc2kvZ2R0aF9wcm9jLmgKQEAgLTE3LDggKzE3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwgZ2R0aF9oYV9zdHIgKmhhKTsKIAogc3RhdGljIGNoYXIgKmdkdGhfaW9jdGxfYWxsb2MoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgc2l6ZSwgaW50IHNjcmF0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bG9uZzY0ICpwYWRkcik7Ci1zdGF0aWMgdm9pZCBnZHRoX2lvY3RsX2ZyZWUoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgc2l6ZSwgY2hhciAqYnVmLCB1bG9uZzY0IHBhZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCAqcGFkZHIpOworc3RhdGljIHZvaWQgZ2R0aF9pb2N0bF9mcmVlKGdkdGhfaGFfc3RyICpoYSwgaW50IHNpemUsIGNoYXIgKmJ1ZiwgdTY0IHBhZGRyKTsKIHN0YXRpYyB2b2lkIGdkdGhfd2FpdF9jb21wbGV0aW9uKGdkdGhfaGFfc3RyICpoYSwgaW50IGJ1c251bSwgaW50IGlkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaG9zdHMuYyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCmluZGV4IDU1NDYyNmUuLjA5ZGJjYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCkBAIC0yMTUsNiArMjE1LDggQEAKIAkJc2hvc3QtPnNob3N0X2dlbmRldi5wYXJlbnQgPSBkZXYgPyBkZXYgOiAmcGxhdGZvcm1fYnVzOwogCXNob3N0LT5kbWFfZGV2ID0gZG1hX2RldjsKIAorCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmc2hvc3QtPnNob3N0X2dlbmRldik7CisKIAllcnJvciA9IGRldmljZV9hZGQoJnNob3N0LT5zaG9zdF9nZW5kZXYpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CkBAIC0yMjIsNiArMjI0LDggQEAKIAlzY3NpX2hvc3Rfc2V0X3N0YXRlKHNob3N0LCBTSE9TVF9SVU5OSU5HKTsKIAlnZXRfZGV2aWNlKHNob3N0LT5zaG9zdF9nZW5kZXYucGFyZW50KTsKIAorCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmc2hvc3QtPnNob3N0X2Rldik7CisKIAllcnJvciA9IGRldmljZV9hZGQoJnNob3N0LT5zaG9zdF9kZXYpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZGVsX2dlbmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhLmMgYi9kcml2ZXJzL3Njc2kvaHBzYS5jCmluZGV4IGJiOTZmZGQuLjAzNjk3YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHNhLmMKKysrIGIvZHJpdmVycy9zY3NpL2hwc2EuYwpAQCAtNTIsNyArNTIsNyBAQAogI2luY2x1ZGUgImhwc2EuaCIKIAogLyogSFBTQV9EUklWRVJfVkVSU0lPTiBtdXN0IGJlIDMgYnl0ZSB2YWx1ZXMgKDAtMjU1KSBzZXBhcmF0ZWQgYnkgJy4nICovCi0jZGVmaW5lIEhQU0FfRFJJVkVSX1ZFUlNJT04gIjEuMC4wIgorI2RlZmluZSBIUFNBX0RSSVZFUl9WRVJTSU9OICIyLjAuMS0zIgogI2RlZmluZSBEUklWRVJfTkFNRSAiSFAgSFBTQSBEcml2ZXIgKHYgIiBIUFNBX0RSSVZFUl9WRVJTSU9OICIpIgogCiAvKiBIb3cgbG9uZyB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpIGZvciBib2FyZCB0byBnbyBpbnRvIHNpbXBsZSBtb2RlICovCkBAIC03Nyw5ICs3Nyw2IEBACiAKIC8qIGRlZmluZSB0aGUgUENJIGluZm8gZm9yIHRoZSBjYXJkcyB3ZSBjYW4gY29udHJvbCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwc2FfcGNpX2RldmljZV9pZFtdID0gewotCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTQywgICAgIDB4MTAzQywgMHgzMjIzfSwKLQl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0MsICAgICAweDEwM0MsIDB4MzIzNH0sCi0Je1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NDLCAgICAgMHgxMDNDLCAweDMyM0R9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjQxfSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0M30sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNDV9LApAQCAtODcsNiArODQsOSBAQAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjQ5fSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0YX0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNGJ9LAorCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjMzfSwKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9DSVNTRiAweDMzM2YKKwl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0YsICAgICAweDEwM0MsIDB4MzMzRn0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfQU5ZX0lELCAgICAgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQlQQ0lfQ0xBU1NfU1RPUkFHRV9SQUlEIDw8IDgsIDB4ZmZmZiA8PCA4LCAwfSwKIAl7MCx9CkBAIC05OSw5ICs5OSw2IEBACiAgKiAgYWNjZXNzID0gQWRkcmVzcyBvZiB0aGUgc3RydWN0IG9mIGZ1bmN0aW9uIHBvaW50ZXJzCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYm9hcmRfdHlwZSBwcm9kdWN0c1tdID0gewotCXsweDMyMjMxMDNDLCAiU21hcnQgQXJyYXkgUDgwMCIsICZTQTVfYWNjZXNzfSwKLQl7MHgzMjM0MTAzQywgIlNtYXJ0IEFycmF5IFA0MDAiLCAmU0E1X2FjY2Vzc30sCi0JezB4MzIzZDEwM2MsICJTbWFydCBBcnJheSBQNzAwTSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjQxMTAzQywgIlNtYXJ0IEFycmF5IFAyMTIiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0MzEwM0MsICJTbWFydCBBcnJheSBQNDEwIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNDUxMDNDLCAiU21hcnQgQXJyYXkgUDQxMGkiLCAmU0E1X2FjY2Vzc30sCkBAIC0xMDksNiArMTA2LDggQEAKIAl7MHgzMjQ5MTAzQywgIlNtYXJ0IEFycmF5IFA4MTIiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0YTEwM0MsICJTbWFydCBBcnJheSBQNzEybSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjRiMTAzQywgIlNtYXJ0IEFycmF5IFA3MTFtIiwgJlNBNV9hY2Nlc3N9LAorCXsweDMyMzMxMDNDLCAiU3RvcmFnZVdvcmtzIFAxMjEwbSIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMzNGMTAzQywgIlN0b3JhZ2VXb3JrcyBQMTIxMG0iLCAmU0E1X2FjY2Vzc30sCiAJezB4RkZGRjEwM0MsICJVbmtub3duIFNtYXJ0IEFycmF5IiwgJlNBNV9hY2Nlc3N9LAogfTsKIApAQCAtMTI2LDEyICsxMjUsMTUgQEAKIHN0YXRpYyB2b2lkIGNtZF9zcGVjaWFsX2ZyZWUoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IENvbW1hbmRMaXN0ICpjKTsKIHN0YXRpYyBzdHJ1Y3QgQ29tbWFuZExpc3QgKmNtZF9hbGxvYyhzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIHN0YXRpYyBzdHJ1Y3QgQ29tbWFuZExpc3QgKmNtZF9zcGVjaWFsX2FsbG9jKHN0cnVjdCBjdGxyX2luZm8gKmgpOwotc3RhdGljIHZvaWQgZmlsbF9jbWQoc3RydWN0IENvbW1hbmRMaXN0ICpjLCBfX3U4IGNtZCwgc3RydWN0IGN0bHJfaW5mbyAqaCwKLQl2b2lkICpidWZmLCBzaXplX3Qgc2l6ZSwgX191OCBwYWdlX2NvZGUsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwKK3N0YXRpYyB2b2lkIGZpbGxfY21kKHN0cnVjdCBDb21tYW5kTGlzdCAqYywgdTggY21kLCBzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXZvaWQgKmJ1ZmYsIHNpemVfdCBzaXplLCB1OCBwYWdlX2NvZGUsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwKIAlpbnQgY21kX3R5cGUpOwogCiBzdGF0aWMgaW50IGhwc2Ffc2NzaV9xdWV1ZV9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKIAkJdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOworc3RhdGljIHZvaWQgaHBzYV9zY2FuX3N0YXJ0KHN0cnVjdCBTY3NpX0hvc3QgKik7CitzdGF0aWMgaW50IGhwc2Ffc2Nhbl9maW5pc2hlZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaCwKKwl1bnNpZ25lZCBsb25nIGVsYXBzZWRfdGltZSk7CiAKIHN0YXRpYyBpbnQgaHBzYV9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpY21kKTsKIHN0YXRpYyBpbnQgaHBzYV9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwpAQCAtMTUwLDYgKzE1MiwxMSBAQAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CiBzdGF0aWMgdm9pZCBjaGVja19pb2N0bF91bml0X2F0dGVudGlvbihzdHJ1Y3QgY3Rscl9pbmZvICpoLAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CisvKiBwZXJmb3JtYW50IG1vZGUgaGVscGVyIGZ1bmN0aW9ucyAqLworc3RhdGljIHZvaWQgY2FsY19idWNrZXRfbWFwKGludCAqYnVja2V0LCBpbnQgbnVtX2J1Y2tldHMsCisJaW50IG5zZ3MsIGludCAqYnVja2V0X21hcCk7CitzdGF0aWMgdm9pZCBocHNhX3B1dF9jdGxyX2ludG9fcGVyZm9ybWFudF9tb2RlKHN0cnVjdCBjdGxyX2luZm8gKmgpOworc3RhdGljIGlubGluZSB1MzIgbmV4dF9jb21tYW5kKHN0cnVjdCBjdGxyX2luZm8gKmgpOwogCiBzdGF0aWMgREVWSUNFX0FUVFIocmFpZF9sZXZlbCwgU19JUlVHTywgcmFpZF9sZXZlbF9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihsdW5pZCwgU19JUlVHTywgbHVuaWRfc2hvdywgTlVMTCk7CkBAIC0xNzMsMTAgKzE4MCwxMCBAQAogCS5uYW1lCQkJPSAiaHBzYSIsCiAJLnByb2NfbmFtZQkJPSAiaHBzYSIsCiAJLnF1ZXVlY29tbWFuZAkJPSBocHNhX3Njc2lfcXVldWVfY29tbWFuZCwKLQkuY2FuX3F1ZXVlCQk9IDUxMiwKKwkuc2Nhbl9zdGFydAkJPSBocHNhX3NjYW5fc3RhcnQsCisJLnNjYW5fZmluaXNoZWQJCT0gaHBzYV9zY2FuX2ZpbmlzaGVkLAogCS50aGlzX2lkCQk9IC0xLAogCS5zZ190YWJsZXNpemUJCT0gTUFYU0dFTlRSSUVTLAotCS5jbWRfcGVyX2x1bgkJPSA1MTIsCiAJLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IGhwc2FfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIsCiAJLmlvY3RsCQkJPSBocHNhX2lvY3RsLApAQCAtMTk1LDYgKzIwMiwxMiBAQAogCXJldHVybiAoc3RydWN0IGN0bHJfaW5mbyAqKSAqcHJpdjsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3Rscl9pbmZvICpzaG9zdF90b19oYmEoc3RydWN0IFNjc2lfSG9zdCAqc2gpCit7CisJdW5zaWduZWQgbG9uZyAqcHJpdiA9IHNob3N0X3ByaXYoc2gpOworCXJldHVybiAoc3RydWN0IGN0bHJfaW5mbyAqKSAqcHJpdjsKK30KKwogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqaHBzYV9zY2FuX3RocmVhZDsKIHN0YXRpYyBERUZJTkVfTVVURVgoaHBzYV9zY2FuX211dGV4KTsKIHN0YXRpYyBMSVNUX0hFQUQoaHBzYV9zY2FuX3EpOwpAQCAtMzEyLDcgKzMyNSw3IEBACiAJCQloLT5idXN5X3NjYW5uaW5nID0gMTsKIAkJCW11dGV4X3VubG9jaygmaHBzYV9zY2FuX211dGV4KTsKIAkJCWhvc3Rfbm8gPSBoLT5zY3NpX2hvc3QgPyAgaC0+c2NzaV9ob3N0LT5ob3N0X25vIDogLTE7Ci0JCQlocHNhX3VwZGF0ZV9zY3NpX2RldmljZXMoaCwgaG9zdF9ubyk7CisJCQlocHNhX3NjYW5fc3RhcnQoaC0+c2NzaV9ob3N0KTsKIAkJCWNvbXBsZXRlX2FsbCgmaC0+c2Nhbl93YWl0KTsKIAkJCW11dGV4X2xvY2soJmhwc2Ffc2Nhbl9tdXRleCk7CiAJCQloLT5idXN5X3NjYW5uaW5nID0gMDsKQEAgLTM3OSw4ICszOTIsNyBAQAogewogCXN0cnVjdCBjdGxyX2luZm8gKmg7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwotCXVuc2lnbmVkIGxvbmcgKnByaXYgPSBzaG9zdF9wcml2KHNob3N0KTsKLQloID0gKHN0cnVjdCBjdGxyX2luZm8gKikgKnByaXY7CisJaCA9IHNob3N0X3RvX2hiYShzaG9zdCk7CiAJaWYgKGFkZF90b19zY2FuX2xpc3QoaCkpIHsKIAkJd2FrZV91cF9wcm9jZXNzKGhwc2Ffc2Nhbl90aHJlYWQpOwogCQl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmgtPnNjYW5fd2FpdCk7CkBAIC0zOTQsMTAgKzQwNiw0NCBAQAogCWhsaXN0X2FkZF9oZWFkKCZjLT5saXN0LCBsaXN0KTsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgbmV4dF9jb21tYW5kKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJdTMyIGE7CisKKwlpZiAodW5saWtlbHkoaC0+dHJhbnNNZXRob2QgIT0gQ0ZHVEJMX1RyYW5zX1BlcmZvcm1hbnQpKQorCQlyZXR1cm4gaC0+YWNjZXNzLmNvbW1hbmRfY29tcGxldGVkKGgpOworCisJaWYgKCgqKGgtPnJlcGx5X3Bvb2xfaGVhZCkgJiAxKSA9PSAoaC0+cmVwbHlfcG9vbF93cmFwYXJvdW5kKSkgeworCQlhID0gKihoLT5yZXBseV9wb29sX2hlYWQpOyAvKiBOZXh0IGNtZCBpbiByaW5nIGJ1ZmZlciAqLworCQkoaC0+cmVwbHlfcG9vbF9oZWFkKSsrOworCQloLT5jb21tYW5kc19vdXRzdGFuZGluZy0tOworCX0gZWxzZSB7CisJCWEgPSBGSUZPX0VNUFRZOworCX0KKwkvKiBDaGVjayBmb3Igd3JhcGFyb3VuZCAqLworCWlmIChoLT5yZXBseV9wb29sX2hlYWQgPT0gKGgtPnJlcGx5X3Bvb2wgKyBoLT5tYXhfY29tbWFuZHMpKSB7CisJCWgtPnJlcGx5X3Bvb2xfaGVhZCA9IGgtPnJlcGx5X3Bvb2w7CisJCWgtPnJlcGx5X3Bvb2xfd3JhcGFyb3VuZCBePSAxOworCX0KKwlyZXR1cm4gYTsKK30KKworLyogc2V0X3BlcmZvcm1hbnRfbW9kZTogTW9kaWZ5IHRoZSB0YWcgZm9yIGNjaXNzIHBlcmZvcm1hbnQKKyAqIHNldCBiaXQgMCBmb3IgcHVsbCBtb2RlbCwgYml0cyAzLTEgZm9yIGJsb2NrIGZldGNoCisgKiByZWdpc3RlciBudW1iZXIKKyAqLworc3RhdGljIHZvaWQgc2V0X3BlcmZvcm1hbnRfbW9kZShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpCit7CisJaWYgKGxpa2VseShoLT50cmFuc01ldGhvZCA9PSBDRkdUQkxfVHJhbnNfUGVyZm9ybWFudCkpCisJCWMtPmJ1c2FkZHIgfD0gMSB8IChoLT5ibG9ja0ZldGNoVGFibGVbYy0+SGVhZGVyLlNHTGlzdF0gPDwgMSk7Cit9CisKIHN0YXRpYyB2b2lkIGVucXVldWVfY21kX2FuZF9zdGFydF9pbyhzdHJ1Y3QgY3Rscl9pbmZvICpoLAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc2V0X3BlcmZvcm1hbnRfbW9kZShoLCBjKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCWFkZFEoJmgtPnJlcVEsIGMpOwogCWgtPlFkZXB0aCsrOwpAQCAtNDIyLDYgKzQ2OCwxNSBAQAogCXJldHVybiAoc2NzaTNhZGRyWzNdICYgMHhDMCkgPT0gMHg0MDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgaXNfc2NzaV9yZXZfNShzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCWlmICghaC0+aGJhX2lucXVpcnlfZGF0YSkKKwkJcmV0dXJuIDA7CisJaWYgKChoLT5oYmFfaW5xdWlyeV9kYXRhWzJdICYgMHgwNykgPT0gNSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBjaGFyICpyYWlkX2xhYmVsW10gPSB7ICIwIiwgIjQiLCAiMSgxKzApIiwgIjUiLCAiNSsxIiwgIkFERyIsCiAJIlVOS05PV04iCiB9OwpAQCAtNDMxLDcgKzQ4Niw3IEBACiAJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXNzaXplX3QgbCA9IDA7Ci0JaW50IHJsZXZlbDsKKwl1bnNpZ25lZCBjaGFyIHJsZXZlbDsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpoZGV2OwpAQCAtNDU1LDcgKzUxMCw3IEBACiAKIAlybGV2ZWwgPSBoZGV2LT5yYWlkX2xldmVsOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKLQlpZiAocmxldmVsIDwgMCB8fCBybGV2ZWwgPiBSQUlEX1VOS05PV04pCisJaWYgKHJsZXZlbCA+IFJBSURfVU5LTk9XTikKIAkJcmxldmVsID0gUkFJRF9VTktOT1dOOwogCWwgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIlJBSUQgJXNcbiIsIHJhaWRfbGFiZWxbcmxldmVsXSk7CiAJcmV0dXJuIGw7CkBAIC02MjAsNiArNjc1LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIFJlcGxhY2UgYW4gZW50cnkgZnJvbSBoLT5kZXZbXSBhcnJheS4gKi8KK3N0YXRpYyB2b2lkIGhwc2Ffc2NzaV9yZXBsYWNlX2VudHJ5KHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCBob3N0bm8sCisJaW50IGVudHJ5LCBzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpuZXdfZW50cnksCisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqYWRkZWRbXSwgaW50ICpuYWRkZWQsCisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqcmVtb3ZlZFtdLCBpbnQgKm5yZW1vdmVkKQoreworCS8qIGFzc3VtZXMgaC0+ZGV2bG9jayBpcyBoZWxkICovCisJQlVHX09OKGVudHJ5IDwgMCB8fCBlbnRyeSA+PSBIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQSk7CisJcmVtb3ZlZFsqbnJlbW92ZWRdID0gaC0+ZGV2W2VudHJ5XTsKKwkoKm5yZW1vdmVkKSsrOworCWgtPmRldltlbnRyeV0gPSBuZXdfZW50cnk7CisJYWRkZWRbKm5hZGRlZF0gPSBuZXdfZW50cnk7CisJKCpuYWRkZWQpKys7CisJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIiVzIGRldmljZSBjJWRiJWR0JWRsJWQgY2hhbmdlZC5cbiIsCisJCXNjc2lfZGV2aWNlX3R5cGUobmV3X2VudHJ5LT5kZXZ0eXBlKSwgaG9zdG5vLCBuZXdfZW50cnktPmJ1cywKKwkJCW5ld19lbnRyeS0+dGFyZ2V0LCBuZXdfZW50cnktPmx1bik7Cit9CisKIC8qIFJlbW92ZSBhbiBlbnRyeSBmcm9tIGgtPmRldltdIGFycmF5LiAqLwogc3RhdGljIHZvaWQgaHBzYV9zY3NpX3JlbW92ZV9lbnRyeShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vLCBpbnQgZW50cnksCiAJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqcmVtb3ZlZFtdLCBpbnQgKm5yZW1vdmVkKQpAQCAtNjI4LDggKzcwMSw3IEBACiAJaW50IGk7CiAJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqc2Q7CiAKLQlpZiAoZW50cnkgPCAwIHx8IGVudHJ5ID49IEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBKQotCQlCVUcoKTsKKwlCVUdfT04oZW50cnkgPCAwIHx8IGVudHJ5ID49IEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBKTsKIAogCXNkID0gaC0+ZGV2W2VudHJ5XTsKIAlyZW1vdmVkWypucmVtb3ZlZF0gPSBoLT5kZXZbZW50cnldOwpAQCAtNzIyLDYgKzc5NCw4IEBACiAjZGVmaW5lIERFVklDRV9DSEFOR0VEIDEKICNkZWZpbmUgREVWSUNFX1NBTUUgMgogCWZvciAoaSA9IDA7IGkgPCBoYXlzdGFja19zaXplOyBpKyspIHsKKwkJaWYgKGhheXN0YWNrW2ldID09IE5VTEwpIC8qIHByZXZpb3VzbHkgcmVtb3ZlZC4gKi8KKwkJCWNvbnRpbnVlOwogCQlpZiAoU0NTSTNBRERSX0VRKG5lZWRsZS0+c2NzaTNhZGRyLCBoYXlzdGFja1tpXS0+c2NzaTNhZGRyKSkgewogCQkJKmluZGV4ID0gaTsKIAkJCWlmIChkZXZpY2VfaXNfdGhlX3NhbWUobmVlZGxlLCBoYXlzdGFja1tpXSkpCkBAIC03MzQsNyArODA4LDcgQEAKIAlyZXR1cm4gREVWSUNFX05PVF9GT1VORDsKIH0KIAotc3RhdGljIGludCBhZGp1c3RfaHBzYV9zY3NpX3RhYmxlKHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCBob3N0bm8sCitzdGF0aWMgdm9pZCBhZGp1c3RfaHBzYV9zY3NpX3RhYmxlKHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCBob3N0bm8sCiAJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqc2RbXSwgaW50IG5zZHMpCiB7CiAJLyogc2QgY29udGFpbnMgc2NzaTMgYWRkcmVzc2VzIGFuZCBkZXZ0eXBlcywgYW5kIGlucXVpcnkKQEAgLTc3OSwxMiArODUzLDEyIEBACiAJCQljb250aW51ZTsgLyogcmVtb3ZlIF5eXiwgaGVuY2UgaSBub3QgaW5jcmVtZW50ZWQgKi8KIAkJfSBlbHNlIGlmIChkZXZpY2VfY2hhbmdlID09IERFVklDRV9DSEFOR0VEKSB7CiAJCQljaGFuZ2VzKys7Ci0JCQlocHNhX3Njc2lfcmVtb3ZlX2VudHJ5KGgsIGhvc3RubywgaSwKLQkJCQlyZW1vdmVkLCAmbnJlbW92ZWQpOwotCQkJKHZvaWQpIGhwc2Ffc2NzaV9hZGRfZW50cnkoaCwgaG9zdG5vLCBzZFtlbnRyeV0sCi0JCQkJYWRkZWQsICZuYWRkZWQpOwotCQkJLyogYWRkIGNhbid0IGZhaWwsIHdlIGp1c3QgcmVtb3ZlZCBvbmUuICovCi0JCQlzZFtlbnRyeV0gPSBOVUxMOyAvKiBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZnJlZWQgKi8KKwkJCWhwc2Ffc2NzaV9yZXBsYWNlX2VudHJ5KGgsIGhvc3RubywgaSwgc2RbZW50cnldLAorCQkJCWFkZGVkLCAmbmFkZGVkLCByZW1vdmVkLCAmbnJlbW92ZWQpOworCQkJLyogU2V0IGl0IHRvIE5VTEwgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGZyZWVkCisJCQkgKiBhdCB0aGUgYm90dG9tIG9mIGhwc2FfdXBkYXRlX3Njc2lfZGV2aWNlcygpCisJCQkgKi8KKwkJCXNkW2VudHJ5XSA9IE5VTEw7CiAJCX0KIAkJaSsrOwogCX0KQEAgLTg2MCw3ICs5MzQsNiBAQAogZnJlZV9hbmRfb3V0OgogCWtmcmVlKGFkZGVkKTsKIAlrZnJlZShyZW1vdmVkKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTkwMCw3ICs5NzMsNyBAQAogCiBzdGF0aWMgdm9pZCBocHNhX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCXJldHVybjsgLyogbm90aGluZyB0byBkby4gKi8KKwkvKiBub3RoaW5nIHRvIGRvLiAqLwogfQogCiBzdGF0aWMgdm9pZCBocHNhX3Njc2lfc2V0dXAoc3RydWN0IGN0bHJfaW5mbyAqaCkKQEAgLTkwOCwxMSArOTgxLDEwIEBACiAJaC0+bmRldmljZXMgPSAwOwogCWgtPnNjc2lfaG9zdCA9IE5VTEw7CiAJc3Bpbl9sb2NrX2luaXQoJmgtPmRldmxvY2spOwotCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgY29tcGxldGVfc2NzaV9jb21tYW5kKHN0cnVjdCBDb21tYW5kTGlzdCAqY3AsCi0JaW50IHRpbWVvdXQsIF9fdTMyIHRhZykKKwlpbnQgdGltZW91dCwgdTMyIHRhZykKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQ7CiAJc3RydWN0IGN0bHJfaW5mbyAqaDsKQEAgLTk4Nyw3ICsxMDU5LDYgQEAKIAkJCQkgKiByZXF1aXJlZAogCQkJCSAqLwogCQkJCWlmICgoYXNjID09IDB4MDQpICYmIChhc2NxID09IDB4MDMpKSB7Ci0JCQkJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCQkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCAiCiAJCQkJCQkiaGFzIGNoZWNrIGNvbmRpdGlvbjogdW5pdCAiCiAJCQkJCQkibm90IHJlYWR5LCBtYW51YWwgIgpAQCAtOTk1LDE0ICsxMDY2LDIyIEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KLQotCisJCQlpZiAoc2Vuc2Vfa2V5ID09IEFCT1JURURfQ09NTUFORCkgeworCQkJCS8qIEFib3J0ZWQgY29tbWFuZCBpcyByZXRyeWFibGUgKi8KKwkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgIgorCQkJCQkiaGFzIGNoZWNrIGNvbmRpdGlvbjogYWJvcnRlZCBjb21tYW5kOiAiCisJCQkJCSJBU0M6IDB4JXgsIEFTQ1E6IDB4JXhcbiIsCisJCQkJCWNwLCBhc2MsIGFzY3EpOworCQkJCWNtZC0+cmVzdWx0ID0gRElEX1NPRlRfRVJST1IgPDwgMTY7CisJCQkJYnJlYWs7CisJCQl9CiAJCQkvKiBNdXN0IGJlIHNvbWUgb3RoZXIgdHlwZSBvZiBjaGVjayBjb25kaXRpb24gKi8KIAkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCBoYXMgY2hlY2sgY29uZGl0aW9uOiAiCiAJCQkJCSJ1bmtub3duIHR5cGU6ICIKIAkJCQkJIlNlbnNlOiAweCV4LCBBU0M6IDB4JXgsIEFTQ1E6IDB4JXgsICIKIAkJCQkJIlJldHVybmluZyByZXN1bHQ6IDB4JXgsICIKIAkJCQkJImNtZD1bJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICIKKwkJCQkJIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICIKIAkJCQkJIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeF1cbiIsCiAJCQkJCWNwLCBzZW5zZV9rZXksIGFzYywgYXNjcSwKIAkJCQkJY21kLT5yZXN1bHQsCkBAIC0xMDEwLDcgKzEwODksMTAgQEAKIAkJCQkJY21kLT5jbW5kWzJdLCBjbWQtPmNtbmRbM10sCiAJCQkJCWNtZC0+Y21uZFs0XSwgY21kLT5jbW5kWzVdLAogCQkJCQljbWQtPmNtbmRbNl0sIGNtZC0+Y21uZFs3XSwKLQkJCQkJY21kLT5jbW5kWzhdLCBjbWQtPmNtbmRbOV0pOworCQkJCQljbWQtPmNtbmRbOF0sIGNtZC0+Y21uZFs5XSwKKwkJCQkJY21kLT5jbW5kWzEwXSwgY21kLT5jbW5kWzExXSwKKwkJCQkJY21kLT5jbW5kWzEyXSwgY21kLT5jbW5kWzEzXSwKKwkJCQkJY21kLT5jbW5kWzE0XSwgY21kLT5jbW5kWzE1XSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMDg2LDcgKzExNjgsNyBAQAogCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgcmVwb3J0cyBhYm9ydCBmYWlsZWRcbiIsIGNwKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfVU5TT0xJQ0lURURfQUJPUlQ6Ci0JCWNtZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OworCQljbWQtPnJlc3VsdCA9IERJRF9SRVNFVCA8PCAxNjsKIAkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwIGFib3J0ZWQgZG8gdG8gYW4gdW5zb2xpY2l0ZWQgIgogCQkJImFib3J0XG4iLCBjcCk7CiAJCWJyZWFrOwpAQCAtMTExOSw5ICsxMjAxLDExIEBACiAJc2gtPm1heF9jbWRfbGVuID0gTUFYX0NPTU1BTkRfU0laRTsKIAlzaC0+bWF4X2x1biA9IEhQU0FfTUFYX0xVTjsKIAlzaC0+bWF4X2lkID0gSFBTQV9NQVhfTFVOOworCXNoLT5jYW5fcXVldWUgPSBoLT5ucl9jbWRzOworCXNoLT5jbWRfcGVyX2x1biA9IGgtPm5yX2NtZHM7CiAJaC0+c2NzaV9ob3N0ID0gc2g7CiAJc2gtPmhvc3RkYXRhWzBdID0gKHVuc2lnbmVkIGxvbmcpIGg7Ci0Jc2gtPmlycSA9IGgtPmludHJbU0lNUExFX01PREVfSU5UXTsKKwlzaC0+aXJxID0gaC0+aW50cltQRVJGX01PREVfSU5UXTsKIAlzaC0+dW5pcXVlX2lkID0gc2gtPmlycTsKIAllcnJvciA9IHNjc2lfYWRkX2hvc3Qoc2gsICZoLT5wZGV2LT5kZXYpOwogCWlmIChlcnJvcikKQEAgLTExMzMsMTEgKzEyMTcsMTEgQEAKIAlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJocHNhX3Njc2lfZGV0ZWN0OiBzY3NpX2FkZF9ob3N0IgogCQkiIGZhaWxlZCBmb3IgY29udHJvbGxlciAlZFxuIiwgaC0+Y3Rscik7CiAJc2NzaV9ob3N0X3B1dChzaCk7Ci0JcmV0dXJuIC0xOworCXJldHVybiBlcnJvcjsKICBmYWlsOgogCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgImhwc2Ffc2NzaV9kZXRlY3Q6IHNjc2lfaG9zdF9hbGxvYyIKIAkJIiBmYWlsZWQgZm9yIGNvbnRyb2xsZXIgJWRcbiIsIGgtPmN0bHIpOwotCXJldHVybiAtMTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgaHBzYV9wY2lfdW5tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCkBAIC0xMTYwLDcgKzEyNDQsNyBAQAogCQlzaXplX3QgYnVmbGVuLAogCQlpbnQgZGF0YV9kaXJlY3Rpb24pCiB7Ci0JX191NjQgYWRkcjY0OworCXU2NCBhZGRyNjQ7CiAKIAlpZiAoYnVmbGVuID09IDAgfHwgZGF0YV9kaXJlY3Rpb24gPT0gUENJX0RNQV9OT05FKSB7CiAJCWNwLT5IZWFkZXIuU0dMaXN0ID0gMDsKQEAgLTExNjgsMTQgKzEyNTIsMTQgQEAKIAkJcmV0dXJuOwogCX0KIAotCWFkZHI2NCA9IChfX3U2NCkgcGNpX21hcF9zaW5nbGUocGRldiwgYnVmLCBidWZsZW4sIGRhdGFfZGlyZWN0aW9uKTsKKwlhZGRyNjQgPSAodTY0KSBwY2lfbWFwX3NpbmdsZShwZGV2LCBidWYsIGJ1ZmxlbiwgZGF0YV9kaXJlY3Rpb24pOwogCWNwLT5TR1swXS5BZGRyLmxvd2VyID0KLQkgIChfX3UzMikgKGFkZHI2NCAmIChfX3U2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKKwkgICh1MzIpIChhZGRyNjQgJiAodTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOwogCWNwLT5TR1swXS5BZGRyLnVwcGVyID0KLQkgIChfX3UzMikgKChhZGRyNjQgPj4gMzIpICYgKF9fdTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOworCSAgKHUzMikgKChhZGRyNjQgPj4gMzIpICYgKHU2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKIAljcC0+U0dbMF0uTGVuID0gYnVmbGVuOwotCWNwLT5IZWFkZXIuU0dMaXN0ID0gKF9fdTgpIDE7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KLQljcC0+SGVhZGVyLlNHVG90YWwgPSAoX191MTYpIDE7IC8qIHRvdGFsIHNncyBpbiB0aGlzIGNtZCBsaXN0ICovCisJY3AtPkhlYWRlci5TR0xpc3QgPSAodTgpIDE7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KKwljcC0+SGVhZGVyLlNHVG90YWwgPSAodTE2KSAxOyAvKiB0b3RhbCBzZ3MgaW4gdGhpcyBjbWQgbGlzdCAqLwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaHBzYV9zY3NpX2RvX3NpbXBsZV9jbWRfY29yZShzdHJ1Y3QgY3Rscl9pbmZvICpoLApAQCAtMTI3NCw3ICsxMzU4LDcgQEAKIAogCWlmIChjID09IE5VTEwpIHsJCQkvKiB0cm91YmxlLi4uICovCiAJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWRfc3BlY2lhbF9hbGxvYyByZXR1cm5lZCBOVUxMIVxuIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZmlsbF9jbWQoYywgSFBTQV9JTlFVSVJZLCBoLCBidWYsIGJ1ZnNpemUsIHBhZ2UsIHNjc2kzYWRkciwgVFlQRV9DTUQpOwpAQCAtMTM2Niw5ICsxNDUwLDggQEAKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAiY21kX3NwZWNpYWxfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQotCi0JbWVtc2V0KCZzY3NpM2FkZHJbMF0sIDAsIDgpOyAvKiBhZGRyZXNzIHRoZSBjb250cm9sbGVyICovCi0KKwkvKiBhZGRyZXNzIHRoZSBjb250cm9sbGVyICovCisJbWVtc2V0KHNjc2kzYWRkciwgMCwgc2l6ZW9mKHNjc2kzYWRkcikpOwogCWZpbGxfY21kKGMsIGxvZ2ljYWwgPyBIUFNBX1JFUE9SVF9MT0cgOiBIUFNBX1JFUE9SVF9QSFlTLCBoLAogCQlidWYsIGJ1ZnNpemUsIDAsIHNjc2kzYWRkciwgVFlQRV9DTUQpOwogCWlmIChleHRlbmRlZF9yZXNwb25zZSkKQEAgLTE0MDksMTMgKzE0OTIsMTIgQEAKIAl1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcltdLCBzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICp0aGlzX2RldmljZSkKIHsKICNkZWZpbmUgT0JEUl9UQVBFX0lOUV9TSVpFIDQ5Ci0JdW5zaWduZWQgY2hhciAqaW5xX2J1ZmYgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKmlucV9idWZmOwogCi0JaW5xX2J1ZmYgPSBrbWFsbG9jKE9CRFJfVEFQRV9JTlFfU0laRSwgR0ZQX0tFUk5FTCk7CisJaW5xX2J1ZmYgPSBremFsbG9jKE9CRFJfVEFQRV9JTlFfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbnFfYnVmZikKIAkJZ290byBiYWlsX291dDsKIAotCW1lbXNldChpbnFfYnVmZiwgMCwgT0JEUl9UQVBFX0lOUV9TSVpFKTsKIAkvKiBEbyBhbiBpbnF1aXJ5IHRvIHRoZSBkZXZpY2UgdG8gc2VlIHdoYXQgaXQgaXMuICovCiAJaWYgKGhwc2Ffc2NzaV9kb19pbnF1aXJ5KGgsIHNjc2kzYWRkciwgMCwgaW5xX2J1ZmYsCiAJCSh1bnNpZ25lZCBjaGFyKSBPQkRSX1RBUEVfSU5RX1NJWkUpICE9IDApIHsKQEAgLTE0ODUsMzIgKzE1NjcsNTEgQEAKICAqIGluIGhwc2FfZmluZF90YXJnZXRfbHVuLCBjYWxsZWQgYnkgaHBzYV9zY3NpX2FkZF9lbnRyeS4pCiAgKi8KIHN0YXRpYyB2b2lkIGZpZ3VyZV9idXNfdGFyZ2V0X2x1bihzdHJ1Y3QgY3Rscl9pbmZvICpoLAotCV9fdTggKmx1bmFkZHJieXRlcywgaW50ICpidXMsIGludCAqdGFyZ2V0LCBpbnQgKmx1biwKKwl1OCAqbHVuYWRkcmJ5dGVzLCBpbnQgKmJ1cywgaW50ICp0YXJnZXQsIGludCAqbHVuLAogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmRldmljZSkKIHsKLQotCV9fdTMyIGx1bmlkOworCXUzMiBsdW5pZDsKIAogCWlmIChpc19sb2dpY2FsX2Rldl9hZGRyX21vZGUobHVuYWRkcmJ5dGVzKSkgewogCQkvKiBsb2dpY2FsIGRldmljZSAqLwotCQltZW1jcHkoJmx1bmlkLCBsdW5hZGRyYnl0ZXMsIHNpemVvZihsdW5pZCkpOwotCQlsdW5pZCA9IGxlMzJfdG9fY3B1KGx1bmlkKTsKLQotCQlpZiAoaXNfbXNhMnh4eChoLCBkZXZpY2UpKSB7Ci0JCQkqYnVzID0gMTsKLQkJCSp0YXJnZXQgPSAobHVuaWQgPj4gMTYpICYgMHgzZmZmOwotCQkJKmx1biA9IGx1bmlkICYgMHgwMGZmOwotCQl9IGVsc2UgeworCQlpZiAodW5saWtlbHkoaXNfc2NzaV9yZXZfNShoKSkpIHsKKwkJCS8qIHAxMjEwbSwgbG9naWNhbCBkcml2ZXMgbHVuIGFzc2lnbm1lbnRzCisJCQkgKiBtYXRjaCBTQ1NJIFJFUE9SVCBMVU5TIGRhdGEuCisJCQkgKi8KKwkJCWx1bmlkID0gbGUzMl90b19jcHUoKigoX19sZTMyICopIGx1bmFkZHJieXRlcykpOwogCQkJKmJ1cyA9IDA7Ci0JCQkqbHVuID0gMDsKLQkJCSp0YXJnZXQgPSBsdW5pZCAmIDB4M2ZmZjsKKwkJCSp0YXJnZXQgPSAwOworCQkJKmx1biA9IChsdW5pZCAmIDB4M2ZmZikgKyAxOworCQl9IGVsc2UgeworCQkJLyogbm90IHAxMjEwbS4uLiAqLworCQkJbHVuaWQgPSBsZTMyX3RvX2NwdSgqKChfX2xlMzIgKikgbHVuYWRkcmJ5dGVzKSk7CisJCQlpZiAoaXNfbXNhMnh4eChoLCBkZXZpY2UpKSB7CisJCQkJLyogbXNhMnh4eCB3YXksIHB1dCBsb2dpY2FscyBvbiBidXMgMQorCQkJCSAqIGFuZCBtYXRjaCB0YXJnZXQvbHVuIG51bWJlcnMgYm94CisJCQkJICogcmVwb3J0cy4KKwkJCQkgKi8KKwkJCQkqYnVzID0gMTsKKwkJCQkqdGFyZ2V0ID0gKGx1bmlkID4+IDE2KSAmIDB4M2ZmZjsKKwkJCQkqbHVuID0gbHVuaWQgJiAweDAwZmY7CisJCQl9IGVsc2UgeworCQkJCS8qIFRyYWRpdGlvbmFsIHNtYXJ0IGFycmF5IHdheS4gKi8KKwkJCQkqYnVzID0gMDsKKwkJCQkqbHVuID0gMDsKKwkJCQkqdGFyZ2V0ID0gbHVuaWQgJiAweDNmZmY7CisJCQl9CiAJCX0KIAl9IGVsc2UgewogCQkvKiBwaHlzaWNhbCBkZXZpY2UgKi8KIAkJaWYgKGlzX2hiYV9sdW5pZChsdW5hZGRyYnl0ZXMpKQotCQkJKmJ1cyA9IDM7CisJCQlpZiAodW5saWtlbHkoaXNfc2NzaV9yZXZfNShoKSkpIHsKKwkJCQkqYnVzID0gMDsgLyogcHV0IHAxMjEwbSBjdGxyIGF0IDAsMCwwICovCisJCQkJKnRhcmdldCA9IDA7CisJCQkJKmx1biA9IDA7CisJCQkJcmV0dXJuOworCQkJfSBlbHNlCisJCQkJKmJ1cyA9IDM7IC8qIHRyYWRpdGlvbmFsIHNtYXJ0YXJyYXkgKi8KIAkJZWxzZQotCQkJKmJ1cyA9IDI7CisJCQkqYnVzID0gMjsgLyogcGh5c2ljYWwgZGlzayAqLwogCQkqdGFyZ2V0ID0gLTE7CiAJCSpsdW4gPSAtMTsgLyogd2Ugd2lsbCBmaWxsIHRoZXNlIGluIGxhdGVyLiAqLwogCX0KQEAgLTE1MjksNyArMTYzMCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYWRkX21zYTJ4eHhfZW5jbG9zdXJlX2RldmljZShzdHJ1Y3QgY3Rscl9pbmZvICpoLAogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnRtcGRldmljZSwKLQlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICp0aGlzX2RldmljZSwgX191OCAqbHVuYWRkcmJ5dGVzLAorCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnRoaXNfZGV2aWNlLCB1OCAqbHVuYWRkcmJ5dGVzLAogCWludCBidXMsIGludCB0YXJnZXQsIGludCBsdW4sIHVuc2lnbmVkIGxvbmcgbHVuemVyb2JpdHNbXSwKIAlpbnQgKm5tc2EyeHh4X2VuY2xvc3VyZXMpCiB7CkBAIC0xNTUwLDYgKzE2NTEsOSBAQAogCWlmIChpc19oYmFfbHVuaWQoc2NzaTNhZGRyKSkKIAkJcmV0dXJuIDA7IC8qIERvbid0IGFkZCB0aGUgUkFJRCBjb250cm9sbGVyIGhlcmUuICovCiAKKwlpZiAoaXNfc2NzaV9yZXZfNShoKSkKKwkJcmV0dXJuIDA7IC8qIHAxMjEwbSBkb2Vzbid0IG5lZWQgdG8gZG8gdGhpcy4gKi8KKwogI2RlZmluZSBNQVhfTVNBMlhYWF9FTkNMT1NVUkVTIDMyCiAJaWYgKCpubXNhMnh4eF9lbmNsb3N1cmVzID49IE1BWF9NU0EyWFhYX0VOQ0xPU1VSRVMpIHsKIAkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIk1heGltdW0gbnVtYmVyIG9mIE1TQTJYWFggIgpAQCAtMTU3NiwxOCArMTY4MCwxNCBAQAogICovCiBzdGF0aWMgaW50IGhwc2FfZ2F0aGVyX2x1bl9pbmZvKHN0cnVjdCBjdGxyX2luZm8gKmgsCiAJaW50IHJlcG9ydGx1bnNpemUsCi0Jc3RydWN0IFJlcG9ydExVTmRhdGEgKnBoeXNkZXYsIF9fdTMyICpucGh5c2ljYWxzLAotCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpsb2dkZXYsIF9fdTMyICpubG9naWNhbHMpCisJc3RydWN0IFJlcG9ydExVTmRhdGEgKnBoeXNkZXYsIHUzMiAqbnBoeXNpY2FscywKKwlzdHJ1Y3QgUmVwb3J0TFVOZGF0YSAqbG9nZGV2LCB1MzIgKm5sb2dpY2FscykKIHsKIAlpZiAoaHBzYV9zY3NpX2RvX3JlcG9ydF9waHlzX2x1bnMoaCwgcGh5c2RldiwgcmVwb3J0bHVuc2l6ZSwgMCkpIHsKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAicmVwb3J0IHBoeXNpY2FsIExVTnMgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JbWVtY3B5KG5waHlzaWNhbHMsICZwaHlzZGV2LT5MVU5MaXN0TGVuZ3RoWzBdLCBzaXplb2YoKm5waHlzaWNhbHMpKTsKLQkqbnBoeXNpY2FscyA9IGJlMzJfdG9fY3B1KCpucGh5c2ljYWxzKSAvIDg7Ci0jaWZkZWYgREVCVUcKLQlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LCAibnVtYmVyIG9mIHBoeXNpY2FsIGx1bnMgaXMgJWRcbiIsICpucGh5c2ljYWxzKTsKLSNlbmRpZgorCSpucGh5c2ljYWxzID0gYmUzMl90b19jcHUoKigoX19iZTMyICopcGh5c2Rldi0+TFVOTGlzdExlbmd0aCkpIC8gODsKIAlpZiAoKm5waHlzaWNhbHMgPiBIUFNBX01BWF9QSFlTX0xVTikgewogCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAibWF4aW11bSBwaHlzaWNhbCBMVU5zICglZCkgZXhjZWVkZWQuIgogCQkJIiAgJWQgTFVOcyBpZ25vcmVkLlxuIiwgSFBTQV9NQVhfUEhZU19MVU4sCkBAIC0xNTk4LDExICsxNjk4LDcgQEAKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAicmVwb3J0IGxvZ2ljYWwgTFVOcyBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KLQltZW1jcHkobmxvZ2ljYWxzLCAmbG9nZGV2LT5MVU5MaXN0TGVuZ3RoWzBdLCBzaXplb2YoKm5sb2dpY2FscykpOwotCSpubG9naWNhbHMgPSBiZTMyX3RvX2NwdSgqbmxvZ2ljYWxzKSAvIDg7Ci0jaWZkZWYgREVCVUcKLQlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LCAibnVtYmVyIG9mIGxvZ2ljYWwgbHVucyBpcyAlZFxuIiwgKm5sb2dpY2Fscyk7Ci0jZW5kaWYKKwkqbmxvZ2ljYWxzID0gYmUzMl90b19jcHUoKigoX19iZTMyICopIGxvZ2Rldi0+TFVOTGlzdExlbmd0aCkpIC8gODsKIAkvKiBSZWplY3QgTG9naWNhbHMgaW4gZXhjZXNzIG9mIG91ciBtYXggY2FwYWJpbGl0eS4gKi8KIAlpZiAoKm5sb2dpY2FscyA+IEhQU0FfTUFYX0xVTikgewogCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LApAQCAtMTYyMSw2ICsxNzE3LDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3U4ICpmaWd1cmVfbHVuYWRkcmJ5dGVzKHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCByYWlkX2N0bHJfcG9zaXRpb24sIGludCBpLAorCWludCBucGh5c2ljYWxzLCBpbnQgbmxvZ2ljYWxzLCBzdHJ1Y3QgUmVwb3J0TFVOZGF0YSAqcGh5c2Rldl9saXN0LAorCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpsb2dkZXZfbGlzdCkKK3sKKwkvKiBIZWxwZXIgZnVuY3Rpb24sIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIExVTiBJRCBpbmZvIGlzIGNvbWluZyBmcm9tCisJICogZ2l2ZW4gaW5kZXggaSwgbGlzdHMgb2YgcGh5c2ljYWwgYW5kIGxvZ2ljYWwgZGV2aWNlcywgd2hlcmUgaW4KKwkgKiB0aGUgbGlzdCB0aGUgcmFpZCBjb250cm9sbGVyIGlzIHN1cHBvc2VkIHRvIGFwcGVhciAoZmlyc3Qgb3IgbGFzdCkKKwkgKi8KKworCWludCBsb2dpY2Fsc19zdGFydCA9IG5waHlzaWNhbHMgKyAocmFpZF9jdGxyX3Bvc2l0aW9uID09IDApOworCWludCBsYXN0X2RldmljZSA9IG5waHlzaWNhbHMgKyBubG9naWNhbHMgKyAocmFpZF9jdGxyX3Bvc2l0aW9uID09IDApOworCisJaWYgKGkgPT0gcmFpZF9jdGxyX3Bvc2l0aW9uKQorCQlyZXR1cm4gUkFJRF9DVExSX0xVTklEOworCisJaWYgKGkgPCBsb2dpY2Fsc19zdGFydCkKKwkJcmV0dXJuICZwaHlzZGV2X2xpc3QtPkxVTltpIC0gKHJhaWRfY3Rscl9wb3NpdGlvbiA9PSAwKV1bMF07CisKKwlpZiAoaSA8IGxhc3RfZGV2aWNlKQorCQlyZXR1cm4gJmxvZ2Rldl9saXN0LT5MVU5baSAtIG5waHlzaWNhbHMgLQorCQkJKHJhaWRfY3Rscl9wb3NpdGlvbiA9PSAwKV1bMF07CisJQlVHKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkIGhwc2FfdXBkYXRlX3Njc2lfZGV2aWNlcyhzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vKQogewogCS8qIHRoZSBpZGVhIGhlcmUgaXMgd2UgY291bGQgZ2V0IG5vdGlmaWVkCkBAIC0xNjM2LDE0ICsxNzU3LDE1IEBACiAJc3RydWN0IFJlcG9ydExVTmRhdGEgKnBoeXNkZXZfbGlzdCA9IE5VTEw7CiAJc3RydWN0IFJlcG9ydExVTmRhdGEgKmxvZ2Rldl9saXN0ID0gTlVMTDsKIAl1bnNpZ25lZCBjaGFyICppbnFfYnVmZiA9IE5VTEw7Ci0JX191MzIgbnBoeXNpY2FscyA9IDA7Ci0JX191MzIgbmxvZ2ljYWxzID0gMDsKLQlfX3UzMiBuZGV2X2FsbG9jYXRlZCA9IDA7CisJdTMyIG5waHlzaWNhbHMgPSAwOworCXUzMiBubG9naWNhbHMgPSAwOworCXUzMiBuZGV2X2FsbG9jYXRlZCA9IDA7CiAJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqKmN1cnJlbnRzZCwgKnRoaXNfZGV2aWNlLCAqdG1wZGV2aWNlOwogCWludCBuY3VycmVudCA9IDA7CiAJaW50IHJlcG9ydGx1bnNpemUgPSBzaXplb2YoKnBoeXNkZXZfbGlzdCkgKyBIUFNBX01BWF9QSFlTX0xVTiAqIDg7CiAJaW50IGksIG5tc2EyeHh4X2VuY2xvc3VyZXMsIG5kZXZzX3RvX2FsbG9jYXRlOwogCWludCBidXMsIHRhcmdldCwgbHVuOworCWludCByYWlkX2N0bHJfcG9zaXRpb247CiAJREVDTEFSRV9CSVRNQVAobHVuemVyb2JpdHMsIEhQU0FfTUFYX1RBUkdFVFNfUEVSX0NUTFIpOwogCiAJY3VycmVudHNkID0ga3phbGxvYyhzaXplb2YoKmN1cnJlbnRzZCkgKiBIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQSwKQEAgLTE2ODEsMjMgKzE4MDMsMjIgQEAKIAkJbmRldl9hbGxvY2F0ZWQrKzsKIAl9CiAKKwlpZiAodW5saWtlbHkoaXNfc2NzaV9yZXZfNShoKSkpCisJCXJhaWRfY3Rscl9wb3NpdGlvbiA9IDA7CisJZWxzZQorCQlyYWlkX2N0bHJfcG9zaXRpb24gPSBucGh5c2ljYWxzICsgbmxvZ2ljYWxzOworCiAJLyogYWRqdXN0IG91ciB0YWJsZSBvZiBkZXZpY2VzICovCiAJbm1zYTJ4eHhfZW5jbG9zdXJlcyA9IDA7CiAJZm9yIChpID0gMDsgaSA8IG5waHlzaWNhbHMgKyBubG9naWNhbHMgKyAxOyBpKyspIHsKLQkJX191OCAqbHVuYWRkcmJ5dGVzOworCQl1OCAqbHVuYWRkcmJ5dGVzOwogCiAJCS8qIEZpZ3VyZSBvdXQgd2hlcmUgdGhlIExVTiBJRCBpbmZvIGlzIGNvbWluZyBmcm9tICovCi0JCWlmIChpIDwgbnBoeXNpY2FscykKLQkJCWx1bmFkZHJieXRlcyA9ICZwaHlzZGV2X2xpc3QtPkxVTltpXVswXTsKLQkJZWxzZQotCQkJaWYgKGkgPCBucGh5c2ljYWxzICsgbmxvZ2ljYWxzKQotCQkJCWx1bmFkZHJieXRlcyA9Ci0JCQkJCSZsb2dkZXZfbGlzdC0+TFVOW2ktbnBoeXNpY2Fsc11bMF07Ci0JCQllbHNlIC8qIGphbSBpbiB0aGUgUkFJRCBjb250cm9sbGVyIGF0IHRoZSBlbmQgKi8KLQkJCQlsdW5hZGRyYnl0ZXMgPSBSQUlEX0NUTFJfTFVOSUQ7Ci0KKwkJbHVuYWRkcmJ5dGVzID0gZmlndXJlX2x1bmFkZHJieXRlcyhoLCByYWlkX2N0bHJfcG9zaXRpb24sCisJCQlpLCBucGh5c2ljYWxzLCBubG9naWNhbHMsIHBoeXNkZXZfbGlzdCwgbG9nZGV2X2xpc3QpOwogCQkvKiBza2lwIG1hc2tlZCBwaHlzaWNhbCBkZXZpY2VzLiAqLwotCQlpZiAobHVuYWRkcmJ5dGVzWzNdICYgMHhDMCAmJiBpIDwgbnBoeXNpY2FscykKKwkJaWYgKGx1bmFkZHJieXRlc1szXSAmIDB4QzAgJiYKKwkJCWkgPCBucGh5c2ljYWxzICsgKHJhaWRfY3Rscl9wb3NpdGlvbiA9PSAwKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIEdldCBkZXZpY2UgdHlwZSwgdmVuZG9yLCBtb2RlbCwgZGV2aWNlIGlkICovCkBAIC0xNzc3LDcgKzE4OTgsNiBAQAogCWtmcmVlKGlucV9idWZmKTsKIAlrZnJlZShwaHlzZGV2X2xpc3QpOwogCWtmcmVlKGxvZ2Rldl9saXN0KTsKLQlyZXR1cm47CiB9CiAKIC8qIGhwc2Ffc2NhdHRlcl9nYXRoZXIgdGFrZXMgYSBzdHJ1Y3Qgc2NzaV9jbW5kLCAoY21kKSwgYW5kIGRvZXMgdGhlIHBjaQpAQCAtMTc5MCw3ICsxOTEwLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JX191NjQgYWRkcjY0OworCXU2NCBhZGRyNjQ7CiAJaW50IHVzZV9zZywgaTsKIAogCUJVR19PTihzY3NpX3NnX2NvdW50KGNtZCkgPiBNQVhTR0VOVFJJRVMpOwpAQCAtMTgwMywyMCArMTkyMywyMCBAQAogCQlnb3RvIHNnbGlzdF9maW5pc2hlZDsKIAogCXNjc2lfZm9yX2VhY2hfc2coY21kLCBzZywgdXNlX3NnLCBpKSB7Ci0JCWFkZHI2NCA9IChfX3U2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOworCQlhZGRyNjQgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CiAJCWxlbiAgPSBzZ19kbWFfbGVuKHNnKTsKIAkJY3AtPlNHW2ldLkFkZHIubG93ZXIgPQotCQkJKF9fdTMyKSAoYWRkcjY0ICYgKF9fdTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOworCQkJKHUzMikgKGFkZHI2NCAmICh1NjQpIDB4MDAwMDAwMDBGRkZGRkZGRik7CiAJCWNwLT5TR1tpXS5BZGRyLnVwcGVyID0KLQkJCShfX3UzMikgKChhZGRyNjQgPj4gMzIpICYgKF9fdTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOworCQkJKHUzMikgKChhZGRyNjQgPj4gMzIpICYgKHU2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKIAkJY3AtPlNHW2ldLkxlbiA9IGxlbjsKIAkJY3AtPlNHW2ldLkV4dCA9IDA7ICAvKiB3ZSBhcmUgbm90IGNoYWluaW5nICovCiAJfQogCiBzZ2xpc3RfZmluaXNoZWQ6CiAKLQljcC0+SGVhZGVyLlNHTGlzdCA9IChfX3U4KSB1c2Vfc2c7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KLQljcC0+SGVhZGVyLlNHVG90YWwgPSAoX191MTYpIHVzZV9zZzsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KKwljcC0+SGVhZGVyLlNHTGlzdCA9ICh1OCkgdXNlX3NnOyAgIC8qIG5vLiBTR3MgY29udGlnIGluIHRoaXMgY21kICovCisJY3AtPkhlYWRlci5TR1RvdGFsID0gKHUxNikgdXNlX3NnOyAvKiB0b3RhbCBzZ3MgaW4gdGhpcyBjbWQgbGlzdCAqLwogCXJldHVybiAwOwogfQogCkBAIC0xODYwLDcgKzE5ODAsOCBAQAogCWMtPnNjc2lfY21kID0gY21kOwogCWMtPkhlYWRlci5SZXBseVF1ZXVlID0gMDsgIC8qIHVudXNlZCBpbiBzaW1wbGUgbW9kZSAqLwogCW1lbWNweSgmYy0+SGVhZGVyLkxVTi5MdW5BZGRyQnl0ZXNbMF0sICZzY3NpM2FkZHJbMF0sIDgpOwotCWMtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5idXNhZGRyOyAgLyogVXNlIGsuIGFkZHJlc3Mgb2YgY21kIGFzIHRhZyAqLworCWMtPkhlYWRlci5UYWcubG93ZXIgPSAoYy0+Y21kaW5kZXggPDwgRElSRUNUX0xPT0tVUF9TSElGVCk7CisJYy0+SGVhZGVyLlRhZy5sb3dlciB8PSBESVJFQ1RfTE9PS1VQX0JJVDsKIAogCS8qIEZpbGwgaW4gdGhlIHJlcXVlc3QgYmxvY2suLi4gKi8KIApAQCAtMTkxNCw2ICsyMDM1LDQ4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGhwc2Ffc2Nhbl9zdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaCkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gc2hvc3RfdG9faGJhKHNoKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogd2FpdCB1bnRpbCBhbnkgc2NhbiBhbHJlYWR5IGluIHByb2dyZXNzIGlzIGZpbmlzaGVkLiAqLworCXdoaWxlICgxKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5zY2FuX2xvY2ssIGZsYWdzKTsKKwkJaWYgKGgtPnNjYW5fZmluaXNoZWQpCisJCQlicmVhazsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+c2Nhbl9sb2NrLCBmbGFncyk7CisJCXdhaXRfZXZlbnQoaC0+c2Nhbl93YWl0X3F1ZXVlLCBoLT5zY2FuX2ZpbmlzaGVkKTsKKwkJLyogTm90ZTogV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBhIHJhY2UgYmV0d2VlbiB0aGlzCisJCSAqIHRocmVhZCBhbmQgZHJpdmVyIHVubG9hZCBiZWNhdXNlIHRoZSBtaWRsYXllciB3aWxsCisJCSAqIGhhdmUgaW5jcmVtZW50ZWQgdGhlIHJlZmVyZW5jZSBjb3VudCwgc28gdW5sb2FkIHdvbid0CisJCSAqIGhhcHBlbiBpZiB3ZSdyZSBpbiBoZXJlLgorCQkgKi8KKwl9CisJaC0+c2Nhbl9maW5pc2hlZCA9IDA7IC8qIG1hcmsgc2NhbiBhcyBpbiBwcm9ncmVzcyAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOworCisJaHBzYV91cGRhdGVfc2NzaV9kZXZpY2VzKGgsIGgtPnNjc2lfaG9zdC0+aG9zdF9ubyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+c2Nhbl9sb2NrLCBmbGFncyk7CisJaC0+c2Nhbl9maW5pc2hlZCA9IDE7IC8qIG1hcmsgc2NhbiBhcyBmaW5pc2hlZC4gKi8KKwl3YWtlX3VwX2FsbCgmaC0+c2Nhbl93YWl0X3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5zY2FuX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBocHNhX3NjYW5fZmluaXNoZWQoc3RydWN0IFNjc2lfSG9zdCAqc2gsCisJdW5zaWduZWQgbG9uZyBlbGFwc2VkX3RpbWUpCit7CisJc3RydWN0IGN0bHJfaW5mbyAqaCA9IHNob3N0X3RvX2hiYShzaCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZmluaXNoZWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+c2Nhbl9sb2NrLCBmbGFncyk7CisJZmluaXNoZWQgPSBoLT5zY2FuX2ZpbmlzaGVkOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOworCXJldHVybiBmaW5pc2hlZDsKK30KKwogc3RhdGljIHZvaWQgaHBzYV91bnJlZ2lzdGVyX3Njc2koc3RydWN0IGN0bHJfaW5mbyAqaCkKIHsKIAkvKiB3ZSBhcmUgYmVpbmcgZm9yY2libHkgdW5sb2FkZWQsIGFuZCBtYXkgbm90IHJlZnVzZS4gKi8KQEAgLTE5MjYsNyArMjA4OSw2IEBACiB7CiAJaW50IHJjOwogCi0JaHBzYV91cGRhdGVfc2NzaV9kZXZpY2VzKGgsIC0xKTsKIAlyYyA9IGhwc2Ffc2NzaV9kZXRlY3QoaCk7CiAJaWYgKHJjICE9IDApCiAJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgImhwc2FfcmVnaXN0ZXJfc2NzaTogZmFpbGVkIgpAQCAtMjAwMywxNCArMjE2NSwxNCBAQAogCWggPSBzZGV2X3RvX2hiYShzY3NpY21kLT5kZXZpY2UpOwogCWlmIChoID09IE5VTEwpIC8qIHBhcmFub2lhICovCiAJCXJldHVybiBGQUlMRUQ7Ci0JZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInJlc2V0dGluZyBkcml2ZVxuIik7Ci0KIAlkZXYgPSBzY3NpY21kLT5kZXZpY2UtPmhvc3RkYXRhOwogCWlmICghZGV2KSB7CiAJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgImhwc2FfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXI6ICIKIAkJCSJkZXZpY2UgbG9va3VwIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KKwlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAicmVzZXR0aW5nIGRldmljZSAlZDolZDolZDolZFxuIiwKKwkJaC0+c2NzaV9ob3N0LT5ob3N0X25vLCBkZXYtPmJ1cywgZGV2LT50YXJnZXQsIGRldi0+bHVuKTsKIAkvKiBzZW5kIGEgcmVzZXQgdG8gdGhlIFNDU0kgTFVOIHdoaWNoIHRoZSBjb21tYW5kIHdhcyBzZW50IHRvICovCiAJcmMgPSBocHNhX3NlbmRfcmVzZXQoaCwgZGV2LT5zY3NpM2FkZHIpOwogCWlmIChyYyA9PSAwICYmIHdhaXRfZm9yX2RldmljZV90b19iZWNvbWVfcmVhZHkoaCwgZGV2LT5zY3NpM2FkZHIpID09IDApCkBAIC0yMDUzLDggKzIyMTUsOCBAQAogCWMtPmNtZGluZGV4ID0gaTsKIAogCUlOSVRfSExJU1RfTk9ERSgmYy0+bGlzdCk7Ci0JYy0+YnVzYWRkciA9IChfX3UzMikgY21kX2RtYV9oYW5kbGU7Ci0JdGVtcDY0LnZhbCA9IChfX3U2NCkgZXJyX2RtYV9oYW5kbGU7CisJYy0+YnVzYWRkciA9ICh1MzIpIGNtZF9kbWFfaGFuZGxlOworCXRlbXA2NC52YWwgPSAodTY0KSBlcnJfZG1hX2hhbmRsZTsKIAljLT5FcnJEZXNjLkFkZHIubG93ZXIgPSB0ZW1wNjQudmFsMzIubG93ZXI7CiAJYy0+RXJyRGVzYy5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOwogCWMtPkVyckRlc2MuTGVuID0gc2l6ZW9mKCpjLT5lcnJfaW5mbyk7CkBAIC0yMDkxLDggKzIyNTMsOCBAQAogCW1lbXNldChjLT5lcnJfaW5mbywgMCwgc2l6ZW9mKCpjLT5lcnJfaW5mbykpOwogCiAJSU5JVF9ITElTVF9OT0RFKCZjLT5saXN0KTsKLQljLT5idXNhZGRyID0gKF9fdTMyKSBjbWRfZG1hX2hhbmRsZTsKLQl0ZW1wNjQudmFsID0gKF9fdTY0KSBlcnJfZG1hX2hhbmRsZTsKKwljLT5idXNhZGRyID0gKHUzMikgY21kX2RtYV9oYW5kbGU7CisJdGVtcDY0LnZhbCA9ICh1NjQpIGVycl9kbWFfaGFuZGxlOwogCWMtPkVyckRlc2MuQWRkci5sb3dlciA9IHRlbXA2NC52YWwzMi5sb3dlcjsKIAljLT5FcnJEZXNjLkFkZHIudXBwZXIgPSB0ZW1wNjQudmFsMzIudXBwZXI7CiAJYy0+RXJyRGVzYy5MZW4gPSBzaXplb2YoKmMtPmVycl9pbmZvKTsKQEAgLTIxMjUsNTAgKzIyODcsNiBAQAogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCi1zdGF0aWMgaW50IGRvX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaW50IHJldDsKLQotCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0gaHBzYV9pb2N0bChkZXYsIGNtZCwgYXJnKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBocHNhX2lvY3RsMzJfcGFzc3RocnUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgKmFyZyk7Ci1zdGF0aWMgaW50IGhwc2FfaW9jdGwzMl9iaWdfcGFzc3RocnUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsCi0JaW50IGNtZCwgdm9pZCAqYXJnKTsKLQotc3RhdGljIGludCBocHNhX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBDQ0lTU19HRVRQQ0lJTkZPOgotCWNhc2UgQ0NJU1NfR0VUSU5USU5GTzoKLQljYXNlIENDSVNTX1NFVElOVElORk86Ci0JY2FzZSBDQ0lTU19HRVROT0RFTkFNRToKLQljYXNlIENDSVNTX1NFVE5PREVOQU1FOgotCWNhc2UgQ0NJU1NfR0VUSEVBUlRCRUFUOgotCWNhc2UgQ0NJU1NfR0VUQlVTVFlQRVM6Ci0JY2FzZSBDQ0lTU19HRVRGSVJNVkVSOgotCWNhc2UgQ0NJU1NfR0VURFJJVlZFUjoKLQljYXNlIENDSVNTX1JFVkFMSURWT0xTOgotCWNhc2UgQ0NJU1NfREVSRUdESVNLOgotCWNhc2UgQ0NJU1NfUkVHTkVXRElTSzoKLQljYXNlIENDSVNTX1JFR05FV0Q6Ci0JY2FzZSBDQ0lTU19SRVNDQU5ESVNLOgotCWNhc2UgQ0NJU1NfR0VUTFVOSU5GTzoKLQkJcmV0dXJuIGRvX2lvY3RsKGRldiwgY21kLCBhcmcpOwotCi0JY2FzZSBDQ0lTU19QQVNTVEhSVTMyOgotCQlyZXR1cm4gaHBzYV9pb2N0bDMyX3Bhc3N0aHJ1KGRldiwgY21kLCBhcmcpOwotCWNhc2UgQ0NJU1NfQklHX1BBU1NUSFJVMzI6Ci0JCXJldHVybiBocHNhX2lvY3RsMzJfYmlnX3Bhc3N0aHJ1KGRldiwgY21kLCBhcmcpOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgaHBzYV9pb2N0bDMyX3Bhc3N0aHJ1KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJSU9DVEwzMl9Db21tYW5kX3N0cnVjdCBfX3VzZXIgKmFyZzMyID0KQEAgLTIxOTMsNyArMjMxMSw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkb19pb2N0bChkZXYsIENDSVNTX1BBU1NUSFJVLCAodm9pZCAqKXApOworCWVyciA9IGhwc2FfaW9jdGwoZGV2LCBDQ0lTU19QQVNTVEhSVSwgKHZvaWQgKilwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCWVyciB8PSBjb3B5X2luX3VzZXIoJmFyZzMyLT5lcnJvcl9pbmZvLCAmcC0+ZXJyb3JfaW5mbywKQEAgLTIyMzAsNyArMjM0OCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkb19pb2N0bChkZXYsIENDSVNTX0JJR19QQVNTVEhSVSwgKHZvaWQgKilwKTsKKwllcnIgPSBocHNhX2lvY3RsKGRldiwgQ0NJU1NfQklHX1BBU1NUSFJVLCAodm9pZCAqKXApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJZXJyIHw9IGNvcHlfaW5fdXNlcigmYXJnMzItPmVycm9yX2luZm8sICZwLT5lcnJvcl9pbmZvLApAQCAtMjIzOSw2ICsyMzU3LDM2IEBACiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiBlcnI7CiB9CisKK3N0YXRpYyBpbnQgaHBzYV9jb21wYXRfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ0NJU1NfR0VUUENJSU5GTzoKKwljYXNlIENDSVNTX0dFVElOVElORk86CisJY2FzZSBDQ0lTU19TRVRJTlRJTkZPOgorCWNhc2UgQ0NJU1NfR0VUTk9ERU5BTUU6CisJY2FzZSBDQ0lTU19TRVROT0RFTkFNRToKKwljYXNlIENDSVNTX0dFVEhFQVJUQkVBVDoKKwljYXNlIENDSVNTX0dFVEJVU1RZUEVTOgorCWNhc2UgQ0NJU1NfR0VURklSTVZFUjoKKwljYXNlIENDSVNTX0dFVERSSVZWRVI6CisJY2FzZSBDQ0lTU19SRVZBTElEVk9MUzoKKwljYXNlIENDSVNTX0RFUkVHRElTSzoKKwljYXNlIENDSVNTX1JFR05FV0RJU0s6CisJY2FzZSBDQ0lTU19SRUdORVdEOgorCWNhc2UgQ0NJU1NfUkVTQ0FORElTSzoKKwljYXNlIENDSVNTX0dFVExVTklORk86CisJCXJldHVybiBocHNhX2lvY3RsKGRldiwgY21kLCBhcmcpOworCisJY2FzZSBDQ0lTU19QQVNTVEhSVTMyOgorCQlyZXR1cm4gaHBzYV9pb2N0bDMyX3Bhc3N0aHJ1KGRldiwgY21kLCBhcmcpOworCWNhc2UgQ0NJU1NfQklHX1BBU1NUSFJVMzI6CisJCXJldHVybiBocHNhX2lvY3RsMzJfYmlnX3Bhc3N0aHJ1KGRldiwgY21kLCBhcmcpOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CiAjZW5kaWYKIAogc3RhdGljIGludCBocHNhX2dldHBjaWluZm9faW9jdGwoc3RydWN0IGN0bHJfaW5mbyAqaCwgdm9pZCBfX3VzZXIgKmFyZ3ApCkBAIC0yMzc4LDggKzI1MjYsOCBAQAogCUJZVEUgc2dfdXNlZCA9IDA7CiAJaW50IHN0YXR1cyA9IDA7CiAJaW50IGk7Ci0JX191MzIgbGVmdDsKLQlfX3UzMiBzejsKKwl1MzIgbGVmdDsKKwl1MzIgc3o7CiAJQllURSBfX3VzZXIgKmRhdGFfcHRyOwogCiAJaWYgKCFhcmdwKQpAQCAtMjUyNyw3ICsyNjc1LDcgQEAKIAljYXNlIENDSVNTX0RFUkVHRElTSzoKIAljYXNlIENDSVNTX1JFR05FV0RJU0s6CiAJY2FzZSBDQ0lTU19SRUdORVdEOgotCQlocHNhX3VwZGF0ZV9zY3NpX2RldmljZXMoaCwgZGV2LT5ob3N0LT5ob3N0X25vKTsKKwkJaHBzYV9zY2FuX3N0YXJ0KGgtPnNjc2lfaG9zdCk7CiAJCXJldHVybiAwOwogCWNhc2UgQ0NJU1NfR0VUUENJSU5GTzoKIAkJcmV0dXJuIGhwc2FfZ2V0cGNpaW5mb19pb2N0bChoLCBhcmdwKTsKQEAgLTI1NDIsOCArMjY5MCw4IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBmaWxsX2NtZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmMsIF9fdTggY21kLCBzdHJ1Y3QgY3Rscl9pbmZvICpoLAotCXZvaWQgKmJ1ZmYsIHNpemVfdCBzaXplLCBfX3U4IHBhZ2VfY29kZSwgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLAorc3RhdGljIHZvaWQgZmlsbF9jbWQoc3RydWN0IENvbW1hbmRMaXN0ICpjLCB1OCBjbWQsIHN0cnVjdCBjdGxyX2luZm8gKmgsCisJdm9pZCAqYnVmZiwgc2l6ZV90IHNpemUsIHU4IHBhZ2VfY29kZSwgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLAogCWludCBjbWRfdHlwZSkKIHsKIAlpbnQgcGNpX2RpciA9IFhGRVJfTk9ORTsKQEAgLTI3MTAsMTkgKzI4NTgsMjAgQEAKIAlyZXR1cm4gaC0+YWNjZXNzLmNvbW1hbmRfY29tcGxldGVkKGgpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpbnRlcnJ1cHRfcGVuZGluZyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQorc3RhdGljIGlubGluZSBib29sIGludGVycnVwdF9wZW5kaW5nKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJcmV0dXJuIGgtPmFjY2Vzcy5pbnRyX3BlbmRpbmcoaCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgbG9uZyBpbnRlcnJ1cHRfbm90X2Zvcl91cyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewotCXJldHVybiAoKGgtPmFjY2Vzcy5pbnRyX3BlbmRpbmcoaCkgPT0gMCkgfHwKLQkJIChoLT5pbnRlcnJ1cHRzX2VuYWJsZWQgPT0gMCkpOworCXJldHVybiAhKGgtPm1zaV92ZWN0b3IgfHwgaC0+bXNpeF92ZWN0b3IpICYmCisJCSgoaC0+YWNjZXNzLmludHJfcGVuZGluZyhoKSA9PSAwKSB8fAorCQkoaC0+aW50ZXJydXB0c19lbmFibGVkID09IDApKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYmFkX3RhZyhzdHJ1Y3QgY3Rscl9pbmZvICpoLCBfX3UzMiB0YWdfaW5kZXgsCi0JX191MzIgcmF3X3RhZykKK3N0YXRpYyBpbmxpbmUgaW50IGJhZF90YWcoc3RydWN0IGN0bHJfaW5mbyAqaCwgdTMyIHRhZ19pbmRleCwKKwl1MzIgcmF3X3RhZykKIHsKIAlpZiAodW5saWtlbHkodGFnX2luZGV4ID49IGgtPm5yX2NtZHMpKSB7CiAJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJiYWQgdGFnIDB4JTA4eCBpZ25vcmVkLlxuIiwgcmF3X3RhZyk7CkBAIC0yNzMxLDcgKzI4ODAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmluaXNoX2NtZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmMsIF9fdTMyIHJhd190YWcpCitzdGF0aWMgaW5saW5lIHZvaWQgZmluaXNoX2NtZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmMsIHUzMiByYXdfdGFnKQogewogCXJlbW92ZVEoYyk7CiAJaWYgKGxpa2VseShjLT5jbWRfdHlwZSA9PSBDTURfU0NTSSkpCkBAIC0yNzQwLDQyICsyODg5LDc5IEBACiAJCWNvbXBsZXRlKGMtPndhaXRpbmcpOwogfQogCitzdGF0aWMgaW5saW5lIHUzMiBocHNhX3RhZ19jb250YWluc19pbmRleCh1MzIgdGFnKQoreworI2RlZmluZSBESVJFQ1RfTE9PS1VQX0JJVCAweDEwCisJcmV0dXJuIHRhZyAmIERJUkVDVF9MT09LVVBfQklUOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBocHNhX3RhZ190b19pbmRleCh1MzIgdGFnKQoreworI2RlZmluZSBESVJFQ1RfTE9PS1VQX1NISUZUIDUKKwlyZXR1cm4gdGFnID4+IERJUkVDVF9MT09LVVBfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGhwc2FfdGFnX2Rpc2NhcmRfZXJyb3JfYml0cyh1MzIgdGFnKQoreworI2RlZmluZSBIUFNBX0VSUk9SX0JJVFMgMHgwMworCXJldHVybiB0YWcgJiB+SFBTQV9FUlJPUl9CSVRTOworfQorCisvKiBwcm9jZXNzIGNvbXBsZXRpb24gb2YgYW4gaW5kZXhlZCAoImRpcmVjdCBsb29rdXAiKSBjb21tYW5kICovCitzdGF0aWMgaW5saW5lIHUzMiBwcm9jZXNzX2luZGV4ZWRfY21kKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJdTMyIHJhd190YWcpCit7CisJdTMyIHRhZ19pbmRleDsKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CisKKwl0YWdfaW5kZXggPSBocHNhX3RhZ190b19pbmRleChyYXdfdGFnKTsKKwlpZiAoYmFkX3RhZyhoLCB0YWdfaW5kZXgsIHJhd190YWcpKQorCQlyZXR1cm4gbmV4dF9jb21tYW5kKGgpOworCWMgPSBoLT5jbWRfcG9vbCArIHRhZ19pbmRleDsKKwlmaW5pc2hfY21kKGMsIHJhd190YWcpOworCXJldHVybiBuZXh0X2NvbW1hbmQoaCk7Cit9CisKKy8qIHByb2Nlc3MgY29tcGxldGlvbiBvZiBhIG5vbi1pbmRleGVkIGNvbW1hbmQgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHByb2Nlc3Nfbm9uaW5kZXhlZF9jbWQoc3RydWN0IGN0bHJfaW5mbyAqaCwKKwl1MzIgcmF3X3RhZykKK3sKKwl1MzIgdGFnOworCXN0cnVjdCBDb21tYW5kTGlzdCAqYyA9IE5VTEw7CisJc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKKworCXRhZyA9IGhwc2FfdGFnX2Rpc2NhcmRfZXJyb3JfYml0cyhyYXdfdGFnKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShjLCB0bXAsICZoLT5jbXBRLCBsaXN0KSB7CisJCWlmICgoYy0+YnVzYWRkciAmIDB4RkZGRkZGRTApID09ICh0YWcgJiAweEZGRkZGRkUwKSkgeworCQkJZmluaXNoX2NtZChjLCByYXdfdGFnKTsKKwkJCXJldHVybiBuZXh0X2NvbW1hbmQoaCk7CisJCX0KKwl9CisJYmFkX3RhZyhoLCBoLT5ucl9jbWRzICsgMSwgcmF3X3RhZyk7CisJcmV0dXJuIG5leHRfY29tbWFuZChoKTsKK30KKwogc3RhdGljIGlycXJldHVybl90IGRvX2hwc2FfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGN0bHJfaW5mbyAqaCA9IGRldl9pZDsKLQlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlfX3UzMiByYXdfdGFnLCB0YWcsIHRhZ19pbmRleDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wOworCXUzMiByYXdfdGFnOwogCiAJaWYgKGludGVycnVwdF9ub3RfZm9yX3VzKGgpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKLQl3aGlsZSAoaW50ZXJydXB0X3BlbmRpbmcoaCkpIHsKLQkJd2hpbGUgKChyYXdfdGFnID0gZ2V0X25leHRfY29tcGxldGlvbihoKSkgIT0gRklGT19FTVBUWSkgewotCQkJaWYgKGxpa2VseShIUFNBX1RBR19DT05UQUlOU19JTkRFWChyYXdfdGFnKSkpIHsKLQkJCQl0YWdfaW5kZXggPSBIUFNBX1RBR19UT19JTkRFWChyYXdfdGFnKTsKLQkJCQlpZiAoYmFkX3RhZyhoLCB0YWdfaW5kZXgsIHJhd190YWcpKQotCQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JCQkJYyA9IGgtPmNtZF9wb29sICsgdGFnX2luZGV4OwotCQkJCWZpbmlzaF9jbWQoYywgcmF3X3RhZyk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQl0YWcgPSBIUFNBX1RBR19ESVNDQVJEX0VSUk9SX0JJVFMocmF3X3RhZyk7Ci0JCQljID0gTlVMTDsKLQkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsIHRtcCwgJmgtPmNtcFEsIGxpc3QpIHsKLQkJCQlpZiAoYy0+YnVzYWRkciA9PSB0YWcpIHsKLQkJCQkJZmluaXNoX2NtZChjLCByYXdfdGFnKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9CisJcmF3X3RhZyA9IGdldF9uZXh0X2NvbXBsZXRpb24oaCk7CisJd2hpbGUgKHJhd190YWcgIT0gRklGT19FTVBUWSkgeworCQlpZiAoaHBzYV90YWdfY29udGFpbnNfaW5kZXgocmF3X3RhZykpCisJCQlyYXdfdGFnID0gcHJvY2Vzc19pbmRleGVkX2NtZChoLCByYXdfdGFnKTsKKwkJZWxzZQorCQkJcmF3X3RhZyA9IHByb2Nlc3Nfbm9uaW5kZXhlZF9jbWQoaCwgcmF3X3RhZyk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLS8qIFNlbmQgYSBtZXNzYWdlIENEQiB0byB0aGUgZmlybXdhcmUuICovCisvKiBTZW5kIGEgbWVzc2FnZSBDREIgdG8gdGhlIGZpcm13YXJ0LiAqLwogc3RhdGljIF9fZGV2aW5pdCBpbnQgaHBzYV9tZXNzYWdlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBjaGFyIG9wY29kZSwKIAkJCQkJCXVuc2lnbmVkIGNoYXIgdHlwZSkKIHsKQEAgLTI4NDEsNyArMzAyNyw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgSFBTQV9NU0dfU0VORF9SRVRSWV9MSU1JVDsgaSsrKSB7CiAJCXRhZyA9IHJlYWRsKHZhZGRyICsgU0E1X1JFUExZX1BPUlRfT0ZGU0VUKTsKLQkJaWYgKEhQU0FfVEFHX0RJU0NBUkRfRVJST1JfQklUUyh0YWcpID09IHBhZGRyMzIpCisJCWlmIChocHNhX3RhZ19kaXNjYXJkX2Vycm9yX2JpdHModGFnKSA9PSBwYWRkcjMyKQogCQkJYnJlYWs7CiAJCW1zbGVlcChIUFNBX01TR19TRU5EX1JFVFJZX0lOVEVSVkFMX01TRUNTKTsKIAl9CkBAIC0zMDYzLDcgKzMyNDksNyBAQAogICovCiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBocHNhX2ludGVycnVwdF9tb2RlKHN0cnVjdCBjdGxyX2luZm8gKmgsCi0JCQkJCSAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBfX3UzMiBib2FyZF9pZCkKKwkJCQkJICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiBib2FyZF9pZCkKIHsKICNpZmRlZiBDT05GSUdfUENJX01TSQogCWludCBlcnI7CkBAIC0zMTA3LDIyICszMjkzLDIyIEBACiBkZWZhdWx0X2ludF9tb2RlOgogI2VuZGlmCQkJCS8qIENPTkZJR19QQ0lfTVNJICovCiAJLyogaWYgd2UgZ2V0IGhlcmUgd2UncmUgZ29pbmcgdG8gdXNlIHRoZSBkZWZhdWx0IGludGVycnVwdCBtb2RlICovCi0JaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdID0gcGRldi0+aXJxOwotCXJldHVybjsKKwloLT5pbnRyW1BFUkZfTU9ERV9JTlRdID0gcGRldi0+aXJxOwogfQogCiBzdGF0aWMgaW50IGhwc2FfcGNpX2luaXQoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJdXNob3J0IHN1YnN5c3RlbV92ZW5kb3JfaWQsIHN1YnN5c3RlbV9kZXZpY2VfaWQsIGNvbW1hbmQ7Ci0JX191MzIgYm9hcmRfaWQsIHNjcmF0Y2hwYWQgPSAwOwotCV9fdTY0IGNmZ19vZmZzZXQ7Ci0JX191MzIgY2ZnX2Jhc2VfYWRkcjsKLQlfX3U2NCBjZmdfYmFzZV9hZGRyX2luZGV4OworCXUzMiBib2FyZF9pZCwgc2NyYXRjaHBhZCA9IDA7CisJdTY0IGNmZ19vZmZzZXQ7CisJdTMyIGNmZ19iYXNlX2FkZHI7CisJdTY0IGNmZ19iYXNlX2FkZHJfaW5kZXg7CisJdTMyIHRyYW5zX29mZnNldDsKIAlpbnQgaSwgcHJvZF9pbmRleCwgZXJyOwogCiAJc3Vic3lzdGVtX3ZlbmRvcl9pZCA9IHBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CiAJc3Vic3lzdGVtX2RldmljZV9pZCA9IHBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7Ci0JYm9hcmRfaWQgPSAoKChfX3UzMikgKHN1YnN5c3RlbV9kZXZpY2VfaWQgPDwgMTYpICYgMHhmZmZmMDAwMCkgfAorCWJvYXJkX2lkID0gKCgodTMyKSAoc3Vic3lzdGVtX2RldmljZV9pZCA8PCAxNikgJiAweGZmZmYwMDAwKSB8CiAJCSAgICBzdWJzeXN0ZW1fdmVuZG9yX2lkKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb2R1Y3RzKTsgaSsrKQpAQCAtMzE5OSw3ICszMzg1LDcgQEAKIAogCS8qIGdldCB0aGUgYWRkcmVzcyBpbmRleCBudW1iZXIgKi8KIAljZmdfYmFzZV9hZGRyID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfQ1RDRkdfT0ZGU0VUKTsKLQljZmdfYmFzZV9hZGRyICY9IChfX3UzMikgMHgwMDAwZmZmZjsKKwljZmdfYmFzZV9hZGRyICY9ICh1MzIpIDB4MDAwMGZmZmY7CiAJY2ZnX2Jhc2VfYWRkcl9pbmRleCA9IGZpbmRfUENJX0JBUl9pbmRleChwZGV2LCBjZmdfYmFzZV9hZGRyKTsKIAlpZiAoY2ZnX2Jhc2VfYWRkcl9pbmRleCA9PSAtMSkgewogCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiY2Fubm90IGZpbmQgY2ZnX2Jhc2VfYWRkcl9pbmRleFxuIik7CkBAIC0zMjExLDExICszMzk3LDE0IEBACiAJaC0+Y2ZndGFibGUgPSByZW1hcF9wY2lfbWVtKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LAogCQkJICAgICAgIGNmZ19iYXNlX2FkZHJfaW5kZXgpICsgY2ZnX29mZnNldCwKIAkJCQlzaXplb2YoaC0+Y2ZndGFibGUpKTsKKwkvKiBGaW5kIHBlcmZvcm1hbnQgbW9kZSB0YWJsZS4gKi8KKwl0cmFuc19vZmZzZXQgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5UcmFuc01ldGhvZE9mZnNldCkpOworCWgtPnRyYW5zdGFibGUgPSByZW1hcF9wY2lfbWVtKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LAorCQkJCWNmZ19iYXNlX2FkZHJfaW5kZXgpK2NmZ19vZmZzZXQrdHJhbnNfb2Zmc2V0LAorCQkJCXNpemVvZigqaC0+dHJhbnN0YWJsZSkpOworCiAJaC0+Ym9hcmRfaWQgPSBib2FyZF9pZDsKLQotCS8qIFF1ZXJ5IGNvbnRyb2xsZXIgZm9yIG1heCBzdXBwb3J0ZWQgY29tbWFuZHM6ICovCi0JaC0+bWF4X2NvbW1hbmRzID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+Q21kc091dE1heCkpOwotCisJaC0+bWF4X2NvbW1hbmRzID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+TWF4UGVyZm9ybWFudE1vZGVDb21tYW5kcykpOwogCWgtPnByb2R1Y3RfbmFtZSA9IHByb2R1Y3RzW3Byb2RfaW5kZXhdLnByb2R1Y3RfbmFtZTsKIAloLT5hY2Nlc3MgPSAqKHByb2R1Y3RzW3Byb2RfaW5kZXhdLmFjY2Vzcyk7CiAJLyogQWxsb3cgcm9vbSBmb3Igc29tZSBpb2N0bHMgKi8KQEAgLTMyMzIsNyArMzQyMSw3IEBACiAjaWZkZWYgQ09ORklHX1g4NgogCXsKIAkJLyogTmVlZCB0byBlbmFibGUgcHJlZmV0Y2ggaW4gdGhlIFNDU0kgY29yZSBmb3IgNjQwMCBpbiB4ODYgKi8KLQkJX191MzIgcHJlZmV0Y2g7CisJCXUzMiBwcmVmZXRjaDsKIAkJcHJlZmV0Y2ggPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5TQ1NJX1ByZWZldGNoKSk7CiAJCXByZWZldGNoIHw9IDB4MTAwOwogCQl3cml0ZWwocHJlZmV0Y2gsICYoaC0+Y2ZndGFibGUtPlNDU0lfUHJlZmV0Y2gpKTsKQEAgLTMyNDQsNyArMzQzMyw3IEBACiAJICogcGh5c2ljYWwgbWVtb3J5LgogCSAqLwogCWlmIChib2FyZF9pZCA9PSAweDMyMjUxMDNDKSB7Ci0JCV9fdTMyIGRtYV9wcmVmZXRjaDsKKwkJdTMyIGRtYV9wcmVmZXRjaDsKIAkJZG1hX3ByZWZldGNoID0gcmVhZGwoaC0+dmFkZHIgKyBJMk9fRE1BMV9DRkcpOwogCQlkbWFfcHJlZmV0Y2ggfD0gMHg4MDAwOwogCQl3cml0ZWwoZG1hX3ByZWZldGNoLCBoLT52YWRkciArIEkyT19ETUExX0NGRyk7CkBAIC0zMjg2LDEwICszNDc1LDI2IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgX19kZXZpbml0IGhwc2FfaGJhX2lucXVpcnkoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlpbnQgcmM7CisKKyNkZWZpbmUgSEJBX0lOUVVJUllfQllURV9DT1VOVCA2NAorCWgtPmhiYV9pbnF1aXJ5X2RhdGEgPSBrbWFsbG9jKEhCQV9JTlFVSVJZX0JZVEVfQ09VTlQsIEdGUF9LRVJORUwpOworCWlmICghaC0+aGJhX2lucXVpcnlfZGF0YSkKKwkJcmV0dXJuOworCXJjID0gaHBzYV9zY3NpX2RvX2lucXVpcnkoaCwgUkFJRF9DVExSX0xVTklELCAwLAorCQloLT5oYmFfaW5xdWlyeV9kYXRhLCBIQkFfSU5RVUlSWV9CWVRFX0NPVU5UKTsKKwlpZiAocmMgIT0gMCkgeworCQlrZnJlZShoLT5oYmFfaW5xdWlyeV9kYXRhKTsKKwkJaC0+aGJhX2lucXVpcnlfZGF0YSA9IE5VTEw7CisJfQorfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBocHNhX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCWludCBpOworCWludCBpLCByYzsKIAlpbnQgZGFjOwogCXN0cnVjdCBjdGxyX2luZm8gKmg7CiAKQEAgLTMzMTQsMTcgKzM1MTksMjMgQEAKIAkJfQogCX0KIAotCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IENvbW1hbmRMaXN0KSAlIDgpOworCS8qIENvbW1hbmQgc3RydWN0dXJlcyBtdXN0IGJlIGFsaWduZWQgb24gYSAzMi1ieXRlIGJvdW5kYXJ5IGJlY2F1c2UKKwkgKiB0aGUgNSBsb3dlciBiaXRzIG9mIHRoZSBhZGRyZXNzIGFyZSB1c2VkIGJ5IHRoZSBoYXJkd2FyZS4gYW5kIGJ5CisJICogdGhlIGRyaXZlci4gIFNlZSBjb21tZW50cyBpbiBocHNhLmggZm9yIG1vcmUgaW5mby4KKwkgKi8KKyNkZWZpbmUgQ09NTUFORExJU1RfQUxJR05NRU5UIDMyCisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgQ29tbWFuZExpc3QpICUgQ09NTUFORExJU1RfQUxJR05NRU5UKTsKIAloID0ga3phbGxvYyhzaXplb2YoKmgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWgpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAloLT5idXN5X2luaXRpYWxpemluZyA9IDE7CiAJSU5JVF9ITElTVF9IRUFEKCZoLT5jbXBRKTsKIAlJTklUX0hMSVNUX0hFQUQoJmgtPnJlcVEpOwogCW11dGV4X2luaXQoJmgtPmJ1c3lfc2h1dHRpbmdfZG93bik7CiAJaW5pdF9jb21wbGV0aW9uKCZoLT5zY2FuX3dhaXQpOwotCWlmIChocHNhX3BjaV9pbml0KGgsIHBkZXYpICE9IDApCisJcmMgPSBocHNhX3BjaV9pbml0KGgsIHBkZXYpOworCWlmIChyYyAhPSAwKQogCQlnb3RvIGNsZWFuMTsKIAogCXNwcmludGYoaC0+ZGV2bmFtZSwgImhwc2ElZCIsIG51bWJlcl9vZl9jb250cm9sbGVycyk7CkBAIC0zMzMzLDI3ICszNTQ0LDMyIEBACiAJaC0+cGRldiA9IHBkZXY7CiAKIAkvKiBjb25maWd1cmUgUENJIERNQSBzdHVmZiAqLwotCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSkKKwlyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSk7CisJaWYgKHJjID09IDApIHsKIAkJZGFjID0gMTsKLQllbHNlIGlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkKLQkJZGFjID0gMDsKLQllbHNlIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZVxuIik7Ci0JCWdvdG8gY2xlYW4xOworCX0gZWxzZSB7CisJCXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCWRhYyA9IDA7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlXG4iKTsKKwkJCWdvdG8gY2xlYW4xOworCQl9CiAJfQogCiAJLyogbWFrZSBzdXJlIHRoZSBib2FyZCBpbnRlcnJ1cHRzIGFyZSBvZmYgKi8KIAloLT5hY2Nlc3Muc2V0X2ludHJfbWFzayhoLCBIUFNBX0lOVFJfT0ZGKTsKLQlpZiAocmVxdWVzdF9pcnEoaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdLCBkb19ocHNhX2ludHIsCi0JCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsIGgtPmRldm5hbWUsIGgpKSB7CisJcmMgPSByZXF1ZXN0X2lycShoLT5pbnRyW1BFUkZfTU9ERV9JTlRdLCBkb19ocHNhX2ludHIsCisJCQlJUlFGX0RJU0FCTEVELCBoLT5kZXZuYW1lLCBoKTsKKwlpZiAocmMpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBpcnEgJWQgZm9yICVzXG4iLAotCQkgICAgICAgaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdLCBoLT5kZXZuYW1lKTsKKwkJICAgICAgIGgtPmludHJbUEVSRl9NT0RFX0lOVF0sIGgtPmRldm5hbWUpOwogCQlnb3RvIGNsZWFuMjsKIAl9CiAKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXM6IDwweCV4PiBhdCBQQ0kgJXMgSVJRICVkJXMgdXNpbmcgREFDXG4iLAotCSAgICAgICBoLT5kZXZuYW1lLCBwZGV2LT5kZXZpY2UsIHBjaV9uYW1lKHBkZXYpLAotCSAgICAgICBoLT5pbnRyW1NJTVBMRV9NT0RFX0lOVF0sIGRhYyA/ICIiIDogIiBub3QiKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXM6IDwweCV4PiBhdCBJUlEgJWQlcyB1c2luZyBEQUNcbiIsCisJICAgICAgIGgtPmRldm5hbWUsIHBkZXYtPmRldmljZSwKKwkgICAgICAgaC0+aW50cltQRVJGX01PREVfSU5UXSwgZGFjID8gIiIgOiAiIG5vdCIpOwogCiAJaC0+Y21kX3Bvb2xfYml0cyA9CiAJICAgIGttYWxsb2MoKChoLT5ucl9jbWRzICsgQklUU19QRVJfTE9ORyAtCkBAIC0zMzY4LDkgKzM1ODQsMTMgQEAKIAkgICAgfHwgKGgtPmNtZF9wb29sID09IE5VTEwpCiAJICAgIHx8IChoLT5lcnJpbmZvX3Bvb2wgPT0gTlVMTCkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeSIpOworCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gY2xlYW40OwogCX0KIAlzcGluX2xvY2tfaW5pdCgmaC0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmgtPnNjYW5fbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaC0+c2Nhbl93YWl0X3F1ZXVlKTsKKwloLT5zY2FuX2ZpbmlzaGVkID0gMTsgLyogbm8gc2NhbiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKi8KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBoKTsKIAltZW1zZXQoaC0+Y21kX3Bvb2xfYml0cywgMCwKQEAgLTMzODIsNiArMzYwMiw4IEBACiAJLyogVHVybiB0aGUgaW50ZXJydXB0cyBvbiBzbyB3ZSBjYW4gc2VydmljZSByZXF1ZXN0cyAqLwogCWgtPmFjY2Vzcy5zZXRfaW50cl9tYXNrKGgsIEhQU0FfSU5UUl9PTik7CiAKKwlocHNhX3B1dF9jdGxyX2ludG9fcGVyZm9ybWFudF9tb2RlKGgpOworCWhwc2FfaGJhX2lucXVpcnkoaCk7CiAJaHBzYV9yZWdpc3Rlcl9zY3NpKGgpOwkvKiBob29rIG91cnNlbHZlcyBpbnRvIFNDU0kgc3Vic3lzdGVtICovCiAJaC0+YnVzeV9pbml0aWFsaXppbmcgPSAwOwogCXJldHVybiAxOwpAQCAtMzM5NywxMiArMzYxOSwxMiBAQAogCQkJICAgIGgtPm5yX2NtZHMgKiBzaXplb2Yoc3RydWN0IEVycm9ySW5mbyksCiAJCQkgICAgaC0+ZXJyaW5mb19wb29sLAogCQkJICAgIGgtPmVycmluZm9fcG9vbF9kaGFuZGxlKTsKLQlmcmVlX2lycShoLT5pbnRyW1NJTVBMRV9NT0RFX0lOVF0sIGgpOworCWZyZWVfaXJxKGgtPmludHJbUEVSRl9NT0RFX0lOVF0sIGgpOwogY2xlYW4yOgogY2xlYW4xOgogCWgtPmJ1c3lfaW5pdGlhbGl6aW5nID0gMDsKIAlrZnJlZShoKTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBocHNhX2ZsdXNoX2NhY2hlKHN0cnVjdCBjdGxyX2luZm8gKmgpCkBAIC0zNDQxLDcgKzM2NjMsNyBAQAogCSAqLwogCWhwc2FfZmx1c2hfY2FjaGUoaCk7CiAJaC0+YWNjZXNzLnNldF9pbnRyX21hc2soaCwgSFBTQV9JTlRSX09GRik7Ci0JZnJlZV9pcnEoaC0+aW50clsyXSwgaCk7CisJZnJlZV9pcnEoaC0+aW50cltQRVJGX01PREVfSU5UXSwgaCk7CiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAlpZiAoaC0+bXNpeF92ZWN0b3IpCiAJCXBjaV9kaXNhYmxlX21zaXgoaC0+cGRldik7CkBAIC0zNDcwLDcgKzM2OTIsMTEgQEAKIAlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsCiAJCWgtPm5yX2NtZHMgKiBzaXplb2Yoc3RydWN0IEVycm9ySW5mbyksCiAJCWgtPmVycmluZm9fcG9vbCwgaC0+ZXJyaW5mb19wb29sX2RoYW5kbGUpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwgaC0+cmVwbHlfcG9vbF9zaXplLAorCQloLT5yZXBseV9wb29sLCBoLT5yZXBseV9wb29sX2RoYW5kbGUpOwogCWtmcmVlKGgtPmNtZF9wb29sX2JpdHMpOworCWtmcmVlKGgtPmJsb2NrRmV0Y2hUYWJsZSk7CisJa2ZyZWUoaC0+aGJhX2lucXVpcnlfZGF0YSk7CiAJLyoKIAkgKiBEZWxpYmVyYXRlbHkgb21pdCBwY2lfZGlzYWJsZV9kZXZpY2UoKTogaXQgZG9lcyBzb21ldGhpbmcgbmFzdHkgdG8KIAkgKiBTbWFydCBBcnJheSBjb250cm9sbGVycyB0aGF0IHBjaV9lbmFibGVfZGV2aWNlIGRvZXMgbm90IHVuZG8KQEAgLTM1MDIsNiArMzcyOCwxMjkgQEAKIAkucmVzdW1lID0gaHBzYV9yZXN1bWUsCiB9OwogCisvKiBGaWxsIGluIGJ1Y2tldF9tYXBbXSwgZ2l2ZW4gbnNncyAodGhlIG1heCBudW1iZXIgb2YKKyAqIHNjYXR0ZXIgZ2F0aGVyIGVsZW1lbnRzIHN1cHBvcnRlZCkgYW5kIGJ1Y2tldFtdLAorICogd2hpY2ggaXMgYW4gYXJyYXkgb2YgOCBpbnRlZ2Vycy4gIFRoZSBidWNrZXRbXSBhcnJheQorICogY29udGFpbnMgOCBkaWZmZXJlbnQgRE1BIHRyYW5zZmVyIHNpemVzIChpbiAxNgorICogYnl0ZSBpbmNyZW1lbnRzKSB3aGljaCB0aGUgY29udHJvbGxlciB1c2VzIHRvIGZldGNoCisgKiBjb21tYW5kcy4gIFRoaXMgZnVuY3Rpb24gZmlsbHMgaW4gYnVja2V0X21hcFtdLCB3aGljaAorICogbWFwcyBhIGdpdmVuIG51bWJlciBvZiBzY2F0dGVyIGdhdGhlciBlbGVtZW50cyB0byBvbmUgb2YKKyAqIHRoZSA4IERNQSB0cmFuc2ZlciBzaXplcy4gIFRoZSBwb2ludCBvZiBpdCBpcyB0byBhbGxvdyB0aGUKKyAqIGNvbnRyb2xsZXIgdG8gb25seSBkbyBhcyBtdWNoIERNQSBhcyBuZWVkZWQgdG8gZmV0Y2ggdGhlCisgKiBjb21tYW5kLCB3aXRoIHRoZSBETUEgdHJhbnNmZXIgc2l6ZSBlbmNvZGVkIGluIHRoZSBsb3dlcgorICogYml0cyBvZiB0aGUgY29tbWFuZCBhZGRyZXNzLgorICovCitzdGF0aWMgdm9pZCAgY2FsY19idWNrZXRfbWFwKGludCBidWNrZXRbXSwgaW50IG51bV9idWNrZXRzLAorCWludCBuc2dzLCBpbnQgKmJ1Y2tldF9tYXApCit7CisJaW50IGksIGosIGIsIHNpemU7CisKKwkvKiBldmVuIGEgY29tbWFuZCB3aXRoIDAgU0dzIHJlcXVpcmVzIDQgYmxvY2tzICovCisjZGVmaW5lIE1JTklNVU1fVFJBTlNGRVJfQkxPQ0tTIDQKKyNkZWZpbmUgTlVNX0JVQ0tFVFMgOAorCS8qIE5vdGUsIGJ1Y2tldF9tYXAgbXVzdCBoYXZlIG5zZ3MrMSBlbnRyaWVzLiAqLworCWZvciAoaSA9IDA7IGkgPD0gbnNnczsgaSsrKSB7CisJCS8qIENvbXB1dGUgc2l6ZSBvZiBhIGNvbW1hbmQgd2l0aCBpIFNHIGVudHJpZXMgKi8KKwkJc2l6ZSA9IGkgKyBNSU5JTVVNX1RSQU5TRkVSX0JMT0NLUzsKKwkJYiA9IG51bV9idWNrZXRzOyAvKiBBc3N1bWUgdGhlIGJpZ2dlc3QgYnVja2V0ICovCisJCS8qIEZpbmQgdGhlIGJ1Y2tldCB0aGF0IGlzIGp1c3QgYmlnIGVub3VnaCAqLworCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisJCQlpZiAoYnVja2V0W2pdID49IHNpemUpIHsKKwkJCQliID0gajsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkvKiBmb3IgYSBjb21tYW5kIHdpdGggaSBTRyBlbnRyaWVzLCB1c2UgYnVja2V0IGIuICovCisJCWJ1Y2tldF9tYXBbaV0gPSBiOworCX0KK30KKworc3RhdGljIHZvaWQgaHBzYV9wdXRfY3Rscl9pbnRvX3BlcmZvcm1hbnRfbW9kZShzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCXUzMiB0cmFuc19zdXBwb3J0OworCXU2NCB0cmFuc19vZmZzZXQ7CisJLyogIDUgPSAxIHMvZyBlbnRyeSBvciA0aworCSAqICA2ID0gMiBzL2cgZW50cnkgb3IgOGsKKwkgKiAgOCA9IDQgcy9nIGVudHJ5IG9yIDE2aworCSAqIDEwID0gNiBzL2cgZW50cnkgb3IgMjRrCisJICovCisJaW50IGJmdFs4XSA9IHs1LCA2LCA4LCAxMCwgMTIsIDIwLCAyOCwgMzV9OyAvKiBmb3Igc2NhdHRlci9nYXRoZXJzICovCisJaW50IGkgPSAwOworCWludCBsID0gMDsKKwl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyX3ZhbHVlOworCisJdHJhbnNfc3VwcG9ydCA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPlRyYW5zcG9ydFN1cHBvcnQpKTsKKwlpZiAoISh0cmFuc19zdXBwb3J0ICYgUEVSRk9STUFOVF9NT0RFKSkKKwkJcmV0dXJuOworCisJaC0+bWF4X2NvbW1hbmRzID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+TWF4UGVyZm9ybWFudE1vZGVDb21tYW5kcykpOworCWgtPm1heF9zZ19lbnRyaWVzID0gMzI7CisJLyogUGVyZm9ybWFudCBtb2RlIHJpbmcgYnVmZmVyIGFuZCBzdXBwb3J0aW5nIGRhdGEgc3RydWN0dXJlcyAqLworCWgtPnJlcGx5X3Bvb2xfc2l6ZSA9IGgtPm1heF9jb21tYW5kcyAqIHNpemVvZih1NjQpOworCWgtPnJlcGx5X3Bvb2wgPSBwY2lfYWxsb2NfY29uc2lzdGVudChoLT5wZGV2LCBoLT5yZXBseV9wb29sX3NpemUsCisJCQkJJihoLT5yZXBseV9wb29sX2RoYW5kbGUpKTsKKworCS8qIE5lZWQgYSBibG9jayBmZXRjaCB0YWJsZSBmb3IgcGVyZm9ybWFudCBtb2RlICovCisJaC0+YmxvY2tGZXRjaFRhYmxlID0ga21hbGxvYygoKGgtPm1heF9zZ19lbnRyaWVzKzEpICoKKwkJCQlzaXplb2YodTMyKSksIEdGUF9LRVJORUwpOworCisJaWYgKChoLT5yZXBseV9wb29sID09IE5VTEwpCisJCXx8IChoLT5ibG9ja0ZldGNoVGFibGUgPT0gTlVMTCkpCisJCWdvdG8gY2xlYW5fdXA7CisKKwloLT5yZXBseV9wb29sX3dyYXBhcm91bmQgPSAxOyAvKiBzcGVjOiBpbml0IHRvIDEgKi8KKworCS8qIENvbnRyb2xsZXIgc3BlYzogemVybyBvdXQgdGhpcyBidWZmZXIuICovCisJbWVtc2V0KGgtPnJlcGx5X3Bvb2wsIDAsIGgtPnJlcGx5X3Bvb2xfc2l6ZSk7CisJaC0+cmVwbHlfcG9vbF9oZWFkID0gaC0+cmVwbHlfcG9vbDsKKworCXRyYW5zX29mZnNldCA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPlRyYW5zTWV0aG9kT2Zmc2V0KSk7CisJYmZ0WzddID0gaC0+bWF4X3NnX2VudHJpZXMgKyA0OworCWNhbGNfYnVja2V0X21hcChiZnQsIEFSUkFZX1NJWkUoYmZ0KSwgMzIsIGgtPmJsb2NrRmV0Y2hUYWJsZSk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJd3JpdGVsKGJmdFtpXSwgJmgtPnRyYW5zdGFibGUtPkJsb2NrRmV0Y2hbaV0pOworCisJLyogc2l6ZSBvZiBjb250cm9sbGVyIHJpbmcgYnVmZmVyICovCisJd3JpdGVsKGgtPm1heF9jb21tYW5kcywgJmgtPnRyYW5zdGFibGUtPlJlcFFTaXplKTsKKwl3cml0ZWwoMSwgJmgtPnRyYW5zdGFibGUtPlJlcFFDb3VudCk7CisJd3JpdGVsKDAsICZoLT50cmFuc3RhYmxlLT5SZXBRQ3RyQWRkckxvdzMyKTsKKwl3cml0ZWwoMCwgJmgtPnRyYW5zdGFibGUtPlJlcFFDdHJBZGRySGlnaDMyKTsKKwl3cml0ZWwoaC0+cmVwbHlfcG9vbF9kaGFuZGxlLCAmaC0+dHJhbnN0YWJsZS0+UmVwUUFkZHIwTG93MzIpOworCXdyaXRlbCgwLCAmaC0+dHJhbnN0YWJsZS0+UmVwUUFkZHIwSGlnaDMyKTsKKwl3cml0ZWwoQ0ZHVEJMX1RyYW5zX1BlcmZvcm1hbnQsCisJCSYoaC0+Y2ZndGFibGUtPkhvc3RXcml0ZS5UcmFuc3BvcnRSZXF1ZXN0KSk7CisJd3JpdGVsKENGR1RCTF9DaGFuZ2VSZXEsIGgtPnZhZGRyICsgU0E1X0RPT1JCRUxMKTsKKwkvKiB1bmRlciBjZXJ0YWluIHZlcnkgcmFyZSBjb25kaXRpb25zLCB0aGlzIGNhbiB0YWtlIGF3aGlsZS4KKwkgKiAoZS5nLjogaG90IHJlcGxhY2UgYSBmYWlsZWQgMTQ0R0IgZHJpdmUgaW4gYSBSQUlEIDUgc2V0IHJpZ2h0CisJICogYXMgd2UgZW50ZXIgdGhpcyBjb2RlLikgKi8KKwlmb3IgKGwgPSAwOyBsIDwgTUFYX0NPTkZJR19XQUlUOyBsKyspIHsKKwkJcmVnaXN0ZXJfdmFsdWUgPSByZWFkbChoLT52YWRkciArIFNBNV9ET09SQkVMTCk7CisJCWlmICghKHJlZ2lzdGVyX3ZhbHVlICYgQ0ZHVEJMX0NoYW5nZVJlcSkpCisJCQlicmVhazsKKwkJLyogZGVsYXkgYW5kIHRyeSBhZ2FpbiAqLworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KDEwKTsKKwl9CisJcmVnaXN0ZXJfdmFsdWUgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5UcmFuc3BvcnRBY3RpdmUpKTsKKwlpZiAoIShyZWdpc3Rlcl92YWx1ZSAmIENGR1RCTF9UcmFuc19QZXJmb3JtYW50KSkgeworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBib2FyZCBpbnRvIgorCQkJCQkiIHBlcmZvcm1hbnQgbW9kZVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBDaGFuZ2UgdGhlIGFjY2VzcyBtZXRob2RzIHRvIHRoZSBwZXJmb3JtYW50IGFjY2VzcyBtZXRob2RzICovCisJaC0+YWNjZXNzID0gU0E1X3BlcmZvcm1hbnRfYWNjZXNzOworCWgtPnRyYW5zTWV0aG9kID0gQ0ZHVEJMX1RyYW5zX1BlcmZvcm1hbnQ7CisKKwlyZXR1cm47CisKK2NsZWFuX3VwOgorCWlmIChoLT5yZXBseV9wb29sKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsIGgtPnJlcGx5X3Bvb2xfc2l6ZSwKKwkJCWgtPnJlcGx5X3Bvb2wsIGgtPnJlcGx5X3Bvb2xfZGhhbmRsZSk7CisJa2ZyZWUoaC0+YmxvY2tGZXRjaFRhYmxlKTsKK30KKwogLyoKICAqICBUaGlzIGlzIGl0LiAgUmVnaXN0ZXIgdGhlIFBDSSBkcml2ZXIgaW5mb3JtYXRpb24gZm9yIHRoZSBjYXJkcyB3ZSBjb250cm9sCiAgKiAgdGhlIE9TIHdpbGwgY2FsbCBvdXIgcmVnaXN0ZXJlZCByb3V0aW5lcyB3aGVuIGl0IGZpbmRzIG9uZSBvZiBvdXIgY2FyZHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHBzYS5oIGIvZHJpdmVycy9zY3NpL2hwc2EuaAppbmRleCA2YmQxOTQ5Li5hMDUwMmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHBzYS5oCisrKyBiL2RyaXZlcnMvc2NzaS9ocHNhLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAkJc3RydWN0IENvbW1hbmRMaXN0ICpjKTsKIAl2b2lkICgqc2V0X2ludHJfbWFzaykoc3RydWN0IGN0bHJfaW5mbyAqaCwgdW5zaWduZWQgbG9uZyB2YWwpOwogCXVuc2lnbmVkIGxvbmcgKCpmaWZvX2Z1bGwpKHN0cnVjdCBjdGxyX2luZm8gKmgpOwotCXVuc2lnbmVkIGxvbmcgKCppbnRyX3BlbmRpbmcpKHN0cnVjdCBjdGxyX2luZm8gKmgpOworCWJvb2wgKCppbnRyX3BlbmRpbmcpKHN0cnVjdCBjdGxyX2luZm8gKmgpOwogCXVuc2lnbmVkIGxvbmcgKCpjb21tYW5kX2NvbXBsZXRlZCkoc3RydWN0IGN0bHJfaW5mbyAqaCk7CiB9OwogCkBAIC01NSwxOSArNTUsMjAgQEAKIAljaGFyICAgICpwcm9kdWN0X25hbWU7CiAJY2hhcglmaXJtX3Zlcls0XTsgLyogRmlybXdhcmUgdmVyc2lvbiAqLwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCV9fdTMyCWJvYXJkX2lkOworCXUzMglib2FyZF9pZDsKIAl2b2lkIF9faW9tZW0gKnZhZGRyOwogCXVuc2lnbmVkIGxvbmcgcGFkZHI7CiAJaW50IAlucl9jbWRzOyAvKiBOdW1iZXIgb2YgY29tbWFuZHMgYWxsb3dlZCBvbiB0aGlzIGNvbnRyb2xsZXIgKi8KIAlzdHJ1Y3QgQ2ZnVGFibGUgX19pb21lbSAqY2ZndGFibGU7CisJaW50ICAgICBtYXhfc2dfZW50cmllczsKIAlpbnQJaW50ZXJydXB0c19lbmFibGVkOwogCWludAltYWpvcjsKIAlpbnQgCW1heF9jb21tYW5kczsKIAlpbnQJY29tbWFuZHNfb3V0c3RhbmRpbmc7CiAJaW50IAltYXhfb3V0c3RhbmRpbmc7IC8qIERlYnVnICovCiAJaW50CXVzYWdlX2NvdW50OyAgLyogbnVtYmVyIG9mIG9wZW5zIGFsbCBhbGwgbWlub3IgZGV2aWNlcyAqLwotIwlkZWZpbmUgRE9PUkJFTExfSU5UCTAKLSMJZGVmaW5lIFBFUkZfTU9ERV9JTlQJMQorIwlkZWZpbmUgUEVSRl9NT0RFX0lOVAkwCisjCWRlZmluZSBET09SQkVMTF9JTlQJMQogIwlkZWZpbmUgU0lNUExFX01PREVfSU5UCTIKICMJZGVmaW5lIE1FTVFfTU9ERV9JTlQJMwogCXVuc2lnbmVkIGludCBpbnRyWzRdOwpAQCAtOTMsNiArOTQsOSBAQAogCWludAkJCW5yX2ZyZWVzOwogCWludAkJCWJ1c3lfaW5pdGlhbGl6aW5nOwogCWludAkJCWJ1c3lfc2Nhbm5pbmc7CisJaW50CQkJc2Nhbl9maW5pc2hlZDsKKwlzcGlubG9ja190CQlzY2FuX2xvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QJc2Nhbl93YWl0X3F1ZXVlOwogCXN0cnVjdCBtdXRleAkJYnVzeV9zaHV0dGluZ19kb3duOwogCXN0cnVjdCBsaXN0X2hlYWQJc2Nhbl9saXN0OwogCXN0cnVjdCBjb21wbGV0aW9uCXNjYW5fd2FpdDsKQEAgLTEwMiw2ICsxMDYsMjQgQEAKIAlpbnQgbmRldmljZXM7IC8qIG51bWJlciBvZiB1c2VkIGVsZW1lbnRzIGluIC5kZXZbXSBhcnJheS4gKi8KICNkZWZpbmUgSFBTQV9NQVhfU0NTSV9ERVZTX1BFUl9IQkEgMjU2CiAJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqZGV2W0hQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBXTsKKwkvKgorCSAqIFBlcmZvcm1hbnQgbW9kZSB0YWJsZXMuCisJICovCisJdTMyIHRyYW5zX3N1cHBvcnQ7CisJdTMyIHRyYW5zX29mZnNldDsKKwlzdHJ1Y3QgVHJhbnNUYWJsZV9zdHJ1Y3QgKnRyYW5zdGFibGU7CisJdW5zaWduZWQgbG9uZyB0cmFuc01ldGhvZDsKKworCS8qCisJICogUGVyZm9ybWFudCBtb2RlIGNvbXBsZXRpb24gYnVmZmVyCisJICovCisJdTY0ICpyZXBseV9wb29sOworCWRtYV9hZGRyX3QgcmVwbHlfcG9vbF9kaGFuZGxlOworCXU2NCAqcmVwbHlfcG9vbF9oZWFkOworCXNpemVfdCByZXBseV9wb29sX3NpemU7CisJdW5zaWduZWQgY2hhciByZXBseV9wb29sX3dyYXBhcm91bmQ7CisJdTMyICpibG9ja0ZldGNoVGFibGU7CisJdW5zaWduZWQgY2hhciAqaGJhX2lucXVpcnlfZGF0YTsKIH07CiAjZGVmaW5lIEhQU0FfQUJPUlRfTVNHIDAKICNkZWZpbmUgSFBTQV9ERVZJQ0VfUkVTRVRfTVNHIDEKQEAgLTE2NCw5ICsxODYsMTYgQEAKICNkZWZpbmUgSFBTQV9GSVJNV0FSRV9SRUFEWQkweGZmZmYwMDAwIC8qIHZhbHVlIGluIHNjcmF0Y2hwYWQgcmVnaXN0ZXIgKi8KIAogI2RlZmluZSBIUFNBX0VSUk9SX0JJVAkJMHgwMgotI2RlZmluZSBIUFNBX1RBR19DT05UQUlOU19JTkRFWCh0YWcpICgodGFnKSAmIDB4MDQpCi0jZGVmaW5lIEhQU0FfVEFHX1RPX0lOREVYKHRhZykgKCh0YWcpID4+IDMpCi0jZGVmaW5lIEhQU0FfVEFHX0RJU0NBUkRfRVJST1JfQklUUyh0YWcpICgodGFnKSAmIH4zKQorCisvKiBQZXJmb3JtYW50IG1vZGUgZmxhZ3MgKi8KKyNkZWZpbmUgU0E1X1BFUkZfSU5UUl9QRU5ESU5HICAgMHgwNAorI2RlZmluZSBTQTVfUEVSRl9JTlRSX09GRiAgICAgICAweDA1CisjZGVmaW5lIFNBNV9PVVREQl9TVEFUVVNfUEVSRl9CSVQgICAgICAgMHgwMQorI2RlZmluZSBTQTVfT1VUREJfQ0xFQVJfUEVSRl9CSVQgICAgICAgIDB4MDEKKyNkZWZpbmUgU0E1X09VVERCX0NMRUFSICAgICAgICAgMHhBMAorI2RlZmluZSBTQTVfT1VUREJfQ0xFQVJfUEVSRl9CSVQgICAgICAgIDB4MDEKKyNkZWZpbmUgU0E1X09VVERCX1NUQVRVUyAgICAgICAgMHg5QworCiAKICNkZWZpbmUgSFBTQV9JTlRSX09OIAkxCiAjZGVmaW5lIEhQU0FfSU5UUl9PRkYJMApAQCAtMTc2LDEwICsyMDUsOCBAQAogc3RhdGljIHZvaWQgU0E1X3N1Ym1pdF9jb21tYW5kKHN0cnVjdCBjdGxyX2luZm8gKmgsCiAJc3RydWN0IENvbW1hbmRMaXN0ICpjKQogewotI2lmZGVmIEhQU0FfREVCVUcKLQkgcHJpbnRrKEtFUk5fV0FSTklORyAiaHBzYTogU2VuZGluZyAleCAtIGRvd24gdG8gY29udHJvbGxlclxuIiwKLQkJYy0+YnVzYWRkcik7Ci0jZW5kaWYgLyogSFBTQV9ERUJVRyAqLworCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgIlNlbmRpbmcgJXgsIHRhZyA9ICV4XG4iLCBjLT5idXNhZGRyLAorCQljLT5IZWFkZXIuVGFnLmxvd2VyKTsKIAl3cml0ZWwoYy0+YnVzYWRkciwgaC0+dmFkZHIgKyBTQTVfUkVRVUVTVF9QT1JUX09GRlNFVCk7CiAJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmcrKzsKIAlpZiAoaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmcgPiBoLT5tYXhfb3V0c3RhbmRpbmcpCkBAIC0yMDIsNiArMjI5LDUyIEBACiAJCQloLT52YWRkciArIFNBNV9SRVBMWV9JTlRSX01BU0tfT0ZGU0VUKTsKIAl9CiB9CisKK3N0YXRpYyB2b2lkIFNBNV9wZXJmb3JtYW50X2ludHJfbWFzayhzdHJ1Y3QgY3Rscl9pbmZvICpoLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlpZiAodmFsKSB7IC8qIHR1cm4gb24gaW50ZXJydXB0cyAqLworCQloLT5pbnRlcnJ1cHRzX2VuYWJsZWQgPSAxOworCQl3cml0ZWwoMCwgaC0+dmFkZHIgKyBTQTVfUkVQTFlfSU5UUl9NQVNLX09GRlNFVCk7CisJfSBlbHNlIHsKKwkJaC0+aW50ZXJydXB0c19lbmFibGVkID0gMDsKKwkJd3JpdGVsKFNBNV9QRVJGX0lOVFJfT0ZGLAorCQkJaC0+dmFkZHIgKyBTQTVfUkVQTFlfSU5UUl9NQVNLX09GRlNFVCk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBTQTVfcGVyZm9ybWFudF9jb21wbGV0ZWQoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyX3ZhbHVlID0gRklGT19FTVBUWTsKKworCS8qIGZsdXNoIHRoZSBjb250cm9sbGVyIHdyaXRlIG9mIHRoZSByZXBseSBxdWV1ZSBieSByZWFkaW5nCisJICogb3V0Ym91bmQgZG9vcmJlbGwgc3RhdHVzIHJlZ2lzdGVyLgorCSAqLworCXJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfT1VUREJfU1RBVFVTKTsKKwkvKiBtc2kgYXV0byBjbGVhcnMgdGhlIGludGVycnVwdCBwZW5kaW5nIGJpdC4gKi8KKwlpZiAoIShoLT5tc2lfdmVjdG9yIHx8IGgtPm1zaXhfdmVjdG9yKSkgeworCQl3cml0ZWwoU0E1X09VVERCX0NMRUFSX1BFUkZfQklULCBoLT52YWRkciArIFNBNV9PVVREQl9DTEVBUik7CisJCS8qIERvIGEgcmVhZCBpbiBvcmRlciB0byBmbHVzaCB0aGUgd3JpdGUgdG8gdGhlIGNvbnRyb2xsZXIKKwkJICogKGFzIHBlciBzcGVjLikKKwkJICovCisJCXJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfT1VUREJfU1RBVFVTKTsKKwl9CisKKwlpZiAoKCooaC0+cmVwbHlfcG9vbF9oZWFkKSAmIDEpID09IChoLT5yZXBseV9wb29sX3dyYXBhcm91bmQpKSB7CisJCXJlZ2lzdGVyX3ZhbHVlID0gKihoLT5yZXBseV9wb29sX2hlYWQpOworCQkoaC0+cmVwbHlfcG9vbF9oZWFkKSsrOworCQloLT5jb21tYW5kc19vdXRzdGFuZGluZy0tOworCX0gZWxzZSB7CisJCXJlZ2lzdGVyX3ZhbHVlID0gRklGT19FTVBUWTsKKwl9CisJLyogQ2hlY2sgZm9yIHdyYXBhcm91bmQgKi8KKwlpZiAoaC0+cmVwbHlfcG9vbF9oZWFkID09IChoLT5yZXBseV9wb29sICsgaC0+bWF4X2NvbW1hbmRzKSkgeworCQloLT5yZXBseV9wb29sX2hlYWQgPSBoLT5yZXBseV9wb29sOworCQloLT5yZXBseV9wb29sX3dyYXBhcm91bmQgXj0gMTsKKwl9CisKKwlyZXR1cm4gcmVnaXN0ZXJfdmFsdWU7Cit9CisKIC8qCiAgKiAgUmV0dXJucyB0cnVlIGlmIGZpZm8gaXMgZnVsbC4KICAqCkBAIC0yMjgsMTAgKzMwMSwxMCBAQAogCiAjaWZkZWYgSFBTQV9ERUJVRwogCWlmIChyZWdpc3Rlcl92YWx1ZSAhPSBGSUZPX0VNUFRZKQotCQlwcmludGsoS0VSTl9JTkZPICJocHNhOiAgUmVhZCAlbHggYmFjayBmcm9tIGJvYXJkXG4iLAorCQlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICJSZWFkICVseCBiYWNrIGZyb20gYm9hcmRcbiIsCiAJCQlyZWdpc3Rlcl92YWx1ZSk7CiAJZWxzZQotCQlwcmludGsoS0VSTl9JTkZPICJocHNhOiAgRklGTyBFbXB0eSByZWFkXG4iKTsKKwkJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAiaHBzYTogRklGTyBFbXB0eSByZWFkXG4iKTsKICNlbmRpZgogCiAJcmV0dXJuIHJlZ2lzdGVyX3ZhbHVlOwpAQCAtMjM5LDE4ICszMTIsMjggQEAKIC8qCiAgKglSZXR1cm5zIHRydWUgaWYgYW4gaW50ZXJydXB0IGlzIHBlbmRpbmcuLgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBTQTVfaW50cl9wZW5kaW5nKHN0cnVjdCBjdGxyX2luZm8gKmgpCitzdGF0aWMgYm9vbCBTQTVfaW50cl9wZW5kaW5nKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZSAgPQogCQlyZWFkbChoLT52YWRkciArIFNBNV9JTlRSX1NUQVRVUyk7Ci0jaWZkZWYgSFBTQV9ERUJVRwotCXByaW50ayhLRVJOX0lORk8gImhwc2E6IGludHJfcGVuZGluZyAlbHhcbiIsIHJlZ2lzdGVyX3ZhbHVlKTsKLSNlbmRpZiAgLyogSFBTQV9ERUJVRyAqLwotCWlmIChyZWdpc3Rlcl92YWx1ZSAmICBTQTVfSU5UUl9QRU5ESU5HKQotCQlyZXR1cm4gIDE7Ci0JcmV0dXJuIDAgOworCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgImludHJfcGVuZGluZyAlbHhcbiIsIHJlZ2lzdGVyX3ZhbHVlKTsKKwlyZXR1cm4gcmVnaXN0ZXJfdmFsdWUgJiBTQTVfSU5UUl9QRU5ESU5HOwogfQogCitzdGF0aWMgYm9vbCBTQTVfcGVyZm9ybWFudF9pbnRyX3BlbmRpbmcoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfSU5UUl9TVEFUVVMpOworCisJaWYgKCFyZWdpc3Rlcl92YWx1ZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGgtPm1zaV92ZWN0b3IgfHwgaC0+bXNpeF92ZWN0b3IpCisJCXJldHVybiB0cnVlOworCisJLyogUmVhZCBvdXRib3VuZCBkb29yYmVsbCB0byBmbHVzaCAqLworCXJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfT1VUREJfU1RBVFVTKTsKKwlyZXR1cm4gcmVnaXN0ZXJfdmFsdWUgJiBTQTVfT1VUREJfU1RBVFVTX1BFUkZfQklUOworfQogCiBzdGF0aWMgc3RydWN0IGFjY2Vzc19tZXRob2QgU0E1X2FjY2VzcyA9IHsKIAlTQTVfc3VibWl0X2NvbW1hbmQsCkBAIC0yNjAsMTQgKzM0MywxOSBAQAogCVNBNV9jb21wbGV0ZWQsCiB9OwogCitzdGF0aWMgc3RydWN0IGFjY2Vzc19tZXRob2QgU0E1X3BlcmZvcm1hbnRfYWNjZXNzID0geworCVNBNV9zdWJtaXRfY29tbWFuZCwKKwlTQTVfcGVyZm9ybWFudF9pbnRyX21hc2ssCisJU0E1X2ZpZm9fZnVsbCwKKwlTQTVfcGVyZm9ybWFudF9pbnRyX3BlbmRpbmcsCisJU0E1X3BlcmZvcm1hbnRfY29tcGxldGVkLAorfTsKKwogc3RydWN0IGJvYXJkX3R5cGUgewotCV9fdTMyCWJvYXJkX2lkOworCXUzMglib2FyZF9pZDsKIAljaGFyCSpwcm9kdWN0X25hbWU7CiAJc3RydWN0IGFjY2Vzc19tZXRob2QgKmFjY2VzczsKIH07CiAKLQotLyogZW5kIG9mIG9sZCBocHNhX3Njc2kuaCBmaWxlICovCi0KICNlbmRpZiAvKiBIUFNBX0ggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwc2FfY21kLmggYi9kcml2ZXJzL3Njc2kvaHBzYV9jbWQuaAppbmRleCAxMmQ3MTM4Li4zZTBhYmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHBzYV9jbWQuaAorKysgYi9kcml2ZXJzL3Njc2kvaHBzYV9jbWQuaApAQCAtMTAxLDE5ICsxMDEsMjAgQEAKICNkZWZpbmUgQ0ZHVEJMX0FjY0NtZHMgICAgICAgICAgMHgwMDAwMDAwMWwKIAogI2RlZmluZSBDRkdUQkxfVHJhbnNfU2ltcGxlICAgICAweDAwMDAwMDAybAorI2RlZmluZSBDRkdUQkxfVHJhbnNfUGVyZm9ybWFudCAweDAwMDAwMDA0bAogCiAjZGVmaW5lIENGR1RCTF9CdXNUeXBlX1VsdHJhMiAgIDB4MDAwMDAwMDFsCiAjZGVmaW5lIENGR1RCTF9CdXNUeXBlX1VsdHJhMyAgIDB4MDAwMDAwMDJsCiAjZGVmaW5lIENGR1RCTF9CdXNUeXBlX0ZpYnJlMUcgIDB4MDAwMDAxMDBsCiAjZGVmaW5lIENGR1RCTF9CdXNUeXBlX0ZpYnJlMkcgIDB4MDAwMDAyMDBsCiBzdHJ1Y3QgdmFsczMyIHsKLQlfX3UzMiAgIGxvd2VyOwotCV9fdTMyICAgdXBwZXI7CisJdTMyICAgbG93ZXI7CisJdTMyICAgdXBwZXI7CiB9OwogCiB1bmlvbiB1NjRiaXQgewogCXN0cnVjdCB2YWxzMzIgdmFsMzI7Ci0JX191NjQgdmFsOworCXU2NCB2YWw7CiB9OwogCiAvKiBGSVhNRSB0aGlzIGlzIGEgcGVyIGNvbnRyb2xsZXIgdmFsdWUgKGJhcmYhKSAqLwpAQCAtMTI2LDM0ICsxMjcsMzQgQEAKIAogI2RlZmluZSBIUFNBX0lOUVVJUlkgMHgxMgogc3RydWN0IElucXVpcnlEYXRhIHsKLQlfX3U4IGRhdGFfYnl0ZVszNl07CisJdTggZGF0YV9ieXRlWzM2XTsKIH07CiAKICNkZWZpbmUgSFBTQV9SRVBPUlRfTE9HIDB4YzIgICAgLyogUmVwb3J0IExvZ2ljYWwgTFVOcyAqLwogI2RlZmluZSBIUFNBX1JFUE9SVF9QSFlTIDB4YzMgICAvKiBSZXBvcnQgUGh5c2ljYWwgTFVOcyAqLwogc3RydWN0IFJlcG9ydExVTmRhdGEgewotCV9fdTggTFVOTGlzdExlbmd0aFs0XTsKLQlfX3UzMiByZXNlcnZlZDsKLQlfX3U4IExVTltIUFNBX01BWF9MVU5dWzhdOworCXU4IExVTkxpc3RMZW5ndGhbNF07CisJdTMyIHJlc2VydmVkOworCXU4IExVTltIUFNBX01BWF9MVU5dWzhdOwogfTsKIAogc3RydWN0IFJlcG9ydEV4dGVuZGVkTFVOZGF0YSB7Ci0JX191OCBMVU5MaXN0TGVuZ3RoWzRdOwotCV9fdTggZXh0ZW5kZWRfcmVzcG9uc2VfZmxhZzsKLQlfX3U4IHJlc2VydmVkWzNdOwotCV9fdTggTFVOW0hQU0FfTUFYX0xVTl1bMjRdOworCXU4IExVTkxpc3RMZW5ndGhbNF07CisJdTggZXh0ZW5kZWRfcmVzcG9uc2VfZmxhZzsKKwl1OCByZXNlcnZlZFszXTsKKwl1OCBMVU5bSFBTQV9NQVhfTFVOXVsyNF07CiB9OwogCiBzdHJ1Y3QgU2Vuc2VTdWJzeXN0ZW1faW5mbyB7Ci0JX191OCByZXNlcnZlZFszNl07Ci0JX191OCBwb3J0bmFtZVs4XTsKLQlfX3U4IHJlc2VydmVkMVsxMTA4XTsKKwl1OCByZXNlcnZlZFszNl07CisJdTggcG9ydG5hbWVbOF07CisJdTggcmVzZXJ2ZWQxWzExMDhdOwogfTsKIAogI2RlZmluZSBIUFNBX1JFQURfQ0FQQUNJVFkgMHgyNSAvKiBSZWFkIENhcGFjaXR5ICovCiBzdHJ1Y3QgUmVhZENhcGRhdGEgewotCV9fdTggdG90YWxfc2l6ZVs0XTsJLyogVG90YWwgc2l6ZSBpbiBibG9ja3MgKi8KLQlfX3U4IGJsb2NrX3NpemVbNF07CS8qIFNpemUgb2YgYmxvY2tzIGluIGJ5dGVzICovCisJdTggdG90YWxfc2l6ZVs0XTsJLyogVG90YWwgc2l6ZSBpbiBibG9ja3MgKi8KKwl1OCBibG9ja19zaXplWzRdOwkvKiBTaXplIG9mIGJsb2NrcyBpbiBieXRlcyAqLwogfTsKIAogI2lmIDAKQEAgLTE3NCwxMTIgKzE3NSwxMzEgQEAKIC8qIENvbW1hbmQgTGlzdCBTdHJ1Y3R1cmUgKi8KIHVuaW9uIFNDU0kzQWRkciB7CiAJc3RydWN0IHsKLQkJX191OCBEZXY7Ci0JCV9fdTggQnVzOjY7Ci0JCV9fdTggTW9kZToyOyAgICAgICAgLyogYjAwICovCisJCXU4IERldjsKKwkJdTggQnVzOjY7CisJCXU4IE1vZGU6MjsgICAgICAgIC8qIGIwMCAqLwogCX0gUGVyaXBEZXY7CiAJc3RydWN0IHsKLQkJX191OCBEZXZMU0I7Ci0JCV9fdTggRGV2TVNCOjY7Ci0JCV9fdTggTW9kZToyOyAgICAgICAgLyogYjAxICovCisJCXU4IERldkxTQjsKKwkJdTggRGV2TVNCOjY7CisJCXU4IE1vZGU6MjsgICAgICAgIC8qIGIwMSAqLwogCX0gTG9nRGV2OwogCXN0cnVjdCB7Ci0JCV9fdTggRGV2OjU7Ci0JCV9fdTggQnVzOjM7Ci0JCV9fdTggVGFyZzo2OwotCQlfX3U4IE1vZGU6MjsgICAgICAgIC8qIGIxMCAqLworCQl1OCBEZXY6NTsKKwkJdTggQnVzOjM7CisJCXU4IFRhcmc6NjsKKwkJdTggTW9kZToyOyAgICAgICAgLyogYjEwICovCiAJfSBMb2dVbml0OwogfTsKIAogc3RydWN0IFBoeXNEZXZBZGRyIHsKLQlfX3UzMiAgICAgICAgICAgICBUYXJnZXRJZDoyNDsKLQlfX3UzMiAgICAgICAgICAgICBCdXM6NjsKLQlfX3UzMiAgICAgICAgICAgICBNb2RlOjI7CisJdTMyICAgICAgICAgICAgIFRhcmdldElkOjI0OworCXUzMiAgICAgICAgICAgICBCdXM6NjsKKwl1MzIgICAgICAgICAgICAgTW9kZToyOwogCS8qIDIgbGV2ZWwgdGFyZ2V0IGRldmljZSBhZGRyICovCiAJdW5pb24gU0NTSTNBZGRyICBUYXJnZXRbMl07CiB9OwogCiBzdHJ1Y3QgTG9nRGV2QWRkciB7Ci0JX191MzIgICAgICAgICAgICBWb2xJZDozMDsKLQlfX3UzMiAgICAgICAgICAgIE1vZGU6MjsKLQlfX3U4ICAgICAgICAgICAgIHJlc2VydmVkWzRdOworCXUzMiAgICAgICAgICAgIFZvbElkOjMwOworCXUzMiAgICAgICAgICAgIE1vZGU6MjsKKwl1OCAgICAgICAgICAgICByZXNlcnZlZFs0XTsKIH07CiAKIHVuaW9uIExVTkFkZHIgewotCV9fdTggICAgICAgICAgICAgICBMdW5BZGRyQnl0ZXNbOF07CisJdTggICAgICAgICAgICAgICBMdW5BZGRyQnl0ZXNbOF07CiAJdW5pb24gU0NTSTNBZGRyICAgIFNDU0kzTHVuWzRdOwogCXN0cnVjdCBQaHlzRGV2QWRkciBQaHlzRGV2OwogCXN0cnVjdCBMb2dEZXZBZGRyICBMb2dEZXY7CiB9OwogCiBzdHJ1Y3QgQ29tbWFuZExpc3RIZWFkZXIgewotCV9fdTggICAgICAgICAgICAgIFJlcGx5UXVldWU7Ci0JX191OCAgICAgICAgICAgICAgU0dMaXN0OwotCV9fdTE2ICAgICAgICAgICAgIFNHVG90YWw7CisJdTggICAgICAgICAgICAgIFJlcGx5UXVldWU7CisJdTggICAgICAgICAgICAgIFNHTGlzdDsKKwl1MTYgICAgICAgICAgICAgU0dUb3RhbDsKIAlzdHJ1Y3QgdmFsczMyICAgICBUYWc7CiAJdW5pb24gTFVOQWRkciAgICAgTFVOOwogfTsKIAogc3RydWN0IFJlcXVlc3RCbG9jayB7Ci0JX191OCAgIENEQkxlbjsKKwl1OCAgIENEQkxlbjsKIAlzdHJ1Y3QgewotCQlfX3U4IFR5cGU6MzsKLQkJX191OCBBdHRyaWJ1dGU6MzsKLQkJX191OCBEaXJlY3Rpb246MjsKKwkJdTggVHlwZTozOworCQl1OCBBdHRyaWJ1dGU6MzsKKwkJdTggRGlyZWN0aW9uOjI7CiAJfSBUeXBlOwotCV9fdTE2ICBUaW1lb3V0OwotCV9fdTggICBDREJbMTZdOworCXUxNiAgVGltZW91dDsKKwl1OCAgIENEQlsxNl07CiB9OwogCiBzdHJ1Y3QgRXJyRGVzY3JpcHRvciB7CiAJc3RydWN0IHZhbHMzMiBBZGRyOwotCV9fdTMyICBMZW47CisJdTMyICBMZW47CiB9OwogCiBzdHJ1Y3QgU0dEZXNjcmlwdG9yIHsKIAlzdHJ1Y3QgdmFsczMyIEFkZHI7Ci0JX191MzIgIExlbjsKLQlfX3UzMiAgRXh0OworCXUzMiAgTGVuOworCXUzMiAgRXh0OwogfTsKIAogdW5pb24gTW9yZUVyckluZm8gewogCXN0cnVjdCB7Ci0JCV9fdTggIFJlc2VydmVkWzNdOwotCQlfX3U4ICBUeXBlOwotCQlfX3UzMiBFcnJvckluZm87CisJCXU4ICBSZXNlcnZlZFszXTsKKwkJdTggIFR5cGU7CisJCXUzMiBFcnJvckluZm87CiAJfSBDb21tb25fSW5mbzsKIAlzdHJ1Y3QgewotCQlfX3U4ICBSZXNlcnZlZFsyXTsKLQkJX191OCAgb2ZmZW5zZV9zaXplOyAvKiBzaXplIG9mIG9mZmVuZGluZyBlbnRyeSAqLwotCQlfX3U4ICBvZmZlbnNlX251bTsgIC8qIGJ5dGUgIyBvZiBvZmZlbnNlIDAtYmFzZSAqLwotCQlfX3UzMiBvZmZlbnNlX3ZhbHVlOworCQl1OCAgUmVzZXJ2ZWRbMl07CisJCXU4ICBvZmZlbnNlX3NpemU7IC8qIHNpemUgb2Ygb2ZmZW5kaW5nIGVudHJ5ICovCisJCXU4ICBvZmZlbnNlX251bTsgIC8qIGJ5dGUgIyBvZiBvZmZlbnNlIDAtYmFzZSAqLworCQl1MzIgb2ZmZW5zZV92YWx1ZTsKIAl9IEludmFsaWRfQ21kOwogfTsKIHN0cnVjdCBFcnJvckluZm8gewotCV9fdTggICAgICAgICAgICAgICBTY3NpU3RhdHVzOwotCV9fdTggICAgICAgICAgICAgICBTZW5zZUxlbjsKLQlfX3UxNiAgICAgICAgICAgICAgQ29tbWFuZFN0YXR1czsKLQlfX3UzMiAgICAgICAgICAgICAgUmVzaWR1YWxDbnQ7CisJdTggICAgICAgICAgICAgICBTY3NpU3RhdHVzOworCXU4ICAgICAgICAgICAgICAgU2Vuc2VMZW47CisJdTE2ICAgICAgICAgICAgICBDb21tYW5kU3RhdHVzOworCXUzMiAgICAgICAgICAgICAgUmVzaWR1YWxDbnQ7CiAJdW5pb24gTW9yZUVyckluZm8gIE1vcmVFcnJJbmZvOwotCV9fdTggICAgICAgICAgICAgICBTZW5zZUluZm9bU0VOU0VJTkZPQllURVNdOworCXU4ICAgICAgICAgICAgICAgU2Vuc2VJbmZvW1NFTlNFSU5GT0JZVEVTXTsKIH07CiAvKiBDb21tYW5kIHR5cGVzICovCiAjZGVmaW5lIENNRF9JT0NUTF9QRU5EICAweDAxCiAjZGVmaW5lIENNRF9TQ1NJCTB4MDMKIAotc3RydWN0IGN0bHJfaW5mbzsgLyogZGVmaW5lZCBpbiBocHNhLmggKi8KLS8qIFRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlIG5lZWRzIHRvIGJlIGRpdmlzaWJsZSBieSA4Ci0gKiBvZCBvbiBhbGwgYXJjaGl0ZWN0dXJlcywgYmVjYXVzZSB0aGUgY29udHJvbGxlciB1c2VzIDIKLSAqIGxvd2VyIGJpdHMgb2YgdGhlIGFkZHJlc3MsIGFuZCB0aGUgZHJpdmVyIHVzZXMgMSBsb3dlcgotICogYml0ICgzIGJpdHMgdG90YWwuKQorLyogVGhpcyBzdHJ1Y3R1cmUgbmVlZHMgdG8gYmUgZGl2aXNpYmxlIGJ5IDMyIGZvciBuZXcKKyAqIGluZGV4aW5nIG1ldGhvZCBhbmQgcGVyZm9ybWFudCBtb2RlLgogICovCisjZGVmaW5lIFBBRDMyIDMyCisjZGVmaW5lIFBBRDY0RElGRiAwCisjZGVmaW5lIFVTRUVYVFJBICgoc2l6ZW9mKHZvaWQgKikgLSA0KS80KQorI2RlZmluZSBQQURTSVpFIChQQUQzMiArIFBBRDY0RElGRiAqIFVTRUVYVFJBKQorCisjZGVmaW5lIERJUkVDVF9MT09LVVBfU0hJRlQgNQorI2RlZmluZSBESVJFQ1RfTE9PS1VQX0JJVCAweDEwCisKKyNkZWZpbmUgSFBTQV9FUlJPUl9CSVQgICAgICAgICAgMHgwMgorc3RydWN0IGN0bHJfaW5mbzsgLyogZGVmaW5lZCBpbiBocHNhLmggKi8KKy8qIFRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlIG5lZWRzIHRvIGJlIGRpdmlzaWJsZSBieSAzMgorICogb24gYWxsIGFyY2hpdGVjdHVyZXMgYmVjYXVzZSBsb3cgNSBiaXRzIG9mIHRoZSBhZGRyZXNzZXMKKyAqIGFyZSB1c2VkIGFzIGZvbGxvd3M6CisgKgorICogYml0IDA6IHRvIGRldmljZSwgdXNlZCB0byBpbmRpY2F0ZSAicGVyZm9ybWFudCBtb2RlIiBjb21tYW5kCisgKiAgICAgICAgZnJvbSBkZXZpY2UsIGluZGlkY2F0ZXMgZXJyb3Igc3RhdHVzLgorICogYml0IDEtMzogdG8gZGV2aWNlLCBpbmRpY2F0ZXMgYmxvY2sgZmV0Y2ggdGFibGUgZW50cnkgZm9yCisgKiAgICAgICAgICByZWR1Y2luZyBETUEgaW4gZmV0Y2hpbmcgY29tbWFuZHMgZnJvbSBob3N0IG1lbW9yeS4KKyAqIGJpdCA0OiB1c2VkIHRvIGluZGljYXRlIHdoZXRoZXIgdGFnIGlzICJkaXJlY3QgbG9va3VwIiAoaW5kZXgpLAorICogICAgICAgIG9yIGEgYnVzIGFkZHJlc3MuCisgKi8KKwogc3RydWN0IENvbW1hbmRMaXN0IHsKIAlzdHJ1Y3QgQ29tbWFuZExpc3RIZWFkZXIgSGVhZGVyOwogCXN0cnVjdCBSZXF1ZXN0QmxvY2sgICAgICBSZXF1ZXN0OwogCXN0cnVjdCBFcnJEZXNjcmlwdG9yICAgICBFcnJEZXNjOwogCXN0cnVjdCBTR0Rlc2NyaXB0b3IgICAgICBTR1tNQVhTR0VOVFJJRVNdOwogCS8qIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tbWFuZCAqLwotCV9fdTMyCQkJICAgYnVzYWRkcjsgLyogcGh5c2ljYWwgYWRkciBvZiB0aGlzIHJlY29yZCAqLworCXUzMgkJCSAgIGJ1c2FkZHI7IC8qIHBoeXNpY2FsIGFkZHIgb2YgdGhpcyByZWNvcmQgKi8KIAlzdHJ1Y3QgRXJyb3JJbmZvICplcnJfaW5mbzsgLyogcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIG1lbSAqLwogCXN0cnVjdCBjdGxyX2luZm8JICAgKmg7CiAJaW50CQkJICAgY21kX3R5cGU7CkBAIC0yOTEsMzUgKzMxMSw2MyBAQAogCXN0cnVjdCBjb21wbGV0aW9uICp3YWl0aW5nOwogCWludAkgcmV0cnlfY291bnQ7CiAJdm9pZCAgICpzY3NpX2NtZDsKKworLyogb24gNjQgYml0IGFyY2hpdGVjdHVyZXMsIHRvIGdldCB0aGlzIHRvIGJlIDMyLWJ5dGUtYWxpZ25lZAorICogaXQgc28gaGFwcGVucyB3ZSBuZWVkIG5vIHBhZGRpbmcsIG9uIDMyIGJpdCBzeXN0ZW1zLAorICogd2UgbmVlZCA4IGJ5dGVzIG9mIHBhZGRpbmcuICAgVGhpcyBkb2VzIHRoYXQuCisgKi8KKyNkZWZpbmUgQ09NTUFORExJU1RfUEFEICgoOCAtIHNpemVvZihsb25nKSkvNCAqIDgpCisJdTggcGFkW0NPTU1BTkRMSVNUX1BBRF07CisKIH07CiAKIC8qIENvbmZpZ3VyYXRpb24gVGFibGUgU3RydWN0dXJlICovCiBzdHJ1Y3QgSG9zdFdyaXRlIHsKLQlfX3UzMiBUcmFuc3BvcnRSZXF1ZXN0OwotCV9fdTMyIFJlc2VydmVkOwotCV9fdTMyIENvYWxJbnREZWxheTsKLQlfX3UzMiBDb2FsSW50Q291bnQ7CisJdTMyIFRyYW5zcG9ydFJlcXVlc3Q7CisJdTMyIFJlc2VydmVkOworCXUzMiBDb2FsSW50RGVsYXk7CisJdTMyIENvYWxJbnRDb3VudDsKIH07CiAKKyNkZWZpbmUgU0lNUExFX01PREUgICAgIDB4MDIKKyNkZWZpbmUgUEVSRk9STUFOVF9NT0RFIDB4MDQKKyNkZWZpbmUgTUVNUV9NT0RFICAgICAgIDB4MDgKKwogc3RydWN0IENmZ1RhYmxlIHsKLQlfX3U4ICAgICAgICAgICAgIFNpZ25hdHVyZVs0XTsKLQlfX3UzMiAgICAgICAgICAgIFNwZWNWYWxlbmNlOwotCV9fdTMyICAgICAgICAgICAgVHJhbnNwb3J0U3VwcG9ydDsKLQlfX3UzMiAgICAgICAgICAgIFRyYW5zcG9ydEFjdGl2ZTsKLQlzdHJ1Y3QgSG9zdFdyaXRlIEhvc3RXcml0ZTsKLQlfX3UzMiAgICAgICAgICAgIENtZHNPdXRNYXg7Ci0JX191MzIgICAgICAgICAgICBCdXNUeXBlczsKLQlfX3UzMiAgICAgICAgICAgIFJlc2VydmVkOwotCV9fdTggICAgICAgICAgICAgU2VydmVyTmFtZVsxNl07Ci0JX191MzIgICAgICAgICAgICBIZWFydEJlYXQ7Ci0JX191MzIgICAgICAgICAgICBTQ1NJX1ByZWZldGNoOworCXU4ICAgICAgICAgICAgU2lnbmF0dXJlWzRdOworCXUzMgkJU3BlY1ZhbGVuY2U7CisJdTMyICAgICAgICAgICBUcmFuc3BvcnRTdXBwb3J0OworCXUzMiAgICAgICAgICAgVHJhbnNwb3J0QWN0aXZlOworCXN0cnVjdCAJCUhvc3RXcml0ZSBIb3N0V3JpdGU7CisJdTMyICAgICAgICAgICBDbWRzT3V0TWF4OworCXUzMiAgICAgICAgICAgQnVzVHlwZXM7CisJdTMyICAgICAgICAgICBUcmFuc01ldGhvZE9mZnNldDsKKwl1OCAgICAgICAgICAgIFNlcnZlck5hbWVbMTZdOworCXUzMiAgICAgICAgICAgSGVhcnRCZWF0OworCXUzMiAgICAgICAgICAgU0NTSV9QcmVmZXRjaDsKKwl1MzIJIAlNYXhTY2F0dGVyR2F0aGVyRWxlbWVudHM7CisJdTMyCQlNYXhMb2dpY2FsVW5pdHM7CisJdTMyCQlNYXhQaHlzaWNhbERldmljZXM7CisJdTMyCQlNYXhQaHlzaWNhbERyaXZlc1BlckxvZ2ljYWxVbml0OworCXUzMgkJTWF4UGVyZm9ybWFudE1vZGVDb21tYW5kczsKK307CisKKyNkZWZpbmUgTlVNX0JMT0NLRkVUQ0hfRU5UUklFUyA4CitzdHJ1Y3QgVHJhbnNUYWJsZV9zdHJ1Y3QgeworCXUzMiAgICAgICAgICAgIEJsb2NrRmV0Y2hbTlVNX0JMT0NLRkVUQ0hfRU5UUklFU107CisJdTMyICAgICAgICAgICAgUmVwUVNpemU7CisJdTMyICAgICAgICAgICAgUmVwUUNvdW50OworCXUzMiAgICAgICAgICAgIFJlcFFDdHJBZGRyTG93MzI7CisJdTMyICAgICAgICAgICAgUmVwUUN0ckFkZHJIaWdoMzI7CisJdTMyICAgICAgICAgICAgUmVwUUFkZHIwTG93MzI7CisJdTMyICAgICAgICAgICAgUmVwUUFkZHIwSGlnaDMyOwogfTsKIAogc3RydWN0IGhwc2FfcGNpX2luZm8gewogCXVuc2lnbmVkIGNoYXIJYnVzOwogCXVuc2lnbmVkIGNoYXIJZGV2X2ZuOwogCXVuc2lnbmVkIHNob3J0CWRvbWFpbjsKLQlfX3UzMgkJYm9hcmRfaWQ7CisJdTMyCQlib2FyZF9pZDsKIH07CiAKICNwcmFnbWEgcGFjaygpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtbWNhLmMgYi9kcml2ZXJzL3Njc2kvaWJtbWNhLmMKaW5kZXggOWMxZTZhNS4uOWE0YjY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libW1jYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9pYm1tY2EuYwpAQCAtMjMzNiw3ICsyMzM2LDcgQEAKIAljaGFyICpjdXIgPSBzdHI7CiAJaW50IGkgPSAxOwogCi0Jd2hpbGUgKGN1ciAmJiBpc2RpZ2l0KCpjdXIpICYmIGkgPD0gSU1fTUFYX0hPU1RTKSB7CisJd2hpbGUgKGN1ciAmJiBpc2RpZ2l0KCpjdXIpICYmIGkgPCBJTV9NQVhfSE9TVFMpIHsKIAkJaW50c1tpKytdID0gc2ltcGxlX3N0cnRvdWwoY3VyLCBOVUxMLCAwKTsKIAkJaWYgKChjdXIgPSBzdHJjaHIoY3VyLCAnLCcpKSAhPSBOVUxMKQogCQkJY3VyKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKaW5kZXggODdiNTM2YS4uNzMyZjZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYwpAQCAtNDE5NSw3ICs0MTk1LDcgQEAKIAkJaWYgKHRndC0+c2VydmljZV9wYXJtcy5jbGFzczNfcGFybXNbMF0gJiAweDgwMDAwMDAwKQogCQkJcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzIHw9IEZDX0NPU19DTEFTUzM7CiAJCWlmIChycG9ydC0+cnFzdF9xKQotCQkJYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhycG9ydC0+cnFzdF9xLCAxKTsKKwkJCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocnBvcnQtPnJxc3RfcSwgMSk7CiAJfSBlbHNlCiAJCXRndF9kYmcodGd0LCAicnBvcnQgYWRkIGZhaWxlZFxuIik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh2aG9zdC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CkBAIC00NjY5LDcgKzQ2NjksNyBAQAogCX0KIAogCWlmIChzaG9zdF90b19mY19ob3N0KHNob3N0KS0+cnFzdF9xKQotCQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHNob3N0X3RvX2ZjX2hvc3Qoc2hvc3QpLT5ycXN0X3EsIDEpOworCQlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHNob3N0X3RvX2ZjX2hvc3Qoc2hvc3QpLT5ycXN0X3EsIDEpOwogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHZob3N0KTsKIAlzcGluX2xvY2soJmlibXZmY19kcml2ZXJfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmdmhvc3QtPnF1ZXVlLCAmaWJtdmZjX2hlYWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwppbmRleCBlNDc1Yjc5Li5lM2ExOGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwpAQCAtNDAsNyArNDAsNyBAQAogICogKENSUSksIHdoaWNoIGlzIGp1c3QgYSBidWZmZXIgb2YgMTYgYnl0ZSBlbnRyaWVzIGluIHRoZSByZWNlaXZlcidzIAogICogU2VuZGVycyBjYW5ub3QgYWNjZXNzIHRoZSBidWZmZXIgZGlyZWN0bHksIGJ1dCBzZW5kIG1lc3NhZ2VzIGJ5CiAgKiBtYWtpbmcgYSBoeXBlcnZpc29yIGNhbGwgYW5kIHBhc3NpbmcgaW4gdGhlIDE2IGJ5dGVzLiAgVGhlIGh5cGVydmlzb3IKLSAqIHB1dHMgdGhlIG1lc3NhZ2UgaW4gdGhlIG5leHQgMTYgYnl0ZSBzcGFjZSBpbiByb3VuZC1yb2JiaW4gZmFzaGlvbiwKKyAqIHB1dHMgdGhlIG1lc3NhZ2UgaW4gdGhlIG5leHQgMTYgYnl0ZSBzcGFjZSBpbiByb3VuZC1yb2JpbiBmYXNoaW9uLAogICogdHVybnMgb24gdGhlIGhpZ2ggb3JkZXIgYml0IG9mIHRoZSBtZXNzYWdlICh0aGUgdmFsaWQgYml0KSwgYW5kIAogICogZ2VuZXJhdGVzIGFuIGludGVycnVwdCB0byB0aGUgcmVjZWl2ZXIgKGlmIGludGVycnVwdHMgYXJlIHR1cm5lZCBvbi4pIAogICogVGhlIHJlY2VpdmVyIGp1c3QgdHVybnMgb2ZmIHRoZSB2YWxpZCBiaXQgd2hlbiB0aGV5IGhhdmUgY29waWVkIG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5jIGIvZHJpdmVycy9zY3NpL2lwci5jCmluZGV4IDllNTJkMTYuLjAzMmYwZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuYworKysgYi9kcml2ZXJzL3Njc2kvaXByLmMKQEAgLTM2NzQsNyArMzY3NCw3IEBACiAJCWlmIChpcHJfaXNfdnNldF9kZXZpY2UocmVzKSkgewogCQkJYmxrX3F1ZXVlX3JxX3RpbWVvdXQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKIAkJCQkJICAgICBJUFJfVlNFVF9SV19USU1FT1VUKTsKLQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBJUFJfVlNFVF9NQVhfU0VDVE9SUyk7CisJCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgSVBSX1ZTRVRfTUFYX1NFQ1RPUlMpOwogCQl9CiAJCWlmIChpcHJfaXNfdnNldF9kZXZpY2UocmVzKSB8fCBpcHJfaXNfc2NzaV9kaXNrKHJlcykpCiAJCQlzZGV2LT5hbGxvd19yZXN0YXJ0ID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwppbmRleCA1MTdkYTNmLi44YTg5YmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCkBAIC01ODQsOSArNTg0LDEwIEBACiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfdGNwX2Nvbm4gKnRjcF9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfc3dfdGNwX2Nvbm4gKnRjcF9zd19jb25uID0gdGNwX2Nvbm4tPmRkX2RhdGE7CisJc3RydWN0IHNvY2tldCAqc29jayA9IHRjcF9zd19jb25uLT5zb2NrOwogCiAJLyogdXNlcnNwYWNlIG1heSBoYXZlIGdvb2ZlZCB1cCBhbmQgbm90IGJvdW5kIHVzICovCi0JaWYgKCF0Y3Bfc3dfY29ubi0+c29jaykKKwlpZiAoIXNvY2spCiAJCXJldHVybjsKIAkvKgogCSAqIE1ha2Ugc3VyZSBvdXIgcmVjdiBzaWRlIGlzIHN0b3BwZWQuCkBAIC01OTcsNiArNTk4LDExIEBACiAJc2V0X2JpdChJU0NTSV9TVVNQRU5EX0JJVCwgJmNvbm4tPnN1c3BlbmRfcngpOwogCXdyaXRlX3VubG9ja19iaCgmdGNwX3N3X2Nvbm4tPnNvY2stPnNrLT5za19jYWxsYmFja19sb2NrKTsKIAorCWlmIChzb2NrLT5zay0+c2tfc2xlZXAgJiYgd2FpdHF1ZXVlX2FjdGl2ZShzb2NrLT5zay0+c2tfc2xlZXApKSB7CisJCXNvY2stPnNrLT5za19lcnIgPSBFSU87CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZShzb2NrLT5zay0+c2tfc2xlZXApOworCX0KKwogCWlzY3NpX2Nvbm5fc3RvcChjbHNfY29ubiwgZmxhZyk7CiAJaXNjc2lfc3dfdGNwX3JlbGVhc2VfY29ubihjb25uKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19leGNoLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jCmluZGV4IDE5ZDcxMWMuLjdmNDM2NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19leGNoLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYwpAQCAtMTg5MCw3ICsxODkwLDcgQEAKIAlmY19leGNoX3NldHVwX2hkcihlcCwgZnAsIGVwLT5mX2N0bCk7CiAJc3AtPmNudCsrOwogCi0JaWYgKGVwLT54aWQgPD0gbHBvcnQtPmxyb194aWQpCisJaWYgKGVwLT54aWQgPD0gbHBvcnQtPmxyb194aWQgJiYgZmgtPmZoX3JfY3RsID09IEZDX1JDVExfRERfVU5TT0xfQ01EKQogCQlmY19mY3BfZGRwX3NldHVwKGZyX2ZzcChmcCksIGVwLT54aWQpOwogCiAJaWYgKHVubGlrZWx5KGxwb3J0LT50dC5mcmFtZV9zZW5kKGxwb3J0LCBmcCkpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCmluZGV4IDg4MWQ1ZGYuLjZmZGUyZmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCkBAIC0yOTgsOSArMjk4LDYgQEAKIHsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OwogCi0JaWYgKCFmc3ApCi0JCXJldHVybjsKLQogCWxwb3J0ID0gZnNwLT5scDsKIAlpZiAoKGZzcC0+cmVxX2ZsYWdzICYgRkNfU1JCX1JFQUQpICYmCiAJICAgIChscG9ydC0+bHJvX2VuYWJsZWQpICYmIChscG9ydC0+dHQuZGRwX3NldHVwKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYwppbmRleCAwYjE2NTAyLi43ZWM4Y2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYwpAQCAtMTgwMCw3ICsxODAwLDggQEAKIAl1MzIgZGlkOwogCiAJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKLQlyc3AtPnJlc2lkX2xlbiA9IGpvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwlpZiAocnNwKQorCQlyc3AtPnJlc2lkX2xlbiA9IGpvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbjsKIAogCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19ycG9ydC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKaW5kZXggMDIzMDA1Mi4uOTc5MjNiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKQEAgLTYyMyw3ICs2MjMsNyBAQAogCiAJCXRvdiA9IG50b2hsKHBscC0+ZmxfY3NwLnNwX2VfZF90b3YpOwogCQlpZiAobnRvaHMocGxwLT5mbF9jc3Auc3BfZmVhdHVyZXMpICYgRkNfU1BfRlRfRURUUikKLQkJCXRvdiAvPSAxMDAwOworCQkJdG92IC89IDEwMDAwMDA7CiAJCWlmICh0b3YgPiByZGF0YS0+ZV9kX3RvdikKIAkJCXJkYXRhLT5lX2RfdG92ID0gdG92OwogCQljc3Bfc2VxID0gbnRvaHMocGxwLT5mbF9jc3Auc3BfdG90X3NlcSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCmluZGV4IGMyOGE3MTIuLjcwM2ViNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCkBAIC0xOTE5LDEwICsxOTE5LDExIEBACiBzdGF0aWMgZW51bSBibGtfZWhfdGltZXJfcmV0dXJuIGlzY3NpX2VoX2NtZF90aW1lZF9vdXQoc3RydWN0IHNjc2lfY21uZCAqc2MpCiB7CiAJZW51bSBibGtfZWhfdGltZXJfcmV0dXJuIHJjID0gQkxLX0VIX05PVF9IQU5ETEVEOwotCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrID0gTlVMTDsKKwlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayA9IE5VTEwsICpydW5uaW5nX3Rhc2s7CiAJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbjsKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbjsKIAlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubjsKKwlpbnQgaTsKIAogCWNsc19zZXNzaW9uID0gc3RhcmdldF90b19zZXNzaW9uKHNjc2lfdGFyZ2V0KHNjLT5kZXZpY2UpKTsKIAlzZXNzaW9uID0gY2xzX3Nlc3Npb24tPmRkX2RhdGE7CkBAIC0xOTQ3LDggKzE5NDgsMTUgQEAKIAl9CiAKIAl0YXNrID0gKHN0cnVjdCBpc2NzaV90YXNrICopc2MtPlNDcC5wdHI7Ci0JaWYgKCF0YXNrKQorCWlmICghdGFzaykgeworCQkvKgorCQkgKiBSYWNlZCB3aXRoIGNvbXBsZXRpb24uIEp1c3QgcmVzZXQgdGltZXIsIGFuZCBsZXQgaXQKKwkJICogY29tcGxldGUgbm9ybWFsbHkKKwkJICovCisJCXJjID0gQkxLX0VIX1JFU0VUX1RJTUVSOwogCQlnb3RvIGRvbmU7CisJfQorCiAJLyoKIAkgKiBJZiB3ZSBoYXZlIHNlbnQgKGF0IGxlYXN0IHF1ZXVlZCB0byB0aGUgbmV0d29yayBsYXllcikgYSBwZHUgb3IKIAkgKiByZWN2ZCBvbmUgZm9yIHRoZSB0YXNrIHNpbmNlIHRoZSBsYXN0IHRpbWVvdXQgYXNrIGZvcgpAQCAtMTk1NiwxMCArMTk2NCwxMCBAQAogCSAqIHdlIGNhbiBjaGVjayBpZiBpdCBpcyB0aGUgdGFzayBvciBjb25uZWN0aW9uIHdoZW4gd2Ugc2VuZCB0aGUKIAkgKiBub3AgYXMgYSBwaW5nLgogCSAqLwotCWlmICh0aW1lX2FmdGVyX2VxKHRhc2stPmxhc3RfeGZlciwgdGFzay0+bGFzdF90aW1lb3V0KSkgeworCWlmICh0aW1lX2FmdGVyKHRhc2stPmxhc3RfeGZlciwgdGFzay0+bGFzdF90aW1lb3V0KSkgewogCQlJU0NTSV9EQkdfRUgoc2Vzc2lvbiwgIkNvbW1hbmQgbWFraW5nIHByb2dyZXNzLiBBc2tpbmcgIgogCQkJICAgICAic2NzaS1tbCBmb3IgbW9yZSB0aW1lIHRvIGNvbXBsZXRlLiAiCi0JCQkgICAgICJMYXN0IGRhdGEgcmVjdiBhdCAlbHUuIExhc3QgdGltZW91dCB3YXMgYXQgIgorCQkJICAgICAiTGFzdCBkYXRhIHhmZXIgYXQgJWx1LiBMYXN0IHRpbWVvdXQgd2FzIGF0ICIKIAkJCSAgICAgIiVsdVxuLiIsIHRhc2stPmxhc3RfeGZlciwgdGFzay0+bGFzdF90aW1lb3V0KTsKIAkJdGFzay0+aGF2ZV9jaGVja2VkX2Nvbm4gPSBmYWxzZTsKIAkJcmMgPSBCTEtfRUhfUkVTRVRfVElNRVI7CkBAIC0xOTc3LDYgKzE5ODUsNDMgQEAKIAkJZ290byBkb25lOwogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBjb25uLT5zZXNzaW9uLT5jbWRzX21heDsgaSsrKSB7CisJCXJ1bm5pbmdfdGFzayA9IGNvbm4tPnNlc3Npb24tPmNtZHNbaV07CisJCWlmICghcnVubmluZ190YXNrLT5zYyB8fCBydW5uaW5nX3Rhc2sgPT0gdGFzayB8fAorCQkgICAgIHJ1bm5pbmdfdGFzay0+c3RhdGUgIT0gSVNDU0lfVEFTS19SVU5OSU5HKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogT25seSBjaGVjayBpZiBjbWRzIHN0YXJ0ZWQgYmVmb3JlIHRoaXMgb25lIGhhdmUgbWFkZQorCQkgKiBwcm9ncmVzcywgb3IgdGhpcyBjb3VsZCBuZXZlciBmYWlsCisJCSAqLworCQlpZiAodGltZV9hZnRlcihydW5uaW5nX3Rhc2stPnNjLT5qaWZmaWVzX2F0X2FsbG9jLAorCQkJICAgICAgIHRhc2stPnNjLT5qaWZmaWVzX2F0X2FsbG9jKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0aW1lX2FmdGVyKHJ1bm5pbmdfdGFzay0+bGFzdF94ZmVyLCB0YXNrLT5sYXN0X3RpbWVvdXQpKSB7CisJCQkvKgorCQkJICogVGhpcyB0YXNrIGhhcyBub3QgbWFkZSBwcm9ncmVzcywgYnV0IGEgdGFzaworCQkJICogc3RhcnRlZCBiZWZvcmUgdXMgaGFzIHRyYW5zZmVycmVkIGRhdGEgc2luY2UKKwkJCSAqIHdlIHN0YXJ0ZWQvbGFzdC1jaGVja2VkLiBXZSBjb3VsZCBiZSBxdWV1ZWluZworCQkJICogdG9vIG1hbnkgdGFza3Mgb3IgdGhlIExVIGlzIGJhZC4KKwkJCSAqCisJCQkgKiBJZiB0aGUgZGV2aWNlIGlzIGJhZCB0aGUgY21kcyBhaGVhZCBvZiB1cyBvbgorCQkJICogb3RoZXIgZGV2cyB3aWxsIGNvbXBsZXRlLCBhbmQgdGhpcyBsb29wIHdpbGwKKwkJCSAqIGV2ZW50dWFsbHkgZmFpbCBzdGFydGluZyB0aGUgc2NzaSBlaC4KKwkJCSAqLworCQkJSVNDU0lfREJHX0VIKHNlc3Npb24sICJDb21tYW5kIGhhcyBub3QgbWFkZSBwcm9ncmVzcyAiCisJCQkJICAgICAiYnV0IGNvbW1hbmRzIGFoZWFkIG9mIGl0IGhhdmUuICIKKwkJCQkgICAgICJBc2tpbmcgc2NzaS1tbCBmb3IgbW9yZSB0aW1lIHRvICIKKwkJCQkgICAgICJjb21wbGV0ZS4gT3VyIGxhc3QgeGZlciB2cyBydW5uaW5nIHRhc2sgIgorCQkJCSAgICAgImxhc3QgeGZlciAlbHUvJWx1LiBMYXN0IGNoZWNrICVsdS5cbiIsCisJCQkJICAgICB0YXNrLT5sYXN0X3hmZXIsIHJ1bm5pbmdfdGFzay0+bGFzdF94ZmVyLAorCQkJCSAgICAgdGFzay0+bGFzdF90aW1lb3V0KTsKKwkJCXJjID0gQkxLX0VIX1JFU0VUX1RJTUVSOworCQkJZ290byBkb25lOworCQl9CisJfQorCiAJLyogQXNzdW1lcyBub3AgdGltZW91dCBpcyBzaG9ydGVyIHRoYW4gc2NzaSBjbWQgdGltZW91dCAqLwogCWlmICh0YXNrLT5oYXZlX2NoZWNrZWRfY29ubikKIAkJZ290byBkb25lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpX3RjcC5jIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpX3RjcC5jCmluZGV4IGRiNjg1NmMuLjRhZDg3ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaV90Y3AuYworKysgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2lfdGNwLmMKQEAgLTk5MiwxMiArOTkyLDEwIEBACiAJCWlmIChyMnQgPT0gTlVMTCkgewogCQkJaWYgKGtmaWZvX291dCgmdGNwX3Rhc2stPnIydHF1ZXVlLAogCQkJICAgICh2b2lkICopJnRjcF90YXNrLT5yMnQsIHNpemVvZih2b2lkICopKSAhPQotCQkJICAgIHNpemVvZih2b2lkICopKSB7Ci0JCQkJV0FSTl9PTkNFKDEsICJ1bmV4cGVjdGVkIGZpZm8gc3RhdGUiKTsKKwkJCSAgICBzaXplb2Yodm9pZCAqKSkKIAkJCQlyMnQgPSBOVUxMOwotCQkJfQotCi0JCQlyMnQgPSB0Y3BfdGFzay0+cjJ0OworCQkJZWxzZQorCQkJCXIydCA9IHRjcF90YXNrLT5yMnQ7CiAJCX0KIAkJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzcnAuYyBiL2RyaXZlcnMvc2NzaS9saWJzcnAuYwppbmRleCBhYjE5YjNiLi4yMjc3NTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic3JwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNycC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIFNDU0kgUkRBTSBQcm90b2NvbCBsaWIgZnVuY3Rpb25zCisgKiBTQ1NJIFJETUEgUHJvdG9jb2wgbGliIGZ1bmN0aW9ucwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBGVUpJVEEgVG9tb25vcmkgPHRvbW9mQGFjbS5vcmc+CiAgKgpAQCAtMzI4LDcgKzMyOCw3IEBACiAJaW50IG9mZnNldCwgZXJyID0gMDsKIAl1OCBmb3JtYXQ7CiAKLQlvZmZzZXQgPSBjbWQtPmFkZF9jZGJfbGVuICogNDsKKwlvZmZzZXQgPSBjbWQtPmFkZF9jZGJfbGVuICYgfjM7CiAKIAlkaXIgPSBzcnBfY21kX2RpcmVjdGlvbihjbWQpOwogCWlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKQpAQCAtMzY2LDcgKzM2Niw3IEBACiB7CiAJc3RydWN0IHNycF9kaXJlY3RfYnVmICptZDsKIAlzdHJ1Y3Qgc3JwX2luZGlyZWN0X2J1ZiAqaWQ7Ci0JaW50IGxlbiA9IDAsIG9mZnNldCA9IGNtZC0+YWRkX2NkYl9sZW4gKiA0OworCWludCBsZW4gPSAwLCBvZmZzZXQgPSBjbWQtPmFkZF9jZGJfbGVuICYgfjM7CiAJdTggZm10OwogCiAJaWYgKGRpciA9PSBETUFfVE9fREVWSUNFKQpAQCAtNDQwLDYgKzQ0MCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcnBfY21kX3F1ZXVlKTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJTQ1NJIFJEQU0gUHJvdG9jb2wgbGliIGZ1bmN0aW9ucyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTQ1NJIFJETUEgUHJvdG9jb2wgbGliIGZ1bmN0aW9ucyIpOwogTU9EVUxFX0FVVEhPUigiRlVKSVRBIFRvbW9ub3JpIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKaW5kZXggMWNjMjNhNi4uODRiNjk2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBDaHJpc3RvcGggSGVsbHdpZyAgICAgICAgICAgICAgKgpAQCAtMzE1LDYgKzMxNSw5IEBACiAjZGVmaW5lIEZDX1ZQT1JUX05FRURTX1JFR19WUEkJMHg4MDAwMCAgLyogTmVlZHMgdG8gaGF2ZSBpdHMgdnBpIHJlZ2lzdGVyZWQgKi8KICNkZWZpbmUgRkNfUlNDTl9ERUZFUlJFRAkweDEwMDAwMCAvKiBBIGRlZmVycmVkIFJTQ04gYmVpbmcgcHJvY2Vzc2VkICovCiAjZGVmaW5lIEZDX1ZQT1JUX05FRURTX0lOSVRfVlBJIDB4MjAwMDAwIC8qIE5lZWQgdG8gSU5JVF9WUEkgYmVmb3JlIEZESVNDICovCisjZGVmaW5lIEZDX1ZQT1JUX0NWTF9SQ1ZECTB4NDAwMDAwIC8qIFZMaW5rIGZhaWxlZCBkdWUgdG8gQ1ZMCSAqLworI2RlZmluZSBGQ19WRklfUkVHSVNURVJFRAkweDgwMDAwMCAvKiBWRkkgaXMgcmVnaXN0ZXJlZCAqLworI2RlZmluZSBGQ19GRElTQ19DT01QTEVURUQJMHgxMDAwMDAwLyogRkRJU0MgY29tcGxldGVkICovCiAKIAl1aW50MzJfdCBjdF9mbGFnczsKICNkZWZpbmUgRkNfQ1RfUkZGX0lECQkweDEJIC8qIFJGRl9JRCBhY2NlcHRlZCBieSBzd2l0Y2ggKi8KQEAgLTQ0OCw2ICs0NTEsOCBAQAogCXVpbnQzMl90IGN0eHRfaWQ7CiAJdWludDMyX3QgU0lEOwogCXVpbnQzMl90IG94aWQ7CisJdWludDMyX3QgZmxhZ3M7CisjZGVmaW5lIFVOU09MX1ZBTElECTB4MDAwMDAwMDEKIH07CiAKIHN0cnVjdCBscGZjX2hiYSB7CkBAIC00OTksNiArNTA0LDEwIEBACiAJCShzdHJ1Y3QgbHBmY19oYmEgKik7CiAJdm9pZCAoKmxwZmNfc3RvcF9wb3J0KQogCQkoc3RydWN0IGxwZmNfaGJhICopOworCWludCAoKmxwZmNfaGJhX2luaXRfbGluaykKKwkJKHN0cnVjdCBscGZjX2hiYSAqKTsKKwlpbnQgKCpscGZjX2hiYV9kb3duX2xpbmspCisJCShzdHJ1Y3QgbHBmY19oYmEgKik7CiAKIAogCS8qIFNMSTQgc3BlY2lmaWMgSEJBIGRhdGEgc3RydWN0dXJlICovCkBAIC02MTMsNiArNjIyLDcgQEAKIAl1aW50MzJfdCBjZmdfZW5hYmxlX2JnOwogCXVpbnQzMl90IGNmZ19sb2dfdmVyYm9zZTsKIAl1aW50MzJfdCBjZmdfYWVyX3N1cHBvcnQ7CisJdWludDMyX3QgY2ZnX3N1cHByZXNzX2xpbmtfdXA7CiAKIAlscGZjX3ZwZF90IHZwZDsJCS8qIHZpdGFsIHByb2R1Y3QgZGF0YSAqLwogCkBAIC03OTAsNyArODAwLDcgQEAKIAl1aW50MTZfdCB2bGFuX2lkOwogCXN0cnVjdCBsaXN0X2hlYWQgZmNmX2Nvbm5fcmVjX2xpc3Q7CiAKLQlzdHJ1Y3QgbXV0ZXggY3RfZXZlbnRfbXV0ZXg7IC8qIHN5bmNocm9uaXplIGFjY2VzcyB0byBjdF9ldl93YWl0ZXJzICovCisJc3BpbmxvY2tfdCBjdF9ldl9sb2NrOyAvKiBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gY3RfZXZfd2FpdGVycyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgY3RfZXZfd2FpdGVyczsKIAlzdHJ1Y3QgdW5zb2xfcmN2X2N0X2N0eCBjdF9jdHhbNjRdOwogCXVpbnQzMl90IGN0eF9pZHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCmluZGV4IDkxNTQyZjcuLmM5OTJlODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCkBAIC00ODIsNiArNDgyLDQxIEBACiB9CiAKIC8qKgorICogbHBmY19saW5rX3N0YXRlX3N0b3JlIC0gVHJhbnNpdGlvbiB0aGUgbGlua19zdGF0ZSBvbiBhbiBIQkEgcG9ydAorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbmUgb3IgbW9yZSBscGZjX3BvbGxpbmdfZmxhZ3MgdmFsdWVzLgorICogQGNvdW50OiBub3QgdXNlZC4KKyAqCisgKiBSZXR1cm5zOgorICogLUVJTlZBTCBpZiB0aGUgYnVmZmVyIGlzIG5vdCAidXAiIG9yICJkb3duIgorICogcmV0dXJuIGZyb20gbGluayBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gaWYgbm9uLXplcm8KKyAqIGxlbmd0aCBvZiB0aGUgYnVmIG9uIHN1Y2Nlc3MKKyAqKi8KK3N0YXRpYyBzc2l6ZV90CitscGZjX2xpbmtfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CisKKwlpbnQgc3RhdHVzID0gLUVJTlZBTDsKKworCWlmICgoc3RybmNtcChidWYsICJ1cCIsIHNpemVvZigidXAiKSAtIDEpID09IDApICYmCisJCQkocGhiYS0+bGlua19zdGF0ZSA9PSBMUEZDX0xJTktfRE9XTikpCisJCXN0YXR1cyA9IHBoYmEtPmxwZmNfaGJhX2luaXRfbGluayhwaGJhKTsKKwllbHNlIGlmICgoc3RybmNtcChidWYsICJkb3duIiwgc2l6ZW9mKCJkb3duIikgLSAxKSA9PSAwKSAmJgorCQkJKHBoYmEtPmxpbmtfc3RhdGUgPj0gTFBGQ19MSU5LX1VQKSkKKwkJc3RhdHVzID0gcGhiYS0+bHBmY19oYmFfZG93bl9saW5rKHBoYmEpOworCisJaWYgKHN0YXR1cyA9PSAwKQorCQlyZXR1cm4gc3RybGVuKGJ1Zik7CisJZWxzZQorCQlyZXR1cm4gc3RhdHVzOworfQorCisvKioKICAqIGxwZmNfbnVtX2Rpc2NvdmVyZWRfcG9ydHNfc2hvdyAtIFJldHVybiBzdW0gb2YgbWFwcGVkIGFuZCB1bm1hcHBlZCB2cG9ydHMKICAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgogICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgpAQCAtMTIxOSw3ICsxMjU0LDcgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpO1wKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhO1wKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhO1wKLQlpbnQgdmFsID0gMDtcCisJdWludCB2YWwgPSAwO1wKIAl2YWwgPSBwaGJhLT5jZmdfIyNhdHRyO1wKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIixcCiAJCQlwaGJhLT5jZmdfIyNhdHRyKTtcCkBAIC0xMjQ3LDcgKzEyODIsNyBAQAogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7XAogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7XAogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7XAotCWludCB2YWwgPSAwO1wKKwl1aW50IHZhbCA9IDA7XAogCXZhbCA9IHBoYmEtPmNmZ18jI2F0dHI7XAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUjeFxuIixcCiAJCQlwaGJhLT5jZmdfIyNhdHRyKTtcCkBAIC0xMjc0LDcgKzEzMDksNyBAQAogICoqLwogI2RlZmluZSBscGZjX3BhcmFtX2luaXQoYXR0ciwgZGVmYXVsdCwgbWludmFsLCBtYXh2YWwpCVwKIHN0YXRpYyBpbnQgXAotbHBmY18jI2F0dHIjI19pbml0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IHZhbCkgXAorbHBmY18jI2F0dHIjI19pbml0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludCB2YWwpIFwKIHsgXAogCWlmICh2YWwgPj0gbWludmFsICYmIHZhbCA8PSBtYXh2YWwpIHtcCiAJCXBoYmEtPmNmZ18jI2F0dHIgPSB2YWw7XApAQCAtMTMwOSw3ICsxMzQ0LDcgQEAKICAqKi8KICNkZWZpbmUgbHBmY19wYXJhbV9zZXQoYXR0ciwgZGVmYXVsdCwgbWludmFsLCBtYXh2YWwpCVwKIHN0YXRpYyBpbnQgXAotbHBmY18jI2F0dHIjI19zZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgdmFsKSBcCitscGZjXyMjYXR0ciMjX3NldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQgdmFsKSBcCiB7IFwKIAlpZiAodmFsID49IG1pbnZhbCAmJiB2YWwgPD0gbWF4dmFsKSB7XAogCQlwaGJhLT5jZmdfIyNhdHRyID0gdmFsO1wKQEAgLTEzNTAsNyArMTM4NSw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTtcCiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTtcCiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTtcCi0JaW50IHZhbD0wO1wKKwl1aW50IHZhbCA9IDA7XAogCWlmICghaXNkaWdpdChidWZbMF0pKVwKIAkJcmV0dXJuIC1FSU5WQUw7XAogCWlmIChzc2NhbmYoYnVmLCAiJWkiLCAmdmFsKSAhPSAxKVwKQEAgLTEzODIsNyArMTQxNyw3IEBACiB7IFwKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpO1wKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhO1wKLQlpbnQgdmFsID0gMDtcCisJdWludCB2YWwgPSAwO1wKIAl2YWwgPSB2cG9ydC0+Y2ZnXyMjYXR0cjtcCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHZwb3J0LT5jZmdfIyNhdHRyKTtcCiB9CkBAIC0xNDA5LDcgKzE0NDQsNyBAQAogeyBcCiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTtcCiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTtcCi0JaW50IHZhbCA9IDA7XAorCXVpbnQgdmFsID0gMDtcCiAJdmFsID0gdnBvcnQtPmNmZ18jI2F0dHI7XAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUjeFxuIiwgdnBvcnQtPmNmZ18jI2F0dHIpO1wKIH0KQEAgLTE0MzQsNyArMTQ2OSw3IEBACiAgKiovCiAjZGVmaW5lIGxwZmNfdnBvcnRfcGFyYW1faW5pdChhdHRyLCBkZWZhdWx0LCBtaW52YWwsIG1heHZhbCkJXAogc3RhdGljIGludCBcCi1scGZjXyMjYXR0ciMjX2luaXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgdmFsKSBcCitscGZjXyMjYXR0ciMjX2luaXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50IHZhbCkgXAogeyBcCiAJaWYgKHZhbCA+PSBtaW52YWwgJiYgdmFsIDw9IG1heHZhbCkge1wKIAkJdnBvcnQtPmNmZ18jI2F0dHIgPSB2YWw7XApAQCAtMTQ2Niw3ICsxNTAxLDcgQEAKICAqKi8KICNkZWZpbmUgbHBmY192cG9ydF9wYXJhbV9zZXQoYXR0ciwgZGVmYXVsdCwgbWludmFsLCBtYXh2YWwpCVwKIHN0YXRpYyBpbnQgXAotbHBmY18jI2F0dHIjI19zZXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgdmFsKSBcCitscGZjXyMjYXR0ciMjX3NldChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQgdmFsKSBcCiB7IFwKIAlpZiAodmFsID49IG1pbnZhbCAmJiB2YWwgPD0gbWF4dmFsKSB7XAogCQl2cG9ydC0+Y2ZnXyMjYXR0ciA9IHZhbDtcCkBAIC0xNTAyLDcgKzE1MzcsNyBAQAogeyBcCiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTtcCiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTtcCi0JaW50IHZhbD0wO1wKKwl1aW50IHZhbCA9IDA7XAogCWlmICghaXNkaWdpdChidWZbMF0pKVwKIAkJcmV0dXJuIC1FSU5WQUw7XAogCWlmIChzc2NhbmYoYnVmLCAiJWkiLCAmdmFsKSAhPSAxKVwKQEAgLTE1MTUsMjIgKzE1NTAsMjIgQEAKIAogCiAjZGVmaW5lIExQRkNfQVRUUihuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKQogCiAjZGVmaW5lIExQRkNfQVRUUl9SKG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwsIGRlc2MpIFwKLXN0YXRpYyBpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAotbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCBpbnQsIDApO1wKK3N0YXRpYyB1aW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKK21vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgdWludCwgMCk7XAogTU9EVUxFX1BBUk1fREVTQyhscGZjXyMjbmFtZSwgZGVzYyk7XAogbHBmY19wYXJhbV9zaG93KG5hbWUpXAogbHBmY19wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXAogc3RhdGljIERFVklDRV9BVFRSKGxwZmNfIyNuYW1lLCBTX0lSVUdPICwgbHBmY18jI25hbWUjI19zaG93LCBOVUxMKQogCiAjZGVmaW5lIExQRkNfQVRUUl9SVyhuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfcGFyYW1fc2hvdyhuYW1lKVwKIGxwZmNfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKQEAgLTE1NDAsMTYgKzE1NzUsMTYgQEAKIAkJICAgbHBmY18jI25hbWUjI19zaG93LCBscGZjXyMjbmFtZSMjX3N0b3JlKQogCiAjZGVmaW5lIExQRkNfQVRUUl9IRVhfUihuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfcGFyYW1faGV4X3Nob3cobmFtZSlcCiBscGZjX3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCiBzdGF0aWMgREVWSUNFX0FUVFIobHBmY18jI25hbWUsIFNfSVJVR08gLCBscGZjXyMjbmFtZSMjX3Nob3csIE5VTEwpCiAKICNkZWZpbmUgTFBGQ19BVFRSX0hFWF9SVyhuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfcGFyYW1faGV4X3Nob3cobmFtZSlcCiBscGZjX3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCkBAIC0xNTU5LDIyICsxNTk0LDIyIEBACiAJCSAgIGxwZmNfIyNuYW1lIyNfc2hvdywgbHBmY18jI25hbWUjI19zdG9yZSkKIAogI2RlZmluZSBMUEZDX1ZQT1JUX0FUVFIobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3Zwb3J0X3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCkKIAogI2RlZmluZSBMUEZDX1ZQT1JUX0FUVFJfUihuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfdnBvcnRfcGFyYW1fc2hvdyhuYW1lKVwKIGxwZmNfdnBvcnRfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKIHN0YXRpYyBERVZJQ0VfQVRUUihscGZjXyMjbmFtZSwgU19JUlVHTyAsIGxwZmNfIyNuYW1lIyNfc2hvdywgTlVMTCkKIAogI2RlZmluZSBMUEZDX1ZQT1JUX0FUVFJfUlcobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3Zwb3J0X3BhcmFtX3Nob3cobmFtZSlcCiBscGZjX3Zwb3J0X3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCkBAIC0xNTg0LDE2ICsxNjE5LDE2IEBACiAJCSAgIGxwZmNfIyNuYW1lIyNfc2hvdywgbHBmY18jI25hbWUjI19zdG9yZSkKIAogI2RlZmluZSBMUEZDX1ZQT1JUX0FUVFJfSEVYX1IobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3Zwb3J0X3BhcmFtX2hleF9zaG93KG5hbWUpXAogbHBmY192cG9ydF9wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXAogc3RhdGljIERFVklDRV9BVFRSKGxwZmNfIyNuYW1lLCBTX0lSVUdPICwgbHBmY18jI25hbWUjI19zaG93LCBOVUxMKQogCiAjZGVmaW5lIExQRkNfVlBPUlRfQVRUUl9IRVhfUlcobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3Zwb3J0X3BhcmFtX2hleF9zaG93KG5hbWUpXAogbHBmY192cG9ydF9wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXApAQCAtMTYxNCw3ICsxNjQ5LDggQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihwb3J0bnVtLCBTX0lSVUdPLCBscGZjX3Zwb3J0bnVtX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGZ3cmV2LCBTX0lSVUdPLCBscGZjX2Z3cmV2X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGhkdywgU19JUlVHTywgbHBmY19oZHdfc2hvdywgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIobGlua19zdGF0ZSwgU19JUlVHTywgbHBmY19saW5rX3N0YXRlX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGxpbmtfc3RhdGUsIFNfSVJVR08gfCBTX0lXVVNSLCBscGZjX2xpbmtfc3RhdGVfc2hvdywKKwkJbHBmY19saW5rX3N0YXRlX3N0b3JlKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihvcHRpb25fcm9tX3ZlcnNpb24sIFNfSVJVR08sCiAJCSAgIGxwZmNfb3B0aW9uX3JvbV92ZXJzaW9uX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKG51bV9kaXNjb3ZlcmVkX3BvcnRzLCBTX0lSVUdPLApAQCAtMTg5Nyw2ICsxOTMzLDE1IEBACiAJCQkgbHBmY19lbmFibGVfbnBpdl9zaG93LCBOVUxMKTsKIAogLyoKKyMgbHBmY19zdXBwcmVzc19saW5rX3VwOiAgQnJpbmcgbGluayB1cCBhdCBpbml0aWFsaXphdGlvbgorIyAgICAgICAgICAgIDB4MCAgPSBicmluZyBsaW5rIHVwIChpc3N1ZSBNQlhfSU5JVF9MSU5LKQorIyAgICAgICAgICAgIDB4MSAgPSBkbyBOT1QgYnJpbmcgbGluayB1cCBhdCBpbml0aWFsaXphdGlvbihNQlhfSU5JVF9MSU5LKQorIyAgICAgICAgICAgIDB4MiAgPSBuZXZlciBicmluZyB1cCBsaW5rCisjIERlZmF1bHQgdmFsdWUgaXMgMC4KKyovCitMUEZDX0FUVFJfUihzdXBwcmVzc19saW5rX3VwLCAwLCAwLCAyLCAiU3VwcHJlc3MgTGluayBVcCBhdCBpbml0aWFsaXphdGlvbiIpOworCisvKgogIyBscGZjX25vZGV2X3RtbzogSWYgc2V0LCBpdCB3aWxsIGhvbGQgYWxsIEkvTyBlcnJvcnMgb24gZGV2aWNlcyB0aGF0IGRpc2FwcGVhcgogIyB1bnRpbCB0aGUgdGltZXIgZXhwaXJlcy4gVmFsdWUgcmFuZ2UgaXMgWzAsMjU1XS4gRGVmYXVsdCB2YWx1ZSBpcyAzMC4KICovCkBAIC0zMTE0LDEyICszMTU5LDEyIEBACiAvKgogIyBscGZjX3VzZV9tc2k6IFVzZSBNU0kgKE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cykgaW4gc3lzdGVtcyB0aGF0CiAjCQlzdXBwb3J0IHRoaXMgZmVhdHVyZQotIyAgICAgICAwICA9IE1TSSBkaXNhYmxlZCAoZGVmYXVsdCkKKyMgICAgICAgMCAgPSBNU0kgZGlzYWJsZWQKICMgICAgICAgMSAgPSBNU0kgZW5hYmxlZAotIyAgICAgICAyICA9IE1TSS1YIGVuYWJsZWQKLSMgVmFsdWUgcmFuZ2UgaXMgWzAsMl0uIERlZmF1bHQgdmFsdWUgaXMgMC4KKyMgICAgICAgMiAgPSBNU0ktWCBlbmFibGVkIChkZWZhdWx0KQorIyBWYWx1ZSByYW5nZSBpcyBbMCwyXS4gRGVmYXVsdCB2YWx1ZSBpcyAyLgogKi8KLUxQRkNfQVRUUl9SKHVzZV9tc2ksIDAsIDAsIDIsICJVc2UgTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHRzICgxKSBvciAiCitMUEZDX0FUVFJfUih1c2VfbXNpLCAyLCAwLCAyLCAiVXNlIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cyAoMSkgb3IgIgogCSAgICAiTVNJLVggKDIpLCBpZiBwb3NzaWJsZSIpOwogCiAvKgpAQCAtMzI3OCw2ICszMzIzLDcgQEAKIAkmZGV2X2F0dHJfbHBmY19wcm90X3NnX3NlZ19jbnQsCiAJJmRldl9hdHRyX2xwZmNfYWVyX3N1cHBvcnQsCiAJJmRldl9hdHRyX2xwZmNfYWVyX3N0YXRlX2NsZWFudXAsCisJJmRldl9hdHRyX2xwZmNfc3VwcHJlc3NfbGlua191cCwKIAlOVUxMLAogfTsKIApAQCAtNDQ1Niw3ICs0NTAyLDcgQEAKIAlscGZjX2hiYV9xdWV1ZV9kZXB0aF9pbml0KHBoYmEsIGxwZmNfaGJhX3F1ZXVlX2RlcHRoKTsKIAlscGZjX2hiYV9sb2dfdmVyYm9zZV9pbml0KHBoYmEsIGxwZmNfbG9nX3ZlcmJvc2UpOwogCWxwZmNfYWVyX3N1cHBvcnRfaW5pdChwaGJhLCBscGZjX2Flcl9zdXBwb3J0KTsKLQorCWxwZmNfc3VwcHJlc3NfbGlua191cF9pbml0KHBoYmEsIGxwZmNfc3VwcHJlc3NfbGlua191cCk7CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYwppbmRleCBhNWQ5MDQ4Li5mM2YxYmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KQEAgLTMzLDYgKzM0LDcgQEAKICNpbmNsdWRlICJscGZjX3NsaS5oIgogI2luY2x1ZGUgImxwZmNfc2xpNC5oIgogI2luY2x1ZGUgImxwZmNfbmwuaCIKKyNpbmNsdWRlICJscGZjX2JzZy5oIgogI2luY2x1ZGUgImxwZmNfZGlzYy5oIgogI2luY2x1ZGUgImxwZmNfc2NzaS5oIgogI2luY2x1ZGUgImxwZmMuaCIKQEAgLTQxLDE0ICs0MywxODMgQEAKICNpbmNsdWRlICJscGZjX3Zwb3J0LmgiCiAjaW5jbHVkZSAibHBmY192ZXJzaW9uLmgiCiAKK3N0cnVjdCBscGZjX2JzZ19ldmVudCB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBrcmVmIGtyZWY7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CisKKwkvKiBFdmVudCB0eXBlIGFuZCB3YWl0ZXIgaWRlbnRpZmllcnMgKi8KKwl1aW50MzJfdCB0eXBlX21hc2s7CisJdWludDMyX3QgcmVxX2lkOworCXVpbnQzMl90IHJlZ19pZDsKKworCS8qIG5leHQgdHdvIGZsYWdzIGFyZSBoZXJlIGZvciB0aGUgYXV0by1kZWxldGUgbG9naWMgKi8KKwl1bnNpZ25lZCBsb25nIHdhaXRfdGltZV9zdGFtcDsKKwlpbnQgd2FpdGluZzsKKworCS8qIHNlZW4gYW5kIG5vdCBzZWVuIGV2ZW50cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRzX3RvX2dldDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50c190b19zZWU7CisKKwkvKiBqb2Igd2FpdGluZyBmb3IgdGhpcyBldmVudCB0byBmaW5pc2ggKi8KKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqc2V0X2pvYjsKK307CisKK3N0cnVjdCBscGZjX2JzZ19pb2NiIHsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYnE7CisJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JxOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqYm1wOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCisJLyogam9iIHdhaXRpbmcgZm9yIHRoaXMgaW9jYiB0byBmaW5pc2ggKi8KKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqc2V0X2pvYjsKK307CisKK3N0cnVjdCBscGZjX2JzZ19tYm94IHsKKwlMUEZDX01CT1hRX3QgKnBtYm94cTsKKwlNQUlMQk9YX3QgKm1iOworCisJLyogam9iIHdhaXRpbmcgZm9yIHRoaXMgbWJveCBjb21tYW5kIHRvIGZpbmlzaCAqLworCXN0cnVjdCBmY19ic2dfam9iICpzZXRfam9iOworfTsKKworI2RlZmluZSBUWVBFX0VWVCAJMQorI2RlZmluZSBUWVBFX0lPQ0IJMgorI2RlZmluZSBUWVBFX01CT1gJMworc3RydWN0IGJzZ19qb2JfZGF0YSB7CisJdWludDMyX3QgdHlwZTsKKwl1bmlvbiB7CisJCXN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0OworCQlzdHJ1Y3QgbHBmY19ic2dfaW9jYiBpb2NiOworCQlzdHJ1Y3QgbHBmY19ic2dfbWJveCBtYm94OworCX0gY29udGV4dF91bjsKK307CisKK3N0cnVjdCBldmVudF9kYXRhIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJdWludDMyX3QgdHlwZTsKKwl1aW50MzJfdCBpbW1lZF9kYXQ7CisJdm9pZCAqZGF0YTsKKwl1aW50MzJfdCBsZW47Cit9OworCisjZGVmaW5lIEJVRl9TWl80SyA0MDk2CisjZGVmaW5lIFNMSV9DVF9FTFhfTE9PUEJBQ0sgMHgxMAorCitlbnVtIEVMWF9MT09QQkFDS19DTUQgeworCUVMWF9MT09QQkFDS19YUklfU0VUVVAsCisJRUxYX0xPT1BCQUNLX0RBVEEsCit9OworCisjZGVmaW5lIEVMWF9MT09QQkFDS19IRUFERVJfU1ogXAorCShzaXplX3QpKCYoKHN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICopTlVMTCktPnVuKQorCitzdHJ1Y3QgbHBmY19kbWFidWZleHQgeworCXN0cnVjdCBscGZjX2RtYWJ1ZiBkbWE7CisJdWludDMyX3Qgc2l6ZTsKKwl1aW50MzJfdCBmbGFnOworfTsKKwogLyoqCi0gKiBscGZjX2JzZ19ycG9ydF9jdCAtIHNlbmQgYSBDVCBjb21tYW5kIGZyb20gYSBic2cgcmVxdWVzdAotICogQGpvYjogZmNfYnNnX2pvYiB0byBoYW5kbGUKLSAqLwotc3RhdGljIGludAotbHBmY19ic2dfcnBvcnRfY3Qoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKKyAqIGxwZmNfYnNnX3NlbmRfbWdtdF9jbWRfY21wIC0gbHBmY19ic2dfc2VuZF9tZ210X2NtZCdzIGNvbXBsZXRpb24gaGFuZGxlcgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGNtZGlvY2JxOiBQb2ludGVyIHRvIGNvbW1hbmQgaW9jYi4KKyAqIEByc3Bpb2NicTogUG9pbnRlciB0byByZXNwb25zZSBpb2NiLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgaW9jYnMgaXNzdWVkIHVzaW5nCisgKiBscGZjX2JzZ19zZW5kX21nbXRfY21kIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUKKyAqIHJpbmcgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB3aXRob3V0IGFueSBsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSBjYWxsZWQgZnJvbSBib3RoIHdvcmtlciB0aHJlYWQgY29udGV4dCBhbmQgaW50ZXJydXB0CisgKiBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGFsc28gY2FuIGJlIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkIHdoaWNoCisgKiBjbGVhbnMgdXAgdGhlIFNMSSBsYXllciBvYmplY3RzLgorICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNwb25zZSBpb2NiIHRvIHRoZQorICogcmVzcG9uc2UgaW9jYiBtZW1vcnkgb2JqZWN0IHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgb2YKKyAqIGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdCBhbmQgdGhlbiB3YWtlcyB1cCB0aGUgdGhyZWFkIHdoaWNoCisgKiBzbGVlcHMgZm9yIHRoZSBpb2NiIGNvbXBsZXRpb24uCisgKiovCitzdGF0aWMgdm9pZAorbHBmY19ic2dfc2VuZF9tZ210X2NtZF9jbXAoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JxKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gam9iLT5zaG9zdDsKKwl1bnNpZ25lZCBsb25nIGlmbGFnczsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXN0cnVjdCBmY19ic2dfam9iICpqb2I7CisJSU9DQl90ICpyc3A7CisJc3RydWN0IGxwZmNfZG1hYnVmICpibXA7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CisJc3RydWN0IGxwZmNfYnNnX2lvY2IgKmlvY2I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlkZF9kYXRhID0gY21kaW9jYnEtPmNvbnRleHQxOworCWlmICghZGRfZGF0YSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlpb2NiID0gJmRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYjsKKwlqb2IgPSBpb2NiLT5zZXRfam9iOworCWpvYi0+ZGRfZGF0YSA9IE5VTEw7IC8qIHNvIHRpbWVvdXQgaGFuZGxlciBkb2VzIG5vdCByZXBseSAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJY21kaW9jYnEtPmlvY2JfZmxhZyB8PSBMUEZDX0lPX1dBS0U7CisJaWYgKGNtZGlvY2JxLT5jb250ZXh0MiAmJiByc3Bpb2NicSkKKwkJbWVtY3B5KCYoKHN0cnVjdCBscGZjX2lvY2JxICopY21kaW9jYnEtPmNvbnRleHQyKS0+aW9jYiwKKwkJICAgICAgICZyc3Bpb2NicS0+aW9jYiwgc2l6ZW9mKElPQ0JfdCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisKKwlibXAgPSBpb2NiLT5ibXA7CisJcnNwaW9jYnEgPSBpb2NiLT5yc3Bpb2NicTsKKwlyc3AgPSAmcnNwaW9jYnEtPmlvY2I7CisJbmRscCA9IGlvY2ItPm5kbHA7CisKKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKKworCWlmIChyc3AtPnVscFN0YXR1cykgeworCQlpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkgeworCQkJc3dpdGNoIChyc3AtPnVuLnVscFdvcmRbNF0gJiAweGZmKSB7CisJCQljYXNlIElPRVJSX1NFUVVFTkNFX1RJTUVPVVQ6CisJCQkJcmMgPSAtRVRJTUVET1VUOworCQkJCWJyZWFrOworCQkJY2FzZSBJT0VSUl9JTlZBTElEX1JQSToKKwkJCQlyYyA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJjID0gLUVBQ0NFUzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlCisJCQlyYyA9IC1FQUNDRVM7CisJfSBlbHNlCisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQlyc3AtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplOworCisJbHBmY19tYnVmX2ZyZWUocGhiYSwgYm1wLT52aXJ0LCBibXAtPnBoeXMpOworCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOworCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOworCWxwZmNfbmxwX3B1dChuZGxwKTsKKwlrZnJlZShibXApOworCWtmcmVlKGRkX2RhdGEpOworCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+am9iX2RvbmUoam9iKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJcmV0dXJuOworfQorCisvKioKKyAqIGxwZmNfYnNnX3NlbmRfbWdtdF9jbWQgLSBzZW5kIGEgQ1QgY29tbWFuZCBmcm9tIGEgYnNnIHJlcXVlc3QKKyAqIEBqb2I6IGZjX2JzZ19qb2IgdG8gaGFuZGxlCisgKiovCitzdGF0aWMgaW50CitscGZjX2JzZ19zZW5kX21nbXRfY21kKHN0cnVjdCBmY19ic2dfam9iICpqb2IpCit7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGEgPSBqb2ItPnJwb3J0LT5kZF9kYXRhOwpAQCAtNjUsNTcgKzIzNiw2MCBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlbCA9IE5VTEw7CiAJaW50IG51bWJkZTsKIAlkbWFfYWRkcl90IGJ1c2FkZHI7CisJc3RydWN0IGJzZ19qb2JfZGF0YSAqZGRfZGF0YTsKKwl1aW50MzJfdCBjcmVnX3ZhbDsKIAlpbnQgcmMgPSAwOwogCiAJLyogaW4gY2FzZSBubyBkYXRhIGlzIHRyYW5zZmVycmVkICovCiAJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAorCS8qIGFsbG9jYXRlIG91ciBic2cgdHJhY2tpbmcgc3RydWN0dXJlICovCisJZGRfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBic2dfam9iX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRkX2RhdGEpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjczMyBGYWlsZWQgYWxsb2NhdGlvbiBvZiBkZF9kYXRhXG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG5vX2RkX2RhdGE7CisJfQorCiAJaWYgKCFscGZjX25scF9nZXQobmRscCkpIHsKLQkJam9iLT5yZXBseS0+cmVzdWx0ID0gLUVOT0RFVjsKLQkJcmV0dXJuIDA7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBub19uZGxwOworCX0KKworCWJtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZiksIEdGUF9LRVJORUwpOworCWlmICghYm1wKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBmcmVlX25kbHA7CiAJfQogCiAJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX0VMU19TTkRfTUFTSykgewogCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gZnJlZV9uZGxwX2V4aXQ7CisJCWdvdG8gZnJlZV9ibXA7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAljbWRpb2NicSA9IGxwZmNfc2xpX2dldF9pb2NicShwaGJhKTsKIAlpZiAoIWNtZGlvY2JxKSB7CiAJCXJjID0gLUVOT01FTTsKLQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQlnb3RvIGZyZWVfbmRscF9leGl0OworCQlnb3RvIGZyZWVfYm1wOwogCX0KLQljbWQgPSAmY21kaW9jYnEtPmlvY2I7CiAKKwljbWQgPSAmY21kaW9jYnEtPmlvY2I7CiAJcnNwaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CiAJaWYgKCFyc3Bpb2NicSkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZnJlZV9jbWRpb2NicTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCiAJcnNwID0gJnJzcGlvY2JxLT5pb2NiOwotCi0JYm1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZG1hYnVmKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFibXApIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQlnb3RvIGZyZWVfcnNwaW9jYnE7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAlibXAtPnZpcnQgPSBscGZjX21idWZfYWxsb2MocGhiYSwgMCwgJmJtcC0+cGh5cyk7CiAJaWYgKCFibXAtPnZpcnQpIHsKIAkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWVfYm1wOworCQlnb3RvIGZyZWVfcnNwaW9jYnE7CiAJfQotCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAogCUlOSVRfTElTVF9IRUFEKCZibXAtPmxpc3QpOwogCWJwbCA9IChzdHJ1Y3QgdWxwX2JkZTY0ICopIGJtcC0+dmlydDsKLQogCXJlcXVlc3RfbnNlZyA9IHBjaV9tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAogCQkJCSAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKIAlmb3JfZWFjaF9zZyhqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LCBzZ2VsLCByZXF1ZXN0X25zZWcsIG51bWJkZSkgewpAQCAtMTU3LDc4ICszMzEsMTUyIEBACiAJY21kLT51bHBDb250ZXh0ID0gbmRscC0+bmxwX3JwaTsKIAljbWQtPnVscE93bmVyID0gT1dOX0NISVA7CiAJY21kaW9jYnEtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7Ci0JY21kaW9jYnEtPmNvbnRleHQxID0gTlVMTDsKLQljbWRpb2NicS0+Y29udGV4dDIgPSBOVUxMOworCWNtZGlvY2JxLT5jb250ZXh0MyA9IGJtcDsKIAljbWRpb2NicS0+aW9jYl9mbGFnIHw9IExQRkNfSU9fTElCREZDOwotCiAJdGltZW91dCA9IHBoYmEtPmZjX3JhdG92ICogMjsKLQlqb2ItPmRkX2RhdGEgPSBjbWRpb2NicTsKKwljbWQtPnVscFRpbWVvdXQgPSB0aW1lb3V0OwogCi0JcmMgPSBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQocGhiYSwgTFBGQ19FTFNfUklORywgY21kaW9jYnEsIHJzcGlvY2JxLAotCQkJCQl0aW1lb3V0ICsgTFBGQ19EUlZSX1RJTUVPVVQpOworCWNtZGlvY2JxLT5pb2NiX2NtcGwgPSBscGZjX2JzZ19zZW5kX21nbXRfY21kX2NtcDsKKwljbWRpb2NicS0+Y29udGV4dDEgPSBkZF9kYXRhOworCWNtZGlvY2JxLT5jb250ZXh0MiA9IHJzcGlvY2JxOworCWRkX2RhdGEtPnR5cGUgPSBUWVBFX0lPQ0I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmNtZGlvY2JxID0gY21kaW9jYnE7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnJzcGlvY2JxID0gcnNwaW9jYnE7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnNldF9qb2IgPSBqb2I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmJtcCA9IGJtcDsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IubmRscCA9IG5kbHA7CiAKLQlpZiAocmMgIT0gSU9DQl9USU1FRE9VVCkgewotCQlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAotCQkJICAgICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOwotCQlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKLQkJCSAgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkgeworCQljcmVnX3ZhbCA9IHJlYWRsKHBoYmEtPkhDcmVnYWRkcik7CisJCWNyZWdfdmFsIHw9IChIQ19SMElOVF9FTkEgPDwgTFBGQ19GQ1BfUklORyk7CisJCXdyaXRlbChjcmVnX3ZhbCwgcGhiYS0+SENyZWdhZGRyKTsKKwkJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KIAl9CiAKLQlpZiAocmMgPT0gSU9DQl9USU1FRE9VVCkgewotCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIHJzcGlvY2JxKTsKLQkJcmMgPSAtRUFDQ0VTOwotCQlnb3RvIGZyZWVfbmRscF9leGl0OwotCX0KKwlyYyA9IGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgTFBGQ19FTFNfUklORywgY21kaW9jYnEsIDApOwogCi0JaWYgKHJjICE9IElPQ0JfU1VDQ0VTUykgewotCQlyYyA9IC1FQUNDRVM7Ci0JCWdvdG8gZnJlZV9vdXRkbXA7Ci0JfQorCWlmIChyYyA9PSBJT0NCX1NVQ0NFU1MpCisJCXJldHVybiAwOyAvKiBkb25lIGZvciBub3cgKi8KIAotCWlmIChyc3AtPnVscFN0YXR1cykgewotCQlpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkgewotCQkJc3dpdGNoIChyc3AtPnVuLnVscFdvcmRbNF0gJiAweGZmKSB7Ci0JCQljYXNlIElPRVJSX1NFUVVFTkNFX1RJTUVPVVQ6Ci0JCQkJcmMgPSAtRVRJTUVET1VUOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJT0VSUl9JTlZBTElEX1JQSToKLQkJCQlyYyA9IC1FRkFVTFQ7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXJjID0gLUVBQ0NFUzsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWdvdG8gZnJlZV9vdXRkbXA7Ci0JCX0KLQl9IGVsc2UKLQkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KLQkJCXJzcC0+dW4uZ2VucmVxNjQuYmRsLmJkZVNpemU7CisJLyogaW9jYiBmYWlsZWQgc28gY2xlYW51cCAqLworCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJICAgICBqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOwogCi1mcmVlX291dGRtcDoKLQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGJtcC0+dmlydCwgYm1wLT5waHlzKTsKLWZyZWVfYm1wOgotCWtmcmVlKGJtcCk7CisKIGZyZWVfcnNwaW9jYnE6CiAJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CiBmcmVlX2NtZGlvY2JxOgogCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOwotCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLWZyZWVfbmRscF9leGl0OgorZnJlZV9ibXA6CisJa2ZyZWUoYm1wKTsKK2ZyZWVfbmRscDoKIAlscGZjX25scF9wdXQobmRscCk7Ci0KK25vX25kbHA6CisJa2ZyZWUoZGRfZGF0YSk7Citub19kZF9kYXRhOgogCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCiAJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbHBmY19ic2dfcnBvcnRfZWxzX2NtcCAtIGxwZmNfYnNnX3Jwb3J0X2VscydzIGNvbXBsZXRpb24gaGFuZGxlcgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGNtZGlvY2JxOiBQb2ludGVyIHRvIGNvbW1hbmQgaW9jYi4KKyAqIEByc3Bpb2NicTogUG9pbnRlciB0byByZXNwb25zZSBpb2NiLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgaW9jYnMgaXNzdWVkIHVzaW5nCisgKiBscGZjX2JzZ19ycG9ydF9lbHNfY21wIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUKKyAqIHJpbmcgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB3aXRob3V0IGFueSBsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSBjYWxsZWQgZnJvbSBib3RoIHdvcmtlciB0aHJlYWQgY29udGV4dCBhbmQgaW50ZXJydXB0CisgKiBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGFsc28gY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIHRocmVhZCB3aGljaAorICogY2xlYW5zIHVwIHRoZSBTTEkgbGF5ZXIgb2JqZWN0cy4KKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzcG9uc2UgaW9jYiB0byB0aGUKKyAqIHJlc3BvbnNlIGlvY2IgbWVtb3J5IG9iamVjdCBwcm92aWRlZCBieSB0aGUgY2FsbGVyIG9mCisgKiBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQgYW5kIHRoZW4gd2FrZXMgdXAgdGhlIHRocmVhZCB3aGljaAorICogc2xlZXBzIGZvciB0aGUgaW9jYiBjb21wbGV0aW9uLgorICoqLworc3RhdGljIHZvaWQKK2xwZmNfYnNnX3Jwb3J0X2Vsc19jbXAoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JxKQoreworCXN0cnVjdCBic2dfam9iX2RhdGEgKmRkX2RhdGE7CisJc3RydWN0IGZjX2JzZ19qb2IgKmpvYjsKKwlJT0NCX3QgKnJzcDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKnBidWZsaXN0ID0gTlVMTDsKKwlzdHJ1Y3QgZmNfYnNnX2N0ZWxzX3JlcGx5ICplbHNfcmVwbHk7CisJdWludDhfdCAqcmp0X2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlkZF9kYXRhID0gY21kaW9jYnEtPmNvbnRleHQxOworCS8qIG5vcm1hbCBjb21wbGV0aW9uIGFuZCB0aW1lb3V0IGNyb3NzZWQgcGF0aHMsIGFscmVhZHkgZG9uZSAqLworCWlmICghZGRfZGF0YSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwljbWRpb2NicS0+aW9jYl9mbGFnIHw9IExQRkNfSU9fV0FLRTsKKwlpZiAoY21kaW9jYnEtPmNvbnRleHQyICYmIHJzcGlvY2JxKQorCQltZW1jcHkoJigoc3RydWN0IGxwZmNfaW9jYnEgKiljbWRpb2NicS0+Y29udGV4dDIpLT5pb2NiLAorCQkgICAgICAgJnJzcGlvY2JxLT5pb2NiLCBzaXplb2YoSU9DQl90KSk7CisKKwlqb2IgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2Iuc2V0X2pvYjsKKwljbWRpb2NicSA9IGRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5jbWRpb2NicTsKKwlyc3Bpb2NicSA9IGRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5yc3Bpb2NicTsKKwlyc3AgPSAmcnNwaW9jYnEtPmlvY2I7CisJbmRscCA9IGRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5uZGxwOworCisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJICAgICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisKKwlpZiAoam9iLT5yZXBseS0+cmVzdWx0ID09IC1FQUdBSU4pCisJCXJjID0gLUVBR0FJTjsKKwllbHNlIGlmIChyc3AtPnVscFN0YXR1cyA9PSBJT1NUQVRfU1VDQ0VTUykKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJCXJzcC0+dW4uZWxzcmVxNjQuYmRsLmJkZVNpemU7CisJZWxzZSBpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xTX1JKVCkgeworCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJc2l6ZW9mKHN0cnVjdCBmY19ic2dfY3RlbHNfcmVwbHkpOworCQkvKiBMU19SSlQgZGF0YSByZXR1cm5lZCBpbiB3b3JkIDQgKi8KKwkJcmp0X2RhdGEgPSAodWludDhfdCAqKSZyc3AtPnVuLnVscFdvcmRbNF07CisJCWVsc19yZXBseSA9ICZqb2ItPnJlcGx5LT5yZXBseV9kYXRhLmN0ZWxzX3JlcGx5OworCQllbHNfcmVwbHktPnN0YXR1cyA9IEZDX0NURUxTX1NUQVRVU19SRUpFQ1Q7CisJCWVsc19yZXBseS0+cmp0X2RhdGEuYWN0aW9uID0gcmp0X2RhdGFbM107CisJCWVsc19yZXBseS0+cmp0X2RhdGEucmVhc29uX2NvZGUgPSByanRfZGF0YVsyXTsKKwkJZWxzX3JlcGx5LT5yanRfZGF0YS5yZWFzb25fZXhwbGFuYXRpb24gPSByanRfZGF0YVsxXTsKKwkJZWxzX3JlcGx5LT5yanRfZGF0YS52ZW5kb3JfdW5pcXVlID0gcmp0X2RhdGFbMF07CisJfSBlbHNlCisJCXJjID0gLUVJTzsKKworCXBidWZsaXN0ID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBjbWRpb2NicS0+Y29udGV4dDM7CisJbHBmY19tYnVmX2ZyZWUocGhiYSwgcGJ1Zmxpc3QtPnZpcnQsIHBidWZsaXN0LT5waHlzKTsKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIHJzcGlvY2JxKTsKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2JxKTsKKwlscGZjX25scF9wdXQobmRscCk7CisJa2ZyZWUoZGRfZGF0YSk7CisJLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KKwlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOwogCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgKi8KIAlqb2ItPmpvYl9kb25lKGpvYik7Ci0KLQlyZXR1cm4gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJcmV0dXJuOwogfQogCiAvKioKICAqIGxwZmNfYnNnX3Jwb3J0X2VscyAtIHNlbmQgYW4gRUxTIGNvbW1hbmQgZnJvbSBhIGJzZyByZXF1ZXN0CiAgKiBAam9iOiBmY19ic2dfam9iIHRvIGhhbmRsZQotICovCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2JzZ19ycG9ydF9lbHMoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKIHsKQEAgLTIzNiw3ICs0ODQsNiBAQAogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOwogCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhID0gam9iLT5ycG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IHJkYXRhLT5wbm9kZTsKLQogCXVpbnQzMl90IGVsc2NtZDsKIAl1aW50MzJfdCBjbWRzaXplOwogCXVpbnQzMl90IHJzcHNpemU7CkBAIC0yNDgsMjAgKzQ5NSwzMCBAQAogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqcHJzcDsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKnBidWZsaXN0ID0gTlVMTDsKIAlzdHJ1Y3QgdWxwX2JkZTY0ICpicGw7Ci0JaW50IGlvY2Jfc3RhdHVzOwogCWludCByZXF1ZXN0X25zZWc7CiAJaW50IHJlcGx5X25zZWc7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2VsID0gTlVMTDsKIAlpbnQgbnVtYmRlOwogCWRtYV9hZGRyX3QgYnVzYWRkcjsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXVpbnQzMl90IGNyZWdfdmFsOwogCWludCByYyA9IDA7CiAKIAkvKiBpbiBjYXNlIG5vIGRhdGEgaXMgdHJhbnNmZXJyZWQgKi8KIAlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOwogCisJLyogYWxsb2NhdGUgb3VyIGJzZyB0cmFja2luZyBzdHJ1Y3R1cmUgKi8KKwlkZF9kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJzZ19qb2JfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGRfZGF0YSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzM1IEZhaWxlZCBhbGxvY2F0aW9uIG9mIGRkX2RhdGFcbiIpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbm9fZGRfZGF0YTsKKwl9CisKIAlpZiAoIWxwZmNfbmxwX2dldChuZGxwKSkgewogCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OworCQlnb3RvIGZyZWVfZGRfZGF0YTsKIAl9CiAKIAllbHNjbWQgPSBqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5yX2Vscy5lbHNfY29kZTsKQEAgLTI3MSwyNCArNTI4LDI0IEBACiAJaWYgKCFyc3Bpb2NicSkgewogCQlscGZjX25scF9wdXQobmRscCk7CiAJCXJjID0gLUVOT01FTTsKLQkJZ290byBvdXQ7CisJCWdvdG8gZnJlZV9kZF9kYXRhOwogCX0KIAogCXJzcCA9ICZyc3Bpb2NicS0+aW9jYjsKIAlycGkgPSBuZGxwLT5ubHBfcnBpOwogCi0JY21kaW9jYnEgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYS0+cHBvcnQsIDEsIGNtZHNpemUsIDAsIG5kbHAsCisJY21kaW9jYnEgPSBscGZjX3ByZXBfZWxzX2lvY2IodnBvcnQsIDEsIGNtZHNpemUsIDAsIG5kbHAsCiAJCQkJICAgICAgbmRscC0+bmxwX0RJRCwgZWxzY21kKTsKLQogCWlmICghY21kaW9jYnEpIHsKLQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7Ci0JCXJldHVybiAtRUlPOworCQlyYyA9IC1FSU87CisJCWdvdG8gZnJlZV9yc3Bpb2NicTsKIAl9CiAKLQlqb2ItPmRkX2RhdGEgPSBjbWRpb2NicTsKKwkvKiBwcmVwIGVscyBpb2NiIHNldCBjb250ZXh0MSB0byB0aGUgbmRscCwgY29udGV4dDIgdG8gdGhlIGNvbW1hbmQKKwkgKiBkbWFidWYsIGNvbnRleHQzIGhvbGRzIHRoZSBkYXRhIGRtYWJ1ZgorCSAqLwogCXBjbWQgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIGNtZGlvY2JxLT5jb250ZXh0MjsKIAlwcnNwID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBwY21kLT5saXN0Lm5leHQ7Ci0KIAlscGZjX21idWZfZnJlZShwaGJhLCBwY21kLT52aXJ0LCBwY21kLT5waHlzKTsKIAlrZnJlZShwY21kKTsKIAlscGZjX21idWZfZnJlZShwaGJhLCBwcnNwLT52aXJ0LCBwcnNwLT5waHlzKTsKQEAgLTMwMCw3ICs1NTcsNiBAQAogCiAJcmVxdWVzdF9uc2VnID0gcGNpX21hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCiAJCQkJICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOwotCiAJZm9yX2VhY2hfc2coam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwgc2dlbCwgcmVxdWVzdF9uc2VnLCBudW1iZGUpIHsKIAkJYnVzYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnZWwpOwogCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NDsKQEAgLTMyMiw3ICs1NzgsNiBAQAogCQlicGwtPmFkZHJIaWdoID0gY3B1X3RvX2xlMzIocHV0UGFkZHJIaWdoKGJ1c2FkZHIpKTsKIAkJYnBsKys7CiAJfQotCiAJY21kaW9jYnEtPmlvY2IudW4uZWxzcmVxNjQuYmRsLmJkZVNpemUgPQogCQkocmVxdWVzdF9uc2VnICsgcmVwbHlfbnNlZykgKiBzaXplb2Yoc3RydWN0IHVscF9iZGU2NCk7CiAJY21kaW9jYnEtPmlvY2IudWxwQ29udGV4dCA9IHJwaTsKQEAgLTMzMCwxMDIgKzU4NSw2MiBAQAogCWNtZGlvY2JxLT5jb250ZXh0MSA9IE5VTEw7CiAJY21kaW9jYnEtPmNvbnRleHQyID0gTlVMTDsKIAotCWlvY2Jfc3RhdHVzID0gbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0KHBoYmEsIExQRkNfRUxTX1JJTkcsIGNtZGlvY2JxLAotCQkJCQlyc3Bpb2NicSwgKHBoYmEtPmZjX3JhdG92ICogMikKLQkJCQkJICAgICAgICsgTFBGQ19EUlZSX1RJTUVPVVQpOworCWNtZGlvY2JxLT5pb2NiX2NtcGwgPSBscGZjX2JzZ19ycG9ydF9lbHNfY21wOworCWNtZGlvY2JxLT5jb250ZXh0MSA9IGRkX2RhdGE7CisJY21kaW9jYnEtPmNvbnRleHQyID0gcnNwaW9jYnE7CisJZGRfZGF0YS0+dHlwZSA9IFRZUEVfSU9DQjsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuY21kaW9jYnEgPSBjbWRpb2NicTsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IucnNwaW9jYnEgPSByc3Bpb2NicTsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2Iuc2V0X2pvYiA9IGpvYjsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuYm1wID0gTlVMTDs7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLm5kbHAgPSBuZGxwOwogCi0JLyogcmVsZWFzZSB0aGUgbmV3IG5kbHAgb25jZSB0aGUgaW9jYiBjb21wbGV0ZXMgKi8KLQlscGZjX25scF9wdXQobmRscCk7Ci0JaWYgKGlvY2Jfc3RhdHVzICE9IElPQ0JfVElNRURPVVQpIHsKLQkJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKLQkJCSAgICAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKLQkJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCi0JCQkgICAgIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKHBoYmEtPmNmZ19wb2xsICYgRElTQUJMRV9GQ1BfUklOR19JTlQpIHsKKwkJY3JlZ192YWwgPSByZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOworCQljcmVnX3ZhbCB8PSAoSENfUjBJTlRfRU5BIDw8IExQRkNfRkNQX1JJTkcpOworCQl3cml0ZWwoY3JlZ192YWwsIHBoYmEtPkhDcmVnYWRkcik7CisJCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCiAJfQorCXJjID0gbHBmY19zbGlfaXNzdWVfaW9jYihwaGJhLCBMUEZDX0VMU19SSU5HLCBjbWRpb2NicSwgMCk7CisJbHBmY19ubHBfcHV0KG5kbHApOworCWlmIChyYyA9PSBJT0NCX1NVQ0NFU1MpCisJCXJldHVybiAwOyAvKiBkb25lIGZvciBub3cgKi8KIAotCWlmIChpb2NiX3N0YXR1cyA9PSBJT0NCX1NVQ0NFU1MpIHsKLQkJaWYgKHJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9TVUNDRVNTKSB7Ci0JCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQotCQkJCXJzcC0+dW4uZWxzcmVxNjQuYmRsLmJkZVNpemU7Ci0JCQlyYyA9IDA7Ci0JCX0gZWxzZSBpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xTX1JKVCkgewotCQkJc3RydWN0IGZjX2JzZ19jdGVsc19yZXBseSAqZWxzX3JlcGx5OwotCQkJLyogTFNfUkpUIGRhdGEgcmV0dXJuZWQgaW4gd29yZCA0ICovCi0JCQl1aW50OF90ICpyanRfZGF0YSA9ICh1aW50OF90ICopJnJzcC0+dW4udWxwV29yZFs0XTsKKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKIAotCQkJZWxzX3JlcGx5ID0gJmpvYi0+cmVwbHktPnJlcGx5X2RhdGEuY3RlbHNfcmVwbHk7Ci0JCQlqb2ItPnJlcGx5LT5yZXN1bHQgPSAwOwotCQkJZWxzX3JlcGx5LT5zdGF0dXMgPSBGQ19DVEVMU19TVEFUVVNfUkVKRUNUOwotCQkJZWxzX3JlcGx5LT5yanRfZGF0YS5hY3Rpb24gPSByanRfZGF0YVswXTsKLQkJCWVsc19yZXBseS0+cmp0X2RhdGEucmVhc29uX2NvZGUgPSByanRfZGF0YVsxXTsKLQkJCWVsc19yZXBseS0+cmp0X2RhdGEucmVhc29uX2V4cGxhbmF0aW9uID0gcmp0X2RhdGFbMl07Ci0JCQllbHNfcmVwbHktPnJqdF9kYXRhLnZlbmRvcl91bmlxdWUgPSByanRfZGF0YVszXTsKLQkJfSBlbHNlCi0JCQlyYyA9IC1FSU87Ci0JfSBlbHNlCi0JCXJjID0gLUVJTzsKKwlscGZjX21idWZfZnJlZShwaGJhLCBwYnVmbGlzdC0+dmlydCwgcGJ1Zmxpc3QtPnBoeXMpOwogCi0JaWYgKGlvY2Jfc3RhdHVzICE9IElPQ0JfVElNRURPVVQpCi0JCWxwZmNfZWxzX2ZyZWVfaW9jYihwaGJhLCBjbWRpb2NicSk7CisJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBjbWRpb2NicSk7CiAKK2ZyZWVfcnNwaW9jYnE6CiAJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CiAKLW91dDoKK2ZyZWVfZGRfZGF0YToKKwlrZnJlZShkZF9kYXRhKTsKKworbm9fZGRfZGF0YToKIAkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLwogCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOwotCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgKi8KLQlqb2ItPmpvYl9kb25lKGpvYik7Ci0KLQlyZXR1cm4gMDsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOworCXJldHVybiByYzsKIH0KIAotc3RydWN0IGxwZmNfY3RfZXZlbnQgewotCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQlpbnQgcmVmOwotCXdhaXRfcXVldWVfaGVhZF90IHdxOwotCi0JLyogRXZlbnQgdHlwZSBhbmQgd2FpdGVyIGlkZW50aWZpZXJzICovCi0JdWludDMyX3QgdHlwZV9tYXNrOwotCXVpbnQzMl90IHJlcV9pZDsKLQl1aW50MzJfdCByZWdfaWQ7Ci0KLQkvKiBuZXh0IHR3byBmbGFncyBhcmUgaGVyZSBmb3IgdGhlIGF1dG8tZGVsZXRlIGxvZ2ljICovCi0JdW5zaWduZWQgbG9uZyB3YWl0X3RpbWVfc3RhbXA7Ci0JaW50IHdhaXRpbmc7Ci0KLQkvKiBzZWVuIGFuZCBub3Qgc2VlbiBldmVudHMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50c190b19nZXQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCBldmVudHNfdG9fc2VlOwotfTsKLQotc3RydWN0IGV2ZW50X2RhdGEgewotCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQl1aW50MzJfdCB0eXBlOwotCXVpbnQzMl90IGltbWVkX2RhdDsKLQl2b2lkICpkYXRhOwotCXVpbnQzMl90IGxlbjsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbHBmY19jdF9ldmVudCAqCi1scGZjX2N0X2V2ZW50X25ldyhpbnQgZXZfcmVnX2lkLCB1aW50MzJfdCBldl9yZXFfaWQpCi17Ci0Jc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dCA9IGt6YWxsb2Moc2l6ZW9mKCpldnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWV2dCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlJTklUX0xJU1RfSEVBRCgmZXZ0LT5ldmVudHNfdG9fZ2V0KTsKLQlJTklUX0xJU1RfSEVBRCgmZXZ0LT5ldmVudHNfdG9fc2VlKTsKLQlldnQtPnJlcV9pZCA9IGV2X3JlcV9pZDsKLQlldnQtPnJlZ19pZCA9IGV2X3JlZ19pZDsKLQlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmZXZ0LT53cSk7Ci0KLQlyZXR1cm4gZXZ0OwotfQotCisvKioKKyAqIGxwZmNfYnNnX2V2ZW50X2ZyZWUgLSBmcmVlcyBhbiBhbGxvY2F0ZWQgZXZlbnQgc3RydWN0dXJlCisgKiBAa3JlZjogUG9pbnRlciB0byBhIGtyZWYuCisgKgorICogQ2FsbGVkIGZyb20ga3JlZl9wdXQuIEJhY2sgY2FzdCB0aGUga3JlZiBpbnRvIGFuIGV2ZW50IHN0cnVjdHVyZSBhZGRyZXNzLgorICogRnJlZSBhbnkgZXZlbnRzIHRvIGdldCwgZGVsZXRlIGFzc29jaWF0ZWQgbm9kZXMsIGZyZWUgYW55IGV2ZW50cyB0byBzZWUsCisgKiBmcmVlIGFueSBkYXRhIHRoZW4gZnJlZSB0aGUgZXZlbnQgaXRzZWxmLgorICoqLwogc3RhdGljIHZvaWQKLWxwZmNfY3RfZXZlbnRfZnJlZShzdHJ1Y3QgbHBmY19jdF9ldmVudCAqZXZ0KQorbHBmY19ic2dfZXZlbnRfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgbHBmY19ic2dfZXZlbnQsCisJCQkJCQkgIGtyZWYpOwogCXN0cnVjdCBldmVudF9kYXRhICplZDsKIAogCWxpc3RfZGVsKCZldnQtPm5vZGUpOwpAQCAtNDQ3LDI1ICs2NjIsODIgQEAKIAlrZnJlZShldnQpOwogfQogCisvKioKKyAqIGxwZmNfYnNnX2V2ZW50X3JlZiAtIGluY3JlbWVudHMgdGhlIGtyZWYgZm9yIGFuIGV2ZW50CisgKiBAZXZ0OiBQb2ludGVyIHRvIGFuIGV2ZW50IHN0cnVjdHVyZS4KKyAqKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotbHBmY19jdF9ldmVudF9yZWYoc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dCkKK2xwZmNfYnNnX2V2ZW50X3JlZihzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dCkKIHsKLQlldnQtPnJlZisrOworCWtyZWZfZ2V0KCZldnQtPmtyZWYpOwogfQogCisvKioKKyAqIGxwZmNfYnNnX2V2ZW50X3VucmVmIC0gVXNlcyBrcmVmX3B1dCB0byBmcmVlIGFuIGV2ZW50IHN0cnVjdHVyZQorICogQGV2dDogUG9pbnRlciB0byBhbiBldmVudCBzdHJ1Y3R1cmUuCisgKiovCiBzdGF0aWMgaW5saW5lIHZvaWQKLWxwZmNfY3RfZXZlbnRfdW5yZWYoc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dCkKK2xwZmNfYnNnX2V2ZW50X3VucmVmKHN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0KQogewotCWlmICgtLWV2dC0+cmVmIDwgMCkKLQkJbHBmY19jdF9ldmVudF9mcmVlKGV2dCk7CisJa3JlZl9wdXQoJmV2dC0+a3JlZiwgbHBmY19ic2dfZXZlbnRfZnJlZSk7CiB9CiAKLSNkZWZpbmUgU0xJX0NUX0VMWF9MT09QQkFDSyAweDEwCisvKioKKyAqIGxwZmNfYnNnX2V2ZW50X25ldyAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgZXZlbnQgc3RydWN0dXJlCisgKiBAZXZfbWFzazogTWFzayBvZiBldmVudHMuCisgKiBAZXZfcmVnX2lkOiBFdmVudCByZWcgaWQuCisgKiBAZXZfcmVxX2lkOiBFdmVudCByZXF1ZXN0IGlkLgorICoqLworc3RhdGljIHN0cnVjdCBscGZjX2JzZ19ldmVudCAqCitscGZjX2JzZ19ldmVudF9uZXcodWludDMyX3QgZXZfbWFzaywgaW50IGV2X3JlZ19pZCwgdWludDMyX3QgZXZfcmVxX2lkKQoreworCXN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0ID0ga3phbGxvYyhzaXplb2YoKmV2dCksIEdGUF9LRVJORUwpOwogCi1lbnVtIEVMWF9MT09QQkFDS19DTUQgewotCUVMWF9MT09QQkFDS19YUklfU0VUVVAsCi0JRUxYX0xPT1BCQUNLX0RBVEEsCi19OworCWlmICghZXZ0KQorCQlyZXR1cm4gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZldnQtPmV2ZW50c190b19nZXQpOworCUlOSVRfTElTVF9IRUFEKCZldnQtPmV2ZW50c190b19zZWUpOworCWV2dC0+dHlwZV9tYXNrID0gZXZfbWFzazsKKwlldnQtPnJlcV9pZCA9IGV2X3JlcV9pZDsKKwlldnQtPnJlZ19pZCA9IGV2X3JlZ19pZDsKKwlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZXZ0LT53cSk7CisJa3JlZl9pbml0KCZldnQtPmtyZWYpOworCXJldHVybiBldnQ7Cit9CisKKy8qKgorICogZGlhZ19jbWRfZGF0YV9mcmVlIC0gRnJlZXMgYW4gbHBmYyBkbWEgYnVmZmVyIGV4dGVuc2lvbgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQG1saXN0OiBQb2ludGVyIHRvIGFuIGxwZmMgZG1hIGJ1ZmZlciBleHRlbnNpb24uCisgKiovCitzdGF0aWMgaW50CitkaWFnX2NtZF9kYXRhX2ZyZWUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19kbWFidWZleHQgKm1saXN0KQoreworCXN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqbWxhc3Q7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQsICpjdXJyLCAqbmV4dDsKKworCWlmICgoIW1saXN0KSB8fCAoIWxwZmNfaXNfbGlua191cChwaGJhKSAmJgorCQkocGhiYS0+bGlua19mbGFnICYgTFNfTE9PUEJBQ0tfTU9ERSkpKSB7CisJCXJldHVybiAwOworCX0KKworCXBjaWRldiA9IHBoYmEtPnBjaWRldjsKKwlsaXN0X2FkZF90YWlsKCZoZWFkLCAmbWxpc3QtPmRtYS5saXN0KTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShjdXJyLCBuZXh0LCAmaGVhZCkgeworCQltbGFzdCA9IGxpc3RfZW50cnkoY3Vyciwgc3RydWN0IGxwZmNfZG1hYnVmZXh0ICwgZG1hLmxpc3QpOworCQlpZiAobWxhc3QtPmRtYS52aXJ0KQorCQkJZG1hX2ZyZWVfY29oZXJlbnQoJnBjaWRldi0+ZGV2LAorCQkJCQkgIG1sYXN0LT5zaXplLAorCQkJCQkgIG1sYXN0LT5kbWEudmlydCwKKwkJCQkJICBtbGFzdC0+ZG1hLnBoeXMpOworCQlrZnJlZShtbGFzdCk7CisJfQorCXJldHVybiAwOworfQogCiAvKioKICAqIGxwZmNfYnNnX2N0X3Vuc29sX2V2ZW50IC0gcHJvY2VzcyBhbiB1bnNvbGljaXRlZCBDVCBjb21tYW5kCkBAIC00NzQsOSArNzQ2LDkgQEAKICAqIEBwaW9jYnE6CiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbiB1bnNvbGljaXRlZCBDVCBjb21tYW5kIGlzIHJlY2VpdmVkLiAgSXQKLSAqIGZvcndhcmRzIHRoZSBldmVudCB0byBhbnkgcHJvY2Vzc2VzIHJlZ2lzdGVyZCB0byByZWNlaXZlIENUIGV2ZW50cy4KLSAqLwotdm9pZAorICogZm9yd2FyZHMgdGhlIGV2ZW50IHRvIGFueSBwcm9jZXNzZXMgcmVnaXN0ZXJlZCB0byByZWNlaXZlIENUIGV2ZW50cy4KKyAqKi8KK2ludAogbHBmY19ic2dfY3RfdW5zb2xfZXZlbnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCQlzdHJ1Y3QgbHBmY19pb2NicSAqcGlvY2JxKQogewpAQCAtNDg0LDcgKzc1Niw3IEBACiAJdWludDMyX3QgY21kOwogCXVpbnQzMl90IGxlbjsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKmRtYWJ1ZiA9IE5VTEw7Ci0Jc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dDsKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dDsKIAlzdHJ1Y3QgZXZlbnRfZGF0YSAqZXZ0X2RhdCA9IE5VTEw7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmlvY2JxOwogCXNpemVfdCBvZmZzZXQgPSAwOwpAQCAtNDk2LDYgKzc2OCw5IEBACiAJc3RydWN0IGxwZmNfZG1hYnVmICpiZGVCdWYyID0gcGlvY2JxLT5jb250ZXh0MzsKIAlzdHJ1Y3QgbHBmY19oYnFfZW50cnkgKmhicWU7CiAJc3RydWN0IGxwZmNfc2xpX2N0X3JlcXVlc3QgKmN0X3JlcTsKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzaXplID0gMDsKIAogCUlOSVRfTElTVF9IRUFEKCZoZWFkKTsKIAlsaXN0X2FkZF90YWlsKCZoZWFkLCAmcGlvY2JxLT5saXN0KTsKQEAgLTUwNCw2ICs3NzksMTAgQEAKIAkgICAgcGlvY2JxLT5pb2NiLnVuLmNvbnQ2NFswXS50dXMuZi5iZGVTaXplID09IDApCiAJCWdvdG8gZXJyb3JfY3RfdW5zb2xfZXhpdDsKIAorCWlmIChwaGJhLT5saW5rX3N0YXRlID09IExQRkNfSEJBX0VSUk9SIHx8CisJCSghKHBoYmEtPnNsaS5zbGlfZmxhZyAmIExQRkNfU0xJX0FDVElWRSkpKQorCQlnb3RvIGVycm9yX2N0X3Vuc29sX2V4aXQ7CisKIAlpZiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKQogCQlkbWFidWYgPSBiZGVCdWYxOwogCWVsc2UgewpAQCAtNTExLDcgKzc5MCw4IEBACiAJCQkJICAgIHBpb2NicS0+aW9jYi51bi5jb250NjRbMF0uYWRkckxvdyk7CiAJCWRtYWJ1ZiA9IGxwZmNfc2xpX3Jpbmdwb3N0YnVmX2dldChwaGJhLCBwcmluZywgZG1hX2FkZHIpOwogCX0KLQorCWlmIChkbWFidWYgPT0gTlVMTCkKKwkJZ290byBlcnJvcl9jdF91bnNvbF9leGl0OwogCWN0X3JlcSA9IChzdHJ1Y3QgbHBmY19zbGlfY3RfcmVxdWVzdCAqKWRtYWJ1Zi0+dmlydDsKIAlldnRfcmVxX2lkID0gY3RfcmVxLT5Gc1R5cGU7CiAJY21kID0gY3RfcmVxLT5Db21tYW5kUmVzcG9uc2UuYml0cy5DbWRSc3A7CkBAIC01MTksMjQgKzc5OSwyNCBAQAogCWlmICghKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19IQlFfRU5BQkxFRCkpCiAJCWxwZmNfc2xpX3Jpbmdwb3N0YnVmX3B1dChwaGJhLCBwcmluZywgZG1hYnVmKTsKIAotCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZ0LCAmcGhiYS0+Y3RfZXZfd2FpdGVycywgbm9kZSkgewotCQlpZiAoZXZ0LT5yZXFfaWQgIT0gZXZ0X3JlcV9pZCkKKwkJaWYgKCEoZXZ0LT50eXBlX21hc2sgJiBGQ19SRUdfQ1RfRVZFTlQpIHx8CisJCQlldnQtPnJlcV9pZCAhPSBldnRfcmVxX2lkKQogCQkJY29udGludWU7CiAKLQkJbHBmY19jdF9ldmVudF9yZWYoZXZ0KTsKLQorCQlscGZjX2JzZ19ldmVudF9yZWYoZXZ0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCQlldnRfZGF0ID0ga3phbGxvYyhzaXplb2YoKmV2dF9kYXQpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFldnRfZGF0KSB7Ci0JCQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7CisJCWlmIChldnRfZGF0ID09IE5VTEwpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCQlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOwogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKIAkJCQkJIjI2MTQgTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciAiCiAJCQkJCSJDVCBldmVudFxuIik7CiAJCQlicmVhazsKIAkJfQogCi0JCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOwotCiAJCWlmIChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpIHsKIAkJCS8qIHRha2UgYWNjdW11bGF0ZWQgYnl0ZSBjb3VudCBmcm9tIHRoZSBsYXN0IGlvY2JxICovCiAJCQlpb2NicSA9IGxpc3RfZW50cnkoaGVhZC5wcmV2LCB0eXBlb2YoKmlvY2JxKSwgbGlzdCk7CkBAIC01NTAsMjUgKzgzMCwyNSBAQAogCQl9CiAKIAkJZXZ0X2RhdC0+ZGF0YSA9IGt6YWxsb2MoZXZ0X2RhdC0+bGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFldnRfZGF0LT5kYXRhKSB7CisJCWlmIChldnRfZGF0LT5kYXRhID09IE5VTEwpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCiAJCQkJCSIyNjE1IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgIgogCQkJCQkiQ1QgZXZlbnQgZGF0YSwgc2l6ZSAlZFxuIiwKIAkJCQkJZXZ0X2RhdC0+bGVuKTsKIAkJCWtmcmVlKGV2dF9kYXQpOwotCQkJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOwotCQkJbHBmY19jdF9ldmVudF91bnJlZihldnQpOwotCQkJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQkJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAkJCWdvdG8gZXJyb3JfY3RfdW5zb2xfZXhpdDsKIAkJfQogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoaW9jYnEsICZoZWFkLCBsaXN0KSB7CisJCQlzaXplID0gMDsKIAkJCWlmIChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpIHsKIAkJCQliZGVCdWYxID0gaW9jYnEtPmNvbnRleHQyOwogCQkJCWJkZUJ1ZjIgPSBpb2NicS0+Y29udGV4dDM7CiAJCQl9CiAJCQlmb3IgKGkgPSAwOyBpIDwgaW9jYnEtPmlvY2IudWxwQmRlQ291bnQ7IGkrKykgewotCQkJCWludCBzaXplID0gMDsKIAkJCQlpZiAocGhiYS0+c2xpM19vcHRpb25zICYKIAkJCQkgICAgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSB7CiAJCQkJCWlmIChpID09IDApIHsKQEAgLTYwMSw5ICs4ODEsMTEgQEAKIAkJCQkJCWlvY2JxKTsKIAkJCQkJa2ZyZWUoZXZ0X2RhdC0+ZGF0YSk7CiAJCQkJCWtmcmVlKGV2dF9kYXQpOwotCQkJCQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7Ci0JCQkJCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsKLQkJCQkJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLAorCQkJCQkJZmxhZ3MpOworCQkJCQlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAorCQkJCQkJJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAkJCQkJZ290byBlcnJvcl9jdF91bnNvbF9leGl0OwogCQkJCX0KIAkJCQltZW1jcHkoKGNoYXIgKikoZXZ0X2RhdC0+ZGF0YSkgKyBvZmZzZXQsCkBAIC02MTYsMTUgKzg5OCwyNCBAQAogCQkJCQkJCQkgZG1hYnVmKTsKIAkJCQl9IGVsc2UgewogCQkJCQlzd2l0Y2ggKGNtZCkgeworCQkJCQljYXNlIEVMWF9MT09QQkFDS19EQVRBOgorCQkJCQkJZGlhZ19jbWRfZGF0YV9mcmVlKHBoYmEsCisJCQkJCQkoc3RydWN0IGxwZmNfZG1hYnVmZXh0ICopCisJCQkJCQkJZG1hYnVmKTsKKwkJCQkJCWJyZWFrOwogCQkJCQljYXNlIEVMWF9MT09QQkFDS19YUklfU0VUVVA6Ci0JCQkJCQlpZiAoIShwaGJhLT5zbGkzX29wdGlvbnMgJgotCQkJCQkJICAgICAgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSkKKwkJCQkJCWlmICgocGhiYS0+c2xpX3JldiA9PQorCQkJCQkJCUxQRkNfU0xJX1JFVjIpIHx8CisJCQkJCQkJKHBoYmEtPnNsaTNfb3B0aW9ucyAmCisJCQkJCQkJTFBGQ19TTEkzX0hCUV9FTkFCTEVECisJCQkJCQkJKSkgeworCQkJCQkJCWxwZmNfaW5fYnVmX2ZyZWUocGhiYSwKKwkJCQkJCQkJCWRtYWJ1Zik7CisJCQkJCQl9IGVsc2UgewogCQkJCQkJCWxwZmNfcG9zdF9idWZmZXIocGhiYSwKIAkJCQkJCQkJCSBwcmluZywKIAkJCQkJCQkJCSAxKTsKLQkJCQkJCWVsc2UKLQkJCQkJCQlscGZjX2luX2J1Zl9mcmVlKHBoYmEsCi0JCQkJCQkJCQlkbWFidWYpOworCQkJCQkJfQogCQkJCQkJYnJlYWs7CiAJCQkJCWRlZmF1bHQ6CiAJCQkJCQlpZiAoIShwaGJhLT5zbGkzX29wdGlvbnMgJgpAQCAtNjM4LDcgKzkyOSw3IEBACiAJCQl9CiAJCX0KIAotCQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpIHsKIAkJCWV2dF9kYXQtPmltbWVkX2RhdCA9IHBoYmEtPmN0eF9pZHg7CiAJCQlwaGJhLT5jdHhfaWR4ID0gKHBoYmEtPmN0eF9pZHggKyAxKSAlIDY0OwpAQCAtNjUxLDEyMiArOTQyLDE0NCBAQAogCiAJCWV2dF9kYXQtPnR5cGUgPSBGQ19SRUdfQ1RfRVZFTlQ7CiAJCWxpc3RfYWRkKCZldnRfZGF0LT5ub2RlLCAmZXZ0LT5ldmVudHNfdG9fc2VlKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZldnQtPndxKTsKLQkJbHBmY19jdF9ldmVudF91bnJlZihldnQpOwotCQlpZiAoZXZ0X3JlcV9pZCA9PSBTTElfQ1RfRUxYX0xPT1BCQUNLKQorCQlpZiAoZXZ0X3JlcV9pZCA9PSBTTElfQ1RfRUxYX0xPT1BCQUNLKSB7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmV2dC0+d3EpOworCQkJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsKIAkJCWJyZWFrOworCQl9CisKKwkJbGlzdF9tb3ZlKGV2dC0+ZXZlbnRzX3RvX3NlZS5wcmV2LCAmZXZ0LT5ldmVudHNfdG9fZ2V0KTsKKwkJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsKKworCQlqb2IgPSBldnQtPnNldF9qb2I7CisJCWV2dC0+c2V0X2pvYiA9IE5VTEw7CisJCWlmIChqb2IpIHsKKwkJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IHNpemU7CisJCQkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCQkJam9iLT5yZXBseS0+cmVzdWx0ID0gMDsKKwkJCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJCQkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCQlqb2ItPmpvYl9kb25lKGpvYik7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQl9CiAJfQotCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAogZXJyb3JfY3RfdW5zb2xfZXhpdDoKIAlpZiAoIWxpc3RfZW1wdHkoJmhlYWQpKQogCQlsaXN0X2RlbCgmaGVhZCk7Ci0KLQlyZXR1cm47CisJaWYgKGV2dF9yZXFfaWQgPT0gU0xJX0NUX0VMWF9MT09QQkFDSykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgotICogbHBmY19ic2dfc2V0X2V2ZW50IC0gcHJvY2VzcyBhIFNFVF9FVkVOVCBic2cgdmVuZG9yIGNvbW1hbmQKKyAqIGxwZmNfYnNnX2hiYV9zZXRfZXZlbnQgLSBwcm9jZXNzIGEgU0VUX0VWRU5UIGJzZyB2ZW5kb3IgY29tbWFuZAogICogQGpvYjogU0VUX0VWRU5UIGZjX2JzZ19qb2IKLSAqLworICoqLwogc3RhdGljIGludAotbHBmY19ic2dfc2V0X2V2ZW50KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCitscGZjX2JzZ19oYmFfc2V0X2V2ZW50KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCiB7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJc3RydWN0IHNldF9jdF9ldmVudCAqZXZlbnRfcmVxOwotCXN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQ7CisJc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQ7CiAJaW50IHJjID0gMDsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhID0gTlVMTDsKKwl1aW50MzJfdCBldl9tYXNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoam9iLT5yZXF1ZXN0X2xlbiA8CiAJICAgIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcXVlc3QpICsgc2l6ZW9mKHN0cnVjdCBzZXRfY3RfZXZlbnQpKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCiAJCQkJIjI2MTIgUmVjZWl2ZWQgU0VUX0NUX0VWRU5UIGJlbG93IG1pbmltdW0gIgogCQkJCSJzaXplXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBqb2JfZXJyb3I7CisJfQorCisJZGRfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBic2dfam9iX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGRfZGF0YSA9PSBOVUxMKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MzQgRmFpbGVkIGFsbG9jYXRpb24gb2YgZGRfZGF0YVxuIik7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBqb2JfZXJyb3I7CiAJfQogCiAJZXZlbnRfcmVxID0gKHN0cnVjdCBzZXRfY3RfZXZlbnQgKikKIAkJam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZDsKLQotCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlldl9tYXNrID0gKCh1aW50MzJfdCkodW5zaWduZWQgbG9uZylldmVudF9yZXEtPnR5cGVfbWFzayAmCisJCQkJRkNfUkVHX0VWRU5UX01BU0spOworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShldnQsICZwaGJhLT5jdF9ldl93YWl0ZXJzLCBub2RlKSB7CiAJCWlmIChldnQtPnJlZ19pZCA9PSBldmVudF9yZXEtPmV2X3JlZ19pZCkgewotCQkJbHBmY19jdF9ldmVudF9yZWYoZXZ0KTsKKwkJCWxwZmNfYnNnX2V2ZW50X3JlZihldnQpOwogCQkJZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCZldnQtPm5vZGUgPT0gJnBoYmEtPmN0X2V2X3dhaXRlcnMpIHsKIAkJLyogbm8gZXZlbnQgd2FpdGluZyBzdHJ1Y3QgeWV0IC0gZmlyc3QgY2FsbCAqLwotCQlldnQgPSBscGZjX2N0X2V2ZW50X25ldyhldmVudF9yZXEtPmV2X3JlZ19pZCwKKwkJZXZ0ID0gbHBmY19ic2dfZXZlbnRfbmV3KGV2X21hc2ssIGV2ZW50X3JlcS0+ZXZfcmVnX2lkLAogCQkJCQlldmVudF9yZXEtPmV2X3JlcV9pZCk7CiAJCWlmICghZXZ0KSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAogCQkJCQkiMjYxNyBGYWlsZWQgYWxsb2NhdGlvbiBvZiBldmVudCAiCiAJCQkJCSJ3YWl0ZXJcbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyYyA9IC1FTk9NRU07CisJCQlnb3RvIGpvYl9lcnJvcjsKIAkJfQogCi0JCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAkJbGlzdF9hZGQoJmV2dC0+bm9kZSwgJnBoYmEtPmN0X2V2X3dhaXRlcnMpOwotCQlscGZjX2N0X2V2ZW50X3JlZihldnQpOwotCQltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwkJbHBmY19ic2dfZXZlbnRfcmVmKGV2dCk7CisJCWV2dC0+d2FpdF90aW1lX3N0YW1wID0gamlmZmllczsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCX0KIAorCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJZXZ0LT53YWl0aW5nID0gMTsKLQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGV2dC0+d3EsCi0JCQkJICAgICAhbGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fc2VlKSkpIHsKLQkJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOwotCQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7IC8qIHJlbGVhc2UgcmVmICovCi0JCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsgLyogZGVsZXRlICovCi0JCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOwotCQlyYyA9IC1FSU5UUjsKLQkJZ290byBzZXRfZXZlbnRfb3V0OwotCX0KKwlkZF9kYXRhLT50eXBlID0gVFlQRV9FVlQ7CisJZGRfZGF0YS0+Y29udGV4dF91bi5ldnQgPSBldnQ7CisJZXZ0LT5zZXRfam9iID0gam9iOyAvKiBmb3IgdW5zb2xpY2l0ZWQgY29tbWFuZCAqLworCWpvYi0+ZGRfZGF0YSA9IGRkX2RhdGE7IC8qIGZvciBmYyB0cmFuc3BvcnQgdGltZW91dCBjYWxsYmFjayovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOyAvKiBjYWxsIGpvYiBkb25lIGxhdGVyICovCiAKLQlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7Ci0JZXZ0LT53YWl0aW5nID0gMDsKK2pvYl9lcnJvcjoKKwlpZiAoZGRfZGF0YSAhPSBOVUxMKQorCQlrZnJlZShkZF9kYXRhKTsKIAotCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQlsaXN0X21vdmUoZXZ0LT5ldmVudHNfdG9fc2VlLnByZXYsICZldnQtPmV2ZW50c190b19nZXQpOwotCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsgLyogcmVsZWFzZSByZWYgKi8KLQltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQotc2V0X2V2ZW50X291dDoKLQkvKiBzZXRfZXZlbnQgY2FycmllcyBubyByZXBseSBwYXlsb2FkICovCi0Jam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKLQkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLwotCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOwotCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgKi8KLQlqb2ItPmpvYl9kb25lKGpvYik7Ci0KLQlyZXR1cm4gMDsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOworCXJldHVybiByYzsKIH0KIAogLyoqCi0gKiBscGZjX2JzZ19nZXRfZXZlbnQgLSBwcm9jZXNzIGEgR0VUX0VWRU5UIGJzZyB2ZW5kb3IgY29tbWFuZAorICogbHBmY19ic2dfaGJhX2dldF9ldmVudCAtIHByb2Nlc3MgYSBHRVRfRVZFTlQgYnNnIHZlbmRvciBjb21tYW5kCiAgKiBAam9iOiBHRVRfRVZFTlQgZmNfYnNnX2pvYgotICovCisgKiovCiBzdGF0aWMgaW50Ci1scGZjX2JzZ19nZXRfZXZlbnQoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK2xwZmNfYnNnX2hiYV9nZXRfZXZlbnQoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKIHsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKilqb2ItPnNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIAlzdHJ1Y3QgZ2V0X2N0X2V2ZW50ICpldmVudF9yZXE7CiAJc3RydWN0IGdldF9jdF9ldmVudF9yZXBseSAqZXZlbnRfcmVwbHk7Ci0Jc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dDsKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dDsKIAlzdHJ1Y3QgZXZlbnRfZGF0YSAqZXZ0X2RhdCA9IE5VTEw7Ci0JaW50IHJjID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVpbnQzMl90IHJjID0gMDsKIAogCWlmIChqb2ItPnJlcXVlc3RfbGVuIDwKIAkgICAgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGdldF9jdF9ldmVudCkpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKIAkJCQkiMjYxMyBSZWNlaXZlZCBHRVRfQ1RfRVZFTlQgcmVxdWVzdCBiZWxvdyAiCiAJCQkJIm1pbmltdW0gc2l6ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gam9iX2Vycm9yOwogCX0KIAogCWV2ZW50X3JlcSA9IChzdHJ1Y3QgZ2V0X2N0X2V2ZW50ICopCkBAIC03NzQsMTMgKzEwODcsMTIgQEAKIAogCWV2ZW50X3JlcGx5ID0gKHN0cnVjdCBnZXRfY3RfZXZlbnRfcmVwbHkgKikKIAkJam9iLT5yZXBseS0+cmVwbHlfZGF0YS52ZW5kb3JfcmVwbHkudmVuZG9yX3JzcDsKLQotCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZ0LCAmcGhiYS0+Y3RfZXZfd2FpdGVycywgbm9kZSkgewogCQlpZiAoZXZ0LT5yZWdfaWQgPT0gZXZlbnRfcmVxLT5ldl9yZWdfaWQpIHsKIAkJCWlmIChsaXN0X2VtcHR5KCZldnQtPmV2ZW50c190b19nZXQpKQogCQkJCWJyZWFrOwotCQkJbHBmY19jdF9ldmVudF9yZWYoZXZ0KTsKKwkJCWxwZmNfYnNnX2V2ZW50X3JlZihldnQpOwogCQkJZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQkJZXZ0X2RhdCA9IGxpc3RfZW50cnkoZXZ0LT5ldmVudHNfdG9fZ2V0LnByZXYsCiAJCQkJCSAgICAgc3RydWN0IGV2ZW50X2RhdGEsIG5vZGUpOwpAQCAtNzg4LDQ1ICsxMTAwLDE1MzkgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAotCWlmICghZXZ0X2RhdCkgeworCS8qIFRoZSBhcHAgbWF5IGNvbnRpbnVlIHRvIGFzayBmb3IgZXZlbnQgZGF0YSB1bnRpbCBpdCBnZXRzCisJICogYW4gZXJyb3IgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGlzbid0IGFueW1vcmUKKwkgKi8KKwlpZiAoZXZ0X2RhdCA9PSBOVUxMKSB7CiAJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CiAJCXJjID0gLUVOT0VOVDsKLQkJZ290byBlcnJvcl9nZXRfZXZlbnRfZXhpdDsKKwkJZ290byBqb2JfZXJyb3I7CiAJfQogCi0JaWYgKGV2dF9kYXQtPmxlbiA+IGpvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbikgewotCQlldnRfZGF0LT5sZW4gPSBqb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW47Ci0JCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAotCQkJCQkiMjYxOCBUcnVuY2F0ZWQgZXZlbnQgZGF0YSBhdCAlZCAiCi0JCQkJCSJieXRlc1xuIiwKLQkJCQkJam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuKTsKKwlpZiAoZXZ0X2RhdC0+bGVuID4gam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW4pIHsKKwkJZXZ0X2RhdC0+bGVuID0gam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI2MTggVHJ1bmNhdGVkIGV2ZW50IGRhdGEgYXQgJWQgIgorCQkJCSJieXRlc1xuIiwKKwkJCQlqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbik7CiAJfQogCisJZXZlbnRfcmVwbHktPnR5cGUgPSBldnRfZGF0LT50eXBlOwogCWV2ZW50X3JlcGx5LT5pbW1lZF9kYXRhID0gZXZ0X2RhdC0+aW1tZWRfZGF0OwotCiAJaWYgKGV2dF9kYXQtPmxlbiA+IDApCiAJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9Ci0JCQlzZ19jb3B5X2Zyb21fYnVmZmVyKGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAotCQkJCQkgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwKKwkJCXNnX2NvcHlfZnJvbV9idWZmZXIoam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCQkJICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwKIAkJCQkJICAgIGV2dF9kYXQtPmRhdGEsIGV2dF9kYXQtPmxlbik7CiAJZWxzZQogCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOwotCXJjID0gMDsKIAotCWlmIChldnRfZGF0KQorCWlmIChldnRfZGF0KSB7CiAJCWtmcmVlKGV2dF9kYXQtPmRhdGEpOwotCWtmcmVlKGV2dF9kYXQpOwotCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7Ci0JbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCWtmcmVlKGV2dF9kYXQpOworCX0KIAotZXJyb3JfZ2V0X2V2ZW50X2V4aXQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOworCWpvYi0+cmVwbHktPnJlc3VsdCA9IDA7CisJam9iLT5qb2JfZG9uZShqb2IpOworCXJldHVybiAwOworCitqb2JfZXJyb3I6CisJam9iLT5kZF9kYXRhID0gTlVMTDsKKwlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbHBmY19pc3N1ZV9jdF9yc3BfY21wIC0gbHBmY19pc3N1ZV9jdF9yc3AncyBjb21wbGV0aW9uIGhhbmRsZXIKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBjbWRpb2NicTogUG9pbnRlciB0byBjb21tYW5kIGlvY2IuCisgKiBAcnNwaW9jYnE6IFBvaW50ZXIgdG8gcmVzcG9uc2UgaW9jYi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIGlvY2JzIGlzc3VlZCB1c2luZworICogbHBmY19pc3N1ZV9jdF9yc3BfY21wIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUKKyAqIHJpbmcgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB3aXRob3V0IGFueSBsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSBjYWxsZWQgZnJvbSBib3RoIHdvcmtlciB0aHJlYWQgY29udGV4dCBhbmQgaW50ZXJydXB0CisgKiBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGFsc28gY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIHRocmVhZCB3aGljaAorICogY2xlYW5zIHVwIHRoZSBTTEkgbGF5ZXIgb2JqZWN0cy4KKyAqIFRoaXMgZnVuY3Rpb24gY29weSB0aGUgY29udGVudHMgb2YgdGhlIHJlc3BvbnNlIGlvY2IgdG8gdGhlCisgKiByZXNwb25zZSBpb2NiIG1lbW9yeSBvYmplY3QgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciBvZgorICogbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0IGFuZCB0aGVuIHdha2VzIHVwIHRoZSB0aHJlYWQgd2hpY2gKKyAqIHNsZWVwcyBmb3IgdGhlIGlvY2IgY29tcGxldGlvbi4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX2lzc3VlX2N0X3JzcF9jbXAoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JxKQoreworCXN0cnVjdCBic2dfam9iX2RhdGEgKmRkX2RhdGE7CisJc3RydWN0IGZjX2JzZ19qb2IgKmpvYjsKKwlJT0NCX3QgKnJzcDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmJtcDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCWRkX2RhdGEgPSBjbWRpb2NicS0+Y29udGV4dDE7CisJLyogbm9ybWFsIGNvbXBsZXRpb24gYW5kIHRpbWVvdXQgY3Jvc3NlZCBwYXRocywgYWxyZWFkeSBkb25lICovCisJaWYgKCFkZF9kYXRhKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWpvYiA9IGRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5zZXRfam9iOworCWJtcCA9IGRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5ibXA7CisJcnNwID0gJnJzcGlvY2JxLT5pb2NiOworCW5kbHAgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IubmRscDsKKworCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKworCWlmIChyc3AtPnVscFN0YXR1cykgeworCQlpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkgeworCQkJc3dpdGNoIChyc3AtPnVuLnVscFdvcmRbNF0gJiAweGZmKSB7CisJCQljYXNlIElPRVJSX1NFUVVFTkNFX1RJTUVPVVQ6CisJCQkJcmMgPSAtRVRJTUVET1VUOworCQkJCWJyZWFrOworCQkJY2FzZSBJT0VSUl9JTlZBTElEX1JQSToKKwkJCQlyYyA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJjID0gLUVBQ0NFUzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlCisJCQlyYyA9IC1FQUNDRVM7CisJfSBlbHNlCisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQlyc3AtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplOworCisJbHBmY19tYnVmX2ZyZWUocGhiYSwgYm1wLT52aXJ0LCBibXAtPnBoeXMpOworCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOworCWxwZmNfbmxwX3B1dChuZGxwKTsKKwlrZnJlZShibXApOworCWtmcmVlKGRkX2RhdGEpOwogCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCiAJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKIAkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlICovCiAJam9iLT5qb2JfZG9uZShqb2IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogbHBmY19pc3N1ZV9jdF9yc3AgLSBpc3N1ZSBhIGN0IHJlc3BvbnNlCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAam9iOiBQb2ludGVyIHRvIHRoZSBqb2Igb2JqZWN0LgorICogQHRhZzogdGFnIGluZGV4IHZhbHVlIGludG8gdGhlIHBvcnRzIGNvbnRleHQgZXhjaGFuZ2UgYXJyYXkuCisgKiBAYm1wOiBQb2ludGVyIHRvIGEgZG1hIGJ1ZmZlciBkZXNjcmlwdG9yLgorICogQG51bV9lbnRyeTogTnVtYmVyIG9mIGVudGllcyBpbiB0aGUgYmRlLgorICoqLworc3RhdGljIGludAorbHBmY19pc3N1ZV9jdF9yc3Aoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iLCB1aW50MzJfdCB0YWcsCisJCSAgc3RydWN0IGxwZmNfZG1hYnVmICpibXAsIGludCBudW1fZW50cnkpCit7CisJSU9DQl90ICppY21kOworCXN0cnVjdCBscGZjX2lvY2JxICpjdGlvY2IgPSBOVUxMOworCWludCByYyA9IDA7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSBOVUxMOworCXN0cnVjdCBic2dfam9iX2RhdGEgKmRkX2RhdGE7CisJdWludDMyX3QgY3JlZ192YWw7CisKKwkvKiBhbGxvY2F0ZSBvdXIgYnNnIHRyYWNraW5nIHN0cnVjdHVyZSAqLworCWRkX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYnNnX2pvYl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZF9kYXRhKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MzYgRmFpbGVkIGFsbG9jYXRpb24gb2YgZGRfZGF0YVxuIik7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBub19kZF9kYXRhOworCX0KKworCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3IgIGNvbW1hbmQgaW9jYiAqLworCWN0aW9jYiA9IGxwZmNfc2xpX2dldF9pb2NicShwaGJhKTsKKwlpZiAoIWN0aW9jYikgeworCQlyYyA9IEVOT01FTTsKKwkJZ290byBub19jdGlvY2I7CisJfQorCisJaWNtZCA9ICZjdGlvY2ItPmlvY2I7CisJaWNtZC0+dW4ueHNlcTY0LmJkbC51bHBJb1RhZzMyID0gMDsKKwlpY21kLT51bi54c2VxNjQuYmRsLmFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKGJtcC0+cGh5cyk7CisJaWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRyTG93ID0gcHV0UGFkZHJMb3coYm1wLT5waHlzKTsKKwlpY21kLT51bi54c2VxNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JMUF82NDsKKwlpY21kLT51bi54c2VxNjQuYmRsLmJkZVNpemUgPSAobnVtX2VudHJ5ICogc2l6ZW9mKHN0cnVjdCB1bHBfYmRlNjQpKTsKKwlpY21kLT51bi54c2VxNjQudzUuaGNzdy5GY3RsID0gKExTIHwgTEEpOworCWljbWQtPnVuLnhzZXE2NC53NS5oY3N3LkRmY3RsID0gMDsKKwlpY21kLT51bi54c2VxNjQudzUuaGNzdy5SY3RsID0gRkNfUkNUTF9ERF9TT0xfQ1RMOworCWljbWQtPnVuLnhzZXE2NC53NS5oY3N3LlR5cGUgPSBGQ19UWVBFX0NUOworCisJLyogRmlsbCBpbiByZXN0IG9mIGlvY2IgKi8KKwlpY21kLT51bHBDb21tYW5kID0gQ01EX1hNSVRfU0VRVUVOQ0U2NF9DWDsKKwlpY21kLT51bHBCZGVDb3VudCA9IDE7CisJaWNtZC0+dWxwTGUgPSAxOworCWljbWQtPnVscENsYXNzID0gQ0xBU1MzOworCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpIHsKKwkJLyogRG8gbm90IGlzc3VlIHVuc29sIHJlc3BvbnNlIGlmIG94aWQgbm90IG1hcmtlZCBhcyB2YWxpZCAqLworCQlpZiAoIShwaGJhLT5jdF9jdHhbdGFnXS5mbGFncyAmIFVOU09MX1ZBTElEKSkgeworCQkJcmMgPSBJT0NCX0VSUk9SOworCQkJZ290byBpc3N1ZV9jdF9yc3BfZXhpdDsKKwkJfQorCQlpY21kLT51bHBDb250ZXh0ID0gcGhiYS0+Y3RfY3R4W3RhZ10ub3hpZDsKKwkJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEtPnBwb3J0LCBwaGJhLT5jdF9jdHhbdGFnXS5TSUQpOworCQlpZiAoIW5kbHApIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19FTFMsCisJCQkJICIyNzIxIG5kbHAgbnVsbCBmb3Igb3hpZCAleCBTSUQgJXhcbiIsCisJCQkJCWljbWQtPnVscENvbnRleHQsCisJCQkJCXBoYmEtPmN0X2N0eFt0YWddLlNJRCk7CisJCQlyYyA9IElPQ0JfRVJST1I7CisJCQlnb3RvIGlzc3VlX2N0X3JzcF9leGl0OworCQl9CisJCWljbWQtPnVuLnVscFdvcmRbM10gPSBuZGxwLT5ubHBfcnBpOworCQkvKiBUaGUgZXhjaGFuZ2UgaXMgZG9uZSwgbWFyayB0aGUgZW50cnkgYXMgaW52YWxpZCAqLworCQlwaGJhLT5jdF9jdHhbdGFnXS5mbGFncyAmPSB+VU5TT0xfVkFMSUQ7CisJfSBlbHNlCisJCWljbWQtPnVscENvbnRleHQgPSAodXNob3J0KSB0YWc7CisKKwlpY21kLT51bHBUaW1lb3V0ID0gcGhiYS0+ZmNfcmF0b3YgKiAyOworCisJLyogWG1pdCBDVCByZXNwb25zZSBvbiBleGNoYW5nZSA8eGlkPiAqLworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19FTFMsCisJCQkiMjcyMiBYbWl0IENUIHJlc3BvbnNlIG9uIGV4Y2hhbmdlIHgleCBEYXRhOiB4JXggeCV4XG4iLAorCQkJaWNtZC0+dWxwQ29udGV4dCwgaWNtZC0+dWxwSW9UYWcsIHBoYmEtPmxpbmtfc3RhdGUpOworCisJY3Rpb2NiLT5pb2NiX2NtcGwgPSBOVUxMOworCWN0aW9jYi0+aW9jYl9mbGFnIHw9IExQRkNfSU9fTElCREZDOworCWN0aW9jYi0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKwljdGlvY2ItPmNvbnRleHQzID0gYm1wOworCisJY3Rpb2NiLT5pb2NiX2NtcGwgPSBscGZjX2lzc3VlX2N0X3JzcF9jbXA7CisJY3Rpb2NiLT5jb250ZXh0MSA9IGRkX2RhdGE7CisJY3Rpb2NiLT5jb250ZXh0MiA9IE5VTEw7CisJZGRfZGF0YS0+dHlwZSA9IFRZUEVfSU9DQjsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuY21kaW9jYnEgPSBjdGlvY2I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnJzcGlvY2JxID0gTlVMTDsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2Iuc2V0X2pvYiA9IGpvYjsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuYm1wID0gYm1wOworCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5uZGxwID0gbmRscDsKKworCWlmIChwaGJhLT5jZmdfcG9sbCAmIERJU0FCTEVfRkNQX1JJTkdfSU5UKSB7CisJCWNyZWdfdmFsID0gcmVhZGwocGhiYS0+SENyZWdhZGRyKTsKKwkJY3JlZ192YWwgfD0gKEhDX1IwSU5UX0VOQSA8PCBMUEZDX0ZDUF9SSU5HKTsKKwkJd3JpdGVsKGNyZWdfdmFsLCBwaGJhLT5IQ3JlZ2FkZHIpOworCQlyZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOyAvKiBmbHVzaCAqLworCX0KKworCXJjID0gbHBmY19zbGlfaXNzdWVfaW9jYihwaGJhLCBMUEZDX0VMU19SSU5HLCBjdGlvY2IsIDApOworCisJaWYgKHJjID09IElPQ0JfU1VDQ0VTUykKKwkJcmV0dXJuIDA7IC8qIGRvbmUgZm9yIG5vdyAqLworCitpc3N1ZV9jdF9yc3BfZXhpdDoKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGN0aW9jYik7Citub19jdGlvY2I6CisJa2ZyZWUoZGRfZGF0YSk7Citub19kZF9kYXRhOgorCXJldHVybiByYzsKK30KKworLyoqCisgKiBscGZjX2JzZ19zZW5kX21nbXRfcnNwIC0gcHJvY2VzcyBhIFNFTkRfTUdNVF9SRVNQIGJzZyB2ZW5kb3IgY29tbWFuZAorICogQGpvYjogU0VORF9NR01UX1JFU1AgZmNfYnNnX2pvYgorICoqLworc3RhdGljIGludAorbHBmY19ic2dfc2VuZF9tZ210X3JzcChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBzZW5kX21nbXRfcmVzcCAqbWdtdF9yZXNwID0gKHN0cnVjdCBzZW5kX21nbXRfcmVzcCAqKQorCQlqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kOworCXN0cnVjdCB1bHBfYmRlNjQgKmJwbDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmJtcCA9IE5VTEw7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2VsID0gTlVMTDsKKwlpbnQgcmVxdWVzdF9uc2VnOworCWludCBudW1iZGU7CisJZG1hX2FkZHJfdCBidXNhZGRyOworCXVpbnQzMl90IHRhZyA9IG1nbXRfcmVzcC0+dGFnOworCXVuc2lnbmVkIGxvbmcgcmVxYmZyY250ID0KKwkJCSh1bnNpZ25lZCBsb25nKWpvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuOworCWludCByYyA9IDA7CisKKwkvKiBpbiBjYXNlIG5vIGRhdGEgaXMgdHJhbnNmZXJyZWQgKi8KKwlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCisJaWYgKCFyZXFiZnJjbnQgfHwgKHJlcWJmcmNudCA+ICg4MCAqIEJVRl9TWl80SykpKSB7CisJCXJjID0gLUVSQU5HRTsKKwkJZ290byBzZW5kX21nbXRfcnNwX2V4aXQ7CisJfQorCisJYm1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZG1hYnVmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibXApIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIHNlbmRfbWdtdF9yc3BfZXhpdDsKKwl9CisKKwlibXAtPnZpcnQgPSBscGZjX21idWZfYWxsb2MocGhiYSwgMCwgJmJtcC0+cGh5cyk7CisJaWYgKCFibXAtPnZpcnQpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIHNlbmRfbWdtdF9yc3BfZnJlZV9ibXA7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJmJtcC0+bGlzdCk7CisJYnBsID0gKHN0cnVjdCB1bHBfYmRlNjQgKikgYm1wLT52aXJ0OworCXJlcXVlc3RfbnNlZyA9IHBjaV9tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkJCSAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlmb3JfZWFjaF9zZyhqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LCBzZ2VsLCByZXF1ZXN0X25zZWcsIG51bWJkZSkgeworCQlidXNhZGRyID0gc2dfZG1hX2FkZHJlc3Moc2dlbCk7CisJCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRFXzY0OworCQlicGwtPnR1cy5mLmJkZVNpemUgPSBzZ19kbWFfbGVuKHNnZWwpOworCQlicGwtPnR1cy53ID0gY3B1X3RvX2xlMzIoYnBsLT50dXMudyk7CisJCWJwbC0+YWRkckxvdyA9IGNwdV90b19sZTMyKHB1dFBhZGRyTG93KGJ1c2FkZHIpKTsKKwkJYnBsLT5hZGRySGlnaCA9IGNwdV90b19sZTMyKHB1dFBhZGRySGlnaChidXNhZGRyKSk7CisJCWJwbCsrOworCX0KKworCXJjID0gbHBmY19pc3N1ZV9jdF9yc3AocGhiYSwgam9iLCB0YWcsIGJtcCwgcmVxdWVzdF9uc2VnKTsKKworCWlmIChyYyA9PSBJT0NCX1NVQ0NFU1MpCisJCXJldHVybiAwOyAvKiBkb25lIGZvciBub3cgKi8KKworCS8qIFRCRCBuZWVkIHRvIGhhbmRsZSBhIHRpbWVvdXQgKi8KKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkJICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCXJjID0gLUVBQ0NFUzsKKwlscGZjX21idWZfZnJlZShwaGJhLCBibXAtPnZpcnQsIGJtcC0+cGh5cyk7CisKK3NlbmRfbWdtdF9yc3BfZnJlZV9ibXA6CisJa2ZyZWUoYm1wKTsKK3NlbmRfbWdtdF9yc3BfZXhpdDoKKwkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGxwZmNfYnNnX2RpYWdfbW9kZSAtIHByb2Nlc3MgYSBMUEZDX0JTR19WRU5ET1JfRElBR19NT0RFIGJzZyB2ZW5kb3IgY29tbWFuZAorICogQGpvYjogTFBGQ19CU0dfVkVORE9SX0RJQUdfTU9ERQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHBsYWNpbmcgYSBwb3J0IGludG8gZGlhZ25vc3RpYyBsb29wYmFjaworICogbW9kZSBpbiBvcmRlciB0byBwZXJmb3JtIGEgZGlhZ25vc3RpYyBsb29wYmFjayB0ZXN0LgorICogQWxsIG5ldyBzY3NpIHJlcXVlc3RzIGFyZSBibG9ja2VkLCBhIHNtYWxsIGRlbGF5IGlzIHVzZWQgdG8gYWxsb3cgdGhlCisgKiBzY3NpIHJlcXVlc3RzIHRvIGNvbXBsZXRlIHRoZW4gdGhlIGxpbmsgaXMgYnJvdWdodCBkb3duLiBJZiB0aGUgbGluayBpcworICogaXMgcGxhY2VkIGluIGxvb3BiYWNrIG1vZGUgdGhlbiBzY3NpIHJlcXVlc3RzIGFyZSBhZ2FpbiBhbGxvd2VkCisgKiBzbyB0aGUgc2NzaSBtaWQtbGF5ZXIgZG9lc24ndCBnaXZlIHVwIG9uIHRoZSBwb3J0LgorICogQWxsIG9mIHRoaXMgaXMgZG9uZSBpbi1saW5lLgorICovCitzdGF0aWMgaW50CitscGZjX2JzZ19kaWFnX21vZGUoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGpvYi0+c2hvc3Q7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CisJc3RydWN0IGRpYWdfbW9kZV9zZXQgKmxvb3BiYWNrX21vZGU7CisJc3RydWN0IGxwZmNfc2xpICpwc2xpID0gJnBoYmEtPnNsaTsKKwlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcgPSAmcHNsaS0+cmluZ1tMUEZDX0ZDUF9SSU5HXTsKKwl1aW50MzJfdCBsaW5rX2ZsYWdzOworCXVpbnQzMl90IHRpbWVvdXQ7CisJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CisJTFBGQ19NQk9YUV90ICpwbWJveHE7CisJaW50IG1ieHN0YXR1czsKKwlpbnQgaSA9IDA7CisJaW50IHJjID0gMDsKKworCS8qIG5vIGRhdGEgdG8gcmV0dXJuIGp1c3QgdGhlIHJldHVybiBjb2RlICovCisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKworCWlmIChqb2ItPnJlcXVlc3RfbGVuIDwKKwkgICAgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGRpYWdfbW9kZV9zZXQpKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MzggUmVjZWl2ZWQgRElBRyBNT0RFIHJlcXVlc3QgYmVsb3cgbWluaW11bSAiCisJCQkJInNpemVcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCWxvb3BiYWNrX21vZGUgPSAoc3RydWN0IGRpYWdfbW9kZV9zZXQgKikKKwkJam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZDsKKwlsaW5rX2ZsYWdzID0gbG9vcGJhY2tfbW9kZS0+dHlwZTsKKwl0aW1lb3V0ID0gbG9vcGJhY2tfbW9kZS0+dGltZW91dDsKKworCWlmICgocGhiYS0+bGlua19zdGF0ZSA9PSBMUEZDX0hCQV9FUlJPUikgfHwKKwkgICAgKHBzbGktPnNsaV9mbGFnICYgTFBGQ19CTE9DS19NR01UX0lPKSB8fAorCSAgICAoIShwc2xpLT5zbGlfZmxhZyAmIExQRkNfU0xJX0FDVElWRSkpKSB7CisJCXJjID0gLUVBQ0NFUzsKKwkJZ290byBqb2JfZXJyb3I7CisJfQorCisJcG1ib3hxID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtYm94cSkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CisJaWYgKHZwb3J0cykgeworCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cGkgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgeworCQkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnRzW2ldKTsKKwkJCXNjc2lfYmxvY2tfcmVxdWVzdHMoc2hvc3QpOworCQl9CisKKwkJbHBmY19kZXN0cm95X3Zwb3J0X3dvcmtfYXJyYXkocGhiYSwgdnBvcnRzKTsKKwl9IGVsc2UgeworCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydChwaGJhLT5wcG9ydCk7CisJCXNjc2lfYmxvY2tfcmVxdWVzdHMoc2hvc3QpOworCX0KKworCXdoaWxlIChwcmluZy0+dHhjbXBscV9jbnQpIHsKKwkJaWYgKGkrKyA+IDUwMCkJLyogd2FpdCB1cCB0byA1IHNlY29uZHMgKi8KKwkJCWJyZWFrOworCisJCW1zbGVlcCgxMCk7CisJfQorCisJbWVtc2V0KCh2b2lkICopcG1ib3hxLCAwLCBzaXplb2YoTFBGQ19NQk9YUV90KSk7CisJcG1ib3hxLT51Lm1iLm1ieENvbW1hbmQgPSBNQlhfRE9XTl9MSU5LOworCXBtYm94cS0+dS5tYi5tYnhPd25lciA9IE9XTl9IT1NUOworCisJbWJ4c3RhdHVzID0gbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHBoYmEsIHBtYm94cSwgTFBGQ19NQk9YX1RNTyk7CisKKwlpZiAoKG1ieHN0YXR1cyA9PSBNQlhfU1VDQ0VTUykgJiYgKHBtYm94cS0+dS5tYi5tYnhTdGF0dXMgPT0gMCkpIHsKKwkJLyogd2FpdCBmb3IgbGluayBkb3duIGJlZm9yZSBwcm9jZWVkaW5nICovCisJCWkgPSAwOworCQl3aGlsZSAocGhiYS0+bGlua19zdGF0ZSAhPSBMUEZDX0xJTktfRE9XTikgeworCQkJaWYgKGkrKyA+IHRpbWVvdXQpIHsKKwkJCQlyYyA9IC1FVElNRURPVVQ7CisJCQkJZ290byBsb29wYmFja19tb2RlX2V4aXQ7CisJCQl9CisKKwkJCW1zbGVlcCgxMCk7CisJCX0KKworCQltZW1zZXQoKHZvaWQgKilwbWJveHEsIDAsIHNpemVvZihMUEZDX01CT1hRX3QpKTsKKwkJaWYgKGxpbmtfZmxhZ3MgPT0gSU5URVJOQUxfTE9PUF9CQUNLKQorCQkJcG1ib3hxLT51Lm1iLnVuLnZhckluaXRMbmsubGlua19mbGFncyA9IEZMQUdTX0xPQ0FMX0xCOworCQllbHNlCisJCQlwbWJveHEtPnUubWIudW4udmFySW5pdExuay5saW5rX2ZsYWdzID0KKwkJCQlGTEFHU19UT1BPTE9HWV9NT0RFX0xPT1A7CisKKwkJcG1ib3hxLT51Lm1iLm1ieENvbW1hbmQgPSBNQlhfSU5JVF9MSU5LOworCQlwbWJveHEtPnUubWIubWJ4T3duZXIgPSBPV05fSE9TVDsKKworCQltYnhzdGF0dXMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQocGhiYSwgcG1ib3hxLAorCQkJCQkJICAgICBMUEZDX01CT1hfVE1PKTsKKworCQlpZiAoKG1ieHN0YXR1cyAhPSBNQlhfU1VDQ0VTUykgfHwgKHBtYm94cS0+dS5tYi5tYnhTdGF0dXMpKQorCQkJcmMgPSAtRU5PREVWOworCQllbHNlIHsKKwkJCXBoYmEtPmxpbmtfZmxhZyB8PSBMU19MT09QQkFDS19NT0RFOworCQkJLyogd2FpdCBmb3IgdGhlIGxpbmsgYXR0ZW50aW9uIGludGVycnVwdCAqLworCQkJbXNsZWVwKDEwMCk7CisKKwkJCWkgPSAwOworCQkJd2hpbGUgKHBoYmEtPmxpbmtfc3RhdGUgIT0gTFBGQ19IQkFfUkVBRFkpIHsKKwkJCQlpZiAoaSsrID4gdGltZW91dCkgeworCQkJCQlyYyA9IC1FVElNRURPVVQ7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCW1zbGVlcCgxMCk7CisJCQl9CisJCX0KKworCX0gZWxzZQorCQlyYyA9IC1FTk9ERVY7CisKK2xvb3BiYWNrX21vZGVfZXhpdDoKKwl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOworCWlmICh2cG9ydHMpIHsKKwkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBpICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSk7CisJCQlzY3NpX3VuYmxvY2tfcmVxdWVzdHMoc2hvc3QpOworCQl9CisJCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CisJfSBlbHNlIHsKKwkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQocGhiYS0+cHBvcnQpOworCQlzY3NpX3VuYmxvY2tfcmVxdWVzdHMoc2hvc3QpOworCX0KKworCS8qCisJICogTGV0IFNMSSBsYXllciByZWxlYXNlIG1ib3hxIGlmIG1ib3ggY29tbWFuZCBjb21wbGV0ZWQgYWZ0ZXIgdGltZW91dC4KKwkgKi8KKwlpZiAobWJ4c3RhdHVzICE9IE1CWF9USU1FT1VUKQorCQltZW1wb29sX2ZyZWUocG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKworam9iX2Vycm9yOgorCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSBpZiBubyBlcnJvciAqLworCWlmIChyYyA9PSAwKQorCQlqb2ItPmpvYl9kb25lKGpvYik7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGxwZmNkaWFnX2xvb3Bfc2VsZl9yZWcgLSBvYnRhaW5zIGEgcmVtb3RlIHBvcnQgbG9naW4gaWQKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdAorICogQHJwaTogUG9pbnRlciB0byBhIHJlbW90ZSBwb3J0IGxvZ2luIGlkCisgKgorICogVGhpcyBmdW5jdGlvbiBvYnRhaW5zIGEgcmVtb3RlIHBvcnQgbG9naW4gaWQgc28gdGhlIGRpYWcgbG9vcGJhY2sgdGVzdAorICogY2FuIHNlbmQgYW5kIHJlY2VpdmUgaXRzIG93biB1bnNvbGljaXRlZCBDVCBjb21tYW5kLgorICoqLworc3RhdGljIGludCBscGZjZGlhZ19sb29wX3NlbGZfcmVnKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDE2X3QgKiBycGkpCit7CisJTFBGQ19NQk9YUV90ICptYm94OworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqZG1hYnVmZjsKKwlpbnQgc3RhdHVzOworCisJbWJveCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYm94KQorCQlyZXR1cm4gRU5PTUVNOworCisJc3RhdHVzID0gbHBmY19yZWdfcnBpKHBoYmEsIDAsIHBoYmEtPnBwb3J0LT5mY19teURJRCwKKwkJCQkodWludDhfdCAqKSZwaGJhLT5wcG9ydC0+ZmNfc3BhcmFtLCBtYm94LCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuIEVOT01FTTsKKwl9CisKKwlkbWFidWZmID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBtYm94LT5jb250ZXh0MTsKKwltYm94LT5jb250ZXh0MSA9IE5VTEw7CisJc3RhdHVzID0gbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHBoYmEsIG1ib3gsIExQRkNfTUJPWF9UTU8pOworCisJaWYgKChzdGF0dXMgIT0gTUJYX1NVQ0NFU1MpIHx8IChtYm94LT51Lm1iLm1ieFN0YXR1cykpIHsKKwkJbHBmY19tYnVmX2ZyZWUocGhiYSwgZG1hYnVmZi0+dmlydCwgZG1hYnVmZi0+cGh5cyk7CisJCWtmcmVlKGRtYWJ1ZmYpOworCQlpZiAoc3RhdHVzICE9IE1CWF9USU1FT1VUKQorCQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gRU5PREVWOworCX0KKworCSpycGkgPSBtYm94LT51Lm1iLnVuLnZhcldvcmRzWzBdOworCisJbHBmY19tYnVmX2ZyZWUocGhiYSwgZG1hYnVmZi0+dmlydCwgZG1hYnVmZi0+cGh5cyk7CisJa2ZyZWUoZG1hYnVmZik7CisJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNkaWFnX2xvb3Bfc2VsZl91bnJlZyAtIHVucmVncyBmcm9tIHRoZSBycGkKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdAorICogQHJwaTogUmVtb3RlIHBvcnQgbG9naW4gaWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXJzIHRoZSBycGkgb2J0YWluZWQgaW4gbHBmY2RpYWdfbG9vcF9zZWxmX3JlZworICoqLworc3RhdGljIGludCBscGZjZGlhZ19sb29wX3NlbGZfdW5yZWcoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCBycGkpCit7CisJTFBGQ19NQk9YUV90ICptYm94OworCWludCBzdGF0dXM7CisKKwkvKiBBbGxvY2F0ZSBtYm94cSBzdHJ1Y3R1cmUgKi8KKwltYm94ID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAobWJveCA9PSBOVUxMKQorCQlyZXR1cm4gRU5PTUVNOworCisJbHBmY191bnJlZ19sb2dpbihwaGJhLCAwLCBycGksIG1ib3gpOworCXN0YXR1cyA9IGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdChwaGJhLCBtYm94LCBMUEZDX01CT1hfVE1PKTsKKworCWlmICgoc3RhdHVzICE9IE1CWF9TVUNDRVNTKSB8fCAobWJveC0+dS5tYi5tYnhTdGF0dXMpKSB7CisJCWlmIChzdGF0dXMgIT0gTUJYX1RJTUVPVVQpCisJCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiBFSU87CisJfQorCisJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNkaWFnX2xvb3BfZ2V0X3hyaSAtIG9idGFpbnMgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGlkcworICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0CisgKiBAcnBpOiBSZW1vdGUgcG9ydCBsb2dpbiBpZAorICogQHR4eHJpOiBQb2ludGVyIHRvIHRyYW5zbWl0IGV4Y2hhbmdlIGlkCisgKiBAcnh4cmk6IFBvaW50ZXIgdG8gcmVzcG9uc2UgZXhjaGFiZ2UgaWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG9idGFpbnMgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGlkcyByZXF1aXJlZCB0byBzZW5kCisgKiBhbiB1bnNvbGljaXRlZCBjdCBjb21tYW5kIHdpdGggYSBwYXlsb2FkLiBBIHNwZWNpYWwgbHBmYyBGc1R5cGUgYW5kIENtZFJzcAorICogZmxhZ3MgYXJlIHVzZWQgdG8gdGhlIHVuc29saWN0ZWQgcmVzcG9uc2UgaGFuZGxlciBpcyBhYmxlIHRvIHByb2Nlc3MKKyAqIHRoZSBjdCBjb21tYW5kIHNlbnQgb24gdGhlIHNhbWUgcG9ydC4KKyAqKi8KK3N0YXRpYyBpbnQgbHBmY2RpYWdfbG9vcF9nZXRfeHJpKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDE2X3QgcnBpLAorCQkJIHVpbnQxNl90ICp0eHhyaSwgdWludDE2X3QgKiByeHhyaSkKK3sKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dDsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYnEsICpyc3Bpb2NicTsKKwlJT0NCX3QgKmNtZCwgKnJzcDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmRtYWJ1ZjsKKwlzdHJ1Y3QgdWxwX2JkZTY0ICpicGwgPSBOVUxMOworCXN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICpjdHJlcSA9IE5VTEw7CisJaW50IHJldF92YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkqdHh4cmkgPSAwOworCSpyeHhyaSA9IDA7CisJZXZ0ID0gbHBmY19ic2dfZXZlbnRfbmV3KEZDX1JFR19DVF9FVkVOVCwgY3VycmVudC0+cGlkLAorCQkJCVNMSV9DVF9FTFhfTE9PUEJBQ0spOworCWlmICghZXZ0KQorCQlyZXR1cm4gRU5PTUVNOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmZXZ0LT5ub2RlLCAmcGhiYS0+Y3RfZXZfd2FpdGVycyk7CisJbHBmY19ic2dfZXZlbnRfcmVmKGV2dCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCisJY21kaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisJcnNwaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisKKwlkbWFidWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbHBmY19kbWFidWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZG1hYnVmKSB7CisJCWRtYWJ1Zi0+dmlydCA9IGxwZmNfbWJ1Zl9hbGxvYyhwaGJhLCAwLCAmZG1hYnVmLT5waHlzKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmRtYWJ1Zi0+bGlzdCk7CisJCWJwbCA9IChzdHJ1Y3QgdWxwX2JkZTY0ICopIGRtYWJ1Zi0+dmlydDsKKwkJbWVtc2V0KGJwbCwgMCwgc2l6ZW9mKCpicGwpKTsKKwkJY3RyZXEgPSAoc3RydWN0IGxwZmNfc2xpX2N0X3JlcXVlc3QgKikoYnBsICsgMSk7CisJCWJwbC0+YWRkckhpZ2ggPQorCQkJbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKGRtYWJ1Zi0+cGh5cyArIHNpemVvZigqYnBsKSkpOworCQlicGwtPmFkZHJMb3cgPQorCQkJbGUzMl90b19jcHUocHV0UGFkZHJMb3coZG1hYnVmLT5waHlzICsgc2l6ZW9mKCpicGwpKSk7CisJCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSAwOworCQlicGwtPnR1cy5mLmJkZVNpemUgPSBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaOworCQlicGwtPnR1cy53ID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7CisJfQorCisJaWYgKGNtZGlvY2JxID09IE5VTEwgfHwgcnNwaW9jYnEgPT0gTlVMTCB8fAorCSAgICBkbWFidWYgPT0gTlVMTCB8fCBicGwgPT0gTlVMTCB8fCBjdHJlcSA9PSBOVUxMKSB7CisJCXJldF92YWwgPSBFTk9NRU07CisJCWdvdG8gZXJyX2dldF94cmlfZXhpdDsKKwl9CisKKwljbWQgPSAmY21kaW9jYnEtPmlvY2I7CisJcnNwID0gJnJzcGlvY2JxLT5pb2NiOworCisJbWVtc2V0KGN0cmVxLCAwLCBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaKTsKKworCWN0cmVxLT5SZXZpc2lvbklkLmJpdHMuUmV2aXNpb24gPSBTTElfQ1RfUkVWSVNJT047CisJY3RyZXEtPlJldmlzaW9uSWQuYml0cy5JbklkID0gMDsKKwljdHJlcS0+RnNUeXBlID0gU0xJX0NUX0VMWF9MT09QQkFDSzsKKwljdHJlcS0+RnNTdWJUeXBlID0gMDsKKwljdHJlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuQ21kUnNwID0gRUxYX0xPT1BCQUNLX1hSSV9TRVRVUDsKKwljdHJlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuU2l6ZSA9IDA7CisKKworCWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChkbWFidWYtPnBoeXMpOworCWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRyTG93ID0gcHV0UGFkZHJMb3coZG1hYnVmLT5waHlzKTsKKwljbWQtPnVuLnhzZXE2NC5iZGwuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkxQXzY0OworCWNtZC0+dW4ueHNlcTY0LmJkbC5iZGVTaXplID0gc2l6ZW9mKCpicGwpOworCisJY21kLT51bi54c2VxNjQudzUuaGNzdy5GY3RsID0gTEE7CisJY21kLT51bi54c2VxNjQudzUuaGNzdy5EZmN0bCA9IDA7CisJY21kLT51bi54c2VxNjQudzUuaGNzdy5SY3RsID0gRkNfUkNUTF9ERF9VTlNPTF9DVEw7CisJY21kLT51bi54c2VxNjQudzUuaGNzdy5UeXBlID0gRkNfVFlQRV9DVDsKKworCWNtZC0+dWxwQ29tbWFuZCA9IENNRF9YTUlUX1NFUVVFTkNFNjRfQ1I7CisJY21kLT51bHBCZGVDb3VudCA9IDE7CisJY21kLT51bHBMZSA9IDE7CisJY21kLT51bHBDbGFzcyA9IENMQVNTMzsKKwljbWQtPnVscENvbnRleHQgPSBycGk7CisKKwljbWRpb2NicS0+aW9jYl9mbGFnIHw9IExQRkNfSU9fTElCREZDOworCWNtZGlvY2JxLT52cG9ydCA9IHBoYmEtPnBwb3J0OworCisJcmV0X3ZhbCA9IGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdChwaGJhLCBMUEZDX0VMU19SSU5HLCBjbWRpb2NicSwKKwkJCQlyc3Bpb2NicSwKKwkJCQkocGhiYS0+ZmNfcmF0b3YgKiAyKQorCQkJCSsgTFBGQ19EUlZSX1RJTUVPVVQpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIGVycl9nZXRfeHJpX2V4aXQ7CisKKwkqdHh4cmkgPSAgcnNwLT51bHBDb250ZXh0OworCisJZXZ0LT53YWl0aW5nID0gMTsKKwlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7CisJcmV0X3ZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQlldnQtPndxLCAhbGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fc2VlKSwKKwkJKChwaGJhLT5mY19yYXRvdiAqIDIpICsgTFBGQ19EUlZSX1RJTUVPVVQpICogSFopOworCWlmIChsaXN0X2VtcHR5KCZldnQtPmV2ZW50c190b19zZWUpKQorCQlyZXRfdmFsID0gKHJldF92YWwpID8gRUlOVFIgOiBFVElNRURPVVQ7CisJZWxzZSB7CisJCXJldF92YWwgPSBJT0NCX1NVQ0NFU1M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCWxpc3RfbW92ZShldnQtPmV2ZW50c190b19zZWUucHJldiwgJmV2dC0+ZXZlbnRzX3RvX2dldCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJKnJ4eHJpID0gKGxpc3RfZW50cnkoZXZ0LT5ldmVudHNfdG9fZ2V0LnByZXYsCisJCQkJICAgICB0eXBlb2Yoc3RydWN0IGV2ZW50X2RhdGEpLAorCQkJCSAgICAgbm9kZSkpLT5pbW1lZF9kYXQ7CisJfQorCWV2dC0+d2FpdGluZyA9IDA7CisKK2Vycl9nZXRfeHJpX2V4aXQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOyAvKiByZWxlYXNlIHJlZiAqLworCWxwZmNfYnNnX2V2ZW50X3VucmVmKGV2dCk7IC8qIGRlbGV0ZSAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKworCWlmIChkbWFidWYpIHsKKwkJaWYgKGRtYWJ1Zi0+dmlydCkKKwkJCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGRtYWJ1Zi0+dmlydCwgZG1hYnVmLT5waHlzKTsKKwkJa2ZyZWUoZG1hYnVmKTsKKwl9CisKKwlpZiAoY21kaW9jYnEgJiYgKHJldF92YWwgIT0gSU9DQl9USU1FRE9VVCkpCisJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOworCWlmIChyc3Bpb2NicSkKKwkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogZGlhZ19jbWRfZGF0YV9hbGxvYyAtIGZpbGxzIGluIGEgYmRlIHN0cnVjdCB3aXRoIGRtYSBidWZmZXJzCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QKKyAqIEBicGw6IFBvaW50ZXIgdG8gNjQgYml0IGJkZSBzdHJ1Y3R1cmUKKyAqIEBzaXplOiBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJvY2VzcworICogQG5vY29weWRhdGE6IEZsYWcgdG8gY29weSB1c2VyIGRhdGEgaW50byB0aGUgYWxsb2NhdGVkIGJ1ZmZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHBhZ2Ugc2l6ZSBidWZmZXJzIGFuZCBwb3B1bGF0ZXMgYW4gbHBmY19kbWFidWZleHQuCisgKiBJZiBhbGxvd2VkIHRoZSB1c2VyIGRhdGEgcG9pbnRlZCB0byB3aXRoIGluZGF0YXB0ciBpcyBjb3BpZWQgaW50byB0aGUga2VybmVsCisgKiBtZW1vcnkuIFRoZSBjaGFpbmVkIGxpc3Qgb2YgcGFnZSBzaXplIGJ1ZmZlcnMgaXMgcmV0dXJuZWQuCisgKiovCitzdGF0aWMgc3RydWN0IGxwZmNfZG1hYnVmZXh0ICoKK2RpYWdfY21kX2RhdGFfYWxsb2Moc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkgICBzdHJ1Y3QgdWxwX2JkZTY0ICpicGwsIHVpbnQzMl90IHNpemUsCisJCSAgIGludCBub2NvcHlkYXRhKQoreworCXN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqbWxpc3QgPSBOVUxMOworCXN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqZG1wOworCWludCBjbnQsIG9mZnNldCA9IDAsIGkgPSAwOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisKKwlwY2lkZXYgPSBwaGJhLT5wY2lkZXY7CisKKwl3aGlsZSAoc2l6ZSkgeworCQkvKiBXZSBnZXQgY2h1bmtzIG9mIDRLICovCisJCWlmIChzaXplID4gQlVGX1NaXzRLKQorCQkJY250ID0gQlVGX1NaXzRLOworCQllbHNlCisJCQljbnQgPSBzaXplOworCisJCS8qIGFsbG9jYXRlIHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCBidWZmZXIgaGVhZGVyICovCisJCWRtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCksIEdGUF9LRVJORUwpOworCQlpZiAoIWRtcCkKKwkJCWdvdG8gb3V0OworCisJCUlOSVRfTElTVF9IRUFEKCZkbXAtPmRtYS5saXN0KTsKKworCQkvKiBRdWV1ZSBpdCB0byBhIGxpbmtlZCBsaXN0ICovCisJCWlmIChtbGlzdCkKKwkJCWxpc3RfYWRkX3RhaWwoJmRtcC0+ZG1hLmxpc3QsICZtbGlzdC0+ZG1hLmxpc3QpOworCQllbHNlCisJCQltbGlzdCA9IGRtcDsKKworCQkvKiBhbGxvY2F0ZSBidWZmZXIgKi8KKwkJZG1wLT5kbWEudmlydCA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGNpZGV2LT5kZXYsCisJCQkJCQkgICBjbnQsCisJCQkJCQkgICAmKGRtcC0+ZG1hLnBoeXMpLAorCQkJCQkJICAgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFkbXAtPmRtYS52aXJ0KQorCQkJZ290byBvdXQ7CisKKwkJZG1wLT5zaXplID0gY250OworCisJCWlmIChub2NvcHlkYXRhKSB7CisJCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gMDsKKwkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShwaGJhLT5wY2lkZXYsCisJCQkJZG1wLT5kbWEucGh5cywgTFBGQ19CUExfU0laRSwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJfSBlbHNlIHsKKwkJCW1lbXNldCgodWludDhfdCAqKWRtcC0+ZG1hLnZpcnQsIDAsIGNudCk7CisJCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NEk7CisJCX0KKworCQkvKiBidWlsZCBidWZmZXIgcHRyIGxpc3QgZm9yIElPQ0IgKi8KKwkJYnBsLT5hZGRyTG93ID0gbGUzMl90b19jcHUocHV0UGFkZHJMb3coZG1wLT5kbWEucGh5cykpOworCQlicGwtPmFkZHJIaWdoID0gbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKGRtcC0+ZG1hLnBoeXMpKTsKKwkJYnBsLT50dXMuZi5iZGVTaXplID0gKHVzaG9ydCkgY250OworCQlicGwtPnR1cy53ID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7CisJCWJwbCsrOworCisJCWkrKzsKKwkJb2Zmc2V0ICs9IGNudDsKKwkJc2l6ZSAtPSBjbnQ7CisJfQorCisJbWxpc3QtPmZsYWcgPSBpOworCXJldHVybiBtbGlzdDsKK291dDoKKwlkaWFnX2NtZF9kYXRhX2ZyZWUocGhiYSwgbWxpc3QpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIGxwZmNkaWFnX2xvb3BfcG9zdF9yeGJ1ZnMgLSBwb3N0IHRoZSByZWNlaXZlIGJ1ZmZlcnMgZm9yIGFuIHVuc29sIENUIGNtZAorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0CisgKiBAcnh4cmk6IFJlY2VpdmUgZXhjaGFuZ2UgaWQKKyAqIEBsZW46IE51bWJlciBvZiBkYXRhIGJ5dGVzCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYW5kIHBvc3RzIGEgZGF0YSBidWZmZXIgb2Ygc3VmZmljaWVudCBzaXplIHRvIHJlY2lldmUKKyAqIGFuIHVuc29saWN0ZWQgQ1QgY29tbWFuZC4KKyAqKi8KK3N0YXRpYyBpbnQgbHBmY2RpYWdfbG9vcF9wb3N0X3J4YnVmcyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90IHJ4eHJpLAorCQkJICAgICBzaXplX3QgbGVuKQoreworCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CisJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nID0gJnBzbGktPnJpbmdbTFBGQ19FTFNfUklOR107CisJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxOworCUlPQ0JfdCAqY21kID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQsICpjdXJyLCAqbmV4dDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKnJ4Ym1wOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqZG1wOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqbXBbMl0gPSB7TlVMTCwgTlVMTH07CisJc3RydWN0IHVscF9iZGU2NCAqcnhicGwgPSBOVUxMOworCXVpbnQzMl90IG51bV9iZGU7CisJc3RydWN0IGxwZmNfZG1hYnVmZXh0ICpyeGJ1ZmZlciA9IE5VTEw7CisJaW50IHJldF92YWwgPSAwOworCWludCBpID0gMDsKKworCWNtZGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOworCXJ4Ym1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZG1hYnVmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJ4Ym1wICE9IE5VTEwpIHsKKwkJcnhibXAtPnZpcnQgPSBscGZjX21idWZfYWxsb2MocGhiYSwgMCwgJnJ4Ym1wLT5waHlzKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnJ4Ym1wLT5saXN0KTsKKwkJcnhicGwgPSAoc3RydWN0IHVscF9iZGU2NCAqKSByeGJtcC0+dmlydDsKKwkJcnhidWZmZXIgPSBkaWFnX2NtZF9kYXRhX2FsbG9jKHBoYmEsIHJ4YnBsLCBsZW4sIDApOworCX0KKworCWlmICghY21kaW9jYnEgfHwgIXJ4Ym1wIHx8ICFyeGJwbCB8fCAhcnhidWZmZXIpIHsKKwkJcmV0X3ZhbCA9IEVOT01FTTsKKwkJZ290byBlcnJfcG9zdF9yeGJ1ZnNfZXhpdDsKKwl9CisKKwkvKiBRdWV1ZSBidWZmZXJzIGZvciB0aGUgcmVjZWl2ZSBleGNoYW5nZSAqLworCW51bV9iZGUgPSAodWludDMyX3QpcnhidWZmZXItPmZsYWc7CisJZG1wID0gJnJ4YnVmZmVyLT5kbWE7CisKKwljbWQgPSAmY21kaW9jYnEtPmlvY2I7CisJaSA9IDA7CisKKwlJTklUX0xJU1RfSEVBRCgmaGVhZCk7CisJbGlzdF9hZGRfdGFpbCgmaGVhZCwgJmRtcC0+bGlzdCk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGN1cnIsIG5leHQsICZoZWFkKSB7CisJCW1wW2ldID0gbGlzdF9lbnRyeShjdXJyLCBzdHJ1Y3QgbHBmY19kbWFidWYsIGxpc3QpOworCQlsaXN0X2RlbChjdXJyKTsKKworCQlpZiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSB7CisJCQltcFtpXS0+YnVmZmVyX3RhZyA9IGxwZmNfc2xpX2dldF9idWZmZXJfdGFnKHBoYmEpOworCQkJY21kLT51bi5xdWV4cmk2NGN4LmJ1ZmYuYmRlLmFkZHJIaWdoID0KKwkJCQlwdXRQYWRkckhpZ2gobXBbaV0tPnBoeXMpOworCQkJY21kLT51bi5xdWV4cmk2NGN4LmJ1ZmYuYmRlLmFkZHJMb3cgPQorCQkJCXB1dFBhZGRyTG93KG1wW2ldLT5waHlzKTsKKwkJCWNtZC0+dW4ucXVleHJpNjRjeC5idWZmLmJkZS50dXMuZi5iZGVTaXplID0KKwkJCQkoKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqKW1wW2ldKS0+c2l6ZTsKKwkJCWNtZC0+dW4ucXVleHJpNjRjeC5idWZmLmJ1ZmZlcl90YWcgPSBtcFtpXS0+YnVmZmVyX3RhZzsKKwkJCWNtZC0+dWxwQ29tbWFuZCA9IENNRF9RVUVfWFJJNjRfQ1g7CisJCQljbWQtPnVscFBVID0gMDsKKwkJCWNtZC0+dWxwTGUgPSAxOworCQkJY21kLT51bHBCZGVDb3VudCA9IDE7CisJCQljbWQtPnVuc2xpMy5xdWVfeHJpNjRjeF9leHRfd29yZHMuZWJkZV9jb3VudCA9IDA7CisKKwkJfSBlbHNlIHsKKwkJCWNtZC0+dW4uY29udDY0W2ldLmFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKG1wW2ldLT5waHlzKTsKKwkJCWNtZC0+dW4uY29udDY0W2ldLmFkZHJMb3cgPSBwdXRQYWRkckxvdyhtcFtpXS0+cGh5cyk7CisJCQljbWQtPnVuLmNvbnQ2NFtpXS50dXMuZi5iZGVTaXplID0KKwkJCQkoKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqKW1wW2ldKS0+c2l6ZTsKKwkJCQkJY21kLT51bHBCZGVDb3VudCA9ICsraTsKKworCQkJaWYgKCgtLW51bV9iZGUgPiAwKSAmJiAoaSA8IDIpKQorCQkJCWNvbnRpbnVlOworCisJCQljbWQtPnVscENvbW1hbmQgPSBDTURfUVVFX1hSSV9CVUY2NF9DWDsKKwkJCWNtZC0+dWxwTGUgPSAxOworCQl9CisKKwkJY21kLT51bHBDbGFzcyA9IENMQVNTMzsKKwkJY21kLT51bHBDb250ZXh0ID0gcnh4cmk7CisKKwkJcmV0X3ZhbCA9IGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgTFBGQ19FTFNfUklORywgY21kaW9jYnEsIDApOworCisJCWlmIChyZXRfdmFsID09IElPQ0JfRVJST1IpIHsKKwkJCWRpYWdfY21kX2RhdGFfZnJlZShwaGJhLAorCQkJCShzdHJ1Y3QgbHBmY19kbWFidWZleHQgKiltcFswXSk7CisJCQlpZiAobXBbMV0pCisJCQkJZGlhZ19jbWRfZGF0YV9mcmVlKHBoYmEsCisJCQkJCSAgKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqKW1wWzFdKTsKKwkJCWRtcCA9IGxpc3RfZW50cnkobmV4dCwgc3RydWN0IGxwZmNfZG1hYnVmLCBsaXN0KTsKKwkJCXJldF92YWwgPSBFSU87CisJCQlnb3RvIGVycl9wb3N0X3J4YnVmc19leGl0OworCQl9CisKKwkJbHBmY19zbGlfcmluZ3Bvc3RidWZfcHV0KHBoYmEsIHByaW5nLCBtcFswXSk7CisJCWlmIChtcFsxXSkgeworCQkJbHBmY19zbGlfcmluZ3Bvc3RidWZfcHV0KHBoYmEsIHByaW5nLCBtcFsxXSk7CisJCQltcFsxXSA9IE5VTEw7CisJCX0KKworCQkvKiBUaGUgaW9jYiB3YXMgZnJlZWQgYnkgbHBmY19zbGlfaXNzdWVfaW9jYiAqLworCQljbWRpb2NicSA9IGxwZmNfc2xpX2dldF9pb2NicShwaGJhKTsKKwkJaWYgKCFjbWRpb2NicSkgeworCQkJZG1wID0gbGlzdF9lbnRyeShuZXh0LCBzdHJ1Y3QgbHBmY19kbWFidWYsIGxpc3QpOworCQkJcmV0X3ZhbCA9IEVJTzsKKwkJCWdvdG8gZXJyX3Bvc3RfcnhidWZzX2V4aXQ7CisJCX0KKworCQljbWQgPSAmY21kaW9jYnEtPmlvY2I7CisJCWkgPSAwOworCX0KKwlsaXN0X2RlbCgmaGVhZCk7CisKK2Vycl9wb3N0X3J4YnVmc19leGl0OgorCisJaWYgKHJ4Ym1wKSB7CisJCWlmIChyeGJtcC0+dmlydCkKKwkJCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIHJ4Ym1wLT52aXJ0LCByeGJtcC0+cGh5cyk7CisJCWtmcmVlKHJ4Ym1wKTsKKwl9CisKKwlpZiAoY21kaW9jYnEpCisJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqIGxwZmNfYnNnX2RpYWdfdGVzdCAtIHdpdGggYSBwb3J0IGluIGxvb3BiYWNrIGlzc3VlcyBhIEN0IGNtZCB0byBpdHNlbGYKKyAqIEBqb2I6IExQRkNfQlNHX1ZFTkRPUl9ESUFHX1RFU1QgZmNfYnNnX2pvYgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVjZWl2ZXMgYSB1c2VyIGRhdGEgYnVmZmVyIHRvIGJlIHRyYW5zbWl0dGVkIGFuZCByZWNlaXZlZCBvbgorICogdGhlIHNhbWUgcG9ydCwgdGhlIGxpbmsgbXVzdCBiZSB1cCBhbmQgaW4gbG9vcGJhY2sgbW9kZSBwcmlvcgorICogdG8gYmVpbmcgY2FsbGVkLgorICogMS4gQSBrZXJuZWwgYnVmZmVyIGlzIGFsbG9jYXRlZCB0byBjb3B5IHRoZSB1c2VyIGRhdGEgaW50by4KKyAqIDIuIFRoZSBwb3J0IHJlZ2lzdGVycyB3aXRoICJpdHNlbGYiLgorICogMy4gVGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGV4Y2hhbmdlIGlkcyBhcmUgb2J0YWluZWQuCisgKiA0LiBUaGUgcmVjZWl2ZSBleGNoYW5nZSBpZCBpcyBwb3N0ZWQuCisgKiA1LiBBIG5ldyBlbHMgbG9vcGJhY2sgZXZlbnQgaXMgY3JlYXRlZC4KKyAqIDYuIFRoZSBjb21tYW5kIGFuZCByZXNwb25zZSBpb2NicyBhcmUgYWxsb2NhdGVkLgorICogNy4gVGhlIGNtZCBpb2NiIEZzVHlwZSBpcyBzZXQgdG8gZWx4IGxvb3BiYWNrIGFuZCB0aGUgQ21kUnNwIHRvIGxvb3BwYmFjay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBuIHRpbWVzIHdoaWxlIHRoZSBwb3J0IGlzIGluIGxvb3BiYWNrCisgKiBzbyBpdCBpcyB0aGUgYXBwcyByZXNwb25zaWJpbGl0eSB0byBpc3N1ZSBhIHJlc2V0IHRvIHRha2UgdGhlIHBvcnQgb3V0CisgKiBvZiBsb29wYmFjayBtb2RlLgorICoqLworc3RhdGljIGludAorbHBmY19ic2dfZGlhZ190ZXN0KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCit7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CisJc3RydWN0IGRpYWdfbW9kZV90ZXN0ICpkaWFnX21vZGU7CisJc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQ7CisJc3RydWN0IGV2ZW50X2RhdGEgKmV2ZGF0OworCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CisJdWludDMyX3Qgc2l6ZTsKKwl1aW50MzJfdCBmdWxsX3NpemU7CisJc2l6ZV90IHNlZ21lbnRfbGVuID0gMCwgc2VnbWVudF9vZmZzZXQgPSAwLCBjdXJyZW50X29mZnNldCA9IDA7CisJdWludDE2X3QgcnBpOworCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicSwgKnJzcGlvY2JxOworCUlPQ0JfdCAqY21kLCAqcnNwOworCXN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICpjdHJlcTsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKnR4Ym1wOworCXN0cnVjdCB1bHBfYmRlNjQgKnR4YnBsID0gTlVMTDsKKwlzdHJ1Y3QgbHBmY19kbWFidWZleHQgKnR4YnVmZmVyID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisJc3RydWN0IGxwZmNfZG1hYnVmICAqY3VycjsKKwl1aW50MTZfdCB0eHhyaSwgcnh4cmk7CisJdWludDMyX3QgbnVtX2JkZTsKKwl1aW50OF90ICpwdHIgPSBOVUxMLCAqcnhfZGF0YWJ1ZiA9IE5VTEw7CisJaW50IHJjID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgKmRhdGFvdXQgPSBOVUxMOworCXVpbnQzMl90IHRvdGFsX21lbTsKKworCS8qIGluIGNhc2Ugbm8gZGF0YSBpcyByZXR1cm5lZCByZXR1cm4ganVzdCB0aGUgcmV0dXJuIGNvZGUgKi8KKwlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCisJaWYgKGpvYi0+cmVxdWVzdF9sZW4gPAorCSAgICBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3QgZGlhZ19tb2RlX3Rlc3QpKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MzkgUmVjZWl2ZWQgRElBRyBURVNUIHJlcXVlc3QgYmVsb3cgbWluaW11bSAiCisJCQkJInNpemVcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OworCX0KKworCWlmIChqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbiAhPQorCQlqb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW4pIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlkaWFnX21vZGUgPSAoc3RydWN0IGRpYWdfbW9kZV90ZXN0ICopCisJCWpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQ7CisKKwlpZiAoKHBoYmEtPmxpbmtfc3RhdGUgPT0gTFBGQ19IQkFfRVJST1IpIHx8CisJICAgIChwc2xpLT5zbGlfZmxhZyAmIExQRkNfQkxPQ0tfTUdNVF9JTykgfHwKKwkgICAgKCEocHNsaS0+c2xpX2ZsYWcgJiBMUEZDX1NMSV9BQ1RJVkUpKSkgeworCQlyYyA9IC1FQUNDRVM7CisJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OworCX0KKworCWlmICghbHBmY19pc19saW5rX3VwKHBoYmEpIHx8ICEocGhiYS0+bGlua19mbGFnICYgTFNfTE9PUEJBQ0tfTU9ERSkpIHsKKwkJcmMgPSAtRUFDQ0VTOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlzaXplID0gam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisJZnVsbF9zaXplID0gc2l6ZSArIEVMWF9MT09QQkFDS19IRUFERVJfU1o7IC8qIHBsdXMgdGhlIGhlYWRlciAqLworCisJaWYgKChzaXplID09IDApIHx8IChzaXplID4gODAgKiBCVUZfU1pfNEspKSB7CisJCXJjID0gLUVSQU5HRTsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJaWYgKHNpemUgPj0gQlVGX1NaXzRLKSB7CisJCS8qCisJCSAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgaW9jdGwgZGF0YS4gSWYgYnVmZmVyIGlzIGJpZ2dlciB0aGFuIDY0aywKKwkJICogdGhlbiB3ZSBhbGxvY2F0ZSA2NGsgYW5kIHJlLXVzZSB0aGF0IGJ1ZmZlciBvdmVyIGFuZCBvdmVyIHRvCisJCSAqIHhmZXIgdGhlIHdob2xlIGJsb2NrLiBUaGlzIGlzIGJlY2F1c2UgTGludXgga2VybmVsIGhhcyBhCisJCSAqIHByb2JsZW0gYWxsb2NhdGluZyBtb3JlIHRoYW4gMTIwayBvZiBrZXJuZWwgc3BhY2UgbWVtb3J5LiBTYXcKKwkJICogcHJvYmxlbSB3aXRoIEdFVF9GQ1BUQVJHRVRNQVBQSU5HLi4uCisJCSAqLworCQlpZiAoc2l6ZSA8PSAoNjQgKiAxMDI0KSkKKwkJCXRvdGFsX21lbSA9IHNpemU7CisJCWVsc2UKKwkJCXRvdGFsX21lbSA9IDY0ICogMTAyNDsKKwl9IGVsc2UKKwkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBpb2N0bCBkYXRhICovCisJCXRvdGFsX21lbSA9IEJVRl9TWl80SzsKKworCWRhdGFvdXQgPSBrbWFsbG9jKHRvdGFsX21lbSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGFvdXQgPT0gTlVMTCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OworCX0KKworCXB0ciA9IGRhdGFvdXQ7CisJcHRyICs9IEVMWF9MT09QQkFDS19IRUFERVJfU1o7CisJc2dfY29weV90b19idWZmZXIoam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCQlqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsCisJCQkJcHRyLCBzaXplKTsKKworCXJjID0gbHBmY2RpYWdfbG9vcF9zZWxmX3JlZyhwaGJhLCAmcnBpKTsKKwlpZiAocmMpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlyYyA9IGxwZmNkaWFnX2xvb3BfZ2V0X3hyaShwaGJhLCBycGksICZ0eHhyaSwgJnJ4eHJpKTsKKwlpZiAocmMpIHsKKwkJbHBmY2RpYWdfbG9vcF9zZWxmX3VucmVnKHBoYmEsIHJwaSk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJcmMgPSBscGZjZGlhZ19sb29wX3Bvc3RfcnhidWZzKHBoYmEsIHJ4eHJpLCBmdWxsX3NpemUpOworCWlmIChyYykgeworCQlscGZjZGlhZ19sb29wX3NlbGZfdW5yZWcocGhiYSwgcnBpKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlldnQgPSBscGZjX2JzZ19ldmVudF9uZXcoRkNfUkVHX0NUX0VWRU5ULCBjdXJyZW50LT5waWQsCisJCQkJU0xJX0NUX0VMWF9MT09QQkFDSyk7CisJaWYgKCFldnQpIHsKKwkJbHBmY2RpYWdfbG9vcF9zZWxmX3VucmVnKHBoYmEsIHJwaSk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmZXZ0LT5ub2RlLCAmcGhiYS0+Y3RfZXZfd2FpdGVycyk7CisJbHBmY19ic2dfZXZlbnRfcmVmKGV2dCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCisJY21kaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisJcnNwaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisJdHhibXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbHBmY19kbWFidWYpLCBHRlBfS0VSTkVMKTsKKworCWlmICh0eGJtcCkgeworCQl0eGJtcC0+dmlydCA9IGxwZmNfbWJ1Zl9hbGxvYyhwaGJhLCAwLCAmdHhibXAtPnBoeXMpOworCQlJTklUX0xJU1RfSEVBRCgmdHhibXAtPmxpc3QpOworCQl0eGJwbCA9IChzdHJ1Y3QgdWxwX2JkZTY0ICopIHR4Ym1wLT52aXJ0OworCQlpZiAodHhicGwpCisJCQl0eGJ1ZmZlciA9IGRpYWdfY21kX2RhdGFfYWxsb2MocGhiYSwKKwkJCQkJCQl0eGJwbCwgZnVsbF9zaXplLCAwKTsKKwl9CisKKwlpZiAoIWNtZGlvY2JxIHx8ICFyc3Bpb2NicSB8fCAhdHhibXAgfHwgIXR4YnBsIHx8ICF0eGJ1ZmZlcikgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2xvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwljbWQgPSAmY21kaW9jYnEtPmlvY2I7CisJcnNwID0gJnJzcGlvY2JxLT5pb2NiOworCisJSU5JVF9MSVNUX0hFQUQoJmhlYWQpOworCWxpc3RfYWRkX3RhaWwoJmhlYWQsICZ0eGJ1ZmZlci0+ZG1hLmxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3VyciwgJmhlYWQsIGxpc3QpIHsKKwkJc2VnbWVudF9sZW4gPSAoKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqKWN1cnIpLT5zaXplOworCQlpZiAoY3VycmVudF9vZmZzZXQgPT0gMCkgeworCQkJY3RyZXEgPSBjdXJyLT52aXJ0OworCQkJbWVtc2V0KGN0cmVxLCAwLCBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaKTsKKwkJCWN0cmVxLT5SZXZpc2lvbklkLmJpdHMuUmV2aXNpb24gPSBTTElfQ1RfUkVWSVNJT047CisJCQljdHJlcS0+UmV2aXNpb25JZC5iaXRzLkluSWQgPSAwOworCQkJY3RyZXEtPkZzVHlwZSA9IFNMSV9DVF9FTFhfTE9PUEJBQ0s7CisJCQljdHJlcS0+RnNTdWJUeXBlID0gMDsKKwkJCWN0cmVxLT5Db21tYW5kUmVzcG9uc2UuYml0cy5DbWRSc3AgPSBFTFhfTE9PUEJBQ0tfREFUQTsKKwkJCWN0cmVxLT5Db21tYW5kUmVzcG9uc2UuYml0cy5TaXplICAgPSBzaXplOworCQkJc2VnbWVudF9vZmZzZXQgPSBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaOworCQl9IGVsc2UKKwkJCXNlZ21lbnRfb2Zmc2V0ID0gMDsKKworCQlCVUdfT04oc2VnbWVudF9vZmZzZXQgPj0gc2VnbWVudF9sZW4pOworCQltZW1jcHkoY3Vyci0+dmlydCArIHNlZ21lbnRfb2Zmc2V0LAorCQkJcHRyICsgY3VycmVudF9vZmZzZXQsCisJCQlzZWdtZW50X2xlbiAtIHNlZ21lbnRfb2Zmc2V0KTsKKworCQljdXJyZW50X29mZnNldCArPSBzZWdtZW50X2xlbiAtIHNlZ21lbnRfb2Zmc2V0OworCQlCVUdfT04oY3VycmVudF9vZmZzZXQgPiBzaXplKTsKKwl9CisJbGlzdF9kZWwoJmhlYWQpOworCisJLyogQnVpbGQgdGhlIFhNSVRfU0VRVUVOQ0UgaW9jYiAqLworCisJbnVtX2JkZSA9ICh1aW50MzJfdCl0eGJ1ZmZlci0+ZmxhZzsKKworCWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRySGlnaCA9IHB1dFBhZGRySGlnaCh0eGJtcC0+cGh5cyk7CisJY21kLT51bi54c2VxNjQuYmRsLmFkZHJMb3cgPSBwdXRQYWRkckxvdyh0eGJtcC0+cGh5cyk7CisJY21kLT51bi54c2VxNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JMUF82NDsKKwljbWQtPnVuLnhzZXE2NC5iZGwuYmRlU2l6ZSA9IChudW1fYmRlICogc2l6ZW9mKHN0cnVjdCB1bHBfYmRlNjQpKTsKKworCWNtZC0+dW4ueHNlcTY0Lnc1Lmhjc3cuRmN0bCA9IChMUyB8IExBKTsKKwljbWQtPnVuLnhzZXE2NC53NS5oY3N3LkRmY3RsID0gMDsKKwljbWQtPnVuLnhzZXE2NC53NS5oY3N3LlJjdGwgPSBGQ19SQ1RMX0REX1VOU09MX0NUTDsKKwljbWQtPnVuLnhzZXE2NC53NS5oY3N3LlR5cGUgPSBGQ19UWVBFX0NUOworCisJY21kLT51bHBDb21tYW5kID0gQ01EX1hNSVRfU0VRVUVOQ0U2NF9DWDsKKwljbWQtPnVscEJkZUNvdW50ID0gMTsKKwljbWQtPnVscExlID0gMTsKKwljbWQtPnVscENsYXNzID0gQ0xBU1MzOworCWNtZC0+dWxwQ29udGV4dCA9IHR4eHJpOworCisJY21kaW9jYnEtPmlvY2JfZmxhZyB8PSBMUEZDX0lPX0xJQkRGQzsKKwljbWRpb2NicS0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKworCXJjID0gbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0KHBoYmEsIExQRkNfRUxTX1JJTkcsIGNtZGlvY2JxLCByc3Bpb2NicSwKKwkJCQkgICAgICAocGhiYS0+ZmNfcmF0b3YgKiAyKSArIExQRkNfRFJWUl9USU1FT1VUKTsKKworCWlmICgocmMgIT0gSU9DQl9TVUNDRVNTKSB8fCAocnNwLT51bHBTdGF0dXMgIT0gSU9DQl9TVUNDRVNTKSkgeworCQlyYyA9IC1FSU87CisJCWdvdG8gZXJyX2xvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlldnQtPndhaXRpbmcgPSAxOworCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCisJCWV2dC0+d3EsICFsaXN0X2VtcHR5KCZldnQtPmV2ZW50c190b19zZWUpLAorCQkoKHBoYmEtPmZjX3JhdG92ICogMikgKyBMUEZDX0RSVlJfVElNRU9VVCkgKiBIWik7CisJZXZ0LT53YWl0aW5nID0gMDsKKwlpZiAobGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fc2VlKSkKKwkJcmMgPSAocmMpID8gLUVJTlRSIDogLUVUSU1FRE9VVDsKKwllbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9tb3ZlKGV2dC0+ZXZlbnRzX3RvX3NlZS5wcmV2LCAmZXZ0LT5ldmVudHNfdG9fZ2V0KTsKKwkJZXZkYXQgPSBsaXN0X2VudHJ5KGV2dC0+ZXZlbnRzX3RvX2dldC5wcmV2LAorCQkJCSAgIHR5cGVvZigqZXZkYXQpLCBub2RlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlyeF9kYXRhYnVmID0gZXZkYXQtPmRhdGE7CisJCWlmIChldmRhdC0+bGVuICE9IGZ1bGxfc2l6ZSkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTElCREZDLAorCQkJCSIxNjAzIExvb3BiYWNrIHRlc3QgZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkICIKKwkJCQkiZGF0YSBsZW5ndGguIGFjdHVhbCBsZW5ndGggMHgleCBleHBlY3RlZCAiCisJCQkJImxlbmd0aCAweCV4XG4iLAorCQkJCWV2ZGF0LT5sZW4sIGZ1bGxfc2l6ZSk7CisJCQlyYyA9IC1FSU87CisJCX0gZWxzZSBpZiAocnhfZGF0YWJ1ZiA9PSBOVUxMKQorCQkJcmMgPSAtRUlPOworCQllbHNlIHsKKwkJCXJjID0gSU9DQl9TVUNDRVNTOworCQkJLyogc2tpcCBvdmVyIGVseCBsb29wYmFjayBoZWFkZXIgKi8KKwkJCXJ4X2RhdGFidWYgKz0gRUxYX0xPT1BCQUNLX0hFQURFUl9TWjsKKwkJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQkJc2dfY29weV9mcm9tX2J1ZmZlcihqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJCQkJCSAgICBqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LAorCQkJCQkJICAgIHJ4X2RhdGFidWYsIHNpemUpOworCQkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gc2l6ZTsKKwkJfQorCX0KKworZXJyX2xvb3BiYWNrX3Rlc3RfZXhpdDoKKwlscGZjZGlhZ19sb29wX3NlbGZfdW5yZWcocGhiYSwgcnBpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsgLyogcmVsZWFzZSByZWYgKi8KKwlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOyAvKiBkZWxldGUgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisKKwlpZiAoY21kaW9jYnEgIT0gTlVMTCkKKwkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBjbWRpb2NicSk7CisKKwlpZiAocnNwaW9jYnEgIT0gTlVMTCkKKwkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CisKKwlpZiAodHhibXAgIT0gTlVMTCkgeworCQlpZiAodHhicGwgIT0gTlVMTCkgeworCQkJaWYgKHR4YnVmZmVyICE9IE5VTEwpCisJCQkJZGlhZ19jbWRfZGF0YV9mcmVlKHBoYmEsIHR4YnVmZmVyKTsKKwkJCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIHR4Ym1wLT52aXJ0LCB0eGJtcC0+cGh5cyk7CisJCX0KKwkJa2ZyZWUodHhibXApOworCX0KKworbG9vcGJhY2tfdGVzdF9leGl0OgorCWtmcmVlKGRhdGFvdXQpOworCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKKwkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlIGlmIG5vIGVycm9yICovCisJaWYgKHJjID09IDApCisJCWpvYi0+am9iX2RvbmUoam9iKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbHBmY19ic2dfZ2V0X2RmY19yZXYgLSBwcm9jZXNzIGEgR0VUX0RGQ19SRVYgYnNnIHZlbmRvciBjb21tYW5kCisgKiBAam9iOiBHRVRfREZDX1JFViBmY19ic2dfam9iCisgKiovCitzdGF0aWMgaW50CitscGZjX2JzZ19nZXRfZGZjX3JldihzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBnZXRfbWdtdF9yZXYgKmV2ZW50X3JlcTsKKwlzdHJ1Y3QgZ2V0X21nbXRfcmV2X3JlcGx5ICpldmVudF9yZXBseTsKKwlpbnQgcmMgPSAwOworCisJaWYgKGpvYi0+cmVxdWVzdF9sZW4gPAorCSAgICBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3QgZ2V0X21nbXRfcmV2KSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzQwIFJlY2VpdmVkIEdFVF9ERkNfUkVWIHJlcXVlc3QgYmVsb3cgIgorCQkJCSJtaW5pbXVtIHNpemVcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCWV2ZW50X3JlcSA9IChzdHJ1Y3QgZ2V0X21nbXRfcmV2ICopCisJCWpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQ7CisKKwlldmVudF9yZXBseSA9IChzdHJ1Y3QgZ2V0X21nbXRfcmV2X3JlcGx5ICopCisJCWpvYi0+cmVwbHktPnJlcGx5X2RhdGEudmVuZG9yX3JlcGx5LnZlbmRvcl9yc3A7CisKKwlpZiAoam9iLT5yZXBseV9sZW4gPAorCSAgICBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3QgZ2V0X21nbXRfcmV2X3JlcGx5KSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzQxIFJlY2VpdmVkIEdFVF9ERkNfUkVWIHJlcGx5IGJlbG93ICIKKwkJCQkibWluaW11bSBzaXplXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGpvYl9lcnJvcjsKKwl9CisKKwlldmVudF9yZXBseS0+aW5mby5hX01ham9yID0gTUFOQUdFTUVOVF9NQUpPUl9SRVY7CisJZXZlbnRfcmVwbHktPmluZm8uYV9NaW5vciA9IE1BTkFHRU1FTlRfTUlOT1JfUkVWOworam9iX2Vycm9yOgorCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCWlmIChyYyA9PSAwKQorCQlqb2ItPmpvYl9kb25lKGpvYik7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGxwZmNfYnNnX3dha2VfbWJveF93YWl0IC0gbHBmY19ic2dfaXNzdWVfbWJveCBtYm94IGNvbXBsZXRpb24gaGFuZGxlcgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHBtYm94cTogUG9pbnRlciB0byBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhpcyBpcyBjb21wbGV0aW9uIGhhbmRsZXIgZnVuY3Rpb24gZm9yIG1haWxib3ggY29tbWFuZHMgaXNzdWVkIGZyb20KKyAqIGxwZmNfYnNnX2lzc3VlX21ib3ggZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZQorICogbWFpbGJveCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIHdpdGggbm8gbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uCisgKiB3aWxsIHdha2UgdXAgdGhyZWFkIHdhaXRpbmcgb24gdGhlIHdhaXQgcXVldWUgcG9pbnRlZCBieSBjb250ZXh0MQorICogb2YgdGhlIG1haWxib3guCisgKiovCit2b2lkCitscGZjX2JzZ193YWtlX21ib3hfd2FpdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1ib3hxKQoreworCXN0cnVjdCBic2dfam9iX2RhdGEgKmRkX2RhdGE7CisJTUFJTEJPWF90ICpwbWI7CisJTUFJTEJPWF90ICptYjsKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iOworCXVpbnQzMl90IHNpemU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJZGRfZGF0YSA9IHBtYm94cS0+Y29udGV4dDE7CisJaWYgKCFkZF9kYXRhKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCXBtYiA9ICZkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3gucG1ib3hxLT51Lm1iOworCW1iID0gZGRfZGF0YS0+Y29udGV4dF91bi5tYm94Lm1iOworCWpvYiA9IGRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5zZXRfam9iOworCW1lbWNweShtYiwgcG1iLCBzaXplb2YoKnBtYikpOworCXNpemUgPSBqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQlzZ19jb3B5X2Zyb21fYnVmZmVyKGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQkJCWpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsCisJCQkJbWIsIHNpemUpOworCWpvYi0+cmVwbHktPnJlc3VsdCA9IDA7CisJZGRfZGF0YS0+Y29udGV4dF91bi5tYm94LnNldF9qb2IgPSBOVUxMOworCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJam9iLT5qb2JfZG9uZShqb2IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwltZW1wb29sX2ZyZWUoZGRfZGF0YS0+Y29udGV4dF91bi5tYm94LnBtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJa2ZyZWUobWIpOworCWtmcmVlKGRkX2RhdGEpOworCXJldHVybjsKK30KKworLyoqCisgKiBscGZjX2JzZ19jaGVja19jbWRfYWNjZXNzIC0gdGVzdCBmb3IgYSBzdXBwb3J0ZWQgbWFpbGJveCBjb21tYW5kCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAbWI6IFBvaW50ZXIgdG8gYSBtYWlsYm94IG9iamVjdC4KKyAqIEB2cG9ydDogUG9pbnRlciB0byBhIHZwb3J0IG9iamVjdC4KKyAqCisgKiBTb21lIGNvbW1hbmRzIHJlcXVpcmUgdGhlIHBvcnQgdG8gYmUgb2ZmbGluZSwgc29tZSBtYXkgbm90IGJlIGNhbGxlZCBmcm9tCisgKiB0aGUgYXBwbGljYXRpb24uCisgKiovCitzdGF0aWMgaW50IGxwZmNfYnNnX2NoZWNrX2NtZF9hY2Nlc3Moc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCU1BSUxCT1hfdCAqbWIsIHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKK3sKKwkvKiByZXR1cm4gbmVnYXRpdmUgZXJyb3IgdmFsdWVzIGZvciBic2cgam9iICovCisJc3dpdGNoIChtYi0+bWJ4Q29tbWFuZCkgeworCS8qIE9mZmxpbmUgb25seSAqLworCWNhc2UgTUJYX0lOSVRfTElOSzoKKwljYXNlIE1CWF9ET1dOX0xJTks6CisJY2FzZSBNQlhfQ09ORklHX0xJTks6CisJY2FzZSBNQlhfQ09ORklHX1JJTkc6CisJY2FzZSBNQlhfUkVTRVRfUklORzoKKwljYXNlIE1CWF9VTlJFR19MT0dJTjoKKwljYXNlIE1CWF9DTEVBUl9MQToKKwljYXNlIE1CWF9EVU1QX0NPTlRFWFQ6CisJY2FzZSBNQlhfUlVOX0RJQUdTOgorCWNhc2UgTUJYX1JFU1RBUlQ6CisJY2FzZSBNQlhfU0VUX01BU0s6CisJCWlmICghKHZwb3J0LT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKSkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjc0MyBDb21tYW5kIDB4JXggaXMgaWxsZWdhbCBpbiBvbi1saW5lICIKKwkJCQkic3RhdGVcbiIsCisJCQkJbWItPm1ieENvbW1hbmQpOworCQkJcmV0dXJuIC1FUEVSTTsKKwkJfQorCWNhc2UgTUJYX1dSSVRFX05WOgorCWNhc2UgTUJYX1dSSVRFX1ZQQVJNUzoKKwljYXNlIE1CWF9MT0FEX1NNOgorCWNhc2UgTUJYX1JFQURfTlY6CisJY2FzZSBNQlhfUkVBRF9DT05GSUc6CisJY2FzZSBNQlhfUkVBRF9SQ09ORklHOgorCWNhc2UgTUJYX1JFQURfU1RBVFVTOgorCWNhc2UgTUJYX1JFQURfWFJJOgorCWNhc2UgTUJYX1JFQURfUkVWOgorCWNhc2UgTUJYX1JFQURfTE5LX1NUQVQ6CisJY2FzZSBNQlhfRFVNUF9NRU1PUlk6CisJY2FzZSBNQlhfRE9XTl9MT0FEOgorCWNhc2UgTUJYX1VQREFURV9DRkc6CisJY2FzZSBNQlhfS0lMTF9CT0FSRDoKKwljYXNlIE1CWF9MT0FEX0FSRUE6CisJY2FzZSBNQlhfTE9BRF9FWFBfUk9NOgorCWNhc2UgTUJYX0JFQUNPTjoKKwljYXNlIE1CWF9ERUxfTERfRU5UUlk6CisJY2FzZSBNQlhfU0VUX0RFQlVHOgorCWNhc2UgTUJYX1dSSVRFX1dXTjoKKwljYXNlIE1CWF9TTEk0X0NPTkZJRzoKKwljYXNlIE1CWF9SRUFEX0VWRU5UX0xPR19TVEFUVVM6CisJY2FzZSBNQlhfV1JJVEVfRVZFTlRfTE9HOgorCWNhc2UgTUJYX1BPUlRfQ0FQQUJJTElUSUVTOgorCWNhc2UgTUJYX1BPUlRfSU9WX0NPTlRST0w6CisJCWJyZWFrOworCWNhc2UgTUJYX1NFVF9WQVJJQUJMRToKKwljYXNlIE1CWF9SVU5fQklVX0RJQUc2NDoKKwljYXNlIE1CWF9SRUFEX0VWRU5UX0xPRzoKKwljYXNlIE1CWF9SRUFEX1NQQVJNNjQ6CisJY2FzZSBNQlhfUkVBRF9MQToKKwljYXNlIE1CWF9SRUFEX0xBNjQ6CisJY2FzZSBNQlhfUkVHX0xPR0lOOgorCWNhc2UgTUJYX1JFR19MT0dJTjY0OgorCWNhc2UgTUJYX0NPTkZJR19QT1JUOgorCWNhc2UgTUJYX1JVTl9CSVVfRElBRzoKKwlkZWZhdWx0OgorCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJIjI3NDIgVW5rbm93biBDb21tYW5kIDB4JXhcbiIsCisJCQltYi0+bWJ4Q29tbWFuZCk7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJcmV0dXJuIDA7IC8qIG9rICovCit9CisKKy8qKgorICogbHBmY19ic2dfaXNzdWVfbWJveCAtIGlzc3VlcyBhIG1haWxib3ggY29tbWFuZCBvbiBiZWhhbGYgb2YgYW4gYXBwCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAbWI6IFBvaW50ZXIgdG8gYSBtYWlsYm94IG9iamVjdC4KKyAqIEB2cG9ydDogUG9pbnRlciB0byBhIHZwb3J0IG9iamVjdC4KKyAqCisgKiBBbGxvY2F0ZSBhIHRyYWNraW5nIG9iamVjdCwgbWFpbGJveCBjb21tYW5kIG1lbW9yeSwgZ2V0IGEgbWFpbGJveAorICogZnJvbSB0aGUgbWFpbGJveCBwb29sLCBjb3B5IHRoZSBjYWxsZXIgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIElmIG9mZmxpbmUgYW5kIHRoZSBzbGkgaXMgYWN0aXZlIHdlIG5lZWQgdG8gcG9sbCBmb3IgdGhlIGNvbW1hbmQgKHBvcnQgaXMKKyAqIGJlaW5nIHJlc2V0KSBhbmQgY29tLXBsZXRlIHRoZSBqb2IsIG90aGVyd2lzZSBpc3N1ZSB0aGUgbWFpbGJveCBjb21tYW5kIGFuZAorICogbGV0IG91ciBjb21wbGV0aW9uIGhhbmRsZXIgZmluaXNoIHRoZSBjb21tYW5kLgorICoqLworc3RhdGljIHVpbnQzMl90CitscGZjX2JzZ19pc3N1ZV9tYm94KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGZjX2JzZ19qb2IgKmpvYiwKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCit7CisJTFBGQ19NQk9YUV90ICpwbWJveHE7CisJTUFJTEJPWF90ICpwbWI7CisJTUFJTEJPWF90ICptYjsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXVpbnQzMl90IHNpemU7CisJaW50IHJjID0gMDsKKworCS8qIGFsbG9jYXRlIG91ciBic2cgdHJhY2tpbmcgc3RydWN0dXJlICovCisJZGRfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBic2dfam9iX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRkX2RhdGEpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjcyNyBGYWlsZWQgYWxsb2NhdGlvbiBvZiBkZF9kYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYikgeworCQlrZnJlZShkZF9kYXRhKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcG1ib3hxID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtYm94cSkgeworCQlrZnJlZShkZF9kYXRhKTsKKwkJa2ZyZWUobWIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzaXplID0gam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJc2dfY29weV90b19idWZmZXIoam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCQlqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsCisJCQkJbWIsIHNpemUpOworCisJcmMgPSBscGZjX2JzZ19jaGVja19jbWRfYWNjZXNzKHBoYmEsIG1iLCB2cG9ydCk7CisJaWYgKHJjICE9IDApIHsKKwkJa2ZyZWUoZGRfZGF0YSk7CisJCWtmcmVlKG1iKTsKKwkJbWVtcG9vbF9mcmVlKHBtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiByYzsgLyogbXVzdCBiZSBuZWdhdGl2ZSAqLworCX0KKworCW1lbXNldChwbWJveHEsIDAsIHNpemVvZihMUEZDX01CT1hRX3QpKTsKKwlwbWIgPSAmcG1ib3hxLT51Lm1iOworCW1lbWNweShwbWIsIG1iLCBzaXplb2YoKnBtYikpOworCXBtYi0+bWJ4T3duZXIgPSBPV05fSE9TVDsKKwlwbWJveHEtPmNvbnRleHQxID0gTlVMTDsKKwlwbWJveHEtPnZwb3J0ID0gdnBvcnQ7CisKKwlpZiAoKHZwb3J0LT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKSB8fAorCSAgICAoIShwaGJhLT5zbGkuc2xpX2ZsYWcgJiBMUEZDX1NMSV9BQ1RJVkUpKSkgeworCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1ib3hxLCBNQlhfUE9MTCk7CisJCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykgeworCQkJaWYgKHJjICE9IE1CWF9USU1FT1VUKSB7CisJCQkJa2ZyZWUoZGRfZGF0YSk7CisJCQkJa2ZyZWUobWIpOworCQkJCW1lbXBvb2xfZnJlZShwbWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQkJfQorCQkJcmV0dXJuICAocmMgPT0gTUJYX1RJTUVPVVQpID8gLUVUSU1FIDogLUVOT0RFVjsKKwkJfQorCisJCW1lbWNweShtYiwgcG1iLCBzaXplb2YoKnBtYikpOworCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJc2dfY29weV9mcm9tX2J1ZmZlcihqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJCQkJam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwKKwkJCQkJbWIsIHNpemUpOworCQlrZnJlZShkZF9kYXRhKTsKKwkJa2ZyZWUobWIpOworCQltZW1wb29sX2ZyZWUocG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJLyogbm90IHdhaXRpbmcgbWJveCBhbHJlYWR5IGRvbmUgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJLyogc2V0dXAgd2FrZSBjYWxsIGFzIElPQ0IgY2FsbGJhY2sgKi8KKwlwbWJveHEtPm1ib3hfY21wbCA9IGxwZmNfYnNnX3dha2VfbWJveF93YWl0OworCS8qIHNldHVwIGNvbnRleHQgZmllbGQgdG8gcGFzcyB3YWl0X3F1ZXVlIHBvaW50ZXIgdG8gd2FrZSBmdW5jdGlvbiAqLworCXBtYm94cS0+Y29udGV4dDEgPSBkZF9kYXRhOworCWRkX2RhdGEtPnR5cGUgPSBUWVBFX01CT1g7CisJZGRfZGF0YS0+Y29udGV4dF91bi5tYm94LnBtYm94cSA9IHBtYm94cTsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3gubWIgPSBtYjsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3guc2V0X2pvYiA9IGpvYjsKKwlqb2ItPmRkX2RhdGEgPSBkZF9kYXRhOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWJveHEsIE1CWF9OT1dBSVQpOworCWlmICgocmMgIT0gTUJYX1NVQ0NFU1MpICYmIChyYyAhPSBNQlhfQlVTWSkpIHsKKwkJa2ZyZWUoZGRfZGF0YSk7CisJCWtmcmVlKG1iKTsKKwkJbWVtcG9vbF9mcmVlKHBtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAxOworfQorCisvKioKKyAqIGxwZmNfYnNnX21ib3hfY21kIC0gcHJvY2VzcyBhbiBmYyBic2cgTFBGQ19CU0dfVkVORE9SX01CT1ggY29tbWFuZAorICogQGpvYjogTUJPWCBmY19ic2dfam9iIGZvciBMUEZDX0JTR19WRU5ET1JfTUJPWC4KKyAqKi8KK3N0YXRpYyBpbnQKK2xwZmNfYnNnX21ib3hfY21kKHN0cnVjdCBmY19ic2dfam9iICpqb2IpCit7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CisJaW50IHJjID0gMDsKKworCS8qIGluIGNhc2Ugbm8gZGF0YSBpcyB0cmFuc2ZlcnJlZCAqLworCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJaWYgKGpvYi0+cmVxdWVzdF9sZW4gPAorCSAgICBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3QgZGZjX21ib3hfcmVxKSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzM3IFJlY2VpdmVkIE1CT1hfUkVRIHJlcXVlc3QgYmVsb3cgIgorCQkJCSJtaW5pbXVtIHNpemVcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCWlmIChqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbiAhPSBQQUdFX1NJWkUpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGpvYl9lcnJvcjsKKwl9CisKKwlpZiAocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19CTE9DS19NR01UX0lPKSB7CisJCXJjID0gLUVBR0FJTjsKKwkJZ290byBqb2JfZXJyb3I7CisJfQorCisJcmMgPSBscGZjX2JzZ19pc3N1ZV9tYm94KHBoYmEsIGpvYiwgdnBvcnQpOworCitqb2JfZXJyb3I6CisJaWYgKHJjID09IDApIHsKKwkJLyogam9iIGRvbmUgKi8KKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gMDsKKwkJam9iLT5kZF9kYXRhID0gTlVMTDsKKwkJam9iLT5qb2JfZG9uZShqb2IpOworCX0gZWxzZSBpZiAocmMgPT0gMSkKKwkJLyogam9iIHN1Ym1pdHRlZCwgd2lsbCBjb21wbGV0ZSBsYXRlciovCisJCXJjID0gMDsgLyogcmV0dXJuIHplcm8sIG5vIGVycm9yICovCisJZWxzZSB7CisJCS8qIHNvbWUgZXJyb3Igb2NjdXJyZWQgKi8KKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJfQogCiAJcmV0dXJuIHJjOwogfQpAQCAtODM0LDM4ICsyNjQwLDU3IEBACiAvKioKICAqIGxwZmNfYnNnX2hzdF92ZW5kb3IgLSBwcm9jZXNzIGEgdmVuZG9yLXNwZWNpZmljIGZjX2JzZ19qb2IKICAqIEBqb2I6IGZjX2JzZ19qb2IgdG8gaGFuZGxlCi0gKi8KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfYnNnX2hzdF92ZW5kb3Ioc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKIHsKIAlpbnQgY29tbWFuZCA9IGpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWRbMF07CisJaW50IHJjOwogCiAJc3dpdGNoIChjb21tYW5kKSB7CiAJY2FzZSBMUEZDX0JTR19WRU5ET1JfU0VUX0NUX0VWRU5UOgotCQlyZXR1cm4gbHBmY19ic2dfc2V0X2V2ZW50KGpvYik7CisJCXJjID0gbHBmY19ic2dfaGJhX3NldF9ldmVudChqb2IpOwogCQlicmVhazsKLQogCWNhc2UgTFBGQ19CU0dfVkVORE9SX0dFVF9DVF9FVkVOVDoKLQkJcmV0dXJuIGxwZmNfYnNnX2dldF9ldmVudChqb2IpOworCQlyYyA9IGxwZmNfYnNnX2hiYV9nZXRfZXZlbnQoam9iKTsKIAkJYnJlYWs7Ci0KKwljYXNlIExQRkNfQlNHX1ZFTkRPUl9TRU5EX01HTVRfUkVTUDoKKwkJcmMgPSBscGZjX2JzZ19zZW5kX21nbXRfcnNwKGpvYik7CisJCWJyZWFrOworCWNhc2UgTFBGQ19CU0dfVkVORE9SX0RJQUdfTU9ERToKKwkJcmMgPSBscGZjX2JzZ19kaWFnX21vZGUoam9iKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0JTR19WRU5ET1JfRElBR19URVNUOgorCQlyYyA9IGxwZmNfYnNnX2RpYWdfdGVzdChqb2IpOworCQlicmVhazsKKwljYXNlIExQRkNfQlNHX1ZFTkRPUl9HRVRfTUdNVF9SRVY6CisJCXJjID0gbHBmY19ic2dfZ2V0X2RmY19yZXYoam9iKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0JTR19WRU5ET1JfTUJPWDoKKwkJcmMgPSBscGZjX2JzZ19tYm94X2NtZChqb2IpOworCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmMgPSAtRUlOVkFMOworCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCQkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCQlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKKwkJYnJlYWs7CiAJfQorCisJcmV0dXJuIHJjOwogfQogCiAvKioKICAqIGxwZmNfYnNnX3JlcXVlc3QgLSBoYW5kbGUgYSBic2cgcmVxdWVzdCBmcm9tIHRoZSBGQyB0cmFuc3BvcnQKICAqIEBqb2I6IGZjX2JzZ19qb2IgdG8gaGFuZGxlCi0gKi8KKyAqKi8KIGludAogbHBmY19ic2dfcmVxdWVzdChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQogewogCXVpbnQzMl90IG1zZ2NvZGU7Ci0JaW50IHJjID0gLUVJTlZBTDsKKwlpbnQgcmM7CiAKIAltc2djb2RlID0gam9iLT5yZXF1ZXN0LT5tc2djb2RlOwotCiAJc3dpdGNoIChtc2djb2RlKSB7CiAJY2FzZSBGQ19CU0dfSFNUX1ZFTkRPUjoKIAkJcmMgPSBscGZjX2JzZ19oc3RfdmVuZG9yKGpvYik7CkBAIC04NzQsOSArMjY5OSwxMyBAQAogCQlyYyA9IGxwZmNfYnNnX3Jwb3J0X2Vscyhqb2IpOwogCQlicmVhazsKIAljYXNlIEZDX0JTR19SUFRfQ1Q6Ci0JCXJjID0gbHBmY19ic2dfcnBvcnRfY3Qoam9iKTsKKwkJcmMgPSBscGZjX2JzZ19zZW5kX21nbXRfY21kKGpvYik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCXJjID0gLUVJTlZBTDsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkJLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CiAJCWJyZWFrOwogCX0KIApAQCAtODg5LDE3ICsyNzE4LDcxIEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBqdXN0IGFib3J0cyB0aGUgam9iJ3MgSU9DQi4gIFRoZSBhYm9ydGVkIElPQ0Igd2lsbCByZXR1cm4gdG8KICAqIHRoZSB3YWl0aW5nIGZ1bmN0aW9uIHdoaWNoIHdpbGwgaGFuZGxlIHBhc3NpbmcgdGhlIGVycm9yIGJhY2sgdG8gdXNlcnNwYWNlCi0gKi8KKyAqKi8KIGludAogbHBmY19ic2dfdGltZW91dChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQogewogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOwotCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopam9iLT5kZF9kYXRhOworCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiOworCXN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0OworCXN0cnVjdCBscGZjX2JzZ19pb2NiICppb2NiOworCXN0cnVjdCBscGZjX2JzZ19tYm94ICptYm94OwogCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZyA9ICZwaGJhLT5zbGkucmluZ1tMUEZDX0VMU19SSU5HXTsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoY21kaW9jYikKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCWRkX2RhdGEgPSAoc3RydWN0IGJzZ19qb2JfZGF0YSAqKWpvYi0+ZGRfZGF0YTsKKwkvKiB0aW1lb3V0IGFuZCBjb21wbGV0aW9uIGNyb3NzZWQgcGF0aHMgaWYgbm8gZGRfZGF0YSAqLworCWlmICghZGRfZGF0YSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoZGRfZGF0YS0+dHlwZSkgeworCWNhc2UgVFlQRV9JT0NCOgorCQlpb2NiID0gJmRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYjsKKwkJY21kaW9jYiA9IGlvY2ItPmNtZGlvY2JxOworCQkvKiBoaW50IHRvIGNvbXBsZXRpb24gaGFuZGxlciB0aGF0IHRoZSBqb2IgdGltZWQgb3V0ICovCisJCWpvYi0+cmVwbHktPnJlc3VsdCA9IC1FQUdBSU47CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJLyogdGhpcyB3aWxsIGNhbGwgb3VyIGNvbXBsZXRpb24gaGFuZGxlciAqLworCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWcocGhiYSwgcHJpbmcsIGNtZGlvY2IpOworCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQlicmVhazsKKwljYXNlIFRZUEVfRVZUOgorCQlldnQgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmV2dDsKKwkJLyogdGhpcyBldmVudCBoYXMgbm8gam9iIGFueW1vcmUgKi8KKwkJZXZ0LT5zZXRfam9iID0gTlVMTDsKKwkJam9iLT5kZF9kYXRhID0gTlVMTDsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkJLyogUmV0dXJuIC1FQUdBSU4gd2hpY2ggaXMgb3VyIHdheSBvZiBzaWduYWxseWluZyB0aGUKKwkJICogYXBwIHRvIHJldHJ5LgorCQkgKi8KKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gLUVBR0FJTjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlqb2ItPmpvYl9kb25lKGpvYik7CisJCWJyZWFrOworCWNhc2UgVFlQRV9NQk9YOgorCQltYm94ID0gJmRkX2RhdGEtPmNvbnRleHRfdW4ubWJveDsKKwkJLyogdGhpcyBtYm94IGhhcyBubyBqb2IgYW55bW9yZSAqLworCQltYm94LT5zZXRfam9iID0gTlVMTDsKKwkJam9iLT5kZF9kYXRhID0gTlVMTDsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gLUVBR0FJTjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlqb2ItPmpvYl9kb25lKGpvYik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJfQogCisJLyogc2NzaSB0cmFuc3BvcnQgZmMgZmNfYnNnX2pvYl90aW1lb3V0IGV4cGVjdHMgYSB6ZXJvIHJldHVybiBjb2RlLAorCSAqIG90aGVyd2lzZSBhbiBlcnJvciBtZXNzYWdlIHdpbGwgYmUgZGlzcGxheWVkIG9uIHRoZSBjb25zb2xlCisJICogc28gYWx3YXlzIHJldHVybiBzdWNjZXNzICh6ZXJvKQorCSAqLwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM4Zjg3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmgKQEAgLTAsMCArMSw5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCisgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICoKKyAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgICAqCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgICAgICAgKgorICogUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLiAqCisgKiBBTEwgRVhQUkVTUyBPUiBJTVBMSUVEIENPTkRJVElPTlMsIFJFUFJFU0VOVEFUSU9OUyBBTkQgICAgICAgICAgKgorICogV0FSUkFOVElFUywgSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSwgICoKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBOT04tSU5GUklOR0VNRU5ULCBBUkUgICAgICAqCisgKiBESVNDTEFJTUVELCBFWENFUFQgVE8gVEhFIEVYVEVOVCBUSEFUIFNVQ0ggRElTQ0xBSU1FUlMgQVJFIEhFTEQgKgorICogVE8gQkUgTEVHQUxMWSBJTlZBTElELiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgICoKKyAqIG1vcmUgZGV0YWlscywgYSBjb3B5IG9mIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUgZmlsZSBDT1BZSU5HICAqCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBic2cgZGVmaW5pdGlvbnMKKyAqIE5vIHBvaW50ZXJzIHRvIHVzZXIgZGF0YSBhcmUgYWxsb3dlZCwgYWxsIGFwcGxpY2F0aW9uIGJ1ZmZlcnMgYW5kIHNpemVzIHdpbGwKKyAqIGRlcml2ZWQgdGhyb3VnaCB0aGUgYnNnIGludGVyZmFjZS4KKyAqCisgKiBUaGVzZSBhcmUgdGhlIHZlbmRvciB1bmlxdWUgc3RydWN0dXJlcyBwYXNzZWQgaW4gdXNpbmcgdGhlIGJzZworICogRkNfQlNHX0hTVF9WRU5ET1IgbWVzc2FnZSBjb2RlIHR5cGUuCisgKi8KKyNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX1NFVF9DVF9FVkVOVAkxCisjZGVmaW5lIExQRkNfQlNHX1ZFTkRPUl9HRVRfQ1RfRVZFTlQJMgorI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfU0VORF9NR01UX1JFU1AJMworI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfRElBR19NT0RFCTQKKyNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX0RJQUdfVEVTVAk1CisjZGVmaW5lIExQRkNfQlNHX1ZFTkRPUl9HRVRfTUdNVF9SRVYJNgorI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfTUJPWAkJNworCitzdHJ1Y3Qgc2V0X2N0X2V2ZW50IHsKKwl1aW50MzJfdCBjb21tYW5kOworCXVpbnQzMl90IHR5cGVfbWFzazsKKwl1aW50MzJfdCBldl9yZXFfaWQ7CisJdWludDMyX3QgZXZfcmVnX2lkOworfTsKKworc3RydWN0IGdldF9jdF9ldmVudCB7CisJdWludDMyX3QgY29tbWFuZDsKKwl1aW50MzJfdCBldl9yZWdfaWQ7CisJdWludDMyX3QgZXZfcmVxX2lkOworfTsKKworc3RydWN0IGdldF9jdF9ldmVudF9yZXBseSB7CisJdWludDMyX3QgaW1tZWRfZGF0YTsKKwl1aW50MzJfdCB0eXBlOworfTsKKworc3RydWN0IHNlbmRfbWdtdF9yZXNwIHsKKwl1aW50MzJfdCBjb21tYW5kOworCXVpbnQzMl90IHRhZzsKK307CisKKworI2RlZmluZSBJTlRFUk5BTF9MT09QX0JBQ0sgMHgxIC8qIGFkYXB0ZXIgc2hvcnQgY3V0cyB0aGUgbG9vcCBpbnRlcm5hbGx5ICovCisjZGVmaW5lIEVYVEVSTkFMX0xPT1BfQkFDSyAweDIgLyogcmVxdWlyZXMgYW4gZXh0ZXJuYWwgbG9vcGJhY2sgcGx1ZyAqLworCitzdHJ1Y3QgZGlhZ19tb2RlX3NldCB7CisJdWludDMyX3QgY29tbWFuZDsKKwl1aW50MzJfdCB0eXBlOworCXVpbnQzMl90IHRpbWVvdXQ7Cit9OworCitzdHJ1Y3QgZGlhZ19tb2RlX3Rlc3QgeworCXVpbnQzMl90IGNvbW1hbmQ7Cit9OworCisjZGVmaW5lIExQRkNfV1dOTl9UWVBFCQkwCisjZGVmaW5lIExQRkNfV1dQTl9UWVBFCQkxCisKK3N0cnVjdCBnZXRfbWdtdF9yZXYgeworCXVpbnQzMl90IGNvbW1hbmQ7Cit9OworCisjZGVmaW5lIE1BTkFHRU1FTlRfTUFKT1JfUkVWICAgMQorI2RlZmluZSBNQU5BR0VNRU5UX01JTk9SX1JFViAgIDAKKworLyogdGhlIE1nbXRSZXZJbmZvIHN0cnVjdHVyZSAqLworc3RydWN0IE1nbXRSZXZJbmZvIHsKKwl1aW50MzJfdCBhX01ham9yOworCXVpbnQzMl90IGFfTWlub3I7Cit9OworCitzdHJ1Y3QgZ2V0X21nbXRfcmV2X3JlcGx5IHsKKwlzdHJ1Y3QgTWdtdFJldkluZm8gaW5mbzsKK307CisKK3N0cnVjdCBkZmNfbWJveF9yZXEgeworCXVpbnQzMl90IGNvbW1hbmQ7CisJdWludDMyX3QgaW5FeHRXTGVuOworCXVpbnQzMl90IG91dEV4dFdMZW47CisJdWludDhfdCBtYk9mZnNldDsKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKaW5kZXggNjUwNDk0ZC4uNmYwZmI1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTQ0LDE4ICs0NCwyNiBAQAogdm9pZCBscGZjX3VucmVnX2xvZ2luKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MTZfdCwgdWludDMyX3QsIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY191bnJlZ19kaWQoc3RydWN0IGxwZmNfaGJhICosIHVpbnQxNl90LCB1aW50MzJfdCwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX3JlZ192cGkoc3RydWN0IGxwZmNfdnBvcnQgKiwgTFBGQ19NQk9YUV90ICopOwordm9pZCBscGZjX3JlZ2lzdGVyX25ld192cG9ydChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfdnBvcnQgKiwKKwkJCXN0cnVjdCBscGZjX25vZGVsaXN0ICopOwogdm9pZCBscGZjX3VucmVnX3ZwaShzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDE2X3QsIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19pbml0X2xpbmsoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MzJfdCwgdWludDMyX3QpOwogdm9pZCBscGZjX3JlcXVlc3RfZmVhdHVyZXMoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjTWJveHEgKik7Cit2b2lkIGxwZmNfc3VwcG9ydGVkX3BhZ2VzKHN0cnVjdCBscGZjTWJveHEgKik7Cit2b2lkIGxwZmNfc2xpNF9wYXJhbXMoc3RydWN0IGxwZmNNYm94cSAqKTsKK2ludCBscGZjX3BjX3NsaTRfcGFyYW1zX2dldChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogCiBzdHJ1Y3QgbHBmY192cG9ydCAqbHBmY19maW5kX3Zwb3J0X2J5X2RpZChzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDMyX3QpOwogdm9pZCBscGZjX2NsZWFudXBfcmN2X2J1ZmZlcnMoc3RydWN0IGxwZmNfdnBvcnQgKik7CiB2b2lkIGxwZmNfcmN2X3NlcV9jaGVja19lZHRvdihzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIHZvaWQgbHBmY19jbGVhbnVwX3JwaXMoc3RydWN0IGxwZmNfdnBvcnQgKiwgaW50KTsKK3ZvaWQgbHBmY19jbGVhbnVwX3BlbmRpbmdfbWJveChzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIGludCBscGZjX2xpbmtkb3duKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19saW5rZG93bl9wb3J0KHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX3BvcnRfbGlua19mYWlsdXJlKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX21ieF9jbXBsX3JlYWRfbGEoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKK3ZvaWQgbHBmY19pbml0X3ZwaV9jbXBsKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7Cit2b2lkIGxwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5KHN0cnVjdCBscGZjX2hiYSAqKTsKIAogdm9pZCBscGZjX21ieF9jbXBsX3JlZ19sb2dpbihzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX21ieF9jbXBsX2RmbHRfcnBpKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CkBAIC03Myw2ICs4MSw3IEBACiBpbnQgIGxwZmNfY2FuX2Rpc2N0bW8oc3RydWN0IGxwZmNfdnBvcnQgKik7CiBpbnQgIGxwZmNfdW5yZWdfcnBpKHN0cnVjdCBscGZjX3Zwb3J0ICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICopOwogdm9pZCBscGZjX3VucmVnX2FsbF9ycGlzKHN0cnVjdCBscGZjX3Zwb3J0ICopOwordm9pZCBscGZjX3VucmVnX2hiYV9ycGlzKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY191bnJlZ19kZWZhdWx0X3JwaXMoc3RydWN0IGxwZmNfdnBvcnQgKik7CiB2b2lkIGxwZmNfaXNzdWVfcmVnX3ZwaShzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfdnBvcnQgKik7CiAKQEAgLTk5LDcgKzEwOCw3IEBACiAKIHZvaWQgbHBmY19kb19zY3JfbnNfcGxvZ2koc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3Zwb3J0ICopOwogaW50IGxwZmNfY2hlY2tfc3Bhcm0oc3RydWN0IGxwZmNfdnBvcnQgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiwKLQkJICAgICBzdHJ1Y3Qgc2Vydl9wYXJtICosIHVpbnQzMl90KTsKKwkJICAgICBzdHJ1Y3Qgc2Vydl9wYXJtICosIHVpbnQzMl90LCBpbnQpOwogaW50IGxwZmNfZWxzX2Fib3J0KHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIHZvaWQgbHBmY19tb3JlX3Bsb2dpKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX21vcmVfYWRpc2Moc3RydWN0IGxwZmNfdnBvcnQgKik7CkBAIC0xOTcsNiArMjA2LDcgQEAKIHZvaWQgbHBmY191bnJlZ19mY2ZpKHN0cnVjdCBscGZjTWJveHEgKiwgdWludDE2X3QpOwogdm9pZCBscGZjX3Jlc3VtZV9ycGkoc3RydWN0IGxwZmNNYm94cSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIGludCBscGZjX2NoZWNrX3BlbmRpbmdfZmNvZV9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDhfdCk7Cit2b2lkIGxwZmNfaXNzdWVfaW5pdF92cGkoc3RydWN0IGxwZmNfdnBvcnQgKik7CiAKIHZvaWQgbHBmY19jb25maWdfaGJxKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCwgc3RydWN0IGxwZmNfaGJxX2luaXQgKiwKIAl1aW50MzJfdCAsIExQRkNfTUJPWFFfdCAqKTsKQEAgLTIwNiw3ICsyMTYsMTEgQEAKIHZvaWQgbHBmY19zbGk0X3JiX2ZyZWUoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBoYnFfZG1hYnVmICopOwogdm9pZCBscGZjX3NsaTRfYnVpbGRfZGZsdF9mY2ZfcmVjb3JkKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgZmNmX3JlY29yZCAqLAogCQkJdWludDE2X3QpOwordm9pZCBscGZjX3VucmVnaXN0ZXJfZmNmKHN0cnVjdCBscGZjX2hiYSAqKTsKK3ZvaWQgbHBmY191bnJlZ2lzdGVyX2ZjZl9yZXNjYW4oc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX3VucmVnaXN0ZXJfdW51c2VkX2ZjZihzdHJ1Y3QgbHBmY19oYmEgKik7CitpbnQgbHBmY19zbGk0X3JlZGlzY19mY2ZfdGFibGUoc3RydWN0IGxwZmNfaGJhICopOwordm9pZCBscGZjX2ZjZl9yZWRpc2Nfd2FpdF9zdGFydF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKik7CiAKIGludCBscGZjX21lbV9hbGxvYyhzdHJ1Y3QgbHBmY19oYmEgKiwgaW50IGFsaWduKTsKIHZvaWQgbHBmY19tZW1fZnJlZShzdHJ1Y3QgbHBmY19oYmEgKik7CkBAIC0zNjUsNiArMzc5LDggQEAKIHZvaWQgbHBmY19jcmVhdGVfc3RhdGljX3Zwb3J0KHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19zdG9wX2hiYV90aW1lcnMoc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX3N0b3BfcG9ydChzdHJ1Y3QgbHBmY19oYmEgKik7Cit2b2lkIF9fbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHN0cnVjdCBscGZjX2hiYSAqKTsKK3ZvaWQgbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19wYXJzZV9mY29lX2NvbmYoc3RydWN0IGxwZmNfaGJhICosIHVpbnQ4X3QgKiwgdWludDMyX3QpOwogaW50IGxwZmNfcGFyc2VfdnBkKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50OF90ICosIGludCk7CiB2b2lkIGxwZmNfc3RhcnRfZmRpc2NzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSk7CkBAIC0zNzgsNSArMzk0LDUgQEAKIC8qIGZ1bmN0aW9ucyB0byBzdXBwb3J0IFNHSU92NC9ic2cgaW50ZXJmYWNlICovCiBpbnQgbHBmY19ic2dfcmVxdWVzdChzdHJ1Y3QgZmNfYnNnX2pvYiAqKTsKIGludCBscGZjX2JzZ190aW1lb3V0KHN0cnVjdCBmY19ic2dfam9iICopOwotdm9pZCBscGZjX2JzZ19jdF91bnNvbF9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKiwKK2ludCBscGZjX2JzZ19jdF91bnNvbF9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKiwKIAkJCSAgICAgc3RydWN0IGxwZmNfaW9jYnEgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKaW5kZXggMGViY2Q5Yi4uYzdlOTIxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtOTcsNyArOTcsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKmJkZUJ1ZjsKIAotCWxwZmNfYnNnX2N0X3Vuc29sX2V2ZW50KHBoYmEsIHByaW5nLCBwaW9jYnEpOworCWlmIChscGZjX2JzZ19jdF91bnNvbF9ldmVudChwaGJhLCBwcmluZywgcGlvY2JxKSA9PSAwKQorCQlyZXR1cm47CiAKIAlpZiAodW5saWtlbHkoaWNtZC0+dWxwU3RhdHVzID09IElPU1RBVF9ORUVEX0JVRkZFUikpIHsKIAkJbHBmY19zbGlfaGJxYnVmX2FkZF9oYnFzKHBoYmEsIExQRkNfRUxTX0hCUSk7CkBAIC0xODEsNyArMTgyLDggQEAKIAl1aW50MzJfdCBzaXplOwogCiAJLyogRm9yd2FyZCBhYm9ydCBldmVudCB0byBhbnkgcHJvY2VzcyByZWdpc3RlcmVkIHRvIHJlY2VpdmUgY3QgZXZlbnQgKi8KLQlscGZjX2JzZ19jdF91bnNvbF9ldmVudChwaGJhLCBwcmluZywgcGlvY2JxKTsKKwlpZiAobHBmY19ic2dfY3RfdW5zb2xfZXZlbnQocGhiYSwgcHJpbmcsIHBpb2NicSkgPT0gMCkKKwkJcmV0dXJuOwogCiAJLyogSWYgdGhlcmUgaXMgbm8gQkRFIGFzc29jaWF0ZWQgd2l0aCBJT0NCLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvICovCiAJaWYgKGljbWQtPnVscEJkZUNvdW50ID09IDApCkBAIC0xODQzLDEyICsxODQ1LDcgQEAKIAkJYyAgPSAocmV2ICYgMHgwMDAwZmYwMCkgPj4gODsKIAkJYjQgPSAocmV2ICYgMHgwMDAwMDBmZik7CiAKLQkJaWYgKGZsYWcpCi0JCQlzcHJpbnRmKGZ3cmV2aXNpb24sICIlZC4lZCVkJWMlZCAiLCBiMSwKLQkJCQliMiwgYjMsIGMsIGI0KTsKLQkJZWxzZQotCQkJc3ByaW50Zihmd3JldmlzaW9uLCAiJWQuJWQlZCVjJWQgIiwgYjEsCi0JCQkJYjIsIGIzLCBjLCBiNCk7CisJCXNwcmludGYoZndyZXZpc2lvbiwgIiVkLiVkJWQlYyVkIiwgYjEsIGIyLCBiMywgYywgYjQpOwogCX0KIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYwppbmRleCAyY2MzOTY4Li4wOGI2NjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKQEAgLTUwLDkgKzUwLDYgQEAKIAkJCQlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwgdWludDhfdCByZXRyeSk7CiBzdGF0aWMgaW50IGxwZmNfaXNzdWVfZmFicmljX2lvY2Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLAogCQkJCSAgc3RydWN0IGxwZmNfaW9jYnEgKmlvY2IpOwotc3RhdGljIHZvaWQgbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLAotCQkJCSAgICBzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsCi0JCQkJICAgIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKTsKIAogc3RhdGljIGludCBscGZjX21heF9lbHNfdHJpZXMgPSAzOwogCkBAIC01OTIsNiArNTg5LDE1IEBACiAJCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOwogCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQl9CisJCS8qCisJCSAqIElmIFZQSSBpcyB1bnJlZ2VkLCBkcml2ZXIgbmVlZCB0byBkbyBJTklUX1ZQSQorCQkgKiBiZWZvcmUgcmUtcmVnaXN0ZXJpbmcKKwkJICovCisJCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpIHsKKwkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSTsKKwkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJfQogCX0KIAogCWlmIChwaGJhLT5zbGlfcmV2IDwgTFBGQ19TTElfUkVWNCkgewpAQCAtNjA0LDEwICs2MTAsMTMgQEAKIAl9IGVsc2UgewogCQluZGxwLT5ubHBfdHlwZSB8PSBOTFBfRkFCUklDOwogCQlscGZjX25scF9zZXRfc3RhdGUodnBvcnQsIG5kbHAsIE5MUF9TVEVfVU5NQVBQRURfTk9ERSk7Ci0JCWlmICh2cG9ydC0+dnBpX3N0YXRlICYgTFBGQ19WUElfUkVHSVNURVJFRCkgeworCQlpZiAoKCEodnBvcnQtPmZjX2ZsYWcgJiBGQ19WUE9SVF9ORUVEU19SRUdfVlBJKSkgJiYKKwkJCSh2cG9ydC0+dnBpX3N0YXRlICYgTFBGQ19WUElfUkVHSVNURVJFRCkpIHsKIAkJCWxwZmNfc3RhcnRfZmRpc2NzKHBoYmEpOwogCQkJbHBmY19kb19zY3JfbnNfcGxvZ2kocGhiYSwgdnBvcnQpOwotCQl9IGVsc2UKKwkJfSBlbHNlIGlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX1ZGSV9SRUdJU1RFUkVEKQorCQkJbHBmY19pc3N1ZV9pbml0X3ZwaSh2cG9ydCk7CisJCWVsc2UKIAkJCWxwZmNfaXNzdWVfcmVnX3ZmaSh2cG9ydCk7CiAJfQogCXJldHVybiAwOwpAQCAtODA0LDYgKzgxMyw5IEBACiAJCQkJIGlyc3AtPnVscFRpbWVvdXQpOwogCQlnb3RvIGZsb2dpZmFpbDsKIAl9CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfVlBPUlRfQ1ZMX1JDVkQ7CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCiAJLyoKIAkgKiBUaGUgRkxvZ0kgc3VjY2VlZGVkLiAgU3luYyB0aGUgZGF0YSBmb3IgdGhlIENQVSBiZWZvcmUKQEAgLTI3MjAsNyArMjczMiw3IEBACiAJaWYgKGRpZCA9PSBGRE1JX0RJRCkKIAkJcmV0cnkgPSAxOwogCi0JaWYgKChjbWQgPT0gRUxTX0NNRF9GTE9HSSkgJiYKKwlpZiAoKChjbWQgPT0gRUxTX0NNRF9GTE9HSSkgfHwgKGNtZCA9PSBFTFNfQ01EX0ZESVNDKSkgJiYKIAkgICAgKHBoYmEtPmZjX3RvcG9sb2d5ICE9IFRPUE9MT0dZX0xPT1ApICYmCiAJICAgICFscGZjX2Vycm9yX2xvc3RfbGluayhpcnNwKSkgewogCQkvKiBGTE9HSSByZXRyeSBwb2xpY3kgKi8KQEAgLTQzODUsNyArNDM5Nyw3IEBACiAKIAlkaWQgPSBGYWJyaWNfRElEOwogCi0JaWYgKChscGZjX2NoZWNrX3NwYXJtKHZwb3J0LCBuZGxwLCBzcCwgQ0xBU1MzKSkpIHsKKwlpZiAoKGxwZmNfY2hlY2tfc3Bhcm0odnBvcnQsIG5kbHAsIHNwLCBDTEFTUzMsIDEpKSkgewogCQkvKiBGb3IgYSBGTE9HSSB3ZSBhY2NlcHQsIHRoZW4gaWYgb3VyIHBvcnRuYW1lIGlzIGdyZWF0ZXIKIAkJICogdGhlbiB0aGUgcmVtb3RlIHBvcnRuYW1lIHdlIGluaXRpYXRlIE5wb3J0IGxvZ2luLgogCQkgKi8KQEAgLTU5MTUsNiArNTkyNyw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IChzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKSBwbWItPmNvbnRleHQyOwogCU1BSUxCT1hfdCAqbWIgPSAmcG1iLT51Lm1iOworCWludCByYzsKIAogCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZQT1JUX05FRURTX1JFR19WUEk7CkBAIC01OTM2LDYgKzU5NDksMjYgQEAKIAkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJCWxwZmNfY2FuX2Rpc2N0bW8odnBvcnQpOwogCQkJYnJlYWs7CisJCS8qIElmIHJlZ192cGkgZmFpbCB3aXRoIGludmFsaWQgVlBJIHN0YXR1cywgcmUtaW5pdCBWUEkgKi8KKwkJY2FzZSAweDIwOgorCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQlscGZjX2luaXRfdnBpKHBoYmEsIHBtYiwgdnBvcnQtPnZwaSk7CisJCQlwbWItPnZwb3J0ID0gdnBvcnQ7CisJCQlwbWItPm1ib3hfY21wbCA9IGxwZmNfaW5pdF92cGlfY21wbDsKKwkJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsCisJCQkJTUJYX05PV0FJVCk7CisJCQlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgeworCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsCisJCQkJCUtFUk5fRVJSLCBMT0dfTUJPWCwKKwkJCQkJIjI3MzIgRmFpbGVkIHRvIGlzc3VlIElOSVRfVlBJIgorCQkJCQkiIG1haWxib3ggY29tbWFuZFxuIik7CisJCQl9IGVsc2UgeworCQkJCWxwZmNfbmxwX3B1dChuZGxwKTsKKwkJCQlyZXR1cm47CisJCQl9CisKIAkJZGVmYXVsdDoKIAkJCS8qIFRyeSB0byByZWNvdmVyIGZyb20gdGhpcyBlcnJvciAqLwogCQkJbHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0KTsKQEAgLTU5NDksMTMgKzU5ODIsMTcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJdnBvcnQtPnZwaV9zdGF0ZSB8PSBMUEZDX1ZQSV9SRUdJU1RFUkVEOwotCQlpZiAodnBvcnQgPT0gcGhiYS0+cHBvcnQpCisJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJaWYgKHZwb3J0ID09IHBoYmEtPnBwb3J0KSB7CiAJCQlpZiAocGhiYS0+c2xpX3JldiA8IExQRkNfU0xJX1JFVjQpCiAJCQkJbHBmY19pc3N1ZV9mYWJyaWNfcmVnbG9naW4odnBvcnQpOwotCQkJZWxzZQotCQkJCWxwZmNfaXNzdWVfcmVnX3ZmaSh2cG9ydCk7Ci0JCWVsc2UKKwkJCWVsc2UgeworCQkJCWxwZmNfc3RhcnRfZmRpc2NzKHBoYmEpOworCQkJCWxwZmNfZG9fc2NyX25zX3Bsb2dpKHBoYmEsIHZwb3J0KTsKKwkJCX0KKwkJfSBlbHNlCiAJCQlscGZjX2RvX3Njcl9uc19wbG9naShwaGJhLCB2cG9ydCk7CiAJfQogCkBAIC01OTc3LDcgKzYwMTQsNyBAQAogICogVGhpcyByb3V0aW5lIHJlZ2lzdGVycyB0aGUgQHZwb3J0IGFzIGEgbmV3IHZpcnR1YWwgcG9ydCB3aXRoIGEgSEJBLgogICogSXQgaXMgZG9uZSB0aHJvdWdoIGEgcmVnaXN0ZXJpbmcgdnBpIG1haWxib3ggY29tbWFuZC4KICAqKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBscGZjX3JlZ2lzdGVyX25ld192cG9ydChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwKIAkJCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQogewpAQCAtNjAxOCw2ICs2MDU1LDc4IEBACiB9CiAKIC8qKgorICogbHBmY19yZXRyeV9wcG9ydF9kaXNjb3ZlcnkgLSBTdGFydCB0aW1lciB0byByZXRyeSBGTE9HSS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBhYm9ydCBhbGwgcGVuZGluZyBkaXNjb3ZlcnkgY29tbWFuZHMgYW5kCisgKiBzdGFydCBhIHRpbWVyIHRvIHJldHJ5IEZMT0dJIGZvciB0aGUgcGh5c2ljYWwgcG9ydAorICogZGlzY292ZXJ5LgorICoqLwordm9pZAorbHBmY19yZXRyeV9wcG9ydF9kaXNjb3Zlcnkoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdDsKKwlpbnQgaTsKKwl1aW50MzJfdCBsaW5rX3N0YXRlOworCisJLyogVHJlYXQgdGhpcyBmYWlsdXJlIGFzIGxpbmtkb3duIGZvciBhbGwgdnBvcnRzICovCisJbGlua19zdGF0ZSA9IHBoYmEtPmxpbmtfc3RhdGU7CisJbHBmY19saW5rZG93bihwaGJhKTsKKwlwaGJhLT5saW5rX3N0YXRlID0gbGlua19zdGF0ZTsKKworCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CisKKwlpZiAodnBvcnRzKSB7CisJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3Zwb3J0cyAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7CisJCQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQodnBvcnRzW2ldLCBGYWJyaWNfRElEKTsKKwkJCWlmIChuZGxwKQorCQkJCWxwZmNfY2FuY2VsX3JldHJ5X2RlbGF5X3Rtbyh2cG9ydHNbaV0sIG5kbHApOworCQkJbHBmY19lbHNfZmx1c2hfY21kKHZwb3J0c1tpXSk7CisJCX0KKwkJbHBmY19kZXN0cm95X3Zwb3J0X3dvcmtfYXJyYXkocGhiYSwgdnBvcnRzKTsKKwl9CisKKwkvKiBJZiBmYWJyaWMgcmVxdWlyZSBGTE9HSSwgdGhlbiByZS1pbnN0YW50aWF0ZSBwaHlzaWNhbCBsb2dpbiAqLworCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLT5wcG9ydCwgRmFicmljX0RJRCk7CisJaWYgKCFuZGxwKQorCQlyZXR1cm47CisKKworCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHBoYmEtPnBwb3J0KTsKKwltb2RfdGltZXIoJm5kbHAtPm5scF9kZWxheWZ1bmMsIGppZmZpZXMgKyBIWik7CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwluZGxwLT5ubHBfZmxhZyB8PSBOTFBfREVMQVlfVE1POworCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwluZGxwLT5ubHBfbGFzdF9lbHNjbWQgPSBFTFNfQ01EX0ZMT0dJOworCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlID0gTFBGQ19GTE9HSTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogbHBmY19mYWJyaWNfbG9naW5fcmVxZCAtIENoZWNrIGlmIEZMT0dJIHJlcXVpcmVkLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBGRElTQyBjb21tYW5kIGlvY2IuCisgKiBAcnNwaW9jYjogcG9pbnRlciB0byBGRElTQyByZXNwb25zZSBpb2NiLgorICoKKyAqIFRoaXMgcm91dGluZSBjaGVja3MgaWYgYSBGTE9HSSBpcyByZWd1aXJlZCBmb3IgRkRJU0MKKyAqIHRvIHN1Y2NlZWQuCisgKiovCitzdGF0aWMgaW50CitscGZjX2ZhYnJpY19sb2dpbl9yZXFkKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCisJCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQoreworCisJaWYgKChyc3Bpb2NiLT5pb2NiLnVscFN0YXR1cyAhPSBJT1NUQVRfRkFCUklDX1JKVCkgfHwKKwkJKHJzcGlvY2ItPmlvY2IudW4udWxwV29yZFs0XSAhPSBSSlRfTE9HSU5fUkVRVUlSRUQpKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCisvKioKICAqIGxwZmNfY21wbF9lbHNfZmRpc2MgLSBDb21wbGV0aW9uIGZ1bmN0aW9uIGZvciBmZGlzYyBpb2NiIGNvbW1hbmQKICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCkBAIC02MDY2LDYgKzYxNzUsMTIgQEAKIAkJaXJzcC0+dWxwU3RhdHVzLCBpcnNwLT51bi51bHBXb3JkWzRdLCB2cG9ydC0+ZmNfcHJldkRJRCk7CiAKIAlpZiAoaXJzcC0+dWxwU3RhdHVzKSB7CisKKwkJaWYgKGxwZmNfZmFicmljX2xvZ2luX3JlcWQocGhiYSwgY21kaW9jYiwgcnNwaW9jYikpIHsKKwkJCWxwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5KHBoYmEpOworCQkJZ290byBvdXQ7CisJCX0KKwogCQkvKiBDaGVjayBmb3IgcmV0cnkgKi8KIAkJaWYgKGxwZmNfZWxzX3JldHJ5KHBoYmEsIGNtZGlvY2IsIHJzcGlvY2IpKQogCQkJZ290byBvdXQ7CkBAIC02MDc2LDYgKzYxOTEsNyBAQAogCQlnb3RvIGZkaXNjX2ZhaWxlZDsKIAl9CiAJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfVlBPUlRfQ1ZMX1JDVkQ7CiAJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfRkFCUklDOwogCWlmICh2cG9ydC0+cGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkKIAkJdnBvcnQtPmZjX2ZsYWcgfD0gIEZDX1BVQkxJQ19MT09QOwpAQCAtNjEwMywxMCArNjIxOSwxMyBAQAogCQlscGZjX21ieF91bnJlZ192cGkodnBvcnQpOwogCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOworCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSTsKIAkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCX0KIAotCWlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX1ZQT1JUX05FRURTX1JFR19WUEkpCisJaWYgKHZwb3J0LT5mY19mbGFnICYgRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEkpCisJCWxwZmNfaXNzdWVfaW5pdF92cGkodnBvcnQpOworCWVsc2UgaWYgKHZwb3J0LT5mY19mbGFnICYgRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSSkKIAkJbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQocGhiYSwgdnBvcnQsIG5kbHApOwogCWVsc2UKIAkJbHBmY19kb19zY3JfbnNfcGxvZ2kocGhiYSwgdnBvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwppbmRleCAyNDQ1ZTM5Li4yMzU5ZDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwpAQCAtNTI1LDYgKzUyNSw4IEBACiAJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQkJbHBmY19zbGlfaGJxYnVmX2FkZF9oYnFzKHBoYmEsIExQRkNfRUxTX0hCUSk7CiAJCX0KKwkJaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfRVZUKQorCQkJbHBmY19zbGk0X2ZjZl9yZWRpc2NfZXZlbnRfcHJvYyhwaGJhKTsKIAl9CiAKIAl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOwpAQCAtNzA2LDYgKzcwOCw4IEBACiB2b2lkCiBscGZjX3BvcnRfbGlua19mYWlsdXJlKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKKwlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydCwgRkNfVlBPUlRfTElOS0RPV04pOworCiAJLyogQ2xlYW51cCBhbnkgb3V0c3RhbmRpbmcgcmVjZWl2ZWQgYnVmZmVycyAqLwogCWxwZmNfY2xlYW51cF9yY3ZfYnVmZmVycyh2cG9ydCk7CiAKQEAgLTc1MiwxMiArNzU2LDE0IEBACiAJbHBmY19zY3NpX2Rldl9ibG9jayhwaGJhKTsKIAogCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+KEZDRl9BVkFJTEFCTEUgfCBGQ0ZfRElTQ09WRVJFRCk7CisJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH4oRkNGX0FWQUlMQUJMRSB8IEZDRl9TQ0FOX0RPTkUpOworCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJaWYgKHBoYmEtPmxpbmtfc3RhdGUgPiBMUEZDX0xJTktfRE9XTikgewogCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19MSU5LX0RPV047CisJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCXBoYmEtPnBwb3J0LT5mY19mbGFnICY9IH5GQ19MQklUOworCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJfQotCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKIAlpZiAodnBvcnRzICE9IE5VTEwpCiAJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3Zwb3J0cyAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7CkBAIC0xMDIzLDcgKzEwMjksNyBAQAogCQlyZXR1cm47CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7Ci0JcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IChGQ0ZfRElTQ09WRVJFRCB8IEZDRl9JTl9VU0UpOworCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSAoRkNGX1NDQU5fRE9ORSB8IEZDRl9JTl9VU0UpOwogCXBoYmEtPmhiYV9mbGFnICY9IH5GQ0ZfRElTQ19JTlBST0dSRVNTOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAlpZiAodnBvcnQtPnBvcnRfc3RhdGUgIT0gTFBGQ19GTE9HSSkKQEAgLTEwNDUsMjUgKzEwNTEsMjMgQEAKIHN0YXRpYyB1aW50MzJfdAogbHBmY19mYWJfbmFtZV9tYXRjaCh1aW50OF90ICpmYWJfbmFtZSwgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkKQogewotCWlmICgoZmFiX25hbWVbMF0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8wLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChmYWJfbmFtZVsxXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzEsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKGZhYl9uYW1lWzJdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMiwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoZmFiX25hbWVbM10gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8zLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChmYWJfbmFtZVs0XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzQsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKGZhYl9uYW1lWzVdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfNSwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoZmFiX25hbWVbNl0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV82LCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChmYWJfbmFtZVs3XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzcsIG5ld19mY2ZfcmVjb3JkKSkpCi0JCXJldHVybiAxOwotCWVsc2UKKwlpZiAoZmFiX25hbWVbMF0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8wLCBuZXdfZmNmX3JlY29yZCkpCiAJCXJldHVybiAwOworCWlmIChmYWJfbmFtZVsxXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzEsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZhYl9uYW1lWzJdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMiwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoZmFiX25hbWVbM10gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8zLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChmYWJfbmFtZVs0XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzQsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZhYl9uYW1lWzVdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfNSwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoZmFiX25hbWVbNl0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV82LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChmYWJfbmFtZVs3XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzcsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtMTA3OCwzMCArMTA4MiwyOCBAQAogc3RhdGljIHVpbnQzMl90CiBscGZjX3N3X25hbWVfbWF0Y2godWludDhfdCAqc3dfbmFtZSwgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkKQogewotCWlmICgoc3dfbmFtZVswXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzAsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHN3X25hbWVbMV0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8xLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChzd19uYW1lWzJdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMiwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoc3dfbmFtZVszXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzMsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHN3X25hbWVbNF0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV80LCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChzd19uYW1lWzVdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNSwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoc3dfbmFtZVs2XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzYsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHN3X25hbWVbN10gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV83LCBuZXdfZmNmX3JlY29yZCkpKQotCQlyZXR1cm4gMTsKLQllbHNlCisJaWYgKHN3X25hbWVbMF0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8wLCBuZXdfZmNmX3JlY29yZCkpCiAJCXJldHVybiAwOworCWlmIChzd19uYW1lWzFdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMSwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoc3dfbmFtZVsyXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzIsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN3X25hbWVbM10gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8zLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChzd19uYW1lWzRdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNCwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoc3dfbmFtZVs1XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzUsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN3X25hbWVbNl0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV82LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChzd19uYW1lWzddICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNywgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogLyoqCiAgKiBscGZjX21hY19hZGRyX21hdGNoIC0gQ2hlY2sgaWYgdGhlIGZjZiBtYWMgYWRkcmVzcyBtYXRjaC4KLSAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQG1hY19hZGRyOiBwb2ludGVyIHRvIG1hYyBhZGRyZXNzLgogICogQG5ld19mY2ZfcmVjb3JkOiBwb2ludGVyIHRvIGZjZiByZWNvcmQuCiAgKgogICogVGhpcyByb3V0aW5lIGNvbXBhcmUgdGhlIGZjZiByZWNvcmQncyBtYWMgYWRkcmVzcyB3aXRoIEhCQSdzCkBAIC0xMTA5LDg1ICsxMTExLDExNSBAQAogICogcmV0dXJucyAxIGVsc2UgcmV0dXJuIDAuCiAgKiovCiBzdGF0aWMgdWludDMyX3QKLWxwZmNfbWFjX2FkZHJfbWF0Y2goc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgZmNmX3JlY29yZCAqbmV3X2ZjZl9yZWNvcmQpCitscGZjX21hY19hZGRyX21hdGNoKHVpbnQ4X3QgKm1hY19hZGRyLCBzdHJ1Y3QgZmNmX3JlY29yZCAqbmV3X2ZjZl9yZWNvcmQpCiB7Ci0JaWYgKChwaGJhLT5mY2YubWFjX2FkZHJbMF0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMCwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAocGhiYS0+ZmNmLm1hY19hZGRyWzFdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzEsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHBoYmEtPmZjZi5tYWNfYWRkclsyXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18yLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChwaGJhLT5mY2YubWFjX2FkZHJbM10gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMywgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAocGhiYS0+ZmNmLm1hY19hZGRyWzRdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzQsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHBoYmEtPmZjZi5tYWNfYWRkcls1XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY181LCBuZXdfZmNmX3JlY29yZCkpKQotCQlyZXR1cm4gMTsKLQllbHNlCisJaWYgKG1hY19hZGRyWzBdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzAsIG5ld19mY2ZfcmVjb3JkKSkKIAkJcmV0dXJuIDA7CisJaWYgKG1hY19hZGRyWzFdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzEsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKG1hY19hZGRyWzJdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzIsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKG1hY19hZGRyWzNdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzMsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKG1hY19hZGRyWzRdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzQsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKG1hY19hZGRyWzVdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzUsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBib29sCitscGZjX3ZsYW5faWRfbWF0Y2godWludDE2X3QgY3Vycl92bGFuX2lkLCB1aW50MTZfdCBuZXdfdmxhbl9pZCkKK3sKKwlyZXR1cm4gKGN1cnJfdmxhbl9pZCA9PSBuZXdfdmxhbl9pZCk7CiB9CiAKIC8qKgogICogbHBmY19jb3B5X2ZjZl9yZWNvcmQgLSBDb3B5IGZjZiBpbmZvcm1hdGlvbiB0byBscGZjX2hiYS4KLSAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGZjZjogcG9pbnRlciB0byBkcml2ZXIgZmNmIHJlY29yZC4KICAqIEBuZXdfZmNmX3JlY29yZDogcG9pbnRlciB0byBmY2YgcmVjb3JkLgogICoKICAqIFRoaXMgcm91dGluZSBjb3BpZXMgdGhlIEZDRiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBGQ0YKICAqIHJlY29yZCB0byBscGZjX2hiYSBkYXRhIHN0cnVjdHVyZS4KICAqKi8KIHN0YXRpYyB2b2lkCi1scGZjX2NvcHlfZmNmX3JlY29yZChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBmY2ZfcmVjb3JkICpuZXdfZmNmX3JlY29yZCkKK2xwZmNfY29weV9mY2ZfcmVjb3JkKHN0cnVjdCBscGZjX2ZjZl9yZWMgKmZjZl9yZWMsCisJCSAgICAgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkKQogewotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVswXSA9CisJLyogRmFicmljIG5hbWUgKi8KKwlmY2ZfcmVjLT5mYWJyaWNfbmFtZVswXSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVsxXSA9CisJZmNmX3JlYy0+ZmFicmljX25hbWVbMV0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzEsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuZmFicmljX25hbWVbMl0gPQorCWZjZl9yZWMtPmZhYnJpY19uYW1lWzJdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8yLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLmZhYnJpY19uYW1lWzNdID0KKwlmY2ZfcmVjLT5mYWJyaWNfbmFtZVszXSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMywgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVs0XSA9CisJZmNmX3JlYy0+ZmFicmljX25hbWVbNF0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzQsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuZmFicmljX25hbWVbNV0gPQorCWZjZl9yZWMtPmZhYnJpY19uYW1lWzVdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV81LCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLmZhYnJpY19uYW1lWzZdID0KKwlmY2ZfcmVjLT5mYWJyaWNfbmFtZVs2XSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfNiwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVs3XSA9CisJZmNmX3JlYy0+ZmFicmljX25hbWVbN10gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzcsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YubWFjX2FkZHJbMF0gPQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18wLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLm1hY19hZGRyWzFdID0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMSwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5tYWNfYWRkclsyXSA9Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzIsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YubWFjX2FkZHJbM10gPQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18zLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLm1hY19hZGRyWzRdID0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfNCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5tYWNfYWRkcls1XSA9Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzUsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuZmNmX2luZHggPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZjZl9pbmRleCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5wcmlvcml0eSA9IG5ld19mY2ZfcmVjb3JkLT5maXBfcHJpb3JpdHk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzBdID0KKwkvKiBNYWMgYWRkcmVzcyAqLworCWZjZl9yZWMtPm1hY19hZGRyWzBdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMCwgbmV3X2ZjZl9yZWNvcmQpOworCWZjZl9yZWMtPm1hY19hZGRyWzFdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMSwgbmV3X2ZjZl9yZWNvcmQpOworCWZjZl9yZWMtPm1hY19hZGRyWzJdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMiwgbmV3X2ZjZl9yZWNvcmQpOworCWZjZl9yZWMtPm1hY19hZGRyWzNdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMywgbmV3X2ZjZl9yZWNvcmQpOworCWZjZl9yZWMtPm1hY19hZGRyWzRdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfNCwgbmV3X2ZjZl9yZWNvcmQpOworCWZjZl9yZWMtPm1hY19hZGRyWzVdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfNSwgbmV3X2ZjZl9yZWNvcmQpOworCS8qIEZDRiByZWNvcmQgaW5kZXggKi8KKwlmY2ZfcmVjLT5mY2ZfaW5keCA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmNmX2luZGV4LCBuZXdfZmNmX3JlY29yZCk7CisJLyogRkNGIHJlY29yZCBwcmlvcml0eSAqLworCWZjZl9yZWMtPnByaW9yaXR5ID0gbmV3X2ZjZl9yZWNvcmQtPmZpcF9wcmlvcml0eTsKKwkvKiBTd2l0Y2ggbmFtZSAqLworCWZjZl9yZWMtPnN3aXRjaF9uYW1lWzBdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8wLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzFdID0KKwlmY2ZfcmVjLT5zd2l0Y2hfbmFtZVsxXSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMSwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVsyXSA9CisJZmNmX3JlYy0+c3dpdGNoX25hbWVbMl0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzIsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2Yuc3dpdGNoX25hbWVbM10gPQorCWZjZl9yZWMtPnN3aXRjaF9uYW1lWzNdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8zLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzRdID0KKwlmY2ZfcmVjLT5zd2l0Y2hfbmFtZVs0XSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVs1XSA9CisJZmNmX3JlYy0+c3dpdGNoX25hbWVbNV0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzUsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2Yuc3dpdGNoX25hbWVbNl0gPQorCWZjZl9yZWMtPnN3aXRjaF9uYW1lWzZdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV82LCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzddID0KKwlmY2ZfcmVjLT5zd2l0Y2hfbmFtZVs3XSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNywgbmV3X2ZjZl9yZWNvcmQpOwogfQogCiAvKioKKyAqIGxwZmNfdXBkYXRlX2ZjZl9yZWNvcmQgLSBVcGRhdGUgZHJpdmVyIGZjZiByZWNvcmQKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGZjZl9yZWM6IHBvaW50ZXIgdG8gZHJpdmVyIGZjZiByZWNvcmQuCisgKiBAbmV3X2ZjZl9yZWNvcmQ6IHBvaW50ZXIgdG8gaGJhIGZjZiByZWNvcmQuCisgKiBAYWRkcl9tb2RlOiBhZGRyZXNzIG1vZGUgdG8gYmUgc2V0IHRvIHRoZSBkcml2ZXIgZmNmIHJlY29yZC4KKyAqIEB2bGFuX2lkOiB2bGFuIHRhZyB0byBiZSBzZXQgdG8gdGhlIGRyaXZlciBmY2YgcmVjb3JkLgorICogQGZsYWc6IGZsYWcgYml0cyB0byBiZSBzZXQgdG8gdGhlIGRyaXZlciBmY2YgcmVjb3JkLgorICoKKyAqIFRoaXMgcm91dGluZSB1cGRhdGVzIHRoZSBkcml2ZXIgRkNGIHJlY29yZCBmcm9tIHRoZSBuZXcgSEJBIEZDRiByZWNvcmQKKyAqIHRvZ2V0aGVyIHdpdGggdGhlIGFkZHJlc3MgbW9kZSwgdmxhbl9pZCwgYW5kIG90aGVyIGluZm9ybWF0aW9ucy4gVGhpcworICogcm91dGluZSBpcyBjYWxsZWQgd2l0aCB0aGUgaG9zdCBsb2NrIGhlbGQuCisgKiovCitzdGF0aWMgdm9pZAorX19scGZjX3VwZGF0ZV9mY2ZfcmVjb3JkKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfZmNmX3JlYyAqZmNmX3JlYywKKwkJICAgICAgIHN0cnVjdCBmY2ZfcmVjb3JkICpuZXdfZmNmX3JlY29yZCwgdWludDMyX3QgYWRkcl9tb2RlLAorCQkgICAgICAgdWludDE2X3Qgdmxhbl9pZCwgdWludDMyX3QgZmxhZykKK3sKKwkvKiBDb3B5IHRoZSBmaWVsZHMgZnJvbSB0aGUgSEJBJ3MgRkNGIHJlY29yZCAqLworCWxwZmNfY29weV9mY2ZfcmVjb3JkKGZjZl9yZWMsIG5ld19mY2ZfcmVjb3JkKTsKKwkvKiBVcGRhdGUgb3RoZXIgZmllbGRzIG9mIGRyaXZlciBGQ0YgcmVjb3JkICovCisJZmNmX3JlYy0+YWRkcl9tb2RlID0gYWRkcl9tb2RlOworCWZjZl9yZWMtPnZsYW5faWQgPSB2bGFuX2lkOworCWZjZl9yZWMtPmZsYWcgfD0gKGZsYWcgfCBSRUNPUkRfVkFMSUQpOworfQorCisvKioKICAqIGxwZmNfcmVnaXN0ZXJfZmNmIC0gUmVnaXN0ZXIgdGhlIEZDRiB3aXRoIGhiYS4KICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICoKQEAgLTEyMTIsNyArMTI0NCw3IEBACiAKIAkvKiBUaGUgRkNGIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCwgc3RhcnQgZGlzY292ZXJ5ICovCiAJaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRUdJU1RFUkVEKSB7Ci0JCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSAoRkNGX0RJU0NPVkVSRUQgfCBGQ0ZfSU5fVVNFKTsKKwkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IChGQ0ZfU0NBTl9ET05FIHwgRkNGX0lOX1VTRSk7CiAJCXBoYmEtPmhiYV9mbGFnICY9IH5GQ0ZfRElTQ19JTlBST0dSRVNTOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJCWlmIChwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSAhPSBMUEZDX0ZMT0dJKQpAQCAtMTI1MCw2ICsxMjgyLDcgQEAKICAqIEBuZXdfZmNmX3JlY29yZDogcG9pbnRlciB0byBmY2YgcmVjb3JkLgogICogQGJvb3RfZmxhZzogSW5kaWNhdGVzIGlmIHRoaXMgcmVjb3JkIHVzZWQgYnkgYm9vdCBiaW9zLgogICogQGFkZHJfbW9kZTogVGhlIGFkZHJlc3MgbW9kZSB0byBiZSB1c2VkIGJ5IHRoaXMgRkNGCisgKiBAdmxhbl9pZDogVGhlIHZsYW4gaWQgdG8gYmUgdXNlZCBhcyB2bGFuIHRhZ2dpbmcgYnkgdGhpcyBGQ0YuCiAgKgogICogVGhpcyByb3V0aW5lIGNvbXBhcmUgdGhlIGZjZiByZWNvcmQgd2l0aCBjb25uZWN0IGxpc3Qgb2J0YWluZWQgZnJvbSB0aGUKICAqIGNvbmZpZyByZWdpb24gdG8gZGVjaWRlIGlmIHRoaXMgRkNGIGNhbiBiZSB1c2VkIGZvciBTQU4gZGlzY292ZXJ5LiBJdCByZXR1cm5zCkBAIC0xMzIzLDcgKzEzNTYsOCBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5fZW50cnksICZwaGJhLT5mY2ZfY29ubl9yZWNfbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubl9lbnRyeSwKKwkJCSAgICAmcGhiYS0+ZmNmX2Nvbm5fcmVjX2xpc3QsIGxpc3QpIHsKIAkJaWYgKCEoY29ubl9lbnRyeS0+Y29ubl9yZWMuZmxhZ3MgJiBGQ0ZDTkNUX1ZBTElEKSkKIAkJCWNvbnRpbnVlOwogCkBAIC0xNDcwLDYgKzE1MDQsNyBAQAogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCXBoYmEtPmhiYV9mbGFnICY9IH5GQ0ZfRElTQ19JTlBST0dSRVNTOworCQlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9SRURJU0NfRk9WOwogCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCX0KIApAQCAtMTUyNCwxMSArMTU1OSwxMiBAQAogCXVpbnQzMl90IHNoZHJfc3RhdHVzLCBzaGRyX2FkZF9zdGF0dXM7CiAJdW5pb24gbHBmY19zbGk0X2NmZ19zaGRyICpzaGRyOwogCXN0cnVjdCBmY2ZfcmVjb3JkICpuZXdfZmNmX3JlY29yZDsKLQlpbnQgcmM7CiAJdWludDMyX3QgYm9vdF9mbGFnLCBhZGRyX21vZGU7CiAJdWludDMyX3QgbmV4dF9mY2ZfaW5kZXg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbHBmY19mY2ZfcmVjICpmY2ZfcmVjID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGlmbGFnczsKIAl1aW50MTZfdCB2bGFuX2lkOworCWludCByYzsKIAogCS8qIElmIHRoZXJlIGlzIHBlbmRpbmcgRkNvRSBldmVudCByZXN0YXJ0IEZDRiB0YWJsZSBzY2FuICovCiAJaWYgKGxwZmNfY2hlY2tfcGVuZGluZ19mY29lX2V2ZW50KHBoYmEsIDApKSB7CkBAIC0xNTgzLDkgKzE2MTksOCBAQAogCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBmY2ZfcmVjb3JkKSk7CiAJYnl0ZXAgPSB2aXJ0X2FkZHIgKyBzaXplb2YodW5pb24gbHBmY19zbGk0X2NmZ19zaGRyKTsKIAotCXJjID0gbHBmY19tYXRjaF9mY2ZfY29ubl9saXN0KHBoYmEsIG5ld19mY2ZfcmVjb3JkLAotCQkJCSAgICAgICZib290X2ZsYWcsICZhZGRyX21vZGUsCi0JCQkJCSZ2bGFuX2lkKTsKKwlyYyA9IGxwZmNfbWF0Y2hfZmNmX2Nvbm5fbGlzdChwaGJhLCBuZXdfZmNmX3JlY29yZCwgJmJvb3RfZmxhZywKKwkJCQkgICAgICAmYWRkcl9tb2RlLCAmdmxhbl9pZCk7CiAJLyoKIAkgKiBJZiB0aGUgZmNmIHJlY29yZCBkb2VzIG5vdCBtYXRjaCB3aXRoIGNvbm5lY3QgbGlzdCBlbnRyaWVzCiAJICogcmVhZCB0aGUgbmV4dCBlbnRyeS4KQEAgLTE1OTQsOTAgKzE2MjksMTU5IEBACiAJCWdvdG8gcmVhZF9uZXh0X2ZjZjsKIAkvKgogCSAqIElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBGQ0YgZGlzY292ZXJ5IG9mIHRoZSBIQkEsIHVzZSBsYXN0Ci0JICogRkNGIHJlY29yZCBmb3IgdGhlIGRpc2NvdmVyeS4KKwkgKiBGQ0YgcmVjb3JkIGZvciB0aGUgZGlzY292ZXJ5LiBUaGUgY29uZGl0aW9uIHRoYXQgYSByZXNjYW4KKwkgKiBtYXRjaGVzIHRoZSBpbi11c2UgRkNGIHJlY29yZDogZmFicmljIG5hbWUsIHN3aXRjaCBuYW1lLCBtYWMKKwkgKiBhZGRyZXNzLCBhbmQgdmxhbl9pZC4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOwogCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfSU5fVVNFKSB7Ci0JCWlmIChscGZjX2ZhYl9uYW1lX21hdGNoKHBoYmEtPmZjZi5mYWJyaWNfbmFtZSwKKwkJaWYgKGxwZmNfZmFiX25hbWVfbWF0Y2gocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZhYnJpY19uYW1lLAogCQkJCQluZXdfZmNmX3JlY29yZCkgJiYKLQkJICAgIGxwZmNfc3dfbmFtZV9tYXRjaChwaGJhLT5mY2Yuc3dpdGNoX25hbWUsCisJCSAgICBscGZjX3N3X25hbWVfbWF0Y2gocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLnN3aXRjaF9uYW1lLAogCQkJCQluZXdfZmNmX3JlY29yZCkgJiYKLQkJICAgIGxwZmNfbWFjX2FkZHJfbWF0Y2gocGhiYSwgbmV3X2ZjZl9yZWNvcmQpKSB7CisJCSAgICBscGZjX21hY19hZGRyX21hdGNoKHBoYmEtPmZjZi5jdXJyZW50X3JlYy5tYWNfYWRkciwKKwkJCQkJbmV3X2ZjZl9yZWNvcmQpICYmCisJCSAgICBscGZjX3ZsYW5faWRfbWF0Y2gocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLnZsYW5faWQsCisJCQkJCXZsYW5faWQpKSB7CiAJCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX0FWQUlMQUJMRTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwkJCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX1BFTkQpCisJCQkJLyogU3RvcCBGQ0YgcmVkaXNjIHdhaXQgdGltZXIgaWYgcGVuZGluZyAqLworCQkJCV9fbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHBoYmEpOworCQkJZWxzZSBpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19GT1YpCisJCQkJLyogSWYgaW4gZmFzdCBmYWlsb3ZlciwgbWFyayBpdCdzIGNvbXBsZXRlZCAqLworCQkJCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX1JFRElTQ19GT1Y7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwotCQlnb3RvIHJlYWRfbmV4dF9mY2Y7CisJCS8qCisJCSAqIFJlYWQgbmV4dCBGQ0YgcmVjb3JkIGZyb20gSEJBIHNlYXJjaGluZyBmb3IgdGhlIG1hdGNoaW5nCisJCSAqIHdpdGggaW4tdXNlIHJlY29yZCBvbmx5IGlmIG5vdCBkdXJpbmcgdGhlIGZhc3QgZmFpbG92ZXIKKwkJICogcGVyaW9kLiBJbiBjYXNlIG9mIGZhc3QgZmFpbG92ZXIgcGVyaW9kLCBpdCBzaGFsbCB0cnkgdG8KKwkJICogZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEZDRiByZWNvcmQganVzdCByZWFkIHNob3VsZCBiZSB0aGUKKwkJICogbmV4dCBjYW5kaWRhdGUuCisJCSAqLworCQlpZiAoIShwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX0ZPVikpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJCQlnb3RvIHJlYWRfbmV4dF9mY2Y7CisJCX0KIAl9CisJLyoKKwkgKiBVcGRhdGUgb24gZmFpbG92ZXIgRkNGIHJlY29yZCBvbmx5IGlmIGl0J3MgaW4gRkNGIGZhc3QtZmFpbG92ZXIKKwkgKiBwZXJpb2Q7IG90aGVyd2lzZSwgdXBkYXRlIG9uIGN1cnJlbnQgRkNGIHJlY29yZC4KKwkgKi8KKwlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19GT1YpIHsKKwkJLyogRmFzdCBGQ0YgZmFpbG92ZXIgb25seSB0byB0aGUgc2FtZSBmYWJyaWMgbmFtZSAqLworCQlpZiAobHBmY19mYWJfbmFtZV9tYXRjaChwaGJhLT5mY2YuY3VycmVudF9yZWMuZmFicmljX25hbWUsCisJCQkJCW5ld19mY2ZfcmVjb3JkKSkKKwkJCWZjZl9yZWMgPSAmcGhiYS0+ZmNmLmZhaWxvdmVyX3JlYzsKKwkJZWxzZQorCQkJZ290byByZWFkX25leHRfZmNmOworCX0gZWxzZQorCQlmY2ZfcmVjID0gJnBoYmEtPmZjZi5jdXJyZW50X3JlYzsKKwogCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfQVZBSUxBQkxFKSB7CiAJCS8qCi0JCSAqIElmIHRoZSBjdXJyZW50IEZDRiByZWNvcmQgZG9lcyBub3QgaGF2ZSBib290IGZsYWcKLQkJICogc2V0IGFuZCBuZXcgZmNmIHJlY29yZCBoYXMgYm9vdCBmbGFnIHNldCwgdXNlIHRoZQotCQkgKiBuZXcgZmNmIHJlY29yZC4KKwkJICogSWYgdGhlIGRyaXZlciBGQ0YgcmVjb3JkIGRvZXMgbm90IGhhdmUgYm9vdCBmbGFnCisJCSAqIHNldCBhbmQgbmV3IGhiYSBmY2YgcmVjb3JkIGhhcyBib290IGZsYWcgc2V0LCB1c2UKKwkJICogdGhlIG5ldyBoYmEgZmNmIHJlY29yZC4KIAkJICovCi0JCWlmIChib290X2ZsYWcgJiYgIShwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfQk9PVF9FTkFCTEUpKSB7Ci0JCQkvKiBVc2UgdGhpcyBGQ0YgcmVjb3JkICovCi0JCQlscGZjX2NvcHlfZmNmX3JlY29yZChwaGJhLCBuZXdfZmNmX3JlY29yZCk7Ci0JCQlwaGJhLT5mY2YuYWRkcl9tb2RlID0gYWRkcl9tb2RlOwotCQkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9CT09UX0VOQUJMRTsKLQkJCWlmICh2bGFuX2lkICE9IDB4RkZGRikgewotCQkJCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfVkFMSURfVkxBTjsKLQkJCQlwaGJhLT5mY2Yudmxhbl9pZCA9IHZsYW5faWQ7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJCWlmIChib290X2ZsYWcgJiYgIShmY2ZfcmVjLT5mbGFnICYgQk9PVF9FTkFCTEUpKSB7CisJCQkvKiBDaG9vc2UgdGhpcyBGQ0YgcmVjb3JkICovCisJCQlfX2xwZmNfdXBkYXRlX2ZjZl9yZWNvcmQocGhiYSwgZmNmX3JlYywgbmV3X2ZjZl9yZWNvcmQsCisJCQkJCWFkZHJfbW9kZSwgdmxhbl9pZCwgQk9PVF9FTkFCTEUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKIAkJCWdvdG8gcmVhZF9uZXh0X2ZjZjsKIAkJfQogCQkvKgotCQkgKiBJZiB0aGUgY3VycmVudCBGQ0YgcmVjb3JkIGhhcyBib290IGZsYWcgc2V0IGFuZCB0aGUKLQkJICogbmV3IEZDRiByZWNvcmQgZG9lcyBub3QgaGF2ZSBib290IGZsYWcsIHJlYWQgdGhlIG5leHQKLQkJICogRkNGIHJlY29yZC4KKwkJICogSWYgdGhlIGRyaXZlciBGQ0YgcmVjb3JkIGhhcyBib290IGZsYWcgc2V0IGFuZCB0aGUKKwkJICogbmV3IGhiYSBGQ0YgcmVjb3JkIGRvZXMgbm90IGhhdmUgYm9vdCBmbGFnLCByZWFkCisJCSAqIHRoZSBuZXh0IEZDRiByZWNvcmQuCiAJCSAqLwotCQlpZiAoIWJvb3RfZmxhZyAmJiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0JPT1RfRU5BQkxFKSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCQlpZiAoIWJvb3RfZmxhZyAmJiAoZmNmX3JlYy0+ZmxhZyAmIEJPT1RfRU5BQkxFKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKIAkJCWdvdG8gcmVhZF9uZXh0X2ZjZjsKIAkJfQogCQkvKgotCQkgKiBJZiB0aGVyZSBpcyBhIHJlY29yZCB3aXRoIGxvd2VyIHByaW9yaXR5IHZhbHVlIGZvcgotCQkgKiB0aGUgY3VycmVudCBGQ0YsIHVzZSB0aGF0IHJlY29yZC4KKwkJICogSWYgdGhlIG5ldyBoYmEgRkNGIHJlY29yZCBoYXMgbG93ZXIgcHJpb3JpdHkgdmFsdWUKKwkJICogdGhhbiB0aGUgZHJpdmVyIEZDRiByZWNvcmQsIHVzZSB0aGUgbmV3IHJlY29yZC4KIAkJICovCi0JCWlmIChscGZjX2ZhYl9uYW1lX21hdGNoKHBoYmEtPmZjZi5mYWJyaWNfbmFtZSwKLQkJCQkJbmV3X2ZjZl9yZWNvcmQpICYmCi0JCSAgICAobmV3X2ZjZl9yZWNvcmQtPmZpcF9wcmlvcml0eSA8IHBoYmEtPmZjZi5wcmlvcml0eSkpIHsKLQkJCS8qIFVzZSB0aGlzIEZDRiByZWNvcmQgKi8KLQkJCWxwZmNfY29weV9mY2ZfcmVjb3JkKHBoYmEsIG5ld19mY2ZfcmVjb3JkKTsKLQkJCXBoYmEtPmZjZi5hZGRyX21vZGUgPSBhZGRyX21vZGU7Ci0JCQlpZiAodmxhbl9pZCAhPSAweEZGRkYpIHsKLQkJCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX1ZBTElEX1ZMQU47Ci0JCQkJcGhiYS0+ZmNmLnZsYW5faWQgPSB2bGFuX2lkOwotCQkJfQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwotCQkJZ290byByZWFkX25leHRfZmNmOworCQlpZiAobHBmY19mYWJfbmFtZV9tYXRjaChmY2ZfcmVjLT5mYWJyaWNfbmFtZSwgbmV3X2ZjZl9yZWNvcmQpICYmCisJCSAgICAobmV3X2ZjZl9yZWNvcmQtPmZpcF9wcmlvcml0eSA8IGZjZl9yZWMtPnByaW9yaXR5KSkgeworCQkJLyogQ2hvb3NlIHRoaXMgRkNGIHJlY29yZCAqLworCQkJX19scGZjX3VwZGF0ZV9mY2ZfcmVjb3JkKHBoYmEsIGZjZl9yZWMsIG5ld19mY2ZfcmVjb3JkLAorCQkJCQlhZGRyX21vZGUsIHZsYW5faWQsIDApOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKIAkJZ290byByZWFkX25leHRfZmNmOwogCX0KIAkvKgotCSAqIFRoaXMgaXMgdGhlIGZpcnN0IGF2YWlsYWJsZSBGQ0YgcmVjb3JkLCB1c2UgdGhpcwotCSAqIHJlY29yZC4KKwkgKiBUaGlzIGlzIHRoZSBmaXJzdCBzdWl0YWJsZSBGQ0YgcmVjb3JkLCBjaG9vc2UgdGhpcyByZWNvcmQgZm9yCisJICogaW5pdGlhbCBiZXN0LWZpdCBGQ0YuCiAJICovCi0JbHBmY19jb3B5X2ZjZl9yZWNvcmQocGhiYSwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5hZGRyX21vZGUgPSBhZGRyX21vZGU7Ci0JaWYgKGJvb3RfZmxhZykKLQkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9CT09UX0VOQUJMRTsKLQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX0FWQUlMQUJMRTsKLQlpZiAodmxhbl9pZCAhPSAweEZGRkYpIHsKLQkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9WQUxJRF9WTEFOOwotCQlwaGJhLT5mY2Yudmxhbl9pZCA9IHZsYW5faWQ7CisJaWYgKGZjZl9yZWMpIHsKKwkJX19scGZjX3VwZGF0ZV9mY2ZfcmVjb3JkKHBoYmEsIGZjZl9yZWMsIG5ld19mY2ZfcmVjb3JkLAorCQkJCQkgYWRkcl9tb2RlLCB2bGFuX2lkLCAoYm9vdF9mbGFnID8KKwkJCQkJIEJPT1RfRU5BQkxFIDogMCkpOworCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX0FWQUlMQUJMRTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CiAJZ290byByZWFkX25leHRfZmNmOwogCiByZWFkX25leHRfZmNmOgogCWxwZmNfc2xpNF9tYm94X2NtZF9mcmVlKHBoYmEsIG1ib3hxKTsKLQlpZiAobmV4dF9mY2ZfaW5kZXggPT0gTFBGQ19GQ09FX0ZDRl9ORVhUX05PTkUgfHwgbmV4dF9mY2ZfaW5kZXggPT0gMCkKLQkJbHBmY19yZWdpc3Rlcl9mY2YocGhiYSk7Ci0JZWxzZQorCWlmIChuZXh0X2ZjZl9pbmRleCA9PSBMUEZDX0ZDT0VfRkNGX05FWFRfTk9ORSB8fCBuZXh0X2ZjZl9pbmRleCA9PSAwKSB7CisJCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX0ZPVikgeworCQkJLyoKKwkJCSAqIENhc2Ugb2YgRkNGIGZhc3QgZmFpbG92ZXIgc2NhbgorCQkJICovCisKKwkJCS8qCisJCQkgKiBJdCBoYXMgbm90IGZvdW5kIGFueSBzdWl0YWJsZSBGQ0YgcmVjb3JkLCBjYW5jZWwKKwkJCSAqIEZDRiBzY2FuIGlucHJvZ3Jlc3MsIGFuZCBkbyBub3RoaW5nCisJCQkgKi8KKwkJCWlmICghKHBoYmEtPmZjZi5mYWlsb3Zlcl9yZWMuZmxhZyAmIFJFQ09SRF9WQUxJRCkpIHsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKKwkJCQlwaGJhLT5oYmFfZmxhZyAmPSB+RkNGX0RJU0NfSU5QUk9HUkVTUzsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCS8qCisJCQkgKiBJdCBoYXMgZm91bmQgYSBzdWl0YWJsZSBGQ0YgcmVjb3JkIHRoYXQgaXMgbm90CisJCQkgKiB0aGUgc2FtZSBhcyBpbi11c2UgRkNGIHJlY29yZCwgdW5yZWdpc3RlciB0aGUKKwkJCSAqIGluLXVzZSBGQ0YgcmVjb3JkLCByZXBsYWNlIHRoZSBpbi11c2UgRkNGIHJlY29yZAorCQkJICogd2l0aCB0aGUgbmV3IEZDRiByZWNvcmQsIG1hcmsgRkNGIGZhc3QgZmFpbG92ZXIKKwkJCSAqIGNvbXBsZXRlZCwgYW5kIHRoZW4gc3RhcnQgcmVnaXN0ZXIgdGhlIG5ldyBGQ0YKKwkJCSAqIHJlY29yZC4KKwkJCSAqLworCisJCQkvKiB1bnJlZ2lzdGVyIHRoZSBjdXJyZW50IGluLXVzZSBGQ0YgcmVjb3JkICovCisJCQlscGZjX3VucmVnaXN0ZXJfZmNmKHBoYmEpOworCQkJLyogcmVwbGFjZSBpbi11c2UgcmVjb3JkIHdpdGggdGhlIG5ldyByZWNvcmQgKi8KKwkJCW1lbWNweSgmcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLAorCQkJICAgICAgICZwaGJhLT5mY2YuZmFpbG92ZXJfcmVjLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbHBmY19mY2ZfcmVjKSk7CisJCQkvKiBtYXJrIHRoZSBGQ0YgZmFzdCBmYWlsb3ZlciBjb21wbGV0ZWQgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCQkJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH5GQ0ZfUkVESVNDX0ZPVjsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJCQkvKiBSZWdpc3RlciB0byB0aGUgbmV3IEZDRiByZWNvcmQgKi8KKwkJCWxwZmNfcmVnaXN0ZXJfZmNmKHBoYmEpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gcGVyaW9kIHRvIGZhc3QgRkNGIGZhaWxvdmVyLAorCQkJICogZG8gbm90aGluZyB3aGVuIHNlYXJjaCB0byB0aGUgZW5kIG9mIHRoZSBGQ0YgdGFibGUuCisJCQkgKi8KKwkJCWlmICgocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19FVlQpIHx8CisJCQkgICAgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfUEVORCkpCisJCQkJcmV0dXJuOworCQkJLyoKKwkJCSAqIE90aGVyd2lzZSwgaW5pdGlhbCBzY2FuIG9yIHBvc3QgbGlua2Rvd24gcmVzY2FuLAorCQkJICogcmVnaXN0ZXIgd2l0aCB0aGUgYmVzdCBmaXQgRkNGIHJlY29yZCBmb3VuZCBzbworCQkJICogZmFyIHRocm91Z2ggdGhlIHNjYW5uaW5nIHByb2Nlc3MuCisJCQkgKi8KKwkJCWxwZmNfcmVnaXN0ZXJfZmNmKHBoYmEpOworCQl9CisJfSBlbHNlCiAJCWxwZmNfc2xpNF9yZWFkX2ZjZl9yZWNvcmQocGhiYSwgbmV4dF9mY2ZfaW5kZXgpOwogCXJldHVybjsKIApAQCAtMTY5NSwxMCArMTc5OSwxMyBAQAogICoKICAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBjb21wbGV0aW9uIG9mIGluaXQgdnBpIG1haWxib3ggY29tbWFuZC4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGxwZmNfaW5pdF92cGlfY21wbChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqbWJveHEpCiB7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gbWJveHEtPnZwb3J0OworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKKwogCWlmIChtYm94cS0+dS5tYi5tYnhTdGF0dXMpIHsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsCiAJCQkJTE9HX01CT1gsCkBAIC0xNzA4LDkgKzE4MTUsMjMgQEAKIAkJbHBmY192cG9ydF9zZXRfc3RhdGUodnBvcnQsIEZDX1ZQT1JUX0ZBSUxFRCk7CiAJCXJldHVybjsKIAl9Ci0Jc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfVlBPUlRfTkVFRFNfSU5JVF9WUEk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisKKwkvKiBJZiB0aGlzIHBvcnQgaXMgcGh5c2ljYWwgcG9ydCBvciBGRElTQyBpcyBkb25lLCBkbyByZWdfdnBpICovCisJaWYgKChwaGJhLT5wcG9ydCA9PSB2cG9ydCkgfHwgKHZwb3J0LT5wb3J0X3N0YXRlID09IExQRkNfRkRJU0MpKSB7CisJCQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQodnBvcnQsIEZhYnJpY19ESUQpOworCQkJaWYgKCFuZGxwKQorCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLAorCQkJCQlMT0dfRElTQ09WRVJZLAorCQkJCQkiMjczMSBDYW5ub3QgZmluZCBmYWJyaWMgIgorCQkJCQkiY29udHJvbGxlciBub2RlXG4iKTsKKwkJCWVsc2UKKwkJCQlscGZjX3JlZ2lzdGVyX25ld192cG9ydChwaGJhLCB2cG9ydCwgbmRscCk7CisJCQltZW1wb29sX2ZyZWUobWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQkJcmV0dXJuOworCX0KIAogCWlmIChwaGJhLT5saW5rX2ZsYWcgJiBMU19OUElWX0ZBQl9TVVBQT1JURUQpCiAJCWxwZmNfaW5pdGlhbF9mZGlzYyh2cG9ydCk7CkBAIC0xNzE5LDEwICsxODQwLDQyIEBACiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRUxTLAogCQkJCSAiMjYwNiBObyBOUElWIEZhYnJpYyBzdXBwb3J0XG4iKTsKIAl9CisJbWVtcG9vbF9mcmVlKG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAlyZXR1cm47CiB9CiAKIC8qKgorICogbHBmY19pc3N1ZV9pbml0X3ZwaSAtIElzc3VlIGluaXRfdnBpIG1haWxib3ggY29tbWFuZC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBscGZjX3Zwb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXNzdWUgYSBpbml0X3ZwaSBtYWlsYm94IGNvbW1hbmQgdG8gaW5pdGlhbGl6ZQorICogVlBJIGZvciB0aGUgdnBvcnQuCisgKi8KK3ZvaWQKK2xwZmNfaXNzdWVfaW5pdF92cGkoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQoreworCUxQRkNfTUJPWFFfdCAqbWJveHE7CisJaW50IHJjOworCisJbWJveHEgPSBtZW1wb29sX2FsbG9jKHZwb3J0LT5waGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1ib3hxKSB7CisJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLAorCQkJTE9HX01CT1gsICIyNjA3IEZhaWxlZCB0byBhbGxvY2F0ZSAiCisJCQkiaW5pdF92cGkgbWFpbGJveFxuIik7CisJCXJldHVybjsKKwl9CisJbHBmY19pbml0X3ZwaSh2cG9ydC0+cGhiYSwgbWJveHEsIHZwb3J0LT52cGkpOworCW1ib3hxLT52cG9ydCA9IHZwb3J0OworCW1ib3hxLT5tYm94X2NtcGwgPSBscGZjX2luaXRfdnBpX2NtcGw7CisJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHZwb3J0LT5waGJhLCBtYm94cSwgTUJYX05PV0FJVCk7CisJaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpIHsKKwkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsCisJCQlMT0dfTUJPWCwgIjI2MDggRmFpbGVkIHRvIGlzc3VlIGluaXRfdnBpIG1haWxib3hcbiIpOworCQltZW1wb29sX2ZyZWUobWJveHEsIHZwb3J0LT5waGJhLT5tYm94X21lbV9wb29sKTsKKwl9Cit9CisKKy8qKgogICogbHBmY19zdGFydF9mZGlzY3MgLSBzZW5kIGZkaXNjcyBmb3IgZWFjaCB2cG9ydHMgb24gdGhpcyBwb3J0LgogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKgpAQCAtMTczNCw4ICsxODg3LDYgQEAKIHsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKIAlpbnQgaTsKLQlMUEZDX01CT1hRX3QgKm1ib3hxOwotCWludCByYzsKIAogCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CiAJaWYgKHZwb3J0cyAhPSBOVUxMKSB7CkBAIC0xNzU0LDI2ICsxOTA1LDcgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICh2cG9ydHNbaV0tPmZjX2ZsYWcgJiBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSSkgewotCQkJCW1ib3hxID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLAotCQkJCQlHRlBfS0VSTkVMKTsKLQkJCQlpZiAoIW1ib3hxKSB7Ci0JCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnRzW2ldLCBLRVJOX0VSUiwKLQkJCQkJTE9HX01CT1gsICIyNjA3IEZhaWxlZCB0byBhbGxvY2F0ZSAiCi0JCQkJCSJpbml0X3ZwaSBtYWlsYm94XG4iKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWxwZmNfaW5pdF92cGkocGhiYSwgbWJveHEsIHZwb3J0c1tpXS0+dnBpKTsKLQkJCQltYm94cS0+dnBvcnQgPSB2cG9ydHNbaV07Ci0JCQkJbWJveHEtPm1ib3hfY21wbCA9IGxwZmNfaW5pdF92cGlfY21wbDsKLQkJCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveHEsCi0JCQkJCU1CWF9OT1dBSVQpOwotCQkJCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7Ci0JCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnRzW2ldLCBLRVJOX0VSUiwKLQkJCQkJTE9HX01CT1gsICIyNjA4IEZhaWxlZCB0byBpc3N1ZSAiCi0JCQkJCSJpbml0X3ZwaSBtYWlsYm94XG4iKTsKLQkJCQkJbWVtcG9vbF9mcmVlKG1ib3hxLAotCQkJCQkJcGhiYS0+bWJveF9tZW1fcG9vbCk7Ci0JCQkJfQorCQkJCWxwZmNfaXNzdWVfaW5pdF92cGkodnBvcnRzW2ldKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmIChwaGJhLT5saW5rX2ZsYWcgJiBMU19OUElWX0ZBQl9TVVBQT1JURUQpCkBAIC0xNzk2LDYgKzE5MjgsNyBAQAogewogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqZG1hYnVmID0gbWJveHEtPmNvbnRleHQxOwogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IG1ib3hxLT52cG9ydDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAKIAlpZiAobWJveHEtPnUubWIubWJ4U3RhdHVzKSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfTUJPWCwKQEAgLTE4MTMsNyArMTk0NiwxMSBAQAogCQlnb3RvIGZhaWxfZnJlZV9tZW07CiAJfQogCS8qIFRoZSBWUEkgaXMgaW1wbGljaXRseSByZWdpc3RlcmVkIHdoZW4gdGhlIFZGSSBpcyByZWdpc3RlcmVkICovCisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl2cG9ydC0+dnBpX3N0YXRlIHw9IExQRkNfVlBJX1JFR0lTVEVSRUQ7CisJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVkZJX1JFR0lTVEVSRUQ7CisJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCiAJaWYgKHZwb3J0LT5wb3J0X3N0YXRlID09IExQRkNfRkFCUklDX0NGR19MSU5LKSB7CiAJCWxwZmNfc3RhcnRfZmRpc2NzKHBoYmEpOwpAQCAtMjA1MCw4ICsyMTg3LDcgQEAKIAkJCXJldHVybjsKIAkJfQogCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCQlyYyA9IGxwZmNfc2xpNF9yZWFkX2ZjZl9yZWNvcmQocGhiYSwKLQkJCQkJTFBGQ19GQ09FX0ZDRl9HRVRfRklSU1QpOworCQlyYyA9IGxwZmNfc2xpNF9yZWFkX2ZjZl9yZWNvcmQocGhiYSwgTFBGQ19GQ09FX0ZDRl9HRVRfRklSU1QpOwogCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC0yMTM5LDEwICsyMjc1LDEyIEBACiAJfQogCiAJcGhiYS0+ZmNfZXZlbnRUYWcgPSBsYS0+ZXZlbnRUYWc7CisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJaWYgKGxhLT5tbSkKIAkJcGhiYS0+c2xpLnNsaV9mbGFnIHw9IExQRkNfTUVOTE9fTUFJTlQ7CiAJZWxzZQogCQlwaGJhLT5zbGkuc2xpX2ZsYWcgJj0gfkxQRkNfTUVOTE9fTUFJTlQ7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAogCXBoYmEtPmxpbmtfZXZlbnRzKys7CiAJaWYgKGxhLT5hdHRUeXBlID09IEFUX0xJTktfVVAgJiYgKCFsYS0+bW0pKSB7CkBAIC0yMjcxLDEwICsyNDA5LDEwIEBACiAJCQkJIG1iLT5tYnhTdGF0dXMpOwogCQlicmVhazsKIAl9Ci0Jc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl2cG9ydC0+dnBpX3N0YXRlICY9IH5MUEZDX1ZQSV9SRUdJU1RFUkVEOwogCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPnVucmVnX3ZwaV9jbXBsID0gVlBPUlRfT0s7CiAJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJLyoKQEAgLTIzMzIsNyArMjQ3MCwxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCXZwb3J0LT52cGlfc3RhdGUgfD0gTFBGQ19WUElfUkVHSVNURVJFRDsKKwl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfVlBPUlRfTkVFRFNfUkVHX1ZQSTsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPm51bV9kaXNjX25vZGVzID0gMDsKIAkvKiBnbyB0aHJ1IE5QUiBsaXN0IGFuZCBpc3N1ZSBFTFMgUExPR0lzICovCiAJaWYgKHZwb3J0LT5mY19ucHJfY250KQpAQCAtMzIxOCw2ICszMzU5LDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY191bnJlZ19oYmFfcnBpcyAtIFVucmVnaXN0ZXIgcnBpcyByZWdpc3RlcmVkIHRvIHRoZSBoYmEuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB0byB1bnJlZ2lzdGVyIGFsbCB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgUlBJcworICogdG8gdGhlIEhCQS4KKyAqKi8KK3ZvaWQKK2xwZmNfdW5yZWdfaGJhX3JwaXMoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCWludCBpOworCisJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKKwlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgeworCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOworCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5kbHAsICZ2cG9ydHNbaV0tPmZjX25vZGVzLCBubHBfbGlzdHApIHsKKwkJCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9SUElfVkFMSUQpCisJCQkJbHBmY191bnJlZ19ycGkodnBvcnRzW2ldLCBuZGxwKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJfQorCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7Cit9CisKIHZvaWQKIGxwZmNfdW5yZWdfYWxsX3JwaXMoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtNDQ0OCw2ICs0NjE3LDE5NSBAQAogfQogCiAvKioKKyAqIGxwZmNfdW5yZWdpc3Rlcl9mY2ZfcHJlcCAtIFVucmVnaXN0ZXIgZmNmIHJlY29yZCBwcmVwYXJhdGlvbgorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZSB0aGUgSEJBIGZvciB1bnJlZ2lzdGVyaW5nIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZAorICogRkNGIGZyb20gdGhlIEhCQS4gSXQgcGVyZm9ybXMgdW5yZWdpc3RlcmluZywgaW4gb3JkZXIsIFJQSXMsIFZQSXMsIGFuZAorICogVkZJcy4KKyAqLworaW50CitscGZjX3VucmVnaXN0ZXJfZmNmX3ByZXAoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCUxQRkNfTUJPWFFfdCAqbWJveDsKKwlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlpbnQgaSwgcmM7CisKKwkvKiBVbnJlZ2lzdGVyIFJQSXMgKi8KKwlpZiAobHBmY19mY2ZfaW51c2UocGhiYSkpCisJCWxwZmNfdW5yZWdfaGJhX3JwaXMocGhiYSk7CisKKwkvKiBBdCB0aGlzIHBvaW50LCBhbGwgZGlzY292ZXJ5IGlzIGFib3J0ZWQgKi8KKwlwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSA9IExQRkNfVlBPUlRfVU5LTk9XTjsKKworCS8qIFVucmVnaXN0ZXIgVlBJcyAqLworCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CisJaWYgKHZwb3J0cyAmJiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX05QSVZfRU5BQkxFRCkpCisJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3Zwb3J0cyAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7CisJCQkvKiBTdG9wIEZMT0dJL0ZESVNDIHJldHJpZXMgKi8KKwkJCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZCh2cG9ydHNbaV0sIEZhYnJpY19ESUQpOworCQkJaWYgKG5kbHApCisJCQkJbHBmY19jYW5jZWxfcmV0cnlfZGVsYXlfdG1vKHZwb3J0c1tpXSwgbmRscCk7CisJCQlscGZjX21ieF91bnJlZ192cGkodnBvcnRzW2ldKTsKKwkJCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSk7CisJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkJdnBvcnRzW2ldLT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX0lOSVRfVlBJOworCQkJdnBvcnRzW2ldLT52cGlfc3RhdGUgJj0gfkxQRkNfVlBJX1JFR0lTVEVSRUQ7CisJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCX0KKwlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOworCisJLyogQ2xlYW51cCBhbnkgb3V0c3RhbmRpbmcgRUxTIGNvbW1hbmRzICovCisJbHBmY19lbHNfZmx1c2hfYWxsX2NtZChwaGJhKTsKKworCS8qIFVucmVnaXN0ZXIgVkZJICovCisJbWJveCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYm94KSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKKwkJCQkiMjU1NiBVTlJFR19WRkkgbWJveCBhbGxvY2F0aW9uIGZhaWxlZCIKKwkJCQkiSEJBIHN0YXRlIHgleFxuIiwgcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlscGZjX3VucmVnX3ZmaShtYm94LCBwaGJhLT5wcG9ydCk7CisJbWJveC0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKwltYm94LT5tYm94X2NtcGwgPSBscGZjX3VucmVnaXN0ZXJfdmZpX2NtcGw7CisKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveCwgTUJYX05PV0FJVCk7CisJaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZfExPR19NQk9YLAorCQkJCSIyNTU3IFVOUkVHX1ZGSSBpc3N1ZSBtYm94IGZhaWxlZCByYyB4JXggIgorCQkJCSJIQkEgc3RhdGUgeCV4XG4iLAorCQkJCXJjLCBwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSk7CisJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQocGhiYS0+cHBvcnQpOworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJcGhiYS0+cHBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZGSV9SRUdJU1RFUkVEOworCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNfc2xpNF91bnJlZ2lzdGVyX2ZjZiAtIFVucmVnaXN0ZXIgY3VycmVudGx5IHJlZ2lzdGVyZWQgRkNGIHJlY29yZAorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXNzdWVzIHN5bmNocm9ub3VzIHVucmVnaXN0ZXIgRkNGIG1haWxib3ggY29tbWFuZCB0byBIQkEgdG8KKyAqIHVucmVnaXN0ZXIgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIEZDRiByZWNvcmQuIFRoZSBkcml2ZXIgZG9lcyBub3QgcmVzZXQKKyAqIHRoZSBkcml2ZXIgRkNGIHVzYWdlIHN0YXRlIGZsYWdzLgorICoKKyAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWxseSBpc3N1ZWQsIG5vbmUtemVybyBvdGhlcndpc2UuCisgKi8KK2ludAorbHBmY19zbGk0X3VucmVnaXN0ZXJfZmNmKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlMUEZDX01CT1hRX3QgKm1ib3g7CisJaW50IHJjOworCisJbWJveCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYm94KSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKKwkJCQkiMjU1MSBVTlJFR19GQ0ZJIG1ib3ggYWxsb2NhdGlvbiBmYWlsZWQiCisJCQkJIkhCQSBzdGF0ZSB4JXhcbiIsIHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWxwZmNfdW5yZWdfZmNmaShtYm94LCBwaGJhLT5mY2YuZmNmaSk7CisJbWJveC0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKwltYm94LT5tYm94X2NtcGwgPSBscGZjX3VucmVnaXN0ZXJfZmNmaV9jbXBsOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94LCBNQlhfTk9XQUlUKTsKKworCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1NMSSwKKwkJCQkiMjU1MiBVbnJlZ2lzdGVyIEZDRkkgY29tbWFuZCBmYWlsZWQgcmMgeCV4ICIKKwkJCQkiSEJBIHN0YXRlIHgleFxuIiwKKwkJCQlyYywgcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbHBmY191bnJlZ2lzdGVyX2ZjZl9yZXNjYW4gLSBVbnJlZ2lzdGVyIGN1cnJlbnRseSByZWdpc3RlcmVkIGZjZiBhbmQgcmVzY2FuCisgKiBAcGhiYTogUG9pbnRlciB0byBoYmEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiB1bnJlZ2lzdGVycyB0aGUgY3VycmVudGx5IHJlaWdzdGVyZWQgRkNGLiBUaGlzIGZ1bmN0aW9uCisgKiBhbHNvIHRyaWVzIHRvIGZpbmQgYW5vdGhlciBGQ0YgZm9yIGRpc2NvdmVyeSBieSByZXNjYW4gdGhlIEhCQSBGQ0YgdGFibGUuCisgKi8KK3ZvaWQKK2xwZmNfdW5yZWdpc3Rlcl9mY2ZfcmVzY2FuKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlpbnQgcmM7CisKKwkvKiBQcmVwYXJhdGlvbiBmb3IgdW5yZWdpc3RlcmluZyBmY2YgKi8KKwlyYyA9IGxwZmNfdW5yZWdpc3Rlcl9mY2ZfcHJlcChwaGJhKTsKKwlpZiAocmMpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZLAorCQkJCSIyNzQ4IEZhaWxlZCB0byBwcmVwYXJlIGZvciB1bnJlZ2lzdGVyaW5nICIKKwkJCQkiSEJBJ3MgRkNGIHJlY29yZDogcmM9JWRcbiIsIHJjKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE5vdywgdW5yZWdpc3RlciBGQ0YgcmVjb3JkIGFuZCByZXNldCBIQkEgRkNGIHN0YXRlICovCisJcmMgPSBscGZjX3NsaTRfdW5yZWdpc3Rlcl9mY2YocGhiYSk7CisJaWYgKHJjKQorCQlyZXR1cm47CisJLyogUmVzZXQgSEJBIEZDRiBzdGF0ZXMgYWZ0ZXIgc3VjY2Vzc2Z1bCB1bnJlZ2lzdGVyIEZDRiAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyA9IDA7CisKKwkvKgorCSAqIElmIGRyaXZlciBpcyBub3QgdW5sb2FkaW5nLCBjaGVjayBpZiB0aGVyZSBpcyBhbnkgb3RoZXIKKwkgKiBGQ0YgcmVjb3JkIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRpc2NvdmVyeS4KKwkgKi8KKwlpZiAoKHBoYmEtPnBwb3J0LT5sb2FkX2ZsYWcgJiBGQ19VTkxPQURJTkcpIHx8CisJICAgIChwaGJhLT5saW5rX3N0YXRlIDwgTFBGQ19MSU5LX1VQKSkKKwkJcmV0dXJuOworCisJcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIExQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKKworCWlmIChyYykKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZfExPR19NQk9YLAorCQkJCSIyNTUzIGxwZmNfdW5yZWdpc3Rlcl91bnVzZWRfZmNmIGZhaWxlZCAiCisJCQkJInRvIHJlYWQgRkNGIHJlY29yZCBIQkEgc3RhdGUgeCV4XG4iLAorCQkJCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKK30KKworLyoqCisgKiBscGZjX3VucmVnaXN0ZXJfZmNmIC0gVW5yZWdpc3RlciB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgZmNmIHJlY29yZAorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24ganVzdCB1bnJlZ2lzdGVycyB0aGUgY3VycmVudGx5IHJlaWdzdGVyZWQgRkNGLiBJdCBkb2VzIG5vdAorICogdHJ5IHRvIGZpbmQgYW5vdGhlciBGQ0YgZm9yIGRpc2NvdmVyeS4KKyAqLwordm9pZAorbHBmY191bnJlZ2lzdGVyX2ZjZihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJaW50IHJjOworCisJLyogUHJlcGFyYXRpb24gZm9yIHVucmVnaXN0ZXJpbmcgZmNmICovCisJcmMgPSBscGZjX3VucmVnaXN0ZXJfZmNmX3ByZXAocGhiYSk7CisJaWYgKHJjKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKKwkJCQkiMjc0OSBGYWlsZWQgdG8gcHJlcGFyZSBmb3IgdW5yZWdpc3RlcmluZyAiCisJCQkJIkhCQSdzIEZDRiByZWNvcmQ6IHJjPSVkXG4iLCByYyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBOb3csIHVucmVnaXN0ZXIgRkNGIHJlY29yZCBhbmQgcmVzZXQgSEJBIEZDRiBzdGF0ZSAqLworCXJjID0gbHBmY19zbGk0X3VucmVnaXN0ZXJfZmNmKHBoYmEpOworCWlmIChyYykKKwkJcmV0dXJuOworCS8qIFNldCBwcm9wZXIgSEJBIEZDRiBzdGF0ZXMgYWZ0ZXIgc3VjY2Vzc2Z1bCB1bnJlZ2lzdGVyIEZDRiAqLworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX1JFR0lTVEVSRUQ7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKK30KKworLyoqCiAgKiBscGZjX3VucmVnaXN0ZXJfdW51c2VkX2ZjZiAtIFVucmVnaXN0ZXIgRkNGIGlmIGFsbCBkZXZpY2VzIGFyZSBkaXNjb25uZWN0ZWQuCiAgKiBAcGhiYTogUG9pbnRlciB0byBoYmEgY29udGV4dCBvYmplY3QuCiAgKgpAQCAtNDQ1OCwyMSArNDgxNiwxNCBAQAogdm9pZAogbHBmY191bnJlZ2lzdGVyX3VudXNlZF9mY2Yoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewotCUxQRkNfTUJPWFFfdCAqbWJveDsKLQlpbnQgcmM7Ci0Jc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7Ci0JaW50IGk7Ci0KLQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkvKgotCSAqIElmIEhCQSBpcyBub3QgcnVubmluZyBpbiBGSVAgbW9kZSBvcgotCSAqIElmIEhCQSBkb2VzIG5vdCBzdXBwb3J0IEZDb0Ugb3IKLQkgKiBJZiBGQ0YgaXMgbm90IHJlZ2lzdGVyZWQuCi0JICogZG8gbm90aGluZy4KKwkgKiBJZiBIQkEgaXMgbm90IHJ1bm5pbmcgaW4gRklQIG1vZGUgb3IgaWYgSEJBIGRvZXMgbm90IHN1cHBvcnQKKwkgKiBGQ29FIG9yIGlmIEZDRiBpcyBub3QgcmVnaXN0ZXJlZCwgZG8gbm90aGluZy4KIAkgKi8KKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAlpZiAoIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9GQ09FX1NVUFBPUlQpIHx8Ci0JCSEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFR0lTVEVSRUQpIHx8Ci0JCSghKHBoYmEtPmhiYV9mbGFnICYgSEJBX0ZJUF9TVVBQT1JUKSkpIHsKKwkgICAgIShwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVHSVNURVJFRCkgfHwKKwkgICAgIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9GSVBfU1VQUE9SVCkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJcmV0dXJuOwogCX0KQEAgLTQ0ODEsOTEgKzQ4MzIsNyBAQAogCWlmIChscGZjX2ZjZl9pbnVzZShwaGJhKSkKIAkJcmV0dXJuOwogCi0JLyogQXQgdGhpcyBwb2ludCwgYWxsIGRpc2NvdmVyeSBpcyBhYm9ydGVkICovCi0JcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUgPSBMUEZDX1ZQT1JUX1VOS05PV047Ci0KLQkvKiBVbnJlZ2lzdGVyIFZQSXMgKi8KLQl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOwotCWlmICh2cG9ydHMgJiYKLQkJKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19OUElWX0VOQUJMRUQpKQotCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgewotCQkJbHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0c1tpXSk7Ci0JCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJCXZwb3J0c1tpXS0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSTsKLQkJCXZwb3J0c1tpXS0+dnBpX3N0YXRlICY9IH5MUEZDX1ZQSV9SRUdJU1RFUkVEOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJfQotCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7Ci0KLQkvKiBVbnJlZ2lzdGVyIFZGSSAqLwotCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwotCWlmICghbWJveCkgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUll8TE9HX01CT1gsCi0JCQkiMjU1NiBVTlJFR19WRkkgbWJveCBhbGxvY2F0aW9uIGZhaWxlZCIKLQkJCSJIQkEgc3RhdGUgeCV4XG4iLAotCQkJcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUpOwotCQlyZXR1cm47Ci0JfQotCi0JbHBmY191bnJlZ192ZmkobWJveCwgcGhiYS0+cHBvcnQpOwotCW1ib3gtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7Ci0JbWJveC0+bWJveF9jbXBsID0gbHBmY191bnJlZ2lzdGVyX3ZmaV9jbXBsOwotCi0JcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3gsIE1CWF9OT1dBSVQpOwotCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKLQkJCSIyNTU3IFVOUkVHX1ZGSSBpc3N1ZSBtYm94IGZhaWxlZCByYyB4JXggIgotCQkJIkhCQSBzdGF0ZSB4JXhcbiIsCi0JCQlyYywgcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUpOwotCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBVbnJlZ2lzdGVyIEZDRiAqLwotCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwotCWlmICghbWJveCkgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUll8TE9HX01CT1gsCi0JCQkiMjU1MSBVTlJFR19GQ0ZJIG1ib3ggYWxsb2NhdGlvbiBmYWlsZWQiCi0JCQkiSEJBIHN0YXRlIHgleFxuIiwKLQkJCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKLQkJcmV0dXJuOwotCX0KLQotCWxwZmNfdW5yZWdfZmNmaShtYm94LCBwaGJhLT5mY2YuZmNmaSk7Ci0JbWJveC0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKLQltYm94LT5tYm94X2NtcGwgPSBscGZjX3VucmVnaXN0ZXJfZmNmaV9jbXBsOwotCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94LCBNQlhfTk9XQUlUKTsKLQotCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKLQkJCSIyNTUyIFVOUkVHX0ZDRkkgaXNzdWUgbWJveCBmYWlsZWQgcmMgeCV4ICIKLQkJCSJIQkEgc3RhdGUgeCV4XG4iLAotCQkJcmMsIHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKLQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0JcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH4oRkNGX0FWQUlMQUJMRSB8IEZDRl9SRUdJU1RFUkVEIHwKLQkJRkNGX0RJU0NPVkVSRUQgfCBGQ0ZfQk9PVF9FTkFCTEUgfCBGQ0ZfSU5fVVNFIHwKLQkJRkNGX1ZBTElEX1ZMQU4pOwotCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0KLQkvKgotCSAqIElmIGRyaXZlciBpcyBub3QgdW5sb2FkaW5nLCBjaGVjayBpZiB0aGVyZSBpcyBhbnkgb3RoZXIKLQkgKiBGQ0YgcmVjb3JkIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRpc2NvdmVyeS4KLQkgKi8KLQlpZiAoKHBoYmEtPnBwb3J0LT5sb2FkX2ZsYWcgJiBGQ19VTkxPQURJTkcpIHx8Ci0JCShwaGJhLT5saW5rX3N0YXRlIDwgTFBGQ19MSU5LX1VQKSkKLQkJcmV0dXJuOwotCi0JcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIExQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKLQotCWlmIChyYykKLQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZfExPR19NQk9YLAotCQkJIjI1NTMgbHBmY191bnJlZ2lzdGVyX3VudXNlZF9mY2YgZmFpbGVkIHRvIHJlYWQgRkNGIgotCQkJIiByZWNvcmQgSEJBIHN0YXRlIHgleFxuIiwKLQkJCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKKwlscGZjX3VucmVnaXN0ZXJfZmNmX3Jlc2NhbihwaGJhKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKaW5kZXggYzlmYWExZC4uODlmZjdjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMTM0Niw2ICsxMzQ2LDkgQEAKICNkZWZpbmUgTUJYX0hFQVJUQkVBVCAgICAgICAweDMxCiAjZGVmaW5lIE1CWF9XUklURV9WUEFSTVMgICAgMHgzMgogI2RlZmluZSBNQlhfQVNZTkNFVlRfRU5BQkxFIDB4MzMKKyNkZWZpbmUgTUJYX1JFQURfRVZFTlRfTE9HX1NUQVRVUyAweDM3CisjZGVmaW5lIE1CWF9SRUFEX0VWRU5UX0xPRyAgMHgzOAorI2RlZmluZSBNQlhfV1JJVEVfRVZFTlRfTE9HIDB4MzkKIAogI2RlZmluZSBNQlhfUE9SVF9DQVBBQklMSVRJRVMgMHgzQgogI2RlZmluZSBNQlhfUE9SVF9JT1ZfQ09OVFJPTCAweDNDCkBAIC0xNDY1LDE3ICsxNDY4LDEzIEBACiAjZGVmaW5lIENNRF9JT0NCX0xPR0VOVFJZX0NOCQkweDk0CiAjZGVmaW5lIENNRF9JT0NCX0xPR0VOVFJZX0FTWU5DX0NOCTB4OTYKIAotLyogVW5oYW5kbGVkIERhdGEgU2VjdXJpdHkgU0xJIENvbW1hbmRzICovCi0jZGVmaW5lIERTU0NNRF9JV1JJVEU2NF9DUiAJCTB4RDgKLSNkZWZpbmUgRFNTQ01EX0lXUklURTY0X0NYCQkweEQ5Ci0jZGVmaW5lIERTU0NNRF9JUkVBRDY0X0NSCQkweERBCi0jZGVmaW5lIERTU0NNRF9JUkVBRDY0X0NYCQkweERCCi0jZGVmaW5lIERTU0NNRF9JTlZBTElEQVRFX0RFSwkJMHhEQwotI2RlZmluZSBEU1NDTURfU0VUX0tFSwkJCTB4REQKLSNkZWZpbmUgRFNTQ01EX0dFVF9LRUtfSUQJCTB4REUKLSNkZWZpbmUgRFNTQ01EX0dFTl9YRkVSCQkJMHhERgorLyogRGF0YSBTZWN1cml0eSBTTEkgQ29tbWFuZHMgKi8KKyNkZWZpbmUgRFNTQ01EX0lXUklURTY0X0NSCQkweEY4CisjZGVmaW5lIERTU0NNRF9JV1JJVEU2NF9DWAkJMHhGOQorI2RlZmluZSBEU1NDTURfSVJFQUQ2NF9DUgkJMHhGQQorI2RlZmluZSBEU1NDTURfSVJFQUQ2NF9DWAkJMHhGQgogCi0jZGVmaW5lIENNRF9NQVhfSU9DQl9DTUQgICAgICAgIDB4RTYKKyNkZWZpbmUgQ01EX01BWF9JT0NCX0NNRCAgICAgICAgMHhGQgogI2RlZmluZSBDTURfSU9DQl9NQVNLICAgICAgICAgICAweGZmCiAKICNkZWZpbmUgTUFYX01TR19EQVRBICAgICAgICAgICAgMjgJLyogbWF4IG1zZyBkYXRhIGluIENNRF9BREFQVEVSX01TRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmgKaW5kZXggOGEyYTFjNS4uODIwMDE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oCkBAIC01MiwzNSArNTIsMzcgQEAKIAl1aW50MzJfdCBhZGRyX2hpOwogfTsKIAotI2RlZmluZSBMUEZDX1NMSVJFVl9DT05GX1dPUkQJMHg1OAogc3RydWN0IGxwZmNfc2xpX2ludGYgewogCXVpbnQzMl90IHdvcmQwOwotI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmdHlwZV9NQVNLIAkweDAwMDAwMDA3Ci0jZGVmaW5lIGxwZmNfc2xpX2ludGZfaWZ0eXBlX1NISUZUCTAKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9pZnR5cGVfV09SRAl3b3JkMAotI2RlZmluZSBscGZjX3NsaV9pbnRmX3Jldl9NQVNLIAkJMHgwMDAwMDAwZgotI2RlZmluZSBscGZjX3NsaV9pbnRmX3Jldl9TSElGVAkJNAotI2RlZmluZSBscGZjX3NsaV9pbnRmX3Jldl9XT1JECQl3b3JkMAotI2RlZmluZSBMUEZDX1NMSVJFVl9DT05GX1NMSTQJNAotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZhbWlseV9NQVNLIAkweDAwMDAwMGZmCi0jZGVmaW5lIGxwZmNfc2xpX2ludGZfZmFtaWx5X1NISUZUCTgKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mYW1pbHlfV09SRAl3b3JkMAotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXQxX01BU0sgCTB4MDAwMDAwZmYKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0MV9TSElGVAkxNgotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXQxX1dPUkQJd29yZDAKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0Ml9NQVNLIAkweDAwMDAwMDFmCi0jZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdDJfU0hJRlQJMjQKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0Ml9XT1JECXdvcmQwCi0jZGVmaW5lIGxwZmNfc2xpX2ludGZfdmFsaWRfTUFTSyAJMHgwMDAwMDAwNwotI2RlZmluZSBscGZjX3NsaV9pbnRmX3ZhbGlkX1NISUZUCTI5Ci0jZGVmaW5lIGxwZmNfc2xpX2ludGZfdmFsaWRfV09SRAl3b3JkMAorI2RlZmluZSBscGZjX3NsaV9pbnRmX3ZhbGlkX1NISUZUCQkyOQorI2RlZmluZSBscGZjX3NsaV9pbnRmX3ZhbGlkX01BU0sJCTB4MDAwMDAwMDcKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl92YWxpZF9XT1JECQl3b3JkMAogI2RlZmluZSBMUEZDX1NMSV9JTlRGX1ZBTElECQk2CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdHVyZWxldmVsMl9TSElGVAkyNAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDJfTUFTSwkweDAwMDAwMDFGCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdHVyZWxldmVsMl9XT1JECXdvcmQwCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdHVyZWxldmVsMV9TSElGVAkxNgorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDFfTUFTSwkweDAwMDAwMEZGCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdHVyZWxldmVsMV9XT1JECXdvcmQwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfRkVBVFVSRUxFVkVMMV8xCTEKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9GRUFUVVJFTEVWRUwxXzIJMgorI2RlZmluZSBscGZjX3NsaV9pbnRmX3NsaV9mYW1pbHlfU0hJRlQJCTgKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9zbGlfZmFtaWx5X01BU0sJCTB4MDAwMDAwRkYKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9zbGlfZmFtaWx5X1dPUkQJCXdvcmQwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfRkFNSUxZX0JFMgkwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfRkFNSUxZX0JFMwkxCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpcmV2X1NISUZUCQk0CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpcmV2X01BU0sJCTB4MDAwMDAwMEYKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9zbGlyZXZfV09SRAkJd29yZDAKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9SRVZfU0xJMwkJMworI2RlZmluZSBMUEZDX1NMSV9JTlRGX1JFVl9TTEk0CQk0CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfaWZfdHlwZV9TSElGVAkJMAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmX3R5cGVfTUFTSwkJMHgwMDAwMDAwNworI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmX3R5cGVfV09SRAkJd29yZDAKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9JRl9UWVBFXzAJCTAKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9JRl9UWVBFXzEJCTEKIH07CiAKLSNkZWZpbmUgTFBGQ19TTEk0X0JBUjAJCTEKLSNkZWZpbmUgTFBGQ19TTEk0X0JBUjEJCTIKLSNkZWZpbmUgTFBGQ19TTEk0X0JBUjIJCTQKLQogI2RlZmluZSBMUEZDX1NMSTRfTUJYX0VNQkVECXRydWUKICNkZWZpbmUgTFBGQ19TTEk0X01CWF9ORU1CRUQJZmFsc2UKIApAQCAtMTYxLDYgKzE2Myw5IEBACiAjZGVmaW5lIExQRkNfRlBfREVGX0lNQVggICAgICAgMTAwMDAKICNkZWZpbmUgTFBGQ19TUF9ERUZfSU1BWCAgICAgICAxMDAwMAogCisvKiBQT1JUX0NBUEFCSUxJVElFUyBjb25zdGFudHMuICovCisjZGVmaW5lIExQRkNfTUFYX1NVUFBPUlRFRF9QQUdFUwk4CisKIHN0cnVjdCB1bHBfYmRlNjQgewogCXVuaW9uIFVMUF9CREVfVFVTIHsKIAkJdWludDMyX3QgdzsKQEAgLTUxNiw3ICs1MjEsNyBAQAogI2RlZmluZSBMUEZDX1VFUlJfU1RBVFVTX0xPCQkweDAwQTAKICNkZWZpbmUgTFBGQ19VRV9NQVNLX0hJCQkJMHgwMEFDCiAjZGVmaW5lIExQRkNfVUVfTUFTS19MTwkJCTB4MDBBOAotI2RlZmluZSBMUEZDX1NDUkFUQ0hQQUQJCQkweDAwNTgKKyNkZWZpbmUgTFBGQ19TTElfSU5URgkJCTB4MDA1OAogCiAvKiBCQVIwIFJlZ2lzdGVycyAqLwogI2RlZmluZSBMUEZDX0hTVF9TVEFURQkJCTB4MDBBQwpAQCAtNTc2LDE5ICs1ODEsNiBAQAogI2RlZmluZSBMUEZDX1BPU1RfU1RBR0VfQVJNRldfUkVBRFkJCQkweEMwMDAKICNkZWZpbmUgTFBGQ19QT1NUX1NUQUdFX0FSTUZXX1VFIAkJCTB4RjAwMAogCi0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9zbGlyZXZfU0hJRlQJCQk0Ci0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9zbGlyZXZfTUFTSwkJCTB4RgotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfc2xpcmV2X1dPUkQJCQl3b3JkMAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfY2hpcHR5cGVfU0hJRlQJCQk4Ci0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9jaGlwdHlwZV9NQVNLCQkJMHhGRgotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfY2hpcHR5cGVfV09SRAkJCXdvcmQwCi0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwxX1NISUZUCQkxNgotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMV9NQVNLCQkweEZGCi0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwxX1dPUkQJCXdvcmQwCi0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwyX1NISUZUCQkyNAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMl9NQVNLCQkweEZGCi0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwyX1dPUkQJCXdvcmQwCi0KIC8qIEJBUjEgUmVnaXN0ZXJzICovCiAjZGVmaW5lIExQRkNfSU1SX01BU0tfQUxMCTB4RkZGRkZGRkYKICNkZWZpbmUgTFBGQ19JU0NSX0NMRUFSX0FMTAkweEZGRkZGRkZGCkBAIC04MDEsNiArNzkzLDcgQEAKICNkZWZpbmUgTFBGQ19NQk9YX09QQ09ERV9GQ09FX0FERF9GQ0YJCQkweDA5CiAjZGVmaW5lIExQRkNfTUJPWF9PUENPREVfRkNPRV9ERUxFVEVfRkNGCQkweDBBCiAjZGVmaW5lIExQRkNfTUJPWF9PUENPREVfRkNPRV9QT1NUX0hEUl9URU1QTEFURQkJMHgwQgorI2RlZmluZSBMUEZDX01CT1hfT1BDT0RFX0ZDT0VfUkVESVNDT1ZFUl9GQ0YJCTB4MTAKIAogLyogTWFpbGJveCBjb21tYW5kIHN0cnVjdHVyZXMgKi8KIHN0cnVjdCBlcV9jb250ZXh0IHsKQEAgLTExNDksMTAgKzExNDIsNyBAQAogCQkJCQkJdGhpcyAgZmxhZyAhISAqLwogI2RlZmluZSBscGZjX3NsaTRfc2dlX2xhc3RfTUFTSwkJMHgwMDAwMDAwMQogI2RlZmluZSBscGZjX3NsaTRfc2dlX2xhc3RfV09SRAkJd29yZDIKLQl1aW50MzJfdCB3b3JkMzsKLSNkZWZpbmUgbHBmY19zbGk0X3NnZV9sZW5fU0hJRlQJCTAKLSNkZWZpbmUgbHBmY19zbGk0X3NnZV9sZW5fTUFTSwkJMHgwMDAxRkZGRgotI2RlZmluZSBscGZjX3NsaTRfc2dlX2xlbl9XT1JECQl3b3JkMworCXVpbnQzMl90IHNnZV9sZW47CiB9OwogCiBzdHJ1Y3QgZmNmX3JlY29yZCB7CkBAIC0xMzAxLDYgKzEyOTEsMTkgQEAKICNkZWZpbmUgbHBmY19tYnhfZGVsX2ZjZl90YmxfaW5kZXhfV09SRAkJd29yZDEwCiB9OwogCitzdHJ1Y3QgbHBmY19tYnhfcmVkaXNjX2ZjZl90YmwgeworCXN0cnVjdCBtYm94X2hlYWRlciBoZWFkZXI7CisJdWludDMyX3Qgd29yZDEwOworI2RlZmluZSBscGZjX21ieF9yZWRpc2NfZmNmX2NvdW50X1NISUZUCQkwCisjZGVmaW5lIGxwZmNfbWJ4X3JlZGlzY19mY2ZfY291bnRfTUFTSwkJMHgwMDAwRkZGRgorI2RlZmluZSBscGZjX21ieF9yZWRpc2NfZmNmX2NvdW50X1dPUkQJCXdvcmQxMAorCXVpbnQzMl90IHJlc3ZkOworCXVpbnQzMl90IHdvcmQxMjsKKyNkZWZpbmUgbHBmY19tYnhfcmVkaXNjX2ZjZl9pbmRleF9TSElGVAkJMAorI2RlZmluZSBscGZjX21ieF9yZWRpc2NfZmNmX2luZGV4X01BU0sJCTB4MDAwMEZGRkYKKyNkZWZpbmUgbHBmY19tYnhfcmVkaXNjX2ZjZl9pbmRleF9XT1JECQl3b3JkMTIKK307CisKIHN0cnVjdCBscGZjX21ieF9xdWVyeV9md19jZmcgewogCXN0cnVjdCBtYm94X2hlYWRlciBoZWFkZXI7CiAJdWludDMyX3QgY29uZmlnX251bWJlcjsKQEAgLTE4MzQsNiArMTgzNywxNzcgQEAKICNkZWZpbmUgbHBmY19tYnhfcnFfZnRyX3JzcF9pZmlwX1dPUkQJCXdvcmQzCiB9OwogCitzdHJ1Y3QgbHBmY19tYnhfc3VwcF9wYWdlcyB7CisJdWludDMyX3Qgd29yZDE7CisjZGVmaW5lIHFzX1NISUZUIAkJCQkwCisjZGVmaW5lIHFzX01BU0sJCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgcXNfV09SRAkJCQkJd29yZDEKKyNkZWZpbmUgd3JfU0hJRlQJCQkJMQorI2RlZmluZSB3cl9NQVNLIAkJCQkweDAwMDAwMDAxCisjZGVmaW5lIHdyX1dPUkQJCQkJCXdvcmQxCisjZGVmaW5lIHBmX1NISUZUCQkJCTgKKyNkZWZpbmUgcGZfTUFTSwkJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwZl9XT1JECQkJCQl3b3JkMQorI2RlZmluZSBjcG5fU0hJRlQJCQkJMTYKKyNkZWZpbmUgY3BuX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBjcG5fV09SRAkJCQl3b3JkMQorCXVpbnQzMl90IHdvcmQyOworI2RlZmluZSBsaXN0X29mZnNldF9TSElGVCAJCQkwCisjZGVmaW5lIGxpc3Rfb2Zmc2V0X01BU0sJCQkweDAwMDAwMGZmCisjZGVmaW5lIGxpc3Rfb2Zmc2V0X1dPUkQJCQl3b3JkMgorI2RlZmluZSBuZXh0X29mZnNldF9TSElGVAkJCTgKKyNkZWZpbmUgbmV4dF9vZmZzZXRfTUFTSwkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgbmV4dF9vZmZzZXRfV09SRAkJCXdvcmQyCisjZGVmaW5lIGVsZW1fY250X1NISUZUCQkJCTE2CisjZGVmaW5lIGVsZW1fY250X01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBlbGVtX2NudF9XT1JECQkJCXdvcmQyCisJdWludDMyX3Qgd29yZDM7CisjZGVmaW5lIHBuXzBfU0hJRlQJCQkJMjQKKyNkZWZpbmUgcG5fMF9NQVNLICAJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwbl8wX1dPUkQJCQkJd29yZDMKKyNkZWZpbmUgcG5fMV9TSElGVAkJCQkxNgorI2RlZmluZSBwbl8xX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwbl8xX1dPUkQJCQkJd29yZDMKKyNkZWZpbmUgcG5fMl9TSElGVAkJCQk4CisjZGVmaW5lIHBuXzJfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHBuXzJfV09SRAkJCQl3b3JkMworI2RlZmluZSBwbl8zX1NISUZUCQkJCTAKKyNkZWZpbmUgcG5fM19NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcG5fM19XT1JECQkJCXdvcmQzCisJdWludDMyX3Qgd29yZDQ7CisjZGVmaW5lIHBuXzRfU0hJRlQJCQkJMjQKKyNkZWZpbmUgcG5fNF9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcG5fNF9XT1JECQkJCXdvcmQ0CisjZGVmaW5lIHBuXzVfU0hJRlQJCQkJMTYKKyNkZWZpbmUgcG5fNV9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcG5fNV9XT1JECQkJCXdvcmQ0CisjZGVmaW5lIHBuXzZfU0hJRlQJCQkJOAorI2RlZmluZSBwbl82X01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwbl82X1dPUkQJCQkJd29yZDQKKyNkZWZpbmUgcG5fN19TSElGVAkJCQkwCisjZGVmaW5lIHBuXzdfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHBuXzdfV09SRAkJCQl3b3JkNAorCXVpbnQzMl90IHJzdmRbMjddOworI2RlZmluZSBMUEZDX1NVUFBfUEFHRVMJCQkwCisjZGVmaW5lIExQRkNfQkxPQ0tfR1VBUkRfUFJPRklMRVMJMQorI2RlZmluZSBMUEZDX1NMSTRfUEFSQU1FVEVSUwkJMgorfTsKKworc3RydWN0IGxwZmNfbWJ4X3NsaTRfcGFyYW1zIHsKKwl1aW50MzJfdCB3b3JkMTsKKyNkZWZpbmUgcXNfU0hJRlQJCQkJMAorI2RlZmluZSBxc19NQVNLCQkJCQkweDAwMDAwMDAxCisjZGVmaW5lIHFzX1dPUkQJCQkJCXdvcmQxCisjZGVmaW5lIHdyX1NISUZUCQkJCTEKKyNkZWZpbmUgd3JfTUFTSwkJCQkJMHgwMDAwMDAwMQorI2RlZmluZSB3cl9XT1JECQkJCQl3b3JkMQorI2RlZmluZSBwZl9TSElGVAkJCQk4CisjZGVmaW5lIHBmX01BU0sJCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcGZfV09SRAkJCQkJd29yZDEKKyNkZWZpbmUgY3BuX1NISUZUCQkJCTE2CisjZGVmaW5lIGNwbl9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgY3BuX1dPUkQJCQkJd29yZDEKKwl1aW50MzJfdCB3b3JkMjsKKyNkZWZpbmUgaWZfdHlwZV9TSElGVAkJCQkwCisjZGVmaW5lIGlmX3R5cGVfTUFTSwkJCQkweDAwMDAwMDA3CisjZGVmaW5lIGlmX3R5cGVfV09SRAkJCQl3b3JkMgorI2RlZmluZSBzbGlfcmV2X1NISUZUCQkJCTQKKyNkZWZpbmUgc2xpX3Jldl9NQVNLCQkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgc2xpX3Jldl9XT1JECQkJCXdvcmQyCisjZGVmaW5lIHNsaV9mYW1pbHlfU0hJRlQJCQk4CisjZGVmaW5lIHNsaV9mYW1pbHlfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHNsaV9mYW1pbHlfV09SRAkJCQl3b3JkMgorI2RlZmluZSBmZWF0dXJlbGV2ZWxfMV9TSElGVAkJCTE2CisjZGVmaW5lIGZlYXR1cmVsZXZlbF8xX01BU0sJCQkweDAwMDAwMGZmCisjZGVmaW5lIGZlYXR1cmVsZXZlbF8xX1dPUkQJCQl3b3JkMgorI2RlZmluZSBmZWF0dXJlbGV2ZWxfMl9TSElGVAkJCTI0CisjZGVmaW5lIGZlYXR1cmVsZXZlbF8yX01BU0sJCQkweDAwMDAwMDFmCisjZGVmaW5lIGZlYXR1cmVsZXZlbF8yX1dPUkQJCQl3b3JkMgorCXVpbnQzMl90IHdvcmQzOworI2RlZmluZSBmY29lX1NISUZUIAkJCQkwCisjZGVmaW5lIGZjb2VfTUFTSwkJCQkweDAwMDAwMDAxCisjZGVmaW5lIGZjb2VfV09SRAkJCQl3b3JkMworI2RlZmluZSBmY19TSElGVAkJCQkxCisjZGVmaW5lIGZjX01BU0sJCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgZmNfV09SRAkJCQkJd29yZDMKKyNkZWZpbmUgbmljX1NISUZUCQkJCTIKKyNkZWZpbmUgbmljX01BU0sJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBuaWNfV09SRAkJCQl3b3JkMworI2RlZmluZSBpc2NzaV9TSElGVAkJCQkzCisjZGVmaW5lIGlzY3NpX01BU0sJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBpc2NzaV9XT1JECQkJCXdvcmQzCisjZGVmaW5lIHJkbWFfU0hJRlQJCQkJNAorI2RlZmluZSByZG1hX01BU0sJCQkJMHgwMDAwMDAwMQorI2RlZmluZSByZG1hX1dPUkQJCQkJd29yZDMKKwl1aW50MzJfdCBzZ2Vfc3VwcF9sZW47CisJdWludDMyX3Qgd29yZDU7CisjZGVmaW5lIGlmX3BhZ2Vfc3pfU0hJRlQJCQkwCisjZGVmaW5lIGlmX3BhZ2Vfc3pfTUFTSwkJCQkweDAwMDBmZmZmCisjZGVmaW5lIGlmX3BhZ2Vfc3pfV09SRAkJCQl3b3JkNQorI2RlZmluZSBsb29wYmtfc2NvcGVfU0hJRlQJCQkyNAorI2RlZmluZSBsb29wYmtfc2NvcGVfTUFTSwkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgbG9vcGJrX3Njb3BlX1dPUkQJCQl3b3JkNQorI2RlZmluZSBycV9kYl93aW5kb3dfU0hJRlQJCQkyOAorI2RlZmluZSBycV9kYl93aW5kb3dfTUFTSwkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgcnFfZGJfd2luZG93X1dPUkQJCQl3b3JkNQorCXVpbnQzMl90IHdvcmQ2OworI2RlZmluZSBlcV9wYWdlc19TSElGVAkJCQkwCisjZGVmaW5lIGVxX3BhZ2VzX01BU0sJCQkJMHgwMDAwMDAwZgorI2RlZmluZSBlcV9wYWdlc19XT1JECQkJCXdvcmQ2CisjZGVmaW5lIGVxZV9zaXplX1NISUZUCQkJCTgKKyNkZWZpbmUgZXFlX3NpemVfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIGVxZV9zaXplX1dPUkQJCQkJd29yZDYKKwl1aW50MzJfdCB3b3JkNzsKKyNkZWZpbmUgY3FfcGFnZXNfU0hJRlQJCQkJMAorI2RlZmluZSBjcV9wYWdlc19NQVNLCQkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgY3FfcGFnZXNfV09SRAkJCQl3b3JkNworI2RlZmluZSBjcWVfc2l6ZV9TSElGVAkJCQk4CisjZGVmaW5lIGNxZV9zaXplX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBjcWVfc2l6ZV9XT1JECQkJCXdvcmQ3CisJdWludDMyX3Qgd29yZDg7CisjZGVmaW5lIG1xX3BhZ2VzX1NISUZUCQkJCTAKKyNkZWZpbmUgbXFfcGFnZXNfTUFTSwkJCQkweDAwMDAwMDBmCisjZGVmaW5lIG1xX3BhZ2VzX1dPUkQJCQkJd29yZDgKKyNkZWZpbmUgbXFlX3NpemVfU0hJRlQJCQkJOAorI2RlZmluZSBtcWVfc2l6ZV9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgbXFlX3NpemVfV09SRAkJCQl3b3JkOAorI2RlZmluZSBtcV9lbGVtX2NudF9TSElGVAkJCTE2CisjZGVmaW5lIG1xX2VsZW1fY250X01BU0sJCQkweDAwMDAwMGZmCisjZGVmaW5lIG1xX2VsZW1fY250X1dPUkQJCQl3b3JkOAorCXVpbnQzMl90IHdvcmQ5OworI2RlZmluZSB3cV9wYWdlc19TSElGVAkJCQkwCisjZGVmaW5lIHdxX3BhZ2VzX01BU0sJCQkJMHgwMDAwZmZmZgorI2RlZmluZSB3cV9wYWdlc19XT1JECQkJCXdvcmQ5CisjZGVmaW5lIHdxZV9zaXplX1NISUZUCQkJCTgKKyNkZWZpbmUgd3FlX3NpemVfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHdxZV9zaXplX1dPUkQJCQkJd29yZDkKKwl1aW50MzJfdCB3b3JkMTA7CisjZGVmaW5lIHJxX3BhZ2VzX1NISUZUCQkJCTAKKyNkZWZpbmUgcnFfcGFnZXNfTUFTSwkJCQkweDAwMDBmZmZmCisjZGVmaW5lIHJxX3BhZ2VzX1dPUkQJCQkJd29yZDEwCisjZGVmaW5lIHJxZV9zaXplX1NISUZUCQkJCTgKKyNkZWZpbmUgcnFlX3NpemVfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHJxZV9zaXplX1dPUkQJCQkJd29yZDEwCisJdWludDMyX3Qgd29yZDExOworI2RlZmluZSBoZHJfcGFnZXNfU0hJRlQJCQkJMAorI2RlZmluZSBoZHJfcGFnZXNfTUFTSwkJCQkweDAwMDAwMDBmCisjZGVmaW5lIGhkcl9wYWdlc19XT1JECQkJCXdvcmQxMQorI2RlZmluZSBoZHJfc2l6ZV9TSElGVAkJCQk4CisjZGVmaW5lIGhkcl9zaXplX01BU0sJCQkJMHgwMDAwMDAwZgorI2RlZmluZSBoZHJfc2l6ZV9XT1JECQkJCXdvcmQxMQorI2RlZmluZSBoZHJfcHBfYWxpZ25fU0hJRlQJCQkxNgorI2RlZmluZSBoZHJfcHBfYWxpZ25fTUFTSwkJCTB4MDAwMGZmZmYKKyNkZWZpbmUgaGRyX3BwX2FsaWduX1dPUkQJCQl3b3JkMTEKKwl1aW50MzJfdCB3b3JkMTI7CisjZGVmaW5lIHNnbF9wYWdlc19TSElGVAkJCQkwCisjZGVmaW5lIHNnbF9wYWdlc19NQVNLCQkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgc2dsX3BhZ2VzX1dPUkQJCQkJd29yZDEyCisjZGVmaW5lIHNnbF9wcF9hbGlnbl9TSElGVAkJCTE2CisjZGVmaW5lIHNnbF9wcF9hbGlnbl9NQVNLCQkJMHgwMDAwZmZmZgorI2RlZmluZSBzZ2xfcHBfYWxpZ25fV09SRAkJCXdvcmQxMgorCXVpbnQzMl90IHJzdmRfMTNfNjNbNTFdOworfTsKKwogLyogTWFpbGJveCBDb21wbGV0aW9uIFF1ZXVlIEVycm9yIE1lc3NhZ2VzICovCiAjZGVmaW5lIE1CX0NRRV9TVEFUVVNfU1VDQ0VTUyAJCQkweDAKICNkZWZpbmUgTUJfQ1FFX1NUQVRVU19JTlNVRkZJQ0lFTlRfUFJJVklMRUdFUwkweDEKQEAgLTE4NjMsNiArMjAzNyw3IEBACiAJCXN0cnVjdCBscGZjX21ieF9yZWFkX2ZjZl90YmwgcmVhZF9mY2ZfdGJsOwogCQlzdHJ1Y3QgbHBmY19tYnhfYWRkX2ZjZl90YmxfZW50cnkgYWRkX2ZjZl9lbnRyeTsKIAkJc3RydWN0IGxwZmNfbWJ4X2RlbF9mY2ZfdGJsX2VudHJ5IGRlbF9mY2ZfZW50cnk7CisJCXN0cnVjdCBscGZjX21ieF9yZWRpc2NfZmNmX3RibCByZWRpc2NfZmNmX3RibDsKIAkJc3RydWN0IGxwZmNfbWJ4X3JlZ19mY2ZpIHJlZ19mY2ZpOwogCQlzdHJ1Y3QgbHBmY19tYnhfdW5yZWdfZmNmaSB1bnJlZ19mY2ZpOwogCQlzdHJ1Y3QgbHBmY19tYnhfbXFfY3JlYXRlIG1xX2NyZWF0ZTsKQEAgLTE4ODMsNiArMjA1OCw4IEBACiAJCXN0cnVjdCBscGZjX21ieF9yZXF1ZXN0X2ZlYXR1cmVzIHJlcV9mdHJzOwogCQlzdHJ1Y3QgbHBmY19tYnhfcG9zdF9oZHJfdG1wbCBoZHJfdG1wbDsKIAkJc3RydWN0IGxwZmNfbWJ4X3F1ZXJ5X2Z3X2NmZyBxdWVyeV9md19jZmc7CisJCXN0cnVjdCBscGZjX21ieF9zdXBwX3BhZ2VzIHN1cHBfcGFnZXM7CisJCXN0cnVjdCBscGZjX21ieF9zbGk0X3BhcmFtcyBzbGk0X3BhcmFtczsKIAkJc3RydWN0IGxwZmNfbWJ4X25vcCBub3A7CiAJfSB1bjsKIH07CkBAIC0xOTU5LDYgKzIxMzYsOSBAQAogI2RlZmluZSBMUEZDX0FTWU5DX0xJTktfRkFVTFRfTk9ORQkweDAKICNkZWZpbmUgTFBGQ19BU1lOQ19MSU5LX0ZBVUxUX0xPQ0FMCTB4MQogI2RlZmluZSBMUEZDX0FTWU5DX0xJTktfRkFVTFRfUkVNT1RFCTB4MgorI2RlZmluZSBscGZjX2FjcWVfcW9zX2xpbmtfc3BlZWRfU0hJRlQJMTYKKyNkZWZpbmUgbHBmY19hY3FlX3Fvc19saW5rX3NwZWVkX01BU0sJMHgwMDAwRkZGRgorI2RlZmluZSBscGZjX2FjcWVfcW9zX2xpbmtfc3BlZWRfV09SRAl3b3JkMQogCXVpbnQzMl90IGV2ZW50X3RhZzsKIAl1aW50MzJfdCB0cmFpbGVyOwogfTsKQEAgLTE5NzYsNiArMjE1Niw3IEBACiAjZGVmaW5lIExQRkNfRkNPRV9FVkVOVF9UWVBFX0ZDRl9UQUJMRV9GVUxMCTB4MgogI2RlZmluZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9GQ0ZfREVBRAkJMHgzCiAjZGVmaW5lIExQRkNfRkNPRV9FVkVOVF9UWVBFX0NWTAkJMHg0CisjZGVmaW5lIExQRkNfRkNPRV9FVkVOVF9UWVBFX0ZDRl9QQVJBTV9NT0QJMHg1CiAJdWludDMyX3QgZXZlbnRfdGFnOwogCXVpbnQzMl90IHRyYWlsZXI7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwppbmRleCBiOGViMWI2Li5kMjlhYzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBDaHJpc3RvcGggSGVsbHdpZyAgICAgICAgICAgICAgKgpAQCAtNTQ0LDcgKzU0NCw3IEBACiAJCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKHBoYmEtPmNmZ19zdXBwcmVzc19saW5rX3VwID09IDApIHsKIAkJbHBmY19pbml0X2xpbmsocGhiYSwgcG1iLCBwaGJhLT5jZmdfdG9wb2xvZ3ksCiAJCQlwaGJhLT5jZmdfbGlua19zcGVlZCk7CiAJCXBtYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKQEAgLTYwMyw2ICs2MDMsMTAyIEBACiB9CiAKIC8qKgorICogbHBmY19oYmFfaW5pdF9saW5rIC0gSW5pdGlhbGl6ZSB0aGUgRkMgbGluaworICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgaXNzdWUgdGhlIElOSVRfTElOSyBtYWlsYm94IGNvbW1hbmQgY2FsbC4KKyAqIEl0IGlzIGF2YWlsYWJsZSB0byBvdGhlciBkcml2ZXJzIHRocm91Z2ggdGhlIGxwZmNfaGJhIGRhdGEKKyAqIHN0cnVjdHVyZSBmb3IgdXNlIGFzIGEgZGVsYXllZCBsaW5rIHVwIG1lY2hhbmlzbSB3aXRoIHRoZQorICogbW9kdWxlIHBhcmFtZXRlciBscGZjX3N1cHByZXNzX2xpbmtfdXAuCisgKgorICogUmV0dXJuIGNvZGUKKyAqCQkwIC0gc3VjY2VzcworICoJCUFueSBvdGhlciB2YWx1ZSAtIGVycm9yCisgKiovCitpbnQKK2xwZmNfaGJhX2luaXRfbGluayhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gcGhiYS0+cHBvcnQ7CisJTFBGQ19NQk9YUV90ICpwbWI7CisJTUFJTEJPWF90ICptYjsKKwlpbnQgcmM7CisKKwlwbWIgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCWlmICghcG1iKSB7CisJCXBoYmEtPmxpbmtfc3RhdGUgPSBMUEZDX0hCQV9FUlJPUjsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1iID0gJnBtYi0+dS5tYjsKKwlwbWItPnZwb3J0ID0gdnBvcnQ7CisKKwlscGZjX2luaXRfbGluayhwaGJhLCBwbWIsIHBoYmEtPmNmZ190b3BvbG9neSwKKwkJcGhiYS0+Y2ZnX2xpbmtfc3BlZWQpOworCXBtYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKKwlscGZjX3NldF9sb29wYmFja19mbGFnKHBoYmEpOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9OT1dBSVQpOworCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJIjA0OTggQWRhcHRlciBmYWlsZWQgdG8gaW5pdCwgbWJ4Q21kIHgleCAiCisJCQkiSU5JVF9MSU5LLCBtYnhTdGF0dXMgeCV4XG4iLAorCQkJbWItPm1ieENvbW1hbmQsIG1iLT5tYnhTdGF0dXMpOworCQkvKiBDbGVhciBhbGwgaW50ZXJydXB0IGVuYWJsZSBjb25kaXRpb25zICovCisJCXdyaXRlbCgwLCBwaGJhLT5IQ3JlZ2FkZHIpOworCQlyZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOyAvKiBmbHVzaCAqLworCQkvKiBDbGVhciBhbGwgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJCXdyaXRlbCgweGZmZmZmZmZmLCBwaGJhLT5IQXJlZ2FkZHIpOworCQlyZWFkbChwaGJhLT5IQXJlZ2FkZHIpOyAvKiBmbHVzaCAqLworCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7CisJCWlmIChyYyAhPSBNQlhfQlVTWSkKKwkJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcGhiYS0+Y2ZnX3N1cHByZXNzX2xpbmtfdXAgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbHBmY19oYmFfZG93bl9saW5rIC0gdGhpcyByb3V0aW5lIGRvd25zIHRoZSBGQyBsaW5rCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgaXNzdWUgdGhlIERPV05fTElOSyBtYWlsYm94IGNvbW1hbmQgY2FsbC4KKyAqIEl0IGlzIGF2YWlsYWJsZSB0byBvdGhlciBkcml2ZXJzIHRocm91Z2ggdGhlIGxwZmNfaGJhIGRhdGEKKyAqIHN0cnVjdHVyZSBmb3IgdXNlIHRvIHN0b3AgdGhlIGxpbmsuCisgKgorICogUmV0dXJuIGNvZGUKKyAqCQkwIC0gc3VjY2VzcworICoJCUFueSBvdGhlciB2YWx1ZSAtIGVycm9yCisgKiovCitpbnQKK2xwZmNfaGJhX2Rvd25fbGluayhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJTFBGQ19NQk9YUV90ICpwbWI7CisJaW50IHJjOworCisJcG1iID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtYikgeworCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLAorCQlLRVJOX0VSUiwgTE9HX0lOSVQsCisJCSIwNDkxIEFkYXB0ZXIgTGluayBpcyBkaXNhYmxlZC5cbiIpOworCWxwZmNfZG93bl9saW5rKHBoYmEsIHBtYik7CisJcG1iLT5tYm94X2NtcGwgPSBscGZjX3NsaV9kZWZfbWJveF9jbXBsOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9OT1dBSVQpOworCWlmICgocmMgIT0gTUJYX1NVQ0NFU1MpICYmIChyYyAhPSBNQlhfQlVTWSkpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsCisJCUtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJIjI1MjIgQWRhcHRlciBmYWlsZWQgdG8gaXNzdWUgRE9XTl9MSU5LIgorCQkiIG1ib3ggY29tbWFuZCByYyAweCV4XG4iLCByYyk7CisKKwkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBscGZjX2hiYV9kb3duX3ByZXAgLSBQZXJmb3JtIGxwZmMgdW5pbml0aWFsaXphdGlvbiBwcmlvciB0byBIQkEgcmVzZXQKICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgSEJBIGRhdGEgc3RydWN0dXJlLgogICoKQEAgLTIwNzMsNiArMjE2OSw0NCBAQAogfQogCiAvKioKKyAqIF9fbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyIC0gU3RvcCBGQ0YgcmVkaXNjb3Zlcnkgd2FpdCB0aW1lcgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHN0b3BzIHRoZSBTTEk0IEZDRiByZWRpc2NvdmVyIHdhaXQgdGltZXIgaWYgaXQncyBvbi4gVGhlCisgKiBjYWxsZXIgb2YgdGhpcyByb3V0aW5lIHNob3VsZCBhbHJlYWR5IGhvbGQgdGhlIGhvc3QgbG9jay4KKyAqKi8KK3ZvaWQKK19fbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwkvKiBDbGVhciBwZW5kaW5nIEZDRiByZWRpc2NvdmVyeSB3YWl0IHRpbWVyICovCisJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH5GQ0ZfUkVESVNDX1BFTkQ7CisJLyogTm93LCB0cnkgdG8gc3RvcCB0aGUgdGltZXIgKi8KKwlkZWxfdGltZXIoJnBoYmEtPmZjZi5yZWRpc2Nfd2FpdCk7Cit9CisKKy8qKgorICogbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyIC0gU3RvcCBGQ0YgcmVkaXNjb3Zlcnkgd2FpdCB0aW1lcgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHN0b3BzIHRoZSBTTEk0IEZDRiByZWRpc2NvdmVyIHdhaXQgdGltZXIgaWYgaXQncyBvbi4gSXQKKyAqIGNoZWNrcyB3aGV0aGVyIHRoZSBGQ0YgcmVkaXNjb3Zlcnkgd2FpdCB0aW1lciBpcyBwZW5kaW5nIHdpdGggdGhlIGhvc3QKKyAqIGxvY2sgaGVsZCBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIGRpc2FibGluZyB0aGUgdGltZXIgYW5kIGNsZWFyaW5nIHRoZQorICogd2FpdCB0aW1lciBwZW5kaWcgZmxhZy4KKyAqKi8KK3ZvaWQKK2xwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJaWYgKCEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19QRU5EKSkgeworCQkvKiBGQ0YgcmVkaXNjb3ZlcnkgdGltZXIgYWxyZWFkeSBmaXJlZCBvciBzdG9wcGVkICovCisJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCXJldHVybjsKKwl9CisJX19scGZjX3NsaTRfc3RvcF9mY2ZfcmVkaXNjX3dhaXRfdGltZXIocGhiYSk7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKK30KKworLyoqCiAgKiBscGZjX3N0b3BfaGJhX3RpbWVycyAtIFN0b3AgYWxsIHRoZSB0aW1lcnMgYXNzb2NpYXRlZCB3aXRoIGFuIEhCQQogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKgpAQCAtMjA5Niw2ICsyMjMwLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBMUEZDX1BDSV9ERVZfT0M6CiAJCS8qIFN0b3AgYW55IE9uZUNvbm5lY3QgZGV2aWNlIHNlcGNpZmljIGRyaXZlciB0aW1lcnMgKi8KKwkJbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHBoYmEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULApAQCAtMjIyOCw2ICsyMzYzLDcgQEAKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSBwaGJhLT5wcG9ydDsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAgKm5kbHAsICpuZXh0X25kbHA7CiAJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CiAJaW50IGk7CiAKIAlpZiAodnBvcnQtPmZjX2ZsYWcgJiBGQ19PRkZMSU5FX01PREUpCkBAIC0yMjQxLDExICsyMzc3LDE1IEBACiAJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKIAlpZiAodnBvcnRzICE9IE5VTEwpIHsKIAkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBvcnRzICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKLQkJCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwotCiAJCQlpZiAodnBvcnRzW2ldLT5sb2FkX2ZsYWcgJiBGQ19VTkxPQURJTkcpCiAJCQkJY29udGludWU7CisJCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOworCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJCXZwb3J0c1tpXS0+dnBpX3N0YXRlICY9IH5MUEZDX1ZQSV9SRUdJU1RFUkVEOworCQkJdnBvcnRzW2ldLT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJCQl2cG9ydHNbaV0tPmZjX2ZsYWcgJj0gfkZDX1ZGSV9SRUdJU1RFUkVEOworCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCiAJCQlzaG9zdCA9CWxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwKIAkJCQkJCSAmdnBvcnRzW2ldLT5mY19ub2RlcywKQEAgLTI0MDEsNyArMjU0MSw4IEBACiAJc2hvc3QtPnRoaXNfaWQgPSAtMTsKIAlzaG9zdC0+bWF4X2NtZF9sZW4gPSAxNjsKIAlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7Ci0JCXNob3N0LT5kbWFfYm91bmRhcnkgPSBMUEZDX1NMSTRfTUFYX1NFR01FTlRfU0laRTsKKwkJc2hvc3QtPmRtYV9ib3VuZGFyeSA9CisJCQlwaGJhLT5zbGk0X2hiYS5wY19zbGk0X3BhcmFtcy5zZ2Vfc3VwcF9sZW47CiAJCXNob3N0LT5zZ190YWJsZXNpemUgPSBwaGJhLT5jZmdfc2dfc2VnX2NudDsKIAl9CiAKQEAgLTI2NTAsOCArMjc5MSw2IEBACiAJbHBmY19zdG9wX2hiYV90aW1lcnMocGhiYSk7CiAJcGhiYS0+cHBvcnQtPndvcmtfcG9ydF9ldmVudHMgPSAwOwogCXBoYmEtPnNsaTRfaGJhLmludHJfZW5hYmxlID0gMDsKLQkvKiBIYXJkIGNsZWFyIGl0IGZvciBub3csIHNoYWxsIGhhdmUgbW9yZSBncmFjZWZ1bCB3YXkgdG8gd2FpdCBsYXRlciAqLwotCXBoYmEtPnNsaS5zbGlfZmxhZyAmPSB+TFBGQ19TTElfTUJPWF9BQ1RJVkU7CiB9CiAKIC8qKgpAQCAtMjcwMyw3ICsyODQyLDcgQEAKIAlkZWxfZmNmX3JlY29yZCA9ICZtYm94cS0+dS5tcWUudW4uZGVsX2ZjZl9lbnRyeTsKIAliZl9zZXQobHBmY19tYnhfZGVsX2ZjZl90YmxfY291bnQsIGRlbF9mY2ZfcmVjb3JkLCAxKTsKIAliZl9zZXQobHBmY19tYnhfZGVsX2ZjZl90YmxfaW5kZXgsIGRlbF9mY2ZfcmVjb3JkLAotCSAgICAgICBwaGJhLT5mY2YuZmNmX2luZHgpOworCSAgICAgICBwaGJhLT5mY2YuY3VycmVudF9yZWMuZmNmX2luZHgpOwogCiAJaWYgKCFwaGJhLT5zbGk0X2hiYS5pbnRyX2VuYWJsZSkKIAkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3hxLCBNQlhfUE9MTCk7CkBAIC0yNzI3LDYgKzI4NjYsNTcgQEAKIH0KIAogLyoqCisgKiBscGZjX2ZjZl9yZWRpc2Nfd2FpdF9zdGFydF90aW1lciAtIFN0YXJ0IGZjZiByZWRpc2NvdmVyIHdhaXQgdGltZXIKKyAqIEBwaGJhOiBQb2ludGVyIHRvIGhiYSBmb3Igd2hpY2ggdGhpcyBjYWxsIGlzIGJlaW5nIGV4ZWN1dGVkLgorICoKKyAqIFRoaXMgcm91dGluZSBzdGFydHMgdGhlIHRpbWVyIHdhaXRpbmcgZm9yIHRoZSBGQ0YgcmVkaXNjb3ZlcnkgdG8gY29tcGxldGUuCisgKiovCit2b2lkCitscGZjX2ZjZl9yZWRpc2Nfd2FpdF9zdGFydF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJdW5zaWduZWQgbG9uZyBmY2ZfcmVkaXNjX3dhaXRfdG1vID0KKwkJKGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKExQRkNfRkNGX1JFRElTQ09WRVJfV0FJVF9UTU8pKTsKKwkvKiBTdGFydCBmY2YgcmVkaXNjb3Zlcnkgd2FpdCBwZXJpb2QgdGltZXIgKi8KKwltb2RfdGltZXIoJnBoYmEtPmZjZi5yZWRpc2Nfd2FpdCwgZmNmX3JlZGlzY193YWl0X3Rtbyk7CisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJLyogQWxsb3cgYWN0aW9uIHRvIG5ldyBmY2YgYXN5bmNocm9ub3VzIGV2ZW50ICovCisJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH4oRkNGX0FWQUlMQUJMRSB8IEZDRl9TQ0FOX0RPTkUpOworCS8qIE1hcmsgdGhlIEZDRiByZWRpc2NvdmVyeSBwZW5kaW5nIHN0YXRlICovCisJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9SRURJU0NfUEVORDsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworfQorCisvKioKKyAqIGxwZmNfc2xpNF9mY2ZfcmVkaXNjX3dhaXRfdG1vIC0gRkNGIHRhYmxlIHJlZGlzY292ZXIgd2FpdCB0aW1lb3V0CisgKiBAcHRyOiBNYXAgdG8gbHBmY19oYmEgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRlci4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB3aGVuIHdhaXRpbmcgZm9yIEZDRiB0YWJsZSByZWRpc2NvdmVyIGhhcyBiZWVuCisgKiB0aW1lZCBvdXQuIElmIG5ldyBGQ0YgcmVjb3JkKHMpIGhhcyAoaGF2ZSkgYmVlbiBkaXNjb3ZlcmVkIGR1cmluZyB0aGUKKyAqIHdhaXQgcGVyaW9kLCBhIG5ldyBGQ0YgZXZlbnQgc2hhbGwgYmUgYWRkZWQgdG8gdGhlIEZDT0UgYXN5bmMgZXZlbnQKKyAqIGxpc3QsIGFuZCB0aGVuIHdvcmtlciB0aHJlYWQgc2hhbGwgYmUgd2FrZWQgdXAgZm9yIHByb2Nlc3NpbmcgZnJvbSB0aGUKKyAqIHdvcmtlciB0aHJlYWQgY29udGV4dC4KKyAqKi8KK3ZvaWQKK2xwZmNfc2xpNF9mY2ZfcmVkaXNjX3dhaXRfdG1vKHVuc2lnbmVkIGxvbmcgcHRyKQoreworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilwdHI7CisKKwkvKiBEb24ndCBzZW5kIEZDRiByZWRpc2NvdmVyeSBldmVudCBpZiB0aW1lciBjYW5jZWxsZWQgKi8KKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlpZiAoIShwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX1BFTkQpKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCXJldHVybjsKKwl9CisJLyogQ2xlYXIgRkNGIHJlZGlzY292ZXJ5IHRpbWVyIHBlbmRpbmcgZmxhZyAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX1JFRElTQ19QRU5EOworCS8qIEZDRiByZWRpc2NvdmVyeSBldmVudCB0byB3b3JrZXIgdGhyZWFkICovCisJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9SRURJU0NfRVZUOworCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJLyogd2FrZSB1cCB3b3JrZXIgdGhyZWFkICovCisJbHBmY193b3JrZXJfd2FrZV91cChwaGJhKTsKK30KKworLyoqCiAgKiBscGZjX3NsaTRfZndfY2ZnX2NoZWNrIC0gUmVhZCB0aGUgZmlybXdhcmUgY29uZmlnIGFuZCB2ZXJpZnkgRkNvRSBzdXBwb3J0CiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqCkBAIC0yOTc4LDYgKzMxNjgsOCBAQAogCQkJCWJmX2dldChscGZjX2FjcWVfbGlua19waHlzaWNhbCwgYWNxZV9saW5rKTsKIAlwaGJhLT5zbGk0X2hiYS5saW5rX3N0YXRlLmZhdWx0ID0KIAkJCQliZl9nZXQobHBmY19hY3FlX2xpbmtfZmF1bHQsIGFjcWVfbGluayk7CisJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5sb2dpY2FsX3NwZWVkID0KKwkJCQliZl9nZXQobHBmY19hY3FlX3Fvc19saW5rX3NwZWVkLCBhY3FlX2xpbmspOwogCiAJLyogSW52b2tlIHRoZSBscGZjX2hhbmRsZV9sYXR0IG1haWxib3ggY29tbWFuZCBjYWxsYmFjayBmdW5jdGlvbiAqLwogCWxwZmNfbWJ4X2NtcGxfcmVhZF9sYShwaGJhLCBwbWIpOwpAQCAtMzAwNywyMiArMzE5OSwzNCBAQAogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdDsKIAl1aW50MzJfdCBsaW5rX3N0YXRlOworCWludCBhY3RpdmVfdmxpbmtfcHJlc2VudDsKKwlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKKwlpbnQgaTsKIAogCXBoYmEtPmZjX2V2ZW50VGFnID0gYWNxZV9mY29lLT5ldmVudF90YWc7CiAJcGhiYS0+ZmNvZV9ldmVudHRhZyA9IGFjcWVfZmNvZS0+ZXZlbnRfdGFnOwogCXN3aXRjaCAoZXZlbnRfdHlwZSkgewogCWNhc2UgTFBGQ19GQ09FX0VWRU5UX1RZUEVfTkVXX0ZDRjoKKwljYXNlIExQRkNfRkNPRV9FVkVOVF9UWVBFX0ZDRl9QQVJBTV9NT0Q6CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKIAkJCSIyNTQ2IE5ldyBGQ0YgZm91bmQgaW5kZXggMHgleCB0YWcgMHgleFxuIiwKIAkJCWFjcWVfZmNvZS0+aW5kZXgsCiAJCQlhY3FlX2Zjb2UtPmV2ZW50X3RhZyk7Ci0JCS8qCi0JCSAqIElmIHRoZSBjdXJyZW50IEZDRiBpcyBpbiBkaXNjb3ZlcmVkIHN0YXRlLCBvcgotCQkgKiBGQ0YgZGlzY292ZXJ5IGlzIGluIHByb2dyZXNzIGRvIG5vdGhpbmcuCi0JCSAqLwogCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJaWYgKChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfRElTQ09WRVJFRCkgfHwKLQkJICAgKHBoYmEtPmhiYV9mbGFnICYgRkNGX0RJU0NfSU5QUk9HUkVTUykpIHsKKwkJaWYgKChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfU0NBTl9ET05FKSB8fAorCQkgICAgKHBoYmEtPmhiYV9mbGFnICYgRkNGX0RJU0NfSU5QUk9HUkVTUykpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgY3VycmVudCBGQ0YgaXMgaW4gZGlzY292ZXJlZCBzdGF0ZSBvcgorCQkJICogRkNGIGRpc2NvdmVyeSBpcyBpbiBwcm9ncmVzcywgZG8gbm90aGluZy4KKwkJCSAqLworCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX0VWVCkgeworCQkJLyoKKwkJCSAqIElmIGZhc3QgRkNGIGZhaWxvdmVyIHJlc2NhbiBldmVudCBpcyBwZW5kaW5nLAorCQkJICogZG8gbm90aGluZy4KKwkJCSAqLwogCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zMDQ5LDcgKzMyNTMsNyBAQAogCQkJIiB0YWcgMHgleFxuIiwgYWNxZV9mY29lLT5pbmRleCwKIAkJCWFjcWVfZmNvZS0+ZXZlbnRfdGFnKTsKIAkJLyogSWYgdGhlIGV2ZW50IGlzIG5vdCBmb3IgY3VycmVudGx5IHVzZWQgZmNmIGRvIG5vdGhpbmcgKi8KLQkJaWYgKHBoYmEtPmZjZi5mY2ZfaW5keCAhPSBhY3FlX2Zjb2UtPmluZGV4KQorCQlpZiAocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZjZl9pbmR4ICE9IGFjcWVfZmNvZS0+aW5kZXgpCiAJCQlicmVhazsKIAkJLyoKIAkJICogQ3VycmVudGx5LCBkcml2ZXIgc3VwcG9ydCBvbmx5IG9uZSBGQ0YgLSBzbyB0cmVhdCB0aGlzIGFzCkBAIC0zMDc0LDE0ICszMjc4LDU4IEBACiAJCWlmICghbmRscCkKIAkJCWJyZWFrOwogCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CisJCWlmIChwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSA8PSBMUEZDX0ZMT0dJKQorCQkJYnJlYWs7CisJCS8qIElmIHZpcnR1YWwgbGluayBpcyBub3QgeWV0IGluc3RhbnRpYXRlZCBpZ25vcmUgQ1ZMICovCisJCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA8PSBMUEZDX0ZESVNDKQorCQkJYnJlYWs7CisKIAkJbHBmY19saW5rZG93bl9wb3J0KHZwb3J0KTsKLQkJaWYgKHZwb3J0LT5wb3J0X3R5cGUgIT0gTFBGQ19OUElWX1BPUlQpIHsKKwkJbHBmY19jbGVhbnVwX3BlbmRpbmdfbWJveCh2cG9ydCk7CisJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX0NWTF9SQ1ZEOworCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCWFjdGl2ZV92bGlua19wcmVzZW50ID0gMDsKKworCQl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOworCQlpZiAodnBvcnRzKSB7CisJCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7CisJCQkJCWkrKykgeworCQkJCWlmICgoISh2cG9ydHNbaV0tPmZjX2ZsYWcgJgorCQkJCQlGQ19WUE9SVF9DVkxfUkNWRCkpICYmCisJCQkJCSh2cG9ydHNbaV0tPnBvcnRfc3RhdGUgPiBMUEZDX0ZESVNDKSkgeworCQkJCQlhY3RpdmVfdmxpbmtfcHJlc2VudCA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CisJCX0KKworCQlpZiAoYWN0aXZlX3ZsaW5rX3ByZXNlbnQpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBhcmUgb3RoZXIgYWN0aXZlIFZMaW5rcyBwcmVzZW50LAorCQkJICogcmUtaW5zdGFudGlhdGUgdGhlIFZsaW5rIHVzaW5nIEZESVNDLgorCQkJICovCiAJCQltb2RfdGltZXIoJm5kbHAtPm5scF9kZWxheWZ1bmMsIGppZmZpZXMgKyBIWik7CiAJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0RFTEFZX1RNTzsKIAkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJCW5kbHAtPm5scF9sYXN0X2Vsc2NtZCA9IEVMU19DTURfRkxPR0k7Ci0JCQl2cG9ydC0+cG9ydF9zdGF0ZSA9IExQRkNfRkxPR0k7CisJCQluZGxwLT5ubHBfbGFzdF9lbHNjbWQgPSBFTFNfQ01EX0ZESVNDOworCQkJdnBvcnQtPnBvcnRfc3RhdGUgPSBMUEZDX0ZESVNDOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIE90aGVyd2lzZSwgd2UgcmVxdWVzdCBwb3J0IHRvIHJlZGlzY292ZXIKKwkJCSAqIHRoZSBlbnRpcmUgRkNGIHRhYmxlIGZvciBhIGZhc3QgcmVjb3ZlcnkKKwkJCSAqIGZyb20gcG9zc2libGUgY2FzZSB0aGF0IHRoZSBjdXJyZW50IEZDRgorCQkJICogaXMgbm8gbG9uZ2VyIHZhbGlkLgorCQkJICovCisJCQlyYyA9IGxwZmNfc2xpNF9yZWRpc2NfZmNmX3RhYmxlKHBoYmEpOworCQkJaWYgKHJjKQorCQkJCS8qCisJCQkJICogTGFzdCByZXNvcnQgd2lsbCBiZSByZS10cnkgb24gdGhlCisJCQkJICogdGhlIGN1cnJlbnQgcmVnaXN0ZXJlZCBGQ0YgZW50cnkuCisJCQkJICovCisJCQkJbHBmY19yZXRyeV9wcG9ydF9kaXNjb3ZlcnkocGhiYSk7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTMxNTgsNiArMzQwNiwzNCBAQAogfQogCiAvKioKKyAqIGxwZmNfc2xpNF9mY2ZfcmVkaXNjX2V2ZW50X3Byb2MgLSBQcm9jZXNzIGZjZiB0YWJsZSByZWRpc2NvdmVyeSBldmVudAorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgYnkgdGhlIHdvcmtlciB0aHJlYWQgdG8gcHJvY2VzcyBGQ0YgdGFibGUKKyAqIHJlZGlzY292ZXJ5IHBlbmRpbmcgY29tcGxldGlvbiBldmVudC4KKyAqKi8KK3ZvaWQgbHBmY19zbGk0X2ZjZl9yZWRpc2NfZXZlbnRfcHJvYyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJaW50IHJjOworCisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJLyogQ2xlYXIgRkNGIHJlZGlzY292ZXJ5IHRpbWVvdXQgZXZlbnQgKi8KKwlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9SRURJU0NfRVZUOworCS8qIENsZWFyIGRyaXZlciBmYXN0IGZhaWxvdmVyIEZDRiByZWNvcmQgZmxhZyAqLworCXBoYmEtPmZjZi5mYWlsb3Zlcl9yZWMuZmxhZyA9IDA7CisJLyogU2V0IHN0YXRlIGZvciBGQ0YgZmFzdCBmYWlsb3ZlciAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfUkVESVNDX0ZPVjsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCisJLyogU2NhbiBGQ0YgdGFibGUgZnJvbSB0aGUgZmlyc3QgZW50cnkgdG8gcmUtZGlzY292ZXIgU0FOICovCisJcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIExQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKKwlpZiAocmMpCisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKKwkJCQkiMjc0NyBQb3N0IEZDRiByZWRpc2NvdmVyeSByZWFkIEZDRiByZWNvcmQgIgorCQkJCSJmYWlsZWQgMHgleFxuIiwgcmMpOworfQorCisvKioKICAqIGxwZmNfYXBpX3RhYmxlX3NldHVwIC0gU2V0IHVwIHBlciBoYmEgcGNpLWRldmljZSBncm91cCBmdW5jIGFwaSBqdW1wIHRhYmxlCiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqIEBkZXZfZ3JwOiBUaGUgSEJBIFBDSS1EZXZpY2UgZ3JvdXAgbnVtYmVyLgpAQCAtMzQ0Miw4ICszNzE4LDEwIEBACiBscGZjX3NsaTRfZHJpdmVyX3Jlc291cmNlX3NldHVwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKIAlzdHJ1Y3QgbHBmY19zbGkgKnBzbGk7Ci0JaW50IHJjOwotCWludCBpLCBoYnFfY291bnQ7CisJTFBGQ19NQk9YUV90ICptYm94cTsKKwlpbnQgcmMsIGksIGhicV9jb3VudCwgYnVmX3NpemUsIGRtYV9idWZfc2l6ZSwgbWF4X2J1Zl9zaXplOworCXVpbnQ4X3QgcG5fcGFnZVtMUEZDX01BWF9TVVBQT1JURURfUEFHRVNdID0gezB9OworCXN0cnVjdCBscGZjX21xZSAqbXFlOwogCiAJLyogQmVmb3JlIHByb2NlZWQsIHdhaXQgZm9yIFBPU1QgZG9uZSBhbmQgZGV2aWNlIHJlYWR5ICovCiAJcmMgPSBscGZjX3NsaTRfcG9zdF9zdGF0dXNfY2hlY2socGhiYSk7CkBAIC0zNDcyLDYgKzM3NTAsMTEgQEAKIAlpbml0X3RpbWVyKCZwaGJhLT5lcmF0dF9wb2xsKTsKIAlwaGJhLT5lcmF0dF9wb2xsLmZ1bmN0aW9uID0gbHBmY19wb2xsX2VyYXR0OwogCXBoYmEtPmVyYXR0X3BvbGwuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBwaGJhOworCS8qIEZDRiByZWRpc2NvdmVyIHRpbWVyICovCisJaW5pdF90aW1lcigmcGhiYS0+ZmNmLnJlZGlzY193YWl0KTsKKwlwaGJhLT5mY2YucmVkaXNjX3dhaXQuZnVuY3Rpb24gPSBscGZjX3NsaTRfZmNmX3JlZGlzY193YWl0X3RtbzsKKwlwaGJhLT5mY2YucmVkaXNjX3dhaXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBoYmE7CisKIAkvKgogCSAqIFdlIG5lZWQgdG8gZG8gYSBSRUFEX0NPTkZJRyBtYWlsYm94IGNvbW1hbmQgaGVyZSBiZWZvcmUKIAkgKiBjYWxsaW5nIGxwZmNfZ2V0X2NmZ3BhcmFtLiBGb3IgVkZzIHRoaXMgd2lsbCByZXBvcnQgdGhlCkBAIC0zNDk2LDMxICszNzc5LDI2IEBACiAJICogdXNlZCB0byBjcmVhdGUgdGhlIHNnX2RtYV9idWZfcG9vbCBtdXN0IGJlIGR5bmFtaWNhbGx5IGNhbGN1bGF0ZWQuCiAJICogMiBzZWdtZW50cyBhcmUgYWRkZWQgc2luY2UgdGhlIElPQ0IgbmVlZHMgYSBjb21tYW5kIGFuZCByZXNwb25zZSBiZGUuCiAJICogVG8gaW5zdXJlIHRoYXQgdGhlIHNjc2kgc2dsIGRvZXMgbm90IGNyb3NzIGEgNGsgcGFnZSBib3VuZGFyeSBvbmx5Ci0JICogc2dsIHNpemVzIG9mIDFrLCAyaywgNGssIGFuZCA4ayBhcmUgc3VwcG9ydGVkLgotCSAqIFRhYmxlIG9mIHNnbCBzaXplcyBhbmQgc2VnX2NudDoKLQkgKiBzZ2wgc2l6ZSwgCXNnX3NlZ19jbnQJdG90YWwgc2VnCi0JICogMWsJCTUwCQk1MgotCSAqIDJrCQkxMTQJCTExNgotCSAqIDRrCQkyNDIJCTI0NAotCSAqIDhrCQk0OTgJCTUwMAotCSAqIGNtZCgzMikgKyByc3AoMTYwKSArICg1MiAqIHNpemVvZihzbGk0X3NnZSkpID0gMTAyNAotCSAqIGNtZCgzMikgKyByc3AoMTYwKSArICgxMTYgKiBzaXplb2Yoc2xpNF9zZ2UpKSA9IDIwNDgKLQkgKiBjbWQoMzIpICsgcnNwKDE2MCkgKyAoMjQ0ICogc2l6ZW9mKHNsaTRfc2dlKSkgPSA0MDk2Ci0JICogY21kKDMyKSArIHJzcCgxNjApICsgKDUwMCAqIHNpemVvZihzbGk0X3NnZSkpID0gODE5MgorCSAqIHNnbCBzaXplcyBvZiBtdXN0IGJlIGEgcG93ZXIgb2YgMi4KIAkgKi8KLQlpZiAocGhiYS0+Y2ZnX3NnX3NlZ19jbnQgPD0gTFBGQ19ERUZBVUxUX1NHX1NFR19DTlQpCi0JCXBoYmEtPmNmZ19zZ19zZWdfY250ID0gNTA7Ci0JZWxzZSBpZiAocGhiYS0+Y2ZnX3NnX3NlZ19jbnQgPD0gMTE0KQotCQlwaGJhLT5jZmdfc2dfc2VnX2NudCA9IDExNDsKLQllbHNlIGlmIChwaGJhLT5jZmdfc2dfc2VnX2NudCA8PSAyNDIpCi0JCXBoYmEtPmNmZ19zZ19zZWdfY250ID0gMjQyOworCWJ1Zl9zaXplID0gKHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpICsgc2l6ZW9mKHN0cnVjdCBmY3BfcnNwKSArCisJCSAgICAoKHBoYmEtPmNmZ19zZ19zZWdfY250ICsgMikgKiBzaXplb2Yoc3RydWN0IHNsaTRfc2dlKSkpOworCS8qIEZlYXR1cmUgTGV2ZWwgMSBoYXJkd2FyZSBpcyBsaW1pdGVkIHRvIDIgcGFnZXMgKi8KKwlpZiAoKGJmX2dldChscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDEsICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZikgPT0KKwkgICAgIExQRkNfU0xJX0lOVEZfRkVBVFVSRUxFVkVMMV8xKSkKKwkJbWF4X2J1Zl9zaXplID0gTFBGQ19TTEk0X0ZMMV9NQVhfQlVGX1NJWkU7CiAJZWxzZQotCQlwaGJhLT5jZmdfc2dfc2VnX2NudCA9IDQ5ODsKLQotCXBoYmEtPmNmZ19zZ19kbWFfYnVmX3NpemUgPSBzaXplb2Yoc3RydWN0IGZjcF9jbW5kKQotCQkJCQkrIHNpemVvZihzdHJ1Y3QgZmNwX3JzcCk7Ci0JcGhiYS0+Y2ZnX3NnX2RtYV9idWZfc2l6ZSArPQotCQkoKHBoYmEtPmNmZ19zZ19zZWdfY250ICsgMikgKiBzaXplb2Yoc3RydWN0IHNsaTRfc2dlKSk7CisJCW1heF9idWZfc2l6ZSA9IExQRkNfU0xJNF9NQVhfQlVGX1NJWkU7CisJZm9yIChkbWFfYnVmX3NpemUgPSBMUEZDX1NMSTRfTUlOX0JVRl9TSVpFOworCSAgICAgZG1hX2J1Zl9zaXplIDwgbWF4X2J1Zl9zaXplICYmIGJ1Zl9zaXplID4gZG1hX2J1Zl9zaXplOworCSAgICAgZG1hX2J1Zl9zaXplID0gZG1hX2J1Zl9zaXplIDw8IDEpCisJCTsKKwlpZiAoZG1hX2J1Zl9zaXplID09IG1heF9idWZfc2l6ZSkKKwkJcGhiYS0+Y2ZnX3NnX3NlZ19jbnQgPSAoZG1hX2J1Zl9zaXplIC0KKwkJCXNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpIC0gc2l6ZW9mKHN0cnVjdCBmY3BfcnNwKSAtCisJCQkoMiAqIHNpemVvZihzdHJ1Y3Qgc2xpNF9zZ2UpKSkgLworCQkJCXNpemVvZihzdHJ1Y3Qgc2xpNF9zZ2UpOworCXBoYmEtPmNmZ19zZ19kbWFfYnVmX3NpemUgPSBkbWFfYnVmX3NpemU7CiAKIAkvKiBJbml0aWFsaXplIGJ1ZmZlciBxdWV1ZSBtYW5hZ2VtZW50IGZpZWxkcyAqLwogCWhicV9jb3VudCA9IGxwZmNfc2xpX2hicV9jb3VudCgpOwpAQCAtMzYzOCw2ICszOTE2LDQzIEBACiAJCWdvdG8gb3V0X2ZyZWVfZmNwX2VxX2hkbDsKIAl9CiAKKwltYm94cSA9IChMUEZDX01CT1hRX3QgKikgbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLAorCQkJCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghbWJveHEpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX2ZjcF9lcV9oZGw7CisJfQorCisJLyogR2V0IHRoZSBTdXBwb3J0ZWQgUGFnZXMuIEl0IGlzIGFsd2F5cyBhdmFpbGFibGUuICovCisJbHBmY19zdXBwb3J0ZWRfcGFnZXMobWJveHEpOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94cSwgTUJYX1BPTEwpOworCWlmICh1bmxpa2VseShyYykpIHsKKwkJcmMgPSAtRUlPOworCQltZW1wb29sX2ZyZWUobWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlnb3RvIG91dF9mcmVlX2ZjcF9lcV9oZGw7CisJfQorCisJbXFlID0gJm1ib3hxLT51Lm1xZTsKKwltZW1jcHkoJnBuX3BhZ2VbMF0sICgodWludDhfdCAqKSZtcWUtPnVuLnN1cHBfcGFnZXMud29yZDMpLAorCSAgICAgICBMUEZDX01BWF9TVVBQT1JURURfUEFHRVMpOworCWZvciAoaSA9IDA7IGkgPCBMUEZDX01BWF9TVVBQT1JURURfUEFHRVM7IGkrKykgeworCQlzd2l0Y2ggKHBuX3BhZ2VbaV0pIHsKKwkJY2FzZSBMUEZDX1NMSTRfUEFSQU1FVEVSUzoKKwkJCXBoYmEtPnNsaTRfaGJhLnBjX3NsaTRfcGFyYW1zLnN1cHBvcnRlZCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogUmVhZCB0aGUgcG9ydCdzIFNMSTQgUGFyYW1ldGVycyBjYXBhYmlsaXRpZXMgaWYgc3VwcG9ydGVkLiAqLworCWlmIChwaGJhLT5zbGk0X2hiYS5wY19zbGk0X3BhcmFtcy5zdXBwb3J0ZWQpCisJCXJjID0gbHBmY19wY19zbGk0X3BhcmFtc19nZXQocGhiYSwgbWJveHEpOworCW1lbXBvb2xfZnJlZShtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJaWYgKHJjKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBvdXRfZnJlZV9mY3BfZXFfaGRsOworCX0KIAlyZXR1cm4gcmM7CiAKIG91dF9mcmVlX2ZjcF9lcV9oZGw6CkBAIC0zNzMzLDYgKzQwNDgsOCBAQAogaW50CiBscGZjX2luaXRfYXBpX3RhYmxlX3NldHVwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDhfdCBkZXZfZ3JwKQogeworCXBoYmEtPmxwZmNfaGJhX2luaXRfbGluayA9IGxwZmNfaGJhX2luaXRfbGluazsKKwlwaGJhLT5scGZjX2hiYV9kb3duX2xpbmsgPSBscGZjX2hiYV9kb3duX2xpbms7CiAJc3dpdGNoIChkZXZfZ3JwKSB7CiAJY2FzZSBMUEZDX1BDSV9ERVZfTFA6CiAJCXBoYmEtPmxwZmNfaGJhX2Rvd25fcG9zdCA9IGxwZmNfaGJhX2Rvd25fcG9zdF9zMzsKQEAgLTQyOTEsNyArNDYwOCw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCW11dGV4X2luaXQoJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlzcGluX2xvY2tfaW5pdCgmcGhiYS0+Y3RfZXZfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnBoYmEtPmN0X2V2X3dhaXRlcnMpOwogCiAJcmV0dXJuIHBoYmE7CkBAIC00NjQxLDcgKzQ5NTgsNyBAQAogaW50CiBscGZjX3NsaTRfcG9zdF9zdGF0dXNfY2hlY2soc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewotCXN0cnVjdCBscGZjX3JlZ2lzdGVyIHN0YV9yZWcsIHVlcnJsb19yZWcsIHVlcnJoaV9yZWcsIHNjcmF0Y2hwYWQ7CisJc3RydWN0IGxwZmNfcmVnaXN0ZXIgc3RhX3JlZywgdWVycmxvX3JlZywgdWVycmhpX3JlZzsKIAlpbnQgaSwgcG9ydF9lcnJvciA9IC1FTk9ERVY7CiAKIAlpZiAoIXBoYmEtPnNsaTRfaGJhLlNUQXJlZ2FkZHIpCkBAIC00Njc3LDE0ICs0OTk0LDIxIEBACiAJCQliZl9nZXQobHBmY19oc3Rfc3RhdGVfcG9ydF9zdGF0dXMsICZzdGFfcmVnKSk7CiAKIAkvKiBMb2cgZGV2aWNlIGluZm9ybWF0aW9uICovCi0Jc2NyYXRjaHBhZC53b3JkMCA9ICByZWFkbChwaGJhLT5zbGk0X2hiYS5TQ1JBVENIUEFEcmVnYWRkcik7Ci0JbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCi0JCQkiMjUzNCBEZXZpY2UgSW5mbzogQ2hpcFR5cGU9MHgleCwgU2xpUmV2PTB4JXgsICIKLQkJCSJGZWF0dXJlTDE9MHgleCwgRmVhdHVyZUwyPTB4JXhcbiIsCi0JCQliZl9nZXQobHBmY19zY3JhdGNocGFkX2NoaXB0eXBlLCAmc2NyYXRjaHBhZCksCi0JCQliZl9nZXQobHBmY19zY3JhdGNocGFkX3NsaXJldiwgJnNjcmF0Y2hwYWQpLAotCQkJYmZfZ2V0KGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwxLCAmc2NyYXRjaHBhZCksCi0JCQliZl9nZXQobHBmY19zY3JhdGNocGFkX2ZlYXR1cmVsZXZlbDIsICZzY3JhdGNocGFkKSk7CisJcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYud29yZDAgPSByZWFkbChwaGJhLT5zbGk0X2hiYS5TTElJTlRGcmVnYWRkcik7CisJaWYgKGJmX2dldChscGZjX3NsaV9pbnRmX3ZhbGlkLAorCQkgICAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpID09IExQRkNfU0xJX0lOVEZfVkFMSUQpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCisJCQkJIjI1MzQgRGV2aWNlIEluZm86IENoaXBUeXBlPTB4JXgsIFNsaVJldj0weCV4LCAiCisJCQkJIkZlYXR1cmVMMT0weCV4LCBGZWF0dXJlTDI9MHgleFxuIiwKKwkJCQliZl9nZXQobHBmY19zbGlfaW50Zl9zbGlfZmFtaWx5LAorCQkJCSAgICAgICAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpLAorCQkJCWJmX2dldChscGZjX3NsaV9pbnRmX3NsaXJldiwKKwkJCQkgICAgICAgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKSwKKwkJCQliZl9nZXQobHBmY19zbGlfaW50Zl9mZWF0dXJlbGV2ZWwxLAorCQkJCSAgICAgICAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpLAorCQkJCWJmX2dldChscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDIsCisJCQkJICAgICAgICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZikpOworCX0KIAlwaGJhLT5zbGk0X2hiYS51ZV9tYXNrX2xvID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuVUVNQVNLTE9yZWdhZGRyKTsKIAlwaGJhLT5zbGk0X2hiYS51ZV9tYXNrX2hpID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuVUVNQVNLSElyZWdhZGRyKTsKIAkvKiBXaXRoIHVuY292ZXJhYmxlIGVycm9yLCBsb2cgdGhlIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBlcnJvciAqLwpAQCAtNDcyMyw4ICs1MDQ3LDggQEAKIAkJCQkJTFBGQ19VRV9NQVNLX0xPOwogCXBoYmEtPnNsaTRfaGJhLlVFTUFTS0hJcmVnYWRkciA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCiAJCQkJCUxQRkNfVUVfTUFTS19ISTsKLQlwaGJhLT5zbGk0X2hiYS5TQ1JBVENIUEFEcmVnYWRkciA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCi0JCQkJCUxQRkNfU0NSQVRDSFBBRDsKKwlwaGJhLT5zbGk0X2hiYS5TTElJTlRGcmVnYWRkciA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCisJCQkJCUxQRkNfU0xJX0lOVEY7CiB9CiAKIC8qKgpAQCAtNTk5OSw3ICs2MzIzLDcgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAkJLyogTWFyayB0aGUgRkNGSSBpcyBubyBsb25nZXIgcmVnaXN0ZXJlZCAqLwogCQlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0KLQkJCX4oRkNGX0FWQUlMQUJMRSB8IEZDRl9SRUdJU1RFUkVEIHwgRkNGX0RJU0NPVkVSRUQpOworCQkJfihGQ0ZfQVZBSUxBQkxFIHwgRkNGX1JFR0lTVEVSRUQgfCBGQ0ZfU0NBTl9ET05FKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwogCX0KIH0KQEAgLTYwMzksMTYgKzYzNjMsMjAgQEAKIAogCS8qIEdldCB0aGUgYnVzIGFkZHJlc3Mgb2YgU0xJNCBkZXZpY2UgQmFyMCwgQmFyMSwgYW5kIEJhcjIgYW5kIHRoZQogCSAqIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCBieSBlYWNoIG1hcHBpbmcuIFRoZXkgYXJlIGFjdHVhbGx5Ci0JICogbWFwcGluZyB0byB0aGUgUENJIEJBUiByZWdpb25zIDEsIDIsIGFuZCA0IGJ5IHRoZSBTTEk0IGRldmljZS4KKwkgKiBtYXBwaW5nIHRvIHRoZSBQQ0kgQkFSIHJlZ2lvbnMgMCBvciAxLCAyLCBhbmQgNCBieSB0aGUgU0xJNCBkZXZpY2UuCiAJICovCi0JcGhiYS0+cGNpX2JhcjBfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIExQRkNfU0xJNF9CQVIwKTsKLQliYXIwbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgTFBGQ19TTEk0X0JBUjApOworCWlmIChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCkpIHsKKwkJcGhiYS0+cGNpX2JhcjBfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCQliYXIwbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisJfSBlbHNlIHsKKwkJcGhiYS0+cGNpX2JhcjBfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCQliYXIwbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSk7CisJfQorCXBoYmEtPnBjaV9iYXIxX21hcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKKwliYXIxbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMik7CiAKLQlwaGJhLT5wY2lfYmFyMV9tYXAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgTFBGQ19TTEk0X0JBUjEpOwotCWJhcjFtYXBfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBMUEZDX1NMSTRfQkFSMSk7Ci0KLQlwaGJhLT5wY2lfYmFyMl9tYXAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgTFBGQ19TTEk0X0JBUjIpOwotCWJhcjJtYXBfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBMUEZDX1NMSTRfQkFSMik7CisJcGhiYS0+cGNpX2JhcjJfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDQpOworCWJhcjJtYXBfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCA0KTsKIAogCS8qIE1hcCBTTEk0IFBDSSBDb25maWcgU3BhY2UgUmVnaXN0ZXIgYmFzZSB0byBhIGtlcm5lbCB2aXJ0dWFsIGFkZHIgKi8KIAlwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgPQpAQCAtNjc5Myw2ICs3MTIxLDczIEBACiAJcGhiYS0+cHBvcnQtPndvcmtfcG9ydF9ldmVudHMgPSAwOwogfQogCisgLyoqCisgKiBscGZjX3BjX3NsaTRfcGFyYW1zX2dldCAtIEdldCB0aGUgU0xJNF9QQVJBTVMgcG9ydCBjYXBhYmlsaXRpZXMuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAbWJveHE6IFBvaW50ZXIgdG8gdGhlIG1haWxib3hxIG1lbW9yeSBmb3IgdGhlIG1haWxib3ggY29tbWFuZCByZXNwb25zZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiB0aGUgU0xJNCBjb2RlIHBhdGggdG8gcmVhZCB0aGUgcG9ydCdzCisgKiBzbGk0IGNhcGFiaWxpdGllcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBiZSBjYWxsZWQgZnJvbSBhbnkgY29udGV4dCB0aGF0IGNhbiBibG9jay13YWl0CisgKiBmb3IgdGhlIGNvbXBsZXRpb24uICBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkCisgKiB0eXBpY2FsbHkgZnJvbSBwcm9iZV9vbmUgb3IgZnJvbSB0aGUgb25saW5lIHJvdXRpbmUuCisgKiovCitpbnQKK2xwZmNfcGNfc2xpNF9wYXJhbXNfZ2V0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICptYm94cSkKK3sKKwlpbnQgcmM7CisJc3RydWN0IGxwZmNfbXFlICptcWU7CisJc3RydWN0IGxwZmNfcGNfc2xpNF9wYXJhbXMgKnNsaTRfcGFyYW1zOworCXVpbnQzMl90IG1ib3hfdG1vOworCisJcmMgPSAwOworCW1xZSA9ICZtYm94cS0+dS5tcWU7CisKKwkvKiBSZWFkIHRoZSBwb3J0J3MgU0xJNCBQYXJhbWV0ZXJzIHBvcnQgY2FwYWJpbGl0aWVzICovCisJbHBmY19zbGk0X3BhcmFtcyhtYm94cSk7CisJaWYgKCFwaGJhLT5zbGk0X2hiYS5pbnRyX2VuYWJsZSkKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3hxLCBNQlhfUE9MTCk7CisJZWxzZSB7CisJCW1ib3hfdG1vID0gbHBmY19tYm94X3Rtb192YWwocGhiYSwgTUJYX1BPUlRfQ0FQQUJJTElUSUVTKTsKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQocGhiYSwgbWJveHEsIG1ib3hfdG1vKTsKKwl9CisKKwlpZiAodW5saWtlbHkocmMpKQorCQlyZXR1cm4gMTsKKworCXNsaTRfcGFyYW1zID0gJnBoYmEtPnNsaTRfaGJhLnBjX3NsaTRfcGFyYW1zOworCXNsaTRfcGFyYW1zLT5pZl90eXBlID0gYmZfZ2V0KGlmX3R5cGUsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+c2xpX3JldiA9IGJmX2dldChzbGlfcmV2LCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnNsaV9mYW1pbHkgPSBiZl9nZXQoc2xpX2ZhbWlseSwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5mZWF0dXJlbGV2ZWxfMSA9IGJmX2dldChmZWF0dXJlbGV2ZWxfMSwKKwkJCQkJICAgICAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmZlYXR1cmVsZXZlbF8yID0gYmZfZ2V0KGZlYXR1cmVsZXZlbF8yLAorCQkJCQkgICAgICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+cHJvdG9fdHlwZXMgPSBtcWUtPnVuLnNsaTRfcGFyYW1zLndvcmQzOworCXNsaTRfcGFyYW1zLT5zZ2Vfc3VwcF9sZW4gPSBtcWUtPnVuLnNsaTRfcGFyYW1zLnNnZV9zdXBwX2xlbjsKKwlzbGk0X3BhcmFtcy0+aWZfcGFnZV9zeiA9IGJmX2dldChpZl9wYWdlX3N6LCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnJxX2RiX3dpbmRvdyA9IGJmX2dldChycV9kYl93aW5kb3csICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+bG9vcGJrX3Njb3BlID0gYmZfZ2V0KGxvb3Bia19zY29wZSwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5lcV9wYWdlc19tYXggPSBiZl9nZXQoZXFfcGFnZXMsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+ZXFlX3NpemUgPSBiZl9nZXQoZXFlX3NpemUsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+Y3FfcGFnZXNfbWF4ID0gYmZfZ2V0KGNxX3BhZ2VzLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmNxZV9zaXplID0gYmZfZ2V0KGNxZV9zaXplLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPm1xX3BhZ2VzX21heCA9IGJmX2dldChtcV9wYWdlcywgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5tcWVfc2l6ZSA9IGJmX2dldChtcWVfc2l6ZSwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5tcV9lbGVtX2NudCA9IGJmX2dldChtcV9lbGVtX2NudCwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT53cV9wYWdlc19tYXggPSBiZl9nZXQod3FfcGFnZXMsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+d3FlX3NpemUgPSBiZl9nZXQod3FlX3NpemUsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+cnFfcGFnZXNfbWF4ID0gYmZfZ2V0KHJxX3BhZ2VzLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnJxZV9zaXplID0gYmZfZ2V0KHJxZV9zaXplLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmhkcl9wYWdlc19tYXggPSBiZl9nZXQoaGRyX3BhZ2VzLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmhkcl9zaXplID0gYmZfZ2V0KGhkcl9zaXplLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmhkcl9wcF9hbGlnbiA9IGJmX2dldChoZHJfcHBfYWxpZ24sICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+c2dsX3BhZ2VzX21heCA9IGJmX2dldChzZ2xfcGFnZXMsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+c2dsX3BwX2FsaWduID0gYmZfZ2V0KHNnbF9wcF9hbGlnbiwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXJldHVybiByYzsKK30KKwogLyoqCiAgKiBscGZjX3BjaV9wcm9iZV9vbmVfczMgLSBQQ0kgcHJvYmUgZnVuYyB0byByZWcgU0xJLTMgZGV2aWNlIHRvIFBDSSBzdWJzeXN0ZW0uCiAgKiBAcGRldjogcG9pbnRlciB0byBQQ0kgZGV2aWNlCkBAIC03MTM0LDYgKzc1MjksMTIgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKKwkvKgorCSAqIEFzIHRoZSBuZXcga2VybmVsIGJlaGF2aW9yIG9mIHBjaV9yZXN0b3JlX3N0YXRlKCkgQVBJIGNhbGwgY2xlYXJzCisJICogZGV2aWNlIHNhdmVkX3N0YXRlIGZsYWcsIG5lZWQgdG8gc2F2ZSB0aGUgcmVzdG9yZWQgc3RhdGUgYWdhaW4uCisJICovCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKIAlpZiAocGRldi0+aXNfYnVzbWFzdGVyKQogCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKIApAQCAtNzMxNyw2ICs3NzE4LDEzIEBACiAJfQogCiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwkvKgorCSAqIEFzIHRoZSBuZXcga2VybmVsIGJlaGF2aW9yIG9mIHBjaV9yZXN0b3JlX3N0YXRlKCkgQVBJIGNhbGwgY2xlYXJzCisJICogZGV2aWNlIHNhdmVkX3N0YXRlIGZsYWcsIG5lZWQgdG8gc2F2ZSB0aGUgcmVzdG9yZWQgc3RhdGUgYWdhaW4uCisJICovCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKIAlpZiAocGRldi0+aXNfYnVzbWFzdGVyKQogCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKIApAQCAtNzcyNiw2ICs4MTM0LDEzIEBACiAJLyogUmVzdG9yZSBkZXZpY2Ugc3RhdGUgZnJvbSBQQ0kgY29uZmlnIHNwYWNlICovCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJLyoKKwkgKiBBcyB0aGUgbmV3IGtlcm5lbCBiZWhhdmlvciBvZiBwY2lfcmVzdG9yZV9zdGF0ZSgpIEFQSSBjYWxsIGNsZWFycworCSAqIGRldmljZSBzYXZlZF9zdGF0ZSBmbGFnLCBuZWVkIHRvIHNhdmUgdGhlIHJlc3RvcmVkIHN0YXRlIGFnYWluLgorCSAqLworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCiAJaWYgKHBkZXYtPmlzX2J1c21hc3RlcikKIAkJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKQEAgLTc4NDUsMTEgKzgyNjAsMTEgQEAKIAlpbnQgcmM7CiAJc3RydWN0IGxwZmNfc2xpX2ludGYgaW50ZjsKIAotCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgTFBGQ19TTElSRVZfQ09ORl9XT1JELCAmaW50Zi53b3JkMCkpCisJaWYgKHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBMUEZDX1NMSV9JTlRGLCAmaW50Zi53b3JkMCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKChiZl9nZXQobHBmY19zbGlfaW50Zl92YWxpZCwgJmludGYpID09IExQRkNfU0xJX0lOVEZfVkFMSUQpICYmCi0JCShiZl9nZXQobHBmY19zbGlfaW50Zl9yZXYsICZpbnRmKSA9PSBMUEZDX1NMSVJFVl9DT05GX1NMSTQpKQorCSAgICAoYmZfZ2V0KGxwZmNfc2xpX2ludGZfc2xpcmV2LCAmaW50ZikgPT0gTFBGQ19TTElfSU5URl9SRVZfU0xJNCkpCiAJCXJjID0gbHBmY19wY2lfcHJvYmVfb25lX3M0KHBkZXYsIHBpZCk7CiAJZWxzZQogCQlyYyA9IGxwZmNfcGNpX3Byb2JlX29uZV9zMyhwZGV2LCBwaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYwppbmRleCBhOWFmZDhiLi42YzRkY2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYwpAQCAtMTcwNyw3ICsxNzA3LDggQEAKIAkJCQlhbGxvY19sZW4gLSBzaXplb2YodW5pb24gIGxwZmNfc2xpNF9jZmdfc2hkcik7CiAJfQogCS8qIFRoZSBzdWItaGVhZGVyIGlzIGluIERNQSBtZW1vcnksIHdoaWNoIG5lZWRzIGVuZGlhbiBjb252ZXJzdGlvbiAqLwotCWxwZmNfc2xpX3BjaW1lbV9iY29weShjZmdfc2hkciwgY2ZnX3NoZHIsCisJaWYgKGNmZ19zaGRyKQorCQlscGZjX3NsaV9wY2ltZW1fYmNvcHkoY2ZnX3NoZHIsIGNmZ19zaGRyLAogCQkJICAgICAgc2l6ZW9mKHVuaW9uICBscGZjX3NsaTRfY2ZnX3NoZHIpKTsKIAogCXJldHVybiBhbGxvY19sZW47CkBAIC0xNzQ3LDYgKzE3NDgsNjUgQEAKIH0KIAogLyoqCisgKiBscGZjX3NsaTRfbWJ4X3JlYWRfZmNmX3JlY29yZCAtIEFsbG9jYXRlIGFuZCBjb25zdHJ1Y3QgcmVhZCBmY2YgbWJveCBjbWQKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGZjZl9pbmRleDogaW5kZXggdG8gZmNmIHRhYmxlLgorICoKKyAqIFRoaXMgcm91dGluZSByb3V0aW5lIGFsbG9jYXRlcyBhbmQgY29uc3RydWN0cyBub24tZW1iZWRkZWQgbWFpbGJveCBjb21tYW5kCisgKiBmb3IgcmVhZGluZyBhIEZDRiB0YWJsZSBlbnRyeSByZWZlcmVkIGJ5IEBmY2ZfaW5kZXguCisgKgorICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBtYWlsYm94IGNvbW1hbmQgY29uc3RydWN0ZWQgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlCisgKiBOVUxMLgorICoqLworaW50CitscGZjX3NsaTRfbWJ4X3JlYWRfZmNmX3JlY29yZChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCisJCQkgICAgICBzdHJ1Y3QgbHBmY01ib3hxICptYm94cSwKKwkJCSAgICAgIHVpbnQxNl90IGZjZl9pbmRleCkKK3sKKwl2b2lkICp2aXJ0X2FkZHI7CisJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CisJdWludDhfdCAqYnl0ZXA7CisJc3RydWN0IGxwZmNfbWJ4X3NnZSBzZ2U7CisJdWludDMyX3QgYWxsb2NfbGVuLCByZXFfbGVuOworCXN0cnVjdCBscGZjX21ieF9yZWFkX2ZjZl90YmwgKnJlYWRfZmNmOworCisJaWYgKCFtYm94cSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXFfbGVuID0gc2l6ZW9mKHN0cnVjdCBmY2ZfcmVjb3JkKSArCisJCSAgc2l6ZW9mKHVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkcikgKyAyICogc2l6ZW9mKHVpbnQzMl90KTsKKworCS8qIFNldCB1cCBSRUFEX0ZDRiBTTEk0X0NPTkZJRyBtYWlsYm94LWlvY3RsIGNvbW1hbmQgKi8KKwlhbGxvY19sZW4gPSBscGZjX3NsaTRfY29uZmlnKHBoYmEsIG1ib3hxLCBMUEZDX01CT1hfU1VCU1lTVEVNX0ZDT0UsCisJCQlMUEZDX01CT1hfT1BDT0RFX0ZDT0VfUkVBRF9GQ0ZfVEFCTEUsIHJlcV9sZW4sCisJCQlMUEZDX1NMSTRfTUJYX05FTUJFRCk7CisKKwlpZiAoYWxsb2NfbGVuIDwgcmVxX2xlbikgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19NQk9YLAorCQkJCSIwMjkxIEFsbG9jYXRlZCBETUEgbWVtb3J5IHNpemUgKHgleCkgaXMgIgorCQkJCSJsZXNzIHRoYW4gdGhlIHJlcXVlc3RlZCBETUEgbWVtb3J5ICIKKwkJCQkic2l6ZSAoeCV4KVxuIiwgYWxsb2NfbGVuLCByZXFfbGVuKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogR2V0IHRoZSBmaXJzdCBTR0UgZW50cnkgZnJvbSB0aGUgbm9uLWVtYmVkZGVkIERNQSBtZW1vcnkuIFRoaXMKKwkgKiByb3V0aW5lIG9ubHkgdXNlcyBhIHNpbmdsZSBTR0UuCisJICovCisJbHBmY19zbGk0X21ieF9zZ2VfZ2V0KG1ib3hxLCAwLCAmc2dlKTsKKwlwaHlzX2FkZHIgPSBnZXRQYWRkcihzZ2UucGFfaGksIHNnZS5wYV9sbyk7CisJdmlydF9hZGRyID0gbWJveHEtPnNnZV9hcnJheS0+YWRkclswXTsKKwlyZWFkX2ZjZiA9IChzdHJ1Y3QgbHBmY19tYnhfcmVhZF9mY2ZfdGJsICopdmlydF9hZGRyOworCisJLyogU2V0IHVwIGNvbW1hbmQgZmllbGRzICovCisJYmZfc2V0KGxwZmNfbWJ4X3JlYWRfZmNmX3RibF9pbmR4LCAmcmVhZF9mY2YtPnUucmVxdWVzdCwgZmNmX2luZGV4KTsKKwkvKiBQZXJmb3JtIG5lY2Vzc2FyeSBlbmRpYW4gY29udmVyc2lvbiAqLworCWJ5dGVwID0gdmlydF9hZGRyICsgc2l6ZW9mKHVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkcik7CisJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KGJ5dGVwLCBieXRlcCwgc2l6ZW9mKHVpbnQzMl90KSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBscGZjX3JlcXVlc3RfZmVhdHVyZXM6IENvbmZpZ3VyZSBTTEk0IFJFUVVFU1RfRkVBVFVSRVMgbWFpbGJveAogICogQG1ib3hxOiBwb2ludGVyIHRvIGxwZmMgbWJveCBjb21tYW5kLgogICoKQEAgLTE5NDYsMTMgKzIwMDYsMTQgQEAKIAliZl9zZXQobHBmY19yZWdfZmNmaV9ycV9pZDEsIHJlZ19mY2ZpLCBSRUdfRkNGX0lOVkFMSURfUUlEKTsKIAliZl9zZXQobHBmY19yZWdfZmNmaV9ycV9pZDIsIHJlZ19mY2ZpLCBSRUdfRkNGX0lOVkFMSURfUUlEKTsKIAliZl9zZXQobHBmY19yZWdfZmNmaV9ycV9pZDMsIHJlZ19mY2ZpLCBSRUdfRkNGX0lOVkFMSURfUUlEKTsKLQliZl9zZXQobHBmY19yZWdfZmNmaV9pbmZvX2luZGV4LCByZWdfZmNmaSwgcGhiYS0+ZmNmLmZjZl9pbmR4KTsKKwliZl9zZXQobHBmY19yZWdfZmNmaV9pbmZvX2luZGV4LCByZWdfZmNmaSwKKwkgICAgICAgcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZjZl9pbmR4KTsKIAkvKiByZWdfZmNmIGFkZHIgbW9kZSBpcyBiaXQgd2lzZSBpbnZlcnRlZCB2YWx1ZSBvZiBmY2YgYWRkcl9tb2RlICovCi0JYmZfc2V0KGxwZmNfcmVnX2ZjZmlfbWFtLCByZWdfZmNmaSwKLQkJKH5waGJhLT5mY2YuYWRkcl9tb2RlKSAmIDB4Myk7Ci0JaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9WQUxJRF9WTEFOKSB7CisJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfbWFtLCByZWdfZmNmaSwgKH5waGJhLT5mY2YuYWRkcl9tb2RlKSAmIDB4Myk7CisJaWYgKHBoYmEtPmZjZi5jdXJyZW50X3JlYy52bGFuX2lkICE9IDB4RkZGRikgewogCQliZl9zZXQobHBmY19yZWdfZmNmaV92diwgcmVnX2ZjZmksIDEpOwotCQliZl9zZXQobHBmY19yZWdfZmNmaV92bGFuX3RhZywgcmVnX2ZjZmksIHBoYmEtPmZjZi52bGFuX2lkKTsKKwkJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfdmxhbl90YWcsIHJlZ19mY2ZpLAorCQkgICAgICAgcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLnZsYW5faWQpOwogCX0KIH0KIApAQCAtMTk5MiwzICsyMDUzLDQxIEBACiAJYmZfc2V0KGxwZmNfcmVzdW1lX3JwaV9paSwgcmVzdW1lX3JwaSwgUkVTVU1FX0lOREVYX1JQSSk7CiAJcmVzdW1lX3JwaS0+ZXZlbnRfdGFnID0gbmRscC0+cGhiYS0+ZmNfZXZlbnRUYWc7CiB9CisKKy8qKgorICogbHBmY19zdXBwb3J0ZWRfcGFnZXMgLSBJbml0aWFsaXplIHRoZSBQT1JUX0NBUEFCSUxJVElFUyBzdXBwb3J0ZWQgcGFnZXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kLgorICogQG1ib3g6IHBvaW50ZXIgdG8gbHBmYyBtYm94IGNvbW1hbmQgdG8gaW5pdGlhbGl6ZS4KKyAqCisgKiBUaGUgUE9SVF9DQVBBQklMSVRJRVMgc3VwcG9ydGVkIHBhZ2VzIG1haWxib3ggY29tbWFuZCBpcyBpc3N1ZWQgdG8KKyAqIHJldHJpZXZlIHRoZSBwYXJ0aWN1bGFyIGZlYXR1cmUgcGFnZXMgc3VwcG9ydGVkIGJ5IHRoZSBwb3J0LgorICoqLwordm9pZAorbHBmY19zdXBwb3J0ZWRfcGFnZXMoc3RydWN0IGxwZmNNYm94cSAqbWJveCkKK3sKKwlzdHJ1Y3QgbHBmY19tYnhfc3VwcF9wYWdlcyAqc3VwcF9wYWdlczsKKworCW1lbXNldChtYm94LCAwLCBzaXplb2YoKm1ib3gpKTsKKwlzdXBwX3BhZ2VzID0gJm1ib3gtPnUubXFlLnVuLnN1cHBfcGFnZXM7CisJYmZfc2V0KGxwZmNfbXFlX2NvbW1hbmQsICZtYm94LT51Lm1xZSwgTUJYX1BPUlRfQ0FQQUJJTElUSUVTKTsKKwliZl9zZXQoY3BuLCBzdXBwX3BhZ2VzLCBMUEZDX1NVUFBfUEFHRVMpOworfQorCisvKioKKyAqIGxwZmNfc2xpNF9wYXJhbXMgLSBJbml0aWFsaXplIHRoZSBQT1JUX0NBUEFCSUxJVElFUyBTTEk0IFBhcmFtcworICogICAgICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZC4KKyAqIEBtYm94OiBwb2ludGVyIHRvIGxwZmMgbWJveCBjb21tYW5kIHRvIGluaXRpYWxpemUuCisgKgorICogVGhlIFBPUlRfQ0FQQUJJTElUSUVTIFNMSTQgcGFyYW1ldGVycyBtYWlsYm94IGNvbW1hbmQgaXMgaXNzdWVkIHRvCisgKiByZXRyaWV2ZSB0aGUgcGFydGljdWxhciBTTEk0IGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgcG9ydC4KKyAqKi8KK3ZvaWQKK2xwZmNfc2xpNF9wYXJhbXMoc3RydWN0IGxwZmNNYm94cSAqbWJveCkKK3sKKwlzdHJ1Y3QgbHBmY19tYnhfc2xpNF9wYXJhbXMgKnNsaTRfcGFyYW1zOworCisJbWVtc2V0KG1ib3gsIDAsIHNpemVvZigqbWJveCkpOworCXNsaTRfcGFyYW1zID0gJm1ib3gtPnUubXFlLnVuLnNsaTRfcGFyYW1zOworCWJmX3NldChscGZjX21xZV9jb21tYW5kLCAmbWJveC0+dS5tcWUsIE1CWF9QT1JUX0NBUEFCSUxJVElFUyk7CisJYmZfc2V0KGNwbiwgc2xpNF9wYXJhbXMsIExQRkNfU0xJNF9QQVJBTUVURVJTKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaAppbmRleCBkNjU1ZWQzLi5mM2NmYmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25sLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ubC5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0xNzcsMjMgKzE3NywzIEBACiAJdWludDMyX3QgZGF0YTsKIH07CiAKLS8qIGJzZyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfU0VUX0NUX0VWRU5UCTEKLSNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX0dFVF9DVF9FVkVOVAkyCi0KLXN0cnVjdCBzZXRfY3RfZXZlbnQgewotCXVpbnQzMl90IGNvbW1hbmQ7Ci0JdWludDMyX3QgZXZfcmVxX2lkOwotCXVpbnQzMl90IGV2X3JlZ19pZDsKLX07Ci0KLXN0cnVjdCBnZXRfY3RfZXZlbnQgewotCXVpbnQzMl90IGNvbW1hbmQ7Ci0JdWludDMyX3QgZXZfcmVnX2lkOwotCXVpbnQzMl90IGV2X3JlcV9pZDsKLX07Ci0KLXN0cnVjdCBnZXRfY3RfZXZlbnRfcmVwbHkgewotCXVpbnQzMl90IGltbWVkX2RhdGE7Ci0JdWludDMyX3QgdHlwZTsKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYwppbmRleCAyZWQ2YWYxLi5kMjBhZTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAogaW50CiBscGZjX2NoZWNrX3NwYXJtKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCi0JCSBzdHJ1Y3Qgc2Vydl9wYXJtICogc3AsIHVpbnQzMl90IGNsYXNzKQorCQkgc3RydWN0IHNlcnZfcGFybSAqc3AsIHVpbnQzMl90IGNsYXNzLCBpbnQgZmxvZ2kpCiB7CiAJdm9sYXRpbGUgc3RydWN0IHNlcnZfcGFybSAqaHNwID0gJnZwb3J0LT5mY19zcGFyYW07CiAJdWludDE2X3QgaHNwX3ZhbHVlLCBzc3BfdmFsdWUgPSAwOwpAQCAtNzUsNDkgKzc1LDU2IEBACiAJICogY29ycmVjdGluZyB0aGUgYnl0ZSB2YWx1ZXMuCiAJICovCiAJaWYgKHNwLT5jbHMxLmNsYXNzVmFsaWQpIHsKLQkJaHNwX3ZhbHVlID0gKGhzcC0+Y2xzMS5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8Ci0JCQkJaHNwLT5jbHMxLnJjdkRhdGFTaXplTHNiOwotCQlzc3BfdmFsdWUgPSAoc3AtPmNsczEucmN2RGF0YVNpemVNc2IgPDwgOCkgfAotCQkJCXNwLT5jbHMxLnJjdkRhdGFTaXplTHNiOwotCQlpZiAoIXNzcF92YWx1ZSkKLQkJCWdvdG8gYmFkX3NlcnZpY2VfcGFyYW07Ci0JCWlmIChzc3BfdmFsdWUgPiBoc3BfdmFsdWUpIHsKLQkJCXNwLT5jbHMxLnJjdkRhdGFTaXplTHNiID0gaHNwLT5jbHMxLnJjdkRhdGFTaXplTHNiOwotCQkJc3AtPmNsczEucmN2RGF0YVNpemVNc2IgPSBoc3AtPmNsczEucmN2RGF0YVNpemVNc2I7CisJCWlmICghZmxvZ2kpIHsKKwkJCWhzcF92YWx1ZSA9ICgoaHNwLT5jbHMxLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKKwkJCQkgICAgIGhzcC0+Y2xzMS5yY3ZEYXRhU2l6ZUxzYik7CisJCQlzc3BfdmFsdWUgPSAoKHNwLT5jbHMxLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKKwkJCQkgICAgIHNwLT5jbHMxLnJjdkRhdGFTaXplTHNiKTsKKwkJCWlmICghc3NwX3ZhbHVlKQorCQkJCWdvdG8gYmFkX3NlcnZpY2VfcGFyYW07CisJCQlpZiAoc3NwX3ZhbHVlID4gaHNwX3ZhbHVlKSB7CisJCQkJc3AtPmNsczEucmN2RGF0YVNpemVMc2IgPQorCQkJCQloc3AtPmNsczEucmN2RGF0YVNpemVMc2I7CisJCQkJc3AtPmNsczEucmN2RGF0YVNpemVNc2IgPQorCQkJCQloc3AtPmNsczEucmN2RGF0YVNpemVNc2I7CisJCQl9CiAJCX0KLQl9IGVsc2UgaWYgKGNsYXNzID09IENMQVNTMSkgeworCX0gZWxzZSBpZiAoY2xhc3MgPT0gQ0xBU1MxKQogCQlnb3RvIGJhZF9zZXJ2aWNlX3BhcmFtOwotCX0KLQogCWlmIChzcC0+Y2xzMi5jbGFzc1ZhbGlkKSB7Ci0JCWhzcF92YWx1ZSA9IChoc3AtPmNsczIucmN2RGF0YVNpemVNc2IgPDwgOCkgfAotCQkJCWhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYjsKLQkJc3NwX3ZhbHVlID0gKHNwLT5jbHMyLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKLQkJCQlzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYjsKLQkJaWYgKCFzc3BfdmFsdWUpCi0JCQlnb3RvIGJhZF9zZXJ2aWNlX3BhcmFtOwotCQlpZiAoc3NwX3ZhbHVlID4gaHNwX3ZhbHVlKSB7Ci0JCQlzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYiA9IGhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYjsKLQkJCXNwLT5jbHMyLnJjdkRhdGFTaXplTXNiID0gaHNwLT5jbHMyLnJjdkRhdGFTaXplTXNiOworCQlpZiAoIWZsb2dpKSB7CisJCQloc3BfdmFsdWUgPSAoKGhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8CisJCQkJICAgICBoc3AtPmNsczIucmN2RGF0YVNpemVMc2IpOworCQkJc3NwX3ZhbHVlID0gKChzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8CisJCQkJICAgICBzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYik7CisJCQlpZiAoIXNzcF92YWx1ZSkKKwkJCQlnb3RvIGJhZF9zZXJ2aWNlX3BhcmFtOworCQkJaWYgKHNzcF92YWx1ZSA+IGhzcF92YWx1ZSkgeworCQkJCXNwLT5jbHMyLnJjdkRhdGFTaXplTHNiID0KKwkJCQkJaHNwLT5jbHMyLnJjdkRhdGFTaXplTHNiOworCQkJCXNwLT5jbHMyLnJjdkRhdGFTaXplTXNiID0KKwkJCQkJaHNwLT5jbHMyLnJjdkRhdGFTaXplTXNiOworCQkJfQogCQl9Ci0JfSBlbHNlIGlmIChjbGFzcyA9PSBDTEFTUzIpIHsKKwl9IGVsc2UgaWYgKGNsYXNzID09IENMQVNTMikKIAkJZ290byBiYWRfc2VydmljZV9wYXJhbTsKLQl9Ci0KIAlpZiAoc3AtPmNsczMuY2xhc3NWYWxpZCkgewotCQloc3BfdmFsdWUgPSAoaHNwLT5jbHMzLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKLQkJCQloc3AtPmNsczMucmN2RGF0YVNpemVMc2I7Ci0JCXNzcF92YWx1ZSA9IChzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8Ci0JCQkJc3AtPmNsczMucmN2RGF0YVNpemVMc2I7Ci0JCWlmICghc3NwX3ZhbHVlKQotCQkJZ290byBiYWRfc2VydmljZV9wYXJhbTsKLQkJaWYgKHNzcF92YWx1ZSA+IGhzcF92YWx1ZSkgewotCQkJc3AtPmNsczMucmN2RGF0YVNpemVMc2IgPSBoc3AtPmNsczMucmN2RGF0YVNpemVMc2I7Ci0JCQlzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYiA9IGhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYjsKKwkJaWYgKCFmbG9naSkgeworCQkJaHNwX3ZhbHVlID0gKChoc3AtPmNsczMucmN2RGF0YVNpemVNc2IgPDwgOCkgfAorCQkJCSAgICAgaHNwLT5jbHMzLnJjdkRhdGFTaXplTHNiKTsKKwkJCXNzcF92YWx1ZSA9ICgoc3AtPmNsczMucmN2RGF0YVNpemVNc2IgPDwgOCkgfAorCQkJCSAgICAgc3AtPmNsczMucmN2RGF0YVNpemVMc2IpOworCQkJaWYgKCFzc3BfdmFsdWUpCisJCQkJZ290byBiYWRfc2VydmljZV9wYXJhbTsKKwkJCWlmIChzc3BfdmFsdWUgPiBoc3BfdmFsdWUpIHsKKwkJCQlzcC0+Y2xzMy5yY3ZEYXRhU2l6ZUxzYiA9CisJCQkJCWhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZUxzYjsKKwkJCQlzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYiA9CisJCQkJCWhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYjsKKwkJCX0KIAkJfQotCX0gZWxzZSBpZiAoY2xhc3MgPT0gQ0xBU1MzKSB7CisJfSBlbHNlIGlmIChjbGFzcyA9PSBDTEFTUzMpCiAJCWdvdG8gYmFkX3NlcnZpY2VfcGFyYW07Ci0JfQogCiAJLyoKIAkgKiBQcmVzZXJ2ZSB0aGUgdXBwZXIgZm91ciBiaXRzIG9mIHRoZSBNU0IgZnJvbSB0aGUgUExPR0kgcmVzcG9uc2UuCkBAIC0yNDcsNyArMjU0LDcgQEAKIAlpbnQgcmM7CiAKIAltZW1zZXQoJnN0YXQsIDAsIHNpemVvZiAoc3RydWN0IGxzX3JqdCkpOwotCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA8PSBMUEZDX0ZMT0dJKSB7CisJaWYgKHZwb3J0LT5wb3J0X3N0YXRlIDw9IExQRkNfRkRJU0MpIHsKIAkJLyogQmVmb3JlIHJlc3BvbmRpbmcgdG8gUExPR0ksIGNoZWNrIGZvciBwdDJwdCBtb2RlLgogCQkgKiBJZiB3ZSBhcmUgcHQycHQsIHdpdGggYW4gb3V0c3RhbmRpbmcgRkxPR0ksIGFib3J0CiAJCSAqIHRoZSBGTE9HSSBhbmQgcmVzZW5kIGl0IGZpcnN0LgpAQCAtMjk1LDcgKzMwMiw3IEBACiAJCQlOVUxMKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICgobHBmY19jaGVja19zcGFybSh2cG9ydCwgbmRscCwgc3AsIENMQVNTMykgPT0gMCkpIHsKKwlpZiAoKGxwZmNfY2hlY2tfc3Bhcm0odnBvcnQsIG5kbHAsIHNwLCBDTEFTUzMsIDApID09IDApKSB7CiAJCS8qIFJlamVjdCB0aGlzIHJlcXVlc3QgYmVjYXVzZSBpbnZhbGlkIHBhcmFtZXRlcnMgKi8KIAkJc3RhdC51bi5iLmxzUmp0UnNuQ29kZSA9IExTUkpUX1VOQUJMRV9UUEM7CiAJCXN0YXQudW4uYi5sc1JqdFJzbkNvZGVFeHAgPSBMU0VYUF9TUEFSTV9PUFRJT05TOwpAQCAtODMxLDcgKzgzOCw3IEBACiAJCQkJICIwMTQyIFBMT0dJIFJTUDogSW52YWxpZCBXV04uXG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCWlmICghbHBmY19jaGVja19zcGFybSh2cG9ydCwgbmRscCwgc3AsIENMQVNTMykpCisJaWYgKCFscGZjX2NoZWNrX3NwYXJtKHZwb3J0LCBuZGxwLCBzcCwgQ0xBU1MzLCAwKSkKIAkJZ290byBvdXQ7CiAJLyogUExPR0kgY2hrcGFybSBPSyAqLwogCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fSU5GTywgTE9HX0VMUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKaW5kZXggYTI0NjQxMC4uN2YyMWI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKQEAgLTYyNiw2ICs2MjYsNyBAQAogCQkmcGhiYS0+c2xpNF9oYmEubHBmY19hYnRzX3Njc2lfYnVmX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHBzYi0+Y3VyX2lvY2JxLnNsaTRfeHJpdGFnID09IHhyaSkgewogCQkJbGlzdF9kZWwoJnBzYi0+bGlzdCk7CisJCQlwc2ItPmV4Y2hfYnVzeSA9IDA7CiAJCQlwc2ItPnN0YXR1cyA9IElPU1RBVF9TVUNDRVNTOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKIAkJCQkmcGhiYS0+c2xpNF9oYmEuYWJ0c19zY3NpX2J1Zl9saXN0X2xvY2ssCkBAIC02ODgsMTEgKzY4OSwxMiBAQAogCQkJCQkgbGlzdCk7CiAJCQlpZiAoc3RhdHVzKSB7CiAJCQkJLyogUHV0IHRoaXMgYmFjayBvbiB0aGUgYWJvcnQgc2NzaSBsaXN0ICovCi0JCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOwotCQkJCXBzYi0+cmVzdWx0ID0gSU9FUlJfQUJPUlRfUkVRVUVTVEVEOworCQkJCXBzYi0+ZXhjaF9idXN5ID0gMTsKIAkJCQlyYysrOwotCQkJfSBlbHNlCisJCQl9IGVsc2UgeworCQkJCXBzYi0+ZXhjaF9idXN5ID0gMDsKIAkJCQlwc2ItPnN0YXR1cyA9IElPU1RBVF9TVUNDRVNTOworCQkJfQogCQkJLyogUHV0IGl0IGJhY2sgaW50byB0aGUgU0NTSSBidWZmZXIgbGlzdCAqLwogCQkJbHBmY19yZWxlYXNlX3Njc2lfYnVmX3M0KHBoYmEsIHBzYik7CiAJCX0KQEAgLTc5NiwxOSArNzk4LDE3IEBACiAJCSAqLwogCQlzZ2wtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihwdXRQYWRkckhpZ2gocGRtYV9waHlzX2ZjcF9jbWQpKTsKIAkJc2dsLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIocHV0UGFkZHJMb3cocGRtYV9waHlzX2ZjcF9jbWQpKTsKLQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGVuLCBzZ2wsIHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpKTsKIAkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGFzdCwgc2dsLCAwKTsKIAkJc2dsLT53b3JkMiA9IGNwdV90b19sZTMyKHNnbC0+d29yZDIpOwotCQlzZ2wtPndvcmQzID0gY3B1X3RvX2xlMzIoc2dsLT53b3JkMyk7CisJCXNnbC0+c2dlX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpKTsKIAkJc2dsKys7CiAKIAkJLyogU2V0dXAgdGhlIHBoeXNpY2FsIHJlZ2lvbiBmb3IgdGhlIEZDUCBSU1AgKi8KIAkJc2dsLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIocHV0UGFkZHJIaWdoKHBkbWFfcGh5c19mY3BfcnNwKSk7CiAJCXNnbC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKHB1dFBhZGRyTG93KHBkbWFfcGh5c19mY3BfcnNwKSk7Ci0JCWJmX3NldChscGZjX3NsaTRfc2dlX2xlbiwgc2dsLCBzaXplb2Yoc3RydWN0IGZjcF9yc3ApKTsKIAkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGFzdCwgc2dsLCAxKTsKIAkJc2dsLT53b3JkMiA9IGNwdV90b19sZTMyKHNnbC0+d29yZDIpOwotCQlzZ2wtPndvcmQzID0gY3B1X3RvX2xlMzIoc2dsLT53b3JkMyk7CisJCXNnbC0+c2dlX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgZmNwX3JzcCkpOwogCiAJCS8qCiAJCSAqIFNpbmNlIHRoZSBJT0NCIGZvciB0aGUgRkNQIEkvTyBpcyBidWlsdCBpbnRvIHRoaXMKQEAgLTgzOSwxMSArODM5LDEyIEBACiAJCQkJCQlwc2ItPmN1cl9pb2NicS5zbGk0X3hyaXRhZyk7CiAJCQlpZiAoc3RhdHVzKSB7CiAJCQkJLyogUHV0IHRoaXMgYmFjayBvbiB0aGUgYWJvcnQgc2NzaSBsaXN0ICovCi0JCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOwotCQkJCXBzYi0+cmVzdWx0ID0gSU9FUlJfQUJPUlRfUkVRVUVTVEVEOworCQkJCXBzYi0+ZXhjaF9idXN5ID0gMTsKIAkJCQlyYysrOwotCQkJfSBlbHNlCisJCQl9IGVsc2UgeworCQkJCXBzYi0+ZXhjaF9idXN5ID0gMDsKIAkJCQlwc2ItPnN0YXR1cyA9IElPU1RBVF9TVUNDRVNTOworCQkJfQogCQkJLyogUHV0IGl0IGJhY2sgaW50byB0aGUgU0NTSSBidWZmZXIgbGlzdCAqLwogCQkJbHBmY19yZWxlYXNlX3Njc2lfYnVmX3M0KHBoYmEsIHBzYik7CiAJCQlicmVhazsKQEAgLTg1NywxMSArODU4LDEyIEBACiAJCQkJIGxpc3QpOwogCQkJaWYgKHN0YXR1cykgewogCQkJCS8qIFB1dCB0aGlzIGJhY2sgb24gdGhlIGFib3J0IHNjc2kgbGlzdCAqLwotCQkJCXBzYi0+c3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKLQkJCQlwc2ItPnJlc3VsdCA9IElPRVJSX0FCT1JUX1JFUVVFU1RFRDsKKwkJCQlwc2ItPmV4Y2hfYnVzeSA9IDE7CiAJCQkJcmMrKzsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIHsKKwkJCQlwc2ItPmV4Y2hfYnVzeSA9IDA7CiAJCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfU1VDQ0VTUzsKKwkJCX0KIAkJCS8qIFB1dCBpdCBiYWNrIGludG8gdGhlIFNDU0kgYnVmZmVyIGxpc3QgKi8KIAkJCWxwZmNfcmVsZWFzZV9zY3NpX2J1Zl9zNChwaGJhLCBwc2IpOwogCQl9CkBAIC05NTEsOCArOTUzLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGlmbGFnID0gMDsKIAotCWlmIChwc2ItPnN0YXR1cyA9PSBJT1NUQVRfTE9DQUxfUkVKRUNUCi0JCSYmIHBzYi0+cmVzdWx0ID09IElPRVJSX0FCT1JUX1JFUVVFU1RFRCkgeworCWlmIChwc2ItPmV4Y2hfYnVzeSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+c2xpNF9oYmEuYWJ0c19zY3NpX2J1Zl9saXN0X2xvY2ssCiAJCQkJCWlmbGFnKTsKIAkJcHNiLT5wQ21kID0gTlVMTDsKQEAgLTE4NjksNyArMTg3MCw2IEBACiAJCXNjc2lfZm9yX2VhY2hfc2coc2NzaV9jbW5kLCBzZ2VsLCBuc2VnLCBudW1fYmRlKSB7CiAJCQlwaHlzYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnZWwpOwogCQkJZG1hX2xlbiA9IHNnX2RtYV9sZW4oc2dlbCk7Ci0JCQliZl9zZXQobHBmY19zbGk0X3NnZV9sZW4sIHNnbCwgc2dfZG1hX2xlbihzZ2VsKSk7CiAJCQlzZ2wtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihwdXRQYWRkckxvdyhwaHlzYWRkcikpOwogCQkJc2dsLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIocHV0UGFkZHJIaWdoKHBoeXNhZGRyKSk7CiAJCQlpZiAoKG51bV9iZGUgKyAxKSA9PSBuc2VnKQpAQCAtMTg3OCw3ICsxODc4LDcgQEAKIAkJCQliZl9zZXQobHBmY19zbGk0X3NnZV9sYXN0LCBzZ2wsIDApOwogCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2Vfb2Zmc2V0LCBzZ2wsIGRtYV9vZmZzZXQpOwogCQkJc2dsLT53b3JkMiA9IGNwdV90b19sZTMyKHNnbC0+d29yZDIpOwotCQkJc2dsLT53b3JkMyA9IGNwdV90b19sZTMyKHNnbC0+d29yZDMpOworCQkJc2dsLT5zZ2VfbGVuID0gY3B1X3RvX2xlMzIoZG1hX2xlbik7CiAJCQlkbWFfb2Zmc2V0ICs9IGRtYV9sZW47CiAJCQlzZ2wrKzsKIAkJfQpAQCAtMjIyMSw2ICsyMjIxLDkgQEAKIAogCWxwZmNfY21kLT5yZXN1bHQgPSBwSW9jYk91dC0+aW9jYi51bi51bHBXb3JkWzRdOwogCWxwZmNfY21kLT5zdGF0dXMgPSBwSW9jYk91dC0+aW9jYi51bHBTdGF0dXM7CisJLyogcGljayB1cCBTTEk0IGV4aGFuZ2UgYnVzeSBzdGF0dXMgZnJvbSBIQkEgKi8KKwlscGZjX2NtZC0+ZXhjaF9idXN5ID0gcElvY2JPdXQtPmlvY2JfZmxhZyAmIExQRkNfRVhDSEFOR0VfQlVTWTsKKwogCWlmIChwbm9kZSAmJiBOTFBfQ0hLX05PREVfQUNUKHBub2RlKSkKIAkJYXRvbWljX2RlYygmcG5vZGUtPmNtZF9wZW5kaW5nKTsKIApAQCAtMjYzNyw2ICsyNjQwLDcgQEAKIAl9CiAJcGhiYS0+bHBmY19nZXRfc2NzaV9idWYgPSBscGZjX2dldF9zY3NpX2J1ZjsKIAlwaGJhLT5scGZjX3JhbXBkb3duX3F1ZXVlX2RlcHRoID0gbHBmY19yYW1wZG93bl9xdWV1ZV9kZXB0aDsKKwlwaGJhLT5scGZjX3Njc2lfY21kX2lvY2JfY21wbCA9IGxwZmNfc2NzaV9jbWRfaW9jYl9jbXBsOwogCXJldHVybiAwOwogfQogCkBAIC0yNjk1LDYgKzI2OTksMTMgQEAKIAkJCQkgIiBwb3J0ICVzIiwKIAkJCQkgcGhiYS0+UG9ydCk7CiAJCX0KKwkJbGVuID0gc3RybGVuKGxwZmNpbmZvYnVmKTsKKwkJaWYgKHBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUubG9naWNhbF9zcGVlZCkgeworCQkJc25wcmludGYobHBmY2luZm9idWYgKyBsZW4sCisJCQkJIDM4NC1sZW4sCisJCQkJICIgTG9naWNhbCBMaW5rIFNwZWVkOiAlZCBNYnBzIiwKKwkJCQkgcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5sb2dpY2FsX3NwZWVkICogMTApOworCQl9CiAJfQogCXJldHVybiBscGZjaW5mb2J1ZjsKIH0KQEAgLTI5OTAsNiArMzAwMSw3IEBACiAKIAkvKiBBQlRTIFdRRSBtdXN0IGdvIHRvIHRoZSBzYW1lIFdRIGFzIHRoZSBXUUUgdG8gYmUgYWJvcnRlZCAqLwogCWFidHNpb2NiLT5mY3Bfd3FpZHggPSBpb2NiLT5mY3Bfd3FpZHg7CisJYWJ0c2lvY2ItPmlvY2JfZmxhZyB8PSBMUEZDX1VTRV9GQ1BXUUlEWDsKIAogCWlmIChscGZjX2lzX2xpbmtfdXAocGhiYSkpCiAJCWljbWQtPnVscENvbW1hbmQgPSBDTURfQUJPUlRfWFJJX0NOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuaAppbmRleCA2NWRmYzhiLi41OTMyMjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuaApAQCAtMTE4LDYgKzExOCw3IEBACiAKIAl1aW50MzJfdCB0aW1lb3V0OwogCisJdWludDE2X3QgZXhjaF9idXN5OyAgICAgLyogU0xJNCBoYmEgcmVwb3J0ZWQgWEIgb24gY29tcGxldGUgV0NRRSAqLwogCXVpbnQxNl90IHN0YXR1czsJLyogRnJvbSBJT0NCIFdvcmQgNy0gdWxwU3RhdHVzICovCiAJdWludDMyX3QgcmVzdWx0OwkvKiBGcm9tIElPQ0IgV29yZCA0LiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwppbmRleCA1ODk1NDliLi4zNWUzYjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKQEAgLTU4MCwxMCArNTgwLDcgQEAKIAllbHNlCiAJCXNnbHEgPSBfX2xwZmNfY2xlYXJfYWN0aXZlX3NnbHEocGhiYSwgaW9jYnEtPnNsaTRfeHJpdGFnKTsKIAlpZiAoc2dscSkgIHsKLQkJaWYgKGlvY2JxLT5pb2NiX2ZsYWcgJiBMUEZDX0RSSVZFUl9BQk9SVEVECi0JCQkmJiAoKGlvY2JxLT5pb2NiLnVscFN0YXR1cyA9PSBJT1NUQVRfTE9DQUxfUkVKRUNUKQotCQkJJiYgKGlvY2JxLT5pb2NiLnVuLnVscFdvcmRbNF0KLQkJCQk9PSBJT0VSUl9BQk9SVF9SRVFVRVNURUQpKSkgeworCQlpZiAoaW9jYnEtPmlvY2JfZmxhZyAmIExQRkNfRVhDSEFOR0VfQlVTWSkgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPnNsaTRfaGJhLmFidHNfc2dsX2xpc3RfbG9jaywKIAkJCQkJaWZsYWcpOwogCQkJbGlzdF9hZGQoJnNnbHEtPmxpc3QsCkBAIC03NjQsMTAgKzc2MSw2IEBACiAJY2FzZSBEU1NDTURfSVdSSVRFNjRfQ1g6CiAJY2FzZSBEU1NDTURfSVJFQUQ2NF9DUjoKIAljYXNlIERTU0NNRF9JUkVBRDY0X0NYOgotCWNhc2UgRFNTQ01EX0lOVkFMSURBVEVfREVLOgotCWNhc2UgRFNTQ01EX1NFVF9LRUs6Ci0JY2FzZSBEU1NDTURfR0VUX0tFS19JRDoKLQljYXNlIERTU0NNRF9HRU5fWEZFUjoKIAkJdHlwZSA9IExQRkNfU09MX0lPQ0I7CiAJCWJyZWFrOwogCWNhc2UgQ01EX0FCT1JUX1hSSV9DTjoKQEAgLTE3MTcsNiArMTcxMCw3IEBACiAJc3RydWN0IGxwZmNfZG1hYnVmICptcDsKIAl1aW50MTZfdCBycGksIHZwaTsKIAlpbnQgcmM7CisJc3RydWN0IGxwZmNfdnBvcnQgICp2cG9ydCA9IHBtYi0+dnBvcnQ7CiAKIAltcCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgKHBtYi0+Y29udGV4dDEpOwogCkBAIC0xNzQ1LDYgKzE3MzksMTggQEAKIAkJCXJldHVybjsKIAl9CiAKKwkvKiBVbnJlZyBWUEksIGlmIHRoZSBSRUdfVlBJIHN1Y2NlZWQgYWZ0ZXIgVkxpbmsgZmFpbHVyZSAqLworCWlmICgocG1iLT51Lm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19WUEkpICYmCisJCSEocGhiYS0+cHBvcnQtPmxvYWRfZmxhZyAmIEZDX1VOTE9BRElORykgJiYKKwkJIXBtYi0+dS5tYi5tYnhTdGF0dXMpIHsKKwkJbHBmY191bnJlZ192cGkocGhiYSwgcG1iLT51Lm1iLnVuLnZhclJlZ1ZwaS52cGksIHBtYik7CisJCXBtYi0+dnBvcnQgPSB2cG9ydDsKKwkJcG1iLT5tYm94X2NtcGwgPSBscGZjX3NsaV9kZWZfbWJveF9jbXBsOworCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfTk9XQUlUKTsKKwkJaWYgKHJjICE9IE1CWF9OT1RfRklOSVNIRUQpCisJCQlyZXR1cm47CisJfQorCiAJaWYgKGJmX2dldChscGZjX21xZV9jb21tYW5kLCAmcG1iLT51Lm1xZSkgPT0gTUJYX1NMSTRfQ09ORklHKQogCQlscGZjX3NsaTRfbWJveF9jbWRfZnJlZShwaGJhLCBwbWIpOwogCWVsc2UKQEAgLTIyMjgsOSArMjIzNCwxNSBAQAogCQkJICogQWxsIG90aGVyIGFyZSBwYXNzZWQgdG8gdGhlIGNvbXBsZXRpb24gY2FsbGJhY2suCiAJCQkgKi8KIAkJCWlmIChwcmluZy0+cmluZ25vID09IExQRkNfRUxTX1JJTkcpIHsKLQkJCQlpZiAoY21kaW9jYnAtPmlvY2JfZmxhZyAmIExQRkNfRFJJVkVSX0FCT1JURUQpIHsKKwkJCQlpZiAoKHBoYmEtPnNsaV9yZXYgPCBMUEZDX1NMSV9SRVY0KSAmJgorCQkJCSAgICAoY21kaW9jYnAtPmlvY2JfZmxhZyAmCisJCQkJCQkJTFBGQ19EUklWRVJfQUJPUlRFRCkpIHsKKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssCisJCQkJCQkJICBpZmxhZyk7CiAJCQkJCWNtZGlvY2JwLT5pb2NiX2ZsYWcgJj0KIAkJCQkJCX5MUEZDX0RSSVZFUl9BQk9SVEVEOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgICAgICBpZmxhZyk7CiAJCQkJCXNhdmVxLT5pb2NiLnVscFN0YXR1cyA9CiAJCQkJCQlJT1NUQVRfTE9DQUxfUkVKRUNUOwogCQkJCQlzYXZlcS0+aW9jYi51bi51bHBXb3JkWzRdID0KQEAgLTIyNDAsNyArMjI1Miw0NyBAQAogCQkJCQkgKiBvZiBETUFpbmcgcGF5bG9hZCwgc28gZG9uJ3QgZnJlZSBkYXRhCiAJCQkJCSAqIGJ1ZmZlciB0aWxsIGFmdGVyIGEgaGJlYXQuCiAJCQkJCSAqLworCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywKKwkJCQkJCQkgIGlmbGFnKTsKIAkJCQkJc2F2ZXEtPmlvY2JfZmxhZyB8PSBMUEZDX0RFTEFZX01FTV9GUkVFOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgICAgICBpZmxhZyk7CisJCQkJfQorCQkJCWlmICgocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSAmJgorCQkJCSAgICAoc2F2ZXEtPmlvY2JfZmxhZyAmIExQRkNfRVhDSEFOR0VfQlVTWSkpIHsKKwkJCQkJLyogU2V0IGNtZGlvY2IgZmxhZyBmb3IgdGhlIGV4Y2hhbmdlCisJCQkJCSAqIGJ1c3kgc28gc2dsICh4cmkpIHdpbGwgbm90IGJlCisJCQkJCSAqIHJlbGVhc2VkIHVudGlsIHRoZSBhYm9ydCB4cmkgaXMKKwkJCQkJICogcmVjZWl2ZWQgZnJvbSBoYmEsIGNsZWFyIHRoZQorCQkJCQkgKiBMUEZDX0RSSVZFUl9BQk9SVEVEIGJpdCBpbiBjYXNlCisJCQkJCSAqIGl0IHdhcyBkcml2ZXIgaW5pdGlhdGVkIGFib3J0LgorCQkJCQkgKi8KKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssCisJCQkJCQkJICBpZmxhZyk7CisJCQkJCWNtZGlvY2JwLT5pb2NiX2ZsYWcgJj0KKwkJCQkJCX5MUEZDX0RSSVZFUl9BQk9SVEVEOworCQkJCQljbWRpb2NicC0+aW9jYl9mbGFnIHw9CisJCQkJCQlMUEZDX0VYQ0hBTkdFX0JVU1k7CisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssCisJCQkJCQkJICAgICAgIGlmbGFnKTsKKwkJCQkJY21kaW9jYnAtPmlvY2IudWxwU3RhdHVzID0KKwkJCQkJCUlPU1RBVF9MT0NBTF9SRUpFQ1Q7CisJCQkJCWNtZGlvY2JwLT5pb2NiLnVuLnVscFdvcmRbNF0gPQorCQkJCQkJSU9FUlJfQUJPUlRfUkVRVUVTVEVEOworCQkJCQkvKgorCQkJCQkgKiBGb3IgU0xJNCwgaXJzaW9jYiBjb250YWlucyBOT19YUkkKKwkJCQkJICogaW4gc2xpX3hyaXRhZywgaXQgc2hhbGwgbm90IGFmZmVjdAorCQkJCQkgKiByZWxlYXNpbmcgc2dsICh4cmkpIHByb2Nlc3MuCisJCQkJCSAqLworCQkJCQlzYXZlcS0+aW9jYi51bHBTdGF0dXMgPQorCQkJCQkJSU9TVEFUX0xPQ0FMX1JFSkVDVDsKKwkJCQkJc2F2ZXEtPmlvY2IudW4udWxwV29yZFs0XSA9CisJCQkJCQlJT0VSUl9TTElfQUJPUlRFRDsKKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssCisJCQkJCQkJICBpZmxhZyk7CisJCQkJCXNhdmVxLT5pb2NiX2ZsYWcgfD0gTFBGQ19ERUxBWV9NRU1fRlJFRTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywKKwkJCQkJCQkgICAgICAgaWZsYWcpOwogCQkJCX0KIAkJCX0KIAkJCShjbWRpb2NicC0+aW9jYl9jbXBsKSAocGhiYSwgY21kaW9jYnAsIHNhdmVxKTsKQEAgLTU2ODcsMTkgKzU3MzksMTkgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgbnVtQmRlczsgaSsrKSB7CiAJCQkvKiBTaG91bGQgYWxyZWFkeSBiZSBieXRlIHN3YXBwZWQuICovCi0JCQlzZ2wtPmFkZHJfaGkgPSAgYnBsLT5hZGRySGlnaDsKLQkJCXNnbC0+YWRkcl9sbyA9ICBicGwtPmFkZHJMb3c7Ci0JCQkvKiBzd2FwIHRoZSBzaXplIGZpZWxkIGJhY2sgdG8gdGhlIGNwdSBzbyB3ZQotCQkJICogY2FuIGFzc2lnbiBpdCB0byB0aGUgc2dsLgotCQkJICovCi0JCQliZGUudHVzLncgID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7Ci0JCQliZl9zZXQobHBmY19zbGk0X3NnZV9sZW4sIHNnbCwgYmRlLnR1cy5mLmJkZVNpemUpOworCQkJc2dsLT5hZGRyX2hpID0gYnBsLT5hZGRySGlnaDsKKwkJCXNnbC0+YWRkcl9sbyA9IGJwbC0+YWRkckxvdzsKKwogCQkJaWYgKChpKzEpID09IG51bUJkZXMpCiAJCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGFzdCwgc2dsLCAxKTsKIAkJCWVsc2UKIAkJCQliZl9zZXQobHBmY19zbGk0X3NnZV9sYXN0LCBzZ2wsIDApOwogCQkJc2dsLT53b3JkMiA9IGNwdV90b19sZTMyKHNnbC0+d29yZDIpOwotCQkJc2dsLT53b3JkMyA9IGNwdV90b19sZTMyKHNnbC0+d29yZDMpOworCQkJLyogc3dhcCB0aGUgc2l6ZSBmaWVsZCBiYWNrIHRvIHRoZSBjcHUgc28gd2UKKwkJCSAqIGNhbiBhc3NpZ24gaXQgdG8gdGhlIHNnbC4KKwkJCSAqLworCQkJYmRlLnR1cy53ID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7CisJCQlzZ2wtPnNnZV9sZW4gPSBjcHVfdG9fbGUzMihiZGUudHVzLmYuYmRlU2l6ZSk7CiAJCQlicGwrKzsKIAkJCXNnbCsrOwogCQl9CkBAIC01NzEyLDExICs1NzY0LDEwIEBACiAJCQkJY3B1X3RvX2xlMzIoaWNtZC0+dW4uZ2VucmVxNjQuYmRsLmFkZHJIaWdoKTsKIAkJCXNnbC0+YWRkcl9sbyA9CiAJCQkJY3B1X3RvX2xlMzIoaWNtZC0+dW4uZ2VucmVxNjQuYmRsLmFkZHJMb3cpOwotCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGVuLCBzZ2wsCi0JCQkJaWNtZC0+dW4uZ2VucmVxNjQuYmRsLmJkZVNpemUpOwogCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGFzdCwgc2dsLCAxKTsKIAkJCXNnbC0+d29yZDIgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQyKTsKLQkJCXNnbC0+d29yZDMgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQzKTsKKwkJCXNnbC0+c2dlX2xlbiA9CisJCQkJY3B1X3RvX2xlMzIoaWNtZC0+dW4uZ2VucmVxNjQuYmRsLmJkZVNpemUpOwogCX0KIAlyZXR1cm4gc2dscS0+c2xpNF94cml0YWc7CiB9CkBAIC01OTg3LDEyICs2MDM4LDEwIEBACiAJCWVsc2UKIAkJCWJmX3NldChhYm9ydF9jbWRfaWEsICZ3cWUtPmFib3J0X2NtZCwgMCk7CiAJCWJmX3NldChhYm9ydF9jbWRfY3JpdGVyaWEsICZ3cWUtPmFib3J0X2NtZCwgVF9YUklfVEFHKTsKLQkJYWJvcnRfdGFnID0gaW9jYnEtPmlvY2IudW4uYWN4cmkuYWJvcnRJb1RhZzsKIAkJd3FlLT53b3Jkc1s1XSA9IDA7CiAJCWJmX3NldChscGZjX3dxZV9nZW5fY3QsICZ3cWUtPmdlbmVyaWMsCiAJCQkoKGlvY2JxLT5pb2NiLnVscEN0X2ggPDwgMSkgfCBpb2NicS0+aW9jYi51bHBDdF9sKSk7CiAJCWFib3J0X3RhZyA9IGlvY2JxLT5pb2NiLnVuLmFjeHJpLmFib3J0SW9UYWc7Ci0JCXdxZS0+Z2VuZXJpYy5hYm9ydF90YWcgPSBhYm9ydF90YWc7CiAJCS8qCiAJCSAqIFRoZSBhYm9ydCBoYW5kbGVyIHdpbGwgc2VuZCB1cyBDTURfQUJPUlRfWFJJX0NOIG9yCiAJCSAqIENNRF9DTE9TRV9YUklfQ04gYW5kIHRoZSBmdyBvbmx5IGFjY2VwdHMgQ01EX0FCT1JUX1hSSV9DWApAQCAtNjEyMSwxNSArNjE3MCwxNSBAQAogCWlmIChscGZjX3NsaTRfaW9jYjJ3cWUocGhiYSwgcGlvY2IsICZ3cWUpKQogCQlyZXR1cm4gSU9DQl9FUlJPUjsKIAotCWlmIChwaW9jYi0+aW9jYl9mbGFnICYgIExQRkNfSU9fRkNQKSB7CisJaWYgKChwaW9jYi0+aW9jYl9mbGFnICYgTFBGQ19JT19GQ1ApIHx8CisJCShwaW9jYi0+aW9jYl9mbGFnICYgTFBGQ19VU0VfRkNQV1FJRFgpKSB7CiAJCS8qCiAJCSAqIEZvciBGQ1AgY29tbWFuZCBJT0NCLCBnZXQgYSBuZXcgV1EgaW5kZXggdG8gZGlzdHJpYnV0ZQogCQkgKiBXUUUgYWNyb3NzIHRoZSBXUXNyLiBPbiB0aGUgb3RoZXIgaGFuZCwgZm9yIGFib3J0IElPQ0IsCiAJCSAqIGl0IGNhcnJpZXMgdGhlIHNhbWUgV1EgaW5kZXggdG8gdGhlIG9yaWdpbmFsIGNvbW1hbmQKIAkJICogSU9DQi4KIAkJICovCi0JCWlmICgocGlvY2ItPmlvY2IudWxwQ29tbWFuZCAhPSBDTURfQUJPUlRfWFJJX0NOKSAmJgotCQkgICAgKHBpb2NiLT5pb2NiLnVscENvbW1hbmQgIT0gQ01EX0NMT1NFX1hSSV9DTikpCisJCWlmIChwaW9jYi0+aW9jYl9mbGFnICYgTFBGQ19JT19GQ1ApCiAJCQlwaW9jYi0+ZmNwX3dxaWR4ID0gbHBmY19zbGk0X3NjbWRfdG9fd3FpZHhfZGlzdHIocGhiYSk7CiAJCWlmIChscGZjX3NsaTRfd3FfcHV0KHBoYmEtPnNsaTRfaGJhLmZjcF93cVtwaW9jYi0+ZmNwX3dxaWR4XSwKIAkJCQkgICAgICZ3cWUpKQpAQCAtNzAwNCw3ICs3MDUzLDE0IEBACiAJCSAgICBhYm9ydF9pb2NiLT5pb2NiLnVscENvbnRleHQgIT0gYWJvcnRfY29udGV4dCB8fAogCQkgICAgKGFib3J0X2lvY2ItPmlvY2JfZmxhZyAmIExQRkNfRFJJVkVSX0FCT1JURUQpID09IDApCiAJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCQllbHNlIHsKKwkJZWxzZSBpZiAocGhiYS0+c2xpX3JldiA8IExQRkNfU0xJX1JFVjQpIHsKKwkJCS8qCisJCQkgKiBsZWF2ZSB0aGUgU0xJNCBhYm9ydGVkIGNvbW1hbmQgb24gdGhlIHR4Y21wbHEKKwkJCSAqIGxpc3QgYW5kIHRoZSBjb21tYW5kIGNvbXBsZXRlIFdDUUUncyBYQiBiaXQKKwkJCSAqIHdpbGwgdGVsbCB3aGV0aGVyIHRoZSBTR0wgKFhSSSkgY2FuIGJlIHJlbGVhc2VkCisJCQkgKiBpbW1lZGlhdGVseSBvciB0byB0aGUgYWJvcnRlZCBTR0wgbGlzdCBmb3IgdGhlCisJCQkgKiBmb2xsb3dpbmcgYWJvcnQgWFJJIGZyb20gdGhlIEhCQS4KKwkJCSAqLwogCQkJbGlzdF9kZWxfaW5pdCgmYWJvcnRfaW9jYi0+bGlzdCk7CiAJCQlwcmluZy0+dHhjbXBscV9jbnQtLTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CkBAIC03MDEzLDExICs3MDY5LDEzIEBACiAJCQkgKiBwYXlsb2FkLCBzbyBkb24ndCBmcmVlIGRhdGEgYnVmZmVyIHRpbGwgYWZ0ZXIKIAkJCSAqIGEgaGJlYXQuCiAJCQkgKi8KKwkJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQkJYWJvcnRfaW9jYi0+aW9jYl9mbGFnIHw9IExQRkNfREVMQVlfTUVNX0ZSRUU7Ci0KIAkJCWFib3J0X2lvY2ItPmlvY2JfZmxhZyAmPSB+TFBGQ19EUklWRVJfQUJPUlRFRDsKKwkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisKIAkJCWFib3J0X2lvY2ItPmlvY2IudWxwU3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKLQkJCWFib3J0X2lvY2ItPmlvY2IudW4udWxwV29yZFs0XSA9IElPRVJSX1NMSV9BQk9SVEVEOworCQkJYWJvcnRfaW9jYi0+aW9jYi51bi51bHBXb3JkWzRdID0gSU9FUlJfQUJPUlRfUkVRVUVTVEVEOwogCQkJKGFib3J0X2lvY2ItPmlvY2JfY21wbCkocGhiYSwgYWJvcnRfaW9jYiwgYWJvcnRfaW9jYik7CiAJCX0KIAl9CkBAIC03MTA2LDcgKzcxNjQsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIFRoaXMgc2lnbmFscyB0aGUgcmVzcG9uc2UgdG8gc2V0IHRoZSBjb3JyZWN0IHN0YXR1cwotCSAqIGJlZm9yZSBjYWxsaW5nIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIuCisJICogYmVmb3JlIGNhbGxpbmcgdGhlIGNvbXBsZXRpb24gaGFuZGxlcgogCSAqLwogCWNtZGlvY2ItPmlvY2JfZmxhZyB8PSBMUEZDX0RSSVZFUl9BQk9SVEVEOwogCkBAIC03MTI0LDYgKzcxODIsOCBAQAogCiAJLyogQUJUUyBXUUUgbXVzdCBnbyB0byB0aGUgc2FtZSBXUSBhcyB0aGUgV1FFIHRvIGJlIGFib3J0ZWQgKi8KIAlhYnRzaW9jYnAtPmZjcF93cWlkeCA9IGNtZGlvY2ItPmZjcF93cWlkeDsKKwlpZiAoY21kaW9jYi0+aW9jYl9mbGFnICYgTFBGQ19JT19GQ1ApCisJCWFidHNpb2NicC0+aW9jYl9mbGFnIHw9IExQRkNfVVNFX0ZDUFdRSURYOwogCiAJaWYgKHBoYmEtPmxpbmtfc3RhdGUgPj0gTFBGQ19MSU5LX1VQKQogCQlpYWJ0LT51bHBDb21tYW5kID0gQ01EX0FCT1JUX1hSSV9DTjsKQEAgLTczMzAsNiArNzM5MCw4IEBACiAKIAkJLyogQUJUUyBXUUUgbXVzdCBnbyB0byB0aGUgc2FtZSBXUSBhcyB0aGUgV1FFIHRvIGJlIGFib3J0ZWQgKi8KIAkJYWJ0c2lvY2ItPmZjcF93cWlkeCA9IGlvY2JxLT5mY3Bfd3FpZHg7CisJCWlmIChpb2NicS0+aW9jYl9mbGFnICYgTFBGQ19JT19GQ1ApCisJCQlhYnRzaW9jYi0+aW9jYl9mbGFnIHw9IExQRkNfVVNFX0ZDUFdRSURYOwogCiAJCWlmIChscGZjX2lzX2xpbmtfdXAocGhiYSkpCiAJCQlhYnRzaW9jYi0+aW9jYi51bHBDb21tYW5kID0gQ01EX0FCT1JUX1hSSV9DTjsKQEAgLTgzNTksMTEgKzg0MjEsMjQgQEAKIAl9CiB9CiAKKy8qKgorICogbHBmY19zbGk0X2lvY2JfcGFyYW1fdHJhbnNmZXIgLSBUcmFuc2ZlciBwSW9jYk91dCBhbmQgY21wbCBzdGF0dXMgdG8gcElvY2JJbgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBwSW9jYkluOiBwb2ludGVyIHRvIHRoZSByc3Bpb2NicQorICogQHBJb2NiT3V0OiBwb2ludGVyIHRvIHRoZSBjbWRpb2NicQorICogQHdjcWU6IHBvaW50ZXIgdG8gdGhlIGNvbXBsZXRlIHdjcWUKKyAqCisgKiBUaGlzIHJvdXRpbmUgdHJhbnNmZXJzIHRoZSBmaWVsZHMgb2YgYSBjb21tYW5kIGlvY2JxIHRvIGEgcmVzcG9uc2UgaW9jYnEKKyAqIGJ5IGNvcHlpbmcgYWxsIHRoZSBJT0NCIGZpZWxkcyBmcm9tIGNvbW1hbmQgaW9jYnEgYW5kIHRyYW5zZmVycmluZyB0aGUKKyAqIGNvbXBsZXRpb24gc3RhdHVzIGluZm9ybWF0aW9uIGZyb20gdGhlIGNvbXBsZXRlIHdjcWUuCisgKiovCiBzdGF0aWMgdm9pZAotbHBmY19zbGk0X2lvY2JfcGFyYW1fdHJhbnNmZXIoc3RydWN0IGxwZmNfaW9jYnEgKnBJb2NiSW4sCitscGZjX3NsaTRfaW9jYl9wYXJhbV90cmFuc2ZlcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCisJCQkgICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcElvY2JJbiwKIAkJCSAgICAgIHN0cnVjdCBscGZjX2lvY2JxICpwSW9jYk91dCwKIAkJCSAgICAgIHN0cnVjdCBscGZjX3djcWVfY29tcGxldGUgKndjcWUpCiB7CisJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJc2l6ZV90IG9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBscGZjX2lvY2JxLCBpb2NiKTsKIAogCW1lbWNweSgoY2hhciAqKXBJb2NiSW4gKyBvZmZzZXQsIChjaGFyICopcElvY2JPdXQgKyBvZmZzZXQsCkBAIC04Mzc3LDggKzg0NTIsMTcgQEAKIAkJCQkJd2NxZS0+dG90YWxfZGF0YV9wbGFjZWQ7CiAJCWVsc2UKIAkJCXBJb2NiSW4tPmlvY2IudW4udWxwV29yZFs0XSA9IHdjcWUtPnBhcmFtZXRlcjsKLQllbHNlCisJZWxzZSB7CiAJCXBJb2NiSW4tPmlvY2IudW4udWxwV29yZFs0XSA9IHdjcWUtPnBhcmFtZXRlcjsKKwkJcElvY2JJbi0+aW9jYi51bi5nZW5yZXE2NC5iZGwuYmRlU2l6ZSA9IHdjcWUtPnRvdGFsX2RhdGFfcGxhY2VkOworCX0KKworCS8qIFBpY2sgdXAgSEJBIGV4Y2hhbmdlIGJ1c3kgY29uZGl0aW9uICovCisJaWYgKGJmX2dldChscGZjX3djcWVfY194Yiwgd2NxZSkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJCXBJb2NiSW4tPmlvY2JfZmxhZyB8PSBMUEZDX0VYQ0hBTkdFX0JVU1k7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJfQogfQogCiAvKioKQEAgLTg0MTksNyArODUwMyw3IEBACiAJfQogCiAJLyogRmFrZSB0aGUgaXJzcGlvY2JxIGFuZCBjb3B5IG5lY2Vzc2FyeSByZXNwb25zZSBpbmZvcm1hdGlvbiAqLwotCWxwZmNfc2xpNF9pb2NiX3BhcmFtX3RyYW5zZmVyKGlyc3Bpb2NicSwgY21kaW9jYnEsIHdjcWUpOworCWxwZmNfc2xpNF9pb2NiX3BhcmFtX3RyYW5zZmVyKHBoYmEsIGlyc3Bpb2NicSwgY21kaW9jYnEsIHdjcWUpOwogCiAJcmV0dXJuIGlyc3Bpb2NicTsKIH0KQEAgLTg4NDksOCArODkzMyw3IEBACiAJaW50IGVjb3VudCA9IDA7CiAJdWludDE2X3QgY3FpZDsKIAotCWlmIChiZl9nZXQobHBmY19lcWVfbWFqb3JfY29kZSwgZXFlKSAhPSAwIHx8Ci0JICAgIGJmX2dldChscGZjX2VxZV9taW5vcl9jb2RlLCBlcWUpICE9IDApIHsKKwlpZiAoYmZfZ2V0KGxwZmNfZXFlX21ham9yX2NvZGUsIGVxZSkgIT0gMCkgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19TTEksCiAJCQkJIjAzNTkgTm90IGEgdmFsaWQgc2xvdy1wYXRoIGNvbXBsZXRpb24gIgogCQkJCSJldmVudDogbWFqb3Jjb2RlPXgleCwgbWlub3Jjb2RlPXgleFxuIiwKQEAgLTg5NzYsNyArOTA1OSw3IEBACiAJfQogCiAJLyogRmFrZSB0aGUgaXJzcGlvY2IgYW5kIGNvcHkgbmVjZXNzYXJ5IHJlc3BvbnNlIGluZm9ybWF0aW9uICovCi0JbHBmY19zbGk0X2lvY2JfcGFyYW1fdHJhbnNmZXIoJmlyc3Bpb2NicSwgY21kaW9jYnEsIHdjcWUpOworCWxwZmNfc2xpNF9pb2NiX3BhcmFtX3RyYW5zZmVyKHBoYmEsICZpcnNwaW9jYnEsIGNtZGlvY2JxLCB3Y3FlKTsKIAogCS8qIFBhc3MgdGhlIGNtZF9pb2NiIGFuZCB0aGUgcnNwIHN0YXRlIHRvIHRoZSB1cHBlciBsYXllciAqLwogCShjbWRpb2NicS0+aW9jYl9jbXBsKShwaGJhLCBjbWRpb2NicSwgJmlyc3Bpb2NicSk7CkBAIC05MDgyLDggKzkxNjUsNyBAQAogCXVpbnQxNl90IGNxaWQ7CiAJaW50IGVjb3VudCA9IDA7CiAKLQlpZiAodW5saWtlbHkoYmZfZ2V0KGxwZmNfZXFlX21ham9yX2NvZGUsIGVxZSkgIT0gMCkgfHwKLQkgICAgdW5saWtlbHkoYmZfZ2V0KGxwZmNfZXFlX21pbm9yX2NvZGUsIGVxZSkgIT0gMCkpIHsKKwlpZiAodW5saWtlbHkoYmZfZ2V0KGxwZmNfZXFlX21ham9yX2NvZGUsIGVxZSkgIT0gMCkpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAogCQkJCSIwMzY2IE5vdCBhIHZhbGlkIGZhc3QtcGF0aCBjb21wbGV0aW9uICIKIAkJCQkiZXZlbnQ6IG1ham9yY29kZT14JXgsIG1pbm9yY29kZT14JXhcbiIsCkBAIC0xMTg3MSwxMiArMTE5NTMsNiBAQAogewogCWludCByYyA9IDAsIGVycm9yOwogCUxQRkNfTUJPWFFfdCAqbWJveHE7Ci0Jdm9pZCAqdmlydF9hZGRyOwotCWRtYV9hZGRyX3QgcGh5c19hZGRyOwotCXVpbnQ4X3QgKmJ5dGVwOwotCXN0cnVjdCBscGZjX21ieF9zZ2Ugc2dlOwotCXVpbnQzMl90IGFsbG9jX2xlbiwgcmVxX2xlbjsKLQlzdHJ1Y3QgbHBmY19tYnhfcmVhZF9mY2ZfdGJsICpyZWFkX2ZjZjsKIAogCXBoYmEtPmZjb2VfZXZlbnR0YWdfYXRfZmNmX3NjYW4gPSBwaGJhLT5mY29lX2V2ZW50dGFnOwogCW1ib3hxID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKQEAgLTExODg3LDQzICsxMTk2MywxOSBAQAogCQllcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbF9mY2ZzY2FuOwogCX0KLQotCXJlcV9sZW4gPSBzaXplb2Yoc3RydWN0IGZjZl9yZWNvcmQpICsKLQkJICBzaXplb2YodW5pb24gbHBmY19zbGk0X2NmZ19zaGRyKSArIDIgKiBzaXplb2YodWludDMyX3QpOwotCi0JLyogU2V0IHVwIFJFQURfRkNGIFNMSTRfQ09ORklHIG1haWxib3gtaW9jdGwgY29tbWFuZCAqLwotCWFsbG9jX2xlbiA9IGxwZmNfc2xpNF9jb25maWcocGhiYSwgbWJveHEsIExQRkNfTUJPWF9TVUJTWVNURU1fRkNPRSwKLQkJCSBMUEZDX01CT1hfT1BDT0RFX0ZDT0VfUkVBRF9GQ0ZfVEFCTEUsIHJlcV9sZW4sCi0JCQkgTFBGQ19TTEk0X01CWF9ORU1CRUQpOwotCi0JaWYgKGFsbG9jX2xlbiA8IHJlcV9sZW4pIHsKLQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkiMDI5MSBBbGxvY2F0ZWQgRE1BIG1lbW9yeSBzaXplICh4JXgpIGlzICIKLQkJCQkibGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQgRE1BIG1lbW9yeSAiCi0JCQkJInNpemUgKHgleClcbiIsIGFsbG9jX2xlbiwgcmVxX2xlbik7Ci0JCWVycm9yID0gLUVOT01FTTsKKwkvKiBDb25zdHJ1Y3QgdGhlIHJlYWQgRkNGIHJlY29yZCBtYWlsYm94IGNvbW1hbmQgKi8KKwlyYyA9IGxwZmNfc2xpNF9tYnhfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIG1ib3hxLCBmY2ZfaW5kZXgpOworCWlmIChyYykgeworCQllcnJvciA9IC1FSU5WQUw7CiAJCWdvdG8gZmFpbF9mY2ZzY2FuOwogCX0KLQotCS8qIEdldCB0aGUgZmlyc3QgU0dFIGVudHJ5IGZyb20gdGhlIG5vbi1lbWJlZGRlZCBETUEgbWVtb3J5LiBUaGlzCi0JICogcm91dGluZSBvbmx5IHVzZXMgYSBzaW5nbGUgU0dFLgotCSAqLwotCWxwZmNfc2xpNF9tYnhfc2dlX2dldChtYm94cSwgMCwgJnNnZSk7Ci0JcGh5c19hZGRyID0gZ2V0UGFkZHIoc2dlLnBhX2hpLCBzZ2UucGFfbG8pOwotCXZpcnRfYWRkciA9IG1ib3hxLT5zZ2VfYXJyYXktPmFkZHJbMF07Ci0JcmVhZF9mY2YgPSAoc3RydWN0IGxwZmNfbWJ4X3JlYWRfZmNmX3RibCAqKXZpcnRfYWRkcjsKLQotCS8qIFNldCB1cCBjb21tYW5kIGZpZWxkcyAqLwotCWJmX3NldChscGZjX21ieF9yZWFkX2ZjZl90YmxfaW5keCwgJnJlYWRfZmNmLT51LnJlcXVlc3QsIGZjZl9pbmRleCk7Ci0JLyogUGVyZm9ybSBuZWNlc3NhcnkgZW5kaWFuIGNvbnZlcnNpb24gKi8KLQlieXRlcCA9IHZpcnRfYWRkciArIHNpemVvZih1bmlvbiBscGZjX3NsaTRfY2ZnX3NoZHIpOwotCWxwZmNfc2xpX3BjaW1lbV9iY29weShieXRlcCwgYnl0ZXAsIHNpemVvZih1aW50MzJfdCkpOworCS8qIElzc3VlIHRoZSBtYWlsYm94IGNvbW1hbmQgYXN5bmNocm9ub3VzbHkgKi8KIAltYm94cS0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKIAltYm94cS0+bWJveF9jbXBsID0gbHBmY19tYnhfY21wbF9yZWFkX2ZjZl9yZWNvcmQ7CiAJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3hxLCBNQlhfTk9XQUlUKTsKLQlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgeworCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKQogCQllcnJvciA9IC1FSU87Ci0JfSBlbHNlIHsKKwllbHNlIHsKIAkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCXBoYmEtPmhiYV9mbGFnIHw9IEZDRl9ESVNDX0lOUFJPR1JFU1M7CiAJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CkBAIC0xMTk0Miw2ICsxMTk5NCw5MCBAQAogfQogCiAvKioKKyAqIGxwZmNfbWJ4X2NtcGxfcmVkaXNjX2ZjZl90YWJsZSAtIGNvbXBsZXRpb24gcm91dGluZSBmb3IgcmVkaXNjb3ZlciBGQ0YgdGFibGUKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgY29tcGxldGlvbiByb3V0aW5lIGZvciB0aGUgcmVkaXNjb3ZlciBGQ0YgdGFibGUgbWFpbGJveAorICogY29tbWFuZC4gSWYgdGhlIG1haWxib3ggY29tbWFuZCByZXR1cm5lZCBmYWlsdXJlLCBpdCB3aWxsIHRyeSB0byBzdG9wIHRoZQorICogRkNGIHJlZGlzY292ZXIgd2FpdCB0aW1lci4KKyAqKi8KK3ZvaWQKK2xwZmNfbWJ4X2NtcGxfcmVkaXNjX2ZjZl90YWJsZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqbWJveCkKK3sKKwlzdHJ1Y3QgbHBmY19tYnhfcmVkaXNjX2ZjZl90YmwgKnJlZGlzY19mY2Y7CisJdWludDMyX3Qgc2hkcl9zdGF0dXMsIHNoZHJfYWRkX3N0YXR1czsKKworCXJlZGlzY19mY2YgPSAmbWJveC0+dS5tcWUudW4ucmVkaXNjX2ZjZl90Ymw7CisKKwlzaGRyX3N0YXR1cyA9IGJmX2dldChscGZjX21ib3hfaGRyX3N0YXR1cywKKwkJCSAgICAgJnJlZGlzY19mY2YtPmhlYWRlci5jZmdfc2hkci5yZXNwb25zZSk7CisJc2hkcl9hZGRfc3RhdHVzID0gYmZfZ2V0KGxwZmNfbWJveF9oZHJfYWRkX3N0YXR1cywKKwkJCSAgICAgJnJlZGlzY19mY2YtPmhlYWRlci5jZmdfc2hkci5yZXNwb25zZSk7CisJaWYgKHNoZHJfc3RhdHVzIHx8IHNoZHJfYWRkX3N0YXR1cykgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19TTEksCisJCQkJIjI3NDYgUmVxdWVzdGluZyBmb3IgRkNGIHJlZGlzY292ZXJ5IGZhaWxlZCAiCisJCQkJInN0YXR1cyB4JXggYWRkX3N0YXR1cyB4JXhcbiIsCisJCQkJc2hkcl9zdGF0dXMsIHNoZHJfYWRkX3N0YXR1cyk7CisJCS8qCisJCSAqIFJlcXVlc3QgZmFpbGVkLCBsYXN0IHJlc29ydCB0byByZS10cnkgY3VycmVudAorCQkgKiByZWdpc3RlcmVkIEZDRiBlbnRyeQorCQkgKi8KKwkJbHBmY19yZXRyeV9wcG9ydF9kaXNjb3ZlcnkocGhiYSk7CisJfSBlbHNlCisJCS8qCisJCSAqIFN0YXJ0IEZDRiByZWRpc2NvdmVyeSB3YWl0IHRpbWVyIGZvciBwZW5kaW5nIEZDRgorCQkgKiBiZWZvcmUgcmVzY2FuIEZDRiByZWNvcmQgdGFibGUuCisJCSAqLworCQlscGZjX2ZjZl9yZWRpc2Nfd2FpdF9zdGFydF90aW1lcihwaGJhKTsKKworCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKK30KKworLyoqCisgKiBscGZjX3NsaTRfcmVkaXNjX2FsbF9mY2YgLSBSZXF1ZXN0IHRvIHJlZGlzY292ZXIgZW50aXJlIEZDRiB0YWJsZSBieSBwb3J0LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgdG8gcmVxdWVzdCBmb3IgcmVkaXNjb3Zlcnkgb2YgdGhlIGVudGlyZSBGQ0YgdGFibGUKKyAqIGJ5IHRoZSBwb3J0LgorICoqLworaW50CitscGZjX3NsaTRfcmVkaXNjX2ZjZl90YWJsZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJTFBGQ19NQk9YUV90ICptYm94OworCXN0cnVjdCBscGZjX21ieF9yZWRpc2NfZmNmX3RibCAqcmVkaXNjX2ZjZjsKKwlpbnQgcmMsIGxlbmd0aDsKKworCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCWlmICghbWJveCkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19TTEksCisJCQkJIjI3NDUgRmFpbGVkIHRvIGFsbG9jYXRlIG1ib3ggZm9yICIKKwkJCQkicmVxdWVzdGluZyBGQ0YgcmVkaXNjb3Zlci5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlsZW5ndGggPSAoc2l6ZW9mKHN0cnVjdCBscGZjX21ieF9yZWRpc2NfZmNmX3RibCkgLQorCQkgIHNpemVvZihzdHJ1Y3QgbHBmY19zbGk0X2NmZ19taGRyKSk7CisJbHBmY19zbGk0X2NvbmZpZyhwaGJhLCBtYm94LCBMUEZDX01CT1hfU1VCU1lTVEVNX0ZDT0UsCisJCQkgTFBGQ19NQk9YX09QQ09ERV9GQ09FX1JFRElTQ09WRVJfRkNGLAorCQkJIGxlbmd0aCwgTFBGQ19TTEk0X01CWF9FTUJFRCk7CisKKwlyZWRpc2NfZmNmID0gJm1ib3gtPnUubXFlLnVuLnJlZGlzY19mY2ZfdGJsOworCS8qIFNldCBjb3VudCB0byAwIGZvciBpbnZhbGlkYXRpbmcgdGhlIGVudGlyZSBGQ0YgZGF0YWJhc2UgKi8KKwliZl9zZXQobHBmY19tYnhfcmVkaXNjX2ZjZl9jb3VudCwgcmVkaXNjX2ZjZiwgMCk7CisKKwkvKiBJc3N1ZSB0aGUgbWFpbGJveCBjb21tYW5kIGFzeW5jaHJvbm91c2x5ICovCisJbWJveC0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKwltYm94LT5tYm94X2NtcGwgPSBscGZjX21ieF9jbXBsX3JlZGlzY19mY2ZfdGFibGU7CisJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3gsIE1CWF9OT1dBSVQpOworCisJaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpIHsKKwkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogbHBmY19zbGlfcmVhZF9saW5rX3N0ZSAtIFJlYWQgcmVnaW9uIDIzIHRvIGRlY2lkZSBpZiBsaW5rIGlzIGRpc2FibGVkLgogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKgpAQCAtMTIwNjksMyArMTIyMDUsNDggQEAKIAlrZnJlZShyZ24yM19kYXRhKTsKIAlyZXR1cm47CiB9CisKKy8qKgorICogbHBmY19jbGVhbnVwX3BlbmRpbmdfbWJveCAtIEZyZWUgdXAgdnBvcnQgZGlzY292ZXJ5IG1haWxib3ggY29tbWFuZHMuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gdnBvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpdGVyYXRlIHRocm91Z2ggdGhlIG1haWxib3hxIGFuZCBjbGVhbiB1cCBhbGwgUkVHX0xPR0lOCisgKiBhbmQgUkVHX1ZQSSBtYWlsYm94IGNvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdnBvcnQuIFRoaXMgZnVuY3Rpb24KKyAqIGlzIGNhbGxlZCB3aGVuIGRyaXZlciB3YW50IHRvIHJlc3RhcnQgZGlzY292ZXJ5IG9mIHRoZSB2cG9ydCBkdWUgdG8KKyAqIGEgQ2xlYXIgVmlydHVhbCBMaW5rIGV2ZW50LgorICoqLwordm9pZAorbHBmY19jbGVhbnVwX3BlbmRpbmdfbWJveChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCit7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CisJTFBGQ19NQk9YUV90ICptYiwgKm5leHRtYjsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKm1wOworCisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1iLCBuZXh0bWIsICZwaGJhLT5zbGkubWJveHEsIGxpc3QpIHsKKwkJaWYgKG1iLT52cG9ydCAhPSB2cG9ydCkKKwkJCWNvbnRpbnVlOworCisJCWlmICgobWItPnUubWIubWJ4Q29tbWFuZCAhPSBNQlhfUkVHX0xPR0lONjQpICYmCisJCQkobWItPnUubWIubWJ4Q29tbWFuZCAhPSBNQlhfUkVHX1ZQSSkpCisJCQljb250aW51ZTsKKworCQlpZiAobWItPnUubWIubWJ4Q29tbWFuZCA9PSBNQlhfUkVHX0xPR0lONjQpIHsKKwkJCW1wID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSAobWItPmNvbnRleHQxKTsKKwkJCWlmIChtcCkgeworCQkJCV9fbHBmY19tYnVmX2ZyZWUocGhiYSwgbXAtPnZpcnQsIG1wLT5waHlzKTsKKwkJCQlrZnJlZShtcCk7CisJCQl9CisJCX0KKwkJbGlzdF9kZWwoJm1iLT5saXN0KTsKKwkJbWVtcG9vbF9mcmVlKG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwl9CisJbWIgPSBwaGJhLT5zbGkubWJveF9hY3RpdmU7CisJaWYgKG1iICYmIChtYi0+dnBvcnQgPT0gdnBvcnQpKSB7CisJCWlmICgobWItPnUubWIubWJ4Q29tbWFuZCA9PSBNQlhfUkVHX0xPR0lONjQpIHx8CisJCQkobWItPnUubWIubWJ4Q29tbWFuZCA9PSBNQlhfUkVHX1ZQSSkpCisJCQltYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmgKaW5kZXggYmEzOGRlMy4uZGZjZjU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oCkBAIC01MywxNyArNTMsMTkgQEAKIAogCUlPQ0JfdCBpb2NiOwkJLyogSU9DQiBjbWQgKi8KIAl1aW50OF90IHJldHJ5OwkJLyogcmV0cnkgY291bnRlciBmb3IgSU9DQiBjbWQgLSBpZiBuZWVkZWQgKi8KLQl1aW50OF90IGlvY2JfZmxhZzsKKwl1aW50MTZfdCBpb2NiX2ZsYWc7CiAjZGVmaW5lIExQRkNfSU9fTElCREZDCQkxCS8qIGxpYmRmYyBpb2NiICovCiAjZGVmaW5lIExQRkNfSU9fV0FLRQkJMgkvKiBIaWdoIFByaW9yaXR5IFF1ZXVlIHNpZ25hbCBmbGFnICovCiAjZGVmaW5lIExQRkNfSU9fRkNQCQk0CS8qIEZDUCBjb21tYW5kIC0tIGlvY2JxIGluIHNjc2lfYnVmICovCiAjZGVmaW5lIExQRkNfRFJJVkVSX0FCT1JURUQJOAkvKiBkcml2ZXIgYWJvcnRlZCB0aGlzIHJlcXVlc3QgKi8KICNkZWZpbmUgTFBGQ19JT19GQUJSSUMJCTB4MTAJLyogSW9jYiBzZW5kIHVzaW5nIGZhYnJpYyBzY2hlZHVsZXIgKi8KICNkZWZpbmUgTFBGQ19ERUxBWV9NRU1fRlJFRQkweDIwICAgIC8qIERlZmVyIGZyZWUnaW5nIG9mIEZDIGRhdGEgKi8KLSNkZWZpbmUgTFBGQ19GSVBfRUxTX0lEX01BU0sJMHhjMAkvKiBFTFNfSUQgcmFuZ2UgMC0zICovCi0jZGVmaW5lIExQRkNfRklQX0VMU19JRF9TSElGVAk2CisjZGVmaW5lIExQRkNfRVhDSEFOR0VfQlVTWQkweDQwICAgIC8qIFNMSTQgaGJhIHJlcG9ydGVkIFhCIGluIHJlc3BvbnNlICovCisjZGVmaW5lIExQRkNfVVNFX0ZDUFdRSURYCTB4ODAgICAgLyogU3VibWl0IHRvIHNwZWNpZmllZCBGQ1BXUSBpbmRleCAqLwogCi0JdWludDhfdCBhYm9ydF9jb3VudDsKKyNkZWZpbmUgTFBGQ19GSVBfRUxTX0lEX01BU0sJMHhjMDAwCS8qIEVMU19JRCByYW5nZSAwLTMsIG5vbi1zaGlmdGVkIG1hc2sgKi8KKyNkZWZpbmUgTFBGQ19GSVBfRUxTX0lEX1NISUZUCTE0CisKIAl1aW50OF90IHJzdmQyOwogCXVpbnQzMl90IGRydnJUaW1lb3V0OwkvKiBkcml2ZXIgdGltZW91dCBpbiBzZWNvbmRzICovCiAJdWludDMyX3QgZmNwX3dxaWR4OwkvKiBpbmRleCB0byBGQ1Agd29yayBxdWV1ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGk0LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaTQuaAppbmRleCA0NGU1ZjU3Li44NjMwODgzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGk0LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGk0LmgKQEAgLTIyLDYgKzIyLDEwIEBACiAjZGVmaW5lIExQRkNfUkVMRUFTRV9OT1RJRklDQVRJT05fSU5URVJWQUwJMzIKICNkZWZpbmUgTFBGQ19HRVRfUUVfUkVMX0lOVAkJCTMyCiAjZGVmaW5lIExQRkNfUlBJX0xPV19XQVRFUl9NQVJLCQkJMTAKKworLyogQW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyBmb3Igd2FpdGluZyBGQ0YgcmVkaXNjb3ZlcnkgdG8gY29tcGxldGUgKi8KKyNkZWZpbmUgTFBGQ19GQ0ZfUkVESVNDT1ZFUl9XQUlUX1RNTwkJMjAwMCAvKiBtc2VjICovCisKIC8qIE51bWJlciBvZiBTR0wgZW50cmllcyBjYW4gYmUgcG9zdGVkIGluIGEgNEtCIG5vbmVtYmVkZGVkIG1ib3ggY29tbWFuZCAqLwogI2RlZmluZSBMUEZDX05FTUJFRF9NQk9YX1NHTF9DTlQJCTI1NAogCkBAIC0xMjYsMjQgKzEzMCwzNiBAQAogCXVpbnQ4X3Qgc3RhdHVzOwogCXVpbnQ4X3QgcGh5c2ljYWw7CiAJdWludDhfdCBmYXVsdDsKKwl1aW50MTZfdCBsb2dpY2FsX3NwZWVkOworfTsKKworc3RydWN0IGxwZmNfZmNmX3JlYyB7CisJdWludDhfdCAgZmFicmljX25hbWVbOF07CisJdWludDhfdCAgc3dpdGNoX25hbWVbOF07CisJdWludDhfdCAgbWFjX2FkZHJbNl07CisJdWludDE2X3QgZmNmX2luZHg7CisJdWludDMyX3QgcHJpb3JpdHk7CisJdWludDE2X3Qgdmxhbl9pZDsKKwl1aW50MzJfdCBhZGRyX21vZGU7CisJdWludDMyX3QgZmxhZzsKKyNkZWZpbmUgQk9PVF9FTkFCTEUJMHgwMQorI2RlZmluZSBSRUNPUkRfVkFMSUQJMHgwMgogfTsKIAogc3RydWN0IGxwZmNfZmNmIHsKLQl1aW50OF90CSBmYWJyaWNfbmFtZVs4XTsKLQl1aW50OF90CSBzd2l0Y2hfbmFtZVs4XTsKLQl1aW50OF90ICBtYWNfYWRkcls2XTsKLQl1aW50MTZfdCBmY2ZfaW5keDsKIAl1aW50MTZfdCBmY2ZpOwogCXVpbnQzMl90IGZjZl9mbGFnOwogI2RlZmluZSBGQ0ZfQVZBSUxBQkxFCTB4MDEgLyogRkNGIGF2YWlsYWJsZSBmb3IgZGlzY292ZXJ5ICovCiAjZGVmaW5lIEZDRl9SRUdJU1RFUkVECTB4MDIgLyogRkNGIHJlZ2lzdGVyZWQgd2l0aCBGVyAqLwotI2RlZmluZSBGQ0ZfRElTQ09WRVJFRAkweDA0IC8qIEZDRiBkaXNjb3Zlcnkgc3RhcnRlZCAgKi8KLSNkZWZpbmUgRkNGX0JPT1RfRU5BQkxFIDB4MDggLyogQm9vdCBiaW9zIHVzZSB0aGlzIEZDRiAqLwotI2RlZmluZSBGQ0ZfSU5fVVNFCTB4MTAgLyogQXRsZWFzdCBvbmUgZGlzY292ZXJ5IGNvbXBsZXRlZCAqLwotI2RlZmluZSBGQ0ZfVkFMSURfVkxBTgkweDIwIC8qIFVzZSB0aGUgdmxhbiBpZCBzcGVjaWZpZWQgKi8KLQl1aW50MzJfdCBwcmlvcml0eTsKKyNkZWZpbmUgRkNGX1NDQU5fRE9ORQkweDA0IC8qIEZDRiB0YWJsZSBzY2FuIGRvbmUgKi8KKyNkZWZpbmUgRkNGX0lOX1VTRQkweDA4IC8qIEF0bGVhc3Qgb25lIGRpc2NvdmVyeSBjb21wbGV0ZWQgKi8KKyNkZWZpbmUgRkNGX1JFRElTQ19QRU5ECTB4MTAgLyogRkNGIHJlZGlzY292ZXJ5IHBlbmRpbmcgKi8KKyNkZWZpbmUgRkNGX1JFRElTQ19FVlQJMHgyMCAvKiBGQ0YgcmVkaXNjb3ZlcnkgZXZlbnQgdG8gd29ya2VyIHRocmVhZCAqLworI2RlZmluZSBGQ0ZfUkVESVNDX0ZPVgkweDQwIC8qIFBvc3QgRkNGIHJlZGlzY292ZXJ5IGZhc3QgZmFpbG92ZXIgKi8KIAl1aW50MzJfdCBhZGRyX21vZGU7Ci0JdWludDE2X3Qgdmxhbl9pZDsKKwlzdHJ1Y3QgbHBmY19mY2ZfcmVjIGN1cnJlbnRfcmVjOworCXN0cnVjdCBscGZjX2ZjZl9yZWMgZmFpbG92ZXJfcmVjOworCXN0cnVjdCB0aW1lcl9saXN0IHJlZGlzY193YWl0OwogfTsKIAogI2RlZmluZSBMUEZDX1JFR0lPTjIzX1NJR05BVFVSRSAiUkcyMyIKQEAgLTI0OCw3ICsyNjQsMTAgQEAKICNkZWZpbmUgU0xJNF9DVF9WRkkgMgogI2RlZmluZSBTTEk0X0NUX0ZDRkkgMwogCi0jZGVmaW5lIExQRkNfU0xJNF9NQVhfU0VHTUVOVF9TSVpFIDB4MTAwMDAKKyNkZWZpbmUgTFBGQ19TTEk0X0ZMMV9NQVhfU0VHTUVOVF9TSVpFCTB4MTAwMDAKKyNkZWZpbmUgTFBGQ19TTEk0X0ZMMV9NQVhfQlVGX1NJWkUJMFgyMDAwCisjZGVmaW5lIExQRkNfU0xJNF9NSU5fQlVGX1NJWkUJCTB4NDAwCisjZGVmaW5lIExQRkNfU0xJNF9NQVhfQlVGX1NJWkUJCTB4MjAwMDAKIAogLyoKICAqIFNMSTQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzCkBAIC0yODIsNiArMzAxLDQyIEBACiAJc3RydWN0IGxwZmNfaGJhICpwaGJhOwogfTsKIAorLyogUG9ydCBDYXBhYmlsaXRpZXMgZm9yIFNMSTQgUGFyYW1ldGVycyAqLworc3RydWN0IGxwZmNfcGNfc2xpNF9wYXJhbXMgeworCXVpbnQzMl90IHN1cHBvcnRlZDsKKwl1aW50MzJfdCBpZl90eXBlOworCXVpbnQzMl90IHNsaV9yZXY7CisJdWludDMyX3Qgc2xpX2ZhbWlseTsKKwl1aW50MzJfdCBmZWF0dXJlbGV2ZWxfMTsKKwl1aW50MzJfdCBmZWF0dXJlbGV2ZWxfMjsKKwl1aW50MzJfdCBwcm90b190eXBlczsKKyNkZWZpbmUgTFBGQ19TTEk0X1BST1RPX0ZDT0UJMHgwMDAwMDAxCisjZGVmaW5lIExQRkNfU0xJNF9QUk9UT19GQwkweDAwMDAwMDIKKyNkZWZpbmUgTFBGQ19TTEk0X1BST1RPX05JQwkweDAwMDAwMDQKKyNkZWZpbmUgTFBGQ19TTEk0X1BST1RPX0lTQ1NJCTB4MDAwMDAwOAorI2RlZmluZSBMUEZDX1NMSTRfUFJPVE9fUkRNQQkweDAwMDAwMTAKKwl1aW50MzJfdCBzZ2Vfc3VwcF9sZW47CisJdWludDMyX3QgaWZfcGFnZV9zejsKKwl1aW50MzJfdCBycV9kYl93aW5kb3c7CisJdWludDMyX3QgbG9vcGJrX3Njb3BlOworCXVpbnQzMl90IGVxX3BhZ2VzX21heDsKKwl1aW50MzJfdCBlcWVfc2l6ZTsKKwl1aW50MzJfdCBjcV9wYWdlc19tYXg7CisJdWludDMyX3QgY3FlX3NpemU7CisJdWludDMyX3QgbXFfcGFnZXNfbWF4OworCXVpbnQzMl90IG1xZV9zaXplOworCXVpbnQzMl90IG1xX2VsZW1fY250OworCXVpbnQzMl90IHdxX3BhZ2VzX21heDsKKwl1aW50MzJfdCB3cWVfc2l6ZTsKKwl1aW50MzJfdCBycV9wYWdlc19tYXg7CisJdWludDMyX3QgcnFlX3NpemU7CisJdWludDMyX3QgaGRyX3BhZ2VzX21heDsKKwl1aW50MzJfdCBoZHJfc2l6ZTsKKwl1aW50MzJfdCBoZHJfcHBfYWxpZ247CisJdWludDMyX3Qgc2dsX3BhZ2VzX21heDsKKwl1aW50MzJfdCBzZ2xfcHBfYWxpZ247Cit9OworCiAvKiBTTEk0IEhCQSBkYXRhIHN0cnVjdHVyZSBlbnRyaWVzICovCiBzdHJ1Y3QgbHBmY19zbGk0X2hiYSB7CiAJdm9pZCBfX2lvbWVtICpjb25mX3JlZ3NfbWVtbWFwX3A7IC8qIEtlcm5lbCBtZW1vcnkgbWFwcGVkIGFkZHJlc3MgZm9yCkBAIC0yOTUsNyArMzUwLDcgQEAKIAl2b2lkIF9faW9tZW0gKlVFUlJISXJlZ2FkZHI7IC8qIEFkZHJlc3MgdG8gVUVSUl9TVEFUVVNfSEkgcmVnaXN0ZXIgKi8KIAl2b2lkIF9faW9tZW0gKlVFTUFTS0xPcmVnYWRkcjsgLyogQWRkcmVzcyB0byBVRV9NQVNLX0xPIHJlZ2lzdGVyICovCiAJdm9pZCBfX2lvbWVtICpVRU1BU0tISXJlZ2FkZHI7IC8qIEFkZHJlc3MgdG8gVUVfTUFTS19ISSByZWdpc3RlciAqLwotCXZvaWQgX19pb21lbSAqU0NSQVRDSFBBRHJlZ2FkZHI7IC8qIEFkZHJlc3MgdG8gc2NyYXRjaHBhZCByZWdpc3RlciAqLworCXZvaWQgX19pb21lbSAqU0xJSU5URnJlZ2FkZHI7IC8qIEFkZHJlc3MgdG8gU0xJX0lOVEYgcmVnaXN0ZXIgKi8KIAkvKiBCQVIxIEZDb0UgZnVuY3Rpb24gQ1NSIHJlZ2lzdGVyIG1lbW9yeSBtYXAgKi8KIAl2b2lkIF9faW9tZW0gKlNUQXJlZ2FkZHI7ICAgIC8qIEFkZHJlc3MgdG8gSFNUX1NUQVRFIHJlZ2lzdGVyICovCiAJdm9pZCBfX2lvbWVtICpJU1JyZWdhZGRyOyAgICAvKiBBZGRyZXNzIHRvIEhTVF9JU1IgcmVnaXN0ZXIgKi8KQEAgLTMxMCw2ICszNjUsOCBAQAogCiAJdWludDMyX3QgdWVfbWFza19sbzsKIAl1aW50MzJfdCB1ZV9tYXNrX2hpOworCXN0cnVjdCBscGZjX3JlZ2lzdGVyIHNsaV9pbnRmOworCXN0cnVjdCBscGZjX3BjX3NsaTRfcGFyYW1zIHBjX3NsaTRfcGFyYW1zOwogCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X2VudHJpZXM7CiAJdWludDMyX3QgY2ZnX2VxbjsKIAlzdHJ1Y3QgbHBmY19mY3BfZXFfaGRsICpmY3BfZXFfaGRsOyAvKiBGQ1AgcGVyLVdRIGhhbmRsZSAqLwpAQCAtNDA2LDYgKzQ2Myw4IEBACiB2b2lkIGxwZmNfc2xpNF9tYnhfc2dlX3NldChzdHJ1Y3QgbHBmY01ib3hxICosIHVpbnQzMl90LCBkbWFfYWRkcl90LCB1aW50MzJfdCk7CiB2b2lkIGxwZmNfc2xpNF9tYnhfc2dlX2dldChzdHJ1Y3QgbHBmY01ib3hxICosIHVpbnQzMl90LAogCQkJICAgc3RydWN0IGxwZmNfbWJ4X3NnZSAqKTsKK2ludCBscGZjX3NsaTRfbWJ4X3JlYWRfZmNmX3JlY29yZChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNNYm94cSAqLAorCQkJCSAgdWludDE2X3QpOwogCiB2b2lkIGxwZmNfc2xpNF9oYmFfcmVzZXQoc3RydWN0IGxwZmNfaGJhICopOwogc3RydWN0IGxwZmNfcXVldWUgKmxwZmNfc2xpNF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDMyX3QsCkBAIC00NDgsNiArNTA3LDcgQEAKIHZvaWQgbHBmY19zbGk0X2ZyZWVfcnBpKHN0cnVjdCBscGZjX2hiYSAqLCBpbnQpOwogdm9pZCBscGZjX3NsaTRfcmVtb3ZlX3JwaXMoc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX3NsaTRfYXN5bmNfZXZlbnRfcHJvYyhzdHJ1Y3QgbHBmY19oYmEgKik7Cit2b2lkIGxwZmNfc2xpNF9mY2ZfcmVkaXNjX2V2ZW50X3Byb2Moc3RydWN0IGxwZmNfaGJhICopOwogaW50IGxwZmNfc2xpNF9yZXN1bWVfcnBpKHN0cnVjdCBscGZjX25vZGVsaXN0ICopOwogdm9pZCBscGZjX3NsaTRfZmNwX3hyaV9hYm9ydF9ldmVudF9wcm9jKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19zbGk0X2Vsc194cmlfYWJvcnRfZXZlbnRfcHJvYyhzdHJ1Y3QgbHBmY19oYmEgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCmluZGV4IDc5MmY3MjIuLmFjMjc2YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0xOCw3ICsxOCw3IEBACiAgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgTFBGQ19EUklWRVJfVkVSU0lPTiAiOC4zLjciCisjZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMy45IgogI2RlZmluZSBMUEZDX0RSSVZFUl9OQU1FCQkibHBmYyIKICNkZWZpbmUgTFBGQ19TUF9EUklWRVJfSEFORExFUl9OQU1FCSJscGZjOnNwIgogI2RlZmluZSBMUEZDX0ZQX0RSSVZFUl9IQU5ETEVSX05BTUUJImxwZmM6ZnAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMKaW5kZXggZTNjN2ZhNi4uZGM4NmU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYwpAQCAtMzg5LDcgKzM4OSw3IEBACiAJICogYnkgdGhlIHBvcnQuCiAJICovCiAJaWYgKChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpICYmCi0JICAgIChwcG9ydC0+dnBpX3N0YXRlICYgTFBGQ19WUElfUkVHSVNURVJFRCkpIHsKKwkJKHBwb3J0LT5mY19mbGFnICYgRkNfVkZJX1JFR0lTVEVSRUQpKSB7CiAJCXJjID0gbHBmY19zbGk0X2luaXRfdnBpKHBoYmEsIHZwaSk7CiAJCWlmIChyYykgewogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfVlBPUlQsCkBAIC01MDUsNiArNTA1LDcgQEAKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAqKHN0cnVjdCBscGZjX3Zwb3J0ICoqKWZjX3Zwb3J0LT5kZF9kYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSBOVUxMOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKIAogCWlmICgocGhiYS0+bGlua19zdGF0ZSA8IExQRkNfTElOS19VUCkgfHwKIAkgICAgKHBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1ApKSB7CkBAIC01MTIsMTAgKzUxMywxMCBAQAogCQlyZXR1cm4gVlBPUlRfT0s7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl2cG9ydC0+bG9hZF9mbGFnIHw9IEZDX0xPQURJTkc7CiAJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSTsKLQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAogCS8qIFVzZSB0aGUgUGh5c2ljYWwgbm9kZXMgRmFicmljIE5ETFAgdG8gZGV0ZXJtaW5lIGlmIHRoZSBsaW5rIGlzCiAJICogdXAgYW5kIHJlYWR5IHRvIEZESVNDLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21hY19lc3AuYyBiL2RyaXZlcnMvc2NzaS9tYWNfZXNwLmMKaW5kZXggYzI0ZTg2Zi4uNGE5MGVhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21hY19lc3AuYworKysgYi9kcml2ZXJzL3Njc2kvbWFjX2VzcC5jCkBAIC0yMiw3ICsyMiw2IEBACiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgotCiAjaW5jbHVkZSA8YXNtL21hY2ludHMuaD4KICNpbmNsdWRlIDxhc20vbWFjaW50b3NoLmg+CiAKQEAgLTUzLDcgKzUyLDYgQEAKIAl2b2lkIF9faW9tZW0gKnBkbWFfaW87CiAJaW50IGVycm9yOwogfTsKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppbnRlcm5hbF9wZGV2LCAqZXh0ZXJuYWxfcGRldjsKIHN0YXRpYyBzdHJ1Y3QgZXNwICplc3BfY2hpcHNbMl07CiAKICNkZWZpbmUgTUFDX0VTUF9HRVRfUFJJVihlc3ApICgoc3RydWN0IG1hY19lc3BfcHJpdiAqKSBcCkBAIC0yNzksMjQgKzI3NywyNyBAQAogICogUHJvZ3JhbW1lZCBJTyByb3V0aW5lcyBmb2xsb3cuCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgbWFjX2VzcF93YWl0X2Zvcl9maWZvKHN0cnVjdCBlc3AgKmVzcCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1hY19lc3Bfd2FpdF9mb3JfZmlmbyhzdHJ1Y3QgZXNwICplc3ApCiB7CiAJaW50IGkgPSA1MDAwMDA7CiAKIAlkbyB7Ci0JCWlmIChlc3BfcmVhZDgoRVNQX0ZGTEFHUykgJiBFU1BfRkZfRkJZVEVTKQotCQkJcmV0dXJuIDA7CisJCXVuc2lnbmVkIGludCBmYnl0ZXMgPSBlc3BfcmVhZDgoRVNQX0ZGTEFHUykgJiBFU1BfRkZfRkJZVEVTOworCisJCWlmIChmYnl0ZXMpCisJCQlyZXR1cm4gZmJ5dGVzOwogCiAJCXVkZWxheSgyKTsKIAl9IHdoaWxlICgtLWkpOwogCiAJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRklGTyBpcyBlbXB0eSAoc3JlZyAlMDJ4KVxuIiwKIAkgICAgICAgZXNwX3JlYWQ4KEVTUF9TVEFUVVMpKTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbWFjX2VzcF93YWl0X2Zvcl9pbnRyKHN0cnVjdCBlc3AgKmVzcCkKIHsKKwlzdHJ1Y3QgbWFjX2VzcF9wcml2ICptZXAgPSBNQUNfRVNQX0dFVF9QUklWKGVzcCk7CiAJaW50IGkgPSA1MDAwMDA7CiAKIAlkbyB7CkBAIC0zMDgsNiArMzA5LDcgQEAKIAl9IHdoaWxlICgtLWkpOwogCiAJcHJpbnRrKEtFUk5fRVJSIFBGWCAiSVJRIHRpbWVvdXQgKHNyZWcgJTAyeClcbiIsIGVzcC0+c3JlZyk7CisJbWVwLT5lcnJvciA9IDE7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTM0NywxMSArMzQ5LDEwIEBACiBzdGF0aWMgdm9pZCBtYWNfZXNwX3NlbmRfcGlvX2NtZChzdHJ1Y3QgZXNwICplc3AsIHUzMiBhZGRyLCB1MzIgZXNwX2NvdW50LAogCQkJCSB1MzIgZG1hX2NvdW50LCBpbnQgd3JpdGUsIHU4IGNtZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBtYWNfZXNwX3ByaXYgKm1lcCA9IE1BQ19FU1BfR0VUX1BSSVYoZXNwKTsKIAl1OCAqZmlmbyA9IGVzcC0+cmVncyArIEVTUF9GREFUQSAqIDE2OwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWRpc2FibGVfaXJxKGVzcC0+aG9zdC0+aXJxKTsKIAogCWNtZCAmPSB+RVNQX0NNRF9ETUE7CiAJbWVwLT5lcnJvciA9IDA7CkBAIC0zNTksMTEgKzM2MCwzNSBAQAogCWlmICh3cml0ZSkgewogCQlzY3NpX2VzcF9jbWQoZXNwLCBjbWQpOwogCi0JCWlmICghbWFjX2VzcF93YWl0X2Zvcl9pbnRyKGVzcCkpIHsKLQkJCWlmIChtYWNfZXNwX3dhaXRfZm9yX2ZpZm8oZXNwKSkKLQkJCQllc3BfY291bnQgPSAwOwotCQl9IGVsc2UgewotCQkJZXNwX2NvdW50ID0gMDsKKwkJd2hpbGUgKDEpIHsKKwkJCXVuc2lnbmVkIGludCBuOworCisJCQluID0gbWFjX2VzcF93YWl0X2Zvcl9maWZvKGVzcCk7CisJCQlpZiAoIW4pCisJCQkJYnJlYWs7CisKKwkJCWlmIChuID4gZXNwX2NvdW50KQorCQkJCW4gPSBlc3BfY291bnQ7CisJCQllc3BfY291bnQgLT0gbjsKKworCQkJTUFDX0VTUF9QSU9fTE9PUCgiJTJALCUwQCsiLCBuKTsKKworCQkJaWYgKCFlc3BfY291bnQpCisJCQkJYnJlYWs7CisKKwkJCWlmIChtYWNfZXNwX3dhaXRfZm9yX2ludHIoZXNwKSkKKwkJCQlicmVhazsKKworCQkJaWYgKCgoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spICE9IEVTUF9ESVApICYmCisJCQkgICAgKChlc3AtPnNyZWcgJiBFU1BfU1RBVF9QTUFTSykgIT0gRVNQX01JUCkpCisJCQkJYnJlYWs7CisKKwkJCWVzcC0+aXJlZyA9IGVzcF9yZWFkOChFU1BfSU5UUlBUKTsKKwkJCWlmICgoZXNwLT5pcmVnICYgKEVTUF9JTlRSX0RDIHwgRVNQX0lOVFJfQlNFUlYpKSAhPQorCQkJICAgIEVTUF9JTlRSX0JTRVJWKQorCQkJCWJyZWFrOworCisJCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX1RJKTsKIAkJfQogCX0gZWxzZSB7CiAJCXNjc2lfZXNwX2NtZChlc3AsIEVTUF9DTURfRkxVU0gpOwpAQCAtMzc0LDQ3ICszOTksMjQgQEAKIAkJCU1BQ19FU1BfUElPX0xPT1AoIiUwQCssJTJAIiwgZXNwX2NvdW50KTsKIAogCQlzY3NpX2VzcF9jbWQoZXNwLCBjbWQpOwotCX0KIAotCXdoaWxlIChlc3BfY291bnQpIHsKLQkJdW5zaWduZWQgaW50IG47CisJCXdoaWxlIChlc3BfY291bnQpIHsKKwkJCXVuc2lnbmVkIGludCBuOwogCi0JCWlmIChtYWNfZXNwX3dhaXRfZm9yX2ludHIoZXNwKSkgewotCQkJbWVwLT5lcnJvciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChlc3AtPnNyZWcgJiBFU1BfU1RBVF9TUEFNKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJncm9zcyBlcnJvclxuIik7Ci0JCQltZXAtPmVycm9yID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJbiA9IGVzcF9yZWFkOChFU1BfRkZMQUdTKSAmIEVTUF9GRl9GQllURVM7Ci0KLQkJaWYgKHdyaXRlKSB7Ci0JCQlpZiAobiA+IGVzcF9jb3VudCkKLQkJCQluID0gZXNwX2NvdW50OwotCQkJZXNwX2NvdW50IC09IG47Ci0KLQkJCU1BQ19FU1BfUElPX0xPT1AoIiUyQCwlMEArIiwgbik7Ci0KLQkJCWlmICgoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spID09IEVTUF9TVEFUUCkKKwkJCWlmIChtYWNfZXNwX3dhaXRfZm9yX2ludHIoZXNwKSkKIAkJCQlicmVhazsKIAotCQkJaWYgKGVzcF9jb3VudCkgewotCQkJCWVzcC0+aXJlZyA9IGVzcF9yZWFkOChFU1BfSU5UUlBUKTsKLQkJCQlpZiAoZXNwLT5pcmVnICYgRVNQX0lOVFJfREMpCi0JCQkJCWJyZWFrOworCQkJaWYgKCgoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spICE9IEVTUF9ET1ApICYmCisJCQkgICAgKChlc3AtPnNyZWcgJiBFU1BfU1RBVF9QTUFTSykgIT0gRVNQX01PUCkpCisJCQkJYnJlYWs7CiAKLQkJCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX1RJKTsKLQkJCX0KLQkJfSBlbHNlIHsKIAkJCWVzcC0+aXJlZyA9IGVzcF9yZWFkOChFU1BfSU5UUlBUKTsKLQkJCWlmIChlc3AtPmlyZWcgJiBFU1BfSU5UUl9EQykKKwkJCWlmICgoZXNwLT5pcmVnICYgKEVTUF9JTlRSX0RDIHwgRVNQX0lOVFJfQlNFUlYpKSAhPQorCQkJICAgIEVTUF9JTlRSX0JTRVJWKQogCQkJCWJyZWFrOwogCi0JCQluID0gTUFDX0VTUF9GSUZPX1NJWkUgLSBuOworCQkJbiA9IE1BQ19FU1BfRklGT19TSVpFIC0KKwkJCSAgICAoZXNwX3JlYWQ4KEVTUF9GRkxBR1MpICYgRVNQX0ZGX0ZCWVRFUyk7CiAJCQlpZiAobiA+IGVzcF9jb3VudCkKIAkJCQluID0gZXNwX2NvdW50OwogCkBAIC00MjksNyArNDMxLDcgQEAKIAkJfQogCX0KIAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwllbmFibGVfaXJxKGVzcC0+aG9zdC0+aXJxKTsKIH0KIAogc3RhdGljIGludCBtYWNfZXNwX2lycV9wZW5kaW5nKHN0cnVjdCBlc3AgKmVzcCkKQEAgLTQ5MiwyOSArNDk0LDEyIEBACiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgZXNwICplc3A7CiAJaW50IGVycjsKLQlpbnQgY2hpcHNfcHJlc2VudDsKIAlzdHJ1Y3QgbWFjX2VzcF9wcml2ICptZXA7CiAKIAlpZiAoIU1BQ0hfSVNfTUFDKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy0+c2NzaV90eXBlKSB7Ci0JY2FzZSBNQUNfU0NTSV9RVUFEUkE6Ci0JY2FzZSBNQUNfU0NTSV9RVUFEUkEzOgotCQljaGlwc19wcmVzZW50ID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBNQUNfU0NTSV9RVUFEUkEyOgotCQlpZiAoKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9ROTAwKSB8fAotCQkgICAgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9ROTUwKSkKLQkJCWNoaXBzX3ByZXNlbnQgPSAyOwotCQllbHNlCi0JCQljaGlwc19wcmVzZW50ID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJY2hpcHNfcHJlc2VudCA9IDA7Ci0JfQotCi0JaWYgKGRldi0+aWQgKyAxID4gY2hpcHNfcHJlc2VudCkKKwlpZiAoZGV2LT5pZCA+IDEpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaG9zdCA9IHNjc2lfaG9zdF9hbGxvYyh0cG50LCBzaXplb2Yoc3RydWN0IGVzcCkpOwpAQCAtNjM5LDU1ICs2MjQsMjYgQEAKIAkucHJvYmUgICAgPSBlc3BfbWFjX3Byb2JlLAogCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKGVzcF9tYWNfcmVtb3ZlKSwKIAkuZHJpdmVyICAgPSB7Ci0JCS5uYW1lICAgICA9IERSVl9NT0RVTEVfTkFNRSwKKwkJLm5hbWUJPSBEUlZfTU9EVUxFX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtYWNfZXNwX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyOwotCi0JZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlc3BfbWFjX2RyaXZlcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWludGVybmFsX3BkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoRFJWX01PRFVMRV9OQU1FLCAwKTsKLQlpZiAoaW50ZXJuYWxfcGRldiAmJiBwbGF0Zm9ybV9kZXZpY2VfYWRkKGludGVybmFsX3BkZXYpKSB7Ci0JCXBsYXRmb3JtX2RldmljZV9wdXQoaW50ZXJuYWxfcGRldik7Ci0JCWludGVybmFsX3BkZXYgPSBOVUxMOwotCX0KLQlleHRlcm5hbF9wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKERSVl9NT0RVTEVfTkFNRSwgMSk7Ci0JaWYgKGV4dGVybmFsX3BkZXYgJiYgcGxhdGZvcm1fZGV2aWNlX2FkZChleHRlcm5hbF9wZGV2KSkgewotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGV4dGVybmFsX3BkZXYpOwotCQlleHRlcm5hbF9wZGV2ID0gTlVMTDsKLQl9Ci0KLQlpZiAoaW50ZXJuYWxfcGRldiB8fCBleHRlcm5hbF9wZGV2KSB7Ci0JCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZlc3BfbWFjX2RyaXZlcik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlc3BfbWFjX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYWNfZXNwX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXNwX21hY19kcml2ZXIpOwotCi0JaWYgKGludGVybmFsX3BkZXYpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoaW50ZXJuYWxfcGRldik7Ci0JCWludGVybmFsX3BkZXYgPSBOVUxMOwotCX0KLQlpZiAoZXh0ZXJuYWxfcGRldikgewotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihleHRlcm5hbF9wZGV2KTsKLQkJZXh0ZXJuYWxfcGRldiA9IE5VTEw7Ci0JfQogfQogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk1hYyBFU1AgU0NTSSBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkZpbm4gVGhhaW4gPGZ0aGFpbkB0ZWxlZ3JhcGhpY3MuY29tLmF1PiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9NT0RVTEVfTkFNRSk7CiAKIG1vZHVsZV9pbml0KG1hY19lc3BfaW5pdCk7CiBtb2R1bGVfZXhpdChtYWNfZXNwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCmluZGV4IDcwOGVhMzEuLjQwOTY0OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqCSAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICogRklMRQkJOiBtZWdhcmFpZF9zYXMuYwotICogVmVyc2lvbiAgICAgOiB2MDAuMDAuMDQuMTItcmMxCisgKiBWZXJzaW9uICAgICA6IHYwMC4wMC4wNC4xNy4xLXJjMQogICoKICAqIEF1dGhvcnM6CiAgKgkoZW1haWwtaWQgOiBtZWdhcmFpZGxpbnV4QGxzaS5jb20pCkBAIC04NDMsNiArODQzLDcgQEAKIAlwdGhydS0+bHVuID0gc2NwLT5kZXZpY2UtPmx1bjsKIAlwdGhydS0+Y2RiX2xlbiA9IHNjcC0+Y21kX2xlbjsKIAlwdGhydS0+dGltZW91dCA9IDA7CisJcHRocnUtPnBhZF8wID0gMDsKIAlwdGhydS0+ZmxhZ3MgPSBmbGFnczsKIAlwdGhydS0+ZGF0YV94ZmVyX2xlbiA9IHNjc2lfYnVmZmxlbihzY3ApOwogCkBAIC04NzQsNiArODc1LDEyIEBACiAJCXB0aHJ1LT5zZ2VfY291bnQgPSBtZWdhc2FzX21ha2Vfc2dsMzIoaW5zdGFuY2UsIHNjcCwKIAkJCQkJCSAgICAgICZwdGhydS0+c2dsKTsKIAorCWlmIChwdGhydS0+c2dlX2NvdW50ID4gaW5zdGFuY2UtPm1heF9udW1fc2dlKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogRENEQiB0d28gbWFueSBTR0UgTlVNPSV4XG4iLAorCQkJcHRocnUtPnNnZV9jb3VudCk7CisJCXJldHVybiAwOworCX0KKwogCS8qCiAJICogU2Vuc2UgaW5mbyBzcGVjaWZpYwogCSAqLwpAQCAtMTAwMCw2ICsxMDA3LDEyIEBACiAJfSBlbHNlCiAJCWxkaW8tPnNnZV9jb3VudCA9IG1lZ2FzYXNfbWFrZV9zZ2wzMihpbnN0YW5jZSwgc2NwLCAmbGRpby0+c2dsKTsKIAorCWlmIChsZGlvLT5zZ2VfY291bnQgPiBpbnN0YW5jZS0+bWF4X251bV9zZ2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBidWlsZF9sZF9pbzogc2dlX2NvdW50ID0gJXhcbiIsCisJCQlsZGlvLT5zZ2VfY291bnQpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKgogCSAqIFNlbnNlIGluZm8gc3BlY2lmaWMKIAkgKi8KQEAgLTIyNTAsNiArMjI2Myw3IEBACiAJZGNtZC0+c2dlX2NvdW50ID0gMTsKIAlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKIAlkY21kLT50aW1lb3V0ID0gMDsKKwlkY21kLT5wYWRfMCA9IDA7CiAJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IE1FR0FTQVNfTUFYX1BEICogc2l6ZW9mKHN0cnVjdCBNUl9QRF9MSVNUKTsKIAlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX1BEX0xJU1RfUVVFUlk7CiAJZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9IGNpX2g7CkBAIC0yMjk0LDYgKzIzMDgsODYgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogbWVnYXNhc19nZXRfbGRfbGlzdF9pbmZvIC0JUmV0dXJucyBGVydzIGxkX2xpc3Qgc3RydWN0dXJlCisgKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGxkX2xpc3Q6CQkJCWxkX2xpc3Qgc3RydWN0dXJlCisgKgorICogSXNzdWVzIGFuIGludGVybmFsIGNvbW1hbmQgKERDTUQpIHRvIGdldCB0aGUgRlcncyBjb250cm9sbGVyIFBECisgKiBsaXN0IHN0cnVjdHVyZS4gIFRoaXMgaW5mb3JtYXRpb24gaXMgbWFpbmx5IHVzZWQgdG8gZmluZCBvdXQgU1lTVEVNCisgKiBzdXBwb3J0ZWQgYnkgdGhlIEZXLgorICovCitzdGF0aWMgaW50CittZWdhc2FzX2dldF9sZF9saXN0KHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlpbnQgcmV0ID0gMCwgbGRfaW5kZXggPSAwLCBpZHMgPSAwOworCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOworCXN0cnVjdCBtZWdhc2FzX2RjbWRfZnJhbWUgKmRjbWQ7CisJc3RydWN0IE1SX0xEX0xJU1QgKmNpOworCWRtYV9hZGRyX3QgY2lfaCA9IDA7CisKKwljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOworCisJaWYgKCFjbWQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXNfZ2V0X2xkX2xpc3Q6IEZhaWxlZCB0byBnZXQgY21kXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOworCisJY2kgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwKKwkJCQlzaXplb2Yoc3RydWN0IE1SX0xEX0xJU1QpLAorCQkJCSZjaV9oKTsKKworCWlmICghY2kpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkZhaWxlZCB0byBhbGxvYyBtZW0gaW4gZ2V0X2xkX2xpc3RcbiIpOworCQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChjaSwgMCwgc2l6ZW9mKCpjaSkpOworCW1lbXNldChkY21kLT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJWkUpOworCisJZGNtZC0+Y21kID0gTUZJX0NNRF9EQ01EOworCWRjbWQtPmNtZF9zdGF0dXMgPSAweEZGOworCWRjbWQtPnNnZV9jb3VudCA9IDE7CisJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7CisJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgTVJfTERfTElTVCk7CisJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9MRF9HRVRfTElTVDsKKwlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gY2lfaDsKKwlkY21kLT5zZ2wuc2dlMzJbMF0ubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBNUl9MRF9MSVNUKTsKKwlkY21kLT5wYWRfMCAgPSAwOworCisJaWYgKCFtZWdhc2FzX2lzc3VlX3BvbGxlZChpbnN0YW5jZSwgY21kKSkgeworCQlyZXQgPSAwOworCX0gZWxzZSB7CisJCXJldCA9IC0xOworCX0KKworCS8qIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIGluc3RhbmNlIFBEIExJU1QgKi8KKworCWlmICgocmV0ID09IDApICYmIChjaS0+bGRDb3VudCA8IE1BWF9MT0dJQ0FMX0RSSVZFUykpIHsKKwkJbWVtc2V0KGluc3RhbmNlLT5sZF9pZHMsIDB4ZmYsIE1FR0FTQVNfTUFYX0xEX0lEUyk7CisKKwkJZm9yIChsZF9pbmRleCA9IDA7IGxkX2luZGV4IDwgY2ktPmxkQ291bnQ7IGxkX2luZGV4KyspIHsKKwkJCWlmIChjaS0+bGRMaXN0W2xkX2luZGV4XS5zdGF0ZSAhPSAwKSB7CisJCQkJaWRzID0gY2ktPmxkTGlzdFtsZF9pbmRleF0ucmVmLnRhcmdldElkOworCQkJCWluc3RhbmNlLT5sZF9pZHNbaWRzXSA9CisJCQkJCWNpLT5sZExpc3RbbGRfaW5kZXhdLnJlZi50YXJnZXRJZDsKKwkJCX0KKwkJfQorCX0KKworCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW5zdGFuY2UtPnBkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBNUl9MRF9MSVNUKSwKKwkJCQljaSwKKwkJCQljaV9oKTsKKworCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKioKICAqIG1lZ2FzYXNfZ2V0X2NvbnRyb2xsZXJfaW5mbyAtCVJldHVybnMgRlcncyBjb250cm9sbGVyIHN0cnVjdHVyZQogICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKQEAgLTIzMzksNiArMjQzMyw3IEBACiAJZGNtZC0+c2dlX2NvdW50ID0gMTsKIAlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKIAlkY21kLT50aW1lb3V0ID0gMDsKKwlkY21kLT5wYWRfMCA9IDA7CiAJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8pOwogCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfQ1RSTF9HRVRfSU5GTzsKIAlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gY2lfaDsKQEAgLTI1OTAsNiArMjY4NSw5IEBACiAJCShNRUdBU0FTX01BWF9QRCAqIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19wZF9saXN0KSkpOwogCW1lZ2FzYXNfZ2V0X3BkX2xpc3QoaW5zdGFuY2UpOwogCisJbWVtc2V0KGluc3RhbmNlLT5sZF9pZHMsIDB4ZmYsIE1FR0FTQVNfTUFYX0xEX0lEUyk7CisJbWVnYXNhc19nZXRfbGRfbGlzdChpbnN0YW5jZSk7CisKIAljdHJsX2luZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8pLCBHRlBfS0VSTkVMKTsKIAogCS8qCkBAIC0yNzE0LDYgKzI4MTIsNyBAQAogCWRjbWQtPnNnZV9jb3VudCA9IDE7CiAJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7CiAJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOwogCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2xvZ19pbmZvKTsKIAlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX0NUUkxfRVZFTlRfR0VUX0lORk87CiAJZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9IGVsX2luZm9faDsKQEAgLTI4MjgsNiArMjkyNyw3IEBACiAJZGNtZC0+c2dlX2NvdW50ID0gMTsKIAlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKIAlkY21kLT50aW1lb3V0ID0gMDsKKwlkY21kLT5wYWRfMCA9IDA7CiAJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWVnYXNhc19ldnRfZGV0YWlsKTsKIAlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX0NUUkxfRVZFTlRfV0FJVDsKIAlkY21kLT5tYm94LndbMF0gPSBzZXFfbnVtOwpAQCAtMzE2Niw2ICszMjY2LDcgQEAKIAlkY21kLT5zZ2VfY291bnQgPSAwOwogCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9OT05FOwogCWRjbWQtPnRpbWVvdXQgPSAwOworCWRjbWQtPnBhZF8wID0gMDsKIAlkY21kLT5kYXRhX3hmZXJfbGVuID0gMDsKIAlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX0NUUkxfQ0FDSEVfRkxVU0g7CiAJZGNtZC0+bWJveC5iWzBdID0gTVJfRkxVU0hfQ1RSTF9DQUNIRSB8IE1SX0ZMVVNIX0RJU0tfQ0FDSEU7CkBAIC0zMjA1LDYgKzMzMDYsNyBAQAogCWRjbWQtPnNnZV9jb3VudCA9IDA7CiAJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX05PTkU7CiAJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOwogCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSAwOwogCWRjbWQtPm9wY29kZSA9IG9wY29kZTsKIApAQCAtMzc4MSw2ICszODgzLDcgQEAKIAkgICAgY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2lvY3BhY2tldCkpOwogCWludCBpOwogCWludCBlcnJvciA9IDA7CisJY29tcGF0X3VwdHJfdCBwdHI7CiAKIAlpZiAoY2xlYXJfdXNlcihpb2MsIHNpemVvZigqaW9jKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMzc5Myw5ICszODk2LDIyIEBACiAJICAgIGNvcHlfaW5fdXNlcigmaW9jLT5zZ2VfY291bnQsICZjaW9jLT5zZ2VfY291bnQsIHNpemVvZih1MzIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0lPQ1RMX1NHRTsgaSsrKSB7Ci0JCWNvbXBhdF91cHRyX3QgcHRyOworCS8qCisJICogVGhlIHNlbnNlX3B0ciBpcyB1c2VkIGluIG1lZ2FzYXNfbWdtdF9md19pb2N0bCBvbmx5IHdoZW4KKwkgKiBzZW5zZV9sZW4gaXMgbm90IG51bGwsIHNvIHByZXBhcmUgdGhlIDY0Yml0IHZhbHVlIHVuZGVyCisJICogdGhlIHNhbWUgY29uZGl0aW9uLgorCSAqLworCWlmIChpb2MtPnNlbnNlX2xlbikgeworCQl2b2lkIF9fdXNlciAqKnNlbnNlX2lvY19wdHIgPQorCQkJKHZvaWQgX191c2VyICoqKShpb2MtPmZyYW1lLnJhdyArIGlvYy0+c2Vuc2Vfb2ZmKTsKKwkJY29tcGF0X3VwdHJfdCAqc2Vuc2VfY2lvY19wdHIgPQorCQkJKGNvbXBhdF91cHRyX3QgKikoY2lvYy0+ZnJhbWUucmF3ICsgY2lvYy0+c2Vuc2Vfb2ZmKTsKKwkJaWYgKGdldF91c2VyKHB0ciwgc2Vuc2VfY2lvY19wdHIpIHx8CisJCSAgICBwdXRfdXNlcihjb21wYXRfcHRyKHB0ciksIHNlbnNlX2lvY19wdHIpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQogCisJZm9yIChpID0gMDsgaSA8IE1BWF9JT0NUTF9TR0U7IGkrKykgewogCQlpZiAoZ2V0X3VzZXIocHRyLCAmY2lvYy0+c2dsW2ldLmlvdl9iYXNlKSB8fAogCQkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihwdHIpLCAmaW9jLT5zZ2xbaV0uaW92X2Jhc2UpIHx8CiAJCSAgICBjb3B5X2luX3VzZXIoJmlvYy0+c2dsW2ldLmlvdl9sZW4sCkBAIC0zOTcwLDYgKzQwODYsNyBAQAogCXN0cnVjdCAgU2NzaV9Ib3N0ICpob3N0OwogCXN0cnVjdCAgc2NzaV9kZXZpY2UgKnNkZXYxOwogCXUxNiAgICAgcGRfaW5kZXggPSAwOworCXUxNglsZF9pbmRleCA9IDA7CiAJaW50ICAgICBpLCBqLCBkb3NjYW4gPSAwOwogCXUzMiBzZXFfbnVtOwogCWludCBlcnJvcjsKQEAgLTM5ODUsOCArNDEwMiwxMjQgQEAKIAogCQlzd2l0Y2ggKGluc3RhbmNlLT5ldnRfZGV0YWlsLT5jb2RlKSB7CiAJCWNhc2UgTVJfRVZUX1BEX0lOU0VSVEVEOgorCQkJaWYgKG1lZ2FzYXNfZ2V0X3BkX2xpc3QoaW5zdGFuY2UpID09IDApIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBNRUdBU0FTX01BWF9QRF9DSEFOTkVMUzsgaSsrKSB7CisJCQkJZm9yIChqID0gMDsKKwkJCQlqIDwgTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOworCQkJCWorKykgeworCisJCQkJcGRfaW5kZXggPQorCQkJCShpICogTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMKSArIGo7CisKKwkJCQlzZGV2MSA9CisJCQkJc2NzaV9kZXZpY2VfbG9va3VwKGhvc3QsIGksIGosIDApOworCisJCQkJaWYgKGluc3RhbmNlLT5wZF9saXN0W3BkX2luZGV4XS5kcml2ZVN0YXRlCisJCQkJCQk9PSBNUl9QRF9TVEFURV9TWVNURU0pIHsKKwkJCQkJCWlmICghc2RldjEpIHsKKwkJCQkJCXNjc2lfYWRkX2RldmljZShob3N0LCBpLCBqLCAwKTsKKwkJCQkJCX0KKworCQkJCQlpZiAoc2RldjEpCisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJfQorCQkJZG9zY2FuID0gMDsKKwkJCWJyZWFrOworCiAJCWNhc2UgTVJfRVZUX1BEX1JFTU9WRUQ6CisJCQlpZiAobWVnYXNhc19nZXRfcGRfbGlzdChpbnN0YW5jZSkgPT0gMCkgeworCQkJbWVnYXNhc19nZXRfcGRfbGlzdChpbnN0YW5jZSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgTUVHQVNBU19NQVhfUERfQ0hBTk5FTFM7IGkrKykgeworCQkJCWZvciAoaiA9IDA7CisJCQkJaiA8IE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsKKwkJCQlqKyspIHsKKworCQkJCXBkX2luZGV4ID0KKwkJCQkoaSAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKyBqOworCisJCQkJc2RldjEgPQorCQkJCXNjc2lfZGV2aWNlX2xvb2t1cChob3N0LCBpLCBqLCAwKTsKKworCQkJCWlmIChpbnN0YW5jZS0+cGRfbGlzdFtwZF9pbmRleF0uZHJpdmVTdGF0ZQorCQkJCQk9PSBNUl9QRF9TVEFURV9TWVNURU0pIHsKKwkJCQkJaWYgKHNkZXYxKSB7CisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHNkZXYxKSB7CisJCQkJCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2RldjEpOworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0KKwkJCQl9CisJCQl9CisJCQl9CisJCQlkb3NjYW4gPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBNUl9FVlRfTERfT0ZGTElORToKKwkJY2FzZSBNUl9FVlRfTERfREVMRVRFRDoKKwkJCW1lZ2FzYXNfZ2V0X2xkX2xpc3QoaW5zdGFuY2UpOworCQkJZm9yIChpID0gMDsgaSA8IE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTOyBpKyspIHsKKwkJCQlmb3IgKGogPSAwOworCQkJCWogPCBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7CisJCQkJaisrKSB7CisKKwkJCQlsZF9pbmRleCA9CisJCQkJKGkgKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpICsgajsKKworCQkJCXNkZXYxID0gc2NzaV9kZXZpY2VfbG9va3VwKGhvc3QsCisJCQkJCWkgKyBNRUdBU0FTX01BWF9MRF9DSEFOTkVMUywKKwkJCQkJaiwKKwkJCQkJMCk7CisKKwkJCQlpZiAoaW5zdGFuY2UtPmxkX2lkc1tsZF9pbmRleF0gIT0gMHhmZikgeworCQkJCQlpZiAoc2RldjEpIHsKKwkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoc2RldjEpIHsKKwkJCQkJCXNjc2lfcmVtb3ZlX2RldmljZShzZGV2MSk7CisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWRvc2NhbiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBNUl9FVlRfTERfQ1JFQVRFRDoKKwkJCW1lZ2FzYXNfZ2V0X2xkX2xpc3QoaW5zdGFuY2UpOworCQkJZm9yIChpID0gMDsgaSA8IE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTOyBpKyspIHsKKwkJCQlmb3IgKGogPSAwOworCQkJCQlqIDwgTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOworCQkJCQlqKyspIHsKKwkJCQkJbGRfaW5kZXggPQorCQkJCQkoaSAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKyBqOworCisJCQkJCXNkZXYxID0gc2NzaV9kZXZpY2VfbG9va3VwKGhvc3QsCisJCQkJCQlpK01FR0FTQVNfTUFYX0xEX0NIQU5ORUxTLAorCQkJCQkJaiwgMCk7CisKKwkJCQkJaWYgKGluc3RhbmNlLT5sZF9pZHNbbGRfaW5kZXhdICE9CisJCQkJCQkJCTB4ZmYpIHsKKwkJCQkJCWlmICghc2RldjEpIHsKKwkJCQkJCQlzY3NpX2FkZF9kZXZpY2UoaG9zdCwKKwkJCQkJCQkJaSArIDIsCisJCQkJCQkJCWosIDApOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWlmIChzZGV2MSkgeworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWRvc2NhbiA9IDA7CisJCQlicmVhazsKIAkJY2FzZSBNUl9FVlRfQ1RSTF9IT1NUX0JVU19TQ0FOX1JFUVVFU1RFRDoKKwkJY2FzZSBNUl9FVlRfRk9SRUlHTl9DRkdfSU1QT1JURUQ6CiAJCQlkb3NjYW4gPSAxOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC00MDIxLDYgKzQyNTQsMzEgQEAKIAkJCQl9CiAJCQl9CiAJCX0KKworCQltZWdhc2FzX2dldF9sZF9saXN0KGluc3RhbmNlKTsKKwkJZm9yIChpID0gMDsgaSA8IE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTOyBpKyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7IGorKykgeworCQkJCWxkX2luZGV4ID0KKwkJCQkoaSAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKyBqOworCisJCQkJc2RldjEgPSBzY3NpX2RldmljZV9sb29rdXAoaG9zdCwKKwkJCQkJaStNRUdBU0FTX01BWF9MRF9DSEFOTkVMUywgaiwgMCk7CisJCQkJaWYgKGluc3RhbmNlLT5sZF9pZHNbbGRfaW5kZXhdICE9IDB4ZmYpIHsKKwkJCQkJaWYgKCFzZGV2MSkgeworCQkJCQkJc2NzaV9hZGRfZGV2aWNlKGhvc3QsCisJCQkJCQkJCWkrMiwKKwkJCQkJCQkJaiwgMCk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHNkZXYxKSB7CisJCQkJCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2RldjEpOworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQogCX0KIAogCWlmICggaW5zdGFuY2UtPmFlbl9jbWQgIT0gTlVMTCApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAppbmRleCA3MmIyOGU0Li45ZDhiNmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCkBAIC0xOCw5ICsxOCw5IEBACiAvKgogICogTWVnYVJBSUQgU0FTIERyaXZlciBtZXRhIGRhdGEKICAqLwotI2RlZmluZSBNRUdBU0FTX1ZFUlNJT04JCQkJIjAwLjAwLjA0LjEyLXJjMSIKLSNkZWZpbmUgTUVHQVNBU19SRUxEQVRFCQkJCSJTZXAuIDE3LCAyMDA5IgotI2RlZmluZSBNRUdBU0FTX0VYVF9WRVJTSU9OCQkJIlRodSBTZXAuIDE3IDExOjQxOjUxIFBTVCAyMDA5IgorI2RlZmluZSBNRUdBU0FTX1ZFUlNJT04JCQkiMDAuMDAuMDQuMTcuMS1yYzEiCisjZGVmaW5lIE1FR0FTQVNfUkVMREFURQkJCSJPY3QuIDI5LCAyMDA5IgorI2RlZmluZSBNRUdBU0FTX0VYVF9WRVJTSU9OCQkiVGh1LiBPY3QuIDI5LCAxMTo0MTo1MSBQU1QgMjAwOSIKIAogLyoKICAqIERldmljZSBJRHMKQEAgLTExNyw2ICsxMTcsNyBAQAogI2RlZmluZSBNRklfQ01EX1NUUAkJCQkweDA4CiAKICNkZWZpbmUgTVJfRENNRF9DVFJMX0dFVF9JTkZPCQkJMHgwMTAxMDAwMAorI2RlZmluZSBNUl9EQ01EX0xEX0dFVF9MSVNUCQkJMHgwMzAxMDAwMAogCiAjZGVmaW5lIE1SX0RDTURfQ1RSTF9DQUNIRV9GTFVTSAkJMHgwMTEwMTAwMAogI2RlZmluZSBNUl9GTFVTSF9DVFJMX0NBQ0hFCQkJMHgwMQpAQCAtMzQ5LDYgKzM1MCwzMiBAQAogCXU4ICAgICAgICAgICAgIGRyaXZlU3RhdGU7CiB9IF9fcGFja2VkOwogCisgLyoKKyAqIGRlZmluZXMgdGhlIGxvZ2ljYWwgZHJpdmUgcmVmZXJlbmNlIHN0cnVjdHVyZQorICovCit1bmlvbiAgTVJfTERfUkVGIHsKKwlzdHJ1Y3QgeworCQl1OCAgICAgIHRhcmdldElkOworCQl1OCAgICAgIHJlc2VydmVkOworCQl1MTYgICAgIHNlcU51bTsKKwl9OworCXUzMiAgICAgcmVmOworfSBfX3BhY2tlZDsKKworLyoKKyAqIGRlZmluZXMgdGhlIGxvZ2ljYWwgZHJpdmUgbGlzdCBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IE1SX0xEX0xJU1QgeworCXUzMiAgICAgbGRDb3VudDsKKwl1MzIgICAgIHJlc2VydmVkOworCXN0cnVjdCB7CisJCXVuaW9uIE1SX0xEX1JFRiAgIHJlZjsKKwkJdTggICAgICAgICAgc3RhdGU7CisJCXU4ICAgICAgICAgIHJlc2VydmVkWzNdOworCQl1NjQgICAgICAgICBzaXplOworCX0gbGRMaXN0W01BWF9MT0dJQ0FMX0RSSVZFU107Cit9IF9fcGFja2VkOworCiAvKgogICogU0FTIGNvbnRyb2xsZXIgcHJvcGVydGllcwogICovCkBAIC02MzcsNiArNjY0LDggQEAKICNkZWZpbmUgTUVHQVNBU19NQVhfTEQJCQkJNjQKICNkZWZpbmUgTUVHQVNBU19NQVhfUEQgICAgICAgICAgICAgICAgICAgICAgICAgIChNRUdBU0FTX01BWF9QRF9DSEFOTkVMUyAqIFwKIAkJCQkJCU1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkKKyNkZWZpbmUgTUVHQVNBU19NQVhfTERfSURTCQkJKE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTICogXAorCQkJCQkJTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMKQogCiAjZGVmaW5lIE1FR0FTQVNfREJHX0xWTAkJCQkxCiAKQEAgLTExODcsNiArMTIxNiw3IEBACiAJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ19zZXQ7CiAKIAlzdHJ1Y3QgbWVnYXNhc19wZF9saXN0ICAgICAgICAgIHBkX2xpc3RbTUVHQVNBU19NQVhfUERdOworCXU4ICAgICBsZF9pZHNbTUVHQVNBU19NQVhfTERfSURTXTsKIAlzOCBpbml0X2lkOwogCiAJdTE2IG1heF9udW1fc2dlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcKaW5kZXggNzBjNGMyNC4uYmE4ZTEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnCkBAIC00NCw2ICs0NCw3IEBACiAJdHJpc3RhdGUgIkxTSSBNUFQgRnVzaW9uIFNBUyAyLjAgRGV2aWNlIERyaXZlciIKIAlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCiAJc2VsZWN0IFNDU0lfU0FTX0FUVFJTCisJc2VsZWN0IFJBSURfQVRUUlMKIAktLS1oZWxwLS0tCiAJVGhpcyBkcml2ZXIgc3VwcG9ydHMgUENJLUV4cHJlc3MgU0FTIDZHYi9zIEhvc3QgQWRhcHRlcnMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oCmluZGV4IDkxNDE2ODEuLjk5NThkODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaApAQCAtOCw3ICs4LDcgQEAKICAqICAgICAgICAgICAgICAgICAgc2NhdHRlci9nYXRoZXIgZm9ybWF0cy4KICAqICBDcmVhdGlvbiBEYXRlOiAgSnVuZSAyMSwgMjAwNgogICoKLSAqICBtcGkyLmggVmVyc2lvbjogIDAyLjAwLjEzCisgKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4xNAogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTUzLDYgKzUzLDEwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBieXRlcyByZXNlcnZlZC4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFJBSUQgQWNjZWxlcmF0b3IgZnVuY3Rpb25hbGl0eS4KICAqICAwNy0zMC0wOSAgMDIuMDAuMTMgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMTAtMjgtMDkgIDAyLjAwLjE0ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVNJLXggaW5kZXggbWFzayBhbmQgc2hpZnQgZm9yIFJlcGx5IFBvc3QgSG9zdAorICogICAgICAgICAgICAgICAgICAgICAgSW5kZXggcmVnaXN0ZXIuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBmdW5jdGlvbiBjb2RlIGZvciBIb3N0IEJhc2VkIERpc2NvdmVyeSBBY3Rpb24uCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC03OCw3ICs4Miw3IEBACiAjZGVmaW5lIE1QSTJfVkVSU0lPTl8wMl8wMCAgICAgICAgICAgICAgICAgICgweDAyMDApCiAKIC8qIHZlcnNpb25pbmcgZm9yIHRoaXMgTVBJIGhlYWRlciBzZXQgKi8KLSNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUICAgICAgICAgICAgKDB4MEQpCisjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVCAgICAgICAgICAgICgweDBFKQogI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX0RFViAgICAgICAgICAgICAoMHgwMCkKICNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUX01BU0sgICAgICAgKDB4RkYwMCkKICNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUX1NISUZUICAgICAgKDgpCkBAIC0yMzIsOSArMjM2LDEyIEBACiAjZGVmaW5lIE1QSTJfUkVQTFlfRlJFRV9IT1NUX0lOREVYX09GRlNFVCAgICAgICAoMHgwMDAwMDA0OCkKIAogLyoKLSAqIE9mZnNldCBmb3IgdGhlIFJlcGx5IERlc2NyaXB0b3IgUG9zdCBRdWV1ZQorICogRGVmaW5lcyBmb3IgdGhlIFJlcGx5IERlc2NyaXB0b3IgUG9zdCBRdWV1ZQogICovCiAjZGVmaW5lIE1QSTJfUkVQTFlfUE9TVF9IT1NUX0lOREVYX09GRlNFVCAgICAgICAoMHgwMDAwMDA2QykKKyNkZWZpbmUgTVBJMl9SRVBMWV9QT1NUX0hPU1RfSU5ERVhfTUFTSyAgICAgICAgICgweDAwRkZGRkZGKQorI2RlZmluZSBNUEkyX1JQSElfTVNJWF9JTkRFWF9NQVNLICAgICAgICAgICAgICAgKDB4RkYwMDAwMDApCisjZGVmaW5lIE1QSTJfUlBISV9NU0lYX0lOREVYX1NISUZUICAgICAgICAgICAgICAoMjQpCiAKIC8qCiAgKiBEZWZpbmVzIGZvciB0aGUgSENCU2l6ZSBhbmQgYWRkcmVzcwpAQCAtNDk3LDEyICs1MDQsMTMgQEAKICNkZWZpbmUgTVBJMl9GVU5DVElPTl9UQVJHRVRfQ01EX0JVRl9CQVNFX1BPU1QgICAgICAoMHgyNCkgLyogVGFyZ2V0IENvbW1hbmQgQnVmZmVyIFBvc3QgQmFzZSAqLwogI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1RBUkdFVF9DTURfQlVGX0xJU1RfUE9TVCAgICAgICgweDI1KSAvKiBUYXJnZXQgQ29tbWFuZCBCdWZmZXIgUG9zdCBMaXN0ICovCiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fUkFJRF9BQ0NFTEVSQVRPUiAgICAgICAgICAgICAgKDB4MkMpIC8qIFJBSUQgQWNjZWxlcmF0b3IqLworLyogSG9zdCBCYXNlZCBEaXNjb3ZlcnkgQWN0aW9uICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fSE9TVF9CQVNFRF9ESVNDT1ZFUllfQUNUSU9OICAgKDB4MkYpCiAKIAogCiAvKiBEb29yYmVsbCBmdW5jdGlvbnMgKi8KICNkZWZpbmUgTVBJMl9GVU5DVElPTl9JT0NfTUVTU0FHRV9VTklUX1JFU0VUICAgICAgICAoMHg0MCkKLS8qICNkZWZpbmUgTVBJMl9GVU5DVElPTl9JT19VTklUX1JFU0VUICAgICAgICAgICAgICAgICAoMHg0MSkgKi8KICNkZWZpbmUgTVBJMl9GVU5DVElPTl9IQU5EU0hBS0UgICAgICAgICAgICAgICAgICAgICAoMHg0MikKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmgKaW5kZXggMTYxMWM1Ny4uY2YwYWM5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIENvbmZpZ3VyYXRpb24gbWVzc2FnZXMgYW5kIHBhZ2VzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIE5vdmVtYmVyIDEwLCAyMDA2CiAgKgotICogICAgbXBpMl9jbmZnLmggVmVyc2lvbjogIDAyLjAwLjEyCisgKiAgICBtcGkyX2NuZmcuaCBWZXJzaW9uOiAgMDIuMDAuMTMKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDcsNiArMTA3LDggQEAKICAqICAgICAgICAgICAgICAgICAgICAgIHRvIFNBUyBEZXZpY2UgUGFnZSAwIEZsYWdzIGZpZWxkLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUGh5SW5mbyBkZWZpbmVzIGZvciBwb3dlciBjb25kaXRpb24uCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBFdGhlcm5ldCBjb25maWd1cmF0aW9uIHBhZ2VzLgorICogIDEwLTI4LTA5ICAwMi4wMC4xMyAgQWRkZWQgTVBJMl9JT1VOSVRQQUdFMV9FTkFCTEVfSE9TVF9CQVNFRF9ESVNDT1ZFUlkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgUEhZIFBhZ2UgNCBzdHJ1Y3R1cmUgYW5kIGRlZmluZXMuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC03MTIsNiArNzE0LDcgQEAKICNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgKDB4MDQpCiAKIC8qIElPIFVuaXQgUGFnZSAxIEZsYWdzIGRlZmluZXMgKi8KKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9FTkFCTEVfSE9TVF9CQVNFRF9ESVNDT1ZFUlkgICAgKDB4MDAwMDA4MDApCiAjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfTUFTS19TQVRBX1dSSVRFX0NBQ0hFICAgICAgICAgICgweDAwMDAwNjAwKQogI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX0VOQUJMRV9TQVRBX1dSSVRFX0NBQ0hFICAgICAgICAoMHgwMDAwMDAwMCkKICNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9ESVNBQkxFX1NBVEFfV1JJVEVfQ0FDSEUgICAgICAgKDB4MDAwMDAyMDApCkBAIC0yMjkxLDYgKzIyOTQsMjYgQEAKICNkZWZpbmUgTVBJMl9TQVNQSFkzX1BBR0VWRVJTSU9OICAgICAgICAgICAgKDB4MDApCiAKIAorLyogU0FTIFBIWSBQYWdlIDQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV80IHsKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxGcmFtZVsyOF07ICAgICAgICAgICAvKiAweDBDICovCit9IE1QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV80LCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV80LAorICBNcGkyU2FzUGh5UGFnZTRfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzUGh5UGFnZTRfdDsKKworI2RlZmluZSBNUEkyX1NBU1BIWTRfUEFHRVZFUlNJT04gICAgICAgICAgICAoMHgwMCkKKworLyogdmFsdWVzIGZvciB0aGUgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNQSFk0X0ZMQUdTX0ZSQU1FX1ZBTElEICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9TQVNQSFk0X0ZMQUdTX1NBVEFfRlJBTUUgICAgICAgICAoMHgwMSkKKworCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICBTQVMgUG9ydCBDb25maWcgUGFnZXMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2hpc3RvcnkudHh0CmluZGV4IDY1ZmNhYTMuLmM0YWRmNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2hpc3RvcnkudHh0CisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2hpc3RvcnkudHh0CkBAIC01LDIzICs1LDI0IEBACiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgTFNJIENvcnBvcmF0aW9uLgogCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSGVhZGVyIFNldCBSZWxlYXNlIFZlcnNpb246ICAgIDAyLjAwLjEyCi0gSGVhZGVyIFNldCBSZWxlYXNlIERhdGU6ICAgICAgIDA1LTA2LTA5CisgSGVhZGVyIFNldCBSZWxlYXNlIFZlcnNpb246ICAgIDAyLjAwLjE0CisgSGVhZGVyIFNldCBSZWxlYXNlIERhdGU6ICAgICAgIDEwLTI4LTA5CiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICBGaWxlbmFtZSAgICAgICAgICAgICAgIEN1cnJlbnQgdmVyc2lvbiAgICAgUHJpb3IgdmVyc2lvbgogIC0tLS0tLS0tLS0gICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tICAgICAtLS0tLS0tLS0tLS0tCi0gbXBpMi5oICAgICAgICAgICAgICAgICAwMi4wMC4xMiAgICAgICAgICAgIDAyLjAwLjExCi0gbXBpMl9jbmZnLmggICAgICAgICAgICAwMi4wMC4xMSAgICAgICAgICAgIDAyLjAwLjEwCi0gbXBpMl9pbml0LmggICAgICAgICAgICAwMi4wMC4wNyAgICAgICAgICAgIDAyLjAwLjA2Ci0gbXBpMl9pb2MuaCAgICAgICAgICAgICAwMi4wMC4xMSAgICAgICAgICAgIDAyLjAwLjEwCi0gbXBpMl9yYWlkLmggICAgICAgICAgICAwMi4wMC4wMyAgICAgICAgICAgIDAyLjAwLjAzCi0gbXBpMl9zYXMuaCAgICAgICAgICAgICAwMi4wMC4wMiAgICAgICAgICAgIDAyLjAwLjAyCisgbXBpMi5oICAgICAgICAgICAgICAgICAwMi4wMC4xNCAgICAgICAgICAgIDAyLjAwLjEzCisgbXBpMl9jbmZnLmggICAgICAgICAgICAwMi4wMC4xMyAgICAgICAgICAgIDAyLjAwLjEyCisgbXBpMl9pbml0LmggICAgICAgICAgICAwMi4wMC4wOCAgICAgICAgICAgIDAyLjAwLjA3CisgbXBpMl9pb2MuaCAgICAgICAgICAgICAwMi4wMC4xMyAgICAgICAgICAgIDAyLjAwLjEyCisgbXBpMl9yYWlkLmggICAgICAgICAgICAwMi4wMC4wNCAgICAgICAgICAgIDAyLjAwLjA0CisgbXBpMl9zYXMuaCAgICAgICAgICAgICAwMi4wMC4wMyAgICAgICAgICAgIDAyLjAwLjAyCiAgbXBpMl90YXJnLmggICAgICAgICAgICAwMi4wMC4wMyAgICAgICAgICAgIDAyLjAwLjAzCi0gbXBpMl90b29sLmggICAgICAgICAgICAwMi4wMC4wMyAgICAgICAgICAgIDAyLjAwLjAyCisgbXBpMl90b29sLmggICAgICAgICAgICAwMi4wMC4wNCAgICAgICAgICAgIDAyLjAwLjA0CiAgbXBpMl90eXBlLmggICAgICAgICAgICAwMi4wMC4wMCAgICAgICAgICAgIDAyLjAwLjAwCi0gbXBpMl9yYS5oICAgICAgICAgICAgICAwMi4wMC4wMAotIG1waTJfaGlzdG9yeS50eHQgICAgICAgMDIuMDAuMTEgICAgICAgICAgICAwMi4wMC4xMgorIG1waTJfcmEuaCAgICAgICAgICAgICAgMDIuMDAuMDAgICAgICAgICAgICAwMi4wMC4wMAorIG1waTJfaGJkLmggICAgICAgICAgICAgMDIuMDAuMDAKKyBtcGkyX2hpc3RvcnkudHh0ICAgICAgIDAyLjAwLjE0ICAgICAgICAgICAgMDIuMDAuMTMKIAogCiAgKiAgRGF0ZSAgICAgIFZlcnNpb24gICBEZXNjcmlwdGlvbgpAQCAtNjUsNiArNjYsMTEgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgYW5kIG1hZGUgdGhvc2UKICAqICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIHJlc2VydmVkLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUkFJRCBBY2NlbGVyYXRvciBmdW5jdGlvbmFsaXR5LgorICogIDA3LTMwLTA5ICAwMi4wMC4xMyAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMTQgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNU0kteCBpbmRleCBtYXNrIGFuZCBzaGlmdCBmb3IgUmVwbHkgUG9zdCBIb3N0CisgKiAgICAgICAgICAgICAgICAgICAgICBJbmRleCByZWdpc3Rlci4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGZ1bmN0aW9uIGNvZGUgZm9yIEhvc3QgQmFzZWQgRGlzY292ZXJ5IEFjdGlvbi4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGkyX2NuZmcuaApAQCAtMTU1LDYgKzE2MSwxNSBAQAogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZXhwYW5kZXIgcmVkdWNlZCBmdW5jdGlvbmFsaXR5IGRhdGEgdG8gU0FTCiAgKiAgICAgICAgICAgICAgICAgICAgICBFeHBhbmRlciBQYWdlIDAuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgUEhZIFBhZ2UgMiBhbmQgU0FTIFBIWSBQYWdlIDMuCisgKiAgMDctMzAtMDkgIDAyLjAwLjEyICBBZGRlZCBJTyBVbml0IFBhZ2UgNy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBkZXZpY2UgaWRzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIElPIFVuaXQgUGFnZSA1LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgcGFydGlhbCBhbmQgc2x1bWJlciBwb3dlciBtYW5hZ2VtZW50IGNhcGFibGUgZmxhZ3MKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIFNBUyBEZXZpY2UgUGFnZSAwIEZsYWdzIGZpZWxkLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUGh5SW5mbyBkZWZpbmVzIGZvciBwb3dlciBjb25kaXRpb24uCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBFdGhlcm5ldCBjb25maWd1cmF0aW9uIHBhZ2VzLgorICogIDEwLTI4LTA5ICAwMi4wMC4xMyAgQWRkZWQgTVBJMl9JT1VOSVRQQUdFMV9FTkFCTEVfSE9TVF9CQVNFRF9ESVNDT1ZFUlkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgUEhZIFBhZ2UgNCBzdHJ1Y3R1cmUgYW5kIGRlZmluZXMuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogbXBpMl9pbml0LmgKQEAgLTE3Miw2ICsxODcsMTAgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIFF1ZXJ5IEFzeW5jaHJvbm91cyBFdmVudC4KICAqICAgICAgICAgICAgICAgICAgICAgIERlZmluZWQgdHdvIG5ldyBiaXRzIGluIHRoZSBTbG90U3RhdHVzIGZpZWxkIG9mIHRoZSBTQ1NJCiAgKiAgICAgICAgICAgICAgICAgICAgICBFbmNsb3N1cmUgUHJvY2Vzc29yIFJlcXVlc3QgYW5kIFJlcGx5LgorICogIDEwLTI4LTA5ICAwMi4wMC4wOCAgQWRkZWQgZGVmaW5lcyBmb3IgZGVjb2RpbmcgdGhlIFJlc3BvbnNlSW5mbyBieXRlcyBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIGJvdGggU0NTSSBJTyBFcnJvciBSZXBseSBhbmQgU0NTSSBUYXNrIE1hbmFnZW1lbnQgUmVwbHkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBSZXNwb25zZUluZm8gZmllbGQgdG8gTVBJMl9TQ1NJX1RBU0tfTUFOQUdFX1JFUExZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX09WRVJMQVBQRURfVEFHIGRlZmluZS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGkyX2lvYy5oCkBAIC0yNDYsNiArMjY1LDIwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IHJlYXNvbiBjb2RlcyBmb3IgU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlCiAgKiAgICAgICAgICAgICAgICAgICAgICBFdmVudC4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBldmVudDogU0FTIFBIWSBDb3VudGVyLgorICogIDA3LTMwLTA5ICAwMi4wMC4xMiAgQWRkZWQgR1BJTyBJbnRlcnJ1cHQgZXZlbnQgZGVmaW5lIGFuZCBzdHJ1Y3R1cmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRVhURU5ERURfQlVGRkVSIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBwcm9kdWN0IGlkIGZhbWlseSBmb3IgMjIwOC4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMTMgIEFkZGVkIEhvc3RNU0l4VmVjdG9ycyBmaWVsZCB0byBNUEkyX0lPQ19JTklUX1JFUVVFU1QuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNYXhNU0l4VmVjdG9ycyBmaWVsZCB0byBNUEkyX0lPQ19GQUNUU19SRVBMWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1pbkRldkhhbmRsZSBmaWVsZCB0byBNUEkyX0lPQ19GQUNUU19SRVBMWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9IT1NUX0JBU0VEX0RJU0NPVkVSWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRVZFTlRfSE9TVF9CQVNFRF9ESVNDT1ZFUllfUEhZIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfTk9fRVhQQU5ERVIgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgSG9zdCBCYXNlZCBEaXNjb3ZlcnkgUGh5IEV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmVzIGZvciBQcm9kdWN0SUQgUHJvZHVjdCBmaWVsZAorICogICAgICAgICAgICAgICAgICAgICAgKE1QSTJfRldfSEVBREVSX1BJRF8pLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgdmFsdWVzIGZvciBTQVMgUHJvZHVjdElEIEZhbWlseQorICogICAgICAgICAgICAgICAgICAgICAgKE1QSTJfRldfSEVBREVSX1BJRF9GQU1JTFlfKS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGkyX3JhaWQuaApAQCAtMjU2LDYgKzI4OSw4IEBACiAgKiAgMDUtMjEtMDggIDAyLjAwLjAzICBBZGRlZCBNUEkyX1JBSURfVk9MX0NSRUFUSU9OX05VTV9QSFlTRElTS1Mgc28gdGhhdAogICogICAgICAgICAgICAgICAgICAgICAgdGhlIFBoeXNEaXNrIGFycmF5IGluIE1QSTJfUkFJRF9WT0xVTUVfQ1JFQVRJT05fU1RSVUNUCiAgKiAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgc2l6ZWQgYnkgdGhlIGJ1aWxkIGVudmlyb25tZW50LgorICogIDA3LTMwLTA5ICAwMi4wMC4wNCAgQWRkZWQgcHJvcGVyIGRlZmluZSBmb3IgdGhlIFVzZSBEZWZhdWx0IFNldHRpbmdzIGJpdCBvZgorICogICAgICAgICAgICAgICAgICAgICAgVm9sdW1lQ3JlYXRpb25GbGFncyBhbmQgbWFya2VkIHRoZSBvbGQgb25lIGFzIG9ic29sZXRlLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIG1waTJfc2FzLmgKQEAgLTI2NCw2ICsyOTksOCBAQAogICogICAgICAgICAgICAgICAgICAgICAgQ29udHJvbCBSZXF1ZXN0LgogICogIDEwLTAyLTA4ICAwMi4wMC4wMiAgQWRkZWQgU2V0IElPQyBQYXJhbWV0ZXIgT3BlcmF0aW9uIHRvIFNBUyBJTyBVbml0IENvbnRyb2wKICAqICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QuCisgKiAgMTAtMjgtMDkgIDAyLjAwLjAzICBDaGFuZ2VkIHRoZSB0eXBlIG9mIFNHTCBpbiBNUEkyX1NBVEFfUEFTU1RIUk9VR0hfUkVRVUVTVAorICogICAgICAgICAgICAgICAgICAgICAgdG8gTVBJMl9TR0VfSU9fVU5JT04gc2luY2UgaXQgc3VwcG9ydHMgY2hhaW5lZCBTR0xzLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIG1waTJfdGFyZy5oCkBAIC0yODMsNiArMzIwLDEwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzLgogICogIDAyLTI5LTA4ICAwMi4wMC4wMiAgTW9kaWZpZWQgdmFyaW91cyBuYW1lcyB0byBtYWtlIHRoZW0gMzItY2hhcmFjdGVyIHVuaXF1ZS4KICAqICAwNS0wNi0wOSAgMDIuMDAuMDMgIEFkZGVkIElTVFdJIFJlYWQgV3JpdGUgVG9vbCBhbmQgRGlhZ25vc3RpYyBDTEkgVG9vbC4KKyAqICAwNy0zMC0wOSAgMDIuMDAuMDQgIEFkZGVkIEV4dGVuZGVkVHlwZSBmaWVsZCB0byBEaWFnbm9zdGljQnVmZmVyUG9zdCByZXF1ZXN0CisgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgcmVwbHkgbWVzc2FnZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0RJQUdfQlVGX1RZUEVfRVhURU5ERUQuCisgKiAgICAgICAgICAgICAgICAgICAgICBJbmNyZW1lbnRlZCBNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlQuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogbXBpMl90eXBlLmgKQEAgLTI5MywyMCArMzM0LDI2IEBACiAgKiAgMDUtMDYtMDkgIDAyLjAwLjAwICBJbml0aWFsIHZlcnNpb24uCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorbXBpMl9oYmQuaAorICogIDEwLTI4LTA5ICAwMi4wMC4wMCAgSW5pdGlhbCB2ZXJzaW9uLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwogbXBpMl9oaXN0b3J5LnR4dCAgICAgICAgIFBhcnRzIGxpc3QgaGlzdG9yeQogCi1GaWxlbmFtZSAgICAgMDIuMDAuMTIKLS0tLS0tLS0tLS0gICAtLS0tLS0tLQotbXBpMi5oICAgICAgIDAyLjAwLjEyCi1tcGkyX2NuZmcuaCAgMDIuMDAuMTEKLW1waTJfaW5pdC5oICAwMi4wMC4wNwotbXBpMl9pb2MuaCAgIDAyLjAwLjExCi1tcGkyX3JhaWQuaCAgMDIuMDAuMDMKLW1waTJfc2FzLmggICAwMi4wMC4wMgotbXBpMl90YXJnLmggIDAyLjAwLjAzCi1tcGkyX3Rvb2wuaCAgMDIuMDAuMDMKLW1waTJfdHlwZS5oICAwMi4wMC4wMAotbXBpMl9yYS5oICAgIDAyLjAwLjAwCitGaWxlbmFtZSAgICAgMDIuMDAuMTQgIDAyLjAwLjEzICAwMi4wMC4xMgorLS0tLS0tLS0tLSAgIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0KK21waTIuaCAgICAgICAwMi4wMC4xNCAgMDIuMDAuMTMgIDAyLjAwLjEyCittcGkyX2NuZmcuaCAgMDIuMDAuMTMgIDAyLjAwLjEyICAwMi4wMC4xMQorbXBpMl9pbml0LmggIDAyLjAwLjA4ICAwMi4wMC4wNyAgMDIuMDAuMDcKK21waTJfaW9jLmggICAwMi4wMC4xMyAgMDIuMDAuMTIgIDAyLjAwLjExCittcGkyX3JhaWQuaCAgMDIuMDAuMDQgIDAyLjAwLjA0ICAwMi4wMC4wMworbXBpMl9zYXMuaCAgIDAyLjAwLjAzICAwMi4wMC4wMiAgMDIuMDAuMDIKK21waTJfdGFyZy5oICAwMi4wMC4wMyAgMDIuMDAuMDMgIDAyLjAwLjAzCittcGkyX3Rvb2wuaCAgMDIuMDAuMDQgIDAyLjAwLjA0ICAwMi4wMC4wMworbXBpMl90eXBlLmggIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAKK21waTJfcmEuaCAgICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwCittcGkyX2hiZC5oICAgMDIuMDAuMDAKIAogRmlsZW5hbWUgICAgIDAyLjAwLjExICAwMi4wMC4xMCAgMDIuMDAuMDkgIDAyLjAwLjA4ICAwMi4wMC4wNyAgMDIuMDAuMDYKIC0tLS0tLS0tLS0gICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmgKaW5kZXggNTYzZTU2ZC4uNjU0MTk0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIFNDU0kgaW5pdGlhdG9yIG1vZGUgbWVzc2FnZXMgYW5kIHN0cnVjdHVyZXMKICAqICBDcmVhdGlvbiBEYXRlOiAgSnVuZSAyMywgMjAwNgogICoKLSAqICAgIG1waTJfaW5pdC5oIFZlcnNpb246ICAwMi4wMC4wNworICogICAgbXBpMl9pbml0LmggVmVyc2lvbjogIDAyLjAwLjA4CiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtMjcsNiArMjcsMTAgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIFF1ZXJ5IEFzeW5jaHJvbm91cyBFdmVudC4KICAqICAgICAgICAgICAgICAgICAgICAgIERlZmluZWQgdHdvIG5ldyBiaXRzIGluIHRoZSBTbG90U3RhdHVzIGZpZWxkIG9mIHRoZSBTQ1NJCiAgKiAgICAgICAgICAgICAgICAgICAgICBFbmNsb3N1cmUgUHJvY2Vzc29yIFJlcXVlc3QgYW5kIFJlcGx5LgorICogIDEwLTI4LTA5ICAwMi4wMC4wOCAgQWRkZWQgZGVmaW5lcyBmb3IgZGVjb2RpbmcgdGhlIFJlc3BvbnNlSW5mbyBieXRlcyBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIGJvdGggU0NTSSBJTyBFcnJvciBSZXBseSBhbmQgU0NTSSBUYXNrIE1hbmFnZW1lbnQgUmVwbHkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBSZXNwb25zZUluZm8gZmllbGQgdG8gTVBJMl9TQ1NJX1RBU0tfTUFOQUdFX1JFUExZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX09WRVJMQVBQRURfVEFHIGRlZmluZS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTI1NCw2ICsyNTgsMTEgQEAKICNkZWZpbmUgTVBJMl9TQ1NJX1NUQVRFX0FVVE9TRU5TRV9GQUlMRUQgICAgICAgICgweDAyKQogI2RlZmluZSBNUEkyX1NDU0lfU1RBVEVfQVVUT1NFTlNFX1ZBTElEICAgICAgICAgKDB4MDEpCiAKKy8qIG1hc2tzIGFuZCBzaGlmdHMgZm9yIHRoZSBSZXNwb25zZUluZm8gZmllbGQgKi8KKworI2RlZmluZSBNUEkyX1NDU0lfUklfTUFTS19SRUFTT05DT0RFICAgICAgICAgICAgKDB4MDAwMDAwRkYpCisjZGVmaW5lIE1QSTJfU0NTSV9SSV9TSElGVF9SRUFTT05DT0RFICAgICAgICAgICAoMCkKKwogI2RlZmluZSBNUEkyX1NDU0lfVEFTS1RBR19VTktOT1dOICAgICAgICAgICAgICAgKDB4RkZGRikKIAogCkBAIC0zMjcsNiArMzM2LDcgQEAKICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KICAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KICAgICBVMzIgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hdGlvbkNvdW50OyAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNwb25zZUluZm87ICAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KIH0gTVBJMl9TQ1NJX1RBU0tfTUFOQUdFX1JFUExZLAogICBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVBMWSwKICAgTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNDU0lNYW5hZ2VtZW50UmVwbHlfdDsKQEAgLTMzOSw4ICszNDksMjAgQEAKICNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX0ZBSUxFRCAgICAgICAgICAgICAgICAgKDB4MDUpCiAjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9TVUNDRUVERUQgICAgICAgICAgICAgICgweDA4KQogI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fSU5WQUxJRF9MVU4gICAgICAgICAgICAoMHgwOSkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX09WRVJMQVBQRURfVEFHICAgICAgICAgKDB4MEEpCiAjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9JT19RVUVVRURfT05fSU9DICAgICAgICAgICgweDgwKQogCisvKiBtYXNrcyBhbmQgc2hpZnRzIGZvciB0aGUgUmVzcG9uc2VJbmZvIGZpZWxkICovCisKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUklfTUFTS19SRUFTT05DT0RFICAgICAgICAgICAgKDB4MDAwMDAwRkYpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JJX1NISUZUX1JFQVNPTkNPREUgICAgICAgICAgICgwKQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SSV9NQVNLX0FSSTIgICAgICAgICAgICAgICAgICAoMHgwMDAwRkYwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUklfU0hJRlRfQVJJMiAgICAgICAgICAgICAgICAgKDgpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JJX01BU0tfQVJJMSAgICAgICAgICAgICAgICAgICgweDAwRkYwMDAwKQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SSV9TSElGVF9BUkkxICAgICAgICAgICAgICAgICAoMTYpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JJX01BU0tfQVJJMCAgICAgICAgICAgICAgICAgICgweEZGMDAwMDAwKQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SSV9TSElGVF9BUkkwICAgICAgICAgICAgICAgICAoMjQpCisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIFNDU0kgRW5jbG9zdXJlIFByb2Nlc3NvciBtZXNzYWdlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaAppbmRleCBlYTUxY2U4Li43NTQ5Mzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIElPQywgUG9ydCwgRXZlbnQsIEZXIERvd25sb2FkLCBhbmQgRlcgVXBsb2FkIG1lc3NhZ2VzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIE9jdG9iZXIgMTEsIDIwMDYKICAqCi0gKiAgbXBpMl9pb2MuaCBWZXJzaW9uOiAgMDIuMDAuMTIKKyAqICBtcGkyX2lvYy5oIFZlcnNpb246ICAwMi4wMC4xMwogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTg3LDYgKzg3LDE3IEBACiAgKiAgMDctMzAtMDkgIDAyLjAwLjEyICBBZGRlZCBHUElPIEludGVycnVwdCBldmVudCBkZWZpbmUgYW5kIHN0cnVjdHVyZS4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9FWFRFTkRFRF9CVUZGRVIgZGVmaW5lLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbmV3IHByb2R1Y3QgaWQgZmFtaWx5IGZvciAyMjA4LgorICogIDEwLTI4LTA5ICAwMi4wMC4xMyAgQWRkZWQgSG9zdE1TSXhWZWN0b3JzIGZpZWxkIHRvIE1QSTJfSU9DX0lOSVRfUkVRVUVTVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1heE1TSXhWZWN0b3JzIGZpZWxkIHRvIE1QSTJfSU9DX0ZBQ1RTX1JFUExZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTWluRGV2SGFuZGxlIGZpZWxkIHRvIE1QSTJfSU9DX0ZBQ1RTX1JFUExZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0hPU1RfQkFTRURfRElTQ09WRVJZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9FVkVOVF9IT1NUX0JBU0VEX0RJU0NPVkVSWV9QSFkgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19OT19FWFBBTkRFUiBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBIb3N0IEJhc2VkIERpc2NvdmVyeSBQaHkgRXZlbnQgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGRlZmluZXMgZm9yIFByb2R1Y3RJRCBQcm9kdWN0IGZpZWxkCisgKiAgICAgICAgICAgICAgICAgICAgICAoTVBJMl9GV19IRUFERVJfUElEXykuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllZCB2YWx1ZXMgZm9yIFNBUyBQcm9kdWN0SUQgRmFtaWx5CisgKiAgICAgICAgICAgICAgICAgICAgICAoTVBJMl9GV19IRUFERVJfUElEX0ZBTUlMWV8pLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtMTE5LDggKzEzMCwxMCBAQAogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIE1zZ1ZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEhlYWRlclZlcnNpb247ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLwogICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLwotICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLwotICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEhvc3RNU0l4VmVjdG9yczsgICAgICAgICAgICAgICAgLyogMHgxNyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkODsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbVJlcXVlc3RGcmFtZVNpemU7ICAgICAgICAgLyogMHgxQSAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlcGx5RGVzY3JpcHRvclBvc3RRdWV1ZURlcHRoOyAgLyogMHgxQyAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlcGx5RnJlZVF1ZXVlRGVwdGg7ICAgICAgICAgICAgLyogMHgxRSAqLwpAQCAtMjE1LDcgKzIyOCw3IEBACiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4Q2hhaW5EZXB0aDsgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgV2hvSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDE1ICovCiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZQb3J0czsgICAgICAgICAgICAgICAgICAvKiAweDE2ICovCi0gICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4TVNJeFZlY3RvcnM7ICAgICAgICAgICAgICAgICAvKiAweDE3ICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdENyZWRpdDsgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdElEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDFBICovCiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DQ2FwYWJpbGl0aWVzOyAgICAgICAgICAgICAgICAvKiAweDFDICovCkBAIC0yMzMsNyArMjQ2LDggQEAKICAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYXhWb2x1bWVzOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MzcgKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNYXhEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgIC8qIDB4MzggKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNYXhQZXJzaXN0ZW50RW50cmllczsgICAgICAgICAgIC8qIDB4M0EgKi8KLSAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4M0MgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNaW5EZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgIC8qIDB4M0MgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4M0UgKi8KIH0gTVBJMl9JT0NfRkFDVFNfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9JT0NfRkFDVFNfUkVQTFksCiAgIE1waTJJT0NGYWN0c1JlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMklPQ0ZhY3RzUmVwbHlfdDsKIApAQCAtMjY5LDYgKzI4Myw3IEBACiAvKiBQcm9kdWN0SUQgZmllbGQgdXNlcyBNUEkyX0ZXX0hFQURFUl9QSURfICovCiAKIC8qIElPQ0NhcGFiaWxpdGllcyAqLworI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSE9TVF9CQVNFRF9ESVNDT1ZFUlkgICAoMHgwMDAxMDAwMCkKICNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX01TSV9YX0lOREVYICAgICAgICAgICAgKDB4MDAwMDgwMDApCiAjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9SQUlEX0FDQ0VMRVJBVE9SICAgICAgICgweDAwMDA0MDAwKQogI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRVZFTlRfUkVQTEFZICAgICAgICAgICAoMHgwMDAwMjAwMCkKQEAgLTQ1Myw2ICs0NjgsNyBAQAogI2RlZmluZSBNUEkyX0VWRU5UX0xPR19FTlRSWV9BRERFRCAgICAgICAgICAgICAgICAgICgweDAwMjEpCiAjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1BIWV9DT1VOVEVSICAgICAgICAgICAgICAgICAgKDB4MDAyMikKICNkZWZpbmUgTVBJMl9FVkVOVF9HUElPX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAoMHgwMDIzKQorI2RlZmluZSBNUEkyX0VWRU5UX0hPU1RfQkFTRURfRElTQ09WRVJZX1BIWSAgICAgICAgICgweDAwMjQpCiAKIAogLyogTG9nIEVudHJ5IEFkZGVkIEV2ZW50IGRhdGEgKi8KQEAgLTc5Myw2ICs4MDksNyBAQAogICBNUEkyX1BPSU5URVIgcE1waTJFdmVudERhdGFTYXNUb3BvbG9neUNoYW5nZUxpc3RfdDsKIAogLyogdmFsdWVzIGZvciB0aGUgRXhwU3RhdHVzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfTk9fRVhQQU5ERVIgICAgICAgICAgICAgICAgICAoMHgwMCkKICNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19BRERFRCAgICAgICAgICAgICAgICAgICAgICAgICgweDAxKQogI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX05PVF9SRVNQT05ESU5HICAgICAgICAgICAgICAgKDB4MDIpCiAjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfUkVTUE9ORElORyAgICAgICAgICAgICAgICAgICAoMHgwMykKQEAgLTg3OCw2ICs4OTUsNDQgQEAKICAqICovCiAKIAorLyogSG9zdCBCYXNlZCBEaXNjb3ZlcnkgUGh5IEV2ZW50IGRhdGEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfSEJEX1BIWV9TQVMgeworICAgIFU4ICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgTmVnb3RpYXRlZExpbmtSYXRlOyAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICBQaHlOdW07ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgIFBoeXNpY2FsUG9ydDsgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICBJbml0aWFsRnJhbWVbMjhdOyAgICAgICAgICAgLyogMHgwOCAqLworfSBNUEkyX0VWRU5UX0hCRF9QSFlfU0FTLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfSEJEX1BIWV9TQVMsCisgIE1waTJFdmVudEhiZFBoeVNhc190LCBNUEkyX1BPSU5URVIgcE1waTJFdmVudEhiZFBoeVNhc190OworCisvKiB2YWx1ZXMgZm9yIHRoZSBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX0VWRU5UX0hCRF9TQVNfRkxBR1NfRlJBTUVfVkFMSUQgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX0VWRU5UX0hCRF9TQVNfRkxBR1NfU0FUQV9GUkFNRSAgICAgICAgICgweDAxKQorCisvKiB1c2UgTVBJMl9TQVNfTkVHX0xJTktfUkFURV8gZGVmaW5lcyBmcm9tIG1waTJfY25mZy5oIGZvcgorICogdGhlIE5lZ290aWF0ZWRMaW5rUmF0ZSBmaWVsZCAqLworCit0eXBlZGVmIHVuaW9uIF9NUEkyX0VWRU5UX0hCRF9ERVNDUklQVE9SIHsKKyAgICBNUEkyX0VWRU5UX0hCRF9QSFlfU0FTICAgICAgU2FzOworfSBNUEkyX0VWRU5UX0hCRF9ERVNDUklQVE9SLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfSEJEX0RFU0NSSVBUT1IsCisgIE1waTJFdmVudEhiZERlc2NyaXB0b3JfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnRIYmREZXNjcmlwdG9yX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0RBVEFfSEJEX1BIWSB7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JUeXBlOyAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAvKiAweDAyICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgLyogMHgwNCAqLworICAgIE1QSTJfRVZFTlRfSEJEX0RFU0NSSVBUT1IgICBEZXNjcmlwdG9yOyAgICAgICAgIC8qIDB4MDggKi8KK30gTVBJMl9FVkVOVF9EQVRBX0hCRF9QSFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9EQVRBX0hCRF9QSFksCisgIE1waTJFdmVudERhdGFIYmRQaHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhTXBpMkV2ZW50RGF0YUhiZFBoeV90OworCisvKiB2YWx1ZXMgZm9yIHRoZSBEZXNjcmlwdG9yVHlwZSBmaWVsZCAqLworI2RlZmluZSBNUEkyX0VWRU5UX0hCRF9EVF9TQVMgICAgICAgICAgICAgICAoMHgwMSkKKworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBFdmVudEFjayBtZXNzYWdlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTEyNiwxMyArMTE4MSwxNyBAQAogI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfVFlQRV9NQVNLICAgICAgICAgICAgKDB4RjAwMCkKICNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1RZUEVfU0FTICAgICAgICAgICAgICgweDIwMDApCiAKLSNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1BST0RfTUFTSyAgICAgICAgICAgICgweDBGMDApCi0jZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX0EgICAgICAgICAgICAgICAoMHgwMDAwKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfUFJPRF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgwRjAwKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfUFJPRF9BICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfUFJPRF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgwRjAwKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfUFJPRF9UQVJHRVRfSU5JVElBVE9SX1NDU0kgICAoMHgwMjAwKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfUFJPRF9JUl9TQ1NJICAgICAgICAgICAgICAgICAoMHgwNzAwKQorCiAKICNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX0ZBTUlMWV9NQVNLICAgICAgICAgICgweDAwRkYpCiAvKiBTQVMgKi8KLSNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX0ZBTUlMWV8yMTA4X1NBUyAgICAgICgweDAwMTApCi0jZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9GQU1JTFlfMjIwOF9TQVMgICAgICAoMHgwMDExKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfRkFNSUxZXzIxMDhfU0FTICAgICAgKDB4MDAxMykKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX0ZBTUlMWV8yMjA4X1NBUyAgICAgICgweDAwMTQpCiAKIC8qIHVzZSBNUEkyX0lPQ0ZBQ1RTX1BST1RPQ09MXyBkZWZpbmVzIGZvciBQcm90b2NvbEZsYWdzIGZpZWxkICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Nhcy5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfc2FzLmgKaW5kZXggOGE0MmIxMy4uMmQ4YWVlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfc2FzLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfc2FzLmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBTZXJpYWwgQXR0YWNoZWQgU0NTSSBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucwogICogIENyZWF0aW9uIERhdGU6ICBGZWJydWFyeSA5LCAyMDA3CiAgKgotICogIG1waTIuaCBWZXJzaW9uOiAgMDIuMDAuMDIKKyAqICBtcGkyLmggVmVyc2lvbjogIDAyLjAwLjAzCiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtMTgsNiArMTgsOCBAQAogICogICAgICAgICAgICAgICAgICAgICAgQ29udHJvbCBSZXF1ZXN0LgogICogIDEwLTAyLTA4ICAwMi4wMC4wMiAgQWRkZWQgU2V0IElPQyBQYXJhbWV0ZXIgT3BlcmF0aW9uIHRvIFNBUyBJTyBVbml0IENvbnRyb2wKICAqICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QuCisgKiAgMTAtMjgtMDkgIDAyLjAwLjAzICBDaGFuZ2VkIHRoZSB0eXBlIG9mIFNHTCBpbiBNUEkyX1NBVEFfUEFTU1RIUk9VR0hfUkVRVUVTVAorICogICAgICAgICAgICAgICAgICAgICAgdG8gTVBJMl9TR0VfSU9fVU5JT04gc2luY2UgaXQgc3VwcG9ydHMgY2hhaW5lZCBTR0xzLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtMTYwLDcgKzE2Miw3IEBACiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAvKiAweDE0ICovCiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aDsgICAgICAgICAvKiAweDE4ICovCiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZEZJU1syMF07ICAgICAvKiAweDFDICovCi0gICAgTVBJMl9TSU1QTEVfU0dFX1VOSU9OICAgU0dMOyAgICAgICAgICAgICAgICAvKiAweDIwICovCisgICAgTVBJMl9TR0VfSU9fVU5JT04gICAgICAgU0dMOyAgICAgICAgICAgICAgICAvKiAweDIwICovCiB9IE1QSTJfU0FUQV9QQVNTVEhST1VHSF9SRVFVRVNULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0FUQV9QQVNTVEhST1VHSF9SRVFVRVNULAogICBNcGkyU2F0YVBhc3N0aHJvdWdoUmVxdWVzdF90LCBNUEkyX1BPSU5URVIgcE1waTJTYXRhUGFzc3Rocm91Z2hSZXF1ZXN0X3Q7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKaW5kZXggODlkMDI0MC4uODhlNmVlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKQEAgLTEwNyw4ICsxMDcsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICJzZXR0aW5nIGxvZ2dpbmdfbGV2ZWwoMHglMDh4KVxuIiwKLQkJCQltcHQyc2FzX2Z3ZmF1bHRfZGVidWcpOworCXByaW50ayhLRVJOX0lORk8gInNldHRpbmcgZndmYXVsdF9kZWJ1ZyglZClcbiIsIG1wdDJzYXNfZndmYXVsdF9kZWJ1Zyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpb2MsICZtcHQyc2FzX2lvY19saXN0LCBsaXN0KQogCQlpb2MtPmZ3ZmF1bHRfZGVidWcgPSBtcHQyc2FzX2Z3ZmF1bHRfZGVidWc7CiAJcmV0dXJuIDA7CkBAIC0xMjIyLDYgKzEyMjEsOCBAQAogCXUzMiBtZW1hcF9zejsKIAl1MzIgcGlvX3N6OwogCWludCBpLCByID0gMDsKKwl1NjQgcGlvX2NoaXAgPSAwOworCXU2NCBjaGlwX3BoeXMgPSAwOwogCiAJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzXG4iLAogCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CkBAIC0xMjU1LDEyICsxMjU2LDEzIEBACiAJCWlmIChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgJiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKSB7CiAJCQlpZiAocGlvX3N6KQogCQkJCWNvbnRpbnVlOwotCQkJaW9jLT5waW9fY2hpcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpKTsKKwkJCXBpb19jaGlwID0gKHU2NClwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7CiAJCQlwaW9fc3ogPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpOwogCQl9IGVsc2UgewogCQkJaWYgKG1lbWFwX3N6KQogCQkJCWNvbnRpbnVlOwogCQkJaW9jLT5jaGlwX3BoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7CisJCQljaGlwX3BoeXMgPSAodTY0KWlvYy0+Y2hpcF9waHlzOwogCQkJbWVtYXBfc3ogPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpOwogCQkJaW9jLT5jaGlwID0gaW9yZW1hcChpb2MtPmNoaXBfcGh5cywgbWVtYXBfc3opOwogCQkJaWYgKGlvYy0+Y2hpcCA9PSBOVUxMKSB7CkBAIC0xMjgwLDEwICsxMjgyLDEwIEBACiAJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBJUlEgJWRcbiIsCiAJICAgIGlvYy0+bmFtZSwgICgoaW9jLT5tc2l4X2VuYWJsZSkgPyAiUENJLU1TSS1YIGVuYWJsZWQiIDoKIAkgICAgIklPLUFQSUMgZW5hYmxlZCIpLCBpb2MtPnBjaV9pcnEpOwotCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJpb21lbSgweCVseCksIG1hcHBlZCgweCVwKSwgc2l6ZSglZClcbiIsCi0JICAgIGlvYy0+bmFtZSwgaW9jLT5jaGlwX3BoeXMsIGlvYy0+Y2hpcCwgbWVtYXBfc3opOwotCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJpb3BvcnQoMHglbHgpLCBzaXplKCVkKVxuIiwKLQkgICAgaW9jLT5uYW1lLCBpb2MtPnBpb19jaGlwLCBwaW9fc3opOworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJpb21lbSgweCUwMTZsbHgpLCBtYXBwZWQoMHglcCksIHNpemUoJWQpXG4iLAorCSAgICBpb2MtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpY2hpcF9waHlzLCBpb2MtPmNoaXAsIG1lbWFwX3N6KTsKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaW9wb3J0KDB4JTAxNmxseCksIHNpemUoJWQpXG4iLAorCSAgICBpb2MtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpcGlvX2NoaXAsIHBpb19zeik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMzU3Myw2ICszNTc1LDggQEAKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlvYy0+cmVzZXRfd3EpOwogCisJaW9jLT5md2ZhdWx0X2RlYnVnID0gbXB0MnNhc19md2ZhdWx0X2RlYnVnOworCiAJLyogYmFzZSBpbnRlcm5hbCBjb21tYW5kIGJpdHMgKi8KIAltdXRleF9pbml0KCZpb2MtPmJhc2VfY21kcy5tdXRleCk7CiAJaW9jLT5iYXNlX2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaAppbmRleCBiYjRmMTQ2Li5lMThiMDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaApAQCAtNjksMTAgKzY5LDEwIEBACiAjZGVmaW5lIE1QVDJTQVNfRFJJVkVSX05BTUUJCSJtcHQyc2FzIgogI2RlZmluZSBNUFQyU0FTX0FVVEhPUgkiTFNJIENvcnBvcmF0aW9uIDxETC1NUFRGdXNpb25MaW51eEBsc2kuY29tPiIKICNkZWZpbmUgTVBUMlNBU19ERVNDUklQVElPTgkiTFNJIE1QVCBGdXNpb24gU0FTIDIuMCBEZXZpY2UgRHJpdmVyIgotI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9WRVJTSU9OCQkiMDMuMTAwLjAzLjAwIgotI2RlZmluZSBNUFQyU0FTX01BSk9SX1ZFUlNJT04JCTAzCisjZGVmaW5lIE1QVDJTQVNfRFJJVkVSX1ZFUlNJT04JCSIwNC4xMDAuMDEuMDAiCisjZGVmaW5lIE1QVDJTQVNfTUFKT1JfVkVSU0lPTgkJMDQKICNkZWZpbmUgTVBUMlNBU19NSU5PUl9WRVJTSU9OCQkxMDAKLSNkZWZpbmUgTVBUMlNBU19CVUlMRF9WRVJTSU9OCQkwMworI2RlZmluZSBNUFQyU0FTX0JVSUxEX1ZFUlNJT04JCTAxCiAjZGVmaW5lIE1QVDJTQVNfUkVMRUFTRV9WRVJTSU9OCQkwMAogCiAvKgpAQCAtMzIzLDYgKzMyMyw3IEBACiAgKiBAZGV2aWNlX2luZm86IGJpdGZpZWxkIHByb3ZpZGVzIGRldGFpbGVkIGluZm8gYWJvdXQgdGhlIGhpZGRlbiBjb21wb25lbnRzCiAgKiBAbnVtX3BkczogbnVtYmVyIG9mIGhpZGRlbiByYWlkIGNvbXBvbmVudHMKICAqIEByZXNwb25kaW5nOiB1c2VkIGluIF9zY3NpaF9yYWlkX2RldmljZV9tYXJrX3Jlc3BvbmRpbmcKKyAqIEBwZXJjZW50X2NvbXBsZXRlOiByZXN5bmMgcGVyY2VudCBjb21wbGV0ZQogICovCiBzdHJ1Y3QgX3JhaWRfZGV2aWNlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC0zMzYsNiArMzM3LDcgQEAKIAl1MzIJZGV2aWNlX2luZm87CiAJdTgJbnVtX3BkczsKIAl1OAlyZXNwb25kaW5nOworCXU4CXBlcmNlbnRfY29tcGxldGU7CiB9OwogCiAvKioKQEAgLTQ2NCw3ICs0NjYsNiBAQAogICogQHBkZXY6IHBjaSBwZGV2IG9iamVjdAogICogQGNoaXA6IG1lbW9yeSBtYXBwZWQgcmVnaXN0ZXIgc3BhY2UKICAqIEBjaGlwX3BoeXM6IHBoeXNpY2FsIGFkZHJzcyBwcmlvciB0byBtYXBwaW5nCi0gKiBAcGlvX2NoaXA6IEkvTyBtYXBwZWQgcmVnaXN0ZXIgc3BhY2UKICAqIEBsb2dnaW5nX2xldmVsOiBzZWUgbXB0MnNhc19kZWJ1Zy5oCiAgKiBAZndmYXVsdF9kZWJ1ZzogZGVidWdpbmcgRlcgdGltZW91dHMKICAqIEBpcl9maXJtd2FyZTogSVIgZmlybXdhcmUgcHJlc2VudApAQCAtNTg3LDggKzU4OCw3IEBACiAJY2hhcgkJdG1wX3N0cmluZ1tNUFRfU1RSSU5HX0xFTkdUSF07CiAJc3RydWN0IHBjaV9kZXYJKnBkZXY7CiAJTXBpMlN5c3RlbUludGVyZmFjZVJlZ3NfdCBfX2lvbWVtICpjaGlwOwotCXVuc2lnbmVkIGxvbmcJY2hpcF9waHlzOwotCXVuc2lnbmVkIGxvbmcJcGlvX2NoaXA7CisJcmVzb3VyY2Vfc2l6ZV90CWNoaXBfcGh5czsKIAlpbnQJCWxvZ2dpbmdfbGV2ZWw7CiAJaW50CQlmd2ZhdWx0X2RlYnVnOwogCXU4CQlpcl9maXJtd2FyZTsKQEAgLTg1Myw2ICs4NTMsOCBAQAogICAgICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSk7CiBpbnQgbXB0MnNhc19jb25maWdfZ2V0X3Nhc19pb3VuaXRfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKICAgICAqbXBpX3JlcGx5LCBNcGkyU2FzSU9Vbml0UGFnZTFfdCAqY29uZmlnX3BhZ2UsIHUxNiBzeik7CitpbnQgbXB0MnNhc19jb25maWdfc2V0X3Nhc19pb3VuaXRfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkyU2FzSU9Vbml0UGFnZTFfdCAqY29uZmlnX3BhZ2UsIHUxNiBzeik7CiBpbnQgbXB0MnNhc19jb25maWdfZ2V0X2lvY19wZzgoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAogICAgICptcGlfcmVwbHksIE1waTJJT0NQYWdlOF90ICpjb25maWdfcGFnZSk7CiBpbnQgbXB0MnNhc19jb25maWdfZ2V0X2V4cGFuZGVyX3BnMChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYwppbmRleCA1OTRhMzg5Li40MTFjMjdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKQEAgLTMyNCw3ICszMjQsOSBAQAogCQlpZiAociAhPSAwKQogCQkJZ290byBvdXQ7CiAJCWlmIChtcGlfcmVxdWVzdC0+QWN0aW9uID09Ci0JCSAgICBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9XUklURV9DVVJSRU5UKSB7CisJCSAgICBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9XUklURV9DVVJSRU5UIHx8CisJCSAgICBtcGlfcmVxdWVzdC0+QWN0aW9uID09CisJCSAgICBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9XUklURV9OVlJBTSkgewogCQkJaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LT5QYWdlQnVmZmVyU0dFLAogCQkJICAgIE1QVDJfQ09ORklHX0NPTU1PTl9XUklURV9TR0xGTEFHUyB8IG1lbS5zeiwKIAkJCSAgICBtZW0ucGFnZV9kbWEpOwpAQCAtODgyLDcgKzg4NCw3IEBACiB9CiAKIC8qKgotICogbXB0MnNhc19jb25maWdfZ2V0X3Nhc19pb3VuaXRfcGcxIC0gb2J0YWluIHNhcyBpb3VuaXQgcGFnZSAwCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzEgLSBvYnRhaW4gc2FzIGlvdW5pdCBwYWdlIDEKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCiAgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQpAQCAtOTA3LDcgKzkwOSw3IEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQ7CiAJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfSU9fVU5JVDsKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDE7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNJT1VOSVRQQUdFMF9QQUdFVkVSU0lPTjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU0lPVU5JVFBBR0UxX1BBR0VWRVJTSU9OOwogCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAogCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CkBAIC05MjIsNiArOTI0LDQ5IEBACiB9CiAKIC8qKgorICogbXB0MnNhc19jb25maWdfc2V0X3Nhc19pb3VuaXRfcGcxIC0gc2VuZCBzYXMgaW91bml0IHBhZ2UgMQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCisgKiBAc3o6IHNpemUgb2YgYnVmZmVyIHBhc3NlZCBpbiBjb25maWdfcGFnZQorICogQ29udGV4dDogc2xlZXAuCisgKgorICogQ2FsbGluZyBmdW5jdGlvbiBzaG91bGQgY2FsbCBjb25maWdfZ2V0X251bWJlcl9oYmFfcGh5cyBwcmlvciB0bworICogdGhpcyBmdW5jdGlvbiwgc28gZW5vdWdoIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZm9yIGNvbmZpZ19wYWdlLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfc2V0X3Nhc19pb3VuaXRfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKKyAgICAqbXBpX3JlcGx5LCBNcGkyU2FzSU9Vbml0UGFnZTFfdCAqY29uZmlnX3BhZ2UsIHUxNiBzeikKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9FWFRFTkRFRDsKKwltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19JT19VTklUOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMTsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU0lPVU5JVFBBR0UxX1BBR0VWRVJTSU9OOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfV1JJVEVfQ1VSUkVOVDsKKwlfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLCBzeik7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfV1JJVEVfTlZSQU07CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsIHN6KTsKKyBvdXQ6CisJcmV0dXJuIHI7Cit9CisKKy8qKgogICogbXB0MnNhc19jb25maWdfZ2V0X2V4cGFuZGVyX3BnMCAtIG9idGFpbiBleHBhbmRlciBwYWdlIDAKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYwppbmRleCA4NGExMjRmLi5mYTliZjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKQEAgLTg5MSw2ICs4OTEsNyBAQAogCiAgaXNzdWVfaG9zdF9yZXNldDoKIAlpZiAoaXNzdWVfcmVzZXQpIHsKKwkJcmV0ID0gLUVOT0RBVEE7CiAJCWlmICgobXBpX3JlcXVlc3QtPkZ1bmN0aW9uID09IE1QSTJfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUIHx8CiAJCSAgICBtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0KIAkJICAgIE1QSTJfRlVOQ1RJT05fUkFJRF9TQ1NJX0lPX1BBU1NUSFJPVUdIKSkgewpAQCAtMjIwMiwxNCArMjIwMywxMCBAQAogCWthcmcuZGF0YV9vdXRfc2l6ZSA9IGthcmczMi5kYXRhX291dF9zaXplOwogCWthcmcubWF4X3NlbnNlX2J5dGVzID0ga2FyZzMyLm1heF9zZW5zZV9ieXRlczsKIAlrYXJnLmRhdGFfc2dlX29mZnNldCA9IGthcmczMi5kYXRhX3NnZV9vZmZzZXQ7Ci0JbWVtY3B5KCZrYXJnLnJlcGx5X2ZyYW1lX2J1Zl9wdHIsICZrYXJnMzIucmVwbHlfZnJhbWVfYnVmX3B0ciwKLQkgICAgc2l6ZW9mKHVpbnQzMl90KSk7Ci0JbWVtY3B5KCZrYXJnLmRhdGFfaW5fYnVmX3B0ciwgJmthcmczMi5kYXRhX2luX2J1Zl9wdHIsCi0JICAgIHNpemVvZih1aW50MzJfdCkpOwotCW1lbWNweSgma2FyZy5kYXRhX291dF9idWZfcHRyLCAma2FyZzMyLmRhdGFfb3V0X2J1Zl9wdHIsCi0JICAgIHNpemVvZih1aW50MzJfdCkpOwotCW1lbWNweSgma2FyZy5zZW5zZV9kYXRhX3B0ciwgJmthcmczMi5zZW5zZV9kYXRhX3B0ciwKLQkgICAgc2l6ZW9mKHVpbnQzMl90KSk7CisJa2FyZy5yZXBseV9mcmFtZV9idWZfcHRyID0gY29tcGF0X3B0cihrYXJnMzIucmVwbHlfZnJhbWVfYnVmX3B0cik7CisJa2FyZy5kYXRhX2luX2J1Zl9wdHIgPSBjb21wYXRfcHRyKGthcmczMi5kYXRhX2luX2J1Zl9wdHIpOworCWthcmcuZGF0YV9vdXRfYnVmX3B0ciA9IGNvbXBhdF9wdHIoa2FyZzMyLmRhdGFfb3V0X2J1Zl9wdHIpOworCWthcmcuc2Vuc2VfZGF0YV9wdHIgPSBjb21wYXRfcHRyKGthcmczMi5zZW5zZV9kYXRhX3B0cik7CiAJc3RhdGUgPSAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spID8gTk9OX0JMT0NLSU5HIDogQkxPQ0tJTkc7CiAJcmV0dXJuIF9jdGxfZG9fbXB0X2NvbW1hbmQoaW9jLCBrYXJnLCAmdWFyZy0+bWYsIHN0YXRlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwppbmRleCBlZmFiZWExLi5jN2VjM2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYWlkX2NsYXNzLmg+CiAKICNpbmNsdWRlICJtcHQyc2FzX2Jhc2UuaCIKIApAQCAtMTMzLDYgKzEzNCw5IEBACiAJdm9pZAkJCSpldmVudF9kYXRhOwogfTsKIAorLyogcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLworc3RhdGljIHN0cnVjdCByYWlkX3RlbXBsYXRlICptcHQyc2FzX3JhaWRfdGVtcGxhdGU7CisKIC8qKgogICogc3RydWN0IF9zY3NpX2lvX3RyYW5zZmVyIC0gc2NzaSBpbyB0cmFuc2ZlcgogICogQGhhbmRsZTogc2FzIGRldmljZSBoYW5kbGUgKGFzc2lnbmVkIGJ5IGZpcm13YXJlKQpAQCAtMTMwNSw3ICsxMzA5LDYgQEAKIAlzdHJ1Y3QgTVBUMlNBU19ERVZJQ0UgKnNhc19kZXZpY2VfcHJpdl9kYXRhOwogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldDsKIAlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKLQlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNhc19kZXZpY2VfcHJpdl9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNjc2lfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMzMyLDIxICsxMzM1LDggQEAKIAkJaWYgKHJhaWRfZGV2aWNlKQogCQkJcmFpZF9kZXZpY2UtPnNkZXYgPSBzZGV2OyAvKiByYWlkIGlzIHNpbmdsZSBsdW4gKi8KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7Ci0JfSBlbHNlIHsKLQkJLyogc2V0IFRMUiBiaXQgZm9yIFNTUCBkZXZpY2VzICovCi0JCWlmICghKGlvYy0+ZmFjdHMuSU9DQ2FwYWJpbGl0aWVzICYKLQkJICAgICBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfVExSKSkKLQkJCWdvdG8gb3V0OwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQkJc2FzX2RldmljZSA9IG1wdDJzYXNfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKLQkJICAgc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPnNhc19hZGRyZXNzKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQkJaWYgKHNhc19kZXZpY2UgJiYgc2FzX2RldmljZS0+ZGV2aWNlX2luZm8gJgotCQkgICAgTVBJMl9TQVNfREVWSUNFX0lORk9fU1NQX1RBUkdFVCkKLQkJCXNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyB8PSBNUFRfREVWSUNFX1RMUl9PTjsKIAl9CiAKLSBvdXQ6CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MTksNiArMTQwOSwxNDAgQEAKIH0KIAogLyoqCisgKiBfc2NzaWhfaXNfcmFpZCAtIHJldHVybiBib29sZWFuIGluZGljYXRpbmcgZGV2aWNlIGlzIHJhaWQgdm9sdW1lCisgKiBAZGV2IHRoZSBkZXZpY2Ugc3RydWN0IG9iamVjdAorICovCitzdGF0aWMgaW50Citfc2NzaWhfaXNfcmFpZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKKworCXJldHVybiAoc2Rldi0+Y2hhbm5lbCA9PSBSQUlEX0NIQU5ORUwpID8gMSA6IDA7Cit9CisKKy8qKgorICogX3Njc2loX2dldF9yZXN5bmMgLSBnZXQgcmFpZCB2b2x1bWUgcmVzeW5jIHBlcmNlbnQgY29tcGxldGUKKyAqIEBkZXYgdGhlIGRldmljZSBzdHJ1Y3Qgb2JqZWN0CisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfZ2V0X3Jlc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNkZXYtPmhvc3QpOworCXN0YXRpYyBzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCU1waTJSYWlkVm9sUGFnZTBfdCB2b2xfcGcwOworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwl1MzIgdm9sdW1lX3N0YXR1c19mbGFnczsKKwl1OCBwZXJjZW50X2NvbXBsZXRlID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlyYWlkX2RldmljZSA9IF9zY3NpaF9yYWlkX2RldmljZV9maW5kX2J5X2lkKGlvYywgc2Rldi0+aWQsCisJICAgIHNkZXYtPmNoYW5uZWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJaWYgKCFyYWlkX2RldmljZSkKKwkJZ290byBvdXQ7CisKKwlpZiAobXB0MnNhc19jb25maWdfZ2V0X3JhaWRfdm9sdW1lX3BnMChpb2MsICZtcGlfcmVwbHksICZ2b2xfcGcwLAorCSAgICAgTVBJMl9SQUlEX1ZPTFVNRV9QR0FEX0ZPUk1fSEFORExFLCByYWlkX2RldmljZS0+aGFuZGxlLAorCSAgICAgc2l6ZW9mKE1waTJSYWlkVm9sUGFnZTBfdCkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlnb3RvIG91dDsKKwl9CisKKwl2b2x1bWVfc3RhdHVzX2ZsYWdzID0gbGUzMl90b19jcHUodm9sX3BnMC5Wb2x1bWVTdGF0dXNGbGFncyk7CisJaWYgKHZvbHVtZV9zdGF0dXNfZmxhZ3MgJiBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX1JFU1lOQ19JTl9QUk9HUkVTUykKKwkJcGVyY2VudF9jb21wbGV0ZSA9IHJhaWRfZGV2aWNlLT5wZXJjZW50X2NvbXBsZXRlOworIG91dDoKKwlyYWlkX3NldF9yZXN5bmMobXB0MnNhc19yYWlkX3RlbXBsYXRlLCBkZXYsIHBlcmNlbnRfY29tcGxldGUpOworfQorCisvKioKKyAqIF9zY3NpaF9nZXRfc3RhdGUgLSBnZXQgcmFpZCB2b2x1bWUgbGV2ZWwKKyAqIEBkZXYgdGhlIGRldmljZSBzdHJ1Y3Qgb2JqZWN0CisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfZ2V0X3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2Rldi0+aG9zdCk7CisJc3RhdGljIHN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTXBpMlJhaWRWb2xQYWdlMF90IHZvbF9wZzA7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCXUzMiB2b2xzdGF0ZTsKKwllbnVtIHJhaWRfc3RhdGUgc3RhdGUgPSBSQUlEX1NUQVRFX1VOS05PV047CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9pZChpb2MsIHNkZXYtPmlkLAorCSAgICBzZGV2LT5jaGFubmVsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCWlmICghcmFpZF9kZXZpY2UpCisJCWdvdG8gb3V0OworCisJaWYgKG1wdDJzYXNfY29uZmlnX2dldF9yYWlkX3ZvbHVtZV9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmdm9sX3BnMCwKKwkgICAgIE1QSTJfUkFJRF9WT0xVTUVfUEdBRF9GT1JNX0hBTkRMRSwgcmFpZF9kZXZpY2UtPmhhbmRsZSwKKwkgICAgIHNpemVvZihNcGkyUmFpZFZvbFBhZ2UwX3QpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCisJdm9sc3RhdGUgPSBsZTMyX3RvX2NwdSh2b2xfcGcwLlZvbHVtZVN0YXR1c0ZsYWdzKTsKKwlpZiAodm9sc3RhdGUgJiBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX1JFU1lOQ19JTl9QUk9HUkVTUykgeworCQlzdGF0ZSA9IFJBSURfU1RBVEVfUkVTWU5DSU5HOworCQlnb3RvIG91dDsKKwl9CisKKwlzd2l0Y2ggKHZvbF9wZzAuVm9sdW1lU3RhdGUpIHsKKwljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfT1BUSU1BTDoKKwljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfT05MSU5FOgorCQlzdGF0ZSA9IFJBSURfU1RBVEVfQUNUSVZFOworCQlicmVhazsKKwljYXNlICBNUEkyX1JBSURfVk9MX1NUQVRFX0RFR1JBREVEOgorCQlzdGF0ZSA9IFJBSURfU1RBVEVfREVHUkFERUQ7CisJCWJyZWFrOworCWNhc2UgTVBJMl9SQUlEX1ZPTF9TVEFURV9GQUlMRUQ6CisJY2FzZSBNUEkyX1JBSURfVk9MX1NUQVRFX01JU1NJTkc6CisJCXN0YXRlID0gUkFJRF9TVEFURV9PRkZMSU5FOworCQlicmVhazsKKwl9Cisgb3V0OgorCXJhaWRfc2V0X3N0YXRlKG1wdDJzYXNfcmFpZF90ZW1wbGF0ZSwgZGV2LCBzdGF0ZSk7Cit9CisKKy8qKgorICogX3Njc2loX3NldF9sZXZlbCAtIHNldCByYWlkIGxldmVsCisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKiBAcmFpZF9kZXZpY2U6IHJhaWRfZGV2aWNlIG9iamVjdAorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3NldF9sZXZlbChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlKQoreworCWVudW0gcmFpZF9sZXZlbCBsZXZlbCA9IFJBSURfTEVWRUxfVU5LTk9XTjsKKworCXN3aXRjaCAocmFpZF9kZXZpY2UtPnZvbHVtZV90eXBlKSB7CisJY2FzZSBNUEkyX1JBSURfVk9MX1RZUEVfUkFJRDA6CisJCWxldmVsID0gUkFJRF9MRVZFTF8wOworCQlicmVhazsKKwljYXNlIE1QSTJfUkFJRF9WT0xfVFlQRV9SQUlEMTA6CisJCWxldmVsID0gUkFJRF9MRVZFTF8xMDsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1JBSURfVk9MX1RZUEVfUkFJRDFFOgorCQlsZXZlbCA9IFJBSURfTEVWRUxfMUU7CisJCWJyZWFrOworCWNhc2UgTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQxOgorCQlsZXZlbCA9IFJBSURfTEVWRUxfMTsKKwkJYnJlYWs7CisJfQorCisJcmFpZF9zZXRfbGV2ZWwobXB0MnNhc19yYWlkX3RlbXBsYXRlLCAmc2Rldi0+c2Rldl9nZW5kZXYsIGxldmVsKTsKK30KKworLyoqCiAgKiBfc2NzaWhfZ2V0X3ZvbHVtZV9jYXBhYmlsaXRpZXMgLSB2b2x1bWUgY2FwYWJpbGl0aWVzCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzYXNfZGV2aWNlOiB0aGUgcmFpZF9kZXZpY2Ugb2JqZWN0CkBAIC0xNDc5LDYgKzE2MDMsMzIgQEAKIH0KIAogLyoqCisgKiBfc2NzaWhfZW5hYmxlX3RsciAtIHNldHRpbmcgVExSIGZsYWdzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBFbmFibGluZyBUcmFuc2FjdGlvbiBMYXllciBSZXRyaWVzIGZvciB0YXBlIGRldmljZXMgd2hlbgorICogdnBkIHBhZ2UgMHg5MCBpcyBwcmVzZW50CisgKgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2VuYWJsZV90bHIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJLyogb25seSBmb3IgVEFQRSAqLworCWlmIChzZGV2LT50eXBlICE9IFRZUEVfVEFQRSkKKwkJcmV0dXJuOworCisJaWYgKCEoaW9jLT5mYWN0cy5JT0NDYXBhYmlsaXRpZXMgJiBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfVExSKSkKKwkJcmV0dXJuOworCisJc2FzX2VuYWJsZV90bHIoc2Rldik7CisJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiVExSICVzXG4iLAorCSAgICBzYXNfaXNfdGxyX2VuYWJsZWQoc2RldikgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKTsKKwlyZXR1cm47CisKK30KKworLyoqCiAgKiBfc2NzaWhfc2xhdmVfY29uZmlndXJlIC0gZGV2aWNlIGNvbmZpZ3VyZSByb3V0aW5lLgogICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAogICoKQEAgLTE1NzQsNiArMTcyNCw4IEBACiAJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXJhaWRfZGV2aWNlLT53d2lkLAogCQkgICAgcmFpZF9kZXZpY2UtPm51bV9wZHMsIGRzKTsKIAkJX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgsIFNDU0lfUURFUFRIX0RFRkFVTFQpOworCQkvKiByYWlkIHRyYW5zcG9ydCBzdXBwb3J0ICovCisJCV9zY3NpaF9zZXRfbGV2ZWwoc2RldiwgcmFpZF9kZXZpY2UpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE2MjEsOCArMTc3MywxMCBAQAogCiAJX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgsIFNDU0lfUURFUFRIX0RFRkFVTFQpOwogCi0JaWYgKHNzcF90YXJnZXQpCisJaWYgKHNzcF90YXJnZXQpIHsKIAkJc2FzX3JlYWRfcG9ydF9tb2RlX3BhZ2Uoc2Rldik7CisJCV9zY3NpaF9lbmFibGVfdGxyKGlvYywgc2Rldik7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0yOTA4LDggKzMwNjIsOSBAQAogCiAJfSBlbHNlCiAJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKLQotCWlmICgoc2FzX2RldmljZV9wcml2X2RhdGEtPmZsYWdzICYgTVBUX0RFVklDRV9UTFJfT04pKQorCS8qIE1ha2Ugc3VyZSBEZXZpY2UgaXMgbm90IHJhaWQgdm9sdW1lICovCisJaWYgKCFfc2NzaWhfaXNfcmFpZCgmc2NtZC0+ZGV2aWNlLT5zZGV2X2dlbmRldikgJiYKKwkgICAgc2FzX2lzX3Rscl9lbmFibGVkKHNjbWQtPmRldmljZSkpCiAJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfVExSX09OOwogCiAJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZF9zY3NpaW8oaW9jLCBpb2MtPnNjc2lfaW9fY2JfaWR4LCBzY21kKTsKQEAgLTMyOTgsMTAgKzM0NTMsMTIgQEAKIAkJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS0+UmVzcG9uc2VJbmZvKSAmIDB4RkY7CiAJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YS0+dGxyX3Nub29wX2NoZWNrKSB7CiAJCXNhc19kZXZpY2VfcHJpdl9kYXRhLT50bHJfc25vb3BfY2hlY2srKzsKLQkJaWYgKChzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfREVWSUNFX1RMUl9PTikgJiYKLQkJICAgIHJlc3BvbnNlX2NvZGUgPT0gTVBJMl9TQ1NJVEFTS01HTVRfUlNQX0lOVkFMSURfRlJBTUUpCi0JCQlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgJj0KLQkJCSAgICB+TVBUX0RFVklDRV9UTFJfT047CisJaWYgKCFfc2NzaWhfaXNfcmFpZCgmc2NtZC0+ZGV2aWNlLT5zZGV2X2dlbmRldikgJiYKKwkJc2FzX2lzX3Rscl9lbmFibGVkKHNjbWQtPmRldmljZSkgJiYKKwkJICAgIHJlc3BvbnNlX2NvZGUgPT0gTVBJMl9TQ1NJVEFTS01HTVRfUlNQX0lOVkFMSURfRlJBTUUpIHsKKwkJCXNhc19kaXNhYmxlX3RscihzY21kLT5kZXZpY2UpOworCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzY21kLT5kZXZpY2UsICJUTFIgZGlzYWJsZWRcbiIpOworCQl9CiAJfQogCiAJeGZlcl9jbnQgPSBsZTMyX3RvX2NwdShtcGlfcmVwbHktPlRyYW5zZmVyQ291bnQpOwpAQCAtNTE3MCwxMSArNTMyNywzMyBAQAogX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKICAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CisJTXBpMkV2ZW50RGF0YUlyT3BlcmF0aW9uU3RhdHVzX3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKKwlzdGF0aWMgc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgaGFuZGxlOworCiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCiAJCV9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudF9kZWJ1Zyhpb2MsCi0JCSAgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQkgICAgIGV2ZW50X2RhdGEpOwogI2VuZGlmCisKKwkvKiBjb2RlIGFkZGVkIGZvciByYWlkIHRyYW5zcG9ydCBzdXBwb3J0ICovCisJaWYgKGV2ZW50X2RhdGEtPlJBSURPcGVyYXRpb24gPT0gTVBJMl9FVkVOVF9JUl9SQUlET1BfUkVTWU5DKSB7CisKKwkJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+Vm9sRGV2SGFuZGxlKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJCXJhaWRfZGV2aWNlID0gX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwkJaWYgKCFyYWlkX2RldmljZSkKKwkJCXJldHVybjsKKworCQlpZiAoZXZlbnRfZGF0YS0+UkFJRE9wZXJhdGlvbiA9PSBNUEkyX0VWRU5UX0lSX1JBSURPUF9SRVNZTkMpCisJCQlyYWlkX2RldmljZS0+cGVyY2VudF9jb21wbGV0ZSA9CisJCQkgICAgZXZlbnRfZGF0YS0+UGVyY2VudENvbXBsZXRlOworCX0KIH0KIAogLyoqCkBAIC01OTk4LDYgKzYxNzcsOCBAQAogCXN0cnVjdCBfc2FzX3BvcnQgKm1wdDJzYXNfcG9ydDsKIAlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CiAJc3RydWN0IF9zYXNfbm9kZSAqZXhwYW5kZXJfc2libGluZzsKKwlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZSwgKm5leHQ7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqd3E7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNjAxMSw2ICs2MTkyLDIxIEBACiAJaWYgKHdxKQogCQlkZXN0cm95X3dvcmtxdWV1ZSh3cSk7CiAKKwkvKiByZWxlYXNlIGFsbCB0aGUgdm9sdW1lcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyYWlkX2RldmljZSwgbmV4dCwgJmlvYy0+cmFpZF9kZXZpY2VfbGlzdCwKKwkgICAgbGlzdCkgeworCQlpZiAocmFpZF9kZXZpY2UtPnN0YXJnZXQpIHsKKwkJCXNhc190YXJnZXRfcHJpdl9kYXRhID0KKwkJCSAgICByYWlkX2RldmljZS0+c3RhcmdldC0+aG9zdGRhdGE7CisJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZGVsZXRlZCA9IDE7CisJCQlzY3NpX3JlbW92ZV90YXJnZXQoJnJhaWRfZGV2aWNlLT5zdGFyZ2V0LT5kZXYpOworCQl9CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJyZW1vdmluZyBoYW5kbGUoMHglMDR4KSwgd3dpZCIKKwkJICAgICIoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLCAgcmFpZF9kZXZpY2UtPmhhbmRsZSwKKwkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHJhaWRfZGV2aWNlLT53d2lkKTsKKwkJX3Njc2loX3JhaWRfZGV2aWNlX3JlbW92ZShpb2MsIHJhaWRfZGV2aWNlKTsKKwl9CisKIAkvKiBmcmVlIHBvcnRzIGF0dGFjaGVkIHRvIHRoZSBzYXNfaG9zdCAqLwogIHJldHJ5X2FnYWluOgogCWxpc3RfZm9yX2VhY2hfZW50cnkobXB0MnNhc19wb3J0LApAQCAtNjM3Myw2ICs2NTY5LDEzIEBACiAjZW5kaWYKIH07CiAKKy8qIHJhaWQgdHJhbnNwb3J0IHN1cHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3QgcmFpZF9mdW5jdGlvbl90ZW1wbGF0ZSBtcHQyc2FzX3JhaWRfZnVuY3Rpb25zID0geworCS5jb29raWUJCT0gJnNjc2loX2RyaXZlcl90ZW1wbGF0ZSwKKwkuaXNfcmFpZAk9IF9zY3NpaF9pc19yYWlkLAorCS5nZXRfcmVzeW5jCT0gX3Njc2loX2dldF9yZXN5bmMsCisJLmdldF9zdGF0ZQk9IF9zY3NpaF9nZXRfc3RhdGUsCit9OwogCiAvKioKICAqIF9zY3NpaF9pbml0IC0gbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhpcyBkcml2ZXIuCkBAIC02MzkyLDYgKzY1OTUsMTIgQEAKIAkgICAgc2FzX2F0dGFjaF90cmFuc3BvcnQoJm1wdDJzYXNfdHJhbnNwb3J0X2Z1bmN0aW9ucyk7CiAJaWYgKCFtcHQyc2FzX3RyYW5zcG9ydF90ZW1wbGF0ZSkKIAkJcmV0dXJuIC1FTk9ERVY7CisJLyogcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLworCW1wdDJzYXNfcmFpZF90ZW1wbGF0ZSA9IHJhaWRfY2xhc3NfYXR0YWNoKCZtcHQyc2FzX3JhaWRfZnVuY3Rpb25zKTsKKwlpZiAoIW1wdDJzYXNfcmFpZF90ZW1wbGF0ZSkgeworCQlzYXNfcmVsZWFzZV90cmFuc3BvcnQobXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAltcHQyc2FzX2Jhc2VfaW5pdGlhbGl6ZV9jYWxsYmFja19oYW5kbGVyKCk7CiAKQEAgLTY0MjYsOCArNjYzNSwxMSBAQAogCW1wdDJzYXNfY3RsX2luaXQoKTsKIAogCWVycm9yID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2NzaWhfZHJpdmVyKTsKLQlpZiAoZXJyb3IpCisJaWYgKGVycm9yKSB7CisJCS8qIHJhaWQgdHJhbnNwb3J0IHN1cHBvcnQgKi8KKwkJcmFpZF9jbGFzc19yZWxlYXNlKG1wdDJzYXNfcmFpZF90ZW1wbGF0ZSk7CiAJCXNhc19yZWxlYXNlX3RyYW5zcG9ydChtcHQyc2FzX3RyYW5zcG9ydF90ZW1wbGF0ZSk7CisJfQogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtNjQ0NSw3ICs2NjU3LDggQEAKIAogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2NzaWhfZHJpdmVyKTsKIAotCXNhc19yZWxlYXNlX3RyYW5zcG9ydChtcHQyc2FzX3RyYW5zcG9ydF90ZW1wbGF0ZSk7CisJbXB0MnNhc19jdGxfZXhpdCgpOworCiAJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcihzY3NpX2lvX2NiX2lkeCk7CiAJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih0bV9jYl9pZHgpOwogCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIoYmFzZV9jYl9pZHgpOwpAQCAtNjQ1Nyw3ICs2NjcwLDEwIEBACiAJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih0bV90cl9jYl9pZHgpOwogCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodG1fc2FzX2NvbnRyb2xfY2JfaWR4KTsKIAotCW1wdDJzYXNfY3RsX2V4aXQoKTsKKwkvKiByYWlkIHRyYW5zcG9ydCBzdXBwb3J0ICovCisJcmFpZF9jbGFzc19yZWxlYXNlKG1wdDJzYXNfcmFpZF90ZW1wbGF0ZSk7CisJc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlKTsKKwogfQogCiBtb2R1bGVfaW5pdChfc2NzaWhfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYwppbmRleCAzYTgyODcyLi43ODlmOWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKQEAgLTg1NSw2ICs4NTUsMTcgQEAKIAlyZXR1cm4gc2hvc3RfcHJpdihzaG9zdCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgX3Nhc19waHkgKgorX3RyYW5zcG9ydF9maW5kX2xvY2FsX3BoeShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHN0cnVjdCBzYXNfcGh5ICpwaHkpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5zYXNfaGJhLm51bV9waHlzOyBpKyspCisJCWlmIChpb2MtPnNhc19oYmEucGh5W2ldLnBoeSA9PSBwaHkpCisJCQlyZXR1cm4oJmlvYy0+c2FzX2hiYS5waHlbaV0pOworCXJldHVybiBOVUxMOworfQorCiAvKioKICAqIF90cmFuc3BvcnRfZ2V0X2xpbmtlcnJvcnMgLQogICogQHBoeTogVGhlIHNhcyBwaHkgb2JqZWN0CkBAIC04NzAsMTQgKzg4MSw4IEBACiAJc3RydWN0IF9zYXNfcGh5ICptcHQyc2FzX3BoeTsKIAlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CiAJTXBpMlNhc1BoeVBhZ2UxX3QgcGh5X3BnMTsKLQlpbnQgaTsKIAotCWZvciAoaSA9IDAsIG1wdDJzYXNfcGh5ID0gTlVMTDsgaSA8IGlvYy0+c2FzX2hiYS5udW1fcGh5cyAmJgotCSAgICAhbXB0MnNhc19waHk7IGkrKykgewotCQlpZiAoaW9jLT5zYXNfaGJhLnBoeVtpXS5waHkgIT0gcGh5KQotCQkJY29udGludWU7Ci0JCW1wdDJzYXNfcGh5ID0gJmlvYy0+c2FzX2hiYS5waHlbaV07Ci0JfQorCW1wdDJzYXNfcGh5ID0gX3RyYW5zcG9ydF9maW5kX2xvY2FsX3BoeShpb2MsIHBoeSk7CiAKIAlpZiAoIW1wdDJzYXNfcGh5KSAvKiB0aGlzIHBoeSBub3Qgb24gc2FzX2hvc3QgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC05NzEsMTQgKzk3Niw4IEBACiAJc3RydWN0IF9zYXNfcGh5ICptcHQyc2FzX3BoeTsKIAlNcGkyU2FzSW9Vbml0Q29udHJvbFJlcGx5X3QgbXBpX3JlcGx5OwogCU1waTJTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90IG1waV9yZXF1ZXN0OwotCWludCBpOwogCi0JZm9yIChpID0gMCwgbXB0MnNhc19waHkgPSBOVUxMOyBpIDwgaW9jLT5zYXNfaGJhLm51bV9waHlzICYmCi0JICAgICFtcHQyc2FzX3BoeTsgaSsrKSB7Ci0JCWlmIChpb2MtPnNhc19oYmEucGh5W2ldLnBoeSAhPSBwaHkpCi0JCQljb250aW51ZTsKLQkJbXB0MnNhc19waHkgPSAmaW9jLT5zYXNfaGJhLnBoeVtpXTsKLQl9CisJbXB0MnNhc19waHkgPSBfdHJhbnNwb3J0X2ZpbmRfbG9jYWxfcGh5KGlvYywgcGh5KTsKIAogCWlmICghbXB0MnNhc19waHkpIC8qIHRoaXMgcGh5IG5vdCBvbiBzYXNfaG9zdCAqLwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwMDYsNiArMTAwNSwxNzMgQEAKIH0KIAogLyoqCisgKiBfdHJhbnNwb3J0X3BoeV9lbmFibGUgLSBlbmFibGUvZGlzYWJsZSBwaHlzCisgKiBAcGh5OiBUaGUgc2FzIHBoeSBvYmplY3QKKyAqIEBlbmFibGU6IGVuYWJsZSBwaHkgd2hlbiB0cnVlCisgKgorICogT25seSBzdXBwb3J0IHNhc19ob3N0IGRpcmVjdCBhdHRhY2hlZCBwaHlzLgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX3RyYW5zcG9ydF9waHlfZW5hYmxlKHN0cnVjdCBzYXNfcGh5ICpwaHksIGludCBlbmFibGUpCit7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gcGh5X3RvX2lvYyhwaHkpOworCXN0cnVjdCBfc2FzX3BoeSAqbXB0MnNhc19waHk7CisJTXBpMlNhc0lPVW5pdFBhZ2UxX3QgKnNhc19pb3VuaXRfcGcxID0gTlVMTDsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJdTE2IGlvY19zdGF0dXM7CisJdTE2IHN6OworCWludCByYyA9IDA7CisKKwltcHQyc2FzX3BoeSA9IF90cmFuc3BvcnRfZmluZF9sb2NhbF9waHkoaW9jLCBwaHkpOworCisJaWYgKCFtcHQyc2FzX3BoeSkgLyogdGhpcyBwaHkgbm90IG9uIHNhc19ob3N0ICovCisJCXJldHVybiAtRUlOVkFMOworCisJLyogc2FzX2lvdW5pdCBwYWdlIDEgKi8KKwlzeiA9IG9mZnNldG9mKE1waTJTYXNJT1VuaXRQYWdlMV90LCBQaHlEYXRhKSArIChpb2MtPnNhc19oYmEubnVtX3BoeXMgKgorCSAgICBzaXplb2YoTXBpMlNhc0lPVW5pdDFQaHlEYXRhX3QpKTsKKwlzYXNfaW91bml0X3BnMSA9IGt6YWxsb2Moc3osIEdGUF9LRVJORUwpOworCWlmICghc2FzX2lvdW5pdF9wZzEpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCWlmICgobXB0MnNhc19jb25maWdfZ2V0X3Nhc19pb3VuaXRfcGcxKGlvYywgJm1waV9yZXBseSwKKwkgICAgc2FzX2lvdW5pdF9wZzEsIHN6KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKKwkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwlpZiAoaW9jX3N0YXR1cyAhPSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCWlmIChlbmFibGUpCisJCXNhc19pb3VuaXRfcGcxLT5QaHlEYXRhW21wdDJzYXNfcGh5LT5waHlfaWRdLlBoeUZsYWdzCisJCSAgICAmPSB+TVBJMl9TQVNJT1VOSVQxX1BIWUZMQUdTX1BIWV9ESVNBQkxFOworCWVsc2UKKwkJc2FzX2lvdW5pdF9wZzEtPlBoeURhdGFbbXB0MnNhc19waHktPnBoeV9pZF0uUGh5RmxhZ3MKKwkJICAgIHw9IE1QSTJfU0FTSU9VTklUMV9QSFlGTEFHU19QSFlfRElTQUJMRTsKKworCW1wdDJzYXNfY29uZmlnX3NldF9zYXNfaW91bml0X3BnMShpb2MsICZtcGlfcmVwbHksIHNhc19pb3VuaXRfcGcxLCBzeik7CisKKyBvdXQ6CisJa2ZyZWUoc2FzX2lvdW5pdF9wZzEpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBfdHJhbnNwb3J0X3BoeV9zcGVlZCAtIHNldCBwaHkgbWluL21heCBsaW5rIHJhdGVzCisgKiBAcGh5OiBUaGUgc2FzIHBoeSBvYmplY3QKKyAqIEByYXRlczogcmF0ZXMgZGVmaW5lZCBpbiBzYXNfcGh5X2xpbmtyYXRlcworICoKKyAqIE9ubHkgc3VwcG9ydCBzYXNfaG9zdCBkaXJlY3QgYXR0YWNoZWQgcGh5cy4KKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK190cmFuc3BvcnRfcGh5X3NwZWVkKHN0cnVjdCBzYXNfcGh5ICpwaHksIHN0cnVjdCBzYXNfcGh5X2xpbmtyYXRlcyAqcmF0ZXMpCit7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gcGh5X3RvX2lvYyhwaHkpOworCXN0cnVjdCBfc2FzX3BoeSAqbXB0MnNhc19waHk7CisJTXBpMlNhc0lPVW5pdFBhZ2UxX3QgKnNhc19pb3VuaXRfcGcxID0gTlVMTDsKKwlNcGkyU2FzUGh5UGFnZTBfdCBwaHlfcGcwOworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwl1MTYgaW9jX3N0YXR1czsKKwl1MTYgc3o7CisJaW50IGk7CisJaW50IHJjID0gMDsKKworCW1wdDJzYXNfcGh5ID0gX3RyYW5zcG9ydF9maW5kX2xvY2FsX3BoeShpb2MsIHBoeSk7CisKKwlpZiAoIW1wdDJzYXNfcGh5KSAvKiB0aGlzIHBoeSBub3Qgb24gc2FzX2hvc3QgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXJhdGVzLT5taW5pbXVtX2xpbmtyYXRlKQorCQlyYXRlcy0+bWluaW11bV9saW5rcmF0ZSA9IHBoeS0+bWluaW11bV9saW5rcmF0ZTsKKwllbHNlIGlmIChyYXRlcy0+bWluaW11bV9saW5rcmF0ZSA8IHBoeS0+bWluaW11bV9saW5rcmF0ZV9odykKKwkJcmF0ZXMtPm1pbmltdW1fbGlua3JhdGUgPSBwaHktPm1pbmltdW1fbGlua3JhdGVfaHc7CisKKwlpZiAoIXJhdGVzLT5tYXhpbXVtX2xpbmtyYXRlKQorCQlyYXRlcy0+bWF4aW11bV9saW5rcmF0ZSA9IHBoeS0+bWF4aW11bV9saW5rcmF0ZTsKKwllbHNlIGlmIChyYXRlcy0+bWF4aW11bV9saW5rcmF0ZSA+IHBoeS0+bWF4aW11bV9saW5rcmF0ZV9odykKKwkJcmF0ZXMtPm1heGltdW1fbGlua3JhdGUgPSBwaHktPm1heGltdW1fbGlua3JhdGVfaHc7CisKKwkvKiBzYXNfaW91bml0IHBhZ2UgMSAqLworCXN6ID0gb2Zmc2V0b2YoTXBpMlNhc0lPVW5pdFBhZ2UxX3QsIFBoeURhdGEpICsgKGlvYy0+c2FzX2hiYS5udW1fcGh5cyAqCisJICAgIHNpemVvZihNcGkyU2FzSU9Vbml0MVBoeURhdGFfdCkpOworCXNhc19pb3VuaXRfcGcxID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXNfaW91bml0X3BnMSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzEoaW9jLCAmbXBpX3JlcGx5LAorCSAgICBzYXNfaW91bml0X3BnMSwgc3opKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKwlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgorCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOworCWlmIChpb2Nfc3RhdHVzICE9IE1QSTJfSU9DU1RBVFVTX1NVQ0NFU1MpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGlvYy0+c2FzX2hiYS5udW1fcGh5czsgaSsrKSB7CisJCWlmIChtcHQyc2FzX3BoeS0+cGh5X2lkICE9IGkpIHsKKwkJCXNhc19pb3VuaXRfcGcxLT5QaHlEYXRhW2ldLk1heE1pbkxpbmtSYXRlID0KKwkJCSAgICAoaW9jLT5zYXNfaGJhLnBoeVtpXS5waHktPm1pbmltdW1fbGlua3JhdGUgKworCQkJICAgIChpb2MtPnNhc19oYmEucGh5W2ldLnBoeS0+bWF4aW11bV9saW5rcmF0ZSA8PCA0KSk7CisJCX0gZWxzZSB7CisJCQlzYXNfaW91bml0X3BnMS0+UGh5RGF0YVtpXS5NYXhNaW5MaW5rUmF0ZSA9CisJCQkgICAgKHJhdGVzLT5taW5pbXVtX2xpbmtyYXRlICsKKwkJCSAgICAocmF0ZXMtPm1heGltdW1fbGlua3JhdGUgPDwgNCkpOworCQl9CisJfQorCisJaWYgKG1wdDJzYXNfY29uZmlnX3NldF9zYXNfaW91bml0X3BnMShpb2MsICZtcGlfcmVwbHksIHNhc19pb3VuaXRfcGcxLAorCSAgICBzeikpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBsaW5rIHJlc2V0ICovCisJX3RyYW5zcG9ydF9waHlfcmVzZXQocGh5LCAwKTsKKworCS8qIHJlYWQgcGh5IHBhZ2UgMCwgdGhlbiB1cGRhdGUgdGhlIHJhdGVzIGluIHRoZSBzYXMgdHJhbnNwb3J0IHBoeSAqLworCWlmICghbXB0MnNhc19jb25maWdfZ2V0X3BoeV9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmcGh5X3BnMCwKKwkgICAgbXB0MnNhc19waHktPnBoeV9pZCkpIHsKKwkJcGh5LT5taW5pbXVtX2xpbmtyYXRlID0gX3RyYW5zcG9ydF9jb252ZXJ0X3BoeV9saW5rX3JhdGUoCisJCSAgICBwaHlfcGcwLlByb2dyYW1tZWRMaW5rUmF0ZSAmIE1QSTJfU0FTX1BSQVRFX01JTl9SQVRFX01BU0spOworCQlwaHktPm1heGltdW1fbGlua3JhdGUgPSBfdHJhbnNwb3J0X2NvbnZlcnRfcGh5X2xpbmtfcmF0ZSgKKwkJICAgIHBoeV9wZzAuUHJvZ3JhbW1lZExpbmtSYXRlID4+IDQpOworCQlwaHktPm5lZ290aWF0ZWRfbGlua3JhdGUgPSBfdHJhbnNwb3J0X2NvbnZlcnRfcGh5X2xpbmtfcmF0ZSgKKwkJICAgIHBoeV9wZzAuTmVnb3RpYXRlZExpbmtSYXRlICYKKwkJICAgIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfTUFTS19QSFlTSUNBTCk7CisJfQorCisgb3V0OgorCWtmcmVlKHNhc19pb3VuaXRfcGcxKTsKKwlyZXR1cm4gcmM7Cit9CisKKworLyoqCiAgKiBfdHJhbnNwb3J0X3NtcF9oYW5kbGVyIC0gdHJhbnNwb3J0IHBvcnRhbCBmb3Igc21wIHBhc3N0aHJ1CiAgKiBAc2hvc3Q6IHNob3N0IG9iamVjdAogICogQHJwaHk6IHNhcyB0cmFuc3BvcnQgcnBoeSBvYmplY3QKQEAgLTEyMDcsNiArMTM3Myw4IEBACiAJLmdldF9lbmNsb3N1cmVfaWRlbnRpZmllciA9IF90cmFuc3BvcnRfZ2V0X2VuY2xvc3VyZV9pZGVudGlmaWVyLAogCS5nZXRfYmF5X2lkZW50aWZpZXIJPSBfdHJhbnNwb3J0X2dldF9iYXlfaWRlbnRpZmllciwKIAkucGh5X3Jlc2V0CQk9IF90cmFuc3BvcnRfcGh5X3Jlc2V0LAorCS5waHlfZW5hYmxlCQk9IF90cmFuc3BvcnRfcGh5X2VuYWJsZSwKKwkuc2V0X3BoeV9zcGVlZAkJPSBfdHJhbnNwb3J0X3BoeV9zcGVlZCwKIAkuc21wX2hhbmRsZXIJCT0gX3RyYW5zcG9ydF9zbXBfaGFuZGxlciwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2luaXQuYwppbmRleCBjMmYxMDMyLi5mODBjMWRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2luaXQuYwpAQCAtNjU0LDcgKzY1NCw3IEBACiAJfQogCWNoaXAgPSAmcG04MDAxX2NoaXBzW2VudC0+ZHJpdmVyX2RhdGFdOwogCVNIT1NUX1RPX1NBU19IQShzaG9zdCkgPQotCQlrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCksIEdGUF9LRVJORUwpOworCQlremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCksIEdGUF9LRVJORUwpOwogCWlmICghU0hPU1RfVE9fU0FTX0hBKHNob3N0KSkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF9mcmVlX2hvc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuYwppbmRleCBiNmYxZWY5Li45YjFjMTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKQEAgLTIzNSw3ICsyMzUsNyBAQAogCQlzY3NpX2Rldi0+YWxsb3dfcmVzdGFydCA9IDE7CiAJCWJsa19xdWV1ZV9ycV90aW1lb3V0KHNjc2lfZGV2LT5yZXF1ZXN0X3F1ZXVlLAogCQkJCSAgICAgUE1DUkFJRF9WU0VUX0lPX1RJTUVPVVQpOwotCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2NzaV9kZXYtPnJlcXVlc3RfcXVldWUsCisJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhzY3NpX2Rldi0+cmVxdWVzdF9xdWV1ZSwKIAkJCQkgICAgICBQTUNSQUlEX1ZTRVRfTUFYX1NFQ1RPUlMpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYyBiL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKaW5kZXggODM3MWQ5MS4uNDlhYzQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCkBAIC0xNjQwLDggKzE2NDAsMTAgQEAKIAl1aW50MTZfdCBtYltNQUlMQk9YX1JFR0lTVEVSX0NPVU5UXSwgaTsKIAlpbnQgZXJyOwogCisJc3Bpbl91bmxvY2tfaXJxKGhhLT5ob3N0LT5ob3N0X2xvY2spOwogCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBxbDEyODBfYm9hcmRfdGJsW2hhLT5kZXZudW1dLmZ3bmFtZSwKIAkJCSAgICAgICAmaGEtPnBkZXYtPmRldik7CisJc3Bpbl9sb2NrX2lycShoYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGxvYWQgaW1hZ2UgXCIlc1wiIGVyciAlZFxuIiwKIAkJICAgICAgIHFsMTI4MF9ib2FyZF90YmxbaGEtPmRldm51bV0uZnduYW1lLCBlcnIpOwpAQCAtMTY5OSw4ICsxNzAxLDEwIEBACiAJCXJldHVybiAtRU5PTUVNOwogI2VuZGlmCiAKKwlzcGluX3VubG9ja19pcnEoaGEtPmhvc3QtPmhvc3RfbG9jayk7CiAJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIHFsMTI4MF9ib2FyZF90YmxbaGEtPmRldm51bV0uZnduYW1lLAogCQkJICAgICAgICZoYS0+cGRldi0+ZGV2KTsKKwlzcGluX2xvY2tfaXJxKGhhLT5ob3N0LT5ob3N0X2xvY2spOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gbG9hZCBpbWFnZSBcIiVzXCIgZXJyICVkXG4iLAogCQkgICAgICAgcWwxMjgwX2JvYXJkX3RibFtoYS0+ZGV2bnVtXS5md25hbWUsIGVycik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwppbmRleCAzYTlmNWIyLi45MGQxZTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKQEAgLTExLDcgKzExLDkgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiBzdGF0aWMgaW50IHFsYTI0eHhfdnBvcnRfZGlzYWJsZShzdHJ1Y3QgZmNfdnBvcnQgKiwgYm9vbCk7Ci0KK3N0YXRpYyBpbnQgcWxhODR4eF9yZXNldChzY3NpX3FsYV9ob3N0X3QgKiwgc3RydWN0IG1zZ19lY2hvX2xiICosIHN0cnVjdCBmY19ic2dfam9iICopOworaW50IHFsYTg0eHhfcmVzZXRfY2hpcChzY3NpX3FsYV9ob3N0X3QgKiwgdWludDE2X3QsIHVpbnQxNl90ICopOworc3RhdGljIGludCBxbGE4NHh4X21nbXRfY21kKHNjc2lfcWxhX2hvc3RfdCAqLCBzdHJ1Y3QgbXNnX2VjaG9fbGIgKiwgc3RydWN0IGZjX2JzZ19qb2IgKik7CiAvKiBTWVNGUyBhdHRyaWJ1dGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3NpemVfdApAQCAtMTE2OCw2ICsxMTcwLDI4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90CitxbGEyNHh4Xzg0eHhfZndfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCWludCBydmFsID0gUUxBX1NVQ0NFU1M7CisJdWludDE2X3Qgc3RhdHVzWzJdID0gezAsIDB9OworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChkZXYpKTsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKworCWlmIChJU19RTEE4NFhYKGhhKSAmJiBoYS0+Y3M4NHh4KSB7CisJCWlmIChoYS0+Y3M4NHh4LT5vcF9md192ZXJzaW9uID09IDApIHsKKwkJCXJ2YWwgPSBxbGE4NHh4X3ZlcmlmeV9jaGlwKHZoYSwgc3RhdHVzKTsKKwl9CisKKwlpZiAoKHJ2YWwgPT0gUUxBX1NVQ0NFU1MpICYmIChzdGF0dXNbMF0gPT0gMCkpCisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLAorCQkJKHVpbnQzMl90KWhhLT5jczg0eHgtPm9wX2Z3X3ZlcnNpb24pOworCX0KKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIlxuIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CiBxbGEyeDAwX21waV92ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKICAgICBjaGFyICpidWYpCiB7CkBAIC0xMjgxLDYgKzEzMDUsOCBAQAogCQkgICBxbGEyeDAwX29wdHJvbV9mY29kZV92ZXJzaW9uX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKG9wdHJvbV9md192ZXJzaW9uLCBTX0lSVUdPLCBxbGEyeDAwX29wdHJvbV9md192ZXJzaW9uX3Nob3csCiAJCSAgIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKDg0eHhfZndfdmVyc2lvbiwgU19JUlVHTywgcWxhMjR4eF84NHh4X2Z3X3ZlcnNpb25fc2hvdywKKwkJICAgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIodG90YWxfaXNwX2Fib3J0cywgU19JUlVHTywgcWxhMngwMF90b3RhbF9pc3BfYWJvcnRzX3Nob3csCiAJCSAgIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKG1waV92ZXJzaW9uLCBTX0lSVUdPLCBxbGEyeDAwX21waV92ZXJzaW9uX3Nob3csIE5VTEwpOwpAQCAtMTMxMCw2ICsxMzM2LDcgQEAKIAkmZGV2X2F0dHJfb3B0cm9tX2VmaV92ZXJzaW9uLAogCSZkZXZfYXR0cl9vcHRyb21fZmNvZGVfdmVyc2lvbiwKIAkmZGV2X2F0dHJfb3B0cm9tX2Z3X3ZlcnNpb24sCisJJmRldl9hdHRyXzg0eHhfZndfdmVyc2lvbiwKIAkmZGV2X2F0dHJfdG90YWxfaXNwX2Fib3J0cywKIAkmZGV2X2F0dHJfbXBpX3ZlcnNpb24sCiAJJmRldl9hdHRyX3BoeV92ZXJzaW9uLApAQCAtMTUwNCw4ICsxNTMxLDYgQEAKIAkJZmNwb3J0LT52aGEtPmh3LT5pc3Bfb3BzLT5mYWJyaWNfbG9nb3V0KGZjcG9ydC0+dmhhLAogCQkJZmNwb3J0LT5sb29wX2lkLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sCiAJCQlmY3BvcnQtPmRfaWQuYi5hcmVhLCBmY3BvcnQtPmRfaWQuYi5hbF9wYSk7Ci0KLQlxbGEyeDAwX2Fib3J0X2ZjcG9ydF9jbWRzKGZjcG9ydCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE3OTUsNiArMTgyMCw1ODEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogQlNHIHN1cHBvcnQgZm9yIEVMUy9DVCBwYXNzIHRocm91Z2ggKi8KK2lubGluZSBzcmJfdCAqCitxbGEyeDAwX2dldF9jdHhfYnNnX3NwKHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBmY19wb3J0X3QgKmZjcG9ydCwgc2l6ZV90IHNpemUpCit7CisJc3JiX3QgKnNwOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXN0cnVjdCBzcmJfYnNnX2N0eCAqY3R4OworCisJc3AgPSBtZW1wb29sX2FsbG9jKGhhLT5zcmJfbWVtcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzcCkKKwkJZ290byBkb25lOworCWN0eCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHgpIHsKKwkJbWVtcG9vbF9mcmVlKHNwLCBoYS0+c3JiX21lbXBvb2wpOworCQlnb3RvIGRvbmU7CisJfQorCisJbWVtc2V0KHNwLCAwLCBzaXplb2YoKnNwKSk7CisJc3AtPmZjcG9ydCA9IGZjcG9ydDsKKwlzcC0+Y3R4ID0gY3R4OworZG9uZToKKwlyZXR1cm4gc3A7Cit9CisKK3N0YXRpYyBpbnQKK3FsYTJ4MDBfcHJvY2Vzc19lbHMoc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IpCit7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKKwlmY19wb3J0X3QgKmZjcG9ydDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OworCXNjc2lfcWxhX2hvc3RfdCAqdmhhOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGE7CisJc3JiX3QgKnNwOworCWNvbnN0IGNoYXIgKnR5cGU7CisJaW50IHJlcV9zZ19jbnQsIHJzcF9zZ19jbnQ7CisJaW50IHJ2YWwgPSAgKERSSVZFUl9FUlJPUiA8PCAxNik7CisJdWludDE2X3QgbmV4dGxpZCA9IDA7CisJc3RydWN0IHNyYl9ic2cgKmVsczsKKworCS8qICBNdWx0aXBsZSBTRydzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBFTFMgcmVxdWVzdHMgKi8KKyAgICAgICAgaWYgKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQgPiAxIHx8CisJCWJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250ID4gMSkgeworCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTworCQkgICAgIm11bHRpcGxlIFNHJ3MgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIEVMUyByZXF1ZXN0cyIKKwkJICAgICIgW3JlcXVlc3Rfc2dfY250OiAleCByZXBseV9zZ19jbnQ6ICV4XVxuIiwKKwkJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsCisJCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCkpOworCQlydmFsID0gLUVQRVJNOworCQlnb3RvIGRvbmU7CisgICAgICAgIH0KKworCS8qIEVMUyByZXF1ZXN0IGZvciBycG9ydCAqLworCWlmIChic2dfam9iLT5yZXF1ZXN0LT5tc2djb2RlID09IEZDX0JTR19SUFRfRUxTKSB7CisJCXJwb3J0ID0gYnNnX2pvYi0+cnBvcnQ7CisJCWZjcG9ydCA9ICooZmNfcG9ydF90ICoqKSBycG9ydC0+ZGRfZGF0YTsKKwkJaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKKwkJdmhhID0gc2hvc3RfcHJpdihob3N0KTsKKwkJaGEgPSB2aGEtPmh3OworCQl0eXBlID0gIkZDX0JTR19SUFRfRUxTIjsKKworCQkvKiBtYWtlIHN1cmUgdGhlIHJwb3J0IGlzIGxvZ2dlZCBpbiwKKwkJICogaWYgbm90IHBlcmZvcm0gZmFicmljIGxvZ2luCisJCSAqLworCQlpZiAocWxhMngwMF9mYWJyaWNfbG9naW4odmhhLCBmY3BvcnQsICZuZXh0bGlkKSkgeworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSAgICAiZmFpbGVkIHRvIGxvZ2luIHBvcnQgJTA2WCBmb3IgRUxTIHBhc3N0aHJ1XG4iLAorCQkJICAgIGZjcG9ydC0+ZF9pZC5iMjQpKTsKKwkJCXJ2YWwgPSAtRUlPOworCQkJZ290byBkb25lOworCQl9CisJfSBlbHNlIHsKKwkJaG9zdCA9IGJzZ19qb2ItPnNob3N0OworCQl2aGEgPSBzaG9zdF9wcml2KGhvc3QpOworCQloYSA9IHZoYS0+aHc7CisJCXR5cGUgPSAiRkNfQlNHX0hTVF9FTFNfTk9MT0dJTiI7CisKKwkJLyogQWxsb2NhdGUgYSBkdW1teSBmY3BvcnQgc3RydWN0dXJlLCBzaW5jZSBmdW5jdGlvbnMKKwkJICogcHJlcGFyaW5nIHRoZSBJT0NCIGFuZCBtYWlsYm94IGNvbW1hbmQgcmV0cmlldmVzIHBvcnQKKwkJICogc3BlY2lmaWMgaW5mb3JtYXRpb24gZnJvbSBmY3BvcnQgc3RydWN0dXJlLiBGb3IgSG9zdCBiYXNlZAorCQkgKiBFTFMgY29tbWFuZHMgdGhlcmUgd2lsbCBiZSBubyBmY3BvcnQgc3RydWN0dXJlIGFsbG9jYXRlZAorCQkgKi8KKwkJZmNwb3J0ID0gcWxhMngwMF9hbGxvY19mY3BvcnQodmhhLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFmY3BvcnQpIHsKKwkJCXJ2YWwgPSAtRU5PTUVNOworCQkJZ290byBkb25lOworCQl9CisKKwkJLyogSW5pdGlhbGl6ZSBhbGwgcmVxdWlyZWQgIGZpZWxkcyBvZiBmY3BvcnQgKi8KKwkJZmNwb3J0LT52aGEgPSB2aGE7CisJCWZjcG9ydC0+dnBfaWR4ID0gdmhhLT52cF9pZHg7CisJCWZjcG9ydC0+ZF9pZC5iLmFsX3BhID0KKwkJICAgIGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2Vscy5wb3J0X2lkWzBdOworCQlmY3BvcnQtPmRfaWQuYi5hcmVhID0KKwkJICAgIGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2Vscy5wb3J0X2lkWzFdOworCQlmY3BvcnQtPmRfaWQuYi5kb21haW4gPQorCQkgICAgYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfZWxzLnBvcnRfaWRbMl07CisJCWZjcG9ydC0+bG9vcF9pZCA9CisJCSAgICAoZmNwb3J0LT5kX2lkLmIuYWxfcGEgPT0gMHhGRCkgPworCQkgICAgTlBIX0ZBQlJJQ19DT05UUk9MTEVSIDogTlBIX0ZfUE9SVDsKKwl9CisKKwlpZiAoIXZoYS0+ZmxhZ3Mub25saW5lKSB7CisJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiaG9zdCBub3Qgb25saW5lXG4iKSk7CisJCXJ2YWwgPSAtRUlPOworCQlnb3RvIGRvbmU7CisJfQorCisgICAgICAgIHJlcV9zZ19jbnQgPQorCSAgICBkbWFfbWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisgICAgICAgIGlmICghcmVxX3NnX2NudCkgeworCQlydmFsID0gLUVOT01FTTsKKwkJZ290byBkb25lX2ZyZWVfZmNwb3J0OworCX0KKyAgICAgICAgcnNwX3NnX2NudCA9IGRtYV9tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisgICAgICAgIGlmICghcnNwX3NnX2NudCkgeworCQlydmFsID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmVfZnJlZV9mY3BvcnQ7CisJfQorCisJaWYgKChyZXFfc2dfY250ICE9ICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250KSB8fAorCSAgICAocnNwX3NnX2NudCAhPSBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCkpCisJeworCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTworCQkgICAgImRtYSBtYXBwaW5nIHJlc3VsdGVkIGluIGRpZmZlcmVudCBzZyBjb3VudHMgXAorCQkgICAgW3JlcXVlc3Rfc2dfY250OiAleCBkbWFfcmVxdWVzdF9zZ19jbnQ6ICV4XAorCQkgICAgcmVwbHlfc2dfY250OiAleCBkbWFfcmVwbHlfc2dfY250OiAleF1cbiIsCisJCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCByZXFfc2dfY250LAorCQkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIHJzcF9zZ19jbnQpKTsKKwkJcnZhbCA9IC1FQUdBSU47CisgICAgICAgICAgICAgICAgZ290byBkb25lX3VubWFwX3NnOworCX0KKworCS8qIEFsbG9jIFNSQiBzdHJ1Y3R1cmUgKi8KKwlzcCA9IHFsYTJ4MDBfZ2V0X2N0eF9ic2dfc3AodmhhLCBmY3BvcnQsIHNpemVvZihzdHJ1Y3Qgc3JiX2JzZykpOworCWlmICghc3ApIHsKKwkJcnZhbCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgZ290byBkb25lX3VubWFwX3NnOworCX0KKworCWVscyA9IHNwLT5jdHg7CisJZWxzLT5jdHgudHlwZSA9CisJICAgIChic2dfam9iLT5yZXF1ZXN0LT5tc2djb2RlID09IEZDX0JTR19SUFRfRUxTID8KKwkgICAgU1JCX0VMU19DTURfUlBUIDogU1JCX0VMU19DTURfSFNUKTsKKwllbHMtPmJzZ19qb2IgPSBic2dfam9iOworCisJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkgICAgInNjc2koJWxkOiV4KTogYnNnIHJxc3QgdHlwZTogJXMgZWxzIHR5cGU6ICV4IC0gbG9vcC1pZD0leCAiCisJICAgICJwb3J0aWQ9JTAyeCUwMnglMDJ4LlxuIiwgdmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLAorCSAgICBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9lbHMuY29tbWFuZF9jb2RlLAorCSAgICBmY3BvcnQtPmxvb3BfaWQsIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKKwkgICAgZmNwb3J0LT5kX2lkLmIuYWxfcGEpKTsKKworCXJ2YWwgPSBxbGEyeDAwX3N0YXJ0X3NwKHNwKTsKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQlrZnJlZShzcC0+Y3R4KTsKKwkJbWVtcG9vbF9mcmVlKHNwLCBoYS0+c3JiX21lbXBvb2wpOworCQlydmFsID0gLUVJTzsKKwkJZ290byBkb25lX3VubWFwX3NnOworCX0KKwlyZXR1cm4gcnZhbDsKKworZG9uZV91bm1hcF9zZzoKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQlic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisJZ290byBkb25lX2ZyZWVfZmNwb3J0OworCitkb25lX2ZyZWVfZmNwb3J0OgorCWlmIChic2dfam9iLT5yZXF1ZXN0LT5tc2djb2RlID09IEZDX0JTR19IU1RfRUxTX05PTE9HSU4pCisJCWtmcmVlKGZjcG9ydCk7Citkb25lOgorCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50CitxbGEyeDAwX3Byb2Nlc3NfY3Qoc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IpCit7CisJc3JiX3QgKnNwOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBic2dfam9iLT5zaG9zdDsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHNob3N0X3ByaXYoaG9zdCk7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisJaW50IHJ2YWwgPSAoRFJJVkVSX0VSUk9SIDw8IDE2KTsKKwlpbnQgcmVxX3NnX2NudCwgcnNwX3NnX2NudDsKKwl1aW50MTZfdCBsb29wX2lkOworCXN0cnVjdCBmY19wb3J0ICpmY3BvcnQ7CisJY2hhciAgKnR5cGUgPSAiRkNfQlNHX0hTVF9DVCI7CisJc3RydWN0IHNyYl9ic2cgKmN0OworCisJLyogcGFzcyB0aHJvdWdoIGlzIHN1cHBvcnRlZCBvbmx5IGZvciBJU1AgNEdiIG9yIGhpZ2hlciAqLworICAgICAgICBpZiAoIUlTX0ZXSTJfQ0FQQUJMRShoYSkpIHsKKwkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJICAgICJzY3NpKCVsZCk6RmlybXdhcmUgaXMgbm90IGNhcGFibGUgdG8gc3VwcG9ydCBGQyAiCisJCSAgICAiQ1QgcGFzcyB0aHJ1XG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcnZhbCA9IC1FUEVSTTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisJfQorCisgICAgICAgIHJlcV9zZ19jbnQgPQorCSAgICBkbWFfbWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisgICAgICAgIGlmICghcmVxX3NnX2NudCkgeworCQlydmFsID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworICAgICAgICByc3Bfc2dfY250ID0gZG1hX21hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorICAgICAgICAgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisgICAgICAgIGlmICghcnNwX3NnX2NudCkgeworCQlydmFsID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisJfQorCisJaWYgKChyZXFfc2dfY250ICE9ICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250KSB8fAorCQkocnNwX3NnX2NudCAhPSBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCkpCisJeworCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkgICAgImRtYSBtYXBwaW5nIHJlc3VsdGVkIGluIGRpZmZlcmVudCBzZyBjb3VudHMgXAorCQkgICAgW3JlcXVlc3Rfc2dfY250OiAleCBkbWFfcmVxdWVzdF9zZ19jbnQ6ICV4XAorCQkgICAgcmVwbHlfc2dfY250OiAleCBkbWFfcmVwbHlfc2dfY250OiAleF1cbiIsCisJCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCByZXFfc2dfY250LAorCQkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIHJzcF9zZ19jbnQpKTsKKwkJcnZhbCA9IC1FQUdBSU47CisgICAgICAgICAgICAgICAgZ290byBkb25lX3VubWFwX3NnOworCX0KKworCWlmICghdmhhLT5mbGFncy5vbmxpbmUpIHsKKwkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICJob3N0IG5vdCBvbmxpbmVcbiIpKTsKKwkJcnZhbCA9IC1FSU87CisgICAgICAgICAgICAgICAgZ290byBkb25lX3VubWFwX3NnOworCX0KKworCWxvb3BfaWQgPQorCSAgICAoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfY3QucHJlYW1ibGVfd29yZDEgJiAweEZGMDAwMDAwKQorCSAgICA+PiAyNDsKKwlzd2l0Y2ggKGxvb3BfaWQpIHsKKwkJY2FzZSAweEZDOgorCQkJbG9vcF9pZCA9IGNwdV90b19sZTE2KE5QSF9TTlMpOworCQkJYnJlYWs7CisJCWNhc2UgMHhGQToKKwkJCWxvb3BfaWQgPSB2aGEtPm1nbXRfc3ZyX2xvb3BfaWQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkgICAgIlVua25vd24gbG9vcCBpZDogJXhcbiIsIGxvb3BfaWQpKTsKKwkJCXJ2YWwgPSAtRUlOVkFMOworCQkJZ290byBkb25lX3VubWFwX3NnOworCX0KKworCS8qIEFsbG9jYXRlIGEgZHVtbXkgZmNwb3J0IHN0cnVjdHVyZSwgc2luY2UgZnVuY3Rpb25zIHByZXBhcmluZyB0aGUKKwkgKiBJT0NCIGFuZCBtYWlsYm94IGNvbW1hbmQgcmV0cmlldmVzIHBvcnQgc3BlY2lmaWMgaW5mb3JtYXRpb24KKwkgKiBmcm9tIGZjcG9ydCBzdHJ1Y3R1cmUuIEZvciBIb3N0IGJhc2VkIEVMUyBjb21tYW5kcyB0aGVyZSB3aWxsIGJlCisJICogbm8gZmNwb3J0IHN0cnVjdHVyZSBhbGxvY2F0ZWQKKwkgKi8KKwlmY3BvcnQgPSBxbGEyeDAwX2FsbG9jX2ZjcG9ydCh2aGEsIEdGUF9LRVJORUwpOworCWlmICghZmNwb3J0KQorCXsKKwkJcnZhbCA9IC1FTk9NRU07CisJCWdvdG8gIGRvbmVfdW5tYXBfc2c7CisJfQorCisJLyogSW5pdGlhbGl6ZSBhbGwgcmVxdWlyZWQgIGZpZWxkcyBvZiBmY3BvcnQgKi8KKwlmY3BvcnQtPnZoYSA9IHZoYTsKKwlmY3BvcnQtPnZwX2lkeCA9IHZoYS0+dnBfaWR4OworCWZjcG9ydC0+ZF9pZC5iLmFsX3BhID0gYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfY3QucG9ydF9pZFswXTsKKwlmY3BvcnQtPmRfaWQuYi5hcmVhID0gYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfY3QucG9ydF9pZFsxXTsKKwlmY3BvcnQtPmRfaWQuYi5kb21haW4gPSBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9jdC5wb3J0X2lkWzJdOworCWZjcG9ydC0+bG9vcF9pZCA9IGxvb3BfaWQ7CisKKwkvKiBBbGxvYyBTUkIgc3RydWN0dXJlICovCisJc3AgPSBxbGEyeDAwX2dldF9jdHhfYnNnX3NwKHZoYSwgZmNwb3J0LCBzaXplb2Yoc3RydWN0IHNyYl9ic2cpKTsKKwlpZiAoIXNwKSB7CisJCXJ2YWwgPSAtRU5PTUVNOworCQlnb3RvIGRvbmVfZnJlZV9mY3BvcnQ7CisJfQorCisJY3QgPSBzcC0+Y3R4OworCWN0LT5jdHgudHlwZSA9IFNSQl9DVF9DTUQ7CisJY3QtPmJzZ19qb2IgPSBic2dfam9iOworCisJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkgICAgInNjc2koJWxkOiV4KTogYnNnIHJxc3QgdHlwZTogJXMgZWxzIHR5cGU6ICV4IC0gbG9vcC1pZD0leCAiCisJICAgICJwb3J0aWQ9JTAyeCUwMnglMDJ4LlxuIiwgdmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLAorCSAgICAoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfY3QucHJlYW1ibGVfd29yZDIgPj4gMTYpLAorCSAgICBmY3BvcnQtPmxvb3BfaWQsIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKKwkgICAgZmNwb3J0LT5kX2lkLmIuYWxfcGEpKTsKKworCXJ2YWwgPSBxbGEyeDAwX3N0YXJ0X3NwKHNwKTsKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQlrZnJlZShzcC0+Y3R4KTsKKwkJbWVtcG9vbF9mcmVlKHNwLCBoYS0+c3JiX21lbXBvb2wpOworCQlydmFsID0gLUVJTzsKKwkJZ290byBkb25lX2ZyZWVfZmNwb3J0OworCX0KKwlyZXR1cm4gcnZhbDsKKworZG9uZV9mcmVlX2ZjcG9ydDoKKwlrZnJlZShmY3BvcnQpOworZG9uZV91bm1hcF9zZzoKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7Citkb25lOgorCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50CitxbGEyeDAwX3Byb2Nlc3NfdmVuZG9yX3NwZWNpZmljKHN0cnVjdCBmY19ic2dfam9iICpic2dfam9iKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBic2dfam9iLT5zaG9zdDsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHNob3N0X3ByaXYoaG9zdCk7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisJaW50IHJ2YWw7CisJdWludDhfdCBjb21tYW5kX3NlbnQ7CisJdWludDMyX3QgdmVuZG9yX2NtZDsKKwljaGFyICp0eXBlOworCXN0cnVjdCBtc2dfZWNob19sYiBlbHJlcTsKKwl1aW50MTZfdCByZXNwb25zZVtNQUlMQk9YX1JFR0lTVEVSX0NPVU5UXTsKKwl1aW50OF90KiBmd19zdHNfcHRyOworCXVpbnQ4X3QgKnJlcV9kYXRhOworCWRtYV9hZGRyX3QgcmVxX2RhdGFfZG1hOworCXVpbnQzMl90IHJlcV9kYXRhX2xlbjsKKwl1aW50OF90ICpyc3BfZGF0YTsKKwlkbWFfYWRkcl90IHJzcF9kYXRhX2RtYTsKKwl1aW50MzJfdCByc3BfZGF0YV9sZW47CisKKwlpZiAodGVzdF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmdmhhLT5kcGNfZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KElTUF9BQk9SVF9SRVRSWSwgJnZoYS0+ZHBjX2ZsYWdzKSkgeworCQlydmFsID0gLUVCVVNZOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCF2aGEtPmZsYWdzLm9ubGluZSkgeworCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkgICAgImhvc3Qgbm90IG9ubGluZVxuIikpOworCQlydmFsID0gLUVJTzsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisJfQorCisgICAgICAgIGVscmVxLnJlcV9zZ19jbnQgPQorCSAgICBkbWFfbWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisgICAgICAgIGlmICghZWxyZXEucmVxX3NnX2NudCkgeworCQlydmFsID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKyAgICAgICAgZWxyZXEucnNwX3NnX2NudCA9CisJICAgIGRtYV9tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisgICAgICAgIGlmICghZWxyZXEucnNwX3NnX2NudCkgeworCQlydmFsID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisJfQorCisJaWYgKChlbHJlcS5yZXFfc2dfY250ICE9ICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250KSB8fAorCSAgICAoZWxyZXEucnNwX3NnX2NudCAhPSBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCkpCisJeworCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTworCQkgICAgImRtYSBtYXBwaW5nIHJlc3VsdGVkIGluIGRpZmZlcmVudCBzZyBjb3VudHMgXAorCQkgICAgW3JlcXVlc3Rfc2dfY250OiAleCBkbWFfcmVxdWVzdF9zZ19jbnQ6ICV4XAorCQkgICAgcmVwbHlfc2dfY250OiAleCBkbWFfcmVwbHlfc2dfY250OiAleF1cbiIsCisJCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBlbHJlcS5yZXFfc2dfY250LAorCQkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIGVscmVxLnJzcF9zZ19jbnQpKTsKKwkJcnZhbCA9IC1FQUdBSU47CisgICAgICAgICAgICAgICAgZ290byBkb25lX3VubWFwX3NnOworCX0KKwlyZXFfZGF0YV9sZW4gPSByc3BfZGF0YV9sZW4gPSBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisJcmVxX2RhdGEgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIHJlcV9kYXRhX2xlbiwKKwkgICAgJnJlcV9kYXRhX2RtYSwgR0ZQX0tFUk5FTCk7CisKKwlyc3BfZGF0YSA9IGRtYV9hbGxvY19jb2hlcmVudCgmaGEtPnBkZXYtPmRldiwgcnNwX2RhdGFfbGVuLAorCSAgICAmcnNwX2RhdGFfZG1hLCBHRlBfS0VSTkVMKTsKKworCS8qIENvcHkgdGhlIHJlcXVlc3QgYnVmZmVyIGluIHJlcV9kYXRhIG5vdyAqLworCXNnX2NvcHlfdG9fYnVmZmVyKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCByZXFfZGF0YSwKKwkgICAgcmVxX2RhdGFfbGVuKTsKKworCWVscmVxLnNlbmRfZG1hID0gcmVxX2RhdGFfZG1hOworCWVscmVxLnJjdl9kbWEgPSByc3BfZGF0YV9kbWE7CisJZWxyZXEudHJhbnNmZXJfc2l6ZSA9IHJlcV9kYXRhX2xlbjsKKworCS8qIFZlbmRvciBjbWQgOiBsb29wYmFjayBvciBFQ0hPIGRpYWdub3N0aWMKKwkgKiBPcHRpb25zOgorCSAqIAlMb29wYmFjayA6IEVpdGhlciBpbnRlcm5hbCBvciBleHRlcm5hbCBsb29wYmFjaworCSAqIAlFQ0hPOiBFQ0hPIEVMUyBvciBWZW5kb3Igc3BlY2lmaWMgRkM0ICBsaW5rIGRhdGEKKwkgKi8KKwl2ZW5kb3JfY21kID0gYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWRbMF07CisJZWxyZXEub3B0aW9ucyA9CisJICAgICooKCh1aW50MzJfdCAqKWJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kKQorCSAgICArIDEpOworCisJc3dpdGNoIChic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZFswXSkgeworCWNhc2UgUUxfVk5EX0xPT1BCQUNLOgorCQlpZiAoaGEtPmN1cnJlbnRfdG9wb2xvZ3kgIT0gSVNQX0NGR19GKSB7CisJCQl0eXBlID0gIkZDX0JTR19IU1RfVkVORE9SX0xPT1BCQUNLIjsKKworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCQkic2NzaSglbGQpIGJzZyBycXN0IHR5cGU6ICVzIHZlbmRvciBycXN0IHR5cGU6ICV4IG9wdGlvbnM6ICV4LlxuIiwKKwkJCQl2aGEtPmhvc3Rfbm8sIHR5cGUsIHZlbmRvcl9jbWQsIGVscmVxLm9wdGlvbnMpKTsKKworCQkJY29tbWFuZF9zZW50ID0gSU5UX0RFRl9MQl9MT09QQkFDS19DTUQ7CisJCQlydmFsID0gcWxhMngwMF9sb29wYmFja190ZXN0KHZoYSwgJmVscmVxLCByZXNwb25zZSk7CisJCQlpZiAoSVNfUUxBODFYWChoYSkpIHsKKwkJCQlpZiAocmVzcG9uc2VbMF0gPT0gTUJTX0NPTU1BTkRfRVJST1IgJiYgcmVzcG9uc2VbMV0gPT0gTUJTX0xCX1JFU0VUKSB7CisJCQkJCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzKCVsZCk6IEFCT1JUaW5nICIKKwkJCQkJCSJJU1BcbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQkJCQlxbGEyeHh4X3dha2VfZHBjKHZoYSk7CisJCQkJIH0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXR5cGUgPSAiRkNfQlNHX0hTVF9WRU5ET1JfRUNIT19ESUFHIjsKKwkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkJInNjc2koJWxkKSBic2cgcnFzdCB0eXBlOiAlcyB2ZW5kb3IgcnFzdCB0eXBlOiAleCBvcHRpb25zOiAleC5cbiIsCisJCQkJdmhhLT5ob3N0X25vLCB0eXBlLCB2ZW5kb3JfY21kLCBlbHJlcS5vcHRpb25zKSk7CisKKwkJCWNvbW1hbmRfc2VudCA9IElOVF9ERUZfTEJfRUNIT19DTUQ7CisJCQlydmFsID0gcWxhMngwMF9lY2hvX3Rlc3QodmhhLCAmZWxyZXEsIHJlc3BvbnNlKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFFMQTg0X1JFU0VUOgorCQlpZiAoIUlTX1FMQTg0WFgodmhhLT5odykpIHsKKwkJCXJ2YWwgPSAtRUlOVkFMOworCQkJREVCVUcxNihwcmludGsoCisJCQkJIiVzKCVsZCk6IDh4eHggZXhpdGluZy5cbiIsCisJCQkJX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQkJcmV0dXJuIHJ2YWw7CisJCX0KKwkJcnZhbCA9IHFsYTg0eHhfcmVzZXQodmhhLCAmZWxyZXEsIGJzZ19qb2IpOworCQlicmVhazsKKwljYXNlIFFMQTg0X01HTVRfQ01EOgorCQlpZiAoIUlTX1FMQTg0WFgodmhhLT5odykpIHsKKwkJCXJ2YWwgPSAtRUlOVkFMOworCQkJREVCVUcxNihwcmludGsoCisJCQkJIiVzKCVsZCk6IDh4eHggZXhpdGluZy5cbiIsCisJCQkJX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQkJcmV0dXJuIHJ2YWw7CisJCX0KKwkJcnZhbCA9IHFsYTg0eHhfbWdtdF9jbWQodmhhLCAmZWxyZXEsIGJzZ19qb2IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlydmFsID0gLUVOT1NZUzsKKwl9CisKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJInNjc2koJWxkKSBWZW5kb3IgcmVxdWVzdCAlcyBmYWlsZWRcbiIsIHZoYS0+aG9zdF9ubywgdHlwZSkpOworCQlydmFsID0gMDsKKwkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpOworCQlic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkJZndfc3RzX3B0ciA9ICgodWludDhfdCopYnNnX2pvYi0+cmVxLT5zZW5zZSkgKyBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXBseSk7CisJCW1lbWNweSggZndfc3RzX3B0ciwgcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpOworCQlmd19zdHNfcHRyICs9IHNpemVvZihyZXNwb25zZSk7CisgICAgICAgICAgICAgICAgKmZ3X3N0c19wdHIgPSBjb21tYW5kX3NlbnQ7CisJfSBlbHNlIHsKKwkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSJzY3NpKCVsZCkgVmVuZG9yIHJlcXVlc3QgJXMgY29tcGxldGVkXG4iLCB2aGEtPmhvc3Rfbm8sIHR5cGUpKTsKKwkJcnZhbCA9IGJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAwOworCQlic2dfam9iLT5yZXBseV9sZW4gPSBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXBseSkgKyBzaXplb2YocmVzcG9uc2UpICsgc2l6ZW9mKHVpbnQ4X3QpOworCQlic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwkJZndfc3RzX3B0ciA9ICgodWludDhfdCopYnNnX2pvYi0+cmVxLT5zZW5zZSkgKyBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXBseSk7CisJCW1lbWNweShmd19zdHNfcHRyLCByZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7CisJCWZ3X3N0c19wdHIgKz0gc2l6ZW9mKHJlc3BvbnNlKTsKKwkJKmZ3X3N0c19wdHIgPSBjb21tYW5kX3NlbnQ7CisJCXNnX2NvcHlfZnJvbV9idWZmZXIoYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQlic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgcnNwX2RhdGEsCisJCXJzcF9kYXRhX2xlbik7CisJfQorCWJzZ19qb2ItPmpvYl9kb25lKGJzZ19qb2IpOworCitkb25lX3VubWFwX3NnOgorCisJaWYocmVxX2RhdGEpCisJCWRtYV9mcmVlX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LCByZXFfZGF0YV9sZW4sCisJCQlyZXFfZGF0YSwgcmVxX2RhdGFfZG1hKTsKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsCisJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsCisJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisKK2RvbmU6CisgICAgICAgIHJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50CitxbGEyNHh4X2JzZ19yZXF1ZXN0KHN0cnVjdCBmY19ic2dfam9iICpic2dfam9iKQoreworICAgICAgICBpbnQgcmV0ID0gLUVJTlZBTDsKKworICAgICAgICBzd2l0Y2ggKGJzZ19qb2ItPnJlcXVlc3QtPm1zZ2NvZGUpIHsKKwkJY2FzZSBGQ19CU0dfUlBUX0VMUzoKKwkJY2FzZSBGQ19CU0dfSFNUX0VMU19OT0xPR0lOOgorCQkJcmV0ID0gcWxhMngwMF9wcm9jZXNzX2Vscyhic2dfam9iKTsKKwkJCWJyZWFrOworCQljYXNlIEZDX0JTR19IU1RfQ1Q6CisJCQlyZXQgPSBxbGEyeDAwX3Byb2Nlc3NfY3QoYnNnX2pvYik7CisJCQlicmVhazsKKwkJY2FzZSBGQ19CU0dfSFNUX1ZFTkRPUjoKKwkJCXJldCA9IHFsYTJ4MDBfcHJvY2Vzc192ZW5kb3Jfc3BlY2lmaWMoYnNnX2pvYik7CisJCQlicmVhazsKKwkJY2FzZSBGQ19CU0dfSFNUX0FERF9SUE9SVDoKKwkJY2FzZSBGQ19CU0dfSFNUX0RFTF9SUE9SVDoKKwkJY2FzZSBGQ19CU0dfUlBUX0NUOgorCQlkZWZhdWx0OgorCQkJREVCVUcyKHByaW50aygicWxhMnh4eDogdW5zdXBwb3J0ZWQgQlNHIHJlcXVlc3RcbiIpKTsKKwkJCWJyZWFrOworICAgICAgICB9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorcWxhMjR4eF9ic2dfdGltZW91dChzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYikKK3sKKyAgICAgICAgc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBzaG9zdF9wcml2KGJzZ19qb2ItPnNob3N0KTsKKyAgICAgICAgc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisgICAgICAgIHNyYl90ICpzcDsKKyAgICAgICAgaW50IGNudCwgcXVlOworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgICBzdHJ1Y3QgcmVxX3F1ZSAqcmVxOworCXN0cnVjdCBzcmJfYnNnICpzcF9ic2c7CisKKwkvKiBmaW5kIHRoZSBic2cgam9iIGZyb20gdGhlIGFjdGl2ZSBsaXN0IG9mIGNvbW1hbmRzICovCisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCWZvciAocXVlID0gMDsgcXVlIDwgaGEtPm1heF9yZXFfcXVldWVzOyBxdWUrKykgeworCQlyZXEgPSBoYS0+cmVxX3FfbWFwW3F1ZV07CisJCWlmICghcmVxKQorCQkJY29udGludWU7CisKKwkJZm9yIChjbnQgPSAxOyBjbnQgPCBNQVhfT1VUU1RBTkRJTkdfQ09NTUFORFM7IGNudCsrICkgeworCQkJc3AgPSByZXEtPm91dHN0YW5kaW5nX2NtZHNbY250XTsKKworCQkJaWYgKHNwKSB7CisJCQkJc3BfYnNnID0gKHN0cnVjdCBzcmJfYnNnKilzcC0+Y3R4OworCisJCQkJaWYgKCgoc3BfYnNnLT5jdHgudHlwZSA9PSBTUkJfQ1RfQ01EKSB8fAorCQkJCSAgICAoc3BfYnNnLT5jdHgudHlwZSA9PSBTUkJfRUxTX0NNRF9SUFQpCisJCQkJICAgIHx8ICggc3BfYnNnLT5jdHgudHlwZSA9PSBTUkJfRUxTX0NNRF9IU1QpKSAmJgorCQkJCSAgICAoc3BfYnNnLT5ic2dfam9iID09IGJzZ19qb2IpKSB7CisJCQkJCWlmIChoYS0+aXNwX29wcy0+YWJvcnRfY29tbWFuZChzcCkpIHsKKwkJCQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkJCQkic2NzaSglbGQpOiBtYnggYWJvcnRfY29tbWFuZCBmYWlsZWRcbiIsIHZoYS0+aG9zdF9ubykpOworCQkJCQkJYnNnX2pvYi0+cmVxLT5lcnJvcnMgPSBic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gLUVJTzsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkJCQkic2NzaSglbGQpOiBtYnggYWJvcnRfY29tbWFuZCBzdWNjZXNzXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCQkJCWJzZ19qb2ItPnJlcS0+ZXJyb3JzID0gYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IDA7CisJCQkJCX0KKwkJCQkJZ290byBkb25lOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCSJzY3NpKCVsZCkgU1JCIG5vdCBmb3VuZCB0byBhYm9ydFxuIiwgdmhhLT5ob3N0X25vKSk7CisJYnNnX2pvYi0+cmVxLT5lcnJvcnMgPSBic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gLUVOWElPOworCXJldHVybiAwOworCitkb25lOgorCWlmIChic2dfam9iLT5yZXF1ZXN0LT5tc2djb2RlID09IEZDX0JTR19IU1RfQ1QpCisJCWtmcmVlKHNwLT5mY3BvcnQpOworCWtmcmVlKHNwLT5jdHgpOworCW1lbXBvb2xfZnJlZShzcCwgaGEtPnNyYl9tZW1wb29sKTsKKwlyZXR1cm4gMDsKK30KKwogc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlIHFsYTJ4eHhfdHJhbnNwb3J0X2Z1bmN0aW9ucyA9IHsKIAogCS5zaG93X2hvc3Rfbm9kZV9uYW1lID0gMSwKQEAgLTE4MzgsNiArMjQzOCw4IEBACiAJLnZwb3J0X2NyZWF0ZSA9IHFsYTI0eHhfdnBvcnRfY3JlYXRlLAogCS52cG9ydF9kaXNhYmxlID0gcWxhMjR4eF92cG9ydF9kaXNhYmxlLAogCS52cG9ydF9kZWxldGUgPSBxbGEyNHh4X3Zwb3J0X2RlbGV0ZSwKKwkuYnNnX3JlcXVlc3QgPSBxbGEyNHh4X2JzZ19yZXF1ZXN0LAorCS5ic2dfdGltZW91dCA9IHFsYTI0eHhfYnNnX3RpbWVvdXQsCiB9OwogCiBzdHJ1Y3QgZmNfZnVuY3Rpb25fdGVtcGxhdGUgcWxhMnh4eF90cmFuc3BvcnRfdnBvcnRfZnVuY3Rpb25zID0gewpAQCAtMTg3OCw2ICsyNDgwLDggQEAKIAkuZGV2X2xvc3NfdG1vX2NhbGxiayA9IHFsYTJ4MDBfZGV2X2xvc3NfdG1vX2NhbGxiaywKIAkudGVybWluYXRlX3Jwb3J0X2lvID0gcWxhMngwMF90ZXJtaW5hdGVfcnBvcnRfaW8sCiAJLmdldF9mY19ob3N0X3N0YXRzID0gcWxhMngwMF9nZXRfZmNfaG9zdF9zdGF0cywKKwkuYnNnX3JlcXVlc3QgPSBxbGEyNHh4X2JzZ19yZXF1ZXN0LAorCS5ic2dfdGltZW91dCA9IHFsYTI0eHhfYnNnX3RpbWVvdXQsCiB9OwogCiB2b2lkCkBAIC0xOTA2LDMgKzI1MTAsMTI1IEBACiAJCXNwZWVkID0gRkNfUE9SVFNQRUVEXzFHQklUOwogCWZjX2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyh2aGEtPmhvc3QpID0gc3BlZWQ7CiB9CitzdGF0aWMgaW50CitxbGE4NHh4X3Jlc2V0KHNjc2lfcWxhX2hvc3RfdCAqaGEsIHN0cnVjdCBtc2dfZWNob19sYiAqbXJlcSwgc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IpCit7CisJaW50ICAgICAgICAgICAgIHJldCA9IDA7CisJaW50ICAgICAgICAgICAgIGNtZDsKKwl1aW50MTZfdCAgICAgICAgY21kX3N0YXR1czsKKworCURFQlVHMTYocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CisKKwljbWQgPSAoKigoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQpICsgMikpCisJCQk9PSBBODRfUkVTRVRfRkxBR19FTkFCTEVfRElBR19GVyA/CisJCQkJQTg0X0lTU1VFX1JFU0VUX0RJQUdfRlcgOiBBODRfSVNTVUVfUkVTRVRfT1BfRlc7CisJcmV0ID0gcWxhODR4eF9yZXNldF9jaGlwKGhhLCBjbWQgPT0gQTg0X0lTU1VFX1JFU0VUX0RJQUdfRlcsCisJJmNtZF9zdGF0dXMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3FsYTg0eHhfbWdtdF9jbWQoc2NzaV9xbGFfaG9zdF90ICpoYSwgc3RydWN0IG1zZ19lY2hvX2xiICptcmVxLCBzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYikKK3sKKwlzdHJ1Y3QgYWNjZXNzX2NoaXBfODR4eCAqbW47CisJZG1hX2FkZHJfdCBtbl9kbWEsIG1nbXRfZG1hOworCXZvaWQgKm1nbXRfYiA9IE5VTEw7CisJaW50IHJldCA9IDA7CisJaW50IHJzcF9oZHJfbGVuLCBsZW4gPSAwOworCXN0cnVjdCBxbGE4NF9tc2dfbWdtdCAqcWw4NF9tZ210OworCisJcWw4NF9tZ210ID0gKHN0cnVjdCBxbGE4NF9tc2dfbWdtdCAqKSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgcWxhODRfbXNnX21nbXQpKTsKKwlxbDg0X21nbXQtPmNtZCA9CisJCSooKHVpbnQxNl90ICopKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kICsgMikpOworCXFsODRfbWdtdC0+bWdtdHAudS5tZW0uc3RhcnRfYWRkciA9CisJCSooKHVpbnQzMl90ICopKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kICsgMykpOworCXFsODRfbWdtdC0+bGVuID0KKwkJKigodWludDMyX3QgKikoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQgKyA0KSk7CisJcWw4NF9tZ210LT5tZ210cC51LmNvbmZpZy5pZCA9CisJCSooKHVpbnQzMl90ICopKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kICsgNSkpOworCXFsODRfbWdtdC0+bWdtdHAudS5jb25maWcucGFyYW0wID0KKwkJKigodWludDMyX3QgKikoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQgKyA2KSk7CisJcWw4NF9tZ210LT5tZ210cC51LmNvbmZpZy5wYXJhbTEgPQorCQkqKCh1aW50MzJfdCAqKShic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCArIDcpKTsKKwlxbDg0X21nbXQtPm1nbXRwLnUuaW5mby50eXBlID0KKwkJKigodWludDMyX3QgKikoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQgKyA4KSk7CisJcWw4NF9tZ210LT5tZ210cC51LmluZm8uY29udGV4dCA9CisJCSooKHVpbnQzMl90ICopKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kICsgOSkpOworCisJcnNwX2hkcl9sZW4gPSBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisKKwltbiA9IGRtYV9wb29sX2FsbG9jKGhhLT5ody0+c19kbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJm1uX2RtYSk7CisJaWYgKG1uID09IE5VTEwpIHsKKwkJREVCVUcyKHByaW50ayhLRVJOX0VSUiAiJXM6IGRtYSBhbGxvYyBmb3IgZncgYnVmZmVyICIKKwkJImZhaWxlZCVsdVxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChtbiwgMCwgc2l6ZW9mIChzdHJ1Y3QgYWNjZXNzX2NoaXBfODR4eCkpOworCisJbW4tPmVudHJ5X3R5cGUgPSBBQ0NFU1NfQ0hJUF9JT0NCX1RZUEU7CisJbW4tPmVudHJ5X2NvdW50ID0gMTsKKworCXN3aXRjaCAocWw4NF9tZ210LT5jbWQpIHsKKwljYXNlIFFMQTg0X01HTVRfUkVBRF9NRU06CisJCW1uLT5vcHRpb25zID0gY3B1X3RvX2xlMTYoQUNPX0RVTVBfTUVNT1JZKTsKKwkJbW4tPnBhcmFtZXRlcjEgPSBjcHVfdG9fbGUzMihxbDg0X21nbXQtPm1nbXRwLnUubWVtLnN0YXJ0X2FkZHIpOworCQlicmVhazsKKwljYXNlIFFMQTg0X01HTVRfV1JJVEVfTUVNOgorCQltbi0+b3B0aW9ucyA9IGNwdV90b19sZTE2KEFDT19MT0FEX01FTU9SWSk7CisJCW1uLT5wYXJhbWV0ZXIxID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5tZ210cC51Lm1lbS5zdGFydF9hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBRTEE4NF9NR01UX0NITkdfQ09ORklHOgorCQltbi0+b3B0aW9ucyA9IGNwdV90b19sZTE2KEFDT19DSEFOR0VfQ09ORklHX1BBUkFNKTsKKwkJbW4tPnBhcmFtZXRlcjEgPSBjcHVfdG9fbGUzMihxbDg0X21nbXQtPm1nbXRwLnUuY29uZmlnLmlkKTsKKwkJbW4tPnBhcmFtZXRlcjIgPSBjcHVfdG9fbGUzMihxbDg0X21nbXQtPm1nbXRwLnUuY29uZmlnLnBhcmFtMCk7CisJCW1uLT5wYXJhbWV0ZXIzID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5tZ210cC51LmNvbmZpZy5wYXJhbTEpOworCQlicmVhazsKKwljYXNlIFFMQTg0X01HTVRfR0VUX0lORk86CisJCW1uLT5vcHRpb25zID0gY3B1X3RvX2xlMTYoQUNPX1JFUVVFU1RfSU5GTyk7CisJCW1uLT5wYXJhbWV0ZXIxID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5tZ210cC51LmluZm8udHlwZSk7CisJCW1uLT5wYXJhbWV0ZXIyID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5tZ210cC51LmluZm8uY29udGV4dCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXhpdF9tZ210MDsKKwl9CisKKwlpZiAoKGxlbiA9PSBxbDg0X21nbXQtPmxlbikgJiYKKwkJcWw4NF9tZ210LT5jbWQgIT0gUUxBODRfTUdNVF9DSE5HX0NPTkZJRykgeworCQltZ210X2IgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhhLT5ody0+cGRldi0+ZGV2LCBsZW4sCisJCQkJJm1nbXRfZG1hLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG1nbXRfYiA9PSBOVUxMKSB7CisJCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSICIlczogZG1hIGFsbG9jIG1nbXRfYiAiCisJCQkiZmFpbGVkJWx1XG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXRfbWdtdDA7CisJCX0KKwkJbW4tPnRvdGFsX2J5dGVfY250ID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5sZW4pOworCQltbi0+ZHNlZ19jb3VudCA9IGNwdV90b19sZTE2KDEpOworCQltbi0+ZHNlZ19hZGRyZXNzWzBdID0gY3B1X3RvX2xlMzIoTFNEKG1nbXRfZG1hKSk7CisJCW1uLT5kc2VnX2FkZHJlc3NbMV0gPSBjcHVfdG9fbGUzMihNU0QobWdtdF9kbWEpKTsKKwkJbW4tPmRzZWdfbGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuKTsKKworCQlpZiAocWw4NF9tZ210LT5jbWQgPT0gUUxBODRfTUdNVF9XUklURV9NRU0pIHsKKwkJCW1lbWNweShtZ210X2IsIHFsODRfbWdtdC0+cGF5bG9hZCwgbGVuKTsKKwkJfQorCX0KKworCXJldCA9IHFsYTJ4MDBfaXNzdWVfaW9jYihoYSwgbW4sIG1uX2RtYSwgMCk7CisJaWYgKChyZXQgIT0gUUxBX1NVQ0NFU1MpIHx8IChxbDg0X21nbXQtPmNtZCA9PSBRTEE4NF9NR01UX1dSSVRFX01FTSkKKwkJfHwgKHFsODRfbWdtdC0+Y21kID09IFFMQTg0X01HTVRfQ0hOR19DT05GSUcpKSB7CisJCQlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKQorCQkJCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzKCVsdSk6IGZhaWxlZFxuIiwKKwkJCQkJX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CisJfSBlbHNlIGlmICgocWw4NF9tZ210LT5jbWQgPT0gUUxBODRfTUdNVF9SRUFEX01FTSkgfHwKKwkJCShxbDg0X21nbXQtPmNtZCA9PSBRTEE4NF9NR01UX0dFVF9JTkZPKSkgeworCX0KKworCWlmIChtZ210X2IpCisJCWRtYV9mcmVlX2NvaGVyZW50KCZoYS0+aHctPnBkZXYtPmRldiwgbGVuLCBtZ210X2IsIG1nbXRfZG1hKTsKKworZXhpdF9tZ210MDoKKwlkbWFfcG9vbF9mcmVlKGhhLT5ody0+c19kbWFfcG9vbCwgbW4sIG1uX2RtYSk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAppbmRleCAxMjYzZDk3Li5hZmE5NTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ic2dfZmMuaD4KIAogI2RlZmluZSBRTEEyWFhYX0RSSVZFUl9OQU1FICAicWxhMnh4eCIKIApAQCAtMjI4LDYgKzIyOSwyNyBAQAogCXVpbnQxNl90IGZsYWdzOwogfTsKIAorc3RydWN0IHNyYl9ic2dfY3R4IHsKKyNkZWZpbmUgU1JCX0VMU19DTURfUlBUIDMKKyNkZWZpbmUgU1JCX0VMU19DTURfSFNUIDQKKyNkZWZpbmUgU1JCX0NUX0NNRCA1CisJdWludDE2X3QgdHlwZTsKK307CisKK3N0cnVjdCBzcmJfYnNnIHsKKwlzdHJ1Y3Qgc3JiX2JzZ19jdHggY3R4OworCXN0cnVjdCBmY19ic2dfam9iICpic2dfam9iOworfTsKKworc3RydWN0IG1zZ19lY2hvX2xiIHsKKwlkbWFfYWRkcl90IHNlbmRfZG1hOworCWRtYV9hZGRyX3QgcmN2X2RtYTsKKwl1aW50MTZfdCByZXFfc2dfY250OworCXVpbnQxNl90IHJzcF9zZ19jbnQ7CisJdWludDE2X3Qgb3B0aW9uczsKKwl1aW50MzJfdCB0cmFuc2Zlcl9zaXplOworfTsKKwogLyoKICAqIElTUCBJL08gUmVnaXN0ZXIgU2V0IHN0cnVjdHVyZSBkZWZpbml0aW9ucy4KICAqLwpAQCAtNTIyLDYgKzU0NCw4IEBACiAjZGVmaW5lIE1CQV9ESVNDQVJEX1JORF9GUkFNRQkweDgwNDgJLyogZGlzY2FyZCBSTkQgZnJhbWUgZHVlIHRvIGVycm9yLiAqLwogI2RlZmluZSBNQkFfUkVKRUNURURfRkNQX0NNRAkweDgwNDkJLyogcmVqZWN0ZWQgRkNQX0NNRC4gKi8KIAorLyogSVNQIG1haWxib3ggbG9vcGJhY2sgZWNobyBkaWFnbm9zdGljIGVycm9yIGNvZGUgKi8KKyNkZWZpbmUgTUJTX0xCX1JFU0VUCTB4MTcKIC8qCiAgKiBGaXJtd2FyZSBvcHRpb25zIDEsIDIsIDMuCiAgKi8KQEAgLTIyMzAsNiArMjI1NCwxMyBAQAogCWludCBtYXhfcV9kZXB0aDsKIH07CiAKKy8qIFBsYWNlIGhvbGRlciBmb3IgRlcgYnVmZmVyIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBxbGZjX2Z3IHsKKwl2b2lkICpmd19idWY7CisJZG1hX2FkZHJfdCBmd19kbWE7CisJdWludDMyX3QgbGVuOworfTsKKwogLyoKICAqIFFsb2dpYyBob3N0IGFkYXB0ZXIgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUuCiAqLwpAQCAtMjU5NCw2ICsyNjI1LDcgQEAKIAlzdHJ1Y3QgcWxhX3N0YXRpc3RpY3MgcWxhX3N0YXRzOwogCXN0cnVjdCBpc3Bfb3BlcmF0aW9ucyAqaXNwX29wczsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CisJc3RydWN0IHFsZmNfZncgZndfYnVmOwogfTsKIAogLyoKQEAgLTI3NjYsNCArMjc5OCwxMjcgQEAKIAogI2RlZmluZSBDTURfU1AoQ21uZCkJCSgoQ21uZCktPlNDcC5wdHIpCiAKKy8qCisgKiBCU0cgVmVuZG9yIHNwZWNpZmljIGNvbW1hbmRzCisgKi8KKworI2RlZmluZSBRTF9WTkRfTE9PUEJBQ0sJCTB4MDEKKyNkZWZpbmUgUUxBODRfUkVTRVQJCTB4MDIKKyNkZWZpbmUgUUxBODRfVVBEQVRFX0ZXCQkweDAzCisjZGVmaW5lIFFMQTg0X01HTVRfQ01ECQkweDA0CisKKy8qIEJTRyBkZWZpbmF0aW9ucyBmb3IgaW50ZXJwcmV0aW5nIENvbW1hbmRTZW50IGZpZWxkICovCisjZGVmaW5lIElOVF9ERUZfTEJfTE9PUEJBQ0tfQ01EICAgICAgICAgMAorI2RlZmluZSBJTlRfREVGX0xCX0VDSE9fQ01EICAgICAgICAgICAgIDEKKworLyogQlNHIFZlbmRvciBzcGVjaWZpYyBkZWZpbmF0aW9ucyAqLwordHlwZWRlZiBzdHJ1Y3QgX0E4NF9SRVNFVCB7CisJdWludDE2X3QgRmxhZ3M7CisJdWludDE2X3QgUmVzZXJ2ZWQ7CisjZGVmaW5lIEE4NF9SRVNFVF9GTEFHX0VOQUJMRV9ESUFHX0ZXICAgMQorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBBODRfUkVTRVQsICpQQTg0X1JFU0VUOworCisjZGVmaW5lIEE4NF9JU1NVRV9XUklURV9UWVBFX0NNRCAgICAgICAgMAorI2RlZmluZSBBODRfSVNTVUVfUkVBRF9UWVBFX0NNRCAgICAgICAgIDEKKyNkZWZpbmUgQTg0X0NMRUFOVVBfQ01EICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEE4NF9JU1NVRV9SRVNFVF9PUF9GVyAgICAgICAgICAgMworI2RlZmluZSBBODRfSVNTVUVfUkVTRVRfRElBR19GVyAgICAgICAgIDQKKyNkZWZpbmUgQTg0X0lTU1VFX1VQREFURV9PUEZXX0NNRCAgICAgICA1CisjZGVmaW5lIEE4NF9JU1NVRV9VUERBVEVfRElBR0ZXX0NNRCAgICAgNgorCitzdHJ1Y3QgcWxhODRfbWdtdF9wYXJhbSB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdWludDMyX3Qgc3RhcnRfYWRkcjsKKwkJfSBtZW07IC8qIGZvciBRTEE4NF9NR01UX1JFQUQvV1JJVEVfTUVNICovCisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBpZDsKKyNkZWZpbmUgUUxBODRfTUdNVF9DT05GSUdfSURfVUlGICAgICAgICAxCisjZGVmaW5lIFFMQTg0X01HTVRfQ09ORklHX0lEX0ZDT0VfQ09TICAgMgorI2RlZmluZSBRTEE4NF9NR01UX0NPTkZJR19JRF9QQVVTRSAgICAgIDMKKyNkZWZpbmUgUUxBODRfTUdNVF9DT05GSUdfSURfVElNRU9VVFMgICA0CisKKwkJdWludDMyX3QgcGFyYW0wOworCQl1aW50MzJfdCBwYXJhbTE7CisJfSBjb25maWc7IC8qIGZvciBRTEE4NF9NR01UX0NITkdfQ09ORklHICovCisKKwlzdHJ1Y3QgeworCQl1aW50MzJfdCB0eXBlOworI2RlZmluZSBRTEE4NF9NR01UX0lORk9fQ09ORklHX0xPR19EQVRBICAgICAgICAgMSAvKiBHZXQgQ29uZmlnIExvZyBEYXRhICovCisjZGVmaW5lIFFMQTg0X01HTVRfSU5GT19MT0dfREFUQSAgICAgICAgICAgICAgICAyIC8qIEdldCBMb2cgRGF0YSAqLworI2RlZmluZSBRTEE4NF9NR01UX0lORk9fUE9SVF9TVEFUICAgICAgICAgICAgICAgMyAvKiBHZXQgUG9ydCBTdGF0aXN0aWNzICovCisjZGVmaW5lIFFMQTg0X01HTVRfSU5GT19MSUZfU1RBVCAgICAgICAgICAgICAgICA0IC8qIEdldCBMSUYgU3RhdGlzdGljcyAgKi8KKyNkZWZpbmUgUUxBODRfTUdNVF9JTkZPX0FTSUNfU1RBVCAgICAgICAgICAgICAgIDUgLyogR2V0IEFTSUMgU3RhdGlzdGljcyAqLworI2RlZmluZSBRTEE4NF9NR01UX0lORk9fQ09ORklHX1BBUkFNUyAgICAgICAgICAgNiAvKiBHZXQgQ29uZmlnIFBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgUUxBODRfTUdNVF9JTkZPX1BBTklDX0xPRyAgICAgICAgICAgICAgIDcgLyogR2V0IFBhbmljIExvZyAqLworCisJCXVpbnQzMl90IGNvbnRleHQ7CisvKgorKiBjb250ZXh0IGRlZmluaXRpb25zIGZvciBRTEE4NF9NR01UX0lORk9fQ09ORklHX0xPR19EQVRBCisqLworI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfREVCVUdfTE9HICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9MRUFSTl9MT0cgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX0ZDX0FDTF9JTkdSRVNTX0xPRyAgICAgICAgICAgMgorI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfRkNfQUNMX0VHUkVTU19MT0cgICAgICAgICAgICAzCisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9FVEhFUk5FVF9BQ0xfSU5HUkVTU19MT0cgICAgIDQKKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX0VUSEVSTkVUX0FDTF9FR1JFU1NfTE9HICAgICAgNQorI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfTUVTU0FHRV9UUkFOU01JVF9MT0cgICAgICAgICA2CisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9NRVNTQUdFX1JFQ0VJVkVfTE9HICAgICAgICAgIDcKKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX0xJTktfRVZFTlRfTE9HICAgICAgICAgICAgICAgOAorI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfRENYX0xPRyAgICAgICAgICAgICAgICAgICAgICA5CisKKy8qCisqIGNvbnRleHQgZGVmaW5pdGlvbnMgZm9yIFFMQTg0X01HTVRfSU5GT19QT1JUX1NUQVQKKyovCisjZGVmaW5lIElDX1BPUlRfU1RBVElTVElDU19QT1JUX05VTUJFUl9FVEhFUk5FVF9QT1JUMCAgIDAKKyNkZWZpbmUgSUNfUE9SVF9TVEFUSVNUSUNTX1BPUlRfTlVNQkVSX0VUSEVSTkVUX1BPUlQxICAgMQorI2RlZmluZSBJQ19QT1JUX1NUQVRJU1RJQ1NfUE9SVF9OVU1CRVJfTlNMX1BPUlQwICAgICAgICAyCisjZGVmaW5lIElDX1BPUlRfU1RBVElTVElDU19QT1JUX05VTUJFUl9OU0xfUE9SVDEgICAgICAgIDMKKyNkZWZpbmUgSUNfUE9SVF9TVEFUSVNUSUNTX1BPUlRfTlVNQkVSX0ZDX1BPUlQwICAgICAgICAgNAorI2RlZmluZSBJQ19QT1JUX1NUQVRJU1RJQ1NfUE9SVF9OVU1CRVJfRkNfUE9SVDEgICAgICAgICA1CisKKworLyoKKyogY29udGV4dCBkZWZpbml0aW9ucyBmb3IgUUxBODRfTUdNVF9JTkZPX0xJRl9TVEFUCisqLworI2RlZmluZSBJQ19MSUZfU1RBVElTVElDU19MSUZfTlVNQkVSX0VUSEVSTkVUX1BPUlQwICAgICAwCisjZGVmaW5lIElDX0xJRl9TVEFUSVNUSUNTX0xJRl9OVU1CRVJfRVRIRVJORVRfUE9SVDEgICAgIDEKKyNkZWZpbmUgSUNfTElGX1NUQVRJU1RJQ1NfTElGX05VTUJFUl9GQ19QT1JUMCAgICAgICAgICAgMgorI2RlZmluZSBJQ19MSUZfU1RBVElTVElDU19MSUZfTlVNQkVSX0ZDX1BPUlQxICAgICAgICAgICAzCisjZGVmaW5lIElDX0xJRl9TVEFUSVNUSUNTX0xJRl9OVU1CRVJfQ1BVICAgICAgICAgICAgICAgIDYKKworCQl9IGluZm87IC8qIGZvciBRTEE4NF9NR01UX0dFVF9JTkZPICovCisJfSB1OworfTsKKworc3RydWN0IHFsYTg0X21zZ19tZ210IHsKKwl1aW50MTZfdCBjbWQ7CisjZGVmaW5lIFFMQTg0X01HTVRfUkVBRF9NRU0gICAgIDB4MDAKKyNkZWZpbmUgUUxBODRfTUdNVF9XUklURV9NRU0gICAgMHgwMQorI2RlZmluZSBRTEE4NF9NR01UX0NITkdfQ09ORklHICAweDAyCisjZGVmaW5lIFFMQTg0X01HTVRfR0VUX0lORk8gICAgIDB4MDMKKwl1aW50MTZfdCByc3J2ZDsKKwlzdHJ1Y3QgcWxhODRfbWdtdF9wYXJhbSBtZ210cDsvKiBwYXJhbWV0ZXJzIGZvciBjbWQgKi8KKwl1aW50MzJfdCBsZW47IC8qIGJ5dGVzIGluIHBheWxvYWQgZm9sbG93aW5nIHRoaXMgc3RydWN0ICovCisJdWludDhfdCBwYXlsb2FkWzBdOyAvKiBwYXlsb2FkIGZvciBjbWQgKi8KK307CisKK3N0cnVjdCBtc2dfdXBkYXRlX2Z3IHsKKwkvKgorCSogZGlhZ19mdyA9IDAgIG9wZXJhdGlvbmFsIGZ3CisJKiAgICAgIG90aGVyd2lzZSBkaWFnbm9zdGljIGZ3CisJKiBvZmZzZXQsIGxlbiwgZndfbGVuIGFyZSBwcmVzZW50IHRvIG92ZXJjb21lIHRoZSBjdXJyZW50IGxpbWl0YXRpb24KKwkqIG9mIDEyOEtiIHhmZXIgc2l6ZS4gVGhlIGZ3IGlzIHNlbnQgaW4gc21hbGxlciBjaHVua3MuIEVhY2ggY2h1bmsKKwkqIHNwZWNpZmllcyB0aGUgYnl0ZSAib2Zmc2V0IiB3aGVyZSBpdCBmaXRzIGluIHRoZSBmdyBidWZmZXIuIFRoZQorCSogbnVtYmVyIG9mIGJ5dGVzIGluIGVhY2ggY2h1bmsgaXMgc3BlY2lmaWVkIGluICJsZW4iLiAiZndfbGVuIgorCSogaXMgdGhlIHRvdGFsIHNpemUgb2YgZncuIFRoZSBmaXJzdCBjaHVuayBzaG91bGQgc3RhcnQgYXQgb2Zmc2V0ID0gMC4KKwkqIFdoZW4gb2Zmc2V0K2xlbiA9PSBmd19sZW4sIHRoZSBmdyBpcyB3cml0dGVuIHRvIHRoZSBIQkEuCisJKi8KKwl1aW50MzJfdCBkaWFnX2Z3OworCXVpbnQzMl90IG9mZnNldDsvKiBzdGFydCBvZmZzZXQgKi8KKwl1aW50MzJfdCBsZW47ICAgLyogbnVtIGJ5dGVzIGluIGN1ciB4ZmVyICovCisJdWludDMyX3QgZndfbGVuOyAvKiBzaXplIG9mIGZ3IGluIGJ5dGVzICovCisJdWludDhfdCBmd19ieXRlc1swXTsKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaAppbmRleCA2NmE4ZGE1Li5jZWJmNGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaApAQCAtNjI3LDYgKzYyNywzOSBAQAogCXVpbnQzMl90IHJ4X2xlbjsJCS8qIERhdGEgc2VnbWVudCAxIGxlbmd0aC4gKi8KIH07CiAKK3N0cnVjdCBlbHNfc3RzX2VudHJ5XzI0eHggeworCXVpbnQ4X3QgZW50cnlfdHlwZTsJCS8qIEVudHJ5IHR5cGUuICovCisJdWludDhfdCBlbnRyeV9jb3VudDsJCS8qIEVudHJ5IGNvdW50LiAqLworCXVpbnQ4X3Qgc3lzX2RlZmluZTsJCS8qIFN5c3RlbSBEZWZpbmVkLiAqLworCXVpbnQ4X3QgZW50cnlfc3RhdHVzOwkJLyogRW50cnkgU3RhdHVzLiAqLworCisJdWludDMyX3QgaGFuZGxlOwkJLyogU3lzdGVtIGhhbmRsZS4gKi8KKworCXVpbnQxNl90IGNvbXBfc3RhdHVzOworCisJdWludDE2X3QgbnBvcnRfaGFuZGxlOwkJLyogTl9QT1JUIGhhbmRsZS4gKi8KKworCXVpbnQxNl90IHJlc2VydmVkXzE7CisKKwl1aW50OF90IHZwX2luZGV4OworCXVpbnQ4X3Qgc29mX3R5cGU7CisKKwl1aW50MzJfdCByeF94Y2hnX2FkZHJlc3M7CS8qIFJlY2VpdmUgZXhjaGFuZ2UgYWRkcmVzcy4gKi8KKwl1aW50MTZfdCByZXNlcnZlZF8yOworCisJdWludDhfdCBvcGNvZGU7CisJdWludDhfdCByZXNlcnZlZF8zOworCisJdWludDhfdCBwb3J0X2lkWzNdOworCXVpbnQ4X3QgcmVzZXJ2ZWRfNDsKKworCXVpbnQxNl90IHJlc2VydmVkXzU7CisKKwl1aW50MTZfdCBjb250cm9sX2ZsYWdzOwkJLyogQ29udHJvbCBmbGFncy4gKi8KKwl1aW50MzJfdCB0b3RhbF9ieXRlX2NvdW50OworCXVpbnQzMl90IGVycm9yX3N1YmNvZGVfMTsKKwl1aW50MzJfdCBlcnJvcl9zdWJjb2RlXzI7Cit9OwogLyoKICAqIElTUCBxdWV1ZSAtIE1haWxib3ggQ29tbWFuZCBlbnRyeSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCmluZGV4IGY2MWZiOGQuLjNhODliYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKQEAgLTYwLDYgKzYwLDggQEAKIGV4dGVybiBpbnQgcWxhMngwMF9hc3luY19sb2dvdXRfZG9uZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBmY19wb3J0X3QgKiwKICAgICB1aW50MTZfdCAqKTsKIAorZXh0ZXJuIGZjX3BvcnRfdCAqCitxbGEyeDAwX2FsbG9jX2ZjcG9ydChzY3NpX3FsYV9ob3N0X3QgKiwgZ2ZwX3QgKTsKIC8qCiAgKiBHbG9iYWwgRGF0YSBpbiBxbGFfb3MuYyBzb3VyY2UgZmlsZS4KICAqLwpAQCAtNzYsNiArNzgsNyBAQAogZXh0ZXJuIGludCBxbDJ4bWF4cXVldWVzOwogZXh0ZXJuIGludCBxbDJ4bXVsdGlxdWVfdGFnOwogZXh0ZXJuIGludCBxbDJ4Zndsb2FkYmluOworZXh0ZXJuIGludCBxbDJ4ZXRzZW5hYmxlOwogCiBleHRlcm4gaW50IHFsYTJ4MDBfbG9vcF9yZXNldChzY3NpX3FsYV9ob3N0X3QgKik7CiBleHRlcm4gdm9pZCBxbGEyeDAwX2Fib3J0X2FsbF9jbWRzKHNjc2lfcWxhX2hvc3RfdCAqLCBpbnQpOwpAQCAtOTQsNyArOTcsNiBAQAogCiBleHRlcm4gaW50IHFsYTgxeHhfcmVzdGFydF9tcGlfZmlybXdhcmUoc2NzaV9xbGFfaG9zdF90ICopOwogCi1leHRlcm4gdm9pZCBxbGEyeDAwX2Fib3J0X2ZjcG9ydF9jbWRzKGZjX3BvcnRfdCAqKTsKIGV4dGVybiBzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqcWxhMngwMF9jcmVhdGVfaG9zdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICosCiAJc3RydWN0IHFsYV9od19kYXRhICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9mcmVlX2hvc3Qoc3RydWN0IHNjc2lfcWxhX2hvc3QgKik7CkBAIC0xNTQsNiArMTU2LDcgQEAKIGludCBfX3FsYTJ4MDBfbWFya2VyKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIHN0cnVjdCByZXFfcXVlICosIHN0cnVjdCByc3BfcXVlICosCiAJCQkJCQl1aW50MTZfdCwgdWludDE2X3QsIHVpbnQ4X3QpOwogZXh0ZXJuIGludCBxbGEyeDAwX3N0YXJ0X3NwKHNyYl90ICopOworZXh0ZXJuIHZvaWQgcWxhMngwMF9jdHhfc3BfZnJlZShzcmJfdCAqKTsKIAogLyoKICAqIEdsb2JhbCBGdW5jdGlvbiBQcm90b3R5cGVzIGluIHFsYV9tYnguYyBzb3VyY2UgZmlsZS4KQEAgLTQyNiw2ICs0MjksOCBAQAogZXh0ZXJuIHZvaWQgcWxhMngwMF9pbml0X2hvc3RfYXR0cihzY3NpX3FsYV9ob3N0X3QgKik7CiBleHRlcm4gdm9pZCBxbGEyeDAwX2FsbG9jX3N5c2ZzX2F0dHIoc2NzaV9xbGFfaG9zdF90ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9mcmVlX3N5c2ZzX2F0dHIoc2NzaV9xbGFfaG9zdF90ICopOworZXh0ZXJuIGludCBxbGEyeDAwX2xvb3BiYWNrX3Rlc3Qoc2NzaV9xbGFfaG9zdF90ICosIHN0cnVjdCBtc2dfZWNob19sYiAqLCB1aW50MTZfdCAqKTsKK2V4dGVybiBpbnQgcWxhMngwMF9lY2hvX3Rlc3Qoc2NzaV9xbGFfaG9zdF90ICosIHN0cnVjdCBtc2dfZWNob19sYiAqLCB1aW50MTZfdCAqKTsKIAogLyoKICAqIEdsb2JhbCBGdW5jdGlvbiBQcm90b3R5cGVzIGluIHFsYV9kZnMuYyBzb3VyY2UgZmlsZS4KQEAgLTQ1Myw2ICs0NTgsNSBAQAogZXh0ZXJuIHZvaWQgcWxhMjV4eF93cnRfcmVxX3JlZyhzdHJ1Y3QgcWxhX2h3X2RhdGEgKiwgdWludDE2X3QsIHVpbnQxNl90KTsKIGV4dGVybiB2b2lkIHFsYTI1eHhfd3J0X3JzcF9yZWcoc3RydWN0IHFsYV9od19kYXRhICosIHVpbnQxNl90LCB1aW50MTZfdCk7CiBleHRlcm4gdm9pZCBxbGEyNHh4X3dydF9yc3BfcmVnKHN0cnVjdCBxbGFfaHdfZGF0YSAqLCB1aW50MTZfdCwgdWludDE2X3QpOwotZXh0ZXJuIHN0cnVjdCBzY3NpX3FsYV9ob3N0ICogcWxhMjV4eF9nZXRfaG9zdChzdHJ1Y3QgcnNwX3F1ZSAqKTsKIAogI2VuZGlmIC8qIF9RTEFfR0JMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCmluZGV4IDNmOGU4NDkuLmE2N2IyYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwpAQCAtNjIsNyArNjIsNyBAQAogCWN0eC0+ZnJlZShzcCk7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBxbGEyeDAwX2N0eF9zcF9mcmVlKHNyYl90ICpzcCkKIHsKIAlzdHJ1Y3Qgc3JiX2N0eCAqY3R4ID0gc3AtPmN0eDsKQEAgLTMzOCw2ICszMzgsMTYgQEAKIAlydmFsID0gcWxhMngwMF9pbml0X3JpbmdzKHZoYSk7CiAJaGEtPmZsYWdzLmNoaXBfcmVzZXRfZG9uZSA9IDE7CiAKKwlpZiAocnZhbCA9PSBRTEFfU1VDQ0VTUyAmJiBJU19RTEE4NFhYKGhhKSkgeworCS8qIElzc3VlIHZlcmlmeSA4NHh4IEZXIElPQ0IgdG8gY29tcGxldGUgODR4eCBpbml0aWFsaXphdGlvbiAqLworCQlydmFsID0gcWxhODR4eF9pbml0X2NoaXAodmhhKTsKKwkJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAorCQkJCSJVbmFibGUgdG8gaW5pdGlhbGl6ZSBJU1A4NFhYLlxuIik7CisJCXFsYTg0eHhfcHV0X2NoaXAodmhhKTsKKwkJfQorCX0KKwogCXJldHVybiAocnZhbCk7CiB9CiAKQEAgLTIyMTYsNyArMjIyNiw3IEBACiAgKgogICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBmY3BvcnQsIG9yIE5VTEwsIGlmIG5vbmUgYXZhaWxhYmxlLgogICovCi1zdGF0aWMgZmNfcG9ydF90ICoKK2ZjX3BvcnRfdCAqCiBxbGEyeDAwX2FsbG9jX2ZjcG9ydChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJZmNfcG9ydF90ICpmY3BvcnQ7CkBAIC0yOTAwLDggKzI5MTAsMTMgQEAKIAkJaWYgKHFsYTJ4MDBfaXNfcmVzZXJ2ZWRfaWQodmhhLCBsb29wX2lkKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChhdG9taWNfcmVhZCgmdmhhLT5sb29wX2Rvd25fdGltZXIpIHx8IExPT1BfVFJBTlNJVElPTih2aGEpKQorCQlpZiAoYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9kb3duX3RpbWVyKSB8fAorCQkgICAgTE9PUF9UUkFOU0lUSU9OKHZoYSkpIHsKKwkJCWF0b21pY19zZXQoJnZoYS0+bG9vcF9kb3duX3RpbWVyLCAwKTsKKwkJCXNldF9iaXQoTE9PUF9SRVNZTkNfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQkJc2V0X2JpdChMT0NBTF9MT09QX1VQREFURSwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJCWJyZWFrOworCQl9CiAKIAkJaWYgKHN3bCAhPSBOVUxMKSB7CiAJCQlpZiAobGFzdF9kZXYpIHsKQEAgLTQ4NzcsNiArNDg5MiwxNSBAQAogfQogCiB2b2lkCi1xbGE4MXh4X3VwZGF0ZV9md19vcHRpb25zKHNjc2lfcWxhX2hvc3RfdCAqaGEpCitxbGE4MXh4X3VwZGF0ZV9md19vcHRpb25zKHNjc2lfcWxhX2hvc3RfdCAqdmhhKQogeworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCisJaWYgKCFxbDJ4ZXRzZW5hYmxlKQorCQlyZXR1cm47CisKKwkvKiBFbmFibGUgRVRTIEJ1cnN0LiAqLworCW1lbXNldChoYS0+Zndfb3B0aW9ucywgMCwgc2l6ZW9mKGhhLT5md19vcHRpb25zKSk7CisJaGEtPmZ3X29wdGlvbnNbMl0gfD0gQklUXzk7CisJcWxhMngwMF9zZXRfZndfb3B0aW9ucyh2aGEsIGhhLT5md19vcHRpb25zKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCmluZGV4IGM1Y2NhYzAuLjgyOTlhOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYwpAQCAtMTAyNSw2ICsxMDI1LDExOSBAQAogCS8qIEltcGxpY2l0OiBtYngtPm1ieDEwID0gMC4gKi8KIH0KIAorc3RhdGljIHZvaWQKK3FsYTI0eHhfZWxzX2lvY2Ioc3JiX3QgKnNwLCBzdHJ1Y3QgZWxzX2VudHJ5XzI0eHggKmVsc19pb2NiKQoreworCXN0cnVjdCBmY19ic2dfam9iICpic2dfam9iID0gKChzdHJ1Y3Qgc3JiX2JzZyopc3AtPmN0eCktPmJzZ19qb2I7CisKKyAgICAgICAgZWxzX2lvY2ItPmVudHJ5X3R5cGUgPSBFTFNfSU9DQl9UWVBFOworICAgICAgICBlbHNfaW9jYi0+ZW50cnlfY291bnQgPSAxOworICAgICAgICBlbHNfaW9jYi0+c3lzX2RlZmluZSA9IDA7CisgICAgICAgIGVsc19pb2NiLT5lbnRyeV9zdGF0dXMgPSAwOworICAgICAgICBlbHNfaW9jYi0+aGFuZGxlID0gc3AtPmhhbmRsZTsKKyAgICAgICAgZWxzX2lvY2ItPm5wb3J0X2hhbmRsZSA9IGNwdV90b19sZTE2KHNwLT5mY3BvcnQtPmxvb3BfaWQpOworICAgICAgICBlbHNfaW9jYi0+dHhfZHNkX2NvdW50ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250KTsKKyAgICAgICAgZWxzX2lvY2ItPnZwX2luZGV4ID0gc3AtPmZjcG9ydC0+dnBfaWR4OworICAgICAgICBlbHNfaW9jYi0+c29mX3R5cGUgPSBFU1RfU09GSTM7CisgICAgICAgIGVsc19pb2NiLT5yeF9kc2RfY291bnQgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250KTsKKworICAgICAgICBlbHNfaW9jYi0+b3Bjb2RlID0oKChzdHJ1Y3Qgc3JiX2JzZyopc3AtPmN0eCktPmN0eC50eXBlID09IFNSQl9FTFNfQ01EX1JQVCkgPworCSAgICBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEucl9lbHMuZWxzX2NvZGUgOiBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9lbHMuY29tbWFuZF9jb2RlOworICAgICAgICBlbHNfaW9jYi0+cG9ydF9pZFswXSA9IHNwLT5mY3BvcnQtPmRfaWQuYi5hbF9wYTsKKyAgICAgICAgZWxzX2lvY2ItPnBvcnRfaWRbMV0gPSBzcC0+ZmNwb3J0LT5kX2lkLmIuYXJlYTsKKyAgICAgICAgZWxzX2lvY2ItPnBvcnRfaWRbMl0gPSBzcC0+ZmNwb3J0LT5kX2lkLmIuZG9tYWluOworICAgICAgICBlbHNfaW9jYi0+Y29udHJvbF9mbGFncyA9IDA7CisgICAgICAgIGVsc19pb2NiLT5yeF9ieXRlX2NvdW50ID0KKyAgICAgICAgICAgIGNwdV90b19sZTMyKGJzZ19qb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW4pOworICAgICAgICBlbHNfaW9jYi0+dHhfYnl0ZV9jb3VudCA9CisgICAgICAgICAgICBjcHVfdG9fbGUzMihic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW4pOworCisgICAgICAgIGVsc19pb2NiLT50eF9hZGRyZXNzWzBdID0gY3B1X3RvX2xlMzIoTFNEKHNnX2RtYV9hZGRyZXNzCisgICAgICAgICAgICAoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QpKSk7CisgICAgICAgIGVsc19pb2NiLT50eF9hZGRyZXNzWzFdID0gY3B1X3RvX2xlMzIoTVNEKHNnX2RtYV9hZGRyZXNzCisgICAgICAgICAgICAoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QpKSk7CisgICAgICAgIGVsc19pb2NiLT50eF9sZW4gPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuCisgICAgICAgICAgICAoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QpKTsKKworICAgICAgICBlbHNfaW9jYi0+cnhfYWRkcmVzc1swXSA9IGNwdV90b19sZTMyKExTRChzZ19kbWFfYWRkcmVzcworICAgICAgICAgICAgKGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCkpKTsKKyAgICAgICAgZWxzX2lvY2ItPnJ4X2FkZHJlc3NbMV0gPSBjcHVfdG9fbGUzMihNU0Qoc2dfZG1hX2FkZHJlc3MKKyAgICAgICAgICAgIChic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QpKSk7CisgICAgICAgIGVsc19pb2NiLT5yeF9sZW4gPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuCisgICAgICAgICAgICAoYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0KSk7Cit9CisKK3N0YXRpYyB2b2lkCitxbGEyNHh4X2N0X2lvY2Ioc3JiX3QgKnNwLCBzdHJ1Y3QgY3RfZW50cnlfMjR4eCAqY3RfaW9jYikKK3sKKwl1aW50MTZfdCAgICAgICAgYXZhaWxfZHNkczsKKwl1aW50MzJfdCAgICAgICAgKmN1cl9kc2Q7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaW5kZXg7CisJdWludDE2X3QgdG90X2RzZHM7CisgICAgICAgIHNjc2lfcWxhX2hvc3RfdCAqdmhhID0gc3AtPmZjcG9ydC0+dmhhOworCXN0cnVjdCBmY19ic2dfam9iICpic2dfam9iID0gKChzdHJ1Y3Qgc3JiX2JzZyopc3AtPmN0eCktPmJzZ19qb2I7CisJaW50IGxvb3BfaXRlcmFydGlvbiA9IDA7CisJaW50IGNvbnRfaW9jYl9wcnNudCA9IDA7CisJaW50IGVudHJ5X2NvdW50ID0gMTsKKworCWN0X2lvY2ItPmVudHJ5X3R5cGUgPSBDVF9JT0NCX1RZUEU7CisgICAgICAgIGN0X2lvY2ItPmVudHJ5X3N0YXR1cyA9IDA7CisgICAgICAgIGN0X2lvY2ItPnN5c19kZWZpbmUgPSAwOworICAgICAgICBjdF9pb2NiLT5oYW5kbGUgPSBzcC0+aGFuZGxlOworCisJY3RfaW9jYi0+bnBvcnRfaGFuZGxlID0gY3B1X3RvX2xlMTYoc3AtPmZjcG9ydC0+bG9vcF9pZCk7CisJY3RfaW9jYi0+dnBfaW5kZXggPSBzcC0+ZmNwb3J0LT52cF9pZHg7CisgICAgICAgIGN0X2lvY2ItPmNvbXBfc3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKTsKKworCWN0X2lvY2ItPmNtZF9kc2RfY291bnQgPQorICAgICAgICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNihic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250KTsKKyAgICAgICAgY3RfaW9jYi0+dGltZW91dCA9IDA7CisgICAgICAgIGN0X2lvY2ItPnJzcF9kc2RfY291bnQgPQorICAgICAgICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNihic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCk7CisgICAgICAgIGN0X2lvY2ItPnJzcF9ieXRlX2NvdW50ID0KKyAgICAgICAgICAgIGNwdV90b19sZTMyKGJzZ19qb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW4pOworICAgICAgICBjdF9pb2NiLT5jbWRfYnl0ZV9jb3VudCA9CisgICAgICAgICAgICBjcHVfdG9fbGUzMihic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW4pOworICAgICAgICBjdF9pb2NiLT5kc2VnXzBfYWRkcmVzc1swXSA9IGNwdV90b19sZTMyKExTRChzZ19kbWFfYWRkcmVzcworICAgICAgICAgICAgKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0KSkpOworICAgICAgICBjdF9pb2NiLT5kc2VnXzBfYWRkcmVzc1sxXSA9IGNwdV90b19sZTMyKE1TRChzZ19kbWFfYWRkcmVzcworICAgICAgICAgICAoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QpKSk7CisgICAgICAgIGN0X2lvY2ItPmRzZWdfMF9sZW4gPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuCisgICAgICAgICAgICAoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QpKTsKKworCWF2YWlsX2RzZHMgPSAxOworCWN1cl9kc2QgPSAodWludDMyX3QgKiljdF9pb2NiLT5kc2VnXzFfYWRkcmVzczsKKwlpbmRleCA9IDA7CisJdG90X2RzZHMgPSBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudDsKKworCWZvcl9lYWNoX3NnKGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwgc2csIHRvdF9kc2RzLCBpbmRleCkgeworCQlkbWFfYWRkcl90ICAgICAgIHNsZV9kbWE7CisJCWNvbnRfYTY0X2VudHJ5X3QgKmNvbnRfcGt0OworCisJCS8qIEFsbG9jYXRlIGFkZGl0aW9uYWwgY29udGludWF0aW9uIHBhY2tldHM/ICovCisJCWlmIChhdmFpbF9kc2RzID09IDApIHsKKwkJCS8qCisJCQkqIEZpdmUgRFNEcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBDb250LgorCQkJKiBUeXBlIDEgSU9DQi4KKwkJCSAgICAgICAqLworCQkJY29udF9wa3QgPSBxbGEyeDAwX3ByZXBfY29udF90eXBlMV9pb2NiKHZoYSk7CisJCQljdXJfZHNkID0gKHVpbnQzMl90ICopIGNvbnRfcGt0LT5kc2VnXzBfYWRkcmVzczsKKwkJCWF2YWlsX2RzZHMgPSA1OworCQkJY29udF9pb2NiX3Byc250ID0gMTsKKwkJCWVudHJ5X2NvdW50Kys7CisJCX0KKworCQlzbGVfZG1hID0gc2dfZG1hX2FkZHJlc3Moc2cpOworCQkqY3VyX2RzZCsrICAgPSBjcHVfdG9fbGUzMihMU0Qoc2xlX2RtYSkpOworCQkqY3VyX2RzZCsrICAgPSBjcHVfdG9fbGUzMihNU0Qoc2xlX2RtYSkpOworCQkqY3VyX2RzZCsrICAgPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuKHNnKSk7CisJCWxvb3BfaXRlcmFydGlvbisrOworCQlhdmFpbF9kc2RzLS07CisJfQorICAgICAgICBjdF9pb2NiLT5lbnRyeV9jb3VudCA9IGVudHJ5X2NvdW50OworfQorCiBpbnQKIHFsYTJ4MDBfc3RhcnRfc3Aoc3JiX3QgKnNwKQogewpAQCAtMTA1Miw2ICsxMTY1LDEzIEBACiAJCSAgICBxbGEyNHh4X2xvZ291dF9pb2NiKHNwLCBwa3QpOgogCQkgICAgcWxhMngwMF9sb2dvdXRfaW9jYihzcCwgcGt0KTsKIAkJYnJlYWs7CisJY2FzZSBTUkJfRUxTX0NNRF9SUFQ6CisJY2FzZSBTUkJfRUxTX0NNRF9IU1Q6CisJCXFsYTI0eHhfZWxzX2lvY2Ioc3AsIHBrdCk7CisJCWJyZWFrOworCWNhc2UgU1JCX0NUX0NNRDoKKwkJcWxhMjR4eF9jdF9pb2NiKHNwLCBwa3QpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKaW5kZXggZmZkMGVmZC4uYWI5MDMyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwpAQCAtOCw2ICs4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RjcS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ic2dfZmMuaD4KIAogc3RhdGljIHZvaWQgcWxhMngwMF9tYnhfY29tcGxldGlvbihzY3NpX3FsYV9ob3N0X3QgKiwgdWludDE2X3QpOwogc3RhdGljIHZvaWQgcWxhMngwMF9wcm9jZXNzX2NvbXBsZXRlZF9yZXF1ZXN0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosCkBAIC04ODEsNyArODgyLDkgQEAKIAkJICAgIGluZGV4KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQorCiAJcmVxLT5vdXRzdGFuZGluZ19jbWRzW2luZGV4XSA9IE5VTEw7CisKIGRvbmU6CiAJcmV0dXJuIHNwOwogfQpAQCAtOTgyLDYgKzk4NSwxMDAgQEAKIH0KIAogc3RhdGljIHZvaWQKK3FsYTI0eHhfZWxzX2N0X2VudHJ5KHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBzdHJ1Y3QgcmVxX3F1ZSAqcmVxLAorICAgIHN0cnVjdCBzdHNfZW50cnlfMjR4eCAqcGt0LCBpbnQgaW9jYl90eXBlKQoreworCWNvbnN0IGNoYXIgZnVuY1tdID0gIkVMU19DVF9JT0NCIjsKKwljb25zdCBjaGFyICp0eXBlOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXNyYl90ICpzcDsKKwlzdHJ1Y3Qgc3JiX2JzZyAqc3BfYnNnOworCXN0cnVjdCBmY19ic2dfam9iICpic2dfam9iOworCXVpbnQxNl90IGNvbXBfc3RhdHVzOworCXVpbnQzMl90IGZ3X3N0YXR1c1szXTsKKwl1aW50OF90KiBmd19zdHNfcHRyOworCisJc3AgPSBxbGEyeDAwX2dldF9zcF9mcm9tX2hhbmRsZSh2aGEsIGZ1bmMsIHJlcSwgcGt0KTsKKwlpZiAoIXNwKQorCQlyZXR1cm47CisJc3BfYnNnID0gKHN0cnVjdCBzcmJfYnNnKilzcC0+Y3R4OworCWJzZ19qb2IgPSBzcF9ic2ctPmJzZ19qb2I7CisKKwl0eXBlID0gTlVMTDsKKwlzd2l0Y2ggKHNwX2JzZy0+Y3R4LnR5cGUpIHsKKwljYXNlIFNSQl9FTFNfQ01EX1JQVDoKKwljYXNlIFNSQl9FTFNfQ01EX0hTVDoKKwkJdHlwZSA9ICJlbHMiOworCQlicmVhazsKKwljYXNlIFNSQl9DVF9DTUQ6CisJCXR5cGUgPSAiY3QgcGFzcy10aHJvdWdoIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkgICAgIiVzOiBVbnJlY29nbml6ZWQgU1JCOiAoJXApIHR5cGU9JWQuXG4iLCBmdW5jLCBzcCwKKwkJICAgIHNwX2JzZy0+Y3R4LnR5cGUpOworCQlyZXR1cm47CisJfQorCisJY29tcF9zdGF0dXMgPSBmd19zdGF0dXNbMF0gPSBsZTE2X3RvX2NwdShwa3QtPmNvbXBfc3RhdHVzKTsKKwlmd19zdGF0dXNbMV0gPSBsZTE2X3RvX2NwdSgoKHN0cnVjdCBlbHNfc3RzX2VudHJ5XzI0eHgqKXBrdCktPmVycm9yX3N1YmNvZGVfMSk7CisJZndfc3RhdHVzWzJdID0gbGUxNl90b19jcHUoKChzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4Kilwa3QpLT5lcnJvcl9zdWJjb2RlXzIpOworCisJLyogcmV0dXJuIEZDX0NURUxTX1NUQVRVU19PSyBhbmQgbGVhdmUgdGhlIGRlY29kaW5nIG9mIHRoZSBFTFMvQ1QKKwkgKiBmYyBwYXlsb2FkICB0byB0aGUgY2FsbGVyCisJICovCisJYnNnX2pvYi0+cmVwbHktPnJlcGx5X2RhdGEuY3RlbHNfcmVwbHkuc3RhdHVzID0gRkNfQ1RFTFNfU1RBVFVTX09LOworCWJzZ19qb2ItPnJlcGx5X2xlbiA9IHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcGx5KSArIHNpemVvZihmd19zdGF0dXMpOworCisJaWYgKGNvbXBfc3RhdHVzICE9IENTX0NPTVBMRVRFKSB7CisJCWlmIChjb21wX3N0YXR1cyA9PSBDU19EQVRBX1VOREVSUlVOKSB7CisJCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gRElEX09LIDw8IDE2OworCQkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQkJbGUxNl90b19jcHUoKChzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4Kilwa3QpLT50b3RhbF9ieXRlX2NvdW50KTsKKworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSAgICAic2NzaSglbGQ6MHgleCk6IEVMUy1DVCBwYXNzLXRocm91Z2gtJXMgZXJyb3IgY29tcF9zdGF0dXMtc3RhdHVzPTB4JXggIgorCQkJICAgICJlcnJvciBzdWJjb2RlIDE9MHgleCBlcnJvciBzdWJjb2RlIDI9MHgleCB0b3RhbF9ieXRlID0gMHgleC5cbiIsCisJCQkJdmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLCBjb21wX3N0YXR1cywgZndfc3RhdHVzWzFdLCBmd19zdGF0dXNbMl0sCisJCQkJbGUxNl90b19jcHUoKChzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4Kilwa3QpLT50b3RhbF9ieXRlX2NvdW50KSkpOworCQkJZndfc3RzX3B0ciA9ICgodWludDhfdCopYnNnX2pvYi0+cmVxLT5zZW5zZSkgKyBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXBseSk7CisJCQltZW1jcHkoIGZ3X3N0c19wdHIsIGZ3X3N0YXR1cywgc2l6ZW9mKGZ3X3N0YXR1cykpOworCQl9CisJCWVsc2UgeworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSAgICAic2NzaSglbGQ6MHgleCk6IEVMUy1DVCBwYXNzLXRocm91Z2gtJXMgZXJyb3IgY29tcF9zdGF0dXMtc3RhdHVzPTB4JXggIgorCQkJICAgICJlcnJvciBzdWJjb2RlIDE9MHgleCBlcnJvciBzdWJjb2RlIDI9MHgleC5cbiIsCisJCQkJdmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLCBjb21wX3N0YXR1cywKKwkJCQlsZTE2X3RvX2NwdSgoKHN0cnVjdCBlbHNfc3RzX2VudHJ5XzI0eHgqKXBrdCktPmVycm9yX3N1YmNvZGVfMSksCisJCQkJbGUxNl90b19jcHUoKChzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4Kilwa3QpLT5lcnJvcl9zdWJjb2RlXzIpKSk7CisJCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJCQlmd19zdHNfcHRyID0gKCh1aW50OF90Kilic2dfam9iLT5yZXEtPnNlbnNlKSArIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcGx5KTsKKwkJCW1lbWNweSggZndfc3RzX3B0ciwgZndfc3RhdHVzLCBzaXplb2YoZndfc3RhdHVzKSk7CisJCX0KKwkJREVCVUcyKHFsYTJ4MDBfZHVtcF9idWZmZXIoKHVpbnQ4X3QgKilwa3QsIHNpemVvZigqcGt0KSkpOworCX0KKwllbHNlIHsKKwkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9ICBESURfT0sgPDwgMTY7OworCQlic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwkJYnNnX2pvYi0+cmVwbHlfbGVuID0gMDsKKwl9CisKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsCisJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsCisJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKChzcF9ic2ctPmN0eC50eXBlID09IFNSQl9FTFNfQ01EX0hTVCkgfHwKKwkgICAgKHNwX2JzZy0+Y3R4LnR5cGUgPT0gU1JCX0NUX0NNRCkpCisJCWtmcmVlKHNwLT5mY3BvcnQpOworCWtmcmVlKHNwLT5jdHgpOworCW1lbXBvb2xfZnJlZShzcCwgaGEtPnNyYl9tZW1wb29sKTsKKwlic2dfam9iLT5qb2JfZG9uZShic2dfam9iKTsKK30KKworc3RhdGljIHZvaWQKIHFsYTI0eHhfbG9naW9fZW50cnkoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHN0cnVjdCByZXFfcXVlICpyZXEsCiAgICAgc3RydWN0IGxvZ2lvX2VudHJ5XzI0eHggKmxvZ2lvKQogewpAQCAtMTc0OSw2ICsxODQ2LDEzIEBACiAJCQlxbGEyNHh4X2xvZ2lvX2VudHJ5KHZoYSwgcnNwLT5yZXEsCiAJCQkgICAgKHN0cnVjdCBsb2dpb19lbnRyeV8yNHh4ICopcGt0KTsKIAkJCWJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1RfSU9DQl9UWVBFOgorCQkJcWxhMjR4eF9lbHNfY3RfZW50cnkodmhhLCByc3AtPnJlcSwgcGt0LCBDVF9JT0NCX1RZUEUpOworCQkJY2xlYXJfYml0KE1CWF9JTlRFUlJVUFQsICZ2aGEtPmh3LT5tYnhfY21kX2ZsYWdzKTsKKwkJCWJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRUxTX0lPQ0JfVFlQRToKKwkJCXFsYTI0eHhfZWxzX2N0X2VudHJ5KHZoYSwgcnNwLT5yZXEsIHBrdCwgRUxTX0lPQ0JfVFlQRSk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIFR5cGUgTm90IFN1cHBvcnRlZC4gKi8KIAkJCURFQlVHNChwcmludGsoS0VSTl9XQVJOSU5HCkBAIC0xOTE3LDYgKzIwMjEsNyBAQAogCXN0cnVjdCByc3BfcXVlICpyc3A7CiAJc3RydWN0IGRldmljZV9yZWdfMjR4eCBfX2lvbWVtICpyZWc7CiAJc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcnNwID0gKHN0cnVjdCByc3BfcXVlICopIGRldl9pZDsKIAlpZiAoIXJzcCkgewpAQCAtMTkyNywxNSArMjAzMiwxNSBAQAogCWhhID0gcnNwLT5odzsKIAlyZWcgPSAmaGEtPmlvYmFzZS0+aXNwMjQ7CiAKLQlzcGluX2xvY2tfaXJxKCZoYS0+aGFyZHdhcmVfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKLQl2aGEgPSBxbGEyNXh4X2dldF9ob3N0KHJzcCk7CisJdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKIAlxbGEyNHh4X3Byb2Nlc3NfcmVzcG9uc2VfcXVldWUodmhhLCByc3ApOwogCWlmICghaGEtPmZsYWdzLmRpc2FibGVfbXNpeF9oYW5kc2hha2UpIHsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5oY2NyLCBIQ0NSWF9DTFJfUklTQ19JTlQpOwogCQlSRF9SRUdfRFdPUkRfUkVMQVhFRCgmcmVnLT5oY2NyKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZoYS0+aGFyZHdhcmVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTE5NDYsNiArMjA1MSw3IEBACiAJc3RydWN0IHFsYV9od19kYXRhICpoYTsKIAlzdHJ1Y3QgcnNwX3F1ZSAqcnNwOwogCXN0cnVjdCBkZXZpY2VfcmVnXzI0eHggX19pb21lbSAqcmVnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlyc3AgPSAoc3RydWN0IHJzcF9xdWUgKikgZGV2X2lkOwogCWlmICghcnNwKSB7CkBAIC0xOTU4LDEwICsyMDY0LDEwIEBACiAJLyogQ2xlYXIgdGhlIGludGVycnVwdCwgaWYgZW5hYmxlZCwgZm9yIHRoaXMgcmVzcG9uc2UgcXVldWUgKi8KIAlpZiAocnNwLT5vcHRpb25zICYgfkJJVF82KSB7CiAJCXJlZyA9ICZoYS0+aW9iYXNlLT5pc3AyNDsKLQkJc3Bpbl9sb2NrX2lycSgmaGEtPmhhcmR3YXJlX2xvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5oY2NyLCBIQ0NSWF9DTFJfUklTQ19JTlQpOwogCQlSRF9SRUdfRFdPUkRfUkVMQVhFRCgmcmVnLT5oY2NyKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZoYS0+aGFyZHdhcmVfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJfQogCXF1ZXVlX3dvcmtfb24oKGludCkgKHJzcC0+aWQgLSAxKSwgaGEtPndxLCAmcnNwLT5xX3dvcmspOwogCkBAIC0xOTc5LDYgKzIwODUsNyBAQAogCXVpbnQzMl90CXN0YXQ7CiAJdWludDMyX3QJaGNjcjsKIAl1aW50MTZfdAltYls0XTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcnNwID0gKHN0cnVjdCByc3BfcXVlICopIGRldl9pZDsKIAlpZiAoIXJzcCkgewpAQCAtMTk5MCw3ICsyMDk3LDcgQEAKIAlyZWcgPSAmaGEtPmlvYmFzZS0+aXNwMjQ7CiAJc3RhdHVzID0gMDsKIAotCXNwaW5fbG9ja19pcnEoJmhhLT5oYXJkd2FyZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAl2aGEgPSBwY2lfZ2V0X2RydmRhdGEoaGEtPnBkZXYpOwogCWRvIHsKIAkJc3RhdCA9IFJEX1JFR19EV09SRCgmcmVnLT5ob3N0X3N0YXR1cyk7CkBAIC0yMDM5LDE0ICsyMTQ2LDEzIEBACiAJCX0KIAkJV1JUX1JFR19EV09SRCgmcmVnLT5oY2NyLCBIQ0NSWF9DTFJfUklTQ19JTlQpOwogCX0gd2hpbGUgKDApOwotCXNwaW5fdW5sb2NrX2lycSgmaGEtPmhhcmR3YXJlX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKIAlpZiAodGVzdF9iaXQoTUJYX0lOVFJfV0FJVCwgJmhhLT5tYnhfY21kX2ZsYWdzKSAmJgogCSAgICAoc3RhdHVzICYgTUJYX0lOVEVSUlVQVCkgJiYgaGEtPmZsYWdzLm1ib3hfaW50KSB7CiAJCXNldF9iaXQoTUJYX0lOVEVSUlVQVCwgJmhhLT5tYnhfY21kX2ZsYWdzKTsKIAkJY29tcGxldGUoJmhhLT5tYnhfaW50cl9jb21wKTsKIAl9Ci0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTIyNTIsMTAgKzIzNTgsMTEgQEAKIAogCWlmIChoYS0+ZmxhZ3MubXNpeF9lbmFibGVkKQogCQlxbGEyNHh4X2Rpc2FibGVfbXNpeChoYSk7Ci0JZWxzZSBpZiAoaGEtPmZsYWdzLmludGFfZW5hYmxlZCkgeworCWVsc2UgaWYgKGhhLT5mbGFncy5tc2lfZW5hYmxlZCkgewogCQlmcmVlX2lycShoYS0+cGRldi0+aXJxLCByc3ApOwogCQlwY2lfZGlzYWJsZV9tc2koaGEtPnBkZXYpOwotCX0KKwl9IGVsc2UKKwkJZnJlZV9pcnEoaGEtPnBkZXYtPmlycSwgcnNwKTsKIH0KIAogCkBAIC0yMjc3LDMwICsyMzg0LDMgQEAKIAltc2l4LT5yc3AgPSByc3A7CiAJcmV0dXJuIHJldDsKIH0KLQotc3RydWN0IHNjc2lfcWxhX2hvc3QgKgotcWxhMjV4eF9nZXRfaG9zdChzdHJ1Y3QgcnNwX3F1ZSAqcnNwKQotewotCXNyYl90ICpzcDsKLQlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gcnNwLT5odzsKLQlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhID0gTlVMTDsKLQlzdHJ1Y3Qgc3RzX2VudHJ5XzI0eHggKnBrdDsKLQlzdHJ1Y3QgcmVxX3F1ZSAqcmVxOwotCXVpbnQxNl90IHF1ZTsKLQl1aW50MzJfdCBoYW5kbGU7Ci0KLQlwa3QgPSAoc3RydWN0IHN0c19lbnRyeV8yNHh4ICopIHJzcC0+cmluZ19wdHI7Ci0JcXVlID0gTVNXKHBrdC0+aGFuZGxlKTsKLQloYW5kbGUgPSAodWludDMyX3QpIExTVyhwa3QtPmhhbmRsZSk7Ci0JcmVxID0gaGEtPnJlcV9xX21hcFtxdWVdOwotCWlmIChoYW5kbGUgPCBNQVhfT1VUU1RBTkRJTkdfQ09NTUFORFMpIHsKLQkJc3AgPSByZXEtPm91dHN0YW5kaW5nX2NtZHNbaGFuZGxlXTsKLQkJaWYgKHNwKQotCQkJcmV0dXJuICBzcC0+ZmNwb3J0LT52aGE7Ci0JCWVsc2UKLQkJCWdvdG8gYmFzZV9xdWU7Ci0JfQotYmFzZV9xdWU6Ci0JdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKLQlyZXR1cm4gdmhhOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCmluZGV4IDA1NmU0ZDQuLjZlNTNiZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKQEAgLTM2MzYsNiArMzYzNiwxNTcgQEAKIH0KIAogaW50CitxbGEyeDAwX2xvb3BiYWNrX3Rlc3Qoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHN0cnVjdCBtc2dfZWNob19sYiAqbXJlcSwgdWludDE2X3QgKm1yZXNwKQoreworCWludCBydmFsOworCW1ieF9jbWRfdCBtYzsKKwltYnhfY21kX3QgKm1jcCA9ICZtYzsKKwl1aW50MzJfdCBpdGVyX2NudCA9IDB4MTsKKworCURFQlVHMTEocHJpbnRrKCJzY3NpKCVsZCk6IGVudGVyZWQuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKworCW1lbXNldChtY3AtPm1iLCAwICwgc2l6ZW9mKG1jcC0+bWIpKTsKKwltY3AtPm1iWzBdID0gTUJDX0RJQUdOT1NUSUNfTE9PUF9CQUNLOworCW1jcC0+bWJbMV0gPSBtcmVxLT5vcHRpb25zIHwgQklUXzY7CS8vIEJJVF82IHNwZWNpZmllcyA2NCBiaXQgYWRkcmVzc2luZworCisJLyogdHJhbnNmZXIgY291bnQgKi8KKwltY3AtPm1iWzEwXSA9IExTVyhtcmVxLT50cmFuc2Zlcl9zaXplKTsKKwltY3AtPm1iWzExXSA9IE1TVyhtcmVxLT50cmFuc2Zlcl9zaXplKTsKKworCS8qIHNlbmQgZGF0YSBhZGRyZXNzICovCisJbWNwLT5tYlsxNF0gPSBMU1cobXJlcS0+c2VuZF9kbWEpOworCW1jcC0+bWJbMTVdID0gTVNXKG1yZXEtPnNlbmRfZG1hKTsKKwltY3AtPm1iWzIwXSA9IExTVyhNU0QobXJlcS0+c2VuZF9kbWEpKTsKKwltY3AtPm1iWzIxXSA9IE1TVyhNU0QobXJlcS0+c2VuZF9kbWEpKTsKKworCS8qIHJlY2lldmUgZGF0YSBhZGRyZXNzICovCisJbWNwLT5tYlsxNl0gPSBMU1cobXJlcS0+cmN2X2RtYSk7CisJbWNwLT5tYlsxN10gPSBNU1cobXJlcS0+cmN2X2RtYSk7CisJbWNwLT5tYls2XSA9IExTVyhNU0QobXJlcS0+cmN2X2RtYSkpOworCW1jcC0+bWJbN10gPSBNU1coTVNEKG1yZXEtPnJjdl9kbWEpKTsKKworCS8qIEl0ZXJhdGlvbiBjb3VudCAqLworCW1jcC0+bWJbMThdID0gTFNXKGl0ZXJfY250KTsKKwltY3AtPm1iWzE5XSA9IE1TVyhpdGVyX2NudCk7CisKKwltY3AtPm91dF9tYiA9IE1CWF8yMXxNQlhfMjB8TUJYXzE5fE1CWF8xOHxNQlhfMTd8TUJYXzE2fE1CWF8xNXwKKwkgICAgTUJYXzE0fE1CWF8xM3xNQlhfMTJ8TUJYXzExfE1CWF8xMHxNQlhfN3xNQlhfNnxNQlhfMXxNQlhfMDsKKwlpZiAoSVNfUUxBODFYWCh2aGEtPmh3KSkKKwkJbWNwLT5vdXRfbWIgfD0gTUJYXzI7CisJbWNwLT5pbl9tYiA9IE1CWF8xOXxNQlhfMTh8TUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7CisKKwltY3AtPmJ1Zl9zaXplID0gbXJlcS0+dHJhbnNmZXJfc2l6ZTsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKKwltY3AtPmZsYWdzID0gTUJYX0RNQV9PVVR8TUJYX0RNQV9JTnxJT0NUTF9DTUQ7CisKKwlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOworCisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICIoJWxkKTogZmFpbGVkPSV4IG1iWzBdPTB4JXggIgorCQkJIm1iWzFdPTB4JXggbWJbMl09MHgleCBtYlszXT0weCV4IG1iWzE4XT0weCV4IG1iWzE5XT0weCV4LiBcbiIsIHZoYS0+aG9zdF9ubywgcnZhbCwKKwkJCW1jcC0+bWJbMF0sIG1jcC0+bWJbMV0sIG1jcC0+bWJbMl0sIG1jcC0+bWJbM10sIG1jcC0+bWJbMThdLCBtY3AtPm1iWzE5XSkpOworCX0gZWxzZSB7CisJCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAic2NzaSglbGQpOiBkb25lLlxuIiwgdmhhLT5ob3N0X25vKSk7CisJfQorCisJLyogQ29weSBtYWlsYm94IGluZm9ybWF0aW9uICovCisJbWVtY3B5KCBtcmVzcCwgbWNwLT5tYiwgNjQpOworCW1yZXNwWzNdID0gbWNwLT5tYlsxOF07CisJbXJlc3BbNF0gPSBtY3AtPm1iWzE5XTsKKwlyZXR1cm4gcnZhbDsKK30KKworaW50CitxbGEyeDAwX2VjaG9fdGVzdChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgc3RydWN0IG1zZ19lY2hvX2xiICptcmVxLCB1aW50MTZfdCAqbXJlc3ApCit7CisJaW50IHJ2YWw7CisJbWJ4X2NtZF90IG1jOworCW1ieF9jbWRfdCAqbWNwID0gJm1jOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCisJREVCVUcxMShwcmludGsoInNjc2koJWxkKTogZW50ZXJlZC5cbiIsIHZoYS0+aG9zdF9ubykpOworCisJbWVtc2V0KG1jcC0+bWIsIDAgLCBzaXplb2YobWNwLT5tYikpOworCW1jcC0+bWJbMF0gPSBNQkNfRElBR05PU1RJQ19FQ0hPOworCW1jcC0+bWJbMV0gPSBtcmVxLT5vcHRpb25zIHwgQklUXzY7CS8qIEJJVF82IHNwZWNpZmllcyA2NGJpdCBhZGRyZXNzICovCisJaWYgKElTX1FMQTgxWFgoaGEpKQorCQltY3AtPm1iWzFdIHw9IEJJVF8xNTsKKwltY3AtPm1iWzJdID0gSVNfUUxBODFYWChoYSkgPyB2aGEtPmZjb2VfZmNmX2lkeCA6IDA7CisJbWNwLT5tYlsxNl0gPSBMU1cobXJlcS0+cmN2X2RtYSk7CisJbWNwLT5tYlsxN10gPSBNU1cobXJlcS0+cmN2X2RtYSk7CisJbWNwLT5tYls2XSA9IExTVyhNU0QobXJlcS0+cmN2X2RtYSkpOworCW1jcC0+bWJbN10gPSBNU1coTVNEKG1yZXEtPnJjdl9kbWEpKTsKKworCW1jcC0+bWJbMTBdID0gTFNXKG1yZXEtPnRyYW5zZmVyX3NpemUpOworCisJbWNwLT5tYlsxNF0gPSBMU1cobXJlcS0+c2VuZF9kbWEpOworCW1jcC0+bWJbMTVdID0gTVNXKG1yZXEtPnNlbmRfZG1hKTsKKwltY3AtPm1iWzIwXSA9IExTVyhNU0QobXJlcS0+c2VuZF9kbWEpKTsKKwltY3AtPm1iWzIxXSA9IE1TVyhNU0QobXJlcS0+c2VuZF9kbWEpKTsKKworCW1jcC0+b3V0X21iID0gTUJYXzIxfE1CWF8yMHxNQlhfMTd8TUJYXzE2fE1CWF8xNXwKKwkgICAgTUJYXzE0fE1CWF8xMHxNQlhfN3xNQlhfNnxNQlhfMXxNQlhfMDsKKwlpZiAoSVNfUUxBODFYWChoYSkpCisJCW1jcC0+b3V0X21iIHw9IE1CWF8yOworCisJbWNwLT5pbl9tYiA9IE1CWF8wOworCWlmIChJU19RTEEyNFhYX1RZUEUoaGEpIHx8IElTX1FMQTI1WFgoaGEpIHx8IElTX1FMQTgxWFgoaGEpKQorCQltY3AtPmluX21iIHw9IE1CWF8xOworCWlmIChJU19RTEE4MVhYKGhhKSkKKwkJbWNwLT5pbl9tYiB8PSBNQlhfMzsKKworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOworCW1jcC0+ZmxhZ3MgPSBNQlhfRE1BX09VVHxNQlhfRE1BX0lOfElPQ1RMX0NNRDsKKwltY3AtPmJ1Zl9zaXplID0gbXJlcS0+dHJhbnNmZXJfc2l6ZTsKKworCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CisKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgIiglbGQpOiBmYWlsZWQ9JXggbWJbMF09MHgleCBtYlsxXT0weCV4LlxuIiwKKwkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSkpOworCX0gZWxzZSB7CisJCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAic2NzaSglbGQpOiBkb25lLlxuIiwgdmhhLT5ob3N0X25vKSk7CisJfQorCisJLyogQ29weSBtYWlsYm94IGluZm9ybWF0aW9uICovCisJbWVtY3B5KCBtcmVzcCwgbWNwLT5tYiwgMzIpOworCXJldHVybiBydmFsOworfQoraW50CitxbGE4NHh4X3Jlc2V0X2NoaXAoc2NzaV9xbGFfaG9zdF90ICpoYSwgdWludDE2X3QgZW5hYmxlX2RpYWdub3N0aWMsCisgICAgdWludDE2X3QgKmNtZF9zdGF0dXMpCit7CisJaW50IHJ2YWw7CisJbWJ4X2NtZF90IG1jOworCW1ieF9jbWRfdCAqbWNwID0gJm1jOworCisJREVCVUcxNihwcmludGsoIiVzKCVsZCk6IGVuYWJsZV9kaWFnPSVkIGVudGVyZWQuXG4iLCBfX2Z1bmNfXywKKwkJaGEtPmhvc3Rfbm8sIGVuYWJsZV9kaWFnbm9zdGljKSk7CisKKwltY3AtPm1iWzBdID0gTUJDX0lTUDg0WFhfUkVTRVQ7CisJbWNwLT5tYlsxXSA9IGVuYWJsZV9kaWFnbm9zdGljOworCW1jcC0+b3V0X21iID0gTUJYXzF8TUJYXzA7CisJbWNwLT5pbl9tYiA9IE1CWF8xfE1CWF8wOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOworCW1jcC0+ZmxhZ3MgPSBNQlhfRE1BX09VVHxNQlhfRE1BX0lOfElPQ1RMX0NNRDsKKwlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQoaGEsIG1jcCk7CisKKwkvKiBSZXR1cm4gbWFpbGJveCBzdGF0dXNlcy4gKi8KKwkqY21kX3N0YXR1cyA9IG1jcC0+bWJbMF07CisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpCisJCURFQlVHMTYocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXguXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8sCisJCQlydmFsKSk7CisJZWxzZQorCQlERUJVRzE2KHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOworCisJcmV0dXJuIHJ2YWw7Cit9CisKK2ludAogcWxhMngwMF93cml0ZV9yYW1fd29yZChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgdWludDMyX3QgcmlzY19hZGRyLCB1aW50MzJfdCBkYXRhKQogewogCWludCBydmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCmluZGV4IGI5MDFhYTIuLmZmMTdkZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKQEAgLTYzNiwxMyArNjM2LDE1IEBACiAKIHN0YXRpYyB2b2lkIHFsYV9kb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByc3BfcXVlICpyc3AgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJzcF9xdWUsIHFfd29yayk7CiAJc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYTsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gcnNwLT5odzsKIAotCXNwaW5fbG9ja19pcnEoJnJzcC0+aHctPmhhcmR3YXJlX2xvY2spOwotCXZoYSA9IHFsYTI1eHhfZ2V0X2hvc3QocnNwKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5ody0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCXZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAJcWxhMjR4eF9wcm9jZXNzX3Jlc3BvbnNlX3F1ZXVlKHZoYSwgcnNwKTsKLQlzcGluX3VubG9ja19pcnEoJnJzcC0+aHctPmhhcmR3YXJlX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+aHctPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIH0KIAogLyogY3JlYXRlIHJlc3BvbnNlIHF1ZXVlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IDg1MjllYjEuLjQ2NzIwYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC0xMDcsNiArMTA3LDEyIEBACiAJCSIgMSAtLSBsb2FkIGZpcm13YXJlIGZyb20gZmxhc2guXG4iCiAJCSIgMCAtLSB1c2UgZGVmYXVsdCBzZW1hbnRpY3MuXG4iKTsKIAoraW50IHFsMnhldHNlbmFibGU7Cittb2R1bGVfcGFyYW0ocWwyeGV0c2VuYWJsZSwgaW50LCBTX0lSVUdPfFNfSVJVU1IpOworTU9EVUxFX1BBUk1fREVTQyhxbDJ4ZXRzZW5hYmxlLAorCQkiRW5hYmxlcyBmaXJtd2FyZSBFVFMgYnVyc3QuIgorCQkiRGVmYXVsdCBpcyAwIC0gc2tpcCBFVFMgZW5hYmxlbWVudC4iKTsKKwogLyoKICAqIFNDU0kgaG9zdCB0ZW1wbGF0ZSBlbnRyeSBwb2ludHMKICAqLwpAQCAtNjgyLDQ0ICs2ODgsNiBAQAogCXJldHVybiAocmV0dXJuX3N0YXR1cyk7CiB9CiAKLXZvaWQKLXFsYTJ4MDBfYWJvcnRfZmNwb3J0X2NtZHMoZmNfcG9ydF90ICpmY3BvcnQpCi17Ci0JaW50IGNudDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNyYl90ICpzcDsKLQlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IGZjcG9ydC0+dmhhOwotCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwotCXN0cnVjdCByZXFfcXVlICpyZXE7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKLQlyZXEgPSB2aGEtPnJlcTsKLQlmb3IgKGNudCA9IDE7IGNudCA8IE1BWF9PVVRTVEFORElOR19DT01NQU5EUzsgY250KyspIHsKLQkJc3AgPSByZXEtPm91dHN0YW5kaW5nX2NtZHNbY250XTsKLQkJaWYgKCFzcCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoc3AtPmZjcG9ydCAhPSBmY3BvcnQpCi0JCQljb250aW51ZTsKLQkJaWYgKHNwLT5jdHgpCi0JCQljb250aW51ZTsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwotCQlpZiAoaGEtPmlzcF9vcHMtPmFib3J0X2NvbW1hbmQoc3ApKSB7Ci0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJIkFib3J0IGZhaWxlZCAtLSAgJWx4XG4iLAotCQkJc3AtPmNtZC0+c2VyaWFsX251bWJlcikpOwotCQl9IGVsc2UgewotCQkJaWYgKHFsYTJ4MDBfZWhfd2FpdF9vbl9jb21tYW5kKHNwLT5jbWQpICE9Ci0JCQkJUUxBX1NVQ0NFU1MpCi0JCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCQkiQWJvcnQgZmFpbGVkIHdoaWxlIHdhaXRpbmcgLS0gICVseFxuIiwKLQkJCQlzcC0+Y21kLT5zZXJpYWxfbnVtYmVyKSk7Ci0JCX0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBxbGEyeHh4X2VoX2Fib3J0CiAqCkBAIC0xMDk1LDYgKzEwNjMsMjAgQEAKIAlzdHJ1Y3QgZmNfcG9ydCAqZmNwb3J0OwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCisJaWYgKGhhLT5mbGFncy5lbmFibGVfdGFyZ2V0X3Jlc2V0KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNwb3J0LCAmdmhhLT52cF9mY3BvcnRzLCBsaXN0KSB7CisJCQlpZiAoZmNwb3J0LT5wb3J0X3R5cGUgIT0gRkNUX1RBUkdFVCkKKwkJCQljb250aW51ZTsKKworCQkJcmV0ID0gaGEtPmlzcF9vcHMtPnRhcmdldF9yZXNldChmY3BvcnQsIDAsIDApOworCQkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgeworCQkJCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogYnVzX3Jlc2V0IGZhaWxlZDogIgorCQkJCSAgICAidGFyZ2V0X3Jlc2V0PSVkIGRfaWQ9JXguXG4iLCBfX2Z1bmNfXywKKwkJCQkgICAgdmhhLT5ob3N0X25vLCByZXQsIGZjcG9ydC0+ZF9pZC5iMjQpKTsKKwkJCX0KKwkJfQorCX0KKwogCWlmIChoYS0+ZmxhZ3MuZW5hYmxlX2xpcF9mdWxsX2xvZ2luICYmICFJU19RTEE4MVhYKGhhKSkgewogCQlyZXQgPSBxbGEyeDAwX2Z1bGxfbG9naW5fbGlwKHZoYSk7CiAJCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpIHsKQEAgLTExMTcsMTkgKzEwOTksNiBAQAogCQkJcWxhMngwMF93YWl0X2Zvcl9sb29wX3JlYWR5KHZoYSk7CiAJfQogCi0JaWYgKGhhLT5mbGFncy5lbmFibGVfdGFyZ2V0X3Jlc2V0KSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNwb3J0LCAmdmhhLT52cF9mY3BvcnRzLCBsaXN0KSB7Ci0JCQlpZiAoZmNwb3J0LT5wb3J0X3R5cGUgIT0gRkNUX1RBUkdFVCkKLQkJCQljb250aW51ZTsKLQotCQkJcmV0ID0gaGEtPmlzcF9vcHMtPnRhcmdldF9yZXNldChmY3BvcnQsIDAsIDApOwotCQkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgewotCQkJCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogYnVzX3Jlc2V0IGZhaWxlZDogIgotCQkJCSAgICAidGFyZ2V0X3Jlc2V0PSVkIGRfaWQ9JXguXG4iLCBfX2Z1bmNfXywKLQkJCQkgICAgdmhhLT5ob3N0X25vLCByZXQsIGZjcG9ydC0+ZF9pZC5iMjQpKTsKLQkJCX0KLQkJfQotCX0KIAkvKiBJc3N1ZSBtYXJrZXIgY29tbWFuZCBvbmx5IHdoZW4gd2UgYXJlIGdvaW5nIHRvIHN0YXJ0IHRoZSBJL08gKi8KIAl2aGEtPm1hcmtlcl9uZWVkZWQgPSAxOwogCkBAIC0xMTYwLDggKzExMjksMTkgQEAKIAkJCQkJcWxhMngwMF9zcF9jb21wbChoYSwgc3ApOwogCQkJCX0gZWxzZSB7CiAJCQkJCWN0eCA9IHNwLT5jdHg7Ci0JCQkJCWRlbF90aW1lcl9zeW5jKCZjdHgtPnRpbWVyKTsKLQkJCQkJY3R4LT5mcmVlKHNwKTsKKwkJCQkJaWYgKGN0eC0+dHlwZSA9PSBTUkJfTE9HSU5fQ01EIHx8IGN0eC0+dHlwZSA9PSBTUkJfTE9HT1VUX0NNRCkgeworCQkJCQkJZGVsX3RpbWVyX3N5bmMoJmN0eC0+dGltZXIpOworCQkJCQkJY3R4LT5mcmVlKHNwKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXN0cnVjdCBzcmJfYnNnKiBzcF9ic2cgPSAoc3RydWN0IHNyYl9ic2cqKXNwLT5jdHg7CisJCQkJCQlpZiAoc3BfYnNnLT5ic2dfam9iLT5yZXF1ZXN0LT5tc2djb2RlID09IEZDX0JTR19IU1RfQ1QpCisJCQkJCQkJa2ZyZWUoc3AtPmZjcG9ydCk7CisJCQkJCQlzcF9ic2ctPmJzZ19qb2ItPnJlcS0+ZXJyb3JzID0gMDsKKwkJCQkJCXNwX2JzZy0+YnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IHJlczsKKwkJCQkJCXNwX2JzZy0+YnNnX2pvYi0+am9iX2RvbmUoc3BfYnNnLT5ic2dfam9iKTsKKwkJCQkJCWtmcmVlKHNwLT5jdHgpOworCQkJCQkJbWVtcG9vbF9mcmVlKHNwLCBoYS0+c3JiX21lbXBvb2wpOworCQkJCQl9CiAJCQkJfQogCQkJfQogCQl9CkBAIC0xMjU4LDcgKzEyMzgsNyBAQAogCQlxbGEyeDAwX2FkanVzdF9zZGV2X3FkZXB0aF91cChzZGV2LCBxZGVwdGgpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gRU9QTk9UU1VQUDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAogCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKQEAgLTE4MTgsNyArMTc5OCw2IEBACiAJLyogU2V0IEVFSCByZXNldCB0eXBlIHRvIGZ1bmRhbWVudGFsIGlmIHJlcXVpcmVkIGJ5IGhiYSAqLwogCWlmICggSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkgfHwgSVNfUUxBODFYWChoYSkpIHsKIAkJcGRldi0+bmVlZHNfZnJlc2V0ID0gMTsKLQkJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJfQogCiAJLyogQ29uZmlndXJlIFBDSSBJL08gc3BhY2UgKi8KQEAgLTE5NzAsMTEgKzE5NDksMTUgQEAKIAlob3N0LT5tYXhfY2hhbm5lbCA9IE1BWF9CVVNFUyAtIDE7CiAJaG9zdC0+bWF4X2x1biA9IE1BWF9MVU5TOwogCWhvc3QtPnRyYW5zcG9ydHQgPSBxbGEyeHh4X3RyYW5zcG9ydF90ZW1wbGF0ZTsKKwlzaHQtPnZlbmRvcl9pZCA9IChTQ1NJX05MX1ZJRF9UWVBFX1BDSSB8IFBDSV9WRU5ET1JfSURfUUxPR0lDKTsKIAogCS8qIFNldCB1cCB0aGUgaXJxcyAqLwogCXJldCA9IHFsYTJ4MDBfcmVxdWVzdF9pcnFzKGhhLCByc3ApOwogCWlmIChyZXQpCiAJCWdvdG8gcHJvYmVfaW5pdF9mYWlsZWQ7CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwogCS8qIEFsbG9jIGFycmF5cyBvZiByZXF1ZXN0IGFuZCByZXNwb25zZSByaW5nIHB0cnMgKi8KIHF1ZV9pbml0OgogCWlmICghcWxhMngwMF9hbGxvY19xdWV1ZXMoaGEpKSB7CkBAIC0yMTc2LDYgKzIxNTksOCBAQAogCWtmcmVlKGhhKTsKIAloYSA9IE5VTEw7CiAKKwlwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKKwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiB9CkBAIC0zMzEwLDYgKzMyOTUsNyBAQAogCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfQ0FOX1JFQ09WRVI7CiAJY2FzZSBwY2lfY2hhbm5lbF9pb19mcm96ZW46CiAJCWhhLT5mbGFncy5lZWhfYnVzeSA9IDE7CisJCXFsYTJ4MDBfZnJlZV9pcnFzKHZoYSk7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7CiAJY2FzZSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmU6CkBAIC0zMzYzLDEwICszMzQ5LDI0IEBACiAJcGNpX2Vyc19yZXN1bHRfdCByZXQgPSBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCXNjc2lfcWxhX2hvc3RfdCAqYmFzZV92aGEgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IGJhc2VfdmhhLT5odzsKLQlpbnQgcmM7CisJc3RydWN0IHJzcF9xdWUgKnJzcDsKKwlpbnQgcmMsIHJldHJpZXMgPSAxMDsKIAogCURFQlVHMTcocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAic2xvdF9yZXNldFxuIikpOwogCisJLyogV29ya2Fyb3VuZDogcWxhMnh4eCBkcml2ZXIgd2hpY2ggYWNjZXNzIGhhcmR3YXJlIGVhcmxpZXIKKwkgKiBuZWVkcyBlcnJvciBzdGF0ZSB0byBiZSBwY2lfY2hhbm5lbF9pb19vbmxpbmUuCisJICogT3RoZXJ3aXNlIG1haWxib3ggY29tbWFuZCB0aW1lc291dC4KKwkgKi8KKwlwZGV2LT5lcnJvcl9zdGF0ZSA9IHBjaV9jaGFubmVsX2lvX25vcm1hbDsKKworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJLyogcGNpX3Jlc3RvcmVfc3RhdGUoKSBjbGVhcnMgdGhlIHNhdmVkX3N0YXRlIGZsYWcgb2YgdGhlIGRldmljZQorCSAqIHNhdmUgcmVzdG9yZWQgc3RhdGUgd2hpY2ggcmVzZXRzIHNhdmVkX3N0YXRlIGZsYWcKKwkgKi8KKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwogCWlmIChoYS0+bWVtX29ubHkpCiAJCXJjID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCWVsc2UKQEAgLTMzNzgsMjcgKzMzNzgsMjMgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlyc3AgPSBoYS0+cnNwX3FfbWFwWzBdOworCWlmIChxbGEyeDAwX3JlcXVlc3RfaXJxcyhoYSwgcnNwKSkKKwkJcmV0dXJuIHJldDsKKwogCWlmIChoYS0+aXNwX29wcy0+cGNpX2NvbmZpZyhiYXNlX3ZoYSkpCiAJCXJldHVybiByZXQ7CiAKLSNpZmRlZiBRTF9ERUJVR19MRVZFTF8xNwotCXsKLQkJdWludDhfdCBiOwotCQl1aW50MzJfdCBpOworCXdoaWxlIChoYS0+ZmxhZ3MubWJveF9idXN5ICYmIHJldHJpZXMtLSkKKwkJbXNsZWVwKDEwMDApOwogCi0JCXByaW50aygic2xvdF9yZXNldF8xOiAiKTsKLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShoYS0+cGRldiwgaSwgJmIpOwotCQkJcHJpbnRrKCIlcyUwMngiLCAoaSUxNikgPyAiICIgOiAiXG4iLCBiKTsKLQkJfQotCQlwcmludGsoIlxuIik7Ci0JfQotI2VuZGlmCiAJc2V0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmYmFzZV92aGEtPmRwY19mbGFncyk7CiAJaWYgKHFsYTJ4MDBfYWJvcnRfaXNwKGJhc2VfdmhhKSA9PSBRTEFfU1VDQ0VTUykKIAkJcmV0ID0gIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKIAljbGVhcl9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJmJhc2VfdmhhLT5kcGNfZmxhZ3MpOwogCisJcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMocGRldik7CisKIAlERUJVRzE3KHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKIAkgICAgInNsb3RfcmVzZXQtcmV0dXJuOnJldD0leFxuIiwgcmV0KSk7CiAKQEAgLTM0MjIsOCArMzQxOCw2IEBACiAJfQogCiAJaGEtPmZsYWdzLmVlaF9idXN5ID0gMDsKLQotCXBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHBkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBxbGEyeHh4X2Vycl9oYW5kbGVyID0gewpAQCAtMzUzNiw0ICszNTMwLDMgQEAKIE1PRFVMRV9GSVJNV0FSRShGV19GSUxFX0lTUDIzMjIpOwogTU9EVUxFX0ZJUk1XQVJFKEZXX0ZJTEVfSVNQMjRYWCk7CiBNT0RVTEVfRklSTVdBUkUoRldfRklMRV9JU1AyNVhYKTsKLU1PRFVMRV9GSVJNV0FSRShGV19GSUxFX0lTUDgxWFgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKaW5kZXggZWQzNjI3OS4uOGQyZmMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCkBAIC03LDkgKzcsOSBAQAogLyoKICAqIERyaXZlciB2ZXJzaW9uCiAgKi8KLSNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDMuMDEtazEwIgorI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMy4wMi1rMSIKIAogI2RlZmluZSBRTEFfRFJJVkVSX01BSk9SX1ZFUgk4CiAjZGVmaW5lIFFMQV9EUklWRVJfTUlOT1JfVkVSCTMKLSNkZWZpbmUgUUxBX0RSSVZFUl9QQVRDSF9WRVIJMQotI2RlZmluZSBRTEFfRFJJVkVSX0JFVEFfVkVSCTAKKyNkZWZpbmUgUUxBX0RSSVZFUl9QQVRDSF9WRVIJMgorI2RlZmluZSBRTEFfRFJJVkVSX0JFVEFfVkVSCTEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jCmluZGV4IGFmOGMzMjMuLjkyMzI5YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2luaXQuYwpAQCAtODQ0LDEwICs4NDQsMTAgQEAKIAlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogR2V0IEVFUHJvbSBwYXJhbWV0ZXJzIFxuIiwgaGEtPmhvc3Rfbm8sCiAJCSAgICAgIF9fZnVuY19fKSk7CiAJaWYgKHFsNHh4eF9sb2NrX2ZsYXNoKGhhKSAhPSBRTEFfU1VDQ0VTUykKLQkJcmV0dXJuIChRTEFfRVJST1IpOworCQlyZXR1cm4gUUxBX0VSUk9SOwogCWlmIChxbDR4eHhfbG9ja19udnJhbShoYSkgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJcWw0eHh4X3VubG9ja19mbGFzaChoYSk7Ci0JCXJldHVybiAoUUxBX0VSUk9SKTsKKwkJcmV0dXJuIFFMQV9FUlJPUjsKIAl9CiAKIAkvKiBHZXQgRUVQUm9tIFBhcmFtZXRlcnMgZnJvbSBOVlJBTSBhbmQgdmFsaWRhdGUgKi8KQEAgLTg1OCwyMCArODU4LDE4IEBACiAJCQlyZF9udnJhbV93b3JkKGhhLCBlZXByb21fZXh0X2h3X2NvbmZfb2Zmc2V0KGhhKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKLQkJLyoKLQkJICogUUxvZ2ljIGFkYXB0ZXJzIHNob3VsZCBhbHdheXMgaGF2ZSBhIHZhbGlkIE5WUkFNLgotCQkgKiBJZiBub3QgdmFsaWQsIGRvIG5vdCBsb2FkLgotCQkgKi8KIAkJZGV2X3dhcm4oJmhhLT5wZGV2LT5kZXYsCiAJCQkgICAic2NzaSVsZDogJXM6IEVFUHJvbSBjaGVja3N1bSBpbnZhbGlkLiAgIgogCQkJICAgIlBsZWFzZSB1cGRhdGUgeW91ciBFRVBST01cbiIsIGhhLT5ob3N0X25vLAogCQkJICAgX19mdW5jX18pOwogCi0JCS8qIHNldCBkZWZhdWx0cyAqLworCQkvKiBBdHRlbXB0IHRvIHNldCBkZWZhdWx0cyAqLwogCQlpZiAoaXNfcWxhNDAxMChoYSkpCiAJCQlleHRId0NvbmZpZy5Bc3VpbnQzMl90ID0gMHgxOTEyOwogCQllbHNlIGlmIChpc19xbGE0MDIyKGhhKSB8IGlzX3FsYTQwMzIoaGEpKQogCQkJZXh0SHdDb25maWcuQXN1aW50MzJfdCA9IDB4MDAyMzsKKwkJZWxzZQorCQkJcmV0dXJuIFFMQV9FUlJPUjsKIAl9CiAJREVCVUcocHJpbnRrKCJzY3NpJWxkOiAlczogU2V0dGluZyBleHRId0NvbmZpZyB0byAweEZGRkYlMDR4XG4iLAogCQkgICAgIGhhLT5ob3N0X25vLCBfX2Z1bmNfXywgZXh0SHdDb25maWcuQXN1aW50MzJfdCkpOwpAQCAtODg0LDcgKzg4Miw3IEBACiAJcWw0eHh4X3VubG9ja19udnJhbShoYSk7CiAJcWw0eHh4X3VubG9ja19mbGFzaChoYSk7CiAKLQlyZXR1cm4gKFFMQV9TVUNDRVNTKTsKKwlyZXR1cm4gUUxBX1NVQ0NFU1M7CiB9CiAKIHN0YXRpYyB2b2lkIHFsYTR4MDBfcGNpX2NvbmZpZyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcmFpZF9jbGFzcy5jIGIvZHJpdmVycy9zY3NpL3JhaWRfY2xhc3MuYwppbmRleCA4ZTVjMTY5Li5iZDg4MzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcmFpZF9jbGFzcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9yYWlkX2NsYXNzLmMKQEAgLTE0OSw2ICsxNDksNyBAQAogCXsgUkFJRF9MRVZFTF8wLCAicmFpZDAiIH0sCiAJeyBSQUlEX0xFVkVMXzEsICJyYWlkMSIgfSwKIAl7IFJBSURfTEVWRUxfMTAsICJyYWlkMTAiIH0sCisJeyBSQUlEX0xFVkVMXzFFLCAicmFpZDFlIiB9LAogCXsgUkFJRF9MRVZFTF8zLCAicmFpZDMiIH0sCiAJeyBSQUlEX0xFVkVMXzQsICJyYWlkNCIgfSwKIAl7IFJBSURfTEVWRUxfNSwgInJhaWQ1IiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKaW5kZXggYTYwZGE1NS4uMWMwOGY2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCkBAIC0xMDE4LDYgKzEwMTgsOCBAQAogICogc2NzaV9nZXRfdnBkX3BhZ2UgLSBHZXQgVml0YWwgUHJvZHVjdCBEYXRhIGZyb20gYSBTQ1NJIGRldmljZQogICogQHNkZXY6IFRoZSBkZXZpY2UgdG8gYXNrCiAgKiBAcGFnZTogV2hpY2ggVml0YWwgUHJvZHVjdCBEYXRhIHRvIHJldHVybgorICogQGJ1Zjogd2hlcmUgdG8gc3RvcmUgdGhlIFZQRAorICogQGJ1Zl9sZW46IG51bWJlciBvZiBieXRlcyBpbiB0aGUgVlBEIGJ1ZmZlciBhcmVhCiAgKgogICogU0NTSSBkZXZpY2VzIG1heSBvcHRpb25hbGx5IHN1cHBseSBWaXRhbCBQcm9kdWN0IERhdGEuICBFYWNoICdwYWdlJwogICogb2YgVlBEIGlzIGRlZmluZWQgaW4gdGhlIGFwcHJvcHJpYXRlIFNDU0kgZG9jdW1lbnQgKGVnIFNQQywgU0JDKS4KQEAgLTEwMjYsNTUgKzEwMjgsMzkgQEAKICAqIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGtmcmVlKCkgb24gdGhpcyBwb2ludGVyIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCiAgKiBuZWVkZWQuICBJZiB3ZSBjYW5ub3QgcmV0cmlldmUgdGhlIFZQRCBwYWdlIHRoaXMgcm91dGluZSByZXR1cm5zICVOVUxMLgogICovCi11bnNpZ25lZCBjaGFyICpzY3NpX2dldF92cGRfcGFnZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHU4IHBhZ2UpCitpbnQgc2NzaV9nZXRfdnBkX3BhZ2Uoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB1OCBwYWdlLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgIGludCBidWZfbGVuKQogewogCWludCBpLCByZXN1bHQ7Ci0JdW5zaWduZWQgaW50IGxlbjsKLQljb25zdCB1bnNpZ25lZCBpbnQgaW5pdF92cGRfbGVuID0gMjU1OwotCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGttYWxsb2MoaW5pdF92cGRfbGVuLCBHRlBfS0VSTkVMKTsKLQotCWlmICghYnVmKQotCQlyZXR1cm4gTlVMTDsKIAogCS8qIEFzayBmb3IgYWxsIHRoZSBwYWdlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UgKi8KLQlyZXN1bHQgPSBzY3NpX3ZwZF9pbnF1aXJ5KHNkZXYsIGJ1ZiwgMCwgaW5pdF92cGRfbGVuKTsKKwlyZXN1bHQgPSBzY3NpX3ZwZF9pbnF1aXJ5KHNkZXYsIGJ1ZiwgMCwgYnVmX2xlbik7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBmYWlsOwogCiAJLyogSWYgdGhlIHVzZXIgYWN0dWFsbHkgd2FudGVkIHRoaXMgcGFnZSwgd2UgY2FuIHNraXAgdGhlIHJlc3QgKi8KIAlpZiAocGFnZSA9PSAwKQotCQlyZXR1cm4gYnVmOworCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvciAoaSA9IDA7IGkgPCBidWZbM107IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbWluKChpbnQpYnVmWzNdLCBidWZfbGVuIC0gNCk7IGkrKykKIAkJaWYgKGJ1ZltpICsgNF0gPT0gcGFnZSkKIAkJCWdvdG8gZm91bmQ7CisKKwlpZiAoaSA8IGJ1ZlszXSAmJiBpID4gYnVmX2xlbikKKwkJLyogcmFuIG9mZiB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIGdpdmUgdXMgYmVuZWZpdCBvZiBkb3VidCAqLworCQlnb3RvIGZvdW5kOwogCS8qIFRoZSBkZXZpY2UgY2xhaW1zIGl0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgcmVxdWVzdGVkIHBhZ2UgKi8KIAlnb3RvIGZhaWw7CiAKICBmb3VuZDoKLQlyZXN1bHQgPSBzY3NpX3ZwZF9pbnF1aXJ5KHNkZXYsIGJ1ZiwgcGFnZSwgMjU1KTsKKwlyZXN1bHQgPSBzY3NpX3ZwZF9pbnF1aXJ5KHNkZXYsIGJ1ZiwgcGFnZSwgYnVmX2xlbik7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBmYWlsOwogCi0JLyoKLQkgKiBTb21lIHBhZ2VzIGFyZSBsb25nZXIgdGhhbiAyNTUgYnl0ZXMuICBUaGUgYWN0dWFsIGxlbmd0aCBvZgotCSAqIHRoZSBwYWdlIGlzIHJldHVybmVkIGluIHRoZSBoZWFkZXIuCi0JICovCi0JbGVuID0gKChidWZbMl0gPDwgOCkgfCBidWZbM10pICsgNDsKLQlpZiAobGVuIDw9IGluaXRfdnBkX2xlbikKLQkJcmV0dXJuIGJ1ZjsKLQotCWtmcmVlKGJ1Zik7Ci0JYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCXJlc3VsdCA9IHNjc2lfdnBkX2lucXVpcnkoc2RldiwgYnVmLCBwYWdlLCBsZW4pOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gZmFpbDsKLQotCXJldHVybiBidWY7CisJcmV0dXJuIDA7CiAKICBmYWlsOgotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzY3NpX2dldF92cGRfcGFnZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKaW5kZXggYzY2NDI0Mi4uMTY0NmZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKQEAgLTc3Myw4ICs3NzMsMTQgQEAKIAkgKiB3ZSBhbHJlYWR5IHRvb2sgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBpbnRvIHJxLT5lcnJvcnMgd2hpY2gKIAkgKiBpcyB3aGF0IGdldHMgcmV0dXJuZWQgdG8gdGhlIHVzZXIKIAkgKi8KLQlpZiAoc2Vuc2VfdmFsaWQgJiYgc3NoZHIuc2Vuc2Vfa2V5ID09IFJFQ09WRVJFRF9FUlJPUikgewotCQlpZiAoIShyZXEtPmNtZF9mbGFncyAmIFJFUV9RVUlFVCkpCisJaWYgKHNlbnNlX3ZhbGlkICYmIChzc2hkci5zZW5zZV9rZXkgPT0gUkVDT1ZFUkVEX0VSUk9SKSkgeworCQkvKiBpZiBBVEEgUEFTUy1USFJPVUdIIElORk9STUFUSU9OIEFWQUlMQUJMRSBza2lwCisJCSAqIHByaW50IHNpbmNlIGNhbGxlciB3YW50cyBBVEEgcmVnaXN0ZXJzLiBPbmx5IG9jY3VycyBvbgorCQkgKiBTQ1NJIEFUQSBQQVNTX1RIUk9VR0ggY29tbWFuZHMgd2hlbiBDS19DT05EPTEKKwkJICovCisJCWlmICgoc3NoZHIuYXNjID09IDB4MCkgJiYgKHNzaGRyLmFzY3EgPT0gMHgxZCkpCisJCQk7CisJCWVsc2UgaWYgKCEocmVxLT5jbWRfZmxhZ3MgJiBSRVFfUVVJRVQpKQogCQkJc2NzaV9wcmludF9zZW5zZSgiIiwgY21kKTsKIAkJcmVzdWx0ID0gMDsKIAkJLyogQkxPQ0tfUEMgbWF5IGhhdmUgc2V0IGVycm9yICovCkBAIC0xNjI0LDEwICsxNjMwLDEwIEBACiAJLyoKIAkgKiB0aGlzIGxpbWl0IGlzIGltcG9zZWQgYnkgaGFyZHdhcmUgcmVzdHJpY3Rpb25zCiAJICovCi0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxLCBzaG9zdC0+c2dfdGFibGVzaXplKTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSwgU0NTSV9NQVhfU0dfQ0hBSU5fU0VHTUVOVFMpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocSwgbWluX3QodW5zaWduZWQgc2hvcnQsIHNob3N0LT5zZ190YWJsZXNpemUsCisJCQkJCVNDU0lfTUFYX1NHX0NIQUlOX1NFR01FTlRTKSk7CiAKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocSwgc2hvc3QtPm1heF9zZWN0b3JzKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocSwgc2hvc3QtPm1heF9zZWN0b3JzKTsKIAlibGtfcXVldWVfYm91bmNlX2xpbWl0KHEsIHNjc2lfY2FsY3VsYXRlX2JvdW5jZV9saW1pdChzaG9zdCkpOwogCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KHEsIHNob3N0LT5kbWFfYm91bmRhcnkpOwogCWRtYV9zZXRfc2VnX2JvdW5kYXJ5KGRldiwgc2hvc3QtPmRtYV9ib3VuZGFyeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zYXNfaW50ZXJuYWwuaCBiL2RyaXZlcnMvc2NzaS9zY3NpX3Nhc19pbnRlcm5hbC5oCmluZGV4IDk5OGNiNWIuLjYyNjZhNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3Nhc19pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3Nhc19pbnRlcm5hbC5oCkBAIC01LDcgKzUsNyBAQAogI2RlZmluZSBTQVNfUEhZX0FUVFJTCQkxNwogI2RlZmluZSBTQVNfUE9SVF9BVFRSUwkJMQogI2RlZmluZSBTQVNfUlBPUlRfQVRUUlMJCTcKLSNkZWZpbmUgU0FTX0VORF9ERVZfQVRUUlMJMworI2RlZmluZSBTQVNfRU5EX0RFVl9BVFRSUwk1CiAjZGVmaW5lIFNBU19FWFBBTkRFUl9BVFRSUwk3CiAKIHN0cnVjdCBzYXNfaW50ZXJuYWwgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IDAxMmY3M2EuLjRiYzhiNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTg3OSw3ICs4NzksNyBAQAogCSAqIGJyb2tlbiBSQTR4MDAgQ29tcGFxIERpc2sgQXJyYXkKIAkgKi8KIAlpZiAoKmJmbGFncyAmIEJMSVNUX01BWF81MTIpCi0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCA1MTIpOworCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgNTEyKTsKIAogCS8qCiAJICogU29tZSBkZXZpY2VzIG1heSBub3Qgd2FudCB0byBoYXZlIGEgc3RhcnQgY29tbWFuZCBhdXRvbWF0aWNhbGx5CkBAIC0xMzM5LDggKzEzMzksMTAgQEAKIAkJc2RldiA9IHNjc2lfYWxsb2Nfc2RldihzdGFyZ2V0LCAwLCBOVUxMKTsKIAkJaWYgKCFzZGV2KQogCQkJcmV0dXJuIDA7Ci0JCWlmIChzY3NpX2RldmljZV9nZXQoc2RldikpCisJCWlmIChzY3NpX2RldmljZV9nZXQoc2RldikpIHsKKwkJCV9fc2NzaV9yZW1vdmVfZGV2aWNlKHNkZXYpOwogCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlzcHJpbnRmKGRldm5hbWUsICJob3N0ICVkIGNoYW5uZWwgJWQgaWQgJWQiLApAQCAtMTkwNywxMCArMTkwOSw5IEBACiAJCWdvdG8gb3V0OwogCiAJc2RldiA9IHNjc2lfYWxsb2Nfc2RldihzdGFyZ2V0LCAwLCBOVUxMKTsKLQlpZiAoc2RldikgewotCQlzZGV2LT5zZGV2X2dlbmRldi5wYXJlbnQgPSBnZXRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOworCWlmIChzZGV2KQogCQlzZGV2LT5ib3JrZW4gPSAwOwotCX0gZWxzZQorCWVsc2UKIAkJc2NzaV90YXJnZXRfcmVhcChzdGFyZ2V0KTsKIAlwdXRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOwogIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCmluZGV4IDVhMDY1MDUuLjE5ZWM5ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwpAQCAtODQ3LDYgKzg0Nyw4IEBACiAJaWYgKHN0YXJnZXQtPnN0YXRlICE9IFNUQVJHRVRfQ1JFQVRFRCkKIAkJcmV0dXJuIDA7CiAKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnN0YXJnZXQtPmRldik7CisKIAllcnJvciA9IGRldmljZV9hZGQoJnN0YXJnZXQtPmRldik7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJnN0YXJnZXQtPmRldiwgInRhcmdldCBkZXZpY2VfYWRkIGZhaWxlZCwgZXJyb3IgJWRcbiIsIGVycm9yKTsKQEAgLTg3OCw3ICs4ODAsOCBAQAogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpycSA9IHNkZXYtPnJlcXVlc3RfcXVldWU7CiAJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gc2Rldi0+c2Rldl90YXJnZXQ7CiAKLQlpZiAoKGVycm9yID0gc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfUlVOTklORykpICE9IDApCisJZXJyb3IgPSBzY3NpX2RldmljZV9zZXRfc3RhdGUoc2RldiwgU0RFVl9SVU5OSU5HKTsKKwlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gc2NzaV90YXJnZXRfYWRkKHN0YXJnZXQpOwpAQCAtODg2LDE2ICs4ODksMTggQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJdHJhbnNwb3J0X2NvbmZpZ3VyZV9kZXZpY2UoJnN0YXJnZXQtPmRldik7CisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImVycm9yIDFcbiIpOwotCQlnb3RvIG91dF9yZW1vdmU7CisJCXJldHVybiBlcnJvcjsKIAl9CisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZzZGV2LT5zZGV2X2Rldik7CiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzZGV2LT5zZGV2X2Rldik7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImVycm9yIDJcbiIpOwogCQlkZXZpY2VfZGVsKCZzZGV2LT5zZGV2X2dlbmRldik7Ci0JCWdvdG8gb3V0X3JlbW92ZTsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAl0cmFuc3BvcnRfYWRkX2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCXNkZXYtPmlzX3Zpc2libGUgPSAxOwpAQCAtOTEwLDE0ICs5MTUsMTQgQEAKIAllbHNlCiAJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzZGV2LT5zZGV2X2dlbmRldiwgJmRldl9hdHRyX3F1ZXVlX2RlcHRoKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3JlbW92ZTsKKwkJcmV0dXJuIGVycm9yOwogCiAJaWYgKHNkZXYtPmhvc3QtPmhvc3R0LT5jaGFuZ2VfcXVldWVfdHlwZSkKIAkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LCAmc2Rldl9hdHRyX3F1ZXVlX3R5cGVfcncpOwogCWVsc2UKIAkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LCAmZGV2X2F0dHJfcXVldWVfdHlwZSk7CiAJaWYgKGVycm9yKQotCQlnb3RvIG91dF9yZW1vdmU7CisJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gYnNnX3JlZ2lzdGVyX3F1ZXVlKHJxLCAmc2Rldi0+c2Rldl9nZW5kZXYsIE5VTEwsIE5VTEwpOwogCkBAIC05MzMsMTYgKzkzOCwxMSBAQAogCQkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LAogCQkJCQlzZGV2LT5ob3N0LT5ob3N0dC0+c2Rldl9hdHRyc1tpXSk7CiAJCQlpZiAoZXJyb3IpCi0JCQkJZ290byBvdXRfcmVtb3ZlOworCQkJCXJldHVybiBlcnJvcjsKIAkJfQogCX0KIAotCXJldHVybiAwOwotCi0gb3V0X3JlbW92ZToKLQlfX3Njc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKIAlyZXR1cm4gZXJyb3I7Ci0KIH0KIAogdm9pZCBfX3Njc2lfcmVtb3ZlX2RldmljZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IDY1M2YyMmEuLjc5NjYwZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC00NzUsNyArNDc1LDggQEAKIAkJICJNYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIHRoYXQgdGhlIEZDIHRyYW5zcG9ydCBzaG91bGQiCiAJCSAiIGluc3VsYXRlIHRoZSBsb3NzIG9mIGEgcmVtb3RlIHBvcnQuIE9uY2UgdGhpcyB2YWx1ZSBpcyIKIAkJICIgZXhjZWVkZWQsIHRoZSBzY3NpIHRhcmdldCBpcyByZW1vdmVkLiBWYWx1ZSBzaG91bGQgYmUiCi0JCSAiIGJldHdlZW4gMSBhbmQgU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQuIik7CisJCSAiIGJldHdlZW4gMSBhbmQgU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQgaWYiCisJCSAiIGZhc3RfaW9fZmFpbF90bW8gaXMgbm90IHNldC4iKTsKIAogLyoKICAqIE5ldGxpbmsgSW5mcmFzdHJ1Y3R1cmUKQEAgLTg0Miw5ICs4NDMsMTcgQEAKIAkgICAgKHJwb3J0LT5wb3J0X3N0YXRlID09IEZDX1BPUlRTVEFURV9OT1RQUkVTRU5UKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsICZjcCwgMCk7Ci0JaWYgKCgqY3AgJiYgKCpjcCAhPSAnXG4nKSkgfHwKLQkgICAgKHZhbCA8IDApIHx8ICh2YWwgPiBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVCkpCisJaWYgKCgqY3AgJiYgKCpjcCAhPSAnXG4nKSkgfHwgKHZhbCA8IDApKQogCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogSWYgZmFzdF9pb19mYWlsIGlzIG9mZiB3ZSBoYXZlIHRvIGNhcAorCSAqIGRldl9sb3NzX3RtbyBhdCBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVAorCSAqLworCWlmIChycG9ydC0+ZmFzdF9pb19mYWlsX3RtbyA9PSAtMSAmJgorCSAgICB2YWwgPiBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpLT5mLT5zZXRfcnBvcnRfZGV2X2xvc3NfdG1vKHJwb3J0LCB2YWwpOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTkyNSw5ICs5MzQsMTYgQEAKIAkJcnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gPSAtMTsKIAllbHNlIHsKIAkJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmY3AsIDApOwotCQlpZiAoKCpjcCAmJiAoKmNwICE9ICdcbicpKSB8fAotCQkgICAgKHZhbCA8IDApIHx8ICh2YWwgPj0gcnBvcnQtPmRldl9sb3NzX3RtbykpCisJCWlmICgoKmNwICYmICgqY3AgIT0gJ1xuJykpIHx8ICh2YWwgPCAwKSkKIAkJCXJldHVybiAtRUlOVkFMOworCQkvKgorCQkgKiBDYXAgZmFzdF9pb19mYWlsIGJ5IGRldl9sb3NzX3RtbyBvcgorCQkgKiBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVC4KKwkJICovCisJCWlmICgodmFsID49IHJwb3J0LT5kZXZfbG9zc190bW8pIHx8CisJCSAgICAodmFsID4gU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKIAkJcnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gPSB2YWw7CiAJfQogCXJldHVybiBjb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYwppbmRleCBmMjdlNTJkLi45MjdlOTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCkBAIC0xNTUsNiArMTU1LDE3IEBACiBzYXNfYml0ZmllbGRfbmFtZV9zZWFyY2gobGlua3NwZWVkLCBzYXNfbGlua3NwZWVkX25hbWVzKQogc2FzX2JpdGZpZWxkX25hbWVfc2V0KGxpbmtzcGVlZCwgc2FzX2xpbmtzcGVlZF9uYW1lcykKIAorc3RhdGljIHN0cnVjdCBzYXNfZW5kX2RldmljZSAqc2FzX3NkZXZfdG9fcmRldihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHNhc19ycGh5ICpycGh5ID0gdGFyZ2V0X3RvX3JwaHkoc2Rldi0+c2Rldl90YXJnZXQpOworCXN0cnVjdCBzYXNfZW5kX2RldmljZSAqcmRldjsKKworCUJVR19PTihycGh5LT5pZGVudGlmeS5kZXZpY2VfdHlwZSAhPSBTQVNfRU5EX0RFVklDRSk7CisKKwlyZGV2ID0gcnBoeV90b19lbmRfZGV2aWNlKHJwaHkpOworCXJldHVybiByZGV2OworfQorCiBzdGF0aWMgdm9pZCBzYXNfc21wX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAogCQkJICAgIHN0cnVjdCBzYXNfcnBoeSAqcnBoeSkKIHsKQEAgLTM1OCw2ICszNjksODUgQEAKIH0KIEVYUE9SVF9TWU1CT0woc2FzX3JlbW92ZV9ob3N0KTsKIAorLyoqCisgKiBzYXNfdGxyX3N1cHBvcnRlZCAtIGNoZWNraW5nIFRMUiBiaXQgaW4gdnBkIDB4OTAKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBDaGVjayBUcmFuc3BvcnQgTGF5ZXIgUmV0cmllcyBhcmUgc3VwcG9ydGVkIG9yIG5vdC4KKyAqIElmIHZwZCBwYWdlIDB4OTAgaXMgcHJlc2VudCwgVFJMIGlzIHN1cHBvcnRlZC4KKyAqCisgKi8KK3Vuc2lnbmVkIGludAorc2FzX3Rscl9zdXBwb3J0ZWQoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCWNvbnN0IGludCB2cGRfbGVuID0gMzI7CisJc3RydWN0IHNhc19lbmRfZGV2aWNlICpyZGV2ID0gc2FzX3NkZXZfdG9fcmRldihzZGV2KTsKKwljaGFyICpidWZmZXIgPSBremFsbG9jKHZwZF9sZW4sIEdGUF9LRVJORUwpOworCWludCByZXQgPSAwOworCisJaWYgKHNjc2lfZ2V0X3ZwZF9wYWdlKHNkZXYsIDB4OTAsIGJ1ZmZlciwgdnBkX2xlbikpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBNYWdpYyBudW1iZXJzOiB0aGUgVlBEIFByb3RvY29sIHBhZ2UgKDB4OTApCisJICogaGFzIGEgNCBieXRlIGhlYWRlciBhbmQgdGhlbiBvbmUgZW50cnkgcGVyIGRldmljZSBwb3J0CisJICogdGhlIFRMUiBiaXQgaXMgYXQgb2Zmc2V0IDggb24gZWFjaCBwb3J0IGVudHJ5CisJICogaWYgd2UgdGFrZSB0aGUgZmlyc3QgcG9ydCwgdGhhdCdzIGF0IHRvdGFsIG9mZnNldCAxMgorCSAqLworCXJldCA9IGJ1ZmZlclsxMl0gJiAweDAxOworCisgb3V0OgorCWtmcmVlKGJ1ZmZlcik7CisJcmRldi0+dGxyX3N1cHBvcnRlZCA9IHJldDsKKwlyZXR1cm4gcmV0OworCit9CitFWFBPUlRfU1lNQk9MX0dQTChzYXNfdGxyX3N1cHBvcnRlZCk7CisKKy8qKgorICogc2FzX2Rpc2FibGVfdGxyIC0gc2V0dGluZyBUTFIgZmxhZ3MKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBTZXRpbmcgdGxyX2VuYWJsZWQgZmxhZyB0byAwLgorICoKKyAqLwordm9pZAorc2FzX2Rpc2FibGVfdGxyKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXYgPSBzYXNfc2Rldl90b19yZGV2KHNkZXYpOworCisJcmRldi0+dGxyX2VuYWJsZWQgPSAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2FzX2Rpc2FibGVfdGxyKTsKKworLyoqCisgKiBzYXNfZW5hYmxlX3RsciAtIHNldHRpbmcgVExSIGZsYWdzCisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKgorICogU2V0aW5nIHRscl9lbmFibGVkIGZsYWcgMS4KKyAqCisgKi8KK3ZvaWQgc2FzX2VuYWJsZV90bHIoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXVuc2lnbmVkIGludCB0bHJfc3VwcG9ydGVkID0gMDsKKwl0bHJfc3VwcG9ydGVkICA9IHNhc190bHJfc3VwcG9ydGVkKHNkZXYpOworCisJaWYgKHRscl9zdXBwb3J0ZWQpIHsKKwkJc3RydWN0IHNhc19lbmRfZGV2aWNlICpyZGV2ID0gc2FzX3NkZXZfdG9fcmRldihzZGV2KTsKKworCQlyZGV2LT50bHJfZW5hYmxlZCA9IDE7CisJfQorCisJcmV0dXJuOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2FzX2VuYWJsZV90bHIpOworCit1bnNpZ25lZCBpbnQgc2FzX2lzX3Rscl9lbmFibGVkKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXYgPSBzYXNfc2Rldl90b19yZGV2KHNkZXYpOworCXJldHVybiByZGV2LT50bHJfZW5hYmxlZDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNhc19pc190bHJfZW5hYmxlZCk7CiAKIC8qCiAgKiBTQVMgUGh5IGF0dHJpYnV0ZXMKQEAgLTExNDYsMTUgKzEyMzYsMTAgQEAKIGludCBzYXNfcmVhZF9wb3J0X21vZGVfcGFnZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJY2hhciAqYnVmZmVyID0ga3phbGxvYyhCVUZfU0laRSwgR0ZQX0tFUk5FTCksICptc2RhdGE7Ci0Jc3RydWN0IHNhc19ycGh5ICpycGh5ID0gdGFyZ2V0X3RvX3JwaHkoc2Rldi0+c2Rldl90YXJnZXQpOwotCXN0cnVjdCBzYXNfZW5kX2RldmljZSAqcmRldjsKKwlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXYgPSBzYXNfc2Rldl90b19yZGV2KHNkZXYpOwogCXN0cnVjdCBzY3NpX21vZGVfZGF0YSBtb2RlX2RhdGE7CiAJaW50IHJlcywgZXJyb3I7CiAKLQlCVUdfT04ocnBoeS0+aWRlbnRpZnkuZGV2aWNlX3R5cGUgIT0gU0FTX0VORF9ERVZJQ0UpOwotCi0JcmRldiA9IHJwaHlfdG9fZW5kX2RldmljZShycGh5KTsKLQogCWlmICghYnVmZmVyKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTIwNyw2ICsxMjkyLDEwIEBACiAJCQkiJWRcbiIsIGludCk7CiBzYXNfZW5kX2Rldl9zaW1wbGVfYXR0cihpbml0aWF0b3JfcmVzcG9uc2VfdGltZW91dCwgaW5pdGlhdG9yX3Jlc3BvbnNlX3RpbWVvdXQsCiAJCQkiJWRcbiIsIGludCk7CitzYXNfZW5kX2Rldl9zaW1wbGVfYXR0cih0bHJfc3VwcG9ydGVkLCB0bHJfc3VwcG9ydGVkLAorCQkJIiVkXG4iLCBpbnQpOworc2FzX2VuZF9kZXZfc2ltcGxlX2F0dHIodGxyX2VuYWJsZWQsIHRscl9lbmFibGVkLAorCQkJIiVkXG4iLCBpbnQpOwogCiBzdGF0aWMgREVDTEFSRV9UUkFOU1BPUlRfQ0xBU1Moc2FzX2V4cGFuZGVyX2NsYXNzLAogCQkJICAgICAgICJzYXNfZXhwYW5kZXIiLCBOVUxMLCBOVUxMLCBOVUxMKTsKQEAgLTE3MzMsNiArMTgyMiw4IEBACiAJU0VUVVBfRU5EX0RFVl9BVFRSSUJVVEUoZW5kX2Rldl9yZWFkeV9sZWRfbWVhbmluZyk7CiAJU0VUVVBfRU5EX0RFVl9BVFRSSUJVVEUoZW5kX2Rldl9JX1RfbmV4dXNfbG9zc190aW1lb3V0KTsKIAlTRVRVUF9FTkRfREVWX0FUVFJJQlVURShlbmRfZGV2X2luaXRpYXRvcl9yZXNwb25zZV90aW1lb3V0KTsKKwlTRVRVUF9FTkRfREVWX0FUVFJJQlVURShlbmRfZGV2X3Rscl9zdXBwb3J0ZWQpOworCVNFVFVQX0VORF9ERVZfQVRUUklCVVRFKGVuZF9kZXZfdGxyX2VuYWJsZWQpOwogCWktPmVuZF9kZXZfYXR0cnNbY291bnRdID0gTlVMTDsKIAogCWNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggMjU1ZGE1My4uMWRkNGQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTExOTYsMTkgKzExOTYsMTAgQEAKIAkJU0NwbnQtPnJlc3VsdCA9IDA7CiAJCW1lbXNldChTQ3BudC0+c2Vuc2VfYnVmZmVyLCAwLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCQlicmVhazsKLQljYXNlIEFCT1JURURfQ09NTUFORDoKLQkJaWYgKHNzaGRyLmFzYyA9PSAweDEwKSB7IC8qIERJRjogRGlzayBkZXRlY3RlZCBjb3JydXB0aW9uICovCi0JCQlzY3NpX3ByaW50X3Jlc3VsdChTQ3BudCk7Ci0JCQlzY3NpX3ByaW50X3NlbnNlKCJzZCIsIFNDcG50KTsKKwljYXNlIEFCT1JURURfQ09NTUFORDogLyogRElGOiBUYXJnZXQgZGV0ZWN0ZWQgY29ycnVwdGlvbiAqLworCWNhc2UgSUxMRUdBTF9SRVFVRVNUOiAvKiBESVg6IEhvc3QgZGV0ZWN0ZWQgY29ycnVwdGlvbiAqLworCQlpZiAoc3NoZHIuYXNjID09IDB4MTApCiAJCQlnb29kX2J5dGVzID0gc2RfY29tcGxldGVkX2J5dGVzKFNDcG50KTsKLQkJfQotCQlicmVhazsKLQljYXNlIElMTEVHQUxfUkVRVUVTVDoKLQkJaWYgKHNzaGRyLmFzYyA9PSAweDEwKSB7IC8qIERJWDogSEJBIGRldGVjdGVkIGNvcnJ1cHRpb24gKi8KLQkJCXNjc2lfcHJpbnRfcmVzdWx0KFNDcG50KTsKLQkJCXNjc2lfcHJpbnRfc2Vuc2UoInNkIiwgU0NwbnQpOwotCQkJZ29vZF9ieXRlcyA9IHNkX2NvbXBsZXRlZF9ieXRlcyhTQ3BudCk7Ci0JCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMjE4LDggKzEyMDksMTkgQEAKIAkJc2RfZGlmX2NvbXBsZXRlKFNDcG50LCBnb29kX2J5dGVzKTsKIAogCWlmIChzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RrcC0+ZGV2aWNlLT5ob3N0LCBzZGtwLT5wcm90ZWN0aW9uX3R5cGUpCi0JICAgID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmIFNDcG50LT5jbW5kICE9IFNDcG50LT5yZXF1ZXN0LT5jbWQpCisJICAgID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmIFNDcG50LT5jbW5kICE9IFNDcG50LT5yZXF1ZXN0LT5jbWQpIHsKKworCQkvKiBXZSBoYXZlIHRvIHByaW50IGEgZmFpbGVkIGNvbW1hbmQgaGVyZSBhcyB0aGUKKwkJICogZXh0ZW5kZWQgQ0RCIGdldHMgZnJlZWQgYmVmb3JlIHNjc2lfaW9fY29tcGxldGlvbigpCisJCSAqIGlzIGNhbGxlZC4KKwkJICovCisJCWlmIChyZXN1bHQpCisJCQlzY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQpOworCiAJCW1lbXBvb2xfZnJlZShTQ3BudC0+Y21uZCwgc2RfY2RiX3Bvb2wpOworCQlTQ3BudC0+Y21uZCA9IE5VTEw7CisJCVNDcG50LT5jbWRfbGVuID0gMDsKKwl9CiAKIAlyZXR1cm4gZ29vZF9ieXRlczsKIH0KQEAgLTE5NDYsMTMgKzE5NDgsMTMgQEAKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHNka3AtPmRpc2stPnF1ZXVlOwogCXVuc2lnbmVkIGludCBzZWN0b3Jfc3ogPSBzZGtwLT5kZXZpY2UtPnNlY3Rvcl9zaXplOwotCWNoYXIgKmJ1ZmZlcjsKKwljb25zdCBpbnQgdnBkX2xlbiA9IDMyOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IGttYWxsb2ModnBkX2xlbiwgR0ZQX0tFUk5FTCk7CiAKLQkvKiBCbG9jayBMaW1pdHMgVlBEICovCi0JYnVmZmVyID0gc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIwKTsKLQotCWlmIChidWZmZXIgPT0gTlVMTCkKLQkJcmV0dXJuOworCWlmICghYnVmZmVyIHx8CisJICAgIC8qIEJsb2NrIExpbWl0cyBWUEQgKi8KKwkgICAgc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIwLCBidWZmZXIsIHZwZF9sZW4pKQorCQlnb3RvIG91dDsKIAogCWJsa19xdWV1ZV9pb19taW4oc2RrcC0+ZGlzay0+cXVldWUsCiAJCQkgZ2V0X3VuYWxpZ25lZF9iZTE2KCZidWZmZXJbNl0pICogc2VjdG9yX3N6KTsKQEAgLTE5ODQsNiArMTk4Niw3IEBACiAJCQkJZ2V0X3VuYWxpZ25lZF9iZTMyKCZidWZmZXJbMzJdKSAmIH4oMSA8PCAzMSk7CiAJfQogCisgb3V0OgogCWtmcmVlKGJ1ZmZlcik7CiB9CiAKQEAgLTE5OTMsMjAgKzE5OTYsMjMgQEAKICAqLwogc3RhdGljIHZvaWQgc2RfcmVhZF9ibG9ja19jaGFyYWN0ZXJpc3RpY3Moc3RydWN0IHNjc2lfZGlzayAqc2RrcCkKIHsKLQljaGFyICpidWZmZXI7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCXUxNiByb3Q7CisJY29uc3QgaW50IHZwZF9sZW4gPSAzMjsKIAotCS8qIEJsb2NrIERldmljZSBDaGFyYWN0ZXJpc3RpY3MgVlBEICovCi0JYnVmZmVyID0gc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIxKTsKKwlidWZmZXIgPSBrbWFsbG9jKHZwZF9sZW4sIEdGUF9LRVJORUwpOwogCi0JaWYgKGJ1ZmZlciA9PSBOVUxMKQotCQlyZXR1cm47CisJaWYgKCFidWZmZXIgfHwKKwkgICAgLyogQmxvY2sgRGV2aWNlIENoYXJhY3RlcmlzdGljcyBWUEQgKi8KKwkgICAgc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIxLCBidWZmZXIsIHZwZF9sZW4pKQorCQlnb3RvIG91dDsKIAogCXJvdCA9IGdldF91bmFsaWduZWRfYmUxNigmYnVmZmVyWzRdKTsKIAogCWlmIChyb3QgPT0gMSkKIAkJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19OT05ST1QsIHNka3AtPmRpc2stPnF1ZXVlKTsKIAorIG91dDoKIAlrZnJlZShidWZmZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2VzLmMgYi9kcml2ZXJzL3Njc2kvc2VzLmMKaW5kZXggNTViMDM0Yi4uMWQ3YTg3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Nlcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZXMuYwpAQCAtNDQ4LDEzICs0NDgsMTcgQEAKIAkJLmFkZHIgPSAwLAogCX07CiAKLQlidWYgPSBzY3NpX2dldF92cGRfcGFnZShzZGV2LCAweDgzKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuOworCWJ1ZiA9IGttYWxsb2MoSU5JVF9BTExPQ19TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZiB8fCBzY3NpX2dldF92cGRfcGFnZShzZGV2LCAweDgzLCBidWYsIElOSVRfQUxMT0NfU0laRSkpCisJCWdvdG8gZnJlZTsKIAogCXNlc19lbmNsb3N1cmVfZGF0YV9wcm9jZXNzKGVkZXYsIHRvX3Njc2lfZGV2aWNlKGVkZXYtPmVkZXYucGFyZW50KSwgMCk7CiAKIAl2cGRfbGVuID0gKChidWZbMl0gPDwgOCkgfCBidWZbM10pICsgNDsKKwlrZnJlZShidWYpOworCWJ1ZiA9IGttYWxsb2ModnBkX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYgfHxzY3NpX2dldF92cGRfcGFnZShzZGV2LCAweDgzLCBidWYsIHZwZF9sZW4pKQorCQlnb3RvIGZyZWU7CiAKIAlkZXNjID0gYnVmICsgNDsKIAl3aGlsZSAoZGVzYyA8IGJ1ZiArIHZwZF9sZW4pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggMDQwZjc1MS4uYzk5NmQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTI4Nyw4ICsyODcsNyBAQAogCWlmIChsaXN0X2VtcHR5KCZzZHAtPnNmZHMpKSB7CS8qIG5vIGV4aXN0aW5nIG9wZW5zIG9uIHRoaXMgZGV2aWNlICovCiAJCXNkcC0+c2dkZWJ1ZyA9IDA7CiAJCXEgPSBzZHAtPmRldmljZS0+cmVxdWVzdF9xdWV1ZTsKLQkJc2RwLT5zZ190YWJsZXNpemUgPSBtaW4ocXVldWVfbWF4X2h3X3NlZ21lbnRzKHEpLAotCQkJCQlxdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxKSk7CisJCXNkcC0+c2dfdGFibGVzaXplID0gcXVldWVfbWF4X3NlZ21lbnRzKHEpOwogCX0KIAlpZiAoKHNmcCA9IHNnX2FkZF9zZnAoc2RwLCBkZXYpKSkKIAkJZmlscC0+cHJpdmF0ZV9kYXRhID0gc2ZwOwpAQCAtMTM3Niw4ICsxMzc1LDcgQEAKIAlzZHAtPmRldmljZSA9IHNjc2lkcDsKIAlJTklUX0xJU1RfSEVBRCgmc2RwLT5zZmRzKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZHAtPm9fZXhjbF93YWl0KTsKLQlzZHAtPnNnX3RhYmxlc2l6ZSA9IG1pbihxdWV1ZV9tYXhfaHdfc2VnbWVudHMocSksCi0JCQkJcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSkpOworCXNkcC0+c2dfdGFibGVzaXplID0gcXVldWVfbWF4X3NlZ21lbnRzKHEpOwogCXNkcC0+aW5kZXggPSBrOwogCWtyZWZfaW5pdCgmc2RwLT5kX3JlZik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5jIGIvZHJpdmVycy9zY3NpL3N0LmMKaW5kZXggZDA0ZWE5YS4uZjY3ZDFhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0LmMKQEAgLTM5ODMsOCArMzk4Myw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWkgPSBtaW4ocXVldWVfbWF4X2h3X3NlZ21lbnRzKFNEcC0+cmVxdWVzdF9xdWV1ZSksCi0JCXF1ZXVlX21heF9waHlzX3NlZ21lbnRzKFNEcC0+cmVxdWVzdF9xdWV1ZSkpOworCWkgPSBxdWV1ZV9tYXhfc2VnbWVudHMoU0RwLT5yZXF1ZXN0X3F1ZXVlKTsKIAlpZiAoc3RfbWF4X3NnX3NlZ3MgPCBpKQogCQlpID0gc3RfbWF4X3NnX3NlZ3M7CiAJYnVmZmVyID0gbmV3X3RhcGVfYnVmZmVyKChTRHAtPmhvc3QpLT51bmNoZWNrZWRfaXNhX2RtYSwgaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jIGIvZHJpdmVycy9zY3NpL3UxNC0zNGYuYwppbmRleCA1NDAyM2Q0MS4uMjZlOGUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3UxNC0zNGYuYworKysgYi9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jCkBAIC0xMDcwLDcgKzEwNzAsNyBAQAogICAgY2hhciAqY3VyID0gc3RyOwogICAgaW50IGkgPSAxOwogCi0gICB3aGlsZSAoY3VyICYmIGlzZGlnaXQoKmN1cikgJiYgaSA8PSBNQVhfSU5UX1BBUkFNKSB7CisgICB3aGlsZSAoY3VyICYmIGlzZGlnaXQoKmN1cikgJiYgaSA8IE1BWF9JTlRfUEFSQU0pIHsKICAgICAgIGludHNbaSsrXSA9IHNpbXBsZV9zdHJ0b3VsKGN1ciwgTlVMTCwgMCk7CiAKICAgICAgIGlmICgoY3VyID0gc3RyY2hyKGN1ciwgJywnKSkgIT0gTlVMTCkgY3VyKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdm13X3B2c2NzaS5jIGIvZHJpdmVycy9zY3NpL3Ztd19wdnNjc2kuYwppbmRleCBkMjYwNGM4Li5lNGFjNTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdm13X3B2c2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS92bXdfcHZzY3NpLmMKQEAgLTEwNjksNyArMTA2OSw4IEBACiAJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpY3R4LT5zZ2wsIGdldF9vcmRlcihTR0xfU0laRSkpOwogfQogCi1zdGF0aWMgaW50IHB2c2NzaV9zZXR1cF9tc2l4KGNvbnN0IHN0cnVjdCBwdnNjc2lfYWRhcHRlciAqYWRhcHRlciwgaW50ICppcnEpCitzdGF0aWMgaW50IHB2c2NzaV9zZXR1cF9tc2l4KGNvbnN0IHN0cnVjdCBwdnNjc2lfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgdW5zaWduZWQgaW50ICppcnEpCiB7CiAJc3RydWN0IG1zaXhfZW50cnkgZW50cnkgPSB7IDAsIFBWU0NTSV9WRUNUT1JfQ09NUExFVElPTiB9OwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggYzNlMzdjOGUuLmE4MWZmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKQEAgLTgzLDYgKzgzLDkgQEAKIAogI2RlZmluZSBQQVNTX0xJTUlUCTI1NgogCisjZGVmaW5lIEJPVEhfRU1QVFkgCShVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkKKworCiAvKgogICogV2UgZGVmYXVsdCB0byBJUlEwIGZvciB0aGUgIm5vIGlycSIgaGFjay4gICBTb21lCiAgKiBtYWNoaW5lIHR5cGVzIHdhbnQgb3RoZXJzIGFzIHdlbGwgLSB0aGV5J3JlIGZyZWUKQEAgLTEyMTQsMTIgKzEyMTcsNiBAQAogCX0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0FVMVgwMAotCS8qIGlmIGFjY2VzcyBtZXRob2QgaXMgQVUsIGl0IGlzIGEgMTY1NTAgd2l0aCBhIHF1aXJrICovCi0JaWYgKHVwLT5wb3J0LnR5cGUgPT0gUE9SVF8xNjU1MEEgJiYgdXAtPnBvcnQuaW90eXBlID09IFVQSU9fQVUpCi0JCXVwLT5idWdzIHw9IFVBUlRfQlVHX05PTVNSOwotI2VuZGlmCi0KIAlzZXJpYWxfb3V0cCh1cCwgVUFSVF9MQ1IsIHNhdmVfbGNyKTsKIAogCWlmICh1cC0+Y2FwYWJpbGl0aWVzICE9IHVhcnRfY29uZmlnW3VwLT5wb3J0LnR5cGVdLmZsYWdzKSB7CkBAIC0xNzkyLDcgKzE3ODksNyBAQAogCXVwLT5sc3Jfc2F2ZWRfZmxhZ3MgfD0gbHNyICYgTFNSX1NBVkVfRkxBR1M7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIGxzciAmIFVBUlRfTFNSX1RFTVQgPyBUSU9DU0VSX1RFTVQgOiAwOworCXJldHVybiAobHNyICYgQk9USF9FTVBUWSkgPT0gQk9USF9FTVBUWSA/IFRJT0NTRVJfVEVNVCA6IDA7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2VyaWFsODI1MF9nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKQEAgLTE4NTAsOCArMTg0Nyw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwogfQogCi0jZGVmaW5lIEJPVEhfRU1QVFkgKFVBUlRfTFNSX1RFTVQgfCBVQVJUX0xTUl9USFJFKQotCiAvKgogICoJV2FpdCBmb3IgdHJhbnNtaXR0ZXIgJiBob2xkaW5nIHJlZ2lzdGVyIHRvIGVtcHR5CiAgKi8KQEAgLTI0MjcsNyArMjQyMiw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNlcmlhbDgyNTBfcG9ydF9zaXplKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqcHQpCiB7CiAJaWYgKHB0LT5wb3J0LmlvdHlwZSA9PSBVUElPX0FVKQotCQlyZXR1cm4gMHgxMDAwMDA7CisJCXJldHVybiAweDEwMDA7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUAogCWlmIChpc19vbWFwX3BvcnQocHQpKQogCQlyZXR1cm4gMHgxNiA8PCBwdC0+cG9ydC5yZWdzaGlmdDsKQEAgLTI1ODQsNiArMjU3OSwxMyBAQAogCiAJaWYgKGZsYWdzICYgVUFSVF9DT05GSUdfVFlQRSkKIAkJYXV0b2NvbmZpZyh1cCwgcHJvYmVmbGFncyk7CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwCisJLyogaWYgYWNjZXNzIG1ldGhvZCBpcyBBVSwgaXQgaXMgYSAxNjU1MCB3aXRoIGEgcXVpcmsgKi8KKwlpZiAodXAtPnBvcnQudHlwZSA9PSBQT1JUXzE2NTUwQSAmJiB1cC0+cG9ydC5pb3R5cGUgPT0gVVBJT19BVSkKKwkJdXAtPmJ1Z3MgfD0gVUFSVF9CVUdfTk9NU1I7CisjZW5kaWYKKwogCWlmICh1cC0+cG9ydC50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBmbGFncyAmIFVBUlRfQ09ORklHX0lSUSkKIAkJYXV0b2NvbmZpZ19pcnEodXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwppbmRleCA5ZmY0N2RiMC4uODg4YTBjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC0xMDg2LDEyICsxMDg2LDEyIEBACiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBTRVJJQUxfUE1BQ1pJTE9HCi0JdHJpc3RhdGUgIlBvd2VyTWFjIHo4NWMzMCBFU0NDIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQUENfT0YgJiYgUFBDX1BNQUMKKwl0cmlzdGF0ZSAiTWFjIG9yIFBvd2VyTWFjIHo4NWMzMCBFU0NDIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAoTTY4SyAmJiBNQUMpIHx8IChQUENfT0YgJiYgUFBDX1BNQUMpCiAJc2VsZWN0IFNFUklBTF9DT1JFCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFppbG9nIHo4NUMzMCBzZXJpYWwgcG9ydHMgZm91bmQgb24KLQkgIFBvd2VyTWFjIG1hY2hpbmVzLgorCSAgKFBvd2VyKU1hYyBtYWNoaW5lcy4KIAkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB0aGVzZSBzZXJpYWwgcG9ydHMuCiAKIGNvbmZpZyBTRVJJQUxfUE1BQ1pJTE9HX1RUWVMKQEAgLTExMTYsMTYgKzExMTYsMTYgQEAKIAkgIHVuYWJsZSB0byB1c2UgdGhlIDgyNTAgbW9kdWxlIGZvciBQQ01DSUEgb3Igb3RoZXIgMTZDNTUwLXN0eWxlCiAJICBVQVJUcy4KIAotCSAgU2F5IE4gdW5sZXNzIHlvdSBuZWVkIHRoZSB6ODVjMzAgcG9ydHMgb24geW91ciBwb3dlcm1hYworCSAgU2F5IE4gdW5sZXNzIHlvdSBuZWVkIHRoZSB6ODVjMzAgcG9ydHMgb24geW91ciAoUG93ZXIpTWFjCiAJICB0byBhcHBlYXIgYXMgL2Rldi90dHlTbi4KIAogY29uZmlnIFNFUklBTF9QTUFDWklMT0dfQ09OU09MRQotCWJvb2wgIkNvbnNvbGUgb24gUG93ZXJNYWMgejg1YzMwIHNlcmlhbCBwb3J0IgorCWJvb2wgIkNvbnNvbGUgb24gTWFjIG9yIFBvd2VyTWFjIHo4NWMzMCBzZXJpYWwgcG9ydCIKIAlkZXBlbmRzIG9uIFNFUklBTF9QTUFDWklMT0c9eQogCXNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFCiAJaGVscAogCSAgSWYgeW91IHdvdWxkIGxpa2UgdG8gYmUgYWJsZSB0byB1c2UgdGhlIHo4NWMzMCBzZXJpYWwgcG9ydAotCSAgb24geW91ciBQb3dlck1hYyBhcyB0aGUgY29uc29sZSwgeW91IGNhbiBkbyBzbyBieSBhbnN3ZXJpbmcKKwkgIG9uIHlvdXIgKFBvd2VyKU1hYyBhcyB0aGUgY29uc29sZSwgeW91IGNhbiBkbyBzbyBieSBhbnN3ZXJpbmcKIAkgIFkgdG8gdGhpcyBvcHRpb24uCiAKIGNvbmZpZyBTRVJJQUxfTEg3QTQwWApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCmluZGV4IGVmN2FkYzguLmNlNmMzNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKQEAgLTcxLDYgKzcxLDcgQEAKIAl1bnNpZ25lZCBpbnQJCWltOwkvKiBpbnRlcnJ1cHQgbWFzayAqLwogCXVuc2lnbmVkIGludAkJb2xkX3N0YXR1czsKIAl1bnNpZ25lZCBpbnQJCWlmbHM7CS8qIHZlbmRvci1zcGVjaWZpYyAqLworCWJvb2wJCQlhdXRvcnRzOwogfTsKIAogLyogVGhlcmUgaXMgYnkgbm93IGF0IGxlYXN0IG9uZSB2ZW5kb3Igd2l0aCBkaWZmZXJpbmcgZGV0YWlscywgc28gaGFuZGxlIGl0ICovCkBAIC0zMDgsNiArMzA5LDExIEBACiAJVElPQ01CSVQoVElPQ01fT1VUMSwgVUFSVDAxMV9DUl9PVVQxKTsKIAlUSU9DTUJJVChUSU9DTV9PVVQyLCBVQVJUMDExX0NSX09VVDIpOwogCVRJT0NNQklUKFRJT0NNX0xPT1AsIFVBUlQwMTFfQ1JfTEJFKTsKKworCWlmICh1YXAtPmF1dG9ydHMpIHsKKwkJLyogV2UgbmVlZCB0byBkaXNhYmxlIGF1dG8tUlRTIGlmIHdlIHdhbnQgdG8gdHVybiBSVFMgb2ZmICovCisJCVRJT0NNQklUKFRJT0NNX1JUUywgVUFSVDAxMV9DUl9SVFNFTik7CisJfQogI3VuZGVmIFRJT0NNQklUCiAKIAl3cml0ZXcoY3IsIHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9DUik7CkBAIC00MzcsNiArNDQzLDcgQEAKIAkvKgogCSAqIGRpc2FibGUgdGhlIHBvcnQKIAkgKi8KKwl1YXAtPmF1dG9ydHMgPSBmYWxzZTsKIAl3cml0ZXcoVUFSVDAxeF9DUl9VQVJURU4gfCBVQVJUMDExX0NSX1RYRSwgdWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDExX0NSKTsKIAogCS8qCkBAIC00NTYsNiArNDYzLDcgQEAKIHBsMDExX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKIAkJICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKKwlzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCA9IChzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKilwb3J0OwogCXVuc2lnbmVkIGludCBsY3JfaCwgb2xkX2NyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGJhdWQsIHF1b3Q7CkBAIC01MzIsNiArNTQwLDE3IEBACiAJb2xkX2NyID0gcmVhZHcocG9ydC0+bWVtYmFzZSArIFVBUlQwMTFfQ1IpOwogCXdyaXRldygwLCBwb3J0LT5tZW1iYXNlICsgVUFSVDAxMV9DUik7CiAKKwlpZiAodGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKKwkJaWYgKG9sZF9jciAmIFVBUlQwMTFfQ1JfUlRTKQorCQkJb2xkX2NyIHw9IFVBUlQwMTFfQ1JfUlRTRU47CisKKwkJb2xkX2NyIHw9IFVBUlQwMTFfQ1JfQ1RTRU47CisJCXVhcC0+YXV0b3J0cyA9IHRydWU7CisJfSBlbHNlIHsKKwkJb2xkX2NyICY9IH4oVUFSVDAxMV9DUl9DVFNFTiB8IFVBUlQwMTFfQ1JfUlRTRU4pOworCQl1YXAtPmF1dG9ydHMgPSBmYWxzZTsKKwl9CisKIAkvKiBTZXQgYmF1ZCByYXRlICovCiAJd3JpdGV3KHF1b3QgJiAweDNmLCBwb3J0LT5tZW1iYXNlICsgVUFSVDAxMV9GQlJEKTsKIAl3cml0ZXcocXVvdCA+PiA2LCBwb3J0LT5tZW1iYXNlICsgVUFSVDAxMV9JQlJEKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKaW5kZXggN2NlOWU5Zi4uMzExOWZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKQEAgLTc0LDYgKzc0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CiAjaW5jbHVkZSA8YXNtL21wYzUyeHhfcHNjLmg+CkBAIC0xMTMsNiArMTE0LDcgQEAKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgaW50ZXJydXB0aW9uIGhhbmRsaW5nIHJvdXRpbmUgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBtcGM1Mnh4X3VhcnRfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitzdGF0aWMgaXJxcmV0dXJuX3QgbXBjNXh4eF91YXJ0X3Byb2Nlc3NfaW50KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOwogCiAKIC8qIFNpbXBsZSBtYWNybyB0byB0ZXN0IGlmIGEgcG9ydCBpcyBjb25zb2xlIG9yIG5vdC4gVGhpcyBvbmUgaXMgdGFrZW4KQEAgLTE0NSw2ICsxNDcsMTEgQEAKIAl2b2lkCQkoKmN3X2Rpc2FibGVfaW50cykoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCk7CiAJdm9pZAkJKCpjd19yZXN0b3JlX2ludHMpKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOwogCXVuc2lnbmVkIGxvbmcJKCpnZXR1YXJ0Y2xrKSh2b2lkICpwKTsKKwlpbnQJCSgqY2xvY2spKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBlbmFibGUpOworCWludAkJKCpmaWZvY19pbml0KSh2b2lkKTsKKwl2b2lkCQkoKmZpZm9jX3VuaW5pdCkodm9pZCk7CisJdm9pZAkJKCpnZXRfaXJxKShzdHJ1Y3QgdWFydF9wb3J0ICosIHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKKwlpcnFyZXR1cm5fdAkoKmhhbmRsZV9pcnEpKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOwogfTsKIAogI2lmZGVmIENPTkZJR19QUENfTVBDNTJ4eApAQCAtMjU2LDYgKzI2MywxOCBAQAogCXJldHVybiBtcGM1eHh4X2dldF9idXNfZnJlcXVlbmN5KHApIC8gMjsKIH0KIAorc3RhdGljIHZvaWQgbXBjNTJ4eF9wc2NfZ2V0X2lycShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXBvcnQtPmlycWZsYWdzID0gSVJRRl9ESVNBQkxFRDsKKwlwb3J0LT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7Cit9CisKKy8qIDUyeHggc3BlY2lmaWMgaW50ZXJydXB0IGhhbmRsZXIuIFRoZSBjYWxsZXIgaG9sZHMgdGhlIHBvcnQgbG9jayAqLworc3RhdGljIGlycXJldHVybl90IG1wYzUyeHhfcHNjX2hhbmRsZV9pcnEoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gbXBjNXh4eF91YXJ0X3Byb2Nlc3NfaW50KHBvcnQpOworfQorCiBzdGF0aWMgc3RydWN0IHBzY19vcHMgbXBjNTJ4eF9wc2Nfb3BzID0gewogCS5maWZvX2luaXQgPSBtcGM1Mnh4X3BzY19maWZvX2luaXQsCiAJLnJhd19yeF9yZHkgPSBtcGM1Mnh4X3BzY19yYXdfcnhfcmR5LApAQCAtMjczLDE0ICsyOTIsMzIgQEAKIAkuY3dfZGlzYWJsZV9pbnRzID0gbXBjNTJ4eF9wc2NfY3dfZGlzYWJsZV9pbnRzLAogCS5jd19yZXN0b3JlX2ludHMgPSBtcGM1Mnh4X3BzY19jd19yZXN0b3JlX2ludHMsCiAJLmdldHVhcnRjbGsgPSBtcGM1Mnh4X2dldHVhcnRjbGssCisJLmdldF9pcnEgPSBtcGM1Mnh4X3BzY19nZXRfaXJxLAorCS5oYW5kbGVfaXJxID0gbXBjNTJ4eF9wc2NfaGFuZGxlX2lycSwKIH07CiAKICNlbmRpZiAvKiBDT05GSUdfTVBDNTJ4eCAqLwogCiAjaWZkZWYgQ09ORklHX1BQQ19NUEM1MTJ4CiAjZGVmaW5lIEZJRk9fNTEyeChwb3J0KSAoKHN0cnVjdCBtcGM1MTJ4X3BzY19maWZvIF9faW9tZW0gKikoUFNDKHBvcnQpKzEpKQorCisvKiBQU0MgRklGTyBDb250cm9sbGVyIGZvciBtcGM1MTJ4ICovCitzdHJ1Y3QgcHNjX2ZpZm9jIHsKKwl1MzIgZmlmb2NfY21kOworCXUzMiBmaWZvY19pbnQ7CisJdTMyIGZpZm9jX2RtYTsKKwl1MzIgZmlmb2NfYXhlOworCXUzMiBmaWZvY19kZWJ1ZzsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHNjX2ZpZm9jIF9faW9tZW0gKnBzY19maWZvYzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHNjX2ZpZm9jX2lycTsKKwogc3RhdGljIHZvaWQgbXBjNTEyeF9wc2NfZmlmb19pbml0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CisJLyogLzMyIHByZXNjYWxlciAqLworCW91dF9iZTE2KCZQU0MocG9ydCktPm1wYzUyeHhfcHNjX2Nsb2NrX3NlbGVjdCwgMHhkZDAwKTsKKwogCW91dF9iZTMyKCZGSUZPXzUxMngocG9ydCktPnR4Y21kLCBNUEM1MTJ4X1BTQ19GSUZPX1JFU0VUX1NMSUNFKTsKIAlvdXRfYmUzMigmRklGT181MTJ4KHBvcnQpLT50eGNtZCwgTVBDNTEyeF9QU0NfRklGT19FTkFCTEVfU0xJQ0UpOwogCW91dF9iZTMyKCZGSUZPXzUxMngocG9ydCktPnR4YWxhcm0sIDEpOwpAQCAtMzkzLDYgKzQzMCwxNjAgQEAKIAlyZXR1cm4gbXBjNXh4eF9nZXRfYnVzX2ZyZXF1ZW5jeShwKTsKIH0KIAorI2RlZmluZSBERUZBVUxUX0ZJRk9fU0laRSAxNgorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBnZXRfZmlmb19zaXplKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCSBjaGFyICpmaWZvX25hbWUpCit7CisJY29uc3QgdW5zaWduZWQgaW50ICpmcDsKKworCWZwID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCBmaWZvX25hbWUsIE5VTEwpOworCWlmIChmcCkKKwkJcmV0dXJuICpmcDsKKworCXByX3dhcm5pbmcoIm5vICVzIHByb3BlcnR5IGluICVzIG5vZGUsIGRlZmF1bHRpbmcgdG8gJWRcbiIsCisJCSAgIGZpZm9fbmFtZSwgbnAtPmZ1bGxfbmFtZSwgREVGQVVMVF9GSUZPX1NJWkUpOworCisJcmV0dXJuIERFRkFVTFRfRklGT19TSVpFOworfQorCisjZGVmaW5lIEZJRk9DKF9iYXNlKSAoKHN0cnVjdCBtcGM1MTJ4X3BzY19maWZvIF9faW9tZW0gKikgXAorCQkgICAgKCh1MzIpKF9iYXNlKSArIHNpemVvZihzdHJ1Y3QgbXBjNTJ4eF9wc2MpKSkKKworLyogSW5pdCBQU0MgRklGTyBDb250cm9sbGVyICovCitzdGF0aWMgaW50IF9faW5pdCBtcGM1MTJ4X3BzY19maWZvY19pbml0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwl2b2lkIF9faW9tZW0gKnBzYzsKKwl1bnNpZ25lZCBpbnQgdHhfZmlmb19zaXplOworCXVuc2lnbmVkIGludCByeF9maWZvX3NpemU7CisJaW50IGZpZm9iYXNlID0gMDsgLyogY3VycmVudCBmaWZvIGFkZHJlc3MgaW4gMzIgYml0IHdvcmRzICovCisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsCisJCQkJICAgICAiZnNsLG1wYzUxMjEtcHNjLWZpZm8iKTsKKwlpZiAoIW5wKSB7CisJCXByX2VycigiJXM6IENhbid0IGZpbmQgRklGT0Mgbm9kZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwc2NfZmlmb2MgPSBvZl9pb21hcChucCwgMCk7CisJaWYgKCFwc2NfZmlmb2MpIHsKKwkJcHJfZXJyKCIlczogQ2FuJ3QgbWFwIEZJRk9DXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBzY19maWZvY19pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJb2Zfbm9kZV9wdXQobnApOworCWlmIChwc2NfZmlmb2NfaXJxID09IE5PX0lSUSkgeworCQlwcl9lcnIoIiVzOiBDYW4ndCBnZXQgRklGT0MgaXJxXG4iLCBfX2Z1bmNfXyk7CisJCWlvdW5tYXAocHNjX2ZpZm9jKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiZnNsLG1wYzUxMjEtcHNjLXVhcnQiKSB7CisJCXR4X2ZpZm9fc2l6ZSA9IGdldF9maWZvX3NpemUobnAsICJmc2wsdHgtZmlmby1zaXplIik7CisJCXJ4X2ZpZm9fc2l6ZSA9IGdldF9maWZvX3NpemUobnAsICJmc2wscngtZmlmby1zaXplIik7CisKKwkJLyogc2l6ZSBpbiByZWdpc3RlciBpcyBpbiA0IGJ5dGUgdW5pdHMgKi8KKwkJdHhfZmlmb19zaXplIC89IDQ7CisJCXJ4X2ZpZm9fc2l6ZSAvPSA0OworCQlpZiAoIXR4X2ZpZm9fc2l6ZSkKKwkJCXR4X2ZpZm9fc2l6ZSA9IDE7CisJCWlmICghcnhfZmlmb19zaXplKQorCQkJcnhfZmlmb19zaXplID0gMTsKKworCQlwc2MgPSBvZl9pb21hcChucCwgMCk7CisJCWlmICghcHNjKSB7CisJCQlwcl9lcnIoIiVzOiBDYW4ndCBtYXAgJXMgZGV2aWNlXG4iLAorCQkJCV9fZnVuY19fLCBucC0+ZnVsbF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogRklGTyBzcGFjZSBpcyA0S2lCLCBjaGVjayBpZiByZXF1ZXN0ZWQgc2l6ZSBpcyBhdmFpbGFibGUgKi8KKwkJaWYgKChmaWZvYmFzZSArIHR4X2ZpZm9fc2l6ZSArIHJ4X2ZpZm9fc2l6ZSkgPiAweDEwMDApIHsKKwkJCXByX2VycigiJXM6IG5vIGZpZm8gc3BhY2UgYXZhaWxhYmxlIGZvciAlc1xuIiwKKwkJCQlfX2Z1bmNfXywgbnAtPmZ1bGxfbmFtZSk7CisJCQlpb3VubWFwKHBzYyk7CisJCQkvKgorCQkJICogY2hhbmNlcyBhcmUgdGhhdCBhbm90aGVyIGRldmljZSByZXF1ZXN0cyBsZXNzCisJCQkgKiBmaWZvIHNwYWNlLCBzbyB3ZSBjb250aW51ZS4KKwkJCSAqLworCQkJY29udGludWU7CisJCX0KKwkJLyogc2V0IHR4IGFuZCByeCBmaWZvIHNpemUgcmVnaXN0ZXJzICovCisJCW91dF9iZTMyKCZGSUZPQyhwc2MpLT50eHN6LCAoZmlmb2Jhc2UgPDwgMTYpIHwgdHhfZmlmb19zaXplKTsKKwkJZmlmb2Jhc2UgKz0gdHhfZmlmb19zaXplOworCQlvdXRfYmUzMigmRklGT0MocHNjKS0+cnhzeiwgKGZpZm9iYXNlIDw8IDE2KSB8IHJ4X2ZpZm9fc2l6ZSk7CisJCWZpZm9iYXNlICs9IHJ4X2ZpZm9fc2l6ZTsKKworCQkvKiByZXNldCBhbmQgZW5hYmxlIHRoZSBzbGljZXMgKi8KKwkJb3V0X2JlMzIoJkZJRk9DKHBzYyktPnR4Y21kLCAweDgwKTsKKwkJb3V0X2JlMzIoJkZJRk9DKHBzYyktPnR4Y21kLCAweDAxKTsKKwkJb3V0X2JlMzIoJkZJRk9DKHBzYyktPnJ4Y21kLCAweDgwKTsKKwkJb3V0X2JlMzIoJkZJRk9DKHBzYyktPnJ4Y21kLCAweDAxKTsKKworCQlpb3VubWFwKHBzYyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtcGM1MTJ4X3BzY19maWZvY191bmluaXQodm9pZCkKK3sKKwlpb3VubWFwKHBzY19maWZvYyk7Cit9CisKKy8qIDUxMnggc3BlY2lmaWMgaW50ZXJydXB0IGhhbmRsZXIuIFRoZSBjYWxsZXIgaG9sZHMgdGhlIHBvcnQgbG9jayAqLworc3RhdGljIGlycXJldHVybl90IG1wYzUxMnhfcHNjX2hhbmRsZV9pcnEoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGZpZm9jX2ludDsKKwlpbnQgcHNjX251bTsKKworCS8qIFJlYWQgcGVuZGluZyBQU0MgRklGT0MgaW50ZXJydXB0cyAqLworCWZpZm9jX2ludCA9IGluX2JlMzIoJnBzY19maWZvYy0+Zmlmb2NfaW50KTsKKworCS8qIENoZWNrIGlmIGl0IGlzIGFuIGludGVycnVwdCBmb3IgdGhpcyBwb3J0ICovCisJcHNjX251bSA9IChwb3J0LT5tYXBiYXNlICYgMHhmMDApID4+IDg7CisJaWYgKHRlc3RfYml0KHBzY19udW0sICZmaWZvY19pbnQpIHx8CisJICAgIHRlc3RfYml0KHBzY19udW0gKyAxNiwgJmZpZm9jX2ludCkpCisJCXJldHVybiBtcGM1eHh4X3VhcnRfcHJvY2Vzc19pbnQocG9ydCk7CisKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTEyeF9wc2NfY2xvY2soc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgY2xrICpwc2NfY2xrOworCWludCBwc2NfbnVtOworCWNoYXIgY2xrX25hbWVbMTBdOworCisJaWYgKHVhcnRfY29uc29sZShwb3J0KSkKKwkJcmV0dXJuIDA7CisKKwlwc2NfbnVtID0gKHBvcnQtPm1hcGJhc2UgJiAweGYwMCkgPj4gODsKKwlzbnByaW50ZihjbGtfbmFtZSwgc2l6ZW9mKGNsa19uYW1lKSwgInBzYyVkX2NsayIsIHBzY19udW0pOworCXBzY19jbGsgPSBjbGtfZ2V0KHBvcnQtPmRldiwgY2xrX25hbWUpOworCWlmIChJU19FUlIocHNjX2NsaykpIHsKKwkJZGV2X2Vycihwb3J0LT5kZXYsICJGYWlsZWQgdG8gZ2V0IFBTQyBjbG9jayBlbnRyeSFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXZfZGJnKHBvcnQtPmRldiwgIiVzICVzYWJsZVxuIiwgY2xrX25hbWUsIGVuYWJsZSA/ICJlbiIgOiAiZGlzIik7CisKKwlpZiAoZW5hYmxlKQorCQljbGtfZW5hYmxlKHBzY19jbGspOworCWVsc2UKKwkJY2xrX2Rpc2FibGUocHNjX2Nsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXBjNTEyeF9wc2NfZ2V0X2lycShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXBvcnQtPmlycWZsYWdzID0gSVJRRl9TSEFSRUQ7CisJcG9ydC0+aXJxID0gcHNjX2ZpZm9jX2lycTsKK30KKwogc3RhdGljIHN0cnVjdCBwc2Nfb3BzIG1wYzUxMnhfcHNjX29wcyA9IHsKIAkuZmlmb19pbml0ID0gbXBjNTEyeF9wc2NfZmlmb19pbml0LAogCS5yYXdfcnhfcmR5ID0gbXBjNTEyeF9wc2NfcmF3X3J4X3JkeSwKQEAgLTQxMCw2ICs2MDEsMTEgQEAKIAkuY3dfZGlzYWJsZV9pbnRzID0gbXBjNTEyeF9wc2NfY3dfZGlzYWJsZV9pbnRzLAogCS5jd19yZXN0b3JlX2ludHMgPSBtcGM1MTJ4X3BzY19jd19yZXN0b3JlX2ludHMsCiAJLmdldHVhcnRjbGsgPSBtcGM1MTJ4X2dldHVhcnRjbGssCisJLmNsb2NrID0gbXBjNTEyeF9wc2NfY2xvY2ssCisJLmZpZm9jX2luaXQgPSBtcGM1MTJ4X3BzY19maWZvY19pbml0LAorCS5maWZvY191bmluaXQgPSBtcGM1MTJ4X3BzY19maWZvY191bmluaXQsCisJLmdldF9pcnEgPSBtcGM1MTJ4X3BzY19nZXRfaXJxLAorCS5oYW5kbGVfaXJxID0gbXBjNTEyeF9wc2NfaGFuZGxlX2lycSwKIH07CiAjZW5kaWYKIApAQCAtNTE5LDEwICs3MTUsMTUgQEAKIAlzdHJ1Y3QgbXBjNTJ4eF9wc2MgX19pb21lbSAqcHNjID0gUFNDKHBvcnQpOwogCWludCByZXQ7CiAKKwlpZiAocHNjX29wcy0+Y2xvY2spIHsKKwkJcmV0ID0gcHNjX29wcy0+Y2xvY2socG9ydCwgMSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwogCS8qIFJlcXVlc3QgSVJRICovCiAJcmV0ID0gcmVxdWVzdF9pcnEocG9ydC0+aXJxLCBtcGM1Mnh4X3VhcnRfaW50LAotCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NLAotCQkibXBjNTJ4eF9wc2NfdWFydCIsIHBvcnQpOworCQkJICBwb3J0LT5pcnFmbGFncywgIm1wYzUyeHhfcHNjX3VhcnQiLCBwb3J0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC01NTMsNiArNzU0LDkgQEAKIAlwb3J0LT5yZWFkX3N0YXR1c19tYXNrID0gMDsKIAlvdXRfYmUxNigmcHNjLT5tcGM1Mnh4X3BzY19pbXIsIHBvcnQtPnJlYWRfc3RhdHVzX21hc2spOwogCisJaWYgKHBzY19vcHMtPmNsb2NrKQorCQlwc2Nfb3BzLT5jbG9jayhwb3J0LCAwKTsKKwogCS8qIFJlbGVhc2UgaW50ZXJydXB0ICovCiAJZnJlZV9pcnEocG9ydC0+aXJxLCBwb3J0KTsKIH0KQEAgLTg1MSwxNSArMTA1NSwxMiBAQAogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QKLW1wYzUyeHhfdWFydF9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorbXBjNXh4eF91YXJ0X3Byb2Nlc3NfaW50KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IGRldl9pZDsKIAl1bnNpZ25lZCBsb25nIHBhc3MgPSBJU1JfUEFTU19MSU1JVDsKIAl1bnNpZ25lZCBpbnQga2VlcGdvaW5nOwogCXU4IHN0YXR1czsKIAotCXNwaW5fbG9jaygmcG9ydC0+bG9jayk7Ci0KIAkvKiBXaGlsZSB3ZSBoYXZlIHN0dWZmIHRvIGRvLCB3ZSBjb250aW51ZSAqLwogCWRvIHsKIAkJLyogSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZyB0byBkbywgd2Ugc3RvcCAqLwpAQCAtODg2LDExICsxMDg3LDIzIEBACiAKIAl9IHdoaWxlIChrZWVwZ29pbmcpOwogCi0Jc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOwotCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgaXJxcmV0dXJuX3QKK21wYzUyeHhfdWFydF9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7CisJaXJxcmV0dXJuX3QgcmV0OworCisJc3Bpbl9sb2NrKCZwb3J0LT5sb2NrKTsKKworCXJldCA9IHBzY19vcHMtPmhhbmRsZV9pcnEocG9ydCk7CisKKwlzcGluX3VubG9jaygmcG9ydC0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qIENvbnNvbGUgKCBpZiBhcHBsaWNhYmxlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTE1Miw3ICsxMzY1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcG9ydC0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob3AtPm5vZGUsIDApOworCXBzY19vcHMtPmdldF9pcnEocG9ydCwgb3AtPm5vZGUpOwogCWlmIChwb3J0LT5pcnEgPT0gTk9fSVJRKSB7CiAJCWRldl9kYmcoJm9wLT5kZXYsICJDb3VsZCBub3QgZ2V0IGlycVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTE2MywxMCArMTM3Niw4IEBACiAKIAkvKiBBZGQgdGhlIHBvcnQgdG8gdGhlIHVhcnQgc3ViLXN5c3RlbSAqLwogCXJldCA9IHVhcnRfYWRkX29uZV9wb3J0KCZtcGM1Mnh4X3VhcnRfZHJpdmVyLCBwb3J0KTsKLQlpZiAocmV0KSB7Ci0JCWlycV9kaXNwb3NlX21hcHBpbmcocG9ydC0+aXJxKTsKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCX0KIAogCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgKHZvaWQgKilwb3J0KTsKIAlyZXR1cm4gMDsKQEAgLTExNzgsMTAgKzEzODksOCBAQAogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwogCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgTlVMTCk7CiAKLQlpZiAocG9ydCkgeworCWlmIChwb3J0KQogCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmbXBjNTJ4eF91YXJ0X2RyaXZlciwgcG9ydCk7Ci0JCWlycV9kaXNwb3NlX21hcHBpbmcocG9ydC0+aXJxKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyODgsNiArMTQ5NywxNSBAQAogCiAJbXBjNTJ4eF91YXJ0X29mX2VudW1lcmF0ZSgpOwogCisJLyoKKwkgKiBNYXAgdGhlIFBTQyBGSUZPIENvbnRyb2xsZXIgYW5kIGluaXQgaWYgb24gTVBDNTEyeC4KKwkgKi8KKwlpZiAocHNjX29wcy0+Zmlmb2NfaW5pdCkgeworCQlyZXQgPSBwc2Nfb3BzLT5maWZvY19pbml0KCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwogCXJldCA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTJ4eF91YXJ0X29mX2RyaXZlcik7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIgZmFpbGVkICglaSlcbiIsCkBAIC0xMzAyLDYgKzE1MjAsOSBAQAogc3RhdGljIHZvaWQgX19leGl0CiBtcGM1Mnh4X3VhcnRfZXhpdCh2b2lkKQogeworCWlmIChwc2Nfb3BzLT5maWZvY191bmluaXQpCisJCXBzY19vcHMtPmZpZm9jX3VuaW5pdCgpOworCiAJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzUyeHhfdWFydF9vZl9kcml2ZXIpOwogCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1wYzUyeHhfdWFydF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jIGIvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jCmluZGV4IDY4M2U2NmYuLmYwMjBkZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMKQEAgLTYzLDExICs2MywxNyBAQAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2lmZGVmIENPTkZJR19QUENfUE1BQwogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vcG1hY19mZWF0dXJlLmg+CiAjaW5jbHVkZSA8YXNtL2RiZG1hLmg+CiAjaW5jbHVkZSA8YXNtL21hY2lvLmg+CisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2RlZmluZSBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoeCkgKDApCisjZW5kaWYKIAogI2lmIGRlZmluZWQgKENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQogI2RlZmluZSBTVVBQT1JUX1NZU1JRCkBAIC04MywxMSArODksOSBAQAogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9ICJwbWFjX3ppbG9nOiAwLjYgKEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4pIjsKIE1PRFVMRV9BVVRIT1IoIkJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgUG93ZXJNYWMgc2VyaWFsIHBvcnRzLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBNYWMgYW5kIFBvd2VyTWFjIHNlcmlhbCBwb3J0cy4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2RlZmluZSBQV1JEQkcoZm10LCBhcmcuLi4pCXByaW50ayhLRVJOX0RFQlVHIGZtdCAsICMjIGFyZykKLQogI2lmZGVmIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HX1RUWVMKICNkZWZpbmUgUE1BQ1pJTE9HX01BSk9SCQlUVFlfTUFKT1IKICNkZWZpbmUgUE1BQ1pJTE9HX01JTk9SCQk2NApAQCAtMTUzLDggKzE1Nyw4IEBACiAJd3JpdGVfenNyZWcodWFwLCBSMTAsIHJlZ3NbUjEwXSk7CiAKIAkvKiBTZXQgVFgvUlggY29udHJvbHMgc2FucyB0aGUgZW5hYmxlIGJpdHMuICAqLwotICAgICAgIAl3cml0ZV96c3JlZyh1YXAsIFIzLCByZWdzW1IzXSAmIH5SeEVOQUJMRSk7Ci0gICAgICAgCXdyaXRlX3pzcmVnKHVhcCwgUjUsIHJlZ3NbUjVdICYgflR4RU5BQkxFKTsKKwl3cml0ZV96c3JlZyh1YXAsIFIzLCByZWdzW1IzXSAmIH5SeEVOQUJMRSk7CisJd3JpdGVfenNyZWcodWFwLCBSNSwgcmVnc1tSNV0gJiB+VHhFTkFCTEUpOwogCiAJLyogbm93IHNldCBSNyAicHJpbWUiIG9uIEVTQ0MgKi8KIAl3cml0ZV96c3JlZyh1YXAsIFIxNSwgcmVnc1tSMTVdIHwgRU44NUMzMCk7CkBAIC0yMDUsNyArMjA5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgcG16X21heWJlX3VwZGF0ZV9yZWdzKHN0cnVjdCB1YXJ0X3BtYWNfcG9ydCAqdWFwKQogewotICAgICAgIAlpZiAoIVpTX1JFR1NfSEVMRCh1YXApKSB7CisJaWYgKCFaU19SRUdTX0hFTEQodWFwKSkgewogCQlpZiAoWlNfVFhfQUNUSVZFKHVhcCkpIHsKIAkJCXVhcC0+ZmxhZ3MgfD0gUE1BQ1pJTE9HX0ZMQUdfUkVHU19IRUxEOwogCQl9IGVsc2UgewpAQCAtMjgxLDcgKzI4NSw3IEBACiAJCQlzcGluX2xvY2soJnVhcC0+cG9ydC5sb2NrKTsKIAkJCWlmIChzd2FsbG93KQogCQkJCWdvdG8gbmV4dF9jaGFyOwotIAkJfQorCQl9CiAjZW5kaWYgLyogQ09ORklHX01BR0lDX1NZU1JRICYmIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFICovCiAKIAkJLyogQSByZWFsIHNlcmlhbCBsaW5lLCByZWNvcmQgdGhlIGNoYXJhY3RlciBhbmQgc3RhdHVzLiAgKi8KQEAgLTMxNyw3ICszMjEsNyBAQAogCiAJCWlmICh1YXAtPnBvcnQuaWdub3JlX3N0YXR1c19tYXNrID09IDB4ZmYgfHwKIAkJICAgIChyMSAmIHVhcC0+cG9ydC5pZ25vcmVfc3RhdHVzX21hc2spID09IDApIHsKLQkJICAgIAl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCBmbGFnKTsKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgY2gsIGZsYWcpOwogCQl9CiAJCWlmIChyMSAmIFJ4X09WUikKIAkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOwpAQCAtMzQxLDcgKzM0NSw3IEBACiAJdWFwLT5jdXJyZWdzW1IxXSAmPSB+KEVYVF9JTlRfRU5BQiB8IFR4SU5UX0VOQUIgfCBSeElOVF9NQVNLKTsKIAl3cml0ZV96c3JlZyh1YXAsIFIxLCB1YXAtPmN1cnJlZ3NbUjFdKTsKIAl6c3N5bmModWFwKTsKLQlkZXZfZXJyKCZ1YXAtPmRldi0+b2ZkZXYuZGV2LCAicG16OiByeCBpcnEgZmxvb2QgIVxuIik7CisJcG16X2Vycm9yKCJwbXo6IHJ4IGlycSBmbG9vZCAhXG4iKTsKIAlyZXR1cm4gdHR5OwogfQogCkBAIC00NzAsNDcgKzQ3NCw0NyBAQAogCiAJdWFwX2EgPSBwbXpfZ2V0X3BvcnRfQSh1YXApOwogCXVhcF9iID0gdWFwX2EtPm1hdGU7Ci0gICAgICAgCi0gICAgICAgCXNwaW5fbG9jaygmdWFwX2EtPnBvcnQubG9jayk7CisKKwlzcGluX2xvY2soJnVhcF9hLT5wb3J0LmxvY2spOwogCXIzID0gcmVhZF96c3JlZyh1YXBfYSwgUjMpOwogCiAjaWZkZWYgREVCVUdfSEFSRAogCXBtel9kZWJ1ZygiaXJxLCByMzogJXhcbiIsIHIzKTsKICNlbmRpZgotICAgICAgIAkvKiBDaGFubmVsIEEgKi8KKwkvKiBDaGFubmVsIEEgKi8KIAl0dHkgPSBOVUxMOwotICAgICAgIAlpZiAocjMgJiAoQ0hBRVhUIHwgQ0hBVHhJUCB8IENIQVJ4SVApKSB7CisJaWYgKHIzICYgKENIQUVYVCB8IENIQVR4SVAgfCBDSEFSeElQKSkgewogCQl3cml0ZV96c3JlZyh1YXBfYSwgUjAsIFJFU19IX0lVUyk7CiAJCXpzc3luYyh1YXBfYSk7CQkKLSAgICAgICAJCWlmIChyMyAmIENIQUVYVCkKLSAgICAgICAJCQlwbXpfc3RhdHVzX2hhbmRsZSh1YXBfYSk7CisJCWlmIChyMyAmIENIQUVYVCkKKwkJCXBtel9zdGF0dXNfaGFuZGxlKHVhcF9hKTsKIAkJaWYgKHIzICYgQ0hBUnhJUCkKIAkJCXR0eSA9IHBtel9yZWNlaXZlX2NoYXJzKHVhcF9hKTsKLSAgICAgICAJCWlmIChyMyAmIENIQVR4SVApCi0gICAgICAgCQkJcG16X3RyYW5zbWl0X2NoYXJzKHVhcF9hKTsKLQkgICAgICAgIHJjID0gSVJRX0hBTkRMRUQ7Ci0gICAgICAgCX0KLSAgICAgICAJc3Bpbl91bmxvY2soJnVhcF9hLT5wb3J0LmxvY2spOworCQlpZiAocjMgJiBDSEFUeElQKQorCQkJcG16X3RyYW5zbWl0X2NoYXJzKHVhcF9hKTsKKwkJcmMgPSBJUlFfSEFORExFRDsKKwl9CisJc3Bpbl91bmxvY2soJnVhcF9hLT5wb3J0LmxvY2spOwogCWlmICh0dHkgIT0gTlVMTCkKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAogCWlmICh1YXBfYi0+bm9kZSA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAotICAgICAgIAlzcGluX2xvY2soJnVhcF9iLT5wb3J0LmxvY2spOworCXNwaW5fbG9jaygmdWFwX2ItPnBvcnQubG9jayk7CiAJdHR5ID0gTlVMTDsKIAlpZiAocjMgJiAoQ0hCRVhUIHwgQ0hCVHhJUCB8IENIQlJ4SVApKSB7CiAJCXdyaXRlX3pzcmVnKHVhcF9iLCBSMCwgUkVTX0hfSVVTKTsKIAkJenNzeW5jKHVhcF9iKTsKLSAgICAgICAJCWlmIChyMyAmIENIQkVYVCkKLSAgICAgICAJCQlwbXpfc3RhdHVzX2hhbmRsZSh1YXBfYik7Ci0gICAgICAgCSAgICAgICAJaWYgKHIzICYgQ0hCUnhJUCkKLSAgICAgICAJCQl0dHkgPSBwbXpfcmVjZWl2ZV9jaGFycyh1YXBfYik7Ci0gICAgICAgCQlpZiAocjMgJiBDSEJUeElQKQotICAgICAgIAkJCXBtel90cmFuc21pdF9jaGFycyh1YXBfYik7Ci0JICAgICAgIAlyYyA9IElSUV9IQU5ETEVEOwotICAgICAgIAl9Ci0gICAgICAgCXNwaW5fdW5sb2NrKCZ1YXBfYi0+cG9ydC5sb2NrKTsKKwkJaWYgKHIzICYgQ0hCRVhUKQorCQkJcG16X3N0YXR1c19oYW5kbGUodWFwX2IpOworCQlpZiAocjMgJiBDSEJSeElQKQorCQkJdHR5ID0gcG16X3JlY2VpdmVfY2hhcnModWFwX2IpOworCQlpZiAocjMgJiBDSEJUeElQKQorCQkJcG16X3RyYW5zbWl0X2NoYXJzKHVhcF9iKTsKKwkJcmMgPSBJUlFfSEFORExFRDsKKwl9CisJc3Bpbl91bmxvY2soJnVhcF9iLT5wb3J0LmxvY2spOwogCWlmICh0dHkgIT0gTlVMTCkKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIApAQCAtNzE4LDcgKzcyMiw3IEBACiAKIAkJaWYgKFpTX0lTX0FTTEVFUCh1YXApKQogCQkJcmV0dXJuOwotCQkvKiBOT1RFOiBOb3Qgc3ViamVjdCB0byAndHJhbnNtaXR0ZXIgYWN0aXZlJyBydWxlLiAgKi8gCisJCS8qIE5PVEU6IE5vdCBzdWJqZWN0IHRvICd0cmFuc21pdHRlciBhY3RpdmUnIHJ1bGUuICovCiAJCXdyaXRlX3pzcmVnKHVhcCwgUjE1LCB1YXAtPmN1cnJlZ3NbUjE1XSk7CiAJfQogfQpAQCAtNzQ4LDcgKzc1Miw3IEBACiAJaWYgKG5ld19yZWcgIT0gdWFwLT5jdXJyZWdzW1I1XSkgewogCQl1YXAtPmN1cnJlZ3NbUjVdID0gbmV3X3JlZzsKIAotCQkvKiBOT1RFOiBOb3Qgc3ViamVjdCB0byAndHJhbnNtaXR0ZXIgYWN0aXZlJyBydWxlLiAgKi8gCisJCS8qIE5PVEU6IE5vdCBzdWJqZWN0IHRvICd0cmFuc21pdHRlciBhY3RpdmUnIHJ1bGUuICovCiAJCWlmIChaU19JU19BU0xFRVAodWFwKSkKIAkJCXJldHVybjsKIAkJd3JpdGVfenNyZWcodWFwLCBSNSwgdWFwLT5jdXJyZWdzW1I1XSk7CkBAIC03NTcsNiArNzYxLDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKKwogLyoKICAqIFR1cm4gcG93ZXIgb24gb3Igb2ZmIHRvIHRoZSBTQ0MgYW5kIGFzc29jaWF0ZWQgc3R1ZmYKICAqIChwb3J0IGRyaXZlcnMsIG1vZGVtLCBJUiBwb3J0LCBldGMuKQpAQCAtNzkyLDYgKzc5OCwxNSBAQAogCXJldHVybiBkZWxheTsKIH0KIAorI2Vsc2UKKworc3RhdGljIGludCBwbXpfc2V0X3NjY19wb3dlcihzdHJ1Y3QgdWFydF9wbWFjX3BvcnQgKnVhcCwgaW50IHN0YXRlKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogIUNPTkZJR19QUENfUE1BQyAqLworCiAvKgogICogRml4WmVyb0J1Zy4uLi5Xb3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIFNDQyByZWNldmluZyBjaGFubmVsLgogICogSW5zcGlyZWQgZnJvbSBEYXJ3aW4gY29kZSwgMTUgU2VwdC4gMjAwMCAgLURhbk0KQEAgLTkwOCw3ICs5MjMsNiBAQAogCS8qIFJlbWVtYmVyIHN0YXR1cyBmb3IgRENEL0NUUyBjaGFuZ2VzICovCiAJdWFwLT5wcmV2X3N0YXR1cyA9IHJlYWRfenNyZWcodWFwLCBSMCk7CiAKLQogCXJldHVybiBwd3JfZGVsYXk7CiB9CiAKQEAgLTk1NSw5ICs5NjksOSBAQAogCX0JCiAKIAlwbXpfZ2V0X3BvcnRfQSh1YXApLT5mbGFncyB8PSBQTUFDWklMT0dfRkxBR19JU19JUlFfT047Ci0JaWYgKHJlcXVlc3RfaXJxKHVhcC0+cG9ydC5pcnEsIHBtel9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAiUG93ZXJNYWMgWmlsb2ciLCB1YXApKSB7Ci0JCWRldl9lcnIoJnVhcC0+ZGV2LT5vZmRldi5kZXYsCi0JCQkiVW5hYmxlIHRvIHJlZ2lzdGVyIHpzIGludGVycnVwdCBoYW5kbGVyLlxuIik7CisJaWYgKHJlcXVlc3RfaXJxKHVhcC0+cG9ydC5pcnEsIHBtel9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJIlNDQyIsIHVhcCkpIHsKKwkJcG16X2Vycm9yKCJVbmFibGUgdG8gcmVnaXN0ZXIgenMgaW50ZXJydXB0IGhhbmRsZXIuXG4iKTsKIAkJcG16X3NldF9zY2NfcG93ZXIodWFwLCAwKTsKIAkJbXV0ZXhfdW5sb2NrKCZwbXpfaXJxX211dGV4KTsKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTk4Myw3ICs5OTcsNyBAQAogCWlmICghWlNfSVNfRVhUQ0xLKHVhcCkpCiAJCXVhcC0+Y3VycmVnc1tSMV0gfD0gRVhUX0lOVF9FTkFCOwogCXdyaXRlX3pzcmVnKHVhcCwgUjEsIHVhcC0+Y3VycmVnc1tSMV0pOwotICAgICAgIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCiAJcG16X2RlYnVnKCJwbXo6IHN0YXJ0dXAoKSBkb25lLlxuIik7CiAKQEAgLTEwMDMsNyArMTAxNyw3IEBACiAJbXV0ZXhfbG9jaygmcG16X2lycV9tdXRleCk7CiAKIAkvKiBSZWxlYXNlIGludGVycnVwdCBoYW5kbGVyICovCi0gICAgICAgCWZyZWVfaXJxKHVhcC0+cG9ydC5pcnEsIHVhcCk7CisJZnJlZV9pcnEodWFwLT5wb3J0LmlycSwgdWFwKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAKQEAgLTEwNTEsNyArMTA2NSw2IEBACiB7CiAJaW50IGJyZzsKIAotCiAJLyogU3dpdGNoIHRvIGV4dGVybmFsIGNsb2NraW5nIGZvciBJckRBIGhpZ2ggY2xvY2sgcmF0ZXMuIFRoYXQKIAkgKiBjb2RlIGNvdWxkIGJlIHJlLXVzZWQgZm9yIE1pZGkgaW50ZXJmYWNlcyB3aXRoIGRpZmZlcmVudAogCSAqIG11bHRpcGxpZXJzCkBAIC0xMTk4LDcgKzEyMTEsNyBAQAogCXdoaWxlICgocmVhZF96c3JlZyh1YXAsIFIwKSAmIFR4X0JVRl9FTVApID09IDAKIAkgICAgICAgfHwgKHJlYWRfenNyZWcodWFwLCBSMSkgJiBBTExfU05UKSA9PSAwKSB7CiAJCWlmICgtLXQgPD0gMCkgewotCQkJZGV2X2VycigmdWFwLT5kZXYtPm9mZGV2LmRldiwgInRyYW5zbWl0dGVyIGRpZG4ndCBkcmFpblxuIik7CisJCQlwbXpfZXJyb3IoInRyYW5zbWl0dGVyIGRpZG4ndCBkcmFpblxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAkJdWRlbGF5KDEwKTsKQEAgLTEyMTQsNyArMTIyNyw3IEBACiAJCXJlYWRfenNkYXRhKHVhcCk7CiAJCW1kZWxheSgxMCk7CiAJCWlmICgtLXQgPD0gMCkgewotCQkJZGV2X2VycigmdWFwLT5kZXYtPm9mZGV2LmRldiwgInJlY2VpdmVyIGRpZG4ndCBkcmFpblxuIik7CisJCQlwbXpfZXJyb3IoInJlY2VpdmVyIGRpZG4ndCBkcmFpblxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC0xMjIzLDIwICsxMjM2LDE5IEBACiAJdWFwLT5jdXJyZWdzW1I1XSB8PSBEVFI7CiAJd3JpdGVfenNyZWcodWFwLCBSNSwgdWFwLT5jdXJyZWdzW1I1XSk7CiAJenNzeW5jKHVhcCk7Ci0gICAgICAgCW1kZWxheSgxKTsKKwltZGVsYXkoMSk7CiAKIAkvKiBTd2l0Y2ggU0NDIHRvIDE5MjAwICovCiAJcG16X2NvbnZlcnRfdG9fenModWFwLCBDUzgsIDAsIDE5MjAwKTsJCQogCXBtel9sb2FkX3pzcmVncyh1YXAsIHVhcC0+Y3VycmVncyk7Ci0gICAgICAgCW1kZWxheSgxKTsKKwltZGVsYXkoMSk7CiAKIAkvKiBXcml0ZSBnZXRfdmVyc2lvbiBjb21tYW5kIGJ5dGUgKi8KIAl3cml0ZV96c2RhdGEodWFwLCAxKTsKIAl0ID0gNTAwMDsKIAl3aGlsZSAoKHJlYWRfenNyZWcodWFwLCBSMCkgJiBSeF9DSF9BVikgPT0gMCkgewogCQlpZiAoLS10IDw9IDApIHsKLQkJCWRldl9lcnIoJnVhcC0+ZGV2LT5vZmRldi5kZXYsCi0JCQkJImlyZGFfc2V0dXAgdGltZWQgb3V0IG9uIGdldF92ZXJzaW9uIGJ5dGVcbiIpOworCQkJcG16X2Vycm9yKCJpcmRhX3NldHVwIHRpbWVkIG91dCBvbiBnZXRfdmVyc2lvbiBieXRlXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXVkZWxheSgxMCk7CkBAIC0xMjQ0LDggKzEyNTYsNyBAQAogCXZlcnNpb24gPSByZWFkX3pzZGF0YSh1YXApOwogCiAJaWYgKHZlcnNpb24gPCA0KSB7Ci0JCWRldl9pbmZvKCZ1YXAtPmRldi0+b2ZkZXYuZGV2LCAiSXJEQTogZG9uZ2xlIHZlcnNpb24gJWQgbm90IHN1cHBvcnRlZFxuIiwKLQkJCSB2ZXJzaW9uKTsKKwkJcG16X2luZm8oIklyREE6IGRvbmdsZSB2ZXJzaW9uICVkIG5vdCBzdXBwb3J0ZWRcbiIsIHZlcnNpb24pOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTEyNTQsMTggKzEyNjUsMTYgQEAKIAl0ID0gNTAwMDsKIAl3aGlsZSAoKHJlYWRfenNyZWcodWFwLCBSMCkgJiBSeF9DSF9BVikgPT0gMCkgewogCQlpZiAoLS10IDw9IDApIHsKLQkJCWRldl9lcnIoJnVhcC0+ZGV2LT5vZmRldi5kZXYsCi0JCQkJImlyZGFfc2V0dXAgdGltZWQgb3V0IG9uIHNwZWVkIG1vZGUgYnl0ZVxuIik7CisJCQlwbXpfZXJyb3IoImlyZGFfc2V0dXAgdGltZWQgb3V0IG9uIHNwZWVkIG1vZGUgYnl0ZVxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCQl1ZGVsYXkoMTApOwogCX0KIAl0ID0gcmVhZF96c2RhdGEodWFwKTsKIAlpZiAodCAhPSBjbWRieXRlKQotCQlkZXZfZXJyKCZ1YXAtPmRldi0+b2ZkZXYuZGV2LAotCQkJImlyZGFfc2V0dXAgc3BlZWQgbW9kZSBieXRlID0gJXggKCV4KVxuIiwgdCwgY21kYnl0ZSk7CisJCXBtel9lcnJvcigiaXJkYV9zZXR1cCBzcGVlZCBtb2RlIGJ5dGUgPSAleCAoJXgpXG4iLCB0LCBjbWRieXRlKTsKIAotCWRldl9pbmZvKCZ1YXAtPmRldi0+b2ZkZXYuZGV2LCAiSXJEQSBzZXR1cCBmb3IgJWxkIGJwcywgZG9uZ2xlIHZlcnNpb246ICVkXG4iLAorCXBtel9pbmZvKCJJckRBIHNldHVwIGZvciAlbGQgYnBzLCBkb25nbGUgdmVyc2lvbjogJWRcbiIsCiAJCSAqYmF1ZCwgdmVyc2lvbik7CiAKIAkodm9pZClyZWFkX3pzZGF0YSh1YXApOwpAQCAtMTQxNSw3ICsxNDI0LDcgQEAKIAl3cml0ZV96c2RhdGEodWFwLCBjKTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX0NPTlNPTEVfUE9MTCAqLwogCiBzdGF0aWMgc3RydWN0IHVhcnRfb3BzIHBtel9wb3BzID0gewogCS50eF9lbXB0eQk9CXBtel90eF9lbXB0eSwKQEAgLTE0NDAsNiArMTQ0OSw4IEBACiAjZW5kaWYKIH07CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKKwogLyoKICAqIFNldHVwIG9uZSBwb3J0IHN0cnVjdHVyZSBhZnRlciBwcm9iaW5nLCBIVyBpcyBkb3duIGF0IHRoaXMgcG9pbnQsCiAgKiBVbmxpa2Ugc3Vuemlsb2csIHdlIGRvbid0IG5lZWQgdG8gcHJlLWluaXQgdGhlIHNwaW5sb2NrIGFzIHdlIGRvbid0CkBAIC0xNDYzLDcgKzE0NzQsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl1YXAtPnBvcnQubWFwYmFzZSA9IHJfcG9ydHMuc3RhcnQ7CiAJdWFwLT5wb3J0Lm1lbWJhc2UgPSBpb3JlbWFwKHVhcC0+cG9ydC5tYXBiYXNlLCAweDEwMDApOwotICAgICAgCisKIAl1YXAtPmNvbnRyb2xfcmVnID0gdWFwLT5wb3J0Lm1lbWJhc2U7CiAJdWFwLT5kYXRhX3JlZyA9IHVhcC0+Y29udHJvbF9yZWcgKyAweDEwOwogCQpAQCAtMTU5MCw3ICsxNjAxLDcgQEAKIH0KIAogLyoKLSAqIENhbGxlZCB1cG9uIG1hdGNoIHdpdGggYW4gZXNjYyBub2RlIGluIHRoZSBkZXZpdmUtdHJlZS4KKyAqIENhbGxlZCB1cG9uIG1hdGNoIHdpdGggYW4gZXNjYyBub2RlIGluIHRoZSBkZXZpY2UtdHJlZS4KICAqLwogc3RhdGljIGludCBwbXpfYXR0YWNoKHN0cnVjdCBtYWNpb19kZXYgKm1kZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewpAQCAtMTgxMiw3ICsxODIzLDcgQEAKIAkJcG16X3BvcnRzW2NvdW50XS5ub2RlCQk9IG5vZGVfYTsKIAkJcG16X3BvcnRzW2NvdW50KzFdLm5vZGUJCT0gbm9kZV9iOwogCQlwbXpfcG9ydHNbY291bnRdLnBvcnQubGluZQk9IGNvdW50OwotCQlwbXpfcG9ydHNbY291bnQrMV0ucG9ydC5saW5lICAgCT0gY291bnQrMTsKKwkJcG16X3BvcnRzW2NvdW50KzFdLnBvcnQubGluZQk9IGNvdW50KzE7CiAKIAkJLyoKIAkJICogU2V0dXAgdGhlIHBvcnRzIGZvciByZWFsCkBAIC0xODM2LDYgKzE4NDcsODggQEAKIAlyZXR1cm4gMDsKIH0KIAorI2Vsc2UKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NjX2FfcGRldiwgc2NjX2JfcGRldjsKKworc3RhdGljIGludCBfX2luaXQgcG16X2luaXRfcG9ydChzdHJ1Y3QgdWFydF9wbWFjX3BvcnQgKnVhcCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJfcG9ydHM7CisJaW50IGlycTsKKworCXJfcG9ydHMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UodWFwLT5ub2RlLCBJT1JFU09VUkNFX01FTSwgMCk7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycSh1YXAtPm5vZGUsIDApOworCWlmICghcl9wb3J0cyB8fCAhaXJxKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXVhcC0+cG9ydC5tYXBiYXNlICA9IHJfcG9ydHMtPnN0YXJ0OworCXVhcC0+cG9ydC5tZW1iYXNlICA9ICh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKikgcl9wb3J0cy0+c3RhcnQ7CisJdWFwLT5wb3J0LmlvdHlwZSAgID0gVVBJT19NRU07CisJdWFwLT5wb3J0LmlycSAgICAgID0gaXJxOworCXVhcC0+cG9ydC51YXJ0Y2xrICA9IFpTX0NMT0NLOworCXVhcC0+cG9ydC5maWZvc2l6ZSA9IDE7CisJdWFwLT5wb3J0Lm9wcyAgICAgID0gJnBtel9wb3BzOworCXVhcC0+cG9ydC50eXBlICAgICA9IFBPUlRfUE1BQ19aSUxPRzsKKwl1YXAtPnBvcnQuZmxhZ3MgICAgPSAwOworCisJdWFwLT5jb250cm9sX3JlZyAgID0gdWFwLT5wb3J0Lm1lbWJhc2U7CisJdWFwLT5kYXRhX3JlZyAgICAgID0gdWFwLT5jb250cm9sX3JlZyArIDQ7CisJdWFwLT5wb3J0X3R5cGUgICAgID0gMDsKKworCXBtel9jb252ZXJ0X3RvX3pzKHVhcCwgQ1M4LCAwLCA5NjAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwbXpfcHJvYmUodm9pZCkKK3sKKwlpbnQgZXJyOworCisJcG16X3BvcnRzX2NvdW50ID0gMDsKKworCXBtel9wb3J0c1swXS5tYXRlICAgICAgPSAmcG16X3BvcnRzWzFdOworCXBtel9wb3J0c1swXS5wb3J0LmxpbmUgPSAwOworCXBtel9wb3J0c1swXS5mbGFncyAgICAgPSBQTUFDWklMT0dfRkxBR19JU19DSEFOTkVMX0E7CisJcG16X3BvcnRzWzBdLm5vZGUgICAgICA9ICZzY2NfYV9wZGV2OworCWVyciA9IHBtel9pbml0X3BvcnQoJnBtel9wb3J0c1swXSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlwbXpfcG9ydHNfY291bnQrKzsKKworCXBtel9wb3J0c1sxXS5tYXRlICAgICAgPSAmcG16X3BvcnRzWzBdOworCXBtel9wb3J0c1sxXS5wb3J0LmxpbmUgPSAxOworCXBtel9wb3J0c1sxXS5mbGFncyAgICAgPSAwOworCXBtel9wb3J0c1sxXS5ub2RlICAgICAgPSAmc2NjX2JfcGRldjsKKwllcnIgPSBwbXpfaW5pdF9wb3J0KCZwbXpfcG9ydHNbMV0pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcG16X3BvcnRzX2NvdW50Kys7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcG16X2Rpc3Bvc2VfcG9ydChzdHJ1Y3QgdWFydF9wbWFjX3BvcnQgKnVhcCkKK3sKKwltZW1zZXQodWFwLCAwLCBzaXplb2Yoc3RydWN0IHVhcnRfcG1hY19wb3J0KSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBtel9hdHRhY2goc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwbXpfcG9ydHNfY291bnQ7IGkrKykKKwkJaWYgKHBtel9wb3J0c1tpXS5ub2RlID09IHBkZXYpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBfX2V4aXQgcG16X2RldGFjaChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogIUNPTkZJR19QUENfUE1BQyAqLworCiAjaWZkZWYgQ09ORklHX1NFUklBTF9QTUFDWklMT0dfQ09OU09MRQogCiBzdGF0aWMgdm9pZCBwbXpfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgY291bnQpOwpAQCAtMTg5NiwyOCArMTk4OSw0MSBAQAogCXJldHVybiByYzsKIH0KIAorI2lmZGVmIENPTkZJR19QUENfUE1BQworCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBwbXpfbWF0Y2hbXSA9IAogewogCXsKLQkubmFtZSAJCT0gImNoLWEiLAorCS5uYW1lCQk9ICJjaC1hIiwKIAl9LAogCXsKLQkubmFtZSAJCT0gImNoLWIiLAorCS5uYW1lCQk9ICJjaC1iIiwKIAl9LAogCXt9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKG9mLCBwbXpfbWF0Y2gpOwogCi1zdGF0aWMgc3RydWN0IG1hY2lvX2RyaXZlciBwbXpfZHJpdmVyID0gCi17CitzdGF0aWMgc3RydWN0IG1hY2lvX2RyaXZlciBwbXpfZHJpdmVyID0gewogCS5uYW1lIAkJPSAicG1hY196aWxvZyIsCiAJLm1hdGNoX3RhYmxlCT0gcG16X21hdGNoLAogCS5wcm9iZQkJPSBwbXpfYXR0YWNoLAogCS5yZW1vdmUJCT0gcG16X2RldGFjaCwKIAkuc3VzcGVuZAk9IHBtel9zdXNwZW5kLAotICAgICAgIAkucmVzdW1lCQk9IHBtel9yZXN1bWUsCisJLnJlc3VtZQkJPSBwbXpfcmVzdW1lLAogfTsKIAorI2Vsc2UKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcG16X2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKHBtel9kZXRhY2gpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAic2NjIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCisjZW5kaWYgLyogIUNPTkZJR19QUENfUE1BQyAqLworCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3Bteih2b2lkKQogewogCWludCByYywgaTsKQEAgLTE5NTIsMTkgKzIwNTgsMjcgQEAKIAkJCXBtel9kaXNwb3NlX3BvcnQoJnBtel9wb3J0c1tpXSk7CiAJCXJldHVybiByYzsKIAl9Ci0JCisKIAkvKgogCSAqIFRoZW4gd2UgcmVnaXN0ZXIgdGhlIG1hY2lvIGRyaXZlciBpdHNlbGYKIAkgKi8KKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKIAlyZXR1cm4gbWFjaW9fcmVnaXN0ZXJfZHJpdmVyKCZwbXpfZHJpdmVyKTsKKyNlbHNlCisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmcG16X2RyaXZlciwgcG16X2F0dGFjaCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcG16KHZvaWQpCiB7CiAJaW50IGk7CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKIAkvKiBHZXQgcmlkIG9mIG1hY2lvLWRyaXZlciAoZGV0YWNoIGZyb20gbWFjaW8pICovCiAJbWFjaW9fdW5yZWdpc3Rlcl9kcml2ZXIoJnBtel9kcml2ZXIpOworI2Vsc2UKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcG16X2RyaXZlcik7CisjZW5kaWYKIAogCWZvciAoaSA9IDA7IGkgPCBwbXpfcG9ydHNfY291bnQ7IGkrKykgewogCQlzdHJ1Y3QgdWFydF9wbWFjX3BvcnQgKnVwb3J0ID0gJnBtel9wb3J0c1tpXTsKQEAgLTIwMzEsMTAgKzIxNDUsMTAgQEAKIAkvKgogCSAqIFhTZXJ2ZSdzIGRlZmF1bHQgdG8gNTc2MDAgYnBzCiAJICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMSIpCi0JICAgIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMiIpCi0JICAgIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkKLQkgCWJhdWQgPSA1NzYwMDsKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMSwxIikKKwkgICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMSwyIikKKwkgICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKQorCQliYXVkID0gNTc2MDA7CiAKIAkvKgogCSAqIENoZWNrIHdoZXRoZXIgYW4gaW52YWxpZCB1YXJ0IG51bWJlciBoYXMgYmVlbiBzcGVjaWZpZWQsIGFuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5oIGIvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5oCmluZGV4IGY2ZTc3ZjEuLmNiYzM0ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmgKQEAgLTEsNyArMSwxNSBAQAogI2lmbmRlZiBfX1BNQUNfWklMT0dfSF9fCiAjZGVmaW5lIF9fUE1BQ19aSUxPR19IX18KIAotI2RlZmluZSBwbXpfZGVidWcoZm10LGFyZy4uLikJZGV2X2RiZygmdWFwLT5kZXYtPm9mZGV2LmRldiwgZm10LCAjIyBhcmcpCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCisjZGVmaW5lIHBtel9kZWJ1ZyhmbXQsIGFyZy4uLikJZGV2X2RiZygmdWFwLT5kZXYtPm9mZGV2LmRldiwgZm10LCAjIyBhcmcpCisjZGVmaW5lIHBtel9lcnJvcihmbXQsIGFyZy4uLikJZGV2X2VycigmdWFwLT5kZXYtPm9mZGV2LmRldiwgZm10LCAjIyBhcmcpCisjZGVmaW5lIHBtel9pbmZvKGZtdCwgYXJnLi4uKQlkZXZfaW5mbygmdWFwLT5kZXYtPm9mZGV2LmRldiwgZm10LCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBwbXpfZGVidWcoZm10LCBhcmcuLi4pCWRldl9kYmcoJnVhcC0+bm9kZS0+ZGV2LCBmbXQsICMjIGFyZykKKyNkZWZpbmUgcG16X2Vycm9yKGZtdCwgYXJnLi4uKQlkZXZfZXJyKCZ1YXAtPm5vZGUtPmRldiwgZm10LCAjIyBhcmcpCisjZGVmaW5lIHBtel9pbmZvKGZtdCwgYXJnLi4uKQlkZXZfaW5mbygmdWFwLT5ub2RlLT5kZXYsIGZtdCwgIyMgYXJnKQorI2VuZGlmCiAKIC8qCiAgKiBBdCBtb3N0IDIgRVNDQ3Mgd2l0aCAyIHBvcnRzIGVhY2gKQEAgLTE3LDYgKzI1LDcgQEAKIAlzdHJ1Y3QgdWFydF9wb3J0CQlwb3J0OwogCXN0cnVjdCB1YXJ0X3BtYWNfcG9ydAkJKm1hdGU7CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKIAkvKiBtYWNpb19kZXYgZm9yIHRoZSBlc2NjIGhvbGRpbmcgdGhpcyBwb3J0IChtYXliZSBiZSBudWxsIG9uCiAJICogZWFybHkgaW5pdGVkIHBvcnQpCiAJICovCkBAIC0yNSw2ICszNCw5IEBACiAJICogb2YgImVzY2MiIG5vZGUgKGllLiBjaC1hIG9yIGNoLWIpCiAJICovCiAJc3RydWN0IGRldmljZV9ub2RlCQkqbm9kZTsKKyNlbHNlCisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKm5vZGU7CisjZW5kaWYKIAogCS8qIFBvcnQgdHlwZSBhcyBvYnRhaW5lZCBmcm9tIGRldmljZSB0cmVlIChJUkRBLCBtb2RlbSwgLi4uKSAqLwogCWludAkJCQlwb3J0X3R5cGU7CkBAIC01NSwxMCArNjcsMTIgQEAKIAl2b2xhdGlsZSB1OAkJCV9faW9tZW0gKmNvbnRyb2xfcmVnOwogCXZvbGF0aWxlIHU4CQkJX19pb21lbSAqZGF0YV9yZWc7CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKIAl1bnNpZ25lZCBpbnQJCQl0eF9kbWFfaXJxOwogCXVuc2lnbmVkIGludAkJCXJ4X2RtYV9pcnE7CiAJdm9sYXRpbGUgc3RydWN0IGRiZG1hX3JlZ3MJX19pb21lbSAqdHhfZG1hX3JlZ3M7CiAJdm9sYXRpbGUgc3RydWN0IGRiZG1hX3JlZ3MJX19pb21lbSAqcnhfZG1hX3JlZ3M7CisjZW5kaWYKIAogCXN0cnVjdCBrdGVybWlvcwkJCXRlcm1pb3NfY2FjaGU7CiB9OwpAQCAtMTEzLDcgKzEyNyw3IEBACiAjZGVmaW5lIEJSR19UT19CUFMoYnJnLCBmcmVxKSAoKGZyZXEpIC8gMiAvICgoYnJnKSArIDIpKQogI2RlZmluZSBCUFNfVE9fQlJHKGJwcywgZnJlcSkgKCgoKGZyZXEpICsgKGJwcykpIC8gKDIgKiAoYnBzKSkpIC0gMikKIAotI2RlZmluZSBaU19DTE9DSyAgICAgICAgIDM2ODY0MDAgCS8qIFo4NTMwIFJUeEMgaW5wdXQgY2xvY2sgcmF0ZSAqLworI2RlZmluZSBaU19DTE9DSyAgICAgICAgIDM2ODY0MDAJLyogWjg1MzAgUlR4QyBpbnB1dCBjbG9jayByYXRlICovCiAKIC8qIFRoZSBaaWxvZyByZWdpc3RlciBzZXQgKi8KIApAQCAtMTcxLDcgKzE4NSw3IEBACiAKIC8qIFdyaXRlIFJlZ2lzdGVyIDMgKi8KIAotI2RlZmluZQlSeEVOQUJMRSAgICAgICAJMHgxCS8qIFJ4IEVuYWJsZSAqLworI2RlZmluZQlSeEVOQUJMRQkweDEJLyogUnggRW5hYmxlICovCiAjZGVmaW5lCVNZTkNfTF9JTkgJMHgyCS8qIFN5bmMgQ2hhcmFjdGVyIExvYWQgSW5oaWJpdCAqLwogI2RlZmluZQlBRERfU00JCTB4NAkvKiBBZGRyZXNzIFNlYXJjaCBNb2RlIChTRExDKSAqLwogI2RlZmluZQlSeENSQ19FTkFCCTB4OAkvKiBSeCBDUkMgRW5hYmxlICovCkBAIC0xODUsNyArMTk5LDcgQEAKIAogLyogV3JpdGUgUmVnaXN0ZXIgNCAqLwogCi0jZGVmaW5lCVBBUl9FTkFCICAgICAgIAkweDEJLyogUGFyaXR5IEVuYWJsZSAqLworI2RlZmluZQlQQVJfRU5BQgkweDEJLyogUGFyaXR5IEVuYWJsZSAqLwogI2RlZmluZQlQQVJfRVZFTgkweDIJLyogUGFyaXR5IEV2ZW4vT2RkKiAqLwogCiAjZGVmaW5lCVNZTkNfRU5BQgkwCS8qIFN5bmMgTW9kZXMgRW5hYmxlICovCkBAIC0yMTAsNyArMjI0LDcgQEAKICNkZWZpbmUJVHhDUkNfRU5BQgkweDEJLyogVHggQ1JDIEVuYWJsZSAqLwogI2RlZmluZQlSVFMJCTB4MgkvKiBSVFMgKi8KICNkZWZpbmUJU0RMQ19DUkMJMHg0CS8qIFNETEMvQ1JDLTE2ICovCi0jZGVmaW5lCVR4RU5BQkxFICAgICAgIAkweDgJLyogVHggRW5hYmxlICovCisjZGVmaW5lCVR4RU5BQkxFCTB4OAkvKiBUeCBFbmFibGUgKi8KICNkZWZpbmUJU05EX0JSSwkJMHgxMAkvKiBTZW5kIEJyZWFrICovCiAjZGVmaW5lCVR4NQkJMHgwCS8qIFR4IDUgYml0cyAob3IgbGVzcykvY2hhcmFjdGVyICovCiAjZGVmaW5lCVR4NwkJMHgyMAkvKiBUeCA3IGJpdHMvY2hhcmFjdGVyICovCkBAIC0zNzIsMTEgKzM4NiwxMSBAQAogI2RlZmluZSBaU19UWF9BQ1RJVkUoVVApCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19UWF9BQ1RJVkUpCiAjZGVmaW5lIFpTX1dBTlRTX01PREVNX1NUQVRVUyhVUCkJKChVUCktPmZsYWdzICYgUE1BQ1pJTE9HX0ZMQUdfTU9ERU1fU1RBVFVTKQogI2RlZmluZSBaU19JU19JUkRBKFVQKQkJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0lSREEpCi0jZGVmaW5lIFpTX0lTX0lOVE1PREVNKFVQKQkgICAgICAgCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0lOVE1PREVNKQorI2RlZmluZSBaU19JU19JTlRNT0RFTShVUCkJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0lOVE1PREVNKQogI2RlZmluZSBaU19IQVNfRE1BKFVQKQkJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0hBU19ETUEpCi0jZGVmaW5lIFpTX0lTX0FTTEVFUChVUCkgICAgICAgCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19BU0xFRVApCi0jZGVmaW5lIFpTX0lTX09QRU4oVVApICAgICAgIAkJKChVUCktPmZsYWdzICYgUE1BQ1pJTE9HX0ZMQUdfSVNfT1BFTikKLSNkZWZpbmUgWlNfSVNfSVJRX09OKFVQKSAgICAgICAJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0lSUV9PTikKLSNkZWZpbmUgWlNfSVNfRVhUQ0xLKFVQKSAgICAgICAJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0VYVENMSykKKyNkZWZpbmUgWlNfSVNfQVNMRUVQKFVQKQkJKChVUCktPmZsYWdzICYgUE1BQ1pJTE9HX0ZMQUdfSVNfQVNMRUVQKQorI2RlZmluZSBaU19JU19PUEVOKFVQKQkJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX09QRU4pCisjZGVmaW5lIFpTX0lTX0lSUV9PTihVUCkJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0lSUV9PTikKKyNkZWZpbmUgWlNfSVNfRVhUQ0xLKFVQKQkJKChVUCktPmZsYWdzICYgUE1BQ1pJTE9HX0ZMQUdfSVNfRVhUQ0xLKQogCiAjZW5kaWYgLyogX19QTUFDX1pJTE9HX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwppbmRleCA5NTQyMWZhLi5lOTFkYjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwpAQCAtNjk2LDExICs2OTYsMTEgQEAKIAkJaW5mby0+bXVsdGkgPSBpbmZvLT5xdWlyay0+bXVsdGk7CiAKIAlpZiAoaW5mby0+bXVsdGkgPiAxKQotCQltdWx0aV9jb25maWcobGluayk7CisJCWkgPSBtdWx0aV9jb25maWcobGluayk7CiAJZWxzZQotCQlzaW1wbGVfY29uZmlnKGxpbmspOworCQlpID0gc2ltcGxlX2NvbmZpZyhsaW5rKTsKIAotCWlmIChpbmZvLT5uZGV2ID09IDApCisJaWYgKGkgfHwgaW5mby0+bmRldiA9PSAwKQogCQlnb3RvIGZhaWxlZDsKIAogCS8qCkBAIC03MTUsNiArNzE1LDcgQEAKIAlyZXR1cm4gMDsKIAogZmFpbGVkOgorCWRldl93YXJuKCZsaW5rLT5kZXYsICJzZXJpYWxfY3M6IGZhaWxlZCB0byBpbml0aWFsaXplXG4iKTsKIAlzZXJpYWxfcmVtb3ZlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmggYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAppbmRleCAwZWZjZGVkLi5mN2QyNTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaApAQCAtNTE4LDM0ICs1MTgsNiBAQAogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZmZlODApCiAJCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUikmMHgwMSA/IDEgOiAwOyAvKiBTQ0kgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0MDAwMTUwKQotCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MTAgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4YTQwMDAxNDApCi0JCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUikmMHgwNCA/IDEgOiAwOyAvKiBJUkRBICovCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gU0NJRjApCi0JCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUikmMHgwNCA/IDEgOiAwOyAvKiBJUkRBICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gU0NJRjIpCi0JCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUikmMHgxMCA/IDEgOiAwOyAvKiBTQ0lGICovCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMikKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQkgIHJldHVybiBzY2lfaW4ocG9ydCxTQ3hTUikmMHgwMDEwID8gMSA6IDA7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0NDMwMDAwKQotCQlyZXR1cm4gc2NpX2luKHBvcnQsIFNDeFNSKSAmIDB4MDAwMyA/IDEgOiAwOwotCWVsc2UgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNDQzODAwMCkKLQkJcmV0dXJuIHNjaV9pbihwb3J0LCBTQ3hTUikgJiAweDAwMDMgPyAxIDogMDsKIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCkgIHx8IFwKQEAgLTU1OCwyMDcgKzUzMCwxNyBAQAogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCiAJCXJldHVybiBfX3Jhd19yZWFkYihTQ1NQVFIxKSYweDAxID8gMSA6IDA7IC8qIFNDSSAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlODAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSYweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMikKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTgwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikmMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NykKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNGIwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNGMwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNGQwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNjAwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmU2MTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTYyMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUyMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTMwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2KQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYwICovCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWRiKFBTRFIpICYgMHgwMiA/IDEgOiAwOyAvKiBTQ0lGMCAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkYihQQURSKSAmIDB4NDAgPyAxIDogMDsgLyogU0NJRjEgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTIwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZGIoUFdEUikgJiAweDA0ID8gMSA6IDA7IC8qIFNDSUYyICovCi0KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLSAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMCkgJiAweDAwMDggPyAxIDogMDsgLyogU0NJRjAgKi8KLSAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUxMDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMSkgJiAweDAwMjAgPyAxIDogMDsgLyogU0NJRjEgKi8KLSAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUyMDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRjIgKi8KLSAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNGUzMDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRjMgKi8KLSAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNGU0MDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSNCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRjQgKi8KLSAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNGU1MDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSNSkgJiAweDAwMDggPyAxIDogMDsgLyogU0NJRjUgKi8KLSAgICAgICAgcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQpCi0jICBkZWZpbmUgU0NGU1IgICAgMHgwMDEwCi0jICBkZWZpbmUgU0NBU1NSICAgMHgwMDE0Ci1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoKHBvcnQtPm1hcGJhc2UgKyBTQ0ZTUikpICAmIFNDSUZfQlJLID8gMSA6IDA7Ci0JaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGQSkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KChwb3J0LT5tYXBiYXNlICsgU0NBU1NSKSkgJiBTQ0lGX0JSSyA/IDEgOiAwOwotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMykKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLSAgICAgICAgIHJldHVybiBzY2lfaW4ocG9ydCwgU0NTUFRSKSYweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotfQogI2VsaWYgZGVmaW5lZChfX0g4MzAwSF9fKSB8fCBkZWZpbmVkKF9fSDgzMDBTX18pCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaW50IGNoID0gKHBvcnQtPm1hcGJhc2UgLSBTTVIwKSA+PiAzOwogCXJldHVybiAoSDgzMDBfU0NJX0RSKGNoKSAmIGg4MzAwX3NjaV9waW5zW2NoXS5yeCkgPyAxIDogMDsKIH0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykKKyNlbHNlIC8qIGRlZmF1bHQgY2FzZSBmb3Igbm9uLVNDSSBwcm9jZXNzb3JzICovCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTA4MDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGL0lSREEgKi8KLQotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwKQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmY5MjMwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZjkyNDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmOTI1MDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUxMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlYTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmViMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWMwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlZDAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIzKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmVlMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjQpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWYwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSNSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNikgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzKQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZTgwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlODgwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmU5MDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZTk4MDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIzKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxKQotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZUEwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlQTgwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmVCMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZUI4MDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIzKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0jZW5kaWYKLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSkKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGY4NDAwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4Zjg0MTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmODQyMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmMzMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmYzQwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZjNTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmM2MDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvdWFydGxpdGUuYyBiL2RyaXZlcnMvc2VyaWFsL3VhcnRsaXRlLmMKaW5kZXggMzc3ZjI3MS4uYWIyYWIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvdWFydGxpdGUuYworKysgYi9kcml2ZXJzL3NlcmlhbC91YXJ0bGl0ZS5jCkBAIC0zOTQsNyArMzk0LDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCB1bGl0ZV9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKK3N0YXRpYyBpbnQgX19kZXZpbml0IHVsaXRlX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CiAJaW50IGJhdWQgPSA5NjAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9pbnRjLmMgYi9kcml2ZXJzL3NoL2ludGMuYwppbmRleCBkNWQ3ZjIzLi4zYTVhMTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL2ludGMuYworKysgYi9kcml2ZXJzL3NoL2ludGMuYwpAQCAtMjU5LDYgKzI1OSw0MyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgKCppbnRjX2VuYWJsZV9ub3ByaW9fZm5zW10pKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJdW5zaWduZWQgbG9uZyBoYW5kbGUsCisJCQkJCXZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nKSwKKwkJCQkJdW5zaWduZWQgaW50IGlycSkgPSB7CisJW01PREVfRU5BQkxFX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCisJW01PREVfTUFTS19SRUddID0gaW50Y19tb2RlX3plcm8sCisJW01PREVfRFVBTF9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAorCVtNT0RFX1BSSU9fUkVHXSA9IGludGNfbW9kZV9maWVsZCwKKwlbTU9ERV9QQ0xSX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCit9OworCitzdGF0aWMgdm9pZCBpbnRjX2VuYWJsZV9kaXNhYmxlKHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCXVuc2lnbmVkIGxvbmcgaGFuZGxlLCBpbnQgZG9fZW5hYmxlKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBpbnQgY3B1OworCXZvaWQgKCpmbikodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywKKwkJICAgdm9pZCAoKikodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyksCisJCSAgIHVuc2lnbmVkIGludCk7CisKKwlpZiAoZG9fZW5hYmxlKSB7CisJCWZvciAoY3B1ID0gMDsgY3B1IDwgU01QX05SKGQsIF9JTlRDX0FERFJfRShoYW5kbGUpKTsgY3B1KyspIHsKKwkJCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0UoaGFuZGxlKSwgY3B1KTsKKwkJCWZuID0gaW50Y19lbmFibGVfbm9wcmlvX2Zuc1tfSU5UQ19NT0RFKGhhbmRsZSldOworCQkJZm4oYWRkciwgaGFuZGxlLCBpbnRjX3JlZ19mbnNbX0lOVENfRk4oaGFuZGxlKV0sIDApOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBTTVBfTlIoZCwgX0lOVENfQUREUl9EKGhhbmRsZSkpOyBjcHUrKykgeworCQkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpLCBjcHUpOworCQkJZm4gPSBpbnRjX2Rpc2FibGVfZm5zW19JTlRDX01PREUoaGFuZGxlKV07CisJCQlmbihhZGRyLCBoYW5kbGUsIGludGNfcmVnX2Zuc1tfSU5UQ19GTihoYW5kbGUpXSwgMCk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBpbnQgaW50Y19zZXRfd2FrZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pCiB7CiAJcmV0dXJuIDA7IC8qIGFsbG93IHdha2V1cCwgYnV0IHNldHVwIGhhcmR3YXJlIGluIGludGNfc3VzcGVuZCgpICovCkBAIC00MDAsMTEgKzQzNywxMSBAQAogc3RhdGljIGludGNfZW51bSBfX2luaXQgaW50Y19ncnBfaWQoc3RydWN0IGludGNfZGVzYyAqZGVzYywKIAkJCQkgICAgaW50Y19lbnVtIGVudW1faWQpCiB7Ci0Jc3RydWN0IGludGNfZ3JvdXAgKmcgPSBkZXNjLT5ncm91cHM7CisJc3RydWN0IGludGNfZ3JvdXAgKmcgPSBkZXNjLT5ody5ncm91cHM7CiAJdW5zaWduZWQgaW50IGksIGo7CiAKLQlmb3IgKGkgPSAwOyBnICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX2dyb3VwczsgaSsrKSB7Ci0JCWcgPSBkZXNjLT5ncm91cHMgKyBpOworCWZvciAoaSA9IDA7IGcgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+aHcubnJfZ3JvdXBzOyBpKyspIHsKKwkJZyA9IGRlc2MtPmh3Lmdyb3VwcyArIGk7CiAKIAkJZm9yIChqID0gMDsgZy0+ZW51bV9pZHNbal07IGorKykgewogCQkJaWYgKGctPmVudW1faWRzW2pdICE9IGVudW1faWQpCkBAIC00MTcsMTkgKzQ1NCwyMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX21hc2tfZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAotCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCQkgIGludGNfZW51bSBlbnVtX2lkLCBpbnQgZG9fZ3JwcykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IF9pbnRjX21hc2tfZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAorCQkJCQkgICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkJICAgaW50Y19lbnVtIGVudW1faWQsCisJCQkJCSAgIHVuc2lnbmVkIGludCAqcmVnX2lkeCwKKwkJCQkJICAgdW5zaWduZWQgaW50ICpmbGRfaWR4KQogewotCXN0cnVjdCBpbnRjX21hc2tfcmVnICptciA9IGRlc2MtPm1hc2tfcmVnczsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIG1vZGU7CisJc3RydWN0IGludGNfbWFza19yZWcgKm1yID0gZGVzYy0+aHcubWFza19yZWdzOworCXVuc2lnbmVkIGludCBmbiwgbW9kZTsKIAl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKIAotCWZvciAoaSA9IDA7IG1yICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX21hc2tfcmVnczsgaSsrKSB7Ci0JCW1yID0gZGVzYy0+bWFza19yZWdzICsgaTsKKwl3aGlsZSAobXIgJiYgZW51bV9pZCAmJiAqcmVnX2lkeCA8IGRlc2MtPmh3Lm5yX21hc2tfcmVncykgeworCQltciA9IGRlc2MtPmh3Lm1hc2tfcmVncyArICpyZWdfaWR4OwogCi0JCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKG1yLT5lbnVtX2lkcyk7IGorKykgewotCQkJaWYgKG1yLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQorCQlmb3IgKDsgKmZsZF9pZHggPCBBUlJBWV9TSVpFKG1yLT5lbnVtX2lkcyk7ICgqZmxkX2lkeCkrKykgeworCQkJaWYgKG1yLT5lbnVtX2lkc1sqZmxkX2lkeF0gIT0gZW51bV9pZCkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKG1yLT5zZXRfcmVnICYmIG1yLT5jbHJfcmVnKSB7CkBAIC00NTUsMjkgKzQ5NCw0OSBAQAogCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2UpLAogCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2QpLAogCQkJCQkxLAotCQkJCQkobXItPnJlZ193aWR0aCAtIDEpIC0gaik7CisJCQkJCShtci0+cmVnX3dpZHRoIC0gMSkgLSAqZmxkX2lkeCk7CiAJCX0KKworCQkqZmxkX2lkeCA9IDA7CisJCSgqcmVnX2lkeCkrKzsKIAl9CiAKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19tYXNrX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKKwkJCQkJICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkJICBpbnRjX2VudW0gZW51bV9pZCwgaW50IGRvX2dycHMpCit7CisJdW5zaWduZWQgaW50IGkgPSAwOworCXVuc2lnbmVkIGludCBqID0gMDsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJcmV0ID0gX2ludGNfbWFza19kYXRhKGRlc2MsIGQsIGVudW1faWQsICZpLCAmaik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCWlmIChkb19ncnBzKQogCQlyZXR1cm4gaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgaW50Y19ncnBfaWQoZGVzYywgZW51bV9pZCksIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGludGNfcHJpb19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCi0JCQkJCSAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCi0JCQkJCSAgaW50Y19lbnVtIGVudW1faWQsIGludCBkb19ncnBzKQorc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgX2ludGNfcHJpb19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCQkgICBpbnRjX2VudW0gZW51bV9pZCwKKwkJCQkJICAgdW5zaWduZWQgaW50ICpyZWdfaWR4LAorCQkJCQkgICB1bnNpZ25lZCBpbnQgKmZsZF9pZHgpCiB7Ci0Jc3RydWN0IGludGNfcHJpb19yZWcgKnByID0gZGVzYy0+cHJpb19yZWdzOwotCXVuc2lnbmVkIGludCBpLCBqLCBmbiwgbW9kZSwgYml0OworCXN0cnVjdCBpbnRjX3ByaW9fcmVnICpwciA9IGRlc2MtPmh3LnByaW9fcmVnczsKKwl1bnNpZ25lZCBpbnQgZm4sIG4sIG1vZGUsIGJpdDsKIAl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKIAotCWZvciAoaSA9IDA7IHByICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX3ByaW9fcmVnczsgaSsrKSB7Ci0JCXByID0gZGVzYy0+cHJpb19yZWdzICsgaTsKKwl3aGlsZSAocHIgJiYgZW51bV9pZCAmJiAqcmVnX2lkeCA8IGRlc2MtPmh3Lm5yX3ByaW9fcmVncykgeworCQlwciA9IGRlc2MtPmh3LnByaW9fcmVncyArICpyZWdfaWR4OwogCi0JCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHByLT5lbnVtX2lkcyk7IGorKykgewotCQkJaWYgKHByLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQorCQlmb3IgKDsgKmZsZF9pZHggPCBBUlJBWV9TSVpFKHByLT5lbnVtX2lkcyk7ICgqZmxkX2lkeCkrKykgeworCQkJaWYgKHByLT5lbnVtX2lkc1sqZmxkX2lkeF0gIT0gZW51bV9pZCkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKHByLT5zZXRfcmVnICYmIHByLT5jbHJfcmVnKSB7CkBAIC00OTUsMzQgKzU1NCw3OSBAQAogCQkJfQogCiAJCQlmbiArPSAocHItPnJlZ193aWR0aCA+PiAzKSAtIDE7CisJCQluID0gKmZsZF9pZHggKyAxOwogCi0JCQlCVUdfT04oKGogKyAxKSAqIHByLT5maWVsZF93aWR0aCA+IHByLT5yZWdfd2lkdGgpOworCQkJQlVHX09OKG4gKiBwci0+ZmllbGRfd2lkdGggPiBwci0+cmVnX3dpZHRoKTsKIAotCQkJYml0ID0gcHItPnJlZ193aWR0aCAtICgoaiArIDEpICogcHItPmZpZWxkX3dpZHRoKTsKKwkJCWJpdCA9IHByLT5yZWdfd2lkdGggLSAobiAqIHByLT5maWVsZF93aWR0aCk7CiAKIAkJCXJldHVybiBfSU5UQ19NSyhmbiwgbW9kZSwKIAkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19lKSwKIAkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19kKSwKIAkJCQkJcHItPmZpZWxkX3dpZHRoLCBiaXQpOwogCQl9CisKKwkJKmZsZF9pZHggPSAwOworCQkoKnJlZ19pZHgpKys7CiAJfQogCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGludGNfcHJpb19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJCSAgaW50Y19lbnVtIGVudW1faWQsIGludCBkb19ncnBzKQoreworCXVuc2lnbmVkIGludCBpID0gMDsKKwl1bnNpZ25lZCBpbnQgaiA9IDA7CisJdW5zaWduZWQgaW50IHJldDsKKworCXJldCA9IF9pbnRjX3ByaW9fZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAmaSwgJmopOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlpZiAoZG9fZ3JwcykKIAkJcmV0dXJuIGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGludGNfZ3JwX2lkKGRlc2MsIGVudW1faWQpLCAwKTsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgaW50Y19lbmFibGVfZGlzYWJsZV9lbnVtKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkJICAgIGludGNfZW51bSBlbnVtX2lkLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGludCBpLCBqLCBkYXRhOworCisJLyogZ28gdGhyb3VnaCBhbmQgZW5hYmxlL2Rpc2FibGUgYWxsIG1hc2sgYml0cyAqLworCWkgPSBqID0gMDsKKwlkbyB7CisJCWRhdGEgPSBfaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgJmksICZqKTsKKwkJaWYgKGRhdGEpCisJCQlpbnRjX2VuYWJsZV9kaXNhYmxlKGQsIGRhdGEsIGVuYWJsZSk7CisJCWorKzsKKwl9IHdoaWxlIChkYXRhKTsKKworCS8qIGdvIHRocm91Z2ggYW5kIGVuYWJsZS9kaXNhYmxlIGFsbCBwcmlvcml0eSBmaWVsZHMgKi8KKwlpID0gaiA9IDA7CisJZG8geworCQlkYXRhID0gX2ludGNfcHJpb19kYXRhKGRlc2MsIGQsIGVudW1faWQsICZpLCAmaik7CisJCWlmIChkYXRhKQorCQkJaW50Y19lbmFibGVfZGlzYWJsZShkLCBkYXRhLCBlbmFibGUpOworCisJCWorKzsKKwl9IHdoaWxlIChkYXRhKTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19hY2tfZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAogCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAogCQkJCQkgIGludGNfZW51bSBlbnVtX2lkKQogewotCXN0cnVjdCBpbnRjX21hc2tfcmVnICptciA9IGRlc2MtPmFja19yZWdzOworCXN0cnVjdCBpbnRjX21hc2tfcmVnICptciA9IGRlc2MtPmh3LmFja19yZWdzOwogCXVuc2lnbmVkIGludCBpLCBqLCBmbiwgbW9kZTsKIAl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKIAotCWZvciAoaSA9IDA7IG1yICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX2Fja19yZWdzOyBpKyspIHsKLQkJbXIgPSBkZXNjLT5hY2tfcmVncyArIGk7CisJZm9yIChpID0gMDsgbXIgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+aHcubnJfYWNrX3JlZ3M7IGkrKykgeworCQltciA9IGRlc2MtPmh3LmFja19yZWdzICsgaTsKIAogCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShtci0+ZW51bV9pZHMpOyBqKyspIHsKIAkJCWlmIChtci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKQEAgLTU0OSwxMSArNjUzLDExIEBACiAJCQkJCSAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAogCQkJCQkgICBpbnRjX2VudW0gZW51bV9pZCkKIHsKLQlzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgKnNyID0gZGVzYy0+c2Vuc2VfcmVnczsKKwlzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgKnNyID0gZGVzYy0+aHcuc2Vuc2VfcmVnczsKIAl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIGJpdDsKIAotCWZvciAoaSA9IDA7IHNyICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX3NlbnNlX3JlZ3M7IGkrKykgewotCQlzciA9IGRlc2MtPnNlbnNlX3JlZ3MgKyBpOworCWZvciAoaSA9IDA7IHNyICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPmh3Lm5yX3NlbnNlX3JlZ3M7IGkrKykgeworCQlzciA9IGRlc2MtPmh3LnNlbnNlX3JlZ3MgKyBpOwogCiAJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNyLT5lbnVtX2lkcyk7IGorKykgewogCQkJaWYgKHNyLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQpAQCAtNjU2LDcgKzc2MCw3IEBACiAJLyogaXJxIHNob3VsZCBiZSBkaXNhYmxlZCBieSBkZWZhdWx0ICovCiAJZC0+Y2hpcC5tYXNrKGlycSk7CiAKLQlpZiAoZGVzYy0+YWNrX3JlZ3MpCisJaWYgKGRlc2MtPmh3LmFja19yZWdzKQogCQlhY2tfaGFuZGxlW2lycV0gPSBpbnRjX2Fja19kYXRhKGRlc2MsIGQsIGVudW1faWQpOwogfQogCkBAIC02ODQsNiArNzg4LDcgQEAKIHZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKQogewogCXVuc2lnbmVkIGludCBpLCBrLCBzbXA7CisJc3RydWN0IGludGNfaHdfZGVzYyAqaHcgPSAmZGVzYy0+aHc7CiAJc3RydWN0IGludGNfZGVzY19pbnQgKmQ7CiAKIAlkID0ga3phbGxvYyhzaXplb2YoKmQpLCBHRlBfTk9XQUlUKTsKQEAgLTY5MSwxMCArNzk2LDEwIEBACiAJSU5JVF9MSVNUX0hFQUQoJmQtPmxpc3QpOwogCWxpc3RfYWRkKCZkLT5saXN0LCAmaW50Y19saXN0KTsKIAotCWQtPm5yX3JlZyA9IGRlc2MtPm1hc2tfcmVncyA/IGRlc2MtPm5yX21hc2tfcmVncyAqIDIgOiAwOwotCWQtPm5yX3JlZyArPSBkZXNjLT5wcmlvX3JlZ3MgPyBkZXNjLT5ucl9wcmlvX3JlZ3MgKiAyIDogMDsKLQlkLT5ucl9yZWcgKz0gZGVzYy0+c2Vuc2VfcmVncyA/IGRlc2MtPm5yX3NlbnNlX3JlZ3MgOiAwOwotCWQtPm5yX3JlZyArPSBkZXNjLT5hY2tfcmVncyA/IGRlc2MtPm5yX2Fja19yZWdzIDogMDsKKwlkLT5ucl9yZWcgPSBody0+bWFza19yZWdzID8gaHctPm5yX21hc2tfcmVncyAqIDIgOiAwOworCWQtPm5yX3JlZyArPSBody0+cHJpb19yZWdzID8gaHctPm5yX3ByaW9fcmVncyAqIDIgOiAwOworCWQtPm5yX3JlZyArPSBody0+c2Vuc2VfcmVncyA/IGh3LT5ucl9zZW5zZV9yZWdzIDogMDsKKwlkLT5ucl9yZWcgKz0gaHctPmFja19yZWdzID8gaHctPm5yX2Fja19yZWdzIDogMDsKIAogCWQtPnJlZyA9IGt6YWxsb2MoZC0+bnJfcmVnICogc2l6ZW9mKCpkLT5yZWcpLCBHRlBfTk9XQUlUKTsKICNpZmRlZiBDT05GSUdfU01QCkBAIC03MDIsMzAgKzgwNywzMSBAQAogI2VuZGlmCiAJayA9IDA7CiAKLQlpZiAoZGVzYy0+bWFza19yZWdzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl9tYXNrX3JlZ3M7IGkrKykgewotCQkJc21wID0gSVNfU01QKGRlc2MtPm1hc2tfcmVnc1tpXSk7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPm1hc2tfcmVnc1tpXS5zZXRfcmVnLCBzbXApOwotCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5tYXNrX3JlZ3NbaV0uY2xyX3JlZywgc21wKTsKKwlpZiAoaHctPm1hc2tfcmVncykgeworCQlmb3IgKGkgPSAwOyBpIDwgaHctPm5yX21hc2tfcmVnczsgaSsrKSB7CisJCQlzbXAgPSBJU19TTVAoaHctPm1hc2tfcmVnc1tpXSk7CisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGh3LT5tYXNrX3JlZ3NbaV0uc2V0X3JlZywgc21wKTsKKwkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgaHctPm1hc2tfcmVnc1tpXS5jbHJfcmVnLCBzbXApOwogCQl9CiAJfQogCi0JaWYgKGRlc2MtPnByaW9fcmVncykgewotCQlkLT5wcmlvID0ga3phbGxvYyhkZXNjLT5ucl92ZWN0b3JzICogc2l6ZW9mKCpkLT5wcmlvKSwgR0ZQX05PV0FJVCk7CisJaWYgKGh3LT5wcmlvX3JlZ3MpIHsKKwkJZC0+cHJpbyA9IGt6YWxsb2MoaHctPm5yX3ZlY3RvcnMgKiBzaXplb2YoKmQtPnByaW8pLAorCQkJCSAgR0ZQX05PV0FJVCk7CiAKLQkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3ByaW9fcmVnczsgaSsrKSB7Ci0JCQlzbXAgPSBJU19TTVAoZGVzYy0+cHJpb19yZWdzW2ldKTsKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+cHJpb19yZWdzW2ldLnNldF9yZWcsIHNtcCk7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPnByaW9fcmVnc1tpXS5jbHJfcmVnLCBzbXApOworCQlmb3IgKGkgPSAwOyBpIDwgaHctPm5yX3ByaW9fcmVnczsgaSsrKSB7CisJCQlzbXAgPSBJU19TTVAoaHctPnByaW9fcmVnc1tpXSk7CisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGh3LT5wcmlvX3JlZ3NbaV0uc2V0X3JlZywgc21wKTsKKwkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgaHctPnByaW9fcmVnc1tpXS5jbHJfcmVnLCBzbXApOwogCQl9CiAJfQogCi0JaWYgKGRlc2MtPnNlbnNlX3JlZ3MpIHsKLQkJZC0+c2Vuc2UgPSBremFsbG9jKGRlc2MtPm5yX3ZlY3RvcnMgKiBzaXplb2YoKmQtPnNlbnNlKSwgR0ZQX05PV0FJVCk7CisJaWYgKGh3LT5zZW5zZV9yZWdzKSB7CisJCWQtPnNlbnNlID0ga3phbGxvYyhody0+bnJfdmVjdG9ycyAqIHNpemVvZigqZC0+c2Vuc2UpLAorCQkJCSAgIEdGUF9OT1dBSVQpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl9zZW5zZV9yZWdzOyBpKyspIHsKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+c2Vuc2VfcmVnc1tpXS5yZWcsIDApOwotCQl9CisJCWZvciAoaSA9IDA7IGkgPCBody0+bnJfc2Vuc2VfcmVnczsgaSsrKQorCQkJayArPSBzYXZlX3JlZyhkLCBrLCBody0+c2Vuc2VfcmVnc1tpXS5yZWcsIDApOwogCX0KIAogCWQtPmNoaXAubmFtZSA9IGRlc2MtPm5hbWU7CkBAIC03MzgsMTggKzg0NCwyNiBAQAogCWQtPmNoaXAuc2V0X3R5cGUgPSBpbnRjX3NldF9zZW5zZTsKIAlkLT5jaGlwLnNldF93YWtlID0gaW50Y19zZXRfd2FrZTsKIAotCWlmIChkZXNjLT5hY2tfcmVncykgewotCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfYWNrX3JlZ3M7IGkrKykKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+YWNrX3JlZ3NbaV0uc2V0X3JlZywgMCk7CisJaWYgKGh3LT5hY2tfcmVncykgeworCQlmb3IgKGkgPSAwOyBpIDwgaHctPm5yX2Fja19yZWdzOyBpKyspCisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGh3LT5hY2tfcmVnc1tpXS5zZXRfcmVnLCAwKTsKIAogCQlkLT5jaGlwLm1hc2tfYWNrID0gaW50Y19tYXNrX2FjazsKIAl9CiAKKwkvKiBkaXNhYmxlIGJpdHMgbWF0Y2hpbmcgZm9yY2VfZGlzYWJsZSBiZWZvcmUgcmVnaXN0ZXJpbmcgaXJxcyAqLworCWlmIChkZXNjLT5mb3JjZV9kaXNhYmxlKQorCQlpbnRjX2VuYWJsZV9kaXNhYmxlX2VudW0oZGVzYywgZCwgZGVzYy0+Zm9yY2VfZGlzYWJsZSwgMCk7CisKKwkvKiBkaXNhYmxlIGJpdHMgbWF0Y2hpbmcgZm9yY2VfZW5hYmxlIGJlZm9yZSByZWdpc3RlcmluZyBpcnFzICovCisJaWYgKGRlc2MtPmZvcmNlX2VuYWJsZSkKKwkJaW50Y19lbmFibGVfZGlzYWJsZV9lbnVtKGRlc2MsIGQsIGRlc2MtPmZvcmNlX2VuYWJsZSwgMCk7CisKIAlCVUdfT04oayA+IDI1Nik7IC8qIF9JTlRDX0FERFJfRSgpIGFuZCBfSU5UQ19BRERSX0QoKSBhcmUgOCBiaXRzICovCiAKIAkvKiByZWdpc3RlciB0aGUgdmVjdG9ycyBvbmUgYnkgb25lICovCi0JZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3ZlY3RvcnM7IGkrKykgewotCQlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0ID0gZGVzYy0+dmVjdG9ycyArIGk7CisJZm9yIChpID0gMDsgaSA8IGh3LT5ucl92ZWN0b3JzOyBpKyspIHsKKwkJc3RydWN0IGludGNfdmVjdCAqdmVjdCA9IGh3LT52ZWN0b3JzICsgaTsKIAkJdW5zaWduZWQgaW50IGlycSA9IGV2dDJpcnEodmVjdC0+dmVjdCk7CiAJCXN0cnVjdCBpcnFfZGVzYyAqaXJxX2Rlc2M7CiAKQEAgLTc2NCw4ICs4NzgsOCBAQAogCiAJCWludGNfcmVnaXN0ZXJfaXJxKGRlc2MsIGQsIHZlY3QtPmVudW1faWQsIGlycSk7CiAKLQkJZm9yIChrID0gaSArIDE7IGsgPCBkZXNjLT5ucl92ZWN0b3JzOyBrKyspIHsKLQkJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QyID0gZGVzYy0+dmVjdG9ycyArIGs7CisJCWZvciAoayA9IGkgKyAxOyBrIDwgaHctPm5yX3ZlY3RvcnM7IGsrKykgeworCQkJc3RydWN0IGludGNfdmVjdCAqdmVjdDIgPSBody0+dmVjdG9ycyArIGs7CiAJCQl1bnNpZ25lZCBpbnQgaXJxMiA9IGV2dDJpcnEodmVjdDItPnZlY3QpOwogCiAJCQlpZiAodmVjdC0+ZW51bV9pZCAhPSB2ZWN0Mi0+ZW51bV9pZCkKQEAgLTc4NSwxMSArODk5LDE1IEBACiAJCQl2ZWN0Mi0+ZW51bV9pZCA9IDA7CiAKIAkJCS8qIHJlZGlyZWN0IHRoaXMgaW50ZXJydXB0cyB0byB0aGUgZmlyc3Qgb25lICovCi0JCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEyLCAmZC0+Y2hpcCwKLQkJCQkJaW50Y19yZWRpcmVjdF9pcnEsICJyZWRpcmVjdCIpOworCQkJc2V0X2lycV9jaGlwKGlycTIsICZkdW1teV9pcnFfY2hpcCk7CisJCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihpcnEyLCBpbnRjX3JlZGlyZWN0X2lycSk7CiAJCQlzZXRfaXJxX2RhdGEoaXJxMiwgKHZvaWQgKilpcnEpOwogCQl9CiAJfQorCisJLyogZW5hYmxlIGJpdHMgbWF0Y2hpbmcgZm9yY2VfZW5hYmxlIGFmdGVyIHJlZ2lzdGVyaW5nIGlycXMgKi8KKwlpZiAoZGVzYy0+Zm9yY2VfZW5hYmxlKQorCQlpbnRjX2VuYWJsZV9kaXNhYmxlX2VudW0oZGVzYywgZCwgZGVzYy0+Zm9yY2VfZW5hYmxlLCAxKTsKIH0KIAogc3RhdGljIGludCBpbnRjX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtODcyLDcgKzk5MCw3IEBACiAvKgogICogRHluYW1pYyBJUlEgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgY3JlYXRlX2lycV9vbl9ub2RlKHVuc2lnbmVkIGludCBpcnFfd2FudCwgaW50IG5vZGUpCit1bnNpZ25lZCBpbnQgY3JlYXRlX2lycV9ucih1bnNpZ25lZCBpbnQgaXJxX3dhbnQsIGludCBub2RlKQogewogCXVuc2lnbmVkIGludCBpcnEgPSAwLCBuZXc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTg4MSwyNCArOTk5LDI4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAKIAkvKgotCSAqIEZpcnN0IHRyeSB0aGUgd2FudGVkIElSUSwgdGhlbiBzY2FuLgorCSAqIEZpcnN0IHRyeSB0aGUgd2FudGVkIElSUQogCSAqLwotCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlycV93YW50LCBpbnRjX2lycV9tYXApKSB7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoaXJxX3dhbnQsIGludGNfaXJxX21hcCkgPT0gMCkgeworCQluZXcgPSBpcnFfd2FudDsKKwl9IGVsc2UgeworCQkvKiAuLiB0aGVuIGZhbGwgYmFjayB0byBzY2FubmluZy4gKi8KIAkJbmV3ID0gZmluZF9maXJzdF96ZXJvX2JpdChpbnRjX2lycV9tYXAsIG5yX2lycXMpOwogCQlpZiAodW5saWtlbHkobmV3ID09IG5yX2lycXMpKQogCQkJZ290byBvdXRfdW5sb2NrOwogCi0JCWRlc2MgPSBpcnFfdG9fZGVzY19hbGxvY19ub2RlKG5ldywgbm9kZSk7Ci0JCWlmICh1bmxpa2VseSghZGVzYykpIHsKLQkJCXByX2luZm8oImNhbid0IGdldCBpcnFfZGVzYyBmb3IgJWRcbiIsIG5ldyk7Ci0JCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQotCQlkZXNjID0gbW92ZV9pcnFfZGVzYyhkZXNjLCBub2RlKTsKIAkJX19zZXRfYml0KG5ldywgaW50Y19pcnFfbWFwKTsKLQkJaXJxID0gbmV3OwogCX0KIAorCWRlc2MgPSBpcnFfdG9fZGVzY19hbGxvY19ub2RlKG5ldywgbm9kZSk7CisJaWYgKHVubGlrZWx5KCFkZXNjKSkgeworCQlwcl9pbmZvKCJjYW4ndCBnZXQgaXJxX2Rlc2MgZm9yICVkXG4iLCBuZXcpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJZGVzYyA9IG1vdmVfaXJxX2Rlc2MoZGVzYywgbm9kZSk7CisJaXJxID0gbmV3OworCiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAKQEAgLTkxMyw3ICsxMDM1LDcgQEAKIAlpbnQgbmlkID0gY3B1X3RvX25vZGUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlpbnQgaXJxOwogCi0JaXJxID0gY3JlYXRlX2lycV9vbl9ub2RlKE5SX0lSUVNfTEVHQUNZLCBuaWQpOworCWlycSA9IGNyZWF0ZV9pcnFfbnIoTlJfSVJRU19MRUdBQ1ksIG5pZCk7CiAJaWYgKGlycSA9PSAwKQogCQlpcnEgPSAtMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9wZmMuYyBiL2RyaXZlcnMvc2gvcGZjLmMKaW5kZXggMDgyNjA0ZS4uY2YwMzAzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvcGZjLmMKKysrIGIvZHJpdmVycy9zaC9wZmMuYwpAQCAtMzM3LDEyICszMzcsMzkgQEAKIAkJaWYgKCFlbnVtX2lkKQogCQkJYnJlYWs7CiAKKwkJLyogZmlyc3QgY2hlY2sgaWYgdGhpcyBpcyBhIGZ1bmN0aW9uIGVudW0gKi8KIAkJaW5fcmFuZ2UgPSBlbnVtX2luX3JhbmdlKGVudW1faWQsICZncGlvYy0+ZnVuY3Rpb24pOwotCQlpZiAoIWluX3JhbmdlICYmIHJhbmdlKSB7Ci0JCQlpbl9yYW5nZSA9IGVudW1faW5fcmFuZ2UoZW51bV9pZCwgcmFuZ2UpOworCQlpZiAoIWluX3JhbmdlKSB7CisJCQkvKiBub3QgYSBmdW5jdGlvbiBlbnVtICovCisJCQlpZiAocmFuZ2UpIHsKKwkJCQkvKgorCQkJCSAqIG90aGVyIHJhbmdlIGV4aXN0cywgc28gdGhpcyBwaW4gaXMKKwkJCQkgKiBhIHJlZ3VsYXIgR1BJTyBwaW4gdGhhdCBub3cgaXMgYmVpbmcKKwkJCQkgKiBib3VuZCB0byBhIHNwZWNpZmljIGRpcmVjdGlvbi4KKwkJCQkgKgorCQkJCSAqIGZvciB0aGlzIGNhc2Ugd2Ugb25seSBhbGxvdyBmdW5jdGlvbiBlbnVtcworCQkJCSAqIGFuZCB0aGUgZW51bXMgdGhhdCBtYXRjaCB0aGUgb3RoZXIgcmFuZ2UuCisJCQkJICovCisJCQkJaW5fcmFuZ2UgPSBlbnVtX2luX3JhbmdlKGVudW1faWQsIHJhbmdlKTsKIAotCQkJaWYgKGluX3JhbmdlICYmIGVudW1faWQgPT0gcmFuZ2UtPmZvcmNlKQotCQkJCWNvbnRpbnVlOworCQkJCS8qCisJCQkJICogc3BlY2lhbCBjYXNlIHBhc3MgdGhyb3VnaCBmb3IgZml4ZWQKKwkJCQkgKiBpbnB1dC1vbmx5IG9yIG91dHB1dC1vbmx5IHBpbnMgd2l0aG91dAorCQkJCSAqIGZ1bmN0aW9uIGVudW0gcmVnaXN0ZXIgYXNzb2NpYXRpb24uCisJCQkJICovCisJCQkJaWYgKGluX3JhbmdlICYmIGVudW1faWQgPT0gcmFuZ2UtPmZvcmNlKQorCQkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBubyBvdGhlciByYW5nZSBleGlzdHMsIHNvIHRoaXMgcGluCisJCQkJICogbXVzdCB0aGVuIGJlIG9mIHRoZSBmdW5jdGlvbiB0eXBlLgorCQkJCSAqCisJCQkJICogYWxsb3cgZnVuY3Rpb24gdHlwZSBwaW5zIHRvIHNlbGVjdAorCQkJCSAqIGFueSBjb21iaW5hdGlvbiBvZiBmdW5jdGlvbi9pbi9vdXQKKwkJCQkgKiBpbiB0aGVpciBNQVJLIGxpc3RzLgorCQkJCSAqLworCQkJCWluX3JhbmdlID0gMTsKKwkJCX0KIAkJfQogCiAJCWlmICghaW5fcmFuZ2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9LY29uZmlnIGIvZHJpdmVycy9zcGkvS2NvbmZpZwppbmRleCBmNTVlYjAxLi4wZmVlOTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3BpL0tjb25maWcKQEAgLTEwMCw2ICsxMDAsMjMgQEAKIAkgIGluZXhwZW5zaXZlIGJhdHRlcnkgcG93ZXJlZCBtaWNyb2NvbnRyb2xsZXIgZXZhbHVhdGlvbiBib2FyZC4KIAkgIFRoaXMgc2FtZSBjYWJsZSBjYW4gYmUgdXNlZCB0byBmbGFzaCBuZXcgZmlybXdhcmUuCiAKK2NvbmZpZyBTUElfQ09MREZJUkVfUVNQSQorCXRyaXN0YXRlICJGcmVlc2NhbGUgQ29sZGZpcmUgUVNQSSBjb250cm9sbGVyIgorCWRlcGVuZHMgb24gKE01MjB4IHx8IE01MjN4IHx8IE01MjQ5IHx8IE01Mjd4IHx8IE01Mjh4IHx8IE01MzJ4KQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQ29sZGZpcmUgUVNQSSBjb250cm9sbGVyIGluIG1hc3RlcgorCSAgbW9kZS4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgY29sZGZpcmVfcXNwaS4KKworY29uZmlnIFNQSV9EQVZJTkNJCisJdHJpc3RhdGUgIlNQSSBjb250cm9sbGVyIGRyaXZlciBmb3IgRGFWaW5jaS9EQTh4eCBTb0MncyIKKwlkZXBlbmRzIG9uIFNQSV9NQVNURVIgJiYgQVJDSF9EQVZJTkNJCisJc2VsZWN0IFNQSV9CSVRCQU5HCisJaGVscAorCSAgU1BJIG1hc3RlciBjb250cm9sbGVyIGZvciBEYVZpbmNpIGFuZCBEQTh4eCBTUEkgbW9kdWxlcy4KKwogY29uZmlnIFNQSV9HUElPCiAJdHJpc3RhdGUgIkdQSU8tYmFzZWQgYml0YmFuZ2luZyBTUEkgTWFzdGVyIgogCWRlcGVuZHMgb24gR0VORVJJQ19HUElPCkBAIC0zMDgsNyArMzI1LDcgQEAKICMKIAogY29uZmlnIFNQSV9ERVNJR05XQVJFCi0JYm9vbCAiRGVzaWduV2FyZSBTUEkgY29udHJvbGxlciBjb3JlIHN1cHBvcnQiCisJdHJpc3RhdGUgIkRlc2lnbldhcmUgU1BJIGNvbnRyb2xsZXIgY29yZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gU1BJX01BU1RFUgogCWhlbHAKIAkgIGdlbmVyYWwgZHJpdmVyIGZvciBTUEkgY29udHJvbGxlciBjb3JlIGZyb20gRGVzaWduV2FyZQpAQCAtMzE3LDYgKzMzNCwxMCBAQAogCXRyaXN0YXRlICJQQ0kgaW50ZXJmYWNlIGRyaXZlciBmb3IgRFcgU1BJIGNvcmUiCiAJZGVwZW5kcyBvbiBTUElfREVTSUdOV0FSRSAmJiBQQ0kKIAorY29uZmlnIFNQSV9EV19NTUlPCisJdHJpc3RhdGUgIk1lbW9yeS1tYXBwZWQgaW8gaW50ZXJmYWNlIGRyaXZlciBmb3IgRFcgU1BJIGNvcmUiCisJZGVwZW5kcyBvbiBTUElfREVTSUdOV0FSRSAmJiBIQVZFX0NMSworCiAjCiAjIFRoZXJlIGFyZSBsb3RzIG9mIFNQSSBkZXZpY2UgdHlwZXMsIHdpdGggc2Vuc29ycyBhbmQgbWVtb3J5CiAjIGJlaW5nIHByb2JhYmx5IHRoZSBtb3N0IHdpZGVseSB1c2VkIG9uZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9NYWtlZmlsZSBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCmluZGV4IGYzZDI4MTAuLmQ3ZDBmODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCkBAIC0xNiw4ICsxNiwxMSBAQAogb2JqLSQoQ09ORklHX1NQSV9CSVRCQU5HKQkJKz0gc3BpX2JpdGJhbmcubwogb2JqLSQoQ09ORklHX1NQSV9BVTE1NTApCQkrPSBhdTE1NTBfc3BpLm8KIG9iai0kKENPTkZJR19TUElfQlVUVEVSRkxZKQkJKz0gc3BpX2J1dHRlcmZseS5vCitvYmotJChDT05GSUdfU1BJX0NPTERGSVJFX1FTUEkpCQkrPSBjb2xkZmlyZV9xc3BpLm8KK29iai0kKENPTkZJR19TUElfREFWSU5DSSkJCSs9IGRhdmluY2lfc3BpLm8KIG9iai0kKENPTkZJR19TUElfREVTSUdOV0FSRSkJCSs9IGR3X3NwaS5vCiBvYmotJChDT05GSUdfU1BJX0RXX1BDSSkJCSs9IGR3X3NwaV9wY2kubworb2JqLSQoQ09ORklHX1NQSV9EV19NTUlPKQkJKz0gZHdfc3BpX21taW8ubwogb2JqLSQoQ09ORklHX1NQSV9HUElPKQkJCSs9IHNwaV9ncGlvLm8KIG9iai0kKENPTkZJR19TUElfSU1YKQkJCSs9IHNwaV9pbXgubwogb2JqLSQoQ09ORklHX1NQSV9MTTcwX0xMUCkJCSs9IHNwaV9sbTcwbGxwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYyBiL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYwppbmRleCBmZjViYmI5Li45YWViNjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKKysrIGIvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCkBAIC0zNjMsNiArMzYzLDcgQEAKIAl2b2lkCQkJCSpyeF9lbmQ7CiAJZW51bSBzc3BfcmVhZGluZwkJcmVhZDsKIAllbnVtIHNzcF93cml0aW5nCQl3cml0ZTsKKwl1MzIJCQkJZXhwX2ZpZm9fbGV2ZWw7CiB9OwogCiAvKioKQEAgLTUwMSw2ICs1MDIsOSBAQAogCQl3aGlsZSAocmVhZHcoU1NQX1NSKHBsMDIyLT52aXJ0YmFzZSkpICYgU1NQX1NSX01BU0tfUk5FKQogCQkJcmVhZHcoU1NQX0RSKHBsMDIyLT52aXJ0YmFzZSkpOwogCX0gd2hpbGUgKChyZWFkdyhTU1BfU1IocGwwMjItPnZpcnRiYXNlKSkgJiBTU1BfU1JfTUFTS19CU1kpICYmIGxpbWl0LS0pOworCisJcGwwMjItPmV4cF9maWZvX2xldmVsID0gMDsKKwogCXJldHVybiBsaW1pdDsKIH0KIApAQCAtNTgzLDEwICs1ODcsOSBAQAogCSAqIGVycm9ucyBpbiA4Yml0IHdpZGUgdHJhbnNmZXJzIG9uIEFSTSB2YXJpYW50cyAoanVzdCA4IHdvcmRzCiAJICogRklGTywgbWVhbnMgb25seSA4eDggPSA2NCBiaXRzIGluIEZJRk8pIGF0IGxlYXN0LgogCSAqCi0JICogRklYTUU6IGN1cnJlbnRseSB3ZSBoYXZlIG5vIGxvZ2ljIHRvIGFjY291bnQgZm9yIHRoaXMuCi0JICogcGVyaGFwcyB0aGVyZSBpcyBldmVuIHNvbWV0aGluZyBicm9rZW4gaW4gSFcgcmVnYXJkaW5nCi0JICogOGJpdCB0cmFuc2ZlcnMgKGl0IGRvZXNuJ3QgZmFpbCBvbiAxNmJpdCkgc28gdGhpcyBuZWVkcwotCSAqIG1vcmUgaW52ZXN0aWdhdGlvbi4uLgorCSAqIFRvIHByZXZlbnQgdGhpcyBpc3N1ZSwgdGhlIFRYIEZJRk8gaXMgb25seSBmaWxsZWQgdG8gdGhlCisJICogdW51c2VkIFJYIEZJRk8gZmlsbCBsZW5ndGgsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgVFgKKwkgKiBGSUZPIHN0YXR1cyBmbGFnIGluZGljYXRlcy4KIAkgKi8KIAlkZXZfZGJnKCZwbDAyMi0+YWRldi0+ZGV2LAogCQkiJXMsIHJ4OiAlcCwgcnhlbmQ6ICVwLCB0eDogJXAsIHR4ZW5kOiAlcFxuIiwKQEAgLTYxMywxMSArNjE2LDEyIEBACiAJCQlicmVhazsKIAkJfQogCQlwbDAyMi0+cnggKz0gKHBsMDIyLT5jdXJfY2hpcC0+bl9ieXRlcyk7CisJCXBsMDIyLT5leHBfZmlmb19sZXZlbC0tOwogCX0KIAkvKgotCSAqIFdyaXRlIGFzIG11Y2ggYXMgeW91IGNhbiwgd2hpbGUga2VlcGluZyBhbiBleWUgb24gdGhlIFJYIEZJRk8hCisJICogV3JpdGUgYXMgbXVjaCBhcyBwb3NzaWJsZSB1cCB0byB0aGUgUlggRklGTyBzaXplCiAJICovCi0Jd2hpbGUgKChyZWFkdyhTU1BfU1IocGwwMjItPnZpcnRiYXNlKSkgJiBTU1BfU1JfTUFTS19UTkYpCisJd2hpbGUgKChwbDAyMi0+ZXhwX2ZpZm9fbGV2ZWwgPCBwbDAyMi0+dmVuZG9yLT5maWZvZGVwdGgpCiAJICAgICAgICYmIChwbDAyMi0+dHggPCBwbDAyMi0+dHhfZW5kKSkgewogCQlzd2l0Y2ggKHBsMDIyLT53cml0ZSkgewogCQljYXNlIFdSSVRJTkdfTlVMTDoKQEAgLTYzNCw2ICs2MzgsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJcGwwMjItPnR4ICs9IChwbDAyMi0+Y3VyX2NoaXAtPm5fYnl0ZXMpOworCQlwbDAyMi0+ZXhwX2ZpZm9fbGV2ZWwrKzsKIAkJLyoKIAkJICogVGhpcyBpbm5lciByZWFkZXIgdGFrZXMgY2FyZSBvZiB0aGluZ3MgYXBwZWFyaW5nIGluIHRoZSBSWAogCQkgKiBGSUZPIGFzIHdlJ3JlIHRyYW5zbWl0dGluZy4gVGhpcyB3aWxsIGhhcHBlbiBhIGxvdCBzaW5jZSB0aGUKQEAgLTY2MCw2ICs2NjUsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCQkJcGwwMjItPnJ4ICs9IChwbDAyMi0+Y3VyX2NoaXAtPm5fYnl0ZXMpOworCQkJcGwwMjItPmV4cF9maWZvX2xldmVsLS07CiAJCX0KIAl9CiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2F1MTU1MF9zcGkuYyBiL2RyaXZlcnMvc3BpL2F1MTU1MF9zcGkuYwppbmRleCBjZmQ1ZmY5Li5iYThhYzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hdTE1NTBfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvYXUxNTUwX3NwaS5jCkBAIC00MTIsMTEgKzQxMiwxMyBAQAogCX0KIAogCS8qIHB1dCBidWZmZXJzIG9uIHRoZSByaW5nICovCi0JcmVzID0gYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGh3LT5kbWFfcnhfY2gsIGh3LT5yeCwgdC0+bGVuKTsKKwlyZXMgPSBhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoaHctPmRtYV9yeF9jaCwgdmlydF90b19waHlzKGh3LT5yeCksCisJCQkJICAgIHQtPmxlbiwgRERNQV9GTEFHU19JRSk7CiAJaWYgKCFyZXMpCiAJCWRldl9lcnIoaHctPmRldiwgInJ4IGRtYSBwdXQgZGVzdCBlcnJvclxuIik7CiAKLQlyZXMgPSBhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShody0+ZG1hX3R4X2NoLCAodm9pZCAqKWh3LT50eCwgdC0+bGVuKTsKKwlyZXMgPSBhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShody0+ZG1hX3R4X2NoLCB2aXJ0X3RvX3BoeXMoaHctPnR4KSwKKwkJCQkgICAgICB0LT5sZW4sIERETUFfRkxBR1NfSUUpOwogCWlmICghcmVzKQogCQlkZXZfZXJyKGh3LT5kZXYsICJ0eCBkbWEgcHV0IHNvdXJjZSBlcnJvclxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2NvbGRmaXJlX3FzcGkuYyBiL2RyaXZlcnMvc3BpL2NvbGRmaXJlX3FzcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWJlM2VmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvY29sZGZpcmVfcXNwaS5jCkBAIC0wLDAgKzEsNjQwIEBACisvKgorICogRnJlZXNjYWxlL01vdG9yb2xhIENvbGRmaXJlIFF1ZXVlZCBTUEkgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMTAgU3RldmVuIEtpbmcgPHNma2luZ0BmZHdkYy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICoKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNpbmNsdWRlIDxhc20vY29sZGZpcmUuaD4KKyNpbmNsdWRlIDxhc20vbWNmcXNwaS5oPgorCisjZGVmaW5lCURSSVZFUl9OQU1FICJtY2Zxc3BpIgorCisjZGVmaW5lCU1DRlFTUElfQlVTQ0xLCQkJKE1DRl9CVVNDTEsgLyAyKQorCisjZGVmaW5lCU1DRlFTUElfUU1SCQkJMHgwMAorI2RlZmluZQkJTUNGUVNQSV9RTVJfTVNUUgkweDgwMDAKKyNkZWZpbmUJCU1DRlFTUElfUU1SX0NQT0wJMHgwMjAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FNUl9DUEhBCTB4MDEwMAorI2RlZmluZQlNQ0ZRU1BJX1FETFlSCQkJMHgwNAorI2RlZmluZQkJTUNGUVNQSV9RRExZUl9TUEUJMHg4MDAwCisjZGVmaW5lCU1DRlFTUElfUVdSCQkJMHgwOAorI2RlZmluZQkJTUNGUVNQSV9RV1JfSEFMVAkweDgwMDAKKyNkZWZpbmUJCU1DRlFTUElfUVdSX1dSRU4JMHg0MDAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FXUl9DU0lWCTB4MTAwMAorI2RlZmluZQlNQ0ZRU1BJX1FJUgkJCTB4MEMKKyNkZWZpbmUJCU1DRlFTUElfUUlSX1dDRUZCCTB4ODAwMAorI2RlZmluZQkJTUNGUVNQSV9RSVJfQUJSVEIJMHg0MDAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FJUl9BQlJUTAkweDEwMDAKKyNkZWZpbmUJCU1DRlFTUElfUUlSX1dDRUZFCTB4MDgwMAorI2RlZmluZQkJTUNGUVNQSV9RSVJfQUJSVEUJMHgwNDAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FJUl9TUElGRQkweDAxMDAKKyNkZWZpbmUJCU1DRlFTUElfUUlSX1dDRUYJMHgwMDA4CisjZGVmaW5lCQlNQ0ZRU1BJX1FJUl9BQlJUCTB4MDAwNAorI2RlZmluZQkJTUNGUVNQSV9RSVJfU1BJRgkweDAwMDEKKyNkZWZpbmUJTUNGUVNQSV9RQVIJCQkweDAxMAorI2RlZmluZQkJTUNGUVNQSV9RQVJfVFhCVUYJMHgwMAorI2RlZmluZQkJTUNGUVNQSV9RQVJfUlhCVUYJMHgxMAorI2RlZmluZQkJTUNGUVNQSV9RQVJfQ01EQlVGCTB4MjAKKyNkZWZpbmUJTUNGUVNQSV9RRFIJCQkweDAxNAorI2RlZmluZQlNQ0ZRU1BJX1FDUgkJCTB4MDE0CisjZGVmaW5lCQlNQ0ZRU1BJX1FDUl9DT05UCTB4ODAwMAorI2RlZmluZQkJTUNGUVNQSV9RQ1JfQklUU0UJMHg0MDAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FDUl9EVAkJMHgyMDAwCisKK3N0cnVjdCBtY2Zxc3BpIHsKKwl2b2lkIF9faW9tZW0gKmlvYmFzZTsKKwlpbnQgaXJxOworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgbWNmcXNwaV9jc19jb250cm9sICpjc19jb250cm9sOworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3E7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgbXNncTsKK307CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfd3JfcW1yKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpLCB1MTYgdmFsKQoreworCXdyaXRldyh2YWwsIG1jZnFzcGktPmlvYmFzZSArIE1DRlFTUElfUU1SKTsKK30KKworc3RhdGljIHZvaWQgbWNmcXNwaV93cl9xZGx5cihzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSwgdTE2IHZhbCkKK3sKKwl3cml0ZXcodmFsLCBtY2Zxc3BpLT5pb2Jhc2UgKyBNQ0ZRU1BJX1FETFlSKTsKK30KKworc3RhdGljIHUxNiBtY2Zxc3BpX3JkX3FkbHlyKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpKQoreworCXJldHVybiByZWFkdyhtY2Zxc3BpLT5pb2Jhc2UgKyBNQ0ZRU1BJX1FETFlSKTsKK30KKworc3RhdGljIHZvaWQgbWNmcXNwaV93cl9xd3Ioc3RydWN0IG1jZnFzcGkgKm1jZnFzcGksIHUxNiB2YWwpCit7CisJd3JpdGV3KHZhbCwgbWNmcXNwaS0+aW9iYXNlICsgTUNGUVNQSV9RV1IpOworfQorCitzdGF0aWMgdm9pZCBtY2Zxc3BpX3dyX3FpcihzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSwgdTE2IHZhbCkKK3sKKwl3cml0ZXcodmFsLCBtY2Zxc3BpLT5pb2Jhc2UgKyBNQ0ZRU1BJX1FJUik7Cit9CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfd3JfcWFyKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpLCB1MTYgdmFsKQoreworCXdyaXRldyh2YWwsIG1jZnFzcGktPmlvYmFzZSArIE1DRlFTUElfUUFSKTsKK30KKworc3RhdGljIHZvaWQgbWNmcXNwaV93cl9xZHIoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGksIHUxNiB2YWwpCit7CisJd3JpdGV3KHZhbCwgbWNmcXNwaS0+aW9iYXNlICsgTUNGUVNQSV9RRFIpOworfQorCitzdGF0aWMgdTE2IG1jZnFzcGlfcmRfcWRyKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpKQoreworCXJldHVybiByZWFkdyhtY2Zxc3BpLT5pb2Jhc2UgKyBNQ0ZRU1BJX1FEUik7Cit9CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfY3Nfc2VsZWN0KHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpLCB1OCBjaGlwX3NlbGVjdCwKKwkJCSAgICBib29sIGNzX2hpZ2gpCit7CisJbWNmcXNwaS0+Y3NfY29udHJvbC0+c2VsZWN0KG1jZnFzcGktPmNzX2NvbnRyb2wsIGNoaXBfc2VsZWN0LCBjc19oaWdoKTsKK30KKworc3RhdGljIHZvaWQgbWNmcXNwaV9jc19kZXNlbGVjdChzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSwgdTggY2hpcF9zZWxlY3QsCisJCQkJYm9vbCBjc19oaWdoKQoreworCW1jZnFzcGktPmNzX2NvbnRyb2wtPmRlc2VsZWN0KG1jZnFzcGktPmNzX2NvbnRyb2wsIGNoaXBfc2VsZWN0LCBjc19oaWdoKTsKK30KKworc3RhdGljIGludCBtY2Zxc3BpX2NzX3NldHVwKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpKQoreworCXJldHVybiAobWNmcXNwaS0+Y3NfY29udHJvbCAmJiBtY2Zxc3BpLT5jc19jb250cm9sLT5zZXR1cCkgPworCQltY2Zxc3BpLT5jc19jb250cm9sLT5zZXR1cChtY2Zxc3BpLT5jc19jb250cm9sKSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfY3NfdGVhcmRvd24oc3RydWN0IG1jZnFzcGkgKm1jZnFzcGkpCit7CisJaWYgKG1jZnFzcGktPmNzX2NvbnRyb2wgJiYgbWNmcXNwaS0+Y3NfY29udHJvbC0+dGVhcmRvd24pCisJCW1jZnFzcGktPmNzX2NvbnRyb2wtPnRlYXJkb3duKG1jZnFzcGktPmNzX2NvbnRyb2wpOworfQorCitzdGF0aWMgdTggbWNmcXNwaV9xbXJfYmF1ZCh1MzIgc3BlZWRfaHopCit7CisJcmV0dXJuIGNsYW1wKChNQ0ZRU1BJX0JVU0NMSyArIHNwZWVkX2h6IC0gMSkgLyBzcGVlZF9oeiwgMnUsIDI1NXUpOworfQorCitzdGF0aWMgYm9vbCBtY2Zxc3BpX3FkbHlyX3NwZShzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSkKK3sKKwlyZXR1cm4gbWNmcXNwaV9yZF9xZGx5cihtY2Zxc3BpKSAmIE1DRlFTUElfUURMWVJfU1BFOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWNmcXNwaV9pcnFfaGFuZGxlcihpbnQgdGhpc19pcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSA9IGRldl9pZDsKKworCS8qIGNsZWFyIGludGVycnVwdCAqLworCW1jZnFzcGlfd3JfcWlyKG1jZnFzcGksIE1DRlFTUElfUUlSX1NQSUZFIHwgTUNGUVNQSV9RSVJfU1BJRik7CisJd2FrZV91cCgmbWNmcXNwaS0+d2FpdHEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBtY2Zxc3BpX3RyYW5zZmVyX21zZzgoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGksIHVuc2lnbmVkIGNvdW50LAorCQkJCSAgY29uc3QgdTggKnR4YnVmLCB1OCAqcnhidWYpCit7CisJdW5zaWduZWQgaSwgbiwgb2Zmc2V0ID0gMDsKKworCW4gPSBtaW4oY291bnQsIDE2dSk7CisKKwltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLCBNQ0ZRU1BJX1FBUl9DTURCVUYpOworCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCW1jZnFzcGlfd3JfcWRyKG1jZnFzcGksIE1DRlFTUElfUUNSX0JJVFNFKTsKKworCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksIE1DRlFTUElfUUFSX1RYQlVGKTsKKwlpZiAodHhidWYpCisJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCQltY2Zxc3BpX3dyX3FkcihtY2Zxc3BpLCAqdHhidWYrKyk7CisJZWxzZQorCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKwkJCW1jZnFzcGlfd3JfcWRyKG1jZnFzcGksIDApOworCisJY291bnQgLT0gbjsKKwlpZiAoY291bnQpIHsKKwkJdTE2IHF3ciA9IDB4ZjA4OworCQltY2Zxc3BpX3dyX3F3cihtY2Zxc3BpLCAweDcwMCk7CisJCW1jZnFzcGlfd3JfcWRseXIobWNmcXNwaSwgTUNGUVNQSV9RRExZUl9TUEUpOworCisJCWRvIHsKKwkJCXdhaXRfZXZlbnQobWNmcXNwaS0+d2FpdHEsICFtY2Zxc3BpX3FkbHlyX3NwZShtY2Zxc3BpKSk7CisJCQltY2Zxc3BpX3dyX3F3cihtY2Zxc3BpLCBxd3IpOworCQkJbWNmcXNwaV93cl9xZGx5cihtY2Zxc3BpLCBNQ0ZRU1BJX1FETFlSX1NQRSk7CisJCQlpZiAocnhidWYpIHsKKwkJCQltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLAorCQkJCQkgICAgICAgTUNGUVNQSV9RQVJfUlhCVUYgKyBvZmZzZXQpOworCQkJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCQkJCSpyeGJ1ZisrID0gbWNmcXNwaV9yZF9xZHIobWNmcXNwaSk7CisJCQl9CisJCQluID0gbWluKGNvdW50LCA4dSk7CisJCQlpZiAodHhidWYpIHsKKwkJCQltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLAorCQkJCQkgICAgICAgTUNGUVNQSV9RQVJfVFhCVUYgKyBvZmZzZXQpOworCQkJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCQkJCW1jZnFzcGlfd3JfcWRyKG1jZnFzcGksICp0eGJ1ZisrKTsKKwkJCX0KKwkJCXF3ciA9IChvZmZzZXQgPyAweDgwOCA6IDApICsgKChuIC0gMSkgPDwgOCk7CisJCQlvZmZzZXQgXj0gODsKKwkJCWNvdW50IC09IG47CisJCX0gd2hpbGUgKGNvdW50KTsKKwkJd2FpdF9ldmVudChtY2Zxc3BpLT53YWl0cSwgIW1jZnFzcGlfcWRseXJfc3BlKG1jZnFzcGkpKTsKKwkJbWNmcXNwaV93cl9xd3IobWNmcXNwaSwgcXdyKTsKKwkJbWNmcXNwaV93cl9xZGx5cihtY2Zxc3BpLCBNQ0ZRU1BJX1FETFlSX1NQRSk7CisJCWlmIChyeGJ1ZikgeworCQkJbWNmcXNwaV93cl9xYXIobWNmcXNwaSwgTUNGUVNQSV9RQVJfUlhCVUYgKyBvZmZzZXQpOworCQkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJCQkqcnhidWYrKyA9IG1jZnFzcGlfcmRfcWRyKG1jZnFzcGkpOworCQkJb2Zmc2V0IF49IDg7CisJCX0KKwl9IGVsc2UgeworCQltY2Zxc3BpX3dyX3F3cihtY2Zxc3BpLCAobiAtIDEpIDw8IDgpOworCQltY2Zxc3BpX3dyX3FkbHlyKG1jZnFzcGksIE1DRlFTUElfUURMWVJfU1BFKTsKKwl9CisJd2FpdF9ldmVudChtY2Zxc3BpLT53YWl0cSwgIW1jZnFzcGlfcWRseXJfc3BlKG1jZnFzcGkpKTsKKwlpZiAocnhidWYpIHsKKwkJbWNmcXNwaV93cl9xYXIobWNmcXNwaSwgTUNGUVNQSV9RQVJfUlhCVUYgKyBvZmZzZXQpOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQorCQkJKnJ4YnVmKysgPSBtY2Zxc3BpX3JkX3FkcihtY2Zxc3BpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfdHJhbnNmZXJfbXNnMTYoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGksIHVuc2lnbmVkIGNvdW50LAorCQkJCSAgIGNvbnN0IHUxNiAqdHhidWYsIHUxNiAqcnhidWYpCit7CisJdW5zaWduZWQgaSwgbiwgb2Zmc2V0ID0gMDsKKworCW4gPSBtaW4oY291bnQsIDE2dSk7CisKKwltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLCBNQ0ZRU1BJX1FBUl9DTURCVUYpOworCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCW1jZnFzcGlfd3JfcWRyKG1jZnFzcGksIE1DRlFTUElfUUNSX0JJVFNFKTsKKworCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksIE1DRlFTUElfUUFSX1RYQlVGKTsKKwlpZiAodHhidWYpCisJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCQltY2Zxc3BpX3dyX3FkcihtY2Zxc3BpLCAqdHhidWYrKyk7CisJZWxzZQorCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKwkJCW1jZnFzcGlfd3JfcWRyKG1jZnFzcGksIDApOworCisJY291bnQgLT0gbjsKKwlpZiAoY291bnQpIHsKKwkJdTE2IHF3ciA9IDB4ZjA4OworCQltY2Zxc3BpX3dyX3F3cihtY2Zxc3BpLCAweDcwMCk7CisJCW1jZnFzcGlfd3JfcWRseXIobWNmcXNwaSwgTUNGUVNQSV9RRExZUl9TUEUpOworCisJCWRvIHsKKwkJCXdhaXRfZXZlbnQobWNmcXNwaS0+d2FpdHEsICFtY2Zxc3BpX3FkbHlyX3NwZShtY2Zxc3BpKSk7CisJCQltY2Zxc3BpX3dyX3F3cihtY2Zxc3BpLCBxd3IpOworCQkJbWNmcXNwaV93cl9xZGx5cihtY2Zxc3BpLCBNQ0ZRU1BJX1FETFlSX1NQRSk7CisJCQlpZiAocnhidWYpIHsKKwkJCQltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLAorCQkJCQkgICAgICAgTUNGUVNQSV9RQVJfUlhCVUYgKyBvZmZzZXQpOworCQkJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCQkJCSpyeGJ1ZisrID0gbWNmcXNwaV9yZF9xZHIobWNmcXNwaSk7CisJCQl9CisJCQluID0gbWluKGNvdW50LCA4dSk7CisJCQlpZiAodHhidWYpIHsKKwkJCQltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLAorCQkJCQkgICAgICAgTUNGUVNQSV9RQVJfVFhCVUYgKyBvZmZzZXQpOworCQkJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCQkJCW1jZnFzcGlfd3JfcWRyKG1jZnFzcGksICp0eGJ1ZisrKTsKKwkJCX0KKwkJCXF3ciA9IChvZmZzZXQgPyAweDgwOCA6IDB4MDAwKSArICgobiAtIDEpIDw8IDgpOworCQkJb2Zmc2V0IF49IDg7CisJCQljb3VudCAtPSBuOworCQl9IHdoaWxlIChjb3VudCk7CisJCXdhaXRfZXZlbnQobWNmcXNwaS0+d2FpdHEsICFtY2Zxc3BpX3FkbHlyX3NwZShtY2Zxc3BpKSk7CisJCW1jZnFzcGlfd3JfcXdyKG1jZnFzcGksIHF3cik7CisJCW1jZnFzcGlfd3JfcWRseXIobWNmcXNwaSwgTUNGUVNQSV9RRExZUl9TUEUpOworCQlpZiAocnhidWYpIHsKKwkJCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksIE1DRlFTUElfUUFSX1JYQlVGICsgb2Zmc2V0KTsKKwkJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCQkJKnJ4YnVmKysgPSBtY2Zxc3BpX3JkX3FkcihtY2Zxc3BpKTsKKwkJCW9mZnNldCBePSA4OworCQl9CisJfSBlbHNlIHsKKwkJbWNmcXNwaV93cl9xd3IobWNmcXNwaSwgKG4gLSAxKSA8PCA4KTsKKwkJbWNmcXNwaV93cl9xZGx5cihtY2Zxc3BpLCBNQ0ZRU1BJX1FETFlSX1NQRSk7CisJfQorCXdhaXRfZXZlbnQobWNmcXNwaS0+d2FpdHEsICFtY2Zxc3BpX3FkbHlyX3NwZShtY2Zxc3BpKSk7CisJaWYgKHJ4YnVmKSB7CisJCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksIE1DRlFTUElfUUFSX1JYQlVGICsgb2Zmc2V0KTsKKwkJZm9yIChpID0gMDsgaSA8IG47ICsraSkKKwkJCSpyeGJ1ZisrID0gbWNmcXNwaV9yZF9xZHIobWNmcXNwaSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtY2Zxc3BpX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtY2Zxc3BpLCB3b3JrKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1jZnFzcGktPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJm1jZnFzcGktPm1zZ3EpKSB7CisJCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnOworCQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpOworCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyOworCQlpbnQgc3RhdHVzID0gMDsKKworCQltc2cgPSBjb250YWluZXJfb2YobWNmcXNwaS0+bXNncS5uZXh0LCBzdHJ1Y3Qgc3BpX21lc3NhZ2UsCisJCQkJICAgcXVldWUpOworCisJCWxpc3RfZGVsX2luaXQoJm1jZnFzcGktPm1zZ3EpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2Zxc3BpLT5sb2NrLCBmbGFncyk7CisKKwkJc3BpID0gbXNnLT5zcGk7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh4ZmVyLCAmbXNnLT50cmFuc2ZlcnMsIHRyYW5zZmVyX2xpc3QpIHsKKwkJCWJvb2wgY3NfaGlnaCA9IHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIOworCQkJdTE2IHFtciA9IE1DRlFTUElfUU1SX01TVFI7CisKKwkJCWlmICh4ZmVyLT5iaXRzX3Blcl93b3JkKQorCQkJCXFtciB8PSB4ZmVyLT5iaXRzX3Blcl93b3JkIDw8IDEwOworCQkJZWxzZQorCQkJCXFtciB8PSBzcGktPmJpdHNfcGVyX3dvcmQgPDwgMTA7CisJCQlpZiAoc3BpLT5tb2RlICYgU1BJX0NQSEEpCisJCQkJcW1yIHw9IE1DRlFTUElfUU1SX0NQSEE7CisJCQlpZiAoc3BpLT5tb2RlICYgU1BJX0NQT0wpCisJCQkJcW1yIHw9IE1DRlFTUElfUU1SX0NQT0w7CisJCQlpZiAoeGZlci0+c3BlZWRfaHopCisJCQkJcW1yIHw9IG1jZnFzcGlfcW1yX2JhdWQoeGZlci0+c3BlZWRfaHopOworCQkJZWxzZQorCQkJCXFtciB8PSBtY2Zxc3BpX3Ftcl9iYXVkKHNwaS0+bWF4X3NwZWVkX2h6KTsKKwkJCW1jZnFzcGlfd3JfcW1yKG1jZnFzcGksIHFtcik7CisKKwkJCW1jZnFzcGlfY3Nfc2VsZWN0KG1jZnFzcGksIHNwaS0+Y2hpcF9zZWxlY3QsIGNzX2hpZ2gpOworCisJCQltY2Zxc3BpX3dyX3FpcihtY2Zxc3BpLCBNQ0ZRU1BJX1FJUl9TUElGRSk7CisJCQlpZiAoKHhmZXItPmJpdHNfcGVyX3dvcmQgPyB4ZmVyLT5iaXRzX3Blcl93b3JkIDoKKwkJCQkJCXNwaS0+Yml0c19wZXJfd29yZCkgPT0gOCkKKwkJCQltY2Zxc3BpX3RyYW5zZmVyX21zZzgobWNmcXNwaSwgeGZlci0+bGVuLAorCQkJCQkJICAgICAgeGZlci0+dHhfYnVmLAorCQkJCQkJICAgICAgeGZlci0+cnhfYnVmKTsKKwkJCWVsc2UKKwkJCQltY2Zxc3BpX3RyYW5zZmVyX21zZzE2KG1jZnFzcGksIHhmZXItPmxlbiAvIDIsCisJCQkJCQkgICAgICAgeGZlci0+dHhfYnVmLAorCQkJCQkJICAgICAgIHhmZXItPnJ4X2J1Zik7CisJCQltY2Zxc3BpX3dyX3FpcihtY2Zxc3BpLCAwKTsKKworCQkJaWYgKHhmZXItPmRlbGF5X3VzZWNzKQorCQkJCXVkZWxheSh4ZmVyLT5kZWxheV91c2Vjcyk7CisJCQlpZiAoeGZlci0+Y3NfY2hhbmdlKSB7CisJCQkJaWYgKCFsaXN0X2lzX2xhc3QoJnhmZXItPnRyYW5zZmVyX2xpc3QsCisJCQkJCQkgICZtc2ctPnRyYW5zZmVycykpCisJCQkJCW1jZnFzcGlfY3NfZGVzZWxlY3QobWNmcXNwaSwKKwkJCQkJCQkgICAgc3BpLT5jaGlwX3NlbGVjdCwKKwkJCQkJCQkgICAgY3NfaGlnaCk7CisJCQl9IGVsc2UgeworCQkJCWlmIChsaXN0X2lzX2xhc3QoJnhmZXItPnRyYW5zZmVyX2xpc3QsCisJCQkJCQkgJm1zZy0+dHJhbnNmZXJzKSkKKwkJCQkJbWNmcXNwaV9jc19kZXNlbGVjdChtY2Zxc3BpLAorCQkJCQkJCSAgICBzcGktPmNoaXBfc2VsZWN0LAorCQkJCQkJCSAgICBjc19oaWdoKTsKKwkJCX0KKwkJCW1zZy0+YWN0dWFsX2xlbmd0aCArPSB4ZmVyLT5sZW47CisJCX0KKwkJbXNnLT5zdGF0dXMgPSBzdGF0dXM7CisJCW1zZy0+Y29tcGxldGUobXNnLT5jb250ZXh0KTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWNmcXNwaS0+bG9jaywgZmxhZ3MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2Zxc3BpLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbWNmcXNwaV90cmFuc2ZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZykKK3sKKwlzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltY2Zxc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHhmZXIsICZtc2ctPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgeworCQlpZiAoeGZlci0+Yml0c19wZXJfd29yZCAmJiAoKHhmZXItPmJpdHNfcGVyX3dvcmQgPCA4KQorCQkJCQl8fCAoeGZlci0+Yml0c19wZXJfd29yZCA+IDE2KSkpIHsKKwkJCWRldl9kYmcoJnNwaS0+ZGV2LAorCQkJCSIlZCBiaXRzIHBlciB3b3JkIGlzIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkJeGZlci0+Yml0c19wZXJfd29yZCk7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJaWYgKHhmZXItPnNwZWVkX2h6KSB7CisJCQl1MzIgcmVhbF9zcGVlZCA9IE1DRlFTUElfQlVTQ0xLIC8KKwkJCQltY2Zxc3BpX3Ftcl9iYXVkKHhmZXItPnNwZWVkX2h6KTsKKwkJCWlmIChyZWFsX3NwZWVkICE9IHhmZXItPnNwZWVkX2h6KQorCQkJCWRldl9kYmcoJnNwaS0+ZGV2LAorCQkJCQkidXNpbmcgc3BlZWQgJWQgaW5zdGVhZCBvZiAlZFxuIiwKKwkJCQkJcmVhbF9zcGVlZCwgeGZlci0+c3BlZWRfaHopOworCQl9CisJfQorCW1zZy0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCW1zZy0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWNmcXNwaS0+bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJm1zZy0+cXVldWUsICZtY2Zxc3BpLT5tc2dxKTsKKwlxdWV1ZV93b3JrKG1jZnFzcGktPndvcmtxLCAmbWNmcXNwaS0+d29yayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNmcXNwaS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7CitmYWlsOgorCW1zZy0+c3RhdHVzID0gLUVJTlZBTDsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBtY2Zxc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJaWYgKChzcGktPmJpdHNfcGVyX3dvcmQgPCA4KSB8fCAoc3BpLT5iaXRzX3Blcl93b3JkID4gMTYpKSB7CisJCWRldl9kYmcoJnNwaS0+ZGV2LCAiJWQgYml0cyBwZXIgd29yZCBpcyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJc3BpLT5iaXRzX3Blcl93b3JkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChzcGktPmNoaXBfc2VsZWN0ID49IHNwaS0+bWFzdGVyLT5udW1fY2hpcHNlbGVjdCkgeworCQlkZXZfZGJnKCZzcGktPmRldiwgIiVkIGNoaXAgc2VsZWN0IGlzIG91dCBvZiByYW5nZVxuIiwKKwkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltY2Zxc3BpX2NzX2Rlc2VsZWN0KHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpLAorCQkJICAgIHNwaS0+Y2hpcF9zZWxlY3QsIHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIKTsKKworCWRldl9kYmcoJnNwaS0+ZGV2LAorCQkJImJpdHMgcGVyIHdvcmQgJWQsIGNoaXAgc2VsZWN0ICVkLCBzcGVlZCAlZCBLSHpcbiIsCisJCQlzcGktPmJpdHNfcGVyX3dvcmQsIHNwaS0+Y2hpcF9zZWxlY3QsCisJCQkoTUNGUVNQSV9CVVNDTEsgLyBtY2Zxc3BpX3Ftcl9iYXVkKHNwaS0+bWF4X3NwZWVkX2h6KSkKKwkJCS8gMTAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbWNmcXNwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IG1jZnFzcGkgKm1jZnFzcGk7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IG1jZnFzcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJaW50IHN0YXR1czsKKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwgc2l6ZW9mKCptY2Zxc3BpKSk7CisJaWYgKG1hc3RlciA9PSBOVUxMKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInNwaV9hbGxvY19tYXN0ZXIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWNmcXNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicGxhdGZvcm1fZ2V0X3Jlc291cmNlIGZhaWxlZFxuIik7CisJCXN0YXR1cyA9IC1FTlhJTzsKKwkJZ290byBmYWlsMDsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlzdGF0dXMgPSAtRUJVU1k7CisJCWdvdG8gZmFpbDA7CisJfQorCisJbWNmcXNwaS0+aW9iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghbWNmcXNwaS0+aW9iYXNlKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBmYWlsMTsKKwl9CisKKwltY2Zxc3BpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChtY2Zxc3BpLT5pcnEgPCAwKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInBsYXRmb3JtX2dldF9pcnEgZmFpbGVkXG4iKTsKKwkJc3RhdHVzID0gLUVOWElPOworCQlnb3RvIGZhaWwyOworCX0KKworCXN0YXR1cyA9IHJlcXVlc3RfaXJxKG1jZnFzcGktPmlycSwgbWNmcXNwaV9pcnFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgICAgcGRldi0+bmFtZSwgbWNmcXNwaSk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWwyOworCX0KKworCW1jZnFzcGktPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInFzcGlfY2xrIik7CisJaWYgKElTX0VSUihtY2Zxc3BpLT5jbGspKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNsa19nZXQgZmFpbGVkXG4iKTsKKwkJc3RhdHVzID0gUFRSX0VSUihtY2Zxc3BpLT5jbGspOworCQlnb3RvIGZhaWwzOworCX0KKwljbGtfZW5hYmxlKG1jZnFzcGktPmNsayk7CisKKwltY2Zxc3BpLT53b3JrcSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGRldl9uYW1lKG1hc3Rlci0+ZGV2LnBhcmVudCkpOworCWlmICghbWNmcXNwaS0+d29ya3EpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY3JlYXRlX3dvcmtxdWV1ZSBmYWlsZWRcbiIpOworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw0OworCX0KKwlJTklUX1dPUksoJm1jZnFzcGktPndvcmssIG1jZnFzcGlfd29yayk7CisJc3Bpbl9sb2NrX2luaXQoJm1jZnFzcGktPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZtY2Zxc3BpLT5tc2dxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtY2Zxc3BpLT53YWl0cSk7CisKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicGxhdGZvcm0gZGF0YSBpcyBtaXNzaW5nXG4iKTsKKwkJZ290byBmYWlsNTsKKwl9CisJbWFzdGVyLT5idXNfbnVtID0gcGRhdGEtPmJ1c19udW07CisJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IHBkYXRhLT5udW1fY2hpcHNlbGVjdDsKKworCW1jZnFzcGktPmNzX2NvbnRyb2wgPSBwZGF0YS0+Y3NfY29udHJvbDsKKwlzdGF0dXMgPSBtY2Zxc3BpX2NzX3NldHVwKG1jZnFzcGkpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZXJyb3IgaW5pdGlhbGl6aW5nIGNzX2NvbnRyb2xcbiIpOworCQlnb3RvIGZhaWw1OworCX0KKworCW1hc3Rlci0+bW9kZV9iaXRzID0gU1BJX0NTX0hJR0ggfCBTUElfQ1BPTCB8IFNQSV9DUEhBOworCW1hc3Rlci0+c2V0dXAgPSBtY2Zxc3BpX3NldHVwOworCW1hc3Rlci0+dHJhbnNmZXIgPSBtY2Zxc3BpX3RyYW5zZmVyOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWFzdGVyKTsKKworCXN0YXR1cyA9IHNwaV9yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInNwaV9yZWdpc3Rlcl9tYXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBmYWlsNjsKKwl9CisJZGV2X2luZm8oJnBkZXYtPmRldiwgIkNvbGRmaXJlIFFTUEkgYnVzIGRyaXZlclxuIik7CisKKwlyZXR1cm4gMDsKKworZmFpbDY6CisJbWNmcXNwaV9jc190ZWFyZG93bihtY2Zxc3BpKTsKK2ZhaWw1OgorCWRlc3Ryb3lfd29ya3F1ZXVlKG1jZnFzcGktPndvcmtxKTsKK2ZhaWw0OgorCWNsa19kaXNhYmxlKG1jZnFzcGktPmNsayk7CisJY2xrX3B1dChtY2Zxc3BpLT5jbGspOworZmFpbDM6CisJZnJlZV9pcnEobWNmcXNwaS0+aXJxLCBtY2Zxc3BpKTsKK2ZhaWwyOgorCWlvdW5tYXAobWNmcXNwaS0+aW9iYXNlKTsKK2ZhaWwxOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZmFpbDA6CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIkNvbGRmaXJlIFFTUEkgcHJvYmUgZmFpbGVkXG4iKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1jZnFzcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKworCS8qIGRpc2FibGUgdGhlIGhhcmR3YXJlIChzZXQgdGhlIGJhdWQgcmF0ZSB0byAwKSAqLworCW1jZnFzcGlfd3JfcW1yKG1jZnFzcGksIE1DRlFTUElfUU1SX01TVFIpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJbWNmcXNwaV9jc190ZWFyZG93bihtY2Zxc3BpKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShtY2Zxc3BpLT53b3JrcSk7CisJY2xrX2Rpc2FibGUobWNmcXNwaS0+Y2xrKTsKKwljbGtfcHV0KG1jZnFzcGktPmNsayk7CisJZnJlZV9pcnEobWNmcXNwaS0+aXJxLCBtY2Zxc3BpKTsKKwlpb3VubWFwKG1jZnFzcGktPmlvYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJc3BpX3VucmVnaXN0ZXJfbWFzdGVyKG1hc3Rlcik7CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgbWNmcXNwaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKworCWNsa19kaXNhYmxlKG1jZnFzcGktPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtY2Zxc3BpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1jZnFzcGkgKm1jZnFzcGkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CisKKwljbGtfZW5hYmxlKG1jZnFzcGktPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIG1jZnFzcGlfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IG1jZnFzcGlfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG1jZnFzcGlfcmVzdW1lLAorfTsKKworI2RlZmluZQlNQ0ZRU1BJX0RFVl9QTV9PUFMJKCZtY2Zxc3BpX2Rldl9wbV9vcHMpCisjZWxzZQorI2RlZmluZQlNQ0ZRU1BJX0RFVl9QTV9PUFMJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1jZnFzcGlfZHJpdmVyID0geworCS5kcml2ZXIubmFtZQk9IERSSVZFUl9OQU1FLAorCS5kcml2ZXIub3duZXIJPSBUSElTX01PRFVMRSwKKwkuZHJpdmVyLnBtCT0gTUNGUVNQSV9ERVZfUE1fT1BTLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobWNmcXNwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWNmcXNwaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbWNmcXNwaV9kcml2ZXIsIG1jZnFzcGlfcHJvYmUpOworfQorbW9kdWxlX2luaXQobWNmcXNwaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1jZnFzcGlfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtY2Zxc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtY2Zxc3BpX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gS2luZyA8c2ZraW5nQGZkd2RjLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29sZGZpcmUgUVNQSSBDb250cm9sbGVyIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSSVZFUl9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2RhdmluY2lfc3BpLmMgYi9kcml2ZXJzL3NwaS9kYXZpbmNpX3NwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNWFiNjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9kYXZpbmNpX3NwaS5jCkBAIC0wLDAgKzEsMTI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CisKKyNpbmNsdWRlIDxtYWNoL3NwaS5oPgorI2luY2x1ZGUgPG1hY2gvZWRtYS5oPgorCisjZGVmaW5lIFNQSV9OT19SRVNPVVJDRQkJKChyZXNvdXJjZV9zaXplX3QpLTEpCisKKyNkZWZpbmUgU1BJX01BWF9DSElQU0VMRUNUCTIKKworI2RlZmluZSBDU19ERUZBVUxUCTB4RkYKKworI2RlZmluZSBTUElfQlVGU0laCShTTVBfQ0FDSEVfQllURVMgKyAxKQorI2RlZmluZSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzgJMHgwMQorI2RlZmluZSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzE2CTB4MDIKKyNkZWZpbmUgREFWSU5DSV9ETUFfREFUQV9UWVBFX1MzMgkweDA0CisKKyNkZWZpbmUgU1BJRk1UX1BIQVNFX01BU0sJQklUKDE2KQorI2RlZmluZSBTUElGTVRfUE9MQVJJVFlfTUFTSwlCSVQoMTcpCisjZGVmaW5lIFNQSUZNVF9ESVNUSU1FUl9NQVNLCUJJVCgxOCkKKyNkZWZpbmUgU1BJRk1UX1NISUZURElSX01BU0sJQklUKDIwKQorI2RlZmluZSBTUElGTVRfV0FJVEVOQV9NQVNLCUJJVCgyMSkKKyNkZWZpbmUgU1BJRk1UX1BBUklUWUVOQV9NQVNLCUJJVCgyMikKKyNkZWZpbmUgU1BJRk1UX09ERF9QQVJJVFlfTUFTSwlCSVQoMjMpCisjZGVmaW5lIFNQSUZNVF9XREVMQVlfTUFTSwkweDNmMDAwMDAwdQorI2RlZmluZSBTUElGTVRfV0RFTEFZX1NISUZUCTI0CisjZGVmaW5lIFNQSUZNVF9DSEFSTEVOX01BU0sJMHgwMDAwMDAxRnUKKworLyogU1BJR0NSMSAqLworI2RlZmluZSBTUElHQ1IxX1NQSUVOQV9NQVNLCTB4MDEwMDAwMDB1CisKKy8qIFNQSVBDMCAqLworI2RlZmluZSBTUElQQzBfRElGVU5fTUFTSwlCSVQoMTEpCQkvKiBNSVNPICovCisjZGVmaW5lIFNQSVBDMF9ET0ZVTl9NQVNLCUJJVCgxMCkJCS8qIE1PU0kgKi8KKyNkZWZpbmUgU1BJUEMwX0NMS0ZVTl9NQVNLCUJJVCg5KQkJLyogQ0xLICovCisjZGVmaW5lIFNQSVBDMF9TUElFTkFfTUFTSwlCSVQoOCkJCS8qIG5SRUFEWSAqLworI2RlZmluZSBTUElQQzBfRU4xRlVOX01BU0sJQklUKDEpCisjZGVmaW5lIFNQSVBDMF9FTjBGVU5fTUFTSwlCSVQoMCkKKworI2RlZmluZSBTUElJTlRfTUFTS0FMTAkJMHgwMTAxMDM1RgorI2RlZmluZSBTUElfSU5UTFZMXzEJCTB4MDAwMDAxRkZ1CisjZGVmaW5lIFNQSV9JTlRMVkxfMAkJMHgwMDAwMDAwMHUKKworLyogU1BJREFUMSAqLworI2RlZmluZSBTUElEQVQxX0NTSE9MRF9TSElGVAkyOAorI2RlZmluZSBTUElEQVQxX0NTTlJfU0hJRlQJMTYKKyNkZWZpbmUgU1BJR0NSMV9DTEtNT0RfTUFTSwlCSVQoMSkKKyNkZWZpbmUgU1BJR0NSMV9NQVNURVJfTUFTSyAgICAgQklUKDApCisjZGVmaW5lIFNQSUdDUjFfTE9PUEJBQ0tfTUFTSwlCSVQoMTYpCisKKy8qIFNQSUJVRiAqLworI2RlZmluZSBTUElCVUZfVFhGVUxMX01BU0sJQklUKDI5KQorI2RlZmluZSBTUElCVUZfUlhFTVBUWV9NQVNLCUJJVCgzMSkKKworLyogRXJyb3IgTWFza3MgKi8KKyNkZWZpbmUgU1BJRkxHX0RMRU5fRVJSX01BU0sJCUJJVCgwKQorI2RlZmluZSBTUElGTEdfVElNRU9VVF9NQVNLCQlCSVQoMSkKKyNkZWZpbmUgU1BJRkxHX1BBUkVSUl9NQVNLCQlCSVQoMikKKyNkZWZpbmUgU1BJRkxHX0RFU1lOQ19NQVNLCQlCSVQoMykKKyNkZWZpbmUgU1BJRkxHX0JJVEVSUl9NQVNLCQlCSVQoNCkKKyNkZWZpbmUgU1BJRkxHX09WUlJVTl9NQVNLCQlCSVQoNikKKyNkZWZpbmUgU1BJRkxHX1JYX0lOVFJfTUFTSwkJQklUKDgpCisjZGVmaW5lIFNQSUZMR19UWF9JTlRSX01BU0sJCUJJVCg5KQorI2RlZmluZSBTUElGTEdfQlVGX0lOSVRfQUNUSVZFX01BU0sJQklUKDI0KQorI2RlZmluZSBTUElGTEdfTUFTSwkJCShTUElGTEdfRExFTl9FUlJfTUFTSyBcCisJCQkJfCBTUElGTEdfVElNRU9VVF9NQVNLIHwgU1BJRkxHX1BBUkVSUl9NQVNLIFwKKwkJCQl8IFNQSUZMR19ERVNZTkNfTUFTSyB8IFNQSUZMR19CSVRFUlJfTUFTSyBcCisJCQkJfCBTUElGTEdfT1ZSUlVOX01BU0sgfCBTUElGTEdfUlhfSU5UUl9NQVNLIFwKKwkJCQl8IFNQSUZMR19UWF9JTlRSX01BU0sgXAorCQkJCXwgU1BJRkxHX0JVRl9JTklUX0FDVElWRV9NQVNLKQorCisjZGVmaW5lIFNQSUlOVF9ETEVOX0VSUl9JTlRSCUJJVCgwKQorI2RlZmluZSBTUElJTlRfVElNRU9VVF9JTlRSCUJJVCgxKQorI2RlZmluZSBTUElJTlRfUEFSRVJSX0lOVFIJQklUKDIpCisjZGVmaW5lIFNQSUlOVF9ERVNZTkNfSU5UUglCSVQoMykKKyNkZWZpbmUgU1BJSU5UX0JJVEVSUl9JTlRSCUJJVCg0KQorI2RlZmluZSBTUElJTlRfT1ZSUlVOX0lOVFIJQklUKDYpCisjZGVmaW5lIFNQSUlOVF9SWF9JTlRSCQlCSVQoOCkKKyNkZWZpbmUgU1BJSU5UX1RYX0lOVFIJCUJJVCg5KQorI2RlZmluZSBTUElJTlRfRE1BX1JFUV9FTglCSVQoMTYpCisjZGVmaW5lIFNQSUlOVF9FTkFCTEVfSElHSFoJQklUKDI0KQorCisjZGVmaW5lIFNQSV9UMkNERUxBWV9TSElGVAkxNgorI2RlZmluZSBTUElfQzJUREVMQVlfU0hJRlQJMjQKKworLyogU1BJIENvbnRyb2xsZXIgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNQSUdDUjAJCTB4MDAKKyNkZWZpbmUgU1BJR0NSMQkJMHgwNAorI2RlZmluZSBTUElJTlQJCTB4MDgKKyNkZWZpbmUgU1BJTFZMCQkweDBjCisjZGVmaW5lIFNQSUZMRwkJMHgxMAorI2RlZmluZSBTUElQQzAJCTB4MTQKKyNkZWZpbmUgU1BJUEMxCQkweDE4CisjZGVmaW5lIFNQSVBDMgkJMHgxYworI2RlZmluZSBTUElQQzMJCTB4MjAKKyNkZWZpbmUgU1BJUEM0CQkweDI0CisjZGVmaW5lIFNQSVBDNQkJMHgyOAorI2RlZmluZSBTUElQQzYJCTB4MmMKKyNkZWZpbmUgU1BJUEM3CQkweDMwCisjZGVmaW5lIFNQSVBDOAkJMHgzNAorI2RlZmluZSBTUElEQVQwCQkweDM4CisjZGVmaW5lIFNQSURBVDEJCTB4M2MKKyNkZWZpbmUgU1BJQlVGCQkweDQwCisjZGVmaW5lIFNQSUVNVQkJMHg0NAorI2RlZmluZSBTUElERUxBWQkweDQ4CisjZGVmaW5lIFNQSURFRgkJMHg0YworI2RlZmluZSBTUElGTVQwCQkweDUwCisjZGVmaW5lIFNQSUZNVDEJCTB4NTQKKyNkZWZpbmUgU1BJRk1UMgkJMHg1OAorI2RlZmluZSBTUElGTVQzCQkweDVjCisjZGVmaW5lIFRHSU5UVkVDMAkweDYwCisjZGVmaW5lIFRHSU5UVkVDMQkweDY0CisKK3N0cnVjdCBkYXZpbmNpX3NwaV9zbGF2ZSB7CisJdTMyCWNtZF90b193cml0ZTsKKwl1MzIJY2xrX2N0cmxfdG9fd3JpdGU7CisJdTMyCWJ5dGVzX3Blcl93b3JkOworCXU4CWFjdGl2ZV9jczsKK307CisKKy8qIFdlIGhhdmUgMiBETUEgY2hhbm5lbHMgcGVyIENTLCBvbmUgZm9yIFJYIGFuZCBvbmUgZm9yIFRYICovCitzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hIHsKKwlpbnQJCQlkbWFfdHhfY2hhbm5lbDsKKwlpbnQJCQlkbWFfcnhfY2hhbm5lbDsKKwlpbnQJCQlkbWFfdHhfc3luY19kZXY7CisJaW50CQkJZG1hX3J4X3N5bmNfZGV2OworCWVudW0gZG1hX2V2ZW50X3EJZXZlbnRxOworCisJc3RydWN0IGNvbXBsZXRpb24JZG1hX3R4X2NvbXBsZXRpb247CisJc3RydWN0IGNvbXBsZXRpb24JZG1hX3J4X2NvbXBsZXRpb247Cit9OworCisvKiBTUEkgQ29udHJvbGxlciBkcml2ZXIncyBwcml2YXRlIGRhdGEuICovCitzdHJ1Y3QgZGF2aW5jaV9zcGkgeworCXN0cnVjdCBzcGlfYml0YmFuZwliaXRiYW5nOworCXN0cnVjdCBjbGsJCSpjbGs7CisKKwl1OAkJCXZlcnNpb247CisJcmVzb3VyY2Vfc2l6ZV90CQlwYmFzZTsKKwl2b2lkIF9faW9tZW0JCSpiYXNlOworCXNpemVfdAkJCXJlZ2lvbl9zaXplOworCXUzMgkJCWlycTsKKwlzdHJ1Y3QgY29tcGxldGlvbglkb25lOworCisJY29uc3Qgdm9pZAkJKnR4OworCXZvaWQJCQkqcng7CisJdTgJCQkqdG1wX2J1ZjsKKwlpbnQJCQljb3VudDsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hCSpkbWFfY2hhbm5lbHM7CisJc3RydWN0CQkJZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKKwl2b2lkCQkJKCpnZXRfcngpKHUzMiByeF9kYXRhLCBzdHJ1Y3QgZGF2aW5jaV9zcGkgKik7CisJdTMyCQkJKCpnZXRfdHgpKHN0cnVjdCBkYXZpbmNpX3NwaSAqKTsKKworCXN0cnVjdCBkYXZpbmNpX3NwaV9zbGF2ZSBzbGF2ZVtTUElfTUFYX0NISVBTRUxFQ1RdOworfTsKKworc3RhdGljIHVuc2lnbmVkIHVzZV9kbWE7CisKK3N0YXRpYyB2b2lkIGRhdmluY2lfc3BpX3J4X2J1Zl91OCh1MzIgZGF0YSwgc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSkKK3sKKwl1OCAqcnggPSBkYXZpbmNpX3NwaS0+cng7CisKKwkqcngrKyA9ICh1OClkYXRhOworCWRhdmluY2lfc3BpLT5yeCA9IHJ4OworfQorCitzdGF0aWMgdm9pZCBkYXZpbmNpX3NwaV9yeF9idWZfdTE2KHUzMiBkYXRhLCBzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpKQoreworCXUxNiAqcnggPSBkYXZpbmNpX3NwaS0+cng7CisKKwkqcngrKyA9ICh1MTYpZGF0YTsKKwlkYXZpbmNpX3NwaS0+cnggPSByeDsKK30KKworc3RhdGljIHUzMiBkYXZpbmNpX3NwaV90eF9idWZfdTgoc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSkKK3sKKwl1MzIgZGF0YTsKKwljb25zdCB1OCAqdHggPSBkYXZpbmNpX3NwaS0+dHg7CisKKwlkYXRhID0gKnR4Kys7CisJZGF2aW5jaV9zcGktPnR4ID0gdHg7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB1MzIgZGF2aW5jaV9zcGlfdHhfYnVmX3UxNihzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpKQoreworCXUzMiBkYXRhOworCWNvbnN0IHUxNiAqdHggPSBkYXZpbmNpX3NwaS0+dHg7CisKKwlkYXRhID0gKnR4Kys7CisJZGF2aW5jaV9zcGktPnR4ID0gdHg7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW9fYml0cyh2b2lkIF9faW9tZW0gKmFkZHIsIHUzMiBiaXRzKQoreworCXUzMiB2ID0gaW9yZWFkMzIoYWRkcik7CisKKwl2IHw9IGJpdHM7CisJaW93cml0ZTMyKHYsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfaW9fYml0cyh2b2lkIF9faW9tZW0gKmFkZHIsIHUzMiBiaXRzKQoreworCXUzMiB2ID0gaW9yZWFkMzIoYWRkcik7CisKKwl2ICY9IH5iaXRzOworCWlvd3JpdGUzMih2LCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9mbXRfYml0cyh2b2lkIF9faW9tZW0gKmFkZHIsIHUzMiBiaXRzLCBpbnQgY3NfbnVtKQoreworCXNldF9pb19iaXRzKGFkZHIgKyBTUElGTVQwICsgKDB4NCAqIGNzX251bSksIGJpdHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfZm10X2JpdHModm9pZCBfX2lvbWVtICphZGRyLCB1MzIgYml0cywgaW50IGNzX251bSkKK3sKKwljbGVhcl9pb19iaXRzKGFkZHIgKyBTUElGTVQwICsgKDB4NCAqIGNzX251bSksIGJpdHMpOworfQorCitzdGF0aWMgdm9pZCBkYXZpbmNpX3NwaV9zZXRfZG1hX3JlcShjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCWlmIChlbmFibGUpCisJCXNldF9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJSU5ULCBTUElJTlRfRE1BX1JFUV9FTik7CisJZWxzZQorCQljbGVhcl9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJSU5ULCBTUElJTlRfRE1BX1JFUV9FTik7Cit9CisKKy8qCisgKiBJbnRlcmZhY2UgdG8gY29udHJvbCB0aGUgY2hpcCBzZWxlY3Qgc2lnbmFsCisgKi8KK3N0YXRpYyB2b2lkIGRhdmluY2lfc3BpX2NoaXBzZWxlY3Qoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IHZhbHVlKQoreworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXUzMiBkYXRhMV9yZWdfdmFsID0gMDsKKworCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJcGRhdGEgPSBkYXZpbmNpX3NwaS0+cGRhdGE7CisKKwkvKgorCSAqIEJvYXJkIHNwZWNpZmljIGNoaXAgc2VsZWN0IGxvZ2ljIGRlY2lkZXMgdGhlIHBvbGFyaXR5IGFuZCBjcworCSAqIGxpbmUgZm9yIHRoZSBjb250cm9sbGVyCisJICovCisJaWYgKHZhbHVlID09IEJJVEJBTkdfQ1NfSU5BQ1RJVkUpIHsKKwkJc2V0X2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElERUYsIENTX0RFRkFVTFQpOworCisJCWRhdGExX3JlZ192YWwgfD0gQ1NfREVGQVVMVCA8PCBTUElEQVQxX0NTTlJfU0hJRlQ7CisJCWlvd3JpdGUzMihkYXRhMV9yZWdfdmFsLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOworCisJCXdoaWxlICgoaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpCisJCQkJCSYgU1BJQlVGX1JYRU1QVFlfTUFTSykgPT0gMCkKKwkJCWNwdV9yZWxheCgpOworCX0KK30KKworLyoqCisgKiBkYXZpbmNpX3NwaV9zZXR1cF90cmFuc2ZlciAtIFRoaXMgZnVuY3Rpb25zIHdpbGwgZGV0ZXJtaW5lIHRyYW5zZmVyIG1ldGhvZAorICogQHNwaTogc3BpIGRldmljZSBvbiB3aGljaCBkYXRhIHRyYW5zZmVyIHRvIGJlIGRvbmUKKyAqIEB0OiBzcGkgdHJhbnNmZXIgaW4gd2hpY2ggdHJhbnNmZXIgaW5mbyBpcyBmaWxsZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgZGF0YSB0cmFuc2ZlciBtZXRob2QgKDgvMTYvMzIgYml0IHRyYW5zZmVyKS4KKyAqIEl0IHdpbGwgYWxzbyBzZXQgdGhlIFNQSSBDbG9jayBDb250cm9sIHJlZ2lzdGVyIGFjY29yZGluZyB0bworICogU1BJIHNsYXZlIGRldmljZSBmcmVxLgorICovCitzdGF0aWMgaW50IGRhdmluY2lfc3BpX3NldHVwX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOworCXN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwl1OCBiaXRzX3Blcl93b3JkID0gMDsKKwl1MzIgaHogPSAwLCBwcmVzY2FsZTsKKworCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJcGRhdGEgPSBkYXZpbmNpX3NwaS0+cGRhdGE7CisKKwlpZiAodCkgeworCQliaXRzX3Blcl93b3JkID0gdC0+Yml0c19wZXJfd29yZDsKKwkJaHogPSB0LT5zcGVlZF9oejsKKwl9CisKKwkvKiBpZiBiaXRzX3Blcl93b3JkIGlzIG5vdCBzZXQgdGhlbiBzZXQgaXQgZGVmYXVsdCAqLworCWlmICghYml0c19wZXJfd29yZCkKKwkJYml0c19wZXJfd29yZCA9IHNwaS0+Yml0c19wZXJfd29yZDsKKworCS8qCisJICogQXNzaWduIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYXBwcm9wcmlhdGUgdHJhbnNmZXIgbWV0aG9kCisJICogOGJpdCwgMTZiaXQgb3IgMzJiaXQgdHJhbnNmZXIKKwkgKi8KKwlpZiAoYml0c19wZXJfd29yZCA8PSA4ICYmIGJpdHNfcGVyX3dvcmQgPj0gMikgeworCQlkYXZpbmNpX3NwaS0+Z2V0X3J4ID0gZGF2aW5jaV9zcGlfcnhfYnVmX3U4OworCQlkYXZpbmNpX3NwaS0+Z2V0X3R4ID0gZGF2aW5jaV9zcGlfdHhfYnVmX3U4OworCQlkYXZpbmNpX3NwaS0+c2xhdmVbc3BpLT5jaGlwX3NlbGVjdF0uYnl0ZXNfcGVyX3dvcmQgPSAxOworCX0gZWxzZSBpZiAoYml0c19wZXJfd29yZCA8PSAxNiAmJiBiaXRzX3Blcl93b3JkID49IDIpIHsKKwkJZGF2aW5jaV9zcGktPmdldF9yeCA9IGRhdmluY2lfc3BpX3J4X2J1Zl91MTY7CisJCWRhdmluY2lfc3BpLT5nZXRfdHggPSBkYXZpbmNpX3NwaV90eF9idWZfdTE2OworCQlkYXZpbmNpX3NwaS0+c2xhdmVbc3BpLT5jaGlwX3NlbGVjdF0uYnl0ZXNfcGVyX3dvcmQgPSAyOworCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghaHopCisJCWh6ID0gc3BpLT5tYXhfc3BlZWRfaHo7CisKKwljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX0NIQVJMRU5fTUFTSywKKwkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgYml0c19wZXJfd29yZCAmIDB4MWYsCisJCQlzcGktPmNoaXBfc2VsZWN0KTsKKworCXByZXNjYWxlID0gKChjbGtfZ2V0X3JhdGUoZGF2aW5jaV9zcGktPmNsaykgLyBoeikgLSAxKSAmIDB4ZmY7CisKKwljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgMHgwMDAwZmYwMCwgc3BpLT5jaGlwX3NlbGVjdCk7CisJc2V0X2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCBwcmVzY2FsZSA8PCA4LCBzcGktPmNoaXBfc2VsZWN0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkYXZpbmNpX3NwaV9kbWFfcnhfY2FsbGJhY2sodW5zaWduZWQgbGNoLCB1MTYgY2hfc3RhdHVzLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSAoc3RydWN0IHNwaV9kZXZpY2UgKilkYXRhOworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJc3RydWN0IGRhdmluY2lfc3BpX2RtYSAqZGF2aW5jaV9zcGlfZG1hOworCXN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJZGF2aW5jaV9zcGlfZG1hID0gJihkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW3NwaS0+Y2hpcF9zZWxlY3RdKTsKKwlwZGF0YSA9IGRhdmluY2lfc3BpLT5wZGF0YTsKKworCWlmIChjaF9zdGF0dXMgPT0gRE1BX0NPTVBMRVRFKQorCQllZG1hX3N0b3AoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCk7CisJZWxzZQorCQllZG1hX2NsZWFuX2NoYW5uZWwoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCk7CisKKwljb21wbGV0ZSgmZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY29tcGxldGlvbik7CisJLyogV2UgbXVzdCBkaXNhYmxlIHRoZSBETUEgUlggcmVxdWVzdCAqLworCWRhdmluY2lfc3BpX3NldF9kbWFfcmVxKHNwaSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRhdmluY2lfc3BpX2RtYV90eF9jYWxsYmFjayh1bnNpZ25lZCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IChzdHJ1Y3Qgc3BpX2RldmljZSAqKWRhdGE7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hICpkYXZpbmNpX3NwaV9kbWE7CisJc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCisJZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlkYXZpbmNpX3NwaV9kbWEgPSAmKGRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbc3BpLT5jaGlwX3NlbGVjdF0pOworCXBkYXRhID0gZGF2aW5jaV9zcGktPnBkYXRhOworCisJaWYgKGNoX3N0YXR1cyA9PSBETUFfQ09NUExFVEUpCisJCWVkbWFfc3RvcChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsKTsKKwllbHNlCisJCWVkbWFfY2xlYW5fY2hhbm5lbChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsKTsKKworCWNvbXBsZXRlKCZkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jb21wbGV0aW9uKTsKKwkvKiBXZSBtdXN0IGRpc2FibGUgdGhlIERNQSBUWCByZXF1ZXN0ICovCisJZGF2aW5jaV9zcGlfc2V0X2RtYV9yZXEoc3BpLCAwKTsKK30KKworc3RhdGljIGludCBkYXZpbmNpX3NwaV9yZXF1ZXN0X2RtYShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJc3RydWN0IGRhdmluY2lfc3BpX2RtYSAqZGF2aW5jaV9zcGlfZG1hOworCXN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpzZGV2OworCWludCByOworCisJZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlkYXZpbmNpX3NwaV9kbWEgPSAmZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tzcGktPmNoaXBfc2VsZWN0XTsKKwlwZGF0YSA9IGRhdmluY2lfc3BpLT5wZGF0YTsKKwlzZGV2ID0gZGF2aW5jaV9zcGktPmJpdGJhbmcubWFzdGVyLT5kZXYucGFyZW50OworCisJciA9IGVkbWFfYWxsb2NfY2hhbm5lbChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9zeW5jX2RldiwKKwkJCQlkYXZpbmNpX3NwaV9kbWFfcnhfY2FsbGJhY2ssIHNwaSwKKwkJCQlkYXZpbmNpX3NwaV9kbWEtPmV2ZW50cSk7CisJaWYgKHIgPCAwKSB7CisJCWRldl9kYmcoc2RldiwgIlVuYWJsZSB0byByZXF1ZXN0IERNQSBjaGFubmVsIGZvciBTUEkgUlhcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCA9IHI7CisJciA9IGVkbWFfYWxsb2NfY2hhbm5lbChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9zeW5jX2RldiwKKwkJCQlkYXZpbmNpX3NwaV9kbWFfdHhfY2FsbGJhY2ssIHNwaSwKKwkJCQlkYXZpbmNpX3NwaV9kbWEtPmV2ZW50cSk7CisJaWYgKHIgPCAwKSB7CisJCWVkbWFfZnJlZV9jaGFubmVsKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwpOworCQlkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsID0gLTE7CisJCWRldl9kYmcoc2RldiwgIlVuYWJsZSB0byByZXF1ZXN0IERNQSBjaGFubmVsIGZvciBTUEkgVFhcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCA9IHI7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBkYXZpbmNpX3NwaV9zZXR1cCAtIFRoaXMgZnVuY3Rpb25zIHdpbGwgc2V0IGRlZmF1bHQgdHJhbnNmZXIgbWV0aG9kCisgKiBAc3BpOiBzcGkgZGV2aWNlIG9uIHdoaWNoIGRhdGEgdHJhbnNmZXIgdG8gYmUgZG9uZQorICoKKyAqIFRoaXMgZnVuY3Rpb25zIHNldHMgdGhlIGRlZmF1bHQgdHJhbnNmZXIgbWV0aG9kLgorICovCisKK3N0YXRpYyBpbnQgZGF2aW5jaV9zcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJc3RydWN0IGRhdmluY2lfc3BpX2RtYSAqZGF2aW5jaV9zcGlfZG1hOworCXN0cnVjdCBkZXZpY2UgKnNkZXY7CisKKwlkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXNkZXYgPSBkYXZpbmNpX3NwaS0+Yml0YmFuZy5tYXN0ZXItPmRldi5wYXJlbnQ7CisKKwkvKiBpZiBiaXRzIHBlciB3b3JkIGxlbmd0aCBpcyB6ZXJvIHRoZW4gc2V0IGl0IGRlZmF1bHQgOCAqLworCWlmICghc3BpLT5iaXRzX3Blcl93b3JkKQorCQlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OworCisJZGF2aW5jaV9zcGktPnNsYXZlW3NwaS0+Y2hpcF9zZWxlY3RdLmNtZF90b193cml0ZSA9IDA7CisKKwlpZiAodXNlX2RtYSAmJiBkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzKSB7CisJCWRhdmluY2lfc3BpX2RtYSA9ICZkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW3NwaS0+Y2hpcF9zZWxlY3RdOworCisJCWlmICgoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCA9PSAtMSkKKwkJCQl8fCAoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCA9PSAtMSkpIHsKKwkJCXJldHZhbCA9IGRhdmluY2lfc3BpX3JlcXVlc3RfZG1hKHNwaSk7CisJCQlpZiAocmV0dmFsIDwgMCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJfQorCisJLyoKKwkgKiBTUEkgaW4gRGFWaW5jaSBhbmQgREE4eHggb3BlcmF0ZSBiZXR3ZWVuCisJICogNjAwIEtIeiBhbmQgNTAgTUh6CisJICovCisJaWYgKHNwaS0+bWF4X3NwZWVkX2h6IDwgNjAwMDAwIHx8IHNwaS0+bWF4X3NwZWVkX2h6ID4gNTAwMDAwMDApIHsKKwkJZGV2X2RiZyhzZGV2LCAiT3BlcmF0aW5nIGZyZXF1ZW5jeSBpcyBub3QgaW4gYWNjZXB0YWJsZSAiCisJCQkJInJhbmdlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBTZXQgdXAgU1BJRk1UbiByZWdpc3RlciwgdW5pcXVlIHRvIHRoaXMgY2hpcHNlbGVjdC4KKwkgKgorCSAqIE5PVEU6IHdlIGNvdWxkIGRvIGFsbCBvZiB0aGVzZSB3aXRoIG9uZSB3cml0ZS4gIEFsc28sIHNvbWUKKwkgKiBvZiB0aGUgInZlcnNpb24gMiIgZmVhdHVyZXMgYXJlIGZvdW5kIGluIGNoaXBzIHRoYXQgZG9uJ3QKKwkgKiBzdXBwb3J0IGFsbCBvZiB0aGVtLi4uCisJICovCisJaWYgKHNwaS0+bW9kZSAmIFNQSV9MU0JfRklSU1QpCisJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX1NISUZURElSX01BU0ssCisJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJZWxzZQorCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX1NISUZURElSX01BU0ssCisJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisKKwlpZiAoc3BpLT5tb2RlICYgU1BJX0NQT0wpCisJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX1BPTEFSSVRZX01BU0ssCisJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJZWxzZQorCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX1BPTEFSSVRZX01BU0ssCisJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisKKwlpZiAoIShzcGktPm1vZGUgJiBTUElfQ1BIQSkpCisJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX1BIQVNFX01BU0ssCisJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJZWxzZQorCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX1BIQVNFX01BU0ssCisJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisKKwkvKgorCSAqIFZlcnNpb24gMSBoYXJkd2FyZSBzdXBwb3J0cyB0d28gYmFzaWMgU1BJIG1vZGVzOgorCSAqICAtIFN0YW5kYXJkIFNQSSBtb2RlIHVzZXMgNCBwaW5zLCB3aXRoIGNoaXBzZWxlY3QKKwkgKiAgLSAzIHBpbiBTUEkgaXMgYSA0IHBpbiB2YXJpYW50IHdpdGhvdXQgQ1MgKFNQSV9OT19DUykKKwkgKgkoZGlzdGluY3QgZnJvbSBTUElfM1dJUkUsIHdpdGgganVzdCBvbmUgZGF0YSB3aXJlOworCSAqCW9yIHNpbWlsYXIgdmFyaWFudHMgd2l0aG91dCBNT1NJIG9yIHdpdGhvdXQgTUlTTykKKwkgKgorCSAqIFZlcnNpb24gMiBoYXJkd2FyZSBzdXBwb3J0cyBhbiBvcHRpb25hbCBoYW5kc2hha2luZyBzaWduYWwsCisJICogc28gaXQgY2FuIHN1cHBvcnQgdHdvIG1vcmUgbW9kZXM6CisJICogIC0gNSBwaW4gU1BJIHZhcmlhbnQgaXMgc3RhbmRhcmQgU1BJIHBsdXMgU1BJX1JFQURZCisJICogIC0gNCBwaW4gd2l0aCBlbmFibGUgaXMgKFNQSV9SRUFEWSB8IFNQSV9OT19DUykKKwkgKi8KKworCWlmIChkYXZpbmNpX3NwaS0+dmVyc2lvbiA9PSBTUElfVkVSU0lPTl8yKSB7CisJCWNsZWFyX2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCBTUElGTVRfV0RFTEFZX01BU0ssCisJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKKwkJCQkoZGF2aW5jaV9zcGktPnBkYXRhLT53ZGVsYXkKKwkJCQkJCTw8IFNQSUZNVF9XREVMQVlfU0hJRlQpCisJCQkJCSYgU1BJRk1UX1dERUxBWV9NQVNLLAorCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCisJCWlmIChkYXZpbmNpX3NwaS0+cGRhdGEtPm9kZF9wYXJpdHkpCisJCQlzZXRfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsCisJCQkJCVNQSUZNVF9PRERfUEFSSVRZX01BU0ssCisJCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCQllbHNlCisJCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKKwkJCQkJU1BJRk1UX09ERF9QQVJJVFlfTUFTSywKKwkJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisKKwkJaWYgKGRhdmluY2lfc3BpLT5wZGF0YS0+cGFyaXR5X2VuYWJsZSkKKwkJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKKwkJCQkJU1BJRk1UX1BBUklUWUVOQV9NQVNLLAorCQkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKwkJZWxzZQorCQkJY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsCisJCQkJCVNQSUZNVF9QQVJJVFlFTkFfTUFTSywKKwkJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisKKwkJaWYgKGRhdmluY2lfc3BpLT5wZGF0YS0+d2FpdF9lbmFibGUpCisJCQlzZXRfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsCisJCQkJCVNQSUZNVF9XQUlURU5BX01BU0ssCisJCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCQllbHNlCisJCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKKwkJCQkJU1BJRk1UX1dBSVRFTkFfTUFTSywKKwkJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisKKwkJaWYgKGRhdmluY2lfc3BpLT5wZGF0YS0+dGltZXJfZGlzYWJsZSkKKwkJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKKwkJCQkJU1BJRk1UX0RJU1RJTUVSX01BU0ssCisJCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCQllbHNlCisJCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKKwkJCQkJU1BJRk1UX0RJU1RJTUVSX01BU0ssCisJCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCX0KKworCXJldHZhbCA9IGRhdmluY2lfc3BpX3NldHVwX3RyYW5zZmVyKHNwaSwgTlVMTCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBkYXZpbmNpX3NwaV9jbGVhbnVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXN0cnVjdCBkYXZpbmNpX3NwaV9kbWEgKmRhdmluY2lfc3BpX2RtYTsKKworCWRhdmluY2lfc3BpX2RtYSA9ICZkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW3NwaS0+Y2hpcF9zZWxlY3RdOworCisJaWYgKHVzZV9kbWEgJiYgZGF2aW5jaV9zcGktPmRtYV9jaGFubmVscykgeworCQlkYXZpbmNpX3NwaV9kbWEgPSAmZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tzcGktPmNoaXBfc2VsZWN0XTsKKworCQlpZiAoKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwgIT0gLTEpCisJCQkJJiYgKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwgIT0gLTEpKSB7CisJCQllZG1hX2ZyZWVfY2hhbm5lbChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsKTsKKwkJCWVkbWFfZnJlZV9jaGFubmVsKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGRhdmluY2lfc3BpX2J1ZnNfcHJlcChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCSBzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpKQoreworCWludCBvcF9tb2RlID0gMDsKKworCS8qCisJICogUkVWSVNJVCAgdW5sZXNzIGRldmljZXMgZGlzYWdyZWUgYWJvdXQgU1BJX0xPT1Agb3IKKwkgKiBTUElfUkVBRFkgKFNQSV9OT19DUyBvbmx5IGFsbG93cyBvbmUgZGV2aWNlISksIHRoaXMKKwkgKiBzaG91bGQgbm90IG5lZWQgdG8gYmUgZG9uZSBiZWZvcmUgZWFjaCBtZXNzYWdlLi4uCisJICogb3B0aW1pemUgZm9yIGJvdGggZmxhZ3Mgc3RheWluZyBjbGVhcmVkLgorCSAqLworCisJb3BfbW9kZSA9IFNQSVBDMF9ESUZVTl9NQVNLCisJCXwgU1BJUEMwX0RPRlVOX01BU0sKKwkJfCBTUElQQzBfQ0xLRlVOX01BU0s7CisJaWYgKCEoc3BpLT5tb2RlICYgU1BJX05PX0NTKSkKKwkJb3BfbW9kZSB8PSAxIDw8IHNwaS0+Y2hpcF9zZWxlY3Q7CisJaWYgKHNwaS0+bW9kZSAmIFNQSV9SRUFEWSkKKwkJb3BfbW9kZSB8PSBTUElQQzBfU1BJRU5BX01BU0s7CisKKwlpb3dyaXRlMzIob3BfbW9kZSwgZGF2aW5jaV9zcGktPmJhc2UgKyBTUElQQzApOworCisJaWYgKHNwaS0+bW9kZSAmIFNQSV9MT09QKQorCQlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsCisJCQkJU1BJR0NSMV9MT09QQkFDS19NQVNLKTsKKwllbHNlCisJCWNsZWFyX2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElHQ1IxLAorCQkJCVNQSUdDUjFfTE9PUEJBQ0tfTUFTSyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXZpbmNpX3NwaV9jaGVja19lcnJvcihzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpLAorCQkJCSAgIGludCBpbnRfc3RhdHVzKQoreworCXN0cnVjdCBkZXZpY2UgKnNkZXYgPSBkYXZpbmNpX3NwaS0+Yml0YmFuZy5tYXN0ZXItPmRldi5wYXJlbnQ7CisKKwlpZiAoaW50X3N0YXR1cyAmIFNQSUZMR19USU1FT1VUX01BU0spIHsKKwkJZGV2X2RiZyhzZGV2LCAiU1BJIFRpbWUtb3V0IEVycm9yXG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCWlmIChpbnRfc3RhdHVzICYgU1BJRkxHX0RFU1lOQ19NQVNLKSB7CisJCWRldl9kYmcoc2RldiwgIlNQSSBEZXN5bmNocm9uaXphdGlvbiBFcnJvclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoaW50X3N0YXR1cyAmIFNQSUZMR19CSVRFUlJfTUFTSykgeworCQlkZXZfZGJnKHNkZXYsICJTUEkgQml0IGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGRhdmluY2lfc3BpLT52ZXJzaW9uID09IFNQSV9WRVJTSU9OXzIpIHsKKwkJaWYgKGludF9zdGF0dXMgJiBTUElGTEdfRExFTl9FUlJfTUFTSykgeworCQkJZGV2X2RiZyhzZGV2LCAiU1BJIERhdGEgTGVuZ3RoIEVycm9yXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWlmIChpbnRfc3RhdHVzICYgU1BJRkxHX1BBUkVSUl9NQVNLKSB7CisJCQlkZXZfZGJnKHNkZXYsICJTUEkgUGFyaXR5IEVycm9yXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWlmIChpbnRfc3RhdHVzICYgU1BJRkxHX09WUlJVTl9NQVNLKSB7CisJCQlkZXZfZGJnKHNkZXYsICJTUEkgRGF0YSBPdmVycnVuIGVycm9yXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWlmIChpbnRfc3RhdHVzICYgU1BJRkxHX1RYX0lOVFJfTUFTSykgeworCQkJZGV2X2RiZyhzZGV2LCAiU1BJIFRYIGludHIgYml0IHNldFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlpZiAoaW50X3N0YXR1cyAmIFNQSUZMR19CVUZfSU5JVF9BQ1RJVkVfTUFTSykgeworCQkJZGV2X2RiZyhzZGV2LCAiU1BJIEJ1ZmZlciBJbml0IEFjdGl2ZVxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZGF2aW5jaV9zcGlfYnVmcyAtIGZ1bmN0aW9ucyB3aGljaCB3aWxsIGhhbmRsZSB0cmFuc2ZlciBkYXRhCisgKiBAc3BpOiBzcGkgZGV2aWNlIG9uIHdoaWNoIGRhdGEgdHJhbnNmZXIgdG8gYmUgZG9uZQorICogQHQ6IHNwaSB0cmFuc2ZlciBpbiB3aGljaCB0cmFuc2ZlciBpbmZvIGlzIGZpbGxlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBwdXQgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBpbnRvIGRhdGEgcmVnaXN0ZXIKKyAqIG9mIFNQSSBjb250cm9sbGVyIGFuZCB0aGVuIHdhaXQgdW50aWwgdGhlIGNvbXBsZXRpb24gd2lsbCBiZSBtYXJrZWQKKyAqIGJ5IHRoZSBJUlEgSGFuZGxlci4KKyAqLworc3RhdGljIGludCBkYXZpbmNpX3NwaV9idWZzX3BpbyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJaW50IGludF9zdGF0dXMsIGNvdW50LCByZXQ7CisJdTggY29udiwgdG1wOworCXUzMiB0eF9kYXRhLCBkYXRhMV9yZWdfdmFsOworCXUzMiBidWZfdmFsLCBmbGdfdmFsOworCXN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJcGRhdGEgPSBkYXZpbmNpX3NwaS0+cGRhdGE7CisKKwlkYXZpbmNpX3NwaS0+dHggPSB0LT50eF9idWY7CisJZGF2aW5jaV9zcGktPnJ4ID0gdC0+cnhfYnVmOworCisJLyogY29udmVydCBsZW4gdG8gd29yZHMgYmFzZWQgb24gYml0c19wZXJfd29yZCAqLworCWNvbnYgPSBkYXZpbmNpX3NwaS0+c2xhdmVbc3BpLT5jaGlwX3NlbGVjdF0uYnl0ZXNfcGVyX3dvcmQ7CisJZGF2aW5jaV9zcGktPmNvdW50ID0gdC0+bGVuIC8gY29udjsKKworCUlOSVRfQ09NUExFVElPTihkYXZpbmNpX3NwaS0+ZG9uZSk7CisKKwlyZXQgPSBkYXZpbmNpX3NwaV9idWZzX3ByZXAoc3BpLCBkYXZpbmNpX3NwaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEVuYWJsZSBTUEkgKi8KKwlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsIFNQSUdDUjFfU1BJRU5BX01BU0spOworCisJaW93cml0ZTMyKDAgfCAocGRhdGEtPmMydGRlbGF5IDw8IFNQSV9DMlRERUxBWV9TSElGVCkgfAorCQkJKHBkYXRhLT50MmNkZWxheSA8PCBTUElfVDJDREVMQVlfU0hJRlQpLAorCQkJZGF2aW5jaV9zcGktPmJhc2UgKyBTUElERUxBWSk7CisKKwljb3VudCA9IGRhdmluY2lfc3BpLT5jb3VudDsKKwlkYXRhMV9yZWdfdmFsID0gcGRhdGEtPmNzX2hvbGQgPDwgU1BJREFUMV9DU0hPTERfU0hJRlQ7CisJdG1wID0gfigweDEgPDwgc3BpLT5jaGlwX3NlbGVjdCk7CisKKwljbGVhcl9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJREVGLCB+dG1wKTsKKworCWRhdGExX3JlZ192YWwgfD0gdG1wIDw8IFNQSURBVDFfQ1NOUl9TSElGVDsKKworCXdoaWxlICgoaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpCisJCQkJJiBTUElCVUZfUlhFTVBUWV9NQVNLKSA9PSAwKQorCQljcHVfcmVsYXgoKTsKKworCS8qIERldGVybWluZSB0aGUgY29tbWFuZCB0byBleGVjdXRlIFJFQUQgb3IgV1JJVEUgKi8KKwlpZiAodC0+dHhfYnVmKSB7CisJCWNsZWFyX2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElJTlQsIFNQSUlOVF9NQVNLQUxMKTsKKworCQl3aGlsZSAoMSkgeworCQkJdHhfZGF0YSA9IGRhdmluY2lfc3BpLT5nZXRfdHgoZGF2aW5jaV9zcGkpOworCisJCQlkYXRhMV9yZWdfdmFsICY9IH4oMHhGRkZGKTsKKwkJCWRhdGExX3JlZ192YWwgfD0gKDB4RkZGRiAmIHR4X2RhdGEpOworCisJCQlidWZfdmFsID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpOworCQkJaWYgKChidWZfdmFsICYgU1BJQlVGX1RYRlVMTF9NQVNLKSA9PSAwKSB7CisJCQkJaW93cml0ZTMyKGRhdGExX3JlZ192YWwsCisJCQkJCQlkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOworCisJCQkJY291bnQtLTsKKwkJCX0KKwkJCXdoaWxlIChpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRikKKwkJCQkJJiBTUElCVUZfUlhFTVBUWV9NQVNLKQorCQkJCWNwdV9yZWxheCgpOworCisJCQkvKiBnZXR0aW5nIHRoZSByZXR1cm5lZCBieXRlICovCisJCQlpZiAodC0+cnhfYnVmKSB7CisJCQkJYnVmX3ZhbCA9IGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJQlVGKTsKKwkJCQlkYXZpbmNpX3NwaS0+Z2V0X3J4KGJ1Zl92YWwsIGRhdmluY2lfc3BpKTsKKwkJCX0KKwkJCWlmIChjb3VudCA8PSAwKQorCQkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHBkYXRhLT5wb2xsX21vZGUpIHsKKwkJCXdoaWxlICgxKSB7CisJCQkJLyoga2VlcHMgdGhlIHNlcmlhbCBjbG9jayBnb2luZyAqLworCQkJCWlmICgoaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpCisJCQkJCQkmIFNQSUJVRl9UWEZVTExfTUFTSykgPT0gMCkKKwkJCQkJaW93cml0ZTMyKGRhdGExX3JlZ192YWwsCisJCQkJCQlkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOworCisJCQkJd2hpbGUgKGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJQlVGKSAmCisJCQkJCQlTUElCVUZfUlhFTVBUWV9NQVNLKQorCQkJCQljcHVfcmVsYXgoKTsKKworCQkJCWZsZ192YWwgPSBpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUZMRyk7CisJCQkJYnVmX3ZhbCA9IGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJQlVGKTsKKworCQkJCWRhdmluY2lfc3BpLT5nZXRfcngoYnVmX3ZhbCwgZGF2aW5jaV9zcGkpOworCisJCQkJY291bnQtLTsKKwkJCQlpZiAoY291bnQgPD0gMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CS8qIFJlY2VpdmUgaW4gSW50ZXJydXB0IG1vZGUgKi8KKwkJCWludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgZGF2aW5jaV9zcGktPmNvdW50OyBpKyspIHsKKwkJCQlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUlOVCwKKwkJCQkJCVNQSUlOVF9CSVRFUlJfSU5UUgorCQkJCQkJfCBTUElJTlRfT1ZSUlVOX0lOVFIKKwkJCQkJCXwgU1BJSU5UX1JYX0lOVFIpOworCisJCQkJaW93cml0ZTMyKGRhdGExX3JlZ192YWwsCisJCQkJCQlkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOworCisJCQkJd2hpbGUgKGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJSU5UKSAmCisJCQkJCQlTUElJTlRfUlhfSU5UUikKKwkJCQkJY3B1X3JlbGF4KCk7CisJCQl9CisJCQlpb3dyaXRlMzIoKGRhdGExX3JlZ192YWwgJiAweDBmZmNmZmZmKSwKKwkJCQkJZGF2aW5jaV9zcGktPmJhc2UgKyBTUElEQVQxKTsKKwkJfQorCX0KKworCS8qCisJICogQ2hlY2sgZm9yIGJpdCBlcnJvciwgZGVzeW5jIGVycm9yLHBhcml0eSBlcnJvcix0aW1lb3V0IGVycm9yIGFuZAorCSAqIHJlY2VpdmUgb3ZlcmZsb3cgZXJyb3JzCisJICovCisJaW50X3N0YXR1cyA9IGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJRkxHKTsKKworCXJldCA9IGRhdmluY2lfc3BpX2NoZWNrX2Vycm9yKGRhdmluY2lfc3BpLCBpbnRfc3RhdHVzKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBTUEkgRnJhbWV3b3JrIG1haW50YWlucyB0aGUgY291bnQgb25seSBpbiBieXRlcyBzbyBjb252ZXJ0IGJhY2sgKi8KKwlkYXZpbmNpX3NwaS0+Y291bnQgKj0gY29udjsKKworCXJldHVybiB0LT5sZW47Cit9CisKKyNkZWZpbmUgREFWSU5DSV9ETUFfREFUQV9UWVBFX1M4CTB4MDEKKyNkZWZpbmUgREFWSU5DSV9ETUFfREFUQV9UWVBFX1MxNgkweDAyCisjZGVmaW5lIERBVklOQ0lfRE1BX0RBVEFfVFlQRV9TMzIJMHgwNAorCitzdGF0aWMgaW50IGRhdmluY2lfc3BpX2J1ZnNfZG1hKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKKwlpbnQgaW50X3N0YXR1cyA9IDA7CisJaW50IGNvdW50LCB0ZW1wX2NvdW50OworCXU4IGNvbnYgPSAxOworCXU4IHRtcDsKKwl1MzIgZGF0YTFfcmVnX3ZhbDsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hICpkYXZpbmNpX3NwaV9kbWE7CisJaW50IHdvcmRfbGVuLCBkYXRhX3R5cGUsIHJldDsKKwl1bnNpZ25lZCBsb25nIHR4X3JlZywgcnhfcmVnOworCXN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpzZGV2OworCisJZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlwZGF0YSA9IGRhdmluY2lfc3BpLT5wZGF0YTsKKwlzZGV2ID0gZGF2aW5jaV9zcGktPmJpdGJhbmcubWFzdGVyLT5kZXYucGFyZW50OworCisJZGF2aW5jaV9zcGlfZG1hID0gJmRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbc3BpLT5jaGlwX3NlbGVjdF07CisKKwl0eF9yZWcgPSAodW5zaWduZWQgbG9uZylkYXZpbmNpX3NwaS0+cGJhc2UgKyBTUElEQVQxOworCXJ4X3JlZyA9ICh1bnNpZ25lZCBsb25nKWRhdmluY2lfc3BpLT5wYmFzZSArIFNQSUJVRjsKKworCWRhdmluY2lfc3BpLT50eCA9IHQtPnR4X2J1ZjsKKwlkYXZpbmNpX3NwaS0+cnggPSB0LT5yeF9idWY7CisKKwkvKiBjb252ZXJ0IGxlbiB0byB3b3JkcyBiYXNlZCBvbiBiaXRzX3Blcl93b3JkICovCisJY29udiA9IGRhdmluY2lfc3BpLT5zbGF2ZVtzcGktPmNoaXBfc2VsZWN0XS5ieXRlc19wZXJfd29yZDsKKwlkYXZpbmNpX3NwaS0+Y291bnQgPSB0LT5sZW4gLyBjb252OworCisJSU5JVF9DT01QTEVUSU9OKGRhdmluY2lfc3BpLT5kb25lKTsKKworCWluaXRfY29tcGxldGlvbigmZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY29tcGxldGlvbik7CisJaW5pdF9jb21wbGV0aW9uKCZkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jb21wbGV0aW9uKTsKKworCXdvcmRfbGVuID0gY29udiAqIDg7CisKKwlpZiAod29yZF9sZW4gPD0gOCkKKwkJZGF0YV90eXBlID0gREFWSU5DSV9ETUFfREFUQV9UWVBFX1M4OworCWVsc2UgaWYgKHdvcmRfbGVuIDw9IDE2KQorCQlkYXRhX3R5cGUgPSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzE2OworCWVsc2UgaWYgKHdvcmRfbGVuIDw9IDMyKQorCQlkYXRhX3R5cGUgPSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzMyOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBkYXZpbmNpX3NwaV9idWZzX3ByZXAoc3BpLCBkYXZpbmNpX3NwaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFB1dCBkZWxheSB2YWwgaWYgcmVxdWlyZWQgKi8KKwlpb3dyaXRlMzIoMCB8IChwZGF0YS0+YzJ0ZGVsYXkgPDwgU1BJX0MyVERFTEFZX1NISUZUKSB8CisJCQkocGRhdGEtPnQyY2RlbGF5IDw8IFNQSV9UMkNERUxBWV9TSElGVCksCisJCQlkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURFTEFZKTsKKworCWNvdW50ID0gZGF2aW5jaV9zcGktPmNvdW50OwkvKiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzICovCisJZGF0YTFfcmVnX3ZhbCA9IHBkYXRhLT5jc19ob2xkIDw8IFNQSURBVDFfQ1NIT0xEX1NISUZUOworCisJLyogQ1MgZGVmYXVsdCA9IDB4RkYgKi8KKwl0bXAgPSB+KDB4MSA8PCBzcGktPmNoaXBfc2VsZWN0KTsKKworCWNsZWFyX2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElERUYsIH50bXApOworCisJZGF0YTFfcmVnX3ZhbCB8PSB0bXAgPDwgU1BJREFUMV9DU05SX1NISUZUOworCisJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyBmb3IgZG1hIHRyYW5zZmVycyAqLworCWNsZWFyX2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElJTlQsIFNQSUlOVF9NQVNLQUxMKTsKKwkvKiBEaXNhYmxlIFNQSSB0byB3cml0ZSBjb25maWd1cmF0aW9uIGJpdHMgaW4gU1BJREFUICovCisJY2xlYXJfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsIFNQSUdDUjFfU1BJRU5BX01BU0spOworCWlvd3JpdGUzMihkYXRhMV9yZWdfdmFsLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOworCS8qIEVuYWJsZSBTUEkgKi8KKwlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsIFNQSUdDUjFfU1BJRU5BX01BU0spOworCisJd2hpbGUgKChpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRikKKwkJCQkmIFNQSUJVRl9SWEVNUFRZX01BU0spID09IDApCisJCWNwdV9yZWxheCgpOworCisKKwlpZiAodC0+dHhfYnVmKSB7CisJCXQtPnR4X2RtYSA9IGRtYV9tYXBfc2luZ2xlKCZzcGktPmRldiwgKHZvaWQgKil0LT50eF9idWYsIGNvdW50LAorCQkJCURNQV9UT19ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJnNwaS0+ZGV2LCB0LT50eF9kbWEpKSB7CisJCQlkZXZfZGJnKHNkZXYsICJVbmFibGUgdG8gRE1BIG1hcCBhICVkIGJ5dGVzIgorCQkJCSIgVFggYnVmZmVyXG4iLCBjb3VudCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQl0ZW1wX2NvdW50ID0gY291bnQ7CisJfSBlbHNlIHsKKwkJLyogV2UgbmVlZCBUWCBjbG9ja2luZyBmb3IgUlggdHJhbnNhY3Rpb24gKi8KKwkJdC0+dHhfZG1hID0gZG1hX21hcF9zaW5nbGUoJnNwaS0+ZGV2LAorCQkJCSh2b2lkICopZGF2aW5jaV9zcGktPnRtcF9idWYsIGNvdW50ICsgMSwKKwkJCQlETUFfVE9fREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZzcGktPmRldiwgdC0+dHhfZG1hKSkgeworCQkJZGV2X2RiZyhzZGV2LCAiVW5hYmxlIHRvIERNQSBtYXAgYSAlZCBieXRlcyIKKwkJCQkiIFRYIHRtcCBidWZmZXJcbiIsIGNvdW50KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXRlbXBfY291bnQgPSBjb3VudCArIDE7CisJfQorCisJZWRtYV9zZXRfdHJhbnNmZXJfcGFyYW1zKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwsCisJCQkJCWRhdGFfdHlwZSwgdGVtcF9jb3VudCwgMSwgMCwgQVNZTkMpOworCWVkbWFfc2V0X2Rlc3QoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCwgdHhfcmVnLCBJTkNSLCBXOEJJVCk7CisJZWRtYV9zZXRfc3JjKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwsIHQtPnR4X2RtYSwgSU5DUiwgVzhCSVQpOworCWVkbWFfc2V0X3NyY19pbmRleChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsLCBkYXRhX3R5cGUsIDApOworCWVkbWFfc2V0X2Rlc3RfaW5kZXgoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCwgMCwgMCk7CisKKwlpZiAodC0+cnhfYnVmKSB7CisJCS8qIGluaXRpYXRlIHRyYW5zYWN0aW9uICovCisJCWlvd3JpdGUzMihkYXRhMV9yZWdfdmFsLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOworCisJCXQtPnJ4X2RtYSA9IGRtYV9tYXBfc2luZ2xlKCZzcGktPmRldiwgKHZvaWQgKil0LT5yeF9idWYsIGNvdW50LAorCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmc3BpLT5kZXYsIHQtPnJ4X2RtYSkpIHsKKwkJCWRldl9kYmcoc2RldiwgIkNvdWxkbid0IERNQSBtYXAgYSAlZCBieXRlcyBSWCBidWZmZXJcbiIsCisJCQkJCWNvdW50KTsKKwkJCWlmICh0LT50eF9idWYgIT0gTlVMTCkKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIHQtPnR4X2RtYSwKKwkJCQkJCSBjb3VudCwgRE1BX1RPX0RFVklDRSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQllZG1hX3NldF90cmFuc2Zlcl9wYXJhbXMoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCwKKwkJCQlkYXRhX3R5cGUsIGNvdW50LCAxLCAwLCBBU1lOQyk7CisJCWVkbWFfc2V0X3NyYyhkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsLAorCQkJCXJ4X3JlZywgSU5DUiwgVzhCSVQpOworCQllZG1hX3NldF9kZXN0KGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwsCisJCQkJdC0+cnhfZG1hLCBJTkNSLCBXOEJJVCk7CisJCWVkbWFfc2V0X3NyY19pbmRleChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsLCAwLCAwKTsKKwkJZWRtYV9zZXRfZGVzdF9pbmRleChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsLAorCQkJCWRhdGFfdHlwZSwgMCk7CisJfQorCisJaWYgKCh0LT50eF9idWYpIHx8ICh0LT5yeF9idWYpKQorCQllZG1hX3N0YXJ0KGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwpOworCisJaWYgKHQtPnJ4X2J1ZikKKwkJZWRtYV9zdGFydChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsKTsKKworCWlmICgodC0+cnhfYnVmKSB8fCAodC0+dHhfYnVmKSkKKwkJZGF2aW5jaV9zcGlfc2V0X2RtYV9yZXEoc3BpLCAxKTsKKworCWlmICh0LT50eF9idWYpCisJCXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgKKwkJCQkmZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY29tcGxldGlvbik7CisKKwlpZiAodC0+cnhfYnVmKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoCisJCQkJJmRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NvbXBsZXRpb24pOworCisJZG1hX3VubWFwX3NpbmdsZShOVUxMLCB0LT50eF9kbWEsIHRlbXBfY291bnQsIERNQV9UT19ERVZJQ0UpOworCisJaWYgKHQtPnJ4X2J1ZikKKwkJZG1hX3VubWFwX3NpbmdsZShOVUxMLCB0LT5yeF9kbWEsIGNvdW50LCBETUFfRlJPTV9ERVZJQ0UpOworCisJLyoKKwkgKiBDaGVjayBmb3IgYml0IGVycm9yLCBkZXN5bmMgZXJyb3IscGFyaXR5IGVycm9yLHRpbWVvdXQgZXJyb3IgYW5kCisJICogcmVjZWl2ZSBvdmVyZmxvdyBlcnJvcnMKKwkgKi8KKwlpbnRfc3RhdHVzID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElGTEcpOworCisJcmV0ID0gZGF2aW5jaV9zcGlfY2hlY2tfZXJyb3IoZGF2aW5jaV9zcGksIGludF9zdGF0dXMpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFNQSSBGcmFtZXdvcmsgbWFpbnRhaW5zIHRoZSBjb3VudCBvbmx5IGluIGJ5dGVzIHNvIGNvbnZlcnQgYmFjayAqLworCWRhdmluY2lfc3BpLT5jb3VudCAqPSBjb252OworCisJcmV0dXJuIHQtPmxlbjsKK30KKworLyoqCisgKiBkYXZpbmNpX3NwaV9pcnEgLSBJUlEgaGFuZGxlciBmb3IgRGFWaW5jaSBTUEkKKyAqIEBpcnE6IElSUSBudW1iZXIgZm9yIHRoaXMgU1BJIE1hc3RlcgorICogQGNvbnRleHRfZGF0YTogc3RydWN0dXJlIGZvciBTUEkgTWFzdGVyIGNvbnRyb2xsZXIgZGF2aW5jaV9zcGkKKyAqLworc3RhdGljIGlycXJldHVybl90IGRhdmluY2lfc3BpX2lycShzMzIgaXJxLCB2b2lkICpjb250ZXh0X2RhdGEpCit7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSA9IGNvbnRleHRfZGF0YTsKKwl1MzIgaW50X3N0YXR1cywgcnhfZGF0YSA9IDA7CisJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7CisKKwlpbnRfc3RhdHVzID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElGTEcpOworCisJd2hpbGUgKChpbnRfc3RhdHVzICYgU1BJRkxHX1JYX0lOVFJfTUFTSykpIHsKKwkJaWYgKGxpa2VseShpbnRfc3RhdHVzICYgU1BJRkxHX1JYX0lOVFJfTUFTSykpIHsKKwkJCXJldCA9IElSUV9IQU5ETEVEOworCisJCQlyeF9kYXRhID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpOworCQkJZGF2aW5jaV9zcGktPmdldF9yeChyeF9kYXRhLCBkYXZpbmNpX3NwaSk7CisKKwkJCS8qIERpc2FibGUgUmVjZWl2ZSBJbnRlcnJ1cHQgKi8KKwkJCWlvd3JpdGUzMih+KFNQSUlOVF9SWF9JTlRSIHwgU1BJSU5UX1RYX0lOVFIpLAorCQkJCQlkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUlOVCk7CisJCX0gZWxzZQorCQkJKHZvaWQpZGF2aW5jaV9zcGlfY2hlY2tfZXJyb3IoZGF2aW5jaV9zcGksIGludF9zdGF0dXMpOworCisJCWludF9zdGF0dXMgPSBpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUZMRyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBkYXZpbmNpX3NwaV9wcm9iZSAtIHByb2JlIGZ1bmN0aW9uIGZvciBTUEkgTWFzdGVyIENvbnRyb2xsZXIKKyAqIEBwZGV2OiBwbGF0Zm9ybV9kZXZpY2Ugc3RydWN0dXJlIHdoaWNoIGNvbnRhaW5zIHBsYXRlZm9ybSBzcGVjaWZpYyBkYXRhCisgKi8KK3N0YXRpYyBpbnQgZGF2aW5jaV9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqciwgKm1lbTsKKwlyZXNvdXJjZV9zaXplX3QgZG1hX3J4X2NoYW4gPSBTUElfTk9fUkVTT1VSQ0U7CisJcmVzb3VyY2Vfc2l6ZV90CWRtYV90eF9jaGFuID0gU1BJX05PX1JFU09VUkNFOworCXJlc291cmNlX3NpemVfdAlkbWFfZXZlbnRxID0gU1BJX05PX1JFU09VUkNFOworCWludCBpID0gMCwgcmV0ID0gMDsKKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKHBkYXRhID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnI7CisJfQorCisJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGRhdmluY2lfc3BpKSk7CisJaWYgKG1hc3RlciA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBtYXN0ZXIpOworCisJZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJaWYgKGRhdmluY2lfc3BpID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBmcmVlX21hc3RlcjsKKwl9CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAociA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZnJlZV9tYXN0ZXI7CisJfQorCisJZGF2aW5jaV9zcGktPnBiYXNlID0gci0+c3RhcnQ7CisJZGF2aW5jaV9zcGktPnJlZ2lvbl9zaXplID0gcmVzb3VyY2Vfc2l6ZShyKTsKKwlkYXZpbmNpX3NwaS0+cGRhdGEgPSBwZGF0YTsKKworCW1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgZGF2aW5jaV9zcGktPnJlZ2lvbl9zaXplLAorCQkJCQlwZGV2LT5uYW1lKTsKKwlpZiAobWVtID09IE5VTEwpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGZyZWVfbWFzdGVyOworCX0KKworCWRhdmluY2lfc3BpLT5iYXNlID0gKHN0cnVjdCBkYXZpbmNpX3NwaV9yZWcgX19pb21lbSAqKQorCQkJaW9yZW1hcChyLT5zdGFydCwgZGF2aW5jaV9zcGktPnJlZ2lvbl9zaXplKTsKKwlpZiAoZGF2aW5jaV9zcGktPmJhc2UgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHJlbGVhc2VfcmVnaW9uOworCX0KKworCWRhdmluY2lfc3BpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChkYXZpbmNpX3NwaS0+aXJxIDw9IDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byB1bm1hcF9pbzsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShkYXZpbmNpX3NwaS0+aXJxLCBkYXZpbmNpX3NwaV9pcnEsIElSUUZfRElTQUJMRUQsCisJCQkgIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBkYXZpbmNpX3NwaSk7CisJaWYgKHJldCkKKwkJZ290byB1bm1hcF9pbzsKKworCS8qIEFsbG9jYXRlIHRtcF9idWYgZm9yIHR4X2J1ZiAqLworCWRhdmluY2lfc3BpLT50bXBfYnVmID0ga3phbGxvYyhTUElfQlVGU0laLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGF2aW5jaV9zcGktPnRtcF9idWYgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGlycV9mcmVlOworCX0KKworCWRhdmluY2lfc3BpLT5iaXRiYW5nLm1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KG1hc3Rlcik7CisJaWYgKGRhdmluY2lfc3BpLT5iaXRiYW5nLm1hc3RlciA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV90bXBfYnVmOworCX0KKworCWRhdmluY2lfc3BpLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoZGF2aW5jaV9zcGktPmNsaykpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBwdXRfbWFzdGVyOworCX0KKwljbGtfZW5hYmxlKGRhdmluY2lfc3BpLT5jbGspOworCisKKwltYXN0ZXItPmJ1c19udW0gPSBwZGV2LT5pZDsKKwltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gcGRhdGEtPm51bV9jaGlwc2VsZWN0OworCW1hc3Rlci0+c2V0dXAgPSBkYXZpbmNpX3NwaV9zZXR1cDsKKwltYXN0ZXItPmNsZWFudXAgPSBkYXZpbmNpX3NwaV9jbGVhbnVwOworCisJZGF2aW5jaV9zcGktPmJpdGJhbmcuY2hpcHNlbGVjdCA9IGRhdmluY2lfc3BpX2NoaXBzZWxlY3Q7CisJZGF2aW5jaV9zcGktPmJpdGJhbmcuc2V0dXBfdHJhbnNmZXIgPSBkYXZpbmNpX3NwaV9zZXR1cF90cmFuc2ZlcjsKKworCWRhdmluY2lfc3BpLT52ZXJzaW9uID0gcGRhdGEtPnZlcnNpb247CisJdXNlX2RtYSA9IHBkYXRhLT51c2VfZG1hOworCisJZGF2aW5jaV9zcGktPmJpdGJhbmcuZmxhZ3MgPSBTUElfTk9fQ1MgfCBTUElfTFNCX0ZJUlNUIHwgU1BJX0xPT1A7CisJaWYgKGRhdmluY2lfc3BpLT52ZXJzaW9uID09IFNQSV9WRVJTSU9OXzIpCisJCWRhdmluY2lfc3BpLT5iaXRiYW5nLmZsYWdzIHw9IFNQSV9SRUFEWTsKKworCWlmICh1c2VfZG1hKSB7CisJCQlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAwKTsKKwkJCWlmIChyKQorCQkJCWRtYV9yeF9jaGFuID0gci0+c3RhcnQ7CisJCQlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAxKTsKKwkJCWlmIChyKQorCQkJCWRtYV90eF9jaGFuID0gci0+c3RhcnQ7CisJCQlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAyKTsKKwkJCWlmIChyKQorCQkJCWRtYV9ldmVudHEgPSByLT5zdGFydDsKKwl9CisKKwlpZiAoIXVzZV9kbWEgfHwKKwkgICAgZG1hX3J4X2NoYW4gPT0gU1BJX05PX1JFU09VUkNFIHx8CisJICAgIGRtYV90eF9jaGFuID09IFNQSV9OT19SRVNPVVJDRSB8fAorCSAgICBkbWFfZXZlbnRxCT09IFNQSV9OT19SRVNPVVJDRSkgeworCQlkYXZpbmNpX3NwaS0+Yml0YmFuZy50eHJ4X2J1ZnMgPSBkYXZpbmNpX3NwaV9idWZzX3BpbzsKKwkJdXNlX2RtYSA9IDA7CisJfSBlbHNlIHsKKwkJZGF2aW5jaV9zcGktPmJpdGJhbmcudHhyeF9idWZzID0gZGF2aW5jaV9zcGlfYnVmc19kbWE7CisJCWRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHMgPSBremFsbG9jKG1hc3Rlci0+bnVtX2NoaXBzZWxlY3QKKwkJCQkqIHNpemVvZihzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGZyZWVfY2xrOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bnVtX2NoaXBzZWxlY3Q7IGkrKykgeworCQkJZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tpXS5kbWFfcnhfY2hhbm5lbCA9IC0xOworCQkJZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tpXS5kbWFfcnhfc3luY19kZXYgPQorCQkJCWRtYV9yeF9jaGFuOworCQkJZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tpXS5kbWFfdHhfY2hhbm5lbCA9IC0xOworCQkJZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tpXS5kbWFfdHhfc3luY19kZXYgPQorCQkJCWRtYV90eF9jaGFuOworCQkJZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tpXS5ldmVudHEgPSBkbWFfZXZlbnRxOworCQl9CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJEYVZpbmNpIFNQSSBkcml2ZXIgaW4gRURNQSBtb2RlXG4iCisJCQkJIlVzaW5nIFJYIGNoYW5uZWwgPSAlZCAsIFRYIGNoYW5uZWwgPSAlZCBhbmQgIgorCQkJCSJldmVudCBxdWV1ZSA9ICVkIiwgZG1hX3J4X2NoYW4sIGRtYV90eF9jaGFuLAorCQkJCWRtYV9ldmVudHEpOworCX0KKworCWRhdmluY2lfc3BpLT5nZXRfcnggPSBkYXZpbmNpX3NwaV9yeF9idWZfdTg7CisJZGF2aW5jaV9zcGktPmdldF90eCA9IGRhdmluY2lfc3BpX3R4X2J1Zl91ODsKKworCWluaXRfY29tcGxldGlvbigmZGF2aW5jaV9zcGktPmRvbmUpOworCisJLyogUmVzZXQgSW4vT1VUIFNQSSBtb2R1bGUgKi8KKwlpb3dyaXRlMzIoMCwgZGF2aW5jaV9zcGktPmJhc2UgKyBTUElHQ1IwKTsKKwl1ZGVsYXkoMTAwKTsKKwlpb3dyaXRlMzIoMSwgZGF2aW5jaV9zcGktPmJhc2UgKyBTUElHQ1IwKTsKKworCS8qIENsb2NrIGludGVybmFsICovCisJaWYgKGRhdmluY2lfc3BpLT5wZGF0YS0+Y2xrX2ludGVybmFsKQorCQlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsCisJCQkJU1BJR0NSMV9DTEtNT0RfTUFTSyk7CisJZWxzZQorCQljbGVhcl9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMSwKKwkJCQlTUElHQ1IxX0NMS01PRF9NQVNLKTsKKworCS8qIG1hc3RlciBtb2RlIGRlZmF1bHQgKi8KKwlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsIFNQSUdDUjFfTUFTVEVSX01BU0spOworCisJaWYgKGRhdmluY2lfc3BpLT5wZGF0YS0+aW50cl9sZXZlbCkKKwkJaW93cml0ZTMyKFNQSV9JTlRMVkxfMSwgZGF2aW5jaV9zcGktPmJhc2UgKyBTUElMVkwpOworCWVsc2UKKwkJaW93cml0ZTMyKFNQSV9JTlRMVkxfMCwgZGF2aW5jaV9zcGktPmJhc2UgKyBTUElMVkwpOworCisJcmV0ID0gc3BpX2JpdGJhbmdfc3RhcnQoJmRhdmluY2lfc3BpLT5iaXRiYW5nKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfY2xrOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIkNvbnRyb2xsZXIgYXQgMHglcCBcbiIsIGRhdmluY2lfc3BpLT5iYXNlKTsKKworCWlmICghcGRhdGEtPnBvbGxfbW9kZSkKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIk9wZXJhdGluZyBpbiBpbnRlcnJ1cHQgbW9kZSIKKwkJCSIgdXNpbmcgSVJRICVkXG4iLCBkYXZpbmNpX3NwaS0+aXJxKTsKKworCXJldHVybiByZXQ7CisKK2ZyZWVfY2xrOgorCWNsa19kaXNhYmxlKGRhdmluY2lfc3BpLT5jbGspOworCWNsa19wdXQoZGF2aW5jaV9zcGktPmNsayk7CitwdXRfbWFzdGVyOgorCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CitmcmVlX3RtcF9idWY6CisJa2ZyZWUoZGF2aW5jaV9zcGktPnRtcF9idWYpOworaXJxX2ZyZWU6CisJZnJlZV9pcnEoZGF2aW5jaV9zcGktPmlycSwgZGF2aW5jaV9zcGkpOwordW5tYXBfaW86CisJaW91bm1hcChkYXZpbmNpX3NwaS0+YmFzZSk7CityZWxlYXNlX3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24oZGF2aW5jaV9zcGktPnBiYXNlLCBkYXZpbmNpX3NwaS0+cmVnaW9uX3NpemUpOworZnJlZV9tYXN0ZXI6CisJa2ZyZWUobWFzdGVyKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGRhdmluY2lfc3BpX3JlbW92ZSAtIHJlbW92ZSBmdW5jdGlvbiBmb3IgU1BJIE1hc3RlciBDb250cm9sbGVyCisgKiBAcGRldjogcGxhdGZvcm1fZGV2aWNlIHN0cnVjdHVyZSB3aGljaCBjb250YWlucyBwbGF0ZWZvcm0gc3BlY2lmaWMgZGF0YQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBkbyB0aGUgcmV2ZXJzZSBhY3Rpb24gb2YgZGF2aW5jaV9zcGlfcHJvYmUgZnVuY3Rpb24KKyAqIEl0IHdpbGwgZnJlZSB0aGUgSVJRIGFuZCBTUEkgY29udHJvbGxlcidzIG1lbW9yeSByZWdpb24uCisgKiBJdCB3aWxsIGFsc28gY2FsbCBzcGlfYml0YmFuZ19zdG9wIHRvIGRlc3Ryb3kgdGhlIHdvcmsgcXVldWUgd2hpY2ggd2FzCisgKiBjcmVhdGVkIGJ5IHNwaV9iaXRiYW5nX3N0YXJ0LgorICovCitzdGF0aWMgaW50IF9fZXhpdCBkYXZpbmNpX3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisKKwltYXN0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlzcGlfYml0YmFuZ19zdG9wKCZkYXZpbmNpX3NwaS0+Yml0YmFuZyk7CisKKwljbGtfZGlzYWJsZShkYXZpbmNpX3NwaS0+Y2xrKTsKKwljbGtfcHV0KGRhdmluY2lfc3BpLT5jbGspOworCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisJa2ZyZWUoZGF2aW5jaV9zcGktPnRtcF9idWYpOworCWZyZWVfaXJxKGRhdmluY2lfc3BpLT5pcnEsIGRhdmluY2lfc3BpKTsKKwlpb3VubWFwKGRhdmluY2lfc3BpLT5iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oZGF2aW5jaV9zcGktPnBiYXNlLCBkYXZpbmNpX3NwaS0+cmVnaW9uX3NpemUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRhdmluY2lfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyLm5hbWUgPSAic3BpX2RhdmluY2kiLAorCS5yZW1vdmUgPSBfX2V4aXRfcChkYXZpbmNpX3NwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGF2aW5jaV9zcGlfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmRhdmluY2lfc3BpX2RyaXZlciwgZGF2aW5jaV9zcGlfcHJvYmUpOworfQorbW9kdWxlX2luaXQoZGF2aW5jaV9zcGlfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkYXZpbmNpX3NwaV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRhdmluY2lfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChkYXZpbmNpX3NwaV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJUSSBEYVZpbmNpIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2R3X3NwaS5jIGIvZHJpdmVycy9zcGkvZHdfc3BpLmMKaW5kZXggMzE2MjBmYS4uOGVkMzhmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvZHdfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvZHdfc3BpLmMKQEAgLTE1Miw2ICsxNTIsNyBAQAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IG1yc3Rfc3BpX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHdfc3BpICpkd3MpCiB7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtcnN0X3NwaV9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgZHdfc3BpICpkd3MpCkBAIC0xNjEsMTQgKzE2MiwxNCBAQAogCiBzdGF0aWMgdm9pZCB3YWl0X3RpbGxfbm90X2J1c3koc3RydWN0IGR3X3NwaSAqZHdzKQogewotCXVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoMTAwMCk7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzICsgMSArIHVzZWNzX3RvX2ppZmZpZXMoMTAwMCk7CiAKIAl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kKSkgewogCQlpZiAoIShkd19yZWFkdyhkd3MsIHNyKSAmIFNSX0JVU1kpKQogCQkJcmV0dXJuOwogCX0KIAlkZXZfZXJyKCZkd3MtPm1hc3Rlci0+ZGV2LAotCQkiRFcgU1BJOiBTdHV0dXMga2VlcHMgYnVzeSBmb3IgMTAwMHVzIGFmdGVyIGEgcmVhZC93cml0ZSFcbiIpOworCQkiRFcgU1BJOiBTdGF0dXMga2VlcHMgYnVzeSBmb3IgMTAwMHVzIGFmdGVyIGEgcmVhZC93cml0ZSFcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBmbHVzaChzdHJ1Y3QgZHdfc3BpICpkd3MpCkBAIC0zNTgsNiArMzU5LDggQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfdHJhbnNmZXIoc3RydWN0IGR3X3NwaSAqZHdzKQogewogCXUxNiBpcnFfc3RhdHVzLCBpcnFfbWFzayA9IDB4M2Y7CisJdTMyIGludF9sZXZlbCA9IGR3cy0+Zmlmb19sZW4gLyAyOworCXUzMiBsZWZ0OwogCiAJaXJxX3N0YXR1cyA9IGR3X3JlYWR3KGR3cywgaXNyKSAmIGlycV9tYXNrOwogCS8qIEVycm9yIGhhbmRsaW5nICovCkBAIC0zNjksMjIgKzM3MiwyMyBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCi0JLyogSU5UIGNvbWVzIGZyb20gdHggKi8KLQlpZiAoZHdzLT50eCAmJiAoaXJxX3N0YXR1cyAmIFNQSV9JTlRfVFhFSSkpIHsKLQkJd2hpbGUgKGR3cy0+dHggPCBkd3MtPnR4X2VuZCkKKwlpZiAoaXJxX3N0YXR1cyAmIFNQSV9JTlRfVFhFSSkgeworCQlzcGlfbWFza19pbnRyKGR3cywgU1BJX0lOVF9UWEVJKTsKKworCQlsZWZ0ID0gKGR3cy0+dHhfZW5kIC0gZHdzLT50eCkgLyBkd3MtPm5fYnl0ZXM7CisJCWxlZnQgPSAobGVmdCA+IGludF9sZXZlbCkgPyBpbnRfbGV2ZWwgOiBsZWZ0OworCisJCXdoaWxlIChsZWZ0LS0pCiAJCQlkd3MtPndyaXRlKGR3cyk7CisJCWR3cy0+cmVhZChkd3MpOwogCi0JCWlmIChkd3MtPnR4ID09IGR3cy0+dHhfZW5kKSB7Ci0JCQlzcGlfbWFza19pbnRyKGR3cywgU1BJX0lOVF9UWEVJKTsKLQkJCXRyYW5zZmVyX2NvbXBsZXRlKGR3cyk7Ci0JCX0KLQl9Ci0KLQkvKiBJTlQgY29tZXMgZnJvbSByeCAqLwotCWlmIChkd3MtPnJ4ICYmIChpcnFfc3RhdHVzICYgU1BJX0lOVF9SWEZJKSkgewotCQlpZiAoZHdzLT5yZWFkKGR3cykpCisJCS8qIFJlLWVuYWJsZSB0aGUgSVJRIGlmIHRoZXJlIGlzIHN0aWxsIGRhdGEgbGVmdCB0byB0eCAqLworCQlpZiAoZHdzLT50eF9lbmQgPiBkd3MtPnR4KQorCQkJc3BpX3VtYXNrX2ludHIoZHdzLCBTUElfSU5UX1RYRUkpOworCQllbHNlCiAJCQl0cmFuc2Zlcl9jb21wbGV0ZShkd3MpOwogCX0KKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtNDA0LDEyICs0MDgsOSBAQAogLyogTXVzdCBiZSBjYWxsZWQgaW5zaWRlIHB1bXBfdHJhbnNmZXJzKCkgKi8KIHN0YXRpYyB2b2lkIHBvbGxfdHJhbnNmZXIoc3RydWN0IGR3X3NwaSAqZHdzKQogewotCWlmIChkd3MtPnR4KSB7Ci0JCXdoaWxlIChkd3MtPndyaXRlKGR3cykpCi0JCQlkd3MtPnJlYWQoZHdzKTsKLQl9CisJd2hpbGUgKGR3cy0+d3JpdGUoZHdzKSkKKwkJZHdzLT5yZWFkKGR3cyk7CiAKLQlkd3MtPnJlYWQoZHdzKTsKIAl0cmFuc2Zlcl9jb21wbGV0ZShkd3MpOwogfQogCkBAIC00MjgsNiArNDI5LDcgQEAKIAl1OCBiaXRzID0gMDsKIAl1OCBpbWFzayA9IDA7CiAJdTggY3NfY2hhbmdlID0gMDsKKwl1MTYgdHhpbnRfbGV2ZWwgPSAwOwogCXUxNiBjbGtfZGl2ID0gMDsKIAl1MzIgc3BlZWQgPSAwOwogCXUzMiBjcjAgPSAwOwpAQCAtNDM4LDYgKzQ0MCw5IEBACiAJY2hpcCA9IGR3cy0+Y3VyX2NoaXA7CiAJc3BpID0gbWVzc2FnZS0+c3BpOwogCisJaWYgKHVubGlrZWx5KCFjaGlwLT5jbGtfZGl2KSkKKwkJY2hpcC0+Y2xrX2RpdiA9IGR3cy0+bWF4X2ZyZXEgLyBjaGlwLT5zcGVlZF9oejsKKwogCWlmIChtZXNzYWdlLT5zdGF0ZSA9PSBFUlJPUl9TVEFURSkgewogCQltZXNzYWdlLT5zdGF0dXMgPSAtRUlPOwogCQlnb3RvIGVhcmx5X2V4aXQ7CkBAIC00OTIsNyArNDk3LDcgQEAKIAogCQkJLyogY2xrX2RpdiBkb2Vzbid0IHN1cHBvcnQgb2RkIG51bWJlciAqLwogCQkJY2xrX2RpdiA9IGR3cy0+bWF4X2ZyZXEgLyBzcGVlZDsKLQkJCWNsa19kaXYgPSAoY2xrX2RpdiA+PiAxKSA8PCAxOworCQkJY2xrX2RpdiA9IChjbGtfZGl2ICsgMSkgJiAweGZmZmU7CiAKIAkJCWNoaXAtPnNwZWVkX2h6ID0gc3BlZWQ7CiAJCQljaGlwLT5jbGtfZGl2ID0gY2xrX2RpdjsKQEAgLTUzMiwxNCArNTM3LDM1IEBACiAJfQogCW1lc3NhZ2UtPnN0YXRlID0gUlVOTklOR19TVEFURTsKIAorCS8qCisJICogQWRqdXN0IHRyYW5zZmVyIG1vZGUgaWYgbmVjZXNzYXJ5LiBSZXF1aXJlcyBwbGF0Zm9ybSBkZXBlbmRlbnQKKwkgKiBjaGlwc2VsZWN0IG1lY2hhbmlzbS4KKwkgKi8KKwlpZiAoZHdzLT5jc19jb250cm9sKSB7CisJCWlmIChkd3MtPnJ4ICYmIGR3cy0+dHgpCisJCQljaGlwLT50bW9kZSA9IDB4MDA7CisJCWVsc2UgaWYgKGR3cy0+cngpCisJCQljaGlwLT50bW9kZSA9IDB4MDI7CisJCWVsc2UKKwkJCWNoaXAtPnRtb2RlID0gMHgwMTsKKworCQljcjAgJj0gfigweDMgPDwgU1BJX01PREVfT0ZGU0VUKTsKKwkJY3IwIHw9IChjaGlwLT50bW9kZSA8PCBTUElfVE1PRF9PRkZTRVQpOworCX0KKwogCS8qIENoZWNrIGlmIGN1cnJlbnQgdHJhbnNmZXIgaXMgYSBETUEgdHJhbnNhY3Rpb24gKi8KIAlkd3MtPmRtYV9tYXBwZWQgPSBtYXBfZG1hX2J1ZmZlcnMoZHdzKTsKIAorCS8qCisJICogSW50ZXJydXB0IG1vZGUKKwkgKiB3ZSBvbmx5IG5lZWQgc2V0IHRoZSBUWEVJIElSUSwgYXMgVFgvUlggYWx3YXlzIGhhcHBlbiBzeW5jcm9uaXplbHkKKwkgKi8KIAlpZiAoIWR3cy0+ZG1hX21hcHBlZCAmJiAhY2hpcC0+cG9sbF9tb2RlKSB7Ci0JCWlmIChkd3MtPnJ4KQotCQkJaW1hc2sgfD0gU1BJX0lOVF9SWEZJOwotCQlpZiAoZHdzLT50eCkKLQkJCWltYXNrIHw9IFNQSV9JTlRfVFhFSTsKKwkJaW50IHRlbXBsZW4gPSBkd3MtPmxlbiAvIGR3cy0+bl9ieXRlczsKKwkJdHhpbnRfbGV2ZWwgPSBkd3MtPmZpZm9fbGVuIC8gMjsKKwkJdHhpbnRfbGV2ZWwgPSAodGVtcGxlbiA+IHR4aW50X2xldmVsKSA/IHR4aW50X2xldmVsIDogdGVtcGxlbjsKKworCQlpbWFzayB8PSBTUElfSU5UX1RYRUk7CiAJCWR3cy0+dHJhbnNmZXJfaGFuZGxlciA9IGludGVycnVwdF90cmFuc2ZlcjsKIAl9CiAKQEAgLTU0OSwyMSArNTc1LDIzIEBACiAJICoJMi4gY2xrX2RpdiBpcyBjaGFuZ2VkCiAJICoJMy4gY29udHJvbCB2YWx1ZSBjaGFuZ2VzCiAJICovCi0JaWYgKGR3X3JlYWR3KGR3cywgY3RybDApICE9IGNyMCB8fCBjc19jaGFuZ2UgfHwgY2xrX2RpdikgeworCWlmIChkd19yZWFkdyhkd3MsIGN0cmwwKSAhPSBjcjAgfHwgY3NfY2hhbmdlIHx8IGNsa19kaXYgfHwgaW1hc2spIHsKIAkJc3BpX2VuYWJsZV9jaGlwKGR3cywgMCk7CiAKIAkJaWYgKGR3X3JlYWR3KGR3cywgY3RybDApICE9IGNyMCkKIAkJCWR3X3dyaXRldyhkd3MsIGN0cmwwLCBjcjApOwogCi0JCS8qIFNldCB0aGUgaW50ZXJydXB0IG1hc2ssIGZvciBwb2xsIG1vZGUganVzdCBkaWFibGUgYWxsIGludCAqLwotCQlzcGlfbWFza19pbnRyKGR3cywgMHhmZik7Ci0JCWlmICghY2hpcC0+cG9sbF9tb2RlKQotCQkJc3BpX3VtYXNrX2ludHIoZHdzLCBpbWFzayk7Ci0KIAkJc3BpX3NldF9jbGsoZHdzLCBjbGtfZGl2ID8gY2xrX2RpdiA6IGNoaXAtPmNsa19kaXYpOwogCQlzcGlfY2hpcF9zZWwoZHdzLCBzcGktPmNoaXBfc2VsZWN0KTsKLQkJc3BpX2VuYWJsZV9jaGlwKGR3cywgMSk7CiAKKwkJLyogU2V0IHRoZSBpbnRlcnJ1cHQgbWFzaywgZm9yIHBvbGwgbW9kZSBqdXN0IGRpYWJsZSBhbGwgaW50ICovCisJCXNwaV9tYXNrX2ludHIoZHdzLCAweGZmKTsKKwkJaWYgKGltYXNrKQorCQkJc3BpX3VtYXNrX2ludHIoZHdzLCBpbWFzayk7CisJCWlmICh0eGludF9sZXZlbCkKKwkJCWR3X3dyaXRldyhkd3MsIHR4Zmx0ciwgdHhpbnRfbGV2ZWwpOworCisJCXNwaV9lbmFibGVfY2hpcChkd3MsIDEpOwogCQlpZiAoY3NfY2hhbmdlKQogCQkJZHdzLT5wcmV2X2NoaXAgPSBjaGlwOwogCX0KQEAgLTcxMiwxMSArNzQwLDExIEBACiAJfQogCWNoaXAtPmJpdHNfcGVyX3dvcmQgPSBzcGktPmJpdHNfcGVyX3dvcmQ7CiAKKwlpZiAoIXNwaS0+bWF4X3NwZWVkX2h6KSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiTm8gbWF4IHNwZWVkIEhaIHBhcmFtZXRlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAljaGlwLT5zcGVlZF9oeiA9IHNwaS0+bWF4X3NwZWVkX2h6OwotCWlmIChjaGlwLT5zcGVlZF9oeikKLQkJY2hpcC0+Y2xrX2RpdiA9IDI1MDAwMDAwIC8gY2hpcC0+c3BlZWRfaHo7Ci0JZWxzZQotCQljaGlwLT5jbGtfZGl2ID0gODsJLyogZGVmYXVsdCB2YWx1ZSAqLwogCiAJY2hpcC0+dG1vZGUgPSAwOyAvKiBUeCAmIFJ4ICovCiAJLyogRGVmYXVsdCBTUEkgbW9kZSBpcyBTQ1BPTCA9IDAsIFNDUEggPSAwICovCkBAIC03MzUsNyArNzYzLDcgQEAKIAlrZnJlZShjaGlwKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaW5pdF9xdWV1ZShzdHJ1Y3QgZHdfc3BpICpkd3MpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X3F1ZXVlKHN0cnVjdCBkd19zcGkgKmR3cykKIHsKIAlJTklUX0xJU1RfSEVBRCgmZHdzLT5xdWV1ZSk7CiAJc3Bpbl9sb2NrX2luaXQoJmR3cy0+bG9jayk7CkBAIC04MTcsNiArODQ1LDIyIEBACiAJc3BpX21hc2tfaW50cihkd3MsIDB4ZmYpOwogCXNwaV9lbmFibGVfY2hpcChkd3MsIDEpOwogCWZsdXNoKGR3cyk7CisKKwkvKgorCSAqIFRyeSB0byBkZXRlY3QgdGhlIEZJRk8gZGVwdGggaWYgbm90IHNldCBieSBpbnRlcmZhY2UgZHJpdmVyLAorCSAqIHRoZSBkZXB0aCBjb3VsZCBiZSBmcm9tIDIgdG8gMjU2IGZyb20gSFcgc3BlYworCSAqLworCWlmICghZHdzLT5maWZvX2xlbikgeworCQl1MzIgZmlmbzsKKwkJZm9yIChmaWZvID0gMjsgZmlmbyA8PSAyNTc7IGZpZm8rKykgeworCQkJZHdfd3JpdGV3KGR3cywgdHhmbHRyLCBmaWZvKTsKKwkJCWlmIChmaWZvICE9IGR3X3JlYWR3KGR3cywgdHhmbHRyKSkKKwkJCQlicmVhazsKKwkJfQorCisJCWR3cy0+Zmlmb19sZW4gPSAoZmlmbyA9PSAyNTcpID8gMCA6IGZpZm87CisJCWR3X3dyaXRldyhkd3MsIHR4Zmx0ciwgMCk7CisJfQogfQogCiBpbnQgX19kZXZpbml0IGR3X3NwaV9hZGRfaG9zdChzdHJ1Y3QgZHdfc3BpICpkd3MpCkBAIC05MTMsNiArOTU3LDcgQEAKIAkvKiBEaXNjb25uZWN0IGZyb20gdGhlIFNQSSBmcmFtZXdvcmsgKi8KIAlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIoZHdzLT5tYXN0ZXIpOwogfQorRVhQT1JUX1NZTUJPTChkd19zcGlfcmVtb3ZlX2hvc3QpOwogCiBpbnQgZHdfc3BpX3N1c3BlbmRfaG9zdChzdHJ1Y3QgZHdfc3BpICpkd3MpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9kd19zcGlfbW1pby5jIGIvZHJpdmVycy9zcGkvZHdfc3BpX21taW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzViNDVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvZHdfc3BpX21taW8uYwpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIGR3X3NwaV9tbWlvLmMgLSBNZW1vcnktbWFwcGVkIGludGVyZmFjZSBkcml2ZXIgZm9yIERXIFNQSSBDb3JlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBPY3Rhc2ljIHNlbWljb25kdWN0b3IuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZHdfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJkd19zcGlfbW1pbyIKKworc3RydWN0IGR3X3NwaV9tbWlvIHsKKwlzdHJ1Y3QgZHdfc3BpICBkd3M7CisJc3RydWN0IGNsayAgICAgKmNsazsKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGR3X3NwaV9tbWlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGR3X3NwaV9tbWlvICpkd3NtbWlvOworCXN0cnVjdCBkd19zcGkgKmR3czsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgKmlvYXJlYTsKKwlpbnQgcmV0OworCisJZHdzbW1pbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkd19zcGlfbW1pbyksIEdGUF9LRVJORUwpOworCWlmICghZHdzbW1pbykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9lbmQ7CisJfQorCisJZHdzID0gJmR3c21taW8tPmR3czsKKworCS8qIEdldCBiYXNpYyBpbyByZXNvdXJjZSBhbmQgbWFwIGl0ICovCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIW1lbSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW0gcmVzb3VyY2U/XG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfa2ZyZWU7CisJfQorCisJaW9hcmVhID0gcmVxdWVzdF9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSwKKwkJCXBkZXYtPm5hbWUpOworCWlmICghaW9hcmVhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlNQSSByZWdpb24gYWxyZWFkeSBjbGFpbWVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9rZnJlZTsKKwl9CisKKwlkd3MtPnJlZ3MgPSBpb3JlbWFwX25vY2FjaGUobWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKKwlpZiAoIWR3cy0+cmVncykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJTUEkgcmVnaW9uIGFscmVhZHkgbWFwcGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWc7CisJfQorCisJZHdzLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChkd3MtPmlycSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIHJlc291cmNlP1xuIik7CisJCXJldCA9IGR3cy0+aXJxOyAvKiAtRU5YSU8gKi8KKwkJZ290byBlcnJfdW5tYXA7CisJfQorCisJZHdzbW1pby0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoIWR3c21taW8tPmNsaykgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9pcnE7CisJfQorCWNsa19lbmFibGUoZHdzbW1pby0+Y2xrKTsKKworCWR3cy0+cGFyZW50X2RldiA9ICZwZGV2LT5kZXY7CisJZHdzLT5idXNfbnVtID0gMDsKKwlkd3MtPm51bV9jcyA9IDQ7CisJZHdzLT5tYXhfZnJlcSA9IGNsa19nZXRfcmF0ZShkd3NtbWlvLT5jbGspOworCisJcmV0ID0gZHdfc3BpX2FkZF9ob3N0KGR3cyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY2xrOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHdzbW1pbyk7CisJcmV0dXJuIDA7CisKK2Vycl9jbGs6CisJY2xrX2Rpc2FibGUoZHdzbW1pby0+Y2xrKTsKKwljbGtfcHV0KGR3c21taW8tPmNsayk7CisJZHdzbW1pby0+Y2xrID0gTlVMTDsKK2Vycl9pcnE6CisJZnJlZV9pcnEoZHdzLT5pcnEsIGR3cyk7CitlcnJfdW5tYXA6CisJaW91bm1hcChkd3MtPnJlZ3MpOworZXJyX3JlbGVhc2VfcmVnOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOworZXJyX2tmcmVlOgorCWtmcmVlKGR3c21taW8pOworZXJyX2VuZDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBkd19zcGlfbW1pb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHdfc3BpX21taW8gKmR3c21taW8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJY2xrX2Rpc2FibGUoZHdzbW1pby0+Y2xrKTsKKwljbGtfcHV0KGR3c21taW8tPmNsayk7CisJZHdzbW1pby0+Y2xrID0gTlVMTDsKKworCWZyZWVfaXJxKGR3c21taW8tPmR3cy5pcnEsICZkd3NtbWlvLT5kd3MpOworCWR3X3NwaV9yZW1vdmVfaG9zdCgmZHdzbW1pby0+ZHdzKTsKKwlpb3VubWFwKGR3c21taW8tPmR3cy5yZWdzKTsKKwlrZnJlZShkd3NtbWlvKTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3X3NwaV9tbWlvX2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGR3X3NwaV9tbWlvX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkd19zcGlfbW1pb19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmZHdfc3BpX21taW9fZHJpdmVyLCBkd19zcGlfbW1pb19wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChkd19zcGlfbW1pb19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGR3X3NwaV9tbWlvX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHdfc3BpX21taW9fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGR3X3NwaV9tbWlvX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKZWFuLUh1Z3VlcyBEZXNjaGVuZXMgPGplYW4taHVndWVzLmRlc2NoZW5lc0BvY3Rhc2ljLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVtb3J5LW1hcHBlZCBJL08gaW50ZXJmYWNlIGRyaXZlciBmb3IgRFcgU1BJIENvcmUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2R3X3NwaV9wY2kuYyBiL2RyaXZlcnMvc3BpL2R3X3NwaV9wY2kuYwppbmRleCAzNGJhNjkxLi4xZjA3MzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9kd19zcGlfcGNpLmMKKysrIGIvZHJpdmVycy9zcGkvZHdfc3BpX3BjaS5jCkBAIC03Myw2ICs3Myw3IEBACiAJZHdzLT5udW1fY3MgPSA0OwogCWR3cy0+bWF4X2ZyZXEgPSAyNTAwMDAwMDsJLyogZm9yIE1vb3Jlc3R3b24gKi8KIAlkd3MtPmlycSA9IHBkZXYtPmlycTsKKwlkd3MtPmZpZm9fbGVuID0gNDA7CQkvKiBGSUZPIGhhcyA0MCB3b3JkcyBidWZmZXIgKi8KIAogCXJldCA9IGR3X3NwaV9hZGRfaG9zdChkd3MpOwogCWlmIChyZXQpCkBAIC05OCw2ICs5OSw3IEBACiAJc3RydWN0IGR3X3NwaV9wY2kgKmR3cGNpID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWR3X3NwaV9yZW1vdmVfaG9zdCgmZHdwY2ktPmR3cyk7CiAJaW91bm1hcChkd3BjaS0+ZHdzLnJlZ3MpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKIAlrZnJlZShkd3BjaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYyBiL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jCmluZGV4IGY1MGM4MWQuLjA0NzQ3ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jCkBAIC01MDMsNyArNTAzLDcgQEAKIAlyZXR1cm4gbXBjNTJ4eF9wc2Nfc3BpX2RvX3JlbW92ZSgmb3AtPmRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUyeHhfcHNjX3NwaV9vZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9wc2Nfc3BpX29mX21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1wc2Mtc3BpIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gIm1wYzUyMDAtcHNjLXNwaSIsIH0sIC8qIG9sZCAqLwogCXt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3NwaS5jIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9zcGkuYwppbmRleCA0NWJmZTY0Li42ZWFiNDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL21wYzUyeHhfc3BpLmMKQEAgLTU1MCw3ICs1NTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X3NwaV9tYXRjaFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X3NwaV9tYXRjaFtdIF9fZGV2aW5pdGNvbnN0ID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtc3BpIiwgfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwppbmRleCAxODkzZjFlLi4wZGRiYmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfaW14LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCkBAIC00NjksNyArNDY5LDcgQEAKIAlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CiAJaW50IGdwaW8gPSBzcGlfaW14LT5jaGlwc2VsZWN0W3NwaS0+Y2hpcF9zZWxlY3RdOwogCi0JcHJfZGVidWcoIiVzOiBtb2RlICVkLCAldSBicHcsICVkIGh6XG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKCZzcGktPmRldiwgIiVzOiBtb2RlICVkLCAldSBicHcsICVkIGh6XG4iLCBfX2Z1bmNfXywKIAkJIHNwaS0+bW9kZSwgc3BpLT5iaXRzX3Blcl93b3JkLCBzcGktPm1heF9zcGVlZF9oeik7CiAKIAlpZiAoZ3BpbyA+PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX21wYzh4eHguYyBiL2RyaXZlcnMvc3BpL3NwaV9tcGM4eHh4LmMKaW5kZXggMWZiMmE2ZS4uNGYwY2M5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX21wYzh4eHguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfbXBjOHh4eC5jCkBAIC0zNjUsNyArMzY1LDcgQEAKIAogCWlmICgobXBjOHh4eF9zcGktPnNwaWJyZyAvIGh6KSA+IDY0KSB7CiAJCWNzLT5od19tb2RlIHw9IFNQTU9ERV9ESVYxNjsKLQkJcG0gPSBtcGM4eHh4X3NwaS0+c3BpYnJnIC8gKGh6ICogNjQpOworCQlwbSA9IChtcGM4eHh4X3NwaS0+c3BpYnJnIC0gMSkgLyAoaHogKiA2NCkgKyAxOwogCiAJCVdBUk5fT05DRShwbSA+IDE2LCAiJXM6IFJlcXVlc3RlZCBzcGVlZCBpcyB0b28gbG93OiAlZCBIei4gIgogCQkJICAiV2lsbCB1c2UgJWQgSHogaW5zdGVhZC5cbiIsIGRldl9uYW1lKCZzcGktPmRldiksCkBAIC0zNzMsNyArMzczLDcgQEAKIAkJaWYgKHBtID4gMTYpCiAJCQlwbSA9IDE2OwogCX0gZWxzZQotCQlwbSA9IG1wYzh4eHhfc3BpLT5zcGlicmcgLyAoaHogKiA0KTsKKwkJcG0gPSAobXBjOHh4eF9zcGktPnNwaWJyZyAtIDEpIC8gKGh6ICogNCkgKyAxOwogCWlmIChwbSkKIAkJcG0tLTsKIApAQCAtMTMyOCw3ICsxMzI4LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHBsYXRfbXBjOHh4eF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKLQl1bnNpZ25lZCBpbnQgaXJxOworCWludCBpcnE7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKIAogCWlmICghcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpCkBAIC0xMzM5LDcgKzEzMzksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKCFpcnEpCisJaWYgKGlycSA8PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1hc3RlciA9IG1wYzh4eHhfc3BpX3Byb2JlKCZwZGV2LT5kZXYsIG1lbSwgaXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9wcGM0eHguYyBiL2RyaXZlcnMvc3BpL3NwaV9wcGM0eHguYwppbmRleCAxNDBhMThkLi42ZDhkNDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfcHBjNHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3BwYzR4eC5jCkBAIC01NzgsNyArNTc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgc3BpX3BwYzR4eF9vZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3BpX3BwYzR4eF9vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAiaWJtLHBwYzR4eC1zcGkiLCB9LAogCXt9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zM2M2NHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfczNjNjR4eC5jCmluZGV4IDg4YTQ1NmQuLjk3MzY1ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9zM2M2NHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3MzYzY0eHguYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KIAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+Ci0jaW5jbHVkZSA8cGxhdC9zcGkuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzY0eHgtc3BpLmg+CiAKIC8qIFJlZ2lzdGVycyBhbmQgYml0LWZpZWxkcyAqLwogCkBAIC0xMzcsNiArMTM3LDcgQEAKIC8qKgogICogc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhIC0gUnVudGltZSBpbmZvIGhvbGRlciBmb3IgU1BJIGRyaXZlci4KICAqIEBjbGs6IFBvaW50ZXIgdG8gdGhlIHNwaSBjbG9jay4KKyAqIEBzcmNfY2xrOiBQb2ludGVyIHRvIHRoZSBjbG9jayB1c2VkIHRvIGdlbmVyYXRlIFNQSSBzaWduYWxzLgogICogQG1hc3RlcjogUG9pbnRlciB0byB0aGUgU1BJIFByb3RvY29sIG1hc3Rlci4KICAqIEB3b3JrcXVldWU6IFdvcmsgcXVldWUgZm9yIHRoZSBTUEkgeGZlciByZXF1ZXN0cy4KICAqIEBjbnRybHJfaW5mbzogUGxhdGZvcm0gc3BlY2lmaWMgZGF0YSBmb3IgdGhlIGNvbnRyb2xsZXIgdGhpcyBkcml2ZXIgbWFuYWdlcy4KQEAgLTE1NywxMCArMTU4LDExIEBACiBzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgewogCXZvaWQgX19pb21lbSAgICAgICAgICAgICAgICAgICAgKnJlZ3M7CiAJc3RydWN0IGNsayAgICAgICAgICAgICAgICAgICAgICAqY2xrOworCXN0cnVjdCBjbGsgICAgICAgICAgICAgICAgICAgICAgKnNyY19jbGs7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAgICAgICAgICAqcGRldjsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAgICAgICAgICAgICAgICptYXN0ZXI7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJICAgICAgICAqd29ya3F1ZXVlOwotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAgKmNudHJscl9pbmZvOworCXN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvICAqY250cmxyX2luZm87CiAJc3RydWN0IHNwaV9kZXZpY2UgICAgICAgICAgICAgICAqdGdsX3NwaTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICAgICAgICAgIHdvcms7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgICAgICBxdWV1ZTsKQEAgLTE4MCw3ICsxODIsNyBAQAogCiBzdGF0aWMgdm9pZCBmbHVzaF9maWZvKHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkKQogewotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKIAl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZGQtPnJlZ3M7CiAJdW5zaWduZWQgbG9uZyBsb29wczsKIAl1MzIgdmFsOwpAQCAtMjI1LDcgKzIyNyw3IEBACiAJCQkJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKIAkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyLCBpbnQgZG1hX21vZGUpCiB7Ci0Jc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOworCXN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOwogCXZvaWQgX19pb21lbSAqcmVncyA9IHNkZC0+cmVnczsKIAl1MzIgbW9kZWNmZywgY2hjZmc7CiAKQEAgLTI5OCwxOSArMzAwLDIwIEBACiAJCWlmIChzZGQtPnRnbF9zcGkgIT0gc3BpKSB7IC8qIGlmIGxhc3QgbXNzZyBvbiBkaWZmIGRldmljZSAqLwogCQkJLyogRGVzZWxlY3QgdGhlIGxhc3QgdG9nZ2xlZCBkZXZpY2UgKi8KIAkJCWNzID0gc2RkLT50Z2xfc3BpLT5jb250cm9sbGVyX2RhdGE7Ci0JCQljcy0+c2V0X2xldmVsKHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIID8gMCA6IDEpOworCQkJY3MtPnNldF9sZXZlbChjcy0+bGluZSwKKwkJCQkJc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAwIDogMSk7CiAJCX0KIAkJc2RkLT50Z2xfc3BpID0gTlVMTDsKIAl9CiAKIAljcyA9IHNwaS0+Y29udHJvbGxlcl9kYXRhOwotCWNzLT5zZXRfbGV2ZWwoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAxIDogMCk7CisJY3MtPnNldF9sZXZlbChjcy0+bGluZSwgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAxIDogMCk7CiB9CiAKIHN0YXRpYyBpbnQgd2FpdF9mb3JfeGZlcihzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCwKIAkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyLCBpbnQgZG1hX21vZGUpCiB7Ci0Jc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOworCXN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOwogCXZvaWQgX19pb21lbSAqcmVncyA9IHNkZC0+cmVnczsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgbXM7CkBAIC0zODQsMTIgKzM4NywxMSBAQAogCWlmIChzZGQtPnRnbF9zcGkgPT0gc3BpKQogCQlzZGQtPnRnbF9zcGkgPSBOVUxMOwogCi0JY3MtPnNldF9sZXZlbChzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDAgOiAxKTsKKwljcy0+c2V0X2xldmVsKGNzLT5saW5lLCBzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDAgOiAxKTsKIH0KIAogc3RhdGljIHZvaWQgczNjNjR4eF9zcGlfY29uZmlnKHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkKQogewotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKIAl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZGQtPnJlZ3M7CiAJdTMyIHZhbDsKIApAQCAtNDM1LDcgKzQzNyw3IEBACiAJLyogQ29uZmlndXJlIENsb2NrICovCiAJdmFsID0gcmVhZGwocmVncyArIFMzQzY0WFhfU1BJX0NMS19DRkcpOwogCXZhbCAmPSB+UzNDNjRYWF9TUElfUFNSX01BU0s7Ci0JdmFsIHw9ICgoY2xrX2dldF9yYXRlKHNjaS0+c3JjX2NsaykgLyBzZGQtPmN1cl9zcGVlZCAvIDIgLSAxKQorCXZhbCB8PSAoKGNsa19nZXRfcmF0ZShzZGQtPnNyY19jbGspIC8gc2RkLT5jdXJfc3BlZWQgLyAyIC0gMSkKIAkJCSYgUzNDNjRYWF9TUElfUFNSX01BU0spOwogCXdyaXRlbCh2YWwsIHJlZ3MgKyBTM0M2NFhYX1NQSV9DTEtfQ0ZHKTsKIApAQCAtNTU4LDcgKzU2MCw3IEBACiBzdGF0aWMgdm9pZCBoYW5kbGVfbXNnKHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkLAogCQkJCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZykKIHsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJc3RydWN0IHMzYzY0eHhfc3BpX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CiAJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IG1zZy0+c3BpOwogCXN0cnVjdCBzM2M2NHh4X3NwaV9jc2luZm8gKmNzID0gc3BpLT5jb250cm9sbGVyX2RhdGE7CiAJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcjsKQEAgLTYzMiw4ICs2MzQsOCBAQAogCQlTM0M2NFhYX1NQSV9ERUFDVChzZGQpOwogCiAJCWlmIChzdGF0dXMpIHsKLQkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiSS9PIEVycm9yOiBcCi0JCQkJcngtJWQgdHgtJWQgcmVzOnJ4LSVjIHR4LSVjIGxlbi0lZFxuIiwKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiSS9PIEVycm9yOiAiCisJCQkJInJ4LSVkIHR4LSVkIHJlczpyeC0lYyB0eC0lYyBsZW4tJWRcbiIsCiAJCQkJeGZlci0+cnhfYnVmID8gMSA6IDAsIHhmZXItPnR4X2J1ZiA/IDEgOiAwLAogCQkJCShzZGQtPnN0YXRlICYgUlhCVVNZKSA/ICdmJyA6ICdwJywKIAkJCQkoc2RkLT5zdGF0ZSAmIFRYQlVTWSkgPyAnZicgOiAncCcsCkBAIC03ODYsNyArNzg4LDcgQEAKIHsKIAlzdHJ1Y3QgczNjNjR4eF9zcGlfY3NpbmZvICpjcyA9IHNwaS0+Y29udHJvbGxlcl9kYXRhOwogCXN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkOwotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpOworCXN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvICpzY2k7CiAJc3RydWN0IHNwaV9tZXNzYWdlICptc2c7CiAJdTMyIHBzciwgc3BlZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTgzMSwxNyArODMzLDE3IEBACiAJfQogCiAJLyogQ2hlY2sgaWYgd2UgY2FuIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCByYXRlICovCi0Jc3BlZWQgPSBjbGtfZ2V0X3JhdGUoc2NpLT5zcmNfY2xrKSAvIDIgLyAoMCArIDEpOyAvKiBNYXggcG9zc2libGUgKi8KKwlzcGVlZCA9IGNsa19nZXRfcmF0ZShzZGQtPnNyY19jbGspIC8gMiAvICgwICsgMSk7IC8qIE1heCBwb3NzaWJsZSAqLwogCiAJaWYgKHNwaS0+bWF4X3NwZWVkX2h6ID4gc3BlZWQpCiAJCXNwaS0+bWF4X3NwZWVkX2h6ID0gc3BlZWQ7CiAKLQlwc3IgPSBjbGtfZ2V0X3JhdGUoc2NpLT5zcmNfY2xrKSAvIDIgLyBzcGktPm1heF9zcGVlZF9oeiAtIDE7CisJcHNyID0gY2xrX2dldF9yYXRlKHNkZC0+c3JjX2NsaykgLyAyIC8gc3BpLT5tYXhfc3BlZWRfaHogLSAxOwogCXBzciAmPSBTM0M2NFhYX1NQSV9QU1JfTUFTSzsKIAlpZiAocHNyID09IFMzQzY0WFhfU1BJX1BTUl9NQVNLKQogCQlwc3ItLTsKIAotCXNwZWVkID0gY2xrX2dldF9yYXRlKHNjaS0+c3JjX2NsaykgLyAyIC8gKHBzciArIDEpOworCXNwZWVkID0gY2xrX2dldF9yYXRlKHNkZC0+c3JjX2NsaykgLyAyIC8gKHBzciArIDEpOwogCWlmIChzcGktPm1heF9zcGVlZF9oeiA8IHNwZWVkKSB7CiAJCWlmIChwc3IrMSA8IFMzQzY0WFhfU1BJX1BTUl9NQVNLKSB7CiAJCQlwc3IrKzsKQEAgLTg1MSw3ICs4NTMsNyBAQAogCQl9CiAJfQogCi0Jc3BlZWQgPSBjbGtfZ2V0X3JhdGUoc2NpLT5zcmNfY2xrKSAvIDIgLyAocHNyICsgMSk7CisJc3BlZWQgPSBjbGtfZ2V0X3JhdGUoc2RkLT5zcmNfY2xrKSAvIDIgLyAocHNyICsgMSk7CiAJaWYgKHNwaS0+bWF4X3NwZWVkX2h6ID49IHNwZWVkKQogCQlzcGktPm1heF9zcGVlZF9oeiA9IHNwZWVkOwogCWVsc2UKQEAgLTg2Nyw3ICs4NjksNyBAQAogCiBzdGF0aWMgdm9pZCBzM2M2NHh4X3NwaV9od2luaXQoc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQsIGludCBjaGFubmVsKQogewotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKIAl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZGQtPnJlZ3M7CiAJdW5zaWduZWQgaW50IHZhbDsKIApAQCAtOTAyLDcgKzkwNCw3IEBACiB7CiAJc3RydWN0IHJlc291cmNlCSptZW1fcmVzLCAqZG1hdHhfcmVzLCAqZG1hcnhfcmVzOwogCXN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkOwotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpOworCXN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvICpzY2k7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKIAlpbnQgcmV0OwogCkBAIC0xMDAwLDE4ICsxMDAyLDE1IEBACiAJCWdvdG8gZXJyNDsKIAl9CiAKLQlpZiAoc2NpLT5zcmNfY2xrX25yID09IFMzQzY0WFhfU1BJX1NSQ0NMS19QQ0xLKQotCQlzY2ktPnNyY19jbGsgPSBzZGQtPmNsazsKLQllbHNlCi0JCXNjaS0+c3JjX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgc2NpLT5zcmNfY2xrX25hbWUpOwotCWlmIChJU19FUlIoc2NpLT5zcmNfY2xrKSkgeworCXNkZC0+c3JjX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgc2NpLT5zcmNfY2xrX25hbWUpOworCWlmIChJU19FUlIoc2RkLT5zcmNfY2xrKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkiVW5hYmxlIHRvIGFjcXVpcmUgY2xvY2sgJyVzJ1xuIiwgc2NpLT5zcmNfY2xrX25hbWUpOwotCQlyZXQgPSBQVFJfRVJSKHNjaS0+c3JjX2Nsayk7CisJCXJldCA9IFBUUl9FUlIoc2RkLT5zcmNfY2xrKTsKIAkJZ290byBlcnI1OwogCX0KIAotCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGsgJiYgY2xrX2VuYWJsZShzY2ktPnNyY19jbGspKSB7CisJaWYgKGNsa19lbmFibGUoc2RkLT5zcmNfY2xrKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZG4ndCBlbmFibGUgY2xvY2sgJyVzJ1xuIiwKIAkJCQkJCQlzY2ktPnNyY19jbGtfbmFtZSk7CiAJCXJldCA9IC1FQlVTWTsKQEAgLTEwNDAsMTEgKzEwMzksMTAgQEAKIAkJZ290byBlcnI4OwogCX0KIAotCWRldl9kYmcoJnBkZXYtPmRldiwgIlNhbXN1bmcgU29DIFNQSSBEcml2ZXIgbG9hZGVkIGZvciBCdXMgU1BJLSVkIFwKLQkJCQkJd2l0aCAlZCBTbGF2ZXMgYXR0YWNoZWRcbiIsCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiU2Ftc3VuZyBTb0MgU1BJIERyaXZlciBsb2FkZWQgZm9yIEJ1cyBTUEktJWQgIgorCQkJCQkid2l0aCAlZCBTbGF2ZXMgYXR0YWNoZWRcbiIsCiAJCQkJCXBkZXYtPmlkLCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0KTsKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJcdElPbWVtPVsweCV4LTB4JXhdXAotCQkJCQlcdERNQT1bUngtJWQsIFR4LSVkXVxuIiwKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJcdElPbWVtPVsweCV4LTB4JXhdXHRETUE9W1J4LSVkLCBUeC0lZF1cbiIsCiAJCQkJCW1lbV9yZXMtPmVuZCwgbWVtX3Jlcy0+c3RhcnQsCiAJCQkJCXNkZC0+cnhfZG1hY2gsIHNkZC0+dHhfZG1hY2gpOwogCkBAIC0xMDUzLDExICsxMDUxLDkgQEAKIGVycjg6CiAJZGVzdHJveV93b3JrcXVldWUoc2RkLT53b3JrcXVldWUpOwogZXJyNzoKLQlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrKQotCQljbGtfZGlzYWJsZShzY2ktPnNyY19jbGspOworCWNsa19kaXNhYmxlKHNkZC0+c3JjX2Nsayk7CiBlcnI2OgotCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGspCi0JCWNsa19wdXQoc2NpLT5zcmNfY2xrKTsKKwljbGtfcHV0KHNkZC0+c3JjX2Nsayk7CiBlcnI1OgogCWNsa19kaXNhYmxlKHNkZC0+Y2xrKTsKIGVycjQ6CkBAIC0xMDc4LDcgKzEwNzQsNiBAQAogewogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CiAJc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7Ci0Jc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOwogCXN0cnVjdCByZXNvdXJjZQkqbWVtX3JlczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xMDkzLDExICsxMDg4LDggQEAKIAogCWRlc3Ryb3lfd29ya3F1ZXVlKHNkZC0+d29ya3F1ZXVlKTsKIAotCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGspCi0JCWNsa19kaXNhYmxlKHNjaS0+c3JjX2Nsayk7Ci0KLQlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrKQotCQljbGtfcHV0KHNjaS0+c3JjX2Nsayk7CisJY2xrX2Rpc2FibGUoc2RkLT5zcmNfY2xrKTsKKwljbGtfcHV0KHNkZC0+c3JjX2Nsayk7CiAKIAljbGtfZGlzYWJsZShzZGQtPmNsayk7CiAJY2xrX3B1dChzZGQtPmNsayk7CkBAIC0xMTA1LDcgKzEwOTcsOCBAQAogCWlvdW5tYXAoKHZvaWQgKikgc2RkLT5yZWdzKTsKIAogCW1lbV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW1fcmVzKSk7CisJaWYgKG1lbV9yZXMgIT0gTlVMTCkKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbV9yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbV9yZXMpKTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CkBAIC0xMTE4LDggKzExMTEsNiBAQAogewogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CiAJc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7Ci0Jc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOwotCXN0cnVjdCBzM2M2NHh4X3NwaV9jc2luZm8gKmNzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2RkLT5sb2NrLCBmbGFncyk7CkBAIC0xMTMwLDkgKzExMjEsNyBAQAogCQltc2xlZXAoMTApOwogCiAJLyogRGlzYWJsZSB0aGUgY2xvY2sgKi8KLQlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrKQotCQljbGtfZGlzYWJsZShzY2ktPnNyY19jbGspOwotCisJY2xrX2Rpc2FibGUoc2RkLT5zcmNfY2xrKTsKIAljbGtfZGlzYWJsZShzZGQtPmNsayk7CiAKIAlzZGQtPmN1cl9zcGVlZCA9IDA7IC8qIE91dHB1dCBDbG9jayBpcyBzdG9wcGVkICovCkBAIC0xMTQ0LDE1ICsxMTMzLDEzIEBACiB7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKIAlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJc3RydWN0IHMzYzY0eHhfc3BpX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNjaS0+Y2ZnX2dwaW8ocGRldik7CiAKIAkvKiBFbmFibGUgdGhlIGNsb2NrICovCi0JaWYgKHNjaS0+c3JjX2NsayAhPSBzZGQtPmNsaykKLQkJY2xrX2VuYWJsZShzY2ktPnNyY19jbGspOwotCisJY2xrX2VuYWJsZShzZGQtPnNyY19jbGspOwogCWNsa19lbmFibGUoc2RkLT5jbGspOwogCiAJczNjNjR4eF9zcGlfaHdpbml0KHNkZCwgcGRldi0+aWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMgYi9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYwppbmRleCA1MWU1ZTFkLi5kOTNiNjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYwpAQCAtMjAsMTIgKzIwLDEyIEBACiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc2hfbXNpb2YuaD4KIAotI2luY2x1ZGUgPGFzbS9zcGkuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKIHN0cnVjdCBzaF9tc2lvZl9zcGlfcHJpdiB7CkBAIC0xNzMsMTUgKzE3MywxMiBAQAogCWludCBlZGdlOwogCiAJLyoKLQkgKiBDUE9MIENQSEEgICAgIFRTQ0tJWiBSU0NLSVogVEVERyBSRURHKCEpCi0JICogICAgMCAgICAwICAgICAgICAgMTAgICAgIDEwICAgIDEgICAgMAotCSAqICAgIDAgICAgMSAgICAgICAgIDEwICAgICAxMCAgICAwICAgIDEKLQkgKiAgICAxICAgIDAgICAgICAgICAxMSAgICAgMTEgICAgMCAgICAxCi0JICogICAgMSAgICAxICAgICAgICAgMTEgICAgIDExICAgIDEgICAgMAotCSAqCi0JICogKCEpIE5vdGU6IFJFREcgaXMgaW52ZXJ0ZWQgcmVjb21tZW5kZWQgZGF0YSBzaGVldCBzZXR0aW5nCisJICogQ1BPTCBDUEhBICAgICBUU0NLSVogUlNDS0laIFRFREcgUkVERworCSAqICAgIDAgICAgMCAgICAgICAgIDEwICAgICAxMCAgICAxICAgIDEKKwkgKiAgICAwICAgIDEgICAgICAgICAxMCAgICAgMTAgICAgMCAgICAwCisJICogICAgMSAgICAwICAgICAgICAgMTEgICAgIDExICAgIDAgICAgMAorCSAqICAgIDEgICAgMSAgICAgICAgIDExICAgICAxMSAgICAxICAgIDEKIAkgKi8KLQogCXNoX21zaW9mX3dyaXRlKHAsIEZDVFIsIDApOwogCXNoX21zaW9mX3dyaXRlKHAsIFRNRFIxLCAweGUyMDAwMDA1IHwgKGxzYl9maXJzdCA8PCAyNCkpOwogCXNoX21zaW9mX3dyaXRlKHAsIFJNRFIxLCAweDIyMDAwMDA1IHwgKGxzYl9maXJzdCA8PCAyNCkpOwpAQCAtMTkzLDcgKzE5MCw3IEBACiAJZWRnZSA9IGNwb2wgPyBjcGhhIDogIWNwaGE7CiAKIAl0bXAgfD0gZWRnZSA8PCAyNzsgLyogVEVERyAqLwotCXRtcCB8PSAhZWRnZSA8PCAyNjsgLyogUkVERyAqLworCXRtcCB8PSBlZGdlIDw8IDI2OyAvKiBSRURHICovCiAJdG1wIHw9ICh0eF9oaV96ID8gMiA6IDApIDw8IDIyOyAvKiBUWERJWiAqLwogCXNoX21zaW9mX3dyaXRlKHAsIENUUiwgdG1wKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zdG1wLmMgYi9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jCmluZGV4IDI1NTJiYjMuLmZhZGZmNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9zdG1wLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3N0bXAuYwpAQCAtNzYsNyArNzYsNyBAQAogCQkJYnJlYWs7CQkJCQkJXAogCQl9CQkJCQkJCVwKIAkJY3B1X3JlbGF4KCk7CQkJCQkJXAotCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGVuZF9qaWZmaWVzLCBqaWZmaWVzKSk7CQkJXAorCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF9qaWZmaWVzKSk7CQkJXAogCXN1Y2NlZWRlZDsJCQkJCQkJXAogCX0pCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYyBiL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYwppbmRleCA5ZjM4NjM3Li4xYjQ3MzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jCkBAIC05Myw2ICs5MywyNiBAQAogCXZvaWQgKCpyeF9mbikgKHN0cnVjdCB4aWxpbnhfc3BpICopOwogfTsKIAorc3RhdGljIHZvaWQgeHNwaV93cml0ZTMyKHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpb3dyaXRlMzIodmFsLCBhZGRyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB4c3BpX3JlYWQzMih2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIGlvcmVhZDMyKGFkZHIpOworfQorCitzdGF0aWMgdm9pZCB4c3BpX3dyaXRlMzJfYmUodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlvd3JpdGUzMmJlKHZhbCwgYWRkcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgeHNwaV9yZWFkMzJfYmUodm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBpb3JlYWQzMmJlKGFkZHIpOworfQorCiBzdGF0aWMgdm9pZCB4c3BpX3R4OChzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaSkKIHsKIAl4c3BpLT53cml0ZV9mbigqeHNwaS0+dHhfcHRyLCB4c3BpLT5yZWdzICsgWFNQSV9UWERfT0ZGU0VUKTsKQEAgLTM3NCwxMSArMzk0LDExIEBACiAJeHNwaS0+bWVtID0gKm1lbTsKIAl4c3BpLT5pcnEgPSBpcnE7CiAJaWYgKHBkYXRhLT5saXR0bGVfZW5kaWFuKSB7Ci0JCXhzcGktPnJlYWRfZm4gPSBpb3JlYWQzMjsKLQkJeHNwaS0+d3JpdGVfZm4gPSBpb3dyaXRlMzI7CisJCXhzcGktPnJlYWRfZm4gPSB4c3BpX3JlYWQzMjsKKwkJeHNwaS0+d3JpdGVfZm4gPSB4c3BpX3dyaXRlMzI7CiAJfSBlbHNlIHsKLQkJeHNwaS0+cmVhZF9mbiA9IGlvcmVhZDMyYmU7Ci0JCXhzcGktPndyaXRlX2ZuID0gaW93cml0ZTMyYmU7CisJCXhzcGktPnJlYWRfZm4gPSB4c3BpX3JlYWQzMl9iZTsKKwkJeHNwaS0+d3JpdGVfZm4gPSB4c3BpX3dyaXRlMzJfYmU7CiAJfQogCXhzcGktPmJpdHNfcGVyX3dvcmQgPSBwZGF0YS0+Yml0c19wZXJfd29yZDsKIAlpZiAoeHNwaS0+Yml0c19wZXJfd29yZCA9PSA4KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS94aWxpbnhfc3BpX29mLmMgYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpX29mLmMKaW5kZXggNzFkYzNhZC4uZWQzNGE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkveGlsaW54X3NwaV9vZi5jCisrKyBiL2RyaXZlcnMvc3BpL3hpbGlueF9zcGlfb2YuYwpAQCAtOTksNyArOTksNyBAQAogCXJldHVybiB4aWxpbnhfc3BpX3JlbW92ZShvcCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhpbGlueF9zcGlfb2ZfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhpbGlueF9zcGlfb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLXNwaS0yLjAwLmEiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAieGxueCx4cHMtc3BpLTIuMDAuYiIsIH0sCiAJe30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL21haW4uYyBiL2RyaXZlcnMvc3NiL21haW4uYwppbmRleCA1NjgxZWJlLi4wM2RmZDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9tYWluLmMKKysrIGIvZHJpdmVycy9zc2IvbWFpbi5jCkBAIC00OTQsOCArNDk0LDcgQEAKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgU1NCX0JVU1RZUEVfU0RJTzoKLSNpZmRlZiBDT05GSUdfU1NCX1NESU8KLQkJCXNkZXYtPmlycSA9IGJ1cy0+aG9zdF9zZGlvLT5kZXYuaXJxOworI2lmZGVmIENPTkZJR19TU0JfU0RJT0hPU1QKIAkJCWRldi0+cGFyZW50ID0gJmJ1cy0+aG9zdF9zZGlvLT5kZXY7CiAjZW5kaWYKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCA5NGViODYzLi5mYzJlOTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtOTksOCArOTksNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92bXdnZngvS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMKaW5kZXggOGNmN2YyNy4uYzMyNGY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAJc3RydWN0IGdvNzAwNyAqZ28gPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7CiAJc3RydWN0IGdvNzAwN191c2IgKnVzYjsKIAlpbnQgcmM7Ci0JaW50IGRldl9hZGRyID0gY2xpZW50LT5hZGRyOworCWludCBkZXZfYWRkciA9IGNsaWVudC0+YWRkciA8PCAxOyAgLyogZmlybXdhcmUgd2FudHMgOC1iaXQgYWRkcmVzcyAqLwogCXU4ICpidWY7CiAKIAlpZiAoZ28gPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCmluZGV4IDYyYjI4MjguLjQ1ZDkwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYwpAQCAtMzYzLDEwICszNjMsNyBAQAogCWJsa2Rldi0+Z2QtPnF1ZXVlID0gYmxrX2luaXRfcXVldWUoYmxrdnNjX3JlcXVlc3QsICZibGtkZXYtPmxvY2spOwogCiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoYmxrZGV2LT5nZC0+cXVldWUsIFBBR0VfU0laRSk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKGJsa2Rldi0+Z2QtPnF1ZXVlLAotCQkJCSAgICBNQVhfTVVMVElQQUdFX0JVRkZFUl9DT1VOVCk7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhibGtkZXYtPmdkLT5xdWV1ZSwKLQkJCQkgIE1BWF9NVUxUSVBBR0VfQlVGRkVSX0NPVU5UKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKGJsa2Rldi0+Z2QtPnF1ZXVlLCBNQVhfTVVMVElQQUdFX0JVRkZFUl9DT1VOVCk7CiAJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkoYmxrZGV2LT5nZC0+cXVldWUsIFBBR0VfU0laRS0xKTsKIAlibGtfcXVldWVfYm91bmNlX2xpbWl0KGJsa2Rldi0+Z2QtPnF1ZXVlLCBCTEtfQk9VTkNFX0FOWSk7CiAJYmxrX3F1ZXVlX2RtYV9hbGlnbm1lbnQoYmxrZGV2LT5nZC0+cXVldWUsIDUxMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9NYWtlZmlsZQppbmRleCBjMGE1ODNjLi44NzQ0N2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vTWFrZWZpbGUKQEAgLTE0LDcgKzE0LDYgQEAKIG9jdGVvbi1ldGhlcm5ldC1vYmpzIDo9IGV0aGVybmV0Lm8KIG9jdGVvbi1ldGhlcm5ldC1vYmpzICs9IGV0aGVybmV0LW1kaW8ubwogb2N0ZW9uLWV0aGVybmV0LW9ianMgKz0gZXRoZXJuZXQtbWVtLm8KLW9jdGVvbi1ldGhlcm5ldC1vYmpzICs9IGV0aGVybmV0LXByb2Mubwogb2N0ZW9uLWV0aGVybmV0LW9ianMgKz0gZXRoZXJuZXQtcmdtaWkubwogb2N0ZW9uLWV0aGVybmV0LW9ianMgKz0gZXRoZXJuZXQtcngubwogb2N0ZW9uLWV0aGVybmV0LW9ianMgKz0gZXRoZXJuZXQtc2dtaWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1kZWZpbmVzLmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LWRlZmluZXMuaAppbmRleCBmMTMxMzFiLi42YTJjZDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LWRlZmluZXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LWRlZmluZXMuaApAQCAtNDEsMTcgKzQxLDEwIEBACiAgKiAgICAgIFRlbGxzIHRoZSBkcml2ZXIgdG8gcG9wdWxhdGUgdGhlIHBhY2tldCBidWZmZXJzIHdpdGgga2VybmVsIHNrYnVmZnMuCiAgKiAgICAgIFRoaXMgYWxsb3dzIHRoZSBkcml2ZXIgdG8gcmVjZWl2ZSBwYWNrZXRzIHdpdGhvdXQgY29weWluZyB0aGVtLiBJdCBhbHNvCiAgKiAgICAgIG1lYW5zIHRoYXQgMzJiaXQgdXNlcnNwYWNlIGNhbid0IGFjY2VzcyB0aGUgcGFja2V0IGJ1ZmZlcnMuCi0gKiAgVVNFXzMyQklUX1NIQVJFRAotICogICAgICBUaGlzIGRlZmluZSB0ZWxscyB0aGUgZHJpdmVyIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVycyBmcm9tIHRoZQotICogICAgICAzMmJpdCBzYWhyZWQgcmVnaW9uIGluc3RlYWQgb2YgdGhlIGtlcm5lbCBtZW1vcnkgc3BhY2UuCiAgKiAgVVNFX0hXX1RDUFVEUF9DSEVDS1NVTQogICogICAgICBDb250cm9scyBpZiB0aGUgT2N0ZW9uIFRDUC9VRFAgY2hlY2tzdW0gZW5naW5lIGlzIHVzZWQgZm9yIHBhY2tldAogICogICAgICBvdXRwdXQuIElmIHRoaXMgaXMgemVybywgdGhlIGtlcm5lbCB3aWxsIHBlcmZvcm0gdGhlIGNoZWNrc3VtIGluCiAgKiAgICAgIHNvZnR3YXJlLgotICogIFVTRV9NVUxUSUNPUkVfUkVDRUlWRQotICogICAgICBQcm9jZXNzIHJlY2VpdmUgaW50ZXJydXB0cyBvbiBtdWx0aXBsZSBjb3Jlcy4gVGhpcyBzcHJlYWRzIHRoZSBuZXR3b3JrCi0gKiAgICAgIGxvYWQgYWNyb3NzIHRoZSBmaXJzdCA4IHByb2Nlc3NvcnMuIElmIHRocyBpcyB6ZXJvLCBvbmx5IG9uZSBjb3JlCi0gKiAgICAgIHByb2Nlc3NlcyBpbmNvbW1pbmcgcGFja2V0cy4KICAqICBVU0VfQVNZTkNfSU9CRE1BCiAgKiAgICAgIFVzZSBhc3luY2hyb25vdXMgSU8gYWNjZXNzIHRvIGhhcmR3YXJlLiBUaGlzIHVzZXMgT2N0ZW9uJ3MgYXN5bmNocm9ub3VzCiAgKiAgICAgIElPQkRNQXMgdG8gaXNzdWUgSU8gYWNjZXNzZXMgd2l0aG91dCBzdGFsbGluZy4gU2V0IHRoaXMgdG8gemVybwpAQCAtNzUsMjkgKzY4LDE1IEBACiAjZGVmaW5lIENPTkZJR19DQVZJVU1fUkVTRVJWRTMyIDAKICNlbmRpZgogCi0jaWYgQ09ORklHX0NBVklVTV9SRVNFUlZFMzIKLSNkZWZpbmUgVVNFXzMyQklUX1NIQVJFRCAgICAgICAgICAgIDEKLSNkZWZpbmUgVVNFX1NLQlVGRlNfSU5fSFcgICAgICAgICAgIDAKLSNkZWZpbmUgUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUgIDAKLSNlbHNlCi0jZGVmaW5lIFVTRV8zMkJJVF9TSEFSRUQgICAgICAgICAgICAwCiAjZGVmaW5lIFVTRV9TS0JVRkZTX0lOX0hXICAgICAgICAgICAxCiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogI2RlZmluZSBSRVVTRV9TS0JVRkZTX1dJVEhPVVRfRlJFRSAgMAogI2Vsc2UKICNkZWZpbmUgUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUgIDEKICNlbmRpZgotI2VuZGlmCiAKLS8qIE1heCBpbnRlcnJ1cHRzIHBlciBzZWNvbmQgcGVyIGNvcmUgKi8KLSNkZWZpbmUgSU5URVJSVVBUX0xJTUlUICAgICAgICAgICAgIDEwMDAwCi0KLS8qIERvbid0IGxpbWl0IHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyAqLwotLyojZGVmaW5lIElOVEVSUlVQVF9MSU1JVCAgICAgICAgICAgICAwICAgICAqLwogI2RlZmluZSBVU0VfSFdfVENQVURQX0NIRUNLU1VNICAgICAgMQogCi0jZGVmaW5lIFVTRV9NVUxUSUNPUkVfUkVDRUlWRSAgICAgICAxCi0KIC8qIEVuYWJsZSBSYW5kb20gRWFybHkgRHJvcHBpbmcgdW5kZXIgbG9hZCAqLwogI2RlZmluZSBVU0VfUkVEICAgICAgICAgICAgICAgICAgICAgMQogI2RlZmluZSBVU0VfQVNZTkNfSU9CRE1BICAgICAgICAgICAgKENPTkZJR19DQVZJVU1fT0NURU9OX0NWTVNFR19TSVpFID4gMCkKQEAgLTExNSwyMSArOTQsMTIgQEAKIC8qIFVzZSB0aGlzIHRvIG5vdCBoYXZlIEZQQSBmcmVlcyBjb250cm9sIEwyICovCiAvKiNkZWZpbmUgRE9OVF9XUklURUJBQ0soeCkgICAgICAgICAwICAgKi8KIAotLyogTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0byBwcm9jZXNzIHBlciBpbnRlcnJ1cHQuICovCi0jZGVmaW5lIE1BWF9SWF9QQUNLRVRTIDEyMAogLyogTWF4aW11bSBudW1iZXIgb2YgU0tCcyB0byB0cnkgdG8gZnJlZSBwZXIgeG1pdCBwYWNrZXQuICovCi0jZGVmaW5lIE1BWF9TS0JfVE9fRlJFRSAxMAogI2RlZmluZSBNQVhfT1VUX1FVRVVFX0RFUFRIIDEwMDAKIAotI2lmbmRlZiBDT05GSUdfU01QCi0jdW5kZWYgVVNFX01VTFRJQ09SRV9SRUNFSVZFCi0jZGVmaW5lIFVTRV9NVUxUSUNPUkVfUkVDRUlWRSAwCi0jZW5kaWYKKyNkZWZpbmUgRkFVX1RPVEFMX1RYX1RPX0NMRUFOIChDVk1YX0ZBVV9SRUdfRU5EIC0gc2l6ZW9mKHVpbnQzMl90KSkKKyNkZWZpbmUgRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFIChGQVVfVE9UQUxfVFhfVE9fQ0xFQU4gLSBzaXplb2YodWludDMyX3QpKQogCi0jZGVmaW5lIElQX1BST1RPQ09MX1RDUCAgICAgICAgICAgICA2Ci0jZGVmaW5lIElQX1BST1RPQ09MX1VEUCAgICAgICAgICAgICAweDExCi0KLSNkZWZpbmUgRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFIChDVk1YX0ZBVV9SRUdfRU5EIC0gc2l6ZW9mKHVpbnQzMl90KSkKICNkZWZpbmUgVE9UQUxfTlVNQkVSX09GX1BPUlRTICAgICAgIChDVk1YX1BJUF9OVU1fSU5QVVRfUE9SVFMrMSkKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jCmluZGV4IDA1YTVjYzAuLjdlMGJlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jCkBAIC05NiwxMSArOTYsMTEgQEAKIH07CiAKIC8qKgotICogSU9DVEwgc3VwcG9ydCBmb3IgUEhZIGNvbnRyb2wKLSAqCisgKiBjdm1fb2N0X2lvY3RsIC0gSU9DVEwgc3VwcG9ydCBmb3IgUEhZIGNvbnRyb2wKICAqIEBkZXY6ICAgIERldmljZSB0byBjaGFuZ2UKICAqIEBycTogICAgIHRoZSByZXF1ZXN0CiAgKiBAY21kOiAgICB0aGUgY29tbWFuZAorICoKICAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzCiAgKi8KIGludCBjdm1fb2N0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCkBAIC0xNTMsNyArMTUzLDcgQEAKIAogCiAvKioKLSAqIFNldHVwIHRoZSBQSFkKKyAqIGN2bV9vY3RfcGh5X3NldHVwX2RldmljZSAtIHNldHVwIHRoZSBQSFkKICAqCiAgKiBAZGV2OiAgICBEZXZpY2UgdG8gc2V0dXAKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oCmluZGV4IDU1ZDA2MTRhLi5hNDE3ZDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uaApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWVtLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1lbS5jCmluZGV4IGI1OTU5MDMuLjAwY2M5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWVtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZW0uYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvbnRhY3Q6IHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT0NURU9OIFNESwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENhdml1bSBOZXR3b3JrcworICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgQ2F2aXVtIE5ldHdvcmtzCiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKQEAgLTI2LDggKzI2LDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bmV0L2RzdC5oPgogCiAjaW5jbHVkZSA8YXNtL29jdGVvbi9vY3Rlb24uaD4KIApAQCAtMzYsMTggKzM0LDE5IEBACiAjaW5jbHVkZSAiY3ZteC1mcGEuaCIKIAogLyoqCi0gKiBGaWxsIHRoZSBzdXBwbGllZCBoYXJkd2FyZSBwb29sIHdpdGggc2tidWZmcwotICoKKyAqIGN2bV9vY3RfZmlsbF9od19za2J1ZmYgLSBmaWxsIHRoZSBzdXBwbGllZCBoYXJkd2FyZSBwb29sIHdpdGggc2tidWZmcwogICogQHBvb2w6ICAgICBQb29sIHRvIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3IKICAqIEBzaXplOiAgICAgU2l6ZSBvZiB0aGUgYnVmZmVyIG5lZWRlZCBmb3IgdGhlIHBvb2wKICAqIEBlbGVtZW50czogTnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUKKyAqCisgKiBSZXR1cm5zIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ1ZmZlcnMgYWxsb2NhdGVkLgogICovCiBzdGF0aWMgaW50IGN2bV9vY3RfZmlsbF9od19za2J1ZmYoaW50IHBvb2wsIGludCBzaXplLCBpbnQgZWxlbWVudHMpCiB7CiAJaW50IGZyZWVkID0gZWxlbWVudHM7CiAJd2hpbGUgKGZyZWVkKSB7CiAKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZSArIDEyOCk7CisJCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUgKyAyNTYpOwogCQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7CiAJCQlwcl93YXJuaW5nCiAJCQkgICAgKCJGYWlsZWQgdG8gYWxsb2NhdGUgc2tiIGZvciBoYXJkd2FyZSBwb29sICVkXG4iLApAQCAtNTUsNyArNTQsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlza2JfcmVzZXJ2ZShza2IsIDEyOCAtICgoKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhKSAmIDB4N2YpKTsKKwkJc2tiX3Jlc2VydmUoc2tiLCAyNTYgLSAoKCh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSkgJiAweDdmKSk7CiAJCSooc3RydWN0IHNrX2J1ZmYgKiopKHNrYi0+ZGF0YSAtIHNpemVvZih2b2lkICopKSA9IHNrYjsKIAkJY3ZteF9mcGFfZnJlZShza2ItPmRhdGEsIHBvb2wsIERPTlRfV1JJVEVCQUNLKHNpemUgLyAxMjgpKTsKIAkJZnJlZWQtLTsKQEAgLTY0LDggKzYzLDcgQEAKIH0KIAogLyoqCi0gKiBGcmVlIHRoZSBzdXBwbGllZCBoYXJkd2FyZSBwb29sIG9mIHNrYnVmZnMKLSAqCisgKiBjdm1fb2N0X2ZyZWVfaHdfc2tidWZmLSBmcmVlIGhhcmR3YXJlIHBvb2wgc2tidWZmcwogICogQHBvb2w6ICAgICBQb29sIHRvIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3IKICAqIEBzaXplOiAgICAgU2l6ZSBvZiB0aGUgYnVmZmVyIG5lZWRlZCBmb3IgdGhlIHBvb2wKICAqIEBlbGVtZW50czogTnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUKQEAgLTkzLDk2ICs5MSw3NiBAQAogfQogCiAvKioKLSAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSBoYXJkd2FyZSBwb29sIHdpdGggbWVtb3J5LiBEZXBlbmRpbmcKLSAqIG9uIHRoZSBjb25maWcgZGVmaW5lcywgdGhpcyBtZW1vcnkgbWlnaHQgY29tZSBmcm9tIHRoZQotICoga2VybmVsIG9yIGdsb2JhbCAzMmJpdCBtZW1vcnkgYWxsb2NhdGVkIHdpdGgKLSAqIGN2bXhfYm9vdG1lbV9hbGxvYy4KLSAqCisgKiBjdm1fb2N0X2ZpbGxfaHdfbWVtb3J5IC0gZmlsbCBhIGhhcmR3YXJlIHBvb2wgd2l0aCBtZW1vcnkuCiAgKiBAcG9vbDogICAgIFBvb2wgdG8gcG9wdWxhdGUKICAqIEBzaXplOiAgICAgU2l6ZSBvZiBlYWNoIGJ1ZmZlciBpbiB0aGUgcG9vbAogICogQGVsZW1lbnRzOiBOdW1iZXIgb2YgYnVmZmVycyB0byBhbGxvY2F0ZQorICoKKyAqIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQuCiAgKi8KIHN0YXRpYyBpbnQgY3ZtX29jdF9maWxsX2h3X21lbW9yeShpbnQgcG9vbCwgaW50IHNpemUsIGludCBlbGVtZW50cykKIHsKIAljaGFyICptZW1vcnk7CisJY2hhciAqZnBhOwogCWludCBmcmVlZCA9IGVsZW1lbnRzOwogCi0JaWYgKFVTRV8zMkJJVF9TSEFSRUQpIHsKLQkJZXh0ZXJuIHVpbnQ2NF90IG9jdGVvbl9yZXNlcnZlMzJfbWVtb3J5OwotCi0JCW1lbW9yeSA9Ci0JCSAgICBjdm14X2Jvb3RtZW1fYWxsb2NfcmFuZ2UoZWxlbWVudHMgKiBzaXplLCAxMjgsCi0JCQkJCSAgICAgb2N0ZW9uX3Jlc2VydmUzMl9tZW1vcnksCi0JCQkJCSAgICAgb2N0ZW9uX3Jlc2VydmUzMl9tZW1vcnkgKwotCQkJCQkgICAgIChDT05GSUdfQ0FWSVVNX1JFU0VSVkUzMiA8PCAyMCkgLQotCQkJCQkgICAgIDEpOwotCQlpZiAobWVtb3J5ID09IE5VTEwpCi0JCQlwYW5pYygiVW5hYmxlIHRvIGFsbG9jYXRlICV1IGJ5dGVzIGZvciBGUEEgcG9vbCAlZFxuIiwKLQkJCSAgICAgIGVsZW1lbnRzICogc2l6ZSwgcG9vbCk7Ci0KLQkJcHJfbm90aWNlKCJNZW1vcnkgcmFuZ2UgJXAgLSAlcCByZXNlcnZlZCBmb3IgIgotCQkJICAiaGFyZHdhcmVcbiIsIG1lbW9yeSwKLQkJCSAgbWVtb3J5ICsgZWxlbWVudHMgKiBzaXplIC0gMSk7Ci0KLQkJd2hpbGUgKGZyZWVkKSB7Ci0JCQljdm14X2ZwYV9mcmVlKG1lbW9yeSwgcG9vbCwgMCk7Ci0JCQltZW1vcnkgKz0gc2l6ZTsKLQkJCWZyZWVkLS07CisJd2hpbGUgKGZyZWVkKSB7CisJCS8qCisJCSAqIEZQQSBtZW1vcnkgbXVzdCBiZSAxMjggYnl0ZSBhbGlnbmVkLiAgU2luY2Ugd2UgYXJlCisJCSAqIGFsaWduaW5nIHdlIG5lZWQgdG8gc2F2ZSB0aGUgb3JpZ2luYWwgcG9pbnRlciBzbyB3ZQorCQkgKiBjYW4gZmVlZCBpdCB0byBrZnJlZSB3aGVuIHRoZSBtZW1vcnkgaXMgcmV0dXJuZWQgdG8KKwkJICogdGhlIGtlcm5lbC4KKwkJICoKKwkJICogV2UgYWxsb2NhdGUgYW4gZXh0cmEgMjU2IGJ5dGVzIHRvIGFsbG93IGZvcgorCQkgKiBhbGlnbm1lbnQgYW5kIHNwYWNlIGZvciB0aGUgb3JpZ2luYWwgcG9pbnRlciBzYXZlZAorCQkgKiBqdXN0IGJlZm9yZSB0aGUgYmxvY2suCisJCSAqLworCQltZW1vcnkgPSBrbWFsbG9jKHNpemUgKyAyNTYsIEdGUF9BVE9NSUMpOworCQlpZiAodW5saWtlbHkobWVtb3J5ID09IE5VTEwpKSB7CisJCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gYWxsb2NhdGUgJXUgYnl0ZXMgZm9yIEZQQSBwb29sICVkXG4iLAorCQkJCSAgIGVsZW1lbnRzICogc2l6ZSwgcG9vbCk7CisJCQlicmVhazsKIAkJfQotCX0gZWxzZSB7Ci0JCXdoaWxlIChmcmVlZCkgewotCQkJLyogV2UgbmVlZCB0byBmb3JjZSBhbGlnbm1lbnQgdG8gMTI4IGJ5dGVzIGhlcmUgKi8KLQkJCW1lbW9yeSA9IGttYWxsb2Moc2l6ZSArIDEyNywgR0ZQX0FUT01JQyk7Ci0JCQlpZiAodW5saWtlbHkobWVtb3J5ID09IE5VTEwpKSB7Ci0JCQkJcHJfd2FybmluZygiVW5hYmxlIHRvIGFsbG9jYXRlICV1IGJ5dGVzIGZvciAiCi0JCQkJCSAgICJGUEEgcG9vbCAlZFxuIiwKLQkJCQkgICAgIGVsZW1lbnRzICogc2l6ZSwgcG9vbCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQltZW1vcnkgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpbWVtb3J5ICsgMTI3KSAmIC0xMjgpOwotCQkJY3ZteF9mcGFfZnJlZShtZW1vcnksIHBvb2wsIDApOwotCQkJZnJlZWQtLTsKLQkJfQorCQlmcGEgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpbWVtb3J5ICsgMjU2KSAmIH4weDdmVUwpOworCQkqKChjaGFyICoqKWZwYSAtIDEpID0gbWVtb3J5OworCQljdm14X2ZwYV9mcmVlKGZwYSwgcG9vbCwgMCk7CisJCWZyZWVkLS07CiAJfQogCXJldHVybiBlbGVtZW50cyAtIGZyZWVkOwogfQogCiAvKioKLSAqIEZyZWUgbWVtb3J5IHByZXZpb3VzbHkgYWxsb2NhdGVkIHdpdGggY3ZtX29jdF9maWxsX2h3X21lbW9yeQotICoKKyAqIGN2bV9vY3RfZnJlZV9od19tZW1vcnkgLSBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgY3ZtX29jdF9maWxsX2h3X21lbW9yeQogICogQHBvb2w6ICAgICBGUEEgcG9vbCB0byBmcmVlCiAgKiBAc2l6ZTogICAgIFNpemUgb2YgZWFjaCBidWZmZXIgaW4gdGhlIHBvb2wKICAqIEBlbGVtZW50czogTnVtYmVyIG9mIGJ1ZmZlcnMgdGhhdCBzaG91bGQgYmUgaW4gdGhlIHBvb2wKICAqLwogc3RhdGljIHZvaWQgY3ZtX29jdF9mcmVlX2h3X21lbW9yeShpbnQgcG9vbCwgaW50IHNpemUsIGludCBlbGVtZW50cykKIHsKLQlpZiAoVVNFXzMyQklUX1NIQVJFRCkgewotCQlwcl93YXJuaW5nKCJXYXJuaW5nOiAzMiBzaGFyZWQgbWVtb3J5IGlzIG5vdCBmcmVlYWJsZVxuIik7Ci0JfSBlbHNlIHsKLQkJY2hhciAqbWVtb3J5OwotCQlkbyB7Ci0JCQltZW1vcnkgPSBjdm14X2ZwYV9hbGxvYyhwb29sKTsKLQkJCWlmIChtZW1vcnkpIHsKLQkJCQllbGVtZW50cy0tOwotCQkJCWtmcmVlKHBoeXNfdG9fdmlydChjdm14X3B0cl90b19waHlzKG1lbW9yeSkpKTsKLQkJCX0KLQkJfSB3aGlsZSAobWVtb3J5KTsKKwljaGFyICptZW1vcnk7CisJY2hhciAqZnBhOworCWRvIHsKKwkJZnBhID0gY3ZteF9mcGFfYWxsb2MocG9vbCk7CisJCWlmIChmcGEpIHsKKwkJCWVsZW1lbnRzLS07CisJCQlmcGEgPSAoY2hhciAqKXBoeXNfdG9fdmlydChjdm14X3B0cl90b19waHlzKGZwYSkpOworCQkJbWVtb3J5ID0gKigoY2hhciAqKilmcGEgLSAxKTsKKwkJCWtmcmVlKG1lbW9yeSk7CisJCX0KKwl9IHdoaWxlIChmcGEpOwogCi0JCWlmIChlbGVtZW50cyA8IDApCi0JCQlwcl93YXJuaW5nKCJGcmVlaW5nIG9mIHBvb2wgJXUgaGFkIHRvbyBtYW55ICIKLQkJCQkgICAiYnVmZmVycyAoJWQpXG4iLAotCQkJICAgICAgIHBvb2wsIGVsZW1lbnRzKTsKLQkJZWxzZSBpZiAoZWxlbWVudHMgPiAwKQotCQkJcHJfd2FybmluZygiV2FybmluZzogRnJlZWluZyBvZiBwb29sICV1IGlzICIKLQkJCQkibWlzc2luZyAlZCBidWZmZXJzXG4iLAotCQkJICAgICBwb29sLCBlbGVtZW50cyk7Ci0JfQorCWlmIChlbGVtZW50cyA8IDApCisJCXByX3dhcm5pbmcoIkZyZWVpbmcgb2YgcG9vbCAldSBoYWQgdG9vIG1hbnkgYnVmZmVycyAoJWQpXG4iLAorCQkJcG9vbCwgZWxlbWVudHMpOworCWVsc2UgaWYgKGVsZW1lbnRzID4gMCkKKwkJcHJfd2FybmluZygiV2FybmluZzogRnJlZWluZyBvZiBwb29sICV1IGlzIG1pc3NpbmcgJWQgYnVmZmVyc1xuIiwKKwkJCXBvb2wsIGVsZW1lbnRzKTsKIH0KIAogaW50IGN2bV9vY3RfbWVtX2ZpbGxfZnBhKGludCBwb29sLCBpbnQgc2l6ZSwgaW50IGVsZW1lbnRzKQogewogCWludCBmcmVlZDsKLQlpZiAoVVNFX1NLQlVGRlNfSU5fSFcpCisJaWYgKFVTRV9TS0JVRkZTX0lOX0hXICYmIHBvb2wgPT0gQ1ZNWF9GUEFfUEFDS0VUX1BPT0wpCiAJCWZyZWVkID0gY3ZtX29jdF9maWxsX2h3X3NrYnVmZihwb29sLCBzaXplLCBlbGVtZW50cyk7CiAJZWxzZQogCQlmcmVlZCA9IGN2bV9vY3RfZmlsbF9od19tZW1vcnkocG9vbCwgc2l6ZSwgZWxlbWVudHMpOwpAQCAtMTkxLDcgKzE2OSw3IEBACiAKIHZvaWQgY3ZtX29jdF9tZW1fZW1wdHlfZnBhKGludCBwb29sLCBpbnQgc2l6ZSwgaW50IGVsZW1lbnRzKQogewotCWlmIChVU0VfU0tCVUZGU19JTl9IVykKKwlpZiAoVVNFX1NLQlVGRlNfSU5fSFcgJiYgcG9vbCA9PSBDVk1YX0ZQQV9QQUNLRVRfUE9PTCkKIAkJY3ZtX29jdF9mcmVlX2h3X3NrYnVmZihwb29sLCBzaXplLCBlbGVtZW50cyk7CiAJZWxzZQogCQljdm1fb2N0X2ZyZWVfaHdfbWVtb3J5KHBvb2wsIHNpemUsIGVsZW1lbnRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1wcm9jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MzA4ZDQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1wcm9jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEF1dGhvcjogQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogQ29udGFjdDogc3VwcG9ydEBjYXZpdW1uZXR3b3Jrcy5jb20KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPQ1RFT04gU0RLCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIEFTLUlTIGFuZCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5Ci0gKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFLCBvcgotICogTk9OSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICogb3IgdmlzaXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KLSAqCi0gKiBUaGlzIGZpbGUgbWF5IGFsc28gYmUgYXZhaWxhYmxlIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgZnJvbSBDYXZpdW0uCi0gKiBDb250YWN0IENhdml1bSBOZXR3b3JrcyBmb3IgbW9yZSBpbmZvcm1hdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxuZXQvZHN0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vb2N0ZW9uL29jdGVvbi5oPgotCi0jaW5jbHVkZSAib2N0ZW9uLWV0aGVybmV0LmgiCi0jaW5jbHVkZSAiZXRoZXJuZXQtZGVmaW5lcy5oIgotCi0jaW5jbHVkZSAiY3ZteC1oZWxwZXIuaCIKLSNpbmNsdWRlICJjdm14LXBpcC5oIgotCi0vKioKLSAqIFVzZXIgaXMgcmVhZGluZyAvcHJvYy9vY3Rlb25fZXRoZXJuZXRfc3RhdHMKLSAqCi0gKiBAbToKLSAqIEB2OgotICogUmV0dXJucwotICovCi1zdGF0aWMgaW50IGN2bV9vY3Rfc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0Jc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdjsKLQlpbnQgcG9ydDsKLQotCWZvciAocG9ydCA9IDA7IHBvcnQgPCBUT1RBTF9OVU1CRVJfT0ZfUE9SVFM7IHBvcnQrKykgewotCi0JCWlmIChjdm1fb2N0X2RldmljZVtwb3J0XSkgewotCQkJcHJpdiA9IG5ldGRldl9wcml2KGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQotCQkJc2VxX3ByaW50ZihtLCAiXG5PY3Rlb24gUG9ydCAlZCAoJXMpXG4iLCBwb3J0LAotCQkJCSAgIGN2bV9vY3RfZGV2aWNlW3BvcnRdLT5uYW1lKTsKLQkJCXNlcV9wcmludGYobSwKLQkJCQkgICAicnhfcGFja2V0czogICAgICAgICAgICAgJTEybHVcdCIKLQkJCQkgICAidHhfcGFja2V0czogICAgICAgICAgICAgJTEybHVcbiIsCi0JCQkJICAgcHJpdi0+c3RhdHMucnhfcGFja2V0cywKLQkJCQkgICBwcml2LT5zdGF0cy50eF9wYWNrZXRzKTsKLQkJCXNlcV9wcmludGYobSwKLQkJCQkgICAicnhfYnl0ZXM6ICAgICAgICAgICAgICAgJTEybHVcdCIKLQkJCQkgICAidHhfYnl0ZXM6ICAgICAgICAgICAgICAgJTEybHVcbiIsCi0JCQkJICAgcHJpdi0+c3RhdHMucnhfYnl0ZXMsIHByaXYtPnN0YXRzLnR4X2J5dGVzKTsKLQkJCXNlcV9wcmludGYobSwKLQkJCQkgICAicnhfZXJyb3JzOiAgICAgICAgICAgICAgJTEybHVcdCIKLQkJCQkgICAidHhfZXJyb3JzOiAgICAgICAgICAgICAgJTEybHVcbiIsCi0JCQkJICAgcHJpdi0+c3RhdHMucnhfZXJyb3JzLAotCQkJCSAgIHByaXYtPnN0YXRzLnR4X2Vycm9ycyk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2Ryb3BwZWQ6ICAgICAgICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X2Ryb3BwZWQ6ICAgICAgICAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfZHJvcHBlZCk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2xlbmd0aF9lcnJvcnM6ICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X2Fib3J0ZWRfZXJyb3JzOiAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMpOwotCQkJc2VxX3ByaW50ZihtLAotCQkJCSAgICJyeF9vdmVyX2Vycm9yczogICAgICAgICAlMTJsdVx0IgotCQkJCSAgICJ0eF9jYXJyaWVyX2Vycm9yczogICAgICAlMTJsdVxuIiwKLQkJCQkgICBwcml2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycywKLQkJCQkgICBwcml2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2NyY19lcnJvcnM6ICAgICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X2ZpZm9fZXJyb3JzOiAgICAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfZmlmb19lcnJvcnMpOwotCQkJc2VxX3ByaW50ZihtLAotCQkJCSAgICJyeF9mcmFtZV9lcnJvcnM6ICAgICAgICAlMTJsdVx0IgotCQkJCSAgICJ0eF9oZWFydGJlYXRfZXJyb3JzOiAgICAlMTJsdVxuIiwKLQkJCQkgICBwcml2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycyk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2ZpZm9fZXJyb3JzOiAgICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X3dpbmRvd19lcnJvcnM6ICAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzLAotCQkJCSAgIHByaXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMpOwotCQkJc2VxX3ByaW50ZihtLAotCQkJCSAgICJyeF9taXNzZWRfZXJyb3JzOiAgICAgICAlMTJsdVx0IgotCQkJCSAgICJtdWx0aWNhc3Q6ICAgICAgICAgICAgICAlMTJsdVxuIiwKLQkJCQkgICBwcml2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzLAotCQkJCSAgIHByaXYtPnN0YXRzLm11bHRpY2FzdCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiAvcHJvYy9vY3Rlb25fZXRoZXJuZXRfc3RhdHMgd2FzIG9wZW5uZWQuIFVzZSB0aGUgc2luZ2xlX29wZW4gaXRlcmF0b3IKLSAqCi0gKiBAaW5vZGU6Ci0gKiBAZmlsZToKLSAqIFJldHVybnMKLSAqLwotc3RhdGljIGludCBjdm1fb2N0X3N0YXRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGN2bV9vY3Rfc3RhdHNfc2hvdywgTlVMTCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGN2bV9vY3Rfc3RhdHNfb3BlcmF0aW9ucyA9IHsKLQkub3BlbiA9IGN2bV9vY3Rfc3RhdHNfb3BlbiwKLQkucmVhZCA9IHNlcV9yZWFkLAotCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KLXZvaWQgY3ZtX29jdF9wcm9jX2luaXRpYWxpemUodm9pZCkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0KLQkgICAgY3JlYXRlX3Byb2NfZW50cnkoIm9jdGVvbl9ldGhlcm5ldF9zdGF0cyIsIDAsIE5VTEwpOwotCWlmIChlbnRyeSkKLQkJZW50cnktPnByb2NfZm9wcyA9ICZjdm1fb2N0X3N0YXRzX29wZXJhdGlvbnM7Ci19Ci0KLXZvaWQgY3ZtX29jdF9wcm9jX3NodXRkb3duKHZvaWQpCi17Ci0JcmVtb3ZlX3Byb2NfZW50cnkoIm9jdGVvbl9ldGhlcm5ldF9zdGF0cyIsIE5VTEwpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1wcm9jLmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXByb2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJjN2Q5Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXByb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEF1dGhvcjogQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogQ29udGFjdDogc3VwcG9ydEBjYXZpdW1uZXR3b3Jrcy5jb20KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPQ1RFT04gU0RLCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIEFTLUlTIGFuZCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5Ci0gKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFLCBvcgotICogTk9OSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICogb3IgdmlzaXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KLSAqCi0gKiBUaGlzIGZpbGUgbWF5IGFsc28gYmUgYXZhaWxhYmxlIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgZnJvbSBDYXZpdW0uCi0gKiBDb250YWN0IENhdml1bSBOZXR3b3JrcyBmb3IgbW9yZSBpbmZvcm1hdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIGN2bV9vY3RfcHJvY19pbml0aWFsaXplKHZvaWQpOwotdm9pZCBjdm1fb2N0X3Byb2Nfc2h1dGRvd24odm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJnbWlpLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJnbWlpLmMKaW5kZXggMzgyMGYxZS4uYTBkNGQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yZ21paS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcmdtaWkuYwpAQCAtMjYsNyArMjYsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxuZXQvZHN0Lmg+CiAKICNpbmNsdWRlIDxhc20vb2N0ZW9uL29jdGVvbi5oPgpAQCAtNDgsMTQgKzQ4LDIwIEBACiBzdGF0aWMgdm9pZCBjdm1fb2N0X3JnbWlpX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWN2bXhfaGVscGVyX2xpbmtfaW5mb190IGxpbmtfaW5mbzsKKwlpbnQgdXNlX2dsb2JhbF9yZWdpc3Rlcl9sb2NrID0gKHByaXYtPnBoeWRldiA9PSBOVUxMKTsKIAotCS8qCi0JICogVGFrZSB0aGUgZ2xvYmFsIHJlZ2lzdGVyIGxvY2sgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHRvdWNoCi0JICogcmVnaXN0ZXJzIHRoYXQgYWZmZWN0IG1vcmUgdGhhbiBvbmUgcG9ydC4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwlCVUdfT04oaW5faW50ZXJydXB0KCkpOworCWlmICh1c2VfZ2xvYmFsX3JlZ2lzdGVyX2xvY2spIHsKKwkJLyoKKwkJICogVGFrZSB0aGUgZ2xvYmFsIHJlZ2lzdGVyIGxvY2sgc2luY2Ugd2UgYXJlIGdvaW5nIHRvCisJCSAqIHRvdWNoIHJlZ2lzdGVycyB0aGF0IGFmZmVjdCBtb3JlIHRoYW4gb25lIHBvcnQuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQltdXRleF9sb2NrKCZwcml2LT5waHlkZXYtPmJ1cy0+bWRpb19sb2NrKTsKKwl9CiAKIAlsaW5rX2luZm8gPSBjdm14X2hlbHBlcl9saW5rX2dldChwcml2LT5wb3J0KTsKIAlpZiAobGlua19pbmZvLnU2NCA9PSBwcml2LT5saW5rX2luZm8pIHsKQEAgLTExNSw3ICsxMjEsMTEgQEAKIAkJCQkgICAgIGRldi0+bmFtZSk7CiAJCQl9CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKworCQlpZiAodXNlX2dsb2JhbF9yZWdpc3Rlcl9sb2NrKQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwkJZWxzZQorCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5waHlkZXYtPmJ1cy0+bWRpb19sb2NrKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTUxLDcgKzE2MSwxMiBAQAogCQlsaW5rX2luZm8gPSBjdm14X2hlbHBlcl9saW5rX2F1dG9jb25mKHByaXYtPnBvcnQpOwogCQlwcml2LT5saW5rX2luZm8gPSBsaW5rX2luZm8udTY0OwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnbG9iYWxfcmVnaXN0ZXJfbG9jaywgZmxhZ3MpOworCisJaWYgKHVzZV9nbG9iYWxfcmVnaXN0ZXJfbG9jaykKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwllbHNlIHsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5waHlkZXYtPmJ1cy0+bWRpb19sb2NrKTsKKwl9CiAKIAlpZiAocHJpdi0+cGh5ZGV2ID09IE5VTEwpIHsKIAkJLyogVGVsbCBjb3JlLiAqLwpAQCAtMjEzLDggKzIyOCwxMSBAQAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPQogCQkJCSAgICBjdm1fb2N0X2RldmljZVtjdm14X2hlbHBlcl9nZXRfaXBkX3BvcnQKIAkJCQkJCSAgIChpbnRlcmZhY2UsIGluZGV4KV07Ci0JCQkJaWYgKGRldikKLQkJCQkJY3ZtX29jdF9yZ21paV9wb2xsKGRldik7CisJCQkJc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwkJCQlpZiAoZGV2ICYmICFhdG9taWNfcmVhZCgmY3ZtX29jdF9wb2xsX3F1ZXVlX3N0b3BwaW5nKSkKKwkJCQkJcXVldWVfd29yayhjdm1fb2N0X3BvbGxfcXVldWUsICZwcml2LT5wb3J0X3dvcmspOworCiAJCQkJZ214X3J4X2ludF9yZWcudTY0ID0gMDsKIAkJCQlnbXhfcnhfaW50X3JlZy5zLnBoeV9kdXB4ID0gMTsKIAkJCQlnbXhfcnhfaW50X3JlZy5zLnBoeV9saW5rID0gMTsKQEAgLTI1Miw4ICsyNzAsMTEgQEAKIAkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0KIAkJCQkgICAgY3ZtX29jdF9kZXZpY2VbY3ZteF9oZWxwZXJfZ2V0X2lwZF9wb3J0CiAJCQkJCQkgICAoaW50ZXJmYWNlLCBpbmRleCldOwotCQkJCWlmIChkZXYpCi0JCQkJCWN2bV9vY3RfcmdtaWlfcG9sbChkZXYpOworCQkJCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJCQkJaWYgKGRldiAmJiAhYXRvbWljX3JlYWQoJmN2bV9vY3RfcG9sbF9xdWV1ZV9zdG9wcGluZykpCisJCQkJCXF1ZXVlX3dvcmsoY3ZtX29jdF9wb2xsX3F1ZXVlLCAmcHJpdi0+cG9ydF93b3JrKTsKKwogCQkJCWdteF9yeF9pbnRfcmVnLnU2NCA9IDA7CiAJCQkJZ214X3J4X2ludF9yZWcucy5waHlfZHVweCA9IDE7CiAJCQkJZ214X3J4X2ludF9yZWcucy5waHlfbGluayA9IDE7CkBAIC0zMDIsNiArMzIzLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGN2bV9vY3RfcmdtaWlfaW1tZWRpYXRlX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG9jdGVvbl9ldGhlcm5ldCwgcG9ydF93b3JrKTsKKwljdm1fb2N0X3JnbWlpX3BvbGwoY3ZtX29jdF9kZXZpY2VbcHJpdi0+cG9ydF0pOworfQorCiBpbnQgY3ZtX29jdF9yZ21paV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zMDksNyArMzM2LDcgQEAKIAogCWN2bV9vY3RfY29tbW9uX2luaXQoZGV2KTsKIAlkZXYtPm5ldGRldl9vcHMtPm5kb19zdG9wKGRldik7Ci0KKwlJTklUX1dPUksoJnByaXYtPnBvcnRfd29yaywgY3ZtX29jdF9yZ21paV9pbW1lZGlhdGVfcG9sbCk7CiAJLyoKIAkgKiBEdWUgdG8gR01YIGVycmF0YSBpbiBDTjNYWFggc2VyaWVzIGNoaXBzLCBpdCBpcyBuZWNlc3NhcnkKIAkgKiB0byB0YWtlIHRoZSBsaW5rIGRvd24gaW1tZWRpYXRlbHkgd2hlbiB0aGUgUEhZIGNoYW5nZXMKQEAgLTM5Nyw0ICs0MjQsNSBAQAogCW51bWJlcl9yZ21paV9wb3J0cy0tOwogCWlmIChudW1iZXJfcmdtaWlfcG9ydHMgPT0gMCkKIAkJZnJlZV9pcnEoT0NURU9OX0lSUV9STUwsICZudW1iZXJfcmdtaWlfcG9ydHMpOworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPnBvcnRfd29yayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmMKaW5kZXggMWIyMzdiNy4uY2IzOGY5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcnguYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvbnRhY3Q6IHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT0NURU9OIFNESwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENhdml1bSBOZXR3b3JrcworICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgQ2F2aXVtIE5ldHdvcmtzCiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKQEAgLTI3LDE2ICsyNywxNCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2lmZGVmIENPTkZJR19YRlJNCiAjaW5jbHVkZSA8bGludXgveGZybS5oPgpAQCAtNDgsOCArNDYsOSBAQAogI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CiAKICNpbmNsdWRlICJldGhlcm5ldC1kZWZpbmVzLmgiCi0jaW5jbHVkZSAib2N0ZW9uLWV0aGVybmV0LmgiCiAjaW5jbHVkZSAiZXRoZXJuZXQtbWVtLmgiCisjaW5jbHVkZSAiZXRoZXJuZXQtcnguaCIKKyNpbmNsdWRlICJvY3Rlb24tZXRoZXJuZXQuaCIKICNpbmNsdWRlICJldGhlcm5ldC11dGlsLmgiCiAKICNpbmNsdWRlICJjdm14LWhlbHBlci5oIgpAQCAtNjEsNjIgKzYwLDg4IEBACiAKICNpbmNsdWRlICJjdm14LWdteHgtZGVmcy5oIgogCi1zdHJ1Y3QgY3ZtX3Rhc2tsZXRfd3JhcHBlciB7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHQ7Ci19Oworc3RydWN0IGN2bV9uYXBpX3dyYXBwZXIgeworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCi0vKgotICogQWxpZ25pbmcgdGhlIHRhc2tsZXRfc3RydWN0IG9uIGNhY2hsaW5lIGJvdW5kcmllcyBzZWVtcyB0byBkZWNyZWFzZQotICogdGhyb3VnaHB1dCBldmVuIHRob3VnaCBpbiB0aGVvcnkgaXQgd291bGQgcmVkdWNlIGNvbnRhbnRpb24gb24gdGhlCi0gKiBjYWNoZSBsaW5lcyBjb250YWluaW5nIHRoZSBsb2Nrcy4KLSAqLworc3RhdGljIHN0cnVjdCBjdm1fbmFwaV93cmFwcGVyIGN2bV9vY3RfbmFwaVtOUl9DUFVTXSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAotc3RhdGljIHN0cnVjdCBjdm1fdGFza2xldF93cmFwcGVyIGN2bV9vY3RfdGFza2xldFtOUl9DUFVTXTsKK3N0cnVjdCBjdm1fb2N0X2NvcmVfc3RhdGUgeworCWludCBiYXNlbGluZV9jb3JlczsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBjb3JlcyB0aGF0IGNvdWxkIGJlIHByb2Nlc3NpbmcKKwkgKiBpbnB1dCBwYWNrdGVzLgorCSAqLworCWF0b21pY190IGF2YWlsYWJsZV9jb3JlczsKKwljcHVtYXNrX3QgY3B1X3N0YXRlOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCitzdGF0aWMgc3RydWN0IGN2bV9vY3RfY29yZV9zdGF0ZSBjb3JlX3N0YXRlIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCitzdGF0aWMgdm9pZCBjdm1fb2N0X2VuYWJsZV9uYXBpKHZvaWQgKl8pCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwluYXBpX3NjaGVkdWxlKCZjdm1fb2N0X25hcGlbY3B1XS5uYXBpKTsKK30KKworc3RhdGljIHZvaWQgY3ZtX29jdF9lbmFibGVfb25lX2NwdSh2b2lkKQoreworCWludCB2OworCWludCBjcHU7CisKKwkvKiBDaGVjayB0byBzZWUgaWYgbW9yZSBDUFVzIGFyZSBhdmFpbGFibGUgZm9yIHJlY2VpdmUgcHJvY2Vzc2luZy4uLiAqLworCXYgPSBhdG9taWNfc3ViX2lmX3Bvc2l0aXZlKDEsICZjb3JlX3N0YXRlLmF2YWlsYWJsZV9jb3Jlcyk7CisJaWYgKHYgPCAwKQorCQlyZXR1cm47CisKKwkvKiAuLi4gaWYgYSBDUFUgaXMgYXZhaWxhYmxlLCBUdXJuIG9uIE5BUEkgcG9sbGluZyBmb3IgdGhhdCBDUFUuICAqLworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWlmICghY3B1X3Rlc3RfYW5kX3NldChjcHUsIGNvcmVfc3RhdGUuY3B1X3N0YXRlKSkgeworCQkJdiA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGN2bV9vY3RfZW5hYmxlX25hcGksCisJCQkJCQkgICAgIE5VTEwsIDApOworCQkJaWYgKHYpCisJCQkJcGFuaWMoIkNhbid0IGVuYWJsZSBOQVBJLiIpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGN2bV9vY3Rfbm9fbW9yZV93b3JrKHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qCisJICogQ1BVIHplcm8gaXMgc3BlY2lhbC4gIEl0IGFsd2F5cyBoYXMgdGhlIGlycSBlbmFibGVkIHdoZW4KKwkgKiB3YWl0aW5nIGZvciBpbmNvbWluZyBwYWNrZXRzLgorCSAqLworCWlmIChjcHUgPT0gMCkgeworCQllbmFibGVfaXJxKE9DVEVPTl9JUlFfV09SS1EwICsgcG93X3JlY2VpdmVfZ3JvdXApOworCQlyZXR1cm47CisJfQorCisJY3B1X2NsZWFyKGNwdSwgY29yZV9zdGF0ZS5jcHVfc3RhdGUpOworCWF0b21pY19hZGQoMSwgJmNvcmVfc3RhdGUuYXZhaWxhYmxlX2NvcmVzKTsKK30KIAogLyoqCi0gKiBJbnRlcnJ1cHQgaGFuZGxlci4gVGhlIGludGVycnVwdCBvY2N1cnMgd2hlbmV2ZXIgdGhlIFBPVwotICogdHJhbnNpdGlvbnMgZnJvbSAwLT4xIHBhY2tldHMgaW4gb3VyIGdyb3VwLgorICogY3ZtX29jdF9kb19pbnRlcnJ1cHQgLSBpbnRlcnJ1cHQgaGFuZGxlci4KICAqCi0gKiBAY3BsOgotICogQGRldl9pZDoKLSAqIEByZWdzOgotICogUmV0dXJucworICogVGhlIGludGVycnVwdCBvY2N1cnMgd2hlbmV2ZXIgdGhlIFBPVyBoYXMgcGFja2V0cyBpbiBvdXIgZ3JvdXAuCisgKgogICovCi1pcnFyZXR1cm5fdCBjdm1fb2N0X2RvX2ludGVycnVwdChpbnQgY3BsLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgY3ZtX29jdF9kb19pbnRlcnJ1cHQoaW50IGNwbCwgdm9pZCAqZGV2X2lkKQogewotCS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgKi8KLQlpZiAoSU5URVJSVVBUX0xJTUlUKQotCQljdm14X3dyaXRlX2NzcihDVk1YX1BPV19XUV9JTlQsIDEgPDwgcG93X3JlY2VpdmVfZ3JvdXApOwotCWVsc2UKLQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5ULCAweDEwMDAxIDw8IHBvd19yZWNlaXZlX2dyb3VwKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZjdm1fb2N0X3Rhc2tsZXRbc21wX3Byb2Nlc3Nvcl9pZCgpXS50KTsKLQlwcmVlbXB0X2VuYWJsZSgpOworCS8qIERpc2FibGUgdGhlIElSUSBhbmQgc3RhcnQgbmFwaV9wb2xsLiAqLworCWRpc2FibGVfaXJxX25vc3luYyhPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwKTsKKwljdm1fb2N0X2VuYWJsZV9uYXBpKE5VTEwpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIC8qKgotICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUga2VybmVsIG5lZWRzIHRvIG1hbnVhbGx5IHBvbGwgdGhlCi0gKiBkZXZpY2UuIEZvciBPY3Rlb24sIHRoaXMgaXMgc2ltcGx5IGNhbGxpbmcgdGhlIGludGVycnVwdAotICogaGFuZGxlci4gV2UgYWN0dWFsbHkgcG9sbCBhbGwgdGhlIGRldmljZXMsIG5vdCBqdXN0IHRoZQotICogb25lIHN1cHBsaWVkLgotICoKLSAqIEBkZXY6ICAgIERldmljZSB0byBwb2xsLiBVbnVzZWQKLSAqLwotdm9pZCBjdm1fb2N0X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXByZWVtcHRfZGlzYWJsZSgpOwotCXRhc2tsZXRfc2NoZWR1bGUoJmN2bV9vY3RfdGFza2xldFtzbXBfcHJvY2Vzc29yX2lkKCldLnQpOwotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBUaGlzIGlzIGNhbGxlZCBvbiByZWNlaXZlIGVycm9ycywgYW5kIGRldGVybWluZXMgaWYgdGhlIHBhY2tldAotICogY2FuIGJlIGRyb3BwZWQgZWFybHktb24gaW4gY3ZtX29jdF90YXNrbGV0X3J4KCkuCi0gKgorICogY3ZtX29jdF9jaGVja19yY3ZfZXJyb3IgLSBwcm9jZXNzIHJlY2VpdmUgZXJyb3JzCiAgKiBAd29yazogV29yayBxdWV1ZSBlbnRyeSBwb2ludGluZyB0byB0aGUgcGFja2V0LgorICoKICAqIFJldHVybnMgTm9uLXplcm8gaWYgdGhlIHBhY2tldCBjYW4gYmUgZHJvcHBlZCwgemVybyBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGN2bV9vY3RfY2hlY2tfcmN2X2Vycm9yKGN2bXhfd3FlX3QgKndvcmspCkBAIC0xOTksMTkgKzIyNCwyMCBAQAogfQogCiAvKioKLSAqIFRhc2tsZXQgZnVuY3Rpb24gdGhhdCBpcyBzY2hlZHVsZWQgb24gYSBjb3JlIHdoZW4gYW4gaW50ZXJydXB0IG9jY3Vycy4KKyAqIGN2bV9vY3RfbmFwaV9wb2xsIC0gdGhlIE5BUEkgcG9sbCBmdW5jdGlvbi4KKyAqIEBuYXBpOiBUaGUgTkFQSSBpbnN0YW5jZSwgb3IgbnVsbCBpZiBjYWxsZWQgZnJvbSBjdm1fb2N0X3BvbGxfY29udHJvbGxlcgorICogQGJ1ZGdldDogTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0byByZWNlaXZlLgogICoKLSAqIEB1bnVzZWQ6CisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFja2V0cyBwcm9jZXNzZWQuCiAgKi8KLXZvaWQgY3ZtX29jdF90YXNrbGV0X3J4KHVuc2lnbmVkIGxvbmcgdW51c2VkKQorc3RhdGljIGludCBjdm1fb2N0X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7Ci0JY29uc3QgaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0JdWludDY0X3Qgb2xkX2dyb3VwX21hc2s7Ci0JdWludDY0X3Qgb2xkX3NjcmF0Y2g7Ci0JaW50IHJ4X2NvdW50ID0gMDsKLQlpbnQgbnVtYmVyX3RvX2ZyZWU7Ci0JaW50IG51bV9mcmVlZDsKLQlpbnQgcGFja2V0X25vdF9jb3BpZWQ7CisJY29uc3QgaW50CWNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7CisJdWludDY0X3QJb2xkX2dyb3VwX21hc2s7CisJdWludDY0X3QJb2xkX3NjcmF0Y2g7CisJaW50CQlyeF9jb3VudCA9IDA7CisJaW50CQlkaWRfd29ya19yZXF1ZXN0ID0gMDsKKwlpbnQJCXBhY2tldF9ub3RfY29waWVkOwogCiAJLyogUHJlZmV0Y2ggY3ZtX29jdF9kZXZpY2Ugc2luY2Ugd2Uga25vdyB3ZSBuZWVkIGl0IHNvb24gKi8KIAlwcmVmZXRjaChjdm1fb2N0X2RldmljZSk7CkBAIC0yMjcsNTkgKzI1Myw2MyBAQAogCWN2bXhfd3JpdGVfY3NyKENWTVhfUE9XX1BQX0dSUF9NU0tYKGNvcmVpZCksCiAJCSAgICAgICAob2xkX2dyb3VwX21hc2sgJiB+MHhGRkZGdWxsKSB8IDEgPDwgcG93X3JlY2VpdmVfZ3JvdXApOwogCi0JaWYgKFVTRV9BU1lOQ19JT0JETUEpCisJaWYgKFVTRV9BU1lOQ19JT0JETUEpIHsKIAkJY3ZteF9wb3dfd29ya19yZXF1ZXN0X2FzeW5jKENWTVhfU0NSX1NDUkFUQ0gsIENWTVhfUE9XX05PX1dBSVQpOworCQlkaWRfd29ya19yZXF1ZXN0ID0gMTsKKwl9CiAKLQl3aGlsZSAoMSkgeworCXdoaWxlIChyeF9jb3VudCA8IGJ1ZGdldCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwkJc3RydWN0IHNrX2J1ZmYgKipwc2tiID0gTlVMTDsKIAkJaW50IHNrYl9pbl9odzsKIAkJY3ZteF93cWVfdCAqd29yazsKIAotCQlpZiAoVVNFX0FTWU5DX0lPQkRNQSkgeworCQlpZiAoVVNFX0FTWU5DX0lPQkRNQSAmJiBkaWRfd29ya19yZXF1ZXN0KQogCQkJd29yayA9IGN2bXhfcG93X3dvcmtfcmVzcG9uc2VfYXN5bmMoQ1ZNWF9TQ1JfU0NSQVRDSCk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKElOVEVSUlVQVF9MSU1JVCA9PSAwKQotCQkJICAgIHx8IGxpa2VseShyeF9jb3VudCA8IE1BWF9SWF9QQUNLRVRTKSkKLQkJCQl3b3JrID0KLQkJCQkgICAgY3ZteF9wb3dfd29ya19yZXF1ZXN0X3N5bmMKLQkJCQkgICAgKENWTVhfUE9XX05PX1dBSVQpOwotCQkJZWxzZQotCQkJCXdvcmsgPSBOVUxMOwotCQl9CisJCWVsc2UKKwkJCXdvcmsgPSBjdm14X3Bvd193b3JrX3JlcXVlc3Rfc3luYyhDVk1YX1BPV19OT19XQUlUKTsKKwogCQlwcmVmZXRjaCh3b3JrKTsKLQkJaWYgKHdvcmsgPT0gTlVMTCkKKwkJZGlkX3dvcmtfcmVxdWVzdCA9IDA7CisJCWlmICh3b3JrID09IE5VTEwpIHsKKwkJCXVuaW9uIGN2bXhfcG93X3dxX2ludCB3cV9pbnQ7CisJCQl3cV9pbnQudTY0ID0gMDsKKwkJCXdxX2ludC5zLmlxX2RpcyA9IDEgPDwgcG93X3JlY2VpdmVfZ3JvdXA7CisJCQl3cV9pbnQucy53cV9pbnQgPSAxIDw8IHBvd19yZWNlaXZlX2dyb3VwOworCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5ULCB3cV9pbnQudTY0KTsKIAkJCWJyZWFrOworCQl9CisJCXBza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiopKGN2bV9vY3RfZ2V0X2J1ZmZlcl9wdHIod29yay0+cGFja2V0X3B0cikgLSBzaXplb2Yodm9pZCAqKSk7CisJCXByZWZldGNoKHBza2IpOwogCi0JCS8qCi0JCSAqIExpbWl0IGVhY2ggY29yZSB0byBwcm9jZXNzaW5nIE1BWF9SWF9QQUNLRVRTCi0JCSAqIHBhY2tldHMgd2l0aG91dCBhIGJyZWFrLiAgVGhpcyB3YXkgdGhlIFJYIGNhbid0Ci0JCSAqIHN0YXJ2ZSB0aGUgVFggdGFzay4KLQkJICovCi0JCWlmIChVU0VfQVNZTkNfSU9CRE1BKSB7CisJCWlmIChVU0VfQVNZTkNfSU9CRE1BICYmIHJ4X2NvdW50IDwgKGJ1ZGdldCAtIDEpKSB7CisJCQljdm14X3Bvd193b3JrX3JlcXVlc3RfYXN5bmNfbm9jaGVjayhDVk1YX1NDUl9TQ1JBVENILCBDVk1YX1BPV19OT19XQUlUKTsKKwkJCWRpZF93b3JrX3JlcXVlc3QgPSAxOworCQl9CiAKLQkJCWlmICgoSU5URVJSVVBUX0xJTUlUID09IDApCi0JCQkgICAgfHwgbGlrZWx5KHJ4X2NvdW50IDwgTUFYX1JYX1BBQ0tFVFMpKQotCQkJCWN2bXhfcG93X3dvcmtfcmVxdWVzdF9hc3luY19ub2NoZWNrCi0JCQkJICAgIChDVk1YX1NDUl9TQ1JBVENILCBDVk1YX1BPV19OT19XQUlUKTsKLQkJCWVsc2UgewotCQkJCWN2bXhfc2NyYXRjaF93cml0ZTY0KENWTVhfU0NSX1NDUkFUQ0gsCi0JCQkJCQkgICAgIDB4ODAwMDAwMDAwMDAwMDAwMHVsbCk7Ci0JCQkJY3ZteF9wb3dfdGFnX3N3X251bGxfbm9jaGVjaygpOwotCQkJfQorCQlpZiAocnhfY291bnQgPT0gMCkgeworCQkJLyoKKwkJCSAqIEZpcnN0IHRpbWUgdGhyb3VnaCwgc2VlIGlmIHRoZXJlIGlzIGVub3VnaAorCQkJICogd29yayB3YWl0aW5nIHRvIG1lcml0IHdha2luZyBhbm90aGVyCisJCQkgKiBDUFUuCisJCQkgKi8KKwkJCXVuaW9uIGN2bXhfcG93X3dxX2ludF9jbnR4IGNvdW50czsKKwkJCWludCBiYWNrbG9nOworCQkJaW50IGNvcmVzX2luX3VzZSA9IGNvcmVfc3RhdGUuYmFzZWxpbmVfY29yZXMgLSBhdG9taWNfcmVhZCgmY29yZV9zdGF0ZS5hdmFpbGFibGVfY29yZXMpOworCQkJY291bnRzLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9QT1dfV1FfSU5UX0NOVFgocG93X3JlY2VpdmVfZ3JvdXApKTsKKwkJCWJhY2tsb2cgPSBjb3VudHMucy5pcV9jbnQgKyBjb3VudHMucy5kc19jbnQ7CisJCQlpZiAoYmFja2xvZyA+IGJ1ZGdldCAqIGNvcmVzX2luX3VzZSAmJiBuYXBpICE9IE5VTEwpCisJCQkJY3ZtX29jdF9lbmFibGVfb25lX2NwdSgpOwogCQl9CiAKIAkJc2tiX2luX2h3ID0gVVNFX1NLQlVGRlNfSU5fSFcgJiYgd29yay0+d29yZDIucy5idWZzID09IDE7CiAJCWlmIChsaWtlbHkoc2tiX2luX2h3KSkgewotCQkJc2tiID0KLQkJCSAgICAqKHN0cnVjdCBza19idWZmCi0JCQkgICAgICAqKikoY3ZtX29jdF9nZXRfYnVmZmVyX3B0cih3b3JrLT5wYWNrZXRfcHRyKSAtCi0JCQkJICBzaXplb2Yodm9pZCAqKSk7CisJCQlza2IgPSAqcHNrYjsKIAkJCXByZWZldGNoKCZza2ItPmhlYWQpOwogCQkJcHJlZmV0Y2goJnNrYi0+bGVuKTsKIAkJfQogCQlwcmVmZXRjaChjdm1fb2N0X2RldmljZVt3b3JrLT5pcHBydF0pOwogCi0JCXJ4X2NvdW50Kys7CiAJCS8qIEltbWVkaWF0ZWx5IHRocm93IGF3YXkgYWxsIHBhY2tldHMgd2l0aCByZWNlaXZlIGVycm9ycyAqLwogCQlpZiAodW5saWtlbHkod29yay0+d29yZDIuc25vaXAucmN2X2Vycm9yKSkgewogCQkJaWYgKGN2bV9vY3RfY2hlY2tfcmN2X2Vycm9yKHdvcmspKQpAQCAtMjkyLDM5ICszMjIsMjcgQEAKIAkJICogYnVmZmVyLgogCQkgKi8KIAkJaWYgKGxpa2VseShza2JfaW5faHcpKSB7Ci0JCQkvKgotCQkJICogVGhpcyBjYWxjdWxhdGlvbiB3YXMgY2hhbmdlZCBpbiBjYXNlIHRoZQotCQkJICogc2tiIGhlYWRlciBpcyB1c2luZyBhIGRpZmZlcmVudCBhZGRyZXNzCi0JCQkgKiBhbGlhc2luZyB0eXBlIHRoYW4gdGhlIGJ1ZmZlci4gSXQgZG9lc24ndAotCQkJICogbWFrZSBhbnkgZGlmZmVybmVjZSBub3csIGJ1dCB0aGUgbmV3IG9uZSBpcwotCQkJICogbW9yZSBjb3JyZWN0LgotCQkJICovCi0JCQlza2ItPmRhdGEgPQotCQkJICAgIHNrYi0+aGVhZCArIHdvcmstPnBhY2tldF9wdHIucy5hZGRyIC0KLQkJCSAgICBjdm14X3B0cl90b19waHlzKHNrYi0+aGVhZCk7CisJCQlza2ItPmRhdGEgPSBza2ItPmhlYWQgKyB3b3JrLT5wYWNrZXRfcHRyLnMuYWRkciAtIGN2bXhfcHRyX3RvX3BoeXMoc2tiLT5oZWFkKTsKIAkJCXByZWZldGNoKHNrYi0+ZGF0YSk7CiAJCQlza2ItPmxlbiA9IHdvcmstPmxlbjsKIAkJCXNrYl9zZXRfdGFpbF9wb2ludGVyKHNrYiwgc2tiLT5sZW4pOwogCQkJcGFja2V0X25vdF9jb3BpZWQgPSAxOwogCQl9IGVsc2UgewotCiAJCQkvKgogCQkJICogV2UgaGF2ZSB0byBjb3B5IHRoZSBwYWNrZXQuIEZpcnN0IGFsbG9jYXRlCiAJCQkgKiBhbiBza2J1ZmYgZm9yIGl0LgogCQkJICovCiAJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHdvcmstPmxlbik7CiAJCQlpZiAoIXNrYikgewotCQkJCURFQlVHUFJJTlQoIlBvcnQgJWQgZmFpbGVkIHRvIGFsbG9jYXRlICIKLQkJCQkJICAgInNrYnVmZiwgcGFja2V0IGRyb3BwZWRcbiIsCi0JCQkJICAgICB3b3JrLT5pcHBydCk7CisJCQkJREVCVUdQUklOVCgiUG9ydCAlZCBmYWlsZWQgdG8gYWxsb2NhdGUgc2tidWZmLCBwYWNrZXQgZHJvcHBlZFxuIiwKKwkJCQkJICAgd29yay0+aXBwcnQpOwogCQkJCWN2bV9vY3RfZnJlZV93b3JrKHdvcmspOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCiAJCQkvKgogCQkJICogQ2hlY2sgaWYgd2UndmUgcmVjZWl2ZWQgYSBwYWNrZXQgdGhhdCB3YXMKLQkJCSAqIGVudGlyZWx5IHN0b3JlZCBpbiB0aGUgd29yayBlbnRyeS4gVGhpcyBpcwotCQkJICogdW50ZXN0ZWQuCisJCQkgKiBlbnRpcmVseSBzdG9yZWQgaW4gdGhlIHdvcmsgZW50cnkuCiAJCQkgKi8KIAkJCWlmICh1bmxpa2VseSh3b3JrLT53b3JkMi5zLmJ1ZnMgPT0gMCkpIHsKIAkJCQl1aW50OF90ICpwdHIgPSB3b3JrLT5wYWNrZXRfZGF0YTsKQEAgLTM0MywxNSArMzYxLDEzIEBACiAJCQkJLyogTm8gcGFja2V0IGJ1ZmZlcnMgdG8gZnJlZSAqLwogCQkJfSBlbHNlIHsKIAkJCQlpbnQgc2VnbWVudHMgPSB3b3JrLT53b3JkMi5zLmJ1ZnM7Ci0JCQkJdW5pb24gY3ZteF9idWZfcHRyIHNlZ21lbnRfcHRyID0KLQkJCQkJd29yay0+cGFja2V0X3B0cjsKKwkJCQl1bmlvbiBjdm14X2J1Zl9wdHIgc2VnbWVudF9wdHIgPSB3b3JrLT5wYWNrZXRfcHRyOwogCQkJCWludCBsZW4gPSB3b3JrLT5sZW47CiAKIAkJCQl3aGlsZSAoc2VnbWVudHMtLSkgewogCQkJCQl1bmlvbiBjdm14X2J1Zl9wdHIgbmV4dF9wdHIgPQotCQkJCQkgICAgKih1bmlvbiBjdm14X2J1Zl9wdHIgKikKLQkJCQkJICAgIGN2bXhfcGh5c190b19wdHIoc2VnbWVudF9wdHIucy4KLQkJCQkJCQkgICAgIGFkZHIgLSA4KTsKKwkJCQkJICAgICoodW5pb24gY3ZteF9idWZfcHRyICopY3ZteF9waHlzX3RvX3B0cihzZWdtZW50X3B0ci5zLmFkZHIgLSA4KTsKKwogCQkJLyoKIAkJCSAqIE9jdGVvbiBFcnJhdGEgUEtJLTEwMDogVGhlIHNlZ21lbnQgc2l6ZSBpcwogCQkJICogd3JvbmcuIFVudGlsIGl0IGlzIGZpeGVkLCBjYWxjdWxhdGUgdGhlCkBAIC0zNjEsMjIgKzM3NywxOCBAQAogCQkJICogb25lOiBpbnQgc2VnbWVudF9zaXplID0KIAkJCSAqIHNlZ21lbnRfcHRyLnMuc2l6ZTsKIAkJCSAqLwotCQkJCQlpbnQgc2VnbWVudF9zaXplID0KLQkJCQkJICAgIENWTVhfRlBBX1BBQ0tFVF9QT09MX1NJWkUgLQotCQkJCQkgICAgKHNlZ21lbnRfcHRyLnMuYWRkciAtCi0JCQkJCSAgICAgKCgoc2VnbWVudF9wdHIucy5hZGRyID4+IDcpIC0KLQkJCQkJICAgICAgIHNlZ21lbnRfcHRyLnMuYmFjaykgPDwgNykpOwotCQkJCQkvKiBEb24ndCBjb3B5IG1vcmUgdGhhbiB3aGF0IGlzIGxlZnQKLQkJCQkJICAgaW4gdGhlIHBhY2tldCAqLworCQkJCQlpbnQgc2VnbWVudF9zaXplID0gQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRSAtCisJCQkJCQkoc2VnbWVudF9wdHIucy5hZGRyIC0gKCgoc2VnbWVudF9wdHIucy5hZGRyID4+IDcpIC0gc2VnbWVudF9wdHIucy5iYWNrKSA8PCA3KSk7CisJCQkJCS8qCisJCQkJCSAqIERvbid0IGNvcHkgbW9yZSB0aGFuIHdoYXQKKwkJCQkJICogaXMgbGVmdCBpbiB0aGUgcGFja2V0LgorCQkJCQkgKi8KIAkJCQkJaWYgKHNlZ21lbnRfc2l6ZSA+IGxlbikKIAkJCQkJCXNlZ21lbnRfc2l6ZSA9IGxlbjsKIAkJCQkJLyogQ29weSB0aGUgZGF0YSBpbnRvIHRoZSBwYWNrZXQgKi8KIAkJCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBzZWdtZW50X3NpemUpLAotCQkJCQkgICAgICAgY3ZteF9waHlzX3RvX3B0cihzZWdtZW50X3B0ci5zLgotCQkJCQkJCQlhZGRyKSwKKwkJCQkJICAgICAgIGN2bXhfcGh5c190b19wdHIoc2VnbWVudF9wdHIucy5hZGRyKSwKIAkJCQkJICAgICAgIHNlZ21lbnRfc2l6ZSk7Ci0JCQkJCS8qIFJlZHVjZSB0aGUgYW1vdW50IG9mIGJ5dGVzIGxlZnQKLQkJCQkJICAgdG8gY29weSAqLwogCQkJCQlsZW4gLT0gc2VnbWVudF9zaXplOwogCQkJCQlzZWdtZW50X3B0ciA9IG5leHRfcHRyOwogCQkJCX0KQEAgLTM4OSwxNiArNDAxLDE1IEBACiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY3ZtX29jdF9kZXZpY2Vbd29yay0+aXBwcnRdOwogCQkJc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQkJCS8qIE9ubHkgYWNjZXB0IHBhY2tldHMgZm9yIGRldmljZXMKLQkJCSAgIHRoYXQgYXJlIGN1cnJlbnRseSB1cCAqLworCQkJLyoKKwkJCSAqIE9ubHkgYWNjZXB0IHBhY2tldHMgZm9yIGRldmljZXMgdGhhdCBhcmUKKwkJCSAqIGN1cnJlbnRseSB1cC4KKwkJCSAqLwogCQkJaWYgKGxpa2VseShkZXYtPmZsYWdzICYgSUZGX1VQKSkgewogCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQkJc2tiLT5kZXYgPSBkZXY7CiAKLQkJCQlpZiAodW5saWtlbHkKLQkJCQkgICAgKHdvcmstPndvcmQyLnMubm90X0lQCi0JCQkJICAgICB8fCB3b3JrLT53b3JkMi5zLklQX2V4YwotCQkJCSAgICAgfHwgd29yay0+d29yZDIucy5MNF9lcnJvcikpCisJCQkJaWYgKHVubGlrZWx5KHdvcmstPndvcmQyLnMubm90X0lQIHx8IHdvcmstPndvcmQyLnMuSVBfZXhjIHx8IHdvcmstPndvcmQyLnMuTDRfZXJyb3IpKQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAJCQkJZWxzZQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwpAQCAtNDE0LDE1ICs0MjUsMTMgQEAKICNlbmRpZgogCQkJCX0KIAkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQkJCXJ4X2NvdW50Kys7CiAJCQl9IGVsc2UgeworCQkJCS8qIERyb3AgYW55IHBhY2tldCByZWNlaXZlZCBmb3IgYSBkZXZpY2UgdGhhdCBpc24ndCB1cCAqLwogCQkJCS8qCi0JCQkJICogRHJvcCBhbnkgcGFja2V0IHJlY2VpdmVkIGZvciBhCi0JCQkJICogZGV2aWNlIHRoYXQgaXNuJ3QgdXAuCi0JCQkJICovCi0JCQkJLyoKLQkJCQkgICBERUJVR1BSSU5UKCIlczogRGV2aWNlIG5vdCB1cCwgcGFja2V0IGRyb3BwZWRcbiIsCi0JCQkJICAgZGV2LT5uYW1lKTsKLQkJCQkgKi8KKwkJCQlERUJVR1BSSU5UKCIlczogRGV2aWNlIG5vdCB1cCwgcGFja2V0IGRyb3BwZWRcbiIsCisJCQkJCSAgIGRldi0+bmFtZSk7CisJCQkJKi8KICNpZmRlZiBDT05GSUdfNjRCSVQKIAkJCQlhdG9taWM2NF9hZGQoMSwgKGF0b21pYzY0X3QgKikmcHJpdi0+c3RhdHMucnhfZHJvcHBlZCk7CiAjZWxzZQpAQCAtNDM1LDkgKzQ0NCw4IEBACiAJCQkgKiBEcm9wIGFueSBwYWNrZXQgcmVjZWl2ZWQgZm9yIGEgZGV2aWNlIHRoYXQKIAkJCSAqIGRvZXNuJ3QgZXhpc3QuCiAJCQkgKi8KLQkJCURFQlVHUFJJTlQoIlBvcnQgJWQgbm90IGNvbnRyb2xsZWQgYnkgTGludXgsIHBhY2tldCAiCi0JCQkJICAgImRyb3BwZWRcbiIsCi0JCQkgICAgIHdvcmstPmlwcHJ0KTsKKwkJCURFQlVHUFJJTlQoIlBvcnQgJWQgbm90IGNvbnRyb2xsZWQgYnkgTGludXgsIHBhY2tldCBkcm9wcGVkXG4iLAorCQkJCSAgIHdvcmstPmlwcHJ0KTsKIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJCX0KIAkJLyoKQEAgLTQ1OSw0NyArNDY3LDkzIEBACiAJCQljdm1fb2N0X2ZyZWVfd29yayh3b3JrKTsKIAkJfQogCX0KLQogCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIFBPVyBncm91cCBtYXNrICovCiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfUFBfR1JQX01TS1goY29yZWlkKSwgb2xkX2dyb3VwX21hc2spOwogCWlmIChVU0VfQVNZTkNfSU9CRE1BKSB7CiAJCS8qIFJlc3RvcmUgdGhlIHNjcmF0Y2ggYXJlYSAqLwogCQljdm14X3NjcmF0Y2hfd3JpdGU2NChDVk1YX1NDUl9TQ1JBVENILCBvbGRfc2NyYXRjaCk7CiAJfQorCWN2bV9vY3RfcnhfcmVmaWxsX3Bvb2woMCk7CiAKLQlpZiAoVVNFX1NLQlVGRlNfSU5fSFcpIHsKLQkJLyogUmVmaWxsIHRoZSBwYWNrZXQgYnVmZmVyIHBvb2wgKi8KLQkJbnVtYmVyX3RvX2ZyZWUgPQotCQkgICAgY3ZteF9mYXVfZmV0Y2hfYW5kX2FkZDMyKEZBVV9OVU1fUEFDS0VUX0JVRkZFUlNfVE9fRlJFRSwgMCk7Ci0KLQkJaWYgKG51bWJlcl90b19mcmVlID4gMCkgewotCQkJY3ZteF9mYXVfYXRvbWljX2FkZDMyKEZBVV9OVU1fUEFDS0VUX0JVRkZFUlNfVE9fRlJFRSwKLQkJCQkJICAgICAgLW51bWJlcl90b19mcmVlKTsKLQkJCW51bV9mcmVlZCA9Ci0JCQkgICAgY3ZtX29jdF9tZW1fZmlsbF9mcGEoQ1ZNWF9GUEFfUEFDS0VUX1BPT0wsCi0JCQkJCQkgQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRSwKLQkJCQkJCSBudW1iZXJfdG9fZnJlZSk7Ci0JCQlpZiAobnVtX2ZyZWVkICE9IG51bWJlcl90b19mcmVlKSB7Ci0JCQkJY3ZteF9mYXVfYXRvbWljX2FkZDMyCi0JCQkJICAgIChGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsCi0JCQkJICAgICBudW1iZXJfdG9fZnJlZSAtIG51bV9mcmVlZCk7Ci0JCQl9Ci0JCX0KKwlpZiAocnhfY291bnQgPCBidWRnZXQgJiYgbmFwaSAhPSBOVUxMKSB7CisJCS8qIE5vIG1vcmUgd29yayAqLworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQljdm1fb2N0X25vX21vcmVfd29yaygpOwogCX0KKwlyZXR1cm4gcnhfY291bnQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorLyoqCisgKiBjdm1fb2N0X3BvbGxfY29udHJvbGxlciAtIHBvbGwgZm9yIHJlY2VpdmUgcGFja2V0cworICogZGV2aWNlLgorICoKKyAqIEBkZXY6ICAgIERldmljZSB0byBwb2xsLiBVbnVzZWQKKyAqLwordm9pZCBjdm1fb2N0X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWN2bV9vY3RfbmFwaV9wb2xsKE5VTEwsIDE2KTsKK30KKyNlbmRpZgorCiB2b2lkIGN2bV9vY3RfcnhfaW5pdGlhbGl6ZSh2b2lkKQogewogCWludCBpOwotCS8qIEluaXRpYWxpemUgYWxsIG9mIHRoZSB0YXNrbGV0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspCi0JCXRhc2tsZXRfaW5pdCgmY3ZtX29jdF90YXNrbGV0W2ldLnQsIGN2bV9vY3RfdGFza2xldF9yeCwgMCk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldl9mb3JfbmFwaSA9IE5VTEw7CisJdW5pb24gY3ZteF9wb3dfd3FfaW50X3RocnggaW50X3RocjsKKwl1bmlvbiBjdm14X3Bvd193cV9pbnRfcGMgaW50X3BjOworCisJZm9yIChpID0gMDsgaSA8IFRPVEFMX05VTUJFUl9PRl9QT1JUUzsgaSsrKSB7CisJCWlmIChjdm1fb2N0X2RldmljZVtpXSkgeworCQkJZGV2X2Zvcl9uYXBpID0gY3ZtX29jdF9kZXZpY2VbaV07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChOVUxMID09IGRldl9mb3JfbmFwaSkKKwkJcGFuaWMoIk5vIG5ldF9kZXZpY2VzIHdlcmUgYWxsb2NhdGVkLiIpOworCisJaWYgKG1heF9yeF9jcHVzID4gMSAgJiYgbWF4X3J4X2NwdXMgPCBudW1fb25saW5lX2NwdXMoKSkKKwkJYXRvbWljX3NldCgmY29yZV9zdGF0ZS5hdmFpbGFibGVfY29yZXMsIG1heF9yeF9jcHVzKTsKKwllbHNlCisJCWF0b21pY19zZXQoJmNvcmVfc3RhdGUuYXZhaWxhYmxlX2NvcmVzLCBudW1fb25saW5lX2NwdXMoKSk7CisJY29yZV9zdGF0ZS5iYXNlbGluZV9jb3JlcyA9IGF0b21pY19yZWFkKCZjb3JlX3N0YXRlLmF2YWlsYWJsZV9jb3Jlcyk7CisKKwljb3JlX3N0YXRlLmNwdV9zdGF0ZSA9IENQVV9NQVNLX05PTkU7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJbmV0aWZfbmFwaV9hZGQoZGV2X2Zvcl9uYXBpLCAmY3ZtX29jdF9uYXBpW2ldLm5hcGksCisJCQkgICAgICAgY3ZtX29jdF9uYXBpX3BvbGwsIHJ4X25hcGlfd2VpZ2h0KTsKKwkJbmFwaV9lbmFibGUoJmN2bV9vY3RfbmFwaVtpXS5uYXBpKTsKKwl9CisJLyogUmVnaXN0ZXIgYW4gSVJRIGhhbmRlciBmb3IgdG8gcmVjZWl2ZSBQT1cgaW50ZXJydXB0cyAqLworCWkgPSByZXF1ZXN0X2lycShPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwLAorCQkJY3ZtX29jdF9kb19pbnRlcnJ1cHQsIDAsICJFdGhlcm5ldCIsIGN2bV9vY3RfZGV2aWNlKTsKKworCWlmIChpKQorCQlwYW5pYygiQ291bGQgbm90IGFjcXVpcmUgRXRoZXJuZXQgSVJRICVkXG4iLAorCQkgICAgICBPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwKTsKKworCWRpc2FibGVfaXJxX25vc3luYyhPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwKTsKKworCWludF90aHIudTY0ID0gMDsKKwlpbnRfdGhyLnMudGNfZW4gPSAxOworCWludF90aHIucy50Y190aHIgPSAxOworCS8qIEVuYWJsZSBQT1cgaW50ZXJydXB0IHdoZW4gb3VyIHBvcnQgaGFzIGF0IGxlYXN0IG9uZSBwYWNrZXQgKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX1BPV19XUV9JTlRfVEhSWChwb3dfcmVjZWl2ZV9ncm91cCksIGludF90aHIudTY0KTsKKworCWludF9wYy51NjQgPSAwOworCWludF9wYy5zLnBjX3RociA9IDU7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5UX1BDLCBpbnRfcGMudTY0KTsKKworCisJLyogU2NoZWR1bGQgTkFQSSBub3cuICBUaGlzIHdpbGwgaW5kaXJlY3RseSBlbmFibGUgaW50ZXJydXB0cy4gKi8KKwljdm1fb2N0X2VuYWJsZV9vbmVfY3B1KCk7CiB9CiAKIHZvaWQgY3ZtX29jdF9yeF9zaHV0ZG93bih2b2lkKQogewogCWludCBpOwotCS8qIFNodXRkb3duIGFsbCBvZiB0aGUgdGFza2xldHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQotCQl0YXNrbGV0X2tpbGwoJmN2bV9vY3RfdGFza2xldFtpXS50KTsKKwkvKiBTaHV0ZG93biBhbGwgb2YgdGhlIE5BUElzICovCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCW5ldGlmX25hcGlfZGVsKCZjdm1fb2N0X25hcGlbaV0ubmFwaSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmgKaW5kZXggYTliNzJiOC4uYTA3NDNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yeC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcnguaApAQCAtMjQsMTAgKzI0LDI5IEBACiAgKiBUaGlzIGZpbGUgbWF5IGFsc28gYmUgYXZhaWxhYmxlIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgZnJvbSBDYXZpdW0uCiAgKiBDb250YWN0IENhdml1bSBOZXR3b3JrcyBmb3IgbW9yZSBpbmZvcm1hdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImN2bXgtZmF1LmgiCiAKLWlycXJldHVybl90IGN2bV9vY3RfZG9faW50ZXJydXB0KGludCBjcGwsIHZvaWQgKmRldl9pZCk7CiB2b2lkIGN2bV9vY3RfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotdm9pZCBjdm1fb2N0X3Rhc2tsZXRfcngodW5zaWduZWQgbG9uZyB1bnVzZWQpOwotCiB2b2lkIGN2bV9vY3RfcnhfaW5pdGlhbGl6ZSh2b2lkKTsKIHZvaWQgY3ZtX29jdF9yeF9zaHV0ZG93bih2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkIGN2bV9vY3RfcnhfcmVmaWxsX3Bvb2woaW50IGZpbGxfdGhyZXNob2xkKQoreworCWludCBudW1iZXJfdG9fZnJlZTsKKwlpbnQgbnVtX2ZyZWVkOworCS8qIFJlZmlsbCB0aGUgcGFja2V0IGJ1ZmZlciBwb29sICovCisJbnVtYmVyX3RvX2ZyZWUgPQorCQljdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIoRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFLCAwKTsKKworCWlmIChudW1iZXJfdG9fZnJlZSA+IGZpbGxfdGhyZXNob2xkKSB7CisJCWN2bXhfZmF1X2F0b21pY19hZGQzMihGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsCisJCQkJICAgICAgLW51bWJlcl90b19mcmVlKTsKKwkJbnVtX2ZyZWVkID0gY3ZtX29jdF9tZW1fZmlsbF9mcGEoQ1ZNWF9GUEFfUEFDS0VUX1BPT0wsCisJCQkJCQkgQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRSwKKwkJCQkJCSBudW1iZXJfdG9fZnJlZSk7CisJCWlmIChudW1fZnJlZWQgIT0gbnVtYmVyX3RvX2ZyZWUpIHsKKwkJCWN2bXhfZmF1X2F0b21pY19hZGQzMihGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsCisJCQkJCW51bWJlcl90b19mcmVlIC0gbnVtX2ZyZWVkKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc2dtaWkuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc2dtaWkuYwppbmRleCA2MDYxZDAxLi4yZDg1ODllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNnbWlpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zZ21paS5jCkBAIC0yNiw3ICsyNiw2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KIAogI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNwaS5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zcGkuYwppbmRleCAwMGRjMGY0Li5iNThiODk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNwaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc3BpLmMKQEAgLTI2LDcgKzI2LDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogCiAjaW5jbHVkZSA8YXNtL29jdGVvbi9vY3Rlb24uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdHguYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdHguYwppbmRleCA1MzUyOTQxLi5hZmMyYjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5jCkBAIC00LDcgKzQsNyBAQAogICogQ29udGFjdDogc3VwcG9ydEBjYXZpdW1uZXR3b3Jrcy5jb20KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPQ1RFT04gU0RLCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2F2aXVtIE5ldHdvcmtzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMCBDYXZpdW0gTmV0d29ya3MKICAqCiAgKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLCBhcwpAQCAtMzEsMTAgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KICNpZmRlZiBDT05GSUdfWEZSTQogI2luY2x1ZGUgPGxpbnV4L3hmcm0uaD4KQEAgLTUyLDExICs0OCwxNCBAQAogCiAjaW5jbHVkZSAiY3ZteC13cWUuaCIKICNpbmNsdWRlICJjdm14LWZhdS5oIgorI2luY2x1ZGUgImN2bXgtcGlwLmgiCiAjaW5jbHVkZSAiY3ZteC1wa28uaCIKICNpbmNsdWRlICJjdm14LWhlbHBlci5oIgogCiAjaW5jbHVkZSAiY3ZteC1nbXh4LWRlZnMuaCIKIAorI2RlZmluZSBDVk1fT0NUX1NLQl9DQihza2IpCSgodTY0ICopKChza2IpLT5jYikpCisKIC8qCiAgKiBZb3UgY2FuIGRlZmluZSBHRVRfU0tCVUZGX1FPUygpIHRvIG92ZXJyaWRlIGhvdyB0aGUgc2tidWZmIG91dHB1dAogICogZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGljaCBvdXRwdXQgcXVldWUgaXMgdXNlZC4gVGhlIGRlZmF1bHQKQEAgLTY4LDEyICs2Nyw4MSBAQAogI2RlZmluZSBHRVRfU0tCVUZGX1FPUyhza2IpIDAKICNlbmRpZgogCitzdGF0aWMgdm9pZCBjdm1fb2N0X3R4X2RvX2NsZWFudXAodW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIERFQ0xBUkVfVEFTS0xFVChjdm1fb2N0X3R4X2NsZWFudXBfdGFza2xldCwgY3ZtX29jdF90eF9kb19jbGVhbnVwLCAwKTsKKworLyogTWF4aW11bSBudW1iZXIgb2YgU0tCcyB0byB0cnkgdG8gZnJlZSBwZXIgeG1pdCBwYWNrZXQuICovCisjZGVmaW5lIE1BWF9TS0JfVE9fRlJFRSAoTUFYX09VVF9RVUVVRV9ERVBUSCAqIDIpCisKK3N0YXRpYyBpbmxpbmUgaW50MzJfdCBjdm1fb2N0X2FkanVzdF9za2JfdG9fZnJlZShpbnQzMl90IHNrYl90b19mcmVlLCBpbnQgZmF1KQoreworCWludDMyX3QgdW5kbzsKKwl1bmRvID0gc2tiX3RvX2ZyZWUgPiAwID8gTUFYX1NLQl9UT19GUkVFIDogc2tiX3RvX2ZyZWUgKyBNQVhfU0tCX1RPX0ZSRUU7CisJaWYgKHVuZG8gPiAwKQorCQljdm14X2ZhdV9hdG9taWNfYWRkMzIoZmF1LCAtdW5kbyk7CisJc2tiX3RvX2ZyZWUgPSAtc2tiX3RvX2ZyZWUgPiBNQVhfU0tCX1RPX0ZSRUUgPyBNQVhfU0tCX1RPX0ZSRUUgOiAtc2tiX3RvX2ZyZWU7CisJcmV0dXJuIHNrYl90b19mcmVlOworfQorCitzdGF0aWMgdm9pZCBjdm1fb2N0X2tpY2tfdHhfcG9sbF93YXRjaGRvZyh2b2lkKQoreworCXVuaW9uIGN2bXhfY2l1X3RpbXggY2l1X3RpbXg7CisJY2l1X3RpbXgudTY0ID0gMDsKKwljaXVfdGlteC5zLm9uZV9zaG90ID0gMTsKKwljaXVfdGlteC5zLmxlbiA9IGN2bV9vY3RfdHhfcG9sbF9pbnRlcnZhbDsKKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9USU1YKDEpLCBjaXVfdGlteC51NjQpOworfQorCit2b2lkIGN2bV9vY3RfZnJlZV90eF9za2JzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50MzJfdCBza2JfdG9fZnJlZTsKKwlpbnQgcW9zLCBxdWV1ZXNfcGVyX3BvcnQ7CisJaW50IHRvdGFsX2ZyZWVkID0gMDsKKwlpbnQgdG90YWxfcmVtYWluaW5nID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcXVldWVzX3Blcl9wb3J0ID0gY3ZteF9wa29fZ2V0X251bV9xdWV1ZXMocHJpdi0+cG9ydCk7CisJLyogRHJhaW4gYW55IHBlbmRpbmcgcGFja2V0cyBpbiB0aGUgZnJlZSBsaXN0ICovCisJZm9yIChxb3MgPSAwOyBxb3MgPCBxdWV1ZXNfcGVyX3BvcnQ7IHFvcysrKSB7CisJCWlmIChza2JfcXVldWVfbGVuKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlza2JfdG9fZnJlZSA9IGN2bXhfZmF1X2ZldGNoX2FuZF9hZGQzMihwcml2LT5mYXUrcW9zKjQsIE1BWF9TS0JfVE9fRlJFRSk7CisJCXNrYl90b19mcmVlID0gY3ZtX29jdF9hZGp1c3Rfc2tiX3RvX2ZyZWUoc2tiX3RvX2ZyZWUsIHByaXYtPmZhdStxb3MqNCk7CisKKworCQl0b3RhbF9mcmVlZCArPSBza2JfdG9fZnJlZTsKKwkJaWYgKHNrYl90b19mcmVlID4gMCkgeworCQkJc3RydWN0IHNrX2J1ZmYgKnRvX2ZyZWVfbGlzdCA9IE5VTEw7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOworCQkJd2hpbGUgKHNrYl90b19mcmVlID4gMCkgeworCQkJCXN0cnVjdCBza19idWZmICp0ID0gX19za2JfZGVxdWV1ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pOworCQkJCXQtPm5leHQgPSB0b19mcmVlX2xpc3Q7CisJCQkJdG9fZnJlZV9saXN0ID0gdDsKKwkJCQlza2JfdG9fZnJlZS0tOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOworCQkJLyogRG8gdGhlIGFjdHVhbCBmcmVlaW5nIG91dHNpZGUgb2YgdGhlIGxvY2suICovCisJCQl3aGlsZSAodG9fZnJlZV9saXN0KSB7CisJCQkJc3RydWN0IHNrX2J1ZmYgKnQgPSB0b19mcmVlX2xpc3Q7CisJCQkJdG9fZnJlZV9saXN0ID0gdG9fZnJlZV9saXN0LT5uZXh0OworCQkJCWRldl9rZnJlZV9za2JfYW55KHQpOworCQkJfQorCQl9CisJCXRvdGFsX3JlbWFpbmluZyArPSBza2JfcXVldWVfbGVuKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXSk7CisJfQorCWlmICh0b3RhbF9mcmVlZCA+PSAwICYmIG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKKwkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCWlmICh0b3RhbF9yZW1haW5pbmcpCisJCWN2bV9vY3Rfa2lja190eF9wb2xsX3dhdGNoZG9nKCk7Cit9CisKIC8qKgotICogUGFja2V0IHRyYW5zbWl0Ci0gKgorICogY3ZtX29jdF94bWl0IC0gdHJhbnNtaXQgYSBwYWNrZXQKICAqIEBza2I6ICAgIFBhY2tldCB0byBzZW5kCiAgKiBAZGV2OiAgICBEZXZpY2UgaW5mbyBzdHJ1Y3R1cmUKLSAqIFJldHVybnMgQWx3YXlzIHJldHVybnMgemVybworICoKKyAqIFJldHVybnMgQWx3YXlzIHJldHVybnMgTkVUREVWX1RYX09LCiAgKi8KIGludCBjdm1fb2N0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTgxLDEzICsxNDksMTUgQEAKIAl1bmlvbiBjdm14X2J1Zl9wdHIgaHdfYnVmZmVyOwogCXVpbnQ2NF90IG9sZF9zY3JhdGNoOwogCXVpbnQ2NF90IG9sZF9zY3JhdGNoMjsKLQlpbnQgZHJvcHBlZDsKIAlpbnQgcW9zOwotCWludCBxdWV1ZV9pdF91cDsKKwlpbnQgaTsKKwllbnVtIHtRVUVVRV9DT1JFLCBRVUVVRV9IVywgUVVFVUVfRFJPUH0gcXVldWVfdHlwZTsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqdG9fZnJlZV9saXN0OwogCWludDMyX3Qgc2tiX3RvX2ZyZWU7Ci0JaW50MzJfdCB1bmRvOwogCWludDMyX3QgYnVmZmVyc190b19mcmVlOworCXUzMiB0b3RhbF90b19jbGVhbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogI2lmIFJFVVNFX1NLQlVGRlNfV0lUSE9VVF9GUkVFCiAJdW5zaWduZWQgY2hhciAqZnBhX2hlYWQ7CiAjZW5kaWYKQEAgLTk4LDkgKzE2OCw2IEBACiAJICovCiAJcHJlZmV0Y2gocHJpdik7CiAKLQkvKiBTdGFydCBvZmYgYXNzdW1pbmcgbm8gZHJvcCAqLwotCWRyb3BwZWQgPSAwOwotCiAJLyoKIAkgKiBUaGUgY2hlY2sgb24gQ1ZNWF9QS09fUVVFVUVTX1BFUl9QT1JUXyogaXMgZGVzaWduZWQgdG8KIAkgKiBjb21wbGV0ZWx5IHJlbW92ZSAicW9zIiBpbiB0aGUgZXZlbnQgbmVpdGhlciBpbnRlcmZhY2UKQEAgLTEzNSw2ICsyMDIsMjggQEAKIAl9CiAKIAkvKgorCSAqIFdlIGhhdmUgc3BhY2UgZm9yIDYgc2VnbWVudCBwb2ludGVycywgSWYgdGhlcmUgd2lsbCBiZSBtb3JlCisJICogdGhhbiB0aGF0LCB3ZSBtdXN0IGxpbmVhcml6ZS4KKwkgKi8KKwlpZiAodW5saWtlbHkoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA+IDUpKSB7CisJCWlmICh1bmxpa2VseShfX3NrYl9saW5lYXJpemUoc2tiKSkpIHsKKwkJCXF1ZXVlX3R5cGUgPSBRVUVVRV9EUk9QOworCQkJaWYgKFVTRV9BU1lOQ19JT0JETUEpIHsKKwkJCQkvKiBHZXQgdGhlIG51bWJlciBvZiBza2J1ZmZzIGluIHVzZSBieSB0aGUgaGFyZHdhcmUgKi8KKwkJCQlDVk1YX1NZTkNJT0JETUE7CisJCQkJc2tiX3RvX2ZyZWUgPSBjdm14X3NjcmF0Y2hfcmVhZDY0KENWTVhfU0NSX1NDUkFUQ0gpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBHZXQgdGhlIG51bWJlciBvZiBza2J1ZmZzIGluIHVzZSBieSB0aGUgaGFyZHdhcmUgKi8KKwkJCQlza2JfdG9fZnJlZSA9IGN2bXhfZmF1X2ZldGNoX2FuZF9hZGQzMihwcml2LT5mYXUgKyBxb3MgKiA0LAorCQkJCQkJCQkgICAgICAgTUFYX1NLQl9UT19GUkVFKTsKKwkJCX0KKwkJCXNrYl90b19mcmVlID0gY3ZtX29jdF9hZGp1c3Rfc2tiX3RvX2ZyZWUoc2tiX3RvX2ZyZWUsIHByaXYtPmZhdSArIHFvcyAqIDQpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X2ZyZWVfbGlzdFtxb3NdLmxvY2ssIGZsYWdzKTsKKwkJCWdvdG8gc2tpcF94bWl0OworCQl9CisJfQorCisJLyoKIAkgKiBUaGUgQ04zWFhYIHNlcmllcyBvZiBwYXJ0cyBoYXMgYW4gZXJyYXRhIChHTVgtNDAxKSB3aGljaAogCSAqIGNhdXNlcyB0aGUgR01YIGJsb2NrIHRvIGhhbmcgaWYgYSBjb2xsaXNpb24gb2NjdXJzIHRvd2FyZHMKIAkgKiB0aGUgZW5kIG9mIGEgPDY4IGJ5dGUgcGFja2V0LiBBcyBhIHdvcmthcm91bmQgZm9yIHRoaXMsIHdlCkBAIC0xNjIsMTMgKzI1MSw2IEBACiAJCX0KIAl9CiAKLQkvKiBCdWlsZCB0aGUgUEtPIGJ1ZmZlciBwb2ludGVyICovCi0JaHdfYnVmZmVyLnU2NCA9IDA7Ci0JaHdfYnVmZmVyLnMuYWRkciA9IGN2bXhfcHRyX3RvX3BoeXMoc2tiLT5kYXRhKTsKLQlod19idWZmZXIucy5wb29sID0gMDsKLQlod19idWZmZXIucy5zaXplID0KLQkgICAgKHVuc2lnbmVkIGxvbmcpc2tiX2VuZF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgbG9uZylza2ItPmhlYWQ7Ci0KIAkvKiBCdWlsZCB0aGUgUEtPIGNvbW1hbmQgKi8KIAlwa29fY29tbWFuZC51NjQgPSAwOwogCXBrb19jb21tYW5kLnMubjIgPSAxOwkvKiBEb24ndCBwb2xsdXRlIEwyIHdpdGggdGhlIG91dGdvaW5nIHBhY2tldCAqLwpAQCAtMTc4LDcgKzI2MCwzMSBAQAogCXBrb19jb21tYW5kLnMuc3Vib25lMCA9IDE7CiAKIAlwa29fY29tbWFuZC5zLmRvbnRmcmVlID0gMTsKLQlwa29fY29tbWFuZC5zLnJlZzAgPSBwcml2LT5mYXUgKyBxb3MgKiA0OworCisJLyogQnVpbGQgdGhlIFBLTyBidWZmZXIgcG9pbnRlciAqLworCWh3X2J1ZmZlci51NjQgPSAwOworCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApIHsKKwkJaHdfYnVmZmVyLnMuYWRkciA9IFhLUEhZU19UT19QSFlTKCh1NjQpc2tiLT5kYXRhKTsKKwkJaHdfYnVmZmVyLnMucG9vbCA9IDA7CisJCWh3X2J1ZmZlci5zLnNpemUgPSBza2ItPmxlbjsKKwl9IGVsc2UgeworCQlod19idWZmZXIucy5hZGRyID0gWEtQSFlTX1RPX1BIWVMoKHU2NClza2ItPmRhdGEpOworCQlod19idWZmZXIucy5wb29sID0gMDsKKwkJaHdfYnVmZmVyLnMuc2l6ZSA9IHNrYl9oZWFkbGVuKHNrYik7CisJCUNWTV9PQ1RfU0tCX0NCKHNrYilbMF0gPSBod19idWZmZXIudTY0OworCQlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7CisJCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcyA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3MgKyBpOworCQkJaHdfYnVmZmVyLnMuYWRkciA9IFhLUEhZU19UT19QSFlTKCh1NjQpKHBhZ2VfYWRkcmVzcyhmcy0+cGFnZSkgKyBmcy0+cGFnZV9vZmZzZXQpKTsKKwkJCWh3X2J1ZmZlci5zLnNpemUgPSBmcy0+c2l6ZTsKKwkJCUNWTV9PQ1RfU0tCX0NCKHNrYilbaSArIDFdID0gaHdfYnVmZmVyLnU2NDsKKwkJfQorCQlod19idWZmZXIucy5hZGRyID0gWEtQSFlTX1RPX1BIWVMoKHU2NClDVk1fT0NUX1NLQl9DQihza2IpKTsKKwkJaHdfYnVmZmVyLnMuc2l6ZSA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOworCQlwa29fY29tbWFuZC5zLnNlZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMTsKKwkJcGtvX2NvbW1hbmQucy5nYXRoZXIgPSAxOworCQlnb3RvIGRvbnRfcHV0X3NrYnVmZl9pbl9odzsKKwl9CisKIAkvKgogCSAqIFNlZSBpZiB3ZSBjYW4gcHV0IHRoaXMgc2tiIGluIHRoZSBGUEEgcG9vbC4gQW55IHN0cmFuZ2UKIAkgKiBiZWhhdmlvciBmcm9tIHRoZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrIHdpbGwgbW9zdCBsaWtlbHkKQEAgLTE5MCw3ICsyOTYsNyBAQAogCSAqIHNob3duIGEgMjUlIGluY3JlYXNlIGluIHBlcmZvcm1hbmNlIHVuZGVyIHNvbWUgbG9hZHMuCiAJICovCiAjaWYgUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUKLQlmcGFfaGVhZCA9IHNrYi0+aGVhZCArIDEyOCAtICgodW5zaWduZWQgbG9uZylza2ItPmhlYWQgJiAweDdmKTsKKwlmcGFfaGVhZCA9IHNrYi0+aGVhZCArIDI1NiAtICgodW5zaWduZWQgbG9uZylza2ItPmhlYWQgJiAweDdmKTsKIAlpZiAodW5saWtlbHkoc2tiLT5kYXRhIDwgZnBhX2hlYWQpKSB7CiAJCS8qCiAJCSAqIHByaW50aygiVFggYnVmZmVyIGJlZ2lubmluZyBjYW4ndCBtZWV0IEZQQQpAQCAtMjQ4LDEwICszNTQsOSBAQAogCSAqIFdlIGNhbiB1c2UgdGhpcyBidWZmZXIgaW4gdGhlIEZQQS4gIFdlIGRvbid0IG5lZWQgdGhlIEZBVQogCSAqIHVwZGF0ZSBhbnltb3JlCiAJICovCi0JcGtvX2NvbW1hbmQucy5yZWcwID0gMDsKIAlwa29fY29tbWFuZC5zLmRvbnRmcmVlID0gMDsKIAotCWh3X2J1ZmZlci5zLmJhY2sgPSAoc2tiLT5kYXRhIC0gZnBhX2hlYWQpID4+IDc7CisJaHdfYnVmZmVyLnMuYmFjayA9ICgodW5zaWduZWQgbG9uZylza2ItPmRhdGEgPj4gNykgLSAoKHVuc2lnbmVkIGxvbmcpZnBhX2hlYWQgPj4gNyk7CiAJKihzdHJ1Y3Qgc2tfYnVmZiAqKikoZnBhX2hlYWQgLSBzaXplb2Yodm9pZCAqKSkgPSBza2I7CiAKIAkvKgpAQCAtMjcyLDE2ICszNzcsMTYgQEAKIAlza2ItPnRjX3ZlcmQgPSAwOwogI2VuZGlmIC8qIENPTkZJR19ORVRfQ0xTX0FDVCAqLwogI2VuZGlmIC8qIENPTkZJR19ORVRfU0NIRUQgKi8KKyNlbmRpZiAvKiBSRVVTRV9TS0JVRkZTX1dJVEhPVVRfRlJFRSAqLwogCiBkb250X3B1dF9za2J1ZmZfaW5faHc6Ci0jZW5kaWYgLyogUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUgKi8KIAogCS8qIENoZWNrIGlmIHdlIGNhbiB1c2UgdGhlIGhhcmR3YXJlIGNoZWNrc3VtbWluZyAqLwogCWlmIChVU0VfSFdfVENQVURQX0NIRUNLU1VNICYmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgJiYKIAkgICAgKGlwX2hkcihza2IpLT52ZXJzaW9uID09IDQpICYmIChpcF9oZHIoc2tiKS0+aWhsID09IDUpICYmCiAJICAgICgoaXBfaGRyKHNrYiktPmZyYWdfb2ZmID09IDApIHx8IChpcF9oZHIoc2tiKS0+ZnJhZ19vZmYgPT0gMSA8PCAxNCkpCi0JICAgICYmICgoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQX1BST1RPQ09MX1RDUCkKLQkJfHwgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUF9QUk9UT0NPTF9VRFApKSkgeworCSAgICAmJiAoKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKKwkJfHwgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkpKSB7CiAJCS8qIFVzZSBoYXJkd2FyZSBjaGVja3N1bSBjYWxjICovCiAJCXBrb19jb21tYW5kLnMuaXBvZmZwMSA9IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIDE7CiAJfQpAQCAtMjk5LDg5ICs0MDQsMTE2IEBACiAJCSAgICBjdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIoRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFLCAwKTsKIAl9CiAKLQkvKgotCSAqIFdlIHRyeSB0byBjbGFpbSBNQVhfU0tCX1RPX0ZSRUUgYnVmZmVycy4gIElmIHRoZXJlIHdlcmUgbm90Ci0JICogdGhhdCBtYW55IGF2YWlsYWJsZSwgd2UgaGF2ZSB0byB1bi1jbGFpbSAodW5kbykgYW55IHRoYXQKLQkgKiB3ZXJlIGluIGV4Y2Vzcy4gIElmIHNrYl90b19mcmVlIGlzIHBvc2l0aXZlIHdlIHdpbGwgZnJlZQotCSAqIHRoYXQgbWFueSBidWZmZXJzLgotCSAqLwotCXVuZG8gPSBza2JfdG9fZnJlZSA+IDAgPwotCQlNQVhfU0tCX1RPX0ZSRUUgOiBza2JfdG9fZnJlZSArIE1BWF9TS0JfVE9fRlJFRTsKLQlpZiAodW5kbyA+IDApCi0JCWN2bXhfZmF1X2F0b21pY19hZGQzMihwcml2LT5mYXUrcW9zKjQsIC11bmRvKTsKLQlza2JfdG9fZnJlZSA9IC1za2JfdG9fZnJlZSA+IE1BWF9TS0JfVE9fRlJFRSA/Ci0JCU1BWF9TS0JfVE9fRlJFRSA6IC1za2JfdG9fZnJlZTsKKwlza2JfdG9fZnJlZSA9IGN2bV9vY3RfYWRqdXN0X3NrYl90b19mcmVlKHNrYl90b19mcmVlLCBwcml2LT5mYXUrcW9zKjQpOwogCiAJLyoKIAkgKiBJZiB3ZSdyZSBzZW5kaW5nIGZhc3RlciB0aGFuIHRoZSByZWNlaXZlIGNhbiBmcmVlIHRoZW0gdGhlbgogCSAqIGRvbid0IGRvIHRoZSBIVyBmcmVlLgogCSAqLwotCWlmICgoYnVmZmVyc190b19mcmVlIDwgLTEwMCkgJiYgIXBrb19jb21tYW5kLnMuZG9udGZyZWUpIHsKKwlpZiAoKGJ1ZmZlcnNfdG9fZnJlZSA8IC0xMDApICYmICFwa29fY29tbWFuZC5zLmRvbnRmcmVlKQogCQlwa29fY29tbWFuZC5zLmRvbnRmcmVlID0gMTsKLQkJcGtvX2NvbW1hbmQucy5yZWcwID0gcHJpdi0+ZmF1ICsgcW9zICogNDsKLQl9CiAKLQljdm14X3Brb19zZW5kX3BhY2tldF9wcmVwYXJlKHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlICsgcW9zLAotCQkJCSAgICAgQ1ZNWF9QS09fTE9DS19DTURfUVVFVUUpOworCWlmIChwa29fY29tbWFuZC5zLmRvbnRmcmVlKSB7CisJCXF1ZXVlX3R5cGUgPSBRVUVVRV9DT1JFOworCQlwa29fY29tbWFuZC5zLnJlZzAgPSBwcml2LT5mYXUrcW9zKjQ7CisJfSBlbHNlIHsKKwkJcXVldWVfdHlwZSA9IFFVRVVFX0hXOworCX0KKwlpZiAoVVNFX0FTWU5DX0lPQkRNQSkKKwkJY3ZteF9mYXVfYXN5bmNfZmV0Y2hfYW5kX2FkZDMyKENWTVhfU0NSX1NDUkFUQ0gsIEZBVV9UT1RBTF9UWF9UT19DTEVBTiwgMSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOwogCiAJLyogRHJvcCB0aGlzIHBhY2tldCBpZiB3ZSBoYXZlIHRvbyBtYW55IGFscmVhZHkgcXVldWVkIHRvIHRoZSBIVyAqLwotCWlmICh1bmxpa2VseQotCSAgICAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pID49IE1BWF9PVVRfUVVFVUVfREVQVEgpKSB7Ci0JCS8qCi0JCSAgIERFQlVHUFJJTlQoIiVzOiBUeCBkcm9wcGVkLiBUb28gbWFueSBxdWV1ZWRcbiIsIGRldi0+bmFtZSk7Ci0JCSAqLwotCQlkcm9wcGVkID0gMTsKLQl9Ci0JLyogU2VuZCB0aGUgcGFja2V0IHRvIHRoZSBvdXRwdXQgcXVldWUgKi8KLQllbHNlIGlmICh1bmxpa2VseQotCQkgKGN2bXhfcGtvX3NlbmRfcGFja2V0X2ZpbmlzaAotCQkgIChwcml2LT5wb3J0LCBwcml2LT5xdWV1ZSArIHFvcywgcGtvX2NvbW1hbmQsIGh3X2J1ZmZlciwKLQkJICAgQ1ZNWF9QS09fTE9DS19DTURfUVVFVUUpKSkgewotCQlERUJVR1BSSU5UKCIlczogRmFpbGVkIHRvIHNlbmQgdGhlIHBhY2tldFxuIiwgZGV2LT5uYW1lKTsKLQkJZHJvcHBlZCA9IDE7Ci0JfQotCi0JaWYgKFVTRV9BU1lOQ19JT0JETUEpIHsKLQkJLyogUmVzdG9yZSB0aGUgc2NyYXRjaCBhcmVhICovCi0JCWN2bXhfc2NyYXRjaF93cml0ZTY0KENWTVhfU0NSX1NDUkFUQ0gsIG9sZF9zY3JhdGNoKTsKLQkJY3ZteF9zY3JhdGNoX3dyaXRlNjQoQ1ZNWF9TQ1JfU0NSQVRDSCArIDgsIG9sZF9zY3JhdGNoMik7Ci0JfQotCi0JcXVldWVfaXRfdXAgPSAwOwotCWlmICh1bmxpa2VseShkcm9wcGVkKSkgewotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JfSBlbHNlIHsKLQkJaWYgKFVTRV9TS0JVRkZTX0lOX0hXKSB7Ci0JCQkvKiBQdXQgdGhpcyBwYWNrZXQgb24gdGhlIHF1ZXVlIHRvIGJlIGZyZWVkIGxhdGVyICovCi0JCQlpZiAocGtvX2NvbW1hbmQucy5kb250ZnJlZSkKLQkJCQlxdWV1ZV9pdF91cCA9IDE7Ci0JCQllbHNlCi0JCQkJY3ZteF9mYXVfYXRvbWljX2FkZDMyCi0JCQkJICAgIChGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsIC0xKTsKKwlpZiAodW5saWtlbHkoc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pID49IE1BWF9PVVRfUVVFVUVfREVQVEgpKSB7CisJCWlmIChkZXYtPnR4X3F1ZXVlX2xlbiAhPSAwKSB7CisJCQkvKiBEcm9wIHRoZSBsb2NrIHdoZW4gbm90aWZ5aW5nIHRoZSBjb3JlLiAgKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2ZyZWVfbGlzdFtxb3NdLmxvY2ssIGZsYWdzKTsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrLCBmbGFncyk7CiAJCX0gZWxzZSB7Ci0JCQkvKiBQdXQgdGhpcyBwYWNrZXQgb24gdGhlIHF1ZXVlIHRvIGJlIGZyZWVkIGxhdGVyICovCi0JCQlxdWV1ZV9pdF91cCA9IDE7CisJCQkvKiBJZiBub3QgdXNpbmcgbm9ybWFsIHF1ZXVlaW5nLiAgKi8KKwkJCXF1ZXVlX3R5cGUgPSBRVUVVRV9EUk9QOworCQkJZ290byBza2lwX3htaXQ7CiAJCX0KIAl9CiAKLQlpZiAocXVldWVfaXRfdXApIHsKLQkJc3Bpbl9sb2NrKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrKTsKKwljdm14X3Brb19zZW5kX3BhY2tldF9wcmVwYXJlKHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlICsgcW9zLAorCQkJCSAgICAgQ1ZNWF9QS09fTE9DS19OT05FKTsKKworCS8qIFNlbmQgdGhlIHBhY2tldCB0byB0aGUgb3V0cHV0IHF1ZXVlICovCisJaWYgKHVubGlrZWx5KGN2bXhfcGtvX3NlbmRfcGFja2V0X2ZpbmlzaChwcml2LT5wb3J0LAorCQkJCQkJIHByaXYtPnF1ZXVlICsgcW9zLAorCQkJCQkJIHBrb19jb21tYW5kLCBod19idWZmZXIsCisJCQkJCQkgQ1ZNWF9QS09fTE9DS19OT05FKSkpIHsKKwkJREVCVUdQUklOVCgiJXM6IEZhaWxlZCB0byBzZW5kIHRoZSBwYWNrZXRcbiIsIGRldi0+bmFtZSk7CisJCXF1ZXVlX3R5cGUgPSBRVUVVRV9EUk9QOworCX0KK3NraXBfeG1pdDoKKwl0b19mcmVlX2xpc3QgPSBOVUxMOworCisJc3dpdGNoIChxdWV1ZV90eXBlKSB7CisJY2FzZSBRVUVVRV9EUk9QOgorCQlza2ItPm5leHQgPSB0b19mcmVlX2xpc3Q7CisJCXRvX2ZyZWVfbGlzdCA9IHNrYjsKKwkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlicmVhazsKKwljYXNlIFFVRVVFX0hXOgorCQljdm14X2ZhdV9hdG9taWNfYWRkMzIoRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFLCAtMSk7CisJCWJyZWFrOworCWNhc2UgUVVFVUVfQ09SRToKIAkJX19za2JfcXVldWVfdGFpbCgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10sIHNrYik7Ci0JCWN2bV9vY3RfZnJlZV90eF9za2JzKHByaXYsIHNrYl90b19mcmVlLCBxb3MsIDApOwotCQlzcGluX3VubG9jaygmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jayk7Ci0JfSBlbHNlIHsKLQkJY3ZtX29jdF9mcmVlX3R4X3NrYnMocHJpdiwgc2tiX3RvX2ZyZWUsIHFvcywgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOwogCX0KIAotCXJldHVybiAwOworCXdoaWxlIChza2JfdG9fZnJlZSA+IDApIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnQgPSBfX3NrYl9kZXF1ZXVlKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXSk7CisJCXQtPm5leHQgPSB0b19mcmVlX2xpc3Q7CisJCXRvX2ZyZWVfbGlzdCA9IHQ7CisJCXNrYl90b19mcmVlLS07CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOworCisJLyogRG8gdGhlIGFjdHVhbCBmcmVlaW5nIG91dHNpZGUgb2YgdGhlIGxvY2suICovCisJd2hpbGUgKHRvX2ZyZWVfbGlzdCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqdCA9IHRvX2ZyZWVfbGlzdDsKKwkJdG9fZnJlZV9saXN0ID0gdG9fZnJlZV9saXN0LT5uZXh0OworCQlkZXZfa2ZyZWVfc2tiX2FueSh0KTsKKwl9CisKKwlpZiAoVVNFX0FTWU5DX0lPQkRNQSkgeworCQlDVk1YX1NZTkNJT0JETUE7CisJCXRvdGFsX3RvX2NsZWFuID0gY3ZteF9zY3JhdGNoX3JlYWQ2NChDVk1YX1NDUl9TQ1JBVENIKTsKKwkJLyogUmVzdG9yZSB0aGUgc2NyYXRjaCBhcmVhICovCisJCWN2bXhfc2NyYXRjaF93cml0ZTY0KENWTVhfU0NSX1NDUkFUQ0gsIG9sZF9zY3JhdGNoKTsKKwkJY3ZteF9zY3JhdGNoX3dyaXRlNjQoQ1ZNWF9TQ1JfU0NSQVRDSCArIDgsIG9sZF9zY3JhdGNoMik7CisJfSBlbHNlIHsKKwkJdG90YWxfdG9fY2xlYW4gPSBjdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIoRkFVX1RPVEFMX1RYX1RPX0NMRUFOLCAxKTsKKwl9CisKKwlpZiAodG90YWxfdG9fY2xlYW4gJiAweDNmZikgeworCQkvKgorCQkgKiBTY2hlZHVsZSB0aGUgY2xlYW51cCB0YXNrbGV0IGV2ZXJ5IDEwMjQgcGFja2V0cyBmb3IKKwkJICogdGhlIHBhdGhvbG9naWNhbCBjYXNlIG9mIGhpZ2ggdHJhZmZpYyBvbiBvbmUgcG9ydAorCQkgKiBkZWxheWluZyBjbGVhbiB1cCBvZiBwYWNrZXRzIG9uIGEgZGlmZmVyZW50IHBvcnQKKwkJICogdGhhdCBpcyBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZSBjbGVhbnVwLgorCQkgKi8KKwkJdGFza2xldF9zY2hlZHVsZSgmY3ZtX29jdF90eF9jbGVhbnVwX3Rhc2tsZXQpOworCX0KKworCWN2bV9vY3Rfa2lja190eF9wb2xsX3dhdGNoZG9nKCk7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioKLSAqIFBhY2tldCB0cmFuc21pdCB0byB0aGUgUE9XCi0gKgorICogY3ZtX29jdF94bWl0X3BvdyAtIHRyYW5zbWl0IGEgcGFja2V0IHRvIHRoZSBQT1cKICAqIEBza2I6ICAgIFBhY2tldCB0byBzZW5kCiAgKiBAZGV2OiAgICBEZXZpY2UgaW5mbyBzdHJ1Y3R1cmUKKwogICogUmV0dXJucyBBbHdheXMgcmV0dXJucyB6ZXJvCiAgKi8KIGludCBjdm1fb2N0X3htaXRfcG93KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC00NTksOCArNTkxLDggQEAKIAkJd29yay0+d29yZDIucy5kZWNfaXBjb21wID0gMDsJLyogRklYTUUgKi8KICNlbmRpZgogCQl3b3JrLT53b3JkMi5zLnRjcF9vcl91ZHAgPQotCQkgICAgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUF9QUk9UT0NPTF9UQ1ApCi0JCSAgICB8fCAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQX1BST1RPQ09MX1VEUCk7CisJCSAgICAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVENQKQorCQkgICAgfHwgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCk7CiAjaWYgMAogCQkvKiBGSVhNRSAqLwogCQl3b3JrLT53b3JkMi5zLmRlY19pcHNlYyA9IDA7CkBAIC01MjksMTA2ICs2NjEsMTEgQEAKIH0KIAogLyoqCi0gKiBUcmFuc21pdCBhIHdvcmsgcXVldWUgZW50cnkgb3V0IG9mIHRoZSBldGhlcm5ldCBwb3J0LiBCb3RoCi0gKiB0aGUgd29yayBxdWV1ZSBlbnRyeSBhbmQgdGhlIHBhY2tldCBkYXRhIGNhbiBvcHRpb25hbGx5IGJlCi0gKiBmcmVlZC4gVGhlIHdvcmsgd2lsbCBiZSBmcmVlZCBvbiBlcnJvciBhcyB3ZWxsLgotICoKLSAqIEBkZXY6ICAgICBEZXZpY2UgdG8gdHJhbnNtaXQgb3V0LgotICogQHdvcmtfcXVldWVfZW50cnk6Ci0gKiAgICAgICAgICAgICAgICBXb3JrIHF1ZXVlIGVudHJ5IHRvIHNlbmQKLSAqIEBkb19mcmVlOiBUcnVlIGlmIHRoZSB3b3JrIHF1ZXVlIGVudHJ5IGFuZCBwYWNrZXQgZGF0YSBzaG91bGQgYmUKLSAqICAgICAgICAgICAgICAgIGZyZWVkLiBJZiBmYWxzZSwgbmVpdGhlciB3aWxsIGJlIGZyZWVkLgotICogQHFvczogICAgIEluZGV4IGludG8gdGhlIHF1ZXVlcyBmb3IgdGhpcyBwb3J0IHRvIHRyYW5zbWl0IG9uLiBUaGlzCi0gKiAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIGltcGxlbWVudCBRb1MgaWYgdGhlaXIgYXJlIG11bHRpcGxlIHF1ZXVlcyBwZXIKLSAqICAgICAgICAgICAgICAgIHBvcnQuIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYmV0d2VlbiAwIGFuZCB0aGUgbnVtYmVyIG9mCi0gKiAgICAgICAgICAgICAgICBxdWV1ZXMgcGVyIHBvcnQgbWludXMgMS4gVmFsdWVzIG91dHNpZGUgb2YgdGhpcyByYW5nZSB3aWxsCi0gKiAgICAgICAgICAgICAgICBiZSBjaGFuZ2UgdG8gemVyby4KLSAqCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqLwotaW50IGN2bV9vY3RfdHJhbnNtaXRfcW9zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKndvcmtfcXVldWVfZW50cnksCi0JCQkgaW50IGRvX2ZyZWUsIGludCBxb3MpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bmlvbiBjdm14X2J1Zl9wdHIgaHdfYnVmZmVyOwotCWN2bXhfcGtvX2NvbW1hbmRfd29yZDBfdCBwa29fY29tbWFuZDsKLQlpbnQgZHJvcHBlZDsKLQlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQljdm14X3dxZV90ICp3b3JrID0gd29ya19xdWV1ZV9lbnRyeTsKLQotCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7Ci0JCURFQlVHUFJJTlQoIiVzOiBEZXZpY2Ugbm90IHVwXG4iLCBkZXYtPm5hbWUpOwotCQlpZiAoZG9fZnJlZSkKLQkJCWN2bV9vY3RfZnJlZV93b3JrKHdvcmspOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogVGhlIGNoZWNrIG9uIENWTVhfUEtPX1FVRVVFU19QRVJfUE9SVF8qIGlzIGRlc2lnbmVkIHRvIGNvbXBsZXRlbHkKLQkgICByZW1vdmUgInFvcyIgaW4gdGhlIGV2ZW50IG5laXRoZXIgaW50ZXJmYWNlIHN1cHBvcnRzCi0JICAgbXVsdGlwbGUgcXVldWVzIHBlciBwb3J0ICovCi0JaWYgKChDVk1YX1BLT19RVUVVRVNfUEVSX1BPUlRfSU5URVJGQUNFMCA+IDEpIHx8Ci0JICAgIChDVk1YX1BLT19RVUVVRVNfUEVSX1BPUlRfSU5URVJGQUNFMSA+IDEpKSB7Ci0JCWlmIChxb3MgPD0gMCkKLQkJCXFvcyA9IDA7Ci0JCWVsc2UgaWYgKHFvcyA+PSBjdm14X3Brb19nZXRfbnVtX3F1ZXVlcyhwcml2LT5wb3J0KSkKLQkJCXFvcyA9IDA7Ci0JfSBlbHNlCi0JCXFvcyA9IDA7Ci0KLQkvKiBTdGFydCBvZmYgYXNzdW1pbmcgbm8gZHJvcCAqLwotCWRyb3BwZWQgPSAwOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN2bXhfcGtvX3NlbmRfcGFja2V0X3ByZXBhcmUocHJpdi0+cG9ydCwgcHJpdi0+cXVldWUgKyBxb3MsCi0JCQkJICAgICBDVk1YX1BLT19MT0NLX0NNRF9RVUVVRSk7Ci0KLQkvKiBCdWlsZCB0aGUgUEtPIGJ1ZmZlciBwb2ludGVyICovCi0JaHdfYnVmZmVyLnU2NCA9IDA7Ci0JaHdfYnVmZmVyLnMuYWRkciA9IHdvcmstPnBhY2tldF9wdHIucy5hZGRyOwotCWh3X2J1ZmZlci5zLnBvb2wgPSBDVk1YX0ZQQV9QQUNLRVRfUE9PTDsKLQlod19idWZmZXIucy5zaXplID0gQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRTsKLQlod19idWZmZXIucy5iYWNrID0gd29yay0+cGFja2V0X3B0ci5zLmJhY2s7Ci0KLQkvKiBCdWlsZCB0aGUgUEtPIGNvbW1hbmQgKi8KLQlwa29fY29tbWFuZC51NjQgPSAwOwotCXBrb19jb21tYW5kLnMubjIgPSAxOwkvKiBEb24ndCBwb2xsdXRlIEwyIHdpdGggdGhlIG91dGdvaW5nIHBhY2tldCAqLwotCXBrb19jb21tYW5kLnMuZG9udGZyZWUgPSAhZG9fZnJlZTsKLQlwa29fY29tbWFuZC5zLnNlZ3MgPSB3b3JrLT53b3JkMi5zLmJ1ZnM7Ci0JcGtvX2NvbW1hbmQucy50b3RhbF9ieXRlcyA9IHdvcmstPmxlbjsKLQotCS8qIENoZWNrIGlmIHdlIGNhbiB1c2UgdGhlIGhhcmR3YXJlIGNoZWNrc3VtbWluZyAqLwotCWlmICh1bmxpa2VseSh3b3JrLT53b3JkMi5zLm5vdF9JUCB8fCB3b3JrLT53b3JkMi5zLklQX2V4YykpCi0JCXBrb19jb21tYW5kLnMuaXBvZmZwMSA9IDA7Ci0JZWxzZQotCQlwa29fY29tbWFuZC5zLmlwb2ZmcDEgPSBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyAxOwotCi0JLyogU2VuZCB0aGUgcGFja2V0IHRvIHRoZSBvdXRwdXQgcXVldWUgKi8KLQlpZiAodW5saWtlbHkKLQkgICAgKGN2bXhfcGtvX3NlbmRfcGFja2V0X2ZpbmlzaAotCSAgICAgKHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlICsgcW9zLCBwa29fY29tbWFuZCwgaHdfYnVmZmVyLAotCSAgICAgIENWTVhfUEtPX0xPQ0tfQ01EX1FVRVVFKSkpIHsKLQkJREVCVUdQUklOVCgiJXM6IEZhaWxlZCB0byBzZW5kIHRoZSBwYWNrZXRcbiIsIGRldi0+bmFtZSk7Ci0JCWRyb3BwZWQgPSAtMTsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JaWYgKHVubGlrZWx5KGRyb3BwZWQpKSB7Ci0JCWlmIChkb19mcmVlKQotCQkJY3ZtX29jdF9mcmVlX3dvcmsod29yayk7Ci0JCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQl9IGVsc2UgaWYgKGRvX2ZyZWUpCi0JCWN2bXhfZnBhX2ZyZWUod29yaywgQ1ZNWF9GUEFfV1FFX1BPT0wsIERPTlRfV1JJVEVCQUNLKDEpKTsKLQotCXJldHVybiBkcm9wcGVkOwotfQotRVhQT1JUX1NZTUJPTChjdm1fb2N0X3RyYW5zbWl0X3Fvcyk7Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiBmcmVlcyBhbGwgc2tiIHRoYXQgYXJlIGN1cnJlbnRseSBxdWV1ZWQgZm9yIFRYLgotICoKKyAqIGN2bV9vY3RfdHhfc2h1dGRvd25fZGV2IC0gZnJlZSBhbGwgc2tiIHRoYXQgYXJlIGN1cnJlbnRseSBxdWV1ZWQgZm9yIFRYLgogICogQGRldjogICAgRGV2aWNlIGJlaW5nIHNodXRkb3duCisgKgogICovCi12b2lkIGN2bV9vY3RfdHhfc2h1dGRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3ZvaWQgY3ZtX29jdF90eF9zaHV0ZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjQyLDMgKzY3OSw0NSBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrLCBmbGFncyk7CiAJfQogfQorCitzdGF0aWMgdm9pZCBjdm1fb2N0X3R4X2RvX2NsZWFudXAodW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHBvcnQ7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgVE9UQUxfTlVNQkVSX09GX1BPUlRTOyBwb3J0KyspIHsKKwkJaWYgKGN2bV9vY3RfZGV2aWNlW3BvcnRdKSB7CisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY3ZtX29jdF9kZXZpY2VbcG9ydF07CisJCQljdm1fb2N0X2ZyZWVfdHhfc2ticyhkZXYpOworCQl9CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY3ZtX29jdF90eF9jbGVhbnVwX3dhdGNoZG9nKGludCBjcGwsIHZvaWQgKmRldl9pZCkKK3sKKwkvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQuICAqLworCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX1RJTVgoMSksIDApOworCS8qIERvIHRoZSB3b3JrIGluIHRoZSB0YXNrbGV0LiAgKi8KKwl0YXNrbGV0X3NjaGVkdWxlKCZjdm1fb2N0X3R4X2NsZWFudXBfdGFza2xldCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCit2b2lkIGN2bV9vY3RfdHhfaW5pdGlhbGl6ZSh2b2lkKQoreworCWludCBpOworCisJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0LiAgKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9USU1YKDEpLCAwKTsKKwkvKiBSZWdpc3RlciBhbiBJUlEgaGFuZGVyIGZvciB0byByZWNlaXZlIENJVV9USU1YKDEpIGludGVycnVwdHMgKi8KKwlpID0gcmVxdWVzdF9pcnEoT0NURU9OX0lSUV9USU1FUjEsCisJCQljdm1fb2N0X3R4X2NsZWFudXBfd2F0Y2hkb2csIDAsCisJCQkiRXRoZXJuZXQiLCBjdm1fb2N0X2RldmljZSk7CisKKwlpZiAoaSkKKwkJcGFuaWMoIkNvdWxkIG5vdCBhY3F1aXJlIEV0aGVybmV0IElSUSAlZFxuIiwgT0NURU9OX0lSUV9USU1FUjEpOworfQorCit2b2lkIGN2bV9vY3RfdHhfc2h1dGRvd24odm9pZCkKK3sKKwkvKiBGcmVlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLworCWZyZWVfaXJxKE9DVEVPTl9JUlFfVElNRVIxLCBjdm1fb2N0X2RldmljZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmgKaW5kZXggYzBiZWJmNy4uNTQ3NjgwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdHguaApAQCAtMjksMjkgKzI5LDYgQEAKIGludCBjdm1fb2N0X3htaXRfcG93KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IGN2bV9vY3RfdHJhbnNtaXRfcW9zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKndvcmtfcXVldWVfZW50cnksCiAJCQkgaW50IGRvX2ZyZWUsIGludCBxb3MpOwotdm9pZCBjdm1fb2N0X3R4X3NodXRkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0vKioKLSAqIEZyZWUgZGVhZCB0cmFuc21pdCBza2JzLgotICoKLSAqIEBwcml2OgkJVGhlIGRyaXZlciBkYXRhCi0gKiBAc2tiX3RvX2ZyZWU6CVRoZSBudW1iZXIgb2YgU0tCcyB0byBmcmVlIChmcmVlIG5vbmUgaWYgbmVnYXRpdmUpLgotICogQHFvczoJCVRoZSBxdWV1ZSB0byBmcmVlIGZyb20uCi0gKiBAdGFrZV9sb2NrOgkJSWYgdHJ1ZSwgYWNxdWlyZSB0aGUgc2tiIGxpc3QgbG9jay4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGN2bV9vY3RfZnJlZV90eF9za2JzKHN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYsCi0JCQkJCWludCBza2JfdG9fZnJlZSwKLQkJCQkJaW50IHFvcywgaW50IHRha2VfbG9jaykKLXsKLQkvKiBGcmVlIHNrYnVmZnMgbm90IGluIHVzZSBieSB0aGUgaGFyZHdhcmUuICAqLwotCWlmIChza2JfdG9fZnJlZSA+IDApIHsKLQkJaWYgKHRha2VfbG9jaykKLQkJCXNwaW5fbG9jaygmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jayk7Ci0JCXdoaWxlIChza2JfdG9fZnJlZSA+IDApIHsKLQkJCWRldl9rZnJlZV9za2IoX19za2JfZGVxdWV1ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pKTsKLQkJCXNrYl90b19mcmVlLS07Ci0JCX0KLQkJaWYgKHRha2VfbG9jaykKLQkJCXNwaW5fdW5sb2NrKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrKTsKLQl9Ci19Cit2b2lkIGN2bV9vY3RfdHhfaW5pdGlhbGl6ZSh2b2lkKTsKK3ZvaWQgY3ZtX29jdF90eF9zaHV0ZG93bih2b2lkKTsKK3ZvaWQgY3ZtX29jdF90eF9zaHV0ZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXV0aWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdXRpbC5oCmluZGV4IDM3YjY2NTkuLjIzNDY3NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdXRpbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdXRpbC5oCkBAIC0zMCwxMCArMzAsOSBAQAogCQkJCX0gd2hpbGUgKDApCiAKIC8qKgotICogR2l2ZW4gYSBwYWNrZXQgZGF0YSBhZGRyZXNzLCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZQotICogYmVnaW5uaW5nIG9mIHRoZSBwYWNrZXQgYnVmZmVyLgotICoKKyAqIGN2bV9vY3RfZ2V0X2J1ZmZlcl9wdHIgLSBjb252ZXJ0IHBhY2tldCBkYXRhIGFkZHJlc3MgdG8gcG9pbnRlcgogICogQHBhY2tldF9wdHI6IFBhY2tldCBkYXRhIGhhcmR3YXJlIGFkZHJlc3MKKyAqCiAgKiBSZXR1cm5zIFBhY2tldCBidWZmZXIgcG9pbnRlcgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKmN2bV9vY3RfZ2V0X2J1ZmZlcl9wdHIodW5pb24gY3ZteF9idWZfcHRyIHBhY2tldF9wdHIpCkBAIC00Myw5ICs0Miw3IEBACiB9CiAKIC8qKgotICogR2l2ZW4gYW4gSVBEL1BLTyBwb3J0IG51bWJlciwgcmV0dXJuIHRoZSBsb2dpY2FsIGludGVyZmFjZSBpdCBpcwotICogb24uCi0gKgorICogSU5URVJGQUNFIC0gY29udmVydCBJUEQgcG9ydCB0byBsb2NnaWNhbCBpbnRlcmZhY2UKICAqIEBpcGRfcG9ydDogUG9ydCB0byBjaGVjawogICoKICAqIFJldHVybnMgTG9naWNhbCBpbnRlcmZhY2UKQEAgLTY1LDkgKzYyLDcgQEAKIH0KIAogLyoqCi0gKiBHaXZlbiBhbiBJUEQvUEtPIHBvcnQgbnVtYmVyLCByZXR1cm4gdGhlIHBvcnQncyBpbmRleCBvbiBhCi0gKiBsb2dpY2FsIGludGVyZmFjZS4KLSAqCisgKiBJTkRFWCAtIGNvbnZlcnQgSVBEL1BLTyBwb3J0IG51bWJlciB0byB0aGUgcG9ydCdzIGludGVyZmFjZSBpbmRleAogICogQGlwZF9wb3J0OiBQb3J0IHRvIGNoZWNrCiAgKgogICogUmV0dXJucyBJbmRleCBpbnRvIGludGVyZmFjZSBwb3J0IGxpc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQteGF1aS5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC14YXVpLmMKaW5kZXggZWUzZGM0MS4uM2ZjYTFjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC14YXVpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC14YXVpLmMKQEAgLTI2LDcgKzI2LDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogCiAjaW5jbHVkZSA8YXNtL29jdGVvbi9vY3Rlb24uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQuYwppbmRleCA0Y2ZkNGIxLi4wMmI2MzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogCiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpAQCAtNDMsOCArNDIsNiBAQAogI2luY2x1ZGUgImV0aGVybmV0LXR4LmgiCiAjaW5jbHVkZSAiZXRoZXJuZXQtbWRpby5oIgogI2luY2x1ZGUgImV0aGVybmV0LXV0aWwuaCIKLSNpbmNsdWRlICJldGhlcm5ldC1wcm9jLmgiCi0KIAogI2luY2x1ZGUgImN2bXgtcGlwLmgiCiAjaW5jbHVkZSAiY3ZteC1wa28uaCIKQEAgLTEwNCwxMyArMTAxLDE1IEBACiAJIlx0XCJldGgyLHNwaTMsc3BpN1wiIHdvdWxkIGNhdXNlIHRoZXNlIHRocmVlIGRldmljZXMgdG8gdHJhbnNtaXRcbiIKIAkiXHR1c2luZyB0aGUgcG93X3NlbmRfZ3JvdXAuIik7CiAKLXN0YXRpYyBpbnQgZGlzYWJsZV9jb3JlX3F1ZXVlaW5nID0gMTsKLW1vZHVsZV9wYXJhbShkaXNhYmxlX2NvcmVfcXVldWVpbmcsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfY29yZV9xdWV1ZWluZywgIlxuIgotCSJcdFdoZW4gc2V0IHRoZSBuZXR3b3JraW5nIGNvcmUncyB0eF9xdWV1ZV9sZW4gaXMgc2V0IHRvIHplcm8uICBUaGlzXG4iCi0JIlx0YWxsb3dzIHBhY2tldHMgdG8gYmUgc2VudCB3aXRob3V0IGxvY2sgY29udGVudGlvbiBpbiB0aGUgcGFja2V0XG4iCi0JIlx0c2NoZWR1bGVyIHJlc3VsdGluZyBpbiBzb21lIGNhc2VzIGluIGltcHJvdmVkIHRocm91Z2hwdXQuXG4iKTsKK2ludCBtYXhfcnhfY3B1cyA9IC0xOworbW9kdWxlX3BhcmFtKG1heF9yeF9jcHVzLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtYXhfcnhfY3B1cywgIlxuIgorCSJcdFx0VGhlIG1heGltdW0gbnVtYmVyIG9mIENQVXMgdG8gdXNlIGZvciBwYWNrZXQgcmVjZXB0aW9uLlxuIgorCSJcdFx0VXNlIC0xIHRvIHVzZSBhbGwgYXZhaWxhYmxlIENQVXMuIik7CiAKK2ludCByeF9uYXBpX3dlaWdodCA9IDMyOworbW9kdWxlX3BhcmFtKHJ4X25hcGlfd2VpZ2h0LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhyeF9uYXBpX3dlaWdodCwgIlRoZSBOQVBJIFdFSUdIVCBwYXJhbWV0ZXIuIik7CiAKIC8qCiAgKiBUaGUgb2Zmc2V0IGZyb20gbWFjX2FkZHJfYmFzZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgbmV4dCBwb3J0CkBAIC0xMjIsOSArMTIxLDE2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGN2bV9vY3RfbWFjX2FkZHJfb2Zmc2V0OwogCiAvKioKLSAqIFBlcmlvZGljIHRpbWVyIHRvIGNoZWNrIGF1dG8gbmVnb3RpYXRpb24KKyAqIGN2bV9vY3RfcG9sbF9xdWV1ZSAtIFdvcmtxdWV1ZSBmb3IgcG9sbGluZyBvcGVyYXRpb25zLgogICovCi1zdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgY3ZtX29jdF9wb2xsX3RpbWVyOworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmN2bV9vY3RfcG9sbF9xdWV1ZTsKKworLyoqCisgKiBjdm1fb2N0X3BvbGxfcXVldWVfc3RvcHBpbmcgLSBmbGFnIHRvIGluZGljYXRlIHBvbGxpbmcgc2hvdWxkIHN0b3AuCisgKgorICogU2V0IHRvIG9uZSByaWdodCBiZWZvcmUgY3ZtX29jdF9wb2xsX3F1ZXVlIGlzIGRlc3Ryb3llZC4KKyAqLworYXRvbWljX3QgY3ZtX29jdF9wb2xsX3F1ZXVlX3N0b3BwaW5nID0gQVRPTUlDX0lOSVQoMCk7CiAKIC8qKgogICogQXJyYXkgb2YgZXZlcnkgZXRoZXJuZXQgZGV2aWNlIG93bmVkIGJ5IHRoaXMgZHJpdmVyIGluZGV4ZWQgYnkKQEAgLTEzMiw2NSArMTM4LDQ0IEBACiAgKi8KIHN0cnVjdCBuZXRfZGV2aWNlICpjdm1fb2N0X2RldmljZVtUT1RBTF9OVU1CRVJfT0ZfUE9SVFNdOwogCi0vKioKLSAqIFBlcmlvZGljIHRpbWVyIHRpY2sgZm9yIHNsb3cgbWFuYWdlbWVudCBvcGVyYXRpb25zCi0gKgotICogQGFyZzogICAgRGV2aWNlIHRvIGNoZWNrCi0gKi8KLXN0YXRpYyB2b2lkIGN2bV9kb190aW1lcih1bnNpZ25lZCBsb25nIGFyZykKK3U2NCBjdm1fb2N0X3R4X3BvbGxfaW50ZXJ2YWw7CisKK3N0YXRpYyB2b2lkIGN2bV9vY3RfcnhfcmVmaWxsX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGN2bV9vY3RfcnhfcmVmaWxsX3dvcmssIGN2bV9vY3RfcnhfcmVmaWxsX3dvcmtlcik7CisKK3N0YXRpYyB2b2lkIGN2bV9vY3RfcnhfcmVmaWxsX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JaW50MzJfdCBza2JfdG9fZnJlZSwgdW5kbzsKLQlpbnQgcXVldWVzX3Blcl9wb3J0OwotCWludCBxb3M7Ci0Jc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdjsKLQlzdGF0aWMgaW50IHBvcnQ7CisJLyoKKwkgKiBGUEEgMCBtYXkgaGF2ZSBiZWVuIGRyYWluZWQsIHRyeSB0byByZWZpbGwgaXQgaWYgd2UgbmVlZAorCSAqIG1vcmUgdGhhbiBudW1fcGFja2V0X2J1ZmZlcnMgLyAyLCBvdGhlcndpc2Ugbm9ybWFsIHJlY2VpdmUKKwkgKiBwcm9jZXNzaW5nIHdpbGwgcmVmaWxsIGl0LiAgSWYgaXQgd2VyZSBkcmFpbmVkLCBubyBwYWNrZXRzCisJICogY291bGQgYmUgcmVjZWl2ZWQgc28gY3ZtX29jdF9uYXBpX3BvbGwgd291bGQgbmV2ZXIgYmUKKwkgKiBpbnZva2VkIHRvIGRvIHRoZSByZWZpbGwuCisJICovCisJY3ZtX29jdF9yeF9yZWZpbGxfcG9vbChudW1fcGFja2V0X2J1ZmZlcnMgLyAyKTsKIAotCWlmIChwb3J0ID49IENWTVhfUElQX05VTV9JTlBVVF9QT1JUUykgewotCQkvKgotCQkgKiBBbGwgcG9ydHMgaGF2ZSBiZWVuIHBvbGxlZC4gU3RhcnQgdGhlIG5leHQKLQkJICogaXRlcmF0aW9uIHRocm91Z2ggdGhlIHBvcnRzIGluIG9uZSBzZWNvbmQuCi0JCSAqLwotCQlwb3J0ID0gMDsKLQkJbW9kX3RpbWVyKCZjdm1fb2N0X3BvbGxfdGltZXIsIGppZmZpZXMgKyBIWik7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKCFjdm1fb2N0X2RldmljZVtwb3J0XSkKLQkJZ290byBvdXQ7Ci0KLQlwcml2ID0gbmV0ZGV2X3ByaXYoY3ZtX29jdF9kZXZpY2VbcG9ydF0pOwotCWlmIChwcml2LT5wb2xsKQotCQlwcml2LT5wb2xsKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQotCXF1ZXVlc19wZXJfcG9ydCA9IGN2bXhfcGtvX2dldF9udW1fcXVldWVzKHBvcnQpOwotCS8qIERyYWluIGFueSBwZW5kaW5nIHBhY2tldHMgaW4gdGhlIGZyZWUgbGlzdCAqLwotCWZvciAocW9zID0gMDsgcW9zIDwgcXVldWVzX3Blcl9wb3J0OyBxb3MrKykgewotCQlpZiAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pID09IDApCi0JCQljb250aW51ZTsKLQkJc2tiX3RvX2ZyZWUgPSBjdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIocHJpdi0+ZmF1ICsgcW9zICogNCwKLQkJCQkJCSAgICAgICBNQVhfU0tCX1RPX0ZSRUUpOwotCQl1bmRvID0gc2tiX3RvX2ZyZWUgPiAwID8KLQkJCU1BWF9TS0JfVE9fRlJFRSA6IHNrYl90b19mcmVlICsgTUFYX1NLQl9UT19GUkVFOwotCQlpZiAodW5kbyA+IDApCi0JCQljdm14X2ZhdV9hdG9taWNfYWRkMzIocHJpdi0+ZmF1K3Fvcyo0LCAtdW5kbyk7Ci0JCXNrYl90b19mcmVlID0gLXNrYl90b19mcmVlID4gTUFYX1NLQl9UT19GUkVFID8KLQkJCU1BWF9TS0JfVE9fRlJFRSA6IC1za2JfdG9fZnJlZTsKLQkJY3ZtX29jdF9mcmVlX3R4X3NrYnMocHJpdiwgc2tiX3RvX2ZyZWUsIHFvcywgMSk7Ci0JfQotCWN2bV9vY3RfZGV2aWNlW3BvcnRdLT5uZXRkZXZfb3BzLT5uZG9fZ2V0X3N0YXRzKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQotb3V0OgotCXBvcnQrKzsKLQkvKiBQb2xsIHRoZSBuZXh0IHBvcnQgaW4gYSA1MHRoIG9mIGEgc2Vjb25kLgotCSAgIFRoaXMgc3ByZWFkcyB0aGUgcG9sbGluZyBvZiBwb3J0cyBvdXQgYSBsaXR0bGUgYml0ICovCi0JbW9kX3RpbWVyKCZjdm1fb2N0X3BvbGxfdGltZXIsIGppZmZpZXMgKyBIWiAvIDUwKTsKKwlpZiAoIWF0b21pY19yZWFkKCZjdm1fb2N0X3BvbGxfcXVldWVfc3RvcHBpbmcpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoY3ZtX29jdF9wb2xsX3F1ZXVlLAorCQkJCSAgICZjdm1fb2N0X3J4X3JlZmlsbF93b3JrLCBIWik7CiB9CiAKLS8qKgotICogQ29uZmlndXJlIGNvbW1vbiBoYXJkd2FyZSBmb3IgYWxsIGludGVyZmFjZXMKLSAqLworc3RhdGljIHZvaWQgY3ZtX29jdF9wZXJpb2RpY193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQkJCSAgICBzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0LAorCQkJCQkJICAgIHBvcnRfcGVyaW9kaWNfd29yay53b3JrKTsKKworCWlmIChwcml2LT5wb2xsKQorCQlwcml2LT5wb2xsKGN2bV9vY3RfZGV2aWNlW3ByaXYtPnBvcnRdKTsKKworCWN2bV9vY3RfZGV2aWNlW3ByaXYtPnBvcnRdLT5uZXRkZXZfb3BzLT5uZG9fZ2V0X3N0YXRzKGN2bV9vY3RfZGV2aWNlW3ByaXYtPnBvcnRdKTsKKworCWlmICghYXRvbWljX3JlYWQoJmN2bV9vY3RfcG9sbF9xdWV1ZV9zdG9wcGluZykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhjdm1fb2N0X3BvbGxfcXVldWUsICZwcml2LT5wb3J0X3BlcmlvZGljX3dvcmssIEhaKTsKKyB9CisKIHN0YXRpYyBfX2luaXQgdm9pZCBjdm1fb2N0X2NvbmZpZ3VyZV9jb21tb25faHcodm9pZCkKIHsKLQlpbnQgcjsKIAkvKiBTZXR1cCB0aGUgRlBBICovCiAJY3ZteF9mcGFfZW5hYmxlKCk7CiAJY3ZtX29jdF9tZW1fZmlsbF9mcGEoQ1ZNWF9GUEFfUEFDS0VUX1BPT0wsIENWTVhfRlBBX1BBQ0tFVF9QT09MX1NJWkUsCkBAIC0yMDUsMjggKzE5MCwxMyBAQAogCQljdm14X2hlbHBlcl9zZXR1cF9yZWQobnVtX3BhY2tldF9idWZmZXJzIC8gNCwKIAkJCQkgICAgICBudW1fcGFja2V0X2J1ZmZlcnMgLyA4KTsKIAotCS8qIEVuYWJsZSB0aGUgTUlJIGludGVyZmFjZSAqLwotCWlmICghb2N0ZW9uX2lzX3NpbXVsYXRpb24oKSkKLQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9TTUlYX0VOKDApLCAxKTsKLQotCS8qIFJlZ2lzdGVyIGFuIElSUSBoYW5kZXIgZm9yIHRvIHJlY2VpdmUgUE9XIGludGVycnVwdHMgKi8KLQlyID0gcmVxdWVzdF9pcnEoT0NURU9OX0lSUV9XT1JLUTAgKyBwb3dfcmVjZWl2ZV9ncm91cCwKLQkJCWN2bV9vY3RfZG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgIkV0aGVybmV0IiwKLQkJCWN2bV9vY3RfZGV2aWNlKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgMAotCWlmIChVU0VfTVVMVElDT1JFX1JFQ0VJVkUpIHsKLQkJaXJxX3NldF9hZmZpbml0eShPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwLAotCQkJCSBjcHVfb25saW5lX21hc2spOwotCX0KLSNlbmRpZgogfQogCiAvKioKLSAqIEZyZWUgYSB3b3JrIHF1ZXVlIGVudHJ5IHJlY2VpdmVkIGluIGEgaW50ZXJjZXB0IGNhbGxiYWNrLgorICogY3ZtX29jdF9mcmVlX3dvcmstIEZyZWUgYSB3b3JrIHF1ZXVlIGVudHJ5CiAgKgotICogQHdvcmtfcXVldWVfZW50cnk6Ci0gKiAgICAgICAgICAgICAgIFdvcmsgcXVldWUgZW50cnkgdG8gZnJlZQorICogQHdvcmtfcXVldWVfZW50cnk6IFdvcmsgcXVldWUgZW50cnkgdG8gZnJlZQorICoKICAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzLCBOZWdhdGl2ZSBvbiBmYWlsdXJlLgogICovCiBpbnQgY3ZtX29jdF9mcmVlX3dvcmsodm9pZCAqd29ya19xdWV1ZV9lbnRyeSkKQEAgLTI1Myw5ICsyMjMsOSBAQAogRVhQT1JUX1NZTUJPTChjdm1fb2N0X2ZyZWVfd29yayk7CiAKIC8qKgotICogR2V0IHRoZSBsb3cgbGV2ZWwgZXRoZXJuZXQgc3RhdGlzdGljcwotICoKKyAqIGN2bV9vY3RfY29tbW9uX2dldF9zdGF0cyAtIGdldCB0aGUgbG93IGxldmVsIGV0aGVybmV0IHN0YXRpc3RpY3MKICAqIEBkZXY6ICAgIERldmljZSB0byBnZXQgdGhlIHN0YXRpc3RpY3MgZnJvbQorICoKICAqIFJldHVybnMgUG9pbnRlciB0byB0aGUgc3RhdGlzdGljcwogICovCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmN2bV9vY3RfY29tbW9uX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMjk5LDggKzI2OSw3IEBACiB9CiAKIC8qKgotICogQ2hhbmdlIHRoZSBsaW5rIE1UVS4gVW5pbXBsZW1lbnRlZAotICoKKyAqIGN2bV9vY3RfY29tbW9uX2NoYW5nZV9tdHUgLSBjaGFuZ2UgdGhlIGxpbmsgTVRVCiAgKiBAZGV2OiAgICAgRGV2aWNlIHRvIGNoYW5nZQogICogQG5ld19tdHU6IFRoZSBuZXcgTVRVCiAgKgpAQCAtMzY0LDggKzMzMyw3IEBACiB9CiAKIC8qKgotICogU2V0IHRoZSBtdWx0aWNhc3QgbGlzdC4gQ3VycmVudGx5IHVuaW1wbGVtZW50ZWQuCi0gKgorICogY3ZtX29jdF9jb21tb25fc2V0X211bHRpY2FzdF9saXN0IC0gc2V0IHRoZSBtdWx0aWNhc3QgbGlzdAogICogQGRldjogICAgRGV2aWNlIHRvIHdvcmsgb24KICAqLwogc3RhdGljIHZvaWQgY3ZtX29jdF9jb21tb25fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC00MjAsMTAgKzM4OCwxMCBAQAogfQogCiAvKioKLSAqIFNldCB0aGUgaGFyZHdhcmUgTUFDIGFkZHJlc3MgZm9yIGEgZGV2aWNlCi0gKgotICogQGRldjogICAgRGV2aWNlIHRvIGNoYW5nZSB0aGUgTUFDIGFkZHJlc3MgZm9yCi0gKiBAYWRkcjogICBBZGRyZXNzIHN0cnVjdHVyZSB0byBjaGFuZ2UgaXQgdG9vLiBNQUMgYWRkcmVzcyBpcyBhZGRyICsgMi4KKyAqIGN2bV9vY3RfY29tbW9uX3NldF9tYWNfYWRkcmVzcyAtIHNldCB0aGUgaGFyZHdhcmUgTUFDIGFkZHJlc3MgZm9yIGEgZGV2aWNlCisgKiBAZGV2OiAgICBUaGUgZGV2aWNlIGluIHF1ZXN0aW9uLgorICogQGFkZHI6ICAgQWRkcmVzcyBzdHJ1Y3R1cmUgdG8gY2hhbmdlIGl0IHRvby4KKwogICogUmV0dXJucyBaZXJvIG9uIHN1Y2Nlc3MKICAqLwogc3RhdGljIGludCBjdm1fb2N0X2NvbW1vbl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKQEAgLTQ3MCw5ICs0MzgsOSBAQAogfQogCiAvKioKLSAqIFBlciBuZXR3b3JrIGRldmljZSBpbml0aWFsaXphdGlvbgotICoKKyAqIGN2bV9vY3RfY29tbW9uX2luaXQgLSBwZXIgbmV0d29yayBkZXZpY2UgaW5pdGlhbGl6YXRpb24KICAqIEBkZXY6ICAgIERldmljZSB0byBpbml0aWFsaXplCisgKgogICogUmV0dXJucyBaZXJvIG9uIHN1Y2Nlc3MKICAqLwogaW50IGN2bV9vY3RfY29tbW9uX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTUxMCw4ICs0NzgsMTEgQEAKIAkgICAgJiYgKGFsd2F5c191c2VfcG93IHx8IHN0cnN0cihwb3dfc2VuZF9saXN0LCBkZXYtPm5hbWUpKSkKIAkJcHJpdi0+cXVldWUgPSAtMTsKIAotCWlmIChwcml2LT5xdWV1ZSAhPSAtMSAmJiBVU0VfSFdfVENQVURQX0NIRUNLU1VNKQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKKwlpZiAocHJpdi0+cXVldWUgIT0gLTEpIHsKKwkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOworCQlpZiAoVVNFX0hXX1RDUFVEUF9DSEVDS1NVTSkKKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOworCX0KIAogCS8qIFdlIGRvIG91ciBvd24gbG9ja2luZywgTGludXggZG9lc24ndCBuZWVkIHRvICovCiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7CkBAIC02MjUsMTIgKzU5Niw2IEBACiAKIGV4dGVybiB2b2lkIG9jdGVvbl9tZGlvYnVzX2ZvcmNlX21vZF9kZXBlbmNlbmN5KHZvaWQpOwogCi0vKioKLSAqIE1vZHVsZS8gZHJpdmVyIGluaXRpYWxpemF0aW9uLiBDcmVhdGVzIHRoZSBsaW51eCBuZXR3b3JrCi0gKiBkZXZpY2VzLgotICoKLSAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzCi0gKi8KIHN0YXRpYyBpbnQgX19pbml0IGN2bV9vY3RfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgbnVtX2ludGVyZmFjZXM7CkBAIC02NDgsOCArNjEzLDEyIEBACiAJZWxzZQogCQljdm1fb2N0X21hY19hZGRyX29mZnNldCA9IDA7CiAKLQljdm1fb2N0X3Byb2NfaW5pdGlhbGl6ZSgpOwotCWN2bV9vY3RfcnhfaW5pdGlhbGl6ZSgpOworCWN2bV9vY3RfcG9sbF9xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJvY3Rlb24tZXRoZXJuZXQiKTsKKwlpZiAoY3ZtX29jdF9wb2xsX3F1ZXVlID09IE5VTEwpIHsKKwkJcHJfZXJyKCJvY3Rlb24tZXRoZXJuZXQ6IENhbm5vdCBjcmVhdGUgd29ya3F1ZXVlIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCWN2bV9vY3RfY29uZmlndXJlX2NvbW1vbl9odygpOwogCiAJY3ZteF9oZWxwZXJfaW5pdGlhbGl6ZV9wYWNrZXRfaW9fZ2xvYmFsKCk7CkBAIC02ODIsNiArNjUxLDkgQEAKIAkgKi8KIAljdm14X2ZhdV9hdG9taWNfd3JpdGUzMihGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsIDApOwogCisJLyogSW5pdGlhbGl6ZSB0aGUgRkFVIHVzZWQgZm9yIGNvdW50aW5nIHR4IFNLQnMgdGhhdCBuZWVkIHRvIGJlIGZyZWVkICovCisJY3ZteF9mYXVfYXRvbWljX3dyaXRlMzIoRkFVX1RPVEFMX1RYX1RPX0NMRUFOLCAwKTsKKwogCWlmICgocG93X3NlbmRfZ3JvdXAgIT0gLTEpKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJCXByX2luZm8oIlx0Q29uZmlndXJpbmcgZGV2aWNlIGZvciBQT1cgb25seSBhY2Nlc3NcbiIpOwpAQCAtNjg5LDcgKzY2MSw2IEBACiAJCWlmIChkZXYpIHsKIAkJCS8qIEluaXRpYWxpemUgdGhlIGRldmljZSBwcml2YXRlIHN0cnVjdHVyZS4gKi8KIAkJCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCQkJbWVtc2V0KHByaXYsIDAsIHNpemVvZihzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0KSk7CiAKIAkJCWRldi0+bmV0ZGV2X29wcyA9ICZjdm1fb2N0X3Bvd19uZXRkZXZfb3BzOwogCQkJcHJpdi0+aW1vZGUgPSBDVk1YX0hFTFBFUl9JTlRFUkZBQ0VfTU9ERV9ESVNBQkxFRDsKQEAgLTcwMCwxOSArNjcxLDE2IEBACiAJCQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pOwogCiAJCQlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgPCAwKSB7Ci0JCQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZXRoZXJuZXQgIgotCQkJCQkgImRldmljZSBmb3IgUE9XXG4iKTsKKwkJCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBldGhlcm5ldCBkZXZpY2UgZm9yIFBPV1xuIik7CiAJCQkJa2ZyZWUoZGV2KTsKIAkJCX0gZWxzZSB7CiAJCQkJY3ZtX29jdF9kZXZpY2VbQ1ZNWF9QSVBfTlVNX0lOUFVUX1BPUlRTXSA9IGRldjsKLQkJCQlwcl9pbmZvKCIlczogUE9XIHNlbmQgZ3JvdXAgJWQsIHJlY2VpdmUgIgotCQkJCQkiZ3JvdXAgJWRcbiIsCi0JCQkJICAgICBkZXYtPm5hbWUsIHBvd19zZW5kX2dyb3VwLAotCQkJCSAgICAgcG93X3JlY2VpdmVfZ3JvdXApOworCQkJCXByX2luZm8oIiVzOiBQT1cgc2VuZCBncm91cCAlZCwgcmVjZWl2ZSBncm91cCAlZFxuIiwKKwkJCQkJZGV2LT5uYW1lLCBwb3dfc2VuZF9ncm91cCwKKwkJCQkJcG93X3JlY2VpdmVfZ3JvdXApOwogCQkJfQogCQl9IGVsc2UgewotCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlICIKLQkJCQkgImZvciBQT1dcbiIpOworCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlIGZvciBQT1dcbiIpOwogCQl9CiAJfQogCkBAIC03MzAsMTcgKzY5OCwxNSBAQAogCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9CiAJCQkgICAgYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBvY3Rlb25fZXRoZXJuZXQpKTsKIAkJCWlmICghZGV2KSB7Ci0JCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlICIKLQkJCQkJICJmb3IgcG9ydCAlZFxuIiwgcG9ydCk7CisJCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlIGZvciBwb3J0ICVkXG4iLCBwb3J0KTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmIChkaXNhYmxlX2NvcmVfcXVldWVpbmcpCi0JCQkJZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwogCiAJCQkvKiBJbml0aWFsaXplIHRoZSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3R1cmUuICovCiAJCQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJCW1lbXNldChwcml2LCAwLCBzaXplb2Yoc3RydWN0IG9jdGVvbl9ldGhlcm5ldCkpOwogCisJCQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+cG9ydF9wZXJpb2RpY193b3JrLAorCQkJCQkgIGN2bV9vY3RfcGVyaW9kaWNfd29ya2VyKTsKIAkJCXByaXYtPmltb2RlID0gaW1vZGU7CiAJCQlwcml2LT5wb3J0ID0gcG9ydDsKIAkJCXByaXYtPnF1ZXVlID0gY3ZteF9wa29fZ2V0X2Jhc2VfcXVldWUocHJpdi0+cG9ydCk7CkBAIC04MDMsNDQgKzc2OSwyNSBAQAogCQkJCWZhdSAtPQogCQkJCSAgICBjdm14X3Brb19nZXRfbnVtX3F1ZXVlcyhwcml2LT5wb3J0KSAqCiAJCQkJICAgIHNpemVvZih1aW50MzJfdCk7CisJCQkJcXVldWVfZGVsYXllZF93b3JrKGN2bV9vY3RfcG9sbF9xdWV1ZSwKKwkJCQkJCSAgICZwcml2LT5wb3J0X3BlcmlvZGljX3dvcmssIEhaKTsKIAkJCX0KIAkJfQogCX0KIAotCWlmIChJTlRFUlJVUFRfTElNSVQpIHsKLQkJLyoKLQkJICogU2V0IHRoZSBQT1cgdGltZXIgcmF0ZSB0byBnaXZlIGFuIGludGVycnVwdCBhdCBtb3N0Ci0JCSAqIElOVEVSUlVQVF9MSU1JVCB0aW1lcyBwZXIgc2Vjb25kLgotCQkgKi8KLQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5UX1BDLAotCQkJICAgICAgIG9jdGVvbl9ib290aW5mby0+ZWNsb2NrX2h6IC8gKElOVEVSUlVQVF9MSU1JVCAqCi0JCQkJCQkJICAgICAxNiAqIDI1NikgPDwgOCk7CisJY3ZtX29jdF90eF9pbml0aWFsaXplKCk7CisJY3ZtX29jdF9yeF9pbml0aWFsaXplKCk7CiAKLQkJLyoKLQkJICogRW5hYmxlIFBPVyB0aW1lciBpbnRlcnJ1cHQuIEl0IHdpbGwgY291bnQgd2hlbgotCQkgKiB0aGVyZSBhcmUgcGFja2V0cyBhdmFpbGFibGUuCi0JCSAqLwotCQljdm14X3dyaXRlX2NzcihDVk1YX1BPV19XUV9JTlRfVEhSWChwb3dfcmVjZWl2ZV9ncm91cCksCi0JCQkgICAgICAgMHgxZnVsIDw8IDI0KTsKLQl9IGVsc2UgewotCQkvKiBFbmFibGUgUE9XIGludGVycnVwdCB3aGVuIG91ciBwb3J0IGhhcyBhdCBsZWFzdCBvbmUgcGFja2V0ICovCi0JCWN2bXhfd3JpdGVfY3NyKENWTVhfUE9XX1dRX0lOVF9USFJYKHBvd19yZWNlaXZlX2dyb3VwKSwgMHgxMDAxKTsKLQl9CisJLyoKKwkgKiAxNTAgdVM6IGFib3V0IDEwIDE1MDAtYnl0ZSBwYWNrdGVzIGF0IDFHRS4KKwkgKi8KKwljdm1fb2N0X3R4X3BvbGxfaW50ZXJ2YWwgPSAxNTAgKiAob2N0ZW9uX2dldF9jbG9ja19yYXRlKCkgLyAxMDAwMDAwKTsKIAotCS8qIEVuYWJsZSB0aGUgcG9sbCB0aW1lciBmb3IgY2hlY2tpbmcgUkdNSUkgc3RhdHVzICovCi0JaW5pdF90aW1lcigmY3ZtX29jdF9wb2xsX3RpbWVyKTsKLQljdm1fb2N0X3BvbGxfdGltZXIuZGF0YSA9IDA7Ci0JY3ZtX29jdF9wb2xsX3RpbWVyLmZ1bmN0aW9uID0gY3ZtX2RvX3RpbWVyOwotCW1vZF90aW1lcigmY3ZtX29jdF9wb2xsX3RpbWVyLCBqaWZmaWVzICsgSFopOworCXF1ZXVlX2RlbGF5ZWRfd29yayhjdm1fb2N0X3BvbGxfcXVldWUsICZjdm1fb2N0X3J4X3JlZmlsbF93b3JrLCBIWik7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBNb2R1bGUgLyBkcml2ZXIgc2h1dGRvd24KLSAqCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcwotICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3ZtX29jdF9jbGVhbnVwX21vZHVsZSh2b2lkKQogewogCWludCBwb3J0OwpAQCAtODUzLDIyICs4MDAsMzEgQEAKIAkvKiBGcmVlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCWZyZWVfaXJxKE9DVEVPTl9JUlFfV09SS1EwICsgcG93X3JlY2VpdmVfZ3JvdXAsIGN2bV9vY3RfZGV2aWNlKTsKIAotCWRlbF90aW1lcigmY3ZtX29jdF9wb2xsX3RpbWVyKTsKKwlhdG9taWNfaW5jX3JldHVybigmY3ZtX29jdF9wb2xsX3F1ZXVlX3N0b3BwaW5nKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmN2bV9vY3RfcnhfcmVmaWxsX3dvcmspOworCiAJY3ZtX29jdF9yeF9zaHV0ZG93bigpOworCWN2bV9vY3RfdHhfc2h1dGRvd24oKTsKKwogCWN2bXhfcGtvX2Rpc2FibGUoKTsKIAogCS8qIEZyZWUgdGhlIGV0aGVybmV0IGRldmljZXMgKi8KIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgVE9UQUxfTlVNQkVSX09GX1BPUlRTOyBwb3J0KyspIHsKIAkJaWYgKGN2bV9vY3RfZGV2aWNlW3BvcnRdKSB7Ci0JCQljdm1fb2N0X3R4X3NodXRkb3duKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQkJCXVucmVnaXN0ZXJfbmV0ZGV2KGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQkJCWtmcmVlKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjdm1fb2N0X2RldmljZVtwb3J0XTsKKwkJCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5wb3J0X3BlcmlvZGljX3dvcmspOworCisJCQljdm1fb2N0X3R4X3NodXRkb3duX2RldihkZXYpOworCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwkJCWtmcmVlKGRldik7CiAJCQljdm1fb2N0X2RldmljZVtwb3J0XSA9IE5VTEw7CiAJCX0KIAl9CiAKKwlkZXN0cm95X3dvcmtxdWV1ZShjdm1fb2N0X3BvbGxfcXVldWUpOworCiAJY3ZteF9wa29fc2h1dGRvd24oKTsKLQljdm1fb2N0X3Byb2Nfc2h1dGRvd24oKTsKIAogCWN2bXhfaXBkX2ZyZWVfcHRyKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vb2N0ZW9uLWV0aGVybmV0LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL29jdGVvbi1ldGhlcm5ldC5oCmluZGV4IDQwMmExNWIuLmQ1ODE5MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vb2N0ZW9uLWV0aGVybmV0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9vY3Rlb24tZXRoZXJuZXQuaApAQCAtNCw3ICs0LDcgQEAKICAqIENvbnRhY3Q6IHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT0NURU9OIFNESwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENhdml1bSBOZXR3b3JrcworICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgQ2F2aXVtIE5ldHdvcmtzCiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKQEAgLTU3LDU4ICs1NywxMiBAQAogCXVpbnQ2NF90IGxpbmtfaW5mbzsKIAkvKiBDYWxsZWQgcGVyaW9kaWNhbGx5IHRvIGNoZWNrIGxpbmsgc3RhdHVzICovCiAJdm9pZCAoKnBvbGwpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCXBvcnRfcGVyaW9kaWNfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcG9ydF93b3JrOwkvKiBtYXkgYmUgdW51c2VkLiAqLwogfTsKIAotLyoqCi0gKiBGcmVlIGEgd29yayBxdWV1ZSBlbnRyeSByZWNlaXZlZCBpbiBhIGludGVyY2VwdCBjYWxsYmFjay4KLSAqCi0gKiBAd29ya19xdWV1ZV9lbnRyeToKLSAqICAgICAgICAgICAgICAgV29yayBxdWV1ZSBlbnRyeSB0byBmcmVlCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgTmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqLwogaW50IGN2bV9vY3RfZnJlZV93b3JrKHZvaWQgKndvcmtfcXVldWVfZW50cnkpOwogCi0vKioKLSAqIFRyYW5zbWl0IGEgd29yayBxdWV1ZSBlbnRyeSBvdXQgb2YgdGhlIGV0aGVybmV0IHBvcnQuIEJvdGgKLSAqIHRoZSB3b3JrIHF1ZXVlIGVudHJ5IGFuZCB0aGUgcGFja2V0IGRhdGEgY2FuIG9wdGlvbmFsbHkgYmUKLSAqIGZyZWVkLiBUaGUgd29yayB3aWxsIGJlIGZyZWVkIG9uIGVycm9yIGFzIHdlbGwuCi0gKgotICogQGRldjogICAgIERldmljZSB0byB0cmFuc21pdCBvdXQuCi0gKiBAd29ya19xdWV1ZV9lbnRyeToKLSAqICAgICAgICAgICAgICAgIFdvcmsgcXVldWUgZW50cnkgdG8gc2VuZAotICogQGRvX2ZyZWU6IFRydWUgaWYgdGhlIHdvcmsgcXVldWUgZW50cnkgYW5kIHBhY2tldCBkYXRhIHNob3VsZCBiZQotICogICAgICAgICAgICAgICAgZnJlZWQuIElmIGZhbHNlLCBuZWl0aGVyIHdpbGwgYmUgZnJlZWQuCi0gKiBAcW9zOiAgICAgSW5kZXggaW50byB0aGUgcXVldWVzIGZvciB0aGlzIHBvcnQgdG8gdHJhbnNtaXQgb24uIFRoaXMKLSAqICAgICAgICAgICAgICAgIGlzIHVzZWQgdG8gaW1wbGVtZW50IFFvUyBpZiB0aGVpciBhcmUgbXVsdGlwbGUgcXVldWVzIHBlcgotICogICAgICAgICAgICAgICAgcG9ydC4gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIHRoZSBudW1iZXIgb2YKLSAqICAgICAgICAgICAgICAgIHF1ZXVlcyBwZXIgcG9ydCBtaW51cyAxLiBWYWx1ZXMgb3V0c2lkZSBvZiB0aGlzIHJhbmdlIHdpbGwKLSAqICAgICAgICAgICAgICAgIGJlIGNoYW5nZSB0byB6ZXJvLgotICoKLSAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlLgotICovCi1pbnQgY3ZtX29jdF90cmFuc21pdF9xb3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqd29ya19xdWV1ZV9lbnRyeSwKLQkJCSBpbnQgZG9fZnJlZSwgaW50IHFvcyk7Ci0KLS8qKgotICogVHJhbnNtaXQgYSB3b3JrIHF1ZXVlIGVudHJ5IG91dCBvZiB0aGUgZXRoZXJuZXQgcG9ydC4gQm90aAotICogdGhlIHdvcmsgcXVldWUgZW50cnkgYW5kIHRoZSBwYWNrZXQgZGF0YSBjYW4gb3B0aW9uYWxseSBiZQotICogZnJlZWQuIFRoZSB3b3JrIHdpbGwgYmUgZnJlZWQgb24gZXJyb3IgYXMgd2VsbC4gVGhpcyBzaW1wbHkKLSAqIHdyYXBzIGN2bXhfb2N0X3RyYW5zbWl0X3FvcygpIGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eS4KLSAqCi0gKiBAZGV2OiAgICAgRGV2aWNlIHRvIHRyYW5zbWl0IG91dC4KLSAqIEB3b3JrX3F1ZXVlX2VudHJ5OgotICogICAgICAgICAgICAgICAgV29yayBxdWV1ZSBlbnRyeSB0byBzZW5kCi0gKiBAZG9fZnJlZTogVHJ1ZSBpZiB0aGUgd29yayBxdWV1ZSBlbnRyeSBhbmQgcGFja2V0IGRhdGEgc2hvdWxkIGJlCi0gKiAgICAgICAgICAgICAgICBmcmVlZC4gSWYgZmFsc2UsIG5laXRoZXIgd2lsbCBiZSBmcmVlZC4KLSAqCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgY3ZtX29jdF90cmFuc21pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHZvaWQgKndvcmtfcXVldWVfZW50cnksIGludCBkb19mcmVlKQotewotCXJldHVybiBjdm1fb2N0X3RyYW5zbWl0X3FvcyhkZXYsIHdvcmtfcXVldWVfZW50cnksIGRvX2ZyZWUsIDApOwotfQotCiBleHRlcm4gaW50IGN2bV9vY3RfcmdtaWlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGN2bV9vY3RfcmdtaWlfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBjdm1fb2N0X3JnbWlpX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMzQsNSArODgsMTEgQEAKIGV4dGVybiBpbnQgcG93X3JlY2VpdmVfZ3JvdXA7CiBleHRlcm4gY2hhciBwb3dfc2VuZF9saXN0W107CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmN2bV9vY3RfZGV2aWNlW107CitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmN2bV9vY3RfcG9sbF9xdWV1ZTsKK2V4dGVybiBhdG9taWNfdCBjdm1fb2N0X3BvbGxfcXVldWVfc3RvcHBpbmc7CitleHRlcm4gdTY0IGN2bV9vY3RfdHhfcG9sbF9pbnRlcnZhbDsKKworZXh0ZXJuIGludCBtYXhfcnhfY3B1czsKK2V4dGVybiBpbnQgcnhfbmFwaV93ZWlnaHQ7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9waGlzb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9waGlzb24vcGhpc29uLmMKaW5kZXggMzgxN2Q3NC4uZmNiYTc4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9waGlzb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcGhpc29uL3BoaXNvbi5jCkBAIC02Miw3ICs2Miw3IEBACiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CiAKLQlyZXQgPSBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZwaGlzb25fc2h0LCBOVUxMKTsKKwlyZXQgPSBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZwaGlzb25fc2h0LCBOVUxMLCAwKTsKIAogCWRldl9kYmcoJnBkZXYtPmRldiwgInBoaXNvbl9pbml0X29uZSgpLCByZXQgPSAleFxuIiwgcmV0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5jIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5jCmluZGV4IDEzM2I4NmMuLjJmZmYwYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmMKQEAgLTUsNyArNSw3IEBACiAgKiBBdXRob3I6IEJveW9kIGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaAppbmRleCAzOGQwYzMzLi4wMmI0ZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5oCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yOiBHZSBXYW5nLCBnZXdhbmdAc2lsaWNvbm1vdGlvbi5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwppbmRleCAxNjFkYmM5Li5hNGY2ZjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCkBAIC02LDcgKzYsNyBAQAogICogCSAgICBCb3lvZCBib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmggYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmgKaW5kZXggN2YyYzM0MS4uN2VlNTY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuaApAQCAtNiw3ICs2LDcgQEAKICAqCSAJQm95b2QgYm95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCmluZGV4IDZlOGJjZGYuLmE2NzgxODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKQEAgLTEzMTIsOSArMTMxMiw5IEBACiAJdm9pZCBfX3VzZXIgKmFkZHIgPSBhcy0+dXNlcnVyYjsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmIChhcy0+dXNlcmJ1ZmZlcikKKwlpZiAoYXMtPnVzZXJidWZmZXIgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKQogCQlpZiAoY29weV90b191c2VyKGFzLT51c2VyYnVmZmVyLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJCQkgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSkKKwkJCQkgdXJiLT5hY3R1YWxfbGVuZ3RoKSkKIAkJCWdvdG8gZXJyX291dDsKIAlpZiAocHV0X3VzZXIoYXMtPnN0YXR1cywgJnVzZXJ1cmItPnN0YXR1cykpCiAJCWdvdG8gZXJyX291dDsKQEAgLTEzMzQsMTQgKzEzMzQsMTEgQEAKIAkJfQogCX0KIAotCWZyZWVfYXN5bmMoYXMpOwotCiAJaWYgKHB1dF91c2VyKGFkZHIsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKWFyZykpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogCiBlcnJfb3V0OgotCWZyZWVfYXN5bmMoYXMpOwogCXJldHVybiAtRUZBVUxUOwogfQogCkBAIC0xMzcxLDggKzEzNjgsMTEgQEAKIHN0YXRpYyBpbnQgcHJvY19yZWFwdXJiKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQogewogCXN0cnVjdCBhc3luYyAqYXMgPSByZWFwX2FzKHBzKTsKLQlpZiAoYXMpCi0JCXJldHVybiBwcm9jZXNzY29tcGwoYXMsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKWFyZyk7CisJaWYgKGFzKSB7CisJCWludCByZXR2YWwgPSBwcm9jZXNzY29tcGwoYXMsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKWFyZyk7CisJCWZyZWVfYXN5bmMoYXMpOworCQlyZXR1cm4gcmV0dmFsOworCX0KIAlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCXJldHVybiAtRUlOVFI7CiAJcmV0dXJuIC1FSU87CkBAIC0xMzgwLDExICsxMzgwLDE2IEBACiAKIHN0YXRpYyBpbnQgcHJvY19yZWFwdXJibm9uYmxvY2soc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCiB7CisJaW50IHJldHZhbDsKIAlzdHJ1Y3QgYXN5bmMgKmFzOwogCi0JaWYgKCEoYXMgPSBhc3luY19nZXRjb21wbGV0ZWQocHMpKSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0JcmV0dXJuIHByb2Nlc3Njb21wbChhcywgKHZvaWQgX191c2VyICogX191c2VyICopYXJnKTsKKwlhcyA9IGFzeW5jX2dldGNvbXBsZXRlZChwcyk7CisJcmV0dmFsID0gLUVBR0FJTjsKKwlpZiAoYXMpIHsKKwkJcmV0dmFsID0gcHJvY2Vzc2NvbXBsKGFzLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilhcmcpOworCQlmcmVlX2FzeW5jKGFzKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKQEAgLTE0NzUsOSArMTQ4MCw5IEBACiAJdm9pZCBfX3VzZXIgKmFkZHIgPSBhcy0+dXNlcnVyYjsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmIChhcy0+dXNlcmJ1ZmZlcikKKwlpZiAoYXMtPnVzZXJidWZmZXIgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKQogCQlpZiAoY29weV90b191c2VyKGFzLT51c2VyYnVmZmVyLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJCQkgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSkKKwkJCQkgdXJiLT5hY3R1YWxfbGVuZ3RoKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCWlmIChwdXRfdXNlcihhcy0+c3RhdHVzLCAmdXNlcnVyYi0+c3RhdHVzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xNDk3LDcgKzE1MDIsNiBAQAogCQl9CiAJfQogCi0JZnJlZV9hc3luYyhhcyk7CiAJaWYgKHB1dF91c2VyKHB0cl90b19jb21wYXQoYWRkciksICh1MzIgX191c2VyICopYXJnKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CkBAIC0xNTA2LDggKzE1MTAsMTEgQEAKIHN0YXRpYyBpbnQgcHJvY19yZWFwdXJiX2NvbXBhdChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKIHsKIAlzdHJ1Y3QgYXN5bmMgKmFzID0gcmVhcF9hcyhwcyk7Ci0JaWYgKGFzKQotCQlyZXR1cm4gcHJvY2Vzc2NvbXBsX2NvbXBhdChhcywgKHZvaWQgX191c2VyICogX191c2VyICopYXJnKTsKKwlpZiAoYXMpIHsKKwkJaW50IHJldHZhbCA9IHByb2Nlc3Njb21wbF9jb21wYXQoYXMsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKWFyZyk7CisJCWZyZWVfYXN5bmMoYXMpOworCQlyZXR1cm4gcmV0dmFsOworCX0KIAlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCXJldHVybiAtRUlOVFI7CiAJcmV0dXJuIC1FSU87CkBAIC0xNTE1LDExICsxNTIyLDE2IEBACiAKIHN0YXRpYyBpbnQgcHJvY19yZWFwdXJibm9uYmxvY2tfY29tcGF0KHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQogeworCWludCByZXR2YWw7CiAJc3RydWN0IGFzeW5jICphczsKIAotCWlmICghKGFzID0gYXN5bmNfZ2V0Y29tcGxldGVkKHBzKSkpCi0JCXJldHVybiAtRUFHQUlOOwotCXJldHVybiBwcm9jZXNzY29tcGxfY29tcGF0KGFzLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilhcmcpOworCXJldHZhbCA9IC1FQUdBSU47CisJYXMgPSBhc3luY19nZXRjb21wbGV0ZWQocHMpOworCWlmIChhcykgeworCQlyZXR2YWwgPSBwcm9jZXNzY29tcGxfY29tcGF0KGFzLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilhcmcpOworCQlmcmVlX2FzeW5jKGFzKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwppbmRleCA2MGE0NWYxLi5mMmYwNTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKQEAgLTEwMjIsNiArMTAyMiwxNCBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJLyogTm9uLXJvb3QgZGV2aWNlcyBvbiBhIGZ1bGwvbG93LXNwZWVkIGJ1cyBtdXN0IHdhaXQgZm9yIHRoZWlyCisJICogY29tcGFuaW9uIGhpZ2gtc3BlZWQgcm9vdCBodWIsIGluIGNhc2UgYSBoYW5kb2ZmIGlzIG5lZWRlZC4KKwkgKi8KKwlpZiAoIShtc2cuZXZlbnQgJiBQTV9FVkVOVF9BVVRPKSAmJiB1ZGV2LT5wYXJlbnQgJiYKKwkJCXVkZXYtPmJ1cy0+aHNfY29tcGFuaW9uKQorCQlkZXZpY2VfcG1fd2FpdF9mb3JfZGV2KCZ1ZGV2LT5kZXYsCisJCQkJJnVkZXYtPmJ1cy0+aHNfY29tcGFuaW9uLT5yb290X2h1Yi0+ZGV2KTsKKwogCWlmICh1ZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfUkVTRVRfUkVTVU1FKQogCQl1ZGV2LT5yZXNldF9yZXN1bWUgPSAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKaW5kZXggZmRmYWE3OC4uZDI2YjllYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwpAQCAtMTg2LDYgKzE4Niw3IEBACiAJZXBfZGV2LT5kZXYucGFyZW50ID0gcGFyZW50OwogCWVwX2Rldi0+ZGV2LnJlbGVhc2UgPSBlcF9kZXZpY2VfcmVsZWFzZTsKIAlkZXZfc2V0X25hbWUoJmVwX2Rldi0+ZGV2LCAiZXBfJTAyeCIsIGVuZHBvaW50LT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOworCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmZXBfZGV2LT5kZXYpOwogCiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKCZlcF9kZXYtPmRldik7CiAJaWYgKHJldHZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKaW5kZXggMmRjZjkwNi4uMTUyODY1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTM3LDYgKzM4LDEyMiBAQAogCiAvKiBQQ0ktYmFzZWQgSENzIGFyZSBjb21tb24sIGJ1dCBwbGVudHkgb2Ygbm9uLVBDSSBIQ3MgYXJlIHVzZWQgdG9vICovCiAKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKworLyogQ29vcmRpbmF0ZSBoYW5kb2ZmcyBiZXR3ZWVuIEVIQ0kgYW5kIGNvbXBhbmlvbiBjb250cm9sbGVycworICogZHVyaW5nIHN5c3RlbSByZXN1bWUKKyAqLworCitzdGF0aWMgREVGSU5FX01VVEVYKGNvbXBhbmlvbnNfbXV0ZXgpOworCisjZGVmaW5lIENMX1VIQ0kJCVBDSV9DTEFTU19TRVJJQUxfVVNCX1VIQ0kKKyNkZWZpbmUgQ0xfT0hDSQkJUENJX0NMQVNTX1NFUklBTF9VU0JfT0hDSQorI2RlZmluZSBDTF9FSENJCQlQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9FSENJCisKK2VudW0gY29tcGFuaW9uX2FjdGlvbiB7CisJU0VUX0hTX0NPTVBBTklPTiwgQ0xFQVJfSFNfQ09NUEFOSU9OLCBXQUlUX0ZPUl9DT01QQU5JT05TCit9OworCitzdGF0aWMgdm9pZCBjb21wYW5pb25fY29tbW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgdXNiX2hjZCAqaGNkLAorCQllbnVtIGNvbXBhbmlvbl9hY3Rpb24gYWN0aW9uKQoreworCXN0cnVjdCBwY2lfZGV2CQkqY29tcGFuaW9uOworCXN0cnVjdCB1c2JfaGNkCQkqY29tcGFuaW9uX2hjZDsKKwl1bnNpZ25lZCBpbnQJCXNsb3QgPSBQQ0lfU0xPVChwZGV2LT5kZXZmbik7CisKKwkvKiBJdGVyYXRlIHRocm91Z2ggb3RoZXIgUENJIGZ1bmN0aW9ucyBpbiB0aGUgc2FtZSBzbG90LgorCSAqIElmIHBkZXYgaXMgT0hDSSBvciBVSENJIHRoZW4gd2UgYXJlIGxvb2tpbmcgZm9yIEVIQ0ksIGFuZAorCSAqIHZpY2UgdmVyc2EuCisJICovCisJY29tcGFuaW9uID0gTlVMTDsKKwlmb3IgKDs7KSB7CisJCWNvbXBhbmlvbiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGNvbXBhbmlvbik7CisJCWlmICghY29tcGFuaW9uKQorCQkJYnJlYWs7CisJCWlmIChjb21wYW5pb24tPmJ1cyAhPSBwZGV2LT5idXMgfHwKKwkJCQlQQ0lfU0xPVChjb21wYW5pb24tPmRldmZuKSAhPSBzbG90KQorCQkJY29udGludWU7CisKKwkJY29tcGFuaW9uX2hjZCA9IHBjaV9nZXRfZHJ2ZGF0YShjb21wYW5pb24pOworCQlpZiAoIWNvbXBhbmlvbl9oY2QpCisJCQljb250aW51ZTsKKworCQkvKiBGb3IgU0VUX0hTX0NPTVBBTklPTiwgc3RvcmUgYSBwb2ludGVyIHRvIHRoZSBFSENJIGJ1cyBpbgorCQkgKiB0aGUgT0hDSS9VSENJIGNvbXBhbmlvbiBidXMgc3RydWN0dXJlLgorCQkgKiBGb3IgQ0xFQVJfSFNfQ09NUEFOSU9OLCBjbGVhciB0aGUgcG9pbnRlciB0byB0aGUgRUhDSSBidXMKKwkJICogaW4gdGhlIE9IQ0kvVUhDSSBjb21wYW5pb24gYnVzIHN0cnVjdHVyZS4KKwkJICogRm9yIFdBSVRfRk9SX0NPTVBBTklPTlMsIHdhaXQgdW50aWwgdGhlIE9IQ0kvVUhDSQorCQkgKiBjb21wYW5pb24gY29udHJvbGxlcnMgaGF2ZSBmdWxseSByZXN1bWVkLgorCQkgKi8KKworCQlpZiAoKHBkZXYtPmNsYXNzID09IENMX09IQ0kgfHwgcGRldi0+Y2xhc3MgPT0gQ0xfVUhDSSkgJiYKKwkJCQljb21wYW5pb24tPmNsYXNzID09IENMX0VIQ0kpIHsKKwkJCS8qIGFjdGlvbiBtdXN0IGJlIFNFVF9IU19DT01QQU5JT04gKi8KKwkJCWRldl9kYmcoJmNvbXBhbmlvbi0+ZGV2LCAiSFMgY29tcGFuaW9uIGZvciAlc1xuIiwKKwkJCQkJZGV2X25hbWUoJnBkZXYtPmRldikpOworCQkJaGNkLT5zZWxmLmhzX2NvbXBhbmlvbiA9ICZjb21wYW5pb25faGNkLT5zZWxmOworCisJCX0gZWxzZSBpZiAocGRldi0+Y2xhc3MgPT0gQ0xfRUhDSSAmJgorCQkJCShjb21wYW5pb24tPmNsYXNzID09IENMX09IQ0kgfHwKKwkJCQljb21wYW5pb24tPmNsYXNzID09IENMX1VIQ0kpKSB7CisJCQlzd2l0Y2ggKGFjdGlvbikgeworCQkJY2FzZSBTRVRfSFNfQ09NUEFOSU9OOgorCQkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkhTIGNvbXBhbmlvbiBmb3IgJXNcbiIsCisJCQkJCQlkZXZfbmFtZSgmY29tcGFuaW9uLT5kZXYpKTsKKwkJCQljb21wYW5pb25faGNkLT5zZWxmLmhzX2NvbXBhbmlvbiA9ICZoY2QtPnNlbGY7CisJCQkJYnJlYWs7CisJCQljYXNlIENMRUFSX0hTX0NPTVBBTklPTjoKKwkJCQljb21wYW5pb25faGNkLT5zZWxmLmhzX2NvbXBhbmlvbiA9IE5VTEw7CisJCQkJYnJlYWs7CisJCQljYXNlIFdBSVRfRk9SX0NPTVBBTklPTlM6CisJCQkJZGV2aWNlX3BtX3dhaXRfZm9yX2RldigmcGRldi0+ZGV2LAorCQkJCQkJJmNvbXBhbmlvbi0+ZGV2KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgc2V0X2hzX2NvbXBhbmlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwltdXRleF9sb2NrKCZjb21wYW5pb25zX211dGV4KTsKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgaGNkKTsKKwljb21wYW5pb25fY29tbW9uKHBkZXYsIGhjZCwgU0VUX0hTX0NPTVBBTklPTik7CisJbXV0ZXhfdW5sb2NrKCZjb21wYW5pb25zX211dGV4KTsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfaHNfY29tcGFuaW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCW11dGV4X2xvY2soJmNvbXBhbmlvbnNfbXV0ZXgpOworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBOVUxMKTsKKworCS8qIElmIHBkZXYgaXMgT0hDSSBvciBVSENJLCBqdXN0IGNsZWFyIGl0cyBoc19jb21wYW5pb24gcG9pbnRlciAqLworCWlmIChwZGV2LT5jbGFzcyA9PSBDTF9PSENJIHx8IHBkZXYtPmNsYXNzID09IENMX1VIQ0kpCisJCWhjZC0+c2VsZi5oc19jb21wYW5pb24gPSBOVUxMOworCisJLyogT3RoZXJ3aXNlIHNlYXJjaCBmb3IgY29tcGFuaW9uIGJ1c2VzIGFuZCBjbGVhciB0aGVpciBwb2ludGVycyAqLworCWVsc2UKKwkJY29tcGFuaW9uX2NvbW1vbihwZGV2LCBoY2QsIENMRUFSX0hTX0NPTVBBTklPTik7CisJbXV0ZXhfdW5sb2NrKCZjb21wYW5pb25zX211dGV4KTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9mb3JfY29tcGFuaW9ucyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwkvKiBPbmx5IEVIQ0kgY29udHJvbGxlcnMgbmVlZCB0byB3YWl0LgorCSAqIE5vIGxvY2tpbmcgaXMgbmVlZGVkIGJlY2F1c2UgYSBjb250cm9sbGVyIGNhbm5vdCBiZSByZXN1bWVkCisJICogd2hpbGUgb25lIG9mIGl0cyBjb21wYW5pb25zIGlzIGdldHRpbmcgdW5ib3VuZC4KKwkgKi8KKwlpZiAocGRldi0+Y2xhc3MgPT0gQ0xfRUhDSSkKKwkJY29tcGFuaW9uX2NvbW1vbihwZGV2LCBoY2QsIFdBSVRfRk9SX0NPTVBBTklPTlMpOworfQorCisjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaHNfY29tcGFuaW9uKHN0cnVjdCBwY2lfZGV2ICpkLCBzdHJ1Y3QgdXNiX2hjZCAqaCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9oc19jb21wYW5pb24oc3RydWN0IHBjaV9kZXYgKmQsIHN0cnVjdCB1c2JfaGNkICpoKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHdhaXRfZm9yX2NvbXBhbmlvbnMoc3RydWN0IHBjaV9kZXYgKmQsIHN0cnVjdCB1c2JfaGNkICpoKSB7fQorCisjZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMjMsNyArMjQwLDcgQEAKIAkJaWYgKHJlZ2lvbiA9PSBQQ0lfUk9NX1JFU09VUkNFKSB7CiAJCQlkZXZfZGJnKCZkZXYtPmRldiwgIm5vIGkvbyByZWdpb25zIGF2YWlsYWJsZVxuIik7CiAJCQlyZXR2YWwgPSAtRUJVU1k7Ci0JCQlnb3RvIGVycjE7CisJCQlnb3RvIGVycjI7CiAJCX0KIAl9CiAKQEAgLTEzMiw2ICsyNDksNyBAQAogCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5pcnEsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCk7CiAJaWYgKHJldHZhbCAhPSAwKQogCQlnb3RvIGVycjQ7CisJc2V0X2hzX2NvbXBhbmlvbihkZXYsIGhjZCk7CiAJcmV0dXJuIHJldHZhbDsKIAogIGVycjQ6CkBAIC0xNDIsNiArMjYwLDcgQEAKIAl9IGVsc2UKIAkJcmVsZWFzZV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKICBlcnIyOgorCWNsZWFyX2hzX2NvbXBhbmlvbihkZXYsIGhjZCk7CiAJdXNiX3B1dF9oY2QoaGNkKTsKICBlcnIxOgogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwpAQCAtMTgwLDYgKzI5OSw3IEBACiAJfSBlbHNlIHsKIAkJcmVsZWFzZV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKIAl9CisJY2xlYXJfaHNfY29tcGFuaW9uKGRldiwgaGNkKTsKIAl1c2JfcHV0X2hjZChoY2QpOwogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwogfQpAQCAtMzQ0LDYgKzQ2NCwxMSBAQAogCWNsZWFyX2JpdChIQ0RfRkxBR19TQVdfSVJRLCAmaGNkLT5mbGFncyk7CiAKIAlpZiAoaGNkLT5kcml2ZXItPnBjaV9yZXN1bWUpIHsKKwkJLyogVGhpcyBjYWxsIHNob3VsZCBiZSBtYWRlIG9ubHkgZHVyaW5nIHN5c3RlbSByZXN1bWUsCisJCSAqIG5vdCBkdXJpbmcgcnVudGltZSByZXN1bWUuCisJCSAqLworCQl3YWl0X2Zvcl9jb21wYW5pb25zKHBjaV9kZXYsIGhjZCk7CisKIAkJcmV0dmFsID0gaGNkLT5kcml2ZXItPnBjaV9yZXN1bWUoaGNkLCBoaWJlcm5hdGVkKTsKIAkJaWYgKHJldHZhbCkgewogCQkJZGV2X2VycihkZXYsICJQQ0kgcG9zdC1yZXN1bWUgZXJyb3IgJWQhXG4iLCByZXR2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKaW5kZXggMzVjYzhiOS4uMjBlY2I0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC0xODE3LDYgKzE4MTcsNyBAQAogCS8qIFRlbGwgdGhlIHdvcmxkISAqLwogCWFubm91bmNlX2RldmljZSh1ZGV2KTsKIAorCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmdWRldi0+ZGV2KTsKIAkvKiBSZWdpc3RlciB0aGUgZGV2aWNlLiAgVGhlIGRldmljZSBkcml2ZXIgaXMgcmVzcG9uc2libGUKIAkgKiBmb3IgY29uZmlndXJpbmcgdGhlIGRldmljZSBhbmQgaW52b2tpbmcgdGhlIGFkZC1kZXZpY2UKIAkgKiBub3RpZmllciBjaGFpbiAodXNlZCBieSB1c2JmcyBhbmQgcG9zc2libHkgb3RoZXJzKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKaW5kZXggOWJjOTVmZS4uZGY3MzU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTE4NjcsNiArMTg2Nyw3IEBACiAJCQkiYWRkaW5nICVzIChjb25maWcgIyVkLCBpbnRlcmZhY2UgJWQpXG4iLAogCQkJZGV2X25hbWUoJmludGYtPmRldiksIGNvbmZpZ3VyYXRpb24sCiAJCQlpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwkJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZpbnRmLT5kZXYpOwogCQlyZXQgPSBkZXZpY2VfYWRkKCZpbnRmLT5kZXYpOwogCQlpZiAocmV0ICE9IDApIHsKIAkJCWRldl9lcnIoJmRldi0+ZGV2LCAiZGV2aWNlX2FkZCglcykgLS0+ICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMKaW5kZXggZGY3N2Y2MS4uZjFlM2FhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jCkBAIC02MCw3ICs2MCw3IEBACiAjZGVmaW5lIFVBQ19EVF9UT1RBTF9MRU5HVEggKFVBQ19EVF9BQ19IRUFERVJfTEVOR1RIICsgVUFDX0RUX0lOUFVUX1RFUk1JTkFMX1NJWkUgXAogCSsgVUFDX0RUX09VVFBVVF9URVJNSU5BTF9TSVpFICsgVUFDX0RUX0ZFQVRVUkVfVU5JVF9TSVpFKDApKQogLyogQi4zLjIgIENsYXNzLVNwZWNpZmljIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yICovCi1zdGF0aWMgc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl8yIGFjX2hlYWRlcl9kZXNjID0geworc3RhdGljIHN0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfdjFfMiBhY19oZWFkZXJfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVQUNfRFRfQUNfSEVBREVSX0xFTkdUSCwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVUFDX0hFQURFUiwKQEAgLTEyNCw3ICsxMjQsNyBAQAogfTsKIAogI2RlZmluZSBPVVRQVVRfVEVSTUlOQUxfSUQJMwotc3RhdGljIHN0cnVjdCB1YWNfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3Igb3V0cHV0X3Rlcm1pbmFsX2Rlc2MgPSB7CitzdGF0aWMgc3RydWN0IHVhY19vdXRwdXRfdGVybWluYWxfZGVzY3JpcHRvcl92MSBvdXRwdXRfdGVybWluYWxfZGVzYyA9IHsKIAkuYkxlbmd0aAkJPSBVQUNfRFRfT1VUUFVUX1RFUk1JTkFMX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3VidHlwZQk9IFVBQ19PVVRQVVRfVEVSTUlOQUwsCkBAIC0xNTQsNyArMTU0LDcgQEAKIH07CiAKIC8qIEIuNC4yICBDbGFzcy1TcGVjaWZpYyBBUyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLwotc3RhdGljIHN0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3IgYXNfaGVhZGVyX2Rlc2MgPSB7CitzdGF0aWMgc3RydWN0IHVhY19hc19oZWFkZXJfZGVzY3JpcHRvcl92MSBhc19oZWFkZXJfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVQUNfRFRfQVNfSEVBREVSX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVBQ19BU19HRU5FUkFMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWVtLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lZW0uYwppbmRleCAwYTU3N2Q1Li5kNGYwZGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lZW0uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lZW0uYwpAQCAtMzU4LDcgKzM1OCw3IEBACiAJICogYjE1OgkJYm1UeXBlICgwID09IGRhdGEpCiAJICovCiAJbGVuID0gc2tiLT5sZW47Ci0JcHV0X3VuYWxpZ25lZF9sZTE2KChsZW4gJiAweDNGRkYpIHwgQklUKDE0KSwgc2tiX3B1c2goc2tiLCAyKSk7CisJcHV0X3VuYWxpZ25lZF9sZTE2KGxlbiAmIDB4M0ZGRiwgc2tiX3B1c2goc2tiLCAyKSk7CiAKIAkvKiBhZGQgYSB6ZXJvLWxlbmd0aCBFRU0gcGFja2V0LCBpZiBuZWVkZWQgKi8KIAlpZiAocGFkbGVuKQpAQCAtNDY0LDcgKzQ2NCw2IEBACiAJCQl9CiAKIAkJCS8qIHZhbGlkYXRlIENSQyAqLwotCQkJY3JjID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi0+ZGF0YSArIGxlbiAtIEVUSF9GQ1NfTEVOKTsKIAkJCWlmIChoZWFkZXIgJiBCSVQoMTQpKSB7CiAJCQkJY3JjID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNrYi0+ZGF0YSArIGxlbgogCQkJCQkJCS0gRVRIX0ZDU19MRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYwppbmRleCBkMGIxZTgzLi41ZjZhMmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYwpAQCAtMjM3LDcgKzIzNyw3IEBACiB9OwogCiAvKiBCLjMuMiAgQ2xhc3MtU3BlY2lmaWMgQUMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yXzEgYWNfaGVhZGVyX2Rlc2MgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl92MV8xIGFjX2hlYWRlcl9kZXNjID0gewogCS5iTGVuZ3RoID0JCVVBQ19EVF9BQ19IRUFERVJfU0laRSgxKSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVVNCX01TX0hFQURFUiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9tdWx0aS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L211bHRpLmMKaW5kZXggNDI5NTYwMS4uNzY0OTZmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L211bHRpLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L211bHRpLmMKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBkZWZpbmVkIFVTQl9FVEhfUk5ESVMKICMgIHVuZGVmIFVTQl9FVEhfUk5ESVMKICNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfRVRIX1JORElTCisjaWZkZWYgQ09ORklHX1VTQl9HX01VTFRJX1JORElTCiAjICBkZWZpbmUgVVNCX0VUSF9STkRJUyB5CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jCmluZGV4IGUyMjBmYjguLjhiNDUxNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYwppbmRleCA0YjVkYmQwLi41ZmM4MGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCkBAIC0yNTgyLDYgKzI1ODIsNyBAQAogCWhzb3RnLT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOwogCiBpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwppbmRleCBjNzVkOTI3Li4xOTM3MjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCkBAIC0xOTYsNyArMTk2LDkgQEAKIAkJCWlmIChob3N0cGNfcmVnKSB7CiAJCQkJdTMyCXQzOwogCisJCQkJc3Bpbl91bmxvY2tfaXJxKCZlaGNpLT5sb2NrKTsKIAkJCQltc2xlZXAoNSk7LyogNW1zIGZvciBIQ0QgZW50ZXIgbG93IHB3ciBtb2RlICovCisJCQkJc3Bpbl9sb2NrX2lycSgmZWhjaS0+bG9jayk7CiAJCQkJdDMgPSBlaGNpX3JlYWRsKGVoY2ksIGhvc3RwY19yZWcpOwogCQkJCWVoY2lfd3JpdGVsKGVoY2ksIHQzIHwgSE9TVFBDX1BIQ0QsIGhvc3RwY19yZWcpOwogCQkJCXQzID0gZWhjaV9yZWFkbChlaGNpLCBob3N0cGNfcmVnKTsKQEAgLTkwNCwxNyArOTA2LDE4IEBACiAJCQlpZiAoKHRlbXAgJiBQT1JUX1BFKSA9PSAwCiAJCQkJCXx8ICh0ZW1wICYgUE9SVF9SRVNFVCkgIT0gMCkKIAkJCQlnb3RvIGVycm9yOwotCQkJZWhjaV93cml0ZWwoZWhjaSwgdGVtcCB8IFBPUlRfU1VTUEVORCwgc3RhdHVzX3JlZyk7CisKIAkJCS8qIEFmdGVyIGFib3ZlIGNoZWNrIHRoZSBwb3J0IG11c3QgYmUgY29ubmVjdGVkLgogCQkJICogU2V0IGFwcHJvcHJpYXRlIGJpdCB0aHVzIGNvdWxkIHB1dCBwaHkgaW50byBsb3cgcG93ZXIKIAkJCSAqIG1vZGUgaWYgd2UgaGF2ZSBob3N0cGMgZmVhdHVyZQogCQkJICovCisJCQl0ZW1wICY9IH5QT1JUX1dLQ09OTl9FOworCQkJdGVtcCB8PSBQT1JUX1dLRElTQ19FIHwgUE9SVF9XS09DX0U7CisJCQllaGNpX3dyaXRlbChlaGNpLCB0ZW1wIHwgUE9SVF9TVVNQRU5ELCBzdGF0dXNfcmVnKTsKIAkJCWlmIChob3N0cGNfcmVnKSB7Ci0JCQkJdGVtcCAmPSB+UE9SVF9XS0NPTk5fRTsKLQkJCQl0ZW1wIHw9IChQT1JUX1dLRElTQ19FIHwgUE9SVF9XS09DX0UpOwotCQkJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAgfCBQT1JUX1NVU1BFTkQsCi0JCQkJCQkJc3RhdHVzX3JlZyk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCQkJCW1zbGVlcCg1KTsvKiA1bXMgZm9yIEhDRCBlbnRlciBsb3cgcHdyIG1vZGUgKi8KKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCQkJCXRlbXAxID0gZWhjaV9yZWFkbChlaGNpLCBob3N0cGNfcmVnKTsKIAkJCQllaGNpX3dyaXRlbChlaGNpLCB0ZW1wMSB8IEhPU1RQQ19QSENELAogCQkJCQlob3N0cGNfcmVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS10ZHMuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS10ZHMuYwppbmRleCBkMjI0YWI0Li5lMTIzMjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktdGRzLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLXRkcy5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAkJaWYgKGVwLT50ZF9iYXNlKQogCQkJY3BtX211cmFtX2ZyZWUoY3BtX211cmFtX29mZnNldChlcC0+dGRfYmFzZSkpOwogCi0JCWlmIChlcC0+Y29uZl9mcmFtZV9RKSB7CisJCWlmIChrZmlmb19pbml0aWFsaXplZCgmZXAtPmNvbmZfZnJhbWVfUSkpIHsKIAkJCXNpemUgPSBjcV9ob3dtYW55KCZlcC0+Y29uZl9mcmFtZV9RKTsKIAkJCWZvciAoOyBzaXplOyBzaXplLS0pIHsKIAkJCQlzdHJ1Y3QgcGFja2V0ICpwa3QgPSBjcV9nZXQoJmVwLT5jb25mX2ZyYW1lX1EpOwpAQCAtMTE1LDcgKzExNSw3IEBACiAJCQljcV9kZWxldGUoJmVwLT5jb25mX2ZyYW1lX1EpOwogCQl9CiAKLQkJaWYgKGVwLT5lbXB0eV9mcmFtZV9RKSB7CisJCWlmIChrZmlmb19pbml0aWFsaXplZCgmZXAtPmVtcHR5X2ZyYW1lX1EpKSB7CiAJCQlzaXplID0gY3FfaG93bWFueSgmZXAtPmVtcHR5X2ZyYW1lX1EpOwogCQkJZm9yICg7IHNpemU7IHNpemUtLSkgewogCQkJCXN0cnVjdCBwYWNrZXQgKnBrdCA9IGNxX2dldCgmZXAtPmVtcHR5X2ZyYW1lX1EpOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJCQljcV9kZWxldGUoJmVwLT5lbXB0eV9mcmFtZV9RKTsKIAkJfQogCi0JCWlmIChlcC0+ZHVtbXlfcGFja2V0c19RKSB7CisJCWlmIChrZmlmb19pbml0aWFsaXplZCgmZXAtPmR1bW15X3BhY2tldHNfUSkpIHsKIAkJCXNpemUgPSBjcV9ob3dtYW55KCZlcC0+ZHVtbXlfcGFja2V0c19RKTsKIAkJCWZvciAoOyBzaXplOyBzaXplLS0pIHsKIAkJCQl1OCAqYnVmZiA9IGNxX2dldCgmZXAtPmR1bW15X3BhY2tldHNfUSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwppbmRleCBiN2E2NjFjLi5iZWU1NThhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCkBAIC0zNSw3ICszNSw5IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKICNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgogI2luY2x1ZGUgInI4YTY2NTk3LmgiCkBAIC0yMTYsOCArMjE4LDE3IEBACiB7CiAJaW50IHBvcnQ7CiAKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KIAlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgMCwgSU5URU5CMCk7Ci0JcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIDAsIElOVFNUUzApOworCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCAwLCBJTlRFTkIxKTsKKwlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgMCwgQlJEWUVOQik7CisJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIDAsIEJFTVBFTkIpOworCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCAwLCBOUkRZRU5CKTsKKworCS8qIGNsZWFyIHN0YXR1cyAqLworCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCAwLCBCUkRZU1RTKTsKKwlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgMCwgTlJEWVNUUyk7CisJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIDAsIEJFTVBTVFMpOwogCiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IHI4YTY2NTk3LT5tYXhfcm9vdF9odWI7IHBvcnQrKykKIAkJcjhhNjY1OTdfZGlzYWJsZV9wb3J0KHI4YTY2NTk3LCBwb3J0KTsKQEAgLTgxMSw2ICs4MjIsMjYgQEAKIAllbmFibGVfcjhhNjY1OTdfcGlwZV9kbWEocjhhNjY1OTcsIGRldiwgcGlwZSwgdXJiKTsKIH0KIAorc3RhdGljIHZvaWQgcjhhNjY1OTdfdXJiX2RvbmUoc3RydWN0IHI4YTY2NTk3ICpyOGE2NjU5Nywgc3RydWN0IHVyYiAqdXJiLAorCQkJICAgICAgaW50IHN0YXR1cykKK19fcmVsZWFzZXMocjhhNjY1OTctPmxvY2spCitfX2FjcXVpcmVzKHI4YTY2NTk3LT5sb2NrKQoreworCWlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkgJiYgdXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgIT0gUElQRV9DT05UUk9MKSB7CisJCXZvaWQgKnB0cjsKKworCQlmb3IgKHB0ciA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCQkgICAgIHB0ciA8IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCQkgICAgIHB0ciArPSBQQUdFX1NJWkUpCisJCQlmbHVzaF9kY2FjaGVfcGFnZSh2aXJ0X3RvX3BhZ2UocHRyKSk7CisJfQorCisJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSwgdXJiKTsKKwlzcGluX3VubG9jaygmcjhhNjY1OTctPmxvY2spOworCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NyksIHVyYiwgc3RhdHVzKTsKKwlzcGluX2xvY2soJnI4YTY2NTk3LT5sb2NrKTsKK30KKwogLyogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdCBkaXNhYmxlZCAqLwogc3RhdGljIHZvaWQgZm9yY2VfZGVxdWV1ZShzdHJ1Y3QgcjhhNjY1OTcgKnI4YTY2NTk3LCB1MTYgcGlwZW51bSwgdTE2IGFkZHJlc3MpCiB7CkBAIC04MjksMTUgKzg2MCw5IEBACiAJCWxpc3RfZGVsKCZ0ZC0+cXVldWUpOwogCQlrZnJlZSh0ZCk7CiAKLQkJaWYgKHVyYikgewotCQkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSwKLQkJCQkJdXJiKTsKKwkJaWYgKHVyYikKKwkJCXI4YTY2NTk3X3VyYl9kb25lKHI4YTY2NTk3LCB1cmIsIC1FTk9ERVYpOwogCi0JCQlzcGluX3VubG9jaygmcjhhNjY1OTctPmxvY2spOwotCQkJdXNiX2hjZF9naXZlYmFja191cmIocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSwgdXJiLAotCQkJCQktRU5PREVWKTsKLQkJCXNwaW5fbG9jaygmcjhhNjY1OTctPmxvY2spOwotCQl9CiAJCWJyZWFrOwogCX0KIH0KQEAgLTk5Nyw2ICsxMDIyLDggQEAKIC8qIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHQgZGlzYWJsZWQgKi8KIHN0YXRpYyB2b2lkIHI4YTY2NTk3X2NoZWNrX3N5c3N0cyhzdHJ1Y3QgcjhhNjY1OTcgKnI4YTY2NTk3LCBpbnQgcG9ydCwKIAkJCQkJdTE2IHN5c3N0cykKK19fcmVsZWFzZXMocjhhNjY1OTctPmxvY2spCitfX2FjcXVpcmVzKHI4YTY2NTk3LT5sb2NrKQogewogCWlmIChzeXNzdHMgPT0gU0UwKSB7CiAJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+QVRUQ0gsIGdldF9pbnRzdHNfcmVnKHBvcnQpKTsKQEAgLTEwMTQsNyArMTA0MSw5IEBACiAJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKIAl9CiAKKwlzcGluX3VubG9jaygmcjhhNjY1OTctPmxvY2spOwogCXVzYl9oY2RfcG9sbF9yaF9zdGF0dXMocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSk7CisJc3Bpbl9sb2NrKCZyOGE2NjU5Ny0+bG9jayk7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHQgZGlzYWJsZWQgKi8KQEAgLTEyNzQsMTAgKzEzMDMsNyBAQAogCQlpZiAodXNiX3BpcGVpc29jKHVyYi0+cGlwZSkpCiAJCQl1cmItPnN0YXJ0X2ZyYW1lID0gcjhhNjY1OTdfZ2V0X2ZyYW1lKGhjZCk7CiAKLQkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSwgdXJiKTsKLQkJc3Bpbl91bmxvY2soJnI4YTY2NTk3LT5sb2NrKTsKLQkJdXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHN0YXR1cyk7Ci0JCXNwaW5fbG9jaygmcjhhNjY1OTctPmxvY2spOworCQlyOGE2NjU5N191cmJfZG9uZShyOGE2NjU5NywgdXJiLCBzdGF0dXMpOwogCX0KIAogCWlmIChyZXN0YXJ0KSB7CkBAIC0yNDY2LDYgKzI0OTIsMTIgQEAKIAlyOGE2NjU5Ny0+cmhfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXI4YTY2NTk3OwogCXI4YTY2NTk3LT5yZWcgPSAodW5zaWduZWQgbG9uZylyZWc7CiAKKwkvKiBtYWtlIHN1cmUgbm8gaW50ZXJydXB0cyBhcmUgcGVuZGluZyAqLworCXJldCA9IHI4YTY2NTk3X2Nsb2NrX2VuYWJsZShyOGE2NjU5Nyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gY2xlYW5fdXAzOworCWRpc2FibGVfY29udHJvbGxlcihyOGE2NjU5Nyk7CisKIAlmb3IgKGkgPSAwOyBpIDwgUjhBNjY1OTdfTUFYX05VTV9QSVBFOyBpKyspIHsKIAkJSU5JVF9MSVNUX0hFQUQoJnI4YTY2NTk3LT5waXBlX3F1ZXVlW2ldKTsKIAkJaW5pdF90aW1lcigmcjhhNjY1OTctPnRkX3RpbWVyW2ldKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKaW5kZXggMDAyNTg0Ny4uOGIzN2E0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKQEAgLTMyNDUsNiArMzI0NSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MDcxMSwgMHgwOTAyKSB9LAogCXsgVVNCX0RFVklDRSgweDA3MTEsIDB4MDkwMykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNzExLCAweDA5MTgpIH0sCisJeyBVU0JfREVWSUNFKDB4MDcxMSwgMHgwOTIwKSB9LAogCXsgVVNCX0RFVklDRSgweDE4MmQsIDB4MDIxYykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxODJkLCAweDAyNjkpIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCmluZGV4IGRlNTZiM2QuLjNkMmQzZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCkBAIC00NCw2ICs0NCw3IEBACiBjb25maWcgVVNCX1VMUEkKIAlib29sICJHZW5lcmljIFVMUEkgVHJhbnNjZWl2ZXIgRHJpdmVyIgogCWRlcGVuZHMgb24gQVJNCisJc2VsZWN0IFVTQl9PVEdfVVRJTFMKIAloZWxwCiAJICBFbmFibGUgdGhpcyB0byBzdXBwb3J0IFVMUEkgY29ubmVjdGVkIFVTQiBPVEcgdHJhbnNjZWl2ZXJzIHdoaWNoCiAJICBhcmUgbGlrZWx5IGZvdW5kIG9uIGVtYmVkZGVkIGJvYXJkcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggMjE2ZjE4Ny4uNzYzODgyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwogI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuNS4wIgotI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiwgQmlsbCBSeWRlciA8YnJ5ZGVyQHNnaS5jb20+LCBLdWJhIE9iZXIgPGt1YmFAbWFyZWltYnJpdW0ub3JnPiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4sIEJpbGwgUnlkZXIgPGJyeWRlckBzZ2kuY29tPiwgS3ViYSBPYmVyIDxrdWJhQG1hcmVpbWJyaXVtLm9yZz4sIEFuZHJlYXMgTW9ociIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBGVERJIFNlcmlhbCBDb252ZXJ0ZXJzIERyaXZlciIKIAogc3RhdGljIGludCBkZWJ1ZzsKQEAgLTE0NSwxMCArMTQ1LDE1IEBACiAKIAogCisvKgorICogRGV2aWNlIElEIG5vdCBsaXN0ZWQ/IFRlc3QgdmlhIG1vZHVsZSBwYXJhbXMgcHJvZHVjdC92ZW5kb3Igb3IKKyAqIC9zeXMvYnVzL3VzYi9mdGRpX3Npby9uZXdfaWQsIHRoZW4gc2VuZCBwYXRjaC9yZXBvcnQhCisgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQU1DMjMyX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQ0FOVVNCX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQ0FOREFQVEVSX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfTlhUQ0FNX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfU0NTX0RFVklDRV8wX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfU0NTX0RFVklDRV8xX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfU0NTX0RFVklDRV8yX1BJRCkgfSwKQEAgLTU1Miw5ICs1NTcsMTYgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfSUJTX1BFRE9fUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9JQlNfUFJPRF9QSUQpIH0sCiAJLyoKLQkgKiBEdWUgdG8gbWFueSB1c2VyIHJlcXVlc3RzIGZvciBtdWx0aXBsZSBFTFYgZGV2aWNlcyB3ZSBlbmFibGUKLQkgKiB0aGVtIGJ5IGRlZmF1bHQuCisJICogRUxWIGRldmljZXM6CiAJICovCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9VU1JfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfTVNNMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9LTDEwMF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9XUzU1MF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9FQzMwMDBfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfV1M4ODhfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfVFdTNTUwX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX0ZFTV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9DTEk3MDAwX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX1BQUzczMzBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfVEZNMTAwX1BJRCkgfSwKQEAgLTU3MSwxMSArNTgzLDE3IEBACiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9QQ0sxMDBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfUkZQNTAwX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX0ZTMjBTSUdfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfVVRQOF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9XUzMwMFBDX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX1dTNDQ0UENfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfRkhaMTMwMFBDX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX0VNMTAxMFBDX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX1dTNTAwX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX0hTNDg1X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX1VNUzEwMF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9URkQxMjhfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfRk0zUlhfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfV1M3NzdfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgTElOWF9TRE1VU0JRU1NfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgTElOWF9NQVNURVJERVZFTDJfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgTElOWF9GVVRVUkVfMF9QSUQpIH0sCkBAIC02OTcsNiArNzE1LDcgQEAKIAl7IFVTQl9ERVZJQ0UoUkFUT0NfVkVORE9SX0lELCBSQVRPQ19QUk9EVUNUX0lEX1VTQjYwRikgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUkVVX1RJTllfUElEKSB9LAogCXsgVVNCX0RFVklDRShQQVBPVUNIX1ZJRCwgUEFQT1VDSF9RVUlETzR4NF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFBBUE9VQ0hfVklELCBQQVBPVUNIX0FENFVTQl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0RPTUlOVEVMTF9ER1FHX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRE9NSU5URUxMX0RVU0JfUElEKSB9LAogCXsgVVNCX0RFVklDRShBTFRJMl9WSUQsIEFMVEkyX04zX1BJRCkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAppbmRleCBkYTkyYjQ5Li5jODk1MWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCkBAIC0zOCw2ICszOCw4IEBACiAvKiB3d3cuY2FuZGFwdGVyLmNvbSBFd2VydCBFbmVyZ3kgU3lzdGVtcyBDQU5kYXB0ZXIgZGV2aWNlICovCiAjZGVmaW5lIEZURElfQ0FOREFQVEVSX1BJRCAweDlGODAgLyogUHJvZHVjdCBJZCAqLwogCisjZGVmaW5lIEZURElfTlhUQ0FNX1BJRAkJMHhBQkI4IC8qIE5YVENhbSBmb3IgTWluZHN0b3JtcyBOWFQgKi8KKwogLyogT09DRGxpbmsgYnkgSm9lcm4gS2FpcGYgPGpvZXJua0B3ZWIuZGU+CiAgKiAoaHR0cDovL3d3dy5qb2Vybm9ubGluZS5kZS9kdy9kb2t1LnBocD9pZD1zdGFydCZpZHg9cHJvamVjdHM6b29jZGxpbmspICovCiAjZGVmaW5lIEZURElfT09DRExJTktfUElECTB4YmFmOAkvKiBBbW9udGVjIEpUQUdrZXkgKi8KQEAgLTE2MSwyMiArMTYzLDM3IEBACiAvKgogICogRUxWIFVTQiBkZXZpY2VzIHN1Ym1pdHRlZCBieSBDaHJpc3RpYW4gQWJ0IG9mIEVMViAod3d3LmVsdi5kZSkuCiAgKiBBbGwgb2YgdGhlc2UgZGV2aWNlcyB1c2UgRlRESSdzIHZlbmRvciBJRCAoMHgwNDAzKS4KKyAqIEZ1cnRoZXIgSURzIHRha2VuIGZyb20gRUxWIFdpbmRvd3MgLmluZiBmaWxlLgogICoKICAqIFRoZSBwcmV2aW91c2x5IGluY2x1ZGVkIFBJRCBmb3IgdGhlIFVPIDEwMCBtb2R1bGUgd2FzIGluY29ycmVjdC4KICAqIEluIGZhY3QsIHRoYXQgUElEIHdhcyBmb3IgRUxWJ3MgVVIgMTAwIFVTQi1SUzIzMiBjb252ZXJ0ZXIgKDB4RkI1OCkuCiAgKgogICogQXJtaW4gTGFldWdlciBvcmlnaW5hbGx5IHNlbnQgdGhlIFBJRCBmb3IgdGhlIFVNIDEwMCBtb2R1bGUuCiAgKi8KKyNkZWZpbmUgRlRESV9FTFZfVVNSX1BJRAkweEUwMDAJLyogRUxWIFVuaXZlcnNhbC1Tb3VuZC1SZWNvcmRlciAqLworI2RlZmluZSBGVERJX0VMVl9NU00xX1BJRAkweEUwMDEJLyogRUxWIE1pbmktU291bmQtTW9kdWwgKi8KKyNkZWZpbmUgRlRESV9FTFZfS0wxMDBfUElECTB4RTAwMgkvKiBFTFYgS2Z6LUxlaXN0dW5nc21lc3NlciBLTCAxMDAgKi8KKyNkZWZpbmUgRlRESV9FTFZfV1M1NTBfUElECTB4RTAwNAkvKiBXUyA1NTAgKi8KKyNkZWZpbmUgRlRESV9FTFZfRUMzMDAwX1BJRAkweEUwMDYJLyogRU5FUkdZIENPTlRST0wgMzAwMCBVU0IgKi8KKyNkZWZpbmUgRlRESV9FTFZfV1M4ODhfUElECTB4RTAwOAkvKiBXUyA4ODggKi8KKyNkZWZpbmUgRlRESV9FTFZfVFdTNTUwX1BJRAkweEUwMDkJLyogVGVjaG5vbGluZSBXUyA1NTAgKi8KKyNkZWZpbmUgRlRESV9FTFZfRkVNX1BJRAkweEUwMEEJLyogRnVuayBFbmVyZ2llIE1vbml0b3IgKi8KICNkZWZpbmUgRlRESV9FTFZfRkhaMTMwMFBDX1BJRAkweEUwRTgJLyogRkhaIDEzMDAgUEMgKi8KICNkZWZpbmUgRlRESV9FTFZfV1M1MDBfUElECTB4RTBFOQkvKiBQQy1XZXR0ZXJzdGF0aW9uIChXUyA1MDApICovCiAjZGVmaW5lIEZURElfRUxWX0hTNDg1X1BJRAkweEUwRUEJLyogVVNCIHRvIFJTLTQ4NSBhZGFwdGVyICovCisjZGVmaW5lIEZURElfRUxWX1VNUzEwMF9QSUQJMHhFMEVCCS8qIEVMViBVU0IgTWFzdGVyLVNsYXZlIFNjaGFsdHN0ZWNrZG9zZSBVTVMgMTAwICovCisjZGVmaW5lIEZURElfRUxWX1RGRDEyOF9QSUQJMHhFMEVDCS8qIEVMViBUZW1wZXJhdHVyLUZldWNodGUtRGF0ZW5sb2dnZXIgVEZEIDEyOCAqLworI2RlZmluZSBGVERJX0VMVl9GTTNSWF9QSUQJMHhFMEVECS8qIEVMViBNZXNzd2VydHVlYmVydHJhZ3VuZyBGTTMgUlggKi8KKyNkZWZpbmUgRlRESV9FTFZfV1M3NzdfUElECTB4RTBFRQkvKiBDb25yYWQgV1MgNzc3ICovCiAjZGVmaW5lIEZURElfRUxWX0VNMTAxMFBDX1BJRAkweEUwRUYJLyogRW5nZXJ5IG1vbml0b3IgRU0gMTAxMCBQQyAqLwogI2RlZmluZSBGVERJX0VMVl9DU0k4X1BJRAkweEUwRjAJLyogQ29tcHV0ZXItU2NoYWx0LUludGVyZmFjZSAoQ1NJIDgpICovCiAjZGVmaW5lIEZURElfRUxWX0VNMTAwMERMX1BJRAkweEUwRjEJLyogUEMtRGF0ZW5sb2dnZXIgZnVlciBFbmVyZ2llbW9uaXRvciAoRU0gMTAwMCBETCkgKi8KICNkZWZpbmUgRlRESV9FTFZfUENLMTAwX1BJRAkweEUwRjIJLyogUEMtS2FiZWx0ZXN0ZXIgKFBDSyAxMDApICovCiAjZGVmaW5lIEZURElfRUxWX1JGUDUwMF9QSUQJMHhFMEYzCS8qIEhGLUxlaXN0dW5nc21lc3NlciAoUkZQIDUwMCkgKi8KICNkZWZpbmUgRlRESV9FTFZfRlMyMFNJR19QSUQJMHhFMEY0CS8qIFNpZ25hbGdlYmVyIChGUyAyMCBTSUcpICovCisjZGVmaW5lIEZURElfRUxWX1VUUDhfUElECTB4RTBGNQkvKiBFTFYgVVRQIDggKi8KICNkZWZpbmUgRlRESV9FTFZfV1MzMDBQQ19QSUQJMHhFMEY2CS8qIFBDLVdldHRlcnN0YXRpb24gKFdTIDMwMCBQQykgKi8KKyNkZWZpbmUgRlRESV9FTFZfV1M0NDRQQ19QSUQJMHhFMEY3CS8qIENvbnJhZCBXUyA0NDQgUEMgKi8KICNkZWZpbmUgRlRESV9QSElfRklTQ09fUElEICAgICAgMHhFNDBCICAvKiBQSEkgRmlzY28gVVNCIHRvIFNlcmlhbCBjYWJsZSAqLwogI2RlZmluZSBGVERJX0VMVl9VQUQ4X1BJRAkweEYwNjgJLyogVVNCLUFELVdhbmRsZXIgKFVBRCA4KSAqLwogI2RlZmluZSBGVERJX0VMVl9VREE3X1BJRAkweEYwNjkJLyogVVNCLURBLVdhbmRsZXIgKFVEQSA3KSAqLwpAQCAtOTY4LDYgKzk4NSw3IEBACiAjZGVmaW5lIFBBUE9VQ0hfVklECQkJMHg1MDUwCS8qIFZlbmRvciBJRCAqLwogI2RlZmluZSBQQVBPVUNIX1RNVV9QSUQJCQkweDA0MDAJLyogVE1VIFVTQiBUaGVybW9tZXRlciAqLwogI2RlZmluZSBQQVBPVUNIX1FVSURPNHg0X1BJRAkJMHgwOTAwCS8qIFF1aWRvIDQvNCBNb2R1bGUgKi8KKyNkZWZpbmUgUEFQT1VDSF9BRDRVU0JfUElECQkweDgwMDMJLyogQUQ0VVNCIE1lYXN1cmVtZW50IE1vZHVsZSAqLwogCiAvKgogICogTWFydmVsbCBTaGVldmFQbHVnCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKaW5kZXggYWMxYjY0NC4uM2ViNjE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwpAQCAtMjk4LDYgKzI5OCw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHg2OEEzKSwgCS8qIFNpZXJyYSBXaXJlbGVzcyBEaXJlY3QgSVAgbW9kZW1zICovCiAJICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmRpcmVjdF9pcF9pbnRlcmZhY2VfYmxhY2tsaXN0CiAJfSwKKyAgICAgICB7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDA4MTMzKSB9LCAvKiBEZWxsIENvbXB1dGVyIENvcnAuIFdpcmVsZXNzIDU3MjAgVlpXIE1vYmlsZSBCcm9hZGJhbmQgKEVWRE8gUmV2LUEpIE1pbmljYXJkIEdQUyBQb3J0ICovCiAKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKaW5kZXggZTVlNmRmMy4uYWFkYzE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYwpAQCAtMTM0LDE0ICsxMzQsMTQgQEAKIAkJaWYgKHVzLT5mZmxhZ3MgJiBVU19GTF9NQVhfU0VDVE9SU19NSU4pCiAJCQltYXhfc2VjdG9ycyA9IFBBR0VfQ0FDSEVfU0laRSA+PiA5OwogCQlpZiAocXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSkgPiBtYXhfc2VjdG9ycykKLQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLAorCQkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsCiAJCQkJCSAgICAgIG1heF9zZWN0b3JzKTsKIAl9IGVsc2UgaWYgKHNkZXYtPnR5cGUgPT0gVFlQRV9UQVBFKSB7CiAJCS8qIFRhcGVzIG5lZWQgbXVjaCBoaWdoZXIgbWF4X3NlY3RvciBsaW1pdHMsIHNvIGp1c3QKIAkJICogcmFpc2UgaXQgdG8gdGhlIG1heGltdW0gcG9zc2libGUgKDQgR0IgLyA1MTIpIGFuZAogCQkgKiBsZXQgdGhlIHF1ZXVlIHNlZ21lbnQgc2l6ZSBzb3J0IG91dCB0aGUgcmVhbCBsaW1pdC4KIAkJICovCi0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAweDdGRkZGRik7CisJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAweDdGRkZGRik7CiAJfQogCiAJLyogU29tZSBVU0IgaG9zdCBjb250cm9sbGVycyBjYW4ndCBkbyBETUE7IHRoZXkgaGF2ZSB0byB1c2UgUElPLgpAQCAtNDk1LDcgKzQ5NSw3IEBACiAJdW5zaWduZWQgc2hvcnQgbXM7CiAKIAlpZiAoc3NjYW5mKGJ1ZiwgIiVodSIsICZtcykgPiAwICYmIG1zIDw9IFNDU0lfREVGQVVMVF9NQVhfU0VDVE9SUykgewotCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgbXMpOworCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgbXMpOwogCQlyZXR1cm4gc3RybGVuKGJ1Zik7CiAJfQogCXJldHVybiAtRUlOVkFMOwkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IGM5MzJmOTAuLjQ5NTc1ZmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTk0MSw3ICs5NDEsNyBAQAogVU5VU1VBTF9ERVYoICAweDA3YWYsIDB4MDAwNCwgMHgwMTAwLCAweDAxMzMsCiAJCSJNaWNyb3RlY2giLAogCQkiVVNCLVNDU0ktREIyNSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIHVzYl9zdG9yX2V1c2NzaV9pbml0LAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfZXVzY3NpX2luaXQsCiAJCVVTX0ZMX1NDTV9NVUxUX1RBUkcgKSwgCiAKIFVOVVNVQUxfREVWKCAgMHgwN2FmLCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKaW5kZXggZTlmOTk1NC4uYmJlZWI5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCkBAIC03OCw3ICs3OCw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlVTQiBNYXNzIFN0b3JhZ2UgZHJpdmVyIGZvciBMaW51eCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGF5X3VzZSA9IDU7CitzdGF0aWMgdW5zaWduZWQgaW50IGRlbGF5X3VzZSA9IDE7CiBtb2R1bGVfcGFyYW0oZGVsYXlfdXNlLCB1aW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlbGF5X3VzZSwgInNlY29uZHMgdG8gZGVsYXkgYmVmb3JlIHVzaW5nIGEgbmV3IGRldmljZSIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYwppbmRleCBlNGU0ZDQzLi45ZWU2N2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKQEAgLTE5MzEsMjIgKzE5MzEsMjIgQEAKIAkJCSAqIFBvd2VyTWFjMiwyIHN1bW1lciAyMDAwIGlNYWNzCiAJCQkgKiBQb3dlck1hYzQsMSBqYW51YXJ5IDIwMDEgaU1hY3MgImZsb3dlciBwb3dlciIKIAkJCSAqLwotCQkJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDEiKSB8fAotCQkJICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDIiKSB8fAotCQkJICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDEiKSkKKwkJCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwxIikgfHwKKwkJCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwyIikgfHwKKwkJCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwxIikpCiAJCQkJZGVmYXVsdF92bW9kZSA9IFZNT0RFXzEwMjRfNzY4Xzc1OwogCiAJCQkvKiBpQm9vayBTRSAqLwotCQkJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMiwyIikpCisJCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2syLDIiKSkKIAkJCQlkZWZhdWx0X3Ztb2RlID0gVk1PREVfODAwXzYwMF82MDsKIAogCQkJLyogUG93ZXJCb29rIEZpcmV3aXJlIChQaXNtbyksIGlCb29rIER1YWwgVVNCICovCi0JCQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDEiKSB8fAotCQkJICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwxIikpCisJCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDEiKSB8fAorCQkJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwxIikpCiAJCQkJZGVmYXVsdF92bW9kZSA9IFZNT0RFXzEwMjRfNzY4XzYwOwogCiAJCQkvKiBQb3dlckJvb2sgVGl0YW5pdW0gKi8KLQkJCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMiIpKQorCQkJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywyIikpCiAJCQkJZGVmYXVsdF92bW9kZSA9IFZNT0RFXzExNTJfNzY4XzYwOwogCQogCQkJaWYgKGRlZmF1bHRfY21vZGUgPiAxNikgCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKaW5kZXggMWRkZWI0Yy4uZTQ1YWI4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwpAQCAtMjQzOSw3ICsyNDM5LDcgQEAKIAkgKiBUaGUgQXBwbGUgaUJvb2sxIHVzZXMgbm9uLXN0YW5kYXJkIG1lbW9yeSBmcmVxdWVuY2llcy4KIAkgKiBXZSBkZXRlY3QgaXQgYW5kIHNldCB0aGUgZnJlcXVlbmN5IG1hbnVhbGx5LgogCSAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKSB7CisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMiwxIikpIHsKIAkJcGFyLT5wbGxfbGltaXRzLm1jbGsgPSA3MDsKIAkJcGFyLT5wbGxfbGltaXRzLnhjbGsgPSA1MzsKIAl9CkBAIC0yNjU5LDcgKzI2NTksNyBAQAogCQkgICAgICBGQklORk9fSFdBQ0NFTF9ZUEFOOwogCiAjaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCi0JaWYgKE02NF9IQVMoRzNfUEJfMV8xKSAmJiBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpKSB7CisJaWYgKE02NF9IQVMoRzNfUEJfMV8xKSAmJiBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpKSB7CiAJCS8qCiAJCSAqIHRoZXNlIGJpdHMgbGV0IHRoZSAxMDEgcG93ZXJib29rCiAJCSAqIHdha2UgdXAgZnJvbSBzbGVlcCAtLSBwYXVsdXMKQEAgLTI2OTAsOSArMjY5MCw5IEBACiAJCQkJaWYgKE02NF9IQVMoRzNfUEJfMTAyNHg3NjgpKQogCQkJCQkvKiBHMyBQb3dlckJvb2sgd2l0aCAxMDI0eDc2OCBMQ0QgKi8KIAkJCQkJZGVmYXVsdF92bW9kZSA9IFZNT0RFXzEwMjRfNzY4XzYwOwotCQkJCWVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiaU1hYyIpKQorCQkJCWVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiaU1hYyIpKQogCQkJCQlkZWZhdWx0X3Ztb2RlID0gVk1PREVfMTAyNF83NjhfNzU7Ci0JCQkJZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2syLDEiKSkKKwkJCQllbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKQogCQkJCQkvKiBpQm9vayB3aXRoIDgwMHg2MDAgTENEICovCiAJCQkJCWRlZmF1bHRfdm1vZGUgPSBWTU9ERV84MDBfNjAwXzYwOwogCQkJCWVsc2UKQEAgLTMxMDQsNyArMzEwNCw3IEBACiAJfQogCiAJZHAgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7Ci0JaWYgKG5vZGUgPT0gZHAtPm5vZGUpIHsKKwlpZiAobm9kZSA9PSBkcC0+cGhhbmRsZSkgewogCQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZkZWZhdWx0X3ZhcjsKIAkJdW5zaWduZWQgaW50IE4sIFAsIFEsIE0sIFQsIFI7CiAJCXUzMiB2X3RvdGFsLCBoX3RvdGFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jCmluZGV4IDFhMDU2YWQuLmZhMTE5OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMKQEAgLTE3NSw5ICsxNzUsOSBAQAogCiAjaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCiAJcGRhdGEtPm5lZ2F0aXZlID0gcGRhdGEtPm5lZ2F0aXZlIHx8Ci0JCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwzIikgfHwKLQkJbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDMiKSB8fAotCQltYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsNSIpOworCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMyIpIHx8CisJCW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNiwzIikgfHwKKwkJb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDUiKTsKICNlbmRpZgogCiAJcmluZm8tPmluZm8tPmJsX2RldiA9IGJkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9lZmlmYi5jIGIvZHJpdmVycy92aWRlby9lZmlmYi5jCmluZGV4IGViMTIxODIuLmQyNWRmNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZWZpZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKQEAgLTE2MSw4ICsxNjEsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZWZpZmJfZGVzdHJveShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlpZiAoaW5mby0+c2NyZWVuX2Jhc2UpCisJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihpbmZvLT5hcGVydHVyZV9iYXNlLCBpbmZvLT5hcGVydHVyZV9zaXplKTsKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworfQorCiBzdGF0aWMgc3RydWN0IGZiX29wcyBlZmlmYl9vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5mYl9kZXN0cm95CT0gZWZpZmJfZGVzdHJveSwKIAkuZmJfc2V0Y29scmVnCT0gZWZpZmJfc2V0Y29scmVnLAogCS5mYl9maWxscmVjdAk9IGNmYl9maWxscmVjdCwKIAkuZmJfY29weWFyZWEJPSBjZmJfY29weWFyZWEsCkBAIC0yODEsNyArMjkwLDcgQEAKIAlpbmZvLT5wYXIgPSBOVUxMOwogCiAJaW5mby0+YXBlcnR1cmVfYmFzZSA9IGVmaWZiX2ZpeC5zbWVtX3N0YXJ0OwotCWluZm8tPmFwZXJ0dXJlX3NpemUgPSBzaXplX3RvdGFsOworCWluZm8tPmFwZXJ0dXJlX3NpemUgPSBzaXplX3JlbWFwOwogCiAJaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwKGVmaWZiX2ZpeC5zbWVtX3N0YXJ0LCBlZmlmYl9maXguc21lbV9sZW4pOwogCWlmICghaW5mby0+c2NyZWVuX2Jhc2UpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZnNsLWRpdS1mYi5jIGIvZHJpdmVycy92aWRlby9mc2wtZGl1LWZiLmMKaW5kZXggNzJkNjhiMy4uNDYzN2JjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mc2wtZGl1LWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9mc2wtZGl1LWZiLmMKQEAgLTE2MzMsNiArMTYzMywxMSBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF9kaXVfbWF0Y2hbXSA9IHsKKyNpZmRlZiBDT05GSUdfUFBDX01QQzUxMngKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWRpdSIsCisJfSwKKyNlbmRpZgogCXsKIAkJLmNvbXBhdGlibGUgPSAiZnNsLGRpdSIsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwppbmRleCA2NjM1OGZhLi5iNGI2ZGVjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbXhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwpAQCAtNTkzLDcgKzU5Myw4IEBACiAgKi8KIHN0YXRpYyBpbnQgaW14ZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKIAogCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOwogCkBAIC02MDMsNyArNjA0LDggQEAKIAogc3RhdGljIGludCBpbXhmYl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOwogCiAJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWFjZmIuYyBiL2RyaXZlcnMvdmlkZW8vbWFjZmIuYwppbmRleCBkNjY4ODdlLi40MzIwN2NjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9tYWNmYi5jCkBAIC0xLDI5ICsxLDMzIEBACi0vKiBtYWNmYi5jOiBHZW5lcmljIGZyYW1lYnVmZmVyIGZvciBNYWNzIHdob3NlIGNvbG91cm1hcHMvbW9kZXMgd2UKLSAgIGRvbid0IGtub3cgaG93IHRvIHNldCAqLwotCi0vKiAoYykgMTk5OSBEYXZpZCBIdWdnaW5zLURhaW5lcyA8ZGhkQGRlYmlhbi5vcmc+Ci0KLSAgIFByaW1hcmlseSBiYXNlZCBvbiB2ZXNhZmIuYywgYnkgR2VyZCBLbm9ycgotICAgKGMpIDE5OTggR2VyZCBLbm9yciA8a3JheGVsQGNzLnR1LWJlcmxpbi5kZT4KLQotICAgQWxzbyB1c2VzIGluZm9ybWF0aW9uIGFuZCBjb2RlIGZyb206Ci0gICAKLSAgIFRoZSBvcmlnaW5hbCBtYWNmYi5jIGZyb20gTGludXgvbWFjNjhrIDIuMCwgYnkgQWxhbiBDb3gsIEp1ZXJnZW4KLSAgIE1lbGxpbmdlciwgTWlrYWVsIEZvcnNlbGl1cywgTWljaGFlbCBTY2htaXR6LCBhbmQgb3RoZXJzLgotCi0gICB2YWxreXJpZWZiLmMsIGJ5IE1hcnRpbiBDb3N0YWJlbCwgS2V2aW4gU2Nob2VkZWwsIEJhcnJ5IE5hdGhhbiwgRGFuCi0gICBKYWNvYm93aXR6LCBQYXVsIE1hY2tlcnJhcywgRmFiaW8gUmljY2FyZGksIGFuZCBHZWVydCBVeXR0ZXJob2V2ZW4uCi0gICAKLSAgIFRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlLiAgWW91IG1heSBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlCi0gICBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlLCB2ZXJzaW9uIDIsIG9yIGFueSBsYXRlciB2ZXJzaW9uLCBhdCB5b3VyIGNvbnZlbmllbmNlLiAqLworLyoKKyAqIG1hY2ZiLmM6IEdlbmVyaWMgZnJhbWVidWZmZXIgZm9yIE1hY3Mgd2hvc2UgY29sb3VybWFwcy9tb2RlcyB3ZQorICogZG9uJ3Qga25vdyBob3cgdG8gc2V0LgorICoKKyAqIChjKSAxOTk5IERhdmlkIEh1Z2dpbnMtRGFpbmVzIDxkaGRAZGViaWFuLm9yZz4KKyAqCisgKiBQcmltYXJpbHkgYmFzZWQgb24gdmVzYWZiLmMsIGJ5IEdlcmQgS25vcnIKKyAqIChjKSAxOTk4IEdlcmQgS25vcnIgPGtyYXhlbEBjcy50dS1iZXJsaW4uZGU+CisgKgorICogQWxzbyB1c2VzIGluZm9ybWF0aW9uIGFuZCBjb2RlIGZyb206CisgKgorICogVGhlIG9yaWdpbmFsIG1hY2ZiLmMgZnJvbSBMaW51eC9tYWM2OGsgMi4wLCBieSBBbGFuIENveCwgSnVlcmdlbgorICogTWVsbGluZ2VyLCBNaWthZWwgRm9yc2VsaXVzLCBNaWNoYWVsIFNjaG1pdHosIGFuZCBvdGhlcnMuCisgKgorICogdmFsa3lyaWVmYi5jLCBieSBNYXJ0aW4gQ29zdGFiZWwsIEtldmluIFNjaG9lZGVsLCBCYXJyeSBOYXRoYW4sIERhbgorICogSmFjb2Jvd2l0eiwgUGF1bCBNYWNrZXJyYXMsIEZhYmlvIFJpY2NhcmRpLCBhbmQgR2VlcnQgVXl0dGVyaG9ldmVuLgorICoKKyAqIFRoZSBWaWRlb1Rvb2xib3ggIkJ1Z3MiIHdlYiBwYWdlIGF0CisgKiBodHRwOi8vcmFqc2t5LnBzeWNoLm55dS5lZHUvVGlwcy9WaWRlb0J1Z3MuaHRtbAorICoKKyAqIFRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlLiAgWW91IG1heSBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlCisgKiBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLCB2ZXJzaW9uIDIsIG9yIGFueSBsYXRlciB2ZXJzaW9uLCBhdCB5b3VyIGNvbnZlbmllbmNlLgorICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbnVidXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zMSw5ICszNSw2IEBACiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNpbnRvc2guaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApAQCAtNDQsNyArNDUsNyBAQAogI2RlZmluZSBEQUZCX0JBU0UgMHhmOTgwMDIwMAogCiAvKiBBZGRyZXNzIGZvciB0aGUgYnVpbHQtaW4gQ2l2aWMgZnJhbWVidWZmZXIgaW4gUXVhZHJhIEFWcyAqLwotI2RlZmluZSBDSVZJQ19CQVNFIDB4NTBmMzA4MDAJLyogT25seSB0ZXN0ZWQgb24gNjYwQVYhICovCisjZGVmaW5lIENJVklDX0JBU0UgMHg1MGYzMDgwMAogCiAvKiBHU0MgKEdyYXkgU2NhbGUgQ29udHJvbGxlcikgYmFzZSBhZGRyZXNzICovCiAjZGVmaW5lIEdTQ19CQVNFIDB4NTBGMjAwMDAKQEAgLTUyLDM3ICs1Myw5IEBACiAvKiBDU0MgKENvbG9yIFNjcmVlbiBDb250cm9sbGVyKSBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgQ1NDX0JBU0UgMHg1MEYyMDAwMAogCi1zdGF0aWMgaW50ICgqbWFjZmJfc2V0cGFsZXR0ZSkgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCQl1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKSA9IE5VTEw7Ci1zdGF0aWMgaW50IHZhbGt5cmllX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCQl1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgZGFmYl9zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgICBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7Ci1zdGF0aWMgaW50IHJidl9zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotc3RhdGljIGludCBtZGNfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKLXN0YXRpYyBpbnQgdG9ieV9zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgICBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7Ci1zdGF0aWMgaW50IGNpdmljX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotc3RhdGljIGludCBjc2Nfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKLQotc3RhdGljIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciBhZGRyOwotCS8qIE5vdGU6IHdvcmQtYWxpZ25lZCAqLwotCWNoYXIgcGFkWzNdOwotCXVuc2lnbmVkIGNoYXIgbHV0OwotfSBfX2lvbWVtICp2YWxreXJpZV9jbWFwX3JlZ3M7CitzdGF0aWMgaW50ICgqbWFjZmJfc2V0cGFsZXR0ZSkodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCisJCQkgICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwogCiBzdGF0aWMgc3RydWN0IHsKIAl1bnNpZ25lZCBjaGFyIGFkZHI7CkBAIC0xMTYsMTUgKzg5LDE1IEBACiB9IF9faW9tZW0gKmNpdmljX2NtYXBfcmVnczsKIAogc3RhdGljIHN0cnVjdCB7Ci0JY2hhciAgICBwYWQxWzB4NDBdOwotICAgICAgICB1bnNpZ25lZCBjaGFyCWNsdXRfd2FkZHI7CS8qIDB4NDAgKi8KLSAgICAgICAgY2hhciAgICBwYWQyOwotICAgICAgICB1bnNpZ25lZCBjaGFyCWNsdXRfZGF0YTsJLyogMHg0MiAqLwotICAgICAgICBjaGFyCXBhZDNbMHgzXTsKLSAgICAgICAgdW5zaWduZWQgY2hhcgljbHV0X3JhZGRyOwkvKiAweDQ2ICovCisJY2hhciBwYWQxWzB4NDBdOworCXVuc2lnbmVkIGNoYXIgY2x1dF93YWRkcjsJLyogMHg0MCAqLworCWNoYXIgcGFkMjsKKwl1bnNpZ25lZCBjaGFyIGNsdXRfZGF0YTsJLyogMHg0MiAqLworCWNoYXIgcGFkM1sweDNdOworCXVuc2lnbmVkIGNoYXIgY2x1dF9yYWRkcjsJLyogMHg0NiAqLwogfSBfX2lvbWVtICpjc2NfY21hcF9yZWdzOwogCi0vKiBXZSB3aWxsIGxlYXZlIHRoZXNlIHRoZSB3YXkgdGhleSBhcmUgZm9yIHRoZSB0aW1lIGJlaW5nICovCisvKiBUaGUgcmVnaXN0ZXJzIGluIHRoZXNlIHN0cnVjdHMgYXJlIGluIE51QnVzIHNsb3Qgc3BhY2UgKi8KIHN0cnVjdCBtZGNfY21hcF9yZWdzIHsKIAljaGFyIHBhZDFbMHgyMDAyMDBdOwogCXVuc2lnbmVkIGNoYXIgYWRkcjsKQEAgLTE0NSwxMyArMTE4LDEwIEBACiAJdW5zaWduZWQgY2hhciBsdXQ7CiB9OwogCi0jZGVmaW5lIFBJWEVMX1RPX01NKGEpCSgoKGEpKjEwKS8yOCkJLyogd2lkdGggaW4gbW0gYXQgNzIgZHBpICovCQotCi0vKiBtb2RlICovCi1zdGF0aWMgaW50ICB2aWRlb19zbG90ID0gMDsKKyNkZWZpbmUgUElYRUxfVE9fTU0oYSkJKCgoYSkqMTApLzI4KQkvKiB3aWR0aCBpbiBtbSBhdCA3MiBkcGkgKi8KIAogc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBtYWNmYl9kZWZpbmVkID0gewotCS5iaXRzX3Blcl9waXhlbAk9IDgsCQorCS5iaXRzX3Blcl9waXhlbAk9IDgsCiAJLmFjdGl2YXRlCT0gRkJfQUNUSVZBVEVfTk9XLAogCS53aWR0aAkJPSAtMSwKIAkuaGVpZ2h0CQk9IC0xLApAQCAtMTY3LDE4MSArMTM3LDE1MiBAQAogCS5hY2NlbAk9IEZCX0FDQ0VMX05PTkUsCiB9OwogCitzdGF0aWMgdm9pZCAqc2xvdF9hZGRyOwogc3RhdGljIHN0cnVjdCBmYl9pbmZvIGZiX2luZm87CiBzdGF0aWMgdTMyIHBzZXVkb19wYWxldHRlWzE2XTsKLXN0YXRpYyBpbnQgaW52ZXJzZSAgID0gMDsKLXN0YXRpYyBpbnQgdmlkdGVzdCAgID0gMDsKK3N0YXRpYyBpbnQgaW52ZXJzZTsKK3N0YXRpYyBpbnQgdmlkdGVzdDsKIAotc3RhdGljIGludCB2YWxreXJpZV9zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkJdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKKy8qCisgKiBVbmxpa2UgdGhlIFZhbGt5cmllLCB0aGUgREFGQiBjYW5ub3Qgc2V0IGluZGl2aWR1YWwgY29sb3JtYXAKKyAqIHJlZ2lzdGVycy4gIFRoZXJlZm9yZSwgd2UgZG8gd2hhdCB0aGUgTWFjT1MgZHJpdmVyIGRvZXMgKG5vCisgKiBraWRkaW5nISkgYW5kIHNpbXBseSBzZXQgdGhlbSBvbmUgYnkgb25lIHVudGlsIHdlIGhpdCB0aGUgb25lIHdlCisgKiB3YW50LgorICovCitzdGF0aWMgaW50IGRhZmJfc2V0cGFsZXR0ZSh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCisJCQkgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAorCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQkKLQlyZWQgPj49IDg7Ci0JZ3JlZW4gPj49IDg7Ci0JYmx1ZSA+Pj0gODsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkKLQkvKiB0ZWxsIGNsdXQgd2hpY2ggYWRkcmVzcyB0byBmaWxsICovCi0JbnVidXNfd3JpdGViKHJlZ25vLCAmdmFsa3lyaWVfY21hcF9yZWdzLT5hZGRyKTsKLQlub3AoKTsKLQotCS8qIHNlbmQgb25lIGNvbG9yIGNoYW5uZWwgYXQgYSB0aW1lICovCi0JbnVidXNfd3JpdGViKHJlZCwgJnZhbGt5cmllX2NtYXBfcmVncy0+bHV0KTsKLQlub3AoKTsKLQludWJ1c193cml0ZWIoZ3JlZW4sICZ2YWxreXJpZV9jbWFwX3JlZ3MtPmx1dCk7Ci0Jbm9wKCk7Ci0JbnVidXNfd3JpdGViKGJsdWUsICZ2YWxreXJpZV9jbWFwX3JlZ3MtPmx1dCk7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFVubGlrZSB0aGUgVmFsa3lyaWUsIHRoZSBEQUZCIGNhbm5vdCBzZXQgaW5kaXZpZHVhbCBjb2xvcm1hcAotICAgcmVnaXN0ZXJzLiAgVGhlcmVmb3JlLCB3ZSBkbyB3aGF0IHRoZSBNYWNPUyBkcml2ZXIgZG9lcyAobm8KLSAgIGtpZGRpbmchKSBhbmQgc2ltcGx5IHNldCB0aGVtIG9uZSBieSBvbmUgdW50aWwgd2UgaGl0IHRoZSBvbmUgd2UKLSAgIHdhbnQuICovCi1zdGF0aWMgaW50IGRhZmJfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JLyogRklYTUU6IHJlYWxseSwgcmVhbGx5IG5lZWQgdG8gdXNlIGlvcmVtYXAoKSBoZXJlLAotICAgICAgICAgICBwaHlzX3RvX3ZpcnQoKSBkb2Vzbid0IHdvcmsgYW55bW9yZSAqLwogCXN0YXRpYyBpbnQgbGFzdHJlZyA9IC0xOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCi0JcmVkID4+PSA4OwotCWdyZWVuID4+PSA4OwotCWJsdWUgPj49IDg7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCi0JLyogZmJkZXYgd2lsbCBzZXQgYW4gZW50aXJlIGNvbG91cm1hcCwgYnV0IFggd29uJ3QuICBIb3BlZnVsbHkKLQkgICB0aGlzIHNob3VsZCBhY2NvbW1vZGF0ZSBib3RoIG9mIHRoZW0gKi8KLQlpZiAocmVnbm8gIT0gbGFzdHJlZysxKSB7CisKKwkvKgorCSAqIGZiZGV2IHdpbGwgc2V0IGFuIGVudGlyZSBjb2xvdXJtYXAsIGJ1dCBYIHdvbid0LiAgSG9wZWZ1bGx5CisJICogdGhpcyBzaG91bGQgYWNjb21tb2RhdGUgYm90aCBvZiB0aGVtCisJICovCisJaWYgKHJlZ25vICE9IGxhc3RyZWcgKyAxKSB7CiAJCWludCBpOwotCQkKKwogCQkvKiBTdGFiIGluIHRoZSBkYXJrIHRyeWluZyB0byByZXNldCB0aGUgQ0xVVCBwb2ludGVyICovCiAJCW51YnVzX3dyaXRlbCgwLCAmZGFmYl9jbWFwX3JlZ3MtPnJlc2V0KTsKIAkJbm9wKCk7Ci0JCQorCiAJCS8qIExvb3AgdW50aWwgd2UgZ2V0IHRvIHRoZSByZWdpc3RlciB3ZSB3YW50ICovCiAJCWZvciAoaSA9IDA7IGkgPCByZWdubzsgaSsrKSB7Ci0JCQludWJ1c193cml0ZWIoaW5mby0+Y21hcC5yZWRbaV0gPj4gOCwgJmRhZmJfY21hcF9yZWdzLT5sdXQpOworCQkJbnVidXNfd3JpdGViKGluZm8tPmNtYXAucmVkW2ldID4+IDgsCisJCQkJICAgICAmZGFmYl9jbWFwX3JlZ3MtPmx1dCk7CiAJCQlub3AoKTsKLQkJCW51YnVzX3dyaXRlYihpbmZvLT5jbWFwLmdyZWVuW2ldID4+IDgsICZkYWZiX2NtYXBfcmVncy0+bHV0KTsKKwkJCW51YnVzX3dyaXRlYihpbmZvLT5jbWFwLmdyZWVuW2ldID4+IDgsCisJCQkJICAgICAmZGFmYl9jbWFwX3JlZ3MtPmx1dCk7CiAJCQlub3AoKTsKLQkJCW51YnVzX3dyaXRlYihpbmZvLT5jbWFwLmJsdWVbaV0gPj4gOCwgJmRhZmJfY21hcF9yZWdzLT5sdXQpOworCQkJbnVidXNfd3JpdGViKGluZm8tPmNtYXAuYmx1ZVtpXSA+PiA4LAorCQkJCSAgICAgJmRhZmJfY21hcF9yZWdzLT5sdXQpOwogCQkJbm9wKCk7CiAJCX0KIAl9Ci0JCQorCiAJbnVidXNfd3JpdGViKHJlZCwgJmRhZmJfY21hcF9yZWdzLT5sdXQpOwogCW5vcCgpOwogCW51YnVzX3dyaXRlYihncmVlbiwgJmRhZmJfY21hcF9yZWdzLT5sdXQpOwogCW5vcCgpOwogCW51YnVzX3dyaXRlYihibHVlLCAmZGFmYl9jbWFwX3JlZ3MtPmx1dCk7Ci0JCisKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJbGFzdHJlZyA9IHJlZ25vOwogCXJldHVybiAwOwogfQogCiAvKiBWOCBhbmQgQnJhemlsIHNlZW0gdG8gdXNlIHRoZSBzYW1lIERBQy4gIFNvbm9yYSBkb2VzIGFzIHdlbGwuICovCi1zdGF0aWMgaW50IHY4X2JyYXppbF9zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkJIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkJIHN0cnVjdCBmYl9pbmZvICppbmZvKQkKK3N0YXRpYyBpbnQgdjhfYnJhemlsX3NldHBhbGV0dGUodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAorCQkJCXVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCisJCQkJc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJdW5zaWduZWQgaW50IGJwcCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbDsKLQl1bnNpZ25lZCBjaGFyIF9yZWQgID1yZWQ+Pjg7Ci0JdW5zaWduZWQgY2hhciBfZ3JlZW49Z3JlZW4+Pjg7Ci0JdW5zaWduZWQgY2hhciBfYmx1ZSA9Ymx1ZT4+ODsKLQl1bnNpZ25lZCBjaGFyIF9yZWdubzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGJwcCA+IDgpIHJldHVybiAxOyAvKiBmYWlsc2FmZSAqLworCWlmIChicHAgPiA4KQorCQlyZXR1cm4gMTsgLyogZmFpbHNhZmUgKi8KIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogCS8qIE9uIHRoZXNlIGNoaXBzLCB0aGUgQ0xVVCByZWdpc3RlciBudW1iZXJzIGFyZSBzcHJlYWQgb3V0Ci0JICAgYWNyb3NzIHRoZSByZWdpc3RlciBzcGFjZS4gIFRodXM6Ci0KLQkgICBJbiA4YnBwLCBhbGwgcmVnbm9zIGFyZSB2YWxpZC4KLQkgICAKLQkgICBJbiA0YnBwLCB0aGUgcmVnbm9zIGFyZSAweDBmLCAweDFmLCAweDJmLCBldGMsIGV0YwotCSAgIAotCSAgIEluIDJicHAsIHRoZSByZWdub3MgYXJlIDB4M2YsIDB4N2YsIDB4YmYsIDB4ZmYgKi8KLSAgCV9yZWdubyA9IChyZWdubyA8PCAoOCAtIGJwcCkpIHwgKDB4RkYgPj4gYnBwKTsKLQludWJ1c193cml0ZWIoX3JlZ25vLCAmdjhfYnJhemlsX2NtYXBfcmVncy0+YWRkcik7IG5vcCgpOworCSAqIGFjcm9zcyB0aGUgcmVnaXN0ZXIgc3BhY2UuICBUaHVzOgorCSAqIEluIDhicHAsIGFsbCByZWdub3MgYXJlIHZhbGlkLgorCSAqIEluIDRicHAsIHRoZSByZWdub3MgYXJlIDB4MGYsIDB4MWYsIDB4MmYsIGV0YywgZXRjCisJICogSW4gMmJwcCwgdGhlIHJlZ25vcyBhcmUgMHgzZiwgMHg3ZiwgMHhiZiwgMHhmZgorCSAqLworCXJlZ25vID0gKHJlZ25vIDw8ICg4IC0gYnBwKSkgfCAoMHhGRiA+PiBicHApOworCW51YnVzX3dyaXRlYihyZWdubywgJnY4X2JyYXppbF9jbWFwX3JlZ3MtPmFkZHIpOworCW5vcCgpOwogCiAJLyogc2VuZCBvbmUgY29sb3IgY2hhbm5lbCBhdCBhIHRpbWUgKi8KLQludWJ1c193cml0ZWIoX3JlZCwgJnY4X2JyYXppbF9jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCW51YnVzX3dyaXRlYihfZ3JlZW4sICZ2OF9icmF6aWxfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX2JsdWUsICZ2OF9icmF6aWxfY21hcF9yZWdzLT5sdXQpOworCW51YnVzX3dyaXRlYihyZWQsICZ2OF9icmF6aWxfY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihncmVlbiwgJnY4X2JyYXppbF9jbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGJsdWUsICZ2OF9icmF6aWxfY21hcF9yZWdzLT5sdXQpOwogCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmJ2X3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKKy8qIFJBTS1CYXNlZCBWaWRlbyAqLworc3RhdGljIGludCByYnZfc2V0cGFsZXR0ZSh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCisJCQkgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCisJCQkgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCS8qIHVzZSBNU0JzICovCi0JdW5zaWduZWQgY2hhciBfcmVkICA9cmVkPj44OwotCXVuc2lnbmVkIGNoYXIgX2dyZWVuPWdyZWVuPj44OwotCXVuc2lnbmVkIGNoYXIgX2JsdWUgPWJsdWU+Pjg7Ci0JdW5zaWduZWQgY2hhciBfcmVnbm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPiA4KSByZXR1cm4gMTsgLyogZmFpbHNhZmUgKi8KKwlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4gOCkKKwkJcmV0dXJuIDE7IC8qIGZhaWxzYWZlICovCiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCisKIAkvKiBGcm9tIHRoZSBWaWRlb1Rvb2xib3ggZHJpdmVyLiAgU2VlbXMgdG8gYmUgc2F5aW5nIHRoYXQKIAkgKiByZWdubyAjMjU0IGFuZCAjMjU1IGFyZSB0aGUgaW1wb3J0YW50IG9uZXMgZm9yIDEtYml0IGNvbG9yLAogCSAqIHJlZ25vICMyNTItMjU1IGFyZSB0aGUgaW1wb3J0YW50IG9uZXMgZm9yIDItYml0IGNvbG9yLCBldGMuCiAJICovCi0JX3JlZ25vID0gcmVnbm8gKyAoMjU2LSgxIDw8IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkpOworCXJlZ25vICs9IDI1NiAtICgxIDw8IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCk7CiAKIAkvKiByZXNldCBjbHV0PyAoVmlkZW9Ub29sYm94IHNleiAibm90IG5lY2Vzc2FyeSIpICovCi0JbnVidXNfd3JpdGViKDB4RkYsICZyYnZfY21hcF9yZWdzLT5jbnRsKTsgbm9wKCk7Ci0JCisJbnVidXNfd3JpdGViKDB4RkYsICZyYnZfY21hcF9yZWdzLT5jbnRsKTsKKwlub3AoKTsKKwogCS8qIHRlbGwgY2x1dCB3aGljaCBhZGRyZXNzIHRvIHVzZS4gKi8KLQludWJ1c193cml0ZWIoX3JlZ25vLCAmcmJ2X2NtYXBfcmVncy0+YWRkcik7IG5vcCgpOwotCQorCW51YnVzX3dyaXRlYihyZWdubywgJnJidl9jbWFwX3JlZ3MtPmFkZHIpOworCW5vcCgpOworCiAJLyogc2VuZCBvbmUgY29sb3IgY2hhbm5lbCBhdCBhIHRpbWUuICovCi0JbnVidXNfd3JpdGViKF9yZWQsICAgJnJidl9jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCW51YnVzX3dyaXRlYihfZ3JlZW4sICZyYnZfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX2JsdWUsICAmcmJ2X2NtYXBfcmVncy0+bHV0KTsKLQkKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IC8qIGRvbmUuICovCisJbnVidXNfd3JpdGViKHJlZCwgJnJidl9jbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGdyZWVuLCAmcmJ2X2NtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoYmx1ZSwgJnJidl9jbWFwX3JlZ3MtPmx1dCk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKLS8qIE1hY2ludG9zaCBEaXNwbGF5IENhcmQgKDh4MjQpICovCisvKiBNYWNpbnRvc2ggRGlzcGxheSBDYXJkICg4KjI0KSAqLwogc3RhdGljIGludCBtZGNfc2V0cGFsZXR0ZSh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCiAJCQkgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCiAJCQkgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCXZvbGF0aWxlIHN0cnVjdCBtZGNfY21hcF9yZWdzICpjbWFwX3JlZ3MgPQotCQludWJ1c19zbG90X2FkZHIodmlkZW9fc2xvdCk7Ci0JLyogdXNlIE1TQnMgKi8KLQl1bnNpZ25lZCBjaGFyIF9yZWQgID1yZWQ+Pjg7Ci0JdW5zaWduZWQgY2hhciBfZ3JlZW49Z3JlZW4+Pjg7Ci0JdW5zaWduZWQgY2hhciBfYmx1ZSA9Ymx1ZT4+ODsKLQl1bnNpZ25lZCBjaGFyIF9yZWdubz1yZWdubzsKKwlzdHJ1Y3QgbWRjX2NtYXBfcmVncyAqY21hcF9yZWdzID0gc2xvdF9hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCisKIAkvKiB0aGUgbm9wJ3MgYXJlIHRoZXJlIHRvIG9yZGVyIHdyaXRlcy4gKi8KLQludWJ1c193cml0ZWIoX3JlZ25vLCAmY21hcF9yZWdzLT5hZGRyKTsgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9yZWQsICZjbWFwX3JlZ3MtPmx1dCk7ICAgIG5vcCgpOwotCW51YnVzX3dyaXRlYihfZ3JlZW4sICZjbWFwX3JlZ3MtPmx1dCk7ICBub3AoKTsKLQludWJ1c193cml0ZWIoX2JsdWUsICZjbWFwX3JlZ3MtPmx1dCk7CisJbnVidXNfd3JpdGViKHJlZ25vLCAmY21hcF9yZWdzLT5hZGRyKTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIocmVkLCAmY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihncmVlbiwgJmNtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoYmx1ZSwgJmNtYXBfcmVncy0+bHV0KTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTM1MCwyNCArMjkxLDI2IEBACiAvKiBUb2J5IGZyYW1lIGJ1ZmZlciAqLwogc3RhdGljIGludCB0b2J5X3NldHBhbGV0dGUodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAogCQkJICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKSAKKwkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCXZvbGF0aWxlIHN0cnVjdCB0b2J5X2NtYXBfcmVncyAqY21hcF9yZWdzID0KLQkJbnVidXNfc2xvdF9hZGRyKHZpZGVvX3Nsb3QpOworCXN0cnVjdCB0b2J5X2NtYXBfcmVncyAqY21hcF9yZWdzID0gc2xvdF9hZGRyOwogCXVuc2lnbmVkIGludCBicHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7Ci0JLyogdXNlIE1TQnMgKi8KLQl1bnNpZ25lZCBjaGFyIF9yZWQgID1+KHJlZD4+OCk7Ci0JdW5zaWduZWQgY2hhciBfZ3JlZW49fihncmVlbj4+OCk7Ci0JdW5zaWduZWQgY2hhciBfYmx1ZSA9fihibHVlPj44KTsKLQl1bnNpZ25lZCBjaGFyIF9yZWdubyA9IChyZWdubyA8PCAoOCAtIGJwcCkpIHwgKDB4RkYgPj4gYnBwKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJcmVkID0gfnJlZDsKKwlncmVlbiA9IH5ncmVlbjsKKwlibHVlID0gfmJsdWU7CisJcmVnbm8gPSAocmVnbm8gPDwgKDggLSBicHApKSB8ICgweEZGID4+IGJwcCk7CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQotCW51YnVzX3dyaXRlYihfcmVnbm8sICZjbWFwX3JlZ3MtPmFkZHIpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX3JlZCwgJmNtYXBfcmVncy0+bHV0KTsgICAgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ncmVlbiwgJmNtYXBfcmVncy0+bHV0KTsgIG5vcCgpOwotCW51YnVzX3dyaXRlYihfYmx1ZSwgJmNtYXBfcmVncy0+bHV0KTsKKworCW51YnVzX3dyaXRlYihyZWdubywgJmNtYXBfcmVncy0+YWRkcik7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKHJlZCwgJmNtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoZ3JlZW4sICZjbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGJsdWUsICZjbWFwX3JlZ3MtPmx1dCk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIDA7CkBAIC0zNzgsMjAgKzMyMSwxOCBAQAogCQkJICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAogCQkJICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQl2b2xhdGlsZSBzdHJ1Y3QgamV0X2NtYXBfcmVncyAqY21hcF9yZWdzID0KLQkJbnVidXNfc2xvdF9hZGRyKHZpZGVvX3Nsb3QpOwotCS8qIHVzZSBNU0JzICovCi0JdW5zaWduZWQgY2hhciBfcmVkICAgPSAocmVkPj44KTsKLQl1bnNpZ25lZCBjaGFyIF9ncmVlbiA9IChncmVlbj4+OCk7Ci0JdW5zaWduZWQgY2hhciBfYmx1ZSAgPSAoYmx1ZT4+OCk7CisJc3RydWN0IGpldF9jbWFwX3JlZ3MgKmNtYXBfcmVncyA9IHNsb3RfYWRkcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQotCW51YnVzX3dyaXRlYihyZWdubywgJmNtYXBfcmVncy0+YWRkcik7IG5vcCgpOwotCW51YnVzX3dyaXRlYihfcmVkLCAmY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX2dyZWVuLCAmY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX2JsdWUsICZjbWFwX3JlZ3MtPmx1dCk7CisKKwludWJ1c193cml0ZWIocmVnbm8sICZjbWFwX3JlZ3MtPmFkZHIpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihyZWQsICZjbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGdyZWVuLCAmY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihibHVlLCAmY21hcF9yZWdzLT5sdXQpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiAwOwpAQCAtNDAwLDUzICszNDEsMjcgQEAKIC8qCiAgKiBDaXZpYyBmcmFtZWJ1ZmZlciAtLSBRdWFkcmEgQVYgYnVpbHQtaW4gdmlkZW8uICBBIGNoaXAKICAqIGNhbGxlZCBTZWJhc3RpYW4gaG9sZHMgdGhlIGFjdHVhbCBjb2xvciBwYWxldHRlcywgYW5kCi0gKiBhcHBhcmVudGx5LCB0aGVyZSBhcmUgdHdvIGRpZmZlcmVudCBiYW5rcyBvZiA1MTJLIFJBTSAKKyAqIGFwcGFyZW50bHksIHRoZXJlIGFyZSB0d28gZGlmZmVyZW50IGJhbmtzIG9mIDUxMksgUkFNCiAgKiB3aGljaCBjYW4gYWN0IGFzIHNlcGFyYXRlIGZyYW1lYnVmZmVycyBmb3IgZG9pbmcgdmlkZW8KICAqIGlucHV0IGFuZCB2aWV3aW5nIHRoZSBzY3JlZW4gYXQgdGhlIHNhbWUgdGltZSEgIFRoZSA4NDBBVgotICogQ2FuIGFkZCBhbm90aGVyIDFNQiBSQU0gdG8gZ2l2ZSB0aGUgdHdvIGZyYW1lYnVmZmVycyAKKyAqIENhbiBhZGQgYW5vdGhlciAxTUIgUkFNIHRvIGdpdmUgdGhlIHR3byBmcmFtZWJ1ZmZlcnMKICAqIDFNQiBSQU0gYXBpZWNlLgotICoKLSAqIEZJWE1FOiB0aGlzIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGFueW1vcmUuCiAgKi8KLXN0YXRpYyBpbnQgY2l2aWNfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgY2l2aWNfc2V0cGFsZXR0ZSh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCisJCQkgICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKKwkJCSAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQlzdGF0aWMgaW50IGxhc3RyZWcgPSAtMTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjbHV0X3N0YXR1czsKIAkKLQlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4gOCkgcmV0dXJuIDE7IC8qIGZhaWxzYWZlICovCi0KLQlyZWQgICA+Pj0gODsKLQlncmVlbiA+Pj0gODsKLQlibHVlICA+Pj0gODsKKwlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4gOCkKKwkJcmV0dXJuIDE7IC8qIGZhaWxzYWZlICovCiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCi0JLyoKLQkgKiBTZXQgdGhlIHJlZ2lzdGVyIGFkZHJlc3MKLQkgKi8KLQludWJ1c193cml0ZWIocmVnbm8sICZjaXZpY19jbWFwX3JlZ3MtPmFkZHIpOyBub3AoKTsKIAotCS8qCi0JICogV2FpdCBmb3IgVkJMIGludGVycnVwdCBoZXJlOwotCSAqIFRoZXkncmUgdXN1YWxseSBub3QgZW5hYmxlZCBmcm9tIFBlbmd1aW4sIHNvIHdlIHdvbid0IGNoZWNrCi0JICovCi0jaWYgMAotCXsKLSNkZWZpbmUgQ0lWSUNfVkJMX09GRlNFVAkweDEyMAotCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICp2YmwgPSBudWJ1c19yZWFkbChjaXZpY19jbWFwX3JlZ3MtPnZibF9hZGRyICsgQ0lWSUNfVkJMX09GRlNFVCk7Ci0JCS8qIGRvIGludGVycnVwdCBzZXR1cCBzdHVmZiBoZXJlPyAqLwotCQkqdmJsID0gMEw7IG5vcCgpOwkvKiBjbGVhciAqLwotCQkqdmJsID0gMUw7IG5vcCgpOwkvKiBzZXQgKi8KLQkJd2hpbGUgKCp2YmwgIT0gMEwpCS8qIHdhaXQgZm9yIG5leHQgdmJsICovCi0JCXsKLQkJCXVzbGVlcCgxMCk7CS8qIG5lZWRlZD8gKi8KLQkJfQotCQkvKiBkbyBpbnRlcnJ1cHQgc2h1dGRvd24gc3R1ZmYgaGVyZT8gKi8KLQl9Ci0jZW5kaWYKKwkvKiBTZXQgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKwludWJ1c193cml0ZWIocmVnbm8sICZjaXZpY19jbWFwX3JlZ3MtPmFkZHIpOworCW5vcCgpOwogCiAJLyoKIAkgKiBHcmFiIGEgc3RhdHVzIHdvcmQgYW5kIGRvIHNvbWUgY2hlY2tpbmc7CkBAIC00NTksMzkgKzM3NCw1MiBAQAogI2lmIDAKIAkJaWYgKChjbHV0X3N0YXR1cyAmIDB4MDAwRCkgIT0gMCkKIAkJewotCQkJbnVidXNfd3JpdGViKDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQkJbnVidXNfd3JpdGViKDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOworCQkJbnVidXNfd3JpdGViKDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCQlub3AoKTsKKwkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQkJbm9wKCk7CiAJCX0KICNlbmRpZgogCi0JCW51YnVzX3dyaXRlYiggIHJlZCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCW51YnVzX3dyaXRlYihncmVlbiwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCW51YnVzX3dyaXRlYiggYmx1ZSwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCW51YnVzX3dyaXRlYiggMHgwMCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7CisJCW51YnVzX3dyaXRlYihyZWQsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOworCQludWJ1c193cml0ZWIoZ3JlZW4sICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOworCQludWJ1c193cml0ZWIoYmx1ZSwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CisJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOwogCX0KIAllbHNlCiAJewogCQl1bnNpZ25lZCBjaGFyIGp1bms7CiAKLQkJanVuayA9IG51YnVzX3JlYWRiKCZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQlqdW5rID0gbnVidXNfcmVhZGIoJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCWp1bmsgPSBudWJ1c19yZWFkYigmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJanVuayA9IG51YnVzX3JlYWRiKCZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOworCQlqdW5rID0gbnVidXNfcmVhZGIoJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CisJCWp1bmsgPSBudWJ1c19yZWFkYigmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJanVuayA9IG51YnVzX3JlYWRiKCZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOworCQlqdW5rID0gbnVidXNfcmVhZGIoJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CiAKIAkJaWYgKChjbHV0X3N0YXR1cyAmIDB4MDAwRCkgIT0gMCkKIAkJewotCQkJbnVidXNfd3JpdGViKDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQkJbnVidXNfd3JpdGViKDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOworCQkJbnVidXNfd3JpdGViKDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCQlub3AoKTsKKwkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQkJbm9wKCk7CiAJCX0KIAotCQludWJ1c193cml0ZWIoICByZWQsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQludWJ1c193cml0ZWIoZ3JlZW4sICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQludWJ1c193cml0ZWIoIGJsdWUsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQludWJ1c193cml0ZWIoIGp1bmssICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOworCQludWJ1c193cml0ZWIocmVkLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJbnVidXNfd3JpdGViKGdyZWVuLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJbnVidXNfd3JpdGViKGJsdWUsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOworCQludWJ1c193cml0ZWIoanVuaywgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKIAl9CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JbGFzdHJlZyA9IHJlZ25vOwogCXJldHVybiAwOwogfQogCkBAIC01MDAsMTYgKzQyOCwyMSBAQAogICogKGFuZCB0aGUgNTMwMCB0b28sIGJ1dCB0aGF0J3MgYSBQb3dlck1hYykuIFRoaXMgZnVuY3Rpb24KICAqIGJyb3VnaHQgdG8geW91IGluIHBhcnQgYnkgdGhlIEVDU0MgZHJpdmVyIGZvciBNa0xpbnV4LgogICovCi0KLXN0YXRpYyBpbnQgY3NjX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgY3NjX3NldHBhbGV0dGUodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAorCQkJICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAorCQkJICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQltZGVsYXkoMSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXVkZWxheSgxKTsgLyogbWtsaW51eCBvbiBQQiA1MzAwIHdhaXRzIGZvciAyNjAgbnMgKi8KIAludWJ1c193cml0ZWIocmVnbm8sICZjc2NfY21hcF9yZWdzLT5jbHV0X3dhZGRyKTsKLQludWJ1c193cml0ZWIocmVkLCAgICZjc2NfY21hcF9yZWdzLT5jbHV0X2RhdGEpOworCW51YnVzX3dyaXRlYihyZWQsICZjc2NfY21hcF9yZWdzLT5jbHV0X2RhdGEpOwogCW51YnVzX3dyaXRlYihncmVlbiwgJmNzY19jbWFwX3JlZ3MtPmNsdXRfZGF0YSk7Ci0JbnVidXNfd3JpdGViKGJsdWUsICAmY3NjX2NtYXBfcmVncy0+Y2x1dF9kYXRhKTsKKwludWJ1c193cml0ZWIoYmx1ZSwgJmNzY19jbWFwX3JlZ3MtPmNsdXRfZGF0YSk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUxOCwxMCArNDUxLDEwIEBACiAJCQkgICBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKIHsKIAkvKgotCSAqICBTZXQgYSBzaW5nbGUgY29sb3IgcmVnaXN0ZXIuIFRoZSB2YWx1ZXMgc3VwcGxpZWQgYXJlCi0JICogIGFscmVhZHkgcm91bmRlZCBkb3duIHRvIHRoZSBoYXJkd2FyZSdzIGNhcGFiaWxpdGllcwotCSAqICAoYWNjb3JkaW5nIHRvIHRoZSBlbnRyaWVzIGluIHRoZSBgdmFyJyBzdHJ1Y3R1cmUpLiBSZXR1cm4KLQkgKiAgIT0gMCBmb3IgaW52YWxpZCByZWduby4KKwkgKiBTZXQgYSBzaW5nbGUgY29sb3IgcmVnaXN0ZXIuIFRoZSB2YWx1ZXMgc3VwcGxpZWQgYXJlCisJICogYWxyZWFkeSByb3VuZGVkIGRvd24gdG8gdGhlIGhhcmR3YXJlJ3MgY2FwYWJpbGl0aWVzCisJICogKGFjY29yZGluZyB0byB0aGUgZW50cmllcyBpbiB0aGUgYHZhcicgc3RydWN0dXJlKS4KKwkgKiBSZXR1cm4gbm9uLXplcm8gZm9yIGludmFsaWQgcmVnbm8uCiAJICovCiAJCiAJaWYgKHJlZ25vID49IGZiX2luZm8tPmNtYXAubGVuKQpAQCAtNTM2LDggKzQ2OSw4IEBACiAJCWNhc2UgNDoKIAkJY2FzZSA4OgogCQkJaWYgKG1hY2ZiX3NldHBhbGV0dGUpCi0JCQkJbWFjZmJfc2V0cGFsZXR0ZShyZWdubywgcmVkLCBncmVlbiwgYmx1ZSwKLQkJCQkJCSBmYl9pbmZvKTsKKwkJCQltYWNmYl9zZXRwYWxldHRlKHJlZ25vLCByZWQgPj4gOCwgZ3JlZW4gPj4gOCwKKwkJCQkJCSBibHVlID4+IDgsIGZiX2luZm8pOwogCQkJZWxzZQogCQkJCXJldHVybiAxOwogCQkJYnJlYWs7CkBAIC01NTUsMjggKzQ4OCwyMiBAQAogCQkJfSBlbHNlIHsKIAkJCQkvKiAwOjU6Njo1ICovCiAJCQkJKCh1MzIqKSAoZmJfaW5mby0+cHNldWRvX3BhbGV0dGUpKVtyZWdub10gPQotCQkJCQkoKHJlZCAgICYgMHhmODAwKSAgICAgICkgfAorCQkJCQkoKHJlZCAgICYgMHhmODAwKSA+PiAgMCkgfAogCQkJCQkoKGdyZWVuICYgMHhmYzAwKSA+PiAgNSkgfAogCQkJCQkoKGJsdWUgICYgMHhmODAwKSA+PiAxMSk7CiAJCQl9CiAJCQlicmVhazsKLQkJCS8qIEknbSBwcmV0dHkgc3VyZSB0aGF0IG9uZSBvciB0aGUgb3RoZXIgb2YgdGhlc2UKLQkJCSAgIGRvZXNuJ3QgZXhpc3Qgb24gNjhrIE1hY3MgKi8KKwkJLyoKKwkJICogMjQtYml0IGNvbG91ciBhbG1vc3QgZG9lc24ndCBleGlzdCBvbiA2OGsgTWFjcyAtLQorCQkgKiBodHRwOi8vc3VwcG9ydC5hcHBsZS5jb20va2IvVEEyODYzNCAoT2xkIEFydGljbGU6IDEwOTkyKQorCQkgKi8KIAkJY2FzZSAyNDoKLQkJCXJlZCAgID4+PSA4OwotCQkJZ3JlZW4gPj49IDg7Ci0JCQlibHVlICA+Pj0gODsKLQkJCSgodTMyICopKGZiX2luZm8tPnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0KLQkJCQkocmVkICAgPDwgZmJfaW5mby0+dmFyLnJlZC5vZmZzZXQpICAgfAotCQkJCShncmVlbiA8PCBmYl9pbmZvLT52YXIuZ3JlZW4ub2Zmc2V0KSB8Ci0JCQkJKGJsdWUgIDw8IGZiX2luZm8tPnZhci5ibHVlLm9mZnNldCk7Ci0JCQlicmVhazsKIAkJY2FzZSAzMjoKIAkJCXJlZCAgID4+PSA4OwogCQkJZ3JlZW4gPj49IDg7CiAJCQlibHVlICA+Pj0gODsKIAkJCSgodTMyICopKGZiX2luZm8tPnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0KLQkJCQkocmVkICAgPDwgZmJfaW5mby0+dmFyLnJlZC5vZmZzZXQpICAgfAorCQkJCShyZWQgICA8PCBmYl9pbmZvLT52YXIucmVkLm9mZnNldCkgfAogCQkJCShncmVlbiA8PCBmYl9pbmZvLT52YXIuZ3JlZW4ub2Zmc2V0KSB8CiAJCQkJKGJsdWUgIDw8IGZiX2luZm8tPnZhci5ibHVlLm9mZnNldCk7CiAJCQlicmVhazsKQEAgLTU5NywyNSArNTI0LDI0IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgbWFjZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKIHsKIAljaGFyICp0aGlzX29wdDsKLQkKKwogCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCiAJCXJldHVybjsKLQkKKwogCXdoaWxlICgodGhpc19vcHQgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKLQkJaWYgKCEqdGhpc19vcHQpIGNvbnRpbnVlOwotCQkKLQkJaWYgKCEgc3RyY21wKHRoaXNfb3B0LCAiaW52ZXJzZSIpKQotCQkJaW52ZXJzZT0xOwotCQkvKiBUaGlzIG1lYW5zICJ0dXJuIG9uIGV4cGVyaW1lbnRhbCBDTFVUIGNvZGUiICovCi0JCWVsc2UgaWYgKCFzdHJjbXAodGhpc19vcHQsICJ2aWR0ZXN0IikpCi0JCQl2aWR0ZXN0PTE7CisJCWlmICghKnRoaXNfb3B0KQorCQkJY29udGludWU7CisKKwkJaWYgKCFzdHJjbXAodGhpc19vcHQsICJpbnZlcnNlIikpCisJCQlpbnZlcnNlID0gMTsKKwkJZWxzZQorCQkJaWYgKCFzdHJjbXAodGhpc19vcHQsICJ2aWR0ZXN0IikpCisJCQkJdmlkdGVzdCA9IDE7IC8qIGVuYWJsZSBleHBlcmltZW50YWwgQ0xVVCBjb2RlICovCiAJfQogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaW91bm1hcF9tYWNmYih2b2lkKQogewotCWlmICh2YWxreXJpZV9jbWFwX3JlZ3MpCi0JCWlvdW5tYXAodmFsa3lyaWVfY21hcF9yZWdzKTsKIAlpZiAoZGFmYl9jbWFwX3JlZ3MpCiAJCWlvdW5tYXAoZGFmYl9jbWFwX3JlZ3MpOwogCWlmICh2OF9icmF6aWxfY21hcF9yZWdzKQpAQCAtNjQyLDQ4ICs1NjgsNTUgQEAKIAlpZiAoIU1BQ0hfSVNfTUFDKSAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBUaGVyZSBjYW4gb25seSBiZSBvbmUgaW50ZXJuYWwgdmlkZW8gY29udHJvbGxlciBhbnl3YXkgc28KLQkgICB3ZSdyZSBub3QgdG9vIHdvcnJpZWQgYWJvdXQgdGhpcyAqLworCWlmIChtYWNfYmlfZGF0YS5pZCA9PSBNQUNfTU9ERUxfUTYzMCB8fAorCSAgICBtYWNfYmlfZGF0YS5pZCA9PSBNQUNfTU9ERUxfUDU4OCkKKwkJcmV0dXJuIC1FTk9ERVY7IC8qIFNlZSB2YWxreXJpZWZiLmMgKi8KKwogCW1hY2ZiX2RlZmluZWQueHJlcyA9IG1hY19iaV9kYXRhLmRpbWVuc2lvbnMgJiAweEZGRkY7CiAJbWFjZmJfZGVmaW5lZC55cmVzID0gbWFjX2JpX2RhdGEuZGltZW5zaW9ucyA+PiAxNjsKIAltYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsID0gbWFjX2JpX2RhdGEudmlkZW9kZXB0aDsKKwogCW1hY2ZiX2ZpeC5saW5lX2xlbmd0aCA9IG1hY19iaV9kYXRhLnZpZGVvcm93OwotCW1hY2ZiX2ZpeC5zbWVtX2xlbiA9IG1hY2ZiX2ZpeC5saW5lX2xlbmd0aCAqIG1hY2ZiX2RlZmluZWQueXJlczsKKwltYWNmYl9maXguc21lbV9sZW4gICAgPSBtYWNmYl9maXgubGluZV9sZW5ndGggKiBtYWNmYl9kZWZpbmVkLnlyZXM7CiAJLyogTm90ZTogcGh5c2ljYWwgYWRkcmVzcyAoc2luY2UgMi4xLjEyNykgKi8KLQltYWNmYl9maXguc21lbV9zdGFydCA9IG1hY19iaV9kYXRhLnZpZGVvYWRkcjsKLQkvKiBUaGlzIGlzIGFjdHVhbGx5IHJlZHVuZGFudCB3aXRoIHRoZSBpbml0aWFsIG1hcHBpbmdzLgotCSAgIEhvd2V2ZXIsIHRoZXJlIGFyZSBzb21lIG5vbi1vYnZpb3VzIGFzcGVjdHMgdG8gdGhlIHdheQotCSAgIHRob3NlIG1hcHBpbmdzIGFyZSBzZXQgdXAsIHNvIHRoaXMgaXMgaW4gZmFjdCB0aGUgc2FmZXN0Ci0JICAgd2F5IHRvIGVuc3VyZSB0aGF0IHRoaXMgZHJpdmVyIHdpbGwgd29yayBvbiBldmVyeSBwb3NzaWJsZQotCSAgIE1hYyAqLwotCWZiX2luZm8uc2NyZWVuX2Jhc2UgPSBpb3JlbWFwKG1hY19iaV9kYXRhLnZpZGVvYWRkciwgbWFjZmJfZml4LnNtZW1fbGVuKTsKLQkKLQlwcmludGsoIm1hY2ZiOiBmcmFtZWJ1ZmZlciBhdCAweCUwOGx4LCBtYXBwZWQgdG8gMHglcCwgc2l6ZSAlZGtcbiIsCi0JICAgICAgIG1hY2ZiX2ZpeC5zbWVtX3N0YXJ0LCBmYl9pbmZvLnNjcmVlbl9iYXNlLCBtYWNmYl9maXguc21lbV9sZW4vMTAyNCk7Ci0JcHJpbnRrKCJtYWNmYjogbW9kZSBpcyAlZHglZHglZCwgbGluZWxlbmd0aD0lZFxuIiwKLQkgICAgICAgbWFjZmJfZGVmaW5lZC54cmVzLCBtYWNmYl9kZWZpbmVkLnlyZXMsIG1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwsIG1hY2ZiX2ZpeC5saW5lX2xlbmd0aCk7Ci0JCisJbWFjZmJfZml4LnNtZW1fc3RhcnQgID0gbWFjX2JpX2RhdGEudmlkZW9hZGRyOworCiAJLyoKLQkgKglGaWxsIGluIHRoZSBhdmFpbGFibGUgdmlkZW8gcmVzb2x1dGlvbgorCSAqIFRoaXMgaXMgYWN0dWFsbHkgcmVkdW5kYW50IHdpdGggdGhlIGluaXRpYWwgbWFwcGluZ3MuCisJICogSG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgbm9uLW9idmlvdXMgYXNwZWN0cyB0byB0aGUgd2F5CisJICogdGhvc2UgbWFwcGluZ3MgYXJlIHNldCB1cCwgc28gdGhpcyBpcyBpbiBmYWN0IHRoZSBzYWZlc3QKKwkgKiB3YXkgdG8gZW5zdXJlIHRoYXQgdGhpcyBkcml2ZXIgd2lsbCB3b3JrIG9uIGV2ZXJ5IHBvc3NpYmxlIE1hYwogCSAqLwotCSAKLQltYWNmYl9kZWZpbmVkLnhyZXNfdmlydHVhbCAgID0gbWFjZmJfZGVmaW5lZC54cmVzOwotCW1hY2ZiX2RlZmluZWQueXJlc192aXJ0dWFsICAgPSBtYWNmYl9kZWZpbmVkLnlyZXM7Ci0JbWFjZmJfZGVmaW5lZC5oZWlnaHQgPSBQSVhFTF9UT19NTShtYWNmYl9kZWZpbmVkLnlyZXMpOwotCW1hY2ZiX2RlZmluZWQud2lkdGggID0gUElYRUxfVE9fTU0obWFjZmJfZGVmaW5lZC54cmVzKTsJIAorCWZiX2luZm8uc2NyZWVuX2Jhc2UgPSBpb3JlbWFwKG1hY19iaV9kYXRhLnZpZGVvYWRkciwKKwkJCQkgICAgICBtYWNmYl9maXguc21lbV9sZW4pOworCWlmICghZmJfaW5mby5zY3JlZW5fYmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlwcmludGsoIm1hY2ZiOiBzY3JvbGxpbmc6IHJlZHJhd1xuIik7CisJcHJpbnRrKCJtYWNmYjogZnJhbWVidWZmZXIgYXQgMHglMDhseCwgbWFwcGVkIHRvIDB4JXAsIHNpemUgJWRrXG4iLAorCSAgICAgICBtYWNmYl9maXguc21lbV9zdGFydCwgZmJfaW5mby5zY3JlZW5fYmFzZSwKKwkgICAgICAgbWFjZmJfZml4LnNtZW1fbGVuIC8gMTAyNCk7CisJcHJpbnRrKCJtYWNmYjogbW9kZSBpcyAlZHglZHglZCwgbGluZWxlbmd0aD0lZFxuIiwKKwkgICAgICAgbWFjZmJfZGVmaW5lZC54cmVzLCBtYWNmYl9kZWZpbmVkLnlyZXMsCisJICAgICAgIG1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwsIG1hY2ZiX2ZpeC5saW5lX2xlbmd0aCk7CisKKwkvKiBGaWxsIGluIHRoZSBhdmFpbGFibGUgdmlkZW8gcmVzb2x1dGlvbiAqLworCW1hY2ZiX2RlZmluZWQueHJlc192aXJ0dWFsID0gbWFjZmJfZGVmaW5lZC54cmVzOwogCW1hY2ZiX2RlZmluZWQueXJlc192aXJ0dWFsID0gbWFjZmJfZGVmaW5lZC55cmVzOworCW1hY2ZiX2RlZmluZWQuaGVpZ2h0ICAgICAgID0gUElYRUxfVE9fTU0obWFjZmJfZGVmaW5lZC55cmVzKTsKKwltYWNmYl9kZWZpbmVkLndpZHRoICAgICAgICA9IFBJWEVMX1RPX01NKG1hY2ZiX2RlZmluZWQueHJlcyk7CiAKLQkvKiBzb21lIGR1bW15IHZhbHVlcyBmb3IgdGltaW5nIHRvIG1ha2UgZmJzZXQgaGFwcHkgKi8KLQltYWNmYl9kZWZpbmVkLnBpeGNsb2NrICAgICA9IDEwMDAwMDAwIC8gbWFjZmJfZGVmaW5lZC54cmVzICogMTAwMCAvIG1hY2ZiX2RlZmluZWQueXJlczsKKwkvKiBTb21lIGR1bW15IHZhbHVlcyBmb3IgdGltaW5nIHRvIG1ha2UgZmJzZXQgaGFwcHkgKi8KKwltYWNmYl9kZWZpbmVkLnBpeGNsb2NrICAgICA9IDEwMDAwMDAwIC8gbWFjZmJfZGVmaW5lZC54cmVzICoKKwkJCQkgICAgIDEwMDAgLyBtYWNmYl9kZWZpbmVkLnlyZXM7CiAJbWFjZmJfZGVmaW5lZC5sZWZ0X21hcmdpbiAgPSAobWFjZmJfZGVmaW5lZC54cmVzIC8gOCkgJiAweGY4OwogCW1hY2ZiX2RlZmluZWQuaHN5bmNfbGVuICAgID0gKG1hY2ZiX2RlZmluZWQueHJlcyAvIDgpICYgMHhmODsKIAogCXN3aXRjaCAobWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCkgewogCWNhc2UgMToKLQkJLyogWFhYOiBJIHRoaW5rIHRoaXMgd2lsbCBjYXRjaCBhbnkgcHJvZ3JhbSB0aGF0IHRyaWVzCi0JCSAgIHRvIGRvIEZCSU9fUFVUQ01BUCB3aGVuIHRoZSB2aXN1YWwgaXMgbW9ub2Nocm9tZSAqLworCQkvKgorCQkgKiBYWFg6IEkgdGhpbmsgdGhpcyB3aWxsIGNhdGNoIGFueSBwcm9ncmFtIHRoYXQgdHJpZXMKKwkJICogdG8gZG8gRkJJT19QVVRDTUFQIHdoZW4gdGhlIHZpc3VhbCBpcyBtb25vY2hyb21lLgorCQkgKi8KIAkJbWFjZmJfZGVmaW5lZC5yZWQubGVuZ3RoID0gbWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbDsKIAkJbWFjZmJfZGVmaW5lZC5ncmVlbi5sZW5ndGggPSBtYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsOwogCQltYWNmYl9kZWZpbmVkLmJsdWUubGVuZ3RoID0gbWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbDsKQEAgLTcwOCw1MyArNjQxLDUyIEBACiAJCW1hY2ZiX2RlZmluZWQuZ3JlZW4ubGVuZ3RoID0gNTsKIAkJbWFjZmJfZGVmaW5lZC5ibHVlLm9mZnNldCA9IDA7CiAJCW1hY2ZiX2RlZmluZWQuYmx1ZS5sZW5ndGggPSA1OwotCQlwcmludGsoIm1hY2ZiOiBkaXJlY3Rjb2xvcjogIgotCQkgICAgICAgInNpemU9MTo1OjU6NSwgc2hpZnQ9MTU6MTA6NTowXG4iKTsKIAkJdmlkZW9fY21hcF9sZW4gPSAxNjsKLQkJLyogU2hvdWxkIGFjdHVhbGx5IGJlIEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUiwgYnV0IHRoaXMKLQkJICAgd29ya3MgdG9vICovCisJCS8qCisJCSAqIFNob3VsZCBhY3R1YWxseSBiZSBGQl9WSVNVQUxfRElSRUNUQ09MT1IsIGJ1dCB0aGlzCisJCSAqIHdvcmtzIHRvbworCQkgKi8KIAkJbWFjZmJfZml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CiAJCWJyZWFrOwogCWNhc2UgMjQ6CiAJY2FzZSAzMjoKLQkJLyogWFhYOiBoYXZlIHRvIHRlc3QgdGhlc2UuLi4gY2FuIGFueSA2OGsgTWFjcwotCQkgICBhY3R1YWxseSBkbyB0aGlzIG9uIGludGVybmFsIHZpZGVvPyAqLwogCQltYWNmYl9kZWZpbmVkLnJlZC5vZmZzZXQgPSAxNjsKIAkJbWFjZmJfZGVmaW5lZC5yZWQubGVuZ3RoID0gODsKIAkJbWFjZmJfZGVmaW5lZC5ncmVlbi5vZmZzZXQgPSA4OwogCQltYWNmYl9kZWZpbmVkLmdyZWVuLmxlbmd0aCA9IDg7CiAJCW1hY2ZiX2RlZmluZWQuYmx1ZS5vZmZzZXQgPSAwOwogCQltYWNmYl9kZWZpbmVkLmJsdWUubGVuZ3RoID0gODsKLQkJcHJpbnRrKCJtYWNmYjogdHJ1ZWNvbG9yOiAiCi0JCSAgICAgICAic2l6ZT0wOjg6ODo4LCBzaGlmdD0wOjE2Ojg6MFxuIik7CiAJCXZpZGVvX2NtYXBfbGVuID0gMTY7CiAJCW1hY2ZiX2ZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCQlicmVhazsKIAlkZWZhdWx0OgogCQl2aWRlb19jbWFwX2xlbiA9IDA7CiAJCW1hY2ZiX2ZpeC52aXN1YWwgPSBGQl9WSVNVQUxfTU9OTzAxOwotCQlwcmludGsoIm1hY2ZiOiB1bmtub3duIG9yIHVuc3VwcG9ydGVkIGJpdCBkZXB0aDogJWRcbiIsIG1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwpOworCQlwcmludGsoIm1hY2ZiOiB1bmtub3duIG9yIHVuc3VwcG9ydGVkIGJpdCBkZXB0aDogJWRcbiIsCisJCSAgICAgICBtYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsKTsKIAkJYnJlYWs7CiAJfQogCQotCS8qIEhhcmR3YXJlIGRlcGVuZGVudCBzdHVmZiAqLwotCS8qICBXZSB0YWtlIGEgd2lsZCBndWVzcyB0aGF0IGlmIHRoZSB2aWRlbyBwaHlzaWNhbCBhZGRyZXNzIGlzCi0JICogIGluIG51YnVzIHNsb3Qgc3BhY2UsIHRoYXQgdGhlIG51YnVzIGNhcmQgaXMgZHJpdmluZyB2aWRlby4KLQkgKiAgUGVuZ3VpbiByZWFsbHkgb3VnaHQgdG8gdGVsbCB1cyB3aGV0aGVyIHdlIGFyZSB1c2luZyBpbnRlcm5hbAotCSAqICB2aWRlbyBvciBub3QuCisJLyoKKwkgKiBXZSB0YWtlIGEgd2lsZCBndWVzcyB0aGF0IGlmIHRoZSB2aWRlbyBwaHlzaWNhbCBhZGRyZXNzIGlzCisJICogaW4gbnVidXMgc2xvdCBzcGFjZSwgdGhhdCB0aGUgbnVidXMgY2FyZCBpcyBkcml2aW5nIHZpZGVvLgorCSAqIFBlbmd1aW4gcmVhbGx5IG91Z2h0IHRvIHRlbGwgdXMgd2hldGhlciB3ZSBhcmUgdXNpbmcgaW50ZXJuYWwKKwkgKiB2aWRlbyBvciBub3QuCisJICogSG9wZWZ1bGx5IHdlIG9ubHkgZmluZCBvbmUgb2YgdGhlbS4gIE90aGVyd2lzZSBvdXIgTnVCdXMKKwkgKiBjb2RlIGlzIHJlYWxseSBicm9rZW4gOi0pCiAJICovCi0JLyogSG9wZWZ1bGx5IHdlIG9ubHkgZmluZCBvbmUgb2YgdGhlbS4gIE90aGVyd2lzZSBvdXIgTnVCdXMKLSAgICAgICAgICAgY29kZSBpcyByZWFsbHkgYnJva2VuIDotKSAqLwogCi0Jd2hpbGUgKChuZGV2ID0gbnVidXNfZmluZF90eXBlKE5VQlVTX0NBVF9ESVNQTEFZLCBOVUJVU19UWVBFX1ZJREVPLCBuZGV2KSkKLQkJIT0gTlVMTCkKKwl3aGlsZSAoKG5kZXYgPSBudWJ1c19maW5kX3R5cGUoTlVCVVNfQ0FUX0RJU1BMQVksCisJCQkJICAgICAgIE5VQlVTX1RZUEVfVklERU8sIG5kZXYpKSkKIAl7Ci0JCWlmICghKG1hY19iaV9kYXRhLnZpZGVvYWRkciA+PSBuZGV2LT5ib2FyZC0+c2xvdF9hZGRyCi0JCSAgICAgICYmIChtYWNfYmlfZGF0YS52aWRlb2FkZHIgPAotCQkJICAodW5zaWduZWQgbG9uZyludWJ1c19zbG90X2FkZHIobmRldi0+Ym9hcmQtPnNsb3QrMSkpKSkKKwkJdW5zaWduZWQgbG9uZyBiYXNlID0gbmRldi0+Ym9hcmQtPnNsb3RfYWRkcjsKKworCQlpZiAobWFjX2JpX2RhdGEudmlkZW9hZGRyIDwgYmFzZSB8fAorCQkgICAgbWFjX2JpX2RhdGEudmlkZW9hZGRyIC0gYmFzZSA+IDB4RkZGRkZGKQogCQkJY29udGludWU7CisKIAkJdmlkZW9faXNfbnVidXMgPSAxOwotCQkvKiBXZSBzaG91bGQgcHJvYmFibHkganVzdCB1c2UgdGhlIHNsb3QgYWRkcmVzcy4uLiAqLwotCQl2aWRlb19zbG90ID0gbmRldi0+Ym9hcmQtPnNsb3Q7CisJCXNsb3RfYWRkciA9ICh1bnNpZ25lZCBjaGFyICopYmFzZTsKIAogCQlzd2l0Y2gobmRldi0+ZHJfaHcpIHsKIAkJY2FzZSBOVUJVU19EUkhXX0FQUExFX01EQzoKQEAgLTc3MSw3ICs3MDMsNyBAQAogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIkpldCIpOwogCQkJbWFjZmJfc2V0cGFsZXR0ZSA9IGpldF9zZXRwYWxldHRlOwogCQkJbWFjZmJfZGVmaW5lZC5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKLQkJCWJyZWFrOwkJCQorCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiR2VuZXJpYyBOdUJ1cyIpOwogCQkJYnJlYWs7CkBAIC03NzksMzAgKzcxMSwxOSBAQAogCX0KIAogCS8qIElmIGl0J3Mgbm90IGEgTnVCdXMgY2FyZCwgaXQgbXVzdCBiZSBpbnRlcm5hbCB2aWRlbyAqLwotCS8qIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGlzIGdldHRpbmcgd2F5IHRvbyBiaWcuICAodGhpcyBkcml2ZXIKLSAgICAgICAgICAgaXMgdG9vLi4uKSAqLwogCWlmICghdmlkZW9faXNfbnVidXMpCi0JCXN3aXRjaCggbWFjX2JpX2RhdGEuaWQgKQotCQl7Ci0JCQkvKiBWYWxreXJpZSBRdWFkcmFzICovCi0JCWNhc2UgTUFDX01PREVMX1E2MzA6Ci0JCQkvKiBJJ20gbm90IHN1cmUgYWJvdXQgdGhpcyBvbmUgKi8KLQkJY2FzZSBNQUNfTU9ERUxfUDU4ODoKLQkJCXN0cmNweShtYWNmYl9maXguaWQsICJWYWxreXJpZSIpOwotCQkJbWFjZmJfc2V0cGFsZXR0ZSA9IHZhbGt5cmllX3NldHBhbGV0dGU7Ci0JCQltYWNmYl9kZWZpbmVkLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwotCQkJdmFsa3lyaWVfY21hcF9yZWdzID0gaW9yZW1hcChEQUNfQkFTRSwgMHgxMDAwKTsKLQkJCWJyZWFrOwotCi0JCQkvKiBEQUZCIFF1YWRyYXMgKi8KLQkJCS8qIE5vdGU6IHRoZXNlIGZpcnN0IGZvdXIgaGF2ZSB0aGUgdjcgREFGQiwgd2hpY2ggaXMKLQkJCSAgIGtub3duIHRvIGJlIHJhdGhlciB1bmxpa2UgdGhlIG9uZXMgdXNlZCBpbiB0aGUKLQkJCSAgIG90aGVyIG1vZGVscyAqLworCQlzd2l0Y2ggKG1hY19iaV9kYXRhLmlkKSB7CisJCS8qCisJCSAqIERBRkIgUXVhZHJhcworCQkgKiBOb3RlOiB0aGVzZSBmaXJzdCBmb3VyIGhhdmUgdGhlIHY3IERBRkIsIHdoaWNoIGlzCisJCSAqIGtub3duIHRvIGJlIHJhdGhlciB1bmxpa2UgdGhlIG9uZXMgdXNlZCBpbiB0aGUKKwkJICogb3RoZXIgbW9kZWxzCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9QNDc1OgogCQljYXNlIE1BQ19NT0RFTF9QNDc1RjoKIAkJY2FzZSBNQUNfTU9ERUxfUDU3NToKIAkJY2FzZSBNQUNfTU9ERUxfUTYwNToKLQkKKwogCQljYXNlIE1BQ19NT0RFTF9RODAwOgogCQljYXNlIE1BQ19NT0RFTF9RNjUwOgogCQljYXNlIE1BQ19NT0RFTF9RNjEwOgpAQCAtODE3LDE3ICs3MzgsMjEgQEAKIAkJCWRhZmJfY21hcF9yZWdzID0gaW9yZW1hcChEQUZCX0JBU0UsIDB4MTAwMCk7CiAJCQlicmVhazsKIAotCQkJLyogTEMgSUkgdXNlcyB0aGUgVjggZnJhbWVidWZmZXIgKi8KKwkJLyoKKwkJICogTEMgSUkgdXNlcyB0aGUgVjggZnJhbWVidWZmZXIKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX0xDSUk6CiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiVjgiKTsKIAkJCW1hY2ZiX3NldHBhbGV0dGUgPSB2OF9icmF6aWxfc2V0cGFsZXR0ZTsKIAkJCW1hY2ZiX2RlZmluZWQuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CiAJCQl2OF9icmF6aWxfY21hcF9yZWdzID0gaW9yZW1hcChEQUNfQkFTRSwgMHgxMDAwKTsKIAkJCWJyZWFrOwotCQkKLQkJCS8qIElJdmksIElJdnggdXNlIHRoZSAiQnJhemlsIiBmcmFtZWJ1ZmZlciAod2hpY2ggaXMKLQkJCSAgIHZlcnkgbXVjaCBsaWtlIHRoZSBWOCwgaXQgc2VlbXMsIGFuZCBwcm9iYWJseSB1c2VzCi0JCQkgICB0aGUgc2FtZSBEQUMpICovCisKKwkJLyoKKwkJICogSUl2aSwgSUl2eCB1c2UgdGhlICJCcmF6aWwiIGZyYW1lYnVmZmVyICh3aGljaCBpcworCQkgKiB2ZXJ5IG11Y2ggbGlrZSB0aGUgVjgsIGl0IHNlZW1zLCBhbmQgcHJvYmFibHkgdXNlcworCQkgKiB0aGUgc2FtZSBEQUMpCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9JSVZJOgogCQljYXNlIE1BQ19NT0RFTF9JSVZYOgogCQljYXNlIE1BQ19NT0RFTF9QNjAwOgpAQCAtODM2LDEyICs3NjEsMTQgQEAKIAkJCW1hY2ZiX2RlZmluZWQuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CiAJCQl2OF9icmF6aWxfY21hcF9yZWdzID0gaW9yZW1hcChEQUNfQkFTRSwgMHgxMDAwKTsKIAkJCWJyZWFrOwotCQkKLQkJCS8qIExDIElJSSAoYW5kIGZyaWVuZHMpIHVzZSB0aGUgU29ub3JhIGZyYW1lYnVmZmVyICovCi0JCQkvKiBJbmNpZGVudGFsbHkgdGhpcyBpcyBhbHNvIHVzZWQgaW4gdGhlIG5vbi1BViBtb2RlbHMKLQkJCSAgIG9mIHRoZSB4MTAwIFBvd2VyTWFjcyAqLwotCQkJLyogVGhlc2UgZG8gaW4gZmFjdCBzZWVtIHRvIHVzZSB0aGUgc2FtZSBEQUMgaW50ZXJmYWNlCi0JCQkgICBhcyB0aGUgTEMgSUkuICovCisKKwkJLyoKKwkJICogTEMgSUlJIChhbmQgZnJpZW5kcykgdXNlIHRoZSBTb25vcmEgZnJhbWVidWZmZXIKKwkJICogSW5jaWRlbnRhbGx5IHRoaXMgaXMgYWxzbyB1c2VkIGluIHRoZSBub24tQVYgbW9kZWxzCisJCSAqIG9mIHRoZSB4MTAwIFBvd2VyTWFjcworCQkgKiBUaGVzZSBkbyBpbiBmYWN0IHNlZW0gdG8gdXNlIHRoZSBzYW1lIERBQyBpbnRlcmZhY2UKKwkJICogYXMgdGhlIExDIElJLgorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfTENJSUk6CiAJCWNhc2UgTUFDX01PREVMX1A1MjA6CiAJCWNhc2UgTUFDX01PREVMX1A1NTA6CkBAIC04NTIsOSArNzc5LDExIEBACiAJCQl2OF9icmF6aWxfY21hcF9yZWdzID0gaW9yZW1hcChEQUNfQkFTRSwgMHgxMDAwKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBJSWNpIGFuZCBJSXNpIHVzZSB0aGUgaW5mYW1vdXMgUkJWIGNoaXAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgSUlzaSBpcyBqdXN0IGEgcmViYWRnZWQgYW5kIGNyaXBwbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJSWNpIGluIGEgZGlmZmVyZW50IGNhc2UsIEJUVykgKi8KKwkJLyoKKwkJICogSUljaSBhbmQgSUlzaSB1c2UgdGhlIGluZmFtb3VzIFJCViBjaGlwCisJCSAqICh0aGUgSUlzaSBpcyBqdXN0IGEgcmViYWRnZWQgYW5kIGNyaXBwbGVkCisJCSAqIElJY2kgaW4gYSBkaWZmZXJlbnQgY2FzZSwgQlRXKQorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfSUlDSToKIAkJY2FzZSBNQUNfTU9ERUxfSUlTSToKIAkJCW1hY2ZiX3NldHBhbGV0dGUgPSByYnZfc2V0cGFsZXR0ZTsKQEAgLTg2Myw3ICs3OTIsOSBAQAogCQkJcmJ2X2NtYXBfcmVncyA9IGlvcmVtYXAoREFDX0JBU0UsIDB4MTAwMCk7CiAJCQlicmVhazsKIAotCQkJLyogQVZzIHVzZSB0aGUgQ2l2aWMgZnJhbWVidWZmZXIgKi8KKwkJLyoKKwkJICogQVZzIHVzZSB0aGUgQ2l2aWMgZnJhbWVidWZmZXIKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX1E4NDA6CiAJCWNhc2UgTUFDX01PREVMX0M2NjA6CiAJCQltYWNmYl9zZXRwYWxldHRlID0gY2l2aWNfc2V0cGFsZXR0ZTsKQEAgLTg3MywxNSArODA0LDEwIEBACiAJCQlicmVhazsKIAogCQkKLQkJCS8qIFdyaXRlIGEgc2V0cGFsZXR0ZSBmdW5jdGlvbiBmb3IgeW91ciBtYWNoaW5lLCB0aGVuCi0JCQkgICB5b3UgY2FuIGFkZCBzb21ldGhpbmcgc2ltaWxhciBoZXJlLiAgVGhlc2UgYXJlCi0JCQkgICBncm91cGVkIGJ5IGNsYXNzZXMgb2YgdmlkZW8gY2hpcHNldHMuICBTb21lIG9mIHRoaXMKLQkJCSAgIGluZm9ybWF0aW9uIGlzIGZyb20gdGhlIFZpZGVvVG9vbGJveCAiQnVncyIgd2ViCi0JCQkgICBwYWdlIGF0Ci0JCQkgICBodHRwOi8vcmFqc2t5LnBzeWNoLm55dS5lZHUvVGlwcy9WaWRlb0J1Z3MuaHRtbCAqLwotCi0JCQkvKiBBc3NvcnRlZCB3ZWlyZG9zICovCi0JCQkvKiBXZSB0aGluayB0aGlzIG1heSBiZSBsaWtlIHRoZSBMQyBJSSAqLworCQkvKgorCQkgKiBBc3NvcnRlZCB3ZWlyZG9zCisJCSAqIFdlIHRoaW5rIHRoaXMgbWF5IGJlIGxpa2UgdGhlIExDIElJCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9MQzoKIAkJCWlmICh2aWR0ZXN0KSB7CiAJCQkJbWFjZmJfc2V0cGFsZXR0ZSA9IHY4X2JyYXppbF9zZXRwYWxldHRlOwpAQCAtODkxLDcgKzgxNywxMCBAQAogCQkJfQogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIkxDIik7CiAJCQlicmVhazsKLQkJCS8qIFdlIHRoaW5rIHRoaXMgbWF5IGJlIGxpa2UgdGhlIExDIElJICovCisKKwkJLyoKKwkJICogV2UgdGhpbmsgdGhpcyBtYXkgYmUgbGlrZSB0aGUgTEMgSUkKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX0NDTDoKIAkJCWlmICh2aWR0ZXN0KSB7CiAJCQkJbWFjZmJfc2V0cGFsZXR0ZSA9IHY4X2JyYXppbF9zZXRwYWxldHRlOwpAQCAtOTAyLDMxICs4MzEsNDIgQEAKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJDb2xvciBDbGFzc2ljIik7CiAJCQlicmVhazsKIAotCQkJLyogQW5kIHdlICpkbyogbWVhbiAid2VpcmRvcyIgKi8KKwkJLyoKKwkJICogQW5kIHdlICpkbyogbWVhbiAid2VpcmRvcyIKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX1RWOgogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIk1hYyBUViIpOwogCQkJYnJlYWs7CiAKLQkJCS8qIFRoZXNlIGRvbid0IGhhdmUgY29sb3VyLCBzbyBubyBuZWVkIHRvIHdvcnJ5ICovCisJCS8qCisJCSAqIFRoZXNlIGRvbid0IGhhdmUgY29sb3VyLCBzbyBubyBuZWVkIHRvIHdvcnJ5CisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9TRTMwOgogCQljYXNlIE1BQ19NT0RFTF9DTElJOgogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIk1vbm9jaHJvbWUiKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBQb3dlcmJvb2tzIGFyZSBwYXJ0aWN1bGFybHkgZGlmZmljdWx0LiAgTWFueSBvZgotCQkJICAgdGhlbSBoYXZlIHNlcGFyYXRlIGZyYW1lYnVmZmVycyBmb3IgZXh0ZXJuYWwgYW5kCi0JCQkgICBpbnRlcm5hbCB2aWRlbywgd2hpY2ggaXMgYWRtaXR0ZWRseSBwcmV0dHkgY29vbCwKLQkJCSAgIGJ1dCB3aWxsIGJlIGEgYml0IG9mIGEgaGVhZGFjaGUgdG8gc3VwcG9ydCBoZXJlLgotCQkJICAgQWxzbywgbWFueSBvZiB0aGVtIGFyZSBncmF5c2NhbGUsIGFuZCB3ZSBkb24ndAotCQkJICAgcmVhbGx5IHN1cHBvcnQgdGhhdC4gKi8KKwkJLyoKKwkJICogUG93ZXJib29rcyBhcmUgcGFydGljdWxhcmx5IGRpZmZpY3VsdC4gIE1hbnkgb2YKKwkJICogdGhlbSBoYXZlIHNlcGFyYXRlIGZyYW1lYnVmZmVycyBmb3IgZXh0ZXJuYWwgYW5kCisJCSAqIGludGVybmFsIHZpZGVvLCB3aGljaCBpcyBhZG1pdHRlZGx5IHByZXR0eSBjb29sLAorCQkgKiBidXQgd2lsbCBiZSBhIGJpdCBvZiBhIGhlYWRhY2hlIHRvIHN1cHBvcnQgaGVyZS4KKwkJICogQWxzbywgbWFueSBvZiB0aGVtIGFyZSBncmF5c2NhbGUsIGFuZCB3ZSBkb24ndAorCQkgKiByZWFsbHkgc3VwcG9ydCB0aGF0LgorCQkgKi8KIAorCQkvKgorCQkgKiBTbG90IDAgUk9NIHNheXMgVElNLiBObyBleHRlcm5hbCB2aWRlby4gQiZXLgorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfUEIxNDA6CiAJCWNhc2UgTUFDX01PREVMX1BCMTQ1OgogCQljYXNlIE1BQ19NT0RFTF9QQjE3MDoKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJEREMiKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBJbnRlcm5hbCBpcyBHU0MsIEV4dGVybmFsIChpZiBwcmVzZW50KSBpcyBWaVNDICovCisJCS8qCisJCSAqIEludGVybmFsIGlzIEdTQywgRXh0ZXJuYWwgKGlmIHByZXNlbnQpIGlzIFZpU0MKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX1BCMTUwOgkvKiBubyBleHRlcm5hbCB2aWRlbyAqLwogCQljYXNlIE1BQ19NT0RFTF9QQjE2MDoKIAkJY2FzZSBNQUNfTU9ERUxfUEIxNjU6CkBAIC05MzYsMTMgKzg3NiwxNyBAQAogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIkdTQyIpOwogCQkJYnJlYWs7CiAKLQkJCS8qIEludGVybmFsIGlzIFRJTSwgRXh0ZXJuYWwgaXMgVmlTQyAqLworCQkvKgorCQkgKiBJbnRlcm5hbCBpcyBUSU0sIEV4dGVybmFsIGlzIFZpU0MKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX1BCMTY1QzoKIAkJY2FzZSBNQUNfTU9ERUxfUEIxODBDOgogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIlRJTSIpOwogCQkJYnJlYWs7CiAKLQkJCS8qIEludGVybmFsIGlzIENTQywgRXh0ZXJuYWwgaXMgS2V5c3RvbmUrQXJpZWwuICovCisJCS8qCisJCSAqIEludGVybmFsIGlzIENTQywgRXh0ZXJuYWwgaXMgS2V5c3RvbmUrQXJpZWwuCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9QQjE5MDoJLyogZXh0ZXJuYWwgdmlkZW8gaXMgb3B0aW9uYWwgKi8KIAkJY2FzZSBNQUNfTU9ERUxfUEI1MjA6CiAJCWNhc2UgTUFDX01PREVMX1BCMjUwOgpAQCAtOTU0LDcgKzg5OCw3IEBACiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiQ1NDIik7CiAJCQljc2NfY21hcF9yZWdzID0gaW9yZW1hcChDU0NfQkFTRSwgMHgxMDAwKTsKIAkJCWJyZWFrOwotCQkKKwogCQlkZWZhdWx0OgogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIlVua25vd24iKTsKIAkJCWJyZWFrOwpAQCAtOTY5LDcgKzkxMyw3IEBACiAJZXJyID0gZmJfYWxsb2NfY21hcCgmZmJfaW5mby5jbWFwLCB2aWRlb19jbWFwX2xlbiwgMCk7CiAJaWYgKGVycikKIAkJZ290byBmYWlsX3VubWFwOwotCQorCiAJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoJmZiX2luZm8pOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbF9kZWFsbG9jOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYWNtb2Rlcy5jIGIvZHJpdmVycy92aWRlby9tYWNtb2Rlcy5jCmluZGV4IDA4M2Y2MDMuLmFmODZjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWFjbW9kZXMuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hY21vZGVzLmMKQEAgLTMzLDYgKzMzLDEwIEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlIG1hY19tb2RlZGJbXSA9IHsKICAgICB7CisJLyogNTEyeDM4NCwgNjBIeiwgTm9uLUludGVybGFjZWQgKDE1LjY3IE1IeiBkb3QgY2xvY2spICovCisJIm1hYzIiLCA2MCwgNTEyLCAzODQsIDYzODI4LCA4MCwgMTYsIDE5LCAxLCAzMiwgMywKKwkwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECisgICAgfSwgewogCS8qIDY0MHg0ODAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMjUuMTc1IE1IeiBkb3RjbG9jaykgKi8KIAkibWFjNSIsIDYwLCA2NDAsIDQ4MCwgMzk3MjIsIDMyLCAzMiwgMzMsIDEwLCA5NiwgMiwKIAkwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECkBAIC00MSw2ICs0NSwxMCBAQAogCSJtYWM2IiwgNjcsIDY0MCwgNDgwLCAzMzMzNCwgODAsIDgwLCAzOSwgMywgNjQsIDMsCiAJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAogICAgIH0sIHsKKwkvKiA2NDB4ODcwLCA3NUh6IChwb3J0cmFpdCksIE5vbi1JbnRlcmxhY2VkICg1Ny4yOCBNSHogZG90IGNsb2NrKSAqLworCSJtYWM3IiwgNzUsIDY0MCwgODcwLCAxNzQ1NywgODAsIDMyLCA0MiwgMywgODAsIDMsCisJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAorICAgIH0sIHsKIAkvKiA4MDB4NjAwLCA1NiBIeiwgTm9uLUludGVybGFjZWQgKDM2LjAwIE1IeiBkb3RjbG9jaykgKi8KIAkibWFjOSIsIDU2LCA4MDAsIDYwMCwgMjc3NzgsIDExMiwgNDAsIDIyLCAxLCA3MiwgMiwKIAlGQl9TWU5DX0hPUl9ISUdIX0FDVHxGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKQEAgLTEwNSwxMCArMTEzLDYgQEAKIAkibWFjMSIsIDYwLCA1MTIsIDM4NCwgcGl4Y2xvY2ssIGxlZnQsIHJpZ2h0LCB1cHBlciwgbG93ZXIsIGhzbGVuLCB2c2xlbiwKIAlzeW5jLCBGQl9WTU9ERV9JTlRFUkxBQ0VECiAgICAgfSwgewotCS8qIFZNT0RFXzUxMl8zODRfNjA6IDUxMngzODQsIDYwSHosIE5vbi1JbnRlcmxhY2VkICovCi0gICAgCSJtYWMyIiwgNjAsIDUxMiwgMzg0LCBwaXhjbG9jaywgbGVmdCwgcmlnaHQsIHVwcGVyLCBsb3dlciwgaHNsZW4sIHZzbGVuLAotCXN5bmMsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKLSAgICB9LCB7CiAJLyogVk1PREVfNjQwXzQ4MF81MEk6IDY0MHg0ODAsIDUwSHosIEludGVybGFjZWQgKFBBTCkgKi8KIAkibWFjMyIsIDUwLCA2NDAsIDQ4MCwgcGl4Y2xvY2ssIGxlZnQsIHJpZ2h0LCB1cHBlciwgbG93ZXIsIGhzbGVuLCB2c2xlbiwKIAlzeW5jLCBGQl9WTU9ERV9JTlRFUkxBQ0VECkBAIC0xMTcsMTAgKzEyMSw2IEBACiAJIm1hYzQiLCA2MCwgNjQwLCA0ODAsIHBpeGNsb2NrLCBsZWZ0LCByaWdodCwgdXBwZXIsIGxvd2VyLCBoc2xlbiwgdnNsZW4sCiAJc3luYywgRkJfVk1PREVfSU5URVJMQUNFRAogICAgIH0sIHsKLQkvKiBWTU9ERV82NDBfODcwXzc1UDogNjQweDg3MCwgNzVIeiAocG9ydHJhaXQpLCBOb24tSW50ZXJsYWNlZCAqLwotCSJtYWM3IiwgNzUsIDY0MCwgODcwLCBwaXhjbG9jaywgbGVmdCwgcmlnaHQsIHVwcGVyLCBsb3dlciwgaHNsZW4sIHZzbGVuLAotCXN5bmMsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKLSAgICB9LCB7CiAJLyogVk1PREVfNzY4XzU3Nl81MEk6IDc2OHg1NzYsIDUwSHogKFBBTCBmdWxsIGZyYW1lKSwgSW50ZXJsYWNlZCAqLwogCSJtYWM4IiwgNTAsIDc2OCwgNTc2LCBwaXhjbG9jaywgbGVmdCwgcmlnaHQsIHVwcGVyLCBsb3dlciwgaHNsZW4sIHZzbGVuLAogCXN5bmMsIEZCX1ZNT0RFX0lOVEVSTEFDRUQKQEAgLTEzNCwzOCArMTM0LDQyIEBACiAgICAgICoKICAgICAgKiAgVGhlc2UgTVVTVCBiZSBvcmRlcmVkIGluCiAgICAgICogICAgLSBpbmNyZWFzaW5nIHJlc29sdXRpb24KLSAgICAgKiAgICAtIGRlY3JlYXNpbmcgcmVmcmVzaCByYXRlCisgICAgICogICAgLSBkZWNyZWFzaW5nIHBpeGVsIGNsb2NrIHBlcmlvZAogICAgICAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1vZGVfbWFwIHsKICAgICBpbnQgdm1vZGU7CiAgICAgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZTsKIH0gbWFjX21vZGVzW10gPSB7CisgICAgLyogNTEyeDM4NCAqLworICAgIHsgVk1PREVfNTEyXzM4NF82MCwgJm1hY19tb2RlZGJbMF0gfSwKICAgICAvKiA2NDB4NDgwICovCi0gICAgeyBWTU9ERV82NDBfNDgwXzY3LCAmbWFjX21vZGVkYlsxXSB9LAotICAgIHsgVk1PREVfNjQwXzQ4MF82MCwgJm1hY19tb2RlZGJbMF0gfSwKKyAgICB7IFZNT0RFXzY0MF80ODBfNjAsICZtYWNfbW9kZWRiWzFdIH0sCisgICAgeyBWTU9ERV82NDBfNDgwXzY3LCAmbWFjX21vZGVkYlsyXSB9LAorICAgIC8qIDY0MHg4NzAgKi8KKyAgICB7IFZNT0RFXzY0MF84NzBfNzVQLCAmbWFjX21vZGVkYlszXSB9LAogICAgIC8qIDgwMHg2MDAgKi8KLSAgICB7IFZNT0RFXzgwMF82MDBfNzUsICZtYWNfbW9kZWRiWzVdIH0sCi0gICAgeyBWTU9ERV84MDBfNjAwXzcyLCAmbWFjX21vZGVkYls0XSB9LAotICAgIHsgVk1PREVfODAwXzYwMF82MCwgJm1hY19tb2RlZGJbM10gfSwKLSAgICB7IFZNT0RFXzgwMF82MDBfNTYsICZtYWNfbW9kZWRiWzJdIH0sCisgICAgeyBWTU9ERV84MDBfNjAwXzU2LCAmbWFjX21vZGVkYls0XSB9LAorICAgIHsgVk1PREVfODAwXzYwMF82MCwgJm1hY19tb2RlZGJbNV0gfSwKKyAgICB7IFZNT0RFXzgwMF82MDBfNzUsICZtYWNfbW9kZWRiWzddIH0sCisgICAgeyBWTU9ERV84MDBfNjAwXzcyLCAmbWFjX21vZGVkYls2XSB9LAogICAgIC8qIDgzMng2MjQgKi8KLSAgICB7IFZNT0RFXzgzMl82MjRfNzUsICZtYWNfbW9kZWRiWzZdIH0sCisgICAgeyBWTU9ERV84MzJfNjI0Xzc1LCAmbWFjX21vZGVkYls4XSB9LAogICAgIC8qIDEwMjR4NzY4ICovCi0gICAgeyBWTU9ERV8xMDI0Xzc2OF83NSwgJm1hY19tb2RlZGJbMTBdIH0sCi0gICAgeyBWTU9ERV8xMDI0Xzc2OF83NVYsICZtYWNfbW9kZWRiWzldIH0sCi0gICAgeyBWTU9ERV8xMDI0Xzc2OF83MCwgJm1hY19tb2RlZGJbOF0gfSwKLSAgICB7IFZNT0RFXzEwMjRfNzY4XzYwLCAmbWFjX21vZGVkYls3XSB9LAorICAgIHsgVk1PREVfMTAyNF83NjhfNjAsICZtYWNfbW9kZWRiWzldIH0sCisgICAgeyBWTU9ERV8xMDI0Xzc2OF83MCwgJm1hY19tb2RlZGJbMTBdIH0sCisgICAgeyBWTU9ERV8xMDI0Xzc2OF83NVYsICZtYWNfbW9kZWRiWzExXSB9LAorICAgIHsgVk1PREVfMTAyNF83NjhfNzUsICZtYWNfbW9kZWRiWzEyXSB9LAogICAgIC8qIDExNTJ4NzY4ICovCi0gICAgeyBWTU9ERV8xMTUyXzc2OF82MCwgJm1hY19tb2RlZGJbMTRdIH0sCisgICAgeyBWTU9ERV8xMTUyXzc2OF82MCwgJm1hY19tb2RlZGJbMTZdIH0sCiAgICAgLyogMTE1Mng4NzAgKi8KLSAgICB7IFZNT0RFXzExNTJfODcwXzc1LCAmbWFjX21vZGVkYlsxMV0gfSwKKyAgICB7IFZNT0RFXzExNTJfODcwXzc1LCAmbWFjX21vZGVkYlsxM10gfSwKICAgICAvKiAxMjgweDk2MCAqLwotICAgIHsgVk1PREVfMTI4MF85NjBfNzUsICZtYWNfbW9kZWRiWzEyXSB9LAorICAgIHsgVk1PREVfMTI4MF85NjBfNzUsICZtYWNfbW9kZWRiWzE0XSB9LAogICAgIC8qIDEyODB4MTAyNCAqLwotICAgIHsgVk1PREVfMTI4MF8xMDI0Xzc1LCAmbWFjX21vZGVkYlsxM10gfSwKKyAgICB7IFZNT0RFXzEyODBfMTAyNF83NSwgJm1hY19tb2RlZGJbMTVdIH0sCiAgICAgLyogMTYwMHgxMDI0ICovCi0gICAgeyBWTU9ERV8xNjAwXzEwMjRfNjAsICZtYWNfbW9kZWRiWzE1XSB9LAorICAgIHsgVk1PREVfMTYwMF8xMDI0XzYwLCAmbWFjX21vZGVkYlsxN10gfSwKICAgICB7IC0xLCBOVUxMIH0KIH07CiAKQEAgLTI5OSw3ICszMDMsNiBAQAogaW50IG1hY192YXJfdG9fdm1vZGUoY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIGludCAqdm1vZGUsCiAJCSAgICAgaW50ICpjbW9kZSkKIHsKLSAgICBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlID0gTlVMTDsKICAgICBjb25zdCBzdHJ1Y3QgbW9kZV9tYXAgKm1hcDsKIAogICAgIGlmICh2YXItPmJpdHNfcGVyX3BpeGVsIDw9IDgpCkBAIC0zMTEsOCArMzE0LDEzIEBACiAgICAgZWxzZQogCXJldHVybiAtRUlOVkFMOwogCisgICAgLyoKKyAgICAgKiBGaW5kIHRoZSBtYWNfbW9kZSB3aXRoIGEgbWF0Y2hpbmcgcmVzb2x1dGlvbiBvciBmYWlsaW5nIHRoYXQsIHRoZQorICAgICAqIGNsb3Nlc3QgbGFyZ2VyIHJlc29sdXRpb24uIFNraXAgbW9kZXMgd2l0aCBhIHNob3J0ZXIgcGl4ZWwgY2xvY2sgcGVyaW9kLgorICAgICAqLwogICAgIGZvciAobWFwID0gbWFjX21vZGVzOyBtYXAtPnZtb2RlICE9IC0xOyBtYXArKykgewotCW1vZGUgPSBtYXAtPm1vZGU7CisJY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZSA9IG1hcC0+bW9kZTsKKwogCWlmICh2YXItPnhyZXMgPiBtb2RlLT54cmVzIHx8IHZhci0+eXJlcyA+IG1vZGUtPnlyZXMpCiAJICAgIGNvbnRpbnVlOwogCWlmICh2YXItPnhyZXNfdmlydHVhbCA+IG1vZGUtPnhyZXMgfHwgdmFyLT55cmVzX3ZpcnR1YWwgPiBtb2RlLT55cmVzKQpAQCAtMzIyLDYgKzMzMCwyNCBAQAogCWlmICgodmFyLT52bW9kZSAmIEZCX1ZNT0RFX01BU0spICE9IG1vZGUtPnZtb2RlKQogCSAgICBjb250aW51ZTsKIAkqdm1vZGUgPSBtYXAtPnZtb2RlOworCisJLyoKKwkgKiBIYXZpbmcgZm91bmQgYSBnb29kIHJlc29sdXRpb24sIGZpbmQgdGhlIG1hdGNoaW5nIHBpeGVsIGNsb2NrCisJICogb3IgZmFpbGluZyB0aGF0LCB0aGUgY2xvc2VzdCBsb25nZXIgcGl4ZWwgY2xvY2sgcGVyaW9kLgorCSAqLworCW1hcCsrOworCXdoaWxlIChtYXAtPnZtb2RlICE9IC0xKSB7CisJICAgIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKmNsa19tb2RlID0gbWFwLT5tb2RlOworCisJICAgIGlmIChtb2RlLT54cmVzICE9IGNsa19tb2RlLT54cmVzIHx8IG1vZGUtPnlyZXMgIT0gY2xrX21vZGUtPnlyZXMpCisJCWJyZWFrOworCSAgICBpZiAodmFyLT5waXhjbG9jayA+IG1vZGUtPnBpeGNsb2NrKQorCSAgICAgICAgYnJlYWs7CisJICAgIGlmIChtb2RlLT52bW9kZSAhPSBjbGtfbW9kZS0+dm1vZGUpCisJCWNvbnRpbnVlOworCSAgICAqdm1vZGUgPSBtYXAtPnZtb2RlOworCSAgICBtYXArKzsKKwl9CiAJcmV0dXJuIDA7CiAgICAgfQogICAgIHJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9teDNmYi5jIGIvZHJpdmVycy92aWRlby9teDNmYi5jCmluZGV4IDA1NGVmMjkuLjc3MmJhM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXgzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL214M2ZiLmMKQEAgLTMyNCw4ICszMjQsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWRtYV9jb29raWVfdCBjb29raWU7CiAKLQlkZXZfZGJnKG14M2ZiLT5kZXYsICJteDNmYmkgJXAsIGRlc2MgJXAsIHNnICVwXG4iLCBteDNfZmJpLAotCQl0b190eF9kZXNjKG14M19mYmktPnR4ZCksIHRvX3R4X2Rlc2MobXgzX2ZiaS0+dHhkKS0+c2cpOworCWlmIChteDNfZmJpLT50eGQpCisJCWRldl9kYmcobXgzZmItPmRldiwgIm14M2ZiaSAlcCwgZGVzYyAlcCwgc2cgJXBcbiIsIG14M19mYmksCisJCQl0b190eF9kZXNjKG14M19mYmktPnR4ZCksIHRvX3R4X2Rlc2MobXgzX2ZiaS0+dHhkKS0+c2cpOworCWVsc2UKKwkJZGV2X2RiZyhteDNmYi0+ZGV2LCAibXgzZmJpICVwLCB0eGQgPSBOVUxMXG4iLCBteDNfZmJpKTsKIAogCS8qIFRoaXMgZW5hYmxlcyB0aGUgY2hhbm5lbCAqLwogCWlmIChteDNfZmJpLT5jb29raWUgPCAwKSB7CkBAIC02NDYsNiArNjQ5LDcgQEAKIAogc3RhdGljIHZvaWQgc2RjX3NldF9icmlnaHRuZXNzKHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiwgdWludDhfdCB2YWx1ZSkKIHsKKwlkZXZfZGJnKG14M2ZiLT5kZXYsICIlczogdmFsdWUgPSAlZFxuIiwgX19mdW5jX18sIHZhbHVlKTsKIAkvKiBUaGlzIG1pZ2h0IGJlIGJvYXJkLXNwZWNpZmljICovCiAJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCAweDAzMDAwMDAwVUwgfCB2YWx1ZSA8PCAxNiwgU0RDX1BXTV9DVFJMKTsKIAlyZXR1cm47CkBAIC0xNDg2LDEyICsxNDkwLDEyIEBACiAJCWdvdG8gZXJzZGMwOwogCX0KIAorCW14M2ZiLT5iYWNrbGlnaHRfbGV2ZWwgPSAyNTU7CisKIAlyZXQgPSBpbml0X2ZiX2NoYW4obXgzZmIsIHRvX2lkbWFjX2NoYW4oY2hhbikpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVpc2RjMDsKIAotCW14M2ZiLT5iYWNrbGlnaHRfbGV2ZWwgPSAyNTU7Ci0KIAlyZXR1cm4gMDsKIAogZWlzZGMwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wdnIyZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKaW5kZXggNTNmOGYxMS4uZjk5NzUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wdnIyZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCkBAIC04MzEsNyArODMxLDcgQEAKIAlwcmludGsoS0VSTl9OT1RJQ0UgImZiJWQ6IHJlZ2lzdGVyaW5nIHdpdGggU1EgQVBJXG4iLCBmYl9pbmZvLT5ub2RlKTsKIAogCXB2cjJmYl9tYXAgPSBzcV9yZW1hcChmYl9pbmZvLT5maXguc21lbV9zdGFydCwgZmJfaW5mby0+Zml4LnNtZW1fbGVuLAotCQkJICAgICAgZmJfaW5mby0+Zml4LmlkLCBwZ3Byb3RfdmFsKFBBR0VfU0hBUkVEKSk7CisJCQkgICAgICBmYl9pbmZvLT5maXguaWQsIFBBR0VfU0hBUkVEKTsKIAogCXByaW50ayhLRVJOX05PVElDRSAiZmIlZDogTWFwcGVkIHZpZGVvIG1lbW9yeSB0byBTUSBhZGRyIDB4JWx4XG4iLAogCSAgICAgICBmYl9pbmZvLT5ub2RlLCBwdnIyZmJfbWFwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKaW5kZXggYTY5ODMwZC4uOGQ3NjUzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCkBAIC0xMDYsNiArMTA3LDcgQEAKICNkZWZpbmUgTERSQ05UUl9TUkMJMHgwMDAxMDAwMAogI2RlZmluZSBMRFJDTlRSX01SUwkweDAwMDAwMDAyCiAjZGVmaW5lIExEUkNOVFJfTVJDCTB4MDAwMDAwMDEKKyNkZWZpbmUgTERTUl9NUlMJMHgwMDAwMDEwMAogCiBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdjsKIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuIHsKQEAgLTEyMiw4ICsxMjQsOCBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0OwogCXVuc2lnbmVkIGxvbmcgZnJhbWVfZW5kOwogCXVuc2lnbmVkIGxvbmcgcGFuX29mZnNldDsKLQl1bnNpZ25lZCBsb25nIG5ld19wYW5fb2Zmc2V0OwogCXdhaXRfcXVldWVfaGVhZF90IGZyYW1lX2VuZF93YWl0OworCXN0cnVjdCBjb21wbGV0aW9uIHZzeW5jX2NvbXBsZXRpb247CiB9OwogCiBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdiB7CkBAIC0zNjYsMTkgKzM2OCw4IEBACiAJCX0KIAogCQkvKiBWU1lOQyBFbmQgKi8KLQkJaWYgKGxkaW50ciAmIExESU5UUl9WRVMpIHsKLQkJCXVuc2lnbmVkIGxvbmcgbGRyY250ciA9IGxjZGNfcmVhZChwcml2LCBfTERSQ05UUik7Ci0JCQkvKiBTZXQgdGhlIHNvdXJjZSBhZGRyZXNzIGZvciB0aGUgbmV4dCByZWZyZXNoICovCi0JCQlsY2RjX3dyaXRlX2NoYW5fbWlycm9yKGNoLCBMRFNBMVIsIGNoLT5kbWFfaGFuZGxlICsKLQkJCQkJICAgICAgIGNoLT5uZXdfcGFuX29mZnNldCk7Ci0JCQlpZiAobGNkY19jaGFuX2lzX3N1YmxjZChjaCkpCi0JCQkJbGNkY193cml0ZShjaC0+bGNkYywgX0xEUkNOVFIsCi0JCQkJCSAgIGxkcmNudHIgXiBMRFJDTlRSX1NSUyk7Ci0JCQllbHNlCi0JCQkJbGNkY193cml0ZShjaC0+bGNkYywgX0xEUkNOVFIsCi0JCQkJCSAgIGxkcmNudHIgXiBMRFJDTlRSX01SUyk7Ci0JCQljaC0+cGFuX29mZnNldCA9IGNoLT5uZXdfcGFuX29mZnNldDsKLQkJfQorCQlpZiAobGRpbnRyICYgTERJTlRSX1ZFUykKKwkJCWNvbXBsZXRlKCZjaC0+dnN5bmNfY29tcGxldGlvbik7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNzY3LDI1ICs3NTgsNjkgQEAKIAkJCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuICpjaCA9IGluZm8tPnBhcjsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdiAqcHJpdiA9IGNoLT5sY2RjOworCXVuc2lnbmVkIGxvbmcgbGRyY250cjsKKwl1bnNpZ25lZCBsb25nIG5ld19wYW5fb2Zmc2V0OwogCi0JaWYgKGluZm8tPnZhci54b2Zmc2V0ID09IHZhci0+eG9mZnNldCAmJgotCSAgICBpbmZvLT52YXIueW9mZnNldCA9PSB2YXItPnlvZmZzZXQpCi0JCXJldHVybiAwOwkvKiBObyBjaGFuZ2UsIGRvIG5vdGhpbmcgKi8KLQotCWNoLT5uZXdfcGFuX29mZnNldCA9ICh2YXItPnlvZmZzZXQgKiBpbmZvLT5maXgubGluZV9sZW5ndGgpICsKKwluZXdfcGFuX29mZnNldCA9ICh2YXItPnlvZmZzZXQgKiBpbmZvLT5maXgubGluZV9sZW5ndGgpICsKIAkJKHZhci0+eG9mZnNldCAqIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgLyA4KSk7CiAKLQlpZiAoY2gtPm5ld19wYW5fb2Zmc2V0ICE9IGNoLT5wYW5fb2Zmc2V0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgbGRpbnRyOwotCQlsZGludHIgPSBsY2RjX3JlYWQoY2gtPmxjZGMsIF9MRElOVFIpOwotCQlsZGludHIgfD0gTERJTlRSX1ZFRTsKLQkJbGNkY193cml0ZShjaC0+bGNkYywgX0xESU5UUiwgbGRpbnRyKTsKLQkJc2hfbW9iaWxlX2xjZGNfZGVmZXJyZWRfaW9fdG91Y2goaW5mbyk7Ci0JfQorCWlmIChuZXdfcGFuX29mZnNldCA9PSBjaC0+cGFuX29mZnNldCkKKwkJcmV0dXJuIDA7CS8qIE5vIGNoYW5nZSwgZG8gbm90aGluZyAqLworCisJbGRyY250ciA9IGxjZGNfcmVhZChwcml2LCBfTERSQ05UUik7CisKKwkvKiBTZXQgdGhlIHNvdXJjZSBhZGRyZXNzIGZvciB0aGUgbmV4dCByZWZyZXNoICovCisJbGNkY193cml0ZV9jaGFuX21pcnJvcihjaCwgTERTQTFSLCBjaC0+ZG1hX2hhbmRsZSArIG5ld19wYW5fb2Zmc2V0KTsKKwlpZiAobGNkY19jaGFuX2lzX3N1YmxjZChjaCkpCisJCWxjZGNfd3JpdGUoY2gtPmxjZGMsIF9MRFJDTlRSLCBsZHJjbnRyIF4gTERSQ05UUl9TUlMpOworCWVsc2UKKwkJbGNkY193cml0ZShjaC0+bGNkYywgX0xEUkNOVFIsIGxkcmNudHIgXiBMRFJDTlRSX01SUyk7CisKKwljaC0+cGFuX29mZnNldCA9IG5ld19wYW5fb2Zmc2V0OworCisJc2hfbW9iaWxlX2xjZGNfZGVmZXJyZWRfaW9fdG91Y2goaW5mbyk7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzaF9tb2JpbGVfd2FpdF9mb3JfdnN5bmMoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW4gKmNoID0gaW5mby0+cGFyOworCXVuc2lnbmVkIGxvbmcgbGRpbnRyOworCWludCByZXQ7CisKKwkvKiBFbmFibGUgVlN5bmMgRW5kIGludGVycnVwdCAqLworCWxkaW50ciA9IGxjZGNfcmVhZChjaC0+bGNkYywgX0xESU5UUik7CisJbGRpbnRyIHw9IExESU5UUl9WRUU7CisJbGNkY193cml0ZShjaC0+bGNkYywgX0xESU5UUiwgbGRpbnRyKTsKKworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZjaC0+dnN5bmNfY29tcGxldGlvbiwKKwkJCQkJCQltc2Vjc190b19qaWZmaWVzKDEwMCkpOworCWlmICghcmV0KQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoX21vYmlsZV9pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNtZCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXR2YWw7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRkJJT19XQUlURk9SVlNZTkM6CisJCXJldHZhbCA9IHNoX21vYmlsZV93YWl0X2Zvcl92c3luYyhpbmZvKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRU5PSU9DVExDTUQ7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCisKIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIHNoX21vYmlsZV9sY2RjX29wcyA9IHsKIAkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKIAkuZmJfc2V0Y29scmVnCT0gc2hfbW9iaWxlX2xjZGNfc2V0Y29scmVnLApAQCAtNzk1LDYgKzgzMCw3IEBACiAJLmZiX2NvcHlhcmVhCT0gc2hfbW9iaWxlX2xjZGNfY29weWFyZWEsCiAJLmZiX2ltYWdlYmxpdAk9IHNoX21vYmlsZV9sY2RjX2ltYWdlYmxpdCwKIAkuZmJfcGFuX2Rpc3BsYXkgPSBzaF9tb2JpbGVfZmJfcGFuX2Rpc3BsYXksCisJLmZiX2lvY3RsICAgICAgID0gc2hfbW9iaWxlX2lvY3RsLAogfTsKIAogc3RhdGljIGludCBzaF9tb2JpbGVfbGNkY19zZXRfYnBwKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBpbnQgYnBwKQpAQCAtOTYyLDggKzk5OCw4IEBACiAJCQlnb3RvIGVycjE7CiAJCX0KIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+Y2hbaV0uZnJhbWVfZW5kX3dhaXQpOworCQlpbml0X2NvbXBsZXRpb24oJnByaXYtPmNoW2ldLnZzeW5jX2NvbXBsZXRpb24pOwogCQlwcml2LT5jaFtqXS5wYW5fb2Zmc2V0ID0gMDsKLQkJcHJpdi0+Y2hbal0ubmV3X3Bhbl9vZmZzZXQgPSAwOwogCiAJCXN3aXRjaCAocGRhdGEtPmNoW2ldLmNoYW4pIHsKIAkJY2FzZSBMQ0RDX0NIQU5fTUFJTkxDRDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmFsa3lyaWVmYi5jIGIvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMKaW5kZXggNGJiOWEwYi4uNmI1MmJmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMKQEAgLTY5LDcgKzY5LDcgQEAKICNpZmRlZiBDT05GSUdfTUFDCiAvKiBXZSBkb24ndCB5ZXQgaGF2ZSBmdW5jdGlvbnMgdG8gcmVhZCB0aGUgUFJBTS4uLiBwZXJoYXBzIHdlIGNhbgogICAgYWRhcHQgdGhlbSBmcm9tIHRoZSBQUEMgY29kZT8gKi8KLXN0YXRpYyBpbnQgZGVmYXVsdF92bW9kZSA9IFZNT0RFXzY0MF80ODBfNjc7CitzdGF0aWMgaW50IGRlZmF1bHRfdm1vZGUgPSBWTU9ERV9DSE9PU0U7CiBzdGF0aWMgaW50IGRlZmF1bHRfY21vZGUgPSBDTU9ERV84OwogI2Vsc2UKIHN0YXRpYyBpbnQgZGVmYXVsdF92bW9kZSA9IFZNT0RFX05WUkFNOwpAQCAtMzI2LDExICszMjYsMTEgQEAKIAogI2lmZGVmIENPTkZJR19NQUMKIAlpZiAoIU1BQ0hfSVNfTUFDKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKCEobWFjX2JpX2RhdGEuaWQgPT0gTUFDX01PREVMX1E2MzAKIAkgICAgICAvKiBJJ20gbm90IHN1cmUgYWJvdXQgdGhpcyBvbmUgKi8KIAkgICAgfHwgbWFjX2JpX2RhdGEuaWQgPT0gTUFDX01PREVMX1A1ODgpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBIYXJkY29kZWQgYWRkcmVzc2VzLi4uIHdlbGNvbWUgdG8gNjhrIE1hY2ludG9zaCBjb3VudHJ5IDotKSAqLwogCWZyYW1lX2J1ZmZlcl9waHlzID0gMHhmOTAwMDAwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmFsa3lyaWVmYi5oIGIvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmgKaW5kZXggOTdhYWY3Yi4uZDc4NzQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmgKKysrIGIvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmgKQEAgLTEzNCwxNSArMTM0LDcgQEAKICAgICB7IDEwMjQsIDAgfSwKIAkxMDI0LCA3NjgKIH07Ci0KLS8qIFJlZ2lzdGVyIHZhbHVlcyBmb3IgODAweDYwMCwgNzJIeiBtb2RlICgxMSkgKi8KLXN0YXRpYyBzdHJ1Y3QgdmFsa3lyaWVfcmVndmFscyB2YWxreXJpZV9yZWdfaW5pdF8xMSA9IHsKLSAgICAxMywKLSAgICB7IDE3LCAyNywgMyB9LCAgLyogcGl4ZWwgY2xvY2sgPSA0OS42M01IeiBmb3IgVj03MS42Nkh6ICovCi0gICAgeyA4MDAsIDAgfSwKLQk4MDAsIDYwMAotfTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDICovCisjZW5kaWYgLyogIWRlZmluZWQgQ09ORklHX01BQyAqLwogCiAvKiBSZWdpc3RlciB2YWx1ZXMgZm9yIDgzMng2MjQsIDc1SHogbW9kZSAoMTMpICovCiBzdGF0aWMgc3RydWN0IHZhbGt5cmllX3JlZ3ZhbHMgdmFsa3lyaWVfcmVnX2luaXRfMTMgPSB7CkBAIC0xNTIsNiArMTQ0LDE0IEBACiAJODMyLCA2MjQKIH07CiAKKy8qIFJlZ2lzdGVyIHZhbHVlcyBmb3IgODAweDYwMCwgNzJIeiBtb2RlICgxMSkgKi8KK3N0YXRpYyBzdHJ1Y3QgdmFsa3lyaWVfcmVndmFscyB2YWxreXJpZV9yZWdfaW5pdF8xMSA9IHsKKyAgICAxMywKKyAgICB7IDE3LCAyNywgMyB9LCAgLyogcGl4ZWwgY2xvY2sgPSA0OS42M01IeiBmb3IgVj03MS42Nkh6ICovCisgICAgeyA4MDAsIDAgfSwKKwk4MDAsIDYwMAorfTsKKwogLyogUmVnaXN0ZXIgdmFsdWVzIGZvciA4MDB4NjAwLCA2MEh6IG1vZGUgKDEwKSAqLwogc3RhdGljIHN0cnVjdCB2YWxreXJpZV9yZWd2YWxzIHZhbGt5cmllX3JlZ19pbml0XzEwID0gewogICAgIDEyLApAQCAtMTg4LDI0ICsxODgsMTMgQEAKIAlOVUxMLAogCU5VTEwsCiAJJnZhbGt5cmllX3JlZ19pbml0XzEwLAotI2lmZGVmIENPTkZJR19NQUMKLQlOVUxMLAotCU5VTEwsCi0JJnZhbGt5cmllX3JlZ19pbml0XzEzLAotCU5VTEwsCi0JTlVMTCwKLQlOVUxMLAotCU5VTEwsCi0jZWxzZQogCSZ2YWxreXJpZV9yZWdfaW5pdF8xMSwKIAlOVUxMLAogCSZ2YWxreXJpZV9yZWdfaW5pdF8xMywKKyNpZm5kZWYgQ09ORklHX01BQwogCSZ2YWxreXJpZV9yZWdfaW5pdF8xNCwKIAkmdmFsa3lyaWVfcmVnX2luaXRfMTUsCiAJTlVMTCwKIAkmdmFsa3lyaWVfcmVnX2luaXRfMTcsCiAjZW5kaWYKLQlOVUxMLAotCU5VTEwsCi0JTlVMTAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCmluZGV4IDUwNWJlODguLjM2OWYyZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYwpAQCAtMjgsNyArMjgsNyBAQAogc3RydWN0IHZpcnRpb19iYWxsb29uCiB7CiAJc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXY7Ci0Jc3RydWN0IHZpcnRxdWV1ZSAqaW5mbGF0ZV92cSwgKmRlZmxhdGVfdnE7CisJc3RydWN0IHZpcnRxdWV1ZSAqaW5mbGF0ZV92cSwgKmRlZmxhdGVfdnEsICpzdGF0c192cTsKIAogCS8qIFdoZXJlIHRoZSBiYWxsb29uaW5nIHRocmVhZCB3YWl0cyBmb3IgY29uZmlnIHRvIGNoYW5nZS4gKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBjb25maWdfY2hhbmdlOwpAQCAtNDksNiArNDksMTAgQEAKIAkvKiBUaGUgYXJyYXkgb2YgcGZucyB3ZSB0ZWxsIHRoZSBIb3N0IGFib3V0LiAqLwogCXVuc2lnbmVkIGludCBudW1fcGZuczsKIAl1MzIgcGZuc1syNTZdOworCisJLyogTWVtb3J5IHN0YXRpc3RpY3MgKi8KKwlpbnQgbmVlZF9zdGF0c191cGRhdGU7CisJc3RydWN0IHZpcnRpb19iYWxsb29uX3N0YXQgc3RhdHNbVklSVElPX0JBTExPT05fU19OUl07CiB9OwogCiBzdGF0aWMgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKQEAgLTE1NCw2ICsxNTgsNzIgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc3RhdChzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiLCBpbnQgaWR4LAorCQkJICAgICAgIHUxNiB0YWcsIHU2NCB2YWwpCit7CisJQlVHX09OKGlkeCA+PSBWSVJUSU9fQkFMTE9PTl9TX05SKTsKKwl2Yi0+c3RhdHNbaWR4XS50YWcgPSB0YWc7CisJdmItPnN0YXRzW2lkeF0udmFsID0gdmFsOworfQorCisjZGVmaW5lIHBhZ2VzX3RvX2J5dGVzKHgpICgodTY0KSh4KSA8PCBQQUdFX1NISUZUKQorCitzdGF0aWMgdm9pZCB1cGRhdGVfYmFsbG9vbl9zdGF0cyhzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiKQoreworCXVuc2lnbmVkIGxvbmcgZXZlbnRzW05SX1ZNX0VWRU5UX0lURU1TXTsKKwlzdHJ1Y3Qgc3lzaW5mbyBpOworCWludCBpZHggPSAwOworCisJYWxsX3ZtX2V2ZW50cyhldmVudHMpOworCXNpX21lbWluZm8oJmkpOworCisJdXBkYXRlX3N0YXQodmIsIGlkeCsrLCBWSVJUSU9fQkFMTE9PTl9TX1NXQVBfSU4sCisJCQkJcGFnZXNfdG9fYnl0ZXMoZXZlbnRzW1BTV1BJTl0pKTsKKwl1cGRhdGVfc3RhdCh2YiwgaWR4KyssIFZJUlRJT19CQUxMT09OX1NfU1dBUF9PVVQsCisJCQkJcGFnZXNfdG9fYnl0ZXMoZXZlbnRzW1BTV1BPVVRdKSk7CisJdXBkYXRlX3N0YXQodmIsIGlkeCsrLCBWSVJUSU9fQkFMTE9PTl9TX01BSkZMVCwgZXZlbnRzW1BHTUFKRkFVTFRdKTsKKwl1cGRhdGVfc3RhdCh2YiwgaWR4KyssIFZJUlRJT19CQUxMT09OX1NfTUlORkxULCBldmVudHNbUEdGQVVMVF0pOworCXVwZGF0ZV9zdGF0KHZiLCBpZHgrKywgVklSVElPX0JBTExPT05fU19NRU1GUkVFLAorCQkJCXBhZ2VzX3RvX2J5dGVzKGkuZnJlZXJhbSkpOworCXVwZGF0ZV9zdGF0KHZiLCBpZHgrKywgVklSVElPX0JBTExPT05fU19NRU1UT1QsCisJCQkJcGFnZXNfdG9fYnl0ZXMoaS50b3RhbHJhbSkpOworfQorCisvKgorICogV2hpbGUgbW9zdCB2aXJ0cXVldWVzIGNvbW11bmljYXRlIGd1ZXN0LWluaXRpYXRlZCByZXF1ZXN0cyB0byB0aGUgaHlwZXJ2aXNvciwKKyAqIHRoZSBzdGF0cyBxdWV1ZSBvcGVyYXRlcyBpbiByZXZlcnNlLiAgVGhlIGRyaXZlciBpbml0aWFsaXplcyB0aGUgdmlydHF1ZXVlCisgKiB3aXRoIGEgc2luZ2xlIGJ1ZmZlci4gIEZyb20gdGhhdCBwb2ludCBmb3J3YXJkLCBhbGwgY29udmVyc2F0aW9ucyBjb25zaXN0IG9mCisgKiBhIGh5cGVydmlzb3IgcmVxdWVzdCAoYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24pIHdoaWNoIGRpcmVjdHMgdXMgdG8gcmVmaWxsCisgKiB0aGUgdmlydHF1ZXVlIHdpdGggYSBmcmVzaCBzdGF0cyBidWZmZXIuICBTaW5jZSBzdGF0cyBjb2xsZWN0aW9uIGNhbiBzbGVlcCwKKyAqIHdlIG5vdGlmeSBvdXIga3RocmVhZCB3aGljaCBkb2VzIHRoZSBhY3R1YWwgd29yayB2aWEgc3RhdHNfaGFuZGxlX3JlcXVlc3QoKS4KKyAqLworc3RhdGljIHZvaWQgc3RhdHNfcmVxdWVzdChzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiOworCXVuc2lnbmVkIGludCBsZW47CisKKwl2YiA9IHZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pOworCWlmICghdmIpCisJCXJldHVybjsKKwl2Yi0+bmVlZF9zdGF0c191cGRhdGUgPSAxOworCXdha2VfdXAoJnZiLT5jb25maWdfY2hhbmdlKTsKK30KKworc3RhdGljIHZvaWQgc3RhdHNfaGFuZGxlX3JlcXVlc3Qoc3RydWN0IHZpcnRpb19iYWxsb29uICp2YikKK3sKKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisKKwl2Yi0+bmVlZF9zdGF0c191cGRhdGUgPSAwOworCXVwZGF0ZV9iYWxsb29uX3N0YXRzKHZiKTsKKworCXZxID0gdmItPnN0YXRzX3ZxOworCXNnX2luaXRfb25lKCZzZywgdmItPnN0YXRzLCBzaXplb2YodmItPnN0YXRzKSk7CisJaWYgKHZxLT52cV9vcHMtPmFkZF9idWYodnEsICZzZywgMSwgMCwgdmIpIDwgMCkKKwkJQlVHKCk7CisJdnEtPnZxX29wcy0+a2ljayh2cSk7Cit9CisKIHN0YXRpYyB2b2lkIHZpcnRiYWxsb29uX2NoYW5nZWQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHZpcnRpb19iYWxsb29uICp2YiA9IHZkZXYtPnByaXY7CkBAIC0xOTAsOCArMjYwLDExIEBACiAJCXRyeV90b19mcmVlemUoKTsKIAkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHZiLT5jb25maWdfY2hhbmdlLAogCQkJCQkgKGRpZmYgPSB0b3dhcmRzX3RhcmdldCh2YikpICE9IDAKKwkJCQkJIHx8IHZiLT5uZWVkX3N0YXRzX3VwZGF0ZQogCQkJCQkgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpCiAJCQkJCSB8fCBmcmVlemluZyhjdXJyZW50KSk7CisJCWlmICh2Yi0+bmVlZF9zdGF0c191cGRhdGUpCisJCQlzdGF0c19oYW5kbGVfcmVxdWVzdCh2Yik7CiAJCWlmIChkaWZmID4gMCkKIAkJCWZpbGxfYmFsbG9vbih2YiwgZGlmZik7CiAJCWVsc2UgaWYgKGRpZmYgPCAwKQpAQCAtMjA0LDEwICsyNzcsMTAgQEAKIHN0YXRpYyBpbnQgdmlydGJhbGxvb25fcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHZpcnRpb19iYWxsb29uICp2YjsKLQlzdHJ1Y3QgdmlydHF1ZXVlICp2cXNbMl07Ci0JdnFfY2FsbGJhY2tfdCAqY2FsbGJhY2tzW10gPSB7IGJhbGxvb25fYWNrLCBiYWxsb29uX2FjayB9OwotCWNvbnN0IGNoYXIgKm5hbWVzW10gPSB7ICJpbmZsYXRlIiwgImRlZmxhdGUiIH07Ci0JaW50IGVycjsKKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cXNbM107CisJdnFfY2FsbGJhY2tfdCAqY2FsbGJhY2tzW10gPSB7IGJhbGxvb25fYWNrLCBiYWxsb29uX2Fjaywgc3RhdHNfcmVxdWVzdCB9OworCWNvbnN0IGNoYXIgKm5hbWVzW10gPSB7ICJpbmZsYXRlIiwgImRlZmxhdGUiLCAic3RhdHMiIH07CisJaW50IGVyciwgbnZxczsKIAogCXZkZXYtPnByaXYgPSB2YiA9IGttYWxsb2Moc2l6ZW9mKCp2YiksIEdGUF9LRVJORUwpOwogCWlmICghdmIpIHsKQEAgLTIxOSwxNCArMjkyLDMxIEBACiAJdmItPm51bV9wYWdlcyA9IDA7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdmItPmNvbmZpZ19jaGFuZ2UpOwogCXZiLT52ZGV2ID0gdmRldjsKKwl2Yi0+bmVlZF9zdGF0c191cGRhdGUgPSAwOwogCi0JLyogV2UgZXhwZWN0IHR3byB2aXJ0cXVldWVzLiAqLwotCWVyciA9IHZkZXYtPmNvbmZpZy0+ZmluZF92cXModmRldiwgMiwgdnFzLCBjYWxsYmFja3MsIG5hbWVzKTsKKwkvKiBXZSBleHBlY3QgdHdvIHZpcnRxdWV1ZXM6IGluZmxhdGUgYW5kIGRlZmxhdGUsCisJICogYW5kIG9wdGlvbmFsbHkgc3RhdC4gKi8KKwludnFzID0gdmlydGlvX2hhc19mZWF0dXJlKHZiLT52ZGV2LCBWSVJUSU9fQkFMTE9PTl9GX1NUQVRTX1ZRKSA/IDMgOiAyOworCWVyciA9IHZkZXYtPmNvbmZpZy0+ZmluZF92cXModmRldiwgbnZxcywgdnFzLCBjYWxsYmFja3MsIG5hbWVzKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlX3ZiOwogCiAJdmItPmluZmxhdGVfdnEgPSB2cXNbMF07CiAJdmItPmRlZmxhdGVfdnEgPSB2cXNbMV07CisJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2Yi0+dmRldiwgVklSVElPX0JBTExPT05fRl9TVEFUU19WUSkpIHsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCQl2Yi0+c3RhdHNfdnEgPSB2cXNbMl07CisKKwkJLyoKKwkJICogUHJpbWUgdGhpcyB2aXJ0cXVldWUgd2l0aCBvbmUgYnVmZmVyIHNvIHRoZSBoeXBlcnZpc29yIGNhbgorCQkgKiB1c2UgaXQgdG8gc2lnbmFsIHVzIGxhdGVyLgorCQkgKi8KKwkJc2dfaW5pdF9vbmUoJnNnLCB2Yi0+c3RhdHMsIHNpemVvZiB2Yi0+c3RhdHMpOworCQlpZiAodmItPnN0YXRzX3ZxLT52cV9vcHMtPmFkZF9idWYodmItPnN0YXRzX3ZxLAorCQkJCQkJICAmc2csIDEsIDAsIHZiKSA8IDApCisJCQlCVUcoKTsKKwkJdmItPnN0YXRzX3ZxLT52cV9vcHMtPmtpY2sodmItPnN0YXRzX3ZxKTsKKwl9CiAKIAl2Yi0+dGhyZWFkID0ga3RocmVhZF9ydW4oYmFsbG9vbiwgdmIsICJ2YmFsbG9vbiIpOwogCWlmIChJU19FUlIodmItPnRocmVhZCkpIHsKQEAgLTI2NCw3ICszNTQsMTAgQEAKIAlrZnJlZSh2Yik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHsgVklSVElPX0JBTExPT05fRl9NVVNUX1RFTExfSE9TVCB9Oworc3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0geworCVZJUlRJT19CQUxMT09OX0ZfTVVTVF9URUxMX0hPU1QsCisJVklSVElPX0JBTExPT05fRl9TVEFUU19WUSwKK307CiAKIHN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RyaXZlciB2aXJ0aW9fYmFsbG9vbl9kcml2ZXIgPSB7CiAJLmZlYXR1cmVfdGFibGUgPSBmZWF0dXJlcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwppbmRleCAyOGQ5Y2Y3Li4xYjY1NzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCkBAIC00NzMsNyArNDczLDggQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2cSwgbiwgJnZkZXYtPnZxcywgbGlzdCkgewogCQlpbmZvID0gdnEtPnByaXY7Ci0JCWlmICh2cF9kZXYtPnBlcl92cV92ZWN0b3JzKQorCQlpZiAodnBfZGV2LT5wZXJfdnFfdmVjdG9ycyAmJgorCQkJaW5mby0+bXNpeF92ZWN0b3IgIT0gVklSVElPX01TSV9OT19WRUNUT1IpCiAJCQlmcmVlX2lycSh2cF9kZXYtPm1zaXhfZW50cmllc1tpbmZvLT5tc2l4X3ZlY3Rvcl0udmVjdG9yLAogCQkJCSB2cSk7CiAJCXZwX2RlbF92cSh2cSk7CkBAIC03MDIsNyArNzAzLDcgQEAKIAkubmFtZQkJPSAidmlydGlvLXBjaSIsCiAJLmlkX3RhYmxlCT0gdmlydGlvX3BjaV9pZF90YWJsZSwKIAkucHJvYmUJCT0gdmlydGlvX3BjaV9wcm9iZSwKLQkucmVtb3ZlCQk9IHZpcnRpb19wY2lfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodmlydGlvX3BjaV9yZW1vdmUpLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gdmlydGlvX3BjaV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gdmlydGlvX3BjaV9yZXN1bWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwppbmRleCBmYmQyZWNkLi4wZGI5MDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKQEAgLTIxLDYgKzIxLDI0IEBACiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCisvKiB2aXJ0aW8gZ3Vlc3QgaXMgY29tbXVuaWNhdGluZyB3aXRoIGEgdmlydHVhbCAiZGV2aWNlIiB0aGF0IGFjdHVhbGx5IHJ1bnMgb24KKyAqIGEgaG9zdCBwcm9jZXNzb3IuICBNZW1vcnkgYmFycmllcnMgYXJlIHVzZWQgdG8gY29udHJvbCBTTVAgZWZmZWN0cy4gKi8KKyNpZmRlZiBDT05GSUdfU01QCisvKiBXaGVyZSBwb3NzaWJsZSwgdXNlIFNNUCBiYXJyaWVycyB3aGljaCBhcmUgbW9yZSBsaWdodHdlaWdodCB0aGFuIG1hbmRhdG9yeQorICogYmFycmllcnMsIGJlY2F1c2UgbWFuZGF0b3J5IGJhcnJpZXJzIGNvbnRyb2wgTU1JTyBlZmZlY3RzIG9uIGFjY2Vzc2VzCisgKiB0aHJvdWdoIHJlbGF4ZWQgbWVtb3J5IEkvTyB3aW5kb3dzICh3aGljaCB2aXJ0aW8gZG9lcyBub3QgdXNlKS4gKi8KKyNkZWZpbmUgdmlydGlvX21iKCkgc21wX21iKCkKKyNkZWZpbmUgdmlydGlvX3JtYigpIHNtcF9ybWIoKQorI2RlZmluZSB2aXJ0aW9fd21iKCkgc21wX3dtYigpCisjZWxzZQorLyogV2UgbXVzdCBmb3JjZSBtZW1vcnkgb3JkZXJpbmcgZXZlbiBpZiBndWVzdCBpcyBVUCBzaW5jZSBob3N0IGNvdWxkIGJlCisgKiBydW5uaW5nIG9uIGFub3RoZXIgQ1BVLCBidXQgU01QIGJhcnJpZXJzIGFyZSBkZWZpbmVkIHRvIGJhcnJpZXIoKSBpbiB0aGF0CisgKiBjb25maWd1cmF0aW9uLiBTbyBmYWxsIGJhY2sgdG8gbWFuZGF0b3J5IGJhcnJpZXJzIGluc3RlYWQuICovCisjZGVmaW5lIHZpcnRpb19tYigpIG1iKCkKKyNkZWZpbmUgdmlydGlvX3JtYigpIHJtYigpCisjZGVmaW5lIHZpcnRpb193bWIoKSB3bWIoKQorI2VuZGlmCisKICNpZmRlZiBERUJVRwogLyogRm9yIGRldmVsb3BtZW50LCB3ZSB3YW50IHRvIGNyYXNoIHdoZW5ldmVyIHRoZSByaW5nIGlzIHNjcmV3ZWQuICovCiAjZGVmaW5lIEJBRF9SSU5HKF92cSwgZm10LCBhcmdzLi4uKQkJCQlcCkBAIC0zNiwxMCArNTQsOSBAQAogCQkJcGFuaWMoIiVzOmluX3VzZSA9ICVpXG4iLAkJXAogCQkJICAgICAgKF92cSktPnZxLm5hbWUsIChfdnEpLT5pbl91c2UpOwlcCiAJCShfdnEpLT5pbl91c2UgPSBfX0xJTkVfXzsJCQlcCi0JCW1iKCk7CQkJCQkJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIEVORF9VU0UoX3ZxKSBcCi0JZG8geyBCVUdfT04oIShfdnEpLT5pbl91c2UpOyAoX3ZxKS0+aW5fdXNlID0gMDsgbWIoKTsgfSB3aGlsZSgwKQorCWRvIHsgQlVHX09OKCEoX3ZxKS0+aW5fdXNlKTsgKF92cSktPmluX3VzZSA9IDA7IH0gd2hpbGUoMCkKICNlbHNlCiAjZGVmaW5lIEJBRF9SSU5HKF92cSwgZm10LCBhcmdzLi4uKQkJCQlcCiAJZG8gewkJCQkJCQlcCkBAIC0yMjEsMTMgKzIzOCwxMyBAQAogCVNUQVJUX1VTRSh2cSk7CiAJLyogRGVzY3JpcHRvcnMgYW5kIGF2YWlsYWJsZSBhcnJheSBuZWVkIHRvIGJlIHNldCBiZWZvcmUgd2UgZXhwb3NlIHRoZQogCSAqIG5ldyBhdmFpbGFibGUgYXJyYXkgZW50cmllcy4gKi8KLQl3bWIoKTsKKwl2aXJ0aW9fd21iKCk7CiAKIAl2cS0+dnJpbmcuYXZhaWwtPmlkeCArPSB2cS0+bnVtX2FkZGVkOwogCXZxLT5udW1fYWRkZWQgPSAwOwogCiAJLyogTmVlZCB0byB1cGRhdGUgYXZhaWwgaW5kZXggYmVmb3JlIGNoZWNraW5nIGlmIHdlIHNob3VsZCBub3RpZnkgKi8KLQltYigpOworCXZpcnRpb19tYigpOwogCiAJaWYgKCEodnEtPnZyaW5nLnVzZWQtPmZsYWdzICYgVlJJTkdfVVNFRF9GX05PX05PVElGWSkpCiAJCS8qIFByb2Qgb3RoZXIgc2lkZSB0byB0ZWxsIGl0IGFib3V0IGNoYW5nZXMuICovCkBAIC0yODYsNyArMzAzLDcgQEAKIAl9CiAKIAkvKiBPbmx5IGdldCB1c2VkIGFycmF5IGVudHJpZXMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gZXhwb3NlZCBieSBob3N0LiAqLwotCXJtYigpOworCXZpcnRpb19ybWIoKTsKIAogCWkgPSB2cS0+dnJpbmcudXNlZC0+cmluZ1t2cS0+bGFzdF91c2VkX2lkeCV2cS0+dnJpbmcubnVtXS5pZDsKIAkqbGVuID0gdnEtPnZyaW5nLnVzZWQtPnJpbmdbdnEtPmxhc3RfdXNlZF9pZHgldnEtPnZyaW5nLm51bV0ubGVuOwpAQCAtMzI0LDcgKzM0MSw3IEBACiAJLyogV2Ugb3B0aW1pc3RpY2FsbHkgdHVybiBiYWNrIG9uIGludGVycnVwdHMsIHRoZW4gY2hlY2sgaWYgdGhlcmUgd2FzCiAJICogbW9yZSB0byBkby4gKi8KIAl2cS0+dnJpbmcuYXZhaWwtPmZsYWdzICY9IH5WUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVDsKLQltYigpOworCXZpcnRpb19tYigpOwogCWlmICh1bmxpa2VseShtb3JlX3VzZWQodnEpKSkgewogCQlFTkRfVVNFKHZxKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMzM0LDYgKzM1MSwzMCBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCAqdnJpbmdfZGV0YWNoX3VudXNlZF9idWYoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQoreworCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7CisJdW5zaWduZWQgaW50IGk7CisJdm9pZCAqYnVmOworCisJU1RBUlRfVVNFKHZxKTsKKworCWZvciAoaSA9IDA7IGkgPCB2cS0+dnJpbmcubnVtOyBpKyspIHsKKwkJaWYgKCF2cS0+ZGF0YVtpXSkKKwkJCWNvbnRpbnVlOworCQkvKiBkZXRhY2hfYnVmIGNsZWFycyBkYXRhLCBzbyBncmFiIGl0IG5vdy4gKi8KKwkJYnVmID0gdnEtPmRhdGFbaV07CisJCWRldGFjaF9idWYodnEsIGkpOworCQlFTkRfVVNFKHZxKTsKKwkJcmV0dXJuIGJ1ZjsKKwl9CisJLyogVGhhdCBzaG91bGQgaGF2ZSBmcmVlZCBldmVyeXRoaW5nLiAqLworCUJVR19PTih2cS0+bnVtX2ZyZWUgIT0gdnEtPnZyaW5nLm51bSk7CisKKwlFTkRfVVNFKHZxKTsKKwlyZXR1cm4gTlVMTDsKK30KKwogaXJxcmV0dXJuX3QgdnJpbmdfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKl92cSkKIHsKIAlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOwpAQCAtMzYwLDYgKzQwMSw3IEBACiAJLmtpY2sgPSB2cmluZ19raWNrLAogCS5kaXNhYmxlX2NiID0gdnJpbmdfZGlzYWJsZV9jYiwKIAkuZW5hYmxlX2NiID0gdnJpbmdfZW5hYmxlX2NiLAorCS5kZXRhY2hfdW51c2VkX2J1ZiA9IHZyaW5nX2RldGFjaF91bnVzZWRfYnVmLAogfTsKIAogc3RydWN0IHZpcnRxdWV1ZSAqdnJpbmdfbmV3X3ZpcnRxdWV1ZSh1bnNpZ25lZCBpbnQgbnVtLApAQCAtNDA2LDggKzQ0OCwxMSBAQAogCS8qIFB1dCBldmVyeXRoaW5nIGluIGZyZWUgbGlzdHMuICovCiAJdnEtPm51bV9mcmVlID0gbnVtOwogCXZxLT5mcmVlX2hlYWQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBudW0tMTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBudW0tMTsgaSsrKSB7CiAJCXZxLT52cmluZy5kZXNjW2ldLm5leHQgPSBpKzE7CisJCXZxLT5kYXRhW2ldID0gTlVMTDsKKwl9CisJdnEtPmRhdGFbaV0gPSBOVUxMOwogCiAJcmV0dXJuICZ2cS0+dnE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2FyN193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXI3X3dkdC5jCmluZGV4IDJlOTRiNzEuLjJiYjk1Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYXI3X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXI3X3dkdC5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXI3L2FyNy5oPgpAQCAtODAsNiArODEsOCBAQAogLyogUG9pbnRlciB0byB0aGUgcmVtYXBwZWQgV0RUIElPIHNwYWNlICovCiBzdGF0aWMgc3RydWN0IGFyN193ZHQgKmFyN193ZHQ7CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrICp2YnVzX2NsazsKKwogc3RhdGljIHZvaWQgYXI3X3dkdF9raWNrKHUzMiB2YWx1ZSkKIHsKIAlXUklURV9SRUcoYXI3X3dkdC0+a2lja19sb2NrLCAweDU1NTUpOwpAQCAtMTM4LDE3ICsxNDEsMTkgQEAKIHN0YXRpYyB2b2lkIGFyN193ZHRfdXBkYXRlX21hcmdpbihpbnQgbmV3X21hcmdpbikKIHsKIAl1MzIgY2hhbmdlOworCXUzMiB2YnVzX3JhdGU7CiAKLQljaGFuZ2UgPSBuZXdfbWFyZ2luICogKGFyN192YnVzX2ZyZXEoKSAvIHByZXNjYWxlX3ZhbHVlKTsKKwl2YnVzX3JhdGUgPSBjbGtfZ2V0X3JhdGUodmJ1c19jbGspOworCWNoYW5nZSA9IG5ld19tYXJnaW4gKiAodmJ1c19yYXRlIC8gcHJlc2NhbGVfdmFsdWUpOwogCWlmIChjaGFuZ2UgPCAxKQogCQljaGFuZ2UgPSAxOwogCWlmIChjaGFuZ2UgPiAweGZmZmYpCiAJCWNoYW5nZSA9IDB4ZmZmZjsKIAlhcjdfd2R0X2NoYW5nZShjaGFuZ2UpOwotCW1hcmdpbiA9IGNoYW5nZSAqIHByZXNjYWxlX3ZhbHVlIC8gYXI3X3ZidXNfZnJlcSgpOworCW1hcmdpbiA9IGNoYW5nZSAqIHByZXNjYWxlX3ZhbHVlIC8gdmJ1c19yYXRlOwogCXByaW50ayhLRVJOX0lORk8gRFJWTkFNRQogCSAgICAgICAiOiB0aW1lciBtYXJnaW4gJWQgc2Vjb25kcyAocHJlc2NhbGUgJWQsIGNoYW5nZSAlZCwgZnJlcSAlZClcbiIsCi0JICAgICAgIG1hcmdpbiwgcHJlc2NhbGVfdmFsdWUsIGNoYW5nZSwgYXI3X3ZidXNfZnJlcSgpKTsKKwkgICAgICAgbWFyZ2luLCBwcmVzY2FsZV92YWx1ZSwgY2hhbmdlLCB2YnVzX3JhdGUpOwogfQogCiBzdGF0aWMgdm9pZCBhcjdfd2R0X2VuYWJsZV93ZHQodm9pZCkKQEAgLTI5OCw2ICszMDMsMTMgQEAKIAkJZ290byBvdXRfbWVtX3JlZ2lvbjsKIAl9CiAKKwl2YnVzX2NsayA9IGNsa19nZXQoTlVMTCwgInZidXMiKTsKKwlpZiAoSVNfRVJSKHZidXNfY2xrKSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBjb3VsZCBub3QgZ2V0IHZidXMgY2xvY2tcbiIpOworCQlyYyA9IFBUUl9FUlIodmJ1c19jbGspOworCQlnb3RvIG91dF9tZW1fcmVnaW9uOworCX0KKwogCWFyN193ZHRfZGlzYWJsZV93ZHQoKTsKIAlhcjdfd2R0X3ByZXNjYWxlKHByZXNjYWxlX3ZhbHVlKTsKIAlhcjdfd2R0X3VwZGF0ZV9tYXJnaW4obWFyZ2luKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYmZpbl93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYmZpbl93ZHQuYwppbmRleCBjN2IzZjlkLi4yMTU5ZTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2JmaW5fd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9iZmluX3dkdC5jCkBAIC0xLDkgKzEsOCBAQAogLyoKICAqIEJsYWNrZmluIE9uLUNoaXAgV2F0Y2hkb2cgRHJpdmVyCi0gKiAgU3VwcG9ydHMgQkY1M1sxMjNdL0JGNTNbNDY3XS9CRjU0WzI0ODldL0JGNTYxCiAgKgogICogT3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0ZG9nLmMKLSAqIENvcHlyaWdodCAyMDA2LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwNi0yMDA3IE1pY2hlbGUgZCdBbWljbwogICogQ29weXJpZ2h0IDE5OTYgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCkBAIC0xMzcsMTMgKzEzNiwxNSBAQAogICovCiBzdGF0aWMgaW50IGJmaW5fd2R0X3NldF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgdCkKIHsKLQl1MzIgY250OworCXUzMiBjbnQsIG1heF90LCBzY2xrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzdGFtcGl0KCk7CisJc2NsayA9IGdldF9zY2xrKCk7CisJbWF4X3QgPSAtMSAvIHNjbGs7CisJY250ID0gdCAqIHNjbGs7CisJc3RhbXAoIm1heHRpbWVvdXQ9JXVzIG5ld3RpbWVvdXQ9JWx1cyAoY250PSUjeCkiLCBtYXhfdCwgdCwgY250KTsKIAotCWNudCA9IHQgKiBnZXRfc2NsaygpOwotCWlmIChjbnQgPCBnZXRfc2NsaygpKSB7CisJaWYgKHQgPiBtYXhfdCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAidGltZW91dCB2YWx1ZSBpcyB0b28gbGFyZ2VcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKaW5kZXggNDMwYTU4NC4uYzdhOTQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYwpAQCAtOTYsOSArOTYsNiBAQAogewogCXNwaW5fbG9jaygmaW9fbG9jayk7CiAKLQlpZiAod2R0X2NsaykKLQkJY2xrX3NldF9yYXRlKHdkdF9jbGssIDEpOwotCiAJLyogc3RvcCBjb3VudGVyLCBpbml0aWF0ZSBjb3VudGVyIHJlc2V0ICovCiAJX19yYXdfd3JpdGVsKFJFU0VUX0NPVU5ULCBXRFRJTV9DVFJMKHdkdF9iYXNlKSk7CiAJLyp3YWl0IGZvciByZXNldCB0byBjb21wbGV0ZS4gMTAwJSBndWFyYW50ZWUgZXZlbnQgKi8KQEAgLTEyNSwxOSArMTIyLDI1IEBACiAJc3Bpbl9sb2NrKCZpb19sb2NrKTsKIAogCV9fcmF3X3dyaXRlbCgwLCBXRFRJTV9DVFJMKHdkdF9iYXNlKSk7CS8qc3RvcCBjb3VudGVyICovCi0JaWYgKHdkdF9jbGspCi0JCWNsa19zZXRfcmF0ZSh3ZHRfY2xrLCAwKTsKIAogCXNwaW5fdW5sb2NrKCZpb19sb2NrKTsKIH0KIAogc3RhdGljIGludCBwbng0MDA4X3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogeworCWludCByZXQ7CisKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChXRFRfSU5fVVNFLCAmd2R0X3N0YXR1cykpCiAJCXJldHVybiAtRUJVU1k7CiAKIAljbGVhcl9iaXQoV0RUX09LX1RPX0NMT1NFLCAmd2R0X3N0YXR1cyk7CiAKKwlyZXQgPSBjbGtfZW5hYmxlKHdkdF9jbGspOworCWlmIChyZXQpIHsKKwkJY2xlYXJfYml0KFdEVF9JTl9VU0UsICZ3ZHRfc3RhdHVzKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAl3ZHRfZW5hYmxlKCk7CiAKIAlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CkBAIC0yMjUsNiArMjI4LDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FUQ0hET0c6IERldmljZSBjbG9zZWQgdW5leHBlY3RkbHlcbiIpOwogCiAJd2R0X2Rpc2FibGUoKTsKKwljbGtfZGlzYWJsZSh3ZHRfY2xrKTsKIAljbGVhcl9iaXQoV0RUX0lOX1VTRSwgJndkdF9zdGF0dXMpOwogCWNsZWFyX2JpdChXRFRfT0tfVE9fQ0xPU0UsICZ3ZHRfc3RhdHVzKTsKIApAQCAtMjczLDI1ICsyNzcsMzMgQEAKIAl9CiAJd2R0X2Jhc2UgPSAodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhyZXMtPnN0YXJ0KTsKIAotCXdkdF9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ3ZHRfY2siKTsKKwl3ZHRfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKHdkdF9jbGspKSB7CiAJCXJldCA9IFBUUl9FUlIod2R0X2Nsayk7CiAJCXJlbGVhc2VfcmVzb3VyY2Uod2R0X21lbSk7CiAJCWtmcmVlKHdkdF9tZW0pOwogCQlnb3RvIG91dDsKLQl9IGVsc2UKLQkJY2xrX3NldF9yYXRlKHdkdF9jbGssIDEpOworCX0KKworCXJldCA9IGNsa19lbmFibGUod2R0X2Nsayk7CisJaWYgKHJldCkgeworCQlyZWxlYXNlX3Jlc291cmNlKHdkdF9tZW0pOworCQlrZnJlZSh3ZHRfbWVtKTsKKwkJZ290byBvdXQ7CisJfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmcG54NDAwOF93ZHRfbWlzY2Rldik7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIE1PRFVMRV9OQU1FICJjYW5ub3QgcmVnaXN0ZXIgbWlzYyBkZXZpY2VcbiIpOwogCQlyZWxlYXNlX3Jlc291cmNlKHdkdF9tZW0pOwogCQlrZnJlZSh3ZHRfbWVtKTsKLQkJY2xrX3NldF9yYXRlKHdkdF9jbGssIDApOworCQljbGtfZGlzYWJsZSh3ZHRfY2xrKTsKKwkJY2xrX3B1dCh3ZHRfY2xrKTsKIAl9IGVsc2UgewogCQlib290X3N0YXR1cyA9IChfX3Jhd19yZWFkbChXRFRJTV9SRVMod2R0X2Jhc2UpKSAmIFdET0dfUkVTRVQpID8KIAkJICAgIFdESU9GX0NBUkRSRVNFVCA6IDA7CiAJCXdkdF9kaXNhYmxlKCk7CQkvKmRpc2FibGUgZm9yIG5vdyAqLworCQljbGtfZGlzYWJsZSh3ZHRfY2xrKTsKIAkJc2V0X2JpdChXRFRfREVWSUNFX0lOSVRFRCwgJndkdF9zdGF0dXMpOwogCX0KIApAQCAtMzAyLDExICszMTQsMTAgQEAKIHN0YXRpYyBpbnQgX19kZXZleGl0IHBueDQwMDhfd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCW1pc2NfZGVyZWdpc3RlcigmcG54NDAwOF93ZHRfbWlzY2Rldik7Ci0JaWYgKHdkdF9jbGspIHsKLQkJY2xrX3NldF9yYXRlKHdkdF9jbGssIDApOwotCQljbGtfcHV0KHdkdF9jbGspOwotCQl3ZHRfY2xrID0gTlVMTDsKLQl9CisKKwljbGtfZGlzYWJsZSh3ZHRfY2xrKTsKKwljbGtfcHV0KHdkdF9jbGspOworCiAJaWYgKHdkdF9tZW0pIHsKIAkJcmVsZWFzZV9yZXNvdXJjZSh3ZHRfbWVtKTsKIAkJa2ZyZWUod2R0X21lbSk7CmRpZmYgLS1naXQgYS9mcy85cC92OWZzLmMgYi9mcy85cC92OWZzLmMKaW5kZXggY2Y2MmIwNS4uN2Q2YzIxMyAxMDA2NDQKLS0tIGEvZnMvOXAvdjlmcy5jCisrKyBiL2ZzLzlwL3Y5ZnMuYwpAQCAtODQsNyArODQsNyBAQAogCiBzdGF0aWMgaW50IHY5ZnNfcGFyc2Vfb3B0aW9ucyhzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCBjaGFyICpvcHRzKQogewotCWNoYXIgKm9wdGlvbnM7CisJY2hhciAqb3B0aW9ucywgKnRtcF9vcHRpb25zOwogCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKIAljaGFyICpwOwogCWludCBvcHRpb24gPSAwOwpAQCAtMTAyLDkgKzEwMiwxMiBAQAogCWlmICghb3B0cykKIAkJcmV0dXJuIDA7CiAKLQlvcHRpb25zID0ga3N0cmR1cChvcHRzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9wdGlvbnMpCisJdG1wX29wdGlvbnMgPSBrc3RyZHVwKG9wdHMsIEdGUF9LRVJORUwpOworCWlmICghdG1wX29wdGlvbnMpIHsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBmYWlsX29wdGlvbl9hbGxvYzsKKwl9CisJb3B0aW9ucyA9IHRtcF9vcHRpb25zOwogCiAJd2hpbGUgKChwID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7CiAJCWludCB0b2tlbjsKQEAgLTE1OSw4ICsxNjIsMTIgQEAKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9jYWNoZToKIAkJCXMgPSBtYXRjaF9zdHJkdXAoJmFyZ3NbMF0pOwotCQkJaWYgKCFzKQotCQkJCWdvdG8gZmFpbF9vcHRpb25fYWxsb2M7CisJCQlpZiAoIXMpIHsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCisJCQkJICAicHJvYmxlbSBhbGxvY2F0aW5nIGNvcHkgb2YgY2FjaGUgYXJnXG4iKTsKKwkJCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKKwkJCX0KIAogCQkJaWYgKHN0cmNtcChzLCAibG9vc2UiKSA9PSAwKQogCQkJCXY5c2VzLT5jYWNoZSA9IENBQ0hFX0xPT1NFOwpAQCAtMTczLDggKzE4MCwxMiBAQAogCiAJCWNhc2UgT3B0X2FjY2VzczoKIAkJCXMgPSBtYXRjaF9zdHJkdXAoJmFyZ3NbMF0pOwotCQkJaWYgKCFzKQotCQkJCWdvdG8gZmFpbF9vcHRpb25fYWxsb2M7CisJCQlpZiAoIXMpIHsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCisJCQkJICAicHJvYmxlbSBhbGxvY2F0aW5nIGNvcHkgb2YgYWNjZXNzIGFyZ1xuIik7CisJCQkJZ290byBmcmVlX2FuZF9yZXR1cm47CisJCQl9CiAKIAkJCXY5c2VzLT5mbGFncyAmPSB+VjlGU19BQ0NFU1NfTUFTSzsKIAkJCWlmIChzdHJjbXAocywgInVzZXIiKSA9PSAwKQpAQCAtMTk0LDEzICsyMDUsMTEgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJfQotCWtmcmVlKG9wdGlvbnMpOwotCXJldHVybiByZXQ7CiAKK2ZyZWVfYW5kX3JldHVybjoKKwlrZnJlZSh0bXBfb3B0aW9ucyk7CiBmYWlsX29wdGlvbl9hbGxvYzoKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAotCQkgICAiZmFpbGVkIHRvIGFsbG9jYXRlIGNvcHkgb2Ygb3B0aW9uIGFyZ3VtZW50XG4iKTsKLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnNfdmZzLmggYi9mcy85cC92OWZzX3Zmcy5oCmluZGV4IDNhNzU2MGUuLmVkODM1ODMgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Y5ZnNfdmZzLmgKKysrIGIvZnMvOXAvdjlmc192ZnMuaApAQCAtNjAsMyArNjAsNCBAQAogaW50IHY5ZnNfdWZsYWdzMm9tb2RlKGludCB1ZmxhZ3MsIGludCBleHRlbmRlZCk7CiAKIHNzaXplX3Qgdjlmc19maWxlX3JlYWRuKHN0cnVjdCBmaWxlICosIGNoYXIgKiwgY2hhciBfX3VzZXIgKiwgdTMyLCB1NjQpOwordm9pZCB2OWZzX2JsYW5rX3dzdGF0KHN0cnVjdCBwOV93c3RhdCAqd3N0YXQpOwpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2ZpbGUuYyBiL2ZzLzlwL3Zmc19maWxlLmMKaW5kZXggMzkwMmJmNC4uNzRhMDQ2MSAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2ZpbGUuYworKysgYi9mcy85cC92ZnNfZmlsZS5jCkBAIC0yNTcsNiArMjU3LDIzIEBACiAJcmV0dXJuIHRvdGFsOwogfQogCitzdGF0aWMgaW50IHY5ZnNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCQlpbnQgZGF0YXN5bmMpCit7CisJc3RydWN0IHA5X2ZpZCAqZmlkOworCXN0cnVjdCBwOV93c3RhdCB3c3RhdDsKKwlpbnQgcmV0dmFsOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJmaWxwICVwIGRlbnRyeSAlcCBkYXRhc3luYyAleFxuIiwgZmlscCwKKwkJCQkJCWRlbnRyeSwgZGF0YXN5bmMpOworCisJZmlkID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXY5ZnNfYmxhbmtfd3N0YXQoJndzdGF0KTsKKworCXJldHZhbCA9IHA5X2NsaWVudF93c3RhdChmaWQsICZ3c3RhdCk7CisJcmV0dXJuIHJldHZhbDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdjlmc19jYWNoZWRfZmlsZV9vcGVyYXRpb25zID0gewogCS5sbHNlZWsgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkID0gZG9fc3luY19yZWFkLApAQCAtMjY2LDYgKzI4Myw3IEBACiAJLnJlbGVhc2UgPSB2OWZzX2Rpcl9yZWxlYXNlLAogCS5sb2NrID0gdjlmc19maWxlX2xvY2ssCiAJLm1tYXAgPSBnZW5lcmljX2ZpbGVfcmVhZG9ubHlfbW1hcCwKKwkuZnN5bmMgPSB2OWZzX2ZpbGVfZnN5bmMsCiB9OwogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHY5ZnNfZmlsZV9vcGVyYXRpb25zID0gewpAQCAtMjc2LDQgKzI5NCw1IEBACiAJLnJlbGVhc2UgPSB2OWZzX2Rpcl9yZWxlYXNlLAogCS5sb2NrID0gdjlmc19maWxlX2xvY2ssCiAJLm1tYXAgPSBnZW5lcmljX2ZpbGVfcmVhZG9ubHlfbW1hcCwKKwkuZnN5bmMgPSB2OWZzX2ZpbGVfZnN5bmMsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuYwppbmRleCA5ZDAzZDFlLi5hNDA3ZmEzIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYworKysgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAgKgogICovCiAKLXN0YXRpYyB2b2lkCit2b2lkCiB2OWZzX2JsYW5rX3dzdGF0KHN0cnVjdCBwOV93c3RhdCAqd3N0YXQpCiB7CiAJd3N0YXQtPnR5cGUgPSB+MDsKZGlmZiAtLWdpdCBhL2ZzL2JlZnMvbGludXh2ZnMuYyBiL2ZzL2JlZnMvbGludXh2ZnMuYwppbmRleCAzM2JhZjI3Li4zNGRkZGE4IDEwMDY0NAotLS0gYS9mcy9iZWZzL2xpbnV4dmZzLmMKKysrIGIvZnMvYmVmcy9saW51eHZmcy5jCkBAIC04NzMsNiArODczLDcgQEAKIAlicmVsc2UoYmgpOwogCiAgICAgICB1bmFjcXVpcmVfcHJpdl9zYnA6CisJa2ZyZWUoYmVmc19zYi0+bW91bnRfb3B0cy5pb2NoYXJzZXQpOwogCWtmcmVlKHNiLT5zX2ZzX2luZm8pOwogCiAgICAgICB1bmFjcXVpcmVfbm9uZToKZGlmZiAtLWdpdCBhL2ZzL2Jpby1pbnRlZ3JpdHkuYyBiL2ZzL2Jpby1pbnRlZ3JpdHkuYwppbmRleCA0OWEzNGU3Li5hMTZmMjllIDEwMDY0NAotLS0gYS9mcy9iaW8taW50ZWdyaXR5LmMKKysrIGIvZnMvYmlvLWludGVncml0eS5jCkBAIC02MSw3ICs2MSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHVzZV9iaXBfcG9vbCh1bnNpZ25lZCBpbnQgaWR4KQogewotCWlmIChpZHggPT0gQklPVkVDX05SX1BPT0xTKQorCWlmIChpZHggPT0gQklPVkVDX01BWF9JRFgpCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CkBAIC05NSw2ICs5NSw3IEBACiAKIAkvKiBVc2UgbWVtcG9vbCBpZiBsb3dlciBvcmRlciBhbGxvYyBmYWlsZWQgb3IgbWF4IHZlY3Mgd2VyZSByZXF1ZXN0ZWQgKi8KIAlpZiAoYmlwID09IE5VTEwpIHsKKwkJaWR4ID0gQklPVkVDX01BWF9JRFg7ICAvKiBzbyB3ZSBmcmVlIHRoZSBwYXlsb2FkIHByb3Blcmx5IGxhdGVyICovCiAJCWJpcCA9IG1lbXBvb2xfYWxsb2MoYnMtPmJpb19pbnRlZ3JpdHlfcG9vbCwgZ2ZwX21hc2spOwogCiAJCWlmICh1bmxpa2VseShiaXAgPT0gTlVMTCkpIHsKZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggMTI0MjljOS4uMGJkYTI4OWYgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby5jCisrKyBiL2ZzL2Jpby5jCkBAIC01MDcsMTAgKzUwNyw4IEBACiAJaW50IG5yX3BhZ2VzOwogCiAJbnJfcGFnZXMgPSAoKHF1ZXVlX21heF9zZWN0b3JzKHEpIDw8IDkpICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKLQlpZiAobnJfcGFnZXMgPiBxdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxKSkKLQkJbnJfcGFnZXMgPSBxdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxKTsKLQlpZiAobnJfcGFnZXMgPiBxdWV1ZV9tYXhfaHdfc2VnbWVudHMocSkpCi0JCW5yX3BhZ2VzID0gcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEpOworCWlmIChucl9wYWdlcyA+IHF1ZXVlX21heF9zZWdtZW50cyhxKSkKKwkJbnJfcGFnZXMgPSBxdWV1ZV9tYXhfc2VnbWVudHMocSk7CiAKIAlyZXR1cm4gbnJfcGFnZXM7CiB9CkBAIC01NDIsMTcgKzU0MCwyMiBAQAogCiAJCWlmIChwYWdlID09IHByZXYtPmJ2X3BhZ2UgJiYKIAkJICAgIG9mZnNldCA9PSBwcmV2LT5idl9vZmZzZXQgKyBwcmV2LT5idl9sZW4pIHsKKwkJCXVuc2lnbmVkIGludCBwcmV2X2J2X2xlbiA9IHByZXYtPmJ2X2xlbjsKIAkJCXByZXYtPmJ2X2xlbiArPSBsZW47CiAKIAkJCWlmIChxLT5tZXJnZV9idmVjX2ZuKSB7CiAJCQkJc3RydWN0IGJ2ZWNfbWVyZ2VfZGF0YSBidm0gPSB7CisJCQkJCS8qIHByZXZfYnZlYyBpcyBhbHJlYWR5IGNoYXJnZWQgaW4KKwkJCQkJICAgYmlfc2l6ZSwgZGlzY2hhcmdlIGl0IGluIG9yZGVyIHRvCisJCQkJCSAgIHNpbXVsYXRlIG1lcmdpbmcgdXBkYXRlZCBwcmV2X2J2ZWMKKwkJCQkJICAgYXMgbmV3IGJ2ZWMuICovCiAJCQkJCS5iaV9iZGV2ID0gYmlvLT5iaV9iZGV2LAogCQkJCQkuYmlfc2VjdG9yID0gYmlvLT5iaV9zZWN0b3IsCi0JCQkJCS5iaV9zaXplID0gYmlvLT5iaV9zaXplLAorCQkJCQkuYmlfc2l6ZSA9IGJpby0+Ymlfc2l6ZSAtIHByZXZfYnZfbGVuLAogCQkJCQkuYmlfcncgPSBiaW8tPmJpX3J3LAogCQkJCX07CiAKLQkJCQlpZiAocS0+bWVyZ2VfYnZlY19mbihxLCAmYnZtLCBwcmV2KSA8IGxlbikgeworCQkJCWlmIChxLT5tZXJnZV9idmVjX2ZuKHEsICZidm0sIHByZXYpICE9IHByZXYtPmJ2X2xlbikgewogCQkJCQlwcmV2LT5idl9sZW4gLT0gbGVuOwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CkBAIC01NzAsOCArNTczLDcgQEAKIAkgKiBtYWtlIHRoaXMgdG9vIGNvbXBsZXguCiAJICovCiAKLQl3aGlsZSAoYmlvLT5iaV9waHlzX3NlZ21lbnRzID49IHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpCi0JICAgICAgIHx8IGJpby0+YmlfcGh5c19zZWdtZW50cyA+PSBxdWV1ZV9tYXhfaHdfc2VnbWVudHMocSkpIHsKKwl3aGlsZSAoYmlvLT5iaV9waHlzX3NlZ21lbnRzID49IHF1ZXVlX21heF9zZWdtZW50cyhxKSkgewogCiAJCWlmIChyZXRyaWVkX3NlZ21lbnRzKQogCQkJcmV0dXJuIDA7CkBAIC02MDYsNyArNjA4LDcgQEAKIAkJICogbWVyZ2VfYnZlY19mbigpIHJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIGl0IGNhbiBhY2NlcHQKIAkJICogYXQgdGhpcyBvZmZzZXQKIAkJICovCi0JCWlmIChxLT5tZXJnZV9idmVjX2ZuKHEsICZidm0sIGJ2ZWMpIDwgbGVuKSB7CisJCWlmIChxLT5tZXJnZV9idmVjX2ZuKHEsICZidm0sIGJ2ZWMpICE9IGJ2ZWMtPmJ2X2xlbikgewogCQkJYnZlYy0+YnZfcGFnZSA9IE5VTEw7CiAJCQlidmVjLT5idl9sZW4gPSAwOwogCQkJYnZlYy0+YnZfb2Zmc2V0ID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggNzNkNmE3My4uZDExZDAyOCAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTI0Niw3ICsyNDYsOCBAQAogCWlmICghc2IpCiAJCWdvdG8gb3V0OwogCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkgewotCQlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7CisJCXNiLT5zX2Zyb3plbiA9IFNCX0ZSRUVaRV9UUkFOUzsKKwkJdXBfd3JpdGUoJnNiLT5zX3Vtb3VudCk7CiAJCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOwogCQlyZXR1cm4gc2I7CiAJfQpAQCAtMzA3LDcgKzMwOCw3IEBACiAJQlVHX09OKHNiLT5zX2JkZXYgIT0gYmRldik7CiAJZG93bl93cml0ZSgmc2ItPnNfdW1vdW50KTsKIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCi0JCWdvdG8gb3V0X2RlYWN0aXZhdGU7CisJCWdvdG8gb3V0X3VuZnJvemVuOwogCiAJaWYgKHNiLT5zX29wLT51bmZyZWV6ZV9mcykgewogCQllcnJvciA9IHNiLT5zX29wLT51bmZyZWV6ZV9mcyhzYik7CkBAIC0zMjEsMTEgKzMyMiwxMSBAQAogCQl9CiAJfQogCitvdXRfdW5mcm96ZW46CiAJc2ItPnNfZnJvemVuID0gU0JfVU5GUk9aRU47CiAJc21wX3dtYigpOwogCXdha2VfdXAoJnNiLT5zX3dhaXRfdW5mcm96ZW4pOwogCi1vdXRfZGVhY3RpdmF0ZToKIAlpZiAoc2IpCiAJCWRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTsKIG91dF91bmxvY2s6CmRpZmYgLS1naXQgYS9mcy9idHJmcy9kaXNrLWlvLmMgYi9mcy9idHJmcy9kaXNrLWlvLmMKaW5kZXggODdiMjU1NC4uMmI1OTIwMSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlzay1pby5jCisrKyBiL2ZzL2J0cmZzL2Rpc2staW8uYwpAQCAtMTk4Miw3ICsxOTgyLDEyIEBACiAKIAlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKIAkJcmV0ID0gYnRyZnNfcmVjb3Zlcl9yZWxvY2F0aW9uKHRyZWVfcm9vdCk7Ci0JCUJVR19PTihyZXQpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJidHJmczogZmFpbGVkIHRvIHJlY292ZXIgcmVsb2NhdGlvblxuIik7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBmYWlsX3RyYW5zX2t0aHJlYWQ7CisJCX0KIAl9CiAKIAlsb2NhdGlvbi5vYmplY3RpZCA9IEJUUkZTX0ZTX1RSRUVfT0JKRUNUSUQ7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCA0MzJhMmRhLi41NTlmNzI0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTU0MDIsMTAgKzU0MDIsNiBAQAogCWludCByZXQ7CiAKIAl3aGlsZSAobGV2ZWwgPj0gMCkgewotCQlpZiAocGF0aC0+c2xvdHNbbGV2ZWxdID49Ci0JCSAgICBidHJmc19oZWFkZXJfbnJpdGVtcyhwYXRoLT5ub2Rlc1tsZXZlbF0pKQotCQkJYnJlYWs7Ci0KIAkJcmV0ID0gd2Fsa19kb3duX3Byb2ModHJhbnMsIHJvb3QsIHBhdGgsIHdjLCBsb29rdXBfaW5mbyk7CiAJCWlmIChyZXQgPiAwKQogCQkJYnJlYWs7CkBAIC01NDEzLDYgKzU0MDksMTAgQEAKIAkJaWYgKGxldmVsID09IDApCiAJCQlicmVhazsKIAorCQlpZiAocGF0aC0+c2xvdHNbbGV2ZWxdID49CisJCSAgICBidHJmc19oZWFkZXJfbnJpdGVtcyhwYXRoLT5ub2Rlc1tsZXZlbF0pKQorCQkJYnJlYWs7CisKIAkJcmV0ID0gZG9fd2Fsa19kb3duKHRyYW5zLCByb290LCBwYXRoLCB3YywgJmxvb2t1cF9pbmZvKTsKIAkJaWYgKHJldCA+IDApIHsKIAkJCXBhdGgtPnNsb3RzW2xldmVsXSsrOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMgYi9mcy9idHJmcy9leHRlbnRfaW8uYwppbmRleCA5NjU3N2U4Li5iMTc3ZWQzIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uYworKysgYi9mcy9idHJmcy9leHRlbnRfaW8uYwpAQCAtMzE2NSwxMCArMzE2NSw5IEBACiAJCXNwaW5fdW5sb2NrKCZ0cmVlLT5idWZmZXJfbG9jayk7CiAJCWdvdG8gZnJlZV9lYjsKIAl9Ci0Jc3Bpbl91bmxvY2soJnRyZWUtPmJ1ZmZlcl9sb2NrKTsKLQogCS8qIGFkZCBvbmUgcmVmZXJlbmNlIGZvciB0aGUgdHJlZSAqLwogCWF0b21pY19pbmMoJmViLT5yZWZzKTsKKwlzcGluX3VubG9jaygmdHJlZS0+YnVmZmVyX2xvY2spOwogCXJldHVybiBlYjsKIAogZnJlZV9lYjoKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZpbGUuYyBiL2ZzL2J0cmZzL2ZpbGUuYwppbmRleCBjMDIwMzM1Li42ZWQ0MzRhIDEwMDY0NAotLS0gYS9mcy9idHJmcy9maWxlLmMKKysrIGIvZnMvYnRyZnMvZmlsZS5jCkBAIC03MjAsMTMgKzcyMCwxNSBAQAogCQkJCQlpbm9kZS0+aV9pbm8sIG9yaWdfb2Zmc2V0KTsKIAkJQlVHX09OKHJldCk7CiAJfQotCWZpID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0sCi0JCQkgICBzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSk7CiAJaWYgKGRlbF9uciA9PSAwKSB7CisJCWZpID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0sCisJCQkgICBzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSk7CiAJCWJ0cmZzX3NldF9maWxlX2V4dGVudF90eXBlKGxlYWYsIGZpLAogCQkJCQkgICBCVFJGU19GSUxFX0VYVEVOVF9SRUcpOwogCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKIAl9IGVsc2UgeworCQlmaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIGRlbF9zbG90IC0gMSwKKwkJCSAgIHN0cnVjdCBidHJmc19maWxlX2V4dGVudF9pdGVtKTsKIAkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X3R5cGUobGVhZiwgZmksCiAJCQkJCSAgIEJUUkZTX0ZJTEVfRVhURU5UX1JFRyk7CiAJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmksCkBAIC0xMTMzLDcgKzExMzUsNyBAQAogCX0KIAltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogb3V0OgotCXJldHVybiByZXQgPiAwID8gRUlPIDogcmV0OworCXJldHVybiByZXQgPiAwID8gLUVJTyA6IHJldDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBidHJmc19maWxlX3ZtX29wcyA9IHsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLmMgYi9mcy9idHJmcy9pbm9kZS5jCmluZGV4IDhjZDEwOTkuLjRkZWIyODAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lub2RlLmMKKysrIGIvZnMvYnRyZnMvaW5vZGUuYwpAQCAtMTY4MSwyNCArMTY4MSw2IEBACiAgKiBiZWZvcmUgd2Ugc3RhcnQgdGhlIHRyYW5zYWN0aW9uLiAgSXQgbGltaXRzIHRoZSBhbW91bnQgb2YgYnRyZWUKICAqIHJlYWRzIHJlcXVpcmVkIHdoaWxlIGluc2lkZSB0aGUgdHJhbnNhY3Rpb24uCiAgKi8KLXN0YXRpYyBub2lubGluZSB2b2lkIHJlYWRhX2NzdW0oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCi0JCQkJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICpvcmRlcmVkX2V4dGVudCkKLXsKLQlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9zdW0gKnN1bTsKLQl1NjQgYnl0ZW5yOwotCi0Jc3VtID0gbGlzdF9lbnRyeShvcmRlcmVkX2V4dGVudC0+bGlzdC5uZXh0LCBzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9zdW0sCi0JCQkgbGlzdCk7Ci0JYnl0ZW5yID0gc3VtLT5zdW1zWzBdLmJ5dGVucjsKLQotCS8qCi0JICogd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgcmVzdWx0cywgdGhlIHBvaW50IG9mIHRoaXMgc2VhcmNoIGlzCi0JICoganVzdCB0byBnZXQgdGhlIGJ0cmVlIGxlYXZlcyBpbnRvIHJhbQotCSAqLwotCWJ0cmZzX2xvb2t1cF9jc3VtKE5VTEwsIHJvb3QtPmZzX2luZm8tPmNzdW1fcm9vdCwgcGF0aCwgYnl0ZW5yLCAwKTsKLX0KLQogLyogYXMgb3JkZXJlZCBkYXRhIElPIGZpbmlzaGVzLCB0aGlzIGdldHMgY2FsbGVkIHNvIHdlIGNhbiBmaW5pc2gKICAqIGFuIG9yZGVyZWQgZXh0ZW50IGlmIHRoZSByYW5nZSBvZiBieXRlcyBpbiB0aGUgZmlsZSBpdCBjb3ZlcnMgYXJlCiAgKiBmdWxseSB3cml0dGVuLgpAQCAtMTcwOSw3ICsxNjkxLDYgQEAKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKIAlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKm9yZGVyZWRfZXh0ZW50ID0gTlVMTDsKIAlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmlvX3RyZWUgPSAmQlRSRlNfSShpbm9kZSktPmlvX3RyZWU7Ci0Jc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7CiAJaW50IGNvbXByZXNzZWQgPSAwOwogCWludCByZXQ7CiAKQEAgLTE3MTcsMzIgKzE2OTgsOSBAQAogCWlmICghcmV0KQogCQlyZXR1cm4gMDsKIAotCS8qCi0JICogYmVmb3JlIHdlIGpvaW4gdGhlIHRyYW5zYWN0aW9uLCB0cnkgdG8gZG8gc29tZSBvZiBvdXIgSU8uCi0JICogVGhpcyB3aWxsIGxpbWl0IHRoZSBhbW91bnQgb2YgSU8gdGhhdCB3ZSBoYXZlIHRvIGRvIHdpdGgKLQkgKiB0aGUgdHJhbnNhY3Rpb24gcnVubmluZy4gIFdlJ3JlIHVubGlrZWx5IHRvIG5lZWQgdG8gZG8gYW55Ci0JICogSU8gaWYgdGhlIGZpbGUgZXh0ZW50cyBhcmUgbmV3LCB0aGUgZGlza19pX3NpemUgY2hlY2tzCi0JICogY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBjYXNlLgotCSAqLwotCWlmIChzdGFydCA8IEJUUkZTX0koaW5vZGUpLT5kaXNrX2lfc2l6ZSkgewotCQlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwotCQlpZiAocGF0aCkgewotCQkJcmV0ID0gYnRyZnNfbG9va3VwX2ZpbGVfZXh0ZW50KE5VTEwsIHJvb3QsIHBhdGgsCi0JCQkJCQkgICAgICAgaW5vZGUtPmlfaW5vLAotCQkJCQkJICAgICAgIHN0YXJ0LCAwKTsKLQkJCW9yZGVyZWRfZXh0ZW50ID0gYnRyZnNfbG9va3VwX29yZGVyZWRfZXh0ZW50KGlub2RlLAotCQkJCQkJCQkgICAgIHN0YXJ0KTsKLQkJCWlmICghbGlzdF9lbXB0eSgmb3JkZXJlZF9leHRlbnQtPmxpc3QpKSB7Ci0JCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwotCQkJCXJlYWRhX2NzdW0ocm9vdCwgcGF0aCwgb3JkZXJlZF9leHRlbnQpOwotCQkJfQotCQkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwotCQl9Ci0JfQotCi0JaWYgKCFvcmRlcmVkX2V4dGVudCkKLQkJb3JkZXJlZF9leHRlbnQgPSBidHJmc19sb29rdXBfb3JkZXJlZF9leHRlbnQoaW5vZGUsIHN0YXJ0KTsKKwlvcmRlcmVkX2V4dGVudCA9IGJ0cmZzX2xvb2t1cF9vcmRlcmVkX2V4dGVudChpbm9kZSwgc3RhcnQpOwogCUJVR19PTighb3JkZXJlZF9leHRlbnQpOworCiAJaWYgKHRlc3RfYml0KEJUUkZTX09SREVSRURfTk9DT1csICZvcmRlcmVkX2V4dGVudC0+ZmxhZ3MpKSB7CiAJCUJVR19PTighbGlzdF9lbXB0eSgmb3JkZXJlZF9leHRlbnQtPmxpc3QpKTsKIAkJcmV0ID0gYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCAwLCBvcmRlcmVkX2V4dGVudCk7CkBAIC01ODQxLDcgKzU3OTksOSBAQAogCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAkJQlRSRlNfSShpbm9kZSktPmZsYWdzIHw9IEJUUkZTX0lOT0RFX1BSRUFMTE9DOwogCQlpZiAoIShtb2RlICYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgJiYKLQkJICAgIGN1cl9vZmZzZXQgPiBpbm9kZS0+aV9zaXplKSB7CisJCQkoYWN0dWFsX2xlbiA+IGlub2RlLT5pX3NpemUpICYmCisJCQkoY3VyX29mZnNldCA+IGlub2RlLT5pX3NpemUpKSB7CisKIAkJCWlmIChjdXJfb2Zmc2V0ID4gYWN0dWFsX2xlbikKIAkJCQlpX3NpemUgID0gYWN0dWFsX2xlbjsKIAkJCWVsc2UKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3JlbG9jYXRpb24uYyBiL2ZzL2J0cmZzL3JlbG9jYXRpb24uYwppbmRleCBlZDNlNGEyLi5hYjdhYjUzIDEwMDY0NAotLS0gYS9mcy9idHJmcy9yZWxvY2F0aW9uLmMKKysrIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCkBAIC0zNzY0LDcgKzM3NjQsOCBAQAogCQkJCSAgICAgICBCVFJGU19EQVRBX1JFTE9DX1RSRUVfT0JKRUNUSUQpOwogCQlpZiAoSVNfRVJSKGZzX3Jvb3QpKQogCQkJZXJyID0gUFRSX0VSUihmc19yb290KTsKLQkJYnRyZnNfb3JwaGFuX2NsZWFudXAoZnNfcm9vdCk7CisJCWVsc2UKKwkJCWJ0cmZzX29ycGhhbl9jbGVhbnVwKGZzX3Jvb3QpOwogCX0KIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9uYW1laS5jIGIvZnMvY2FjaGVmaWxlcy9uYW1laS5jCmluZGV4IDE0YWM0ODAuLmVlYjQ5ODYgMTAwNjQ0Ci0tLSBhL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYworKysgYi9mcy9jYWNoZWZpbGVzL25hbWVpLmMKQEAgLTM0OCw3ICszNDgsMTcgQEAKIAlkaXIgPSBkZ2V0X3BhcmVudChvYmplY3QtPmRlbnRyeSk7CiAKIAltdXRleF9sb2NrX25lc3RlZCgmZGlyLT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1BBUkVOVCk7Ci0JcmV0ID0gY2FjaGVmaWxlc19idXJ5X29iamVjdChjYWNoZSwgZGlyLCBvYmplY3QtPmRlbnRyeSk7CisKKwkvKiB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgb3VyIHBhcmVudCBpcyBfc3RpbGxfIG91ciBwYXJlbnQgLSBpdCBtYXkgaGF2ZQorCSAqIGJlZW4gcmVuYW1lZCAqLworCWlmIChkaXIgPT0gb2JqZWN0LT5kZW50cnktPmRfcGFyZW50KSB7CisJCXJldCA9IGNhY2hlZmlsZXNfYnVyeV9vYmplY3QoY2FjaGUsIGRpciwgb2JqZWN0LT5kZW50cnkpOworCX0gZWxzZSB7CisJCS8qIGl0IGdvdCBtb3ZlZCwgcHJlc3VtYWJseSBieSBjYWNoZWZpbGVzZCBjdWxsaW5nIGl0LCBzbyBpdCdzCisJCSAqIG5vIGxvbmdlciBpbiB0aGUga2V5IHBhdGggYW5kIHdlIGNhbiBpZ25vcmUgaXQgKi8KKwkJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCQlyZXQgPSAwOworCX0KIAogCWRwdXQoZGlyKTsKIAlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQ0hBTkdFUyBiL2ZzL2NpZnMvQ0hBTkdFUwppbmRleCA3YjI2MDBiLi40OTUwM2QyIDEwMDY0NAotLS0gYS9mcy9jaWZzL0NIQU5HRVMKKysrIGIvZnMvY2lmcy9DSEFOR0VTCkBAIC0xLDMgKzEsNyBAQAorVmVyc2lvbiAxLjYyCistLS0tLS0tLS0tLS0KK0FkZCBzb2Nrb3B0PVRDUF9OT0RFTEFZIG1vdW50IG9wdGlvbi4KKwogVmVyc2lvbiAxLjYxCiAtLS0tLS0tLS0tLS0KIEZpeCBhcHBlbmQgcHJvYmxlbSB0byBTYW1iYSBzZXJ2ZXJzIChmaWxlcyBvcGVuZWQgd2l0aCBPX0FQUEVORCBjb3VsZApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuaCBiL2ZzL2NpZnMvY2lmc2ZzLmgKaW5kZXggYWMyYjI0Yy4uNzhjMWI4NiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuaAorKysgYi9mcy9jaWZzL2NpZnNmcy5oCkBAIC0xMTMsNSArMTEzLDUgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgY2lmc19leHBvcnRfb3BzOwogI2VuZGlmIC8qIEVYUEVSSU1FTlRBTCAqLwogCi0jZGVmaW5lIENJRlNfVkVSU0lPTiAgICIxLjYxIgorI2RlZmluZSBDSUZTX1ZFUlNJT04gICAiMS42MiIKICNlbmRpZgkJCQkvKiBfQ0lGU0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2dsb2IuaCBiL2ZzL2NpZnMvY2lmc2dsb2IuaAppbmRleCA0YjM1ZjdlLi5lZDc1MWJiIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNnbG9iLmgKKysrIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCkBAIC0xNDksNiArMTQ5LDcgQEAKIAlib29sIHN2bG9jYWw6MTsJCQkvKiBsb2NhbCBzZXJ2ZXIgb3IgcmVtb3RlICovCiAJYm9vbCBub2Jsb2Nrc25kOwkJLyogdXNlIGJsb2NraW5nIHNlbmRtc2cgKi8KIAlib29sIG5vYXV0b3R1bmU7CQkvKiBkbyBub3QgYXV0b3R1bmUgc2VuZCBidWYgc2l6ZXMgKi8KKwlib29sIHRjcF9ub2RlbGF5OwogCWF0b21pY190IGluRmxpZ2h0OyAgLyogbnVtYmVyIG9mIHJlcXVlc3RzIG9uIHRoZSB3aXJlIHRvIHNlcnZlciAqLwogI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgogCWF0b21pY190IGluU2VuZDsgLyogcmVxdWVzdHMgdHJ5aW5nIHRvIHNlbmQgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggM2JiY2FhNy4uMmU5ZTA5YyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTk4LDcgKzk4LDcgQEAKIAlib29sIG5vc3RyaWN0c3luYzoxOyAvKiBkbyBub3QgZm9yY2UgZXhwZW5zaXZlIFNNQmZsdXNoIG9uIGV2ZXJ5IHN5bmMgKi8KIAl1bnNpZ25lZCBpbnQgcnNpemU7CiAJdW5zaWduZWQgaW50IHdzaXplOwotCXVuc2lnbmVkIGludCBzb2Nrb3B0OworCWJvb2wgc29ja29wdF90Y3Bfbm9kZWxheToxOwogCXVuc2lnbmVkIHNob3J0IGludCBwb3J0OwogCWNoYXIgKnByZXBhdGg7CiB9OwpAQCAtMTE0Miw5ICsxMTQyLDExIEBACiAJCQkJCXNpbXBsZV9zdHJ0b3VsKHZhbHVlLCAmdmFsdWUsIDApOwogCQkJfQogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJzb2Nrb3B0IiwgNSkgPT0gMCkgewotCQkJaWYgKHZhbHVlICYmICp2YWx1ZSkgewotCQkJCXZvbC0+c29ja29wdCA9Ci0JCQkJCXNpbXBsZV9zdHJ0b3VsKHZhbHVlLCAmdmFsdWUsIDApOworCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7CisJCQkJY0VSUk9SKDEsICgibm8gc29ja2V0IG9wdGlvbiBzcGVjaWZpZWQiKSk7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKHN0cm5pY21wKHZhbHVlLCAiVENQX05PREVMQVkiLCAxMSkgPT0gMCkgeworCQkJCXZvbC0+c29ja29wdF90Y3Bfbm9kZWxheSA9IDE7CiAJCQl9CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgIm5ldGJpb3NuYW1lIiwgNCkgPT0gMCkgewogCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlIHx8ICgqdmFsdWUgPT0gJyAnKSkgewpAQCAtMTUxNCw2ICsxNTE2LDcgQEAKIAogCXRjcF9zZXMtPm5vYmxvY2tzbmQgPSB2b2x1bWVfaW5mby0+bm9ibG9ja3NuZDsKIAl0Y3Bfc2VzLT5ub2F1dG90dW5lID0gdm9sdW1lX2luZm8tPm5vYXV0b3R1bmU7CisJdGNwX3Nlcy0+dGNwX25vZGVsYXkgPSB2b2x1bWVfaW5mby0+c29ja29wdF90Y3Bfbm9kZWxheTsKIAlhdG9taWNfc2V0KCZ0Y3Bfc2VzLT5pbkZsaWdodCwgMCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdGNwX3Nlcy0+cmVzcG9uc2VfcSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdGNwX3Nlcy0+cmVxdWVzdF9xKTsKQEAgLTE3NjQsNiArMTc2Nyw3IEBACiBpcHY0X2Nvbm5lY3Qoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKQogewogCWludCByYyA9IDA7CisJaW50IHZhbDsKIAlib29sIGNvbm5lY3RlZCA9IGZhbHNlOwogCV9fYmUxNiBvcmlnX3BvcnQgPSAwOwogCXN0cnVjdCBzb2NrZXQgKnNvY2tldCA9IHNlcnZlci0+c3NvY2tldDsKQEAgLTE4NDUsNiArMTg0OSwxNCBAQAogCQkJc29ja2V0LT5zay0+c2tfcmN2YnVmID0gMTQwICogMTAyNDsKIAl9CiAKKwlpZiAoc2VydmVyLT50Y3Bfbm9kZWxheSkgeworCQl2YWwgPSAxOworCQlyYyA9IGtlcm5lbF9zZXRzb2Nrb3B0KHNvY2tldCwgU09MX1RDUCwgVENQX05PREVMQVksCisJCQkJKGNoYXIgKikmdmFsLCBzaXplb2YodmFsKSk7CisJCWlmIChyYykKKwkJCWNGWUkoMSwgKCJzZXQgVENQX05PREVMQVkgc29ja2V0IG9wdGlvbiBlcnJvciAlZCIsIHJjKSk7CisJfQorCiAJIGNGWUkoMSwgKCJzbmRidWYgJWQgcmN2YnVmICVkIHJjdnRpbWVvIDB4JWx4IiwKIAkJIHNvY2tldC0+c2stPnNrX3NuZGJ1ZiwKIAkJIHNvY2tldC0+c2stPnNrX3JjdmJ1Ziwgc29ja2V0LT5zay0+c2tfcmN2dGltZW8pKTsKQEAgLTE5MTYsNiArMTkyOCw3IEBACiBpcHY2X2Nvbm5lY3Qoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKQogewogCWludCByYyA9IDA7CisJaW50IHZhbDsKIAlib29sIGNvbm5lY3RlZCA9IGZhbHNlOwogCV9fYmUxNiBvcmlnX3BvcnQgPSAwOwogCXN0cnVjdCBzb2NrZXQgKnNvY2tldCA9IHNlcnZlci0+c3NvY2tldDsKQEAgLTE5ODcsNiArMjAwMCwxNSBAQAogCSAqLwogCXNvY2tldC0+c2stPnNrX3JjdnRpbWVvID0gNyAqIEhaOwogCXNvY2tldC0+c2stPnNrX3NuZHRpbWVvID0gNSAqIEhaOworCisJaWYgKHNlcnZlci0+dGNwX25vZGVsYXkpIHsKKwkJdmFsID0gMTsKKwkJcmMgPSBrZXJuZWxfc2V0c29ja29wdChzb2NrZXQsIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLAorCQkJCShjaGFyICopJnZhbCwgc2l6ZW9mKHZhbCkpOworCQlpZiAocmMpCisJCQljRllJKDEsICgic2V0IFRDUF9OT0RFTEFZIHNvY2tldCBvcHRpb24gZXJyb3IgJWQiLCByYykpOworCX0KKwogCXNlcnZlci0+c3NvY2tldCA9IHNvY2tldDsKIAogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW5vZGUuYyBiL2ZzL2NpZnMvaW5vZGUuYwppbmRleCBjZjE4ZWU3Li5lM2ZkYTk3IDEwMDY0NAotLS0gYS9mcy9jaWZzL2lub2RlLmMKKysrIGIvZnMvY2lmcy9pbm9kZS5jCkBAIC0xNzYyLDggKzE3NjIsMTggQEAKIAkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCX0KIAotCWlmICghcmMpCisJaWYgKCFyYykgewogCQlyYyA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHJzKTsKKworCQkvKiBmb3JjZSByZXZhbGlkYXRlIHdoZW4gYW55IG9mIHRoZXNlIHRpbWVzIGFyZSBzZXQgc2luY2Ugc29tZQorCQkgICBvZiB0aGUgZnMgdHlwZXMgKGVnIGV4dDMsIGZhdCkgZG8gbm90IGhhdmUgZmluZSBlbm91Z2gKKwkJICAgdGltZSBncmFudWxhcml0eSB0byBtYXRjaCBwcm90b2NvbCwgYW5kIHdlIGRvIG5vdCBoYXZlIGEKKwkJICAgYSB3YXkgKHlldCkgdG8gcXVlcnkgdGhlIHNlcnZlciBmcydzIHRpbWUgZ3JhbnVsYXJpdHkgKGFuZAorCQkgICB3aGV0aGVyIGl0IHJvdW5kcyB0aW1lcyBkb3duKS4KKwkJKi8KKwkJaWYgKCFyYyAmJiAoYXR0cnMtPmlhX3ZhbGlkICYgKEFUVFJfTVRJTUUgfCBBVFRSX0NUSU1FKSkpCisJCQljaWZzSW5vZGUtPnRpbWUgPSAwOworCX0KIG91dDoKIAlrZnJlZShhcmdzKTsKIAlrZnJlZShmdWxsX3BhdGgpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9yZWFkZGlyLmMgYi9mcy9jaWZzL3JlYWRkaXIuYwppbmRleCBmODQwNjJmLi5jMzQzYjE0IDEwMDY0NAotLS0gYS9mcy9jaWZzL3JlYWRkaXIuYworKysgYi9mcy9jaWZzL3JlYWRkaXIuYwpAQCAtNzcsNiArNzcsMTEgQEAKIAogCWNGWUkoMSwgKCJGb3IgJXMiLCBuYW1lLT5uYW1lKSk7CiAKKwlpZiAocGFyZW50LT5kX29wICYmIHBhcmVudC0+ZF9vcC0+ZF9oYXNoKQorCQlwYXJlbnQtPmRfb3AtPmRfaGFzaChwYXJlbnQsIG5hbWUpOworCWVsc2UKKwkJbmFtZS0+aGFzaCA9IGZ1bGxfbmFtZV9oYXNoKG5hbWUtPm5hbWUsIG5hbWUtPmxlbik7CisKIAlkZW50cnkgPSBkX2xvb2t1cChwYXJlbnQsIG5hbWUpOwogCWlmIChkZW50cnkpIHsKIAkJLyogRklYTUU6IGNoZWNrIGZvciBpbm9kZSBudW1iZXIgY2hhbmdlcz8gKi8KQEAgLTY2NiwxMiArNjcxLDExIEBACiAJCQkJCSAgIG1pbihsZW4sIG1heF9sZW4pLCBubHQsCiAJCQkJCSAgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKKwkJcHFzdC0+bGVuIC09IG5sc19udWxsc2l6ZShubHQpOwogCX0gZWxzZSB7CiAJCXBxc3QtPm5hbWUgPSBmaWxlbmFtZTsKIAkJcHFzdC0+bGVuID0gbGVuOwogCX0KLQlwcXN0LT5oYXNoID0gZnVsbF9uYW1lX2hhc2gocHFzdC0+bmFtZSwgcHFzdC0+bGVuKTsKLS8qCWNGWUkoMSwgKCJmaWxsZGlyIG9uICVzIixwcXN0LT5uYW1lKSk7ICAqLwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zZXNzLmMgYi9mcy9jaWZzL3Nlc3MuYwppbmRleCA3MDg1YTYyLi5hYWE5YzFjIDEwMDY0NAotLS0gYS9mcy9jaWZzL3Nlc3MuYworKysgYi9mcy9jaWZzL3Nlc3MuYwpAQCAtMjIzLDkgKzIyMyw5IEBACiAJCS8qIG51bGwgdXNlciBtb3VudCAqLwogCQkqYmNjX3B0ciA9IDA7CiAJCSooYmNjX3B0cisxKSA9IDA7Ci0JfSBlbHNlIHsgLyogMzAwIHNob3VsZCBiZSBsb25nIGVub3VnaCBmb3IgYW55IGNvbmNlaXZhYmxlIHVzZXIgbmFtZSAqLworCX0gZWxzZSB7CiAJCWJ5dGVzX3JldCA9IGNpZnNfc3RydG9VQ1MoKF9fbGUxNiAqKSBiY2NfcHRyLCBzZXMtPnVzZXJOYW1lLAotCQkJCQkgIDMwMCwgbmxzX2NwKTsKKwkJCQkJICBNQVhfVVNFUk5BTUVfU0laRSwgbmxzX2NwKTsKIAl9CiAJYmNjX3B0ciArPSAyICogYnl0ZXNfcmV0OwogCWJjY19wdHIgKz0gMjsgLyogYWNjb3VudCBmb3IgbnVsbCB0ZXJtaW5hdGlvbiAqLwpAQCAtMjQ2LDExICsyNDYsMTAgQEAKIAkvKiBjb3B5IHVzZXIgKi8KIAlpZiAoc2VzLT51c2VyTmFtZSA9PSBOVUxMKSB7CiAJCS8qIEJCIHdoYXQgYWJvdXQgbnVsbCB1c2VyIG1vdW50cyAtIGNoZWNrIHRoYXQgd2UgZG8gdGhpcyBCQiAqLwotCX0gZWxzZSB7IC8qIDMwMCBzaG91bGQgYmUgbG9uZyBlbm91Z2ggZm9yIGFueSBjb25jZWl2YWJsZSB1c2VyIG5hbWUgKi8KLQkJc3RybmNweShiY2NfcHRyLCBzZXMtPnVzZXJOYW1lLCAzMDApOworCX0gZWxzZSB7CisJCXN0cm5jcHkoYmNjX3B0ciwgc2VzLT51c2VyTmFtZSwgTUFYX1VTRVJOQU1FX1NJWkUpOwogCX0KLQkvKiBCQiBpbXByb3ZlIGNoZWNrIGZvciBvdmVyZmxvdyAqLwotCWJjY19wdHIgKz0gc3RybmxlbihzZXMtPnVzZXJOYW1lLCAzMDApOworCWJjY19wdHIgKz0gc3RybmxlbihzZXMtPnVzZXJOYW1lLCBNQVhfVVNFUk5BTUVfU0laRSk7CiAJKmJjY19wdHIgPSAwOwogCWJjY19wdHIrKzsgLyogYWNjb3VudCBmb3IgbnVsbCB0ZXJtaW5hdGlvbiAqLwogCmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IGM1YzQ1ZGUuLjBjYTllYzQgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC0zMDEsNiArMzAxLDEyIEBACiAJdTMyIGRhdGE7CiAJdm9pZCBfX3VzZXIgKmR4ZmVycDsKIAlpbnQgZXJyOworCWludCBpbnRlcmZhY2VfaWQ7CisKKwlpZiAoZ2V0X3VzZXIoaW50ZXJmYWNlX2lkLCAmc2dpbzMyLT5pbnRlcmZhY2VfaWQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoaW50ZXJmYWNlX2lkICE9ICdTJykKKwkJcmV0dXJuIHN5c19pb2N0bChmZCwgY21kLCAodW5zaWduZWQgbG9uZylzZ2lvMzIpOwogCiAJaWYgKGdldF91c2VyKGlvdmVjX2NvdW50LCAmc2dpbzMyLT5pb3ZlY19jb3VudCkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtOTM2LDYgKzk0Miw3IEBACiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NMSU5VWCkKIENPTVBBVElCTEVfSU9DVEwoVElPQ1NCUkspCiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NDQlJLKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DR1NJRCkKIENPTVBBVElCTEVfSU9DVEwoVElPQ0dJQ09VTlQpCiAvKiBMaXR0bGUgdCAqLwogQ09NUEFUSUJMRV9JT0NUTChUSU9DR0VURCkKQEAgLTEwMzgsNiArMTA0NSw4IEBACiAjaWZkZWYgQ09ORklHX0JMT0NLCiAvKiBsb29wICovCiBJR05PUkVfSU9DVEwoTE9PUF9DTFJfRkQpCisvKiBtZCBjYWxscyB0aGlzIG9uIHJhbmRvbSBibG9ja2RldnMgKi8KK0lHTk9SRV9JT0NUTChSQUlEX1ZFUlNJT04pCiAvKiBTRyBzdHVmZiAqLwogQ09NUEFUSUJMRV9JT0NUTChTR19TRVRfVElNRU9VVCkKIENPTVBBVElCTEVfSU9DVEwoU0dfR0VUX1RJTUVPVVQpCmRpZmYgLS1naXQgYS9mcy9kbG0vYXN0LmMgYi9mcy9kbG0vYXN0LmMKaW5kZXggZGMyYWQ2MC4uNDMxNGYwZDQgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9hc3QuYworKysgYi9mcy9kbG0vYXN0LmMKQEAgLTIsNyArMiw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKgogKiogIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKiogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoqCiAqKiAgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAqKiAgbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTMzLDEwICszMywxMCBAQAogCXNwaW5fdW5sb2NrKCZhc3RfcXVldWVfbG9jayk7CiB9CiAKLXZvaWQgZGxtX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBiYXN0bW9kZSkKK3ZvaWQgZGxtX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBtb2RlKQogewogCWlmIChsa2ItPmxrYl9mbGFncyAmIERMTV9JRkxfVVNFUikgewotCQlkbG1fdXNlcl9hZGRfYXN0KGxrYiwgdHlwZSwgYmFzdG1vZGUpOworCQlkbG1fdXNlcl9hZGRfYXN0KGxrYiwgdHlwZSwgbW9kZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQ0LDEwICs0NCwyMSBAQAogCWlmICghKGxrYi0+bGtiX2FzdF90eXBlICYgKEFTVF9DT01QIHwgQVNUX0JBU1QpKSkgewogCQlrcmVmX2dldCgmbGtiLT5sa2JfcmVmKTsKIAkJbGlzdF9hZGRfdGFpbCgmbGtiLT5sa2JfYXN0cXVldWUsICZhc3RfcXVldWUpOworCQlsa2ItPmxrYl9hc3RfZmlyc3QgPSB0eXBlOwogCX0KKworCS8qIHNhbml0eSBjaGVjaywgdGhpcyBzaG91bGQgbm90IGhhcHBlbiAqLworCisJaWYgKCh0eXBlID09IEFTVF9DT01QKSAmJiAobGtiLT5sa2JfYXN0X3R5cGUgJiBBU1RfQ09NUCkpCisJCWxvZ19wcmludCgicmVwZWF0IGNhc3QgJWQgY2FzdG1vZGUgJWQgbG9jayAleCAlcyIsCisJCQkgIG1vZGUsIGxrYi0+bGtiX2Nhc3Rtb2RlLAorCQkJICBsa2ItPmxrYl9pZCwgbGtiLT5sa2JfcmVzb3VyY2UtPnJlc19uYW1lKTsKKwogCWxrYi0+bGtiX2FzdF90eXBlIHw9IHR5cGU7Ci0JaWYgKGJhc3Rtb2RlKQotCQlsa2ItPmxrYl9iYXN0bW9kZSA9IGJhc3Rtb2RlOworCWlmICh0eXBlID09IEFTVF9CQVNUKQorCQlsa2ItPmxrYl9iYXN0bW9kZSA9IG1vZGU7CisJZWxzZQorCQlsa2ItPmxrYl9jYXN0bW9kZSA9IG1vZGU7CiAJc3Bpbl91bmxvY2soJmFzdF9xdWV1ZV9sb2NrKTsKIAogCXNldF9iaXQoV0FLRV9BU1RTLCAmYXN0ZF93YWtlZmxhZ3MpOwpAQCAtNTksOSArNzAsOSBAQAogCXN0cnVjdCBkbG1fbHMgKmxzID0gTlVMTDsKIAlzdHJ1Y3QgZGxtX3JzYiAqciA9IE5VTEw7CiAJc3RydWN0IGRsbV9sa2IgKmxrYjsKLQl2b2lkICgqY2FzdCkgKHZvaWQgKmFzdHBhcmFtKTsKLQl2b2lkICgqYmFzdCkgKHZvaWQgKmFzdHBhcmFtLCBpbnQgbW9kZSk7Ci0JaW50IHR5cGUgPSAwLCBiYXN0bW9kZTsKKwl2b2lkICgqY2FzdGZuKSAodm9pZCAqYXN0cGFyYW0pOworCXZvaWQgKCpiYXN0Zm4pICh2b2lkICphc3RwYXJhbSwgaW50IG1vZGUpOworCWludCB0eXBlLCBmaXJzdCwgYmFzdG1vZGUsIGNhc3Rtb2RlLCBkb19iYXN0LCBkb19jYXN0LCBsYXN0X2Nhc3Rtb2RlOwogCiByZXBlYXQ6CiAJc3Bpbl9sb2NrKCZhc3RfcXVldWVfbG9jayk7CkBAIC03NSwxNyArODYsNDggQEAKIAkJbGlzdF9kZWwoJmxrYi0+bGtiX2FzdHF1ZXVlKTsKIAkJdHlwZSA9IGxrYi0+bGtiX2FzdF90eXBlOwogCQlsa2ItPmxrYl9hc3RfdHlwZSA9IDA7CisJCWZpcnN0ID0gbGtiLT5sa2JfYXN0X2ZpcnN0OworCQlsa2ItPmxrYl9hc3RfZmlyc3QgPSAwOwogCQliYXN0bW9kZSA9IGxrYi0+bGtiX2Jhc3Rtb2RlOwotCisJCWNhc3Rtb2RlID0gbGtiLT5sa2JfY2FzdG1vZGU7CisJCWNhc3RmbiA9IGxrYi0+bGtiX2FzdGZuOworCQliYXN0Zm4gPSBsa2ItPmxrYl9iYXN0Zm47CiAJCXNwaW5fdW5sb2NrKCZhc3RfcXVldWVfbG9jayk7Ci0JCWNhc3QgPSBsa2ItPmxrYl9hc3RmbjsKLQkJYmFzdCA9IGxrYi0+bGtiX2Jhc3RmbjsKIAotCQlpZiAoKHR5cGUgJiBBU1RfQ09NUCkgJiYgY2FzdCkKLQkJCWNhc3QobGtiLT5sa2JfYXN0cGFyYW0pOworCQlkb19jYXN0ID0gKHR5cGUgJiBBU1RfQ09NUCkgJiYgY2FzdGZuOworCQlkb19iYXN0ID0gKHR5cGUgJiBBU1RfQkFTVCkgJiYgYmFzdGZuOwogCi0JCWlmICgodHlwZSAmIEFTVF9CQVNUKSAmJiBiYXN0KQotCQkJYmFzdChsa2ItPmxrYl9hc3RwYXJhbSwgYmFzdG1vZGUpOworCQkvKiBTa2lwIGEgYmFzdCBpZiBpdHMgYmxvY2tpbmcgbW9kZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlCisJCSAgIGdyYW50ZWQgbW9kZSBvZiB0aGUgcHJlY2VkaW5nIGNhc3QuICovCisKKwkJaWYgKGRvX2Jhc3QpIHsKKwkJCWlmIChmaXJzdCA9PSBBU1RfQ09NUCkKKwkJCQlsYXN0X2Nhc3Rtb2RlID0gY2FzdG1vZGU7CisJCQllbHNlCisJCQkJbGFzdF9jYXN0bW9kZSA9IGxrYi0+bGtiX2Nhc3Rtb2RlX2RvbmU7CisJCQlpZiAoZGxtX21vZGVzX2NvbXBhdChiYXN0bW9kZSwgbGFzdF9jYXN0bW9kZSkpCisJCQkJZG9fYmFzdCA9IDA7CisJCX0KKworCQlpZiAoZmlyc3QgPT0gQVNUX0NPTVApIHsKKwkJCWlmIChkb19jYXN0KQorCQkJCWNhc3Rmbihsa2ItPmxrYl9hc3RwYXJhbSk7CisJCQlpZiAoZG9fYmFzdCkKKwkJCQliYXN0Zm4obGtiLT5sa2JfYXN0cGFyYW0sIGJhc3Rtb2RlKTsKKwkJfSBlbHNlIGlmIChmaXJzdCA9PSBBU1RfQkFTVCkgeworCQkJaWYgKGRvX2Jhc3QpCisJCQkJYmFzdGZuKGxrYi0+bGtiX2FzdHBhcmFtLCBiYXN0bW9kZSk7CisJCQlpZiAoZG9fY2FzdCkKKwkJCQljYXN0Zm4obGtiLT5sa2JfYXN0cGFyYW0pOworCQl9IGVsc2UgeworCQkJbG9nX2Vycm9yKGxzLCAiYmFkIGFzdF9maXJzdCAlZCBhc3RfdHlwZSAlZCIsCisJCQkJICBmaXJzdCwgdHlwZSk7CisJCX0KKworCQlpZiAoZG9fY2FzdCkKKwkJCWxrYi0+bGtiX2Nhc3Rtb2RlX2RvbmUgPSBjYXN0bW9kZTsKKwkJaWYgKGRvX2Jhc3QpCisJCQlsa2ItPmxrYl9iYXN0bW9kZV9kb25lID0gYmFzdG1vZGU7CiAKIAkJLyogdGhpcyByZW1vdmVzIHRoZSByZWZlcmVuY2UgYWRkZWQgYnkgZGxtX2FkZF9hc3QKIAkJICAgYW5kIG1heSByZXN1bHQgaW4gdGhlIGxrYiBiZWluZyBmcmVlZCAqLwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2FzdC5oIGIvZnMvZGxtL2FzdC5oCmluZGV4IDFiNWZjNWYuLmJjYjFhYWIgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9hc3QuaAorKysgYi9mcy9kbG0vYXN0LmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKgotKiogIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoqCiAqKiAgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAqKiAgbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTEzLDcgKzEzLDcgQEAKICNpZm5kZWYgX19BU1REX0RPVF9IX18KICNkZWZpbmUgX19BU1REX0RPVF9IX18KIAotdm9pZCBkbG1fYWRkX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgdHlwZSwgaW50IGJhc3Rtb2RlKTsKK3ZvaWQgZGxtX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBtb2RlKTsKIHZvaWQgZGxtX2RlbF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYik7CiAKIHZvaWQgZGxtX2FzdGRfd2FrZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9kZWJ1Z19mcy5jIGIvZnMvZGxtL2RlYnVnX2ZzLmMKaW5kZXggMzc1YTIzNS4uMjlkNjEzOSAxMDA2NDQKLS0tIGEvZnMvZGxtL2RlYnVnX2ZzLmMKKysrIGIvZnMvZGxtL2RlYnVnX2ZzLmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogCQkJbGtiLT5sa2Jfc3RhdHVzLAogCQkJbGtiLT5sa2JfZ3Jtb2RlLAogCQkJbGtiLT5sa2JfcnFtb2RlLAotCQkJbGtiLT5sa2JfaGlnaGJhc3QsCisJCQlsa2ItPmxrYl9iYXN0bW9kZSwKIAkJCXJzYl9sb29rdXAsCiAJCQlsa2ItPmxrYl93YWl0X3R5cGUsCiAJCQlsa2ItPmxrYl9sdmJzZXEsCmRpZmYgLS1naXQgYS9mcy9kbG0vZGxtX2ludGVybmFsLmggYi9mcy9kbG0vZGxtX2ludGVybmFsLmgKaW5kZXggODI2ZDNkYy4uZjYzMmI1OCAxMDA2NDQKLS0tIGEvZnMvZGxtL2RsbV9pbnRlcm5hbC5oCisrKyBiL2ZzL2RsbS9kbG1faW50ZXJuYWwuaApAQCAtMiw3ICsyLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqCiAqKiAgQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKioKICoqICBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICoqICBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtMjMyLDExICsyMzIsMTcgQEAKIAlpbnQ4X3QJCQlsa2Jfc3RhdHVzOyAgICAgLyogZ3JhbnRlZCwgd2FpdGluZywgY29udmVydCAqLwogCWludDhfdAkJCWxrYl9ycW1vZGU7CS8qIHJlcXVlc3RlZCBsb2NrIG1vZGUgKi8KIAlpbnQ4X3QJCQlsa2JfZ3Jtb2RlOwkvKiBncmFudGVkIGxvY2sgbW9kZSAqLwotCWludDhfdAkJCWxrYl9iYXN0bW9kZTsJLyogcmVxdWVzdGVkIG1vZGUgKi8KIAlpbnQ4X3QJCQlsa2JfaGlnaGJhc3Q7CS8qIGhpZ2hlc3QgbW9kZSBiYXN0IHNlbnQgZm9yICovCisKIAlpbnQ4X3QJCQlsa2Jfd2FpdF90eXBlOwkvKiB0eXBlIG9mIHJlcGx5IHdhaXRpbmcgZm9yICovCiAJaW50OF90CQkJbGtiX3dhaXRfY291bnQ7CiAJaW50OF90CQkJbGtiX2FzdF90eXBlOwkvKiB0eXBlIG9mIGFzdCBxdWV1ZWQgZm9yICovCisJaW50OF90CQkJbGtiX2FzdF9maXJzdDsJLyogdHlwZSBvZiBmaXJzdCBhc3QgcXVldWVkICovCisKKwlpbnQ4X3QJCQlsa2JfYmFzdG1vZGU7CS8qIHJlcSBtb2RlIG9mIHF1ZXVlZCBiYXN0ICovCisJaW50OF90CQkJbGtiX2Nhc3Rtb2RlOwkvKiBnciBtb2RlIG9mIHF1ZXVlZCBjYXN0ICovCisJaW50OF90CQkJbGtiX2Jhc3Rtb2RlX2RvbmU7IC8qIGxhc3QgZGVsaXZlcmVkIGJhc3Rtb2RlICovCisJaW50OF90CQkJbGtiX2Nhc3Rtb2RlX2RvbmU7IC8qIGxhc3QgZGVsaXZlcmVkIGNhc3Rtb2RlICovCiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxrYl9pZHRibF9saXN0OwkvKiBsb2Nrc3BhY2UgbGtidGJsICovCiAJc3RydWN0IGxpc3RfaGVhZAlsa2Jfc3RhdGVxdWV1ZTsJLyogcnNiIGcvYy93IGxpc3QgKi8KZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb2NrLmMgYi9mcy9kbG0vbG9jay5jCmluZGV4IDljMGMxZGIuLjQ2ZmZkM2UgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9sb2NrLmMKKysrIGIvZnMvZGxtL2xvY2suYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqCi0qKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKioKICoqICBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICoqICBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtMzA3LDcgKzMwNyw3IEBACiAJbGtiLT5sa2JfbGtzYi0+c2Jfc3RhdHVzID0gcnY7CiAJbGtiLT5sa2JfbGtzYi0+c2JfZmxhZ3MgPSBsa2ItPmxrYl9zYmZsYWdzOwogCi0JZGxtX2FkZF9hc3QobGtiLCBBU1RfQ09NUCwgMCk7CisJZGxtX2FkZF9hc3QobGtiLCBBU1RfQ09NUCwgbGtiLT5sa2JfZ3Jtb2RlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHF1ZXVlX2Nhc3Rfb3ZlcmxhcChzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IGRsbV9sa2IgKmxrYikKQEAgLTMyMCwxMCArMzIwLDEyIEBACiB7CiAJbGtiLT5sa2JfdGltZV9iYXN0ID0ga3RpbWVfZ2V0KCk7CiAKLQlpZiAoaXNfbWFzdGVyX2NvcHkobGtiKSkKKwlpZiAoaXNfbWFzdGVyX2NvcHkobGtiKSkgeworCQlsa2ItPmxrYl9iYXN0bW9kZSA9IHJxbW9kZTsgLyogcHJpbnRlZCBieSBkZWJ1Z2ZzICovCiAJCXNlbmRfYmFzdChyLCBsa2IsIHJxbW9kZSk7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCWRsbV9hZGRfYXN0KGxrYiwgQVNUX0JBU1QsIHJxbW9kZSk7CisJfQogfQogCiAvKgpAQCAtMjI4MCwyMCArMjI4MiwzMCBAQAogCWlmIChjYW5fYmVfcXVldWVkKGxrYikpIHsKIAkJZXJyb3IgPSAtRUlOUFJPR1JFU1M7CiAJCWFkZF9sa2IociwgbGtiLCBETE1fTEtTVFNfV0FJVElORyk7Ci0JCXNlbmRfYmxvY2tpbmdfYXN0cyhyLCBsa2IpOwogCQlhZGRfdGltZW91dChsa2IpOwogCQlnb3RvIG91dDsKIAl9CiAKIAllcnJvciA9IC1FQUdBSU47Ci0JaWYgKGZvcmNlX2Jsb2NraW5nX2FzdHMobGtiKSkKLQkJc2VuZF9ibG9ja2luZ19hc3RzX2FsbChyLCBsa2IpOwogCXF1ZXVlX2Nhc3QociwgbGtiLCAtRUFHQUlOKTsKLQogIG91dDoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyB2b2lkIGRvX3JlcXVlc3RfZWZmZWN0cyhzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IGRsbV9sa2IgKmxrYiwKKwkJCSAgICAgICBpbnQgZXJyb3IpCit7CisJc3dpdGNoIChlcnJvcikgeworCWNhc2UgLUVBR0FJTjoKKwkJaWYgKGZvcmNlX2Jsb2NraW5nX2FzdHMobGtiKSkKKwkJCXNlbmRfYmxvY2tpbmdfYXN0c19hbGwociwgbGtiKTsKKwkJYnJlYWs7CisJY2FzZSAtRUlOUFJPR1JFU1M6CisJCXNlbmRfYmxvY2tpbmdfYXN0cyhyLCBsa2IpOworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyBpbnQgZG9fY29udmVydChzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IGRsbV9sa2IgKmxrYikKIHsKIAlpbnQgZXJyb3IgPSAwOwpAQCAtMjMwNCw3ICsyMzE2LDYgQEAKIAlpZiAoY2FuX2JlX2dyYW50ZWQociwgbGtiLCAxLCAmZGVhZGxrKSkgewogCQlncmFudF9sb2NrKHIsIGxrYik7CiAJCXF1ZXVlX2Nhc3QociwgbGtiLCAwKTsKLQkJZ3JhbnRfcGVuZGluZ19sb2NrcyhyKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yMzM0LDcgKzIzNDUsNiBAQAogCQlpZiAoX2Nhbl9iZV9ncmFudGVkKHIsIGxrYiwgMSkpIHsKIAkJCWdyYW50X2xvY2sociwgbGtiKTsKIAkJCXF1ZXVlX2Nhc3QociwgbGtiLCAwKTsKLQkJCWdyYW50X3BlbmRpbmdfbG9ja3Mocik7CiAJCQlnb3RvIG91dDsKIAkJfQogCQkvKiBlbHNlIGZhbGwgdGhyb3VnaCBhbmQgbW92ZSB0byBjb252ZXJ0IHF1ZXVlICovCkBAIC0yMzQ0LDI4ICsyMzU0LDQ3IEBACiAJCWVycm9yID0gLUVJTlBST0dSRVNTOwogCQlkZWxfbGtiKHIsIGxrYik7CiAJCWFkZF9sa2IociwgbGtiLCBETE1fTEtTVFNfQ09OVkVSVCk7Ci0JCXNlbmRfYmxvY2tpbmdfYXN0cyhyLCBsa2IpOwogCQlhZGRfdGltZW91dChsa2IpOwogCQlnb3RvIG91dDsKIAl9CiAKIAllcnJvciA9IC1FQUdBSU47Ci0JaWYgKGZvcmNlX2Jsb2NraW5nX2FzdHMobGtiKSkKLQkJc2VuZF9ibG9ja2luZ19hc3RzX2FsbChyLCBsa2IpOwogCXF1ZXVlX2Nhc3QociwgbGtiLCAtRUFHQUlOKTsKLQogIG91dDoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyB2b2lkIGRvX2NvbnZlcnRfZWZmZWN0cyhzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IGRsbV9sa2IgKmxrYiwKKwkJCSAgICAgICBpbnQgZXJyb3IpCit7CisJc3dpdGNoIChlcnJvcikgeworCWNhc2UgMDoKKwkJZ3JhbnRfcGVuZGluZ19sb2NrcyhyKTsKKwkJLyogZ3JhbnRfcGVuZGluZ19sb2NrcyBhbHNvIHNlbmRzIGJhc3RzICovCisJCWJyZWFrOworCWNhc2UgLUVBR0FJTjoKKwkJaWYgKGZvcmNlX2Jsb2NraW5nX2FzdHMobGtiKSkKKwkJCXNlbmRfYmxvY2tpbmdfYXN0c19hbGwociwgbGtiKTsKKwkJYnJlYWs7CisJY2FzZSAtRUlOUFJPR1JFU1M6CisJCXNlbmRfYmxvY2tpbmdfYXN0cyhyLCBsa2IpOworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyBpbnQgZG9fdW5sb2NrKHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiKQogewogCXJlbW92ZV9sb2NrKHIsIGxrYik7CiAJcXVldWVfY2FzdChyLCBsa2IsIC1ETE1fRVVOTE9DSyk7Ci0JZ3JhbnRfcGVuZGluZ19sb2NrcyhyKTsKIAlyZXR1cm4gLURMTV9FVU5MT0NLOwogfQogCitzdGF0aWMgdm9pZCBkb191bmxvY2tfZWZmZWN0cyhzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IGRsbV9sa2IgKmxrYiwKKwkJCSAgICAgIGludCBlcnJvcikKK3sKKwlncmFudF9wZW5kaW5nX2xvY2tzKHIpOworfQorCiAvKiByZXR1cm5zOiAwIGRpZCBub3RoaW5nLCAtRExNX0VDQU5DRUwgY2FuY2VsZWQgbG9jayAqLwogIAogc3RhdGljIGludCBkb19jYW5jZWwoc3RydWN0IGRsbV9yc2IgKnIsIHN0cnVjdCBkbG1fbGtiICpsa2IpCkBAIC0yMzc1LDEyICsyNDA0LDE4IEBACiAJZXJyb3IgPSByZXZlcnRfbG9jayhyLCBsa2IpOwogCWlmIChlcnJvcikgewogCQlxdWV1ZV9jYXN0KHIsIGxrYiwgLURMTV9FQ0FOQ0VMKTsKLQkJZ3JhbnRfcGVuZGluZ19sb2NrcyhyKTsKIAkJcmV0dXJuIC1ETE1fRUNBTkNFTDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGRvX2NhbmNlbF9lZmZlY3RzKHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiLAorCQkJICAgICAgaW50IGVycm9yKQoreworCWlmIChlcnJvcikKKwkJZ3JhbnRfcGVuZGluZ19sb2NrcyhyKTsKK30KKwogLyoKICAqIEZvdXIgc3RhZ2UgMyB2YXJpZXRpZXM6CiAgKiBfcmVxdWVzdF9sb2NrKCksIF9jb252ZXJ0X2xvY2soKSwgX3VubG9ja19sb2NrKCksIF9jYW5jZWxfbG9jaygpCkBAIC0yNDAyLDExICsyNDM3LDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChpc19yZW1vdGUocikpCisJaWYgKGlzX3JlbW90ZShyKSkgewogCQkvKiByZWNlaXZlX3JlcXVlc3QoKSBjYWxscyBkb19yZXF1ZXN0KCkgb24gcmVtb3RlIG5vZGUgKi8KIAkJZXJyb3IgPSBzZW5kX3JlcXVlc3QociwgbGtiKTsKLQllbHNlCisJfSBlbHNlIHsKIAkJZXJyb3IgPSBkb19yZXF1ZXN0KHIsIGxrYik7CisJCS8qIGZvciByZW1vdGUgbG9ja3MgdGhlIHJlcXVlc3RfcmVwbHkgaXMgc2VudAorCQkgICBiZXR3ZWVuIGRvX3JlcXVlc3QgYW5kIGRvX3JlcXVlc3RfZWZmZWN0cyAqLworCQlkb19yZXF1ZXN0X2VmZmVjdHMociwgbGtiLCBlcnJvcik7CisJfQogIG91dDoKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0yNDE3LDExICsyNDU2LDE1IEBACiB7CiAJaW50IGVycm9yOwogCi0JaWYgKGlzX3JlbW90ZShyKSkKKwlpZiAoaXNfcmVtb3RlKHIpKSB7CiAJCS8qIHJlY2VpdmVfY29udmVydCgpIGNhbGxzIGRvX2NvbnZlcnQoKSBvbiByZW1vdGUgbm9kZSAqLwogCQllcnJvciA9IHNlbmRfY29udmVydChyLCBsa2IpOwotCWVsc2UKKwl9IGVsc2UgewogCQllcnJvciA9IGRvX2NvbnZlcnQociwgbGtiKTsKKwkJLyogZm9yIHJlbW90ZSBsb2NrcyB0aGUgY29udmVydF9yZXBseSBpcyBzZW50CisJCSAgIGJldHdlZW4gZG9fY29udmVydCBhbmQgZG9fY29udmVydF9lZmZlY3RzICovCisJCWRvX2NvbnZlcnRfZWZmZWN0cyhyLCBsa2IsIGVycm9yKTsKKwl9CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0yNDMyLDExICsyNDc1LDE1IEBACiB7CiAJaW50IGVycm9yOwogCi0JaWYgKGlzX3JlbW90ZShyKSkKKwlpZiAoaXNfcmVtb3RlKHIpKSB7CiAJCS8qIHJlY2VpdmVfdW5sb2NrKCkgY2FsbHMgZG9fdW5sb2NrKCkgb24gcmVtb3RlIG5vZGUgKi8KIAkJZXJyb3IgPSBzZW5kX3VubG9jayhyLCBsa2IpOwotCWVsc2UKKwl9IGVsc2UgewogCQllcnJvciA9IGRvX3VubG9jayhyLCBsa2IpOworCQkvKiBmb3IgcmVtb3RlIGxvY2tzIHRoZSB1bmxvY2tfcmVwbHkgaXMgc2VudAorCQkgICBiZXR3ZWVuIGRvX3VubG9jayBhbmQgZG9fdW5sb2NrX2VmZmVjdHMgKi8KKwkJZG9fdW5sb2NrX2VmZmVjdHMociwgbGtiLCBlcnJvcik7CisJfQogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMjQ0NywxMSArMjQ5NCwxNSBAQAogewogCWludCBlcnJvcjsKIAotCWlmIChpc19yZW1vdGUocikpCisJaWYgKGlzX3JlbW90ZShyKSkgewogCQkvKiByZWNlaXZlX2NhbmNlbCgpIGNhbGxzIGRvX2NhbmNlbCgpIG9uIHJlbW90ZSBub2RlICovCiAJCWVycm9yID0gc2VuZF9jYW5jZWwociwgbGtiKTsKLQllbHNlCisJfSBlbHNlIHsKIAkJZXJyb3IgPSBkb19jYW5jZWwociwgbGtiKTsKKwkJLyogZm9yIHJlbW90ZSBsb2NrcyB0aGUgY2FuY2VsX3JlcGx5IGlzIHNlbnQKKwkJICAgYmV0d2VlbiBkb19jYW5jZWwgYW5kIGRvX2NhbmNlbF9lZmZlY3RzICovCisJCWRvX2NhbmNlbF9lZmZlY3RzKHIsIGxrYiwgZXJyb3IpOworCX0KIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTMxOTEsNiArMzI0Miw3IEBACiAJYXR0YWNoX2xrYihyLCBsa2IpOwogCWVycm9yID0gZG9fcmVxdWVzdChyLCBsa2IpOwogCXNlbmRfcmVxdWVzdF9yZXBseShyLCBsa2IsIGVycm9yKTsKKwlkb19yZXF1ZXN0X2VmZmVjdHMociwgbGtiLCBlcnJvcik7CiAKIAl1bmxvY2tfcnNiKHIpOwogCXB1dF9yc2Iocik7CkBAIC0zMjI2LDE1ICszMjc4LDE5IEBACiAJCWdvdG8gb3V0OwogCiAJcmVjZWl2ZV9mbGFncyhsa2IsIG1zKTsKKwogCWVycm9yID0gcmVjZWl2ZV9jb252ZXJ0X2FyZ3MobHMsIGxrYiwgbXMpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfcmVwbHk7CisJaWYgKGVycm9yKSB7CisJCXNlbmRfY29udmVydF9yZXBseShyLCBsa2IsIGVycm9yKTsKKwkJZ290byBvdXQ7CisJfQorCiAJcmVwbHkgPSAhZG93bl9jb252ZXJzaW9uKGxrYik7CiAKIAllcnJvciA9IGRvX2NvbnZlcnQociwgbGtiKTsKLSBvdXRfcmVwbHk6CiAJaWYgKHJlcGx5KQogCQlzZW5kX2NvbnZlcnRfcmVwbHkociwgbGtiLCBlcnJvcik7CisJZG9fY29udmVydF9lZmZlY3RzKHIsIGxrYiwgZXJyb3IpOwogIG91dDoKIAl1bmxvY2tfcnNiKHIpOwogCXB1dF9yc2Iocik7CkBAIC0zMjY2LDEzICszMzIyLDE2IEBACiAJCWdvdG8gb3V0OwogCiAJcmVjZWl2ZV9mbGFncyhsa2IsIG1zKTsKKwogCWVycm9yID0gcmVjZWl2ZV91bmxvY2tfYXJncyhscywgbGtiLCBtcyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9yZXBseTsKKwlpZiAoZXJyb3IpIHsKKwkJc2VuZF91bmxvY2tfcmVwbHkociwgbGtiLCBlcnJvcik7CisJCWdvdG8gb3V0OworCX0KIAogCWVycm9yID0gZG9fdW5sb2NrKHIsIGxrYik7Ci0gb3V0X3JlcGx5OgogCXNlbmRfdW5sb2NrX3JlcGx5KHIsIGxrYiwgZXJyb3IpOworCWRvX3VubG9ja19lZmZlY3RzKHIsIGxrYiwgZXJyb3IpOwogIG91dDoKIAl1bmxvY2tfcnNiKHIpOwogCXB1dF9yc2Iocik7CkBAIC0zMzA3LDYgKzMzNjYsNyBAQAogCiAJZXJyb3IgPSBkb19jYW5jZWwociwgbGtiKTsKIAlzZW5kX2NhbmNlbF9yZXBseShyLCBsa2IsIGVycm9yKTsKKwlkb19jYW5jZWxfZWZmZWN0cyhyLCBsa2IsIGVycm9yKTsKICBvdXQ6CiAJdW5sb2NrX3JzYihyKTsKIAlwdXRfcnNiKHIpOwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvY2tzcGFjZS5jIGIvZnMvZGxtL2xvY2tzcGFjZS5jCmluZGV4IGMwMTBlY2YuLjI2YThiZDQgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9sb2Nrc3BhY2UuYworKysgYi9mcy9kbG0vbG9ja3NwYWNlLmMKQEAgLTE5MSw2ICsxOTEsMTggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBpbnQgZGxtX3VldmVudChzdHJ1Y3Qga3NldCAqa3NldCwgc3RydWN0IGtvYmplY3QgKmtvYmosCisJCSAgICAgIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKK3sKKwlzdHJ1Y3QgZGxtX2xzICpscyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGxtX2xzLCBsc19rb2JqKTsKKworCWFkZF91ZXZlbnRfdmFyKGVudiwgIkxPQ0tTUEFDRT0lcyIsIGxzLT5sc19uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBrc2V0X3VldmVudF9vcHMgZGxtX3VldmVudF9vcHMgPSB7CisJLnVldmVudCA9IGRsbV91ZXZlbnQsCit9OwogCiBpbnQgX19pbml0IGRsbV9sb2Nrc3BhY2VfaW5pdCh2b2lkKQogewpAQCAtMTk5LDcgKzIxMSw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmxzbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmxzbGlzdF9sb2NrKTsKIAotCWRsbV9rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgiZGxtIiwgTlVMTCwga2VybmVsX2tvYmopOworCWRsbV9rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgiZGxtIiwgJmRsbV91ZXZlbnRfb3BzLCBrZXJuZWxfa29iaik7CiAJaWYgKCFkbG1fa3NldCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2FuIG5vdCBjcmVhdGUga3NldFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS91c2VyLmMgYi9mcy9kbG0vdXNlci5jCmluZGV4IGU3M2E0YmIuLmE0YmZkMzEgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS91c2VyLmMKKysrIGIvZnMvZGxtL3VzZXIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTAgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC0xNzMsNyArMTczLDcgQEAKIC8qIHdlIGNvdWxkIHBvc3NpYmx5IGNoZWNrIGlmIHRoZSBjYW5jZWwgb2YgYW4gb3JwaGFuIGhhcyByZXN1bHRlZCBpbiB0aGUgbGtiCiAgICBiZWluZyByZW1vdmVkIGFuZCB0aGVuIHJlbW92ZSB0aGF0IGxrYiBmcm9tIHRoZSBvcnBoYW5zIGxpc3QgYW5kIGZyZWUgaXQgKi8KIAotdm9pZCBkbG1fdXNlcl9hZGRfYXN0KHN0cnVjdCBkbG1fbGtiICpsa2IsIGludCB0eXBlLCBpbnQgYmFzdG1vZGUpCit2b2lkIGRsbV91c2VyX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBtb2RlKQogewogCXN0cnVjdCBkbG1fbHMgKmxzOwogCXN0cnVjdCBkbG1fdXNlcl9hcmdzICp1YTsKQEAgLTIwNiw4ICsyMDYsMTAgQEAKIAogCWFzdF90eXBlID0gbGtiLT5sa2JfYXN0X3R5cGU7CiAJbGtiLT5sa2JfYXN0X3R5cGUgfD0gdHlwZTsKLQlpZiAoYmFzdG1vZGUpCi0JCWxrYi0+bGtiX2Jhc3Rtb2RlID0gYmFzdG1vZGU7CisJaWYgKHR5cGUgPT0gQVNUX0JBU1QpCisJCWxrYi0+bGtiX2Jhc3Rtb2RlID0gbW9kZTsKKwllbHNlCisJCWxrYi0+bGtiX2Nhc3Rtb2RlID0gbW9kZTsKIAogCWlmICghYXN0X3R5cGUpIHsKIAkJa3JlZl9nZXQoJmxrYi0+bGtiX3JlZik7CmRpZmYgLS1naXQgYS9mcy9kbG0vdXNlci5oIGIvZnMvZGxtL3VzZXIuaAppbmRleCAxYzk2ODY0Li5mMTk2MDkxIDEwMDY0NAotLS0gYS9mcy9kbG0vdXNlci5oCisrKyBiL2ZzL2RsbS91c2VyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtOSw3ICs5LDcgQEAKICNpZm5kZWYgX19VU0VSX0RPVF9IX18KICNkZWZpbmUgX19VU0VSX0RPVF9IX18KIAotdm9pZCBkbG1fdXNlcl9hZGRfYXN0KHN0cnVjdCBkbG1fbGtiICpsa2IsIGludCB0eXBlLCBpbnQgYmFzdG1vZGUpOwordm9pZCBkbG1fdXNlcl9hZGRfYXN0KHN0cnVjdCBkbG1fbGtiICpsa2IsIGludCB0eXBlLCBpbnQgbW9kZSk7CiBpbnQgZGxtX3VzZXJfaW5pdCh2b2lkKTsKIHZvaWQgZGxtX3VzZXJfZXhpdCh2b2lkKTsKIGludCBkbG1fZGV2aWNlX2RlcmVnaXN0ZXIoc3RydWN0IGRsbV9scyAqbHMpOwpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDY3NWMzZjQuLmNjZTZiYmQgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTU3MSw2ICs1NzEsOSBAQAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyB2bV9mbGFnczsKIAl1bnNpZ25lZCBsb25nIHN0YWNrX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBzdGFja19zaXplOworCXVuc2lnbmVkIGxvbmcgc3RhY2tfZXhwYW5kOworCXVuc2lnbmVkIGxvbmcgcmxpbV9zdGFjazsKIAogI2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQCiAJLyogTGltaXQgc3RhY2sgc2l6ZSB0byAxR0IgKi8KQEAgLTYyNywxMCArNjMwLDIzIEBACiAJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCisJc3RhY2tfZXhwYW5kID0gRVhUUkFfU1RBQ0tfVk1fUEFHRVMgKiBQQUdFX1NJWkU7CisJc3RhY2tfc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKKwkvKgorCSAqIEFsaWduIHRoaXMgZG93biB0byBhIHBhZ2UgYm91bmRhcnkgYXMgZXhwYW5kX3N0YWNrCisJICogd2lsbCBhbGlnbiBpdCB1cC4KKwkgKi8KKwlybGltX3N0YWNrID0gcmxpbWl0KFJMSU1JVF9TVEFDSykgJiBQQUdFX01BU0s7CiAjaWZkZWYgQ09ORklHX1NUQUNLX0dST1dTVVAKLQlzdGFja19iYXNlID0gdm1hLT52bV9lbmQgKyBFWFRSQV9TVEFDS19WTV9QQUdFUyAqIFBBR0VfU0laRTsKKwlpZiAoc3RhY2tfc2l6ZSArIHN0YWNrX2V4cGFuZCA+IHJsaW1fc3RhY2spCisJCXN0YWNrX2Jhc2UgPSB2bWEtPnZtX3N0YXJ0ICsgcmxpbV9zdGFjazsKKwllbHNlCisJCXN0YWNrX2Jhc2UgPSB2bWEtPnZtX2VuZCArIHN0YWNrX2V4cGFuZDsKICNlbHNlCi0Jc3RhY2tfYmFzZSA9IHZtYS0+dm1fc3RhcnQgLSBFWFRSQV9TVEFDS19WTV9QQUdFUyAqIFBBR0VfU0laRTsKKwlpZiAoc3RhY2tfc2l6ZSArIHN0YWNrX2V4cGFuZCA+IHJsaW1fc3RhY2spCisJCXN0YWNrX2Jhc2UgPSB2bWEtPnZtX2VuZCAtIHJsaW1fc3RhY2s7CisJZWxzZQorCQlzdGFja19iYXNlID0gdm1hLT52bV9zdGFydCAtIHN0YWNrX2V4cGFuZDsKICNlbmRpZgogCXJldCA9IGV4cGFuZF9zdGFjayh2bWEsIHN0YWNrX2Jhc2UpOwogCWlmIChyZXQpCkBAIC05NjEsNiArOTc3LDExIEBACiAJCWdvdG8gb3V0OwogCiAJYnBybS0+bW0gPSBOVUxMOwkJLyogV2UncmUgdXNpbmcgaXQgbm93ICovCisKKwljdXJyZW50LT5mbGFncyAmPSB+UEZfUkFORE9NSVpFOworCWZsdXNoX3RocmVhZCgpOworCWN1cnJlbnQtPnBlcnNvbmFsaXR5ICY9IH5icHJtLT5wZXJfY2xlYXI7CisKIAlyZXR1cm4gMDsKIAogb3V0OgpAQCAtOTk3LDkgKzEwMTgsNiBAQAogCXRjb21tW2ldID0gJ1wwJzsKIAlzZXRfdGFza19jb21tKGN1cnJlbnQsIHRjb21tKTsKIAotCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9SQU5ET01JWkU7Ci0JZmx1c2hfdGhyZWFkKCk7Ci0KIAkvKiBTZXQgdGhlIG5ldyBtbSB0YXNrIHNpemUuIFdlIGhhdmUgdG8gZG8gdGhhdCBsYXRlIGJlY2F1c2UgaXQgbWF5CiAJICogZGVwZW5kIG9uIFRJRl8zMkJJVCB3aGljaCBpcyBvbmx5IHVwZGF0ZWQgaW4gZmx1c2hfdGhyZWFkKCkgb24KIAkgKiBzb21lIGFyY2hpdGVjdHVyZXMgbGlrZSBwb3dlcnBjCkBAIC0xMDE1LDggKzEwMzMsNiBAQAogCQlzZXRfZHVtcGFibGUoY3VycmVudC0+bW0sIHN1aWRfZHVtcGFibGUpOwogCX0KIAotCWN1cnJlbnQtPnBlcnNvbmFsaXR5ICY9IH5icHJtLT5wZXJfY2xlYXI7Ci0KIAkvKgogCSAqIEZsdXNoIHBlcmZvcm1hbmNlIGNvdW50ZXJzIHdoZW4gY3Jvc3NpbmcgYQogCSAqIHNlY3VyaXR5IGRvbWFpbjoKZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jCmluZGV4IDVlZjk1M2UuLjk3ZTAxZGMgMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtMTk5LDkgKzE5OSw3IEBACiBzdGF0aWMgdm9pZCBmX21vZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHBpZCAqcGlkLCBlbnVtIHBpZF90eXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgZm9yY2UpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZmlscC0+Zl9vd25lci5sb2NrLCBmbGFncyk7CisJd3JpdGVfbG9ja19pcnEoJmZpbHAtPmZfb3duZXIubG9jayk7CiAJaWYgKGZvcmNlIHx8ICFmaWxwLT5mX293bmVyLnBpZCkgewogCQlwdXRfcGlkKGZpbHAtPmZfb3duZXIucGlkKTsKIAkJZmlscC0+Zl9vd25lci5waWQgPSBnZXRfcGlkKHBpZCk7CkBAIC0yMTMsNyArMjExLDcgQEAKIAkJCWZpbHAtPmZfb3duZXIuZXVpZCA9IGNyZWQtPmV1aWQ7CiAJCX0KIAl9Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmZpbHAtPmZfb3duZXIubG9jaywgZmxhZ3MpOworCXdyaXRlX3VubG9ja19pcnEoJmZpbHAtPmZfb3duZXIubG9jayk7CiB9CiAKIGludCBfX2Zfc2V0b3duKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgcGlkICpwaWQsIGVudW0gcGlkX3R5cGUgdHlwZSwKZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCA4N2UxMjkwLi4zODAzOWFmIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKKysrIGIvZnMvZmlsZS5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAllcnJvciA9IGZkOwogI2lmIDEKIAkvKiBTYW5pdHkgY2hlY2sgKi8KLQlpZiAocmN1X2RlcmVmZXJlbmNlKGZkdC0+ZmRbZmRdKSAhPSBOVUxMKSB7CisJaWYgKHJjdV9kZXJlZmVyZW5jZV9yYXcoZmR0LT5mZFtmZF0pICE9IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWxsb2NfZmQ6IHNsb3QgJWQgbm90IE5VTEwhXG4iLCBmZCk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihmZHQtPmZkW2ZkXSwgTlVMTCk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IDY5NjUyYzUuLmI5ODQwNGIgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYworKysgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTI1Myw2ICsyNTMsNyBAQAogCWlmIChmaWxlLT5mX29wICYmIGZpbGUtPmZfb3AtPnJlbGVhc2UpCiAJCWZpbGUtPmZfb3AtPnJlbGVhc2UoaW5vZGUsIGZpbGUpOwogCXNlY3VyaXR5X2ZpbGVfZnJlZShmaWxlKTsKKwlpbWFfZmlsZV9mcmVlKGZpbGUpOwogCWlmICh1bmxpa2VseShTX0lTQ0hSKGlub2RlLT5pX21vZGUpICYmIGlub2RlLT5pX2NkZXYgIT0gTlVMTCkpCiAJCWNkZXZfcHV0KGlub2RlLT5pX2NkZXYpOwogCWZvcHNfcHV0KGZpbGUtPmZfb3ApOwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9maWxlLmMgYi9mcy9mdXNlL2ZpbGUuYwppbmRleCBjMTg5MTNhLi5hOWY1ZTEzIDEwMDY0NAotLS0gYS9mcy9mdXNlL2ZpbGUuYworKysgYi9mcy9mdXNlL2ZpbGUuYwpAQCAtODI4LDYgKzgyOCw5IEBACiAJCWlmICghcGFnZSkKIAkJCWJyZWFrOwogCisJCWlmIChtYXBwaW5nX3dyaXRhYmx5X21hcHBlZChtYXBwaW5nKSkKKwkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCiAJCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CiAJCXRtcCA9IGlvdl9pdGVyX2NvcHlfZnJvbV91c2VyX2F0b21pYyhwYWdlLCBpaSwgb2Zmc2V0LCBieXRlcyk7CiAJCXBhZ2VmYXVsdF9lbmFibGUoKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvYm1hcC5jIGIvZnMvZ2ZzMi9ibWFwLmMKaW5kZXggNmQ0NzM3OS4uNTgzZTgyMyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9ibWFwLmMKKysrIGIvZnMvZ2ZzMi9ibWFwLmMKQEAgLTU0MSw3ICs1NDEsNyBAQAogCQkJCSpwdHIrKyA9IGNwdV90b19iZTY0KGJuKyspOwogCQkJYnJlYWs7CiAJCX0KLQl9IHdoaWxlIChzdGF0ZSAhPSBBTExPQ19EQVRBKTsKKwl9IHdoaWxlICgoc3RhdGUgIT0gQUxMT0NfREFUQSkgfHwgIWRibG9jayk7CiAKIAlpcC0+aV9oZWlnaHQgPSBoZWlnaHQ7CiAJZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSwgYWxsb2NlZCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmMgYi9mcy9nZnMyL2dsb2NrLmMKaW5kZXggZjQ1NWEwMy4uZjQyNjYzMyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5jCisrKyBiL2ZzL2dmczIvZ2xvY2suYwpAQCAtNzY5LDYgKzc2OSw3IEBACiAJaWYgKCFnbCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlhdG9taWNfaW5jKCZzZHAtPnNkX2dsb2NrX2Rpc3Bvc2FsKTsKIAlnbC0+Z2xfZmxhZ3MgPSAwOwogCWdsLT5nbF9uYW1lID0gbmFtZTsKIAlhdG9taWNfc2V0KCZnbC0+Z2xfcmVmLCAxKTsKQEAgLTE1MzgsNiArMTUzOSw5IEBACiAJCXVwX3dyaXRlKCZnZnMyX3Vtb3VudF9mbHVzaF9zZW0pOwogCQltc2xlZXAoMTApOwogCX0KKwlmbHVzaF93b3JrcXVldWUoZ2xvY2tfd29ya3F1ZXVlKTsKKwl3YWl0X2V2ZW50KHNkcC0+c2RfZ2xvY2tfd2FpdCwgYXRvbWljX3JlYWQoJnNkcC0+c2RfZ2xvY2tfZGlzcG9zYWwpID09IDApOworCWdmczJfZHVtcF9sb2Nrc3RhdGUoc2RwKTsKIH0KIAogdm9pZCBnZnMyX2dsb2NrX2ZpbmlzaF90cnVuY2F0ZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmggYi9mcy9nZnMyL2dsb2NrLmgKaW5kZXggMTNmMGJkMi4uYzAyNjJmYSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5oCisrKyBiL2ZzL2dmczIvZ2xvY2suaApAQCAtMTIzLDcgKzEyMyw3IEBACiAJaW50ICgqbG1fbW91bnQpIChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqZnNuYW1lKTsKICAJdm9pZCAoKmxtX3VubW91bnQpIChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAJdm9pZCAoKmxtX3dpdGhkcmF3KSAoc3RydWN0IGdmczJfc2JkICpzZHApOwotCXZvaWQgKCpsbV9wdXRfbG9jaykgKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKmdsKTsKKwl2b2lkICgqbG1fcHV0X2xvY2spIChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOwogCXVuc2lnbmVkIGludCAoKmxtX2xvY2spIChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsCiAJCQkJIHVuc2lnbmVkIGludCByZXFfc3RhdGUsIHVuc2lnbmVkIGludCBmbGFncyk7CiAJdm9pZCAoKmxtX2NhbmNlbCkgKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2luY29yZS5oIGIvZnMvZ2ZzMi9pbmNvcmUuaAppbmRleCA0NzkyMjAwLi5iYzBhZDE1IDEwMDY0NAotLS0gYS9mcy9nZnMyL2luY29yZS5oCisrKyBiL2ZzL2dmczIvaW5jb3JlLmgKQEAgLTU0NCw2ICs1NDQsOCBAQAogCXN0cnVjdCBnZnMyX2hvbGRlciBzZF9saXZlX2doOwogCXN0cnVjdCBnZnMyX2dsb2NrICpzZF9yZW5hbWVfZ2w7CiAJc3RydWN0IGdmczJfZ2xvY2sgKnNkX3RyYW5zX2dsOworCXdhaXRfcXVldWVfaGVhZF90IHNkX2dsb2NrX3dhaXQ7CisJYXRvbWljX3Qgc2RfZ2xvY2tfZGlzcG9zYWw7CiAKIAkvKiBJbm9kZSBTdHVmZiAqLwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tfZGxtLmMgYi9mcy9nZnMyL2xvY2tfZGxtLmMKaW5kZXggNDZkZjk4OC4uMGU1ZTBlNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb2NrX2RsbS5jCisrKyBiL2ZzL2dmczIvbG9ja19kbG0uYwpAQCAtMjEsNiArMjEsNyBAQAogewogCXN0cnVjdCBnZnMyX2dsb2NrICpnbCA9IGFyZzsKIAl1bnNpZ25lZCByZXQgPSBnbC0+Z2xfc3RhdGU7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOwogCiAJQlVHX09OKGdsLT5nbF9sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9ERU1PVEVEKTsKIApAQCAtMzAsNiArMzEsOCBAQAogCXN3aXRjaCAoZ2wtPmdsX2xrc2Iuc2Jfc3RhdHVzKSB7CiAJY2FzZSAtRExNX0VVTkxPQ0s6IC8qIFVubG9ja2VkLCBzbyBnbG9jayBjYW4gYmUgZnJlZWQgKi8KIAkJa21lbV9jYWNoZV9mcmVlKGdmczJfZ2xvY2tfY2FjaGVwLCBnbCk7CisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzZHAtPnNkX2dsb2NrX2Rpc3Bvc2FsKSkKKwkJCXdha2VfdXAoJnNkcC0+c2RfZ2xvY2tfd2FpdCk7CiAJCXJldHVybjsKIAljYXNlIC1ETE1fRUNBTkNFTDogLyogQ2FuY2VsIHdoaWxlIGdldHRpbmcgbG9jayAqLwogCQlyZXQgfD0gTE1fT1VUX0NBTkNFTEVEOwpAQCAtMTY0LDE0ICsxNjcsMTYgQEAKIAlyZXR1cm4gTE1fT1VUX0FTWU5DOwogfQogCi1zdGF0aWMgdm9pZCBnZGxtX3B1dF9sb2NrKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKnB0cikKK3N0YXRpYyB2b2lkIGdkbG1fcHV0X2xvY2soc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewotCXN0cnVjdCBnZnMyX2dsb2NrICpnbCA9IHB0cjsKLQlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmZ2wtPmdsX3NiZC0+c2RfbG9ja3N0cnVjdDsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKIAlpbnQgZXJyb3I7CiAKIAlpZiAoZ2wtPmdsX2xrc2Iuc2JfbGtpZCA9PSAwKSB7CiAJCWttZW1fY2FjaGVfZnJlZShjYWNoZXAsIGdsKTsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNkcC0+c2RfZ2xvY2tfZGlzcG9zYWwpKQorCQkJd2FrZV91cCgmc2RwLT5zZF9nbG9ja193YWl0KTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMgYi9mcy9nZnMyL29wc19mc3R5cGUuYwppbmRleCBlZGZlZTI0Li5hODZlZDYzIDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19mc3R5cGUuYworKysgYi9mcy9nZnMyL29wc19mc3R5cGUuYwpAQCAtODIsNiArODIsOCBAQAogCiAJZ2ZzMl90dW5lX2luaXQoJnNkcC0+c2RfdHVuZSk7CiAKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZHAtPnNkX2dsb2NrX3dhaXQpOworCWF0b21pY19zZXQoJnNkcC0+c2RfZ2xvY2tfZGlzcG9zYWwsIDApOwogCXNwaW5fbG9ja19pbml0KCZzZHAtPnNkX3N0YXRmc19zcGluKTsKIAogCXNwaW5fbG9ja19pbml0KCZzZHAtPnNkX3JpbmRleF9zcGluKTsKQEAgLTcyMyw3ICs3MjUsNyBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JZXJyb3IgPSAtRUlOVkFMOworCWVycm9yID0gLUVVU0VSUzsKIAlpZiAoIWdmczJfamluZGV4X3NpemUoc2RwKSkgewogCQlmc19lcnIoc2RwLCAibm8gam91cm5hbHMhXG4iKTsKIAkJZ290byBmYWlsX2ppbmRleDsKQEAgLTk4Myw5ICs5ODUsMTcgQEAKIAl7IE9wdF9lcnIsIE5VTEwgfSwKIH07CiAKK3N0YXRpYyB2b2lkIG5vbG9ja19wdXRfbG9jayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCit7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOworCWttZW1fY2FjaGVfZnJlZShjYWNoZXAsIGdsKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2RwLT5zZF9nbG9ja19kaXNwb3NhbCkpCisJCXdha2VfdXAoJnNkcC0+c2RfZ2xvY2tfd2FpdCk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBub2xvY2tfb3BzID0gewogCS5sbV9wcm90b19uYW1lID0gImxvY2tfbm9sb2NrIiwKLQkubG1fcHV0X2xvY2sgPSBrbWVtX2NhY2hlX2ZyZWUsCisJLmxtX3B1dF9sb2NrID0gbm9sb2NrX3B1dF9sb2NrLAogCS5sbV90b2tlbnMgPSAmbm9sb2NrX3Rva2VucywKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2lub2RlLmMgYi9mcy9nZnMyL29wc19pbm9kZS5jCmluZGV4IDc4ZjczY2EuLjg0MzUwZTEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfaW5vZGUuYwpAQCAtMTA4OCw3ICsxMDg4LDggQEAKIAkJZXJyb3IgPSB2ZnNfZm9sbG93X2xpbmsobmQsIGJ1Zik7CiAJCWlmIChidWYgIT0gYXJyYXkpCiAJCQlrZnJlZShidWYpOwotCX0KKwl9IGVsc2UKKwkJcGF0aF9wdXQoJm5kLT5wYXRoKTsKIAogCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvcmdycC5jIGIvZnMvZ2ZzMi9yZ3JwLmMKaW5kZXggMDYwOGY0OS4uNTAzYjg0MiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9yZ3JwLmMKKysrIGIvZnMvZ2ZzMi9yZ3JwLmMKQEAgLTU5MSwxMSArNTkxLDcgQEAKIAl1NjQgcmdycF9jb3VudCA9IGlwLT5pX2Rpc2tzaXplOwogCWludCBlcnJvcjsKIAotCWlmIChkb19kaXYocmdycF9jb3VudCwgc2l6ZW9mKHN0cnVjdCBnZnMyX3JpbmRleCkpKSB7Ci0JCWdmczJfY29uc2lzdF9pbm9kZShpcCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQorCWRvX2RpdihyZ3JwX2NvdW50LCBzaXplb2Yoc3RydWN0IGdmczJfcmluZGV4KSk7CiAJY2xlYXJfcmdycGRpKHNkcCk7CiAKIAlmaWxlX3JhX3N0YXRlX2luaXQoJnJhX3N0YXRlLCBpbm9kZS0+aV9tYXBwaW5nKTsKQEAgLTkxNSw3ICs5MTEsNyBAQAogc3RydWN0IGdmczJfYWxsb2MgKmdmczJfYWxsb2NfZ2V0KHN0cnVjdCBnZnMyX2lub2RlICppcCkKIHsKIAlCVUdfT04oaXAtPmlfYWxsb2MgIT0gTlVMTCk7Ci0JaXAtPmlfYWxsb2MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ2ZzMl9hbGxvYyksIEdGUF9LRVJORUwpOworCWlwLT5pX2FsbG9jID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdmczJfYWxsb2MpLCBHRlBfTk9GUyk7CiAJcmV0dXJuIGlwLT5pX2FsbG9jOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmMgYi9mcy9nZnMyL3N1cGVyLmMKaW5kZXggYzI4MmFkNC4uYjlkZDNkYSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5jCisrKyBiL2ZzL2dmczIvc3VwZXIuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggOTRhNWU2MC4uYTQ4NTVhZiAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC04MjMsNiArODIzLDE3IEBACiB9CiAKIC8qCisgKiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGtsdWRnZSB0byBkZWFsIHdpdGggImF1dG9tb3VudCIgc3ltbGlua3M7IHByb3BlcgorICogc29sdXRpb24gaXMgdG8gdHJpZ2dlciB0aGVtIG9uIGZvbGxvd19tb3VudCgpLCBzbyB0aGF0IGRvX2xvb2t1cCgpCisgKiB3b3VsZCBEVFJULiAgVG8gYmUga2lsbGVkIGJlZm9yZSAyLjYuMzQtZmluYWwuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGZvbGxvd19vbl9maW5hbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb29rdXBfZmxhZ3MpCit7CisJcmV0dXJuIGlub2RlICYmIHVubGlrZWx5KGlub2RlLT5pX29wLT5mb2xsb3dfbGluaykgJiYKKwkJKChsb29rdXBfZmxhZ3MgJiBMT09LVVBfRk9MTE9XKSB8fCBTX0lTRElSKGlub2RlLT5pX21vZGUpKTsKK30KKworLyoKICAqIE5hbWUgcmVzb2x1dGlvbi4KICAqIFRoaXMgaXMgdGhlIGJhc2ljIG5hbWUgcmVzb2x1dGlvbiBmdW5jdGlvbiwgdHVybmluZyBhIHBhdGhuYW1lIGludG8KICAqIHRoZSBmaW5hbCBkZW50cnkuIFdlIGV4cGVjdCAnYmFzZScgdG8gYmUgcG9zaXRpdmUgYW5kIGEgZGlyZWN0b3J5LgpAQCAtOTQyLDggKzk1Myw3IEBACiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAkJaW5vZGUgPSBuZXh0LmRlbnRyeS0+ZF9pbm9kZTsKLQkJaWYgKChsb29rdXBfZmxhZ3MgJiBMT09LVVBfRk9MTE9XKQotCQkgICAgJiYgaW5vZGUgJiYgaW5vZGUtPmlfb3AtPmZvbGxvd19saW5rKSB7CisJCWlmIChmb2xsb3dfb25fZmluYWwoaW5vZGUsIGxvb2t1cF9mbGFncykpIHsKIAkJCWVyciA9IGRvX2ZvbGxvd19saW5rKCZuZXh0LCBuZCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gcmV0dXJuX2VycjsKQEAgLTE3MzYsOCArMTc0Niw3IEBACiAJCWlmIChuZC5yb290Lm1udCkKIAkJCXBhdGhfcHV0KCZuZC5yb290KTsKIAkJaWYgKCFJU19FUlIoZmlscCkpIHsKLQkJCWVycm9yID0gaW1hX3BhdGhfY2hlY2soJmZpbHAtPmZfcGF0aCwgZmlscC0+Zl9tb2RlICYKLQkJCQkgICAgICAgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpKTsKKwkJCWVycm9yID0gaW1hX2ZpbGVfY2hlY2soZmlscCwgYWNjX21vZGUpOwogCQkJaWYgKGVycm9yKSB7CiAJCQkJZnB1dChmaWxwKTsKIAkJCQlmaWxwID0gRVJSX1BUUihlcnJvcik7CkBAIC0xNzk3LDggKzE4MDYsNyBAQAogCX0KIAlmaWxwID0gbmFtZWlkYXRhX3RvX2ZpbHAoJm5kKTsKIAlpZiAoIUlTX0VSUihmaWxwKSkgewotCQllcnJvciA9IGltYV9wYXRoX2NoZWNrKCZmaWxwLT5mX3BhdGgsIGZpbHAtPmZfbW9kZSAmCi0JCQkgICAgICAgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpKTsKKwkJZXJyb3IgPSBpbWFfZmlsZV9jaGVjayhmaWxwLCBhY2NfbW9kZSk7CiAJCWlmIChlcnJvcikgewogCQkJZnB1dChmaWxwKTsKIAkJCWZpbHAgPSBFUlJfUFRSKGVycm9yKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9LY29uZmlnIGIvZnMvbmZzL0tjb25maWcKaW5kZXggNTllNTY3My4uYTQzZDA3ZSAxMDA2NDQKLS0tIGEvZnMvbmZzL0tjb25maWcKKysrIGIvZnMvbmZzL0tjb25maWcKQEAgLTk1LDggKzk1LDcgQEAKIAkgIE1vc3QgcGVvcGxlIHNheSBOIGhlcmUuCiAKIGNvbmZpZyBORlNfRlNDQUNIRQotCWJvb2wgIlByb3ZpZGUgTkZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlib29sICJQcm92aWRlIE5GUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0IgogCWRlcGVuZHMgb24gTkZTX0ZTPW0gJiYgRlNDQUNIRSB8fCBORlNfRlM9eSAmJiBGU0NBQ0hFPXkKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IE5GUyBkYXRhIHRvIGJlIGNhY2hlZCBsb2NhbGx5IG9uIGRpc2MgdGhyb3VnaApkaWZmIC0tZ2l0IGEvZnMvbmZzL2RpcmVjdC5jIGIvZnMvbmZzL2RpcmVjdC5jCmluZGV4IGUxZDQxNWUuLjBkMjg5ODIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXJlY3QuYworKysgYi9mcy9uZnMvZGlyZWN0LmMKQEAgLTM0Miw2ICszNDIsNyBAQAogCQlkYXRhLT5yZXMuZmF0dHIgPSAmZGF0YS0+ZmF0dHI7CiAJCWRhdGEtPnJlcy5lb2YgPSAwOwogCQlkYXRhLT5yZXMuY291bnQgPSBieXRlczsKKwkJbmZzX2ZhdHRyX2luaXQoJmRhdGEtPmZhdHRyKTsKIAkJbXNnLnJwY19hcmdwID0gJmRhdGEtPmFyZ3M7CiAJCW1zZy5ycGNfcmVzcCA9ICZkYXRhLT5yZXM7CiAKQEAgLTU3NSw2ICs1NzYsNyBAQAogCWRhdGEtPnJlcy5jb3VudCA9IDA7CiAJZGF0YS0+cmVzLmZhdHRyID0gJmRhdGEtPmZhdHRyOwogCWRhdGEtPnJlcy52ZXJmID0gJmRhdGEtPnZlcmY7CisJbmZzX2ZhdHRyX2luaXQoJmRhdGEtPmZhdHRyKTsKIAogCU5GU19QUk9UTyhkYXRhLT5pbm9kZSktPmNvbW1pdF9zZXR1cChkYXRhLCAmbXNnKTsKIApAQCAtNzY2LDYgKzc2OCw3IEBACiAJCWRhdGEtPnJlcy5mYXR0ciA9ICZkYXRhLT5mYXR0cjsKIAkJZGF0YS0+cmVzLmNvdW50ID0gYnl0ZXM7CiAJCWRhdGEtPnJlcy52ZXJmID0gJmRhdGEtPnZlcmY7CisJCW5mc19mYXR0cl9pbml0KCZkYXRhLT5mYXR0cik7CiAKIAkJdGFza19zZXR1cF9kYXRhLnRhc2sgPSAmZGF0YS0+dGFzazsKIAkJdGFza19zZXR1cF9kYXRhLmNhbGxiYWNrX2RhdGEgPSBkYXRhOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGUuYyBiL2ZzL25mcy9maWxlLmMKaW5kZXggNmI4OTEzMi4uNjNmMjA3MSAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZpbGUuYworKysgYi9mcy9uZnMvZmlsZS5jCkBAIC00ODYsNiArNDg2LDggQEAKIHsKIAlkZnByaW50ayhQQUdFQ0FDSEUsICJORlM6IHJlbGVhc2VfcGFnZSglcClcbiIsIHBhZ2UpOwogCisJaWYgKGdmcCAmIF9fR0ZQX1dBSVQpCisJCW5mc193Yl9wYWdlKHBhZ2UtPm1hcHBpbmctPmhvc3QsIHBhZ2UpOwogCS8qIElmIFBhZ2VQcml2YXRlKCkgaXMgc2V0LCB0aGVuIHRoZSBwYWdlIGlzIG5vdCBmcmVlYWJsZSAqLwogCWlmIChQYWdlUHJpdmF0ZShwYWdlKSkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9uZnMvZnNjYWNoZS5jIGIvZnMvbmZzL2ZzY2FjaGUuYwppbmRleCBmYTU4ODAwLi4yMzc4NzRmIDEwMDY0NAotLS0gYS9mcy9uZnMvZnNjYWNoZS5jCisrKyBiL2ZzL25mcy9mc2NhY2hlLmMKQEAgLTM1NCwxMiArMzU0LDExIEBACiAgKi8KIGludCBuZnNfZnNjYWNoZV9yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCkKIHsKLQlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0kocGFnZS0+bWFwcGluZy0+aG9zdCk7Ci0Jc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBuZnNpLT5mc2NhY2hlOwotCi0JQlVHX09OKCFjb29raWUpOwotCiAJaWYgKFBhZ2VGc0NhY2hlKHBhZ2UpKSB7CisJCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShwYWdlLT5tYXBwaW5nLT5ob3N0KTsKKwkJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBuZnNpLT5mc2NhY2hlOworCisJCUJVR19PTighY29va2llKTsKIAkJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogZnNjYWNoZSByZWxlYXNlcGFnZSAoMHglcC8weCVwLzB4JXApXG4iLAogCQkJIGNvb2tpZSwgcGFnZSwgbmZzaSk7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggZmFhMDkxOC4uZjE0MWJkZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2lub2RlLmMKKysrIGIvZnMvbmZzL2lub2RlLmMKQEAgLTEyNjEsOCArMTI2MSwxMCBAQAogCiAJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX01PREUpIHsKIAkJaWYgKChpbm9kZS0+aV9tb2RlICYgU19JQUxMVUdPKSAhPSAoZmF0dHItPm1vZGUgJiBTX0lBTExVR08pKSB7CisJCQl1bW9kZV90IG5ld21vZGUgPSBpbm9kZS0+aV9tb2RlICYgU19JRk1UOworCQkJbmV3bW9kZSB8PSBmYXR0ci0+bW9kZSAmIFNfSUFMTFVHTzsKKwkJCWlub2RlLT5pX21vZGUgPSBuZXdtb2RlOwogCQkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX0lOVkFMSURfQUNDRVNTfE5GU19JTk9fSU5WQUxJRF9BQ0w7Ci0JCQlpbm9kZS0+aV9tb2RlID0gZmF0dHItPm1vZGU7CiAJCX0KIAl9IGVsc2UgaWYgKHNlcnZlci0+Y2FwcyAmIE5GU19DQVBfTU9ERSkKIAkJaW52YWxpZCB8PSBzYXZlX2NhY2hlX3ZhbGlkaXR5ICYgKE5GU19JTk9fSU5WQUxJRF9BVFRSCmRpZmYgLS1naXQgYS9mcy9uZnMvbW91bnRfY2xudC5jIGIvZnMvbmZzL21vdW50X2NsbnQuYwppbmRleCAwYWRlZmM0Li41OTA0N2Y4IDEwMDY0NAotLS0gYS9mcy9uZnMvbW91bnRfY2xudC5jCisrKyBiL2ZzL25mcy9tb3VudF9jbG50LmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXsgLnN0YXR1cyA9IE1OVDNFUlJfSU5WQUwsCQkuZXJybm8gPSAtRUlOVkFMLAl9LAogCXsgLnN0YXR1cyA9IE1OVDNFUlJfTkFNRVRPT0xPTkcsCS5lcnJubyA9IC1FTkFNRVRPT0xPTkcsCX0sCiAJeyAuc3RhdHVzID0gTU5UM0VSUl9OT1RTVVBQLAkJLmVycm5vID0gLUVOT1RTVVBQLAl9LAotCXsgLnN0YXR1cyA9IE1OVDNFUlJfU0VSVkVSRkFVTFQsCS5lcnJubyA9IC1FU0VSVkVSRkFVTFQsCX0sCisJeyAuc3RhdHVzID0gTU5UM0VSUl9TRVJWRVJGQVVMVCwJLmVycm5vID0gLUVSRU1PVEVJTywJfSwKIH07CiAKIHN0cnVjdCBtb3VudHJlcyB7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzMnhkci5jIGIvZnMvbmZzL25mczJ4ZHIuYwppbmRleCA1ZTA3OGIyLi43YmMyZGE4IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzMnhkci5jCisrKyBiL2ZzL25mcy9uZnMyeGRyLmMKQEAgLTY5OSw3ICs2OTksNyBAQAogCXsgTkZTRVJSX0JBRF9DT09LSUUsCS1FQkFEQ09PS0lFCX0sCiAJeyBORlNFUlJfTk9UU1VQUCwJLUVOT1RTVVBQCX0sCiAJeyBORlNFUlJfVE9PU01BTEwsCS1FVE9PU01BTEwJfSwKLQl7IE5GU0VSUl9TRVJWRVJGQVVMVCwJLUVTRVJWRVJGQVVMVAl9LAorCXsgTkZTRVJSX1NFUlZFUkZBVUxULAktRVJFTU9URUlPCX0sCiAJeyBORlNFUlJfQkFEVFlQRSwJLUVCQURUWVBFCX0sCiAJeyBORlNFUlJfSlVLRUJPWCwJLUVKVUtFQk9YCX0sCiAJeyAtMSwJCQktRUlPCQl9CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNF9mcy5oIGIvZnMvbmZzL25mczRfZnMuaAppbmRleCA4NjUyNjViLi4wYzZmZGEzIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNF9mcy5oCisrKyBiL2ZzL25mcy9uZnM0X2ZzLmgKQEAgLTE0Niw2ICsxNDYsNyBAQAogCU5GU19PX1JEV1JfU1RBVEUsCQkvKiBPUEVOIHN0YXRlaWQgaGFzIHJlYWQvd3JpdGUgc3RhdGUgKi8KIAlORlNfU1RBVEVfUkVDTEFJTV9SRUJPT1QsCS8qIE9QRU4gc3RhdGVpZCBzZXJ2ZXIgcmVib290ZWQgKi8KIAlORlNfU1RBVEVfUkVDTEFJTV9OT0dSQUNFLAkvKiBPUEVOIHN0YXRlaWQgbmVlZHMgdG8gcmVjb3ZlciBzdGF0ZSAqLworCU5GU19TVEFURV9QT1NJWF9MT0NLUywJCS8qIFBvc2l4IGxvY2tzIGFyZSBzdXBwb3J0ZWQgKi8KIH07CiAKIHN0cnVjdCBuZnM0X3N0YXRlIHsKQEAgLTI3Nyw2ICsyNzgsNyBAQAogZXh0ZXJuIHZvaWQgbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeShzdHJ1Y3QgbmZzX2NsaWVudCAqKTsKIGV4dGVybiB2b2lkIG5mczRfc2NoZWR1bGVfc3RhdGVfbWFuYWdlcihzdHJ1Y3QgbmZzX2NsaWVudCAqKTsKIGV4dGVybiBpbnQgbmZzNF9zdGF0ZV9tYXJrX3JlY2xhaW1fbm9ncmFjZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpOworZXh0ZXJuIGludCBuZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9yZWJvb3Qoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlKTsKIGV4dGVybiB2b2lkIG5mczQxX2hhbmRsZV9zZXF1ZW5jZV9mbGFnX2Vycm9ycyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCB1MzIgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgbmZzNF9wdXRfbG9ja19zdGF0ZShzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICpsc3ApOwogZXh0ZXJuIGludCBuZnM0X3NldF9sb2NrX3N0YXRlKHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCAxOThkNTFkLi4zNzVmMGZhIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtMjQ5LDE5ICsyNDksMTUgQEAKIAkJCWlmIChzdGF0ZSA9PSBOVUxMKQogCQkJCWJyZWFrOwogCQkJbmZzNF9zdGF0ZV9tYXJrX3JlY2xhaW1fbm9ncmFjZShjbHAsIHN0YXRlKTsKLQkJY2FzZSAtTkZTNEVSUl9TVEFMRV9DTElFTlRJRDoKKwkJCWdvdG8gZG9fc3RhdGVfcmVjb3Zlcnk7CiAJCWNhc2UgLU5GUzRFUlJfU1RBTEVfU1RBVEVJRDoKLQkJY2FzZSAtTkZTNEVSUl9FWFBJUkVEOgotCQkJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeShjbHApOwotCQkJcmV0ID0gbmZzNF93YWl0X2NsbnRfcmVjb3ZlcihjbHApOwotCQkJaWYgKHJldCA9PSAwKQotCQkJCWV4Y2VwdGlvbi0+cmV0cnkgPSAxOwotI2lmICFkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkKLQkJCWJyZWFrOwotI2Vsc2UgLyogIWRlZmluZWQoQ09ORklHX05GU19WNF8xKSAqLwotCQkJaWYgKCFuZnM0X2hhc19zZXNzaW9uKHNlcnZlci0+bmZzX2NsaWVudCkpCisJCQlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJCQlicmVhazsKLQkJCS8qIEZBTExUSFJPVUdIICovCisJCQluZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9yZWJvb3QoY2xwLCBzdGF0ZSk7CisJCWNhc2UgLU5GUzRFUlJfU1RBTEVfQ0xJRU5USUQ6CisJCWNhc2UgLU5GUzRFUlJfRVhQSVJFRDoKKwkJCWdvdG8gZG9fc3RhdGVfcmVjb3Zlcnk7CisjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCiAJCWNhc2UgLU5GUzRFUlJfQkFEU0VTU0lPTjoKIAkJY2FzZSAtTkZTNEVSUl9CQURTTE9UOgogCQljYXNlIC1ORlM0RVJSX0JBRF9ISUdIX1NMT1Q6CkBAIC0yNzQsNyArMjcwLDcgQEAKIAkJCW5mczRfc2NoZWR1bGVfc3RhdGVfcmVjb3ZlcnkoY2xwKTsKIAkJCWV4Y2VwdGlvbi0+cmV0cnkgPSAxOwogCQkJYnJlYWs7Ci0jZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX05GU19WNF8xKSAqLworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX05GU19WNF8xKSAqLwogCQljYXNlIC1ORlM0RVJSX0ZJTEVfT1BFTjoKIAkJCWlmIChleGNlcHRpb24tPnRpbWVvdXQgPiBIWikgewogCQkJCS8qIFdlIGhhdmUgcmV0cmllZCBhIGRlY2VudCBhbW91bnQsIHRpbWUgdG8KQEAgLTI5Myw2ICsyODksMTIgQEAKIAl9CiAJLyogV2UgZmFpbGVkIHRvIGhhbmRsZSB0aGUgZXJyb3IgKi8KIAlyZXR1cm4gbmZzNF9tYXBfZXJyb3JzKHJldCk7Citkb19zdGF0ZV9yZWNvdmVyeToKKwluZnM0X3NjaGVkdWxlX3N0YXRlX3JlY292ZXJ5KGNscCk7CisJcmV0ID0gbmZzNF93YWl0X2NsbnRfcmVjb3ZlcihjbHApOworCWlmIChyZXQgPT0gMCkKKwkJZXhjZXB0aW9uLT5yZXRyeSA9IDE7CisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC0xNjU4LDYgKzE2NjAsOCBAQAogCXN0YXR1cyA9IFBUUl9FUlIoc3RhdGUpOwogCWlmIChJU19FUlIoc3RhdGUpKQogCQlnb3RvIGVycl9vcGVuZGF0YV9wdXQ7CisJaWYgKChvcGVuZGF0YS0+b19yZXMucmZsYWdzICYgTkZTNF9PUEVOX1JFU1VMVF9MT0NLVFlQRV9QT1NJWCkgIT0gMCkKKwkJc2V0X2JpdChORlNfU1RBVEVfUE9TSVhfTE9DS1MsICZzdGF0ZS0+ZmxhZ3MpOwogCW5mczRfb3BlbmRhdGFfcHV0KG9wZW5kYXRhKTsKIAluZnM0X3B1dF9zdGF0ZV9vd25lcihzcCk7CiAJKnJlcyA9IHN0YXRlOwpAQCAtMzQyMiwxNSArMzQyNiwxNCBAQAogCQkJaWYgKHN0YXRlID09IE5VTEwpCiAJCQkJYnJlYWs7CiAJCQluZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9ub2dyYWNlKGNscCwgc3RhdGUpOwotCQljYXNlIC1ORlM0RVJSX1NUQUxFX0NMSUVOVElEOgorCQkJZ290byBkb19zdGF0ZV9yZWNvdmVyeTsKIAkJY2FzZSAtTkZTNEVSUl9TVEFMRV9TVEFURUlEOgorCQkJaWYgKHN0YXRlID09IE5VTEwpCisJCQkJYnJlYWs7CisJCQluZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9yZWJvb3QoY2xwLCBzdGF0ZSk7CisJCWNhc2UgLU5GUzRFUlJfU1RBTEVfQ0xJRU5USUQ6CiAJCWNhc2UgLU5GUzRFUlJfRVhQSVJFRDoKLQkJCXJwY19zbGVlcF9vbigmY2xwLT5jbF9ycGN3YWl0cSwgdGFzaywgTlVMTCk7Ci0JCQluZnM0X3NjaGVkdWxlX3N0YXRlX3JlY292ZXJ5KGNscCk7Ci0JCQlpZiAodGVzdF9iaXQoTkZTNENMTlRfTUFOQUdFUl9SVU5OSU5HLCAmY2xwLT5jbF9zdGF0ZSkgPT0gMCkKLQkJCQlycGNfd2FrZV91cF9xdWV1ZWRfdGFzaygmY2xwLT5jbF9ycGN3YWl0cSwgdGFzayk7Ci0JCQl0YXNrLT50a19zdGF0dXMgPSAwOwotCQkJcmV0dXJuIC1FQUdBSU47CisJCQlnb3RvIGRvX3N0YXRlX3JlY292ZXJ5OwogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQogCQljYXNlIC1ORlM0RVJSX0JBRFNFU1NJT046CiAJCWNhc2UgLU5GUzRFUlJfQkFEU0xPVDoKQEAgLTM0NTgsNiArMzQ2MSwxMyBAQAogCX0KIAl0YXNrLT50a19zdGF0dXMgPSBuZnM0X21hcF9lcnJvcnModGFzay0+dGtfc3RhdHVzKTsKIAlyZXR1cm4gMDsKK2RvX3N0YXRlX3JlY292ZXJ5OgorCXJwY19zbGVlcF9vbigmY2xwLT5jbF9ycGN3YWl0cSwgdGFzaywgTlVMTCk7CisJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeShjbHApOworCWlmICh0ZXN0X2JpdChORlM0Q0xOVF9NQU5BR0VSX1JVTk5JTkcsICZjbHAtPmNsX3N0YXRlKSA9PSAwKQorCQlycGNfd2FrZV91cF9xdWV1ZWRfdGFzaygmY2xwLT5jbF9ycGN3YWl0cSwgdGFzayk7CisJdGFzay0+dGtfc3RhdHVzID0gMDsKKwlyZXR1cm4gLUVBR0FJTjsKIH0KIAogc3RhdGljIGludApAQCAtNDA4OCw2ICs0MDk4LDI4IEBACiAJLnJwY19yZWxlYXNlID0gbmZzNF9sb2NrX3JlbGVhc2UsCiB9OwogCitzdGF0aWMgdm9pZCBuZnM0X2hhbmRsZV9zZXRsa19lcnJvcihzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICpsc3AsIGludCBuZXdfbG9ja19vd25lciwgaW50IGVycm9yKQoreworCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBzZXJ2ZXItPm5mc19jbGllbnQ7CisJc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlID0gbHNwLT5sc19zdGF0ZTsKKworCXN3aXRjaCAoZXJyb3IpIHsKKwljYXNlIC1ORlM0RVJSX0FETUlOX1JFVk9LRUQ6CisJY2FzZSAtTkZTNEVSUl9CQURfU1RBVEVJRDoKKwljYXNlIC1ORlM0RVJSX0VYUElSRUQ6CisJCWlmIChuZXdfbG9ja19vd25lciAhPSAwIHx8CisJCSAgIChsc3AtPmxzX2ZsYWdzICYgTkZTX0xPQ0tfSU5JVElBTElaRUQpICE9IDApCisJCQluZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9ub2dyYWNlKGNscCwgc3RhdGUpOworCQlsc3AtPmxzX3NlcWlkLmZsYWdzICY9IH5ORlNfU0VRSURfQ09ORklSTUVEOworCQlicmVhazsKKwljYXNlIC1ORlM0RVJSX1NUQUxFX1NUQVRFSUQ6CisJCWlmIChuZXdfbG9ja19vd25lciAhPSAwIHx8CisJCSAgICAobHNwLT5sc19mbGFncyAmIE5GU19MT0NLX0lOSVRJQUxJWkVEKSAhPSAwKQorCQkJbmZzNF9zdGF0ZV9tYXJrX3JlY2xhaW1fcmVib290KGNscCwgc3RhdGUpOworCQlsc3AtPmxzX3NlcWlkLmZsYWdzICY9IH5ORlNfU0VRSURfQ09ORklSTUVEOworCX07Cit9CisKIHN0YXRpYyBpbnQgX25mczRfZG9fc2V0bGsoc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgaW50IHJlY292ZXJ5X3R5cGUpCiB7CiAJc3RydWN0IG5mczRfbG9ja2RhdGEgKmRhdGE7CkBAIC00MTI2LDYgKzQxNTgsOSBAQAogCXJldCA9IG5mczRfd2FpdF9mb3JfY29tcGxldGlvbl9ycGNfdGFzayh0YXNrKTsKIAlpZiAocmV0ID09IDApIHsKIAkJcmV0ID0gZGF0YS0+cnBjX3N0YXR1czsKKwkJaWYgKHJldCkKKwkJCW5mczRfaGFuZGxlX3NldGxrX2Vycm9yKGRhdGEtPnNlcnZlciwgZGF0YS0+bHNwLAorCQkJCQlkYXRhLT5hcmcubmV3X2xvY2tfb3duZXIsIHJldCk7CiAJfSBlbHNlCiAJCWRhdGEtPmNhbmNlbGxlZCA9IDE7CiAJcnBjX3B1dF90YXNrKHRhc2spOwpAQCAtNDE4MSw4ICs0MjE2LDExIEBACiB7CiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKHN0YXRlLT5pbm9kZSk7CiAJdW5zaWduZWQgY2hhciBmbF9mbGFncyA9IHJlcXVlc3QtPmZsX2ZsYWdzOwotCWludCBzdGF0dXM7CisJaW50IHN0YXR1cyA9IC1FTk9MQ0s7CiAKKwlpZiAoKGZsX2ZsYWdzICYgRkxfUE9TSVgpICYmCisJCQkhdGVzdF9iaXQoTkZTX1NUQVRFX1BPU0lYX0xPQ0tTLCAmc3RhdGUtPmZsYWdzKSkKKwkJZ290byBvdXQ7CiAJLyogSXMgdGhpcyBhIGRlbGVnYXRlZCBvcGVuPyAqLwogCXN0YXR1cyA9IG5mczRfc2V0X2xvY2tfc3RhdGUoc3RhdGUsIHJlcXVlc3QpOwogCWlmIChzdGF0dXMgIT0gMCkKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwppbmRleCA2ZDI2M2VkLi5jMWUyNzMzIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC05MDEsNyArOTAxLDcgQEAKIAluZnM0X3NjaGVkdWxlX3N0YXRlX21hbmFnZXIoY2xwKTsKIH0KIAotc3RhdGljIGludCBuZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9yZWJvb3Qoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlKQoraW50IG5mczRfc3RhdGVfbWFya19yZWNsYWltX3JlYm9vdChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpCiB7CiAKIAlzZXRfYml0KE5GU19TVEFURV9SRUNMQUlNX1JFQk9PVCwgJnN0YXRlLT5mbGFncyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHhkci5jIGIvZnMvbmZzL25mczR4ZHIuYwppbmRleCBlNDM3ZmQ2Li41Y2Q1MTg0IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHhkci5jCisrKyBiL2ZzL25mcy9uZnM0eGRyLmMKQEAgLTQ2MzEsNyArNDYzMSw3IEBACiAJICogSWYgdGhlIHNlcnZlciByZXR1cm5zIGRpZmZlcmVudCB2YWx1ZXMgZm9yIHNlc3Npb25JRCwgc2xvdElEIG9yCiAJICogc2VxdWVuY2UgbnVtYmVyLCB0aGUgc2VydmVyIGlzIGxvb25leSB0dW5lcy4KIAkgKi8KLQlzdGF0dXMgPSAtRVNFUlZFUkZBVUxUOworCXN0YXR1cyA9IC1FUkVNT1RFSU87CiAKIAlpZiAobWVtY21wKGlkLmRhdGEsIHJlcy0+c3Jfc2Vzc2lvbi0+c2Vzc19pZC5kYXRhLAogCQkgICBORlM0X01BWF9TRVNTSU9OSURfTEVOKSkgewpAQCAtNTc3NCw3ICs1Nzc0LDcgQEAKIAl7IE5GUzRFUlJfQkFEX0NPT0tJRSwJLUVCQURDT09LSUUJfSwKIAl7IE5GUzRFUlJfTk9UU1VQUCwJLUVOT1RTVVBQCX0sCiAJeyBORlM0RVJSX1RPT1NNQUxMLAktRVRPT1NNQUxMCX0sCi0JeyBORlM0RVJSX1NFUlZFUkZBVUxULAktRVNFUlZFUkZBVUxUCX0sCisJeyBORlM0RVJSX1NFUlZFUkZBVUxULAktRVJFTU9URUlPCX0sCiAJeyBORlM0RVJSX0JBRFRZUEUsCS1FQkFEVFlQRQl9LAogCXsgTkZTNEVSUl9MT0NLRUQsCS1FQUdBSU4JCX0sCiAJeyBORlM0RVJSX1NZTUxJTkssCS1FTE9PUAkJfSwKQEAgLTU4MDEsNyArNTgwMSw3IEBACiAJfQogCWlmIChzdGF0IDw9IDEwMDAwIHx8IHN0YXQgPiAxMDEwMCkgewogCQkvKiBUaGUgc2VydmVyIGlzIGxvb25leSB0dW5lcy4gKi8KLQkJcmV0dXJuIC1FU0VSVkVSRkFVTFQ7CisJCXJldHVybiAtRVJFTU9URUlPOwogCX0KIAkvKiBJZiB3ZSBjYW5ub3QgdHJhbnNsYXRlIHRoZSBlcnJvciwgdGhlIHJlY292ZXJ5IHJvdXRpbmVzIHNob3VsZAogCSAqIGhhbmRsZSBpdC4KZGlmZiAtLWdpdCBhL2ZzL25mcy9wYWdlbGlzdC5jIGIvZnMvbmZzL3BhZ2VsaXN0LmMKaW5kZXggZTI5NzU5My4uYTEyYzQ1YiAxMDA2NDQKLS0tIGEvZnMvbmZzL3BhZ2VsaXN0LmMKKysrIGIvZnMvbmZzL3BhZ2VsaXN0LmMKQEAgLTE3Niw2ICsxNzYsMTIgQEAKIAlrcmVmX3B1dCgmcmVxLT53Yl9rcmVmLCBuZnNfZnJlZV9yZXF1ZXN0KTsKIH0KIAorc3RhdGljIGludCBuZnNfd2FpdF9iaXRfdW5pbnRlcnJ1cHRpYmxlKHZvaWQgKndvcmQpCit7CisJaW9fc2NoZWR1bGUoKTsKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBuZnNfd2FpdF9vbl9yZXF1ZXN0IC0gV2FpdCBmb3IgYSByZXF1ZXN0IHRvIGNvbXBsZXRlLgogICogQHJlcTogcmVxdWVzdCB0byB3YWl0IHVwb24uCkBAIC0xODYsMTQgKzE5Miw5IEBACiBpbnQKIG5mc193YWl0X29uX3JlcXVlc3Qoc3RydWN0IG5mc19wYWdlICpyZXEpCiB7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoIXRlc3RfYml0KFBHX0JVU1ksICZyZXEtPndiX2ZsYWdzKSkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gb3V0X29mX2xpbmVfd2FpdF9vbl9iaXQoJnJlcS0+d2JfZmxhZ3MsIFBHX0JVU1ksCi0JCQluZnNfd2FpdF9iaXRfa2lsbGFibGUsIFRBU0tfS0lMTEFCTEUpOwotb3V0OgotCXJldHVybiByZXQ7CisJcmV0dXJuIHdhaXRfb25fYml0KCZyZXEtPndiX2ZsYWdzLCBQR19CVVNZLAorCQkJbmZzX3dhaXRfYml0X3VuaW50ZXJydXB0aWJsZSwKKwkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jCmluZGV4IGNlOTA3ZWYuLmYxYWZlZTQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zdXBlci5jCisrKyBiL2ZzL25mcy9zdXBlci5jCkBAIC0yNDMsNiArMjQzLDcgQEAKIHN0YXRpYyBpbnQgbmZzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzdHJ1Y3QgdmZzbW91bnQgKik7CiBzdGF0aWMgaW50IG5mc194ZGV2X2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKIAkJaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqcmF3X2RhdGEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKK3N0YXRpYyB2b2lkIG5mc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogc3RhdGljIHZvaWQgbmZzX2tpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogc3RhdGljIGludCBuZnNfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpyYXdfZGF0YSk7CiAKQEAgLTI2Niw2ICsyNjcsNyBAQAogCS5hbGxvY19pbm9kZQk9IG5mc19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQk9IG5mc19kZXN0cm95X2lub2RlLAogCS53cml0ZV9pbm9kZQk9IG5mc193cml0ZV9pbm9kZSwKKwkucHV0X3N1cGVyCT0gbmZzX3B1dF9zdXBlciwKIAkuc3RhdGZzCQk9IG5mc19zdGF0ZnMsCiAJLmNsZWFyX2lub2RlCT0gbmZzX2NsZWFyX2lub2RlLAogCS51bW91bnRfYmVnaW4JPSBuZnNfdW1vdW50X2JlZ2luLApAQCAtMzM1LDYgKzMzNyw3IEBACiAJLmFsbG9jX2lub2RlCT0gbmZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlCT0gbmZzX2Rlc3Ryb3lfaW5vZGUsCiAJLndyaXRlX2lub2RlCT0gbmZzX3dyaXRlX2lub2RlLAorCS5wdXRfc3VwZXIJPSBuZnNfcHV0X3N1cGVyLAogCS5zdGF0ZnMJCT0gbmZzX3N0YXRmcywKIAkuY2xlYXJfaW5vZGUJPSBuZnM0X2NsZWFyX2lub2RlLAogCS51bW91bnRfYmVnaW4JPSBuZnNfdW1vdW50X2JlZ2luLApAQCAtMjI1OCw2ICsyMjYxLDE3IEBACiB9CiAKIC8qCisgKiBFbnN1cmUgdGhhdCB3ZSB1bnJlZ2lzdGVyIHRoZSBiZGkgYmVmb3JlIGtpbGxfYW5vbl9zdXBlcgorICogcmVsZWFzZXMgdGhlIGRldmljZSBuYW1lCisgKi8KK3N0YXRpYyB2b2lkIG5mc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQoreworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0Iocyk7CisKKwliZGlfdW5yZWdpc3Rlcigmc2VydmVyLT5iYWNraW5nX2Rldl9pbmZvKTsKK30KKworLyoKICAqIERlc3Ryb3kgYW4gTkZTMi8zIHN1cGVyYmxvY2sKICAqLwogc3RhdGljIHZvaWQgbmZzX2tpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQpAQCAtMjI2NSw3ICsyMjc5LDYgQEAKIAlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gTkZTX1NCKHMpOwogCiAJa2lsbF9hbm9uX3N1cGVyKHMpOwotCWJkaV91bnJlZ2lzdGVyKCZzZXJ2ZXItPmJhY2tpbmdfZGV2X2luZm8pOwogCW5mc19mc2NhY2hlX3JlbGVhc2Vfc3VwZXJfY29va2llKHMpOwogCW5mc19mcmVlX3NlcnZlcihzZXJ2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL3N5c2N0bC5jIGIvZnMvbmZzL3N5c2N0bC5jCmluZGV4IDcwZTFmYmIuLmFkNGQyZTcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zeXNjdGwuYworKysgYi9mcy9uZnMvc3lzY3RsLmMKQEAgLTE1LDggKzE1LDEwIEBACiAKICNpbmNsdWRlICJjYWxsYmFjay5oIgogCisjaWZkZWYgQ09ORklHX05GU19WNAogc3RhdGljIGNvbnN0IGludCBuZnNfc2V0X3BvcnRfbWluID0gMDsKIHN0YXRpYyBjb25zdCBpbnQgbmZzX3NldF9wb3J0X21heCA9IDY1NTM1OworI2VuZGlmCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKm5mc19jYWxsYmFja19zeXNjdGxfdGFibGU7CiAKIHN0YXRpYyBjdGxfdGFibGUgbmZzX2NiX3N5c2N0bHNbXSA9IHsKZGlmZiAtLWdpdCBhL2ZzL25mcy93cml0ZS5jIGIvZnMvbmZzL3dyaXRlLmMKaW5kZXggZDE3MTY5Ni4uZDYzZDk2NCAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTEyMzMsNyArMTIzMyw3IEBACiAKIAogI2lmIGRlZmluZWQoQ09ORklHX05GU19WMykgfHwgZGVmaW5lZChDT05GSUdfTkZTX1Y0KQotdm9pZCBuZnNfY29tbWl0ZGF0YV9yZWxlYXNlKHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBuZnNfY29tbWl0ZGF0YV9yZWxlYXNlKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG5mc193cml0ZV9kYXRhICp3ZGF0YSA9IGRhdGE7CiAKQEAgLTE1NDEsNiArMTU0MSw3IEBACiAJCQlicmVhazsKIAkJfQogCQlyZXQgPSBuZnNfd2FpdF9vbl9yZXF1ZXN0KHJlcSk7CisJCW5mc19yZWxlYXNlX3JlcXVlc3QocmVxKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKIAl9CkBAIC0xNTk3LDggKzE1OTgsNyBAQAogCXN0cnVjdCBuZnNfcGFnZSAqcmVxOwogCWludCByZXQ7CiAKLQlpZiAoUGFnZUZzQ2FjaGUocGFnZSkpCi0JCW5mc19mc2NhY2hlX3JlbGVhc2VfcGFnZShwYWdlLCBHRlBfS0VSTkVMKTsKKwluZnNfZnNjYWNoZV9yZWxlYXNlX3BhZ2UocGFnZSwgR0ZQX0tFUk5FTCk7CiAKIAlyZXEgPSBuZnNfZmluZF9hbmRfbG9ja19yZXF1ZXN0KHBhZ2UpOwogCXJldCA9IFBUUl9FUlIocmVxKTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvZXhwb3J0LmMgYi9mcy9uZnNkL2V4cG9ydC5jCmluZGV4IGM0ODc4MTAuLmEwYzQwMTYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvZXhwb3J0LmMKKysrIGIvZnMvbmZzZC9leHBvcnQuYwpAQCAtMTMxNiwxOSArMTMxNiwxMSBAQAogCiBzdGF0aWMgc3RydWN0IHN2Y19leHBvcnQgKmZpbmRfZnNpZHplcm9fZXhwb3J0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiB7Ci0Jc3RydWN0IHN2Y19leHBvcnQgKmV4cDsKIAl1MzIgZnNpZHZbMl07CiAKIAlta19mc2lkKEZTSURfTlVNLCBmc2lkdiwgMCwgMCwgMCwgTlVMTCk7CiAKLQlleHAgPSBycXN0X2V4cF9maW5kKHJxc3RwLCBGU0lEX05VTSwgZnNpZHYpOwotCS8qCi0JICogV2Ugc2hvdWxkbid0IGhhdmUgYWNjZXB0aW5nIGFuIG5mc3Y0IHJlcXVlc3QgYXQgYWxsIGlmIHdlCi0JICogZG9uJ3QgaGF2ZSBhIHBzZXVkb2V4cG9ydCE6Ci0JICovCi0JaWYgKElTX0VSUihleHApICYmIFBUUl9FUlIoZXhwKSA9PSAtRU5PRU5UKQotCQlleHAgPSBFUlJfUFRSKC1FU0VSVkVSRkFVTFQpOwotCXJldHVybiBleHA7CisJcmV0dXJuIHJxc3RfZXhwX2ZpbmQocnFzdHAsIEZTSURfTlVNLCBmc2lkdik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuYwppbmRleCBjMTk0NzkzLi44NzE1ZDE5IDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5jCisrKyBiL2ZzL25mc2QvdmZzLmMKQEAgLTc1Miw2ICs3NTIsOCBAQAogCQkJICAgIGZsYWdzLCBjdXJyZW50X2NyZWQoKSk7CiAJaWYgKElTX0VSUigqZmlscCkpCiAJCWhvc3RfZXJyID0gUFRSX0VSUigqZmlscCk7CisJZWxzZQorCQlob3N0X2VyciA9IGltYV9maWxlX2NoZWNrKCpmaWxwLCBhY2Nlc3MpOwogb3V0X25mc2VycjoKIAllcnIgPSBuZnNlcnJubyhob3N0X2Vycik7CiBvdXQ6CkBAIC0yMTI3LDcgKzIxMjksNiBAQAogCSAqLwogCXBhdGgubW50ID0gZXhwLT5leF9wYXRoLm1udDsKIAlwYXRoLmRlbnRyeSA9IGRlbnRyeTsKLQllcnIgPSBpbWFfcGF0aF9jaGVjaygmcGF0aCwgYWNjICYgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpKTsKIG5mc2Rfb3V0OgogCXJldHVybiBlcnI/IG5mc2Vycm5vKGVycikgOiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NlZ21lbnQuYyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKaW5kZXggMTc1ODRjNS4uMTA1YjUwOCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ21lbnQuYworKysgYi9mcy9uaWxmczIvc2VnbWVudC5jCkBAIC0yODI5LDcgKzI4MjksNyBAQAogCQl8fCBzY2ktPnNjX3NlcV9yZXF1ZXN0ICE9IHNjaS0+c2Nfc2VxX2RvbmUpOwogCXNwaW5fdW5sb2NrKCZzY2ktPnNjX3N0YXRlX2xvY2spOwogCi0JaWYgKGZsYWcgfHwgbmlsZnNfc2VnY3Rvcl9jb25maXJtKHNjaSkpCisJaWYgKGZsYWcgfHwgIW5pbGZzX3NlZ2N0b3JfY29uZmlybShzY2kpKQogCQluaWxmc19zZWdjdG9yX3dyaXRlX291dChzY2kpOwogCiAJV0FSTl9PTighbGlzdF9lbXB0eSgmc2NpLT5zY19jb3BpZWRfYnVmZmVycykpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYW9wcy5jIGIvZnMvb2NmczIvYW9wcy5jCmluZGV4IDNkYWU0YTEuLjdlOWRmMTEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FvcHMuYworKysgYi9mcy9vY2ZzMi9hb3BzLmMKQEAgLTU5OSw3ICs1OTksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIAorLyoKICAqIG9jZnMyX2Rpb19lbmRfaW8gaXMgY2FsbGVkIGJ5IHRoZSBkaW8gY29yZSB3aGVuIGEgZGlvIGlzIGZpbmlzaGVkLiAgV2UncmUKICAqIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBhaW8vZGlvIGNhc2UuICBMaWtlIHRoZSBjb3JlIHVzZXMKICAqIGlfYWxsb2Nfc2VtLCB3ZSB1c2UgdGhlIHJ3X2xvY2sgRExNIGxvY2sgdG8gcHJvdGVjdCBpbyBvbiBvbmUgbm9kZSBmcm9tCkBAIC02NzAsNyArNjcwLDcgQEAKIAogCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JT19ub19sb2NraW5nKHJ3LCBpb2NiLCBpbm9kZSwKIAkJCQkJICAgIGlub2RlLT5pX3NiLT5zX2JkZXYsIGlvdiwgb2Zmc2V0LAotCQkJCQkgICAgbnJfc2VncywgCisJCQkJCSAgICBucl9zZWdzLAogCQkJCQkgICAgb2NmczJfZGlyZWN0X0lPX2dldF9ibG9ja3MsCiAJCQkJCSAgICBvY2ZzMl9kaW9fZW5kX2lvKTsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYyBiL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMKaW5kZXggZDQzZDM0YS4uMjFjODA4ZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYworKysgYi9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jCkBAIC0zNjgsNyArMzY4LDcgQEAKIAl9CiAJb2NmczJfbWV0YWRhdGFfY2FjaGVfaW9fdW5sb2NrKGNpKTsKIAotCW1sb2coTUxfQkhfSU8sICJibG9jaz0oJWxsdSksIG5yPSglZCksIGNhY2hlZD0lcywgZmxhZ3M9MHgleFxuIiwgCisJbWxvZyhNTF9CSF9JTywgImJsb2NrPSglbGx1KSwgbnI9KCVkKSwgY2FjaGVkPSVzLCBmbGFncz0weCV4XG4iLAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jaywgbnIsCiAJICAgICAoKGZsYWdzICYgT0NGUzJfQkhfSUdOT1JFX0NBQ0hFKSB8fCBpZ25vcmVfY2FjaGUpID8gIm5vIiA6ICJ5ZXMiLAogCSAgICAgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKaW5kZXggZWRhNWI4Yi4uNWM5ODkwMCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCkBAIC03OCw3ICs3OCw3IEBACiAKIHVuc2lnbmVkIGludCBvMmhiX2RlYWRfdGhyZXNob2xkID0gTzJIQl9ERUZBVUxUX0RFQURfVEhSRVNIT0xEOwogCi0vKiBPbmx5IHNldHMgYSBuZXcgdGhyZXNob2xkIGlmIHRoZXJlIGFyZSBubyBhY3RpdmUgcmVnaW9ucy4gCisvKiBPbmx5IHNldHMgYSBuZXcgdGhyZXNob2xkIGlmIHRoZXJlIGFyZSBubyBhY3RpdmUgcmVnaW9ucy4KICAqCiAgKiBObyBsb2NraW5nIG9yIG90aGVyd2lzZSBpbnRlcmVzdGluZyBjb2RlIGlzIHJlcXVpcmVkIGZvciByZWFkaW5nCiAgKiBvMmhiX2RlYWRfdGhyZXNob2xkIGFzIGl0IGNhbid0IGNoYW5nZSBvbmNlIHJlZ2lvbnMgYXJlIGFjdGl2ZSBhbmQKQEAgLTE3MCw3ICsxNzAsNyBAQAogCiAJbWxvZyhNTF9FUlJPUiwgIkhlYXJ0YmVhdCB3cml0ZSB0aW1lb3V0IHRvIGRldmljZSAlcyBhZnRlciAldSAiCiAJICAgICAibWlsbGlzZWNvbmRzXG4iLCByZWctPmhyX2Rldl9uYW1lLAotCSAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gcmVnLT5ocl9sYXN0X3RpbWVvdXRfc3RhcnQpKTsgCisJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSByZWctPmhyX2xhc3RfdGltZW91dF9zdGFydCkpOwogCW8ycXVvX2Rpc2tfdGltZW91dCgpOwogfQogCkBAIC02MjQsNyArNjI0LDcgQEAKIAkgICAgICJzZXEgJWxsdSBsYXN0ICVsbHUgY2hhbmdlZCAldSBlcXVhbCAldVxuIiwKIAkgICAgIHNsb3QtPmRzX25vZGVfbnVtLCAobG9uZyBsb25nKXNsb3QtPmRzX2xhc3RfZ2VuZXJhdGlvbiwKIAkgICAgIGxlMzJfdG9fY3B1KGhiX2Jsb2NrLT5oYl9ja3N1bSksCi0JICAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KGhiX2Jsb2NrLT5oYl9zZXEpLCAKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoaGJfYmxvY2stPmhiX3NlcSksCiAJICAgICAodW5zaWduZWQgbG9uZyBsb25nKXNsb3QtPmRzX2xhc3RfdGltZSwgc2xvdC0+ZHNfY2hhbmdlZF9zYW1wbGVzLAogCSAgICAgc2xvdC0+ZHNfZXF1YWxfc2FtcGxlcyk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jCmluZGV4IDMzNGYyMzEuLmQ4ZDBjNjUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci90Y3AuYwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJfQogCiAJaWYgKHdhc192YWxpZCAmJiAhdmFsaWQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAibzJuZXQ6IG5vIGxvbmdlciBjb25uZWN0ZWQgdG8gIgorCQlwcmludGsoS0VSTl9OT1RJQ0UgIm8ybmV0OiBubyBsb25nZXIgY29ubmVjdGVkIHRvICIKIAkJICAgICAgIFNDX05PREVGX0ZNVCAiXG4iLCBTQ19OT0RFRl9BUkdTKG9sZF9zYykpOwogCQlvMm5ldF9jb21wbGV0ZV9ub2Rlc19uc3cobm4pOwogCX0KQEAgLTQ5Myw3ICs0OTMsNyBAQAogCWlmICghd2FzX3ZhbGlkICYmIHZhbGlkKSB7CiAJCW8ycXVvX2Nvbm5fdXAobzJuZXRfbnVtX2Zyb21fbm4obm4pKTsKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmbm4tPm5uX2Nvbm5lY3RfZXhwaXJlZCk7Ci0JCXByaW50ayhLRVJOX0lORk8gIm8ybmV0OiAlcyAiIFNDX05PREVGX0ZNVCAiXG4iLAorCQlwcmludGsoS0VSTl9OT1RJQ0UgIm8ybmV0OiAlcyAiIFNDX05PREVGX0ZNVCAiXG4iLAogCQkgICAgICAgbzJubV90aGlzX25vZGUoKSA+IHNjLT5zY19ub2RlLT5uZF9udW0gPwogCQkgICAgICAgCQkiY29ubmVjdGVkIHRvIiA6ICJhY2NlcHRlZCBjb25uZWN0aW9uIGZyb20iLAogCQkgICAgICAgU0NfTk9ERUZfQVJHUyhzYykpOwpAQCAtOTMwLDcgKzkzMCw3IEBACiAJCQljb25kX3Jlc2NoZWQoKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCW1sb2coTUxfRVJST1IsICJzZW5kcGFnZSBvZiBzaXplICV6dSB0byAiIFNDX05PREVGX0ZNVCAKKwkJbWxvZyhNTF9FUlJPUiwgInNlbmRwYWdlIG9mIHNpemUgJXp1IHRvICIgU0NfTk9ERUZfRk1UCiAJCSAgICAgIiBmYWlsZWQgd2l0aCAlemRcbiIsIHNpemUsIFNDX05PREVGX0FSR1Moc2MpLCByZXQpOwogCQlvMm5ldF9lbnN1cmVfc2h1dGRvd24obm4sIHNjLCAwKTsKIAkJYnJlYWs7CkBAIC0xNDc2LDE0ICsxNDc2LDE0IEBACiAKIAlkb19nZXR0aW1lb2ZkYXkoJm5vdyk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJvMm5ldDogY29ubmVjdGlvbiB0byAiIFNDX05PREVGX0ZNVCAiIGhhcyBiZWVuIGlkbGUgZm9yICV1LiV1ICIKKwlwcmludGsoS0VSTl9OT1RJQ0UgIm8ybmV0OiBjb25uZWN0aW9uIHRvICIgU0NfTk9ERUZfRk1UICIgaGFzIGJlZW4gaWRsZSBmb3IgJXUuJXUgIgogCSAgICAgInNlY29uZHMsIHNodXR0aW5nIGl0IGRvd24uXG4iLCBTQ19OT0RFRl9BUkdTKHNjKSwKIAkJICAgICBvMm5ldF9pZGxlX3RpbWVvdXQoKSAvIDEwMDAsCiAJCSAgICAgbzJuZXRfaWRsZV90aW1lb3V0KCkgJSAxMDAwKTsKIAltbG9nKE1MX05PVElDRSwgImhlcmUgYXJlIHNvbWUgdGltZXMgdGhhdCBtaWdodCBoZWxwIGRlYnVnIHRoZSAiCiAJICAgICAic2l0dWF0aW9uOiAodG1yICVsZC4lbGQgbm93ICVsZC4lbGQgZHIgJWxkLiVsZCBhZHYgIgogCSAgICAgIiVsZC4lbGQ6JWxkLiVsZCBmdW5jICglMDh4OiV1KSAlbGQuJWxkOiVsZC4lbGQpXG4iLAotCSAgICAgc2MtPnNjX3R2X3RpbWVyLnR2X3NlYywgKGxvbmcpIHNjLT5zY190dl90aW1lci50dl91c2VjLCAKKwkgICAgIHNjLT5zY190dl90aW1lci50dl9zZWMsIChsb25nKSBzYy0+c2NfdHZfdGltZXIudHZfdXNlYywKIAkgICAgIG5vdy50dl9zZWMsIChsb25nKSBub3cudHZfdXNlYywKIAkgICAgIHNjLT5zY190dl9kYXRhX3JlYWR5LnR2X3NlYywgKGxvbmcpIHNjLT5zY190dl9kYXRhX3JlYWR5LnR2X3VzZWMsCiAJICAgICBzYy0+c2NfdHZfYWR2YW5jZV9zdGFydC50dl9zZWMsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcF9pbnRlcm5hbC5oIGIvZnMvb2NmczIvY2x1c3Rlci90Y3BfaW50ZXJuYWwuaAppbmRleCA4ZDU4Y2ZlLi45NmZhN2ViIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcF9pbnRlcm5hbC5oCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvdGNwX2ludGVybmFsLmgKQEAgLTMyLDEwICszMiwxMCBAQAogICogb24gdGhlaXIgbnVtYmVyICovCiAjZGVmaW5lIE8yTkVUX1FVT1JVTV9ERUxBWV9NUwkoKG8yaGJfZGVhZF90aHJlc2hvbGQgKyAyKSAqIE8ySEJfUkVHSU9OX1RJTUVPVVRfTVMpCiAKLS8qIAorLyoKICAqIFRoaXMgdmVyc2lvbiBudW1iZXIgcmVwcmVzZW50cyBxdWl0ZSBhIGxvdCwgdW5mb3J0dW5hdGVseS4gIEl0IG5vdAogICogb25seSByZXByZXNlbnRzIHRoZSByYXcgbmV0d29yayBtZXNzYWdlIHByb3RvY29sIG9uIHRoZSB3aXJlIGJ1dCBhbHNvCi0gKiBsb2NraW5nIHNlbWFudGljcyBvZiB0aGUgZmlsZSBzeXN0ZW0gdXNpbmcgdGhlIHByb3RvY29sLiAgSXQgc2hvdWxkIAorICogbG9ja2luZyBzZW1hbnRpY3Mgb2YgdGhlIGZpbGUgc3lzdGVtIHVzaW5nIHRoZSBwcm90b2NvbC4gIEl0IHNob3VsZAogICogYmUgc29tZXdoZXJlIGVsc2UsIEknbSBzdXJlLCBidXQgcmlnaHQgbm93IGl0IGlzbid0LgogICoKICAqIFdpdGggdmVyc2lvbiAxMSwgd2Ugc2VwYXJhdGUgb3V0IHRoZSBmaWxlc3lzdGVtIGxvY2tpbmcgcG9ydGlvbi4gIFRoZQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWFwaS5oIGIvZnMvb2NmczIvZGxtL2RsbWFwaS5oCmluZGV4IGI1Nzg2YTcuLjNjZmExMTQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1hcGkuaAorKysgYi9mcy9vY2ZzMi9kbG0vZGxtYXBpLmgKQEAgLTk1LDcgKzk1LDcgQEAKIAkJbWxvZyhNTF9FUlJPUiwgImRsbSBzdGF0dXMgPSAlc1xuIiwgZGxtX2Vycm5hbWUoKHN0KSkpOwlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIERMTV9MS1NCX1VOVVNFRDEgICAgICAgICAgIDB4MDEgIAorI2RlZmluZSBETE1fTEtTQl9VTlVTRUQxICAgICAgICAgICAweDAxCiAjZGVmaW5lIERMTV9MS1NCX1BVVF9MVkIgICAgICAgICAgIDB4MDIKICNkZWZpbmUgRExNX0xLU0JfR0VUX0xWQiAgICAgICAgICAgMHgwNAogI2RlZmluZSBETE1fTEtTQl9VTlVTRUQyICAgICAgICAgICAweDA4CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtYXN0LmMgYi9mcy9vY2ZzMi9kbG0vZGxtYXN0LmMKaW5kZXggMDFjZjhjYy4uZGNjYzQzOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWFzdC5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1hc3QuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJCWRsbV9sb2NrX3B1dChsb2NrKTsKIAkJLyogZnJlZSB1cCB0aGUgcmVzZXJ2ZWQgYmFzdCB0aGF0IHdlIGFyZSBjYW5jZWxsaW5nLgogCQkgKiBndWFyYW50ZWVkIHRoYXQgdGhpcyB3aWxsIG5vdCBiZSB0aGUgbGFzdCByZXNlcnZlZAotCQkgKiBhc3QgYmVjYXVzZSAqYm90aCogYW4gYXN0IGFuZCBhIGJhc3Qgd2VyZSByZXNlcnZlZCAKKwkJICogYXN0IGJlY2F1c2UgKmJvdGgqIGFuIGFzdCBhbmQgYSBiYXN0IHdlcmUgcmVzZXJ2ZWQKIAkJICogdG8gZ2V0IHRvIHRoaXMgcG9pbnQuICB0aGUgcmVzLT5zcGlubG9jayB3aWxsIG5vdCBiZQogCQkgKiB0YWtlbiBoZXJlICovCiAJCWRsbV9sb2NrcmVzX3JlbGVhc2VfYXN0KGRsbSwgcmVzKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1jb252ZXJ0LmMgYi9mcy9vY2ZzMi9kbG0vZGxtY29udmVydC5jCmluZGV4IGNhOTZiY2UuLmYyODNiY2UgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1jb252ZXJ0LmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWNvbnZlcnQuYwpAQCAtMzk2LDcgKzM5Niw3IEBACiAJCQkvKiBpbnN0ZWFkIG9mIGxvZ2dpbmcgdGhlIHNhbWUgbmV0d29yayBlcnJvciBvdmVyCiAJCQkgKiBhbmQgb3Zlciwgc2xlZXAgaGVyZSBhbmQgd2FpdCBmb3IgdGhlIGhlYXJ0YmVhdAogCQkJICogdG8gbm90aWNlIHRoZSBub2RlIGlzIGRlYWQuICB0aW1lcyBvdXQgYWZ0ZXIgNXMuICovCi0JCQlkbG1fd2FpdF9mb3Jfbm9kZV9kZWF0aChkbG0sIHJlcy0+b3duZXIsIAorCQkJZGxtX3dhaXRfZm9yX25vZGVfZGVhdGgoZGxtLCByZXMtPm93bmVyLAogCQkJCQkJRExNX05PREVfREVBVEhfV0FJVF9NQVgpOwogCQkJcmV0ID0gRExNX1JFQ09WRVJJTkc7CiAJCQltbG9nKDAsICJub2RlICV1IGRpZWQgc28gcmV0dXJuaW5nIERMTV9SRUNPVkVSSU5HICIKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jIGIvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKaW5kZXggNDJiMGJhZC4uMGNkMjRjZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCWFzc2VydF9zcGluX2xvY2tlZCgmcmVzLT5zcGlubG9jayk7CiAKIAlzdHJpbmdpZnlfbG9ja25hbWUocmVzLT5sb2NrbmFtZS5uYW1lLCByZXMtPmxvY2tuYW1lLmxlbiwKLQkJCSAgIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwkJCSAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCXByaW50aygibG9ja3JlczogJXMsIG93bmVyPSV1LCBzdGF0ZT0ldVxuIiwKIAkgICAgICAgYnVmLCByZXMtPm93bmVyLCByZXMtPnN0YXRlKTsKIAlwcmludGsoIiAgbGFzdCB1c2VkOiAlbHUsIHJlZmNudDogJXUsIG9uIHB1cmdlIGxpc3Q6ICVzXG4iLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jIGIvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCmluZGV4IDAzMzQwMDAuLjk4OGM5MDUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKQEAgLTgxNiw3ICs4MTYsNyBAQAogCX0KIAogCS8qIE9uY2UgdGhlIGRsbSBjdHh0IGlzIG1hcmtlZCBhcyBsZWF2aW5nIHRoZW4gd2UgZG9uJ3Qgd2FudAotCSAqIHRvIGJlIHB1dCBpbiBzb21lb25lJ3MgZG9tYWluIG1hcC4gCisJICogdG8gYmUgcHV0IGluIHNvbWVvbmUncyBkb21haW4gbWFwLgogCSAqIEFsc28sIGV4cGxpY2l0bHkgZGlzYWxsb3cgam9pbmluZyBhdCBjZXJ0YWluIHRyb3VibGVzb21lCiAJICogdGltZXMgKGllLiBkdXJpbmcgcmVjb3ZlcnkpLiAqLwogCWlmIChkbG0gJiYgZGxtLT5kbG1fc3RhdGUgIT0gRExNX0NUWFRfTEVBVklORykgewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWxvY2suYyBiL2ZzL29jZnMyL2RsbS9kbG1sb2NrLmMKaW5kZXggNDM3Njk4ZS4uNzMzMzM3NzcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1sb2NrLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWxvY2suYwpAQCAtMjY5LDcgKzI2OSw3IEBACiAJCX0KIAkJZGxtX3JldmVydF9wZW5kaW5nX2xvY2socmVzLCBsb2NrKTsKIAkJZGxtX2xvY2tfcHV0KGxvY2spOwotCX0gZWxzZSBpZiAoZGxtX2lzX3JlY292ZXJ5X2xvY2socmVzLT5sb2NrbmFtZS5uYW1lLCAKKwl9IGVsc2UgaWYgKGRsbV9pc19yZWNvdmVyeV9sb2NrKHJlcy0+bG9ja25hbWUubmFtZSwKIAkJCQkJcmVzLT5sb2NrbmFtZS5sZW4pKSB7CiAJCS8qIHNwZWNpYWwgY2FzZSBmb3IgdGhlICRSRUNPVkVSWSBsb2NrLgogCQkgKiB0aGVyZSB3aWxsIG5ldmVyIGJlIGFuIEFTVCBkZWxpdmVyZWQgdG8gcHV0CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMgYi9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKaW5kZXggMDNjY2Y5YS4uYTY1OTYwNiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYwpAQCAtMzY2LDcgKzM2Niw3IEBACiAJc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlOwogCiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZkbG0tPnNwaW5sb2NrKTsKLQkKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkobWxlLCAmZGxtLT5tbGVfaGJfZXZlbnRzLCBoYl9ldmVudHMpIHsKIAkJaWYgKG5vZGVfdXApCiAJCQlkbG1fbWxlX25vZGVfdXAoZGxtLCBtbGUsIE5VTEwsIGlkeCk7CkBAIC04MzMsNyArODMzLDcgQEAKIAkJX19kbG1faW5zZXJ0X21sZShkbG0sIG1sZSk7CiAKIAkJLyogc3RpbGwgaG9sZGluZyB0aGUgZGxtIHNwaW5sb2NrLCBjaGVjayB0aGUgcmVjb3ZlcnkgbWFwCi0JCSAqIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vZGVzIHRoYXQgc3RpbGwgbmVlZCB0byBiZSAKKwkJICogdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9kZXMgdGhhdCBzdGlsbCBuZWVkIHRvIGJlCiAJCSAqIGNvbnNpZGVyZWQuICB0aGVzZSB3aWxsIG5vdCBhcHBlYXIgaW4gdGhlIG1sZSBub2RlbWFwCiAJCSAqIGJ1dCB0aGV5IG1pZ2h0IG93biB0aGlzIGxvY2tyZXMuICB3YWl0IG9uIHRoZW0uICovCiAJCWJpdCA9IGZpbmRfbmV4dF9iaXQoZGxtLT5yZWNvdmVyeV9tYXAsIE8yTk1fTUFYX05PREVTLCAwKTsKQEAgLTg4Myw3ICs4ODMsNyBAQAogCQkJCW1zbGVlcCg1MDApOwogCQkJfQogCQkJY29udGludWU7Ci0JCX0gCisJCX0KIAogCQlkbG1fa2lja19yZWNvdmVyeV90aHJlYWQoZGxtKTsKIAkJbXNsZWVwKDEwMDApOwpAQCAtOTM5LDggKzkzOSw4IEBACiAJCSAgICAgcmVzLT5sb2NrbmFtZS5uYW1lLCBibG9ja2VkKTsKIAkJaWYgKCsrdHJpZXMgPiAyMCkgewogCQkJbWxvZyhNTF9FUlJPUiwgIiVzOiUuKnM6IHNwaW5uaW5nIG9uICIKLQkJCSAgICAgImRsbV93YWl0X2Zvcl9sb2NrX21hc3RlcnksIGJsb2NrZWQ9JWRcbiIsIAotCQkJICAgICBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLCAKKwkJCSAgICAgImRsbV93YWl0X2Zvcl9sb2NrX21hc3RlcnksIGJsb2NrZWQ9JWRcbiIsCisJCQkgICAgIGRsbS0+bmFtZSwgcmVzLT5sb2NrbmFtZS5sZW4sCiAJCQkgICAgIHJlcy0+bG9ja25hbWUubmFtZSwgYmxvY2tlZCk7CiAJCQlkbG1fcHJpbnRfb25lX2xvY2tfcmVzb3VyY2UocmVzKTsKIAkJCWRsbV9wcmludF9vbmVfbWxlKG1sZSk7CkBAIC0xMDI5LDcgKzEwMjksNyBAQAogCQlyZXQgPSBkbG1fcmVzdGFydF9sb2NrX21hc3RlcnkoZGxtLCByZXMsIG1sZSwgKmJsb2NrZWQpOwogCQliID0gKG1sZS0+dHlwZSA9PSBETE1fTUxFX0JMT0NLKTsKIAkJaWYgKCgqYmxvY2tlZCAmJiAhYikgfHwgKCEqYmxvY2tlZCAmJiBiKSkgewotCQkJbWxvZygwLCAiJXM6JS4qczogc3RhdHVzIGNoYW5nZTogb2xkPSVkIG5ldz0lZFxuIiwgCisJCQltbG9nKDAsICIlczolLipzOiBzdGF0dXMgY2hhbmdlOiBvbGQ9JWQgbmV3PSVkXG4iLAogCQkJICAgICBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUsCiAJCQkgICAgICpibG9ja2VkLCBiKTsKIAkJCSpibG9ja2VkID0gYjsKQEAgLTE2MDIsNyArMTYwMiw3IEBACiAJCX0KIAkJbWxvZygwLCAiJXUgaXMgdGhlIG93bmVyIG9mICUuKnMsIGNsZWFuaW5nIGV2ZXJ5b25lIGVsc2VcbiIsCiAJCQkgICAgIGRsbS0+bm9kZV9udW0sIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUpOwotCQlyZXQgPSBkbG1fZGlzcGF0Y2hfYXNzZXJ0X21hc3RlcihkbG0sIHJlcywgMCwgcmVxdWVzdC0+bm9kZV9pZHgsIAorCQlyZXQgPSBkbG1fZGlzcGF0Y2hfYXNzZXJ0X21hc3RlcihkbG0sIHJlcywgMCwgcmVxdWVzdC0+bm9kZV9pZHgsCiAJCQkJCQkgRExNX0FTU0VSVF9NQVNURVJfTUxFX0NMRUFOVVApOwogCQlpZiAocmV0IDwgMCkgewogCQkJbWxvZyhNTF9FUlJPUiwgImZhaWxlZCB0byBkaXNwYXRjaCBhc3NlcnQgbWFzdGVyIHdvcmtcbiIpOwpAQCAtMTcwMSw3ICsxNzAxLDcgQEAKIAogCQlpZiAociAmIERMTV9BU1NFUlRfUkVTUE9OU0VfUkVBU1NFUlQpIHsKIAkJCW1sb2coMCwgIiUuKnM6IG5vZGUgJXUgY3JlYXRlIG1sZXMgb24gb3RoZXIgIgotCQkJICAgICAibm9kZXMgYW5kIHJlcXVlc3RzIGEgcmUtYXNzZXJ0XG4iLCAKKwkJCSAgICAgIm5vZGVzIGFuZCByZXF1ZXN0cyBhIHJlLWFzc2VydFxuIiwKIAkJCSAgICAgbmFtZWxlbiwgbG9ja25hbWUsIHRvKTsKIAkJCXJlYXNzZXJ0ID0gMTsKIAkJfQpAQCAtMTgxMiw3ICsxODEyLDcgQEAKIAkJCQlzcGluX3VubG9jaygmZGxtLT5tYXN0ZXJfbG9jayk7CiAJCQkJc3Bpbl91bmxvY2soJmRsbS0+c3BpbmxvY2spOwogCQkJCWdvdG8gZG9uZTsKLQkJCX0JCisJCQl9CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2soJmRsbS0+bWFzdGVyX2xvY2spOwpAQCAtMTg4Myw3ICsxODgzLDcgQEAKIAkJaW50IGV4dHJhX3JlZiA9IDA7CiAJCWludCBubiA9IC0xOwogCQlpbnQgcnIsIGVyciA9IDA7Ci0JCQorCiAJCXNwaW5fbG9jaygmbWxlLT5zcGlubG9jayk7CiAJCWlmIChtbGUtPnR5cGUgPT0gRExNX01MRV9CTE9DSyB8fCBtbGUtPnR5cGUgPT0gRExNX01MRV9NSUdSQVRJT04pCiAJCQlleHRyYV9yZWYgPSAxOwpAQCAtMTg5MSw3ICsxODkxLDcgQEAKIAkJCS8qIE1BU1RFUiBtbGU6IGlmIGFueSBiaXRzIHNldCBpbiB0aGUgcmVzcG9uc2UgbWFwCiAJCQkgKiB0aGVuIHRoZSBjYWxsaW5nIG5vZGUgbmVlZHMgdG8gcmUtYXNzZXJ0IHRvIGNsZWFyCiAJCQkgKiB1cCBub2RlcyB0aGF0IHRoaXMgbm9kZSBjb250YWN0ZWQgKi8KLQkJCXdoaWxlICgobm4gPSBmaW5kX25leHRfYml0IChtbGUtPnJlc3BvbnNlX21hcCwgTzJOTV9NQVhfTk9ERVMsIAorCQkJd2hpbGUgKChubiA9IGZpbmRfbmV4dF9iaXQgKG1sZS0+cmVzcG9uc2VfbWFwLCBPMk5NX01BWF9OT0RFUywKIAkJCQkJCSAgICBubisxKSkgPCBPMk5NX01BWF9OT0RFUykgewogCQkJCWlmIChubiAhPSBkbG0tPm5vZGVfbnVtICYmIG5uICE9IGFzc2VydC0+bm9kZV9pZHgpCiAJCQkJCW1hc3Rlcl9yZXF1ZXN0ID0gMTsKQEAgLTIwMDIsNyArMjAwMiw3IEBACiAJX19kbG1fcHJpbnRfb25lX2xvY2tfcmVzb3VyY2UocmVzKTsKIAlzcGluX3VubG9jaygmcmVzLT5zcGlubG9jayk7CiAJc3Bpbl91bmxvY2soJmRsbS0+c3BpbmxvY2spOwotCSpyZXRfZGF0YSA9ICh2b2lkICopcmVzOyAKKwkqcmV0X2RhdGEgPSAodm9pZCAqKXJlczsKIAlkbG1fcHV0KGRsbSk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMDQwLDEwICsyMDQwLDEwIEBACiAJaXRlbS0+dS5hbS5yZXF1ZXN0X2Zyb20gPSByZXF1ZXN0X2Zyb207CiAJaXRlbS0+dS5hbS5mbGFncyA9IGZsYWdzOwogCi0JaWYgKGlnbm9yZV9oaWdoZXIpIAotCQltbG9nKDAsICJJR05PUkUgSElHSEVSOiAlLipzXG4iLCByZXMtPmxvY2tuYW1lLmxlbiwgCisJaWYgKGlnbm9yZV9oaWdoZXIpCisJCW1sb2coMCwgIklHTk9SRSBISUdIRVI6ICUuKnNcbiIsIHJlcy0+bG9ja25hbWUubGVuLAogCQkgICAgIHJlcy0+bG9ja25hbWUubmFtZSk7Ci0JCQorCiAJc3Bpbl9sb2NrKCZkbG0tPndvcmtfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmaXRlbS0+bGlzdCwgJmRsbS0+d29ya19saXN0KTsKIAlzcGluX3VubG9jaygmZGxtLT53b3JrX2xvY2spOwpAQCAtMjEzMyw3ICsyMTMzLDcgQEAKICAqIHRoaW5rIHRoYXQgJFJFQ09WRVJZIGlzIGN1cnJlbnRseSBtYXN0ZXJlZCBieSBhIGRlYWQgbm9kZS4gIElmIHNvLAogICogd2Ugd2FpdCBhIHNob3J0IHRpbWUgdG8gYWxsb3cgdGhhdCBub2RlIHRvIGdldCBub3RpZmllZCBieSBpdHMgb3duCiAgKiBoZWFydGJlYXQgc3RhY2ssIHRoZW4gY2hlY2sgYWdhaW4uICBBbGwgJFJFQ09WRVJZIGxvY2sgcmVzb3VyY2VzCi0gKiBtYXN0ZXJlZCBieSBkZWFkIG5vZGVzIGFyZSBwdXJnZWQgd2hlbiB0aGUgaGVhcmJlYXQgY2FsbGJhY2sgaXMgCisgKiBtYXN0ZXJlZCBieSBkZWFkIG5vZGVzIGFyZSBwdXJnZWQgd2hlbiB0aGUgaGVhcmJlYXQgY2FsbGJhY2sgaXMKICAqIGZpcmVkLCBzbyB3ZSBjYW4ga25vdyBmb3Igc3VyZSB0aGF0IGl0IGlzIHNhZmUgdG8gY29udGludWUgb25jZQogICogdGhlIG5vZGUgcmV0dXJucyBhIGxpdmUgbm9kZSBvciBubyBub2RlLiAgKi8KIHN0YXRpYyBpbnQgZGxtX3ByZV9tYXN0ZXJfcmVjb19sb2NrcmVzKHN0cnVjdCBkbG1fY3R4dCAqZGxtLApAQCAtMjE3NCw3ICsyMTc0LDcgQEAKIAkJCQlyZXQgPSAtRUFHQUlOOwogCQkJfQogCQkJc3Bpbl91bmxvY2soJmRsbS0+c3BpbmxvY2spOwotCQkJbWxvZygwLCAiJXM6IHJlY28gbG9jayBtYXN0ZXIgaXMgJXVcbiIsIGRsbS0+bmFtZSwgCisJCQltbG9nKDAsICIlczogcmVjbyBsb2NrIG1hc3RlciBpcyAldVxuIiwgZGxtLT5uYW1lLAogCQkJICAgICBtYXN0ZXIpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI2MDIsNyArMjYwMiw3IEBACiAKIAkJCW1sb2coMCwgIiVzOiUuKnM6IHRpbWVkIG91dCBkdXJpbmcgbWlncmF0aW9uXG4iLAogCQkJICAgICBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUpOwotCQkJLyogYXZvaWQgaGFuZyBkdXJpbmcgc2h1dGRvd24gd2hlbiBtaWdyYXRpbmcgbG9ja3JlcyAKKwkJCS8qIGF2b2lkIGhhbmcgZHVyaW5nIHNodXRkb3duIHdoZW4gbWlncmF0aW5nIGxvY2tyZXMKIAkJCSAqIHRvIGEgbm9kZSB3aGljaCBhbHNvIGdvZXMgZG93biAqLwogCQkJaWYgKGRsbV9pc19ub2RlX2RlYWQoZGxtLCB0YXJnZXQpKSB7CiAJCQkJbWxvZygwLCAiJXM6JS4qczogZXhwZWN0ZWQgbWlncmF0aW9uICIKQEAgLTI3MzgsNyArMjczOCw3IEBACiAJY2FuX3Byb2NlZWQgPSAhIShyZXMtPnN0YXRlICYgRExNX0xPQ0tfUkVTX01JR1JBVElORyk7CiAJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwogCi0JLyogdGFyZ2V0IGhhcyBkaWVkLCBzbyBtYWtlIHRoZSBjYWxsZXIgYnJlYWsgb3V0IG9mIHRoZSAKKwkvKiB0YXJnZXQgaGFzIGRpZWQsIHNvIG1ha2UgdGhlIGNhbGxlciBicmVhayBvdXQgb2YgdGhlCiAJICogd2FpdF9ldmVudCwgYnV0IGNhbGxlciBtdXN0IHJlY2hlY2sgdGhlIGRvbWFpbl9tYXAgKi8KIAlzcGluX2xvY2soJmRsbS0+c3BpbmxvY2spOwogCWlmICghdGVzdF9iaXQobWlnX3RhcmdldCwgZGxtLT5kb21haW5fbWFwKSkKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jIGIvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMKaW5kZXggMmY5ZTRlMS4uMzQ0YmNmOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMKQEAgLTEwNTAsNyArMTA1MCw3IEBACiAJCQkJaWYgKGxvY2stPm1sLm5vZGUgPT0gZGVhZF9ub2RlKSB7CiAJCQkJCW1sb2coMCwgIkFIQSEgdGhlcmUgd2FzICIKIAkJCQkJICAgICAiYSAkUkVDT1ZFUlkgbG9jayBmb3IgZGVhZCAiCi0JCQkJCSAgICAgIm5vZGUgJXUgKCVzKSFcbiIsIAorCQkJCQkgICAgICJub2RlICV1ICglcykhXG4iLAogCQkJCQkgICAgIGRlYWRfbm9kZSwgZGxtLT5uYW1lKTsKIAkJCQkJbGlzdF9kZWxfaW5pdCgmbG9jay0+bGlzdCk7CiAJCQkJCWRsbV9sb2NrX3B1dChsb2NrKTsKQEAgLTExNjQsNiArMTE2NCwzOSBAQAogCW1yZXMtPm1hc3RlciA9IG1hc3RlcjsKIH0KIAorc3RhdGljIHZvaWQgZGxtX3ByZXBhcmVfbHZiX2Zvcl9taWdyYXRpb24oc3RydWN0IGRsbV9sb2NrICpsb2NrLAorCQkJCQkgIHN0cnVjdCBkbG1fbWlncmF0YWJsZV9sb2NrcmVzICptcmVzLAorCQkJCQkgIGludCBxdWV1ZSkKK3sKKwlpZiAoIWxvY2stPmxrc2IpCisJICAgICAgIHJldHVybjsKKworCS8qIElnbm9yZSBsdmIgaW4gYWxsIGxvY2tzIGluIHRoZSBibG9ja2VkIGxpc3QgKi8KKwlpZiAocXVldWUgPT0gRExNX0JMT0NLRURfTElTVCkKKwkJcmV0dXJuOworCisJLyogT25seSBjb25zaWRlciBsdmJzIGluIGxvY2tzIHdpdGggZ3JhbnRlZCBFWCBvciBQUiBsb2NrIGxldmVscyAqLworCWlmIChsb2NrLT5tbC50eXBlICE9IExLTV9FWE1PREUgJiYgbG9jay0+bWwudHlwZSAhPSBMS01fUFJNT0RFKQorCQlyZXR1cm47CisKKwlpZiAoZGxtX2x2Yl9pc19lbXB0eShtcmVzLT5sdmIpKSB7CisJCW1lbWNweShtcmVzLT5sdmIsIGxvY2stPmxrc2ItPmx2YiwgRExNX0xWQl9MRU4pOworCQlyZXR1cm47CisJfQorCisJLyogRW5zdXJlIHRoZSBsdmIgY29waWVkIGZvciBtaWdyYXRpb24gbWF0Y2hlcyBpbiBvdGhlciB2YWxpZCBsb2NrcyAqLworCWlmICghbWVtY21wKG1yZXMtPmx2YiwgbG9jay0+bGtzYi0+bHZiLCBETE1fTFZCX0xFTikpCisJCXJldHVybjsKKworCW1sb2coTUxfRVJST1IsICJNaXNtYXRjaGVkIGx2YiBpbiBsb2NrIGNvb2tpZT0ldTolbGx1LCBuYW1lPSUuKnMsICIKKwkgICAgICJub2RlPSV1XG4iLAorCSAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9ub2RlKGJlNjRfdG9fY3B1KGxvY2stPm1sLmNvb2tpZSkpLAorCSAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9zZXEoYmU2NF90b19jcHUobG9jay0+bWwuY29va2llKSksCisJICAgICBsb2NrLT5sb2NrcmVzLT5sb2NrbmFtZS5sZW4sIGxvY2stPmxvY2tyZXMtPmxvY2tuYW1lLm5hbWUsCisJICAgICBsb2NrLT5tbC5ub2RlKTsKKwlkbG1fcHJpbnRfb25lX2xvY2tfcmVzb3VyY2UobG9jay0+bG9ja3Jlcyk7CisJQlVHKCk7Cit9CiAKIC8qIHJldHVybnMgMSBpZiB0aGlzIGxvY2sgZmlsbHMgdGhlIG5ldHdvcmsgc3RydWN0dXJlLAogICogMCBvdGhlcndpc2UgKi8KQEAgLTExODEsMjAgKzEyMTQsNyBAQAogCW1sLT5saXN0ID0gcXVldWU7CiAJaWYgKGxvY2stPmxrc2IpIHsKIAkJbWwtPmZsYWdzID0gbG9jay0+bGtzYi0+ZmxhZ3M7Ci0JCS8qIHNlbmQgb3VyIGN1cnJlbnQgbHZiICovCi0JCWlmIChtbC0+dHlwZSA9PSBMS01fRVhNT0RFIHx8Ci0JCSAgICBtbC0+dHlwZSA9PSBMS01fUFJNT0RFKSB7Ci0JCQkvKiBpZiBpdCBpcyBhbHJlYWR5IHNldCwgdGhpcyBoYWQgYmV0dGVyIGJlIGEgUFIKLQkJCSAqIGFuZCBpdCBoYXMgdG8gbWF0Y2ggKi8KLQkJCWlmICghZGxtX2x2Yl9pc19lbXB0eShtcmVzLT5sdmIpICYmCi0JCQkgICAgKG1sLT50eXBlID09IExLTV9FWE1PREUgfHwKLQkJCSAgICAgbWVtY21wKG1yZXMtPmx2YiwgbG9jay0+bGtzYi0+bHZiLCBETE1fTFZCX0xFTikpKSB7Ci0JCQkJbWxvZyhNTF9FUlJPUiwgIm1pc21hdGNoZWQgbHZicyFcbiIpOwotCQkJCWRsbV9wcmludF9vbmVfbG9ja19yZXNvdXJjZShsb2NrLT5sb2NrcmVzKTsKLQkJCQlCVUcoKTsKLQkJCX0KLQkJCW1lbWNweShtcmVzLT5sdmIsIGxvY2stPmxrc2ItPmx2YiwgRExNX0xWQl9MRU4pOwotCQl9CisJCWRsbV9wcmVwYXJlX2x2Yl9mb3JfbWlncmF0aW9uKGxvY2ssIG1yZXMsIHF1ZXVlKTsKIAl9CiAJbWwtPm5vZGUgPSBsb2NrLT5tbC5ub2RlOwogCW1yZXMtPm51bV9sb2NrcysrOwpAQCAtMTczMCw2ICsxNzUwLDcgQEAKIAlzdHJ1Y3QgZGxtX2xvY2sgKmxvY2sgPSBOVUxMOwogCXU4IGZyb20gPSBPMk5NX01BWF9OT0RFUzsKIAl1bnNpZ25lZCBpbnQgYWRkZWQgPSAwOworCV9fYmU2NCBjOwogCiAJbWxvZygwLCAicnVubmluZyAlZCBsb2NrcyBmb3IgdGhpcyBsb2NrcmVzXG4iLCBtcmVzLT5udW1fbG9ja3MpOwogCWZvciAoaT0wOyBpPG1yZXMtPm51bV9sb2NrczsgaSsrKSB7CkBAIC0xNzc3LDE5ICsxNzk4LDQ4IEBACiAJCQkvKiBsb2NrIGlzIGFsd2F5cyBjcmVhdGVkIGxvY2FsbHkgZmlyc3QsIGFuZAogCQkJICogZGVzdHJveWVkIGxvY2FsbHkgbGFzdC4gIGl0IG11c3QgYmUgb24gdGhlIGxpc3QgKi8KIAkJCWlmICghbG9jaykgewotCQkJCV9fYmU2NCBjID0gbWwtPmNvb2tpZTsKLQkJCQltbG9nKE1MX0VSUk9SLCAiY291bGQgbm90IGZpbmQgbG9jYWwgbG9jayAiCi0JCQkJCSAgICAgICAid2l0aCBjb29raWUgJXU6JWxsdSFcbiIsCisJCQkJYyA9IG1sLT5jb29raWU7CisJCQkJbWxvZyhNTF9FUlJPUiwgIkNvdWxkIG5vdCBmaW5kIGxvY2FsIGxvY2sgIgorCQkJCQkgICAgICAgIndpdGggY29va2llICV1OiVsbHUsIG5vZGUgJXUsICIKKwkJCQkJICAgICAgICJsaXN0ICV1LCBmbGFncyAweCV4LCB0eXBlICVkLCAiCisJCQkJCSAgICAgICAiY29udiAlZCwgaGlnaGVzdCBibG9ja2VkICVkXG4iLAogCQkJCSAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9ub2RlKGJlNjRfdG9fY3B1KGMpKSwKLQkJCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfc2VxKGJlNjRfdG9fY3B1KGMpKSk7CisJCQkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShjKSksCisJCQkJICAgICBtbC0+bm9kZSwgbWwtPmxpc3QsIG1sLT5mbGFncywgbWwtPnR5cGUsCisJCQkJICAgICBtbC0+Y29udmVydF90eXBlLCBtbC0+aGlnaGVzdF9ibG9ja2VkKTsKIAkJCQlfX2RsbV9wcmludF9vbmVfbG9ja19yZXNvdXJjZShyZXMpOwogCQkJCUJVRygpOwogCQkJfQotCQkJQlVHX09OKGxvY2stPm1sLm5vZGUgIT0gbWwtPm5vZGUpOworCisJCQlpZiAobG9jay0+bWwubm9kZSAhPSBtbC0+bm9kZSkgeworCQkJCWMgPSBsb2NrLT5tbC5jb29raWU7CisJCQkJbWxvZyhNTF9FUlJPUiwgIk1pc21hdGNoZWQgbm9kZSMgaW4gbG9jayAiCisJCQkJICAgICAiY29va2llICV1OiVsbHUsIG5hbWUgJS4qcywgbm9kZSAldVxuIiwKKwkJCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfbm9kZShiZTY0X3RvX2NwdShjKSksCisJCQkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShjKSksCisJCQkJICAgICByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLAorCQkJCSAgICAgbG9jay0+bWwubm9kZSk7CisJCQkJYyA9IG1sLT5jb29raWU7CisJCQkJbWxvZyhNTF9FUlJPUiwgIk1pZ3JhdGUgbG9jayBjb29raWUgJXU6JWxsdSwgIgorCQkJCSAgICAgIm5vZGUgJXUsIGxpc3QgJXUsIGZsYWdzIDB4JXgsIHR5cGUgJWQsICIKKwkJCQkgICAgICJjb252ICVkLCBoaWdoZXN0IGJsb2NrZWQgJWRcbiIsCisJCQkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX25vZGUoYmU2NF90b19jcHUoYykpLAorCQkJCSAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9zZXEoYmU2NF90b19jcHUoYykpLAorCQkJCSAgICAgbWwtPm5vZGUsIG1sLT5saXN0LCBtbC0+ZmxhZ3MsIG1sLT50eXBlLAorCQkJCSAgICAgbWwtPmNvbnZlcnRfdHlwZSwgbWwtPmhpZ2hlc3RfYmxvY2tlZCk7CisJCQkJX19kbG1fcHJpbnRfb25lX2xvY2tfcmVzb3VyY2UocmVzKTsKKwkJCQlCVUcoKTsKKwkJCX0KIAogCQkJaWYgKHRtcHEgIT0gcXVldWUpIHsKLQkJCQltbG9nKDAsICJsb2NrIHdhcyBvbiAldSBpbnN0ZWFkIG9mICV1IGZvciAlLipzXG4iLAotCQkJCSAgICAgaiwgbWwtPmxpc3QsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUpOworCQkJCWMgPSBtbC0+Y29va2llOworCQkJCW1sb2coMCwgIkxvY2sgY29va2llICV1OiVsbHUgd2FzIG9uIGxpc3QgJXUgIgorCQkJCSAgICAgImluc3RlYWQgb2YgbGlzdCAldSBmb3IgJS4qc1xuIiwKKwkJCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfbm9kZShiZTY0X3RvX2NwdShjKSksCisJCQkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShjKSksCisJCQkJICAgICBqLCBtbC0+bGlzdCwgcmVzLT5sb2NrbmFtZS5sZW4sCisJCQkJICAgICByZXMtPmxvY2tuYW1lLm5hbWUpOworCQkJCV9fZGxtX3ByaW50X29uZV9sb2NrX3Jlc291cmNlKHJlcyk7CiAJCQkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMTgzOSw3ICsxODg5LDcgQEAKIAkJCQkgKiB0aGUgbHZiLiAqLwogCQkJCW1lbWNweShyZXMtPmx2YiwgbXJlcy0+bHZiLCBETE1fTFZCX0xFTik7CiAJCQl9IGVsc2UgewotCQkJCS8qIG90aGVyd2lzZSwgdGhlIG5vZGUgaXMgc2VuZGluZyBpdHMgCisJCQkJLyogb3RoZXJ3aXNlLCB0aGUgbm9kZSBpcyBzZW5kaW5nIGl0cwogCQkJCSAqIG1vc3QgcmVjZW50IHZhbGlkIGx2YiBpbmZvICovCiAJCQkJQlVHX09OKG1sLT50eXBlICE9IExLTV9FWE1PREUgJiYKIAkJCQkgICAgICAgbWwtPnR5cGUgIT0gTEtNX1BSTU9ERSk7CkBAIC0xODg2LDcgKzE5MzYsNyBAQAogCQlzcGluX2xvY2soJnJlcy0+c3BpbmxvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvY2ssIHF1ZXVlLCBsaXN0KSB7CiAJCQlpZiAobG9jay0+bWwuY29va2llID09IG1sLT5jb29raWUpIHsKLQkJCQlfX2JlNjQgYyA9IGxvY2stPm1sLmNvb2tpZTsKKwkJCQljID0gbG9jay0+bWwuY29va2llOwogCQkJCW1sb2coTUxfRVJST1IsICIlczolLipzOiAldTolbGx1OiBsb2NrIGFscmVhZHkgIgogCQkJCSAgICAgImV4aXN0cyBvbiB0aGlzIGxvY2tyZXMhXG4iLCBkbG0tPm5hbWUsCiAJCQkJICAgICByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLApAQCAtMjExNCw3ICsyMTY0LDcgQEAKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJnJlcy0+c3BpbmxvY2spOwogCiAJaWYgKHJlcy0+b3duZXIgPT0gZGxtLT5ub2RlX251bSkKLQkJLyogaWYgdGhpcyBub2RlIG93bmVkIHRoZSBsb2NrcmVzLCBhbmQgaWYgdGhlIGRlYWQgbm9kZSAKKwkJLyogaWYgdGhpcyBub2RlIG93bmVkIHRoZSBsb2NrcmVzLCBhbmQgaWYgdGhlIGRlYWQgbm9kZQogCQkgKiBoYWQgYW4gRVggd2hlbiBoZSBkaWVkLCBibGFuayBvdXQgdGhlIGx2YiAqLwogCQlzZWFyY2hfbm9kZSA9IGRlYWRfbm9kZTsKIAllbHNlIHsKQEAgLTIxNTIsNyArMjIwMiw3IEBACiAKIAkvKiB0aGlzIG5vZGUgaXMgdGhlIGxvY2tyZXMgbWFzdGVyOgogCSAqIDEpIHJlbW92ZSBhbnkgc3RhbGUgbG9ja3MgZm9yIHRoZSBkZWFkIG5vZGUKLQkgKiAyKSBpZiB0aGUgZGVhZCBub2RlIGhhZCBhbiBFWCB3aGVuIGhlIGRpZWQsIGJsYW5rIG91dCB0aGUgbHZiIAorCSAqIDIpIGlmIHRoZSBkZWFkIG5vZGUgaGFkIGFuIEVYIHdoZW4gaGUgZGllZCwgYmxhbmsgb3V0IHRoZSBsdmIKIAkgKi8KIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRsbS0+c3BpbmxvY2spOwogCWFzc2VydF9zcGluX2xvY2tlZCgmcmVzLT5zcGlubG9jayk7CkBAIC0yMTkzLDcgKzIyNDMsMTIgQEAKIAkJbWxvZygwLCAiJXM6JS4qczogZnJlZWQgJXUgbG9ja3MgZm9yIGRlYWQgbm9kZSAldSwgIgogCQkgICAgICJkcm9wcGluZyByZWYgZnJvbSBsb2NrcmVzXG4iLCBkbG0tPm5hbWUsCiAJCSAgICAgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSwgZnJlZWQsIGRlYWRfbm9kZSk7Ci0JCUJVR19PTighdGVzdF9iaXQoZGVhZF9ub2RlLCByZXMtPnJlZm1hcCkpOworCQlpZighdGVzdF9iaXQoZGVhZF9ub2RlLCByZXMtPnJlZm1hcCkpIHsKKwkJCW1sb2coTUxfRVJST1IsICIlczolLipzOiBmcmVlZCAldSBsb2NrcyBmb3IgZGVhZCBub2RlICV1LCAiCisJCQkgICAgICJidXQgcmVmIHdhcyBub3Qgc2V0XG4iLCBkbG0tPm5hbWUsCisJCQkgICAgIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUsIGZyZWVkLCBkZWFkX25vZGUpOworCQkJX19kbG1fcHJpbnRfb25lX2xvY2tfcmVzb3VyY2UocmVzKTsKKwkJfQogCQlkbG1fbG9ja3Jlc19jbGVhcl9yZWZtYXBfYml0KGRlYWRfbm9kZSwgcmVzKTsKIAl9IGVsc2UgaWYgKHRlc3RfYml0KGRlYWRfbm9kZSwgcmVzLT5yZWZtYXApKSB7CiAJCW1sb2coMCwgIiVzOiUuKnM6IGRlYWQgbm9kZSAldSBoYWQgYSByZWYsIGJ1dCBoYWQgIgpAQCAtMjI2MCw3ICsyMzE1LDcgQEAKIAkJCQl9CiAJCQkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwogCQkJCWNvbnRpbnVlOwotCQkJfQkJCQorCQkJfQogCQkJc3Bpbl9sb2NrKCZyZXMtPnNwaW5sb2NrKTsKIAkJCS8qIHplcm8gdGhlIGx2YiBpZiBuZWNlc3NhcnkgKi8KIAkJCWRsbV9yZXZhbGlkYXRlX2x2YihkbG0sIHJlcywgZGVhZF9ub2RlKTsKQEAgLTI0MTEsNyArMjQ2Niw3IEBACiAgKiB0aGlzIGZ1bmN0aW9uIG9uIGVhY2ggbm9kZSByYWNpbmcgdG8gYmVjb21lIHRoZSByZWNvdmVyeQogICogbWFzdGVyIHdpbGwgbm90IHN0b3AgYXR0ZW1wdGluZyB0aGlzIHVudGlsIGVpdGhlcjoKICAqIGEpIHRoaXMgbm9kZSBnZXRzIHRoZSBFWCAoYW5kIGJlY29tZXMgdGhlIHJlY292ZXJ5IG1hc3RlciksCi0gKiBvciBiKSBkbG0tPnJlY28ubmV3X21hc3RlciBnZXRzIHNldCB0byBzb21lIG5vZGVudW0gCisgKiBvciBiKSBkbG0tPnJlY28ubmV3X21hc3RlciBnZXRzIHNldCB0byBzb21lIG5vZGVudW0KICAqICE9IE8yTk1fSU5WQUxJRF9OT0RFX05VTSAoYW5vdGhlciBub2RlIHdpbGwgZG8gdGhlIHJlY28pLgogICogc28gZWFjaCB0aW1lIGEgcmVjb3ZlcnkgbWFzdGVyIGlzIG5lZWRlZCwgdGhlIGVudGlyZSBjbHVzdGVyCiAgKiB3aWxsIHN5bmMgYXQgdGhpcyBwb2ludC4gIGlmIHRoZSBuZXcgbWFzdGVyIGRpZXMsIHRoYXQgd2lsbApAQCAtMjQyNCw3ICsyNDc5LDcgQEAKIAogCW1sb2coMCwgInN0YXJ0aW5nIHJlY292ZXJ5IG9mICVzIGF0ICVsdSwgZGVhZD0ldSwgdGhpcz0ldVxuIiwKIAkgICAgIGRsbS0+bmFtZSwgamlmZmllcywgZGxtLT5yZWNvLmRlYWRfbm9kZSwgZGxtLT5ub2RlX251bSk7Ci1hZ2FpbjoJCithZ2FpbjoKIAltZW1zZXQoJmxrc2IsIDAsIHNpemVvZihsa3NiKSk7CiAKIAlyZXQgPSBkbG1sb2NrKGRsbSwgTEtNX0VYTU9ERSwgJmxrc2IsIExLTV9OT1FVRVVFfExLTV9SRUNPVkVSWSwKQEAgLTI0MzcsOCArMjQ5Miw4IEBACiAJaWYgKHJldCA9PSBETE1fTk9STUFMKSB7CiAJCW1sb2coMCwgImRsbT0lcyBkbG1sb2NrIHNheXMgSSBnb3QgaXQgKHRoaXM9JXUpXG4iLAogCQkgICAgIGRsbS0+bmFtZSwgZGxtLT5ub2RlX251bSk7Ci0JCQotCQkvKiBnb3QgdGhlIEVYIGxvY2suICBjaGVjayB0byBzZWUgaWYgYW5vdGhlciBub2RlIAorCisJCS8qIGdvdCB0aGUgRVggbG9jay4gIGNoZWNrIHRvIHNlZSBpZiBhbm90aGVyIG5vZGUKIAkJICoganVzdCBiZWNhbWUgdGhlIHJlY28gbWFzdGVyICovCiAJCWlmIChkbG1fcmVjb19tYXN0ZXJfcmVhZHkoZGxtKSkgewogCQkJbWxvZygwLCAiJXM6IGdvdCByZWNvIEVYIGxvY2ssIGJ1dCAldSB3aWxsICIKQEAgLTI0NTEsMTIgKzI1MDYsMTIgQEAKIAkJCS8qIHNlZSBpZiByZWNvdmVyeSB3YXMgYWxyZWFkeSBmaW5pc2hlZCBlbHNld2hlcmUgKi8KIAkJCXNwaW5fbG9jaygmZGxtLT5zcGlubG9jayk7CiAJCQlpZiAoZGxtLT5yZWNvLmRlYWRfbm9kZSA9PSBPMk5NX0lOVkFMSURfTk9ERV9OVU0pIHsKLQkJCQlzdGF0dXMgPSAtRUlOVkFMOwkKKwkJCQlzdGF0dXMgPSAtRUlOVkFMOwogCQkJCW1sb2coMCwgIiVzOiBnb3QgcmVjbyBFWCBsb2NrLCBidXQgIgogCQkJCSAgICAgIm5vZGUgZ290IHJlY292ZXJlZCBhbHJlYWR5XG4iLCBkbG0tPm5hbWUpOwogCQkJCWlmIChkbG0tPnJlY28ubmV3X21hc3RlciAhPSBPMk5NX0lOVkFMSURfTk9ERV9OVU0pIHsKIAkJCQkJbWxvZyhNTF9FUlJPUiwgIiVzOiBuZXcgbWFzdGVyIGlzICV1ICIKLQkJCQkJICAgICAiYnV0IG5vIGRlYWQgbm9kZSFcbiIsIAorCQkJCQkgICAgICJidXQgbm8gZGVhZCBub2RlIVxuIiwKIAkJCQkJICAgICBkbG0tPm5hbWUsIGRsbS0+cmVjby5uZXdfbWFzdGVyKTsKIAkJCQkJQlVHKCk7CiAJCQkJfQpAQCAtMjQ2OCw3ICsyNTIzLDcgQEAKIAkJICogc2V0IHRoZSBtYXN0ZXIgYW5kIHNlbmQgdGhlIG1lc3NhZ2VzIHRvIGJlZ2luIHJlY292ZXJ5ICovCiAJCWlmICghc3RhdHVzKSB7CiAJCQltbG9nKDAsICIlczogZGVhZD0ldSwgdGhpcz0ldSwgc2VuZGluZyAiCi0JCQkgICAgICJiZWdpbl9yZWNvIG5vd1xuIiwgZGxtLT5uYW1lLCAKKwkJCSAgICAgImJlZ2luX3JlY28gbm93XG4iLCBkbG0tPm5hbWUsCiAJCQkgICAgIGRsbS0+cmVjby5kZWFkX25vZGUsIGRsbS0+bm9kZV9udW0pOwogCQkJc3RhdHVzID0gZGxtX3NlbmRfYmVnaW5fcmVjb19tZXNzYWdlKGRsbSwKIAkJCQkgICAgICBkbG0tPnJlY28uZGVhZF9ub2RlKTsKQEAgLTI1MDEsNyArMjU1Niw3IEBACiAJCW1sb2coMCwgImRsbT0lcyBkbG1sb2NrIHNheXMgYW5vdGhlciBub2RlIGdvdCBpdCAodGhpcz0ldSlcbiIsCiAJCSAgICAgZGxtLT5uYW1lLCBkbG0tPm5vZGVfbnVtKTsKIAkJLyogYW5vdGhlciBub2RlIGlzIG1hc3Rlci4gd2FpdCBvbgotCQkgKiByZWNvLm5ld19tYXN0ZXIgIT0gTzJOTV9JTlZBTElEX05PREVfTlVNIAorCQkgKiByZWNvLm5ld19tYXN0ZXIgIT0gTzJOTV9JTlZBTElEX05PREVfTlVNCiAJCSAqIGZvciBhdCBtb3N0IG9uZSBzZWNvbmQgKi8KIAkJd2FpdF9ldmVudF90aW1lb3V0KGRsbS0+ZGxtX3JlY29fdGhyZWFkX3dxLAogCQkJCQkgZGxtX3JlY29fbWFzdGVyX3JlYWR5KGRsbSksCkBAIC0yNTg5LDcgKzI2NDQsMTMgQEAKIAkJCSAgICAgImJlZ2luIHJlY28gbXNnICglZClcbiIsIGRsbS0+bmFtZSwgbm9kZW51bSwgcmV0KTsKIAkJCXJldCA9IDA7CiAJCX0KLQkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CisKKwkJLyoKKwkJICogUHJpb3IgdG8gY29tbWl0IGFhZDFiMTUzMTBiOWJjZDU5ZmE4MWFiOGYyYjE1MTNiNTk1NTNlYTgsCisJCSAqIGRsbV9iZWdpbl9yZWNvX2hhbmRsZXIoKSByZXR1cm5lZCBFQUdBSU4gYW5kIG5vdCAtRUFHQUlOLgorCQkgKiBXZSBhcmUgaGFuZGxpbmcgYm90aCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLgorCQkgKi8KKwkJaWYgKHJldCA9PSAtRUFHQUlOIHx8IHJldCA9PSBFQUdBSU4pIHsKIAkJCW1sb2coMCwgIiVzOiB0cnlpbmcgdG8gc3RhcnQgcmVjb3Zlcnkgb2Ygbm9kZSAiCiAJCQkgICAgICIldSwgYnV0IG5vZGUgJXUgaXMgd2FpdGluZyBmb3IgbGFzdCByZWNvdmVyeSAiCiAJCQkgICAgICJ0byBjb21wbGV0ZSwgYmFja29mZiBmb3IgYSBiaXRcbiIsIGRsbS0+bmFtZSwKQEAgLTI1OTksNyArMjY2MCw3IEBACiAJCX0KIAkJaWYgKHJldCA8IDApIHsKIAkJCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzOwotCQkJLyogdGhpcyBpcyBub3cgYSBzZXJpb3VzIHByb2JsZW0sIHBvc3NpYmx5IEVOT01FTSAKKwkJCS8qIHRoaXMgaXMgbm93IGEgc2VyaW91cyBwcm9ibGVtLCBwb3NzaWJseSBFTk9NRU0KIAkJCSAqIGluIHRoZSBuZXR3b3JrIHN0YWNrLiAgbXVzdCByZXRyeSAqLwogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJbWxvZyhNTF9FUlJPUiwgImJlZ2luIHJlY28gb2YgZGxtICVzIHRvIG5vZGUgJXUgIgpAQCAtMjYxMiw3ICsyNjczLDcgQEAKIAkJCX0gZWxzZSB7CiAJCQkJbWxvZyhNTF9FUlJPUiwgInJlY292ZXJ5IGxvY2sgbm90IGZvdW5kXG4iKTsKIAkJCX0KLQkJCS8qIHNsZWVwIGZvciBhIGJpdCBpbiBob3BlcyB0aGF0IHdlIGNhbiBhdm9pZCAKKwkJCS8qIHNsZWVwIGZvciBhIGJpdCBpbiBob3BlcyB0aGF0IHdlIGNhbiBhdm9pZAogCQkJICogYW5vdGhlciBFTk9NRU0gKi8KIAkJCW1zbGVlcCgxMDApOwogCQkJZ290byByZXRyeTsKQEAgLTI2NjQsNyArMjcyNSw3IEBACiAJfQogCWlmIChkbG0tPnJlY28uZGVhZF9ub2RlICE9IE8yTk1fSU5WQUxJRF9OT0RFX05VTSkgewogCQltbG9nKE1MX05PVElDRSwgIiVzOiBkZWFkX25vZGUgcHJldmlvdXNseSBzZXQgdG8gJXUsICIKLQkJICAgICAibm9kZSAldSBjaGFuZ2luZyBpdCB0byAldVxuIiwgZGxtLT5uYW1lLCAKKwkJICAgICAibm9kZSAldSBjaGFuZ2luZyBpdCB0byAldVxuIiwgZGxtLT5uYW1lLAogCQkgICAgIGRsbS0+cmVjby5kZWFkX25vZGUsIGJyLT5ub2RlX2lkeCwgYnItPmRlYWRfbm9kZSk7CiAJfQogCWRsbV9zZXRfcmVjb19tYXN0ZXIoZGxtLCBici0+bm9kZV9pZHgpOwpAQCAtMjczMCw4ICsyNzkxLDggQEAKIAkJaWYgKHJldCA8IDApIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWlmIChkbG1faXNfaG9zdF9kb3duKHJldCkpIHsKLQkJCQkvKiB0aGlzIGhhcyBubyBlZmZlY3Qgb24gdGhpcyByZWNvdmVyeSAKLQkJCQkgKiBzZXNzaW9uLCBzbyBzZXQgdGhlIHN0YXR1cyB0byB6ZXJvIHRvIAorCQkJCS8qIHRoaXMgaGFzIG5vIGVmZmVjdCBvbiB0aGlzIHJlY292ZXJ5CisJCQkJICogc2Vzc2lvbiwgc28gc2V0IHRoZSBzdGF0dXMgdG8gemVybyB0bwogCQkJCSAqIGZpbmlzaCBvdXQgdGhlIGxhc3QgcmVjb3ZlcnkgKi8KIAkJCQltbG9nKE1MX0VSUk9SLCAibm9kZSAldSB3ZW50IGRvd24gYWZ0ZXIgdGhpcyAiCiAJCQkJICAgICAibm9kZSBmaW5pc2hlZCByZWNvdmVyeS5cbiIsIG5vZGVudW0pOwpAQCAtMjc2OCw3ICsyODI5LDcgQEAKIAltbG9nKDAsICIlczogbm9kZSAldSBmaW5hbGl6aW5nIHJlY292ZXJ5IHN0YWdlJWQgb2YgIgogCSAgICAgIm5vZGUgJXUgKCV1OiV1KVxuIiwgZGxtLT5uYW1lLCBmci0+bm9kZV9pZHgsIHN0YWdlLAogCSAgICAgZnItPmRlYWRfbm9kZSwgZGxtLT5yZWNvLmRlYWRfbm9kZSwgZGxtLT5yZWNvLm5ld19tYXN0ZXIpOwotIAorCiAJc3Bpbl9sb2NrKCZkbG0tPnNwaW5sb2NrKTsKIAogCWlmIChkbG0tPnJlY28ubmV3X21hc3RlciAhPSBmci0+bm9kZV9pZHgpIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG11bmxvY2suYyBiL2ZzL29jZnMyL2RsbS9kbG11bmxvY2suYwppbmRleCAwMGY1M2IyLi40OWUyOWVjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtdW5sb2NrLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbXVubG9jay5jCkBAIC0xOTAsOCArMTkwLDggQEAKIAkJCWFjdGlvbnMgJj0gfihETE1fVU5MT0NLX1JFTU9WRV9MT0NLfAogCQkJCSAgICAgRExNX1VOTE9DS19SRUdSQU5UX0xPQ0t8CiAJCQkJICAgICBETE1fVU5MT0NLX0NMRUFSX0NPTlZFUlRfVFlQRSk7Ci0JCX0gZWxzZSBpZiAoc3RhdHVzID09IERMTV9SRUNPVkVSSU5HIHx8IAotCQkJICAgc3RhdHVzID09IERMTV9NSUdSQVRJTkcgfHwgCisJCX0gZWxzZSBpZiAoc3RhdHVzID09IERMTV9SRUNPVkVSSU5HIHx8CisJCQkgICBzdGF0dXMgPT0gRExNX01JR1JBVElORyB8fAogCQkJICAgc3RhdHVzID09IERMTV9GT1JXQVJEKSB7CiAJCQkvKiBtdXN0IGNsZWFyIHRoZSBhY3Rpb25zIGJlY2F1c2UgdGhpcyB1bmxvY2sKIAkJCSAqIGlzIGFib3V0IHRvIGJlIHJldHJpZWQuICBjYW5ub3QgZnJlZSBvciBkbwpAQCAtNjYxLDE0ICs2NjEsMTQgQEAKIAlpZiAoY2FsbF9hc3QpIHsKIAkJbWxvZygwLCAiY2FsbGluZyB1bmxvY2thc3QoJXAsICVkKVxuIiwgZGF0YSwgc3RhdHVzKTsKIAkJaWYgKGlzX21hc3RlcikgewotCQkJLyogaXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBvbmUgbGFzdCBiYXN0IAorCQkJLyogaXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBvbmUgbGFzdCBiYXN0CiAJCQkgKiBwZW5kaW5nLiAgbWFrZSBzdXJlIGl0IGlzIGZsdXNoZWQsIHRoZW4KIAkJCSAqIGNhbGwgdGhlIHVubG9ja2FzdC4KIAkJCSAqIG5vdCBhbiBpc3N1ZSBpZiB0aGlzIGlzIGEgbWFzdGVyZWQgcmVtb3RlbHksCiAJCQkgKiBzaW5jZSB0aGlzIGxvY2sgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZQogCQkJICogbG9ja3JlcyBxdWV1ZXMgYW5kIGNhbm5vdCBiZSBmb3VuZC4gKi8KIAkJCWRsbV9raWNrX3RocmVhZChkbG0sIE5VTEwpOwotCQkJd2FpdF9ldmVudChkbG0tPmFzdF93cSwgCisJCQl3YWl0X2V2ZW50KGRsbS0+YXN0X3dxLAogCQkJCSAgIGRsbV9sb2NrX2Jhc3RzX2ZsdXNoZWQoZGxtLCBsb2NrKSk7CiAJCX0KIAkJKCp1bmxvY2thc3QpKGRhdGEsIHN0YXR1cyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1nbHVlLmMgYi9mcy9vY2ZzMi9kbG1nbHVlLmMKaW5kZXggYzVlNGE0OS4uZTA0NDAxOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtZ2x1ZS5jCisrKyBiL2ZzL29jZnMyL2RsbWdsdWUuYwpAQCAtODc1LDYgKzg3NSwxNCBAQAogCQlsb2NrcmVzX29yX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfTkVFRFNfUkVGUkVTSCk7CiAKIAlsb2NrcmVzLT5sX2xldmVsID0gbG9ja3Jlcy0+bF9yZXF1ZXN0ZWQ7CisKKwkvKgorCSAqIFdlIHNldCB0aGUgT0NGUzJfTE9DS19VUENPTlZFUlRfRklOSVNISU5HIGZsYWcgYmVmb3JlIGNsZWFyaW5nCisJICogdGhlIE9DRlMyX0xPQ0tfQlVTWSBmbGFnIHRvIHByZXZlbnQgdGhlIGRjIHRocmVhZCBmcm9tCisJICogZG93bmNvbnZlcnRpbmcgdGhlIGxvY2sgYmVmb3JlIHRoZSB1cGNvbnZlcnQgaGFzIGZ1bGx5IGNvbXBsZXRlZC4KKwkgKi8KKwlsb2NrcmVzX29yX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfVVBDT05WRVJUX0ZJTklTSElORyk7CisKIAlsb2NrcmVzX2NsZWFyX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfQlVTWSk7CiAKIAltbG9nX2V4aXRfdm9pZCgpOwpAQCAtOTA3LDggKzkxNSw2IEBACiAKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmxvY2tyZXMtPmxfbG9jayk7CiAKLQlsb2NrcmVzX29yX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfQkxPQ0tFRCk7Ci0KIAlpZiAobGV2ZWwgPiBsb2NrcmVzLT5sX2Jsb2NraW5nKSB7CiAJCS8qIG9ubHkgc2NoZWR1bGUgYSBkb3duY29udmVydCBpZiB3ZSBoYXZlbid0IGFscmVhZHkgc2NoZWR1bGVkCiAJCSAqIG9uZSB0aGF0IGdvZXMgbG93IGVub3VnaCB0byBzYXRpc2Z5IHRoZSBsZXZlbCB3ZSdyZQpAQCAtOTIxLDYgKzkyNyw5IEBACiAJCWxvY2tyZXMtPmxfYmxvY2tpbmcgPSBsZXZlbDsKIAl9CiAKKwlpZiAobmVlZHNfZG93bmNvbnZlcnQpCisJCWxvY2tyZXNfb3JfZmxhZ3MobG9ja3JlcywgT0NGUzJfTE9DS19CTE9DS0VEKTsKKwogCW1sb2dfZXhpdChuZWVkc19kb3duY29udmVydCk7CiAJcmV0dXJuIG5lZWRzX2Rvd25jb252ZXJ0OwogfQpAQCAtMTEzMyw2ICsxMTQyLDcgQEAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CiAJbG9ja3Jlc19jbGVhcl9mbGFncyhsb2NrcmVzLCBPQ0ZTMl9MT0NLX0JVU1kpOworCWxvY2tyZXNfY2xlYXJfZmxhZ3MobG9ja3JlcywgT0NGUzJfTE9DS19VUENPTlZFUlRfRklOSVNISU5HKTsKIAlpZiAoY29udmVydCkKIAkJbG9ja3Jlcy0+bF9hY3Rpb24gPSBPQ0ZTMl9BU1RfSU5WQUxJRDsKIAllbHNlCkBAIC0xMzIzLDEzICsxMzMzLDEzIEBACiBhZ2FpbjoKIAl3YWl0ID0gMDsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKKwogCWlmIChjYXRjaF9zaWduYWxzICYmIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCXJldCA9IC1FUkVTVEFSVFNZUzsKLQkJZ290byBvdXQ7CisJCWdvdG8gdW5sb2NrOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKLQogCW1sb2dfYnVnX29uX21zZyhsb2NrcmVzLT5sX2ZsYWdzICYgT0NGUzJfTE9DS19GUkVFSU5HLAogCQkJIkNsdXN0ZXIgbG9jayBjYWxsZWQgb24gZnJlZWluZyBsb2NrcmVzICVzISBmbGFncyAiCiAJCQkiMHglbHhcbiIsIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7CkBAIC0xMzQ2LDYgKzEzNTYsMjUgQEAKIAkJZ290byB1bmxvY2s7CiAJfQogCisJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX1VQQ09OVkVSVF9GSU5JU0hJTkcpIHsKKwkJLyoKKwkJICogV2UndmUgdXBjb252ZXJ0ZWQuIElmIHRoZSBsb2NrIG5vdyBoYXMgYSBsZXZlbCB3ZSBjYW4KKwkJICogd29yayB3aXRoLCB3ZSB0YWtlIGl0LiBJZiwgaG93ZXZlciwgdGhlIGxvY2sgaXMgbm90IGF0IHRoZQorCQkgKiByZXF1aXJlZCBsZXZlbCwgd2UgZ28gdGhydSB0aGUgZnVsbCBjeWNsZS4gT25lIHdheSB0aGlzIGNvdWxkCisJCSAqIGhhcHBlbiBpcyBpZiBhIHByb2Nlc3MgcmVxdWVzdGluZyBhbiB1cGNvbnZlcnQgdG8gUFIgaXMKKwkJICogY2xvc2VseSBmb2xsb3dlZCBieSBhbm90aGVyIHJlcXVlc3RpbmcgdXBjb252ZXJ0IHRvIGFuIEVYLgorCQkgKiBJZiB0aGUgcHJvY2VzcyByZXF1ZXN0aW5nIEVYIGxhbmRzIGhlcmUsIHdlIHdhbnQgaXQgdG8KKwkJICogY29udGludWUgYXR0ZW1wdGluZyB0byB1cGNvbnZlcnQgYW5kIGxldCB0aGUgcHJvY2VzcworCQkgKiByZXF1ZXN0aW5nIFBSIHRha2UgdGhlIGxvY2suCisJCSAqIElmIG11bHRpcGxlIHByb2Nlc3NlcyByZXF1ZXN0IHVwY29udmVydCB0byBQUiwgdGhlIGZpcnN0IG9uZQorCQkgKiBoZXJlIHdpbGwgdGFrZSB0aGUgbG9jay4gVGhlIG90aGVycyB3aWxsIGhhdmUgdG8gZ28gdGhydSB0aGUKKwkJICogT0NGUzJfTE9DS19CTE9DS0VEIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIHBlbmRpbmcKKwkJICogZG93bmNvbnZlcnQgcmVxdWVzdC4KKwkJICovCisJCWlmIChsZXZlbCA8PSBsb2NrcmVzLT5sX2xldmVsKQorCQkJZ290byB1cGRhdGVfaG9sZGVyczsKKwl9CisKIAlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIE9DRlMyX0xPQ0tfQkxPQ0tFRCAmJgogCSAgICAhb2NmczJfbWF5X2NvbnRpbnVlX29uX2Jsb2NrZWRfbG9jayhsb2NrcmVzLCBsZXZlbCkpIHsKIAkJLyogaXMgdGhlIGxvY2sgaXMgY3VycmVudGx5IGJsb2NrZWQgb24gYmVoYWxmIG9mCkBAIC0xNDE2LDExICsxNDQ1LDE0IEBACiAJCWdvdG8gYWdhaW47CiAJfQogCit1cGRhdGVfaG9sZGVyczoKIAkvKiBPaywgaWYgd2UgZ2V0IGhlcmUgdGhlbiB3ZSdyZSBnb29kIHRvIGdvLiAqLwogCW9jZnMyX2luY19ob2xkZXJzKGxvY2tyZXMsIGxldmVsKTsKIAogCXJldCA9IDA7CiB1bmxvY2s6CisJbG9ja3Jlc19jbGVhcl9mbGFncyhsb2NrcmVzLCBPQ0ZTMl9MT0NLX1VQQ09OVkVSVF9GSU5JU0hJTkcpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CiBvdXQ6CiAJLyoKQEAgLTMxNTUsNyArMzE4Nyw3IEBACiAvKiBNYXJrIHRoZSBsb2NrcmVzIGFzIGJlaW5nIGRyb3BwZWQuIEl0IHdpbGwgbm8gbG9uZ2VyIGJlCiAgKiBxdWV1ZWQgaWYgYmxvY2tpbmcsIGJ1dCB3ZSBzdGlsbCBtYXkgaGF2ZSB0byB3YWl0IG9uIGl0CiAgKiBiZWluZyBkZXF1ZXVlZCBmcm9tIHRoZSBkb3duY29udmVydCB0aHJlYWQgYmVmb3JlIHdlIGNhbiBjb25zaWRlcgotICogaXQgc2FmZSB0byBkcm9wLiAKKyAqIGl0IHNhZmUgdG8gZHJvcC4KICAqCiAgKiBZb3UgY2FuICpub3QqIGF0dGVtcHQgdG8gY2FsbCBjbHVzdGVyX2xvY2sgb24gdGhpcyBsb2NrcmVzIGFueW1vcmUuICovCiB2b2lkIG9jZnMyX21hcmtfbG9ja3Jlc19mcmVlaW5nKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcykKQEAgLTMzNTIsNiArMzM4NCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYmxvY2tpbmc7CiAJaW50IG5ld19sZXZlbDsKKwlpbnQgbGV2ZWw7CiAJaW50IHJldCA9IDA7CiAJaW50IHNldF9sdmIgPSAwOwogCXVuc2lnbmVkIGludCBnZW47CkBAIC0zMzYwLDkgKzMzOTMsMTcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKIAotCUJVR19PTighKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX0JMT0NLRUQpKTsKLQogcmVjaGVjazoKKwkvKgorCSAqIElzIGl0IHN0aWxsIGJsb2NraW5nPyBJZiBub3QsIHdlIGhhdmUgbm8gbW9yZSB3b3JrIHRvIGRvLgorCSAqLworCWlmICghKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX0JMT0NLRUQpKSB7CisJCUJVR19PTihsb2NrcmVzLT5sX2Jsb2NraW5nICE9IERMTV9MT0NLX05MKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CisJCXJldCA9IDA7CisJCWdvdG8gbGVhdmU7CisJfQorCiAJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX0JVU1kpIHsKIAkJLyogWFhYCiAJCSAqIFRoaXMgaXMgYSAqYmlnKiByYWNlLiAgVGhlIE9DRlMyX0xPQ0tfUEVORElORyBmbGFnCkBAIC0zNDAxLDYgKzM0NDIsMzEgQEAKIAkJZ290byBsZWF2ZTsKIAl9CiAKKwkvKgorCSAqIFRoaXMgcHJldmVudHMgbGl2ZWxvY2tzLiBPQ0ZTMl9MT0NLX1VQQ09OVkVSVF9GSU5JU0hJTkcgZmxhZyBpcworCSAqIHNldCB3aGVuIHRoZSBhc3QgaXMgcmVjZWl2ZWQgZm9yIGFuIHVwY29udmVydCBqdXN0IGJlZm9yZSB0aGUKKwkgKiBPQ0ZTMl9MT0NLX0JVU1kgZmxhZyBpcyBjbGVhcmVkLiBOb3cgaWYgdGhlIGZzIHJlY2VpdmVkIGEgYmFzdAorCSAqIG9uIHRoZSBoZWVscyBvZiB0aGUgYXN0LCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBkb3duY29udmVydCBqdXN0CisJICogZW5vdWdoIHRvIGFsbG93IHRoZSB1cCByZXF1ZXN0b3IgdG8gZG8gaXRzIHRhc2suIEJlY2F1c2UgdGhpcworCSAqIGxvY2sgaXMgaW4gdGhlIGJsb2NrZWQgcXVldWUsIHRoZSBsb2NrIHdpbGwgYmUgZG93bmNvbnZlcnRlZAorCSAqIGFzIHNvb24gYXMgdGhlIHJlcXVlc3RvciBpcyBkb25lIHdpdGggdGhlIGxvY2suCisJICovCisJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX1VQQ09OVkVSVF9GSU5JU0hJTkcpCisJCWdvdG8gbGVhdmVfcmVxdWV1ZTsKKworCS8qCisJICogSG93IGNhbiB3ZSBibG9jayBhbmQgeWV0IGJlIGF0IE5MPyAgV2Ugd2VyZSB0cnlpbmcgdG8gdXBjb252ZXJ0CisJICogZnJvbSBOTCBhbmQgZ290IGNhbmNlbGVkLiAgVGhlIGNvZGUgY29tZXMgYmFjayBoZXJlLCBhbmQgbm93CisJICogd2Ugbm90aWNlIGFuZCBjbGVhciBCTE9DS0lORy4KKwkgKi8KKwlpZiAobG9ja3Jlcy0+bF9sZXZlbCA9PSBETE1fTE9DS19OTCkgeworCQlCVUdfT04obG9ja3Jlcy0+bF9leF9ob2xkZXJzIHx8IGxvY2tyZXMtPmxfcm9faG9sZGVycyk7CisJCWxvY2tyZXMtPmxfYmxvY2tpbmcgPSBETE1fTE9DS19OTDsKKwkJbG9ja3Jlc19jbGVhcl9mbGFncyhsb2NrcmVzLCBPQ0ZTMl9MT0NLX0JMT0NLRUQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKIAkvKiBpZiB3ZSdyZSBibG9ja2luZyBhbiBleGNsdXNpdmUgYW5kIHdlIGhhdmUgKmFueSogaG9sZGVycywKIAkgKiB0aGVuIHJlcXVldWUuICovCiAJaWYgKChsb2NrcmVzLT5sX2Jsb2NraW5nID09IERMTV9MT0NLX0VYKQpAQCAtMzQzOCw2ICszNTA0LDcgQEAKIAkgKiBtYXkgc2xlZXAsIHNvIHdlIHNhdmUgb2ZmIGEgY29weSBvZiB3aGF0IHdlJ3JlIGJsb2NraW5nIGFzCiAJICogaXQgbWF5IGNoYW5nZSB3aGlsZSB3ZSdyZSBub3QgaG9sZGluZyB0aGUgc3BpbiBsb2NrLiAqLwogCWJsb2NraW5nID0gbG9ja3Jlcy0+bF9ibG9ja2luZzsKKwlsZXZlbCA9IGxvY2tyZXMtPmxfbGV2ZWw7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CiAKIAljdGwtPnVuYmxvY2tfYWN0aW9uID0gbG9ja3Jlcy0+bF9vcHMtPmRvd25jb252ZXJ0X3dvcmtlcihsb2NrcmVzLCBibG9ja2luZyk7CkBAIC0zNDQ2LDcgKzM1MTMsNyBAQAogCQlnb3RvIGxlYXZlOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOwotCWlmIChibG9ja2luZyAhPSBsb2NrcmVzLT5sX2Jsb2NraW5nKSB7CisJaWYgKChibG9ja2luZyAhPSBsb2NrcmVzLT5sX2Jsb2NraW5nKSB8fCAobGV2ZWwgIT0gbG9ja3Jlcy0+bF9sZXZlbCkpIHsKIAkJLyogSWYgdGhpcyBjaGFuZ2VkIHVuZGVybmVhdGggdXMsIHRoZW4gd2UgY2FuJ3QgZHJvcAogCQkgKiBpdCBqdXN0IHlldC4gKi8KIAkJZ290byByZWNoZWNrOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZXhwb3J0LmMgYi9mcy9vY2ZzMi9leHBvcnQuYwppbmRleCAxNTcxM2NiLi4xOWFkMTQ1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9leHBvcnQuYworKysgYi9mcy9vY2ZzMi9leHBvcnQuYwpAQCAtMjM5LDcgKzIzOSw3IEBACiAJCW1sb2coMCwgIkVuY29kaW5nIHBhcmVudDogYmxrbm86ICVsbHUsIGdlbmVyYXRpb246ICV1XG4iLAogCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmxrbm8sIGdlbmVyYXRpb24pOwogCX0KLQkKKwogCSptYXhfbGVuID0gbGVuOwogCiBiYWlsOgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZXh0ZW50X21hcC5jIGIvZnMvb2NmczIvZXh0ZW50X21hcC5jCmluZGV4IGQzNWEyN2YuLjUzMjg1MjkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2V4dGVudF9tYXAuYworKysgYi9mcy9vY2ZzMi9leHRlbnRfbWFwLmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCQllbWktPmVpX2NsdXN0ZXJzICs9IGlucy0+ZWlfY2x1c3RlcnM7CiAJCXJldHVybiAxOwogCX0gZWxzZSBpZiAoKGlucy0+ZWlfcGh5cyArIGlucy0+ZWlfY2x1c3RlcnMpID09IGVtaS0+ZWlfcGh5cyAmJgotCQkgICAoaW5zLT5laV9jcG9zICsgaW5zLT5laV9jbHVzdGVycykgPT0gZW1pLT5laV9waHlzICYmCisJCSAgIChpbnMtPmVpX2Nwb3MgKyBpbnMtPmVpX2NsdXN0ZXJzKSA9PSBlbWktPmVpX2Nwb3MgJiYKIAkJICAgaW5zLT5laV9mbGFncyA9PSBlbWktPmVpX2ZsYWdzKSB7CiAJCWVtaS0+ZWlfcGh5cyA9IGlucy0+ZWlfcGh5czsKIAkJZW1pLT5laV9jcG9zID0gaW5zLT5laV9jcG9zOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZmlsZS5jIGIvZnMvb2NmczIvZmlsZS5jCmluZGV4IDA2Y2NmNmEuLjU1OGNlMDMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2ZpbGUuYworKysgYi9mcy9vY2ZzMi9maWxlLmMKQEAgLTc0OSw3ICs3NDksNyBAQAogCWludCByZXQ7CiAKIAlvZmZzZXQgPSAoc2l6ZSAmIChQQUdFX0NBQ0hFX1NJWkUtMSkpOyAvKiBXaXRoaW4gcGFnZSAqLwotCS8qIHVnaC4gIGluIHByZXBhcmUvY29tbWl0X3dyaXRlLCBpZiBmcm9tPT10bz09c3RhcnQgb2YgYmxvY2ssIHdlIAorCS8qIHVnaC4gIGluIHByZXBhcmUvY29tbWl0X3dyaXRlLCBpZiBmcm9tPT10bz09c3RhcnQgb2YgYmxvY2ssIHdlCiAJKiogc2tpcCB0aGUgcHJlcGFyZS4gIG1ha2Ugc3VyZSB3ZSBuZXZlciBzZW5kIGFuIG9mZnNldCBmb3IgdGhlIHN0YXJ0CiAJKiogb2YgYSBibG9jawogCSovCkBAIC0xNzc5LDcgKzE3NzksNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJbG9mZl90IHNhdmVkX3BvcywgZW5kOwogCi0JLyogCisJLyoKIAkgKiBXZSBzdGFydCB3aXRoIGEgcmVhZCBsZXZlbCBtZXRhIGxvY2sgYW5kIG9ubHkganVtcCB0byBhbiBleAogCSAqIGlmIHdlIG5lZWQgdG8gbWFrZSBtb2RpZmljYXRpb25zIGhlcmUuCiAJICovCkBAIC0yMDEzLDggKzIwMTMsOCBAQAogCS8qIGJ1ZmZlcmVkIGFpbyB3b3VsZG4ndCBoYXZlIHByb3BlciBsb2NrIGNvdmVyYWdlIHRvZGF5ICovCiAJQlVHX09OKHJldCA9PSAtRUlPQ0JRVUVVRUQgJiYgIShmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpKTsKIAotCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fRFNZTkMgJiYgIWRpcmVjdF9pbykgfHwgSVNfU1lOQyhpbm9kZSkgfHwKLQkgICAgKGZpbGUtPmZfZmxhZ3MgJiBPX0RJUkVDVCAmJiBoYXNfcmVmY291bnQpKSB7CisJaWYgKCgoZmlsZS0+Zl9mbGFncyAmIE9fRFNZTkMpICYmICFkaXJlY3RfaW8pIHx8IElTX1NZTkMoaW5vZGUpIHx8CisJICAgICgoZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKSAmJiBoYXNfcmVmY291bnQpKSB7CiAJCXJldCA9IGZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZShmaWxlLT5mX21hcHBpbmcsIHBvcywKIAkJCQkJICAgICAgIHBvcyArIGNvdW50IC0gMSk7CiAJCWlmIChyZXQgPCAwKQpAQCAtMjAzMyw3ICsyMDMzLDcgQEAKIAkJCQkJCSAgICAgIHBvcyArIGNvdW50IC0gMSk7CiAJfQogCi0JLyogCisJLyoKIAkgKiBkZWVwIGluIGdfZl9hX3dfbigpLT5vY2ZzMl9kaXJlY3RfSU8gd2UgcGFzcyBpbiBhIG9jZnMyX2Rpb19lbmRfaW8KIAkgKiBmdW5jdGlvbiBwb2ludGVyIHdoaWNoIGlzIGNhbGxlZCB3aGVuIG9fZGlyZWN0IGlvIGNvbXBsZXRlcyBzbyB0aGF0CiAJICogaXQgY2FuIHVubG9jayBvdXIgcncgbG9jay4gIChpdCdzIHRoZSBjbHVzdGVyZWQgZXF1aXZhbGVudCBvZgpAQCAtMjE5OCw3ICsyMTk4LDcgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCS8qIAorCS8qCiAJICogYnVmZmVyZWQgcmVhZHMgcHJvdGVjdCB0aGVtc2VsdmVzIGluIC0+cmVhZHBhZ2UoKS4gIE9fRElSRUNUIHJlYWRzCiAJICogbmVlZCBsb2NrcyB0byBwcm90ZWN0IHBlbmRpbmcgcmVhZHMgZnJvbSByYWNpbmcgd2l0aCB0cnVuY2F0ZS4KIAkgKi8KQEAgLTIyMjAsMTAgKzIyMjAsMTAgQEAKIAkgKiBXZSdyZSBmaW5lIGxldHRpbmcgZm9sa3MgcmFjZSB0cnVuY2F0ZXMgYW5kIGV4dGVuZGluZwogCSAqIHdyaXRlcyB3aXRoIHJlYWQgYWNyb3NzIHRoZSBjbHVzdGVyLCBqdXN0IGxpa2UgdGhleSBjYW4KIAkgKiBsb2NhbGx5LiBIZW5jZSBubyByd19sb2NrIGR1cmluZyByZWFkLgotCSAqIAorCSAqCiAJICogVGFrZSBhbmQgZHJvcCB0aGUgbWV0YSBkYXRhIGxvY2sgdG8gdXBkYXRlIGlub2RlIGZpZWxkcwogCSAqIGxpa2UgaV9zaXplLiBUaGlzIGFsbG93cyB0aGUgY2hlY2tzIGRvd24gYmVsb3cKLQkgKiBnZW5lcmljX2ZpbGVfYWlvX3JlYWQoKSBhIGNoYW5jZSBvZiBhY3R1YWxseSB3b3JraW5nLiAKKwkgKiBnZW5lcmljX2ZpbGVfYWlvX3JlYWQoKSBhIGNoYW5jZSBvZiBhY3R1YWxseSB3b3JraW5nLgogCSAqLwogCXJldCA9IG9jZnMyX2lub2RlX2xvY2tfYXRpbWUoaW5vZGUsIGZpbHAtPmZfdmZzbW50LCAmbG9ja19sZXZlbCk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTIyNDgsNyArMjI0OCw3IEBACiBiYWlsOgogCWlmIChoYXZlX2FsbG9jX3NlbSkKIAkJdXBfcmVhZCgmaW5vZGUtPmlfYWxsb2Nfc2VtKTsKLQlpZiAocndfbGV2ZWwgIT0gLTEpIAorCWlmIChyd19sZXZlbCAhPSAtMSkKIAkJb2NmczJfcndfdW5sb2NrKGlub2RlLCByd19sZXZlbCk7CiAJbWxvZ19leGl0KHJldCk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lub2RlLmMgYi9mcy9vY2ZzMi9pbm9kZS5jCmluZGV4IDAyOTdmYjguLjg4NDU5YmQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lub2RlLmMKKysrIGIvZnMvb2NmczIvaW5vZGUuYwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAJaWYgKGFyZ3MtPmZpX2ZsYWdzICYgT0NGUzJfRklfRkxBR19PUlBIQU5fUkVDT1ZFUlkpIHsKIAkJc3RhdHVzID0gb2NmczJfdHJ5X29wZW5fbG9jayhpbm9kZSwgMCk7CiAJCWlmIChzdGF0dXMpIHsKLQkJCW1ha2VfYmFkX2lub2RlKGlub2RlKTsJCisJCQltYWtlX2JhZF9pbm9kZShpbm9kZSk7CiAJCQlyZXR1cm4gc3RhdHVzOwogCQl9CiAJfQpAQCAtNjg0LDcgKzY4NCw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotLyogCisvKgogICogU2VyaWFsaXplIHdpdGggb3JwaGFuIGRpciByZWNvdmVyeS4gSWYgdGhlIHByb2Nlc3MgZG9pbmcKICAqIHJlY292ZXJ5IG9uIHRoaXMgb3JwaGFuIGRpciBkb2VzIGFuIGlnZXQoKSB3aXRoIHRoZSBkaXIKICAqIGlfbXV0ZXggaGVsZCwgd2UnbGwgZGVhZGxvY2sgaGVyZS4gSW5zdGVhZCB3ZSBkZXRlY3QgdGhpcwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvaW9jdGwuYyBiL2ZzL29jZnMyL2lvY3RsLmMKaW5kZXggMzFmYmIwNi4uN2Q5ZDljMSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvaW9jdGwuYworKysgYi9mcy9vY2ZzMi9pb2N0bC5jCkBAIC03LDYgKzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogCiAjZGVmaW5lIE1MT0dfTUFTS19QUkVGSVggTUxfSU5PREUKICNpbmNsdWRlIDxjbHVzdGVyL21hc2tsb2cuaD4KQEAgLTE4MSw2ICsxODIsMTAgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBsb25nIG9jZnMyX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwlib29sIHByZXNlcnZlOworCXN0cnVjdCByZWZsaW5rX2FyZ3VtZW50cyBhcmdzOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIE9DRlMyX0lPQzMyX0dFVEZMQUdTOgogCQljbWQgPSBPQ0ZTMl9JT0NfR0VURkxBR1M7CkBAIC0xOTUsOCArMjAwLDE1IEBACiAJY2FzZSBPQ0ZTMl9JT0NfR1JPVVBfRVhURU5EOgogCWNhc2UgT0NGUzJfSU9DX0dST1VQX0FERDoKIAljYXNlIE9DRlMyX0lPQ19HUk9VUF9BREQ2NDoKLQljYXNlIE9DRlMyX0lPQ19SRUZMSU5LOgogCQlicmVhazsKKwljYXNlIE9DRlMyX0lPQ19SRUZMSU5LOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIChzdHJ1Y3QgcmVmbGlua19hcmd1bWVudHMgKilhcmcsCisJCQkJICAgc2l6ZW9mKGFyZ3MpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlwcmVzZXJ2ZSA9IChhcmdzLnByZXNlcnZlICE9IDApOworCisJCXJldHVybiBvY2ZzMl9yZWZsaW5rX2lvY3RsKGlub2RlLCBjb21wYXRfcHRyKGFyZ3Mub2xkX3BhdGgpLAorCQkJCQkgICBjb21wYXRfcHRyKGFyZ3MubmV3X3BhdGgpLCBwcmVzZXJ2ZSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9qb3VybmFsLmMgYi9mcy9vY2ZzMi9qb3VybmFsLmMKaW5kZXggYmYzNGM0OS4uOTMzNmM2MCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5jCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuYwpAQCAtMjAzNCw3ICsyMDM0LDcgQEAKIAkJc3RhdHVzID0gLUVOT0VOVDsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlyZXR1cm4gc3RhdHVzOwotCX0JCisJfQogCiAJbXV0ZXhfbG9jaygmb3JwaGFuX2Rpcl9pbm9kZS0+aV9tdXRleCk7CiAJc3RhdHVzID0gb2NmczJfaW5vZGVfbG9jayhvcnBoYW5fZGlyX2lub2RlLCBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyLmggYi9mcy9vY2ZzMi9vY2ZzMi5oCmluZGV4IDkzNjJlZWEuLjc0MGY0NDggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL29jZnMyLmgKKysrIGIvZnMvb2NmczIvb2NmczIuaApAQCAtMTM2LDYgKzEzNiwxMCBAQAogI2RlZmluZSBPQ0ZTMl9MT0NLX1BFTkRJTkcgICAgICAgKDB4MDAwMDA0MDApIC8qIFRoaXMgbG9ja3JlcyBpcyBwZW5kaW5nIGEKIAkJCQkJCSBjYWxsIHRvIGRsbV9sb2NrLiAgT25seQogCQkJCQkJIGV4aXN0cyB3aXRoIEJVU1kgc2V0LiAqLworI2RlZmluZSBPQ0ZTMl9MT0NLX1VQQ09OVkVSVF9GSU5JU0hJTkcgKDB4MDAwMDA4MDApIC8qIGJsb2NrcyB0aGUgZGMgdGhyZWFkCisJCQkJCQkgICAgICogZnJvbSBkb3duY29udmVydGluZworCQkJCQkJICAgICAqIGJlZm9yZSB0aGUgdXBjb252ZXJ0CisJCQkJCQkgICAgICogaGFzIGNvbXBsZXRlZCAqLwogCiBzdHJ1Y3Qgb2NmczJfbG9ja19yZXNfb3BzOwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9vY2ZzMl9mcy5oIGIvZnMvb2NmczIvb2NmczJfZnMuaAppbmRleCAxYTFhNjc5Li43NjM4YTM4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMl9mcy5oCisrKyBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKQEAgLTE0MTcsOSArMTQxNywxNiBAQAogCXJldHVybiBibG9ja3NpemUgLSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZGlub2RlLCBpZDIuaV9zeW1saW5rKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgb2NmczJfbWF4X2lubGluZV9kYXRhKGludCBibG9ja3NpemUpCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9tYXhfaW5saW5lX2RhdGFfd2l0aF94YXR0cihpbnQgYmxvY2tzaXplLAorCQkJCQkJICAgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkpCiB7Ci0JcmV0dXJuIGJsb2Nrc2l6ZSAtIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX2RhdGEuaWRfZGF0YSk7CisJaWYgKGRpICYmIChkaS0+aV9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpKQorCQlyZXR1cm4gYmxvY2tzaXplIC0KKwkJCW9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX2RhdGEuaWRfZGF0YSkgLQorCQkJZGktPmlfeGF0dHJfaW5saW5lX3NpemU7CisJZWxzZQorCQlyZXR1cm4gYmxvY2tzaXplIC0KKwkJCW9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX2RhdGEuaWRfZGF0YSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2V4dGVudF9yZWNzX3Blcl9pbm9kZShpbnQgYmxvY2tzaXplKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcmVmY291bnR0cmVlLmMgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwppbmRleCA3NGRiMmJlLi44YWU2NWM5IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYworKysgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwpAQCAtMjk0NSw3ICsyOTQ1LDcgQEAKIAogCXdoaWxlIChvZmZzZXQgPCBlbmQpIHsKIAkJcGFnZV9pbmRleCA9IG9mZnNldCA+PiBQQUdFX0NBQ0hFX1NISUZUOwotCQltYXBfZW5kID0gKHBhZ2VfaW5kZXggKyAxKSA8PCBQQUdFX0NBQ0hFX1NISUZUOworCQltYXBfZW5kID0gKChsb2ZmX3QpcGFnZV9pbmRleCArIDEpIDw8IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJCWlmIChtYXBfZW5kID4gZW5kKQogCQkJbWFwX2VuZCA9IGVuZDsKIApAQCAtMjk1Nyw4ICsyOTU3LDEyIEBACiAKIAkJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShtYXBwaW5nLCBwYWdlX2luZGV4KTsKIAotCQkvKiBUaGlzIHBhZ2UgY2FuJ3QgYmUgZGlydGllZCBiZWZvcmUgd2UgQ29XIGl0IG91dC4gKi8KLQkJQlVHX09OKFBhZ2VEaXJ0eShwYWdlKSk7CisJCS8qCisJCSAqIEluIGNhc2UgUEFHRV9DQUNIRV9TSVpFIDw9IENMVVNURVJfU0laRSwgVGhpcyBwYWdlCisJCSAqIGNhbid0IGJlIGRpcnRpZWQgYmVmb3JlIHdlIENvVyBpdCBvdXQuCisJCSAqLworCQlpZiAoUEFHRV9DQUNIRV9TSVpFIDw9IE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZSkKKwkJCUJVR19PTihQYWdlRGlydHkocGFnZSkpOwogCiAJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CiAJCQlyZXQgPSBibG9ja19yZWFkX2Z1bGxfcGFnZShwYWdlLCBvY2ZzMl9nZXRfYmxvY2spOwpAQCAtMzE3MCw3ICszMTc0LDcgQEAKIAogCXdoaWxlIChvZmZzZXQgPCBlbmQpIHsKIAkJcGFnZV9pbmRleCA9IG9mZnNldCA+PiBQQUdFX0NBQ0hFX1NISUZUOwotCQltYXBfZW5kID0gKHBhZ2VfaW5kZXggKyAxKSA8PCBQQUdFX0NBQ0hFX1NISUZUOworCQltYXBfZW5kID0gKChsb2ZmX3QpcGFnZV9pbmRleCArIDEpIDw8IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJCWlmIChtYXBfZW5kID4gZW5kKQogCQkJbWFwX2VuZCA9IGVuZDsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3RhY2tfbzJjYi5jIGIvZnMvb2NmczIvc3RhY2tfbzJjYi5jCmluZGV4IGU0OWM0MTAuLjMwMzhjOTIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N0YWNrX28yY2IuYworKysgYi9mcy9vY2ZzMi9zdGFja19vMmNiLmMKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCXUzMiBkbG1fa2V5OwogCXN0cnVjdCBkbG1fY3R4dCAqZGxtOwogCXN0cnVjdCBvMmRsbV9wcml2YXRlICpwcml2OwotCXN0cnVjdCBkbG1fcHJvdG9jb2xfdmVyc2lvbiBkbG1fdmVyc2lvbjsKKwlzdHJ1Y3QgZGxtX3Byb3RvY29sX3ZlcnNpb24gZnNfdmVyc2lvbjsKIAogCUJVR19PTihjb25uID09IE5VTEwpOwogCUJVR19PTihvMmNiX3N0YWNrLnNwX3Byb3RvID09IE5VTEwpOwpAQCAtMzA0LDE4ICszMDQsMTggQEAKIAkvKiB1c2VkIGJ5IHRoZSBkbG0gY29kZSB0byBtYWtlIG1lc3NhZ2UgaGVhZGVycyB1bmlxdWUsIGVhY2gKIAkgKiBub2RlIGluIHRoaXMgZG9tYWluIG11c3QgYWdyZWUgb24gdGhpcy4gKi8KIAlkbG1fa2V5ID0gY3JjMzJfbGUoMCwgY29ubi0+Y2NfbmFtZSwgY29ubi0+Y2NfbmFtZWxlbik7Ci0JZGxtX3ZlcnNpb24ucHZfbWFqb3IgPSBjb25uLT5jY192ZXJzaW9uLnB2X21ham9yOwotCWRsbV92ZXJzaW9uLnB2X21pbm9yID0gY29ubi0+Y2NfdmVyc2lvbi5wdl9taW5vcjsKKwlmc192ZXJzaW9uLnB2X21ham9yID0gY29ubi0+Y2NfdmVyc2lvbi5wdl9tYWpvcjsKKwlmc192ZXJzaW9uLnB2X21pbm9yID0gY29ubi0+Y2NfdmVyc2lvbi5wdl9taW5vcjsKIAotCWRsbSA9IGRsbV9yZWdpc3Rlcl9kb21haW4oY29ubi0+Y2NfbmFtZSwgZGxtX2tleSwgJmRsbV92ZXJzaW9uKTsKKwlkbG0gPSBkbG1fcmVnaXN0ZXJfZG9tYWluKGNvbm4tPmNjX25hbWUsIGRsbV9rZXksICZmc192ZXJzaW9uKTsKIAlpZiAoSVNfRVJSKGRsbSkpIHsKIAkJcmMgPSBQVFJfRVJSKGRsbSk7CiAJCW1sb2dfZXJybm8ocmMpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIAotCWNvbm4tPmNjX3ZlcnNpb24ucHZfbWFqb3IgPSBkbG1fdmVyc2lvbi5wdl9tYWpvcjsKLQljb25uLT5jY192ZXJzaW9uLnB2X21pbm9yID0gZGxtX3ZlcnNpb24ucHZfbWlub3I7CisJY29ubi0+Y2NfdmVyc2lvbi5wdl9tYWpvciA9IGZzX3ZlcnNpb24ucHZfbWFqb3I7CisJY29ubi0+Y2NfdmVyc2lvbi5wdl9taW5vciA9IGZzX3ZlcnNpb24ucHZfbWlub3I7CiAJY29ubi0+Y2NfbG9ja3NwYWNlID0gZGxtOwogCiAJZGxtX3JlZ2lzdGVyX2V2aWN0aW9uX2NiKGRsbSwgJnByaXYtPm9wX2V2aWN0aW9uX2NiKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IDI2MDY5OTEuLjc1NWNkNDkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtMTA2Miw3ICsxMDYyLDcgQEAKIAkJCQkgICAgICJmaWxlIHN5c3RlbSwgYnV0IHdyaXRlIGFjY2VzcyBpcyAiCiAJCQkJICAgICAidW5hdmFpbGFibGUuXG4iKTsKIAkJCWVsc2UKLQkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CQkJCisJCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byByZWFkX3N1cGVyX2Vycm9yOwogCQl9CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N5bWxpbmsuYyBiL2ZzL29jZnMyL3N5bWxpbmsuYwppbmRleCA0OWIxMzNjLi4zMjQ5OWQyMSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ltbGluay5jCisrKyBiL2ZzL29jZnMyL3N5bWxpbmsuYwpAQCAtMTM3LDIwICsxMzcsMjAgQEAKIAl9CiAKIAltZW1jcHkobGluaywgdGFyZ2V0LCBsZW4pOwotCW5kX3NldF9saW5rKG5kLCBsaW5rKTsKIAogYmFpbDoKKwluZF9zZXRfbGluayhuZCwgc3RhdHVzID8gRVJSX1BUUihzdGF0dXMpIDogbGluayk7CiAJYnJlbHNlKGJoKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwotCXJldHVybiBzdGF0dXMgPyBFUlJfUFRSKHN0YXR1cykgOiBsaW5rOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBvY2ZzMl9mYXN0X3B1dF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQsIHZvaWQgKmNvb2tpZSkKIHsKLQljaGFyICpsaW5rID0gY29va2llOwotCi0Ja2ZyZWUobGluayk7CisJY2hhciAqbGluayA9IG5kX2dldF9saW5rKG5kKTsKKwlpZiAoIUlTX0VSUihsaW5rKSkKKwkJa2ZyZWUobGluayk7CiB9CiAKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3VwdG9kYXRlLmMgYi9mcy9vY2ZzMi91cHRvZGF0ZS5jCmluZGV4IGM2MTM2OTMuLmEwYTEyMGUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3VwdG9kYXRlLmMKKysrIGIvZnMvb2NmczIvdXB0b2RhdGUuYwpAQCAtMjY3LDggKzI2Nyw4IEBACiB9CiAKIC8qIFdhcm5pbmc6IGV2ZW4gaWYgaXQgcmV0dXJucyB0cnVlLCB0aGlzIGRvZXMgKm5vdCogZ3VhcmFudGVlIHRoYXQKLSAqIHRoZSBibG9jayBpcyBzdG9yZWQgaW4gb3VyIGlub2RlIG1ldGFkYXRhIGNhY2hlLiAKLSAqIAorICogdGhlIGJsb2NrIGlzIHN0b3JlZCBpbiBvdXIgaW5vZGUgbWV0YWRhdGEgY2FjaGUuCisgKgogICogVGhpcyBjYW4gYmUgY2FsbGVkIHVuZGVyIGxvY2tfYnVmZmVyKCkKICAqLwogaW50IG9jZnMyX2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwppbmRleCA2NGJjODk5Li5lODg2NWMxIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKKysrIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCkBAIC00MTIsOSArNDEyLDEwIEBACiAJcGRldiA9IHBhcnRfdG9fZGV2KHApOwogCiAJcC0+c3RhcnRfc2VjdCA9IHN0YXJ0OwotCXAtPmFsaWdubWVudF9vZmZzZXQgPSBxdWV1ZV9zZWN0b3JfYWxpZ25tZW50X29mZnNldChkaXNrLT5xdWV1ZSwgc3RhcnQpOwotCXAtPmRpc2NhcmRfYWxpZ25tZW50ID0gcXVldWVfc2VjdG9yX2Rpc2NhcmRfYWxpZ25tZW50KGRpc2stPnF1ZXVlLAotCQkJCQkJCSAgICAgIHN0YXJ0KTsKKwlwLT5hbGlnbm1lbnRfb2Zmc2V0ID0KKwkJcXVldWVfbGltaXRfYWxpZ25tZW50X29mZnNldCgmZGlzay0+cXVldWUtPmxpbWl0cywgc3RhcnQpOworCXAtPmRpc2NhcmRfYWxpZ25tZW50ID0KKwkJcXVldWVfbGltaXRfZGlzY2FyZF9hbGlnbm1lbnQoJmRpc2stPnF1ZXVlLT5saW1pdHMsIHN0YXJ0KTsKIAlwLT5ucl9zZWN0cyA9IGxlbjsKIAlwLT5wYXJ0bm8gPSBwYXJ0bm87CiAJcC0+cG9saWN5ID0gZ2V0X2Rpc2tfcm8oZGlzayk7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggMTNiNWQwNy4uMThlMjBmZSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtMjcwLDcgKzI3MCw5IEBACiAJCWJsb2NrZWQgPSBwLT5ibG9ja2VkOwogCQljb2xsZWN0X3NpZ2lnbl9zaWdjYXRjaChwLCAmaWdub3JlZCwgJmNhdWdodCk7CiAJCW51bV90aHJlYWRzID0gYXRvbWljX3JlYWQoJnAtPnNpZ25hbC0+Y291bnQpOworCQlyY3VfcmVhZF9sb2NrKCk7ICAvKiBGSVhNRTogaXMgdGhpcyBjb3JyZWN0PyAqLwogCQlxc2l6ZSA9IGF0b21pY19yZWFkKCZfX3Rhc2tfY3JlZChwKS0+dXNlci0+c2lncGVuZGluZyk7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlxbGltID0gcC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TSUdQRU5ESU5HXS5ybGltX2N1cjsKIAkJdW5sb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggZTQyYmJkOC4uNjIzZTJmZiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTEwOTUsOCArMTA5NSwxMiBAQAogCWlmICghY2FwYWJsZShDQVBfQVVESVRfQ09OVFJPTCkpCiAJCXJldHVybiAtRVBFUk07CiAKLQlpZiAoY3VycmVudCAhPSBwaWRfdGFzayhwcm9jX3BpZChpbm9kZSksIFBJRFRZUEVfUElEKSkKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWYgKGN1cnJlbnQgIT0gcGlkX3Rhc2socHJvY19waWQoaW5vZGUpLCBQSURUWVBFX1BJRCkpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAtRVBFUk07CisJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKGNvdW50ID49IFBBR0VfU0laRSkKIAkJY291bnQgPSBQQUdFX1NJWkUgLSAxOwpAQCAtMjM2OSwxNiArMjM3MywzMCBAQAogewogCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyA9IGRlbnRyeS0+ZF9zYi0+c19mc19pbmZvOwogCXBpZF90IHRnaWQgPSB0YXNrX3RnaWRfbnJfbnMoY3VycmVudCwgbnMpOwotCWNoYXIgdG1wW1BST0NfTlVNQlVGXTsKLQlpZiAoIXRnaWQpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwotCXNwcmludGYodG1wLCAiJWQiLCB0YXNrX3RnaWRfbnJfbnMoY3VycmVudCwgbnMpKTsKLQlyZXR1cm4gRVJSX1BUUih2ZnNfZm9sbG93X2xpbmsobmQsdG1wKSk7CisJY2hhciAqbmFtZSA9IEVSUl9QVFIoLUVOT0VOVCk7CisJaWYgKHRnaWQpIHsKKwkJbmFtZSA9IF9fZ2V0bmFtZSgpOworCQlpZiAoIW5hbWUpCisJCQluYW1lID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZWxzZQorCQkJc3ByaW50ZihuYW1lLCAiJWQiLCB0Z2lkKTsKKwl9CisJbmRfc2V0X2xpbmsobmQsIG5hbWUpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwcm9jX3NlbGZfcHV0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKKwkJCQl2b2lkICpjb29raWUpCit7CisJY2hhciAqcyA9IG5kX2dldF9saW5rKG5kKTsKKwlpZiAoIUlTX0VSUihzKSkKKwkJX19wdXRuYW1lKHMpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY19zZWxmX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLnJlYWRsaW5rCT0gcHJvY19zZWxmX3JlYWRsaW5rLAogCS5mb2xsb3dfbGluawk9IHByb2Nfc2VsZl9mb2xsb3dfbGluaywKKwkucHV0X2xpbmsJPSBwcm9jX3NlbGZfcHV0X2xpbmssCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wcm9jX2RldnRyZWUuYyBiL2ZzL3Byb2MvcHJvY19kZXZ0cmVlLmMKaW5kZXggMTIzMjU3Yi4uZjg2NTBkYyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX2RldnRyZWUuYworKysgYi9mcy9wcm9jL3Byb2NfZGV2dHJlZS5jCkBAIC0xMCwxNiArMTAsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCi0jaWZuZGVmIEhBVkVfQVJDSF9ERVZUUkVFX0ZJWFVQUwogc3RhdGljIGlubGluZSB2b2lkIHNldF9ub2RlX3Byb2NfZW50cnkoc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkgICAgICAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSkKIHsKLX0KKyNpZmRlZiBIQVZFX0FSQ0hfREVWVFJFRV9GSVhVUFMKKwlucC0+cGRlID0gZGU7CiAjZW5kaWYKK30KIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19kZXZpY2VfdHJlZTsKIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaW5vZGUuYyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKaW5kZXggOTA4N2IxMC4uMmRmMGY1YyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaW5vZGUuYworKysgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCkBAIC0xNDk3LDkgKzE0OTcsMTEgQEAKIAogCWFyZ3Mub2JqZWN0aWQgPSBrZXktPm9uX2Rpc2tfa2V5Lmtfb2JqZWN0aWQ7CiAJYXJncy5kaXJpZCA9IGtleS0+b25fZGlza19rZXkua19kaXJfaWQ7CisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKHMpOwogCWlub2RlID0gaWdldDVfbG9ja2VkKHMsIGtleS0+b25fZGlza19rZXkua19vYmplY3RpZCwKIAkJCSAgICAgcmVpc2VyZnNfZmluZF9hY3RvciwgcmVpc2VyZnNfaW5pdF9sb2NrZWRfaW5vZGUsCiAJCQkgICAgICh2b2lkICopKCZhcmdzKSk7CisJcmVpc2VyZnNfd3JpdGVfbG9jayhzKTsKIAlpZiAoIWlub2RlKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvam91cm5hbC5jIGIvZnMvcmVpc2VyZnMvam91cm5hbC5jCmluZGV4IDgzYWM0ZDMuLmJhOTg1NDYgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYworKysgYi9mcy9yZWlzZXJmcy9qb3VybmFsLmMKQEAgLTI5MTMsNyArMjkxMyw5IEBACiAJam91cm5hbC0+al9tb3VudF9pZCA9IDEwOwogCWpvdXJuYWwtPmpfc3RhdGUgPSAwOwogCWF0b21pY19zZXQoJihqb3VybmFsLT5qX2psb2NrKSwgMCk7CisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKHNiKTsKIAlqb3VybmFsLT5qX2Nub2RlX2ZyZWVfbGlzdCA9IGFsbG9jYXRlX2Nub2RlcyhudW1fY25vZGVzKTsKKwlyZWlzZXJmc193cml0ZV9sb2NrKHNiKTsKIAlqb3VybmFsLT5qX2Nub2RlX2ZyZWVfb3JpZyA9IGpvdXJuYWwtPmpfY25vZGVfZnJlZV9saXN0OwogCWpvdXJuYWwtPmpfY25vZGVfZnJlZSA9IGpvdXJuYWwtPmpfY25vZGVfZnJlZV9saXN0ID8gbnVtX2Nub2RlcyA6IDA7CiAJam91cm5hbC0+al9jbm9kZV91c2VkID0gMDsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2lub2RlLmMgYi9mcy9zeXNmcy9pbm9kZS5jCmluZGV4IDIyMGI3NTguLjZhMDZhMWQgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2lub2RlLmMKKysrIGIvZnMvc3lzZnMvaW5vZGUuYwpAQCAtODEsMjQgKzgxLDIzIEBACiAJCWlmICghc2RfYXR0cnMpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJc2QtPnNfaWF0dHIgPSBzZF9hdHRyczsKLQl9IGVsc2UgewotCQkvKiBhdHRyaWJ1dGVzIHdlcmUgY2hhbmdlZCBhdCBsZWFzdCBvbmNlIGluIHBhc3QgKi8KLQkJaWF0dHJzID0gJnNkX2F0dHJzLT5pYV9pYXR0cjsKKwl9CisJLyogYXR0cmlidXRlcyB3ZXJlIGNoYW5nZWQgYXQgbGVhc3Qgb25jZSBpbiBwYXN0ICovCisJaWF0dHJzID0gJnNkX2F0dHJzLT5pYV9pYXR0cjsKIAotCQlpZiAoaWFfdmFsaWQgJiBBVFRSX1VJRCkKLQkJCWlhdHRycy0+aWFfdWlkID0gaWF0dHItPmlhX3VpZDsKLQkJaWYgKGlhX3ZhbGlkICYgQVRUUl9HSUQpCi0JCQlpYXR0cnMtPmlhX2dpZCA9IGlhdHRyLT5pYV9naWQ7Ci0JCWlmIChpYV92YWxpZCAmIEFUVFJfQVRJTUUpCi0JCQlpYXR0cnMtPmlhX2F0aW1lID0gaWF0dHItPmlhX2F0aW1lOwotCQlpZiAoaWFfdmFsaWQgJiBBVFRSX01USU1FKQotCQkJaWF0dHJzLT5pYV9tdGltZSA9IGlhdHRyLT5pYV9tdGltZTsKLQkJaWYgKGlhX3ZhbGlkICYgQVRUUl9DVElNRSkKLQkJCWlhdHRycy0+aWFfY3RpbWUgPSBpYXR0ci0+aWFfY3RpbWU7Ci0JCWlmIChpYV92YWxpZCAmIEFUVFJfTU9ERSkgewotCQkJdW1vZGVfdCBtb2RlID0gaWF0dHItPmlhX21vZGU7Ci0JCQlpYXR0cnMtPmlhX21vZGUgPSBzZC0+c19tb2RlID0gbW9kZTsKLQkJfQorCWlmIChpYV92YWxpZCAmIEFUVFJfVUlEKQorCQlpYXR0cnMtPmlhX3VpZCA9IGlhdHRyLT5pYV91aWQ7CisJaWYgKGlhX3ZhbGlkICYgQVRUUl9HSUQpCisJCWlhdHRycy0+aWFfZ2lkID0gaWF0dHItPmlhX2dpZDsKKwlpZiAoaWFfdmFsaWQgJiBBVFRSX0FUSU1FKQorCQlpYXR0cnMtPmlhX2F0aW1lID0gaWF0dHItPmlhX2F0aW1lOworCWlmIChpYV92YWxpZCAmIEFUVFJfTVRJTUUpCisJCWlhdHRycy0+aWFfbXRpbWUgPSBpYXR0ci0+aWFfbXRpbWU7CisJaWYgKGlhX3ZhbGlkICYgQVRUUl9DVElNRSkKKwkJaWF0dHJzLT5pYV9jdGltZSA9IGlhdHRyLT5pYV9jdGltZTsKKwlpZiAoaWFfdmFsaWQgJiBBVFRSX01PREUpIHsKKwkJdW1vZGVfdCBtb2RlID0gaWF0dHItPmlhX21vZGU7CisJCWlhdHRycy0+aWFfbW9kZSA9IHNkLT5zX21vZGUgPSBtb2RlOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9NYWtlZmlsZSBiL2ZzL3hmcy9NYWtlZmlsZQppbmRleCA1NjY0MWZlLi41YzVhMzY2IDEwMDY0NAotLS0gYS9mcy94ZnMvTWFrZWZpbGUKKysrIGIvZnMveGZzL01ha2VmaWxlCkBAIC0xNiw3ICsxNiw3IEBACiAjIEluYy4sICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogIwogCi1FWFRSQV9DRkxBR1MgKz0JIC1JJChzcmMpIC1JJChzcmMpL2xpbnV4LTIuNiAtZnVuc2lnbmVkLWNoYXIKK0VYVFJBX0NGTEFHUyArPQkgLUkkKHNyYykgLUkkKHNyYykvbGludXgtMi42CiAKIFhGU19MSU5VWCA6PSBsaW51eC0yLjYKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmMgYi9mcy94ZnMvbGludXgtMi42L2ttZW0uYwppbmRleCAyZDNmOTBhLi5iYzc0MDU1IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L2ttZW0uYworKysgYi9mcy94ZnMvbGludXgtMi42L2ttZW0uYwpAQCAtMTYsNyArMTYsNiBAQAogICogSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgpAQCAtMjQsOCArMjMsMjUgQEAKICNpbmNsdWRlICJ0aW1lLmgiCiAjaW5jbHVkZSAia21lbS5oIgogCi0jZGVmaW5lIE1BWF9WTUFMTE9DUwk2Ci0jZGVmaW5lIE1BWF9TTEFCX1NJWkUJMHgyMDAwMAorLyoKKyAqIEdyZWVkeSBhbGxvY2F0aW9uLiAgTWF5IGZhaWwgYW5kIG1heSByZXR1cm4gdm1hbGxvY2VkIG1lbW9yeS4KKyAqCisgKiBNdXN0IGJlIGZyZWVkIHVzaW5nIGttZW1fZnJlZV9sYXJnZS4KKyAqLwordm9pZCAqCitrbWVtX3phbGxvY19ncmVlZHkoc2l6ZV90ICpzaXplLCBzaXplX3QgbWluc2l6ZSwgc2l6ZV90IG1heHNpemUpCit7CisJdm9pZAkJKnB0cjsKKwlzaXplX3QJCWttc2l6ZSA9IG1heHNpemU7CisKKwl3aGlsZSAoIShwdHIgPSBrbWVtX3phbGxvY19sYXJnZShrbXNpemUpKSkgeworCQlpZiAoKGttc2l6ZSA+Pj0gMSkgPD0gbWluc2l6ZSkKKwkJCWttc2l6ZSA9IG1pbnNpemU7CisJfQorCWlmIChwdHIpCisJCSpzaXplID0ga21zaXplOworCXJldHVybiBwdHI7Cit9CiAKIHZvaWQgKgoga21lbV9hbGxvYyhzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQpAQCAtMzQsMTkgKzUwLDggQEAKIAlnZnBfdAlsZmxhZ3MgPSBrbWVtX2ZsYWdzX2NvbnZlcnQoZmxhZ3MpOwogCXZvaWQJKnB0cjsKIAotI2lmZGVmIERFQlVHCi0JaWYgKHVubGlrZWx5KCEoZmxhZ3MgJiBLTV9MQVJHRSkgJiYgKHNpemUgPiBQQUdFX1NJWkUpKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJMYXJnZSAlcyBhdHRlbXB0LCBzaXplPSVsZFxuIiwKLQkJCV9fZnVuY19fLCAobG9uZylzaXplKTsKLQkJZHVtcF9zdGFjaygpOwotCX0KLSNlbmRpZgotCiAJZG8gewotCQlpZiAoc2l6ZSA8IE1BWF9TTEFCX1NJWkUgfHwgcmV0cmllcyA+IE1BWF9WTUFMTE9DUykKLQkJCXB0ciA9IGttYWxsb2Moc2l6ZSwgbGZsYWdzKTsKLQkJZWxzZQotCQkJcHRyID0gX192bWFsbG9jKHNpemUsIGxmbGFncywgUEFHRV9LRVJORUwpOworCQlwdHIgPSBrbWFsbG9jKHNpemUsIGxmbGFncyk7CiAJCWlmIChwdHIgfHwgKGZsYWdzICYgKEtNX01BWUZBSUx8S01fTk9TTEVFUCkpKQogCQkJcmV0dXJuIHB0cjsKIAkJaWYgKCEoKytyZXRyaWVzICUgMTAwKSkKQEAgLTY4LDI3ICs3Myw2IEBACiAJcmV0dXJuIHB0cjsKIH0KIAotdm9pZCAqCi1rbWVtX3phbGxvY19ncmVlZHkoc2l6ZV90ICpzaXplLCBzaXplX3QgbWluc2l6ZSwgc2l6ZV90IG1heHNpemUsCi0JCSAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncykKLXsKLQl2b2lkCQkqcHRyOwotCXNpemVfdAkJa21zaXplID0gbWF4c2l6ZTsKLQl1bnNpZ25lZCBpbnQJa21mbGFncyA9IChmbGFncyAmIH5LTV9TTEVFUCkgfCBLTV9OT1NMRUVQOwotCi0Jd2hpbGUgKCEocHRyID0ga21lbV96YWxsb2Moa21zaXplLCBrbWZsYWdzKSkpIHsKLQkJaWYgKChrbXNpemUgPD0gbWluc2l6ZSkgJiYgKGZsYWdzICYgS01fTk9TTEVFUCkpCi0JCQlicmVhazsKLQkJaWYgKChrbXNpemUgPj49IDEpIDw9IG1pbnNpemUpIHsKLQkJCWttc2l6ZSA9IG1pbnNpemU7Ci0JCQlrbWZsYWdzID0gZmxhZ3M7Ci0JCX0KLQl9Ci0JaWYgKHB0cikKLQkJKnNpemUgPSBrbXNpemU7Ci0JcmV0dXJuIHB0cjsKLX0KLQogdm9pZAoga21lbV9mcmVlKGNvbnN0IHZvaWQgKnB0cikKIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYva21lbS5oIGIvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmgKaW5kZXggMTc5Y2JkNi4uZjdjOGY3YSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogLyoKICAqIEdlbmVyYWwgbWVtb3J5IGFsbG9jYXRpb24gaW50ZXJmYWNlcwpAQCAtMzAsNyArMzEsNiBAQAogI2RlZmluZSBLTV9OT1NMRUVQCTB4MDAwMnUKICNkZWZpbmUgS01fTk9GUwkJMHgwMDA0dQogI2RlZmluZSBLTV9NQVlGQUlMCTB4MDAwOHUKLSNkZWZpbmUgS01fTEFSR0UJMHgwMDEwdQogCiAvKgogICogV2UgdXNlIGEgc3BlY2lhbCBwcm9jZXNzIGZsYWcgdG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxiYWNrcyBpbnRvCkBAIC00Miw3ICs0Miw3IEBACiB7CiAJZ2ZwX3QJbGZsYWdzOwogCi0JQlVHX09OKGZsYWdzICYgfihLTV9TTEVFUHxLTV9OT1NMRUVQfEtNX05PRlN8S01fTUFZRkFJTHxLTV9MQVJHRSkpOworCUJVR19PTihmbGFncyAmIH4oS01fU0xFRVB8S01fTk9TTEVFUHxLTV9OT0ZTfEtNX01BWUZBSUwpKTsKIAogCWlmIChmbGFncyAmIEtNX05PU0xFRVApIHsKIAkJbGZsYWdzID0gR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTjsKQEAgLTU2LDEwICs1NiwyNSBAQAogCiBleHRlcm4gdm9pZCAqa21lbV9hbGxvYyhzaXplX3QsIHVuc2lnbmVkIGludCBfX25vY2FzdCk7CiBleHRlcm4gdm9pZCAqa21lbV96YWxsb2Moc2l6ZV90LCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOwotZXh0ZXJuIHZvaWQgKmttZW1femFsbG9jX2dyZWVkeShzaXplX3QgKiwgc2l6ZV90LCBzaXplX3QsIHVuc2lnbmVkIGludCBfX25vY2FzdCk7CiBleHRlcm4gdm9pZCAqa21lbV9yZWFsbG9jKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIHVuc2lnbmVkIGludCBfX25vY2FzdCk7CiBleHRlcm4gdm9pZCAga21lbV9mcmVlKGNvbnN0IHZvaWQgKik7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCAqa21lbV96YWxsb2NfbGFyZ2Uoc2l6ZV90IHNpemUpCit7CisJdm9pZCAqcHRyOworCisJcHRyID0gdm1hbGxvYyhzaXplKTsKKwlpZiAocHRyKQorCQltZW1zZXQocHRyLCAwLCBzaXplKTsKKwlyZXR1cm4gcHRyOworfQorc3RhdGljIGlubGluZSB2b2lkIGttZW1fZnJlZV9sYXJnZSh2b2lkICpwdHIpCit7CisJdmZyZWUocHRyKTsKK30KKworZXh0ZXJuIHZvaWQgKmttZW1femFsbG9jX2dyZWVkeShzaXplX3QgKiwgc2l6ZV90LCBzaXplX3QpOworCiAvKgogICogWm9uZSBpbnRlcmZhY2VzCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FjbC5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKaW5kZXggODgzY2E1YS4uYmY4NWJiZSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAlzdHJ1Y3QgeGZzX2FjbCAqeGZzX2FjbDsKIAlpbnQgbGVuID0gc2l6ZW9mKHN0cnVjdCB4ZnNfYWNsKTsKLQljaGFyICplYV9uYW1lOworCXVuc2lnbmVkIGNoYXIgKmVhX25hbWU7CiAJaW50IGVycm9yOwogCiAJYWNsID0gZ2V0X2NhY2hlZF9hY2woaW5vZGUsIHR5cGUpOwpAQCAtMTMzLDcgKzEzMyw4IEBACiAJaWYgKCF4ZnNfYWNsKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWVycm9yID0gLXhmc19hdHRyX2dldChpcCwgZWFfbmFtZSwgKGNoYXIgKil4ZnNfYWNsLCAmbGVuLCBBVFRSX1JPT1QpOworCWVycm9yID0gLXhmc19hdHRyX2dldChpcCwgZWFfbmFtZSwgKHVuc2lnbmVkIGNoYXIgKil4ZnNfYWNsLAorCQkJCQkJCSZsZW4sIEFUVFJfUk9PVCk7CiAJaWYgKGVycm9yKSB7CiAJCS8qCiAJCSAqIElmIHRoZSBhdHRyaWJ1dGUgZG9lc24ndCBleGlzdCBtYWtlIHN1cmUgd2UgaGF2ZSBhIG5lZ2F0aXZlCkBAIC0xNjIsNyArMTYzLDcgQEAKIHhmc19zZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCiB7CiAJc3RydWN0IHhmc19pbm9kZSAqaXAgPSBYRlNfSShpbm9kZSk7Ci0JY2hhciAqZWFfbmFtZTsKKwl1bnNpZ25lZCBjaGFyICplYV9uYW1lOwogCWludCBlcnJvcjsKIAogCWlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKQpAQCAtMTk0LDcgKzE5NSw3IEBACiAJCQkoc2l6ZW9mKHN0cnVjdCB4ZnNfYWNsX2VudHJ5KSAqCiAJCQkgKFhGU19BQ0xfTUFYX0VOVFJJRVMgLSBhY2wtPmFfY291bnQpKTsKIAotCQllcnJvciA9IC14ZnNfYXR0cl9zZXQoaXAsIGVhX25hbWUsIChjaGFyICopeGZzX2FjbCwKKwkJZXJyb3IgPSAteGZzX2F0dHJfc2V0KGlwLCBlYV9uYW1lLCAodW5zaWduZWQgY2hhciAqKXhmc19hY2wsCiAJCQkJbGVuLCBBVFRSX1JPT1QpOwogCiAJCWtmcmVlKHhmc19hY2wpOwpAQCAtMjYyLDcgKzI2Myw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLXhmc19hY2xfZXhpc3RzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKm5hbWUpCit4ZnNfYWNsX2V4aXN0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBjaGFyICpuYW1lKQogewogCWludCBsZW4gPSBzaXplb2Yoc3RydWN0IHhmc19hY2wpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCmluZGV4IDc3YjhiZTguLjZmNzZiYTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlncmF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3Rfc29ydC5oPgogCiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2ludW0uaCIKQEAgLTc2LDYgKzc3LDI3IEBACiAjZGVmaW5lIHhmc19idWZfZGVhbGxvY2F0ZShicCkgXAogCWttZW1fem9uZV9mcmVlKHhmc19idWZfem9uZSwgKGJwKSk7CiAKK3N0YXRpYyBpbmxpbmUgaW50Cit4ZnNfYnVmX2lzX3ZtYXBwZWQoCisJc3RydWN0IHhmc19idWYJKmJwKQoreworCS8qCisJICogUmV0dXJuIHRydWUgaWYgdGhlIGJ1ZmZlciBpcyB2bWFwcGVkLgorCSAqCisJICogVGhlIFhCRl9NQVBQRUQgZmxhZyBpcyBzZXQgaWYgdGhlIGJ1ZmZlciBzaG91bGQgYmUgbWFwcGVkLCBidXQgdGhlCisJICogY29kZSBpcyBjbGV2ZXIgZW5vdWdoIHRvIGtub3cgaXQgZG9lc24ndCBoYXZlIHRvIG1hcCBhIHNpbmdsZSBwYWdlLAorCSAqIHNvIHRoZSBjaGVjayBoYXMgdG8gYmUgYm90aCBmb3IgWEJGX01BUFBFRCBhbmQgYnAtPmJfcGFnZV9jb3VudCA+IDEuCisJICovCisJcmV0dXJuIChicC0+Yl9mbGFncyAmIFhCRl9NQVBQRUQpICYmIGJwLT5iX3BhZ2VfY291bnQgPiAxOworfQorCitzdGF0aWMgaW5saW5lIGludAoreGZzX2J1Zl92bWFwX2xlbigKKwlzdHJ1Y3QgeGZzX2J1ZgkqYnApCit7CisJcmV0dXJuIChicC0+Yl9wYWdlX2NvdW50ICogUEFHRV9TSVpFKSAtIGJwLT5iX29mZnNldDsKK30KKwogLyoKICAqCVBhZ2UgUmVnaW9uIGludGVyZmFjZXMuCiAgKgpAQCAtMzE0LDcgKzMzNiw3IEBACiAJaWYgKGJwLT5iX2ZsYWdzICYgKF9YQkZfUEFHRV9DQUNIRXxfWEJGX1BBR0VTKSkgewogCQl1aW50CQlpOwogCi0JCWlmICgoYnAtPmJfZmxhZ3MgJiBYQkZfTUFQUEVEKSAmJiAoYnAtPmJfcGFnZV9jb3VudCA+IDEpKQorCQlpZiAoeGZzX2J1Zl9pc192bWFwcGVkKGJwKSkKIAkJCWZyZWVfYWRkcmVzcyhicC0+Yl9hZGRyIC0gYnAtPmJfb2Zmc2V0KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgYnAtPmJfcGFnZV9jb3VudDsgaSsrKSB7CkBAIC0xMDUxLDIyICsxMDczLDMwIEBACiB9CiAKIGludAoteGZzX2Jhd3JpdGUoCi0Jdm9pZAkJCSptcCwKK3hmc19id3JpdGUoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCiAJc3RydWN0IHhmc19idWYJCSpicCkKIHsKLQl0cmFjZV94ZnNfYnVmX2Jhd3JpdGUoYnAsIF9SRVRfSVBfKTsKKwlpbnQJCQlpb3dhaXQgPSAoYnAtPmJfZmxhZ3MgJiBYQkZfQVNZTkMpID09IDA7CisJaW50CQkJZXJyb3IgPSAwOwogCi0JQVNTRVJUKGJwLT5iX2JuICE9IFhGU19CVUZfREFERFJfTlVMTCk7CisJYnAtPmJfc3RyYXQgPSB4ZnNfYmRzdHJhdF9jYjsKKwlicC0+Yl9tb3VudCA9IG1wOworCWJwLT5iX2ZsYWdzIHw9IFhCRl9XUklURTsKKwlpZiAoIWlvd2FpdCkKKwkJYnAtPmJfZmxhZ3MgfD0gX1hCRl9SVU5fUVVFVUVTOwogCiAJeGZzX2J1Zl9kZWx3cmlfZGVxdWV1ZShicCk7CisJeGZzX2J1Zl9pb3N0cmF0ZWd5KGJwKTsKIAotCWJwLT5iX2ZsYWdzICY9IH4oWEJGX1JFQUQgfCBYQkZfREVMV1JJIHwgWEJGX1JFQURfQUhFQUQpOwotCWJwLT5iX2ZsYWdzIHw9IChYQkZfV1JJVEUgfCBYQkZfQVNZTkMgfCBfWEJGX1JVTl9RVUVVRVMpOworCWlmIChpb3dhaXQpIHsKKwkJZXJyb3IgPSB4ZnNfYnVmX2lvd2FpdChicCk7CisJCWlmIChlcnJvcikKKwkJCXhmc19mb3JjZV9zaHV0ZG93bihtcCwgU0hVVERPV05fTUVUQV9JT19FUlJPUik7CisJCXhmc19idWZfcmVsc2UoYnApOworCX0KIAotCWJwLT5iX21vdW50ID0gbXA7Ci0JYnAtPmJfc3RyYXQgPSB4ZnNfYmRzdHJhdF9jYjsKLQlyZXR1cm4geGZzX2Jkc3RyYXRfY2IoYnApOworCXJldHVybiBlcnJvcjsKIH0KIAogdm9pZApAQCAtMTA4NSw2ICsxMTE1LDEyNiBAQAogCXhmc19idWZfZGVsd3JpX3F1ZXVlKGJwLCAxKTsKIH0KIAorLyoKKyAqIENhbGxlZCB3aGVuIHdlIHdhbnQgdG8gc3RvcCBhIGJ1ZmZlciBmcm9tIGdldHRpbmcgd3JpdHRlbiBvciByZWFkLgorICogV2UgYXR0YWNoIHRoZSBFSU8gZXJyb3IsIG11Y2sgd2l0aCBpdHMgZmxhZ3MsIGFuZCBjYWxsIGJpb2RvbmUKKyAqIHNvIHRoYXQgdGhlIHByb3BlciBpb2RvbmUgY2FsbGJhY2tzIGdldCBjYWxsZWQuCisgKi8KK1NUQVRJQyBpbnQKK3hmc19iaW9lcnJvcigKKwl4ZnNfYnVmX3QgKmJwKQoreworI2lmZGVmIFhGU0VSUk9SREVCVUcKKwlBU1NFUlQoWEZTX0JVRl9JU1JFQUQoYnApIHx8IGJwLT5iX2lvZG9uZSk7CisjZW5kaWYKKworCS8qCisJICogTm8gbmVlZCB0byB3YWl0IHVudGlsIHRoZSBidWZmZXIgaXMgdW5waW5uZWQsIHdlIGFyZW4ndCBmbHVzaGluZyBpdC4KKwkgKi8KKwlYRlNfQlVGX0VSUk9SKGJwLCBFSU8pOworCisJLyoKKwkgKiBXZSdyZSBjYWxsaW5nIGJpb2RvbmUsIHNvIGRlbGV0ZSBYQkZfRE9ORSBmbGFnLgorCSAqLworCVhGU19CVUZfVU5SRUFEKGJwKTsKKwlYRlNfQlVGX1VOREVMQVlXUklURShicCk7CisJWEZTX0JVRl9VTkRPTkUoYnApOworCVhGU19CVUZfU1RBTEUoYnApOworCisJWEZTX0JVRl9DTFJfQkRTVFJBVF9GVU5DKGJwKTsKKwl4ZnNfYmlvZG9uZShicCk7CisKKwlyZXR1cm4gRUlPOworfQorCisvKgorICogU2FtZSBhcyB4ZnNfYmlvZXJyb3IsIGV4Y2VwdCB0aGF0IHdlIGFyZSByZWxlYXNpbmcgdGhlIGJ1ZmZlcgorICogaGVyZSBvdXJzZWx2ZXMsIGFuZCBhdm9pZGluZyB0aGUgYmlvZG9uZSBjYWxsLgorICogVGhpcyBpcyBtZWFudCBmb3IgdXNlcmRhdGEgZXJyb3JzOyBtZXRhZGF0YSBidWZzIGNvbWUgd2l0aAorICogaW9kb25lIGZ1bmN0aW9ucyBhdHRhY2hlZCwgc28gdGhhdCB3ZSBjYW4gdHJhY2sgZG93biBlcnJvcnMuCisgKi8KK1NUQVRJQyBpbnQKK3hmc19iaW9lcnJvcl9yZWxzZSgKKwlzdHJ1Y3QgeGZzX2J1ZgkqYnApCit7CisJaW50NjRfdAkJZmwgPSBYRlNfQlVGX0JGTEFHUyhicCk7CisJLyoKKwkgKiBObyBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIGJ1ZmZlciBpcyB1bnBpbm5lZC4KKwkgKiBXZSBhcmVuJ3QgZmx1c2hpbmcgaXQuCisJICoKKwkgKiBjaHVua2hvbGQgZXhwZWN0cyBCX0RPTkUgdG8gYmUgc2V0LCB3aGV0aGVyCisJICogd2UgYWN0dWFsbHkgZmluaXNoIHRoZSBJL08gb3Igbm90LiBXZSBkb24ndCB3YW50IHRvCisJICogY2hhbmdlIHRoYXQgaW50ZXJmYWNlLgorCSAqLworCVhGU19CVUZfVU5SRUFEKGJwKTsKKwlYRlNfQlVGX1VOREVMQVlXUklURShicCk7CisJWEZTX0JVRl9ET05FKGJwKTsKKwlYRlNfQlVGX1NUQUxFKGJwKTsKKwlYRlNfQlVGX0NMUl9JT0RPTkVfRlVOQyhicCk7CisJWEZTX0JVRl9DTFJfQkRTVFJBVF9GVU5DKGJwKTsKKwlpZiAoIShmbCAmIFhCRl9BU1lOQykpIHsKKwkJLyoKKwkJICogTWFyayBiX2Vycm9yIGFuZCBCX0VSUk9SIF9ib3RoXy4KKwkJICogTG90J3Mgb2YgY2h1bmtjYWNoZSBjb2RlIGFzc3VtZXMgdGhhdC4KKwkJICogVGhlcmUncyBubyByZWFzb24gdG8gbWFyayBlcnJvciBmb3IKKwkJICogQVNZTkMgYnVmZmVycy4KKwkJICovCisJCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7CisJCVhGU19CVUZfRklOSVNIX0lPV0FJVChicCk7CisJfSBlbHNlIHsKKwkJeGZzX2J1Zl9yZWxzZShicCk7CisJfQorCisJcmV0dXJuIEVJTzsKK30KKworCisvKgorICogQWxsIHhmcyBtZXRhZGF0YSBidWZmZXJzIGV4Y2VwdCBsb2cgc3RhdGUgbWFjaGluZSBidWZmZXJzCisgKiBnZXQgdGhpcyBhdHRhY2hlZCBhcyB0aGVpciBiX2Jkc3RyYXQgY2FsbGJhY2sgZnVuY3Rpb24uCisgKiBUaGlzIGlzIHNvIHRoYXQgd2UgY2FuIGNhdGNoIGEgYnVmZmVyCisgKiBhZnRlciBwcmVtYXR1cmVseSB1bnBpbm5pbmcgaXQgdG8gZm9yY2libHkgc2h1dGRvd24gdGhlIGZpbGVzeXN0ZW0uCisgKi8KK2ludAoreGZzX2Jkc3RyYXRfY2IoCisJc3RydWN0IHhmc19idWYJKmJwKQoreworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGJwLT5iX21vdW50KSkgeworCQl0cmFjZV94ZnNfYmRzdHJhdF9zaHV0KGJwLCBfUkVUX0lQXyk7CisJCS8qCisJCSAqIE1ldGFkYXRhIHdyaXRlIHRoYXQgZGlkbid0IGdldCBsb2dnZWQgYnV0CisJCSAqIHdyaXR0ZW4gZGVsYXllZCBhbnl3YXkuIFRoZXNlIGFyZW4ndCBhc3NvY2lhdGVkCisJCSAqIHdpdGggYSB0cmFuc2FjdGlvbiwgYW5kIGNhbiBiZSBpZ25vcmVkLgorCQkgKi8KKwkJaWYgKCFicC0+Yl9pb2RvbmUgJiYgIVhGU19CVUZfSVNSRUFEKGJwKSkKKwkJCXJldHVybiB4ZnNfYmlvZXJyb3JfcmVsc2UoYnApOworCQllbHNlCisJCQlyZXR1cm4geGZzX2Jpb2Vycm9yKGJwKTsKKwl9CisKKwl4ZnNfYnVmX2lvcmVxdWVzdChicCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXcmFwcGVyIGFyb3VuZCBiZHN0cmF0IHNvIHRoYXQgd2UgY2FuIHN0b3AgZGF0YSBmcm9tIGdvaW5nIHRvIGRpc2sgaW4gY2FzZQorICogd2UgYXJlIHNodXR0aW5nIGRvd24gdGhlIGZpbGVzeXN0ZW0uICBUeXBpY2FsbHkgdXNlciBkYXRhIGdvZXMgdGhydSB0aGlzCisgKiBwYXRoOyBvbmUgb2YgdGhlIGV4Y2VwdGlvbnMgaXMgdGhlIHN1cGVyYmxvY2suCisgKi8KK3ZvaWQKK3hmc2Jkc3RyYXQoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhmc19idWYJCSpicCkKK3sKKwlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpIHsKKwkJdHJhY2VfeGZzX2Jkc3RyYXRfc2h1dChicCwgX1JFVF9JUF8pOworCQl4ZnNfYmlvZXJyb3JfcmVsc2UoYnApOworCQlyZXR1cm47CisJfQorCisJeGZzX2J1Zl9pb3JlcXVlc3QoYnApOworfQorCiBTVEFUSUMgdm9pZAogX3hmc19idWZfaW9lbmQoCiAJeGZzX2J1Zl90CQkqYnAsCkBAIC0xMTA3LDYgKzEyNTcsOSBAQAogCiAJeGZzX2J1Zl9pb2Vycm9yKGJwLCAtZXJyb3IpOwogCisJaWYgKCFlcnJvciAmJiB4ZnNfYnVmX2lzX3ZtYXBwZWQoYnApICYmIChicC0+Yl9mbGFncyAmIFhCRl9SRUFEKSkKKwkJaW52YWxpZGF0ZV9rZXJuZWxfdm1hcF9yYW5nZShicC0+Yl9hZGRyLCB4ZnNfYnVmX3ZtYXBfbGVuKGJwKSk7CisKIAlkbyB7CiAJCXN0cnVjdCBwYWdlCSpwYWdlID0gYnZlYy0+YnZfcGFnZTsKIApAQCAtMTIxNiw2ICsxMzY5LDEwIEBACiAKIHN1Ym1pdF9pbzoKIAlpZiAobGlrZWx5KGJpby0+Ymlfc2l6ZSkpIHsKKwkJaWYgKHhmc19idWZfaXNfdm1hcHBlZChicCkpIHsKKwkJCWZsdXNoX2tlcm5lbF92bWFwX3JhbmdlKGJwLT5iX2FkZHIsCisJCQkJCQl4ZnNfYnVmX3ZtYXBfbGVuKGJwKSk7CisJCX0KIAkJc3VibWl0X2JpbyhydywgYmlvKTsKIAkJaWYgKHNpemUpCiAJCQlnb3RvIG5leHRfY2h1bms7CkBAIC0xMjk2LDcgKzE0NTMsNyBAQAogCXhmc19idWZfdAkJKmJwLAkvKiBidWZmZXIgdG8gcHJvY2VzcwkJKi8KIAlzaXplX3QJCQlib2ZmLAkvKiBzdGFydGluZyBidWZmZXIgb2Zmc2V0CSovCiAJc2l6ZV90CQkJYnNpemUsCS8qIGxlbmd0aCB0byBjb3B5CQkqLwotCWNhZGRyX3QJCQlkYXRhLAkvKiBkYXRhIGFkZHJlc3MJCQkqLworCXZvaWQJCQkqZGF0YSwJLyogZGF0YSBhZGRyZXNzCQkJKi8KIAl4ZnNfYnVmX3J3X3QJCW1vZGUpCS8qIHJlYWQvd3JpdGUvemVybyBmbGFnCQkqLwogewogCXNpemVfdAkJCWJlbmQsIGNwb2ZmLCBjc2l6ZTsKQEAgLTEzNzgsOCArMTUzNSw4IEBACiAKIAlidHAtPmJ0X2hhc2hzaGlmdCA9IGV4dGVybmFsID8gMyA6IDg7CS8qIDggb3IgMjU2IGJ1Y2tldHMgKi8KIAlidHAtPmJ0X2hhc2htYXNrID0gKDEgPDwgYnRwLT5idF9oYXNoc2hpZnQpIC0gMTsKLQlidHAtPmJ0X2hhc2ggPSBrbWVtX3phbGxvYygoMSA8PCBidHAtPmJ0X2hhc2hzaGlmdCkgKgotCQkJCQlzaXplb2YoeGZzX2J1Zmhhc2hfdCksIEtNX1NMRUVQIHwgS01fTEFSR0UpOworCWJ0cC0+YnRfaGFzaCA9IGttZW1femFsbG9jX2xhcmdlKCgxIDw8IGJ0cC0+YnRfaGFzaHNoaWZ0KSAqCisJCQkJCSBzaXplb2YoeGZzX2J1Zmhhc2hfdCkpOwogCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBidHAtPmJ0X2hhc2hzaGlmdCk7IGkrKykgewogCQlzcGluX2xvY2tfaW5pdCgmYnRwLT5idF9oYXNoW2ldLmJoX2xvY2spOwogCQlJTklUX0xJU1RfSEVBRCgmYnRwLT5idF9oYXNoW2ldLmJoX2xpc3QpOwpAQCAtMTM5MCw3ICsxNTQ3LDcgQEAKIHhmc19mcmVlX2J1Zmhhc2goCiAJeGZzX2J1ZnRhcmdfdAkJKmJ0cCkKIHsKLQlrbWVtX2ZyZWUoYnRwLT5idF9oYXNoKTsKKwlrbWVtX2ZyZWVfbGFyZ2UoYnRwLT5idF9oYXNoKTsKIAlidHAtPmJ0X2hhc2ggPSBOVUxMOwogfQogCkBAIC0xNTk1LDYgKzE3NTIsMTEgQEAKIAkJbGlzdF9kZWwoJmJwLT5iX2xpc3QpOwogCX0KIAorCWlmIChsaXN0X2VtcHR5KGR3cSkpIHsKKwkJLyogc3RhcnQgeGZzYnVmZCBhcyBpdCBpcyBhYm91dCB0byBoYXZlIHNvbWV0aGluZyB0byBkbyAqLworCQl3YWtlX3VwX3Byb2Nlc3MoYnAtPmJfdGFyZ2V0LT5idF90YXNrKTsKKwl9CisKIAlicC0+Yl9mbGFncyB8PSBfWEJGX0RFTFdSSV9ROwogCWxpc3RfYWRkX3RhaWwoJmJwLT5iX2xpc3QsIGR3cSk7CiAJYnAtPmJfcXVldWV0aW1lID0gamlmZmllczsKQEAgLTE2MjYsNiArMTc4OCwzNSBAQAogCXRyYWNlX3hmc19idWZfZGVsd3JpX2RlcXVldWUoYnAsIF9SRVRfSVBfKTsKIH0KIAorLyoKKyAqIElmIGEgZGVsd3JpIGJ1ZmZlciBuZWVkcyB0byBiZSBwdXNoZWQgYmVmb3JlIGl0IGhhcyBhZ2VkIG91dCwgdGhlbiBwcm9tb3RlCisgKiBpdCB0byB0aGUgaGVhZCBvZiB0aGUgZGVsd3JpIHF1ZXVlIHNvIHRoYXQgaXQgd2lsbCBiZSBmbHVzaGVkIG9uIHRoZSBuZXh0CisgKiB4ZnNidWZkIHJ1bi4gV2UgZG8gdGhpcyBieSByZXNldHRpbmcgdGhlIHF1ZXVldGltZSBvZiB0aGUgYnVmZmVyIHRvIGJlIG9sZGVyCisgKiB0aGFuIHRoZSBhZ2UgY3VycmVudGx5IG5lZWRlZCB0byBmbHVzaCB0aGUgYnVmZmVyLiBIZW5jZSB0aGUgbmV4dCB0aW1lIHRoZQorICogeGZzYnVmZCBzZWVzIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgY29uc2lkZXJlZCBvbGQgZW5vdWdoIHRvIGZsdXNoLgorICovCit2b2lkCit4ZnNfYnVmX2RlbHdyaV9wcm9tb3RlKAorCXN0cnVjdCB4ZnNfYnVmCSpicCkKK3sKKwlzdHJ1Y3QgeGZzX2J1ZnRhcmcgKmJ0cCA9IGJwLT5iX3RhcmdldDsKKwlsb25nCQlhZ2UgPSB4ZnNfYnVmX2FnZV9jZW50aXNlY3MgKiBtc2Vjc190b19qaWZmaWVzKDEwKSArIDE7CisKKwlBU1NFUlQoYnAtPmJfZmxhZ3MgJiBYQkZfREVMV1JJKTsKKwlBU1NFUlQoYnAtPmJfZmxhZ3MgJiBfWEJGX0RFTFdSSV9RKTsKKworCS8qCisJICogQ2hlY2sgdGhlIGJ1ZmZlciBhZ2UgYmVmb3JlIGxvY2tpbmcgdGhlIGRlbGF5ZWQgd3JpdGUgcXVldWUgYXMgd2UKKwkgKiBkb24ndCBuZWVkIHRvIHByb21vdGUgYnVmZmVycyB0aGF0IGFyZSBhbHJlYWR5IHBhc3QgdGhlIGZsdXNoIGFnZS4KKwkgKi8KKwlpZiAoYnAtPmJfcXVldWV0aW1lIDwgamlmZmllcyAtIGFnZSkKKwkJcmV0dXJuOworCWJwLT5iX3F1ZXVldGltZSA9IGppZmZpZXMgLSBhZ2U7CisJc3Bpbl9sb2NrKCZidHAtPmJ0X2RlbHdyaXRlX2xvY2spOworCWxpc3RfbW92ZSgmYnAtPmJfbGlzdCwgJmJ0cC0+YnRfZGVsd3JpdGVfcXVldWUpOworCXNwaW5fdW5sb2NrKCZidHAtPmJ0X2RlbHdyaXRlX2xvY2spOworfQorCiBTVEFUSUMgdm9pZAogeGZzX2J1Zl9ydW5hbGxfcXVldWVzKAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSpxdWV1ZSkKQEAgLTE2NDQsNiArMTgzNSw4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShidHAsICZ4ZnNfYnVmdGFyZ19saXN0LCBidF9saXN0KSB7CiAJCWlmICh0ZXN0X2JpdChYQlRfRk9SQ0VfU0xFRVAsICZidHAtPmJ0X2ZsYWdzKSkKIAkJCWNvbnRpbnVlOworCQlpZiAobGlzdF9lbXB0eSgmYnRwLT5idF9kZWx3cml0ZV9xdWV1ZSkpCisJCQljb250aW51ZTsKIAkJc2V0X2JpdChYQlRfRk9SQ0VfRkxVU0gsICZidHAtPmJ0X2ZsYWdzKTsKIAkJd2FrZV91cF9wcm9jZXNzKGJ0cC0+YnRfdGFzayk7CiAJfQpAQCAtMTY5NCwyMCArMTg4Nyw1MyBAQAogCiB9CiAKKy8qCisgKiBDb21wYXJlIGZ1bmN0aW9uIGlzIG1vcmUgY29tcGxleCB0aGFuIGl0IG5lZWRzIHRvIGJlIGJlY2F1c2UKKyAqIHRoZSByZXR1cm4gdmFsdWUgaXMgb25seSAzMiBiaXRzIGFuZCB3ZSBhcmUgZG9pbmcgY29tcGFyaXNvbnMKKyAqIG9uIDY0IGJpdCB2YWx1ZXMKKyAqLworc3RhdGljIGludAoreGZzX2J1Zl9jbXAoCisJdm9pZAkJKnByaXYsCisJc3RydWN0IGxpc3RfaGVhZCAqYSwKKwlzdHJ1Y3QgbGlzdF9oZWFkICpiKQoreworCXN0cnVjdCB4ZnNfYnVmCSphcCA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgeGZzX2J1ZiwgYl9saXN0KTsKKwlzdHJ1Y3QgeGZzX2J1ZgkqYnAgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IHhmc19idWYsIGJfbGlzdCk7CisJeGZzX2RhZGRyX3QJCWRpZmY7CisKKwlkaWZmID0gYXAtPmJfYm4gLSBicC0+Yl9ibjsKKwlpZiAoZGlmZiA8IDApCisJCXJldHVybiAtMTsKKwlpZiAoZGlmZiA+IDApCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCit2b2lkCit4ZnNfYnVmX2RlbHdyaV9zb3J0KAorCXhmc19idWZ0YXJnX3QJKnRhcmdldCwKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCWxpc3Rfc29ydChOVUxMLCBsaXN0LCB4ZnNfYnVmX2NtcCk7Cit9CisKIFNUQVRJQyBpbnQKIHhmc2J1ZmQoCiAJdm9pZAkJKmRhdGEpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCB0bXA7Ci0JeGZzX2J1ZnRhcmdfdAkqdGFyZ2V0ID0gKHhmc19idWZ0YXJnX3QgKilkYXRhOwotCWludAkJY291bnQ7Ci0JeGZzX2J1Zl90CSpicDsKKwl4ZnNfYnVmdGFyZ190ICAgKnRhcmdldCA9ICh4ZnNfYnVmdGFyZ190ICopZGF0YTsKIAogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01FTUFMTE9DOwogCiAJc2V0X2ZyZWV6YWJsZSgpOwogCiAJZG8geworCQlsb25nCWFnZSA9IHhmc19idWZfYWdlX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApOworCQlsb25nCXRvdXQgPSB4ZnNfYnVmX3RpbWVyX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApOworCQlpbnQJY291bnQgPSAwOworCQlzdHJ1Y3QgbGlzdF9oZWFkIHRtcDsKKwogCQlpZiAodW5saWtlbHkoZnJlZXppbmcoY3VycmVudCkpKSB7CiAJCQlzZXRfYml0KFhCVF9GT1JDRV9TTEVFUCwgJnRhcmdldC0+YnRfZmxhZ3MpOwogCQkJcmVmcmlnZXJhdG9yKCk7CkBAIC0xNzE1LDE3ICsxOTQxLDE2IEBACiAJCQljbGVhcl9iaXQoWEJUX0ZPUkNFX1NMRUVQLCAmdGFyZ2V0LT5idF9mbGFncyk7CiAJCX0KIAotCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoCi0JCQl4ZnNfYnVmX3RpbWVyX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKKwkJLyogc2xlZXAgZm9yIGEgbG9uZyB0aW1lIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uICovCisJCWlmIChsaXN0X2VtcHR5KCZ0YXJnZXQtPmJ0X2RlbHdyaXRlX3F1ZXVlKSkKKwkJCXRvdXQgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHRvdXQpOwogCi0JCXhmc19idWZfZGVsd3JpX3NwbGl0KHRhcmdldCwgJnRtcCwKLQkJCQl4ZnNfYnVmX2FnZV9jZW50aXNlY3MgKiBtc2Vjc190b19qaWZmaWVzKDEwKSk7Ci0KLQkJY291bnQgPSAwOworCQl4ZnNfYnVmX2RlbHdyaV9zcGxpdCh0YXJnZXQsICZ0bXAsIGFnZSk7CisJCWxpc3Rfc29ydChOVUxMLCAmdG1wLCB4ZnNfYnVmX2NtcCk7CiAJCXdoaWxlICghbGlzdF9lbXB0eSgmdG1wKSkgewotCQkJYnAgPSBsaXN0X2VudHJ5KHRtcC5uZXh0LCB4ZnNfYnVmX3QsIGJfbGlzdCk7Ci0JCQlBU1NFUlQodGFyZ2V0ID09IGJwLT5iX3RhcmdldCk7Ci0KKwkJCXN0cnVjdCB4ZnNfYnVmICpicDsKKwkJCWJwID0gbGlzdF9maXJzdF9lbnRyeSgmdG1wLCBzdHJ1Y3QgeGZzX2J1ZiwgYl9saXN0KTsKIAkJCWxpc3RfZGVsX2luaXQoJmJwLT5iX2xpc3QpOwogCQkJeGZzX2J1Zl9pb3N0cmF0ZWd5KGJwKTsKIAkJCWNvdW50Kys7CkBAIC0xNzUxLDQyICsxOTc2LDQ1IEBACiAJeGZzX2J1ZnRhcmdfdAkqdGFyZ2V0LAogCWludAkJd2FpdCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHRtcDsKLQl4ZnNfYnVmX3QJKmJwLCAqbjsKKwl4ZnNfYnVmX3QJKmJwOwogCWludAkJcGluY291bnQgPSAwOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisJTElTVF9IRUFEKHdhaXRfbGlzdCk7CiAKIAl4ZnNfYnVmX3J1bmFsbF9xdWV1ZXMoeGZzY29udmVydGRfd29ya3F1ZXVlKTsKIAl4ZnNfYnVmX3J1bmFsbF9xdWV1ZXMoeGZzZGF0YWRfd29ya3F1ZXVlKTsKIAl4ZnNfYnVmX3J1bmFsbF9xdWV1ZXMoeGZzbG9nZF93b3JrcXVldWUpOwogCiAJc2V0X2JpdChYQlRfRk9SQ0VfRkxVU0gsICZ0YXJnZXQtPmJ0X2ZsYWdzKTsKLQlwaW5jb3VudCA9IHhmc19idWZfZGVsd3JpX3NwbGl0KHRhcmdldCwgJnRtcCwgMCk7CisJcGluY291bnQgPSB4ZnNfYnVmX2RlbHdyaV9zcGxpdCh0YXJnZXQsICZ0bXBfbGlzdCwgMCk7CiAKIAkvKgotCSAqIERyb3BwZWQgdGhlIGRlbGF5ZWQgd3JpdGUgbGlzdCBsb2NrLCBub3cgd2FsayB0aGUgdGVtcG9yYXJ5IGxpc3QKKwkgKiBEcm9wcGVkIHRoZSBkZWxheWVkIHdyaXRlIGxpc3QgbG9jaywgbm93IHdhbGsgdGhlIHRlbXBvcmFyeSBsaXN0LgorCSAqIEFsbCBJL08gaXMgaXNzdWVkIGFzeW5jIGFuZCB0aGVuIGlmIHdlIG5lZWQgdG8gd2FpdCBmb3IgY29tcGxldGlvbgorCSAqIHdlIGRvIHRoYXQgYWZ0ZXIgaXNzdWluZyBhbGwgdGhlIElPLgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShicCwgbiwgJnRtcCwgYl9saXN0KSB7CisJbGlzdF9zb3J0KE5VTEwsICZ0bXBfbGlzdCwgeGZzX2J1Zl9jbXApOworCXdoaWxlICghbGlzdF9lbXB0eSgmdG1wX2xpc3QpKSB7CisJCWJwID0gbGlzdF9maXJzdF9lbnRyeSgmdG1wX2xpc3QsIHN0cnVjdCB4ZnNfYnVmLCBiX2xpc3QpOwogCQlBU1NFUlQodGFyZ2V0ID09IGJwLT5iX3RhcmdldCk7Ci0JCWlmICh3YWl0KQorCQlsaXN0X2RlbF9pbml0KCZicC0+Yl9saXN0KTsKKwkJaWYgKHdhaXQpIHsKIAkJCWJwLT5iX2ZsYWdzICY9IH5YQkZfQVNZTkM7Ci0JCWVsc2UKLQkJCWxpc3RfZGVsX2luaXQoJmJwLT5iX2xpc3QpOwotCisJCQlsaXN0X2FkZCgmYnAtPmJfbGlzdCwgJndhaXRfbGlzdCk7CisJCX0KIAkJeGZzX2J1Zl9pb3N0cmF0ZWd5KGJwKTsKIAl9CiAKLQlpZiAod2FpdCkKKwlpZiAod2FpdCkgeworCQkvKiBFeHBlZGl0ZSBhbmQgd2FpdCBmb3IgSU8gdG8gY29tcGxldGUuICovCiAJCWJsa19ydW5fYWRkcmVzc19zcGFjZSh0YXJnZXQtPmJ0X21hcHBpbmcpOworCQl3aGlsZSAoIWxpc3RfZW1wdHkoJndhaXRfbGlzdCkpIHsKKwkJCWJwID0gbGlzdF9maXJzdF9lbnRyeSgmd2FpdF9saXN0LCBzdHJ1Y3QgeGZzX2J1ZiwgYl9saXN0KTsKIAotCS8qCi0JICogUmVtYWluaW5nIGxpc3QgaXRlbXMgbXVzdCBiZSBmbHVzaGVkIGJlZm9yZSByZXR1cm5pbmcKLQkgKi8KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnRtcCkpIHsKLQkJYnAgPSBsaXN0X2VudHJ5KHRtcC5uZXh0LCB4ZnNfYnVmX3QsIGJfbGlzdCk7Ci0KLQkJbGlzdF9kZWxfaW5pdCgmYnAtPmJfbGlzdCk7Ci0JCXhmc19pb3dhaXQoYnApOwotCQl4ZnNfYnVmX3JlbHNlKGJwKTsKKwkJCWxpc3RfZGVsX2luaXQoJmJwLT5iX2xpc3QpOworCQkJeGZzX2lvd2FpdChicCk7CisJCQl4ZnNfYnVmX3JlbHNlKGJwKTsKKwkJfQogCX0KIAogCXJldHVybiBwaW5jb3VudDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKaW5kZXggYTM0YzdiNS4uMzg2ZTczNiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKQEAgLTIzMiwxMyArMjMyLDE3IEBACiBleHRlcm4gdm9pZCB4ZnNfYnVmX3VubG9jayh4ZnNfYnVmX3QgKik7CiAKIC8qIEJ1ZmZlciBSZWFkIGFuZCBXcml0ZSBSb3V0aW5lcyAqLwotZXh0ZXJuIGludCB4ZnNfYmF3cml0ZSh2b2lkICptcCwgeGZzX2J1Zl90ICpicCk7CitleHRlcm4gaW50IHhmc19id3JpdGUoc3RydWN0IHhmc19tb3VudCAqbXAsIHN0cnVjdCB4ZnNfYnVmICpicCk7CiBleHRlcm4gdm9pZCB4ZnNfYmR3cml0ZSh2b2lkICptcCwgeGZzX2J1Zl90ICpicCk7CisKK2V4dGVybiB2b2lkIHhmc2Jkc3RyYXQoc3RydWN0IHhmc19tb3VudCAqLCBzdHJ1Y3QgeGZzX2J1ZiAqKTsKK2V4dGVybiBpbnQgeGZzX2Jkc3RyYXRfY2Ioc3RydWN0IHhmc19idWYgKik7CisKIGV4dGVybiB2b2lkIHhmc19idWZfaW9lbmQoeGZzX2J1Zl90ICosCWludCk7CiBleHRlcm4gdm9pZCB4ZnNfYnVmX2lvZXJyb3IoeGZzX2J1Zl90ICosIGludCk7CiBleHRlcm4gaW50IHhmc19idWZfaW9yZXF1ZXN0KHhmc19idWZfdCAqKTsKIGV4dGVybiBpbnQgeGZzX2J1Zl9pb3dhaXQoeGZzX2J1Zl90ICopOwotZXh0ZXJuIHZvaWQgeGZzX2J1Zl9pb21vdmUoeGZzX2J1Zl90ICosIHNpemVfdCwgc2l6ZV90LCB4ZnNfY2FkZHJfdCwKK2V4dGVybiB2b2lkIHhmc19idWZfaW9tb3ZlKHhmc19idWZfdCAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCAqLAogCQkJCXhmc19idWZfcndfdCk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHhmc19idWZfaW9zdHJhdGVneSh4ZnNfYnVmX3QgKmJwKQpAQCAtMjYxLDYgKzI2NSw3IEBACiAKIC8qIERlbGF5ZWQgV3JpdGUgQnVmZmVyIFJvdXRpbmVzICovCiBleHRlcm4gdm9pZCB4ZnNfYnVmX2RlbHdyaV9kZXF1ZXVlKHhmc19idWZfdCAqKTsKK2V4dGVybiB2b2lkIHhmc19idWZfZGVsd3JpX3Byb21vdGUoeGZzX2J1Zl90ICopOwogCiAvKiBCdWZmZXIgRGFlbW9uIFNldHVwIFJvdXRpbmVzICovCiBleHRlcm4gaW50IHhmc19idWZfaW5pdCh2b2lkKTsKQEAgLTI3MCwzMyArMjc1LDE5IEBACiAJKHsgY2hhciBfX2JbQkRFVk5BTUVfU0laRV07IGJkZXZuYW1lKCh0YXJnZXQpLT5idF9iZGV2LCBfX2IpOyBfX2I7IH0pCiAKIAotI2RlZmluZSBYRlNfQl9BU1lOQwkJWEJGX0FTWU5DCi0jZGVmaW5lIFhGU19CX0RFTFdSSQkJWEJGX0RFTFdSSQotI2RlZmluZSBYRlNfQl9SRUFECQlYQkZfUkVBRAotI2RlZmluZSBYRlNfQl9XUklURQkJWEJGX1dSSVRFCi0jZGVmaW5lIFhGU19CX1NUQUxFCQlYQkZfU1RBTEUKLQotI2RlZmluZSBYRlNfQlVGX1RSWUxPQ0sJCVhCRl9UUllMT0NLCi0jZGVmaW5lIFhGU19JTkNPUkVfVFJZTE9DSwlYQkZfVFJZTE9DSwotI2RlZmluZSBYRlNfQlVGX0xPQ0sJCVhCRl9MT0NLCi0jZGVmaW5lIFhGU19CVUZfTUFQUEVECQlYQkZfTUFQUEVECi0KLSNkZWZpbmUgQlVGX0JVU1kJCVhCRl9ET05UX0JMT0NLCi0KICNkZWZpbmUgWEZTX0JVRl9CRkxBR1MoYnApCSgoYnApLT5iX2ZsYWdzKQogI2RlZmluZSBYRlNfQlVGX1pFUk9GTEFHUyhicCkJKChicCktPmJfZmxhZ3MgJj0gXAogCQl+KFhCRl9SRUFEfFhCRl9XUklURXxYQkZfQVNZTkN8WEJGX0RFTFdSSXxYQkZfT1JERVJFRCkpCiAKLSNkZWZpbmUgWEZTX0JVRl9TVEFMRShicCkJKChicCktPmJfZmxhZ3MgfD0gWEZTX0JfU1RBTEUpCi0jZGVmaW5lIFhGU19CVUZfVU5TVEFMRShicCkJKChicCktPmJfZmxhZ3MgJj0gflhGU19CX1NUQUxFKQotI2RlZmluZSBYRlNfQlVGX0lTU1RBTEUoYnApCSgoYnApLT5iX2ZsYWdzICYgWEZTX0JfU1RBTEUpCisjZGVmaW5lIFhGU19CVUZfU1RBTEUoYnApCSgoYnApLT5iX2ZsYWdzIHw9IFhCRl9TVEFMRSkKKyNkZWZpbmUgWEZTX0JVRl9VTlNUQUxFKGJwKQkoKGJwKS0+Yl9mbGFncyAmPSB+WEJGX1NUQUxFKQorI2RlZmluZSBYRlNfQlVGX0lTU1RBTEUoYnApCSgoYnApLT5iX2ZsYWdzICYgWEJGX1NUQUxFKQogI2RlZmluZSBYRlNfQlVGX1NVUEVSX1NUQUxFKGJwKQlkbyB7CQkJCVwKIAkJCQkJWEZTX0JVRl9TVEFMRShicCk7CVwKIAkJCQkJeGZzX2J1Zl9kZWx3cmlfZGVxdWV1ZShicCk7CVwKIAkJCQkJWEZTX0JVRl9ET05FKGJwKTsJXAogCQkJCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgWEZTX0JVRl9NQU5BR0UJCVhCRl9GU19NQU5BR0VECiAjZGVmaW5lIFhGU19CVUZfVU5NQU5BR0UoYnApCSgoYnApLT5iX2ZsYWdzICY9IH5YQkZfRlNfTUFOQUdFRCkKIAogI2RlZmluZSBYRlNfQlVGX0RFTEFZV1JJVEUoYnApCQkoKGJwKS0+Yl9mbGFncyB8PSBYQkZfREVMV1JJKQpAQCAtMzg1LDMxICszNzYsMTEgQEAKIAogI2RlZmluZSB4ZnNfYmlvbW92ZShicCwgb2ZmLCBsZW4sIGRhdGEsIHJ3KSBcCiAJICAgIHhmc19idWZfaW9tb3ZlKChicCksIChvZmYpLCAobGVuKSwgKGRhdGEpLCBcCi0JCSgocncpID09IFhGU19CX1dSSVRFKSA/IFhCUldfV1JJVEUgOiBYQlJXX1JFQUQpCisJCSgocncpID09IFhCRl9XUklURSkgPyBYQlJXX1dSSVRFIDogWEJSV19SRUFEKQogCiAjZGVmaW5lIHhmc19iaW96ZXJvKGJwLCBvZmYsIGxlbikgXAogCSAgICB4ZnNfYnVmX2lvbW92ZSgoYnApLCAob2ZmKSwgKGxlbiksIE5VTEwsIFhCUldfWkVSTykKIAotCi1zdGF0aWMgaW5saW5lIGludCBYRlNfYndyaXRlKHhmc19idWZfdCAqYnApCi17Ci0JaW50CWlvd2FpdCA9IChicC0+Yl9mbGFncyAmIFhCRl9BU1lOQykgPT0gMDsKLQlpbnQJZXJyb3IgPSAwOwotCi0JaWYgKCFpb3dhaXQpCi0JCWJwLT5iX2ZsYWdzIHw9IF9YQkZfUlVOX1FVRVVFUzsKLQotCXhmc19idWZfZGVsd3JpX2RlcXVldWUoYnApOwotCXhmc19idWZfaW9zdHJhdGVneShicCk7Ci0JaWYgKGlvd2FpdCkgewotCQllcnJvciA9IHhmc19idWZfaW93YWl0KGJwKTsKLQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JfQotCXJldHVybiBlcnJvcjsKLX0KLQotI2RlZmluZSBYRlNfYmRzdHJhdChicCkgeGZzX2J1Zl9pb3JlcXVlc3QoYnApCi0KICNkZWZpbmUgeGZzX2lvd2FpdChicCkJeGZzX2J1Zl9pb3dhaXQoYnApCiAKICNkZWZpbmUgeGZzX2JhcmVhZCh0YXJnZXQsIHJhYmxrbm8sIHJhbGVuKSAgXApAQCAtNDI0LDYgKzM5NSw3IEBACiBleHRlcm4gdm9pZCB4ZnNfd2FpdF9idWZ0YXJnKHhmc19idWZ0YXJnX3QgKik7CiBleHRlcm4gaW50IHhmc19zZXRzaXplX2J1ZnRhcmcoeGZzX2J1ZnRhcmdfdCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IHhmc19mbHVzaF9idWZ0YXJnKHhmc19idWZ0YXJnX3QgKiwgaW50KTsKKwogI2lmZGVmIENPTkZJR19LREJfTU9EVUxFUwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgKnhmc19nZXRfYnVmdGFyZ19saXN0KHZvaWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmMKaW5kZXggNzUwMWI4NS4uYjY5MThkNyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZnNfc3Vici5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYwpAQCAtNzksNyArNzksNyBAQAogCQl4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfSVRSVU5DQVRFRCk7CiAJCXJldCA9IC1maWxlbWFwX2ZkYXRhd3JpdGUobWFwcGluZyk7CiAJfQotCWlmIChmbGFncyAmIFhGU19CX0FTWU5DKQorCWlmIChmbGFncyAmIFhCRl9BU1lOQykKIAkJcmV0dXJuIHJldDsKIAlyZXQyID0geGZzX3dhaXRfb25fcGFnZXMoaXAsIGZpcnN0LCBsYXN0KTsKIAlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCmluZGV4IGEwMzRjZjYuLjRlYTFlZTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtNDQ3LDEyICs0NDcsMTIgQEAKIGludAogeGZzX2F0dHJtdWx0aV9hdHRyX2dldCgKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKLQljaGFyCQkJKm5hbWUsCi0JY2hhcgkJCV9fdXNlciAqdWJ1ZiwKKwl1bnNpZ25lZCBjaGFyCQkqbmFtZSwKKwl1bnNpZ25lZCBjaGFyCQlfX3VzZXIgKnVidWYsCiAJX191aW50MzJfdAkJKmxlbiwKIAlfX3VpbnQzMl90CQlmbGFncykKIHsKLQljaGFyCQkJKmtidWY7CisJdW5zaWduZWQgY2hhcgkJKmtidWY7CiAJaW50CQkJZXJyb3IgPSBFRkFVTFQ7CiAKIAlpZiAoKmxlbiA+IFhBVFRSX1NJWkVfTUFYKQpAQCAtNDc2LDEyICs0NzYsMTIgQEAKIGludAogeGZzX2F0dHJtdWx0aV9hdHRyX3NldCgKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKLQljaGFyCQkJKm5hbWUsCi0JY29uc3QgY2hhcgkJX191c2VyICp1YnVmLAorCXVuc2lnbmVkIGNoYXIJCSpuYW1lLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIJX191c2VyICp1YnVmLAogCV9fdWludDMyX3QJCWxlbiwKIAlfX3VpbnQzMl90CQlmbGFncykKIHsKLQljaGFyCQkJKmtidWY7CisJdW5zaWduZWQgY2hhcgkJKmtidWY7CiAJaW50CQkJZXJyb3IgPSBFRkFVTFQ7CiAKIAlpZiAoSVNfSU1NVVRBQkxFKGlub2RlKSB8fCBJU19BUFBFTkQoaW5vZGUpKQpAQCAtNTAxLDcgKzUwMSw3IEBACiBpbnQKIHhmc19hdHRybXVsdGlfYXR0cl9yZW1vdmUoCiAJc3RydWN0IGlub2RlCQkqaW5vZGUsCi0JY2hhcgkJCSpuYW1lLAorCXVuc2lnbmVkIGNoYXIJCSpuYW1lLAogCV9fdWludDMyX3QJCWZsYWdzKQogewogCWlmIChJU19JTU1VVEFCTEUoaW5vZGUpIHx8IElTX0FQUEVORChpbm9kZSkpCkBAIC01MTksNyArNTE5LDcgQEAKIAl4ZnNfZnNvcF9hdHRybXVsdGlfaGFuZGxlcmVxX3QgYW1faHJlcTsKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVudHJ5OwogCXVuc2lnbmVkIGludAkJaSwgc2l6ZTsKLQljaGFyCQkJKmF0dHJfbmFtZTsKKwl1bnNpZ25lZCBjaGFyCQkqYXR0cl9uYW1lOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLVhGU19FUlJPUihFUEVSTSk7CkBAIC01NDcsNyArNTQ3LDcgQEAKIAogCWVycm9yID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgYW1faHJlcS5vcGNvdW50OyBpKyspIHsKLQkJb3BzW2ldLmFtX2Vycm9yID0gc3RybmNweV9mcm9tX3VzZXIoYXR0cl9uYW1lLAorCQlvcHNbaV0uYW1fZXJyb3IgPSBzdHJuY3B5X2Zyb21fdXNlcigoY2hhciAqKWF0dHJfbmFtZSwKIAkJCQlvcHNbaV0uYW1fYXR0cm5hbWUsIE1BWE5BTUVMRU4pOwogCQlpZiAob3BzW2ldLmFtX2Vycm9yID09IDAgfHwgb3BzW2ldLmFtX2Vycm9yID09IE1BWE5BTUVMRU4pCiAJCQllcnJvciA9IC1FUkFOR0U7CkBAIC0xNDMxLDYgKzE0MzEsOSBAQAogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwogCisJCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpCisJCQlyZXR1cm4gLVhGU19FUlJPUihFUk9GUyk7CisKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbm91dCwgYXJnLCBzaXplb2YoaW5vdXQpKSkKIAkJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5oCmluZGV4IDdiZDdjNmEuLmQ1NjE3M2IgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuaApAQCAtNDUsMjMgKzQ1LDIzIEBACiBleHRlcm4gaW50CiB4ZnNfYXR0cm11bHRpX2F0dHJfZ2V0KAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLAotCWNoYXIJCQkqbmFtZSwKLQljaGFyCQkJX191c2VyICp1YnVmLAorCXVuc2lnbmVkIGNoYXIJCSpuYW1lLAorCXVuc2lnbmVkIGNoYXIJCV9fdXNlciAqdWJ1ZiwKIAlfX3VpbnQzMl90CQkqbGVuLAogCV9fdWludDMyX3QJCWZsYWdzKTsKIAogZXh0ZXJuIGludAotCXhmc19hdHRybXVsdGlfYXR0cl9zZXQoCit4ZnNfYXR0cm11bHRpX2F0dHJfc2V0KAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLAotCWNoYXIJCQkqbmFtZSwKLQljb25zdCBjaGFyCQlfX3VzZXIgKnVidWYsCisJdW5zaWduZWQgY2hhcgkJKm5hbWUsCisJY29uc3QgdW5zaWduZWQgY2hhcglfX3VzZXIgKnVidWYsCiAJX191aW50MzJfdAkJbGVuLAogCV9fdWludDMyX3QJCWZsYWdzKTsKIAogZXh0ZXJuIGludAogeGZzX2F0dHJtdWx0aV9hdHRyX3JlbW92ZSgKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKLQljaGFyCQkJKm5hbWUsCisJdW5zaWduZWQgY2hhcgkJKm5hbWUsCiAJX191aW50MzJfdAkJZmxhZ3MpOwogCiBleHRlcm4gc3RydWN0IGRlbnRyeSAqCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmMKaW5kZXggYmUxNTI3Yi4uMGJmNmQ2MSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuYwpAQCAtNDExLDcgKzQxMSw3IEBACiAJY29tcGF0X3hmc19mc29wX2F0dHJtdWx0aV9oYW5kbGVyZXFfdAlhbV9ocmVxOwogCXN0cnVjdCBkZW50cnkJCQkJKmRlbnRyeTsKIAl1bnNpZ25lZCBpbnQJCQkJaSwgc2l6ZTsKLQljaGFyCQkJCQkqYXR0cl9uYW1lOworCXVuc2lnbmVkIGNoYXIJCQkJKmF0dHJfbmFtZTsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1YRlNfRVJST1IoRVBFUk0pOwpAQCAtNDQwLDcgKzQ0MCw3IEBACiAKIAllcnJvciA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGFtX2hyZXEub3Bjb3VudDsgaSsrKSB7Ci0JCW9wc1tpXS5hbV9lcnJvciA9IHN0cm5jcHlfZnJvbV91c2VyKGF0dHJfbmFtZSwKKwkJb3BzW2ldLmFtX2Vycm9yID0gc3RybmNweV9mcm9tX3VzZXIoKGNoYXIgKilhdHRyX25hbWUsCiAJCQkJY29tcGF0X3B0cihvcHNbaV0uYW1fYXR0cm5hbWUpLAogCQkJCU1BWE5BTUVMRU4pOwogCQlpZiAob3BzW2ldLmFtX2Vycm9yID09IDAgfHwgb3BzW2ldLmFtX2Vycm9yID09IE1BWE5BTUVMRU4pCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKaW5kZXggMjI1OTQ2MC4uZTg1NjZiYiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwpAQCAtMTQwLDEwICsxNDAsMTAgQEAKIAlzdHJ1Y3QgeGZzX2lub2RlICppcCA9IFhGU19JKGlub2RlKTsKIAlzaXplX3QJCWxlbmd0aDsKIAl2b2lkCQkqdmFsdWU7Ci0JY2hhcgkJKm5hbWU7CisJdW5zaWduZWQgY2hhcgkqbmFtZTsKIAlpbnQJCWVycm9yOwogCi0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsICZuYW1lLAorCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCAoY2hhciAqKikmbmFtZSwKIAkJCQkJICAgICAmdmFsdWUsICZsZW5ndGgpOwogCWlmIChlcnJvcikgewogCQlpZiAoZXJyb3IgPT0gLUVPUE5PVFNVUFApCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCmluZGV4IDBkMzI0NTcuLmVhYzZmODAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCkBAIC02MzAsMTggKzYzMCw5IEBACiAJICogYnkgcm9vdC4gIFRoaXMga2VlcHMgcGVvcGxlIGZyb20gbW9kaWZ5aW5nIHNldHVpZCBhbmQKIAkgKiBzZXRnaWQgYmluYXJpZXMuCiAJICovCi0KLQlpZiAoKCh4aXAtPmlfZC5kaV9tb2RlICYgU19JU1VJRCkgfHwKLQkgICAgKCh4aXAtPmlfZC5kaV9tb2RlICYgKFNfSVNHSUQgfCBTX0lYR1JQKSkgPT0KLQkJKFNfSVNHSUQgfCBTX0lYR1JQKSkpICYmCi0JICAgICAhY2FwYWJsZShDQVBfRlNFVElEKSkgewotCQllcnJvciA9IHhmc193cml0ZV9jbGVhcl9zZXR1aWQoeGlwKTsKLQkJaWYgKGxpa2VseSghZXJyb3IpKQotCQkJZXJyb3IgPSAtZmlsZV9yZW1vdmVfc3VpZChmaWxlKTsKLQkJaWYgKHVubGlrZWx5KGVycm9yKSkgewotCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwotCQl9Ci0JfQorCWVycm9yID0gLWZpbGVfcmVtb3ZlX3N1aWQoZmlsZSk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwogCiAJLyogV2UgY2FuIHdyaXRlIGJhY2sgdGhpcyBxdWV1ZSBpbiBwYWdlIHJlY2xhaW0gKi8KIAljdXJyZW50LT5iYWNraW5nX2Rldl9pbmZvID0gbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKQEAgLTc4NCw1MyArNzc1LDYgQEAKIH0KIAogLyoKLSAqIEFsbCB4ZnMgbWV0YWRhdGEgYnVmZmVycyBleGNlcHQgbG9nIHN0YXRlIG1hY2hpbmUgYnVmZmVycwotICogZ2V0IHRoaXMgYXR0YWNoZWQgYXMgdGhlaXIgYl9iZHN0cmF0IGNhbGxiYWNrIGZ1bmN0aW9uLgotICogVGhpcyBpcyBzbyB0aGF0IHdlIGNhbiBjYXRjaCBhIGJ1ZmZlcgotICogYWZ0ZXIgcHJlbWF0dXJlbHkgdW5waW5uaW5nIGl0IHRvIGZvcmNpYmx5IHNodXRkb3duIHRoZSBmaWxlc3lzdGVtLgotICovCi1pbnQKLXhmc19iZHN0cmF0X2NiKHN0cnVjdCB4ZnNfYnVmICpicCkKLXsKLQlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihicC0+Yl9tb3VudCkpIHsKLQkJdHJhY2VfeGZzX2Jkc3RyYXRfc2h1dChicCwgX1JFVF9JUF8pOwotCQkvKgotCQkgKiBNZXRhZGF0YSB3cml0ZSB0aGF0IGRpZG4ndCBnZXQgbG9nZ2VkIGJ1dAotCQkgKiB3cml0dGVuIGRlbGF5ZWQgYW55d2F5LiBUaGVzZSBhcmVuJ3QgYXNzb2NpYXRlZAotCQkgKiB3aXRoIGEgdHJhbnNhY3Rpb24sIGFuZCBjYW4gYmUgaWdub3JlZC4KLQkJICovCi0JCWlmIChYRlNfQlVGX0lPRE9ORV9GVU5DKGJwKSA9PSBOVUxMICYmCi0JCSAgICAoWEZTX0JVRl9JU1JFQUQoYnApKSA9PSAwKQotCQkJcmV0dXJuICh4ZnNfYmlvZXJyb3JfcmVsc2UoYnApKTsKLQkJZWxzZQotCQkJcmV0dXJuICh4ZnNfYmlvZXJyb3IoYnApKTsKLQl9Ci0KLQl4ZnNfYnVmX2lvcmVxdWVzdChicCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBXcmFwcGVyIGFyb3VuZCBiZHN0cmF0IHNvIHRoYXQgd2UgY2FuIHN0b3AgZGF0YSBmcm9tIGdvaW5nIHRvIGRpc2sgaW4gY2FzZQotICogd2UgYXJlIHNodXR0aW5nIGRvd24gdGhlIGZpbGVzeXN0ZW0uICBUeXBpY2FsbHkgdXNlciBkYXRhIGdvZXMgdGhydSB0aGlzCi0gKiBwYXRoOyBvbmUgb2YgdGhlIGV4Y2VwdGlvbnMgaXMgdGhlIHN1cGVyYmxvY2suCi0gKi8KLXZvaWQKLXhmc2Jkc3RyYXQoCi0Jc3RydWN0IHhmc19tb3VudAkqbXAsCi0Jc3RydWN0IHhmc19idWYJCSpicCkKLXsKLQlBU1NFUlQobXApOwotCWlmICghWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpIHsKLQkJeGZzX2J1Zl9pb3JlcXVlc3QoYnApOwotCQlyZXR1cm47Ci0JfQotCi0JdHJhY2VfeGZzX2Jkc3RyYXRfc2h1dChicCwgX1JFVF9JUF8pOwotCXhmc19iaW9lcnJvcl9yZWxzZShicCk7Ci19Ci0KLS8qCiAgKiBJZiB0aGUgdW5kZXJseWluZyAoZGF0YS9sb2cvcnQpIGRldmljZSBpcyByZWFkb25seSwgdGhlcmUgYXJlIHNvbWUKICAqIG9wZXJhdGlvbnMgdGhhdCBjYW5ub3QgcHJvY2VlZC4KICAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuaAppbmRleCBkMWY3Nzg5Li4zNDJhZThjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuaApAQCAtMjIsOSArMjIsNiBAQAogc3RydWN0IHhmc19pbm9kZTsKIHN0cnVjdCB4ZnNfYnVmOwogCi0vKiBlcnJvcnMgZnJvbSB4ZnNiZHN0cmF0KCkgbXVzdCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgYnVmZmVyICovCi1leHRlcm4gdm9pZCB4ZnNiZHN0cmF0KHN0cnVjdCB4ZnNfbW91bnQgKiwgc3RydWN0IHhmc19idWYgKik7Ci1leHRlcm4gaW50IHhmc19iZHN0cmF0X2NiKHN0cnVjdCB4ZnNfYnVmICopOwogZXh0ZXJuIGludCB4ZnNfZGV2X2lzX3JlYWRfb25seShzdHJ1Y3QgeGZzX21vdW50ICosIGNoYXIgKik7CiAKIGV4dGVybiBpbnQgeGZzX3plcm9fZW9mKHN0cnVjdCB4ZnNfaW5vZGUgKiwgeGZzX29mZl90LCB4ZnNfZnNpemVfdCk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwppbmRleCA3NzQxNGRiLi4yNWVhMjQwIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKQEAgLTg3NywxMiArODc3LDExIEBACiB7CiAJc3RydWN0IHhmc19haWwJKmFpbHAgPSBkYXRhOwogCXhmc19sc25fdAlsYXN0X3B1c2hlZF9sc24gPSAwOwotCWxvbmcJCXRvdXQgPSAwOworCWxvbmcJCXRvdXQgPSAwOyAvKiBtaWxsaXNlY29uZHMgKi8KIAogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCWlmICh0b3V0KQotCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXModG91dCkpOwotCQl0b3V0ID0gMTAwMDsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHRvdXQgPworCQkJCW1zZWNzX3RvX2ppZmZpZXModG91dCkgOiBNQVhfU0NIRURVTEVfVElNRU9VVCk7CiAKIAkJLyogc3dzdXNwICovCiAJCXRyeV90b19mcmVlemUoKTsKQEAgLTEwMjIsMTIgKzEwMjEsNDUgQEAKIAlYRlNfSShpbm9kZSktPmlfdXBkYXRlX2NvcmUgPSAxOwogfQogCi0vKgotICogQXR0ZW1wdCB0byBmbHVzaCB0aGUgaW5vZGUsIHRoaXMgd2lsbCBhY3R1YWxseSBmYWlsCi0gKiBpZiB0aGUgaW5vZGUgaXMgcGlubmVkLCBidXQgd2UgZGlydHkgdGhlIGlub2RlIGFnYWluCi0gKiBhdCB0aGUgcG9pbnQgd2hlbiBpdCBpcyB1bnBpbm5lZCBhZnRlciBhIGxvZyB3cml0ZSwKLSAqIHNpbmNlIHRoaXMgaXMgd2hlbiB0aGUgaW5vZGUgaXRzZWxmIGJlY29tZXMgZmx1c2hhYmxlLgotICovCitTVEFUSUMgaW50Cit4ZnNfbG9nX2lub2RlKAorCXN0cnVjdCB4ZnNfaW5vZGUJKmlwKQoreworCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtPmlfbW91bnQ7CisJc3RydWN0IHhmc190cmFucwkqdHA7CisJaW50CQkJZXJyb3I7CisKKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CisJdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19GU1lOQ19UUyk7CisJZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgMCwgWEZTX0ZTWU5DX1RTX0xPR19SRVMobXApLCAwLCAwLCAwKTsKKworCWlmIChlcnJvcikgeworCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKKwkJLyogd2UgbmVlZCB0byByZXR1cm4gd2l0aCB0aGUgbG9jayBob2xkIHNoYXJlZCAqLworCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisKKwkvKgorCSAqIE5vdGUgLSBpdCdzIHBvc3NpYmxlIHRoYXQgd2UgbWlnaHQgaGF2ZSBwdXNoZWQgb3Vyc2VsdmVzIG91dCBvZiB0aGUKKwkgKiB3YXkgZHVyaW5nIHRyYW5zX3Jlc2VydmUgd2hpY2ggd291bGQgZmx1c2ggdGhlIGlub2RlLiAgQnV0IHRoZXJlJ3MKKwkgKiBubyBndWFyYW50ZWUgdGhhdCB0aGUgaW5vZGUgYnVmZmVyIGhhcyBhY3R1YWxseSBnb25lIG91dCB5ZXQgKGl0J3MKKwkgKiBkZWx3cmkpLiAgUGx1cyB0aGUgYnVmZmVyIGNvdWxkIGJlIHBpbm5lZCBhbnl3YXkgaWYgaXQncyBwYXJ0IG9mCisJICogYW4gaW5vZGUgaW4gYW5vdGhlciByZWNlbnQgdHJhbnNhY3Rpb24uICBTbyB3ZSBwbGF5IGl0IHNhZmUgYW5kCisJICogZmlyZSBvZmYgdGhlIHRyYW5zYWN0aW9uIGFueXdheS4KKwkgKi8KKwl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7CisJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOworCXhmc190cmFuc19zZXRfc3luYyh0cCk7CisJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKKwl4ZnNfaWxvY2tfZGVtb3RlKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIFNUQVRJQyBpbnQKIHhmc19mc193cml0ZV9pbm9kZSgKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKQEAgLTEwMzUsNyArMTA2Nyw3IEBACiB7CiAJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CiAJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKLQlpbnQJCQllcnJvciA9IDA7CisJaW50CQkJZXJyb3IgPSBFQUdBSU47CiAKIAl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKIApAQCAtMTA0NiwzNiArMTA3OCw1NiBAQAogCQllcnJvciA9IHhmc193YWl0X29uX3BhZ2VzKGlwLCAwLCAtMSk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0OwotCX0KIAotCS8qCi0JICogQnlwYXNzIGlub2RlcyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiBjbGVhbmVkIGJ5Ci0JICogdGhlIGlub2RlIGZsdXNoIGNsdXN0ZXJpbmcgY29kZSBpbnNpZGUgeGZzX2lmbHVzaAotCSAqLwotCWlmICh4ZnNfaW5vZGVfY2xlYW4oaXApKQotCQlnb3RvIG91dDsKLQotCS8qCi0JICogV2UgbWFrZSB0aGlzIG5vbi1ibG9ja2luZyBpZiB0aGUgaW5vZGUgaXMgY29udGVuZGVkLCByZXR1cm4KLQkgKiBFQUdBSU4gdG8gaW5kaWNhdGUgdG8gdGhlIGNhbGxlciB0aGF0IHRoZXkgZGlkIG5vdCBzdWNjZWVkLgotCSAqIFRoaXMgcHJldmVudHMgdGhlIGZsdXNoIHBhdGggZnJvbSBibG9ja2luZyBvbiBpbm9kZXMgaW5zaWRlCi0JICogYW5vdGhlciBvcGVyYXRpb24gcmlnaHQgbm93LCB0aGV5IGdldCBjYXVnaHQgbGF0ZXIgYnkgeGZzX3N5bmMuCi0JICovCi0JaWYgKHN5bmMpIHsKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZSBpbm9kZSBoYXMgaGl0IHN0YWJsZSBzdG9yYWdlLiAgQnkgdXNpbmcgdGhlCisJCSAqIGxvZyBhbmQgdGhlIGZzeW5jIHRyYW5zYWN0aW9ucyB3ZSByZWR1Y2UgdGhlIElPcyB3ZSBoYXZlCisJCSAqIHRvIGRvIGhlcmUgZnJvbSB0d28gKGxvZyBhbmQgaW5vZGUpIHRvIGp1c3QgdGhlIGxvZy4KKwkJICoKKwkJICogTm90ZTogV2Ugc3RpbGwgbmVlZCB0byBkbyBhIGRlbHdyaSB3cml0ZSBvZiB0aGUgaW5vZGUgYWZ0ZXIKKwkJICogdGhpcyB0byBmbHVzaCBpdCB0byB0aGUgYmFja2luZyBidWZmZXIgc28gdGhhdCBidWxrc3RhdAorCQkgKiB3b3JrcyBwcm9wZXJseSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoZSBpbm9kZSBoYXMgYmVlbgorCQkgKiB3cml0dGVuLiAgQmVjYXVzZSB3ZSBob2xkIHRoZSBpbG9jayBhdG9taWNhbGx5IG92ZXIgdGhlCisJCSAqIHRyYW5zYWN0aW9uIGNvbW1pdCBhbmQgdGhlIGlub2RlIGZsdXNoIHdlIGFyZSBndWFyYW50ZWVkCisJCSAqIHRoYXQgdGhlIGlub2RlIGlzIG5vdCBwaW5uZWQgd2hlbiBpdCByZXR1cm5zLiBJZiB0aGUgZmx1c2gKKwkJICogbG9jayBpcyBhbHJlYWR5IGhlbGQsIHRoZW4gdGhlIGlub2RlIGhhcyBhbHJlYWR5IGJlZW4KKwkJICogZmx1c2hlZCBvbmNlIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGZsdXNoIGl0IGFnYWluLiAgSGVuY2UKKwkJICogdGhlIGNvZGUgd2lsbCBvbmx5IGZsdXNoIHRoZSBpbm9kZSBpZiBpdCBpc24ndCBhbHJlYWR5CisJCSAqIGJlaW5nIGZsdXNoZWQuCisJCSAqLwogCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwotCQl4ZnNfaWZsb2NrKGlwKTsKLQotCQllcnJvciA9IHhmc19pZmx1c2goaXAsIFhGU19JRkxVU0hfU1lOQyk7CisJCWlmIChpcC0+aV91cGRhdGVfY29yZSkgeworCQkJZXJyb3IgPSB4ZnNfbG9nX2lub2RlKGlwKTsKKwkJCWlmIChlcnJvcikKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KIAl9IGVsc2UgewotCQllcnJvciA9IEVBR0FJTjsKKwkJLyoKKwkJICogV2UgbWFrZSB0aGlzIG5vbi1ibG9ja2luZyBpZiB0aGUgaW5vZGUgaXMgY29udGVuZGVkLCByZXR1cm4KKwkJICogRUFHQUlOIHRvIGluZGljYXRlIHRvIHRoZSBjYWxsZXIgdGhhdCB0aGV5IGRpZCBub3Qgc3VjY2VlZC4KKwkJICogVGhpcyBwcmV2ZW50cyB0aGUgZmx1c2ggcGF0aCBmcm9tIGJsb2NraW5nIG9uIGlub2RlcyBpbnNpZGUKKwkJICogYW5vdGhlciBvcGVyYXRpb24gcmlnaHQgbm93LCB0aGV5IGdldCBjYXVnaHQgbGF0ZXIgYnkgeGZzX3N5bmMuCisJCSAqLwogCQlpZiAoIXhmc19pbG9ja19ub3dhaXQoaXAsIFhGU19JTE9DS19TSEFSRUQpKQogCQkJZ290byBvdXQ7Ci0JCWlmICh4ZnNfaXBpbmNvdW50KGlwKSB8fCAheGZzX2lmbG9ja19ub3dhaXQoaXApKQotCQkJZ290byBvdXRfdW5sb2NrOwotCi0JCWVycm9yID0geGZzX2lmbHVzaChpcCwgWEZTX0lGTFVTSF9BU1lOQ19OT0JMT0NLKTsKIAl9CiAKKwlpZiAoeGZzX2lwaW5jb3VudChpcCkgfHwgIXhmc19pZmxvY2tfbm93YWl0KGlwKSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJLyoKKwkgKiBOb3cgd2UgaGF2ZSB0aGUgZmx1c2ggbG9jayBhbmQgdGhlIGlub2RlIGlzIG5vdCBwaW5uZWQsIHdlIGNhbiBjaGVjaworCSAqIGlmIHRoZSBpbm9kZSBpcyByZWFsbHkgY2xlYW4gYXMgd2Uga25vdyB0aGF0IHRoZXJlIGFyZSBubyBwZW5kaW5nCisJICogdHJhbnNhY3Rpb24gY29tcGxldGlvbnMsIGl0IGlzIG5vdCB3YWl0aW5nIG9uIHRoZSBkZWxheWVkIHdyaXRlCisJICogcXVldWUgYW5kIHRoZXJlIGlzIG5vIElPIGluIHByb2dyZXNzLgorCSAqLworCWlmICh4ZnNfaW5vZGVfY2xlYW4oaXApKSB7CisJCXhmc19pZnVubG9jayhpcCk7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwllcnJvciA9IHhmc19pZmx1c2goaXAsIDApOworCiAgb3V0X3VubG9jazoKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CiAgb3V0OgpAQCAtMTI1Nyw2ICsxMzA5LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK1NUQVRJQyB2b2lkCit4ZnNfc2F2ZV9yZXN2YmxrcyhzdHJ1Y3QgeGZzX21vdW50ICptcCkKK3sKKwlfX3VpbnQ2NF90IHJlc2Jsa3MgPSAwOworCisJbXAtPm1fcmVzYmxrc19zYXZlID0gbXAtPm1fcmVzYmxrczsKKwl4ZnNfcmVzZXJ2ZV9ibG9ja3MobXAsICZyZXNibGtzLCBOVUxMKTsKK30KKworU1RBVElDIHZvaWQKK3hmc19yZXN0b3JlX3Jlc3ZibGtzKHN0cnVjdCB4ZnNfbW91bnQgKm1wKQoreworCV9fdWludDY0X3QgcmVzYmxrczsKKworCWlmIChtcC0+bV9yZXNibGtzX3NhdmUpIHsKKwkJcmVzYmxrcyA9IG1wLT5tX3Jlc2Jsa3Nfc2F2ZTsKKwkJbXAtPm1fcmVzYmxrc19zYXZlID0gMDsKKwl9IGVsc2UKKwkJcmVzYmxrcyA9IHhmc19kZWZhdWx0X3Jlc2Jsa3MobXApOworCisJeGZzX3Jlc2VydmVfYmxvY2tzKG1wLCAmcmVzYmxrcywgTlVMTCk7Cit9CisKIFNUQVRJQyBpbnQKIHhmc19mc19yZW1vdW50KAogCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCkBAIC0xMzM2LDExICsxNDExLDI3IEBACiAJCQl9CiAJCQltcC0+bV91cGRhdGVfZmxhZ3MgPSAwOwogCQl9CisKKwkJLyoKKwkJICogRmlsbCBvdXQgdGhlIHJlc2VydmUgcG9vbCBpZiBpdCBpcyBlbXB0eS4gVXNlIHRoZSBzdGFzaGVkCisJCSAqIHZhbHVlIGlmIGl0IGlzIG5vbi16ZXJvLCBvdGhlcndpc2UgZ28gd2l0aCB0aGUgZGVmYXVsdC4KKwkJICovCisJCXhmc19yZXN0b3JlX3Jlc3ZibGtzKG1wKTsKIAl9CiAKIAkvKiBydyAtPiBybyAqLwogCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkgJiYgKCpmbGFncyAmIE1TX1JET05MWSkpIHsKKwkJLyoKKwkJICogQWZ0ZXIgd2UgaGF2ZSBzeW5jZWQgdGhlIGRhdGEgYnV0IGJlZm9yZSB3ZSBzeW5jIHRoZQorCQkgKiBtZXRhZGF0YSwgd2UgbmVlZCB0byBmcmVlIHVwIHRoZSByZXNlcnZlIGJsb2NrIHBvb2wgc28gdGhhdAorCQkgKiB0aGUgdXNlZCBibG9jayBjb3VudCBpbiB0aGUgc3VwZXJibG9jayBvbiBkaXNrIGlzIGNvcnJlY3QgYXQKKwkJICogdGhlIGVuZCBvZiB0aGUgcmVtb3VudC4gU3Rhc2ggdGhlIGN1cnJlbnQgcmVzZXJ2ZSBwb29sIHNpemUKKwkJICogc28gdGhhdCBpZiB3ZSBnZXQgcmVtb3VudGVkIHJ3LCB3ZSBjYW4gcmV0dXJuIGl0IHRvIHRoZSBzYW1lCisJCSAqIHNpemUuCisJCSAqLworCiAJCXhmc19xdWllc2NlX2RhdGEobXApOworCQl4ZnNfc2F2ZV9yZXN2YmxrcyhtcCk7CiAJCXhmc19xdWllc2NlX2F0dHIobXApOwogCQltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfUkRPTkxZOwogCX0KQEAgLTEzNTksMTEgKzE0NTAsMjIgQEAKIHsKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKIAorCXhmc19zYXZlX3Jlc3ZibGtzKG1wKTsKIAl4ZnNfcXVpZXNjZV9hdHRyKG1wKTsKIAlyZXR1cm4gLXhmc19mc19sb2dfZHVtbXkobXApOwogfQogCiBTVEFUSUMgaW50Cit4ZnNfZnNfdW5mcmVlemUoCisJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYikKK3sKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKKworCXhmc19yZXN0b3JlX3Jlc3ZibGtzKG1wKTsKKwlyZXR1cm4gMDsKK30KKworU1RBVElDIGludAogeGZzX2ZzX3Nob3dfb3B0aW9ucygKIAlzdHJ1Y3Qgc2VxX2ZpbGUJCSptLAogCXN0cnVjdCB2ZnNtb3VudAkJKm1udCkKQEAgLTE1ODUsNiArMTY4Nyw3IEBACiAJLnB1dF9zdXBlcgkJPSB4ZnNfZnNfcHV0X3N1cGVyLAogCS5zeW5jX2ZzCQk9IHhmc19mc19zeW5jX2ZzLAogCS5mcmVlemVfZnMJCT0geGZzX2ZzX2ZyZWV6ZSwKKwkudW5mcmVlemVfZnMJCT0geGZzX2ZzX3VuZnJlZXplLAogCS5zdGF0ZnMJCQk9IHhmc19mc19zdGF0ZnMsCiAJLnJlbW91bnRfZnMJCT0geGZzX2ZzX3JlbW91bnQsCiAJLnNob3dfb3B0aW9ucwkJPSB4ZnNfZnNfc2hvd19vcHRpb25zLApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCmluZGV4IDFmNWU0YmIuLmE5ZjZkMjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKQEAgLTkwLDE0ICs5MCwxMyBAQAogU1RBVElDIGludAogeGZzX2lub2RlX2FnX3dhbGsoCiAJc3RydWN0IHhmc19tb3VudAkqbXAsCi0JeGZzX2FnbnVtYmVyX3QJCWFnLAorCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZywKIAlpbnQJCQkoKmV4ZWN1dGUpKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLAogCQkJCQkgICBzdHJ1Y3QgeGZzX3BlcmFnICpwYWcsIGludCBmbGFncyksCiAJaW50CQkJZmxhZ3MsCiAJaW50CQkJdGFnLAogCWludAkJCWV4Y2x1c2l2ZSkKIHsKLQlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWcgPSAmbXAtPm1fcGVyYWdbYWddOwogCXVpbnQzMl90CQlmaXJzdF9pbmRleDsKIAlpbnQJCQlsYXN0X2Vycm9yID0gMDsKIAlpbnQJCQlza2lwcGVkOwpAQCAtMTQxLDggKzE0MCw2IEBACiAJCWRlbGF5KDEpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQotCi0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKIAlyZXR1cm4gbGFzdF9lcnJvcjsKIH0KIApAQCAtMTYwLDEwICsxNTcsMTYgQEAKIAl4ZnNfYWdudW1iZXJfdAkJYWc7CiAKIAlmb3IgKGFnID0gMDsgYWcgPCBtcC0+bV9zYi5zYl9hZ2NvdW50OyBhZysrKSB7Ci0JCWlmICghbXAtPm1fcGVyYWdbYWddLnBhZ19pY2lfaW5pdCkKKwkJc3RydWN0IHhmc19wZXJhZwkqcGFnOworCisJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnKTsKKwkJaWYgKCFwYWctPnBhZ19pY2lfaW5pdCkgeworCQkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkJY29udGludWU7Ci0JCWVycm9yID0geGZzX2lub2RlX2FnX3dhbGsobXAsIGFnLCBleGVjdXRlLCBmbGFncywgdGFnLAorCQl9CisJCWVycm9yID0geGZzX2lub2RlX2FnX3dhbGsobXAsIHBhZywgZXhlY3V0ZSwgZmxhZ3MsIHRhZywKIAkJCQkJCWV4Y2x1c2l2ZSk7CisJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJaWYgKGVycm9yKSB7CiAJCQlsYXN0X2Vycm9yID0gZXJyb3I7CiAJCQlpZiAoZXJyb3IgPT0gRUZTQ09SUlVQVEVEKQpAQCAtMjMxLDcgKzIzNCw3IEBACiAJfQogCiAJZXJyb3IgPSB4ZnNfZmx1c2hfcGFnZXMoaXAsIDAsIC0xLCAoZmxhZ3MgJiBTWU5DX1dBSVQpID8KLQkJCQkwIDogWEZTX0JfQVNZTkMsIEZJX05PTkUpOworCQkJCTAgOiBYQkZfQVNZTkMsIEZJX05PTkUpOwogCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CiAKICBvdXRfd2FpdDoKQEAgLTI2Nyw4ICsyNzAsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JZXJyb3IgPSB4ZnNfaWZsdXNoKGlwLCAoZmxhZ3MgJiBTWU5DX1dBSVQpID8KLQkJCSAgIFhGU19JRkxVU0hfU1lOQyA6IFhGU19JRkxVU0hfREVMV1JJKTsKKwllcnJvciA9IHhmc19pZmx1c2goaXAsIGZsYWdzKTsKIAogIG91dF91bmxvY2s6CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwpAQCAtMjkzLDEwICsyOTUsNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIFhGU19FUlJPUihlcnJvcik7CiAKLQl4ZnNfbG9nX2ZvcmNlKG1wLCAwLAotCQkgICAgICAoZmxhZ3MgJiBTWU5DX1dBSVQpID8KLQkJICAgICAgIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMgOgotCQkgICAgICAgWEZTX0xPR19GT1JDRSk7CisJeGZzX2xvZ19mb3JjZShtcCwgKGZsYWdzICYgU1lOQ19XQUlUKSA/IFhGU19MT0dfU1lOQyA6IDApOwogCXJldHVybiAwOwogfQogCkBAIC0zMjIsMTAgKzMyMSw2IEBACiAJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBtcC0+bV9yb290aXA7CiAJc3RydWN0IHhmc190cmFucwkqdHA7CiAJaW50CQkJZXJyb3I7Ci0JaW50CQkJbG9nX2ZsYWdzID0gWEZTX0xPR19GT1JDRTsKLQotCWlmIChmbGFncyAmIFNZTkNfV0FJVCkKLQkJbG9nX2ZsYWdzIHw9IFhGU19MT0dfU1lOQzsKIAogCS8qCiAJICogUHV0IGEgZHVtbXkgdHJhbnNhY3Rpb24gaW4gdGhlIGxvZyB0byB0ZWxsIHJlY292ZXJ5CkBAIC0zNDcsMTEgKzM0MiwxMSBAQAogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAKIAkvKiB0aGUgbG9nIGZvcmNlIGVuc3VyZXMgdGhpcyB0cmFuc2FjdGlvbiBpcyBwdXNoZWQgdG8gZGlzayAqLwotCXhmc19sb2dfZm9yY2UobXAsIDAsIGxvZ19mbGFncyk7CisJeGZzX2xvZ19mb3JjZShtcCwgKGZsYWdzICYgU1lOQ19XQUlUKSA/IFhGU19MT0dfU1lOQyA6IDApOwogCXJldHVybiBlcnJvcjsKIH0KIAotaW50CitTVEFUSUMgaW50CiB4ZnNfc3luY19mc2RhdGEoCiAJc3RydWN0IHhmc19tb3VudAkqbXAsCiAJaW50CQkJZmxhZ3MpCkBAIC0zNjcsNyArMzYyLDcgQEAKIAlpZiAoZmxhZ3MgJiBTWU5DX1RSWUxPQ0spIHsKIAkJQVNTRVJUKCEoZmxhZ3MgJiBTWU5DX1dBSVQpKTsKIAotCQlicCA9IHhmc19nZXRzYihtcCwgWEZTX0JVRl9UUllMT0NLKTsKKwkJYnAgPSB4ZnNfZ2V0c2IobXAsIFhCRl9UUllMT0NLKTsKIAkJaWYgKCFicCkKIAkJCWdvdG8gb3V0OwogCkBAIC0zODcsNyArMzgyLDcgQEAKIAkJICogYmVjb21lIHBpbm5lZCBpbiBiZXR3ZWVuIHRoZXJlIGFuZCBoZXJlLgogCQkgKi8KIAkJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKQotCQkJeGZzX2xvZ19mb3JjZShtcCwgMCwgWEZTX0xPR19GT1JDRSk7CisJCQl4ZnNfbG9nX2ZvcmNlKG1wLCAwKTsKIAl9CiAKIApAQCAtNDQ4LDkgKzQ0Myw2IEBACiAJeGZzX3N5bmNfZGF0YShtcCwgU1lOQ19XQUlUKTsKIAl4ZnNfcW1fc3luYyhtcCwgU1lOQ19XQUlUKTsKIAotCS8qIGRyb3AgaW5vZGUgcmVmZXJlbmNlcyBwaW5uZWQgYnkgZmlsZXN0cmVhbXMgKi8KLQl4ZnNfZmlsZXN0cmVhbV9mbHVzaChtcCk7Ci0KIAkvKiB3cml0ZSBzdXBlcmJsb2NrIGFuZCBob292ZXIgdXAgc2h1dGRvd24gZXJyb3JzICovCiAJZXJyb3IgPSB4ZnNfc3luY19mc2RhdGEobXAsIFNZTkNfV0FJVCk7CiAKQEAgLTQ2NywxNiArNDU5LDE4IEBACiB7CiAJaW50CWNvdW50ID0gMCwgcGluY291bnQ7CiAKKwl4ZnNfcmVjbGFpbV9pbm9kZXMobXAsIDApOwogCXhmc19mbHVzaF9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3AsIDApOwotCXhmc19yZWNsYWltX2lub2RlcyhtcCwgWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9BU1lOQyk7CiAKIAkvKgogCSAqIFRoaXMgbG9vcCBtdXN0IHJ1biBhdCBsZWFzdCB0d2ljZS4gIFRoZSBmaXJzdCBpbnN0YW5jZSBvZiB0aGUgbG9vcAogCSAqIHdpbGwgZmx1c2ggbW9zdCBtZXRhIGRhdGEgYnV0IHRoYXQgd2lsbCBnZW5lcmF0ZSBtb3JlIG1ldGEgZGF0YQogCSAqICh0eXBpY2FsbHkgZGlyZWN0b3J5IHVwZGF0ZXMpLiAgV2hpY2ggdGhlbiBtdXN0IGJlIGZsdXNoZWQgYW5kCi0JICogbG9nZ2VkIGJlZm9yZSB3ZSBjYW4gd3JpdGUgdGhlIHVubW91bnQgcmVjb3JkLgorCSAqIGxvZ2dlZCBiZWZvcmUgd2UgY2FuIHdyaXRlIHRoZSB1bm1vdW50IHJlY29yZC4gV2UgYWxzbyBzbyBzeW5jCisJICogcmVjbGFpbSBvZiBpbm9kZXMgdG8gY2F0Y2ggYW55IHRoYXQgdGhlIGFib3ZlIGRlbHdyaSBmbHVzaCBza2lwcGVkLgogCSAqLwogCWRvIHsKKwkJeGZzX3JlY2xhaW1faW5vZGVzKG1wLCBTWU5DX1dBSVQpOwogCQl4ZnNfc3luY19hdHRyKG1wLCBTWU5DX1dBSVQpOwogCQlwaW5jb3VudCA9IHhmc19mbHVzaF9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3AsIDEpOwogCQlpZiAoIXBpbmNvdW50KSB7CkBAIC01NzUsNyArNTY5LDcgQEAKIAlpZ3JhYihpbm9kZSk7CiAJeGZzX3N5bmNkX3F1ZXVlX3dvcmsoaXAtPmlfbW91bnQsIGlub2RlLCB4ZnNfZmx1c2hfaW5vZGVzX3dvcmssICZjb21wbGV0aW9uKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjb21wbGV0aW9uKTsKLQl4ZnNfbG9nX2ZvcmNlKGlwLT5pX21vdW50LCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0V8WEZTX0xPR19TWU5DKTsKKwl4ZnNfbG9nX2ZvcmNlKGlwLT5pX21vdW50LCBYRlNfTE9HX1NZTkMpOwogfQogCiAvKgpAQCAtNTkxLDggKzU4NSw4IEBACiAJaW50CQllcnJvcjsKIAogCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkpIHsKLQkJeGZzX2xvZ19mb3JjZShtcCwgKHhmc19sc25fdCkwLCBYRlNfTE9HX0ZPUkNFKTsKLQkJeGZzX3JlY2xhaW1faW5vZGVzKG1wLCBYRlNfSUZMVVNIX0RFTFdSSV9FTFNFX0FTWU5DKTsKKwkJeGZzX2xvZ19mb3JjZShtcCwgMCk7CisJCXhmc19yZWNsYWltX2lub2RlcyhtcCwgMCk7CiAJCS8qIGRnYzogZXJyb3JzIGlnbm9yZWQgaGVyZSAqLwogCQllcnJvciA9IHhmc19xbV9zeW5jKG1wLCBTWU5DX1RSWUxPQ0spOwogCQllcnJvciA9IHhmc19zeW5jX2ZzZGF0YShtcCwgU1lOQ19UUllMT0NLKTsKQEAgLTY5MCwxNiArNjg0LDE3IEBACiB4ZnNfaW5vZGVfc2V0X3JlY2xhaW1fdGFnKAogCXhmc19pbm9kZV90CSppcCkKIHsKLQl4ZnNfbW91bnRfdAkqbXAgPSBpcC0+aV9tb3VudDsKLQl4ZnNfcGVyYWdfdAkqcGFnID0geGZzX2dldF9wZXJhZyhtcCwgaXAtPmlfaW5vKTsKKwlzdHJ1Y3QgeGZzX21vdW50ICptcCA9IGlwLT5pX21vdW50OworCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKIAorCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIFhGU19JTk9fVE9fQUdOTyhtcCwgaXAtPmlfaW5vKSk7CiAJcmVhZF9sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CiAJc3Bpbl9sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKIAlfX3hmc19pbm9kZV9zZXRfcmVjbGFpbV90YWcocGFnLCBpcCk7CiAJX194ZnNfaWZsYWdzX3NldChpcCwgWEZTX0lSRUNMQUlNQUJMRSk7CiAJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCXJlYWRfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7Ci0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiB9CiAKIHZvaWQKQEAgLTcxMiwxMiArNzA3LDY0IEBACiAJCQlYRlNfSU5PX1RPX0FHSU5PKG1wLCBpcC0+aV9pbm8pLCBYRlNfSUNJX1JFQ0xBSU1fVEFHKTsKIH0KIAorLyoKKyAqIElub2RlcyBpbiBkaWZmZXJlbnQgc3RhdGVzIG5lZWQgdG8gYmUgdHJlYXRlZCBkaWZmZXJlbnRseSwgYW5kIHRoZSByZXR1cm4KKyAqIHZhbHVlIG9mIHhmc19pZmx1c2ggaXMgbm90IHN1ZmZpY2llbnQgdG8gZ2V0IHRoaXMgcmlnaHQuIFRoZSBmb2xsb3dpbmcgdGFibGUKKyAqIGxpc3RzIHRoZSBpbm9kZSBzdGF0ZXMgYW5kIHRoZSByZWNsYWltIGFjdGlvbnMgbmVjZXNzYXJ5IGZvciBub24tYmxvY2tpbmcKKyAqIHJlY2xhaW06CisgKgorICoKKyAqCWlub2RlIHN0YXRlCSAgICAgaWZsdXNoIHJldAkJcmVxdWlyZWQgYWN0aW9uCisgKiAgICAgIC0tLS0tLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0gICAgICAgICAtLS0tLS0tLS0tLS0tLS0KKyAqCWJhZAkJCS0JCXJlY2xhaW0KKyAqCXNodXRkb3duCQlFSU8JCXVucGluIGFuZCByZWNsYWltCisgKgljbGVhbiwgdW5waW5uZWQJCTAJCXJlY2xhaW0KKyAqCXN0YWxlLCB1bnBpbm5lZAkJMAkJcmVjbGFpbQorICoJY2xlYW4sIHBpbm5lZCgqKQkwCQlyZXF1ZXVlCisgKglzdGFsZSwgcGlubmVkCQlFQUdBSU4JCXJlcXVldWUKKyAqCWRpcnR5LCBkZWx3cmkgb2sJMAkJcmVxdWV1ZQorICoJZGlydHksIGRlbHdyaSBibG9ja2VkCUVBR0FJTgkJcmVxdWV1ZQorICoJZGlydHksIHN5bmMgZmx1c2gJMAkJcmVjbGFpbQorICoKKyAqICgqKSBkZ2M6IEkgZG9uJ3QgdGhpbmsgdGhlIGNsZWFuLCBwaW5uZWQgc3RhdGUgaXMgcG9zc2libGUgYnV0IGl0IGdldHMKKyAqIGhhbmRsZWQgYW55d2F5IGdpdmVuIHRoZSBvcmRlciBvZiBjaGVja3MgaW1wbGVtZW50ZWQuCisgKgorICogQXMgY2FuIGJlIHNlZW4gZnJvbSB0aGUgdGFibGUsIHRoZSByZXR1cm4gdmFsdWUgb2YgeGZzX2lmbHVzaCgpIGlzIG5vdAorICogc3VmZmljaWVudCB0byBjb3JyZWN0bHkgZGVjaWRlIHRoZSByZWNsYWltIGFjdGlvbiBoZXJlLiBUaGUgY2hlY2tzIGluCisgKiB4ZnNfaWZsdXNoKCkgbWlnaHQgbG9vayBsaWtlIGR1cGxpY2F0ZXMsIGJ1dCB0aGV5IGFyZSBub3QuCisgKgorICogQWxzbywgYmVjYXVzZSB3ZSBnZXQgdGhlIGZsdXNoIGxvY2sgZmlyc3QsIHdlIGtub3cgdGhhdCBhbnkgaW5vZGUgdGhhdCBoYXMKKyAqIGJlZW4gZmx1c2hlZCBkZWx3cmkgaGFzIGhhZCB0aGUgZmx1c2ggY29tcGxldGVkIGJ5IHRoZSB0aW1lIHdlIGNoZWNrIHRoYXQKKyAqIHRoZSBpbm9kZSBpcyBjbGVhbi4gVGhlIGNsZWFuIGlub2RlIGNoZWNrIG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIGZsdXNoaW5nCisgKiB0aGUgaW5vZGUgZGVsd3JpIG90aGVyd2lzZSB3ZSB3b3VsZCBsb29wIGZvcmV2ZXIgcmVxdWV1aW5nIGNsZWFuIGlub2RlcyBhcworICogd2UgY2Fubm90IHRlbGwgYXBhcnQgYSBzdWNjZXNzZnVsIGRlbHdyaSBmbHVzaCBhbmQgYSBjbGVhbiBpbm9kZSBmcm9tIHRoZQorICogcmV0dXJuIHZhbHVlIG9mIHhmc19pZmx1c2goKS4KKyAqCisgKiBOb3RlIHRoYXQgYmVjYXVzZSB0aGUgaW5vZGUgaXMgZmx1c2hlZCBkZWxheWVkIHdyaXRlIGJ5IGJhY2tncm91bmQKKyAqIHdyaXRlYmFjaywgdGhlIGZsdXNoIGxvY2sgbWF5IGFscmVhZHkgYmUgaGVsZCBoZXJlIGFuZCB3YWl0aW5nIG9uIGl0IGNhbgorICogcmVzdWx0IGluIHZlcnkgbG9uZyBsYXRlbmNpZXMuIEhlbmNlIGZvciBzeW5jIHJlY2xhaW1zLCB3aGVyZSB3ZSB3YWl0IG9uIHRoZQorICogZmx1c2ggbG9jaywgdGhlIGNhbGxlciBzaG91bGQgcHVzaCBvdXQgZGVsYXllZCB3cml0ZSBpbm9kZXMgZmlyc3QgYmVmb3JlCisgKiB0cnlpbmcgdG8gcmVjbGFpbSB0aGVtIHRvIG1pbmltaXNlIHRoZSBhbW91bnQgb2YgdGltZSBzcGVudCB3YWl0aW5nLiBGb3IKKyAqIGJhY2tncm91bmQgcmVsYWltLCB3ZSBqdXN0IHJlcXVldWUgdGhlIGlub2RlIGZvciB0aGUgbmV4dCBwYXNzLgorICoKKyAqIEhlbmNlIHRoZSBvcmRlciBvZiBhY3Rpb25zIGFmdGVyIGdhaW5pbmcgdGhlIGxvY2tzIHNob3VsZCBiZToKKyAqCWJhZAkJPT4gcmVjbGFpbQorICoJc2h1dGRvd24JPT4gdW5waW4gYW5kIHJlY2xhaW0KKyAqCXBpbm5lZCwgZGVsd3JpCT0+IHJlcXVldWUKKyAqCXBpbm5lZCwgc3luYwk9PiB1bnBpbgorICoJc3RhbGUJCT0+IHJlY2xhaW0KKyAqCWNsZWFuCQk9PiByZWNsYWltCisgKglkaXJ0eSwgZGVsd3JpCT0+IGZsdXNoIGFuZCByZXF1ZXVlCisgKglkaXJ0eSwgc3luYwk9PiBmbHVzaCwgd2FpdCBhbmQgcmVjbGFpbQorICovCiBTVEFUSUMgaW50CiB4ZnNfcmVjbGFpbV9pbm9kZSgKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKIAlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWcsCiAJaW50CQkJc3luY19tb2RlKQogeworCWludAllcnJvciA9IDA7CisKIAkvKgogCSAqIFRoZSByYWRpeCB0cmVlIGxvY2sgaGVyZSBwcm90ZWN0cyBhIHRocmVhZCBpbiB4ZnNfaWdldCBmcm9tIHJhY2luZwogCSAqIHdpdGggdXMgc3RhcnRpbmcgcmVjbGFpbSBvbiB0aGUgaW5vZGUuICBPbmNlIHdlIGhhdmUgdGhlCkBAIC03MzUsMzMgKzc4Miw3MCBAQAogCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKIAl3cml0ZV91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAotCS8qCi0JICogSWYgdGhlIGlub2RlIGlzIHN0aWxsIGRpcnR5LCB0aGVuIGZsdXNoIGl0IG91dC4gIElmIHRoZSBpbm9kZQotCSAqIGlzIG5vdCBpbiB0aGUgQUlMLCB0aGVuIGl0IHdpbGwgYmUgT0sgdG8gZmx1c2ggaXQgZGVsd3JpIGFzCi0JICogbG9uZyBhcyB4ZnNfaWZsdXNoKCkgZG9lcyBub3Qga2VlcCBhbnkgcmVmZXJlbmNlcyB0byB0aGUgaW5vZGUuCi0JICogV2UgbGVhdmUgdGhhdCBkZWNpc2lvbiB1cCB0byB4ZnNfaWZsdXNoKCkgc2luY2UgaXQgaGFzIHRoZQotCSAqIGtub3dsZWRnZSBvZiB3aGV0aGVyIGl0J3MgT0sgdG8gc2ltcGx5IGRvIGEgZGVsd3JpIGZsdXNoIG9mCi0JICogdGhlIGlub2RlIG9yIHdoZXRoZXIgd2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSBpbm9kZSBpcwotCSAqIHB1bGxlZCBmcm9tIHRoZSBBSUwuCi0JICogV2UgZ2V0IHRoZSBmbHVzaCBsb2NrIHJlZ2FyZGxlc3MsIHRob3VnaCwganVzdCB0byBtYWtlIHN1cmUKLQkgKiB3ZSBkb24ndCBmcmVlIGl0IHdoaWxlIGl0IGlzIGJlaW5nIGZsdXNoZWQuCi0JICovCiAJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JeGZzX2lmbG9jayhpcCk7Ci0KLQkvKgotCSAqIEluIHRoZSBjYXNlIG9mIGEgZm9yY2VkIHNodXRkb3duIHdlIHJlbHkgb24geGZzX2lmbHVzaCgpIHRvCi0JICogd2FpdCBmb3IgdGhlIGlub2RlIHRvIGJlIHVucGlubmVkIGJlZm9yZSByZXR1cm5pbmcgYW4gZXJyb3IuCi0JICovCi0JaWYgKCFpc19iYWRfaW5vZGUoVkZTX0koaXApKSAmJiB4ZnNfaWZsdXNoKGlwLCBzeW5jX21vZGUpID09IDApIHsKLQkJLyogc3luY2hyb25pemUgd2l0aCB4ZnNfaWZsdXNoX2RvbmUgKi8KKwlpZiAoIXhmc19pZmxvY2tfbm93YWl0KGlwKSkgeworCQlpZiAoIShzeW5jX21vZGUgJiBTWU5DX1dBSVQpKQorCQkJZ290byBvdXQ7CiAJCXhmc19pZmxvY2soaXApOwotCQl4ZnNfaWZ1bmxvY2soaXApOwogCX0KIAorCWlmIChpc19iYWRfaW5vZGUoVkZTX0koaXApKSkKKwkJZ290byByZWNsYWltOworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkgeworCQl4ZnNfaXVucGluX3dhaXQoaXApOworCQlnb3RvIHJlY2xhaW07CisJfQorCWlmICh4ZnNfaXBpbmNvdW50KGlwKSkgeworCQlpZiAoIShzeW5jX21vZGUgJiBTWU5DX1dBSVQpKSB7CisJCQl4ZnNfaWZ1bmxvY2soaXApOworCQkJZ290byBvdXQ7CisJCX0KKwkJeGZzX2l1bnBpbl93YWl0KGlwKTsKKwl9CisJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX0lTVEFMRSkpCisJCWdvdG8gcmVjbGFpbTsKKwlpZiAoeGZzX2lub2RlX2NsZWFuKGlwKSkKKwkJZ290byByZWNsYWltOworCisJLyogTm93IHdlIGhhdmUgYW4gaW5vZGUgdGhhdCBuZWVkcyBmbHVzaGluZyAqLworCWVycm9yID0geGZzX2lmbHVzaChpcCwgc3luY19tb2RlKTsKKwlpZiAoc3luY19tb2RlICYgU1lOQ19XQUlUKSB7CisJCXhmc19pZmxvY2soaXApOworCQlnb3RvIHJlY2xhaW07CisJfQorCisJLyoKKwkgKiBXaGVuIHdlIGhhdmUgdG8gZmx1c2ggYW4gaW5vZGUgYnV0IGRvbid0IGhhdmUgU1lOQ19XQUlUIHNldCwgd2UKKwkgKiBmbHVzaCB0aGUgaW5vZGUgb3V0IHVzaW5nIGEgZGVsd3JpIGJ1ZmZlciBhbmQgd2FpdCBmb3IgdGhlIG5leHQKKwkgKiBjYWxsIGludG8gcmVjbGFpbSB0byBmaW5kIGl0IGluIGEgY2xlYW4gc3RhdGUgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcgorCSAqIGl0IG5vdy4gV2UgYWxzbyBkb24ndCByZXR1cm4gZXJyb3JzIGhlcmUgLSBpZiB0aGUgZXJyb3IgaXMgdHJhbnNpZW50CisJICogdGhlbiB0aGUgbmV4dCByZWNsYWltIHBhc3Mgd2lsbCBmbHVzaCB0aGUgaW5vZGUsIGFuZCBpZiB0aGUgZXJyb3IKKwkgKiBpcyBwZXJtYW5lbnQgdGhlbiB0aGUgbmV4dCBzeW5jIHJlY2xhaW0gd2lsbCByZWxjYWltIHRoZSBpbm9kZSBhbmQKKwkgKiBwYXNzIG9uIHRoZSBlcnJvci4KKwkgKi8KKwlpZiAoZXJyb3IgJiYgIVhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKSB7CisJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGlwLT5pX21vdW50LAorCQkJImlub2RlIDB4JWxseCBiYWNrZ3JvdW5kIHJlY2xhaW0gZmx1c2ggZmFpbGVkIHdpdGggJWQiLAorCQkJKGxvbmcgbG9uZylpcC0+aV9pbm8sIGVycm9yKTsKKwl9CitvdXQ6CisJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX0lSRUNMQUlNKTsKKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCS8qCisJICogV2UgY291bGQgcmV0dXJuIEVBR0FJTiBoZXJlIHRvIG1ha2UgcmVjbGFpbSByZXNjYW4gdGhlIGlub2RlIHRyZWUgaW4KKwkgKiBhIHNob3J0IHdoaWxlLiBIb3dldmVyLCB0aGlzIGp1c3QgYnVybnMgQ1BVIHRpbWUgc2Nhbm5pbmcgdGhlIHRyZWUKKwkgKiB3YWl0aW5nIGZvciBJTyB0byBjb21wbGV0ZSBhbmQgeGZzc3luY2QgbmV2ZXIgZ29lcyBiYWNrIHRvIHRoZSBpZGxlCisJICogc3RhdGUuIEluc3RlYWQsIHJldHVybiAwIHRvIGxldCB0aGUgbmV4dCBzY2hlZHVsZWQgYmFja2dyb3VuZCByZWNsYWltCisJICogYXR0ZW1wdCB0byByZWNsYWltIHRoZSBpbm9kZSBhZ2Fpbi4KKwkgKi8KKwlyZXR1cm4gMDsKKworcmVjbGFpbToKKwl4ZnNfaWZ1bmxvY2soaXApOwogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJeGZzX2lyZWNsYWltKGlwKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3I7CisKIH0KIAogaW50CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmgKaW5kZXggZWE5MzJiNC4uZDQ4MGMzNCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaApAQCAtMzcsNyArMzcsNiBAQAogCiBpbnQgeGZzX3N5bmNfYXR0cihzdHJ1Y3QgeGZzX21vdW50ICptcCwgaW50IGZsYWdzKTsKIGludCB4ZnNfc3luY19kYXRhKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBpbnQgZmxhZ3MpOwotaW50IHhmc19zeW5jX2ZzZGF0YShzdHJ1Y3QgeGZzX21vdW50ICptcCwgaW50IGZsYWdzKTsKIAogaW50IHhmc19xdWllc2NlX2RhdGEoc3RydWN0IHhmc19tb3VudCAqbXApOwogdm9pZCB4ZnNfcXVpZXNjZV9hdHRyKHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmggYi9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5oCmluZGV4IGMyMmE2MDguLmE0NTc0ZGMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaApAQCAtNzgsNiArNzgsMzMgQEAKIAkpCiApCiAKKyNkZWZpbmUgREVGSU5FX1BFUkFHX1JFRl9FVkVOVChuYW1lKSBcCitUUkFDRV9FVkVOVChuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19hZ251bWJlcl90IGFnbm8sIGludCByZWZjb3VudCwgXAorCQkgdW5zaWduZWQgbG9uZyBjYWxsZXJfaXApLCBcCisJVFBfQVJHUyhtcCwgYWdubywgcmVmY291bnQsIGNhbGxlcl9pcCksIFwKKwlUUF9TVFJVQ1RfX2VudHJ5KCBcCisJCV9fZmllbGQoZGV2X3QsIGRldikgXAorCQlfX2ZpZWxkKHhmc19hZ251bWJlcl90LCBhZ25vKSBcCisJCV9fZmllbGQoaW50LCByZWZjb3VudCkgXAorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNhbGxlcl9pcCkgXAorCSksIFwKKwlUUF9mYXN0X2Fzc2lnbiggXAorCQlfX2VudHJ5LT5kZXYgPSBtcC0+bV9zdXBlci0+c19kZXY7IFwKKwkJX19lbnRyeS0+YWdubyA9IGFnbm87IFwKKwkJX19lbnRyeS0+cmVmY291bnQgPSByZWZjb3VudDsgXAorCQlfX2VudHJ5LT5jYWxsZXJfaXAgPSBjYWxsZXJfaXA7IFwKKwkpLCBcCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgYWdubyAldSByZWZjb3VudCAlZCBjYWxsZXIgJXBmIiwgXAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIFwKKwkJICBfX2VudHJ5LT5hZ25vLCBcCisJCSAgX19lbnRyeS0+cmVmY291bnQsIFwKKwkJICAoY2hhciAqKV9fZW50cnktPmNhbGxlcl9pcCkgXAorKTsKKworREVGSU5FX1BFUkFHX1JFRl9FVkVOVCh4ZnNfcGVyYWdfZ2V0KQorREVGSU5FX1BFUkFHX1JFRl9FVkVOVCh4ZnNfcGVyYWdfcHV0KQorCiAjZGVmaW5lIERFRklORV9BVFRSX0xJU1RfRVZFTlQobmFtZSkgXAogREVGSU5FX0VWRU5UKHhmc19hdHRyX2xpc3RfY2xhc3MsIG5hbWUsIFwKIAlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0ICpjdHgpLCBcCkBAIC00NTYsNiArNDgzLDcgQEAKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fdW5sb2NrX3N0YWxlKTsKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fY29tbWl0dGVkKTsKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fcHVzaCk7CitERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX2J1Zl9pdGVtX3B1c2hidWYpOwogREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc190cmFuc19nZXRfYnVmKTsKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfdHJhbnNfZ2V0X2J1Zl9yZWN1cik7CiBERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX3RyYW5zX2dldHNiKTsKQEAgLTE0MTQsNiArMTQ0Miw1OSBAQAogCQkgIF9fZW50cnktPmNvdW50KQogKTsKIAorI2RlZmluZSBYRlNfU1dBUEVYVF9JTk9ERVMgXAorCXsgMCwJInRhcmdldCIgfSwgXAorCXsgMSwJInRlbXAiIH0KKworI2RlZmluZSBYRlNfSU5PREVfRk9STUFUX1NUUiBcCisJeyAwLAkiaW52YWxpZCIgfSwgXAorCXsgMSwJImxvY2FsIiB9LCBcCisJeyAyLAkiZXh0ZW50IiB9LCBcCisJeyAzLAkiYnRyZWUiIH0KKworREVDTEFSRV9FVkVOVF9DTEFTUyh4ZnNfc3dhcF9leHRlbnRfY2xhc3MsCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIGludCB3aGljaCksCisJVFBfQVJHUyhpcCwgd2hpY2gpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoZGV2X3QsIGRldikKKwkJX19maWVsZChpbnQsIHdoaWNoKQorCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW5vKQorCQlfX2ZpZWxkKGludCwgZm9ybWF0KQorCQlfX2ZpZWxkKGludCwgbmV4KQorCQlfX2ZpZWxkKGludCwgbWF4X25leCkKKwkJX19maWVsZChpbnQsIGJyb290X3NpemUpCisJCV9fZmllbGQoaW50LCBmb3JrX29mZikKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYgPSBWRlNfSShpcCktPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT53aGljaCA9IHdoaWNoOworCQlfX2VudHJ5LT5pbm8gPSBpcC0+aV9pbm87CisJCV9fZW50cnktPmZvcm1hdCA9IGlwLT5pX2QuZGlfZm9ybWF0OworCQlfX2VudHJ5LT5uZXggPSBpcC0+aV9kLmRpX25leHRlbnRzOworCQlfX2VudHJ5LT5tYXhfbmV4ID0gaXAtPmlfZGYuaWZfZXh0X21heDsKKwkJX19lbnRyeS0+YnJvb3Rfc2l6ZSA9IGlwLT5pX2RmLmlmX2Jyb290X2J5dGVzOworCQlfX2VudHJ5LT5mb3JrX29mZiA9IFhGU19JRk9SS19CT0ZGKGlwKTsKKwkpLAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHggKCVzKSwgJXMgZm9ybWF0LCBudW1fZXh0ZW50cyAlZCwgIgorCQkgICJNYXggaW4tZm9yayBleHRlbnRzICVkLCBicm9vdCBzaXplICVkLCBmb3JrIG9mZnNldCAlZCIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICBfX2VudHJ5LT5pbm8sCisJCSAgX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LT53aGljaCwgWEZTX1NXQVBFWFRfSU5PREVTKSwKKwkJICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPmZvcm1hdCwgWEZTX0lOT0RFX0ZPUk1BVF9TVFIpLAorCQkgIF9fZW50cnktPm5leCwKKwkJICBfX2VudHJ5LT5tYXhfbmV4LAorCQkgIF9fZW50cnktPmJyb290X3NpemUsCisJCSAgX19lbnRyeS0+Zm9ya19vZmYpCispCisKKyNkZWZpbmUgREVGSU5FX1NXQVBFWFRfRVZFTlQobmFtZSkgXAorREVGSU5FX0VWRU5UKHhmc19zd2FwX2V4dGVudF9jbGFzcywgbmFtZSwgXAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBpbnQgd2hpY2gpLCBcCisJVFBfQVJHUyhpcCwgd2hpY2gpKQorCitERUZJTkVfU1dBUEVYVF9FVkVOVCh4ZnNfc3dhcF9leHRlbnRfYmVmb3JlKTsKK0RFRklORV9TV0FQRVhUX0VWRU5UKHhmc19zd2FwX2V4dGVudF9hZnRlcik7CisKICNlbmRpZiAvKiBfVFJBQ0VfWEZTX0ggKi8KIAogI3VuZGVmIFRSQUNFX0lOQ0xVREVfUEFUSApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfeGF0dHIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3hhdHRyLmMKaW5kZXggMGIxODc4OC4uZmEwMWI5ZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfeGF0dHIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc194YXR0ci5jCkBAIC00NSw3ICs0NSw3IEBACiAJCXZhbHVlID0gTlVMTDsKIAl9CiAKLQllcnJvciA9IC14ZnNfYXR0cl9nZXQoaXAsIG5hbWUsIHZhbHVlLCAmYXNpemUsIHhmbGFncyk7CisJZXJyb3IgPSAteGZzX2F0dHJfZ2V0KGlwLCAodW5zaWduZWQgY2hhciAqKW5hbWUsIHZhbHVlLCAmYXNpemUsIHhmbGFncyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJcmV0dXJuIGFzaXplOwpAQCAtNjcsOCArNjcsOSBAQAogCQl4ZmxhZ3MgfD0gQVRUUl9SRVBMQUNFOwogCiAJaWYgKCF2YWx1ZSkKLQkJcmV0dXJuIC14ZnNfYXR0cl9yZW1vdmUoaXAsIG5hbWUsIHhmbGFncyk7Ci0JcmV0dXJuIC14ZnNfYXR0cl9zZXQoaXAsIG5hbWUsICh2b2lkICopdmFsdWUsIHNpemUsIHhmbGFncyk7CisJCXJldHVybiAteGZzX2F0dHJfcmVtb3ZlKGlwLCAodW5zaWduZWQgY2hhciAqKW5hbWUsIHhmbGFncyk7CisJcmV0dXJuIC14ZnNfYXR0cl9zZXQoaXAsICh1bnNpZ25lZCBjaGFyICopbmFtZSwKKwkJCQkodm9pZCAqKXZhbHVlLCBzaXplLCB4ZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IHhhdHRyX2hhbmRsZXIgeGZzX3hhdHRyX3VzZXJfaGFuZGxlciA9IHsKQEAgLTEyNCw4ICsxMjUsMTMgQEAKIH0KIAogc3RhdGljIGludAoteGZzX3hhdHRyX3B1dF9saXN0ZW50KHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKmNvbnRleHQsIGludCBmbGFncywKLQkJY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCB2YWx1ZWxlbiwgY2hhciAqdmFsdWUpCit4ZnNfeGF0dHJfcHV0X2xpc3RlbnQoCisJc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY29udGV4dCwKKwlpbnQJCWZsYWdzLAorCXVuc2lnbmVkIGNoYXIJKm5hbWUsCisJaW50CQluYW1lbGVuLAorCWludAkJdmFsdWVsZW4sCisJdW5zaWduZWQgY2hhcgkqdmFsdWUpCiB7CiAJdW5zaWduZWQgaW50IHByZWZpeF9sZW4gPSB4ZnNfeGF0dHJfcHJlZml4X2xlbihmbGFncyk7CiAJY2hhciAqb2Zmc2V0OwpAQCAtMTQ4LDcgKzE1NCw3IEBACiAJb2Zmc2V0ID0gKGNoYXIgKiljb250ZXh0LT5hbGlzdCArIGNvbnRleHQtPmNvdW50OwogCXN0cm5jcHkob2Zmc2V0LCB4ZnNfeGF0dHJfcHJlZml4KGZsYWdzKSwgcHJlZml4X2xlbik7CiAJb2Zmc2V0ICs9IHByZWZpeF9sZW47Ci0Jc3RybmNweShvZmZzZXQsIG5hbWUsIG5hbWVsZW4pOwkJCS8qIHJlYWwgbmFtZSAqLworCXN0cm5jcHkob2Zmc2V0LCAoY2hhciAqKW5hbWUsIG5hbWVsZW4pOwkJCS8qIHJlYWwgbmFtZSAqLwogCW9mZnNldCArPSBuYW1lbGVuOwogCSpvZmZzZXQgPSAnXDAnOwogCWNvbnRleHQtPmNvdW50ICs9IHByZWZpeF9sZW4gKyBuYW1lbGVuICsgMTsKQEAgLTE1Niw4ICsxNjIsMTMgQEAKIH0KIAogc3RhdGljIGludAoteGZzX3hhdHRyX3B1dF9saXN0ZW50X3NpemVzKHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKmNvbnRleHQsIGludCBmbGFncywKLQkJY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCB2YWx1ZWxlbiwgY2hhciAqdmFsdWUpCit4ZnNfeGF0dHJfcHV0X2xpc3RlbnRfc2l6ZXMoCisJc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY29udGV4dCwKKwlpbnQJCWZsYWdzLAorCXVuc2lnbmVkIGNoYXIJKm5hbWUsCisJaW50CQluYW1lbGVuLAorCWludAkJdmFsdWVsZW4sCisJdW5zaWduZWQgY2hhcgkqdmFsdWUpCiB7CiAJY29udGV4dC0+Y291bnQgKz0geGZzX3hhdHRyX3ByZWZpeF9sZW4oZmxhZ3MpICsgbmFtZWxlbiArIDE7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKaW5kZXggZDdjN2VlYS4uNWY3OWRkNyAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYwpAQCAtMTE4Nyw3ICsxMTg3LDcgQEAKIAkgKiBibG9jaywgbmFkYS4KIAkgKi8KIAlpZiAoIVhGU19EUV9JU19ESVJUWShkcXApIHx8Ci0JICAgICghKGZsYWdzICYgWEZTX1FNT1BUX1NZTkMpICYmIGF0b21pY19yZWFkKCZkcXAtPnFfcGluY291bnQpID4gMCkpIHsKKwkgICAgKCEoZmxhZ3MgJiBTWU5DX1dBSVQpICYmIGF0b21pY19yZWFkKCZkcXAtPnFfcGluY291bnQpID4gMCkpIHsKIAkJeGZzX2RxZnVubG9jayhkcXApOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMjQ4LDIzICsxMjQ4LDIwIEBACiAJICovCiAJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKSB7CiAJCXRyYWNlX3hmc19kcWZsdXNoX2ZvcmNlKGRxcCk7Ci0JCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSk7CisJCXhmc19sb2dfZm9yY2UobXAsIDApOwogCX0KIAotCWlmIChmbGFncyAmIFhGU19RTU9QVF9ERUxXUkkpIHsKLQkJeGZzX2Jkd3JpdGUobXAsIGJwKTsKLQl9IGVsc2UgaWYgKGZsYWdzICYgWEZTX1FNT1BUX0FTWU5DKSB7Ci0JCWVycm9yID0geGZzX2Jhd3JpdGUobXAsIGJwKTsKLQl9IGVsc2UgeworCWlmIChmbGFncyAmIFNZTkNfV0FJVCkKIAkJZXJyb3IgPSB4ZnNfYndyaXRlKG1wLCBicCk7Ci0JfQorCWVsc2UKKwkJeGZzX2Jkd3JpdGUobXAsIGJwKTsKIAogCXRyYWNlX3hmc19kcWZsdXNoX2RvbmUoZHFwKTsKIAogCS8qCiAJICogZHFwIGlzIHN0aWxsIGxvY2tlZCwgYnV0IGNhbGxlciBpcyBmcmVlIHRvIHVubG9jayBpdCBub3cuCiAJICovCi0JcmV0dXJuIChlcnJvcik7CisJcmV0dXJuIGVycm9yOwogCiB9CiAKQEAgLTE0NDUsNyArMTQ0Miw3IEBACiAJCSAqIFdlIGRvbid0IGNhcmUgYWJvdXQgZ2V0dGluZyBkaXNrIGVycm9ycyBoZXJlLiBXZSBuZWVkCiAJCSAqIHRvIHB1cmdlIHRoaXMgZHF1b3QgYW55d2F5LCBzbyB3ZSBnbyBhaGVhZCByZWdhcmRsZXNzLgogCQkgKi8KLQkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIFhGU19RTU9QVF9TWU5DKTsKKwkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIFNZTkNfV0FJVCk7CiAJCWlmIChlcnJvcikKIAkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLAogCQkJCSJ4ZnNfcW1fZHFwdXJnZTogZHF1b3QgJXAgZmx1c2ggZmFpbGVkIiwgZHFwKTsKQEAgLTE1MjksMjUgKzE1MjYsMTcgQEAKIAkgKiB0aGUgZmx1c2ggbG9jayB3aGVuIHRoZSBJL08gY29tcGxldGVzLgogCSAqLwogCWJwID0geGZzX2luY29yZShkcXAtPnFfbW91bnQtPm1fZGRldl90YXJncCwgZHFwLT5xX2Jsa25vLAotCQkgICAgWEZTX1FJX0RRQ0hVTktMRU4oZHFwLT5xX21vdW50KSwKLQkJICAgIFhGU19JTkNPUkVfVFJZTE9DSyk7Ci0JaWYgKGJwICE9IE5VTEwpIHsKLQkJaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkgewotCQkJaW50CWVycm9yOwotCQkJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKSB7Ci0JCQkJeGZzX2xvZ19mb3JjZShkcXAtPnFfbW91bnQsCi0JCQkJCSAgICAgICh4ZnNfbHNuX3QpMCwKLQkJCQkJICAgICAgWEZTX0xPR19GT1JDRSk7Ci0JCQl9Ci0JCQllcnJvciA9IHhmc19iYXdyaXRlKGRxcC0+cV9tb3VudCwgYnApOwotCQkJaWYgKGVycm9yKQotCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGRxcC0+cV9tb3VudCwKLQkJCQkJInhmc19xbV9kcWZsb2NrX3B1c2hidWZfd2FpdDogIgotCQkJCQkicHVzaGJ1ZiBlcnJvciAlZCBvbiBkcXAgJXAsIGJwICVwIiwKLQkJCQkJZXJyb3IsIGRxcCwgYnApOwotCQl9IGVsc2UgewotCQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JCX0KKwkJICAgIFhGU19RSV9EUUNIVU5LTEVOKGRxcC0+cV9tb3VudCksIFhCRl9UUllMT0NLKTsKKwlpZiAoIWJwKQorCQlnb3RvIG91dF9sb2NrOworCisJaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkgeworCQlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpCisJCQl4ZnNfbG9nX2ZvcmNlKGRxcC0+cV9tb3VudCwgMCk7CisJCXhmc19idWZfZGVsd3JpX3Byb21vdGUoYnApOworCQl3YWtlX3VwX3Byb2Nlc3MoYnAtPmJfdGFyZ2V0LT5idF90YXNrKTsKIAl9CisJeGZzX2J1Zl9yZWxzZShicCk7CitvdXRfbG9jazoKIAl4ZnNfZHFmbG9jayhkcXApOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uYwppbmRleCBkMGQ0YTlhLi40ZTRlZTlhIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uYworKysgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uYwpAQCAtNzQsMTEgKzc0LDExIEBACiAKIAlsb2d2ZWMtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmbG9naXRlbS0+cWxpX2Zvcm1hdDsKIAlsb2d2ZWMtPmlfbGVuICA9IHNpemVvZih4ZnNfZHFfbG9nZm9ybWF0X3QpOwotCVhMT0dfVkVDX1NFVF9UWVBFKGxvZ3ZlYywgWExPR19SRUdfVFlQRV9RRk9STUFUKTsKKwlsb2d2ZWMtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfUUZPUk1BVDsKIAlsb2d2ZWMrKzsKIAlsb2d2ZWMtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmbG9naXRlbS0+cWxpX2RxdW90LT5xX2NvcmU7CiAJbG9ndmVjLT5pX2xlbiAgPSBzaXplb2YoeGZzX2Rpc2tfZHF1b3RfdCk7Ci0JWExPR19WRUNfU0VUX1RZUEUobG9ndmVjLCBYTE9HX1JFR19UWVBFX0RRVU9UKTsKKwlsb2d2ZWMtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfRFFVT1Q7CiAKIAlBU1NFUlQoMiA9PSBsb2dpdGVtLT5xbGlfaXRlbS5saV9kZXNjLT5saWRfc2l6ZSk7CiAJbG9naXRlbS0+cWxpX2Zvcm1hdC5xbGZfc2l6ZSA9IDI7CkBAIC0xNTMsNyArMTUzLDcgQEAKIAkgKiBsb2NrIHdpdGhvdXQgc2xlZXBpbmcsIHRoZW4gdGhlcmUgbXVzdCBub3QgaGF2ZSBiZWVuCiAJICogYW55b25lIGluIHRoZSBwcm9jZXNzIG9mIGZsdXNoaW5nIHRoZSBkcXVvdC4KIAkgKi8KLQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgWEZTX1FNT1BUX0RFTFdSSSk7CisJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIDApOwogCWlmIChlcnJvcikKIAkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgZHFwLT5xX21vdW50LAogCQkJInhmc19xbV9kcXVvdF9sb2dpdGVtX3B1c2g6IHB1c2ggZXJyb3IgJWQgb24gZHFwICVwIiwKQEAgLTE5MCw3ICsxOTAsNyBAQAogCS8qCiAJICogR2l2ZSB0aGUgbG9nIGEgcHVzaCBzbyB3ZSBkb24ndCB3YWl0IGhlcmUgdG9vIGxvbmcuCiAJICovCi0JeGZzX2xvZ19mb3JjZShkcXAtPnFfbW91bnQsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSk7CisJeGZzX2xvZ19mb3JjZShkcXAtPnFfbW91bnQsIDApOwogCXdhaXRfZXZlbnQoZHFwLT5xX3BpbndhaXQsIChhdG9taWNfcmVhZCgmZHFwLT5xX3BpbmNvdW50KSA9PSAwKSk7CiB9CiAKQEAgLTIxMiw2OCArMjEyLDMxIEBACiAJeGZzX2RxdW90X3QJKmRxcDsKIAl4ZnNfbW91bnRfdAkqbXA7CiAJeGZzX2J1Zl90CSpicDsKLQl1aW50CQlkb3B1c2g7CiAKIAlkcXAgPSBxaXAtPnFsaV9kcXVvdDsKIAlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChkcXApKTsKIAogCS8qCi0JICogVGhlIHFsaV9wdXNoYnVmX2ZsYWcga2VlcHMgb3RoZXJzIGZyb20KLQkgKiB0cnlpbmcgdG8gZHVwbGljYXRlIG91ciBlZmZvcnQuCi0JICovCi0JQVNTRVJUKHFpcC0+cWxpX3B1c2hidWZfZmxhZyAhPSAwKTsKLQlBU1NFUlQocWlwLT5xbGlfcHVzaF9vd25lciA9PSBjdXJyZW50X3BpZCgpKTsKLQotCS8qCiAJICogSWYgZmx1c2hsb2NrIGlzbid0IGxvY2tlZCBhbnltb3JlLCBjaGFuY2VzIGFyZSB0aGF0IHRoZQogCSAqIGlub2RlIGZsdXNoIGNvbXBsZXRlZCBhbmQgdGhlIGlub2RlIHdhcyB0YWtlbiBvZmYgdGhlIEFJTC4KIAkgKiBTbywganVzdCBnZXQgb3V0LgogCSAqLwogCWlmIChjb21wbGV0aW9uX2RvbmUoJmRxcC0+cV9mbHVzaCkgIHx8CiAJICAgICgocWlwLT5xbGlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpID09IDApKSB7Ci0JCXFpcC0+cWxpX3B1c2hidWZfZmxhZyA9IDA7CiAJCXhmc19kcXVubG9jayhkcXApOwogCQlyZXR1cm47CiAJfQogCW1wID0gZHFwLT5xX21vdW50OwogCWJwID0geGZzX2luY29yZShtcC0+bV9kZGV2X3RhcmdwLCBxaXAtPnFsaV9mb3JtYXQucWxmX2Jsa25vLAotCQkgICAgWEZTX1FJX0RRQ0hVTktMRU4obXApLAotCQkgICAgWEZTX0lOQ09SRV9UUllMT0NLKTsKLQlpZiAoYnAgIT0gTlVMTCkgewotCQlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKSB7Ci0JCQlkb3B1c2ggPSAoKHFpcC0+cWxpX2l0ZW0ubGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKSAmJgotCQkJCSAgIWNvbXBsZXRpb25fZG9uZSgmZHFwLT5xX2ZsdXNoKSk7Ci0JCQlxaXAtPnFsaV9wdXNoYnVmX2ZsYWcgPSAwOwotCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0KLQkJCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSkgewotCQkJCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwKLQkJCQkJICAgICAgWEZTX0xPR19GT1JDRSk7Ci0JCQl9Ci0JCQlpZiAoZG9wdXNoKSB7Ci0JCQkJaW50CWVycm9yOwotI2lmZGVmIFhGU1JBQ0VERUJVRwotCQkJCWRlbGF5X2Zvcl9pbnRyKCk7Ci0JCQkJZGVsYXkoMzAwKTsKLSNlbmRpZgotCQkJCWVycm9yID0geGZzX2Jhd3JpdGUobXAsIGJwKTsKLQkJCQlpZiAoZXJyb3IpCi0JCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLAotCSJ4ZnNfcW1fZHF1b3RfbG9naXRlbV9wdXNoYnVmOiBwdXNoYnVmIGVycm9yICVkIG9uIHFpcCAlcCwgYnAgJXAiLAotCQkJCQkJCWVycm9yLCBxaXAsIGJwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlxaXAtPnFsaV9wdXNoYnVmX2ZsYWcgPSAwOwotCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JcWlwLT5xbGlfcHVzaGJ1Zl9mbGFnID0gMDsKKwkJICAgIFhGU19RSV9EUUNIVU5LTEVOKG1wKSwgWEJGX1RSWUxPQ0spOwogCXhmc19kcXVubG9jayhkcXApOworCWlmICghYnApCisJCXJldHVybjsKKwlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKQorCQl4ZnNfYnVmX2RlbHdyaV9wcm9tb3RlKGJwKTsKKwl4ZnNfYnVmX3JlbHNlKGJwKTsKKwlyZXR1cm47CisKIH0KIAogLyoKQEAgLTI5MSw1MCArMjU0LDI0IEBACiAJeGZzX2RxX2xvZ2l0ZW1fdAkqcWlwKQogewogCXhmc19kcXVvdF90CQkqZHFwOwotCXVpbnQJCQlyZXR2YWw7CiAKIAlkcXAgPSBxaXAtPnFsaV9kcXVvdDsKIAlpZiAoYXRvbWljX3JlYWQoJmRxcC0+cV9waW5jb3VudCkgPiAwKQotCQlyZXR1cm4gKFhGU19JVEVNX1BJTk5FRCk7CisJCXJldHVybiBYRlNfSVRFTV9QSU5ORUQ7CiAKIAlpZiAoISB4ZnNfcW1fZHFsb2NrX25vd2FpdChkcXApKQotCQlyZXR1cm4gKFhGU19JVEVNX0xPQ0tFRCk7CisJCXJldHVybiBYRlNfSVRFTV9MT0NLRUQ7CiAKLQlyZXR2YWwgPSBYRlNfSVRFTV9TVUNDRVNTOwogCWlmICgheGZzX2RxZmxvY2tfbm93YWl0KGRxcCkpIHsKIAkJLyoKLQkJICogVGhlIGRxdW90IGlzIGFscmVhZHkgYmVpbmcgZmx1c2hlZC4JSXQgbWF5IGhhdmUgYmVlbgotCQkgKiBmbHVzaGVkIGRlbGF5ZWQgd3JpdGUsIGhvd2V2ZXIsIGFuZCB3ZSBkb24ndCB3YW50IHRvCi0JCSAqIGdldCBzdHVjayB3YWl0aW5nIGZvciB0aGF0IHRvIGNvbXBsZXRlLiAgU28sIHdlIHdhbnQgdG8gY2hlY2sKLQkJICogdG8gc2VlIGlmIHdlIGNhbiBsb2NrIHRoZSBkcXVvdCdzIGJ1ZmZlciB3aXRob3V0IHNsZWVwaW5nLgotCQkgKiBJZiB3ZSBjYW4gYW5kIGl0IGlzIG1hcmtlZCBmb3IgZGVsYXllZCB3cml0ZSwgdGhlbiB3ZQotCQkgKiBob2xkIGl0IGFuZCBzZW5kIGl0IG91dCBmcm9tIHRoZSBwdXNoIHJvdXRpbmUuICBXZSBkb24ndAotCQkgKiB3YW50IHRvIGRvIHRoYXQgbm93IHNpbmNlIHdlIG1pZ2h0IHNsZWVwIGluIHRoZSBkZXZpY2UKLQkJICogc3RyYXRlZ3kgcm91dGluZS4gIFdlIGFsc28gZG9uJ3Qgd2FudCB0byBncmFiIHRoZSBidWZmZXIgbG9jawotCQkgKiBoZXJlIGJlY2F1c2Ugd2UnZCBsaWtlIG5vdCB0byBjYWxsIGludG8gdGhlIGJ1ZmZlciBjYWNoZQotCQkgKiB3aGlsZSBob2xkaW5nIHRoZSBBSUwgbG9jay4KLQkJICogTWFrZSBzdXJlIHRvIG9ubHkgcmV0dXJuIFBVU0hCVUYgaWYgd2Ugc2V0IHB1c2hidWZfZmxhZwotCQkgKiBvdXJzZWx2ZXMuICBJZiBzb21lb25lIGVsc2UgaXMgZG9pbmcgaXQgdGhlbiB3ZSBkb24ndAotCQkgKiB3YW50IHRvIGdvIHRvIHRoZSBwdXNoIHJvdXRpbmUgYW5kIGR1cGxpY2F0ZSB0aGVpciBlZmZvcnRzLgorCQkgKiBkcXVvdCBoYXMgYWxyZWFkeSBiZWVuIGZsdXNoZWQgdG8gdGhlIGJhY2tpbmcgYnVmZmVyLAorCQkgKiBsZWF2ZSBpdCBsb2NrZWQsIHB1c2hidWYgcm91dGluZSB3aWxsIHVubG9jayBpdC4KIAkJICovCi0JCWlmIChxaXAtPnFsaV9wdXNoYnVmX2ZsYWcgPT0gMCkgewotCQkJcWlwLT5xbGlfcHVzaGJ1Zl9mbGFnID0gMTsKLQkJCUFTU0VSVChxaXAtPnFsaV9mb3JtYXQucWxmX2Jsa25vID09IGRxcC0+cV9ibGtubyk7Ci0jaWZkZWYgREVCVUcKLQkJCXFpcC0+cWxpX3B1c2hfb3duZXIgPSBjdXJyZW50X3BpZCgpOwotI2VuZGlmCi0JCQkvKgotCQkJICogVGhlIGRxdW90IGlzIGxlZnQgbG9ja2VkLgotCQkJICovCi0JCQlyZXR2YWwgPSBYRlNfSVRFTV9QVVNIQlVGOwotCQl9IGVsc2UgewotCQkJcmV0dmFsID0gWEZTX0lURU1fRkxVU0hJTkc7Ci0JCQl4ZnNfZHF1bmxvY2tfbm9ub3RpZnkoZHFwKTsKLQkJfQorCQlyZXR1cm4gWEZTX0lURU1fUFVTSEJVRjsKIAl9CiAKIAlBU1NFUlQocWlwLT5xbGlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpOwotCXJldHVybiAocmV0dmFsKTsKKwlyZXR1cm4gWEZTX0lURU1fU1VDQ0VTUzsKIH0KIAogCkBAIC00NjcsNyArNDA0LDcgQEAKIAogCWxvZ192ZWN0b3ItPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmKHFmLT5xcWxfZm9ybWF0KTsKIAlsb2dfdmVjdG9yLT5pX2xlbiA9IHNpemVvZih4ZnNfcW9mZl9sb2dpdGVtX3QpOwotCVhMT0dfVkVDX1NFVF9UWVBFKGxvZ192ZWN0b3IsIFhMT0dfUkVHX1RZUEVfUVVPVEFPRkYpOworCWxvZ192ZWN0b3ItPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfUVVPVEFPRkY7CiAJcWYtPnFxbF9mb3JtYXQucWZfc2l6ZSA9IDE7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5oIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmgKaW5kZXggNWE2MzI1My4uNWFjYWUyYSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmgKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmgKQEAgLTI3LDEwICsyNyw2IEBACiAJeGZzX2xvZ19pdGVtX3QJCSBxbGlfaXRlbTsJICAgLyogY29tbW9uIHBvcnRpb24gKi8KIAlzdHJ1Y3QgeGZzX2RxdW90CSpxbGlfZHF1b3Q7CSAgIC8qIGRxdW90IHB0ciAqLwogCXhmc19sc25fdAkJIHFsaV9mbHVzaF9sc247CSAgIC8qIGxzbiBhdCBsYXN0IGZsdXNoICovCi0JdW5zaWduZWQgc2hvcnQJCSBxbGlfcHVzaGJ1Zl9mbGFnOyAvKiAxIGJpdCB1c2VkIGluIHB1c2hfYWlsICovCi0jaWZkZWYgREVCVUcKLQl1aW50NjRfdAkJIHFsaV9wdXNoX293bmVyOwotI2VuZGlmCiAJeGZzX2RxX2xvZ2Zvcm1hdF90CSBxbGlfZm9ybWF0OwkgICAvKiBsb2dnZWQgc3RydWN0dXJlICovCiB9IHhmc19kcV9sb2dpdGVtX3Q7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwppbmRleCA5ZTYyN2E4Li40MTdlNjFlIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCkBAIC0xMTgsOSArMTE4LDE0IEBACiAJICovCiAJdWRxaGFzaCA9IGttZW1femFsbG9jX2dyZWVkeSgmaHNpemUsCiAJCQkJICAgICBYRlNfUU1fSEFTSFNJWkVfTE9XICogc2l6ZW9mKHhmc19kcWhhc2hfdCksCi0JCQkJICAgICBYRlNfUU1fSEFTSFNJWkVfSElHSCAqIHNpemVvZih4ZnNfZHFoYXNoX3QpLAotCQkJCSAgICAgS01fU0xFRVAgfCBLTV9NQVlGQUlMIHwgS01fTEFSR0UpOwotCWdkcWhhc2ggPSBrbWVtX3phbGxvYyhoc2l6ZSwgS01fU0xFRVAgfCBLTV9MQVJHRSk7CisJCQkJICAgICBYRlNfUU1fSEFTSFNJWkVfSElHSCAqIHNpemVvZih4ZnNfZHFoYXNoX3QpKTsKKwlpZiAoIXVkcWhhc2gpCisJCWdvdG8gb3V0OworCisJZ2RxaGFzaCA9IGttZW1femFsbG9jX2xhcmdlKGhzaXplKTsKKwlpZiAoIWdkcWhhc2gpCisJCWdvdG8gb3V0X2ZyZWVfdWRxaGFzaDsKKwogCWhzaXplIC89IHNpemVvZih4ZnNfZHFoYXNoX3QpOwogCW5kcXVvdCA9IGhzaXplIDw8IDg7CiAKQEAgLTE3MCw2ICsxNzUsMTEgQEAKIAltdXRleF9pbml0KCZxY2hlY2tfbG9jayk7CiAjZW5kaWYKIAlyZXR1cm4geHFtOworCisgb3V0X2ZyZWVfdWRxaGFzaDoKKwlrbWVtX2ZyZWVfbGFyZ2UodWRxaGFzaCk7Cisgb3V0OgorCXJldHVybiBOVUxMOwogfQogCiAvKgpAQCAtMTg5LDggKzE5OSw4IEBACiAJCXhmc19xbV9saXN0X2Rlc3Ryb3koJih4cW0tPnFtX3Vzcl9kcWh0YWJsZVtpXSkpOwogCQl4ZnNfcW1fbGlzdF9kZXN0cm95KCYoeHFtLT5xbV9ncnBfZHFodGFibGVbaV0pKTsKIAl9Ci0Ja21lbV9mcmVlKHhxbS0+cW1fdXNyX2RxaHRhYmxlKTsKLQlrbWVtX2ZyZWUoeHFtLT5xbV9ncnBfZHFodGFibGUpOworCWttZW1fZnJlZV9sYXJnZSh4cW0tPnFtX3Vzcl9kcWh0YWJsZSk7CisJa21lbV9mcmVlX2xhcmdlKHhxbS0+cW1fZ3JwX2RxaHRhYmxlKTsKIAl4cW0tPnFtX3Vzcl9kcWh0YWJsZSA9IE5VTEw7CiAJeHFtLT5xbV9ncnBfZHFodGFibGUgPSBOVUxMOwogCXhxbS0+cW1fZHFoYXNobWFzayA9IDA7CkBAIC0yMTksOCArMjI5LDEyIEBACiAJICovCiAJbXV0ZXhfbG9jaygmeGZzX0dxbV9sb2NrKTsKIAotCWlmICh4ZnNfR3FtID09IE5VTEwpCisJaWYgKCF4ZnNfR3FtKSB7CiAJCXhmc19HcW0gPSB4ZnNfR3FtX2luaXQoKTsKKwkJaWYgKCF4ZnNfR3FtKQorCQkJcmV0dXJuIEVOT01FTTsKKwl9CisKIAkvKgogCSAqIFdlIGNhbiBrZWVwIGEgbGlzdCBvZiBhbGwgZmlsZXN5c3RlbXMgd2l0aCBxdW90YXMgbW91bnRlZCBmb3IKIAkgKiBkZWJ1Z2dpbmcgYW5kIHN0YXRpc3RpY2FsIHB1cnBvc2VzLCBidXQgLi4uCkBAIC00MzYsNyArNDUwLDcgQEAKIFNUQVRJQyBpbnQKIHhmc19xbV9kcWZsdXNoX2FsbCgKIAl4ZnNfbW91bnRfdAkqbXAsCi0JaW50CQlmbGFncykKKwlpbnQJCXN5bmNfbW9kZSkKIHsKIAlpbnQJCXJlY2w7CiAJeGZzX2RxdW90X3QJKmRxcDsKQEAgLTQ3Miw3ICs0ODYsNyBAQAogCQkgKiBhY3Jvc3MgYSBkaXNrIHdyaXRlLgogCQkgKi8KIAkJeGZzX3FtX21wbGlzdF91bmxvY2sobXApOwotCQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgZmxhZ3MpOworCQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgc3luY19tb2RlKTsKIAkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKQEAgLTkxMiwxMyArOTI2LDExIEBACiB7CiAJaW50CQlyZWNsLCByZXN0YXJ0czsKIAl4ZnNfZHF1b3RfdAkqZHFwOwotCXVpbnQJCWZsdXNoX2ZsYWdzOwogCWludAkJZXJyb3I7CiAKIAlpZiAoIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSB8fCAhWEZTX0lTX1FVT1RBX09OKG1wKSkKIAkJcmV0dXJuIDA7CiAKLQlmbHVzaF9mbGFncyA9IChmbGFncyAmIFNZTkNfV0FJVCkgPyBYRlNfUU1PUFRfU1lOQyA6IFhGU19RTU9QVF9ERUxXUkk7CiAJcmVzdGFydHMgPSAwOwogCiAgIGFnYWluOgpAQCAtOTc4LDcgKzk5MCw3IEBACiAJCSAqIGFjcm9zcyBhIGRpc2sgd3JpdGUKIAkJICovCiAJCXhmc19xbV9tcGxpc3RfdW5sb2NrKG1wKTsKLQkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIGZsdXNoX2ZsYWdzKTsKKwkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIGZsYWdzKTsKIAkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCWlmIChlcnJvciAmJiBYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKIAkJCXJldHVybiAwOwkvKiBOZWVkIHRvIHByZXZlbnQgdW1vdW50IGZhaWx1cmUgKi8KQEAgLTE3ODIsNyArMTc5NCw3IEBACiAJICogc3VjY2Vzc2Z1bGx5LgogCSAqLwogCWlmICghZXJyb3IpCi0JCWVycm9yID0geGZzX3FtX2RxZmx1c2hfYWxsKG1wLCBYRlNfUU1PUFRfREVMV1JJKTsKKwkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaF9hbGwobXAsIDApOwogCiAJLyoKIAkgKiBXZSBjYW4gZ2V0IHRoaXMgZXJyb3IgaWYgd2UgY291bGRuJ3QgZG8gYSBkcXVvdCBhbGxvY2F0aW9uIGluc2lkZQpAQCAtMjAwNCw3ICsyMDE2LDcgQEAKIAkJCSAqIFdlIGZsdXNoIGl0IGRlbGF5ZWQgd3JpdGUsIHNvIGRvbid0IGJvdGhlcgogCQkJICogcmVsZWFzaW5nIHRoZSBtcGxvY2suCiAJCQkgKi8KLQkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCBYRlNfUU1PUFRfREVMV1JJKTsKKwkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCAwKTsKIAkJCWlmIChlcnJvcikgewogCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGRxcC0+cV9tb3VudCwKIAkJCSJ4ZnNfcW1fZHFmbHVzaF9hbGw6IGRxdW90ICVwIGZsdXNoIGZhaWxlZCIsIGRxcCk7CkBAIC0yMTg3LDcgKzIxOTksNyBAQAogCQkJICogV2UgZmx1c2ggaXQgZGVsYXllZCB3cml0ZSwgc28gZG9uJ3QgYm90aGVyCiAJCQkgKiByZWxlYXNpbmcgdGhlIGZyZWVsaXN0IGxvY2suCiAJCQkgKi8KLQkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCBYRlNfUU1PUFRfREVMV1JJKTsKKwkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCAwKTsKIAkJCWlmIChlcnJvcikgewogCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGRxcC0+cV9tb3VudCwKIAkJCSJ4ZnNfcW1fZHFyZWNsYWltOiBkcXVvdCAlcCBmbHVzaCBmYWlsZWQiLCBkcXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKaW5kZXggYTUzNDY2My4uOTdiNDEwYyAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCkBAIC01OSw3ICs1OSw3IEBACiAJCWJlNjRfdG9fY3B1KGRwLT5kX2Jsa19oYXJkbGltaXQpOwogCWlmIChsaW1pdCAmJiBzdGF0cC0+Zl9ibG9ja3MgPiBsaW1pdCkgewogCQlzdGF0cC0+Zl9ibG9ja3MgPSBsaW1pdDsKLQkJc3RhdHAtPmZfYmZyZWUgPQorCQlzdGF0cC0+Zl9iZnJlZSA9IHN0YXRwLT5mX2JhdmFpbCA9CiAJCQkoc3RhdHAtPmZfYmxvY2tzID4gYmU2NF90b19jcHUoZHAtPmRfYmNvdW50KSkgPwogCQkJIChzdGF0cC0+Zl9ibG9ja3MgLSBiZTY0X3RvX2NwdShkcC0+ZF9iY291bnQpKSA6IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCmluZGV4IDg3M2UwN2UuLjVkMGVlOGQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKQEAgLTExOTIsOSArMTE5Miw5IEBACiAJaWYgKCEgWEZTX0lTX1FVT1RBX09OKG1wKSkKIAkJcmV0dXJuIFhGU19FUlJPUihFU1JDSCk7CiAKLQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpOworCXhmc19sb2dfZm9yY2UobXAsIFhGU19MT0dfU1lOQyk7CiAJWEZTX2JmbHVzaChtcC0+bV9kZGV2X3RhcmdwKTsKLQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpOworCXhmc19sb2dfZm9yY2UobXAsIFhGU19MT0dfU1lOQyk7CiAJWEZTX2JmbHVzaChtcC0+bV9kZGV2X3RhcmdwKTsKIAogCW11dGV4X2xvY2soJnFjaGVja19sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYyBiL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYwppbmRleCA5N2FjOTY0Li5jM2FiNzVjIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jCkBAIC01ODksMTIgKzU4OSwxOCBAQAogCX0KIH0KIAotU1RBVElDIGludAoteGZzX3F1b3RhX2Vycm9yKHVpbnQgZmxhZ3MpCitTVEFUSUMgdm9pZAoreGZzX3F1b3RhX3dhcm4oCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhmc19kcXVvdAkqZHFwLAorCWludAkJCXR5cGUpCiB7Ci0JaWYgKGZsYWdzICYgWEZTX1FNT1BUX0VOT1NQQykKLQkJcmV0dXJuIEVOT1NQQzsKLQlyZXR1cm4gRURRVU9UOworCS8qIG5vIHdhcm5pbmdzIGZvciBwcm9qZWN0IHF1b3RhcyAtIHdlIGp1c3QgcmV0dXJuIEVOT1NQQyBsYXRlciAqLworCWlmIChkcXAtPmRxX2ZsYWdzICYgWEZTX0RRX1BST0opCisJCXJldHVybjsKKwlxdW90YV9zZW5kX3dhcm5pbmcoKGRxcC0+ZHFfZmxhZ3MgJiBYRlNfRFFfVVNFUikgPyBVU1JRVU9UQSA6IEdSUFFVT1RBLAorCQkJICAgYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9pZCksIG1wLT5tX3N1cGVyLT5zX2RldiwKKwkJCSAgIHR5cGUpOwogfQogCiAvKgpAQCAtNjEyLDcgKzYxOCw2IEBACiAJbG9uZwkJbmlub3MsCiAJdWludAkJZmxhZ3MpCiB7Ci0JaW50CQllcnJvcjsKIAl4ZnNfcWNudF90CWhhcmRsaW1pdDsKIAl4ZnNfcWNudF90CXNvZnRsaW1pdDsKIAl0aW1lX3QJCXRpbWVyOwpAQCAtNjQ5LDcgKzY1NCw2IEBACiAJCXdhcm5saW1pdCA9IFhGU19RSV9SVEJXQVJOTElNSVQoZHFwLT5xX21vdW50KTsKIAkJcmVzYmNvdW50cCA9ICZkcXAtPnFfcmVzX3J0YmNvdW50OwogCX0KLQllcnJvciA9IDA7CiAKIAlpZiAoKGZsYWdzICYgWEZTX1FNT1BUX0ZPUkNFX1JFUykgPT0gMCAmJgogCSAgICBkcXAtPnFfY29yZS5kX2lkICYmCkBAIC02NjcsMTggKzY3MSwyMCBAQAogCQkJICogbmJsa3MuCiAJCQkgKi8KIAkJCWlmIChoYXJkbGltaXQgPiAwVUxMICYmCi0JCQkgICAgIChoYXJkbGltaXQgPD0gbmJsa3MgKyAqcmVzYmNvdW50cCkpIHsKLQkJCQllcnJvciA9IHhmc19xdW90YV9lcnJvcihmbGFncyk7CisJCQkgICAgaGFyZGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApIHsKKwkJCQl4ZnNfcXVvdGFfd2FybihtcCwgZHFwLCBRVU9UQV9OTF9CSEFSRFdBUk4pOwogCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQkJfQotCiAJCQlpZiAoc29mdGxpbWl0ID4gMFVMTCAmJgotCQkJICAgICAoc29mdGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApKSB7CisJCQkgICAgc29mdGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApIHsKIAkJCQlpZiAoKHRpbWVyICE9IDAgJiYgZ2V0X3NlY29uZHMoKSA+IHRpbWVyKSB8fAogCQkJCSAgICAod2FybnMgIT0gMCAmJiB3YXJucyA+PSB3YXJubGltaXQpKSB7Ci0JCQkJCWVycm9yID0geGZzX3F1b3RhX2Vycm9yKGZsYWdzKTsKKwkJCQkJeGZzX3F1b3RhX3dhcm4obXAsIGRxcCwKKwkJCQkJCSAgICAgICBRVU9UQV9OTF9CU09GVExPTkdXQVJOKTsKIAkJCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCQkJfQorCisJCQkJeGZzX3F1b3RhX3dhcm4obXAsIGRxcCwgUVVPVEFfTkxfQlNPRlRXQVJOKTsKIAkJCX0KIAkJfQogCQlpZiAobmlub3MgPiAwKSB7CkBAIC02OTIsMTUgKzY5OCwxOSBAQAogCQkJc29mdGxpbWl0ID0gYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pbm9fc29mdGxpbWl0KTsKIAkJCWlmICghc29mdGxpbWl0KQogCQkJCXNvZnRsaW1pdCA9IHEtPnFpX2lzb2Z0bGltaXQ7CisKIAkJCWlmIChoYXJkbGltaXQgPiAwVUxMICYmIGNvdW50ID49IGhhcmRsaW1pdCkgewotCQkJCWVycm9yID0geGZzX3F1b3RhX2Vycm9yKGZsYWdzKTsKKwkJCQl4ZnNfcXVvdGFfd2FybihtcCwgZHFwLCBRVU9UQV9OTF9JSEFSRFdBUk4pOwogCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwotCQkJfSBlbHNlIGlmIChzb2Z0bGltaXQgPiAwVUxMICYmIGNvdW50ID49IHNvZnRsaW1pdCkgewotCQkJCWlmICgodGltZXIgIT0gMCAmJiBnZXRfc2Vjb25kcygpID4gdGltZXIpIHx8CisJCQl9CisJCQlpZiAoc29mdGxpbWl0ID4gMFVMTCAmJiBjb3VudCA+PSBzb2Z0bGltaXQpIHsKKwkJCQlpZiAgKCh0aW1lciAhPSAwICYmIGdldF9zZWNvbmRzKCkgPiB0aW1lcikgfHwKIAkJCQkgICAgICh3YXJucyAhPSAwICYmIHdhcm5zID49IHdhcm5saW1pdCkpIHsKLQkJCQkJZXJyb3IgPSB4ZnNfcXVvdGFfZXJyb3IoZmxhZ3MpOworCQkJCQl4ZnNfcXVvdGFfd2FybihtcCwgZHFwLAorCQkJCQkJICAgICAgIFFVT1RBX05MX0lTT0ZUTE9OR1dBUk4pOwogCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCQl9CisJCQkJeGZzX3F1b3RhX3dhcm4obXAsIGRxcCwgUVVPVEFfTkxfSVNPRlRXQVJOKTsKIAkJCX0KIAkJfQogCX0KQEAgLTczNiw5ICs3NDYsMTQgQEAKIAlBU1NFUlQoZHFwLT5xX3Jlc19ydGJjb3VudCA+PSBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX3J0YmNvdW50KSk7CiAJQVNTRVJUKGRxcC0+cV9yZXNfaWNvdW50ID49IGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaWNvdW50KSk7CiAKKwl4ZnNfZHF1bmxvY2soZHFwKTsKKwlyZXR1cm4gMDsKKwogZXJyb3JfcmV0dXJuOgogCXhmc19kcXVubG9jayhkcXApOwotCXJldHVybiBlcnJvcjsKKwlpZiAoZmxhZ3MgJiBYRlNfUU1PUFRfRU5PU1BDKQorCQlyZXR1cm4gRU5PU1BDOworCXJldHVybiBFRFFVT1Q7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hY2wuaCBiL2ZzL3hmcy94ZnNfYWNsLmgKaW5kZXggMDBmZDM1N2MuLmQxM2VlYmEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWNsLmgKKysrIGIvZnMveGZzL3hmc19hY2wuaApAQCAtMzYsOCArMzYsOCBAQAogfTsKIAogLyogT24tZGlzayBYRlMgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzICovCi0jZGVmaW5lIFNHSV9BQ0xfRklMRQkJIlNHSV9BQ0xfRklMRSIKLSNkZWZpbmUgU0dJX0FDTF9ERUZBVUxUCQkiU0dJX0FDTF9ERUZBVUxUIgorI2RlZmluZSBTR0lfQUNMX0ZJTEUJCSh1bnNpZ25lZCBjaGFyICopIlNHSV9BQ0xfRklMRSIKKyNkZWZpbmUgU0dJX0FDTF9ERUZBVUxUCQkodW5zaWduZWQgY2hhciAqKSJTR0lfQUNMX0RFRkFVTFQiCiAjZGVmaW5lIFNHSV9BQ0xfRklMRV9TSVpFCShzaXplb2YoU0dJX0FDTF9GSUxFKS0xKQogI2RlZmluZSBTR0lfQUNMX0RFRkFVTFRfU0laRQkoc2l6ZW9mKFNHSV9BQ0xfREVGQVVMVCktMSkKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hZy5oIGIvZnMveGZzL3hmc19hZy5oCmluZGV4IDY3MDJiZDguLmIxYTVhMWYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWcuaAorKysgYi9mcy94ZnMveGZzX2FnLmgKQEAgLTE4NywxNyArMTg3LDEzIEBACiAvKgogICogUGVyLWFnIGluY29yZSBzdHJ1Y3R1cmUsIGNvcGllcyBvZiBpbmZvcm1hdGlvbiBpbiBhZ2YgYW5kIGFnaSwKICAqIHRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIGFsbG9jYXRpb24gZ3JvdXAgc2VsZWN0aW9uLgotICoKLSAqIHBpY2sgc2l6ZXMgd2hpY2ggZml0IGluIGFsbG9jYXRpb24gYnVja2V0cyB3ZWxsCiAgKi8KLSNpZiAoQklUU19QRVJfTE9ORyA9PSAzMikKLSNkZWZpbmUgWEZTX1BBR0JfTlVNX1NMT1RTCTg0Ci0jZWxpZiAoQklUU19QRVJfTE9ORyA9PSA2NCkKICNkZWZpbmUgWEZTX1BBR0JfTlVNX1NMT1RTCTEyOAotI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IHhmc19wZXJhZwotewordHlwZWRlZiBzdHJ1Y3QgeGZzX3BlcmFnIHsKKwlzdHJ1Y3QgeGZzX21vdW50ICpwYWdfbW91bnQ7CS8qIG93bmVyIGZpbGVzeXN0ZW0gKi8KKwl4ZnNfYWdudW1iZXJfdAlwYWdfYWdubzsJLyogQUcgdGhpcyBzdHJ1Y3R1cmUgYmVsb25ncyB0byAqLworCWF0b21pY190CXBhZ19yZWY7CS8qIHBlcmFnIHJlZmVyZW5jZSBjb3VudCAqLwogCWNoYXIJCXBhZ2ZfaW5pdDsJLyogdGhpcyBhZ2YncyBlbnRyeSBpcyBpbml0aWFsaXplZCAqLwogCWNoYXIJCXBhZ2lfaW5pdDsJLyogdGhpcyBhZ2kncyBlbnRyeSBpcyBpbml0aWFsaXplZCAqLwogCWNoYXIJCXBhZ2ZfbWV0YWRhdGE7CS8qIHRoZSBhZ2YgaXMgcHJlZmVycmVkIHRvIGJlIG1ldGFkYXRhICovCkBAIC0yMTAsOCArMjA2LDYgQEAKIAlfX3VpbnQzMl90CXBhZ2ZfYnRyZWVibGtzOwkvKiAjIG9mIGJsb2NrcyBoZWxkIGluIEFHRiBidHJlZXMgKi8KIAl4ZnNfYWdpbm9fdAlwYWdpX2ZyZWVjb3VudDsJLyogbnVtYmVyIG9mIGZyZWUgaW5vZGVzICovCiAJeGZzX2FnaW5vX3QJcGFnaV9jb3VudDsJLyogbnVtYmVyIG9mIGFsbG9jYXRlZCBpbm9kZXMgKi8KLQlpbnQJCXBhZ2JfY291bnQ7CS8qIHBhZ2Igc2xvdHMgaW4gdXNlICovCi0JeGZzX3BlcmFnX2J1c3lfdCAqcGFnYl9saXN0OwkvKiB1bnN0YWJsZSBibG9ja3MgKi8KIAogCS8qCiAJICogSW5vZGUgYWxsb2NhdGlvbiBzZWFyY2ggbG9va3VwIG9wdGltaXNhdGlvbi4KQEAgLTIzMCw2ICsyMjQsOCBAQAogCXJ3bG9ja190CXBhZ19pY2lfbG9jazsJLyogaW5jb3JlIGlub2RlIGxvY2sgKi8KIAlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290IHBhZ19pY2lfcm9vdDsJLyogaW5jb3JlIGlub2RlIGNhY2hlIHJvb3QgKi8KICNlbmRpZgorCWludAkJcGFnYl9jb3VudDsJLyogcGFnYiBzbG90cyBpbiB1c2UgKi8KKwl4ZnNfcGVyYWdfYnVzeV90IHBhZ2JfbGlzdFtYRlNfUEFHQl9OVU1fU0xPVFNdOwkvKiB1bnN0YWJsZSBibG9ja3MgKi8KIH0geGZzX3BlcmFnX3Q7CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmMgYi9mcy94ZnMveGZzX2FsbG9jLmMKaW5kZXggMjc1YjFmNC4uOTRjZGRiZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwpAQCAtMTY2MiwxMSArMTY2MiwxMyBAQAogCQl4ZnNfYWdmX3QJKmFnZjsKIAkJeGZzX3BlcmFnX3QJKnBhZzsJCS8qIHBlciBhbGxvY2F0aW9uIGdyb3VwIGRhdGEgKi8KIAorCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKKwkJcGFnLT5wYWdmX2ZyZWVibGtzICs9IGxlbjsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOworCiAJCWFnZiA9IFhGU19CVUZfVE9fQUdGKGFnYnApOwotCQlwYWcgPSAmbXAtPm1fcGVyYWdbYWdub107CiAJCWJlMzJfYWRkX2NwdSgmYWdmLT5hZ2ZfZnJlZWJsa3MsIGxlbik7CiAJCXhmc190cmFuc19hZ2Jsb2Nrc19kZWx0YSh0cCwgbGVuKTsKLQkJcGFnLT5wYWdmX2ZyZWVibGtzICs9IGxlbjsKIAkJWEZTX1dBTlRfQ09SUlVQVEVEX0dPVE8oCiAJCQliZTMyX3RvX2NwdShhZ2YtPmFnZl9mcmVlYmxrcykgPD0KIAkJCWJlMzJfdG9fY3B1KGFnZi0+YWdmX2xlbmd0aCksCkBAIC0xOTY5LDEwICsxOTcxLDEyIEBACiAJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYWdmbGJwKTsKIAlpZiAoYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxmaXJzdCkgPT0gWEZTX0FHRkxfU0laRShtcCkpCiAJCWFnZi0+YWdmX2ZsZmlyc3QgPSAwOwotCXBhZyA9ICZtcC0+bV9wZXJhZ1tiZTMyX3RvX2NwdShhZ2YtPmFnZl9zZXFubyldOworCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYmUzMl90b19jcHUoYWdmLT5hZ2Zfc2Vxbm8pKTsKIAliZTMyX2FkZF9jcHUoJmFnZi0+YWdmX2ZsY291bnQsIC0xKTsKIAl4ZnNfdHJhbnNfYWdmbGlzdF9kZWx0YSh0cCwgLTEpOwogCXBhZy0+cGFnZl9mbGNvdW50LS07CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCiAJbG9nZmxhZ3MgPSBYRlNfQUdGX0ZMRklSU1QgfCBYRlNfQUdGX0ZMQ09VTlQ7CiAJaWYgKGJ0cmVlYmxrKSB7CkBAIC0yMDc4LDcgKzIwODIsOCBAQAogCWJlMzJfYWRkX2NwdSgmYWdmLT5hZ2ZfZmxsYXN0LCAxKTsKIAlpZiAoYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxsYXN0KSA9PSBYRlNfQUdGTF9TSVpFKG1wKSkKIAkJYWdmLT5hZ2ZfZmxsYXN0ID0gMDsKLQlwYWcgPSAmbXAtPm1fcGVyYWdbYmUzMl90b19jcHUoYWdmLT5hZ2Zfc2Vxbm8pXTsKKworCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGJlMzJfdG9fY3B1KGFnZi0+YWdmX3NlcW5vKSk7CiAJYmUzMl9hZGRfY3B1KCZhZ2YtPmFnZl9mbGNvdW50LCAxKTsKIAl4ZnNfdHJhbnNfYWdmbGlzdF9kZWx0YSh0cCwgMSk7CiAJcGFnLT5wYWdmX2ZsY291bnQrKzsKQEAgLTIwODksNiArMjA5NCw3IEBACiAJCXBhZy0+cGFnZl9idHJlZWJsa3MtLTsKIAkJbG9nZmxhZ3MgfD0gWEZTX0FHRl9CVFJFRUJMS1M7CiAJfQorCXhmc19wZXJhZ19wdXQocGFnKTsKIAogCXhmc19hbGxvY19sb2dfYWdmKHRwLCBhZ2JwLCBsb2dmbGFncyk7CiAKQEAgLTIxNTIsNyArMjE1OCw2IEBACiAJCXhmc190cmFuc19icmVsc2UodHAsICpicHApOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJfQotCiAJWEZTX0JVRl9TRVRfVlRZUEVfUkVGKCpicHAsIEJfRlNfQUdGLCBYRlNfQUdGX1JFRik7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTc1LDcgKzIxODAsNyBAQAogCUFTU0VSVChhZ25vICE9IE5VTExBR05VTUJFUik7CiAKIAllcnJvciA9IHhmc19yZWFkX2FnZihtcCwgdHAsIGFnbm8sCi0JCQkoZmxhZ3MgJiBYRlNfQUxMT0NfRkxBR19UUllMT0NLKSA/IFhGU19CVUZfVFJZTE9DSyA6IDAsCisJCQkoZmxhZ3MgJiBYRlNfQUxMT0NfRkxBR19UUllMT0NLKSA/IFhCRl9UUllMT0NLIDogMCwKIAkJCWJwcCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC0yMTg0LDcgKzIxODksNyBAQAogCUFTU0VSVCghWEZTX0JVRl9HRVRFUlJPUigqYnBwKSk7CiAKIAlhZ2YgPSBYRlNfQlVGX1RPX0FHRigqYnBwKTsKLQlwYWcgPSAmbXAtPm1fcGVyYWdbYWdub107CisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CiAJaWYgKCFwYWctPnBhZ2ZfaW5pdCkgewogCQlwYWctPnBhZ2ZfZnJlZWJsa3MgPSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9mcmVlYmxrcyk7CiAJCXBhZy0+cGFnZl9idHJlZWJsa3MgPSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9idHJlZWJsa3MpOwpAQCAtMjE5NSw4ICsyMjAwLDggQEAKIAkJcGFnLT5wYWdmX2xldmVsc1tYRlNfQlROVU1fQ05UaV0gPQogCQkJYmUzMl90b19jcHUoYWdmLT5hZ2ZfbGV2ZWxzW1hGU19CVE5VTV9DTlRpXSk7CiAJCXNwaW5fbG9ja19pbml0KCZwYWctPnBhZ2JfbG9jayk7Ci0JCXBhZy0+cGFnYl9saXN0ID0ga21lbV96YWxsb2MoWEZTX1BBR0JfTlVNX1NMT1RTICoKLQkJCQkJc2l6ZW9mKHhmc19wZXJhZ19idXN5X3QpLCBLTV9TTEVFUCk7CisJCXBhZy0+cGFnYl9jb3VudCA9IDA7CisJCW1lbXNldChwYWctPnBhZ2JfbGlzdCwgMCwgc2l6ZW9mKHBhZy0+cGFnYl9saXN0KSk7CiAJCXBhZy0+cGFnZl9pbml0ID0gMTsKIAl9CiAjaWZkZWYgREVCVUcKQEAgLTIyMTEsNiArMjIxNiw3IEBACiAJCSAgICAgICBiZTMyX3RvX2NwdShhZ2YtPmFnZl9sZXZlbHNbWEZTX0JUTlVNX0NOVGldKSk7CiAJfQogI2VuZGlmCisJeGZzX3BlcmFnX3B1dChwYWcpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjcwLDggKzIyNzYsNyBAQAogCQkgKiBUaGVzZSB0aHJlZSBmb3JjZSB1cyBpbnRvIGEgc2luZ2xlIGEuZy4KIAkJICovCiAJCWFyZ3MtPmFnbm8gPSBYRlNfRlNCX1RPX0FHTk8obXAsIGFyZ3MtPmZzYm5vKTsKLQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwotCQlhcmdzLT5wYWcgPSAmbXAtPm1fcGVyYWdbYXJncy0+YWdub107CisJCWFyZ3MtPnBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFyZ3MtPmFnbm8pOwogCQlhcmdzLT5taW5sZWZ0ID0gMDsKIAkJZXJyb3IgPSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0KGFyZ3MsIDApOwogCQlhcmdzLT5taW5sZWZ0ID0gbWlubGVmdDsKQEAgLTIyODAsMTQgKzIyODUsMTIgQEAKIAkJCWdvdG8gZXJyb3IwOwogCQl9CiAJCWlmICghYXJncy0+YWdicCkgewotCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJCXRyYWNlX3hmc19hbGxvY192ZXh0ZW50X25vYWdicChhcmdzKTsKIAkJCWJyZWFrOwogCQl9CiAJCWFyZ3MtPmFnYm5vID0gWEZTX0ZTQl9UT19BR0JOTyhtcCwgYXJncy0+ZnNibm8pOwogCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX2FnX3ZleHRlbnQoYXJncykpKQogCQkJZ290byBlcnJvcjA7Ci0JCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJCWJyZWFrOwogCWNhc2UgWEZTX0FMTE9DVFlQRV9TVEFSVF9CTk86CiAJCS8qCkBAIC0yMzM5LDkgKzIzNDIsOCBAQAogCQkgKiBMb29wIG92ZXIgYWxsb2NhdGlvbiBncm91cHMgdHdpY2U7IGZpcnN0IHRpbWUgd2l0aAogCQkgKiB0cnlsb2NrIHNldCwgc2Vjb25kIHRpbWUgd2l0aG91dC4KIAkJICovCi0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJZm9yICg7OykgewotCQkJYXJncy0+cGFnID0gJm1wLT5tX3BlcmFnW2FyZ3MtPmFnbm9dOworCQkJYXJncy0+cGFnID0geGZzX3BlcmFnX2dldChtcCwgYXJncy0+YWdubyk7CiAJCQlpZiAobm9fbWluKSBhcmdzLT5taW5sZWZ0ID0gMDsKIAkJCWVycm9yID0geGZzX2FsbG9jX2ZpeF9mcmVlbGlzdChhcmdzLCBmbGFncyk7CiAJCQlhcmdzLT5taW5sZWZ0ID0gbWlubGVmdDsKQEAgLTI0MDAsOCArMjQwMiw4IEBACiAJCQkJCX0KIAkJCQl9CiAJCQl9CisJCQl4ZnNfcGVyYWdfcHV0KGFyZ3MtPnBhZyk7CiAJCX0KLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJaWYgKGJ1bXBfcm90b3IgfHwgKHR5cGUgPT0gWEZTX0FMTE9DVFlQRV9BTllfQUcpKSB7CiAJCQlpZiAoYXJncy0+YWdubyA9PSBzYWdubykKIAkJCQltcC0+bV9hZ2Zyb3RvciA9IChtcC0+bV9hZ2Zyb3RvciArIDEpICUKQEAgLTI0MjcsOSArMjQyOSwxMCBAQAogCQkJYXJncy0+bGVuKTsKICNlbmRpZgogCX0KKwl4ZnNfcGVyYWdfcHV0KGFyZ3MtPnBhZyk7CiAJcmV0dXJuIDA7CiBlcnJvcjA6Ci0JdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KGFyZ3MtPnBhZyk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0yNDU0LDggKzI0NTcsNyBAQAogCWFyZ3MuYWdubyA9IFhGU19GU0JfVE9fQUdOTyhhcmdzLm1wLCBibm8pOwogCUFTU0VSVChhcmdzLmFnbm8gPCBhcmdzLm1wLT5tX3NiLnNiX2FnY291bnQpOwogCWFyZ3MuYWdibm8gPSBYRlNfRlNCX1RPX0FHQk5PKGFyZ3MubXAsIGJubyk7Ci0JZG93bl9yZWFkKCZhcmdzLm1wLT5tX3BlcmFnbG9jayk7Ci0JYXJncy5wYWcgPSAmYXJncy5tcC0+bV9wZXJhZ1thcmdzLmFnbm9dOworCWFyZ3MucGFnID0geGZzX3BlcmFnX2dldChhcmdzLm1wLCBhcmdzLmFnbm8pOwogCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0KCZhcmdzLCBYRlNfQUxMT0NfRkxBR19GUkVFSU5HKSkpCiAJCWdvdG8gZXJyb3IwOwogI2lmZGVmIERFQlVHCkBAIC0yNDY1LDcgKzI0NjcsNyBAQAogI2VuZGlmCiAJZXJyb3IgPSB4ZnNfZnJlZV9hZ19leHRlbnQodHAsIGFyZ3MuYWdicCwgYXJncy5hZ25vLCBhcmdzLmFnYm5vLCBsZW4sIDApOwogZXJyb3IwOgotCXVwX3JlYWQoJmFyZ3MubXAtPm1fcGVyYWdsb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KGFyZ3MucGFnKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTI0ODYsMTUgKzI0ODgsMTUgQEAKIAkJICAgIHhmc19hZ2Jsb2NrX3QgYm5vLAogCQkgICAgeGZzX2V4dGxlbl90IGxlbikKIHsKLQl4ZnNfbW91bnRfdAkJKm1wOwogCXhmc19wZXJhZ19idXN5X3QJKmJzeTsKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CiAJaW50CQkJbjsKIAotCW1wID0gdHAtPnRfbW91bnRwOwotCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KHRwLT50X21vdW50cCwgYWdubyk7CisJc3Bpbl9sb2NrKCZwYWctPnBhZ2JfbG9jayk7CiAKIAkvKiBzZWFyY2ggcGFnYl9saXN0IGZvciBhbiBvcGVuIHNsb3QgKi8KLQlmb3IgKGJzeSA9IG1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbGlzdCwgbiA9IDA7CisJZm9yIChic3kgPSBwYWctPnBhZ2JfbGlzdCwgbiA9IDA7CiAJICAgICBuIDwgWEZTX1BBR0JfTlVNX1NMT1RTOwogCSAgICAgYnN5KyssIG4rKykgewogCQlpZiAoYnN5LT5idXN5X3RwID09IE5VTEwpIHsKQEAgLTI1MDIsMTEgKzI1MDQsMTEgQEAKIAkJfQogCX0KIAotCXRyYWNlX3hmc19hbGxvY19idXN5KG1wLCBhZ25vLCBibm8sIGxlbiwgbik7CisJdHJhY2VfeGZzX2FsbG9jX2J1c3kodHAtPnRfbW91bnRwLCBhZ25vLCBibm8sIGxlbiwgbik7CiAKIAlpZiAobiA8IFhGU19QQUdCX05VTV9TTE9UUykgewotCQlic3kgPSAmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9saXN0W25dOwotCQltcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2NvdW50Kys7CisJCWJzeSA9ICZwYWctPnBhZ2JfbGlzdFtuXTsKKwkJcGFnLT5wYWdiX2NvdW50Kys7CiAJCWJzeS0+YnVzeV9zdGFydCA9IGJubzsKIAkJYnN5LT5idXN5X2xlbmd0aCA9IGxlbjsKIAkJYnN5LT5idXN5X3RwID0gdHA7CkBAIC0yNTIxLDcgKzI1MjMsOCBAQAogCQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwogCX0KIAotCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xvY2spOworCXNwaW5fdW5sb2NrKCZwYWctPnBhZ2JfbG9jayk7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogfQogCiB2b2lkCkBAIC0yNTI5LDI0ICsyNTMyLDIzIEBACiAJCSAgICAgeGZzX2FnbnVtYmVyX3QgYWdubywKIAkJICAgICBpbnQgaWR4KQogewotCXhmc19tb3VudF90CQkqbXA7CisJc3RydWN0IHhmc19wZXJhZwkqcGFnOwogCXhmc19wZXJhZ19idXN5X3QJKmxpc3Q7CiAKLQltcCA9IHRwLT50X21vdW50cDsKLQotCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKLQlsaXN0ID0gbXAtPm1fcGVyYWdbYWdub10ucGFnYl9saXN0OwotCiAJQVNTRVJUKGlkeCA8IFhGU19QQUdCX05VTV9TTE9UUyk7CisJcGFnID0geGZzX3BlcmFnX2dldCh0cC0+dF9tb3VudHAsIGFnbm8pOworCXNwaW5fbG9jaygmcGFnLT5wYWdiX2xvY2spOworCWxpc3QgPSBwYWctPnBhZ2JfbGlzdDsKIAotCXRyYWNlX3hmc19hbGxvY191bmJ1c3kobXAsIGFnbm8sIGlkeCwgbGlzdFtpZHhdLmJ1c3lfdHAgPT0gdHApOworCXRyYWNlX3hmc19hbGxvY191bmJ1c3kodHAtPnRfbW91bnRwLCBhZ25vLCBpZHgsIGxpc3RbaWR4XS5idXN5X3RwID09IHRwKTsKIAogCWlmIChsaXN0W2lkeF0uYnVzeV90cCA9PSB0cCkgewogCQlsaXN0W2lkeF0uYnVzeV90cCA9IE5VTEw7Ci0JCW1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfY291bnQtLTsKKwkJcGFnLT5wYWdiX2NvdW50LS07CiAJfQogCi0Jc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbG9jayk7CisJc3Bpbl91bmxvY2soJnBhZy0+cGFnYl9sb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiB9CiAKIApAQCAtMjU2MCwxNyArMjU2MiwxNSBAQAogCQkgICAgeGZzX2FnYmxvY2tfdCBibm8sCiAJCSAgICB4ZnNfZXh0bGVuX3QgbGVuKQogewotCXhmc19tb3VudF90CQkqbXA7CisJc3RydWN0IHhmc19wZXJhZwkqcGFnOwogCXhmc19wZXJhZ19idXN5X3QJKmJzeTsKIAl4ZnNfYWdibG9ja190CQl1ZW5kLCBiZW5kOwogCXhmc19sc25fdAkJbHNuID0gMDsKIAlpbnQJCQljbnQ7CiAKLQltcCA9IHRwLT50X21vdW50cDsKLQotCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKLQotCXVlbmQgPSBibm8gKyBsZW4gLSAxOworCXBhZyA9IHhmc19wZXJhZ19nZXQodHAtPnRfbW91bnRwLCBhZ25vKTsKKwlzcGluX2xvY2soJnBhZy0+cGFnYl9sb2NrKTsKKwljbnQgPSBwYWctPnBhZ2JfY291bnQ7CiAKIAkvKgogCSAqIHNlYXJjaCBwYWdiX2xpc3QgZm9yIHRoaXMgc2xvdCwgc2tpcHBpbmcgb3BlbiBzbG90cy4gV2UgaGF2ZSB0bwpAQCAtMjU3OCw4ICsyNTc4LDkgQEAKIAkgKiB3ZSBoYXZlIHRvIGdldCB0aGUgbW9zdCByZWNlbnQgTFNOIGZvciB0aGUgbG9nIGZvcmNlIHRvIHB1c2ggb3V0CiAJICogYWxsIHRoZSB0cmFuc2FjdGlvbnMgdGhhdCBzcGFuIHRoZSByYW5nZS4KIAkgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IG1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfY291bnQ7IGNudCsrKSB7Ci0JCWJzeSA9ICZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xpc3RbY250XTsKKwl1ZW5kID0gYm5vICsgbGVuIC0gMTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IHBhZy0+cGFnYl9jb3VudDsgY250KyspIHsKKwkJYnN5ID0gJnBhZy0+cGFnYl9saXN0W2NudF07CiAJCWlmICghYnN5LT5idXN5X3RwKQogCQkJY29udGludWU7CiAKQEAgLTI1OTEsNyArMjU5Miw4IEBACiAJCWlmIChYRlNfTFNOX0NNUChic3ktPmJ1c3lfdHAtPnRfY29tbWl0X2xzbiwgbHNuKSA+IDApCiAJCQlsc24gPSBic3ktPmJ1c3lfdHAtPnRfY29tbWl0X2xzbjsKIAl9Ci0Jc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbG9jayk7CisJc3Bpbl91bmxvY2soJnBhZy0+cGFnYl9sb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJdHJhY2VfeGZzX2FsbG9jX2J1c3lzZWFyY2godHAtPnRfbW91bnRwLCBhZ25vLCBibm8sIGxlbiwgbHNuKTsKIAogCS8qCkBAIC0yNTk5LDUgKzI2MDEsNSBAQAogCSAqIHRyYW5zYWN0aW9uIHRoYXQgZnJlZWQgdGhlIGJsb2NrCiAJICovCiAJaWYgKGxzbikKLQkJeGZzX2xvZ19mb3JjZShtcCwgbHNuLCBYRlNfTE9HX0ZPUkNFfFhGU19MT0dfU1lOQyk7CisJCXhmc19sb2dfZm9yY2VfbHNuKHRwLT50X21vdW50cCwgbHNuLCBYRlNfTE9HX1NZTkMpOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hbGxvY19idHJlZS5jIGIvZnMveGZzL3hmc19hbGxvY19idHJlZS5jCmluZGV4IGFkYmQ5MTQuLmI3MjZlMTAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWxsb2NfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2FsbG9jX2J0cmVlLmMKQEAgLTYxLDEyICs2MSwxNCBAQAogCXN0cnVjdCB4ZnNfYWdmCQkqYWdmID0gWEZTX0JVRl9UT19BR0YoYWdicCk7CiAJeGZzX2FnbnVtYmVyX3QJCXNlcW5vID0gYmUzMl90b19jcHUoYWdmLT5hZ2Zfc2Vxbm8pOwogCWludAkJCWJ0bnVtID0gY3VyLT5iY19idG51bTsKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWcgPSB4ZnNfcGVyYWdfZ2V0KGN1ci0+YmNfbXAsIHNlcW5vKTsKIAogCUFTU0VSVChwdHItPnMgIT0gMCk7CiAKIAlhZ2YtPmFnZl9yb290c1tidG51bV0gPSBwdHItPnM7CiAJYmUzMl9hZGRfY3B1KCZhZ2YtPmFnZl9sZXZlbHNbYnRudW1dLCBpbmMpOwotCWN1ci0+YmNfbXAtPm1fcGVyYWdbc2Vxbm9dLnBhZ2ZfbGV2ZWxzW2J0bnVtXSArPSBpbmM7CisJcGFnLT5wYWdmX2xldmVsc1tidG51bV0gKz0gaW5jOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAogCXhmc19hbGxvY19sb2dfYWdmKGN1ci0+YmNfdHAsIGFnYnAsIFhGU19BR0ZfUk9PVFMgfCBYRlNfQUdGX0xFVkVMUyk7CiB9CkBAIC0xNTAsNiArMTUyLDcgQEAKIHsKIAlzdHJ1Y3QgeGZzX2FnZgkJKmFnZiA9IFhGU19CVUZfVE9fQUdGKGN1ci0+YmNfcHJpdmF0ZS5hLmFnYnApOwogCXhmc19hZ251bWJlcl90CQlzZXFubyA9IGJlMzJfdG9fY3B1KGFnZi0+YWdmX3NlcW5vKTsKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CiAJX19iZTMyCQkJbGVuOwogCWludAkJCW51bXJlY3M7CiAKQEAgLTE5Myw3ICsxOTYsOSBAQAogCX0KIAogCWFnZi0+YWdmX2xvbmdlc3QgPSBsZW47Ci0JY3VyLT5iY19tcC0+bV9wZXJhZ1tzZXFub10ucGFnZl9sb25nZXN0ID0gYmUzMl90b19jcHUobGVuKTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KGN1ci0+YmNfbXAsIHNlcW5vKTsKKwlwYWctPnBhZ2ZfbG9uZ2VzdCA9IGJlMzJfdG9fY3B1KGxlbik7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCXhmc19hbGxvY19sb2dfYWdmKGN1ci0+YmNfdHAsIGN1ci0+YmNfcHJpdmF0ZS5hLmFnYnAsIFhGU19BR0ZfTE9OR0VTVCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0ci5jIGIvZnMveGZzL3hmc19hdHRyLmMKaW5kZXggZTk1M2I2Y2YuLmI5YzE5NmEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0ci5jCisrKyBiL2ZzL3hmcy94ZnNfYXR0ci5jCkBAIC05MywxMiArOTMsMTIgQEAKIFNUQVRJQyBpbnQKIHhmc19hdHRyX25hbWVfdG9feG5hbWUoCiAJc3RydWN0IHhmc19uYW1lCSp4bmFtZSwKLQljb25zdCBjaGFyCSphbmFtZSkKKwljb25zdCB1bnNpZ25lZCBjaGFyICphbmFtZSkKIHsKIAlpZiAoIWFuYW1lKQogCQlyZXR1cm4gRUlOVkFMOwogCXhuYW1lLT5uYW1lID0gYW5hbWU7Ci0JeG5hbWUtPmxlbiA9IHN0cmxlbihhbmFtZSk7CisJeG5hbWUtPmxlbiA9IHN0cmxlbigoY2hhciAqKWFuYW1lKTsKIAlpZiAoeG5hbWUtPmxlbiA+PSBNQVhOQU1FTEVOKQogCQlyZXR1cm4gRUZBVUxUOwkJLyogbWF0Y2ggSVJJWCBiZWhhdmlvdXIgKi8KIApAQCAtMTI0LDcgKzEyNCw3IEBACiB4ZnNfYXR0cl9nZXRfaW50KAogCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAogCXN0cnVjdCB4ZnNfbmFtZQkJKm5hbWUsCi0JY2hhcgkJCSp2YWx1ZSwKKwl1bnNpZ25lZCBjaGFyCQkqdmFsdWUsCiAJaW50CQkJKnZhbHVlbGVucCwKIAlpbnQJCQlmbGFncykKIHsKQEAgLTE3MSw4ICsxNzEsOCBAQAogaW50CiB4ZnNfYXR0cl9nZXQoCiAJeGZzX2lub2RlX3QJKmlwLAotCWNvbnN0IGNoYXIJKm5hbWUsCi0JY2hhcgkJKnZhbHVlLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCisJdW5zaWduZWQgY2hhcgkqdmFsdWUsCiAJaW50CQkqdmFsdWVsZW5wLAogCWludAkJZmxhZ3MpCiB7CkBAIC0xOTcsNyArMTk3LDcgQEAKIC8qCiAgKiBDYWxjdWxhdGUgaG93IG1hbnkgYmxvY2tzIHdlIG5lZWQgZm9yIHRoZSBuZXcgYXR0cmlidXRlLAogICovCi1pbnQKK1NUQVRJQyBpbnQKIHhmc19hdHRyX2NhbGNfc2l6ZSgKIAlzdHJ1Y3QgeGZzX2lub2RlIAkqaXAsCiAJaW50CQkJbmFtZWxlbiwKQEAgLTIzNSw4ICsyMzUsMTIgQEAKIH0KIAogU1RBVElDIGludAoteGZzX2F0dHJfc2V0X2ludCh4ZnNfaW5vZGVfdCAqZHAsIHN0cnVjdCB4ZnNfbmFtZSAqbmFtZSwKLQkJY2hhciAqdmFsdWUsIGludCB2YWx1ZWxlbiwgaW50IGZsYWdzKQoreGZzX2F0dHJfc2V0X2ludCgKKwlzdHJ1Y3QgeGZzX2lub2RlICpkcCwKKwlzdHJ1Y3QgeGZzX25hbWUJKm5hbWUsCisJdW5zaWduZWQgY2hhcgkqdmFsdWUsCisJaW50CQl2YWx1ZWxlbiwKKwlpbnQJCWZsYWdzKQogewogCXhmc19kYV9hcmdzX3QJYXJnczsKIAl4ZnNfZnNibG9ja190CWZpcnN0YmxvY2s7CkBAIC00NTIsOCArNDU2LDggQEAKIGludAogeGZzX2F0dHJfc2V0KAogCXhmc19pbm9kZV90CSpkcCwKLQljb25zdCBjaGFyCSpuYW1lLAotCWNoYXIJCSp2YWx1ZSwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCXVuc2lnbmVkIGNoYXIJKnZhbHVlLAogCWludAkJdmFsdWVsZW4sCiAJaW50CQlmbGFncykKIHsKQEAgLTYwMCw3ICs2MDQsNyBAQAogaW50CiB4ZnNfYXR0cl9yZW1vdmUoCiAJeGZzX2lub2RlX3QJKmRwLAotCWNvbnN0IGNoYXIJKm5hbWUsCisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKIAlpbnQJCWZsYWdzKQogewogCWludAkJZXJyb3I7CkBAIC02NjksOSArNjczLDEzIEBACiAgKi8KIC8qQVJHU1VTRUQqLwogU1RBVElDIGludAoteGZzX2F0dHJfcHV0X2xpc3RlbnQoeGZzX2F0dHJfbGlzdF9jb250ZXh0X3QgKmNvbnRleHQsIGludCBmbGFncywKLQkJICAgICBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJICAgICBpbnQgdmFsdWVsZW4sIGNoYXIgKnZhbHVlKQoreGZzX2F0dHJfcHV0X2xpc3RlbnQoCisJeGZzX2F0dHJfbGlzdF9jb250ZXh0X3QgKmNvbnRleHQsCisJaW50CQlmbGFncywKKwl1bnNpZ25lZCBjaGFyCSpuYW1lLAorCWludAkJbmFtZWxlbiwKKwlpbnQJCXZhbHVlbGVuLAorCXVuc2lnbmVkIGNoYXIJKnZhbHVlKQogewogCXN0cnVjdCBhdHRybGlzdCAqYWxpc3QgPSAoc3RydWN0IGF0dHJsaXN0ICopY29udGV4dC0+YWxpc3Q7CiAJYXR0cmxpc3RfZW50X3QgKmFlcDsKQEAgLTE5ODAsNyArMTk4OCw3IEBACiAJeGZzX2JtYnRfaXJlY190IG1hcFtBVFRSX1JNVFZBTFVFX01BUFNJWkVdOwogCXhmc19tb3VudF90ICptcDsKIAl4ZnNfZGFkZHJfdCBkYmxrbm87Ci0JeGZzX2NhZGRyX3QgZHN0OworCXZvaWQgKmRzdDsKIAl4ZnNfYnVmX3QgKmJwOwogCWludCBubWFwLCBlcnJvciwgdG1wLCB2YWx1ZWxlbiwgYmxrY250LCBpOwogCXhmc19kYWJsa190IGxibGtubzsKQEAgLTIwMDcsMTUgKzIwMTUsMTQgQEAKIAkJCWRibGtubyA9IFhGU19GU0JfVE9fREFERFIobXAsIG1hcFtpXS5icl9zdGFydGJsb2NrKTsKIAkJCWJsa2NudCA9IFhGU19GU0JfVE9fQkIobXAsIG1hcFtpXS5icl9ibG9ja2NvdW50KTsKIAkJCWVycm9yID0geGZzX3JlYWRfYnVmKG1wLCBtcC0+bV9kZGV2X3RhcmdwLCBkYmxrbm8sCi0JCQkJCSAgICAgYmxrY250LAotCQkJCQkgICAgIFhGU19CVUZfTE9DSyB8IFhCRl9ET05UX0JMT0NLLAorCQkJCQkgICAgIGJsa2NudCwgWEJGX0xPQ0sgfCBYQkZfRE9OVF9CTE9DSywKIAkJCQkJICAgICAmYnApOwogCQkJaWYgKGVycm9yKQogCQkJCXJldHVybihlcnJvcik7CiAKIAkJCXRtcCA9ICh2YWx1ZWxlbiA8IFhGU19CVUZfU0laRShicCkpCiAJCQkJPyB2YWx1ZWxlbiA6IFhGU19CVUZfU0laRShicCk7Ci0JCQl4ZnNfYmlvbW92ZShicCwgMCwgdG1wLCBkc3QsIFhGU19CX1JFQUQpOworCQkJeGZzX2Jpb21vdmUoYnAsIDAsIHRtcCwgZHN0LCBYQkZfUkVBRCk7CiAJCQl4ZnNfYnVmX3JlbHNlKGJwKTsKIAkJCWRzdCArPSB0bXA7CiAJCQl2YWx1ZWxlbiAtPSB0bXA7CkBAIC0yMDM5LDcgKzIwNDYsNyBAQAogCXhmc19pbm9kZV90ICpkcDsKIAl4ZnNfYm1idF9pcmVjX3QgbWFwOwogCXhmc19kYWRkcl90IGRibGtubzsKLQl4ZnNfY2FkZHJfdCBzcmM7CisJdm9pZCAqc3JjOwogCXhmc19idWZfdCAqYnA7CiAJeGZzX2RhYmxrX3QgbGJsa25vOwogCWludCBibGtjbnQsIHZhbHVlbGVuLCBubWFwLCBlcnJvciwgdG1wLCBjb21taXR0ZWQ7CkBAIC0yMTQxLDEzICsyMTQ4LDEzIEBACiAJCWJsa2NudCA9IFhGU19GU0JfVE9fQkIobXAsIG1hcC5icl9ibG9ja2NvdW50KTsKIAogCQlicCA9IHhmc19idWZfZ2V0KG1wLT5tX2RkZXZfdGFyZ3AsIGRibGtubywgYmxrY250LAotCQkJCSBYRlNfQlVGX0xPQ0sgfCBYQkZfRE9OVF9CTE9DSyk7CisJCQkJIFhCRl9MT0NLIHwgWEJGX0RPTlRfQkxPQ0spOwogCQlBU1NFUlQoYnApOwogCQlBU1NFUlQoIVhGU19CVUZfR0VURVJST1IoYnApKTsKIAogCQl0bXAgPSAodmFsdWVsZW4gPCBYRlNfQlVGX1NJWkUoYnApKSA/IHZhbHVlbGVuIDoKIAkJCQkJCQlYRlNfQlVGX1NJWkUoYnApOwotCQl4ZnNfYmlvbW92ZShicCwgMCwgdG1wLCBzcmMsIFhGU19CX1dSSVRFKTsKKwkJeGZzX2Jpb21vdmUoYnAsIDAsIHRtcCwgc3JjLCBYQkZfV1JJVEUpOwogCQlpZiAodG1wIDwgWEZTX0JVRl9TSVpFKGJwKSkKIAkJCXhmc19iaW96ZXJvKGJwLCB0bXAsIFhGU19CVUZfU0laRShicCkgLSB0bXApOwogCQlpZiAoKGVycm9yID0geGZzX2J3cml0ZShtcCwgYnApKSkgey8qIEdST1Q6IE5PVEU6IHN5bmNocm9ub3VzIHdyaXRlICovCkBAIC0yMjA4LDggKzIyMTUsNyBAQAogCQkvKgogCQkgKiBJZiB0aGUgInJlbW90ZSIgdmFsdWUgaXMgaW4gdGhlIGNhY2hlLCByZW1vdmUgaXQuCiAJCSAqLwotCQlicCA9IHhmc19pbmNvcmUobXAtPm1fZGRldl90YXJncCwgZGJsa25vLCBibGtjbnQsCi0JCQkJWEZTX0lOQ09SRV9UUllMT0NLKTsKKwkJYnAgPSB4ZnNfaW5jb3JlKG1wLT5tX2RkZXZfdGFyZ3AsIGRibGtubywgYmxrY250LCBYQkZfVFJZTE9DSyk7CiAJCWlmIChicCkgewogCQkJWEZTX0JVRl9TVEFMRShicCk7CiAJCQlYRlNfQlVGX1VOREVMQVlXUklURShicCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHIuaCBiL2ZzL3hmcy94ZnNfYXR0ci5oCmluZGV4IDU5YjQxMGMuLmU5MjBkNjggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0ci5oCisrKyBiL2ZzL3hmcy94ZnNfYXR0ci5oCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogCiB0eXBlZGVmIGludCAoKnB1dF9saXN0ZW50X2Z1bmNfdCkoc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqLCBpbnQsCi0JCQkJICAgICAgY2hhciAqLCBpbnQsIGludCwgY2hhciAqKTsKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKik7CiAKIHR5cGVkZWYgc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCB7CiAJc3RydWN0IHhmc19pbm9kZQkJKmRwOwkJLyogaW5vZGUgKi8KQEAgLTEzOSw3ICsxMzksNiBAQAogLyoKICAqIE92ZXJhbGwgZXh0ZXJuYWwgaW50ZXJmYWNlIHJvdXRpbmVzLgogICovCi1pbnQgeGZzX2F0dHJfY2FsY19zaXplKHN0cnVjdCB4ZnNfaW5vZGUgKiwgaW50LCBpbnQsIGludCAqKTsKIGludCB4ZnNfYXR0cl9pbmFjdGl2ZShzdHJ1Y3QgeGZzX2lub2RlICpkcCk7CiBpbnQgeGZzX2F0dHJfcm10dmFsX2dldChzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MpOwogaW50IHhmc19hdHRyX2xpc3RfaW50KHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKik7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5jIGIvZnMveGZzL3hmc19hdHRyX2xlYWYuYwppbmRleCBiYWY0MWI1Li5hOTBjZTc0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCisrKyBiL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKQEAgLTUyMSwxMSArNTIxLDExIEBACiAKIAlzZmUgPSAmc2YtPmxpc3RbMF07CiAJZm9yIChpID0gMDsgaSA8IHNmLT5oZHIuY291bnQ7IGkrKykgewotCQluYXJncy5uYW1lID0gKGNoYXIgKilzZmUtPm5hbWV2YWw7CisJCW5hcmdzLm5hbWUgPSBzZmUtPm5hbWV2YWw7CiAJCW5hcmdzLm5hbWVsZW4gPSBzZmUtPm5hbWVsZW47Ci0JCW5hcmdzLnZhbHVlID0gKGNoYXIgKikmc2ZlLT5uYW1ldmFsW25hcmdzLm5hbWVsZW5dOworCQluYXJncy52YWx1ZSA9ICZzZmUtPm5hbWV2YWxbbmFyZ3MubmFtZWxlbl07CiAJCW5hcmdzLnZhbHVlbGVuID0gc2ZlLT52YWx1ZWxlbjsKLQkJbmFyZ3MuaGFzaHZhbCA9IHhmc19kYV9oYXNobmFtZSgoY2hhciAqKXNmZS0+bmFtZXZhbCwKKwkJbmFyZ3MuaGFzaHZhbCA9IHhmc19kYV9oYXNobmFtZShzZmUtPm5hbWV2YWwsCiAJCQkJCQlzZmUtPm5hbWVsZW4pOwogCQluYXJncy5mbGFncyA9IFhGU19BVFRSX05TUF9PTkRJU0tfVE9fQVJHUyhzZmUtPmZsYWdzKTsKIAkJZXJyb3IgPSB4ZnNfYXR0cl9sZWFmX2xvb2t1cF9pbnQoYnAsICZuYXJncyk7IC8qIHNldCBhLT5pbmRleCAqLwpAQCAtNjEyLDEwICs2MTIsMTAgQEAKIAkJZm9yIChpID0gMCwgc2ZlID0gJnNmLT5saXN0WzBdOyBpIDwgc2YtPmhkci5jb3VudDsgaSsrKSB7CiAJCQllcnJvciA9IGNvbnRleHQtPnB1dF9saXN0ZW50KGNvbnRleHQsCiAJCQkJCSAgIHNmZS0+ZmxhZ3MsCi0JCQkJCSAgIChjaGFyICopc2ZlLT5uYW1ldmFsLAorCQkJCQkgICBzZmUtPm5hbWV2YWwsCiAJCQkJCSAgIChpbnQpc2ZlLT5uYW1lbGVuLAogCQkJCQkgICAoaW50KXNmZS0+dmFsdWVsZW4sCi0JCQkJCSAgIChjaGFyKikmc2ZlLT5uYW1ldmFsW3NmZS0+bmFtZWxlbl0pOworCQkJCQkgICAmc2ZlLT5uYW1ldmFsW3NmZS0+bmFtZWxlbl0pOwogCiAJCQkvKgogCQkJICogRWl0aGVyIHNlYXJjaCBjYWxsYmFjayBmaW5pc2hlZCBlYXJseSBvcgpAQCAtNjU5LDggKzY1OSw4IEBACiAJCX0KIAogCQlzYnAtPmVudG5vID0gaTsKLQkJc2JwLT5oYXNoID0geGZzX2RhX2hhc2huYW1lKChjaGFyICopc2ZlLT5uYW1ldmFsLCBzZmUtPm5hbWVsZW4pOwotCQlzYnAtPm5hbWUgPSAoY2hhciAqKXNmZS0+bmFtZXZhbDsKKwkJc2JwLT5oYXNoID0geGZzX2RhX2hhc2huYW1lKHNmZS0+bmFtZXZhbCwgc2ZlLT5uYW1lbGVuKTsKKwkJc2JwLT5uYW1lID0gc2ZlLT5uYW1ldmFsOwogCQlzYnAtPm5hbWVsZW4gPSBzZmUtPm5hbWVsZW47CiAJCS8qIFRoZXNlIGFyZSBieXRlcywgYW5kIGJvdGggb24tZGlzaywgZG9uJ3QgZW5kaWFuLWZsaXAgKi8KIAkJc2JwLT52YWx1ZWxlbiA9IHNmZS0+dmFsdWVsZW47CkBAIC04MTgsOSArODE4LDkgQEAKIAkJCWNvbnRpbnVlOwogCQlBU1NFUlQoZW50cnktPmZsYWdzICYgWEZTX0FUVFJfTE9DQUwpOwogCQluYW1lX2xvYyA9IHhmc19hdHRyX2xlYWZfbmFtZV9sb2NhbChsZWFmLCBpKTsKLQkJbmFyZ3MubmFtZSA9IChjaGFyICopbmFtZV9sb2MtPm5hbWV2YWw7CisJCW5hcmdzLm5hbWUgPSBuYW1lX2xvYy0+bmFtZXZhbDsKIAkJbmFyZ3MubmFtZWxlbiA9IG5hbWVfbG9jLT5uYW1lbGVuOwotCQluYXJncy52YWx1ZSA9IChjaGFyICopJm5hbWVfbG9jLT5uYW1ldmFsW25hcmdzLm5hbWVsZW5dOworCQluYXJncy52YWx1ZSA9ICZuYW1lX2xvYy0+bmFtZXZhbFtuYXJncy5uYW1lbGVuXTsKIAkJbmFyZ3MudmFsdWVsZW4gPSBiZTE2X3RvX2NwdShuYW1lX2xvYy0+dmFsdWVsZW4pOwogCQluYXJncy5oYXNodmFsID0gYmUzMl90b19jcHUoZW50cnktPmhhc2h2YWwpOwogCQluYXJncy5mbGFncyA9IFhGU19BVFRSX05TUF9PTkRJU0tfVE9fQVJHUyhlbnRyeS0+ZmxhZ3MpOwpAQCAtMjM3MCwxMCArMjM3MCwxMCBAQAogCiAJCQlyZXR2YWwgPSBjb250ZXh0LT5wdXRfbGlzdGVudChjb250ZXh0LAogCQkJCQkJZW50cnktPmZsYWdzLAotCQkJCQkJKGNoYXIgKiluYW1lX2xvYy0+bmFtZXZhbCwKKwkJCQkJCW5hbWVfbG9jLT5uYW1ldmFsLAogCQkJCQkJKGludCluYW1lX2xvYy0+bmFtZWxlbiwKIAkJCQkJCWJlMTZfdG9fY3B1KG5hbWVfbG9jLT52YWx1ZWxlbiksCi0JCQkJCQkoY2hhciAqKSZuYW1lX2xvYy0+bmFtZXZhbFtuYW1lX2xvYy0+bmFtZWxlbl0pOworCQkJCQkJJm5hbWVfbG9jLT5uYW1ldmFsW25hbWVfbG9jLT5uYW1lbGVuXSk7CiAJCQlpZiAocmV0dmFsKQogCQkJCXJldHVybiByZXR2YWw7CiAJCX0gZWxzZSB7CkBAIC0yMzk3LDE1ICsyMzk3LDE1IEBACiAJCQkJCXJldHVybiByZXR2YWw7CiAJCQkJcmV0dmFsID0gY29udGV4dC0+cHV0X2xpc3RlbnQoY29udGV4dCwKIAkJCQkJCWVudHJ5LT5mbGFncywKLQkJCQkJCShjaGFyICopbmFtZV9ybXQtPm5hbWUsCisJCQkJCQluYW1lX3JtdC0+bmFtZSwKIAkJCQkJCShpbnQpbmFtZV9ybXQtPm5hbWVsZW4sCiAJCQkJCQl2YWx1ZWxlbiwKLQkJCQkJCShjaGFyKilhcmdzLnZhbHVlKTsKKwkJCQkJCWFyZ3MudmFsdWUpOwogCQkJCWttZW1fZnJlZShhcmdzLnZhbHVlKTsKIAkJCX0gZWxzZSB7CiAJCQkJcmV0dmFsID0gY29udGV4dC0+cHV0X2xpc3RlbnQoY29udGV4dCwKIAkJCQkJCWVudHJ5LT5mbGFncywKLQkJCQkJCShjaGFyICopbmFtZV9ybXQtPm5hbWUsCisJCQkJCQluYW1lX3JtdC0+bmFtZSwKIAkJCQkJCShpbnQpbmFtZV9ybXQtPm5hbWVsZW4sCiAJCQkJCQl2YWx1ZWxlbiwKIAkJCQkJCU5VTEwpOwpAQCAtMjk1MCw3ICsyOTUwLDcgQEAKIAkJCQkJCW1hcC5icl9ibG9ja2NvdW50KTsKIAkJCWJwID0geGZzX3RyYW5zX2dldF9idWYoKnRyYW5zLAogCQkJCQlkcC0+aV9tb3VudC0+bV9kZGV2X3RhcmdwLAotCQkJCQlkYmxrbm8sIGRibGtjbnQsIFhGU19CVUZfTE9DSyk7CisJCQkJCWRibGtubywgZGJsa2NudCwgWEJGX0xPQ0spOwogCQkJeGZzX3RyYW5zX2JpbnZhbCgqdHJhbnMsIGJwKTsKIAkJCS8qCiAJCQkgKiBSb2xsIHRvIG5leHQgdHJhbnNhY3Rpb24uCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHJfc2YuaCBiL2ZzL3hmcy94ZnNfYXR0cl9zZi5oCmluZGV4IDc2YWI3YjAuLjkxOTc1NmUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0cl9zZi5oCisrKyBiL2ZzL3hmcy94ZnNfYXR0cl9zZi5oCkBAIC01Miw3ICs1Miw3IEBACiAJX191aW50OF90CXZhbHVlbGVuOwkvKiBsZW5ndGggb2YgdmFsdWUgKi8KIAlfX3VpbnQ4X3QJZmxhZ3M7CQkvKiBmbGFncyBiaXRzIChzZWUgeGZzX2F0dHJfbGVhZi5oKSAqLwogCXhmc19kYWhhc2hfdAloYXNoOwkJLyogdGhpcyBlbnRyeSdzIGhhc2ggdmFsdWUgKi8KLQljaGFyCQkqbmFtZTsJCS8qIG5hbWUgdmFsdWUsIHBvaW50ZXIgaW50byBidWZmZXIgKi8KKwl1bnNpZ25lZCBjaGFyCSpuYW1lOwkJLyogbmFtZSB2YWx1ZSwgcG9pbnRlciBpbnRvIGJ1ZmZlciAqLwogfSB4ZnNfYXR0cl9zZl9zb3J0X3Q7CiAKICNkZWZpbmUgWEZTX0FUVFJfU0ZfRU5UU0laRV9CWU5BTUUobmxlbix2bGVuKQkvKiBzcGFjZSBuYW1lL3ZhbHVlIHVzZXMgKi8gXApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwLmMgYi9mcy94ZnMveGZzX2JtYXAuYwppbmRleCA5ODI1MWNkLi4xODY5ZmI5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuYworKysgYi9mcy94ZnMveGZzX2JtYXAuYwpAQCAtMjYyOSwxMyArMjYyOSwxMiBAQAogCQlpZiAoc3RhcnRhZyA9PSBOVUxMQUdOVU1CRVIpCiAJCQlzdGFydGFnID0gYWcgPSAwOwogCQlub3Rpbml0ID0gMDsKLQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7CiAJCXdoaWxlIChibGVuIDwgYXAtPmFsZW4pIHsKLQkJCXBhZyA9ICZtcC0+bV9wZXJhZ1thZ107CiAJCQlpZiAoIXBhZy0+cGFnZl9pbml0ICYmCiAJCQkgICAgKGVycm9yID0geGZzX2FsbG9jX3BhZ2ZfaW5pdChtcCwgYXJncy50cCwKIAkJCQkgICAgYWcsIFhGU19BTExPQ19GTEFHX1RSWUxPQ0spKSkgewotCQkJCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCQkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkJCXJldHVybiBlcnJvcjsKIAkJCX0KIAkJCS8qCkBAIC0yNjY3LDEzICsyNjY2LDEzIEBACiAJCQkJCQlicmVhazsKIAogCQkJCQllcnJvciA9IHhmc19maWxlc3RyZWFtX25ld19hZyhhcCwgJmFnKTsKLQkJCQkJaWYgKGVycm9yKSB7Ci0JCQkJCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQkJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJCQkJCWlmIChlcnJvcikKIAkJCQkJCXJldHVybiBlcnJvcjsKLQkJCQkJfQogCiAJCQkJCS8qIGxvb3AgYWdhaW4gdG8gc2V0ICdibGVuJyovCiAJCQkJCXN0YXJ0YWcgPSBOVUxMQUdOVU1CRVI7CisJCQkJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnKTsKIAkJCQkJY29udGludWU7CiAJCQkJfQogCQkJfQpAQCAtMjY4MSw4ICsyNjgwLDEwIEBACiAJCQkJYWcgPSAwOwogCQkJaWYgKGFnID09IHN0YXJ0YWcpCiAJCQkJYnJlYWs7CisJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7CiAJCX0KLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkvKgogCQkgKiBTaW5jZSB0aGUgYWJvdmUgbG9vcCBkaWQgYSBCVUZfVFJZTE9DSywgaXQgaXMKIAkJICogcG9zc2libGUgdGhhdCB0aGVyZSBpcyBzcGFjZSBmb3IgdGhpcyByZXF1ZXN0LgpAQCAtNDQ3MCw3ICs0NDcxLDcgQEAKIAl4ZnNfZnNibG9ja190CWFibm87CQkvKiBhbGxvY2F0ZWQgYmxvY2sgbnVtYmVyICovCiAJeGZzX2V4dGxlbl90CWFsZW47CQkvKiBhbGxvY2F0ZWQgZXh0ZW50IGxlbmd0aCAqLwogCXhmc19maWxlb2ZmX3QJYW9mZjsJCS8qIGFsbG9jYXRlZCBmaWxlIG9mZnNldCAqLwotCXhmc19ibWFsbG9jYV90CWJtYTsJCS8qIGFyZ3MgZm9yIHhmc19ibWFwX2FsbG9jICovCisJeGZzX2JtYWxsb2NhX3QJYm1hID0geyAwIH07CS8qIGFyZ3MgZm9yIHhmc19ibWFwX2FsbG9jICovCiAJeGZzX2J0cmVlX2N1cl90CSpjdXI7CQkvKiBibWFwIGJ0cmVlIGN1cnNvciAqLwogCXhmc19maWxlb2ZmX3QJZW5kOwkJLyogZW5kIG9mIG1hcHBlZCBmaWxlIHJlZ2lvbiAqLwogCWludAkJZW9mOwkJLyogd2UndmUgaGl0IHRoZSBlbmQgb2YgZXh0ZW50cyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwX2J0cmVlLmMgYi9mcy94ZnMveGZzX2JtYXBfYnRyZWUuYwppbmRleCAzODc1MWQ1Li40MTZlNDdlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXBfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2JtYXBfYnRyZWUuYwpAQCAtMzM0LDcgKzMzNCw3IEBACiAvKgogICogU2V0IGFsbCB0aGUgZmllbGRzIGluIGEgYm1hcCBleHRlbnQgcmVjb3JkIGZyb20gdGhlIHVuY29tcHJlc3NlZCBmb3JtLgogICovCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX2JtYnRfZGlza19zZXRfYWxsKAogCXhmc19ibWJ0X3JlY190CSpyLAogCXhmc19ibWJ0X2lyZWNfdCAqcykKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmgKaW5kZXggY2YwN2NhNy4uMGU2NmM0ZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwX2J0cmVlLmgKKysrIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmgKQEAgLTIyMyw3ICsyMjMsNiBAQAogZXh0ZXJuIHZvaWQgeGZzX2JtYnRfc2V0X3N0YXJ0b2ZmKHhmc19ibWJ0X3JlY19ob3N0X3QgKnIsIHhmc19maWxlb2ZmX3Qgdik7CiBleHRlcm4gdm9pZCB4ZnNfYm1idF9zZXRfc3RhdGUoeGZzX2JtYnRfcmVjX2hvc3RfdCAqciwgeGZzX2V4bnRzdF90IHYpOwogCi1leHRlcm4gdm9pZCB4ZnNfYm1idF9kaXNrX3NldF9hbGwoeGZzX2JtYnRfcmVjX3QgKnIsIHhmc19ibWJ0X2lyZWNfdCAqcyk7CiBleHRlcm4gdm9pZCB4ZnNfYm1idF9kaXNrX3NldF9hbGxmKHhmc19ibWJ0X3JlY190ICpyLCB4ZnNfZmlsZW9mZl90IG8sCiAJCQl4ZnNfZnNibG9ja190IGIsIHhmc19maWxibGtzX3QgYywgeGZzX2V4bnRzdF90IHYpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J0cmVlLmMgYi9mcy94ZnMveGZzX2J0cmVlLmMKaW5kZXggMzZhMDk5MmQuLjk2YmU0YjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2J0cmVlLmMKQEAgLTk3Nyw3ICs5NzcsNyBAQAogCXhmc19kYWRkcl90CQlkOwogCiAJLyogbmVlZCB0byBzb3J0IG91dCBob3cgY2FsbGVycyBkZWFsIHdpdGggZmFpbHVyZXMgZmlyc3QgKi8KLQlBU1NFUlQoIShmbGFncyAmIFhGU19CVUZfVFJZTE9DSykpOworCUFTU0VSVCghKGZsYWdzICYgWEJGX1RSWUxPQ0spKTsKIAogCWQgPSB4ZnNfYnRyZWVfcHRyX3RvX2RhZGRyKGN1ciwgcHRyKTsKIAkqYnBwID0geGZzX3RyYW5zX2dldF9idWYoY3VyLT5iY190cCwgbXAtPm1fZGRldl90YXJncCwgZCwKQEAgLTEwMDgsNyArMTAwOCw3IEBACiAJaW50CQkJZXJyb3I7CiAKIAkvKiBuZWVkIHRvIHNvcnQgb3V0IGhvdyBjYWxsZXJzIGRlYWwgd2l0aCBmYWlsdXJlcyBmaXJzdCAqLwotCUFTU0VSVCghKGZsYWdzICYgWEZTX0JVRl9UUllMT0NLKSk7CisJQVNTRVJUKCEoZmxhZ3MgJiBYQkZfVFJZTE9DSykpOwogCiAJZCA9IHhmc19idHJlZV9wdHJfdG9fZGFkZHIoY3VyLCBwdHIpOwogCWVycm9yID0geGZzX3RyYW5zX3JlYWRfYnVmKG1wLCBjdXItPmJjX3RwLCBtcC0+bV9kZGV2X3RhcmdwLCBkLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19idWZfaXRlbS5jIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCmluZGV4IGEzMGY3ZTkuLmYzYzQ5ZTYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKQEAgLTI1MCw3ICsyNTAsNyBAQAogCQkgICAgICAgKChiaXAtPmJsaV9mb3JtYXQuYmxmX21hcF9zaXplIC0gMSkgKiBzaXplb2YodWludCkpKTsKIAl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpJmJpcC0+YmxpX2Zvcm1hdDsKIAl2ZWNwLT5pX2xlbiA9IGJhc2Vfc2l6ZTsKLQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0JGT1JNQVQpOworCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfQkZPUk1BVDsKIAl2ZWNwKys7CiAJbnZlY3MgPSAxOwogCkBAIC0yOTcsMTQgKzI5NywxNCBAQAogCQkJYnVmZmVyX29mZnNldCA9IGZpcnN0X2JpdCAqIFhGU19CTElfQ0hVTks7CiAJCQl2ZWNwLT5pX2FkZHIgPSB4ZnNfYnVmX29mZnNldChicCwgYnVmZmVyX29mZnNldCk7CiAJCQl2ZWNwLT5pX2xlbiA9IG5iaXRzICogWEZTX0JMSV9DSFVOSzsKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfQkNIVU5LKTsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfQkNIVU5LOwogCQkJbnZlY3MrKzsKIAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKG5leHRfYml0ICE9IGxhc3RfYml0ICsgMSkgewogCQkJYnVmZmVyX29mZnNldCA9IGZpcnN0X2JpdCAqIFhGU19CTElfQ0hVTks7CiAJCQl2ZWNwLT5pX2FkZHIgPSB4ZnNfYnVmX29mZnNldChicCwgYnVmZmVyX29mZnNldCk7CiAJCQl2ZWNwLT5pX2xlbiA9IG5iaXRzICogWEZTX0JMSV9DSFVOSzsKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfQkNIVU5LKTsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfQkNIVU5LOwogCQkJbnZlY3MrKzsKIAkJCXZlY3ArKzsKIAkJCWZpcnN0X2JpdCA9IG5leHRfYml0OwpAQCAtMzE2LDcgKzMxNiw3IEBACiAJCQlidWZmZXJfb2Zmc2V0ID0gZmlyc3RfYml0ICogWEZTX0JMSV9DSFVOSzsKIAkJCXZlY3AtPmlfYWRkciA9IHhmc19idWZfb2Zmc2V0KGJwLCBidWZmZXJfb2Zmc2V0KTsKIAkJCXZlY3AtPmlfbGVuID0gbmJpdHMgKiBYRlNfQkxJX0NIVU5LOwotCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9CQ0hVTkspOworCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9CQ0hVTks7CiAvKiBZb3Ugd291bGQgdGhpbmsgd2UgbmVlZCB0byBidW1wIHRoZSBudmVjcyBoZXJlIHRvbywgYnV0IHdlIGRvIG5vdAogICogdGhpcyBudW1iZXIgaXMgdXNlZCBieSByZWNvdmVyeSwgYW5kIGl0IGdldHMgY29uZnVzZWQgYnkgdGhlIGJvdW5kYXJ5CiAgKiBzcGxpdCBoZXJlCkBAIC00NjcsOCArNDY3LDEwIEBACiAvKgogICogVGhpcyBpcyBjYWxsZWQgdG8gYXR0ZW1wdCB0byBsb2NrIHRoZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMKICAqIGJ1ZiBsb2cgaXRlbS4gIERvbid0IHNsZWVwIG9uIHRoZSBidWZmZXIgbG9jay4gIElmIHdlIGNhbid0IGdldAotICogdGhlIGxvY2sgcmlnaHQgYXdheSwgcmV0dXJuIDAuICBJZiB3ZSBjYW4gZ2V0IHRoZSBsb2NrLCBwdWxsIHRoZQotICogYnVmZmVyIGZyb20gdGhlIGZyZWUgbGlzdCwgbWFyayBpdCBidXN5LCBhbmQgcmV0dXJuIDEuCisgKiB0aGUgbG9jayByaWdodCBhd2F5LCByZXR1cm4gMC4gIElmIHdlIGNhbiBnZXQgdGhlIGxvY2ssIHRha2UgYQorICogcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIuIElmIHRoaXMgaXMgYSBkZWxheWVkIHdyaXRlIGJ1ZmZlciB0aGF0CisgKiBuZWVkcyBBSUwgaGVscCB0byBiZSB3cml0dGVuIGJhY2ssIGludm9rZSB0aGUgcHVzaGJ1ZiByb3V0aW5lCisgKiByYXRoZXIgdGhhbiB0aGUgbm9ybWFsIHN1Y2Nlc3MgcGF0aC4KICAqLwogU1RBVElDIHVpbnQKIHhmc19idWZfaXRlbV90cnlsb2NrKApAQCAtNDc3LDI0ICs0NzksMTggQEAKIAl4ZnNfYnVmX3QJKmJwOwogCiAJYnAgPSBiaXAtPmJsaV9idWY7Ci0KLQlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpIHsKKwlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpCiAJCXJldHVybiBYRlNfSVRFTV9QSU5ORUQ7Ci0JfQotCi0JaWYgKCFYRlNfQlVGX0NQU0VNQShicCkpIHsKKwlpZiAoIVhGU19CVUZfQ1BTRU1BKGJwKSkKIAkJcmV0dXJuIFhGU19JVEVNX0xPQ0tFRDsKLQl9CiAKLQkvKgotCSAqIFJlbW92ZSB0aGUgYnVmZmVyIGZyb20gdGhlIGZyZWUgbGlzdC4gIE9ubHkgZG8gdGhpcwotCSAqIGlmIGl0J3Mgb24gdGhlIGZyZWUgbGlzdC4gIFByaXZhdGUgYnVmZmVycyBsaWtlIHRoZQotCSAqIHN1cGVyYmxvY2sgYnVmZmVyIGFyZSBub3QuCi0JICovCisJLyogdGFrZSBhIHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyLiAgKi8KIAlYRlNfQlVGX0hPTEQoYnApOwogCiAJQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSk7CiAJdHJhY2VfeGZzX2J1Zl9pdGVtX3RyeWxvY2soYmlwKTsKKwlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKQorCQlyZXR1cm4gWEZTX0lURU1fUFVTSEJVRjsKIAlyZXR1cm4gWEZTX0lURU1fU1VDQ0VTUzsKIH0KIApAQCAtNjI2LDExICs2MjIsOSBAQAogfQogCiAvKgotICogVGhpcyBpcyBjYWxsZWQgdG8gYXN5bmNocm9ub3VzbHkgd3JpdGUgdGhlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhpcwotICogYnVmIGxvZyBpdGVtIG91dCB0byBkaXNrLiBUaGUgYnVmZmVyIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gbG9ja2VkIGJ5Ci0gKiBhIHN1Y2Nlc3NmdWwgY2FsbCB0byB4ZnNfYnVmX2l0ZW1fdHJ5bG9jaygpLiAgSWYgdGhlIGJ1ZmZlciBzdGlsbCBoYXMKLSAqIEJfREVMV1JJIHNldCwgdGhlbiBnZXQgaXQgZ29pbmcgb3V0IHRvIGRpc2sgd2l0aCBhIGNhbGwgdG8gYmF3cml0ZSgpLgotICogSWYgbm90LCB0aGVuIGp1c3QgcmVsZWFzZSB0aGUgYnVmZmVyLgorICogVGhlIGJ1ZmZlciBpcyBsb2NrZWQsIGJ1dCBpcyBub3QgYSBkZWxheWVkIHdyaXRlIGJ1ZmZlci4gVGhpcyBoYXBwZW5zCisgKiBpZiB3ZSByYWNlIHdpdGggSU8gY29tcGxldGlvbiBhbmQgaGVuY2Ugd2UgZG9uJ3Qgd2FudCB0byB0cnkgdG8gd3JpdGUgaXQKKyAqIGFnYWluLiBKdXN0IHJlbGVhc2UgdGhlIGJ1ZmZlci4KICAqLwogU1RBVElDIHZvaWQKIHhmc19idWZfaXRlbV9wdXNoKApAQCAtNjQyLDE3ICs2MzYsMjkgQEAKIAl0cmFjZV94ZnNfYnVmX2l0ZW1fcHVzaChiaXApOwogCiAJYnAgPSBiaXAtPmJsaV9idWY7CisJQVNTRVJUKCFYRlNfQlVGX0lTREVMQVlXUklURShicCkpOworCXhmc19idWZfcmVsc2UoYnApOworfQogCi0JaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkgewotCQlpbnQJZXJyb3I7Ci0JCWVycm9yID0geGZzX2Jhd3JpdGUoYmlwLT5ibGlfaXRlbS5saV9tb3VudHAsIGJwKTsKLQkJaWYgKGVycm9yKQotCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgYmlwLT5ibGlfaXRlbS5saV9tb3VudHAsCi0JCQkieGZzX2J1Zl9pdGVtX3B1c2g6IHB1c2hidWYgZXJyb3IgJWQgb24gYmlwICVwLCBicCAlcCIsCi0JCQkJCWVycm9yLCBiaXAsIGJwKTsKLQl9IGVsc2UgewotCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQl9CisvKgorICogVGhlIGJ1ZmZlciBpcyBsb2NrZWQgYW5kIGlzIGEgZGVsYXllZCB3cml0ZSBidWZmZXIuIFByb21vdGUgdGhlIGJ1ZmZlcgorICogaW4gdGhlIGRlbGF5ZWQgd3JpdGUgcXVldWUgYXMgdGhlIGNhbGxlciBrbm93cyB0aGF0IHRoZXkgbXVzdCBpbnZva2UKKyAqIHRoZSB4ZnNidWZkIHRvIGdldCB0aGlzIGJ1ZmZlciB3cml0dGVuLiBXZSBoYXZlIHRvIHVubG9jayB0aGUgYnVmZmVyCisgKiB0byBhbGxvdyB0aGUgeGZzYnVmZCB0byB3cml0ZSBpdCwgdG9vLgorICovCitTVEFUSUMgdm9pZAoreGZzX2J1Zl9pdGVtX3B1c2hidWYoCisJeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXApCit7CisJeGZzX2J1Zl90CSpicDsKKworCUFTU0VSVCghKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkpOworCXRyYWNlX3hmc19idWZfaXRlbV9wdXNoYnVmKGJpcCk7CisKKwlicCA9IGJpcC0+YmxpX2J1ZjsKKwlBU1NFUlQoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKTsKKwl4ZnNfYnVmX2RlbHdyaV9wcm9tb3RlKGJwKTsKKwl4ZnNfYnVmX3JlbHNlKGJwKTsKIH0KIAogLyogQVJHU1VTRUQgKi8KQEAgLTY3Nyw3ICs2ODMsNyBAQAogCS5pb3BfY29tbWl0dGVkCT0gKHhmc19sc25fdCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sc25fdCkpCiAJCQkJCXhmc19idWZfaXRlbV9jb21taXR0ZWQsCiAJLmlvcF9wdXNoCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfYnVmX2l0ZW1fcHVzaCwKLQkuaW9wX3B1c2hidWYJPSBOVUxMLAorCS5pb3BfcHVzaGJ1Zgk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX2J1Zl9pdGVtX3B1c2hidWYsCiAJLmlvcF9jb21taXR0aW5nID0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqLCB4ZnNfbHNuX3QpKQogCQkJCQl4ZnNfYnVmX2l0ZW1fY29tbWl0dGluZwogfTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYwppbmRleCBjMGM4ODY5Li4wY2E1NTZiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RhX2J0cmVlLmMKKysrIGIvZnMveGZzL3hmc19kYV9idHJlZS5jCkBAIC0xNTM0LDggKzE1MzQsOCBAQAogZW51bSB4ZnNfZGFjbXAKIHhmc19kYV9jb21wbmFtZSgKIAlzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsCi0JY29uc3QgY2hhciAJKm5hbWUsCi0JaW50IAkJbGVuKQorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCisJaW50CQlsZW4pCiB7CiAJcmV0dXJuIChhcmdzLT5uYW1lbGVuID09IGxlbiAmJiBtZW1jbXAoYXJncy0+bmFtZSwgbmFtZSwgbGVuKSA9PSAwKSA/CiAJCQkJCVhGU19DTVBfRVhBQ1QgOiBYRlNfQ01QX0RJRkZFUkVOVDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuaCBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuaAppbmRleCAzMGNkMDhmLi5mZTlmNWE4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RhX2J0cmVlLmgKKysrIGIvZnMveGZzL3hmc19kYV9idHJlZS5oCkBAIC0yMDksNyArMjA5LDggQEAKICAqLwogc3RydWN0IHhmc19uYW1lb3BzIHsKIAl4ZnNfZGFoYXNoX3QJKCpoYXNobmFtZSkoc3RydWN0IHhmc19uYW1lICopOwotCWVudW0geGZzX2RhY21wCSgqY29tcG5hbWUpKHN0cnVjdCB4ZnNfZGFfYXJncyAqLCBjb25zdCBjaGFyICosIGludCk7CisJZW51bSB4ZnNfZGFjbXAJKCpjb21wbmFtZSkoc3RydWN0IHhmc19kYV9hcmdzICosCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKIH07CiAKIApAQCAtMjYwLDcgKzI2MSw3IEBACiAKIHVpbnQgeGZzX2RhX2hhc2huYW1lKGNvbnN0IF9fdWludDhfdCAqbmFtZV9zdHJpbmcsIGludCBuYW1lX2xlbmd0aCk7CiBlbnVtIHhmc19kYWNtcCB4ZnNfZGFfY29tcG5hbWUoc3RydWN0IHhmc19kYV9hcmdzICphcmdzLAotCQkJCWNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pOworCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIGludCBsZW4pOwogCiAKIHhmc19kYV9zdGF0ZV90ICp4ZnNfZGFfc3RhdGVfYWxsb2Modm9pZCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RmcmFnLmMgYi9mcy94ZnMveGZzX2RmcmFnLmMKaW5kZXggODRjYTFjZi4uY2QyN2M5ZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kZnJhZy5jCisrKyBiL2ZzL3hmcy94ZnNfZGZyYWcuYwpAQCAtNDUsMTUgKzQ1LDIxIEBACiAjaW5jbHVkZSAieGZzX3Zub2Rlb3BzLmgiCiAjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKKworc3RhdGljIGludCB4ZnNfc3dhcF9leHRlbnRzKAorCXhmc19pbm9kZV90CSppcCwJLyogdGFyZ2V0IGlub2RlICovCisJeGZzX2lub2RlX3QJKnRpcCwJLyogdG1wIGlub2RlICovCisJeGZzX3N3YXBleHRfdAkqc3hwKTsKKwogLyoKLSAqIFN5c3NnaSBpbnRlcmZhY2UgZm9yIHN3YXBleHQKKyAqIGlvY3RsIGludGVyZmFjZSBmb3Igc3dhcGV4dAogICovCiBpbnQKIHhmc19zd2FwZXh0KAogCXhmc19zd2FwZXh0X3QJKnN4cCkKIHsKIAl4ZnNfaW5vZGVfdCAgICAgKmlwLCAqdGlwOwotCXN0cnVjdCBmaWxlCSpmaWxlLCAqdGFyZ2V0X2ZpbGU7CisJc3RydWN0IGZpbGUJKmZpbGUsICp0bXBfZmlsZTsKIAlpbnQJCWVycm9yID0gMDsKIAogCS8qIFB1bGwgaW5mb3JtYXRpb24gZm9yIHRoZSB0YXJnZXQgZmQgKi8KQEAgLTY4LDQ2ICs3NCw0NiBAQAogCQlnb3RvIG91dF9wdXRfZmlsZTsKIAl9CiAKLQl0YXJnZXRfZmlsZSA9IGZnZXQoKGludClzeHAtPnN4X2ZkdG1wKTsKLQlpZiAoIXRhcmdldF9maWxlKSB7CisJdG1wX2ZpbGUgPSBmZ2V0KChpbnQpc3hwLT5zeF9mZHRtcCk7CisJaWYgKCF0bXBfZmlsZSkgewogCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOwogCQlnb3RvIG91dF9wdXRfZmlsZTsKIAl9CiAKLQlpZiAoISh0YXJnZXRfZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHx8Ci0JICAgICh0YXJnZXRfZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSkgeworCWlmICghKHRtcF9maWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgfHwKKwkgICAgKHRtcF9maWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVCQURGKTsKLQkJZ290byBvdXRfcHV0X3RhcmdldF9maWxlOworCQlnb3RvIG91dF9wdXRfdG1wX2ZpbGU7CiAJfQogCiAJaWYgKElTX1NXQVBGSUxFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpIHx8Ci0JICAgIElTX1NXQVBGSUxFKHRhcmdldF9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSkgeworCSAgICBJU19TV0FQRklMRSh0bXBfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKLQkJZ290byBvdXRfcHV0X3RhcmdldF9maWxlOworCQlnb3RvIG91dF9wdXRfdG1wX2ZpbGU7CiAJfQogCiAJaXAgPSBYRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKLQl0aXAgPSBYRlNfSSh0YXJnZXRfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJdGlwID0gWEZTX0kodG1wX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCiAJaWYgKGlwLT5pX21vdW50ICE9IHRpcC0+aV9tb3VudCkgewogCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOwotCQlnb3RvIG91dF9wdXRfdGFyZ2V0X2ZpbGU7CisJCWdvdG8gb3V0X3B1dF90bXBfZmlsZTsKIAl9CiAKIAlpZiAoaXAtPmlfaW5vID09IHRpcC0+aV9pbm8pIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKLQkJZ290byBvdXRfcHV0X3RhcmdldF9maWxlOworCQlnb3RvIG91dF9wdXRfdG1wX2ZpbGU7CiAJfQogCiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVJTyk7Ci0JCWdvdG8gb3V0X3B1dF90YXJnZXRfZmlsZTsKKwkJZ290byBvdXRfcHV0X3RtcF9maWxlOwogCX0KIAogCWVycm9yID0geGZzX3N3YXBfZXh0ZW50cyhpcCwgdGlwLCBzeHApOwogCi0gb3V0X3B1dF90YXJnZXRfZmlsZToKLQlmcHV0KHRhcmdldF9maWxlKTsKKyBvdXRfcHV0X3RtcF9maWxlOgorCWZwdXQodG1wX2ZpbGUpOwogIG91dF9wdXRfZmlsZToKIAlmcHV0KGZpbGUpOwogIG91dDoKQEAgLTE4Niw3ICsxOTIsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIHhmc19zd2FwX2V4dGVudHMoCiAJeGZzX2lub2RlX3QJKmlwLAkvKiB0YXJnZXQgaW5vZGUgKi8KIAl4ZnNfaW5vZGVfdAkqdGlwLAkvKiB0bXAgaW5vZGUgKi8KQEAgLTI1NCw2ICsyNjAsOSBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCisJdHJhY2VfeGZzX3N3YXBfZXh0ZW50X2JlZm9yZShpcCwgMCk7CisJdHJhY2VfeGZzX3N3YXBfZXh0ZW50X2JlZm9yZSh0aXAsIDEpOworCiAJLyogY2hlY2sgaW5vZGUgZm9ybWF0cyBub3cgdGhhdCBkYXRhIGlzIGZsdXNoZWQgKi8KIAllcnJvciA9IHhmc19zd2FwX2V4dGVudHNfY2hlY2tfZm9ybWF0KGlwLCB0aXApOwogCWlmIChlcnJvcikgewpAQCAtNDIxLDYgKzQzMCw4IEBACiAKIAllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19TV0FQRVhUKTsKIAorCXRyYWNlX3hmc19zd2FwX2V4dGVudF9hZnRlcihpcCwgMCk7CisJdHJhY2VfeGZzX3N3YXBfZXh0ZW50X2FmdGVyKHRpcCwgMSk7CiBvdXQ6CiAJa21lbV9mcmVlKHRlbXBpZnApOwogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGZyYWcuaCBiL2ZzL3hmcy94ZnNfZGZyYWcuaAppbmRleCA0ZjU1YTYzLi4yMGJkZDkzIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RmcmFnLmgKKysrIGIvZnMveGZzL3hmc19kZnJhZy5oCkBAIC00OCw5ICs0OCw2IEBACiAgKi8KIGludAl4ZnNfc3dhcGV4dChzdHJ1Y3QgeGZzX3N3YXBleHQgKnN4KTsKIAotaW50CXhmc19zd2FwX2V4dGVudHMoc3RydWN0IHhmc19pbm9kZSAqaXAsIHN0cnVjdCB4ZnNfaW5vZGUgKnRpcCwKLQkJc3RydWN0IHhmc19zd2FwZXh0ICpzeHApOwotCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJLyogX19YRlNfREZSQUdfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjIuYyBiL2ZzL3hmcy94ZnNfZGlyMi5jCmluZGV4IDkzNjM0YTcuLjQyNTIwZjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMi5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMi5jCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSAieGZzX3Zub2Rlb3BzLmgiCiAjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKLXN0cnVjdCB4ZnNfbmFtZSB4ZnNfbmFtZV9kb3Rkb3QgPSB7Ii4uIiwgMn07CitzdHJ1Y3QgeGZzX25hbWUgeGZzX25hbWVfZG90ZG90ID0geyAodW5zaWduZWQgY2hhciAqKSIuLiIsIDJ9OwogCiAvKgogICogQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSAoaWUuIEEtWikgc3VwcG9ydCBmb3IgZGlyZWN0b3JpZXMgdGhhdCB3YXMKQEAgLTY2LDggKzY2LDggQEAKIFNUQVRJQyBlbnVtIHhmc19kYWNtcAogeGZzX2FzY2lpX2NpX2NvbXBuYW1lKAogCXN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywKLQljb25zdCBjaGFyCSpuYW1lLAotCWludCAJCWxlbikKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCWludAkJbGVuKQogewogCWVudW0geGZzX2RhY21wCXJlc3VsdDsKIAlpbnQJCWk7CkBAIC0yNDcsNyArMjQ3LDcgQEAKIGludAogeGZzX2Rpcl9jaWxvb2t1cF9yZXN1bHQoCiAJc3RydWN0IHhmc19kYV9hcmdzICphcmdzLAotCWNvbnN0IGNoYXIJKm5hbWUsCisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKIAlpbnQJCWxlbikKIHsKIAlpZiAoYXJncy0+Y21wcmVzdWx0ID09IFhGU19DTVBfRElGRkVSRU5UKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyLmggYi9mcy94ZnMveGZzX2RpcjIuaAppbmRleCAxZDllZjk2Li43NGEzYjEwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjIuaAorKysgYi9mcy94ZnMveGZzX2RpcjIuaApAQCAtMTAwLDcgKzEwMCw3IEBACiBleHRlcm4gaW50IHhmc19kaXIyX3Nocmlua19pbm9kZShzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsIHhmc19kaXIyX2RiX3QgZGIsCiAJCQkJc3RydWN0IHhmc19kYWJ1ZiAqYnApOwogCi1leHRlcm4gaW50IHhmc19kaXJfY2lsb29rdXBfcmVzdWx0KHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywgY29uc3QgY2hhciAqbmFtZSwKLQkJCQlpbnQgbGVuKTsKK2V4dGVybiBpbnQgeGZzX2Rpcl9jaWxvb2t1cF9yZXN1bHQoc3RydWN0IHhmc19kYV9hcmdzICphcmdzLAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIGludCBsZW4pOwogCiAjZW5kaWYJLyogX19YRlNfRElSMl9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jIGIvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMKaW5kZXggZGRjNGVjYy4uNzc5YTI2NyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMKQEAgLTU3LDggKzU3LDggQEAKIHZvaWQKIHhmc19kaXJfc3RhcnR1cCh2b2lkKQogewotCXhmc19kaXJfaGFzaF9kb3QgPSB4ZnNfZGFfaGFzaG5hbWUoIi4iLCAxKTsKLQl4ZnNfZGlyX2hhc2hfZG90ZG90ID0geGZzX2RhX2hhc2huYW1lKCIuLiIsIDIpOworCXhmc19kaXJfaGFzaF9kb3QgPSB4ZnNfZGFfaGFzaG5hbWUoKHVuc2lnbmVkIGNoYXIgKikiLiIsIDEpOworCXhmc19kaXJfaGFzaF9kb3Rkb3QgPSB4ZnNfZGFfaGFzaG5hbWUoKHVuc2lnbmVkIGNoYXIgKikiLi4iLCAyKTsKIH0KIAogLyoKQEAgLTUxMyw4ICs1MTMsOSBAQAogCQkvKgogCQkgKiBJZiBpdCBkaWRuJ3QgZml0LCBzZXQgdGhlIGZpbmFsIG9mZnNldCB0byBoZXJlICYgcmV0dXJuLgogCQkgKi8KLQkJaWYgKGZpbGxkaXIoZGlyZW50LCBkZXAtPm5hbWUsIGRlcC0+bmFtZWxlbiwgY29vayAmIDB4N2ZmZmZmZmYsCi0JCQkgICAgYmU2NF90b19jcHUoZGVwLT5pbnVtYmVyKSwgRFRfVU5LTk9XTikpIHsKKwkJaWYgKGZpbGxkaXIoZGlyZW50LCAoY2hhciAqKWRlcC0+bmFtZSwgZGVwLT5uYW1lbGVuLAorCQkJICAgIGNvb2sgJiAweDdmZmZmZmZmLCBiZTY0X3RvX2NwdShkZXAtPmludW1iZXIpLAorCQkJICAgIERUX1VOS05PV04pKSB7CiAJCQkqb2Zmc2V0ID0gY29vayAmIDB4N2ZmZmZmZmY7CiAJCQl4ZnNfZGFfYnJlbHNlKE5VTEwsIGJwKTsKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2xlYWYuYyBiL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKaW5kZXggMjlmNDg0Yy4uZTJkODk4NSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2xlYWYuYworKysgYi9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCkBAIC0xMDgxLDcgKzEwODEsNyBAQAogCQlkZXAgPSAoeGZzX2RpcjJfZGF0YV9lbnRyeV90ICopcHRyOwogCQlsZW5ndGggPSB4ZnNfZGlyMl9kYXRhX2VudHNpemUoZGVwLT5uYW1lbGVuKTsKIAotCQlpZiAoZmlsbGRpcihkaXJlbnQsIGRlcC0+bmFtZSwgZGVwLT5uYW1lbGVuLAorCQlpZiAoZmlsbGRpcihkaXJlbnQsIChjaGFyICopZGVwLT5uYW1lLCBkZXAtPm5hbWVsZW4sCiAJCQkgICAgeGZzX2RpcjJfYnl0ZV90b19kYXRhcHRyKG1wLCBjdXJvZmYpICYgMHg3ZmZmZmZmZiwKIAkJCSAgICBiZTY0X3RvX2NwdShkZXAtPmludW1iZXIpLCBEVF9VTktOT1dOKSkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX25vZGUuYyBiL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMKaW5kZXggY2U2ZTM1NS4uNzhmYzRkOSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX25vZGUuYworKysgYi9mcy94ZnMveGZzX2RpcjJfbm9kZS5jCkBAIC02NSw3ICs2NSw3IEBACiAvKgogICogTG9nIGVudHJpZXMgZnJvbSBhIGZyZWVzcGFjZSBibG9jay4KICAqLwotdm9pZAorU1RBVElDIHZvaWQKIHhmc19kaXIyX2ZyZWVfbG9nX2Jlc3RzKAogCXhmc190cmFuc190CQkqdHAsCQkvKiB0cmFuc2FjdGlvbiBwb2ludGVyICovCiAJeGZzX2RhYnVmX3QJCSpicCwJCS8qIGZyZWVzcGFjZSBidWZmZXIgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmggYi9mcy94ZnMveGZzX2RpcjJfbm9kZS5oCmluZGV4IGRkZTcyZGIuLjgyZGZlNzEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmgKKysrIGIvZnMveGZzL3hmc19kaXIyX25vZGUuaApAQCAtNzUsOCArNzUsNiBAQAogCXJldHVybiAoKGRiKSAlIFhGU19ESVIyX01BWF9GUkVFX0JFU1RTKG1wKSk7CiB9CiAKLWV4dGVybiB2b2lkIHhmc19kaXIyX2ZyZWVfbG9nX2Jlc3RzKHN0cnVjdCB4ZnNfdHJhbnMgKnRwLCBzdHJ1Y3QgeGZzX2RhYnVmICpicCwKLQkJCQkgICAgaW50IGZpcnN0LCBpbnQgbGFzdCk7CiBleHRlcm4gaW50IHhmc19kaXIyX2xlYWZfdG9fbm9kZShzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsCiAJCQkJIHN0cnVjdCB4ZnNfZGFidWYgKmxicCk7CiBleHRlcm4geGZzX2RhaGFzaF90IHhmc19kaXIyX2xlYWZuX2xhc3RoYXNoKHN0cnVjdCB4ZnNfZGFidWYgKmJwLCBpbnQgKmNvdW50KTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9zZi5jIGIvZnMveGZzL3hmc19kaXIyX3NmLmMKaW5kZXggOWQ0ZjE3YS4uYzFhNTk0NSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX3NmLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX3NmLmMKQEAgLTc4Miw3ICs3ODIsNyBAQAogCQl9CiAKIAkJaW5vID0geGZzX2RpcjJfc2ZfZ2V0X2ludW1iZXIoc2ZwLCB4ZnNfZGlyMl9zZl9pbnVtYmVycChzZmVwKSk7Ci0JCWlmIChmaWxsZGlyKGRpcmVudCwgc2ZlcC0+bmFtZSwgc2ZlcC0+bmFtZWxlbiwKKwkJaWYgKGZpbGxkaXIoZGlyZW50LCAoY2hhciAqKXNmZXAtPm5hbWUsIHNmZXAtPm5hbWVsZW4sCiAJCQkgICAgb2ZmICYgMHg3ZmZmZmZmZiwgaW5vLCBEVF9VTktOT1dOKSkgewogCQkJKm9mZnNldCA9IG9mZiAmIDB4N2ZmZmZmZmY7CiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMgYi9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jCmluZGV4IDA1YTRiZGQuLjZmMzVlZDEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYwpAQCAtODIsNyArODIsNyBAQAogCiAJbG9nX3ZlY3Rvci0+aV9hZGRyID0gKHhmc19jYWRkcl90KSYoZWZpcC0+ZWZpX2Zvcm1hdCk7CiAJbG9nX3ZlY3Rvci0+aV9sZW4gPSBzaXplOwotCVhMT0dfVkVDX1NFVF9UWVBFKGxvZ192ZWN0b3IsIFhMT0dfUkVHX1RZUEVfRUZJX0ZPUk1BVCk7CisJbG9nX3ZlY3Rvci0+aV90eXBlID0gWExPR19SRUdfVFlQRV9FRklfRk9STUFUOwogCUFTU0VSVChzaXplID49IHNpemVvZih4ZnNfZWZpX2xvZ19mb3JtYXRfdCkpOwogfQogCkBAIC00MDYsNyArNDA2LDcgQEAKIAogCWxvZ192ZWN0b3ItPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmKGVmZHAtPmVmZF9mb3JtYXQpOwogCWxvZ192ZWN0b3ItPmlfbGVuID0gc2l6ZTsKLQlYTE9HX1ZFQ19TRVRfVFlQRShsb2dfdmVjdG9yLCBYTE9HX1JFR19UWVBFX0VGRF9GT1JNQVQpOworCWxvZ192ZWN0b3ItPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfRUZEX0ZPUk1BVDsKIAlBU1NFUlQoc2l6ZSA+PSBzaXplb2YoeGZzX2VmZF9sb2dfZm9ybWF0X3QpKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19maWxlc3RyZWFtLmMgYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYwppbmRleCBhNjMxZTE0Li4zOTA4NTBlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYworKysgYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYwpAQCAtMTQwLDYgKzE0MCw3IEBACiAJaW50CQlmbGFncywKIAl4ZnNfZXh0bGVuX3QJbWlubGVuKQogeworCWludAkJc3RyZWFtcywgbWF4X3N0cmVhbXM7CiAJaW50CQllcnIsIHRyeWxvY2ssIG5zY2FuOwogCXhmc19leHRsZW5fdAlsb25nZXN0LCBmcmVlLCBtaW5mcmVlLCBtYXhmcmVlID0gMDsKIAl4ZnNfYWdudW1iZXJfdAlhZywgbWF4X2FnID0gTlVMTEFHTlVNQkVSOwpAQCAtMTU1LDE1ICsxNTYsMTUgQEAKIAl0cnlsb2NrID0gWEZTX0FMTE9DX0ZMQUdfVFJZTE9DSzsKIAogCWZvciAobnNjYW4gPSAwOyAxOyBuc2NhbisrKSB7Ci0KLQkJVFJBQ0VfQUdfU0NBTihtcCwgYWcsIHhmc19maWxlc3RyZWFtX3BlZWtfYWcobXAsIGFnKSk7Ci0KLQkJcGFnID0gbXAtPm1fcGVyYWcgKyBhZzsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWcpOworCQlUUkFDRV9BR19TQ0FOKG1wLCBhZywgYXRvbWljX3JlYWQoJnBhZy0+cGFnZl9mc3RybXMpKTsKIAogCQlpZiAoIXBhZy0+cGFnZl9pbml0KSB7CiAJCQllcnIgPSB4ZnNfYWxsb2NfcGFnZl9pbml0KG1wLCBOVUxMLCBhZywgdHJ5bG9jayk7Ci0JCQlpZiAoZXJyICYmICF0cnlsb2NrKQorCQkJaWYgKGVyciAmJiAhdHJ5bG9jaykgeworCQkJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJCQlyZXR1cm4gZXJyOworCQkJfQogCQl9CiAKIAkJLyogTWlnaHQgZmFpbCBzb21ldGltZXMgZHVyaW5nIHRoZSAxc3QgcGFzcyB3aXRoIHRyeWxvY2sgc2V0LiAqLwpAQCAtMTczLDYgKzE3NCw3IEBACiAJCS8qIEtlZXAgdHJhY2sgb2YgdGhlIEFHIHdpdGggdGhlIG1vc3QgZnJlZSBibG9ja3MuICovCiAJCWlmIChwYWctPnBhZ2ZfZnJlZWJsa3MgPiBtYXhmcmVlKSB7CiAJCQltYXhmcmVlID0gcGFnLT5wYWdmX2ZyZWVibGtzOworCQkJbWF4X3N0cmVhbXMgPSBhdG9taWNfcmVhZCgmcGFnLT5wYWdmX2ZzdHJtcyk7CiAJCQltYXhfYWcgPSBhZzsKIAkJfQogCkBAIC0xOTUsNiArMTk3LDggQEAKIAogCQkJLyogQnJlYWsgb3V0LCByZXRhaW5pbmcgdGhlIHJlZmVyZW5jZSBvbiB0aGUgQUcuICovCiAJCQlmcmVlID0gcGFnLT5wYWdmX2ZyZWVibGtzOworCQkJc3RyZWFtcyA9IGF0b21pY19yZWFkKCZwYWctPnBhZ2ZfZnN0cm1zKTsKKwkJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJCSphZ3AgPSBhZzsKIAkJCWJyZWFrOwogCQl9CkBAIC0yMDIsNiArMjA2LDcgQEAKIAkJLyogRHJvcCB0aGUgcmVmZXJlbmNlIG9uIHRoaXMgQUcsIGl0J3Mgbm90IHVzYWJsZS4gKi8KIAkJeGZzX2ZpbGVzdHJlYW1fcHV0X2FnKG1wLCBhZyk7CiBuZXh0X2FnOgorCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCS8qIE1vdmUgdG8gdGhlIG5leHQgQUcsIHdyYXBwaW5nIHRvIEFHIDAgaWYgbmVjZXNzYXJ5LiAqLwogCQlpZiAoKythZyA+PSBtcC0+bV9zYi5zYl9hZ2NvdW50KQogCQkJYWcgPSAwOwpAQCAtMjI5LDYgKzIzNCw3IEBACiAJCWlmIChtYXhfYWcgIT0gTlVMTEFHTlVNQkVSKSB7CiAJCQl4ZnNfZmlsZXN0cmVhbV9nZXRfYWcobXAsIG1heF9hZyk7CiAJCQlUUkFDRV9BR19QSUNLMShtcCwgbWF4X2FnLCBtYXhmcmVlKTsKKwkJCXN0cmVhbXMgPSBtYXhfc3RyZWFtczsKIAkJCWZyZWUgPSBtYXhmcmVlOwogCQkJKmFncCA9IG1heF9hZzsKIAkJCWJyZWFrOwpAQCAtMjQwLDE2ICsyNDYsMTQgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JVFJBQ0VfQUdfUElDSzIobXAsIHN0YXJ0YWcsICphZ3AsIHhmc19maWxlc3RyZWFtX3BlZWtfYWcobXAsICphZ3ApLAotCQkJZnJlZSwgbnNjYW4sIGZsYWdzKTsKKwlUUkFDRV9BR19QSUNLMihtcCwgc3RhcnRhZywgKmFncCwgc3RyZWFtcywgZnJlZSwgbnNjYW4sIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQogCiAvKgogICogU2V0IHRoZSBhbGxvY2F0aW9uIGdyb3VwIG51bWJlciBmb3IgYSBmaWxlIG9yIGEgZGlyZWN0b3J5LCB1cGRhdGluZyBpbm9kZQotICogcmVmZXJlbmNlcyBhbmQgcGVyLUFHIHJlZmVyZW5jZXMgYXMgYXBwcm9wcmlhdGUuICBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZQotICogbV9wZXJhZ2xvY2sgaGVsZCBpbiByZWFkIG1vZGUuCisgKiByZWZlcmVuY2VzIGFuZCBwZXItQUcgcmVmZXJlbmNlcyBhcyBhcHByb3ByaWF0ZS4KICAqLwogc3RhdGljIGludAogX3hmc19maWxlc3RyZWFtX3VwZGF0ZV9hZygKQEAgLTQ1MSwyMCArNDU1LDYgQEAKIH0KIAogLyoKLSAqIElmIHRoZSBtb3VudCBwb2ludCdzIG1fcGVyYWcgYXJyYXkgaXMgZ29pbmcgdG8gYmUgcmVhbGxvY2F0ZWQsIGFsbAotICogb3V0c3RhbmRpbmcgY2FjaGUgZW50cmllcyBtdXN0IGJlIGZsdXNoZWQgdG8gYXZvaWQgYWNjZXNzaW5nIHJlZmVyZW5jZSBjb3VudAotICogYWRkcmVzc2VzIHRoYXQgaGF2ZSBiZWVuIGZyZWVkLiAgVGhlIGNhbGwgdG8geGZzX2ZpbGVzdHJlYW1fZmx1c2goKSBtdXN0IGJlCi0gKiBtYWRlIGluc2lkZSB0aGUgYmxvY2sgdGhhdCBob2xkcyB0aGUgbV9wZXJhZ2xvY2sgaW4gd3JpdGUgbW9kZSB0byBkbyB0aGUKLSAqIHJlYWxsb2NhdGlvbi4KLSAqLwotdm9pZAoteGZzX2ZpbGVzdHJlYW1fZmx1c2goCi0JeGZzX21vdW50X3QJKm1wKQotewotCXhmc19tcnVfY2FjaGVfZmx1c2gobXAtPm1fZmlsZXN0cmVhbSk7Ci19Ci0KLS8qCiAgKiBSZXR1cm4gdGhlIEFHIG9mIHRoZSBmaWxlc3RyZWFtIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBiZWxvbmdzIHRvLCBvcgogICogTlVMTEFHTlVNQkVSIG90aGVyd2lzZS4KICAqLwpAQCAtNTI2LDcgKzUxNiw2IEBACiAKIAltcCA9IHBpcC0+aV9tb3VudDsKIAljYWNoZSA9IG1wLT5tX2ZpbGVzdHJlYW07Ci0JZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCiAJLyoKIAkgKiBXZSBoYXZlIGEgcHJvYmxlbSwgSG91c3Rvbi4KQEAgLTU0MywxMCArNTMyLDggQEAKIAkgKgogCSAqIFNvLCBpZiB3ZSBjYW4ndCBnZXQgdGhlIGlvbG9jayB3aXRob3V0IHNsZWVwaW5nIHRoZW4ganVzdCBnaXZlIHVwCiAJICovCi0JaWYgKCF4ZnNfaWxvY2tfbm93YWl0KHBpcCwgWEZTX0lPTE9DS19FWENMKSkgewotCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCWlmICgheGZzX2lsb2NrX25vd2FpdChwaXAsIFhGU19JT0xPQ0tfRVhDTCkpCiAJCXJldHVybiAxOwotCX0KIAogCS8qIElmIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGlzIGFscmVhZHkgaW4gdGhlIGNhY2hlLCB1c2UgaXRzIEFHLiAqLwogCWl0ZW0gPSB4ZnNfbXJ1X2NhY2hlX2xvb2t1cChjYWNoZSwgcGlwLT5pX2lubyk7CkBAIC02MDEsNyArNTg4LDYgQEAKIAogZXhpdDoKIAl4ZnNfaXVubG9jayhwaXAsIFhGU19JT0xPQ0tfRVhDTCk7Ci0JdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAlyZXR1cm4gLWVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19maWxlc3RyZWFtLmggYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uaAppbmRleCA0YWJhNjdjLi4yNjBmNzU3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uaAorKysgYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uaApAQCAtNzksMTIgKzc5LDIxIEBACiAgKiB0aGUgY2FjaGUgdGhhdCByZWZlcmVuY2UgcGVyLWFnIGFycmF5IGVsZW1lbnRzIHRoYXQgaGF2ZSBzaW5jZSBiZWVuCiAgKiByZWFsbG9jYXRlZC4KICAqLworLyoKKyAqIHhmc19maWxlc3RyZWFtX3BlZWtfYWcgaXMgb25seSB1c2VkIGluIHRyYWNpbmcgY29kZQorICovCiBzdGF0aWMgaW5saW5lIGludAogeGZzX2ZpbGVzdHJlYW1fcGVla19hZygKIAl4ZnNfbW91bnRfdAkqbXAsCiAJeGZzX2FnbnVtYmVyX3QJYWdubykKIHsKLQlyZXR1cm4gYXRvbWljX3JlYWQoJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2ZfZnN0cm1zKTsKKwlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CisJaW50CQlyZXQ7CisKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKKwlyZXQgPSBhdG9taWNfcmVhZCgmcGFnLT5wYWdmX2ZzdHJtcyk7CisJeGZzX3BlcmFnX3B1dChwYWcpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC05Miw3ICsxMDEsMTMgQEAKIAl4ZnNfbW91bnRfdAkqbXAsCiAJeGZzX2FnbnVtYmVyX3QJYWdubykKIHsKLQlyZXR1cm4gYXRvbWljX2luY19yZXR1cm4oJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2ZfZnN0cm1zKTsKKwlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CisJaW50CQlyZXQ7CisKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKKwlyZXQgPSBhdG9taWNfaW5jX3JldHVybigmcGFnLT5wYWdmX2ZzdHJtcyk7CisJeGZzX3BlcmFnX3B1dChwYWcpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC0xMDAsNyArMTE1LDEzIEBACiAJeGZzX21vdW50X3QJKm1wLAogCXhmc19hZ251bWJlcl90CWFnbm8pCiB7Ci0JcmV0dXJuIGF0b21pY19kZWNfcmV0dXJuKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdmX2ZzdHJtcyk7CisJc3RydWN0IHhmc19wZXJhZyAqcGFnOworCWludAkJcmV0OworCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CisJcmV0ID0gYXRvbWljX2RlY19yZXR1cm4oJnBhZy0+cGFnZl9mc3RybXMpOworCXhmc19wZXJhZ19wdXQocGFnKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBhbGxvY2F0aW9uIHNlbGVjdGlvbiBmbGFncyAqLwpAQCAtMTE0LDcgKzEzNSw2IEBACiB2b2lkIHhmc19maWxlc3RyZWFtX3VuaW5pdCh2b2lkKTsKIGludCB4ZnNfZmlsZXN0cmVhbV9tb3VudChzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiB2b2lkIHhmc19maWxlc3RyZWFtX3VubW91bnQoc3RydWN0IHhmc19tb3VudCAqbXApOwotdm9pZCB4ZnNfZmlsZXN0cmVhbV9mbHVzaChzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiB4ZnNfYWdudW1iZXJfdCB4ZnNfZmlsZXN0cmVhbV9sb29rdXBfYWcoc3RydWN0IHhmc19pbm9kZSAqaXApOwogaW50IHhmc19maWxlc3RyZWFtX2Fzc29jaWF0ZShzdHJ1Y3QgeGZzX2lub2RlICpkaXAsIHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTsKIHZvaWQgeGZzX2ZpbGVzdHJlYW1fZGVhc3NvY2lhdGUoc3RydWN0IHhmc19pbm9kZSAqaXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc29wcy5jIGIvZnMveGZzL3hmc19mc29wcy5jCmluZGV4IGExMzkxOWEuLjM3YTZmNjIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZnNvcHMuYworKysgYi9mcy94ZnMveGZzX2Zzb3BzLmMKQEAgLTE2NywyNyArMTY3LDE0IEBACiAJfQogCW5ldyA9IG5iIC0gbXAtPm1fc2Iuc2JfZGJsb2NrczsKIAlvYWdjb3VudCA9IG1wLT5tX3NiLnNiX2FnY291bnQ7CisKKwkvKiBhbGxvY2F0ZSB0aGUgbmV3IHBlci1hZyBzdHJ1Y3R1cmVzICovCiAJaWYgKG5hZ2NvdW50ID4gb2FnY291bnQpIHsKLQkJdm9pZCAqbmV3X3BlcmFnLCAqb2xkX3BlcmFnOwotCi0JCXhmc19maWxlc3RyZWFtX2ZsdXNoKG1wKTsKLQotCQluZXdfcGVyYWcgPSBrbWVtX3phbGxvYyhzaXplb2YoeGZzX3BlcmFnX3QpICogbmFnY291bnQsCi0JCQkJCUtNX01BWUZBSUwpOwotCQlpZiAoIW5ld19wZXJhZykKLQkJCXJldHVybiBYRlNfRVJST1IoRU5PTUVNKTsKLQotCQlkb3duX3dyaXRlKCZtcC0+bV9wZXJhZ2xvY2spOwotCQltZW1jcHkobmV3X3BlcmFnLCBtcC0+bV9wZXJhZywgc2l6ZW9mKHhmc19wZXJhZ190KSAqIG9hZ2NvdW50KTsKLQkJb2xkX3BlcmFnID0gbXAtPm1fcGVyYWc7Ci0JCW1wLT5tX3BlcmFnID0gbmV3X3BlcmFnOwotCi0JCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF8zMkJJVElOT0RFUzsKLQkJbmFnaW1heCA9IHhmc19pbml0aWFsaXplX3BlcmFnKG1wLCBuYWdjb3VudCk7Ci0JCXVwX3dyaXRlKCZtcC0+bV9wZXJhZ2xvY2spOwotCi0JCWttZW1fZnJlZShvbGRfcGVyYWcpOworCQllcnJvciA9IHhmc19pbml0aWFsaXplX3BlcmFnKG1wLCBuYWdjb3VudCwgJm5hZ2ltYXgpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CiAJfQorCiAJdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19HUk9XRlMpOwogCXRwLT50X2ZsYWdzIHw9IFhGU19UUkFOU19SRVNFUlZFOwogCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgWEZTX0dST1dGU19TUEFDRV9SRVMobXApLApAQCAtMTk2LDYgKzE4MywxMSBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCisJLyoKKwkgKiBXcml0ZSBuZXcgQUcgaGVhZGVycyB0byBkaXNrLiBOb24tdHJhbnNhY3Rpb25hbCwgYnV0IHdyaXR0ZW4KKwkgKiBzeW5jaHJvbm91c2x5IHNvIHRoZXkgYXJlIGNvbXBsZXRlZCBwcmlvciB0byB0aGUgZ3Jvd2ZzIHRyYW5zYWN0aW9uCisJICogYmVpbmcgbG9nZ2VkLgorCSAqLwogCW5mcmVlID0gMDsKIAlmb3IgKGFnbm8gPSBuYWdjb3VudCAtIDE7IGFnbm8gPj0gb2FnY291bnQ7IGFnbm8tLSwgbmV3IC09IGFnc2l6ZSkgewogCQkvKgpAQCAtMzU5LDYgKzM1MSwxMiBAQAogCQkJZ290byBlcnJvcjA7CiAJCX0KIAl9CisKKwkvKgorCSAqIFVwZGF0ZSBjaGFuZ2VkIHN1cGVyYmxvY2sgZmllbGRzIHRyYW5zYWN0aW9uYWxseS4gVGhlc2UgYXJlIG5vdAorCSAqIHNlZW4gYnkgdGhlIHJlc3Qgb2YgdGhlIHdvcmxkIHVudGlsIHRoZSB0cmFuc2FjdGlvbiBjb21taXQgYXBwbGllcworCSAqIHRoZW0gYXRvbWljYWxseSB0byB0aGUgc3VwZXJibG9jay4KKwkgKi8KIAlpZiAobmFnY291bnQgPiBvYWdjb3VudCkKIAkJeGZzX3RyYW5zX21vZF9zYih0cCwgWEZTX1RSQU5TX1NCX0FHQ09VTlQsIG5hZ2NvdW50IC0gb2FnY291bnQpOwogCWlmIChuYiA+IG1wLT5tX3NiLnNiX2RibG9ja3MpCkBAIC0zNjksOSArMzY3LDkgQEAKIAlpZiAoZHBjdCkKIAkJeGZzX3RyYW5zX21vZF9zYih0cCwgWEZTX1RSQU5TX1NCX0lNQVhQQ1QsIGRwY3QpOwogCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7Ci0JaWYgKGVycm9yKSB7CisJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7Ci0JfQorCiAJLyogTmV3IGFsbG9jYXRpb24gZ3JvdXBzIGZ1bGx5IGluaXRpYWxpemVkLCBzbyB1cGRhdGUgbW91bnQgc3RydWN0ICovCiAJaWYgKG5hZ2ltYXgpCiAJCW1wLT5tX21heGFnaSA9IG5hZ2ltYXg7CkBAIC0zODEsNiArMzc5LDggQEAKIAkJbXAtPm1fbWF4aWNvdW50ID0gaWNvdW50IDw8IG1wLT5tX3NiLnNiX2lub3BibG9nOwogCX0gZWxzZQogCQltcC0+bV9tYXhpY291bnQgPSAwOworCisJLyogdXBkYXRlIHNlY29uZGFyeSBzdXBlcmJsb2Nrcy4gKi8KIAlmb3IgKGFnbm8gPSAxOyBhZ25vIDwgbmFnY291bnQ7IGFnbm8rKykgewogCQllcnJvciA9IHhmc19yZWFkX2J1ZihtcCwgbXAtPm1fZGRldl90YXJncCwKIAkJCQkgIFhGU19BR0JfVE9fREFERFIobXAsIGFnbm8sIFhGU19TQl9CTE9DSyhtcCkpLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pYWxsb2MuYyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKaW5kZXggY2I5MDdiYS4uOWQ4ODRjMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pYWxsb2MuYworKysgYi9mcy94ZnMveGZzX2lhbGxvYy5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAkJZCA9IFhGU19BR0JfVE9fREFERFIobXAsIGFnbm8sIGFnYm5vICsgKGogKiBibGtzX3Blcl9jbHVzdGVyKSk7CiAJCWZidWYgPSB4ZnNfdHJhbnNfZ2V0X2J1Zih0cCwgbXAtPm1fZGRldl90YXJncCwgZCwKIAkJCQkJIG1wLT5tX2JzaXplICogYmxrc19wZXJfY2x1c3RlciwKLQkJCQkJIFhGU19CVUZfTE9DSyk7CisJCQkJCSBYQkZfTE9DSyk7CiAJCUFTU0VSVChmYnVmKTsKIAkJQVNTRVJUKCFYRlNfQlVGX0dFVEVSUk9SKGZidWYpKTsKIApAQCAtMjUzLDYgKzI1Myw3IEBACiAJeGZzX2FnaW5vX3QJdGhpc2lubzsJLyogY3VycmVudCBpbm9kZSBudW1iZXIsIGZvciBsb29wICovCiAJaW50CQlpc2FsaWduZWQgPSAwOwkvKiBpbm9kZSBhbGxvY2F0aW9uIGF0IHN0cmlwZSB1bml0ICovCiAJCQkJCS8qIGJvdW5kYXJ5ICovCisJc3RydWN0IHhmc19wZXJhZyAqcGFnOwogCiAJYXJncy50cCA9IHRwOwogCWFyZ3MubXAgPSB0cC0+dF9tb3VudHA7CkBAIC0zODIsOSArMzgzLDkgQEAKIAluZXdpbm8gPSBYRlNfT0ZGQk5PX1RPX0FHSU5PKGFyZ3MubXAsIGFyZ3MuYWdibm8sIDApOwogCWJlMzJfYWRkX2NwdSgmYWdpLT5hZ2lfY291bnQsIG5ld2xlbik7CiAJYmUzMl9hZGRfY3B1KCZhZ2ktPmFnaV9mcmVlY291bnQsIG5ld2xlbik7Ci0JZG93bl9yZWFkKCZhcmdzLm1wLT5tX3BlcmFnbG9jayk7Ci0JYXJncy5tcC0+bV9wZXJhZ1thZ25vXS5wYWdpX2ZyZWVjb3VudCArPSBuZXdsZW47Ci0JdXBfcmVhZCgmYXJncy5tcC0+bV9wZXJhZ2xvY2spOworCXBhZyA9IHhmc19wZXJhZ19nZXQoYXJncy5tcCwgYWdubyk7CisJcGFnLT5wYWdpX2ZyZWVjb3VudCArPSBuZXdsZW47CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCWFnaS0+YWdpX25ld2lubyA9IGNwdV90b19iZTMyKG5ld2lubyk7CiAKIAkvKgpAQCAtNDg2LDkgKzQ4Nyw4IEBACiAJICovCiAJYWdubyA9IHBhZ25vOwogCWZsYWdzID0gWEZTX0FMTE9DX0ZMQUdfVFJZTE9DSzsKLQlkb3duX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJZm9yICg7OykgewotCQlwYWcgPSAmbXAtPm1fcGVyYWdbYWdub107CisJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOwogCQlpZiAoIXBhZy0+cGFnaV9pbml0KSB7CiAJCQlpZiAoeGZzX2lhbGxvY19yZWFkX2FnaShtcCwgdHAsIGFnbm8sICZhZ2JwKSkgewogCQkJCWFnYnAgPSBOVUxMOwpAQCAtNTI3LDcgKzUyNyw3IEBACiAJCQkJCWFnYnAgPSBOVUxMOwogCQkJCQlnb3RvIG5leHRhZzsKIAkJCQl9Ci0JCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCQkJcmV0dXJuIGFnYnA7CiAJCQl9CiAJCX0KQEAgLTUzNSwyMiArNTM1LDE5IEBACiAJCWlmIChhZ2JwKQogCQkJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYWdicCk7CiBuZXh0YWc6CisJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJLyoKIAkJICogTm8gcG9pbnQgaW4gaXRlcmF0aW5nIG92ZXIgdGhlIHJlc3QsIGlmIHdlJ3JlIHNodXR0aW5nCiAJCSAqIGRvd24uCiAJCSAqLwotCQlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpIHsKLQkJCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKIAkJCXJldHVybiBOVUxMOwotCQl9CiAJCWFnbm8rKzsKIAkJaWYgKGFnbm8gPj0gYWdjb3VudCkKIAkJCWFnbm8gPSAwOwogCQlpZiAoYWdubyA9PSBwYWdubykgewotCQkJaWYgKGZsYWdzID09IDApIHsKLQkJCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQkJaWYgKGZsYWdzID09IDApCiAJCQkJcmV0dXJuIE5VTEw7Ci0JCQl9CiAJCQlmbGFncyA9IDA7CiAJCX0KIAl9CkBAIC02NzIsNiArNjY5LDcgQEAKIAl4ZnNfYWdudW1iZXJfdAl0YWdubzsJCS8qIHRlc3RpbmcgYWxsb2NhdGlvbiBncm91cCBudW1iZXIgKi8KIAl4ZnNfYnRyZWVfY3VyX3QJKnRjdXI7CQkvKiB0ZW1wIGN1cnNvciAqLwogCXhmc19pbm9idF9yZWNfaW5jb3JlX3QgdHJlYzsJLyogdGVtcCBpbm9kZSBhbGxvY2F0aW9uIHJlY29yZCAqLworCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKIAogCiAJaWYgKCpJT19hZ2JwID09IE5VTEwpIHsKQEAgLTc3MSwxMyArNzY5LDEzIEBACiAJCQkqaW5vcCA9IE5VTExGU0lOTzsKIAkJCXJldHVybiBub3Jvb20gPyBFTk9TUEMgOiAwOwogCQl9Ci0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKLQkJaWYgKG1wLT5tX3BlcmFnW3RhZ25vXS5wYWdpX2lub2Rlb2sgPT0gMCkgewotCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgdGFnbm8pOworCQlpZiAocGFnLT5wYWdpX2lub2Rlb2sgPT0gMCkgeworCQkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkJZ290byBuZXh0YWc7CiAJCX0KIAkJZXJyb3IgPSB4ZnNfaWFsbG9jX3JlYWRfYWdpKG1wLCB0cCwgdGFnbm8sICZhZ2JwKTsKLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG5leHRhZzsKIAkJYWdpID0gWEZTX0JVRl9UT19BR0koYWdicCk7CkBAIC03OTAsNiArNzg4LDcgQEAKIAkgKi8KIAlhZ25vID0gdGFnbm87CiAJKklPX2FnYnAgPSBOVUxMOworCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOwogCiAgcmVzdGFydF9wYWdubzoKIAljdXIgPSB4ZnNfaW5vYnRfaW5pdF9jdXJzb3IobXAsIHRwLCBhZ2JwLCBiZTMyX3RvX2NwdShhZ2ktPmFnaV9zZXFubykpOwpAQCAtODA4LDcgKzgwNyw2IEBACiAJICogSWYgaW4gdGhlIHNhbWUgQUcgYXMgdGhlIHBhcmVudCwgdHJ5IHRvIGdldCBuZWFyIHRoZSBwYXJlbnQuCiAJICovCiAJaWYgKHBhZ25vID09IGFnbm8pIHsKLQkJeGZzX3BlcmFnX3QJKnBhZyA9ICZtcC0+bV9wZXJhZ1thZ25vXTsKIAkJaW50CQlkb25lbGVmdDsJLyogZG9uZSwgdG8gdGhlIGxlZnQgKi8KIAkJaW50CQlkb25lcmlnaHQ7CS8qIGRvbmUsIHRvIHRoZSByaWdodCAqLwogCQlpbnQJCXNlYXJjaGRpc3RhbmNlID0gMTA7CkBAIC0xMDA2LDkgKzEwMDQsNyBAQAogCQlnb3RvIGVycm9yMDsKIAliZTMyX2FkZF9jcHUoJmFnaS0+YWdpX2ZyZWVjb3VudCwgLTEpOwogCXhmc19pYWxsb2NfbG9nX2FnaSh0cCwgYWdicCwgWEZTX0FHSV9GUkVFQ09VTlQpOwotCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKLQltcC0+bV9wZXJhZ1t0YWdub10ucGFnaV9mcmVlY291bnQtLTsKLQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCXBhZy0+cGFnaV9mcmVlY291bnQtLTsKIAogCWVycm9yID0geGZzX2NoZWNrX2FnaV9mcmVlY291bnQoY3VyLCBhZ2kpOwogCWlmIChlcnJvcikKQEAgLTEwMTYsMTIgKzEwMTIsMTQgQEAKIAogCXhmc19idHJlZV9kZWxfY3Vyc29yKGN1ciwgWEZTX0JUUkVFX05PRVJST1IpOwogCXhmc190cmFuc19tb2Rfc2IodHAsIFhGU19UUkFOU19TQl9JRlJFRSwgLTEpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAkqaW5vcCA9IGlubzsKIAlyZXR1cm4gMDsKIGVycm9yMToKIAl4ZnNfYnRyZWVfZGVsX2N1cnNvcih0Y3VyLCBYRlNfQlRSRUVfRVJST1IpOwogZXJyb3IwOgogCXhmc19idHJlZV9kZWxfY3Vyc29yKGN1ciwgWEZTX0JUUkVFX0VSUk9SKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0xMDUyLDYgKzEwNTAsNyBAQAogCXhmc19tb3VudF90CSptcDsJLyogbW91bnQgc3RydWN0dXJlIGZvciBmaWxlc3lzdGVtICovCiAJaW50CQlvZmY7CS8qIG9mZnNldCBvZiBpbm9kZSBpbiBpbm9kZSBjaHVuayAqLwogCXhmc19pbm9idF9yZWNfaW5jb3JlX3QgcmVjOwkvKiBidHJlZSByZWNvcmQgKi8KKwlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CiAKIAltcCA9IHRwLT50X21vdW50cDsKIApAQCAtMTA4OCw5ICsxMDg3LDcgQEAKIAkvKgogCSAqIEdldCB0aGUgYWxsb2NhdGlvbiBncm91cCBoZWFkZXIuCiAJICovCi0JZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCWVycm9yID0geGZzX2lhbGxvY19yZWFkX2FnaShtcCwgdHAsIGFnbm8sICZhZ2JwKTsKLQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCWlmIChlcnJvcikgewogCQljbW5fZXJyKENFX1dBUk4sCiAJCQkieGZzX2RpZnJlZTogeGZzX2lhbGxvY19yZWFkX2FnaSgpIHJldHVybmVkIGFuIGVycm9yICVkIG9uICVzLiAgUmV0dXJuaW5nIGVycm9yLiIsCkBAIC0xMTU3LDkgKzExNTQsOSBAQAogCQliZTMyX2FkZF9jcHUoJmFnaS0+YWdpX2NvdW50LCAtaWxlbik7CiAJCWJlMzJfYWRkX2NwdSgmYWdpLT5hZ2lfZnJlZWNvdW50LCAtKGlsZW4gLSAxKSk7CiAJCXhmc19pYWxsb2NfbG9nX2FnaSh0cCwgYWdicCwgWEZTX0FHSV9DT1VOVCB8IFhGU19BR0lfRlJFRUNPVU5UKTsKLQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwotCQltcC0+bV9wZXJhZ1thZ25vXS5wYWdpX2ZyZWVjb3VudCAtPSBpbGVuIC0gMTsKLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CisJCXBhZy0+cGFnaV9mcmVlY291bnQgLT0gaWxlbiAtIDE7CisJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJeGZzX3RyYW5zX21vZF9zYih0cCwgWEZTX1RSQU5TX1NCX0lDT1VOVCwgLWlsZW4pOwogCQl4ZnNfdHJhbnNfbW9kX3NiKHRwLCBYRlNfVFJBTlNfU0JfSUZSRUUsIC0oaWxlbiAtIDEpKTsKIApAQCAtMTE4OCw5ICsxMTg1LDkgQEAKIAkJICovCiAJCWJlMzJfYWRkX2NwdSgmYWdpLT5hZ2lfZnJlZWNvdW50LCAxKTsKIAkJeGZzX2lhbGxvY19sb2dfYWdpKHRwLCBhZ2JwLCBYRlNfQUdJX0ZSRUVDT1VOVCk7Ci0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKLQkJbXAtPm1fcGVyYWdbYWdub10ucGFnaV9mcmVlY291bnQrKzsKLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CisJCXBhZy0+cGFnaV9mcmVlY291bnQrKzsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQl4ZnNfdHJhbnNfbW9kX3NiKHRwLCBYRlNfVFJBTlNfU0JfSUZSRUUsIDEpOwogCX0KIApAQCAtMTMxMiw5ICsxMzA5LDcgQEAKIAkJeGZzX2J1Zl90CSphZ2JwOwkvKiBhZ2kgYnVmZmVyICovCiAJCWludAkJaTsJLyogdGVtcCBzdGF0ZSAqLwogCi0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJZXJyb3IgPSB4ZnNfaWFsbG9jX3JlYWRfYWdpKG1wLCB0cCwgYWdubywgJmFnYnApOwotCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCQlpZiAoZXJyb3IpIHsKIAkJCXhmc19mc19jbW5fZXJyKENFX0FMRVJULCBtcCwgInhmc19pbWFwOiAiCiAJCQkJCSJ4ZnNfaWFsbG9jX3JlYWRfYWdpKCkgcmV0dXJuZWQgIgpAQCAtMTM3OSw3ICsxMzc0LDYgQEAKIAkJCVhGU19GU0JfVE9fQkIobXAsIG1wLT5tX3NiLnNiX2RibG9ja3MpKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCX0KLQogCXJldHVybiAwOwogfQogCkBAIC0xNTIzLDggKzE1MTcsNyBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAlhZ2kgPSBYRlNfQlVGX1RPX0FHSSgqYnBwKTsKLQlwYWcgPSAmbXAtPm1fcGVyYWdbYWdub107Ci0KKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKIAlpZiAoIXBhZy0+cGFnaV9pbml0KSB7CiAJCXBhZy0+cGFnaV9mcmVlY291bnQgPSBiZTMyX3RvX2NwdShhZ2ktPmFnaV9mcmVlY291bnQpOwogCQlwYWctPnBhZ2lfY291bnQgPSBiZTMyX3RvX2NwdShhZ2ktPmFnaV9jb3VudCk7CkBAIC0xNTM3LDYgKzE1MzAsNyBAQAogCSAqLwogCUFTU0VSVChwYWctPnBhZ2lfZnJlZWNvdW50ID09IGJlMzJfdG9fY3B1KGFnaS0+YWdpX2ZyZWVjb3VudCkgfHwKIAkJWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pZ2V0LmMgYi9mcy94ZnMveGZzX2lnZXQuYwppbmRleCAxNTVlNzk4Li5lMjgxZWI0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lnZXQuYworKysgYi9mcy94ZnMveGZzX2lnZXQuYwpAQCAtMzc0LDcgKzM3NCw3IEBACiAJCXJldHVybiBFSU5WQUw7CiAKIAkvKiBnZXQgdGhlIHBlcmFnIHN0cnVjdHVyZSBhbmQgZW5zdXJlIHRoYXQgaXQncyBpbm9kZSBjYXBhYmxlICovCi0JcGFnID0geGZzX2dldF9wZXJhZyhtcCwgaW5vKTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBYRlNfSU5PX1RPX0FHTk8obXAsIGlubykpOwogCWlmICghcGFnLT5wYWdpX2lub2Rlb2spCiAJCXJldHVybiBFSU5WQUw7CiAJQVNTRVJUKHBhZy0+cGFnX2ljaV9pbml0KTsKQEAgLTM5OCw3ICszOTgsNyBAQAogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dF9lcnJvcl9vcl9hZ2FpbjsKIAl9Ci0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAKIAkqaXBwID0gaXA7CiAKQEAgLTQxNyw3ICs0MTcsNyBAQAogCQlkZWxheSgxKTsKIAkJZ290byBhZ2FpbjsKIAl9Ci0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC00ODgsMTIgKzQ4OCwxMiBAQAogCSAqIGFkZGVkIHRvIHRoZSB0cmVlIGFzc2VydCB0aGF0IGl0J3MgYmVlbiB0aGVyZSBiZWZvcmUgdG8gY2F0Y2gKIAkgKiBwcm9ibGVtcyB3aXRoIHRoZSBpbm9kZSBsaWZlIHRpbWUgZWFybHkgb24uCiAJICovCi0JcGFnID0geGZzX2dldF9wZXJhZyhtcCwgaXAtPmlfaW5vKTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBYRlNfSU5PX1RPX0FHTk8obXAsIGlwLT5pX2lubykpOwogCXdyaXRlX2xvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAlpZiAoIXJhZGl4X3RyZWVfZGVsZXRlKCZwYWctPnBhZ19pY2lfcm9vdCwgYWdpbm8pKQogCQlBU1NFUlQoMCk7CiAJd3JpdGVfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7Ci0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAKIAkvKgogCSAqIEhlcmUgd2UgZG8gYW4gKGFsbW9zdCkgc3B1cmlvdXMgaW5vZGUgbG9jayBpbiBvcmRlciB0byBjb29yZGluYXRlCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggZWY3N2ZkOC4uZmEzMTM2MCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJCQkJImFuIGVycm9yICVkIG9uICVzLiAgUmV0dXJuaW5nIGVycm9yLiIsCiAJCQkJZXJyb3IsIG1wLT5tX2ZzbmFtZSk7CiAJCX0gZWxzZSB7Ci0JCQlBU1NFUlQoYnVmX2ZsYWdzICYgWEZTX0JVRl9UUllMT0NLKTsKKwkJCUFTU0VSVChidWZfZmxhZ3MgJiBYQkZfVFJZTE9DSyk7CiAJCX0KIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTIzOSw3ICsyMzksNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JZXJyb3IgPSB4ZnNfaW1hcF90b19icChtcCwgdHAsICZpbWFwLCAmYnAsIFhGU19CVUZfTE9DSywgaW1hcF9mbGFncyk7CisJZXJyb3IgPSB4ZnNfaW1hcF90b19icChtcCwgdHAsICZpbWFwLCAmYnAsIFhCRl9MT0NLLCBpbWFwX2ZsYWdzKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtMjg1LDcgKzI4NSw3IEBACiAJCXJldHVybiBlcnJvcjsKIAogCWlmICghYnApIHsKLQkJQVNTRVJUKGJ1Zl9mbGFncyAmIFhGU19CVUZfVFJZTE9DSyk7CisJCUFTU0VSVChidWZfZmxhZ3MgJiBYQkZfVFJZTE9DSyk7CiAJCUFTU0VSVCh0cCA9PSBOVUxMKTsKIAkJKmJwcCA9IE5VTEw7CiAJCXJldHVybiBFQUdBSU47CkBAIC04MDcsNyArODA3LDcgQEAKIAkgKiBHZXQgcG9pbnRlcnMgdG8gdGhlIG9uLWRpc2sgaW5vZGUgYW5kIHRoZSBidWZmZXIgY29udGFpbmluZyBpdC4KIAkgKi8KIAllcnJvciA9IHhmc19pbWFwX3RvX2JwKG1wLCB0cCwgJmlwLT5pX2ltYXAsICZicCwKLQkJCSAgICAgICBYRlNfQlVGX0xPQ0ssIGlnZXRfZmxhZ3MpOworCQkJICAgICAgIFhCRl9MT0NLLCBpZ2V0X2ZsYWdzKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAlkaXAgPSAoeGZzX2Rpbm9kZV90ICopeGZzX2J1Zl9vZmZzZXQoYnAsIGlwLT5pX2ltYXAuaW1fYm9mZnNldCk7CkBAIC0xNzUxLDcgKzE3NTEsNyBAQAogCQkgKiBIZXJlIHdlIHB1dCB0aGUgaGVhZCBwb2ludGVyIGludG8gb3VyIG5leHQgcG9pbnRlciwKIAkJICogYW5kIHRoZW4gd2UgZmFsbCB0aHJvdWdoIHRvIHBvaW50IHRoZSBoZWFkIGF0IHVzLgogCQkgKi8KLQkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEZTX0JVRl9MT0NLKTsKKwkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEJGX0xPQ0spOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTE4MzMsNyArMTgzMyw3IEBACiAJCSAqIG9mIGRlYWxpbmcgd2l0aCB0aGUgYnVmZmVyIHdoZW4gdGhlcmUgaXMgbm8gbmVlZCB0bwogCQkgKiBjaGFuZ2UgaXQuCiAJCSAqLwotCQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmaWJwLCBYRlNfQlVGX0xPQ0spOworCQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmaWJwLCBYQkZfTE9DSyk7CiAJCWlmIChlcnJvcikgewogCQkJY21uX2VycihDRV9XQVJOLAogCQkJCSJ4ZnNfaXVubGlua19yZW1vdmU6IHhmc19pdG9icCgpICByZXR1cm5lZCBhbiBlcnJvciAlZCBvbiAlcy4gIFJldHVybmluZyBlcnJvci4iLApAQCAtMTg5NSw3ICsxODk1LDcgQEAKIAkJICogTm93IGxhc3RfaWJwIHBvaW50cyB0byB0aGUgYnVmZmVyIHByZXZpb3VzIHRvIHVzIG9uCiAJCSAqIHRoZSB1bmxpbmtlZCBsaXN0LiAgUHVsbCB1cyBmcm9tIHRoZSBsaXN0LgogCQkgKi8KLQkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEZTX0JVRl9MT0NLKTsKKwkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEJGX0xPQ0spOwogCQlpZiAoZXJyb3IpIHsKIAkJCWNtbl9lcnIoQ0VfV0FSTiwKIAkJCQkieGZzX2l1bmxpbmtfcmVtb3ZlOiB4ZnNfaXRvYnAoKSAgcmV0dXJuZWQgYW4gZXJyb3IgJWQgb24gJXMuICBSZXR1cm5pbmcgZXJyb3IuIiwKQEAgLTE5NDYsOCArMTk0Niw5IEBACiAJeGZzX2lub2RlX3QJCSppcCwgKippcF9mb3VuZDsKIAl4ZnNfaW5vZGVfbG9nX2l0ZW1fdAkqaWlwOwogCXhmc19sb2dfaXRlbV90CQkqbGlwOwotCXhmc19wZXJhZ190CQkqcGFnID0geGZzX2dldF9wZXJhZyhtcCwgaW51bSk7CisJc3RydWN0IHhmc19wZXJhZwkqcGFnOwogCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgWEZTX0lOT19UT19BR05PKG1wLCBpbnVtKSk7CiAJaWYgKG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSA+PSBYRlNfSU5PREVfQ0xVU1RFUl9TSVpFKG1wKSkgewogCQlibGtzX3Blcl9jbHVzdGVyID0gMTsKIAkJbmlub2RlcyA9IG1wLT5tX3NiLnNiX2lub3BibG9jazsKQEAgLTIwMzksNyArMjA0MCw3IEBACiAKIAkJYnAgPSB4ZnNfdHJhbnNfZ2V0X2J1Zih0cCwgbXAtPm1fZGRldl90YXJncCwgYmxrbm8sIAogCQkJCQltcC0+bV9ic2l6ZSAqIGJsa3NfcGVyX2NsdXN0ZXIsCi0JCQkJCVhGU19CVUZfTE9DSyk7CisJCQkJCVhCRl9MT0NLKTsKIAogCQlwcmVfZmx1c2hlZCA9IDA7CiAJCWxpcCA9IFhGU19CVUZfRlNQUklWQVRFKGJwLCB4ZnNfbG9nX2l0ZW1fdCAqKTsKQEAgLTIwODgsNyArMjA4OSw3IEBACiAJfQogCiAJa21lbV9mcmVlKGlwX2ZvdW5kKTsKLQl4ZnNfcHV0X3BlcmFnKG1wLCBwYWcpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIH0KIAogLyoKQEAgLTIxNTAsNyArMjE1MSw3IEBACiAKIAl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CiAKLQllcnJvciA9IHhmc19pdG9icChpcC0+aV9tb3VudCwgdHAsIGlwLCAmZGlwLCAmaWJwLCBYRlNfQlVGX0xPQ0spOworCWVycm9yID0geGZzX2l0b2JwKGlwLT5pX21vdW50LCB0cCwgaXAsICZkaXAsICZpYnAsIFhCRl9MT0NLKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtMjQ4MywxMyArMjQ4NCwxNiBAQAogCQlyZXR1cm47CiAKIAkvKiBHaXZlIHRoZSBsb2cgYSBwdXNoIHRvIHN0YXJ0IHRoZSB1bnBpbm5pbmcgSS9PICovCi0JeGZzX2xvZ19mb3JjZShpcC0+aV9tb3VudCwgKGlpcCAmJiBpaXAtPmlsaV9sYXN0X2xzbikgPwotCQkJCWlpcC0+aWxpX2xhc3RfbHNuIDogMCwgWEZTX0xPR19GT1JDRSk7CisJaWYgKGlpcCAmJiBpaXAtPmlsaV9sYXN0X2xzbikKKwkJeGZzX2xvZ19mb3JjZV9sc24oaXAtPmlfbW91bnQsIGlpcC0+aWxpX2xhc3RfbHNuLCAwKTsKKwllbHNlCisJCXhmc19sb2dfZm9yY2UoaXAtPmlfbW91bnQsIDApOworCiAJaWYgKHdhaXQpCiAJCXdhaXRfZXZlbnQoaXAtPmlfaXBpbl93YWl0LCAoYXRvbWljX3JlYWQoJmlwLT5pX3BpbmNvdW50KSA9PSAwKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAordm9pZAogeGZzX2l1bnBpbl93YWl0KAogCXhmc19pbm9kZV90CSppcCkKIHsKQEAgLTI2NzUsNyArMjY3OSw3IEBACiAJeGZzX2J1Zl90CSpicCkKIHsKIAl4ZnNfbW91bnRfdAkJKm1wID0gaXAtPmlfbW91bnQ7Ci0JeGZzX3BlcmFnX3QJCSpwYWcgPSB4ZnNfZ2V0X3BlcmFnKG1wLCBpcC0+aV9pbm8pOworCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZzsKIAl1bnNpZ25lZCBsb25nCQlmaXJzdF9pbmRleCwgbWFzazsKIAl1bnNpZ25lZCBsb25nCQlpbm9kZXNfcGVyX2NsdXN0ZXI7CiAJaW50CQkJaWxpc3Rfc2l6ZTsKQEAgLTI2ODYsNiArMjY5MCw3IEBACiAJaW50CQkJYnVmd2FzZGVsd3JpOwogCWludAkJCWk7CiAKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBYRlNfSU5PX1RPX0FHTk8obXAsIGlwLT5pX2lubykpOwogCUFTU0VSVChwYWctPnBhZ2lfaW5vZGVvayk7CiAJQVNTRVJUKHBhZy0+cGFnX2ljaV9pbml0KTsKIApAQCAtMjY5Myw3ICsyNjk4LDcgQEAKIAlpbGlzdF9zaXplID0gaW5vZGVzX3Blcl9jbHVzdGVyICogc2l6ZW9mKHhmc19pbm9kZV90ICopOwogCWlsaXN0ID0ga21lbV9hbGxvYyhpbGlzdF9zaXplLCBLTV9NQVlGQUlMfEtNX05PRlMpOwogCWlmICghaWxpc3QpCi0JCXJldHVybiAwOworCQlnb3RvIG91dF9wdXQ7CiAKIAltYXNrID0gfigoKFhGU19JTk9ERV9DTFVTVEVSX1NJWkUobXApID4+IG1wLT5tX3NiLnNiX2lub2RlbG9nKSkgLSAxKTsKIAlmaXJzdF9pbmRleCA9IFhGU19JTk9fVE9fQUdJTk8obXAsIGlwLT5pX2lubykgJiBtYXNrOwpAQCAtMjc2Miw2ICsyNzY3LDggQEAKIG91dF9mcmVlOgogCXJlYWRfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CiAJa21lbV9mcmVlKGlsaXN0KTsKK291dF9wdXQ6CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCXJldHVybiAwOwogCiAKQEAgLTI4MDUsNiArMjgxMiw3IEBACiAJICovCiAJeGZzX2lmbHVzaF9hYm9ydChpcSk7CiAJa21lbV9mcmVlKGlsaXN0KTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwogfQogCkBAIC0yODI3LDggKzI4MzUsNiBAQAogCXhmc19kaW5vZGVfdAkJKmRpcDsKIAl4ZnNfbW91bnRfdAkJKm1wOwogCWludAkJCWVycm9yOwotCWludAkJCW5vYmxvY2sgPSAoZmxhZ3MgPT0gWEZTX0lGTFVTSF9BU1lOQ19OT0JMT0NLKTsKLQllbnVtIHsgSU5UX0RFTFdSSSA9ICgxIDw8IDApLCBJTlRfQVNZTkMgPSAoMSA8PCAxKSB9OwogCiAJWEZTX1NUQVRTX0lOQyh4c19pZmx1c2hfY291bnQpOwogCkBAIC0yODQxLDE1ICsyODQ3LDYgQEAKIAltcCA9IGlwLT5pX21vdW50OwogCiAJLyoKLQkgKiBJZiB0aGUgaW5vZGUgaXNuJ3QgZGlydHksIHRoZW4ganVzdCByZWxlYXNlIHRoZSBpbm9kZSBmbHVzaCBsb2NrIGFuZAotCSAqIGRvIG5vdGhpbmcuCi0JICovCi0JaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpIHsKLQkJeGZzX2lmdW5sb2NrKGlwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKIAkgKiBXZSBjYW4ndCBmbHVzaCB0aGUgaW5vZGUgdW50aWwgaXQgaXMgdW5waW5uZWQsIHNvIHdhaXQgZm9yIGl0IGlmIHdlCiAJICogYXJlIGFsbG93ZWQgdG8gYmxvY2suICBXZSBrbm93IG5vb25lIG5ldyBjYW4gcGluIGl0LCBiZWNhdXNlIHdlIGFyZQogCSAqIGhvbGRpbmcgdGhlIGlub2RlIGxvY2sgc2hhcmVkIGFuZCB5b3UgbmVlZCB0byBob2xkIGl0IGV4Y2x1c2l2ZWx5IHRvCkBAIC0yODYwLDcgKzI4NTcsNyBAQAogCSAqIGluIHRoZSBzYW1lIGNsdXN0ZXIgYXJlIGRpcnR5LCB0aGV5IHdpbGwgcHJvYmFibHkgd3JpdGUgdGhlIGlub2RlCiAJICogb3V0IGZvciB1cyBpZiB0aGV5IG9jY3VyIGFmdGVyIHRoZSBsb2cgZm9yY2UgY29tcGxldGVzLgogCSAqLwotCWlmIChub2Jsb2NrICYmIHhmc19pcGluY291bnQoaXApKSB7CisJaWYgKCEoZmxhZ3MgJiBTWU5DX1dBSVQpICYmIHhmc19pcGluY291bnQoaXApKSB7CiAJCXhmc19pdW5waW5fbm93YWl0KGlwKTsKIAkJeGZzX2lmdW5sb2NrKGlwKTsKIAkJcmV0dXJuIEVBR0FJTjsKQEAgLTI4OTQsNjAgKzI4OTEsMTAgQEAKIAl9CiAKIAkvKgotCSAqIERlY2lkZSBob3cgYnVmZmVyIHdpbGwgYmUgZmx1c2hlZCBvdXQuICBUaGlzIGlzIGRvbmUgYmVmb3JlCi0JICogdGhlIGNhbGwgdG8geGZzX2lmbHVzaF9pbnQgYmVjYXVzZSB0aGlzIGZpZWxkIGlzIHplcm9lZCBieSBpdC4KLQkgKi8KLQlpZiAoaWlwICE9IE5VTEwgJiYgaWlwLT5pbGlfZm9ybWF0LmlsZl9maWVsZHMgIT0gMCkgewotCQkvKgotCQkgKiBGbHVzaCBvdXQgdGhlIGlub2RlIGJ1ZmZlciBhY2NvcmRpbmcgdG8gdGhlIGRpcmVjdGlvbnMKLQkJICogb2YgdGhlIGNhbGxlci4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGUgY2FsbGVyIGhhcyBnaXZlbgotCQkgKiB1cyBhIGNob2ljZSBjaG9vc2UgdGhlIG5vbi1kZWx3cmkgY2FzZS4gIFRoaXMgaXMgYmVjYXVzZQotCQkgKiB0aGUgaW5vZGUgaXMgaW4gdGhlIEFJTCBhbmQgd2UgbmVlZCB0byBnZXQgaXQgb3V0IHNvb24uCi0JCSAqLwotCQlzd2l0Y2ggKGZsYWdzKSB7Ci0JCWNhc2UgWEZTX0lGTFVTSF9TWU5DOgotCQljYXNlIFhGU19JRkxVU0hfREVMV1JJX0VMU0VfU1lOQzoKLQkJCWZsYWdzID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIFhGU19JRkxVU0hfQVNZTkNfTk9CTE9DSzoKLQkJY2FzZSBYRlNfSUZMVVNIX0FTWU5DOgotCQljYXNlIFhGU19JRkxVU0hfREVMV1JJX0VMU0VfQVNZTkM6Ci0JCQlmbGFncyA9IElOVF9BU1lOQzsKLQkJCWJyZWFrOwotCQljYXNlIFhGU19JRkxVU0hfREVMV1JJOgotCQkJZmxhZ3MgPSBJTlRfREVMV1JJOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlBU1NFUlQoMCk7Ci0JCQlmbGFncyA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCXN3aXRjaCAoZmxhZ3MpIHsKLQkJY2FzZSBYRlNfSUZMVVNIX0RFTFdSSV9FTFNFX1NZTkM6Ci0JCWNhc2UgWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9BU1lOQzoKLQkJY2FzZSBYRlNfSUZMVVNIX0RFTFdSSToKLQkJCWZsYWdzID0gSU5UX0RFTFdSSTsKLQkJCWJyZWFrOwotCQljYXNlIFhGU19JRkxVU0hfQVNZTkNfTk9CTE9DSzoKLQkJY2FzZSBYRlNfSUZMVVNIX0FTWU5DOgotCQkJZmxhZ3MgPSBJTlRfQVNZTkM7Ci0JCQlicmVhazsKLQkJY2FzZSBYRlNfSUZMVVNIX1NZTkM6Ci0JCQlmbGFncyA9IDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCUFTU0VSVCgwKTsKLQkJCWZsYWdzID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyoKIAkgKiBHZXQgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBvbi1kaXNrIGlub2RlLgogCSAqLwogCWVycm9yID0geGZzX2l0b2JwKG1wLCBOVUxMLCBpcCwgJmRpcCwgJmJwLAotCQkJCW5vYmxvY2sgPyBYRlNfQlVGX1RSWUxPQ0sgOiBYRlNfQlVGX0xPQ0spOworCQkJCShmbGFncyAmIFNZTkNfV0FJVCkgPyBYQkZfTE9DSyA6IFhCRl9UUllMT0NLKTsKIAlpZiAoZXJyb3IgfHwgIWJwKSB7CiAJCXhmc19pZnVubG9jayhpcCk7CiAJCXJldHVybiBlcnJvcjsKQEAgLTI5NjUsNyArMjkxMiw3IEBACiAJICogZ2V0IHN0dWNrIHdhaXRpbmcgaW4gdGhlIHdyaXRlIGZvciB0b28gbG9uZy4KIAkgKi8KIAlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpCi0JCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSk7CisJCXhmc19sb2dfZm9yY2UobXAsIDApOwogCiAJLyoKIAkgKiBpbm9kZSBjbHVzdGVyaW5nOgpAQCAtMjk3NSwxMyArMjkyMiwxMCBAQAogCWlmIChlcnJvcikKIAkJZ290byBjbHVzdGVyX2NvcnJ1cHRfb3V0OwogCi0JaWYgKGZsYWdzICYgSU5UX0RFTFdSSSkgewotCQl4ZnNfYmR3cml0ZShtcCwgYnApOwotCX0gZWxzZSBpZiAoZmxhZ3MgJiBJTlRfQVNZTkMpIHsKLQkJZXJyb3IgPSB4ZnNfYmF3cml0ZShtcCwgYnApOwotCX0gZWxzZSB7CisJaWYgKGZsYWdzICYgU1lOQ19XQUlUKQogCQllcnJvciA9IHhmc19id3JpdGUobXAsIGJwKTsKLQl9CisJZWxzZQorCQl4ZnNfYmR3cml0ZShtcCwgYnApOwogCXJldHVybiBlcnJvcjsKIAogY29ycnVwdF9vdXQ6CkBAIC0zMDE2LDE2ICsyOTYwLDYgQEAKIAlpaXAgPSBpcC0+aV9pdGVtcDsKIAltcCA9IGlwLT5pX21vdW50OwogCi0KLQkvKgotCSAqIElmIHRoZSBpbm9kZSBpc24ndCBkaXJ0eSwgdGhlbiBqdXN0IHJlbGVhc2UgdGhlIGlub2RlCi0JICogZmx1c2ggbG9jayBhbmQgZG8gbm90aGluZy4KLQkgKi8KLQlpZiAoeGZzX2lub2RlX2NsZWFuKGlwKSkgewotCQl4ZnNfaWZ1bmxvY2soaXApOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAkvKiBzZXQgKmRpcCA9IGlub2RlJ3MgcGxhY2UgaW4gdGhlIGJ1ZmZlciAqLwogCWRpcCA9ICh4ZnNfZGlub2RlX3QgKil4ZnNfYnVmX29mZnNldChicCwgaXAtPmlfaW1hcC5pbV9ib2Zmc2V0KTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oCmluZGV4IGVjMWYyOGMuLjZjOTEyYjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaAorKysgYi9mcy94ZnMveGZzX2lub2RlLmgKQEAgLTQyMCwxNiArNDIwLDYgQEAKICNkZWZpbmUgWEZTX0lMT0NLX0RFUChmbGFncykJKCgoZmxhZ3MpICYgWEZTX0lMT0NLX0RFUF9NQVNLKSA+PiBYRlNfSUxPQ0tfU0hJRlQpCiAKIC8qCi0gKiBGbGFncyBmb3IgeGZzX2lmbHVzaCgpCi0gKi8KLSNkZWZpbmUJWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9TWU5DCTEKLSNkZWZpbmUJWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9BU1lOQwkyCi0jZGVmaW5lCVhGU19JRkxVU0hfU1lOQwkJCTMKLSNkZWZpbmUJWEZTX0lGTFVTSF9BU1lOQwkJNAotI2RlZmluZQlYRlNfSUZMVVNIX0RFTFdSSQkJNQotI2RlZmluZQlYRlNfSUZMVVNIX0FTWU5DX05PQkxPQ0sJNgotCi0vKgogICogRmxhZ3MgZm9yIHhmc19pdHJ1bmNhdGVfc3RhcnQoKS4KICAqLwogI2RlZmluZQlYRlNfSVRSVU5DX0RFRklOSVRFCTB4MQpAQCAtNDgzLDYgKzQ3Myw3IEBACiB2b2lkCQl4ZnNfaWV4dF9yZWFsbG9jKHhmc19pbm9kZV90ICosIGludCwgaW50KTsKIHZvaWQJCXhmc19pcGluKHhmc19pbm9kZV90ICopOwogdm9pZAkJeGZzX2l1bnBpbih4ZnNfaW5vZGVfdCAqKTsKK3ZvaWQJCXhmc19pdW5waW5fd2FpdCh4ZnNfaW5vZGVfdCAqKTsKIGludAkJeGZzX2lmbHVzaCh4ZnNfaW5vZGVfdCAqLCB1aW50KTsKIHZvaWQJCXhmc19pY2hndGltZSh4ZnNfaW5vZGVfdCAqLCBpbnQpOwogdm9pZAkJeGZzX2xvY2tfaW5vZGVzKHhmc19pbm9kZV90ICoqLCBpbnQsIHVpbnQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMgYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYwppbmRleCBmMzg4NTVkLi5kNGRjMDYzIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAKIAl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpJmlpcC0+aWxpX2Zvcm1hdDsKIAl2ZWNwLT5pX2xlbiAgPSBzaXplb2YoeGZzX2lub2RlX2xvZ19mb3JtYXRfdCk7Ci0JWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JRk9STUFUKTsKKwl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lGT1JNQVQ7CiAJdmVjcCsrOwogCW52ZWNzCSAgICAgPSAxOwogCkBAIC0yNzksNyArMjc5LDcgQEAKIAogCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmaXAtPmlfZDsKIAl2ZWNwLT5pX2xlbiAgPSBzaXplb2Yoc3RydWN0IHhmc19pY2Rpbm9kZSk7Ci0JWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JQ09SRSk7CisJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JQ09SRTsKIAl2ZWNwKys7CiAJbnZlY3MrKzsKIAlpaXAtPmlsaV9mb3JtYXQuaWxmX2ZpZWxkcyB8PSBYRlNfSUxPR19DT1JFOwpAQCAtMzM2LDcgKzMzNiw3IEBACiAJCQkJdmVjcC0+aV9hZGRyID0KIAkJCQkJKGNoYXIgKikoaXAtPmlfZGYuaWZfdTEuaWZfZXh0ZW50cyk7CiAJCQkJdmVjcC0+aV9sZW4gPSBpcC0+aV9kZi5pZl9ieXRlczsKLQkJCQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0lFWFQpOworCQkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUVYVDsKIAkJCX0gZWxzZQogI2VuZGlmCiAJCQl7CkBAIC0zNTUsNyArMzU1LDcgQEAKIAkJCQl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpZXh0X2J1ZmZlcjsKIAkJCQl2ZWNwLT5pX2xlbiA9IHhmc19pZXh0ZW50c19jb3B5KGlwLCBleHRfYnVmZmVyLAogCQkJCQkJWEZTX0RBVEFfRk9SSyk7Ci0JCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JRVhUKTsKKwkJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lFWFQ7CiAJCQl9CiAJCQlBU1NFUlQodmVjcC0+aV9sZW4gPD0gaXAtPmlfZGYuaWZfYnl0ZXMpOwogCQkJaWlwLT5pbGlfZm9ybWF0LmlsZl9kc2l6ZSA9IHZlY3AtPmlfbGVuOwpAQCAtMzczLDcgKzM3Myw3IEBACiAJCQlBU1NFUlQoaXAtPmlfZGYuaWZfYnJvb3QgIT0gTlVMTCk7CiAJCQl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpaXAtPmlfZGYuaWZfYnJvb3Q7CiAJCQl2ZWNwLT5pX2xlbiA9IGlwLT5pX2RmLmlmX2Jyb290X2J5dGVzOwotCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JQlJPT1QpOworCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JQlJPT1Q7CiAJCQl2ZWNwKys7CiAJCQludmVjcysrOwogCQkJaWlwLT5pbGlfZm9ybWF0LmlsZl9kc2l6ZSA9IGlwLT5pX2RmLmlmX2Jyb290X2J5dGVzOwpAQCAtMzk5LDcgKzM5OSw3IEBACiAJCQlBU1NFUlQoKGlwLT5pX2RmLmlmX3JlYWxfYnl0ZXMgPT0gMCkgfHwKIAkJCSAgICAgICAoaXAtPmlfZGYuaWZfcmVhbF9ieXRlcyA9PSBkYXRhX2J5dGVzKSk7CiAJCQl2ZWNwLT5pX2xlbiA9IChpbnQpZGF0YV9ieXRlczsKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfSUxPQ0FMKTsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUxPQ0FMOwogCQkJdmVjcCsrOwogCQkJbnZlY3MrKzsKIAkJCWlpcC0+aWxpX2Zvcm1hdC5pbGZfZHNpemUgPSAodW5zaWduZWQpZGF0YV9ieXRlczsKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogCQkJdmVjcC0+aV9sZW4gPSB4ZnNfaWV4dGVudHNfY29weShpcCwgZXh0X2J1ZmZlciwKIAkJCQkJWEZTX0FUVFJfRk9SSyk7CiAjZW5kaWYKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfSUFUVFJfRVhUKTsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUFUVFJfRVhUOwogCQkJaWlwLT5pbGlfZm9ybWF0LmlsZl9hc2l6ZSA9IHZlY3AtPmlfbGVuOwogCQkJdmVjcCsrOwogCQkJbnZlY3MrKzsKQEAgLTQ5Miw3ICs0OTIsNyBAQAogCQkJQVNTRVJUKGlwLT5pX2FmcC0+aWZfYnJvb3QgIT0gTlVMTCk7CiAJCQl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpaXAtPmlfYWZwLT5pZl9icm9vdDsKIAkJCXZlY3AtPmlfbGVuID0gaXAtPmlfYWZwLT5pZl9icm9vdF9ieXRlczsKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfSUFUVFJfQlJPT1QpOworCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JQVRUUl9CUk9PVDsKIAkJCXZlY3ArKzsKIAkJCW52ZWNzKys7CiAJCQlpaXAtPmlsaV9mb3JtYXQuaWxmX2FzaXplID0gaXAtPmlfYWZwLT5pZl9icm9vdF9ieXRlczsKQEAgLTUxNiw3ICs1MTYsNyBAQAogCQkJQVNTRVJUKChpcC0+aV9hZnAtPmlmX3JlYWxfYnl0ZXMgPT0gMCkgfHwKIAkJCSAgICAgICAoaXAtPmlfYWZwLT5pZl9yZWFsX2J5dGVzID09IGRhdGFfYnl0ZXMpKTsKIAkJCXZlY3AtPmlfbGVuID0gKGludClkYXRhX2J5dGVzOwotCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JQVRUUl9MT0NBTCk7CisJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lBVFRSX0xPQ0FMOwogCQkJdmVjcCsrOwogCQkJbnZlY3MrKzsKIAkJCWlpcC0+aWxpX2Zvcm1hdC5pbGZfYXNpemUgPSAodW5zaWduZWQpZGF0YV9ieXRlczsKQEAgLTYwMiwzMyArNjAyLDIwIEBACiAKIAlpZiAoIXhmc19pZmxvY2tfbm93YWl0KGlwKSkgewogCQkvKgotCQkgKiBJZiBzb21lb25lIGVsc2UgaXNuJ3QgYWxyZWFkeSB0cnlpbmcgdG8gcHVzaCB0aGUgaW5vZGUKLQkJICogYnVmZmVyLCB3ZSBnZXQgdG8gZG8gaXQuCisJCSAqIGlub2RlIGhhcyBhbHJlYWR5IGJlZW4gZmx1c2hlZCB0byB0aGUgYmFja2luZyBidWZmZXIsCisJCSAqIGxlYXZlIGl0IGxvY2tlZCBpbiBzaGFyZWQgbW9kZSwgcHVzaGJ1ZiByb3V0aW5lIHdpbGwKKwkJICogdW5sb2NrIGl0LgogCQkgKi8KLQkJaWYgKGlpcC0+aWxpX3B1c2hidWZfZmxhZyA9PSAwKSB7Ci0JCQlpaXAtPmlsaV9wdXNoYnVmX2ZsYWcgPSAxOwotI2lmZGVmIERFQlVHCi0JCQlpaXAtPmlsaV9wdXNoX293bmVyID0gY3VycmVudF9waWQoKTsKLSNlbmRpZgotCQkJLyoKLQkJCSAqIElub2RlIGlzIGxlZnQgbG9ja2VkIGluIHNoYXJlZCBtb2RlLgotCQkJICogUHVzaGJ1ZiByb3V0aW5lIGdldHMgdG8gdW5sb2NrIGl0LgotCQkJICovCi0JCQlyZXR1cm4gWEZTX0lURU1fUFVTSEJVRjsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBXZSBob2xkIHRoZSBBSUwgbG9jaywgc28gd2UgbXVzdCBzcGVjaWZ5IHRoZQotCQkJICogTk9OT1RJRlkgZmxhZyBzbyB0aGF0IHdlIHdvbid0IGRvdWJsZSB0cmlwLgotCQkJICovCi0JCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRHxYRlNfSVVOTE9DS19OT05PVElGWSk7Ci0JCQlyZXR1cm4gWEZTX0lURU1fRkxVU0hJTkc7Ci0JCX0KLQkJLyogTk9UUkVBQ0hFRCAqLworCQlyZXR1cm4gWEZTX0lURU1fUFVTSEJVRjsKIAl9CiAKIAkvKiBTdGFsZSBpdGVtcyBzaG91bGQgZm9yY2Ugb3V0IHRoZSBpY2xvZyAqLwogCWlmIChpcC0+aV9mbGFncyAmIFhGU19JU1RBTEUpIHsKIAkJeGZzX2lmdW5sb2NrKGlwKTsKKwkJLyoKKwkJICogd2UgaG9sZCB0aGUgQUlMIGxvY2sgLSBub3RpZnkgdGhlIHVubG9jayByb3V0aW5lIG9mIHRoaXMKKwkJICogc28gaXQgZG9lc24ndCB0cnkgdG8gZ2V0IHRoZSBsb2NrIGFnYWluLgorCQkgKi8KIAkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUR8WEZTX0lVTkxPQ0tfTk9OT1RJRlkpOwogCQlyZXR1cm4gWEZTX0lURU1fUElOTkVEOwogCX0KQEAgLTc0NiwxMSArNzMzLDggQEAKICAqIFRoaXMgZ2V0cyBjYWxsZWQgYnkgeGZzX3RyYW5zX3B1c2hfYWlsKCksIHdoZW4gSU9QX1RSWUxPQ0sKICAqIGZhaWxlZCB0byBnZXQgdGhlIGlub2RlIGZsdXNoIGxvY2sgYnV0IGRpZCBnZXQgdGhlIGlub2RlIGxvY2tlZCBTSEFSRUQuCiAgKiBIZXJlIHdlJ3JlIHRyeWluZyB0byBzZWUgaWYgdGhlIGlub2RlIGJ1ZmZlciBpcyBpbmNvcmUsIGFuZCBpZiBzbyB3aGV0aGVyIGl0J3MKLSAqIG1hcmtlZCBkZWxheWVkIHdyaXRlLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHdlJ2xsIGluaXRpYXRlIGEgYmF3cml0ZSBvbiB0aGF0Ci0gKiBidWZmZXIgdG8gZXhwZWRpdGUgdGhlIHByb2Nlc3MuCi0gKgotICogV2UgYXJlbid0IGhvbGRpbmcgdGhlIEFJTCBsb2NrIChvciB0aGUgZmx1c2ggbG9jaykgd2hlbiB0aGlzIGdldHMgY2FsbGVkLAotICogc28gaXQgaXMgaW5oZXJlbnRseSByYWNlLXkuCisgKiBtYXJrZWQgZGVsYXllZCB3cml0ZS4gSWYgdGhhdCdzIHRoZSBjYXNlLCB3ZSdsbCBwcm9tb3RlIGl0IGFuZCB0aGF0IHdpbGwKKyAqIGFsbG93IHRoZSBjYWxsZXIgdG8gd3JpdGUgdGhlIGJ1ZmZlciBieSB0cmlnZ2VyaW5nIHRoZSB4ZnNidWZkIHRvIHJ1bi4KICAqLwogU1RBVElDIHZvaWQKIHhmc19pbm9kZV9pdGVtX3B1c2hidWYoCkBAIC03NTksODIgKzc0MywzMCBAQAogCXhmc19pbm9kZV90CSppcDsKIAl4ZnNfbW91bnRfdAkqbXA7CiAJeGZzX2J1Zl90CSpicDsKLQl1aW50CQlkb3B1c2g7CiAKIAlpcCA9IGlpcC0+aWxpX2lub2RlOwotCiAJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19TSEFSRUQpKTsKIAogCS8qCi0JICogVGhlIGlsaV9wdXNoYnVmX2ZsYWcga2VlcHMgb3RoZXJzIGZyb20KLQkgKiB0cnlpbmcgdG8gZHVwbGljYXRlIG91ciBlZmZvcnQuCi0JICovCi0JQVNTRVJUKGlpcC0+aWxpX3B1c2hidWZfZmxhZyAhPSAwKTsKLQlBU1NFUlQoaWlwLT5pbGlfcHVzaF9vd25lciA9PSBjdXJyZW50X3BpZCgpKTsKLQotCS8qCiAJICogSWYgYSBmbHVzaCBpcyBub3QgaW4gcHJvZ3Jlc3MgYW55bW9yZSwgY2hhbmNlcyBhcmUgdGhhdCB0aGUKIAkgKiBpbm9kZSB3YXMgdGFrZW4gb2ZmIHRoZSBBSUwuIFNvLCBqdXN0IGdldCBvdXQuCiAJICovCiAJaWYgKGNvbXBsZXRpb25fZG9uZSgmaXAtPmlfZmx1c2gpIHx8CiAJICAgICgoaWlwLT5pbGlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpID09IDApKSB7Ci0JCWlpcC0+aWxpX3B1c2hidWZfZmxhZyA9IDA7CiAJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKIAkJcmV0dXJuOwogCX0KIAogCW1wID0gaXAtPmlfbW91bnQ7CiAJYnAgPSB4ZnNfaW5jb3JlKG1wLT5tX2RkZXZfdGFyZ3AsIGlpcC0+aWxpX2Zvcm1hdC5pbGZfYmxrbm8sCi0JCSAgICBpaXAtPmlsaV9mb3JtYXQuaWxmX2xlbiwgWEZTX0lOQ09SRV9UUllMT0NLKTsKKwkJICAgIGlpcC0+aWxpX2Zvcm1hdC5pbGZfbGVuLCBYQkZfVFJZTE9DSyk7CiAKLQlpZiAoYnAgIT0gTlVMTCkgewotCQlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKSB7Ci0JCQkvKgotCQkJICogV2Ugd2VyZSByYWNpbmcgd2l0aCBpZmx1c2ggYmVjYXVzZSB3ZSBkb24ndCBob2xkCi0JCQkgKiB0aGUgQUlMIGxvY2sgb3IgdGhlIGZsdXNoIGxvY2suIEhvd2V2ZXIsIGF0IHRoaXMgcG9pbnQsCi0JCQkgKiB3ZSBoYXZlIHRoZSBidWZmZXIsIGFuZCB3ZSBrbm93IHRoYXQgaXQncyBkaXJ0eS4KLQkJCSAqIFNvLCBpdCdzIHBvc3NpYmxlIHRoYXQgaWZsdXNoIHJhY2VkIHdpdGggdXMsIGFuZAotCQkJICogdGhpcyBpdGVtIGlzIGFscmVhZHkgdGFrZW4gb2ZmIHRoZSBBSUwuCi0JCQkgKiBJZiBub3QsIHdlIGNhbiBmbHVzaCBpdCBhc3luYy4KLQkJCSAqLwotCQkJZG9wdXNoID0gKChpaXAtPmlsaV9pdGVtLmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgJiYKLQkJCQkgICFjb21wbGV0aW9uX2RvbmUoJmlwLT5pX2ZsdXNoKSk7Ci0JCQlpaXAtPmlsaV9wdXNoYnVmX2ZsYWcgPSAwOwotCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwotCi0JCQl0cmFjZV94ZnNfaW5vZGVfaXRlbV9wdXNoKGJwLCBfUkVUX0lQXyk7Ci0KLQkJCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSkgewotCQkJCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwKLQkJCQkJICAgICAgWEZTX0xPR19GT1JDRSk7Ci0JCQl9Ci0JCQlpZiAoZG9wdXNoKSB7Ci0JCQkJaW50CWVycm9yOwotCQkJCWVycm9yID0geGZzX2Jhd3JpdGUobXAsIGJwKTsKLQkJCQlpZiAoZXJyb3IpCi0JCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLAotCQkieGZzX2lub2RlX2l0ZW1fcHVzaGJ1ZjogcHVzaGJ1ZiBlcnJvciAlZCBvbiBpaXAgJXAsIGJwICVwIiwKLQkJCQkJCQllcnJvciwgaWlwLCBicCk7Ci0JCQl9IGVsc2UgewotCQkJCXhmc19idWZfcmVsc2UoYnApOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWlwLT5pbGlfcHVzaGJ1Zl9mbGFnID0gMDsKLQkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKLQkJCXhmc19idWZfcmVsc2UoYnApOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0JLyoKLQkgKiBXZSBoYXZlIHRvIGJlIGNhcmVmdWwgYWJvdXQgcmVzZXR0aW5nIHB1c2hidWYgZmxhZyB0b28gZWFybHkgKGFib3ZlKS4KLQkgKiBFdmVuIHRob3VnaCBpbiB0aGVvcnkgd2UgY2FuIGRvIGl0IGFzIHNvb24gYXMgd2UgaGF2ZSB0aGUgYnVmbG9jaywKLQkgKiB3ZSBkb24ndCB3YW50IG90aGVycyB0byBiZSBkb2luZyB3b3JrIG5lZWRsZXNzbHkuIFRoZXknbGwgY29tZSB0bwotCSAqIHRoaXMgZnVuY3Rpb24gdGhpbmtpbmcgdGhhdCBwdXNoaW5nIHRoZSBidWZmZXIgaXMgdGhlaXIKLQkgKiByZXNwb25zaWJpbGl0eSBvbmx5IHRvIGZpbmQgdGhhdCB0aGUgYnVmZmVyIGlzIHN0aWxsIGxvY2tlZCBieQotCSAqIGFub3RoZXIgZG9pbmcgdGhlIHNhbWUgdGhpbmcKLQkgKi8KLQlpaXAtPmlsaV9wdXNoYnVmX2ZsYWcgPSAwOwogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKwlpZiAoIWJwKQorCQlyZXR1cm47CisJaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkKKwkJeGZzX2J1Zl9kZWx3cmlfcHJvbW90ZShicCk7CisJeGZzX2J1Zl9yZWxzZShicCk7CiAJcmV0dXJuOwogfQogCkBAIC04NjcsMTAgKzc5OSwxNCBAQAogCSAgICAgICBpaXAtPmlsaV9mb3JtYXQuaWxmX2ZpZWxkcyAhPSAwKTsKIAogCS8qCi0JICogV3JpdGUgb3V0IHRoZSBpbm9kZS4gIFRoZSBjb21wbGV0aW9uIHJvdXRpbmUgKCdpZmx1c2hfZG9uZScpIHdpbGwKLQkgKiBwdWxsIGl0IGZyb20gdGhlIEFJTCwgbWFyayBpdCBjbGVhbiwgdW5sb2NrIHRoZSBmbHVzaCBsb2NrLgorCSAqIFB1c2ggdGhlIGlub2RlIHRvIGl0J3MgYmFja2luZyBidWZmZXIuIFRoaXMgd2lsbCBub3QgcmVtb3ZlIHRoZQorCSAqIGlub2RlIGZyb20gdGhlIEFJTCAtIGEgZnVydGhlciBwdXNoIHdpbGwgYmUgcmVxdWlyZWQgdG8gdHJpZ2dlciBhCisJICogYnVmZmVyIHB1c2guIEhvd2V2ZXIsIHRoaXMgYWxsb3dzIGFsbCB0aGUgZGlydHkgaW5vZGVzIHRvIGJlIHB1c2hlZAorCSAqIHRvIHRoZSBidWZmZXIgYmVmb3JlIGl0IGlzIHB1c2hlZCB0byBkaXNrLiBUSGUgYnVmZmVyIElPIGNvbXBsZXRpb24KKwkgKiB3aWxsIHB1bGwgdGggZWlub2RlIGZyb20gdGhlIEFJTCwgbWFyayBpdCBjbGVhbiBhbmQgdW5sb2NrIHRoZSBmbHVzaAorCSAqIGxvY2suCiAJICovCi0JKHZvaWQpIHhmc19pZmx1c2goaXAsIFhGU19JRkxVU0hfQVNZTkMpOworCSh2b2lkKSB4ZnNfaWZsdXNoKGlwLCAwKTsKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CiAKIAlyZXR1cm47CkBAIC05MzQsNyArODcwLDYgQEAKIAkvKgogCSAgIFdlIGhhdmUgemVyb2VkIG1lbW9yeS4gTm8gbmVlZCAuLi4KIAkgICBpaXAtPmlsaV9leHRlbnRzX2J1ZiA9IE5VTEw7Ci0JICAgaWlwLT5pbGlfcHVzaGJ1Zl9mbGFnID0gMDsKIAkgKi8KIAogCWlpcC0+aWxpX2Zvcm1hdC5pbGZfdHlwZSA9IFhGU19MSV9JTk9ERTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKaW5kZXggY2M4ZGYxYS4uOWE0Njc5NSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKQEAgLTE0NCwxMiArMTQ0LDYgQEAKIAkJCQkJCSAgICAgIGRhdGEgZXh0cyAqLwogCXN0cnVjdCB4ZnNfYm1idF9yZWMJKmlsaV9hZXh0ZW50c19idWY7IC8qIGFycmF5IG9mIGxvZ2dlZAogCQkJCQkJICAgICAgYXR0ciBleHRzICovCi0JdW5zaWduZWQgaW50ICAgICAgICAgICAgaWxpX3B1c2hidWZfZmxhZzsgIC8qIG9uZSBiaXQgdXNlZCBpbiBwdXNoX2FpbCAqLwotCi0jaWZkZWYgREVCVUcKLQl1aW50NjRfdCAgICAgICAgICAgICAgICBpbGlfcHVzaF9vd25lcjsgICAgLyogb25lIHdobyBzZXRzIHB1c2hidWZfZmxhZwotCQkJCQkJICAgICAgYWJvdmUgZ2V0cyB0byBwdXNoIHRoZSBidWYgKi8KLSNlbmRpZgogI2lmZGVmIFhGU19UUkFOU19ERUJVRwogCWludAkJCWlsaV9yb290X3NpemU7CiAJY2hhcgkJCSppbGlfb3JpZ19yb290OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pdGFibGUuYyBiL2ZzL3hmcy94ZnNfaXRhYmxlLmMKaW5kZXggNjJlZmFiMi4uM2FmMDIzMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pdGFibGUuYworKysgYi9mcy94ZnMveGZzX2l0YWJsZS5jCkBAIC00MDgsOCArNDA4LDEwIEBACiAJCShYRlNfSU5PREVfQ0xVU1RFUl9TSVpFKG1wKSA+PiBtcC0+bV9zYi5zYl9pbm9kZWxvZyk7CiAJbmltYXNrID0gfihuaWNsdXN0ZXIgLSAxKTsKIAluYmNsdXN0ZXIgPSBuaWNsdXN0ZXIgPj4gbXAtPm1fc2Iuc2JfaW5vcGJsb2c7Ci0JaXJidWYgPSBrbWVtX3phbGxvY19ncmVlZHkoJmlyYnNpemUsIFBBR0VfU0laRSwgUEFHRV9TSVpFICogNCwKLQkJCQkgICBLTV9TTEVFUCB8IEtNX01BWUZBSUwgfCBLTV9MQVJHRSk7CisJaXJidWYgPSBrbWVtX3phbGxvY19ncmVlZHkoJmlyYnNpemUsIFBBR0VfU0laRSwgUEFHRV9TSVpFICogNCk7CisJaWYgKCFpcmJ1ZikKKwkJcmV0dXJuIEVOT01FTTsKKwogCW5pcmJ1ZiA9IGlyYnNpemUgLyBzaXplb2YoKmlyYnVmKTsKIAogCS8qCkBAIC00MjAsOSArNDIyLDcgQEAKIAl3aGlsZSAoWEZTX0JVTEtTVEFUX1VCTEVGVCh1YmxlZnQpICYmIGFnbm8gPCBtcC0+bV9zYi5zYl9hZ2NvdW50KSB7CiAJCWNvbmRfcmVzY2hlZCgpOwogCQlicCA9IE5VTEw7Ci0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJZXJyb3IgPSB4ZnNfaWFsbG9jX3JlYWRfYWdpKG1wLCBOVUxMLCBhZ25vLCAmYWdicCk7Ci0JCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJCWlmIChlcnJvcikgewogCQkJLyoKIAkJCSAqIFNraXAgdGhpcyBhbGxvY2F0aW9uIGdyb3VwIGFuZCBnbyB0byB0aGUgbmV4dCBvbmUuCkBAIC03MjksNyArNzI5LDcgQEAKIAkvKgogCSAqIERvbmUsIHdlJ3JlIGVpdGhlciBvdXQgb2YgZmlsZXN5c3RlbSBvciBzcGFjZSB0byBwdXQgdGhlIGRhdGEuCiAJICovCi0Ja21lbV9mcmVlKGlyYnVmKTsKKwlrbWVtX2ZyZWVfbGFyZ2UoaXJidWYpOwogCSp1YmNvdW50cCA9IHViZWxlbTsKIAkvKgogCSAqIEZvdW5kIHNvbWUgaW5vZGVzLCByZXR1cm4gdGhlbSBub3cgYW5kIHJldHVybiB0aGUgZXJyb3IgbmV4dCB0aW1lLgpAQCAtODQ5LDkgKzg0OSw3IEBACiAJYWdicCA9IE5VTEw7CiAJd2hpbGUgKGxlZnQgPiAwICYmIGFnbm8gPCBtcC0+bV9zYi5zYl9hZ2NvdW50KSB7CiAJCWlmIChhZ2JwID09IE5VTEwpIHsKLQkJCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJCWVycm9yID0geGZzX2lhbGxvY19yZWFkX2FnaShtcCwgTlVMTCwgYWdubywgJmFnYnApOwotCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJCWlmIChlcnJvcikgewogCQkJCS8qCiAJCQkJICogSWYgd2UgY2FuJ3QgcmVhZCB0aGUgQUdJIG9mIHRoaXMgYWcsCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZy5jIGIvZnMveGZzL3hmc19sb2cuYwppbmRleCA2MDBiNWIwLi40ZjE2YmU0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZy5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nLmMKQEAgLTUwLDcgKzUwLDYgQEAKIAkgIChvZmYpICs9IChieXRlcyk7fQogCiAvKiBMb2NhbCBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLVNUQVRJQyBpbnQJIHhsb2dfYmRzdHJhdF9jYihzdHJ1Y3QgeGZzX2J1ZiAqKTsKIFNUQVRJQyBpbnQJIHhsb2dfY29tbWl0X3JlY29yZCh4ZnNfbW91bnRfdCAqbXAsIHhsb2dfdGlja2V0X3QgKnRpY2tldCwKIAkJCQkgICAgeGxvZ19pbl9jb3JlX3QgKiosIHhmc19sc25fdCAqKTsKIFNUQVRJQyB4bG9nX3QgKiAgeGxvZ19hbGxvY19sb2coeGZzX21vdW50X3QJKm1wLApAQCAtODAsMTEgKzc5LDYgQEAKIFNUQVRJQyB2b2lkIHhsb2dfc3RhdGVfc3dpdGNoX2ljbG9ncyh4bG9nX3QJCSpsb2csCiAJCQkJICAgICB4bG9nX2luX2NvcmVfdCAqaWNsb2csCiAJCQkJICAgICBpbnQJCWV2ZW50dWFsX3NpemUpOwotU1RBVElDIGludCAgeGxvZ19zdGF0ZV9zeW5jKHhsb2dfdAkJCSpsb2csCi0JCQkgICAgeGZzX2xzbl90IAkJCWxzbiwKLQkJCSAgICB1aW50CQkJZmxhZ3MsCi0JCQkgICAgaW50CQkJCSpsb2dfZmx1c2hlZCk7Ci1TVEFUSUMgaW50ICB4bG9nX3N0YXRlX3N5bmNfYWxsKHhsb2dfdCAqbG9nLCB1aW50IGZsYWdzLCBpbnQgKmxvZ19mbHVzaGVkKTsKIFNUQVRJQyB2b2lkIHhsb2dfc3RhdGVfd2FudF9zeW5jKHhsb2dfdAkqbG9nLCB4bG9nX2luX2NvcmVfdCAqaWNsb2cpOwogCiAvKiBsb2NhbCBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSBncmFudCBoZWFkICovCkBAIC0yOTcsNjUgKzI5MSw2IEBACiAJcmV0dXJuIGxzbjsKIH0JLyogeGZzX2xvZ19kb25lICovCiAKLQotLyoKLSAqIEZvcmNlIHRoZSBpbi1jb3JlIGxvZyB0byBkaXNrLiAgSWYgZmxhZ3MgPT0gWEZTX0xPR19TWU5DLAotICoJdGhlIGZvcmNlIGlzIGRvbmUgc3luY2hyb25vdXNseS4KLSAqCi0gKiBBc3luY2hyb25vdXMgZm9yY2VzIGFyZSBpbXBsZW1lbnRlZCBieSBzZXR0aW5nIHRoZSBXQU5UX1NZTkMKLSAqIGJpdCBpbiB0aGUgYXBwcm9wcmlhdGUgaW4tY29yZSBsb2cgYW5kIHRoZW4gcmV0dXJuaW5nLgotICoKLSAqIFN5bmNocm9ub3VzIGZvcmNlcyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBhIHNpZ25hbCB2YXJpYWJsZS4gQWxsIGNhbGxlcnMKLSAqIHRvIGZvcmNlIGEgZ2l2ZW4gbHNuIHRvIGRpc2sgd2lsbCB3YWl0IG9uIGEgdGhlIHN2IGF0dGFjaGVkIHRvIHRoZQotICogc3BlY2lmaWMgaW4tY29yZSBsb2cuICBXaGVuIGdpdmVuIGluLWNvcmUgbG9nIGZpbmFsbHkgY29tcGxldGVzIGl0cwotICogd3JpdGUgdG8gZGlzaywgdGhhdCB0aHJlYWQgd2lsbCB3YWtlIHVwIGFsbCB0aHJlYWRzIHdhaXRpbmcgb24gdGhlCi0gKiBzdi4KLSAqLwotaW50Ci1feGZzX2xvZ19mb3JjZSgKLQl4ZnNfbW91bnRfdAkqbXAsCi0JeGZzX2xzbl90CWxzbiwKLQl1aW50CQlmbGFncywKLQlpbnQJCSpsb2dfZmx1c2hlZCkKLXsKLQl4bG9nX3QJCSpsb2cgPSBtcC0+bV9sb2c7Ci0JaW50CQlkdW1teTsKLQotCWlmICghbG9nX2ZsdXNoZWQpCi0JCWxvZ19mbHVzaGVkID0gJmR1bW15OwotCi0JQVNTRVJUKGZsYWdzICYgWEZTX0xPR19GT1JDRSk7Ci0KLQlYRlNfU1RBVFNfSU5DKHhzX2xvZ19mb3JjZSk7Ci0KLQlpZiAobG9nLT5sX2ZsYWdzICYgWExPR19JT19FUlJPUikKLQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCWlmIChsc24gPT0gMCkKLQkJcmV0dXJuIHhsb2dfc3RhdGVfc3luY19hbGwobG9nLCBmbGFncywgbG9nX2ZsdXNoZWQpOwotCWVsc2UKLQkJcmV0dXJuIHhsb2dfc3RhdGVfc3luYyhsb2csIGxzbiwgZmxhZ3MsIGxvZ19mbHVzaGVkKTsKLX0JLyogX3hmc19sb2dfZm9yY2UgKi8KLQotLyoKLSAqIFdyYXBwZXIgZm9yIF94ZnNfbG9nX2ZvcmNlKCksIHRvIGJlIHVzZWQgd2hlbiBjYWxsZXIgZG9lc24ndCBjYXJlCi0gKiBhYm91dCBlcnJvcnMgb3Igd2hldGhlciB0aGUgbG9nIHdhcyBmbHVzaGVkIG9yIG5vdC4gVGhpcyBpcyB0aGUgbm9ybWFsCi0gKiBpbnRlcmZhY2UgdG8gdXNlIHdoZW4gdHJ5aW5nIHRvIHVucGluIGl0ZW1zIG9yIG1vdmUgdGhlIGxvZyBmb3J3YXJkLgotICovCi12b2lkCi14ZnNfbG9nX2ZvcmNlKAotCXhmc19tb3VudF90CSptcCwKLQl4ZnNfbHNuX3QJbHNuLAotCXVpbnQJCWZsYWdzKQotewotCWludAllcnJvcjsKLQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlKG1wLCBsc24sIGZsYWdzLCBOVUxMKTsKLQlpZiAoZXJyb3IpIHsKLQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsICJ4ZnNfbG9nX2ZvcmNlOiAiCi0JCQkiZXJyb3IgJWQgcmV0dXJuZWQuIiwgZXJyb3IpOwotCX0KLX0KLQotCiAvKgogICogQXR0YWNoZXMgYSBuZXcgaWNsb2cgSS9PIGNvbXBsZXRpb24gY2FsbGJhY2sgcm91dGluZSBkdXJpbmcKICAqIHRyYW5zYWN0aW9uIGNvbW1pdC4gIElmIHRoZSBsb2cgaXMgaW4gZXJyb3Igc3RhdGUsIGEgbm9uLXplcm8KQEAgLTYwMiw3ICs1MzcsNyBAQAogCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpCiAJCXJldHVybiAwOwogCi0JZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShtcCwgMCwgWEZTX0xPR19GT1JDRXxYRlNfTE9HX1NZTkMsIE5VTEwpOworCWVycm9yID0gX3hmc19sb2dfZm9yY2UobXAsIFhGU19MT0dfU1lOQywgTlVMTCk7CiAJQVNTRVJUKGVycm9yIHx8ICEoWExPR19GT1JDRURfU0hVVERPV04obG9nKSkpOwogCiAjaWZkZWYgREVCVUcKQEAgLTYxOCw3ICs1NTMsNyBAQAogCWlmICghIChYTE9HX0ZPUkNFRF9TSFVURE9XTihsb2cpKSkgewogCQlyZWdbMF0uaV9hZGRyID0gKHZvaWQqKSZtYWdpYzsKIAkJcmVnWzBdLmlfbGVuICA9IHNpemVvZihtYWdpYyk7Ci0JCVhMT0dfVkVDX1NFVF9UWVBFKCZyZWdbMF0sIFhMT0dfUkVHX1RZUEVfVU5NT1VOVCk7CisJCXJlZ1swXS5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX1VOTU9VTlQ7CiAKIAkJZXJyb3IgPSB4ZnNfbG9nX3Jlc2VydmUobXAsIDYwMCwgMSwgJnRpYywKIAkJCQkJWEZTX0xPRywgMCwgWExPR19VTk1PVU5UX1JFQ19UWVBFKTsKQEAgLTk4OCwzNSArOTIzLDYgQEAKIH0JLyogeGxvZ19pb2RvbmUgKi8KIAogLyoKLSAqIFRoZSBiZHN0cmF0IGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBsb2cgYnVmcy4gVGhpcyBnaXZlcyB1cyBhIGNlbnRyYWwKLSAqIHBsYWNlIHRvIHRyYXAgYnVmcyBpbiBjYXNlIHdlIGdldCBoaXQgYnkgYSBsb2cgSS9PIGVycm9yIGFuZCBuZWVkIHRvCi0gKiBzaHV0ZG93bi4gQWN0dWFsbHksIGluIHByYWN0aWNlLCBldmVuIHdoZW4gd2UgZGlkbid0IGdldCBhIGxvZyBlcnJvciwKLSAqIHdlIHRyYW5zaXRpb24gdGhlIGljbG9ncyB0byBJT0VSUk9SIHN0YXRlICphZnRlciogZmx1c2hpbmcgYWxsIGV4aXN0aW5nCi0gKiBpY2xvZ3MgdG8gZGlzay4gVGhpcyBpcyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgYW55bW9yZSBuZXcgdHJhbnNhY3Rpb25zIHRvIGJlCi0gKiBzdGFydGVkIG9yIGNvbXBsZXRlZCBhZnRlcndhcmRzLgotICovCi1TVEFUSUMgaW50Ci14bG9nX2Jkc3RyYXRfY2Ioc3RydWN0IHhmc19idWYgKmJwKQotewotCXhsb2dfaW5fY29yZV90ICppY2xvZzsKLQotCWljbG9nID0gWEZTX0JVRl9GU1BSSVZBVEUoYnAsIHhsb2dfaW5fY29yZV90ICopOwotCi0JaWYgKChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpID09IDApIHsKLQkgIC8qIG5vdGUgZm9yIGlyaXggYnN0cmF0IHdpbGwgbmVlZCAgc3RydWN0IGJkZXZzdyBwYXNzZWQKLQkgICAqIEZpeCB0aGUgZm9sbG93aW5nIG1hY3JvIGlmIHRoZSBjb2RlIGV2ZXIgaXMgbWVyZ2VkCi0JICAgKi8KLQkgICAgWEZTX2Jkc3RyYXQoYnApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlYRlNfQlVGX0VSUk9SKGJwLCBFSU8pOwotCVhGU19CVUZfU1RBTEUoYnApOwotCXhmc19iaW9kb25lKGJwKTsKLQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci19Ci0KLS8qCiAgKiBSZXR1cm4gc2l6ZSBvZiBlYWNoIGluLWNvcmUgbG9nIHJlY29yZCBidWZmZXIuCiAgKgogICogQWxsIG1hY2hpbmVzIGdldCA4IHggMzJrQiBidWZmZXJzIGJ5IGRlZmF1bHQsIHVubGVzcyB0dW5lZCBvdGhlcndpc2UuCkBAIC0xMTU4LDcgKzEwNjQsNiBAQAogCWlmICghYnApCiAJCWdvdG8gb3V0X2ZyZWVfbG9nOwogCVhGU19CVUZfU0VUX0lPRE9ORV9GVU5DKGJwLCB4bG9nX2lvZG9uZSk7Ci0JWEZTX0JVRl9TRVRfQkRTVFJBVF9GVU5DKGJwLCB4bG9nX2Jkc3RyYXRfY2IpOwogCVhGU19CVUZfU0VUX0ZTUFJJVkFURTIoYnAsICh1bnNpZ25lZCBsb25nKTEpOwogCUFTU0VSVChYRlNfQlVGX0lTQlVTWShicCkpOwogCUFTU0VSVChYRlNfQlVGX1ZBTFVTRU1BKGJwKSA8PSAwKTsKQEAgLTExOTYsNyArMTEwMSw2IEBACiAJCWlmICghWEZTX0JVRl9DUFNFTUEoYnApKQogCQkJQVNTRVJUKDApOwogCQlYRlNfQlVGX1NFVF9JT0RPTkVfRlVOQyhicCwgeGxvZ19pb2RvbmUpOwotCQlYRlNfQlVGX1NFVF9CRFNUUkFUX0ZVTkMoYnAsIHhsb2dfYmRzdHJhdF9jYik7CiAJCVhGU19CVUZfU0VUX0ZTUFJJVkFURTIoYnAsICh1bnNpZ25lZCBsb25nKTEpOwogCQlpY2xvZy0+aWNfYnAgPSBicDsKIAkJaWNsb2ctPmljX2RhdGEgPSBicC0+Yl9hZGRyOwpAQCAtMTI2OCw3ICsxMTcyLDcgQEAKIAogCXJlZ1swXS5pX2FkZHIgPSBOVUxMOwogCXJlZ1swXS5pX2xlbiA9IDA7Ci0JWExPR19WRUNfU0VUX1RZUEUoJnJlZ1swXSwgWExPR19SRUdfVFlQRV9DT01NSVQpOworCXJlZ1swXS5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0NPTU1JVDsKIAogCUFTU0VSVF9BTFdBWVMoaWNsb2cpOwogCWlmICgoZXJyb3IgPSB4bG9nX3dyaXRlKG1wLCByZWcsIDEsIHRpY2tldCwgY29tbWl0bHNucCwKQEAgLTEzNDMsNiArMTI0NywzNyBAQAogCSAgICB4ZnNfdHJhbnNfYWlsX3B1c2gobG9nLT5sX2FpbHAsIHRocmVzaG9sZF9sc24pOwogfQkvKiB4bG9nX2dyYW50X3B1c2hfYWlsICovCiAKKy8qCisgKiBUaGUgYmRzdHJhdCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgbG9nIGJ1ZnMuIFRoaXMgZ2l2ZXMgdXMgYSBjZW50cmFsCisgKiBwbGFjZSB0byB0cmFwIGJ1ZnMgaW4gY2FzZSB3ZSBnZXQgaGl0IGJ5IGEgbG9nIEkvTyBlcnJvciBhbmQgbmVlZCB0bworICogc2h1dGRvd24uIEFjdHVhbGx5LCBpbiBwcmFjdGljZSwgZXZlbiB3aGVuIHdlIGRpZG4ndCBnZXQgYSBsb2cgZXJyb3IsCisgKiB3ZSB0cmFuc2l0aW9uIHRoZSBpY2xvZ3MgdG8gSU9FUlJPUiBzdGF0ZSAqYWZ0ZXIqIGZsdXNoaW5nIGFsbCBleGlzdGluZworICogaWNsb2dzIHRvIGRpc2suIFRoaXMgaXMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IGFueW1vcmUgbmV3IHRyYW5zYWN0aW9ucyB0byBiZQorICogc3RhcnRlZCBvciBjb21wbGV0ZWQgYWZ0ZXJ3YXJkcy4KKyAqLworU1RBVElDIGludAoreGxvZ19iZHN0cmF0KAorCXN0cnVjdCB4ZnNfYnVmCQkqYnApCit7CisJc3RydWN0IHhsb2dfaW5fY29yZQkqaWNsb2c7CisKKwlpY2xvZyA9IFhGU19CVUZfRlNQUklWQVRFKGJwLCB4bG9nX2luX2NvcmVfdCAqKTsKKwlpZiAoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSB7CisJCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7CisJCVhGU19CVUZfU1RBTEUoYnApOworCQl4ZnNfYmlvZG9uZShicCk7CisJCS8qCisJCSAqIEl0IHdvdWxkIHNlZW0gbG9naWNhbCB0byByZXR1cm4gRUlPIGhlcmUsIGJ1dCB3ZSByZWx5IG9uCisJCSAqIHRoZSBsb2cgc3RhdGUgbWFjaGluZSB0byBwcm9wYWdhdGUgSS9PIGVycm9ycyBpbnN0ZWFkIG9mCisJCSAqIGRvaW5nIGl0IGhlcmUuCisJCSAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlicC0+Yl9mbGFncyB8PSBfWEJGX1JVTl9RVUVVRVM7CisJeGZzX2J1Zl9pb3JlcXVlc3QoYnApOworCXJldHVybiAwOworfQogCiAvKgogICogRmx1c2ggb3V0IHRoZSBpbi1jb3JlIGxvZyAoaWNsb2cpIHRvIHRoZSBvbi1kaXNrIGxvZyBpbiBhbiBhc3luY2hyb25vdXMgCkBAIC0xNDYyLDcgKzEzOTcsNyBAQAogCSAqLwogCVhGU19CVUZfV1JJVEUoYnApOwogCi0JaWYgKChlcnJvciA9IFhGU19id3JpdGUoYnApKSkgeworCWlmICgoZXJyb3IgPSB4bG9nX2Jkc3RyYXQoYnApKSkgewogCQl4ZnNfaW9lcnJvcl9hbGVydCgieGxvZ19zeW5jIiwgbG9nLT5sX21wLCBicCwKIAkJCQkgIFhGU19CVUZfQUREUihicCkpOwogCQlyZXR1cm4gZXJyb3I7CkBAIC0xNTAyLDcgKzE0MzcsNyBAQAogCQkvKiBhY2NvdW50IGZvciBpbnRlcm5hbCBsb2cgd2hpY2ggZG9lc24ndCBzdGFydCBhdCBibG9jayAjMCAqLwogCQlYRlNfQlVGX1NFVF9BRERSKGJwLCBYRlNfQlVGX0FERFIoYnApICsgbG9nLT5sX2xvZ0JCc3RhcnQpOwogCQlYRlNfQlVGX1dSSVRFKGJwKTsKLQkJaWYgKChlcnJvciA9IFhGU19id3JpdGUoYnApKSkgeworCQlpZiAoKGVycm9yID0geGxvZ19iZHN0cmF0KGJwKSkpIHsKIAkJCXhmc19pb2Vycm9yX2FsZXJ0KCJ4bG9nX3N5bmMgKHNwbGl0KSIsIGxvZy0+bF9tcCwKIAkJCQkJICBicCwgWEZTX0JVRl9BRERSKGJwKSk7CiAJCQlyZXR1cm4gZXJyb3I7CkBAIC0yODU0LDcgKzI3ODksNiBAQAogCWxvZy0+bF9pY2xvZyA9IGljbG9nLT5pY19uZXh0OwogfQkvKiB4bG9nX3N0YXRlX3N3aXRjaF9pY2xvZ3MgKi8KIAotCiAvKgogICogV3JpdGUgb3V0IGFsbCBkYXRhIGluIHRoZSBpbi1jb3JlIGxvZyBhcyBvZiB0aGlzIGV4YWN0IG1vbWVudCBpbiB0aW1lLgogICoKQEAgLTI4ODIsMTEgKzI4MTYsMTcgQEAKICAqCSAgIGIpIHdoZW4gd2UgcmV0dXJuIGZyb20gZmx1c2hpbmcgb3V0IHRoaXMgaWNsb2csIGl0IGlzIHN0aWxsCiAgKgkJbm90IGluIHRoZSBhY3RpdmUgbm9yIGRpcnR5IHN0YXRlLgogICovCi1TVEFUSUMgaW50Ci14bG9nX3N0YXRlX3N5bmNfYWxsKHhsb2dfdCAqbG9nLCB1aW50IGZsYWdzLCBpbnQgKmxvZ19mbHVzaGVkKQoraW50CitfeGZzX2xvZ19mb3JjZSgKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwl1aW50CQkJZmxhZ3MsCisJaW50CQkJKmxvZ19mbHVzaGVkKQogewotCXhsb2dfaW5fY29yZV90CSppY2xvZzsKLQl4ZnNfbHNuX3QJbHNuOworCXN0cnVjdCBsb2cJCSpsb2cgPSBtcC0+bV9sb2c7CisJc3RydWN0IHhsb2dfaW5fY29yZQkqaWNsb2c7CisJeGZzX2xzbl90CQlsc247CisKKwlYRlNfU1RBVFNfSU5DKHhzX2xvZ19mb3JjZSk7CiAKIAlzcGluX2xvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCkBAIC0yOTMyLDcgKzI4NzIsOSBAQAogCiAJCQkJaWYgKHhsb2dfc3RhdGVfcmVsZWFzZV9pY2xvZyhsb2csIGljbG9nKSkKIAkJCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCQkJCSpsb2dfZmx1c2hlZCA9IDE7CisKKwkJCQlpZiAobG9nX2ZsdXNoZWQpCisJCQkJCSpsb2dfZmx1c2hlZCA9IDE7CiAJCQkJc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIAkJCQlpZiAoYmU2NF90b19jcHUoaWNsb2ctPmljX2hlYWRlci5oX2xzbikgPT0gbHNuICYmCiAJCQkJICAgIGljbG9nLT5pY19zdGF0ZSAhPSBYTE9HX1NUQVRFX0RJUlRZKQpAQCAtMjk3NiwxOSArMjkxOCwzNyBAQAogCQkgKi8KIAkJaWYgKGljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikKIAkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQkJKmxvZ19mbHVzaGVkID0gMTsKLQorCQlpZiAobG9nX2ZsdXNoZWQpCisJCQkqbG9nX2ZsdXNoZWQgPSAxOwogCX0gZWxzZSB7CiAKIG5vX3NsZWVwOgogCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJfQogCXJldHVybiAwOwotfQkvKiB4bG9nX3N0YXRlX3N5bmNfYWxsICovCi0KK30KIAogLyoKLSAqIFVzZWQgYnkgY29kZSB3aGljaCBpbXBsZW1lbnRzIHN5bmNocm9ub3VzIGxvZyBmb3JjZXMuCisgKiBXcmFwcGVyIGZvciBfeGZzX2xvZ19mb3JjZSgpLCB0byBiZSB1c2VkIHdoZW4gY2FsbGVyIGRvZXNuJ3QgY2FyZQorICogYWJvdXQgZXJyb3JzIG9yIHdoZXRoZXIgdGhlIGxvZyB3YXMgZmx1c2hlZCBvciBub3QuIFRoaXMgaXMgdGhlIG5vcm1hbAorICogaW50ZXJmYWNlIHRvIHVzZSB3aGVuIHRyeWluZyB0byB1bnBpbiBpdGVtcyBvciBtb3ZlIHRoZSBsb2cgZm9yd2FyZC4KKyAqLwordm9pZAoreGZzX2xvZ19mb3JjZSgKKwl4ZnNfbW91bnRfdAkqbXAsCisJdWludAkJZmxhZ3MpCit7CisJaW50CWVycm9yOworCisJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShtcCwgZmxhZ3MsIE5VTEwpOworCWlmIChlcnJvcikgeworCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwgInhmc19sb2dfZm9yY2U6ICIKKwkJCSJlcnJvciAlZCByZXR1cm5lZC4iLCBlcnJvcik7CisJfQorfQorCisvKgorICogRm9yY2UgdGhlIGluLWNvcmUgbG9nIHRvIGRpc2sgZm9yIGEgc3BlY2lmaWMgTFNOLgogICoKICAqIEZpbmQgaW4tY29yZSBsb2cgd2l0aCBsc24uCiAgKglJZiBpdCBpcyBpbiB0aGUgRElSVFkgc3RhdGUsIGp1c3QgcmV0dXJuLgpAQCAtMjk5NiwxMDkgKzI5NTYsMTQyIEBACiAgKgkJc3RhdGUgYW5kIGdvIHRvIHNsZWVwIG9yIHJldHVybi4KICAqCUlmIGl0IGlzIGluIGFueSBvdGhlciBzdGF0ZSwgZ28gdG8gc2xlZXAgb3IgcmV0dXJuLgogICoKLSAqIElmIGZpbGVzeXN0ZW0gYWN0aXZpdHkgZ29lcyB0byB6ZXJvLCB0aGUgaWNsb2cgd2lsbCBnZXQgZmx1c2hlZCBvbmx5IGJ5Ci0gKiBiZGZsdXNoKCkuCisgKiBTeW5jaHJvbm91cyBmb3JjZXMgYXJlIGltcGxlbWVudGVkIHdpdGggYSBzaWduYWwgdmFyaWFibGUuIEFsbCBjYWxsZXJzCisgKiB0byBmb3JjZSBhIGdpdmVuIGxzbiB0byBkaXNrIHdpbGwgd2FpdCBvbiBhIHRoZSBzdiBhdHRhY2hlZCB0byB0aGUKKyAqIHNwZWNpZmljIGluLWNvcmUgbG9nLiAgV2hlbiBnaXZlbiBpbi1jb3JlIGxvZyBmaW5hbGx5IGNvbXBsZXRlcyBpdHMKKyAqIHdyaXRlIHRvIGRpc2ssIHRoYXQgdGhyZWFkIHdpbGwgd2FrZSB1cCBhbGwgdGhyZWFkcyB3YWl0aW5nIG9uIHRoZQorICogc3YuCiAgKi8KLVNUQVRJQyBpbnQKLXhsb2dfc3RhdGVfc3luYyh4bG9nX3QJICAqbG9nLAotCQl4ZnNfbHNuX3QgbHNuLAotCQl1aW50CSAgZmxhZ3MsCi0JCWludAkgICpsb2dfZmx1c2hlZCkKK2ludAorX3hmc19sb2dfZm9yY2VfbHNuKAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAorCXhmc19sc25fdAkJbHNuLAorCXVpbnQJCQlmbGFncywKKwlpbnQJCQkqbG9nX2ZsdXNoZWQpCiB7Ci0gICAgeGxvZ19pbl9jb3JlX3QJKmljbG9nOwotICAgIGludAkJCWFscmVhZHlfc2xlcHQgPSAwOworCXN0cnVjdCBsb2cJCSpsb2cgPSBtcC0+bV9sb2c7CisJc3RydWN0IHhsb2dfaW5fY29yZQkqaWNsb2c7CisJaW50CQkJYWxyZWFkeV9zbGVwdCA9IDA7CisKKwlBU1NFUlQobHNuICE9IDApOworCisJWEZTX1NUQVRTX0lOQyh4c19sb2dfZm9yY2UpOwogCiB0cnlfYWdhaW46Ci0gICAgc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLSAgICBpY2xvZyA9IGxvZy0+bF9pY2xvZzsKLQotICAgIGlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpIHsKLQkgICAgc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwotCSAgICByZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0gICAgfQotCi0gICAgZG8gewotCWlmIChiZTY0X3RvX2NwdShpY2xvZy0+aWNfaGVhZGVyLmhfbHNuKSAhPSBsc24pIHsKLQkJaWNsb2cgPSBpY2xvZy0+aWNfbmV4dDsKLQkJY29udGludWU7Ci0JfQotCi0JaWYgKGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX0RJUlRZKSB7CisJc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKKwlpY2xvZyA9IGxvZy0+bF9pY2xvZzsKKwlpZiAoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSB7CiAJCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAl9CiAKLQlpZiAoaWNsb2ctPmljX3N0YXRlID09IFhMT0dfU1RBVEVfQUNUSVZFKSB7Ci0JCS8qCi0JCSAqIFdlIHNsZWVwIGhlcmUgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IHNsZXB0IChlLmcuCi0JCSAqIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgbG9va2VkIGF0IHRoZSBjb3JyZWN0Ci0JCSAqIGljbG9nIGJ1ZikgYW5kIHRoZSBidWZmZXIgYmVmb3JlIHVzIGlzIGdvaW5nIHRvCi0JCSAqIGJlIHN5bmMnZWQuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBpZiB3ZQotCQkgKiBhcmUgZG9pbmcgc3luYyB0cmFuc2FjdGlvbnMgaGVyZSwgYnkgd2FpdGluZyBmb3IKLQkJICogdGhlIHByZXZpb3VzIEkvTyB0byBjb21wbGV0ZSwgd2UgY2FuIGFsbG93IGEgZmV3Ci0JCSAqIG1vcmUgdHJhbnNhY3Rpb25zIGludG8gdGhpcyBpY2xvZyBiZWZvcmUgd2UgY2xvc2UKLQkJICogaXQgZG93bi4KLQkJICoKLQkJICogT3RoZXJ3aXNlLCB3ZSBtYXJrIHRoZSBidWZmZXIgV0FOVF9TWU5DLCBhbmQgYnVtcAotCQkgKiB1cCB0aGUgcmVmY250IHNvIHdlIGNhbiByZWxlYXNlIHRoZSBsb2cgKHdoaWNoIGRyb3BzCi0JCSAqIHRoZSByZWYgY291bnQpLiAgVGhlIHN0YXRlIHN3aXRjaCBrZWVwcyBuZXcgdHJhbnNhY3Rpb24KLQkJICogY29tbWl0cyBmcm9tIHVzaW5nIHRoaXMgYnVmZmVyLiAgV2hlbiB0aGUgY3VycmVudCBjb21taXRzCi0JCSAqIGZpbmlzaCB3cml0aW5nIGludG8gdGhlIGJ1ZmZlciwgdGhlIHJlZmNvdW50IHdpbGwgZHJvcCB0bwotCQkgKiB6ZXJvIGFuZCB0aGUgYnVmZmVyIHdpbGwgZ28gb3V0IHRoZW4uCi0JCSAqLwotCQlpZiAoIWFscmVhZHlfc2xlcHQgJiYKLQkJICAgIChpY2xvZy0+aWNfcHJldi0+aWNfc3RhdGUgJiAoWExPR19TVEFURV9XQU5UX1NZTkMgfAotCQkJCQkJIFhMT0dfU1RBVEVfU1lOQ0lORykpKSB7Ci0JCQlBU1NFUlQoIShpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpKTsKLQkJCVhGU19TVEFUU19JTkMoeHNfbG9nX2ZvcmNlX3NsZWVwKTsKLQkJCXN2X3dhaXQoJmljbG9nLT5pY19wcmV2LT5pY193cml0ZV93YWl0LCBQU1dQLAotCQkJCSZsb2ctPmxfaWNsb2dsb2NrLCBzKTsKLQkJCSpsb2dfZmx1c2hlZCA9IDE7Ci0JCQlhbHJlYWR5X3NsZXB0ID0gMTsKLQkJCWdvdG8gdHJ5X2FnYWluOwotCQl9IGVsc2UgeworCWRvIHsKKwkJaWYgKGJlNjRfdG9fY3B1KGljbG9nLT5pY19oZWFkZXIuaF9sc24pICE9IGxzbikgeworCQkJaWNsb2cgPSBpY2xvZy0+aWNfbmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX0RJUlRZKSB7CisJCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChpY2xvZy0+aWNfc3RhdGUgPT0gWExPR19TVEFURV9BQ1RJVkUpIHsKKwkJCS8qCisJCQkgKiBXZSBzbGVlcCBoZXJlIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBzbGVwdCAoZS5nLgorCQkJICogdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBsb29rZWQgYXQgdGhlIGNvcnJlY3QKKwkJCSAqIGljbG9nIGJ1ZikgYW5kIHRoZSBidWZmZXIgYmVmb3JlIHVzIGlzIGdvaW5nIHRvCisJCQkgKiBiZSBzeW5jJ2VkLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgaWYgd2UKKwkJCSAqIGFyZSBkb2luZyBzeW5jIHRyYW5zYWN0aW9ucyBoZXJlLCBieSB3YWl0aW5nIGZvcgorCQkJICogdGhlIHByZXZpb3VzIEkvTyB0byBjb21wbGV0ZSwgd2UgY2FuIGFsbG93IGEgZmV3CisJCQkgKiBtb3JlIHRyYW5zYWN0aW9ucyBpbnRvIHRoaXMgaWNsb2cgYmVmb3JlIHdlIGNsb3NlCisJCQkgKiBpdCBkb3duLgorCQkJICoKKwkJCSAqIE90aGVyd2lzZSwgd2UgbWFyayB0aGUgYnVmZmVyIFdBTlRfU1lOQywgYW5kIGJ1bXAKKwkJCSAqIHVwIHRoZSByZWZjbnQgc28gd2UgY2FuIHJlbGVhc2UgdGhlIGxvZyAod2hpY2gKKwkJCSAqIGRyb3BzIHRoZSByZWYgY291bnQpLiAgVGhlIHN0YXRlIHN3aXRjaCBrZWVwcyBuZXcKKwkJCSAqIHRyYW5zYWN0aW9uIGNvbW1pdHMgZnJvbSB1c2luZyB0aGlzIGJ1ZmZlci4gIFdoZW4KKwkJCSAqIHRoZSBjdXJyZW50IGNvbW1pdHMgZmluaXNoIHdyaXRpbmcgaW50byB0aGUgYnVmZmVyLAorCQkJICogdGhlIHJlZmNvdW50IHdpbGwgZHJvcCB0byB6ZXJvIGFuZCB0aGUgYnVmZmVyIHdpbGwKKwkJCSAqIGdvIG91dCB0aGVuLgorCQkJICovCisJCQlpZiAoIWFscmVhZHlfc2xlcHQgJiYKKwkJCSAgICAoaWNsb2ctPmljX3ByZXYtPmljX3N0YXRlICYKKwkJCSAgICAgKFhMT0dfU1RBVEVfV0FOVF9TWU5DIHwgWExPR19TVEFURV9TWU5DSU5HKSkpIHsKKwkJCQlBU1NFUlQoIShpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpKTsKKworCQkJCVhGU19TVEFUU19JTkMoeHNfbG9nX2ZvcmNlX3NsZWVwKTsKKworCQkJCXN2X3dhaXQoJmljbG9nLT5pY19wcmV2LT5pY193cml0ZV93YWl0LAorCQkJCQlQU1dQLCAmbG9nLT5sX2ljbG9nbG9jaywgcyk7CisJCQkJaWYgKGxvZ19mbHVzaGVkKQorCQkJCQkqbG9nX2ZsdXNoZWQgPSAxOworCQkJCWFscmVhZHlfc2xlcHQgPSAxOworCQkJCWdvdG8gdHJ5X2FnYWluOworCQkJfQogCQkJYXRvbWljX2luYygmaWNsb2ctPmljX3JlZmNudCk7CiAJCQl4bG9nX3N0YXRlX3N3aXRjaF9pY2xvZ3MobG9nLCBpY2xvZywgMCk7CiAJCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJCQlpZiAoeGxvZ19zdGF0ZV9yZWxlYXNlX2ljbG9nKGxvZywgaWNsb2cpKQogCQkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQkJCSpsb2dfZmx1c2hlZCA9IDE7CisJCQlpZiAobG9nX2ZsdXNoZWQpCisJCQkJKmxvZ19mbHVzaGVkID0gMTsKIAkJCXNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJCX0KLQl9CiAKLQlpZiAoKGZsYWdzICYgWEZTX0xPR19TWU5DKSAmJiAvKiBzbGVlcCAqLwotCSAgICAhKGljbG9nLT5pY19zdGF0ZSAmIChYTE9HX1NUQVRFX0FDVElWRSB8IFhMT0dfU1RBVEVfRElSVFkpKSkgeworCQlpZiAoKGZsYWdzICYgWEZTX0xPR19TWU5DKSAmJiAvKiBzbGVlcCAqLworCQkgICAgIShpY2xvZy0+aWNfc3RhdGUgJgorCQkgICAgICAoWExPR19TVEFURV9BQ1RJVkUgfCBYTE9HX1NUQVRFX0RJUlRZKSkpIHsKKwkJCS8qCisJCQkgKiBEb24ndCB3YWl0IG9uIGNvbXBsZXRpb24gaWYgd2Uga25vdyB0aGF0IHdlJ3ZlCisJCQkgKiBnb3R0ZW4gYSBsb2cgd3JpdGUgZXJyb3IuCisJCQkgKi8KKwkJCWlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpIHsKKwkJCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CisJCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOworCQkJfQorCQkJWEZTX1NUQVRTX0lOQyh4c19sb2dfZm9yY2Vfc2xlZXApOworCQkJc3Zfd2FpdCgmaWNsb2ctPmljX2ZvcmNlX3dhaXQsIFBTV1AsICZsb2ctPmxfaWNsb2dsb2NrLCBzKTsKKwkJCS8qCisJCQkgKiBObyBuZWVkIHRvIGdyYWIgdGhlIGxvZyBsb2NrIGhlcmUgc2luY2Ugd2UncmUKKwkJCSAqIG9ubHkgZGVjaWRpbmcgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIEVJTworCQkJICogYW5kIHRoZSBtZW1vcnkgcmVhZCBzaG91bGQgYmUgYXRvbWljLgorCQkJICovCisJCQlpZiAoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKQorCQkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAotCQkvKgotCQkgKiBEb24ndCB3YWl0IG9uIGNvbXBsZXRpb24gaWYgd2Uga25vdyB0aGF0IHdlJ3ZlCi0JCSAqIGdvdHRlbiBhIGxvZyB3cml0ZSBlcnJvci4KLQkJICovCi0JCWlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpIHsKKwkJCWlmIChsb2dfZmx1c2hlZCkKKwkJCQkqbG9nX2ZsdXNoZWQgPSAxOworCQl9IGVsc2UgewkJLyoganVzdCByZXR1cm4gKi8KIAkJCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLQkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAkJfQotCQlYRlNfU1RBVFNfSU5DKHhzX2xvZ19mb3JjZV9zbGVlcCk7Ci0JCXN2X3dhaXQoJmljbG9nLT5pY19mb3JjZV93YWl0LCBQU1dQLCAmbG9nLT5sX2ljbG9nbG9jaywgcyk7Ci0JCS8qCi0JCSAqIE5vIG5lZWQgdG8gZ3JhYiB0aGUgbG9nIGxvY2sgaGVyZSBzaW5jZSB3ZSdyZQotCQkgKiBvbmx5IGRlY2lkaW5nIHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiBFSU8KLQkJICogYW5kIHRoZSBtZW1vcnkgcmVhZCBzaG91bGQgYmUgYXRvbWljLgotCQkgKi8KLQkJaWYgKGljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikKLQkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQkJKmxvZ19mbHVzaGVkID0gMTsKLQl9IGVsc2UgewkJLyoganVzdCByZXR1cm4gKi8KLQkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwotCX0KKworCQlyZXR1cm4gMDsKKwl9IHdoaWxlIChpY2xvZyAhPSBsb2ctPmxfaWNsb2cpOworCisJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCXJldHVybiAwOworfQogCi0gICAgfSB3aGlsZSAoaWNsb2cgIT0gbG9nLT5sX2ljbG9nKTsKKy8qCisgKiBXcmFwcGVyIGZvciBfeGZzX2xvZ19mb3JjZV9sc24oKSwgdG8gYmUgdXNlZCB3aGVuIGNhbGxlciBkb2Vzbid0IGNhcmUKKyAqIGFib3V0IGVycm9ycyBvciB3aGV0aGVyIHRoZSBsb2cgd2FzIGZsdXNoZWQgb3Igbm90LiBUaGlzIGlzIHRoZSBub3JtYWwKKyAqIGludGVyZmFjZSB0byB1c2Ugd2hlbiB0cnlpbmcgdG8gdW5waW4gaXRlbXMgb3IgbW92ZSB0aGUgbG9nIGZvcndhcmQuCisgKi8KK3ZvaWQKK3hmc19sb2dfZm9yY2VfbHNuKAorCXhmc19tb3VudF90CSptcCwKKwl4ZnNfbHNuX3QJbHNuLAorCXVpbnQJCWZsYWdzKQoreworCWludAllcnJvcjsKIAotICAgIHNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLSAgICByZXR1cm4gMDsKLX0JLyogeGxvZ19zdGF0ZV9zeW5jICovCi0KKwllcnJvciA9IF94ZnNfbG9nX2ZvcmNlX2xzbihtcCwgbHNuLCBmbGFncywgTlVMTCk7CisJaWYgKGVycm9yKSB7CisJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLCAieGZzX2xvZ19mb3JjZTogIgorCQkJImVycm9yICVkIHJldHVybmVkLiIsIGVycm9yKTsKKwl9Cit9CiAKIC8qCiAgKiBDYWxsZWQgd2hlbiB3ZSB3YW50IHRvIG1hcmsgdGhlIGN1cnJlbnQgaWNsb2cgYXMgYmVpbmcgcmVhZHkgdG8gc3luYyB0bwpAQCAtMzQ2Myw3ICszNDU2LDYgQEAKIAl4bG9nX3RpY2tldF90CSp0aWM7CiAJeGxvZ190CQkqbG9nOwogCWludAkJcmV0dmFsOwotCWludAkJZHVtbXk7CiAKIAlsb2cgPSBtcC0+bV9sb2c7CiAKQEAgLTM1MzcsMTMgKzM1MjksMTQgQEAKIAl9CiAJc3Bpbl91bmxvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKIAotCWlmICghIChsb2ctPmxfaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSkgeworCWlmICghKGxvZy0+bF9pY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpKSB7CiAJCUFTU0VSVCghbG9nZXJyb3IpOwogCQkvKgogCQkgKiBGb3JjZSB0aGUgaW5jb3JlIGxvZ3MgdG8gZGlzayBiZWZvcmUgc2h1dHRpbmcgdGhlCiAJCSAqIGxvZyBkb3duIGNvbXBsZXRlbHkuCiAJCSAqLwotCQl4bG9nX3N0YXRlX3N5bmNfYWxsKGxvZywgWEZTX0xPR19GT1JDRXxYRlNfTE9HX1NZTkMsICZkdW1teSk7CisJCV94ZnNfbG9nX2ZvcmNlKG1wLCBYRlNfTE9HX1NZTkMsIE5VTEwpOworCiAJCXNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJCXJldHZhbCA9IHhsb2dfc3RhdGVfaW9lcnJvcihsb2cpOwogCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZy5oIGIvZnMveGZzL3hmc19sb2cuaAppbmRleCBkMGM5YmFhLi43MDc0YmU5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZy5oCisrKyBiL2ZzL3hmcy94ZnNfbG9nLmgKQEAgLTcwLDE0ICs3MCw4IEBACiAgKiBGbGFncyB0byB4ZnNfbG9nX2ZvcmNlKCkKICAqCiAgKglYRlNfTE9HX1NZTkM6CVN5bmNocm9ub3VzIGZvcmNlIGluLWNvcmUgbG9nIHRvIGRpc2sKLSAqCVhGU19MT0dfRk9SQ0U6CVN0YXJ0IGluLWNvcmUgbG9nIHdyaXRlIG5vdy4KLSAqCVhGU19MT0dfVVJHRToJU3RhcnQgd3JpdGUgd2l0aGluIHNvbWUgd2luZG93IG9mIHRpbWUuCi0gKgotICogTm90ZTogRWl0aGVyIFhGU19MT0dfRk9SQ0Ugb3IgWEZTX0xPR19VUkdFIG11c3QgYmUgc2V0LgogICovCiAjZGVmaW5lIFhGU19MT0dfU1lOQwkJMHgxCi0jZGVmaW5lIFhGU19MT0dfRk9SQ0UJCTB4MgotI2RlZmluZSBYRlNfTE9HX1VSR0UJCTB4NAogCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCkBAIC0xMTAsMTAgKzEwNCw4IEBACiAjZGVmaW5lIFhMT0dfUkVHX1RZUEVfVFJBTlNIRFIJCTE5CiAjZGVmaW5lIFhMT0dfUkVHX1RZUEVfTUFYCQkxOQogCi0jZGVmaW5lIFhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIHQpICgodmVjcCktPmlfdHlwZSA9ICh0KSkKLQogdHlwZWRlZiBzdHJ1Y3QgeGZzX2xvZ19pb3ZlYyB7Ci0JeGZzX2NhZGRyX3QJCWlfYWRkcjsJCS8qIGJlZ2lubmluZyBhZGRyZXNzIG9mIHJlZ2lvbiAqLworCXhmc19jYWRkcl90CWlfYWRkcjsJCS8qIGJlZ2lubmluZyBhZGRyZXNzIG9mIHJlZ2lvbiAqLwogCWludAkJaV9sZW47CQkvKiBsZW5ndGggaW4gYnl0ZXMgb2YgcmVnaW9uICovCiAJdWludAkJaV90eXBlOwkJLyogdHlwZSBvZiByZWdpb24gKi8KIH0geGZzX2xvZ19pb3ZlY190OwpAQCAtMTQwLDEyICsxMzIsMTcgQEAKIAkJICAgICAgIHZvaWQJCSoqaWNsb2csCiAJCSAgICAgICB1aW50CQlmbGFncyk7CiBpbnQJICBfeGZzX2xvZ19mb3JjZShzdHJ1Y3QgeGZzX21vdW50ICptcCwKLQkJCSB4ZnNfbHNuX3QJbHNuLAogCQkJIHVpbnQJCWZsYWdzLAogCQkJIGludAkJKmxvZ19mb3JjZWQpOwogdm9pZAkgIHhmc19sb2dfZm9yY2Uoc3RydWN0IHhmc19tb3VudAkqbXAsCi0JCQl4ZnNfbHNuX3QJCWxzbiwKIAkJCXVpbnQJCQlmbGFncyk7CitpbnQJICBfeGZzX2xvZ19mb3JjZV9sc24oc3RydWN0IHhmc19tb3VudCAqbXAsCisJCQkgICAgIHhmc19sc25fdAkJbHNuLAorCQkJICAgICB1aW50CQlmbGFncywKKwkJCSAgICAgaW50CQkqbG9nX2ZvcmNlZCk7Cit2b2lkCSAgeGZzX2xvZ19mb3JjZV9sc24oc3RydWN0IHhmc19tb3VudAkqbXAsCisJCQkgICAgeGZzX2xzbl90CQlsc24sCisJCQkgICAgdWludAkJZmxhZ3MpOwogaW50CSAgeGZzX2xvZ19tb3VudChzdHJ1Y3QgeGZzX21vdW50CSptcCwKIAkJCXN0cnVjdCB4ZnNfYnVmdGFyZwkqbG9nX3RhcmdldCwKIAkJCXhmc19kYWRkcl90CQlzdGFydF9ibG9jaywKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaCBiL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaAppbmRleCBkNTU2NjJkLi5mZDAyYTE4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZ19wcml2LmgKKysrIGIvZnMveGZzL3hmc19sb2dfcHJpdi5oCkBAIC00NDMsMTQgKzQ0Myw5IEBACiAKIC8qIGNvbW1vbiByb3V0aW5lcyAqLwogZXh0ZXJuIHhmc19sc25fdCB4bG9nX2Fzc2lnbl90YWlsX2xzbihzdHJ1Y3QgeGZzX21vdW50ICptcCk7Ci1leHRlcm4gaW50CSB4bG9nX2ZpbmRfdGFpbCh4bG9nX3QJKmxvZywKLQkJCQl4ZnNfZGFkZHJfdCAqaGVhZF9ibGssCi0JCQkJeGZzX2RhZGRyX3QgKnRhaWxfYmxrKTsKIGV4dGVybiBpbnQJIHhsb2dfcmVjb3Zlcih4bG9nX3QgKmxvZyk7CiBleHRlcm4gaW50CSB4bG9nX3JlY292ZXJfZmluaXNoKHhsb2dfdCAqbG9nKTsKIGV4dGVybiB2b2lkCSB4bG9nX3BhY2tfZGF0YSh4bG9nX3QgKmxvZywgeGxvZ19pbl9jb3JlX3QgKmljbG9nLCBpbnQpOwotZXh0ZXJuIHN0cnVjdCB4ZnNfYnVmICp4bG9nX2dldF9icCh4bG9nX3QgKiwgaW50KTsKLWV4dGVybiB2b2lkCSB4bG9nX3B1dF9icChzdHJ1Y3QgeGZzX2J1ZiAqKTsKIAogZXh0ZXJuIGttZW1fem9uZV90CSp4ZnNfbG9nX3RpY2tldF96b25lOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKaW5kZXggNjlhYzJlNS4uMjJlNmVmZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwpAQCAtNTAsOCArNTAsNiBAQAogCiBTVEFUSUMgaW50CXhsb2dfZmluZF96ZXJvZWQoeGxvZ190ICosIHhmc19kYWRkcl90ICopOwogU1RBVElDIGludAl4bG9nX2NsZWFyX3N0YWxlX2Jsb2Nrcyh4bG9nX3QgKiwgeGZzX2xzbl90KTsKLVNUQVRJQyB2b2lkCXhsb2dfcmVjb3Zlcl9pbnNlcnRfaXRlbV9iYWNrcSh4bG9nX3JlY292ZXJfaXRlbV90ICoqcSwKLQkJCQkJICAgICAgIHhsb2dfcmVjb3Zlcl9pdGVtX3QgKml0ZW0pOwogI2lmIGRlZmluZWQoREVCVUcpCiBTVEFUSUMgdm9pZAl4bG9nX3JlY292ZXJfY2hlY2tfc3VtbWFyeSh4bG9nX3QgKik7CiAjZWxzZQpAQCAtNjgsNyArNjYsNyBAQAogCSgoYmJzICsgKGxvZyktPmxfc2VjdGJiX21hc2sgKyAxKSAmIH4obG9nKS0+bF9zZWN0YmJfbWFzaykgOiAoYmJzKSApCiAjZGVmaW5lIFhMT0dfU0VDVE9SX1JPVU5ERE9XTl9CTEtOTyhsb2csIGJubykJKChibm8pICYgfihsb2cpLT5sX3NlY3RiYl9tYXNrKQogCi14ZnNfYnVmX3QgKgorU1RBVElDIHhmc19idWZfdCAqCiB4bG9nX2dldF9icCgKIAl4bG9nX3QJCSpsb2csCiAJaW50CQluYmJsa3MpCkBAIC04OCw3ICs4Niw3IEBACiAJcmV0dXJuIHhmc19idWZfZ2V0X25vYWRkcihCQlRPQihuYmJsa3MpLCBsb2ctPmxfbXAtPm1fbG9nZGV2X3RhcmdwKTsKIH0KIAotdm9pZAorU1RBVElDIHZvaWQKIHhsb2dfcHV0X2JwKAogCXhmc19idWZfdAkqYnApCiB7CkBAIC04MDUsNyArODAzLDcgQEAKICAqIFdlIGNvdWxkIHNwZWVkIHVwIHNlYXJjaCBieSB1c2luZyBjdXJyZW50IGhlYWRfYmxrIGJ1ZmZlciwgYnV0IGl0IGlzIG5vdAogICogYXZhaWxhYmxlLgogICovCi1pbnQKK1NUQVRJQyBpbnQKIHhsb2dfZmluZF90YWlsKAogCXhsb2dfdAkJCSpsb2csCiAJeGZzX2RhZGRyX3QJCSpoZWFkX2JsaywKQEAgLTEzNjcsMzYgKzEzNjUsNDUgQEAKIAogU1RBVElDIHhsb2dfcmVjb3Zlcl90ICoKIHhsb2dfcmVjb3Zlcl9maW5kX3RpZCgKLQl4bG9nX3JlY292ZXJfdAkJKnEsCisJc3RydWN0IGhsaXN0X2hlYWQJKmhlYWQsCiAJeGxvZ190aWRfdAkJdGlkKQogewotCXhsb2dfcmVjb3Zlcl90CQkqcCA9IHE7CisJeGxvZ19yZWNvdmVyX3QJCSp0cmFuczsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQkqbjsKIAotCXdoaWxlIChwICE9IE5VTEwpIHsKLQkJaWYgKHAtPnJfbG9nX3RpZCA9PSB0aWQpCi0JCSAgICBicmVhazsKLQkJcCA9IHAtPnJfbmV4dDsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywgbiwgaGVhZCwgcl9saXN0KSB7CisJCWlmICh0cmFucy0+cl9sb2dfdGlkID09IHRpZCkKKwkJCXJldHVybiB0cmFuczsKIAl9Ci0JcmV0dXJuIHA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIFNUQVRJQyB2b2lkCi14bG9nX3JlY292ZXJfcHV0X2hhc2hxKAotCXhsb2dfcmVjb3Zlcl90CQkqKnEsCi0JeGxvZ19yZWNvdmVyX3QJCSp0cmFucykKK3hsb2dfcmVjb3Zlcl9uZXdfdGlkKAorCXN0cnVjdCBobGlzdF9oZWFkCSpoZWFkLAorCXhsb2dfdGlkX3QJCXRpZCwKKwl4ZnNfbHNuX3QJCWxzbikKIHsKLQl0cmFucy0+cl9uZXh0ID0gKnE7Ci0JKnEgPSB0cmFuczsKKwl4bG9nX3JlY292ZXJfdAkJKnRyYW5zOworCisJdHJhbnMgPSBrbWVtX3phbGxvYyhzaXplb2YoeGxvZ19yZWNvdmVyX3QpLCBLTV9TTEVFUCk7CisJdHJhbnMtPnJfbG9nX3RpZCAgID0gdGlkOworCXRyYW5zLT5yX2xzbgkgICA9IGxzbjsKKwlJTklUX0xJU1RfSEVBRCgmdHJhbnMtPnJfaXRlbXEpOworCisJSU5JVF9ITElTVF9OT0RFKCZ0cmFucy0+cl9saXN0KTsKKwlobGlzdF9hZGRfaGVhZCgmdHJhbnMtPnJfbGlzdCwgaGVhZCk7CiB9CiAKIFNUQVRJQyB2b2lkCiB4bG9nX3JlY292ZXJfYWRkX2l0ZW0oCi0JeGxvZ19yZWNvdmVyX2l0ZW1fdAkqKml0ZW1xKQorCXN0cnVjdCBsaXN0X2hlYWQJKmhlYWQpCiB7CiAJeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbTsKIAogCWl0ZW0gPSBrbWVtX3phbGxvYyhzaXplb2YoeGxvZ19yZWNvdmVyX2l0ZW1fdCksIEtNX1NMRUVQKTsKLQl4bG9nX3JlY292ZXJfaW5zZXJ0X2l0ZW1fYmFja3EoaXRlbXEsIGl0ZW0pOworCUlOSVRfTElTVF9IRUFEKCZpdGVtLT5yaV9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZpdGVtLT5yaV9saXN0LCBoZWFkKTsKIH0KIAogU1RBVElDIGludApAQCAtMTQwOSw4ICsxNDE2LDcgQEAKIAl4ZnNfY2FkZHJfdAkJcHRyLCBvbGRfcHRyOwogCWludAkJCW9sZF9sZW47CiAKLQlpdGVtID0gdHJhbnMtPnJfaXRlbXE7Ci0JaWYgKGl0ZW0gPT0gTlVMTCkgeworCWlmIChsaXN0X2VtcHR5KCZ0cmFucy0+cl9pdGVtcSkpIHsKIAkJLyogZmluaXNoIGNvcHlpbmcgcmVzdCBvZiB0cmFucyBoZWFkZXIgKi8KIAkJeGxvZ19yZWNvdmVyX2FkZF9pdGVtKCZ0cmFucy0+cl9pdGVtcSk7CiAJCXB0ciA9ICh4ZnNfY2FkZHJfdCkgJnRyYW5zLT5yX3RoZWFkZXIgKwpAQCAtMTQxOCw3ICsxNDI0LDggQEAKIAkJbWVtY3B5KHB0ciwgZHAsIGxlbik7IC8qIGQsIHMsIGwgKi8KIAkJcmV0dXJuIDA7CiAJfQotCWl0ZW0gPSBpdGVtLT5yaV9wcmV2OworCS8qIHRha2UgdGhlIHRhaWwgZW50cnkgKi8KKwlpdGVtID0gbGlzdF9lbnRyeSh0cmFucy0+cl9pdGVtcS5wcmV2LCB4bG9nX3JlY292ZXJfaXRlbV90LCByaV9saXN0KTsKIAogCW9sZF9wdHIgPSBpdGVtLT5yaV9idWZbaXRlbS0+cmlfY250LTFdLmlfYWRkcjsKIAlvbGRfbGVuID0gaXRlbS0+cmlfYnVmW2l0ZW0tPnJpX2NudC0xXS5pX2xlbjsKQEAgLTE0NTUsOCArMTQ2Miw3IEBACiAKIAlpZiAoIWxlbikKIAkJcmV0dXJuIDA7Ci0JaXRlbSA9IHRyYW5zLT5yX2l0ZW1xOwotCWlmIChpdGVtID09IE5VTEwpIHsKKwlpZiAobGlzdF9lbXB0eSgmdHJhbnMtPnJfaXRlbXEpKSB7CiAJCS8qIHdlIG5lZWQgdG8gY2F0Y2ggbG9nIGNvcnJ1cHRpb25zIGhlcmUgKi8KIAkJaWYgKCoodWludCAqKWRwICE9IFhGU19UUkFOU19IRUFERVJfTUFHSUMpIHsKIAkJCXhsb2dfd2FybigiWEZTOiB4bG9nX3JlY292ZXJfYWRkX3RvX3RyYW5zOiAiCkBAIC0xNDc0LDEyICsxNDgwLDE1IEBACiAJbWVtY3B5KHB0ciwgZHAsIGxlbik7CiAJaW5fZiA9ICh4ZnNfaW5vZGVfbG9nX2Zvcm1hdF90ICopcHRyOwogCi0JaWYgKGl0ZW0tPnJpX3ByZXYtPnJpX3RvdGFsICE9IDAgJiYKLQkgICAgIGl0ZW0tPnJpX3ByZXYtPnJpX3RvdGFsID09IGl0ZW0tPnJpX3ByZXYtPnJpX2NudCkgeworCS8qIHRha2UgdGhlIHRhaWwgZW50cnkgKi8KKwlpdGVtID0gbGlzdF9lbnRyeSh0cmFucy0+cl9pdGVtcS5wcmV2LCB4bG9nX3JlY292ZXJfaXRlbV90LCByaV9saXN0KTsKKwlpZiAoaXRlbS0+cmlfdG90YWwgIT0gMCAmJgorCSAgICAgaXRlbS0+cmlfdG90YWwgPT0gaXRlbS0+cmlfY250KSB7CisJCS8qIHRhaWwgaXRlbSBpcyBpbiB1c2UsIGdldCBhIG5ldyBvbmUgKi8KIAkJeGxvZ19yZWNvdmVyX2FkZF9pdGVtKCZ0cmFucy0+cl9pdGVtcSk7CisJCWl0ZW0gPSBsaXN0X2VudHJ5KHRyYW5zLT5yX2l0ZW1xLnByZXYsCisJCQkJCXhsb2dfcmVjb3Zlcl9pdGVtX3QsIHJpX2xpc3QpOwogCX0KLQlpdGVtID0gdHJhbnMtPnJfaXRlbXE7Ci0JaXRlbSA9IGl0ZW0tPnJpX3ByZXY7CiAKIAlpZiAoaXRlbS0+cmlfdG90YWwgPT0gMCkgewkJLyogZmlyc3QgcmVnaW9uIHRvIGJlIGFkZGVkICovCiAJCWlmIChpbl9mLT5pbGZfc2l6ZSA9PSAwIHx8CkBAIC0xNTA0LDk2ICsxNTEzLDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKLVNUQVRJQyB2b2lkCi14bG9nX3JlY292ZXJfbmV3X3RpZCgKLQl4bG9nX3JlY292ZXJfdAkJKipxLAotCXhsb2dfdGlkX3QJCXRpZCwKLQl4ZnNfbHNuX3QJCWxzbikKLXsKLQl4bG9nX3JlY292ZXJfdAkJKnRyYW5zOwotCi0JdHJhbnMgPSBrbWVtX3phbGxvYyhzaXplb2YoeGxvZ19yZWNvdmVyX3QpLCBLTV9TTEVFUCk7Ci0JdHJhbnMtPnJfbG9nX3RpZCAgID0gdGlkOwotCXRyYW5zLT5yX2xzbgkgICA9IGxzbjsKLQl4bG9nX3JlY292ZXJfcHV0X2hhc2hxKHEsIHRyYW5zKTsKLX0KLQotU1RBVElDIGludAoteGxvZ19yZWNvdmVyX3VubGlua190aWQoCi0JeGxvZ19yZWNvdmVyX3QJCSoqcSwKLQl4bG9nX3JlY292ZXJfdAkJKnRyYW5zKQotewotCXhsb2dfcmVjb3Zlcl90CQkqdHA7Ci0JaW50CQkJZm91bmQgPSAwOwotCi0JQVNTRVJUKHRyYW5zICE9IE5VTEwpOwotCWlmICh0cmFucyA9PSAqcSkgewotCQkqcSA9ICgqcSktPnJfbmV4dDsKLQl9IGVsc2UgewotCQl0cCA9ICpxOwotCQl3aGlsZSAodHApIHsKLQkJCWlmICh0cC0+cl9uZXh0ID09IHRyYW5zKSB7Ci0JCQkJZm91bmQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQkJdHAgPSB0cC0+cl9uZXh0OwotCQl9Ci0JCWlmICghZm91bmQpIHsKLQkJCXhsb2dfd2FybigKLQkJCSAgICAgIlhGUzogeGxvZ19yZWNvdmVyX3VubGlua190aWQ6IHRyYW5zIG5vdCBmb3VuZCIpOwotCQkJQVNTRVJUKDApOwotCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCQl9Ci0JCXRwLT5yX25leHQgPSB0cC0+cl9uZXh0LT5yX25leHQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1TVEFUSUMgdm9pZAoteGxvZ19yZWNvdmVyX2luc2VydF9pdGVtX2JhY2txKAotCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKipxLAotCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKml0ZW0pCi17Ci0JaWYgKCpxID09IE5VTEwpIHsKLQkJaXRlbS0+cmlfcHJldiA9IGl0ZW0tPnJpX25leHQgPSBpdGVtOwotCQkqcSA9IGl0ZW07Ci0JfSBlbHNlIHsKLQkJaXRlbS0+cmlfbmV4dAkJPSAqcTsKLQkJaXRlbS0+cmlfcHJldgkJPSAoKnEpLT5yaV9wcmV2OwotCQkoKnEpLT5yaV9wcmV2CQk9IGl0ZW07Ci0JCWl0ZW0tPnJpX3ByZXYtPnJpX25leHQJPSBpdGVtOwotCX0KLX0KLQotU1RBVElDIHZvaWQKLXhsb2dfcmVjb3Zlcl9pbnNlcnRfaXRlbV9mcm9udHEoCi0JeGxvZ19yZWNvdmVyX2l0ZW1fdAkqKnEsCi0JeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbSkKLXsKLQl4bG9nX3JlY292ZXJfaW5zZXJ0X2l0ZW1fYmFja3EocSwgaXRlbSk7Ci0JKnEgPSBpdGVtOwotfQotCisvKgorICogU29ydCB0aGUgbG9nIGl0ZW1zIGluIHRoZSB0cmFuc2FjdGlvbi4gQ2FuY2VsbGVkIGJ1ZmZlcnMgbmVlZAorICogdG8gYmUgcHV0IGZpcnN0IHNvIHRoZXkgYXJlIHByb2Nlc3NlZCBiZWZvcmUgYW55IGl0ZW1zIHRoYXQgbWlnaHQKKyAqIG1vZGlmeSB0aGUgYnVmZmVycy4gSWYgdGhleSBhcmUgY2FuY2VsbGVkLCB0aGVuIHRoZSBtb2RpZmljYXRpb25zCisgKiBkb24ndCBuZWVkIHRvIGJlIHJlcGxheWVkLgorICovCiBTVEFUSUMgaW50CiB4bG9nX3JlY292ZXJfcmVvcmRlcl90cmFucygKIAl4bG9nX3JlY292ZXJfdAkJKnRyYW5zKQogewotCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKmZpcnN0X2l0ZW0sICppdGVtcSwgKml0ZW1xX25leHQ7Ci0JeGZzX2J1Zl9sb2dfZm9ybWF0X3QJKmJ1Zl9mOwotCXVzaG9ydAkJCWZsYWdzID0gMDsKKwl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtLCAqbjsKKwlMSVNUX0hFQUQoc29ydF9saXN0KTsKIAotCWZpcnN0X2l0ZW0gPSBpdGVtcSA9IHRyYW5zLT5yX2l0ZW1xOwotCXRyYW5zLT5yX2l0ZW1xID0gTlVMTDsKLQlkbyB7Ci0JCWl0ZW1xX25leHQgPSBpdGVtcS0+cmlfbmV4dDsKLQkJYnVmX2YgPSAoeGZzX2J1Zl9sb2dfZm9ybWF0X3QgKilpdGVtcS0+cmlfYnVmWzBdLmlfYWRkcjsKKwlsaXN0X3NwbGljZV9pbml0KCZ0cmFucy0+cl9pdGVtcSwgJnNvcnRfbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZW0sIG4sICZzb3J0X2xpc3QsIHJpX2xpc3QpIHsKKwkJeGZzX2J1Zl9sb2dfZm9ybWF0X3QJKmJ1Zl9mOwogCi0JCXN3aXRjaCAoSVRFTV9UWVBFKGl0ZW1xKSkgeworCQlidWZfZiA9ICh4ZnNfYnVmX2xvZ19mb3JtYXRfdCAqKWl0ZW0tPnJpX2J1ZlswXS5pX2FkZHI7CisKKwkJc3dpdGNoIChJVEVNX1RZUEUoaXRlbSkpIHsKIAkJY2FzZSBYRlNfTElfQlVGOgotCQkJZmxhZ3MgPSBidWZfZi0+YmxmX2ZsYWdzOwotCQkJaWYgKCEoZmxhZ3MgJiBYRlNfQkxJX0NBTkNFTCkpIHsKLQkJCQl4bG9nX3JlY292ZXJfaW5zZXJ0X2l0ZW1fZnJvbnRxKCZ0cmFucy0+cl9pdGVtcSwKLQkJCQkJCQkJaXRlbXEpOworCQkJaWYgKCEoYnVmX2YtPmJsZl9mbGFncyAmIFhGU19CTElfQ0FOQ0VMKSkgeworCQkJCWxpc3RfbW92ZSgmaXRlbS0+cmlfbGlzdCwgJnRyYW5zLT5yX2l0ZW1xKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJY2FzZSBYRlNfTElfSU5PREU6CkBAIC0xNjAxLDcgKzE1NDMsNyBAQAogCQljYXNlIFhGU19MSV9RVU9UQU9GRjoKIAkJY2FzZSBYRlNfTElfRUZEOgogCQljYXNlIFhGU19MSV9FRkk6Ci0JCQl4bG9nX3JlY292ZXJfaW5zZXJ0X2l0ZW1fYmFja3EoJnRyYW5zLT5yX2l0ZW1xLCBpdGVtcSk7CisJCQlsaXN0X21vdmVfdGFpbCgmaXRlbS0+cmlfbGlzdCwgJnRyYW5zLT5yX2l0ZW1xKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJeGxvZ193YXJuKApAQCAtMTYwOSw4ICsxNTUxLDggQEAKIAkJCUFTU0VSVCgwKTsKIAkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAkJfQotCQlpdGVtcSA9IGl0ZW1xX25leHQ7Ci0JfSB3aGlsZSAoZmlyc3RfaXRlbSAhPSBpdGVtcSk7CisJfQorCUFTU0VSVChsaXN0X2VtcHR5KCZzb3J0X2xpc3QpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI0Miw5ICsyMTg0LDkgQEAKIAl9CiAKIAltcCA9IGxvZy0+bF9tcDsKLQlidWZfZmxhZ3MgPSBYRlNfQlVGX0xPQ0s7CisJYnVmX2ZsYWdzID0gWEJGX0xPQ0s7CiAJaWYgKCEoZmxhZ3MgJiBYRlNfQkxJX0lOT0RFX0JVRikpCi0JCWJ1Zl9mbGFncyB8PSBYRlNfQlVGX01BUFBFRDsKKwkJYnVmX2ZsYWdzIHw9IFhCRl9NQVBQRUQ7CiAKIAlicCA9IHhmc19idWZfcmVhZChtcC0+bV9kZGV2X3RhcmdwLCBibGtubywgbGVuLCBidWZfZmxhZ3MpOwogCWlmIChYRlNfQlVGX0lTRVJST1IoYnApKSB7CkBAIC0yMzQ2LDcgKzIyODgsNyBAQAogCX0KIAogCWJwID0geGZzX2J1Zl9yZWFkKG1wLT5tX2RkZXZfdGFyZ3AsIGluX2YtPmlsZl9ibGtubywgaW5fZi0+aWxmX2xlbiwKLQkJCSAgWEZTX0JVRl9MT0NLKTsKKwkJCSAgWEJGX0xPQ0spOwogCWlmIChYRlNfQlVGX0lTRVJST1IoYnApKSB7CiAJCXhmc19pb2Vycm9yX2FsZXJ0KCJ4bG9nX3JlY292ZXJfZG8uLihyZWFkIzIpIiwgbXAsCiAJCQkJICBicCwgaW5fZi0+aWxmX2Jsa25vKTsKQEAgLTI4MTQsMTQgKzI3NTYsMTMgQEAKIAlpbnQJCQlwYXNzKQogewogCWludAkJCWVycm9yID0gMDsKLQl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtLCAqZmlyc3RfaXRlbTsKKwl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtOwogCiAJZXJyb3IgPSB4bG9nX3JlY292ZXJfcmVvcmRlcl90cmFucyh0cmFucyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlmaXJzdF9pdGVtID0gaXRlbSA9IHRyYW5zLT5yX2l0ZW1xOwotCWRvIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZW0sICZ0cmFucy0+cl9pdGVtcSwgcmlfbGlzdCkgewogCQlzd2l0Y2ggKElURU1fVFlQRShpdGVtKSkgewogCQljYXNlIFhGU19MSV9CVUY6CiAJCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19idWZmZXJfdHJhbnMobG9nLCBpdGVtLCBwYXNzKTsKQEAgLTI4NTQsOCArMjc5NSw3IEBACiAKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwotCQlpdGVtID0gaXRlbS0+cmlfbmV4dDsKLQl9IHdoaWxlIChmaXJzdF9pdGVtICE9IGl0ZW0pOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjg2OSwyMSArMjgwOSwxOCBAQAogeGxvZ19yZWNvdmVyX2ZyZWVfdHJhbnMoCiAJeGxvZ19yZWNvdmVyX3QJCSp0cmFucykKIHsKLQl4bG9nX3JlY292ZXJfaXRlbV90CSpmaXJzdF9pdGVtLCAqaXRlbSwgKmZyZWVfaXRlbTsKKwl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtLCAqbjsKIAlpbnQJCQlpOwogCi0JaXRlbSA9IGZpcnN0X2l0ZW0gPSB0cmFucy0+cl9pdGVtcTsKLQlkbyB7Ci0JCWZyZWVfaXRlbSA9IGl0ZW07Ci0JCWl0ZW0gPSBpdGVtLT5yaV9uZXh0OwotCQkgLyogRnJlZSB0aGUgcmVnaW9ucyBpbiB0aGUgaXRlbS4gKi8KLQkJZm9yIChpID0gMDsgaSA8IGZyZWVfaXRlbS0+cmlfY250OyBpKyspIHsKLQkJCWttZW1fZnJlZShmcmVlX2l0ZW0tPnJpX2J1ZltpXS5pX2FkZHIpOwotCQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZW0sIG4sICZ0cmFucy0+cl9pdGVtcSwgcmlfbGlzdCkgeworCQkvKiBGcmVlIHRoZSByZWdpb25zIGluIHRoZSBpdGVtLiAqLworCQlsaXN0X2RlbCgmaXRlbS0+cmlfbGlzdCk7CisJCWZvciAoaSA9IDA7IGkgPCBpdGVtLT5yaV9jbnQ7IGkrKykKKwkJCWttZW1fZnJlZShpdGVtLT5yaV9idWZbaV0uaV9hZGRyKTsKIAkJLyogRnJlZSB0aGUgaXRlbSBpdHNlbGYgKi8KLQkJa21lbV9mcmVlKGZyZWVfaXRlbS0+cmlfYnVmKTsKLQkJa21lbV9mcmVlKGZyZWVfaXRlbSk7Ci0JfSB3aGlsZSAoZmlyc3RfaXRlbSAhPSBpdGVtKTsKKwkJa21lbV9mcmVlKGl0ZW0tPnJpX2J1Zik7CisJCWttZW1fZnJlZShpdGVtKTsKKwl9CiAJLyogRnJlZSB0aGUgdHJhbnNhY3Rpb24gcmVjb3ZlciBzdHJ1Y3R1cmUgKi8KIAlrbWVtX2ZyZWUodHJhbnMpOwogfQpAQCAtMjg5MSwxNCArMjgyOCwxMiBAQAogU1RBVElDIGludAogeGxvZ19yZWNvdmVyX2NvbW1pdF90cmFucygKIAl4bG9nX3QJCQkqbG9nLAotCXhsb2dfcmVjb3Zlcl90CQkqKnEsCiAJeGxvZ19yZWNvdmVyX3QJCSp0cmFucywKIAlpbnQJCQlwYXNzKQogewogCWludAkJCWVycm9yOwogCi0JaWYgKChlcnJvciA9IHhsb2dfcmVjb3Zlcl91bmxpbmtfdGlkKHEsIHRyYW5zKSkpCi0JCXJldHVybiBlcnJvcjsKKwlobGlzdF9kZWwoJnRyYW5zLT5yX2xpc3QpOwogCWlmICgoZXJyb3IgPSB4bG9nX3JlY292ZXJfZG9fdHJhbnMobG9nLCB0cmFucywgcGFzcykpKQogCQlyZXR1cm4gZXJyb3I7CiAJeGxvZ19yZWNvdmVyX2ZyZWVfdHJhbnModHJhbnMpOwkJCS8qIG5vIGVycm9yICovCkBAIC0yOTI2LDcgKzI4NjEsNyBAQAogU1RBVElDIGludAogeGxvZ19yZWNvdmVyX3Byb2Nlc3NfZGF0YSgKIAl4bG9nX3QJCQkqbG9nLAotCXhsb2dfcmVjb3Zlcl90CQkqcmhhc2hbXSwKKwlzdHJ1Y3QgaGxpc3RfaGVhZAlyaGFzaFtdLAogCXhsb2dfcmVjX2hlYWRlcl90CSpyaGVhZCwKIAl4ZnNfY2FkZHJfdAkJZHAsCiAJaW50CQkJcGFzcykKQEAgLTI5NjAsNyArMjg5NSw3IEBACiAJCX0KIAkJdGlkID0gYmUzMl90b19jcHUob2hlYWQtPm9oX3RpZCk7CiAJCWhhc2ggPSBYTE9HX1JIQVNIKHRpZCk7Ci0JCXRyYW5zID0geGxvZ19yZWNvdmVyX2ZpbmRfdGlkKHJoYXNoW2hhc2hdLCB0aWQpOworCQl0cmFucyA9IHhsb2dfcmVjb3Zlcl9maW5kX3RpZCgmcmhhc2hbaGFzaF0sIHRpZCk7CiAJCWlmICh0cmFucyA9PSBOVUxMKSB7CQkgICAvKiBub3QgZm91bmQ7IGFkZCBuZXcgdGlkICovCiAJCQlpZiAob2hlYWQtPm9oX2ZsYWdzICYgWExPR19TVEFSVF9UUkFOUykKIAkJCQl4bG9nX3JlY292ZXJfbmV3X3RpZCgmcmhhc2hbaGFzaF0sIHRpZCwKQEAgLTI5NzgsNyArMjkxMyw3IEBACiAJCQlzd2l0Y2ggKGZsYWdzKSB7CiAJCQljYXNlIFhMT0dfQ09NTUlUX1RSQU5TOgogCQkJCWVycm9yID0geGxvZ19yZWNvdmVyX2NvbW1pdF90cmFucyhsb2csCi0JCQkJCQkmcmhhc2hbaGFzaF0sIHRyYW5zLCBwYXNzKTsKKwkJCQkJCQkJdHJhbnMsIHBhc3MpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBYTE9HX1VOTU9VTlRfVFJBTlM6CiAJCQkJZXJyb3IgPSB4bG9nX3JlY292ZXJfdW5tb3VudF90cmFucyh0cmFucyk7CkBAIC0zMjExLDcgKzMxNDYsNyBAQAogCS8qCiAJICogR2V0IHRoZSBvbiBkaXNrIGlub2RlIHRvIGZpbmQgdGhlIG5leHQgaW5vZGUgaW4gdGhlIGJ1Y2tldC4KIAkgKi8KLQllcnJvciA9IHhmc19pdG9icChtcCwgTlVMTCwgaXAsICZkaXAsICZpYnAsIFhGU19CVUZfTE9DSyk7CisJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIE5VTEwsIGlwLCAmZGlwLCAmaWJwLCBYQkZfTE9DSyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWxfaXB1dDsKIApAQCAtMzUxNyw3ICszNDUyLDcgQEAKIAlpbnQJCQllcnJvciA9IDAsIGhfc2l6ZTsKIAlpbnQJCQliYmxrcywgc3BsaXRfYmJsa3M7CiAJaW50CQkJaGJsa3MsIHNwbGl0X2hibGtzLCB3cmFwcGVkX2hibGtzOwotCXhsb2dfcmVjb3Zlcl90CQkqcmhhc2hbWExPR19SSEFTSF9TSVpFXTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAlyaGFzaFtYTE9HX1JIQVNIX1NJWkVdOwogCiAJQVNTRVJUKGhlYWRfYmxrICE9IHRhaWxfYmxrKTsKIApAQCAtMzk3OCw4ICszOTEzLDcgQEAKIAkJICogY2FzZSB0aGUgdW5saW5rIHRyYW5zYWN0aW9ucyB3b3VsZCBoYXZlIHByb2JsZW1zCiAJCSAqIHB1c2hpbmcgdGhlIEVGSXMgb3V0IG9mIHRoZSB3YXkuCiAJCSAqLwotCQl4ZnNfbG9nX2ZvcmNlKGxvZy0+bF9tcCwgKHhmc19sc25fdCkwLAotCQkJICAgICAgKFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpKTsKKwkJeGZzX2xvZ19mb3JjZShsb2ctPmxfbXAsIFhGU19MT0dfU1lOQyk7CiAKIAkJeGxvZ19yZWNvdmVyX3Byb2Nlc3NfaXVubGlua3MobG9nKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5oIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5oCmluZGV4IGIyMjU0NTUuLjc1ZDc0OTIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuaAorKysgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmgKQEAgLTM1LDIyICszNSwyMSBAQAogICogaXRlbSBoZWFkZXJzIGFyZSBpbiByaV9idWZbMF0uICBBZGRpdGlvbmFsIGJ1ZmZlcnMgZm9sbG93LgogICovCiB0eXBlZGVmIHN0cnVjdCB4bG9nX3JlY292ZXJfaXRlbSB7Ci0Jc3RydWN0IHhsb2dfcmVjb3Zlcl9pdGVtICpyaV9uZXh0OwotCXN0cnVjdCB4bG9nX3JlY292ZXJfaXRlbSAqcmlfcHJldjsKLQlpbnQJCQkgcmlfdHlwZTsKLQlpbnQJCQkgcmlfY250OwkvKiBjb3VudCBvZiByZWdpb25zIGZvdW5kICovCi0JaW50CQkJIHJpX3RvdGFsOwkvKiB0b3RhbCByZWdpb25zICovCi0JeGZzX2xvZ19pb3ZlY190CQkgKnJpX2J1ZjsJLyogcHRyIHRvIHJlZ2lvbnMgYnVmZmVyICovCisJc3RydWN0IGxpc3RfaGVhZAlyaV9saXN0OworCWludAkJCXJpX3R5cGU7CisJaW50CQkJcmlfY250OwkvKiBjb3VudCBvZiByZWdpb25zIGZvdW5kICovCisJaW50CQkJcmlfdG90YWw7CS8qIHRvdGFsIHJlZ2lvbnMgKi8KKwl4ZnNfbG9nX2lvdmVjX3QJCSpyaV9idWY7CS8qIHB0ciB0byByZWdpb25zIGJ1ZmZlciAqLwogfSB4bG9nX3JlY292ZXJfaXRlbV90OwogCiBzdHJ1Y3QgeGxvZ190aWQ7CiB0eXBlZGVmIHN0cnVjdCB4bG9nX3JlY292ZXIgewotCXN0cnVjdCB4bG9nX3JlY292ZXIgKnJfbmV4dDsKLQl4bG9nX3RpZF90CSAgICByX2xvZ190aWQ7CQkvKiBsb2cncyB0cmFuc2FjdGlvbiBpZCAqLwotCXhmc190cmFuc19oZWFkZXJfdCAgcl90aGVhZGVyOwkJLyogdHJhbnMgaGVhZGVyIGZvciBwYXJ0aWFsICovCi0JaW50CQkgICAgcl9zdGF0ZTsJCS8qIG5vdCBuZWVkZWQgKi8KLQl4ZnNfbHNuX3QJICAgIHJfbHNuOwkJLyogeGFjdCBsc24gKi8KLQl4bG9nX3JlY292ZXJfaXRlbV90ICpyX2l0ZW1xOwkJLyogcSBmb3IgaXRlbXMgKi8KKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlyX2xpc3Q7CisJeGxvZ190aWRfdAkJcl9sb2dfdGlkOwkvKiBsb2cncyB0cmFuc2FjdGlvbiBpZCAqLworCXhmc190cmFuc19oZWFkZXJfdAlyX3RoZWFkZXI7CS8qIHRyYW5zIGhlYWRlciBmb3IgcGFydGlhbCAqLworCWludAkJCXJfc3RhdGU7CS8qIG5vdCBuZWVkZWQgKi8KKwl4ZnNfbHNuX3QJCXJfbHNuOwkJLyogeGFjdCBsc24gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXJfaXRlbXE7CS8qIHEgZm9yIGl0ZW1zICovCiB9IHhsb2dfcmVjb3Zlcl90OwogCiAjZGVmaW5lIElURU1fVFlQRShpKQkoKih1c2hvcnQgKikoaSktPnJpX2J1ZlswXS5pX2FkZHIpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmMgYi9mcy94ZnMveGZzX21vdW50LmMKaW5kZXggZWI0MDNiNC4uNmFmYWFlYiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5jCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuYwpAQCAtMjAxLDYgKzIwMSwzOCBAQAogCiAKIC8qCisgKiBSZWZlcmVuY2UgY291bnRpbmcgYWNjZXNzIHdyYXBwZXJzIHRvIHRoZSBwZXJhZyBzdHJ1Y3R1cmVzLgorICovCitzdHJ1Y3QgeGZzX3BlcmFnICoKK3hmc19wZXJhZ19nZXQoc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19hZ251bWJlcl90IGFnbm8pCit7CisJc3RydWN0IHhmc19wZXJhZwkqcGFnOworCWludAkJCXJlZiA9IDA7CisKKwlzcGluX2xvY2soJm1wLT5tX3BlcmFnX2xvY2spOworCXBhZyA9IHJhZGl4X3RyZWVfbG9va3VwKCZtcC0+bV9wZXJhZ190cmVlLCBhZ25vKTsKKwlpZiAocGFnKSB7CisJCUFTU0VSVChhdG9taWNfcmVhZCgmcGFnLT5wYWdfcmVmKSA+PSAwKTsKKwkJLyogY2F0Y2ggbGVha3MgaW4gdGhlIHBvc2l0aXZlIGRpcmVjdGlvbiBkdXJpbmcgdGVzdGluZyAqLworCQlBU1NFUlQoYXRvbWljX3JlYWQoJnBhZy0+cGFnX3JlZikgPCAxMDAwKTsKKwkJcmVmID0gYXRvbWljX2luY19yZXR1cm4oJnBhZy0+cGFnX3JlZik7CisJfQorCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ19sb2NrKTsKKwl0cmFjZV94ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vLCByZWYsIF9SRVRfSVBfKTsKKwlyZXR1cm4gcGFnOworfQorCit2b2lkCit4ZnNfcGVyYWdfcHV0KHN0cnVjdCB4ZnNfcGVyYWcgKnBhZykKK3sKKwlpbnQJcmVmOworCisJQVNTRVJUKGF0b21pY19yZWFkKCZwYWctPnBhZ19yZWYpID4gMCk7CisJcmVmID0gYXRvbWljX2RlY19yZXR1cm4oJnBhZy0+cGFnX3JlZik7CisJdHJhY2VfeGZzX3BlcmFnX3B1dChwYWctPnBhZ19tb3VudCwgcGFnLT5wYWdfYWdubywgcmVmLCBfUkVUX0lQXyk7Cit9CisKKy8qCiAgKiBGcmVlIHVwIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgbW91bnQgc3RydWN0dXJlLiAgQXNzdW1lIHRoYXQKICAqIHRoZSBzdHJ1Y3R1cmUgd2FzIGluaXRpYWxseSB6ZXJvZWQsIHNvIHdlIGNhbiB0ZWxsIHdoaWNoIGZpZWxkcyBnb3QKICAqIGluaXRpYWxpemVkLgpAQCAtMjA5LDEzICsyNDEsMTYgQEAKIHhmc19mcmVlX3BlcmFnKAogCXhmc19tb3VudF90CSptcCkKIHsKLQlpZiAobXAtPm1fcGVyYWcpIHsKLQkJaW50CWFnbm87CisJeGZzX2FnbnVtYmVyX3QJYWdubzsKKwlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CiAKLQkJZm9yIChhZ25vID0gMDsgYWdubyA8IG1wLT5tX21heGFnaTsgYWdubysrKQotCQkJaWYgKG1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbGlzdCkKLQkJCQlrbWVtX2ZyZWUobXAtPm1fcGVyYWdbYWdub10ucGFnYl9saXN0KTsKLQkJa21lbV9mcmVlKG1wLT5tX3BlcmFnKTsKKwlmb3IgKGFnbm8gPSAwOyBhZ25vIDwgbXAtPm1fc2Iuc2JfYWdjb3VudDsgYWdubysrKSB7CisJCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdfbG9jayk7CisJCXBhZyA9IHJhZGl4X3RyZWVfZGVsZXRlKCZtcC0+bV9wZXJhZ190cmVlLCBhZ25vKTsKKwkJQVNTRVJUKHBhZyk7CisJCUFTU0VSVChhdG9taWNfcmVhZCgmcGFnLT5wYWdfcmVmKSA9PSAwKTsKKwkJc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnX2xvY2spOworCQlrbWVtX2ZyZWUocGFnKTsKIAl9CiB9CiAKQEAgLTM4OSwyMiArNDI0LDU3IEBACiAJfQogfQogCi14ZnNfYWdudW1iZXJfdAoraW50CiB4ZnNfaW5pdGlhbGl6ZV9wZXJhZygKIAl4ZnNfbW91bnRfdAkqbXAsCi0JeGZzX2FnbnVtYmVyX3QJYWdjb3VudCkKKwl4ZnNfYWdudW1iZXJfdAlhZ2NvdW50LAorCXhmc19hZ251bWJlcl90CSptYXhhZ2kpCiB7CiAJeGZzX2FnbnVtYmVyX3QJaW5kZXgsIG1heF9tZXRhZGF0YTsKKwl4ZnNfYWdudW1iZXJfdAlmaXJzdF9pbml0aWFsaXNlZCA9IDA7CiAJeGZzX3BlcmFnX3QJKnBhZzsKIAl4ZnNfYWdpbm9fdAlhZ2lubzsKIAl4ZnNfaW5vX3QJaW5vOwogCXhmc19zYl90CSpzYnAgPSAmbXAtPm1fc2I7CiAJeGZzX2lub190CW1heF9pbnVtID0gWEZTX01BWElOVU1CRVJfMzI7CisJaW50CQllcnJvciA9IC1FTk9NRU07CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgdGhlIGZpbGVzeXN0ZW0gY2FuIG92ZXJmbG93IDMyIGJpdCBpbm9kZXMgKi8KIAlhZ2lubyA9IFhGU19PRkZCTk9fVE9fQUdJTk8obXAsIHNicC0+c2JfYWdibG9ja3MgLSAxLCAwKTsKIAlpbm8gPSBYRlNfQUdJTk9fVE9fSU5PKG1wLCBhZ2NvdW50IC0gMSwgYWdpbm8pOwogCisJLyoKKwkgKiBXYWxrIHRoZSBjdXJyZW50IHBlci1hZyB0cmVlIHNvIHdlIGRvbid0IHRyeSB0byBpbml0aWFsaXNlIEFHcworCSAqIHRoYXQgYWxyZWFkeSBleGlzdCAoZ3Jvd2ZzIGNhc2UpLiBBbGxvY2F0ZSBhbmQgaW5zZXJ0IGFsbCB0aGUKKwkgKiBBR3Mgd2UgZG9uJ3QgZmluZCByZWFkeSBmb3IgaW5pdGlhbGlzYXRpb24uCisJICovCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYWdjb3VudDsgaW5kZXgrKykgeworCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBpbmRleCk7CisJCWlmIChwYWcpIHsKKwkJCXhmc19wZXJhZ19wdXQocGFnKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghZmlyc3RfaW5pdGlhbGlzZWQpCisJCQlmaXJzdF9pbml0aWFsaXNlZCA9IGluZGV4OworCQlwYWcgPSBrbWVtX3phbGxvYyhzaXplb2YoKnBhZyksIEtNX01BWUZBSUwpOworCQlpZiAoIXBhZykKKwkJCWdvdG8gb3V0X3Vud2luZDsKKwkJaWYgKHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfTk9GUykpCisJCQlnb3RvIG91dF91bndpbmQ7CisJCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdfbG9jayk7CisJCWlmIChyYWRpeF90cmVlX2luc2VydCgmbXAtPm1fcGVyYWdfdHJlZSwgaW5kZXgsIHBhZykpIHsKKwkJCUJVRygpOworCQkJc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnX2xvY2spOworCQkJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCQkJZXJyb3IgPSAtRUVYSVNUOworCQkJZ290byBvdXRfdW53aW5kOworCQl9CisJCXBhZy0+cGFnX2Fnbm8gPSBpbmRleDsKKwkJcGFnLT5wYWdfbW91bnQgPSBtcDsKKwkJc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnX2xvY2spOworCQlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CisJfQorCiAJLyogQ2xlYXIgdGhlIG1vdW50IGZsYWcgaWYgbm8gaW5vZGUgY2FuIG92ZXJmbG93IDMyIGJpdHMKIAkgKiBvbiB0aGlzIGZpbGVzeXN0ZW0sIG9yIGlmIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQuLgogCSAqLwpAQCAtNDM4LDIxICs1MDgsMzMgQEAKIAkJCX0KIAogCQkJLyogVGhpcyBhZyBpcyBwcmVmZXJyZWQgZm9yIGlub2RlcyAqLwotCQkJcGFnID0gJm1wLT5tX3BlcmFnW2luZGV4XTsKKwkJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGluZGV4KTsKIAkJCXBhZy0+cGFnaV9pbm9kZW9rID0gMTsKIAkJCWlmIChpbmRleCA8IG1heF9tZXRhZGF0YSkKIAkJCQlwYWctPnBhZ2ZfbWV0YWRhdGEgPSAxOwogCQkJeGZzX2luaXRpYWxpemVfcGVyYWdfaWNhY2hlKHBhZyk7CisJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBTZXR1cCBkZWZhdWx0IGJlaGF2aW9yIGZvciBzbWFsbGVyIGZpbGVzeXN0ZW1zICovCiAJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFnY291bnQ7IGluZGV4KyspIHsKLQkJCXBhZyA9ICZtcC0+bV9wZXJhZ1tpbmRleF07CisJCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBpbmRleCk7CiAJCQlwYWctPnBhZ2lfaW5vZGVvayA9IDE7CiAJCQl4ZnNfaW5pdGlhbGl6ZV9wZXJhZ19pY2FjaGUocGFnKTsKKwkJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJfQogCX0KLQlyZXR1cm4gaW5kZXg7CisJaWYgKG1heGFnaSkKKwkJKm1heGFnaSA9IGluZGV4OworCXJldHVybiAwOworCitvdXRfdW53aW5kOgorCWttZW1fZnJlZShwYWcpOworCWZvciAoOyBpbmRleCA+IGZpcnN0X2luaXRpYWxpc2VkOyBpbmRleC0tKSB7CisJCXBhZyA9IHJhZGl4X3RyZWVfZGVsZXRlKCZtcC0+bV9wZXJhZ190cmVlLCBpbmRleCk7CisJCWttZW1fZnJlZShwYWcpOworCX0KKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHZvaWQKQEAgLTU4Myw3ICs2NjUsNyBAQAogCSAqIGFjY2VzcyB0byB0aGUgc3VwZXJibG9jay4KIAkgKi8KIAlzZWN0b3Jfc2l6ZSA9IHhmc19nZXRzaXplX2J1ZnRhcmcobXAtPm1fZGRldl90YXJncCk7Ci0JZXh0cmFfZmxhZ3MgPSBYRlNfQlVGX0xPQ0sgfCBYRlNfQlVGX01BTkFHRSB8IFhGU19CVUZfTUFQUEVEOworCWV4dHJhX2ZsYWdzID0gWEJGX0xPQ0sgfCBYQkZfRlNfTUFOQUdFRCB8IFhCRl9NQVBQRUQ7CiAKIAlicCA9IHhmc19idWZfcmVhZChtcC0+bV9kZGV2X3RhcmdwLCBYRlNfU0JfREFERFIsIEJUT0JCKHNlY3Rvcl9zaXplKSwKIAkJCSAgZXh0cmFfZmxhZ3MpOwpAQCAtNzMxLDEyICs4MTMsMTMgQEAKIAkJZXJyb3IgPSB4ZnNfaWFsbG9jX3BhZ2lfaW5pdChtcCwgTlVMTCwgaW5kZXgpOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7Ci0JCXBhZyA9ICZtcC0+bV9wZXJhZ1tpbmRleF07CisJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGluZGV4KTsKIAkJaWZyZWUgKz0gcGFnLT5wYWdpX2ZyZWVjb3VudDsKIAkJaWFsbG9jICs9IHBhZy0+cGFnaV9jb3VudDsKIAkJYmZyZWUgKz0gcGFnLT5wYWdmX2ZyZWVibGtzOwogCQliZnJlZWxzdCArPSBwYWctPnBhZ2ZfZmxjb3VudDsKIAkJYnRyZWUgKz0gcGFnLT5wYWdmX2J0cmVlYmxrczsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCX0KIAkvKgogCSAqIE92ZXJ3cml0ZSBpbmNvcmUgc3VwZXJibG9jayBjb3VudGVycyB3aXRoIGp1c3QtcmVhZCBkYXRhCkBAIC0xMDA4LDYgKzEwOTEsMjIgQEAKIAlyZXR1cm4geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CiB9CiAKK19fdWludDY0X3QKK3hmc19kZWZhdWx0X3Jlc2Jsa3MoeGZzX21vdW50X3QgKm1wKQoreworCV9fdWludDY0X3QgcmVzYmxrczsKKworCS8qCisJICogV2UgZGVmYXVsdCB0byA1JSBvciAxMDI0IGZzYnMgb2Ygc3BhY2UgcmVzZXJ2ZWQsIHdoaWNoZXZlciBpcyBzbWFsbGVyLgorCSAqIFRoaXMgbWF5IGRyaXZlIHVzIHN0cmFpZ2h0IHRvIEVOT1NQQyBvbiBtb3VudCwgYnV0IHRoYXQgaW1wbGllcworCSAqIHdlIHdlcmUgYWxyZWFkeSB0aGVyZSBvbiB0aGUgbGFzdCB1bm1vdW50LiBXYXJuIGlmIHRoaXMgb2NjdXJzLgorCSAqLworCXJlc2Jsa3MgPSBtcC0+bV9zYi5zYl9kYmxvY2tzOworCWRvX2RpdihyZXNibGtzLCAyMCk7CisJcmVzYmxrcyA9IG1pbl90KF9fdWludDY0X3QsIHJlc2Jsa3MsIDEwMjQpOworCXJldHVybiByZXNibGtzOworfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBmb2xsb3dpbmcgb24gYW4gaW5pdGlhbCBtb3VudCBvZiBhIGZpbGUgc3lzdGVtOgogICoJLSByZWFkcyB0aGUgc3VwZXJibG9jayBmcm9tIGRpc2sgYW5kIGluaXQgdGhlIG1vdW50IHN0cnVjdApAQCAtMTE1MiwxMyArMTI1MSwxMyBAQAogCS8qCiAJICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIHBlci1hZyBkYXRhLgogCSAqLwotCWluaXRfcndzZW0oJm1wLT5tX3BlcmFnbG9jayk7Ci0JbXAtPm1fcGVyYWcgPSBrbWVtX3phbGxvYyhzYnAtPnNiX2FnY291bnQgKiBzaXplb2YoeGZzX3BlcmFnX3QpLAotCQkJCSAgS01fTUFZRkFJTCk7Ci0JaWYgKCFtcC0+bV9wZXJhZykKKwlzcGluX2xvY2tfaW5pdCgmbXAtPm1fcGVyYWdfbG9jayk7CisJSU5JVF9SQURJWF9UUkVFKCZtcC0+bV9wZXJhZ190cmVlLCBHRlBfTk9GUyk7CisJZXJyb3IgPSB4ZnNfaW5pdGlhbGl6ZV9wZXJhZyhtcCwgc2JwLT5zYl9hZ2NvdW50LCAmbXAtPm1fbWF4YWdpKTsKKwlpZiAoZXJyb3IpIHsKKwkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBGYWlsZWQgcGVyLWFnIGluaXQ6ICVkIiwgZXJyb3IpOwogCQlnb3RvIG91dF9yZW1vdmVfdXVpZDsKLQotCW1wLT5tX21heGFnaSA9IHhmc19pbml0aWFsaXplX3BlcmFnKG1wLCBzYnAtPnNiX2FnY291bnQpOworCX0KIAogCWlmICghc2JwLT5zYl9sb2dibG9ja3MpIHsKIAkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBubyBsb2cgZGVmaW5lZCIpOwpAQCAtMTMxOCwxOCArMTQxNywxNCBAQAogCSAqIHdoZW4gYXQgRU5PU1BDLiBUaGlzIGlzIG5lZWRlZCBmb3Igb3BlcmF0aW9ucyBsaWtlIGNyZWF0ZSB3aXRoCiAJICogYXR0ciwgdW53cml0dGVuIGV4dGVudCBjb252ZXJzaW9uIGF0IEVOT1NQQywgZXRjLiBEYXRhIGFsbG9jYXRpb25zCiAJICogYXJlIG5vdCBhbGxvd2VkIHRvIHVzZSB0aGlzIHJlc2VydmVkIHNwYWNlLgotCSAqCi0JICogV2UgZGVmYXVsdCB0byA1JSBvciAxMDI0IGZzYnMgb2Ygc3BhY2UgcmVzZXJ2ZWQsIHdoaWNoZXZlciBpcyBzbWFsbGVyLgotCSAqIFRoaXMgbWF5IGRyaXZlIHVzIHN0cmFpZ2h0IHRvIEVOT1NQQyBvbiBtb3VudCwgYnV0IHRoYXQgaW1wbGllcwotCSAqIHdlIHdlcmUgYWxyZWFkeSB0aGVyZSBvbiB0aGUgbGFzdCB1bm1vdW50LiBXYXJuIGlmIHRoaXMgb2NjdXJzLgogCSAqLwotCXJlc2Jsa3MgPSBtcC0+bV9zYi5zYl9kYmxvY2tzOwotCWRvX2RpdihyZXNibGtzLCAyMCk7Ci0JcmVzYmxrcyA9IG1pbl90KF9fdWludDY0X3QsIHJlc2Jsa3MsIDEwMjQpOwotCWVycm9yID0geGZzX3Jlc2VydmVfYmxvY2tzKG1wLCAmcmVzYmxrcywgTlVMTCk7Ci0JaWYgKGVycm9yKQotCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IFVuYWJsZSB0byBhbGxvY2F0ZSByZXNlcnZlIGJsb2Nrcy4gIgotCQkJCSJDb250aW51aW5nIHdpdGhvdXQgYSByZXNlcnZlIHBvb2wuIik7CisJaWYgKCEobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKSkgeworCQlyZXNibGtzID0geGZzX2RlZmF1bHRfcmVzYmxrcyhtcCk7CisJCWVycm9yID0geGZzX3Jlc2VydmVfYmxvY2tzKG1wLCAmcmVzYmxrcywgTlVMTCk7CisJCWlmIChlcnJvcikKKwkJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogVW5hYmxlIHRvIGFsbG9jYXRlIHJlc2VydmUgIgorCQkJCSJibG9ja3MuIENvbnRpbnVpbmcgd2l0aG91dCBhIHJlc2VydmUgcG9vbC4iKTsKKwl9CiAKIAlyZXR1cm4gMDsKIApAQCAtMTM3Miw4ICsxNDY3LDE5IEBACiAJICogcHVzaCBvdXQgdGhlIGljbG9nIHdlIHdpbGwgbmV2ZXIgZ2V0IHRoYXQgdW5sb2NrZWQuIGhlbmNlIHdlCiAJICogbmVlZCB0byBmb3JjZSB0aGUgbG9nIGZpcnN0LgogCSAqLwotCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSB8IFhGU19MT0dfU1lOQyk7Ci0JeGZzX3JlY2xhaW1faW5vZGVzKG1wLCBYRlNfSUZMVVNIX0FTWU5DKTsKKwl4ZnNfbG9nX2ZvcmNlKG1wLCBYRlNfTE9HX1NZTkMpOworCisJLyoKKwkgKiBEbyBhIGRlbHdyaSByZWNsYWltIHBhc3MgZmlyc3Qgc28gdGhhdCBhcyBtYW55IGRpcnR5IGlub2RlcyBhcmUKKwkgKiBxdWV1ZWQgdXAgZm9yIElPIGFzIHBvc3NpYmxlLiBUaGVuIGZsdXNoIHRoZSBidWZmZXJzIGJlZm9yZSBtYWtpbmcKKwkgKiBhIHN5bmNocm9ub3VzIHBhdGggdG8gY2F0Y2ggYWxsIHRoZSByZW1haW5pbmcgaW5vZGVzIGFyZSByZWNsYWltZWQuCisJICogVGhpcyBtYWtlcyB0aGUgcmVjbGFpbSBwcm9jZXNzIGFzIHF1aWNrIGFzIHBvc3NpYmxlIGJ5IGF2b2lkaW5nCisJICogc3luY2hyb25vdXMgd3JpdGVvdXQgYW5kIGJsb2NraW5nIG9uIGlub2RlcyBhbHJlYWR5IGluIHRoZSBkZWx3cmkKKwkgKiBzdGF0ZSBhcyBtdWNoIGFzIHBvc3NpYmxlLgorCSAqLworCXhmc19yZWNsYWltX2lub2RlcyhtcCwgMCk7CisJWEZTX2JmbHVzaChtcC0+bV9kZGV2X3RhcmdwKTsKKwl4ZnNfcmVjbGFpbV9pbm9kZXMobXAsIFNZTkNfV0FJVCk7CiAKIAl4ZnNfcW1fdW5tb3VudChtcCk7CiAKQEAgLTEzODIsNyArMTQ4OCw3IEBACiAJICogdGhhdCBub3RoaW5nIGlzIHBpbm5lZC4gIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgYmZsdXNoKCkKIAkgKiB3aWxsIHNraXAgcGlubmVkIGJ1ZmZlcnMuCiAJICovCi0JeGZzX2xvZ19mb3JjZShtcCwgKHhmc19sc25fdCkwLCBYRlNfTE9HX0ZPUkNFIHwgWEZTX0xPR19TWU5DKTsKKwl4ZnNfbG9nX2ZvcmNlKG1wLCBYRlNfTE9HX1NZTkMpOwogCiAJeGZzX2JpbnZhbChtcC0+bV9kZGV2X3RhcmdwKTsKIAlpZiAobXAtPm1fcnRkZXZfdGFyZ3ApIHsKQEAgLTE1NDgsMTUgKzE2NTQsMTQgQEAKIAl4ZnNfc2JfdG9fZGlzayhYRlNfQlVGX1RPX1NCUChicCksICZtcC0+bV9zYiwgZmllbGRzKTsKIAogCS8qIGZpbmQgbW9kaWZpZWQgcmFuZ2UgKi8KKwlmID0gKHhmc19zYl9maWVsZF90KXhmc19oaWdoYml0NjQoKF9fdWludDY0X3QpZmllbGRzKTsKKwlBU1NFUlQoKDFMTCA8PCBmKSAmIFhGU19TQl9NT0RfQklUUyk7CisJbGFzdCA9IHhmc19zYl9pbmZvW2YgKyAxXS5vZmZzZXQgLSAxOwogCiAJZiA9ICh4ZnNfc2JfZmllbGRfdCl4ZnNfbG93Yml0NjQoKF9fdWludDY0X3QpZmllbGRzKTsKIAlBU1NFUlQoKDFMTCA8PCBmKSAmIFhGU19TQl9NT0RfQklUUyk7CiAJZmlyc3QgPSB4ZnNfc2JfaW5mb1tmXS5vZmZzZXQ7CiAKLQlmID0gKHhmc19zYl9maWVsZF90KXhmc19oaWdoYml0NjQoKF9fdWludDY0X3QpZmllbGRzKTsKLQlBU1NFUlQoKDFMTCA8PCBmKSAmIFhGU19TQl9NT0RfQklUUyk7Ci0JbGFzdCA9IHhmc19zYl9pbmZvW2YgKyAxXS5vZmZzZXQgLSAxOwotCiAJeGZzX3RyYW5zX2xvZ19idWYodHAsIGJwLCBmaXJzdCwgbGFzdCk7CiB9CiAKQEAgLTE4ODcsNyArMTk5Miw3IEBACiAKIAlBU1NFUlQobXAtPm1fc2JfYnAgIT0gTlVMTCk7CiAJYnAgPSBtcC0+bV9zYl9icDsKLQlpZiAoZmxhZ3MgJiBYRlNfQlVGX1RSWUxPQ0spIHsKKwlpZiAoZmxhZ3MgJiBYQkZfVFJZTE9DSykgewogCQlpZiAoIVhGU19CVUZfQ1BTRU1BKGJwKSkgewogCQkJcmV0dXJuIE5VTEw7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuaCBiL2ZzL3hmcy94ZnNfbW91bnQuaAppbmRleCAxZGY3ZTQ1Li43MDUwNGZjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21vdW50LmgKKysrIGIvZnMveGZzL3hmc19tb3VudC5oCkBAIC03OCw3ICs3OCw4IEBACiB0eXBlZGVmIGludAkoKnhmc19zZW5kX25hbWVzcF90KShkbV9ldmVudHR5cGVfdCwgc3RydWN0IHhmc19tb3VudCAqLAogCQkJc3RydWN0IHhmc19pbm9kZSAqLCBkbV9yaWdodF90LAogCQkJc3RydWN0IHhmc19pbm9kZSAqLCBkbV9yaWdodF90LAotCQkJY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIG1vZGVfdCwgaW50LCBpbnQpOworCQkJY29uc3QgdW5zaWduZWQgY2hhciAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosCisJCQltb2RlX3QsIGludCwgaW50KTsKIHR5cGVkZWYgaW50CSgqeGZzX3NlbmRfbW91bnRfdCkoc3RydWN0IHhmc19tb3VudCAqLCBkbV9yaWdodF90LAogCQkJY2hhciAqLCBjaGFyICopOwogdHlwZWRlZiB2b2lkCSgqeGZzX3NlbmRfdW5tb3VudF90KShzdHJ1Y3QgeGZzX21vdW50ICosIHN0cnVjdCB4ZnNfaW5vZGUgKiwKQEAgLTIwNyw4ICsyMDgsOCBAQAogCXVpbnQJCQltX2FnX21heGxldmVsczsJLyogWEZTX0FHX01BWExFVkVMUyAqLwogCXVpbnQJCQltX2JtX21heGxldmVsc1syXTsgLyogWEZTX0JNX01BWExFVkVMUyAqLwogCXVpbnQJCQltX2luX21heGxldmVsczsJLyogbWF4IGlub2J0IGJ0cmVlIGxldmVscy4gKi8KLQlzdHJ1Y3QgeGZzX3BlcmFnCSptX3BlcmFnOwkvKiBwZXItYWcgYWNjb3VudGluZyBpbmZvICovCi0Jc3RydWN0IHJ3X3NlbWFwaG9yZQltX3BlcmFnbG9jazsJLyogbG9jayBmb3IgbV9wZXJhZyAocG9pbnRlcikgKi8KKwlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290CW1fcGVyYWdfdHJlZTsJLyogcGVyLWFnIGFjY291bnRpbmcgaW5mbyAqLworCXNwaW5sb2NrX3QJCW1fcGVyYWdfbG9jazsJLyogbG9jayBmb3IgbV9wZXJhZ190cmVlICovCiAJc3RydWN0IG11dGV4CQltX2dyb3dsb2NrOwkvKiBncm93ZnMgbXV0ZXggKi8KIAlpbnQJCQltX2ZpeGVkZnNpZFsyXTsJLyogdW5jaGFuZ2VkIGZvciBsaWZlIG9mIEZTICovCiAJdWludAkJCW1fZG1ldm1hc2s7CS8qIERNSSBldmVudHMgZm9yIHRoaXMgRlMgKi8KQEAgLTIyNCw2ICsyMjUsNyBAQAogCV9fdWludDY0X3QJCW1fbWF4aW9mZnNldDsJLyogbWF4aW11bSBpbm9kZSBvZmZzZXQgKi8KIAlfX3VpbnQ2NF90CQltX3Jlc2Jsa3M7CS8qIHRvdGFsIHJlc2VydmVkIGJsb2NrcyAqLwogCV9fdWludDY0X3QJCW1fcmVzYmxrc19hdmFpbDsvKiBhdmFpbGFibGUgcmVzZXJ2ZWQgYmxvY2tzICovCisJX191aW50NjRfdAkJbV9yZXNibGtzX3NhdmU7CS8qIHJlc2VydmVkIGJsa3MgQCByZW1vdW50LHJvICovCiAJaW50CQkJbV9kYWxpZ247CS8qIHN0cmlwZSB1bml0ICovCiAJaW50CQkJbV9zd2lkdGg7CS8qIHN0cmlwZSB3aWR0aCAqLwogCWludAkJCW1fc2lub2FsaWduOwkvKiBzdHJpcGUgdW5pdCBpbm9kZSBhbGlnbm1lbnQgKi8KQEAgLTM4NCwxOSArMzg2LDEwIEBACiB9CiAKIC8qCi0gKiBwZXJhZyBnZXQvcHV0IHdyYXBwZXJzIGZvciBldmVudHVhbCByZWYgY291bnRpbmcKKyAqIHBlcmFnIGdldC9wdXQgd3JhcHBlcnMgZm9yIHJlZiBjb3VudGluZwogICovCi1zdGF0aWMgaW5saW5lIHhmc19wZXJhZ190ICoKLXhmc19nZXRfcGVyYWcoc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19pbm9fdCBpbm8pCi17Ci0JcmV0dXJuICZtcC0+bV9wZXJhZ1tYRlNfSU5PX1RPX0FHTk8obXAsIGlubyldOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXhmc19wdXRfcGVyYWcoc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19wZXJhZ190ICpwYWcpCi17Ci0JLyogbm90aGluZyB0byBzZWUgaGVyZSwgbW92ZSBhbG9uZyAqLwotfQorc3RydWN0IHhmc19wZXJhZyAqeGZzX3BlcmFnX2dldChzdHJ1Y3QgeGZzX21vdW50ICptcCwgeGZzX2FnbnVtYmVyX3QgYWdubyk7Cit2b2lkCXhmc19wZXJhZ19wdXQoc3RydWN0IHhmc19wZXJhZyAqcGFnKTsKIAogLyoKICAqIFBlci1jcHUgc3VwZXJibG9jayBsb2NraW5nIGZ1bmN0aW9ucwpAQCAtNDI4LDYgKzQyMSw3IEBACiB9IHhmc19tb2Rfc2JfdDsKIAogZXh0ZXJuIGludAl4ZnNfbG9nX3NiY291bnQoeGZzX21vdW50X3QgKiwgdWludCk7CitleHRlcm4gX191aW50NjRfdCB4ZnNfZGVmYXVsdF9yZXNibGtzKHhmc19tb3VudF90ICptcCk7CiBleHRlcm4gaW50CXhmc19tb3VudGZzKHhmc19tb3VudF90ICptcCk7CiAKIGV4dGVybiB2b2lkCXhmc191bm1vdW50ZnMoeGZzX21vdW50X3QgKik7CkBAIC00NTAsNyArNDQ0LDggQEAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKIGV4dGVybiB2b2lkCXhmc19tb2Rfc2Ioc3RydWN0IHhmc190cmFucyAqLCBfX2ludDY0X3QpOwotZXh0ZXJuIHhmc19hZ251bWJlcl90CXhmc19pbml0aWFsaXplX3BlcmFnKHN0cnVjdCB4ZnNfbW91bnQgKiwgeGZzX2FnbnVtYmVyX3QpOworZXh0ZXJuIGludAl4ZnNfaW5pdGlhbGl6ZV9wZXJhZyhzdHJ1Y3QgeGZzX21vdW50ICosIHhmc19hZ251bWJlcl90LAorCQkJCQl4ZnNfYWdudW1iZXJfdCAqKTsKIGV4dGVybiB2b2lkCXhmc19zYl9mcm9tX2Rpc2soc3RydWN0IHhmc19zYiAqLCBzdHJ1Y3QgeGZzX2RzYiAqKTsKIGV4dGVybiB2b2lkCXhmc19zYl90b19kaXNrKHN0cnVjdCB4ZnNfZHNiICosIHN0cnVjdCB4ZnNfc2IgKiwgX19pbnQ2NF90KTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tcnVfY2FjaGUuYyBiL2ZzL3hmcy94ZnNfbXJ1X2NhY2hlLmMKaW5kZXggNGIwNjEzZC4uNDVjZTE1ZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tcnVfY2FjaGUuYworKysgYi9mcy94ZnMveGZzX21ydV9jYWNoZS5jCkBAIC0zOTgsNyArMzk4LDcgQEAKICAqIGd1YXJhbnRlZWQgdGhhdCBhbGwgdGhlIGZyZWUgZnVuY3Rpb25zIGZvciBhbGwgdGhlIGVsZW1lbnRzIGhhdmUgZmluaXNoZWQKICAqIGV4ZWN1dGluZyBhbmQgdGhlIHJlYXBlciBpcyBub3QgcnVubmluZy4KICAqLwotdm9pZAorc3RhdGljIHZvaWQKIHhmc19tcnVfY2FjaGVfZmx1c2goCiAJeGZzX21ydV9jYWNoZV90CQkqbXJ1KQogewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tcnVfY2FjaGUuaCBiL2ZzL3hmcy94ZnNfbXJ1X2NhY2hlLmgKaW5kZXggNWQ0MzlmMy4uMzZkZDNlYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tcnVfY2FjaGUuaAorKysgYi9mcy94ZnMveGZzX21ydV9jYWNoZS5oCkBAIC00Miw3ICs0Miw2IEBACiBpbnQgeGZzX21ydV9jYWNoZV9jcmVhdGUoc3RydWN0IHhmc19tcnVfY2FjaGUgKiptcnVwLCB1bnNpZ25lZCBpbnQgbGlmZXRpbWVfbXMsCiAJCQkgICAgIHVuc2lnbmVkIGludCBncnBfY291bnQsCiAJCQkgICAgIHhmc19tcnVfY2FjaGVfZnJlZV9mdW5jX3QgZnJlZV9mdW5jKTsKLXZvaWQgeGZzX21ydV9jYWNoZV9mbHVzaCh4ZnNfbXJ1X2NhY2hlX3QgKm1ydSk7CiB2b2lkIHhmc19tcnVfY2FjaGVfZGVzdHJveShzdHJ1Y3QgeGZzX21ydV9jYWNoZSAqbXJ1KTsKIGludCB4ZnNfbXJ1X2NhY2hlX2luc2VydChzdHJ1Y3QgeGZzX21ydV9jYWNoZSAqbXJ1LCB1bnNpZ25lZCBsb25nIGtleSwKIAkJCQl2b2lkICp2YWx1ZSk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3F1b3RhLmggYi9mcy94ZnMveGZzX3F1b3RhLmgKaW5kZXggOTFiZmQ2MC4uZmRjYWIzZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19xdW90YS5oCisrKyBiL2ZzL3hmcy94ZnNfcXVvdGEuaApAQCAtMjIzLDE2ICsyMjMsOSBAQAogI2RlZmluZSBYRlNfUU1PUFRfUkVTX0lOT1MJMHgwODAwMDAwCiAKIC8qCi0gKiBmbGFncyBmb3IgZHFmbHVzaCBhbmQgZHFmbHVzaF9hbGwuCi0gKi8KLSNkZWZpbmUgWEZTX1FNT1BUX1NZTkMJCTB4MTAwMDAwMAotI2RlZmluZSBYRlNfUU1PUFRfQVNZTkMJCTB4MjAwMDAwMAotI2RlZmluZSBYRlNfUU1PUFRfREVMV1JJCTB4NDAwMDAwMAotCi0vKgogICogZmxhZ3MgZm9yIGRxYWxsb2MuCiAgKi8KLSNkZWZpbmUgWEZTX1FNT1BUX0lOSEVSSVQJMHg4MDAwMDAwCisjZGVmaW5lIFhGU19RTU9QVF9JTkhFUklUCTB4MTAwMDAwMAogCiAvKgogICogZmxhZ3MgdG8geGZzX3RyYW5zX21vZF9kcXVvdC4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcncuYyBiL2ZzL3hmcy94ZnNfcncuYwppbmRleCA1YWEwN2NhLi5lMzM2NzQyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3J3LmMKKysrIGIvZnMveGZzL3hmc19ydy5jCkBAIC00Nyw0OCArNDcsNiBAQAogI2luY2x1ZGUgInhmc190cmFjZS5oIgogCiAvKgotICogVGhpcyBpcyBhIHN1YnJvdXRpbmUgZm9yIHhmc193cml0ZSgpIGFuZCBvdGhlciB3cml0ZXJzICh4ZnNfaW9jdGwpCi0gKiB3aGljaCBjbGVhcnMgdGhlIHNldHVpZCBhbmQgc2V0Z2lkIGJpdHMgd2hlbiBhIGZpbGUgaXMgd3JpdHRlbi4KLSAqLwotaW50Ci14ZnNfd3JpdGVfY2xlYXJfc2V0dWlkKAotCXhmc19pbm9kZV90CSppcCkKLXsKLQl4ZnNfbW91bnRfdAkqbXA7Ci0JeGZzX3RyYW5zX3QJKnRwOwotCWludAkJZXJyb3I7Ci0KLQltcCA9IGlwLT5pX21vdW50OwotCXRwID0geGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfV1JJVEVJRCk7Ci0JaWYgKChlcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAwLAotCQkJCSAgICAgIFhGU19XUklURUlEX0xPR19SRVMobXApLAotCQkJCSAgICAgIDAsIDAsIDApKSkgewotCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7Ci0JaXAtPmlfZC5kaV9tb2RlICY9IH5TX0lTVUlEOwotCi0JLyoKLQkgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBtYW5kYXRvcnkKLQkgKiBmaWxlIGxvY2tpbmcgYmVpbmcgZGlzYWJsZWQgaGVyZSBiZWNhdXNlIHdlIG9ubHkKLQkgKiBjbGVhciB0aGUgU19JU0dJRCBiaXQgaWYgdGhlIEdyb3VwIGV4ZWN1dGUgYml0IGlzCi0JICogb24sIGJ1dCBpZiBpdCB3YXMgb24gdGhlbiBtYW5kYXRvcnkgbG9ja2luZyB3b3VsZG4ndAotCSAqIGhhdmUgYmVlbiBlbmFibGVkLgotCSAqLwotCWlmIChpcC0+aV9kLmRpX21vZGUgJiBTX0lYR1JQKSB7Ci0JCWlwLT5pX2QuZGlfbW9kZSAmPSB+U19JU0dJRDsKLQl9Ci0JeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOwotCXhmc190cmFuc19zZXRfc3luYyh0cCk7Ci0JZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKLQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCXJldHVybiAwOwotfQotCi0vKgogICogRm9yY2UgYSBzaHV0ZG93biBvZiB0aGUgZmlsZXN5c3RlbSBpbnN0YW50bHkgd2hpbGUga2VlcGluZwogICogdGhlIGZpbGVzeXN0ZW0gY29uc2lzdGVudC4gV2UgZG9uJ3QgZG8gYW4gdW5tb3VudCBoZXJlOyBqdXN0IHNodXRkb3duCiAgKiB0aGUgc2hvcCwgbWFrZSBzdXJlIHRoYXQgYWJzb2x1dGVseSBub3RoaW5nIHBlcnNpc3RlbnQgaGFwcGVucyB0bwpAQCAtMTUzLDg4ICsxMTEsNiBAQAogCX0KIH0KIAotCi0vKgotICogQ2FsbGVkIHdoZW4gd2Ugd2FudCB0byBzdG9wIGEgYnVmZmVyIGZyb20gZ2V0dGluZyB3cml0dGVuIG9yIHJlYWQuCi0gKiBXZSBhdHRhY2ggdGhlIEVJTyBlcnJvciwgbXVjayB3aXRoIGl0cyBmbGFncywgYW5kIGNhbGwgYmlvZG9uZQotICogc28gdGhhdCB0aGUgcHJvcGVyIGlvZG9uZSBjYWxsYmFja3MgZ2V0IGNhbGxlZC4KLSAqLwotaW50Ci14ZnNfYmlvZXJyb3IoCi0JeGZzX2J1Zl90ICpicCkKLXsKLQotI2lmZGVmIFhGU0VSUk9SREVCVUcKLQlBU1NFUlQoWEZTX0JVRl9JU1JFQUQoYnApIHx8IGJwLT5iX2lvZG9uZSk7Ci0jZW5kaWYKLQotCS8qCi0JICogTm8gbmVlZCB0byB3YWl0IHVudGlsIHRoZSBidWZmZXIgaXMgdW5waW5uZWQuCi0JICogV2UgYXJlbid0IGZsdXNoaW5nIGl0LgotCSAqLwotCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7Ci0JLyoKLQkgKiBXZSdyZSBjYWxsaW5nIGJpb2RvbmUsIHNvIGRlbGV0ZSBCX0RPTkUgZmxhZy4gRWl0aGVyIHdheQotCSAqIHdlIGhhdmUgdG8gY2FsbCB0aGUgaW9kb25lIGNhbGxiYWNrLCBhbmQgY2FsbGluZyBiaW9kb25lCi0JICogcHJvYmFibHkgaXMgdGhlIGJlc3Qgd2F5IHNpbmNlIGl0IHRha2VzIGNhcmUgb2YKLQkgKiBHUklPIGFzIHdlbGwuCi0JICovCi0JWEZTX0JVRl9VTlJFQUQoYnApOwotCVhGU19CVUZfVU5ERUxBWVdSSVRFKGJwKTsKLQlYRlNfQlVGX1VORE9ORShicCk7Ci0JWEZTX0JVRl9TVEFMRShicCk7Ci0KLQlYRlNfQlVGX0NMUl9CRFNUUkFUX0ZVTkMoYnApOwotCXhmc19iaW9kb25lKGJwKTsKLQotCXJldHVybiAoRUlPKTsKLX0KLQotLyoKLSAqIFNhbWUgYXMgeGZzX2Jpb2Vycm9yLCBleGNlcHQgdGhhdCB3ZSBhcmUgcmVsZWFzaW5nIHRoZSBidWZmZXIKLSAqIGhlcmUgb3Vyc2VsdmVzLCBhbmQgYXZvaWRpbmcgdGhlIGJpb2RvbmUgY2FsbC4KLSAqIFRoaXMgaXMgbWVhbnQgZm9yIHVzZXJkYXRhIGVycm9yczsgbWV0YWRhdGEgYnVmcyBjb21lIHdpdGgKLSAqIGlvZG9uZSBmdW5jdGlvbnMgYXR0YWNoZWQsIHNvIHRoYXQgd2UgY2FuIHRyYWNrIGRvd24gZXJyb3JzLgotICovCi1pbnQKLXhmc19iaW9lcnJvcl9yZWxzZSgKLQl4ZnNfYnVmX3QgKmJwKQotewotCWludDY0X3QgZmw7Ci0KLQlBU1NFUlQoWEZTX0JVRl9JT0RPTkVfRlVOQyhicCkgIT0geGZzX2J1Zl9pb2RvbmVfY2FsbGJhY2tzKTsKLQlBU1NFUlQoWEZTX0JVRl9JT0RPTkVfRlVOQyhicCkgIT0geGxvZ19pb2RvbmUpOwotCi0JZmwgPSBYRlNfQlVGX0JGTEFHUyhicCk7Ci0JLyoKLQkgKiBObyBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIGJ1ZmZlciBpcyB1bnBpbm5lZC4KLQkgKiBXZSBhcmVuJ3QgZmx1c2hpbmcgaXQuCi0JICoKLQkgKiBjaHVua2hvbGQgZXhwZWN0cyBCX0RPTkUgdG8gYmUgc2V0LCB3aGV0aGVyCi0JICogd2UgYWN0dWFsbHkgZmluaXNoIHRoZSBJL08gb3Igbm90LiBXZSBkb24ndCB3YW50IHRvCi0JICogY2hhbmdlIHRoYXQgaW50ZXJmYWNlLgotCSAqLwotCVhGU19CVUZfVU5SRUFEKGJwKTsKLQlYRlNfQlVGX1VOREVMQVlXUklURShicCk7Ci0JWEZTX0JVRl9ET05FKGJwKTsKLQlYRlNfQlVGX1NUQUxFKGJwKTsKLQlYRlNfQlVGX0NMUl9JT0RPTkVfRlVOQyhicCk7Ci0JWEZTX0JVRl9DTFJfQkRTVFJBVF9GVU5DKGJwKTsKLQlpZiAoIShmbCAmIFhGU19CX0FTWU5DKSkgewotCQkvKgotCQkgKiBNYXJrIGJfZXJyb3IgYW5kIEJfRVJST1IgX2JvdGhfLgotCQkgKiBMb3QncyBvZiBjaHVua2NhY2hlIGNvZGUgYXNzdW1lcyB0aGF0LgotCQkgKiBUaGVyZSdzIG5vIHJlYXNvbiB0byBtYXJrIGVycm9yIGZvcgotCQkgKiBBU1lOQyBidWZmZXJzLgotCQkgKi8KLQkJWEZTX0JVRl9FUlJPUihicCwgRUlPKTsKLQkJWEZTX0JVRl9GSU5JU0hfSU9XQUlUKGJwKTsKLQl9IGVsc2UgewotCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQl9Ci0JcmV0dXJuIChFSU8pOwotfQotCiAvKgogICogUHJpbnRzIG91dCBhbiBBTEVSVCBtZXNzYWdlIGFib3V0IEkvTyBlcnJvci4KICAqLwpAQCAtMzA2LDM3ICsxODIsNiBAQAogfQogCiAvKgotICogV3JhcHBlciBhcm91bmQgYndyaXRlKCkgc28gdGhhdCB3ZSBjYW4gdHJhcAotICogd3JpdGUgZXJyb3JzLCBhbmQgYWN0IGFjY29yZGluZ2x5LgotICovCi1pbnQKLXhmc19id3JpdGUoCi0Jc3RydWN0IHhmc19tb3VudCAqbXAsCi0Jc3RydWN0IHhmc19idWYJICpicCkKLXsKLQlpbnQJZXJyb3I7Ci0KLQkvKgotCSAqIFhYWHN1cCBob3cgZG9lcyB0aGlzIHdvcmsgZm9yIHF1b3Rhcy4KLQkgKi8KLQlYRlNfQlVGX1NFVF9CRFNUUkFUX0ZVTkMoYnAsIHhmc19iZHN0cmF0X2NiKTsKLQlicC0+Yl9tb3VudCA9IG1wOwotCVhGU19CVUZfV1JJVEUoYnApOwotCi0JaWYgKChlcnJvciA9IFhGU19id3JpdGUoYnApKSkgewotCQlBU1NFUlQobXApOwotCQkvKgotCQkgKiBDYW5ub3QgcHV0IGEgYnVmdHJhY2UgaGVyZSBzaW5jZSBpZiB0aGUgYnVmZmVyIGlzIG5vdAotCQkgKiBCX0hPTEQgdGhlbiB3ZSB3aWxsIGJyZWxzZSgpIHRoZSBidWZmZXIgYmVmb3JlIHJldHVybmluZwotCQkgKiBmcm9tIGJ3cml0ZSBhbmQgd2UgY291bGQgYmUgdHJhY2luZyBhIGJ1ZmZlciB0aGF0IGhhcwotCQkgKiBiZWVuIHJldXNlZC4KLQkJICovCi0JCXhmc19mb3JjZV9zaHV0ZG93bihtcCwgU0hVVERPV05fTUVUQV9JT19FUlJPUik7Ci0JfQotCXJldHVybiAoZXJyb3IpOwotfQotCi0vKgogICogaGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgZXh0ZW50IHNpemUgaGludCBmcm9tIGlub2RlCiAgKi8KIHhmc19leHRsZW5fdApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ydy5oIGIvZnMveGZzL3hmc19ydy5oCmluZGV4IDU3MWYyMTcuLjExYzQxZWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcncuaAorKysgYi9mcy94ZnMveGZzX3J3LmgKQEAgLTM5LDEwICszOSw2IEBACiAvKgogICogUHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIHhmc19ydy5jLgogICovCi1leHRlcm4gaW50IHhmc193cml0ZV9jbGVhcl9zZXR1aWQoc3RydWN0IHhmc19pbm9kZSAqaXApOwotZXh0ZXJuIGludCB4ZnNfYndyaXRlKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBzdHJ1Y3QgeGZzX2J1ZiAqYnApOwotZXh0ZXJuIGludCB4ZnNfYmlvZXJyb3Ioc3RydWN0IHhmc19idWYgKmJwKTsKLWV4dGVybiBpbnQgeGZzX2Jpb2Vycm9yX3JlbHNlKHN0cnVjdCB4ZnNfYnVmICpicCk7CiBleHRlcm4gaW50IHhmc19yZWFkX2J1ZihzdHJ1Y3QgeGZzX21vdW50ICptcCwgeGZzX2J1ZnRhcmdfdCAqYnRwLAogCQkJeGZzX2RhZGRyX3QgYmxrbm8sIGludCBsZW4sIHVpbnQgZmxhZ3MsCiAJCQlzdHJ1Y3QgeGZzX2J1ZiAqKmJwcCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zLmMgYi9mcy94ZnMveGZzX3RyYW5zLmMKaW5kZXggMjM3YmFkYy4uYmU5NDJkNCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFucy5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnMuYwpAQCAtOTgxLDkgKzk4MSw4IEBACiAJICovCiAJaWYgKHN5bmMpIHsKIAkJaWYgKCFlcnJvcikgewotCQkJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShtcCwgY29tbWl0X2xzbiwKLQkJCQkgICAgICBYRlNfTE9HX0ZPUkNFIHwgWEZTX0xPR19TWU5DLAotCQkJCSAgICAgIGxvZ19mbHVzaGVkKTsKKwkJCWVycm9yID0gX3hmc19sb2dfZm9yY2VfbHNuKG1wLCBjb21taXRfbHNuLAorCQkJCSAgICAgIFhGU19MT0dfU1lOQywgbG9nX2ZsdXNoZWQpOwogCQl9CiAJCVhGU19TVEFUU19JTkMoeHNfdHJhbnNfc3luYyk7CiAJfSBlbHNlIHsKQEAgLTExMjEsNyArMTEyMCw3IEBACiAJdHAtPnRfaGVhZGVyLnRoX251bV9pdGVtcyA9IG5pdGVtczsKIAlsb2dfdmVjdG9yLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpJnRwLT50X2hlYWRlcjsKIAlsb2dfdmVjdG9yLT5pX2xlbiA9IHNpemVvZih4ZnNfdHJhbnNfaGVhZGVyX3QpOwotCVhMT0dfVkVDX1NFVF9UWVBFKGxvZ192ZWN0b3IsIFhMT0dfUkVHX1RZUEVfVFJBTlNIRFIpOworCWxvZ192ZWN0b3ItPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfVFJBTlNIRFI7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFucy5oIGIvZnMveGZzL3hmc190cmFucy5oCmluZGV4IGNhNjRmMzMuLmM5M2UzYTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuaAorKysgYi9mcy94ZnMveGZzX3RyYW5zLmgKQEAgLTg2MSw4ICs4NjEsNyBAQAogI2RlZmluZQlYRlNfSVRFTV9TVUNDRVNTCTAKICNkZWZpbmUJWEZTX0lURU1fUElOTkVECQkxCiAjZGVmaW5lCVhGU19JVEVNX0xPQ0tFRAkJMgotI2RlZmluZQlYRlNfSVRFTV9GTFVTSElORwkzCi0jZGVmaW5lIFhGU19JVEVNX1BVU0hCVUYJNAorI2RlZmluZSBYRlNfSVRFTV9QVVNIQlVGCTMKIAogLyoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIGJsb2NrIHJhbmdlcyB0aGF0IGhhdmUgYmVlbgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19haWwuYyBiL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKaW5kZXggMmZmYzU3MC4uZTc5OTgyNCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19haWwuYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCkBAIC0yMzcsMTQgKzIzNywxNSBAQAogfQogCiAvKgotICogRnVuY3Rpb24gdGhhdCBkb2VzIHRoZSB3b3JrIG9mIHB1c2hpbmcgb24gdGhlIEFJTAorICogeGZzYWlsZF9wdXNoIGRvZXMgdGhlIHdvcmsgb2YgcHVzaGluZyBvbiB0aGUgQUlMLiAgUmV0dXJuaW5nIGEgdGltZW91dCBvZgorICogemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbGVyIHNob3VsZCBzbGVlcCB1bnRpbCB3b2tlbi4KICAqLwogbG9uZwogeGZzYWlsZF9wdXNoKAogCXN0cnVjdCB4ZnNfYWlsCSphaWxwLAogCXhmc19sc25fdAkqbGFzdF9sc24pCiB7Ci0JbG9uZwkJdG91dCA9IDEwMDA7IC8qIG1pbGxpc2Vjb25kcyAqLworCWxvbmcJCXRvdXQgPSAwOwogCXhmc19sc25fdAlsYXN0X3B1c2hlZF9sc24gPSAqbGFzdF9sc247CiAJeGZzX2xzbl90CXRhcmdldCA9ICBhaWxwLT54YV90YXJnZXQ7CiAJeGZzX2xzbl90CWxzbjsKQEAgLTI1Miw2ICsyNTMsNyBAQAogCWludAkJZmx1c2hfbG9nLCBjb3VudCwgc3R1Y2s7CiAJeGZzX21vdW50X3QJKm1wID0gYWlscC0+eGFfbW91bnQ7CiAJc3RydWN0IHhmc19haWxfY3Vyc29yCSpjdXIgPSAmYWlscC0+eGFfY3Vyc29yczsKKwlpbnQJCXB1c2hfeGZzYnVmZCA9IDA7CiAKIAlzcGluX2xvY2soJmFpbHAtPnhhX2xvY2spOwogCXhmc190cmFuc19haWxfY3Vyc29yX2luaXQoYWlscCwgY3VyKTsKQEAgLTI2Miw3ICsyNjQsNyBAQAogCQkgKi8KIAkJeGZzX3RyYW5zX2FpbF9jdXJzb3JfZG9uZShhaWxwLCBjdXIpOwogCQlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7Ci0JCWxhc3RfcHVzaGVkX2xzbiA9IDA7CisJCSpsYXN0X2xzbiA9IDA7CiAJCXJldHVybiB0b3V0OwogCX0KIApAQCAtMjc5LDcgKzI4MSw2IEBACiAJICogcHJldmVudHMgdXNlIGZyb20gc3Bpbm5pbmcgd2hlbiB3ZSBjYW4ndCBkbyBhbnl0aGluZyBvciB0aGVyZSBpcwogCSAqIGxvdHMgb2YgY29udGVudGlvbiBvbiB0aGUgQUlMIGxpc3RzLgogCSAqLwotCXRvdXQgPSAxMDsKIAlsc24gPSBsaXAtPmxpX2xzbjsKIAlmbHVzaF9sb2cgPSBzdHVjayA9IGNvdW50ID0gMDsKIAl3aGlsZSAoKFhGU19MU05fQ01QKGxpcC0+bGlfbHNuLCB0YXJnZXQpIDwgMCkpIHsKQEAgLTMwOCw2ICszMDksNyBAQAogCQkJWEZTX1NUQVRTX0lOQyh4c19wdXNoX2FpbF9wdXNoYnVmKTsKIAkJCUlPUF9QVVNIQlVGKGxpcCk7CiAJCQlsYXN0X3B1c2hlZF9sc24gPSBsc247CisJCQlwdXNoX3hmc2J1ZmQgPSAxOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBYRlNfSVRFTV9QSU5ORUQ6CkBAIC0zMjIsMTIgKzMyNCw2IEBACiAJCQlzdHVjaysrOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBYRlNfSVRFTV9GTFVTSElORzoKLQkJCVhGU19TVEFUU19JTkMoeHNfcHVzaF9haWxfZmx1c2hpbmcpOwotCQkJbGFzdF9wdXNoZWRfbHNuID0gbHNuOwotCQkJc3R1Y2srKzsKLQkJCWJyZWFrOwotCiAJCWRlZmF1bHQ6CiAJCQlBU1NFUlQoMCk7CiAJCQlicmVhazsKQEAgLTM3MSwxOSArMzY3LDI0IEBACiAJCSAqIG1vdmUgZm9yd2FyZCBpbiB0aGUgQUlMLgogCQkgKi8KIAkJWEZTX1NUQVRTX0lOQyh4c19wdXNoX2FpbF9mbHVzaCk7Ci0JCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSk7CisJCXhmc19sb2dfZm9yY2UobXAsIDApOworCX0KKworCWlmIChwdXNoX3hmc2J1ZmQpIHsKKwkJLyogd2UndmUgZ290IGRlbGF5ZWQgd3JpdGUgYnVmZmVycyB0byBmbHVzaCAqLworCQl3YWtlX3VwX3Byb2Nlc3MobXAtPm1fZGRldl90YXJncC0+YnRfdGFzayk7CiAJfQogCiAJaWYgKCFjb3VudCkgewogCQkvKiBXZSdyZSBwYXN0IG91ciB0YXJnZXQgb3IgZW1wdHksIHNvIGlkbGUgKi8KLQkJdG91dCA9IDEwMDA7CisJCWxhc3RfcHVzaGVkX2xzbiA9IDA7CiAJfSBlbHNlIGlmIChYRlNfTFNOX0NNUChsc24sIHRhcmdldCkgPj0gMCkgewogCQkvKgogCQkgKiBXZSByZWFjaGVkIHRoZSB0YXJnZXQgc28gd2FpdCBhIGJpdCBsb25nZXIgZm9yIEkvTyB0bwogCQkgKiBjb21wbGV0ZSBhbmQgcmVtb3ZlIHB1c2hlZCBpdGVtcyBmcm9tIHRoZSBBSUwgYmVmb3JlIHdlCiAJCSAqIHN0YXJ0IHRoZSBuZXh0IHNjYW4gZnJvbSB0aGUgc3RhcnQgb2YgdGhlIEFJTC4KIAkJICovCi0JCXRvdXQgKz0gMjA7CisJCXRvdXQgPSA1MDsKIAkJbGFzdF9wdXNoZWRfbHNuID0gMDsKIAl9IGVsc2UgaWYgKChzdHVjayAqIDEwMCkgLyBjb3VudCA+IDkwKSB7CiAJCS8qCkBAIC0zOTUsMTEgKzM5NiwxNCBAQAogCQkgKiBCYWNrb2ZmIGEgYml0IG1vcmUgdG8gYWxsb3cgc29tZSBJL08gdG8gY29tcGxldGUgYmVmb3JlCiAJCSAqIGNvbnRpbnVpbmcgZnJvbSB3aGVyZSB3ZSB3ZXJlLgogCQkgKi8KLQkJdG91dCArPSAxMDsKKwkJdG91dCA9IDIwOworCX0gZWxzZSB7CisJCS8qIG1vcmUgdG8gZG8sIGJ1dCB3YWl0IGEgc2hvcnQgd2hpbGUgYmVmb3JlIGNvbnRpbnVpbmcgKi8KKwkJdG91dCA9IDEwOwogCX0KIAkqbGFzdF9sc24gPSBsYXN0X3B1c2hlZF9sc247CiAJcmV0dXJuIHRvdXQ7Ci19CS8qIHhmc2FpbGRfcHVzaCAqLworfQogCiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jIGIvZnMveGZzL3hmc190cmFuc19idWYuYwppbmRleCA0OTEzMDYyLi41ZmZkNTQ0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMKQEAgLTc1LDEzICs3NSwxNCBAQAogCXhmc19idWZfbG9nX2l0ZW1fdAkqYmlwOwogCiAJaWYgKGZsYWdzID09IDApCi0JCWZsYWdzID0gWEZTX0JVRl9MT0NLIHwgWEZTX0JVRl9NQVBQRUQ7CisJCWZsYWdzID0gWEJGX0xPQ0sgfCBYQkZfTUFQUEVEOwogCiAJLyoKIAkgKiBEZWZhdWx0IHRvIGEgbm9ybWFsIGdldF9idWYoKSBjYWxsIGlmIHRoZSB0cCBpcyBOVUxMLgogCSAqLwogCWlmICh0cCA9PSBOVUxMKQotCQlyZXR1cm4geGZzX2J1Zl9nZXQodGFyZ2V0X2RldiwgYmxrbm8sIGxlbiwgZmxhZ3MgfCBCVUZfQlVTWSk7CisJCXJldHVybiB4ZnNfYnVmX2dldCh0YXJnZXRfZGV2LCBibGtubywgbGVuLAorCQkJCSAgIGZsYWdzIHwgWEJGX0RPTlRfQkxPQ0spOwogCiAJLyoKIAkgKiBJZiB3ZSBmaW5kIHRoZSBidWZmZXIgaW4gdGhlIGNhY2hlIHdpdGggdGhpcyB0cmFuc2FjdGlvbgpAQCAtMTE3LDE0ICsxMTgsMTQgQEAKIAl9CiAKIAkvKgotCSAqIFdlIGFsd2F5cyBzcGVjaWZ5IHRoZSBCVUZfQlVTWSBmbGFnIHdpdGhpbiBhIHRyYW5zYWN0aW9uIHNvCi0JICogdGhhdCBnZXRfYnVmIGRvZXMgbm90IHRyeSB0byBwdXNoIG91dCBhIGRlbGF5ZWQgd3JpdGUgYnVmZmVyCisJICogV2UgYWx3YXlzIHNwZWNpZnkgdGhlIFhCRl9ET05UX0JMT0NLIGZsYWcgd2l0aGluIGEgdHJhbnNhY3Rpb24KKwkgKiBzbyB0aGF0IGdldF9idWYgZG9lcyBub3QgdHJ5IHRvIHB1c2ggb3V0IGEgZGVsYXllZCB3cml0ZSBidWZmZXIKIAkgKiB3aGljaCBtaWdodCBjYXVzZSBhbm90aGVyIHRyYW5zYWN0aW9uIHRvIHRha2UgcGxhY2UgKGlmIHRoZQogCSAqIGJ1ZmZlciB3YXMgZGVsYXllZCBhbGxvYykuICBTdWNoIHJlY3Vyc2l2ZSB0cmFuc2FjdGlvbnMgY2FuCiAJICogZWFzaWx5IGRlYWRsb2NrIHdpdGggb3VyIGN1cnJlbnQgdHJhbnNhY3Rpb24gYXMgd2VsbCBhcyBjYXVzZQogCSAqIHVzIHRvIHJ1biBvdXQgb2Ygc3RhY2sgc3BhY2UuCiAJICovCi0JYnAgPSB4ZnNfYnVmX2dldCh0YXJnZXRfZGV2LCBibGtubywgbGVuLCBmbGFncyB8IEJVRl9CVVNZKTsKKwlicCA9IHhmc19idWZfZ2V0KHRhcmdldF9kZXYsIGJsa25vLCBsZW4sIGZsYWdzIHwgWEJGX0RPTlRfQkxPQ0spOwogCWlmIChicCA9PSBOVUxMKSB7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTI5MCwxNSArMjkxLDE1IEBACiAJaW50CQkJZXJyb3I7CiAKIAlpZiAoZmxhZ3MgPT0gMCkKLQkJZmxhZ3MgPSBYRlNfQlVGX0xPQ0sgfCBYRlNfQlVGX01BUFBFRDsKKwkJZmxhZ3MgPSBYQkZfTE9DSyB8IFhCRl9NQVBQRUQ7CiAKIAkvKgogCSAqIERlZmF1bHQgdG8gYSBub3JtYWwgZ2V0X2J1ZigpIGNhbGwgaWYgdGhlIHRwIGlzIE5VTEwuCiAJICovCiAJaWYgKHRwID09IE5VTEwpIHsKLQkJYnAgPSB4ZnNfYnVmX3JlYWQodGFyZ2V0LCBibGtubywgbGVuLCBmbGFncyB8IEJVRl9CVVNZKTsKKwkJYnAgPSB4ZnNfYnVmX3JlYWQodGFyZ2V0LCBibGtubywgbGVuLCBmbGFncyB8IFhCRl9ET05UX0JMT0NLKTsKIAkJaWYgKCFicCkKLQkJCXJldHVybiAoZmxhZ3MgJiBYRlNfQlVGX1RSWUxPQ0spID8KKwkJCXJldHVybiAoZmxhZ3MgJiBYQkZfVFJZTE9DSykgPwogCQkJCQlFQUdBSU4gOiBYRlNfRVJST1IoRU5PTUVNKTsKIAogCQlpZiAoWEZTX0JVRl9HRVRFUlJPUihicCkgIT0gMCkgewpAQCAtMzg1LDE0ICszODYsMTQgQEAKIAl9CiAKIAkvKgotCSAqIFdlIGFsd2F5cyBzcGVjaWZ5IHRoZSBCVUZfQlVTWSBmbGFnIHdpdGhpbiBhIHRyYW5zYWN0aW9uIHNvCi0JICogdGhhdCBnZXRfYnVmIGRvZXMgbm90IHRyeSB0byBwdXNoIG91dCBhIGRlbGF5ZWQgd3JpdGUgYnVmZmVyCisJICogV2UgYWx3YXlzIHNwZWNpZnkgdGhlIFhCRl9ET05UX0JMT0NLIGZsYWcgd2l0aGluIGEgdHJhbnNhY3Rpb24KKwkgKiBzbyB0aGF0IGdldF9idWYgZG9lcyBub3QgdHJ5IHRvIHB1c2ggb3V0IGEgZGVsYXllZCB3cml0ZSBidWZmZXIKIAkgKiB3aGljaCBtaWdodCBjYXVzZSBhbm90aGVyIHRyYW5zYWN0aW9uIHRvIHRha2UgcGxhY2UgKGlmIHRoZQogCSAqIGJ1ZmZlciB3YXMgZGVsYXllZCBhbGxvYykuICBTdWNoIHJlY3Vyc2l2ZSB0cmFuc2FjdGlvbnMgY2FuCiAJICogZWFzaWx5IGRlYWRsb2NrIHdpdGggb3VyIGN1cnJlbnQgdHJhbnNhY3Rpb24gYXMgd2VsbCBhcyBjYXVzZQogCSAqIHVzIHRvIHJ1biBvdXQgb2Ygc3RhY2sgc3BhY2UuCiAJICovCi0JYnAgPSB4ZnNfYnVmX3JlYWQodGFyZ2V0LCBibGtubywgbGVuLCBmbGFncyB8IEJVRl9CVVNZKTsKKwlicCA9IHhmc19idWZfcmVhZCh0YXJnZXQsIGJsa25vLCBsZW4sIGZsYWdzIHwgWEJGX0RPTlRfQkxPQ0spOwogCWlmIChicCA9PSBOVUxMKSB7CiAJCSpicHAgPSBOVUxMOwogCQlyZXR1cm4gMDsKQEAgLTQ3Miw4ICs0NzMsOCBAQAogCWlmIChYRlNfQlVGX0lTU1RBTEUoYnApICYmIFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkKIAkJY21uX2VycihDRV9OT1RFLCAiYWJvdXQgdG8gcG9wIGFzc2VydCwgYnAgPT0gMHglcCIsIGJwKTsKICNlbmRpZgotCUFTU0VSVCgoWEZTX0JVRl9CRkxBR1MoYnApICYgKFhGU19CX1NUQUxFfFhGU19CX0RFTFdSSSkpICE9Ci0JCQkJCQkoWEZTX0JfU1RBTEV8WEZTX0JfREVMV1JJKSk7CisJQVNTRVJUKChYRlNfQlVGX0JGTEFHUyhicCkgJiAoWEJGX1NUQUxFfFhCRl9ERUxXUkkpKSAhPQorCQkJCSAgICAgKFhCRl9TVEFMRXxYQkZfREVMV1JJKSk7CiAKIAl0cmFjZV94ZnNfdHJhbnNfcmVhZF9idWZfc2h1dChicCwgX1JFVF9JUF8pOwogCXhmc19idWZfcmVsc2UoYnApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190eXBlcy5oIGIvZnMveGZzL3hmc190eXBlcy5oCmluZGV4IGQ3MjU0MjguLmIwOTkwNDUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHlwZXMuaAorKysgYi9mcy94ZnMveGZzX3R5cGVzLmgKQEAgLTE1MSw4ICsxNTEsOCBAQAogfSB4ZnNfYnRudW1fdDsKIAogc3RydWN0IHhmc19uYW1lIHsKLQljb25zdCBjaGFyCSpuYW1lOwotCWludAkJbGVuOworCWNvbnN0IHVuc2lnbmVkIGNoYXIJKm5hbWU7CisJaW50CQkJbGVuOwogfTsKIAogI2VuZGlmCS8qIF9fWEZTX1RZUEVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192bm9kZW9wcy5jIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCmluZGV4IDZmMjY4NzUuLmRkZDJjNWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYworKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogCQkgICAgaWF0dHItPmlhX3NpemUgPiBpcC0+aV9kLmRpX3NpemUpIHsKIAkJCWNvZGUgPSB4ZnNfZmx1c2hfcGFnZXMoaXAsCiAJCQkJCWlwLT5pX2QuZGlfc2l6ZSwgaWF0dHItPmlhX3NpemUsCi0JCQkJCVhGU19CX0FTWU5DLCBGSV9OT05FKTsKKwkJCQkJWEJGX0FTWU5DLCBGSV9OT05FKTsKIAkJfQogCiAJCS8qIHdhaXQgZm9yIGFsbCBJL08gdG8gY29tcGxldGUgKi8KQEAgLTU5Nyw3ICs1OTcsNyBAQAogewogCXhmc190cmFuc190CSp0cDsKIAlpbnQJCWVycm9yID0gMDsKLQlpbnQJCWxvZ19mbHVzaGVkID0gMCwgY2hhbmdlZCA9IDE7CisJaW50CQlsb2dfZmx1c2hlZCA9IDA7CiAKIAl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKIApAQCAtNjI3LDE5ICs2MjcsMTYgQEAKIAkJICogZGlzayB5ZXQsIHRoZSBpbm9kZSB3aWxsIGJlIHN0aWxsIGJlIHBpbm5lZC4gIElmIGl0IGlzLAogCQkgKiBmb3JjZSB0aGUgbG9nLgogCQkgKi8KLQogCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0KIAkJaWYgKHhmc19pcGluY291bnQoaXApKSB7Ci0JCQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlKGlwLT5pX21vdW50LCAoeGZzX2xzbl90KTAsCi0JCQkJICAgICAgWEZTX0xPR19GT1JDRSB8IFhGU19MT0dfU1lOQywKLQkJCQkgICAgICAmbG9nX2ZsdXNoZWQpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIElmIHRoZSBpbm9kZSBpcyBub3QgcGlubmVkIGFuZCBub3RoaW5nIGhhcyBjaGFuZ2VkCi0JCQkgKiB3ZSBkb24ndCBuZWVkIHRvIGZsdXNoIHRoZSBjYWNoZS4KLQkJCSAqLwotCQkJY2hhbmdlZCA9IDA7CisJCQlpZiAoaXAtPmlfaXRlbXAtPmlsaV9sYXN0X2xzbikgeworCQkJCWVycm9yID0gX3hmc19sb2dfZm9yY2VfbHNuKGlwLT5pX21vdW50LAorCQkJCQkJaXAtPmlfaXRlbXAtPmlsaV9sYXN0X2xzbiwKKwkJCQkJCVhGU19MT0dfU1lOQywgJmxvZ19mbHVzaGVkKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShpcC0+aV9tb3VudCwKKwkJCQkJCVhGU19MT0dfU1lOQywgJmxvZ19mbHVzaGVkKTsKKwkJCX0KIAkJfQogCX0gZWxzZQl7CiAJCS8qCkBAIC02NzQsNyArNjcxLDcgQEAKIAkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAl9CiAKLQlpZiAoKGlwLT5pX21vdW50LT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpICYmIGNoYW5nZWQpIHsKKwlpZiAoaXAtPmlfbW91bnQtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfQkFSUklFUikgewogCQkvKgogCQkgKiBJZiB0aGUgbG9nIHdyaXRlIGRpZG4ndCBpc3N1ZSBhbiBvcmRlcmVkIHRhZyB3ZSBuZWVkCiAJCSAqIHRvIGZsdXNoIHRoZSBkaXNrIGNhY2hlIGZvciB0aGUgZGF0YSBkZXZpY2Ugbm93LgpAQCAtMTA5Niw3ICsxMDkzLDcgQEAKIAkJICovCiAJCXRydW5jYXRlZCA9IHhmc19pZmxhZ3NfdGVzdF9hbmRfY2xlYXIoaXAsIFhGU19JVFJVTkNBVEVEKTsKIAkJaWYgKHRydW5jYXRlZCAmJiBWTl9ESVJUWShWRlNfSShpcCkpICYmIGlwLT5pX2RlbGF5ZWRfYmxrcyA+IDApCi0JCQl4ZnNfZmx1c2hfcGFnZXMoaXAsIDAsIC0xLCBYRlNfQl9BU1lOQywgRklfTk9ORSk7CisJCQl4ZnNfZmx1c2hfcGFnZXMoaXAsIDAsIC0xLCBYQkZfQVNZTkMsIEZJX05PTkUpOwogCX0KIAogCWlmIChpcC0+aV9kLmRpX25saW5rICE9IDApIHsKQEAgLTIxOTksNyArMjE5Niw4IEBACiAJaWYgKERNX0VWRU5UX0VOQUJMRUQoZHAsIERNX0VWRU5UX1NZTUxJTkspKSB7CiAJCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9TWU1MSU5LLCBkcCwKIAkJCQkJRE1fUklHSFRfTlVMTCwgTlVMTCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJbGlua19uYW1lLT5uYW1lLCB0YXJnZXRfcGF0aCwgMCwgMCwgMCk7CisJCQkJCWxpbmtfbmFtZS0+bmFtZSwKKwkJCQkJKHVuc2lnbmVkIGNoYXIgKil0YXJnZXRfcGF0aCwgMCwgMCwgMCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIAl9CkBAIC0yMzk1LDcgKzIzOTMsOCBAQAogCQkJCQlkcCwgRE1fUklHSFRfTlVMTCwKIAkJCQkJZXJyb3IgPyBOVUxMIDogaXAsCiAJCQkJCURNX1JJR0hUX05VTEwsIGxpbmtfbmFtZS0+bmFtZSwKLQkJCQkJdGFyZ2V0X3BhdGgsIDAsIGVycm9yLCAwKTsKKwkJCQkJKHVuc2lnbmVkIGNoYXIgKil0YXJnZXRfcGF0aCwKKwkJCQkJMCwgZXJyb3IsIDApOwogCX0KIAogCWlmICghZXJyb3IpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmggYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmgKaW5kZXggMTY3YTQ2Ny4uNzc0ZjQwNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc192bm9kZW9wcy5oCisrKyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaApAQCAtNDMsMTEgKzQzLDExIEBACiBpbnQgeGZzX3JlbmFtZShzdHJ1Y3QgeGZzX2lub2RlICpzcmNfZHAsIHN0cnVjdCB4ZnNfbmFtZSAqc3JjX25hbWUsCiAJCXN0cnVjdCB4ZnNfaW5vZGUgKnNyY19pcCwgc3RydWN0IHhmc19pbm9kZSAqdGFyZ2V0X2RwLAogCQlzdHJ1Y3QgeGZzX25hbWUgKnRhcmdldF9uYW1lLCBzdHJ1Y3QgeGZzX2lub2RlICp0YXJnZXRfaXApOwotaW50IHhmc19hdHRyX2dldChzdHJ1Y3QgeGZzX2lub2RlICppcCwgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUsCi0JCWludCAqdmFsdWVsZW5wLCBpbnQgZmxhZ3MpOwotaW50IHhmc19hdHRyX3NldChzdHJ1Y3QgeGZzX2lub2RlICpkcCwgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUsCi0JCWludCB2YWx1ZWxlbiwgaW50IGZsYWdzKTsKLWludCB4ZnNfYXR0cl9yZW1vdmUoc3RydWN0IHhmc19pbm9kZSAqZHAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncyk7CitpbnQgeGZzX2F0dHJfZ2V0KHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCQl1bnNpZ25lZCBjaGFyICp2YWx1ZSwgaW50ICp2YWx1ZWxlbnAsIGludCBmbGFncyk7CitpbnQgeGZzX2F0dHJfc2V0KHN0cnVjdCB4ZnNfaW5vZGUgKmRwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCQl1bnNpZ25lZCBjaGFyICp2YWx1ZSwgaW50IHZhbHVlbGVuLCBpbnQgZmxhZ3MpOworaW50IHhmc19hdHRyX3JlbW92ZShzdHJ1Y3QgeGZzX2lub2RlICpkcCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgaW50IGZsYWdzKTsKIGludCB4ZnNfYXR0cl9saXN0KHN0cnVjdCB4ZnNfaW5vZGUgKmRwLCBjaGFyICpidWZmZXIsIGludCBidWZzaXplLAogCQlpbnQgZmxhZ3MsIHN0cnVjdCBhdHRybGlzdF9jdXJzb3Jfa2VybiAqY3Vyc29yKTsKIHNzaXplX3QgeGZzX3JlYWQoc3RydWN0IHhmc19pbm9kZSAqaXAsIHN0cnVjdCBraW9jYiAqaW9jYiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2V4Y2VwLmggYi9pbmNsdWRlL2FjcGkvYWNleGNlcC5oCmluZGV4IDQ3M2Q1ODQuLjViMmU1ZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY2V4Y2VwLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjZXhjZXAuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY25hbWVzLmggYi9pbmNsdWRlL2FjcGkvYWNuYW1lcy5oCmluZGV4IGMxMzQzYTkuLjljZjczNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY25hbWVzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjbmFtZXMuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY291dHB1dC5oIGIvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKaW5kZXggZDgxNGRhNC4uZDc3MjY2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKKysrIGIvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaS5oIGIvaW5jbHVkZS9hY3BpL2FjcGkuaAppbmRleCA0NzJiN2JmLi5hMDkxY2FiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaS5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaCBiL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCmluZGV4IDNjZDljY2QuLjdiZjgzZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCkBAIC0yNDIsNiArMjQyLDggQEAKIHN0cnVjdCBhY3BpX2RldmljZV93YWtldXBfZmxhZ3MgewogCXU4IHZhbGlkOjE7CQkvKiBDYW4gc3VjY2Vzc2Z1bGx5IGVuYWJsZSB3YWtldXA/ICovCiAJdTggcnVuX3dha2U6MTsJCS8qIFJ1bi1XYWtlIEdQRSBkZXZpY2VzICovCisJdTggYWx3YXlzX2VuYWJsZWQ6MTsJLyogUnVuLXdha2UgZGV2aWNlcyB0aGF0IGFyZSBhbHdheXMgZW5hYmxlZCAqLworCXU4IG5vdGlmaWVyX3ByZXNlbnQ6MTsgIC8qIFdha2UtdXAgbm90aWZ5IGhhbmRsZXIgaGFzIGJlZW4gaW5zdGFsbGVkICovCiB9OwogCiBzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2FrZXVwX3N0YXRlIHsKQEAgLTI1MCwxMiArMjUyLDEzIEBACiAKIHN0cnVjdCBhY3BpX2RldmljZV93YWtldXAgewogCWFjcGlfaGFuZGxlIGdwZV9kZXZpY2U7Ci0JYWNwaV9pbnRlZ2VyIGdwZV9udW1iZXI7Ci0JYWNwaV9pbnRlZ2VyIHNsZWVwX3N0YXRlOworCXU2NCBncGVfbnVtYmVyOworCXU2NCBzbGVlcF9zdGF0ZTsKIAlzdHJ1Y3QgYWNwaV9oYW5kbGVfbGlzdCByZXNvdXJjZXM7CiAJc3RydWN0IGFjcGlfZGV2aWNlX3dha2V1cF9zdGF0ZSBzdGF0ZTsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2FrZXVwX2ZsYWdzIGZsYWdzOwogCWludCBwcmVwYXJlX2NvdW50OworCWludCBydW5fd2FrZV9jb3VudDsKIH07CiAKIC8qIERldmljZSAqLwpAQCAtMzgwLDEyICszODMsMTUgQEAKIH07CiAKIC8qIGhlbHBlciAqLwotYWNwaV9oYW5kbGUgYWNwaV9nZXRfY2hpbGQoYWNwaV9oYW5kbGUsIGFjcGlfaW50ZWdlcik7CithY3BpX2hhbmRsZSBhY3BpX2dldF9jaGlsZChhY3BpX2hhbmRsZSwgdTY0KTsKIGludCBhY3BpX2lzX3Jvb3RfYnJpZGdlKGFjcGlfaGFuZGxlKTsKIGFjcGlfaGFuZGxlIGFjcGlfZ2V0X3BjaV9yb290YnJpZGdlX2hhbmRsZSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiBzdHJ1Y3QgYWNwaV9wY2lfcm9vdCAqYWNwaV9wY2lfZmluZF9yb290KGFjcGlfaGFuZGxlIGhhbmRsZSk7CiAjZGVmaW5lIERFVklDRV9BQ1BJX0hBTkRMRShkZXYpICgoYWNwaV9oYW5kbGUpKChkZXYpLT5hcmNoZGF0YS5hY3BpX2hhbmRsZSkpCiAKK2ludCBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LCBpbnQgc3RhdGUpOworaW50IGFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2KTsKKwogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogaW50IGFjcGlfcG1fZGV2aWNlX3NsZWVwX3N0YXRlKHN0cnVjdCBkZXZpY2UgKiwgaW50ICopOwogaW50IGFjcGlfcG1fZGV2aWNlX3NsZWVwX3dha2Uoc3RydWN0IGRldmljZSAqLCBib29sKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaCBiL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaAppbmRleCBmNDkwNmY2Li4zYTQ3NjdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlfZHJpdmVycy5oCkBAIC0xMDQsNiArMTA0LDcgQEAKIAogc3RydWN0IHBjaV9idXMgKnBjaV9hY3BpX3NjYW5fcm9vdChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IGRvbWFpbiwKIAkJCQkgICBpbnQgYnVzKTsKK3ZvaWQgcGNpX2FjcGlfY3JzX3F1aXJrcyh2b2lkKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NvcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmggYi9pbmNsdWRlL2FjcGkvYWNwaW9zeGYuaAppbmRleCBlYjBlNzE4Li5iMzk2ODU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaW9zeGYuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaW9zeGYuaApAQCAtOCw3ICs4LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE5Niw3ICsxOTYsNyBAQAogCiB2b2lkIGFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUodm9pZCAqY29udGV4dCk7CiAKLXZvaWQgYWNwaV9vc19zbGVlcChhY3BpX2ludGVnZXIgbWlsbGlzZWNvbmRzKTsKK3ZvaWQgYWNwaV9vc19zbGVlcCh1NjQgbWlsbGlzZWNvbmRzKTsKIAogdm9pZCBhY3BpX29zX3N0YWxsKHUzMiBtaWNyb3NlY29uZHMpOwogCkBAIC0yMjcsNyArMjI3LDcgQEAKIAogYWNwaV9zdGF0dXMKIGFjcGlfb3Nfd3JpdGVfcGNpX2NvbmZpZ3VyYXRpb24oc3RydWN0IGFjcGlfcGNpX2lkICpwY2lfaWQsCi0JCQkJdTMyIHJlZywgYWNwaV9pbnRlZ2VyIHZhbHVlLCB1MzIgd2lkdGgpOworCQkJCXUzMiByZWcsIHU2NCB2YWx1ZSwgdTMyIHdpZHRoKTsKIAogLyoKICAqIEludGVyaW0gZnVuY3Rpb24gbmVlZGVkIGZvciBQQ0kgSVJRIHJvdXRpbmcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaAppbmRleCA4NmU5NzM1Li40NDQ3YTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDcsNyArNDcsNyBAQAogCiAvKiBDdXJyZW50IEFDUElDQSBzdWJzeXN0ZW0gdmVyc2lvbiBpbiBZWVlZTU1ERCBmb3JtYXQgKi8KIAotI2RlZmluZSBBQ1BJX0NBX1ZFUlNJT04gICAgICAgICAgICAgICAgIDB4MjAwOTEyMTQKKyNkZWZpbmUgQUNQSV9DQV9WRVJTSU9OICAgICAgICAgICAgICAgICAweDIwMTAwMTIxCiAKICNpbmNsdWRlICJhY3R5cGVzLmgiCiAjaW5jbHVkZSAiYWN0YmwuaCIKQEAgLTI4MSwxMSArMjgxLDExIEBACiAvKgogICogR1BFIEludGVyZmFjZXMKICAqLwotYWNwaV9zdGF0dXMgYWNwaV9zZXRfZ3BlX3R5cGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IHR5cGUpOworYWNwaV9zdGF0dXMgYWNwaV9zZXRfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCBhY3Rpb24pOwogCi1hY3BpX3N0YXR1cyBhY3BpX2VuYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIpOworYWNwaV9zdGF0dXMgYWNwaV9lbmFibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCB0eXBlKTsKIAotYWNwaV9zdGF0dXMgYWNwaV9kaXNhYmxlX2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlcik7CithY3BpX3N0YXR1cyBhY3BpX2Rpc2FibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCB0eXBlKTsKIAogYWNwaV9zdGF0dXMgYWNwaV9jbGVhcl9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHUzMiBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3Jlc3R5cC5oIGIvaW5jbHVkZS9hY3BpL2FjcmVzdHlwLmgKaW5kZXggOWZmZTAwZi4uZTU1MjYzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcmVzdHlwLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcmVzdHlwLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOTcsNyArMzk3LDcgQEAKIHN0cnVjdCBhY3BpX3BjaV9yb3V0aW5nX3RhYmxlIHsKIAl1MzIgbGVuZ3RoOwogCXUzMiBwaW47Ci0JYWNwaV9pbnRlZ2VyIGFkZHJlc3M7CS8qIGhlcmUgZm9yIDY0LWJpdCBhbGlnbm1lbnQgKi8KKwl1NjQgYWRkcmVzczsJCS8qIGhlcmUgZm9yIDY0LWJpdCBhbGlnbm1lbnQgKi8KIAl1MzIgc291cmNlX2luZGV4OwogCWNoYXIgc291cmNlWzRdOwkJLyogcGFkIHRvIDY0IGJpdHMgc28gc2l6ZW9mKCkgd29ya3MgaW4gYWxsIGNhc2VzICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdGJsLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwuaAppbmRleCAxYjY1ODc5Li5hZDIwMDE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDgsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RibDEuaCBiL2luY2x1ZGUvYWNwaS9hY3RibDEuaAppbmRleCAwYjliNDMwLi5jNjM3Yjc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwxLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjdGJsMS5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdGJsMi5oIGIvaW5jbHVkZS9hY3BpL2FjdGJsMi5oCmluZGV4IDZmM2RjZTkuLjViMDJlMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3RibDIuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmgKQEAgLTEsMyArMSw0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE5hbWU6IGFjdGJsMi5oIC0gQUNQSSBTcGVjaWZpY2F0aW9uIFJldmlzaW9uIDIuMCBUYWJsZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDEwLCBJbnRlbCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKICNpZm5kZWYgX19BQ1RCTDJfSF9fCiAjZGVmaW5lIF9fQUNUQkwyX0hfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oIGIvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaAppbmRleCAxNTNmMTJkLi4zZjA4ZTY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zODUsMTkgKzM4NSw2IEBACiAJc3RydWN0IHVpbnQ2NF9zdHJ1Y3QgcGFydDsKIH07CiAKLXN0cnVjdCB1aW50MzJfc3RydWN0IHsKLQl1MzIgbG87Ci0JdTMyIGhpOwotfTsKLQotLyoKLSAqIEFjcGkgaW50ZWdlciB3aWR0aC4gSW4gQUNQSSB2ZXJzaW9uIDEsIGludGVnZXJzIGFyZSAzMiBiaXRzLiBJbiBBQ1BJCi0gKiB2ZXJzaW9uIDIsIGludGVnZXJzIGFyZSA2NCBiaXRzLiBOb3RlIHRoYXQgdGhpcyBwZXJ0YWlucyB0byB0aGUgQUNQSSBpbnRlZ2VyCi0gKiB0eXBlIG9ubHksIG5vdCBvdGhlciBpbnRlZ2VycyB1c2VkIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQUNQSSBDQQotICogc3Vic3lzdGVtLgotICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBhY3BpX2ludGVnZXI7Ci0jZGVmaW5lIEFDUElfSU5URUdFUl9NQVggICAgICAgICAgICAgICAgQUNQSV9VSU5UNjRfTUFYCiAjZGVmaW5lIEFDUElfSU5URUdFUl9CSVRfU0laRSAgICAgICAgICAgNjQKICNkZWZpbmUgQUNQSV9NQVhfREVDSU1BTF9ESUdJVFMgICAgICAgICAyMAkvKiAyXjY0ID0gMTgsNDQ2LDc0NCwwNzMsNzA5LDU1MSw2MTYgKi8KIApAQCAtNDIxLDYgKzQwOCwxOSBAQAogI2RlZmluZSBBQ1BJX1dBSVRfRk9SRVZFUiAgICAgICAgICAgICAgIDB4RkZGRgkvKiB1MTYsIGFzIHBlciBBQ1BJIHNwZWMgKi8KICNkZWZpbmUgQUNQSV9ET19OT1RfV0FJVCAgICAgICAgICAgICAgICAwCiAKKy8qCisgKiBPYnNvbGV0ZTogQWNwaSBpbnRlZ2VyIHdpZHRoLiBJbiBBQ1BJIHZlcnNpb24gMSAoMTk5NiksIGludGVnZXJzIGFyZSAzMiBiaXRzLgorICogSW4gQUNQSSB2ZXJzaW9uIDIgKDIwMDApIGFuZCBsYXRlciwgaW50ZWdlcnMgYXJlIDY0IGJpdHMuIE5vdGUgdGhhdCB0aGlzCisgKiBwZXJ0YWlucyB0byB0aGUgQUNQSSBpbnRlZ2VyIHR5cGUgb25seSwgbm90IHRvIG90aGVyIGludGVnZXJzIHVzZWQgaW4gdGhlCisgKiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQUNQSUNBIHN1YnN5c3RlbS4KKyAqCisgKiAwMS8yMDEwOiBUaGlzIHR5cGUgaXMgb2Jzb2xldGUgYW5kIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZW50aXJlIEFDUElDQQorICogY29kZSBiYXNlLiBJdCByZW1haW5zIGhlcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBkZXZpY2UgZHJpdmVycyB0aGF0IHVzZQorICogdGhlIHR5cGUuIEhvd2V2ZXIsIGl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLgorICovCit0eXBlZGVmIHU2NCBhY3BpX2ludGVnZXI7CisjZGVmaW5lIEFDUElfSU5URUdFUl9NQVggICAgICAgICAgICAgICAgQUNQSV9VSU5UNjRfTUFYCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogQ29tbW9ubHkgdXNlZCBtYWNyb3MKQEAgLTY2OCwxNSArNjY4LDE2IEBACiAKIC8qCiAgKiBHUEUgaW5mbyBmbGFncyAtIFBlciBHUEUKLSAqICstKy0rLSstLS0rLS0tKy0rCi0gKiB8N3w2fDV8NDozfDI6MXwwfAotICogKy0rLSstKy0tLSstLS0rLSsKLSAqICB8IHwgfCAgfCAgIHwgIHwKLSAqICB8IHwgfCAgfCAgIHwgICstLS0gSW50ZXJydXB0IHR5cGU6IEVkZ2Ugb3IgTGV2ZWwgVHJpZ2dlcmVkCi0gKiAgfCB8IHwgIHwgICArLS0tIFR5cGU6IFdha2Utb25seSwgUnVudGltZS1vbmx5LCBvciB3YWtlL3J1bnRpbWUKKyAqICstKy0rLSstLS0rLSstKy0rCisgKiB8N3w2fDV8NDozfDJ8MXwwfAorICogKy0rLSstKy0tLSstKy0rLSsKKyAqICB8IHwgfCAgfCAgfCB8IHwKKyAqICB8IHwgfCAgfCAgfCB8ICstLS0gSW50ZXJydXB0IHR5cGU6IEVkZ2Ugb3IgTGV2ZWwgVHJpZ2dlcmVkCisgKiAgfCB8IHwgIHwgIHwgKy0tLSBHUEUgY2FuIHdha2UgdGhlIHN5c3RlbQorICogIHwgfCB8ICB8ICArLS0tIFVudXNlZAogICogIHwgfCB8ICArLS0tIFR5cGUgb2YgZGlzcGF0Y2ggLS0gdG8gbWV0aG9kLCBoYW5kbGVyLCBvciBub25lCi0gKiAgfCB8ICstLS0gRW5hYmxlZCBmb3IgcnVudGltZT8KLSAqICB8ICstLS0gRW5hYmxlZCBmb3Igd2FrZT8KKyAqICB8IHwgKy0tLSBVbnVzZWQKKyAqICB8ICstLS0gVW51c2VkCiAgKiAgKy0tLSBVbnVzZWQKICAqLwogI2RlZmluZSBBQ1BJX0dQRV9YUlVQVF9UWVBFX01BU0sgICAgICAgICh1OCkgMHgwMQpAQCAtNjg3LDIyICs2ODgsMTMgQEAKICNkZWZpbmUgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTiAgICAgICAgICAodTgpIDB4MDYKICNkZWZpbmUgQUNQSV9HUEVfVFlQRV9XQUtFICAgICAgICAgICAgICAodTgpIDB4MDIKICNkZWZpbmUgQUNQSV9HUEVfVFlQRV9SVU5USU1FICAgICAgICAgICAodTgpIDB4MDQJLyogRGVmYXVsdCAqLworI2RlZmluZSBBQ1BJX0dQRV9DQU5fV0FLRQkJKHU4KSAweDAyCiAKICNkZWZpbmUgQUNQSV9HUEVfRElTUEFUQ0hfTUFTSyAgICAgICAgICAodTgpIDB4MTgKICNkZWZpbmUgQUNQSV9HUEVfRElTUEFUQ0hfSEFORExFUiAgICAgICAodTgpIDB4MDgKICNkZWZpbmUgQUNQSV9HUEVfRElTUEFUQ0hfTUVUSE9EICAgICAgICAodTgpIDB4MTAKICNkZWZpbmUgQUNQSV9HUEVfRElTUEFUQ0hfTk9UX1VTRUQgICAgICAodTgpIDB4MDAJLyogRGVmYXVsdCAqLwogCi0jZGVmaW5lIEFDUElfR1BFX1JVTl9FTkFCTEVfTUFTSyAgICAgICAgKHU4KSAweDIwCi0jZGVmaW5lIEFDUElfR1BFX1JVTl9FTkFCTEVEICAgICAgICAgICAgKHU4KSAweDIwCi0jZGVmaW5lIEFDUElfR1BFX1JVTl9ESVNBQkxFRCAgICAgICAgICAgKHU4KSAweDAwCS8qIERlZmF1bHQgKi8KLQotI2RlZmluZSBBQ1BJX0dQRV9XQUtFX0VOQUJMRV9NQVNLICAgICAgICh1OCkgMHg0MAotI2RlZmluZSBBQ1BJX0dQRV9XQUtFX0VOQUJMRUQgICAgICAgICAgICh1OCkgMHg0MAotI2RlZmluZSBBQ1BJX0dQRV9XQUtFX0RJU0FCTEVEICAgICAgICAgICh1OCkgMHgwMAkvKiBEZWZhdWx0ICovCi0KLSNkZWZpbmUgQUNQSV9HUEVfRU5BQkxFX01BU0sgICAgICAgICAgICAodTgpIDB4NjAJLyogQm90aCBydW4vd2FrZSAqLwotCiAvKgogICogRmxhZ3MgZm9yIEdQRSBhbmQgTG9jayBpbnRlcmZhY2VzCiAgKi8KQEAgLTgwMSw3ICs3OTMsNyBAQAogCWFjcGlfb2JqZWN0X3R5cGUgdHlwZTsJLyogU2VlIGRlZmluaXRpb24gb2YgYWNwaV9uc190eXBlIGZvciB2YWx1ZXMgKi8KIAlzdHJ1Y3QgewogCQlhY3BpX29iamVjdF90eXBlIHR5cGU7CS8qIEFDUElfVFlQRV9JTlRFR0VSICovCi0JCWFjcGlfaW50ZWdlciB2YWx1ZTsJLyogVGhlIGFjdHVhbCBudW1iZXIgKi8KKwkJdTY0IHZhbHVlOwkvKiBUaGUgYWN0dWFsIG51bWJlciAqLwogCX0gaW50ZWdlcjsKIAogCXN0cnVjdCB7CkBAIC05NDUsNyArOTM3LDcgQEAKIGFjcGlfc3RhdHVzKCphY3BpX2Fkcl9zcGFjZV9oYW5kbGVyKSAodTMyIGZ1bmN0aW9uLAogCQkJCSAgICAgIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAogCQkJCSAgICAgIHUzMiBiaXRfd2lkdGgsCi0JCQkJICAgICAgYWNwaV9pbnRlZ2VyICogdmFsdWUsCisJCQkJICAgICAgdTY0ICp2YWx1ZSwKIAkJCQkgICAgICB2b2lkICpoYW5kbGVyX2NvbnRleHQsCiAJCQkJICAgICAgdm9pZCAqcmVnaW9uX2NvbnRleHQpOwogCkBAIC0xMDA1LDcgKzk5Nyw3IEBACiAJdTggaGlnaGVzdF9kc3RhdGVzWzRdOwkvKiBfc3hfZCB2YWx1ZXM6IDB4RkYgaW5kaWNhdGVzIG5vdCB2YWxpZCAqLwogCXU4IGxvd2VzdF9kc3RhdGVzWzVdOwkvKiBfc3hfdyB2YWx1ZXM6IDB4RkYgaW5kaWNhdGVzIG5vdCB2YWxpZCAqLwogCXUzMiBjdXJyZW50X3N0YXR1czsJLyogX1NUQSB2YWx1ZSAqLwotCWFjcGlfaW50ZWdlciBhZGRyZXNzOwkvKiBfQURSIHZhbHVlICovCisJdTY0IGFkZHJlc3M7CS8qIF9BRFIgdmFsdWUgKi8KIAlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCBoYXJkd2FyZV9pZDsJLyogX0hJRCB2YWx1ZSAqLwogCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkIHVuaXF1ZV9pZDsJLyogX1VJRCB2YWx1ZSAqLwogCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgY29tcGF0aWJsZV9pZF9saXN0OwkvKiBfQ0lEIGxpc3QgPG11c3QgYmUgbGFzdD4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2Vudi5oIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZW52LmgKaW5kZXggZTYyZjEwZC4uYzA1YWViYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZW52LmgKKysrIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZW52LmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA4LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxMCwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMTEsOCArMzExLDggQEAKICNkZWZpbmUgQUNQSV9NRU1DTVAoczEsczIsbikgICAgYWNwaV91dF9tZW1jbXAoKGNvbnN0IGNoYXIgKikoczEpLCAoY29uc3QgY2hhciAqKShzMiksIChhY3BpX3NpemUpKG4pKQogI2RlZmluZSBBQ1BJX01FTUNQWShkLHMsbikgICAgICAodm9pZCkgYWNwaV91dF9tZW1jcHkgKChkKSwgKHMpLCAoYWNwaV9zaXplKShuKSkKICNkZWZpbmUgQUNQSV9NRU1TRVQoZCx2LG4pICAgICAgKHZvaWQpIGFjcGlfdXRfbWVtc2V0ICgoZCksICh2KSwgKGFjcGlfc2l6ZSkobikpCi0jZGVmaW5lIEFDUElfVE9VUFBFUiAgICAgICAgICAgIGFjcGlfdXRfdG9fdXBwZXIKLSNkZWZpbmUgQUNQSV9UT0xPV0VSICAgICAgICAgICAgYWNwaV91dF90b19sb3dlcgorI2RlZmluZSBBQ1BJX1RPVVBQRVIoYykgICAgICAgICBhY3BpX3V0X3RvX3VwcGVyICgoaW50KSAoYykpCisjZGVmaW5lIEFDUElfVE9MT1dFUihjKSAgICAgICAgIGFjcGlfdXRfdG9fbG93ZXIgKChpbnQpIChjKSkKIAogI2VuZGlmCQkJCS8qIEFDUElfVVNFX1NZU1RFTV9DTElCUkFSWSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNnY2MuaCBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2djYy5oCmluZGV4IDZhYWRiZjguLjBjZDUzZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2djYy5oCisrKyBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2djYy5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaCBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmgKaW5kZXggMDk0Njk5Ny4uZTUwMzlhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaAorKysgYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOSwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTAsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCmluZGV4IDBlYTVlZjQuLjI5ODMxNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKQEAgLTkyLDExICs5MiwxMSBAQAogLyogUGVyZm9ybWFuY2UgTWFuYWdlbWVudCAqLwogCiBzdHJ1Y3QgYWNwaV9wc2RfcGFja2FnZSB7Ci0JYWNwaV9pbnRlZ2VyIG51bV9lbnRyaWVzOwotCWFjcGlfaW50ZWdlciByZXZpc2lvbjsKLQlhY3BpX2ludGVnZXIgZG9tYWluOwotCWFjcGlfaW50ZWdlciBjb29yZF90eXBlOwotCWFjcGlfaW50ZWdlciBudW1fcHJvY2Vzc29yczsKKwl1NjQgbnVtX2VudHJpZXM7CisJdTY0IHJldmlzaW9uOworCXU2NCBkb21haW47CisJdTY0IGNvb3JkX3R5cGU7CisJdTY0IG51bV9wcm9jZXNzb3JzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBhY3BpX3BjdF9yZWdpc3RlciB7CkBAIC0xMTAsMTIgKzExMCwxMiBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9weCB7Ci0JYWNwaV9pbnRlZ2VyIGNvcmVfZnJlcXVlbmN5OwkvKiBtZWdhaGVydHogKi8KLQlhY3BpX2ludGVnZXIgcG93ZXI7CS8qIG1pbGxpV2F0dHMgKi8KLQlhY3BpX2ludGVnZXIgdHJhbnNpdGlvbl9sYXRlbmN5OwkvKiBtaWNyb3NlY29uZHMgKi8KLQlhY3BpX2ludGVnZXIgYnVzX21hc3Rlcl9sYXRlbmN5OwkvKiBtaWNyb3NlY29uZHMgKi8KLQlhY3BpX2ludGVnZXIgY29udHJvbDsJLyogY29udHJvbCB2YWx1ZSAqLwotCWFjcGlfaW50ZWdlciBzdGF0dXM7CS8qIHN1Y2Nlc3MgaW5kaWNhdG9yICovCisJdTY0IGNvcmVfZnJlcXVlbmN5OwkvKiBtZWdhaGVydHogKi8KKwl1NjQgcG93ZXI7CS8qIG1pbGxpV2F0dHMgKi8KKwl1NjQgdHJhbnNpdGlvbl9sYXRlbmN5OwkvKiBtaWNyb3NlY29uZHMgKi8KKwl1NjQgYnVzX21hc3Rlcl9sYXRlbmN5OwkvKiBtaWNyb3NlY29uZHMgKi8KKwl1NjQgY29udHJvbDsJLyogY29udHJvbCB2YWx1ZSAqLworCXU2NCBzdGF0dXM7CS8qIHN1Y2Nlc3MgaW5kaWNhdG9yICovCiB9OwogCiBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgewpAQCAtMTMzLDExICsxMzMsMTEgQEAKIC8qIFRocm90dGxpbmcgQ29udHJvbCAqLwogCiBzdHJ1Y3QgYWNwaV90c2RfcGFja2FnZSB7Ci0JYWNwaV9pbnRlZ2VyIG51bV9lbnRyaWVzOwotCWFjcGlfaW50ZWdlciByZXZpc2lvbjsKLQlhY3BpX2ludGVnZXIgZG9tYWluOwotCWFjcGlfaW50ZWdlciBjb29yZF90eXBlOwotCWFjcGlfaW50ZWdlciBudW1fcHJvY2Vzc29yczsKKwl1NjQgbnVtX2VudHJpZXM7CisJdTY0IHJldmlzaW9uOworCXU2NCBkb21haW47CisJdTY0IGNvb3JkX3R5cGU7CisJdTY0IG51bV9wcm9jZXNzb3JzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBhY3BpX3B0Y19yZWdpc3RlciB7CkBAIC0xNTEsMTEgKzE1MSwxMSBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl90eF90c3MgewotCWFjcGlfaW50ZWdlciBmcmVxcGVyY2VudGFnZTsJLyogKi8KLQlhY3BpX2ludGVnZXIgcG93ZXI7CS8qIG1pbGxpV2F0dHMgKi8KLQlhY3BpX2ludGVnZXIgdHJhbnNpdGlvbl9sYXRlbmN5OwkvKiBtaWNyb3NlY29uZHMgKi8KLQlhY3BpX2ludGVnZXIgY29udHJvbDsJLyogY29udHJvbCB2YWx1ZSAqLwotCWFjcGlfaW50ZWdlciBzdGF0dXM7CS8qIHN1Y2Nlc3MgaW5kaWNhdG9yICovCisJdTY0IGZyZXFwZXJjZW50YWdlOwkvKiAqLworCXU2NCBwb3dlcjsJLyogbWlsbGlXYXR0cyAqLworCXU2NCB0cmFuc2l0aW9uX2xhdGVuY3k7CS8qIG1pY3Jvc2Vjb25kcyAqLworCXU2NCBjb250cm9sOwkvKiBjb250cm9sIHZhbHVlICovCisJdTY0IHN0YXR1czsJLyogc3VjY2VzcyBpbmRpY2F0b3IgKi8KIH07CiBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfdHggewogCXUxNiBwb3dlcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL21kNS5oIGIvaW5jbHVkZS9jcnlwdG8vbWQ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVmMjk5YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY3J5cHRvL21kNS5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX0NSWVBUT19NRDVfSAorI2RlZmluZSBfQ1JZUFRPX01ENV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE1ENV9ESUdFU1RfU0laRQkJMTYKKyNkZWZpbmUgTUQ1X0hNQUNfQkxPQ0tfU0laRQk2NAorI2RlZmluZSBNRDVfQkxPQ0tfV09SRFMJCTE2CisjZGVmaW5lIE1ENV9IQVNIX1dPUkRTCQk0CisKK3N0cnVjdCBtZDVfc3RhdGUgeworCXUzMiBoYXNoW01ENV9IQVNIX1dPUkRTXTsKKwl1MzIgYmxvY2tbTUQ1X0JMT0NLX1dPUkRTXTsKKwl1NjQgYnl0ZV9jb3VudDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vcGNyeXB0LmggYi9pbmNsdWRlL2NyeXB0by9wY3J5cHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Q4YmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jcnlwdG8vcGNyeXB0LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIHBjcnlwdCAtIFBhcmFsbGVsIGNyeXB0byBlbmdpbmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IHNlY3VuZXQgU2VjdXJpdHkgTmV0d29ya3MgQUcKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTdGVmZmVuIEtsYXNzZXJ0IDxzdGVmZmVuLmtsYXNzZXJ0QHNlY3VuZXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmbmRlZiBfQ1JZUFRPX1BDUllQVF9ICisjZGVmaW5lIF9DUllQVE9fUENSWVBUX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZGF0YS5oPgorCitzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgeworCXN0cnVjdCBwYWRhdGFfcHJpdglwYWRhdGE7CisJdm9pZAkJCSpkYXRhOworCXZvaWQJCQkqX19jdHhbXSBDUllQVE9fTUlOQUxJR05fQVRUUjsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcGNyeXB0X3JlcXVlc3RfY3R4KHN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiByZXEtPl9fY3R4OworfQorCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBjcnlwdF9yZXF1ZXN0X3BhZGF0YShzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gJnJlcS0+cGFkYXRhOworfQorCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnBjcnlwdF9wYWRhdGFfcmVxdWVzdChzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBhZGF0YSwgc3RydWN0IHBjcnlwdF9yZXF1ZXN0LCBwYWRhdGEpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9tb2RlLmggYi9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCmluZGV4IGJjNGZkZjIuLmM1YmExNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX21vZGUuaApAQCAtODUsNyArODUsNyBAQAogCV9fdTE2IGhkaXNwbGF5LCBoc3luY19zdGFydCwgaHN5bmNfZW5kLCBodG90YWwsIGhza2V3OwogCV9fdTE2IHZkaXNwbGF5LCB2c3luY19zdGFydCwgdnN5bmNfZW5kLCB2dG90YWwsIHZzY2FuOwogCi0JX191MzIgdnJlZnJlc2g7IC8qIHZlcnRpY2FsIHJlZnJlc2ggKiAxMDAwICovCisJX191MzIgdnJlZnJlc2g7CiAKIAlfX3UzMiBmbGFnczsKIAlfX3UzMiB0eXBlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vbm91dmVhdV9kcm0uaCBiL2luY2x1ZGUvZHJtL25vdXZlYXVfZHJtLmgKaW5kZXggMWU2N2M0NC4uZjc0NTk0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vbm91dmVhdV9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9ub3V2ZWF1X2RybS5oCkBAIC03Nyw2ICs3Nyw3IEBACiAjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fUENJX1BIWVNJQ0FMICAgIDEwCiAjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fQ0hJUFNFVF9JRCAgICAgIDExCiAjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fVk1fVlJBTV9CQVNFICAgIDEyCisjZGVmaW5lIE5PVVZFQVVfR0VUUEFSQU1fR1JBUEhfVU5JVFMgICAgIDEzCiBzdHJ1Y3QgZHJtX25vdXZlYXVfZ2V0cGFyYW0gewogCXVpbnQ2NF90IHBhcmFtOwogCXVpbnQ2NF90IHZhbHVlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdm13Z2Z4X2RybS5oIGIvaW5jbHVkZS9kcm0vdm13Z2Z4X2RybS5oCmluZGV4IDJiZTdlMTIuLmM3NjQ1ZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3Ztd2dmeF9kcm0uaAorKysgYi9pbmNsdWRlL2RybS92bXdnZnhfZHJtLmgKQEAgLTY4LDcgKzY4LDggQEAKICNkZWZpbmUgRFJNX1ZNV19QQVJBTV9OVU1fRlJFRV9TVFJFQU1TIDEKICNkZWZpbmUgRFJNX1ZNV19QQVJBTV8zRCAgICAgICAgICAgICAgIDIKICNkZWZpbmUgRFJNX1ZNV19QQVJBTV9GSUZPX09GRlNFVCAgICAgIDMKLQorI2RlZmluZSBEUk1fVk1XX1BBUkFNX0hXX0NBUFMgICAgICAgICAgNAorI2RlZmluZSBEUk1fVk1XX1BBUkFNX0ZJRk9fQ0FQUyAgICAgICAgNQogCiAvKioKICAqIHN0cnVjdCBkcm1fdm13X2dldHBhcmFtX2FyZwpAQCAtMTgxLDYgKzE4Miw4IEBACiAgKiBUaGUgc2l6ZSBvZiB0aGUgYXJyYXkgc2hvdWxkIGVxdWFsIHRoZSB0b3RhbCBudW1iZXIgb2YgbWlwbWFwIGxldmVscy4KICAqIEBzaGFyZWFibGU6IEJvb2xlYW4gd2hldGhlciBvdGhlciBjbGllbnRzIChhcyBpZGVudGlmaWVkIGJ5IGZpbGUgZGVzY3JpcHRvcnMpCiAgKiBtYXkgcmVmZXJlbmNlIHRoaXMgc3VyZmFjZS4KKyAqIEBzY2Fub3V0OiBCb29sZWFuIHdoZXRoZXIgdGhlIHN1cmZhY2UgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhCisgKiBzY2Fub3V0LgogICoKICAqIElucHV0IGRhdGEgdG8gdGhlIERSTV9WTVdfQ1JFQVRFX1NVUkZBQ0UgSW9jdGwuCiAgKiBPdXRwdXQgZGF0YSBmcm9tIHRoZSBEUk1fVk1XX1JFRl9TVVJGQUNFIElvY3RsLgpAQCAtMTkyLDcgKzE5NSw3IEBACiAJdWludDMyX3QgbWlwX2xldmVsc1tEUk1fVk1XX01BWF9TVVJGQUNFX0ZBQ0VTXTsKIAl1aW50NjRfdCBzaXplX2FkZHI7CiAJaW50MzJfdCBzaGFyZWFibGU7Ci0JdWludDMyX3QgcGFkNjQ7CisJaW50MzJfdCBzY2Fub3V0OwogfTsKIAogLyoqCkBAIC0yOTUsMTcgKzI5OCwyOCBAQAogICoKICAqIEBjb21tYW5kczogVXNlci1zcGFjZSBhZGRyZXNzIG9mIGEgY29tbWFuZCBidWZmZXIgY2FzdCB0byBhbiB1aW50NjRfdC4KICAqIEBjb21tYW5kLXNpemU6IFNpemUgaW4gYnl0ZXMgb2YgdGhlIGNvbW1hbmQgYnVmZmVyLgorICogQHRocm90dGxlLXVzOiBTbGVlcCB1bnRpbCBzb2Z0d2FyZSBpcyBsZXNzIHRoYW4gQHRocm90dGxlX3VzCisgKiBtaWNyb3NlY29uZHMgYWhlYWQgb2YgaGFyZHdhcmUuIFRoZSBkcml2ZXIgbWF5IHJvdW5kIHRoaXMgdmFsdWUKKyAqIHRvIHRoZSBuZWFyZXN0IGtlcm5lbCB0aWNrLgogICogQGZlbmNlX3JlcDogVXNlci1zcGFjZSBhZGRyZXNzIG9mIGEgc3RydWN0IGRybV92bXdfZmVuY2VfcmVwIGNhc3QgdG8gYW4KICAqIHVpbnQ2NF90LgorICogQHZlcnNpb246IEFsbG93cyBleHBhbmRpbmcgdGhlIGV4ZWNidWYgaW9jdGwgcGFyYW1ldGVycyB3aXRob3V0IGJyZWFraW5nCisgKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgc2luY2UgdXNlci1zcGFjZSB3aWxsIGFsd2F5cyB0ZWxsIHRoZSBrZXJuZWwKKyAqIHdoaWNoIHZlcnNpb24gaXQgdXNlcy4KKyAqIEBmbGFnczogRXhlY2J1ZiBmbGFncy4gTm9uZSBjdXJyZW50bHkuCiAgKgogICogQXJndW1lbnQgdG8gdGhlIERSTV9WTVdfRVhFQ0JVRiBJb2N0bC4KICAqLwogCisjZGVmaW5lIERSTV9WTVdfRVhFQ0JVRl9WRVJTSU9OIDAKKwogc3RydWN0IGRybV92bXdfZXhlY2J1Zl9hcmcgewogCXVpbnQ2NF90IGNvbW1hbmRzOwogCXVpbnQzMl90IGNvbW1hbmRfc2l6ZTsKLQl1aW50MzJfdCBwYWQ2NDsKKwl1aW50MzJfdCB0aHJvdHRsZV91czsKIAl1aW50NjRfdCBmZW5jZV9yZXA7CisJIHVpbnQzMl90IHZlcnNpb247CisJIHVpbnQzMl90IGZsYWdzOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IDc1NmY4MzEuLjkxYmUwZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC00Myw2ICs0Myw3IEBACiBoZWFkZXIteSArPSBicHFldGhlci5oCiBoZWFkZXIteSArPSBic2cuaAogaGVhZGVyLXkgKz0gY2FuLmgKK2hlYWRlci15ICs9IGNjaXNzX2RlZnMuaAogaGVhZGVyLXkgKz0gY2RrLmgKIGhlYWRlci15ICs9IGNoaW8uaAogaGVhZGVyLXkgKz0gY29kYV9wc2Rldi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtYmEvYnVzLmggYi9pbmNsdWRlL2xpbnV4L2FtYmEvYnVzLmgKaW5kZXggYWI5NDMzNS4uNjgxNmJlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hbWJhL2J1cy5oCisrKyBiL2luY2x1ZGUvbGludXgvYW1iYS9idXMuaApAQCAtMSw1ICsxLDkgQEAKIC8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2FtYmEuaAorICogIGxpbnV4L2luY2x1ZGUvYW1iYS9idXMuaAorICoKKyAqICBUaGlzIGRldmljZSB0eXBlIGRlYWxzIHdpdGggQVJNIFByaW1lQ2VsbHMgYW5kIGFueXRoaW5nIGVsc2UgdGhhdAorICogIHByZXNlbnRzIGEgcHJvcGVyIENJRCAoMHhCMTA1RjAwRCkgYXQgdGhlIGVuZCBvZiB0aGUgSS9PIHJlZ2lzdGVyCisgKiAgcmVnaW9uIG9yIHRoYXQgaXMgZGVyaXZlZCBmcm9tIGEgUHJpbWVDZWxsLgogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdGEuaCBiL2luY2x1ZGUvbGludXgvYXRhLmgKaW5kZXggMzhhNjk0OC4uYjRjODVlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0YS5oCkBAIC02NDcsOSArNjQ3LDkgQEAKIAlyZXR1cm4gaWRbQVRBX0lEX1NFQ1RPUl9TSVpFXSAmICgxIDw8IDEzKTsKIH0KIAotc3RhdGljIGlubGluZSB1OCBhdGFfaWRfbG9naWNhbF9wZXJfcGh5c2ljYWxfc2VjdG9ycyhjb25zdCB1MTYgKmlkKQorc3RhdGljIGlubGluZSB1MTYgYXRhX2lkX2xvZ2ljYWxfcGVyX3BoeXNpY2FsX3NlY3RvcnMoY29uc3QgdTE2ICppZCkKIHsKLQlyZXR1cm4gaWRbQVRBX0lEX1NFQ1RPUl9TSVpFXSAmIDB4ZjsKKwlyZXR1cm4gMSA8PCAoaWRbQVRBX0lEX1NFQ1RPUl9TSVpFXSAmIDB4Zik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGF0YV9pZF9oYXNfbGJhNDgoY29uc3QgdTE2ICppZCkKQEAgLTg0MSw3ICs4NDEsOCBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhdGFfaWRfaXNfY2ZhKGNvbnN0IHUxNiAqaWQpCiB7Ci0JaWYgKGlkW0FUQV9JRF9DT05GSUddID09IDB4ODQ4QSkJLyogVHJhZGl0aW9uYWwgQ0YgKi8KKwlpZiAoKGlkW0FUQV9JRF9DT05GSUddID09IDB4ODQ4QSkgfHwJLyogVHJhZGl0aW9uYWwgQ0YgKi8KKwkgICAgKGlkW0FUQV9JRF9DT05GSUddID09IDB4ODQ0QSkpCS8qIERlbGtpbiBEZXZpY2VzIENGICovCiAJCXJldHVybiAxOwogCS8qCiAJICogQ0Ygc3BlY3MgZG9uJ3QgcmVxdWlyZSBzcGVjaWZpYyB2YWx1ZSBpbiB0aGUgd29yZCAwIGFueW1vcmUgYW5kIHlldApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaXRvcHMuaCBiL2luY2x1ZGUvbGludXgvYml0b3BzLmgKaW5kZXggYzA1YTI5Yy4uMjViOGIyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCkBAIC0yNSw3ICsyNSw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0X2JpdG1hc2tfb3JkZXIodW5zaWduZWQgaW50IGNvdW50KQogewogCWludCBvcmRlcjsKLQkKKwogCW9yZGVyID0gZmxzKGNvdW50KTsKIAlyZXR1cm4gb3JkZXI7CS8qIFdlIGNvdWxkIGJlIHNsaWdodGx5IG1vcmUgY2xldmVyIHdpdGggLTEgaGVyZS4uLiAqLwogfQpAQCAtMzMsNyArMzMsNyBAQAogc3RhdGljIF9faW5saW5lX18gaW50IGdldF9jb3VudF9vcmRlcih1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJaW50IG9yZGVyOwotCQorCiAJb3JkZXIgPSBmbHMoY291bnQpIC0gMTsKIAlpZiAoY291bnQgJiAoY291bnQgLSAxKSkKIAkJb3JkZXIrKzsKQEAgLTQ1LDYgKzQ1LDMxIEBACiAJcmV0dXJuIHNpemVvZih3KSA9PSA0ID8gaHdlaWdodDMyKHcpIDogaHdlaWdodDY0KHcpOwogfQogCisvKgorICogQ2xlYXJseSBzbG93IHZlcnNpb25zIG9mIHRoZSBod2VpZ2h0TigpIGZ1bmN0aW9ucywgdGhlaXIgYmVuZWZpdCBpcworICogb2YgY291cnNlIGNvbXBpbGUgdGltZSBldmFsdWF0aW9uIG9mIGNvbnN0YW50IGFyZ3VtZW50cy4KKyAqLworI2RlZmluZSBIV0VJR0hUOCh3KQkJCQkJXAorICAgICAgKAlCVUlMRF9CVUdfT05fWkVSTyghX19idWlsdGluX2NvbnN0YW50X3AodykpICsJXAorCSghISgodykgJiAoMVVMTCA8PCAwKSkpICsJCQlcCisJKCEhKCh3KSAmICgxVUxMIDw8IDEpKSkgKwkJCVwKKwkoISEoKHcpICYgKDFVTEwgPDwgMikpKSArCQkJXAorCSghISgodykgJiAoMVVMTCA8PCAzKSkpICsJCQlcCisJKCEhKCh3KSAmICgxVUxMIDw8IDQpKSkgKwkJCVwKKwkoISEoKHcpICYgKDFVTEwgPDwgNSkpKSArCQkJXAorCSghISgodykgJiAoMVVMTCA8PCA2KSkpICsJCQlcCisJKCEhKCh3KSAmICgxVUxMIDw8IDcpKSkJKQorCisjZGVmaW5lIEhXRUlHSFQxNih3KSAoSFdFSUdIVDgodykgICsgSFdFSUdIVDgoKHcpID4+IDgpKQorI2RlZmluZSBIV0VJR0hUMzIodykgKEhXRUlHSFQxNih3KSArIEhXRUlHSFQxNigodykgPj4gMTYpKQorI2RlZmluZSBIV0VJR0hUNjQodykgKEhXRUlHSFQzMih3KSArIEhXRUlHSFQzMigodykgPj4gMzIpKQorCisvKgorICogVHlwZSBpbnZhcmlhbnQgdmVyc2lvbiB0aGF0IHNpbXBseSBjYXN0cyB0aGluZ3MgdG8gdGhlCisgKiBsYXJnZXN0IHR5cGUuCisgKi8KKyNkZWZpbmUgSFdFSUdIVCh3KSAgIEhXRUlHSFQ2NCgodTY0KSh3KSkKKwogLyoqCiAgKiByb2wzMiAtIHJvdGF0ZSBhIDMyLWJpdCB2YWx1ZSBsZWZ0CiAgKiBAd29yZDogdmFsdWUgdG8gcm90YXRlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCA1YzgwMTg5Li5lYmQyMmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTMxNiw4ICszMTYsNyBAQAogCXVuc2lnbmVkIGludAkJZGlzY2FyZF9hbGlnbm1lbnQ7CiAKIAl1bnNpZ25lZCBzaG9ydAkJbG9naWNhbF9ibG9ja19zaXplOwotCXVuc2lnbmVkIHNob3J0CQltYXhfaHdfc2VnbWVudHM7Ci0JdW5zaWduZWQgc2hvcnQJCW1heF9waHlzX3NlZ21lbnRzOworCXVuc2lnbmVkIHNob3J0CQltYXhfc2VnbWVudHM7CiAKIAl1bnNpZ25lZCBjaGFyCQltaXNhbGlnbmVkOwogCXVuc2lnbmVkIGNoYXIJCWRpc2NhcmRfbWlzYWxpZ25lZDsKQEAgLTQ2MSw4ICs0NjAsOCBAQAogI2RlZmluZSBRVUVVRV9GTEFHX05PTlJPVCAgICAgIDE0CS8qIG5vbi1yb3RhdGlvbmFsIGRldmljZSAoU1NEKSAqLwogI2RlZmluZSBRVUVVRV9GTEFHX1ZJUlQgICAgICAgIFFVRVVFX0ZMQUdfTk9OUk9UIC8qIHBhcmF2aXJ0IGRldmljZSAqLwogI2RlZmluZSBRVUVVRV9GTEFHX0lPX1NUQVQgICAgIDE1CS8qIGRvIElPIHN0YXRzICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfQ1EJICAgICAgIDE2CS8qIGhhcmR3YXJlIGRvZXMgcXVldWluZyAqLwotI2RlZmluZSBRVUVVRV9GTEFHX0RJU0NBUkQgICAgIDE3CS8qIHN1cHBvcnRzIERJU0NBUkQgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19ESVNDQVJEICAgICAxNgkvKiBzdXBwb3J0cyBESVNDQVJEICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfTk9YTUVSR0VTICAgMTcJLyogTm8gZXh0ZW5kZWQgbWVyZ2VzICovCiAKICNkZWZpbmUgUVVFVUVfRkxBR19ERUZBVUxUCSgoMSA8PCBRVUVVRV9GTEFHX0lPX1NUQVQpIHwJCVwKIAkJCQkgKDEgPDwgUVVFVUVfRkxBR19DTFVTVEVSKSB8CQlcCkBAIC01ODYsOSArNTg1LDEwIEBACiAKICNkZWZpbmUgYmxrX3F1ZXVlX3BsdWdnZWQocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19QTFVHR0VELCAmKHEpLT5xdWV1ZV9mbGFncykKICNkZWZpbmUgYmxrX3F1ZXVlX3RhZ2dlZChxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX1FVRVVFRCwgJihxKS0+cXVldWVfZmxhZ3MpCi0jZGVmaW5lIGJsa19xdWV1ZV9xdWV1aW5nKHEpCXRlc3RfYml0KFFVRVVFX0ZMQUdfQ1EsICYocSktPnF1ZXVlX2ZsYWdzKQogI2RlZmluZSBibGtfcXVldWVfc3RvcHBlZChxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX1NUT1BQRUQsICYocSktPnF1ZXVlX2ZsYWdzKQogI2RlZmluZSBibGtfcXVldWVfbm9tZXJnZXMocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19OT01FUkdFUywgJihxKS0+cXVldWVfZmxhZ3MpCisjZGVmaW5lIGJsa19xdWV1ZV9ub3htZXJnZXMocSkJXAorCXRlc3RfYml0KFFVRVVFX0ZMQUdfTk9YTUVSR0VTLCAmKHEpLT5xdWV1ZV9mbGFncykKICNkZWZpbmUgYmxrX3F1ZXVlX25vbnJvdChxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX05PTlJPVCwgJihxKS0+cXVldWVfZmxhZ3MpCiAjZGVmaW5lIGJsa19xdWV1ZV9pb19zdGF0KHEpCXRlc3RfYml0KFFVRVVFX0ZMQUdfSU9fU1RBVCwgJihxKS0+cXVldWVfZmxhZ3MpCiAjZGVmaW5lIGJsa19xdWV1ZV9mbHVzaGluZyhxKQkoKHEpLT5vcmRzZXEpCkBAIC05MjAsMTAgKzkyMCwyNyBAQAogZXh0ZXJuIHZvaWQgYmxrX2NsZWFudXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKik7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWFrZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIG1ha2VfcmVxdWVzdF9mbiAqKTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9ib3VuY2VfbGltaXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdTY0KTsKLWV4dGVybiB2b2lkIGJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgc2hvcnQpOwotZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBzaG9ydCk7CisKKy8qIFRlbXBvcmFyeSBjb21wYXRpYmlsaXR5IHdyYXBwZXIgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfcXVldWVfbWF4X3NlY3RvcnMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGludCBtYXgpCit7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHEsIG1heCk7Cit9CisKK2V4dGVybiB2b2lkIGJsa19xdWV1ZV9tYXhfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgc2hvcnQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBzaG9ydCBtYXgpCit7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxLCBtYXgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgc2hvcnQgbWF4KQoreworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocSwgbWF4KTsKK30KKworCiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX21heF9kaXNjYXJkX3NlY3RvcnMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiAJCXVuc2lnbmVkIGludCBtYXhfZGlzY2FyZF9zZWN0b3JzKTsKQEAgLTEwMTYsMTEgKzEwMzMsMTUgQEAKICNkZWZpbmUgTUFYX1BIWVNfU0VHTUVOVFMgMTI4CiAjZGVmaW5lIE1BWF9IV19TRUdNRU5UUyAxMjgKICNkZWZpbmUgU0FGRV9NQVhfU0VDVE9SUyAyNTUKLSNkZWZpbmUgQkxLX0RFRl9NQVhfU0VDVE9SUyAxMDI0Ci0KICNkZWZpbmUgTUFYX1NFR01FTlRfU0laRQk2NTUzNgogCi0jZGVmaW5lIEJMS19TRUdfQk9VTkRBUllfTUFTSwkweEZGRkZGRkZGVUwKK2VudW0gYmxrX2RlZmF1bHRfbGltaXRzIHsKKwlCTEtfTUFYX1NFR01FTlRTCT0gMTI4LAorCUJMS19TQUZFX01BWF9TRUNUT1JTCT0gMjU1LAorCUJMS19ERUZfTUFYX1NFQ1RPUlMJPSAxMDI0LAorCUJMS19NQVhfU0VHTUVOVF9TSVpFCT0gNjU1MzYsCisJQkxLX1NFR19CT1VOREFSWV9NQVNLCT0gMHhGRkZGRkZGRlVMLAorfTsKIAogI2RlZmluZSBibGtkZXZfZW50cnlfdG9fcmVxdWVzdChlbnRyeSkgbGlzdF9lbnRyeSgoZW50cnkpLCBzdHJ1Y3QgcmVxdWVzdCwgcXVldWVsaXN0KQogCkBAIC0xMDQ0LDE0ICsxMDY1LDkgQEAKIAlyZXR1cm4gcS0+bGltaXRzLm1heF9od19zZWN0b3JzOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHF1ZXVlX21heF9od19zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgcXVldWVfbWF4X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewotCXJldHVybiBxLT5saW1pdHMubWF4X2h3X3NlZ21lbnRzOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQotewotCXJldHVybiBxLT5saW1pdHMubWF4X3BoeXNfc2VnbWVudHM7CisJcmV0dXJuIHEtPmxpbWl0cy5tYXhfc2VnbWVudHM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHF1ZXVlX21heF9zZWdtZW50X3NpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCkBAIC0xMTEyLDE4ICsxMTI4LDEzIEBACiAJcmV0dXJuIHEtPmxpbWl0cy5hbGlnbm1lbnRfb2Zmc2V0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBxdWV1ZV9saW1pdF9hbGlnbm1lbnRfb2Zmc2V0KHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgc2VjdG9yX3Qgb2Zmc2V0KQorc3RhdGljIGlubGluZSBpbnQgcXVldWVfbGltaXRfYWxpZ25tZW50X29mZnNldChzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHNlY3Rvcl90IHNlY3RvcikKIHsKIAl1bnNpZ25lZCBpbnQgZ3JhbnVsYXJpdHkgPSBtYXgobGltLT5waHlzaWNhbF9ibG9ja19zaXplLCBsaW0tPmlvX21pbik7CisJdW5zaWduZWQgaW50IGFsaWdubWVudCA9IChzZWN0b3IgPDwgOSkgJiAoZ3JhbnVsYXJpdHkgLSAxKTsKIAotCW9mZnNldCAmPSBncmFudWxhcml0eSAtIDE7Ci0JcmV0dXJuIChncmFudWxhcml0eSArIGxpbS0+YWxpZ25tZW50X29mZnNldCAtIG9mZnNldCkgJiAoZ3JhbnVsYXJpdHkgLSAxKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcXVldWVfc2VjdG9yX2FsaWdubWVudF9vZmZzZXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCi0JCQkJCQlzZWN0b3JfdCBzZWN0b3IpCi17Ci0JcmV0dXJuIHF1ZXVlX2xpbWl0X2FsaWdubWVudF9vZmZzZXQoJnEtPmxpbWl0cywgc2VjdG9yIDw8IDkpOworCXJldHVybiAoZ3JhbnVsYXJpdHkgKyBsaW0tPmFsaWdubWVudF9vZmZzZXQgLSBhbGlnbm1lbnQpCisJCSYgKGdyYW51bGFyaXR5IC0gMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGJkZXZfYWxpZ25tZW50X29mZnNldChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQpAQCAtMTE0NywxMCArMTE1OCw4IEBACiAJcmV0dXJuIHEtPmxpbWl0cy5kaXNjYXJkX2FsaWdubWVudDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcXVldWVfc2VjdG9yX2Rpc2NhcmRfYWxpZ25tZW50KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJCQkJIHNlY3Rvcl90IHNlY3RvcikKK3N0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX2xpbWl0X2Rpc2NhcmRfYWxpZ25tZW50KHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgc2VjdG9yX3Qgc2VjdG9yKQogewotCXN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSA9ICZxLT5saW1pdHM7CiAJdW5zaWduZWQgaW50IGFsaWdubWVudCA9IChzZWN0b3IgPDwgOSkgJiAobGltLT5kaXNjYXJkX2dyYW51bGFyaXR5IC0gMSk7CiAKIAlyZXR1cm4gKGxpbS0+ZGlzY2FyZF9ncmFudWxhcml0eSArIGxpbS0+ZGlzY2FyZF9hbGlnbm1lbnQgLSBhbGlnbm1lbnQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NjaXNzX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvY2Npc3NfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNmI2NzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NjaXNzX2RlZnMuaApAQCAtMCwwICsxLDEzMCBAQAorI2lmbmRlZiBDQ0lTU19ERUZTX0gKKyNkZWZpbmUgQ0NJU1NfREVGU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBnZW5lcmFsIGJvdW5kYXJ5IGRlZmluaXRpb25zICovCisjZGVmaW5lIFNFTlNFSU5GT0JZVEVTICAgICAgICAgIDMyIC8qIG5vdGUgdGhhdCB0aGlzIHZhbHVlIG1heSB2YXJ5CisJCQkJICAgICAgYmV0d2VlbiBob3N0IGltcGxlbWVudGF0aW9ucyAqLworCisvKiBDb21tYW5kIFN0YXR1cyB2YWx1ZSAqLworI2RlZmluZSBDTURfU1VDQ0VTUyAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgQ01EX1RBUkdFVF9TVEFUVVMgICAgICAgMHgwMDAxCisjZGVmaW5lIENNRF9EQVRBX1VOREVSUlVOICAgICAgIDB4MDAwMgorI2RlZmluZSBDTURfREFUQV9PVkVSUlVOICAgICAgICAweDAwMDMKKyNkZWZpbmUgQ01EX0lOVkFMSUQgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIENNRF9QUk9UT0NPTF9FUlIgICAgICAgIDB4MDAwNQorI2RlZmluZSBDTURfSEFSRFdBUkVfRVJSICAgICAgICAweDAwMDYKKyNkZWZpbmUgQ01EX0NPTk5FQ1RJT05fTE9TVCAgICAgMHgwMDA3CisjZGVmaW5lIENNRF9BQk9SVEVEICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBDTURfQUJPUlRfRkFJTEVEICAgICAgICAweDAwMDkKKyNkZWZpbmUgQ01EX1VOU09MSUNJVEVEX0FCT1JUICAgMHgwMDBBCisjZGVmaW5lIENNRF9USU1FT1VUICAgICAgICAgICAgIDB4MDAwQgorI2RlZmluZSBDTURfVU5BQk9SVEFCTEUJCTB4MDAwQworCisvKiB0cmFuc2ZlciBkaXJlY3Rpb24gKi8KKyNkZWZpbmUgWEZFUl9OT05FICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBYRkVSX1dSSVRFICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFhGRVJfUkVBRCAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgWEZFUl9SU1ZEICAgICAgICAgICAgICAgMHgwMworCisvKiB0YXNrIGF0dHJpYnV0ZSAqLworI2RlZmluZSBBVFRSX1VOVEFHR0VEICAgICAgICAgICAweDAwCisjZGVmaW5lIEFUVFJfU0lNUExFICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVRUUl9IRUFET0ZRVUVVRSAgICAgICAgMHgwNQorI2RlZmluZSBBVFRSX09SREVSRUQgICAgICAgICAgICAweDA2CisjZGVmaW5lIEFUVFJfQUNBICAgICAgICAgICAgICAgIDB4MDcKKworLyogY2RiIHR5cGUgKi8KKyNkZWZpbmUgVFlQRV9DTUQJCQkJMHgwMAorI2RlZmluZSBUWVBFX01TRwkJCQkweDAxCisKKy8qIFR5cGUgZGVmcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgc3RydWN0cyAqLworI2RlZmluZSBCWVRFIF9fdTgKKyNkZWZpbmUgV09SRCBfX3UxNgorI2RlZmluZSBIV09SRCBfX3UxNgorI2RlZmluZSBEV09SRCBfX3UzMgorCisjZGVmaW5lIENJU1NfTUFYX0xVTgkxMDI0CisKKyNkZWZpbmUgTEVWRUwyTFVOICAgMSAvKiBpbmRleCBpbnRvIFRhcmdldCh4KSBzdHJ1Y3R1cmUsIGR1ZSB0byBieXRlIHN3YXBwaW5nICovCisjZGVmaW5lIExFVkVMM0xVTiAgIDAKKworI3ByYWdtYSBwYWNrKDEpCisKKy8qIENvbW1hbmQgTGlzdCBTdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgdW5pb24gX1NDU0kzQWRkcl9zdHJ1Y3QgeworICAgc3RydWN0IHsKKyAgICBCWVRFIERldjsKKyAgICBCWVRFIEJ1czo2OworICAgIEJZVEUgTW9kZToyOyAgICAgICAgLyogYjAwICovCisgIH0gUGVyaXBEZXY7CisgICBzdHJ1Y3QgeworICAgIEJZVEUgRGV2TFNCOworICAgIEJZVEUgRGV2TVNCOjY7CisgICAgQllURSBNb2RlOjI7ICAgICAgICAvKiBiMDEgKi8KKyAgfSBMb2dEZXY7CisgICBzdHJ1Y3QgeworICAgIEJZVEUgRGV2OjU7CisgICAgQllURSBCdXM6MzsKKyAgICBCWVRFIFRhcmc6NjsKKyAgICBCWVRFIE1vZGU6MjsgICAgICAgIC8qIGIxMCAqLworICB9IExvZ1VuaXQ7Cit9IFNDU0kzQWRkcl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF9QaHlzRGV2QWRkcl9zdHJ1Y3QgeworICBEV09SRCAgICAgICAgICAgICBUYXJnZXRJZDoyNDsKKyAgRFdPUkQgICAgICAgICAgICAgQnVzOjY7CisgIERXT1JEICAgICAgICAgICAgIE1vZGU6MjsKKyAgU0NTSTNBZGRyX3N0cnVjdCAgVGFyZ2V0WzJdOyAvKiAyIGxldmVsIHRhcmdldCBkZXZpY2UgYWRkciAqLworfSBQaHlzRGV2QWRkcl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF9Mb2dEZXZBZGRyX3N0cnVjdCB7CisgIERXT1JEICAgICAgICAgICAgVm9sSWQ6MzA7CisgIERXT1JEICAgICAgICAgICAgTW9kZToyOworICBCWVRFICAgICAgICAgICAgIHJlc2VydmVkWzRdOworfSBMb2dEZXZBZGRyX3N0cnVjdDsKKwordHlwZWRlZiB1bmlvbiBfTFVOQWRkcl9zdHJ1Y3QgeworICBCWVRFICAgICAgICAgICAgICAgTHVuQWRkckJ5dGVzWzhdOworICBTQ1NJM0FkZHJfc3RydWN0ICAgU0NTSTNMdW5bNF07CisgIFBoeXNEZXZBZGRyX3N0cnVjdCBQaHlzRGV2OworICBMb2dEZXZBZGRyX3N0cnVjdCAgTG9nRGV2OworfSBMVU5BZGRyX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX1JlcXVlc3RCbG9ja19zdHJ1Y3QgeworICBCWVRFICAgQ0RCTGVuOworICBzdHJ1Y3QgeworICAgIEJZVEUgVHlwZTozOworICAgIEJZVEUgQXR0cmlidXRlOjM7CisgICAgQllURSBEaXJlY3Rpb246MjsKKyAgfSBUeXBlOworICBIV09SRCAgVGltZW91dDsKKyAgQllURSAgIENEQlsxNl07Cit9IFJlcXVlc3RCbG9ja19zdHJ1Y3Q7CisKK3R5cGVkZWYgdW5pb24gX01vcmVFcnJJbmZvX3N0cnVjdHsKKyAgc3RydWN0IHsKKyAgICBCWVRFICBSZXNlcnZlZFszXTsKKyAgICBCWVRFICBUeXBlOworICAgIERXT1JEIEVycm9ySW5mbzsKKyAgfSBDb21tb25fSW5mbzsKKyAgc3RydWN0eworICAgIEJZVEUgIFJlc2VydmVkWzJdOworICAgIEJZVEUgIG9mZmVuc2Vfc2l6ZTsgLyogc2l6ZSBvZiBvZmZlbmRpbmcgZW50cnkgKi8KKyAgICBCWVRFICBvZmZlbnNlX251bTsgIC8qIGJ5dGUgIyBvZiBvZmZlbnNlIDAtYmFzZSAqLworICAgIERXT1JEIG9mZmVuc2VfdmFsdWU7CisgIH0gSW52YWxpZF9DbWQ7Cit9IE1vcmVFcnJJbmZvX3N0cnVjdDsKK3R5cGVkZWYgc3RydWN0IF9FcnJvckluZm9fc3RydWN0IHsKKyAgQllURSAgICAgICAgICAgICAgIFNjc2lTdGF0dXM7CisgIEJZVEUgICAgICAgICAgICAgICBTZW5zZUxlbjsKKyAgSFdPUkQgICAgICAgICAgICAgIENvbW1hbmRTdGF0dXM7CisgIERXT1JEICAgICAgICAgICAgICBSZXNpZHVhbENudDsKKyAgTW9yZUVyckluZm9fc3RydWN0IE1vcmVFcnJJbmZvOworICBCWVRFICAgICAgICAgICAgICAgU2Vuc2VJbmZvW1NFTlNFSU5GT0JZVEVTXTsKK30gRXJyb3JJbmZvX3N0cnVjdDsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIENDSVNTX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jY2lzc19pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9jY2lzc19pb2N0bC5oCmluZGV4IGViMTMwYjQuLjk4NjQ5M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2Npc3NfaW9jdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NjaXNzX2lvY3RsLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvY2Npc3NfZGVmcy5oPgogCiAjZGVmaW5lIENDSVNTX0lPQ19NQUdJQyAnQicKIApAQCAtMzYsMTMzICszNyw2IEBACiAKICNkZWZpbmUgTUFYX0tNQUxMT0NfU0laRSAxMjgwMDAKIAotI2lmbmRlZiBDQ0lTU19DTURfSAotLy8gVGhpcyBkZWZpbmVzIGFyZSBkdXBsaWNhdGVkIGluIGNjaXNzX2NtZC5oIGluIHRoZSBkcml2ZXIgZGlyZWN0b3J5IAotCi0vL2dlbmVyYWwgYm91bmRhcnkgZGVmaW5pdGlvbnMKLSNkZWZpbmUgU0VOU0VJTkZPQllURVMgICAgICAgICAgMzIvL25vdGUgdGhhdCB0aGlzIHZhbHVlIG1heSB2YXJ5IGJldHdlZW4gaG9zdCBpbXBsZW1lbnRhdGlvbnMKLQotLy9Db21tYW5kIFN0YXR1cyB2YWx1ZQotI2RlZmluZSBDTURfU1VDQ0VTUyAgICAgICAgICAgICAweDAwMDAKLSNkZWZpbmUgQ01EX1RBUkdFVF9TVEFUVVMgICAgICAgMHgwMDAxCi0jZGVmaW5lIENNRF9EQVRBX1VOREVSUlVOICAgICAgIDB4MDAwMgotI2RlZmluZSBDTURfREFUQV9PVkVSUlVOICAgICAgICAweDAwMDMKLSNkZWZpbmUgQ01EX0lOVkFMSUQgICAgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIENNRF9QUk9UT0NPTF9FUlIgICAgICAgIDB4MDAwNQotI2RlZmluZSBDTURfSEFSRFdBUkVfRVJSICAgICAgICAweDAwMDYKLSNkZWZpbmUgQ01EX0NPTk5FQ1RJT05fTE9TVCAgICAgMHgwMDA3Ci0jZGVmaW5lIENNRF9BQk9SVEVEICAgICAgICAgICAgIDB4MDAwOAotI2RlZmluZSBDTURfQUJPUlRfRkFJTEVEICAgICAgICAweDAwMDkKLSNkZWZpbmUgQ01EX1VOU09MSUNJVEVEX0FCT1JUICAgMHgwMDBBCi0jZGVmaW5lIENNRF9USU1FT1VUICAgICAgICAgICAgIDB4MDAwQgotI2RlZmluZSBDTURfVU5BQk9SVEFCTEUJCTB4MDAwQwotCi0vL3RyYW5zZmVyIGRpcmVjdGlvbgotI2RlZmluZSBYRkVSX05PTkUgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIFhGRVJfV1JJVEUgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgWEZFUl9SRUFEICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZSBYRkVSX1JTVkQgICAgICAgICAgICAgICAweDAzCi0KLS8vdGFzayBhdHRyaWJ1dGUKLSNkZWZpbmUgQVRUUl9VTlRBR0dFRCAgICAgICAgICAgMHgwMAotI2RlZmluZSBBVFRSX1NJTVBMRSAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lIEFUVFJfSEVBRE9GUVVFVUUgICAgICAgIDB4MDUKLSNkZWZpbmUgQVRUUl9PUkRFUkVEICAgICAgICAgICAgMHgwNgotI2RlZmluZSBBVFRSX0FDQSAgICAgICAgICAgICAgICAweDA3Ci0KLS8vY2RiIHR5cGUKLSNkZWZpbmUgVFlQRV9DTUQJCQkJMHgwMAotI2RlZmluZSBUWVBFX01TRwkJCQkweDAxCi0KLS8vIFR5cGUgZGVmcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgc3RydWN0cwotI2RlZmluZSBCWVRFIF9fdTgKLSNkZWZpbmUgV09SRCBfX3UxNgotI2RlZmluZSBIV09SRCBfX3UxNgotI2RlZmluZSBEV09SRCBfX3UzMgotCi0jZGVmaW5lIENJU1NfTUFYX0xVTgkxMDI0Ci0KLSNkZWZpbmUgTEVWRUwyTFVOICAgMSAgIC8vIGluZGV4IGludG8gVGFyZ2V0KHgpIHN0cnVjdHVyZSwgZHVlIHRvIGJ5dGUgc3dhcHBpbmcKLSNkZWZpbmUgTEVWRUwzTFVOICAgMAotCi0jcHJhZ21hIHBhY2soMSkKLQotLy9Db21tYW5kIExpc3QgU3RydWN0dXJlCi10eXBlZGVmIHVuaW9uIF9TQ1NJM0FkZHJfc3RydWN0IHsKLSAgIHN0cnVjdCB7Ci0gICAgQllURSBEZXY7Ci0gICAgQllURSBCdXM6NjsKLSAgICBCWVRFIE1vZGU6MjsgICAgICAgIC8vIGIwMAotICB9IFBlcmlwRGV2OwotICAgc3RydWN0IHsKLSAgICBCWVRFIERldkxTQjsKLSAgICBCWVRFIERldk1TQjo2OwotICAgIEJZVEUgTW9kZToyOyAgICAgICAgLy8gYjAxCi0gIH0gTG9nRGV2OwotICAgc3RydWN0IHsKLSAgICBCWVRFIERldjo1OwotICAgIEJZVEUgQnVzOjM7Ci0gICAgQllURSBUYXJnOjY7Ci0gICAgQllURSBNb2RlOjI7ICAgICAgICAvLyBiMTAKLSAgfSBMb2dVbml0OwotfSBTQ1NJM0FkZHJfc3RydWN0OwotCi10eXBlZGVmIHN0cnVjdCBfUGh5c0RldkFkZHJfc3RydWN0IHsKLSAgRFdPUkQgICAgICAgICAgICAgVGFyZ2V0SWQ6MjQ7Ci0gIERXT1JEICAgICAgICAgICAgIEJ1czo2OwotICBEV09SRCAgICAgICAgICAgICBNb2RlOjI7Ci0gIFNDU0kzQWRkcl9zdHJ1Y3QgIFRhcmdldFsyXTsgLy8yIGxldmVsIHRhcmdldCBkZXZpY2UgYWRkcgotfSBQaHlzRGV2QWRkcl9zdHJ1Y3Q7Ci0gIAotdHlwZWRlZiBzdHJ1Y3QgX0xvZ0RldkFkZHJfc3RydWN0IHsKLSAgRFdPUkQgICAgICAgICAgICBWb2xJZDozMDsKLSAgRFdPUkQgICAgICAgICAgICBNb2RlOjI7Ci0gIEJZVEUgICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Ci19IExvZ0RldkFkZHJfc3RydWN0OwotCi10eXBlZGVmIHVuaW9uIF9MVU5BZGRyX3N0cnVjdCB7Ci0gIEJZVEUgICAgICAgICAgICAgICBMdW5BZGRyQnl0ZXNbOF07Ci0gIFNDU0kzQWRkcl9zdHJ1Y3QgICBTQ1NJM0x1bls0XTsKLSAgUGh5c0RldkFkZHJfc3RydWN0IFBoeXNEZXY7Ci0gIExvZ0RldkFkZHJfc3RydWN0ICBMb2dEZXY7Ci19IExVTkFkZHJfc3RydWN0OwotCi10eXBlZGVmIHN0cnVjdCBfUmVxdWVzdEJsb2NrX3N0cnVjdCB7Ci0gIEJZVEUgICBDREJMZW47Ci0gIHN0cnVjdCB7Ci0gICAgQllURSBUeXBlOjM7Ci0gICAgQllURSBBdHRyaWJ1dGU6MzsKLSAgICBCWVRFIERpcmVjdGlvbjoyOwotICB9IFR5cGU7Ci0gIEhXT1JEICBUaW1lb3V0OwotICBCWVRFICAgQ0RCWzE2XTsKLX0gUmVxdWVzdEJsb2NrX3N0cnVjdDsKLQotdHlwZWRlZiB1bmlvbiBfTW9yZUVyckluZm9fc3RydWN0ewotICBzdHJ1Y3QgewotICAgIEJZVEUgIFJlc2VydmVkWzNdOwotICAgIEJZVEUgIFR5cGU7Ci0gICAgRFdPUkQgRXJyb3JJbmZvOwotICB9Q29tbW9uX0luZm87Ci0gIHN0cnVjdHsKLSAgICBCWVRFICBSZXNlcnZlZFsyXTsKLSAgICBCWVRFICBvZmZlbnNlX3NpemU7Ly9zaXplIG9mIG9mZmVuZGluZyBlbnRyeQotICAgIEJZVEUgIG9mZmVuc2VfbnVtOyAvL2J5dGUgIyBvZiBvZmZlbnNlIDAtYmFzZQotICAgIERXT1JEIG9mZmVuc2VfdmFsdWU7Ci0gIH1JbnZhbGlkX0NtZDsKLX1Nb3JlRXJySW5mb19zdHJ1Y3Q7Ci10eXBlZGVmIHN0cnVjdCBfRXJyb3JJbmZvX3N0cnVjdCB7Ci0gIEJZVEUgICAgICAgICAgICAgICBTY3NpU3RhdHVzOwotICBCWVRFICAgICAgICAgICAgICAgU2Vuc2VMZW47Ci0gIEhXT1JEICAgICAgICAgICAgICBDb21tYW5kU3RhdHVzOwotICBEV09SRCAgICAgICAgICAgICAgUmVzaWR1YWxDbnQ7Ci0gIE1vcmVFcnJJbmZvX3N0cnVjdCBNb3JlRXJySW5mbzsKLSAgQllURSAgICAgICAgICAgICAgIFNlbnNlSW5mb1tTRU5TRUlORk9CWVRFU107Ci19IEVycm9ySW5mb19zdHJ1Y3Q7Ci0KLSNwcmFnbWEgcGFjaygpCi0jZW5kaWYgLyogQ0NJU1NfQ01EX0ggKi8gCi0KIHR5cGVkZWYgc3RydWN0IF9JT0NUTF9Db21tYW5kX3N0cnVjdCB7CiAgIExVTkFkZHJfc3RydWN0CSAgIExVTl9pbmZvOwogICBSZXF1ZXN0QmxvY2tfc3RydWN0ICAgICAgUmVxdWVzdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCmluZGV4IDAwMDhkZWUuLmM5YmJjYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaApAQCAtMjgsNiArMjgsNyBAQAogZXh0ZXJuIGludCBjZ3JvdXBfaW5pdF9lYXJseSh2b2lkKTsKIGV4dGVybiBpbnQgY2dyb3VwX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBjZ3JvdXBfbG9jayh2b2lkKTsKK2V4dGVybiBpbnQgY2dyb3VwX2xvY2tfaXNfaGVsZCh2b2lkKTsKIGV4dGVybiBib29sIGNncm91cF9sb2NrX2xpdmVfZ3JvdXAoc3RydWN0IGNncm91cCAqY2dycCk7CiBleHRlcm4gdm9pZCBjZ3JvdXBfdW5sb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgY2dyb3VwX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKQEAgLTQ4Niw3ICs0ODcsOSBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqdGFza19zdWJzeXNfc3RhdGUoCiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc3Vic3lzX2lkKQogewotCXJldHVybiByY3VfZGVyZWZlcmVuY2UodGFzay0+Y2dyb3Vwcy0+c3Vic3lzW3N1YnN5c19pZF0pOworCXJldHVybiByY3VfZGVyZWZlcmVuY2VfY2hlY2sodGFzay0+Y2dyb3Vwcy0+c3Vic3lzW3N1YnN5c19pZF0sCisJCQkJICAgICByY3VfcmVhZF9sb2NrX2hlbGQoKSB8fAorCQkJCSAgICAgY2dyb3VwX2xvY2tfaXNfaGVsZCgpKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY2dyb3VwKiB0YXNrX2Nncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmggYi9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKaW5kZXggOGE0YTEzMC4uNGJjYThiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaApAQCAtMTU0LDYgKzE1NCw3IEBACiAgKiBAbWF4X2lkbGVfbnM6CW1heCBpZGxlIHRpbWUgcGVybWl0dGVkIGJ5IHRoZSBjbG9ja3NvdXJjZSAobnNlY3MpCiAgKiBAZmxhZ3M6CQlmbGFncyBkZXNjcmliaW5nIHNwZWNpYWwgcHJvcGVydGllcwogICogQHZyZWFkOgkJdnN5c2NhbGwgYmFzZWQgcmVhZAorICogQHN1c3BlbmQ6CQlzdXNwZW5kIGZ1bmN0aW9uIGZvciB0aGUgY2xvY2tzb3VyY2UsIGlmIG5lY2Vzc2FyeQogICogQHJlc3VtZToJCXJlc3VtZSBmdW5jdGlvbiBmb3IgdGhlIGNsb2Nrc291cmNlLCBpZiBuZWNlc3NhcnkKICAqLwogc3RydWN0IGNsb2Nrc291cmNlIHsKQEAgLTE3Miw3ICsxNzMsOCBAQAogCXU2NCBtYXhfaWRsZV9uczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWN5Y2xlX3QgKCp2cmVhZCkodm9pZCk7Ci0Jdm9pZCAoKnJlc3VtZSkodm9pZCk7CisJdm9pZCAoKnN1c3BlbmQpKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpOworCXZvaWQgKCpyZXN1bWUpKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpOwogI2lmZGVmIENPTkZJR19JQTY0CiAJdm9pZCAqZnN5c19tbWlvOyAgICAgICAgLyogdXNlZCBieSBmc3lzY2FsbCBhc20gY29kZSAqLwogI2RlZmluZSBDTEtTUkNfRlNZU19NTUlPX1NFVChtbWlvLCBhZGRyKSAgICAgICgobW1pbykgPSAoYWRkcikpCkBAIC0yNzcsNiArMjc5LDcgQEAKIGV4dGVybiB2b2lkIGNsb2Nrc291cmNlX3RvdWNoX3dhdGNoZG9nKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBjbG9ja3NvdXJjZSogY2xvY2tzb3VyY2VfZ2V0X25leHQodm9pZCk7CiBleHRlcm4gdm9pZCBjbG9ja3NvdXJjZV9jaGFuZ2VfcmF0aW5nKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsIGludCByYXRpbmcpOworZXh0ZXJuIHZvaWQgY2xvY2tzb3VyY2Vfc3VzcGVuZCh2b2lkKTsKIGV4dGVybiB2b2lkIGNsb2Nrc291cmNlX3Jlc3VtZSh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgY2xvY2tzb3VyY2UgKiBfX2luaXQgX193ZWFrIGNsb2Nrc291cmNlX2RlZmF1bHRfY2xvY2sodm9pZCk7CiBleHRlcm4gdm9pZCBjbG9ja3NvdXJjZV9tYXJrX3Vuc3RhYmxlKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCmluZGV4IDViZTNkYWIuLjE4OGZjYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKQEAgLTE1LDYgKzE1LDcgQEAKICMgZGVmaW5lIF9fYWNxdWlyZSh4KQlfX2NvbnRleHRfXyh4LDEpCiAjIGRlZmluZSBfX3JlbGVhc2UoeCkJX19jb250ZXh0X18oeCwtMSkKICMgZGVmaW5lIF9fY29uZF9sb2NrKHgsYykJKChjKSA/ICh7IF9fYWNxdWlyZSh4KTsgMTsgfSkgOiAwKQorIyBkZWZpbmUgX19wZXJjcHUJX19hdHRyaWJ1dGVfXygobm9kZXJlZiwgYWRkcmVzc19zcGFjZSgzKSkpCiBleHRlcm4gdm9pZCBfX2Noa191c2VyX3B0cihjb25zdCB2b2xhdGlsZSB2b2lkIF9fdXNlciAqKTsKIGV4dGVybiB2b2lkIF9fY2hrX2lvX3B0cihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKik7CiAjZWxzZQpAQCAtMzIsNiArMzMsNyBAQAogIyBkZWZpbmUgX19hY3F1aXJlKHgpICh2b2lkKTAKICMgZGVmaW5lIF9fcmVsZWFzZSh4KSAodm9pZCkwCiAjIGRlZmluZSBfX2NvbmRfbG9jayh4LGMpIChjKQorIyBkZWZpbmUgX19wZXJjcHUKICNlbmRpZgogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaCBiL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKaW5kZXggNzJiYTYzZS4uM2E3NzlmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCkBAIC0yNCw5ICsyNCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jZGVmaW5lIENOX0lEWF9DT05ORUNUT1IJCTB4ZmZmZmZmZmYKLSNkZWZpbmUgQ05fVkFMX0NPTk5FQ1RPUgkJMHhmZmZmZmZmZgotCiAvKgogICogUHJvY2VzcyBFdmVudHMgY29ubmVjdG9yIHVuaXF1ZSBpZHMgLS0gdXNlZCBmb3IgbWVzc2FnZSByb3V0aW5nCiAgKi8KQEAgLTc1LDMwICs3Miw2IEBACiAJX191OCBkYXRhWzBdOwogfTsKIAotLyoKLSAqIE5vdGlmeSBzdHJ1Y3R1cmUgLSByZXF1ZXN0cyBub3RpZmljYXRpb24gYWJvdXQKLSAqIHJlZ2lzdGVyaW5nL3VucmVnaXN0ZXJpbmcgaWR4L3ZhbCBpbiByYW5nZSBbZmlyc3QsIGZpcnN0K3JhbmdlXS4KLSAqLwotc3RydWN0IGNuX25vdGlmeV9yZXEgewotCV9fdTMyIGZpcnN0OwotCV9fdTMyIHJhbmdlOwotfTsKLQotLyoKLSAqIE1haW4gbm90aWZpY2F0aW9uIGNvbnRyb2wgbWVzc2FnZQotICogKl9ub3RpZnlfbnVtIAktIG51bWJlciBvZiBhcHByb3ByaWF0ZSBjbl9ub3RpZnlfcmVxIHN0cnVjdHVyZXMgYWZ0ZXIgCi0gKgkJCQl0aGlzIHN0cnVjdC4KLSAqIGdyb3VwIAkJLSBub3RpZmljYXRpb24gcmVjZWl2ZXIncyBpZHguCi0gKiBsZW4gCQkJLSB0b3RhbCBsZW5ndGggb2YgdGhlIGF0dGFjaGVkIGRhdGEuCi0gKi8KLXN0cnVjdCBjbl9jdGxfbXNnIHsKLQlfX3UzMiBpZHhfbm90aWZ5X251bTsKLQlfX3UzMiB2YWxfbm90aWZ5X251bTsKLQlfX3UzMiBncm91cDsKLQlfX3UzMiBsZW47Ci0JX191OCBkYXRhWzBdOwotfTsKLQogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KQEAgLTE1MSwxMSArMTI0LDYgQEAKIAl1MzIgc2VxLCBncm91cDsKIH07CiAKLXN0cnVjdCBjbl9jdGxfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbm90aWZ5X2VudHJ5OwotCXN0cnVjdCBjbl9jdGxfbXNnICptc2c7Ci19OwotCiBzdHJ1Y3QgY25fZGV2IHsKIAlzdHJ1Y3QgY2JfaWQgaWQ7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1bWFzay5oIGIvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKaW5kZXggZDc3YjU0Ny4uZGJjZWU3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKQEAgLTE0Myw2ICsxNDMsOCBAQAogCiAjZGVmaW5lIGZvcl9lYWNoX2NwdShjcHUsIG1hc2spCQkJXAogCWZvciAoKGNwdSkgPSAwOyAoY3B1KSA8IDE7IChjcHUpKyssICh2b2lkKW1hc2spCisjZGVmaW5lIGZvcl9lYWNoX2NwdV9ub3QoY3B1LCBtYXNrKQkJXAorCWZvciAoKGNwdSkgPSAwOyAoY3B1KSA8IDE7IChjcHUpKyssICh2b2lkKW1hc2spCiAjZGVmaW5lIGZvcl9lYWNoX2NwdV9hbmQoY3B1LCBtYXNrLCBhbmQpCVwKIAlmb3IgKChjcHUpID0gMDsgKGNwdSkgPCAxOyAoY3B1KSsrLCAodm9pZCltYXNrLCAodm9pZClhbmQpCiAjZWxzZQpAQCAtMjAzLDYgKzIwNSwxOCBAQAogCQkoY3B1KSA8IG5yX2NwdV9pZHM7KQogCiAvKioKKyAqIGZvcl9lYWNoX2NwdV9ub3QgLSBpdGVyYXRlIG92ZXIgZXZlcnkgY3B1IGluIGEgY29tcGxlbWVudGVkIG1hc2sKKyAqIEBjcHU6IHRoZSAob3B0aW9uYWxseSB1bnNpZ25lZCkgaW50ZWdlciBpdGVyYXRvcgorICogQG1hc2s6IHRoZSBjcHVtYXNrIHBvaW50ZXIKKyAqCisgKiBBZnRlciB0aGUgbG9vcCwgY3B1IGlzID49IG5yX2NwdV9pZHMuCisgKi8KKyNkZWZpbmUgZm9yX2VhY2hfY3B1X25vdChjcHUsIG1hc2spCQkJCVwKKwlmb3IgKChjcHUpID0gLTE7CQkJCQlcCisJCShjcHUpID0gY3B1bWFza19uZXh0X3plcm8oKGNwdSksIChtYXNrKSksCVwKKwkJKGNwdSkgPCBucl9jcHVfaWRzOykKKworLyoqCiAgKiBmb3JfZWFjaF9jcHVfYW5kIC0gaXRlcmF0ZSBvdmVyIGV2ZXJ5IGNwdSBpbiBib3RoIG1hc2tzCiAgKiBAY3B1OiB0aGUgKG9wdGlvbmFsbHkgdW5zaWduZWQpIGludGVnZXIgaXRlcmF0b3IKICAqIEBtYXNrOiB0aGUgZmlyc3QgY3B1bWFzayBwb2ludGVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyZWQuaCBiL2luY2x1ZGUvbGludXgvY3JlZC5oCmluZGV4IDRlMzM4N2EuLjRkYjA5ZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3JlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvY3JlZC5oCkBAIC0yODAsNyArMjgwLDcgQEAKICAqIHRhc2sgb3IgYnkgaG9sZGluZyB0YXNrbGlzdF9sb2NrIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyB1bmxpbmtlZC4KICAqLwogI2RlZmluZSBfX3Rhc2tfY3JlZCh0YXNrKSBcCi0JKChjb25zdCBzdHJ1Y3QgY3JlZCAqKShyY3VfZGVyZWZlcmVuY2UoKHRhc2spLT5yZWFsX2NyZWQpKSkKKwkoKGNvbnN0IHN0cnVjdCBjcmVkICopKHJjdV9kZXJlZmVyZW5jZV9jaGVjaygodGFzayktPnJlYWxfY3JlZCwgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwgbG9ja2RlcF9pc19oZWxkKCZ0YXNrbGlzdF9sb2NrKSkpKQogCiAvKioKICAqIGdldF90YXNrX2NyZWQgLSBHZXQgYW5vdGhlciB0YXNrJ3Mgb2JqZWN0aXZlIGNyZWRlbnRpYWxzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCBhNjI3OTlmLi5iMzA1MjdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTQ3Miw2ICs0NzIsMjMgQEAKIAlyZXR1cm4gZGV2LT5rb2JqLnN0YXRlX2luX3N5c2ZzOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5wb3dlci5zdGF0dXMgPT0gRFBNX09OKQorCQlkZXYtPnBvd2VyLmFzeW5jX3N1c3BlbmQgPSB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX2Rpc2FibGVfYXN5bmNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+cG93ZXIuc3RhdHVzID09IERQTV9PTikKKwkJZGV2LT5wb3dlci5hc3luY19zdXNwZW5kID0gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBkZXZpY2VfYXN5bmNfc3VzcGVuZF9lbmFibGVkKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gISFkZXYtPnBvd2VyLmFzeW5jX3N1c3BlbmQ7Cit9CisKIHZvaWQgZHJpdmVyX2luaXQodm9pZCk7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VsZi5oIGIvaW5jbHVkZS9saW51eC9lbGYuaAppbmRleCAwY2M0ZDU1Li5hZDk5MGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VsZi5oCisrKyBiL2luY2x1ZGUvbGludXgvZWxmLmgKQEAgLTM0OSw3ICszNDksMTEgQEAKICNkZWZpbmUgRUxGX09TQUJJIEVMRk9TQUJJX05PTkUKICNlbmRpZgogCi0vKiBOb3RlcyB1c2VkIGluIEVUX0NPUkUgKi8KKy8qCisgKiBOb3RlcyB1c2VkIGluIEVUX0NPUkUuIEFyY2hpdGVjdHVyZXMgZXhwb3J0IHNvbWUgb2YgdGhlIGFyY2ggcmVnaXN0ZXIgc2V0cworICogdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbm90ZSB0eXBlcyB2aWEgdGhlIFBUUkFDRV9HRVRSRUdTRVQgYW5kCisgKiBQVFJBQ0VfU0VUUkVHU0VUIHJlcXVlc3RzLgorICovCiAjZGVmaW5lIE5UX1BSU1RBVFVTCTEKICNkZWZpbmUgTlRfUFJGUFJFRwkyCiAjZGVmaW5lIE5UX1BSUFNJTkZPCTMKQEAgLTM2MSw3ICszNjUsMTMgQEAKICNkZWZpbmUgTlRfUFBDX1ZTWAkweDEwMgkJLyogUG93ZXJQQyBWU1ggcmVnaXN0ZXJzICovCiAjZGVmaW5lIE5UXzM4Nl9UTFMJMHgyMDAJCS8qIGkzODYgVExTIHNsb3RzIChzdHJ1Y3QgdXNlcl9kZXNjKSAqLwogI2RlZmluZSBOVF8zODZfSU9QRVJNCTB4MjAxCQkvKiB4ODYgaW8gcGVybWlzc2lvbiBiaXRtYXAgKDE9ZGVueSkgKi8KKyNkZWZpbmUgTlRfWDg2X1hTVEFURQkweDIwMgkJLyogeDg2IGV4dGVuZGVkIHN0YXRlIHVzaW5nIHhzYXZlICovCiAjZGVmaW5lIE5UX1MzOTBfSElHSF9HUFJTCTB4MzAwCS8qIHMzOTAgdXBwZXIgcmVnaXN0ZXIgaGFsdmVzICovCisjZGVmaW5lIE5UX1MzOTBfVElNRVIJMHgzMDEJCS8qIHMzOTAgdGltZXIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTlRfUzM5MF9UT0RDTVAJMHgzMDIJCS8qIHMzOTAgVE9EIGNsb2NrIGNvbXBhcmF0b3IgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTlRfUzM5MF9UT0RQUkVHCTB4MzAzCQkvKiBzMzkwIFRPRCBwcm9ncmFtbWFibGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTlRfUzM5MF9DVFJTCTB4MzA0CQkvKiBzMzkwIGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIE5UX1MzOTBfUFJFRklYCTB4MzA1CQkvKiBzMzkwIHByZWZpeCByZWdpc3RlciAqLwogCiAKIC8qIE5vdGUgaGVhZGVyIGluIGEgUFRfTk9URSBzZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaCBiL2luY2x1ZGUvbGludXgvZmR0YWJsZS5oCmluZGV4IGEyZWM3NGIuLjAxM2RjNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmR0YWJsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZmR0YWJsZS5oCkBAIC01Nyw3ICs1NywxNCBAQAogCXN0cnVjdCBmaWxlICogZmRfYXJyYXlbTlJfT1BFTl9ERUZBVUxUXTsKIH07CiAKLSNkZWZpbmUgZmlsZXNfZmR0YWJsZShmaWxlcykgKHJjdV9kZXJlZmVyZW5jZSgoZmlsZXMpLT5mZHQpKQorI2RlZmluZSByY3VfZGVyZWZlcmVuY2VfY2hlY2tfZmR0YWJsZShmaWxlcywgZmR0ZmQpIFwKKwkocmN1X2RlcmVmZXJlbmNlX2NoZWNrKChmZHRmZCksIFwKKwkJCSAgICAgICByY3VfcmVhZF9sb2NrX2hlbGQoKSB8fCBcCisJCQkgICAgICAgbG9ja2RlcF9pc19oZWxkKCYoZmlsZXMpLT5maWxlX2xvY2spIHx8IFwKKwkJCSAgICAgICBhdG9taWNfcmVhZCgmKGZpbGVzKS0+Y291bnQpID09IDEpKQorCisjZGVmaW5lIGZpbGVzX2ZkdGFibGUoZmlsZXMpIFwKKwkJKHJjdV9kZXJlZmVyZW5jZV9jaGVja19mZHRhYmxlKChmaWxlcyksIChmaWxlcyktPmZkdCkpCiAKIHN0cnVjdCBmaWxlX29wZXJhdGlvbnM7CiBzdHJ1Y3QgdmZzbW91bnQ7CkBAIC03OCw3ICs4NSw3IEBACiAJc3RydWN0IGZkdGFibGUgKmZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpOwogCiAJaWYgKGZkIDwgZmR0LT5tYXhfZmRzKQotCQlmaWxlID0gcmN1X2RlcmVmZXJlbmNlKGZkdC0+ZmRbZmRdKTsKKwkJZmlsZSA9IHJjdV9kZXJlZmVyZW5jZV9jaGVja19mZHRhYmxlKGZpbGVzLCBmZHQtPmZkW2ZkXSk7CiAJcmV0dXJuIGZpbGU7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCBiMWJjYjI3Li5lYmIxY2Q1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC03MjksNiArNzI5LDcgQEAKIAl1aWRfdAkJCWlfdWlkOwogCWdpZF90CQkJaV9naWQ7CiAJZGV2X3QJCQlpX3JkZXY7CisJdW5zaWduZWQgaW50CQlpX2Jsa2JpdHM7CiAJdTY0CQkJaV92ZXJzaW9uOwogCWxvZmZfdAkJCWlfc2l6ZTsKICNpZmRlZiBfX05FRURfSV9TSVpFX09SREVSRUQKQEAgLTczOCw3ICs3MzksNiBAQAogCXN0cnVjdCB0aW1lc3BlYwkJaV9tdGltZTsKIAlzdHJ1Y3QgdGltZXNwZWMJCWlfY3RpbWU7CiAJYmxrY250X3QJCWlfYmxvY2tzOwotCXVuc2lnbmVkIGludAkJaV9ibGtiaXRzOwogCXVuc2lnbmVkIHNob3J0ICAgICAgICAgIGlfYnl0ZXM7CiAJdW1vZGVfdAkJCWlfbW9kZTsKIAlzcGlubG9ja190CQlpX2xvY2s7CS8qIGlfYmxvY2tzLCBpX2J5dGVzLCBtYXliZSBpX3NpemUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnRyYWNlLmggYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCmluZGV4IDBiNGY5N2QuLjAxZTZhZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaApAQCAtMTM0LDYgKzEzNCw4IEBACiB1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZV9mdW5jKGNoYXIgKmdsb2IsIHN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzICpvcHMpOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmVfYWxsKGNoYXIgKmdsb2IpOwogCitleHRlcm4gaW50IGZ0cmFjZV90ZXh0X3Jlc2VydmVkKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpOworCiBlbnVtIHsKIAlGVFJBQ0VfRkxfRlJFRQkJPSAoMSA8PCAwKSwKIAlGVFJBQ0VfRkxfRkFJTEVECT0gKDEgPDwgMSksCkBAIC0xNDEsNyArMTQzLDYgQEAKIAlGVFJBQ0VfRkxfRU5BQkxFRAk9ICgxIDw8IDMpLAogCUZUUkFDRV9GTF9OT1RSQUNFCT0gKDEgPDwgNCksCiAJRlRSQUNFX0ZMX0NPTlZFUlRFRAk9ICgxIDw8IDUpLAotCUZUUkFDRV9GTF9GUk9aRU4JPSAoMSA8PCA2KSwKIH07CiAKIHN0cnVjdCBkeW5fZnRyYWNlIHsKQEAgLTI1MCw2ICsyNTEsMTAgQEAKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IGZ0cmFjZV90ZXh0X3Jlc2VydmVkKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCiAKIC8qIHRvdGFsbHkgZGlzYWJsZSBmdHJhY2UgLSBjYW4gbm90IHJlLWVuYWJsZSBhZnRlciB0aGlzICovCkBAIC01MTEsNCArNTE2LDEwIEBACiAKICNlbmRpZiAvKiBDT05GSUdfSFdfQlJBTkNIX1RSQUNFUiAqLwogCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUworCit1bnNpZ25lZCBsb25nIGFyY2hfc3lzY2FsbF9hZGRyKGludCBucik7CisKKyNlbmRpZiAvKiBDT05GSUdfRlRSQUNFX1NZU0NBTExTICovCisKICNlbmRpZiAvKiBfTElOVVhfRlRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCmluZGV4IDIyMzNjOTguLjZiN2M0NDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaApAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC90cmFjZV9zZXEuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiBzdHJ1Y3QgdHJhY2VfYXJyYXk7CiBzdHJ1Y3QgdHJhY2VyOwpAQCAtMTIxLDkgKzEyMiw4IEBACiAJaW50CQkJKCpyZWdmdW5jKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CiAJdm9pZAkJCSgqdW5yZWdmdW5jKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CiAJaW50CQkJaWQ7CisJY29uc3QgY2hhcgkJKnByaW50X2ZtdDsKIAlpbnQJCQkoKnJhd19pbml0KShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7Ci0JaW50CQkJKCpzaG93X2Zvcm1hdCkoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICosCi0JCQkJCSAgICAgICBzdHJ1Y3QgdHJhY2Vfc2VxICopOwogCWludAkJCSgqZGVmaW5lX2ZpZWxkcykoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICopOwogCXN0cnVjdCBsaXN0X2hlYWQJZmllbGRzOwogCWludAkJCWZpbHRlcl9hY3RpdmU7CkBAIC0xMzgsOSArMTM4LDYgQEAKIAogI2RlZmluZSBGVFJBQ0VfTUFYX1BST0ZJTEVfU0laRQkyMDQ4CiAKLWV4dGVybiBjaGFyICpwZXJmX3RyYWNlX2J1ZjsKLWV4dGVybiBjaGFyICpwZXJmX3RyYWNlX2J1Zl9ubWk7Ci0KICNkZWZpbmUgTUFYX0ZJTFRFUl9QUkVECQkzMgogI2RlZmluZSBNQVhfRklMVEVSX1NUUl9WQUwJMjU2CS8qIFNob3VsZCBoYW5kbGUgS1NZTV9TWU1CT0xfTEVOICovCiAKQEAgLTE4OCwxMyArMTg1LDI3IEBACiAJCV9fdHJhY2VfcHJpbnRrKGlwLCBmbXQsICMjYXJncyk7CQkJXAogfSB3aGlsZSAoMCkKIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiBzdHJ1Y3QgcGVyZl9ldmVudDsKIGV4dGVybiBpbnQgZnRyYWNlX3Byb2ZpbGVfZW5hYmxlKGludCBldmVudF9pZCk7CiBleHRlcm4gdm9pZCBmdHJhY2VfcHJvZmlsZV9kaXNhYmxlKGludCBldmVudF9pZCk7CiBleHRlcm4gaW50IGZ0cmFjZV9wcm9maWxlX3NldF9maWx0ZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZXZlbnRfaWQsCiAJCQkJICAgICBjaGFyICpmaWx0ZXJfc3RyKTsKIGV4dGVybiB2b2lkIGZ0cmFjZV9wcm9maWxlX2ZyZWVfZmlsdGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CitleHRlcm4gdm9pZCAqCitmdHJhY2VfcGVyZl9idWZfcHJlcGFyZShpbnQgc2l6ZSwgdW5zaWduZWQgc2hvcnQgdHlwZSwgaW50ICpyY3R4cCwKKwkJCSB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpOworCitzdGF0aWMgaW5saW5lIHZvaWQKK2Z0cmFjZV9wZXJmX2J1Zl9zdWJtaXQodm9pZCAqcmF3X2RhdGEsIGludCBzaXplLCBpbnQgcmN0eCwgdTY0IGFkZHIsCisJCSAgICAgICB1NjQgY291bnQsIHVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzKQoreworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSByYXdfZGF0YTsKKworCXBlcmZfdHBfZXZlbnQoZW50cnktPnR5cGUsIGFkZHIsIGNvdW50LCByYXdfZGF0YSwgc2l6ZSk7CisJcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChyY3R4KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOworfQogI2VuZGlmCiAKICNlbmRpZiAvKiBfTElOVVhfRlRSQUNFX0VWRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaCBiL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaAppbmRleCAxYmMwODU0Li40OGU2OGRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oCkBAIC00Niw3ICs0Niw2IEBACiAJc3RydWN0IG11dGV4IGRydl9tdXRleDsJCS8qIHByb3RlY3RzIHNlcmlvLT5kcnYgc28gYXR0cmlidXRlcyBjYW4gcGluIGRyaXZlciAqLwogCiAJc3RydWN0IGRldmljZSBkZXY7Ci0JdW5zaWduZWQgaW50IHJlZ2lzdGVyZWQ7CS8qIHBvcnQgaGFzIGJlZW4gZnVsbHkgcmVnaXN0ZXJlZCB3aXRoIGRyaXZlciBjb3JlICovCiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ncGlvX2tleXMuaCBiL2luY2x1ZGUvbGludXgvZ3Bpb19rZXlzLmgKaW5kZXggMTI4OWZhNy4uY2QwYjNmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ncGlvX2tleXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dwaW9fa2V5cy5oCkBAIC0xMCw2ICsxMCw3IEBACiAJaW50IHR5cGU7CQkvKiBpbnB1dCBldmVudCB0eXBlIChFVl9LRVksIEVWX1NXKSAqLwogCWludCB3YWtldXA7CQkvKiBjb25maWd1cmUgdGhlIGJ1dHRvbiBhcyBhIHdha2UtdXAgc291cmNlICovCiAJaW50IGRlYm91bmNlX2ludGVydmFsOwkvKiBkZWJvdW5jZSB0aWNrcyBpbnRlcnZhbCBpbiBtc2VjcyAqLworCWJvb2wgY2FuX2Rpc2FibGU7CiB9OwogCiBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWQuaCBiL2luY2x1ZGUvbGludXgvaGlkLmgKaW5kZXggODcwOTM2NS4uYjEzNDRlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZC5oCkBAIC01MDEsNyArNTAxLDcgQEAKIAl2b2lkICgqaGlkZGV2X3JlcG9ydF9ldmVudCkgKHN0cnVjdCBoaWRfZGV2aWNlICosIHN0cnVjdCBoaWRfcmVwb3J0ICopOwogCiAJLyogaGFuZGxlciBmb3IgcmF3IG91dHB1dCBkYXRhLCB1c2VkIGJ5IGhpZHJhdyAqLwotCWludCAoKmhpZF9vdXRwdXRfcmF3X3JlcG9ydCkgKHN0cnVjdCBoaWRfZGV2aWNlICosIF9fdTggKiwgc2l6ZV90KTsKKwlpbnQgKCpoaWRfb3V0cHV0X3Jhd19yZXBvcnQpIChzdHJ1Y3QgaGlkX2RldmljZSAqLCBfX3U4ICosIHNpemVfdCwgdW5zaWduZWQgY2hhcik7CiAKIAkvKiBkZWJ1Z2dpbmcgc3VwcG9ydCB2aWEgZGVidWdmcyAqLwogCXVuc2lnbmVkIHNob3J0IGRlYnVnOwpAQCAtNjYzLDcgKzY2Myw3IEBACiAKIC8qIEFwcGxpY2F0aW9ucyBmcm9tIEhJRCBVc2FnZSBUYWJsZXMgNC84Lzk5IFZlcnNpb24gMS4xICovCiAvKiBXZSBpZ25vcmUgYSBmZXcgaW5wdXQgYXBwbGljYXRpb25zIHRoYXQgYXJlIG5vdCB3aWRlbHkgdXNlZCAqLwotI2RlZmluZSBJU19JTlBVVF9BUFBMSUNBVElPTihhKSAoKChhID49IDB4MDAwMTAwMDApICYmIChhIDw9IDB4MDAwMTAwMDgpKSB8fCAoYSA9PSAweDAwMDEwMDgwKSB8fCAoYSA9PSAweDAwMGMwMDAxKSB8fCAoYSA9PSAweDAwMGQwMDAyKSkKKyNkZWZpbmUgSVNfSU5QVVRfQVBQTElDQVRJT04oYSkgKCgoYSA+PSAweDAwMDEwMDAwKSAmJiAoYSA8PSAweDAwMDEwMDA4KSkgfHwgKGEgPT0gMHgwMDAxMDA4MCkgfHwgKGEgPT0gMHgwMDBjMDAwMSkgfHwgKChhID49IDB4MDAwZDAwMDIpICYmIChhIDw9IDB4MDAwZDAwMDYpKSkKIAogLyogSElEIGNvcmUgQVBJICovCiAKQEAgLTY5MCw2ICs2OTAsNyBAQAogaW50IGhpZGlucHV0X2ZpbmRfZmllbGQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBzdHJ1Y3QgaGlkX2ZpZWxkICoqZmllbGQpOwogdm9pZCBoaWRfb3V0cHV0X3JlcG9ydChzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCBfX3U4ICpkYXRhKTsKIHN0cnVjdCBoaWRfZGV2aWNlICpoaWRfYWxsb2NhdGVfZGV2aWNlKHZvaWQpOworc3RydWN0IGhpZF9yZXBvcnQgKmhpZF9yZWdpc3Rlcl9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSwgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgaWQpOwogaW50IGhpZF9wYXJzZV9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgX191OCAqc3RhcnQsIHVuc2lnbmVkIHNpemUpOwogaW50IGhpZF9jaGVja19rZXlzX3ByZXNzZWQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CiBpbnQgaGlkX2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgdW5zaWduZWQgaW50IGNvbm5lY3RfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaCBiL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCmluZGV4IGFiMmNjMjAuLjc0MTUyYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCkBAIC0xNyw2ICsxNywxMiBAQAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2tlcm5lbF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICp2YWRkciwgaW50IHNpemUpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICp2YWRkciwgaW50IHNpemUpCit7Cit9CiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h3X2JyZWFrcG9pbnQuaCBiL2luY2x1ZGUvbGludXgvaHdfYnJlYWtwb2ludC5oCmluZGV4IDQxMjM1YzkuLjU5NzdiNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHdfYnJlYWtwb2ludC5oCisrKyBiL2luY2x1ZGUvbGludXgvaHdfYnJlYWtwb2ludC5oCkBAIC00NCw3ICs0NCw3IEBACiAJcmV0dXJuIGJwLT5hdHRyLmJwX3R5cGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGh3X2JyZWFrcG9pbnRfbGVuKHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBod19icmVha3BvaW50X2xlbihzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCiB7CiAJcmV0dXJuIGJwLT5hdHRyLmJwX2xlbjsKIH0KQEAgLTc1LDYgKzc1LDggQEAKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl93aWRlX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKipjcHVfZXZlbnRzKTsKIAorZXh0ZXJuIGludCBkYmdfcmVzZXJ2ZV9icF9zbG90KHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7CitleHRlcm4gaW50IGRiZ19yZWxlYXNlX2JwX3Nsb3Qoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKIGV4dGVybiBpbnQgcmVzZXJ2ZV9icF9zbG90KHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7CiBleHRlcm4gdm9pZCByZWxlYXNlX2JwX3Nsb3Qoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMtcG54LmggYi9pbmNsdWRlL2xpbnV4L2kyYy1wbnguaAppbmRleCA5ZWIwN2JiLi5hODcxMjRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1wbnguaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1wbnguaApAQCAtMTIsOSArMTIsOCBAQAogI2lmbmRlZiBfX0kyQ19QTlhfSF9fCiAjZGVmaW5lIF9fSTJDX1BOWF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0KIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7CitzdHJ1Y3QgY2xrOwogCiBzdHJ1Y3QgaTJjX3BueF9taWYgewogCWludAkJCXJldDsJCS8qIFJldHVybiB2YWx1ZSAqLwpAQCAtMjYsMjAgKzI1LDE4IEBACiB9OwogCiBzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgewotCXUzMgkJCWJhc2U7Ci0JdTMyCQkJaW9hZGRyOwotCWludAkJCWlycTsKKwl2b2lkIF9faW9tZW0JCSppb2FkZHI7CiAJc3RydWN0IGkyY19wbnhfbWlmCW1pZjsKIAlpbnQJCQlsYXN0OworCXN0cnVjdCBjbGsJCSpjbGs7CisJc3RydWN0IGkyY19wbnhfZGF0YQkqaTJjX3BueDsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJYWRhcHRlcjsKIH07CiAKIHN0cnVjdCBpMmNfcG54X2RhdGEgewotCWludCAoKnN1c3BlbmQpIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotCWludCAoKnJlc3VtZSkgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotCXUzMiAoKmNhbGN1bGF0ZV9pbnB1dF9mcmVxKSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7Ci0JaW50ICgqc2V0X2Nsb2NrX3J1bikgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotCWludCAoKnNldF9jbG9ja19zdG9wKSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTMyIGJhc2U7CisJaW50IGlycTsKIH07CiAKICNlbmRpZiAvKiBfX0kyQ19QTlhfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaCBiL2luY2x1ZGUvbGludXgvaTJjL3R3bC5oCmluZGV4IGJmMWM1YmUuLjc4OTdmMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjL3R3bC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjL3R3bC5oCkBAIC01NDcsNiArNTQ3LDEwIEBACiAJdW5zaWduZWQgaW50CWF1ZGlvX21jbGs7CiAJc3RydWN0IHR3bDQwMzBfY29kZWNfYXVkaW9fZGF0YQkJKmF1ZGlvOwogCXN0cnVjdCB0d2w0MDMwX2NvZGVjX3ZpYnJhX2RhdGEJCSp2aWJyYTsKKworCS8qIHR3bDYwMzAgKi8KKwlpbnQgYXVkcHdyb25fZ3BpbzsgICAgICAvKiBhdWRpbyBwb3dlci1vbiBncGlvICovCisJaW50IG5hdWRpbnRfaXJxOyAgICAgICAgLyogYXVkaW8gaW50ZXJydXB0ICovCiB9OwogCiBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJvLmggYi9pbmNsdWRlL2xpbnV4L2kyby5oCmluZGV4IDRjNGU1N2QuLjg3MDE4ZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJvLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMm8uaApAQCAtMzg1LDcgKzM4NSw3IEBACiAvKiBkZWZpbmVzIGZvciBtYXhfc2VjdG9ycyBhbmQgbWF4X3BoeXNfc2VnbWVudHMgKi8KICNkZWZpbmUgSTJPX01BWF9TRUNUT1JTCQkJMTAyNAogI2RlZmluZSBJMk9fTUFYX1NFQ1RPUlNfTElNSVRFRAkJMTI4Ci0jZGVmaW5lIEkyT19NQVhfUEhZU19TRUdNRU5UUwkJTUFYX1BIWVNfU0VHTUVOVFMKKyNkZWZpbmUgSTJPX01BWF9QSFlTX1NFR01FTlRTCQlCTEtfTUFYX1NFR01FTlRTCiAKIC8qCiAgKglNZXNzYWdlIHN0cnVjdHVyZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW1hLmggYi9pbmNsdWRlL2xpbnV4L2ltYS5oCmluZGV4IDk5ZGM2ZDUuLjk3NTgzN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW1hLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbWEuaApAQCAtMTcsNyArMTcsNyBAQAogZXh0ZXJuIGludCBpbWFfYnBybV9jaGVjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTsKIGV4dGVybiBpbnQgaW1hX2lub2RlX2FsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIHZvaWQgaW1hX2lub2RlX2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSk7Ci1leHRlcm4gaW50IGltYV9wYXRoX2NoZWNrKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbWFzayk7CitleHRlcm4gaW50IGltYV9maWxlX2NoZWNrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbWFzayk7CiBleHRlcm4gdm9pZCBpbWFfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKTsKIGV4dGVybiBpbnQgaW1hX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90KTsKIGV4dGVybiB2b2lkIGltYV9jb3VudHNfZ2V0KHN0cnVjdCBmaWxlICpmaWxlKTsKQEAgLTM4LDcgKzM4LDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGltYV9wYXRoX2NoZWNrKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbWFzaykKK3N0YXRpYyBpbmxpbmUgaW50IGltYV9maWxlX2NoZWNrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbWFzaykKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQuaAppbmRleCA3MzVjZWFmLi5kYzI0ZWZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCkBAIC0zNzYsOCArMzc2LDkgQEAKICNkZWZpbmUgS0VZX0RJU1BMQVlfT0ZGCQkyNDUJLyogZGlzcGxheSBkZXZpY2UgdG8gb2ZmIHN0YXRlICovCiAKICNkZWZpbmUgS0VZX1dJTUFYCQkyNDYKKyNkZWZpbmUgS0VZX1JGS0lMTAkJMjQ3CS8qIEtleSB0aGF0IGNvbnRyb2xzIGFsbCByYWRpb3MgKi8KIAotLyogUmFuZ2UgMjQ4IC0gMjU1IGlzIHJlc2VydmVkIGZvciBzcGVjaWFsIG5lZWRzIG9mIEFUIGtleWJvYXJkIGRyaXZlciAqLworLyogQ29kZSAyNTUgaXMgcmVzZXJ2ZWQgZm9yIHNwZWNpYWwgbmVlZHMgb2YgQVQga2V5Ym9hcmQgZHJpdmVyICovCiAKICNkZWZpbmUgQlROX01JU0MJCTB4MTAwCiAjZGVmaW5lIEJUTl8wCQkJMHgxMDAKQEAgLTU5Niw2ICs1OTcsNDkgQEAKICNkZWZpbmUgS0VZX05VTUVSSUNfUE9VTkQJMHgyMGIKIAogI2RlZmluZSBLRVlfQ0FNRVJBX0ZPQ1VTCTB4MjEwCisjZGVmaW5lIEtFWV9XUFNfQlVUVE9OCQkweDIxMQkvKiBXaUZpIFByb3RlY3RlZCBTZXR1cCBrZXkgKi8KKworI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWQkJMHgyYzAKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxCQkweDJjMAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTIJCTB4MmMxCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMwkJMHgyYzIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk0CQkweDJjMworI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTUJCTB4MmM0CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZNgkJMHgyYzUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk3CQkweDJjNgorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTgJCTB4MmM3CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZOQkJMHgyYzgKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMAkJMHgyYzkKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMQkJMHgyY2EKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMgkJMHgyY2IKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMwkJMHgyY2MKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNAkJMHgyY2QKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNQkJMHgyY2UKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNgkJMHgyY2YKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNwkJMHgyZDAKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxOAkJMHgyZDEKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxOQkJMHgyZDIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMAkJMHgyZDMKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMQkJMHgyZDQKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMgkJMHgyZDUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMwkJMHgyZDYKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNAkJMHgyZDcKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNQkJMHgyZDgKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNgkJMHgyZDkKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNwkJMHgyZGEKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyOAkJMHgyZGIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyOQkJMHgyZGMKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMAkJMHgyZGQKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMQkJMHgyZGUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMgkJMHgyZGYKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMwkJMHgyZTAKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNAkJMHgyZTEKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNQkJMHgyZTIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNgkJMHgyZTMKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNwkJMHgyZTQKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzOAkJMHgyZTUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzOQkJMHgyZTYKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk0MAkJMHgyZTcKIAogLyogV2UgYXZvaWQgbG93IGNvbW1vbiBrZXlzIGluIG1vZHVsZSBhbGlhc2VzIHNvIHRoZXkgZG9uJ3QgZ2V0IGh1Z2UuICovCiAjZGVmaW5lIEtFWV9NSU5fSU5URVJFU1RJTkcJS0VZX01VVEUKQEAgLTExOTksNiArMTI0MywxMCBAQAogICogQGV2ZW50OiBldmVudCBoYW5kbGVyLiBUaGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgYnkgaW5wdXQgY29yZSB3aXRoCiAgKglpbnRlcnJ1cHRzIGRpc2FibGVkIGFuZCBkZXYtPmV2ZW50X2xvY2sgc3BpbmxvY2sgaGVsZCBhbmQgc28KICAqCWl0IG1heSBub3Qgc2xlZXAKKyAqIEBmaWx0ZXI6IHNpbWlsYXIgdG8gQGV2ZW50OyBzZXBhcmF0ZXMgbm9ybWFsIGV2ZW50IGhhbmRsZXJzIGZyb20KKyAqCSJmaWx0ZXJzIi4KKyAqIEBtYXRjaDogY2FsbGVkIGFmdGVyIGNvbXBhcmluZyBkZXZpY2UncyBpZCB3aXRoIGhhbmRsZXIncyBpZF90YWJsZQorICoJdG8gcGVyZm9ybSBmaW5lLWdyYWluZWQgbWF0Y2hpbmcgYmV0d2VlbiBkZXZpY2UgYW5kIGhhbmRsZXIKICAqIEBjb25uZWN0OiBjYWxsZWQgd2hlbiBhdHRhY2hpbmcgYSBoYW5kbGVyIHRvIGFuIGlucHV0IGRldmljZQogICogQGRpc2Nvbm5lY3Q6IGRpc2Nvbm5lY3RzIGEgaGFuZGxlciBmcm9tIGlucHV0IGRldmljZQogICogQHN0YXJ0OiBzdGFydHMgaGFuZGxlciBmb3IgZ2l2ZW4gaGFuZGxlLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieQpAQCAtMTIxMCw4ICsxMjU4LDYgQEAKICAqIEBuYW1lOiBuYW1lIG9mIHRoZSBoYW5kbGVyLCB0byBiZSBzaG93biBpbiAvcHJvYy9idXMvaW5wdXQvaGFuZGxlcnMKICAqIEBpZF90YWJsZTogcG9pbnRlciB0byBhIHRhYmxlIG9mIGlucHV0X2RldmljZV9pZHMgdGhpcyBkcml2ZXIgY2FuCiAgKgloYW5kbGUKLSAqIEBibGFja2xpc3Q6IHBvaW50ZXIgdG8gYSB0YWJsZSBvZiBpbnB1dF9kZXZpY2VfaWRzIHRoaXMgZHJpdmVyIHNob3VsZAotICoJaWdub3JlIGV2ZW4gaWYgdGhleSBtYXRjaCBAaWRfdGFibGUKICAqIEBoX2xpc3Q6IGxpc3Qgb2YgaW5wdXQgaGFuZGxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGhhbmRsZXIKICAqIEBub2RlOiBmb3IgcGxhY2luZyB0aGUgZHJpdmVyIG9udG8gaW5wdXRfaGFuZGxlcl9saXN0CiAgKgpAQCAtMTIyMCw2ICsxMjY2LDExIEBACiAgKiBzYW1lIHRpbWUuIEFsbCBvZiB0aGVtIHdpbGwgZ2V0IHRoZWlyIGNvcHkgb2YgaW5wdXQgZXZlbnQgZ2VuZXJhdGVkIGJ5CiAgKiB0aGUgZGV2aWNlLgogICoKKyAqIFRoZSB2ZXJ5IHNhbWUgc3RydWN0dXJlIGlzIHVzZWQgdG8gaW1wbGVtZW50IGlucHV0IGZpbHRlcnMuIElucHV0IGNvcmUKKyAqIGFsbG93cyBmaWx0ZXJzIHRvIHJ1biBmaXJzdCBhbmQgd2lsbCBub3QgcGFzcyBldmVudCB0byByZWd1bGFyIGhhbmRsZXJzCisgKiBpZiBhbnkgb2YgdGhlIGZpbHRlcnMgaW5kaWNhdGUgdGhhdCB0aGUgZXZlbnQgc2hvdWxkIGJlIGZpbHRlcmVkIChieQorICogcmV0dXJuaW5nICV0cnVlIGZyb20gdGhlaXIgZmlsdGVyKCkgbWV0aG9kKS4KKyAqCiAgKiBOb3RlIHRoYXQgaW5wdXQgY29yZSBzZXJpYWxpemVzIGNhbGxzIHRvIGNvbm5lY3QoKSBhbmQgZGlzY29ubmVjdCgpCiAgKiBtZXRob2RzLgogICovCkBAIC0xMjI4LDYgKzEyNzksOCBAQAogCXZvaWQgKnByaXZhdGU7CiAKIAl2b2lkICgqZXZlbnQpKHN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZSwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpOworCWJvb2wgKCpmaWx0ZXIpKHN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZSwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpOworCWJvb2wgKCptYXRjaCkoc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXIsIHN0cnVjdCBpbnB1dF9kZXYgKmRldik7CiAJaW50ICgqY29ubmVjdCkoc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXIsIHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IGlucHV0X2RldmljZV9pZCAqaWQpOwogCXZvaWQgKCpkaXNjb25uZWN0KShzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGUpOwogCXZvaWQgKCpzdGFydCkoc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlKTsKQEAgLTEyMzcsNyArMTI5MCw2IEBACiAJY29uc3QgY2hhciAqbmFtZTsKIAogCWNvbnN0IHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgKmlkX3RhYmxlOwotCWNvbnN0IHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgKmJsYWNrbGlzdDsKIAogCXN0cnVjdCBsaXN0X2hlYWQJaF9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQvc2hfa2V5c2MuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQvc2hfa2V5c2MuaAppbmRleCBjMjExYjVjLi42NDlkYzdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0L3NoX2tleXNjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC9zaF9rZXlzYy5oCkBAIC0xLDE0ICsxLDE1IEBACiAjaWZuZGVmIF9fU0hfS0VZU0NfSF9fCiAjZGVmaW5lIF9fU0hfS0VZU0NfSF9fCiAKLSNkZWZpbmUgU0hfS0VZU0NfTUFYS0VZUyAzMAorI2RlZmluZSBTSF9LRVlTQ19NQVhLRVlTIDQ5CiAKIHN0cnVjdCBzaF9rZXlzY19pbmZvIHsKLQllbnVtIHsgU0hfS0VZU0NfTU9ERV8xLCBTSF9LRVlTQ19NT0RFXzIsIFNIX0tFWVNDX01PREVfMyB9IG1vZGU7CisJZW51bSB7IFNIX0tFWVNDX01PREVfMSwgU0hfS0VZU0NfTU9ERV8yLCBTSF9LRVlTQ19NT0RFXzMsCisJICAgICAgIFNIX0tFWVNDX01PREVfNCwgU0hfS0VZU0NfTU9ERV81LCBTSF9LRVlTQ19NT0RFXzYgfSBtb2RlOwogCWludCBzY2FuX3RpbWluZzsgLyogMCAtPiA3LCBzZWUgS1lDUjEsIFNDTlsyOjBdICovCiAJaW50IGRlbGF5OwogCWludCBreWNyMl9kZWxheTsKLQlpbnQga2V5Y29kZXNbU0hfS0VZU0NfTUFYS0VZU107CisJaW50IGtleWNvZGVzW1NIX0tFWVNDX01BWEtFWVNdOyAvKiBLRVlJTiAqIEtFWU9VVCAqLwogfTsKIAogI2VuZGlmIC8qIF9fU0hfS0VZU0NfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvY29udGV4dC5oIGIvaW5jbHVkZS9saW51eC9pb2NvbnRleHQuaAppbmRleCA3OGVmMDIzLi4xMTk1YTgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvY29udGV4dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW9jb250ZXh0LmgKQEAgLTQ5LDggKzQ5LDggQEAKIAkvKgogCSAqIEZvciByZXF1ZXN0IGJhdGNoaW5nCiAJICovCi0JdW5zaWduZWQgbG9uZyBsYXN0X3dhaXRlZDsgLyogVGltZSBsYXN0IHdva2VuIGFmdGVyIHdhaXQgZm9yIHJlcXVlc3QgKi8KIAlpbnQgbnJfYmF0Y2hfcmVxdWVzdHM7ICAgICAvKiBOdW1iZXIgb2YgcmVxdWVzdHMgbGVmdCBpbiB0aGUgYmF0Y2ggKi8KKwl1bnNpZ25lZCBsb25nIGxhc3Rfd2FpdGVkOyAvKiBUaW1lIGxhc3Qgd29rZW4gYWZ0ZXIgd2FpdCBmb3IgcmVxdWVzdCAqLwogCiAJc3RydWN0IHJhZGl4X3RyZWVfcm9vdCByYWRpeF9yb290OwogCXN0cnVjdCBobGlzdF9oZWFkIGNpY19saXN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb3BvcnQuaCBiL2luY2x1ZGUvbGludXgvaW9wb3J0LmgKaW5kZXggNzEyOTUwNC4uZGRhOTg0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb3BvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCkBAIC0xMTIsNiArMTEyLDcgQEAKIAogZXh0ZXJuIGludCByZXF1ZXN0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgc3RydWN0IHJlc291cmNlICpuZXcpOwogZXh0ZXJuIGludCByZWxlYXNlX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqbmV3KTsKK3ZvaWQgcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpuZXcpOwogZXh0ZXJuIHZvaWQgcmVzZXJ2ZV9yZWdpb25fd2l0aF9zcGxpdChzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsCiAJCQkgICAgIHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IGVuZCwKIAkJCSAgICAgY29uc3QgY2hhciAqbmFtZSk7CkBAIC0xMjAsOCArMTIxLDEwIEBACiBleHRlcm4gaW50IGFsbG9jYXRlX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgc3RydWN0IHJlc291cmNlICpuZXcsCiAJCQkgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgbWluLAogCQkJICAgICByZXNvdXJjZV9zaXplX3QgbWF4LCByZXNvdXJjZV9zaXplX3QgYWxpZ24sCi0JCQkgICAgIHZvaWQgKCphbGlnbmYpKHZvaWQgKiwgc3RydWN0IHJlc291cmNlICosCi0JCQkJCSAgICByZXNvdXJjZV9zaXplX3QsIHJlc291cmNlX3NpemVfdCksCisJCQkgICAgIHJlc291cmNlX3NpemVfdCAoKmFsaWduZikodm9pZCAqLAorCQkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqLAorCQkJCQkJICAgICAgIHJlc291cmNlX3NpemVfdCwKKwkJCQkJCSAgICAgICByZXNvdXJjZV9zaXplX3QpLAogCQkJICAgICB2b2lkICphbGlnbmZfZGF0YSk7CiBpbnQgYWRqdXN0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcmVzLCByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCiAJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCA0NTE0ODFjLi5kMTM0OTJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTkwLDcgKzkwLDcgQEAKICAqIEBzdGFydHVwOgkJc3RhcnQgdXAgdGhlIGludGVycnVwdCAoZGVmYXVsdHMgdG8gLT5lbmFibGUgaWYgTlVMTCkKICAqIEBzaHV0ZG93bjoJCXNodXQgZG93biB0aGUgaW50ZXJydXB0IChkZWZhdWx0cyB0byAtPmRpc2FibGUgaWYgTlVMTCkKICAqIEBlbmFibGU6CQllbmFibGUgdGhlIGludGVycnVwdCAoZGVmYXVsdHMgdG8gY2hpcC0+dW5tYXNrIGlmIE5VTEwpCi0gKiBAZGlzYWJsZToJCWRpc2FibGUgdGhlIGludGVycnVwdCAoZGVmYXVsdHMgdG8gY2hpcC0+bWFzayBpZiBOVUxMKQorICogQGRpc2FibGU6CQlkaXNhYmxlIHRoZSBpbnRlcnJ1cHQKICAqIEBhY2s6CQlzdGFydCBvZiBhIG5ldyBpbnRlcnJ1cHQKICAqIEBtYXNrOgkJbWFzayBhbiBpbnRlcnJ1cHQgc291cmNlCiAgKiBAbWFza19hY2s6CQlhY2sgYW5kIG1hc2sgYW4gaW50ZXJydXB0IHNvdXJjZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rYmRfa2Vybi5oIGIvaW5jbHVkZS9saW51eC9rYmRfa2Vybi5oCmluZGV4IDhiZGIxNmIuLjUwNmFkMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2JkX2tlcm4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2tiZF9rZXJuLmgKQEAgLTE2MSw3ICsxNjEsNCBAQAogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdC0+YnVmLndvcmssIDApOwogfQogCi0vKiBtYWNfaGlkLmMgKi8KLWV4dGVybiBpbnQgbWFjX2hpZF9tb3VzZV9lbXVsYXRlX2J1dHRvbnMoaW50LCB1bnNpZ25lZCBpbnQsIGludCk7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggMzI4YmNhNi4uMTIyMWQyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xMjQsNyArMTI0LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQCi0gIHZvaWQgX19taWdodF9zbGVlcChjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHByZWVtcHRfb2Zmc2V0KTsKKyAgdm9pZCBfX21pZ2h0X3NsZWVwKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpOwogLyoqCiAgKiBtaWdodF9zbGVlcCAtIGFubm90YXRpb24gZm9yIGZ1bmN0aW9ucyB0aGF0IGNhbiBzbGVlcAogICoKQEAgLTEzOCw3ICsxMzgsOCBAQAogIyBkZWZpbmUgbWlnaHRfc2xlZXAoKSBcCiAJZG8geyBfX21pZ2h0X3NsZWVwKF9fRklMRV9fLCBfX0xJTkVfXywgMCk7IG1pZ2h0X3Jlc2NoZWQoKTsgfSB3aGlsZSAoMCkKICNlbHNlCi0gIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21pZ2h0X3NsZWVwKGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpIHsgfQorICBzdGF0aWMgaW5saW5lIHZvaWQgX19taWdodF9zbGVlcChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCQkgICBpbnQgcHJlZW1wdF9vZmZzZXQpIHsgfQogIyBkZWZpbmUgbWlnaHRfc2xlZXAoKSBkbyB7IG1pZ2h0X3Jlc2NoZWQoKTsgfSB3aGlsZSAoMCkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tmaWZvLmggYi9pbmNsdWRlL2xpbnV4L2tmaWZvLmgKaW5kZXggNmY2YzVmMy4uYmMwZmM3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZmlmby5oCisrKyBiL2luY2x1ZGUvbGludXgva2ZpZm8uaApAQCAtMTI0LDcgKzEyNCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBrZmlmb19pbml0aWFsaXplZChzdHJ1Y3Qga2ZpZm8gKmZpZm8pCiB7Ci0JcmV0dXJuIGZpZm8tPmJ1ZmZlciAhPSAwOworCXJldHVybiBmaWZvLT5idWZmZXIgIT0gTlVMTDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCA3MzExMjI1Li5mOGVhNzFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTg1Nyw2ICs4NTcsNyBAQAogCXVuc2lnbmVkIGludCAoKnNmZl9kYXRhX3hmZXIpKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCiAJCQl1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBidWZsZW4sIGludCBydyk7CiAJdTggICAoKnNmZl9pcnFfb24pKHN0cnVjdCBhdGFfcG9ydCAqKTsKKwlib29sICgqc2ZmX2lycV9jaGVjaykoc3RydWN0IGF0YV9wb3J0ICopOwogCXZvaWQgKCpzZmZfaXJxX2NsZWFyKShzdHJ1Y3QgYXRhX3BvcnQgKik7CiAKIAl2b2lkICgqYm1kbWFfc2V0dXApKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwpAQCAtMTY0Miw4ICsxNjQzLDggQEAKIAkJCQkgICAgIGlycV9oYW5kbGVyX3QgaXJxX2hhbmRsZXIsCiAJCQkJICAgICBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQpOwogZXh0ZXJuIGludCBhdGFfcGNpX3NmZl9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqIGNvbnN0ICogcHBpLAotCQkJCXN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCwgdm9pZCAqaG9zdF9wcml2KTsKKwkJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKiBjb25zdCAqIHBwaSwKKwkJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0LCB2b2lkICpob3N0X3ByaXYsIGludCBoZmxhZ3MpOwogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpc3QuaCBiL2luY2x1ZGUvbGludXgvbGlzdC5oCmluZGV4IDk2OWY2ZTkuLjVkOWM2NTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbGlzdC5oCkBAIC0yMDYsNiArMjA2LDIwIEBACiB9CiAKIC8qKgorICogbGlzdF9yb3RhdGVfbGVmdCAtIHJvdGF0ZSB0aGUgbGlzdCB0byB0aGUgbGVmdAorICogQGhlYWQ6IHRoZSBoZWFkIG9mIHRoZSBsaXN0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X3JvdGF0ZV9sZWZ0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZmlyc3Q7CisKKwlpZiAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKKwkJZmlyc3QgPSBoZWFkLT5uZXh0OworCQlsaXN0X21vdmVfdGFpbChmaXJzdCwgaGVhZCk7CisJfQorfQorCisvKioKICAqIGxpc3RfaXNfc2luZ3VsYXIgLSB0ZXN0cyB3aGV0aGVyIGEgbGlzdCBoYXMganVzdCBvbmUgZW50cnkuCiAgKiBAaGVhZDogdGhlIGxpc3QgdG8gdGVzdC4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sbWIuaCBiL2luY2x1ZGUvbGludXgvbG1iLmgKaW5kZXggZWY4MmI4Zi4uZjNkMTQzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sbWIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xtYi5oCkBAIC00Miw2ICs0Miw3IEBACiBleHRlcm4gdm9pZCBfX2luaXQgbG1iX2FuYWx5emUodm9pZCk7CiBleHRlcm4gbG9uZyBsbWJfYWRkKHU2NCBiYXNlLCB1NjQgc2l6ZSk7CiBleHRlcm4gbG9uZyBsbWJfcmVtb3ZlKHU2NCBiYXNlLCB1NjQgc2l6ZSk7CitleHRlcm4gbG9uZyBfX2luaXQgbG1iX2ZyZWUodTY0IGJhc2UsIHU2NCBzaXplKTsKIGV4dGVybiBsb25nIF9faW5pdCBsbWJfcmVzZXJ2ZSh1NjQgYmFzZSwgdTY0IHNpemUpOwogZXh0ZXJuIHU2NCBfX2luaXQgbG1iX2FsbG9jX25pZCh1NjQgc2l6ZSwgdTY0IGFsaWduLCBpbnQgbmlkLAogCQkJCXU2NCAoKm5pZF9yYW5nZSkodTY0LCB1NjQsIGludCAqKSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCmluZGV4IDljY2YwZTIuLjEwMjA2YTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCkBAIC01MzQsNCArNTM0LDggQEAKICMgZGVmaW5lIG1pZ2h0X2xvY2tfcmVhZChsb2NrKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QUk9WRV9SQ1UKK2V4dGVybiB2b2lkIGxvY2tkZXBfcmN1X2RlcmVmZXJlbmNlKGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGludCBsaW5lKTsKKyNlbmRpZgorCiAjZW5kaWYgLyogX19MSU5VWF9MT0NLREVQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA2MGM0NjdiLi44YjJmYTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0yNjUsNiArMjY1LDggQEAKIAlyZXR1cm4gYXRvbWljX2luY19ub3RfemVybygmcGFnZS0+X2NvdW50KTsKIH0KIAorZXh0ZXJuIGludCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBmbik7CisKIC8qIFN1cHBvcnQgZm9yIHZpcnR1YWxseSBtYXBwZWQgcGFnZXMgKi8KIHN0cnVjdCBwYWdlICp2bWFsbG9jX3RvX3BhZ2UoY29uc3Qgdm9pZCAqYWRkcik7CiB1bnNpZ25lZCBsb25nIHZtYWxsb2NfdG9fcGZuKGNvbnN0IHZvaWQgKmFkZHIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvc2hfZmxjdGwuaCBiL2luY2x1ZGUvbGludXgvbXRkL3NoX2ZsY3RsLmgKaW5kZXggZTc3YzFjZS4uYWI3NzYwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvc2hfZmxjdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9zaF9mbGN0bC5oCkBAIC01MSw2ICs1MSw4IEBACiAjZGVmaW5lIF80RUNDQ05URU4JKDB4MSA8PCAyNCkKICNkZWZpbmUgXzRFQ0NFTgkJKDB4MSA8PCAyMykKICNkZWZpbmUgXzRFQ0NDT1JSRUNUCSgweDEgPDwgMjIpCisjZGVmaW5lIFNIQlVTU0VMCSgweDEgPDwgMjApCisjZGVmaW5lIFNFTF8xNkJJVAkoMHgxIDw8IDE5KQogI2RlZmluZSBTTkFORF9FCQkoMHgxIDw8IDE4KQkvKiBTTkFORCAoMD01MTIgMT0yMDQ4KSovCiAjZGVmaW5lIFFUU0VMX0UJCSgweDEgPDwgMTcpCiAjZGVmaW5lIEVORElBTgkJKDB4MSA8PCAxNikJLyogMSA9IGxpdHRsZSBlbmRpYW4gKi8KQEAgLTk2LDYgKzk4LDcgQEAKIHN0cnVjdCBzaF9mbGN0bCB7CiAJc3RydWN0IG10ZF9pbmZvCQltdGQ7CiAJc3RydWN0IG5hbmRfY2hpcAljaGlwOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CiAJdm9pZCBfX2lvbWVtCQkqcmVnOwogCiAJdWludDhfdAlkb25lX2J1ZmZbMjA0OCArIDY0XTsJLyogbWF4IHNpemUgMjA0OCArIDY0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mLmggYi9pbmNsdWRlL2xpbnV4L29mLmgKaW5kZXggZTdmYWNkOC4uZjZkOWNiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZi5oCisrKyBiL2luY2x1ZGUvbGludXgvb2YuaApAQCAtMTksNiArMTksMTEgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2lmZGVmIENPTkZJR19PRgogCiB0eXBlZGVmIHUzMiBwaGFuZGxlOwogdHlwZWRlZiB1MzIgaWhhbmRsZTsKQEAgLTM5LDEwICs0NCw3IEBACiBzdHJ1Y3QgZGV2aWNlX25vZGUgewogCWNvbnN0IGNoYXIgKm5hbWU7CiAJY29uc3QgY2hhciAqdHlwZTsKLQlwaGFuZGxlCW5vZGU7Ci0jaWYgIWRlZmluZWQoQ09ORklHX1NQQVJDKQotCXBoYW5kbGUgbGludXhfcGhhbmRsZTsKLSNlbmRpZgorCXBoYW5kbGUgcGhhbmRsZTsKIAljaGFyCSpmdWxsX25hbWU7CiAKIAlzdHJ1Y3QJcHJvcGVydHkgKnByb3BlcnRpZXM7CkBAIC02Myw2ICs2NSwxMSBAQAogI2VuZGlmCiB9OwogCisvKiBQb2ludGVyIGZvciBmaXJzdCBlbnRyeSBpbiBjaGFpbiBvZiBhbGwgbm9kZXMuICovCitleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICphbGxub2RlczsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2Nob3NlbjsKK2V4dGVybiByd2xvY2tfdCBkZXZ0cmVlX2xvY2s7CisKIHN0YXRpYyBpbmxpbmUgaW50IG9mX25vZGVfY2hlY2tfZmxhZyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm4sIHVuc2lnbmVkIGxvbmcgZmxhZykKIHsKIAlyZXR1cm4gdGVzdF9iaXQoZmxhZywgJm4tPl9mbGFncyk7CkBAIC03MywxMiArODAsNiBAQAogCXNldF9iaXQoZmxhZywgJm4tPl9mbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotc2V0X25vZGVfcHJvY19lbnRyeShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlKQotewotCWRuLT5wZGUgPSBkZTsKLX0KLQogZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9hbGxfbm9kZXMoc3RydWN0IGRldmljZV9ub2RlICpwcmV2KTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NQQVJDKQpAQCAtMTAxLDI2ICsxMDIsMzYgQEAKICAqLwogCiAvKiBIZWxwZXIgdG8gcmVhZCBhIGJpZyBudW1iZXI7IHNpemUgaXMgaW4gY2VsbHMgKG5vdCBieXRlcykgKi8KLXN0YXRpYyBpbmxpbmUgdTY0IG9mX3JlYWRfbnVtYmVyKGNvbnN0IHUzMiAqY2VsbCwgaW50IHNpemUpCitzdGF0aWMgaW5saW5lIHU2NCBvZl9yZWFkX251bWJlcihjb25zdCBfX2JlMzIgKmNlbGwsIGludCBzaXplKQogewogCXU2NCByID0gMDsKIAl3aGlsZSAoc2l6ZS0tKQotCQlyID0gKHIgPDwgMzIpIHwgKihjZWxsKyspOworCQlyID0gKHIgPDwgMzIpIHwgYmUzMl90b19jcHUoKihjZWxsKyspKTsKIAlyZXR1cm4gcjsKIH0KIAogLyogTGlrZSBvZl9yZWFkX251bWJlciwgYnV0IHdlIHdhbnQgYW4gdW5zaWduZWQgbG9uZyByZXN1bHQgKi8KLSNpZmRlZiBDT05GSUdfUFBDMzIKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvZl9yZWFkX3Vsb25nKGNvbnN0IHUzMiAqY2VsbCwgaW50IHNpemUpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb2ZfcmVhZF91bG9uZyhjb25zdCBfX2JlMzIgKmNlbGwsIGludCBzaXplKQogewotCXJldHVybiBjZWxsW3NpemUtMV07CisJLyogdG9zcyBhd2F5IHVwcGVyIGJpdHMgaWYgdW5zaWduZWQgbG9uZyBpcyBzbWFsbGVyIHRoYW4gdTY0ICovCisJcmV0dXJuIG9mX3JlYWRfbnVtYmVyKGNlbGwsIHNpemUpOwogfQotI2Vsc2UKLSNkZWZpbmUgb2ZfcmVhZF91bG9uZyhjZWxsLCBzaXplKQlvZl9yZWFkX251bWJlcihjZWxsLCBzaXplKQotI2VuZGlmCiAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogCisvKiBEZWZhdWx0ICNhZGRyZXNzIGFuZCAjc2l6ZSBjZWxscy4gIEFsbG93IGFyY2ggYXNtL3Byb20uaCB0byBvdmVycmlkZSAqLworI2lmICFkZWZpbmVkKE9GX1JPT1RfTk9ERV9BRERSX0NFTExTX0RFRkFVTFQpCisjZGVmaW5lIE9GX1JPT1RfTk9ERV9BRERSX0NFTExTX0RFRkFVTFQgMQorI2RlZmluZSBPRl9ST09UX05PREVfU0laRV9DRUxMU19ERUZBVUxUIDEKKyNlbmRpZgorCisvKiBEZWZhdWx0IHN0cmluZyBjb21wYXJlIGZ1bmN0aW9ucywgQWxsb3cgYXJjaCBhc20vcHJvbS5oIHRvIG92ZXJyaWRlICovCisjaWYgIWRlZmluZWQob2ZfY29tcGF0X2NtcCkKKyNkZWZpbmUgb2ZfY29tcGF0X2NtcChzMSwgczIsIGwpCXN0cm5jYXNlY21wKChzMSksIChzMiksIChsKSkKKyNkZWZpbmUgb2ZfcHJvcF9jbXAoczEsIHMyKQkJc3RyY21wKChzMSksIChzMikpCisjZGVmaW5lIG9mX25vZGVfY21wKHMxLCBzMikJCXN0cmNhc2VjbXAoKHMxKSwgKHMyKSkKKyNlbmRpZgorCiAvKiBmbGFnIGRlc2NyaXB0aW9ucyAqLwogI2RlZmluZSBPRl9EWU5BTUlDCTEgLyogbm9kZSBhbmQgcHJvcGVydGllcyB3ZXJlIGFsbG9jYXRlZCB2aWEga21hbGxvYyAqLwogI2RlZmluZSBPRl9ERVRBQ0hFRAkyIC8qIG5vZGUgaGFzIGJlZW4gZGV0YWNoZWQgZnJvbSB0aGUgZGV2aWNlIHRyZWUgKi8KQEAgLTE4Nyw0ICsxOTgsMTkgQEAKIAljb25zdCBjaGFyICpsaXN0X25hbWUsIGNvbnN0IGNoYXIgKmNlbGxzX25hbWUsIGludCBpbmRleCwKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKipvdXRfbm9kZSwgY29uc3Qgdm9pZCAqKm91dF9hcmdzKTsKIAorZXh0ZXJuIGludCBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoY29uc3QgY2hhciAqY29tcGF0KTsKKworZXh0ZXJuIGludCBwcm9tX2FkZF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5wLCBzdHJ1Y3QgcHJvcGVydHkqIHByb3ApOworZXh0ZXJuIGludCBwcm9tX3JlbW92ZV9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcHJvcGVydHkgKnByb3ApOworZXh0ZXJuIGludCBwcm9tX3VwZGF0ZV9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCXN0cnVjdCBwcm9wZXJ0eSAqbmV3cHJvcCwKKwkJCQlzdHJ1Y3QgcHJvcGVydHkgKm9sZHByb3ApOworCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfRFlOQU1JQykKKy8qIEZvciB1cGRhdGluZyB0aGUgZGV2aWNlIHRyZWUgYXQgcnVudGltZSAqLworZXh0ZXJuIHZvaWQgb2ZfYXR0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICopOworZXh0ZXJuIHZvaWQgb2ZfZGV0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICopOworI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfT0YgKi8KICNlbmRpZiAvKiBfTElOVVhfT0ZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9mZHQuaCBiL2luY2x1ZGUvbGludXgvb2ZfZmR0LmgKaW5kZXggNDFkNDMyYi4uYTFjYTkyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZl9mZHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L29mX2ZkdC5oCkBAIC00Miw0NSArNDIsNjIgQEAKICAqIGVuZHMgd2hlbiBzaXplIGlzIDAKICAqLwogc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyIHsKLQl1MzIJbWFnaWM7CQkJLyogbWFnaWMgd29yZCBPRl9EVF9IRUFERVIgKi8KLQl1MzIJdG90YWxzaXplOwkJLyogdG90YWwgc2l6ZSBvZiBEVCBibG9jayAqLwotCXUzMglvZmZfZHRfc3RydWN0OwkJLyogb2Zmc2V0IHRvIHN0cnVjdHVyZSAqLwotCXUzMglvZmZfZHRfc3RyaW5nczsJCS8qIG9mZnNldCB0byBzdHJpbmdzICovCi0JdTMyCW9mZl9tZW1fcnN2bWFwOwkJLyogb2Zmc2V0IHRvIG1lbW9yeSByZXNlcnZlIG1hcCAqLwotCXUzMgl2ZXJzaW9uOwkJLyogZm9ybWF0IHZlcnNpb24gKi8KLQl1MzIJbGFzdF9jb21wX3ZlcnNpb247CS8qIGxhc3QgY29tcGF0aWJsZSB2ZXJzaW9uICovCisJX19iZTMyCW1hZ2ljOwkJCS8qIG1hZ2ljIHdvcmQgT0ZfRFRfSEVBREVSICovCisJX19iZTMyCXRvdGFsc2l6ZTsJCS8qIHRvdGFsIHNpemUgb2YgRFQgYmxvY2sgKi8KKwlfX2JlMzIJb2ZmX2R0X3N0cnVjdDsJCS8qIG9mZnNldCB0byBzdHJ1Y3R1cmUgKi8KKwlfX2JlMzIJb2ZmX2R0X3N0cmluZ3M7CQkvKiBvZmZzZXQgdG8gc3RyaW5ncyAqLworCV9fYmUzMglvZmZfbWVtX3Jzdm1hcDsJCS8qIG9mZnNldCB0byBtZW1vcnkgcmVzZXJ2ZSBtYXAgKi8KKwlfX2JlMzIJdmVyc2lvbjsJCS8qIGZvcm1hdCB2ZXJzaW9uICovCisJX19iZTMyCWxhc3RfY29tcF92ZXJzaW9uOwkvKiBsYXN0IGNvbXBhdGlibGUgdmVyc2lvbiAqLwogCS8qIHZlcnNpb24gMiBmaWVsZHMgYmVsb3cgKi8KLQl1MzIJYm9vdF9jcHVpZF9waHlzOwkvKiBQaHlzaWNhbCBDUFUgaWQgd2UncmUgYm9vdGluZyBvbiAqLworCV9fYmUzMglib290X2NwdWlkX3BoeXM7CS8qIFBoeXNpY2FsIENQVSBpZCB3ZSdyZSBib290aW5nIG9uICovCiAJLyogdmVyc2lvbiAzIGZpZWxkcyBiZWxvdyAqLwotCXUzMglkdF9zdHJpbmdzX3NpemU7CS8qIHNpemUgb2YgdGhlIERUIHN0cmluZ3MgYmxvY2sgKi8KKwlfX2JlMzIJZHRfc3RyaW5nc19zaXplOwkvKiBzaXplIG9mIHRoZSBEVCBzdHJpbmdzIGJsb2NrICovCiAJLyogdmVyc2lvbiAxNyBmaWVsZHMgYmVsb3cgKi8KLQl1MzIJZHRfc3RydWN0X3NpemU7CQkvKiBzaXplIG9mIHRoZSBEVCBzdHJ1Y3R1cmUgYmxvY2sgKi8KKwlfX2JlMzIJZHRfc3RydWN0X3NpemU7CQkvKiBzaXplIG9mIHRoZSBEVCBzdHJ1Y3R1cmUgYmxvY2sgKi8KIH07CiAKKy8qIFRCRDogVGVtcG9yYXJ5IGV4cG9ydCBvZiBmZHQgZ2xvYmFscyAtIHJlbW92ZSB3aGVuIGNvZGUgZnVsbHkgbWVyZ2VkICovCitleHRlcm4gaW50IF9faW5pdGRhdGEgZHRfcm9vdF9hZGRyX2NlbGxzOworZXh0ZXJuIGludCBfX2luaXRkYXRhIGR0X3Jvb3Rfc2l6ZV9jZWxsczsKK2V4dGVybiBzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgKmluaXRpYWxfYm9vdF9wYXJhbXM7CisKIC8qIEZvciBzY2FubmluZyB0aGUgZmxhdCBkZXZpY2UtdHJlZSBhdCBib290IHRpbWUgKi8KLWV4dGVybiBpbnQgX19pbml0IG9mX3NjYW5fZmxhdF9kdChpbnQgKCppdCkodW5zaWduZWQgbG9uZyBub2RlLAotCQkJCQkgICAgY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwKLQkJCQkJICAgIHZvaWQgKmRhdGEpLAotCQkJCSAgdm9pZCAqZGF0YSk7Ci1leHRlcm4gdm9pZCBfX2luaXQgKm9mX2dldF9mbGF0X2R0X3Byb3AodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCQl1bnNpZ25lZCBsb25nICpzaXplKTsKLWV4dGVybiBpbnQgX19pbml0IG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZSh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IG9mX2dldF9mbGF0X2R0X3Jvb3Qodm9pZCk7CitleHRlcm4gY2hhciAqZmluZF9mbGF0X2R0X3N0cmluZyh1MzIgb2Zmc2V0KTsKK2V4dGVybiBpbnQgb2Zfc2Nhbl9mbGF0X2R0KGludCAoKml0KSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAorCQkJCSAgICAgaW50IGRlcHRoLCB2b2lkICpkYXRhKSwKKwkJCSAgIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgKm9mX2dldF9mbGF0X2R0X3Byb3AodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSB1bnNpZ25lZCBsb25nICpzaXplKTsKK2V4dGVybiBpbnQgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBvZl9nZXRfZmxhdF9kdF9yb290KHZvaWQpOworZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9kdF9zY2FuX2Nob3Nlbl9hcmNoKHVuc2lnbmVkIGxvbmcgbm9kZSk7CitleHRlcm4gaW50IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW4odW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSwKKwkJCQkgICAgIGludCBkZXB0aCwgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCBlYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQodW5zaWduZWQgbG9uZyBub2RlKTsKK2V4dGVybiBpbnQgZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAorCQkJCSAgICAgaW50IGRlcHRoLCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIGVhcmx5X2luaXRfZHRfYWRkX21lbW9yeV9hcmNoKHU2NCBiYXNlLCB1NjQgc2l6ZSk7CitleHRlcm4gdTY0IGVhcmx5X2luaXRfZHRfYWxsb2NfbWVtb3J5X2FyY2godTY0IHNpemUsIHU2NCBhbGlnbik7CitleHRlcm4gdTY0IGR0X21lbV9uZXh0X2NlbGwoaW50IHMsIF9fYmUzMiAqKmNlbGxwKTsKKworLyoKKyAqIElmIEJMS19ERVZfSU5JVFJELCB0aGUgZmR0IGVhcmx5IGluaXQgY29kZSB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiwKKyAqIHRvIGJlIHByb3ZpZGVkIGJ5IHRoZSBhcmNoIGNvZGUuIHN0YXJ0IGFuZCBlbmQgYXJlIHNwZWNpZmllZCBhcworICogcGh5c2ljYWwgYWRkcmVzc2VzLgorICovCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECitleHRlcm4gdm9pZCBlYXJseV9pbml0X2R0X3NldHVwX2luaXRyZF9hcmNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGVuZCk7CisjZW5kaWYKKworLyogRWFybHkgZmxhdCB0cmVlIHNjYW4gaG9va3MgKi8KK2V4dGVybiBpbnQgZWFybHlfaW5pdF9kdF9zY2FuX3Jvb3QodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSwKKwkJCQkgICBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpOwogCiAvKiBPdGhlciBQcm90b3R5cGVzICovCi1leHRlcm4gdm9pZCBmaW5pc2hfZGV2aWNlX3RyZWUodm9pZCk7CiBleHRlcm4gdm9pZCB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUodm9pZCk7CiBleHRlcm4gdm9pZCBlYXJseV9pbml0X2RldnRyZWUodm9pZCAqKTsKLWV4dGVybiBpbnQgbWFjaGluZV9pc19jb21wYXRpYmxlKGNvbnN0IGNoYXIgKmNvbXBhdCk7Ci1leHRlcm4gdm9pZCBwcmludF9wcm9wZXJ0aWVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7Ci1leHRlcm4gaW50IHByb21fbl9pbnRyX2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSogbnApOwotZXh0ZXJuIHZvaWQgcHJvbV9nZXRfaXJxX3NlbnNlcyh1bnNpZ25lZCBjaGFyICpzZW5zZXMsIGludCBvZmYsIGludCBtYXgpOwotZXh0ZXJuIGludCBwcm9tX2FkZF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5wLCBzdHJ1Y3QgcHJvcGVydHkqIHByb3ApOwotZXh0ZXJuIGludCBwcm9tX3JlbW92ZV9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcHJvcGVydHkgKnByb3ApOwotZXh0ZXJuIGludCBwcm9tX3VwZGF0ZV9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJCXN0cnVjdCBwcm9wZXJ0eSAqbmV3cHJvcCwKLQkJCQlzdHJ1Y3QgcHJvcGVydHkgKm9sZHByb3ApOwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX0xJTlVYX09GX0ZEVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZGF0YS5oIGIvaW5jbHVkZS9saW51eC9wYWRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTYxMWRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wYWRhdGEuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogcGFkYXRhLmggLSBoZWFkZXIgZm9yIHRoZSBwYWRhdGEgcGFyYWxsZWxpemF0aW9uIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBzZWN1bmV0IFNlY3VyaXR5IE5ldHdvcmtzIEFHCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgU3RlZmZlbiBLbGFzc2VydCA8c3RlZmZlbi5rbGFzc2VydEBzZWN1bmV0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgUEFEQVRBX0gKKyNkZWZpbmUgUEFEQVRBX0gKKworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3QgcGFkYXRhX3ByaXYgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YQkqcGQ7CisJaW50CQkJY2JfY3B1OworCWludAkJCXNlcV9ucjsKKwlpbnQJCQlpbmZvOworCXZvaWQgICAgICAgICAgICAgICAgICAgICgqcGFyYWxsZWwpKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKTsKKwl2b2lkICAgICAgICAgICAgICAgICAgICAoKnNlcmlhbCkoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpOworfTsKKworc3RydWN0IHBhZGF0YV9saXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBsaXN0OworCXNwaW5sb2NrX3QgICAgICAgICAgICAgIGxvY2s7Cit9OworCitzdHJ1Y3QgcGFkYXRhX3F1ZXVlIHsKKwlzdHJ1Y3QgcGFkYXRhX2xpc3QJcGFyYWxsZWw7CisJc3RydWN0IHBhZGF0YV9saXN0CXJlb3JkZXI7CisJc3RydWN0IHBhZGF0YV9saXN0CXNlcmlhbDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcHdvcms7CisJc3RydWN0IHdvcmtfc3RydWN0CXN3b3JrOworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICAgICpwZDsKKwlhdG9taWNfdAkJbnVtX29iajsKKwlpbnQJCQljcHVfaW5kZXg7Cit9OworCitzdHJ1Y3QgcGFyYWxsZWxfZGF0YSB7CisJc3RydWN0IHBhZGF0YV9pbnN0YW5jZQkqcGluc3Q7CisJc3RydWN0IHBhZGF0YV9xdWV1ZQkqcXVldWU7CisJYXRvbWljX3QJCXNlcV9ucjsKKwlhdG9taWNfdAkJcmVvcmRlcl9vYmplY3RzOworCWF0b21pY190ICAgICAgICAgICAgICAgIHJlZmNudDsKKwl1bnNpZ25lZCBpbnQJCW1heF9zZXFfbnI7CisJY3B1bWFza192YXJfdAkJY3B1bWFzazsKKwlzcGlubG9ja190ICAgICAgICAgICAgICBsb2NrOworfTsKKworc3RydWN0IHBhZGF0YV9pbnN0YW5jZSB7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICAgY3B1X25vdGlmaWVyOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YQkqcGQ7CisJY3B1bWFza192YXJfdCAgICAgICAgICAgY3B1bWFzazsKKwlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CisJdTgJCQlmbGFnczsKKyNkZWZpbmUJUEFEQVRBX0lOSVQJCTEKKyNkZWZpbmUJUEFEQVRBX1JFU0VUCQkyCit9OworCitleHRlcm4gc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGFkYXRhX2FsbG9jKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJCQkgICAgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKTsKK2V4dGVybiB2b2lkIHBhZGF0YV9mcmVlKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KTsKK2V4dGVybiBpbnQgcGFkYXRhX2RvX3BhcmFsbGVsKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LAorCQkJICAgICAgc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEsIGludCBjYl9jcHUpOworZXh0ZXJuIHZvaWQgcGFkYXRhX2RvX3NlcmlhbChzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSk7CitleHRlcm4gaW50IHBhZGF0YV9zZXRfY3B1bWFzayhzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJCSAgICAgIGNwdW1hc2tfdmFyX3QgY3B1bWFzayk7CitleHRlcm4gaW50IHBhZGF0YV9hZGRfY3B1KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LCBpbnQgY3B1KTsKK2V4dGVybiBpbnQgcGFkYXRhX3JlbW92ZV9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpOworZXh0ZXJuIHZvaWQgcGFkYXRhX3N0YXJ0KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KTsKK2V4dGVybiB2b2lkIHBhZGF0YV9zdG9wKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCmluZGV4IDkzYTdjMDhmLi5jOGI2NDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCkBAIC0xMSw2ICsxMSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KIAogI2lmZGVmIENPTkZJR19BQ1BJCitleHRlcm4gYWNwaV9zdGF0dXMgcGNpX2FjcGlfYWRkX2J1c19wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwKKwkJCQkJCSBzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1cyk7CitleHRlcm4gYWNwaV9zdGF0dXMgcGNpX2FjcGlfcmVtb3ZlX2J1c19wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldik7CitleHRlcm4gYWNwaV9zdGF0dXMgcGNpX2FjcGlfYWRkX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KTsKK2V4dGVybiBhY3BpX3N0YXR1cyBwY2lfYWNwaV9yZW1vdmVfcG1fbm90aWZpZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYpOworCiBzdGF0aWMgaW5saW5lIGFjcGlfaGFuZGxlIGFjcGlfZmluZF9yb290X2JyaWRnZV9oYW5kbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IHBjaV9idXMgKnBidXMgPSBwZGV2LT5idXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCAxNzRlNTM5Li4yNTgxMzczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTE4Nyw2ICsxODcsMzMgQEAKIAlQQ0lfQlVTX0ZMQUdTX05PX01NUkJDID0gKF9fZm9yY2UgcGNpX2J1c19mbGFnc190KSAyLAogfTsKIAorLyogQmFzZWQgb24gdGhlIFBDSSBIb3RwbHVnIFNwZWMsIGJ1dCBzb21lIHZhbHVlcyBhcmUgbWFkZSB1cCBieSB1cyAqLworZW51bSBwY2lfYnVzX3NwZWVkIHsKKwlQQ0lfU1BFRURfMzNNSHoJCQk9IDB4MDAsCisJUENJX1NQRUVEXzY2TUh6CQkJPSAweDAxLAorCVBDSV9TUEVFRF82Nk1Iel9QQ0lYCQk9IDB4MDIsCisJUENJX1NQRUVEXzEwME1Iel9QQ0lYCQk9IDB4MDMsCisJUENJX1NQRUVEXzEzM01Iel9QQ0lYCQk9IDB4MDQsCisJUENJX1NQRUVEXzY2TUh6X1BDSVhfRUNDCT0gMHgwNSwKKwlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfRUNDCT0gMHgwNiwKKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfRUNDCT0gMHgwNywKKwlQQ0lfU1BFRURfNjZNSHpfUENJWF8yNjYJPSAweDA5LAorCVBDSV9TUEVFRF8xMDBNSHpfUENJWF8yNjYJPSAweDBhLAorCVBDSV9TUEVFRF8xMzNNSHpfUENJWF8yNjYJPSAweDBiLAorCUFHUF9VTktOT1dOCQkJPSAweDBjLAorCUFHUF8xWAkJCQk9IDB4MGQsCisJQUdQXzJYCQkJCT0gMHgwZSwKKwlBR1BfNFgJCQkJPSAweDBmLAorCUFHUF84WAkJCQk9IDB4MTAsCisJUENJX1NQRUVEXzY2TUh6X1BDSVhfNTMzCT0gMHgxMSwKKwlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfNTMzCT0gMHgxMiwKKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzCT0gMHgxMywKKwlQQ0lFX1NQRUVEXzJfNUdUCQk9IDB4MTQsCisJUENJRV9TUEVFRF81XzBHVAkJPSAweDE1LAorCVBDSUVfU1BFRURfOF8wR1QJCT0gMHgxNiwKKwlQQ0lfU1BFRURfVU5LTk9XTgkJPSAweGZmLAorfTsKKwogc3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUgewogCXN0cnVjdCBobGlzdF9ub2RlIG5leHQ7CiAJY2hhciBjYXBfbnI7CkBAIC0yMzksNiArMjY2LDcgQEAKIAkJCQkJICAgY29uZmlndXJhdGlvbiBzcGFjZSAqLwogCXVuc2lnbmVkIGludAlwbWVfc3VwcG9ydDo1OwkvKiBCaXRtYXNrIG9mIHN0YXRlcyBmcm9tIHdoaWNoIFBNRSMKIAkJCQkJICAgY2FuIGJlIGdlbmVyYXRlZCAqLworCXVuc2lnbmVkIGludAlwbWVfaW50ZXJydXB0OjE7CiAJdW5zaWduZWQgaW50CWQxX3N1cHBvcnQ6MTsJLyogTG93IHBvd2VyIHN0YXRlIEQxIGlzIHN1cHBvcnRlZCAqLwogCXVuc2lnbmVkIGludAlkMl9zdXBwb3J0OjE7CS8qIExvdyBwb3dlciBzdGF0ZSBEMiBpcyBzdXBwb3J0ZWQgKi8KIAl1bnNpZ25lZCBpbnQJbm9fZDFkMjoxOwkvKiBPbmx5IGFsbG93IEQwIGFuZCBEMyAqLwpAQCAtMjc1LDcgKzMwMyw4IEBACiAJdW5zaWduZWQgaW50CW1zaXhfZW5hYmxlZDoxOwogCXVuc2lnbmVkIGludAlhcmlfZW5hYmxlZDoxOwkvKiBBUkkgZm9yd2FyZGluZyAqLwogCXVuc2lnbmVkIGludAlpc19tYW5hZ2VkOjE7Ci0JdW5zaWduZWQgaW50CWlzX3BjaWU6MTsKKwl1bnNpZ25lZCBpbnQJaXNfcGNpZToxOwkvKiBPYnNvbGV0ZS4gV2lsbCBiZSByZW1vdmVkLgorCQkJCQkgICBVc2UgcGNpX2lzX3BjaWUoKSBpbnN0ZWFkICovCiAJdW5zaWduZWQgaW50ICAgIG5lZWRzX2ZyZXNldDoxOyAvKiBEZXYgcmVxdWlyZXMgZnVuZGFtZW50YWwgcmVzZXQgKi8KIAl1bnNpZ25lZCBpbnQJc3RhdGVfc2F2ZWQ6MTsKIAl1bnNpZ25lZCBpbnQJaXNfcGh5c2ZuOjE7CkBAIC0zMzUsOSArMzY0LDI2IEBACiAJaGxpc3RfYWRkX2hlYWQoJm5ld19jYXAtPm5leHQsICZwY2lfZGV2LT5zYXZlZF9jYXBfc3BhY2UpOwogfQogCi0jaWZuZGVmIFBDSV9CVVNfTlVNX1JFU09VUkNFUwotI2RlZmluZSBQQ0lfQlVTX05VTV9SRVNPVVJDRVMJMTYKLSNlbmRpZgorLyoKKyAqIFRoZSBmaXJzdCBQQ0lfQlJJREdFX1JFU09VUkNFX05VTSBQQ0kgYnVzIHJlc291cmNlcyAodGhvc2UgdGhhdCBjb3JyZXNwb25kCisgKiB0byBQMlAgb3IgQ2FyZEJ1cyBicmlkZ2Ugd2luZG93cykgZ28gaW4gYSB0YWJsZS4gIEFkZGl0aW9uYWwgb25lcyAoZm9yCisgKiBidXNlcyBiZWxvdyBob3N0IGJyaWRnZXMgb3Igc3VidHJhY3RpdmUgZGVjb2RlIGJyaWRnZXMpIGdvIGluIHRoZSBsaXN0LgorICogVXNlIHBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoKSB0byBpdGVyYXRlIHRocm91Z2ggYWxsIHRoZSByZXNvdXJjZXMuCisgKi8KKworLyoKKyAqIFBDSV9TVUJUUkFDVElWRV9ERUNPREUgbWVhbnMgdGhlIGJyaWRnZSBmb3J3YXJkcyB0aGUgd2luZG93IGltcGxpY2l0bHkKKyAqIGFuZCB0aGVyZSdzIG5vIHdheSB0byBwcm9ncmFtIHRoZSBicmlkZ2Ugd2l0aCB0aGUgZGV0YWlscyBvZiB0aGUgd2luZG93LgorICogVGhpcyBkb2VzIG5vdCBhcHBseSB0byBBQ1BJIF9DUlMgd2luZG93cywgZXZlbiB3aXRoIHRoZSBfREVDIHN1YnRyYWN0aXZlLQorICogZGVjb2RlIGJpdCBzZXQsIGJlY2F1c2UgdGhleSBhcmUgZXhwbGljaXQgYW5kIGNhbiBiZSBwcm9ncmFtbWVkIHdpdGggX1NSUy4KKyAqLworI2RlZmluZSBQQ0lfU1VCVFJBQ1RJVkVfREVDT0RFCTB4MQorCitzdHJ1Y3QgcGNpX2J1c19yZXNvdXJjZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXVuc2lnbmVkIGludCBmbGFnczsKK307CiAKICNkZWZpbmUgUENJX1JFR0lPTl9GTEFHX01BU0sJMHgwZlUJLyogVGhlc2UgYml0cyBvZiByZXNvdXJjZSBmbGFncyB0ZWxsIHVzIHRoZSBQQ0kgcmVnaW9uIGZsYWdzICovCiAKQEAgLTM0OCw4ICszOTQsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlczsJLyogbGlzdCBvZiBkZXZpY2VzIG9uIHRoaXMgYnVzICovCiAJc3RydWN0IHBjaV9kZXYJKnNlbGY7CQkvKiBicmlkZ2UgZGV2aWNlIGFzIHNlZW4gYnkgcGFyZW50ICovCiAJc3RydWN0IGxpc3RfaGVhZCBzbG90czsJCS8qIGxpc3Qgb2Ygc2xvdHMgb24gdGhpcyBidXMgKi8KLQlzdHJ1Y3QgcmVzb3VyY2UJKnJlc291cmNlW1BDSV9CVVNfTlVNX1JFU09VUkNFU107Ci0JCQkJCS8qIGFkZHJlc3Mgc3BhY2Ugcm91dGVkIHRvIHRoaXMgYnVzICovCisJc3RydWN0IHJlc291cmNlICpyZXNvdXJjZVtQQ0lfQlJJREdFX1JFU09VUkNFX05VTV07CisJc3RydWN0IGxpc3RfaGVhZCByZXNvdXJjZXM7CS8qIGFkZHJlc3Mgc3BhY2Ugcm91dGVkIHRvIHRoaXMgYnVzICovCiAKIAlzdHJ1Y3QgcGNpX29wcwkqb3BzOwkJLyogY29uZmlndXJhdGlvbiBhY2Nlc3MgZnVuY3Rpb25zICovCiAJdm9pZAkJKnN5c2RhdGE7CS8qIGhvb2sgZm9yIHN5cy1zcGVjaWZpYyBleHRlbnNpb24gKi8KQEAgLTM1OSw2ICs0MDUsOCBAQAogCXVuc2lnbmVkIGNoYXIJcHJpbWFyeTsJLyogbnVtYmVyIG9mIHByaW1hcnkgYnJpZGdlICovCiAJdW5zaWduZWQgY2hhcglzZWNvbmRhcnk7CS8qIG51bWJlciBvZiBzZWNvbmRhcnkgYnJpZGdlICovCiAJdW5zaWduZWQgY2hhcglzdWJvcmRpbmF0ZTsJLyogbWF4IG51bWJlciBvZiBzdWJvcmRpbmF0ZSBidXNlcyAqLworCXVuc2lnbmVkIGNoYXIJbWF4X2J1c19zcGVlZDsJLyogZW51bSBwY2lfYnVzX3NwZWVkICovCisJdW5zaWduZWQgY2hhcgljdXJfYnVzX3NwZWVkOwkvKiBlbnVtIHBjaV9idXNfc3BlZWQgKi8KIAogCWNoYXIJCW5hbWVbNDhdOwogCkBAIC01NjMsNyArNjExLDggQEAKIGNoYXIgKnBjaWJpb3Nfc2V0dXAoY2hhciAqc3RyKTsKIAogLyogVXNlZCBvbmx5IHdoZW4gZHJpdmVycy9wY2kvc2V0dXAuYyBpcyB1c2VkICovCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwgcmVzb3VyY2Vfc2l6ZV90LAorcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQlyZXNvdXJjZV9zaXplX3QsCiAJCQkJcmVzb3VyY2Vfc2l6ZV90KTsKIHZvaWQgcGNpYmlvc191cGRhdGVfaXJxKHN0cnVjdCBwY2lfZGV2ICosIGludCBpcnEpOwogCkBAIC01ODksNiArNjM4LDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgcGNpX29wcyAqb3BzLCB2b2lkICpzeXNkYXRhKTsKIHN0cnVjdCBwY2lfYnVzICpwY2lfYWRkX25ld19idXMoc3RydWN0IHBjaV9idXMgKnBhcmVudCwgc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQlpbnQgYnVzbnIpOwordm9pZCBwY2llX3VwZGF0ZV9saW5rX3NwZWVkKHN0cnVjdCBwY2lfYnVzICpidXMsIHUxNiBsaW5rX3N0YXR1cyk7CiBzdHJ1Y3QgcGNpX3Nsb3QgKnBjaV9jcmVhdGVfc2xvdChzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50LCBpbnQgc2xvdF9uciwKIAkJCQkgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkgc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Zyk7CkBAIC02MTUsMTIgKzY2NSw2IEBACiAKIC8qIEdlbmVyaWMgUENJIGZ1bmN0aW9ucyBleHBvcnRlZCB0byBjYXJkIGRyaXZlcnMgKi8KIAotI2lmZGVmIENPTkZJR19QQ0lfTEVHQUNZCi1zdHJ1Y3QgcGNpX2RldiBfX2RlcHJlY2F0ZWQgKnBjaV9maW5kX2RldmljZSh1bnNpZ25lZCBpbnQgdmVuZG9yLAotCQkJCQkgICAgIHVuc2lnbmVkIGludCBkZXZpY2UsCi0JCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKmZyb20pOwotI2VuZGlmIC8qIENPTkZJR19QQ0lfTEVHQUNZICovCi0KIGVudW0gcGNpX2xvc3RfaW50ZXJydXB0X3JlYXNvbiB7CiAJUENJX0xPU1RfSVJRX05PX0lORk9STUFUSU9OID0gMCwKIAlQQ0lfTE9TVF9JUlFfRElTQUJMRV9NU0ksCkBAIC03NTAsMTEgKzc5NCwyMyBAQAogcGNpX3Bvd2VyX3QgcGNpX2Nob29zZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogYm9vbCBwY2lfcG1lX2NhcGFibGUoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpOwogdm9pZCBwY2lfcG1lX2FjdGl2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIGVuYWJsZSk7Ci1pbnQgcGNpX2VuYWJsZV93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLCBib29sIGVuYWJsZSk7CitpbnQgX19wY2lfZW5hYmxlX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUsCisJCSAgICAgIGJvb2wgcnVudGltZSwgYm9vbCBlbmFibGUpOwogaW50IHBjaV93YWtlX2Zyb21fZDMoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBlbmFibGUpOwogcGNpX3Bvd2VyX3QgcGNpX3RhcmdldF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfcHJlcGFyZV90b19zbGVlcChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfYmFja19mcm9tX3NsZWVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworYm9vbCBwY2lfZGV2X3J1bl93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworCitzdGF0aWMgaW5saW5lIGludCBwY2lfZW5hYmxlX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUsCisJCQkJICBib29sIGVuYWJsZSkKK3sKKwlyZXR1cm4gX19wY2lfZW5hYmxlX3dha2UoZGV2LCBzdGF0ZSwgZmFsc2UsIGVuYWJsZSk7Cit9CisKKy8qIEZvciB1c2UgYnkgYXJjaCB3aXRoIGN1c3RvbSBwcm9iZSBjb2RlICovCit2b2lkIHNldF9wY2llX3BvcnRfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cit2b2lkIHNldF9wY2llX2hvdHBsdWdfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIAogLyogRnVuY3Rpb25zIGZvciBQQ0kgSG90cGx1ZyBkcml2ZXJzIHRvIHVzZSAqLwogaW50IHBjaV9idXNfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IGNhcCk7CkBAIC03NzIsNiArODI4LDcgQEAKIHZvaWQgcGNpX2J1c19zaXplX2JyaWRnZXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7CiBpbnQgcGNpX2NsYWltX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICosIGludCk7CiB2b2lkIHBjaV9hc3NpZ25fdW5hc3NpZ25lZF9yZXNvdXJjZXModm9pZCk7Cit2b2lkIHBjaV9hc3NpZ25fdW5hc3NpZ25lZF9icmlkZ2VfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UpOwogdm9pZCBwZGV2X2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKik7CiB2b2lkIHBkZXZfc29ydF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0IHJlc291cmNlX2xpc3QgKik7CiBpbnQgcGNpX2VuYWJsZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKiwgaW50IG1hc2spOwpAQCAtNzg5LDEyICs4NDYsMjMgQEAKIHZvaWQgcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhzdHJ1Y3QgcGNpX2RldiAqLCBpbnQpOwogCiAvKiBkcml2ZXJzL3BjaS9idXMuYyAqLwordm9pZCBwY2lfYnVzX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgaW50IGZsYWdzKTsKK3N0cnVjdCByZXNvdXJjZSAqcGNpX2J1c19yZXNvdXJjZV9uKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBuKTsKK3ZvaWQgcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKHN0cnVjdCBwY2lfYnVzICpidXMpOworCisjZGVmaW5lIHBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIGkpCQkJCVwKKwlmb3IgKGkgPSAwOwkJCQkJCQlcCisJICAgIChyZXMgPSBwY2lfYnVzX3Jlc291cmNlX24oYnVzLCBpKSkgfHwgaSA8IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNOyBcCisJICAgICBpKyspCisKIGludCBfX211c3RfY2hlY2sgcGNpX2J1c19hbGxvY19yZXNvdXJjZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLAogCQkJc3RydWN0IHJlc291cmNlICpyZXMsIHJlc291cmNlX3NpemVfdCBzaXplLAogCQkJcmVzb3VyY2Vfc2l6ZV90IGFsaWduLCByZXNvdXJjZV9zaXplX3QgbWluLAogCQkJdW5zaWduZWQgaW50IHR5cGVfbWFzaywKLQkJCXZvaWQgKCphbGlnbmYpKHZvaWQgKiwgc3RydWN0IHJlc291cmNlICosCi0JCQkJcmVzb3VyY2Vfc2l6ZV90LCByZXNvdXJjZV9zaXplX3QpLAorCQkJcmVzb3VyY2Vfc2l6ZV90ICgqYWxpZ25mKSh2b2lkICosCisJCQkJCQkgIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqLAorCQkJCQkJICByZXNvdXJjZV9zaXplX3QsCisJCQkJCQkgIHJlc291cmNlX3NpemVfdCksCiAJCQl2b2lkICphbGlnbmZfZGF0YSk7CiB2b2lkIHBjaV9lbmFibGVfYnJpZGdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIApAQCAtOTU1LDYgKzEwMjMsMTEgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUENJX0RPTUFJTlMgKi8KIAorLyogc29tZSBhcmNoaXRlY3R1cmVzIHJlcXVpcmUgYWRkaXRpb25hbCBzZXR1cCB0byBkaXJlY3QgVkdBIHRyYWZmaWMgKi8KK3R5cGVkZWYgaW50ICgqYXJjaF9zZXRfdmdhX3N0YXRlX3QpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIGRlY29kZSwKKwkJICAgICAgdW5zaWduZWQgaW50IGNvbW1hbmRfYml0cywgYm9vbCBjaGFuZ2VfYnJpZGdlKTsKK2V4dGVybiB2b2lkIHBjaV9yZWdpc3Rlcl9zZXRfdmdhX3N0YXRlKGFyY2hfc2V0X3ZnYV9zdGF0ZV90IGZ1bmMpOworCiAjZWxzZSAvKiBDT05GSUdfUENJIGlzIG5vdCBlbmFibGVkICovCiAKIC8qCkBAIC05NzMsMTMgKzEwNDYsNiBAQAogX1BDSV9OT1BfQUxMKHJlYWQsICopCiBfUENJX05PUF9BTEwod3JpdGUsKQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9kZXZpY2UodW5zaWduZWQgaW50IHZlbmRvciwKLQkJCQkJICAgICAgdW5zaWduZWQgaW50IGRldmljZSwKLQkJCQkJICAgICAgc3RydWN0IHBjaV9kZXYgKmZyb20pCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKnBjaV9nZXRfZGV2aWNlKHVuc2lnbmVkIGludCB2ZW5kb3IsCiAJCQkJCSAgICAgdW5zaWduZWQgaW50IGRldmljZSwKIAkJCQkJICAgICBzdHJ1Y3QgcGNpX2RldiAqZnJvbSkKQEAgLTEyMzcsOCArMTMwMywxMiBAQAogCURFQ0xBUkVfUENJX0ZJWFVQX1NFQ1RJT04oLnBjaV9maXh1cF9zdXNwZW5kLAkJCVwKIAkJCXN1c3BlbmQjI3ZlbmRvciMjZGV2aWNlIyNob29rLCB2ZW5kb3IsIGRldmljZSwgaG9vaykKIAotCisjaWZkZWYgQ09ORklHX1BDSV9RVUlSS1MKIHZvaWQgcGNpX2ZpeHVwX2RldmljZShlbnVtIHBjaV9maXh1cF9wYXNzIHBhc3MsIHN0cnVjdCBwY2lfZGV2ICpkZXYpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZml4dXBfZGV2aWNlKGVudW0gcGNpX2ZpeHVwX3Bhc3MgcGFzcywKKwkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmRldikge30KKyNlbmRpZgogCiB2b2lkIF9faW9tZW0gKnBjaW1faW9tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsIHVuc2lnbmVkIGxvbmcgbWF4bGVuKTsKIHZvaWQgcGNpbV9pb3VubWFwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkIF9faW9tZW0gKmFkZHIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaG90cGx1Zy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaG90cGx1Zy5oCmluZGV4IDY1MmJhNzk3Li41ZDA5Y2JhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9ob3RwbHVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaG90cGx1Zy5oCkBAIC0yOCwyNiArMjgsNiBAQAogI2lmbmRlZiBfUENJX0hPVFBMVUdfSAogI2RlZmluZSBfUENJX0hPVFBMVUdfSAogCi0KLS8qIFRoZXNlIHZhbHVlcyBjb21lIGZyb20gdGhlIFBDSSBIb3RwbHVnIFNwZWMgKi8KLWVudW0gcGNpX2J1c19zcGVlZCB7Ci0JUENJX1NQRUVEXzMzTUh6CQkJPSAweDAwLAotCVBDSV9TUEVFRF82Nk1IegkJCT0gMHgwMSwKLQlQQ0lfU1BFRURfNjZNSHpfUENJWAkJPSAweDAyLAotCVBDSV9TUEVFRF8xMDBNSHpfUENJWAkJPSAweDAzLAotCVBDSV9TUEVFRF8xMzNNSHpfUENJWAkJPSAweDA0LAotCVBDSV9TUEVFRF82Nk1Iel9QQ0lYX0VDQwk9IDB4MDUsCi0JUENJX1NQRUVEXzEwME1Iel9QQ0lYX0VDQwk9IDB4MDYsCi0JUENJX1NQRUVEXzEzM01Iel9QQ0lYX0VDQwk9IDB4MDcsCi0JUENJX1NQRUVEXzY2TUh6X1BDSVhfMjY2CT0gMHgwOSwKLQlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfMjY2CT0gMHgwYSwKLQlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfMjY2CT0gMHgwYiwKLQlQQ0lfU1BFRURfNjZNSHpfUENJWF81MzMJPSAweDExLAotCVBDSV9TUEVFRF8xMDBNSHpfUENJWF81MzMJPSAweDEyLAotCVBDSV9TUEVFRF8xMzNNSHpfUENJWF81MzMJPSAweDEzLAotCVBDSV9TUEVFRF9VTktOT1dOCQk9IDB4ZmYsCi19OwotCiAvKiBUaGVzZSB2YWx1ZXMgY29tZSBmcm9tIHRoZSBQQ0kgRXhwcmVzcyBTcGVjICovCiBlbnVtIHBjaWVfbGlua193aWR0aCB7CiAJUENJRV9MTktfV0lEVEhfUkVTUlYJPSAweDAwLApAQCAtNjEsMTIgKzQxLDYgQEAKIAlQQ0lFX0xOS19XSURUSF9VTktOT1dOICA9IDB4RkYsCiB9OwogCi1lbnVtIHBjaWVfbGlua19zcGVlZCB7Ci0JUENJRV8yXzVHQgkJPSAweDE0LAotCVBDSUVfNV8wR0IJCT0gMHgxNSwKLQlQQ0lFX0xOS19TUEVFRF9VTktOT1dOCT0gMHhGRiwKLX07Ci0KIC8qKgogICogc3RydWN0IGhvdHBsdWdfc2xvdF9vcHMgLXRoZSBjYWxsYmFja3MgdGhhdCB0aGUgaG90cGx1ZyBwY2kgY29yZSBjYW4gdXNlCiAgKiBAb3duZXI6IFRoZSBtb2R1bGUgb3duZXIgb2YgdGhpcyBzdHJ1Y3R1cmUKQEAgLTg5LDEyICs2Myw2IEBACiAgKiBAZ2V0X2FkYXB0ZXJfc3RhdHVzOiBDYWxsZWQgdG8gZ2V0IHNlZSBpZiBhbiBhZGFwdGVyIGlzIHByZXNlbnQgaW4gdGhlIHNsb3Qgb3Igbm90LgogICoJSWYgdGhpcyBmaWVsZCBpcyBOVUxMLCB0aGUgdmFsdWUgcGFzc2VkIGluIHRoZSBzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8KICAqCXdpbGwgYmUgdXNlZCB3aGVuIHRoaXMgdmFsdWUgaXMgcmVxdWVzdGVkIGJ5IGEgdXNlci4KLSAqIEBnZXRfbWF4X2J1c19zcGVlZDogQ2FsbGVkIHRvIGdldCB0aGUgbWF4IGJ1cyBzcGVlZCBmb3IgYSBzbG90LgotICoJSWYgdGhpcyBmaWVsZCBpcyBOVUxMLCB0aGUgdmFsdWUgcGFzc2VkIGluIHRoZSBzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8KLSAqCXdpbGwgYmUgdXNlZCB3aGVuIHRoaXMgdmFsdWUgaXMgcmVxdWVzdGVkIGJ5IGEgdXNlci4KLSAqIEBnZXRfY3VyX2J1c19zcGVlZDogQ2FsbGVkIHRvIGdldCB0aGUgY3VycmVudCBidXMgc3BlZWQgZm9yIGEgc2xvdC4KLSAqCUlmIHRoaXMgZmllbGQgaXMgTlVMTCwgdGhlIHZhbHVlIHBhc3NlZCBpbiB0aGUgc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvCi0gKgl3aWxsIGJlIHVzZWQgd2hlbiB0aGlzIHZhbHVlIGlzIHJlcXVlc3RlZCBieSBhIHVzZXIuCiAgKgogICogVGhlIHRhYmxlIG9mIGZ1bmN0aW9uIHBvaW50ZXJzIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBob3RwbHVnIHBjaSBjb3JlIGJ5IGEKICAqIGhvdHBsdWcgcGNpIGRyaXZlci4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGJ5IHRoZSBob3RwbHVnIHBjaSBjb3JlIHdoZW4KQEAgLTExMiwxNyArODAsMTQgQEAKIAlpbnQgKCpnZXRfYXR0ZW50aW9uX3N0YXR1cykJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7CiAJaW50ICgqZ2V0X2xhdGNoX3N0YXR1cykJCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOwogCWludCAoKmdldF9hZGFwdGVyX3N0YXR1cykJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7Ci0JaW50ICgqZ2V0X21heF9idXNfc3BlZWQpCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKTsKLQlpbnQgKCpnZXRfY3VyX2J1c19zcGVlZCkJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpOwogfTsKIAogLyoqCiAgKiBzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8gLSB1c2VkIHRvIG5vdGlmeSB0aGUgaG90cGx1ZyBwY2kgY29yZSBvZiB0aGUgc3RhdGUgb2YgdGhlIHNsb3QKLSAqIEBwb3dlcjogaWYgcG93ZXIgaXMgZW5hYmxlZCBvciBub3QgKDEvMCkKKyAqIEBwb3dlcl9zdGF0dXM6IGlmIHBvd2VyIGlzIGVuYWJsZWQgb3Igbm90ICgxLzApCiAgKiBAYXR0ZW50aW9uX3N0YXR1czogaWYgdGhlIGF0dGVudGlvbiBsaWdodCBpcyBlbmFibGVkIG9yIG5vdCAoMS8wKQogICogQGxhdGNoX3N0YXR1czogaWYgdGhlIGxhdGNoIChpZiBhbnkpIGlzIG9wZW4gb3IgY2xvc2VkICgxLzApCi0gKiBAYWRhcHRlcl9wcmVzZW50OiBpZiB0aGVyZSBpcyBhIHBjaSBib2FyZCBwcmVzZW50IGluIHRoZSBzbG90IG9yIG5vdCAoMS8wKQotICogQGFkZHJlc3M6IChkb21haW4gPDwgMTYgfCBidXMgPDwgOCB8IGRldikKKyAqIEBhZGFwdGVyX3N0YXR1czogaWYgdGhlcmUgaXMgYSBwY2kgYm9hcmQgcHJlc2VudCBpbiB0aGUgc2xvdCBvciBub3QgKDEvMCkKICAqCiAgKiBVc2VkIHRvIG5vdGlmeSB0aGUgaG90cGx1ZyBwY2kgY29yZSBvZiB0aGUgc3RhdHVzIG9mIGEgc3BlY2lmaWMgc2xvdC4KICAqLwpAQCAtMTMxLDggKzk2LDYgQEAKIAl1OAlhdHRlbnRpb25fc3RhdHVzOwogCXU4CWxhdGNoX3N0YXR1czsKIAl1OAlhZGFwdGVyX3N0YXR1czsKLQllbnVtIHBjaV9idXNfc3BlZWQJbWF4X2J1c19zcGVlZDsKLQllbnVtIHBjaV9idXNfc3BlZWQJY3VyX2J1c19zcGVlZDsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCBjY2E4YTA0Li4wYmU4MjQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtMjQxNyw2ICsyNDE3LDkgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0MF9IQgkweDFhMjEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0NV9IQgkweDFhMzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUCTB4MWEzOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NQVF9TTUJVUwkweDFjMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9DUFRfTFBDMQkweDFjNDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9DUFRfTFBDMgkweDFjNDMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzAJMHgyNDEwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8xCTB4MjQxMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMwkweDI0MTMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaAppbmRleCBhNzY4NGE1Li43OTQ2NjJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmNwdV9jb3VudGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oCkBAIC05OCw5ICs5OCw2IEBACiAJZmJjLT5jb3VudCA9IGFtb3VudDsKIH0KIAotI2RlZmluZSBfX3BlcmNwdV9jb3VudGVyX2FkZChmYmMsIGFtb3VudCwgYmF0Y2gpIFwKLQlwZXJjcHVfY291bnRlcl9hZGQoZmJjLCBhbW91bnQpCi0KIHN0YXRpYyBpbmxpbmUgdm9pZAogcGVyY3B1X2NvdW50ZXJfYWRkKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjLCBzNjQgYW1vdW50KQogewpAQCAtMTA5LDYgKzEwNiwxMiBAQAogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19wZXJjcHVfY291bnRlcl9hZGQoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMsIHM2NCBhbW91bnQsIHMzMiBiYXRjaCkKK3sKKwlwZXJjcHVfY291bnRlcl9hZGQoZmJjLCBhbW91bnQpOworfQorCiBzdGF0aWMgaW5saW5lIHM2NCBwZXJjcHVfY291bnRlcl9yZWFkKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjKQogewogCXJldHVybiBmYmMtPmNvdW50OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCA4ZmE3MTg3Li43YjE4YjRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtMjExLDExICsyMTEsOSBAQAogCQlfX3UzMgkJd2FrZXVwX3dhdGVybWFyazsgLyogYnl0ZXMgYmVmb3JlIHdha2V1cCAgICovCiAJfTsKIAotCV9fdTMyCQkJX19yZXNlcnZlZF8yOwotCi0JX191NjQJCQlicF9hZGRyOwogCV9fdTMyCQkJYnBfdHlwZTsKLQlfX3UzMgkJCWJwX2xlbjsKKwlfX3U2NAkJCWJwX2FkZHI7CisJX191NjQJCQlicF9sZW47CiB9OwogCiAvKgpAQCAtMjkwLDcgKzI4OCw3IEBACiB9OwogCiAjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9NQVNLCQkoMyA8PCAwKQotI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfVU5LTk9XTgkJKDAgPDwgMCkKKyNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX1VOS05PV04JKDAgPDwgMCkKICNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwJCQkoMSA8PCAwKQogI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX1VTRVIJCQkoMiA8PCAwKQogI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0hZUEVSVklTT1IJCSgzIDw8IDApCkBAIC0zNTYsOCArMzU0LDggQEAKIAkgKgl1NjQJCQkJc3RyZWFtX2lkOwogCSAqIH07CiAJICovCi0JUEVSRl9SRUNPUkRfVEhST1RUTEUJCT0gNSwKLQlQRVJGX1JFQ09SRF9VTlRIUk9UVExFCQk9IDYsCisJUEVSRl9SRUNPUkRfVEhST1RUTEUJCQk9IDUsCisJUEVSRl9SRUNPUkRfVU5USFJPVFRMRQkJCT0gNiwKIAogCS8qCiAJICogc3RydWN0IHsKQEAgLTM3MSwxMCArMzY5LDEwIEBACiAKIAkvKgogCSAqIHN0cnVjdCB7Ci0JICogCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0JICogCXUzMgkJCQlwaWQsIHRpZDsKKwkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOworCSAqCXUzMgkJCQlwaWQsIHRpZDsKIAkgKgotCSAqIAlzdHJ1Y3QgcmVhZF9mb3JtYXQJCXZhbHVlczsKKwkgKglzdHJ1Y3QgcmVhZF9mb3JtYXQJCXZhbHVlczsKIAkgKiB9OwogCSAqLwogCVBFUkZfUkVDT1JEX1JFQUQJCQk9IDgsCkBAIC00MTIsNyArNDEwLDcgQEAKIAkgKgkgIGNoYXIgICAgICAgICAgICAgICAgICBkYXRhW3NpemVdO30mJiBQRVJGX1NBTVBMRV9SQVcKIAkgKiB9OwogCSAqLwotCVBFUkZfUkVDT1JEX1NBTVBMRQkJPSA5LAorCVBFUkZfUkVDT1JEX1NBTVBMRQkJCT0gOSwKIAogCVBFUkZfUkVDT1JEX01BWCwJCQkvKiBub24tQUJJICovCiB9OwpAQCAtNDc4LDkgKzQ3NiwxMSBAQAogCXVuaW9uIHsKIAkJc3RydWN0IHsgLyogaGFyZHdhcmUgKi8KIAkJCXU2NAkJY29uZmlnOworCQkJdTY0CQlsYXN0X3RhZzsKIAkJCXVuc2lnbmVkIGxvbmcJY29uZmlnX2Jhc2U7CiAJCQl1bnNpZ25lZCBsb25nCWV2ZW50X2Jhc2U7CiAJCQlpbnQJCWlkeDsKKwkJCWludAkJbGFzdF9jcHU7CiAJCX07CiAJCXN0cnVjdCB7IC8qIHNvZnR3YXJlICovCiAJCQlzNjQJCXJlbWFpbmluZzsKQEAgLTQ5OCw5ICs0OTgsOCBAQAogCWF0b21pYzY0X3QJCQlwZXJpb2RfbGVmdDsKIAl1NjQJCQkJaW50ZXJydXB0czsKIAotCXU2NAkJCQlmcmVxX2NvdW50OwotCXU2NAkJCQlmcmVxX2ludGVycnVwdHM7Ci0JdTY0CQkJCWZyZXFfc3RhbXA7CisJdTY0CQkJCWZyZXFfdGltZV9zdGFtcDsKKwl1NjQJCQkJZnJlcV9jb3VudF9zdGFtcDsKICNlbmRpZgogfTsKIApAQCAtNTEyLDYgKzUxMSw4IEBACiBzdHJ1Y3QgcG11IHsKIAlpbnQgKCplbmFibGUpCQkJKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiAJdm9pZCAoKmRpc2FibGUpCQkJKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CisJaW50ICgqc3RhcnQpCQkJKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CisJdm9pZCAoKnN0b3ApCQkJKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiAJdm9pZCAoKnJlYWQpCQkJKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiAJdm9pZCAoKnVudGhyb3R0bGUpCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIH07CkBAIC01NjUsNiArNTY2LDEwIEBACiAJCQkJCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICosCiAJCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAorZW51bSBwZXJmX2dyb3VwX2ZsYWcgeworCVBFUkZfR1JPVVBfU09GVFdBUkUgPSAweDEsCit9OworCiAvKioKICAqIHN0cnVjdCBwZXJmX2V2ZW50IC0gcGVyZm9ybWFuY2UgZXZlbnQga2VybmVsIHJlcHJlc2VudGF0aW9uOgogICovCkBAIC01NzQsNiArNTc5LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlldmVudF9lbnRyeTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlzaWJsaW5nX2xpc3Q7CiAJaW50CQkJCW5yX3NpYmxpbmdzOworCWludAkJCQlncm91cF9mbGFnczsKIAlzdHJ1Y3QgcGVyZl9ldmVudAkJKmdyb3VwX2xlYWRlcjsKIAlzdHJ1Y3QgcGVyZl9ldmVudAkJKm91dHB1dDsKIAljb25zdCBzdHJ1Y3QgcG11CQkqcG11OwpAQCAtNjU4LDcgKzY2NCw3IEBACiAKIAlwZXJmX292ZXJmbG93X2hhbmRsZXJfdAkJb3ZlcmZsb3dfaGFuZGxlcjsKIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX0VWRU5UX1RSQUNJTkcKIAlzdHJ1Y3QgZXZlbnRfZmlsdGVyCQkqZmlsdGVyOwogI2VuZGlmCiAKQEAgLTY4Myw3ICs2ODksOCBAQAogCSAqLwogCXN0cnVjdCBtdXRleAkJCW11dGV4OwogCi0Jc3RydWN0IGxpc3RfaGVhZAkJZ3JvdXBfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlwaW5uZWRfZ3JvdXBzOworCXN0cnVjdCBsaXN0X2hlYWQJCWZsZXhpYmxlX2dyb3VwczsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlldmVudF9saXN0OwogCWludAkJCQlucl9ldmVudHM7CiAJaW50CQkJCW5yX2FjdGl2ZTsKQEAgLTc0NiwxMCArNzUzLDkgQEAKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwbXUgKmh3X3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOwogCi1leHRlcm4gdm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KTsKLWV4dGVybiB2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsIGludCBjcHUpOwotZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KTsKK2V4dGVybiB2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCk7CitleHRlcm4gdm9pZCBwZXJmX2V2ZW50X3Rhc2tfdGljayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogZXh0ZXJuIGludCBwZXJmX2V2ZW50X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKIGV4dGVybiB2b2lkIHBlcmZfZXZlbnRfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwogZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKQEAgLTc2NCw3ICs3NzAsNyBAQAogZXh0ZXJuIGludCBwZXJmX2V2ZW50X3Rhc2tfZW5hYmxlKHZvaWQpOwogZXh0ZXJuIGludCBod19wZXJmX2dyb3VwX3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9sZWFkZXIsCiAJICAgICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCi0JICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwgaW50IGNwdSk7CisJICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCk7CiBleHRlcm4gdm9pZCBwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOwogZXh0ZXJuIGludCBwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiBleHRlcm4gc3RydWN0IHBlcmZfZXZlbnQgKgpAQCAtODUzLDggKzg1OSw3IEBACiBleHRlcm4gaW50IHN5c2N0bF9wZXJmX2V2ZW50X3NhbXBsZV9yYXRlOwogCiBleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBwZXJmX3RwX2V2ZW50KGludCBldmVudF9pZCwgdTY0IGFkZHIsIHU2NCBjb3VudCwKLQkJCQkgdm9pZCAqcmVjb3JkLCBpbnQgZW50cnlfc2l6ZSk7CitleHRlcm4gdm9pZCBwZXJmX3RwX2V2ZW50KGludCBldmVudF9pZCwgdTY0IGFkZHIsIHU2NCBjb3VudCwgdm9pZCAqcmVjb3JkLCBpbnQgZW50cnlfc2l6ZSk7CiBleHRlcm4gdm9pZCBwZXJmX2JwX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSk7CiAKICNpZm5kZWYgcGVyZl9taXNjX2ZsYWdzCkBAIC04NzUsMTIgKzg4MCwxMiBAQAogZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkCi1wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KQkJeyB9CitwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQkJCXsgfQogc3RhdGljIGlubGluZSB2b2lkCiBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsIGludCBjcHUpCQl7IH0KKwkJCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCQkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQKLXBlcmZfZXZlbnRfdGFza190aWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IGNwdSkJCQl7IH0KK3BlcmZfZXZlbnRfdGFza190aWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykJCQkJeyB9CiBzdGF0aWMgaW5saW5lIGludCBwZXJmX2V2ZW50X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQl7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQl7IH0KQEAgLTg5NSwxMyArOTAwLDEzIEBACiBwZXJmX3N3X2V2ZW50KHUzMiBldmVudF9pZCwgdTY0IG5yLCBpbnQgbm1pLAogCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1NjQgYWRkcikJCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZAotcGVyZl9icF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpCQl7IH0KK3BlcmZfYnBfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKQkJCXsgfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9tbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9jb21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9pbml0KHZvaWQpCQkJCXsgfQotc3RhdGljIGlubGluZSBpbnQgIHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQodm9pZCkgIHsgcmV0dXJuIC0xOyB9CitzdGF0aWMgaW5saW5lIGludCAgcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCh2b2lkKQkJeyByZXR1cm4gLTE7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KGludCByY3R4KQkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkJCXsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZmtleXYyLmggYi9pbmNsdWRlL2xpbnV4L3Bma2V5djIuaAppbmRleCAyMjhiMGI2Li4wYjgwYzgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bma2V5djIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Bma2V5djIuaApAQCAtMzE1LDYgKzMxNSw3IEBACiAjZGVmaW5lIFNBREJfWF9FQUxHX0FFU19HQ01fSUNWMTIJMTkKICNkZWZpbmUgU0FEQl9YX0VBTEdfQUVTX0dDTV9JQ1YxNgkyMAogI2RlZmluZSBTQURCX1hfRUFMR19DQU1FTExJQUNCQwkJMjIKKyNkZWZpbmUgU0FEQl9YX0VBTEdfTlVMTF9BRVNfR01BQwkyMwogI2RlZmluZSBTQURCX0VBTEdfTUFYICAgICAgICAgICAgICAgICAgIDI1MyAvKiBsYXN0IEVBTEcgKi8KIC8qIHByaXZhdGUgYWxsb2NhdGlvbnMgc2hvdWxkIHVzZSAyNDktMjU1IChSRkMyNDA3KSAqLwogI2RlZmluZSBTQURCX1hfRUFMR19TRVJQRU5UQ0JDICAyNTIgICAgIC8qIGRyYWZ0LWlldGYtaXBzZWMtY2lwaC1hZXMtY2JjLTAwICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BrdGNkdmQuaCBiL2luY2x1ZGUvbGludXgvcGt0Y2R2ZC5oCmluZGV4IDc2ZTUwNTMuLjcyMTMwMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGt0Y2R2ZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGt0Y2R2ZC5oCkBAIC0xNjMsMTAgKzE2Myw4IEBACiAJYXRvbWljX3QJCWF0dGVudGlvbjsJLyogU2V0IHRvIG5vbi16ZXJvIHdoZW4gcXVldWUgcHJvY2Vzc2luZyBpcyBuZWVkZWQgKi8KIAlpbnQJCQl3cml0aW5nOwkvKiBOb24temVybyB3aGVuIHdyaXRpbmcsIHplcm8gd2hlbiByZWFkaW5nICovCiAJc3BpbmxvY2tfdAkJbG9jazsJCS8qIFByb3RlY3RpbmcgcmVhZC93cml0ZSBxdWV1ZSBtYW5pcHVsYXRpb25zICovCi0Jc3RydWN0IGJpbwkJKnJlYWRfcXVldWU7Ci0Jc3RydWN0IGJpbwkJKnJlYWRfcXVldWVfdGFpbDsKLQlzdHJ1Y3QgYmlvCQkqd3JpdGVfcXVldWU7Ci0Jc3RydWN0IGJpbwkJKndyaXRlX3F1ZXVlX3RhaWw7CisJc3RydWN0IGJpb19saXN0CQlyZWFkX3F1ZXVlOworCXN0cnVjdCBiaW9fbGlzdAkJd3JpdGVfcXVldWU7CiAJc2VjdG9yX3QJCWxhc3Rfd3JpdGU7CS8qIFRoZSBzZWN0b3Igd2hlcmUgdGhlIGxhc3Qgd3JpdGUgZW5kZWQgKi8KIAlpbnQJCQlzdWNjZXNzaXZlX3JlYWRzOwogfTsKQEAgLTIwNiw4ICsyMDQsOCBAQAogCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBMb2NrIHByb3RlY3Rpbmcgc3RhdGUgdHJhbnNpdGlvbnMgYW5kICovCiAJCQkJCQkvKiBvcmlnX2Jpb3MgbGlzdCAqLwogCi0Jc3RydWN0IGJpbwkJKm9yaWdfYmlvczsJLyogT3JpZ2luYWwgYmlvcyBwYXNzZWQgdG8gcGt0X21ha2VfcmVxdWVzdCAqLwotCXN0cnVjdCBiaW8JCSpvcmlnX2Jpb3NfdGFpbDsvKiB0aGF0IHdpbGwgYmUgaGFuZGxlZCBieSB0aGlzIHBhY2tldCAqLworCXN0cnVjdCBiaW9fbGlzdAkJb3JpZ19iaW9zOwkvKiBPcmlnaW5hbCBiaW9zIHBhc3NlZCB0byBwa3RfbWFrZV9yZXF1ZXN0ICovCisJCQkJCQkvKiB0aGF0IHdpbGwgYmUgaGFuZGxlZCBieSB0aGlzIHBhY2tldCAqLwogCWludAkJCXdyaXRlX3NpemU7CS8qIFRvdGFsIHNpemUgb2YgYWxsIGJpb3MgaW4gdGhlIG9yaWdfYmlvcyAqLwogCQkJCQkJLyogbGlzdCwgbWVhc3VyZWQgaW4gbnVtYmVyIG9mIGZyYW1lcyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsaXN0LmggYi9pbmNsdWRlL2xpbnV4L3BsaXN0LmgKaW5kZXggODIyN2Y3MS4uNjg5ODk4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxpc3QuaApAQCAtNDUsNyArNDUsNyBAQAogICogdGhlIGluc2VydGlvbiBvZiBuZXcgbm9kZXMuIFRoZXJlIGFyZSBubyBub2RlcyB3aXRoIGR1cGxpY2F0ZQogICogcHJpb3JpdGVzIG9uIHRoZSBsaXN0LgogICoKLSAqIFRoZSBub2RlcyBvbiB0aGUgbm9kZV9saXN0IGlzIG9yZGVyZWQgYnkgcHJpb3JpdHkgYW5kIGNhbiBjb250YWluCisgKiBUaGUgbm9kZXMgb24gdGhlIG5vZGVfbGlzdCBhcmUgb3JkZXJlZCBieSBwcmlvcml0eSBhbmQgY2FuIGNvbnRhaW4KICAqIGVudHJpZXMgd2hpY2ggaGF2ZSB0aGUgc2FtZSBwcmlvcml0eS4gVGhvc2UgZW50cmllcyBhcmUgb3JkZXJlZAogICogRklGTwogICoKQEAgLTI2NSw3ICsyNjUsNyBAQAogICoKICAqIEFzc3VtZXMgdGhlIHBsaXN0IGlzIF9ub3RfIGVtcHR5LgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwbGlzdF9ub2RlKiBwbGlzdF9maXJzdChjb25zdCBzdHJ1Y3QgcGxpc3RfaGVhZCAqaGVhZCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBsaXN0X25vZGUgKnBsaXN0X2ZpcnN0KGNvbnN0IHN0cnVjdCBwbGlzdF9oZWFkICpoZWFkKQogewogCXJldHVybiBsaXN0X2VudHJ5KGhlYWQtPm5vZGVfbGlzdC5uZXh0LAogCQkJICBzdHJ1Y3QgcGxpc3Rfbm9kZSwgcGxpc3Qubm9kZV9saXN0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG0uaCBiL2luY2x1ZGUvbGludXgvcG0uaAppbmRleCAxOThiOGY5Li5lODBkZjA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAKIC8qCiAgKiBDYWxsYmFja3MgZm9yIHBsYXRmb3JtIGRyaXZlcnMgdG8gaW1wbGVtZW50LgpAQCAtNDEyLDkgKzQxMywxMSBAQAogCXBtX21lc3NhZ2VfdAkJcG93ZXJfc3RhdGU7CiAJdW5zaWduZWQgaW50CQljYW5fd2FrZXVwOjE7CiAJdW5zaWduZWQgaW50CQlzaG91bGRfd2FrZXVwOjE7CisJdW5zaWduZWQJCWFzeW5jX3N1c3BlbmQ6MTsKIAllbnVtIGRwbV9zdGF0ZQkJc3RhdHVzOwkJLyogT3duZWQgYnkgdGhlIFBNIGNvcmUgKi8KICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWVudHJ5OworCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogCXN0cnVjdCB0aW1lcl9saXN0CXN1c3BlbmRfdGltZXI7CkBAIC00MzAsNiArNDMzLDcgQEAKIAl1bnNpZ25lZCBpbnQJCXJlcXVlc3RfcGVuZGluZzoxOwogCXVuc2lnbmVkIGludAkJZGVmZXJyZWRfcmVzdW1lOjE7CiAJdW5zaWduZWQgaW50CQlydW5fd2FrZToxOworCXVuc2lnbmVkIGludAkJcnVudGltZV9hdXRvOjE7CiAJZW51bSBycG1fcmVxdWVzdAlyZXF1ZXN0OwogCWVudW0gcnBtX3N0YXR1cwkJcnVudGltZV9zdGF0dXM7CiAJaW50CQkJcnVudGltZV9lcnJvcjsKQEAgLTUwOCw2ICs1MTIsNyBAQAogCQlfX3N1c3BlbmRfcmVwb3J0X3Jlc3VsdChfX2Z1bmNfXywgZm4sIHJldCk7CQlcCiAJfSB3aGlsZSAoMCkKIAorZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX3dhaXRfZm9yX2RldihzdHJ1Y3QgZGV2aWNlICpzdWIsIHN0cnVjdCBkZXZpY2UgKmRldik7CiAjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCiAKICNkZWZpbmUgZGV2aWNlX3BtX2xvY2soKSBkbyB7fSB3aGlsZSAoMCkKQEAgLTUyMCw2ICs1MjUsNyBAQAogCiAjZGVmaW5lIHN1c3BlbmRfcmVwb3J0X3Jlc3VsdChmbiwgcmV0KQkJZG8ge30gd2hpbGUgKDApCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fd2FpdF9mb3JfZGV2KHN0cnVjdCBkZXZpY2UgKmEsIHN0cnVjdCBkZXZpY2UgKmIpIHt9CiAjZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLwogCiAvKiBIb3cgdG8gcmVvcmRlciBkcG1fbGlzdCBhZnRlciBkZXZpY2VfbW92ZSgpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtX3J1bnRpbWUuaCBiL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oCmluZGV4IDM3MGNlMGEuLjdkNzczYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oCkBAIC0yOCw2ICsyOCw4IEBACiBleHRlcm4gaW50IHBtX3J1bnRpbWVfYmFycmllcihzdHJ1Y3QgZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgcG1fcnVudGltZV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIF9fcG1fcnVudGltZV9kaXNhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBjaGVja19yZXN1bWUpOworZXh0ZXJuIHZvaWQgcG1fcnVudGltZV9hbGxvdyhzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcG1fcnVudGltZV9mb3JiaWQoc3RydWN0IGRldmljZSAqZGV2KTsKIAogc3RhdGljIGlubGluZSBib29sIHBtX2NoaWxkcmVuX3N1c3BlbmRlZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC03OCw2ICs4MCw4IEBACiBzdGF0aWMgaW5saW5lIGludCBwbV9ydW50aW1lX2JhcnJpZXIoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2KSB7fQogc3RhdGljIGlubGluZSB2b2lkIF9fcG1fcnVudGltZV9kaXNhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBjKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfYWxsb3coc3RydWN0IGRldmljZSAqZGV2KSB7fQorc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfZm9yYmlkKHN0cnVjdCBkZXZpY2UgKmRldikge30KIAogc3RhdGljIGlubGluZSBib29sIHBtX2NoaWxkcmVuX3N1c3BlbmRlZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIGZhbHNlOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcG1fc3VzcGVuZF9pZ25vcmVfY2hpbGRyZW4oc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuKSB7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKaW5kZXggNTZmMmQ2My4uYzVlYWI4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCkBAIC0yNyw2ICsyNywyNiBAQAogI2RlZmluZSBQVFJBQ0VfR0VUU0lHSU5GTwkweDQyMDIKICNkZWZpbmUgUFRSQUNFX1NFVFNJR0lORk8JMHg0MjAzCiAKKy8qCisgKiBHZW5lcmljIHB0cmFjZSBpbnRlcmZhY2UgdGhhdCBleHBvcnRzIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgcmVnc2V0cworICogdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgTlRfKiB0eXBlcyAod2hpY2ggYXJlIGFsc28gdXNlZCBpbiB0aGUgY29yZSBkdW1wKS4KKyAqIFBsZWFzZSBub3RlIHRoYXQgdGhlIE5UX1BSU1RBVFVTIG5vdGUgdHlwZSBpbiBhIGNvcmUgZHVtcCBjb250YWlucyBhIGZ1bGwKKyAqICdzdHJ1Y3QgZWxmX3Byc3RhdHVzJy4gQnV0IHRoZSB1c2VyX3JlZ3NldCBmb3IgTlRfUFJTVEFUVVMgY29udGFpbnMganVzdCB0aGUKKyAqIGVsZl9ncmVnc2V0X3QgdGhhdCBpcyB0aGUgcHJfcmVnIGZpZWxkIG9mICdzdHJ1Y3QgZWxmX3Byc3RhdHVzJy4gRm9yIGFsbCB0aGUKKyAqIG90aGVyIHVzZXJfcmVnc2V0IGZsYXZvcnMsIHRoZSB1c2VyX3JlZ3NldCBsYXlvdXQgYW5kIHRoZSBFTEYgY29yZSBkdW1wIG5vdGUKKyAqIHBheWxvYWQgYXJlIGV4YWN0bHkgdGhlIHNhbWUgbGF5b3V0LgorICoKKyAqIFRoaXMgaW50ZXJmYWNlIHVzYWdlIGlzIGFzIGZvbGxvd3M6CisgKglzdHJ1Y3QgaW92ZWMgaW92ID0geyBidWYsIGxlbn07CisgKgorICoJcmV0ID0gcHRyYWNlKFBUUkFDRV9HRVRSRUdTRVQvUFRSQUNFX1NFVFJFR1NFVCwgcGlkLCBOVF9YWFhfVFlQRSwgJmlvdik7CisgKgorICogT24gdGhlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgaW92LmxlbiB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlIGtlcm5lbCwKKyAqIHNwZWNpZnlpbmcgaG93IG11Y2ggdGhlIGtlcm5lbCBoYXMgd3JpdHRlbi9yZWFkIHRvL2Zyb20gdGhlIHVzZXIncyBpb3YuYnVmLgorICovCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTRVQJMHg0MjA0CisjZGVmaW5lIFBUUkFDRV9TRVRSRUdTRVQJMHg0MjA1CisKIC8qIG9wdGlvbnMgc2V0IHVzaW5nIFBUUkFDRV9TRVRPUFRJT05TICovCiAjZGVmaW5lIFBUUkFDRV9PX1RSQUNFU1lTR09PRAkweDAwMDAwMDAxCiAjZGVmaW5lIFBUUkFDRV9PX1RSQUNFRk9SSwkweDAwMDAwMDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWRfY2xhc3MuaCBiL2luY2x1ZGUvbGludXgvcmFpZF9jbGFzcy5oCmluZGV4IDZiNTM3ZjEuLjMxZTFmZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZF9jbGFzcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZF9jbGFzcy5oCkBAIC0zMiw2ICszMiw3IEBACiAJUkFJRF9MRVZFTF8wLAogCVJBSURfTEVWRUxfMSwKIAlSQUlEX0xFVkVMXzEwLAorCVJBSURfTEVWRUxfMUUsCiAJUkFJRF9MRVZFTF8zLAogCVJBSURfTEVWRUxfNCwKIAlSQUlEX0xFVkVMXzUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdWxpc3QuaCBiL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oCmluZGV4IDFiZjBmNzAuLjc3OWQ3MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oCkBAIC0yMDgsNyArMjA4LDcgQEAKICAqIHByaW1pdGl2ZXMgc3VjaCBhcyBsaXN0X2FkZF9yY3UoKSBhcyBsb25nIGFzIGl0J3MgZ3VhcmRlZCBieSByY3VfcmVhZF9sb2NrKCkuCiAgKi8KICNkZWZpbmUgbGlzdF9lbnRyeV9yY3UocHRyLCB0eXBlLCBtZW1iZXIpIFwKLQljb250YWluZXJfb2YocmN1X2RlcmVmZXJlbmNlKHB0ciksIHR5cGUsIG1lbWJlcikKKwljb250YWluZXJfb2YocmN1X2RlcmVmZXJlbmNlX3JhdyhwdHIpLCB0eXBlLCBtZW1iZXIpCiAKIC8qKgogICogbGlzdF9maXJzdF9lbnRyeV9yY3UgLSBnZXQgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBhIGxpc3QKQEAgLTIyNSw5ICsyMjUsOSBAQAogCWxpc3RfZW50cnlfcmN1KChwdHIpLT5uZXh0LCB0eXBlLCBtZW1iZXIpCiAKICNkZWZpbmUgX19saXN0X2Zvcl9lYWNoX3JjdShwb3MsIGhlYWQpIFwKLQlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZSgoaGVhZCktPm5leHQpOyBcCisJZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2VfcmF3KChoZWFkKS0+bmV4dCk7IFwKIAkJcG9zICE9IChoZWFkKTsgXAotCQlwb3MgPSByY3VfZGVyZWZlcmVuY2UocG9zLT5uZXh0KSkKKwkJcG9zID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyhwb3MtPm5leHQpKQogCiAvKioKICAqIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1CS0JaXRlcmF0ZSBvdmVyIHJjdSBsaXN0IG9mIGdpdmVuIHR5cGUKQEAgLTI1Nyw5ICsyNTcsOSBAQAogICogYXMgbG9uZyBhcyB0aGUgdHJhdmVyc2FsIGlzIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9jaygpLgogICovCiAjZGVmaW5lIGxpc3RfZm9yX2VhY2hfY29udGludWVfcmN1KHBvcywgaGVhZCkgXAotCWZvciAoKHBvcykgPSByY3VfZGVyZWZlcmVuY2UoKHBvcyktPm5leHQpOyBcCisJZm9yICgocG9zKSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKHBvcyktPm5leHQpOyBcCiAJCXByZWZldGNoKChwb3MpLT5uZXh0KSwgKHBvcykgIT0gKGhlYWQpOyBcCi0JCShwb3MpID0gcmN1X2RlcmVmZXJlbmNlKChwb3MpLT5uZXh0KSkKKwkJKHBvcykgPSByY3VfZGVyZWZlcmVuY2VfcmF3KChwb3MpLT5uZXh0KSkKIAogLyoqCiAgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdSAtIGNvbnRpbnVlIGl0ZXJhdGlvbiBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZQpAQCAtNDE4LDEwICs0MTgsMTAgQEAKICAqIGFzIGxvbmcgYXMgdGhlIHRyYXZlcnNhbCBpcyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KICAqLwogI2RlZmluZSBobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHBvcywgcG9zLCBoZWFkLCBtZW1iZXIpCQkgXAotCWZvciAocG9zID0gcmN1X2RlcmVmZXJlbmNlKChoZWFkKS0+Zmlyc3QpOwkJCSBcCisJZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2VfcmF3KChoZWFkKS0+Zmlyc3QpOwkJCSBcCiAJCXBvcyAmJiAoeyBwcmVmZXRjaChwb3MtPm5leHQpOyAxOyB9KSAmJgkJCSBcCiAJCSh7IHRwb3MgPSBobGlzdF9lbnRyeShwb3MsIHR5cGVvZigqdHBvcyksIG1lbWJlcik7IDE7IH0pOyBcCi0JCXBvcyA9IHJjdV9kZXJlZmVyZW5jZShwb3MtPm5leHQpKQorCQlwb3MgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHBvcy0+bmV4dCkpCiAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1bGlzdF9udWxscy5oIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0X251bGxzLmgKaW5kZXggNTg5YTQwOS4uYjcwZmZlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VsaXN0X251bGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0X251bGxzLmgKQEAgLTEwMSwxMCArMTAxLDEwIEBACiAgKgogICovCiAjZGVmaW5lIGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdSh0cG9zLCBwb3MsIGhlYWQsIG1lbWJlcikgXAotCWZvciAocG9zID0gcmN1X2RlcmVmZXJlbmNlKChoZWFkKS0+Zmlyc3QpOwkJCSBcCisJZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2VfcmF3KChoZWFkKS0+Zmlyc3QpOwkJCSBcCiAJCSghaXNfYV9udWxscyhwb3MpKSAmJgkJCVwKIAkJKHsgdHBvcyA9IGhsaXN0X251bGxzX2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTsgfSk7IFwKLQkJcG9zID0gcmN1X2RlcmVmZXJlbmNlKHBvcy0+bmV4dCkpCisJCXBvcyA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocG9zLT5uZXh0KSkKIAogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAppbmRleCAyNDQ0MGY0Li5jODQzNzM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC02Miw2ICs2Miw4IEBACiAKIC8qIEludGVybmFsIHRvIGtlcm5lbCAqLwogZXh0ZXJuIHZvaWQgcmN1X2luaXQodm9pZCk7CitleHRlcm4gaW50IHJjdV9zY2hlZHVsZXJfYWN0aXZlOworZXh0ZXJuIHZvaWQgcmN1X3NjaGVkdWxlcl9zdGFydGluZyh2b2lkKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKQogI2luY2x1ZGUgPGxpbnV4L3JjdXRyZWUuaD4KQEAgLTc4LDE0ICs4MCwxMjAgQEAKIH0gd2hpbGUgKDApCiAKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCiBleHRlcm4gc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9sb2NrX21hcDsKLSMgZGVmaW5lIHJjdV9yZWFkX2FjcXVpcmUoKQlcCi0JCQlsb2NrX2FjcXVpcmUoJnJjdV9sb2NrX21hcCwgMCwgMCwgMiwgMSwgTlVMTCwgX1RISVNfSVBfKQorIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZSgpIFwKKwkJbG9ja19hY3F1aXJlKCZyY3VfbG9ja19tYXAsIDAsIDAsIDIsIDEsIE5VTEwsIF9USElTX0lQXykKICMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2UoKQlsb2NrX3JlbGVhc2UoJnJjdV9sb2NrX21hcCwgMSwgX1RISVNfSVBfKQotI2Vsc2UKLSMgZGVmaW5lIHJjdV9yZWFkX2FjcXVpcmUoKQlkbyB7IH0gd2hpbGUgKDApCi0jIGRlZmluZSByY3VfcmVhZF9yZWxlYXNlKCkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCisKK2V4dGVybiBzdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X2JoX2xvY2tfbWFwOworIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZV9iaCgpIFwKKwkJbG9ja19hY3F1aXJlKCZyY3VfYmhfbG9ja19tYXAsIDAsIDAsIDIsIDEsIE5VTEwsIF9USElTX0lQXykKKyMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2VfYmgoKQlsb2NrX3JlbGVhc2UoJnJjdV9iaF9sb2NrX21hcCwgMSwgX1RISVNfSVBfKQorCitleHRlcm4gc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9zY2hlZF9sb2NrX21hcDsKKyMgZGVmaW5lIHJjdV9yZWFkX2FjcXVpcmVfc2NoZWQoKSBcCisJCWxvY2tfYWNxdWlyZSgmcmN1X3NjaGVkX2xvY2tfbWFwLCAwLCAwLCAyLCAxLCBOVUxMLCBfVEhJU19JUF8pCisjIGRlZmluZSByY3VfcmVhZF9yZWxlYXNlX3NjaGVkKCkgXAorCQlsb2NrX3JlbGVhc2UoJnJjdV9zY2hlZF9sb2NrX21hcCwgMSwgX1RISVNfSVBfKQorCisvKioKKyAqIHJjdV9yZWFkX2xvY2tfaGVsZCAtIG1pZ2h0IHdlIGJlIGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbj8KKyAqCisgKiBJZiBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBzZWxlY3RlZCBhbmQgZW5hYmxlZCwgcmV0dXJucyBub256ZXJvIGlmZiBpbgorICogYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgSW4gYWJzZW5jZSBvZiBDT05GSUdfUFJPVkVfTE9DS0lORywKKyAqIHRoaXMgYXNzdW1lcyB3ZSBhcmUgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIHVubGVzcyBpdCBjYW4KKyAqIHByb3ZlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmN1X3JlYWRfbG9ja19oZWxkKHZvaWQpCit7CisJaWYgKGRlYnVnX2xvY2tzKQorCQlyZXR1cm4gbG9ja19pc19oZWxkKCZyY3VfbG9ja19tYXApOworCXJldHVybiAxOworfQorCisvKioKKyAqIHJjdV9yZWFkX2xvY2tfYmhfaGVsZCAtIG1pZ2h0IHdlIGJlIGluIFJDVS1iaCByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbj8KKyAqCisgKiBJZiBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBzZWxlY3RlZCBhbmQgZW5hYmxlZCwgcmV0dXJucyBub256ZXJvIGlmZiBpbgorICogYW4gUkNVLWJoIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgSW4gYWJzZW5jZSBvZiBDT05GSUdfUFJPVkVfTE9DS0lORywKKyAqIHRoaXMgYXNzdW1lcyB3ZSBhcmUgaW4gYW4gUkNVLWJoIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIHVubGVzcyBpdCBjYW4KKyAqIHByb3ZlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmN1X3JlYWRfbG9ja19iaF9oZWxkKHZvaWQpCit7CisJaWYgKGRlYnVnX2xvY2tzKQorCQlyZXR1cm4gbG9ja19pc19oZWxkKCZyY3VfYmhfbG9ja19tYXApOworCXJldHVybiAxOworfQorCisvKioKKyAqIHJjdV9yZWFkX2xvY2tfc2NoZWRfaGVsZCAtIG1pZ2h0IHdlIGJlIGluIFJDVS1zY2hlZCByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbj8KKyAqCisgKiBJZiBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBzZWxlY3RlZCBhbmQgZW5hYmxlZCwgcmV0dXJucyBub256ZXJvIGlmZiBpbiBhbgorICogUkNVLXNjaGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgSW4gYWJzZW5jZSBvZiBDT05GSUdfUFJPVkVfTE9DS0lORywKKyAqIHRoaXMgYXNzdW1lcyB3ZSBhcmUgaW4gYW4gUkNVLXNjaGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIHVubGVzcyBpdAorICogY2FuIHByb3ZlIG90aGVyd2lzZS4gIE5vdGUgdGhhdCBkaXNhYmxpbmcgb2YgcHJlZW1wdGlvbiAoaW5jbHVkaW5nCisgKiBkaXNhYmxpbmcgaXJxcykgY291bnRzIGFzIGFuIFJDVS1zY2hlZCByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKHZvaWQpCit7CisJaW50IGxvY2tkZXBfb3BpbmlvbiA9IDA7CisKKwlpZiAoZGVidWdfbG9ja3MpCisJCWxvY2tkZXBfb3BpbmlvbiA9IGxvY2tfaXNfaGVsZCgmcmN1X3NjaGVkX2xvY2tfbWFwKTsKKwlyZXR1cm4gbG9ja2RlcF9vcGluaW9uIHx8IHByZWVtcHRfY291bnQoKSAhPSAwIHx8ICFyY3Vfc2NoZWR1bGVyX2FjdGl2ZTsKK30KKworI2Vsc2UgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKKyMgZGVmaW5lIHJjdV9yZWFkX2FjcXVpcmUoKQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZSgpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSByY3VfcmVhZF9hY3F1aXJlX2JoKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2VfYmgoKQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZV9zY2hlZCgpCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2Vfc2NoZWQoKQlkbyB7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgaW50IHJjdV9yZWFkX2xvY2tfaGVsZCh2b2lkKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCByY3VfcmVhZF9sb2NrX2JoX2hlbGQodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKHZvaWQpCit7CisJcmV0dXJuIHByZWVtcHRfY291bnQoKSAhPSAwIHx8ICFyY3Vfc2NoZWR1bGVyX2FjdGl2ZTsKK30KKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworCisjaWZkZWYgQ09ORklHX1BST1ZFX1JDVQorCisvKioKKyAqIHJjdV9kZXJlZmVyZW5jZV9jaGVjayAtIHJjdV9kZXJlZmVyZW5jZSB3aXRoIGRlYnVnIGNoZWNraW5nCisgKgorICogRG8gYW4gcmN1X2RlcmVmZXJlbmNlKCksIGJ1dCBjaGVjayB0aGF0IHRoZSBjb250ZXh0IGlzIGNvcnJlY3QuCisgKiBGb3IgZXhhbXBsZSwgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGdwLCByY3VfcmVhZF9sb2NrX2hlbGQoKSkgdG8KKyAqIGVuc3VyZSB0aGF0IHRoZSByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSBleGVjdXRlcyB3aXRoaW4gYW4gUkNVCisgKiByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY2hlY2sgZm9yCisgKiBsb2NrcyBiZWluZyBoZWxkLCBmb3IgZXhhbXBsZSwgYnkgdXNpbmcgbG9ja2RlcF9pc19oZWxkKCkuCisgKi8KKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIGMpIFwKKwkoeyBcCisJCWlmIChkZWJ1Z19sb2NrcyAmJiAhKGMpKSBcCisJCQlsb2NrZGVwX3JjdV9kZXJlZmVyZW5jZShfX0ZJTEVfXywgX19MSU5FX18pOyBcCisJCXJjdV9kZXJlZmVyZW5jZV9yYXcocCk7IFwKKwl9KQorCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BST1ZFX1JDVSAqLworCisjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhwLCBjKQlyY3VfZGVyZWZlcmVuY2VfcmF3KHApCisKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1BST1ZFX1JDVSAqLwogCiAvKioKICAqIHJjdV9yZWFkX2xvY2sgLSBtYXJrIHRoZSBiZWdpbm5pbmcgb2YgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgpAQCAtMTYwLDcgKzI2OCw3IEBACiB7CiAJX19yY3VfcmVhZF9sb2NrX2JoKCk7CiAJX19hY3F1aXJlKFJDVV9CSCk7Ci0JcmN1X3JlYWRfYWNxdWlyZSgpOworCXJjdV9yZWFkX2FjcXVpcmVfYmgoKTsKIH0KIAogLyoKQEAgLTE3MCw3ICsyNzgsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcmN1X3JlYWRfdW5sb2NrX2JoKHZvaWQpCiB7Ci0JcmN1X3JlYWRfcmVsZWFzZSgpOworCXJjdV9yZWFkX3JlbGVhc2VfYmgoKTsKIAlfX3JlbGVhc2UoUkNVX0JIKTsKIAlfX3JjdV9yZWFkX3VubG9ja19iaCgpOwogfQpAQCAtMTg4LDcgKzI5Niw3IEBACiB7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJX19hY3F1aXJlKFJDVV9TQ0hFRCk7Ci0JcmN1X3JlYWRfYWNxdWlyZSgpOworCXJjdV9yZWFkX2FjcXVpcmVfc2NoZWQoKTsKIH0KIAogLyogVXNlZCBieSBsb2NrZGVwIGFuZCB0cmFjaW5nOiBjYW5ub3QgYmUgdHJhY2VkLCBjYW5ub3QgY2FsbCBsb2NrZGVwLiAqLwpAQCAtMjA1LDcgKzMxMyw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCByY3VfcmVhZF91bmxvY2tfc2NoZWQodm9pZCkKIHsKLQlyY3VfcmVhZF9yZWxlYXNlKCk7CisJcmN1X3JlYWRfcmVsZWFzZV9zY2hlZCgpOwogCV9fcmVsZWFzZShSQ1VfU0NIRUQpOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CkBAIC0yMTksMjIgKzMyNyw0OSBAQAogCiAKIC8qKgotICogcmN1X2RlcmVmZXJlbmNlIC0gZmV0Y2ggYW4gUkNVLXByb3RlY3RlZCBwb2ludGVyIGluIGFuCi0gKiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBUaGlzIHBvaW50ZXIgbWF5IGxhdGVyCi0gKiBiZSBzYWZlbHkgZGVyZWZlcmVuY2VkLgorICogcmN1X2RlcmVmZXJlbmNlX3JhdyAtIGZldGNoIGFuIFJDVS1wcm90ZWN0ZWQgcG9pbnRlcgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBiZSB3aXRoaW4gc29tZSBmbGF2b3Igb2YgUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorICogc2VjdGlvbiwgb3IgbXVzdCBiZSBvdGhlcndpc2UgcHJldmVudGluZyB0aGUgcG9pbnRlciBmcm9tIGNoYW5naW5nLAorICogZm9yIGV4YW1wbGUsIGJ5IGhvbGRpbmcgYW4gYXBwcm9wcmlhdGUgbG9jay4gIFRoaXMgcG9pbnRlciBtYXkgbGF0ZXIKKyAqIGJlIHNhZmVseSBkZXJlZmVyZW5jZWQuICBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gaGF2ZQorICogZG9uZSB0aGUgcmlnaHQgdGhpbmcsIGFzIHRoaXMgcHJpbWl0aXZlIGRvZXMgbm8gY2hlY2tpbmcgb2YgYW55IGtpbmQuCiAgKgogICogSW5zZXJ0cyBtZW1vcnkgYmFycmllcnMgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IHJlcXVpcmUgdGhlbQogICogKGN1cnJlbnRseSBvbmx5IHRoZSBBbHBoYSksIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgZG9jdW1lbnRzCiAgKiBleGFjdGx5IHdoaWNoIHBvaW50ZXJzIGFyZSBwcm90ZWN0ZWQgYnkgUkNVLgogICovCi0KLSNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlKHApICAgICAoeyBcCisjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9yYXcocCkJKHsgXAogCQkJCXR5cGVvZihwKSBfX19fX19fX19wMSA9IEFDQ0VTU19PTkNFKHApOyBcCiAJCQkJc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCk7IFwKIAkJCQkoX19fX19fX19fcDEpOyBcCiAJCQkJfSkKIAogLyoqCisgKiByY3VfZGVyZWZlcmVuY2UgLSBmZXRjaCBhbiBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIsIGNoZWNraW5nIGZvciBSQ1UKKyAqCisgKiBNYWtlcyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSBkbyB0aGUgZGlydHkgd29yay4KKyAqLworI2RlZmluZSByY3VfZGVyZWZlcmVuY2UocCkgXAorCXJjdV9kZXJlZmVyZW5jZV9jaGVjayhwLCByY3VfcmVhZF9sb2NrX2hlbGQoKSkKKworLyoqCisgKiByY3VfZGVyZWZlcmVuY2VfYmggLSBmZXRjaCBhbiBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIsIGNoZWNraW5nIGZvciBSQ1UtYmgKKyAqCisgKiBNYWtlcyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSBkbyB0aGUgZGlydHkgd29yay4KKyAqLworI2RlZmluZSByY3VfZGVyZWZlcmVuY2VfYmgocCkgXAorCQlyY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgcmN1X3JlYWRfbG9ja19iaF9oZWxkKCkpCisKKy8qKgorICogcmN1X2RlcmVmZXJlbmNlX3NjaGVkIC0gZmV0Y2ggUkNVLXByb3RlY3RlZCBwb2ludGVyLCBjaGVja2luZyBmb3IgUkNVLXNjaGVkCisgKgorICogTWFrZXMgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKCkgZG8gdGhlIGRpcnR5IHdvcmsuCisgKi8KKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX3NjaGVkKHApIFwKKwkJcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIHJjdV9yZWFkX2xvY2tfc2NoZWRfaGVsZCgpKQorCisvKioKICAqIHJjdV9hc3NpZ25fcG9pbnRlciAtIGFzc2lnbiAocHVibGljaXplKSBhIHBvaW50ZXIgdG8gYSBuZXdseQogICogaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHRoYXQgd2lsbCBiZSBkZXJlZmVyZW5jZWQgYnkgUkNVIHJlYWQtc2lkZQogICogY3JpdGljYWwgc2VjdGlvbnMuICBSZXR1cm5zIHRoZSB2YWx1ZSBhc3NpZ25lZC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dGlueS5oIGIvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKaW5kZXggOTZjYzMwNy4uYTUxOTU4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKQEAgLTYyLDYgKzYyLDE4IEBACiAKIGV4dGVybiBpbnQgcmN1X2V4cGVkaXRlZF90b3J0dXJlX3N0YXRzKGNoYXIgKnBhZ2UpOwogCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X2JoX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X3NjaGVkX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKQoreworfQorCiAjZGVmaW5lIHN5bmNocm9uaXplX3JjdSBzeW5jaHJvbml6ZV9zY2hlZAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCh2b2lkKQpAQCAtOTMsMTAgKzEwNSw2IEBACiAKICNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX05PX0haICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpCi17Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBleGl0X3JjdSh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAppbmRleCA4MDQ0YjFiLi40MmNjM2EwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaApAQCAtMzUsNyArMzUsNiBAQAogZXh0ZXJuIHZvaWQgcmN1X3NjaGVkX3FzKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgcmN1X2JoX3FzKGludCBjcHUpOwogZXh0ZXJuIGludCByY3VfbmVlZHNfY3B1KGludCBjcHUpOwotZXh0ZXJuIHZvaWQgcmN1X3NjaGVkdWxlcl9zdGFydGluZyh2b2lkKTsKIGV4dGVybiBpbnQgcmN1X2V4cGVkaXRlZF90b3J0dXJlX3N0YXRzKGNoYXIgKnBhZ2UpOwogCiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKQEAgLTk5LDYgKzk4LDkgQEAKIGV4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKTsKIGV4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9iaCh2b2lkKTsKIGV4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9zY2hlZCh2b2lkKTsKK2V4dGVybiB2b2lkIHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCk7CitleHRlcm4gdm9pZCByY3VfYmhfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpOworZXh0ZXJuIHZvaWQgcmN1X3NjaGVkX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19OT19IWgogdm9pZCByY3VfZW50ZXJfbm9oeih2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVzdW1lLXRyYWNlLmggYi9pbmNsdWRlL2xpbnV4L3Jlc3VtZS10cmFjZS5oCmluZGV4IGM5YmEyZmQuLmJjOGMzODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVzdW1lLXRyYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZXN1bWUtdHJhY2UuaApAQCAtNiw2ICs2LDExIEBACiAKIGV4dGVybiBpbnQgcG1fdHJhY2VfZW5hYmxlZDsKIAorc3RhdGljIGlubGluZSBpbnQgcG1fdHJhY2VfaXNfZW5hYmxlZCh2b2lkKQoreworICAgICAgIHJldHVybiBwbV90cmFjZV9lbmFibGVkOworfQorCiBzdHJ1Y3QgZGV2aWNlOwogZXh0ZXJuIHZvaWQgc2V0X3RyYWNlX2RldmljZShzdHJ1Y3QgZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgZ2VuZXJhdGVfcmVzdW1lX3RyYWNlKGNvbnN0IHZvaWQgKnRyYWNlZGF0YSwgdW5zaWduZWQgaW50IHVzZXIpOwpAQCAtMTcsNiArMjIsOCBAQAogCiAjZWxzZQogCitzdGF0aWMgaW5saW5lIGludCBwbV90cmFjZV9pc19lbmFibGVkKHZvaWQpIHsgcmV0dXJuIDA7IH0KKwogI2RlZmluZSBUUkFDRV9ERVZJQ0UoZGV2KSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFRSQUNFX1JFU1VNRShkZXYpIGRvIHsgfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKaW5kZXggMDUzMzBmYy4uNWM1MmZhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCkBAIC03MzUsNiArNzM1LDkgQEAKIGV4dGVybiB2b2lkIHJ0bmxfdW5sb2NrKHZvaWQpOwogZXh0ZXJuIGludCBydG5sX3RyeWxvY2sodm9pZCk7CiBleHRlcm4gaW50IHJ0bmxfaXNfbG9ja2VkKHZvaWQpOworI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCitleHRlcm4gaW50IGxvY2tkZXBfcnRubF9pc19oZWxkKHZvaWQpOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORyAqLwogCiBleHRlcm4gdm9pZCBydG5ldGxpbmtfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIF9fcnRubF91bmxvY2sodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggYWJkZmFjYy4uNGIxNzUzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtOTcsNyArOTcsNyBAQAogc3RydWN0IGV4ZWNfZG9tYWluOwogc3RydWN0IGZ1dGV4X3BpX3N0YXRlOwogc3RydWN0IHJvYnVzdF9saXN0X2hlYWQ7Ci1zdHJ1Y3QgYmlvOworc3RydWN0IGJpb19saXN0Owogc3RydWN0IGZzX3N0cnVjdDsKIHN0cnVjdCBidHNfY29udGV4dDsKIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQ7CkBAIC0zMTAsNiArMzEwLDcgQEAKICNpZmRlZiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAKIGV4dGVybiB2b2lkIHNvZnRsb2NrdXBfdGljayh2b2lkKTsKIGV4dGVybiB2b2lkIHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2codm9pZCk7CitleHRlcm4gdm9pZCB0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nX3N5bmModm9pZCk7CiBleHRlcm4gdm9pZCB0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3Modm9pZCk7CiBleHRlcm4gaW50IHByb2NfZG9zb2Z0bG9ja3VwX3RocmVzaChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogCQkJCSAgICB2b2lkIF9fdXNlciAqYnVmZmVyLApAQCAtMzIzLDYgKzMyNCw5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZyh2b2lkKQogewogfQorc3RhdGljIGlubGluZSB2b2lkIHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2dfc3luYyh2b2lkKQoreworfQogc3RhdGljIGlubGluZSB2b2lkIHRvdWNoX2FsbF9zb2Z0bG9ja3VwX3dhdGNoZG9ncyh2b2lkKQogewogfQpAQCAtNzM2LDE0ICs3NDAsNiBAQAogCXVpZF90IHVpZDsKIAlzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7CiAKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCXN0cnVjdCB0YXNrX2dyb3VwICp0ZzsKLSNpZmRlZiBDT05GSUdfU1lTRlMKLQlzdHJ1Y3Qga29iamVjdCBrb2JqOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKLSNlbmRpZgotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAlhdG9taWNfbG9uZ190IGxvY2tlZF92bTsKICNlbmRpZgpAQCAtODc0LDcgKzg3MCwxMCBAQAogCWlmIChzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncykKIAkJcmV0dXJuIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFOwogCi0JcmV0dXJuIFNEX1BSRUZFUl9TSUJMSU5HOworCWlmICghc2NoZWRfbWNfcG93ZXJfc2F2aW5ncykKKwkJcmV0dXJuIFNEX1BSRUZFUl9TSUJMSU5HOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNkX2JhbGFuY2VfZm9yX3BhY2thZ2VfcG93ZXIodm9pZCkKQEAgLTEwODAsNyArMTA3OSw4IEBACiBzdHJ1Y3Qgc2NoZWRfY2xhc3MgewogCWNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqbmV4dDsKIAotCXZvaWQgKCplbnF1ZXVlX3Rhc2spIChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXApOworCXZvaWQgKCplbnF1ZXVlX3Rhc2spIChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXAsCisJCQkgICAgICBib29sIGhlYWQpOwogCXZvaWQgKCpkZXF1ZXVlX3Rhc2spIChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzbGVlcCk7CiAJdm9pZCAoKnlpZWxkX3Rhc2spIChzdHJ1Y3QgcnEgKnJxKTsKIApAQCAtMTA5MiwxNCArMTA5Miw2IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCWludCAgKCpzZWxlY3RfdGFza19ycSkoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc2RfZmxhZywgaW50IGZsYWdzKTsKIAotCXVuc2lnbmVkIGxvbmcgKCpsb2FkX2JhbGFuY2UpIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwKLQkJCXN0cnVjdCBycSAqYnVzaWVzdCwgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLAotCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkJaW50ICphbGxfcGlubmVkLCBpbnQgKnRoaXNfYmVzdF9wcmlvKTsKLQotCWludCAoKm1vdmVfb25lX3Rhc2spIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwKLQkJCSAgICAgIHN0cnVjdCBycSAqYnVzaWVzdCwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCi0JCQkgICAgICBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSk7CiAJdm9pZCAoKnByZV9zY2hlZHVsZSkgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIAl2b2lkICgqcG9zdF9zY2hlZHVsZSkgKHN0cnVjdCBycSAqdGhpc19ycSk7CiAJdm9pZCAoKnRhc2tfd2FraW5nKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwpAQCAtMTQ2Miw3ICsxNDU0LDcgQEAKIAl2b2lkICpqb3VybmFsX2luZm87CiAKIC8qIHN0YWNrZWQgYmxvY2sgZGV2aWNlIGluZm8gKi8KLQlzdHJ1Y3QgYmlvICpiaW9fbGlzdCwgKipiaW9fdGFpbDsKKwlzdHJ1Y3QgYmlvX2xpc3QgKmJpb19saXN0OwogCiAvKiBWTSBzdGF0ZSAqLwogCXN0cnVjdCByZWNsYWltX3N0YXRlICpyZWNsYWltX3N0YXRlOwpAQCAtMjUxMywxMyArMjUwNSw5IEBACiAKIGV4dGVybiB2b2lkIG5vcm1hbGl6ZV9ydF90YXNrcyh2b2lkKTsKIAotI2lmZGVmIENPTkZJR19HUk9VUF9TQ0hFRAorI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIAogZXh0ZXJuIHN0cnVjdCB0YXNrX2dyb3VwIGluaXRfdGFza19ncm91cDsKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotZXh0ZXJuIHN0cnVjdCB0YXNrX2dyb3VwIHJvb3RfdGFza19ncm91cDsKLWV4dGVybiB2b2lkIHNldF90Z191aWQoc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKTsKLSNlbmRpZgogCiBleHRlcm4gc3RydWN0IHRhc2tfZ3JvdXAgKnNjaGVkX2NyZWF0ZV9ncm91cChzdHJ1Y3QgdGFza19ncm91cCAqcGFyZW50KTsKIGV4dGVybiB2b2lkIHNjaGVkX2Rlc3Ryb3lfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaW8uaCBiL2luY2x1ZGUvbGludXgvc2VyaW8uaAppbmRleCA4MTNkMjZjLi42NGI0NzMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpby5oCkBAIC0zMCw3ICszMCw2IEBACiAJY2hhciBwaHlzWzMyXTsKIAogCWJvb2wgbWFudWFsX2JpbmQ7Ci0JYm9vbCByZWdpc3RlcmVkOwkvKiBwb3J0IGhhcyBiZWVuIGZ1bGx5IHJlZ2lzdGVyZWQgd2l0aCBkcml2ZXIgY29yZSAqLwogCiAJc3RydWN0IHNlcmlvX2RldmljZV9pZCBpZDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaF9pbnRjLmggYi9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaAppbmRleCA0ZWYyNDZmLi41MWQyODhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaApAQCAtNDUsNyArNDUsNyBAQAogI2RlZmluZSBJTlRDX1NNUChzdHJpZGUsIG5yKQogI2VuZGlmCiAKLXN0cnVjdCBpbnRjX2Rlc2Mgeworc3RydWN0IGludGNfaHdfZGVzYyB7CiAJc3RydWN0IGludGNfdmVjdCAqdmVjdG9yczsKIAl1bnNpZ25lZCBpbnQgbnJfdmVjdG9yczsKIAlzdHJ1Y3QgaW50Y19ncm91cCAqZ3JvdXBzOwpAQCAtNTYsMjkgKzU2LDQwIEBACiAJdW5zaWduZWQgaW50IG5yX3ByaW9fcmVnczsKIAlzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgKnNlbnNlX3JlZ3M7CiAJdW5zaWduZWQgaW50IG5yX3NlbnNlX3JlZ3M7Ci0JY2hhciAqbmFtZTsKIAlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqYWNrX3JlZ3M7CiAJdW5zaWduZWQgaW50IG5yX2Fja19yZWdzOwogfTsKIAogI2RlZmluZSBfSU5UQ19BUlJBWShhKSBhLCBzaXplb2YoYSkvc2l6ZW9mKCphKQorI2RlZmluZSBJTlRDX0hXX0RFU0ModmVjdG9ycywgZ3JvdXBzLCBtYXNrX3JlZ3MsCVwKKwkJICAgICBwcmlvX3JlZ3MsCXNlbnNlX3JlZ3MsIGFja19yZWdzKQlcCit7CQkJCQkJCVwKKwlfSU5UQ19BUlJBWSh2ZWN0b3JzKSwgX0lOVENfQVJSQVkoZ3JvdXBzKSwJXAorCV9JTlRDX0FSUkFZKG1hc2tfcmVncyksIF9JTlRDX0FSUkFZKHByaW9fcmVncyksCVwKKwlfSU5UQ19BUlJBWShzZW5zZV9yZWdzKSwgX0lOVENfQVJSQVkoYWNrX3JlZ3MpLAlcCit9CisKK3N0cnVjdCBpbnRjX2Rlc2MgeworCWNoYXIgKm5hbWU7CisJaW50Y19lbnVtIGZvcmNlX2VuYWJsZTsKKwlpbnRjX2VudW0gZm9yY2VfZGlzYWJsZTsKKwlzdHJ1Y3QgaW50Y19od19kZXNjIGh3OworfTsKKwogI2RlZmluZSBERUNMQVJFX0lOVENfREVTQyhzeW1ib2wsIGNoaXBuYW1lLCB2ZWN0b3JzLCBncm91cHMsCQlcCiAJbWFza19yZWdzLCBwcmlvX3JlZ3MsIHNlbnNlX3JlZ3MpCQkJCVwKIHN0cnVjdCBpbnRjX2Rlc2Mgc3ltYm9sIF9faW5pdGRhdGEgPSB7CQkJCQlcCi0JX0lOVENfQVJSQVkodmVjdG9ycyksIF9JTlRDX0FSUkFZKGdyb3VwcyksCQkJXAotCV9JTlRDX0FSUkFZKG1hc2tfcmVncyksIF9JTlRDX0FSUkFZKHByaW9fcmVncyksCQkJXAotCV9JTlRDX0FSUkFZKHNlbnNlX3JlZ3MpLAkJCQkJXAotCWNoaXBuYW1lLAkJCQkJCQlcCisJLm5hbWUgPSBjaGlwbmFtZSwJCQkJCQlcCisJLmh3ID0gSU5UQ19IV19ERVNDKHZlY3RvcnMsIGdyb3VwcywgbWFza19yZWdzLAkJCVwKKwkJCSAgIHByaW9fcmVncywgc2Vuc2VfcmVncywgTlVMTCksCQlcCiB9CiAKICNkZWZpbmUgREVDTEFSRV9JTlRDX0RFU0NfQUNLKHN5bWJvbCwgY2hpcG5hbWUsIHZlY3RvcnMsIGdyb3VwcywJXAogCW1hc2tfcmVncywgcHJpb19yZWdzLCBzZW5zZV9yZWdzLCBhY2tfcmVncykJCQlcCiBzdHJ1Y3QgaW50Y19kZXNjIHN5bWJvbCBfX2luaXRkYXRhID0gewkJCQkJXAotCV9JTlRDX0FSUkFZKHZlY3RvcnMpLCBfSU5UQ19BUlJBWShncm91cHMpLAkJCVwKLQlfSU5UQ19BUlJBWShtYXNrX3JlZ3MpLCBfSU5UQ19BUlJBWShwcmlvX3JlZ3MpLAkJCVwKLQlfSU5UQ19BUlJBWShzZW5zZV9yZWdzKSwJCQkJCVwKLQljaGlwbmFtZSwJCQkJCQkJXAotCV9JTlRDX0FSUkFZKGFja19yZWdzKSwJCQkJCQlcCisJLm5hbWUgPSBjaGlwbmFtZSwJCQkJCQlcCisJLmh3ID0gSU5UQ19IV19ERVNDKHZlY3RvcnMsIGdyb3VwcywgbWFza19yZWdzLAkJCVwKKwkJCSAgIHByaW9fcmVncywgc2Vuc2VfcmVncywgYWNrX3JlZ3MpLAkJXAogfQogCiB2b2lkIF9faW5pdCByZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoc3RydWN0IGludGNfZGVzYyAqZGVzYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9kd19zcGkuaCBiL2luY2x1ZGUvbGludXgvc3BpL2R3X3NwaS5oCmluZGV4IDUxYjNlNzcuLmNjODEzZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL2R3X3NwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL2R3X3NwaS5oCkBAIC05MCw2ICs5MCw3IEBACiAJdW5zaWduZWQgbG9uZwkJcGFkZHI7CiAJdTMyCQkJaW9sZW47CiAJaW50CQkJaXJxOworCXUzMgkJCWZpZm9fbGVuOwkvKiBkZXB0aCBvZiB0aGUgRklGTyBidWZmZXIgKi8KIAl1MzIJCQltYXhfZnJlcTsJLyogbWF4IGJ1cyBmcmVxIHN1cHBvcnRlZCAqLwogCiAJdTE2CQkJYnVzX251bTsKQEAgLTE3MSw2ICsxNzIsMTAgQEAKIHsKIAlpZiAoY3MgPiBkd3MtPm51bV9jcykKIAkJcmV0dXJuOworCisJaWYgKGR3cy0+Y3NfY29udHJvbCkKKwkJZHdzLT5jc19jb250cm9sKDEpOworCiAJZHdfd3JpdGVsKGR3cywgc2VyLCAxIDw8IGNzKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1LmggYi9pbmNsdWRlL2xpbnV4L3NyY3UuaAppbmRleCA0NzY1ZDk3Li4zMDg0ZjgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NyY3UuaApAQCAtMzUsNiArMzUsOSBAQAogCWludCBjb21wbGV0ZWQ7CiAJc3RydWN0IHNyY3Vfc3RydWN0X2FycmF5ICpwZXJfY3B1X3JlZjsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKwlzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KIH07CiAKICNpZm5kZWYgQ09ORklHX1BSRUVNUFQKQEAgLTQzLDEyICs0NiwxMDAgQEAKICNkZWZpbmUgc3JjdV9iYXJyaWVyKCkKICNlbmRpZiAvKiAjZWxzZSAjaWZuZGVmIENPTkZJR19QUkVFTVBUICovCiAKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCitpbnQgX19pbml0X3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3AsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7CisKKyNkZWZpbmUgaW5pdF9zcmN1X3N0cnVjdChzcCkgXAorKHsgXAorCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19zcmN1X2tleTsgXAorCVwKKwlfX2luaXRfc3JjdV9zdHJ1Y3QoKHNwKSwgI3NwLCAmX19zcmN1X2tleSk7IFwKK30pCisKKyMgZGVmaW5lIHNyY3VfcmVhZF9hY3F1aXJlKHNwKSBcCisJCWxvY2tfYWNxdWlyZSgmKHNwKS0+ZGVwX21hcCwgMCwgMCwgMiwgMSwgTlVMTCwgX1RISVNfSVBfKQorIyBkZWZpbmUgc3JjdV9yZWFkX3JlbGVhc2Uoc3ApIFwKKwkJbG9ja19yZWxlYXNlKCYoc3ApLT5kZXBfbWFwLCAxLCBfVEhJU19JUF8pCisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworCiBpbnQgaW5pdF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKTsKKworIyBkZWZpbmUgc3JjdV9yZWFkX2FjcXVpcmUoc3ApICBkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBzcmN1X3JlYWRfcmVsZWFzZShzcCkgIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworCiB2b2lkIGNsZWFudXBfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCk7Ci1pbnQgc3JjdV9yZWFkX2xvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkgX19hY3F1aXJlcyhzcCk7Ci12b2lkIHNyY3VfcmVhZF91bmxvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgaW50IGlkeCkgX19yZWxlYXNlcyhzcCk7CitpbnQgX19zcmN1X3JlYWRfbG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKSBfX2FjcXVpcmVzKHNwKTsKK3ZvaWQgX19zcmN1X3JlYWRfdW5sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3AsIGludCBpZHgpIF9fcmVsZWFzZXMoc3ApOwogdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApOwogdm9pZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKTsKIGxvbmcgc3JjdV9iYXRjaGVzX2NvbXBsZXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKTsKIAorI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisKKy8qKgorICogc3JjdV9yZWFkX2xvY2tfaGVsZCAtIG1pZ2h0IHdlIGJlIGluIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24/CisgKgorICogSWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgc2VsZWN0ZWQgYW5kIGVuYWJsZWQsIHJldHVybnMgbm9uemVybyBpZmYgaW4KKyAqIGFuIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBJbiBhYnNlbmNlIG9mIENPTkZJR19QUk9WRV9MT0NLSU5HLAorICogdGhpcyBhc3N1bWVzIHdlIGFyZSBpbiBhbiBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIHVubGVzcyBpdCBjYW4KKyAqIHByb3ZlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc3JjdV9yZWFkX2xvY2tfaGVsZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKQoreworCWlmIChkZWJ1Z19sb2NrcykKKwkJcmV0dXJuIGxvY2tfaXNfaGVsZCgmc3AtPmRlcF9tYXApOworCXJldHVybiAxOworfQorCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KKworc3RhdGljIGlubGluZSBpbnQgc3JjdV9yZWFkX2xvY2tfaGVsZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKQoreworCXJldHVybiAxOworfQorCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKKy8qKgorICogc3JjdV9kZXJlZmVyZW5jZSAtIGZldGNoIFNSQ1UtcHJvdGVjdGVkIHBvaW50ZXIgd2l0aCBjaGVja2luZworICoKKyAqIE1ha2VzIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIGRvIHRoZSBkaXJ0eSB3b3JrLgorICovCisjZGVmaW5lIHNyY3VfZGVyZWZlcmVuY2UocCwgc3ApIFwKKwkJcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIHNyY3VfcmVhZF9sb2NrX2hlbGQoc3ApKQorCisvKioKKyAqIHNyY3VfcmVhZF9sb2NrIC0gcmVnaXN0ZXIgYSBuZXcgcmVhZGVyIGZvciBhbiBTUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmUuCisgKiBAc3A6IHNyY3Vfc3RydWN0IGluIHdoaWNoIHRvIHJlZ2lzdGVyIHRoZSBuZXcgcmVhZGVyLgorICoKKyAqIEVudGVyIGFuIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBOb3RlIHRoYXQgU1JDVSByZWFkLXNpZGUKKyAqIGNyaXRpY2FsIHNlY3Rpb25zIG1heSBiZSBuZXN0ZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNyY3VfcmVhZF9sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApIF9fYWNxdWlyZXMoc3ApCit7CisJaW50IHJldHZhbCA9IF9fc3JjdV9yZWFkX2xvY2soc3ApOworCisJc3JjdV9yZWFkX2FjcXVpcmUoc3ApOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogc3JjdV9yZWFkX3VubG9jayAtIHVucmVnaXN0ZXIgYSBvbGQgcmVhZGVyIGZyb20gYW4gU1JDVS1wcm90ZWN0ZWQgc3RydWN0dXJlLgorICogQHNwOiBzcmN1X3N0cnVjdCBpbiB3aGljaCB0byB1bnJlZ2lzdGVyIHRoZSBvbGQgcmVhZGVyLgorICogQGlkeDogcmV0dXJuIHZhbHVlIGZyb20gY29ycmVzcG9uZGluZyBzcmN1X3JlYWRfbG9jaygpLgorICoKKyAqIEV4aXQgYW4gU1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNyY3VfcmVhZF91bmxvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgaW50IGlkeCkKKwlfX3JlbGVhc2VzKHNwKQoreworCXNyY3VfcmVhZF9yZWxlYXNlKHNwKTsKKwlfX3NyY3VfcmVhZF91bmxvY2soc3AsIGlkeCk7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IDIwNzQ2NmEuLjgxMjZmMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTk5LDcgKzk5LDcgQEAKICNkZWZpbmUgX19TQ19URVNUNSh0NSwgYTUsIC4uLikJX19TQ19URVNUKHQ1KTsgX19TQ19URVNUNChfX1ZBX0FSR1NfXykKICNkZWZpbmUgX19TQ19URVNUNih0NiwgYTYsIC4uLikJX19TQ19URVNUKHQ2KTsgX19TQ19URVNUNShfX1ZBX0FSR1NfXykKIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAKICNkZWZpbmUgVFJBQ0VfU1lTX0VOVEVSX1BST0ZJTEVfSU5JVChzbmFtZSkJCQkJICAgICAgIFwKIAkucHJvZmlsZV9lbmFibGUgPSBwcm9mX3N5c2VudGVyX2VuYWJsZSwJCQkJICAgICAgIFwKQEAgLTExMyw3ICsxMTMsNyBAQAogI2RlZmluZSBUUkFDRV9TWVNfRU5URVJfUFJPRklMRV9JTklUKHNuYW1lKQogI2RlZmluZSBUUkFDRV9TWVNfRVhJVF9QUk9GSUxFKHNuYW1lKQogI2RlZmluZSBUUkFDRV9TWVNfRVhJVF9QUk9GSUxFX0lOSVQoc25hbWUpCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KIAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKICNkZWZpbmUgX19TQ19TVFJfQURFQ0wxKHQsIGEpCQkjYQpAQCAtMTMyLDcgKzEzMiw4IEBACiAKICNkZWZpbmUgU1lTQ0FMTF9UUkFDRV9FTlRFUl9FVkVOVChzbmFtZSkJCQkJXAogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSBfX3N5c2NhbGxfbWV0YV8jI3NuYW1lOwlcCi0Jc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBldmVudF9lbnRlcl8jI3NuYW1lOwkJXAorCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwJCQkJCVwKKwlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpIGV2ZW50X2VudGVyXyMjc25hbWU7CQlcCiAJc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCBlbnRlcl9zeXNjYWxsX3ByaW50XyMjc25hbWUgPSB7CVwKIAkJLnRyYWNlICAgICAgICAgICAgICAgICAgPSBwcmludF9zeXNjYWxsX2VudGVyLAkJXAogCX07CQkJCQkJCQlcCkBAIC0xNDMsOCArMTQ0LDcgQEAKIAkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAic3lzX2VudGVyIiNzbmFtZSwJCVwKIAkJLnN5c3RlbSAgICAgICAgICAgICAgICAgPSAic3lzY2FsbHMiLAkJCVwKIAkJLmV2ZW50ICAgICAgICAgICAgICAgICAgPSAmZW50ZXJfc3lzY2FsbF9wcmludF8jI3NuYW1lLAlcCi0JCS5yYXdfaW5pdAkJPSB0cmFjZV9ldmVudF9yYXdfaW5pdCwJCVwKLQkJLnNob3dfZm9ybWF0CQk9IHN5c2NhbGxfZW50ZXJfZm9ybWF0LAkJXAorCQkucmF3X2luaXQJCT0gaW5pdF9zeXNjYWxsX3RyYWNlLAkJXAogCQkuZGVmaW5lX2ZpZWxkcwkJPSBzeXNjYWxsX2VudGVyX2RlZmluZV9maWVsZHMsCVwKIAkJLnJlZ2Z1bmMJCT0gcmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIsCVwKIAkJLnVucmVnZnVuYwkJPSB1bnJlZ19ldmVudF9zeXNjYWxsX2VudGVyLAlcCkBAIC0xNTQsNyArMTU0LDggQEAKIAogI2RlZmluZSBTWVNDQUxMX1RSQUNFX0VYSVRfRVZFTlQoc25hbWUpCQkJCQlcCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CVwKLQlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIGV2ZW50X2V4aXRfIyNzbmFtZTsJCVwKKwlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsCQkJCQlcCisJX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKSBldmVudF9leGl0XyMjc25hbWU7CQlcCiAJc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCBleGl0X3N5c2NhbGxfcHJpbnRfIyNzbmFtZSA9IHsJXAogCQkudHJhY2UgICAgICAgICAgICAgICAgICA9IHByaW50X3N5c2NhbGxfZXhpdCwJCVwKIAl9OwkJCQkJCQkJXApAQCAtMTY1LDggKzE2Niw3IEBACiAJCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInN5c19leGl0IiNzbmFtZSwJCVwKIAkJLnN5c3RlbSAgICAgICAgICAgICAgICAgPSAic3lzY2FsbHMiLAkJCVwKIAkJLmV2ZW50ICAgICAgICAgICAgICAgICAgPSAmZXhpdF9zeXNjYWxsX3ByaW50XyMjc25hbWUsCVwKLQkJLnJhd19pbml0CQk9IHRyYWNlX2V2ZW50X3Jhd19pbml0LAkJXAotCQkuc2hvd19mb3JtYXQJCT0gc3lzY2FsbF9leGl0X2Zvcm1hdCwJCVwKKwkJLnJhd19pbml0CQk9IGluaXRfc3lzY2FsbF90cmFjZSwJCVwKIAkJLmRlZmluZV9maWVsZHMJCT0gc3lzY2FsbF9leGl0X2RlZmluZV9maWVsZHMsCVwKIAkJLnJlZ2Z1bmMJCT0gcmVnX2V2ZW50X3N5c2NhbGxfZXhpdCwJXAogCQkudW5yZWdmdW5jCQk9IHVucmVnX2V2ZW50X3N5c2NhbGxfZXhpdCwJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1leC5oIGIvaW5jbHVkZS9saW51eC90aW1leC5oCmluZGV4IDk0ZjhmYWUuLjdhMDgyYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKQEAgLTIzOCw5ICsyMzgsNiBAQAogICogcGhhc2UtbG9jayBsb29wIHZhcmlhYmxlcwogICovCiBleHRlcm4gaW50IHRpbWVfc3RhdHVzOwkJLyogY2xvY2sgc3luY2hyb25pemF0aW9uIHN0YXR1cyBiaXRzICovCi1leHRlcm4gbG9uZyB0aW1lX21heGVycm9yOwkvKiBtYXhpbXVtIGVycm9yICovCi1leHRlcm4gbG9uZyB0aW1lX2VzdGVycm9yOwkvKiBlc3RpbWF0ZWQgZXJyb3IgKi8KLQogZXh0ZXJuIGxvbmcgdGltZV9hZGp1c3Q7CS8qIFRoZSBhbW91bnQgb2YgYWRqdGltZSBsZWZ0ICovCiAKIGV4dGVybiB2b2lkIG50cF9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKaW5kZXggZDdhY2UxYi4uMzMyZWFlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi5oCkBAIC0zMzksNiArMzM5LDcgQEAKIAogCXN0cnVjdCB1c2JfZGV2bWFwIGRldm1hcDsJLyogZGV2aWNlIGFkZHJlc3MgYWxsb2NhdGlvbiBtYXAgKi8KIAlzdHJ1Y3QgdXNiX2RldmljZSAqcm9vdF9odWI7CS8qIFJvb3QgaHViICovCisJc3RydWN0IHVzYl9idXMgKmhzX2NvbXBhbmlvbjsJLyogQ29tcGFuaW9uIEVIQ0kgYnVzLCBpZiBhbnkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGJ1c19saXN0OwkvKiBsaXN0IG9mIGJ1c3NlcyAqLwogCiAJaW50IGJhbmR3aWR0aF9hbGxvY2F0ZWQ7CS8qIG9uIHRoaXMgYnVzOiBob3cgbXVjaCBvZiB0aGUgdGltZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaCBiL2luY2x1ZGUvbGludXgvdXNiL2F1ZGlvLmgKaW5kZXggZWFmOWRmZi4uNmJiMjkzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby5oCkBAIC0yNSw2ICsyNSw5IEBACiAjZGVmaW5lIFVTQl9TVUJDTEFTU19BVURJT1NUUkVBTUlORwkweDAyCiAjZGVmaW5lIFVTQl9TVUJDTEFTU19NSURJU1RSRUFNSU5HCTB4MDMKIAorI2RlZmluZSBVQUNfVkVSU0lPTl8xCQkJMHgwMAorI2RlZmluZSBVQUNfVkVSU0lPTl8yCQkJMHgyMAorCiAvKiBBLjUgQXVkaW8gQ2xhc3MtU3BlY2lmaWMgQUMgSW50ZXJmYWNlIERlc2NyaXB0b3IgU3VidHlwZXMgKi8KICNkZWZpbmUgVUFDX0hFQURFUgkJCTB4MDEKICNkZWZpbmUgVUFDX0lOUFVUX1RFUk1JTkFMCQkweDAyCkBAIC0zMiw4ICszNSwxNyBAQAogI2RlZmluZSBVQUNfTUlYRVJfVU5JVAkJCTB4MDQKICNkZWZpbmUgVUFDX1NFTEVDVE9SX1VOSVQJCTB4MDUKICNkZWZpbmUgVUFDX0ZFQVRVUkVfVU5JVAkJMHgwNgotI2RlZmluZSBVQUNfUFJPQ0VTU0lOR19VTklUCQkweDA3Ci0jZGVmaW5lIFVBQ19FWFRFTlNJT05fVU5JVAkJMHgwOAorI2RlZmluZSBVQUNfUFJPQ0VTU0lOR19VTklUX1YxCQkweDA3CisjZGVmaW5lIFVBQ19FWFRFTlNJT05fVU5JVF9WMQkJMHgwOAorCisvKiBVQUMgdjIuMCB0eXBlcyAqLworI2RlZmluZSBVQUNfRUZGRUNUX1VOSVQJCQkweDA3CisjZGVmaW5lIFVBQ19QUk9DRVNTSU5HX1VOSVRfVjIJCTB4MDgKKyNkZWZpbmUgVUFDX0VYVEVOU0lPTl9VTklUX1YyCQkweDA5CisjZGVmaW5lIFVBQ19DTE9DS19TT1VSQ0UJCTB4MGEKKyNkZWZpbmUgVUFDX0NMT0NLX1NFTEVDVE9SCQkweDBiCisjZGVmaW5lIFVBQ19DTE9DS19NVUxUSVBMSUVSCQkweDBjCisjZGVmaW5lIFVBQ19TQU1QTEVfUkFURV9DT05WRVJURVIJMHgwZAogCiAvKiBBLjYgQXVkaW8gQ2xhc3MtU3BlY2lmaWMgQVMgSW50ZXJmYWNlIERlc2NyaXB0b3IgU3VidHlwZXMgKi8KICNkZWZpbmUgVUFDX0FTX0dFTkVSQUwJCQkweDAxCkBAIC02Niw2ICs3OCwxMCBAQAogCiAjZGVmaW5lIFVBQ19HRVRfU1RBVAkJCTB4ZmYKIAorLyogQXVkaW8gY2xhc3MgdjIuMCBoYW5kbGVzIGFsbCB0aGUgcGFyYW1ldGVyIGNhbGxzIGRpZmZlcmVudGx5ICovCisjZGVmaW5lIFVBQzJfQ1NfQ1VSCQkJMHgwMQorI2RlZmluZSBVQUMyX0NTX1JBTkdFCQkJMHgwMgorCiAvKiBNSURJIC0gQS4xIE1TIENsYXNzLVNwZWNpZmljIEludGVyZmFjZSBEZXNjcmlwdG9yIFN1YnR5cGVzICovCiAjZGVmaW5lIFVBQ19NU19IRUFERVIJCQkweDAxCiAjZGVmaW5lIFVBQ19NSURJX0lOX0pBQ0sJCTB4MDIKQEAgLTgxLDcgKzk3LDcgQEAKIAogLyogVGVybWluYWwgQ29udHJvbCBTZWxlY3RvcnMgKi8KIC8qIDQuMy4yICBDbGFzcy1TcGVjaWZpYyBBQyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLwotc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvciB7CitzdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yX3YxIHsKIAlfX3U4ICBiTGVuZ3RoOwkJCS8qIDggKyBuICovCiAJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJLyogVVNCX0RUX0NTX0lOVEVSRkFDRSAqLwogCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJLyogVUFDX01TX0hFQURFUiAqLwpAQCAtOTUsNyArMTExLDcgQEAKIAogLyogQXMgYWJvdmUsIGJ1dCBtb3JlIHVzZWZ1bCBmb3IgZGVmaW5pbmcgeW91ciBvd24gZGVzY3JpcHRvcnM6ICovCiAjZGVmaW5lIERFQ0xBUkVfVUFDX0FDX0hFQURFUl9ERVNDUklQVE9SKG4pIAkJCVwKLXN0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfIyNuIHsJCQkJXAorc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl92MV8jI24gewkJCVwKIAlfX3U4ICBiTGVuZ3RoOwkJCQkJCVwKIAlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkJCQlcCiAJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkJCQlcCkBAIC0xMzAsOCArMTQ2LDEyIEBACiAjZGVmaW5lIFVBQ19JTlBVVF9URVJNSU5BTF9NSUNST1BIT05FX0FSUkFZCQkweDIwNQogI2RlZmluZSBVQUNfSU5QVVRfVEVSTUlOQUxfUFJPQ19NSUNST1BIT05FX0FSUkFZCTB4MjA2CiAKKy8qIFRlcm1pbmFscyAtIGNvbnRyb2wgc2VsZWN0b3JzICovCisKKyNkZWZpbmUgVUFDX1RFUk1JTkFMX0NTX0NPUFlfUFJPVEVDVF9DT05UUk9MCQkweDAxCisKIC8qIDQuMy4yLjIgT3V0cHV0IFRlcm1pbmFsIERlc2NyaXB0b3IgKi8KLXN0cnVjdCB1YWNfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3Igeworc3RydWN0IHVhY19vdXRwdXRfdGVybWluYWxfZGVzY3JpcHRvcl92MSB7CiAJX191OCAgYkxlbmd0aDsJCQkvKiBpbiBieXRlczogOSAqLwogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8qIENTX0lOVEVSRkFDRSBkZXNjcmlwdG9yIHR5cGUgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIE9VVFBVVF9URVJNSU5BTCBkZXNjcmlwdG9yIHN1YnR5cGUgKi8KQEAgLTE3MSw3ICsxOTEsNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKIAogLyogNC41LjIgQ2xhc3MtU3BlY2lmaWMgQVMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KLXN0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3Igeworc3RydWN0IHVhY19hc19oZWFkZXJfZGVzY3JpcHRvcl92MSB7CiAJX191OCAgYkxlbmd0aDsJCQkvKiBpbiBieXRlczogNyAqLwogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8qIFVTQl9EVF9DU19JTlRFUkZBQ0UgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIEFTX0dFTkVSQUwgKi8KQEAgLTE4MCw2ICsyMDAsMTkgQEAKIAlfX2xlMTYgd0Zvcm1hdFRhZzsJCS8qIFRoZSBBdWRpbyBEYXRhIEZvcm1hdCAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3JfdjIgeworCV9fdTggYkxlbmd0aDsKKwlfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4IGJEZXNjcmlwdG9yU3VidHlwZTsKKwlfX3U4IGJUZXJtaW5hbExpbms7CisJX191OCBibUNvbnRyb2xzOworCV9fdTggYkZvcm1hdFR5cGU7CisJX191MzIgYm1Gb3JtYXRzOworCV9fdTggYk5yQ2hhbm5lbHM7CisJX191MzIgYm1DaGFubmVsQ29uZmlnOworCV9fdTggaUNoYW5uZWxOYW1lczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKICNkZWZpbmUgVUFDX0RUX0FTX0hFQURFUl9TSVpFCQk3CiAKIC8qIEZvcm1hdHMgLSBBLjEuMSBBdWRpbyBEYXRhIEZvcm1hdCBUeXBlIEkgQ29kZXMgKi8KQEAgLTIzMiwxMSArMjY1LDYyIEBACiAKICNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lfRElTQ1JFVEVfREVTQ19TSVpFKG4pCSg4ICsgKG4gKiAzKSkKIAorc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2V4dF9kZXNjcmlwdG9yIHsKKwlfX3U4IGJMZW5ndGg7CisJX191OCBiRGVzY3JpcHRvclR5cGU7CisJX191OCBiRGVzY3JpcHRvclN1YnR5cGU7CisJX191OCBiU3Vic2xvdFNpemU7CisJX191OCBiRm9ybWF0VHlwZTsKKwlfX3U4IGJCaXRSZXNvbHV0aW9uOworCV9fdTggYkhlYWRlckxlbmd0aDsKKwlfX3U4IGJDb250cm9sU2l6ZTsKKwlfX3U4IGJTaWRlQmFuZFByb3RvY29sOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKiBGb3JtYXRzIC0gQXVkaW8gRGF0YSBGb3JtYXQgVHlwZSBJIENvZGVzICovCisKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJX01QRUcJMHgxMDAxCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSV9BQzMJMHgxMDAyCisKK3N0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaWlfZGlzY3JldGVfZGVzY3JpcHRvciB7CisJX191OCBiTGVuZ3RoOworCV9fdTggYkRlc2NyaXB0b3JUeXBlOworCV9fdTggYkRlc2NyaXB0b3JTdWJ0eXBlOworCV9fdTggYkZvcm1hdFR5cGU7CisJX19sZTE2IHdNYXhCaXRSYXRlOworCV9fbGUxNiB3U2FtcGxlc1BlckZyYW1lOworCV9fdTggYlNhbUZyZXFUeXBlOworCV9fdTggdFNhbUZyZXFbXVszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaWlfZXh0X2Rlc2NyaXB0b3IgeworCV9fdTggYkxlbmd0aDsKKwlfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4IGJEZXNjcmlwdG9yU3VidHlwZTsKKwlfX3U4IGJGb3JtYXRUeXBlOworCV9fdTE2IHdNYXhCaXRSYXRlOworCV9fdTE2IHdTYW1wbGVzUGVyRnJhbWU7CisJX191OCBiSGVhZGVyTGVuZ3RoOworCV9fdTggYlNpZGVCYW5kUHJvdG9jb2w7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiB0eXBlIElJSSAqLworI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUlJX0lFQzE5MzdfQUMzCTB4MjAwMQorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUlJX0lFQzE5MzdfTVBFRzFfTEFZRVIxCTB4MjAwMgorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUlJX0lFQzE5MzdfTVBFRzJfTk9FWFQJMHgyMDAzCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUlfSUVDMTkzN19NUEVHMl9FWFQJMHgyMDA0CisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUlfSUVDMTkzN19NUEVHMl9MQVlFUjFfTFMJMHgyMDA1CisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUlfSUVDMTkzN19NUEVHMl9MQVlFUjIzX0xTCTB4MjAwNgorCiAvKiBGb3JtYXRzIC0gQS4yIEZvcm1hdCBUeXBlIENvZGVzICovCiAjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9VTkRFRklORUQJMHgwCiAjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JCQkweDEKICNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJCQkweDIKICNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJSQkJMHgzCisjZGVmaW5lIFVBQ19FWFRfRk9STUFUX1RZUEVfSQkJMHg4MQorI2RlZmluZSBVQUNfRVhUX0ZPUk1BVF9UWVBFX0lJCQkweDgyCisjZGVmaW5lIFVBQ19FWFRfRk9STUFUX1RZUEVfSUlJCQkweDgzCiAKIHN0cnVjdCB1YWNfaXNvX2VuZHBvaW50X2Rlc2NyaXB0b3IgewogCV9fdTggIGJMZW5ndGg7CQkJLyogaW4gYnl0ZXM6IDcgKi8KQEAgLTI1Miw3ICszMzYsMzEgQEAKICNkZWZpbmUgVUFDX0VQX0NTX0FUVFJfUElUQ0hfQ09OVFJPTAkweDAyCiAjZGVmaW5lIFVBQ19FUF9DU19BVFRSX0ZJTExfTUFYCQkweDgwCiAKKy8qIEF1ZGlvIGNsYXNzIHYyLjA6IENMT0NLX1NPVVJDRSBkZXNjcmlwdG9yICovCisKK3N0cnVjdCB1YWNfY2xvY2tfc291cmNlX2Rlc2NyaXB0b3IgeworCV9fdTggYkxlbmd0aDsKKwlfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4IGJEZXNjcmlwdG9yU3VidHlwZTsKKwlfX3U4IGJDbG9ja0lEOworCV9fdTggYm1BdHRyaWJ1dGVzOworCV9fdTggYm1Db250cm9sczsKKwlfX3U4IGJBc3NvY1Rlcm1pbmFsOworCV9fdTggaUNsb2NrU291cmNlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogLyogQS4xMC4yIEZlYXR1cmUgVW5pdCBDb250cm9sIFNlbGVjdG9ycyAqLworCitzdHJ1Y3QgdWFjX2ZlYXR1cmVfdW5pdF9kZXNjcmlwdG9yIHsKKwlfX3U4IGJMZW5ndGg7CisJX191OCBiRGVzY3JpcHRvclR5cGU7CisJX191OCBiRGVzY3JpcHRvclN1YnR5cGU7CisJX191OCBiVW5pdElEOworCV9fdTggYlNvdXJjZUlEOworCV9fdTggYkNvbnRyb2xTaXplOworCV9fdTggY29udHJvbHNbMF07IC8qIHZhcmlhYmxlIGxlbmd0aCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogI2RlZmluZSBVQUNfRlVfQ09OVFJPTF9VTkRFRklORUQJMHgwMAogI2RlZmluZSBVQUNfTVVURV9DT05UUk9MCQkweDAxCiAjZGVmaW5lIFVBQ19WT0xVTUVfQ09OVFJPTAkJMHgwMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKaW5kZXggZDQ5NjJhNy4uMzc5M2QxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCkBAIC0zNTAsNiArMzUwLDcgQEAKICNkZWZpbmUgVjRMMl9QSVhfRk1UX01QRUcgICAgIHY0bDJfZm91cmNjKCdNJywgJ1AnLCAnRScsICdHJykgLyogTVBFRy0xLzIvNCAgICAqLwogCiAvKiAgVmVuZG9yLXNwZWNpZmljIGZvcm1hdHMgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfQ1BJQTEgICAgdjRsMl9mb3VyY2MoJ0MnLCAnUCcsICdJJywgJ0EnKSAvKiBjcGlhMSBZVVYgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1dOVkEgICAgIHY0bDJfZm91cmNjKCdXJywgJ04nLCAnVicsICdBJykgLyogV2lubm92IGh3IGNvbXByZXNzICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TTjlDMTBYICB2NGwyX2ZvdXJjYygnUycsICc5JywgJzEnLCAnMCcpIC8qIFNOOUMxMHggY29tcHJlc3Npb24gKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NOOUMyMFhfSTQyMCB2NGwyX2ZvdXJjYygnUycsICc5JywgJzInLCAnMCcpIC8qIFNOOUMyMHggWVVWIDQ6MjowICovCkBAIC0zNjIsNiArMzYzLDcgQEAKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NQQ0E1NjEgIHY0bDJfZm91cmNjKCdTJywgJzUnLCAnNicsICcxJykgLyogY29tcHJlc3NlZCBHQlJHIGJheWVyICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9QQUMyMDcgICB2NGwyX2ZvdXJjYygnUCcsICcyJywgJzAnLCAnNycpIC8qIGNvbXByZXNzZWQgQkdHUiBiYXllciAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfTVI5NzMxMEEgdjRsMl9mb3VyY2MoJ00nLCAnMycsICcxJywgJzAnKSAvKiBjb21wcmVzc2VkIEJHR1IgYmF5ZXIgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NOOUMyMDI4IHY0bDJfZm91cmNjKCdTJywgJ08nLCAnTicsICdYJykgLyogY29tcHJlc3NlZCBHQlJHIGJheWVyICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUTkwNUMgICB2NGwyX2ZvdXJjYygnOScsICcwJywgJzUnLCAnQycpIC8qIGNvbXByZXNzZWQgUkdHQiBiYXllciAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfUEpQRyAgICAgdjRsMl9mb3VyY2MoJ1AnLCAnSicsICdQJywgJ0cnKSAvKiBQaXhhcnQgNzN4eCBKUEVHICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9PVjUxMSAgICB2NGwyX2ZvdXJjYygnTycsICc1JywgJzEnLCAnMScpIC8qIG92NTExIEpQRUcgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpby5oCmluZGV4IDA1N2EyZTAuLmY1MDhjNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW8uaApAQCAtNTEsNiArNTEsOSBAQAogICoJVGhpcyByZS1lbmFibGVzIGNhbGxiYWNrczsgaXQgcmV0dXJucyAiZmFsc2UiIGlmIHRoZXJlIGFyZSBwZW5kaW5nCiAgKglidWZmZXJzIGluIHRoZSBxdWV1ZSwgdG8gZGV0ZWN0IGEgcG9zc2libGUgcmFjZSBiZXR3ZWVuIHRoZSBkcml2ZXIKICAqCWNoZWNraW5nIGZvciBtb3JlIHdvcmssIGFuZCBlbmFibGluZyBjYWxsYmFja3MuCisgKiBAZGV0YWNoX3VudXNlZF9idWY6IGRldGFjaCBmaXJzdCB1bnVzZWQgYnVmZmVyCisgKiAJdnE6IHRoZSBzdHJ1Y3QgdmlydHF1ZXVlIHdlJ3JlIHRhbGtpbmcgYWJvdXQuCisgKiAJUmV0dXJucyBOVUxMIG9yIHRoZSAiZGF0YSIgdG9rZW4gaGFuZGVkIHRvIGFkZF9idWYKICAqCiAgKiBMb2NraW5nIHJ1bGVzIGFyZSBzdHJhaWdodGZvcndhcmQ6IHRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yCiAgKiBsb2NraW5nLiAgTm8gdHdvIG9wZXJhdGlvbnMgbWF5IGJlIGludm9rZWQgc2ltdWx0YW5lb3VzbHksIHdpdGggdGhlIGV4Y2VwdGlvbgpAQCAtNzEsNiArNzQsNyBAQAogCiAJdm9pZCAoKmRpc2FibGVfY2IpKHN0cnVjdCB2aXJ0cXVldWUgKnZxKTsKIAlib29sICgqZW5hYmxlX2NiKShzdHJ1Y3QgdmlydHF1ZXVlICp2cSk7CisJdm9pZCAqKCpkZXRhY2hfdW51c2VkX2J1Zikoc3RydWN0IHZpcnRxdWV1ZSAqdnEpOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKaW5kZXggMTQxOGYwNC4uYTUwZWNkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaApAQCAtNyw2ICs3LDcgQEAKIAogLyogVGhlIGZlYXR1cmUgYml0bWFwIGZvciB2aXJ0aW8gYmFsbG9vbiAqLwogI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9GX01VU1RfVEVMTF9IT1NUCTAgLyogVGVsbCBiZWZvcmUgcmVjbGFpbWluZyBwYWdlcyAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9GX1NUQVRTX1ZRCTEgLyogTWVtb3J5IFN0YXRzIHZpcnRxdWV1ZSAqLwogCiAvKiBTaXplIG9mIGEgUEZOIGluIHRoZSBiYWxsb29uIGludGVyZmFjZS4gKi8KICNkZWZpbmUgVklSVElPX0JBTExPT05fUEZOX1NISUZUIDEyCkBAIC0xOCw0ICsxOSwxOCBAQAogCS8qIE51bWJlciBvZiBwYWdlcyB3ZSd2ZSBhY3R1YWxseSBnb3QgaW4gYmFsbG9vbi4gKi8KIAlfX2xlMzIgYWN0dWFsOwogfTsKKworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9TX1NXQVBfSU4gIDAgICAvKiBBbW91bnQgb2YgbWVtb3J5IHN3YXBwZWQgaW4gKi8KKyNkZWZpbmUgVklSVElPX0JBTExPT05fU19TV0FQX09VVCAxICAgLyogQW1vdW50IG9mIG1lbW9yeSBzd2FwcGVkIG91dCAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9TX01BSkZMVCAgIDIgICAvKiBOdW1iZXIgb2YgbWFqb3IgZmF1bHRzICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfTUlORkxUICAgMyAgIC8qIE51bWJlciBvZiBtaW5vciBmYXVsdHMgKi8KKyNkZWZpbmUgVklSVElPX0JBTExPT05fU19NRU1GUkVFICA0ICAgLyogVG90YWwgYW1vdW50IG9mIGZyZWUgbWVtb3J5ICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfTUVNVE9UICAgNSAgIC8qIFRvdGFsIGFtb3VudCBvZiBtZW1vcnkgKi8KKyNkZWZpbmUgVklSVElPX0JBTExPT05fU19OUiAgICAgICA2CisKK3N0cnVjdCB2aXJ0aW9fYmFsbG9vbl9zdGF0IHsKKwl1MTYgdGFnOworCXU2NCB2YWw7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiAjZW5kaWYgLyogX0xJTlVYX1ZJUlRJT19CQUxMT09OX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmgKaW5kZXggZmQyOTRjNS4uZTUyMDI5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgVklSVElPX0JMS19GX0JMS19TSVpFCTYJLyogQmxvY2sgc2l6ZSBvZiBkaXNrIGlzIGF2YWlsYWJsZSovCiAjZGVmaW5lIFZJUlRJT19CTEtfRl9TQ1NJCTcJLyogU3VwcG9ydHMgc2NzaSBjb21tYW5kIHBhc3N0aHJ1ICovCiAjZGVmaW5lIFZJUlRJT19CTEtfRl9GTFVTSAk5CS8qIENhY2hlIGZsdXNoIGNvbW1hbmQgc3VwcG9ydCAqLworI2RlZmluZSBWSVJUSU9fQkxLX0ZfVE9QT0xPR1kJMTAJLyogVG9wb2xvZ3kgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlICovCiAKIHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZyB7CiAJLyogVGhlIGNhcGFjaXR5IChpbiA1MTItYnl0ZSBzZWN0b3JzKS4gKi8KQEAgLTI5LDggKzMwLDIwIEBACiAJCV9fdTggaGVhZHM7CiAJCV9fdTggc2VjdG9yczsKIAl9IGdlb21ldHJ5OworCiAJLyogYmxvY2sgc2l6ZSBvZiBkZXZpY2UgKGlmIFZJUlRJT19CTEtfRl9CTEtfU0laRSkgKi8KIAlfX3UzMiBibGtfc2l6ZTsKKworCS8qIHRoZSBuZXh0IDQgZW50cmllcyBhcmUgZ3VhcmRlZCBieSBWSVJUSU9fQkxLX0ZfVE9QT0xPR1kgICovCisJLyogZXhwb25lbnQgZm9yIHBoeXNpY2FsIGJsb2NrIHBlciBsb2dpY2FsIGJsb2NrLiAqLworCV9fdTggcGh5c2ljYWxfYmxvY2tfZXhwOworCS8qIGFsaWdubWVudCBvZmZzZXQgaW4gbG9naWNhbCBibG9ja3MuICovCisJX191OCBhbGlnbm1lbnRfb2Zmc2V0OworCS8qIG1pbmltdW0gSS9PIHNpemUgd2l0aG91dCBwZXJmb3JtYW5jZSBwZW5hbHR5IGluIGxvZ2ljYWwgYmxvY2tzLiAqLworCV9fdTE2IG1pbl9pb19zaXplOworCS8qIG9wdGltYWwgc3VzdGFpbmVkIEkvTyBzaXplIGluIGxvZ2ljYWwgYmxvY2tzLiAqLworCV9fdTMyIG9wdF9pb19zaXplOworCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCmluZGV4IGZlODg1MTcuLmFlNGYwMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKQEAgLTMsMTkgKzMsNDUgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+Ci0vKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KLSAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisvKgorICogVGhpcyBoZWFkZXIsIGV4Y2x1ZGluZyB0aGUgI2lmZGVmIF9fS0VSTkVMX18gcGFydCwgaXMgQlNEIGxpY2Vuc2VkIHNvCisgKiBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50IGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLgorICoKKyAqIENvcHlyaWdodCAoQykgUmVkIEhhdCwgSW5jLiwgMjAwOSwgMjAxMAorICovCiAKIC8qIEZlYXR1cmUgYml0cyAqLwogI2RlZmluZSBWSVJUSU9fQ09OU09MRV9GX1NJWkUJMAkvKiBEb2VzIGhvc3QgcHJvdmlkZSBjb25zb2xlIHNpemU/ICovCisjZGVmaW5lIFZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JUIDEJLyogRG9lcyBob3N0IHByb3ZpZGUgbXVsdGlwbGUgcG9ydHM/ICovCiAKIHN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb25maWcgewogCS8qIGNvbHVtcyBvZiB0aGUgc2NyZWVucyAqLwogCV9fdTE2IGNvbHM7CiAJLyogcm93cyBvZiB0aGUgc2NyZWVucyAqLwogCV9fdTE2IHJvd3M7CisJLyogbWF4LiBudW1iZXIgb2YgcG9ydHMgdGhpcyBkZXZpY2UgY2FuIGhvbGQgKi8KKwlfX3UzMiBtYXhfbnJfcG9ydHM7CisJLyogbnVtYmVyIG9mIHBvcnRzIGFkZGVkIHNvIGZhciAqLworCV9fdTMyIG5yX3BvcnRzOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorLyoKKyAqIEEgbWVzc2FnZSB0aGF0J3MgcGFzc2VkIGJldHdlZW4gdGhlIEhvc3QgYW5kIHRoZSBHdWVzdCBmb3IgYQorICogcGFydGljdWxhciBwb3J0LgorICovCitzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29udHJvbCB7CisJX191MzIgaWQ7CQkvKiBQb3J0IG51bWJlciAqLworCV9fdTE2IGV2ZW50OwkJLyogVGhlIGtpbmQgb2YgY29udHJvbCBldmVudCAoc2VlIGJlbG93KSAqLworCV9fdTE2IHZhbHVlOwkJLyogRXh0cmEgaW5mb3JtYXRpb24gZm9yIHRoZSBrZXkgKi8KK307CisKKy8qIFNvbWUgZXZlbnRzIGZvciBjb250cm9sIG1lc3NhZ2VzICovCisjZGVmaW5lIFZJUlRJT19DT05TT0xFX1BPUlRfUkVBRFkJMAorI2RlZmluZSBWSVJUSU9fQ09OU09MRV9DT05TT0xFX1BPUlQJMQorI2RlZmluZSBWSVJUSU9fQ09OU09MRV9SRVNJWkUJCTIKKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfUE9SVF9PUEVOCTMKKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfUE9SVF9OQU1FCTQKKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfUE9SVF9SRU1PVkUJNQogCiAjaWZkZWYgX19LRVJORUxfXwogaW50IF9faW5pdCB2aXJ0aW9fY29uc19lYXJseV9pbml0KGludCAoKnB1dF9jaGFycykodTMyLCBjb25zdCBjaGFyICosIGludCkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2lzaWYuaCBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9pc2lmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBiNzRhZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9pc2lmLmgKQEAgLTAsMCArMSw1MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogaXNpZiBoZWFkZXIgZmlsZQorICovCisjaWZuZGVmIF9JU0lGX0gKKyNkZWZpbmUgX0lTSUZfSAorCisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS9jY2RjX3R5cGVzLmg+CisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cGZlX3R5cGVzLmg+CisKKy8qIGlzaWYgZmxvYXQgdHlwZSBTOFE4L1U4UTggKi8KK3N0cnVjdCBpc2lmX2Zsb2F0XzggeworCS8qIDggYml0IGludGVnZXIgcGFydCAqLworCV9fdTggaW50ZWdlcjsKKwkvKiA4IGJpdCBkZWNpbWFsIHBhcnQgKi8KKwlfX3U4IGRlY2ltYWw7Cit9OworCisvKiBpc2lmIGZsb2F0IHR5cGUgVTE2UTE2L1MxNlExNiAqLworc3RydWN0IGlzaWZfZmxvYXRfMTYgeworCS8qIDE2IGJpdCBpbnRlZ2VyIHBhcnQgKi8KKwlfX3UxNiBpbnRlZ2VyOworCS8qIDE2IGJpdCBkZWNpbWFsIHBhcnQgKi8KKwlfX3UxNiBkZWNpbWFsOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBWZXJ0aWNhbCBEZWZlY3QgQ29ycmVjdGlvbiBwYXJhbWV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZWZlY3QgQ29ycmVjdGlvbiAoREZDKSB0YWJsZSBlbnRyeSAqLworc3RydWN0IGlzaWZfdmRmY19lbnRyeSB7CisJLyogdmVydGljYWwgcG9zaXRpb24gb2YgZGVmZWN0ICovCisJX191MTYgcG9zX3ZlcnQ7CisJLyogaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiBkZWZlY3QgKi8KKwlfX3UxNiBwb3NfaG9yejsKKwkvKgorCSAqIERlZmVjdCBsZXZlbCBvZiBWZXJ0aWNhbCBsaW5lIGRlZmVjdCBwb3NpdGlvbi4gVGhpcyBpcyBzdWJ0cmFjdGVkCisJICogZnJvbSB0aGUgZGF0YSBhdCB0aGUgZGVmZWN0IHBvc2l0aW9uCisJICovCisJX191OCBsZXZlbF9hdF9wb3M7CisJLyoKKwkgKiBEZWZlY3QgbGV2ZWwgb2YgdGhlIHBpeGVscyB1cHBlciB0aGFuIHRoZSB2ZXJ0aWNhbCBsaW5lIGRlZmVjdC4KKwkgKiBUaGlzIGlzIHN1YnRyYWN0ZWQgZnJvbSB0aGUgZGF0YQorCSAqLworCV9fdTggbGV2ZWxfdXBfcGl4ZWxzOworCS8qCisJICogRGVmZWN0IGxldmVsIG9mIHRoZSBwaXhlbHMgbG93ZXIgdGhhbiB0aGUgdmVydGljYWwgbGluZSBkZWZlY3QuCisJICogVGhpcyBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIGRhdGEKKwkgKi8KKwlfX3U4IGxldmVsX2xvd19waXhlbHM7Cit9OworCisjZGVmaW5lIElTSUZfVkRGQ19UQUJMRV9TSVpFCQk4CitzdHJ1Y3QgaXNpZl9kZmMgeworCS8qIGVuYWJsZSB2ZXJ0aWNhbCBkZWZlY3QgY29ycmVjdGlvbiAqLworCV9fdTggZW47CisJLyogRGVmZWN0IGxldmVsIHN1YnRyYWN0aW9uLiBKdXN0IGZlZCB0aHJvdWdoIGlmIHNhdHVyYXRpbmcgKi8KKyNkZWZpbmUJSVNJRl9WREZDX05PUk1BTAkJMAorCS8qCisJICogRGVmZWN0IGxldmVsIHN1YnRyYWN0aW9uLiBIb3Jpem9udGFsIGludGVycG9sYXRpb24gKChpLTIpKyhpKzIpKS8yCisJICogaWYgZGF0YSBzYXR1cmF0aW5nCisJICovCisjZGVmaW5lIElTSUZfVkRGQ19IT1JaX0lOVEVSUE9MX0lGX1NBVAkxCisJLyogSG9yaXpvbnRhbCBpbnRlcnBvbGF0aW9uICgoKGktMikrKGkrMikpLzIpICovCisjZGVmaW5lCUlTSUZfVkRGQ19IT1JaX0lOVEVSUE9MCQkyCisJLyogb25lIG9mIHRoZSB2ZXJ0aWNhbCBkZWZlY3QgY29ycmVjdGlvbiBtb2RlcyBhYm92ZSAqLworCV9fdTggY29ycl9tb2RlOworCS8qIDAgLSB3aG9sZSBsaW5lIGNvcnJlY3RlZCwgMSAtIG5vdCBwaXhlbHMgdXBwZXIgdGhhbiB0aGUgZGVmZWN0ICovCisJX191OCBjb3JyX3dob2xlX2xpbmU7CisjZGVmaW5lIElTSUZfVkRGQ19OT19TSElGVAkJMAorI2RlZmluZSBJU0lGX1ZERkNfU0hJRlRfMQkJMQorI2RlZmluZSBJU0lGX1ZERkNfU0hJRlRfMgkJMgorI2RlZmluZSBJU0lGX1ZERkNfU0hJRlRfMwkJMworI2RlZmluZSBJU0lGX1ZERkNfU0hJRlRfNAkJNAorCS8qCisJICogZGVmZWN0IGxldmVsIHNoaWZ0IHZhbHVlLiBsZXZlbF9hdF9wb3MsIGxldmVsX3VwcGVyX3BvcywKKwkgKiBhbmQgbGV2ZWxfbG93ZXJfcG9zIGNhbiBiZSBzaGlmdGVkIHVwIGJ5IHRoaXMgdmFsdWUuIENob29zZQorCSAqIG9uZSBvZiB0aGUgdmFsdWVzIGFib3ZlCisJICovCisJX191OCBkZWZfbGV2ZWxfc2hpZnQ7CisJLyogZGVmZWN0IHNhdHVyYXRpb24gbGV2ZWwgKi8KKwlfX3UxNiBkZWZfc2F0X2xldmVsOworCS8qIG51bWJlciBvZiB2ZXJ0aWNhbCBkZWZlY3RzLiBNYXggaXMgSVNJRl9WREZDX1RBQkxFX1NJWkUgKi8KKwlfX3UxNiBudW1fdmRlZmVjdHM7CisJLyogVkRGQyB0YWJsZSBwdHIgKi8KKwlzdHJ1Y3QgaXNpZl92ZGZjX2VudHJ5IHRhYmxlW0lTSUZfVkRGQ19UQUJMRV9TSVpFXTsKK307CisKK3N0cnVjdCBpc2lmX2hvcnpfYmNsYW1wIHsKKworCS8qIEhvcml6b250YWwgY2xhbXAgZGlzYWJsZWQuIE9ubHkgdmVydGljYWwgY2xhbXAgdmFsdWUgaXMgc3VidHJhY3RlZCAqLworI2RlZmluZQlJU0lGX0hPUlpfQkNfRElTQUJMRQkJMAorCS8qCisJICogSG9yaXpvbnRhbCBjbGFtcCB2YWx1ZSBpcyBjYWxjdWxhdGVkIGFuZCBzdWJ0cmFjdGVkIGZyb20gaW1hZ2UgZGF0YQorCSAqIGFsb25nIHdpdGggdmVydGljYWwgY2xhbXAgdmFsdWUKKwkgKi8KKyNkZWZpbmUgSVNJRl9IT1JaX0JDX0NMQU1QX0NBTENfRU5BQkxFRAkxCisJLyoKKwkgKiBIb3Jpem9udGFsIGNsYW1wIHZhbHVlIGNhbGN1bGF0ZWQgZnJvbSBwcmV2aW91cyBpbWFnZSBpcyBzdWJ0cmFjdGVkCisJICogZnJvbSBpbWFnZSBkYXRhIGFsb25nIHdpdGggdmVydGljYWwgY2xhbXAgdmFsdWUuCisJICovCisjZGVmaW5lIElTSUZfSE9SWl9CQ19DTEFNUF9OT1RfVVBEQVRFRAkyCisJLyogaG9yaXpvbnRhbCBjbGFtcCBtb2RlLiBPbmUgb2YgdGhlIHZhbHVlcyBhYm92ZSAqLworCV9fdTggbW9kZTsKKwkvKgorCSAqIHBpeGVsIHZhbHVlIGxpbWl0IGVuYWJsZS4KKwkgKiAgMCAtIGxpbWl0IGRpc2FibGVkCisJICogIDEgLSBwaXhlbCB2YWx1ZSBsaW1pdGVkIHRvIDEwMjMKKwkgKi8KKwlfX3U4IGNsYW1wX3BpeF9saW1pdDsKKwkvKiBTZWxlY3QgTW9zdCBsZWZ0IHdpbmRvdyBmb3IgYmMgY2FsY3VsYXRpb24gKi8KKyNkZWZpbmUJSVNJRl9TRUxfTU9TVF9MRUZUX1dJTgkJMAorCS8qIFNlbGVjdCBNb3N0IHJpZ2h0IHdpbmRvdyBmb3IgYmMgY2FsY3VsYXRpb24gKi8KKyNkZWZpbmUgSVNJRl9TRUxfTU9TVF9SSUdIVF9XSU4JCTEKKwkvKiBTZWxlY3QgbW9zdCBsZWZ0IG9yIHJpZ2h0IHdpbmRvdyBmb3IgY2xhbXAgdmFsIGNhbGN1bGF0aW9uICovCisJX191OCBiYXNlX3dpbl9zZWxfY2FsYzsKKwkvKiBXaW5kb3cgY291bnQgcGVyIGNvbG9yIGZvciBjYWxjdWxhdGlvbi4gcmFuZ2UgMS0zMiAqLworCV9fdTggd2luX2NvdW50X2NhbGM7CisJLyogV2luZG93IHN0YXJ0IHBvc2l0aW9uIC0gaG9yaXpvbnRhbCBmb3IgY2FsY3VsYXRpb24uIDAgLSA4MTkxICovCisJX191MTYgd2luX3N0YXJ0X2hfY2FsYzsKKwkvKiBXaW5kb3cgc3RhcnQgcG9zaXRpb24gLSB2ZXJ0aWNhbCBmb3IgY2FsY3VsYXRpb24gMCAtIDgxOTEgKi8KKwlfX3UxNiB3aW5fc3RhcnRfdl9jYWxjOworI2RlZmluZSBJU0lGX0hPUlpfQkNfU1pfSF8yUElYRUxTCTAKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1NaX0hfNFBJWEVMUwkxCisjZGVmaW5lIElTSUZfSE9SWl9CQ19TWl9IXzhQSVhFTFMJMgorI2RlZmluZSBJU0lGX0hPUlpfQkNfU1pfSF8xNlBJWEVMUwkzCisJLyogV2lkdGggb2YgdGhlIHNhbXBsZSB3aW5kb3cgaW4gcGl4ZWxzIGZvciBjYWxjdWxhdGlvbiAqLworCV9fdTggd2luX2hfc3pfY2FsYzsKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1NaX1ZfMzJQSVhFTFMJMAorI2RlZmluZSBJU0lGX0hPUlpfQkNfU1pfVl82NFBJWEVMUwkxCisjZGVmaW5lCUlTSUZfSE9SWl9CQ19TWl9WXzEyOFBJWEVMUwkyCisjZGVmaW5lIElTSUZfSE9SWl9CQ19TWl9WXzI1NlBJWEVMUwkzCisJLyogSGVpZ2h0IG9mIHRoZSBzYW1wbGUgd2luZG93IGluIHBpeGVscyBmb3IgY2FsY3VsYXRpb24gKi8KKwlfX3U4IHdpbl92X3N6X2NhbGM7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQmxhY2sgQ2xhbXAgcGFyYW1ldGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGlzaWZfdmVydF9iY2xhbXAgeworCS8qIFJlc2V0IHZhbHVlIHVzZWQgaXMgdGhlIGNsYW1wIHZhbHVlIGNhbGN1bGF0ZWQgKi8KKyNkZWZpbmUJSVNJRl9WRVJUX0JDX1VTRV9IT1JaX0NMQU1QX1ZBTAkJMAorCS8qIFJlc2V0IHZhbHVlIHVzZWQgaXMgcmVzZXRfY2xhbXBfdmFsIGNvbmZpZ3VyZWQgKi8KKyNkZWZpbmUJSVNJRl9WRVJUX0JDX1VTRV9DT05GSUdfQ0xBTVBfVkFMCTEKKwkvKiBObyB1cGRhdGUsIHByZXZpb3VzIGltYWdlIHZhbHVlIGlzIHVzZWQgKi8KKyNkZWZpbmUJSVNJRl9WRVJUX0JDX05PX1VQREFURQkJCTIKKwkvKgorCSAqIFJlc2V0IHZhbHVlIHNlbGVjdG9yIGZvciB2ZXJ0aWNhbCBjbGFtcCBjYWxjdWxhdGlvbi4gVXNlIG9uZSBvZgorCSAqIHRoZSBhYm92ZSB2YWx1ZXMKKwkgKi8KKwlfX3U4IHJlc2V0X3ZhbF9zZWw7CisJLyogVThROC4gTGluZSBhdmVyYWdlIGNvZWZmaWNpZW50IHVzZWQgaW4gdmVydGljYWwgY2xhbXAgY2FsY3VsYXRpb24gKi8KKwlfX3U4IGxpbmVfYXZlX2NvZWY7CisJLyogSGVpZ2h0IG9mIHRoZSBvcHRpY2FsIGJsYWNrIHJlZ2lvbiBmb3IgY2FsY3VsYXRpb24gKi8KKwlfX3UxNiBvYl92X3N6X2NhbGM7CisJLyogT3B0aWNhbCBibGFjayByZWdpb24gc3RhcnQgcG9zaXRpb24gLSBob3Jpem9udGFsLiAwIC0gODE5MSAqLworCV9fdTE2IG9iX3N0YXJ0X2g7CisJLyogT3B0aWNhbCBibGFjayByZWdpb24gc3RhcnQgcG9zaXRpb24gLSB2ZXJ0aWNhbCAwIC0gODE5MSAqLworCV9fdTE2IG9iX3N0YXJ0X3Y7Cit9OworCitzdHJ1Y3QgaXNpZl9ibGFja19jbGFtcCB7CisJLyoKKwkgKiBUaGlzIG9mZnNldCB2YWx1ZSBpcyBhZGRlZCBpcnJlc3BlY3RpdmUgb2YgdGhlIGNsYW1wIGVuYWJsZSBzdGF0dXMuCisJICogUzEzCisJICovCisJX191MTYgZGNfb2Zmc2V0OworCS8qCisJICogRW5hYmxlIGJsYWNrL2RpZ2l0YWwgY2xhbXAgdmFsdWUgdG8gYmUgc3VidHJhY3RlZCBmcm9tIHRoZSBpbWFnZSBkYXRhCisJICovCisJX191OCBlbjsKKwkvKgorCSAqIGJsYWNrIGNsYW1wIG1vZGUuIHNhbWUvc2VwYXJhdGUgY2xhbXAgZm9yIDQgY29sb3JzCisJICogMCAtIGRpc2FibGUgLSBzYW1lIGNsYW1wIHZhbHVlIGZvciBhbGwgY29sb3JzCisJICogMSAtIGNsYW1wIHZhbHVlIGNhbGN1bGF0ZWQgc2VwYXJhdGVseSBmb3IgYWxsIGNvbG9ycworCSAqLworCV9fdTggYmNfbW9kZV9jb2xvcjsKKwkvKiBWcnRpY2FsIHN0YXJ0IHBvc2l0aW9uIGZvciBiYyBzdWJ0cmFjdGlvbiAqLworCV9fdTE2IHZlcnRfc3RhcnRfc3ViOworCS8qIEJsYWNrIGNsYW1wIGZvciBob3Jpem9udGFsIGRpcmVjdGlvbiAqLworCXN0cnVjdCBpc2lmX2hvcnpfYmNsYW1wIGhvcno7CisJLyogQmxhY2sgY2xhbXAgZm9yIHZlcnRpY2FsIGRpcmVjdGlvbiAqLworCXN0cnVjdCBpc2lmX3ZlcnRfYmNsYW1wIHZlcnQ7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogQ29sb3IgU3BhY2UgQ29udmVydGlvbiAoQ1NDKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSVNJRl9DU0NfTlVNX0NPRUZGCTE2CitzdHJ1Y3QgaXNpZl9jb2xvcl9zcGFjZV9jb252IHsKKwkvKiBFbmFibGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiAqLworCV9fdTggZW47CisJLyoKKwkgKiBjc2MgY29lZmZpZW50IHRhYmxlLiBTOFE1LCBNMDAgYXQgaW5kZXggMCwgTTAxIGF0IGluZGV4IDEsIGFuZAorCSAqIHNvIGZvcnRoCisJICovCisJc3RydWN0IGlzaWZfZmxvYXRfOCBjb2VmZltJU0lGX0NTQ19OVU1fQ09FRkZdOworfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogIEJsYWNrICBDb21wZW5zYXRpb24gcGFyYW1ldGVycworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBpc2lmX2JsYWNrX2NvbXAgeworCS8qIENvbXAgZm9yIFJlZCAqLworCV9fczggcl9jb21wOworCS8qIENvbXAgZm9yIEdyICovCisJX19zOCBncl9jb21wOworCS8qIENvbXAgZm9yIEJsdWUgKi8KKwlfX3M4IGJfY29tcDsKKwkvKiBDb21wIGZvciBHYiAqLworCV9fczggZ2JfY29tcDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgR2FpbiBwYXJhbWV0ZXJzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGlzaWZfZ2FpbiB7CisJLyogR2FpbiBmb3IgUmVkIG9yIHllICovCisJc3RydWN0IGlzaWZfZmxvYXRfMTYgcl95ZTsKKwkvKiBHYWluIGZvciBHciBvciBjeSAqLworCXN0cnVjdCBpc2lmX2Zsb2F0XzE2IGdyX2N5OworCS8qIEdhaW4gZm9yIEdiIG9yIGcgKi8KKwlzdHJ1Y3QgaXNpZl9mbG9hdF8xNiBnYl9nOworCS8qIEdhaW4gZm9yIEJsdWUgb3IgbWcgKi8KKwlzdHJ1Y3QgaXNpZl9mbG9hdF8xNiBiX21nOworfTsKKworI2RlZmluZSBJU0lGX0xJTkVBUl9UQUJfU0laRQkxOTIKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgTGluZWFyaXphdGlvbiBwYXJhbWV0ZXJzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGlzaWZfbGluZWFyaXplIHsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBsaW5lYXJpemF0aW9uIG9mIGRhdGEgKi8KKwlfX3U4IGVuOworCS8qIFNoaWZ0IHZhbHVlIGFwcGxpZWQgKi8KKwlfX3U4IGNvcnJfc2hmdDsKKwkvKiBzY2FsZSBmYWN0b3IgYXBwbGllZCBVMTFRMTAgKi8KKwlzdHJ1Y3QgaXNpZl9mbG9hdF8xNiBzY2FsZV9mYWN0OworCS8qIFNpemUgb2YgdGhlIGxpbmVhciB0YWJsZSAqLworCV9fdTE2IHRhYmxlW0lTSUZfTElORUFSX1RBQl9TSVpFXTsKK307CisKKy8qIENvbG9yIHBhdHRlcm5zICovCisjZGVmaW5lIElTSUZfUkVECTAKKyNkZWZpbmUJSVNJRl9HUkVFTl9SRUQJMQorI2RlZmluZSBJU0lGX0dSRUVOX0JMVUUJMgorI2RlZmluZSBJU0lGX0JMVUUJMworc3RydWN0IGlzaWZfY29sX3BhdCB7CisJX191OCBvbG9wOworCV9fdTggb2xlcDsKKwlfX3U4IGVsb3A7CisJX191OCBlbGVwOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqICBEYXRhIGZvcm1hdHRlciBwYXJhbWV0ZXJzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGlzaWZfZm10cGxlbiB7CisJLyoKKwkgKiBudW1iZXIgb2YgcHJvZ3JhbSBlbnRyaWVzIGZvciBTRVQwLCByYW5nZSAxIC0gMTYKKwkgKiB3aGVuIGZtdG1vZGUgaXMgSVNJRl9TUExJVCwgMSAtIDggd2hlbiBmbXRtb2RlIGlzCisJICogSVNJRl9DT01CSU5FCisJICovCisJX191MTYgcGxlbjA7CisJLyoKKwkgKiBudW1iZXIgb2YgcHJvZ3JhbSBlbnRyaWVzIGZvciBTRVQxLCByYW5nZSAxIC0gMTYKKwkgKiB3aGVuIGZtdG1vZGUgaXMgSVNJRl9TUExJVCwgMSAtIDggd2hlbiBmbXRtb2RlIGlzCisJICogSVNJRl9DT01CSU5FCisJICovCisJX191MTYgcGxlbjE7CisJLyoqCisJICogbnVtYmVyIG9mIHByb2dyYW0gZW50cmllcyBmb3IgU0VUMiwgcmFuZ2UgMSAtIDE2CisJICogd2hlbiBmbXRtb2RlIGlzIElTSUZfU1BMSVQsIDEgLSA4IHdoZW4gZm10bW9kZSBpcworCSAqIElTSUZfQ09NQklORQorCSAqLworCV9fdTE2IHBsZW4yOworCS8qKgorCSAqIG51bWJlciBvZiBwcm9ncmFtIGVudHJpZXMgZm9yIFNFVDMsIHJhbmdlIDEgLSAxNgorCSAqIHdoZW4gZm10bW9kZSBpcyBJU0lGX1NQTElULCAxIC0gOCB3aGVuIGZtdG1vZGUgaXMKKwkgKiBJU0lGX0NPTUJJTkUKKwkgKi8KKwlfX3UxNiBwbGVuMzsKK307CisKK3N0cnVjdCBpc2lmX2ZtdF9jZmcgeworI2RlZmluZSBJU0lGX1NQTElUCQkwCisjZGVmaW5lIElTSUZfQ09NQklORQkJMQorCS8qIFNwbGl0IG9yIGNvbWJpbmUgb3IgbGluZSBhbHRlcm5hdGUgKi8KKwlfX3U4IGZtdG1vZGU7CisJLyogZW5hYmxlIG9yIGRpc2FibGUgbGluZSBhbHRlcm5hdGluZyBtb2RlICovCisJX191OCBsbl9hbHRlcl9lbjsKKyNkZWZpbmUgSVNJRl8xTElORQkJMAorI2RlZmluZQlJU0lGXzJMSU5FUwkJMQorI2RlZmluZQlJU0lGXzNMSU5FUwkJMgorI2RlZmluZQlJU0lGXzRMSU5FUwkJMworCS8qIFNwbGl0L2NvbWJpbmUgbGluZSBudW1iZXIgKi8KKwlfX3U4IGxudW07CisJLyogQWRkcmVzcyBpbmNyZW1lbnQgUmFuZ2UgMSAtIDE2ICovCisJX191OCBhZGRyaW5jOworfTsKKworc3RydWN0IGlzaWZfZm10X2FkZHJfcHRyIHsKKwkvKiBJbml0aWFsIGFkZHJlc3MgKi8KKwlfX3UzMiBpbml0X2FkZHI7CisJLyogb3V0cHV0IGxpbmUgbnVtYmVyICovCisjZGVmaW5lIElTSUZfMVNUTElORQkJMAorI2RlZmluZQlJU0lGXzJORExJTkUJCTEKKyNkZWZpbmUJSVNJRl8zUkRMSU5FCQkyCisjZGVmaW5lCUlTSUZfNFRITElORQkJMworCV9fdTggb3V0X2xpbmU7Cit9OworCitzdHJ1Y3QgaXNpZl9mbXRwZ21fYXAgeworCS8qIHByb2dyYW0gYWRkcmVzcyBwb2ludGVyICovCisJX191OCBwZ21fYXB0cjsKKwkvKiBwcm9ncmFtIGFkZHJlc3MgaW5jcmVtZW50IG9yIGRlY3JlbWVudCAqLworCV9fdTggcGdtdXBkdDsKK307CisKK3N0cnVjdCBpc2lmX2RhdGFfZm9ybWF0dGVyIHsKKwkvKiBFbmFibGUvRGlzYWJsZSBkYXRhIGZvcm1hdHRlciAqLworCV9fdTggZW47CisJLyogZGF0YSBmb3JtYXR0ZXIgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBpc2lmX2ZtdF9jZmcgY2ZnOworCS8qIEZvcm1hdHRlciBwcm9ncmFtIGVudHJpZXMgbGVuZ3RoICovCisJc3RydWN0IGlzaWZfZm10cGxlbiBwbGVuOworCS8qIGZpcnN0IHBpeGVsIGluIGEgbGluZSBmZWQgdG8gZm9ybWF0dGVyICovCisJX191MTYgZm10cmxlbjsKKwkvKiBIRCBpbnRlcnZhbCBmb3Igb3V0cHV0IGxpbmUuIE9ubHkgdmFsaWQgd2hlbiBzcGxpdCBsaW5lICovCisJX191MTYgZm10aGNudDsKKwkvKiBmb3JtYXR0ZXIgYWRkcmVzcyBwb2ludGVycyAqLworCXN0cnVjdCBpc2lmX2ZtdF9hZGRyX3B0ciBmbXRhZGRyX3B0clsxNl07CisJLyogcHJvZ3JhbSBlbmFibGUvZGlzYWJsZSAqLworCV9fdTggcGdtX2VuWzMyXTsKKwkvKiBwcm9ncmFtIGFkZHJlc3MgcG9pbnRlcnMgKi8KKwlzdHJ1Y3QgaXNpZl9mbXRwZ21fYXAgZm10cGdtX2FwWzMyXTsKK307CisKK3N0cnVjdCBpc2lmX2RmX2NzYyB7CisJLyogQ29sb3IgU3BhY2UgQ29udmVyc2lvbiBjb25mZ3VyYXRpb24sIDAgLSBjc2MsIDEgLSBkZiAqLworCV9fdTggZGZfb3JfY3NjOworCS8qIGNzYyBjb25maWd1cmF0aW9uIHZhbGlkIGlmIGRmX29yX2NzYyBpcyAwICovCisJc3RydWN0IGlzaWZfY29sb3Jfc3BhY2VfY29udiBjc2M7CisJLyogZGF0YSBmb3JtYXR0ZXIgY29uZmlndXJhdGlvbiB2YWxpZCBpZiBkZl9vcl9jc2MgaXMgMSAqLworCXN0cnVjdCBpc2lmX2RhdGFfZm9ybWF0dGVyIGRmOworCS8qIHN0YXJ0IHBpeGVsIGluIGEgbGluZSBhdCB0aGUgaW5wdXQgKi8KKwlfX3UzMiBzdGFydF9waXg7CisJLyogbnVtYmVyIG9mIHBpeGVscyBpbiBpbnB1dCBsaW5lICovCisJX191MzIgbnVtX3BpeGVsczsKKwkvKiBzdGFydCBsaW5lIGF0IHRoZSBpbnB1dCAqLworCV9fdTMyIHN0YXJ0X2xpbmU7CisJLyogbnVtYmVyIG9mIGxpbmVzIGF0IHRoZSBpbnB1dCAqLworCV9fdTMyIG51bV9saW5lczsKK307CisKK3N0cnVjdCBpc2lmX2dhaW5fb2Zmc2V0c19hZGogeworCS8qIEdhaW4gYWRqdXN0bWVudCBwZXIgY29sb3IgKi8KKwlzdHJ1Y3QgaXNpZl9nYWluIGdhaW47CisJLyogT2Zmc2V0IGFkanVzdG1lbnQgKi8KKwlfX3UxNiBvZmZzZXQ7CisJLyogRW5hYmxlIG9yIERpc2FibGUgR2FpbiBhZGp1c3RtZW50IGZvciBTRFJBTSBkYXRhICovCisJX191OCBnYWluX3NkcmFtX2VuOworCS8qIEVuYWJsZSBvciBEaXNhYmxlIEdhaW4gYWRqdXN0bWVudCBmb3IgSVBJUEUgZGF0YSAqLworCV9fdTggZ2Fpbl9pcGlwZV9lbjsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBHYWluIGFkanVzdG1lbnQgZm9yIEgzQSBkYXRhICovCisJX191OCBnYWluX2gzYV9lbjsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBHYWluIGFkanVzdG1lbnQgZm9yIFNEUkFNIGRhdGEgKi8KKwlfX3U4IG9mZnNldF9zZHJhbV9lbjsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBHYWluIGFkanVzdG1lbnQgZm9yIElQSVBFIGRhdGEgKi8KKwlfX3U4IG9mZnNldF9pcGlwZV9lbjsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBHYWluIGFkanVzdG1lbnQgZm9yIEgzQSBkYXRhICovCisJX191OCBvZmZzZXRfaDNhX2VuOworfTsKKworc3RydWN0IGlzaWZfY3VsIHsKKwkvKiBIb3Jpem9udGFsIEN1bGwgcGF0dGVybiBmb3Igb2RkIGxpbmVzICovCisJX191OCBoY3BhdF9vZGQ7CisJLyogSG9yaXpvbnRhbCBDdWxsIHBhdHRlcm4gZm9yIGV2ZW4gbGluZXMgKi8KKwlfX3U4IGhjcGF0X2V2ZW47CisJLyogVmVydGljYWwgQ3VsbCBwYXR0ZXJuICovCisJX191OCB2Y3BhdDsKKwkvKiBFbmFibGUgb3IgZGlzYWJsZSBscGYuIEFwcGx5IHdoZW4gY3VsbCBpcyBlbmFibGVkICovCisJX191OCBlbl9scGY7Cit9OworCitzdHJ1Y3QgaXNpZl9jb21wcmVzcyB7CisjZGVmaW5lIElTSUZfQUxBVwkJMAorI2RlZmluZSBJU0lGX0RQQ00JCTEKKyNkZWZpbmUgSVNJRl9OT19DT01QUkVTU0lPTgkyCisJLyogQ29tcHJlc3Npb24gQWxnb3JpdGhtIHVzZWQgKi8KKwlfX3U4IGFsZzsKKwkvKiBDaG9vc2UgUHJlZGljdG9yMSBmb3IgRFBDTSBjb21wcmVzc2lvbiAqLworI2RlZmluZSBJU0lGX0RQQ01fUFJFRDEJCTAKKwkvKiBDaG9vc2UgUHJlZGljdG9yMiBmb3IgRFBDTSBjb21wcmVzc2lvbiAqLworI2RlZmluZSBJU0lGX0RQQ01fUFJFRDIJCTEKKwkvKiBQcmVkaWN0b3IgZm9yIERQQ00gY29tcHJlc3Npb24gKi8KKwlfX3U4IHByZWQ7Cit9OworCisvKiBhbGwgdGhlIHN0dWZmIGluIHRoaXMgc3RydWN0IHdpbGwgYmUgcHJvdmlkZWQgYnkgdXNlcmxhbmQgKi8KK3N0cnVjdCBpc2lmX2NvbmZpZ19wYXJhbXNfcmF3IHsKKwkvKiBMaW5lYXJpemF0aW9uIHBhcmFtZXRlcnMgZm9yIGltYWdlIHNlbnNvciBkYXRhIGlucHV0ICovCisJc3RydWN0IGlzaWZfbGluZWFyaXplIGxpbmVhcml6ZTsKKwkvKiBEYXRhIGZvcm1hdHRlciBvciBDU0MgKi8KKwlzdHJ1Y3QgaXNpZl9kZl9jc2MgZGZfY3NjOworCS8qIERlZmVjdCBQaXhlbCBDb3JyZWN0aW9uIChERkMpIGNvbmZndXJhdGlvbiAqLworCXN0cnVjdCBpc2lmX2RmYyBkZmM7CisJLyogQmxhY2svRGlnaXRhbCBDbGFtcCBjb25maWd1cmF0aW9uICovCisJc3RydWN0IGlzaWZfYmxhY2tfY2xhbXAgYmNsYW1wOworCS8qIEdhaW4sIG9mZnNldCBhZGp1c3RtZW50cyAqLworCXN0cnVjdCBpc2lmX2dhaW5fb2Zmc2V0c19hZGogZ2Fpbl9vZmZzZXQ7CisJLyogQ3VsbGluZyAqLworCXN0cnVjdCBpc2lmX2N1bCBjdWxsaW5nOworCS8qIEEtTGF3IGFuZCBEUENNIGNvbXByZXNzaW9uIG9wdGlvbnMgKi8KKwlzdHJ1Y3QgaXNpZl9jb21wcmVzcyBjb21wcmVzczsKKwkvKiBob3Jpem9udGFsIG9mZnNldCBmb3IgR2Fpbi9MU0MvREZDICovCisJX191MTYgaG9yel9vZmZzZXQ7CisJLyogdmVydGljYWwgb2Zmc2V0IGZvciBHYWluL0xTQy9ERkMgKi8KKwlfX3UxNiB2ZXJ0X29mZnNldDsKKwkvKiBjb2xvciBwYXR0ZXJuIGZvciBmaWVsZCAwICovCisJc3RydWN0IGlzaWZfY29sX3BhdCBjb2xfcGF0X2ZpZWxkMDsKKwkvKiBjb2xvciBwYXR0ZXJuIGZvciBmaWVsZCAxICovCisJc3RydWN0IGlzaWZfY29sX3BhdCBjb2xfcGF0X2ZpZWxkMTsKKyNkZWZpbmUgSVNJRl9OT19TSElGVAkJMAorI2RlZmluZQlJU0lGXzFCSVRfU0hJRlQJCTEKKyNkZWZpbmUJSVNJRl8yQklUX1NISUZUCQkyCisjZGVmaW5lCUlTSUZfM0JJVF9TSElGVAkJMworI2RlZmluZQlJU0lGXzRCSVRfU0hJRlQJCTQKKyNkZWZpbmUgSVNJRl81QklUX1NISUZUCQk1CisjZGVmaW5lIElTSUZfNkJJVF9TSElGVAkJNgorCS8qIERhdGEgc2hpZnQgYXBwbGllZCBiZWZvcmUgc3RvcmluZyB0byBTRFJBTSAqLworCV9fdTggZGF0YV9zaGlmdDsKKwkvKiBlbmFibGUgaW5wdXQgdGVzdCBwYXR0ZXJuIGdlbmVyYXRpb24gKi8KKwlfX3U4IHRlc3RfcGF0X2dlbjsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3QgaXNpZl95Y2Jjcl9jb25maWcgeworCS8qIGlzaWYgcGl4ZWwgZm9ybWF0ICovCisJZW51bSBjY2RjX3BpeGZtdCBwaXhfZm10OworCS8qIGlzaWYgZnJhbWUgZm9ybWF0ICovCisJZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10OworCS8qIElTSUYgY3JvcCB3aW5kb3cgKi8KKwlzdHJ1Y3QgdjRsMl9yZWN0IHdpbjsKKwkvKiBmaWVsZCBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIGZpZF9wb2w7CisJLyogaW50ZXJmYWNlIFZEIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgdmRfcG9sOworCS8qIGludGVyZmFjZSBIRCBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIGhkX3BvbDsKKwkvKiBpc2lmIHBpeCBvcmRlci4gT25seSB1c2VkIGZvciB5Y2JjciBjYXB0dXJlICovCisJZW51bSBjY2RjX3BpeG9yZGVyIHBpeF9vcmRlcjsKKwkvKiBpc2lmIGJ1ZmZlciB0eXBlLiBPbmx5IHVzZWQgZm9yIHljYmNyIGNhcHR1cmUgKi8KKwllbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZTsKK307CisKKy8qIE1TQiBvZiBpbWFnZSBkYXRhIGNvbm5lY3RlZCB0byBzZW5zb3IgcG9ydCAqLworZW51bSBpc2lmX2RhdGFfbXNiIHsKKwlJU0lGX0JJVF9NU0JfMTUsCisJSVNJRl9CSVRfTVNCXzE0LAorCUlTSUZfQklUX01TQl8xMywKKwlJU0lGX0JJVF9NU0JfMTIsCisJSVNJRl9CSVRfTVNCXzExLAorCUlTSUZfQklUX01TQl8xMCwKKwlJU0lGX0JJVF9NU0JfOSwKKwlJU0lGX0JJVF9NU0JfOCwKKwlJU0lGX0JJVF9NU0JfNworfTsKKworZW51bSBpc2lmX2NmYV9wYXR0ZXJuIHsKKwlJU0lGX0NGQV9QQVRfTU9TQUlDLAorCUlTSUZfQ0ZBX1BBVF9TVFJJUEUKK307CisKK3N0cnVjdCBpc2lmX3BhcmFtc19yYXcgeworCS8qIGlzaWYgcGl4ZWwgZm9ybWF0ICovCisJZW51bSBjY2RjX3BpeGZtdCBwaXhfZm10OworCS8qIGlzaWYgZnJhbWUgZm9ybWF0ICovCisJZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10OworCS8qIHZpZGVvIHdpbmRvdyAqLworCXN0cnVjdCB2NGwyX3JlY3Qgd2luOworCS8qIGZpZWxkIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgZmlkX3BvbDsKKwkvKiBpbnRlcmZhY2UgVkQgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCB2ZF9wb2w7CisJLyogaW50ZXJmYWNlIEhEIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgaGRfcG9sOworCS8qIGJ1ZmZlciB0eXBlLiBBcHBsaWNhYmxlIGZvciBpbnRlcmxhY2VkIG1vZGUgKi8KKwllbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZTsKKwkvKiBHYWluIHZhbHVlcyAqLworCXN0cnVjdCBpc2lmX2dhaW4gZ2FpbjsKKwkvKiBjZmEgcGF0dGVybiAqLworCWVudW0gaXNpZl9jZmFfcGF0dGVybiBjZmFfcGF0OworCS8qIERhdGEgTVNCIHBvc2l0aW9uICovCisJZW51bSBpc2lmX2RhdGFfbXNiIGRhdGFfbXNiOworCS8qIEVuYWJsZSBob3Jpem9udGFsIGZsaXAgKi8KKwl1bnNpZ25lZCBjaGFyIGhvcnpfZmxpcF9lbjsKKwkvKiBFbmFibGUgaW1hZ2UgaW52ZXJ0IHZlcnRpY2FsbHkgKi8KKwl1bnNpZ25lZCBjaGFyIGltYWdlX2ludmVydF9lbjsKKworCS8qIGFsbCB0aGUgdXNlcmxhbmQgZGVmaW5lZCBzdHVmZiovCisJc3RydWN0IGlzaWZfY29uZmlnX3BhcmFtc19yYXcgY29uZmlnX3BhcmFtczsKK307CisKK2VudW0gaXNpZl9kYXRhX3BhY2sgeworCUlTSUZfUEFDS18xNkJJVCwKKwlJU0lGX1BBQ0tfMTJCSVQsCisJSVNJRl9QQUNLXzhCSVQKK307CisKKyNkZWZpbmUgSVNJRl9XSU5fTlRTQwkJCQl7MCwgMCwgNzIwLCA0ODB9CisjZGVmaW5lIElTSUZfV0lOX1ZHQQkJCQl7MCwgMCwgNjQwLCA0ODB9CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBzcy5oIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3Zwc3MuaAppbmRleCBmY2RmZjc0Li5jNTljYzAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBzcy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cHNzLmgKQEAgLTI5LDcgKzI5LDE5IEBACiAvKiBzZWxlY3RvciBmb3IgY2NkYyBpbnB1dCBzZWxlY3Rpb24gb24gRE0zNTUgKi8KIGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgewogCVZQU1NfQ0NEQ0lOLAotCVZQU1NfSFNTSUlOCisJVlBTU19IU1NJSU4sCisJVlBTU19QR0xQQkssCS8qIGZvciBETTM2NSBvbmx5ICovCisJVlBTU19DQ0RDUEcJLyogZm9yIERNMzY1IG9ubHkgKi8KK307CisKK3N0cnVjdCB2cHNzX3N5bmNfcG9sIHsKKwl1bnNpZ25lZCBpbnQgY2NkcGdfaGRwb2w6MTsKKwl1bnNpZ25lZCBpbnQgY2NkcGdfdmRwb2w6MTsKK307CisKK3N0cnVjdCB2cHNzX3BnX2ZyYW1lX3NpemUgeworCXNob3J0IGhscGZyOworCXNob3J0IHBwbGVuOwogfTsKIAogLyogVXNlZCBmb3IgZW5hYmxlL2RpYWJsZSBWUFNTIENsb2NrICovCkBAIC00NywxMiArNTksMzggQEAKIAkgKi8KIAlWUFNTX1ZFTkNfQ0xPQ0tfU0VMLAogCVZQU1NfVlBCRV9DTE9DSywKKwkvKiBETTM2NSBvbmx5IGNsb2NrcyAqLworCVZQU1NfSVBJUEVJRl9DTE9DSywKKwlWUFNTX1JTWl9DTE9DSywKKwlWUFNTX0JMX0NMT0NLLAorCS8qCisJICogV2hlbiB1c2luZyBWUFNTX1BDTEtfSU5URVJOQUwgaW4gdnBzc19lbmFibGVfY2xvY2soKSBhcGkKKwkgKiBmb2xsb3dpbmcgYXBwbGllczotCisJICogZW4gPSAwIGRpc2FibGUgaW50ZXJuYWwgUENMSworCSAqIGVuID0gMSBlbmFibGVzIGludGVybmFsIFBDTEsKKwkgKi8KKwlWUFNTX1BDTEtfSU5URVJOQUwsCisJLyoKKwkgKiBXaGVuIHVzaW5nIFZQU1NfUFNZTkNfQ0xPQ0tfU0VMIGluIHZwc3NfZW5hYmxlX2Nsb2NrKCkgYXBpCisJICogZm9sbG93aW5nIGFwcGxpZXM6LQorCSAqIGVuID0gMCBlbmFibGVzIE1NUiBjbG9jaworCSAqIGVuID0gMSBlbmFibGVzIFZQU1MgY2xvY2sKKwkgKi8KKwlWUFNTX1BTWU5DX0NMT0NLX1NFTCwKKwlWUFNTX0xEQ19DTE9DS19TRUwsCisJVlBTU19PU0RfQ0xPQ0tfU0VMLAorCVZQU1NfRkRJRl9DTE9DSywKKwlWUFNTX0xEQ19DTE9DSwogfTsKIAogLyogc2VsZWN0IGlucHV0IHRvIGNjZGMgb24gZG0zNTUgKi8KIGludCB2cHNzX3NlbGVjdF9jY2RjX3NvdXJjZShlbnVtIHZwc3NfY2NkY19zb3VyY2Vfc2VsIHNyY19zZWwpOwogLyogZW5hYmxlL2Rpc2FibGUgYSB2cHNzIGNsb2NrLCAwIC0gc3VjY2VzcywgLTEgLSBmYWlsdXJlICovCiBpbnQgdnBzc19lbmFibGVfY2xvY2soZW51bSB2cHNzX2Nsb2NrX3NlbCBjbG9ja19zZWwsIGludCBlbik7CisvKiBzZXQgc3luYyBwb2xhcml0eSwgb25seSBmb3IgRE0zNjUqLwordm9pZCBkbTM2NV92cHNzX3NldF9zeW5jX3BvbChzdHJ1Y3QgdnBzc19zeW5jX3BvbCk7CisvKiBzZXQgdGhlIFBHX0ZSQU1FX1NJWkUgcmVnaXN0ZXIsIG9ubHkgZm9yIERNMzY1ICovCit2b2lkIGRtMzY1X3Zwc3Nfc2V0X3BnX2ZyYW1lX3NpemUoc3RydWN0IHZwc3NfcGdfZnJhbWVfc2l6ZSk7CiAKIC8qIHdibCByZXNldCBmb3IgZG02NDR4ICovCiBlbnVtIHZwc3Nfd2JsX3NlbCB7CkBAIC02NSw1ICsxMDMsNiBAQAogCVZQU1NfUENSX1BSRVZfV0JMXzAsCiAJVlBTU19QQ1JfQ0NEQ19XQkxfTywKIH07CisvKiBjbGVhciB3Ymwgb3ZlcmZsb3cgZmxhZyBmb3IgRE02NDQ2ICovCiBpbnQgdnBzc19jbGVhcl93Ymxfb3ZlcmZsb3coZW51bSB2cHNzX3dibF9zZWwgd2JsX3NlbCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmggYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCmluZGV4IDJjNmFmMjQuLmM2NjI5ODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaApAQCAtMzUsNyArMzUsNyBAQAogCiBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgewogCS8qIGNvbmZpZ3VyYXRpb24gKi8KLQlpbnQgICAgICAgICAgICAgICAgaXJfdHlwZTsKKwl1NjQgICAgICBpcl90eXBlOwogCiAJLyoga2V5IGluZm8gKi8KIAl1MzIgICAgICAgICAgICAgICAgaXJfa2V5OyAgICAgIC8qIGlyIHNjYW5jb2RlICovCkBAIC04NCw3ICs4NCw3IEBACiAvKiBSb3V0aW5lcyBmcm9tIGlyLWZ1bmN0aW9ucy5jICovCiAKIGludCBpcl9pbnB1dF9pbml0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppciwKLQkJICAgaW50IGlyX3R5cGUpOworCQkgICBjb25zdCB1NjQgaXJfdHlwZSk7CiB2b2lkIGlyX2lucHV0X25va2V5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppcik7CiB2b2lkIGlyX2lucHV0X2tleWRvd24oc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyLAogCQkgICAgICB1MzIgaXJfa2V5KTsKQEAgLTE2Miw0ICsxNjIsNiBAQAogZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc192aWRlb21hdGVfczM1MF90YWJsZTsKIGV4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfZ2FkbWVpX3JtMDA4el90YWJsZTsKIGV4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHNfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3dpbmZhc3RfdXNiaWlfZGVsdXhlX3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19rd29ybGRfMzE1dV90YWJsZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb3JlLmggYi9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaAppbmRleCAyOTlkMjAxLi42MWMyMjNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaApAQCAtMjEsMTMgKzIxLDExIEBACiAjZGVmaW5lIElSX2RwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKQlpZiAoaXJfY29yZV9kZWJ1ZyA+PSBsZXZlbCkgXAogCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQgLCBfX2Z1bmNfXywgIyMgYXJnKQogCi1lbnVtIGlyX3R5cGUgewotCUlSX1RZUEVfVU5LTk9XTgk9IDAsCi0JSVJfVFlQRV9SQzUJPSAxLAotCUlSX1RZUEVfUEQJPSAyLAkJIC8qIFB1bHNlIGRpc3RhbmNlIGVuY29kZWQgSVIgKi8KLQlJUl9UWVBFX05FQwk9IDMsCi0JSVJfVFlQRV9PVEhFUgk9IDk5LAotfTsKKyNkZWZpbmUgSVJfVFlQRV9VTktOT1dOCTAKKyNkZWZpbmUgSVJfVFlQRV9SQzUJKDEgIDw8IDApCS8qIFBoaWxpcHMgUkM1IHByb3RvY29sICovCisjZGVmaW5lIElSX1RZUEVfUEQJKDEgIDw8IDEpCS8qIFB1bHNlIGRpc3RhbmNlIGVuY29kZWQgSVIgKi8KKyNkZWZpbmUgSVJfVFlQRV9ORUMJKDEgIDw8IDIpCisjZGVmaW5lIElSX1RZUEVfT1RIRVIJKCgodTY0KTEpIDw8IDYzbCkKIAogc3RydWN0IGlyX3NjYW5jb2RlIHsKIAl1MTYJc2NhbmNvZGU7CkBAIC0zNywyNiArMzUsNDAgQEAKIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSB7CiAJc3RydWN0IGlyX3NjYW5jb2RlCSpzY2FuOwogCWludAkJCXNpemU7Ci0JZW51bQkJCWlyX3R5cGUgaXJfdHlwZTsKKwl1NjQJCWlyX3R5cGU7CiAJc3BpbmxvY2tfdAkJbG9jazsKIH07CiAKLXN0cnVjdCBpcl9pbnB1dF9kZXYgewotCXN0cnVjdCBpbnB1dF9kZXYJCSpkZXY7Ci0Jc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlCXJjX3RhYjsKK3N0cnVjdCBpcl9kZXZfcHJvcHMgeworCXVuc2lnbmVkIGxvbmcgYWxsb3dlZF9wcm90b3M7CisJdm9pZCAJCSpwcml2OworCWludCAoKmNoYW5nZV9wcm90b2NvbCkodm9pZCAqcHJpdiwgdTY0IGlyX3R5cGUpOwogfTsKIAorCitzdHJ1Y3QgaXJfaW5wdXRfZGV2IHsKKwlzdHJ1Y3QgaW5wdXRfZGV2CQkqZGV2OwkJLyogSW5wdXQgZGV2aWNlKi8KKwlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUJcmNfdGFiOwkJLyogc2Nhbi9rZXkgdGFibGUgKi8KKwl1bnNpZ25lZCBsb25nCQkJZGV2bm87CQkvKiBkZXZpY2UgbnVtYmVyICovCisJc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkJYXR0cjsJCS8qIElSIGF0dHJpYnV0ZXMgKi8KKwlzdHJ1Y3QgZGV2aWNlCQkJKmNsYXNzX2RldjsJLyogdmlydHVhbCBjbGFzcyBkZXYgKi8KKwljb25zdCBzdHJ1Y3QgaXJfZGV2X3Byb3BzCSpwcm9wczsJCS8qIERldmljZSBwcm9wZXJ0aWVzICovCit9OworI2RlZmluZSB0b19pcl9pbnB1dF9kZXYoX2F0dHIpIGNvbnRhaW5lcl9vZihfYXR0ciwgc3RydWN0IGlyX2lucHV0X2RldiwgYXR0cikKKwogLyogUm91dGluZXMgZnJvbSBpci1rZXl0YWJsZS5jICovCiAKIHUzMiBpcl9nX2tleWNvZGVfZnJvbV90YWJsZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsCiAJCQkgICAgdTMyIHNjYW5jb2RlKTsKIAotaW50IGlyX3NldF9rZXljb2RlX3RhYmxlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwKLQkJCSBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYik7Ci0KLWludCBpcl9yb3VuZHVwX3RhYmxlc2l6ZShpbnQgbl9lbGVtcyk7CiBpbnQgaXJfaW5wdXRfcmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqZGV2LAotCQkgICAgICBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzKTsKKwkJICAgICAgY29uc3Qgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICppcl9jb2RlcywKKwkJICAgICAgY29uc3Qgc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHMpOwogdm9pZCBpcl9pbnB1dF91bnJlZ2lzdGVyKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldik7CiAKKy8qIFJvdXRpbmVzIGZyb20gaXItc3lzZnMuYyAqLworCitpbnQgaXJfcmVnaXN0ZXJfY2xhc3Moc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KTsKK3ZvaWQgaXJfdW5yZWdpc3Rlcl9jbGFzcyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oIGIvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmgKaW5kZXggYWFmNjVlOC4uOTE0MjkzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmgKQEAgLTM2LDcgKzM2LDcgQEAKIHN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhIHsKIAlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzOwogCWNvbnN0IGNoYXIgICAgICAgICAgICAgKm5hbWU7Ci0JaW50ICAgICAgICAgICAgICAgICAgICB0eXBlOyAvKiBJUl9UWVBFX1JDNSwgSVJfVFlQRV9QRCwgZXRjICovCisJdTY0ICAgICAgICAgIHR5cGU7IC8qIElSX1RZUEVfUkM1LCBJUl9UWVBFX1BELCBldGMgKi8KIAkvKgogCSAqIFNwZWNpZnkgZWl0aGVyIGEgZnVuY3Rpb24gcG9pbnRlciBvciBhIHZhbHVlIGluZGljYXRpbmcgb25lIG9mCiAJICogaXJfa2JkX2kyYydzIGludGVybmFsIGdldF9rZXkgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL292NzcyeC5oIGIvaW5jbHVkZS9tZWRpYS9vdjc3MnguaAppbmRleCAxNGM3N2VmLi41NDhiZjExIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL292NzcyeC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Y3NzJ4LmgKQEAgLTE1LDggKzE1LDkgQEAKICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAKIC8qIGZvciBmbGFncyAqLwotI2RlZmluZSBPVjc3MlhfRkxBR19WRkxJUCAgICAgMHgwMDAwMDAwMSAvKiBWZXJ0aWNhbCBmbGlwIGltYWdlICovCi0jZGVmaW5lIE9WNzcyWF9GTEFHX0hGTElQICAgICAweDAwMDAwMDAyIC8qIEhvcml6b250YWwgZmxpcCBpbWFnZSAqLworI2RlZmluZSBPVjc3MlhfRkxBR19WRkxJUAkoMSA8PCAwKSAvKiBWZXJ0aWNhbCBmbGlwIGltYWdlICovCisjZGVmaW5lIE9WNzcyWF9GTEFHX0hGTElQCSgxIDw8IDEpIC8qIEhvcml6b250YWwgZmxpcCBpbWFnZSAqLworI2RlZmluZSBPVjc3MlhfRkxBR184QklUCSgxIDw8IDIpIC8qIGRlZmF1bHQgMTAgYml0ICovCiAKIC8qCiAgKiBmb3IgRWRnZSBjdHJsCkBAIC01Myw5ICs1NCw4IEBACiAgKiBvdjc3MnggY2FtZXJhIGluZm8KICAqLwogc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICBidXN3aWR0aDsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgIGZsYWdzOwotCXN0cnVjdCBvdjc3MnhfZWRnZV9jdHJsIGVkZ2VjdHJsOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCBvdjc3MnhfZWRnZV9jdHJsCWVkZ2VjdHJsOwogfTsKIAogI2VuZGlmIC8qIF9fT1Y3NzJYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmggYi9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaAppbmRleCA0YWVmZjk2Li5iOWRhMWY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaAorKysgYi9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaApAQCAtMTg4LDYgKzE4OCw3IEBACiB2b2lkIHNhYTcxNDZfZG1hX2ZyZWUoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAogCQkJCQkJc3RydWN0IHNhYTcxNDZfYnVmICpidWYpOwogCitpbnQgc2FhNzE0Nl92dl9kZXZpbml0KHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2KTsKIGludCBzYWE3MTQ2X3Z2X2luaXQoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsIHN0cnVjdCBzYWE3MTQ2X2V4dF92diAqZXh0X3Z2KTsKIGludCBzYWE3MTQ2X3Z2X3JlbGVhc2Uoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaCBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oCmluZGV4IGRjYzViODYuLjlkNjlmMDFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaAorKysgYi9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaApAQCAtODEsNiArODEsOCBAQAogCWludCAoKnNldF9idXNfcGFyYW0pKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBfX3UzMik7CiAJaW50ICgqZ2V0X2N0cmwpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9jb250cm9sICopOwogCWludCAoKnNldF9jdHJsKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfY29udHJvbCAqKTsKKwlpbnQgKCpnZXRfcGFybSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKik7CisJaW50ICgqc2V0X3Bhcm0pKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICopOwogCXVuc2lnbmVkIGludCAoKnBvbGwpKHN0cnVjdCBmaWxlICosIHBvbGxfdGFibGUgKik7CiAJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjb250cm9sczsKIAlpbnQgbnVtX2NvbnRyb2xzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90aW1iX3JhZGlvLmggYi9pbmNsdWRlL21lZGlhL3RpbWJfcmFkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2QzMmEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS90aW1iX3JhZGlvLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIHRpbWJfcmFkaW8uaCBQbGF0Zm9ybSBzdHJ1Y3QgZm9yIHRoZSBUaW1iZXJkYWxlIHJhZGlvIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfVElNQl9SQURJT18KKyNkZWZpbmUgX1RJTUJfUkFESU9fIDEKKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCitzdHJ1Y3QgdGltYl9yYWRpb19wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgaTJjX2FkYXB0ZXI7IC8qIEkyQyBhZGFwdGVyIHdoZXJlIHRoZSB0dW5lciBhbmQgZHNwIGFyZSBhdHRhY2hlZCAqLworCXN0cnVjdCB7CisJCWNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lOworCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm87CisJfSB0dW5lcjsKKwlzdHJ1Y3QgeworCQljb25zdCBjaGFyICptb2R1bGVfbmFtZTsKKwkJc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvOworCX0gZHNwOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3R1bmVyLmggYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKaW5kZXggNGQ1YjUzZi4uNTUwNWM1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS90dW5lci5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdHVuZXIuaApAQCAtMTI5LDYgKzEyOSw3IEBACiAjZGVmaW5lIFRVTkVSX1BBUlRTTklDX1BUSV81TkYwNQk4MQogI2RlZmluZSBUVU5FUl9QSElMSVBTX0NVMTIxNkwgICAgICAgICAgIDgyCiAjZGVmaW5lIFRVTkVSX05YUF9UREExODI3MQkJODMKKyNkZWZpbmUgVFVORVJfU09OWV9CVEZfUFhOMDFaCQk4NAogCiAvKiB0diBjYXJkIHNwZWNpZmljICovCiAjZGVmaW5lIFREQTk4ODdfUFJFU0VOVCAJCSgxPDwwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dnA3MDAyLmggYi9pbmNsdWRlL21lZGlhL3R2cDcwMDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTQzNTM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS90dnA3MDAyLmgKQEAgLTAsMCArMSw1NiBAQAorLyogVGV4YXMgSW5zdHJ1bWVudHMgVHJpcGxlIDgtLzEwLUJJVCAxNjUtLzExMC1NU1BTIFZpZGVvIGFuZCBHcmFwaGljcworICogRGlnaXRpemVyIHdpdGggSG9yaXpvbnRhbCBQTEwgcmVnaXN0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICogQXV0aG9yOiBTYW50aWFnbyBOdW5lei1Db3JyYWxlcyA8c2FudGlhZ28ubnVuZXpAcmlkZ2VydW4uY29tPgorICoKKyAqIFRoaXMgY29kZSBpcyBwYXJ0aWFsbHkgYmFzZWQgdXBvbiB0aGUgVFZQNTE1MCBkcml2ZXIKKyAqIHdyaXR0ZW4gYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIChtY2hlaGFiQGluZnJhZGVhZC5vcmcpLAorICogdGhlIFRWUDUxNHggZHJpdmVyIHdyaXR0ZW4gYnkgVmFpYmhhdiBIaXJlbWF0aCA8aHZhaWJoYXZAdGkuY29tPgorICogYW5kIHRoZSBUVlA3MDAyIGRyaXZlciBpbiB0aGUgVEkgTFNQIDIuMTAuMDAuMTQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2lmbmRlZiBfVFZQNzAwMl9IXworI2RlZmluZSBfVFZQNzAwMl9IXworCisvKiBQbGF0Zm9ybS1kZXBlbmRlbnQgZGF0YQorICoKKyAqIGNsa19wb2xhcml0eToKKyAqIAkJCTAgLT4gZGF0YSBjbG9ja2VkIG91dCBvbiByaXNpbmcgZWRnZSBvZiBEQVRBQ0xLIHNpZ25hbAorICogCQkJMSAtPiBkYXRhIGNsb2NrZWQgb3V0IG9uIGZhbGxpbmcgZWRnZSBvZiBEQVRBQ0xLIHNpZ25hbAorICogaHNfcG9sYXJpdHk6CisgKiAJCQkwIC0+IGFjdGl2ZSBsb3cgSFNZTkMgb3V0cHV0CisgKiAJCQkxIC0+IGFjdGl2ZSBoaWdoIEhTWU5DIG91dHB1dAorICogc29nX3BvbGFyaXR5OgorICogCQkJMCAtPiBub3JtYWwgb3BlcmF0aW9uCisgKiAJCQkxIC0+IG9wZXJhdGlvbiB3aXRoIHBvbGFyaXR5IGludmVydGVkCisgKiB2c19wb2xhcml0eToKKyAqIAkJCTAgLT4gYWN0aXZlIGxvdyBWU1lOQyBvdXRwdXQKKyAqIAkJCTEgLT4gYWN0aXZlIGhpZ2ggVlNZTkMgb3V0cHV0CisgKiBmaWRfcG9sYXJpdHk6CisgKgkJCTAgLT4gdGhlIGZpZWxkIElEIG91dHB1dCBpcyBzZXQgdG8gbG9naWMgMSBmb3IgYW4gb2RkCisgKgkJCSAgICAgZmllbGQgKGZpZWxkIDEpIGFuZCBzZXQgdG8gbG9naWMgMCBmb3IgYW4gZXZlbgorICoJCQkgICAgIGZpZWxkIChmaWVsZCAwKS4KKyAqCQkJMSAtPiBvcGVyYXRpb24gd2l0aCBwb2xhcml0eSBpbnZlcnRlZC4KKyAqLworc3RydWN0IHR2cDcwMDJfY29uZmlnIHsKKwl1OCBjbGtfcG9sYXJpdHk7CisJdTggaHNfcG9sYXJpdHk7CisJdTggdnNfcG9sYXJpdHk7CisJdTggZmlkX3BvbGFyaXR5OworCXU4IHNvZ19wb2xhcml0eTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHc5OTEwLmggYi9pbmNsdWRlL21lZGlhL3R3OTkxMC5oCmluZGV4IDVlMjg5NWEuLjkwYmNmMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdHc5OTEwLmgKKysrIGIvaW5jbHVkZS9tZWRpYS90dzk5MTAuaApAQCAtMzAsOCArMzAsOCBAQAogfTsKIAogc3RydWN0IHR3OTkxMF92aWRlb19pbmZvIHsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgIGJ1c3dpZHRoOwotCWVudW0gdHc5OTEwX21wb3V0X3BpbiAgbXBvdXQ7CisJdW5zaWduZWQgbG9uZwkJYnVzd2lkdGg7CisJZW51bSB0dzk5MTBfbXBvdXRfcGluCW1wb3V0OwogfTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaAppbmRleCA2Y2MxMDdkLi41NmFiZjIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKQEAgLTM5LDYgKzM5LDcgQEAKIAogCS8qIG1vZHVsZSBzYWE3MTE1OiByZXNlcnZlZCByYW5nZSAxMDEtMTQ5ICovCiAJVjRMMl9JREVOVF9TQUE3MTExID0gMTAxLAorCVY0TDJfSURFTlRfU0FBNzExMUEgPSAxMDIsCiAJVjRMMl9JREVOVF9TQUE3MTEzID0gMTAzLAogCVY0TDJfSURFTlRfU0FBNzExNCA9IDEwNCwKIAlWNEwyX0lERU5UX1NBQTcxMTUgPSAxMDUsCkBAIC0xMzQsNiArMTM1LDkgQEAKIAkvKiBtb2R1bGVzIHRlZjY4NjI6IGp1c3QgaWRlbnQgNjg2MiAqLwogCVY0TDJfSURFTlRfVEVGNjg2MiA9IDY4NjIsCiAKKwkvKiBtb2R1bGUgdHZwNzAwMjoganVzdCBpZGVudCA3MDAyICovCisJVjRMMl9JREVOVF9UVlA3MDAyID0gNzAwMiwKKwogCS8qIG1vZHVsZSBhZHY3MTcwOiBqdXN0IGlkZW50IDcxNzAgKi8KIAlWNEwyX0lERU5UX0FEVjcxNzAgPSA3MTcwLAogCkBAIC0xNTUsNiArMTU5LDkgQEAKIAkvKiBtb2R1bGUgYWR2NzM0MzoganVzdCBpZGVudCA3MzQzICovCiAJVjRMMl9JREVOVF9BRFY3MzQzID0gNzM0MywKIAorCS8qIG1vZHVsZSBzYWE3NzA2aDoganVzdCBpZGVudCA3NzA2ICovCisJVjRMMl9JREVOVF9TQUE3NzA2SCA9IDc3MDYsCisKIAkvKiBtb2R1bGUgd204NzM5OiBqdXN0IGlkZW50IDg3MzkgKi8KIAlWNEwyX0lERU5UX1dNODczOSA9IDg3MzksCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaAppbmRleCA5YmE5OWNkLi4yYmNkY2EwIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCkBAIC0xODAsNiArMTgwLDcgQEAKIAlpbnQgKCpzX2Nsb2NrX2ZyZXEpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKTsKIAlpbnQgKCpzX2kyc19jbG9ja19mcmVxKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSk7CiAJaW50ICgqc19yb3V0aW5nKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgaW5wdXQsIHUzMiBvdXRwdXQsIHUzMiBjb25maWcpOworCWludCAoKnNfc3RyZWFtKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKTsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAppbmRleCAwZjdjMzc4Li40NTM3NWI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oCisrKyBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKQEAgLTE3Nyw3ICsxNzcsOSBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICoKIF9faW42X2Rldl9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKGRldi0+aXA2X3B0cik7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhkZXYtPmlwNl9wdHIsCisJCQkJICAgICByY3VfcmVhZF9sb2NrX2hlbGQoKSB8fAorCQkJCSAgICAgbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9jb25udHJhY2suaCBiL2luY2x1ZGUvbmV0L25ldG5zL2Nvbm50cmFjay5oCmluZGV4IGJhMWJhMGMuLjYzZDQ0OTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL2Nvbm50cmFjay5oCkBAIC0xMSw2ICsxMSw4IEBACiBzdHJ1Y3QgbmV0bnNfY3QgewogCWF0b21pY190CQljb3VudDsKIAl1bnNpZ25lZCBpbnQJCWV4cGVjdF9jb3VudDsKKwl1bnNpZ25lZCBpbnQJCWh0YWJsZV9zaXplOworCXN0cnVjdCBrbWVtX2NhY2hlCSpuZl9jb25udHJhY2tfY2FjaGVwOwogCXN0cnVjdCBobGlzdF9udWxsc19oZWFkCSpoYXNoOwogCXN0cnVjdCBobGlzdF9oZWFkCSpleHBlY3RfaGFzaDsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZAl1bmNvbmZpcm1lZDsKQEAgLTI4LDUgKzMwLDYgQEAKICNlbmRpZgogCWludAkJCWhhc2hfdm1hbGxvYzsKIAlpbnQJCQlleHBlY3Rfdm1hbGxvYzsKKwljaGFyCQkJKnNsYWJuYW1lOwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oCmluZGV4IDJlYjM4MTQuLjlhNGI4YjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaAorKysgYi9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgKQEAgLTQwLDYgKzQwLDcgQEAKIAlzdHJ1Y3QgeHRfdGFibGUJCSppcHRhYmxlX3NlY3VyaXR5OwogCXN0cnVjdCB4dF90YWJsZQkJKm5hdF90YWJsZTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZAkqbmF0X2J5c291cmNlOworCXVuc2lnbmVkIGludAkJbmF0X2h0YWJsZV9zaXplOwogCWludAkJCW5hdF92bWFsbG9jZWQ7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvZHMuaCBiL2luY2x1ZGUvcGNtY2lhL2RzLmgKaW5kZXggZWUxNDg1Ny4uZDU3ODQ3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvZHMuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9kcy5oCkBAIC00MCw3ICs0MCw3IEBACiAgKiBEb2N1bWVudGF0aW9uL3BjbWNpYS9kcml2ZXIudHh0IGZvciBkZXRhaWxzLgogKi8KIHN0cnVjdCBwY21jaWFfZHluaWRzIHsKLQlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCBtdXRleAkJbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9zcy5oIGIvaW5jbHVkZS9wY21jaWEvc3MuaAppbmRleCBjYmZiYTg4Li4zMjg5NmE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9zcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKQEAgLTEzNCw5ICsxMzQsOSBAQAogCiBzdHJ1Y3QgcGNtY2lhX3NvY2tldCB7CiAJc3RydWN0IG1vZHVsZQkJCSpvd25lcjsKLQlzcGlubG9ja190CQkJbG9jazsKIAlzb2NrZXRfc3RhdGVfdAkJCXNvY2tldDsKIAl1X2ludAkJCQlzdGF0ZTsKKwl1X2ludAkJCQlzdXNwZW5kZWRfc3RhdGU7CS8qIHN0YXRlIGJlZm9yZSBzdXNwZW5kICovCiAJdV9zaG9ydAkJCQlmdW5jdGlvbnM7CiAJdV9zaG9ydAkJCQlsb2NrX2NvdW50OwogCXBjY2FyZF9tZW1fbWFwCQkJY2lzX21lbTsKQEAgLTIwMCw5ICsyMDAsMTQgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJCSp0aHJlYWQ7CiAJc3RydWN0IGNvbXBsZXRpb24JCXRocmVhZF9kb25lOwogCXVuc2lnbmVkIGludAkJCXRocmVhZF9ldmVudHM7Ci0JLyogcHJvdGVjdHMgc29ja2V0IGgvdyBzdGF0ZSAqLworCXVuc2lnbmVkIGludAkJCXN5c2ZzX2V2ZW50czsKKworCS8qIEZvciB0aGUgbm9uLXRyaXZpYWwgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBsb2NrcywKKwkgKiBzZWUgRG9jdW1lbnRhdGlvbi9wY21jaWEvbG9ja2luZy50eHQgKi8KIAlzdHJ1Y3QgbXV0ZXgJCQlza3RfbXV0ZXg7Ci0JLyogcHJvdGVjdHMgdGhyZWFkX2V2ZW50cyAqLworCXN0cnVjdCBtdXRleAkJCW9wc19tdXRleDsKKworCS8qIHByb3RlY3RzIHRocmVhZF9ldmVudHMgYW5kIHN5c2ZzX2V2ZW50cyAqLwogCXNwaW5sb2NrX3QJCQl0aHJlYWRfbG9jazsKIAogCS8qIHBjbWNpYSAoMTYtYml0KSAqLwpAQCAtMjI1LDMwICsyMzAsMTkgQEAKIAkJdTgJCQlidXN5OjE7CiAJCS8qIHBjbWNpYSBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQgKi8KIAkJdTgJCQlkZWFkOjE7Ci0JCS8qIGEgbXVsdGlmdW5jdGlvbi1kZXZpY2UgYWRkIGV2ZW50IGlzIHBlbmRpbmcgKi8KLQkJdTgJCQlkZXZpY2VfYWRkX3BlbmRpbmc6MTsKLQkJLyogdGhlIHBlbmRpbmcgZXZlbnQgYWRkcyBhIG1mYyAoMSkgb3IgcGZjICgwKSAqLwotCQl1OAkJCW1mY19wZmM6MTsKKwkJLyogdGhlIFBDTUNJQSBjYXJkIGNvbnNpc3RzIG9mIHR3byBwc2V1ZG8gZGV2aWNlcyAqLworCQl1OAkJCWhhc19wZmM6MTsKIAotCQl1OAkJCXJlc2VydmVkOjM7CisJCXU4CQkJcmVzZXJ2ZWQ6NDsKIAl9IHBjbWNpYV9zdGF0ZTsKIAogCi0JLyogZm9yIGFkZGluZyBmdXJ0aGVyIHBzZXVkby1tdWx0aWZ1bmN0aW9uIGRldmljZXMgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCWRldmljZV9hZGQ7Ci0KICNpZmRlZiBDT05GSUdfUENNQ0lBX0lPQ1RMCiAJc3RydWN0IHVzZXJfaW5mb190CQkqdXNlcjsKIAl3YWl0X3F1ZXVlX2hlYWRfdAkJcXVldWU7CiAjZW5kaWYgLyogQ09ORklHX1BDTUNJQV9JT0NUTCAqLwogI2VuZGlmIC8qIENPTkZJR19QQ01DSUEgKi8KIAotCS8qIGNhcmRidXMgKDMyLWJpdCkgKi8KLSNpZmRlZiBDT05GSUdfQ0FSREJVUwotCXN0cnVjdCByZXNvdXJjZQkJCSpjYl9jaXNfcmVzOwotCXZvaWQgX19pb21lbQkJCSpjYl9jaXNfdmlydDsKLSNlbmRpZiAvKiBDT05GSUdfQ0FSREJVUyAqLwotCiAJLyogc29ja2V0IGRldmljZSAqLwogCXN0cnVjdCBkZXZpY2UJCQlkZXY7CiAJLyogZGF0YSBpbnRlcm5hbCB0byB0aGUgc29ja2V0IGRyaXZlciAqLwpAQCAtMjYzLDEzICsyNTcsMjUgQEAKICAqIC0gcGNjYXJkX3N0YXRpY19vcHMJCWlvbWVtIGFuZCBpb3BvcnQgYXJlYXMgYXJlIGFzc2lnbmVkIHN0YXRpY2FsbHkKICAqIC0gcGNjYXJkX2lvZHluX29wcwkJaW9tZW0gYXJlYXMgaXMgYXNzaWduZWQgc3RhdGljYWxseSwgaW9wb3J0CiAgKgkJCQlhcmVhcyBkeW5hbWljYWxseQorICoJCQkJSWYgdGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQsIHVzZQorICoJCQkJInNlbGVjdCBQQ0NBUkRfSU9EWU4iIGluIEtjb25maWcuCiAgKiAtIHBjY2FyZF9ub25zdGF0aWNfb3BzCWlvbWVtIGFuZCBpb3BvcnQgYXJlYXMgYXJlIGFzc2lnbmVkIGR5bmFtaWNhbGx5LgogICoJCQkJSWYgdGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQsIHVzZQogICoJCQkJInNlbGVjdCBQQ0NBUkRfTk9OU1RBVElDIiBpbiBLY29uZmlnLgorICoKICAqLwogZXh0ZXJuIHN0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzIHBjY2FyZF9zdGF0aWNfb3BzOworI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgfHwgZGVmaW5lZChDT05GSUdfUENNQ0lBX01PRFVMRSkKIGV4dGVybiBzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcyBwY2NhcmRfaW9keW5fb3BzOwogZXh0ZXJuIHN0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzIHBjY2FyZF9ub25zdGF0aWNfb3BzOworI2Vsc2UKKy8qIElmIFBDTUNJQSBpcyBub3QgdXNlZCwgYnV0IG9ubHkgQ0FSREJVUywgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgdXNlZAorICogYXQgYWxsLiBUaGVyZWZvcmUsIGRvIG5vdCB1c2UgdGhlIGxhcmdlICgyNDBLISkgcnNyY19ub25zdGF0aWMgbW9kdWxlCisgKi8KKyNkZWZpbmUgcGNjYXJkX2lvZHluX29wcyBwY2NhcmRfc3RhdGljX29wcworI2RlZmluZSBwY2NhcmRfbm9uc3RhdGljX29wcyBwY2NhcmRfc3RhdGljX29wcworI2VuZGlmCisKIAogLyogc29ja2V0IGRyaXZlcnMgYXJlIGV4cGVjdGVkIHRvIHVzZSB0aGVzZSBjYWxsYmFja3MgaW4gdGhlaXIgLmRydiBzdHJ1Y3QgKi8KIGV4dGVybiBpbnQgcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAppbmRleCA3YzQ0NDk5Li5kODBiNmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaApAQCAtMzQ4LDcgKzM0OCw4IEBACiAJCQkgICAgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICopOwogZXh0ZXJuIGludCBzY3NpX3Rlc3RfdW5pdF9yZWFkeShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCB0aW1lb3V0LAogCQkJCWludCByZXRyaWVzLCBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyICpzY3NpX2dldF92cGRfcGFnZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgdTggcGFnZSk7CitleHRlcm4gaW50IHNjc2lfZ2V0X3ZwZF9wYWdlKHN0cnVjdCBzY3NpX2RldmljZSAqLCB1OCBwYWdlLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkgICAgIGludCBidWZfbGVuKTsKIGV4dGVybiBpbnQgc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKIAkJCQkgZW51bSBzY3NpX2RldmljZV9zdGF0ZSBzdGF0ZSk7CiBleHRlcm4gc3RydWN0IHNjc2lfZXZlbnQgKnNkZXZfZXZ0X2FsbG9jKGVudW0gc2NzaV9kZXZpY2VfZXZlbnQgZXZ0X3R5cGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmgKaW5kZXggNjFhZDM1OS4uZmZlZWJjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuaApAQCAtMTA3LDYgKzEwNyw4IEBACiAJc3RydWN0IHNhc19ycGh5CQlycGh5OwogCS8qIGZsYWdzICovCiAJdW5zaWduZWQJCXJlYWR5X2xlZF9tZWFuaW5nOjE7CisJdW5zaWduZWQJCXRscl9zdXBwb3J0ZWQ6MTsKKwl1bnNpZ25lZAkJdGxyX2VuYWJsZWQ6MTsKIAkvKiBwYXJhbWV0ZXJzICovCiAJdTE2CQkJSV9UX25leHVzX2xvc3NfdGltZW91dDsKIAl1MTYJCQlpbml0aWF0b3JfcmVzcG9uc2VfdGltZW91dDsKQEAgLTE4MSw2ICsxODMsMTEgQEAKIGV4dGVybiB2b2lkIHNhc19waHlfZGVsZXRlKHN0cnVjdCBzYXNfcGh5ICopOwogZXh0ZXJuIGludCBzY3NpX2lzX3Nhc19waHkoY29uc3Qgc3RydWN0IGRldmljZSAqKTsKIAordW5zaWduZWQgaW50IHNhc190bHJfc3VwcG9ydGVkKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKK3Vuc2lnbmVkIGludCBzYXNfaXNfdGxyX2VuYWJsZWQoc3RydWN0IHNjc2lfZGV2aWNlICopOwordm9pZCBzYXNfZGlzYWJsZV90bHIoc3RydWN0IHNjc2lfZGV2aWNlICopOwordm9pZCBzYXNfZW5hYmxlX3RscihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7CisKIGV4dGVybiBzdHJ1Y3Qgc2FzX3JwaHkgKnNhc19lbmRfZGV2aWNlX2FsbG9jKHN0cnVjdCBzYXNfcG9ydCAqKTsKIGV4dGVybiBzdHJ1Y3Qgc2FzX3JwaHkgKnNhc19leHBhbmRlcl9hbGxvYyhzdHJ1Y3Qgc2FzX3BvcnQgKiwgZW51bSBzYXNfZGV2aWNlX3R5cGUpOwogdm9pZCBzYXNfcnBoeV9mcmVlKHN0cnVjdCBzYXNfcnBoeSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvY29yZS5oIGIvaW5jbHVkZS9zb3VuZC9jb3JlLmgKaW5kZXggYTYxNDk5Yy4uODllMGFjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9jb3JlLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9jb3JlLmgKQEAgLTQ1OCw1ICs0NTgsOCBAQAogY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKgogc25kX3BjaV9xdWlya19sb29rdXAoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKmxpc3QpOwogCitjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqCitzbmRfcGNpX3F1aXJrX2xvb2t1cF9pZCh1MTYgdmVuZG9yLCB1MTYgZGV2aWNlLAorCQkJY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKmxpc3QpOwogCiAjZW5kaWYgLyogX19TT1VORF9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvY3M0Nnh4X2RzcF9zcG9zLmggYi9pbmNsdWRlL3NvdW5kL2NzNDZ4eF9kc3Bfc3Bvcy5oCmluZGV4IDdjNDQ2NjcuLjQ5YjAzYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY3M0Nnh4X2RzcF9zcG9zLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9jczQ2eHhfZHNwX3Nwb3MuaApAQCAtMTE4LDkgKzExOCwxMSBAQAogCiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpwcm9jX2luZm87CiAJaW50IHJlZl9jb3VudDsKLQlzcGlubG9ja190IGxvY2s7CiAKLQlpbnQgZGVsZXRlZDsKKwl1MTYgdm9sdW1lWzJdOworCXVuc2lnbmVkIGludCBkZWxldGVkIDoxOworCXVuc2lnbmVkIGludCB1cGRhdGVkIDoxOworCXVuc2lnbmVkIGludCB2b2x1bWVfc2V0IDoxOwogfTsKIAogc3RydWN0IGRzcF90YXNrX2Rlc2NyaXB0b3IgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY20uaCBiL2luY2x1ZGUvc291bmQvcGNtLmgKaW5kZXggYzgzYTRhNy4uOGI2MTFhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY20uaAorKysgYi9pbmNsdWRlL3NvdW5kL3BjbS5oCkBAIC0yNjIsNiArMjYyLDggQEAKIAl1bnNpZ25lZCBpbnQgbWFzazsKIH07CiAKK3N0cnVjdCBzbmRfcGNtX2h3cHRyX2xvZzsKKwogc3RydWN0IHNuZF9wY21fcnVudGltZSB7CiAJLyogLS0gU3RhdHVzIC0tICovCiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICp0cmlnZ2VyX21hc3RlcjsKQEAgLTMxMCw3ICszMTIsOSBAQAogCXN0cnVjdCBzbmRfcGNtX21tYXBfY29udHJvbCAqY29udHJvbDsKIAogCS8qIC0tIGxvY2tpbmcgLyBzY2hlZHVsaW5nIC0tICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3Qgc2xlZXA7CisJdW5zaWduZWQgaW50IHR3YWtlOiAxOwkJLyogZG8gdHJhbnNmZXIgKCFwb2xsKSB3YWtldXAgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBzbGVlcDsJLyogcG9sbCBzbGVlcCAqLworCXdhaXRfcXVldWVfaGVhZF90IHRzbGVlcDsJLyogdHJhbnNmZXIgc2xlZXAgKi8KIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jOwogCiAJLyogLS0gcHJpdmF0ZSBzZWN0aW9uIC0tICovCkBAIC0zNDAsNiArMzQ0LDEwIEBACiAJLyogLS0gT1NTIHRoaW5ncyAtLSAqLwogCXN0cnVjdCBzbmRfcGNtX29zc19ydW50aW1lIG9zczsKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRworCXN0cnVjdCBzbmRfcGNtX2h3cHRyX2xvZyAqaHdwdHJfbG9nOworI2VuZGlmCiB9OwogCiBzdHJ1Y3Qgc25kX3BjbV9ncm91cCB7CQkvKiBrZWVwIGxpbmtlZCBzdWJzdHJlYW1zICovCkBAIC04MzQsNiArODQyLDggQEAKIGludCBzbmRfcGNtX2xpYl9pbnRlcmxlYXZlX2xlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CiBpbnQgc25kX3BjbV9saWJfaW9jdGwoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7ICAgICAgICAgICAgICAgICAgICAgIAoraW50IHNuZF9wY21fdXBkYXRlX3N0YXRlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpOwogaW50IHNuZF9wY21fdXBkYXRlX2h3X3B0cihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CiBpbnQgc25kX3BjbV9wbGF5YmFja194cnVuX2NoZWNrKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKIGludCBzbmRfcGNtX2NhcHR1cmVfeHJ1bl9jaGVjayhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CkBAIC05MDUsNiArOTE1LDQ0IEBACiBpbnQgc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzaXplX3Qgc2l6ZSk7CiBpbnQgc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CiAKK2ludCBfc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgICAgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncyk7CitpbnQgc25kX3BjbV9saWJfZnJlZV92bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CitzdHJ1Y3QgcGFnZSAqc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisjaWYgMCAvKiBmb3Iga2VybmVsLWRvYyAqLworLyoqCisgKiBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlciAtIGFsbG9jYXRlIHZpcnR1YWwgRE1BIGJ1ZmZlcgorICogQHN1YnN0cmVhbTogdGhlIHN1YnN0cmVhbSB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvCisgKiBAc2l6ZTogdGhlIHJlcXVlc3RlZCBidWZmZXIgc2l6ZSwgaW4gYnl0ZXMKKyAqCisgKiBBbGxvY2F0ZXMgdGhlIFBDTSBzdWJzdHJlYW0gYnVmZmVyIHVzaW5nIHZtYWxsb2MoKSwgaS5lLiwgdGhlIG1lbW9yeSBpcworICogY29udGlndW91cyBpbiBrZXJuZWwgdmlydHVhbCBzcGFjZSwgYnV0IG5vdCBpbiBwaHlzaWNhbCBtZW1vcnkuICBVc2UgdGhpcworICogaWYgdGhlIGJ1ZmZlciBpcyBhY2Nlc3NlZCBieSBrZXJuZWwgY29kZSBidXQgbm90IGJ5IGRldmljZSBETUEuCisgKgorICogUmV0dXJucyAxIGlmIHRoZSBidWZmZXIgd2FzIGNoYW5nZWQsIDAgaWYgbm90IGNoYW5nZWQsIG9yIGEgbmVnYXRpdmUgZXJyb3IKKyAqIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIKKwkJCShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgc2l6ZV90IHNpemUpOworLyoqCisgKiBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jXzMyX2J1ZmZlciAtIGFsbG9jYXRlIDMyLWJpdC1hZGRyZXNzYWJsZSBidWZmZXIKKyAqIEBzdWJzdHJlYW06IHRoZSBzdWJzdHJlYW0gdG8gYWxsb2NhdGUgdGhlIGJ1ZmZlciB0bworICogQHNpemU6IHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHNpemUsIGluIGJ5dGVzCisgKgorICogVGhpcyBmdW5jdGlvbiB3b3JrcyBsaWtlIHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKCksIGJ1dCB1c2VzCisgKiB2bWFsbG9jXzMyKCksIGkuZS4sIHRoZSBwYWdlcyBhcmUgYWxsb2NhdGVkIGZyb20gMzItYml0LWFkZHJlc3NhYmxlIG1lbW9yeS4KKyAqLworc3RhdGljIGludCBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jXzMyX2J1ZmZlcgorCQkJKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzaXplX3Qgc2l6ZSk7CisjZW5kaWYKKyNkZWZpbmUgc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIoc3Vicywgc2l6ZSkgXAorCV9zbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlciBcCisJCQkoc3Vicywgc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9aRVJPKQorI2RlZmluZSBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jXzMyX2J1ZmZlcihzdWJzLCBzaXplKSBcCisJX3NuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyIFwKKwkJCShzdWJzLCBzaXplLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTykKKwogI2lmZGVmIENPTkZJR19TTkRfRE1BX1NHQlVGCiAvKgogICogU0ctYnVmZmVyIGhhbmRsaW5nCkBAIC05NzUsNiArMTAyMywxMCBAQAogI2RlZmluZSBzbmRfcGNtX2xpYl9tbWFwX2lvbWVtCU5VTEwKICNlbmRpZgogCitpbnQgc25kX3BjbV9saWJfbW1hcF9ub25jYWNoZWQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKTsKKyNkZWZpbmUgc25kX3BjbV9saWJfbW1hcF92bWFsbG9jCXNuZF9wY21fbGliX21tYXBfbm9uY2FjaGVkCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbmRfcGNtX2xpbWl0X2lzYV9kbWFfc2l6ZShpbnQgZG1hLCBzaXplX3QgKm1heCkKIHsKIAkqbWF4ID0gZG1hIDwgNCA/IDY0ICogMTAyNCA6IDEyOCAqIDEwMjQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3BjbV9vc3MuaCBiL2luY2x1ZGUvc291bmQvcGNtX29zcy5oCmluZGV4IGNjNGUyMjYuLjc2MGM5NjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcGNtX29zcy5oCisrKyBiL2luY2x1ZGUvc291bmQvcGNtX29zcy5oCkBAIC02MSw3ICs2MSw3IEBACiAJc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW5fZmlyc3Q7CiAJc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW5fbGFzdDsKICNlbmRpZgotCXVuc2lnbmVkIGludCBwcmV2X2h3X3B0cl9pbnRlcnJ1cHQ7CisJdW5zaWduZWQgaW50IHByZXZfaHdfcHRyX3BlcmlvZDsKIH07CiAKIHN0cnVjdCBzbmRfcGNtX29zc19maWxlIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc2IuaCBiL2luY2x1ZGUvc291bmQvc2IuaAppbmRleCA0ZTYyZWUxLi45NTM1MzU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NiLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zYi5oCkBAIC0zMyw2ICszMyw3IEBACiAJU0JfSFdfMjAsCiAJU0JfSFdfMjAxLAogCVNCX0hXX1BSTywKKwlTQl9IV19KQVpaMTYsCQkvKiBNZWRpYSBWaXNpb24gSmF6ejE2ICovCiAJU0JfSFdfMTYsCiAJU0JfSFdfMTZDU1AsCQkvKiBTQjE2IHdpdGggQ1NQIGNoaXAgKi8KIAlTQl9IV19BTFMxMDAsCQkvKiBBdmFuY2UgTG9naWMgQUxTMTAwIGNoaXAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLWRhaS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKaW5kZXggY2EyNGU3Zi4uMDYxZjE2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKQEAgLTE2LDYgKzE2LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCiBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmggYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKaW5kZXggYzVjOTVlMWQuLmMwOTIyYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKQEAgLTk1LDYgKzk1LDIxIEBACiAJLnNoaWZ0ID0gd3NoaWZ0LCAuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgXAogCS5udW1fa2NvbnRyb2xzID0gMX0KIAorLyogU2ltcGxpZmllZCB2ZXJzaW9ucyBvZiBhYm92ZSBtYWNyb3MsIGFzc3VtaW5nIHduY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scykgKi8KKyNkZWZpbmUgU09DX1BHQV9BUlJBWSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LFwKKwkgd2NvbnRyb2xzKSBcCit7CS5pZCA9IHNuZF9zb2NfZGFwbV9wZ2EsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scyl9CisjZGVmaW5lIFNPQ19NSVhFUl9BUlJBWSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCBcCisJIHdjb250cm9scylcCit7CS5pZCA9IHNuZF9zb2NfZGFwbV9taXhlciwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IEFSUkFZX1NJWkUod2NvbnRyb2xzKX0KKyNkZWZpbmUgU09DX01JWEVSX05BTUVEX0NUTF9BUlJBWSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCBcCisJIHdjb250cm9scylcCit7ICAgICAgIC5pZCA9IHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCBcCisJLnNoaWZ0ID0gd3NoaWZ0LCAuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgXAorCS5udW1fa2NvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpfQorCiAvKiBwYXRoIGRvbWFpbiB3aXRoIGV2ZW50IC0gZXZlbnQgaGFuZGxlciBtdXN0IHJldHVybiAwIGZvciBzdWNjZXNzICovCiAjZGVmaW5lIFNORF9TT0NfREFQTV9QR0FfRSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCB3Y29udHJvbHMsIFwKIAl3bmNvbnRyb2xzLCB3ZXZlbnQsIHdmbGFncykgXApAQCAtMTI2LDYgKzE0MSwyMyBAQAogCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IDEsIFwKIAkuZXZlbnQgPSB3ZXZlbnQsIC5ldmVudF9mbGFncyA9IHdmbGFnc30KIAorLyogU2ltcGxpZmllZCB2ZXJzaW9ucyBvZiBhYm92ZSBtYWNyb3MsIGFzc3VtaW5nIHduY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scykgKi8KKyNkZWZpbmUgU09DX1BHQV9FX0FSUkFZKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIHdjb250cm9scywgXAorCXdldmVudCwgd2ZsYWdzKSBcCit7CS5pZCA9IHNuZF9zb2NfZGFwbV9wZ2EsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scyksIFwKKwkuZXZlbnQgPSB3ZXZlbnQsIC5ldmVudF9mbGFncyA9IHdmbGFnc30KKyNkZWZpbmUgU09DX01JWEVSX0VfQVJSQVkod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgd2NvbnRyb2xzLCBcCisJd2V2ZW50LCB3ZmxhZ3MpIFwKK3sJLmlkID0gc25kX3NvY19kYXBtX21peGVyLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCisJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpLCBcCisJLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CisjZGVmaW5lIFNPQ19NSVhFUl9OQU1FRF9DVExfRV9BUlJBWSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCBcCisJd2NvbnRyb2xzLCB3ZXZlbnQsIHdmbGFncykgXAoreyAgICAgICAuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXIsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgXAorCS5udW1fa2NvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpLCAuZXZlbnQgPSB3ZXZlbnQsIC5ldmVudF9mbGFncyA9IHdmbGFnc30KKwogLyogZXZlbnRzIHRoYXQgYXJlIHByZSBhbmQgcG9zdCBEQVBNICovCiAjZGVmaW5lIFNORF9TT0NfREFQTV9QUkUod25hbWUsIHdldmVudCkgXAogewkuaWQgPSBzbmRfc29jX2RhcG1fcHJlLCAubmFtZSA9IHduYW1lLCAua2NvbnRyb2xzID0gTlVMTCwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MuaCBiL2luY2x1ZGUvc291bmQvc29jLmgKaW5kZXggMGQ3NzE4ZjkuLjVkMjM0YTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MuaApAQCAtMTY5LDYgKzE2OSwyMyBAQAogCS5wcml2YXRlX3ZhbHVlID0gKHVuc2lnbmVkIGxvbmcpJnhlbnVtIH0KIAogLyoKKyAqIFNpbXBsaWZpZWQgdmVyc2lvbnMgb2YgYWJvdmUgbWFjcm9zLCBkZWNsYXJpbmcgYSBzdHJ1Y3QgYW5kIGNhbGN1bGF0aW5nCisgKiBBUlJBWV9TSVpFIGludGVybmFsbHkKKyAqLworI2RlZmluZSBTT0NfRU5VTV9ET1VCTEVfREVDTChuYW1lLCB4cmVnLCB4c2hpZnRfbCwgeHNoaWZ0X3IsIHh0ZXh0cykgXAorCXN0cnVjdCBzb2NfZW51bSBuYW1lID0gU09DX0VOVU1fRE9VQkxFKHhyZWcsIHhzaGlmdF9sLCB4c2hpZnRfciwgXAorCQkJCQkJQVJSQVlfU0laRSh4dGV4dHMpLCB4dGV4dHMpCisjZGVmaW5lIFNPQ19FTlVNX1NJTkdMRV9ERUNMKG5hbWUsIHhyZWcsIHhzaGlmdCwgeHRleHRzKSBcCisJU09DX0VOVU1fRE9VQkxFX0RFQ0wobmFtZSwgeHJlZywgeHNoaWZ0LCB4c2hpZnQsIHh0ZXh0cykKKyNkZWZpbmUgU09DX0VOVU1fU0lOR0xFX0VYVF9ERUNMKG5hbWUsIHh0ZXh0cykgXAorCXN0cnVjdCBzb2NfZW51bSBuYW1lID0gU09DX0VOVU1fU0lOR0xFX0VYVChBUlJBWV9TSVpFKHh0ZXh0cyksIHh0ZXh0cykKKyNkZWZpbmUgU09DX1ZBTFVFX0VOVU1fRE9VQkxFX0RFQ0wobmFtZSwgeHJlZywgeHNoaWZ0X2wsIHhzaGlmdF9yLCB4bWFzaywgeHRleHRzLCB4dmFsdWVzKSBcCisJc3RydWN0IHNvY19lbnVtIG5hbWUgPSBTT0NfVkFMVUVfRU5VTV9ET1VCTEUoeHJlZywgeHNoaWZ0X2wsIHhzaGlmdF9yLCB4bWFzaywgXAorCQkJCQkJCUFSUkFZX1NJWkUoeHRleHRzKSwgeHRleHRzLCB4dmFsdWVzKQorI2RlZmluZSBTT0NfVkFMVUVfRU5VTV9TSU5HTEVfREVDTChuYW1lLCB4cmVnLCB4c2hpZnQsIHhtYXNrLCB4dGV4dHMsIHh2YWx1ZXMpIFwKKwlTT0NfVkFMVUVfRU5VTV9ET1VCTEVfREVDTChuYW1lLCB4cmVnLCB4c2hpZnQsIHhzaGlmdCwgeG1hc2ssIHh0ZXh0cywgeHZhbHVlcykKKworLyoKICAqIEJpYXMgbGV2ZWxzCiAgKgogICogQE9OOiAgICAgIEJpYXMgaXMgZnVsbHkgb24gZm9yIGF1ZGlvIHBsYXliYWNrIGFuZCBjYXB0dXJlIG9wZXJhdGlvbnMuCkBAIC0yNTMsNiArMjcwLDkgQEAKIC8qIGNvZGVjIHJlZ2lzdGVyIGJpdCBhY2Nlc3MgKi8KIGludCBzbmRfc29jX3VwZGF0ZV9iaXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgc2hvcnQgcmVnLAogCQkJCXVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgdmFsdWUpOworaW50IHNuZF9zb2NfdXBkYXRlX2JpdHNfbG9ja2VkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIGludCBtYXNrLAorCQkJICAgICAgIHVuc2lnbmVkIGludCB2YWx1ZSk7CiBpbnQgc25kX3NvY190ZXN0X2JpdHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBzaG9ydCByZWcsCiAJCQkJdW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCB2YWx1ZSk7CiAKQEAgLTQwMiw2ICs0MjIsMTAgQEAKIAlzaG9ydCByZWdfY2FjaGVfc2l6ZTsKIAlzaG9ydCByZWdfY2FjaGVfc3RlcDsKIAorCXVuc2lnbmVkIGludCBpZGxlX2JpYXNfb2ZmOjE7IC8qIFVzZSBCSUFTX09GRiBpbnN0ZWFkIG9mIFNUQU5EQlkgKi8KKwl1bnNpZ25lZCBpbnQgY2FjaGVfb25seToxOyAgLyogU3VwcHJlc3Mgd3JpdGVzIHRvIGhhcmR3YXJlICovCisJdW5zaWduZWQgaW50IGNhY2hlX3N5bmM6MTsgLyogQ2FjaGUgbmVlZHMgdG8gYmUgc3luY2VkIHRvIGhhcmR3YXJlICovCisKIAkvKiBkYXBtICovCiAJdTMyIHBvcF90aW1lOwogCXN0cnVjdCBsaXN0X2hlYWQgZGFwbV93aWRnZXRzOwpAQCAtNDk3LDYgKzUyMSw4IEBACiAJaW50ICgqc2V0X2JpYXNfbGV2ZWwpKHN0cnVjdCBzbmRfc29jX2NhcmQgKiwKIAkJCSAgICAgIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKTsKIAorCWxvbmcgcG1kb3duX3RpbWU7CisKIAkvKiBDUFUgPC0tPiBDb2RlYyBEQUkgbGlua3MgICovCiAJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmRhaV9saW5rOwogCWludCBudW1fbGlua3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3RsdjMyMGRhYzMzLXBsYXQuaCBiL2luY2x1ZGUvc291bmQvdGx2MzIwZGFjMzMtcGxhdC5oCmluZGV4IDU4NThkMDYuLmFjMDY2NTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvdGx2MzIwZGFjMzMtcGxhdC5oCisrKyBiL2luY2x1ZGUvc291bmQvdGx2MzIwZGFjMzMtcGxhdC5oCkBAIC0xNSw2ICsxNSw3IEBACiAKIHN0cnVjdCB0bHYzMjBkYWMzM19wbGF0Zm9ybV9kYXRhIHsKIAlpbnQgcG93ZXJfZ3BpbzsKKwl1OCBidXJzdF9iY2xrZGl2OwogfTsKIAogI2VuZGlmIC8qIF9fVExWMzIwREFDMzNfUExBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3RwYTYxMzBhMi1wbGF0LmggYi9pbmNsdWRlL3NvdW5kL3RwYTYxMzBhMi1wbGF0LmgKaW5kZXggZThjOTAxZS4uZTI5ZmRlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC90cGE2MTMwYTItcGxhdC5oCisrKyBiL2luY2x1ZGUvc291bmQvdHBhNjEzMGEyLXBsYXQuaApAQCAtMjMsNyArMjMsMTMgQEAKICNpZm5kZWYgVFBBNjEzMEEyX1BMQVRfSAogI2RlZmluZSBUUEE2MTMwQTJfUExBVF9ICiAKK2VudW0gdHBhX21vZGVsIHsKKwlUUEE2MTMwQTIsCisJVFBBNjE0MEEyLAorfTsKKwogc3RydWN0IHRwYTYxMzBhMl9wbGF0Zm9ybV9kYXRhIHsKKwllbnVtIHRwYV9tb2RlbCBpZDsKIAlpbnQgcG93ZXJfZ3BpbzsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKaW5kZXggMjI5MzkxNC4uN2ZlZDIzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKKysrIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKQEAgLTEsMyArMSwzIEBACiAvKiBpbmNsdWRlL3ZlcnNpb24uaCAqLwotI2RlZmluZSBDT05GSUdfU05EX1ZFUlNJT04gIjEuMC4yMSIKKyNkZWZpbmUgQ09ORklHX1NORF9WRVJTSU9OICIxLjAuMjIuMSIKICNkZWZpbmUgQ09ORklHX1NORF9EQVRFICIiCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3dtMjAwMC5oIGIvaW5jbHVkZS9zb3VuZC93bTIwMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTM4OGNhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC93bTIwMDAuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogbGludXgvc291bmQvd20yMDAwLmggLS0gUGxhdGZvcm0gZGF0YSBmb3IgV00yMDAwCisgKgorICogQ29weXJpZ2h0IDIwMTAgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzLiBQTEMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfU05EX1dNMjAwMF9ICisjZGVmaW5lIF9fTElOVVhfU05EX1dNMjAwMF9ICisKK3N0cnVjdCB3bTIwMDBfcGxhdGZvcm1fZGF0YSB7CisJLyoqIEZpbGVuYW1lIGZvciBzeXN0ZW0tc3BlY2lmaWMgaW1hZ2UgdG8gZG93bmxvYWQgdG8gZGV2aWNlLiAqLworCWNvbnN0IGNoYXIgKmRvd25sb2FkX2ZpbGU7CisKKwkvKiogRGl2aWRlIE1DTEsgYnkgMiBmb3Igc3lzdGVtIGNsb2NrPyAqLworCXVuc2lnbmVkIGludCBtY2xrZGl2MjoxOworCisJLyoqIERpc2FibGUgc3BlZWNoIGNsYXJpdHkgZW5oYW5jZW1lbnQsIGZvciB1c2Ugd2hlbiBhbgorCSAqIGV4dGVybmFsIGFsZ29yaXRobSBpcyB1c2VkLiAqLworCXVuc2lnbmVkIGludCBzcGVlY2hfZW5oX2Rpc2FibGU6MTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC93bTg5MDQuaCBiL2luY2x1ZGUvc291bmQvd204OTA0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2NTc1YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvd204OTA0LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIFBsYXRmb3JtIGRhdGEgZm9yIFdNODkwNAorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX01GRF9XTTg5OTRfUERBVEFfSF9fCisjZGVmaW5lIF9fTUZEX1dNODk5NF9QREFUQV9IX18KKworI2RlZmluZSBXTTg5MDRfRFJDX1JFR1MgNAorI2RlZmluZSBXTTg5MDRfRVFfUkVHUyAgMjUKKworLyoqCisgKiBEUkMgY29uZmlndXJhdGlvbnMgYXJlIHNwZWNpZmllZCB3aXRoIGEgbGFiZWwgYW5kIGEgc2V0IG9mIHJlZ2lzdGVyCisgKiB2YWx1ZXMgdG8gd3JpdGUgKHRoZSBlbmFibGUgYml0cyB3aWxsIGJlIGlnbm9yZWQpLiAgQXQgcnVudGltZSBhbgorICogZW51bWVyYXRlZCBjb250cm9sIHdpbGwgYmUgcHJlc2VudGVkIGZvciBlYWNoIERSQyBibG9jayBhbGxvd2luZworICogdGhlIHVzZXIgdG8gY2hvb3NlIHRoZSBjb25maWdyYXRpb24gdG8gdXNlLgorICoKKyAqIENvbmZpZ3VyYXRpb25zIG1heSBiZSBnZW5lcmF0ZWQgYnkgaGFuZCBvciBieSB1c2luZyB0aGUgRFJDIGNvbnRyb2wKKyAqIHBhbmVsIHByb3ZpZGVkIGJ5IHRoZSBXSVNDRSAtIHNlZSAgaHR0cDovL3d3dy53b2xmc29ubWljcm8uY29tL3dpc2NlLworICogZm9yIGRldGFpbHMuCisgKi8KK3N0cnVjdCB3bTg5MDRfZHJjX2NmZyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1MTYgcmVnc1tXTTg5MDRfRFJDX1JFR1NdOworfTsKKworLyoqCisgKiBSZVR1bmUgTW9iaWxlIGNvbmZpZ3VyYXRpb25zIGFyZSBzcGVjaWZpZWQgd2l0aCBhIGxhYmVsLCBzYW1wbGUKKyAqIHJhdGUgYW5kIHNldCBvZiB2YWx1ZXMgdG8gd3JpdGUgKHRoZSBlbmFibGUgYml0cyB3aWxsIGJlIGlnbm9yZWQpLgorICoKKyAqIENvbmZpZ3VyYXRpb25zIGFyZSBleHBlY3RlZCB0byBiZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIFJlVHVuZSBNb2JpbGUKKyAqIGNvbnRyb2wgcGFuZWwgaW4gV0lTQ0UgLSBzZWUgaHR0cDovL3d3dy53b2xmc29ubWljcm8uY29tL3dpc2NlLworICovCitzdHJ1Y3Qgd204OTA0X3JldHVuZV9tb2JpbGVfY2ZnIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCByYXRlOworCXUxNiByZWdzW1dNODkwNF9FUV9SRUdTXTsKK307CisKK3N0cnVjdCB3bTg5MDRfcGRhdGEgeworCWludCBudW1fZHJjX2NmZ3M7CisJc3RydWN0IHdtODkwNF9kcmNfY2ZnICpkcmNfY2ZnczsKKworCWludCBudW1fcmV0dW5lX21vYmlsZV9jZmdzOworCXN0cnVjdCB3bTg5MDRfcmV0dW5lX21vYmlsZV9jZmcgKnJldHVuZV9tb2JpbGVfY2ZnczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC93bTg5NTUuaCBiL2luY2x1ZGUvc291bmQvd204OTU1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA3NGVmNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvd204OTU1LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIFBsYXRmb3JtIGRhdGEgZm9yIFdNODk1NQorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX1dNODk1NV9QREFUQV9IX18KKyNkZWZpbmUgX19XTTg5NTVfUERBVEFfSF9fCisKK3N0cnVjdCB3bTg5NTVfcGRhdGEgeworCS8qIENvbmZpZ3VyZSBMT1VUMi9ST1VUMiB0byBkcml2ZSBhIHNwZWFrZXIgKi8KKwl1bnNpZ25lZCBpbnQgb3V0Ml9zcGVha2VyOjE7CisKKwkvKiBDb25maWd1cmUgTU9OT0lOKy8tIGluIGRpZmZlcmVudGlhbCBtb2RlICovCisJdW5zaWduZWQgaW50IG1vbm9pbl9kaWZmOjE7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2xvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2xvY2suaAppbmRleCBhODcwYmExLi41YzFkY2ZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9sb2NrLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbG9jay5oCkBAIC0yMCwxNCArMjAsMTcgQEAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2ZpZWxkKHVuc2lnbmVkIGludCwgZmxhZ3MpCiAJCV9fc3RyaW5nKG5hbWUsIGxvY2stPm5hbWUpCisJCV9fZmllbGQodm9pZCAqLCBsb2NrZGVwX2FkZHIpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAogCQlfX2VudHJ5LT5mbGFncyA9ICh0cnlsb2NrID8gMSA6IDApIHwgKHJlYWQgPyAyIDogMCk7CiAJCV9fYXNzaWduX3N0cihuYW1lLCBsb2NrLT5uYW1lKTsKKwkJX19lbnRyeS0+bG9ja2RlcF9hZGRyID0gbG9jazsKIAkpLAogCi0JVFBfcHJpbnRrKCIlcyVzJXMiLCAoX19lbnRyeS0+ZmxhZ3MgJiAxKSA/ICJ0cnkgIiA6ICIiLAorCVRQX3ByaW50aygiJXAgJXMlcyVzIiwgX19lbnRyeS0+bG9ja2RlcF9hZGRyLAorCQkgIChfX2VudHJ5LT5mbGFncyAmIDEpID8gInRyeSAiIDogIiIsCiAJCSAgKF9fZW50cnktPmZsYWdzICYgMikgPyAicmVhZCAiIDogIiIsCiAJCSAgX19nZXRfc3RyKG5hbWUpKQogKTsKQEAgLTQwLDEzICs0MywxNiBAQAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19zdHJpbmcobmFtZSwgbG9jay0+bmFtZSkKKwkJX19maWVsZCh2b2lkICosIGxvY2tkZXBfYWRkcikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCV9fYXNzaWduX3N0cihuYW1lLCBsb2NrLT5uYW1lKTsKKwkJX19lbnRyeS0+bG9ja2RlcF9hZGRyID0gbG9jazsKIAkpLAogCi0JVFBfcHJpbnRrKCIlcyIsIF9fZ2V0X3N0cihuYW1lKSkKKwlUUF9wcmludGsoIiVwICVzIiwKKwkJICBfX2VudHJ5LT5sb2NrZGVwX2FkZHIsIF9fZ2V0X3N0cihuYW1lKSkKICk7CiAKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCkBAIC01OSwxMyArNjUsMTYgQEAKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fc3RyaW5nKG5hbWUsIGxvY2stPm5hbWUpCisJCV9fZmllbGQodm9pZCAqLCBsb2NrZGVwX2FkZHIpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAogCQlfX2Fzc2lnbl9zdHIobmFtZSwgbG9jay0+bmFtZSk7CisJCV9fZW50cnktPmxvY2tkZXBfYWRkciA9IGxvY2s7CiAJKSwKIAotCVRQX3ByaW50aygiJXMiLCBfX2dldF9zdHIobmFtZSkpCisJVFBfcHJpbnRrKCIlcCAlcyIsCisJCSAgX19lbnRyeS0+bG9ja2RlcF9hZGRyLCBfX2dldF9zdHIobmFtZSkpCiApOwogCiBUUkFDRV9FVkVOVChsb2NrX2FjcXVpcmVkLApAQCAtNzUsMTYgKzg0LDE4IEBACiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX3N0cmluZyhuYW1lLCBsb2NrLT5uYW1lKQotCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIHdhaXRfdXNlYykKLQkJX19maWVsZCh1bnNpZ25lZCBsb25nLCB3YWl0X25zZWNfcmVtKQorCQlfX2ZpZWxkKHM2NCwgd2FpdF9uc2VjKQorCQlfX2ZpZWxkKHZvaWQgKiwgbG9ja2RlcF9hZGRyKQogCSksCisKIAlUUF9mYXN0X2Fzc2lnbigKIAkJX19hc3NpZ25fc3RyKG5hbWUsIGxvY2stPm5hbWUpOwotCQlfX2VudHJ5LT53YWl0X25zZWNfcmVtID0gZG9fZGl2KHdhaXR0aW1lLCBOU0VDX1BFUl9VU0VDKTsKLQkJX19lbnRyeS0+d2FpdF91c2VjID0gKHVuc2lnbmVkIGxvbmcpIHdhaXR0aW1lOworCQlfX2VudHJ5LT53YWl0X25zZWMgPSB3YWl0dGltZTsKKwkJX19lbnRyeS0+bG9ja2RlcF9hZGRyID0gbG9jazsKIAkpLAotCVRQX3ByaW50aygiJXMgKCVsdS4lMDNsdSB1cykiLCBfX2dldF9zdHIobmFtZSksIF9fZW50cnktPndhaXRfdXNlYywKLQkJCQkgICAgICAgX19lbnRyeS0+d2FpdF9uc2VjX3JlbSkKKwlUUF9wcmludGsoIiVwICVzICglbGx1IG5zKSIsIF9fZW50cnktPmxvY2tkZXBfYWRkciwKKwkJICBfX2dldF9zdHIobmFtZSksCisJCSAgX19lbnRyeS0+d2FpdF9uc2VjKQogKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAppbmRleCBjNmZlMDNlLi4wODA0Y2Q1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKQEAgLTY1LDcgKzY1LDggQEAKIAl9OwogI3VuZGVmIERFRklORV9FVkVOVAogI2RlZmluZSBERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzKQlcCi0Jc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBldmVudF8jI25hbWUKKwlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsCQkJXAorCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgZXZlbnRfIyNuYW1lCiAKICN1bmRlZiBERUZJTkVfRVZFTlRfUFJJTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncywgcHJpbnQpCVwKQEAgLTEzMSwxMzAgKzEzMiw2IEBACiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIAogLyoKLSAqIFNldHVwIHRoZSBzaG93aW5nIGZvcm1hdCBvZiB0cmFjZSBwb2ludC4KLSAqCi0gKiBpbnQKLSAqIGZ0cmFjZV9mb3JtYXRfIyNjYWxsKHN0cnVjdCB0cmFjZV9zZXEgKnMpCi0gKiB7Ci0gKglzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgZmllbGQ7Ci0gKglpbnQgcmV0OwotICoKLSAqCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgI3R5cGUgIiAiICNpdGVtICI7IgotICoJCQkgICAgICAgIiBvZmZzZXQ6JXU7IHNpemU6JXU7XG4iLAotICoJCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsLCBpdGVtKSwKLSAqCQkJICAgICAgIHNpemVvZihmaWVsZC50eXBlKSk7Ci0gKgotICogfQotICovCi0KLSN1bmRlZiBUUF9TVFJVQ1RfX2VudHJ5Ci0jZGVmaW5lIFRQX1NUUlVDVF9fZW50cnkoYXJncy4uLikgYXJncwotCi0jdW5kZWYgX19maWVsZAotI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCQkJCQlcCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiO1x0IglcCi0JCQkgICAgICAgIm9mZnNldDoldTtcdHNpemU6JXU7XHRzaWduZWQ6JXU7XG4iLAlcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwgXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLml0ZW0pLAlcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClpc19zaWduZWRfdHlwZSh0eXBlKSk7CVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIF9fZmllbGRfZXh0Ci0jZGVmaW5lIF9fZmllbGRfZXh0KHR5cGUsIGl0ZW0sIGZpbHRlcl90eXBlKQlfX2ZpZWxkKHR5cGUsIGl0ZW0pCi0KLSN1bmRlZiBfX2FycmF5Ci0jZGVmaW5lIF9fYXJyYXkodHlwZSwgaXRlbSwgbGVuKQkJCQkJCVwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICJbIiAjbGVuICJdO1x0IglcCi0JCQkgICAgICAgIm9mZnNldDoldTtcdHNpemU6JXU7XHRzaWduZWQ6JXU7XG4iLAlcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwgXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLml0ZW0pLAlcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClpc19zaWduZWRfdHlwZSh0eXBlKSk7CVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIF9fZHluYW1pY19hcnJheQotI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSwgbGVuKQkJCQkgICAgICAgXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6X19kYXRhX2xvYyAiICN0eXBlICJbXSAiICNpdGVtICI7XHQiXAotCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1x0c2lnbmVkOiV1O1xuIiwJICAgICAgIFwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KW9mZnNldG9mKHR5cGVvZihmaWVsZCksCSAgICAgICBcCi0JCQkJCV9fZGF0YV9sb2NfIyNpdGVtKSwJCSAgICAgICBcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClzaXplb2YoZmllbGQuX19kYXRhX2xvY18jI2l0ZW0pLCBcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClpc19zaWduZWRfdHlwZSh0eXBlKSk7CVwKLQlpZiAoIXJldCkJCQkJCQkJICAgICAgIFwKLQkJcmV0dXJuIDA7Ci0KLSN1bmRlZiBfX3N0cmluZwotI2RlZmluZSBfX3N0cmluZyhpdGVtLCBzcmMpIF9fZHluYW1pY19hcnJheShjaGFyLCBpdGVtLCAtMSkKLQotI3VuZGVmIF9fZW50cnkKLSNkZWZpbmUgX19lbnRyeSBSRUMKLQotI3VuZGVmIF9fcHJpbnRfc3ltYm9saWMKLSN1bmRlZiBfX2dldF9keW5hbWljX2FycmF5Ci0jdW5kZWYgX19nZXRfc3RyCi0KLSN1bmRlZiBUUF9wcmludGsKLSNkZWZpbmUgVFBfcHJpbnRrKGZtdCwgYXJncy4uLikgIlwiJXNcIiwgJXNcbiIsIGZtdCwgX19zdHJpbmdpZnkoYXJncykKLQotI3VuZGVmIFRQX2Zhc3RfYXNzaWduCi0jZGVmaW5lIFRQX2Zhc3RfYXNzaWduKGFyZ3MuLi4pIGFyZ3MKLQotI3VuZGVmIFRQX3BlcmZfYXNzaWduCi0jZGVmaW5lIFRQX3BlcmZfYXNzaWduKGFyZ3MuLi4pCi0KLSN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCi0jZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGZ1bmMsIHByaW50KQlcCi1zdGF0aWMgaW50CQkJCQkJCQlcCi1mdHJhY2VfZm9ybWF0X3NldHVwXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCwJCVwKLQkJCSAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpCQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsIGZpZWxkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpOwkJXAotCWludCByZXQgPSAwOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JdHN0cnVjdDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCXJldHVybiByZXQ7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW50CQkJCQkJCQlcCi1mdHJhY2VfZm9ybWF0XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCwJCQlcCi0JCSAgICAgc3RydWN0IHRyYWNlX3NlcSAqcykJCQkJXAotewkJCQkJCQkJCVwKLQlpbnQgcmV0ID0gMDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCXJldCA9IGZ0cmFjZV9mb3JtYXRfc2V0dXBfIyNjYWxsKHVudXNlZCwgcyk7CQkJXAotCWlmICghcmV0KQkJCQkJCQlcCi0JCXJldHVybiByZXQ7CQkJCQkJXAotCQkJCQkJCQkJXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiAiIHByaW50KTsJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gcmV0OwkJCQkJCQlcCi19Ci0KLSN1bmRlZiBERUZJTkVfRVZFTlQKLSNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncykKLQotI3VuZGVmIERFRklORV9FVkVOVF9QUklOVAotI2RlZmluZSBERUZJTkVfRVZFTlRfUFJJTlQodGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzLCBwcmludCkJCVwKLXN0YXRpYyBpbnQJCQkJCQkJCVwKLWZ0cmFjZV9mb3JtYXRfIyNuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkLAkJCVwKLQkJICAgICAgc3RydWN0IHRyYWNlX3NlcSAqcykJCQkJXAotewkJCQkJCQkJCVwKLQlpbnQgcmV0ID0gMDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCXJldCA9IGZ0cmFjZV9mb3JtYXRfc2V0dXBfIyN0ZW1wbGF0ZSh1bnVzZWQsIHMpOwkJXAotCWlmICghcmV0KQkJCQkJCQlcCi0JCXJldHVybiByZXQ7CQkJCQkJXAotCQkJCQkJCQkJXAotCXRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiAiIHByaW50KTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldDsJCQkJCQkJXAotfQotCi0jaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKLQotLyoKICAqIFN0YWdlIDMgb2YgdGhlIHRyYWNlIGV2ZW50cy4KICAqCiAgKiBPdmVycmlkZSB0aGUgbWFjcm9zIGluIDx0cmFjZS90cmFjZV9ldmVudHMuaD4gdG8gaW5jbHVkZSB0aGUgZm9sbG93aW5nOgpAQCAtMzIzLDcgKzIwMCw3IEBACiAKICN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCiAjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAkJCQkJCVwKK3N0YXRpYyBub3RyYWNlIGVudW0gcHJpbnRfbGluZV90CQkJCQlcCiBmdHJhY2VfcmF3X291dHB1dF9pZF8jI2NhbGwoaW50IGV2ZW50X2lkLCBjb25zdCBjaGFyICpuYW1lLAkJXAogCQkJICAgIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQlcCiB7CQkJCQkJCQkJXApAQCAtMzU2LDcgKzIzMyw3IEBACiAKICN1bmRlZiBERUZJTkVfRVZFTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncykJCQlcCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QJCQkJCQlcCitzdGF0aWMgbm90cmFjZSBlbnVtIHByaW50X2xpbmVfdAkJCQkJXAogZnRyYWNlX3Jhd19vdXRwdXRfIyNuYW1lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQlcCiB7CQkJCQkJCQkJXAogCXJldHVybiBmdHJhY2VfcmF3X291dHB1dF9pZF8jI3RlbXBsYXRlKGV2ZW50XyMjbmFtZS5pZCwJCVwKQEAgLTM2NSw3ICsyNDIsNyBAQAogCiAjdW5kZWYgREVGSU5FX0VWRU5UX1BSSU5UCiAjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MsIHByaW50KQkJXAotc3RhdGljIGVudW0gcHJpbnRfbGluZV90CQkJCQkJXAorc3RhdGljIG5vdHJhY2UgZW51bSBwcmludF9saW5lX3QJCQkJCVwKIGZ0cmFjZV9yYXdfb3V0cHV0XyMjY2FsbChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsJCQkJXApAQCAtNDMxLDcgKzMwOCw3IEBACiAKICN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCiAjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGZ1bmMsIHByaW50KQlcCi1zdGF0aWMgaW50CQkJCQkJCQlcCitzdGF0aWMgaW50IG5vdHJhY2UJCQkJCQkJXAogZnRyYWNlX2RlZmluZV9maWVsZHNfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgZmllbGQ7CQkJCQlcCkBAIC00NzksNyArMzU2LDcgQEAKIAogI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKICNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAotc3RhdGljIGlubGluZSBpbnQgZnRyYWNlX2dldF9vZmZzZXRzXyMjY2FsbCgJCQkJXAorc3RhdGljIGlubGluZSBub3RyYWNlIGludCBmdHJhY2VfZ2V0X29mZnNldHNfIyNjYWxsKAkJCVwKIAlzdHJ1Y3QgZnRyYWNlX2RhdGFfb2Zmc2V0c18jI2NhbGwgKl9fZGF0YV9vZmZzZXRzLCBwcm90bykgICAgICAgXAogewkJCQkJCQkJCVwKIAlpbnQgX19kYXRhX3NpemUgPSAwOwkJCQkJCVwKQEAgLTQ5OSw3ICszNzYsNyBAQAogCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAKIC8qCiAgKiBHZW5lcmF0ZSB0aGUgZnVuY3Rpb25zIG5lZWRlZCBmb3IgdHJhY2Vwb2ludCBwZXJmX2V2ZW50IHN1cHBvcnQuCkBAIC01MjYsMTIgKzQwMywxNCBAQAogCQkJCQkJCQkJXAogc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfIyNuYW1lKHByb3RvKTsJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIGludCBmdHJhY2VfcHJvZmlsZV9lbmFibGVfIyNuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKVwKK3N0YXRpYyBub3RyYWNlIGludAkJCQkJCQlcCitmdHJhY2VfcHJvZmlsZV9lbmFibGVfIyNuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQkJXAogewkJCQkJCQkJCVwKIAlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VfIyNuYW1lKGZ0cmFjZV9wcm9maWxlXyMjbmFtZSk7CQlcCiB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZV8jI25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpXAorc3RhdGljIG5vdHJhY2Ugdm9pZAkJCQkJCQlcCitmdHJhY2VfcHJvZmlsZV9kaXNhYmxlXyMjbmFtZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCkJCVwKIHsJCQkJCQkJCQlcCiAJdW5yZWdpc3Rlcl90cmFjZV8jI25hbWUoZnRyYWNlX3Byb2ZpbGVfIyNuYW1lKTsJCQlcCiB9CkBAIC01NDIsNyArNDIxLDcgQEAKIAogI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCiAKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCiAvKgogICogU3RhZ2UgNCBvZiB0aGUgdHJhY2UgZXZlbnRzLgpAQCAtNjIyLDEyICs1MDEsMTEgQEAKICAqCS5yYXdfaW5pdAkJPSB0cmFjZV9ldmVudF9yYXdfaW5pdCwKICAqCS5yZWdmdW5jCQk9IGZ0cmFjZV9yZWdfZXZlbnRfPGNhbGw+LAogICoJLnVucmVnZnVuYwkJPSBmdHJhY2VfdW5yZWdfZXZlbnRfPGNhbGw+LAotICoJLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfPGNhbGw+LAogICogfQogICoKICAqLwogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAogI2RlZmluZSBfVFJBQ0VfUFJPRklMRV9JTklUKGNhbGwpCQkJCQlcCiAJLnByb2ZpbGVfZW5hYmxlID0gZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjY2FsbCwJCQlcCkBAIC02MzUsNyArNTEzLDcgQEAKIAogI2Vsc2UKICNkZWZpbmUgX1RSQUNFX1BST0ZJTEVfSU5JVChjYWxsKQotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BFUkZfRVZFTlRTICovCiAKICN1bmRlZiBfX2VudHJ5CiAjZGVmaW5lIF9fZW50cnkgZW50cnkKQEAgLTY1NywxMCArNTM1LDE3IEBACiAjZGVmaW5lIF9fYXNzaWduX3N0cihkc3QsIHNyYykJCQkJCQlcCiAJc3RyY3B5KF9fZ2V0X3N0cihkc3QpLCBzcmMpOwogCisjdW5kZWYgVFBfZmFzdF9hc3NpZ24KKyNkZWZpbmUgVFBfZmFzdF9hc3NpZ24oYXJncy4uLikgYXJncworCisjdW5kZWYgVFBfcGVyZl9hc3NpZ24KKyNkZWZpbmUgVFBfcGVyZl9hc3NpZ24oYXJncy4uLikKKwogI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKICNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAogCQkJCQkJCQkJXAotc3RhdGljIHZvaWQgZnRyYWNlX3Jhd19ldmVudF9pZF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsLCBcCitzdGF0aWMgbm90cmFjZSB2b2lkCQkJCQkJCVwKK2Z0cmFjZV9yYXdfZXZlbnRfaWRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCwJXAogCQkJCSAgICAgICBwcm90bykJCQkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX2RhdGFfb2Zmc2V0c18jI2NhbGwgX19tYXliZV91bnVzZWQgX19kYXRhX29mZnNldHM7XApAQCAtNjk3LDE3ICs1ODIsMTkgQEAKICN1bmRlZiBERUZJTkVfRVZFTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncykJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgdm9pZCBmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbChwcm90bykJCQkJXAorc3RhdGljIG5vdHJhY2Ugdm9pZCBmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbChwcm90bykJCQlcCiB7CQkJCQkJCQkJXAogCWZ0cmFjZV9yYXdfZXZlbnRfaWRfIyN0ZW1wbGF0ZSgmZXZlbnRfIyNjYWxsLCBhcmdzKTsJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgaW50IGZ0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZClcCitzdGF0aWMgbm90cmFjZSBpbnQJCQkJCQkJXAorZnRyYWNlX3Jhd19yZWdfZXZlbnRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQkJXAogewkJCQkJCQkJCVwKIAlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VfIyNjYWxsKGZ0cmFjZV9yYXdfZXZlbnRfIyNjYWxsKTsJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgdm9pZCBmdHJhY2VfcmF3X3VucmVnX2V2ZW50XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZClcCitzdGF0aWMgbm90cmFjZSB2b2lkCQkJCQkJCVwKK2Z0cmFjZV9yYXdfdW5yZWdfZXZlbnRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQkJXAogewkJCQkJCQkJCVwKIAl1bnJlZ2lzdGVyX3RyYWNlXyMjY2FsbChmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbCk7CQlcCiB9CQkJCQkJCQkJXApAQCAtNzIyLDggKzYwOSwyMCBAQAogCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIAorI3VuZGVmIF9fZW50cnkKKyNkZWZpbmUgX19lbnRyeSBSRUMKKworI3VuZGVmIF9fcHJpbnRfZmxhZ3MKKyN1bmRlZiBfX3ByaW50X3N5bWJvbGljCisjdW5kZWYgX19nZXRfZHluYW1pY19hcnJheQorI3VuZGVmIF9fZ2V0X3N0cgorCisjdW5kZWYgVFBfcHJpbnRrCisjZGVmaW5lIFRQX3ByaW50ayhmbXQsIGFyZ3MuLi4pICJcIiIgZm10ICJcIiwgIiAgX19zdHJpbmdpZnkoYXJncykKKwogI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKLSNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkKKyNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAorc3RhdGljIGNvbnN0IGNoYXIgcHJpbnRfZm10XyMjY2FsbFtdID0gcHJpbnQ7CiAKICN1bmRlZiBERUZJTkVfRVZFTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncykJCQlcCkBAIC03MzcsNyArNjM2LDcgQEAKIAkucmF3X2luaXQJCT0gdHJhY2VfZXZlbnRfcmF3X2luaXQsCQkJXAogCS5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbCwJCVwKIAkudW5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfdW5yZWdfZXZlbnRfIyNjYWxsLAlcCi0JLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfIyN0ZW1wbGF0ZSwJCVwKKwkucHJpbnRfZm10CQk9IHByaW50X2ZtdF8jI3RlbXBsYXRlLAkJCVwKIAkuZGVmaW5lX2ZpZWxkcwkJPSBmdHJhY2VfZGVmaW5lX2ZpZWxkc18jI3RlbXBsYXRlLAlcCiAJX1RSQUNFX1BST0ZJTEVfSU5JVChjYWxsKQkJCQkJXAogfQpAQCAtNzQ1LDYgKzY0NCw4IEBACiAjdW5kZWYgREVGSU5FX0VWRU5UX1BSSU5UCiAjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MsIHByaW50KQkJXAogCQkJCQkJCQkJXAorc3RhdGljIGNvbnN0IGNoYXIgcHJpbnRfZm10XyMjY2FsbFtdID0gcHJpbnQ7CQkJCVwKKwkJCQkJCQkJCVwKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCiBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCQkJXAogX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XyMjY2FsbCA9IHsJCVwKQEAgLTc1NCw3ICs2NTUsNyBAQAogCS5yYXdfaW5pdAkJPSB0cmFjZV9ldmVudF9yYXdfaW5pdCwJCQlcCiAJLnJlZ2Z1bmMJCT0gZnRyYWNlX3Jhd19yZWdfZXZlbnRfIyNjYWxsLAkJXAogCS51bnJlZ2Z1bmMJCT0gZnRyYWNlX3Jhd191bnJlZ19ldmVudF8jI2NhbGwsCVwKLQkuc2hvd19mb3JtYXQJCT0gZnRyYWNlX2Zvcm1hdF8jI2NhbGwsCQkJXAorCS5wcmludF9mbXQJCT0gcHJpbnRfZm10XyMjY2FsbCwJCQlcCiAJLmRlZmluZV9maWVsZHMJCT0gZnRyYWNlX2RlZmluZV9maWVsZHNfIyN0ZW1wbGF0ZSwJXAogCV9UUkFDRV9QUk9GSUxFX0lOSVQoY2FsbCkJCQkJCVwKIH0KQEAgLTgzNSw3ICs3MzYsMTcgQEAKICAqIH0KICAqLwogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKworI3VuZGVmIF9fZW50cnkKKyNkZWZpbmUgX19lbnRyeSBlbnRyeQorCisjdW5kZWYgX19nZXRfZHluYW1pY19hcnJheQorI2RlZmluZSBfX2dldF9keW5hbWljX2FycmF5KGZpZWxkKQlcCisJCSgodm9pZCAqKV9fZW50cnkgKyAoX19lbnRyeS0+X19kYXRhX2xvY18jI2ZpZWxkICYgMHhmZmZmKSkKKworI3VuZGVmIF9fZ2V0X3N0cgorI2RlZmluZSBfX2dldF9zdHIoZmllbGQpIChjaGFyICopX19nZXRfZHluYW1pY19hcnJheShmaWVsZCkKIAogI3VuZGVmIF9fcGVyZl9hZGRyCiAjZGVmaW5lIF9fcGVyZl9hZGRyKGEpIF9fYWRkciA9IChhKQpAQCAtODQ1LDI3ICs3NTYsMTcgQEAKIAogI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKICNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAotc3RhdGljIHZvaWQJCQkJCQkJCVwKK3N0YXRpYyBub3RyYWNlIHZvaWQJCQkJCQkJXAogZnRyYWNlX3Byb2ZpbGVfdGVtcGxfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCwJXAogCQkJICAgIHByb3RvKQkJCQkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX2RhdGFfb2Zmc2V0c18jI2NhbGwgX19tYXliZV91bnVzZWQgX19kYXRhX29mZnNldHM7XAotCWV4dGVybiBpbnQgcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCh2b2lkKTsJCVwKLQlleHRlcm4gdm9pZCBwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KGludCByY3R4KTsJXAotCWV4dGVybiB2b2lkIHBlcmZfdHBfZXZlbnQoaW50LCB1NjQsIHU2NCwgdm9pZCAqLCBpbnQpOwkJXAogCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqZW50cnk7CQkJCVwKIAl1NjQgX19hZGRyID0gMCwgX19jb3VudCA9IDE7CQkJCQlcCiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CQkJCQlcCi0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnQ7CQkJCQlcCiAJaW50IF9fZW50cnlfc2l6ZTsJCQkJCQlcCiAJaW50IF9fZGF0YV9zaXplOwkJCQkJCVwKLQljaGFyICp0cmFjZV9idWY7CQkJCQkJXAotCWNoYXIgKnJhd19kYXRhOwkJCQkJCQlcCi0JaW50IF9fY3B1OwkJCQkJCQlcCiAJaW50IHJjdHg7CQkJCQkJCVwKLQlpbnQgcGM7CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JcGMgPSBwcmVlbXB0X2NvdW50KCk7CQkJCQkJXAogCQkJCQkJCQkJXAogCV9fZGF0YV9zaXplID0gZnRyYWNlX2dldF9vZmZzZXRzXyMjY2FsbCgmX19kYXRhX29mZnNldHMsIGFyZ3MpOyBcCiAJX19lbnRyeV9zaXplID0gQUxJR04oX19kYXRhX3NpemUgKyBzaXplb2YoKmVudHJ5KSArIHNpemVvZih1MzIpLFwKQEAgLTg3NSw0NyArNzc2LDIxIEBACiAJaWYgKFdBUk5fT05DRShfX2VudHJ5X3NpemUgPiBGVFJBQ0VfTUFYX1BST0ZJTEVfU0laRSwJCVwKIAkJICAgICAgInByb2ZpbGUgYnVmZmVyIG5vdCBsYXJnZSBlbm91Z2giKSkJCVwKIAkJcmV0dXJuOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsJCQkJCVwKLQkJCQkJCQkJCVwKLQlyY3R4ID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOwkJCVwKLQlpZiAocmN0eCA8IDApCQkJCQkJCVwKLQkJZ290byBlbmRfcmVjdXJzaW9uOwkJCQkJXAotCQkJCQkJCQkJXAotCV9fY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChpbl9ubWkoKSkJCQkJCQkJXAotCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWZfbm1pKTsJXAotCWVsc2UJCQkJCQkJCVwKLQkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmKTsJCVwKLQkJCQkJCQkJCVwKLQlpZiAoIXRyYWNlX2J1ZikJCQkJCQkJXAotCQlnb3RvIGVuZDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JcmF3X2RhdGEgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIF9fY3B1KTsJCQlcCi0JCQkJCQkJCQlcCi0JKih1NjQgKikoJnJhd19kYXRhW19fZW50cnlfc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOwkJXAotCWVudHJ5ID0gKHN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqKXJhd19kYXRhOwkJCVwKLQllbnQgPSAmZW50cnktPmVudDsJCQkJCQlcCi0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnQsIGlycV9mbGFncywgcGMpOwkJXAotCWVudC0+dHlwZSA9IGV2ZW50X2NhbGwtPmlkOwkJCQkJXAotCQkJCQkJCQkJXAorCWVudHJ5ID0gKHN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqKWZ0cmFjZV9wZXJmX2J1Zl9wcmVwYXJlKAlcCisJCV9fZW50cnlfc2l6ZSwgZXZlbnRfY2FsbC0+aWQsICZyY3R4LCAmaXJxX2ZsYWdzKTsJXAorCWlmICghZW50cnkpCQkJCQkJCVwKKwkJcmV0dXJuOwkJCQkJCQlcCiAJdHN0cnVjdAkJCQkJCQkJXAogCQkJCQkJCQkJXAogCXsgYXNzaWduOyB9CQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlwZXJmX3RwX2V2ZW50KGV2ZW50X2NhbGwtPmlkLCBfX2FkZHIsIF9fY291bnQsIGVudHJ5LAkJXAotCQkJICAgICBfX2VudHJ5X3NpemUpOwkJCQlcCi0JCQkJCQkJCQlcCi1lbmQ6CQkJCQkJCQkJXAotCXBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQocmN0eCk7CQkJXAotZW5kX3JlY3Vyc2lvbjoJCQkJCQkJCVwKLQlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwkJCQkJXAorCWZ0cmFjZV9wZXJmX2J1Zl9zdWJtaXQoZW50cnksIF9fZW50cnlfc2l6ZSwgcmN0eCwgX19hZGRyLAlcCisJCQkgICAgICAgX19jb3VudCwgaXJxX2ZsYWdzKTsJCQlcCiB9CiAKICN1bmRlZiBERUZJTkVfRVZFTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncykJCVwKLXN0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlXyMjY2FsbChwcm90bykJCQlcCitzdGF0aWMgbm90cmFjZSB2b2lkIGZ0cmFjZV9wcm9maWxlXyMjY2FsbChwcm90bykJCVwKIHsJCQkJCQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwgPSAmZXZlbnRfIyNjYWxsOwlcCiAJCQkJCQkJCVwKQEAgLTkyNyw3ICs4MDIsNyBAQAogCURFRklORV9FVkVOVCh0ZW1wbGF0ZSwgbmFtZSwgUEFSQU1TKHByb3RvKSwgUEFSQU1TKGFyZ3MpKQogCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKLSNlbmRpZiAvKiBDT05GSUdfRVZFTlRfUFJPRklMRSAqLworI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCiAjdW5kZWYgX1RSQUNFX1BST0ZJTEVfSU5JVAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL3N5c2NhbGwuaCBiL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oCmluZGV4IDk2MWZkYTMuLjAzODcxMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oCisrKyBiL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oCkBAIC0zNCwxMCArMzQsNiBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXJjaF9zeXNjYWxsX2FkZHIoaW50IG5yKTsKIGV4dGVybiBpbnQgaW5pdF9zeXNjYWxsX3RyYWNlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiAKLWV4dGVybiBpbnQgc3lzY2FsbF9lbnRlcl9mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAotCQkJCXN0cnVjdCB0cmFjZV9zZXEgKnMpOwotZXh0ZXJuIGludCBzeXNjYWxsX2V4aXRfZm9ybWF0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKLQkJCQlzdHJ1Y3QgdHJhY2Vfc2VxICpzKTsKIGV4dGVybiBpbnQgc3lzY2FsbF9lbnRlcl9kZWZpbmVfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiBleHRlcm4gaW50IHN5c2NhbGxfZXhpdF9kZWZpbmVfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiBleHRlcm4gaW50IHJlZ19ldmVudF9zeXNjYWxsX2VudGVyKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CkBAIC00OSwxMiArNDUsMTIgQEAKIGVudW0gcHJpbnRfbGluZV90IHByaW50X3N5c2NhbGxfZW50ZXIoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpOwogZW51bSBwcmludF9saW5lX3QgcHJpbnRfc3lzY2FsbF9leGl0KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIGludCBwcm9mX3N5c2VudGVyX2VuYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwogdm9pZCBwcm9mX3N5c2VudGVyX2Rpc2FibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKIGludCBwcm9mX3N5c2V4aXRfZW5hYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiB2b2lkIHByb2Zfc3lzZXhpdF9kaXNhYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7Ci0KICNlbmRpZgogCiAjZW5kaWYgLyogX1RSQUNFX1NZU0NBTExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfbGNkYy5oIGIvaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfbGNkYy5oCmluZGV4IDI4ODIwNTQuLjJjYzg5M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vc2hfbW9iaWxlX2xjZGMuaAorKysgYi9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmgKQEAgLTM0LDYgKzM0LDggQEAKICNkZWZpbmUgTENEQ19GTEFHU19IU0NOVCAoMSA8PCAzKSAvKiBEaXNhYmxlIEhTWU5DIGR1cmluZyBWQkxBTksgKi8KICNkZWZpbmUgTENEQ19GTEFHU19EV0NOVCAoMSA8PCA0KSAvKiBEaXNhYmxlIGRvdGNsb2NrIGR1cmluZyBibGFua2luZyAqLwogCisjZGVmaW5lIEZCSU9fV0FJVEZPUlZTWU5DIF9JT1coJ0YnLCAweDIwLCBfX3UzMikKKwogc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfY2ZnIHsKIAl1bnNpZ25lZCBsb25nIGxkbXQycjsKIAl1bnNpZ25lZCBsb25nIGxkbXQzcjsKZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCBkOTVjYTdjLi4wODlhMjMwIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC0zOTYsNiArMzk2LDIyIEBACiAKIAkgIFNheSBOIGlmIHVuc3VyZS4KIAorY29uZmlnIFJDVV9GQVNUX05PX0haCisJYm9vbCAiQWNjZWxlcmF0ZSBsYXN0IG5vbi1keW50aWNrLWlkbGUgQ1BVJ3MgZ3JhY2UgcGVyaW9kcyIKKwlkZXBlbmRzIG9uIFRSRUVfUkNVICYmIE5PX0haICYmIFNNUAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGNhdXNlcyBSQ1UgdG8gYXR0ZW1wdCB0byBhY2NlbGVyYXRlIGdyYWNlIHBlcmlvZHMKKwkgIGluIG9yZGVyIHRvIGFsbG93IHRoZSBmaW5hbCBDUFUgdG8gZW50ZXIgZHludGlja3MtaWRsZSBzdGF0ZQorCSAgbW9yZSBxdWlja2x5LiAgT24gdGhlIG90aGVyIGhhbmQsIHRoaXMgb3B0aW9uIGluY3JlYXNlcyB0aGUKKwkgIG92ZXJoZWFkIG9mIHRoZSBkeW50aWNrcy1pZGxlIGNoZWNraW5nLCBwYXJ0aWN1bGFybHkgb24gc3lzdGVtcworCSAgd2l0aCBsYXJnZSBudW1iZXJzIG9mIENQVXMuCisKKwkgIFNheSBZIGlmIGVuZXJneSBlZmZpY2llbmN5IGlzIGNyaXRpY2FsbHkgaW1wb3J0YW50LCBwYXJ0aWN1bGFybHkKKwkgIAlpZiB5b3UgaGF2ZSByZWxhdGl2ZWx5IGZldyBDUFVzLgorCisJICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KKwogY29uZmlnIFRSRUVfUkNVX1RSQUNFCiAJZGVmX2Jvb2wgUkNVX1RSQUNFICYmICggVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVSApCiAJc2VsZWN0IERFQlVHX0ZTCkBAIC00NDUsNTcgKzQ2MSw2IEBACiBjb25maWcgSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSwogCWJvb2wKIAotY29uZmlnIEdST1VQX1NDSEVECi0JYm9vbCAiR3JvdXAgQ1BVIHNjaGVkdWxlciIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVQotCSAgYmFuZHdpZHRoIGFsbG9jYXRpb24gdG8gc3VjaCB0YXNrIGdyb3Vwcy4KLQkgIEluIG9yZGVyIHRvIGNyZWF0ZSBhIGdyb3VwIGZyb20gYXJiaXRyYXJ5IHNldCBvZiBwcm9jZXNzZXMsIHVzZQotCSAgQ09ORklHX0NHUk9VUFMuIChTZWUgQ29udHJvbCBHcm91cCBzdXBwb3J0LikKLQotY29uZmlnIEZBSVJfR1JPVVBfU0NIRUQKLQlib29sICJHcm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9PVEhFUiIKLQlkZXBlbmRzIG9uIEdST1VQX1NDSEVECi0JZGVmYXVsdCBHUk9VUF9TQ0hFRAotCi1jb25maWcgUlRfR1JPVVBfU0NIRUQKLQlib29sICJHcm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9SUi9GSUZPIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JZGVwZW5kcyBvbiBHUk9VUF9TQ0hFRAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgZmVhdHVyZSBsZXRzIHlvdSBleHBsaWNpdGx5IGFsbG9jYXRlIHJlYWwgQ1BVIGJhbmR3aWR0aAotCSAgdG8gdXNlcnMgb3IgY29udHJvbCBncm91cHMgKGRlcGVuZGluZyBvbiB0aGUgIkJhc2lzIGZvciBncm91cGluZyB0YXNrcyIKLQkgIHNldHRpbmcgYmVsb3cuIElmIGVuYWJsZWQsIGl0IHdpbGwgYWxzbyBtYWtlIGl0IGltcG9zc2libGUgdG8KLQkgIHNjaGVkdWxlIHJlYWx0aW1lIHRhc2tzIGZvciBub24tcm9vdCB1c2VycyB1bnRpbCB5b3UgYWxsb2NhdGUKLQkgIHJlYWx0aW1lIGJhbmR3aWR0aCBmb3IgdGhlbS4KLQkgIFNlZSBEb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1ydC1ncm91cC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KLWNob2ljZQotCWRlcGVuZHMgb24gR1JPVVBfU0NIRUQKLQlwcm9tcHQgIkJhc2lzIGZvciBncm91cGluZyB0YXNrcyIKLQlkZWZhdWx0IFVTRVJfU0NIRUQKLQotY29uZmlnIFVTRVJfU0NIRUQKLQlib29sICJ1c2VyIGlkIgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHdpbGwgY2hvb3NlIHVzZXJpZCBhcyB0aGUgYmFzaXMgZm9yIGdyb3VwaW5nCi0JICB0YXNrcywgdGh1cyBwcm92aWRpbmcgZXF1YWwgQ1BVIGJhbmR3aWR0aCB0byBlYWNoIHVzZXIuCi0KLWNvbmZpZyBDR1JPVVBfU0NIRUQKLQlib29sICJDb250cm9sIGdyb3VwcyIKLSAJZGVwZW5kcyBvbiBDR1JPVVBTCi0gCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY3JlYXRlIGFyYml0cmFyeSB0YXNrIGdyb3VwcwotCSAgdXNpbmcgdGhlICJjZ3JvdXAiIHBzZXVkbyBmaWxlc3lzdGVtIGFuZCBjb250cm9sCi0JICB0aGUgY3B1IGJhbmR3aWR0aCBhbGxvY2F0ZWQgdG8gZWFjaCBzdWNoIHRhc2sgZ3JvdXAuCi0JICBSZWZlciB0byBEb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQgZm9yIG1vcmUKLQkgIGluZm9ybWF0aW9uIG9uICJjZ3JvdXAiIHBzZXVkbyBmaWxlc3lzdGVtLgotCi1lbmRjaG9pY2UKLQogbWVudWNvbmZpZyBDR1JPVVBTCiAJYm9vbGVhbiAiQ29udHJvbCBHcm91cCBzdXBwb3J0IgogCWhlbHAKQEAgLTYxNiw2ICs1ODEsMzYgQEAKIAkgIE5vdywgbWVtb3J5IHVzYWdlIG9mIHN3YXBfY2dyb3VwIGlzIDIgYnl0ZXMgcGVyIGVudHJ5LiBJZiBzd2FwIHBhZ2UKIAkgIHNpemUgaXMgNDA5NmJ5dGVzLCA1MTJrIHBlciAxR2J5dGVzIG9mIHN3YXAuCiAKK21lbnVjb25maWcgQ0dST1VQX1NDSEVECisJYm9vbCAiR3JvdXAgQ1BVIHNjaGVkdWxlciIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBDR1JPVVBTCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBmZWF0dXJlIGxldHMgQ1BVIHNjaGVkdWxlciByZWNvZ25pemUgdGFzayBncm91cHMgYW5kIGNvbnRyb2wgQ1BVCisJICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXAKKwkgIHRhc2tzLgorCitpZiBDR1JPVVBfU0NIRUQKK2NvbmZpZyBGQUlSX0dST1VQX1NDSEVECisJYm9vbCAiR3JvdXAgc2NoZWR1bGluZyBmb3IgU0NIRURfT1RIRVIiCisJZGVwZW5kcyBvbiBDR1JPVVBfU0NIRUQKKwlkZWZhdWx0IENHUk9VUF9TQ0hFRAorCitjb25maWcgUlRfR1JPVVBfU0NIRUQKKwlib29sICJHcm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9SUi9GSUZPIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBDR1JPVVBfU0NIRUQKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGZlYXR1cmUgbGV0cyB5b3UgZXhwbGljaXRseSBhbGxvY2F0ZSByZWFsIENQVSBiYW5kd2lkdGgKKwkgIHRvIHVzZXJzIG9yIGNvbnRyb2wgZ3JvdXBzIChkZXBlbmRpbmcgb24gdGhlICJCYXNpcyBmb3IgZ3JvdXBpbmcgdGFza3MiCisJICBzZXR0aW5nIGJlbG93LiBJZiBlbmFibGVkLCBpdCB3aWxsIGFsc28gbWFrZSBpdCBpbXBvc3NpYmxlIHRvCisJICBzY2hlZHVsZSByZWFsdGltZSB0YXNrcyBmb3Igbm9uLXJvb3QgdXNlcnMgdW50aWwgeW91IGFsbG9jYXRlCisJICByZWFsdGltZSBiYW5kd2lkdGggZm9yIHRoZW0uCisJICBTZWUgRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtcnQtZ3JvdXAudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitlbmRpZiAjQ0dST1VQX1NDSEVECisKIGVuZGlmICMgQ0dST1VQUwogCiBjb25maWcgTU1fT1dORVIKQEAgLTk3NiwxOSArOTcxLDYgQEAKIAogCSAgU2F5IFkgaWYgdW5zdXJlLgogCi1jb25maWcgRVZFTlRfUFJPRklMRQotCWJvb2wgIlRyYWNlcG9pbnQgcHJvZmlsaW5nIHNvdXJjZXMiCi0JZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyAmJiBFVkVOVF9UUkFDSU5HCi0JZGVmYXVsdCB5Ci0JaGVscAotCSBBbGxvdyB0aGUgdXNlIG9mIHRyYWNlcG9pbnRzIGFzIHNvZnR3YXJlIHBlcmZvcm1hbmNlIGV2ZW50cy4KLQotCSBXaGVuIHRoaXMgaXMgZW5hYmxlZCwgeW91IGNhbiBjcmVhdGUgcGVyZiBldmVudHMgYmFzZWQgb24KLQkgdHJhY2Vwb2ludHMgdXNpbmcgUEVSRl9UWVBFX1RSQUNFUE9JTlQgYW5kIHRoZSB0cmFjZXBvaW50IElECi0JIGZvdW5kIGluIGRlYnVnZnM6Ly90cmFjaW5nL2V2ZW50cy8qLyovaWQuIChUaGUgLWUvLS1ldmVudHMKLQkgb3B0aW9uIHRvIHRoZSBwZXJmIHRvb2wgY2FuIHBhcnNlIGFuZCBpbnRlcnByZXQgc3ltYm9saWMKLQkgdHJhY2Vwb2ludHMsIGluIHRoZSBzdWJzeXN0ZW06dHJhY2Vwb2ludF9uYW1lIGZvcm1hdC4pCi0KIGNvbmZpZyBQRVJGX0NPVU5URVJTCiAJYm9vbCAiS2VybmVsIHBlcmZvcm1hbmNlIGNvdW50ZXJzIChvbGQgY29uZmlnIG9wdGlvbikiCiAJZGVwZW5kcyBvbiBIQVZFX1BFUkZfRVZFTlRTCkBAIC0xMTEyLDcgKzEwOTQsNyBAQAogCSAgU2VlIERvY3VtZW50YXRpb24vbm9tbXUtbW1hcC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIGNvbmZpZyBQUk9GSUxJTkcKLQlib29sICJQcm9maWxpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlib29sICJQcm9maWxpbmcgc3VwcG9ydCIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgZXh0ZW5kZWQgcHJvZmlsaW5nIHN1cHBvcnQgbWVjaGFuaXNtcyB1c2VkCiAJICBieSBwcm9maWxlcnMgc3VjaCBhcyBPUHJvZmlsZS4KQEAgLTEyNjIsNCArMTI0NCw4IEBACiBjb25maWcgUFJFRU1QVF9OT1RJRklFUlMKIAlib29sCiAKK2NvbmZpZyBQQURBVEEKKwlkZXBlbmRzIG9uIFNNUAorCWJvb2wKKwogc291cmNlICJrZXJuZWwvS2NvbmZpZy5sb2NrcyIKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggZGFjNDRhOS4uYzc1ZGNkNiAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTQxNiw3ICs0MTYsOSBAQAogCWtlcm5lbF90aHJlYWQoa2VybmVsX2luaXQsIE5VTEwsIENMT05FX0ZTIHwgQ0xPTkVfU0lHSEFORCk7CiAJbnVtYV9kZWZhdWx0X3BvbGljeSgpOwogCXBpZCA9IGtlcm5lbF90aHJlYWQoa3RocmVhZGQsIE5VTEwsIENMT05FX0ZTIHwgQ0xPTkVfRklMRVMpOworCXJjdV9yZWFkX2xvY2soKTsKIAlrdGhyZWFkZF90YXNrID0gZmluZF90YXNrX2J5X3BpZF9ucyhwaWQsICZpbml0X3BpZF9ucyk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCiAJLyoKQEAgLTY1Nyw5ICs2NTksOSBAQAogCXByb2NfY2FjaGVzX2luaXQoKTsKIAlidWZmZXJfaW5pdCgpOwogCWtleV9pbml0KCk7CisJcmFkaXhfdHJlZV9pbml0KCk7CiAJc2VjdXJpdHlfaW5pdCgpOwogCXZmc19jYWNoZXNfaW5pdCh0b3RhbHJhbV9wYWdlcyk7Ci0JcmFkaXhfdHJlZV9pbml0KCk7CiAJc2lnbmFsc19pbml0KCk7CiAJLyogcm9vdGZzIHBvcHVsYXRpbmcgbWlnaHQgbmVlZCBwYWdlLXdyaXRlYmFjayAqLwogCXBhZ2Vfd3JpdGViYWNrX2luaXQoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9NYWtlZmlsZSBiL2tlcm5lbC9NYWtlZmlsZQppbmRleCA4NjRmZjc1Li42YWViZGViIDEwMDY0NAotLS0gYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIva2VybmVsL01ha2VmaWxlCkBAIC0xMDAsNiArMTAwLDcgQEAKIG9iai0kKENPTkZJR19QRVJGX0VWRU5UUykgKz0gcGVyZl9ldmVudC5vCiBvYmotJChDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UKSArPSBod19icmVha3BvaW50Lm8KIG9iai0kKENPTkZJR19VU0VSX1JFVFVSTl9OT1RJRklFUikgKz0gdXNlci1yZXR1cm4tbm90aWZpZXIubworb2JqLSQoQ09ORklHX1BBREFUQSkgKz0gcGFkYXRhLm8KIAogaWZuZXEgKCQoQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUikseSkKICMgQWNjb3JkaW5nIHRvIEFsYW4gTW9kcmEgPGFsYW5AbGludXhjYXJlLmNvbS5hdT4sIHRoZSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciBpcwpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC5jCmluZGV4IDFmYmNjNzQuLjRmZDkwZTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAuYworKysgYi9rZXJuZWwvY2dyb3VwLmMKQEAgLTIzLDYgKzIzLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0xNjYsNiArMTY3LDIwIEBACiAgKi8KIHN0YXRpYyBpbnQgbmVlZF9mb3JrZXhpdF9jYWxsYmFjayBfX3JlYWRfbW9zdGx5OwogCisjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKK2ludCBjZ3JvdXBfbG9ja19pc19oZWxkKHZvaWQpCit7CisJcmV0dXJuIGxvY2tkZXBfaXNfaGVsZCgmY2dyb3VwX211dGV4KTsKK30KKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORyAqLworaW50IGNncm91cF9sb2NrX2lzX2hlbGQodm9pZCkKK3sKKwlyZXR1cm4gbXV0ZXhfaXNfbG9ja2VkKCZjZ3JvdXBfbXV0ZXgpOworfQorI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORyAqLworCitFWFBPUlRfU1lNQk9MX0dQTChjZ3JvdXBfbG9ja19pc19oZWxkKTsKKwogLyogY29udmVuaWVudCB0ZXN0cyBmb3IgdGhlc2UgYml0cyAqLwogaW5saW5lIGludCBjZ3JvdXBfaXNfcmVtb3ZlZChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKQogewpAQCAtMjkzNiwxNCArMjk1MSwxNyBAQAogCiAJZm9yX2VhY2hfc3Vic3lzKHJvb3QsIHNzKSB7CiAJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MgPSBzcy0+Y3JlYXRlKHNzLCBjZ3JwKTsKKwogCQlpZiAoSVNfRVJSKGNzcykpIHsKIAkJCWVyciA9IFBUUl9FUlIoY3NzKTsKIAkJCWdvdG8gZXJyX2Rlc3Ryb3k7CiAJCX0KIAkJaW5pdF9jZ3JvdXBfY3NzKGNzcywgc3MsIGNncnApOwotCQlpZiAoc3MtPnVzZV9pZCkKLQkJCWlmIChhbGxvY19jc3NfaWQoc3MsIHBhcmVudCwgY2dycCkpCisJCWlmIChzcy0+dXNlX2lkKSB7CisJCQllcnIgPSBhbGxvY19jc3NfaWQoc3MsIHBhcmVudCwgY2dycCk7CisJCQlpZiAoZXJyKQogCQkJCWdvdG8gZXJyX2Rlc3Ryb3k7CisJCX0KIAkJLyogQXQgZXJyb3IsIC0+ZGVzdHJveSgpIGNhbGxiYWNrIGhhcyB0byBmcmVlIGFzc2lnbmVkIElELiAqLwogCX0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IDFjOGRkZDYuLjY3N2YyNTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYworKysgYi9rZXJuZWwvY3B1LmMKQEAgLTE1MSwxMyArMTUxLDEzIEBACiAKIAl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAJZm9yX2VhY2hfcHJvY2VzcyhwKSB7Ci0JCWlmICh0YXNrX2NwdShwKSA9PSBjcHUgJiYKKwkJaWYgKHRhc2tfY3B1KHApID09IGNwdSAmJiBwLT5zdGF0ZSA9PSBUQVNLX1JVTk5JTkcgJiYKIAkJICAgICghY3B1dGltZV9lcShwLT51dGltZSwgY3B1dGltZV96ZXJvKSB8fAogCQkgICAgICFjcHV0aW1lX2VxKHAtPnN0aW1lLCBjcHV0aW1lX3plcm8pKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRhc2sgJXMgKHBpZCA9ICVkKSBpcyBvbiBjcHUgJWRcCi0JCQkJKHN0YXRlID0gJWxkLCBmbGFncyA9ICV4KSBcbiIsCi0JCQkJIHAtPmNvbW0sIHRhc2tfcGlkX25yKHApLCBjcHUsCi0JCQkJIHAtPnN0YXRlLCBwLT5mbGFncyk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJUYXNrICVzIChwaWQgPSAlZCkgaXMgb24gY3B1ICVkICIKKwkJCQkiKHN0YXRlID0gJWxkLCBmbGFncyA9ICV4KVxuIiwKKwkJCQlwLT5jb21tLCB0YXNrX3BpZF9ucihwKSwgY3B1LAorCQkJCXAtPnN0YXRlLCBwLT5mbGFncyk7CiAJfQogCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2NyZWQuYyBiL2tlcm5lbC9jcmVkLmMKaW5kZXggZGQ3NmNmZS4uMWVkOGNhMSAxMDA2NDQKLS0tIGEva2VybmVsL2NyZWQuYworKysgYi9rZXJuZWwvY3JlZC5jCkBAIC0yMjQsNyArMjI0LDcgQEAKICNpZmRlZiBDT05GSUdfS0VZUwogCW5ldy0+dGdjcmVkID0ga3phbGxvYyhzaXplb2YoKm5ldy0+dGdjcmVkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXctPnRnY3JlZCkgewotCQlrZnJlZShuZXcpOworCQlrbWVtX2NhY2hlX2ZyZWUoY3JlZF9qYXIsIG5ldyk7CiAJCXJldHVybiBOVUxMOwogCX0KIAlhdG9taWNfc2V0KCZuZXctPnRnY3JlZC0+dXNhZ2UsIDEpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggNTQ2Nzc0YS4uNDVlZDA0MyAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC04NSw3ICs4NSw5IEBACiAJQlVHX09OKCFzaWcpOwogCUJVR19PTighYXRvbWljX3JlYWQoJnNpZy0+Y291bnQpKTsKIAotCXNpZ2hhbmQgPSByY3VfZGVyZWZlcmVuY2UodHNrLT5zaWdoYW5kKTsKKwlzaWdoYW5kID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHRzay0+c2lnaGFuZCwKKwkJCQkJcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwKKwkJCQkJbG9ja2RlcF9pc19oZWxkKCZ0YXNrbGlzdF9sb2NrKSk7CiAJc3Bpbl9sb2NrKCZzaWdoYW5kLT5zaWdsb2NrKTsKIAogCXBvc2l4X2NwdV90aW1lcnNfZXhpdCh0c2spOwpAQCAtMTcwLDggKzE3MiwxMCBAQAogcmVwZWF0OgogCXRyYWNlaG9va19wcmVwYXJlX3JlbGVhc2VfdGFzayhwKTsKIAkvKiBkb24ndCBuZWVkIHRvIGdldCB0aGUgUkNVIHJlYWRsb2NrIGhlcmUgLSB0aGUgcHJvY2VzcyBpcyBkZWFkIGFuZAotCSAqIGNhbid0IGJlIG1vZGlmeWluZyBpdHMgb3duIGNyZWRlbnRpYWxzICovCisJICogY2FuJ3QgYmUgbW9kaWZ5aW5nIGl0cyBvd24gY3JlZGVudGlhbHMuIEJ1dCBzaHV0IFJDVS1sb2NrZGVwIHVwICovCisJcmN1X3JlYWRfbG9jaygpOwogCWF0b21pY19kZWMoJl9fdGFza19jcmVkKHApLT51c2VyLT5wcm9jZXNzZXMpOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcHJvY19mbHVzaF90YXNrKHApOwogCkBAIC00NzMsOSArNDc3LDExIEBACiAJLyoKIAkgKiBJdCBpcyBzYWZlIHRvIGRlcmVmZXJlbmNlIHRoZSBmZCB0YWJsZSB3aXRob3V0IFJDVSBvcgogCSAqIC0+ZmlsZV9sb2NrIGJlY2F1c2UgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlCi0JICogZmlsZXMgc3RydWN0dXJlLgorCSAqIGZpbGVzIHN0cnVjdHVyZS4gIEJ1dCB1c2UgUkNVIHRvIHNodXQgUkNVLWxvY2tkZXAgdXAuCiAJICovCisJcmN1X3JlYWRfbG9jaygpOwogCWZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpOworCXJjdV9yZWFkX3VubG9jaygpOwogCWZvciAoOzspIHsKIAkJdW5zaWduZWQgbG9uZyBzZXQ7CiAJCWkgPSBqICogX19ORkRCSVRTOwpAQCAtNTIxLDEwICs1MjcsMTIgQEAKIAkJICogYXQgdGhlIGVuZCBvZiB0aGUgUkNVIGdyYWNlIHBlcmlvZC4gT3RoZXJ3aXNlLAogCQkgKiB5b3UgY2FuIGZyZWUgZmlsZXMgaW1tZWRpYXRlbHkuCiAJCSAqLworCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpOwogCQlpZiAoZmR0ICE9ICZmaWxlcy0+ZmR0YWIpCiAJCQlrbWVtX2NhY2hlX2ZyZWUoZmlsZXNfY2FjaGVwLCBmaWxlcyk7CiAJCWZyZWVfZmR0YWJsZShmZHQpOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDViMjk1OWIuLjE3YmJmMDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtODYsNiArODYsNyBAQAogREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgcHJvY2Vzc19jb3VudHMpID0gMDsKIAogX19jYWNoZWxpbmVfYWxpZ25lZCBERUZJTkVfUldMT0NLKHRhc2tsaXN0X2xvY2spOyAgLyogb3V0ZXIgKi8KK0VYUE9SVF9TWU1CT0xfR1BMKHRhc2tsaXN0X2xvY2spOwogCiBpbnQgbnJfcHJvY2Vzc2VzKHZvaWQpCiB7CkBAIC0xMjQxLDIxICsxMjQyLDYgQEAKIAkvKiBOZWVkIHRhc2tsaXN0IGxvY2sgZm9yIHBhcmVudCBldGMgaGFuZGxpbmchICovCiAJd3JpdGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCi0JLyoKLQkgKiBUaGUgdGFzayBoYXNuJ3QgYmVlbiBhdHRhY2hlZCB5ZXQsIHNvIGl0cyBjcHVzX2FsbG93ZWQgbWFzayB3aWxsCi0JICogbm90IGJlIGNoYW5nZWQsIG5vciB3aWxsIGl0cyBhc3NpZ25lZCBDUFUuCi0JICoKLQkgKiBUaGUgY3B1c19hbGxvd2VkIG1hc2sgb2YgdGhlIHBhcmVudCBtYXkgaGF2ZSBjaGFuZ2VkIGFmdGVyIGl0IHdhcwotCSAqIGNvcGllZCBmaXJzdCB0aW1lIC0gc28gcmUtY29weSBpdCBoZXJlLCB0aGVuIGNoZWNrIHRoZSBjaGlsZCdzIENQVQotCSAqIHRvIGVuc3VyZSBpdCBpcyBvbiBhIHZhbGlkIENQVSAoYW5kIGlmIG5vdCwganVzdCBmb3JjZSBpdCBiYWNrIHRvCi0JICogcGFyZW50J3MgQ1BVKS4gVGhpcyBhdm9pZHMgYWxvdCBvZiBuYXN0eSByYWNlcy4KLQkgKi8KLQlwLT5jcHVzX2FsbG93ZWQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7Ci0JcC0+cnQubnJfY3B1c19hbGxvd2VkID0gY3VycmVudC0+cnQubnJfY3B1c19hbGxvd2VkOwotCWlmICh1bmxpa2VseSghY3B1X2lzc2V0KHRhc2tfY3B1KHApLCBwLT5jcHVzX2FsbG93ZWQpIHx8Ci0JCQkhY3B1X29ubGluZSh0YXNrX2NwdShwKSkpKQotCQlzZXRfdGFza19jcHUocCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQogCS8qIENMT05FX1BBUkVOVCByZS11c2VzIHRoZSBvbGQgcGFyZW50ICovCiAJaWYgKGNsb25lX2ZsYWdzICYgKENMT05FX1BBUkVOVHxDTE9ORV9USFJFQUQpKSB7CiAJCXAtPnJlYWxfcGFyZW50ID0gY3VycmVudC0+cmVhbF9wYXJlbnQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXguYyBiL2tlcm5lbC9mdXRleC5jCmluZGV4IGQ5YjNhMjIuLmU3YTM1ZjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC5jCisrKyBiL2tlcm5lbC9mdXRleC5jCkBAIC01MzAsOCArNTMwLDI1IEBACiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJCVdBUk5fT04oIWF0b21pY19yZWFkKCZwaV9zdGF0ZS0+cmVmY291bnQpKTsKLQkJCVdBUk5fT04ocGlkICYmIHBpX3N0YXRlLT5vd25lciAmJgotCQkJCXBpX3N0YXRlLT5vd25lci0+cGlkICE9IHBpZCk7CisKKwkJCS8qCisJCQkgKiBXaGVuIHBpX3N0YXRlLT5vd25lciBpcyBOVUxMIHRoZW4gdGhlIG93bmVyIGRpZWQKKwkJCSAqIGFuZCBhbm90aGVyIHdhaXRlciBpcyBvbiB0aGUgZmx5LiBwaV9zdGF0ZS0+b3duZXIKKwkJCSAqIGlzIGZpeGVkIHVwIGJ5IHRoZSB0YXNrIHdoaWNoIGFjcXVpcmVzCisJCQkgKiBwaV9zdGF0ZS0+cnRfbXV0ZXguCisJCQkgKgorCQkJICogV2UgZG8gbm90IGNoZWNrIGZvciBwaWQgPT0gMCB3aGljaCBjYW4gaGFwcGVuIHdoZW4KKwkJCSAqIHRoZSBvd25lciBkaWVkIGFuZCByb2J1c3RfbGlzdF9leGl0KCkgY2xlYXJlZCB0aGUKKwkJCSAqIFRJRC4KKwkJCSAqLworCQkJaWYgKHBpZCAmJiBwaV9zdGF0ZS0+b3duZXIpIHsKKwkJCQkvKgorCQkJCSAqIEJhaWwgb3V0IGlmIHVzZXIgc3BhY2UgbWFuaXB1bGF0ZWQgdGhlCisJCQkJICogZnV0ZXggdmFsdWUuCisJCQkJICovCisJCQkJaWYgKHBpZCAhPSB0YXNrX3BpZF92bnIocGlfc3RhdGUtPm93bmVyKSkKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CiAKIAkJCWF0b21pY19pbmMoJnBpX3N0YXRlLT5yZWZjb3VudCk7CiAJCQkqcHMgPSBwaV9zdGF0ZTsKQEAgLTc1OCw2ICs3NzUsMTMgQEAKIAlpZiAoIXBpX3N0YXRlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qCisJICogSWYgY3VycmVudCBkb2VzIG5vdCBvd24gdGhlIHBpX3N0YXRlIHRoZW4gdGhlIGZ1dGV4IGlzCisJICogaW5jb25zaXN0ZW50IGFuZCB1c2VyIHNwYWNlIGZpZGRsZWQgd2l0aCB0aGUgZnV0ZXggdmFsdWUuCisJICovCisJaWYgKHBpX3N0YXRlLT5vd25lciAhPSBjdXJyZW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXJhd19zcGluX2xvY2soJnBpX3N0YXRlLT5waV9tdXRleC53YWl0X2xvY2spOwogCW5ld19vd25lciA9IHJ0X211dGV4X25leHRfb3duZXIoJnBpX3N0YXRlLT5waV9tdXRleCk7CiAKQEAgLTE5NzEsNyArMTk5NSw3IEBACiAJLyogVW5xdWV1ZSBhbmQgZHJvcCB0aGUgbG9jayAqLwogCXVucXVldWVfbWVfcGkoJnEpOwogCi0JZ290byBvdXQ7CisJZ290byBvdXRfcHV0X2tleTsKIAogb3V0X3VubG9ja19wdXRfa2V5OgogCXF1ZXVlX3VubG9jaygmcSwgaGIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4X2NvbXBhdC5jIGIva2VybmVsL2Z1dGV4X2NvbXBhdC5jCmluZGV4IDIzNTcxNjUuLmQ0OWFmYjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleF9jb21wYXQuYworKysgYi9rZXJuZWwvZnV0ZXhfY29tcGF0LmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAKIAkJcmV0ID0gLUVTUkNIOwotCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXAgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOwogCQlpZiAoIXApCiAJCQlnb3RvIGVycl91bmxvY2s7CkBAIC0xNTcsNyArMTU3LDcgQEAKIAkJICAgICFjYXBhYmxlKENBUF9TWVNfUFRSQUNFKSkKIAkJCWdvdG8gZXJyX3VubG9jazsKIAkJaGVhZCA9IHAtPmNvbXBhdF9yb2J1c3RfbGlzdDsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKIAlpZiAocHV0X3VzZXIoc2l6ZW9mKCpoZWFkKSwgbGVuX3B0cikpCkBAIC0xNjUsNyArMTY1LDcgQEAKIAlyZXR1cm4gcHV0X3VzZXIocHRyX3RvX2NvbXBhdChoZWFkKSwgaGVhZF9wdHIpOwogCiBlcnJfdW5sb2NrOgotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvaHdfYnJlYWtwb2ludC5jIGIva2VybmVsL2h3X2JyZWFrcG9pbnQuYwppbmRleCA1MGRiZDU5Li45NjdlNjYxNCAxMDA2NDQKLS0tIGEva2VybmVsL2h3X2JyZWFrcG9pbnQuYworKysgYi9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCkBAIC0yNDMsMzggKzI0Myw3MCBAQAogICogICAgICAgKChwZXJfY3B1KG5yX2JwX2ZsZXhpYmxlLCAqKSA+IDEpICsgbWF4KHBlcl9jcHUobnJfY3B1X2JwX3Bpbm5lZCwgKikpCiAgKiAgICAgICAgICAgICsgbWF4KHBlcl9jcHUobnJfdGFza19icF9waW5uZWQsICopKSkgPCBIQlBfTlVNCiAgKi8KLWludCByZXNlcnZlX2JwX3Nsb3Qoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQorc3RhdGljIGludCBfX3Jlc2VydmVfYnBfc2xvdChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCiB7CiAJc3RydWN0IGJwX2J1c3lfc2xvdHMgc2xvdHMgPSB7MH07Ci0JaW50IHJldCA9IDA7Ci0KLQltdXRleF9sb2NrKCZucl9icF9tdXRleCk7CiAKIAlmZXRjaF9icF9idXN5X3Nsb3RzKCZzbG90cywgYnApOwogCiAJLyogRmxleGlibGUgY291bnRlcnMgbmVlZCB0byBrZWVwIGF0IGxlYXN0IG9uZSBzbG90ICovCi0JaWYgKHNsb3RzLnBpbm5lZCArICghIXNsb3RzLmZsZXhpYmxlKSA9PSBIQlBfTlVNKSB7Ci0JCXJldCA9IC1FTk9TUEM7Ci0JCWdvdG8gZW5kOwotCX0KKwlpZiAoc2xvdHMucGlubmVkICsgKCEhc2xvdHMuZmxleGlibGUpID09IEhCUF9OVU0pCisJCXJldHVybiAtRU5PU1BDOwogCiAJdG9nZ2xlX2JwX3Nsb3QoYnAsIHRydWUpOwogCi1lbmQ6CisJcmV0dXJuIDA7Cit9CisKK2ludCByZXNlcnZlX2JwX3Nsb3Qoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZucl9icF9tdXRleCk7CisKKwlyZXQgPSBfX3Jlc2VydmVfYnBfc2xvdChicCk7CisKIAltdXRleF91bmxvY2soJm5yX2JwX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIF9fcmVsZWFzZV9icF9zbG90KHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwl0b2dnbGVfYnBfc2xvdChicCwgZmFsc2UpOworfQorCiB2b2lkIHJlbGVhc2VfYnBfc2xvdChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCiB7CiAJbXV0ZXhfbG9jaygmbnJfYnBfbXV0ZXgpOwogCi0JdG9nZ2xlX2JwX3Nsb3QoYnAsIGZhbHNlKTsKKwlfX3JlbGVhc2VfYnBfc2xvdChicCk7CiAKIAltdXRleF91bmxvY2soJm5yX2JwX211dGV4KTsKIH0KIAorLyoKKyAqIEFsbG93IHRoZSBrZXJuZWwgZGVidWdnZXIgdG8gcmVzZXJ2ZSBicmVha3BvaW50IHNsb3RzIHdpdGhvdXQKKyAqIHRha2luZyBhIGxvY2sgdXNpbmcgdGhlIGRiZ18qIHZhcmlhbnQgb2YgZm9yIHRoZSByZXNlcnZlIGFuZAorICogcmVsZWFzZSBicmVha3BvaW50IHNsb3RzLgorICovCitpbnQgZGJnX3Jlc2VydmVfYnBfc2xvdChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJaWYgKG11dGV4X2lzX2xvY2tlZCgmbnJfYnBfbXV0ZXgpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gX19yZXNlcnZlX2JwX3Nsb3QoYnApOworfQorCitpbnQgZGJnX3JlbGVhc2VfYnBfc2xvdChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJaWYgKG11dGV4X2lzX2xvY2tlZCgmbnJfYnBfbXV0ZXgpKQorCQlyZXR1cm4gLTE7CisKKwlfX3JlbGVhc2VfYnBfc2xvdChicCk7CisKKwlyZXR1cm4gMDsKK30KIAogaW50IHJlZ2lzdGVyX3BlcmZfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCiB7CkBAIC0yOTYsNiArMzI4LDEwIEBACiAJaWYgKCFicC0+YXR0ci5kaXNhYmxlZCB8fCAhYnAtPm92ZXJmbG93X2hhbmRsZXIpCiAJCXJldCA9IGFyY2hfdmFsaWRhdGVfaHdia3B0X3NldHRpbmdzKGJwLCBicC0+Y3R4LT50YXNrKTsKIAorCS8qIGlmIGFyY2hfdmFsaWRhdGVfaHdia3B0X3NldHRpbmdzKCkgZmFpbHMgdGhlbiByZWxlYXNlIGJwIHNsb3QgKi8KKwlpZiAocmV0KQorCQlyZWxlYXNlX2JwX3Nsb3QoYnApOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzI0LDggKzM2MCw4IEBACiBpbnQgbW9kaWZ5X3VzZXJfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnAsIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCiB7CiAJdTY0IG9sZF9hZGRyID0gYnAtPmF0dHIuYnBfYWRkcjsKKwl1NjQgb2xkX2xlbiA9IGJwLT5hdHRyLmJwX2xlbjsKIAlpbnQgb2xkX3R5cGUgPSBicC0+YXR0ci5icF90eXBlOwotCWludCBvbGRfbGVuID0gYnAtPmF0dHIuYnBfbGVuOwogCWludCBlcnIgPSAwOwogCiAJcGVyZl9ldmVudF9kaXNhYmxlKGJwKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZmlmby5jIGIva2VybmVsL2tmaWZvLmMKaW5kZXggMzJjNWMxNS4uMzVlZGJlMjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZmlmby5jCisrKyBiL2tlcm5lbC9rZmlmby5jCkBAIC04MCw3ICs4MCw3IEBACiAKIAlidWZmZXIgPSBrbWFsbG9jKHNpemUsIGdmcF9tYXNrKTsKIAlpZiAoIWJ1ZmZlcikgewotCQlfa2ZpZm9faW5pdChmaWZvLCAwLCAwKTsKKwkJX2tmaWZvX2luaXQoZmlmbywgTlVMTCwgMCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtOTcsNiArOTcsNyBAQAogdm9pZCBrZmlmb19mcmVlKHN0cnVjdCBrZmlmbyAqZmlmbykKIHsKIAlrZnJlZShmaWZvLT5idWZmZXIpOworCV9rZmlmb19pbml0KGZpZm8sIE5VTEwsIDApOwogfQogRVhQT1JUX1NZTUJPTChrZmlmb19mcmVlKTsKIApAQCAtMzQ5LDYgKzM1MCw3IEBACiAgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KICAqIEBmcm9tOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIGFkZGVkLgogICogQGxlbjogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqIEB0b3RhbDogdGhlIGFjdHVhbCByZXR1cm5lZCBkYXRhIGxlbmd0aC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBsZW4gYnl0ZXMgZnJvbSB0aGUgQGZyb20gaW50byB0aGUKICAqIEZJRk8gZGVwZW5kaW5nIGFuZCByZXR1cm5zIC1FRkFVTFQvMC4KQEAgLTM5OSw3ICs0MDEsNyBAQAogICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCiAgKiBAdG86IHdoZXJlIHRoZSBkYXRhIG11c3QgYmUgY29waWVkLgogICogQGxlbjogdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KLSBAIEBsZW5vdXQ6IHBvaW50ZXIgdG8gb3V0cHV0IHZhcmlhYmxlIHdpdGggY29waWVkIGRhdGEKKyAqIEBsZW5vdXQ6IHBvaW50ZXIgdG8gb3V0cHV0IHZhcmlhYmxlIHdpdGggY29waWVkIGRhdGEKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBsZW4gYnl0ZXMgZnJvbSB0aGUgRklGTyBpbnRvIHRoZQogICogQHRvIGJ1ZmZlciBhbmQgMCBvciAtRUZBVUxULgpkaWZmIC0tZ2l0IGEva2VybmVsL2tnZGIuYyBiL2tlcm5lbC9rZ2RiLmMKaW5kZXggMmViNTE3ZS4uNzYxZmRkMiAxMDA2NDQKLS0tIGEva2VybmVsL2tnZGIuYworKysgYi9rZXJuZWwva2dkYi5jCkBAIC01ODMsNiArNTgzLDkgQEAKIAlzbXBfd21iKCk7CiAJYXRvbWljX3NldCgmY3B1X2luX2tnZGJbY3B1XSwgMSk7CiAKKwkvKiBEaXNhYmxlIGFueSBjcHUgc3BlY2lmaWMgaHcgYnJlYWtwb2ludHMgKi8KKwlrZ2RiX2Rpc2FibGVfaHdfZGVidWcocmVncyk7CisKIAkvKiBXYWl0IHRpbGwgcHJpbWFyeSBDUFUgaXMgZG9uZSB3aXRoIGRlYnVnZ2luZyAqLwogCXdoaWxlIChhdG9taWNfcmVhZCgmcGFzc2l2ZV9jcHVfd2FpdFtjcHVdKSkKIAkJY3B1X3JlbGF4KCk7CkBAIC01OTYsNyArNTk5LDcgQEAKIAogCS8qIFNpZ25hbCB0aGUgcHJpbWFyeSBDUFUgdGhhdCB3ZSBhcmUgZG9uZTogKi8KIAlhdG9taWNfc2V0KCZjcHVfaW5fa2dkYltjcHVdLCAwKTsKLQl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CisJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZ19zeW5jKCk7CiAJY2xvY2tzb3VyY2VfdG91Y2hfd2F0Y2hkb2coKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC0xNDUwLDcgKzE0NTMsNyBAQAogCSAgICAoa2dkYl9pbmZvW2NwdV0udGFzayAmJgogCSAgICAga2dkYl9pbmZvW2NwdV0udGFzay0+cGlkICE9IGtnZGJfc3N0ZXBfcGlkKSAmJiAtLXNzdGVwX3RyaWVzKSB7CiAJCWF0b21pY19zZXQoJmtnZGJfYWN0aXZlLCAtMSk7Ci0JCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKKwkJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZ19zeW5jKCk7CiAJCWNsb2Nrc291cmNlX3RvdWNoX3dhdGNoZG9nKCk7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIApAQCAtMTU1MCw3ICsxNTUzLDcgQEAKIAl9CiAJLyogRnJlZSBrZ2RiX2FjdGl2ZSAqLwogCWF0b21pY19zZXQoJmtnZGJfYWN0aXZlLCAtMSk7Ci0JdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOworCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2dfc3luYygpOwogCWNsb2Nrc291cmNlX3RvdWNoX3dhdGNoZG9nKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCBiN2RmMzAyLi5jY2VjNzc0IDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CkBAIC05Myw2ICs5NCw3IEBACiAJeyJuYXRpdmVfZ2V0X2RlYnVncmVnIix9LAogCXsiaXJxX2VudHJpZXNfc3RhcnQiLH0sCiAJeyJjb21tb25faW50ZXJydXB0Iix9LAorCXsibWNvdW50Iix9LAkvKiBtY291bnQgY2FuIGJlIGNhbGxlZCBmcm9tIGV2ZXJ5d2hlcmUgKi8KIAl7TlVMTH0gICAgLyogVGVybWluYXRvciAqLwogfTsKIApAQCAtMTI0LDMwICsxMjYsNiBAQAogc3RhdGljIGludCBrcHJvYmVfZ2FyYmFnZV9zbG90czsKIHN0YXRpYyBpbnQgY29sbGVjdF9nYXJiYWdlX3Nsb3RzKHZvaWQpOwogCi1zdGF0aWMgaW50IF9fa3Byb2JlcyBjaGVja19zYWZldHkodm9pZCkKLXsKLQlpbnQgcmV0ID0gMDsKLSNpZiBkZWZpbmVkKENPTkZJR19QUkVFTVBUKSAmJiBkZWZpbmVkKENPTkZJR19GUkVFWkVSKQotCXJldCA9IGZyZWV6ZV9wcm9jZXNzZXMoKTsKLQlpZiAocmV0ID09IDApIHsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqcTsKLQkJZG9fZWFjaF90aHJlYWQocCwgcSkgewotCQkJaWYgKHAgIT0gY3VycmVudCAmJiBwLT5zdGF0ZSA9PSBUQVNLX1JVTk5JTkcgJiYKLQkJCSAgICBwLT5waWQgIT0gMCkgewotCQkJCXByaW50aygiQ2hlY2sgZmFpbGVkOiAlcyBpcyBydW5uaW5nXG4iLHAtPmNvbW0pOwotCQkJCXJldCA9IC0xOwotCQkJCWdvdG8gbG9vcF9lbmQ7Ci0JCQl9Ci0JCX0gd2hpbGVfZWFjaF90aHJlYWQocCwgcSk7Ci0JfQotbG9vcF9lbmQ6Ci0JdGhhd19wcm9jZXNzZXMoKTsKLSNlbHNlCi0Jc3luY2hyb25pemVfc2NoZWQoKTsKLSNlbmRpZgotCXJldHVybiByZXQ7Ci19Ci0KIC8qKgogICogX19nZXRfaW5zbl9zbG90KCkgLSBGaW5kIGEgc2xvdCBvbiBhbiBleGVjdXRhYmxlIHBhZ2UgZm9yIGFuIGluc3RydWN0aW9uLgogICogV2UgYWxsb2NhdGUgYW4gZXhlY3V0YWJsZSBwYWdlIGlmIHRoZXJlJ3Mgbm8gcm9vbSBvbiBleGlzdGluZyBvbmVzLgpAQCAtMjM1LDkgKzIxMyw4IEBACiB7CiAJc3RydWN0IGtwcm9iZV9pbnNuX3BhZ2UgKmtpcCwgKm5leHQ7CiAKLQkvKiBFbnN1cmUgbm8tb25lIGlzIHByZWVwbXRlZCBvbiB0aGUgZ2FyYmFnZXMgKi8KLQlpZiAoY2hlY2tfc2FmZXR5KCkpCi0JCXJldHVybiAtRUFHQUlOOworCS8qIEVuc3VyZSBuby1vbmUgaXMgaW50ZXJydXB0ZWQgb24gdGhlIGdhcmJhZ2VzICovCisJc3luY2hyb25pemVfc2NoZWQoKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShraXAsIG5leHQsICZrcHJvYmVfaW5zbl9wYWdlcywgbGlzdCkgewogCQlpbnQgaTsKQEAgLTcyOCw3ICs3MDUsOCBAQAogCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJaWYgKCFrZXJuZWxfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKSBwLT5hZGRyKSB8fAotCSAgICBpbl9rcHJvYmVzX2Z1bmN0aW9ucygodW5zaWduZWQgbG9uZykgcC0+YWRkcikpIHsKKwkgICAgaW5fa3Byb2Jlc19mdW5jdGlvbnMoKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHIpIHx8CisJICAgIGZ0cmFjZV90ZXh0X3Jlc2VydmVkKHAtPmFkZHIsIHAtPmFkZHIpKSB7CiAJCXByZWVtcHRfZW5hYmxlKCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9rc3lzZnMuYyBiL2tlcm5lbC9rc3lzZnMuYwppbmRleCAzZmVhZjVhLi42YjFjY2MzIDEwMDY0NAotLS0gYS9rZXJuZWwva3N5c2ZzLmMKKysrIGIva2VybmVsL2tzeXNmcy5jCkBAIC0xOTcsMTYgKzE5Nyw4IEBACiAJCQlnb3RvIGdyb3VwX2V4aXQ7CiAJfQogCi0JLyogY3JlYXRlIHRoZSAvc3lzL2tlcm5lbC91aWRzLyBkaXJlY3RvcnkgKi8KLQllcnJvciA9IHVpZHNfc3lzZnNfaW5pdCgpOwotCWlmIChlcnJvcikKLQkJZ290byBub3Rlc19leGl0OwotCiAJcmV0dXJuIDA7CiAKLW5vdGVzX2V4aXQ6Ci0JaWYgKG5vdGVzX3NpemUgPiAwKQotCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoa2VybmVsX2tvYmosICZub3Rlc19hdHRyKTsKIGdyb3VwX2V4aXQ6CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKGtlcm5lbF9rb2JqLCAma2VybmVsX2F0dHJfZ3JvdXApOwoga3NldF9leGl0OgpkaWZmIC0tZ2l0IGEva2VybmVsL2t0aHJlYWQuYyBiL2tlcm5lbC9rdGhyZWFkLmMKaW5kZXggZmJiNjIyMi4uODJlZDBlYSAxMDA2NDQKLS0tIGEva2VybmVsL2t0aHJlYWQuYworKysgYi9rZXJuZWwva3RocmVhZC5jCkBAIC0xMDEsNyArMTAxLDcgQEAKICAqCiAgKiBEZXNjcmlwdGlvbjogVGhpcyBoZWxwZXIgZnVuY3Rpb24gY3JlYXRlcyBhbmQgbmFtZXMgYSBrZXJuZWwKICAqIHRocmVhZC4gIFRoZSB0aHJlYWQgd2lsbCBiZSBzdG9wcGVkOiB1c2Ugd2FrZV91cF9wcm9jZXNzKCkgdG8gc3RhcnQKLSAqIGl0LiAgU2VlIGFsc28ga3RocmVhZF9ydW4oKSwga3RocmVhZF9jcmVhdGVfb25fY3B1KCkuCisgKiBpdC4gIFNlZSBhbHNvIGt0aHJlYWRfcnVuKCkuCiAgKgogICogV2hlbiB3b2tlbiwgdGhlIHRocmVhZCB3aWxsIHJ1biBAdGhyZWFkZm4oKSB3aXRoIEBkYXRhIGFzIGl0cwogICogYXJndW1lbnQuIEB0aHJlYWRmbigpIGNhbiBlaXRoZXIgY2FsbCBkb19leGl0KCkgZGlyZWN0bHkgaWYgaXQgaXMgYQpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggNWZlYWRkYy4uMGMzMGQwNCAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXAuYworKysgYi9rZXJuZWwvbG9ja2RlcC5jCkBAIC0yMTQ3LDcgKzIxNDcsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIHByaW50X2lycV9pbnZlcnNpb25fYnVnKGN1cnIsICZyb290LCB0YXJnZXRfZW50cnksCi0JCQkJCXRoaXMsIDEsIGlycWNsYXNzKTsKKwkJCQkJdGhpcywgMCwgaXJxY2xhc3MpOwogfQogCiB2b2lkIHByaW50X2lycXRyYWNlX2V2ZW50cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpCkBAIC0zODA5LDMgKzM4MDksMjEgQEAKIAkJbG9ja2RlcF9wcmludF9oZWxkX2xvY2tzKGN1cnIpOwogCX0KIH0KKwordm9pZCBsb2NrZGVwX3JjdV9kZXJlZmVyZW5jZShjb25zdCBjaGFyICpmaWxlLCBjb25zdCBpbnQgbGluZSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50OworCisJaWYgKCFkZWJ1Z19sb2Nrc19vZmYoKSkKKwkJcmV0dXJuOworCXByaW50aygiXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50ayggICJbIElORk86IHN1c3BpY2lvdXMgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKCkgdXNhZ2UuIF1cbiIpOworCXByaW50ayggICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByaW50aygiJXM6JWQgaW52b2tlZCByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSB3aXRob3V0IHByb3RlY3Rpb24hXG4iLAorCQkJZmlsZSwgbGluZSk7CisJcHJpbnRrKCJcbm90aGVyIGluZm8gdGhhdCBtaWdodCBoZWxwIHVzIGRlYnVnIHRoaXM6XG5cbiIpOworCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhjdXJyKTsKKwlwcmludGsoIlxuc3RhY2sgYmFja3RyYWNlOlxuIik7CisJZHVtcF9zdGFjaygpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9yY3VfZGVyZWZlcmVuY2UpOwpkaWZmIC0tZ2l0IGEva2VybmVsL25vdGlmaWVyLmMgYi9rZXJuZWwvbm90aWZpZXIuYwppbmRleCBhY2QyNGU3Li4yNDg4YmE3IDEwMDY0NAotLS0gYS9rZXJuZWwvbm90aWZpZXIuYworKysgYi9rZXJuZWwvbm90aWZpZXIuYwpAQCAtNzgsMTAgKzc4LDEwIEBACiAJaW50IHJldCA9IE5PVElGWV9ET05FOwogCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsICpuZXh0X25iOwogCi0JbmIgPSByY3VfZGVyZWZlcmVuY2UoKm5sKTsKKwluYiA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKm5sKTsKIAogCXdoaWxlIChuYiAmJiBucl90b19jYWxsKSB7Ci0JCW5leHRfbmIgPSByY3VfZGVyZWZlcmVuY2UobmItPm5leHQpOworCQluZXh0X25iID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhuYi0+bmV4dCk7CiAKICNpZmRlZiBDT05GSUdfREVCVUdfTk9USUZJRVJTCiAJCWlmICh1bmxpa2VseSghZnVuY19wdHJfaXNfa2VybmVsX3RleHQobmItPm5vdGlmaWVyX2NhbGwpKSkgewpAQCAtMzA5LDcgKzMwOSw3IEBACiAJICogcmFjeSB0aGVuIGl0IGRvZXMgbm90IG1hdHRlciB3aGF0IHRoZSByZXN1bHQgb2YgdGhlIHRlc3QKIAkgKiBpcywgd2UgcmUtY2hlY2sgdGhlIGxpc3QgYWZ0ZXIgaGF2aW5nIHRha2VuIHRoZSBsb2NrIGFueXdheToKIAkgKi8KLQlpZiAocmN1X2RlcmVmZXJlbmNlKG5oLT5oZWFkKSkgeworCWlmIChyY3VfZGVyZWZlcmVuY2VfcmF3KG5oLT5oZWFkKSkgewogCQlkb3duX3JlYWQoJm5oLT5yd3NlbSk7CiAJCXJldCA9IG5vdGlmaWVyX2NhbGxfY2hhaW4oJm5oLT5oZWFkLCB2YWwsIHYsIG5yX3RvX2NhbGwsCiAJCQkJCW5yX2NhbGxzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYWRhdGEuYyBiL2tlcm5lbC9wYWRhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjliY2I4Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3BhZGF0YS5jCkBAIC0wLDAgKzEsNjkwIEBACisvKgorICogcGFkYXRhLmMgLSBnZW5lcmljIGludGVyZmFjZSB0byBwcm9jZXNzIGRhdGEgc3RyZWFtcyBpbiBwYXJhbGxlbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBzZWN1bmV0IFNlY3VyaXR5IE5ldHdvcmtzIEFHCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgU3RlZmZlbiBLbGFzc2VydCA8c3RlZmZlbi5rbGFzc2VydEBzZWN1bmV0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvcGFkYXRhLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisKKyNkZWZpbmUgTUFYX1NFUV9OUiBJTlRfTUFYIC0gTlJfQ1BVUworI2RlZmluZSBNQVhfT0JKX05VTSAxMDAwMCAqIE5SX0NQVVMKKworc3RhdGljIGludCBwYWRhdGFfaW5kZXhfdG9fY3B1KHN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZCwgaW50IGNwdV9pbmRleCkKK3sKKwlpbnQgY3B1LCB0YXJnZXRfY3B1OworCisJdGFyZ2V0X2NwdSA9IGNwdW1hc2tfZmlyc3QocGQtPmNwdW1hc2spOworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2luZGV4OyBjcHUrKykKKwkJdGFyZ2V0X2NwdSA9IGNwdW1hc2tfbmV4dCh0YXJnZXRfY3B1LCBwZC0+Y3B1bWFzayk7CisKKwlyZXR1cm4gdGFyZ2V0X2NwdTsKK30KKworc3RhdGljIGludCBwYWRhdGFfY3B1X2hhc2goc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpCit7CisJaW50IGNwdV9pbmRleDsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisKKwlwZCA9ICBwYWRhdGEtPnBkOworCisJLyoKKwkgKiBIYXNoIHRoZSBzZXF1ZW5jZSBudW1iZXJzIHRvIHRoZSBjcHVzIGJ5IHRha2luZworCSAqIHNlcV9uciBtb2QuIG51bWJlciBvZiBjcHVzIGluIHVzZS4KKwkgKi8KKwljcHVfaW5kZXggPSAgcGFkYXRhLT5zZXFfbnIgJSBjcHVtYXNrX3dlaWdodChwZC0+Y3B1bWFzayk7CisKKwlyZXR1cm4gcGFkYXRhX2luZGV4X3RvX2NwdShwZCwgY3B1X2luZGV4KTsKK30KKworc3RhdGljIHZvaWQgcGFkYXRhX3BhcmFsbGVsX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBhZGF0YV9xdWV1ZSAqcXVldWU7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkOworCXN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0OworCUxJU1RfSEVBRChsb2NhbF9saXN0KTsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlxdWV1ZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGFkYXRhX3F1ZXVlLCBwd29yayk7CisJcGQgPSBxdWV1ZS0+cGQ7CisJcGluc3QgPSBwZC0+cGluc3Q7CisKKwlzcGluX2xvY2soJnF1ZXVlLT5wYXJhbGxlbC5sb2NrKTsKKwlsaXN0X3JlcGxhY2VfaW5pdCgmcXVldWUtPnBhcmFsbGVsLmxpc3QsICZsb2NhbF9saXN0KTsKKwlzcGluX3VubG9jaygmcXVldWUtPnBhcmFsbGVsLmxvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZsb2NhbF9saXN0KSkgeworCQlzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YTsKKworCQlwYWRhdGEgPSBsaXN0X2VudHJ5KGxvY2FsX2xpc3QubmV4dCwKKwkJCQkgICAgc3RydWN0IHBhZGF0YV9wcml2LCBsaXN0KTsKKworCQlsaXN0X2RlbF9pbml0KCZwYWRhdGEtPmxpc3QpOworCisJCXBhZGF0YS0+cGFyYWxsZWwocGFkYXRhKTsKKwl9CisKKwlsb2NhbF9iaF9lbmFibGUoKTsKK30KKworLyoKKyAqIHBhZGF0YV9kb19wYXJhbGxlbCAtIHBhZGF0YSBwYXJhbGxlbGl6YXRpb24gZnVuY3Rpb24KKyAqCisgKiBAcGluc3Q6IHBhZGF0YSBpbnN0YW5jZQorICogQHBhZGF0YTogb2JqZWN0IHRvIGJlIHBhcmFsbGVsaXplZAorICogQGNiX2NwdTogY3B1IHRoZSBzZXJpYWxpemF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgcnVuIG9uLAorICogICAgICAgICAgbXVzdCBiZSBpbiB0aGUgY3B1bWFzayBvZiBwYWRhdGEuCisgKgorICogVGhlIHBhcmFsbGVsaXphdGlvbiBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIHJ1biB3aXRoIEJIcyBvZmYuCisgKiBOb3RlOiBFdmVyeSBvYmplY3Qgd2hpY2ggaXMgcGFyYWxsZWxpemVkIGJ5IHBhZGF0YV9kb19wYXJhbGxlbAorICogbXVzdCBiZSBzZWVuIGJ5IHBhZGF0YV9kb19zZXJpYWwuCisgKi8KK2ludCBwYWRhdGFfZG9fcGFyYWxsZWwoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCisJCSAgICAgICBzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSwgaW50IGNiX2NwdSkKK3sKKwlpbnQgdGFyZ2V0X2NwdSwgZXJyOworCXN0cnVjdCBwYWRhdGFfcXVldWUgKnF1ZXVlOworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKKworCXJjdV9yZWFkX2xvY2tfYmgoKTsKKworCXBkID0gcmN1X2RlcmVmZXJlbmNlKHBpbnN0LT5wZCk7CisKKwllcnIgPSAwOworCWlmICghKHBpbnN0LT5mbGFncyAmIFBBREFUQV9JTklUKSkKKwkJZ290byBvdXQ7CisKKwllcnIgPSAgLUVCVVNZOworCWlmICgocGluc3QtPmZsYWdzICYgUEFEQVRBX1JFU0VUKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoYXRvbWljX3JlYWQoJnBkLT5yZWZjbnQpID49IE1BWF9PQkpfTlVNKQorCQlnb3RvIG91dDsKKworCWVyciA9IC1FSU5WQUw7CisJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNiX2NwdSwgcGQtPmNwdW1hc2spKQorCQlnb3RvIG91dDsKKworCWVyciA9IC1FSU5QUk9HUkVTUzsKKwlhdG9taWNfaW5jKCZwZC0+cmVmY250KTsKKwlwYWRhdGEtPnBkID0gcGQ7CisJcGFkYXRhLT5jYl9jcHUgPSBjYl9jcHU7CisKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJnBkLT5zZXFfbnIpID09IHBkLT5tYXhfc2VxX25yKSkKKwkJYXRvbWljX3NldCgmcGQtPnNlcV9uciwgLTEpOworCisJcGFkYXRhLT5zZXFfbnIgPSBhdG9taWNfaW5jX3JldHVybigmcGQtPnNlcV9ucik7CisKKwl0YXJnZXRfY3B1ID0gcGFkYXRhX2NwdV9oYXNoKHBhZGF0YSk7CisJcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cXVldWUsIHRhcmdldF9jcHUpOworCisJc3Bpbl9sb2NrKCZxdWV1ZS0+cGFyYWxsZWwubG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcGFkYXRhLT5saXN0LCAmcXVldWUtPnBhcmFsbGVsLmxpc3QpOworCXNwaW5fdW5sb2NrKCZxdWV1ZS0+cGFyYWxsZWwubG9jayk7CisKKwlxdWV1ZV93b3JrX29uKHRhcmdldF9jcHUsIHBpbnN0LT53cSwgJnF1ZXVlLT5wd29yayk7CisKK291dDoKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHBhZGF0YV9kb19wYXJhbGxlbCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YV9nZXRfbmV4dChzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQpCit7CisJaW50IGNwdSwgbnVtX2NwdXMsIGVtcHR5LCBjYWxjX3NlcV9ucjsKKwlpbnQgc2VxX25yLCBuZXh0X25yLCBvdmVycnVuLCBuZXh0X292ZXJydW47CisJc3RydWN0IHBhZGF0YV9xdWV1ZSAqcXVldWUsICpuZXh0X3F1ZXVlOworCXN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhOworCXN0cnVjdCBwYWRhdGFfbGlzdCAqcmVvcmRlcjsKKworCWVtcHR5ID0gMDsKKwluZXh0X25yID0gLTE7CisJbmV4dF9vdmVycnVuID0gMDsKKwluZXh0X3F1ZXVlID0gTlVMTDsKKworCW51bV9jcHVzID0gY3B1bWFza193ZWlnaHQocGQtPmNwdW1hc2spOworCisJZm9yX2VhY2hfY3B1KGNwdSwgcGQtPmNwdW1hc2spIHsKKwkJcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cXVldWUsIGNwdSk7CisJCXJlb3JkZXIgPSAmcXVldWUtPnJlb3JkZXI7CisKKwkJLyoKKwkJICogQ2FsY3VsYXRlIHRoZSBzZXFfbnIgb2YgdGhlIG9iamVjdCB0aGF0IHNob3VsZCBiZQorCQkgKiBuZXh0IGluIHRoaXMgcXVldWUuCisJCSAqLworCQlvdmVycnVuID0gMDsKKwkJY2FsY19zZXFfbnIgPSAoYXRvbWljX3JlYWQoJnF1ZXVlLT5udW1fb2JqKSAqIG51bV9jcHVzKQorCQkJICAgICAgICsgcXVldWUtPmNwdV9pbmRleDsKKworCQlpZiAodW5saWtlbHkoY2FsY19zZXFfbnIgPiBwZC0+bWF4X3NlcV9ucikpIHsKKwkJCWNhbGNfc2VxX25yID0gY2FsY19zZXFfbnIgLSBwZC0+bWF4X3NlcV9uciAtIDE7CisJCQlvdmVycnVuID0gMTsKKwkJfQorCisJCWlmICghbGlzdF9lbXB0eSgmcmVvcmRlci0+bGlzdCkpIHsKKwkJCXBhZGF0YSA9IGxpc3RfZW50cnkocmVvcmRlci0+bGlzdC5uZXh0LAorCQkJCQkgICAgc3RydWN0IHBhZGF0YV9wcml2LCBsaXN0KTsKKworCQkJc2VxX25yICA9IHBhZGF0YS0+c2VxX25yOworCQkJQlVHX09OKGNhbGNfc2VxX25yICE9IHNlcV9ucik7CisJCX0gZWxzZSB7CisJCQlzZXFfbnIgPSBjYWxjX3NlcV9ucjsKKwkJCWVtcHR5Kys7CisJCX0KKworCQlpZiAobmV4dF9uciA8IDAgfHwgc2VxX25yIDwgbmV4dF9ucgorCQkgICAgfHwgKG5leHRfb3ZlcnJ1biAmJiAhb3ZlcnJ1bikpIHsKKwkJCW5leHRfbnIgPSBzZXFfbnI7CisJCQluZXh0X292ZXJydW4gPSBvdmVycnVuOworCQkJbmV4dF9xdWV1ZSA9IHF1ZXVlOworCQl9CisJfQorCisJcGFkYXRhID0gTlVMTDsKKworCWlmIChlbXB0eSA9PSBudW1fY3B1cykKKwkJZ290byBvdXQ7CisKKwlyZW9yZGVyID0gJm5leHRfcXVldWUtPnJlb3JkZXI7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnJlb3JkZXItPmxpc3QpKSB7CisJCXBhZGF0YSA9IGxpc3RfZW50cnkocmVvcmRlci0+bGlzdC5uZXh0LAorCQkJCSAgICBzdHJ1Y3QgcGFkYXRhX3ByaXYsIGxpc3QpOworCisJCWlmICh1bmxpa2VseShuZXh0X292ZXJydW4pKSB7CisJCQlmb3JfZWFjaF9jcHUoY3B1LCBwZC0+Y3B1bWFzaykgeworCQkJCXF1ZXVlID0gcGVyX2NwdV9wdHIocGQtPnF1ZXVlLCBjcHUpOworCQkJCWF0b21pY19zZXQoJnF1ZXVlLT5udW1fb2JqLCAwKTsKKwkJCX0KKwkJfQorCisJCXNwaW5fbG9jaygmcmVvcmRlci0+bG9jayk7CisJCWxpc3RfZGVsX2luaXQoJnBhZGF0YS0+bGlzdCk7CisJCWF0b21pY19kZWMoJnBkLT5yZW9yZGVyX29iamVjdHMpOworCQlzcGluX3VubG9jaygmcmVvcmRlci0+bG9jayk7CisKKwkJYXRvbWljX2luYygmbmV4dF9xdWV1ZS0+bnVtX29iaik7CisKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG5leHRfbnIgJSBudW1fY3B1cyA9PSBuZXh0X3F1ZXVlLT5jcHVfaW5kZXgpIHsKKwkJcGFkYXRhID0gRVJSX1BUUigtRU5PREFUQSk7CisJCWdvdG8gb3V0OworCX0KKworCXBhZGF0YSA9IEVSUl9QVFIoLUVJTlBST0dSRVNTKTsKK291dDoKKwlyZXR1cm4gcGFkYXRhOworfQorCitzdGF0aWMgdm9pZCBwYWRhdGFfcmVvcmRlcihzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQpCit7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGE7CisJc3RydWN0IHBhZGF0YV9xdWV1ZSAqcXVldWU7CisJc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QgPSBwZC0+cGluc3Q7CisKK3RyeV9hZ2FpbjoKKwlpZiAoIXNwaW5fdHJ5bG9ja19iaCgmcGQtPmxvY2spKQorCQlnb3RvIG91dDsKKworCXdoaWxlICgxKSB7CisJCXBhZGF0YSA9IHBhZGF0YV9nZXRfbmV4dChwZCk7CisKKwkJaWYgKCFwYWRhdGEgfHwgUFRSX0VSUihwYWRhdGEpID09IC1FSU5QUk9HUkVTUykKKwkJCWJyZWFrOworCisJCWlmIChQVFJfRVJSKHBhZGF0YSkgPT0gLUVOT0RBVEEpIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZwZC0+bG9jayk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXF1ZXVlID0gcGVyX2NwdV9wdHIocGQtPnF1ZXVlLCBwYWRhdGEtPmNiX2NwdSk7CisKKwkJc3Bpbl9sb2NrKCZxdWV1ZS0+c2VyaWFsLmxvY2spOworCQlsaXN0X2FkZF90YWlsKCZwYWRhdGEtPmxpc3QsICZxdWV1ZS0+c2VyaWFsLmxpc3QpOworCQlzcGluX3VubG9jaygmcXVldWUtPnNlcmlhbC5sb2NrKTsKKworCQlxdWV1ZV93b3JrX29uKHBhZGF0YS0+Y2JfY3B1LCBwaW5zdC0+d3EsICZxdWV1ZS0+c3dvcmspOworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZwZC0+bG9jayk7CisKKwlpZiAoYXRvbWljX3JlYWQoJnBkLT5yZW9yZGVyX29iamVjdHMpKQorCQlnb3RvIHRyeV9hZ2FpbjsKKworb3V0OgorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgcGFkYXRhX3NlcmlhbF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwYWRhdGFfcXVldWUgKnF1ZXVlOworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKKwlMSVNUX0hFQUQobG9jYWxfbGlzdCk7CisKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisJcXVldWUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBhZGF0YV9xdWV1ZSwgc3dvcmspOworCXBkID0gcXVldWUtPnBkOworCisJc3Bpbl9sb2NrKCZxdWV1ZS0+c2VyaWFsLmxvY2spOworCWxpc3RfcmVwbGFjZV9pbml0KCZxdWV1ZS0+c2VyaWFsLmxpc3QsICZsb2NhbF9saXN0KTsKKwlzcGluX3VubG9jaygmcXVldWUtPnNlcmlhbC5sb2NrKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmbG9jYWxfbGlzdCkpIHsKKwkJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGE7CisKKwkJcGFkYXRhID0gbGlzdF9lbnRyeShsb2NhbF9saXN0Lm5leHQsCisJCQkJICAgIHN0cnVjdCBwYWRhdGFfcHJpdiwgbGlzdCk7CisKKwkJbGlzdF9kZWxfaW5pdCgmcGFkYXRhLT5saXN0KTsKKworCQlwYWRhdGEtPnNlcmlhbChwYWRhdGEpOworCQlhdG9taWNfZGVjKCZwZC0+cmVmY250KTsKKwl9CisJbG9jYWxfYmhfZW5hYmxlKCk7Cit9CisKKy8qCisgKiBwYWRhdGFfZG9fc2VyaWFsIC0gcGFkYXRhIHNlcmlhbGl6YXRpb24gZnVuY3Rpb24KKyAqCisgKiBAcGFkYXRhOiBvYmplY3QgdG8gYmUgc2VyaWFsaXplZC4KKyAqCisgKiBwYWRhdGFfZG9fc2VyaWFsIG11c3QgYmUgY2FsbGVkIGZvciBldmVyeSBwYXJhbGxlbGl6ZWQgb2JqZWN0LgorICogVGhlIHNlcmlhbGl6YXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBydW4gd2l0aCBCSHMgb2ZmLgorICovCit2b2lkIHBhZGF0YV9kb19zZXJpYWwoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpCit7CisJaW50IGNwdTsKKwlzdHJ1Y3QgcGFkYXRhX3F1ZXVlICpxdWV1ZTsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisKKwlwZCA9IHBhZGF0YS0+cGQ7CisKKwljcHUgPSBnZXRfY3B1KCk7CisJcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cXVldWUsIGNwdSk7CisKKwlzcGluX2xvY2soJnF1ZXVlLT5yZW9yZGVyLmxvY2spOworCWF0b21pY19pbmMoJnBkLT5yZW9yZGVyX29iamVjdHMpOworCWxpc3RfYWRkX3RhaWwoJnBhZGF0YS0+bGlzdCwgJnF1ZXVlLT5yZW9yZGVyLmxpc3QpOworCXNwaW5fdW5sb2NrKCZxdWV1ZS0+cmVvcmRlci5sb2NrKTsKKworCXB1dF9jcHUoKTsKKworCXBhZGF0YV9yZW9yZGVyKHBkKTsKK30KK0VYUE9SVF9TWU1CT0wocGFkYXRhX2RvX3NlcmlhbCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGFkYXRhX2FsbG9jX3BkKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQoreworCWludCBjcHUsIGNwdV9pbmRleCwgbnVtX2NwdXM7CisJc3RydWN0IHBhZGF0YV9xdWV1ZSAqcXVldWU7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkOworCisJY3B1X2luZGV4ID0gMDsKKworCXBkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBhcmFsbGVsX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkKQorCQlnb3RvIGVycjsKKworCXBkLT5xdWV1ZSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgcGFkYXRhX3F1ZXVlKTsKKwlpZiAoIXBkLT5xdWV1ZSkKKwkJZ290byBlcnJfZnJlZV9wZDsKKworCWlmICghYWxsb2NfY3B1bWFza192YXIoJnBkLT5jcHVtYXNrLCBHRlBfS0VSTkVMKSkKKwkJZ290byBlcnJfZnJlZV9xdWV1ZTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cXVldWUsIGNwdSk7CisKKwkJcXVldWUtPnBkID0gcGQ7CisKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVtYXNrKQorCQkgICAgJiYgY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9hY3RpdmVfbWFzaykpIHsKKwkJCXF1ZXVlLT5jcHVfaW5kZXggPSBjcHVfaW5kZXg7CisJCQljcHVfaW5kZXgrKzsKKwkJfSBlbHNlCisJCQlxdWV1ZS0+Y3B1X2luZGV4ID0gLTE7CisKKwkJSU5JVF9MSVNUX0hFQUQoJnF1ZXVlLT5yZW9yZGVyLmxpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmcXVldWUtPnBhcmFsbGVsLmxpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmcXVldWUtPnNlcmlhbC5saXN0KTsKKwkJc3Bpbl9sb2NrX2luaXQoJnF1ZXVlLT5yZW9yZGVyLmxvY2spOworCQlzcGluX2xvY2tfaW5pdCgmcXVldWUtPnBhcmFsbGVsLmxvY2spOworCQlzcGluX2xvY2tfaW5pdCgmcXVldWUtPnNlcmlhbC5sb2NrKTsKKworCQlJTklUX1dPUksoJnF1ZXVlLT5wd29yaywgcGFkYXRhX3BhcmFsbGVsX3dvcmtlcik7CisJCUlOSVRfV09SSygmcXVldWUtPnN3b3JrLCBwYWRhdGFfc2VyaWFsX3dvcmtlcik7CisJCWF0b21pY19zZXQoJnF1ZXVlLT5udW1fb2JqLCAwKTsKKwl9CisKKwljcHVtYXNrX2FuZChwZC0+Y3B1bWFzaywgY3B1bWFzaywgY3B1X2FjdGl2ZV9tYXNrKTsKKworCW51bV9jcHVzID0gY3B1bWFza193ZWlnaHQocGQtPmNwdW1hc2spOworCXBkLT5tYXhfc2VxX25yID0gKE1BWF9TRVFfTlIgLyBudW1fY3B1cykgKiBudW1fY3B1cyAtIDE7CisKKwlhdG9taWNfc2V0KCZwZC0+c2VxX25yLCAtMSk7CisJYXRvbWljX3NldCgmcGQtPnJlb3JkZXJfb2JqZWN0cywgMCk7CisJYXRvbWljX3NldCgmcGQtPnJlZmNudCwgMCk7CisJcGQtPnBpbnN0ID0gcGluc3Q7CisJc3Bpbl9sb2NrX2luaXQoJnBkLT5sb2NrKTsKKworCXJldHVybiBwZDsKKworZXJyX2ZyZWVfcXVldWU6CisJZnJlZV9wZXJjcHUocGQtPnF1ZXVlKTsKK2Vycl9mcmVlX3BkOgorCWtmcmVlKHBkKTsKK2VycjoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcGFkYXRhX2ZyZWVfcGQoc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkKQoreworCWZyZWVfY3B1bWFza192YXIocGQtPmNwdW1hc2spOworCWZyZWVfcGVyY3B1KHBkLT5xdWV1ZSk7CisJa2ZyZWUocGQpOworfQorCitzdGF0aWMgdm9pZCBwYWRhdGFfcmVwbGFjZShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJCSAgIHN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZF9uZXcpCit7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkX29sZCA9IHBpbnN0LT5wZDsKKworCXBpbnN0LT5mbGFncyB8PSBQQURBVEFfUkVTRVQ7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIocGluc3QtPnBkLCBwZF9uZXcpOworCisJc3luY2hyb25pemVfcmN1KCk7CisKKwl3aGlsZSAoYXRvbWljX3JlYWQoJnBkX29sZC0+cmVmY250KSAhPSAwKQorCQl5aWVsZCgpOworCisJZmx1c2hfd29ya3F1ZXVlKHBpbnN0LT53cSk7CisKKwlwYWRhdGFfZnJlZV9wZChwZF9vbGQpOworCisJcGluc3QtPmZsYWdzICY9IH5QQURBVEFfUkVTRVQ7Cit9CisKKy8qCisgKiBwYWRhdGFfc2V0X2NwdW1hc2sgLSBzZXQgdGhlIGNwdW1hc2sgdGhhdCBwYWRhdGEgc2hvdWxkIHVzZQorICoKKyAqIEBwaW5zdDogcGFkYXRhIGluc3RhbmNlCisgKiBAY3B1bWFzazogdGhlIGNwdW1hc2sgdG8gdXNlCisgKi8KK2ludCBwYWRhdGFfc2V0X2NwdW1hc2soc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCisJCQljcHVtYXNrX3Zhcl90IGNwdW1hc2spCit7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkOworCWludCBlcnIgPSAwOworCisJbWlnaHRfc2xlZXAoKTsKKworCW11dGV4X2xvY2soJnBpbnN0LT5sb2NrKTsKKworCXBkID0gcGFkYXRhX2FsbG9jX3BkKHBpbnN0LCBjcHVtYXNrKTsKKwlpZiAoIXBkKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWNwdW1hc2tfY29weShwaW5zdC0+Y3B1bWFzaywgY3B1bWFzayk7CisKKwlwYWRhdGFfcmVwbGFjZShwaW5zdCwgcGQpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwaW5zdC0+bG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwYWRhdGFfc2V0X2NwdW1hc2spOworCitzdGF0aWMgaW50IF9fcGFkYXRhX2FkZF9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpCit7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkOworCisJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfYWN0aXZlX21hc2spKSB7CisJCXBkID0gcGFkYXRhX2FsbG9jX3BkKHBpbnN0LCBwaW5zdC0+Y3B1bWFzayk7CisJCWlmICghcGQpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlwYWRhdGFfcmVwbGFjZShwaW5zdCwgcGQpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogcGFkYXRhX2FkZF9jcHUgLSBhZGQgYSBjcHUgdG8gdGhlIHBhZGF0YSBjcHVtYXNrCisgKgorICogQHBpbnN0OiBwYWRhdGEgaW5zdGFuY2UKKyAqIEBjcHU6IGNwdSB0byBhZGQKKyAqLworaW50IHBhZGF0YV9hZGRfY3B1KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LCBpbnQgY3B1KQoreworCWludCBlcnI7CisKKwltaWdodF9zbGVlcCgpOworCisJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCisJY3B1bWFza19zZXRfY3B1KGNwdSwgcGluc3QtPmNwdW1hc2spOworCWVyciA9IF9fcGFkYXRhX2FkZF9jcHUocGluc3QsIGNwdSk7CisKKwltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHBhZGF0YV9hZGRfY3B1KTsKKworc3RhdGljIGludCBfX3BhZGF0YV9yZW1vdmVfY3B1KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LCBpbnQgY3B1KQoreworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKKworCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkgeworCQlwZCA9IHBhZGF0YV9hbGxvY19wZChwaW5zdCwgcGluc3QtPmNwdW1hc2spOworCQlpZiAoIXBkKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcGFkYXRhX3JlcGxhY2UocGluc3QsIHBkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHBhZGF0YV9yZW1vdmVfY3B1IC0gcmVtb3ZlIGEgY3B1IGZyb20gdGhlIHBhZGF0YSBjcHVtYXNrCisgKgorICogQHBpbnN0OiBwYWRhdGEgaW5zdGFuY2UKKyAqIEBjcHU6IGNwdSB0byByZW1vdmUKKyAqLworaW50IHBhZGF0YV9yZW1vdmVfY3B1KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LCBpbnQgY3B1KQoreworCWludCBlcnI7CisKKwltaWdodF9zbGVlcCgpOworCisJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCisJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzayk7CisJZXJyID0gX19wYWRhdGFfcmVtb3ZlX2NwdShwaW5zdCwgY3B1KTsKKworCW11dGV4X3VubG9jaygmcGluc3QtPmxvY2spOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocGFkYXRhX3JlbW92ZV9jcHUpOworCisvKgorICogcGFkYXRhX3N0YXJ0IC0gc3RhcnQgdGhlIHBhcmFsbGVsIHByb2Nlc3NpbmcKKyAqCisgKiBAcGluc3Q6IHBhZGF0YSBpbnN0YW5jZSB0byBzdGFydAorICovCit2b2lkIHBhZGF0YV9zdGFydChzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCkKK3sKKwltaWdodF9zbGVlcCgpOworCisJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCXBpbnN0LT5mbGFncyB8PSBQQURBVEFfSU5JVDsKKwltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0wocGFkYXRhX3N0YXJ0KTsKKworLyoKKyAqIHBhZGF0YV9zdG9wIC0gc3RvcCB0aGUgcGFyYWxsZWwgcHJvY2Vzc2luZworICoKKyAqIEBwaW5zdDogcGFkYXRhIGluc3RhbmNlIHRvIHN0b3AKKyAqLwordm9pZCBwYWRhdGFfc3RvcChzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCkKK3sKKwltaWdodF9zbGVlcCgpOworCisJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCXBpbnN0LT5mbGFncyAmPSB+UEFEQVRBX0lOSVQ7CisJbXV0ZXhfdW5sb2NrKCZwaW5zdC0+bG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHBhZGF0YV9zdG9wKTsKKworc3RhdGljIGludCBfX2NwdWluaXQgcGFkYXRhX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCWludCBlcnI7CisJc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3Q7CisJaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CisKKwlwaW5zdCA9IGNvbnRhaW5lcl9vZihuZmIsIHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UsIGNwdV9ub3RpZmllcik7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgorCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzaykpCisJCQlicmVhazsKKwkJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCQllcnIgPSBfX3BhZGF0YV9hZGRfY3B1KHBpbnN0LCBjcHUpOworCQltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBOT1RJRllfQkFEOworCQlicmVhazsKKworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgorCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzaykpCisJCQlicmVhazsKKwkJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCQllcnIgPSBfX3BhZGF0YV9yZW1vdmVfY3B1KHBpbnN0LCBjcHUpOworCQltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBOT1RJRllfQkFEOworCQlicmVhazsKKworCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgorCWNhc2UgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTjoKKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgcGluc3QtPmNwdW1hc2spKQorCQkJYnJlYWs7CisJCW11dGV4X2xvY2soJnBpbnN0LT5sb2NrKTsKKwkJX19wYWRhdGFfcmVtb3ZlX2NwdShwaW5zdCwgY3B1KTsKKwkJbXV0ZXhfdW5sb2NrKCZwaW5zdC0+bG9jayk7CisKKwljYXNlIENQVV9ET1dOX0ZBSUxFRDoKKwljYXNlIENQVV9ET1dOX0ZBSUxFRF9GUk9aRU46CisJCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIHBpbnN0LT5jcHVtYXNrKSkKKwkJCWJyZWFrOworCQltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7CisJCV9fcGFkYXRhX2FkZF9jcHUocGluc3QsIGNwdSk7CisJCW11dGV4X3VubG9jaygmcGluc3QtPmxvY2spOworCX0KKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKKy8qCisgKiBwYWRhdGFfYWxsb2MgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIHBhZGF0YSBpbnN0YW5jZQorICoKKyAqIEBjcHVtYXNrOiBjcHVtYXNrIHRoYXQgcGFkYXRhIHVzZXMgZm9yIHBhcmFsbGVsaXphdGlvbgorICogQHdxOiB3b3JrcXVldWUgdG8gdXNlIGZvciB0aGUgYWxsb2NhdGVkIHBhZGF0YSBpbnN0YW5jZQorICovCitzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwYWRhdGFfYWxsb2MoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCisJCQkJICAgICBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdDsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisKKwlwaW5zdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBpbnN0KQorCQlnb3RvIGVycjsKKworCXBkID0gcGFkYXRhX2FsbG9jX3BkKHBpbnN0LCBjcHVtYXNrKTsKKwlpZiAoIXBkKQorCQlnb3RvIGVycl9mcmVlX2luc3Q7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIocGluc3QtPnBkLCBwZCk7CisKKwlwaW5zdC0+d3EgPSB3cTsKKworCWNwdW1hc2tfY29weShwaW5zdC0+Y3B1bWFzaywgY3B1bWFzayk7CisKKwlwaW5zdC0+ZmxhZ3MgPSAwOworCisJcGluc3QtPmNwdV9ub3RpZmllci5ub3RpZmllcl9jYWxsID0gcGFkYXRhX2NwdV9jYWxsYmFjazsKKwlwaW5zdC0+Y3B1X25vdGlmaWVyLnByaW9yaXR5ID0gMDsKKwllcnIgPSByZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJnBpbnN0LT5jcHVfbm90aWZpZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfcGQ7CisKKwltdXRleF9pbml0KCZwaW5zdC0+bG9jayk7CisKKwlyZXR1cm4gcGluc3Q7CisKK2Vycl9mcmVlX3BkOgorCXBhZGF0YV9mcmVlX3BkKHBkKTsKK2Vycl9mcmVlX2luc3Q6CisJa2ZyZWUocGluc3QpOworZXJyOgorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChwYWRhdGFfYWxsb2MpOworCisvKgorICogcGFkYXRhX2ZyZWUgLSBmcmVlIGEgcGFkYXRhIGluc3RhbmNlCisgKgorICogQCBwYWRhdGFfaW5zdDogcGFkYXRhIGluc3RhbmNlIHRvIGZyZWUKKyAqLwordm9pZCBwYWRhdGFfZnJlZShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCkKK3sKKwlwYWRhdGFfc3RvcChwaW5zdCk7CisKKwlzeW5jaHJvbml6ZV9yY3UoKTsKKworCXdoaWxlIChhdG9taWNfcmVhZCgmcGluc3QtPnBkLT5yZWZjbnQpICE9IDApCisJCXlpZWxkKCk7CisKKwl1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmcGluc3QtPmNwdV9ub3RpZmllcik7CisJcGFkYXRhX2ZyZWVfcGQocGluc3QtPnBkKTsKKwlrZnJlZShwaW5zdCk7Cit9CitFWFBPUlRfU1lNQk9MKHBhZGF0YV9mcmVlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IGQyNzc0NmIuLmE2NjFlNzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtOTgsMTEgKzk4LDEyIEBACiAKIHZvaWQgX193ZWFrIGh3X3BlcmZfZXZlbnRfc2V0dXAoaW50IGNwdSkJeyBiYXJyaWVyKCk7IH0KIHZvaWQgX193ZWFrIGh3X3BlcmZfZXZlbnRfc2V0dXBfb25saW5lKGludCBjcHUpCXsgYmFycmllcigpOyB9Cit2b2lkIF9fd2VhayBod19wZXJmX2V2ZW50X3NldHVwX29mZmxpbmUoaW50IGNwdSkJeyBiYXJyaWVyKCk7IH0KIAogaW50IF9fd2VhawogaHdfcGVyZl9ncm91cF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfbGVhZGVyLAogCSAgICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAotCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsIGludCBjcHUpCisJICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0OCw3ICsyNDksNyBAQAogCiBzdGF0aWMgaW5saW5lIHU2NCBwZXJmX2Nsb2NrKHZvaWQpCiB7Ci0JcmV0dXJuIGNwdV9jbG9jayhzbXBfcHJvY2Vzc29yX2lkKCkpOworCXJldHVybiBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CiB9CiAKIC8qCkBAIC0yODksNiArMjkwLDE1IEBACiAJZXZlbnQtPnRvdGFsX3RpbWVfcnVubmluZyA9IHJ1bl9lbmQgLSBldmVudC0+dHN0YW1wX3J1bm5pbmc7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICoKK2N0eF9ncm91cF9saXN0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCWlmIChldmVudC0+YXR0ci5waW5uZWQpCisJCXJldHVybiAmY3R4LT5waW5uZWRfZ3JvdXBzOworCWVsc2UKKwkJcmV0dXJuICZjdHgtPmZsZXhpYmxlX2dyb3VwczsKK30KKwogLyoKICAqIEFkZCBhIGV2ZW50IGZyb20gdGhlIGxpc3RzIGZvciBpdHMgY29udGV4dC4KICAqIE11c3QgYmUgY2FsbGVkIHdpdGggY3R4LT5tdXRleCBhbmQgY3R4LT5sb2NrIGhlbGQuCkBAIC0zMDMsOSArMzEzLDE5IEBACiAJICogYWRkIGl0IHN0cmFpZ2h0IHRvIHRoZSBjb250ZXh0J3MgZXZlbnQgbGlzdCwgb3IgdG8gdGhlIGdyb3VwCiAJICogbGVhZGVyJ3Mgc2libGluZyBsaXN0OgogCSAqLwotCWlmIChncm91cF9sZWFkZXIgPT0gZXZlbnQpCi0JCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5ncm91cF9lbnRyeSwgJmN0eC0+Z3JvdXBfbGlzdCk7Ci0JZWxzZSB7CisJaWYgKGdyb3VwX2xlYWRlciA9PSBldmVudCkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCisJCWlmIChpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCisJCQlldmVudC0+Z3JvdXBfZmxhZ3MgfD0gUEVSRl9HUk9VUF9TT0ZUV0FSRTsKKworCQlsaXN0ID0gY3R4X2dyb3VwX2xpc3QoZXZlbnQsIGN0eCk7CisJCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5ncm91cF9lbnRyeSwgbGlzdCk7CisJfSBlbHNlIHsKKwkJaWYgKGdyb3VwX2xlYWRlci0+Z3JvdXBfZmxhZ3MgJiBQRVJGX0dST1VQX1NPRlRXQVJFICYmCisJCSAgICAhaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpKQorCQkJZ3JvdXBfbGVhZGVyLT5ncm91cF9mbGFncyAmPSB+UEVSRl9HUk9VUF9TT0ZUV0FSRTsKKwogCQlsaXN0X2FkZF90YWlsKCZldmVudC0+Z3JvdXBfZW50cnksICZncm91cF9sZWFkZXItPnNpYmxpbmdfbGlzdCk7CiAJCWdyb3VwX2xlYWRlci0+bnJfc2libGluZ3MrKzsKIAl9CkBAIC0zNTUsOSArMzc1LDE0IEBACiAJICogdG8gdGhlIGNvbnRleHQgbGlzdCBkaXJlY3RseToKIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgdG1wLCAmZXZlbnQtPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAotCQlsaXN0X21vdmVfdGFpbCgmc2libGluZy0+Z3JvdXBfZW50cnksICZjdHgtPmdyb3VwX2xpc3QpOworCQlsaXN0ID0gY3R4X2dyb3VwX2xpc3QoZXZlbnQsIGN0eCk7CisJCWxpc3RfbW92ZV90YWlsKCZzaWJsaW5nLT5ncm91cF9lbnRyeSwgbGlzdCk7CiAJCXNpYmxpbmctPmdyb3VwX2xlYWRlciA9IHNpYmxpbmc7CisKKwkJLyogSW5oZXJpdCBncm91cCBmbGFncyBmcm9tIHRoZSBwcmV2aW91cyBsZWFkZXIgKi8KKwkJc2libGluZy0+Z3JvdXBfZmxhZ3MgPSBldmVudC0+Z3JvdXBfZmxhZ3M7CiAJfQogfQogCkBAIC02MDgsMTQgKzYzMywxMyBAQAogc3RhdGljIGludAogZXZlbnRfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAogCQkgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkJIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKLQkJIGludCBjcHUpCisJCSBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCiB7CiAJaWYgKGV2ZW50LT5zdGF0ZSA8PSBQRVJGX0VWRU5UX1NUQVRFX09GRikKIAkJcmV0dXJuIDA7CiAKIAlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRTsKLQlldmVudC0+b25jcHUgPSBjcHU7CS8qIFRPRE86IHB1dCAnY3B1JyBpbnRvIGNwdWN0eC0+Y3B1ICovCisJZXZlbnQtPm9uY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCS8qCiAJICogVGhlIG5ldyBzdGF0ZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlIHR1cm4gaXQgb24gaW4gdGhlIGhhcmR3YXJlOgogCSAqLwpAQCAtNjQyLDggKzY2Niw3IEBACiBzdGF0aWMgaW50CiBncm91cF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfZXZlbnQsCiAJICAgICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCi0JICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKLQkgICAgICAgaW50IGNwdSkKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQogewogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgKnBhcnRpYWxfZ3JvdXA7CiAJaW50IHJldDsKQEAgLTY1MSwxOCArNjc0LDE4IEBACiAJaWYgKGdyb3VwX2V2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX09GRikKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBod19wZXJmX2dyb3VwX3NjaGVkX2luKGdyb3VwX2V2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KTsKKwlyZXQgPSBod19wZXJmX2dyb3VwX3NjaGVkX2luKGdyb3VwX2V2ZW50LCBjcHVjdHgsIGN0eCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwogCi0JaWYgKGV2ZW50X3NjaGVkX2luKGdyb3VwX2V2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KSkKKwlpZiAoZXZlbnRfc2NoZWRfaW4oZ3JvdXBfZXZlbnQsIGNwdWN0eCwgY3R4KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAkvKgogCSAqIFNjaGVkdWxlIGluIHNpYmxpbmdzIGFzIG9uZSBncm91cCAoaWYgYW55KToKIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmZ3JvdXBfZXZlbnQtPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJaWYgKGV2ZW50X3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KSkgeworCQlpZiAoZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4KSkgewogCQkJcGFydGlhbF9ncm91cCA9IGV2ZW50OwogCQkJZ290byBncm91cF9lcnJvcjsKIAkJfQpAQCAtNjg2LDI0ICs3MDksNiBAQAogfQogCiAvKgotICogUmV0dXJuIDEgZm9yIGEgZ3JvdXAgY29uc2lzdGluZyBlbnRpcmVseSBvZiBzb2Z0d2FyZSBldmVudHMsCi0gKiAwIGlmIHRoZSBncm91cCBjb250YWlucyBhbnkgaGFyZHdhcmUgZXZlbnRzLgotICovCi1zdGF0aWMgaW50IGlzX3NvZnR3YXJlX29ubHlfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmxlYWRlcikKLXsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7Ci0KLQlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGxlYWRlcikpCi0JCXJldHVybiAwOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmxlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkKLQkJaWYgKCFpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCi0JCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotCi0vKgogICogV29yayBvdXQgd2hldGhlciB3ZSBjYW4gcHV0IHRoaXMgZXZlbnQgZ3JvdXAgb24gdGhlIENQVSBub3cuCiAgKi8KIHN0YXRpYyBpbnQgZ3JvdXBfY2FuX2dvX29uKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKQEAgLTcxMyw3ICs3MTgsNyBAQAogCS8qCiAJICogR3JvdXBzIGNvbnNpc3RpbmcgZW50aXJlbHkgb2Ygc29mdHdhcmUgZXZlbnRzIGNhbiBhbHdheXMgZ28gb24uCiAJICovCi0JaWYgKGlzX3NvZnR3YXJlX29ubHlfZ3JvdXAoZXZlbnQpKQorCWlmIChldmVudC0+Z3JvdXBfZmxhZ3MgJiBQRVJGX0dST1VQX1NPRlRXQVJFKQogCQlyZXR1cm4gMTsKIAkvKgogCSAqIElmIGFuIGV4Y2x1c2l2ZSBncm91cCBpcyBhbHJlYWR5IG9uLCBubyBvdGhlciBoYXJkd2FyZQpAQCAtNzU0LDcgKzc1OSw2IEBACiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gaW5mbzsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSBldmVudC0+Y3R4OwogCXN0cnVjdCBwZXJmX2V2ZW50ICpsZWFkZXIgPSBldmVudC0+Z3JvdXBfbGVhZGVyOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGVycjsKIAogCS8qCkBAIC04MDEsNyArODA1LDcgQEAKIAlpZiAoIWdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCAxKSkKIAkJZXJyID0gLUVFWElTVDsKIAllbHNlCi0JCWVyciA9IGV2ZW50X3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KTsKKwkJZXJyID0gZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4KTsKIAogCWlmIChlcnIpIHsKIAkJLyoKQEAgLTk0MywxMSArOTQ3LDkgQEAKIAl9IGVsc2UgewogCQlwZXJmX2Rpc2FibGUoKTsKIAkJaWYgKGV2ZW50ID09IGxlYWRlcikKLQkJCWVyciA9IGdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwKLQkJCQkJICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQkJZXJyID0gZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4KTsKIAkJZWxzZQotCQkJZXJyID0gZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LAotCQkJCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJCWVyciA9IGV2ZW50X3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCk7CiAJCXBlcmZfZW5hYmxlKCk7CiAJfQogCkBAIC0xMDQzLDggKzEwNDUsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX3BlcmZfZXZlbnRfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKLQkJCSAgICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgpCitlbnVtIGV2ZW50X3R5cGVfdCB7CisJRVZFTlRfRkxFWElCTEUgPSAweDEsCisJRVZFTlRfUElOTkVEID0gMHgyLAorCUVWRU5UX0FMTCA9IEVWRU5UX0ZMRVhJQkxFIHwgRVZFTlRfUElOTkVELAorfTsKKworc3RhdGljIHZvaWQgY3R4X3NjaGVkX291dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQkgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCisJCQkgIGVudW0gZXZlbnRfdHlwZV90IGV2ZW50X3R5cGUpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCkBAIC0xMDU1LDEwICsxMDY0LDE4IEBACiAJdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOwogCiAJcGVyZl9kaXNhYmxlKCk7Ci0JaWYgKGN0eC0+bnJfYWN0aXZlKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KQorCWlmICghY3R4LT5ucl9hY3RpdmUpCisJCWdvdG8gb3V0X2VuYWJsZTsKKworCWlmIChldmVudF90eXBlICYgRVZFTlRfUElOTkVEKQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5waW5uZWRfZ3JvdXBzLCBncm91cF9lbnRyeSkKIAkJCWdyb3VwX3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOwotCX0KKworCWlmIChldmVudF90eXBlICYgRVZFTlRfRkxFWElCTEUpCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmZsZXhpYmxlX2dyb3VwcywgZ3JvdXBfZW50cnkpCisJCQlncm91cF9zY2hlZF9vdXQoZXZlbnQsIGNwdWN0eCwgY3R4KTsKKworIG91dF9lbmFibGU6CiAJcGVyZl9lbmFibGUoKTsKICBvdXQ6CiAJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwpAQCAtMTE3MCw5ICsxMTg3LDkgQEAKICAqIG5vdCByZXN0YXJ0IHRoZSBldmVudC4KICAqLwogdm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LCBpbnQgY3B1KQorCQkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCiB7Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZwZXJfY3B1KHBlcmZfY3B1X2NvbnRleHQsIGNwdSk7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IHRhc2stPnBlcmZfZXZlbnRfY3R4cDsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpuZXh0X2N0eDsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpwYXJlbnQ7CkBAIC0xMjIwLDE1ICsxMjM3LDEzIEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoZG9fc3dpdGNoKSB7Ci0JCV9fcGVyZl9ldmVudF9zY2hlZF9vdXQoY3R4LCBjcHVjdHgpOworCQljdHhfc2NoZWRfb3V0KGN0eCwgY3B1Y3R4LCBFVkVOVF9BTEwpOwogCQljcHVjdHgtPnRhc2tfY3R4ID0gTlVMTDsKIAl9CiB9CiAKLS8qCi0gKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCi0gKi8KLXN0YXRpYyB2b2lkIF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCitzdGF0aWMgdm9pZCB0YXNrX2N0eF9zY2hlZF9vdXQoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAorCQkJICAgICAgIGVudW0gZXZlbnRfdHlwZV90IGV2ZW50X3R5cGUpCiB7CiAJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCkBAIC0xMjM4LDI1ICsxMjUzLDgyIEBACiAJaWYgKFdBUk5fT05fT05DRShjdHggIT0gY3B1Y3R4LT50YXNrX2N0eCkpCiAJCXJldHVybjsKIAotCV9fcGVyZl9ldmVudF9zY2hlZF9vdXQoY3R4LCBjcHVjdHgpOworCWN0eF9zY2hlZF9vdXQoY3R4LCBjcHVjdHgsIGV2ZW50X3R5cGUpOwogCWNwdWN0eC0+dGFza19jdHggPSBOVUxMOwogfQogCiAvKgogICogQ2FsbGVkIHdpdGggSVJRcyBkaXNhYmxlZAogICovCi1zdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2NwdV9zY2hlZF9vdXQoc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCkKK3N0YXRpYyB2b2lkIF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCiB7Ci0JX19wZXJmX2V2ZW50X3NjaGVkX291dCgmY3B1Y3R4LT5jdHgsIGNwdWN0eCk7CisJdGFza19jdHhfc2NoZWRfb3V0KGN0eCwgRVZFTlRfQUxMKTsKK30KKworLyoKKyAqIENhbGxlZCB3aXRoIElSUXMgZGlzYWJsZWQKKyAqLworc3RhdGljIHZvaWQgY3B1X2N0eF9zY2hlZF9vdXQoc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKKwkJCSAgICAgIGVudW0gZXZlbnRfdHlwZV90IGV2ZW50X3R5cGUpCit7CisJY3R4X3NjaGVkX291dCgmY3B1Y3R4LT5jdHgsIGNwdWN0eCwgZXZlbnRfdHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1fX3BlcmZfZXZlbnRfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAotCQkJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwgaW50IGNwdSkKK2N0eF9waW5uZWRfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAorCQkgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5waW5uZWRfZ3JvdXBzLCBncm91cF9lbnRyeSkgeworCQlpZiAoZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQorCQkJY29udGludWU7CisJCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJY29udGludWU7CisKKwkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCAxKSkKKwkJCWdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCk7CisKKwkJLyoKKwkJICogSWYgdGhpcyBwaW5uZWQgZ3JvdXAgaGFzbid0IGJlZW4gc2NoZWR1bGVkLAorCQkgKiBwdXQgaXQgaW4gZXJyb3Igc3RhdGUuCisJCSAqLworCQlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpIHsKKwkJCXVwZGF0ZV9ncm91cF90aW1lcyhldmVudCk7CisJCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0VSUk9SOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorY3R4X2ZsZXhpYmxlX3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKKwkJICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCkKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CiAJaW50IGNhbl9hZGRfaHcgPSAxOwogCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+ZmxleGlibGVfZ3JvdXBzLCBncm91cF9lbnRyeSkgeworCQkvKiBJZ25vcmUgZXZlbnRzIGluIE9GRiBvciBFUlJPUiBzdGF0ZSAqLworCQlpZiAoZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIExpc3RlbiB0byB0aGUgJ2NwdScgc2NoZWR1bGluZyBmaWx0ZXIgY29uc3RyYWludAorCQkgKiBvZiBldmVudHM6CisJCSAqLworCQlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChncm91cF9jYW5fZ29fb24oZXZlbnQsIGNwdWN0eCwgY2FuX2FkZF9odykpCisJCQlpZiAoZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4KSkKKwkJCQljYW5fYWRkX2h3ID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitjdHhfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAorCSAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKKwkgICAgIGVudW0gZXZlbnRfdHlwZV90IGV2ZW50X3R5cGUpCit7CiAJcmF3X3NwaW5fbG9jaygmY3R4LT5sb2NrKTsKIAljdHgtPmlzX2FjdGl2ZSA9IDE7CiAJaWYgKGxpa2VseSghY3R4LT5ucl9ldmVudHMpKQpAQCAtMTI3MCw1MSArMTM0MiwzOSBAQAogCSAqIEZpcnN0IGdvIHRocm91Z2ggdGhlIGxpc3QgYW5kIHB1dCBvbiBhbnkgcGlubmVkIGdyb3VwcwogCSAqIGluIG9yZGVyIHRvIGdpdmUgdGhlbSB0aGUgYmVzdCBjaGFuY2Ugb2YgZ29pbmcgb24uCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJaWYgKGV2ZW50LT5zdGF0ZSA8PSBQRVJGX0VWRU5UX1NUQVRFX09GRiB8fAotCQkgICAgIWV2ZW50LT5hdHRyLnBpbm5lZCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IGNwdSkKLQkJCWNvbnRpbnVlOworCWlmIChldmVudF90eXBlICYgRVZFTlRfUElOTkVEKQorCQljdHhfcGlubmVkX3NjaGVkX2luKGN0eCwgY3B1Y3R4KTsKIAotCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIDEpKQotCQkJZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpOworCS8qIFRoZW4gd2FsayB0aHJvdWdoIHRoZSBsb3dlciBwcmlvIGZsZXhpYmxlIGdyb3VwcyAqLworCWlmIChldmVudF90eXBlICYgRVZFTlRfRkxFWElCTEUpCisJCWN0eF9mbGV4aWJsZV9zY2hlZF9pbihjdHgsIGNwdWN0eCk7CiAKLQkJLyoKLQkJICogSWYgdGhpcyBwaW5uZWQgZ3JvdXAgaGFzbid0IGJlZW4gc2NoZWR1bGVkLAotCQkgKiBwdXQgaXQgaW4gZXJyb3Igc3RhdGUuCi0JCSAqLwotCQlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpIHsKLQkJCXVwZGF0ZV9ncm91cF90aW1lcyhldmVudCk7Ci0JCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0VSUk9SOwotCQl9Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJLyoKLQkJICogSWdub3JlIGV2ZW50cyBpbiBPRkYgb3IgRVJST1Igc3RhdGUsIGFuZAotCQkgKiBpZ25vcmUgcGlubmVkIGV2ZW50cyBzaW5jZSB3ZSBkaWQgdGhlbSBhbHJlYWR5LgotCQkgKi8KLQkJaWYgKGV2ZW50LT5zdGF0ZSA8PSBQRVJGX0VWRU5UX1NUQVRFX09GRiB8fAotCQkgICAgZXZlbnQtPmF0dHIucGlubmVkKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogTGlzdGVuIHRvIHRoZSAnY3B1JyBzY2hlZHVsaW5nIGZpbHRlciBjb25zdHJhaW50Ci0JCSAqIG9mIGV2ZW50czoKLQkJICovCi0JCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gY3B1KQotCQkJY29udGludWU7Ci0KLQkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCBjYW5fYWRkX2h3KSkKLQkJCWlmIChncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSkpCi0JCQkJY2FuX2FkZF9odyA9IDA7Ci0JfQogCXBlcmZfZW5hYmxlKCk7CiAgb3V0OgogCXJhd19zcGluX3VubG9jaygmY3R4LT5sb2NrKTsKIH0KIAorc3RhdGljIHZvaWQgY3B1X2N0eF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCQkJICAgICBlbnVtIGV2ZW50X3R5cGVfdCBldmVudF90eXBlKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9ICZjcHVjdHgtPmN0eDsKKworCWN0eF9zY2hlZF9pbihjdHgsIGNwdWN0eCwgZXZlbnRfdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRhc2tfY3R4X3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCSAgICAgIGVudW0gZXZlbnRfdHlwZV90IGV2ZW50X3R5cGUpCit7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IHRhc2stPnBlcmZfZXZlbnRfY3R4cDsKKworCWlmIChsaWtlbHkoIWN0eCkpCisJCXJldHVybjsKKwlpZiAoY3B1Y3R4LT50YXNrX2N0eCA9PSBjdHgpCisJCXJldHVybjsKKwljdHhfc2NoZWRfaW4oY3R4LCBjcHVjdHgsIGV2ZW50X3R5cGUpOworCWNwdWN0eC0+dGFza19jdHggPSBjdHg7Cit9CiAvKgogICogQ2FsbGVkIGZyb20gc2NoZWR1bGVyIHRvIGFkZCB0aGUgZXZlbnRzIG9mIHRoZSBjdXJyZW50IHRhc2sKICAqIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KQEAgLTEzMjYsMzggKzEzODYsMTI4IEBACiAgKiBhY2Nlc3NpbmcgdGhlIGV2ZW50IGNvbnRyb2wgcmVnaXN0ZXIuIElmIGEgTk1JIGhpdHMsIHRoZW4gaXQgd2lsbAogICoga2VlcCB0aGUgZXZlbnQgcnVubmluZy4KICAqLwotdm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KQordm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmcGVyX2NwdShwZXJmX2NwdV9jb250ZXh0LCBjcHUpOworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSB0YXNrLT5wZXJmX2V2ZW50X2N0eHA7CiAKIAlpZiAobGlrZWx5KCFjdHgpKQogCQlyZXR1cm47CisKIAlpZiAoY3B1Y3R4LT50YXNrX2N0eCA9PSBjdHgpCiAJCXJldHVybjsKLQlfX3BlcmZfZXZlbnRfc2NoZWRfaW4oY3R4LCBjcHVjdHgsIGNwdSk7CisKKwkvKgorCSAqIFdlIHdhbnQgdG8ga2VlcCB0aGUgZm9sbG93aW5nIHByaW9yaXR5IG9yZGVyOgorCSAqIGNwdSBwaW5uZWQgKHRoYXQgZG9uJ3QgbmVlZCB0byBtb3ZlKSwgdGFzayBwaW5uZWQsCisJICogY3B1IGZsZXhpYmxlLCB0YXNrIGZsZXhpYmxlLgorCSAqLworCWNwdV9jdHhfc2NoZWRfb3V0KGNwdWN0eCwgRVZFTlRfRkxFWElCTEUpOworCisJY3R4X3NjaGVkX2luKGN0eCwgY3B1Y3R4LCBFVkVOVF9QSU5ORUQpOworCWNwdV9jdHhfc2NoZWRfaW4oY3B1Y3R4LCBFVkVOVF9GTEVYSUJMRSk7CisJY3R4X3NjaGVkX2luKGN0eCwgY3B1Y3R4LCBFVkVOVF9GTEVYSUJMRSk7CisKIAljcHVjdHgtPnRhc2tfY3R4ID0gY3R4OwogfQogCi1zdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2NwdV9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LCBpbnQgY3B1KQotewotCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9ICZjcHVjdHgtPmN0eDsKLQotCV9fcGVyZl9ldmVudF9zY2hlZF9pbihjdHgsIGNwdWN0eCwgY3B1KTsKLX0KLQogI2RlZmluZSBNQVhfSU5URVJSVVBUUyAofjBVTEwpCiAKIHN0YXRpYyB2b2lkIHBlcmZfbG9nX3Rocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGVuYWJsZSk7CiAKLXN0YXRpYyB2b2lkIHBlcmZfYWRqdXN0X3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBldmVudHMpCitzdGF0aWMgdTY0IHBlcmZfY2FsY3VsYXRlX3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBuc2VjLCB1NjQgY291bnQpCit7CisJdTY0IGZyZXF1ZW5jeSA9IGV2ZW50LT5hdHRyLnNhbXBsZV9mcmVxOworCXU2NCBzZWMgPSBOU0VDX1BFUl9TRUM7CisJdTY0IGRpdmlzb3IsIGRpdmlkZW5kOworCisJaW50IGNvdW50X2ZscywgbnNlY19mbHMsIGZyZXF1ZW5jeV9mbHMsIHNlY19mbHM7CisKKwljb3VudF9mbHMgPSBmbHM2NChjb3VudCk7CisJbnNlY19mbHMgPSBmbHM2NChuc2VjKTsKKwlmcmVxdWVuY3lfZmxzID0gZmxzNjQoZnJlcXVlbmN5KTsKKwlzZWNfZmxzID0gMzA7CisKKwkvKgorCSAqIFdlIGdvdCBAY291bnQgaW4gQG5zZWMsIHdpdGggYSB0YXJnZXQgb2Ygc2FtcGxlX2ZyZXEgSFoKKwkgKiB0aGUgdGFyZ2V0IHBlcmlvZCBiZWNvbWVzOgorCSAqCisJICogICAgICAgICAgICAgQGNvdW50ICogMTBeOQorCSAqIHBlcmlvZCA9IC0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgICAgICAgICBAbnNlYyAqIHNhbXBsZV9mcmVxCisJICoKKwkgKi8KKworCS8qCisJICogUmVkdWNlIGFjY3VyYWN5IGJ5IG9uZSBiaXQgc3VjaCB0aGF0IEBhIGFuZCBAYiBjb252ZXJnZQorCSAqIHRvIGEgc2ltaWxhciBtYWduaXR1ZGUuCisJICovCisjZGVmaW5lIFJFRFVDRV9GTFMoYSwgYikgCQlcCitkbyB7CQkJCQlcCisJaWYgKGEjI19mbHMgPiBiIyNfZmxzKSB7CVwKKwkJYSA+Pj0gMTsJCVwKKwkJYSMjX2Zscy0tOwkJXAorCX0gZWxzZSB7CQkJXAorCQliID4+PSAxOwkJXAorCQliIyNfZmxzLS07CQlcCisJfQkJCQlcCit9IHdoaWxlICgwKQorCisJLyoKKwkgKiBSZWR1Y2UgYWNjdXJhY3kgdW50aWwgZWl0aGVyIHRlcm0gZml0cyBpbiBhIHU2NCwgdGhlbiBwcm9jZWVkIHdpdGgKKwkgKiB0aGUgb3RoZXIsIHNvIHRoYXQgZmluYWxseSB3ZSBjYW4gZG8gYSB1NjQvdTY0IGRpdmlzaW9uLgorCSAqLworCXdoaWxlIChjb3VudF9mbHMgKyBzZWNfZmxzID4gNjQgJiYgbnNlY19mbHMgKyBmcmVxdWVuY3lfZmxzID4gNjQpIHsKKwkJUkVEVUNFX0ZMUyhuc2VjLCBmcmVxdWVuY3kpOworCQlSRURVQ0VfRkxTKHNlYywgY291bnQpOworCX0KKworCWlmIChjb3VudF9mbHMgKyBzZWNfZmxzID4gNjQpIHsKKwkJZGl2aXNvciA9IG5zZWMgKiBmcmVxdWVuY3k7CisKKwkJd2hpbGUgKGNvdW50X2ZscyArIHNlY19mbHMgPiA2NCkgeworCQkJUkVEVUNFX0ZMUyhjb3VudCwgc2VjKTsKKwkJCWRpdmlzb3IgPj49IDE7CisJCX0KKworCQlkaXZpZGVuZCA9IGNvdW50ICogc2VjOworCX0gZWxzZSB7CisJCWRpdmlkZW5kID0gY291bnQgKiBzZWM7CisKKwkJd2hpbGUgKG5zZWNfZmxzICsgZnJlcXVlbmN5X2ZscyA+IDY0KSB7CisJCQlSRURVQ0VfRkxTKG5zZWMsIGZyZXF1ZW5jeSk7CisJCQlkaXZpZGVuZCA+Pj0gMTsKKwkJfQorCisJCWRpdmlzb3IgPSBuc2VjICogZnJlcXVlbmN5OworCX0KKworCXJldHVybiBkaXY2NF91NjQoZGl2aWRlbmQsIGRpdmlzb3IpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWlmICghZXZlbnQtPnBtdS0+c3RvcCkKKwkJcmV0dXJuIGV2ZW50LT5wbXUtPmRpc2FibGUoZXZlbnQpOworCisJcmV0dXJuIGV2ZW50LT5wbXUtPnN0b3AoZXZlbnQpOworfQorCitzdGF0aWMgaW50IHBlcmZfZXZlbnRfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWlmICghZXZlbnQtPnBtdS0+c3RhcnQpCisJCXJldHVybiBldmVudC0+cG11LT5lbmFibGUoZXZlbnQpOworCisJcmV0dXJuIGV2ZW50LT5wbXUtPnN0YXJ0KGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9hZGp1c3RfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG5zZWMsIHU2NCBjb3VudCkKIHsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAl1NjQgcGVyaW9kLCBzYW1wbGVfcGVyaW9kOwogCXM2NCBkZWx0YTsKIAotCWV2ZW50cyAqPSBod2MtPnNhbXBsZV9wZXJpb2Q7Ci0JcGVyaW9kID0gZGl2NjRfdTY0KGV2ZW50cywgZXZlbnQtPmF0dHIuc2FtcGxlX2ZyZXEpOworCXBlcmlvZCA9IHBlcmZfY2FsY3VsYXRlX3BlcmlvZChldmVudCwgbnNlYywgY291bnQpOwogCiAJZGVsdGEgPSAoczY0KShwZXJpb2QgLSBod2MtPnNhbXBsZV9wZXJpb2QpOwogCWRlbHRhID0gKGRlbHRhICsgNykgLyA4OyAvKiBsb3cgcGFzcyBmaWx0ZXIgKi8KQEAgLTEzNjgsMTMgKzE1MTgsMjIgQEAKIAkJc2FtcGxlX3BlcmlvZCA9IDE7CiAKIAlod2MtPnNhbXBsZV9wZXJpb2QgPSBzYW1wbGVfcGVyaW9kOworCisJaWYgKGF0b21pYzY0X3JlYWQoJmh3Yy0+cGVyaW9kX2xlZnQpID4gOCpzYW1wbGVfcGVyaW9kKSB7CisJCXBlcmZfZGlzYWJsZSgpOworCQlwZXJmX2V2ZW50X3N0b3AoZXZlbnQpOworCQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIDApOworCQlwZXJmX2V2ZW50X3N0YXJ0KGV2ZW50KTsKKwkJcGVyZl9lbmFibGUoKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfY3R4X2FkanVzdF9mcmVxKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKLQl1NjQgaW50ZXJydXB0cywgZnJlcTsKKwl1NjQgaW50ZXJydXB0cywgbm93OworCXM2NCBkZWx0YTsKIAogCXJhd19zcGluX2xvY2soJmN0eC0+bG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZXZlbnQsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7CkBAIC0xMzk1LDQ0ICsxNTU0LDE4IEBACiAJCWlmIChpbnRlcnJ1cHRzID09IE1BWF9JTlRFUlJVUFRTKSB7CiAJCQlwZXJmX2xvZ190aHJvdHRsZShldmVudCwgMSk7CiAJCQlldmVudC0+cG11LT51bnRocm90dGxlKGV2ZW50KTsKLQkJCWludGVycnVwdHMgPSAyKnN5c2N0bF9wZXJmX2V2ZW50X3NhbXBsZV9yYXRlL0haOwogCQl9CiAKIAkJaWYgKCFldmVudC0+YXR0ci5mcmVxIHx8ICFldmVudC0+YXR0ci5zYW1wbGVfZnJlcSkKIAkJCWNvbnRpbnVlOwogCi0JCS8qCi0JCSAqIGlmIHRoZSBzcGVjaWZpZWQgZnJlcSA8IEhaIHRoZW4gd2UgbmVlZCB0byBza2lwIHRpY2tzCi0JCSAqLwotCQlpZiAoZXZlbnQtPmF0dHIuc2FtcGxlX2ZyZXEgPCBIWikgewotCQkJZnJlcSA9IGV2ZW50LT5hdHRyLnNhbXBsZV9mcmVxOworCQlldmVudC0+cG11LT5yZWFkKGV2ZW50KTsKKwkJbm93ID0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNvdW50KTsKKwkJZGVsdGEgPSBub3cgLSBod2MtPmZyZXFfY291bnRfc3RhbXA7CisJCWh3Yy0+ZnJlcV9jb3VudF9zdGFtcCA9IG5vdzsKIAotCQkJaHdjLT5mcmVxX2NvdW50ICs9IGZyZXE7Ci0JCQlod2MtPmZyZXFfaW50ZXJydXB0cyArPSBpbnRlcnJ1cHRzOwotCi0JCQlpZiAoaHdjLT5mcmVxX2NvdW50IDwgSFopCi0JCQkJY29udGludWU7Ci0KLQkJCWludGVycnVwdHMgPSBod2MtPmZyZXFfaW50ZXJydXB0czsKLQkJCWh3Yy0+ZnJlcV9pbnRlcnJ1cHRzID0gMDsKLQkJCWh3Yy0+ZnJlcV9jb3VudCAtPSBIWjsKLQkJfSBlbHNlCi0JCQlmcmVxID0gSFo7Ci0KLQkJcGVyZl9hZGp1c3RfcGVyaW9kKGV2ZW50LCBmcmVxICogaW50ZXJydXB0cyk7Ci0KLQkJLyoKLQkJICogSW4gb3JkZXIgdG8gYXZvaWQgYmVpbmcgc3RhbGxlZCBieSBhbiAoYWNjaWRlbnRhbCkgaHVnZQotCQkgKiBzYW1wbGUgcGVyaW9kLCBmb3JjZSByZXNldCB0aGUgc2FtcGxlIHBlcmlvZCBpZiB3ZSBkaWRuJ3QKLQkJICogZ2V0IGFueSBldmVudHMgaW4gdGhpcyBmcmVxIHBlcmlvZC4KLQkJICovCi0JCWlmICghaW50ZXJydXB0cykgewotCQkJcGVyZl9kaXNhYmxlKCk7Ci0JCQlldmVudC0+cG11LT5kaXNhYmxlKGV2ZW50KTsKLQkJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgMCk7Ci0JCQlldmVudC0+cG11LT5lbmFibGUoZXZlbnQpOwotCQkJcGVyZl9lbmFibGUoKTsKLQkJfQorCQlpZiAoZGVsdGEgPiAwKQorCQkJcGVyZl9hZGp1c3RfcGVyaW9kKGV2ZW50LCBUSUNLX05TRUMsIGRlbHRhKTsKIAl9CiAJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwogfQpAQCAtMTQ0MiwyNiArMTU3NSwxOCBAQAogICovCiBzdGF0aWMgdm9pZCByb3RhdGVfY3R4KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7Ci0KIAlpZiAoIWN0eC0+bnJfZXZlbnRzKQogCQlyZXR1cm47CiAKIAlyYXdfc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwotCS8qCi0JICogUm90YXRlIHRoZSBmaXJzdCBlbnRyeSBsYXN0ICh3b3JrcyBqdXN0IGZpbmUgZm9yIGdyb3VwIGV2ZW50cyB0b28pOgotCSAqLwotCXBlcmZfZGlzYWJsZSgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7Ci0JCWxpc3RfbW92ZV90YWlsKCZldmVudC0+Z3JvdXBfZW50cnksICZjdHgtPmdyb3VwX2xpc3QpOwotCQlicmVhazsKLQl9Ci0JcGVyZl9lbmFibGUoKTsKKworCS8qIFJvdGF0ZSB0aGUgZmlyc3QgZW50cnkgbGFzdCBvZiBub24tcGlubmVkIGdyb3VwcyAqLworCWxpc3Rfcm90YXRlX2xlZnQoJmN0eC0+ZmxleGlibGVfZ3JvdXBzKTsKIAogCXJhd19zcGluX3VubG9jaygmY3R4LT5sb2NrKTsKIH0KIAotdm9pZCBwZXJmX2V2ZW50X3Rhc2tfdGljayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIGludCBjcHUpCit2b2lkIHBlcmZfZXZlbnRfdGFza190aWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKIHsKIAlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4OwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eDsKQEAgLTE0NjksMjQgKzE1OTQsNDMgQEAKIAlpZiAoIWF0b21pY19yZWFkKCZucl9ldmVudHMpKQogCQlyZXR1cm47CiAKLQljcHVjdHggPSAmcGVyX2NwdShwZXJmX2NwdV9jb250ZXh0LCBjcHUpOworCWNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCWN0eCA9IGN1cnItPnBlcmZfZXZlbnRfY3R4cDsKIAorCXBlcmZfZGlzYWJsZSgpOworCiAJcGVyZl9jdHhfYWRqdXN0X2ZyZXEoJmNwdWN0eC0+Y3R4KTsKIAlpZiAoY3R4KQogCQlwZXJmX2N0eF9hZGp1c3RfZnJlcShjdHgpOwogCi0JcGVyZl9ldmVudF9jcHVfc2NoZWRfb3V0KGNwdWN0eCk7CisJY3B1X2N0eF9zY2hlZF9vdXQoY3B1Y3R4LCBFVkVOVF9GTEVYSUJMRSk7CiAJaWYgKGN0eCkKLQkJX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KGN0eCk7CisJCXRhc2tfY3R4X3NjaGVkX291dChjdHgsIEVWRU5UX0ZMRVhJQkxFKTsKIAogCXJvdGF0ZV9jdHgoJmNwdWN0eC0+Y3R4KTsKIAlpZiAoY3R4KQogCQlyb3RhdGVfY3R4KGN0eCk7CiAKLQlwZXJmX2V2ZW50X2NwdV9zY2hlZF9pbihjcHVjdHgsIGNwdSk7CisJY3B1X2N0eF9zY2hlZF9pbihjcHVjdHgsIEVWRU5UX0ZMRVhJQkxFKTsKIAlpZiAoY3R4KQotCQlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oY3VyciwgY3B1KTsKKwkJdGFza19jdHhfc2NoZWRfaW4oY3VyciwgRVZFTlRfRkxFWElCTEUpOworCisJcGVyZl9lbmFibGUoKTsKK30KKworc3RhdGljIGludCBldmVudF9lbmFibGVfb25fZXhlYyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCWlmICghZXZlbnQtPmF0dHIuZW5hYmxlX29uX2V4ZWMpCisJCXJldHVybiAwOworCisJZXZlbnQtPmF0dHIuZW5hYmxlX29uX2V4ZWMgPSAwOworCWlmIChldmVudC0+c3RhdGUgPj0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKKwkJcmV0dXJuIDA7CisKKwlfX3BlcmZfZXZlbnRfbWFya19lbmFibGVkKGV2ZW50LCBjdHgpOworCisJcmV0dXJuIDE7CiB9CiAKIC8qCkBAIC0xNDk5LDYgKzE2NDMsNyBAQAogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlbmFibGVkID0gMDsKKwlpbnQgcmV0OwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWN0eCA9IHRhc2stPnBlcmZfZXZlbnRfY3R4cDsKQEAgLTE1MDksMTQgKzE2NTQsMTYgQEAKIAogCXJhd19zcGluX2xvY2soJmN0eC0+bG9jayk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgewotCQlpZiAoIWV2ZW50LT5hdHRyLmVuYWJsZV9vbl9leGVjKQotCQkJY29udGludWU7Ci0JCWV2ZW50LT5hdHRyLmVuYWJsZV9vbl9leGVjID0gMDsKLQkJaWYgKGV2ZW50LT5zdGF0ZSA+PSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFKQotCQkJY29udGludWU7Ci0JCV9fcGVyZl9ldmVudF9tYXJrX2VuYWJsZWQoZXZlbnQsIGN0eCk7Ci0JCWVuYWJsZWQgPSAxOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPnBpbm5lZF9ncm91cHMsIGdyb3VwX2VudHJ5KSB7CisJCXJldCA9IGV2ZW50X2VuYWJsZV9vbl9leGVjKGV2ZW50LCBjdHgpOworCQlpZiAocmV0KQorCQkJZW5hYmxlZCA9IDE7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+ZmxleGlibGVfZ3JvdXBzLCBncm91cF9lbnRyeSkgeworCQlyZXQgPSBldmVudF9lbmFibGVfb25fZXhlYyhldmVudCwgY3R4KTsKKwkJaWYgKHJldCkKKwkJCWVuYWJsZWQgPSAxOwogCX0KIAogCS8qCkBAIC0xNTI3LDcgKzE2NzQsNyBAQAogCiAJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwogCi0JcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHRhc2ssIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHRhc2spOwogIG91dDoKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC0xNTkwLDcgKzE3MzcsOCBAQAogewogCXJhd19zcGluX2xvY2tfaW5pdCgmY3R4LT5sb2NrKTsKIAltdXRleF9pbml0KCZjdHgtPm11dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmY3R4LT5ncm91cF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmY3R4LT5waW5uZWRfZ3JvdXBzKTsKKwlJTklUX0xJU1RfSEVBRCgmY3R4LT5mbGV4aWJsZV9ncm91cHMpOwogCUlOSVRfTElTVF9IRUFEKCZjdHgtPmV2ZW50X2xpc3QpOwogCWF0b21pY19zZXQoJmN0eC0+cmVmY291bnQsIDEpOwogCWN0eC0+dGFzayA9IHRhc2s7CkBAIC0zMjU5LDggKzM0MDcsNiBAQAogCXRhc2tfZXZlbnQtPmV2ZW50X2lkLnRpZCA9IHBlcmZfZXZlbnRfdGlkKGV2ZW50LCB0YXNrKTsKIAl0YXNrX2V2ZW50LT5ldmVudF9pZC5wdGlkID0gcGVyZl9ldmVudF90aWQoZXZlbnQsIGN1cnJlbnQpOwogCi0JdGFza19ldmVudC0+ZXZlbnRfaWQudGltZSA9IHBlcmZfY2xvY2soKTsKLQogCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCB0YXNrX2V2ZW50LT5ldmVudF9pZCk7CiAKIAlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7CkBAIC0zMjY4LDcgKzM0MTQsNyBAQAogCiBzdGF0aWMgaW50IHBlcmZfZXZlbnRfdGFza19tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0JaWYgKGV2ZW50LT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkKKwlpZiAoZXZlbnQtPnN0YXRlIDwgUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKQEAgLTMzMDAsNyArMzQ0Niw3IEBACiAJY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXBlcmZfZXZlbnRfdGFza19jdHgoJmNwdWN0eC0+Y3R4LCB0YXNrX2V2ZW50KTsKIAlpZiAoIWN0eCkKLQkJY3R4ID0gcmN1X2RlcmVmZXJlbmNlKHRhc2tfZXZlbnQtPnRhc2stPnBlcmZfZXZlbnRfY3R4cCk7CisJCWN0eCA9IHJjdV9kZXJlZmVyZW5jZShjdXJyZW50LT5wZXJmX2V2ZW50X2N0eHApOwogCWlmIChjdHgpCiAJCXBlcmZfZXZlbnRfdGFza19jdHgoY3R4LCB0YXNrX2V2ZW50KTsKIAlwdXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKQEAgLTMzMzEsNiArMzQ3Nyw3IEBACiAJCQkvKiAucHBpZCAqLwogCQkJLyogLnRpZCAgKi8KIAkJCS8qIC5wdGlkICovCisJCQkudGltZSA9IHBlcmZfY2xvY2soKSwKIAkJfSwKIAl9OwogCkBAIC0zMzgwLDcgKzM1MjcsNyBAQAogCiBzdGF0aWMgaW50IHBlcmZfZXZlbnRfY29tbV9tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0JaWYgKGV2ZW50LT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkKKwlpZiAoZXZlbnQtPnN0YXRlIDwgUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKQEAgLTM1MDAsNyArMzY0Nyw3IEBACiBzdGF0aWMgaW50IHBlcmZfZXZlbnRfbW1hcF9tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCiAJCQkJICAgc3RydWN0IHBlcmZfbW1hcF9ldmVudCAqbW1hcF9ldmVudCkKIHsKLQlpZiAoZXZlbnQtPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQorCWlmIChldmVudC0+c3RhdGUgPCBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFKQogCQlyZXR1cm4gMDsKIAogCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQpAQCAtMzYwOSw3ICszNzU2LDcgQEAKIAkJCS8qIC50aWQgKi8KIAkJCS5zdGFydCAgPSB2bWEtPnZtX3N0YXJ0LAogCQkJLmxlbiAgICA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKLQkJCS5wZ29mZiAgPSB2bWEtPnZtX3Bnb2ZmLAorCQkJLnBnb2ZmICA9ICh1NjQpdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZULAogCQl9LAogCX07CiAKQEAgLTM2ODksMTIgKzM4MzYsMTIgQEAKIAogCWlmIChldmVudC0+YXR0ci5mcmVxKSB7CiAJCXU2NCBub3cgPSBwZXJmX2Nsb2NrKCk7Ci0JCXM2NCBkZWx0YSA9IG5vdyAtIGh3Yy0+ZnJlcV9zdGFtcDsKKwkJczY0IGRlbHRhID0gbm93IC0gaHdjLT5mcmVxX3RpbWVfc3RhbXA7CiAKLQkJaHdjLT5mcmVxX3N0YW1wID0gbm93OworCQlod2MtPmZyZXFfdGltZV9zdGFtcCA9IG5vdzsKIAotCQlpZiAoZGVsdGEgPiAwICYmIGRlbHRhIDwgVElDS19OU0VDKQotCQkJcGVyZl9hZGp1c3RfcGVyaW9kKGV2ZW50LCBOU0VDX1BFUl9TRUMgLyAoaW50KWRlbHRhKTsKKwkJaWYgKGRlbHRhID4gMCAmJiBkZWx0YSA8IDIqVElDS19OU0VDKQorCQkJcGVyZl9hZGp1c3RfcGVyaW9kKGV2ZW50LCBkZWx0YSwgaHdjLT5sYXN0X3BlcmlvZCk7CiAJfQogCiAJLyoKQEAgLTQxODUsNyArNDMzMiw3IEBACiAJLnJlYWQJCT0gdGFza19jbG9ja19wZXJmX2V2ZW50X3JlYWQsCiB9OwogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfRVZFTlRfVFJBQ0lORwogCiB2b2lkIHBlcmZfdHBfZXZlbnQoaW50IGV2ZW50X2lkLCB1NjQgYWRkciwgdTY0IGNvdW50LCB2b2lkICpyZWNvcmQsCiAJCQkgIGludCBlbnRyeV9zaXplKQpAQCAtNDI5MCw3ICs0NDM3LDcgQEAKIHsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19FVkVOVF9QUk9GSUxFICovCisjZW5kaWYgLyogQ09ORklHX0VWRU5UX1RSQUNJTkcgKi8KIAogI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKIHN0YXRpYyB2b2lkIGJwX3BlcmZfZXZlbnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCkBAIC00NTgwLDcgKzQ3MjcsNyBAQAogCWlmIChhdHRyLT50eXBlID49IFBFUkZfVFlQRV9NQVgpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGF0dHItPl9fcmVzZXJ2ZWRfMSB8fCBhdHRyLT5fX3Jlc2VydmVkXzIpCisJaWYgKGF0dHItPl9fcmVzZXJ2ZWRfMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYXR0ci0+c2FtcGxlX3R5cGUgJiB+KFBFUkZfU0FNUExFX01BWC0xKSkKQEAgLTQ4NzEsOCArNTAxOCwxNSBAQAogCWVsc2UKIAkJY2hpbGRfZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9PRkY7CiAKLQlpZiAocGFyZW50X2V2ZW50LT5hdHRyLmZyZXEpCi0JCWNoaWxkX2V2ZW50LT5ody5zYW1wbGVfcGVyaW9kID0gcGFyZW50X2V2ZW50LT5ody5zYW1wbGVfcGVyaW9kOworCWlmIChwYXJlbnRfZXZlbnQtPmF0dHIuZnJlcSkgeworCQl1NjQgc2FtcGxlX3BlcmlvZCA9IHBhcmVudF9ldmVudC0+aHcuc2FtcGxlX3BlcmlvZDsKKwkJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZjaGlsZF9ldmVudC0+aHc7CisKKwkJaHdjLT5zYW1wbGVfcGVyaW9kID0gc2FtcGxlX3BlcmlvZDsKKwkJaHdjLT5sYXN0X3BlcmlvZCAgID0gc2FtcGxlX3BlcmlvZDsKKworCQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIHNhbXBsZV9wZXJpb2QpOworCX0KIAogCWNoaWxkX2V2ZW50LT5vdmVyZmxvd19oYW5kbGVyID0gcGFyZW50X2V2ZW50LT5vdmVyZmxvd19oYW5kbGVyOwogCkBAIC01MDQwLDcgKzUxOTQsMTEgQEAKIAltdXRleF9sb2NrX25lc3RlZCgmY2hpbGRfY3R4LT5tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCiBhZ2FpbjoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGRfZXZlbnQsIHRtcCwgJmNoaWxkX2N0eC0+Z3JvdXBfbGlzdCwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGRfZXZlbnQsIHRtcCwgJmNoaWxkX2N0eC0+cGlubmVkX2dyb3VwcywKKwkJCQkgZ3JvdXBfZW50cnkpCisJCV9fcGVyZl9ldmVudF9leGl0X3Rhc2soY2hpbGRfZXZlbnQsIGNoaWxkX2N0eCwgY2hpbGQpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoaWxkX2V2ZW50LCB0bXAsICZjaGlsZF9jdHgtPmZsZXhpYmxlX2dyb3VwcywKIAkJCQkgZ3JvdXBfZW50cnkpCiAJCV9fcGVyZl9ldmVudF9leGl0X3Rhc2soY2hpbGRfZXZlbnQsIGNoaWxkX2N0eCwgY2hpbGQpOwogCkBAIC01MDQ5LDcgKzUyMDcsOCBAQAogCSAqIGl0cyBzaWJsaW5ncyB0byB0aGUgbGlzdCwgYnV0IHdlIG9idGFpbmVkICd0bXAnIGJlZm9yZSB0aGF0IHdoaWNoCiAJICogd2lsbCBzdGlsbCBwb2ludCB0byB0aGUgbGlzdCBoZWFkIHRlcm1pbmF0aW5nIHRoZSBpdGVyYXRpb24uCiAJICovCi0JaWYgKCFsaXN0X2VtcHR5KCZjaGlsZF9jdHgtPmdyb3VwX2xpc3QpKQorCWlmICghbGlzdF9lbXB0eSgmY2hpbGRfY3R4LT5waW5uZWRfZ3JvdXBzKSB8fAorCSAgICAhbGlzdF9lbXB0eSgmY2hpbGRfY3R4LT5mbGV4aWJsZV9ncm91cHMpKQogCQlnb3RvIGFnYWluOwogCiAJbXV0ZXhfdW5sb2NrKCZjaGlsZF9jdHgtPm11dGV4KTsKQEAgLTUwNTcsNiArNTIxNiwyNCBAQAogCXB1dF9jdHgoY2hpbGRfY3R4KTsKIH0KIAorc3RhdGljIHZvaWQgcGVyZl9mcmVlX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCSAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKnBhcmVudCA9IGV2ZW50LT5wYXJlbnQ7CisKKwlpZiAoV0FSTl9PTl9PTkNFKCFwYXJlbnQpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZwYXJlbnQtPmNoaWxkX211dGV4KTsKKwlsaXN0X2RlbF9pbml0KCZldmVudC0+Y2hpbGRfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmNoaWxkX211dGV4KTsKKworCWZwdXQocGFyZW50LT5maWxwKTsKKworCWxpc3RfZGVsX2V2ZW50KGV2ZW50LCBjdHgpOworCWZyZWVfZXZlbnQoZXZlbnQpOworfQorCiAvKgogICogZnJlZSBhbiB1bmV4cG9zZWQsIHVudXNlZCBjb250ZXh0IGFzIGNyZWF0ZWQgYnkgaW5oZXJpdGFuY2UgYnkKICAqIGluaXRfdGFzayBiZWxvdywgdXNlZCBieSBmb3JrKCkgaW4gY2FzZSBvZiBmYWlsLgpAQCAtNTA3MSwyMyArNTI0OCwxNSBAQAogCiAJbXV0ZXhfbG9jaygmY3R4LT5tdXRleCk7CiBhZ2FpbjoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZlbnQsIHRtcCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJc3RydWN0IHBlcmZfZXZlbnQgKnBhcmVudCA9IGV2ZW50LT5wYXJlbnQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZjdHgtPnBpbm5lZF9ncm91cHMsIGdyb3VwX2VudHJ5KQorCQlwZXJmX2ZyZWVfZXZlbnQoZXZlbnQsIGN0eCk7CiAKLQkJaWYgKFdBUk5fT05fT05DRSghcGFyZW50KSkKLQkJCWNvbnRpbnVlOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmY3R4LT5mbGV4aWJsZV9ncm91cHMsCisJCQkJIGdyb3VwX2VudHJ5KQorCQlwZXJmX2ZyZWVfZXZlbnQoZXZlbnQsIGN0eCk7CiAKLQkJbXV0ZXhfbG9jaygmcGFyZW50LT5jaGlsZF9tdXRleCk7Ci0JCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5jaGlsZF9saXN0KTsKLQkJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmNoaWxkX211dGV4KTsKLQotCQlmcHV0KHBhcmVudC0+ZmlscCk7Ci0KLQkJbGlzdF9kZWxfZXZlbnQoZXZlbnQsIGN0eCk7Ci0JCWZyZWVfZXZlbnQoZXZlbnQpOwotCX0KLQotCWlmICghbGlzdF9lbXB0eSgmY3R4LT5ncm91cF9saXN0KSkKKwlpZiAoIWxpc3RfZW1wdHkoJmN0eC0+cGlubmVkX2dyb3VwcykgfHwKKwkgICAgIWxpc3RfZW1wdHkoJmN0eC0+ZmxleGlibGVfZ3JvdXBzKSkKIAkJZ290byBhZ2FpbjsKIAogCW11dGV4X3VubG9jaygmY3R4LT5tdXRleCk7CkBAIC01MDk1LDEyICs1MjY0LDU0IEBACiAJcHV0X2N0eChjdHgpOwogfQogCitzdGF0aWMgaW50Citpbmhlcml0X3Rhc2tfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwKKwkJICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqcGFyZW50X2N0eCwKKwkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKKwkJICAgaW50ICppbmhlcml0ZWRfYWxsKQoreworCWludCByZXQ7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2hpbGRfY3R4ID0gY2hpbGQtPnBlcmZfZXZlbnRfY3R4cDsKKworCWlmICghZXZlbnQtPmF0dHIuaW5oZXJpdCkgeworCQkqaW5oZXJpdGVkX2FsbCA9IDA7CisJCXJldHVybiAwOworCX0KKworCWlmICghY2hpbGRfY3R4KSB7CisJCS8qCisJCSAqIFRoaXMgaXMgZXhlY3V0ZWQgZnJvbSB0aGUgcGFyZW50IHRhc2sgY29udGV4dCwgc28KKwkJICogaW5oZXJpdCBldmVudHMgdGhhdCBoYXZlIGJlZW4gbWFya2VkIGZvciBjbG9uaW5nLgorCQkgKiBGaXJzdCBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGNvbnRleHQgZm9yIHRoZQorCQkgKiBjaGlsZC4KKwkJICovCisKKwkJY2hpbGRfY3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCksCisJCQkJICAgIEdGUF9LRVJORUwpOworCQlpZiAoIWNoaWxkX2N0eCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCV9fcGVyZl9ldmVudF9pbml0X2NvbnRleHQoY2hpbGRfY3R4LCBjaGlsZCk7CisJCWNoaWxkLT5wZXJmX2V2ZW50X2N0eHAgPSBjaGlsZF9jdHg7CisJCWdldF90YXNrX3N0cnVjdChjaGlsZCk7CisJfQorCisJcmV0ID0gaW5oZXJpdF9ncm91cChldmVudCwgcGFyZW50LCBwYXJlbnRfY3R4LAorCQkJICAgIGNoaWxkLCBjaGlsZF9jdHgpOworCisJaWYgKHJldCkKKwkJKmluaGVyaXRlZF9hbGwgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgcGVyZl9ldmVudCBjb250ZXh0IGluIHRhc2tfc3RydWN0CiAgKi8KIGludCBwZXJmX2V2ZW50X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewotCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmNoaWxkX2N0eCA9IE5VTEwsICpwYXJlbnRfY3R4OworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmNoaWxkX2N0eCwgKnBhcmVudF9jdHg7CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2xvbmVkX2N0eDsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQgPSBjdXJyZW50OwpAQCAtNTEzOCw0MSArNTM0OSwyMiBAQAogCSAqIFdlIGRvbnQgaGF2ZSB0byBkaXNhYmxlIE5NSXMgLSB3ZSBhcmUgb25seSBsb29raW5nIGF0CiAJICogdGhlIGxpc3QsIG5vdCBtYW5pcHVsYXRpbmcgaXQ6CiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJnBhcmVudF9jdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7Ci0KLQkJaWYgKCFldmVudC0+YXR0ci5pbmhlcml0KSB7Ci0JCQlpbmhlcml0ZWRfYWxsID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKCFjaGlsZC0+cGVyZl9ldmVudF9jdHhwKSB7Ci0JCQkvKgotCQkJICogVGhpcyBpcyBleGVjdXRlZCBmcm9tIHRoZSBwYXJlbnQgdGFzayBjb250ZXh0LCBzbwotCQkJICogaW5oZXJpdCBldmVudHMgdGhhdCBoYXZlIGJlZW4gbWFya2VkIGZvciBjbG9uaW5nLgotCQkJICogRmlyc3QgYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBjb250ZXh0IGZvciB0aGUKLQkJCSAqIGNoaWxkLgotCQkJICovCi0KLQkJCWNoaWxkX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQpLAotCQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWNoaWxkX2N0eCkgewotCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCV9fcGVyZl9ldmVudF9pbml0X2NvbnRleHQoY2hpbGRfY3R4LCBjaGlsZCk7Ci0JCQljaGlsZC0+cGVyZl9ldmVudF9jdHhwID0gY2hpbGRfY3R4OwotCQkJZ2V0X3Rhc2tfc3RydWN0KGNoaWxkKTsKLQkJfQotCi0JCXJldCA9IGluaGVyaXRfZ3JvdXAoZXZlbnQsIHBhcmVudCwgcGFyZW50X2N0eCwKLQkJCQkJICAgICBjaGlsZCwgY2hpbGRfY3R4KTsKLQkJaWYgKHJldCkgewotCQkJaW5oZXJpdGVkX2FsbCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJnBhcmVudF9jdHgtPnBpbm5lZF9ncm91cHMsIGdyb3VwX2VudHJ5KSB7CisJCXJldCA9IGluaGVyaXRfdGFza19ncm91cChldmVudCwgcGFyZW50LCBwYXJlbnRfY3R4LCBjaGlsZCwKKwkJCQkJICZpbmhlcml0ZWRfYWxsKTsKKwkJaWYgKHJldCkKIAkJCWJyZWFrOwotCQl9CiAJfQogCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJnBhcmVudF9jdHgtPmZsZXhpYmxlX2dyb3VwcywgZ3JvdXBfZW50cnkpIHsKKwkJcmV0ID0gaW5oZXJpdF90YXNrX2dyb3VwKGV2ZW50LCBwYXJlbnQsIHBhcmVudF9jdHgsIGNoaWxkLAorCQkJCQkgJmluaGVyaXRlZF9hbGwpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJY2hpbGRfY3R4ID0gY2hpbGQtPnBlcmZfZXZlbnRfY3R4cDsKKwogCWlmIChjaGlsZF9jdHggJiYgaW5oZXJpdGVkX2FsbCkgewogCQkvKgogCQkgKiBNYXJrIHRoZSBjaGlsZCBjb250ZXh0IGFzIGEgY2xvbmUgb2YgdGhlIHBhcmVudApAQCAtNTIyMSw3ICs1NDEzLDkgQEAKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSAmY3B1Y3R4LT5jdHg7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCAqdG1wOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmY3R4LT5waW5uZWRfZ3JvdXBzLCBncm91cF9lbnRyeSkKKwkJX19wZXJmX2V2ZW50X3JlbW92ZV9mcm9tX2NvbnRleHQoZXZlbnQpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmY3R4LT5mbGV4aWJsZV9ncm91cHMsIGdyb3VwX2VudHJ5KQogCQlfX3BlcmZfZXZlbnRfcmVtb3ZlX2Zyb21fY29udGV4dChldmVudCk7CiB9CiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2V4aXRfY3B1KGludCBjcHUpCkBAIC01MjU5LDYgKzU0NTMsMTAgQEAKIAkJcGVyZl9ldmVudF9leGl0X2NwdShjcHUpOwogCQlicmVhazsKIAorCWNhc2UgQ1BVX0RFQUQ6CisJCWh3X3BlcmZfZXZlbnRfc2V0dXBfb2ZmbGluZShjcHUpOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9waWQuYyBiL2tlcm5lbC9waWQuYwppbmRleCAyZTE3YzljLi5iMDhlNjk3IDEwMDY0NAotLS0gYS9rZXJuZWwvcGlkLmMKKysrIGIva2VybmVsL3BpZC5jCkBAIC0zNjcsNyArMzY3LDcgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJlc3VsdCA9IE5VTEw7CiAJaWYgKHBpZCkgewogCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZmlyc3Q7Ci0JCWZpcnN0ID0gcmN1X2RlcmVmZXJlbmNlKHBpZC0+dGFza3NbdHlwZV0uZmlyc3QpOworCQlmaXJzdCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhwaWQtPnRhc2tzW3R5cGVdLmZpcnN0LCByY3VfcmVhZF9sb2NrX2hlbGQoKSB8fCBsb2NrZGVwX2lzX2hlbGQoJnRhc2tsaXN0X2xvY2spKTsKIAkJaWYgKGZpcnN0KQogCQkJcmVzdWx0ID0gaGxpc3RfZW50cnkoZmlyc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcGlkc1sodHlwZSldLm5vZGUpOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3NpeC10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwppbmRleCA0OTU0NDA3Li4wMGQxZmRhIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LXRpbWVycy5jCkBAIC0yNTYsNyArMjU2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHBvc2l4X2dldF9jb2Fyc2VfcmVzKGNvbnN0IGNsb2NraWRfdCB3aGljaF9jbG9jaywgc3RydWN0IHRpbWVzcGVjICp0cCkKK3N0YXRpYyBpbnQgcG9zaXhfZ2V0X2NvYXJzZV9yZXMoY29uc3QgY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKQogewogCSp0cCA9IGt0aW1lX3RvX3RpbWVzcGVjKEtUSU1FX0xPV19SRVMpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL0tjb25maWcgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwppbmRleCA5MWUwOWQzLi41YzM2ZWE5IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvS2NvbmZpZworKysgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwpAQCAtMjcsNiArMjcsMTUgQEAKIAljb2RlLiBUaGlzIGlzIGhlbHBmdWwgd2hlbiBkZWJ1Z2dpbmcgYW5kIHJlcG9ydGluZyBQTSBidWdzLCBsaWtlCiAJc3VzcGVuZCBzdXBwb3J0LgogCitjb25maWcgUE1fQURWQU5DRURfREVCVUcKKwlib29sICJFeHRyYSBQTSBhdHRyaWJ1dGVzIGluIHN5c2ZzIGZvciBsb3ctbGV2ZWwgZGVidWdnaW5nL3Rlc3RpbmciCisJZGVwZW5kcyBvbiBQTV9ERUJVRworCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwlBZGQgZXh0cmEgc3lzZnMgYXR0cmlidXRlcyBhbGxvd2luZyBvbmUgdG8gYWNjZXNzIHNvbWUgUG93ZXIgTWFuYWdlbWVudAorCWZpZWxkcyBvZiBkZXZpY2Ugb2JqZWN0cyBmcm9tIHVzZXIgc3BhY2UuICBJZiB5b3UgYXJlIG5vdCBhIGtlcm5lbAorCWRldmVsb3BlciBpbnRlcmVzdGVkIGluIGRlYnVnZ2luZy90ZXN0aW5nIFBvd2VyIE1hbmFnZW1lbnQsIHNheSAibm8iLgorCiBjb25maWcgUE1fVkVSQk9TRQogCWJvb2wgIlZlcmJvc2UgUG93ZXIgTWFuYWdlbWVudCBkZWJ1Z2dpbmciCiAJZGVwZW5kcyBvbiBQTV9ERUJVRwpAQCAtODUsNiArOTQsMTEgQEAKIAlkZXBlbmRzIG9uIFNVU1BFTkQgfHwgSElCRVJOQVRJT04gfHwgWEVOX1NBVkVfUkVTVE9SRQogCWRlZmF1bHQgeQogCitjb25maWcgUE1fU0xFRVBfQURWQU5DRURfREVCVUcKKwlib29sCisJZGVwZW5kcyBvbiBQTV9BRFZBTkNFRF9ERUJVRworCWRlZmF1bHQgbgorCiBjb25maWcgU1VTUEVORAogCWJvb2wgIlN1c3BlbmQgdG8gUkFNIGFuZCBzdGFuZGJ5IgogCWRlcGVuZHMgb24gUE0gJiYgQVJDSF9TVVNQRU5EX1BPU1NJQkxFCkBAIC0yMjIsMyArMjM2LDggQEAKIAkgIGFuZCB0aGUgYnVzIHR5cGUgZHJpdmVycyBvZiB0aGUgYnVzZXMgdGhlIGRldmljZXMgYXJlIG9uIGFyZQogCSAgcmVzcG9uc2libGUgZm9yIHRoZSBhY3R1YWwgaGFuZGxpbmcgb2YgdGhlIGF1dG9zdXNwZW5kIHJlcXVlc3RzIGFuZAogCSAgd2FrZS11cCBldmVudHMuCisKK2NvbmZpZyBQTV9PUFMKKwlib29sCisJZGVwZW5kcyBvbiBQTV9TTEVFUCB8fCBQTV9SVU5USU1FCisJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvbWFpbi5jIGIva2VybmVsL3Bvd2VyL21haW4uYwppbmRleCAwOTk4YzcxLi5iNTg4MDBiIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvbWFpbi5jCisrKyBiL2tlcm5lbC9wb3dlci9tYWluLmMKQEAgLTQ0LDYgKzQ0LDMyIEBACiAJCQk9PSBOT1RJRllfQkFEKSA/IC1FSU5WQUwgOiAwOwogfQogCisvKiBJZiBzZXQsIGRldmljZXMgbWF5IGJlIHN1c3BlbmRlZCBhbmQgcmVzdW1lZCBhc3luY2hyb25vdXNseS4gKi8KK2ludCBwbV9hc3luY19lbmFibGVkID0gMTsKKworc3RhdGljIHNzaXplX3QgcG1fYXN5bmNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBtX2FzeW5jX2VuYWJsZWQpOworfQorCitzdGF0aWMgc3NpemVfdCBwbV9hc3luY19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmFsID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwbV9hc3luY19lbmFibGVkID0gdmFsOworCXJldHVybiBuOworfQorCitwb3dlcl9hdHRyKHBtX2FzeW5jKTsKKwogI2lmZGVmIENPTkZJR19QTV9ERUJVRwogaW50IHBtX3Rlc3RfbGV2ZWwgPSBURVNUX05PTkU7CiAKQEAgLTIwOCw5ICsyMzQsMTIgQEAKICNpZmRlZiBDT05GSUdfUE1fVFJBQ0UKIAkmcG1fdHJhY2VfYXR0ci5hdHRyLAogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApICYmIGRlZmluZWQoQ09ORklHX1BNX0RFQlVHKQorI2lmZGVmIENPTkZJR19QTV9TTEVFUAorCSZwbV9hc3luY19hdHRyLmF0dHIsCisjaWZkZWYgQ09ORklHX1BNX0RFQlVHCiAJJnBtX3Rlc3RfYXR0ci5hdHRyLAogI2VuZGlmCisjZW5kaWYKIAlOVUxMLAogfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwppbmRleCAzNmNiMTY4Li44MzBjYWRlIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYworKysgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwpAQCAtMTE4MSw3ICsxMTgxLDcgQEAKIAogCW1lbW9yeV9ibV9wb3NpdGlvbl9yZXNldCgmY29weV9ibSk7CiAKLQl3aGlsZSAodG9fZnJlZV9ub3JtYWwgPiAwICYmIHRvX2ZyZWVfaGlnaG1lbSA+IDApIHsKKwl3aGlsZSAodG9fZnJlZV9ub3JtYWwgPiAwIHx8IHRvX2ZyZWVfaGlnaG1lbSA+IDApIHsKIAkJdW5zaWduZWQgbG9uZyBwZm4gPSBtZW1vcnlfYm1fbmV4dF9wZm4oJmNvcHlfYm0pOwogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAKQEAgLTE1MDAsNyArMTUwMCw3IEBACiB7CiAJdW5zaWduZWQgaW50IG5yX3BhZ2VzLCBucl9oaWdobWVtOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiUE06IENyZWF0aW5nIGhpYmVybmF0aW9uIGltYWdlOiBcbiIpOworCXByaW50ayhLRVJOX0lORk8gIlBNOiBDcmVhdGluZyBoaWJlcm5hdGlvbiBpbWFnZTpcbiIpOwogCiAJZHJhaW5fbG9jYWxfcGFnZXMoTlVMTCk7CiAJbnJfcGFnZXMgPSBjb3VudF9kYXRhX3BhZ2VzKCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3dhcC5jIGIva2VybmVsL3Bvd2VyL3N3YXAuYwppbmRleCAwOWIyYjBhLi4xZDU3NTczIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3dhcC5jCisrKyBiL2tlcm5lbC9wb3dlci9zd2FwLmMKQEAgLTY1NywxMCArNjU3LDYgQEAKIAlzdHJ1Y3Qgc3dzdXNwX2luZm8gKmhlYWRlcjsKIAogCSpmbGFnc19wID0gc3dzdXNwX2hlYWRlci0+ZmxhZ3M7Ci0JaWYgKElTX0VSUihyZXN1bWVfYmRldikpIHsKLQkJcHJfZGVidWcoIlBNOiBJbWFnZSBkZXZpY2Ugbm90IGluaXRpYWxpc2VkXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIocmVzdW1lX2JkZXYpOwotCX0KIAogCW1lbXNldCgmc25hcHNob3QsIDAsIHNpemVvZihzdHJ1Y3Qgc25hcHNob3RfaGFuZGxlKSk7CiAJZXJyb3IgPSBzbmFwc2hvdF93cml0ZV9uZXh0KCZzbmFwc2hvdCwgUEFHRV9TSVpFKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zd3N1c3AuYyBiL2tlcm5lbC9wb3dlci9zd3N1c3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIzNjAxYi4uMDAwMDAwMAotLS0gYS9rZXJuZWwvcG93ZXIvc3dzdXNwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogbGludXgva2VybmVsL3Bvd2VyL3N3c3VzcC5jCi0gKgotICogVGhpcyBmaWxlIHByb3ZpZGVzIGNvZGUgdG8gd3JpdGUgc3VzcGVuZCBpbWFnZSB0byBzd2FwIGFuZCByZWFkIGl0IGJhY2suCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDEgR2Fib3IgS3V0aSA8c2Vhc29uc0Bmb3JuYXguaHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTgsMjAwMS0yMDA1IFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLgotICoKLSAqIEknZCBsaWtlIHRvIHRoYW5rIHRoZSBmb2xsb3dpbmcgcGVvcGxlIGZvciB0aGVpciB3b3JrOgotICoKLSAqIFBhdmVsIE1hY2hlayA8cGF2ZWxAdWN3LmN6PjoKLSAqIE1vZGlmaWNhdGlvbnMsIGRlZmVjdGl2ZW5lc3MgcG9pbnRpbmcsIGJlaW5nIHdpdGggbWUgYXQgdGhlIHZlcnkgYmVnaW5uaW5nLAotICogc3VzcGVuZCB0byBzd2FwIHNwYWNlLCBzdG9wIGFsbCB0YXNrcy4gUG9ydCB0byAyLjQuMTgtYWMgYW5kIDIuNS4xNy4KLSAqCi0gKiBTdGV2ZSBEb2RkaSA8ZGlya0Bsb3RoLmRlbW9uLmNvLnVrPjoKLSAqIFN1cHBvcnQgdGhlIHBvc3NpYmlsaXR5IG9mIGhhcmR3YXJlIHN0YXRlIHJlc3RvcmluZy4KLSAqCi0gKiBSYXBoIDxncmV5LmhhdmVuc0BlYXJ0aGxpbmcubmV0PjoKLSAqIFN1cHBvcnQgZm9yIHByZXNlcnZpbmcgc3RhdGVzIG9mIG5ldHdvcmsgZGV2aWNlcyBhbmQgdmlydHVhbCBjb25zb2xlCi0gKiAoaW5jbHVkaW5nIFggYW5kIHN2Z2F0ZXh0bW9kZSkKLSAqCi0gKiBLdXJ0IEdhcmxvZmYgPGdhcmxvZmZAc3VzZS5kZT46Ci0gKiBTdHJhaWdodGVuZWQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGluIG9yZGVyIHRvIHByZXZlbnQgY29tcGlsZXJzIGZyb20KLSAqIHBsYXlpbmcgdHJpY2tzIHdpdGggbG9jYWwgdmFyaWFibGVzLgotICoKLSAqIEFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KLSAqCi0gKiBBbGV4IEJhZGVhIDx2YW1waXJlQGdvLnJvPjoKLSAqIEZpeGVkIHJ1bmF3YXkgaW5pdAotICoKLSAqIFJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4KLSAqIFJld29ya2VkIHRoZSBmcmVlaW5nIG9mIG1lbW9yeSBhbmQgdGhlIGhhbmRsaW5nIG9mIHN3YXAKLSAqCi0gKiBNb3JlIHN0YXRlIHNhdmVycyBhcmUgd2VsY29tZS4gRXNwZWNpYWxseSBmb3IgdGhlIHNjc2kgbGF5ZXIuLi4KLSAqCi0gKiBGb3IgVE9ET3MsRklYTUVzIGFsc28gbG9vayBpbiBEb2N1bWVudGF0aW9uL3Bvd2VyL3N3c3VzcC50eHQKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N3YXBvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlICJwb3dlci5oIgotCi1pbnQgaW5fc3VzcGVuZCBfX25vc2F2ZWRhdGEgPSAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3VzZXIuYyBiL2tlcm5lbC9wb3dlci91c2VyLmMKaW5kZXggYmYwMDE0ZC4uNGQyMjg5NiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3VzZXIuYworKysgYi9rZXJuZWwvcG93ZXIvdXNlci5jCkBAIC0xOTUsNiArMTk1LDE1IEBACiAJcmV0dXJuIHJlczsKIH0KIAorc3RhdGljIHZvaWQgc25hcHNob3RfZGVwcmVjYXRlZF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kKQoreworCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX05PVElDRSAiJXBmOiBpb2N0bCAnJS44eCcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCAiCisJCQkJImJlIHJlbW92ZWQgc29vbiwgdXBkYXRlIHlvdXIgc3VzcGVuZC10by1kaXNrICIKKwkJCQkidXRpbGl0aWVzXG4iLAorCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgY21kKTsKK30KKwogc3RhdGljIGxvbmcgc25hcHNob3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkJCQkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0yNDYsOCArMjU1LDkgQEAKIAkJZGF0YS0+ZnJvemVuID0gMDsKIAkJYnJlYWs7CiAKLQljYXNlIFNOQVBTSE9UX0NSRUFURV9JTUFHRToKIAljYXNlIFNOQVBTSE9UX0FUT01JQ19TTkFQU0hPVDoKKwkJc25hcHNob3RfZGVwcmVjYXRlZF9pb2N0bChjbWQpOworCWNhc2UgU05BUFNIT1RfQ1JFQVRFX0lNQUdFOgogCQlpZiAoZGF0YS0+bW9kZSAhPSBPX1JET05MWSB8fCAhZGF0YS0+ZnJvemVuICB8fCBkYXRhLT5yZWFkeSkgewogCQkJZXJyb3IgPSAtRVBFUk07CiAJCQlicmVhazsKQEAgLTI3NSw4ICsyODUsOSBAQAogCQlkYXRhLT5yZWFkeSA9IDA7CiAJCWJyZWFrOwogCi0JY2FzZSBTTkFQU0hPVF9QUkVGX0lNQUdFX1NJWkU6CiAJY2FzZSBTTkFQU0hPVF9TRVRfSU1BR0VfU0laRToKKwkJc25hcHNob3RfZGVwcmVjYXRlZF9pb2N0bChjbWQpOworCWNhc2UgU05BUFNIT1RfUFJFRl9JTUFHRV9TSVpFOgogCQlpbWFnZV9zaXplID0gYXJnOwogCQlicmVhazsKIApAQCAtMjkwLDE1ICszMDEsMTcgQEAKIAkJZXJyb3IgPSBwdXRfdXNlcihzaXplLCAobG9mZl90IF9fdXNlciAqKWFyZyk7CiAJCWJyZWFrOwogCi0JY2FzZSBTTkFQU0hPVF9BVkFJTF9TV0FQX1NJWkU6CiAJY2FzZSBTTkFQU0hPVF9BVkFJTF9TV0FQOgorCQlzbmFwc2hvdF9kZXByZWNhdGVkX2lvY3RsKGNtZCk7CisJY2FzZSBTTkFQU0hPVF9BVkFJTF9TV0FQX1NJWkU6CiAJCXNpemUgPSBjb3VudF9zd2FwX3BhZ2VzKGRhdGEtPnN3YXAsIDEpOwogCQlzaXplIDw8PSBQQUdFX1NISUZUOwogCQllcnJvciA9IHB1dF91c2VyKHNpemUsIChsb2ZmX3QgX191c2VyICopYXJnKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNOQVBTSE9UX0FMTE9DX1NXQVBfUEFHRToKIAljYXNlIFNOQVBTSE9UX0dFVF9TV0FQX1BBR0U6CisJCXNuYXBzaG90X2RlcHJlY2F0ZWRfaW9jdGwoY21kKTsKKwljYXNlIFNOQVBTSE9UX0FMTE9DX1NXQVBfUEFHRToKIAkJaWYgKGRhdGEtPnN3YXAgPCAwIHx8IGRhdGEtPnN3YXAgPj0gTUFYX1NXQVBGSUxFUykgewogCQkJZXJyb3IgPSAtRU5PREVWOwogCQkJYnJlYWs7CkBAIC0zMjEsNiArMzM0LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNOQVBTSE9UX1NFVF9TV0FQX0ZJTEU6IC8qIFRoaXMgaW9jdGwgaXMgZGVwcmVjYXRlZCAqLworCQlzbmFwc2hvdF9kZXByZWNhdGVkX2lvY3RsKGNtZCk7CiAJCWlmICghc3dzdXNwX3N3YXBfaW5fdXNlKCkpIHsKIAkJCS8qCiAJCQkgKiBVc2VyIHNwYWNlIGVuY29kZXMgZGV2aWNlIHR5cGVzIGFzIHR3by1ieXRlIHZhbHVlcywKQEAgLTM2Miw2ICszNzYsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU05BUFNIT1RfUE1PUFM6IC8qIFRoaXMgaW9jdGwgaXMgZGVwcmVjYXRlZCAqLworCQlzbmFwc2hvdF9kZXByZWNhdGVkX2lvY3RsKGNtZCk7CiAJCWVycm9yID0gLUVJTlZBTDsKIAogCQlzd2l0Y2ggKGFyZykgewpkaWZmIC0tZ2l0IGEva2VybmVsL3B0cmFjZS5jIGIva2VybmVsL3B0cmFjZS5jCmluZGV4IDIzYmQwOWMuLjQyYWQ4YWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wdHJhY2UuYworKysgYi9rZXJuZWwvcHRyYWNlLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcmVnc2V0Lmg+CiAKIAogLyoKQEAgLTUxMSw2ICs1MTIsNDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKgorZmluZF9yZWdzZXQoY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0X3ZpZXcgKnZpZXcsIHVuc2lnbmVkIGludCB0eXBlKQoreworCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0OworCWludCBuOworCisJZm9yIChuID0gMDsgbiA8IHZpZXctPm47ICsrbikgeworCQlyZWdzZXQgPSB2aWV3LT5yZWdzZXRzICsgbjsKKwkJaWYgKHJlZ3NldC0+Y29yZV9ub3RlX3R5cGUgPT0gdHlwZSkKKwkJCXJldHVybiByZWdzZXQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcHRyYWNlX3JlZ3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCByZXEsIHVuc2lnbmVkIGludCB0eXBlLAorCQkJIHN0cnVjdCBpb3ZlYyAqa2lvdikKK3sKKwljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXRfdmlldyAqdmlldyA9IHRhc2tfdXNlcl9yZWdzZXRfdmlldyh0YXNrKTsKKwljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCA9IGZpbmRfcmVnc2V0KHZpZXcsIHR5cGUpOworCWludCByZWdzZXRfbm87CisKKwlpZiAoIXJlZ3NldCB8fCAoa2lvdi0+aW92X2xlbiAlIHJlZ3NldC0+c2l6ZSkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWdzZXRfbm8gPSByZWdzZXQgLSB2aWV3LT5yZWdzZXRzOworCWtpb3YtPmlvdl9sZW4gPSBtaW4oa2lvdi0+aW92X2xlbiwKKwkJCSAgICAoX19rZXJuZWxfc2l6ZV90KSAocmVnc2V0LT5uICogcmVnc2V0LT5zaXplKSk7CisKKwlpZiAocmVxID09IFBUUkFDRV9HRVRSRUdTRVQpCisJCXJldHVybiBjb3B5X3JlZ3NldF90b191c2VyKHRhc2ssIHZpZXcsIHJlZ3NldF9ubywgMCwKKwkJCQkJICAga2lvdi0+aW92X2xlbiwga2lvdi0+aW92X2Jhc2UpOworCWVsc2UKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X2Zyb21fdXNlcih0YXNrLCB2aWV3LCByZWdzZXRfbm8sIDAsCisJCQkJCSAgICAga2lvdi0+aW92X2xlbiwga2lvdi0+aW92X2Jhc2UpOworfQorCisjZW5kaWYKKwogaW50IHB0cmFjZV9yZXF1ZXN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCwKIAkJICAgbG9uZyBhZGRyLCBsb25nIGRhdGEpCiB7CkBAIC01NzMsNiArNjE1LDI2IEBACiAJCQlyZXR1cm4gMDsKIAkJcmV0dXJuIHB0cmFjZV9yZXN1bWUoY2hpbGQsIHJlcXVlc3QsIFNJR0tJTEwpOwogCisjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sKKwljYXNlIFBUUkFDRV9HRVRSRUdTRVQ6CisJY2FzZSBQVFJBQ0VfU0VUUkVHU0VUOgorCXsKKwkJc3RydWN0IGlvdmVjIGtpb3Y7CisJCXN0cnVjdCBpb3ZlYyBfX3VzZXIgKnVpb3YgPSAoc3RydWN0IGlvdmVjIF9fdXNlciAqKSBkYXRhOworCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdWlvdiwgc2l6ZW9mKCp1aW92KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoX19nZXRfdXNlcihraW92Lmlvdl9iYXNlLCAmdWlvdi0+aW92X2Jhc2UpIHx8CisJCSAgICBfX2dldF91c2VyKGtpb3YuaW92X2xlbiwgJnVpb3YtPmlvdl9sZW4pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0ID0gcHRyYWNlX3JlZ3NldChjaGlsZCwgcmVxdWVzdCwgYWRkciwgJmtpb3YpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IF9fcHV0X3VzZXIoa2lvdi5pb3ZfbGVuLCAmdWlvdi0+aW92X2xlbik7CisJCWJyZWFrOworCX0KKyNlbmRpZgogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTcxMSw2ICs3NzMsMzIgQEAKIAkJZWxzZQogCQkJcmV0ID0gcHRyYWNlX3NldHNpZ2luZm8oY2hpbGQsICZzaWdpbmZvKTsKIAkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sKKwljYXNlIFBUUkFDRV9HRVRSRUdTRVQ6CisJY2FzZSBQVFJBQ0VfU0VUUkVHU0VUOgorCXsKKwkJc3RydWN0IGlvdmVjIGtpb3Y7CisJCXN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp1aW92ID0KKwkJCShzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqKSBkYXRhcDsKKwkJY29tcGF0X3VwdHJfdCBwdHI7CisJCWNvbXBhdF9zaXplX3QgbGVuOworCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdWlvdiwgc2l6ZW9mKCp1aW92KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoX19nZXRfdXNlcihwdHIsICZ1aW92LT5pb3ZfYmFzZSkgfHwKKwkJICAgIF9fZ2V0X3VzZXIobGVuLCAmdWlvdi0+aW92X2xlbikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlraW92Lmlvdl9iYXNlID0gY29tcGF0X3B0cihwdHIpOworCQlraW92Lmlvdl9sZW4gPSBsZW47CisKKwkJcmV0ID0gcHRyYWNlX3JlZ3NldChjaGlsZCwgcmVxdWVzdCwgYWRkciwgJmtpb3YpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IF9fcHV0X3VzZXIoa2lvdi5pb3ZfbGVuLCAmdWlvdi0+aW92X2xlbik7CisJCWJyZWFrOworCX0KKyNlbmRpZgogCiAJZGVmYXVsdDoKIAkJcmV0ID0gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXBkYXRlLmMgYi9rZXJuZWwvcmN1cGRhdGUuYwppbmRleCA5YjdmZDQ3Li5mMTEyNWMxIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1cGRhdGUuYworKysgYi9rZXJuZWwvcmN1cGRhdGUuYwpAQCAtNDQsMTQgKzQ0LDQzIEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmN1X2xvY2tfa2V5Owogc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9sb2NrX21hcCA9CiAJU1RBVElDX0xPQ0tERVBfTUFQX0lOSVQoInJjdV9yZWFkX2xvY2siLCAmcmN1X2xvY2tfa2V5KTsKIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9sb2NrX21hcCk7CisKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmN1X2JoX2xvY2tfa2V5Oworc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9iaF9sb2NrX21hcCA9CisJU1RBVElDX0xPQ0tERVBfTUFQX0lOSVQoInJjdV9yZWFkX2xvY2tfYmgiLCAmcmN1X2JoX2xvY2tfa2V5KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iaF9sb2NrX21hcCk7CisKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmN1X3NjaGVkX2xvY2tfa2V5Oworc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9zY2hlZF9sb2NrX21hcCA9CisJU1RBVElDX0xPQ0tERVBfTUFQX0lOSVQoInJjdV9yZWFkX2xvY2tfc2NoZWQiLCAmcmN1X3NjaGVkX2xvY2tfa2V5KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9zY2hlZF9sb2NrX21hcCk7CiAjZW5kaWYKIAoraW50IHJjdV9zY2hlZHVsZXJfYWN0aXZlIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MX0dQTChyY3Vfc2NoZWR1bGVyX2FjdGl2ZSk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBzY2hlZHVsZXIncyBpbml0aWFsaXphdGlvbgorICogcHJvY2Vzcy4gIEJlZm9yZSB0aGlzIGlzIGNhbGxlZCwgdGhlIGlkbGUgdGFzayBtaWdodCBjb250YWluCisgKiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIChkdXJpbmcgd2hpY2ggdGltZSwgdGhpcyBpZGxlCisgKiB0YXNrIGlzIGJvb3RpbmcgdGhlIHN5c3RlbSkuICBBZnRlciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlCisgKiBpZGxlIHRhc2tzIGFyZSBwcm9oaWJpdGVkIGZyb20gY29udGFpbmluZyBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCisgKiBzZWN0aW9ucy4KKyAqLwordm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpCit7CisJV0FSTl9PTihudW1fb25saW5lX2NwdXMoKSAhPSAxKTsKKwlXQVJOX09OKG5yX2NvbnRleHRfc3dpdGNoZXMoKSA+IDApOworCXJjdV9zY2hlZHVsZXJfYWN0aXZlID0gMTsKK30KKwogLyoKICAqIEF3YWtlbiB0aGUgY29ycmVzcG9uZGluZyBzeW5jaHJvbml6ZV9yY3UoKSBpbnN0YW5jZSBub3cgdGhhdCBhCiAgKiBncmFjZSBwZXJpb2QgaGFzIGVsYXBzZWQuCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dG9ydHVyZS5jIGIva2VybmVsL3JjdXRvcnR1cmUuYwppbmRleCA5YmI1MjE3Li4yNThjZGYwIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dG9ydHVyZS5jCisrKyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKQEAgLTYxLDYgKzYxLDkgQEAKIHN0YXRpYyBpbnQgc2h1ZmZsZV9pbnRlcnZhbCA9IDM7IC8qIEludGVydmFsIGJldHdlZW4gc2h1ZmZsZXMgKGluIHNlYykqLwogc3RhdGljIGludCBzdHV0dGVyID0gNTsJCS8qIFN0YXJ0L3N0b3AgdGVzdGluZyBpbnRlcnZhbCAoaW4gc2VjKSAqLwogc3RhdGljIGludCBpcnFyZWFkZXIgPSAxOwkvKiBSQ1UgcmVhZGVycyBmcm9tIGlycSAodGltZXJzKS4gKi8KK3N0YXRpYyBpbnQgZnFzX2R1cmF0aW9uID0gMDsJLyogRHVyYXRpb24gb2YgYnVyc3RzICh1cyksIDAgdG8gZGlzYWJsZS4gKi8KK3N0YXRpYyBpbnQgZnFzX2hvbGRvZmYgPSAwOwkvKiBIb2xkIHRpbWUgd2l0aGluIGJ1cnN0ICh1cykuICovCitzdGF0aWMgaW50IGZxc19zdHV0dGVyID0gMzsJLyogV2FpdCB0aW1lIGJldHdlZW4gYnVyc3RzIChzKS4gKi8KIHN0YXRpYyBjaGFyICp0b3J0dXJlX3R5cGUgPSAicmN1IjsgLyogV2hhdCBSQ1UgaW1wbGVtZW50YXRpb24gdG8gdG9ydHVyZS4gKi8KIAogbW9kdWxlX3BhcmFtKG5yZWFkZXJzLCBpbnQsIDA0NDQpOwpAQCAtNzksNiArODIsMTIgQEAKIE1PRFVMRV9QQVJNX0RFU0Moc3R1dHRlciwgIk51bWJlciBvZiBzZWNvbmRzIHRvIHJ1bi9oYWx0IHRlc3QiKTsKIG1vZHVsZV9wYXJhbShpcnFyZWFkZXIsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlycXJlYWRlciwgIkFsbG93IFJDVSByZWFkZXJzIGZyb20gaXJxIGhhbmRsZXJzIik7Cittb2R1bGVfcGFyYW0oZnFzX2R1cmF0aW9uLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmcXNfZHVyYXRpb24sICJEdXJhdGlvbiBvZiBmcXMgYnVyc3RzICh1cykiKTsKK21vZHVsZV9wYXJhbShmcXNfaG9sZG9mZiwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZnFzX2hvbGRvZmYsICJIb2xkb2ZmIHRpbWUgd2l0aGluIGZxcyBidXJzdHMgKHVzKSIpOworbW9kdWxlX3BhcmFtKGZxc19zdHV0dGVyLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmcXNfc3R1dHRlciwgIldhaXQgdGltZSBiZXR3ZWVuIGZxcyBidXJzdHMgKHMpIik7CiBtb2R1bGVfcGFyYW0odG9ydHVyZV90eXBlLCBjaGFycCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHRvcnR1cmVfdHlwZSwgIlR5cGUgb2YgUkNVIHRvIHRvcnR1cmUgKHJjdSwgcmN1X2JoLCBzcmN1KSIpOwogCkBAIC05OSw2ICsxMDgsNyBAQAogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3RhdHNfdGFzazsKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNodWZmbGVyX3Rhc2s7CiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpzdHV0dGVyX3Rhc2s7CitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmcXNfdGFzazsKIAogI2RlZmluZSBSQ1VfVE9SVFVSRV9QSVBFX0xFTiAxMAogCkBAIC0yNjMsNiArMjczLDcgQEAKIAl2b2lkICgqZGVmZXJyZWRfZnJlZSkoc3RydWN0IHJjdV90b3J0dXJlICpwKTsKIAl2b2lkICgqc3luYykodm9pZCk7CiAJdm9pZCAoKmNiX2JhcnJpZXIpKHZvaWQpOworCXZvaWQgKCpmcXMpKHZvaWQpOwogCWludCAoKnN0YXRzKShjaGFyICpwYWdlKTsKIAlpbnQgaXJxX2NhcGFibGU7CiAJY2hhciAqbmFtZTsKQEAgLTM0Nyw2ICszNTgsNyBAQAogCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSBzeW5jaHJvbml6ZV9yY3UsCiAJLmNiX2JhcnJpZXIJPSByY3VfYmFycmllciwKKwkuZnFzCQk9IHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IE5VTEwsCiAJLmlycV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAicmN1IgpAQCAtMzg4LDYgKzQwMCw3IEBACiAJLmRlZmVycmVkX2ZyZWUJPSByY3Vfc3luY190b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc3luY2hyb25pemVfcmN1LAogCS5jYl9iYXJyaWVyCT0gTlVMTCwKKwkuZnFzCQk9IHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IE5VTEwsCiAJLmlycV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAicmN1X3N5bmMiCkBAIC00MDMsNiArNDE2LDcgQEAKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV9zeW5jX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkLAogCS5jYl9iYXJyaWVyCT0gTlVMTCwKKwkuZnFzCQk9IHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IE5VTEwsCiAJLmlycV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAicmN1X2V4cGVkaXRlZCIKQEAgLTQ2NSw2ICs0NzksNyBAQAogCS5kZWZlcnJlZF9mcmVlCT0gcmN1X2JoX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSByY3VfYmhfdG9ydHVyZV9zeW5jaHJvbml6ZSwKIAkuY2JfYmFycmllcgk9IHJjdV9iYXJyaWVyX2JoLAorCS5mcXMJCT0gcmN1X2JoX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSwKIAkuc3RhdHMJCT0gTlVMTCwKIAkuaXJxX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICJyY3VfYmgiCkBAIC00ODAsNiArNDk1LDcgQEAKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV9zeW5jX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSByY3VfYmhfdG9ydHVyZV9zeW5jaHJvbml6ZSwKIAkuY2JfYmFycmllcgk9IE5VTEwsCisJLmZxcwkJPSByY3VfYmhfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSBOVUxMLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gInJjdV9iaF9zeW5jIgpAQCAtNjIxLDYgKzYzNyw3IEBACiAJLmRlZmVycmVkX2ZyZWUJPSByY3Vfc2NoZWRfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAogCS5zeW5jCQk9IHNjaGVkX3RvcnR1cmVfc3luY2hyb25pemUsCiAJLmNiX2JhcnJpZXIJPSByY3VfYmFycmllcl9zY2hlZCwKKwkuZnFzCQk9IHJjdV9zY2hlZF9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IE5VTEwsCiAJLmlycV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAic2NoZWQiCkBAIC02MzYsNiArNjUzLDcgQEAKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV9zeW5jX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSBzY2hlZF90b3J0dXJlX3N5bmNocm9uaXplLAogCS5jYl9iYXJyaWVyCT0gTlVMTCwKKwkuZnFzCQk9IHJjdV9zY2hlZF9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IE5VTEwsCiAJLm5hbWUJCT0gInNjaGVkX3N5bmMiCiB9OwpAQCAtNjUwLDEyICs2NjgsNDUgQEAKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV9zeW5jX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSBzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQsCiAJLmNiX2JhcnJpZXIJPSBOVUxMLAorCS5mcXMJCT0gcmN1X3NjaGVkX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSwKIAkuc3RhdHMJCT0gcmN1X2V4cGVkaXRlZF90b3J0dXJlX3N0YXRzLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gInNjaGVkX2V4cGVkaXRlZCIKIH07CiAKIC8qCisgKiBSQ1UgdG9ydHVyZSBmb3JjZS1xdWllc2NlbnQtc3RhdGUga3RocmVhZC4gIFJlcGVhdGVkbHkgaW5kdWNlcworICogYnVyc3RzIG9mIGNhbGxzIHRvIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpLCBpbmNyZWFzaW5nIHRoZSBwcm9iYWJpbGl0eQorICogb2Ygb2NjdXJyZW5jZSBvZiBzb21lIGltcG9ydGFudCB0eXBlcyBvZiByYWNlIGNvbmRpdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQKK3JjdV90b3J0dXJlX2Zxcyh2b2lkICphcmcpCit7CisJdW5zaWduZWQgbG9uZyBmcXNfcmVzdW1lX3RpbWU7CisJaW50IGZxc19idXJzdF9yZW1haW5pbmc7CisKKwlWRVJCT1NFX1BSSU5US19TVFJJTkcoInJjdV90b3J0dXJlX2ZxcyB0YXNrIHN0YXJ0ZWQiKTsKKwlkbyB7CisJCWZxc19yZXN1bWVfdGltZSA9IGppZmZpZXMgKyBmcXNfc3R1dHRlciAqIEhaOworCQl3aGlsZSAoamlmZmllcyAtIGZxc19yZXN1bWVfdGltZSA+IExPTkdfTUFYKSB7CisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMSk7CisJCX0KKwkJZnFzX2J1cnN0X3JlbWFpbmluZyA9IGZxc19kdXJhdGlvbjsKKwkJd2hpbGUgKGZxc19idXJzdF9yZW1haW5pbmcgPiAwKSB7CisJCQljdXJfb3BzLT5mcXMoKTsKKwkJCXVkZWxheShmcXNfaG9sZG9mZik7CisJCQlmcXNfYnVyc3RfcmVtYWluaW5nIC09IGZxc19ob2xkb2ZmOworCQl9CisJCXJjdV9zdHV0dGVyX3dhaXQoInJjdV90b3J0dXJlX2ZxcyIpOworCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkgJiYgZnVsbHN0b3AgPT0gRlVMTFNUT1BfRE9OVFNUT1ApOworCVZFUkJPU0VfUFJJTlRLX1NUUklORygicmN1X3RvcnR1cmVfZnFzIHRhc2sgc3RvcHBpbmciKTsKKwlyY3V0b3J0dXJlX3NodXRkb3duX2Fic29yYigicmN1X3RvcnR1cmVfZnFzIik7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOworCXJldHVybiAwOworfQorCisvKgogICogUkNVIHRvcnR1cmUgd3JpdGVyIGt0aHJlYWQuICBSZXBlYXRlZGx5IHN1YnN0aXR1dGVzIGEgbmV3IHN0cnVjdHVyZQogICogZm9yIHRoYXQgcG9pbnRlZCB0byBieSByY3VfdG9ydHVyZV9jdXJyZW50LCBmcmVlaW5nIHRoZSBvbGQgc3RydWN0dXJlCiAgKiBhZnRlciBhIHNlcmllcyBvZiBncmFjZSBwZXJpb2RzICh0aGUgInBpcGVsaW5lIikuCkBAIC03NDUsNyArNzk2LDExIEBACiAKIAlpZHggPSBjdXJfb3BzLT5yZWFkbG9jaygpOwogCWNvbXBsZXRlZCA9IGN1cl9vcHMtPmNvbXBsZXRlZCgpOwotCXAgPSByY3VfZGVyZWZlcmVuY2UocmN1X3RvcnR1cmVfY3VycmVudCk7CisJcCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhyY3VfdG9ydHVyZV9jdXJyZW50LAorCQkJCSAgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwKKwkJCQkgIHJjdV9yZWFkX2xvY2tfYmhfaGVsZCgpIHx8CisJCQkJICByY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQoKSB8fAorCQkJCSAgc3JjdV9yZWFkX2xvY2tfaGVsZCgmc3JjdV9jdGwpKTsKIAlpZiAocCA9PSBOVUxMKSB7CiAJCS8qIExlYXZlIGJlY2F1c2UgcmN1X3RvcnR1cmVfd3JpdGVyIGlzIG5vdCB5ZXQgdW5kZXJ3YXkgKi8KIAkJY3VyX29wcy0+cmVhZHVubG9jayhpZHgpOwpAQCAtNzk4LDExICs4NTMsMTUgQEAKIAlkbyB7CiAJCWlmIChpcnFyZWFkZXIgJiYgY3VyX29wcy0+aXJxX2NhcGFibGUpIHsKIAkJCWlmICghdGltZXJfcGVuZGluZygmdCkpCi0JCQkJbW9kX3RpbWVyKCZ0LCAxKTsKKwkJCQltb2RfdGltZXIoJnQsIGppZmZpZXMgKyAxKTsKIAkJfQogCQlpZHggPSBjdXJfb3BzLT5yZWFkbG9jaygpOwogCQljb21wbGV0ZWQgPSBjdXJfb3BzLT5jb21wbGV0ZWQoKTsKLQkJcCA9IHJjdV9kZXJlZmVyZW5jZShyY3VfdG9ydHVyZV9jdXJyZW50KTsKKwkJcCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhyY3VfdG9ydHVyZV9jdXJyZW50LAorCQkJCQkgIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8CisJCQkJCSAgcmN1X3JlYWRfbG9ja19iaF9oZWxkKCkgfHwKKwkJCQkJICByY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQoKSB8fAorCQkJCQkgIHNyY3VfcmVhZF9sb2NrX2hlbGQoJnNyY3VfY3RsKSk7CiAJCWlmIChwID09IE5VTEwpIHsKIAkJCS8qIFdhaXQgZm9yIHJjdV90b3J0dXJlX3dyaXRlciB0byBnZXQgdW5kZXJ3YXkgKi8KIAkJCWN1cl9vcHMtPnJlYWR1bmxvY2soaWR4KTsKQEAgLTEwMzAsMTAgKzEwODksMTEgQEAKIAlwcmludGsoS0VSTl9BTEVSVCAiJXMiIFRPUlRVUkVfRkxBRwogCQkiLS0tICVzOiBucmVhZGVycz0lZCBuZmFrZXdyaXRlcnM9JWQgIgogCQkic3RhdF9pbnRlcnZhbD0lZCB2ZXJib3NlPSVkIHRlc3Rfbm9faWRsZV9oej0lZCAiCi0JCSJzaHVmZmxlX2ludGVydmFsPSVkIHN0dXR0ZXI9JWQgaXJxcmVhZGVyPSVkXG4iLAorCQkic2h1ZmZsZV9pbnRlcnZhbD0lZCBzdHV0dGVyPSVkIGlycXJlYWRlcj0lZCAiCisJCSJmcXNfZHVyYXRpb249JWQgZnFzX2hvbGRvZmY9JWQgZnFzX3N0dXR0ZXI9JWRcbiIsCiAJCXRvcnR1cmVfdHlwZSwgdGFnLCBucmVhbHJlYWRlcnMsIG5mYWtld3JpdGVycywKIAkJc3RhdF9pbnRlcnZhbCwgdmVyYm9zZSwgdGVzdF9ub19pZGxlX2h6LCBzaHVmZmxlX2ludGVydmFsLAotCQlzdHV0dGVyLCBpcnFyZWFkZXIpOworCQlzdHV0dGVyLCBpcnFyZWFkZXIsIGZxc19kdXJhdGlvbiwgZnFzX2hvbGRvZmYsIGZxc19zdHV0dGVyKTsKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayByY3V0b3J0dXJlX25iID0gewpAQCAtMTEwOSw2ICsxMTY5LDEyIEBACiAJfQogCXN0YXRzX3Rhc2sgPSBOVUxMOwogCisJaWYgKGZxc190YXNrKSB7CisJCVZFUkJPU0VfUFJJTlRLX1NUUklORygiU3RvcHBpbmcgcmN1X3RvcnR1cmVfZnFzIHRhc2siKTsKKwkJa3RocmVhZF9zdG9wKGZxc190YXNrKTsKKwl9CisJZnFzX3Rhc2sgPSBOVUxMOworCiAJLyogV2FpdCBmb3IgYWxsIFJDVSBjYWxsYmFja3MgdG8gZmlyZS4gICovCiAKIAlpZiAoY3VyX29wcy0+Y2JfYmFycmllciAhPSBOVUxMKQpAQCAtMTE1NCw2ICsxMjIwLDExIEBACiAJCW11dGV4X3VubG9jaygmZnVsbHN0b3BfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJaWYgKGN1cl9vcHMtPmZxcyA9PSBOVUxMICYmIGZxc19kdXJhdGlvbiAhPSAwKSB7CisJCXByaW50ayhLRVJOX0FMRVJUICJyY3UtdG9ydHVyZTogLT5mcXMgTlVMTCBhbmQgbm9uLXplcm8gIgorCQkJCSAgImZxc19kdXJhdGlvbiwgZnFzIGRpc2FibGVkLlxuIik7CisJCWZxc19kdXJhdGlvbiA9IDA7CisJfQogCWlmIChjdXJfb3BzLT5pbml0KQogCQljdXJfb3BzLT5pbml0KCk7IC8qIG5vICJnb3RvIHVud2luZCIgcHJpb3IgdG8gdGhpcyBwb2ludCEhISAqLwogCkBAIC0xMjgyLDYgKzEzNTMsMTkgQEAKIAkJCWdvdG8gdW53aW5kOwogCQl9CiAJfQorCWlmIChmcXNfZHVyYXRpb24gPCAwKQorCQlmcXNfZHVyYXRpb24gPSAwOworCWlmIChmcXNfZHVyYXRpb24pIHsKKwkJLyogQ3JlYXRlIHRoZSBzdHV0dGVyIHRocmVhZCAqLworCQlmcXNfdGFzayA9IGt0aHJlYWRfcnVuKHJjdV90b3J0dXJlX2ZxcywgTlVMTCwKKwkJCQkgICAgICAgInJjdV90b3J0dXJlX2ZxcyIpOworCQlpZiAoSVNfRVJSKGZxc190YXNrKSkgeworCQkJZmlyc3RlcnIgPSBQVFJfRVJSKGZxc190YXNrKTsKKwkJCVZFUkJPU0VfUFJJTlRLX0VSUlNUUklORygiRmFpbGVkIHRvIGNyZWF0ZSBmcXMiKTsKKwkJCWZxc190YXNrID0gTlVMTDsKKwkJCWdvdG8gdW53aW5kOworCQl9CisJfQogCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmcmN1dG9ydHVyZV9uYik7CiAJbXV0ZXhfdW5sb2NrKCZmdWxsc3RvcF9tdXRleCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZS5jIGIva2VybmVsL3JjdXRyZWUuYwppbmRleCA1M2FlOTU5Li4zZWM4MTYwIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZS5jCisrKyBiL2tlcm5lbC9yY3V0cmVlLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogCiAjaW5jbHVkZSAicmN1dHJlZS5oIgogCkBAIC02NiwxMSArNjUsMTEgQEAKIAkuc2lnbmFsZWQgPSBSQ1VfR1BfSURMRSwgXAogCS5ncG51bSA9IC0zMDAsIFwKIAkuY29tcGxldGVkID0gLTMwMCwgXAotCS5vbm9mZmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCgmbmFtZS5vbm9mZmxvY2spLCBcCisJLm9ub2ZmbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCgmbmFtZS5vbm9mZmxvY2spLCBcCiAJLm9ycGhhbl9jYnNfbGlzdCA9IE5VTEwsIFwKIAkub3JwaGFuX2Nic190YWlsID0gJm5hbWUub3JwaGFuX2Nic19saXN0LCBcCiAJLm9ycGhhbl9xbGVuID0gMCwgXAotCS5mcXNsb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoJm5hbWUuZnFzbG9jayksIFwKKwkuZnFzbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCgmbmFtZS5mcXNsb2NrKSwgXAogCS5uX2ZvcmNlX3FzID0gMCwgXAogCS5uX2ZvcmNlX3FzX25ncCA9IDAsIFwKIH0KQEAgLTgxLDkgKzgwLDYgQEAKIHN0cnVjdCByY3Vfc3RhdGUgcmN1X2JoX3N0YXRlID0gUkNVX1NUQVRFX0lOSVRJQUxJWkVSKHJjdV9iaF9zdGF0ZSk7CiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9iaF9kYXRhKTsKIAotc3RhdGljIGludCByY3Vfc2NoZWR1bGVyX2FjdGl2ZSBfX3JlYWRfbW9zdGx5OwotCi0KIC8qCiAgKiBSZXR1cm4gdHJ1ZSBpZiBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGlzIGluIHByb2dyZXNzLiAgVGhlIEFDQ0VTU19PTkNFKClzCiAgKiBwZXJtaXQgdGhpcyBmdW5jdGlvbiB0byBiZSBpbnZva2VkIHdpdGhvdXQgaG9sZGluZyB0aGUgcm9vdCByY3Vfbm9kZQpAQCAtMTU3LDYgKzE1MywyNCBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhdGNoZXNfY29tcGxldGVkX2JoKTsKIAogLyoKKyAqIEZvcmNlIGEgcXVpZXNjZW50IHN0YXRlIGZvciBSQ1UgQkguCisgKi8KK3ZvaWQgcmN1X2JoX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKQoreworCWZvcmNlX3F1aWVzY2VudF9zdGF0ZSgmcmN1X2JoX3N0YXRlLCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iaF9mb3JjZV9xdWllc2NlbnRfc3RhdGUpOworCisvKgorICogRm9yY2UgYSBxdWllc2NlbnQgc3RhdGUgZm9yIFJDVS1zY2hlZC4KKyAqLwordm9pZCByY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7CisJZm9yY2VfcXVpZXNjZW50X3N0YXRlKCZyY3Vfc2NoZWRfc3RhdGUsIDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X3NjaGVkX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSk7CisKKy8qCiAgKiBEb2VzIHRoZSBDUFUgaGF2ZSBjYWxsYmFja3MgcmVhZHkgdG8gYmUgaW52b2tlZD8KICAqLwogc3RhdGljIGludApAQCAtNDM5LDEwICs0NTMsMTAgQEAKIAogCS8qIE9ubHkgbGV0IG9uZSBDUFUgY29tcGxhaW4gYWJvdXQgb3RoZXJzIHBlciB0aW1lIGludGVydmFsLiAqLwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJZGVsdGEgPSBqaWZmaWVzIC0gcnNwLT5qaWZmaWVzX3N0YWxsOwogCWlmIChkZWx0YSA8IFJDVV9TVEFMTF9SQVRfREVMQVkgfHwgIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAJcnNwLT5qaWZmaWVzX3N0YWxsID0gamlmZmllcyArIFJDVV9TRUNPTkRTX1RJTExfU1RBTExfUkVDSEVDSzsKQEAgLTQ1MiwxMyArNDY2LDE1IEBACiAJICogZHVlIHRvIENQVSBvZmZsaW5pbmcuCiAJICovCiAJcmN1X3ByaW50X3Rhc2tfc3RhbGwocm5wKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBPSywgdGltZSB0byByYXQgb24gb3VyIGJ1ZGR5Li4uICovCiAKIAlwcmludGsoS0VSTl9FUlIgIklORk86IFJDVSBkZXRlY3RlZCBDUFUgc3RhbGxzOiIpOwogCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUocnNwLCBybnApIHsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJcmN1X3ByaW50X3Rhc2tfc3RhbGwocm5wKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlpZiAocm5wLT5xc21hc2sgPT0gMCkKIAkJCWNvbnRpbnVlOwogCQlmb3IgKGNwdSA9IDA7IGNwdSA8PSBybnAtPmdycGhpIC0gcm5wLT5ncnBsbzsgY3B1KyspCkBAIC00NjksNiArNDg1LDEwIEBACiAJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgKGxvbmcpKGppZmZpZXMgLSByc3AtPmdwX3N0YXJ0KSk7CiAJdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSgpOwogCisJLyogSWYgc28gY29uZmlndXJlZCwgY29tcGxhaW4gYWJvdXQgdGFza3MgYmxvY2tpbmcgdGhlIGdyYWNlIHBlcmlvZC4gKi8KKworCXJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbChyc3ApOworCiAJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJzcCwgMCk7ICAvKiBLaWNrIHRoZW0gYWxsLiAqLwogfQogCkBAIC00ODEsMTEgKzUwMSwxMSBAQAogCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBqaWZmaWVzIC0gcnNwLT5ncF9zdGFydCk7CiAJdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSgpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwotCWlmICgobG9uZykoamlmZmllcyAtIHJzcC0+amlmZmllc19zdGFsbCkgPj0gMCkKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCWlmIChVTE9OR19DTVBfR0UoamlmZmllcywgcnNwLT5qaWZmaWVzX3N0YWxsKSkKIAkJcnNwLT5qaWZmaWVzX3N0YWxsID0KIAkJCWppZmZpZXMgKyBSQ1VfU0VDT05EU19USUxMX1NUQUxMX1JFQ0hFQ0s7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCiAJc2V0X25lZWRfcmVzY2hlZCgpOyAgLyoga2ljayBvdXJzZWx2ZXMgdG8gZ2V0IHRoaW5ncyBnb2luZy4gKi8KIH0KQEAgLTU0NSwxMiArNTY1LDEyIEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXJucCA9IHJkcC0+bXlub2RlOwogCWlmIChyZHAtPmdwbnVtID09IEFDQ0VTU19PTkNFKHJucC0+Z3BudW0pIHx8IC8qIG91dHNpZGUgbG9jay4gKi8KLQkgICAgIXNwaW5fdHJ5bG9jaygmcm5wLT5sb2NrKSkgeyAvKiBpcnFzIGFscmVhZHkgb2ZmLCByZXRyeSBsYXRlci4gKi8KKwkgICAgIXJhd19zcGluX3RyeWxvY2soJnJucC0+bG9jaykpIHsgLyogaXJxcyBhbHJlYWR5IG9mZiwgc28gbGF0ZXIuICovCiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAlfX25vdGVfbmV3X2dwbnVtKHJzcCwgcm5wLCByZHApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTYwOSwxMiArNjI5LDEyIEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXJucCA9IHJkcC0+bXlub2RlOwogCWlmIChyZHAtPmNvbXBsZXRlZCA9PSBBQ0NFU1NfT05DRShybnAtPmNvbXBsZXRlZCkgfHwgLyogb3V0c2lkZSBsb2NrLiAqLwotCSAgICAhc3Bpbl90cnlsb2NrKCZybnAtPmxvY2spKSB7IC8qIGlycXMgYWxyZWFkeSBvZmYsIHJldHJ5IGxhdGVyLiAqLworCSAgICAhcmF3X3NwaW5fdHJ5bG9jaygmcm5wLT5sb2NrKSkgeyAvKiBpcnFzIGFscmVhZHkgb2ZmLCBzbyBsYXRlci4gKi8KIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCV9fcmN1X3Byb2Nlc3NfZ3BfZW5kKHJzcCwgcm5wLCByZHApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTY1OSwxMiArNjc5LDE0IEBACiAJc3RydWN0IHJjdV9kYXRhICpyZHAgPSByc3AtPnJkYVtzbXBfcHJvY2Vzc29yX2lkKCldOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7CiAKLQlpZiAoIWNwdV9uZWVkc19hbm90aGVyX2dwKHJzcCwgcmRwKSkgeworCWlmICghY3B1X25lZWRzX2Fub3RoZXJfZ3AocnNwLCByZHApIHx8IHJzcC0+ZnFzX2FjdGl2ZSkgeworCQlpZiAoY3B1X25lZWRzX2Fub3RoZXJfZ3AocnNwLCByZHApKQorCQkJcnNwLT5mcXNfbmVlZF9ncCA9IDE7CiAJCWlmIChybnAtPmNvbXBsZXRlZCA9PSByc3AtPmNvbXBsZXRlZCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CSAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAKIAkJLyoKIAkJICogUHJvcGFnYXRlIG5ldyAtPmNvbXBsZXRlZCB2YWx1ZSB0byByY3Vfbm9kZSBzdHJ1Y3R1cmVzCkBAIC02NzIsOSArNjk0LDkgQEAKIAkJICogb2YgdGhlIG5leHQgZ3JhY2UgcGVyaW9kIHRvIHByb2Nlc3MgdGhlaXIgY2FsbGJhY2tzLgogCQkgKi8KIAkJcmN1X2Zvcl9lYWNoX25vZGVfYnJlYWR0aF9maXJzdChyc3AsIHJucCkgewotCQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQkJcm5wLT5jb21wbGV0ZWQgPSByc3AtPmNvbXBsZXRlZDsKLQkJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwkJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCX0KIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlyZXR1cm47CkBAIC02OTUsMTUgKzcxNywxNSBAQAogCQlybnAtPmNvbXBsZXRlZCA9IHJzcC0+Y29tcGxldGVkOwogCQlyc3AtPnNpZ25hbGVkID0gUkNVX1NJR05BTF9JTklUOyAvKiBmb3JjZV9xdWllc2NlbnRfc3RhdGUgT0suICovCiAJCXJjdV9zdGFydF9ncF9wZXJfY3B1KHJzcCwgcm5wLCByZHApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCi0Jc3Bpbl91bmxvY2soJnJucC0+bG9jayk7ICAvKiBsZWF2ZSBpcnFzIGRpc2FibGVkLiAqLworCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGxlYXZlIGlycXMgZGlzYWJsZWQuICovCiAKIAogCS8qIEV4Y2x1ZGUgYW55IGNvbmN1cnJlbnQgQ1BVLWhvdHBsdWcgb3BlcmF0aW9ucy4gKi8KLQlzcGluX2xvY2soJnJzcC0+b25vZmZsb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl9sb2NrKCZyc3AtPm9ub2ZmbG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAKIAkvKgogCSAqIFNldCB0aGUgcXVpZXNjZW50LXN0YXRlLW5lZWRlZCBiaXRzIGluIGFsbCB0aGUgcmN1X25vZGUKQEAgLTcyMywyMSArNzQ1LDIxIEBACiAJICogaXJxcyBkaXNhYmxlZC4KIAkgKi8KIAlyY3VfZm9yX2VhY2hfbm9kZV9icmVhZHRoX2ZpcnN0KHJzcCwgcm5wKSB7Ci0JCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsJCS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQlyY3VfcHJlZW1wdF9jaGVja19ibG9ja2VkX3Rhc2tzKHJucCk7CiAJCXJucC0+cXNtYXNrID0gcm5wLT5xc21hc2tpbml0OwogCQlybnAtPmdwbnVtID0gcnNwLT5ncG51bTsKIAkJcm5wLT5jb21wbGV0ZWQgPSByc3AtPmNvbXBsZXRlZDsKIAkJaWYgKHJucCA9PSByZHAtPm15bm9kZSkKIAkJCXJjdV9zdGFydF9ncF9wZXJfY3B1KHJzcCwgcm5wLCByZHApOwotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJfQogCiAJcm5wID0gcmN1X2dldF9yb290KHJzcCk7Ci0Jc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkJCS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCXJzcC0+c2lnbmFsZWQgPSBSQ1VfU0lHTkFMX0lOSVQ7IC8qIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSBub3cgT0suICovCi0Jc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsJCS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtNzc2LDE0ICs3OTgsMTQgQEAKIAkJaWYgKCEocm5wLT5xc21hc2sgJiBtYXNrKSkgewogCiAJCQkvKiBPdXIgYml0IGhhcyBhbHJlYWR5IGJlZW4gY2xlYXJlZCwgc28gZG9uZS4gKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CiAJCXJucC0+cXNtYXNrICY9IH5tYXNrOwogCQlpZiAocm5wLT5xc21hc2sgIT0gMCB8fCByY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSkgewogCiAJCQkvKiBPdGhlciBiaXRzIHN0aWxsIHNldCBhdCB0aGlzIGxldmVsLCBzbyBkb25lLiAqLwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJbWFzayA9IHJucC0+Z3JwbWFzazsKQEAgLTc5MywxMCArODE1LDEwIEBACiAKIAkJCWJyZWFrOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXJucF9jID0gcm5wOwogCQlybnAgPSBybnAtPnBhcmVudDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlXQVJOX09OX09OQ0Uocm5wX2MtPnFzbWFzayk7CiAJfQogCkBAIC04MjUsNyArODQ3LDcgQEAKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAogCXJucCA9IHJkcC0+bXlub2RlOwotCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCWlmIChsYXN0Y29tcCAhPSBybnAtPmNvbXBsZXRlZCkgewogCiAJCS8qCkBAIC04MzcsMTIgKzg1OSwxMiBAQAogCQkgKiByYWNlIG9jY3VycmVkLgogCQkgKi8KIAkJcmRwLT5wYXNzZWRfcXVpZXNjID0gMDsJLyogdHJ5IGFnYWluIGxhdGVyISAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCW1hc2sgPSByZHAtPmdycG1hc2s7CiAJaWYgKChybnAtPnFzbWFzayAmIG1hc2spID09IDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UgewogCQlyZHAtPnFzX3BlbmRpbmcgPSAwOwogCkBAIC05MDYsNyArOTI4LDcgQEAKIAogCWlmIChyZHAtPm54dGxpc3QgPT0gTlVMTCkKIAkJcmV0dXJuOyAgLyogaXJxcyBkaXNhYmxlZCwgc28gY29tcGFyaXNvbiBpcyBzdGFibGUuICovCi0Jc3Bpbl9sb2NrKCZyc3AtPm9ub2ZmbG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJcmF3X3NwaW5fbG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCSpyc3AtPm9ycGhhbl9jYnNfdGFpbCA9IHJkcC0+bnh0bGlzdDsKIAlyc3AtPm9ycGhhbl9jYnNfdGFpbCA9IHJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXTsKIAlyZHAtPm54dGxpc3QgPSBOVUxMOwpAQCAtOTE0LDcgKzkzNiw3IEBACiAJCXJkcC0+bnh0dGFpbFtpXSA9ICZyZHAtPm54dGxpc3Q7CiAJcnNwLT5vcnBoYW5fcWxlbiArPSByZHAtPnFsZW47CiAJcmRwLT5xbGVuID0gMDsKLQlzcGluX3VubG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJcmF3X3NwaW5fdW5sb2NrKCZyc3AtPm9ub2ZmbG9jayk7ICAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIH0KIAogLyoKQEAgLTkyNSwxMCArOTQ3LDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIAlyZHAgPSByc3AtPnJkYVtzbXBfcHJvY2Vzc29yX2lkKCldOwogCWlmIChyc3AtPm9ycGhhbl9jYnNfbGlzdCA9PSBOVUxMKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCSpyZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF0gPSByc3AtPm9ycGhhbl9jYnNfbGlzdDsKQEAgLTkzNyw3ICs5NTksNyBAQAogCXJzcC0+b3JwaGFuX2Nic19saXN0ID0gTlVMTDsKIAlyc3AtPm9ycGhhbl9jYnNfdGFpbCA9ICZyc3AtPm9ycGhhbl9jYnNfbGlzdDsKIAlyc3AtPm9ycGhhbl9xbGVuID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtOTUzLDIzICs5NzUsMjMgQEAKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAogCS8qIEV4Y2x1ZGUgYW55IGF0dGVtcHRzIHRvIHN0YXJ0IGEgbmV3IGdyYWNlIHBlcmlvZC4gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiAKIAkvKiBSZW1vdmUgdGhlIG91dGdvaW5nIENQVSBmcm9tIHRoZSBtYXNrcyBpbiB0aGUgcmN1X25vZGUgaGllcmFyY2h5LiAqLwogCXJucCA9IHJkcC0+bXlub2RlOwkvKiB0aGlzIGlzIHRoZSBvdXRnb2luZyBDUFUncyBybnAuICovCiAJbWFzayA9IHJkcC0+Z3JwbWFzazsJLyogcm5wLT5ncnBsbyBpcyBjb25zdGFudC4gKi8KIAlkbyB7Ci0JCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsJCS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQlybnAtPnFzbWFza2luaXQgJj0gfm1hc2s7CiAJCWlmIChybnAtPnFzbWFza2luaXQgIT0gMCkgewogCQkJaWYgKHJucCAhPSByZHAtPm15bm9kZSkKLQkJCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJCQkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAkJCWJyZWFrOwogCQl9CiAJCWlmIChybnAgPT0gcmRwLT5teW5vZGUpCiAJCQluZWVkX3JlcG9ydCA9IHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3MocnNwLCBybnAsIHJkcCk7CiAJCWVsc2UKLQkJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwkJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCW1hc2sgPSBybnAtPmdycG1hc2s7CiAJCXJucCA9IHJucC0+cGFyZW50OwogCX0gd2hpbGUgKHJucCAhPSBOVUxMKTsKQEAgLTk4MCwxMiArMTAwMiwxMiBAQAogCSAqIGJlY2F1c2UgaW52b2tpbmcgcmN1X3JlcG9ydF91bmJsb2NrX3FzX3JucCgpIHdpdGggLT5vbm9mZmxvY2sKIAkgKiBoZWxkIGxlYWRzIHRvIGRlYWRsb2NrLgogCSAqLwotCXNwaW5fdW5sb2NrKCZyc3AtPm9ub2ZmbG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCXJhd19zcGluX3VubG9jaygmcnNwLT5vbm9mZmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAlybnAgPSByZHAtPm15bm9kZTsKIAlpZiAobmVlZF9yZXBvcnQgJiBSQ1VfT0ZMX1RBU0tTX05PUk1fR1ApCiAJCXJjdV9yZXBvcnRfdW5ibG9ja19xc19ybnAocm5wLCBmbGFncyk7CiAJZWxzZQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCWlmIChuZWVkX3JlcG9ydCAmIFJDVV9PRkxfVEFTS1NfRVhQX0dQKQogCQlyY3VfcmVwb3J0X2V4cF9ybnAocnNwLCBybnApOwogCkBAIC0xMTQ0LDExICsxMTY2LDkgQEAKIC8qCiAgKiBTY2FuIHRoZSBsZWFmIHJjdV9ub2RlIHN0cnVjdHVyZXMsIHByb2Nlc3NpbmcgZHludGljayBzdGF0ZSBmb3IgYW55IHRoYXQKICAqIGhhdmUgbm90IHlldCBlbmNvdW50ZXJlZCBhIHF1aWVzY2VudCBzdGF0ZSwgdXNpbmcgdGhlIGZ1bmN0aW9uIHNwZWNpZmllZC4KLSAqIFJldHVybnMgMSBpZiB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QgZW5kcyB3aGlsZSBzY2FubmluZyAocG9zc2libHkKLSAqIGJlY2F1c2Ugd2UgbWFkZSBpdCBlbmQpLgorICogVGhlIGNhbGxlciBtdXN0IGhhdmUgc3VwcHJlc3NlZCBzdGFydCBvZiBuZXcgZ3JhY2UgcGVyaW9kcy4KICAqLwotc3RhdGljIGludCByY3VfcHJvY2Vzc19keW50aWNrKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgbG9uZyBsYXN0Y29tcCwKLQkJCSAgICAgICBpbnQgKCpmKShzdHJ1Y3QgcmN1X2RhdGEgKikpCitzdGF0aWMgdm9pZCBmb3JjZV9xc19ybnAoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBpbnQgKCpmKShzdHJ1Y3QgcmN1X2RhdGEgKikpCiB7CiAJdW5zaWduZWQgbG9uZyBiaXQ7CiAJaW50IGNwdTsKQEAgLTExNTgsMTMgKzExNzgsMTMgQEAKIAogCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUocnNwLCBybnApIHsKIAkJbWFzayA9IDA7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKHJucC0+Y29tcGxldGVkICE9IGxhc3Rjb21wKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQkJCXJldHVybiAxOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlpZiAoIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKSB7CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm47CiAJCX0KIAkJaWYgKHJucC0+cXNtYXNrID09IDApIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQkJY29udGludWU7CiAJCX0KIAkJY3B1ID0gcm5wLT5ncnBsbzsKQEAgLTExNzMsMTUgKzExOTMsMTQgQEAKIAkJCWlmICgocm5wLT5xc21hc2sgJiBiaXQpICE9IDAgJiYgZihyc3AtPnJkYVtjcHVdKSkKIAkJCQltYXNrIHw9IGJpdDsKIAkJfQotCQlpZiAobWFzayAhPSAwICYmIHJucC0+Y29tcGxldGVkID09IGxhc3Rjb21wKSB7CisJCWlmIChtYXNrICE9IDApIHsKIAogCQkJLyogcmN1X3JlcG9ydF9xc19ybnAoKSByZWxlYXNlcyBybnAtPmxvY2suICovCiAJCQlyY3VfcmVwb3J0X3FzX3JucChtYXNrLCByc3AsIHJucCwgZmxhZ3MpOwogCQkJY29udGludWU7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAl9Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xMTkxLDMyICsxMjEwLDI2IEBACiBzdGF0aWMgdm9pZCBmb3JjZV9xdWllc2NlbnRfc3RhdGUoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBpbnQgcmVsYXhlZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgbGFzdGNvbXA7CiAJc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKLQl1OCBzaWduYWxlZDsKLQl1OCBmb3JjZW5vdzsKIAogCWlmICghcmN1X2dwX2luX3Byb2dyZXNzKHJzcCkpCiAJCXJldHVybjsgIC8qIE5vIGdyYWNlIHBlcmlvZCBpbiBwcm9ncmVzcywgbm90aGluZyB0byBmb3JjZS4gKi8KLQlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZyc3AtPmZxc2xvY2ssIGZsYWdzKSkgeworCWlmICghcmF3X3NwaW5fdHJ5bG9ja19pcnFzYXZlKCZyc3AtPmZxc2xvY2ssIGZsYWdzKSkgewogCQlyc3AtPm5fZm9yY2VfcXNfbGgrKzsgLyogSW5leGFjdCwgY2FuIGxvc2UgY291bnRzLiAgVG91Z2ghICovCiAJCXJldHVybjsJLyogU29tZW9uZSBlbHNlIGlzIGFscmVhZHkgb24gdGhlIGpvYi4gKi8KIAl9Ci0JaWYgKHJlbGF4ZWQgJiYKLQkgICAgKGxvbmcpKHJzcC0+amlmZmllc19mb3JjZV9xcyAtIGppZmZpZXMpID49IDApCi0JCWdvdG8gdW5sb2NrX3JldDsgLyogbm8gZW1lcmdlbmN5IGFuZCBkb25lIHJlY2VudGx5LiAqLworCWlmIChyZWxheGVkICYmIFVMT05HX0NNUF9HRShyc3AtPmppZmZpZXNfZm9yY2VfcXMsIGppZmZpZXMpKQorCQlnb3RvIHVubG9ja19mcXNfcmV0OyAvKiBubyBlbWVyZ2VuY3kgYW5kIGRvbmUgcmVjZW50bHkuICovCiAJcnNwLT5uX2ZvcmNlX3FzKys7Ci0Jc3Bpbl9sb2NrKCZybnAtPmxvY2spOwotCWxhc3Rjb21wID0gcnNwLT5ncG51bSAtIDE7Ci0Jc2lnbmFsZWQgPSByc3AtPnNpZ25hbGVkOworCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KIAlyc3AtPmppZmZpZXNfZm9yY2VfcXMgPSBqaWZmaWVzICsgUkNVX0pJRkZJRVNfVElMTF9GT1JDRV9RUzsKIAlpZighcmN1X2dwX2luX3Byb2dyZXNzKHJzcCkpIHsKIAkJcnNwLT5uX2ZvcmNlX3FzX25ncCsrOwotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsKLQkJZ290byB1bmxvY2tfcmV0OyAgLyogbm8gR1AgaW4gcHJvZ3Jlc3MsIHRpbWUgdXBkYXRlZC4gKi8KKwkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KKwkJZ290byB1bmxvY2tfZnFzX3JldDsgIC8qIG5vIEdQIGluIHByb2dyZXNzLCB0aW1lIHVwZGF0ZWQuICovCiAJfQotCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwotCXN3aXRjaCAoc2lnbmFsZWQpIHsKKwlyc3AtPmZxc19hY3RpdmUgPSAxOworCXN3aXRjaCAocnNwLT5zaWduYWxlZCkgewogCWNhc2UgUkNVX0dQX0lETEU6CiAJY2FzZSBSQ1VfR1BfSU5JVDoKIApAQCAtMTIyNCw0NSArMTIzNywzOCBAQAogCiAJY2FzZSBSQ1VfU0FWRV9EWU5USUNLOgogCisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCiAJCWlmIChSQ1VfU0lHTkFMX0lOSVQgIT0gUkNVX1NBVkVfRFlOVElDSykKIAkJCWJyZWFrOyAvKiBTbyBnY2MgcmVjb2duaXplcyB0aGUgZGVhZCBjb2RlLiAqLwogCiAJCS8qIFJlY29yZCBkeW50aWNrLWlkbGUgc3RhdGUuICovCi0JCWlmIChyY3VfcHJvY2Vzc19keW50aWNrKHJzcCwgbGFzdGNvbXAsCi0JCQkJCWR5bnRpY2tfc2F2ZV9wcm9ncmVzc19jb3VudGVyKSkKLQkJCWdvdG8gdW5sb2NrX3JldDsKLQkJLyogZmFsbCBpbnRvIG5leHQgY2FzZS4gKi8KLQotCWNhc2UgUkNVX1NBVkVfQ09NUExFVEVEOgotCi0JCS8qIFVwZGF0ZSBzdGF0ZSwgcmVjb3JkIGNvbXBsZXRpb24gY291bnRlci4gKi8KLQkJZm9yY2Vub3cgPSAwOwotCQlzcGluX2xvY2soJnJucC0+bG9jayk7Ci0JCWlmIChsYXN0Y29tcCArIDEgPT0gcnNwLT5ncG51bSAmJgotCQkgICAgbGFzdGNvbXAgPT0gcnNwLT5jb21wbGV0ZWQgJiYKLQkJICAgIHJzcC0+c2lnbmFsZWQgPT0gc2lnbmFsZWQpIHsKKwkJZm9yY2VfcXNfcm5wKHJzcCwgZHludGlja19zYXZlX3Byb2dyZXNzX2NvdW50ZXIpOworCQlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCisJCWlmIChyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSkKIAkJCXJzcC0+c2lnbmFsZWQgPSBSQ1VfRk9SQ0VfUVM7Ci0JCQlyc3AtPmNvbXBsZXRlZF9mcXMgPSBsYXN0Y29tcDsKLQkJCWZvcmNlbm93ID0gc2lnbmFsZWQgPT0gUkNVX1NBVkVfQ09NUExFVEVEOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwotCQlpZiAoIWZvcmNlbm93KQotCQkJYnJlYWs7Ci0JCS8qIGZhbGwgaW50byBuZXh0IGNhc2UuICovCisJCWJyZWFrOwogCiAJY2FzZSBSQ1VfRk9SQ0VfUVM6CiAKIAkJLyogQ2hlY2sgZHludGljay1pZGxlIHN0YXRlLCBzZW5kIElQSSB0byBsYWdnYXJ0cy4gKi8KLQkJaWYgKHJjdV9wcm9jZXNzX2R5bnRpY2socnNwLCByc3AtPmNvbXBsZXRlZF9mcXMsCi0JCQkJCXJjdV9pbXBsaWNpdF9keW50aWNrc19xcykpCi0JCQlnb3RvIHVubG9ja19yZXQ7CisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCisJCWZvcmNlX3FzX3JucChyc3AsIHJjdV9pbXBsaWNpdF9keW50aWNrc19xcyk7CiAKIAkJLyogTGVhdmUgc3RhdGUgaW4gY2FzZSBtb3JlIGZvcmNpbmcgaXMgcmVxdWlyZWQuICovCiAKKwkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLwogCQlicmVhazsKIAl9Ci11bmxvY2tfcmV0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+ZnFzbG9jaywgZmxhZ3MpOworCXJzcC0+ZnFzX2FjdGl2ZSA9IDA7CisJaWYgKHJzcC0+ZnFzX25lZWRfZ3ApIHsKKwkJcmF3X3NwaW5fdW5sb2NrKCZyc3AtPmZxc2xvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLworCQlyc3AtPmZxc19uZWVkX2dwID0gMDsKKwkJcmN1X3N0YXJ0X2dwKHJzcCwgZmxhZ3MpOyAvKiByZWxlYXNlcyBybnAtPmxvY2sgKi8KKwkJcmV0dXJuOworCX0KKwlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLwordW5sb2NrX2Zxc19yZXQ6CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+ZnFzbG9jaywgZmxhZ3MpOwogfQogCiAjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1NNUCAqLwpAQCAtMTI5MCw3ICsxMjk2LDcgQEAKIAkgKiBJZiBhbiBSQ1UgR1AgaGFzIGdvbmUgbG9uZyBlbm91Z2gsIGdvIGNoZWNrIGZvciBkeW50aWNrCiAJICogaWRsZSBDUFVzIGFuZCwgaWYgbmVlZGVkLCBzZW5kIHJlc2NoZWQgSVBJcy4KIAkgKi8KLQlpZiAoKGxvbmcpKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcykgLSBqaWZmaWVzKSA8IDApCisJaWYgKFVMT05HX0NNUF9MVChBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfZm9yY2VfcXMpLCBqaWZmaWVzKSkKIAkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJzcCwgMSk7CiAKIAkvKgpAQCAtMTMwNCw3ICsxMzEwLDcgQEAKIAogCS8qIERvZXMgdGhpcyBDUFUgcmVxdWlyZSBhIG5vdC15ZXQtc3RhcnRlZCBncmFjZSBwZXJpb2Q/ICovCiAJaWYgKGNwdV9uZWVkc19hbm90aGVyX2dwKHJzcCwgcmRwKSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcmN1X2dldF9yb290KHJzcCktPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZyY3VfZ2V0X3Jvb3QocnNwKS0+bG9jaywgZmxhZ3MpOwogCQlyY3Vfc3RhcnRfZ3AocnNwLCBmbGFncyk7ICAvKiByZWxlYXNlcyBhYm92ZSBsb2NrICovCiAJfQogCkBAIC0xMzM1LDYgKzEzNDEsOSBAQAogCSAqIGdyYWNlLXBlcmlvZCBtYW5pcHVsYXRpb25zIGFib3ZlLgogCSAqLwogCXNtcF9tYigpOyAvKiBTZWUgYWJvdmUgYmxvY2sgY29tbWVudC4gKi8KKworCS8qIElmIHdlIGFyZSBsYXN0IENQVSBvbiB3YXkgdG8gZHludGljay1pZGxlIG1vZGUsIGFjY2VsZXJhdGUgaXQuICovCisJcmN1X25lZWRzX2NwdV9mbHVzaCgpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTM2OSw3ICsxMzc4LDcgQEAKIAkJdW5zaWduZWQgbG9uZyBuZXN0ZmxhZzsKIAkJc3RydWN0IHJjdV9ub2RlICpybnBfcm9vdCA9IHJjdV9nZXRfcm9vdChyc3ApOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZybnBfcm9vdC0+bG9jaywgbmVzdGZsYWcpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucF9yb290LT5sb2NrLCBuZXN0ZmxhZyk7CiAJCXJjdV9zdGFydF9ncChyc3AsIG5lc3RmbGFnKTsgIC8qIHJlbGVhc2VzIHJucF9yb290LT5sb2NrLiAqLwogCX0KIApAQCAtMTM4Nyw3ICsxMzk2LDcgQEAKIAkJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDApOwogCQlyZHAtPm5fZm9yY2VfcXNfc25hcCA9IHJzcC0+bl9mb3JjZV9xczsKIAkJcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrID0gcmRwLT5xbGVuOwotCX0gZWxzZSBpZiAoKGxvbmcpKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcykgLSBqaWZmaWVzKSA8IDApCisJfSBlbHNlIGlmIChVTE9OR19DTVBfTFQoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSwgamlmZmllcykpCiAJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDEpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KQEAgLTE1MjAsNyArMTUyOSw3IEBACiAKIAkvKiBIYXMgYW4gUkNVIEdQIGdvbmUgbG9uZyBlbm91Z2ggdG8gc2VuZCByZXNjaGVkIElQSXMgJmM/ICovCiAJaWYgKHJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApICYmCi0JICAgICgobG9uZykoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSAtIGppZmZpZXMpIDwgMCkpIHsKKwkgICAgVUxPTkdfQ01QX0xUKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcyksIGppZmZpZXMpKSB7CiAJCXJkcC0+bl9ycF9uZWVkX2ZxcysrOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0xNTQ1LDEwICsxNTU0LDkgQEAKIC8qCiAgKiBDaGVjayB0byBzZWUgaWYgYW55IGZ1dHVyZSBSQ1UtcmVsYXRlZCB3b3JrIHdpbGwgbmVlZCB0byBiZSBkb25lCiAgKiBieSB0aGUgY3VycmVudCBDUFUsIGV2ZW4gaWYgbm9uZSBuZWVkIGJlIGRvbmUgaW1tZWRpYXRlbHksIHJldHVybmluZwotICogMSBpZiBzby4gIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgUkNVIGltcGxlbWVudGF0aW9uOyBpdCBpcyAtbm90LQotICogYW4gZXhwb3J0ZWQgbWVtYmVyIG9mIHRoZSBSQ1UgQVBJLgorICogMSBpZiBzby4KICAqLwotaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSkKK3N0YXRpYyBpbnQgcmN1X25lZWRzX2NwdV9xdWlja19jaGVjayhpbnQgY3B1KQogewogCS8qIFJDVSBjYWxsYmFja3MgZWl0aGVyIHJlYWR5IG9yIHBlbmRpbmc/ICovCiAJcmV0dXJuIHBlcl9jcHUocmN1X3NjaGVkX2RhdGEsIGNwdSkubnh0bGlzdCB8fApAQCAtMTU1NiwyMSArMTU2NCw2IEBACiAJICAgICAgIHJjdV9wcmVlbXB0X25lZWRzX2NwdShjcHUpOwogfQogCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgc2NoZWR1bGVyJ3MgaW5pdGlhbGl6YXRpb24KLSAqIHByb2Nlc3MuICBCZWZvcmUgdGhpcyBpcyBjYWxsZWQsIHRoZSBpZGxlIHRhc2sgbWlnaHQgY29udGFpbgotICogUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyAoZHVyaW5nIHdoaWNoIHRpbWUsIHRoaXMgaWRsZQotICogdGFzayBpcyBib290aW5nIHRoZSBzeXN0ZW0pLiAgQWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZQotICogaWRsZSB0YXNrcyBhcmUgcHJvaGliaXRlZCBmcm9tIGNvbnRhaW5pbmcgUkNVIHJlYWQtc2lkZSBjcml0aWNhbAotICogc2VjdGlvbnMuCi0gKi8KLXZvaWQgcmN1X3NjaGVkdWxlcl9zdGFydGluZyh2b2lkKQotewotCVdBUk5fT04obnVtX29ubGluZV9jcHVzKCkgIT0gMSk7Ci0JV0FSTl9PTihucl9jb250ZXh0X3N3aXRjaGVzKCkgPiAwKTsKLQlyY3Vfc2NoZWR1bGVyX2FjdGl2ZSA9IDE7Ci19Ci0KIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2hlYWQsIHJjdV9iYXJyaWVyX2hlYWQpID0ge05VTEx9Owogc3RhdGljIGF0b21pY190IHJjdV9iYXJyaWVyX2NwdV9jb3VudDsKIHN0YXRpYyBERUZJTkVfTVVURVgocmN1X2JhcnJpZXJfbXV0ZXgpOwpAQCAtMTY1OSw3ICsxNjUyLDcgQEAKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwogCiAJLyogU2V0IHVwIGxvY2FsIHN0YXRlLCBlbnN1cmluZyBjb25zaXN0ZW50IHZpZXcgb2YgZ2xvYmFsIHN0YXRlLiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCXJkcC0+Z3JwbWFzayA9IDFVTCA8PCAoY3B1IC0gcmRwLT5teW5vZGUtPmdycGxvKTsKIAlyZHAtPm54dGxpc3QgPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCBSQ1VfTkVYVF9TSVpFOyBpKyspCkBAIC0xNjY5LDcgKzE2NjIsNyBAQAogCXJkcC0+ZHludGlja3MgPSAmcGVyX2NwdShyY3VfZHludGlja3MsIGNwdSk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLwogCXJkcC0+Y3B1ID0gY3B1OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTE2ODcsNyArMTY4MCw3IEBACiAJc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKIAogCS8qIFNldCB1cCBsb2NhbCBzdGF0ZSwgZW5zdXJpbmcgY29uc2lzdGVudCB2aWV3IG9mIGdsb2JhbCBzdGF0ZS4gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlyZHAtPnBhc3NlZF9xdWllc2MgPSAwOyAgLyogV2UgY291bGQgYmUgcmFjaW5nIHdpdGggbmV3IEdQLCAqLwogCXJkcC0+cXNfcGVuZGluZyA9IDE7CSAvKiAgc28gc2V0IHVwIHRvIHJlc3BvbmQgdG8gY3VycmVudCBHUC4gKi8KIAlyZHAtPmJlZW5vbmxpbmUgPSAxOwkgLyogV2UgaGF2ZSBub3cgYmVlbiBvbmxpbmUuICovCkBAIC0xNjk1LDcgKzE2ODgsNyBAQAogCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IDA7CiAJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7CiAJcmRwLT5ibGltaXQgPSBibGltaXQ7Ci0Jc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAogCS8qCiAJICogQSBuZXcgZ3JhY2UgcGVyaW9kIG1pZ2h0IHN0YXJ0IGhlcmUuICBJZiBzbywgd2Ugd29uJ3QgYmUgcGFydApAQCAtMTcwMywxNCArMTY5NiwxNCBAQAogCSAqLwogCiAJLyogRXhjbHVkZSBhbnkgYXR0ZW1wdHMgdG8gc3RhcnQgYSBuZXcgR1Agb24gbGFyZ2Ugc3lzdGVtcy4gKi8KLQlzcGluX2xvY2soJnJzcC0+b25vZmZsb2NrKTsJCS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl9sb2NrKCZyc3AtPm9ub2ZmbG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAKIAkvKiBBZGQgQ1BVIHRvIHJjdV9ub2RlIGJpdG1hc2tzLiAqLwogCXJucCA9IHJkcC0+bXlub2RlOwogCW1hc2sgPSByZHAtPmdycG1hc2s7CiAJZG8gewogCQkvKiBFeGNsdWRlIGFueSBhdHRlbXB0cyB0byBzdGFydCBhIG5ldyBHUCBvbiBzbWFsbCBzeXN0ZW1zLiAqLwotCQlzcGluX2xvY2soJnJucC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQlybnAtPnFzbWFza2luaXQgfD0gbWFzazsKIAkJbWFzayA9IHJucC0+Z3JwbWFzazsKIAkJaWYgKHJucCA9PSByZHAtPm15bm9kZSkgewpAQCAtMTcxOCwxMSArMTcxMSwxMSBAQAogCQkJcmRwLT5jb21wbGV0ZWQgPSBybnAtPmNvbXBsZXRlZDsKIAkJCXJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQgPSBybnAtPmNvbXBsZXRlZCAtIDE7CiAJCX0KLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCXJucCA9IHJucC0+cGFyZW50OwogCX0gd2hpbGUgKHJucCAhPSBOVUxMICYmICEocm5wLT5xc21hc2tpbml0ICYgbWFzaykpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV9vbmxpbmVfY3B1KGludCBjcHUpCkBAIC0xODA2LDExICsxNzk5LDE3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCByY3VfaW5pdF9vbmUoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQogeworCXN0YXRpYyBjaGFyICpidWZbXSA9IHsgInJjdV9ub2RlX2xldmVsXzAiLAorCQkJICAgICAgICJyY3Vfbm9kZV9sZXZlbF8xIiwKKwkJCSAgICAgICAicmN1X25vZGVfbGV2ZWxfMiIsCisJCQkgICAgICAgInJjdV9ub2RlX2xldmVsXzMiIH07ICAvKiBNYXRjaCBNQVhfUkNVX0xWTFMgKi8KIAlpbnQgY3B1c3RyaWRlID0gMTsKIAlpbnQgaTsKIAlpbnQgajsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAorCUJVSUxEX0JVR19PTihNQVhfUkNVX0xWTFMgPiBBUlJBWV9TSVpFKGJ1ZikpOyAgLyogRml4IGJ1ZltdIGluaXQhICovCisKIAkvKiBJbml0aWFsaXplIHRoZSBsZXZlbC10cmFja2luZyBhcnJheXMuICovCiAKIAlmb3IgKGkgPSAxOyBpIDwgTlVNX1JDVV9MVkxTOyBpKyspCkBAIC0xODIzLDggKzE4MjIsOSBAQAogCQljcHVzdHJpZGUgKj0gcnNwLT5sZXZlbHNwcmVhZFtpXTsKIAkJcm5wID0gcnNwLT5sZXZlbFtpXTsKIAkJZm9yIChqID0gMDsgaiA8IHJzcC0+bGV2ZWxjbnRbaV07IGorKywgcm5wKyspIHsKLQkJCXNwaW5fbG9ja19pbml0KCZybnAtPmxvY2spOwotCQkJbG9ja2RlcF9zZXRfY2xhc3MoJnJucC0+bG9jaywgJnJjdV9ub2RlX2NsYXNzW2ldKTsKKwkJCXJhd19zcGluX2xvY2tfaW5pdCgmcm5wLT5sb2NrKTsKKwkJCWxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKCZybnAtPmxvY2ssCisJCQkJCQkgICAmcmN1X25vZGVfY2xhc3NbaV0sIGJ1ZltpXSk7CiAJCQlybnAtPmdwbnVtID0gMDsKIAkJCXJucC0+cXNtYXNrID0gMDsKIAkJCXJucC0+cXNtYXNraW5pdCA9IDA7CkBAIC0xODc2LDcgKzE4NzYsNyBAQAogCiB2b2lkIF9faW5pdCByY3VfaW5pdCh2b2lkKQogewotCWludCBpOworCWludCBjcHU7CiAKIAlyY3VfYm9vdHVwX2Fubm91bmNlKCk7CiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKQEAgLTE4OTYsOCArMTg5Niw4IEBACiAJICogb3IgdGhlIHNjaGVkdWxlciBhcmUgb3BlcmF0aW9uYWwuCiAJICovCiAJY3B1X25vdGlmaWVyKHJjdV9jcHVfbm90aWZ5LCAwKTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpCi0JCXJjdV9jcHVfbm90aWZ5KE5VTEwsIENQVV9VUF9QUkVQQVJFLCAodm9pZCAqKShsb25nKWkpOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQlyY3VfY3B1X25vdGlmeShOVUxMLCBDUFVfVVBfUFJFUEFSRSwgKHZvaWQgKikobG9uZyljcHUpOwogfQogCiAjaW5jbHVkZSAicmN1dHJlZV9wbHVnaW4uaCIKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlLmggYi9rZXJuZWwvcmN1dHJlZS5oCmluZGV4IGQyYTAwNDYuLjE0MzllYjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlLmgKKysrIGIva2VybmVsL3JjdXRyZWUuaApAQCAtOTAsMTIgKzkwLDEyIEBACiAgKiBEZWZpbml0aW9uIGZvciBub2RlIHdpdGhpbiB0aGUgUkNVIGdyYWNlLXBlcmlvZC1kZXRlY3Rpb24gaGllcmFyY2h5LgogICovCiBzdHJ1Y3QgcmN1X25vZGUgewotCXNwaW5sb2NrX3QgbG9jazsJLyogUm9vdCByY3Vfbm9kZSdzIGxvY2sgcHJvdGVjdHMgc29tZSAqLworCXJhd19zcGlubG9ja190IGxvY2s7CS8qIFJvb3QgcmN1X25vZGUncyBsb2NrIHByb3RlY3RzIHNvbWUgKi8KIAkJCQkvKiAgcmN1X3N0YXRlIGZpZWxkcyBhcyB3ZWxsIGFzIGZvbGxvd2luZy4gKi8KLQlsb25nCWdwbnVtOwkJLyogQ3VycmVudCBncmFjZSBwZXJpb2QgZm9yIHRoaXMgbm9kZS4gKi8KKwl1bnNpZ25lZCBsb25nIGdwbnVtOwkvKiBDdXJyZW50IGdyYWNlIHBlcmlvZCBmb3IgdGhpcyBub2RlLiAqLwogCQkJCS8qICBUaGlzIHdpbGwgZWl0aGVyIGJlIGVxdWFsIHRvIG9yIG9uZSAqLwogCQkJCS8qICBiZWhpbmQgdGhlIHJvb3QgcmN1X25vZGUncyBncG51bS4gKi8KLQlsb25nCWNvbXBsZXRlZDsJLyogTGFzdCBncmFjZSBwZXJpb2QgY29tcGxldGVkIGZvciB0aGlzIG5vZGUuICovCisJdW5zaWduZWQgbG9uZyBjb21wbGV0ZWQ7IC8qIExhc3QgR1AgY29tcGxldGVkIGZvciB0aGlzIG5vZGUuICovCiAJCQkJLyogIFRoaXMgd2lsbCBlaXRoZXIgYmUgZXF1YWwgdG8gb3Igb25lICovCiAJCQkJLyogIGJlaGluZCB0aGUgcm9vdCByY3Vfbm9kZSdzIGdwbnVtLiAqLwogCXVuc2lnbmVkIGxvbmcgcXNtYXNrOwkvKiBDUFVzIG9yIGdyb3VwcyB0aGF0IG5lZWQgdG8gc3dpdGNoIGluICovCkBAIC0xNjEsMTEgKzE2MSwxMSBAQAogLyogUGVyLUNQVSBkYXRhIGZvciByZWFkLWNvcHkgdXBkYXRlLiAqLwogc3RydWN0IHJjdV9kYXRhIHsKIAkvKiAxKSBxdWllc2NlbnQtc3RhdGUgYW5kIGdyYWNlLXBlcmlvZCBoYW5kbGluZyA6ICovCi0JbG9uZwkJY29tcGxldGVkOwkvKiBUcmFjayByc3AtPmNvbXBsZXRlZCBncCBudW1iZXIgKi8KKwl1bnNpZ25lZCBsb25nCWNvbXBsZXRlZDsJLyogVHJhY2sgcnNwLT5jb21wbGV0ZWQgZ3AgbnVtYmVyICovCiAJCQkJCS8qICBpbiBvcmRlciB0byBkZXRlY3QgR1AgZW5kLiAqLwotCWxvbmcJCWdwbnVtOwkJLyogSGlnaGVzdCBncCBudW1iZXIgdGhhdCB0aGlzIENQVSAqLworCXVuc2lnbmVkIGxvbmcJZ3BudW07CQkvKiBIaWdoZXN0IGdwIG51bWJlciB0aGF0IHRoaXMgQ1BVICovCiAJCQkJCS8qICBpcyBhd2FyZSBvZiBoYXZpbmcgc3RhcnRlZC4gKi8KLQlsb25nCQlwYXNzZWRfcXVpZXNjX2NvbXBsZXRlZDsKKwl1bnNpZ25lZCBsb25nCXBhc3NlZF9xdWllc2NfY29tcGxldGVkOwogCQkJCQkvKiBWYWx1ZSBvZiBjb21wbGV0ZWQgYXQgdGltZSBvZiBxcy4gKi8KIAlib29sCQlwYXNzZWRfcXVpZXNjOwkvKiBVc2VyLW1vZGUvaWRsZSBsb29wIGV0Yy4gKi8KIAlib29sCQlxc19wZW5kaW5nOwkvKiBDb3JlIHdhaXRzIGZvciBxdWllc2Mgc3RhdGUuICovCkBAIC0yMjEsMTQgKzIyMSwxNCBAQAogCXVuc2lnbmVkIGxvbmcgcmVzY2hlZF9pcGk7CS8qIFNlbnQgYSByZXNjaGVkIElQSS4gKi8KIAogCS8qIDUpIF9fcmN1X3BlbmRpbmcoKSBzdGF0aXN0aWNzLiAqLwotCWxvbmcgbl9yY3VfcGVuZGluZzsJCS8qIHJjdV9wZW5kaW5nKCkgY2FsbHMgc2luY2UgYm9vdC4gKi8KLQlsb25nIG5fcnBfcXNfcGVuZGluZzsKLQlsb25nIG5fcnBfY2JfcmVhZHk7Ci0JbG9uZyBuX3JwX2NwdV9uZWVkc19ncDsKLQlsb25nIG5fcnBfZ3BfY29tcGxldGVkOwotCWxvbmcgbl9ycF9ncF9zdGFydGVkOwotCWxvbmcgbl9ycF9uZWVkX2ZxczsKLQlsb25nIG5fcnBfbmVlZF9ub3RoaW5nOworCXVuc2lnbmVkIGxvbmcgbl9yY3VfcGVuZGluZzsJLyogcmN1X3BlbmRpbmcoKSBjYWxscyBzaW5jZSBib290LiAqLworCXVuc2lnbmVkIGxvbmcgbl9ycF9xc19wZW5kaW5nOworCXVuc2lnbmVkIGxvbmcgbl9ycF9jYl9yZWFkeTsKKwl1bnNpZ25lZCBsb25nIG5fcnBfY3B1X25lZWRzX2dwOworCXVuc2lnbmVkIGxvbmcgbl9ycF9ncF9jb21wbGV0ZWQ7CisJdW5zaWduZWQgbG9uZyBuX3JwX2dwX3N0YXJ0ZWQ7CisJdW5zaWduZWQgbG9uZyBuX3JwX25lZWRfZnFzOworCXVuc2lnbmVkIGxvbmcgbl9ycF9uZWVkX25vdGhpbmc7CiAKIAlpbnQgY3B1OwogfTsKQEAgLTIzNywxMiArMjM3LDExIEBACiAjZGVmaW5lIFJDVV9HUF9JRExFCQkwCS8qIE5vIGdyYWNlIHBlcmlvZCBpbiBwcm9ncmVzcy4gKi8KICNkZWZpbmUgUkNVX0dQX0lOSVQJCTEJLyogR3JhY2UgcGVyaW9kIGJlaW5nIGluaXRpYWxpemVkLiAqLwogI2RlZmluZSBSQ1VfU0FWRV9EWU5USUNLCTIJLyogTmVlZCB0byBzY2FuIGR5bnRpY2sgc3RhdGUuICovCi0jZGVmaW5lIFJDVV9TQVZFX0NPTVBMRVRFRAkzCS8qIE5lZWQgdG8gc2F2ZSByc3AtPmNvbXBsZXRlZC4gKi8KLSNkZWZpbmUgUkNVX0ZPUkNFX1FTCQk0CS8qIE5lZWQgdG8gZm9yY2UgcXVpZXNjZW50IHN0YXRlLiAqLworI2RlZmluZSBSQ1VfRk9SQ0VfUVMJCTMJLyogTmVlZCB0byBmb3JjZSBxdWllc2NlbnQgc3RhdGUuICovCiAjaWZkZWYgQ09ORklHX05PX0haCiAjZGVmaW5lIFJDVV9TSUdOQUxfSU5JVAkJUkNVX1NBVkVfRFlOVElDSwogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLwotI2RlZmluZSBSQ1VfU0lHTkFMX0lOSVQJCVJDVV9TQVZFX0NPTVBMRVRFRAorI2RlZmluZSBSQ1VfU0lHTkFMX0lOSVQJCVJDVV9GT1JDRV9RUwogI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfTk9fSFogKi8KIAogI2RlZmluZSBSQ1VfSklGRklFU19USUxMX0ZPUkNFX1FTCSAzCS8qIGZvciByc3AtPmppZmZpZXNfZm9yY2VfcXMgKi8KQEAgLTI1Niw2ICsyNTUsOSBAQAogCiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICovCiAKKyNkZWZpbmUgVUxPTkdfQ01QX0dFKGEsIGIpCShVTE9OR19NQVggLyAyID49IChhKSAtIChiKSkKKyNkZWZpbmUgVUxPTkdfQ01QX0xUKGEsIGIpCShVTE9OR19NQVggLyAyIDwgKGEpIC0gKGIpKQorCiAvKgogICogUkNVIGdsb2JhbCBzdGF0ZSwgaW5jbHVkaW5nIG5vZGUgaGllcmFyY2h5LiAgVGhpcyBoaWVyYXJjaHkgaXMKICAqIHJlcHJlc2VudGVkIGluICJoZWFwIiBmb3JtIGluIGEgZGVuc2UgYXJyYXkuICBUaGUgcm9vdCAoZmlyc3QgbGV2ZWwpCkBAIC0yNzcsMTIgKzI3OSwxOSBAQAogCiAJdTgJc2lnbmFsZWQgX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcDsKIAkJCQkJCS8qIEZvcmNlIFFTIHN0YXRlLiAqLwotCWxvbmcJZ3BudW07CQkJCS8qIEN1cnJlbnQgZ3AgbnVtYmVyLiAqLwotCWxvbmcJY29tcGxldGVkOwkJCS8qICMgb2YgbGFzdCBjb21wbGV0ZWQgZ3AuICovCisJdTgJZnFzX2FjdGl2ZTsJCQkvKiBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSAqLworCQkJCQkJLyogIGlzIHJ1bm5pbmcuICovCisJdTgJZnFzX25lZWRfZ3A7CQkJLyogQSBDUFUgd2FzIHByZXZlbnRlZCBmcm9tICovCisJCQkJCQkvKiAgc3RhcnRpbmcgYSBuZXcgZ3JhY2UgKi8KKwkJCQkJCS8qICBwZXJpb2QgYmVjYXVzZSAqLworCQkJCQkJLyogIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpICovCisJCQkJCQkvKiAgd2FzIHJ1bm5pbmcuICovCisJdW5zaWduZWQgbG9uZyBncG51bTsJCQkvKiBDdXJyZW50IGdwIG51bWJlci4gKi8KKwl1bnNpZ25lZCBsb25nIGNvbXBsZXRlZDsJCS8qICMgb2YgbGFzdCBjb21wbGV0ZWQgZ3AuICovCiAKIAkvKiBFbmQgb2YgZmllbGRzIGd1YXJkZWQgYnkgcm9vdCByY3Vfbm9kZSdzIGxvY2suICovCiAKLQlzcGlubG9ja190IG9ub2ZmbG9jazsJCQkvKiBleGNsdWRlIG9uL29mZmxpbmUgYW5kICovCisJcmF3X3NwaW5sb2NrX3Qgb25vZmZsb2NrOwkJLyogZXhjbHVkZSBvbi9vZmZsaW5lIGFuZCAqLwogCQkJCQkJLyogIHN0YXJ0aW5nIG5ldyBHUC4gIEFsc28gKi8KIAkJCQkJCS8qICBwcm90ZWN0cyB0aGUgZm9sbG93aW5nICovCiAJCQkJCQkvKiAgb3JwaGFuX2NicyBmaWVsZHMuICovCkBAIC0yOTIsMTAgKzMwMSw4IEBACiAJCQkJCQkvKiAgZ29pbmcgb2ZmbGluZS4gKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgKipvcnBoYW5fY2JzX3RhaWw7CS8qIEFuZCB0YWlsIHBvaW50ZXIuICovCiAJbG9uZyBvcnBoYW5fcWxlbjsJCQkvKiBOdW1iZXIgb2Ygb3JwaGFuZWQgY2JzLiAqLwotCXNwaW5sb2NrX3QgZnFzbG9jazsJCQkvKiBPbmx5IG9uZSB0YXNrIGZvcmNpbmcgKi8KKwlyYXdfc3BpbmxvY2tfdCBmcXNsb2NrOwkJCS8qIE9ubHkgb25lIHRhc2sgZm9yY2luZyAqLwogCQkJCQkJLyogIHF1aWVzY2VudCBzdGF0ZXMuICovCi0JbG9uZwljb21wbGV0ZWRfZnFzOwkJCS8qIFZhbHVlIG9mIGNvbXBsZXRlZCBAIHNuYXAuICovCi0JCQkJCQkvKiAgUHJvdGVjdGVkIGJ5IGZxc2xvY2suICovCiAJdW5zaWduZWQgbG9uZyBqaWZmaWVzX2ZvcmNlX3FzOwkJLyogVGltZSBhdCB3aGljaCB0byBpbnZva2UgKi8KIAkJCQkJCS8qICBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKS4gKi8KIAl1bnNpZ25lZCBsb25nIG5fZm9yY2VfcXM7CQkvKiBOdW1iZXIgb2YgY2FsbHMgdG8gKi8KQEAgLTMxOSw4ICszMjYsNiBAQAogI2RlZmluZSBSQ1VfT0ZMX1RBU0tTX0VYUF9HUAkweDIJCS8qIFRhc2tzIGJsb2NraW5nIGV4cGVkaXRlZCAqLwogCQkJCQkJLyogIEdQIHdlcmUgbW92ZWQgdG8gcm9vdC4gKi8KIAotI2lmZGVmIFJDVV9UUkVFX05PTkNPUkUKLQogLyoKICAqIFJDVSBpbXBsZW1lbnRhdGlvbiBpbnRlcm5hbCBkZWNsYXJhdGlvbnM6CiAgKi8KQEAgLTMzNSw3ICszNDAsNyBAQAogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X3ByZWVtcHRfZGF0YSk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCiAKLSNlbHNlIC8qICNpZmRlZiBSQ1VfVFJFRV9OT05DT1JFICovCisjaWZuZGVmIFJDVV9UUkVFX05PTkNPUkUKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIHJjdXRyZWVfcGx1Z2luLmggKi8KIHN0YXRpYyB2b2lkIHJjdV9ib290dXBfYW5ub3VuY2Uodm9pZCk7CkBAIC0zNDcsNiArMzUyLDcgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVICovCiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKK3N0YXRpYyB2b2lkIHJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApOwogc3RhdGljIHZvaWQgcmN1X3ByaW50X3Rhc2tfc3RhbGwoc3RydWN0IHJjdV9ub2RlICpybnApOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiAqLwogc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfYmxvY2tlZF90YXNrcyhzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CkBAIC0zNjcsNSArMzczLDYgQEAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3VfcHJlZW1wdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpOwogc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKHZvaWQpOwogc3RhdGljIHZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKTsKK3N0YXRpYyB2b2lkIHJjdV9uZWVkc19jcHVfZmx1c2godm9pZCk7CiAKLSNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgUkNVX1RSRUVfTk9OQ09SRSAqLworI2VuZGlmIC8qICNpZm5kZWYgUkNVX1RSRUVfTk9OQ09SRSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfcGx1Z2luLmggYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAppbmRleCAzN2ZiY2NkLi40NjRhZDJjIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAorKysgYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaApAQCAtNjIsNiArNjIsMTUgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX2NvbXBsZXRlZCk7CiAKIC8qCisgKiBGb3JjZSBhIHF1aWVzY2VudCBzdGF0ZSBmb3IgcHJlZW1wdGlibGUgUkNVLgorICovCit2b2lkIHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCkKK3sKKwlmb3JjZV9xdWllc2NlbnRfc3RhdGUoJnJjdV9wcmVlbXB0X3N0YXRlLCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUpOworCisvKgogICogUmVjb3JkIGEgcHJlZW1wdGFibGUtUkNVIHF1aWVzY2VudCBzdGF0ZSBmb3IgdGhlIHNwZWNpZmllZCBDUFUuICBOb3RlCiAgKiB0aGF0IHRoaXMganVzdCBtZWFucyB0aGF0IHRoZSB0YXNrIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSBDUFUgaXMKICAqIG5vdCBpbiBhIHF1aWVzY2VudCBzdGF0ZS4gIFRoZXJlIG1pZ2h0IGJlIGFueSBudW1iZXIgb2YgdGFza3MgYmxvY2tlZApAQCAtMTAyLDcgKzExMSw3IEBACiAJCS8qIFBvc3NpYmx5IGJsb2NraW5nIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gKi8KIAkJcmRwID0gcmN1X3ByZWVtcHRfc3RhdGUucmRhW2NwdV07CiAJCXJucCA9IHJkcC0+bXlub2RlOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsIHw9IFJDVV9SRUFEX1VOTE9DS19CTE9DS0VEOwogCQl0LT5yY3VfYmxvY2tlZF9ub2RlID0gcm5wOwogCkBAIC0xMjMsNyArMTMyLDcgQEAKIAkJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZ0LT5yY3Vfbm9kZV9lbnRyeSkpOwogCQlwaGFzZSA9IChybnAtPmdwbnVtICsgIShybnAtPnFzbWFzayAmIHJkcC0+Z3JwbWFzaykpICYgMHgxOwogCQlsaXN0X2FkZCgmdC0+cmN1X25vZGVfZW50cnksICZybnAtPmJsb2NrZWRfdGFza3NbcGhhc2VdKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAkvKgpAQCAtMTgwLDcgKzE4OSw3IEBACiAJc3RydWN0IHJjdV9ub2RlICpybnBfcDsKIAogCWlmIChybnAtPnFzbWFzayAhPSAwIHx8IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsgIC8qIFN0aWxsIG5lZWQgbW9yZSBxdWllc2NlbnQgc3RhdGVzISAqLwogCX0KIApAQCAtMTk3LDggKzIwNiw4IEBACiAKIAkvKiBSZXBvcnQgdXAgdGhlIHJlc3Qgb2YgdGhlIGhpZXJhcmNoeS4gKi8KIAltYXNrID0gcm5wLT5ncnBtYXNrOwotCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KLQlzcGluX2xvY2soJnJucF9wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJcmF3X3NwaW5fbG9jaygmcm5wX3AtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJcmN1X3JlcG9ydF9xc19ybnAobWFzaywgJnJjdV9wcmVlbXB0X3N0YXRlLCBybnBfcCwgZmxhZ3MpOwogfQogCkBAIC0yNDgsMTAgKzI1NywxMCBAQAogCQkgKi8KIAkJZm9yICg7OykgewogCQkJcm5wID0gdC0+cmN1X2Jsb2NrZWRfbm9kZTsKLQkJCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCQlpZiAocm5wID09IHQtPnJjdV9ibG9ja2VkX25vZGUpCiAJCQkJYnJlYWs7Ci0JCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCQkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAkJfQogCQllbXB0eSA9ICFyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKTsKIAkJZW1wdHlfZXhwID0gIXJjdV9wcmVlbXB0ZWRfcmVhZGVyc19leHAocm5wKTsKQEAgLTI2NSw3ICsyNzQsNyBAQAogCQkgKiBOb3RlIHRoYXQgcmN1X3JlcG9ydF91bmJsb2NrX3FzX3JucCgpIHJlbGVhc2VzIHJucC0+bG9jay4KIAkJICovCiAJCWlmIChlbXB0eSkKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQllbHNlCiAJCQlyY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKHJucCwgZmxhZ3MpOwogCkBAIC0yOTUsMTYgKzMwNCwyMSBAQAogCWlmICgtLUFDQ0VTU19PTkNFKHQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZykgPT0gMCAmJgogCSAgICB1bmxpa2VseShBQ0NFU1NfT05DRSh0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCkpKQogCQlyY3VfcmVhZF91bmxvY2tfc3BlY2lhbCh0KTsKKyNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORworCVdBUk5fT05fT05DRShBQ0NFU1NfT05DRSh0LT5yY3VfcmVhZF9sb2NrX25lc3RpbmcpIDwgMCk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HICovCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3JjdV9yZWFkX3VubG9jayk7CiAKICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgogCisjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRQorCiAvKgotICogU2NhbiB0aGUgY3VycmVudCBsaXN0IG9mIHRhc2tzIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKLSAqIHNlY3Rpb25zLCBwcmludGluZyBvdXQgdGhlIHRpZCBvZiBlYWNoLgorICogRHVtcCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBmb3IgYWxsIHRhc2tzIGJsb2NraW5nIHRoZSBjdXJyZW50IFJDVQorICogZ3JhY2UgcGVyaW9kIG9uIHRoZSBzcGVjaWZpZWQgcmN1X25vZGUgc3RydWN0dXJlLgogICovCi1zdGF0aWMgdm9pZCByY3VfcHJpbnRfdGFza19zdGFsbChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3N0YXRpYyB2b2lkIHJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbF9ybnAoc3RydWN0IHJjdV9ub2RlICpybnApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpscDsKQEAgLTMxMiwxMiArMzI2LDUxIEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCiAJaWYgKHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcGhhc2UgPSBybnAtPmdwbnVtICYgMHgxOworCQlscCA9ICZybnAtPmJsb2NrZWRfdGFza3NbcGhhc2VdOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsIGxwLCByY3Vfbm9kZV9lbnRyeSkKKwkJCXNjaGVkX3Nob3dfdGFzayh0KTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCX0KK30KKworLyoKKyAqIER1bXAgZGV0YWlsZWQgaW5mb3JtYXRpb24gZm9yIGFsbCB0YXNrcyBibG9ja2luZyB0aGUgY3VycmVudCBSQ1UKKyAqIGdyYWNlIHBlcmlvZC4KKyAqLworc3RhdGljIHZvaWQgcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOworCisJcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsX3JucChybnApOworCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUocnNwLCBybnApCisJCXJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbF9ybnAocm5wKTsKK30KKworI2Vsc2UgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0UgKi8KKworc3RhdGljIHZvaWQgcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKK30KKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFICovCisKKy8qCisgKiBTY2FuIHRoZSBjdXJyZW50IGxpc3Qgb2YgdGFza3MgYmxvY2tlZCB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorICogc2VjdGlvbnMsIHByaW50aW5nIG91dCB0aGUgdGlkIG9mIGVhY2guCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9wcmludF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxwOworCWludCBwaGFzZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CisKKwlpZiAocmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCkpIHsKIAkJcGhhc2UgPSBybnAtPmdwbnVtICYgMHgxOwogCQlscCA9ICZybnAtPmJsb2NrZWRfdGFza3NbcGhhc2VdOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsIGxwLCByY3Vfbm9kZV9lbnRyeSkKIAkJCXByaW50aygiIFAlZCIsIHQtPnBpZCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtMzg4LDExICs0NDEsMTEgQEAKIAkJbHBfcm9vdCA9ICZybnBfcm9vdC0+YmxvY2tlZF90YXNrc1tpXTsKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KGxwKSkgewogCQkJdHAgPSBsaXN0X2VudHJ5KGxwLT5uZXh0LCB0eXBlb2YoKnRwKSwgcmN1X25vZGVfZW50cnkpOwotCQkJc3Bpbl9sb2NrKCZybnBfcm9vdC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCQkJcmF3X3NwaW5fbG9jaygmcm5wX3Jvb3QtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KIAkJCWxpc3RfZGVsKCZ0cC0+cmN1X25vZGVfZW50cnkpOwogCQkJdHAtPnJjdV9ibG9ja2VkX25vZGUgPSBybnBfcm9vdDsKIAkJCWxpc3RfYWRkKCZ0cC0+cmN1X25vZGVfZW50cnksIGxwX3Jvb3QpOwotCQkJc3Bpbl91bmxvY2soJnJucF9yb290LT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KKwkJCXJhd19zcGluX3VubG9jaygmcm5wX3Jvb3QtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLwogCQl9CiAJfQogCXJldHVybiByZXR2YWw7CkBAIC01MTYsNyArNTY5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCWZvciAoOzspIHsKIAkJaWYgKCFzeW5jX3JjdV9wcmVlbXB0X2V4cF9kb25lKHJucCkpCiAJCQlicmVhazsKQEAgLTUyNSwxMiArNTc4LDEyIEBACiAJCQlicmVhazsKIAkJfQogCQltYXNrID0gcm5wLT5ncnBtYXNrOwotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KKwkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLwogCQlybnAgPSBybnAtPnBhcmVudDsKLQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCiAJCXJucC0+ZXhwbWFzayAmPSB+bWFzazsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtNTQ1LDExICs1OTgsMTEgQEAKIHsKIAlpbnQgbXVzdF93YWl0OwogCi0Jc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KIAlsaXN0X3NwbGljZV9pbml0KCZybnAtPmJsb2NrZWRfdGFza3NbMF0sICZybnAtPmJsb2NrZWRfdGFza3NbMl0pOwogCWxpc3Rfc3BsaWNlX2luaXQoJnJucC0+YmxvY2tlZF90YXNrc1sxXSwgJnJucC0+YmxvY2tlZF90YXNrc1szXSk7CiAJbXVzdF93YWl0ID0gcmN1X3ByZWVtcHRlZF9yZWFkZXJzX2V4cChybnApOwotCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLworCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KIAlpZiAoIW11c3Rfd2FpdCkKIAkJcmN1X3JlcG9ydF9leHBfcm5wKHJzcCwgcm5wKTsKIH0KQEAgLTU5NCwxMyArNjQ3LDEzIEBACiAJLyogZm9yY2UgYWxsIFJDVSByZWFkZXJzIG9udG8gYmxvY2tlZF90YXNrc1tdLiAqLwogCXN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCgpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogCiAJLyogSW5pdGlhbGl6ZSAtPmV4cG1hc2sgZm9yIGFsbCBub24tbGVhZiByY3Vfbm9kZSBzdHJ1Y3R1cmVzLiAqLwogCXJjdV9mb3JfZWFjaF9ub25sZWFmX25vZGVfYnJlYWR0aF9maXJzdChyc3AsIHJucCkgewotCQlzcGluX2xvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQlybnAtPmV4cG1hc2sgPSBybnAtPnFzbWFza2luaXQ7Ci0JCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAl9CiAKIAkvKiBTbmFwc2hvdCBjdXJyZW50IHN0YXRlIG9mIC0+YmxvY2tlZF90YXNrc1tdIGxpc3RzLiAqLwpAQCAtNjA5LDcgKzY2Miw3IEBACiAJaWYgKE5VTV9SQ1VfTk9ERVMgPiAxKQogCQlzeW5jX3JjdV9wcmVlbXB0X2V4cF9pbml0KHJzcCwgcmN1X2dldF9yb290KHJzcCkpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIAogCS8qIFdhaXQgZm9yIHNuYXBzaG90dGVkIC0+YmxvY2tlZF90YXNrc1tdIGxpc3RzIHRvIGRyYWluLiAqLwogCXJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwpAQCAtNzEzLDYgKzc2NiwxNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhdGNoZXNfY29tcGxldGVkKTsKIAogLyoKKyAqIEZvcmNlIGEgcXVpZXNjZW50IHN0YXRlIGZvciBSQ1UsIHdoaWNoLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHByZWVtcHRpYmxlCisgKiBSQ1UsIGJlY29tZXMgdGhlIHNhbWUgYXMgcmN1LXNjaGVkLgorICovCit2b2lkIHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCkKK3sKKwlyY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlKCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKTsKKworLyoKICAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB3ZSBuZXZlciBoYXZlIHRvIGNoZWNrIGZvcgogICogQ1BVcyBiZWluZyBpbiBxdWllc2NlbnQgc3RhdGVzLgogICovCkBAIC03MzQsNyArNzk3LDcgQEAKIC8qIEJlY2F1c2UgcHJlZW1wdGlibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBubyBxdWlldGluZyBvZiB0YXNrcy4gKi8KIHN0YXRpYyB2b2lkIHJjdV9yZXBvcnRfdW5ibG9ja19xc19ybnAoc3RydWN0IHJjdV9ub2RlICpybnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogfQogCiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLwpAQCAtNzQ1LDYgKzgwOCwxNCBAQAogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHdlIG5ldmVyIGhhdmUgdG8gY2hlY2sgZm9yCiAgKiB0YXNrcyBibG9ja2VkIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLgogICovCitzdGF0aWMgdm9pZCByY3VfcHJpbnRfZGV0YWlsX3Rhc2tfc3RhbGwoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQoreworfQorCisvKgorICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHdlIG5ldmVyIGhhdmUgdG8gY2hlY2sgZm9yCisgKiB0YXNrcyBibG9ja2VkIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLgorICovCiBzdGF0aWMgdm9pZCByY3VfcHJpbnRfdGFza19zdGFsbChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKIHsKIH0KQEAgLTg4NCwzICs5NTUsMTEzIEBACiB9CiAKICNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KKworI2lmICFkZWZpbmVkKENPTkZJR19SQ1VfRkFTVF9OT19IWikKKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiBhbnkgZnV0dXJlIFJDVS1yZWxhdGVkIHdvcmsgd2lsbCBuZWVkIHRvIGJlIGRvbmUKKyAqIGJ5IHRoZSBjdXJyZW50IENQVSwgZXZlbiBpZiBub25lIG5lZWQgYmUgZG9uZSBpbW1lZGlhdGVseSwgcmV0dXJuaW5nCisgKiAxIGlmIHNvLiAgVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBSQ1UgaW1wbGVtZW50YXRpb247IGl0IGlzIC1ub3QtCisgKiBhbiBleHBvcnRlZCBtZW1iZXIgb2YgdGhlIFJDVSBBUEkuCisgKgorICogQmVjYXVzZSB3ZSBoYXZlIHByZWVtcHRpYmxlIFJDVSwganVzdCBjaGVjayB3aGV0aGVyIHRoaXMgQ1BVIG5lZWRzCisgKiBhbnkgZmxhdm9yIG9mIFJDVS4gIERvIG5vdCBjaGV3IHVwIGxvdHMgb2YgQ1BVIGN5Y2xlcyB3aXRoIHByZWVtcHRpb24KKyAqIGRpc2FibGVkIGluIGEgbW9zdC1saWtlbHkgdmFpbiBhdHRlbXB0IHRvIGNhdXNlIFJDVSBub3QgdG8gbmVlZCB0aGlzIENQVS4KKyAqLworaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSkKK3sKKwlyZXR1cm4gcmN1X25lZWRzX2NwdV9xdWlja19jaGVjayhjcHUpOworfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gY29udGludWUgYSBjYWxsYmFjay1mbHVzaCBvcGVyYXRpb25zIHRvCisgKiBhbGxvdyB0aGUgbGFzdCBDUFUgdG8gZW50ZXIgZHludGljay1pZGxlIG1vZGUuICBCdXQgZmFzdCBkeW50aWNrLWlkbGUKKyAqIGVudHJ5IGlzIG5vdCBjb25maWd1cmVkLCBzbyB3ZSBuZXZlciBkbyBuZWVkIHRvLgorICovCitzdGF0aWMgdm9pZCByY3VfbmVlZHNfY3B1X2ZsdXNoKHZvaWQpCit7Cit9CisKKyNlbHNlIC8qICNpZiAhZGVmaW5lZChDT05GSUdfUkNVX0ZBU1RfTk9fSFopICovCisKKyNkZWZpbmUgUkNVX05FRURTX0NQVV9GTFVTSEVTIDUKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHJjdV9keW50aWNrX2RyYWluKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCByY3VfZHludGlja19ob2xkb2ZmKTsKKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiBhbnkgZnV0dXJlIFJDVS1yZWxhdGVkIHdvcmsgd2lsbCBuZWVkIHRvIGJlIGRvbmUKKyAqIGJ5IHRoZSBjdXJyZW50IENQVSwgZXZlbiBpZiBub25lIG5lZWQgYmUgZG9uZSBpbW1lZGlhdGVseSwgcmV0dXJuaW5nCisgKiAxIGlmIHNvLiAgVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBSQ1UgaW1wbGVtZW50YXRpb247IGl0IGlzIC1ub3QtCisgKiBhbiBleHBvcnRlZCBtZW1iZXIgb2YgdGhlIFJDVSBBUEkuCisgKgorICogQmVjYXVzZSB3ZSBhcmUgbm90IHN1cHBvcnRpbmcgcHJlZW1wdGlibGUgUkNVLCBhdHRlbXB0IHRvIGFjY2VsZXJhdGUKKyAqIGFueSBjdXJyZW50IGdyYWNlIHBlcmlvZHMgc28gdGhhdCBSQ1Ugbm8gbG9uZ2VyIG5lZWRzIHRoaXMgQ1BVLCBidXQKKyAqIG9ubHkgaWYgYWxsIG90aGVyIENQVXMgYXJlIGFscmVhZHkgaW4gZHludGlja3MtaWRsZSBtb2RlLiAgVGhpcyB3aWxsCisgKiBhbGxvdyB0aGUgQ1BVIGNvcmVzIHRvIGJlIHBvd2VyZWQgZG93biBpbW1lZGlhdGVseSwgYXMgb3Bwb3NlZCB0byBhZnRlcgorICogd2FpdGluZyBtYW55IG1pbGxpc2Vjb25kcyBmb3IgZ3JhY2UgcGVyaW9kcyB0byBlbGFwc2UuCisgKgorICogQmVjYXVzZSBpdCBpcyBub3QgbGVnYWwgdG8gaW52b2tlIHJjdV9wcm9jZXNzX2NhbGxiYWNrcygpIHdpdGggaXJxcworICogZGlzYWJsZWQsIHdlIGRvIG9uZSBwYXNzIG9mIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpLCB0aGVuIGRvIGEKKyAqIHJhaXNlX3NvZnRpcnEoKSB0byBjYXVzZSByY3VfcHJvY2Vzc19jYWxsYmFja3MoKSB0byBiZSBpbnZva2VkIGxhdGVyLgorICogVGhlIHBlci1jcHUgcmN1X2R5bnRpY2tfZHJhaW4gdmFyaWFibGUgY29udHJvbHMgdGhlIHNlcXVlbmNpbmcuCisgKi8KK2ludCByY3VfbmVlZHNfY3B1KGludCBjcHUpCit7CisJaW50IGMgPSAwOworCWludCB0aGF0Y3B1OworCisJLyogRG9uJ3QgYm90aGVyIHVubGVzcyB3ZSBhcmUgdGhlIGxhc3Qgbm9uLWR5bnRpY2staWRsZSBDUFUuICovCisJZm9yX2VhY2hfY3B1X25vdCh0aGF0Y3B1LCBub2h6X2NwdV9tYXNrKQorCQlpZiAodGhhdGNwdSAhPSBjcHUpIHsKKwkJCXBlcl9jcHUocmN1X2R5bnRpY2tfZHJhaW4sIGNwdSkgPSAwOworCQkJcGVyX2NwdShyY3VfZHludGlja19ob2xkb2ZmLCBjcHUpID0gamlmZmllcyAtIDE7CisJCQlyZXR1cm4gcmN1X25lZWRzX2NwdV9xdWlja19jaGVjayhjcHUpOworCQl9CisKKwkvKiBDaGVjayBhbmQgdXBkYXRlIHRoZSByY3VfZHludGlja19kcmFpbiBzZXF1ZW5jaW5nLiAqLworCWlmIChwZXJfY3B1KHJjdV9keW50aWNrX2RyYWluLCBjcHUpIDw9IDApIHsKKwkJLyogRmlyc3QgdGltZSB0aHJvdWdoLCBpbml0aWFsaXplIHRoZSBjb3VudGVyLiAqLworCQlwZXJfY3B1KHJjdV9keW50aWNrX2RyYWluLCBjcHUpID0gUkNVX05FRURTX0NQVV9GTFVTSEVTOworCX0gZWxzZSBpZiAoLS1wZXJfY3B1KHJjdV9keW50aWNrX2RyYWluLCBjcHUpIDw9IDApIHsKKwkJLyogV2UgaGF2ZSBoaXQgdGhlIGxpbWl0LCBzbyB0aW1lIHRvIGdpdmUgdXAuICovCisJCXBlcl9jcHUocmN1X2R5bnRpY2tfaG9sZG9mZiwgY3B1KSA9IGppZmZpZXM7CisJCXJldHVybiByY3VfbmVlZHNfY3B1X3F1aWNrX2NoZWNrKGNwdSk7CisJfQorCisJLyogRG8gb25lIHN0ZXAgcHVzaGluZyByZW1haW5pbmcgUkNVIGNhbGxiYWNrcyB0aHJvdWdoLiAqLworCWlmIChwZXJfY3B1KHJjdV9zY2hlZF9kYXRhLCBjcHUpLm54dGxpc3QpIHsKKwkJcmN1X3NjaGVkX3FzKGNwdSk7CisJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZSgmcmN1X3NjaGVkX3N0YXRlLCAwKTsKKwkJYyA9IGMgfHwgcGVyX2NwdShyY3Vfc2NoZWRfZGF0YSwgY3B1KS5ueHRsaXN0OworCX0KKwlpZiAocGVyX2NwdShyY3VfYmhfZGF0YSwgY3B1KS5ueHRsaXN0KSB7CisJCXJjdV9iaF9xcyhjcHUpOworCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUoJnJjdV9iaF9zdGF0ZSwgMCk7CisJCWMgPSBjIHx8IHBlcl9jcHUocmN1X2JoX2RhdGEsIGNwdSkubnh0bGlzdDsKKwl9CisKKwkvKiBJZiBSQ1UgY2FsbGJhY2tzIGFyZSBzdGlsbCBwZW5kaW5nLCBSQ1Ugc3RpbGwgbmVlZHMgdGhpcyBDUFUuICovCisJaWYgKGMpIHsKKwkJcmFpc2Vfc29mdGlycShSQ1VfU09GVElSUSk7CisJCXBlcl9jcHUocmN1X2R5bnRpY2tfaG9sZG9mZiwgY3B1KSA9IGppZmZpZXM7CisJfQorCXJldHVybiBjOworfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gY29udGludWUgYSBjYWxsYmFjay1mbHVzaCBvcGVyYXRpb25zIHRvCisgKiBhbGxvdyB0aGUgbGFzdCBDUFUgdG8gZW50ZXIgZHludGljay1pZGxlIG1vZGUuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9uZWVkc19jcHVfZmx1c2godm9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocGVyX2NwdShyY3VfZHludGlja19kcmFpbiwgY3B1KSA8PSAwKQorCQlyZXR1cm47CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSh2b2lkKXJjdV9uZWVkc19jcHUoY3B1KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKyNlbmRpZiAvKiAjZWxzZSAjaWYgIWRlZmluZWQoQ09ORklHX1JDVV9GQVNUX05PX0haKSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYyBiL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKaW5kZXggOWQyYzg4NC4uZDQ1ZGIyZSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYworKysgYi9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCkBAIC01MCw3ICs1MCw3IEBACiB7CiAJaWYgKCFyZHAtPmJlZW5vbmxpbmUpCiAJCXJldHVybjsKLQlzZXFfcHJpbnRmKG0sICIlM2QlY2M9JWxkIGc9JWxkIHBxPSVkIHBxYz0lbGQgcXA9JWQiLAorCXNlcV9wcmludGYobSwgIiUzZCVjYz0lbHUgZz0lbHUgcHE9JWQgcHFjPSVsdSBxcD0lZCIsCiAJCSAgIHJkcC0+Y3B1LAogCQkgICBjcHVfaXNfb2ZmbGluZShyZHAtPmNwdSkgPyAnIScgOiAnICcsCiAJCSAgIHJkcC0+Y29tcGxldGVkLCByZHAtPmdwbnVtLApAQCAtMTA1LDcgKzEwNSw3IEBACiB7CiAJaWYgKCFyZHAtPmJlZW5vbmxpbmUpCiAJCXJldHVybjsKLQlzZXFfcHJpbnRmKG0sICIlZCwlcywlbGQsJWxkLCVkLCVsZCwlZCIsCisJc2VxX3ByaW50ZihtLCAiJWQsJXMsJWx1LCVsdSwlZCwlbHUsJWQiLAogCQkgICByZHAtPmNwdSwKIAkJICAgY3B1X2lzX29mZmxpbmUocmRwLT5jcHUpID8gIlwiTlwiIiA6ICJcIllcIiIsCiAJCSAgIHJkcC0+Y29tcGxldGVkLCByZHAtPmdwbnVtLApAQCAtMTU1LDEzICsxNTUsMTMgQEAKIAogc3RhdGljIHZvaWQgcHJpbnRfb25lX3JjdV9zdGF0ZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKIHsKLQlsb25nIGdwbnVtOworCXVuc2lnbmVkIGxvbmcgZ3BudW07CiAJaW50IGxldmVsID0gMDsKIAlpbnQgcGhhc2U7CiAJc3RydWN0IHJjdV9ub2RlICpybnA7CiAKIAlncG51bSA9IHJzcC0+Z3BudW07Ci0Jc2VxX3ByaW50ZihtLCAiYz0lbGQgZz0lbGQgcz0lZCBqZnE9JWxkIGo9JXggIgorCXNlcV9wcmludGYobSwgImM9JWx1IGc9JWx1IHM9JWQgamZxPSVsZCBqPSV4ICIKIAkJICAgICAgIm5mcXM9JWx1L25mcXNuZz0lbHUoJWx1KSBmcWxoPSVsdSBvcWxlbj0lbGRcbiIsCiAJCSAgIHJzcC0+Y29tcGxldGVkLCBncG51bSwgcnNwLT5zaWduYWxlZCwKIAkJICAgKGxvbmcpKHJzcC0+amlmZmllc19mb3JjZV9xcyAtIGppZmZpZXMpLApAQCAtMjE1LDEyICsyMTUsMTIgQEAKIHN0YXRpYyBpbnQgc2hvd19yY3VncChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIHsKICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQotCXNlcV9wcmludGYobSwgInJjdV9wcmVlbXB0OiBjb21wbGV0ZWQ9JWxkICBncG51bT0lbGRcbiIsCisJc2VxX3ByaW50ZihtLCAicmN1X3ByZWVtcHQ6IGNvbXBsZXRlZD0lbGQgIGdwbnVtPSVsdVxuIiwKIAkJICAgcmN1X3ByZWVtcHRfc3RhdGUuY29tcGxldGVkLCByY3VfcHJlZW1wdF9zdGF0ZS5ncG51bSk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCi0Jc2VxX3ByaW50ZihtLCAicmN1X3NjaGVkOiBjb21wbGV0ZWQ9JWxkICBncG51bT0lbGRcbiIsCisJc2VxX3ByaW50ZihtLCAicmN1X3NjaGVkOiBjb21wbGV0ZWQ9JWxkICBncG51bT0lbHVcbiIsCiAJCSAgIHJjdV9zY2hlZF9zdGF0ZS5jb21wbGV0ZWQsIHJjdV9zY2hlZF9zdGF0ZS5ncG51bSk7Ci0Jc2VxX3ByaW50ZihtLCAicmN1X2JoOiBjb21wbGV0ZWQ9JWxkICBncG51bT0lbGRcbiIsCisJc2VxX3ByaW50ZihtLCAicmN1X2JoOiBjb21wbGV0ZWQ9JWxkICBncG51bT0lbHVcbiIsCiAJCSAgIHJjdV9iaF9zdGF0ZS5jb21wbGV0ZWQsIHJjdV9iaF9zdGF0ZS5ncG51bSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcmVzb3VyY2UuYyBiL2tlcm5lbC9yZXNvdXJjZS5jCmluZGV4IGFmOTZjMWUuLjRlOWQ4N2YgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZXNvdXJjZS5jCisrKyBiL2tlcm5lbC9yZXNvdXJjZS5jCkBAIC0xODgsNiArMTg4LDM2IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyB2b2lkIF9fcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpyKQoreworCXN0cnVjdCByZXNvdXJjZSAqdG1wLCAqcDsKKwlyZXNvdXJjZV9zaXplX3Qgc2l6ZTsKKworCXAgPSByLT5jaGlsZDsKKwlyLT5jaGlsZCA9IE5VTEw7CisJd2hpbGUgKHApIHsKKwkJdG1wID0gcDsKKwkJcCA9IHAtPnNpYmxpbmc7CisKKwkJdG1wLT5wYXJlbnQgPSBOVUxMOworCQl0bXAtPnNpYmxpbmcgPSBOVUxMOworCQlfX3JlbGVhc2VfY2hpbGRfcmVzb3VyY2VzKHRtcCk7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgInJlbGVhc2UgY2hpbGQgcmVzb3VyY2UgJXBSXG4iLCB0bXApOworCQkvKiBuZWVkIHRvIHJlc3RvcmUgc2l6ZSwgYW5kIGtlZXAgZmxhZ3MgKi8KKwkJc2l6ZSA9IHJlc291cmNlX3NpemUodG1wKTsKKwkJdG1wLT5zdGFydCA9IDA7CisJCXRtcC0+ZW5kID0gc2l6ZSAtIDE7CisJfQorfQorCit2b2lkIHJlbGVhc2VfY2hpbGRfcmVzb3VyY2VzKHN0cnVjdCByZXNvdXJjZSAqcikKK3sKKwl3cml0ZV9sb2NrKCZyZXNvdXJjZV9sb2NrKTsKKwlfX3JlbGVhc2VfY2hpbGRfcmVzb3VyY2VzKHIpOworCXdyaXRlX3VubG9jaygmcmVzb3VyY2VfbG9jayk7Cit9CisKIC8qKgogICogcmVxdWVzdF9yZXNvdXJjZSAtIHJlcXVlc3QgYW5kIHJlc2VydmUgYW4gSS9PIG9yIG1lbW9yeSByZXNvdXJjZQogICogQHJvb3Q6IHJvb3QgcmVzb3VyY2UgZGVzY3JpcHRvcgpAQCAtMjk3LDE0ICszMjcsMjkgQEAKIAogI2VuZGlmCiAKK3N0YXRpYyBpbnQgX19pc19yYW0odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gMTsKK30KKy8qCisgKiBUaGlzIGdlbmVyaWMgcGFnZV9pc19yYW0oKSByZXR1cm5zIHRydWUgaWYgc3BlY2lmaWVkIGFkZHJlc3MgaXMKKyAqIHJlZ2lzdGVyZWQgYXMgIlN5c3RlbSBSQU0iIGluIGlvbWVtX3Jlc291cmNlIGxpc3QuCisgKi8KK2ludCBfX3dlYWsgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwZm4pCit7CisJcmV0dXJuIHdhbGtfc3lzdGVtX3JhbV9yYW5nZShwZm4sIDEsIE5VTEwsIF9faXNfcmFtKSA9PSAxOworfQorCiAvKgogICogRmluZCBlbXB0eSBzbG90IGluIHRoZSByZXNvdXJjZSB0cmVlIGdpdmVuIHJhbmdlIGFuZCBhbGlnbm1lbnQuCiAgKi8KIHN0YXRpYyBpbnQgZmluZF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHN0cnVjdCByZXNvdXJjZSAqbmV3LAogCQkJIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgbWluLAogCQkJIHJlc291cmNlX3NpemVfdCBtYXgsIHJlc291cmNlX3NpemVfdCBhbGlnbiwKLQkJCSB2b2lkICgqYWxpZ25mKSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLAotCQkJCQlyZXNvdXJjZV9zaXplX3QsIHJlc291cmNlX3NpemVfdCksCisJCQkgcmVzb3VyY2Vfc2l6ZV90ICgqYWxpZ25mKSh2b2lkICosCisJCQkJCQkgICBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQkJCSAgIHJlc291cmNlX3NpemVfdCwKKwkJCQkJCSAgIHJlc291cmNlX3NpemVfdCksCiAJCQkgdm9pZCAqYWxpZ25mX2RhdGEpCiB7CiAJc3RydWN0IHJlc291cmNlICp0aGlzID0gcm9vdC0+Y2hpbGQ7CkBAIC0zMzAsNyArMzc1LDcgQEAKIAkJCXRtcC5lbmQgPSBtYXg7CiAJCXRtcC5zdGFydCA9IEFMSUdOKHRtcC5zdGFydCwgYWxpZ24pOwogCQlpZiAoYWxpZ25mKQotCQkJYWxpZ25mKGFsaWduZl9kYXRhLCAmdG1wLCBzaXplLCBhbGlnbik7CisJCQl0bXAuc3RhcnQgPSBhbGlnbmYoYWxpZ25mX2RhdGEsICZ0bXAsIHNpemUsIGFsaWduKTsKIAkJaWYgKHRtcC5zdGFydCA8IHRtcC5lbmQgJiYgdG1wLmVuZCAtIHRtcC5zdGFydCA+PSBzaXplIC0gMSkgewogCQkJbmV3LT5zdGFydCA9IHRtcC5zdGFydDsKIAkJCW5ldy0+ZW5kID0gdG1wLnN0YXJ0ICsgc2l6ZSAtIDE7CkBAIC0zNTgsOCArNDAzLDEwIEBACiBpbnQgYWxsb2NhdGVfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyb290LCBzdHJ1Y3QgcmVzb3VyY2UgKm5ldywKIAkJICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBtaW4sCiAJCSAgICAgIHJlc291cmNlX3NpemVfdCBtYXgsIHJlc291cmNlX3NpemVfdCBhbGlnbiwKLQkJICAgICAgdm9pZCAoKmFsaWduZikodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwKLQkJCQkgICAgIHJlc291cmNlX3NpemVfdCwgcmVzb3VyY2Vfc2l6ZV90KSwKKwkJICAgICAgcmVzb3VyY2Vfc2l6ZV90ICgqYWxpZ25mKSh2b2lkICosCisJCQkJCQljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQkJCXJlc291cmNlX3NpemVfdCwKKwkJCQkJCXJlc291cmNlX3NpemVfdCksCiAJCSAgICAgIHZvaWQgKmFsaWduZl9kYXRhKQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IDQ1MDhmZTcuLjZhMjEyYzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0yMzMsNyArMjMzLDcgQEAKICAqLwogc3RhdGljIERFRklORV9NVVRFWChzY2hlZF9kb21haW5zX211dGV4KTsKIAotI2lmZGVmIENPTkZJR19HUk9VUF9TQ0hFRAorI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIAogI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgogCkBAIC0yNDMsMTMgKzI0Myw3IEBACiAKIC8qIHRhc2sgZ3JvdXAgcmVsYXRlZCBpbmZvcm1hdGlvbiAqLwogc3RydWN0IHRhc2tfZ3JvdXAgewotI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIAlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JdWlkX3QgdWlkOwotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogCS8qIHNjaGVkdWxhYmxlIGVudGl0aWVzIG9mIHRoaXMgZ3JvdXAgb24gZWFjaCBjcHUgKi8KQEAgLTI3NCwzNSArMjY4LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNoaWxkcmVuOwogfTsKIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0KLS8qIEhlbHBlciBmdW5jdGlvbiB0byBwYXNzIHVpZCBpbmZvcm1hdGlvbiB0byBjcmVhdGVfc2NoZWRfdXNlcigpICovCi12b2lkIHNldF90Z191aWQoc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKQotewotCXVzZXItPnRnLT51aWQgPSB1c2VyLT51aWQ7Ci19Ci0KLS8qCi0gKiBSb290IHRhc2sgZ3JvdXAuCi0gKglFdmVyeSBVSUQgdGFzayBncm91cCAoaW5jbHVkaW5nIGluaXRfdGFza19ncm91cCBha2EgVUlELTApIHdpbGwKLSAqCWJlIGEgY2hpbGQgdG8gdGhpcyBncm91cC4KLSAqLwotc3RydWN0IHRhc2tfZ3JvdXAgcm9vdF90YXNrX2dyb3VwOwotCi0jaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLS8qIERlZmF1bHQgdGFzayBncm91cCdzIHNjaGVkIGVudGl0eSBvbiBlYWNoIGNwdSAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzY2hlZF9lbnRpdHksIGluaXRfc2NoZWRfZW50aXR5KTsKLS8qIERlZmF1bHQgdGFzayBncm91cCdzIGNmc19ycSBvbiBlYWNoIGNwdSAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBjZnNfcnEsIGluaXRfdGdfY2ZzX3JxKTsKLSNlbmRpZiAvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLwotCi0jaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNjaGVkX3J0X2VudGl0eSwgaW5pdF9zY2hlZF9ydF9lbnRpdHkpOwotc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBydF9ycSwgaW5pdF9ydF9ycV92YXIpOwotI2VuZGlmIC8qIENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLwotI2Vsc2UgLyogIUNPTkZJR19VU0VSX1NDSEVEICovCiAjZGVmaW5lIHJvb3RfdGFza19ncm91cCBpbml0X3Rhc2tfZ3JvdXAKLSNlbmRpZiAvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwogCiAvKiB0YXNrX2dyb3VwX2xvY2sgc2VyaWFsaXplcyBhZGQvcmVtb3ZlIG9mIHRhc2sgZ3JvdXBzIGFuZCBhbHNvIGNoYW5nZXMgdG8KICAqIGEgdGFzayBncm91cCdzIGNwdSBzaGFyZXMuCkBAIC0zMTgsMTEgKzI4NCw3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0jIGRlZmluZSBJTklUX1RBU0tfR1JPVVBfTE9BRAkoMipOSUNFXzBfTE9BRCkKLSNlbHNlIC8qICFDT05GSUdfVVNFUl9TQ0hFRCAqLwogIyBkZWZpbmUgSU5JVF9UQVNLX0dST1VQX0xPQUQJTklDRV8wX0xPQUQKLSNlbmRpZiAvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwogCiAvKgogICogQSB3ZWlnaHQgb2YgMCBvciAxIGNhbiBjYXVzZSBhcml0aG1ldGljcyBwcm9ibGVtcy4KQEAgLTM0OCwxMSArMzEwLDcgQEAKIHsKIAlzdHJ1Y3QgdGFza19ncm91cCAqdGc7CiAKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCXJjdV9yZWFkX2xvY2soKTsKLQl0ZyA9IF9fdGFza19jcmVkKHApLT51c2VyLT50ZzsKLQlyY3VfcmVhZF91bmxvY2soKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NHUk9VUF9TQ0hFRCkKKyNpZmRlZiBDT05GSUdfQ0dST1VQX1NDSEVECiAJdGcgPSBjb250YWluZXJfb2YodGFza19zdWJzeXNfc3RhdGUocCwgY3B1X2Nncm91cF9zdWJzeXNfaWQpLAogCQkJCXN0cnVjdCB0YXNrX2dyb3VwLCBjc3MpOwogI2Vsc2UKQEAgLTM4Myw3ICszNDEsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi0jZW5kaWYJLyogQ09ORklHX0dST1VQX1NDSEVEICovCisjZW5kaWYJLyogQ09ORklHX0NHUk9VUF9TQ0hFRCAqLwogCiAvKiBDRlMtcmVsYXRlZCBmaWVsZHMgaW4gYSBydW5xdWV1ZSAqLwogc3RydWN0IGNmc19ycSB7CkBAIC00NzgsNyArNDM2LDYgQEAKIAlzdHJ1Y3QgcnEgKnJxOwogCXN0cnVjdCBsaXN0X2hlYWQgbGVhZl9ydF9ycV9saXN0OwogCXN0cnVjdCB0YXNrX2dyb3VwICp0ZzsKLQlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZTsKICNlbmRpZgogfTsKIApAQCAtNjQ1LDYgKzYwMiwxMSBAQAogI2VuZGlmCiB9CiAKKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX2NoZWNrX3NjaGVkX2RvbWFpbihwKSBcCisJcmN1X2RlcmVmZXJlbmNlX2NoZWNrKChwKSwgXAorCQkJICAgICAgcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKCkgfHwgXAorCQkJICAgICAgbG9ja2RlcF9pc19oZWxkKCZzY2hlZF9kb21haW5zX211dGV4KSkKKwogLyoKICAqIFRoZSBkb21haW4gdHJlZSAocnEtPnNkKSBpcyBwcm90ZWN0ZWQgYnkgUkNVJ3MgcXVpZXNjZW50IHN0YXRlIHRyYW5zaXRpb24uCiAgKiBTZWUgZGV0YWNoX2Rlc3Ryb3lfZG9tYWluczogc3luY2hyb25pemVfc2NoZWQgZm9yIGRldGFpbHMuCkBAIC02NTMsNyArNjE1LDcgQEAKICAqIHByZWVtcHQtZGlzYWJsZWQgc2VjdGlvbnMuCiAgKi8KICNkZWZpbmUgZm9yX2VhY2hfZG9tYWluKGNwdSwgX19zZCkgXAotCWZvciAoX19zZCA9IHJjdV9kZXJlZmVyZW5jZShjcHVfcnEoY3B1KS0+c2QpOyBfX3NkOyBfX3NkID0gX19zZC0+cGFyZW50KQorCWZvciAoX19zZCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVja19zY2hlZF9kb21haW4oY3B1X3JxKGNwdSktPnNkKTsgX19zZDsgX19zZCA9IF9fc2QtPnBhcmVudCkKIAogI2RlZmluZSBjcHVfcnEoY3B1KQkJKCZwZXJfY3B1KHJ1bnF1ZXVlcywgKGNwdSkpKQogI2RlZmluZSB0aGlzX3JxKCkJCSgmX19nZXRfY3B1X3ZhcihydW5xdWV1ZXMpKQpAQCAtOTQxLDE2ICs5MDMsMzMgQEAKICNlbmRpZiAvKiBfX0FSQ0hfV0FOVF9VTkxPQ0tFRF9DVFhTVyAqLwogCiAvKgorICogQ2hlY2sgd2hldGhlciB0aGUgdGFzayBpcyB3YWtpbmcsIHdlIHVzZSB0aGlzIHRvIHN5bmNocm9uaXplIGFnYWluc3QKKyAqIHR0d3UoKSBzbyB0aGF0IHRhc2tfY3B1KCkgcmVwb3J0cyBhIHN0YWJsZSBudW1iZXIuCisgKgorICogV2UgbmVlZCB0byBtYWtlIGFuIGV4Y2VwdGlvbiBmb3IgUEZfU1RBUlRJTkcgdGFza3MgYmVjYXVzZSB0aGUgZm9yaworICogcGF0aCBtaWdodCByZXF1aXJlIHRhc2tfcnFfbG9jaygpIHRvIHdvcmssIGVnLiBpdCBjYW4gY2FsbAorICogc2V0X2NwdXNfYWxsb3dlZF9wdHIoKSBmcm9tIHRoZSBjcHVzZXQgY2xvbmVfbnMgY29kZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdGFza19pc193YWtpbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiB1bmxpa2VseSgocC0+c3RhdGUgPT0gVEFTS19XQUtJTkcpICYmICEocC0+ZmxhZ3MgJiBQRl9TVEFSVElORykpOworfQorCisvKgogICogX190YXNrX3JxX2xvY2sgLSBsb2NrIHRoZSBydW5xdWV1ZSBhIGdpdmVuIHRhc2sgcmVzaWRlcyBvbi4KICAqIE11c3QgYmUgY2FsbGVkIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpfX3Rhc2tfcnFfbG9jayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJX19hY3F1aXJlcyhycS0+bG9jaykKIHsKKwlzdHJ1Y3QgcnEgKnJxOworCiAJZm9yICg7OykgewotCQlzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTsKKwkJd2hpbGUgKHRhc2tfaXNfd2FraW5nKHApKQorCQkJY3B1X3JlbGF4KCk7CisJCXJxID0gdGFza19ycShwKTsKIAkJcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOwotCQlpZiAobGlrZWx5KHJxID09IHRhc2tfcnEocCkpKQorCQlpZiAobGlrZWx5KHJxID09IHRhc2tfcnEocCkgJiYgIXRhc2tfaXNfd2FraW5nKHApKSkKIAkJCXJldHVybiBycTsKIAkJcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7CiAJfQpAQCAtOTY3LDEwICs5NDYsMTIgQEAKIAlzdHJ1Y3QgcnEgKnJxOwogCiAJZm9yICg7OykgeworCQl3aGlsZSAodGFza19pc193YWtpbmcocCkpCisJCQljcHVfcmVsYXgoKTsKIAkJbG9jYWxfaXJxX3NhdmUoKmZsYWdzKTsKIAkJcnEgPSB0YXNrX3JxKHApOwogCQlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7Ci0JCWlmIChsaWtlbHkocnEgPT0gdGFza19ycShwKSkpCisJCWlmIChsaWtlbHkocnEgPT0gdGFza19ycShwKSAmJiAhdGFza19pc193YWtpbmcocCkpKQogCQkJcmV0dXJuIHJxOwogCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssICpmbGFncyk7CiAJfQpAQCAtMTM5MCwzMiArMTM3MSw2IEBACiAgLyogIDE1ICovIDExOTMwNDY0NywgMTQ4MTAyMzIwLCAxODY3Mzc3MDgsIDIzODYwOTI5NCwgMjg2MzMxMTUzLAogfTsKIAotc3RhdGljIHZvaWQgYWN0aXZhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXApOwotCi0vKgotICogcnVucXVldWUgaXRlcmF0b3IsIHRvIHN1cHBvcnQgU01QIGxvYWQtYmFsYW5jaW5nIGJldHdlZW4gZGlmZmVyZW50Ci0gKiBzY2hlZHVsaW5nIGNsYXNzZXMsIHdpdGhvdXQgaGF2aW5nIHRvIGV4cG9zZSB0aGVpciBpbnRlcm5hbCBkYXRhCi0gKiBzdHJ1Y3R1cmVzIHRvIHRoZSBsb2FkLWJhbGFuY2luZyBwcm9wZXI6Ci0gKi8KLXN0cnVjdCBycV9pdGVyYXRvciB7Ci0Jdm9pZCAqYXJnOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqKCpzdGFydCkodm9pZCAqKTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKigqbmV4dCkodm9pZCAqKTsKLX07Ci0KLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotYmFsYW5jZV90YXNrcyhzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCSAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCi0JICAgICAgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCAqYWxsX3Bpbm5lZCwKLQkgICAgICBpbnQgKnRoaXNfYmVzdF9wcmlvLCBzdHJ1Y3QgcnFfaXRlcmF0b3IgKml0ZXJhdG9yKTsKLQotc3RhdGljIGludAotaXRlcl9tb3ZlX29uZV90YXNrKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCSAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICAgc3RydWN0IHJxX2l0ZXJhdG9yICppdGVyYXRvcik7Ci0jZW5kaWYKLQogLyogVGltZSBzcGVudCBieSB0aGUgdGFza3Mgb2YgdGhlIGNwdSBhY2NvdW50aW5nIGdyb3VwIGV4ZWN1dGluZyBpbiAuLi4gKi8KIGVudW0gY3B1YWNjdF9zdGF0X2luZGV4IHsKIAlDUFVBQ0NUX1NUQVRfVVNFUiwJLyogLi4uIHVzZXIgbW9kZSAqLwpAQCAtMTUzMSw3ICsxNDg2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXBfb2YoaW50IGNwdSkKIHsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9IHJjdV9kZXJlZmVyZW5jZShjcHVfcnEoY3B1KS0+c2QpOworCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKGNwdV9ycShjcHUpLT5zZCk7CiAKIAlpZiAoIXNkKQogCQlyZXR1cm4gTlVMTDsKQEAgLTE3MDEsMTYgKzE2NTYsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX3NoYXJlc19sb2NrZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCi17Ci0JaWYgKHJvb3RfdGFza19ncm91cF9lbXB0eSgpKQotCQlyZXR1cm47Ci0KLQlyYXdfc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKLQl1cGRhdGVfc2hhcmVzKHNkKTsKLQlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7Ci19Ci0KIHN0YXRpYyB2b2lkIHVwZGF0ZV9oX2xvYWQobG9uZyBjcHUpCiB7CiAJaWYgKHJvb3RfdGFza19ncm91cF9lbXB0eSgpKQpAQCAtMTcyNSwxMCArMTY3MCw2IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2hhcmVzX2xvY2tlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKLXsKLX0KLQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUFJFRU1QVApAQCAtMTgwNSw2ICsxNzQ2LDUxIEBACiAJcmF3X3NwaW5fdW5sb2NrKCZidXNpZXN0LT5sb2NrKTsKIAlsb2NrX3NldF9zdWJjbGFzcygmdGhpc19ycS0+bG9jay5kZXBfbWFwLCAwLCBfUkVUX0lQXyk7CiB9CisKKy8qCisgKiBkb3VibGVfcnFfbG9jayAtIHNhZmVseSBsb2NrIHR3byBydW5xdWV1ZXMKKyAqCisgKiBOb3RlIHRoaXMgZG9lcyBub3QgZGlzYWJsZSBpbnRlcnJ1cHRzIGxpa2UgdGFza19ycV9sb2NrLAorICogeW91IG5lZWQgdG8gZG8gc28gbWFudWFsbHkgYmVmb3JlIGNhbGxpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGRvdWJsZV9ycV9sb2NrKHN0cnVjdCBycSAqcnExLCBzdHJ1Y3QgcnEgKnJxMikKKwlfX2FjcXVpcmVzKHJxMS0+bG9jaykKKwlfX2FjcXVpcmVzKHJxMi0+bG9jaykKK3sKKwlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CisJaWYgKHJxMSA9PSBycTIpIHsKKwkJcmF3X3NwaW5fbG9jaygmcnExLT5sb2NrKTsKKwkJX19hY3F1aXJlKHJxMi0+bG9jayk7CS8qIEZha2UgaXQgb3V0IDspICovCisJfSBlbHNlIHsKKwkJaWYgKHJxMSA8IHJxMikgeworCQkJcmF3X3NwaW5fbG9jaygmcnExLT5sb2NrKTsKKwkJCXJhd19zcGluX2xvY2tfbmVzdGVkKCZycTItPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKKwkJfSBlbHNlIHsKKwkJCXJhd19zcGluX2xvY2soJnJxMi0+bG9jayk7CisJCQlyYXdfc3Bpbl9sb2NrX25lc3RlZCgmcnExLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJCX0KKwl9CisJdXBkYXRlX3JxX2Nsb2NrKHJxMSk7CisJdXBkYXRlX3JxX2Nsb2NrKHJxMik7Cit9CisKKy8qCisgKiBkb3VibGVfcnFfdW5sb2NrIC0gc2FmZWx5IHVubG9jayB0d28gcnVucXVldWVzCisgKgorICogTm90ZSB0aGlzIGRvZXMgbm90IHJlc3RvcmUgaW50ZXJydXB0cyBsaWtlIHRhc2tfcnFfdW5sb2NrLAorICogeW91IG5lZWQgdG8gZG8gc28gbWFudWFsbHkgYWZ0ZXIgY2FsbGluZy4KKyAqLworc3RhdGljIHZvaWQgZG91YmxlX3JxX3VubG9jayhzdHJ1Y3QgcnEgKnJxMSwgc3RydWN0IHJxICpycTIpCisJX19yZWxlYXNlcyhycTEtPmxvY2spCisJX19yZWxlYXNlcyhycTItPmxvY2spCit7CisJcmF3X3NwaW5fdW5sb2NrKCZycTEtPmxvY2spOworCWlmIChycTEgIT0gcnEyKQorCQlyYXdfc3Bpbl91bmxvY2soJnJxMi0+bG9jayk7CisJZWxzZQorCQlfX3JlbGVhc2UocnEyLT5sb2NrKTsKK30KKwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRApAQCAtMTgzNCwxOCArMTgyMCwxNCBAQAogI2VuZGlmCiB9CiAKLSNpbmNsdWRlICJzY2hlZF9zdGF0cy5oIgotI2luY2x1ZGUgInNjaGVkX2lkbGV0YXNrLmMiCi0jaW5jbHVkZSAic2NoZWRfZmFpci5jIgotI2luY2x1ZGUgInNjaGVkX3J0LmMiCi0jaWZkZWYgQ09ORklHX1NDSEVEX0RFQlVHCi0jIGluY2x1ZGUgInNjaGVkX2RlYnVnLmMiCi0jZW5kaWYKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgcnRfc2NoZWRfY2xhc3M7CiAKICNkZWZpbmUgc2NoZWRfY2xhc3NfaGlnaGVzdCAoJnJ0X3NjaGVkX2NsYXNzKQogI2RlZmluZSBmb3JfZWFjaF9jbGFzcyhjbGFzcykgXAogICAgZm9yIChjbGFzcyA9IHNjaGVkX2NsYXNzX2hpZ2hlc3Q7IGNsYXNzOyBjbGFzcyA9IGNsYXNzLT5uZXh0KQogCisjaW5jbHVkZSAic2NoZWRfc3RhdHMuaCIKKwogc3RhdGljIHZvaWQgaW5jX25yX3J1bm5pbmcoc3RydWN0IHJxICpycSkKIHsKIAlycS0+bnJfcnVubmluZysrOwpAQCAtMTg4MywxMyArMTg2NSwxNCBAQAogCSphdmcgKz0gZGlmZiA+PiAzOwogfQogCi1zdGF0aWMgdm9pZCBlbnF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwKQorc3RhdGljIHZvaWQKK2VucXVldWVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXAsIGJvb2wgaGVhZCkKIHsKIAlpZiAod2FrZXVwKQogCQlwLT5zZS5zdGFydF9ydW50aW1lID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKIAogCXNjaGVkX2luZm9fcXVldWVkKHApOwotCXAtPnNjaGVkX2NsYXNzLT5lbnF1ZXVlX3Rhc2socnEsIHAsIHdha2V1cCk7CisJcC0+c2NoZWRfY2xhc3MtPmVucXVldWVfdGFzayhycSwgcCwgd2FrZXVwLCBoZWFkKTsKIAlwLT5zZS5vbl9ycSA9IDE7CiB9CiAKQEAgLTE5MTIsNiArMTg5NSwzNyBAQAogfQogCiAvKgorICogYWN0aXZhdGVfdGFzayAtIG1vdmUgYSB0YXNrIHRvIHRoZSBydW5xdWV1ZS4KKyAqLworc3RhdGljIHZvaWQgYWN0aXZhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXApCit7CisJaWYgKHRhc2tfY29udHJpYnV0ZXNfdG9fbG9hZChwKSkKKwkJcnEtPm5yX3VuaW50ZXJydXB0aWJsZS0tOworCisJZW5xdWV1ZV90YXNrKHJxLCBwLCB3YWtldXAsIGZhbHNlKTsKKwlpbmNfbnJfcnVubmluZyhycSk7Cit9CisKKy8qCisgKiBkZWFjdGl2YXRlX3Rhc2sgLSByZW1vdmUgYSB0YXNrIGZyb20gdGhlIHJ1bnF1ZXVlLgorICovCitzdGF0aWMgdm9pZCBkZWFjdGl2YXRlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc2xlZXApCit7CisJaWYgKHRhc2tfY29udHJpYnV0ZXNfdG9fbG9hZChwKSkKKwkJcnEtPm5yX3VuaW50ZXJydXB0aWJsZSsrOworCisJZGVxdWV1ZV90YXNrKHJxLCBwLCBzbGVlcCk7CisJZGVjX25yX3J1bm5pbmcocnEpOworfQorCisjaW5jbHVkZSAic2NoZWRfaWRsZXRhc2suYyIKKyNpbmNsdWRlICJzY2hlZF9mYWlyLmMiCisjaW5jbHVkZSAic2NoZWRfcnQuYyIKKyNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKKyMgaW5jbHVkZSAic2NoZWRfZGVidWcuYyIKKyNlbmRpZgorCisvKgogICogX19ub3JtYWxfcHJpbyAtIHJldHVybiB0aGUgcHJpb3JpdHkgdGhhdCBpcyBiYXNlZCBvbiB0aGUgc3RhdGljIHByaW8KICAqLwogc3RhdGljIGlubGluZSBpbnQgX19ub3JtYWxfcHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCkBAIC0xOTU3LDMwICsxOTcxLDYgQEAKIAlyZXR1cm4gcC0+cHJpbzsKIH0KIAotLyoKLSAqIGFjdGl2YXRlX3Rhc2sgLSBtb3ZlIGEgdGFzayB0byB0aGUgcnVucXVldWUuCi0gKi8KLXN0YXRpYyB2b2lkIGFjdGl2YXRlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwKQotewotCWlmICh0YXNrX2NvbnRyaWJ1dGVzX3RvX2xvYWQocCkpCi0JCXJxLT5ucl91bmludGVycnVwdGlibGUtLTsKLQotCWVucXVldWVfdGFzayhycSwgcCwgd2FrZXVwKTsKLQlpbmNfbnJfcnVubmluZyhycSk7Ci19Ci0KLS8qCi0gKiBkZWFjdGl2YXRlX3Rhc2sgLSByZW1vdmUgYSB0YXNrIGZyb20gdGhlIHJ1bnF1ZXVlLgotICovCi1zdGF0aWMgdm9pZCBkZWFjdGl2YXRlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc2xlZXApCi17Ci0JaWYgKHRhc2tfY29udHJpYnV0ZXNfdG9fbG9hZChwKSkKLQkJcnEtPm5yX3VuaW50ZXJydXB0aWJsZSsrOwotCi0JZGVxdWV1ZV90YXNrKHJxLCBwLCBzbGVlcCk7Ci0JZGVjX25yX3J1bm5pbmcocnEpOwotfQotCiAvKioKICAqIHRhc2tfY3VyciAtIGlzIHRoaXMgdGFzayBjdXJyZW50bHkgZXhlY3V0aW5nIG9uIGEgQ1BVPwogICogQHA6IHRoZSB0YXNrIGluIHF1ZXN0aW9uLgpAQCAtMjMyMCwxNCArMjMxMCwxMiBAQAogfQogCiAvKgotICogQ2FsbGVkIGZyb206CisgKiBHZXRzIGNhbGxlZCBmcm9tIDMgc2l0ZXMgKGV4ZWMsIGZvcmssIHdha2V1cCksIHNpbmNlIGl0IGlzIGNhbGxlZCB3aXRob3V0CisgKiBob2xkaW5nIHJxLT5sb2NrIHdlIG5lZWQgdG8gZW5zdXJlIC0+Y3B1c19hbGxvd2VkIGlzIHN0YWJsZSwgdGhpcyBpcyBkb25lCisgKiBieToKICAqCi0gKiAgLSBmb3JrLCBAcCBpcyBzdGFibGUgYmVjYXVzZSBpdCBpc24ndCBvbiB0aGUgdGFza2xpc3QgeWV0Ci0gKgotICogIC0gZXhlYywgQHAgaXMgdW5zdGFibGUsIHJldHJ5IGxvb3AKLSAqCi0gKiAgLSB3YWtlLXVwLCB3ZSBzZXJpYWxpemUgLT5jcHVzX2FsbG93ZWQgYWdhaW5zdCBUQVNLX1dBS0lORyBzbwotICogICAgICAgICAgICAgd2Ugc2hvdWxkIGJlIGdvb2QuCisgKiAgZXhlYzogICAgICAgICAgIGlzIHVuc3RhYmxlLCByZXRyeSBsb29wCisgKiAgZm9yayAmIHdha2UtdXA6IHNlcmlhbGl6ZSAtPmNwdXNfYWxsb3dlZCBhZ2FpbnN0IFRBU0tfV0FLSU5HCiAgKi8KIHN0YXRpYyBpbmxpbmUKIGludCBzZWxlY3RfdGFza19ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzZF9mbGFncywgaW50IHdha2VfZmxhZ3MpCkBAIC0yNDEwLDE0ICsyMzk4LDI3IEBACiAJX190YXNrX3JxX3VubG9jayhycSk7CiAKIAljcHUgPSBzZWxlY3RfdGFza19ycShwLCBTRF9CQUxBTkNFX1dBS0UsIHdha2VfZmxhZ3MpOwotCWlmIChjcHUgIT0gb3JpZ19jcHUpCisJaWYgKGNwdSAhPSBvcmlnX2NwdSkgeworCQkvKgorCQkgKiBTaW5jZSB3ZSBtaWdyYXRlIHRoZSB0YXNrIHdpdGhvdXQgaG9sZGluZyBhbnkgcnEtPmxvY2ssCisJCSAqIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRhc2tfcnFfbG9jaygpLCBzaW5jZSB0aGF0CisJCSAqIG1pZ2h0IGVuZCB1cCBsb2NraW5nIGFuIGludmFsaWQgcnEuCisJCSAqLwogCQlzZXRfdGFza19jcHUocCwgY3B1KTsKKwl9CiAKLQlycSA9IF9fdGFza19ycV9sb2NrKHApOworCXJxID0gY3B1X3JxKGNwdSk7CisJcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOwogCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAKKwkvKgorCSAqIFdlIG1pZ3JhdGVkIHRoZSB0YXNrIHdpdGhvdXQgaG9sZGluZyBlaXRoZXIgcnEtPmxvY2ssIGhvd2V2ZXIKKwkgKiBzaW5jZSB0aGUgdGFzayBpcyBub3Qgb24gdGhlIHRhc2sgbGlzdCBpdHNlbGYsIG5vYm9keSBlbHNlCisJICogd2lsbCB0cnkgYW5kIG1pZ3JhdGUgdGhlIHRhc2ssIGhlbmNlIHRoZSBycSBzaG91bGQgbWF0Y2ggdGhlCisJICogY3B1IHdlIGp1c3QgbW92ZWQgaXQgdG8uCisJICovCisJV0FSTl9PTih0YXNrX2NwdShwKSAhPSBjcHUpOwogCVdBUk5fT04ocC0+c3RhdGUgIT0gVEFTS19XQUtJTkcpOwotCWNwdSA9IHRhc2tfY3B1KHApOwogCiAjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKIAlzY2hlZHN0YXRfaW5jKHJxLCB0dHd1X2NvdW50KTsKQEAgLTI2MjAsOSArMjYyMSw2IEBACiAJaWYgKHAtPnNjaGVkX2NsYXNzLT50YXNrX2ZvcmspCiAJCXAtPnNjaGVkX2NsYXNzLT50YXNrX2ZvcmsocCk7CiAKLSNpZmRlZiBDT05GSUdfU01QCi0JY3B1ID0gc2VsZWN0X3Rhc2tfcnEocCwgU0RfQkFMQU5DRV9GT1JLLCAwKTsKLSNlbmRpZgogCXNldF90YXNrX2NwdShwLCBjcHUpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU0NIRURTVEFUUykgfHwgZGVmaW5lZChDT05GSUdfVEFTS19ERUxBWV9BQ0NUKQpAQCAtMjY1Miw4ICsyNjUwLDI5IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcnEgKnJxOworCWludCBjcHUgPSBnZXRfY3B1KCk7CiAKLQlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOworI2lmZGVmIENPTkZJR19TTVAKKwkvKgorCSAqIEZvcmsgYmFsYW5jaW5nLCBkbyBpdCBoZXJlIGFuZCBub3QgZWFybGllciBiZWNhdXNlOgorCSAqICAtIGNwdXNfYWxsb3dlZCBjYW4gY2hhbmdlIGluIHRoZSBmb3JrIHBhdGgKKwkgKiAgLSBhbnkgcHJldmlvdXNseSBzZWxlY3RlZCBjcHUgbWlnaHQgZGlzYXBwZWFyIHRocm91Z2ggaG90cGx1ZworCSAqCisJICogV2Ugc3RpbGwgaGF2ZSBUQVNLX1dBS0lORyBidXQgUEZfU1RBUlRJTkcgaXMgZ29uZSBub3csIG1lYW5pbmcKKwkgKiAtPmNwdXNfYWxsb3dlZCBpcyBzdGFibGUsIHdlIGhhdmUgcHJlZW1wdGlvbiBkaXNhYmxlZCwgbWVhbmluZworCSAqIGNwdV9vbmxpbmVfbWFzayBpcyBzdGFibGUuCisJICovCisJY3B1ID0gc2VsZWN0X3Rhc2tfcnEocCwgU0RfQkFMQU5DRV9GT1JLLCAwKTsKKwlzZXRfdGFza19jcHUocCwgY3B1KTsKKyNlbmRpZgorCisJLyoKKwkgKiBTaW5jZSB0aGUgdGFzayBpcyBub3Qgb24gdGhlIHJxIGFuZCB3ZSBzdGlsbCBoYXZlIFRBU0tfV0FLSU5HIHNldAorCSAqIG5vYm9keSBlbHNlIHdpbGwgbWlncmF0ZSB0aGlzIHRhc2suCisJICovCisJcnEgPSBjcHVfcnEoY3B1KTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisKIAlCVUdfT04ocC0+c3RhdGUgIT0gVEFTS19XQUtJTkcpOwogCXAtPnN0YXRlID0gVEFTS19SVU5OSU5HOwogCXVwZGF0ZV9ycV9jbG9jayhycSk7CkBAIC0yNjY1LDYgKzI2ODQsNyBAQAogCQlwLT5zY2hlZF9jbGFzcy0+dGFza193b2tlbihycSwgcCk7CiAjZW5kaWYKIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKKwlwdXRfY3B1KCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUFJFRU1QVF9OT1RJRklFUlMKQEAgLTI3ODMsNyArMjgwMywxMyBAQAogCSAqLwogCXByZXZfc3RhdGUgPSBwcmV2LT5zdGF0ZTsKIAlmaW5pc2hfYXJjaF9zd2l0Y2gocHJldik7Ci0JcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKGN1cnJlbnQsIGNwdV9vZihycSkpOworI2lmZGVmIF9fQVJDSF9XQU5UX0lOVEVSUlVQVFNfT05fQ1RYU1cKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworI2VuZGlmIC8qIF9fQVJDSF9XQU5UX0lOVEVSUlVQVFNfT05fQ1RYU1cgKi8KKwlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oY3VycmVudCk7CisjaWZkZWYgX19BUkNIX1dBTlRfSU5URVJSVVBUU19PTl9DVFhTVworCWxvY2FsX2lycV9lbmFibGUoKTsKKyNlbmRpZiAvKiBfX0FSQ0hfV0FOVF9JTlRFUlJVUFRTX09OX0NUWFNXICovCiAJZmluaXNoX2xvY2tfc3dpdGNoKHJxLCBwcmV2KTsKIAogCWZpcmVfc2NoZWRfaW5fcHJlZW1wdF9ub3RpZmllcnMoY3VycmVudCk7CkBAIC0zMDg4LDUwICszMTE0LDYgQEAKICNpZmRlZiBDT05GSUdfU01QCiAKIC8qCi0gKiBkb3VibGVfcnFfbG9jayAtIHNhZmVseSBsb2NrIHR3byBydW5xdWV1ZXMKLSAqCi0gKiBOb3RlIHRoaXMgZG9lcyBub3QgZGlzYWJsZSBpbnRlcnJ1cHRzIGxpa2UgdGFza19ycV9sb2NrLAotICogeW91IG5lZWQgdG8gZG8gc28gbWFudWFsbHkgYmVmb3JlIGNhbGxpbmcuCi0gKi8KLXN0YXRpYyB2b2lkIGRvdWJsZV9ycV9sb2NrKHN0cnVjdCBycSAqcnExLCBzdHJ1Y3QgcnEgKnJxMikKLQlfX2FjcXVpcmVzKHJxMS0+bG9jaykKLQlfX2FjcXVpcmVzKHJxMi0+bG9jaykKLXsKLQlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7Ci0JaWYgKHJxMSA9PSBycTIpIHsKLQkJcmF3X3NwaW5fbG9jaygmcnExLT5sb2NrKTsKLQkJX19hY3F1aXJlKHJxMi0+bG9jayk7CS8qIEZha2UgaXQgb3V0IDspICovCi0JfSBlbHNlIHsKLQkJaWYgKHJxMSA8IHJxMikgewotCQkJcmF3X3NwaW5fbG9jaygmcnExLT5sb2NrKTsKLQkJCXJhd19zcGluX2xvY2tfbmVzdGVkKCZycTItPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKLQkJfSBlbHNlIHsKLQkJCXJhd19zcGluX2xvY2soJnJxMi0+bG9jayk7Ci0JCQlyYXdfc3Bpbl9sb2NrX25lc3RlZCgmcnExLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7Ci0JCX0KLQl9Ci0JdXBkYXRlX3JxX2Nsb2NrKHJxMSk7Ci0JdXBkYXRlX3JxX2Nsb2NrKHJxMik7Ci19Ci0KLS8qCi0gKiBkb3VibGVfcnFfdW5sb2NrIC0gc2FmZWx5IHVubG9jayB0d28gcnVucXVldWVzCi0gKgotICogTm90ZSB0aGlzIGRvZXMgbm90IHJlc3RvcmUgaW50ZXJydXB0cyBsaWtlIHRhc2tfcnFfdW5sb2NrLAotICogeW91IG5lZWQgdG8gZG8gc28gbWFudWFsbHkgYWZ0ZXIgY2FsbGluZy4KLSAqLwotc3RhdGljIHZvaWQgZG91YmxlX3JxX3VubG9jayhzdHJ1Y3QgcnEgKnJxMSwgc3RydWN0IHJxICpycTIpCi0JX19yZWxlYXNlcyhycTEtPmxvY2spCi0JX19yZWxlYXNlcyhycTItPmxvY2spCi17Ci0JcmF3X3NwaW5fdW5sb2NrKCZycTEtPmxvY2spOwotCWlmIChycTEgIT0gcnEyKQotCQlyYXdfc3Bpbl91bmxvY2soJnJxMi0+bG9jayk7Ci0JZWxzZQotCQlfX3JlbGVhc2UocnEyLT5sb2NrKTsKLX0KLQotLyoKICAqIHNjaGVkX2V4ZWMgLSBleGVjdmUoKSBpcyBhIHZhbHVhYmxlIGJhbGFuY2luZyBvcHBvcnR1bml0eSwgYmVjYXVzZSBhdAogICogdGhpcyBwb2ludCB0aGUgdGFzayBoYXMgdGhlIHNtYWxsZXN0IGVmZmVjdGl2ZSBtZW1vcnkgYW5kIGNhY2hlIGZvb3RwcmludC4KICAqLwpAQCAtMzE3OSwxNzcxICszMTYxLDYgQEAKIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIH0KIAotLyoKLSAqIHB1bGxfdGFzayAtIG1vdmUgYSB0YXNrIGZyb20gYSByZW1vdGUgcnVucXVldWUgdG8gdGhlIGxvY2FsIHJ1bnF1ZXVlLgotICogQm90aCBydW5xdWV1ZXMgbXVzdCBiZSBsb2NrZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHB1bGxfdGFzayhzdHJ1Y3QgcnEgKnNyY19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAotCQkgICAgICBzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSkKLXsKLQlkZWFjdGl2YXRlX3Rhc2soc3JjX3JxLCBwLCAwKTsKLQlzZXRfdGFza19jcHUocCwgdGhpc19jcHUpOwotCWFjdGl2YXRlX3Rhc2sodGhpc19ycSwgcCwgMCk7Ci0JY2hlY2tfcHJlZW1wdF9jdXJyKHRoaXNfcnEsIHAsIDApOwotfQotCi0vKgotICogY2FuX21pZ3JhdGVfdGFzayAtIG1heSB0YXNrIHAgZnJvbSBydW5xdWV1ZSBycSBiZSBtaWdyYXRlZCB0byB0aGlzX2NwdT8KLSAqLwotc3RhdGljCi1pbnQgY2FuX21pZ3JhdGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBycSAqcnEsIGludCB0aGlzX2NwdSwKLQkJICAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCSAgICAgaW50ICphbGxfcGlubmVkKQotewotCWludCB0c2tfY2FjaGVfaG90ID0gMDsKLQkvKgotCSAqIFdlIGRvIG5vdCBtaWdyYXRlIHRhc2tzIHRoYXQgYXJlOgotCSAqIDEpIHJ1bm5pbmcgKG9idmlvdXNseSksIG9yCi0JICogMikgY2Fubm90IGJlIG1pZ3JhdGVkIHRvIHRoaXMgQ1BVIGR1ZSB0byBjcHVzX2FsbG93ZWQsIG9yCi0JICogMykgYXJlIGNhY2hlLWhvdCBvbiB0aGVpciBjdXJyZW50IENQVS4KLQkgKi8KLQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsICZwLT5jcHVzX2FsbG93ZWQpKSB7Ci0JCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfZmFpbGVkX21pZ3JhdGlvbnNfYWZmaW5lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCSphbGxfcGlubmVkID0gMDsKLQotCWlmICh0YXNrX3J1bm5pbmcocnEsIHApKSB7Ci0JCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfZmFpbGVkX21pZ3JhdGlvbnNfcnVubmluZyk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qCi0JICogQWdncmVzc2l2ZSBtaWdyYXRpb24gaWY6Ci0JICogMSkgdGFzayBpcyBjYWNoZSBjb2xkLCBvcgotCSAqIDIpIHRvbyBtYW55IGJhbGFuY2UgYXR0ZW1wdHMgaGF2ZSBmYWlsZWQuCi0JICovCi0KLQl0c2tfY2FjaGVfaG90ID0gdGFza19ob3QocCwgcnEtPmNsb2NrLCBzZCk7Ci0JaWYgKCF0c2tfY2FjaGVfaG90IHx8Ci0JCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA+IHNkLT5jYWNoZV9uaWNlX3RyaWVzKSB7Ci0jaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKLQkJaWYgKHRza19jYWNoZV9ob3QpIHsKLQkJCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2hvdF9nYWluZWRbaWRsZV0pOwotCQkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mb3JjZWRfbWlncmF0aW9ucyk7Ci0JCX0KLSNlbmRpZgotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAodHNrX2NhY2hlX2hvdCkgewotCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZhaWxlZF9taWdyYXRpb25zX2hvdCk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWJhbGFuY2VfdGFza3Moc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkgICAgICB1bnNpZ25lZCBsb25nIG1heF9sb2FkX21vdmUsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAotCSAgICAgIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgKmFsbF9waW5uZWQsCi0JICAgICAgaW50ICp0aGlzX2Jlc3RfcHJpbywgc3RydWN0IHJxX2l0ZXJhdG9yICppdGVyYXRvcikKLXsKLQlpbnQgbG9vcHMgPSAwLCBwdWxsZWQgPSAwLCBwaW5uZWQgPSAwOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKLQlsb25nIHJlbV9sb2FkX21vdmUgPSBtYXhfbG9hZF9tb3ZlOwotCi0JaWYgKG1heF9sb2FkX21vdmUgPT0gMCkKLQkJZ290byBvdXQ7Ci0KLQlwaW5uZWQgPSAxOwotCi0JLyoKLQkgKiBTdGFydCB0aGUgbG9hZC1iYWxhbmNpbmcgaXRlcmF0b3I6Ci0JICovCi0JcCA9IGl0ZXJhdG9yLT5zdGFydChpdGVyYXRvci0+YXJnKTsKLW5leHQ6Ci0JaWYgKCFwIHx8IGxvb3BzKysgPiBzeXNjdGxfc2NoZWRfbnJfbWlncmF0ZSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoKHAtPnNlLmxvYWQud2VpZ2h0ID4+IDEpID4gcmVtX2xvYWRfbW92ZSB8fAotCSAgICAhY2FuX21pZ3JhdGVfdGFzayhwLCBidXNpZXN0LCB0aGlzX2NwdSwgc2QsIGlkbGUsICZwaW5uZWQpKSB7Ci0JCXAgPSBpdGVyYXRvci0+bmV4dChpdGVyYXRvci0+YXJnKTsKLQkJZ290byBuZXh0OwotCX0KLQotCXB1bGxfdGFzayhidXNpZXN0LCBwLCB0aGlzX3JxLCB0aGlzX2NwdSk7Ci0JcHVsbGVkKys7Ci0JcmVtX2xvYWRfbW92ZSAtPSBwLT5zZS5sb2FkLndlaWdodDsKLQotI2lmZGVmIENPTkZJR19QUkVFTVBUCi0JLyoKLQkgKiBORVdJRExFIGJhbGFuY2luZyBpcyBhIHNvdXJjZSBvZiBsYXRlbmN5LCBzbyBwcmVlbXB0aWJsZSBrZXJuZWxzCi0JICogd2lsbCBzdG9wIGFmdGVyIHRoZSBmaXJzdCB0YXNrIGlzIHB1bGxlZCB0byBtaW5pbWl6ZSB0aGUgY3JpdGljYWwKLQkgKiBzZWN0aW9uLgotCSAqLwotCWlmIChpZGxlID09IENQVV9ORVdMWV9JRExFKQotCQlnb3RvIG91dDsKLSNlbmRpZgotCi0JLyoKLQkgKiBXZSBvbmx5IHdhbnQgdG8gc3RlYWwgdXAgdG8gdGhlIHByZXNjcmliZWQgYW1vdW50IG9mIHdlaWdodGVkIGxvYWQuCi0JICovCi0JaWYgKHJlbV9sb2FkX21vdmUgPiAwKSB7Ci0JCWlmIChwLT5wcmlvIDwgKnRoaXNfYmVzdF9wcmlvKQotCQkJKnRoaXNfYmVzdF9wcmlvID0gcC0+cHJpbzsKLQkJcCA9IGl0ZXJhdG9yLT5uZXh0KGl0ZXJhdG9yLT5hcmcpOwotCQlnb3RvIG5leHQ7Ci0JfQotb3V0OgotCS8qCi0JICogUmlnaHQgbm93LCB0aGlzIGlzIG9uZSBvZiBvbmx5IHR3byBwbGFjZXMgcHVsbF90YXNrKCkgaXMgY2FsbGVkLAotCSAqIHNvIHdlIGNhbiBzYWZlbHkgY29sbGVjdCBwdWxsX3Rhc2soKSBzdGF0cyBoZXJlIHJhdGhlciB0aGFuCi0JICogaW5zaWRlIHB1bGxfdGFzaygpLgotCSAqLwotCXNjaGVkc3RhdF9hZGQoc2QsIGxiX2dhaW5lZFtpZGxlXSwgcHVsbGVkKTsKLQotCWlmIChhbGxfcGlubmVkKQotCQkqYWxsX3Bpbm5lZCA9IHBpbm5lZDsKLQotCXJldHVybiBtYXhfbG9hZF9tb3ZlIC0gcmVtX2xvYWRfbW92ZTsKLX0KLQotLyoKLSAqIG1vdmVfdGFza3MgdHJpZXMgdG8gbW92ZSB1cCB0byBtYXhfbG9hZF9tb3ZlIHdlaWdodGVkIGxvYWQgZnJvbSBidXNpZXN0IHRvCi0gKiB0aGlzX3JxLCBhcyBwYXJ0IG9mIGEgYmFsYW5jaW5nIG9wZXJhdGlvbiB3aXRoaW4gZG9tYWluICJzZCIuCi0gKiBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBhbmQgMCBvdGhlcndpc2UuCi0gKgotICogQ2FsbGVkIHdpdGggYm90aCBydW5xdWV1ZXMgbG9ja2VkLgotICovCi1zdGF0aWMgaW50IG1vdmVfdGFza3Moc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLAotCQkgICAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCSAgICAgIGludCAqYWxsX3Bpbm5lZCkKLXsKLQljb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKmNsYXNzID0gc2NoZWRfY2xhc3NfaGlnaGVzdDsKLQl1bnNpZ25lZCBsb25nIHRvdGFsX2xvYWRfbW92ZWQgPSAwOwotCWludCB0aGlzX2Jlc3RfcHJpbyA9IHRoaXNfcnEtPmN1cnItPnByaW87Ci0KLQlkbyB7Ci0JCXRvdGFsX2xvYWRfbW92ZWQgKz0KLQkJCWNsYXNzLT5sb2FkX2JhbGFuY2UodGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCi0JCQkJbWF4X2xvYWRfbW92ZSAtIHRvdGFsX2xvYWRfbW92ZWQsCi0JCQkJc2QsIGlkbGUsIGFsbF9waW5uZWQsICZ0aGlzX2Jlc3RfcHJpbyk7Ci0JCWNsYXNzID0gY2xhc3MtPm5leHQ7Ci0KLSNpZmRlZiBDT05GSUdfUFJFRU1QVAotCQkvKgotCQkgKiBORVdJRExFIGJhbGFuY2luZyBpcyBhIHNvdXJjZSBvZiBsYXRlbmN5LCBzbyBwcmVlbXB0aWJsZQotCQkgKiBrZXJuZWxzIHdpbGwgc3RvcCBhZnRlciB0aGUgZmlyc3QgdGFzayBpcyBwdWxsZWQgdG8gbWluaW1pemUKLQkJICogdGhlIGNyaXRpY2FsIHNlY3Rpb24uCi0JCSAqLwotCQlpZiAoaWRsZSA9PSBDUFVfTkVXTFlfSURMRSAmJiB0aGlzX3JxLT5ucl9ydW5uaW5nKQotCQkJYnJlYWs7Ci0jZW5kaWYKLQl9IHdoaWxlIChjbGFzcyAmJiBtYXhfbG9hZF9tb3ZlID4gdG90YWxfbG9hZF9tb3ZlZCk7Ci0KLQlyZXR1cm4gdG90YWxfbG9hZF9tb3ZlZCA+IDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWl0ZXJfbW92ZV9vbmVfdGFzayhzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCQkgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCSAgIHN0cnVjdCBycV9pdGVyYXRvciAqaXRlcmF0b3IpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwID0gaXRlcmF0b3ItPnN0YXJ0KGl0ZXJhdG9yLT5hcmcpOwotCWludCBwaW5uZWQgPSAwOwotCi0Jd2hpbGUgKHApIHsKLQkJaWYgKGNhbl9taWdyYXRlX3Rhc2socCwgYnVzaWVzdCwgdGhpc19jcHUsIHNkLCBpZGxlLCAmcGlubmVkKSkgewotCQkJcHVsbF90YXNrKGJ1c2llc3QsIHAsIHRoaXNfcnEsIHRoaXNfY3B1KTsKLQkJCS8qCi0JCQkgKiBSaWdodCBub3csIHRoaXMgaXMgb25seSB0aGUgc2Vjb25kIHBsYWNlIHB1bGxfdGFzaygpCi0JCQkgKiBpcyBjYWxsZWQsIHNvIHdlIGNhbiBzYWZlbHkgY29sbGVjdCBwdWxsX3Rhc2soKQotCQkJICogc3RhdHMgaGVyZSByYXRoZXIgdGhhbiBpbnNpZGUgcHVsbF90YXNrKCkuCi0JCQkgKi8KLQkJCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2dhaW5lZFtpZGxlXSk7Ci0KLQkJCXJldHVybiAxOwotCQl9Ci0JCXAgPSBpdGVyYXRvci0+bmV4dChpdGVyYXRvci0+YXJnKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIG1vdmVfb25lX3Rhc2sgdHJpZXMgdG8gbW92ZSBleGFjdGx5IG9uZSB0YXNrIGZyb20gYnVzaWVzdCB0byB0aGlzX3JxLCBhcwotICogcGFydCBvZiBhY3RpdmUgYmFsYW5jaW5nIG9wZXJhdGlvbnMgd2l0aGluICJkb21haW4iLgotICogUmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgYW5kIDAgb3RoZXJ3aXNlLgotICoKLSAqIENhbGxlZCB3aXRoIGJvdGggcnVucXVldWVzIGxvY2tlZC4KLSAqLwotc3RhdGljIGludCBtb3ZlX29uZV90YXNrKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCQkgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQotewotCWNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqY2xhc3M7Ci0KLQlmb3JfZWFjaF9jbGFzcyhjbGFzcykgewotCQlpZiAoY2xhc3MtPm1vdmVfb25lX3Rhc2sodGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsIHNkLCBpZGxlKSkKLQkJCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotLyoqKioqKioqKiogSGVscGVycyBmb3IgZmluZF9idXNpZXN0X2dyb3VwICoqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBzZF9sYl9zdGF0cyAtIFN0cnVjdHVyZSB0byBzdG9yZSB0aGUgc3RhdGlzdGljcyBvZiBhIHNjaGVkX2RvbWFpbgotICogCQlkdXJpbmcgbG9hZCBiYWxhbmNpbmcuCi0gKi8KLXN0cnVjdCBzZF9sYl9zdGF0cyB7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpidXNpZXN0OyAvKiBCdXNpZXN0IGdyb3VwIGluIHRoaXMgc2QgKi8KLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnRoaXM7ICAvKiBMb2NhbCBncm91cCBpbiB0aGlzIHNkICovCi0JdW5zaWduZWQgbG9uZyB0b3RhbF9sb2FkOyAgLyogVG90YWwgbG9hZCBvZiBhbGwgZ3JvdXBzIGluIHNkICovCi0JdW5zaWduZWQgbG9uZyB0b3RhbF9wd3I7ICAgLyoJVG90YWwgcG93ZXIgb2YgYWxsIGdyb3VwcyBpbiBzZCAqLwotCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWQ7CSAgIC8qIEF2ZXJhZ2UgbG9hZCBhY3Jvc3MgYWxsIGdyb3VwcyBpbiBzZCAqLwotCi0JLyoqIFN0YXRpc3RpY3Mgb2YgdGhpcyBncm91cCAqLwotCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkOwotCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkX3Blcl90YXNrOwotCXVuc2lnbmVkIGxvbmcgdGhpc19ucl9ydW5uaW5nOwotCi0JLyogU3RhdGlzdGljcyBvZiB0aGUgYnVzaWVzdCBncm91cCAqLwotCXVuc2lnbmVkIGxvbmcgbWF4X2xvYWQ7Ci0JdW5zaWduZWQgbG9uZyBidXNpZXN0X2xvYWRfcGVyX3Rhc2s7Ci0JdW5zaWduZWQgbG9uZyBidXNpZXN0X25yX3J1bm5pbmc7Ci0KLQlpbnQgZ3JvdXBfaW1iOyAvKiBJcyB0aGVyZSBpbWJhbGFuY2UgaW4gdGhpcyBzZCAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCi0JaW50IHBvd2VyX3NhdmluZ3NfYmFsYW5jZTsgLyogSXMgcG93ZXJzYXZlIGJhbGFuY2UgbmVlZGVkIGZvciB0aGlzIHNkICovCi0Jc3RydWN0IHNjaGVkX2dyb3VwICpncm91cF9taW47IC8qIExlYXN0IGxvYWRlZCBncm91cCBpbiBzZCAqLwotCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXBfbGVhZGVyOyAvKiBHcm91cCB3aGljaCByZWxpZXZlcyBncm91cF9taW4gKi8KLQl1bnNpZ25lZCBsb25nIG1pbl9sb2FkX3Blcl90YXNrOyAvKiBsb2FkX3Blcl90YXNrIGluIGdyb3VwX21pbiAqLwotCXVuc2lnbmVkIGxvbmcgbGVhZGVyX25yX3J1bm5pbmc7IC8qIE5yIHJ1bm5pbmcgb2YgZ3JvdXBfbGVhZGVyICovCi0JdW5zaWduZWQgbG9uZyBtaW5fbnJfcnVubmluZzsgLyogTnIgcnVubmluZyBvZiBncm91cF9taW4gKi8KLSNlbmRpZgotfTsKLQotLyoKLSAqIHNnX2xiX3N0YXRzIC0gc3RhdHMgb2YgYSBzY2hlZF9ncm91cCByZXF1aXJlZCBmb3IgbG9hZF9iYWxhbmNpbmcKLSAqLwotc3RydWN0IHNnX2xiX3N0YXRzIHsKLQl1bnNpZ25lZCBsb25nIGF2Z19sb2FkOyAvKkF2ZyBsb2FkIGFjcm9zcyB0aGUgQ1BVcyBvZiB0aGUgZ3JvdXAgKi8KLQl1bnNpZ25lZCBsb25nIGdyb3VwX2xvYWQ7IC8qIFRvdGFsIGxvYWQgb3ZlciB0aGUgQ1BVcyBvZiB0aGUgZ3JvdXAgKi8KLQl1bnNpZ25lZCBsb25nIHN1bV9ucl9ydW5uaW5nOyAvKiBOciB0YXNrcyBydW5uaW5nIGluIHRoZSBncm91cCAqLwotCXVuc2lnbmVkIGxvbmcgc3VtX3dlaWdodGVkX2xvYWQ7IC8qIFdlaWdodGVkIGxvYWQgb2YgZ3JvdXAncyB0YXNrcyAqLwotCXVuc2lnbmVkIGxvbmcgZ3JvdXBfY2FwYWNpdHk7Ci0JaW50IGdyb3VwX2ltYjsgLyogSXMgdGhlcmUgYW4gaW1iYWxhbmNlIGluIHRoZSBncm91cCA/ICovCi19OwotCi0vKioKLSAqIGdyb3VwX2ZpcnN0X2NwdSAtIFJldHVybnMgdGhlIGZpcnN0IGNwdSBpbiB0aGUgY3B1bWFzayBvZiBhIHNjaGVkX2dyb3VwLgotICogQGdyb3VwOiBUaGUgZ3JvdXAgd2hvc2UgZmlyc3QgY3B1IGlzIHRvIGJlIHJldHVybmVkLgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBncm91cF9maXJzdF9jcHUoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCkKLXsKLQlyZXR1cm4gY3B1bWFza19maXJzdChzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSk7Ci19Ci0KLS8qKgotICogZ2V0X3NkX2xvYWRfaWR4IC0gT2J0YWluIHRoZSBsb2FkIGluZGV4IGZvciBhIGdpdmVuIHNjaGVkIGRvbWFpbi4KLSAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBsb2FkX2lkeCBpcyB0byBiZSBvYnRhaW5lZC4KLSAqIEBpZGxlOiBUaGUgSWRsZSBzdGF0dXMgb2YgdGhlIENQVSBmb3Igd2hvc2Ugc2QgbG9hZF9pY3ggaXMgb2J0YWluZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdldF9zZF9sb2FkX2lkeChzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQkJCQkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCi17Ci0JaW50IGxvYWRfaWR4OwotCi0Jc3dpdGNoIChpZGxlKSB7Ci0JY2FzZSBDUFVfTk9UX0lETEU6Ci0JCWxvYWRfaWR4ID0gc2QtPmJ1c3lfaWR4OwotCQlicmVhazsKLQotCWNhc2UgQ1BVX05FV0xZX0lETEU6Ci0JCWxvYWRfaWR4ID0gc2QtPm5ld2lkbGVfaWR4OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlsb2FkX2lkeCA9IHNkLT5pZGxlX2lkeDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGxvYWRfaWR4OwotfQotCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotLyoqCi0gKiBpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMgLSBJbml0aWFsaXplIHBvd2VyIHNhdmluZ3Mgc3RhdGlzdGljcyBmb3IKLSAqIHRoZSBnaXZlbiBzY2hlZF9kb21haW4sIGR1cmluZyBsb2FkIGJhbGFuY2luZy4KLSAqCi0gKiBAc2Q6IFNjaGVkIGRvbWFpbiB3aG9zZSBwb3dlci1zYXZpbmdzIHN0YXRpc3RpY3MgYXJlIHRvIGJlIGluaXRpYWxpemVkLgotICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBmb3Igc2QuCi0gKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIENQVSBhdCB3aGljaCB3ZSdyZSBwZXJmb3JtaW5nIGxvYWQtYmFsYW5jaW5nLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAotCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKLXsKLQkvKgotCSAqIEJ1c3kgcHJvY2Vzc29ycyB3aWxsIG5vdCBwYXJ0aWNpcGF0ZSBpbiBwb3dlciBzYXZpbmdzCi0JICogYmFsYW5jZS4KLQkgKi8KLQlpZiAoaWRsZSA9PSBDUFVfTk9UX0lETEUgfHwgIShzZC0+ZmxhZ3MgJiBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCi0JCXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMDsKLQllbHNlIHsKLQkJc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAxOwotCQlzZHMtPm1pbl9ucl9ydW5uaW5nID0gVUxPTkdfTUFYOwotCQlzZHMtPmxlYWRlcl9ucl9ydW5uaW5nID0gMDsKLQl9Ci19Ci0KLS8qKgotICogdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMgLSBVcGRhdGUgdGhlIHBvd2VyIHNhdmluZyBzdGF0cyBmb3IgYQotICogc2NoZWRfZG9tYWluIHdoaWxlIHBlcmZvcm1pbmcgbG9hZCBiYWxhbmNpbmcuCi0gKgotICogQGdyb3VwOiBzY2hlZF9ncm91cCBiZWxvbmdpbmcgdG8gdGhlIHNjaGVkX2RvbWFpbiB1bmRlciBjb25zaWRlcmF0aW9uLgotICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluCi0gKiBAbG9jYWxfZ3JvdXA6IERvZXMgZ3JvdXAgY29udGFpbiB0aGUgQ1BVIGZvciB3aGljaCB3ZSdyZSBwZXJmb3JtaW5nCi0gKiAJCWxvYWQgYmFsYW5jaW5nID8KLSAqIEBzZ3M6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3Mgb2YgdGhlIGdyb3VwLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwKLQlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgaW50IGxvY2FsX2dyb3VwLCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncykKLXsKLQotCWlmICghc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UpCi0JCXJldHVybjsKLQotCS8qCi0JICogSWYgdGhlIGxvY2FsIGdyb3VwIGlzIGlkbGUgb3IgY29tcGxldGVseSBsb2FkZWQKLQkgKiBubyBuZWVkIHRvIGRvIHBvd2VyIHNhdmluZ3MgYmFsYW5jZSBhdCB0aGlzIGRvbWFpbgotCSAqLwotCWlmIChsb2NhbF9ncm91cCAmJiAoc2RzLT50aGlzX25yX3J1bm5pbmcgPj0gc2dzLT5ncm91cF9jYXBhY2l0eSB8fAotCQkJCSFzZHMtPnRoaXNfbnJfcnVubmluZykpCi0JCXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMDsKLQotCS8qCi0JICogSWYgYSBncm91cCBpcyBhbHJlYWR5IHJ1bm5pbmcgYXQgZnVsbCBjYXBhY2l0eSBvciBpZGxlLAotCSAqIGRvbid0IGluY2x1ZGUgdGhhdCBncm91cCBpbiBwb3dlciBzYXZpbmdzIGNhbGN1bGF0aW9ucwotCSAqLwotCWlmICghc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgfHwKLQkJc2dzLT5zdW1fbnJfcnVubmluZyA+PSBzZ3MtPmdyb3VwX2NhcGFjaXR5IHx8Ci0JCSFzZ3MtPnN1bV9ucl9ydW5uaW5nKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSB0aGUgZ3JvdXAgd2hpY2ggaGFzIHRoZSBsZWFzdCBub24taWRsZSBsb2FkLgotCSAqIFRoaXMgaXMgdGhlIGdyb3VwIGZyb20gd2hlcmUgd2UgbmVlZCB0byBwaWNrIHVwIHRoZSBsb2FkCi0JICogZm9yIHNhdmluZyBwb3dlcgotCSAqLwotCWlmICgoc2dzLT5zdW1fbnJfcnVubmluZyA8IHNkcy0+bWluX25yX3J1bm5pbmcpIHx8Ci0JICAgIChzZ3MtPnN1bV9ucl9ydW5uaW5nID09IHNkcy0+bWluX25yX3J1bm5pbmcgJiYKLQkgICAgIGdyb3VwX2ZpcnN0X2NwdShncm91cCkgPiBncm91cF9maXJzdF9jcHUoc2RzLT5ncm91cF9taW4pKSkgewotCQlzZHMtPmdyb3VwX21pbiA9IGdyb3VwOwotCQlzZHMtPm1pbl9ucl9ydW5uaW5nID0gc2dzLT5zdW1fbnJfcnVubmluZzsKLQkJc2RzLT5taW5fbG9hZF9wZXJfdGFzayA9IHNncy0+c3VtX3dlaWdodGVkX2xvYWQgLwotCQkJCQkJc2dzLT5zdW1fbnJfcnVubmluZzsKLQl9Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSB0aGUgZ3JvdXAgd2hpY2ggaXMgYWxtb3N0IG5lYXIgaXRzCi0JICogY2FwYWNpdHkgYnV0IHN0aWxsIGhhcyBzb21lIHNwYWNlIHRvIHBpY2sgdXAgc29tZSBsb2FkCi0JICogZnJvbSBvdGhlciBncm91cCBhbmQgc2F2ZSBtb3JlIHBvd2VyCi0JICovCi0JaWYgKHNncy0+c3VtX25yX3J1bm5pbmcgKyAxID4gc2dzLT5ncm91cF9jYXBhY2l0eSkKLQkJcmV0dXJuOwotCi0JaWYgKHNncy0+c3VtX25yX3J1bm5pbmcgPiBzZHMtPmxlYWRlcl9ucl9ydW5uaW5nIHx8Ci0JICAgIChzZ3MtPnN1bV9ucl9ydW5uaW5nID09IHNkcy0+bGVhZGVyX25yX3J1bm5pbmcgJiYKLQkgICAgIGdyb3VwX2ZpcnN0X2NwdShncm91cCkgPCBncm91cF9maXJzdF9jcHUoc2RzLT5ncm91cF9sZWFkZXIpKSkgewotCQlzZHMtPmdyb3VwX2xlYWRlciA9IGdyb3VwOwotCQlzZHMtPmxlYWRlcl9ucl9ydW5uaW5nID0gc2dzLT5zdW1fbnJfcnVubmluZzsKLQl9Ci19Ci0KLS8qKgotICogY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwIC0gc2VlIGlmIHRoZXJlIGlzIHBvdGVudGlhbCBmb3Igc29tZSBwb3dlci1zYXZpbmdzIGJhbGFuY2UKLSAqIEBzZHM6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbgotICoJdW5kZXIgY29uc2lkZXJhdGlvbi4KLSAqIEB0aGlzX2NwdTogQ3B1IGF0IHdoaWNoIHdlJ3JlIGN1cnJlbnRseSBwZXJmb3JtaW5nIGxvYWQtYmFsYW5jaW5nLgotICogQGltYmFsYW5jZTogVmFyaWFibGUgdG8gc3RvcmUgdGhlIGltYmFsYW5jZS4KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIENoZWNrIGlmIHdlIGhhdmUgcG90ZW50aWFsIHRvIHBlcmZvcm0gc29tZSBwb3dlci1zYXZpbmdzIGJhbGFuY2UuCi0gKiBJZiB5ZXMsIHNldCB0aGUgYnVzaWVzdCBncm91cCB0byBiZSB0aGUgbGVhc3QgbG9hZGVkIGdyb3VwIGluIHRoZQotICogc2NoZWRfZG9tYWluLCBzbyB0aGF0IGl0J3MgQ1BVcyBjYW4gYmUgcHV0IHRvIGlkbGUuCi0gKgotICogUmV0dXJucyAxIGlmIHRoZXJlIGlzIHBvdGVudGlhbCB0byBwZXJmb3JtIHBvd2VyLXNhdmluZ3MgYmFsYW5jZS4KLSAqIEVsc2UgcmV0dXJucyAwLgotICovCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsCi0JCQkJCWludCB0aGlzX2NwdSwgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQotewotCWlmICghc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UpCi0JCXJldHVybiAwOwotCi0JaWYgKHNkcy0+dGhpcyAhPSBzZHMtPmdyb3VwX2xlYWRlciB8fAotCQkJc2RzLT5ncm91cF9sZWFkZXIgPT0gc2RzLT5ncm91cF9taW4pCi0JCXJldHVybiAwOwotCi0JKmltYmFsYW5jZSA9IHNkcy0+bWluX2xvYWRfcGVyX3Rhc2s7Ci0Jc2RzLT5idXNpZXN0ID0gc2RzLT5ncm91cF9taW47Ci0KLQlyZXR1cm4gMTsKLQotfQotI2Vsc2UgLyogQ09ORklHX1NDSEVEX01DIHx8IENPTkZJR19TQ0hFRF9TTVQgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCi0Jc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQotewotCXJldHVybjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsCi0Jc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGludCBsb2NhbF9ncm91cCwgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsCi0JCQkJCWludCB0aGlzX2NwdSwgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQotewotCXJldHVybiAwOwotfQotI2VuZGlmIC8qIENPTkZJR19TQ0hFRF9NQyB8fCBDT05GSUdfU0NIRURfU01UICovCi0KLQotdW5zaWduZWQgbG9uZyBkZWZhdWx0X3NjYWxlX2ZyZXFfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCi17Ci0JcmV0dXJuIFNDSEVEX0xPQURfU0NBTEU7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgX193ZWFrIGFyY2hfc2NhbGVfZnJlcV9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKLXsKLQlyZXR1cm4gZGVmYXVsdF9zY2FsZV9mcmVxX3Bvd2VyKHNkLCBjcHUpOwotfQotCi11bnNpZ25lZCBsb25nIGRlZmF1bHRfc2NhbGVfc210X3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQotewotCXVuc2lnbmVkIGxvbmcgd2VpZ2h0ID0gY3B1bWFza193ZWlnaHQoc2NoZWRfZG9tYWluX3NwYW4oc2QpKTsKLQl1bnNpZ25lZCBsb25nIHNtdF9nYWluID0gc2QtPnNtdF9nYWluOwotCi0Jc210X2dhaW4gLz0gd2VpZ2h0OwotCi0JcmV0dXJuIHNtdF9nYWluOwotfQotCi11bnNpZ25lZCBsb25nIF9fd2VhayBhcmNoX3NjYWxlX3NtdF9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKLXsKLQlyZXR1cm4gZGVmYXVsdF9zY2FsZV9zbXRfcG93ZXIoc2QsIGNwdSk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgc2NhbGVfcnRfcG93ZXIoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7Ci0JdTY0IHRvdGFsLCBhdmFpbGFibGU7Ci0KLQlzY2hlZF9hdmdfdXBkYXRlKHJxKTsKLQotCXRvdGFsID0gc2NoZWRfYXZnX3BlcmlvZCgpICsgKHJxLT5jbG9jayAtIHJxLT5hZ2Vfc3RhbXApOwotCWF2YWlsYWJsZSA9IHRvdGFsIC0gcnEtPnJ0X2F2ZzsKLQotCWlmICh1bmxpa2VseSgoczY0KXRvdGFsIDwgU0NIRURfTE9BRF9TQ0FMRSkpCi0JCXRvdGFsID0gU0NIRURfTE9BRF9TQ0FMRTsKLQotCXRvdGFsID4+PSBTQ0hFRF9MT0FEX1NISUZUOwotCi0JcmV0dXJuIGRpdl91NjQoYXZhaWxhYmxlLCB0b3RhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9jcHVfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCi17Ci0JdW5zaWduZWQgbG9uZyB3ZWlnaHQgPSBjcHVtYXNrX3dlaWdodChzY2hlZF9kb21haW5fc3BhbihzZCkpOwotCXVuc2lnbmVkIGxvbmcgcG93ZXIgPSBTQ0hFRF9MT0FEX1NDQUxFOwotCXN0cnVjdCBzY2hlZF9ncm91cCAqc2RnID0gc2QtPmdyb3VwczsKLQotCWlmIChzY2hlZF9mZWF0KEFSQ0hfUE9XRVIpKQotCQlwb3dlciAqPSBhcmNoX3NjYWxlX2ZyZXFfcG93ZXIoc2QsIGNwdSk7Ci0JZWxzZQotCQlwb3dlciAqPSBkZWZhdWx0X3NjYWxlX2ZyZXFfcG93ZXIoc2QsIGNwdSk7Ci0KLQlwb3dlciA+Pj0gU0NIRURfTE9BRF9TSElGVDsKLQotCWlmICgoc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIpICYmIHdlaWdodCA+IDEpIHsKLQkJaWYgKHNjaGVkX2ZlYXQoQVJDSF9QT1dFUikpCi0JCQlwb3dlciAqPSBhcmNoX3NjYWxlX3NtdF9wb3dlcihzZCwgY3B1KTsKLQkJZWxzZQotCQkJcG93ZXIgKj0gZGVmYXVsdF9zY2FsZV9zbXRfcG93ZXIoc2QsIGNwdSk7Ci0KLQkJcG93ZXIgPj49IFNDSEVEX0xPQURfU0hJRlQ7Ci0JfQotCi0JcG93ZXIgKj0gc2NhbGVfcnRfcG93ZXIoY3B1KTsKLQlwb3dlciA+Pj0gU0NIRURfTE9BRF9TSElGVDsKLQotCWlmICghcG93ZXIpCi0JCXBvd2VyID0gMTsKLQotCXNkZy0+Y3B1X3Bvd2VyID0gcG93ZXI7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9ncm91cF9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKLXsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpjaGlsZCA9IHNkLT5jaGlsZDsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCAqc2RnID0gc2QtPmdyb3VwczsKLQl1bnNpZ25lZCBsb25nIHBvd2VyOwotCi0JaWYgKCFjaGlsZCkgewotCQl1cGRhdGVfY3B1X3Bvd2VyKHNkLCBjcHUpOwotCQlyZXR1cm47Ci0JfQotCi0JcG93ZXIgPSAwOwotCi0JZ3JvdXAgPSBjaGlsZC0+Z3JvdXBzOwotCWRvIHsKLQkJcG93ZXIgKz0gZ3JvdXAtPmNwdV9wb3dlcjsKLQkJZ3JvdXAgPSBncm91cC0+bmV4dDsKLQl9IHdoaWxlIChncm91cCAhPSBjaGlsZC0+Z3JvdXBzKTsKLQotCXNkZy0+Y3B1X3Bvd2VyID0gcG93ZXI7Ci19Ci0KLS8qKgotICogdXBkYXRlX3NnX2xiX3N0YXRzIC0gVXBkYXRlIHNjaGVkX2dyb3VwJ3Mgc3RhdGlzdGljcyBmb3IgbG9hZCBiYWxhbmNpbmcuCi0gKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KLSAqIEBncm91cDogc2NoZWRfZ3JvdXAgd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KLSAqIEB0aGlzX2NwdTogQ3B1IGZvciB3aGljaCBsb2FkIGJhbGFuY2UgaXMgY3VycmVudGx5IHBlcmZvcm1lZC4KLSAqIEBpZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGlzX2NwdQotICogQGxvYWRfaWR4OiBMb2FkIGluZGV4IG9mIHNjaGVkX2RvbWFpbiBvZiB0aGlzX2NwdSBmb3IgbG9hZCBjYWxjLgotICogQHNkX2lkbGU6IElkbGUgc3RhdHVzIG9mIHRoZSBzY2hlZF9kb21haW4gY29udGFpbmluZyBncm91cC4KLSAqIEBsb2NhbF9ncm91cDogRG9lcyBncm91cCBjb250YWluIHRoaXNfY3B1LgotICogQGNwdXM6IFNldCBvZiBjcHVzIGNvbnNpZGVyZWQgZm9yIGxvYWQgYmFsYW5jaW5nLgotICogQGJhbGFuY2U6IFNob3VsZCB3ZSBiYWxhbmNlLgotICogQHNnczogdmFyaWFibGUgdG8gaG9sZCB0aGUgc3RhdGlzdGljcyBmb3IgdGhpcyBncm91cC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZ19sYl9zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQkJCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsIGludCB0aGlzX2NwdSwKLQkJCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgbG9hZF9pZHgsIGludCAqc2RfaWRsZSwKLQkJCWludCBsb2NhbF9ncm91cCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsCi0JCQlpbnQgKmJhbGFuY2UsIHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKQotewotCXVuc2lnbmVkIGxvbmcgbG9hZCwgbWF4X2NwdV9sb2FkLCBtaW5fY3B1X2xvYWQ7Ci0JaW50IGk7Ci0JdW5zaWduZWQgaW50IGJhbGFuY2VfY3B1ID0gLTEsIGZpcnN0X2lkbGVfY3B1ID0gMDsKLQl1bnNpZ25lZCBsb25nIHN1bV9hdmdfbG9hZF9wZXJfdGFzazsKLQl1bnNpZ25lZCBsb25nIGF2Z19sb2FkX3Blcl90YXNrOwotCi0JaWYgKGxvY2FsX2dyb3VwKSB7Ci0JCWJhbGFuY2VfY3B1ID0gZ3JvdXBfZmlyc3RfY3B1KGdyb3VwKTsKLQkJaWYgKGJhbGFuY2VfY3B1ID09IHRoaXNfY3B1KQotCQkJdXBkYXRlX2dyb3VwX3Bvd2VyKHNkLCB0aGlzX2NwdSk7Ci0JfQotCi0JLyogVGFsbHkgdXAgdGhlIGxvYWQgb2YgYWxsIENQVXMgaW4gdGhlIGdyb3VwICovCi0Jc3VtX2F2Z19sb2FkX3Blcl90YXNrID0gYXZnX2xvYWRfcGVyX3Rhc2sgPSAwOwotCW1heF9jcHVfbG9hZCA9IDA7Ci0JbWluX2NwdV9sb2FkID0gfjBVTDsKLQotCWZvcl9lYWNoX2NwdV9hbmQoaSwgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCksIGNwdXMpIHsKLQkJc3RydWN0IHJxICpycSA9IGNwdV9ycShpKTsKLQotCQlpZiAoKnNkX2lkbGUgJiYgcnEtPm5yX3J1bm5pbmcpCi0JCQkqc2RfaWRsZSA9IDA7Ci0KLQkJLyogQmlhcyBiYWxhbmNpbmcgdG93YXJkIGNwdXMgb2Ygb3VyIGRvbWFpbiAqLwotCQlpZiAobG9jYWxfZ3JvdXApIHsKLQkJCWlmIChpZGxlX2NwdShpKSAmJiAhZmlyc3RfaWRsZV9jcHUpIHsKLQkJCQlmaXJzdF9pZGxlX2NwdSA9IDE7Ci0JCQkJYmFsYW5jZV9jcHUgPSBpOwotCQkJfQotCi0JCQlsb2FkID0gdGFyZ2V0X2xvYWQoaSwgbG9hZF9pZHgpOwotCQl9IGVsc2UgewotCQkJbG9hZCA9IHNvdXJjZV9sb2FkKGksIGxvYWRfaWR4KTsKLQkJCWlmIChsb2FkID4gbWF4X2NwdV9sb2FkKQotCQkJCW1heF9jcHVfbG9hZCA9IGxvYWQ7Ci0JCQlpZiAobWluX2NwdV9sb2FkID4gbG9hZCkKLQkJCQltaW5fY3B1X2xvYWQgPSBsb2FkOwotCQl9Ci0KLQkJc2dzLT5ncm91cF9sb2FkICs9IGxvYWQ7Ci0JCXNncy0+c3VtX25yX3J1bm5pbmcgKz0gcnEtPm5yX3J1bm5pbmc7Ci0JCXNncy0+c3VtX3dlaWdodGVkX2xvYWQgKz0gd2VpZ2h0ZWRfY3B1bG9hZChpKTsKLQotCQlzdW1fYXZnX2xvYWRfcGVyX3Rhc2sgKz0gY3B1X2F2Z19sb2FkX3Blcl90YXNrKGkpOwotCX0KLQotCS8qCi0JICogRmlyc3QgaWRsZSBjcHUgb3IgdGhlIGZpcnN0IGNwdShidXNpZXN0KSBpbiB0aGlzIHNjaGVkIGdyb3VwCi0JICogaXMgZWxpZ2libGUgZm9yIGRvaW5nIGxvYWQgYmFsYW5jaW5nIGF0IHRoaXMgYW5kIGFib3ZlCi0JICogZG9tYWlucy4gSW4gdGhlIG5ld2x5IGlkbGUgY2FzZSwgd2Ugd2lsbCBhbGxvdyBhbGwgdGhlIGNwdSdzCi0JICogdG8gZG8gdGhlIG5ld2x5IGlkbGUgbG9hZCBiYWxhbmNlLgotCSAqLwotCWlmIChpZGxlICE9IENQVV9ORVdMWV9JRExFICYmIGxvY2FsX2dyb3VwICYmCi0JICAgIGJhbGFuY2VfY3B1ICE9IHRoaXNfY3B1ICYmIGJhbGFuY2UpIHsKLQkJKmJhbGFuY2UgPSAwOwotCQlyZXR1cm47Ci0JfQotCi0JLyogQWRqdXN0IGJ5IHJlbGF0aXZlIENQVSBwb3dlciBvZiB0aGUgZ3JvdXAgKi8KLQlzZ3MtPmF2Z19sb2FkID0gKHNncy0+Z3JvdXBfbG9hZCAqIFNDSEVEX0xPQURfU0NBTEUpIC8gZ3JvdXAtPmNwdV9wb3dlcjsKLQotCi0JLyoKLQkgKiBDb25zaWRlciB0aGUgZ3JvdXAgdW5iYWxhbmNlZCB3aGVuIHRoZSBpbWJhbGFuY2UgaXMgbGFyZ2VyCi0JICogdGhhbiB0aGUgYXZlcmFnZSB3ZWlnaHQgb2YgdHdvIHRhc2tzLgotCSAqCi0JICogQVBaOiB3aXRoIGNncm91cCB0aGUgYXZnIHRhc2sgd2VpZ2h0IGNhbiB2YXJ5IHdpbGRseSBhbmQKLQkgKiAgICAgIG1pZ2h0IG5vdCBiZSBhIHN1aXRhYmxlIG51bWJlciAtIHNob3VsZCB3ZSBrZWVwIGEKLQkgKiAgICAgIG5vcm1hbGl6ZWQgbnJfcnVubmluZyBudW1iZXIgc29tZXdoZXJlIHRoYXQgbmVnYXRlcwotCSAqICAgICAgdGhlIGhpZXJhcmNoeT8KLQkgKi8KLQlhdmdfbG9hZF9wZXJfdGFzayA9IChzdW1fYXZnX2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvCi0JCWdyb3VwLT5jcHVfcG93ZXI7Ci0KLQlpZiAoKG1heF9jcHVfbG9hZCAtIG1pbl9jcHVfbG9hZCkgPiAyKmF2Z19sb2FkX3Blcl90YXNrKQotCQlzZ3MtPmdyb3VwX2ltYiA9IDE7Ci0KLQlzZ3MtPmdyb3VwX2NhcGFjaXR5ID0KLQkJRElWX1JPVU5EX0NMT1NFU1QoZ3JvdXAtPmNwdV9wb3dlciwgU0NIRURfTE9BRF9TQ0FMRSk7Ci19Ci0KLS8qKgotICogdXBkYXRlX3NkX2xiX3N0YXRzIC0gVXBkYXRlIHNjaGVkX2dyb3VwJ3Mgc3RhdGlzdGljcyBmb3IgbG9hZCBiYWxhbmNpbmcuCi0gKiBAc2Q6IHNjaGVkX2RvbWFpbiB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgotICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jZSBpcyBjdXJyZW50bHkgcGVyZm9ybWVkLgotICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoaXNfY3B1Ci0gKiBAc2RfaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIHNjaGVkX2RvbWFpbiBjb250YWluaW5nIGdyb3VwLgotICogQGNwdXM6IFNldCBvZiBjcHVzIGNvbnNpZGVyZWQgZm9yIGxvYWQgYmFsYW5jaW5nLgotICogQGJhbGFuY2U6IFNob3VsZCB3ZSBiYWxhbmNlLgotICogQHNkczogdmFyaWFibGUgdG8gaG9sZCB0aGUgc3RhdGlzdGljcyBmb3IgdGhpcyBzY2hlZF9kb21haW4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2RfbGJfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCB0aGlzX2NwdSwKLQkJCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgKnNkX2lkbGUsCi0JCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywgaW50ICpiYWxhbmNlLAotCQkJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMpCi17Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqY2hpbGQgPSBzZC0+Y2hpbGQ7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCA9IHNkLT5ncm91cHM7Ci0Jc3RydWN0IHNnX2xiX3N0YXRzIHNnczsKLQlpbnQgbG9hZF9pZHgsIHByZWZlcl9zaWJsaW5nID0gMDsKLQotCWlmIChjaGlsZCAmJiBjaGlsZC0+ZmxhZ3MgJiBTRF9QUkVGRVJfU0lCTElORykKLQkJcHJlZmVyX3NpYmxpbmcgPSAxOwotCi0JaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHNkLCBzZHMsIGlkbGUpOwotCWxvYWRfaWR4ID0gZ2V0X3NkX2xvYWRfaWR4KHNkLCBpZGxlKTsKLQotCWRvIHsKLQkJaW50IGxvY2FsX2dyb3VwOwotCi0JCWxvY2FsX2dyb3VwID0gY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwKLQkJCQkJICAgICAgIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKLQkJbWVtc2V0KCZzZ3MsIDAsIHNpemVvZihzZ3MpKTsKLQkJdXBkYXRlX3NnX2xiX3N0YXRzKHNkLCBncm91cCwgdGhpc19jcHUsIGlkbGUsIGxvYWRfaWR4LCBzZF9pZGxlLAotCQkJCWxvY2FsX2dyb3VwLCBjcHVzLCBiYWxhbmNlLCAmc2dzKTsKLQotCQlpZiAobG9jYWxfZ3JvdXAgJiYgYmFsYW5jZSAmJiAhKCpiYWxhbmNlKSkKLQkJCXJldHVybjsKLQotCQlzZHMtPnRvdGFsX2xvYWQgKz0gc2dzLmdyb3VwX2xvYWQ7Ci0JCXNkcy0+dG90YWxfcHdyICs9IGdyb3VwLT5jcHVfcG93ZXI7Ci0KLQkJLyoKLQkJICogSW4gY2FzZSB0aGUgY2hpbGQgZG9tYWluIHByZWZlcnMgdGFza3MgZ28gdG8gc2libGluZ3MKLQkJICogZmlyc3QsIGxvd2VyIHRoZSBncm91cCBjYXBhY2l0eSB0byBvbmUgc28gdGhhdCB3ZSdsbCB0cnkKLQkJICogYW5kIG1vdmUgYWxsIHRoZSBleGNlc3MgdGFza3MgYXdheS4KLQkJICovCi0JCWlmIChwcmVmZXJfc2libGluZykKLQkJCXNncy5ncm91cF9jYXBhY2l0eSA9IG1pbihzZ3MuZ3JvdXBfY2FwYWNpdHksIDFVTCk7Ci0KLQkJaWYgKGxvY2FsX2dyb3VwKSB7Ci0JCQlzZHMtPnRoaXNfbG9hZCA9IHNncy5hdmdfbG9hZDsKLQkJCXNkcy0+dGhpcyA9IGdyb3VwOwotCQkJc2RzLT50aGlzX25yX3J1bm5pbmcgPSBzZ3Muc3VtX25yX3J1bm5pbmc7Ci0JCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzayA9IHNncy5zdW1fd2VpZ2h0ZWRfbG9hZDsKLQkJfSBlbHNlIGlmIChzZ3MuYXZnX2xvYWQgPiBzZHMtPm1heF9sb2FkICYmCi0JCQkgICAoc2dzLnN1bV9ucl9ydW5uaW5nID4gc2dzLmdyb3VwX2NhcGFjaXR5IHx8Ci0JCQkJc2dzLmdyb3VwX2ltYikpIHsKLQkJCXNkcy0+bWF4X2xvYWQgPSBzZ3MuYXZnX2xvYWQ7Ci0JCQlzZHMtPmJ1c2llc3QgPSBncm91cDsKLQkJCXNkcy0+YnVzaWVzdF9ucl9ydW5uaW5nID0gc2dzLnN1bV9ucl9ydW5uaW5nOwotCQkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPSBzZ3Muc3VtX3dlaWdodGVkX2xvYWQ7Ci0JCQlzZHMtPmdyb3VwX2ltYiA9IHNncy5ncm91cF9pbWI7Ci0JCX0KLQotCQl1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhncm91cCwgc2RzLCBsb2NhbF9ncm91cCwgJnNncyk7Ci0JCWdyb3VwID0gZ3JvdXAtPm5leHQ7Ci0JfSB3aGlsZSAoZ3JvdXAgIT0gc2QtPmdyb3Vwcyk7Ci19Ci0KLS8qKgotICogZml4X3NtYWxsX2ltYmFsYW5jZSAtIENhbGN1bGF0ZSB0aGUgbWlub3IgaW1iYWxhbmNlIHRoYXQgZXhpc3RzCi0gKgkJCWFtb25nc3QgdGhlIGdyb3VwcyBvZiBhIHNjaGVkX2RvbWFpbiwgZHVyaW5nCi0gKgkJCWxvYWQgYmFsYW5jaW5nLgotICogQHNkczogU3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluIHdob3NlIGltYmFsYW5jZSBpcyB0byBiZSBjYWxjdWxhdGVkLgotICogQHRoaXNfY3B1OiBUaGUgY3B1IGF0IHdob3NlIHNjaGVkX2RvbWFpbiB3ZSdyZSBwZXJmb3JtaW5nIGxvYWQtYmFsYW5jZS4KLSAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmaXhfc21hbGxfaW1iYWxhbmNlKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAotCQkJCWludCB0aGlzX2NwdSwgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQotewotCXVuc2lnbmVkIGxvbmcgdG1wLCBwd3Jfbm93ID0gMCwgcHdyX21vdmUgPSAwOwotCXVuc2lnbmVkIGludCBpbWJuID0gMjsKLQotCWlmIChzZHMtPnRoaXNfbnJfcnVubmluZykgewotCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzayAvPSBzZHMtPnRoaXNfbnJfcnVubmluZzsKLQkJaWYgKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID4KLQkJCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzaykKLQkJCWltYm4gPSAxOwotCX0gZWxzZQotCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzayA9Ci0JCQljcHVfYXZnX2xvYWRfcGVyX3Rhc2sodGhpc19jcHUpOwotCi0JaWYgKHNkcy0+bWF4X2xvYWQgLSBzZHMtPnRoaXNfbG9hZCArIHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID49Ci0JCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIGltYm4pIHsKLQkJKmltYmFsYW5jZSA9IHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBPSywgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggaW1iYWxhbmNlIHRvIGp1c3RpZnkgbW92aW5nIHRhc2tzLAotCSAqIGhvd2V2ZXIgd2UgbWF5IGJlIGFibGUgdG8gaW5jcmVhc2UgdG90YWwgQ1BVIHBvd2VyIHVzZWQgYnkKLQkgKiBtb3ZpbmcgdGhlbS4KLQkgKi8KLQotCXB3cl9ub3cgKz0gc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIgKgotCQkJbWluKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrLCBzZHMtPm1heF9sb2FkKTsKLQlwd3Jfbm93ICs9IHNkcy0+dGhpcy0+Y3B1X3Bvd2VyICoKLQkJCW1pbihzZHMtPnRoaXNfbG9hZF9wZXJfdGFzaywgc2RzLT50aGlzX2xvYWQpOwotCXB3cl9ub3cgLz0gU0NIRURfTE9BRF9TQ0FMRTsKLQotCS8qIEFtb3VudCBvZiBsb2FkIHdlJ2Qgc3VidHJhY3QgKi8KLQl0bXAgPSAoc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvCi0JCXNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyOwotCWlmIChzZHMtPm1heF9sb2FkID4gdG1wKQotCQlwd3JfbW92ZSArPSBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlciAqCi0JCQltaW4oc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2ssIHNkcy0+bWF4X2xvYWQgLSB0bXApOwotCi0JLyogQW1vdW50IG9mIGxvYWQgd2UnZCBhZGQgKi8KLQlpZiAoc2RzLT5tYXhfbG9hZCAqIHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyIDwKLQkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKQotCQl0bXAgPSAoc2RzLT5tYXhfbG9hZCAqIHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyKSAvCi0JCQlzZHMtPnRoaXMtPmNwdV9wb3dlcjsKLQllbHNlCi0JCXRtcCA9IChzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpIC8KLQkJCXNkcy0+dGhpcy0+Y3B1X3Bvd2VyOwotCXB3cl9tb3ZlICs9IHNkcy0+dGhpcy0+Y3B1X3Bvd2VyICoKLQkJCW1pbihzZHMtPnRoaXNfbG9hZF9wZXJfdGFzaywgc2RzLT50aGlzX2xvYWQgKyB0bXApOwotCXB3cl9tb3ZlIC89IFNDSEVEX0xPQURfU0NBTEU7Ci0KLQkvKiBNb3ZlIGlmIHdlIGdhaW4gdGhyb3VnaHB1dCAqLwotCWlmIChwd3JfbW92ZSA+IHB3cl9ub3cpCi0JCSppbWJhbGFuY2UgPSBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzazsKLX0KLQotLyoqCi0gKiBjYWxjdWxhdGVfaW1iYWxhbmNlIC0gQ2FsY3VsYXRlIHRoZSBhbW91bnQgb2YgaW1iYWxhbmNlIHByZXNlbnQgd2l0aGluIHRoZQotICoJCQkgZ3JvdXBzIG9mIGEgZ2l2ZW4gc2NoZWRfZG9tYWluIGR1cmluZyBsb2FkIGJhbGFuY2UuCi0gKiBAc2RzOiBzdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4gd2hvc2UgaW1iYWxhbmNlIGlzIHRvIGJlIGNhbGN1bGF0ZWQuCi0gKiBAdGhpc19jcHU6IENwdSBmb3Igd2hpY2ggY3VycmVudGx5IGxvYWQgYmFsYW5jZSBpcyBiZWluZyBwZXJmb3JtZWQuCi0gKiBAaW1iYWxhbmNlOiBUaGUgdmFyaWFibGUgdG8gc3RvcmUgdGhlIGltYmFsYW5jZS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZV9pbWJhbGFuY2Uoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGludCB0aGlzX2NwdSwKLQkJdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQotewotCXVuc2lnbmVkIGxvbmcgbWF4X3B1bGw7Ci0JLyoKLQkgKiBJbiB0aGUgcHJlc2VuY2Ugb2Ygc21wIG5pY2UgYmFsYW5jaW5nLCBjZXJ0YWluIHNjZW5hcmlvcyBjYW4gaGF2ZQotCSAqIG1heCBsb2FkIGxlc3MgdGhhbiBhdmcgbG9hZChhcyB3ZSBza2lwIHRoZSBncm91cHMgYXQgb3IgYmVsb3cKLQkgKiBpdHMgY3B1X3Bvd2VyLCB3aGlsZSBjYWxjdWxhdGluZyBtYXhfbG9hZC4uKQotCSAqLwotCWlmIChzZHMtPm1heF9sb2FkIDwgc2RzLT5hdmdfbG9hZCkgewotCQkqaW1iYWxhbmNlID0gMDsKLQkJcmV0dXJuIGZpeF9zbWFsbF9pbWJhbGFuY2Uoc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKLQl9Ci0KLQkvKiBEb24ndCB3YW50IHRvIHB1bGwgc28gbWFueSB0YXNrcyB0aGF0IGEgZ3JvdXAgd291bGQgZ28gaWRsZSAqLwotCW1heF9wdWxsID0gbWluKHNkcy0+bWF4X2xvYWQgLSBzZHMtPmF2Z19sb2FkLAotCQkJc2RzLT5tYXhfbG9hZCAtIHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrKTsKLQotCS8qIEhvdyBtdWNoIGxvYWQgdG8gYWN0dWFsbHkgbW92ZSB0byBlcXVhbGlzZSB0aGUgaW1iYWxhbmNlICovCi0JKmltYmFsYW5jZSA9IG1pbihtYXhfcHVsbCAqIHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyLAotCQkoc2RzLT5hdmdfbG9hZCAtIHNkcy0+dGhpc19sb2FkKSAqIHNkcy0+dGhpcy0+Y3B1X3Bvd2VyKQotCQkJLyBTQ0hFRF9MT0FEX1NDQUxFOwotCi0JLyoKLQkgKiBpZiAqaW1iYWxhbmNlIGlzIGxlc3MgdGhhbiB0aGUgYXZlcmFnZSBsb2FkIHBlciBydW5uYWJsZSB0YXNrCi0JICogdGhlcmUgaXMgbm8gZ2F1cmFudGVlIHRoYXQgYW55IHRhc2tzIHdpbGwgYmUgbW92ZWQgc28gd2UnbGwgaGF2ZQotCSAqIGEgdGhpbmsgYWJvdXQgYnVtcGluZyBpdHMgdmFsdWUgdG8gZm9yY2UgYXQgbGVhc3Qgb25lIHRhc2sgdG8gYmUKLQkgKiBtb3ZlZAotCSAqLwotCWlmICgqaW1iYWxhbmNlIDwgc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2spCi0JCXJldHVybiBmaXhfc21hbGxfaW1iYWxhbmNlKHNkcywgdGhpc19jcHUsIGltYmFsYW5jZSk7Ci0KLX0KLS8qKioqKioqIGZpbmRfYnVzaWVzdF9ncm91cCgpIGhlbHBlcnMgZW5kIGhlcmUgKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioKLSAqIGZpbmRfYnVzaWVzdF9ncm91cCAtIFJldHVybnMgdGhlIGJ1c2llc3QgZ3JvdXAgd2l0aGluIHRoZSBzY2hlZF9kb21haW4KLSAqIGlmIHRoZXJlIGlzIGFuIGltYmFsYW5jZS4gSWYgdGhlcmUgaXNuJ3QgYW4gaW1iYWxhbmNlLCBhbmQKLSAqIHRoZSB1c2VyIGhhcyBvcHRlZCBmb3IgcG93ZXItc2F2aW5ncywgaXQgcmV0dXJucyBhIGdyb3VwIHdob3NlCi0gKiBDUFVzIGNhbiBiZSBwdXQgdG8gaWRsZSBieSByZWJhbGFuY2luZyB0aG9zZSB0YXNrcyBlbHNld2hlcmUsIGlmCi0gKiBzdWNoIGEgZ3JvdXAgZXhpc3RzLgotICoKLSAqIEFsc28gY2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIHdlaWdodGVkIGxvYWQgd2hpY2ggc2hvdWxkIGJlIG1vdmVkCi0gKiB0byByZXN0b3JlIGJhbGFuY2UuCi0gKgotICogQHNkOiBUaGUgc2NoZWRfZG9tYWluIHdob3NlIGJ1c2llc3QgZ3JvdXAgaXMgdG8gYmUgcmV0dXJuZWQuCi0gKiBAdGhpc19jcHU6IFRoZSBjcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jaW5nIGlzIGN1cnJlbnRseSBiZWluZyBwZXJmb3JtZWQuCi0gKiBAaW1iYWxhbmNlOiBWYXJpYWJsZSB3aGljaCBzdG9yZXMgYW1vdW50IG9mIHdlaWdodGVkIGxvYWQgd2hpY2ggc2hvdWxkCi0gKgkJYmUgbW92ZWQgdG8gcmVzdG9yZSBiYWxhbmNlL3B1dCBhIGdyb3VwIHRvIGlkbGUuCi0gKiBAaWRsZTogVGhlIGlkbGUgc3RhdHVzIG9mIHRoaXNfY3B1LgotICogQHNkX2lkbGU6IFRoZSBpZGxlbmVzcyBvZiBzZAotICogQGNwdXM6IFRoZSBzZXQgb2YgQ1BVcyB1bmRlciBjb25zaWRlcmF0aW9uIGZvciBsb2FkLWJhbGFuY2luZy4KLSAqIEBiYWxhbmNlOiBQb2ludGVyIHRvIGEgdmFyaWFibGUgaW5kaWNhdGluZyBpZiB0aGlzX2NwdQotICoJaXMgdGhlIGFwcHJvcHJpYXRlIGNwdSB0byBwZXJmb3JtIGxvYWQgYmFsYW5jaW5nIGF0IHRoaXNfbGV2ZWwuCi0gKgotICogUmV0dXJuczoJLSB0aGUgYnVzaWVzdCBncm91cCBpZiBpbWJhbGFuY2UgZXhpc3RzLgotICoJCS0gSWYgbm8gaW1iYWxhbmNlIGFuZCB1c2VyIGhhcyBvcHRlZCBmb3IgcG93ZXItc2F2aW5ncyBiYWxhbmNlLAotICoJCSAgIHJldHVybiB0aGUgbGVhc3QgbG9hZGVkIGdyb3VwIHdob3NlIENQVXMgY2FuIGJlCi0gKgkJICAgcHV0IHRvIGlkbGUgYnkgcmViYWxhbmNpbmcgaXRzIHRhc2tzIG9udG8gb3VyIGdyb3VwLgotICovCi1zdGF0aWMgc3RydWN0IHNjaGVkX2dyb3VwICoKLWZpbmRfYnVzaWVzdF9ncm91cChzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IHRoaXNfY3B1LAotCQkgICB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkgICBpbnQgKnNkX2lkbGUsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzLCBpbnQgKmJhbGFuY2UpCi17Ci0Jc3RydWN0IHNkX2xiX3N0YXRzIHNkczsKLQotCW1lbXNldCgmc2RzLCAwLCBzaXplb2Yoc2RzKSk7Ci0KLQkvKgotCSAqIENvbXB1dGUgdGhlIHZhcmlvdXMgc3RhdGlzdGljcyByZWxhdmVudCBmb3IgbG9hZCBiYWxhbmNpbmcgYXQKLQkgKiB0aGlzIGxldmVsLgotCSAqLwotCXVwZGF0ZV9zZF9sYl9zdGF0cyhzZCwgdGhpc19jcHUsIGlkbGUsIHNkX2lkbGUsIGNwdXMsCi0JCQkJCWJhbGFuY2UsICZzZHMpOwotCi0JLyogQ2FzZXMgd2hlcmUgaW1iYWxhbmNlIGRvZXMgbm90IGV4aXN0IGZyb20gUE9WIG9mIHRoaXNfY3B1ICovCi0JLyogMSkgdGhpc19jcHUgaXMgbm90IHRoZSBhcHByb3ByaWF0ZSBjcHUgdG8gcGVyZm9ybSBsb2FkIGJhbGFuY2luZwotCSAqICAgIGF0IHRoaXMgbGV2ZWwuCi0JICogMikgVGhlcmUgaXMgbm8gYnVzeSBzaWJsaW5nIGdyb3VwIHRvIHB1bGwgZnJvbS4KLQkgKiAzKSBUaGlzIGdyb3VwIGlzIHRoZSBidXNpZXN0IGdyb3VwLgotCSAqIDQpIFRoaXMgZ3JvdXAgaXMgbW9yZSBidXN5IHRoYW4gdGhlIGF2ZyBidXNpZW5lc3MgYXQgdGhpcwotCSAqICAgIHNjaGVkX2RvbWFpbi4KLQkgKiA1KSBUaGUgaW1iYWxhbmNlIGlzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGxpbWl0LgotCSAqIDYpIEFueSByZWJhbGFuY2Ugd291bGQgbGVhZCB0byBwaW5nLXBvbmcKLQkgKi8KLQlpZiAoYmFsYW5jZSAmJiAhKCpiYWxhbmNlKSkKLQkJZ290byByZXQ7Ci0KLQlpZiAoIXNkcy5idXNpZXN0IHx8IHNkcy5idXNpZXN0X25yX3J1bm5pbmcgPT0gMCkKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0KLQlpZiAoc2RzLnRoaXNfbG9hZCA+PSBzZHMubWF4X2xvYWQpCi0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCi0Jc2RzLmF2Z19sb2FkID0gKFNDSEVEX0xPQURfU0NBTEUgKiBzZHMudG90YWxfbG9hZCkgLyBzZHMudG90YWxfcHdyOwotCi0JaWYgKHNkcy50aGlzX2xvYWQgPj0gc2RzLmF2Z19sb2FkKQotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQotCWlmICgxMDAgKiBzZHMubWF4X2xvYWQgPD0gc2QtPmltYmFsYW5jZV9wY3QgKiBzZHMudGhpc19sb2FkKQotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQotCXNkcy5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgLz0gc2RzLmJ1c2llc3RfbnJfcnVubmluZzsKLQlpZiAoc2RzLmdyb3VwX2ltYikKLQkJc2RzLmJ1c2llc3RfbG9hZF9wZXJfdGFzayA9Ci0JCQltaW4oc2RzLmJ1c2llc3RfbG9hZF9wZXJfdGFzaywgc2RzLmF2Z19sb2FkKTsKLQotCS8qCi0JICogV2UncmUgdHJ5aW5nIHRvIGdldCBhbGwgdGhlIGNwdXMgdG8gdGhlIGF2ZXJhZ2VfbG9hZCwgc28gd2UgZG9uJ3QKLQkgKiB3YW50IHRvIHB1c2ggb3Vyc2VsdmVzIGFib3ZlIHRoZSBhdmVyYWdlIGxvYWQsIG5vciBkbyB3ZSB3aXNoIHRvCi0JICogcmVkdWNlIHRoZSBtYXggbG9hZGVkIGNwdSBiZWxvdyB0aGUgYXZlcmFnZSBsb2FkLCBhcyBlaXRoZXIgb2YgdGhlc2UKLQkgKiBhY3Rpb25zIHdvdWxkIGp1c3QgcmVzdWx0IGluIG1vcmUgcmViYWxhbmNpbmcgbGF0ZXIsIGFuZCBwaW5nLXBvbmcKLQkgKiB0YXNrcyBhcm91bmQuIFRodXMgd2UgbG9vayBmb3IgdGhlIG1pbmltdW0gcG9zc2libGUgaW1iYWxhbmNlLgotCSAqIE5lZ2F0aXZlIGltYmFsYW5jZXMgKCp3ZSogYXJlIG1vcmUgbG9hZGVkIHRoYW4gYW55b25lIGVsc2UpIHdpbGwKLQkgKiBiZSBjb3VudGVkIGFzIG5vIGltYmFsYW5jZSBmb3IgdGhlc2UgcHVycG9zZXMgLS0gd2UgY2FuJ3QgZml4IHRoYXQKLQkgKiBieSBwdWxsaW5nIHRhc2tzIHRvIHVzLiBCZSBjYXJlZnVsIG9mIG5lZ2F0aXZlIG51bWJlcnMgYXMgdGhleSdsbAotCSAqIGFwcGVhciBhcyB2ZXJ5IGxhcmdlIHZhbHVlcyB3aXRoIHVuc2lnbmVkIGxvbmdzLgotCSAqLwotCWlmIChzZHMubWF4X2xvYWQgPD0gc2RzLmJ1c2llc3RfbG9hZF9wZXJfdGFzaykKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0KLQkvKiBMb29rcyBsaWtlIHRoZXJlIGlzIGFuIGltYmFsYW5jZS4gQ29tcHV0ZSBpdCAqLwotCWNhbGN1bGF0ZV9pbWJhbGFuY2UoJnNkcywgdGhpc19jcHUsIGltYmFsYW5jZSk7Ci0JcmV0dXJuIHNkcy5idXNpZXN0OwotCi1vdXRfYmFsYW5jZWQ6Ci0JLyoKLQkgKiBUaGVyZSBpcyBubyBvYnZpb3VzIGltYmFsYW5jZS4gQnV0IGNoZWNrIGlmIHdlIGNhbiBkbyBzb21lIGJhbGFuY2luZwotCSAqIHRvIHNhdmUgcG93ZXIuCi0JICovCi0JaWYgKGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cCgmc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKSkKLQkJcmV0dXJuIHNkcy5idXNpZXN0OwotcmV0OgotCSppbWJhbGFuY2UgPSAwOwotCXJldHVybiBOVUxMOwotfQotCi0vKgotICogZmluZF9idXNpZXN0X3F1ZXVlIC0gZmluZCB0aGUgYnVzaWVzdCBydW5xdWV1ZSBhbW9uZyB0aGUgY3B1cyBpbiBncm91cC4KLSAqLwotc3RhdGljIHN0cnVjdCBycSAqCi1maW5kX2J1c2llc3RfcXVldWUoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCSAgIHVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cykKLXsKLQlzdHJ1Y3QgcnEgKmJ1c2llc3QgPSBOVUxMLCAqcnE7Ci0JdW5zaWduZWQgbG9uZyBtYXhfbG9hZCA9IDA7Ci0JaW50IGk7Ci0KLQlmb3JfZWFjaF9jcHUoaSwgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpIHsKLQkJdW5zaWduZWQgbG9uZyBwb3dlciA9IHBvd2VyX29mKGkpOwotCQl1bnNpZ25lZCBsb25nIGNhcGFjaXR5ID0gRElWX1JPVU5EX0NMT1NFU1QocG93ZXIsIFNDSEVEX0xPQURfU0NBTEUpOwotCQl1bnNpZ25lZCBsb25nIHdsOwotCi0JCWlmICghY3B1bWFza190ZXN0X2NwdShpLCBjcHVzKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJxID0gY3B1X3JxKGkpOwotCQl3bCA9IHdlaWdodGVkX2NwdWxvYWQoaSkgKiBTQ0hFRF9MT0FEX1NDQUxFOwotCQl3bCAvPSBwb3dlcjsKLQotCQlpZiAoY2FwYWNpdHkgJiYgcnEtPm5yX3J1bm5pbmcgPT0gMSAmJiB3bCA+IGltYmFsYW5jZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICh3bCA+IG1heF9sb2FkKSB7Ci0JCQltYXhfbG9hZCA9IHdsOwotCQkJYnVzaWVzdCA9IHJxOwotCQl9Ci0JfQotCi0JcmV0dXJuIGJ1c2llc3Q7Ci19Ci0KLS8qCi0gKiBNYXggYmFja29mZiBpZiB3ZSBlbmNvdW50ZXIgcGlubmVkIHRhc2tzLiBQcmV0dHkgYXJiaXRyYXJ5IHZhbHVlLCBidXQKLSAqIHNvIGxvbmcgYXMgaXQgaXMgbGFyZ2UgZW5vdWdoLgotICovCi0jZGVmaW5lIE1BWF9QSU5ORURfSU5URVJWQUwJNTEyCi0KLS8qIFdvcmtpbmcgY3B1bWFzayBmb3IgbG9hZF9iYWxhbmNlIGFuZCBsb2FkX2JhbGFuY2VfbmV3aWRsZS4gKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShjcHVtYXNrX3Zhcl90LCBsb2FkX2JhbGFuY2VfdG1wbWFzayk7Ci0KLS8qCi0gKiBDaGVjayB0aGlzX2NwdSB0byBlbnN1cmUgaXQgaXMgYmFsYW5jZWQgd2l0aGluIGRvbWFpbi4gQXR0ZW1wdCB0byBtb3ZlCi0gKiB0YXNrcyBpZiB0aGVyZSBpcyBhbiBpbWJhbGFuY2UuCi0gKi8KLXN0YXRpYyBpbnQgbG9hZF9iYWxhbmNlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLAotCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkJaW50ICpiYWxhbmNlKQotewotCWludCBsZF9tb3ZlZCwgYWxsX3Bpbm5lZCA9IDAsIGFjdGl2ZV9iYWxhbmNlID0gMCwgc2RfaWRsZSA9IDA7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpncm91cDsKLQl1bnNpZ25lZCBsb25nIGltYmFsYW5jZTsKLQlzdHJ1Y3QgcnEgKmJ1c2llc3Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgY3B1bWFzayAqY3B1cyA9IF9fZ2V0X2NwdV92YXIobG9hZF9iYWxhbmNlX3RtcG1hc2spOwotCi0JY3B1bWFza19jb3B5KGNwdXMsIGNwdV9hY3RpdmVfbWFzayk7Ci0KLQkvKgotCSAqIFdoZW4gcG93ZXIgc2F2aW5ncyBwb2xpY3kgaXMgZW5hYmxlZCBmb3IgdGhlIHBhcmVudCBkb21haW4sIGlkbGUKLQkgKiBzaWJsaW5nIGNhbiBwaWNrIHVwIGxvYWQgaXJyZXNwZWN0aXZlIG9mIGJ1c3kgc2libGluZ3MuIEluIHRoaXMgY2FzZSwKLQkgKiBsZXQgdGhlIHN0YXRlIG9mIGlkbGUgc2libGluZyBwZXJjb2xhdGUgdXAgYXMgQ1BVX0lETEUsIGluc3RlYWQgb2YKLQkgKiBwb3J0cmF5aW5nIGl0IGFzIENQVV9OT1RfSURMRS4KLQkgKi8KLQlpZiAoaWRsZSAhPSBDUFVfTk9UX0lETEUgJiYgc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIgJiYKLQkgICAgIXRlc3Rfc2RfcGFyZW50KHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCi0JCXNkX2lkbGUgPSAxOwotCi0Jc2NoZWRzdGF0X2luYyhzZCwgbGJfY291bnRbaWRsZV0pOwotCi1yZWRvOgotCXVwZGF0ZV9zaGFyZXMoc2QpOwotCWdyb3VwID0gZmluZF9idXNpZXN0X2dyb3VwKHNkLCB0aGlzX2NwdSwgJmltYmFsYW5jZSwgaWRsZSwgJnNkX2lkbGUsCi0JCQkJICAgY3B1cywgYmFsYW5jZSk7Ci0KLQlpZiAoKmJhbGFuY2UgPT0gMCkKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0KLQlpZiAoIWdyb3VwKSB7Ci0JCXNjaGVkc3RhdF9pbmMoc2QsIGxiX25vYnVzeWdbaWRsZV0pOwotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQl9Ci0KLQlidXNpZXN0ID0gZmluZF9idXNpZXN0X3F1ZXVlKGdyb3VwLCBpZGxlLCBpbWJhbGFuY2UsIGNwdXMpOwotCWlmICghYnVzaWVzdCkgewotCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ub2J1c3lxW2lkbGVdKTsKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0JfQotCi0JQlVHX09OKGJ1c2llc3QgPT0gdGhpc19ycSk7Ci0KLQlzY2hlZHN0YXRfYWRkKHNkLCBsYl9pbWJhbGFuY2VbaWRsZV0sIGltYmFsYW5jZSk7Ci0KLQlsZF9tb3ZlZCA9IDA7Ci0JaWYgKGJ1c2llc3QtPm5yX3J1bm5pbmcgPiAxKSB7Ci0JCS8qCi0JCSAqIEF0dGVtcHQgdG8gbW92ZSB0YXNrcy4gSWYgZmluZF9idXNpZXN0X2dyb3VwIGhhcyBmb3VuZAotCQkgKiBhbiBpbWJhbGFuY2UgYnV0IGJ1c2llc3QtPm5yX3J1bm5pbmcgPD0gMSwgdGhlIGdyb3VwIGlzCi0JCSAqIHN0aWxsIHVuYmFsYW5jZWQuIGxkX21vdmVkIHNpbXBseSBzdGF5cyB6ZXJvLCBzbyBpdCBpcwotCQkgKiBjb3JyZWN0bHkgdHJlYXRlZCBhcyBhbiBpbWJhbGFuY2UuCi0JCSAqLwotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCWRvdWJsZV9ycV9sb2NrKHRoaXNfcnEsIGJ1c2llc3QpOwotCQlsZF9tb3ZlZCA9IG1vdmVfdGFza3ModGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCi0JCQkJICAgICAgaW1iYWxhbmNlLCBzZCwgaWRsZSwgJmFsbF9waW5uZWQpOwotCQlkb3VibGVfcnFfdW5sb2NrKHRoaXNfcnEsIGJ1c2llc3QpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkJLyoKLQkJICogc29tZSBvdGhlciBjcHUgZGlkIHRoZSBsb2FkIGJhbGFuY2UgZm9yIHVzLgotCQkgKi8KLQkJaWYgKGxkX21vdmVkICYmIHRoaXNfY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKLQkJCXJlc2NoZWRfY3B1KHRoaXNfY3B1KTsKLQotCQkvKiBBbGwgdGFza3Mgb24gdGhpcyBydW5xdWV1ZSB3ZXJlIHBpbm5lZCBieSBDUFUgYWZmaW5pdHkgKi8KLQkJaWYgKHVubGlrZWx5KGFsbF9waW5uZWQpKSB7Ci0JCQljcHVtYXNrX2NsZWFyX2NwdShjcHVfb2YoYnVzaWVzdCksIGNwdXMpOwotCQkJaWYgKCFjcHVtYXNrX2VtcHR5KGNwdXMpKQotCQkJCWdvdG8gcmVkbzsKLQkJCWdvdG8gb3V0X2JhbGFuY2VkOwotCQl9Ci0JfQotCi0JaWYgKCFsZF9tb3ZlZCkgewotCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9mYWlsZWRbaWRsZV0pOwotCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQrKzsKLQotCQlpZiAodW5saWtlbHkoc2QtPm5yX2JhbGFuY2VfZmFpbGVkID4gc2QtPmNhY2hlX25pY2VfdHJpZXMrMikpIHsKLQotCQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZidXNpZXN0LT5sb2NrLCBmbGFncyk7Ci0KLQkJCS8qIGRvbid0IGtpY2sgdGhlIG1pZ3JhdGlvbl90aHJlYWQsIGlmIHRoZSBjdXJyCi0JCQkgKiB0YXNrIG9uIGJ1c2llc3QgY3B1IGNhbid0IGJlIG1vdmVkIHRvIHRoaXNfY3B1Ci0JCQkgKi8KLQkJCWlmICghY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwKLQkJCQkJICAgICAgJmJ1c2llc3QtPmN1cnItPmNwdXNfYWxsb3dlZCkpIHsKLQkJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVzaWVzdC0+bG9jaywKLQkJCQkJCQkgICAgZmxhZ3MpOwotCQkJCWFsbF9waW5uZWQgPSAxOwotCQkJCWdvdG8gb3V0X29uZV9waW5uZWQ7Ci0JCQl9Ci0KLQkJCWlmICghYnVzaWVzdC0+YWN0aXZlX2JhbGFuY2UpIHsKLQkJCQlidXNpZXN0LT5hY3RpdmVfYmFsYW5jZSA9IDE7Ci0JCQkJYnVzaWVzdC0+cHVzaF9jcHUgPSB0aGlzX2NwdTsKLQkJCQlhY3RpdmVfYmFsYW5jZSA9IDE7Ci0JCQl9Ci0JCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVzaWVzdC0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKGFjdGl2ZV9iYWxhbmNlKQotCQkJCXdha2VfdXBfcHJvY2VzcyhidXNpZXN0LT5taWdyYXRpb25fdGhyZWFkKTsKLQotCQkJLyoKLQkJCSAqIFdlJ3ZlIGtpY2tlZCBhY3RpdmUgYmFsYW5jaW5nLCByZXNldCB0aGUgZmFpbHVyZQotCQkJICogY291bnRlci4KLQkJCSAqLwotCQkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID0gc2QtPmNhY2hlX25pY2VfdHJpZXMrMTsKLQkJfQotCX0gZWxzZQotCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPSAwOwotCi0JaWYgKGxpa2VseSghYWN0aXZlX2JhbGFuY2UpKSB7Ci0JCS8qIFdlIHdlcmUgdW5iYWxhbmNlZCwgc28gcmVzZXQgdGhlIGJhbGFuY2luZyBpbnRlcnZhbCAqLwotCQlzZC0+YmFsYW5jZV9pbnRlcnZhbCA9IHNkLT5taW5faW50ZXJ2YWw7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogSWYgd2UndmUgYmVndW4gYWN0aXZlIGJhbGFuY2luZywgc3RhcnQgdG8gYmFjayBvZmYuIFRoaXMKLQkJICogY2FzZSBtYXkgbm90IGJlIGNvdmVyZWQgYnkgdGhlIGFsbF9waW5uZWQgbG9naWMgaWYgdGhlcmUKLQkJICogaXMgb25seSAxIHRhc2sgb24gdGhlIGJ1c3kgcnVucXVldWUgKGJlY2F1c2Ugd2UgZG9uJ3QgY2FsbAotCQkgKiBtb3ZlX3Rhc2tzKS4KLQkJICovCi0JCWlmIChzZC0+YmFsYW5jZV9pbnRlcnZhbCA8IHNkLT5tYXhfaW50ZXJ2YWwpCi0JCQlzZC0+YmFsYW5jZV9pbnRlcnZhbCAqPSAyOwotCX0KLQotCWlmICghbGRfbW92ZWQgJiYgIXNkX2lkbGUgJiYgc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIgJiYKLQkgICAgIXRlc3Rfc2RfcGFyZW50KHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCi0JCWxkX21vdmVkID0gLTE7Ci0KLQlnb3RvIG91dDsKLQotb3V0X2JhbGFuY2VkOgotCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2JhbGFuY2VkW2lkbGVdKTsKLQotCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA9IDA7Ci0KLW91dF9vbmVfcGlubmVkOgotCS8qIHR1bmUgdXAgdGhlIGJhbGFuY2luZyBpbnRlcnZhbCAqLwotCWlmICgoYWxsX3Bpbm5lZCAmJiBzZC0+YmFsYW5jZV9pbnRlcnZhbCA8IE1BWF9QSU5ORURfSU5URVJWQUwpIHx8Ci0JCQkoc2QtPmJhbGFuY2VfaW50ZXJ2YWwgPCBzZC0+bWF4X2ludGVydmFsKSkKLQkJc2QtPmJhbGFuY2VfaW50ZXJ2YWwgKj0gMjsKLQotCWlmICghc2RfaWRsZSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgotCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJbGRfbW92ZWQgPSAtMTsKLQllbHNlCi0JCWxkX21vdmVkID0gMDsKLW91dDoKLQlpZiAobGRfbW92ZWQpCi0JCXVwZGF0ZV9zaGFyZXMoc2QpOwotCXJldHVybiBsZF9tb3ZlZDsKLX0KLQotLyoKLSAqIENoZWNrIHRoaXNfY3B1IHRvIGVuc3VyZSBpdCBpcyBiYWxhbmNlZCB3aXRoaW4gZG9tYWluLiBBdHRlbXB0IHRvIG1vdmUKLSAqIHRhc2tzIGlmIHRoZXJlIGlzIGFuIGltYmFsYW5jZS4KLSAqCi0gKiBDYWxsZWQgZnJvbSBzY2hlZHVsZSB3aGVuIHRoaXNfcnEgaXMgYWJvdXQgdG8gYmVjb21lIGlkbGUgKENQVV9ORVdMWV9JRExFKS4KLSAqIHRoaXNfcnEgaXMgbG9ja2VkLgotICovCi1zdGF0aWMgaW50Ci1sb2FkX2JhbGFuY2VfbmV3aWRsZShpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCi17Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpncm91cDsKLQlzdHJ1Y3QgcnEgKmJ1c2llc3QgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlOwotCWludCBsZF9tb3ZlZCA9IDA7Ci0JaW50IHNkX2lkbGUgPSAwOwotCWludCBhbGxfcGlubmVkID0gMDsKLQlzdHJ1Y3QgY3B1bWFzayAqY3B1cyA9IF9fZ2V0X2NwdV92YXIobG9hZF9iYWxhbmNlX3RtcG1hc2spOwotCi0JY3B1bWFza19jb3B5KGNwdXMsIGNwdV9hY3RpdmVfbWFzayk7Ci0KLQkvKgotCSAqIFdoZW4gcG93ZXIgc2F2aW5ncyBwb2xpY3kgaXMgZW5hYmxlZCBmb3IgdGhlIHBhcmVudCBkb21haW4sIGlkbGUKLQkgKiBzaWJsaW5nIGNhbiBwaWNrIHVwIGxvYWQgaXJyZXNwZWN0aXZlIG9mIGJ1c3kgc2libGluZ3MuIEluIHRoaXMgY2FzZSwKLQkgKiBsZXQgdGhlIHN0YXRlIG9mIGlkbGUgc2libGluZyBwZXJjb2xhdGUgdXAgYXMgSURMRSwgaW5zdGVhZCBvZgotCSAqIHBvcnRyYXlpbmcgaXQgYXMgQ1BVX05PVF9JRExFLgotCSAqLwotCWlmIChzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgotCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJc2RfaWRsZSA9IDE7Ci0KLQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9jb3VudFtDUFVfTkVXTFlfSURMRV0pOwotcmVkbzoKLQl1cGRhdGVfc2hhcmVzX2xvY2tlZCh0aGlzX3JxLCBzZCk7Ci0JZ3JvdXAgPSBmaW5kX2J1c2llc3RfZ3JvdXAoc2QsIHRoaXNfY3B1LCAmaW1iYWxhbmNlLCBDUFVfTkVXTFlfSURMRSwKLQkJCQkgICAmc2RfaWRsZSwgY3B1cywgTlVMTCk7Ci0JaWYgKCFncm91cCkgewotCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ub2J1c3lnW0NQVV9ORVdMWV9JRExFXSk7Ci0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCX0KLQotCWJ1c2llc3QgPSBmaW5kX2J1c2llc3RfcXVldWUoZ3JvdXAsIENQVV9ORVdMWV9JRExFLCBpbWJhbGFuY2UsIGNwdXMpOwotCWlmICghYnVzaWVzdCkgewotCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ub2J1c3lxW0NQVV9ORVdMWV9JRExFXSk7Ci0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCX0KLQotCUJVR19PTihidXNpZXN0ID09IHRoaXNfcnEpOwotCi0Jc2NoZWRzdGF0X2FkZChzZCwgbGJfaW1iYWxhbmNlW0NQVV9ORVdMWV9JRExFXSwgaW1iYWxhbmNlKTsKLQotCWxkX21vdmVkID0gMDsKLQlpZiAoYnVzaWVzdC0+bnJfcnVubmluZyA+IDEpIHsKLQkJLyogQXR0ZW1wdCB0byBtb3ZlIHRhc2tzICovCi0JCWRvdWJsZV9sb2NrX2JhbGFuY2UodGhpc19ycSwgYnVzaWVzdCk7Ci0JCS8qIHRoaXNfcnEtPmNsb2NrIGlzIGFscmVhZHkgdXBkYXRlZCAqLwotCQl1cGRhdGVfcnFfY2xvY2soYnVzaWVzdCk7Ci0JCWxkX21vdmVkID0gbW92ZV90YXNrcyh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKLQkJCQkJaW1iYWxhbmNlLCBzZCwgQ1BVX05FV0xZX0lETEUsCi0JCQkJCSZhbGxfcGlubmVkKTsKLQkJZG91YmxlX3VubG9ja19iYWxhbmNlKHRoaXNfcnEsIGJ1c2llc3QpOwotCi0JCWlmICh1bmxpa2VseShhbGxfcGlubmVkKSkgewotCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1X29mKGJ1c2llc3QpLCBjcHVzKTsKLQkJCWlmICghY3B1bWFza19lbXB0eShjcHVzKSkKLQkJCQlnb3RvIHJlZG87Ci0JCX0KLQl9Ci0KLQlpZiAoIWxkX21vdmVkKSB7Ci0JCWludCBhY3RpdmVfYmFsYW5jZSA9IDA7Ci0KLQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfZmFpbGVkW0NQVV9ORVdMWV9JRExFXSk7Ci0JCWlmICghc2RfaWRsZSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgotCQkgICAgIXRlc3Rfc2RfcGFyZW50KHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJaWYgKHNjaGVkX21jX3Bvd2VyX3NhdmluZ3MgPCBQT1dFUlNBVklOR1NfQkFMQU5DRV9XQUtFVVApCi0JCQlyZXR1cm4gLTE7Ci0KLQkJaWYgKHNkLT5ucl9iYWxhbmNlX2ZhaWxlZCsrIDwgMikKLQkJCXJldHVybiAtMTsKLQotCQkvKgotCQkgKiBUaGUgb25seSB0YXNrIHJ1bm5pbmcgaW4gYSBub24taWRsZSBjcHUgY2FuIGJlIG1vdmVkIHRvIHRoaXMKLQkJICogY3B1IGluIGFuIGF0dGVtcHQgdG8gY29tcGxldGVseSBmcmVldXAgdGhlIG90aGVyIENQVQotCQkgKiBwYWNrYWdlLiBUaGUgc2FtZSBtZXRob2QgdXNlZCB0byBtb3ZlIHRhc2sgaW4gbG9hZF9iYWxhbmNlKCkKLQkJICogaGF2ZSBiZWVuIGV4dGVuZGVkIGZvciBsb2FkX2JhbGFuY2VfbmV3aWRsZSgpIHRvIHNwZWVkdXAKLQkJICogY29uc29saWRhdGlvbiBhdCBzY2hlZF9tYz1QT1dFUlNBVklOR1NfQkFMQU5DRV9XQUtFVVAgKDIpCi0JCSAqCi0JCSAqIFRoZSBwYWNrYWdlIHBvd2VyIHNhdmluZyBsb2dpYyBjb21lcyBmcm9tCi0JCSAqIGZpbmRfYnVzaWVzdF9ncm91cCgpLiAgSWYgdGhlcmUgYXJlIG5vIGltYmFsYW5jZSwgdGhlbgotCQkgKiBmX2JfZygpIHdpbGwgcmV0dXJuIE5VTEwuICBIb3dldmVyIHdoZW4gc2NoZWRfbWM9ezEsMn0gdGhlbgotCQkgKiBmX2JfZygpIHdpbGwgc2VsZWN0IGEgZ3JvdXAgZnJvbSB3aGljaCBhIHJ1bm5pbmcgdGFzayBtYXkgYmUKLQkJICogcHVsbGVkIHRvIHRoaXMgY3B1IGluIG9yZGVyIHRvIG1ha2UgdGhlIG90aGVyIHBhY2thZ2UgaWRsZS4KLQkJICogSWYgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gbWFrZSBhIHBhY2thZ2UgaWRsZSBhbmQgaWYKLQkJICogdGhlcmUgYXJlIG5vIGltYmFsYW5jZSwgdGhlbiBmX2JfZygpIHdpbGwgcmV0dXJuIE5VTEwgYW5kIG5vCi0JCSAqIGFjdGlvbiB3aWxsIGJlIHRha2VuIGluIGxvYWRfYmFsYW5jZV9uZXdpZGxlKCkuCi0JCSAqCi0JCSAqIFVuZGVyIG5vcm1hbCB0YXNrIHB1bGwgb3BlcmF0aW9uIGR1ZSB0byBpbWJhbGFuY2UsIHRoZXJlCi0JCSAqIHdpbGwgYmUgbW9yZSB0aGFuIG9uZSB0YXNrIGluIHRoZSBzb3VyY2UgcnVuIHF1ZXVlIGFuZAotCQkgKiBtb3ZlX3Rhc2tzKCkgd2lsbCBzdWNjZWVkLiAgbGRfbW92ZWQgd2lsbCBiZSB0cnVlIGFuZCB0aGlzCi0JCSAqIGFjdGl2ZSBiYWxhbmNlIGNvZGUgd2lsbCBub3QgYmUgdHJpZ2dlcmVkLgotCQkgKi8KLQotCQkvKiBMb2NrIGJ1c2llc3QgaW4gY29ycmVjdCBvcmRlciB3aGlsZSB0aGlzX3JxIGlzIGhlbGQgKi8KLQkJZG91YmxlX2xvY2tfYmFsYW5jZSh0aGlzX3JxLCBidXNpZXN0KTsKLQotCQkvKgotCQkgKiBkb24ndCBraWNrIHRoZSBtaWdyYXRpb25fdGhyZWFkLCBpZiB0aGUgY3VycgotCQkgKiB0YXNrIG9uIGJ1c2llc3QgY3B1IGNhbid0IGJlIG1vdmVkIHRvIHRoaXNfY3B1Ci0JCSAqLwotCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsICZidXNpZXN0LT5jdXJyLT5jcHVzX2FsbG93ZWQpKSB7Ci0JCQlkb3VibGVfdW5sb2NrX2JhbGFuY2UodGhpc19ycSwgYnVzaWVzdCk7Ci0JCQlhbGxfcGlubmVkID0gMTsKLQkJCXJldHVybiBsZF9tb3ZlZDsKLQkJfQotCi0JCWlmICghYnVzaWVzdC0+YWN0aXZlX2JhbGFuY2UpIHsKLQkJCWJ1c2llc3QtPmFjdGl2ZV9iYWxhbmNlID0gMTsKLQkJCWJ1c2llc3QtPnB1c2hfY3B1ID0gdGhpc19jcHU7Ci0JCQlhY3RpdmVfYmFsYW5jZSA9IDE7Ci0JCX0KLQotCQlkb3VibGVfdW5sb2NrX2JhbGFuY2UodGhpc19ycSwgYnVzaWVzdCk7Ci0JCS8qCi0JCSAqIFNob3VsZCBub3QgY2FsbCB0dHd1IHdoaWxlIGhvbGRpbmcgYSBycS0+bG9jawotCQkgKi8KLQkJcmF3X3NwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKLQkJaWYgKGFjdGl2ZV9iYWxhbmNlKQotCQkJd2FrZV91cF9wcm9jZXNzKGJ1c2llc3QtPm1pZ3JhdGlvbl90aHJlYWQpOwotCQlyYXdfc3Bpbl9sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKLQotCX0gZWxzZQotCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPSAwOwotCi0JdXBkYXRlX3NoYXJlc19sb2NrZWQodGhpc19ycSwgc2QpOwotCXJldHVybiBsZF9tb3ZlZDsKLQotb3V0X2JhbGFuY2VkOgotCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2JhbGFuY2VkW0NQVV9ORVdMWV9JRExFXSk7Ci0JaWYgKCFzZF9pZGxlICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCi0JICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQotCQlyZXR1cm4gLTE7Ci0Jc2QtPm5yX2JhbGFuY2VfZmFpbGVkID0gMDsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogaWRsZV9iYWxhbmNlIGlzIGNhbGxlZCBieSBzY2hlZHVsZSgpIGlmIHRoaXNfY3B1IGlzIGFib3V0IHRvIGJlY29tZQotICogaWRsZS4gQXR0ZW1wdHMgdG8gcHVsbCB0YXNrcyBmcm9tIG90aGVyIENQVXMuCi0gKi8KLXN0YXRpYyB2b2lkIGlkbGVfYmFsYW5jZShpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSkKLXsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKLQlpbnQgcHVsbGVkX3Rhc2sgPSAwOwotCXVuc2lnbmVkIGxvbmcgbmV4dF9iYWxhbmNlID0gamlmZmllcyArIEhaOwotCi0JdGhpc19ycS0+aWRsZV9zdGFtcCA9IHRoaXNfcnEtPmNsb2NrOwotCi0JaWYgKHRoaXNfcnEtPmF2Z19pZGxlIDwgc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0KQotCQlyZXR1cm47Ci0KLQlmb3JfZWFjaF9kb21haW4odGhpc19jcHUsIHNkKSB7Ci0JCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWw7Ci0KLQkJaWYgKCEoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzZC0+ZmxhZ3MgJiBTRF9CQUxBTkNFX05FV0lETEUpCi0JCQkvKiBJZiB3ZSd2ZSBwdWxsZWQgdGFza3Mgb3ZlciBzdG9wIHNlYXJjaGluZzogKi8KLQkJCXB1bGxlZF90YXNrID0gbG9hZF9iYWxhbmNlX25ld2lkbGUodGhpc19jcHUsIHRoaXNfcnEsCi0JCQkJCQkJICAgc2QpOwotCi0JCWludGVydmFsID0gbXNlY3NfdG9famlmZmllcyhzZC0+YmFsYW5jZV9pbnRlcnZhbCk7Ci0JCWlmICh0aW1lX2FmdGVyKG5leHRfYmFsYW5jZSwgc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsKSkKLQkJCW5leHRfYmFsYW5jZSA9IHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbDsKLQkJaWYgKHB1bGxlZF90YXNrKSB7Ci0JCQl0aGlzX3JxLT5pZGxlX3N0YW1wID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChwdWxsZWRfdGFzayB8fCB0aW1lX2FmdGVyKGppZmZpZXMsIHRoaXNfcnEtPm5leHRfYmFsYW5jZSkpIHsKLQkJLyoKLQkJICogV2UgYXJlIGdvaW5nIGlkbGUuIG5leHRfYmFsYW5jZSBtYXkgYmUgc2V0IGJhc2VkIG9uCi0JCSAqIGEgYnVzeSBwcm9jZXNzb3IuIFNvIHJlc2V0IG5leHRfYmFsYW5jZS4KLQkJICovCi0JCXRoaXNfcnEtPm5leHRfYmFsYW5jZSA9IG5leHRfYmFsYW5jZTsKLQl9Ci19Ci0KLS8qCi0gKiBhY3RpdmVfbG9hZF9iYWxhbmNlIGlzIHJ1biBieSBtaWdyYXRpb24gdGhyZWFkcy4gSXQgcHVzaGVzIHJ1bm5pbmcgdGFza3MKLSAqIG9mZiB0aGUgYnVzaWVzdCBDUFUgb250byBpZGxlIENQVXMuIEl0IHJlcXVpcmVzIGF0IGxlYXN0IDEgdGFzayB0byBiZQotICogcnVubmluZyBvbiBlYWNoIHBoeXNpY2FsIENQVSB3aGVyZSBwb3NzaWJsZSwgYW5kIGF2b2lkcyBwaHlzaWNhbCAvCi0gKiBsb2dpY2FsIGltYmFsYW5jZXMuCi0gKgotICogQ2FsbGVkIHdpdGggYnVzaWVzdF9ycSBsb2NrZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGFjdGl2ZV9sb2FkX2JhbGFuY2Uoc3RydWN0IHJxICpidXNpZXN0X3JxLCBpbnQgYnVzaWVzdF9jcHUpCi17Ci0JaW50IHRhcmdldF9jcHUgPSBidXNpZXN0X3JxLT5wdXNoX2NwdTsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKLQlzdHJ1Y3QgcnEgKnRhcmdldF9ycTsKLQotCS8qIElzIHRoZXJlIGFueSB0YXNrIHRvIG1vdmU/ICovCi0JaWYgKGJ1c2llc3RfcnEtPm5yX3J1bm5pbmcgPD0gMSkKLQkJcmV0dXJuOwotCi0JdGFyZ2V0X3JxID0gY3B1X3JxKHRhcmdldF9jcHUpOwotCi0JLyoKLQkgKiBUaGlzIGNvbmRpdGlvbiBpcyAiaW1wb3NzaWJsZSIsIGlmIGl0IG9jY3VycwotCSAqIHdlIG5lZWQgdG8gZml4IGl0LiBPcmlnaW5hbGx5IHJlcG9ydGVkIGJ5Ci0JICogQmpvcm4gSGVsZ2FhcyBvbiBhIDEyOC1jcHUgc2V0dXAuCi0JICovCi0JQlVHX09OKGJ1c2llc3RfcnEgPT0gdGFyZ2V0X3JxKTsKLQotCS8qIG1vdmUgYSB0YXNrIGZyb20gYnVzaWVzdF9ycSB0byB0YXJnZXRfcnEgKi8KLQlkb3VibGVfbG9ja19iYWxhbmNlKGJ1c2llc3RfcnEsIHRhcmdldF9ycSk7Ci0JdXBkYXRlX3JxX2Nsb2NrKGJ1c2llc3RfcnEpOwotCXVwZGF0ZV9ycV9jbG9jayh0YXJnZXRfcnEpOwotCi0JLyogU2VhcmNoIGZvciBhbiBzZCBzcGFubmluZyB1cyBhbmQgdGhlIHRhcmdldCBDUFUuICovCi0JZm9yX2VhY2hfZG9tYWluKHRhcmdldF9jcHUsIHNkKSB7Ci0JCWlmICgoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSAmJgotCQkgICAgY3B1bWFza190ZXN0X2NwdShidXNpZXN0X2NwdSwgc2NoZWRfZG9tYWluX3NwYW4oc2QpKSkKLQkJCQlicmVhazsKLQl9Ci0KLQlpZiAobGlrZWx5KHNkKSkgewotCQlzY2hlZHN0YXRfaW5jKHNkLCBhbGJfY291bnQpOwotCi0JCWlmIChtb3ZlX29uZV90YXNrKHRhcmdldF9ycSwgdGFyZ2V0X2NwdSwgYnVzaWVzdF9ycSwKLQkJCQkgIHNkLCBDUFVfSURMRSkpCi0JCQlzY2hlZHN0YXRfaW5jKHNkLCBhbGJfcHVzaGVkKTsKLQkJZWxzZQotCQkJc2NoZWRzdGF0X2luYyhzZCwgYWxiX2ZhaWxlZCk7Ci0JfQotCWRvdWJsZV91bmxvY2tfYmFsYW5jZShidXNpZXN0X3JxLCB0YXJnZXRfcnEpOwotfQotCi0jaWZkZWYgQ09ORklHX05PX0haCi1zdGF0aWMgc3RydWN0IHsKLQlhdG9taWNfdCBsb2FkX2JhbGFuY2VyOwotCWNwdW1hc2tfdmFyX3QgY3B1X21hc2s7Ci0JY3B1bWFza192YXJfdCBpbGJfZ3JwX25vaHpfbWFzazsKLX0gbm9oeiBfX19fY2FjaGVsaW5lX2FsaWduZWQgPSB7Ci0JLmxvYWRfYmFsYW5jZXIgPSBBVE9NSUNfSU5JVCgtMSksCi19OwotCi1pbnQgZ2V0X25vaHpfbG9hZF9iYWxhbmNlcih2b2lkKQotewotCXJldHVybiBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKTsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCi0vKioKLSAqIGxvd2VzdF9mbGFnX2RvbWFpbiAtIFJldHVybiBsb3dlc3Qgc2NoZWRfZG9tYWluIGNvbnRhaW5pbmcgZmxhZy4KLSAqIEBjcHU6CVRoZSBjcHUgd2hvc2UgbG93ZXN0IGxldmVsIG9mIHNjaGVkIGRvbWFpbiBpcyB0bwotICoJCWJlIHJldHVybmVkLgotICogQGZsYWc6CVRoZSBmbGFnIHRvIGNoZWNrIGZvciB0aGUgbG93ZXN0IHNjaGVkX2RvbWFpbgotICoJCWZvciB0aGUgZ2l2ZW4gY3B1LgotICoKLSAqIFJldHVybnMgdGhlIGxvd2VzdCBzY2hlZF9kb21haW4gb2YgYSBjcHUgd2hpY2ggY29udGFpbnMgdGhlIGdpdmVuIGZsYWcuCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNjaGVkX2RvbWFpbiAqbG93ZXN0X2ZsYWdfZG9tYWluKGludCBjcHUsIGludCBmbGFnKQotewotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwotCi0JZm9yX2VhY2hfZG9tYWluKGNwdSwgc2QpCi0JCWlmIChzZCAmJiAoc2QtPmZsYWdzICYgZmxhZykpCi0JCQlicmVhazsKLQotCXJldHVybiBzZDsKLX0KLQotLyoqCi0gKiBmb3JfZWFjaF9mbGFnX2RvbWFpbiAtIEl0ZXJhdGVzIG92ZXIgc2NoZWRfZG9tYWlucyBjb250YWluaW5nIHRoZSBmbGFnLgotICogQGNwdToJVGhlIGNwdSB3aG9zZSBkb21haW5zIHdlJ3JlIGl0ZXJhdGluZyBvdmVyLgotICogQHNkOgkJdmFyaWFibGUgaG9sZGluZyB0aGUgdmFsdWUgb2YgdGhlIHBvd2VyX3NhdmluZ3Nfc2QKLSAqCQlmb3IgY3B1LgotICogQGZsYWc6CVRoZSBmbGFnIHRvIGZpbHRlciB0aGUgc2NoZWRfZG9tYWlucyB0byBiZSBpdGVyYXRlZC4KLSAqCi0gKiBJdGVyYXRlcyBvdmVyIGFsbCB0aGUgc2NoZWR1bGVyIGRvbWFpbnMgZm9yIGEgZ2l2ZW4gY3B1IHRoYXQgaGFzIHRoZSAnZmxhZycKLSAqIHNldCwgc3RhcnRpbmcgZnJvbSB0aGUgbG93ZXN0IHNjaGVkX2RvbWFpbiB0byB0aGUgaGlnaGVzdC4KLSAqLwotI2RlZmluZSBmb3JfZWFjaF9mbGFnX2RvbWFpbihjcHUsIHNkLCBmbGFnKSBcCi0JZm9yIChzZCA9IGxvd2VzdF9mbGFnX2RvbWFpbihjcHUsIGZsYWcpOyBcCi0JCShzZCAmJiAoc2QtPmZsYWdzICYgZmxhZykpOyBzZCA9IHNkLT5wYXJlbnQpCi0KLS8qKgotICogaXNfc2VtaV9pZGxlX2dyb3VwIC0gQ2hlY2tzIGlmIHRoZSBnaXZlbiBzY2hlZF9ncm91cCBpcyBzZW1pLWlkbGUuCi0gKiBAaWxiX2dyb3VwOglncm91cCB0byBiZSBjaGVja2VkIGZvciBzZW1pLWlkbGVuZXNzCi0gKgotICogUmV0dXJuczoJMSBpZiB0aGUgZ3JvdXAgaXMgc2VtaS1pZGxlLiAwIG90aGVyd2lzZS4KLSAqCi0gKiBXZSBkZWZpbmUgYSBzY2hlZF9ncm91cCB0byBiZSBzZW1pIGlkbGUgaWYgaXQgaGFzIGF0bGVhc3Qgb25lIGlkbGUtQ1BVCi0gKiBhbmQgYXRsZWFzdCBvbmUgbm9uLWlkbGUgQ1BVLiBUaGlzIGhlbHBlciBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGdpdmVuCi0gKiBzY2hlZF9ncm91cCBpcyBzZW1pLWlkbGUgb3Igbm90LgotICovCi1zdGF0aWMgaW5saW5lIGludCBpc19zZW1pX2lkbGVfZ3JvdXAoc3RydWN0IHNjaGVkX2dyb3VwICppbGJfZ3JvdXApCi17Ci0JY3B1bWFza19hbmQobm9oei5pbGJfZ3JwX25vaHpfbWFzaywgbm9oei5jcHVfbWFzaywKLQkJCQkJc2NoZWRfZ3JvdXBfY3B1cyhpbGJfZ3JvdXApKTsKLQotCS8qCi0JICogQSBzY2hlZF9ncm91cCBpcyBzZW1pLWlkbGUgd2hlbiBpdCBoYXMgYXRsZWFzdCBvbmUgYnVzeSBjcHUKLQkgKiBhbmQgYXRsZWFzdCBvbmUgaWRsZSBjcHUuCi0JICovCi0JaWYgKGNwdW1hc2tfZW1wdHkobm9oei5pbGJfZ3JwX25vaHpfbWFzaykpCi0JCXJldHVybiAwOwotCi0JaWYgKGNwdW1hc2tfZXF1YWwobm9oei5pbGJfZ3JwX25vaHpfbWFzaywgc2NoZWRfZ3JvdXBfY3B1cyhpbGJfZ3JvdXApKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKLX0KLS8qKgotICogZmluZF9uZXdfaWxiIC0gRmluZHMgdGhlIG9wdGltdW0gaWRsZSBsb2FkIGJhbGFuY2VyIGZvciBub21pbmF0aW9uLgotICogQGNwdToJVGhlIGNwdSB3aGljaCBpcyBub21pbmF0aW5nIGEgbmV3IGlkbGVfbG9hZF9iYWxhbmNlci4KLSAqCi0gKiBSZXR1cm5zOglSZXR1cm5zIHRoZSBpZCBvZiB0aGUgaWRsZSBsb2FkIGJhbGFuY2VyIGlmIGl0IGV4aXN0cywKLSAqCQlFbHNlLCByZXR1cm5zID49IG5yX2NwdV9pZHMuCi0gKgotICogVGhpcyBhbGdvcml0aG0gcGlja3MgdGhlIGlkbGUgbG9hZCBiYWxhbmNlciBzdWNoIHRoYXQgaXQgYmVsb25ncyB0byBhCi0gKiBzZW1pLWlkbGUgcG93ZXJzYXZpbmdzIHNjaGVkX2RvbWFpbi4gVGhlIGlkZWEgaXMgdG8gdHJ5IGFuZCBhdm9pZAotICogY29tcGxldGVseSBpZGxlIHBhY2thZ2VzL2NvcmVzIGp1c3QgZm9yIHRoZSBwdXJwb3NlIG9mIGlkbGUgbG9hZCBiYWxhbmNpbmcKLSAqIHdoZW4gdGhlcmUgYXJlIG90aGVyIGlkbGUgY3B1J3Mgd2hpY2ggYXJlIGJldHRlciBzdWl0ZWQgZm9yIHRoYXQgam9iLgotICovCi1zdGF0aWMgaW50IGZpbmRfbmV3X2lsYihpbnQgY3B1KQotewotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwotCXN0cnVjdCBzY2hlZF9ncm91cCAqaWxiX2dyb3VwOwotCi0JLyoKLQkgKiBIYXZlIGlkbGUgbG9hZCBiYWxhbmNlciBzZWxlY3Rpb24gZnJvbSBzZW1pLWlkbGUgcGFja2FnZXMgb25seQotCSAqIHdoZW4gcG93ZXItYXdhcmUgbG9hZCBiYWxhbmNpbmcgaXMgZW5hYmxlZAotCSAqLwotCWlmICghKHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzIHx8IHNjaGVkX21jX3Bvd2VyX3NhdmluZ3MpKQotCQlnb3RvIG91dF9kb25lOwotCi0JLyoKLQkgKiBPcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugd2hlbiB3ZSBoYXZlIG5vIGlkbGUgQ1BVcyBvciBvbmx5IG9uZQotCSAqIGlkbGUgQ1BVLiBEb24ndCB3YWxrIHRoZSBzY2hlZF9kb21haW4gaGllcmFyY2h5IGluIHN1Y2ggY2FzZXMKLQkgKi8KLQlpZiAoY3B1bWFza193ZWlnaHQobm9oei5jcHVfbWFzaykgPCAyKQotCQlnb3RvIG91dF9kb25lOwotCi0JZm9yX2VhY2hfZmxhZ19kb21haW4oY3B1LCBzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpIHsKLQkJaWxiX2dyb3VwID0gc2QtPmdyb3VwczsKLQotCQlkbyB7Ci0JCQlpZiAoaXNfc2VtaV9pZGxlX2dyb3VwKGlsYl9ncm91cCkpCi0JCQkJcmV0dXJuIGNwdW1hc2tfZmlyc3Qobm9oei5pbGJfZ3JwX25vaHpfbWFzayk7Ci0KLQkJCWlsYl9ncm91cCA9IGlsYl9ncm91cC0+bmV4dDsKLQotCQl9IHdoaWxlIChpbGJfZ3JvdXAgIT0gc2QtPmdyb3Vwcyk7Ci0JfQotCi1vdXRfZG9uZToKLQlyZXR1cm4gY3B1bWFza19maXJzdChub2h6LmNwdV9tYXNrKTsKLX0KLSNlbHNlIC8qICAoQ09ORklHX1NDSEVEX01DIHx8IENPTkZJR19TQ0hFRF9TTVQpICovCi1zdGF0aWMgaW5saW5lIGludCBmaW5kX25ld19pbGIoaW50IGNhbGxfY3B1KQotewotCXJldHVybiBjcHVtYXNrX2ZpcnN0KG5vaHouY3B1X21hc2spOwotfQotI2VuZGlmCi0KLS8qCi0gKiBUaGlzIHJvdXRpbmUgd2lsbCB0cnkgdG8gbm9taW5hdGUgdGhlIGlsYiAoaWRsZSBsb2FkIGJhbGFuY2luZykKLSAqIG93bmVyIGFtb25nIHRoZSBjcHVzIHdob3NlIHRpY2tzIGFyZSBzdG9wcGVkLiBpbGIgb3duZXIgd2lsbCBkbyB0aGUgaWRsZQotICogbG9hZCBiYWxhbmNpbmcgb24gYmVoYWxmIG9mIGFsbCB0aG9zZSBjcHVzLiBJZiBhbGwgdGhlIGNwdXMgaW4gdGhlIHN5c3RlbQotICogZ28gaW50byB0aGlzIHRpY2tsZXNzIG1vZGUsIHRoZW4gdGhlcmUgd2lsbCBiZSBubyBpbGIgb3duZXIgKGFzIHRoZXJlIGlzCi0gKiBubyBuZWVkIGZvciBvbmUpIGFuZCBhbGwgdGhlIGNwdXMgd2lsbCBzbGVlcCB0aWxsIHRoZSBuZXh0IHdha2V1cCBldmVudAotICogYXJyaXZlcy4uLgotICoKLSAqIEZvciB0aGUgaWxiIG93bmVyLCB0aWNrIGlzIG5vdCBzdG9wcGVkLiBBbmQgdGhpcyB0aWNrIHdpbGwgYmUgdXNlZAotICogZm9yIGlkbGUgbG9hZCBiYWxhbmNpbmcuIGlsYiBvd25lciB3aWxsIHN0aWxsIGJlIHBhcnQgb2YKLSAqIG5vaHouY3B1X21hc2suLgotICoKLSAqIFdoaWxlIHN0b3BwaW5nIHRoZSB0aWNrLCB0aGlzIGNwdSB3aWxsIGJlY29tZSB0aGUgaWxiIG93bmVyIGlmIHRoZXJlCi0gKiBpcyBubyBvdGhlciBvd25lci4gQW5kIHdpbGwgYmUgdGhlIG93bmVyIHRpbGwgdGhhdCBjcHUgYmVjb21lcyBidXN5Ci0gKiBvciBpZiBhbGwgY3B1cyBpbiB0aGUgc3lzdGVtIHN0b3AgdGhlaXIgdGlja3MgYXQgd2hpY2ggcG9pbnQKLSAqIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGlsYiBvd25lci4KLSAqCi0gKiBXaGVuIHRoZSBpbGIgb3duZXIgYmVjb21lcyBidXN5LCBpdCBub21pbmF0ZXMgYW5vdGhlciBvd25lciwgZHVyaW5nIHRoZQotICogbmV4dCBidXN5IHNjaGVkdWxlcl90aWNrKCkKLSAqLwotaW50IHNlbGVjdF9ub2h6X2xvYWRfYmFsYW5jZXIoaW50IHN0b3BfdGljaykKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKHN0b3BfdGljaykgewotCQljcHVfcnEoY3B1KS0+aW5fbm9oel9yZWNlbnRseSA9IDE7Ci0KLQkJaWYgKCFjcHVfYWN0aXZlKGNwdSkpIHsKLQkJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSAhPSBjcHUpCi0JCQkJcmV0dXJuIDA7Ci0KLQkJCS8qCi0JCQkgKiBJZiB3ZSBhcmUgZ29pbmcgb2ZmbGluZSBhbmQgc3RpbGwgdGhlIGxlYWRlciwKLQkJCSAqIGdpdmUgdXAhCi0JCQkgKi8KLQkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCBjcHUsIC0xKSAhPSBjcHUpCi0JCQkJQlVHKCk7Ci0KLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJY3B1bWFza19zZXRfY3B1KGNwdSwgbm9oei5jcHVfbWFzayk7Ci0KLQkJLyogdGltZSBmb3IgaWxiIG93bmVyIGFsc28gdG8gc2xlZXAgKi8KLQkJaWYgKGNwdW1hc2tfd2VpZ2h0KG5vaHouY3B1X21hc2spID09IG51bV9hY3RpdmVfY3B1cygpKSB7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1KQotCQkJCWF0b21pY19zZXQoJm5vaHoubG9hZF9iYWxhbmNlciwgLTEpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gLTEpIHsKLQkJCS8qIG1ha2UgbWUgdGhlIGlsYiBvd25lciAqLwotCQkJaWYgKGF0b21pY19jbXB4Y2hnKCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xLCBjcHUpID09IC0xKQotCQkJCXJldHVybiAxOwotCQl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkgewotCQkJaW50IG5ld19pbGI7Ci0KLQkJCWlmICghKHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzIHx8Ci0JCQkJCQlzY2hlZF9tY19wb3dlcl9zYXZpbmdzKSkKLQkJCQlyZXR1cm4gMTsKLQkJCS8qCi0JCQkgKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBtb3JlIHBvd2VyLWVmZmljaWVudAotCQkJICogaWxiLgotCQkJICovCi0JCQluZXdfaWxiID0gZmluZF9uZXdfaWxiKGNwdSk7Ci0JCQlpZiAobmV3X2lsYiA8IG5yX2NwdV9pZHMgJiYgbmV3X2lsYiAhPSBjcHUpIHsKLQkJCQlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xKTsKLQkJCQlyZXNjaGVkX2NwdShuZXdfaWxiKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCXJldHVybiAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbm9oei5jcHVfbWFzaykpCi0JCQlyZXR1cm4gMDsKLQotCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG5vaHouY3B1X21hc2spOwotCi0JCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpCi0JCQlpZiAoYXRvbWljX2NtcHhjaGcoJm5vaHoubG9hZF9iYWxhbmNlciwgY3B1LCAtMSkgIT0gY3B1KQotCQkJCUJVRygpOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJhbGFuY2luZyk7Ci0KLS8qCi0gKiBJdCBjaGVja3MgZWFjaCBzY2hlZHVsaW5nIGRvbWFpbiB0byBzZWUgaWYgaXQgaXMgZHVlIHRvIGJlIGJhbGFuY2VkLAotICogYW5kIGluaXRpYXRlcyBhIGJhbGFuY2luZyBvcGVyYXRpb24gaWYgc28uCi0gKgotICogQmFsYW5jaW5nIHBhcmFtZXRlcnMgYXJlIHNldCB1cCBpbiBhcmNoX2luaXRfc2NoZWRfZG9tYWlucy4KLSAqLwotc3RhdGljIHZvaWQgcmViYWxhbmNlX2RvbWFpbnMoaW50IGNwdSwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCi17Ci0JaW50IGJhbGFuY2UgPSAxOwotCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKLQl1bnNpZ25lZCBsb25nIGludGVydmFsOwotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwotCS8qIEVhcmxpZXN0IHRpbWUgd2hlbiB3ZSBoYXZlIHRvIGRvIHJlYmFsYW5jZSBhZ2FpbiAqLwotCXVuc2lnbmVkIGxvbmcgbmV4dF9iYWxhbmNlID0gamlmZmllcyArIDYwKkhaOwotCWludCB1cGRhdGVfbmV4dF9iYWxhbmNlID0gMDsKLQlpbnQgbmVlZF9zZXJpYWxpemU7Ci0KLQlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkgewotCQlpZiAoIShzZC0+ZmxhZ3MgJiBTRF9MT0FEX0JBTEFOQ0UpKQotCQkJY29udGludWU7Ci0KLQkJaW50ZXJ2YWwgPSBzZC0+YmFsYW5jZV9pbnRlcnZhbDsKLQkJaWYgKGlkbGUgIT0gQ1BVX0lETEUpCi0JCQlpbnRlcnZhbCAqPSBzZC0+YnVzeV9mYWN0b3I7Ci0KLQkJLyogc2NhbGUgbXMgdG8gamlmZmllcyAqLwotCQlpbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMoaW50ZXJ2YWwpOwotCQlpZiAodW5saWtlbHkoIWludGVydmFsKSkKLQkJCWludGVydmFsID0gMTsKLQkJaWYgKGludGVydmFsID4gSFoqTlJfQ1BVUy8xMCkKLQkJCWludGVydmFsID0gSFoqTlJfQ1BVUy8xMDsKLQotCQluZWVkX3NlcmlhbGl6ZSA9IHNkLT5mbGFncyAmIFNEX1NFUklBTElaRTsKLQotCQlpZiAobmVlZF9zZXJpYWxpemUpIHsKLQkJCWlmICghc3Bpbl90cnlsb2NrKCZiYWxhbmNpbmcpKQotCQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsKSkgewotCQkJaWYgKGxvYWRfYmFsYW5jZShjcHUsIHJxLCBzZCwgaWRsZSwgJmJhbGFuY2UpKSB7Ci0JCQkJLyoKLQkJCQkgKiBXZSd2ZSBwdWxsZWQgdGFza3Mgb3ZlciBzbyBlaXRoZXIgd2UncmUgbm8KLQkJCQkgKiBsb25nZXIgaWRsZSwgb3Igb25lIG9mIG91ciBTTVQgc2libGluZ3MgaXMKLQkJCQkgKiBub3QgaWRsZS4KLQkJCQkgKi8KLQkJCQlpZGxlID0gQ1BVX05PVF9JRExFOwotCQkJfQotCQkJc2QtPmxhc3RfYmFsYW5jZSA9IGppZmZpZXM7Ci0JCX0KLQkJaWYgKG5lZWRfc2VyaWFsaXplKQotCQkJc3Bpbl91bmxvY2soJmJhbGFuY2luZyk7Ci1vdXQ6Ci0JCWlmICh0aW1lX2FmdGVyKG5leHRfYmFsYW5jZSwgc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsKSkgewotCQkJbmV4dF9iYWxhbmNlID0gc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsOwotCQkJdXBkYXRlX25leHRfYmFsYW5jZSA9IDE7Ci0JCX0KLQotCQkvKgotCQkgKiBTdG9wIHRoZSBsb2FkIGJhbGFuY2UgYXQgdGhpcyBsZXZlbC4gVGhlcmUgaXMgYW5vdGhlcgotCQkgKiBDUFUgaW4gb3VyIHNjaGVkIGdyb3VwIHdoaWNoIGlzIGRvaW5nIGxvYWQgYmFsYW5jaW5nIG1vcmUKLQkJICogYWN0aXZlbHkuCi0JCSAqLwotCQlpZiAoIWJhbGFuY2UpCi0JCQlicmVhazsKLQl9Ci0KLQkvKgotCSAqIG5leHRfYmFsYW5jZSB3aWxsIGJlIHVwZGF0ZWQgb25seSB3aGVuIHRoZXJlIGlzIGEgbmVlZC4KLQkgKiBXaGVuIHRoZSBjcHUgaXMgYXR0YWNoZWQgdG8gbnVsbCBkb21haW4gZm9yIGV4LCBpdCB3aWxsIG5vdCBiZQotCSAqIHVwZGF0ZWQuCi0JICovCi0JaWYgKGxpa2VseSh1cGRhdGVfbmV4dF9iYWxhbmNlKSkKLQkJcnEtPm5leHRfYmFsYW5jZSA9IG5leHRfYmFsYW5jZTsKLX0KLQotLyoKLSAqIHJ1bl9yZWJhbGFuY2VfZG9tYWlucyBpcyB0cmlnZ2VyZWQgd2hlbiBuZWVkZWQgZnJvbSB0aGUgc2NoZWR1bGVyIHRpY2suCi0gKiBJbiBDT05GSUdfTk9fSFogY2FzZSwgdGhlIGlkbGUgbG9hZCBiYWxhbmNlIG93bmVyIHdpbGwgZG8gdGhlCi0gKiByZWJhbGFuY2luZyBmb3IgYWxsIHRoZSBjcHVzIGZvciB3aG9tIHNjaGVkdWxlciB0aWNrcyBhcmUgc3RvcHBlZC4KLSAqLwotc3RhdGljIHZvaWQgcnVuX3JlYmFsYW5jZV9kb21haW5zKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqaCkKLXsKLQlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IHJxICp0aGlzX3JxID0gY3B1X3JxKHRoaXNfY3B1KTsKLQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSA9IHRoaXNfcnEtPmlkbGVfYXRfdGljayA/Ci0JCQkJCQlDUFVfSURMRSA6IENQVV9OT1RfSURMRTsKLQotCXJlYmFsYW5jZV9kb21haW5zKHRoaXNfY3B1LCBpZGxlKTsKLQotI2lmZGVmIENPTkZJR19OT19IWgotCS8qCi0JICogSWYgdGhpcyBjcHUgaXMgdGhlIG93bmVyIGZvciBpZGxlIGxvYWQgYmFsYW5jaW5nLCB0aGVuIGRvIHRoZQotCSAqIGJhbGFuY2luZyBvbiBiZWhhbGYgb2YgdGhlIG90aGVyIGlkbGUgY3B1cyB3aG9zZSB0aWNrcyBhcmUKLQkgKiBzdG9wcGVkLgotCSAqLwotCWlmICh0aGlzX3JxLT5pZGxlX2F0X3RpY2sgJiYKLQkgICAgYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gdGhpc19jcHUpIHsKLQkJc3RydWN0IHJxICpycTsKLQkJaW50IGJhbGFuY2VfY3B1OwotCi0JCWZvcl9lYWNoX2NwdShiYWxhbmNlX2NwdSwgbm9oei5jcHVfbWFzaykgewotCQkJaWYgKGJhbGFuY2VfY3B1ID09IHRoaXNfY3B1KQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKgotCQkJICogSWYgdGhpcyBjcHUgZ2V0cyB3b3JrIHRvIGRvLCBzdG9wIHRoZSBsb2FkIGJhbGFuY2luZwotCQkJICogd29yayBiZWluZyBkb25lIGZvciBvdGhlciBjcHVzLiBOZXh0IGxvYWQKLQkJCSAqIGJhbGFuY2luZyBvd25lciB3aWxsIHBpY2sgaXQgdXAuCi0JCQkgKi8KLQkJCWlmIChuZWVkX3Jlc2NoZWQoKSkKLQkJCQlicmVhazsKLQotCQkJcmViYWxhbmNlX2RvbWFpbnMoYmFsYW5jZV9jcHUsIENQVV9JRExFKTsKLQotCQkJcnEgPSBjcHVfcnEoYmFsYW5jZV9jcHUpOwotCQkJaWYgKHRpbWVfYWZ0ZXIodGhpc19ycS0+bmV4dF9iYWxhbmNlLCBycS0+bmV4dF9iYWxhbmNlKSkKLQkJCQl0aGlzX3JxLT5uZXh0X2JhbGFuY2UgPSBycS0+bmV4dF9iYWxhbmNlOwotCQl9Ci0JfQotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG9uX251bGxfZG9tYWluKGludCBjcHUpCi17Ci0JcmV0dXJuICFyY3VfZGVyZWZlcmVuY2UoY3B1X3JxKGNwdSktPnNkKTsKLX0KLQotLyoKLSAqIFRyaWdnZXIgdGhlIFNDSEVEX1NPRlRJUlEgaWYgaXQgaXMgdGltZSB0byBkbyBwZXJpb2RpYyBsb2FkIGJhbGFuY2luZy4KLSAqCi0gKiBJbiBjYXNlIG9mIENPTkZJR19OT19IWiwgdGhpcyBpcyB0aGUgcGxhY2Ugd2hlcmUgd2Ugbm9taW5hdGUgYSBuZXcKLSAqIGlkbGUgbG9hZCBiYWxhbmNpbmcgb3duZXIgb3IgZGVjaWRlIHRvIHN0b3AgdGhlIHBlcmlvZGljIGxvYWQgYmFsYW5jaW5nLAotICogaWYgdGhlIHdob2xlIHN5c3RlbSBpcyBpZGxlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdHJpZ2dlcl9sb2FkX2JhbGFuY2Uoc3RydWN0IHJxICpycSwgaW50IGNwdSkKLXsKLSNpZmRlZiBDT05GSUdfTk9fSFoKLQkvKgotCSAqIElmIHdlIHdlcmUgaW4gdGhlIG5vaHogbW9kZSByZWNlbnRseSBhbmQgYnVzeSBhdCB0aGUgY3VycmVudAotCSAqIHNjaGVkdWxlciB0aWNrLCB0aGVuIGNoZWNrIGlmIHdlIG5lZWQgdG8gbm9taW5hdGUgbmV3IGlkbGUKLQkgKiBsb2FkIGJhbGFuY2VyLgotCSAqLwotCWlmIChycS0+aW5fbm9oel9yZWNlbnRseSAmJiAhcnEtPmlkbGVfYXRfdGljaykgewotCQlycS0+aW5fbm9oel9yZWNlbnRseSA9IDA7Ci0KLQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkgewotCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKTsKLQkJCWF0b21pY19zZXQoJm5vaHoubG9hZF9iYWxhbmNlciwgLTEpOwotCQl9Ci0KLQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IC0xKSB7Ci0JCQlpbnQgaWxiID0gZmluZF9uZXdfaWxiKGNwdSk7Ci0KLQkJCWlmIChpbGIgPCBucl9jcHVfaWRzKQotCQkJCXJlc2NoZWRfY3B1KGlsYik7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIElmIHRoaXMgY3B1IGlzIGlkbGUgYW5kIGRvaW5nIGlkbGUgbG9hZCBiYWxhbmNpbmcgZm9yIGFsbCB0aGUKLQkgKiBjcHVzIHdpdGggdGlja3Mgc3RvcHBlZCwgaXMgaXQgdGltZSBmb3IgdGhhdCB0byBzdG9wPwotCSAqLwotCWlmIChycS0+aWRsZV9hdF90aWNrICYmIGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSAmJgotCSAgICBjcHVtYXNrX3dlaWdodChub2h6LmNwdV9tYXNrKSA9PSBudW1fb25saW5lX2NwdXMoKSkgewotCQlyZXNjaGVkX2NwdShjcHUpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBJZiB0aGlzIGNwdSBpcyBpZGxlIGFuZCB0aGUgaWRsZSBsb2FkIGJhbGFuY2luZyBpcyBkb25lIGJ5Ci0JICogc29tZW9uZSBlbHNlLCB0aGVuIG5vIG5lZWQgcmFpc2UgdGhlIFNDSEVEX1NPRlRJUlEKLQkgKi8KLQlpZiAocnEtPmlkbGVfYXRfdGljayAmJiBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSAhPSBjcHUgJiYKLQkgICAgY3B1bWFza190ZXN0X2NwdShjcHUsIG5vaHouY3B1X21hc2spKQotCQlyZXR1cm47Ci0jZW5kaWYKLQkvKiBEb24ndCBuZWVkIHRvIHJlYmFsYW5jZSB3aGlsZSBhdHRhY2hlZCB0byBOVUxMIGRvbWFpbiAqLwotCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHJxLT5uZXh0X2JhbGFuY2UpICYmCi0JICAgIGxpa2VseSghb25fbnVsbF9kb21haW4oY3B1KSkpCi0JCXJhaXNlX3NvZnRpcnEoU0NIRURfU09GVElSUSk7Ci19Ci0KLSNlbHNlCS8qIENPTkZJR19TTVAgKi8KLQotLyoKLSAqIG9uIFVQIHdlIGRvIG5vdCBuZWVkIHRvIGJhbGFuY2UgYmV0d2VlbiBDUFVzOgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaWRsZV9iYWxhbmNlKGludCBjcHUsIHN0cnVjdCBycSAqcnEpCi17Ci19Ci0KICNlbmRpZgogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga2VybmVsX3N0YXQsIGtzdGF0KTsKQEAgLTUyOTgsNyArMzUxNSw3IEBACiAJY3Vyci0+c2NoZWRfY2xhc3MtPnRhc2tfdGljayhycSwgY3VyciwgMCk7CiAJcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7CiAKLQlwZXJmX2V2ZW50X3Rhc2tfdGljayhjdXJyLCBjcHUpOworCXBlcmZfZXZlbnRfdGFza190aWNrKGN1cnIpOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCXJxLT5pZGxlX2F0X3RpY2sgPSBpZGxlX2NwdShjcHUpOwpAQCAtNTUxMiw3ICszNzI5LDcgQEAKIAogCWlmIChsaWtlbHkocHJldiAhPSBuZXh0KSkgewogCQlzY2hlZF9pbmZvX3N3aXRjaChwcmV2LCBuZXh0KTsKLQkJcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChwcmV2LCBuZXh0LCBjcHUpOworCQlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHByZXYsIG5leHQpOwogCiAJCXJxLT5ucl9zd2l0Y2hlcysrOwogCQlycS0+Y3VyciA9IG5leHQ7CkBAIC02MDQzLDcgKzQyNjAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9sZHByaW8sIG9uX3JxLCBydW5uaW5nOwogCXN0cnVjdCBycSAqcnE7Ci0JY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpwcmV2X2NsYXNzID0gcC0+c2NoZWRfY2xhc3M7CisJY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpwcmV2X2NsYXNzOwogCiAJQlVHX09OKHByaW8gPCAwIHx8IHByaW8gPiBNQVhfUFJJTyk7CiAKQEAgLTYwNTEsNiArNDI2OCw3IEBACiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKIAogCW9sZHByaW8gPSBwLT5wcmlvOworCXByZXZfY2xhc3MgPSBwLT5zY2hlZF9jbGFzczsKIAlvbl9ycSA9IHAtPnNlLm9uX3JxOwogCXJ1bm5pbmcgPSB0YXNrX2N1cnJlbnQocnEsIHApOwogCWlmIChvbl9ycSkKQEAgLTYwNjgsNyArNDI4Niw3IEBACiAJaWYgKHJ1bm5pbmcpCiAJCXAtPnNjaGVkX2NsYXNzLT5zZXRfY3Vycl90YXNrKHJxKTsKIAlpZiAob25fcnEpIHsKLQkJZW5xdWV1ZV90YXNrKHJxLCBwLCAwKTsKKwkJZW5xdWV1ZV90YXNrKHJxLCBwLCAwLCBvbGRwcmlvIDwgcHJpbyk7CiAKIAkJY2hlY2tfY2xhc3NfY2hhbmdlZChycSwgcCwgcHJldl9jbGFzcywgb2xkcHJpbywgcnVubmluZyk7CiAJfQpAQCAtNjExMiw3ICs0MzMwLDcgQEAKIAlkZWx0YSA9IHAtPnByaW8gLSBvbGRfcHJpbzsKIAogCWlmIChvbl9ycSkgewotCQllbnF1ZXVlX3Rhc2socnEsIHAsIDApOworCQllbnF1ZXVlX3Rhc2socnEsIHAsIDAsIGZhbHNlKTsKIAkJLyoKIAkJICogSWYgdGhlIHRhc2sgaW5jcmVhc2VkIGl0cyBwcmlvcml0eSBvciBpcyBydW5uaW5nIGFuZAogCQkgKiBsb3dlcmVkIGl0cyBwcmlvcml0eSwgdGhlbiByZXNjaGVkdWxlIGl0cyBDUFU6CkBAIC02MjcwLDcgKzQ0ODgsNyBAQAogewogCWludCByZXR2YWwsIG9sZHByaW8sIG9sZHBvbGljeSA9IC0xLCBvbl9ycSwgcnVubmluZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqcHJldl9jbGFzcyA9IHAtPnNjaGVkX2NsYXNzOworCWNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqcHJldl9jbGFzczsKIAlzdHJ1Y3QgcnEgKnJxOwogCWludCByZXNldF9vbl9mb3JrOwogCkBAIC02Mzg0LDYgKzQ2MDIsNyBAQAogCXAtPnNjaGVkX3Jlc2V0X29uX2ZvcmsgPSByZXNldF9vbl9mb3JrOwogCiAJb2xkcHJpbyA9IHAtPnByaW87CisJcHJldl9jbGFzcyA9IHAtPnNjaGVkX2NsYXNzOwogCV9fc2V0c2NoZWR1bGVyKHJxLCBwLCBwb2xpY3ksIHBhcmFtLT5zY2hlZF9wcmlvcml0eSk7CiAKIAlpZiAocnVubmluZykKQEAgLTcxMzQsMjMgKzUzNTMsOCBAQAogCXN0cnVjdCBycSAqcnE7CiAJaW50IHJldCA9IDA7CiAKLQkvKgotCSAqIFNpbmNlIHdlIHJlbHkgb24gd2FrZS11cHMgdG8gbWlncmF0ZSBzbGVlcGluZyB0YXNrcywgZG9uJ3QgY2hhbmdlCi0JICogdGhlIC0+Y3B1c19hbGxvd2VkIG1hc2sgZnJvbSB1bmRlciB3YWtpbmcgdGFza3MsIHdoaWNoIHdvdWxkIGJlCi0JICogcG9zc2libGUgd2hlbiB3ZSBjaGFuZ2UgcnEtPmxvY2sgaW4gdHR3dSgpLCBzbyBzeW5jaHJvbml6ZSBhZ2FpbnN0Ci0JICogVEFTS19XQUtJTkcgdG8gYXZvaWQgdGhhdC4KLQkgKi8KLWFnYWluOgotCXdoaWxlIChwLT5zdGF0ZSA9PSBUQVNLX1dBS0lORykKLQkJY3B1X3JlbGF4KCk7Ci0KIAlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOwogCi0JaWYgKHAtPnN0YXRlID09IFRBU0tfV0FLSU5HKSB7Ci0JCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwotCQlnb3RvIGFnYWluOwotCX0KLQogCWlmICghY3B1bWFza19pbnRlcnNlY3RzKG5ld19tYXNrLCBjcHVfYWN0aXZlX21hc2spKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpAQCAtOTQzNyw3ICs3NjQxLDYgQEAKIAl0Zy0+cnRfcnFbY3B1XSA9IHJ0X3JxOwogCWluaXRfcnRfcnEocnRfcnEsIHJxKTsKIAlydF9ycS0+dGcgPSB0ZzsKLQlydF9ycS0+cnRfc2UgPSBydF9zZTsKIAlydF9ycS0+cnRfcnVudGltZSA9IHRnLT5ydF9iYW5kd2lkdGgucnRfcnVudGltZTsKIAlpZiAoYWRkKQogCQlsaXN0X2FkZCgmcnRfcnEtPmxlYWZfcnRfcnFfbGlzdCwgJnJxLT5sZWFmX3J0X3JxX2xpc3QpOwpAQCAtOTQ2OCw5ICs3NjcxLDYgQEAKICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKIAlhbGxvY19zaXplICs9IDIgKiBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQlhbGxvY19zaXplICo9IDI7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSwogCWFsbG9jX3NpemUgKz0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAqIGNwdW1hc2tfc2l6ZSgpOwogI2VuZGlmCkBAIC05NDg0LDEzICs3Njg0LDYgQEAKIAkJaW5pdF90YXNrX2dyb3VwLmNmc19ycSA9IChzdHJ1Y3QgY2ZzX3JxICoqKXB0cjsKIAkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7CiAKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCQlyb290X3Rhc2tfZ3JvdXAuc2UgPSAoc3RydWN0IHNjaGVkX2VudGl0eSAqKilwdHI7Ci0JCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwotCi0JCXJvb3RfdGFza19ncm91cC5jZnNfcnEgPSAoc3RydWN0IGNmc19ycSAqKilwdHI7Ci0JCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwotI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCiAjZW5kaWYgLyogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgKi8KICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKIAkJaW5pdF90YXNrX2dyb3VwLnJ0X3NlID0gKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKiopcHRyOwpAQCAtOTQ5OSwxMyArNzY5Miw2IEBACiAJCWluaXRfdGFza19ncm91cC5ydF9ycSA9IChzdHJ1Y3QgcnRfcnEgKiopcHRyOwogCQlwdHIgKz0gbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JCXJvb3RfdGFza19ncm91cC5ydF9zZSA9IChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICoqKXB0cjsKLQkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7Ci0KLQkJcm9vdF90YXNrX2dyb3VwLnJ0X3JxID0gKHN0cnVjdCBydF9ycSAqKilwdHI7Ci0JCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwotI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCiAjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCiAjaWZkZWYgQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sKIAkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKQEAgLTk1MjUsMjIgKzc3MTEsMTMgQEAKICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKIAlpbml0X3J0X2JhbmR3aWR0aCgmaW5pdF90YXNrX2dyb3VwLnJ0X2JhbmR3aWR0aCwKIAkJCWdsb2JhbF9ydF9wZXJpb2QoKSwgZ2xvYmFsX3J0X3J1bnRpbWUoKSk7Ci0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQlpbml0X3J0X2JhbmR3aWR0aCgmcm9vdF90YXNrX2dyb3VwLnJ0X2JhbmR3aWR0aCwKLQkJCWdsb2JhbF9ydF9wZXJpb2QoKSwgUlVOVElNRV9JTkYpOwotI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCiAjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCiAKLSNpZmRlZiBDT05GSUdfR1JPVVBfU0NIRUQKKyNpZmRlZiBDT05GSUdfQ0dST1VQX1NDSEVECiAJbGlzdF9hZGQoJmluaXRfdGFza19ncm91cC5saXN0LCAmdGFza19ncm91cHMpOwogCUlOSVRfTElTVF9IRUFEKCZpbml0X3Rhc2tfZ3JvdXAuY2hpbGRyZW4pOwogCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQlJTklUX0xJU1RfSEVBRCgmcm9vdF90YXNrX2dyb3VwLmNoaWxkcmVuKTsKLQlpbml0X3Rhc2tfZ3JvdXAucGFyZW50ID0gJnJvb3RfdGFza19ncm91cDsKLQlsaXN0X2FkZCgmaW5pdF90YXNrX2dyb3VwLnNpYmxpbmdzLCAmcm9vdF90YXNrX2dyb3VwLmNoaWxkcmVuKTsKLSNlbmRpZiAvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwotI2VuZGlmIC8qIENPTkZJR19HUk9VUF9TQ0hFRCAqLworI2VuZGlmIC8qIENPTkZJR19DR1JPVVBfU0NIRUQgKi8KIAogI2lmIGRlZmluZWQgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgJiYgZGVmaW5lZCBDT05GSUdfU01QCiAJdXBkYXRlX3NoYXJlc19kYXRhID0gX19hbGxvY19wZXJjcHUobnJfY3B1X2lkcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSwKQEAgLTk1ODAsMjUgKzc3NTcsNiBAQAogCQkgKiBkaXJlY3RseSBpbiBycS0+Y2ZzIChpLmUgaW5pdF90YXNrX2dyb3VwLT5zZVtdID0gTlVMTCkuCiAJCSAqLwogCQlpbml0X3RnX2Nmc19lbnRyeSgmaW5pdF90YXNrX2dyb3VwLCAmcnEtPmNmcywgTlVMTCwgaSwgMSwgTlVMTCk7Ci0jZWxpZiBkZWZpbmVkIENPTkZJR19VU0VSX1NDSEVECi0JCXJvb3RfdGFza19ncm91cC5zaGFyZXMgPSBOSUNFXzBfTE9BRDsKLQkJaW5pdF90Z19jZnNfZW50cnkoJnJvb3RfdGFza19ncm91cCwgJnJxLT5jZnMsIE5VTEwsIGksIDAsIE5VTEwpOwotCQkvKgotCQkgKiBJbiBjYXNlIG9mIHRhc2stZ3JvdXBzIGZvcm1lZCB0aHInIHRoZSB1c2VyIGlkIG9mIHRhc2tzLAotCQkgKiBpbml0X3Rhc2tfZ3JvdXAgcmVwcmVzZW50cyB0YXNrcyBiZWxvbmdpbmcgdG8gcm9vdCB1c2VyLgotCQkgKiBIZW5jZSBpdCBmb3JtcyBhIHNpYmxpbmcgb2YgYWxsIHN1YnNlcXVlbnQgZ3JvdXBzIGZvcm1lZC4KLQkJICogSW4gdGhpcyBjYXNlLCBpbml0X3Rhc2tfZ3JvdXAgZ2V0cyBvbmx5IGEgZnJhY3Rpb24gb2Ygb3ZlcmFsbAotCQkgKiBzeXN0ZW0gY3B1IHJlc291cmNlLCBiYXNlZCBvbiB0aGUgd2VpZ2h0IGFzc2lnbmVkIHRvIHJvb3QKLQkJICogdXNlcidzIGNwdSBzaGFyZSAoSU5JVF9UQVNLX0dST1VQX0xPQUQpLiBUaGlzIGlzIGFjY29tcGxpc2hlZAotCQkgKiBieSBsZXR0aW5nIHRhc2tzIG9mIGluaXRfdGFza19ncm91cCBzaXQgaW4gYSBzZXBhcmF0ZSBjZnNfcnEKLQkJICogKGluaXRfdGdfY2ZzX3JxKSBhbmQgaGF2aW5nIG9uZSBlbnRpdHkgcmVwcmVzZW50IHRoaXMgZ3JvdXAgb2YKLQkJICogdGFza3MgaW4gcnEtPmNmcyAoaS5lIGluaXRfdGFza19ncm91cC0+c2VbXSAhPSBOVUxMKS4KLQkJICovCi0JCWluaXRfdGdfY2ZzX2VudHJ5KCZpbml0X3Rhc2tfZ3JvdXAsCi0JCQkJJnBlcl9jcHUoaW5pdF90Z19jZnNfcnEsIGkpLAotCQkJCSZwZXJfY3B1KGluaXRfc2NoZWRfZW50aXR5LCBpKSwgaSwgMSwKLQkJCQlyb290X3Rhc2tfZ3JvdXAuc2VbaV0pOwotCiAjZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLwogCkBAIC05NjA3LDEyICs3NzY1LDYgQEAKIAkJSU5JVF9MSVNUX0hFQUQoJnJxLT5sZWFmX3J0X3JxX2xpc3QpOwogI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIAkJaW5pdF90Z19ydF9lbnRyeSgmaW5pdF90YXNrX2dyb3VwLCAmcnEtPnJ0LCBOVUxMLCBpLCAxLCBOVUxMKTsKLSNlbGlmIGRlZmluZWQgQ09ORklHX1VTRVJfU0NIRUQKLQkJaW5pdF90Z19ydF9lbnRyeSgmcm9vdF90YXNrX2dyb3VwLCAmcnEtPnJ0LCBOVUxMLCBpLCAwLCBOVUxMKTsKLQkJaW5pdF90Z19ydF9lbnRyeSgmaW5pdF90YXNrX2dyb3VwLAotCQkJCSZwZXJfY3B1KGluaXRfcnRfcnFfdmFyLCBpKSwKLQkJCQkmcGVyX2NwdShpbml0X3NjaGVkX3J0X2VudGl0eSwgaSksIGksIDEsCi0JCQkJcm9vdF90YXNrX2dyb3VwLnJ0X3NlW2ldKTsKICNlbmRpZgogI2VuZGlmCiAKQEAgLTk2OTcsNyArNzg0OSw3IEBACiAJcmV0dXJuIChuZXN0ZWQgPT0gUFJFRU1QVF9JTkFUT01JQ19CQVNFICsgcHJlZW1wdF9vZmZzZXQpOwogfQogCi12b2lkIF9fbWlnaHRfc2xlZXAoY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBwcmVlbXB0X29mZnNldCkKK3ZvaWQgX19taWdodF9zbGVlcChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHByZWVtcHRfb2Zmc2V0KQogewogI2lmZGVmIGluX2F0b21pYwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIHByZXZfamlmZnk7CS8qIHJhdGVsaW1pdGluZyAqLwpAQCAtMTAwMDgsNyArODE2MCw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCiAKLSNpZmRlZiBDT05GSUdfR1JPVVBfU0NIRUQKKyNpZmRlZiBDT05GSUdfQ0dST1VQX1NDSEVECiBzdGF0aWMgdm9pZCBmcmVlX3NjaGVkX2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0ZykKIHsKIAlmcmVlX2ZhaXJfc2NoZWRfZ3JvdXAodGcpOwpAQCAtMTAxMTMsMTEgKzgyNjUsMTEgQEAKIAlpZiAodW5saWtlbHkocnVubmluZykpCiAJCXRzay0+c2NoZWRfY2xhc3MtPnNldF9jdXJyX3Rhc2socnEpOwogCWlmIChvbl9ycSkKLQkJZW5xdWV1ZV90YXNrKHJxLCB0c2ssIDApOworCQllbnF1ZXVlX3Rhc2socnEsIHRzaywgMCwgZmFsc2UpOwogCiAJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0dST1VQX1NDSEVEICovCisjZW5kaWYgLyogQ09ORklHX0NHUk9VUF9TQ0hFRCAqLwogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIHN0YXRpYyB2b2lkIF9fc2V0X3NlX3NoYXJlcyhzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgdW5zaWduZWQgbG9uZyBzaGFyZXMpCkBAIC0xMDI1OSwxMyArODQxMSw2IEBACiAJCXJ1bnRpbWUgPSBkLT5ydF9ydW50aW1lOwogCX0KIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JaWYgKHRnID09ICZyb290X3Rhc2tfZ3JvdXApIHsKLQkJcGVyaW9kID0gZ2xvYmFsX3J0X3BlcmlvZCgpOwotCQlydW50aW1lID0gZ2xvYmFsX3J0X3J1bnRpbWUoKTsKLQl9Ci0jZW5kaWYKLQogCS8qCiAJICogQ2Fubm90IGhhdmUgbW9yZSBydW50aW1lIHRoYW4gdGhlIHBlcmlvZC4KIAkgKi8KQEAgLTEwODg1LDEyICs5MDMwLDMwIEBACiB9CiAKIC8qCisgKiBXaGVuIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HIGlzIGVuYWJsZWQgb25lIGppZmZ5IGNhbiBiZSB2ZXJ5IGxhcmdlCisgKiBpbiBjcHV0aW1lX3QgdW5pdHMuIEFzIGEgcmVzdWx0LCBjcHVhY2N0X3VwZGF0ZV9zdGF0cyBjYWxscworICogcGVyY3B1X2NvdW50ZXJfYWRkIHdpdGggdmFsdWVzIGxhcmdlIGVub3VnaCB0byBhbHdheXMgb3ZlcmZsb3cgdGhlCisgKiBwZXIgY3B1IGJhdGNoIGxpbWl0IGNhdXNpbmcgYmFkIFNNUCBzY2FsYWJpbGl0eS4KKyAqCisgKiBUbyBmaXggdGhpcyB3ZSBzY2FsZSBwZXJjcHVfY291bnRlcl9iYXRjaCBieSBjcHV0aW1lX29uZV9qaWZmeSBzbyB3ZQorICogYmF0Y2ggdGhlIHNhbWUgYW1vdW50IG9mIHRpbWUgd2l0aCBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORyBkaXNhYmxlZAorICogYW5kIGVuYWJsZWQuIFdlIGNhcCBpdCBhdCBJTlRfTUFYIHdoaWNoIGlzIHRoZSBsYXJnZXN0IGFsbG93ZWQgYmF0Y2ggdmFsdWUuCisgKi8KKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIENQVUFDQ1RfQkFUQ0gJXAorCW1pbl90KGxvbmcsIHBlcmNwdV9jb3VudGVyX2JhdGNoICogY3B1dGltZV9vbmVfamlmZnksIElOVF9NQVgpCisjZWxzZQorI2RlZmluZSBDUFVBQ0NUX0JBVENICTAKKyNlbmRpZgorCisvKgogICogQ2hhcmdlIHRoZSBzeXN0ZW0vdXNlciB0aW1lIHRvIHRoZSB0YXNrJ3MgYWNjb3VudGluZyBncm91cC4KICAqLwogc3RhdGljIHZvaWQgY3B1YWNjdF91cGRhdGVfc3RhdHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCiAJCWVudW0gY3B1YWNjdF9zdGF0X2luZGV4IGlkeCwgY3B1dGltZV90IHZhbCkKIHsKIAlzdHJ1Y3QgY3B1YWNjdCAqY2E7CisJaW50IGJhdGNoID0gQ1BVQUNDVF9CQVRDSDsKIAogCWlmICh1bmxpa2VseSghY3B1YWNjdF9zdWJzeXMuYWN0aXZlKSkKIAkJcmV0dXJuOwpAQCAtMTA4OTksNyArOTA2Miw3IEBACiAJY2EgPSB0YXNrX2NhKHRzayk7CiAKIAlkbyB7Ci0JCXBlcmNwdV9jb3VudGVyX2FkZCgmY2EtPmNwdXN0YXRbaWR4XSwgdmFsKTsKKwkJX19wZXJjcHVfY291bnRlcl9hZGQoJmNhLT5jcHVzdGF0W2lkeF0sIHZhbCwgYmF0Y2gpOwogCQljYSA9IGNhLT5wYXJlbnQ7CiAJfSB3aGlsZSAoY2EpOwogCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2NwdXByaS5jIGIva2VybmVsL3NjaGVkX2NwdXByaS5jCmluZGV4IDU5N2IzMzAuLmVlYjM1MDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9jcHVwcmkuYworKysgYi9rZXJuZWwvc2NoZWRfY3B1cHJpLmMKQEAgLTQ3LDkgKzQ3LDcgQEAKIH0KIAogI2RlZmluZSBmb3JfZWFjaF9jcHVwcmlfYWN0aXZlKGFycmF5LCBpZHgpICAgICAgICAgICAgICAgICAgICBcCi0gIGZvciAoaWR4ID0gZmluZF9maXJzdF9iaXQoYXJyYXksIENQVVBSSV9OUl9QUklPUklUSUVTKTsgICAgIFwKLSAgICAgICBpZHggPCBDUFVQUklfTlJfUFJJT1JJVElFUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIGlkeCA9IGZpbmRfbmV4dF9iaXQoYXJyYXksIENQVVBSSV9OUl9QUklPUklUSUVTLCBpZHgrMSkpCisJZm9yX2VhY2hfYml0KGlkeCwgYXJyYXksIENQVVBSSV9OUl9QUklPUklUSUVTKQogCiAvKioKICAqIGNwdXByaV9maW5kIC0gZmluZCB0aGUgYmVzdCAobG93ZXN0LXByaSkgQ1BVIGluIHRoZSBzeXN0ZW0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDhmZTdlZTguLjNlMWZkOTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtMTA1Myw3ICsxMDUzLDggQEAKICAqIGluY3JlYXNlZC4gSGVyZSB3ZSB1cGRhdGUgdGhlIGZhaXIgc2NoZWR1bGluZyBzdGF0cyBhbmQKICAqIHRoZW4gcHV0IHRoZSB0YXNrIGludG8gdGhlIHJidHJlZToKICAqLwotc3RhdGljIHZvaWQgZW5xdWV1ZV90YXNrX2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwKQorc3RhdGljIHZvaWQKK2VucXVldWVfdGFza19mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCwgYm9vbCBoZWFkKQogewogCXN0cnVjdCBjZnNfcnEgKmNmc19ycTsKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9ICZwLT5zZTsKQEAgLTE4MTUsNTcgKzE4MTYsMTY0IEBACiAgKi8KIAogLyoKLSAqIExvYWQtYmFsYW5jaW5nIGl0ZXJhdG9yLiBOb3RlOiB3aGlsZSB0aGUgcnVucXVldWUgc3RheXMgbG9ja2VkCi0gKiBkdXJpbmcgdGhlIHdob2xlIGl0ZXJhdGlvbiwgdGhlIGN1cnJlbnQgdGFzayBtaWdodCBiZQotICogZGVxdWV1ZWQgc28gdGhlIGl0ZXJhdG9yIGhhcyB0byBiZSBkZXF1ZXVlLXNhZmUuIEhlcmUgd2UKLSAqIGFjaGlldmUgdGhhdCBieSBhbHdheXMgcHJlLWl0ZXJhdGluZyBiZWZvcmUgcmV0dXJuaW5nCi0gKiB0aGUgY3VycmVudCB0YXNrOgorICogcHVsbF90YXNrIC0gbW92ZSBhIHRhc2sgZnJvbSBhIHJlbW90ZSBydW5xdWV1ZSB0byB0aGUgbG9jYWwgcnVucXVldWUuCisgKiBCb3RoIHJ1bnF1ZXVlcyBtdXN0IGJlIGxvY2tlZC4KICAqLwotc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqCi1fX2xvYWRfYmFsYW5jZV9pdGVyYXRvcihzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQpCitzdGF0aWMgdm9pZCBwdWxsX3Rhc2soc3RydWN0IHJxICpzcmNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwkJICAgICAgc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUpCiB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwID0gTlVMTDsKLQlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZTsKLQotCWlmIChuZXh0ID09ICZjZnNfcnEtPnRhc2tzKQotCQlyZXR1cm4gTlVMTDsKLQotCXNlID0gbGlzdF9lbnRyeShuZXh0LCBzdHJ1Y3Qgc2NoZWRfZW50aXR5LCBncm91cF9ub2RlKTsKLQlwID0gdGFza19vZihzZSk7Ci0JY2ZzX3JxLT5iYWxhbmNlX2l0ZXJhdG9yID0gbmV4dC0+bmV4dDsKLQotCXJldHVybiBwOworCWRlYWN0aXZhdGVfdGFzayhzcmNfcnEsIHAsIDApOworCXNldF90YXNrX2NwdShwLCB0aGlzX2NwdSk7CisJYWN0aXZhdGVfdGFzayh0aGlzX3JxLCBwLCAwKTsKKwljaGVja19wcmVlbXB0X2N1cnIodGhpc19ycSwgcCwgMCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxvYWRfYmFsYW5jZV9zdGFydF9mYWlyKHZvaWQgKmFyZykKKy8qCisgKiBjYW5fbWlncmF0ZV90YXNrIC0gbWF5IHRhc2sgcCBmcm9tIHJ1bnF1ZXVlIHJxIGJlIG1pZ3JhdGVkIHRvIHRoaXNfY3B1PworICovCitzdGF0aWMKK2ludCBjYW5fbWlncmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHJxICpycSwgaW50IHRoaXNfY3B1LAorCQkgICAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKKwkJICAgICBpbnQgKmFsbF9waW5uZWQpCiB7Ci0Jc3RydWN0IGNmc19ycSAqY2ZzX3JxID0gYXJnOworCWludCB0c2tfY2FjaGVfaG90ID0gMDsKKwkvKgorCSAqIFdlIGRvIG5vdCBtaWdyYXRlIHRhc2tzIHRoYXQgYXJlOgorCSAqIDEpIHJ1bm5pbmcgKG9idmlvdXNseSksIG9yCisJICogMikgY2Fubm90IGJlIG1pZ3JhdGVkIHRvIHRoaXMgQ1BVIGR1ZSB0byBjcHVzX2FsbG93ZWQsIG9yCisJICogMykgYXJlIGNhY2hlLWhvdCBvbiB0aGVpciBjdXJyZW50IENQVS4KKwkgKi8KKwlpZiAoIWNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsICZwLT5jcHVzX2FsbG93ZWQpKSB7CisJCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfZmFpbGVkX21pZ3JhdGlvbnNfYWZmaW5lKTsKKwkJcmV0dXJuIDA7CisJfQorCSphbGxfcGlubmVkID0gMDsKIAotCXJldHVybiBfX2xvYWRfYmFsYW5jZV9pdGVyYXRvcihjZnNfcnEsIGNmc19ycS0+dGFza3MubmV4dCk7CisJaWYgKHRhc2tfcnVubmluZyhycSwgcCkpIHsKKwkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mYWlsZWRfbWlncmF0aW9uc19ydW5uaW5nKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBBZ2dyZXNzaXZlIG1pZ3JhdGlvbiBpZjoKKwkgKiAxKSB0YXNrIGlzIGNhY2hlIGNvbGQsIG9yCisJICogMikgdG9vIG1hbnkgYmFsYW5jZSBhdHRlbXB0cyBoYXZlIGZhaWxlZC4KKwkgKi8KKworCXRza19jYWNoZV9ob3QgPSB0YXNrX2hvdChwLCBycS0+Y2xvY2ssIHNkKTsKKwlpZiAoIXRza19jYWNoZV9ob3QgfHwKKwkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID4gc2QtPmNhY2hlX25pY2VfdHJpZXMpIHsKKyNpZmRlZiBDT05GSUdfU0NIRURTVEFUUworCQlpZiAodHNrX2NhY2hlX2hvdCkgeworCQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfaG90X2dhaW5lZFtpZGxlXSk7CisJCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZvcmNlZF9taWdyYXRpb25zKTsKKwkJfQorI2VuZGlmCisJCXJldHVybiAxOworCX0KKworCWlmICh0c2tfY2FjaGVfaG90KSB7CisJCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfZmFpbGVkX21pZ3JhdGlvbnNfaG90KTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpsb2FkX2JhbGFuY2VfbmV4dF9mYWlyKHZvaWQgKmFyZykKKy8qCisgKiBtb3ZlX29uZV90YXNrIHRyaWVzIHRvIG1vdmUgZXhhY3RseSBvbmUgdGFzayBmcm9tIGJ1c2llc3QgdG8gdGhpc19ycSwgYXMKKyAqIHBhcnQgb2YgYWN0aXZlIGJhbGFuY2luZyBvcGVyYXRpb25zIHdpdGhpbiAiZG9tYWluIi4KKyAqIFJldHVybnMgMSBpZiBzdWNjZXNzZnVsIGFuZCAwIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZWQgd2l0aCBib3RoIHJ1bnF1ZXVlcyBsb2NrZWQuCisgKi8KK3N0YXRpYyBpbnQKK21vdmVfb25lX3Rhc2soc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKKwkgICAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCiB7Ci0Jc3RydWN0IGNmc19ycSAqY2ZzX3JxID0gYXJnOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm47CisJc3RydWN0IGNmc19ycSAqY2ZzX3JxOworCWludCBwaW5uZWQgPSAwOwogCi0JcmV0dXJuIF9fbG9hZF9iYWxhbmNlX2l0ZXJhdG9yKGNmc19ycSwgY2ZzX3JxLT5iYWxhbmNlX2l0ZXJhdG9yKTsKKwlmb3JfZWFjaF9sZWFmX2Nmc19ycShidXNpZXN0LCBjZnNfcnEpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZjZnNfcnEtPnRhc2tzLCBzZS5ncm91cF9ub2RlKSB7CisKKwkJCWlmICghY2FuX21pZ3JhdGVfdGFzayhwLCBidXNpZXN0LCB0aGlzX2NwdSwKKwkJCQkJCXNkLCBpZGxlLCAmcGlubmVkKSkKKwkJCQljb250aW51ZTsKKworCQkJcHVsbF90YXNrKGJ1c2llc3QsIHAsIHRoaXNfcnEsIHRoaXNfY3B1KTsKKwkJCS8qCisJCQkgKiBSaWdodCBub3csIHRoaXMgaXMgb25seSB0aGUgc2Vjb25kIHBsYWNlIHB1bGxfdGFzaygpCisJCQkgKiBpcyBjYWxsZWQsIHNvIHdlIGNhbiBzYWZlbHkgY29sbGVjdCBwdWxsX3Rhc2soKQorCQkJICogc3RhdHMgaGVyZSByYXRoZXIgdGhhbiBpbnNpZGUgcHVsbF90YXNrKCkuCisJCQkgKi8KKwkJCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2dhaW5lZFtpZGxlXSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZwotX19sb2FkX2JhbGFuY2VfZmFpcihzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCQl1bnNpZ25lZCBsb25nIG1heF9sb2FkX21vdmUsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAotCQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgaW50ICphbGxfcGlubmVkLCBpbnQgKnRoaXNfYmVzdF9wcmlvLAotCQlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCitiYWxhbmNlX3Rhc2tzKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCisJICAgICAgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKKwkgICAgICBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgaW50ICphbGxfcGlubmVkLAorCSAgICAgIGludCAqdGhpc19iZXN0X3ByaW8sIHN0cnVjdCBjZnNfcnEgKmJ1c2llc3RfY2ZzX3JxKQogewotCXN0cnVjdCBycV9pdGVyYXRvciBjZnNfcnFfaXRlcmF0b3I7CisJaW50IGxvb3BzID0gMCwgcHVsbGVkID0gMCwgcGlubmVkID0gMDsKKwlsb25nIHJlbV9sb2FkX21vdmUgPSBtYXhfbG9hZF9tb3ZlOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm47CiAKLQljZnNfcnFfaXRlcmF0b3Iuc3RhcnQgPSBsb2FkX2JhbGFuY2Vfc3RhcnRfZmFpcjsKLQljZnNfcnFfaXRlcmF0b3IubmV4dCA9IGxvYWRfYmFsYW5jZV9uZXh0X2ZhaXI7Ci0JY2ZzX3JxX2l0ZXJhdG9yLmFyZyA9IGNmc19ycTsKKwlpZiAobWF4X2xvYWRfbW92ZSA9PSAwKQorCQlnb3RvIG91dDsKIAotCXJldHVybiBiYWxhbmNlX3Rhc2tzKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAotCQkJbWF4X2xvYWRfbW92ZSwgc2QsIGlkbGUsIGFsbF9waW5uZWQsCi0JCQl0aGlzX2Jlc3RfcHJpbywgJmNmc19ycV9pdGVyYXRvcik7CisJcGlubmVkID0gMTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmYnVzaWVzdF9jZnNfcnEtPnRhc2tzLCBzZS5ncm91cF9ub2RlKSB7CisJCWlmIChsb29wcysrID4gc3lzY3RsX3NjaGVkX25yX21pZ3JhdGUpCisJCQlicmVhazsKKworCQlpZiAoKHAtPnNlLmxvYWQud2VpZ2h0ID4+IDEpID4gcmVtX2xvYWRfbW92ZSB8fAorCQkgICAgIWNhbl9taWdyYXRlX3Rhc2socCwgYnVzaWVzdCwgdGhpc19jcHUsIHNkLCBpZGxlLCAmcGlubmVkKSkKKwkJCWNvbnRpbnVlOworCisJCXB1bGxfdGFzayhidXNpZXN0LCBwLCB0aGlzX3JxLCB0aGlzX2NwdSk7CisJCXB1bGxlZCsrOworCQlyZW1fbG9hZF9tb3ZlIC09IHAtPnNlLmxvYWQud2VpZ2h0OworCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwkJLyoKKwkJICogTkVXSURMRSBiYWxhbmNpbmcgaXMgYSBzb3VyY2Ugb2YgbGF0ZW5jeSwgc28gcHJlZW1wdGlibGUKKwkJICoga2VybmVscyB3aWxsIHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IHRhc2sgaXMgcHVsbGVkIHRvIG1pbmltaXplCisJCSAqIHRoZSBjcml0aWNhbCBzZWN0aW9uLgorCQkgKi8KKwkJaWYgKGlkbGUgPT0gQ1BVX05FV0xZX0lETEUpCisJCQlicmVhazsKKyNlbmRpZgorCisJCS8qCisJCSAqIFdlIG9ubHkgd2FudCB0byBzdGVhbCB1cCB0byB0aGUgcHJlc2NyaWJlZCBhbW91bnQgb2YKKwkJICogd2VpZ2h0ZWQgbG9hZC4KKwkJICovCisJCWlmIChyZW1fbG9hZF9tb3ZlIDw9IDApCisJCQlicmVhazsKKworCQlpZiAocC0+cHJpbyA8ICp0aGlzX2Jlc3RfcHJpbykKKwkJCSp0aGlzX2Jlc3RfcHJpbyA9IHAtPnByaW87CisJfQorb3V0OgorCS8qCisJICogUmlnaHQgbm93LCB0aGlzIGlzIG9uZSBvZiBvbmx5IHR3byBwbGFjZXMgcHVsbF90YXNrKCkgaXMgY2FsbGVkLAorCSAqIHNvIHdlIGNhbiBzYWZlbHkgY29sbGVjdCBwdWxsX3Rhc2soKSBzdGF0cyBoZXJlIHJhdGhlciB0aGFuCisJICogaW5zaWRlIHB1bGxfdGFzaygpLgorCSAqLworCXNjaGVkc3RhdF9hZGQoc2QsIGxiX2dhaW5lZFtpZGxlXSwgcHVsbGVkKTsKKworCWlmIChhbGxfcGlubmVkKQorCQkqYWxsX3Bpbm5lZCA9IHBpbm5lZDsKKworCXJldHVybiBtYXhfbG9hZF9tb3ZlIC0gcmVtX2xvYWRfbW92ZTsKIH0KIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECkBAIC0xODk3LDkgKzIwMDUsOSBAQAogCQlyZW1fbG9hZCA9ICh1NjQpcmVtX2xvYWRfbW92ZSAqIGJ1c2llc3Rfd2VpZ2h0OwogCQlyZW1fbG9hZCA9IGRpdl91NjQocmVtX2xvYWQsIGJ1c2llc3RfaF9sb2FkICsgMSk7CiAKLQkJbW92ZWRfbG9hZCA9IF9fbG9hZF9iYWxhbmNlX2ZhaXIodGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCisJCW1vdmVkX2xvYWQgPSBiYWxhbmNlX3Rhc2tzKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAogCQkJCXJlbV9sb2FkLCBzZCwgaWRsZSwgYWxsX3Bpbm5lZCwgdGhpc19iZXN0X3ByaW8sCi0JCQkJdGctPmNmc19ycVtidXNpZXN0X2NwdV0pOworCQkJCWJ1c2llc3RfY2ZzX3JxKTsKIAogCQlpZiAoIW1vdmVkX2xvYWQpCiAJCQljb250aW51ZTsKQEAgLTE5MjIsMzUgKzIwMzAsMTUwOSBAQAogCQkgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKIAkJICBpbnQgKmFsbF9waW5uZWQsIGludCAqdGhpc19iZXN0X3ByaW8pCiB7Ci0JcmV0dXJuIF9fbG9hZF9iYWxhbmNlX2ZhaXIodGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCisJcmV0dXJuIGJhbGFuY2VfdGFza3ModGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCiAJCQltYXhfbG9hZF9tb3ZlLCBzZCwgaWRsZSwgYWxsX3Bpbm5lZCwKIAkJCXRoaXNfYmVzdF9wcmlvLCAmYnVzaWVzdC0+Y2ZzKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50Ci1tb3ZlX29uZV90YXNrX2ZhaXIoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJICAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQorLyoKKyAqIG1vdmVfdGFza3MgdHJpZXMgdG8gbW92ZSB1cCB0byBtYXhfbG9hZF9tb3ZlIHdlaWdodGVkIGxvYWQgZnJvbSBidXNpZXN0IHRvCisgKiB0aGlzX3JxLCBhcyBwYXJ0IG9mIGEgYmFsYW5jaW5nIG9wZXJhdGlvbiB3aXRoaW4gZG9tYWluICJzZCIuCisgKiBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBhbmQgMCBvdGhlcndpc2UuCisgKgorICogQ2FsbGVkIHdpdGggYm90aCBydW5xdWV1ZXMgbG9ja2VkLgorICovCitzdGF0aWMgaW50IG1vdmVfdGFza3Moc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLAorCQkgICAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCisJCSAgICAgIGludCAqYWxsX3Bpbm5lZCkKIHsKLQlzdHJ1Y3QgY2ZzX3JxICpidXN5X2Nmc19ycTsKLQlzdHJ1Y3QgcnFfaXRlcmF0b3IgY2ZzX3JxX2l0ZXJhdG9yOworCXVuc2lnbmVkIGxvbmcgdG90YWxfbG9hZF9tb3ZlZCA9IDAsIGxvYWRfbW92ZWQ7CisJaW50IHRoaXNfYmVzdF9wcmlvID0gdGhpc19ycS0+Y3Vyci0+cHJpbzsKIAotCWNmc19ycV9pdGVyYXRvci5zdGFydCA9IGxvYWRfYmFsYW5jZV9zdGFydF9mYWlyOwotCWNmc19ycV9pdGVyYXRvci5uZXh0ID0gbG9hZF9iYWxhbmNlX25leHRfZmFpcjsKKwlkbyB7CisJCWxvYWRfbW92ZWQgPSBsb2FkX2JhbGFuY2VfZmFpcih0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKKwkJCQltYXhfbG9hZF9tb3ZlIC0gdG90YWxfbG9hZF9tb3ZlZCwKKwkJCQlzZCwgaWRsZSwgYWxsX3Bpbm5lZCwgJnRoaXNfYmVzdF9wcmlvKTsKIAotCWZvcl9lYWNoX2xlYWZfY2ZzX3JxKGJ1c2llc3QsIGJ1c3lfY2ZzX3JxKSB7CisJCXRvdGFsX2xvYWRfbW92ZWQgKz0gbG9hZF9tb3ZlZDsKKworI2lmZGVmIENPTkZJR19QUkVFTVBUCiAJCS8qCi0JCSAqIHBhc3MgYnVzeV9jZnNfcnEgYXJndW1lbnQgaW50bwotCQkgKiBsb2FkX2JhbGFuY2VfW3N0YXJ0fG5leHRdX2ZhaXIgaXRlcmF0b3JzCisJCSAqIE5FV0lETEUgYmFsYW5jaW5nIGlzIGEgc291cmNlIG9mIGxhdGVuY3ksIHNvIHByZWVtcHRpYmxlCisJCSAqIGtlcm5lbHMgd2lsbCBzdG9wIGFmdGVyIHRoZSBmaXJzdCB0YXNrIGlzIHB1bGxlZCB0byBtaW5pbWl6ZQorCQkgKiB0aGUgY3JpdGljYWwgc2VjdGlvbi4KIAkJICovCi0JCWNmc19ycV9pdGVyYXRvci5hcmcgPSBidXN5X2Nmc19ycTsKLQkJaWYgKGl0ZXJfbW92ZV9vbmVfdGFzayh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwgc2QsIGlkbGUsCi0JCQkJICAgICAgICZjZnNfcnFfaXRlcmF0b3IpKQotCQkgICAgcmV0dXJuIDE7CisJCWlmIChpZGxlID09IENQVV9ORVdMWV9JRExFICYmIHRoaXNfcnEtPm5yX3J1bm5pbmcpCisJCQlicmVhazsKKworCQlpZiAocmF3X3NwaW5faXNfY29udGVuZGVkKCZ0aGlzX3JxLT5sb2NrKSB8fAorCQkJCXJhd19zcGluX2lzX2NvbnRlbmRlZCgmYnVzaWVzdC0+bG9jaykpCisJCQlicmVhazsKKyNlbmRpZgorCX0gd2hpbGUgKGxvYWRfbW92ZWQgJiYgbWF4X2xvYWRfbW92ZSA+IHRvdGFsX2xvYWRfbW92ZWQpOworCisJcmV0dXJuIHRvdGFsX2xvYWRfbW92ZWQgPiAwOworfQorCisvKioqKioqKioqKiBIZWxwZXJzIGZvciBmaW5kX2J1c2llc3RfZ3JvdXAgKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIHNkX2xiX3N0YXRzIC0gU3RydWN0dXJlIHRvIHN0b3JlIHRoZSBzdGF0aXN0aWNzIG9mIGEgc2NoZWRfZG9tYWluCisgKiAJCWR1cmluZyBsb2FkIGJhbGFuY2luZy4KKyAqLworc3RydWN0IHNkX2xiX3N0YXRzIHsKKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmJ1c2llc3Q7IC8qIEJ1c2llc3QgZ3JvdXAgaW4gdGhpcyBzZCAqLworCXN0cnVjdCBzY2hlZF9ncm91cCAqdGhpczsgIC8qIExvY2FsIGdyb3VwIGluIHRoaXMgc2QgKi8KKwl1bnNpZ25lZCBsb25nIHRvdGFsX2xvYWQ7ICAvKiBUb3RhbCBsb2FkIG9mIGFsbCBncm91cHMgaW4gc2QgKi8KKwl1bnNpZ25lZCBsb25nIHRvdGFsX3B3cjsgICAvKglUb3RhbCBwb3dlciBvZiBhbGwgZ3JvdXBzIGluIHNkICovCisJdW5zaWduZWQgbG9uZyBhdmdfbG9hZDsJICAgLyogQXZlcmFnZSBsb2FkIGFjcm9zcyBhbGwgZ3JvdXBzIGluIHNkICovCisKKwkvKiogU3RhdGlzdGljcyBvZiB0aGlzIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyB0aGlzX2xvYWQ7CisJdW5zaWduZWQgbG9uZyB0aGlzX2xvYWRfcGVyX3Rhc2s7CisJdW5zaWduZWQgbG9uZyB0aGlzX25yX3J1bm5pbmc7CisKKwkvKiBTdGF0aXN0aWNzIG9mIHRoZSBidXNpZXN0IGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBtYXhfbG9hZDsKKwl1bnNpZ25lZCBsb25nIGJ1c2llc3RfbG9hZF9wZXJfdGFzazsKKwl1bnNpZ25lZCBsb25nIGJ1c2llc3RfbnJfcnVubmluZzsKKwl1bnNpZ25lZCBsb25nIGJ1c2llc3RfZ3JvdXBfY2FwYWNpdHk7CisKKwlpbnQgZ3JvdXBfaW1iOyAvKiBJcyB0aGVyZSBpbWJhbGFuY2UgaW4gdGhpcyBzZCAqLworI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCisJaW50IHBvd2VyX3NhdmluZ3NfYmFsYW5jZTsgLyogSXMgcG93ZXJzYXZlIGJhbGFuY2UgbmVlZGVkIGZvciB0aGlzIHNkICovCisJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cF9taW47IC8qIExlYXN0IGxvYWRlZCBncm91cCBpbiBzZCAqLworCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXBfbGVhZGVyOyAvKiBHcm91cCB3aGljaCByZWxpZXZlcyBncm91cF9taW4gKi8KKwl1bnNpZ25lZCBsb25nIG1pbl9sb2FkX3Blcl90YXNrOyAvKiBsb2FkX3Blcl90YXNrIGluIGdyb3VwX21pbiAqLworCXVuc2lnbmVkIGxvbmcgbGVhZGVyX25yX3J1bm5pbmc7IC8qIE5yIHJ1bm5pbmcgb2YgZ3JvdXBfbGVhZGVyICovCisJdW5zaWduZWQgbG9uZyBtaW5fbnJfcnVubmluZzsgLyogTnIgcnVubmluZyBvZiBncm91cF9taW4gKi8KKyNlbmRpZgorfTsKKworLyoKKyAqIHNnX2xiX3N0YXRzIC0gc3RhdHMgb2YgYSBzY2hlZF9ncm91cCByZXF1aXJlZCBmb3IgbG9hZF9iYWxhbmNpbmcKKyAqLworc3RydWN0IHNnX2xiX3N0YXRzIHsKKwl1bnNpZ25lZCBsb25nIGF2Z19sb2FkOyAvKkF2ZyBsb2FkIGFjcm9zcyB0aGUgQ1BVcyBvZiB0aGUgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIGdyb3VwX2xvYWQ7IC8qIFRvdGFsIGxvYWQgb3ZlciB0aGUgQ1BVcyBvZiB0aGUgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIHN1bV9ucl9ydW5uaW5nOyAvKiBOciB0YXNrcyBydW5uaW5nIGluIHRoZSBncm91cCAqLworCXVuc2lnbmVkIGxvbmcgc3VtX3dlaWdodGVkX2xvYWQ7IC8qIFdlaWdodGVkIGxvYWQgb2YgZ3JvdXAncyB0YXNrcyAqLworCXVuc2lnbmVkIGxvbmcgZ3JvdXBfY2FwYWNpdHk7CisJaW50IGdyb3VwX2ltYjsgLyogSXMgdGhlcmUgYW4gaW1iYWxhbmNlIGluIHRoZSBncm91cCA/ICovCit9OworCisvKioKKyAqIGdyb3VwX2ZpcnN0X2NwdSAtIFJldHVybnMgdGhlIGZpcnN0IGNwdSBpbiB0aGUgY3B1bWFzayBvZiBhIHNjaGVkX2dyb3VwLgorICogQGdyb3VwOiBUaGUgZ3JvdXAgd2hvc2UgZmlyc3QgY3B1IGlzIHRvIGJlIHJldHVybmVkLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBncm91cF9maXJzdF9jcHUoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCkKK3sKKwlyZXR1cm4gY3B1bWFza19maXJzdChzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSk7Cit9CisKKy8qKgorICogZ2V0X3NkX2xvYWRfaWR4IC0gT2J0YWluIHRoZSBsb2FkIGluZGV4IGZvciBhIGdpdmVuIHNjaGVkIGRvbWFpbi4KKyAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBsb2FkX2lkeCBpcyB0byBiZSBvYnRhaW5lZC4KKyAqIEBpZGxlOiBUaGUgSWRsZSBzdGF0dXMgb2YgdGhlIENQVSBmb3Igd2hvc2Ugc2QgbG9hZF9pY3ggaXMgb2J0YWluZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdldF9zZF9sb2FkX2lkeChzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKKwkJCQkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCit7CisJaW50IGxvYWRfaWR4OworCisJc3dpdGNoIChpZGxlKSB7CisJY2FzZSBDUFVfTk9UX0lETEU6CisJCWxvYWRfaWR4ID0gc2QtPmJ1c3lfaWR4OworCQlicmVhazsKKworCWNhc2UgQ1BVX05FV0xZX0lETEU6CisJCWxvYWRfaWR4ID0gc2QtPm5ld2lkbGVfaWR4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlsb2FkX2lkeCA9IHNkLT5pZGxlX2lkeDsKKwkJYnJlYWs7CiAJfQogCisJcmV0dXJuIGxvYWRfaWR4OworfQorCisKKyNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQorLyoqCisgKiBpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMgLSBJbml0aWFsaXplIHBvd2VyIHNhdmluZ3Mgc3RhdGlzdGljcyBmb3IKKyAqIHRoZSBnaXZlbiBzY2hlZF9kb21haW4sIGR1cmluZyBsb2FkIGJhbGFuY2luZy4KKyAqCisgKiBAc2Q6IFNjaGVkIGRvbWFpbiB3aG9zZSBwb3dlci1zYXZpbmdzIHN0YXRpc3RpY3MgYXJlIHRvIGJlIGluaXRpYWxpemVkLgorICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBmb3Igc2QuCisgKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIENQVSBhdCB3aGljaCB3ZSdyZSBwZXJmb3JtaW5nIGxvYWQtYmFsYW5jaW5nLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAorCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKK3sKKwkvKgorCSAqIEJ1c3kgcHJvY2Vzc29ycyB3aWxsIG5vdCBwYXJ0aWNpcGF0ZSBpbiBwb3dlciBzYXZpbmdzCisJICogYmFsYW5jZS4KKwkgKi8KKwlpZiAoaWRsZSA9PSBDUFVfTk9UX0lETEUgfHwgIShzZC0+ZmxhZ3MgJiBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCisJCXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMDsKKwllbHNlIHsKKwkJc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAxOworCQlzZHMtPm1pbl9ucl9ydW5uaW5nID0gVUxPTkdfTUFYOworCQlzZHMtPmxlYWRlcl9ucl9ydW5uaW5nID0gMDsKKwl9Cit9CisKKy8qKgorICogdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMgLSBVcGRhdGUgdGhlIHBvd2VyIHNhdmluZyBzdGF0cyBmb3IgYQorICogc2NoZWRfZG9tYWluIHdoaWxlIHBlcmZvcm1pbmcgbG9hZCBiYWxhbmNpbmcuCisgKgorICogQGdyb3VwOiBzY2hlZF9ncm91cCBiZWxvbmdpbmcgdG8gdGhlIHNjaGVkX2RvbWFpbiB1bmRlciBjb25zaWRlcmF0aW9uLgorICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluCisgKiBAbG9jYWxfZ3JvdXA6IERvZXMgZ3JvdXAgY29udGFpbiB0aGUgQ1BVIGZvciB3aGljaCB3ZSdyZSBwZXJmb3JtaW5nCisgKiAJCWxvYWQgYmFsYW5jaW5nID8KKyAqIEBzZ3M6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3Mgb2YgdGhlIGdyb3VwLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgaW50IGxvY2FsX2dyb3VwLCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncykKK3sKKworCWlmICghc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UpCisJCXJldHVybjsKKworCS8qCisJICogSWYgdGhlIGxvY2FsIGdyb3VwIGlzIGlkbGUgb3IgY29tcGxldGVseSBsb2FkZWQKKwkgKiBubyBuZWVkIHRvIGRvIHBvd2VyIHNhdmluZ3MgYmFsYW5jZSBhdCB0aGlzIGRvbWFpbgorCSAqLworCWlmIChsb2NhbF9ncm91cCAmJiAoc2RzLT50aGlzX25yX3J1bm5pbmcgPj0gc2dzLT5ncm91cF9jYXBhY2l0eSB8fAorCQkJCSFzZHMtPnRoaXNfbnJfcnVubmluZykpCisJCXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMDsKKworCS8qCisJICogSWYgYSBncm91cCBpcyBhbHJlYWR5IHJ1bm5pbmcgYXQgZnVsbCBjYXBhY2l0eSBvciBpZGxlLAorCSAqIGRvbid0IGluY2x1ZGUgdGhhdCBncm91cCBpbiBwb3dlciBzYXZpbmdzIGNhbGN1bGF0aW9ucworCSAqLworCWlmICghc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgfHwKKwkJc2dzLT5zdW1fbnJfcnVubmluZyA+PSBzZ3MtPmdyb3VwX2NhcGFjaXR5IHx8CisJCSFzZ3MtPnN1bV9ucl9ydW5uaW5nKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgZ3JvdXAgd2hpY2ggaGFzIHRoZSBsZWFzdCBub24taWRsZSBsb2FkLgorCSAqIFRoaXMgaXMgdGhlIGdyb3VwIGZyb20gd2hlcmUgd2UgbmVlZCB0byBwaWNrIHVwIHRoZSBsb2FkCisJICogZm9yIHNhdmluZyBwb3dlcgorCSAqLworCWlmICgoc2dzLT5zdW1fbnJfcnVubmluZyA8IHNkcy0+bWluX25yX3J1bm5pbmcpIHx8CisJICAgIChzZ3MtPnN1bV9ucl9ydW5uaW5nID09IHNkcy0+bWluX25yX3J1bm5pbmcgJiYKKwkgICAgIGdyb3VwX2ZpcnN0X2NwdShncm91cCkgPiBncm91cF9maXJzdF9jcHUoc2RzLT5ncm91cF9taW4pKSkgeworCQlzZHMtPmdyb3VwX21pbiA9IGdyb3VwOworCQlzZHMtPm1pbl9ucl9ydW5uaW5nID0gc2dzLT5zdW1fbnJfcnVubmluZzsKKwkJc2RzLT5taW5fbG9hZF9wZXJfdGFzayA9IHNncy0+c3VtX3dlaWdodGVkX2xvYWQgLworCQkJCQkJc2dzLT5zdW1fbnJfcnVubmluZzsKKwl9CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgZ3JvdXAgd2hpY2ggaXMgYWxtb3N0IG5lYXIgaXRzCisJICogY2FwYWNpdHkgYnV0IHN0aWxsIGhhcyBzb21lIHNwYWNlIHRvIHBpY2sgdXAgc29tZSBsb2FkCisJICogZnJvbSBvdGhlciBncm91cCBhbmQgc2F2ZSBtb3JlIHBvd2VyCisJICovCisJaWYgKHNncy0+c3VtX25yX3J1bm5pbmcgKyAxID4gc2dzLT5ncm91cF9jYXBhY2l0eSkKKwkJcmV0dXJuOworCisJaWYgKHNncy0+c3VtX25yX3J1bm5pbmcgPiBzZHMtPmxlYWRlcl9ucl9ydW5uaW5nIHx8CisJICAgIChzZ3MtPnN1bV9ucl9ydW5uaW5nID09IHNkcy0+bGVhZGVyX25yX3J1bm5pbmcgJiYKKwkgICAgIGdyb3VwX2ZpcnN0X2NwdShncm91cCkgPCBncm91cF9maXJzdF9jcHUoc2RzLT5ncm91cF9sZWFkZXIpKSkgeworCQlzZHMtPmdyb3VwX2xlYWRlciA9IGdyb3VwOworCQlzZHMtPmxlYWRlcl9ucl9ydW5uaW5nID0gc2dzLT5zdW1fbnJfcnVubmluZzsKKwl9Cit9CisKKy8qKgorICogY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwIC0gc2VlIGlmIHRoZXJlIGlzIHBvdGVudGlhbCBmb3Igc29tZSBwb3dlci1zYXZpbmdzIGJhbGFuY2UKKyAqIEBzZHM6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbgorICoJdW5kZXIgY29uc2lkZXJhdGlvbi4KKyAqIEB0aGlzX2NwdTogQ3B1IGF0IHdoaWNoIHdlJ3JlIGN1cnJlbnRseSBwZXJmb3JtaW5nIGxvYWQtYmFsYW5jaW5nLgorICogQGltYmFsYW5jZTogVmFyaWFibGUgdG8gc3RvcmUgdGhlIGltYmFsYW5jZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIENoZWNrIGlmIHdlIGhhdmUgcG90ZW50aWFsIHRvIHBlcmZvcm0gc29tZSBwb3dlci1zYXZpbmdzIGJhbGFuY2UuCisgKiBJZiB5ZXMsIHNldCB0aGUgYnVzaWVzdCBncm91cCB0byBiZSB0aGUgbGVhc3QgbG9hZGVkIGdyb3VwIGluIHRoZQorICogc2NoZWRfZG9tYWluLCBzbyB0aGF0IGl0J3MgQ1BVcyBjYW4gYmUgcHV0IHRvIGlkbGUuCisgKgorICogUmV0dXJucyAxIGlmIHRoZXJlIGlzIHBvdGVudGlhbCB0byBwZXJmb3JtIHBvd2VyLXNhdmluZ3MgYmFsYW5jZS4KKyAqIEVsc2UgcmV0dXJucyAwLgorICovCitzdGF0aWMgaW5saW5lIGludCBjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsCisJCQkJCWludCB0aGlzX2NwdSwgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQoreworCWlmICghc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UpCisJCXJldHVybiAwOworCisJaWYgKHNkcy0+dGhpcyAhPSBzZHMtPmdyb3VwX2xlYWRlciB8fAorCQkJc2RzLT5ncm91cF9sZWFkZXIgPT0gc2RzLT5ncm91cF9taW4pCisJCXJldHVybiAwOworCisJKmltYmFsYW5jZSA9IHNkcy0+bWluX2xvYWRfcGVyX3Rhc2s7CisJc2RzLT5idXNpZXN0ID0gc2RzLT5ncm91cF9taW47CisKKwlyZXR1cm4gMTsKKworfQorI2Vsc2UgLyogQ09ORklHX1NDSEVEX01DIHx8IENPTkZJR19TQ0hFRF9TTVQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsCisJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGludCBsb2NhbF9ncm91cCwgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIGludCBjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsCisJCQkJCWludCB0aGlzX2NwdSwgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQorewogCXJldHVybiAwOwogfQorI2VuZGlmIC8qIENPTkZJR19TQ0hFRF9NQyB8fCBDT05GSUdfU0NIRURfU01UICovCisKKwordW5zaWduZWQgbG9uZyBkZWZhdWx0X3NjYWxlX2ZyZXFfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCit7CisJcmV0dXJuIFNDSEVEX0xPQURfU0NBTEU7Cit9CisKK3Vuc2lnbmVkIGxvbmcgX193ZWFrIGFyY2hfc2NhbGVfZnJlcV9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKK3sKKwlyZXR1cm4gZGVmYXVsdF9zY2FsZV9mcmVxX3Bvd2VyKHNkLCBjcHUpOworfQorCit1bnNpZ25lZCBsb25nIGRlZmF1bHRfc2NhbGVfc210X3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgd2VpZ2h0ID0gY3B1bWFza193ZWlnaHQoc2NoZWRfZG9tYWluX3NwYW4oc2QpKTsKKwl1bnNpZ25lZCBsb25nIHNtdF9nYWluID0gc2QtPnNtdF9nYWluOworCisJc210X2dhaW4gLz0gd2VpZ2h0OworCisJcmV0dXJuIHNtdF9nYWluOworfQorCit1bnNpZ25lZCBsb25nIF9fd2VhayBhcmNoX3NjYWxlX3NtdF9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKK3sKKwlyZXR1cm4gZGVmYXVsdF9zY2FsZV9zbXRfcG93ZXIoc2QsIGNwdSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgc2NhbGVfcnRfcG93ZXIoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CisJdTY0IHRvdGFsLCBhdmFpbGFibGU7CisKKwlzY2hlZF9hdmdfdXBkYXRlKHJxKTsKKworCXRvdGFsID0gc2NoZWRfYXZnX3BlcmlvZCgpICsgKHJxLT5jbG9jayAtIHJxLT5hZ2Vfc3RhbXApOworCWF2YWlsYWJsZSA9IHRvdGFsIC0gcnEtPnJ0X2F2ZzsKKworCWlmICh1bmxpa2VseSgoczY0KXRvdGFsIDwgU0NIRURfTE9BRF9TQ0FMRSkpCisJCXRvdGFsID0gU0NIRURfTE9BRF9TQ0FMRTsKKworCXRvdGFsID4+PSBTQ0hFRF9MT0FEX1NISUZUOworCisJcmV0dXJuIGRpdl91NjQoYXZhaWxhYmxlLCB0b3RhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jcHVfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyB3ZWlnaHQgPSBjcHVtYXNrX3dlaWdodChzY2hlZF9kb21haW5fc3BhbihzZCkpOworCXVuc2lnbmVkIGxvbmcgcG93ZXIgPSBTQ0hFRF9MT0FEX1NDQUxFOworCXN0cnVjdCBzY2hlZF9ncm91cCAqc2RnID0gc2QtPmdyb3VwczsKKworCWlmIChzY2hlZF9mZWF0KEFSQ0hfUE9XRVIpKQorCQlwb3dlciAqPSBhcmNoX3NjYWxlX2ZyZXFfcG93ZXIoc2QsIGNwdSk7CisJZWxzZQorCQlwb3dlciAqPSBkZWZhdWx0X3NjYWxlX2ZyZXFfcG93ZXIoc2QsIGNwdSk7CisKKwlwb3dlciA+Pj0gU0NIRURfTE9BRF9TSElGVDsKKworCWlmICgoc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIpICYmIHdlaWdodCA+IDEpIHsKKwkJaWYgKHNjaGVkX2ZlYXQoQVJDSF9QT1dFUikpCisJCQlwb3dlciAqPSBhcmNoX3NjYWxlX3NtdF9wb3dlcihzZCwgY3B1KTsKKwkJZWxzZQorCQkJcG93ZXIgKj0gZGVmYXVsdF9zY2FsZV9zbXRfcG93ZXIoc2QsIGNwdSk7CisKKwkJcG93ZXIgPj49IFNDSEVEX0xPQURfU0hJRlQ7CisJfQorCisJcG93ZXIgKj0gc2NhbGVfcnRfcG93ZXIoY3B1KTsKKwlwb3dlciA+Pj0gU0NIRURfTE9BRF9TSElGVDsKKworCWlmICghcG93ZXIpCisJCXBvd2VyID0gMTsKKworCXNkZy0+Y3B1X3Bvd2VyID0gcG93ZXI7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9ncm91cF9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKK3sKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpjaGlsZCA9IHNkLT5jaGlsZDsKKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCAqc2RnID0gc2QtPmdyb3VwczsKKwl1bnNpZ25lZCBsb25nIHBvd2VyOworCisJaWYgKCFjaGlsZCkgeworCQl1cGRhdGVfY3B1X3Bvd2VyKHNkLCBjcHUpOworCQlyZXR1cm47CisJfQorCisJcG93ZXIgPSAwOworCisJZ3JvdXAgPSBjaGlsZC0+Z3JvdXBzOworCWRvIHsKKwkJcG93ZXIgKz0gZ3JvdXAtPmNwdV9wb3dlcjsKKwkJZ3JvdXAgPSBncm91cC0+bmV4dDsKKwl9IHdoaWxlIChncm91cCAhPSBjaGlsZC0+Z3JvdXBzKTsKKworCXNkZy0+Y3B1X3Bvd2VyID0gcG93ZXI7Cit9CisKKy8qKgorICogdXBkYXRlX3NnX2xiX3N0YXRzIC0gVXBkYXRlIHNjaGVkX2dyb3VwJ3Mgc3RhdGlzdGljcyBmb3IgbG9hZCBiYWxhbmNpbmcuCisgKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KKyAqIEBncm91cDogc2NoZWRfZ3JvdXAgd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KKyAqIEB0aGlzX2NwdTogQ3B1IGZvciB3aGljaCBsb2FkIGJhbGFuY2UgaXMgY3VycmVudGx5IHBlcmZvcm1lZC4KKyAqIEBpZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGlzX2NwdQorICogQGxvYWRfaWR4OiBMb2FkIGluZGV4IG9mIHNjaGVkX2RvbWFpbiBvZiB0aGlzX2NwdSBmb3IgbG9hZCBjYWxjLgorICogQHNkX2lkbGU6IElkbGUgc3RhdHVzIG9mIHRoZSBzY2hlZF9kb21haW4gY29udGFpbmluZyBncm91cC4KKyAqIEBsb2NhbF9ncm91cDogRG9lcyBncm91cCBjb250YWluIHRoaXNfY3B1LgorICogQGNwdXM6IFNldCBvZiBjcHVzIGNvbnNpZGVyZWQgZm9yIGxvYWQgYmFsYW5jaW5nLgorICogQGJhbGFuY2U6IFNob3VsZCB3ZSBiYWxhbmNlLgorICogQHNnczogdmFyaWFibGUgdG8gaG9sZCB0aGUgc3RhdGlzdGljcyBmb3IgdGhpcyBncm91cC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZ19sYl9zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKKwkJCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsIGludCB0aGlzX2NwdSwKKwkJCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgbG9hZF9pZHgsIGludCAqc2RfaWRsZSwKKwkJCWludCBsb2NhbF9ncm91cCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsCisJCQlpbnQgKmJhbGFuY2UsIHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKQoreworCXVuc2lnbmVkIGxvbmcgbG9hZCwgbWF4X2NwdV9sb2FkLCBtaW5fY3B1X2xvYWQ7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGJhbGFuY2VfY3B1ID0gLTEsIGZpcnN0X2lkbGVfY3B1ID0gMDsKKwl1bnNpZ25lZCBsb25nIGF2Z19sb2FkX3Blcl90YXNrID0gMDsKKworCWlmIChsb2NhbF9ncm91cCkKKwkJYmFsYW5jZV9jcHUgPSBncm91cF9maXJzdF9jcHUoZ3JvdXApOworCisJLyogVGFsbHkgdXAgdGhlIGxvYWQgb2YgYWxsIENQVXMgaW4gdGhlIGdyb3VwICovCisJbWF4X2NwdV9sb2FkID0gMDsKKwltaW5fY3B1X2xvYWQgPSB+MFVMOworCisJZm9yX2VhY2hfY3B1X2FuZChpLCBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSwgY3B1cykgeworCQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGkpOworCisJCWlmICgqc2RfaWRsZSAmJiBycS0+bnJfcnVubmluZykKKwkJCSpzZF9pZGxlID0gMDsKKworCQkvKiBCaWFzIGJhbGFuY2luZyB0b3dhcmQgY3B1cyBvZiBvdXIgZG9tYWluICovCisJCWlmIChsb2NhbF9ncm91cCkgeworCQkJaWYgKGlkbGVfY3B1KGkpICYmICFmaXJzdF9pZGxlX2NwdSkgeworCQkJCWZpcnN0X2lkbGVfY3B1ID0gMTsKKwkJCQliYWxhbmNlX2NwdSA9IGk7CisJCQl9CisKKwkJCWxvYWQgPSB0YXJnZXRfbG9hZChpLCBsb2FkX2lkeCk7CisJCX0gZWxzZSB7CisJCQlsb2FkID0gc291cmNlX2xvYWQoaSwgbG9hZF9pZHgpOworCQkJaWYgKGxvYWQgPiBtYXhfY3B1X2xvYWQpCisJCQkJbWF4X2NwdV9sb2FkID0gbG9hZDsKKwkJCWlmIChtaW5fY3B1X2xvYWQgPiBsb2FkKQorCQkJCW1pbl9jcHVfbG9hZCA9IGxvYWQ7CisJCX0KKworCQlzZ3MtPmdyb3VwX2xvYWQgKz0gbG9hZDsKKwkJc2dzLT5zdW1fbnJfcnVubmluZyArPSBycS0+bnJfcnVubmluZzsKKwkJc2dzLT5zdW1fd2VpZ2h0ZWRfbG9hZCArPSB3ZWlnaHRlZF9jcHVsb2FkKGkpOworCisJfQorCisJLyoKKwkgKiBGaXJzdCBpZGxlIGNwdSBvciB0aGUgZmlyc3QgY3B1KGJ1c2llc3QpIGluIHRoaXMgc2NoZWQgZ3JvdXAKKwkgKiBpcyBlbGlnaWJsZSBmb3IgZG9pbmcgbG9hZCBiYWxhbmNpbmcgYXQgdGhpcyBhbmQgYWJvdmUKKwkgKiBkb21haW5zLiBJbiB0aGUgbmV3bHkgaWRsZSBjYXNlLCB3ZSB3aWxsIGFsbG93IGFsbCB0aGUgY3B1J3MKKwkgKiB0byBkbyB0aGUgbmV3bHkgaWRsZSBsb2FkIGJhbGFuY2UuCisJICovCisJaWYgKGlkbGUgIT0gQ1BVX05FV0xZX0lETEUgJiYgbG9jYWxfZ3JvdXAgJiYKKwkgICAgYmFsYW5jZV9jcHUgIT0gdGhpc19jcHUpIHsKKwkJKmJhbGFuY2UgPSAwOworCQlyZXR1cm47CisJfQorCisJdXBkYXRlX2dyb3VwX3Bvd2VyKHNkLCB0aGlzX2NwdSk7CisKKwkvKiBBZGp1c3QgYnkgcmVsYXRpdmUgQ1BVIHBvd2VyIG9mIHRoZSBncm91cCAqLworCXNncy0+YXZnX2xvYWQgPSAoc2dzLT5ncm91cF9sb2FkICogU0NIRURfTE9BRF9TQ0FMRSkgLyBncm91cC0+Y3B1X3Bvd2VyOworCisJLyoKKwkgKiBDb25zaWRlciB0aGUgZ3JvdXAgdW5iYWxhbmNlZCB3aGVuIHRoZSBpbWJhbGFuY2UgaXMgbGFyZ2VyCisJICogdGhhbiB0aGUgYXZlcmFnZSB3ZWlnaHQgb2YgdHdvIHRhc2tzLgorCSAqCisJICogQVBaOiB3aXRoIGNncm91cCB0aGUgYXZnIHRhc2sgd2VpZ2h0IGNhbiB2YXJ5IHdpbGRseSBhbmQKKwkgKiAgICAgIG1pZ2h0IG5vdCBiZSBhIHN1aXRhYmxlIG51bWJlciAtIHNob3VsZCB3ZSBrZWVwIGEKKwkgKiAgICAgIG5vcm1hbGl6ZWQgbnJfcnVubmluZyBudW1iZXIgc29tZXdoZXJlIHRoYXQgbmVnYXRlcworCSAqICAgICAgdGhlIGhpZXJhcmNoeT8KKwkgKi8KKwlpZiAoc2dzLT5zdW1fbnJfcnVubmluZykKKwkJYXZnX2xvYWRfcGVyX3Rhc2sgPSBzZ3MtPnN1bV93ZWlnaHRlZF9sb2FkIC8gc2dzLT5zdW1fbnJfcnVubmluZzsKKworCWlmICgobWF4X2NwdV9sb2FkIC0gbWluX2NwdV9sb2FkKSA+IDIqYXZnX2xvYWRfcGVyX3Rhc2spCisJCXNncy0+Z3JvdXBfaW1iID0gMTsKKworCXNncy0+Z3JvdXBfY2FwYWNpdHkgPQorCQlESVZfUk9VTkRfQ0xPU0VTVChncm91cC0+Y3B1X3Bvd2VyLCBTQ0hFRF9MT0FEX1NDQUxFKTsKK30KKworLyoqCisgKiB1cGRhdGVfc2RfbGJfc3RhdHMgLSBVcGRhdGUgc2NoZWRfZ3JvdXAncyBzdGF0aXN0aWNzIGZvciBsb2FkIGJhbGFuY2luZy4KKyAqIEBzZDogc2NoZWRfZG9tYWluIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCisgKiBAdGhpc19jcHU6IENwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNlIGlzIGN1cnJlbnRseSBwZXJmb3JtZWQuCisgKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhpc19jcHUKKyAqIEBzZF9pZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGUgc2NoZWRfZG9tYWluIGNvbnRhaW5pbmcgZ3JvdXAuCisgKiBAY3B1czogU2V0IG9mIGNwdXMgY29uc2lkZXJlZCBmb3IgbG9hZCBiYWxhbmNpbmcuCisgKiBAYmFsYW5jZTogU2hvdWxkIHdlIGJhbGFuY2UuCisgKiBAc2RzOiB2YXJpYWJsZSB0byBob2xkIHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIHNjaGVkX2RvbWFpbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZF9sYl9zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IHRoaXNfY3B1LAorCQkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCAqc2RfaWRsZSwKKwkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzLCBpbnQgKmJhbGFuY2UsCisJCQlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcykKK3sKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpjaGlsZCA9IHNkLT5jaGlsZDsKKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwID0gc2QtPmdyb3VwczsKKwlzdHJ1Y3Qgc2dfbGJfc3RhdHMgc2dzOworCWludCBsb2FkX2lkeCwgcHJlZmVyX3NpYmxpbmcgPSAwOworCisJaWYgKGNoaWxkICYmIGNoaWxkLT5mbGFncyAmIFNEX1BSRUZFUl9TSUJMSU5HKQorCQlwcmVmZXJfc2libGluZyA9IDE7CisKKwlpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc2QsIHNkcywgaWRsZSk7CisJbG9hZF9pZHggPSBnZXRfc2RfbG9hZF9pZHgoc2QsIGlkbGUpOworCisJZG8geworCQlpbnQgbG9jYWxfZ3JvdXA7CisKKwkJbG9jYWxfZ3JvdXAgPSBjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LAorCQkJCQkgICAgICAgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpOworCQltZW1zZXQoJnNncywgMCwgc2l6ZW9mKHNncykpOworCQl1cGRhdGVfc2dfbGJfc3RhdHMoc2QsIGdyb3VwLCB0aGlzX2NwdSwgaWRsZSwgbG9hZF9pZHgsIHNkX2lkbGUsCisJCQkJbG9jYWxfZ3JvdXAsIGNwdXMsIGJhbGFuY2UsICZzZ3MpOworCisJCWlmIChsb2NhbF9ncm91cCAmJiAhKCpiYWxhbmNlKSkKKwkJCXJldHVybjsKKworCQlzZHMtPnRvdGFsX2xvYWQgKz0gc2dzLmdyb3VwX2xvYWQ7CisJCXNkcy0+dG90YWxfcHdyICs9IGdyb3VwLT5jcHVfcG93ZXI7CisKKwkJLyoKKwkJICogSW4gY2FzZSB0aGUgY2hpbGQgZG9tYWluIHByZWZlcnMgdGFza3MgZ28gdG8gc2libGluZ3MKKwkJICogZmlyc3QsIGxvd2VyIHRoZSBncm91cCBjYXBhY2l0eSB0byBvbmUgc28gdGhhdCB3ZSdsbCB0cnkKKwkJICogYW5kIG1vdmUgYWxsIHRoZSBleGNlc3MgdGFza3MgYXdheS4KKwkJICovCisJCWlmIChwcmVmZXJfc2libGluZykKKwkJCXNncy5ncm91cF9jYXBhY2l0eSA9IG1pbihzZ3MuZ3JvdXBfY2FwYWNpdHksIDFVTCk7CisKKwkJaWYgKGxvY2FsX2dyb3VwKSB7CisJCQlzZHMtPnRoaXNfbG9hZCA9IHNncy5hdmdfbG9hZDsKKwkJCXNkcy0+dGhpcyA9IGdyb3VwOworCQkJc2RzLT50aGlzX25yX3J1bm5pbmcgPSBzZ3Muc3VtX25yX3J1bm5pbmc7CisJCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzayA9IHNncy5zdW1fd2VpZ2h0ZWRfbG9hZDsKKwkJfSBlbHNlIGlmIChzZ3MuYXZnX2xvYWQgPiBzZHMtPm1heF9sb2FkICYmCisJCQkgICAoc2dzLnN1bV9ucl9ydW5uaW5nID4gc2dzLmdyb3VwX2NhcGFjaXR5IHx8CisJCQkJc2dzLmdyb3VwX2ltYikpIHsKKwkJCXNkcy0+bWF4X2xvYWQgPSBzZ3MuYXZnX2xvYWQ7CisJCQlzZHMtPmJ1c2llc3QgPSBncm91cDsKKwkJCXNkcy0+YnVzaWVzdF9ucl9ydW5uaW5nID0gc2dzLnN1bV9ucl9ydW5uaW5nOworCQkJc2RzLT5idXNpZXN0X2dyb3VwX2NhcGFjaXR5ID0gc2dzLmdyb3VwX2NhcGFjaXR5OworCQkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPSBzZ3Muc3VtX3dlaWdodGVkX2xvYWQ7CisJCQlzZHMtPmdyb3VwX2ltYiA9IHNncy5ncm91cF9pbWI7CisJCX0KKworCQl1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhncm91cCwgc2RzLCBsb2NhbF9ncm91cCwgJnNncyk7CisJCWdyb3VwID0gZ3JvdXAtPm5leHQ7CisJfSB3aGlsZSAoZ3JvdXAgIT0gc2QtPmdyb3Vwcyk7Cit9CisKKy8qKgorICogZml4X3NtYWxsX2ltYmFsYW5jZSAtIENhbGN1bGF0ZSB0aGUgbWlub3IgaW1iYWxhbmNlIHRoYXQgZXhpc3RzCisgKgkJCWFtb25nc3QgdGhlIGdyb3VwcyBvZiBhIHNjaGVkX2RvbWFpbiwgZHVyaW5nCisgKgkJCWxvYWQgYmFsYW5jaW5nLgorICogQHNkczogU3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluIHdob3NlIGltYmFsYW5jZSBpcyB0byBiZSBjYWxjdWxhdGVkLgorICogQHRoaXNfY3B1OiBUaGUgY3B1IGF0IHdob3NlIHNjaGVkX2RvbWFpbiB3ZSdyZSBwZXJmb3JtaW5nIGxvYWQtYmFsYW5jZS4KKyAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmaXhfc21hbGxfaW1iYWxhbmNlKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAorCQkJCWludCB0aGlzX2NwdSwgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQoreworCXVuc2lnbmVkIGxvbmcgdG1wLCBwd3Jfbm93ID0gMCwgcHdyX21vdmUgPSAwOworCXVuc2lnbmVkIGludCBpbWJuID0gMjsKKwl1bnNpZ25lZCBsb25nIHNjYWxlZF9idXN5X2xvYWRfcGVyX3Rhc2s7CisKKwlpZiAoc2RzLT50aGlzX25yX3J1bm5pbmcpIHsKKwkJc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2sgLz0gc2RzLT50aGlzX25yX3J1bm5pbmc7CisJCWlmIChzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayA+CisJCQkJc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2spCisJCQlpbWJuID0gMTsKKwl9IGVsc2UKKwkJc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2sgPQorCQkJY3B1X2F2Z19sb2FkX3Blcl90YXNrKHRoaXNfY3B1KTsKKworCXNjYWxlZF9idXN5X2xvYWRfcGVyX3Rhc2sgPSBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaworCQkJCQkJICogU0NIRURfTE9BRF9TQ0FMRTsKKwlzY2FsZWRfYnVzeV9sb2FkX3Blcl90YXNrIC89IHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyOworCisJaWYgKHNkcy0+bWF4X2xvYWQgLSBzZHMtPnRoaXNfbG9hZCArIHNjYWxlZF9idXN5X2xvYWRfcGVyX3Rhc2sgPj0KKwkJCShzY2FsZWRfYnVzeV9sb2FkX3Blcl90YXNrICogaW1ibikpIHsKKwkJKmltYmFsYW5jZSA9IHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBPSywgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggaW1iYWxhbmNlIHRvIGp1c3RpZnkgbW92aW5nIHRhc2tzLAorCSAqIGhvd2V2ZXIgd2UgbWF5IGJlIGFibGUgdG8gaW5jcmVhc2UgdG90YWwgQ1BVIHBvd2VyIHVzZWQgYnkKKwkgKiBtb3ZpbmcgdGhlbS4KKwkgKi8KKworCXB3cl9ub3cgKz0gc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIgKgorCQkJbWluKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrLCBzZHMtPm1heF9sb2FkKTsKKwlwd3Jfbm93ICs9IHNkcy0+dGhpcy0+Y3B1X3Bvd2VyICoKKwkJCW1pbihzZHMtPnRoaXNfbG9hZF9wZXJfdGFzaywgc2RzLT50aGlzX2xvYWQpOworCXB3cl9ub3cgLz0gU0NIRURfTE9BRF9TQ0FMRTsKKworCS8qIEFtb3VudCBvZiBsb2FkIHdlJ2Qgc3VidHJhY3QgKi8KKwl0bXAgPSAoc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvCisJCXNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyOworCWlmIChzZHMtPm1heF9sb2FkID4gdG1wKQorCQlwd3JfbW92ZSArPSBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlciAqCisJCQltaW4oc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2ssIHNkcy0+bWF4X2xvYWQgLSB0bXApOworCisJLyogQW1vdW50IG9mIGxvYWQgd2UnZCBhZGQgKi8KKwlpZiAoc2RzLT5tYXhfbG9hZCAqIHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyIDwKKwkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKQorCQl0bXAgPSAoc2RzLT5tYXhfbG9hZCAqIHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyKSAvCisJCQlzZHMtPnRoaXMtPmNwdV9wb3dlcjsKKwllbHNlCisJCXRtcCA9IChzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpIC8KKwkJCXNkcy0+dGhpcy0+Y3B1X3Bvd2VyOworCXB3cl9tb3ZlICs9IHNkcy0+dGhpcy0+Y3B1X3Bvd2VyICoKKwkJCW1pbihzZHMtPnRoaXNfbG9hZF9wZXJfdGFzaywgc2RzLT50aGlzX2xvYWQgKyB0bXApOworCXB3cl9tb3ZlIC89IFNDSEVEX0xPQURfU0NBTEU7CisKKwkvKiBNb3ZlIGlmIHdlIGdhaW4gdGhyb3VnaHB1dCAqLworCWlmIChwd3JfbW92ZSA+IHB3cl9ub3cpCisJCSppbWJhbGFuY2UgPSBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzazsKK30KKworLyoqCisgKiBjYWxjdWxhdGVfaW1iYWxhbmNlIC0gQ2FsY3VsYXRlIHRoZSBhbW91bnQgb2YgaW1iYWxhbmNlIHByZXNlbnQgd2l0aGluIHRoZQorICoJCQkgZ3JvdXBzIG9mIGEgZ2l2ZW4gc2NoZWRfZG9tYWluIGR1cmluZyBsb2FkIGJhbGFuY2UuCisgKiBAc2RzOiBzdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4gd2hvc2UgaW1iYWxhbmNlIGlzIHRvIGJlIGNhbGN1bGF0ZWQuCisgKiBAdGhpc19jcHU6IENwdSBmb3Igd2hpY2ggY3VycmVudGx5IGxvYWQgYmFsYW5jZSBpcyBiZWluZyBwZXJmb3JtZWQuCisgKiBAaW1iYWxhbmNlOiBUaGUgdmFyaWFibGUgdG8gc3RvcmUgdGhlIGltYmFsYW5jZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZV9pbWJhbGFuY2Uoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGludCB0aGlzX2NwdSwKKwkJdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQoreworCXVuc2lnbmVkIGxvbmcgbWF4X3B1bGwsIGxvYWRfYWJvdmVfY2FwYWNpdHkgPSB+MFVMOworCisJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgLz0gc2RzLT5idXNpZXN0X25yX3J1bm5pbmc7CisJaWYgKHNkcy0+Z3JvdXBfaW1iKSB7CisJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID0KKwkJCW1pbihzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaywgc2RzLT5hdmdfbG9hZCk7CisJfQorCisJLyoKKwkgKiBJbiB0aGUgcHJlc2VuY2Ugb2Ygc21wIG5pY2UgYmFsYW5jaW5nLCBjZXJ0YWluIHNjZW5hcmlvcyBjYW4gaGF2ZQorCSAqIG1heCBsb2FkIGxlc3MgdGhhbiBhdmcgbG9hZChhcyB3ZSBza2lwIHRoZSBncm91cHMgYXQgb3IgYmVsb3cKKwkgKiBpdHMgY3B1X3Bvd2VyLCB3aGlsZSBjYWxjdWxhdGluZyBtYXhfbG9hZC4uKQorCSAqLworCWlmIChzZHMtPm1heF9sb2FkIDwgc2RzLT5hdmdfbG9hZCkgeworCQkqaW1iYWxhbmNlID0gMDsKKwkJcmV0dXJuIGZpeF9zbWFsbF9pbWJhbGFuY2Uoc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKKwl9CisKKwlpZiAoIXNkcy0+Z3JvdXBfaW1iKSB7CisJCS8qCisJCSAqIERvbid0IHdhbnQgdG8gcHVsbCBzbyBtYW55IHRhc2tzIHRoYXQgYSBncm91cCB3b3VsZCBnbyBpZGxlLgorCQkgKi8KKwkJbG9hZF9hYm92ZV9jYXBhY2l0eSA9IChzZHMtPmJ1c2llc3RfbnJfcnVubmluZyAtCisJCQkJCQlzZHMtPmJ1c2llc3RfZ3JvdXBfY2FwYWNpdHkpOworCisJCWxvYWRfYWJvdmVfY2FwYWNpdHkgKj0gKFNDSEVEX0xPQURfU0NBTEUgKiBTQ0hFRF9MT0FEX1NDQUxFKTsKKworCQlsb2FkX2Fib3ZlX2NhcGFjaXR5IC89IHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyOworCX0KKworCS8qCisJICogV2UncmUgdHJ5aW5nIHRvIGdldCBhbGwgdGhlIGNwdXMgdG8gdGhlIGF2ZXJhZ2VfbG9hZCwgc28gd2UgZG9uJ3QKKwkgKiB3YW50IHRvIHB1c2ggb3Vyc2VsdmVzIGFib3ZlIHRoZSBhdmVyYWdlIGxvYWQsIG5vciBkbyB3ZSB3aXNoIHRvCisJICogcmVkdWNlIHRoZSBtYXggbG9hZGVkIGNwdSBiZWxvdyB0aGUgYXZlcmFnZSBsb2FkLiBBdCB0aGUgc2FtZSB0aW1lLAorCSAqIHdlIGFsc28gZG9uJ3Qgd2FudCB0byByZWR1Y2UgdGhlIGdyb3VwIGxvYWQgYmVsb3cgdGhlIGdyb3VwIGNhcGFjaXR5CisJICogKHNvIHRoYXQgd2UgY2FuIGltcGxlbWVudCBwb3dlci1zYXZpbmdzIHBvbGljaWVzIGV0YykuIFRodXMgd2UgbG9vaworCSAqIGZvciB0aGUgbWluaW11bSBwb3NzaWJsZSBpbWJhbGFuY2UuCisJICogQmUgY2FyZWZ1bCBvZiBuZWdhdGl2ZSBudW1iZXJzIGFzIHRoZXknbGwgYXBwZWFyIGFzIHZlcnkgbGFyZ2UgdmFsdWVzCisJICogd2l0aCB1bnNpZ25lZCBsb25ncy4KKwkgKi8KKwltYXhfcHVsbCA9IG1pbihzZHMtPm1heF9sb2FkIC0gc2RzLT5hdmdfbG9hZCwgbG9hZF9hYm92ZV9jYXBhY2l0eSk7CisKKwkvKiBIb3cgbXVjaCBsb2FkIHRvIGFjdHVhbGx5IG1vdmUgdG8gZXF1YWxpc2UgdGhlIGltYmFsYW5jZSAqLworCSppbWJhbGFuY2UgPSBtaW4obWF4X3B1bGwgKiBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlciwKKwkJKHNkcy0+YXZnX2xvYWQgLSBzZHMtPnRoaXNfbG9hZCkgKiBzZHMtPnRoaXMtPmNwdV9wb3dlcikKKwkJCS8gU0NIRURfTE9BRF9TQ0FMRTsKKworCS8qCisJICogaWYgKmltYmFsYW5jZSBpcyBsZXNzIHRoYW4gdGhlIGF2ZXJhZ2UgbG9hZCBwZXIgcnVubmFibGUgdGFzaworCSAqIHRoZXJlIGlzIG5vIGdhdXJhbnRlZSB0aGF0IGFueSB0YXNrcyB3aWxsIGJlIG1vdmVkIHNvIHdlJ2xsIGhhdmUKKwkgKiBhIHRoaW5rIGFib3V0IGJ1bXBpbmcgaXRzIHZhbHVlIHRvIGZvcmNlIGF0IGxlYXN0IG9uZSB0YXNrIHRvIGJlCisJICogbW92ZWQKKwkgKi8KKwlpZiAoKmltYmFsYW5jZSA8IHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrKQorCQlyZXR1cm4gZml4X3NtYWxsX2ltYmFsYW5jZShzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpOworCit9CisvKioqKioqKiBmaW5kX2J1c2llc3RfZ3JvdXAoKSBoZWxwZXJzIGVuZCBoZXJlICoqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBmaW5kX2J1c2llc3RfZ3JvdXAgLSBSZXR1cm5zIHRoZSBidXNpZXN0IGdyb3VwIHdpdGhpbiB0aGUgc2NoZWRfZG9tYWluCisgKiBpZiB0aGVyZSBpcyBhbiBpbWJhbGFuY2UuIElmIHRoZXJlIGlzbid0IGFuIGltYmFsYW5jZSwgYW5kCisgKiB0aGUgdXNlciBoYXMgb3B0ZWQgZm9yIHBvd2VyLXNhdmluZ3MsIGl0IHJldHVybnMgYSBncm91cCB3aG9zZQorICogQ1BVcyBjYW4gYmUgcHV0IHRvIGlkbGUgYnkgcmViYWxhbmNpbmcgdGhvc2UgdGFza3MgZWxzZXdoZXJlLCBpZgorICogc3VjaCBhIGdyb3VwIGV4aXN0cy4KKyAqCisgKiBBbHNvIGNhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiB3ZWlnaHRlZCBsb2FkIHdoaWNoIHNob3VsZCBiZSBtb3ZlZAorICogdG8gcmVzdG9yZSBiYWxhbmNlLgorICoKKyAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBidXNpZXN0IGdyb3VwIGlzIHRvIGJlIHJldHVybmVkLgorICogQHRoaXNfY3B1OiBUaGUgY3B1IGZvciB3aGljaCBsb2FkIGJhbGFuY2luZyBpcyBjdXJyZW50bHkgYmVpbmcgcGVyZm9ybWVkLgorICogQGltYmFsYW5jZTogVmFyaWFibGUgd2hpY2ggc3RvcmVzIGFtb3VudCBvZiB3ZWlnaHRlZCBsb2FkIHdoaWNoIHNob3VsZAorICoJCWJlIG1vdmVkIHRvIHJlc3RvcmUgYmFsYW5jZS9wdXQgYSBncm91cCB0byBpZGxlLgorICogQGlkbGU6IFRoZSBpZGxlIHN0YXR1cyBvZiB0aGlzX2NwdS4KKyAqIEBzZF9pZGxlOiBUaGUgaWRsZW5lc3Mgb2Ygc2QKKyAqIEBjcHVzOiBUaGUgc2V0IG9mIENQVXMgdW5kZXIgY29uc2lkZXJhdGlvbiBmb3IgbG9hZC1iYWxhbmNpbmcuCisgKiBAYmFsYW5jZTogUG9pbnRlciB0byBhIHZhcmlhYmxlIGluZGljYXRpbmcgaWYgdGhpc19jcHUKKyAqCWlzIHRoZSBhcHByb3ByaWF0ZSBjcHUgdG8gcGVyZm9ybSBsb2FkIGJhbGFuY2luZyBhdCB0aGlzX2xldmVsLgorICoKKyAqIFJldHVybnM6CS0gdGhlIGJ1c2llc3QgZ3JvdXAgaWYgaW1iYWxhbmNlIGV4aXN0cy4KKyAqCQktIElmIG5vIGltYmFsYW5jZSBhbmQgdXNlciBoYXMgb3B0ZWQgZm9yIHBvd2VyLXNhdmluZ3MgYmFsYW5jZSwKKyAqCQkgICByZXR1cm4gdGhlIGxlYXN0IGxvYWRlZCBncm91cCB3aG9zZSBDUFVzIGNhbiBiZQorICoJCSAgIHB1dCB0byBpZGxlIGJ5IHJlYmFsYW5jaW5nIGl0cyB0YXNrcyBvbnRvIG91ciBncm91cC4KKyAqLworc3RhdGljIHN0cnVjdCBzY2hlZF9ncm91cCAqCitmaW5kX2J1c2llc3RfZ3JvdXAoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCB0aGlzX2NwdSwKKwkJICAgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKKwkJICAgaW50ICpzZF9pZGxlLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywgaW50ICpiYWxhbmNlKQoreworCXN0cnVjdCBzZF9sYl9zdGF0cyBzZHM7CisKKwltZW1zZXQoJnNkcywgMCwgc2l6ZW9mKHNkcykpOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSB2YXJpb3VzIHN0YXRpc3RpY3MgcmVsYXZlbnQgZm9yIGxvYWQgYmFsYW5jaW5nIGF0CisJICogdGhpcyBsZXZlbC4KKwkgKi8KKwl1cGRhdGVfc2RfbGJfc3RhdHMoc2QsIHRoaXNfY3B1LCBpZGxlLCBzZF9pZGxlLCBjcHVzLAorCQkJCQliYWxhbmNlLCAmc2RzKTsKKworCS8qIENhc2VzIHdoZXJlIGltYmFsYW5jZSBkb2VzIG5vdCBleGlzdCBmcm9tIFBPViBvZiB0aGlzX2NwdSAqLworCS8qIDEpIHRoaXNfY3B1IGlzIG5vdCB0aGUgYXBwcm9wcmlhdGUgY3B1IHRvIHBlcmZvcm0gbG9hZCBiYWxhbmNpbmcKKwkgKiAgICBhdCB0aGlzIGxldmVsLgorCSAqIDIpIFRoZXJlIGlzIG5vIGJ1c3kgc2libGluZyBncm91cCB0byBwdWxsIGZyb20uCisJICogMykgVGhpcyBncm91cCBpcyB0aGUgYnVzaWVzdCBncm91cC4KKwkgKiA0KSBUaGlzIGdyb3VwIGlzIG1vcmUgYnVzeSB0aGFuIHRoZSBhdmcgYnVzaWVuZXNzIGF0IHRoaXMKKwkgKiAgICBzY2hlZF9kb21haW4uCisJICogNSkgVGhlIGltYmFsYW5jZSBpcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBsaW1pdC4KKwkgKi8KKwlpZiAoISgqYmFsYW5jZSkpCisJCWdvdG8gcmV0OworCisJaWYgKCFzZHMuYnVzaWVzdCB8fCBzZHMuYnVzaWVzdF9ucl9ydW5uaW5nID09IDApCisJCWdvdG8gb3V0X2JhbGFuY2VkOworCisJaWYgKHNkcy50aGlzX2xvYWQgPj0gc2RzLm1heF9sb2FkKQorCQlnb3RvIG91dF9iYWxhbmNlZDsKKworCXNkcy5hdmdfbG9hZCA9IChTQ0hFRF9MT0FEX1NDQUxFICogc2RzLnRvdGFsX2xvYWQpIC8gc2RzLnRvdGFsX3B3cjsKKworCWlmIChzZHMudGhpc19sb2FkID49IHNkcy5hdmdfbG9hZCkKKwkJZ290byBvdXRfYmFsYW5jZWQ7CisKKwlpZiAoMTAwICogc2RzLm1heF9sb2FkIDw9IHNkLT5pbWJhbGFuY2VfcGN0ICogc2RzLnRoaXNfbG9hZCkKKwkJZ290byBvdXRfYmFsYW5jZWQ7CisKKwkvKiBMb29rcyBsaWtlIHRoZXJlIGlzIGFuIGltYmFsYW5jZS4gQ29tcHV0ZSBpdCAqLworCWNhbGN1bGF0ZV9pbWJhbGFuY2UoJnNkcywgdGhpc19jcHUsIGltYmFsYW5jZSk7CisJcmV0dXJuIHNkcy5idXNpZXN0OworCitvdXRfYmFsYW5jZWQ6CisJLyoKKwkgKiBUaGVyZSBpcyBubyBvYnZpb3VzIGltYmFsYW5jZS4gQnV0IGNoZWNrIGlmIHdlIGNhbiBkbyBzb21lIGJhbGFuY2luZworCSAqIHRvIHNhdmUgcG93ZXIuCisJICovCisJaWYgKGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cCgmc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKSkKKwkJcmV0dXJuIHNkcy5idXNpZXN0OworcmV0OgorCSppbWJhbGFuY2UgPSAwOworCXJldHVybiBOVUxMOworfQorCisvKgorICogZmluZF9idXNpZXN0X3F1ZXVlIC0gZmluZCB0aGUgYnVzaWVzdCBydW5xdWV1ZSBhbW9uZyB0aGUgY3B1cyBpbiBncm91cC4KKyAqLworc3RhdGljIHN0cnVjdCBycSAqCitmaW5kX2J1c2llc3RfcXVldWUoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCisJCSAgIHVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cykKK3sKKwlzdHJ1Y3QgcnEgKmJ1c2llc3QgPSBOVUxMLCAqcnE7CisJdW5zaWduZWQgbG9uZyBtYXhfbG9hZCA9IDA7CisJaW50IGk7CisKKwlmb3JfZWFjaF9jcHUoaSwgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpIHsKKwkJdW5zaWduZWQgbG9uZyBwb3dlciA9IHBvd2VyX29mKGkpOworCQl1bnNpZ25lZCBsb25nIGNhcGFjaXR5ID0gRElWX1JPVU5EX0NMT1NFU1QocG93ZXIsIFNDSEVEX0xPQURfU0NBTEUpOworCQl1bnNpZ25lZCBsb25nIHdsOworCisJCWlmICghY3B1bWFza190ZXN0X2NwdShpLCBjcHVzKSkKKwkJCWNvbnRpbnVlOworCisJCXJxID0gY3B1X3JxKGkpOworCQl3bCA9IHdlaWdodGVkX2NwdWxvYWQoaSk7CisKKwkJLyoKKwkJICogV2hlbiBjb21wYXJpbmcgd2l0aCBpbWJhbGFuY2UsIHVzZSB3ZWlnaHRlZF9jcHVsb2FkKCkKKwkJICogd2hpY2ggaXMgbm90IHNjYWxlZCB3aXRoIHRoZSBjcHUgcG93ZXIuCisJCSAqLworCQlpZiAoY2FwYWNpdHkgJiYgcnEtPm5yX3J1bm5pbmcgPT0gMSAmJiB3bCA+IGltYmFsYW5jZSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIEZvciB0aGUgbG9hZCBjb21wYXJpc29ucyB3aXRoIHRoZSBvdGhlciBjcHUncywgY29uc2lkZXIKKwkJICogdGhlIHdlaWdodGVkX2NwdWxvYWQoKSBzY2FsZWQgd2l0aCB0aGUgY3B1IHBvd2VyLCBzbyB0aGF0CisJCSAqIHRoZSBsb2FkIGNhbiBiZSBtb3ZlZCBhd2F5IGZyb20gdGhlIGNwdSB0aGF0IGlzIHBvdGVudGlhbGx5CisJCSAqIHJ1bm5pbmcgYXQgYSBsb3dlciBjYXBhY2l0eS4KKwkJICovCisJCXdsID0gKHdsICogU0NIRURfTE9BRF9TQ0FMRSkgLyBwb3dlcjsKKworCQlpZiAod2wgPiBtYXhfbG9hZCkgeworCQkJbWF4X2xvYWQgPSB3bDsKKwkJCWJ1c2llc3QgPSBycTsKKwkJfQorCX0KKworCXJldHVybiBidXNpZXN0OworfQorCisvKgorICogTWF4IGJhY2tvZmYgaWYgd2UgZW5jb3VudGVyIHBpbm5lZCB0YXNrcy4gUHJldHR5IGFyYml0cmFyeSB2YWx1ZSwgYnV0CisgKiBzbyBsb25nIGFzIGl0IGlzIGxhcmdlIGVub3VnaC4KKyAqLworI2RlZmluZSBNQVhfUElOTkVEX0lOVEVSVkFMCTUxMgorCisvKiBXb3JraW5nIGNwdW1hc2sgZm9yIGxvYWRfYmFsYW5jZSBhbmQgbG9hZF9iYWxhbmNlX25ld2lkbGUuICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgbG9hZF9iYWxhbmNlX3RtcG1hc2spOworCitzdGF0aWMgaW50IG5lZWRfYWN0aXZlX2JhbGFuY2Uoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBzZF9pZGxlLCBpbnQgaWRsZSkKK3sKKwlpZiAoaWRsZSA9PSBDUFVfTkVXTFlfSURMRSkgeworCQkvKgorCQkgKiBUaGUgb25seSB0YXNrIHJ1bm5pbmcgaW4gYSBub24taWRsZSBjcHUgY2FuIGJlIG1vdmVkIHRvIHRoaXMKKwkJICogY3B1IGluIGFuIGF0dGVtcHQgdG8gY29tcGxldGVseSBmcmVldXAgdGhlIG90aGVyIENQVQorCQkgKiBwYWNrYWdlLgorCQkgKgorCQkgKiBUaGUgcGFja2FnZSBwb3dlciBzYXZpbmcgbG9naWMgY29tZXMgZnJvbQorCQkgKiBmaW5kX2J1c2llc3RfZ3JvdXAoKS4gSWYgdGhlcmUgYXJlIG5vIGltYmFsYW5jZSwgdGhlbgorCQkgKiBmX2JfZygpIHdpbGwgcmV0dXJuIE5VTEwuIEhvd2V2ZXIgd2hlbiBzY2hlZF9tYz17MSwyfSB0aGVuCisJCSAqIGZfYl9nKCkgd2lsbCBzZWxlY3QgYSBncm91cCBmcm9tIHdoaWNoIGEgcnVubmluZyB0YXNrIG1heSBiZQorCQkgKiBwdWxsZWQgdG8gdGhpcyBjcHUgaW4gb3JkZXIgdG8gbWFrZSB0aGUgb3RoZXIgcGFja2FnZSBpZGxlLgorCQkgKiBJZiB0aGVyZSBpcyBubyBvcHBvcnR1bml0eSB0byBtYWtlIGEgcGFja2FnZSBpZGxlIGFuZCBpZgorCQkgKiB0aGVyZSBhcmUgbm8gaW1iYWxhbmNlLCB0aGVuIGZfYl9nKCkgd2lsbCByZXR1cm4gTlVMTCBhbmQgbm8KKwkJICogYWN0aW9uIHdpbGwgYmUgdGFrZW4gaW4gbG9hZF9iYWxhbmNlX25ld2lkbGUoKS4KKwkJICoKKwkJICogVW5kZXIgbm9ybWFsIHRhc2sgcHVsbCBvcGVyYXRpb24gZHVlIHRvIGltYmFsYW5jZSwgdGhlcmUKKwkJICogd2lsbCBiZSBtb3JlIHRoYW4gb25lIHRhc2sgaW4gdGhlIHNvdXJjZSBydW4gcXVldWUgYW5kCisJCSAqIG1vdmVfdGFza3MoKSB3aWxsIHN1Y2NlZWQuICBsZF9tb3ZlZCB3aWxsIGJlIHRydWUgYW5kIHRoaXMKKwkJICogYWN0aXZlIGJhbGFuY2UgY29kZSB3aWxsIG5vdCBiZSB0cmlnZ2VyZWQuCisJCSAqLworCQlpZiAoIXNkX2lkbGUgJiYgc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIgJiYKKwkJICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKHNjaGVkX21jX3Bvd2VyX3NhdmluZ3MgPCBQT1dFUlNBVklOR1NfQkFMQU5DRV9XQUtFVVApCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gdW5saWtlbHkoc2QtPm5yX2JhbGFuY2VfZmFpbGVkID4gc2QtPmNhY2hlX25pY2VfdHJpZXMrMik7Cit9CisKKy8qCisgKiBDaGVjayB0aGlzX2NwdSB0byBlbnN1cmUgaXQgaXMgYmFsYW5jZWQgd2l0aGluIGRvbWFpbi4gQXR0ZW1wdCB0byBtb3ZlCisgKiB0YXNrcyBpZiB0aGVyZSBpcyBhbiBpbWJhbGFuY2UuCisgKi8KK3N0YXRpYyBpbnQgbG9hZF9iYWxhbmNlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLAorCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAorCQkJaW50ICpiYWxhbmNlKQoreworCWludCBsZF9tb3ZlZCwgYWxsX3Bpbm5lZCA9IDAsIGFjdGl2ZV9iYWxhbmNlID0gMCwgc2RfaWRsZSA9IDA7CisJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cDsKKwl1bnNpZ25lZCBsb25nIGltYmFsYW5jZTsKKwlzdHJ1Y3QgcnEgKmJ1c2llc3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY3B1bWFzayAqY3B1cyA9IF9fZ2V0X2NwdV92YXIobG9hZF9iYWxhbmNlX3RtcG1hc2spOworCisJY3B1bWFza19jb3B5KGNwdXMsIGNwdV9hY3RpdmVfbWFzayk7CisKKwkvKgorCSAqIFdoZW4gcG93ZXIgc2F2aW5ncyBwb2xpY3kgaXMgZW5hYmxlZCBmb3IgdGhlIHBhcmVudCBkb21haW4sIGlkbGUKKwkgKiBzaWJsaW5nIGNhbiBwaWNrIHVwIGxvYWQgaXJyZXNwZWN0aXZlIG9mIGJ1c3kgc2libGluZ3MuIEluIHRoaXMgY2FzZSwKKwkgKiBsZXQgdGhlIHN0YXRlIG9mIGlkbGUgc2libGluZyBwZXJjb2xhdGUgdXAgYXMgQ1BVX0lETEUsIGluc3RlYWQgb2YKKwkgKiBwb3J0cmF5aW5nIGl0IGFzIENQVV9OT1RfSURMRS4KKwkgKi8KKwlpZiAoaWRsZSAhPSBDUFVfTk9UX0lETEUgJiYgc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIgJiYKKwkgICAgIXRlc3Rfc2RfcGFyZW50KHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCisJCXNkX2lkbGUgPSAxOworCisJc2NoZWRzdGF0X2luYyhzZCwgbGJfY291bnRbaWRsZV0pOworCityZWRvOgorCXVwZGF0ZV9zaGFyZXMoc2QpOworCWdyb3VwID0gZmluZF9idXNpZXN0X2dyb3VwKHNkLCB0aGlzX2NwdSwgJmltYmFsYW5jZSwgaWRsZSwgJnNkX2lkbGUsCisJCQkJICAgY3B1cywgYmFsYW5jZSk7CisKKwlpZiAoKmJhbGFuY2UgPT0gMCkKKwkJZ290byBvdXRfYmFsYW5jZWQ7CisKKwlpZiAoIWdyb3VwKSB7CisJCXNjaGVkc3RhdF9pbmMoc2QsIGxiX25vYnVzeWdbaWRsZV0pOworCQlnb3RvIG91dF9iYWxhbmNlZDsKKwl9CisKKwlidXNpZXN0ID0gZmluZF9idXNpZXN0X3F1ZXVlKGdyb3VwLCBpZGxlLCBpbWJhbGFuY2UsIGNwdXMpOworCWlmICghYnVzaWVzdCkgeworCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ub2J1c3lxW2lkbGVdKTsKKwkJZ290byBvdXRfYmFsYW5jZWQ7CisJfQorCisJQlVHX09OKGJ1c2llc3QgPT0gdGhpc19ycSk7CisKKwlzY2hlZHN0YXRfYWRkKHNkLCBsYl9pbWJhbGFuY2VbaWRsZV0sIGltYmFsYW5jZSk7CisKKwlsZF9tb3ZlZCA9IDA7CisJaWYgKGJ1c2llc3QtPm5yX3J1bm5pbmcgPiAxKSB7CisJCS8qCisJCSAqIEF0dGVtcHQgdG8gbW92ZSB0YXNrcy4gSWYgZmluZF9idXNpZXN0X2dyb3VwIGhhcyBmb3VuZAorCQkgKiBhbiBpbWJhbGFuY2UgYnV0IGJ1c2llc3QtPm5yX3J1bm5pbmcgPD0gMSwgdGhlIGdyb3VwIGlzCisJCSAqIHN0aWxsIHVuYmFsYW5jZWQuIGxkX21vdmVkIHNpbXBseSBzdGF5cyB6ZXJvLCBzbyBpdCBpcworCQkgKiBjb3JyZWN0bHkgdHJlYXRlZCBhcyBhbiBpbWJhbGFuY2UuCisJCSAqLworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCWRvdWJsZV9ycV9sb2NrKHRoaXNfcnEsIGJ1c2llc3QpOworCQlsZF9tb3ZlZCA9IG1vdmVfdGFza3ModGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCisJCQkJICAgICAgaW1iYWxhbmNlLCBzZCwgaWRsZSwgJmFsbF9waW5uZWQpOworCQlkb3VibGVfcnFfdW5sb2NrKHRoaXNfcnEsIGJ1c2llc3QpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwkJLyoKKwkJICogc29tZSBvdGhlciBjcHUgZGlkIHRoZSBsb2FkIGJhbGFuY2UgZm9yIHVzLgorCQkgKi8KKwkJaWYgKGxkX21vdmVkICYmIHRoaXNfY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJCXJlc2NoZWRfY3B1KHRoaXNfY3B1KTsKKworCQkvKiBBbGwgdGFza3Mgb24gdGhpcyBydW5xdWV1ZSB3ZXJlIHBpbm5lZCBieSBDUFUgYWZmaW5pdHkgKi8KKwkJaWYgKHVubGlrZWx5KGFsbF9waW5uZWQpKSB7CisJCQljcHVtYXNrX2NsZWFyX2NwdShjcHVfb2YoYnVzaWVzdCksIGNwdXMpOworCQkJaWYgKCFjcHVtYXNrX2VtcHR5KGNwdXMpKQorCQkJCWdvdG8gcmVkbzsKKwkJCWdvdG8gb3V0X2JhbGFuY2VkOworCQl9CisJfQorCisJaWYgKCFsZF9tb3ZlZCkgeworCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9mYWlsZWRbaWRsZV0pOworCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQrKzsKKworCQlpZiAobmVlZF9hY3RpdmVfYmFsYW5jZShzZCwgc2RfaWRsZSwgaWRsZSkpIHsKKwkJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYnVzaWVzdC0+bG9jaywgZmxhZ3MpOworCisJCQkvKiBkb24ndCBraWNrIHRoZSBtaWdyYXRpb25fdGhyZWFkLCBpZiB0aGUgY3VycgorCQkJICogdGFzayBvbiBidXNpZXN0IGNwdSBjYW4ndCBiZSBtb3ZlZCB0byB0aGlzX2NwdQorCQkJICovCisJCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsCisJCQkJCSAgICAgICZidXNpZXN0LT5jdXJyLT5jcHVzX2FsbG93ZWQpKSB7CisJCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1c2llc3QtPmxvY2ssCisJCQkJCQkJICAgIGZsYWdzKTsKKwkJCQlhbGxfcGlubmVkID0gMTsKKwkJCQlnb3RvIG91dF9vbmVfcGlubmVkOworCQkJfQorCisJCQlpZiAoIWJ1c2llc3QtPmFjdGl2ZV9iYWxhbmNlKSB7CisJCQkJYnVzaWVzdC0+YWN0aXZlX2JhbGFuY2UgPSAxOworCQkJCWJ1c2llc3QtPnB1c2hfY3B1ID0gdGhpc19jcHU7CisJCQkJYWN0aXZlX2JhbGFuY2UgPSAxOworCQkJfQorCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1c2llc3QtPmxvY2ssIGZsYWdzKTsKKwkJCWlmIChhY3RpdmVfYmFsYW5jZSkKKwkJCQl3YWtlX3VwX3Byb2Nlc3MoYnVzaWVzdC0+bWlncmF0aW9uX3RocmVhZCk7CisKKwkJCS8qCisJCQkgKiBXZSd2ZSBraWNrZWQgYWN0aXZlIGJhbGFuY2luZywgcmVzZXQgdGhlIGZhaWx1cmUKKwkJCSAqIGNvdW50ZXIuCisJCQkgKi8KKwkJCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA9IHNkLT5jYWNoZV9uaWNlX3RyaWVzKzE7CisJCX0KKwl9IGVsc2UKKwkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID0gMDsKKworCWlmIChsaWtlbHkoIWFjdGl2ZV9iYWxhbmNlKSkgeworCQkvKiBXZSB3ZXJlIHVuYmFsYW5jZWQsIHNvIHJlc2V0IHRoZSBiYWxhbmNpbmcgaW50ZXJ2YWwgKi8KKwkJc2QtPmJhbGFuY2VfaW50ZXJ2YWwgPSBzZC0+bWluX2ludGVydmFsOworCX0gZWxzZSB7CisJCS8qCisJCSAqIElmIHdlJ3ZlIGJlZ3VuIGFjdGl2ZSBiYWxhbmNpbmcsIHN0YXJ0IHRvIGJhY2sgb2ZmLiBUaGlzCisJCSAqIGNhc2UgbWF5IG5vdCBiZSBjb3ZlcmVkIGJ5IHRoZSBhbGxfcGlubmVkIGxvZ2ljIGlmIHRoZXJlCisJCSAqIGlzIG9ubHkgMSB0YXNrIG9uIHRoZSBidXN5IHJ1bnF1ZXVlIChiZWNhdXNlIHdlIGRvbid0IGNhbGwKKwkJICogbW92ZV90YXNrcykuCisJCSAqLworCQlpZiAoc2QtPmJhbGFuY2VfaW50ZXJ2YWwgPCBzZC0+bWF4X2ludGVydmFsKQorCQkJc2QtPmJhbGFuY2VfaW50ZXJ2YWwgKj0gMjsKKwl9CisKKwlpZiAoIWxkX21vdmVkICYmICFzZF9pZGxlICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCisJICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQorCQlsZF9tb3ZlZCA9IC0xOworCisJZ290byBvdXQ7CisKK291dF9iYWxhbmNlZDoKKwlzY2hlZHN0YXRfaW5jKHNkLCBsYl9iYWxhbmNlZFtpZGxlXSk7CisKKwlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPSAwOworCitvdXRfb25lX3Bpbm5lZDoKKwkvKiB0dW5lIHVwIHRoZSBiYWxhbmNpbmcgaW50ZXJ2YWwgKi8KKwlpZiAoKGFsbF9waW5uZWQgJiYgc2QtPmJhbGFuY2VfaW50ZXJ2YWwgPCBNQVhfUElOTkVEX0lOVEVSVkFMKSB8fAorCQkJKHNkLT5iYWxhbmNlX2ludGVydmFsIDwgc2QtPm1heF9pbnRlcnZhbCkpCisJCXNkLT5iYWxhbmNlX2ludGVydmFsICo9IDI7CisKKwlpZiAoIXNkX2lkbGUgJiYgc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIgJiYKKwkgICAgIXRlc3Rfc2RfcGFyZW50KHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCisJCWxkX21vdmVkID0gLTE7CisJZWxzZQorCQlsZF9tb3ZlZCA9IDA7CitvdXQ6CisJaWYgKGxkX21vdmVkKQorCQl1cGRhdGVfc2hhcmVzKHNkKTsKKwlyZXR1cm4gbGRfbW92ZWQ7Cit9CisKKy8qCisgKiBpZGxlX2JhbGFuY2UgaXMgY2FsbGVkIGJ5IHNjaGVkdWxlKCkgaWYgdGhpc19jcHUgaXMgYWJvdXQgdG8gYmVjb21lCisgKiBpZGxlLiBBdHRlbXB0cyB0byBwdWxsIHRhc2tzIGZyb20gb3RoZXIgQ1BVcy4KKyAqLworc3RhdGljIHZvaWQgaWRsZV9iYWxhbmNlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxKQoreworCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOworCWludCBwdWxsZWRfdGFzayA9IDA7CisJdW5zaWduZWQgbG9uZyBuZXh0X2JhbGFuY2UgPSBqaWZmaWVzICsgSFo7CisKKwl0aGlzX3JxLT5pZGxlX3N0YW1wID0gdGhpc19ycS0+Y2xvY2s7CisKKwlpZiAodGhpc19ycS0+YXZnX2lkbGUgPCBzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QpCisJCXJldHVybjsKKworCS8qCisJICogRHJvcCB0aGUgcnEtPmxvY2ssIGJ1dCBrZWVwIElSUS9wcmVlbXB0IGRpc2FibGVkLgorCSAqLworCXJhd19zcGluX3VubG9jaygmdGhpc19ycS0+bG9jayk7CisKKwlmb3JfZWFjaF9kb21haW4odGhpc19jcHUsIHNkKSB7CisJCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWw7CisJCWludCBiYWxhbmNlID0gMTsKKworCQlpZiAoIShzZC0+ZmxhZ3MgJiBTRF9MT0FEX0JBTEFOQ0UpKQorCQkJY29udGludWU7CisKKwkJaWYgKHNkLT5mbGFncyAmIFNEX0JBTEFOQ0VfTkVXSURMRSkgeworCQkJLyogSWYgd2UndmUgcHVsbGVkIHRhc2tzIG92ZXIgc3RvcCBzZWFyY2hpbmc6ICovCisJCQlwdWxsZWRfdGFzayA9IGxvYWRfYmFsYW5jZSh0aGlzX2NwdSwgdGhpc19ycSwKKwkJCQkJCSAgIHNkLCBDUFVfTkVXTFlfSURMRSwgJmJhbGFuY2UpOworCQl9CisKKwkJaW50ZXJ2YWwgPSBtc2Vjc190b19qaWZmaWVzKHNkLT5iYWxhbmNlX2ludGVydmFsKTsKKwkJaWYgKHRpbWVfYWZ0ZXIobmV4dF9iYWxhbmNlLCBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWwpKQorCQkJbmV4dF9iYWxhbmNlID0gc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsOworCQlpZiAocHVsbGVkX3Rhc2spIHsKKwkJCXRoaXNfcnEtPmlkbGVfc3RhbXAgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyYXdfc3Bpbl9sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKKworCWlmIChwdWxsZWRfdGFzayB8fCB0aW1lX2FmdGVyKGppZmZpZXMsIHRoaXNfcnEtPm5leHRfYmFsYW5jZSkpIHsKKwkJLyoKKwkJICogV2UgYXJlIGdvaW5nIGlkbGUuIG5leHRfYmFsYW5jZSBtYXkgYmUgc2V0IGJhc2VkIG9uCisJCSAqIGEgYnVzeSBwcm9jZXNzb3IuIFNvIHJlc2V0IG5leHRfYmFsYW5jZS4KKwkJICovCisJCXRoaXNfcnEtPm5leHRfYmFsYW5jZSA9IG5leHRfYmFsYW5jZTsKKwl9Cit9CisKKy8qCisgKiBhY3RpdmVfbG9hZF9iYWxhbmNlIGlzIHJ1biBieSBtaWdyYXRpb24gdGhyZWFkcy4gSXQgcHVzaGVzIHJ1bm5pbmcgdGFza3MKKyAqIG9mZiB0aGUgYnVzaWVzdCBDUFUgb250byBpZGxlIENQVXMuIEl0IHJlcXVpcmVzIGF0IGxlYXN0IDEgdGFzayB0byBiZQorICogcnVubmluZyBvbiBlYWNoIHBoeXNpY2FsIENQVSB3aGVyZSBwb3NzaWJsZSwgYW5kIGF2b2lkcyBwaHlzaWNhbCAvCisgKiBsb2dpY2FsIGltYmFsYW5jZXMuCisgKgorICogQ2FsbGVkIHdpdGggYnVzaWVzdF9ycSBsb2NrZWQuCisgKi8KK3N0YXRpYyB2b2lkIGFjdGl2ZV9sb2FkX2JhbGFuY2Uoc3RydWN0IHJxICpidXNpZXN0X3JxLCBpbnQgYnVzaWVzdF9jcHUpCit7CisJaW50IHRhcmdldF9jcHUgPSBidXNpZXN0X3JxLT5wdXNoX2NwdTsKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKKwlzdHJ1Y3QgcnEgKnRhcmdldF9ycTsKKworCS8qIElzIHRoZXJlIGFueSB0YXNrIHRvIG1vdmU/ICovCisJaWYgKGJ1c2llc3RfcnEtPm5yX3J1bm5pbmcgPD0gMSkKKwkJcmV0dXJuOworCisJdGFyZ2V0X3JxID0gY3B1X3JxKHRhcmdldF9jcHUpOworCisJLyoKKwkgKiBUaGlzIGNvbmRpdGlvbiBpcyAiaW1wb3NzaWJsZSIsIGlmIGl0IG9jY3VycworCSAqIHdlIG5lZWQgdG8gZml4IGl0LiBPcmlnaW5hbGx5IHJlcG9ydGVkIGJ5CisJICogQmpvcm4gSGVsZ2FhcyBvbiBhIDEyOC1jcHUgc2V0dXAuCisJICovCisJQlVHX09OKGJ1c2llc3RfcnEgPT0gdGFyZ2V0X3JxKTsKKworCS8qIG1vdmUgYSB0YXNrIGZyb20gYnVzaWVzdF9ycSB0byB0YXJnZXRfcnEgKi8KKwlkb3VibGVfbG9ja19iYWxhbmNlKGJ1c2llc3RfcnEsIHRhcmdldF9ycSk7CisJdXBkYXRlX3JxX2Nsb2NrKGJ1c2llc3RfcnEpOworCXVwZGF0ZV9ycV9jbG9jayh0YXJnZXRfcnEpOworCisJLyogU2VhcmNoIGZvciBhbiBzZCBzcGFubmluZyB1cyBhbmQgdGhlIHRhcmdldCBDUFUuICovCisJZm9yX2VhY2hfZG9tYWluKHRhcmdldF9jcHUsIHNkKSB7CisJCWlmICgoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSAmJgorCQkgICAgY3B1bWFza190ZXN0X2NwdShidXNpZXN0X2NwdSwgc2NoZWRfZG9tYWluX3NwYW4oc2QpKSkKKwkJCQlicmVhazsKKwl9CisKKwlpZiAobGlrZWx5KHNkKSkgeworCQlzY2hlZHN0YXRfaW5jKHNkLCBhbGJfY291bnQpOworCisJCWlmIChtb3ZlX29uZV90YXNrKHRhcmdldF9ycSwgdGFyZ2V0X2NwdSwgYnVzaWVzdF9ycSwKKwkJCQkgIHNkLCBDUFVfSURMRSkpCisJCQlzY2hlZHN0YXRfaW5jKHNkLCBhbGJfcHVzaGVkKTsKKwkJZWxzZQorCQkJc2NoZWRzdGF0X2luYyhzZCwgYWxiX2ZhaWxlZCk7CisJfQorCWRvdWJsZV91bmxvY2tfYmFsYW5jZShidXNpZXN0X3JxLCB0YXJnZXRfcnEpOworfQorCisjaWZkZWYgQ09ORklHX05PX0haCitzdGF0aWMgc3RydWN0IHsKKwlhdG9taWNfdCBsb2FkX2JhbGFuY2VyOworCWNwdW1hc2tfdmFyX3QgY3B1X21hc2s7CisJY3B1bWFza192YXJfdCBpbGJfZ3JwX25vaHpfbWFzazsKK30gbm9oeiBfX19fY2FjaGVsaW5lX2FsaWduZWQgPSB7CisJLmxvYWRfYmFsYW5jZXIgPSBBVE9NSUNfSU5JVCgtMSksCit9OworCitpbnQgZ2V0X25vaHpfbG9hZF9iYWxhbmNlcih2b2lkKQoreworCXJldHVybiBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKTsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCisvKioKKyAqIGxvd2VzdF9mbGFnX2RvbWFpbiAtIFJldHVybiBsb3dlc3Qgc2NoZWRfZG9tYWluIGNvbnRhaW5pbmcgZmxhZy4KKyAqIEBjcHU6CVRoZSBjcHUgd2hvc2UgbG93ZXN0IGxldmVsIG9mIHNjaGVkIGRvbWFpbiBpcyB0bworICoJCWJlIHJldHVybmVkLgorICogQGZsYWc6CVRoZSBmbGFnIHRvIGNoZWNrIGZvciB0aGUgbG93ZXN0IHNjaGVkX2RvbWFpbgorICoJCWZvciB0aGUgZ2l2ZW4gY3B1LgorICoKKyAqIFJldHVybnMgdGhlIGxvd2VzdCBzY2hlZF9kb21haW4gb2YgYSBjcHUgd2hpY2ggY29udGFpbnMgdGhlIGdpdmVuIGZsYWcuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNjaGVkX2RvbWFpbiAqbG93ZXN0X2ZsYWdfZG9tYWluKGludCBjcHUsIGludCBmbGFnKQoreworCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOworCisJZm9yX2VhY2hfZG9tYWluKGNwdSwgc2QpCisJCWlmIChzZCAmJiAoc2QtPmZsYWdzICYgZmxhZykpCisJCQlicmVhazsKKworCXJldHVybiBzZDsKK30KKworLyoqCisgKiBmb3JfZWFjaF9mbGFnX2RvbWFpbiAtIEl0ZXJhdGVzIG92ZXIgc2NoZWRfZG9tYWlucyBjb250YWluaW5nIHRoZSBmbGFnLgorICogQGNwdToJVGhlIGNwdSB3aG9zZSBkb21haW5zIHdlJ3JlIGl0ZXJhdGluZyBvdmVyLgorICogQHNkOgkJdmFyaWFibGUgaG9sZGluZyB0aGUgdmFsdWUgb2YgdGhlIHBvd2VyX3NhdmluZ3Nfc2QKKyAqCQlmb3IgY3B1LgorICogQGZsYWc6CVRoZSBmbGFnIHRvIGZpbHRlciB0aGUgc2NoZWRfZG9tYWlucyB0byBiZSBpdGVyYXRlZC4KKyAqCisgKiBJdGVyYXRlcyBvdmVyIGFsbCB0aGUgc2NoZWR1bGVyIGRvbWFpbnMgZm9yIGEgZ2l2ZW4gY3B1IHRoYXQgaGFzIHRoZSAnZmxhZycKKyAqIHNldCwgc3RhcnRpbmcgZnJvbSB0aGUgbG93ZXN0IHNjaGVkX2RvbWFpbiB0byB0aGUgaGlnaGVzdC4KKyAqLworI2RlZmluZSBmb3JfZWFjaF9mbGFnX2RvbWFpbihjcHUsIHNkLCBmbGFnKSBcCisJZm9yIChzZCA9IGxvd2VzdF9mbGFnX2RvbWFpbihjcHUsIGZsYWcpOyBcCisJCShzZCAmJiAoc2QtPmZsYWdzICYgZmxhZykpOyBzZCA9IHNkLT5wYXJlbnQpCisKKy8qKgorICogaXNfc2VtaV9pZGxlX2dyb3VwIC0gQ2hlY2tzIGlmIHRoZSBnaXZlbiBzY2hlZF9ncm91cCBpcyBzZW1pLWlkbGUuCisgKiBAaWxiX2dyb3VwOglncm91cCB0byBiZSBjaGVja2VkIGZvciBzZW1pLWlkbGVuZXNzCisgKgorICogUmV0dXJuczoJMSBpZiB0aGUgZ3JvdXAgaXMgc2VtaS1pZGxlLiAwIG90aGVyd2lzZS4KKyAqCisgKiBXZSBkZWZpbmUgYSBzY2hlZF9ncm91cCB0byBiZSBzZW1pIGlkbGUgaWYgaXQgaGFzIGF0bGVhc3Qgb25lIGlkbGUtQ1BVCisgKiBhbmQgYXRsZWFzdCBvbmUgbm9uLWlkbGUgQ1BVLiBUaGlzIGhlbHBlciBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGdpdmVuCisgKiBzY2hlZF9ncm91cCBpcyBzZW1pLWlkbGUgb3Igbm90LgorICovCitzdGF0aWMgaW5saW5lIGludCBpc19zZW1pX2lkbGVfZ3JvdXAoc3RydWN0IHNjaGVkX2dyb3VwICppbGJfZ3JvdXApCit7CisJY3B1bWFza19hbmQobm9oei5pbGJfZ3JwX25vaHpfbWFzaywgbm9oei5jcHVfbWFzaywKKwkJCQkJc2NoZWRfZ3JvdXBfY3B1cyhpbGJfZ3JvdXApKTsKKworCS8qCisJICogQSBzY2hlZF9ncm91cCBpcyBzZW1pLWlkbGUgd2hlbiBpdCBoYXMgYXRsZWFzdCBvbmUgYnVzeSBjcHUKKwkgKiBhbmQgYXRsZWFzdCBvbmUgaWRsZSBjcHUuCisJICovCisJaWYgKGNwdW1hc2tfZW1wdHkobm9oei5pbGJfZ3JwX25vaHpfbWFzaykpCisJCXJldHVybiAwOworCisJaWYgKGNwdW1hc2tfZXF1YWwobm9oei5pbGJfZ3JwX25vaHpfbWFzaywgc2NoZWRfZ3JvdXBfY3B1cyhpbGJfZ3JvdXApKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKy8qKgorICogZmluZF9uZXdfaWxiIC0gRmluZHMgdGhlIG9wdGltdW0gaWRsZSBsb2FkIGJhbGFuY2VyIGZvciBub21pbmF0aW9uLgorICogQGNwdToJVGhlIGNwdSB3aGljaCBpcyBub21pbmF0aW5nIGEgbmV3IGlkbGVfbG9hZF9iYWxhbmNlci4KKyAqCisgKiBSZXR1cm5zOglSZXR1cm5zIHRoZSBpZCBvZiB0aGUgaWRsZSBsb2FkIGJhbGFuY2VyIGlmIGl0IGV4aXN0cywKKyAqCQlFbHNlLCByZXR1cm5zID49IG5yX2NwdV9pZHMuCisgKgorICogVGhpcyBhbGdvcml0aG0gcGlja3MgdGhlIGlkbGUgbG9hZCBiYWxhbmNlciBzdWNoIHRoYXQgaXQgYmVsb25ncyB0byBhCisgKiBzZW1pLWlkbGUgcG93ZXJzYXZpbmdzIHNjaGVkX2RvbWFpbi4gVGhlIGlkZWEgaXMgdG8gdHJ5IGFuZCBhdm9pZAorICogY29tcGxldGVseSBpZGxlIHBhY2thZ2VzL2NvcmVzIGp1c3QgZm9yIHRoZSBwdXJwb3NlIG9mIGlkbGUgbG9hZCBiYWxhbmNpbmcKKyAqIHdoZW4gdGhlcmUgYXJlIG90aGVyIGlkbGUgY3B1J3Mgd2hpY2ggYXJlIGJldHRlciBzdWl0ZWQgZm9yIHRoYXQgam9iLgorICovCitzdGF0aWMgaW50IGZpbmRfbmV3X2lsYihpbnQgY3B1KQoreworCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOworCXN0cnVjdCBzY2hlZF9ncm91cCAqaWxiX2dyb3VwOworCisJLyoKKwkgKiBIYXZlIGlkbGUgbG9hZCBiYWxhbmNlciBzZWxlY3Rpb24gZnJvbSBzZW1pLWlkbGUgcGFja2FnZXMgb25seQorCSAqIHdoZW4gcG93ZXItYXdhcmUgbG9hZCBiYWxhbmNpbmcgaXMgZW5hYmxlZAorCSAqLworCWlmICghKHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzIHx8IHNjaGVkX21jX3Bvd2VyX3NhdmluZ3MpKQorCQlnb3RvIG91dF9kb25lOworCisJLyoKKwkgKiBPcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugd2hlbiB3ZSBoYXZlIG5vIGlkbGUgQ1BVcyBvciBvbmx5IG9uZQorCSAqIGlkbGUgQ1BVLiBEb24ndCB3YWxrIHRoZSBzY2hlZF9kb21haW4gaGllcmFyY2h5IGluIHN1Y2ggY2FzZXMKKwkgKi8KKwlpZiAoY3B1bWFza193ZWlnaHQobm9oei5jcHVfbWFzaykgPCAyKQorCQlnb3RvIG91dF9kb25lOworCisJZm9yX2VhY2hfZmxhZ19kb21haW4oY3B1LCBzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpIHsKKwkJaWxiX2dyb3VwID0gc2QtPmdyb3VwczsKKworCQlkbyB7CisJCQlpZiAoaXNfc2VtaV9pZGxlX2dyb3VwKGlsYl9ncm91cCkpCisJCQkJcmV0dXJuIGNwdW1hc2tfZmlyc3Qobm9oei5pbGJfZ3JwX25vaHpfbWFzayk7CisKKwkJCWlsYl9ncm91cCA9IGlsYl9ncm91cC0+bmV4dDsKKworCQl9IHdoaWxlIChpbGJfZ3JvdXAgIT0gc2QtPmdyb3Vwcyk7CisJfQorCitvdXRfZG9uZToKKwlyZXR1cm4gY3B1bWFza19maXJzdChub2h6LmNwdV9tYXNrKTsKK30KKyNlbHNlIC8qICAoQ09ORklHX1NDSEVEX01DIHx8IENPTkZJR19TQ0hFRF9TTVQpICovCitzdGF0aWMgaW5saW5lIGludCBmaW5kX25ld19pbGIoaW50IGNhbGxfY3B1KQoreworCXJldHVybiBjcHVtYXNrX2ZpcnN0KG5vaHouY3B1X21hc2spOworfQorI2VuZGlmCisKKy8qCisgKiBUaGlzIHJvdXRpbmUgd2lsbCB0cnkgdG8gbm9taW5hdGUgdGhlIGlsYiAoaWRsZSBsb2FkIGJhbGFuY2luZykKKyAqIG93bmVyIGFtb25nIHRoZSBjcHVzIHdob3NlIHRpY2tzIGFyZSBzdG9wcGVkLiBpbGIgb3duZXIgd2lsbCBkbyB0aGUgaWRsZQorICogbG9hZCBiYWxhbmNpbmcgb24gYmVoYWxmIG9mIGFsbCB0aG9zZSBjcHVzLiBJZiBhbGwgdGhlIGNwdXMgaW4gdGhlIHN5c3RlbQorICogZ28gaW50byB0aGlzIHRpY2tsZXNzIG1vZGUsIHRoZW4gdGhlcmUgd2lsbCBiZSBubyBpbGIgb3duZXIgKGFzIHRoZXJlIGlzCisgKiBubyBuZWVkIGZvciBvbmUpIGFuZCBhbGwgdGhlIGNwdXMgd2lsbCBzbGVlcCB0aWxsIHRoZSBuZXh0IHdha2V1cCBldmVudAorICogYXJyaXZlcy4uLgorICoKKyAqIEZvciB0aGUgaWxiIG93bmVyLCB0aWNrIGlzIG5vdCBzdG9wcGVkLiBBbmQgdGhpcyB0aWNrIHdpbGwgYmUgdXNlZAorICogZm9yIGlkbGUgbG9hZCBiYWxhbmNpbmcuIGlsYiBvd25lciB3aWxsIHN0aWxsIGJlIHBhcnQgb2YKKyAqIG5vaHouY3B1X21hc2suLgorICoKKyAqIFdoaWxlIHN0b3BwaW5nIHRoZSB0aWNrLCB0aGlzIGNwdSB3aWxsIGJlY29tZSB0aGUgaWxiIG93bmVyIGlmIHRoZXJlCisgKiBpcyBubyBvdGhlciBvd25lci4gQW5kIHdpbGwgYmUgdGhlIG93bmVyIHRpbGwgdGhhdCBjcHUgYmVjb21lcyBidXN5CisgKiBvciBpZiBhbGwgY3B1cyBpbiB0aGUgc3lzdGVtIHN0b3AgdGhlaXIgdGlja3MgYXQgd2hpY2ggcG9pbnQKKyAqIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGlsYiBvd25lci4KKyAqCisgKiBXaGVuIHRoZSBpbGIgb3duZXIgYmVjb21lcyBidXN5LCBpdCBub21pbmF0ZXMgYW5vdGhlciBvd25lciwgZHVyaW5nIHRoZQorICogbmV4dCBidXN5IHNjaGVkdWxlcl90aWNrKCkKKyAqLworaW50IHNlbGVjdF9ub2h6X2xvYWRfYmFsYW5jZXIoaW50IHN0b3BfdGljaykKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKHN0b3BfdGljaykgeworCQljcHVfcnEoY3B1KS0+aW5fbm9oel9yZWNlbnRseSA9IDE7CisKKwkJaWYgKCFjcHVfYWN0aXZlKGNwdSkpIHsKKwkJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSAhPSBjcHUpCisJCQkJcmV0dXJuIDA7CisKKwkJCS8qCisJCQkgKiBJZiB3ZSBhcmUgZ29pbmcgb2ZmbGluZSBhbmQgc3RpbGwgdGhlIGxlYWRlciwKKwkJCSAqIGdpdmUgdXAhCisJCQkgKi8KKwkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCBjcHUsIC0xKSAhPSBjcHUpCisJCQkJQlVHKCk7CisKKwkJCXJldHVybiAwOworCQl9CisKKwkJY3B1bWFza19zZXRfY3B1KGNwdSwgbm9oei5jcHVfbWFzayk7CisKKwkJLyogdGltZSBmb3IgaWxiIG93bmVyIGFsc28gdG8gc2xlZXAgKi8KKwkJaWYgKGNwdW1hc2tfd2VpZ2h0KG5vaHouY3B1X21hc2spID09IG51bV9hY3RpdmVfY3B1cygpKSB7CisJCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1KQorCQkJCWF0b21pY19zZXQoJm5vaHoubG9hZF9iYWxhbmNlciwgLTEpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gLTEpIHsKKwkJCS8qIG1ha2UgbWUgdGhlIGlsYiBvd25lciAqLworCQkJaWYgKGF0b21pY19jbXB4Y2hnKCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xLCBjcHUpID09IC0xKQorCQkJCXJldHVybiAxOworCQl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkgeworCQkJaW50IG5ld19pbGI7CisKKwkJCWlmICghKHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzIHx8CisJCQkJCQlzY2hlZF9tY19wb3dlcl9zYXZpbmdzKSkKKwkJCQlyZXR1cm4gMTsKKwkJCS8qCisJCQkgKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBtb3JlIHBvd2VyLWVmZmljaWVudAorCQkJICogaWxiLgorCQkJICovCisJCQluZXdfaWxiID0gZmluZF9uZXdfaWxiKGNwdSk7CisJCQlpZiAobmV3X2lsYiA8IG5yX2NwdV9pZHMgJiYgbmV3X2lsYiAhPSBjcHUpIHsKKwkJCQlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xKTsKKwkJCQlyZXNjaGVkX2NwdShuZXdfaWxiKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXJldHVybiAxOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbm9oei5jcHVfbWFzaykpCisJCQlyZXR1cm4gMDsKKworCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG5vaHouY3B1X21hc2spOworCisJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpCisJCQlpZiAoYXRvbWljX2NtcHhjaGcoJm5vaHoubG9hZF9iYWxhbmNlciwgY3B1LCAtMSkgIT0gY3B1KQorCQkJCUJVRygpOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJhbGFuY2luZyk7CisKKy8qCisgKiBJdCBjaGVja3MgZWFjaCBzY2hlZHVsaW5nIGRvbWFpbiB0byBzZWUgaWYgaXQgaXMgZHVlIHRvIGJlIGJhbGFuY2VkLAorICogYW5kIGluaXRpYXRlcyBhIGJhbGFuY2luZyBvcGVyYXRpb24gaWYgc28uCisgKgorICogQmFsYW5jaW5nIHBhcmFtZXRlcnMgYXJlIHNldCB1cCBpbiBhcmNoX2luaXRfc2NoZWRfZG9tYWlucy4KKyAqLworc3RhdGljIHZvaWQgcmViYWxhbmNlX2RvbWFpbnMoaW50IGNwdSwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCit7CisJaW50IGJhbGFuY2UgPSAxOworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKKwl1bnNpZ25lZCBsb25nIGludGVydmFsOworCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOworCS8qIEVhcmxpZXN0IHRpbWUgd2hlbiB3ZSBoYXZlIHRvIGRvIHJlYmFsYW5jZSBhZ2FpbiAqLworCXVuc2lnbmVkIGxvbmcgbmV4dF9iYWxhbmNlID0gamlmZmllcyArIDYwKkhaOworCWludCB1cGRhdGVfbmV4dF9iYWxhbmNlID0gMDsKKwlpbnQgbmVlZF9zZXJpYWxpemU7CisKKwlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkgeworCQlpZiAoIShzZC0+ZmxhZ3MgJiBTRF9MT0FEX0JBTEFOQ0UpKQorCQkJY29udGludWU7CisKKwkJaW50ZXJ2YWwgPSBzZC0+YmFsYW5jZV9pbnRlcnZhbDsKKwkJaWYgKGlkbGUgIT0gQ1BVX0lETEUpCisJCQlpbnRlcnZhbCAqPSBzZC0+YnVzeV9mYWN0b3I7CisKKwkJLyogc2NhbGUgbXMgdG8gamlmZmllcyAqLworCQlpbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMoaW50ZXJ2YWwpOworCQlpZiAodW5saWtlbHkoIWludGVydmFsKSkKKwkJCWludGVydmFsID0gMTsKKwkJaWYgKGludGVydmFsID4gSFoqTlJfQ1BVUy8xMCkKKwkJCWludGVydmFsID0gSFoqTlJfQ1BVUy8xMDsKKworCQluZWVkX3NlcmlhbGl6ZSA9IHNkLT5mbGFncyAmIFNEX1NFUklBTElaRTsKKworCQlpZiAobmVlZF9zZXJpYWxpemUpIHsKKwkJCWlmICghc3Bpbl90cnlsb2NrKCZiYWxhbmNpbmcpKQorCQkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsKSkgeworCQkJaWYgKGxvYWRfYmFsYW5jZShjcHUsIHJxLCBzZCwgaWRsZSwgJmJhbGFuY2UpKSB7CisJCQkJLyoKKwkJCQkgKiBXZSd2ZSBwdWxsZWQgdGFza3Mgb3ZlciBzbyBlaXRoZXIgd2UncmUgbm8KKwkJCQkgKiBsb25nZXIgaWRsZSwgb3Igb25lIG9mIG91ciBTTVQgc2libGluZ3MgaXMKKwkJCQkgKiBub3QgaWRsZS4KKwkJCQkgKi8KKwkJCQlpZGxlID0gQ1BVX05PVF9JRExFOworCQkJfQorCQkJc2QtPmxhc3RfYmFsYW5jZSA9IGppZmZpZXM7CisJCX0KKwkJaWYgKG5lZWRfc2VyaWFsaXplKQorCQkJc3Bpbl91bmxvY2soJmJhbGFuY2luZyk7CitvdXQ6CisJCWlmICh0aW1lX2FmdGVyKG5leHRfYmFsYW5jZSwgc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsKSkgeworCQkJbmV4dF9iYWxhbmNlID0gc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsOworCQkJdXBkYXRlX25leHRfYmFsYW5jZSA9IDE7CisJCX0KKworCQkvKgorCQkgKiBTdG9wIHRoZSBsb2FkIGJhbGFuY2UgYXQgdGhpcyBsZXZlbC4gVGhlcmUgaXMgYW5vdGhlcgorCQkgKiBDUFUgaW4gb3VyIHNjaGVkIGdyb3VwIHdoaWNoIGlzIGRvaW5nIGxvYWQgYmFsYW5jaW5nIG1vcmUKKwkJICogYWN0aXZlbHkuCisJCSAqLworCQlpZiAoIWJhbGFuY2UpCisJCQlicmVhazsKKwl9CisKKwkvKgorCSAqIG5leHRfYmFsYW5jZSB3aWxsIGJlIHVwZGF0ZWQgb25seSB3aGVuIHRoZXJlIGlzIGEgbmVlZC4KKwkgKiBXaGVuIHRoZSBjcHUgaXMgYXR0YWNoZWQgdG8gbnVsbCBkb21haW4gZm9yIGV4LCBpdCB3aWxsIG5vdCBiZQorCSAqIHVwZGF0ZWQuCisJICovCisJaWYgKGxpa2VseSh1cGRhdGVfbmV4dF9iYWxhbmNlKSkKKwkJcnEtPm5leHRfYmFsYW5jZSA9IG5leHRfYmFsYW5jZTsKK30KKworLyoKKyAqIHJ1bl9yZWJhbGFuY2VfZG9tYWlucyBpcyB0cmlnZ2VyZWQgd2hlbiBuZWVkZWQgZnJvbSB0aGUgc2NoZWR1bGVyIHRpY2suCisgKiBJbiBDT05GSUdfTk9fSFogY2FzZSwgdGhlIGlkbGUgbG9hZCBiYWxhbmNlIG93bmVyIHdpbGwgZG8gdGhlCisgKiByZWJhbGFuY2luZyBmb3IgYWxsIHRoZSBjcHVzIGZvciB3aG9tIHNjaGVkdWxlciB0aWNrcyBhcmUgc3RvcHBlZC4KKyAqLworc3RhdGljIHZvaWQgcnVuX3JlYmFsYW5jZV9kb21haW5zKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqaCkKK3sKKwlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IHJxICp0aGlzX3JxID0gY3B1X3JxKHRoaXNfY3B1KTsKKwllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSA9IHRoaXNfcnEtPmlkbGVfYXRfdGljayA/CisJCQkJCQlDUFVfSURMRSA6IENQVV9OT1RfSURMRTsKKworCXJlYmFsYW5jZV9kb21haW5zKHRoaXNfY3B1LCBpZGxlKTsKKworI2lmZGVmIENPTkZJR19OT19IWgorCS8qCisJICogSWYgdGhpcyBjcHUgaXMgdGhlIG93bmVyIGZvciBpZGxlIGxvYWQgYmFsYW5jaW5nLCB0aGVuIGRvIHRoZQorCSAqIGJhbGFuY2luZyBvbiBiZWhhbGYgb2YgdGhlIG90aGVyIGlkbGUgY3B1cyB3aG9zZSB0aWNrcyBhcmUKKwkgKiBzdG9wcGVkLgorCSAqLworCWlmICh0aGlzX3JxLT5pZGxlX2F0X3RpY2sgJiYKKwkgICAgYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gdGhpc19jcHUpIHsKKwkJc3RydWN0IHJxICpycTsKKwkJaW50IGJhbGFuY2VfY3B1OworCisJCWZvcl9lYWNoX2NwdShiYWxhbmNlX2NwdSwgbm9oei5jcHVfbWFzaykgeworCQkJaWYgKGJhbGFuY2VfY3B1ID09IHRoaXNfY3B1KQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogSWYgdGhpcyBjcHUgZ2V0cyB3b3JrIHRvIGRvLCBzdG9wIHRoZSBsb2FkIGJhbGFuY2luZworCQkJICogd29yayBiZWluZyBkb25lIGZvciBvdGhlciBjcHVzLiBOZXh0IGxvYWQKKwkJCSAqIGJhbGFuY2luZyBvd25lciB3aWxsIHBpY2sgaXQgdXAuCisJCQkgKi8KKwkJCWlmIChuZWVkX3Jlc2NoZWQoKSkKKwkJCQlicmVhazsKKworCQkJcmViYWxhbmNlX2RvbWFpbnMoYmFsYW5jZV9jcHUsIENQVV9JRExFKTsKKworCQkJcnEgPSBjcHVfcnEoYmFsYW5jZV9jcHUpOworCQkJaWYgKHRpbWVfYWZ0ZXIodGhpc19ycS0+bmV4dF9iYWxhbmNlLCBycS0+bmV4dF9iYWxhbmNlKSkKKwkJCQl0aGlzX3JxLT5uZXh0X2JhbGFuY2UgPSBycS0+bmV4dF9iYWxhbmNlOworCQl9CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9uX251bGxfZG9tYWluKGludCBjcHUpCit7CisJcmV0dXJuICFyY3VfZGVyZWZlcmVuY2UoY3B1X3JxKGNwdSktPnNkKTsKK30KKworLyoKKyAqIFRyaWdnZXIgdGhlIFNDSEVEX1NPRlRJUlEgaWYgaXQgaXMgdGltZSB0byBkbyBwZXJpb2RpYyBsb2FkIGJhbGFuY2luZy4KKyAqCisgKiBJbiBjYXNlIG9mIENPTkZJR19OT19IWiwgdGhpcyBpcyB0aGUgcGxhY2Ugd2hlcmUgd2Ugbm9taW5hdGUgYSBuZXcKKyAqIGlkbGUgbG9hZCBiYWxhbmNpbmcgb3duZXIgb3IgZGVjaWRlIHRvIHN0b3AgdGhlIHBlcmlvZGljIGxvYWQgYmFsYW5jaW5nLAorICogaWYgdGhlIHdob2xlIHN5c3RlbSBpcyBpZGxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdHJpZ2dlcl9sb2FkX2JhbGFuY2Uoc3RydWN0IHJxICpycSwgaW50IGNwdSkKK3sKKyNpZmRlZiBDT05GSUdfTk9fSFoKKwkvKgorCSAqIElmIHdlIHdlcmUgaW4gdGhlIG5vaHogbW9kZSByZWNlbnRseSBhbmQgYnVzeSBhdCB0aGUgY3VycmVudAorCSAqIHNjaGVkdWxlciB0aWNrLCB0aGVuIGNoZWNrIGlmIHdlIG5lZWQgdG8gbm9taW5hdGUgbmV3IGlkbGUKKwkgKiBsb2FkIGJhbGFuY2VyLgorCSAqLworCWlmIChycS0+aW5fbm9oel9yZWNlbnRseSAmJiAhcnEtPmlkbGVfYXRfdGljaykgeworCQlycS0+aW5fbm9oel9yZWNlbnRseSA9IDA7CisKKwkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkgeworCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKTsKKwkJCWF0b21pY19zZXQoJm5vaHoubG9hZF9iYWxhbmNlciwgLTEpOworCQl9CisKKwkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IC0xKSB7CisJCQlpbnQgaWxiID0gZmluZF9uZXdfaWxiKGNwdSk7CisKKwkJCWlmIChpbGIgPCBucl9jcHVfaWRzKQorCQkJCXJlc2NoZWRfY3B1KGlsYik7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHRoaXMgY3B1IGlzIGlkbGUgYW5kIGRvaW5nIGlkbGUgbG9hZCBiYWxhbmNpbmcgZm9yIGFsbCB0aGUKKwkgKiBjcHVzIHdpdGggdGlja3Mgc3RvcHBlZCwgaXMgaXQgdGltZSBmb3IgdGhhdCB0byBzdG9wPworCSAqLworCWlmIChycS0+aWRsZV9hdF90aWNrICYmIGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSAmJgorCSAgICBjcHVtYXNrX3dlaWdodChub2h6LmNwdV9tYXNrKSA9PSBudW1fb25saW5lX2NwdXMoKSkgeworCQlyZXNjaGVkX2NwdShjcHUpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiB0aGlzIGNwdSBpcyBpZGxlIGFuZCB0aGUgaWRsZSBsb2FkIGJhbGFuY2luZyBpcyBkb25lIGJ5CisJICogc29tZW9uZSBlbHNlLCB0aGVuIG5vIG5lZWQgcmFpc2UgdGhlIFNDSEVEX1NPRlRJUlEKKwkgKi8KKwlpZiAocnEtPmlkbGVfYXRfdGljayAmJiBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSAhPSBjcHUgJiYKKwkgICAgY3B1bWFza190ZXN0X2NwdShjcHUsIG5vaHouY3B1X21hc2spKQorCQlyZXR1cm47CisjZW5kaWYKKwkvKiBEb24ndCBuZWVkIHRvIHJlYmFsYW5jZSB3aGlsZSBhdHRhY2hlZCB0byBOVUxMIGRvbWFpbiAqLworCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHJxLT5uZXh0X2JhbGFuY2UpICYmCisJICAgIGxpa2VseSghb25fbnVsbF9kb21haW4oY3B1KSkpCisJCXJhaXNlX3NvZnRpcnEoU0NIRURfU09GVElSUSk7Cit9CiAKIHN0YXRpYyB2b2lkIHJxX29ubGluZV9mYWlyKHN0cnVjdCBycSAqcnEpCiB7CkBAIC0xOTYyLDYgKzM1NDQsMTUgQEAKIAl1cGRhdGVfc3lzY3RsKCk7CiB9CiAKKyNlbHNlCS8qIENPTkZJR19TTVAgKi8KKworLyoKKyAqIG9uIFVQIHdlIGRvIG5vdCBuZWVkIHRvIGJhbGFuY2UgYmV0d2VlbiBDUFVzOgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaWRsZV9iYWxhbmNlKGludCBjcHUsIHN0cnVjdCBycSAqcnEpCit7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIC8qCkBAIC0yMDc2LDcgKzM2NjcsNyBAQAogfQogI2VuZGlmCiAKLXVuc2lnbmVkIGludCBnZXRfcnJfaW50ZXJ2YWxfZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9ycl9pbnRlcnZhbF9mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9ICZ0YXNrLT5zZTsKIAl1bnNpZ25lZCBpbnQgcnJfaW50ZXJ2YWwgPSAwOwpAQCAtMjEwOCw4ICszNjk5LDYgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJLnNlbGVjdF90YXNrX3JxCQk9IHNlbGVjdF90YXNrX3JxX2ZhaXIsCiAKLQkubG9hZF9iYWxhbmNlCQk9IGxvYWRfYmFsYW5jZV9mYWlyLAotCS5tb3ZlX29uZV90YXNrCQk9IG1vdmVfb25lX3Rhc2tfZmFpciwKIAkucnFfb25saW5lCQk9IHJxX29ubGluZV9mYWlyLAogCS5ycV9vZmZsaW5lCQk9IHJxX29mZmxpbmVfZmFpciwKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2lkbGV0YXNrLmMgYi9rZXJuZWwvc2NoZWRfaWRsZXRhc2suYwppbmRleCA1ZjkzYjU3Li5hOGE2ZDhhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfaWRsZXRhc2suYworKysgYi9rZXJuZWwvc2NoZWRfaWRsZXRhc2suYwpAQCAtNDQsMjQgKzQ0LDYgQEAKIHsKIH0KIAotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB1bnNpZ25lZCBsb25nCi1sb2FkX2JhbGFuY2VfaWRsZShzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCQkgIHVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwKLQkJICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCSAgaW50ICphbGxfcGlubmVkLCBpbnQgKnRoaXNfYmVzdF9wcmlvKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1tb3ZlX29uZV90YXNrX2lkbGUoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJICAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIHRhc2tfdGlja19pZGxlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwgaW50IHF1ZXVlZCkKIHsKIH0KQEAgLTk3LDcgKzc5LDcgQEAKIAkJY2hlY2tfcHJlZW1wdF9jdXJyKHJxLCBwLCAwKTsKIH0KIAotdW5zaWduZWQgaW50IGdldF9ycl9pbnRlcnZhbF9pZGxlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3JyX2ludGVydmFsX2lkbGUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCXJldHVybiAwOwogfQpAQCAtMTE5LDkgKzEwMSw2IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAJLnNlbGVjdF90YXNrX3JxCQk9IHNlbGVjdF90YXNrX3JxX2lkbGUsCi0KLQkubG9hZF9iYWxhbmNlCQk9IGxvYWRfYmFsYW5jZV9pZGxlLAotCS5tb3ZlX29uZV90YXNrCQk9IG1vdmVfb25lX3Rhc2tfaWRsZSwKICNlbmRpZgogCiAJLnNldF9jdXJyX3Rhc2sgICAgICAgICAgPSBzZXRfY3Vycl90YXNrX2lkbGUsCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfcnQuYyBiL2tlcm5lbC9zY2hlZF9ydC5jCmluZGV4IGY0ODMyOGEuLmJmM2UzOGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZF9ydC5jCkBAIC0xOTQsMTcgKzE5NCwyMCBAQAogCXJldHVybiBydF9zZS0+bXlfcTsKIH0KIAotc3RhdGljIHZvaWQgZW5xdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpOworc3RhdGljIHZvaWQgZW5xdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIGJvb2wgaGVhZCk7CiBzdGF0aWMgdm9pZCBkZXF1ZXVlX3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSk7CiAKIHN0YXRpYyB2b2lkIHNjaGVkX3J0X3JxX2VucXVldWUoc3RydWN0IHJ0X3JxICpydF9ycSkKIHsKKwlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gcnFfb2ZfcnRfcnEocnRfcnEpLT5jdXJyOwotCXN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlID0gcnRfcnEtPnJ0X3NlOworCXN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlOworCisJcnRfc2UgPSBydF9ycS0+dGctPnJ0X3NlW3RoaXNfY3B1XTsKIAogCWlmIChydF9ycS0+cnRfbnJfcnVubmluZykgewogCQlpZiAocnRfc2UgJiYgIW9uX3J0X3JxKHJ0X3NlKSkKLQkJCWVucXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKKwkJCWVucXVldWVfcnRfZW50aXR5KHJ0X3NlLCBmYWxzZSk7CiAJCWlmIChydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIgPCBjdXJyLT5wcmlvKQogCQkJcmVzY2hlZF90YXNrKGN1cnIpOwogCX0KQEAgLTIxMiw3ICsyMTUsMTAgQEAKIAogc3RhdGljIHZvaWQgc2NoZWRfcnRfcnFfZGVxdWV1ZShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQogewotCXN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlID0gcnRfcnEtPnJ0X3NlOworCWludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZTsKKworCXJ0X3NlID0gcnRfcnEtPnRnLT5ydF9zZVt0aGlzX2NwdV07CiAKIAlpZiAocnRfc2UgJiYgb25fcnRfcnEocnRfc2UpKQogCQlkZXF1ZXVlX3J0X2VudGl0eShydF9zZSk7CkBAIC04MDMsNyArODA5LDcgQEAKIAlkZWNfcnRfZ3JvdXAocnRfc2UsIHJ0X3JxKTsKIH0KIAotc3RhdGljIHZvaWQgX19lbnF1ZXVlX3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3N0YXRpYyB2b2lkIF9fZW5xdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIGJvb2wgaGVhZCkKIHsKIAlzdHJ1Y3QgcnRfcnEgKnJ0X3JxID0gcnRfcnFfb2Zfc2UocnRfc2UpOwogCXN0cnVjdCBydF9wcmlvX2FycmF5ICphcnJheSA9ICZydF9ycS0+YWN0aXZlOwpAQCAtODE5LDcgKzgyNSwxMCBAQAogCWlmIChncm91cF9ycSAmJiAocnRfcnFfdGhyb3R0bGVkKGdyb3VwX3JxKSB8fCAhZ3JvdXBfcnEtPnJ0X25yX3J1bm5pbmcpKQogCQlyZXR1cm47CiAKLQlsaXN0X2FkZF90YWlsKCZydF9zZS0+cnVuX2xpc3QsIHF1ZXVlKTsKKwlpZiAoaGVhZCkKKwkJbGlzdF9hZGQoJnJ0X3NlLT5ydW5fbGlzdCwgcXVldWUpOworCWVsc2UKKwkJbGlzdF9hZGRfdGFpbCgmcnRfc2UtPnJ1bl9saXN0LCBxdWV1ZSk7CiAJX19zZXRfYml0KHJ0X3NlX3ByaW8ocnRfc2UpLCBhcnJheS0+Yml0bWFwKTsKIAogCWluY19ydF90YXNrcyhydF9zZSwgcnRfcnEpOwpAQCAtODU2LDExICs4NjUsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGVucXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQorc3RhdGljIHZvaWQgZW5xdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIGJvb2wgaGVhZCkKIHsKIAlkZXF1ZXVlX3J0X3N0YWNrKHJ0X3NlKTsKIAlmb3JfZWFjaF9zY2hlZF9ydF9lbnRpdHkocnRfc2UpCi0JCV9fZW5xdWV1ZV9ydF9lbnRpdHkocnRfc2UpOworCQlfX2VucXVldWVfcnRfZW50aXR5KHJ0X3NlLCBoZWFkKTsKIH0KIAogc3RhdGljIHZvaWQgZGVxdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCkBAIC04NzEsMjEgKzg4MCwyMiBAQAogCQlzdHJ1Y3QgcnRfcnEgKnJ0X3JxID0gZ3JvdXBfcnRfcnEocnRfc2UpOwogCiAJCWlmIChydF9ycSAmJiBydF9ycS0+cnRfbnJfcnVubmluZykKLQkJCV9fZW5xdWV1ZV9ydF9lbnRpdHkocnRfc2UpOworCQkJX19lbnF1ZXVlX3J0X2VudGl0eShydF9zZSwgZmFsc2UpOwogCX0KIH0KIAogLyoKICAqIEFkZGluZy9yZW1vdmluZyBhIHRhc2sgdG8vZnJvbSBhIHByaW9yaXR5IGFycmF5OgogICovCi1zdGF0aWMgdm9pZCBlbnF1ZXVlX3Rhc2tfcnQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwKQorc3RhdGljIHZvaWQKK2VucXVldWVfdGFza19ydChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXAsIGJvb2wgaGVhZCkKIHsKIAlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSA9ICZwLT5ydDsKIAogCWlmICh3YWtldXApCiAJCXJ0X3NlLT50aW1lb3V0ID0gMDsKIAotCWVucXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKKwllbnF1ZXVlX3J0X2VudGl0eShydF9zZSwgaGVhZCk7CiAKIAlpZiAoIXRhc2tfY3VycmVudChycSwgcCkgJiYgcC0+cnQubnJfY3B1c19hbGxvd2VkID4gMSkKIAkJZW5xdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKQEAgLTE0ODEsMjQgKzE0OTEsNiBAQAogCQlwdXNoX3J0X3Rhc2tzKHJxKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWxvYWRfYmFsYW5jZV9ydChzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCQl1bnNpZ25lZCBsb25nIG1heF9sb2FkX21vdmUsCi0JCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJaW50ICphbGxfcGlubmVkLCBpbnQgKnRoaXNfYmVzdF9wcmlvKQotewotCS8qIGRvbid0IHRvdWNoIFJUIHRhc2tzICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW1vdmVfb25lX3Rhc2tfcnQoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKLXsKLQkvKiBkb24ndCB0b3VjaCBSVCB0YXNrcyAqLwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBzZXRfY3B1c19hbGxvd2VkX3J0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hc2spCiB7CkBAIC0xNzIxLDcgKzE3MTMsNyBAQAogCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CiB9CiAKLXVuc2lnbmVkIGludCBnZXRfcnJfaW50ZXJ2YWxfcnQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQorc3RhdGljIHVuc2lnbmVkIGludCBnZXRfcnJfaW50ZXJ2YWxfcnQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCS8qCiAJICogVGltZSBzbGljZSBpcyAwIGZvciBTQ0hFRF9GSUZPIHRhc2tzCkBAIC0xNzQ2LDggKzE3MzgsNiBAQAogI2lmZGVmIENPTkZJR19TTVAKIAkuc2VsZWN0X3Rhc2tfcnEJCT0gc2VsZWN0X3Rhc2tfcnFfcnQsCiAKLQkubG9hZF9iYWxhbmNlCQk9IGxvYWRfYmFsYW5jZV9ydCwKLQkubW92ZV9vbmVfdGFzawkJPSBtb3ZlX29uZV90YXNrX3J0LAogCS5zZXRfY3B1c19hbGxvd2VkICAgICAgID0gc2V0X2NwdXNfYWxsb3dlZF9ydCwKIAkucnFfb25saW5lICAgICAgICAgICAgICA9IHJxX29ubGluZV9ydCwKIAkucnFfb2ZmbGluZSAgICAgICAgICAgICA9IHJxX29mZmxpbmVfcnQsCmRpZmYgLS1naXQgYS9rZXJuZWwvc21wLmMgYi9rZXJuZWwvc21wLmMKaW5kZXggZjEwNDA4NC4uOTg2N2I2YiAxMDA2NDQKLS0tIGEva2VybmVsL3NtcC5jCisrKyBiL2tlcm5lbC9zbXAuYwpAQCAtMTIsOCArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNhbGxfc2luZ2xlX3F1ZXVlLCBjYWxsX3NpbmdsZV9xdWV1ZSk7Ci0KIHN0YXRpYyBzdHJ1Y3QgewogCXN0cnVjdCBsaXN0X2hlYWQJcXVldWU7CiAJcmF3X3NwaW5sb2NrX3QJCWxvY2s7CkBAIC0zMywxMiArMzEsMTQgQEAKIAljcHVtYXNrX3Zhcl90CQljcHVtYXNrOwogfTsKIAorc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBjYWxsX2Z1bmN0aW9uX2RhdGEsIGNmZF9kYXRhKTsKKwogc3RydWN0IGNhbGxfc2luZ2xlX3F1ZXVlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAJcmF3X3NwaW5sb2NrX3QJCWxvY2s7CiB9OwogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNhbGxfZnVuY3Rpb25fZGF0YSwgY2ZkX2RhdGEpOworc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBjYWxsX3NpbmdsZV9xdWV1ZSwgY2FsbF9zaW5nbGVfcXVldWUpOwogCiBzdGF0aWMgaW50CiBob3RwbHVnX2NmZChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCkBAIC0yNTYsNyArMjU2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSwgY3NkX2RhdGEpOworc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhLCBjc2RfZGF0YSk7CiAKIC8qCiAgKiBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUgLSBSdW4gYSBmdW5jdGlvbiBvbiBhIHNwZWNpZmljIENQVQpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmMKaW5kZXggYTA5NTAyZS4uN2MxYTY3ZSAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRpcnEuYworKysgYi9rZXJuZWwvc29mdGlycS5jCkBAIC01MDAsMjIgKzUwMCwxNyBAQAogICovCiAKIC8qCi0gKiBUaGUgdHJhbXBvbGluZSBpcyBjYWxsZWQgd2hlbiB0aGUgaHJ0aW1lciBleHBpcmVzLiBJZiB0aGlzIGlzCi0gKiBjYWxsZWQgZnJvbSB0aGUgaHJ0aW1lciBpbnRlcnJ1cHQgdGhlbiB3ZSBzY2hlZHVsZSB0aGUgdGFza2xldCBhcwotICogdGhlIHRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uIGV4cGVjdHMgdG8gcnVuIGluIHNvZnRpcnEgY29udGV4dC4gSWYKLSAqIGl0J3MgY2FsbGVkIGluIHNvZnRpcnEgY29udGV4dCBhbnl3YXkgKGkuZS4gaGlnaCByZXNvbHV0aW9uIHRpbWVycwotICogZGlzYWJsZWQpIHRoZW4gdGhlIGhydGltZXIgY2FsbGJhY2sgaXMgY2FsbGVkIHJpZ2h0IGF3YXkuCisgKiBUaGUgdHJhbXBvbGluZSBpcyBjYWxsZWQgd2hlbiB0aGUgaHJ0aW1lciBleHBpcmVzLiBJdCBzY2hlZHVsZXMgYSB0YXNrbGV0CisgKiB0byBydW4gX190YXNrbGV0X2hydGltZXJfdHJhbXBvbGluZSgpIHdoaWNoIGluIHR1cm4gd2lsbCBjYWxsIHRoZSBpbnRlbmRlZAorICogaHJ0aW1lciBjYWxsYmFjaywgYnV0IGZyb20gc29mdGlycSBjb250ZXh0LgogICovCiBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgX19ocnRpbWVyX3Rhc2tsZXRfdHJhbXBvbGluZShzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiB7CiAJc3RydWN0IHRhc2tsZXRfaHJ0aW1lciAqdHRpbWVyID0KIAkJY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgdGFza2xldF9ocnRpbWVyLCB0aW1lcik7CiAKLQlpZiAoaHJ0aW1lcl9pc19ocmVzX2FjdGl2ZSh0aW1lcikpIHsKLQkJdGFza2xldF9oaV9zY2hlZHVsZSgmdHRpbWVyLT50YXNrbGV0KTsKLQkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwotCX0KLQlyZXR1cm4gdHRpbWVyLT5mdW5jdGlvbih0aW1lcik7CisJdGFza2xldF9oaV9zY2hlZHVsZSgmdHRpbWVyLT50YXNrbGV0KTsKKwlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGxvY2t1cC5jIGIva2VybmVsL3NvZnRsb2NrdXAuYwppbmRleCBkMjI1NzkwLi4wZDRjNzg5IDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGxvY2t1cC5jCisrKyBiL2tlcm5lbC9zb2Z0bG9ja3VwLmMKQEAgLTI1LDYgKzI1LDcgQEAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBzb2Z0bG9ja3VwX3RvdWNoX3RzKTsgLyogdG91Y2ggdGltZXN0YW1wICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgc29mdGxvY2t1cF9wcmludF90cyk7IC8qIHByaW50IHRpbWVzdGFtcCAqLwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzb2Z0bG9ja3VwX3dhdGNoZG9nKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCBzb2Z0bG9ja190b3VjaF9zeW5jKTsKIAogc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IGRpZF9wYW5pYzsKIGludCBfX3JlYWRfbW9zdGx5IHNvZnRsb2NrdXBfdGhyZXNoID0gNjA7CkBAIC03OSw2ICs4MCwxMiBAQAogfQogRVhQT1JUX1NZTUJPTCh0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKTsKIAordm9pZCB0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nX3N5bmModm9pZCkKK3sKKwlfX3Jhd19nZXRfY3B1X3Zhcihzb2Z0bG9ja190b3VjaF9zeW5jKSA9IHRydWU7CisJX19yYXdfZ2V0X2NwdV92YXIoc29mdGxvY2t1cF90b3VjaF90cykgPSAwOworfQorCiB2b2lkIHRvdWNoX2FsbF9zb2Z0bG9ja3VwX3dhdGNoZG9ncyh2b2lkKQogewogCWludCBjcHU7CkBAIC0xMTgsNiArMTI1LDE0IEBACiAJfQogCiAJaWYgKHRvdWNoX3RzID09IDApIHsKKwkJaWYgKHVubGlrZWx5KHBlcl9jcHUoc29mdGxvY2tfdG91Y2hfc3luYywgdGhpc19jcHUpKSkgeworCQkJLyoKKwkJCSAqIElmIHRoZSB0aW1lIHN0YW1wIHdhcyB0b3VjaGVkIGF0b21pY2FsbHkKKwkJCSAqIG1ha2Ugc3VyZSB0aGUgc2NoZWR1bGVyIHRpY2sgaXMgdXAgdG8gZGF0ZS4KKwkJCSAqLworCQkJcGVyX2NwdShzb2Z0bG9ja190b3VjaF9zeW5jLCB0aGlzX2NwdSkgPSBmYWxzZTsKKwkJCXNjaGVkX2Nsb2NrX3RpY2soKTsKKwkJfQogCQlfX3RvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zcmN1LmMgYi9rZXJuZWwvc3JjdS5jCmluZGV4IDgxOGQ3ZDkuLmJkZTQyOTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zcmN1LmMKKysrIGIva2VybmVsL3NyY3UuYwpAQCAtMzQsNiArMzQsMzAgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zcmN1Lmg+CiAKK3N0YXRpYyBpbnQgaW5pdF9zcmN1X3N0cnVjdF9maWVsZHMoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkKK3sKKwlzcC0+Y29tcGxldGVkID0gMDsKKwltdXRleF9pbml0KCZzcC0+bXV0ZXgpOworCXNwLT5wZXJfY3B1X3JlZiA9IGFsbG9jX3BlcmNwdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3RfYXJyYXkpOworCXJldHVybiBzcC0+cGVyX2NwdV9yZWYgPyAwIDogLUVOT01FTTsKK30KKworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisKK2ludCBfX2luaXRfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQoreworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisJLyogRG9uJ3QgcmUtaW5pdGlhbGl6ZSBhIGxvY2sgd2hpbGUgaXQgaXMgaGVsZC4gKi8KKwlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZCgodm9pZCAqKXNwLCBzaXplb2YoKnNwKSk7CisJbG9ja2RlcF9pbml0X21hcCgmc3AtPmRlcF9tYXAsIG5hbWUsIGtleSwgMCk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisJcmV0dXJuIGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHNwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9faW5pdF9zcmN1X3N0cnVjdCk7CisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworCiAvKioKICAqIGluaXRfc3JjdV9zdHJ1Y3QgLSBpbml0aWFsaXplIGEgc2xlZXAtUkNVIHN0cnVjdHVyZQogICogQHNwOiBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZS4KQEAgLTQ0LDEzICs2OCwxMiBAQAogICovCiBpbnQgaW5pdF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKQogewotCXNwLT5jb21wbGV0ZWQgPSAwOwotCW11dGV4X2luaXQoJnNwLT5tdXRleCk7Ci0Jc3AtPnBlcl9jcHVfcmVmID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBzcmN1X3N0cnVjdF9hcnJheSk7Ci0JcmV0dXJuIChzcC0+cGVyX2NwdV9yZWYgPyAwIDogLUVOT01FTSk7CisJcmV0dXJuIGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHNwKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3QpOwogCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKIC8qCiAgKiBzcmN1X3JlYWRlcnNfYWN0aXZlX2lkeCAtLSByZXR1cm5zIGFwcHJveGltYXRlIG51bWJlciBvZiByZWFkZXJzCiAgKglhY3RpdmUgb24gdGhlIHNwZWNpZmllZCByYW5rIG9mIHBlci1DUFUgY291bnRlcnMuCkBAIC0xMDAsMTUgKzEyMywxMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2xlYW51cF9zcmN1X3N0cnVjdCk7CiAKLS8qKgotICogc3JjdV9yZWFkX2xvY2sgLSByZWdpc3RlciBhIG5ldyByZWFkZXIgZm9yIGFuIFNSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZS4KLSAqIEBzcDogc3JjdV9zdHJ1Y3QgaW4gd2hpY2ggdG8gcmVnaXN0ZXIgdGhlIG5ldyByZWFkZXIuCi0gKgorLyoKICAqIENvdW50cyB0aGUgbmV3IHJlYWRlciBpbiB0aGUgYXBwcm9wcmlhdGUgcGVyLUNQVSBlbGVtZW50IG9mIHRoZQogICogc3JjdV9zdHJ1Y3QuICBNdXN0IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC4KICAqIFJldHVybnMgYW4gaW5kZXggdGhhdCBtdXN0IGJlIHBhc3NlZCB0byB0aGUgbWF0Y2hpbmcgc3JjdV9yZWFkX3VubG9jaygpLgogICovCi1pbnQgc3JjdV9yZWFkX2xvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkKK2ludCBfX3NyY3VfcmVhZF9sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApCiB7CiAJaW50IGlkeDsKIApAQCAtMTIwLDMxICsxNDAsMjcgQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogCXJldHVybiBpZHg7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChzcmN1X3JlYWRfbG9jayk7CitFWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfcmVhZF9sb2NrKTsKIAotLyoqCi0gKiBzcmN1X3JlYWRfdW5sb2NrIC0gdW5yZWdpc3RlciBhIG9sZCByZWFkZXIgZnJvbSBhbiBTUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmUuCi0gKiBAc3A6IHNyY3Vfc3RydWN0IGluIHdoaWNoIHRvIHVucmVnaXN0ZXIgdGhlIG9sZCByZWFkZXIuCi0gKiBAaWR4OiByZXR1cm4gdmFsdWUgZnJvbSBjb3JyZXNwb25kaW5nIHNyY3VfcmVhZF9sb2NrKCkuCi0gKgorLyoKICAqIFJlbW92ZXMgdGhlIGNvdW50IGZvciB0aGUgb2xkIHJlYWRlciBmcm9tIHRoZSBhcHByb3ByaWF0ZSBwZXItQ1BVCiAgKiBlbGVtZW50IG9mIHRoZSBzcmN1X3N0cnVjdC4gIE5vdGUgdGhhdCB0aGlzIG1heSB3ZWxsIGJlIGEgZGlmZmVyZW50CiAgKiBDUFUgdGhhbiB0aGF0IHdoaWNoIHdhcyBpbmNyZW1lbnRlZCBieSB0aGUgY29ycmVzcG9uZGluZyBzcmN1X3JlYWRfbG9jaygpLgogICogTXVzdCBiZSBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQuCiAgKi8KLXZvaWQgc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgaWR4KQordm9pZCBfX3NyY3VfcmVhZF91bmxvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgaW50IGlkeCkKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlzcmN1X2JhcnJpZXIoKTsgIC8qIGVuc3VyZSBjb21waWxlciB3b24ndCBtaXNvcmRlciBjcml0aWNhbCBzZWN0aW9uLiAqLwogCXBlcl9jcHVfcHRyKHNwLT5wZXJfY3B1X3JlZiwgc21wX3Byb2Nlc3Nvcl9pZCgpKS0+Y1tpZHhdLS07CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfcmVhZF91bmxvY2spOworRVhQT1JUX1NZTUJPTF9HUEwoX19zcmN1X3JlYWRfdW5sb2NrKTsKIAogLyoKICAqIEhlbHBlciBmdW5jdGlvbiBmb3Igc3luY2hyb25pemVfc3JjdSgpIGFuZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpLgogICovCi12b2lkIF9fc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCB2b2lkICgqc3luY19mdW5jKSh2b2lkKSkKK3N0YXRpYyB2b2lkIF9fc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCB2b2lkICgqc3luY19mdW5jKSh2b2lkKSkKIHsKIAlpbnQgaWR4OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggMjZhNmI3My4uODc3ZmU0ZiAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMjIyLDYgKzIyMiw3IEBACiAJaWYgKHdoaWNoID4gUFJJT19VU0VSIHx8IHdoaWNoIDwgUFJJT19QUk9DRVNTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXJjdV9yZWFkX2xvY2soKTsKIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCXN3aXRjaCAod2hpY2gpIHsKIAkJY2FzZSBQUklPX1BST0NFU1M6CkBAIC0yNjcsNiArMjY4LDcgQEAKIAl9CiBvdXRfdW5sb2NrOgogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC01NjksMTEgKzU3MSw2IEBACiAJaWYgKCFuZXdfdXNlcikKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlpZiAoIXRhc2tfY2FuX3N3aXRjaF91c2VyKG5ld191c2VyLCBjdXJyZW50KSkgewotCQlmcmVlX3VpZChuZXdfdXNlcik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWlmIChhdG9taWNfcmVhZCgmbmV3X3VzZXItPnByb2Nlc3NlcykgPj0KIAkJCQljdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX05QUk9DXS5ybGltX2N1ciAmJgogCQkJbmV3X3VzZXIgIT0gSU5JVF9VU0VSKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwppbmRleCBlODVjMjM0Li4xZjY2M2QyIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKQEAgLTM0Myw3ICszNDMsMTkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndhdGNoZG9nX2xvY2ssIGZsYWdzKTsKKwkvKgorCSAqIFdlIHVzZSB0cnlsb2NrIGhlcmUgdG8gYXZvaWQgYSBwb3RlbnRpYWwgZGVhZCBsb2NrIHdoZW4KKwkgKiBrZ2RiIGNhbGxzIHRoaXMgY29kZSBhZnRlciB0aGUga2VybmVsIGhhcyBiZWVuIHN0b3BwZWQgd2l0aAorCSAqIHdhdGNoZG9nX2xvY2sgaGVsZC4gV2hlbiB3YXRjaGRvZ19sb2NrIGlzIGhlbGQgd2UganVzdAorCSAqIHJldHVybiBhbmQgYWNjZXB0LCB0aGF0IHRoZSB3YXRjaGRvZyBtaWdodCB0cmlnZ2VyIGFuZCBtYXJrCisJICogdGhlIG1vbml0b3JlZCBjbG9jayBzb3VyY2UgKHVzdWFsbHkgVFNDKSB1bnN0YWJsZS4KKwkgKgorCSAqIFRoaXMgZG9lcyBub3QgYWZmZWN0IHRoZSBvdGhlciBjYWxsZXIgY2xvY2tzb3VyY2VfcmVzdW1lKCkKKwkgKiBiZWNhdXNlIGF0IHRoaXMgcG9pbnQgdGhlIGtlcm5lbCBpcyBVUCwgaW50ZXJydXB0cyBhcmUKKwkgKiBkaXNhYmxlZCBhbmQgbm90aGluZyBjYW4gaG9sZCB3YXRjaGRvZ19sb2NrLgorCSAqLworCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJndhdGNoZG9nX2xvY2ssIGZsYWdzKSkKKwkJcmV0dXJuOwogCWNsb2Nrc291cmNlX3Jlc2V0X3dhdGNoZG9nKCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2F0Y2hkb2dfbG9jaywgZmxhZ3MpOwogfQpAQCAtNDQxLDYgKzQ1MywxOCBAQAogI2VuZGlmIC8qIENPTkZJR19DTE9DS1NPVVJDRV9XQVRDSERPRyAqLwogCiAvKioKKyAqIGNsb2Nrc291cmNlX3N1c3BlbmQgLSBzdXNwZW5kIHRoZSBjbG9ja3NvdXJjZShzKQorICovCit2b2lkIGNsb2Nrc291cmNlX3N1c3BlbmQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGNzLCAmY2xvY2tzb3VyY2VfbGlzdCwgbGlzdCkKKwkJaWYgKGNzLT5zdXNwZW5kKQorCQkJY3MtPnN1c3BlbmQoY3MpOworfQorCisvKioKICAqIGNsb2Nrc291cmNlX3Jlc3VtZSAtIHJlc3VtZSB0aGUgY2xvY2tzb3VyY2UocykKICAqLwogdm9pZCBjbG9ja3NvdXJjZV9yZXN1bWUodm9pZCkKQEAgLTQ0OSw3ICs0NzMsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcywgJmNsb2Nrc291cmNlX2xpc3QsIGxpc3QpCiAJCWlmIChjcy0+cmVzdW1lKQotCQkJY3MtPnJlc3VtZSgpOworCQkJY3MtPnJlc3VtZShjcyk7CiAKIAljbG9ja3NvdXJjZV9yZXN1bWVfd2F0Y2hkb2coKTsKIH0KQEAgLTQ1OCw4ICs0ODIsOCBAQAogICogY2xvY2tzb3VyY2VfdG91Y2hfd2F0Y2hkb2cgLSBVcGRhdGUgd2F0Y2hkb2cKICAqCiAgKiBVcGRhdGUgdGhlIHdhdGNoZG9nIGFmdGVyIGV4Y2VwdGlvbiBjb250ZXh0cyBzdWNoIGFzIGtnZGIgc28gYXMgbm90Ci0gKiB0byBpbmNvcnJlY3RseSB0cmlwIHRoZSB3YXRjaGRvZy4KLSAqCisgKiB0byBpbmNvcnJlY3RseSB0cmlwIHRoZSB3YXRjaGRvZy4gVGhpcyBtaWdodCBmYWlsIHdoZW4gdGhlIGtlcm5lbAorICogd2FzIHN0b3BwZWQgaW4gY29kZSB3aGljaCBob2xkcyB3YXRjaGRvZ19sb2NrLgogICovCiB2b2lkIGNsb2Nrc291cmNlX3RvdWNoX3dhdGNoZG9nKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9udHAuYyBiL2tlcm5lbC90aW1lL250cC5jCmluZGV4IDQ4MDBmOTMuLjdjMGYxODAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL250cC5jCisrKyBiL2tlcm5lbC90aW1lL250cC5jCkBAIC01OCwxMCArNTgsMTAgQEAKIHN0YXRpYyBsb25nCQkJdGltZV9jb25zdGFudCA9IDI7CiAKIC8qIG1heGltdW0gZXJyb3IgKHVzZWNzKToJCQkJCQkqLwotbG9uZwkJCQl0aW1lX21heGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworc3RhdGljIGxvbmcJCQl0aW1lX21heGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOwogCiAvKiBlc3RpbWF0ZWQgZXJyb3IgKHVzZWNzKToJCQkJCQkqLwotbG9uZwkJCQl0aW1lX2VzdGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworc3RhdGljIGxvbmcJCQl0aW1lX2VzdGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOwogCiAvKiBmcmVxdWVuY3kgb2Zmc2V0IChzY2FsZWQgbnNlY3Mvc2Vjcyk6CQkJCSovCiBzdGF0aWMgczY0CQkJdGltZV9mcmVxOwpAQCAtMTQyLDExICsxNDIsMTEgQEAKIAkgKiBTZWxlY3QgaG93IHRoZSBmcmVxdWVuY3kgaXMgdG8gYmUgY29udHJvbGxlZAogCSAqIGFuZCBpbiB3aGljaCBtb2RlIChQTEwgb3IgRkxMKS4KIAkgKi8KLQlzZWNzID0geHRpbWUudHZfc2VjIC0gdGltZV9yZWZ0aW1lOworCXNlY3MgPSBnZXRfc2Vjb25kcygpIC0gdGltZV9yZWZ0aW1lOwogCWlmICh1bmxpa2VseSh0aW1lX3N0YXR1cyAmIFNUQV9GUkVRSE9MRCkpCiAJCXNlY3MgPSAwOwogCi0JdGltZV9yZWZ0aW1lID0geHRpbWUudHZfc2VjOworCXRpbWVfcmVmdGltZSA9IGdldF9zZWNvbmRzKCk7CiAKIAlvZmZzZXQ2NCAgICA9IG9mZnNldDsKIAlmcmVxX2FkaiAgICA9IChvZmZzZXQ2NCAqIHNlY3MpIDw8CkBAIC0zNjgsNyArMzY4LDcgQEAKIAkgKiByZWZlcmVuY2UgdGltZSB0byBjdXJyZW50IHRpbWUuCiAJICovCiAJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfUExMKSAmJiAodHhjLT5zdGF0dXMgJiBTVEFfUExMKSkKLQkJdGltZV9yZWZ0aW1lID0geHRpbWUudHZfc2VjOworCQl0aW1lX3JlZnRpbWUgPSBnZXRfc2Vjb25kcygpOwogCiAJLyogb25seSBzZXQgYWxsb3dlZCBiaXRzICovCiAJdGltZV9zdGF0dXMgJj0gU1RBX1JPTkxZOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKaW5kZXggN2ZhYWEzMi4uMTY3MzYzNyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYworKysgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCkBAIC02MjIsNiArNjIyLDcgQEAKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwogCiAJY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfU1VTUEVORCwgTlVMTCk7CisJY2xvY2tzb3VyY2Vfc3VzcGVuZCgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04ODAsNiArODgxLDcgQEAKIAogCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKHRzLCAtYm9vdHRpbWUudHZfc2VjLCAtYm9vdHRpbWUudHZfbnNlYyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChnZXRib290dGltZSk7CiAKIC8qKgogICogbW9ub3RvbmljX3RvX2Jvb3RiYXNlZCAtIENvbnZlcnQgdGhlIG1vbm90b25pYyB0aW1lIHRvIGJvb3QgYmFzZWQuCkBAIC04ODksNiArODkxLDcgQEAKIHsKIAkqdHMgPSB0aW1lc3BlY19hZGRfc2FmZSgqdHMsIHRvdGFsX3NsZWVwX3RpbWUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobW9ub3RvbmljX3RvX2Jvb3RiYXNlZCk7CiAKIHVuc2lnbmVkIGxvbmcgZ2V0X3NlY29uZHModm9pZCkKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9LY29uZmlnIGIva2VybmVsL3RyYWNlL0tjb25maWcKaW5kZXggNmMyMmQ4YS4uMTNlMTNkNCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL0tjb25maWcKKysrIGIva2VybmVsL3RyYWNlL0tjb25maWcKQEAgLTI3LDkgKzI3LDcgQEAKIGNvbmZpZyBIQVZFX0ZVTkNUSU9OX0dSQVBIX0ZQX1RFU1QKIAlib29sCiAJaGVscAotCSBBbiBhcmNoIG1heSBwYXNzIGluIGEgdW5pcXVlIHZhbHVlIChmcmFtZSBwb2ludGVyKSB0byBib3RoIHRoZQotCSBlbnRlcmluZyBhbmQgZXhpdGluZyBvZiBhIGZ1bmN0aW9uLiBPbiBleGl0LCB0aGUgdmFsdWUgaXMgY29tcGFyZWQKLQkgYW5kIGlmIGl0IGRvZXMgbm90IG1hdGNoLCB0aGVuIGl0IHdpbGwgcGFuaWMgdGhlIGtlcm5lbC4KKwkgIFNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CiAKIGNvbmZpZyBIQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCiAJYm9vbApAQCAtMzMwLDE1ICszMjgsNiBAQAogCiAJICBTYXkgTiBpZiB1bnN1cmUuCiAKLWNvbmZpZyBQT1dFUl9UUkFDRVIKLQlib29sICJUcmFjZSBwb3dlciBjb25zdW1wdGlvbiBiZWhhdmlvciIKLQlkZXBlbmRzIG9uIFg4NgotCXNlbGVjdCBHRU5FUklDX1RSQUNFUgotCWhlbHAKLQkgIFRoaXMgdHJhY2VyIGhlbHBzIGRldmVsb3BlcnMgdG8gYW5hbHl6ZSBhbmQgb3B0aW1pemUgdGhlIGtlcm5lbCdzCi0JICBwb3dlciBtYW5hZ2VtZW50IGRlY2lzaW9ucywgc3BlY2lmaWNhbGx5IHRoZSBDLXN0YXRlIGFuZCBQLXN0YXRlCi0JICBiZWhhdmlvci4KLQogY29uZmlnIEtTWU1fVFJBQ0VSCiAJYm9vbCAiVHJhY2UgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIG9uIGtlcm5lbCBtZW1vcnkgbG9jYXRpb25zIgogCWRlcGVuZHMgb24gSEFWRV9IV19CUkVBS1BPSU5UCkBAIC00NTEsNyArNDQwLDcgQEAKIAogY29uZmlnIEtQUk9CRV9FVkVOVAogCWRlcGVuZHMgb24gS1BST0JFUwotCWRlcGVuZHMgb24gWDg2CisJZGVwZW5kcyBvbiBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKIAlib29sICJFbmFibGUga3Byb2Jlcy1iYXNlZCBkeW5hbWljIGV2ZW50cyIKIAlzZWxlY3QgVFJBQ0lORwogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL01ha2VmaWxlIGIva2VybmVsL3RyYWNlL01ha2VmaWxlCmluZGV4IGNkOWVjZDguLmQwMGM2ZmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9NYWtlZmlsZQorKysgYi9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKQEAgLTUxLDcgKzUxLDkgQEAKIG9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSB0cmFjZV9ldmVudHMubwogb2JqLSQoQ09ORklHX0VWRU5UX1RSQUNJTkcpICs9IHRyYWNlX2V4cG9ydC5vCiBvYmotJChDT05GSUdfRlRSQUNFX1NZU0NBTExTKSArPSB0cmFjZV9zeXNjYWxscy5vCi1vYmotJChDT05GSUdfRVZFTlRfUFJPRklMRSkgKz0gdHJhY2VfZXZlbnRfcHJvZmlsZS5vCitpZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSkKK29iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSB0cmFjZV9ldmVudF9wcm9maWxlLm8KK2VuZGlmCiBvYmotJChDT05GSUdfRVZFTlRfVFJBQ0lORykgKz0gdHJhY2VfZXZlbnRzX2ZpbHRlci5vCiBvYmotJChDT05GSUdfS1BST0JFX0VWRU5UKSArPSB0cmFjZV9rcHJvYmUubwogb2JqLSQoQ09ORklHX0tTWU1fVFJBQ0VSKSArPSB0cmFjZV9rc3ltLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMKaW5kZXggZDlkNjIwNi4uMDdmOTQ1YTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCkBAIC01NDAsOSArNTQwLDEwIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYnV0cywgc2l6ZW9mKGJ1dHMpKSkKKwlpZiAoY29weV90b191c2VyKGFyZywgJmJ1dHMsIHNpemVvZihidXRzKSkpIHsKKwkJYmxrX3RyYWNlX3JlbW92ZShxKTsKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0KKwl9CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc2V0dXApOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCmluZGV4IDFlNjY0MGYuLjgzNzgzNTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KQEAgLTg5OCwzNiArODk3LDYgQEAKIAkJfQkJCQlcCiAJfQogCi0jaWZkZWYgQ09ORklHX0tQUk9CRVMKLQotc3RhdGljIGludCBmcm96ZW5fcmVjb3JkX2NvdW50OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZXplX3JlY29yZChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKQotewotCWlmICghKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRlJPWkVOKSkgewotCQlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9GUk9aRU47Ci0JCWZyb3plbl9yZWNvcmRfY291bnQrKzsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmZyZWV6ZV9yZWNvcmQoc3RydWN0IGR5bl9mdHJhY2UgKnJlYykKLXsKLQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GUk9aRU4pIHsKLQkJcmVjLT5mbGFncyAmPSB+RlRSQUNFX0ZMX0ZST1pFTjsKLQkJZnJvemVuX3JlY29yZF9jb3VudC0tOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgcmVjb3JkX2Zyb3plbihzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKQotewotCXJldHVybiByZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZST1pFTjsKLX0KLSNlbHNlCi0jIGRlZmluZSBmcmVlemVfcmVjb3JkKHJlYykJCQkoeyAwOyB9KQotIyBkZWZpbmUgdW5mcmVlemVfcmVjb3JkKHJlYykJCQkoeyAwOyB9KQotIyBkZWZpbmUgcmVjb3JkX2Zyb3plbihyZWMpCQkJKHsgMDsgfSkKLSNlbmRpZiAvKiBDT05GSUdfS1BST0JFUyAqLwotCiBzdGF0aWMgdm9pZCBmdHJhY2VfZnJlZV9yZWMoc3RydWN0IGR5bl9mdHJhY2UgKnJlYykKIHsKIAlyZWMtPmZyZWVsaXN0ID0gZnRyYWNlX2ZyZWVfcmVjb3JkczsKQEAgLTEwMjUsNiArOTk0LDIxIEBACiB9CiAKIAorLyogUmV0dXJuIDEgaWYgdGhlIGFkZHJlc3MgcmFuZ2UgaXMgcmVzZXJ2ZWQgZm9yIGZ0cmFjZSAqLworaW50IGZ0cmFjZV90ZXh0X3Jlc2VydmVkKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit7CisJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKKwlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOworCisJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7CisJCWlmIChyZWMtPmlwIDw9ICh1bnNpZ25lZCBsb25nKWVuZCAmJgorCQkgICAgcmVjLT5pcCArIE1DT1VOVF9JTlNOX1NJWkUgPiAodW5zaWduZWQgbG9uZylzdGFydCkKKwkJCXJldHVybiAxOworCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOworCXJldHVybiAwOworfQorCisKIHN0YXRpYyBpbnQKIF9fZnRyYWNlX3JlcGxhY2VfY29kZShzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCBpbnQgZW5hYmxlKQogewpAQCAtMTA3NiwxNCArMTA2MCw2IEBACiAJCSAgICAhKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfQ09OVkVSVEVEKSkKIAkJCWNvbnRpbnVlOwogCi0JCS8qIGlnbm9yZSB1cGRhdGVzIHRvIHRoaXMgcmVjb3JkJ3MgbWNvdW50IHNpdGUgKi8KLQkJaWYgKGdldF9rcHJvYmUoKHZvaWQgKilyZWMtPmlwKSkgewotCQkJZnJlZXplX3JlY29yZChyZWMpOwotCQkJY29udGludWU7Ci0JCX0gZWxzZSB7Ci0JCQl1bmZyZWV6ZV9yZWNvcmQocmVjKTsKLQkJfQotCiAJCWZhaWxlZCA9IF9fZnRyYWNlX3JlcGxhY2VfY29kZShyZWMsIGVuYWJsZSk7CiAJCWlmIChmYWlsZWQpIHsKIAkJCXJlYy0+ZmxhZ3MgfD0gRlRSQUNFX0ZMX0ZBSUxFRDsKQEAgLTI0MjYsNiArMjQwMiw3IEBACiBzdGF0aWMgREVGSU5FX01VVEVYKGdyYXBoX2xvY2spOwogCiBpbnQgZnRyYWNlX2dyYXBoX2NvdW50OworaW50IGZ0cmFjZV9ncmFwaF9maWx0ZXJfZW5hYmxlZDsKIHVuc2lnbmVkIGxvbmcgZnRyYWNlX2dyYXBoX2Z1bmNzW0ZUUkFDRV9HUkFQSF9NQVhfRlVOQ1NdIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyB2b2lkICoKQEAgLTI0NDgsNyArMjQyNSw3IEBACiAJbXV0ZXhfbG9jaygmZ3JhcGhfbG9jayk7CiAKIAkvKiBOb3RoaW5nLCB0ZWxsIGdfc2hvdyB0byBwcmludCBhbGwgZnVuY3Rpb25zIGFyZSBlbmFibGVkICovCi0JaWYgKCFmdHJhY2VfZ3JhcGhfY291bnQgJiYgISpwb3MpCisJaWYgKCFmdHJhY2VfZ3JhcGhfZmlsdGVyX2VuYWJsZWQgJiYgISpwb3MpCiAJCXJldHVybiAodm9pZCAqKTE7CiAKIAlyZXR1cm4gX19nX25leHQobSwgcG9zKTsKQEAgLTI0OTQsNiArMjQ3MSw3IEBACiAJbXV0ZXhfbG9jaygmZ3JhcGhfbG9jayk7CiAJaWYgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgJiYKIAkgICAgKGZpbGUtPmZfZmxhZ3MgJiBPX1RSVU5DKSkgeworCQlmdHJhY2VfZ3JhcGhfZmlsdGVyX2VuYWJsZWQgPSAwOwogCQlmdHJhY2VfZ3JhcGhfY291bnQgPSAwOwogCQltZW1zZXQoZnRyYWNlX2dyYXBoX2Z1bmNzLCAwLCBzaXplb2YoZnRyYWNlX2dyYXBoX2Z1bmNzKSk7CiAJfQpAQCAtMjUxOSw3ICsyNDk3LDcgQEAKIAlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjOwogCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CiAJaW50IHNlYXJjaF9sZW47Ci0JaW50IGZvdW5kID0gMDsKKwlpbnQgZmFpbCA9IDE7CiAJaW50IHR5cGUsIG5vdDsKIAljaGFyICpzZWFyY2g7CiAJYm9vbCBleGlzdHM7CkBAIC0yNTMwLDM3ICsyNTA4LDUxIEBACiAKIAkvKiBkZWNvZGUgcmVnZXggKi8KIAl0eXBlID0gZmlsdGVyX3BhcnNlX3JlZ2V4KGJ1ZmZlciwgc3RybGVuKGJ1ZmZlciksICZzZWFyY2gsICZub3QpOwotCWlmIChub3QpCi0JCXJldHVybiAtRUlOVkFMOworCWlmICghbm90ICYmICppZHggPj0gRlRSQUNFX0dSQVBIX01BWF9GVU5DUykKKwkJcmV0dXJuIC1FQlVTWTsKIAogCXNlYXJjaF9sZW4gPSBzdHJsZW4oc2VhcmNoKTsKIAogCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKIAotCQlpZiAoKmlkeCA+PSBGVFJBQ0VfR1JBUEhfTUFYX0ZVTkNTKQotCQkJYnJlYWs7Ci0KIAkJaWYgKHJlYy0+ZmxhZ3MgJiAoRlRSQUNFX0ZMX0ZBSUxFRCB8IEZUUkFDRV9GTF9GUkVFKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChmdHJhY2VfbWF0Y2hfcmVjb3JkKHJlYywgc2VhcmNoLCBzZWFyY2hfbGVuLCB0eXBlKSkgewotCQkJLyogZW5zdXJlIGl0IGlzIG5vdCBhbHJlYWR5IGluIHRoZSBhcnJheSAqLworCQkJLyogaWYgaXQgaXMgaW4gdGhlIGFycmF5ICovCiAJCQlleGlzdHMgPSBmYWxzZTsKLQkJCWZvciAoaSA9IDA7IGkgPCAqaWR4OyBpKyspCisJCQlmb3IgKGkgPSAwOyBpIDwgKmlkeDsgaSsrKSB7CiAJCQkJaWYgKGFycmF5W2ldID09IHJlYy0+aXApIHsKIAkJCQkJZXhpc3RzID0gdHJ1ZTsKIAkJCQkJYnJlYWs7CiAJCQkJfQotCQkJaWYgKCFleGlzdHMpCi0JCQkJYXJyYXlbKCppZHgpKytdID0gcmVjLT5pcDsKLQkJCWZvdW5kID0gMTsKKwkJCX0KKworCQkJaWYgKCFub3QpIHsKKwkJCQlmYWlsID0gMDsKKwkJCQlpZiAoIWV4aXN0cykgeworCQkJCQlhcnJheVsoKmlkeCkrK10gPSByZWMtPmlwOworCQkJCQlpZiAoKmlkeCA+PSBGVFJBQ0VfR1JBUEhfTUFYX0ZVTkNTKQorCQkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoZXhpc3RzKSB7CisJCQkJCWFycmF5W2ldID0gYXJyYXlbLS0oKmlkeCldOworCQkJCQlhcnJheVsqaWR4XSA9IDA7CisJCQkJCWZhaWwgPSAwOworCQkJCX0KKwkJCX0KIAkJfQogCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOwotCitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAKLQlyZXR1cm4gZm91bmQgPyAwIDogLUVJTlZBTDsKKwlpZiAoZmFpbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmdHJhY2VfZ3JhcGhfZmlsdGVyX2VuYWJsZWQgPSAxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtMjU3MCwxNiArMjU2MiwxMSBAQAogCXN0cnVjdCB0cmFjZV9wYXJzZXIgcGFyc2VyOwogCXNzaXplX3QgcmVhZCwgcmV0OwogCi0JaWYgKCFjbnQgfHwgY250IDwgMCkKKwlpZiAoIWNudCkKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9sb2NrKCZncmFwaF9sb2NrKTsKIAotCWlmIChmdHJhY2VfZ3JhcGhfY291bnQgPj0gRlRSQUNFX0dSQVBIX01BWF9GVU5DUykgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KIAlpZiAodHJhY2VfcGFyc2VyX2dldF9pbml0KCZwYXJzZXIsIEZUUkFDRV9CVUZGX01BWCkpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfdW5sb2NrOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwppbmRleCBlZGVmZTNiLi44YzFiMmQyIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYworKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwpAQCAtNDY0LDYgKzQ2NCw4IEBACiAJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUJKmNwdV9idWZmZXI7CiAJdW5zaWduZWQgbG9uZwkJCWhlYWQ7CiAJc3RydWN0IGJ1ZmZlcl9wYWdlCQkqaGVhZF9wYWdlOworCXN0cnVjdCBidWZmZXJfcGFnZQkJKmNhY2hlX3JlYWRlcl9wYWdlOworCXVuc2lnbmVkIGxvbmcJCQljYWNoZV9yZWFkOwogCXU2NAkJCQlyZWFkX3N0YW1wOwogfTsKIApAQCAtMjcxNiw2ICsyNzE4LDggQEAKIAkJaXRlci0+cmVhZF9zdGFtcCA9IGNwdV9idWZmZXItPnJlYWRfc3RhbXA7CiAJZWxzZQogCQlpdGVyLT5yZWFkX3N0YW1wID0gaXRlci0+aGVhZF9wYWdlLT5wYWdlLT50aW1lX3N0YW1wOworCWl0ZXItPmNhY2hlX3JlYWRlcl9wYWdlID0gY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2U7CisJaXRlci0+Y2FjaGVfcmVhZCA9IGNwdV9idWZmZXItPnJlYWQ7CiB9CiAKIC8qKgpAQCAtMzA2MCwxMyArMzA2NCwyMiBAQAogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJaW50IG5yX2xvb3BzID0gMDsKIAotCWlmIChyaW5nX2J1ZmZlcl9pdGVyX2VtcHR5KGl0ZXIpKQotCQlyZXR1cm4gTlVMTDsKLQogCWNwdV9idWZmZXIgPSBpdGVyLT5jcHVfYnVmZmVyOwogCWJ1ZmZlciA9IGNwdV9idWZmZXItPmJ1ZmZlcjsKIAorCS8qCisJICogQ2hlY2sgaWYgc29tZW9uZSBwZXJmb3JtZWQgYSBjb25zdW1pbmcgcmVhZCB0bworCSAqIHRoZSBidWZmZXIuIEEgY29uc3VtaW5nIHJlYWQgaW52YWxpZGF0ZXMgdGhlIGl0ZXJhdG9yCisJICogYW5kIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGl0ZXJhdG9yIGluIHRoaXMgY2FzZS4KKwkgKi8KKwlpZiAodW5saWtlbHkoaXRlci0+Y2FjaGVfcmVhZCAhPSBjcHVfYnVmZmVyLT5yZWFkIHx8CisJCSAgICAgaXRlci0+Y2FjaGVfcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UpKQorCQlyYl9pdGVyX3Jlc2V0KGl0ZXIpOworCiAgYWdhaW46CisJaWYgKHJpbmdfYnVmZmVyX2l0ZXJfZW1wdHkoaXRlcikpCisJCXJldHVybiBOVUxMOworCiAJLyoKIAkgKiBXZSByZXBlYXQgd2hlbiBhIHRpbWVzdGFtcCBpcyBlbmNvdW50ZXJlZC4KIAkgKiBXZSBjYW4gZ2V0IG11bHRpcGxlIHRpbWVzdGFtcHMgYnkgbmVzdGVkIGludGVycnVwdHMgb3IgYWxzbwpAQCAtMzA4MSw2ICszMDk0LDExIEBACiAJaWYgKHJiX3Blcl9jcHVfZW1wdHkoY3B1X2J1ZmZlcikpCiAJCXJldHVybiBOVUxMOwogCisJaWYgKGl0ZXItPmhlYWQgPj0gbG9jYWxfcmVhZCgmaXRlci0+aGVhZF9wYWdlLT5wYWdlLT5jb21taXQpKSB7CisJCXJiX2luY19pdGVyKGl0ZXIpOworCQlnb3RvIGFnYWluOworCX0KKwogCWV2ZW50ID0gcmJfaXRlcl9oZWFkX2V2ZW50KGl0ZXIpOwogCiAJc3dpdGNoIChldmVudC0+dHlwZV9sZW4pIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggMGRmMWIwZi4uMDMyYzU3YyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGxpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KQEAgLTEwMiw5ICsxMDMsNiBAQAogCiBzdGF0aWMgY3B1bWFza192YXJfdCBfX3JlYWRfbW9zdGx5CXRyYWNpbmdfYnVmZmVyX21hc2s7CiAKLS8qIERlZmluZSB3aGljaCBjcHUgYnVmZmVycyBhcmUgY3VycmVudGx5IHJlYWQgaW4gdHJhY2VfcGlwZSAqLwotc3RhdGljIGNwdW1hc2tfdmFyX3QJCQl0cmFjaW5nX3JlYWRlcl9jcHVtYXNrOwotCiAjZGVmaW5lIGZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkJXAogCWZvcl9lYWNoX2NwdShjcHUsIHRyYWNpbmdfYnVmZmVyX21hc2spCiAKQEAgLTI0MywxMiArMjQxLDkxIEBACiAKIC8qCiAgKiB0cmFjZV90eXBlc19sb2NrIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgdHJhY2VfdHlwZXMgbGlzdC4KLSAqIFRoaXMgbG9jayBpcyBhbHNvIHVzZWQgdG8ga2VlcCB1c2VyIGFjY2VzcyBzZXJpYWxpemVkLgotICogQWNjZXNzZXMgZnJvbSB1c2Vyc3BhY2Ugd2lsbCBncmFiIHRoaXMgbG9jayB3aGlsZSB1c2Vyc3BhY2UKLSAqIGFjdGl2aXRpZXMgaGFwcGVuIGluc2lkZSB0aGUga2VybmVsLgogICovCiBzdGF0aWMgREVGSU5FX01VVEVYKHRyYWNlX3R5cGVzX2xvY2spOwogCisvKgorICogc2VyaWFsaXplIHRoZSBhY2Nlc3Mgb2YgdGhlIHJpbmcgYnVmZmVyCisgKgorICogcmluZyBidWZmZXIgc2VyaWFsaXplcyByZWFkZXJzLCBidXQgaXQgaXMgbG93IGxldmVsIHByb3RlY3Rpb24uCisgKiBUaGUgdmFsaWRpdHkgb2YgdGhlIGV2ZW50cyAod2hpY2ggcmV0dXJucyBieSByaW5nX2J1ZmZlcl9wZWVrKCkgLi5ldGMpCisgKiBhcmUgbm90IHByb3RlY3RlZCBieSByaW5nIGJ1ZmZlci4KKyAqCisgKiBUaGUgY29udGVudCBvZiBldmVudHMgbWF5IGJlY29tZSBnYXJiYWdlIGlmIHdlIGFsbG93IG90aGVyIHByb2Nlc3MgY29uc3VtZXMKKyAqIHRoZXNlIGV2ZW50cyBjb25jdXJyZW50bHk6CisgKiAgIEEpIHRoZSBwYWdlIG9mIHRoZSBjb25zdW1lZCBldmVudHMgbWF5IGJlY29tZSBhIG5vcm1hbCBwYWdlCisgKiAgICAgIChub3QgcmVhZGVyIHBhZ2UpIGluIHJpbmcgYnVmZmVyLCBhbmQgdGhpcyBwYWdlIHdpbGwgYmUgcmV3cml0ZWQKKyAqICAgICAgYnkgZXZlbnRzIHByb2R1Y2VyLgorICogICBCKSBUaGUgcGFnZSBvZiB0aGUgY29uc3VtZWQgZXZlbnRzIG1heSBiZWNvbWUgYSBwYWdlIGZvciBzcGxpY2VfcmVhZCwKKyAqICAgICAgYW5kIHRoaXMgcGFnZSB3aWxsIGJlIHJldHVybmVkIHRvIHN5c3RlbS4KKyAqCisgKiBUaGVzZSBwcmltaXRpdmVzIGFsbG93IG11bHRpIHByb2Nlc3MgYWNjZXNzIHRvIGRpZmZlcmVudCBjcHUgcmluZyBidWZmZXIKKyAqIGNvbmN1cnJlbnRseS4KKyAqCisgKiBUaGVzZSBwcmltaXRpdmVzIGRvbid0IGRpc3Rpbmd1aXNoIHJlYWQtb25seSBhbmQgcmVhZC1jb25zdW1lIGFjY2Vzcy4KKyAqIE11bHRpIHJlYWQtb25seSBhY2Nlc3MgYXJlIGFsc28gc2VyaWFsaXplZC4KKyAqLworCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIERFQ0xBUkVfUldTRU0oYWxsX2NwdV9hY2Nlc3NfbG9jayk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IG11dGV4LCBjcHVfYWNjZXNzX2xvY2spOworCitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfYWNjZXNzX2xvY2soaW50IGNwdSkKK3sKKwlpZiAoY3B1ID09IFRSQUNFX1BJUEVfQUxMX0NQVSkgeworCQkvKiBnYWluIGl0IGZvciBhY2Nlc3NpbmcgdGhlIHdob2xlIHJpbmcgYnVmZmVyLiAqLworCQlkb3duX3dyaXRlKCZhbGxfY3B1X2FjY2Vzc19sb2NrKTsKKwl9IGVsc2UgeworCQkvKiBnYWluIGl0IGZvciBhY2Nlc3NpbmcgYSBjcHUgcmluZyBidWZmZXIuICovCisKKwkJLyogRmlyc3RseSBibG9jayBvdGhlciB0cmFjZV9hY2Nlc3NfbG9jayhUUkFDRV9QSVBFX0FMTF9DUFUpLiAqLworCQlkb3duX3JlYWQoJmFsbF9jcHVfYWNjZXNzX2xvY2spOworCisJCS8qIFNlY29uZGx5IGJsb2NrIG90aGVyIGFjY2VzcyB0byB0aGlzIEBjcHUgcmluZyBidWZmZXIuICovCisJCW11dGV4X2xvY2soJnBlcl9jcHUoY3B1X2FjY2Vzc19sb2NrLCBjcHUpKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9hY2Nlc3NfdW5sb2NrKGludCBjcHUpCit7CisJaWYgKGNwdSA9PSBUUkFDRV9QSVBFX0FMTF9DUFUpIHsKKwkJdXBfd3JpdGUoJmFsbF9jcHVfYWNjZXNzX2xvY2spOworCX0gZWxzZSB7CisJCW11dGV4X3VubG9jaygmcGVyX2NwdShjcHVfYWNjZXNzX2xvY2ssIGNwdSkpOworCQl1cF9yZWFkKCZhbGxfY3B1X2FjY2Vzc19sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9hY2Nlc3NfbG9ja19pbml0KHZvaWQpCit7CisJaW50IGNwdTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCisJCW11dGV4X2luaXQoJnBlcl9jcHUoY3B1X2FjY2Vzc19sb2NrLCBjcHUpKTsKK30KKworI2Vsc2UKKworc3RhdGljIERFRklORV9NVVRFWChhY2Nlc3NfbG9jayk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9hY2Nlc3NfbG9jayhpbnQgY3B1KQoreworCSh2b2lkKWNwdTsKKwltdXRleF9sb2NrKCZhY2Nlc3NfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9hY2Nlc3NfdW5sb2NrKGludCBjcHUpCit7CisJKHZvaWQpY3B1OworCW11dGV4X3VubG9jaygmYWNjZXNzX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfYWNjZXNzX2xvY2tfaW5pdCh2b2lkKQoreworfQorCisjZW5kaWYKKwogLyogdHJhY2Vfd2FpdCBpcyBhIHdhaXRxdWV1ZSBmb3IgdGFza3MgYmxvY2tlZCBvbiB0cmFjZV9wb2xsICovCiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQodHJhY2Vfd2FpdCk7CiAKQEAgLTk1MSw2ICsxMDI4LDExIEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAoV0FSTl9PTl9PTkNFKHBpZCA8IDApKSB7CisJCXN0cmNweShjb21tLCAiPFhYWD4iKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChwaWQgPiBQSURfTUFYX0RFRkFVTFQpIHsKIAkJc3RyY3B5KGNvbW0sICI8Li4uPiIpOwogCQlyZXR1cm47CkBAIC0xMzE1LDggKzEzOTcsMTAgQEAKIAllbnRyeS0+Zm10CQkJPSBmbXQ7CiAKIAltZW1jcHkoZW50cnktPmJ1ZiwgdHJhY2VfYnVmLCBzaXplb2YodTMyKSAqIGxlbik7Ci0JaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCisJaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpIHsKIAkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50KTsKKwkJZnRyYWNlX3RyYWNlX3N0YWNrKGJ1ZmZlciwgZmxhZ3MsIDYsIHBjKTsKKwl9CiAKIG91dF91bmxvY2s6CiAJYXJjaF9zcGluX3VubG9jaygmdHJhY2VfYnVmX2xvY2spOwpAQCAtMTM4OSw4ICsxNDczLDEwIEBACiAKIAltZW1jcHkoJmVudHJ5LT5idWYsIHRyYWNlX2J1ZiwgbGVuKTsKIAllbnRyeS0+YnVmW2xlbl0gPSAnXDAnOwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQorCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKSB7CiAJCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCk7CisJCWZ0cmFjZV90cmFjZV9zdGFjayhidWZmZXIsIGlycV9mbGFncywgNiwgcGMpOworCX0KIAogIG91dF91bmxvY2s6CiAJYXJjaF9zcGluX3VubG9jaygmdHJhY2VfYnVmX2xvY2spOwpAQCAtMTU4MCwxMiArMTY2Niw2IEBACiB9CiAKIC8qCi0gKiBObyBuZWNlc3NhcnkgbG9ja2luZyBoZXJlLiBUaGUgd29yc3QgdGhpbmcgd2hpY2ggY2FuCi0gKiBoYXBwZW4gaXMgbG9vc2luZyBldmVudHMgY29uc3VtZWQgYXQgdGhlIHNhbWUgdGltZQotICogYnkgYSB0cmFjZV9waXBlIHJlYWRlci4KLSAqIE90aGVyIHRoYW4gdGhhdCwgd2UgZG9uJ3QgcmlzayB0byBjcmFzaCB0aGUgcmluZyBidWZmZXIKLSAqIGJlY2F1c2UgaXQgc2VyaWFsaXplcyB0aGUgcmVhZGVycy4KLSAqCiAgKiBUaGUgY3VycmVudCB0cmFjZXIgaXMgY29waWVkIHRvIGF2b2lkIGEgZ2xvYmFsIGxvY2tpbmcKICAqIGFsbCBhcm91bmQuCiAgKi8KQEAgLTE2NDAsMTIgKzE3MjAsMTYgQEAKIAl9CiAKIAl0cmFjZV9ldmVudF9yZWFkX2xvY2soKTsKKwl0cmFjZV9hY2Nlc3NfbG9jayhjcHVfZmlsZSk7CiAJcmV0dXJuIHA7CiB9CiAKIHN0YXRpYyB2b2lkIHNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCiB7CisJc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyID0gbS0+cHJpdmF0ZTsKKwogCWF0b21pY19kZWMoJnRyYWNlX3JlY29yZF9jbWRsaW5lX2Rpc2FibGVkKTsKKwl0cmFjZV9hY2Nlc3NfdW5sb2NrKGl0ZXItPmNwdV9maWxlKTsKIAl0cmFjZV9ldmVudF9yZWFkX3VubG9jaygpOwogfQogCkBAIC0yODM2LDIyICsyOTIwLDYgQEAKIAogCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCi0JLyogV2Ugb25seSBhbGxvdyBvbmUgcmVhZGVyIHBlciBjcHUgKi8KLQlpZiAoY3B1X2ZpbGUgPT0gVFJBQ0VfUElQRV9BTExfQ1BVKSB7Ci0JCWlmICghY3B1bWFza19lbXB0eSh0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKSkgewotCQkJcmV0ID0gLUVCVVNZOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJY3B1bWFza19zZXRhbGwodHJhY2luZ19yZWFkZXJfY3B1bWFzayk7Ci0JfSBlbHNlIHsKLQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdV9maWxlLCB0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKSkKLQkJCWNwdW1hc2tfc2V0X2NwdShjcHVfZmlsZSwgdHJhY2luZ19yZWFkZXJfY3B1bWFzayk7Ci0JCWVsc2UgewotCQkJcmV0ID0gLUVCVVNZOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KIAkvKiBjcmVhdGUgYSBidWZmZXIgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIHRvIHBhc3MgdG8gdXNlcnNwYWNlICovCiAJaXRlciA9IGt6YWxsb2Moc2l6ZW9mKCppdGVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpdGVyKSB7CkBAIC0yOTA3LDEyICsyOTc1LDYgQEAKIAogCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCi0JaWYgKGl0ZXItPmNwdV9maWxlID09IFRSQUNFX1BJUEVfQUxMX0NQVSkKLQkJY3B1bWFza19jbGVhcih0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKTsKLQllbHNlCi0JCWNwdW1hc2tfY2xlYXJfY3B1KGl0ZXItPmNwdV9maWxlLCB0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKTsKLQotCiAJaWYgKGl0ZXItPnRyYWNlLT5waXBlX2Nsb3NlKQogCQlpdGVyLT50cmFjZS0+cGlwZV9jbG9zZShpdGVyKTsKIApAQCAtMzA3NCw2ICszMTM2LDcgQEAKIAlpdGVyLT5wb3MgPSAtMTsKIAogCXRyYWNlX2V2ZW50X3JlYWRfbG9jaygpOworCXRyYWNlX2FjY2Vzc19sb2NrKGl0ZXItPmNwdV9maWxlKTsKIAl3aGlsZSAoZmluZF9uZXh0X2VudHJ5X2luYyhpdGVyKSAhPSBOVUxMKSB7CiAJCWVudW0gcHJpbnRfbGluZV90IHJldDsKIAkJaW50IGxlbiA9IGl0ZXItPnNlcS5sZW47CkBAIC0zMDkwLDYgKzMxNTMsNyBAQAogCQlpZiAoaXRlci0+c2VxLmxlbiA+PSBjbnQpCiAJCQlicmVhazsKIAl9CisJdHJhY2VfYWNjZXNzX3VubG9jayhpdGVyLT5jcHVfZmlsZSk7CiAJdHJhY2VfZXZlbnRfcmVhZF91bmxvY2soKTsKIAogCS8qIE5vdyBjb3B5IHdoYXQgd2UgaGF2ZSB0byB0aGUgdXNlciAqLwpAQCAtMzIxNSw2ICszMjc5LDcgQEAKIAl9CiAKIAl0cmFjZV9ldmVudF9yZWFkX2xvY2soKTsKKwl0cmFjZV9hY2Nlc3NfbG9jayhpdGVyLT5jcHVfZmlsZSk7CiAKIAkvKiBGaWxsIGFzIG1hbnkgcGFnZXMgYXMgcG9zc2libGUuICovCiAJZm9yIChpID0gMCwgcmVtID0gbGVuOyBpIDwgUElQRV9CVUZGRVJTICYmIHJlbTsgaSsrKSB7CkBAIC0zMjM4LDYgKzMzMDMsNyBAQAogCQl0cmFjZV9zZXFfaW5pdCgmaXRlci0+c2VxKTsKIAl9CiAKKwl0cmFjZV9hY2Nlc3NfdW5sb2NrKGl0ZXItPmNwdV9maWxlKTsKIAl0cmFjZV9ldmVudF9yZWFkX3VubG9jaygpOwogCW11dGV4X3VubG9jaygmaXRlci0+bXV0ZXgpOwogCkBAIC0zNTM5LDEwICszNjA1LDEyIEBACiAKIAlpbmZvLT5yZWFkID0gMDsKIAorCXRyYWNlX2FjY2Vzc19sb2NrKGluZm8tPmNwdSk7CiAJcmV0ID0gcmluZ19idWZmZXJfcmVhZF9wYWdlKGluZm8tPnRyLT5idWZmZXIsCiAJCQkJICAgICZpbmZvLT5zcGFyZSwKIAkJCQkgICAgY291bnQsCiAJCQkJICAgIGluZm8tPmNwdSwgMCk7CisJdHJhY2VfYWNjZXNzX3VubG9jayhpbmZvLT5jcHUpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gMDsKIApAQCAtMzY3MCw2ICszNzM4LDcgQEAKIAkJbGVuICY9IFBBR0VfTUFTSzsKIAl9CiAKKwl0cmFjZV9hY2Nlc3NfbG9jayhpbmZvLT5jcHUpOwogCWVudHJpZXMgPSByaW5nX2J1ZmZlcl9lbnRyaWVzX2NwdShpbmZvLT50ci0+YnVmZmVyLCBpbmZvLT5jcHUpOwogCiAJZm9yIChpID0gMDsgaSA8IFBJUEVfQlVGRkVSUyAmJiBsZW4gJiYgZW50cmllczsgaSsrLCBsZW4gLT0gUEFHRV9TSVpFKSB7CkBAIC0zNzE3LDYgKzM3ODYsNyBAQAogCQllbnRyaWVzID0gcmluZ19idWZmZXJfZW50cmllc19jcHUoaW5mby0+dHItPmJ1ZmZlciwgaW5mby0+Y3B1KTsKIAl9CiAKKwl0cmFjZV9hY2Nlc3NfdW5sb2NrKGluZm8tPmNwdSk7CiAJc3BkLm5yX3BhZ2VzID0gaTsKIAogCS8qIGRpZCB3ZSByZWFkIGFueXRoaW5nPyAqLwpAQCAtNDE1Myw2ICs0MjIzLDggQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKIAlpbnQgY3B1OwogCisJdHJhY2VfYWNjZXNzX2xvY2tfaW5pdCgpOworCiAJZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7CiAKIAl0cmFjZV9jcmVhdGVfZmlsZSgidHJhY2luZ19lbmFibGVkIiwgMDY0NCwgZF90cmFjZXIsCkBAIC00Mzg3LDkgKzQ0NTksNiBAQAogCWlmICghYWxsb2NfY3B1bWFza192YXIoJnRyYWNpbmdfY3B1bWFzaywgR0ZQX0tFUk5FTCkpCiAJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyX21hc2s7CiAKLQlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmdHJhY2luZ19yZWFkZXJfY3B1bWFzaywgR0ZQX0tFUk5FTCkpCi0JCWdvdG8gb3V0X2ZyZWVfdHJhY2luZ19jcHVtYXNrOwotCiAJLyogVG8gc2F2ZSBtZW1vcnksIGtlZXAgdGhlIHJpbmcgYnVmZmVyIHNpemUgdG8gaXRzIG1pbmltdW0gKi8KIAlpZiAocmluZ19idWZmZXJfZXhwYW5kZWQpCiAJCXJpbmdfYnVmX3NpemUgPSB0cmFjZV9idWZfc2l6ZTsKQEAgLTQ0NDcsOCArNDUxNiw2IEBACiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlX2NwdW1hc2s6Ci0JZnJlZV9jcHVtYXNrX3Zhcih0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKTsKLW91dF9mcmVlX3RyYWNpbmdfY3B1bWFzazoKIAlmcmVlX2NwdW1hc2tfdmFyKHRyYWNpbmdfY3B1bWFzayk7CiBvdXRfZnJlZV9idWZmZXJfbWFzazoKIAlmcmVlX2NwdW1hc2tfdmFyKHRyYWNpbmdfYnVmZmVyX21hc2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmggYi9rZXJuZWwvdHJhY2UvdHJhY2UuaAppbmRleCA0ZGY2YTc3Li5mZDA1YmNhIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuaAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuaApAQCAtNDk3LDYgKzQ5Nyw3IEBACiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAvKiBUT0RPOiBtYWtlIHRoaXMgdmFyaWFibGUgKi8KICNkZWZpbmUgRlRSQUNFX0dSQVBIX01BWF9GVU5DUwkJMzIKK2V4dGVybiBpbnQgZnRyYWNlX2dyYXBoX2ZpbHRlcl9lbmFibGVkOwogZXh0ZXJuIGludCBmdHJhY2VfZ3JhcGhfY291bnQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBmdHJhY2VfZ3JhcGhfZnVuY3NbRlRSQUNFX0dSQVBIX01BWF9GVU5DU107CiAKQEAgLTUwNCw3ICs1MDUsNyBAQAogewogCWludCBpOwogCi0JaWYgKCFmdHJhY2VfZ3JhcGhfY291bnQgfHwgdGVzdF90c2tfdHJhY2VfZ3JhcGgoY3VycmVudCkpCisJaWYgKCFmdHJhY2VfZ3JhcGhfZmlsdGVyX2VuYWJsZWQpCiAJCXJldHVybiAxOwogCiAJZm9yIChpID0gMDsgaSA8IGZ0cmFjZV9ncmFwaF9jb3VudDsgaSsrKSB7CkBAIC03OTEsNyArNzkyLDggQEAKIAogI3VuZGVmIEZUUkFDRV9FTlRSWQogI2RlZmluZSBGVFJBQ0VfRU5UUlkoY2FsbCwgc3RydWN0X25hbWUsIGlkLCB0c3RydWN0LCBwcmludCkJCVwKLQlleHRlcm4gc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIGV2ZW50XyMjY2FsbDsKKwlleHRlcm4gc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsCQkJCQlcCisJX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKSBldmVudF8jI2NhbGw7CiAjdW5kZWYgRlRSQUNFX0VOVFJZX0RVUAogI2RlZmluZSBGVFJBQ0VfRU5UUllfRFVQKGNhbGwsIHN0cnVjdF9uYW1lLCBpZCwgdHN0cnVjdCwgcHJpbnQpCQlcCiAJRlRSQUNFX0VOVFJZKGNhbGwsIHN0cnVjdF9uYW1lLCBpZCwgUEFSQU1TKHRzdHJ1Y3QpLCBQQVJBTVMocHJpbnQpKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jCmluZGV4IDRhMTk0ZjAuLmI5YmM0ZDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMKQEAgLTMwNyw4ICszMDcsMjMgQEAKIAkJcmV0dXJuIC0xOwogCWlmIChwZXJjZW50X2EgPiBwZXJjZW50X2IpCiAJCXJldHVybiAxOwotCWVsc2UKLQkJcmV0dXJuIDA7CisKKwlpZiAoYS0+aW5jb3JyZWN0IDwgYi0+aW5jb3JyZWN0KQorCQlyZXR1cm4gLTE7CisJaWYgKGEtPmluY29ycmVjdCA+IGItPmluY29ycmVjdCkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIFNpbmNlIHRoZSBhYm92ZSBzaG93cyB3b3JzZSAoaW5jb3JyZWN0KSBjYXNlcworCSAqIGZpcnN0LCB3ZSBjb250aW51ZSB0aGF0IGJ5IHNob3dpbmcgYmVzdCAoY29ycmVjdCkKKwkgKiBjYXNlcyBsYXN0LgorCSAqLworCWlmIChhLT5jb3JyZWN0ID4gYi0+Y29ycmVjdCkKKwkJcmV0dXJuIC0xOworCWlmIChhLT5jb3JyZWN0IDwgYi0+Y29ycmVjdCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCB0cmFjZXJfc3RhdCBhbm5vdGF0ZWRfYnJhbmNoX3N0YXRzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKaW5kZXggOWUyNTU3My4uZjBkNjkzMCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCkBAIC02LDE0ICs2LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlICJ0cmFjZS5oIgogCiAKLWNoYXIgKnBlcmZfdHJhY2VfYnVmOwotRVhQT1JUX1NZTUJPTF9HUEwocGVyZl90cmFjZV9idWYpOwotCi1jaGFyICpwZXJmX3RyYWNlX2J1Zl9ubWk7Ci1FWFBPUlRfU1lNQk9MX0dQTChwZXJmX3RyYWNlX2J1Zl9ubWkpOworc3RhdGljIGNoYXIgKnBlcmZfdHJhY2VfYnVmOworc3RhdGljIGNoYXIgKnBlcmZfdHJhY2VfYnVmX25taTsKIAogdHlwZWRlZiB0eXBlb2YoY2hhciBbRlRSQUNFX01BWF9QUk9GSUxFX1NJWkVdKSBwZXJmX3RyYWNlX3QgOwogCkBAIC0xMjAsMyArMTE4LDQ3IEBACiAJfQogCW11dGV4X3VubG9jaygmZXZlbnRfbXV0ZXgpOwogfQorCitfX2twcm9iZXMgdm9pZCAqZnRyYWNlX3BlcmZfYnVmX3ByZXBhcmUoaW50IHNpemUsIHVuc2lnbmVkIHNob3J0IHR5cGUsCisJCQkJCWludCAqcmN0eHAsIHVuc2lnbmVkIGxvbmcgKmlycV9mbGFncykKK3sKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OworCWNoYXIgKnRyYWNlX2J1ZiwgKnJhd19kYXRhOworCWludCBwYywgY3B1OworCisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisKKwkvKiBQcm90ZWN0IHRoZSBwZXIgY3B1IGJ1ZmZlciwgYmVnaW4gdGhlIHJjdSByZWFkIHNpZGUgKi8KKwlsb2NhbF9pcnFfc2F2ZSgqaXJxX2ZsYWdzKTsKKworCSpyY3R4cCA9IHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQoKTsKKwlpZiAoKnJjdHhwIDwgMCkKKwkJZ290byBlcnJfcmVjdXJzaW9uOworCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKGluX25taSgpKQorCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWZfbm1pKTsKKwllbHNlCisJCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zik7CisKKwlpZiAoIXRyYWNlX2J1ZikKKwkJZ290byBlcnI7CisKKwlyYXdfZGF0YSA9IHBlcl9jcHVfcHRyKHRyYWNlX2J1ZiwgY3B1KTsKKworCS8qIHplcm8gdGhlIGRlYWQgYnl0ZXMgZnJvbSBhbGlnbiB0byBub3QgbGVhayBzdGFjayB0byB1c2VyICovCisJKih1NjQgKikoJnJhd19kYXRhW3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsKKworCWVudHJ5ID0gKHN0cnVjdCB0cmFjZV9lbnRyeSAqKXJhd19kYXRhOworCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoZW50cnksICppcnFfZmxhZ3MsIHBjKTsKKwllbnRyeS0+dHlwZSA9IHR5cGU7CisKKwlyZXR1cm4gcmF3X2RhdGE7CitlcnI6CisJcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dCgqcmN0eHApOworZXJyX3JlY3Vyc2lvbjoKKwlsb2NhbF9pcnFfcmVzdG9yZSgqaXJxX2ZsYWdzKTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZ0cmFjZV9wZXJmX2J1Zl9wcmVwYXJlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwppbmRleCAxODliMDliLi4zZjk3MmFkOSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwpAQCAtNjAsMTAgKzYwLDggQEAKIAlyZXR1cm4gMDsKIAogZXJyOgotCWlmIChmaWVsZCkgeworCWlmIChmaWVsZCkKIAkJa2ZyZWUoZmllbGQtPm5hbWUpOwotCQlrZnJlZShmaWVsZC0+dHlwZSk7Ci0JfQogCWtmcmVlKGZpZWxkKTsKIAogCXJldHVybiAtRU5PTUVNOwpAQCAtNTIwLDQxICs1MTgsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1leHRlcm4gY2hhciAqX19iYWRfdHlwZV9zaXplKHZvaWQpOwotCi0jdW5kZWYgRklFTEQKLSNkZWZpbmUgRklFTEQodHlwZSwgbmFtZSkJCQkJCQlcCi0Jc2l6ZW9mKHR5cGUpICE9IHNpemVvZihmaWVsZC5uYW1lKSA/IF9fYmFkX3R5cGVfc2l6ZSgpIDoJXAotCSN0eXBlLCAiY29tbW9uXyIgI25hbWUsIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIG5hbWUpLAkJXAotCQlzaXplb2YoZmllbGQubmFtZSksIGlzX3NpZ25lZF90eXBlKHR5cGUpCi0KLXN0YXRpYyBpbnQgdHJhY2Vfd3JpdGVfaGVhZGVyKHN0cnVjdCB0cmFjZV9zZXEgKnMpCi17Ci0Jc3RydWN0IHRyYWNlX2VudHJ5IGZpZWxkOwotCi0JLyogc3RydWN0IHRyYWNlX2VudHJ5ICovCi0JcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywKLQkJCSJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIgotCQkJIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iCi0JCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIKLQkJCSJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIgotCQkJIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iCi0JCQkiXG4iLAotCQkJRklFTEQodW5zaWduZWQgc2hvcnQsIHR5cGUpLAotCQkJRklFTEQodW5zaWduZWQgY2hhciwgZmxhZ3MpLAotCQkJRklFTEQodW5zaWduZWQgY2hhciwgcHJlZW1wdF9jb3VudCksCi0JCQlGSUVMRChpbnQsIHBpZCksCi0JCQlGSUVMRChpbnQsIGxvY2tfZGVwdGgpKTsKLX0KLQogc3RhdGljIHNzaXplX3QKIGV2ZW50X2Zvcm1hdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCwKIAkJICBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmdHJhY2VfZXZlbnRfZmllbGQgKmZpZWxkOwogCXN0cnVjdCB0cmFjZV9zZXEgKnM7CisJaW50IGNvbW1vbl9maWVsZF9jb3VudCA9IDU7CiAJY2hhciAqYnVmOwotCWludCByOworCWludCByID0gMDsKIAogCWlmICgqcHBvcykKIAkJcmV0dXJuIDA7CkBAIC01NjUsMTQgKzUzOCw0OCBAQAogCiAJdHJhY2Vfc2VxX2luaXQocyk7CiAKLQkvKiBJZiBhbnkgb2YgdGhlIGZpcnN0IHdyaXRlcyBmYWlsLCBzbyB3aWxsIHRoZSBzaG93X2Zvcm1hdC4gKi8KLQogCXRyYWNlX3NlcV9wcmludGYocywgIm5hbWU6ICVzXG4iLCBjYWxsLT5uYW1lKTsKIAl0cmFjZV9zZXFfcHJpbnRmKHMsICJJRDogJWRcbiIsIGNhbGwtPmlkKTsKIAl0cmFjZV9zZXFfcHJpbnRmKHMsICJmb3JtYXQ6XG4iKTsKLQl0cmFjZV93cml0ZV9oZWFkZXIocyk7CiAKLQlyID0gY2FsbC0+c2hvd19mb3JtYXQoY2FsbCwgcyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGZpZWxkLCAmY2FsbC0+ZmllbGRzLCBsaW5rKSB7CisJCS8qCisJCSAqIFNtYXJ0bHkgc2hvd3MgdGhlIGFycmF5IHR5cGUoZXhjZXB0IGR5bmFtaWMgYXJyYXkpLgorCQkgKiBOb3JtYWw6CisJCSAqCWZpZWxkOlRZUEUgVkFSCisJCSAqIElmIFRZUEUgOj0gVFlQRVtMRU5dLCBpdCBpcyBzaG93bjoKKwkJICoJZmllbGQ6VFlQRSBWQVJbTEVOXQorCQkgKi8KKwkJY29uc3QgY2hhciAqYXJyYXlfZGVzY3JpcHRvciA9IHN0cmNocihmaWVsZC0+dHlwZSwgJ1snKTsKKworCQlpZiAoIXN0cm5jbXAoZmllbGQtPnR5cGUsICJfX2RhdGFfbG9jIiwgMTApKQorCQkJYXJyYXlfZGVzY3JpcHRvciA9IE5VTEw7CisKKwkJaWYgKCFhcnJheV9kZXNjcmlwdG9yKSB7CisJCQlyID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDolcyAlcztcdG9mZnNldDoldTsiCisJCQkJCSJcdHNpemU6JXU7XHRzaWduZWQ6JWQ7XG4iLAorCQkJCQlmaWVsZC0+dHlwZSwgZmllbGQtPm5hbWUsIGZpZWxkLT5vZmZzZXQsCisJCQkJCWZpZWxkLT5zaXplLCAhIWZpZWxkLT5pc19zaWduZWQpOworCQl9IGVsc2UgeworCQkJciA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6JS4qcyAlcyVzO1x0b2Zmc2V0OiV1OyIKKwkJCQkJIlx0c2l6ZToldTtcdHNpZ25lZDolZDtcbiIsCisJCQkJCShpbnQpKGFycmF5X2Rlc2NyaXB0b3IgLSBmaWVsZC0+dHlwZSksCisJCQkJCWZpZWxkLT50eXBlLCBmaWVsZC0+bmFtZSwKKwkJCQkJYXJyYXlfZGVzY3JpcHRvciwgZmllbGQtPm9mZnNldCwKKwkJCQkJZmllbGQtPnNpemUsICEhZmllbGQtPmlzX3NpZ25lZCk7CisJCX0KKworCQlpZiAoLS1jb21tb25fZmllbGRfY291bnQgPT0gMCkKKwkJCXIgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcbiIpOworCisJCWlmICghcikKKwkJCWJyZWFrOworCX0KKworCWlmIChyKQorCQlyID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG5wcmludCBmbXQ6ICVzXG4iLAorCQkJCWNhbGwtPnByaW50X2ZtdCk7CisKIAlpZiAoIXIpIHsKIAkJLyoKIAkJICogdWchICBUaGUgZm9ybWF0IG91dHB1dCBpcyBiaWdnZXIgdGhhbiBhIFBBR0UhIQpAQCAtOTQ4LDEwICs5NTUsNiBAQAogCQkJCSAgZmlsdGVyKTsKIAl9CiAKLQkvKiBBIHRyYWNlIG1heSBub3Qgd2FudCB0byBleHBvcnQgaXRzIGZvcm1hdCAqLwotCWlmICghY2FsbC0+c2hvd19mb3JtYXQpCi0JCXJldHVybiAwOwotCiAJdHJhY2VfY3JlYXRlX2ZpbGUoImZvcm1hdCIsIDA0NDQsIGNhbGwtPmRpciwgY2FsbCwKIAkJCSAgZm9ybWF0KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKaW5kZXggZTQyYWY5YS4uNDYxNWY2MiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCkBAIC0xMzcxLDcgKzEzNzEsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCiB2b2lkIGZ0cmFjZV9wcm9maWxlX2ZyZWVfZmlsdGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKQEAgLTE0MzksNSArMTQzOSw1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19FVkVOVF9QUk9GSUxFICovCisjZW5kaWYgLyogQ09ORklHX1BFUkZfRVZFTlRTICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwppbmRleCBkNGZhNWRjLi5lMDkxZjY0IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCkBAIC02Miw3OCArNjIsNiBAQAogCiAjaW5jbHVkZSAidHJhY2VfZW50cmllcy5oIgogCi0KLSN1bmRlZiBfX2ZpZWxkCi0jZGVmaW5lIF9fZmllbGQodHlwZSwgaXRlbSkJCQkJCQlcCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiO1x0IglcCi0JCQkgICAgICAgIm9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIsCVwKLQkJCSAgICAgICBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwJCVwKLQkJCSAgICAgICBzaXplb2YoZmllbGQuaXRlbSksIGlzX3NpZ25lZF90eXBlKHR5cGUpKTsgXAotCWlmICghcmV0KQkJCQkJCQlcCi0JCXJldHVybiAwOwotCi0jdW5kZWYgX19maWVsZF9kZXNjCi0jZGVmaW5lIF9fZmllbGRfZGVzYyh0eXBlLCBjb250YWluZXIsIGl0ZW0pCQkJCVwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICI7XHQiCVwKLQkJCSAgICAgICAib2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIiwJXAotCQkJICAgICAgIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGNvbnRhaW5lci5pdGVtKSwJXAotCQkJICAgICAgIHNpemVvZihmaWVsZC5jb250YWluZXIuaXRlbSksCQlcCi0JCQkgICAgICAgaXNfc2lnbmVkX3R5cGUodHlwZSkpOwkJCVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIF9fYXJyYXkKLSNkZWZpbmUgX19hcnJheSh0eXBlLCBpdGVtLCBsZW4pCQkJCQlcCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiWyIgI2xlbiAiXTtcdCIgXAotCQkJICAgICAgICJvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iLAlcCi0JCQkgICAgICAgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksCQlcCi0JCQkgICAgICAgc2l6ZW9mKGZpZWxkLml0ZW0pLCBpc19zaWduZWRfdHlwZSh0eXBlKSk7IFwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIF9fYXJyYXlfZGVzYwotI2RlZmluZSBfX2FycmF5X2Rlc2ModHlwZSwgY29udGFpbmVyLCBpdGVtLCBsZW4pCQkJXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIlsiICNsZW4gIl07XHQiIFwKLQkJCSAgICAgICAib2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIiwJXAotCQkJICAgICAgIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGNvbnRhaW5lci5pdGVtKSwJXAotCQkJICAgICAgIHNpemVvZihmaWVsZC5jb250YWluZXIuaXRlbSksCQlcCi0JCQkgICAgICAgaXNfc2lnbmVkX3R5cGUodHlwZSkpOwkJCVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIF9fZHluYW1pY19hcnJheQotI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSkJCQkJCVwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICI7XHQiCVwKLQkJCSAgICAgICAib2Zmc2V0OiV6dTtcdHNpemU6MDtcdHNpZ25lZDoldTtcbiIsCVwKLQkJCSAgICAgICBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwJCVwKLQkJCSAgICAgICBpc19zaWduZWRfdHlwZSh0eXBlKSk7CQkJXAotCWlmICghcmV0KQkJCQkJCQlcCi0JCXJldHVybiAwOwotCi0jdW5kZWYgRl9wcmludGsKLSNkZWZpbmUgRl9wcmludGsoZm10LCBhcmdzLi4uKSAiJXMsICVzXG4iLCAjZm10LCBfX3N0cmluZ2lmeShhcmdzKQotCi0jdW5kZWYgX19lbnRyeQotI2RlZmluZSBfX2VudHJ5IFJFQwotCi0jdW5kZWYgRlRSQUNFX0VOVFJZCi0jZGVmaW5lIEZUUkFDRV9FTlRSWShuYW1lLCBzdHJ1Y3RfbmFtZSwgaWQsIHRzdHJ1Y3QsIHByaW50KQkJXAotc3RhdGljIGludAkJCQkJCQkJXAotZnRyYWNlX2Zvcm1hdF8jI25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQsCQkJXAotCQkgICAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpCQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHN0cnVjdF9uYW1lIGZpZWxkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpOwkJXAotCWludCByZXQgPSAwOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JdHN0cnVjdDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCXRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiAiIHByaW50KTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldDsJCQkJCQkJXAotfQotCi0jaW5jbHVkZSAidHJhY2VfZW50cmllcy5oIgotCiAjdW5kZWYgX19maWVsZAogI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCQkJCQkJXAogCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCAjdHlwZSwgI2l0ZW0sCQlcCkBAIC0xNzUsNyArMTAzLDEyIEBACiAJCXJldHVybiByZXQ7CiAKICN1bmRlZiBfX2R5bmFtaWNfYXJyYXkKLSNkZWZpbmUgX19keW5hbWljX2FycmF5KHR5cGUsIGl0ZW0pCisjZGVmaW5lIF9fZHluYW1pY19hcnJheSh0eXBlLCBpdGVtKQkJCQkJXAorCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCAjdHlwZSwgI2l0ZW0sCQlcCisJCQkJIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLAkJXAorCQkJCSAwLCBpc19zaWduZWRfdHlwZSh0eXBlKSwgRklMVEVSX09USEVSKTtcCisJaWYgKHJldCkJCQkJCQkJXAorCQlyZXR1cm4gcmV0OwogCiAjdW5kZWYgRlRSQUNFX0VOVFJZCiAjZGVmaW5lIEZUUkFDRV9FTlRSWShuYW1lLCBzdHJ1Y3RfbmFtZSwgaWQsIHRzdHJ1Y3QsIHByaW50KQkJXApAQCAtMTk4LDYgKzEzMSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKKyN1bmRlZiBfX2VudHJ5CisjZGVmaW5lIF9fZW50cnkgUkVDCisKICN1bmRlZiBfX2ZpZWxkCiAjZGVmaW5lIF9fZmllbGQodHlwZSwgaXRlbSkKIApAQCAtMjEzLDYgKzE0OSw5IEBACiAjdW5kZWYgX19keW5hbWljX2FycmF5CiAjZGVmaW5lIF9fZHluYW1pY19hcnJheSh0eXBlLCBpdGVtKQogCisjdW5kZWYgRl9wcmludGsKKyNkZWZpbmUgRl9wcmludGsoZm10LCBhcmdzLi4uKSAjZm10ICIsICIgIF9fc3RyaW5naWZ5KGFyZ3MpCisKICN1bmRlZiBGVFJBQ0VfRU5UUlkKICNkZWZpbmUgRlRSQUNFX0VOVFJZKGNhbGwsIHN0cnVjdF9uYW1lLCB0eXBlLCB0c3RydWN0LCBwcmludCkJCVwKIAkJCQkJCQkJCVwKQEAgLTIyMyw3ICsxNjIsNyBAQAogCS5pZAkJCT0gdHlwZSwJCQkJCVwKIAkuc3lzdGVtCQkJPSBfX3N0cmluZ2lmeShUUkFDRV9TWVNURU0pLAkJXAogCS5yYXdfaW5pdAkJPSBmdHJhY2VfcmF3X2luaXRfZXZlbnQsCQlcCi0JLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfIyNjYWxsLAkJCVwKKwkucHJpbnRfZm10CQk9IHByaW50LAkJCQlcCiAJLmRlZmluZV9maWVsZHMJCT0gZnRyYWNlX2RlZmluZV9maWVsZHNfIyNjYWxsLAkJXAogfTsJCQkJCQkJCQlcCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYwppbmRleCBiMTM0MmM1Li5lOTk4YTgyIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCkBAIC0xOCw2ICsxOCw3IEBACiAJcGlkX3QJCWxhc3RfcGlkOwogCWludAkJZGVwdGg7CiAJaW50CQlpZ25vcmU7CisJdW5zaWduZWQgbG9uZwllbnRlcl9mdW5jc1tGVFJBQ0VfUkVURlVOQ19ERVBUSF07CiB9OwogCiBzdHJ1Y3QgZmdyYXBoX2RhdGEgewpAQCAtMjEyLDEzICsyMTMsMTEgQEAKIAlpbnQgY3B1OwogCWludCBwYzsKIAotCWlmICh1bmxpa2VseSghdHIpKQotCQlyZXR1cm4gMDsKLQogCWlmICghZnRyYWNlX3RyYWNlX3Rhc2soY3VycmVudCkpCiAJCXJldHVybiAwOwogCi0JaWYgKCFmdHJhY2VfZ3JhcGhfYWRkcih0cmFjZS0+ZnVuYykpCisJLyogdHJhY2UgaXQgd2hlbiBpdCBpcy1uZXN0ZWQtaW4gb3IgaXMgYSBmdW5jdGlvbiBlbmFibGVkLiAqLworCWlmICghKHRyYWNlLT5kZXB0aCB8fCBmdHJhY2VfZ3JhcGhfYWRkcih0cmFjZS0+ZnVuYykpKQogCQlyZXR1cm4gMDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKQEAgLTIzMSw5ICsyMzAsNiBAQAogCX0gZWxzZSB7CiAJCXJldCA9IDA7CiAJfQotCS8qIE9ubHkgZG8gdGhlIGF0b21pYyBpZiBpdCBpcyBub3QgYWxyZWFkeSBzZXQgKi8KLQlpZiAoIXRlc3RfdHNrX3RyYWNlX2dyYXBoKGN1cnJlbnQpKQotCQlzZXRfdHNrX3RyYWNlX2dyYXBoKGN1cnJlbnQpOwogCiAJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTI4MSwxNyArMjc3LDI0IEBACiAJCXBjID0gcHJlZW1wdF9jb3VudCgpOwogCQlfX3RyYWNlX2dyYXBoX3JldHVybih0ciwgdHJhY2UsIGZsYWdzLCBwYyk7CiAJfQotCWlmICghdHJhY2UtPmRlcHRoKQotCQljbGVhcl90c2tfdHJhY2VfZ3JhcGgoY3VycmVudCk7CiAJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAordm9pZCBzZXRfZ3JhcGhfYXJyYXkoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlncmFwaF9hcnJheSA9IHRyOworCisJLyogTWFrZSBncmFwaF9hcnJheSB2aXNpYmxlIGJlZm9yZSB3ZSBzdGFydCB0cmFjaW5nICovCisKKwlzbXBfbWIoKTsKK30KKwogc3RhdGljIGludCBncmFwaF90cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJaW50IHJldDsKIAotCWdyYXBoX2FycmF5ID0gdHI7CisJc2V0X2dyYXBoX2FycmF5KHRyKTsKIAlyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoJnRyYWNlX2dyYXBoX3JldHVybiwKIAkJCQkgICAgJnRyYWNlX2dyYXBoX2VudHJ5KTsKIAlpZiAocmV0KQpAQCAtMzAxLDExICszMDQsNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHNldF9ncmFwaF9hcnJheShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCWdyYXBoX2FycmF5ID0gdHI7Ci19Ci0KIHN0YXRpYyB2b2lkIGdyYXBoX3RyYWNlX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJdHJhY2luZ19zdG9wX2NtZGxpbmVfcmVjb3JkKCk7CkBAIC02NzMsMTUgKzY3MSwyMSBAQAogCWR1cmF0aW9uID0gZ3JhcGhfcmV0LT5yZXR0aW1lIC0gZ3JhcGhfcmV0LT5jYWxsdGltZTsKIAogCWlmIChkYXRhKSB7CisJCXN0cnVjdCBmZ3JhcGhfY3B1X2RhdGEgKmNwdV9kYXRhOwogCQlpbnQgY3B1ID0gaXRlci0+Y3B1OwotCQlpbnQgKmRlcHRoID0gJihwZXJfY3B1X3B0cihkYXRhLT5jcHVfZGF0YSwgY3B1KS0+ZGVwdGgpOworCisJCWNwdV9kYXRhID0gcGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSk7CiAKIAkJLyoKIAkJICogQ29tbWVudHMgZGlzcGxheSBhdCArIDEgdG8gZGVwdGguIFNpbmNlCiAJCSAqIHRoaXMgaXMgYSBsZWFmIGZ1bmN0aW9uLCBrZWVwIHRoZSBjb21tZW50cwogCQkgKiBlcXVhbCB0byB0aGlzIGRlcHRoLgogCQkgKi8KLQkJKmRlcHRoID0gY2FsbC0+ZGVwdGggLSAxOworCQljcHVfZGF0YS0+ZGVwdGggPSBjYWxsLT5kZXB0aCAtIDE7CisKKwkJLyogTm8gbmVlZCB0byBrZWVwIHRoaXMgZnVuY3Rpb24gYXJvdW5kIGZvciB0aGlzIGRlcHRoICovCisJCWlmIChjYWxsLT5kZXB0aCA8IEZUUkFDRV9SRVRGVU5DX0RFUFRIKQorCQkJY3B1X2RhdGEtPmVudGVyX2Z1bmNzW2NhbGwtPmRlcHRoXSA9IDA7CiAJfQogCiAJLyogT3ZlcmhlYWQgKi8KQEAgLTcyMSwxMCArNzI1LDE1IEBACiAJaW50IGk7CiAKIAlpZiAoZGF0YSkgeworCQlzdHJ1Y3QgZmdyYXBoX2NwdV9kYXRhICpjcHVfZGF0YTsKIAkJaW50IGNwdSA9IGl0ZXItPmNwdTsKLQkJaW50ICpkZXB0aCA9ICYocGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSktPmRlcHRoKTsKIAotCQkqZGVwdGggPSBjYWxsLT5kZXB0aDsKKwkJY3B1X2RhdGEgPSBwZXJfY3B1X3B0cihkYXRhLT5jcHVfZGF0YSwgY3B1KTsKKwkJY3B1X2RhdGEtPmRlcHRoID0gY2FsbC0+ZGVwdGg7CisKKwkJLyogU2F2ZSB0aGlzIGZ1bmN0aW9uIHBvaW50ZXIgdG8gc2VlIGlmIHRoZSBleGl0IG1hdGNoZXMgKi8KKwkJaWYgKGNhbGwtPmRlcHRoIDwgRlRSQUNFX1JFVEZVTkNfREVQVEgpCisJCQljcHVfZGF0YS0+ZW50ZXJfZnVuY3NbY2FsbC0+ZGVwdGhdID0gY2FsbC0+ZnVuYzsKIAl9CiAKIAkvKiBObyBvdmVyaGVhZCAqLwpAQCAtODU0LDE5ICs4NjMsMjggQEAKIAlzdHJ1Y3QgZmdyYXBoX2RhdGEgKmRhdGEgPSBpdGVyLT5wcml2YXRlOwogCXBpZF90IHBpZCA9IGVudC0+cGlkOwogCWludCBjcHUgPSBpdGVyLT5jcHU7CisJaW50IGZ1bmNfbWF0Y2ggPSAxOwogCWludCByZXQ7CiAJaW50IGk7CiAKIAlpZiAoZGF0YSkgeworCQlzdHJ1Y3QgZmdyYXBoX2NwdV9kYXRhICpjcHVfZGF0YTsKIAkJaW50IGNwdSA9IGl0ZXItPmNwdTsKLQkJaW50ICpkZXB0aCA9ICYocGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSktPmRlcHRoKTsKKworCQljcHVfZGF0YSA9IHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBjcHUpOwogCiAJCS8qCiAJCSAqIENvbW1lbnRzIGRpc3BsYXkgYXQgKyAxIHRvIGRlcHRoLiBUaGlzIGlzIHRoZQogCQkgKiByZXR1cm4gZnJvbSBhIGZ1bmN0aW9uLCB3ZSBub3cgd2FudCB0aGUgY29tbWVudHMKIAkJICogdG8gZGlzcGxheSBhdCB0aGUgc2FtZSBsZXZlbCBvZiB0aGUgYnJhY2tldC4KIAkJICovCi0JCSpkZXB0aCA9IHRyYWNlLT5kZXB0aCAtIDE7CisJCWNwdV9kYXRhLT5kZXB0aCA9IHRyYWNlLT5kZXB0aCAtIDE7CisKKwkJaWYgKHRyYWNlLT5kZXB0aCA8IEZUUkFDRV9SRVRGVU5DX0RFUFRIKSB7CisJCQlpZiAoY3B1X2RhdGEtPmVudGVyX2Z1bmNzW3RyYWNlLT5kZXB0aF0gIT0gdHJhY2UtPmZ1bmMpCisJCQkJZnVuY19tYXRjaCA9IDA7CisJCQljcHVfZGF0YS0+ZW50ZXJfZnVuY3NbdHJhY2UtPmRlcHRoXSA9IDA7CisJCX0KIAl9CiAKIAlpZiAocHJpbnRfZ3JhcGhfcHJvbG9ndWUoaXRlciwgcywgMCwgMCkpCkBAIC04OTEsOSArOTA5LDIxIEBACiAJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJfQogCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAifVxuIik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwkvKgorCSAqIElmIHRoZSByZXR1cm4gZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhIG1hdGNoaW5nIGVudHJ5LAorCSAqIHRoZW4gdGhlIGVudHJ5IHdhcyBsb3N0LiBJbnN0ZWFkIG9mIGp1c3QgcHJpbnRpbmcKKwkgKiB0aGUgJ30nIGFuZCBsZXR0aW5nIHRoZSB1c2VyIGd1ZXNzIHdoYXQgZnVuY3Rpb24gdGhpcworCSAqIGJlbG9uZ3MgdG8sIHdyaXRlIG91dCB0aGUgZnVuY3Rpb24gbmFtZS4KKwkgKi8KKwlpZiAoZnVuY19tYXRjaCkgeworCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJ9XG4iKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJfSBlbHNlIHsKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAifSAoJXBzKVxuIiwgKHZvaWQgKil0cmFjZS0+ZnVuYyk7CisJCWlmICghcmV0KQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCX0KIAogCS8qIE92ZXJydW4gKi8KIAlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX09WRVJSVU4pIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwppbmRleCA2ZWE5MGMwLi41MDVjOTIyIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCkBAIC05MSwxMSArOTEsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBfX2twcm9iZXMgdW5zaWduZWQgbG9uZyBmZXRjaF9hcmd1bWVudChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqbnVtKQotewotCXJldHVybiByZWdzX2dldF9hcmd1bWVudF9udGgocmVncywgKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGxvbmcpbnVtKSk7Ci19Ci0KIHN0YXRpYyBfX2twcm9iZXMgdW5zaWduZWQgbG9uZyBmZXRjaF9yZXR2YWx1ZShzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQkJICAgICAgdm9pZCAqZHVtbXkpCiB7CkBAIC0yMzEsOSArMjI2LDcgQEAKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCWlmIChmZi0+ZnVuYyA9PSBmZXRjaF9hcmd1bWVudCkKLQkJcmV0ID0gc25wcmludGYoYnVmLCBuLCAiJGFyZyVsdSIsICh1bnNpZ25lZCBsb25nKWZmLT5kYXRhKTsKLQllbHNlIGlmIChmZi0+ZnVuYyA9PSBmZXRjaF9yZWdpc3RlcikgeworCWlmIChmZi0+ZnVuYyA9PSBmZXRjaF9yZWdpc3RlcikgewogCQljb25zdCBjaGFyICpuYW1lOwogCQluYW1lID0gcmVnc19xdWVyeV9yZWdpc3Rlcl9uYW1lKCh1bnNpZ25lZCBpbnQpKChsb25nKWZmLT5kYXRhKSk7CiAJCXJldCA9IHNucHJpbnRmKGJ1ZiwgbiwgIiUlJXMiLCBuYW1lKTsKQEAgLTQ4OSwxNCArNDgyLDYgQEAKIAkJCX0KIAkJfSBlbHNlCiAJCQlyZXQgPSAtRUlOVkFMOwotCX0gZWxzZSBpZiAoc3RybmNtcChhcmcsICJhcmciLCAzKSA9PSAwICYmIGlzZGlnaXQoYXJnWzNdKSkgewotCQlyZXQgPSBzdHJpY3Rfc3RydG91bChhcmcgKyAzLCAxMCwgJnBhcmFtKTsKLQkJaWYgKHJldCB8fCBwYXJhbSA+IFBBUkFNX01BWF9BUkdTKQotCQkJcmV0ID0gLUVJTlZBTDsKLQkJZWxzZSB7Ci0JCQlmZi0+ZnVuYyA9IGZldGNoX2FyZ3VtZW50OwotCQkJZmYtPmRhdGEgPSAodm9pZCAqKXBhcmFtOwotCQl9CiAJfSBlbHNlCiAJCXJldCA9IC1FSU5WQUw7CiAJcmV0dXJuIHJldDsKQEAgLTYxMSw3ICs1OTYsNiBAQAogCSAqICAtIEFkZCBrcHJvYmU6IHBbOltHUlAvXUVWRU5UXSBLU1lNWytPRkZTXXxLQUREUiBbRkVUQ0hBUkdTXQogCSAqICAtIEFkZCBrcmV0cHJvYmU6IHJbOltHUlAvXUVWRU5UXSBLU1lNWyswXSBbRkVUQ0hBUkdTXQogCSAqIEZldGNoIGFyZ3M6Ci0JICogICRhcmdOCTogZmV0Y2ggTnRoIG9mIGZ1bmN0aW9uIGFyZ3VtZW50LiAoTjowLSkKIAkgKiAgJHJldHZhbAk6IGZldGNoIHJldHVybiB2YWx1ZQogCSAqICAkc3RhY2sJOiBmZXRjaCBzdGFjayBhZGRyZXNzCiAJICogICRzdGFja04JOiBmZXRjaCBOdGggb2Ygc3RhY2sgKE46MC0pCkBAIC02NTEsMTIgKzYzNSwxMiBAQAogCQkJZXZlbnQgPSBzdHJjaHIoZ3JvdXAsICcvJykgKyAxOwogCQkJZXZlbnRbLTFdID0gJ1wwJzsKIAkJCWlmIChzdHJsZW4oZ3JvdXApID09IDApIHsKLQkJCQlwcl9pbmZvKCJHcm91cCBuYW1lIGlzIG5vdCBzcGVjaWZpbGVkXG4iKTsKKwkJCQlwcl9pbmZvKCJHcm91cCBuYW1lIGlzIG5vdCBzcGVjaWZpZWRcbiIpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQl9CiAJCWlmIChzdHJsZW4oZXZlbnQpID09IDApIHsKLQkJCXByX2luZm8oIkV2ZW50IG5hbWUgaXMgbm90IHNwZWNpZmlsZWRcbiIpOworCQkJcHJfaW5mbygiRXZlbnQgbmFtZSBpcyBub3Qgc3BlY2lmaWVkXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtNjg5LDcgKzY3Myw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQkvKiBhbiBhZGRyZXNzIHNwZWNpZmllZCAqLwotCQlyZXQgPSBzdHJpY3Rfc3RydG91bCgmYXJndlswXVsyXSwgMCwgKHVuc2lnbmVkIGxvbmcgKikmYWRkcik7CisJCXJldCA9IHN0cmljdF9zdHJ0b3VsKCZhcmd2WzFdWzBdLCAwLCAodW5zaWduZWQgbG9uZyAqKSZhZGRyKTsKIAkJaWYgKHJldCkgewogCQkJcHJfaW5mbygiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MuXG4iKTsKIAkJCXJldHVybiByZXQ7CkBAIC05NTgsNyArOTQyLDcgQEAKIH07CiAKIC8qIEtwcm9iZSBoYW5kbGVyICovCi1zdGF0aWMgX19rcHJvYmVzIGludCBrcHJvYmVfdHJhY2VfZnVuYyhzdHJ1Y3Qga3Byb2JlICprcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgX19rcHJvYmVzIHZvaWQga3Byb2JlX3RyYWNlX2Z1bmMoc3RydWN0IGtwcm9iZSAqa3AsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSBjb250YWluZXJfb2Yoa3AsIHN0cnVjdCB0cmFjZV9wcm9iZSwgcnAua3ApOwogCXN0cnVjdCBrcHJvYmVfdHJhY2VfZW50cnkgKmVudHJ5OwpAQCAtOTc4LDcgKzk2Miw3IEBACiAJZXZlbnQgPSB0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoJmJ1ZmZlciwgY2FsbC0+aWQsIHNpemUsCiAJCQkJCQkgIGlycV9mbGFncywgcGMpOwogCWlmICghZXZlbnQpCi0JCXJldHVybiAwOworCQlyZXR1cm47CiAKIAllbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwogCWVudHJ5LT5uYXJncyA9IHRwLT5ucl9hcmdzOwpAQCAtOTg4LDExICs5NzIsMTAgQEAKIAogCWlmICghZmlsdGVyX2N1cnJlbnRfY2hlY2tfZGlzY2FyZChidWZmZXIsIGNhbGwsIGVudHJ5LCBldmVudCkpCiAJCXRyYWNlX25vd2FrZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MsIHBjKTsKLQlyZXR1cm4gMDsKIH0KIAogLyogS3JldHByb2JlIGhhbmRsZXIgKi8KLXN0YXRpYyBfX2twcm9iZXMgaW50IGtyZXRwcm9iZV90cmFjZV9mdW5jKHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLAorc3RhdGljIF9fa3Byb2JlcyB2b2lkIGtyZXRwcm9iZV90cmFjZV9mdW5jKHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLAogCQkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSBjb250YWluZXJfb2YocmktPnJwLCBzdHJ1Y3QgdHJhY2VfcHJvYmUsIHJwKTsKQEAgLTEwMTEsNyArOTk0LDcgQEAKIAlldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgmYnVmZmVyLCBjYWxsLT5pZCwgc2l6ZSwKIAkJCQkJCSAgaXJxX2ZsYWdzLCBwYyk7CiAJaWYgKCFldmVudCkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAogCWVudHJ5ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CiAJZW50cnktPm5hcmdzID0gdHAtPm5yX2FyZ3M7CkBAIC0xMDIyLDggKzEwMDUsNiBAQAogCiAJaWYgKCFmaWx0ZXJfY3VycmVudF9jaGVja19kaXNjYXJkKGJ1ZmZlciwgY2FsbCwgZW50cnksIGV2ZW50KSkKIAkJdHJhY2Vfbm93YWtlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncywgcGMpOwotCi0JcmV0dXJuIDA7CiB9CiAKIC8qIEV2ZW50IGVudHJ5IHByaW50ZXJzICovCkBAIC0xMTc0LDIxMyArMTE1NSwxMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX3Byb2JlX2V2ZW50X3Nob3dfZm9ybWF0KHN0cnVjdCB0cmFjZV9zZXEgKnMsCi0JCQkJICAgICBzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwLCBjb25zdCBjaGFyICpmbXQsCi0JCQkJICAgICBjb25zdCBjaGFyICphcmcpCitzdGF0aWMgaW50IF9fc2V0X3ByaW50X2ZtdChzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwLCBjaGFyICpidWYsIGludCBsZW4pCiB7CiAJaW50IGk7CisJaW50IHBvcyA9IDA7CiAKLQkvKiBTaG93IGZvcm1hdCAqLwotCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG5wcmludCBmbXQ6IFwiJXMiLCBmbXQpKQotCQlyZXR1cm4gMDsKKwljb25zdCBjaGFyICpmbXQsICphcmc7CiAKLQlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKLQkJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIgJXM9JSVseCIsIHRwLT5hcmdzW2ldLm5hbWUpKQotCQkJcmV0dXJuIDA7CisJaWYgKCFwcm9iZV9pc19yZXR1cm4odHApKSB7CisJCWZtdCA9ICIoJWx4KSI7CisJCWFyZyA9ICJSRUMtPiIgRklFTERfU1RSSU5HX0lQOworCX0gZWxzZSB7CisJCWZtdCA9ICIoJWx4IDwtICVseCkiOworCQlhcmcgPSAiUkVDLT4iIEZJRUxEX1NUUklOR19GVU5DICIsIFJFQy0+IiBGSUVMRF9TVFJJTkdfUkVUSVA7CisJfQogCi0JaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICJcIiwgJXMiLCBhcmcpKQotCQlyZXR1cm4gMDsKKwkvKiBXaGVuIGxlbj0wLCB3ZSBqdXN0IGNhbGN1bGF0ZSB0aGUgbmVlZGVkIGxlbmd0aCAqLworI2RlZmluZSBMRU5fT1JfWkVSTyAobGVuID8gbGVuIC0gcG9zIDogMCkKIAotCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQotCQlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIiwgUkVDLT4lcyIsIHRwLT5hcmdzW2ldLm5hbWUpKQotCQkJcmV0dXJuIDA7CisJcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgTEVOX09SX1pFUk8sICJcIiVzIiwgZm10KTsKIAotCXJldHVybiB0cmFjZV9zZXFfcHV0cyhzLCAiXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykgeworCQlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBMRU5fT1JfWkVSTywgIiAlcz0lJWx4IiwKKwkJCQl0cC0+YXJnc1tpXS5uYW1lKTsKKwl9CisKKwlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBMRU5fT1JfWkVSTywgIlwiLCAlcyIsIGFyZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykgeworCQlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBMRU5fT1JfWkVSTywgIiwgUkVDLT4lcyIsCisJCQkJdHAtPmFyZ3NbaV0ubmFtZSk7CisJfQorCisjdW5kZWYgTEVOX09SX1pFUk8KKworCS8qIHJldHVybiB0aGUgbGVuZ3RoIG9mIHByaW50X2ZtdCAqLworCXJldHVybiBwb3M7CiB9CiAKLSN1bmRlZiBTSE9XX0ZJRUxECi0jZGVmaW5lIFNIT1dfRklFTEQodHlwZSwgaXRlbSwgbmFtZSkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICVzO1x0IglcCi0JCQkJIm9mZnNldDoldTtcdHNpemU6JXU7XHRzaWduZWQ6JWQ7XG4iLCBuYW1lLFwKLQkJCQkodW5zaWduZWQgaW50KW9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLFwKLQkJCQkodW5zaWduZWQgaW50KXNpemVvZih0eXBlKSwJCVwKLQkJCQlpc19zaWduZWRfdHlwZSh0eXBlKSk7CQkJXAotCQlpZiAoIXJldCkJCQkJCQlcCi0JCQlyZXR1cm4gMDsJCQkJCVwKLQl9IHdoaWxlICgwKQotCi1zdGF0aWMgaW50IGtwcm9iZV9ldmVudF9zaG93X2Zvcm1hdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsCi0JCQkJICAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpCitzdGF0aWMgaW50IHNldF9wcmludF9mbXQoc3RydWN0IHRyYWNlX3Byb2JlICp0cCkKIHsKLQlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2VudHJ5IGZpZWxkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpOwotCWludCByZXQsIGk7Ci0Jc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IChzdHJ1Y3QgdHJhY2VfcHJvYmUgKiljYWxsLT5kYXRhOworCWludCBsZW47CisJY2hhciAqcHJpbnRfZm10OwogCi0JU0hPV19GSUVMRCh1bnNpZ25lZCBsb25nLCBpcCwgRklFTERfU1RSSU5HX0lQKTsKLQlTSE9XX0ZJRUxEKGludCwgbmFyZ3MsIEZJRUxEX1NUUklOR19OQVJHUyk7CisJLyogRmlyc3Q6IGNhbGxlZCB3aXRoIDAgbGVuZ3RoIHRvIGNhbGN1bGF0ZSB0aGUgbmVlZGVkIGxlbmd0aCAqLworCWxlbiA9IF9fc2V0X3ByaW50X2ZtdCh0cCwgTlVMTCwgMCk7CisJcHJpbnRfZm10ID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaW50X2ZtdCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBTaG93IGZpZWxkcyAqLwotCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQotCQlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGFyZ3NbaV0sIHRwLT5hcmdzW2ldLm5hbWUpOwotCXRyYWNlX3NlcV9wdXRzKHMsICJcbiIpOworCS8qIFNlY29uZDogYWN0dWFsbHkgd3JpdGUgdGhlIEBwcmludF9mbXQgKi8KKwlfX3NldF9wcmludF9mbXQodHAsIHByaW50X2ZtdCwgbGVuICsgMSk7CisJdHAtPmNhbGwucHJpbnRfZm10ID0gcHJpbnRfZm10OwogCi0JcmV0dXJuIF9fcHJvYmVfZXZlbnRfc2hvd19mb3JtYXQocywgdHAsICIoJWx4KSIsCi0JCQkJCSAiUkVDLT4iIEZJRUxEX1NUUklOR19JUCk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQga3JldHByb2JlX2V2ZW50X3Nob3dfZm9ybWF0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKLQkJCQkgICAgICAgc3RydWN0IHRyYWNlX3NlcSAqcykKLXsKLQlzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5IGZpZWxkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpOwotCWludCByZXQsIGk7Ci0Jc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IChzdHJ1Y3QgdHJhY2VfcHJvYmUgKiljYWxsLT5kYXRhOwotCi0JU0hPV19GSUVMRCh1bnNpZ25lZCBsb25nLCBmdW5jLCBGSUVMRF9TVFJJTkdfRlVOQyk7Ci0JU0hPV19GSUVMRCh1bnNpZ25lZCBsb25nLCByZXRfaXAsIEZJRUxEX1NUUklOR19SRVRJUCk7Ci0JU0hPV19GSUVMRChpbnQsIG5hcmdzLCBGSUVMRF9TVFJJTkdfTkFSR1MpOwotCi0JLyogU2hvdyBmaWVsZHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKLQkJU0hPV19GSUVMRCh1bnNpZ25lZCBsb25nLCBhcmdzW2ldLCB0cC0+YXJnc1tpXS5uYW1lKTsKLQl0cmFjZV9zZXFfcHV0cyhzLCAiXG4iKTsKLQotCXJldHVybiBfX3Byb2JlX2V2ZW50X3Nob3dfZm9ybWF0KHMsIHRwLCAiKCVseCA8LSAlbHgpIiwKLQkJCQkJICJSRUMtPiIgRklFTERfU1RSSU5HX0ZVTkMKLQkJCQkJICIsIFJFQy0+IiBGSUVMRF9TVFJJTkdfUkVUSVApOwotfQotCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAogLyogS3Byb2JlIHByb2ZpbGUgaGFuZGxlciAqLwotc3RhdGljIF9fa3Byb2JlcyBpbnQga3Byb2JlX3Byb2ZpbGVfZnVuYyhzdHJ1Y3Qga3Byb2JlICprcCwKK3N0YXRpYyBfX2twcm9iZXMgdm9pZCBrcHJvYmVfcHJvZmlsZV9mdW5jKHN0cnVjdCBrcHJvYmUgKmtwLAogCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IGNvbnRhaW5lcl9vZihrcCwgc3RydWN0IHRyYWNlX3Byb2JlLCBycC5rcCk7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJnRwLT5jYWxsOwogCXN0cnVjdCBrcHJvYmVfdHJhY2VfZW50cnkgKmVudHJ5OwotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50OwotCWludCBzaXplLCBfX3NpemUsIGksIHBjLCBfX2NwdTsKKwlpbnQgc2l6ZSwgX19zaXplLCBpOwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwotCWNoYXIgKnRyYWNlX2J1ZjsKLQljaGFyICpyYXdfZGF0YTsKIAlpbnQgcmN0eDsKIAotCXBjID0gcHJlZW1wdF9jb3VudCgpOwogCV9fc2l6ZSA9IFNJWkVPRl9LUFJPQkVfVFJBQ0VfRU5UUlkodHAtPm5yX2FyZ3MpOwogCXNpemUgPSBBTElHTihfX3NpemUgKyBzaXplb2YodTMyKSwgc2l6ZW9mKHU2NCkpOwogCXNpemUgLT0gc2l6ZW9mKHUzMik7CiAJaWYgKFdBUk5fT05DRShzaXplID4gRlRSQUNFX01BWF9QUk9GSUxFX1NJWkUsCiAJCSAgICAgInByb2ZpbGUgYnVmZmVyIG5vdCBsYXJnZSBlbm91Z2giKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAotCS8qCi0JICogUHJvdGVjdCB0aGUgbm9uIG5taSBidWZmZXIKLQkgKiBUaGlzIGFsc28gcHJvdGVjdHMgdGhlIHJjdSByZWFkIHNpZGUKLQkgKi8KLQlsb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpOworCWVudHJ5ID0gZnRyYWNlX3BlcmZfYnVmX3ByZXBhcmUoc2l6ZSwgY2FsbC0+aWQsICZyY3R4LCAmaXJxX2ZsYWdzKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm47CiAKLQlyY3R4ID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOwotCWlmIChyY3R4IDwgMCkKLQkJZ290byBlbmRfcmVjdXJzaW9uOwotCi0JX19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZiAoaW5fbm1pKCkpCi0JCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zl9ubWkpOwotCWVsc2UKLQkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmKTsKLQotCWlmICghdHJhY2VfYnVmKQotCQlnb3RvIGVuZDsKLQotCXJhd19kYXRhID0gcGVyX2NwdV9wdHIodHJhY2VfYnVmLCBfX2NwdSk7Ci0KLQkvKiBaZXJvIGRlYWQgYnl0ZXMgZnJvbSBhbGlnbm1lbnQgdG8gYXZvaWQgYnVmZmVyIGxlYWsgdG8gdXNlcnNwYWNlICovCi0JKih1NjQgKikoJnJhd19kYXRhW3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsKLQllbnRyeSA9IChzdHJ1Y3Qga3Byb2JlX3RyYWNlX2VudHJ5ICopcmF3X2RhdGE7Ci0JZW50ID0gJmVudHJ5LT5lbnQ7Ci0KLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKGVudCwgaXJxX2ZsYWdzLCBwYyk7Ci0JZW50LT50eXBlID0gY2FsbC0+aWQ7CiAJZW50cnktPm5hcmdzID0gdHAtPm5yX2FyZ3M7CiAJZW50cnktPmlwID0gKHVuc2lnbmVkIGxvbmcpa3AtPmFkZHI7CiAJZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspCiAJCWVudHJ5LT5hcmdzW2ldID0gY2FsbF9mZXRjaCgmdHAtPmFyZ3NbaV0uZmV0Y2gsIHJlZ3MpOwotCXBlcmZfdHBfZXZlbnQoY2FsbC0+aWQsIGVudHJ5LT5pcCwgMSwgZW50cnksIHNpemUpOwogCi1lbmQ6Ci0JcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChyY3R4KTsKLWVuZF9yZWN1cnNpb246Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKLQotCXJldHVybiAwOworCWZ0cmFjZV9wZXJmX2J1Zl9zdWJtaXQoZW50cnksIHNpemUsIHJjdHgsIGVudHJ5LT5pcCwgMSwgaXJxX2ZsYWdzKTsKIH0KIAogLyogS3JldHByb2JlIHByb2ZpbGUgaGFuZGxlciAqLwotc3RhdGljIF9fa3Byb2JlcyBpbnQga3JldHByb2JlX3Byb2ZpbGVfZnVuYyhzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaSwKK3N0YXRpYyBfX2twcm9iZXMgdm9pZCBrcmV0cHJvYmVfcHJvZmlsZV9mdW5jKHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLAogCQkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IGNvbnRhaW5lcl9vZihyaS0+cnAsIHN0cnVjdCB0cmFjZV9wcm9iZSwgcnApOwogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZ0cC0+Y2FsbDsKIAlzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudDsKLQlpbnQgc2l6ZSwgX19zaXplLCBpLCBwYywgX19jcHU7CisJaW50IHNpemUsIF9fc2l6ZSwgaTsKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKLQljaGFyICp0cmFjZV9idWY7Ci0JY2hhciAqcmF3X2RhdGE7CiAJaW50IHJjdHg7CiAKLQlwYyA9IHByZWVtcHRfY291bnQoKTsKIAlfX3NpemUgPSBTSVpFT0ZfS1JFVFBST0JFX1RSQUNFX0VOVFJZKHRwLT5ucl9hcmdzKTsKIAlzaXplID0gQUxJR04oX19zaXplICsgc2l6ZW9mKHUzMiksIHNpemVvZih1NjQpKTsKIAlzaXplIC09IHNpemVvZih1MzIpOwogCWlmIChXQVJOX09OQ0Uoc2l6ZSA+IEZUUkFDRV9NQVhfUFJPRklMRV9TSVpFLAogCQkgICAgICJwcm9maWxlIGJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoIikpCi0JCXJldHVybiAwOworCQlyZXR1cm47CiAKLQkvKgotCSAqIFByb3RlY3QgdGhlIG5vbiBubWkgYnVmZmVyCi0JICogVGhpcyBhbHNvIHByb3RlY3RzIHRoZSByY3UgcmVhZCBzaWRlCi0JICovCi0JbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsKKwllbnRyeSA9IGZ0cmFjZV9wZXJmX2J1Zl9wcmVwYXJlKHNpemUsIGNhbGwtPmlkLCAmcmN0eCwgJmlycV9mbGFncyk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuOwogCi0JcmN0eCA9IHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQoKTsKLQlpZiAocmN0eCA8IDApCi0JCWdvdG8gZW5kX3JlY3Vyc2lvbjsKLQotCV9fY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKGluX25taSgpKQotCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWZfbm1pKTsKLQllbHNlCi0JCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zik7Ci0KLQlpZiAoIXRyYWNlX2J1ZikKLQkJZ290byBlbmQ7Ci0KLQlyYXdfZGF0YSA9IHBlcl9jcHVfcHRyKHRyYWNlX2J1ZiwgX19jcHUpOwotCi0JLyogWmVybyBkZWFkIGJ5dGVzIGZyb20gYWxpZ25tZW50IHRvIGF2b2lkIGJ1ZmZlciBsZWFrIHRvIHVzZXJzcGFjZSAqLwotCSoodTY0ICopKCZyYXdfZGF0YVtzaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7Ci0JZW50cnkgPSAoc3RydWN0IGtyZXRwcm9iZV90cmFjZV9lbnRyeSAqKXJhd19kYXRhOwotCWVudCA9ICZlbnRyeS0+ZW50OwotCi0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnQsIGlycV9mbGFncywgcGMpOwotCWVudC0+dHlwZSA9IGNhbGwtPmlkOwogCWVudHJ5LT5uYXJncyA9IHRwLT5ucl9hcmdzOwogCWVudHJ5LT5mdW5jID0gKHVuc2lnbmVkIGxvbmcpdHAtPnJwLmtwLmFkZHI7CiAJZW50cnktPnJldF9pcCA9ICh1bnNpZ25lZCBsb25nKXJpLT5yZXRfYWRkcjsKIAlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKIAkJZW50cnktPmFyZ3NbaV0gPSBjYWxsX2ZldGNoKCZ0cC0+YXJnc1tpXS5mZXRjaCwgcmVncyk7Ci0JcGVyZl90cF9ldmVudChjYWxsLT5pZCwgZW50cnktPnJldF9pcCwgMSwgZW50cnksIHNpemUpOwogCi1lbmQ6Ci0JcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChyY3R4KTsKLWVuZF9yZWN1cnNpb246Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKLQotCXJldHVybiAwOworCWZ0cmFjZV9wZXJmX2J1Zl9zdWJtaXQoZW50cnksIHNpemUsIHJjdHgsIGVudHJ5LT5yZXRfaXAsIDEsIGlycV9mbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgcHJvYmVfcHJvZmlsZV9lbmFibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQpAQCAtMTQwOCw3ICsxMjk5LDcgQEAKIAkJCWRpc2FibGVfa3Byb2JlKCZ0cC0+cnAua3ApOwogCX0KIH0KLSNlbmRpZgkvKiBDT05GSUdfRVZFTlRfUFJPRklMRSAqLworI2VuZGlmCS8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCiAKIHN0YXRpYyBfX2twcm9iZXMKQEAgLTE0MTgsMTAgKzEzMDksMTAgQEAKIAogCWlmICh0cC0+ZmxhZ3MgJiBUUF9GTEFHX1RSQUNFKQogCQlrcHJvYmVfdHJhY2VfZnVuYyhrcCwgcmVncyk7Ci0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAlpZiAodHAtPmZsYWdzICYgVFBfRkxBR19QUk9GSUxFKQogCQlrcHJvYmVfcHJvZmlsZV9mdW5jKGtwLCByZWdzKTsKLSNlbmRpZgkvKiBDT05GSUdfRVZFTlRfUFJPRklMRSAqLworI2VuZGlmCiAJcmV0dXJuIDA7CS8qIFdlIGRvbid0IHR3ZWVrIGtlcm5lbCwgc28ganVzdCByZXR1cm4gMCAqLwogfQogCkBAIC0xNDMyLDEwICsxMzIzLDEwIEBACiAKIAlpZiAodHAtPmZsYWdzICYgVFBfRkxBR19UUkFDRSkKIAkJa3JldHByb2JlX3RyYWNlX2Z1bmMocmksIHJlZ3MpOwotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAJaWYgKHRwLT5mbGFncyAmIFRQX0ZMQUdfUFJPRklMRSkKIAkJa3JldHByb2JlX3Byb2ZpbGVfZnVuYyhyaSwgcmVncyk7Ci0jZW5kaWYJLyogQ09ORklHX0VWRU5UX1BST0ZJTEUgKi8KKyNlbmRpZgogCXJldHVybiAwOwkvKiBXZSBkb24ndCB0d2VlayBrZXJuZWwsIHNvIGp1c3QgcmV0dXJuIDAgKi8KIH0KIApAQCAtMTQ0OCwyMyArMTMzOSwyNSBAQAogCWlmIChwcm9iZV9pc19yZXR1cm4odHApKSB7CiAJCXRwLT5ldmVudC50cmFjZSA9IHByaW50X2tyZXRwcm9iZV9ldmVudDsKIAkJY2FsbC0+cmF3X2luaXQgPSBwcm9iZV9ldmVudF9yYXdfaW5pdDsKLQkJY2FsbC0+c2hvd19mb3JtYXQgPSBrcmV0cHJvYmVfZXZlbnRfc2hvd19mb3JtYXQ7CiAJCWNhbGwtPmRlZmluZV9maWVsZHMgPSBrcmV0cHJvYmVfZXZlbnRfZGVmaW5lX2ZpZWxkczsKIAl9IGVsc2UgewogCQl0cC0+ZXZlbnQudHJhY2UgPSBwcmludF9rcHJvYmVfZXZlbnQ7CiAJCWNhbGwtPnJhd19pbml0ID0gcHJvYmVfZXZlbnRfcmF3X2luaXQ7Ci0JCWNhbGwtPnNob3dfZm9ybWF0ID0ga3Byb2JlX2V2ZW50X3Nob3dfZm9ybWF0OwogCQljYWxsLT5kZWZpbmVfZmllbGRzID0ga3Byb2JlX2V2ZW50X2RlZmluZV9maWVsZHM7CiAJfQorCWlmIChzZXRfcHJpbnRfZm10KHRwKSA8IDApCisJCXJldHVybiAtRU5PTUVNOwogCWNhbGwtPmV2ZW50ID0gJnRwLT5ldmVudDsKIAljYWxsLT5pZCA9IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudCgmdHAtPmV2ZW50KTsKLQlpZiAoIWNhbGwtPmlkKQorCWlmICghY2FsbC0+aWQpIHsKKwkJa2ZyZWUoY2FsbC0+cHJpbnRfZm10KTsKIAkJcmV0dXJuIC1FTk9ERVY7CisJfQogCWNhbGwtPmVuYWJsZWQgPSAwOwogCWNhbGwtPnJlZ2Z1bmMgPSBwcm9iZV9ldmVudF9lbmFibGU7CiAJY2FsbC0+dW5yZWdmdW5jID0gcHJvYmVfZXZlbnRfZGlzYWJsZTsKIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAJY2FsbC0+cHJvZmlsZV9lbmFibGUgPSBwcm9iZV9wcm9maWxlX2VuYWJsZTsKIAljYWxsLT5wcm9maWxlX2Rpc2FibGUgPSBwcm9iZV9wcm9maWxlX2Rpc2FibGU7CiAjZW5kaWYKQEAgLTE0NzIsNiArMTM2NSw3IEBACiAJcmV0ID0gdHJhY2VfYWRkX2V2ZW50X2NhbGwoY2FsbCk7CiAJaWYgKHJldCkgewogCQlwcl9pbmZvKCJGYWlsZWQgdG8gcmVnaXN0ZXIga3Byb2JlIGV2ZW50OiAlc1xuIiwgY2FsbC0+bmFtZSk7CisJCWtmcmVlKGNhbGwtPnByaW50X2ZtdCk7CiAJCXVucmVnaXN0ZXJfZnRyYWNlX2V2ZW50KCZ0cC0+ZXZlbnQpOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMTQ4MSw2ICsxMzc1LDcgQEAKIHsKIAkvKiB0cC0+ZXZlbnQgaXMgdW5yZWdpc3RlcmVkIGluIHRyYWNlX3JlbW92ZV9ldmVudF9jYWxsKCkgKi8KIAl0cmFjZV9yZW1vdmVfZXZlbnRfY2FsbCgmdHAtPmNhbGwpOworCWtmcmVlKHRwLT5jYWxsLnByaW50X2ZtdCk7CiB9CiAKIC8qIE1ha2UgYSBkZWJ1Z2ZzIGludGVyZmFjZSBmb3IgY29udHJvbGluZyBwcm9iZSBwb2ludHMgKi8KQEAgLTE1MjMsMjggKzE0MTgsNjcgQEAKIAogc3RhdGljIF9faW5pdCBpbnQga3Byb2JlX3RyYWNlX3NlbGZfdGVzdHNfaW5pdCh2b2lkKQogewotCWludCByZXQ7CisJaW50IHJldCwgd2FybiA9IDA7CiAJaW50ICgqdGFyZ2V0KShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTsKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwOwogCiAJdGFyZ2V0ID0ga3Byb2JlX3RyYWNlX3NlbGZ0ZXN0X3RhcmdldDsKIAogCXByX2luZm8oIlRlc3Rpbmcga3Byb2JlIHRyYWNpbmc6ICIpOwogCiAJcmV0ID0gY29tbWFuZF90cmFjZV9wcm9iZSgicDp0ZXN0cHJvYmUga3Byb2JlX3RyYWNlX3NlbGZ0ZXN0X3RhcmdldCAiCi0JCQkJICAiJGFyZzEgJGFyZzIgJGFyZzMgJGFyZzQgJHN0YWNrICRzdGFjazAiKTsKLQlpZiAoV0FSTl9PTl9PTkNFKHJldCkpCi0JCXByX3dhcm5pbmcoImVycm9yIGVuYWJsaW5nIGZ1bmN0aW9uIGVudHJ5XG4iKTsKKwkJCQkgICIkc3RhY2sgJHN0YWNrMCArMCgkc3RhY2spIik7CisJaWYgKFdBUk5fT05fT05DRShyZXQpKSB7CisJCXByX3dhcm5pbmcoImVycm9yIG9uIHByb2JpbmcgZnVuY3Rpb24gZW50cnkuXG4iKTsKKwkJd2FybisrOworCX0gZWxzZSB7CisJCS8qIEVuYWJsZSB0cmFjZSBwb2ludCAqLworCQl0cCA9IGZpbmRfcHJvYmVfZXZlbnQoInRlc3Rwcm9iZSIsIEtQUk9CRV9FVkVOVF9TWVNURU0pOworCQlpZiAoV0FSTl9PTl9PTkNFKHRwID09IE5VTEwpKSB7CisJCQlwcl93YXJuaW5nKCJlcnJvciBvbiBnZXR0aW5nIG5ldyBwcm9iZS5cbiIpOworCQkJd2FybisrOworCQl9IGVsc2UKKwkJCXByb2JlX2V2ZW50X2VuYWJsZSgmdHAtPmNhbGwpOworCX0KIAogCXJldCA9IGNvbW1hbmRfdHJhY2VfcHJvYmUoInI6dGVzdHByb2JlMiBrcHJvYmVfdHJhY2Vfc2VsZnRlc3RfdGFyZ2V0ICIKIAkJCQkgICIkcmV0dmFsIik7Ci0JaWYgKFdBUk5fT05fT05DRShyZXQpKQotCQlwcl93YXJuaW5nKCJlcnJvciBlbmFibGluZyBmdW5jdGlvbiByZXR1cm5cbiIpOworCWlmIChXQVJOX09OX09OQ0UocmV0KSkgeworCQlwcl93YXJuaW5nKCJlcnJvciBvbiBwcm9iaW5nIGZ1bmN0aW9uIHJldHVybi5cbiIpOworCQl3YXJuKys7CisJfSBlbHNlIHsKKwkJLyogRW5hYmxlIHRyYWNlIHBvaW50ICovCisJCXRwID0gZmluZF9wcm9iZV9ldmVudCgidGVzdHByb2JlMiIsIEtQUk9CRV9FVkVOVF9TWVNURU0pOworCQlpZiAoV0FSTl9PTl9PTkNFKHRwID09IE5VTEwpKSB7CisJCQlwcl93YXJuaW5nKCJlcnJvciBvbiBnZXR0aW5nIG5ldyBwcm9iZS5cbiIpOworCQkJd2FybisrOworCQl9IGVsc2UKKwkJCXByb2JlX2V2ZW50X2VuYWJsZSgmdHAtPmNhbGwpOworCX0KKworCWlmICh3YXJuKQorCQlnb3RvIGVuZDsKIAogCXJldCA9IHRhcmdldCgxLCAyLCAzLCA0LCA1LCA2KTsKIAotCWNsZWFudXBfYWxsX3Byb2JlcygpOworCXJldCA9IGNvbW1hbmRfdHJhY2VfcHJvYmUoIi06dGVzdHByb2JlIik7CisJaWYgKFdBUk5fT05fT05DRShyZXQpKSB7CisJCXByX3dhcm5pbmcoImVycm9yIG9uIGRlbGV0aW5nIGEgcHJvYmUuXG4iKTsKKwkJd2FybisrOworCX0KIAotCXByX2NvbnQoIk9LXG4iKTsKKwlyZXQgPSBjb21tYW5kX3RyYWNlX3Byb2JlKCItOnRlc3Rwcm9iZTIiKTsKKwlpZiAoV0FSTl9PTl9PTkNFKHJldCkpIHsKKwkJcHJfd2FybmluZygiZXJyb3Igb24gZGVsZXRpbmcgYSBwcm9iZS5cbiIpOworCQl3YXJuKys7CisJfQorCitlbmQ6CisJY2xlYW51cF9hbGxfcHJvYmVzKCk7CisJaWYgKHdhcm4pCisJCXByX2NvbnQoIk5HOiBTb21lIHRlc3RzIGFyZSBmYWlsZWQuIFBsZWFzZSBjaGVjayB0aGVtLlxuIik7CisJZWxzZQorCQlwcl9jb250KCJPS1xuIik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMKaW5kZXggNjc4YTUxMi4uZjRiYzliMiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMKQEAgLTE1Nyw2ICsxNTcsNyBAQAogCXVuc2lnbmVkIGxvbmcgdmFsLCBmbGFnczsKIAljaGFyIGJ1Zls2NF07CiAJaW50IHJldDsKKwlpbnQgY3B1OwogCiAJaWYgKGNvdW50ID49IHNpemVvZihidWYpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE3MSw5ICsxNzIsMjAgQEAKIAkJcmV0dXJuIHJldDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qCisJICogSW4gY2FzZSB3ZSB0cmFjZSBpbnNpZGUgYXJjaF9zcGluX2xvY2soKSBvciBhZnRlciAoTk1JKSwKKwkgKiB3ZSB3aWxsIGNhdXNlIGNpcmN1bGFyIGxvY2ssIHNvIHdlIGFsc28gbmVlZCB0byBpbmNyZWFzZQorCSAqIHRoZSBwZXJjcHUgdHJhY2VfYWN0aXZlIGhlcmUuCisJICovCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXBlcl9jcHUodHJhY2VfYWN0aXZlLCBjcHUpKys7CisKIAlhcmNoX3NwaW5fbG9jaygmbWF4X3N0YWNrX2xvY2spOwogCSpwdHIgPSB2YWw7CiAJYXJjaF9zcGluX3VubG9jaygmbWF4X3N0YWNrX2xvY2spOworCisJcGVyX2NwdSh0cmFjZV9hY3RpdmUsIGNwdSktLTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0yMDYsNyArMjE4LDEzIEBACiAKIHN0YXRpYyB2b2lkICp0X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCiB7CisJaW50IGNwdTsKKwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJcGVyX2NwdSh0cmFjZV9hY3RpdmUsIGNwdSkrKzsKKwogCWFyY2hfc3Bpbl9sb2NrKCZtYXhfc3RhY2tfbG9jayk7CiAKIAlpZiAoKnBvcyA9PSAwKQpAQCAtMjE3LDcgKzIzNSwxMyBAQAogCiBzdGF0aWMgdm9pZCB0X3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQogeworCWludCBjcHU7CisKIAlhcmNoX3NwaW5fdW5sb2NrKCZtYXhfc3RhY2tfbG9jayk7CisKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJcGVyX2NwdSh0cmFjZV9hY3RpdmUsIGNwdSktLTsKKwogCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCA3NTI4OWYzLi5jYmE0N2Q3IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtMTQzLDcwICsxNDMsNjUgQEAKIAkJI3R5cGUsICNuYW1lLCBvZmZzZXRvZih0eXBlb2YodHJhY2UpLCBuYW1lKSwJCVwKIAkJc2l6ZW9mKHRyYWNlLm5hbWUpLCBpc19zaWduZWRfdHlwZSh0eXBlKQogCi1pbnQgc3lzY2FsbF9lbnRlcl9mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQorc3RhdGljCitpbnQgIF9fc2V0X2VudGVyX3ByaW50X2ZtdChzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqZW50cnksIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKLQlpbnQgcmV0OwotCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICplbnRyeSA9IGNhbGwtPmRhdGE7Ci0Jc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgdHJhY2U7Ci0JaW50IG9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyLCBhcmdzKTsKKwlpbnQgcG9zID0gMDsKIAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7IgotCQkJICAgICAgICJcdHNpZ25lZDoldTtcbiIsCi0JCQkgICAgICAgU1lTQ0FMTF9GSUVMRChpbnQsIG5yKSk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiAwOworCS8qIFdoZW4gbGVuPTAsIHdlIGp1c3QgY2FsY3VsYXRlIHRoZSBuZWVkZWQgbGVuZ3RoICovCisjZGVmaW5lIExFTl9PUl9aRVJPIChsZW4gPyBsZW4gLSBwb3MgOiAwKQorCisJcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgTEVOX09SX1pFUk8sICJcIiIpOworCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bmJfYXJnczsgaSsrKSB7CisJCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiJXM6IDB4JSUwJXp1bHglcyIsCisJCQkJZW50cnktPmFyZ3NbaV0sIHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJCQlpID09IGVudHJ5LT5uYl9hcmdzIC0gMSA/ICIiIDogIiwgIik7CisJfQorCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiXCIiKTsKIAogCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bmJfYXJnczsgaSsrKSB7Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6JXMgJXM7IiwgZW50cnktPnR5cGVzW2ldLAotCQkJCSAgICAgICAgZW50cnktPmFyZ3NbaV0pOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiAwOwotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdG9mZnNldDolZDtcdHNpemU6JXp1OyIKLQkJCQkgICAgICAgIlx0c2lnbmVkOiV1O1xuIiwgb2Zmc2V0LAotCQkJCSAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyksCi0JCQkJICAgICAgIGlzX3NpZ25lZF90eXBlKHVuc2lnbmVkIGxvbmcpKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gMDsKLQkJb2Zmc2V0ICs9IHNpemVvZih1bnNpZ25lZCBsb25nKTsKKwkJcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgTEVOX09SX1pFUk8sCisJCQkJIiwgKCh1bnNpZ25lZCBsb25nKShSRUMtPiVzKSkiLCBlbnRyeS0+YXJnc1tpXSk7CiAJfQogCi0JdHJhY2Vfc2VxX3B1dHMocywgIlxucHJpbnQgZm10OiBcIiIpOwotCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bmJfYXJnczsgaSsrKSB7Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVzOiAweCUlMCV6dWx4JXMiLCBlbnRyeS0+YXJnc1tpXSwKLQkJCQkgICAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSwKLQkJCQkJaSA9PSBlbnRyeS0+bmJfYXJncyAtIDEgPyAiIiA6ICIsICIpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiAwOwotCX0KLQl0cmFjZV9zZXFfcHV0YyhzLCAnIicpOworI3VuZGVmIExFTl9PUl9aRVJPCiAKLQlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm5iX2FyZ3M7IGkrKykgewotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIsICgodW5zaWduZWQgbG9uZykoUkVDLT4lcykpIiwKLQkJCQkgICAgICAgZW50cnktPmFyZ3NbaV0pOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiAwOwotCX0KLQotCXJldHVybiB0cmFjZV9zZXFfcHV0YyhzLCAnXG4nKTsKKwkvKiByZXR1cm4gdGhlIGxlbmd0aCBvZiBwcmludF9mbXQgKi8KKwlyZXR1cm4gcG9zOwogfQogCi1pbnQgc3lzY2FsbF9leGl0X2Zvcm1hdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHN0cnVjdCB0cmFjZV9zZXEgKnMpCitzdGF0aWMgaW50IHNldF9zeXNjYWxsX3ByaW50X2ZtdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCiB7Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0IHRyYWNlOworCWNoYXIgKnByaW50X2ZtdDsKKwlpbnQgbGVuOworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICplbnRyeSA9IGNhbGwtPmRhdGE7CiAKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsCi0JCQkgICAgICAgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7IgotCQkJICAgICAgICJcdHNpZ25lZDoldTtcbiIKLQkJCSAgICAgICAiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTsiCi0JCQkgICAgICAgIlx0c2lnbmVkOiV1O1xuIiwKLQkJCSAgICAgICBTWVNDQUxMX0ZJRUxEKGludCwgbnIpLAotCQkJICAgICAgIFNZU0NBTExfRklFTEQobG9uZywgcmV0KSk7Ci0JaWYgKCFyZXQpCisJaWYgKGVudHJ5LT5lbnRlcl9ldmVudCAhPSBjYWxsKSB7CisJCWNhbGwtPnByaW50X2ZtdCA9ICJcIjB4JWx4XCIsIFJFQy0+cmV0IjsKIAkJcmV0dXJuIDA7CisJfQogCi0JcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiBcIjB4JSVseFwiLCBSRUMtPnJldFxuIik7CisJLyogRmlyc3Q6IGNhbGxlZCB3aXRoIDAgbGVuZ3RoIHRvIGNhbGN1bGF0ZSB0aGUgbmVlZGVkIGxlbmd0aCAqLworCWxlbiA9IF9fc2V0X2VudGVyX3ByaW50X2ZtdChlbnRyeSwgTlVMTCwgMCk7CisKKwlwcmludF9mbXQgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCWlmICghcHJpbnRfZm10KQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIFNlY29uZDogYWN0dWFsbHkgd3JpdGUgdGhlIEBwcmludF9mbXQgKi8KKwlfX3NldF9lbnRlcl9wcmludF9mbXQoZW50cnksIHByaW50X2ZtdCwgbGVuICsgMSk7CisJY2FsbC0+cHJpbnRfZm10ID0gcHJpbnRfZm10OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc3lzY2FsbF9wcmludF9mbXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQoreworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICplbnRyeSA9IGNhbGwtPmRhdGE7CisKKwlpZiAoZW50cnktPmVudGVyX2V2ZW50ID09IGNhbGwpCisJCWtmcmVlKGNhbGwtPnByaW50X2ZtdCk7CiB9CiAKIGludCBzeXNjYWxsX2VudGVyX2RlZmluZV9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQpAQCAtMzg2LDEyICszODEsMjIgQEAKIHsKIAlpbnQgaWQ7CiAKLQlpZCA9IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudChjYWxsLT5ldmVudCk7Ci0JaWYgKCFpZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JY2FsbC0+aWQgPSBpZDsKLQlJTklUX0xJU1RfSEVBRCgmY2FsbC0+ZmllbGRzKTsKLQlyZXR1cm4gMDsKKwlpZiAoc2V0X3N5c2NhbGxfcHJpbnRfZm10KGNhbGwpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZCA9IHRyYWNlX2V2ZW50X3Jhd19pbml0KGNhbGwpOworCisJaWYgKGlkIDwgMCkgeworCQlmcmVlX3N5c2NhbGxfcHJpbnRfZm10KGNhbGwpOworCQlyZXR1cm4gaWQ7CisJfQorCisJcmV0dXJuIGlkOworfQorCit1bnNpZ25lZCBsb25nIF9faW5pdCBhcmNoX3N5c2NhbGxfYWRkcihpbnQgbnIpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKXN5c19jYWxsX3RhYmxlW25yXTsKIH0KIAogaW50IF9faW5pdCBpbml0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKQpAQCAtNDIxLDcgKzQyNiw3IEBACiB9CiBjb3JlX2luaXRjYWxsKGluaXRfZnRyYWNlX3N5c2NhbGxzKTsKIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAKIHN0YXRpYyBERUNMQVJFX0JJVE1BUChlbmFibGVkX3Byb2ZfZW50ZXJfc3lzY2FsbHMsIE5SX3N5c2NhbGxzKTsKIHN0YXRpYyBERUNMQVJFX0JJVE1BUChlbmFibGVkX3Byb2ZfZXhpdF9zeXNjYWxscywgTlJfc3lzY2FsbHMpOwpAQCAtNDMzLDEyICs0MzgsOSBAQAogCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNfZGF0YTsKIAlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciAqcmVjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JY2hhciAqdHJhY2VfYnVmOwotCWNoYXIgKnJhd19kYXRhOwogCWludCBzeXNjYWxsX25yOwogCWludCByY3R4OwogCWludCBzaXplOwotCWludCBjcHU7CiAKIAlzeXNjYWxsX25yID0gc3lzY2FsbF9nZXRfbnIoY3VycmVudCwgcmVncyk7CiAJaWYgKCF0ZXN0X2JpdChzeXNjYWxsX25yLCBlbmFibGVkX3Byb2ZfZW50ZXJfc3lzY2FsbHMpKQpAQCAtNDU3LDM3ICs0NTksMTUgQEAKIAkJICAgICAgInByb2ZpbGUgYnVmZmVyIG5vdCBsYXJnZSBlbm91Z2giKSkKIAkJcmV0dXJuOwogCi0JLyogUHJvdGVjdCB0aGUgcGVyIGNwdSBidWZmZXIsIGJlZ2luIHRoZSByY3UgcmVhZCBzaWRlICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJlYyA9IChzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciAqKWZ0cmFjZV9wZXJmX2J1Zl9wcmVwYXJlKHNpemUsCisJCQkJc3lzX2RhdGEtPmVudGVyX2V2ZW50LT5pZCwgJnJjdHgsICZmbGFncyk7CisJaWYgKCFyZWMpCisJCXJldHVybjsKIAotCXJjdHggPSBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KCk7Ci0JaWYgKHJjdHggPCAwKQotCQlnb3RvIGVuZF9yZWN1cnNpb247Ci0KLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWYpOwotCi0JaWYgKCF0cmFjZV9idWYpCi0JCWdvdG8gZW5kOwotCi0JcmF3X2RhdGEgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIGNwdSk7Ci0KLQkvKiB6ZXJvIHRoZSBkZWFkIGJ5dGVzIGZyb20gYWxpZ24gdG8gbm90IGxlYWsgc3RhY2sgdG8gdXNlciAqLwotCSoodTY0ICopKCZyYXdfZGF0YVtzaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7Ci0KLQlyZWMgPSAoc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgKikgcmF3X2RhdGE7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmcmVjLT5lbnQsIDAsIDApOwotCXJlYy0+ZW50LnR5cGUgPSBzeXNfZGF0YS0+ZW50ZXJfZXZlbnQtPmlkOwogCXJlYy0+bnIgPSBzeXNjYWxsX25yOwogCXN5c2NhbGxfZ2V0X2FyZ3VtZW50cyhjdXJyZW50LCByZWdzLCAwLCBzeXNfZGF0YS0+bmJfYXJncywKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZyAqKSZyZWMtPmFyZ3MpOwotCXBlcmZfdHBfZXZlbnQoc3lzX2RhdGEtPmVudGVyX2V2ZW50LT5pZCwgMCwgMSwgcmVjLCBzaXplKTsKLQotZW5kOgotCXBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQocmN0eCk7Ci1lbmRfcmVjdXJzaW9uOgotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlmdHJhY2VfcGVyZl9idWZfc3VibWl0KHJlYywgc2l6ZSwgcmN0eCwgMCwgMSwgZmxhZ3MpOwogfQogCiBpbnQgcHJvZl9zeXNlbnRlcl9lbmFibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQpAQCAtNTMxLDExICs1MTEsOCBAQAogCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2V4aXQgKnJlYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzeXNjYWxsX25yOwotCWNoYXIgKnRyYWNlX2J1ZjsKLQljaGFyICpyYXdfZGF0YTsKIAlpbnQgcmN0eDsKIAlpbnQgc2l6ZTsKLQlpbnQgY3B1OwogCiAJc3lzY2FsbF9uciA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIHJlZ3MpOwogCWlmICghdGVzdF9iaXQoc3lzY2FsbF9uciwgZW5hYmxlZF9wcm9mX2V4aXRfc3lzY2FsbHMpKQpAQCAtNTU3LDM4ICs1MzQsMTUgQEAKIAkJImV4aXQgZXZlbnQgaGFzIGdyb3duIGFib3ZlIHByb2ZpbGUgYnVmZmVyIHNpemUiKSkKIAkJcmV0dXJuOwogCi0JLyogUHJvdGVjdCB0aGUgcGVyIGNwdSBidWZmZXIsIGJlZ2luIHRoZSByY3UgcmVhZCBzaWRlICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJlYyA9IChzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0ICopZnRyYWNlX3BlcmZfYnVmX3ByZXBhcmUoc2l6ZSwKKwkJCQlzeXNfZGF0YS0+ZXhpdF9ldmVudC0+aWQsICZyY3R4LCAmZmxhZ3MpOworCWlmICghcmVjKQorCQlyZXR1cm47CiAKLQlyY3R4ID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOwotCWlmIChyY3R4IDwgMCkKLQkJZ290byBlbmRfcmVjdXJzaW9uOwotCi0JY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmKTsKLQotCWlmICghdHJhY2VfYnVmKQotCQlnb3RvIGVuZDsKLQotCXJhd19kYXRhID0gcGVyX2NwdV9wdHIodHJhY2VfYnVmLCBjcHUpOwotCi0JLyogemVybyB0aGUgZGVhZCBieXRlcyBmcm9tIGFsaWduIHRvIG5vdCBsZWFrIHN0YWNrIHRvIHVzZXIgKi8KLQkqKHU2NCAqKSgmcmF3X2RhdGFbc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOwotCi0JcmVjID0gKHN0cnVjdCBzeXNjYWxsX3RyYWNlX2V4aXQgKilyYXdfZGF0YTsKLQotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJnJlYy0+ZW50LCAwLCAwKTsKLQlyZWMtPmVudC50eXBlID0gc3lzX2RhdGEtPmV4aXRfZXZlbnQtPmlkOwogCXJlYy0+bnIgPSBzeXNjYWxsX25yOwogCXJlYy0+cmV0ID0gc3lzY2FsbF9nZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MpOwogCi0JcGVyZl90cF9ldmVudChzeXNfZGF0YS0+ZXhpdF9ldmVudC0+aWQsIDAsIDEsIHJlYywgc2l6ZSk7Ci0KLWVuZDoKLQlwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHJjdHgpOwotZW5kX3JlY3Vyc2lvbjoKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJZnRyYWNlX3BlcmZfYnVmX3N1Ym1pdChyZWMsIHNpemUsIHJjdHgsIDAsIDEsIGZsYWdzKTsKIH0KIAogaW50IHByb2Zfc3lzZXhpdF9lbmFibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQpAQCAtNjAzLDcgKzU1Nyw3IEBACiAJCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3N5c19leGl0KHByb2Zfc3lzY2FsbF9leGl0KTsKIAlpZiAocmV0KSB7CiAJCXByX2luZm8oImV2ZW50IHRyYWNlOiBDb3VsZCBub3QgYWN0aXZhdGUiCi0JCQkJInN5c2NhbGwgZW50cnkgdHJhY2UgcG9pbnQiKTsKKwkJCQkic3lzY2FsbCBleGl0IHRyYWNlIHBvaW50Iik7CiAJfSBlbHNlIHsKIAkJc2V0X2JpdChudW0sIGVuYWJsZWRfcHJvZl9leGl0X3N5c2NhbGxzKTsKIAkJc3lzX3Byb2ZfcmVmY291bnRfZXhpdCsrOwpAQCAtNjI2LDYgKzU4MCw1IEBACiAJbXV0ZXhfdW5sb2NrKCZzeXNjYWxsX3RyYWNlX2xvY2spOwogfQogCi0jZW5kaWYKLQorI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlci5jIGIva2VybmVsL3VzZXIuYwppbmRleCA0NmQwMTY1Li43NjY0NjdiIDEwMDY0NAotLS0gYS9rZXJuZWwvdXNlci5jCisrKyBiL2tlcm5lbC91c2VyLmMKQEAgLTU2LDkgKzU2LDYgQEAKIAkuc2lncGVuZGluZwk9IEFUT01JQ19JTklUKDApLAogCS5sb2NrZWRfc2htICAgICA9IDAsCiAJLnVzZXJfbnMJPSAmaW5pdF91c2VyX25zLAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JLnRnCQk9ICZpbml0X3Rhc2tfZ3JvdXAsCi0jZW5kaWYKIH07CiAKIC8qCkBAIC03NSwyNjggKzcyLDYgQEAKIAlwdXRfdXNlcl9ucyh1cC0+dXNlcl9ucyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCi1zdGF0aWMgdm9pZCBzY2hlZF9kZXN0cm95X3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCkKLXsKLQlzY2hlZF9kZXN0cm95X2dyb3VwKHVwLT50Zyk7Ci19Ci0KLXN0YXRpYyBpbnQgc2NoZWRfY3JlYXRlX3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JdXAtPnRnID0gc2NoZWRfY3JlYXRlX2dyb3VwKCZyb290X3Rhc2tfZ3JvdXApOwotCWlmIChJU19FUlIodXAtPnRnKSkKLQkJcmMgPSAtRU5PTUVNOwotCi0Jc2V0X3RnX3VpZCh1cCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLSNlbHNlCS8qIENPTkZJR19VU0VSX1NDSEVEICovCi0KLXN0YXRpYyB2b2lkIHNjaGVkX2Rlc3Ryb3lfdXNlcihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwKSB7IH0KLXN0YXRpYyBpbnQgc2NoZWRfY3JlYXRlX3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCkgeyByZXR1cm4gMDsgfQotCi0jZW5kaWYJLyogQ09ORklHX1VTRVJfU0NIRUQgKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1VTRVJfU0NIRUQpICYmIGRlZmluZWQoQ09ORklHX1NZU0ZTKQotCi1zdGF0aWMgc3RydWN0IHVzZXJfc3RydWN0ICp1aWRfaGFzaF9maW5kKHVpZF90IHVpZCwgc3RydWN0IGhsaXN0X2hlYWQgKmhhc2hlbnQpCi17Ci0Jc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyOwotCXN0cnVjdCBobGlzdF9ub2RlICpoOwotCi0JaGxpc3RfZm9yX2VhY2hfZW50cnkodXNlciwgaCwgaGFzaGVudCwgdWlkaGFzaF9ub2RlKSB7Ci0JCWlmICh1c2VyLT51aWQgPT0gdWlkKSB7Ci0JCQkvKiBwb3NzaWJseSByZXN1cnJlY3QgYW4gImFsbW9zdCBkZWxldGVkIiBvYmplY3QgKi8KLQkJCWlmIChhdG9taWNfaW5jX3JldHVybigmdXNlci0+X19jb3VudCkgPT0gMSkKLQkJCQljYW5jZWxfZGVsYXllZF93b3JrKCZ1c2VyLT53b3JrKTsKLQkJCXJldHVybiB1c2VyOwotCQl9Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qga3NldCAqdWlkc19rc2V0OyAvKiByZXByZXNlbnRzIHRoZSAvc3lzL2tlcm5lbC91aWRzLyBkaXJlY3RvcnkgKi8KLXN0YXRpYyBERUZJTkVfTVVURVgodWlkc19tdXRleCk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1aWRzX211dGV4X2xvY2sodm9pZCkKLXsKLQltdXRleF9sb2NrKCZ1aWRzX211dGV4KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVpZHNfbXV0ZXhfdW5sb2NrKHZvaWQpCi17Ci0JbXV0ZXhfdW5sb2NrKCZ1aWRzX211dGV4KTsKLX0KLQotLyogdWlkIGRpcmVjdG9yeSBhdHRyaWJ1dGVzICovCi0jaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLXN0YXRpYyBzc2l6ZV90IGNwdV9zaGFyZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCSAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXAgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHVzZXJfc3RydWN0LCBrb2JqKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgc2NoZWRfZ3JvdXBfc2hhcmVzKHVwLT50ZykpOwotfQotCi1zdGF0aWMgc3NpemVfdCBjcHVfc2hhcmVzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQotewotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXAgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHVzZXJfc3RydWN0LCBrb2JqKTsKLQl1bnNpZ25lZCBsb25nIHNoYXJlczsKLQlpbnQgcmM7Ci0KLQlzc2NhbmYoYnVmLCAiJWx1IiwgJnNoYXJlcyk7Ci0KLQlyYyA9IHNjaGVkX2dyb3VwX3NldF9zaGFyZXModXAtPnRnLCBzaGFyZXMpOwotCi0JcmV0dXJuIChyYyA/IHJjIDogc2l6ZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY3B1X3NoYXJlX2F0dHIgPQotCV9fQVRUUihjcHVfc2hhcmUsIDA2NDQsIGNwdV9zaGFyZXNfc2hvdywgY3B1X3NoYXJlc19zdG9yZSk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAotc3RhdGljIHNzaXplX3QgY3B1X3J0X3J1bnRpbWVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgY2hhciAqYnVmKQotewotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXAgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHVzZXJfc3RydWN0LCBrb2JqKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgc2NoZWRfZ3JvdXBfcnRfcnVudGltZSh1cC0+dGcpKTsKLX0KLQotc3RhdGljIHNzaXplX3QgY3B1X3J0X3J1bnRpbWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB1c2VyX3N0cnVjdCwga29iaik7Ci0JdW5zaWduZWQgbG9uZyBydF9ydW50aW1lOwotCWludCByYzsKLQotCXNzY2FuZihidWYsICIlbGQiLCAmcnRfcnVudGltZSk7Ci0KLQlyYyA9IHNjaGVkX2dyb3VwX3NldF9ydF9ydW50aW1lKHVwLT50ZywgcnRfcnVudGltZSk7Ci0KLQlyZXR1cm4gKHJjID8gcmMgOiBzaXplKTsKLX0KLQotc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjcHVfcnRfcnVudGltZV9hdHRyID0KLQlfX0FUVFIoY3B1X3J0X3J1bnRpbWUsIDA2NDQsIGNwdV9ydF9ydW50aW1lX3Nob3csIGNwdV9ydF9ydW50aW1lX3N0b3JlKTsKLQotc3RhdGljIHNzaXplX3QgY3B1X3J0X3BlcmlvZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHVzZXJfc3RydWN0ICp1cCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QsIGtvYmopOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBzY2hlZF9ncm91cF9ydF9wZXJpb2QodXAtPnRnKSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGNwdV9ydF9wZXJpb2Rfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB1c2VyX3N0cnVjdCwga29iaik7Ci0JdW5zaWduZWQgbG9uZyBydF9wZXJpb2Q7Ci0JaW50IHJjOwotCi0Jc3NjYW5mKGJ1ZiwgIiVsdSIsICZydF9wZXJpb2QpOwotCi0JcmMgPSBzY2hlZF9ncm91cF9zZXRfcnRfcGVyaW9kKHVwLT50ZywgcnRfcGVyaW9kKTsKLQotCXJldHVybiAocmMgPyByYyA6IHNpemUpOwotfQotCi1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNwdV9ydF9wZXJpb2RfYXR0ciA9Ci0JX19BVFRSKGNwdV9ydF9wZXJpb2QsIDA2NDQsIGNwdV9ydF9wZXJpb2Rfc2hvdywgY3B1X3J0X3BlcmlvZF9zdG9yZSk7Ci0jZW5kaWYKLQotLyogZGVmYXVsdCBhdHRyaWJ1dGVzIHBlciB1aWQgZGlyZWN0b3J5ICovCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdWlkc19hdHRyaWJ1dGVzW10gPSB7Ci0jaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLQkmY3B1X3NoYXJlX2F0dHIuYXR0ciwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAotCSZjcHVfcnRfcnVudGltZV9hdHRyLmF0dHIsCi0JJmNwdV9ydF9wZXJpb2RfYXR0ci5hdHRyLAotI2VuZGlmCi0JTlVMTAotfTsKLQotLyogdGhlIGxpZmV0aW1lIG9mIHVzZXJfc3RydWN0IGlzIG5vdCBtYW5hZ2VkIGJ5IHRoZSBjb3JlIChub3cpICovCi1zdGF0aWMgdm9pZCB1aWRzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgc3RydWN0IGtvYmpfdHlwZSB1aWRzX2t0eXBlID0gewotCS5zeXNmc19vcHMgPSAma29ial9zeXNmc19vcHMsCi0JLmRlZmF1bHRfYXR0cnMgPSB1aWRzX2F0dHJpYnV0ZXMsCi0JLnJlbGVhc2UgPSB1aWRzX3JlbGVhc2UsCi19OwotCi0vKgotICogQ3JlYXRlIC9zeXMva2VybmVsL3VpZHMvPHVpZD4vY3B1X3NoYXJlIGZpbGUgZm9yIHRoaXMgdXNlcgotICogV2UgZG8gbm90IGNyZWF0ZSB0aGlzIGZpbGUgZm9yIHVzZXJzIGluIGEgdXNlciBuYW1lc3BhY2UgKHVudGlsCi0gKiBzeXNmcyB0YWdnaW5nIGlzIGltcGxlbWVudGVkKS4KLSAqCi0gKiBTZWUgRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy50eHQgZm9yIHJhbWlmaWNhdGlvbnMuCi0gKi8KLXN0YXRpYyBpbnQgdWlkc191c2VyX2NyZWF0ZShzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwKQotewotCXN0cnVjdCBrb2JqZWN0ICprb2JqID0gJnVwLT5rb2JqOwotCWludCBlcnJvcjsKLQotCW1lbXNldChrb2JqLCAwLCBzaXplb2Yoc3RydWN0IGtvYmplY3QpKTsKLQlpZiAodXAtPnVzZXJfbnMgIT0gJmluaXRfdXNlcl9ucykKLQkJcmV0dXJuIDA7Ci0Ja29iai0+a3NldCA9IHVpZHNfa3NldDsKLQllcnJvciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKGtvYmosICZ1aWRzX2t0eXBlLCBOVUxMLCAiJWQiLCB1cC0+dWlkKTsKLQlpZiAoZXJyb3IpIHsKLQkJa29iamVjdF9wdXQoa29iaik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlrb2JqZWN0X3VldmVudChrb2JqLCBLT0JKX0FERCk7Ci1kb25lOgotCXJldHVybiBlcnJvcjsKLX0KLQotLyogY3JlYXRlIHRoZXNlIGVudHJpZXMgaW4gc3lzZnM6Ci0gKiAJIi9zeXMva2VybmVsL3VpZHMiIGRpcmVjdG9yeQotICogCSIvc3lzL2tlcm5lbC91aWRzLzAiIGRpcmVjdG9yeSAoZm9yIHJvb3QgdXNlcikKLSAqIAkiL3N5cy9rZXJuZWwvdWlkcy8wL2NwdV9zaGFyZSIgZmlsZSAoZm9yIHJvb3QgdXNlcikKLSAqLwotaW50IF9faW5pdCB1aWRzX3N5c2ZzX2luaXQodm9pZCkKLXsKLQl1aWRzX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJ1aWRzIiwgTlVMTCwga2VybmVsX2tvYmopOwotCWlmICghdWlkc19rc2V0KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldHVybiB1aWRzX3VzZXJfY3JlYXRlKCZyb290X3VzZXIpOwotfQotCi0vKiBkZWxheWVkIHdvcmsgZnVuY3Rpb24gdG8gcmVtb3ZlIHN5c2ZzIGRpcmVjdG9yeSBmb3IgYSB1c2VyIGFuZCBmcmVlIHVwCi0gKiBjb3JyZXNwb25kaW5nIHN0cnVjdHVyZXMuCi0gKi8KLXN0YXRpYyB2b2lkIGNsZWFudXBfdXNlcl9zdHJ1Y3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3KQotewotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXAgPSBjb250YWluZXJfb2Yodywgc3RydWN0IHVzZXJfc3RydWN0LCB3b3JrLndvcmspOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJlbW92ZV91c2VyID0gMDsKLQotCS8qIE1ha2UgdWlkX2hhc2hfcmVtb3ZlKCkgKyBzeXNmc19yZW1vdmVfZmlsZSgpICsga29iamVjdF9kZWwoKQotCSAqIGF0b21pYy4KLQkgKi8KLQl1aWRzX211dGV4X2xvY2soKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ1aWRoYXNoX2xvY2ssIGZsYWdzKTsKLQlpZiAoYXRvbWljX3JlYWQoJnVwLT5fX2NvdW50KSA9PSAwKSB7Ci0JCXVpZF9oYXNoX3JlbW92ZSh1cCk7Ci0JCXJlbW92ZV91c2VyID0gMTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWlkaGFzaF9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIXJlbW92ZV91c2VyKQotCQlnb3RvIGRvbmU7Ci0KLQlpZiAodXAtPnVzZXJfbnMgPT0gJmluaXRfdXNlcl9ucykgewotCQlrb2JqZWN0X3VldmVudCgmdXAtPmtvYmosIEtPQkpfUkVNT1ZFKTsKLQkJa29iamVjdF9kZWwoJnVwLT5rb2JqKTsKLQkJa29iamVjdF9wdXQoJnVwLT5rb2JqKTsKLQl9Ci0KLQlzY2hlZF9kZXN0cm95X3VzZXIodXApOwotCWtleV9wdXQodXAtPnVpZF9rZXlyaW5nKTsKLQlrZXlfcHV0KHVwLT5zZXNzaW9uX2tleXJpbmcpOwotCWttZW1fY2FjaGVfZnJlZSh1aWRfY2FjaGVwLCB1cCk7Ci0KLWRvbmU6Ci0JdWlkc19tdXRleF91bmxvY2soKTsKLX0KLQotLyogSVJRcyBhcmUgZGlzYWJsZWQgYW5kIHVpZGhhc2hfbG9jayBpcyBoZWxkIHVwb24gZnVuY3Rpb24gZW50cnkuCi0gKiBJUlEgc3RhdGUgKGFzIHN0b3JlZCBpbiBmbGFncykgaXMgcmVzdG9yZWQgYW5kIHVpZGhhc2hfbG9jayByZWxlYXNlZAotICogdXBvbiBmdW5jdGlvbiBleGl0LgotICovCi1zdGF0aWMgdm9pZCBmcmVlX3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCwgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlJTklUX0RFTEFZRURfV09SSygmdXAtPndvcmssIGNsZWFudXBfdXNlcl9zdHJ1Y3QpOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdXAtPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVpZGhhc2hfbG9jaywgZmxhZ3MpOwotfQotCi0jZWxzZQkvKiBDT05GSUdfVVNFUl9TQ0hFRCAmJiBDT05GSUdfU1lTRlMgKi8KLQogc3RhdGljIHN0cnVjdCB1c2VyX3N0cnVjdCAqdWlkX2hhc2hfZmluZCh1aWRfdCB1aWQsIHN0cnVjdCBobGlzdF9oZWFkICpoYXNoZW50KQogewogCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKQEAgLTM1MiwxMSArODcsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi1pbnQgdWlkc19zeXNmc19pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHVpZHNfdXNlcl9jcmVhdGUoc3RydWN0IHVzZXJfc3RydWN0ICp1cCkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIHVpZHNfbXV0ZXhfbG9jayh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1aWRzX211dGV4X3VubG9jayh2b2lkKSB7IH0KLQogLyogSVJRcyBhcmUgZGlzYWJsZWQgYW5kIHVpZGhhc2hfbG9jayBpcyBoZWxkIHVwb24gZnVuY3Rpb24gZW50cnkuCiAgKiBJUlEgc3RhdGUgKGFzIHN0b3JlZCBpbiBmbGFncykgaXMgcmVzdG9yZWQgYW5kIHVpZGhhc2hfbG9jayByZWxlYXNlZAogICogdXBvbiBmdW5jdGlvbiBleGl0LgpAQCAtMzY1LDMyICs5NSwxMSBAQAogewogCXVpZF9oYXNoX3JlbW92ZSh1cCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWlkaGFzaF9sb2NrLCBmbGFncyk7Ci0Jc2NoZWRfZGVzdHJveV91c2VyKHVwKTsKIAlrZXlfcHV0KHVwLT51aWRfa2V5cmluZyk7CiAJa2V5X3B1dCh1cC0+c2Vzc2lvbl9rZXlyaW5nKTsKIAlrbWVtX2NhY2hlX2ZyZWUodWlkX2NhY2hlcCwgdXApOwogfQogCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1JUX0dST1VQX1NDSEVEKSAmJiBkZWZpbmVkKENPTkZJR19VU0VSX1NDSEVEKQotLyoKLSAqIFdlIG5lZWQgdG8gY2hlY2sgaWYgYSBzZXR1aWQgY2FuIHRha2UgcGxhY2UuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZAotICogYmVmb3JlIHN1Y2Nlc3NmdWxseSBjb21wbGV0aW5nIHRoZSBzZXR1aWQuCi0gKi8KLWludCB0YXNrX2Nhbl9zd2l0Y2hfdXNlcihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQotCXJldHVybiBzY2hlZF9ydF9jYW5fYXR0YWNoKHVwLT50ZywgdHNrKTsKLQotfQotI2Vsc2UKLWludCB0YXNrX2Nhbl9zd2l0Y2hfdXNlcihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlyZXR1cm4gMTsKLX0KLSNlbmRpZgotCiAvKgogICogTG9jYXRlIHRoZSB1c2VyX3N0cnVjdCBmb3IgdGhlIHBhc3NlZCBVSUQuICBJZiBmb3VuZCwgdGFrZSBhIHJlZiBvbiBpdC4gIFRoZQogICogY2FsbGVyIG11c3QgdW5kbyB0aGF0IHJlZiB3aXRoIGZyZWVfdWlkKCkuCkBAIC00MzEsOCArMTQwLDYgQEAKIAkvKiBNYWtlIHVpZF9oYXNoX2ZpbmQoKSArIHVpZHNfdXNlcl9jcmVhdGUoKSArIHVpZF9oYXNoX2luc2VydCgpCiAJICogYXRvbWljLgogCSAqLwotCXVpZHNfbXV0ZXhfbG9jaygpOwotCiAJc3Bpbl9sb2NrX2lycSgmdWlkaGFzaF9sb2NrKTsKIAl1cCA9IHVpZF9oYXNoX2ZpbmQodWlkLCBoYXNoZW50KTsKIAlzcGluX3VubG9ja19pcnEoJnVpZGhhc2hfbG9jayk7CkBAIC00NDUsMTQgKzE1Miw4IEBACiAJCW5ldy0+dWlkID0gdWlkOwogCQlhdG9taWNfc2V0KCZuZXctPl9fY291bnQsIDEpOwogCi0JCWlmIChzY2hlZF9jcmVhdGVfdXNlcihuZXcpIDwgMCkKLQkJCWdvdG8gb3V0X2ZyZWVfdXNlcjsKLQogCQluZXctPnVzZXJfbnMgPSBnZXRfdXNlcl9ucyhucyk7CiAKLQkJaWYgKHVpZHNfdXNlcl9jcmVhdGUobmV3KSkKLQkJCWdvdG8gb3V0X2Rlc3RveV9zY2hlZDsKLQogCQkvKgogCQkgKiBCZWZvcmUgYWRkaW5nIHRoaXMsIGNoZWNrIHdoZXRoZXIgd2UgcmFjZWQKIAkJICogb24gYWRkaW5nIHRoZSBzYW1lIHVzZXIgYWxyZWFkeS4uCkBAIC00NzUsMTcgKzE3NiwxMSBAQAogCQlzcGluX3VubG9ja19pcnEoJnVpZGhhc2hfbG9jayk7CiAJfQogCi0JdWlkc19tdXRleF91bmxvY2soKTsKLQogCXJldHVybiB1cDsKIAotb3V0X2Rlc3RveV9zY2hlZDoKLQlzY2hlZF9kZXN0cm95X3VzZXIobmV3KTsKIAlwdXRfdXNlcl9ucyhuZXctPnVzZXJfbnMpOwotb3V0X2ZyZWVfdXNlcjoKIAlrbWVtX2NhY2hlX2ZyZWUodWlkX2NhY2hlcCwgbmV3KTsKIG91dF91bmxvY2s6Ci0JdWlkc19tdXRleF91bmxvY2soKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCAyNWMzZWQ1Li41ZTM0MDdkIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtMzU1LDcgKzM1NSw3IEBACiBjb25maWcgREVCVUdfS01FTUxFQUsKIAlib29sICJLZXJuZWwgbWVtb3J5IGxlYWsgZGV0ZWN0b3IiCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgRVhQRVJJTUVOVEFMICYmICFNRU1PUllfSE9UUExVRyAmJiBcCi0JCShYODYgfHwgQVJNIHx8IFBQQyB8fCBTMzkwKQorCQkoWDg2IHx8IEFSTSB8fCBQUEMgfHwgUzM5MCB8fCBTVVBFUkgpCiAKIAlzZWxlY3QgREVCVUdfRlMgaWYgU1lTRlMKIAlzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlQKQEAgLTQ5OSw2ICs0OTksMTggQEAKIAogCSBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgRG9jdW1lbnRhdGlvbi9sb2NrZGVwLWRlc2lnbi50eHQuCiAKK2NvbmZpZyBQUk9WRV9SQ1UKKwlib29sICJSQ1UgZGVidWdnaW5nOiBwcm92ZSBSQ1UgY29ycmVjdG5lc3MiCisJZGVwZW5kcyBvbiBQUk9WRV9MT0NLSU5HCisJZGVmYXVsdCBuCisJaGVscAorCSBUaGlzIGZlYXR1cmUgZW5hYmxlcyBsb2NrZGVwIGV4dGVuc2lvbnMgdGhhdCBjaGVjayBmb3IgY29ycmVjdAorCSB1c2Ugb2YgUkNVIEFQSXMuICBUaGlzIGlzIGN1cnJlbnRseSB1bmRlciBkZXZlbG9wbWVudC4gIFNheSBZCisJIGlmIHlvdSB3YW50IHRvIGRlYnVnIFJDVSB1c2FnZSBvciBoZWxwIHdvcmsgb24gdGhlIFBST1ZFX1JDVQorCSBmZWF0dXJlLgorCisJIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgorCiBjb25maWcgTE9DS0RFUAogCWJvb2wKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBUUkFDRV9JUlFGTEFHU19TVVBQT1JUICYmIFNUQUNLVFJBQ0VfU1VQUE9SVCAmJiBMT0NLREVQX1NVUFBPUlQKQEAgLTc2NSwxMCArNzc3LDIyIEBACiAJICBDUFVzIGFyZSBkZWxheWluZyB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QsIGJ1dCBvbmx5IHdoZW4KIAkgIHRoZSBncmFjZSBwZXJpb2QgZXh0ZW5kcyBmb3IgZXhjZXNzaXZlIHRpbWUgcGVyaW9kcy4KIAotCSAgU2F5IFkgaWYgeW91IHdhbnQgUkNVIHRvIHBlcmZvcm0gc3VjaCBjaGVja3MuCisJICBTYXkgTiBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHN1Y2ggY2hlY2tzLgorCisJICBTYXkgWSBpZiB5b3UgYXJlIHVuc3VyZS4KKworY29uZmlnIFJDVV9DUFVfU1RBTExfVkVSQk9TRQorCWJvb2wgIlByaW50IGFkZGl0aW9uYWwgcGVyLXRhc2sgaW5mb3JtYXRpb24gZm9yIFJDVV9DUFVfU1RBTExfREVURUNUT1IiCisJZGVwZW5kcyBvbiBSQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICYmIFRSRUVfUFJFRU1QVF9SQ1UKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIG9wdGlvbiBjYXVzZXMgUkNVIHRvIHByaW50ayBkZXRhaWxlZCBwZXItdGFzayBpbmZvcm1hdGlvbgorCSAgZm9yIGFueSB0YXNrcyB0aGF0IGFyZSBzdGFsbGluZyB0aGUgY3VycmVudCBSQ1UgZ3JhY2UgcGVyaW9kLgogCiAJICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KIAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1Y2ggY2hlY2tzLgorCiBjb25maWcgS1BST0JFU19TQU5JVFlfVEVTVAogCWJvb2wgIktwcm9iZXMgc2FuaXR5IHRlc3RzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCmRpZmYgLS1naXQgYS9saWIvZGVidWdfbG9ja3MuYyBiL2xpYi9kZWJ1Z19sb2Nrcy5jCmluZGV4IGJjM2IxMTcuLjViZjAwMjAgMTAwNjQ0Ci0tLSBhL2xpYi9kZWJ1Z19sb2Nrcy5jCisrKyBiL2xpYi9kZWJ1Z19sb2Nrcy5jCkBAIC0yMyw2ICsyMyw3IEBACiAgKiBzaHV0IHVwIGFmdGVyIHRoYXQuCiAgKi8KIGludCBkZWJ1Z19sb2NrcyA9IDE7CitFWFBPUlRfU1lNQk9MX0dQTChkZWJ1Z19sb2Nrcyk7CiAKIC8qCiAgKiBUaGUgbG9ja2luZy10ZXN0c3VpdGUgdXNlcyA8ZGVidWdfbG9ja3Nfc2lsZW50PiB0byBnZXQgYQpkaWZmIC0tZ2l0IGEvbGliL2RtYS1kZWJ1Zy5jIGIvbGliL2RtYS1kZWJ1Zy5jCmluZGV4IDdkMmYwYjMuLmJhOGI2NzAgMTAwNjQ0Ci0tLSBhL2xpYi9kbWEtZGVidWcuYworKysgYi9saWIvZG1hLWRlYnVnLmMKQEAgLTU4Nyw3ICs1ODcsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmaWx0ZXJfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZpbHRlcl9mb3BzID0gewogCS5yZWFkICA9IGZpbHRlcl9yZWFkLAogCS53cml0ZSA9IGZpbHRlcl93cml0ZSwKIH07CmRpZmYgLS1naXQgYS9saWIvaHdlaWdodC5jIGIvbGliL2h3ZWlnaHQuYwppbmRleCAzODk0MjRlLi42M2VlNGViIDEwMDY0NAotLS0gYS9saWIvaHdlaWdodC5jCisrKyBiL2xpYi9od2VpZ2h0LmMKQEAgLTExLDExICsxMSwxOCBAQAogCiB1bnNpZ25lZCBpbnQgaHdlaWdodDMyKHVuc2lnbmVkIGludCB3KQogeworI2lmZGVmIEFSQ0hfSEFTX0ZBU1RfTVVMVElQTElFUgorCXcgLT0gKHcgPj4gMSkgJiAweDU1NTU1NTU1OworCXcgPSAgKHcgJiAweDMzMzMzMzMzKSArICgodyA+PiAyKSAmIDB4MzMzMzMzMzMpOworCXcgPSAgKHcgKyAodyA+PiA0KSkgJiAweDBmMGYwZjBmOworCXJldHVybiAodyAqIDB4MDEwMTAxMDEpID4+IDI0OworI2Vsc2UKIAl1bnNpZ25lZCBpbnQgcmVzID0gdyAtICgodyA+PiAxKSAmIDB4NTU1NTU1NTUpOwogCXJlcyA9IChyZXMgJiAweDMzMzMzMzMzKSArICgocmVzID4+IDIpICYgMHgzMzMzMzMzMyk7CiAJcmVzID0gKHJlcyArIChyZXMgPj4gNCkpICYgMHgwRjBGMEYwRjsKIAlyZXMgPSByZXMgKyAocmVzID4+IDgpOwogCXJldHVybiAocmVzICsgKHJlcyA+PiAxNikpICYgMHgwMDAwMDBGRjsKKyNlbmRpZgogfQogRVhQT1JUX1NZTUJPTChod2VpZ2h0MzIpOwogCmRpZmYgLS1naXQgYS9saWIvaWRyLmMgYi9saWIvaWRyLmMKaW5kZXggMWNhYzcyNi4uMmViMWRjYSAxMDA2NDQKLS0tIGEvbGliL2lkci5jCisrKyBiL2xpYi9pZHIuYwpAQCAtMTU2LDEwICsxNTYsMTIgQEAKIAkJCWlkID0gKGlkIHwgKCgxIDw8IChJRFJfQklUUyAqIGwpKSAtIDEpKSArIDE7CiAKIAkJCS8qIGlmIGFscmVhZHkgYXQgdGhlIHRvcCBsYXllciwgd2UgbmVlZCB0byBncm93ICovCi0JCQlpZiAoIShwID0gcGFbbF0pKSB7CisJCQlpZiAoaWQgPj0gMSA8PCAoaWRwLT5sYXllcnMgKiBJRFJfQklUUykpIHsKIAkJCQkqc3RhcnRpbmdfaWQgPSBpZDsKIAkJCQlyZXR1cm4gSURSX05FRURfVE9fR1JPVzsKIAkJCX0KKwkJCXAgPSBwYVtsXTsKKwkJCUJVR19PTighcCk7CiAKIAkJCS8qIElmIHdlIG5lZWQgdG8gZ28gdXAgb25lIGxheWVyLCBjb250aW51ZSB0aGUKIAkJCSAqIGxvb3A7IG90aGVyd2lzZSwgcmVzdGFydCBmcm9tIHRoZSB0b3AuCkBAIC01MDIsNyArNTA0LDcgQEAKIAlpbnQgbjsKIAlzdHJ1Y3QgaWRyX2xheWVyICpwOwogCi0JcCA9IHJjdV9kZXJlZmVyZW5jZShpZHAtPnRvcCk7CisJcCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoaWRwLT50b3ApOwogCWlmICghcCkKIAkJcmV0dXJuIE5VTEw7CiAJbiA9IChwLT5sYXllcisxKSAqIElEUl9CSVRTOwpAQCAtNTE3LDcgKzUxOSw3IEBACiAJd2hpbGUgKG4gPiAwICYmIHApIHsKIAkJbiAtPSBJRFJfQklUUzsKIAkJQlVHX09OKG4gIT0gcC0+bGF5ZXIqSURSX0JJVFMpOwotCQlwID0gcmN1X2RlcmVmZXJlbmNlKHAtPmFyeVsoaWQgPj4gbikgJiBJRFJfTUFTS10pOworCQlwID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhwLT5hcnlbKGlkID4+IG4pICYgSURSX01BU0tdKTsKIAl9CiAJcmV0dXJuKCh2b2lkICopcCk7CiB9CkBAIC01NTAsNyArNTUyLDcgQEAKIAlzdHJ1Y3QgaWRyX2xheWVyICoqcGFhID0gJnBhWzBdOwogCiAJbiA9IGlkcC0+bGF5ZXJzICogSURSX0JJVFM7Ci0JcCA9IHJjdV9kZXJlZmVyZW5jZShpZHAtPnRvcCk7CisJcCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoaWRwLT50b3ApOwogCW1heCA9IDEgPDwgbjsKIAogCWlkID0gMDsKQEAgLTU1OCw3ICs1NjAsNyBAQAogCQl3aGlsZSAobiA+IDAgJiYgcCkgewogCQkJbiAtPSBJRFJfQklUUzsKIAkJCSpwYWErKyA9IHA7Ci0JCQlwID0gcmN1X2RlcmVmZXJlbmNlKHAtPmFyeVsoaWQgPj4gbikgJiBJRFJfTUFTS10pOworCQkJcCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocC0+YXJ5WyhpZCA+PiBuKSAmIElEUl9NQVNLXSk7CiAJCX0KIAogCQlpZiAocCkgewpkaWZmIC0tZ2l0IGEvbGliL2xtYi5jIGIvbGliL2xtYi5jCmluZGV4IDljZWUxNzEuLmIxZmM1MjYgMTAwNjQ0Ci0tLSBhL2xpYi9sbWIuYworKysgYi9saWIvbG1iLmMKQEAgLTIwNSw5ICsyMDUsOCBAQAogCiB9CiAKLWxvbmcgbG1iX3JlbW92ZSh1NjQgYmFzZSwgdTY0IHNpemUpCitzdGF0aWMgbG9uZyBfX2xtYl9yZW1vdmUoc3RydWN0IGxtYl9yZWdpb24gKnJnbiwgdTY0IGJhc2UsIHU2NCBzaXplKQogewotCXN0cnVjdCBsbWJfcmVnaW9uICpyZ24gPSAmKGxtYi5tZW1vcnkpOwogCXU2NCByZ25iZWdpbiwgcmduZW5kOwogCXU2NCBlbmQgPSBiYXNlICsgc2l6ZTsKIAlpbnQgaTsKQEAgLTI1NCw2ICsyNTMsMTYgQEAKIAlyZXR1cm4gbG1iX2FkZF9yZWdpb24ocmduLCBlbmQsIHJnbmVuZCAtIGVuZCk7CiB9CiAKK2xvbmcgbG1iX3JlbW92ZSh1NjQgYmFzZSwgdTY0IHNpemUpCit7CisJcmV0dXJuIF9fbG1iX3JlbW92ZSgmbG1iLm1lbW9yeSwgYmFzZSwgc2l6ZSk7Cit9CisKK2xvbmcgX19pbml0IGxtYl9mcmVlKHU2NCBiYXNlLCB1NjQgc2l6ZSkKK3sKKwlyZXR1cm4gX19sbWJfcmVtb3ZlKCZsbWIucmVzZXJ2ZWQsIGJhc2UsIHNpemUpOworfQorCiBsb25nIF9faW5pdCBsbWJfcmVzZXJ2ZSh1NjQgYmFzZSwgdTY0IHNpemUpCiB7CiAJc3RydWN0IGxtYl9yZWdpb24gKl9yZ24gPSAmbG1iLnJlc2VydmVkOwpkaWZmIC0tZ2l0IGEvbGliL3JhZGl4LXRyZWUuYyBiL2xpYi9yYWRpeC10cmVlLmMKaW5kZXggOTJjZGQ5OS4uNmI5NjcwZCAxMDA2NDQKLS0tIGEvbGliL3JhZGl4LXRyZWUuYworKysgYi9saWIvcmFkaXgtdHJlZS5jCkBAIC0zNjQsNyArMzY0LDcgQEAKIAl1bnNpZ25lZCBpbnQgaGVpZ2h0LCBzaGlmdDsKIAlzdHJ1Y3QgcmFkaXhfdHJlZV9ub2RlICpub2RlLCAqKnNsb3Q7CiAKLQlub2RlID0gcmN1X2RlcmVmZXJlbmNlKHJvb3QtPnJub2RlKTsKKwlub2RlID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyhyb290LT5ybm9kZSk7CiAJaWYgKG5vZGUgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTM4NCw3ICszODQsNyBAQAogCWRvIHsKIAkJc2xvdCA9IChzdHJ1Y3QgcmFkaXhfdHJlZV9ub2RlICoqKQogCQkJKG5vZGUtPnNsb3RzICsgKChpbmRleD4+c2hpZnQpICYgUkFESVhfVFJFRV9NQVBfTUFTSykpOwotCQlub2RlID0gcmN1X2RlcmVmZXJlbmNlKCpzbG90KTsKKwkJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKnNsb3QpOwogCQlpZiAobm9kZSA9PSBOVUxMKQogCQkJcmV0dXJuIE5VTEw7CiAKQEAgLTU2OCw3ICs1NjgsNyBAQAogCWlmICghcm9vdF90YWdfZ2V0KHJvb3QsIHRhZykpCiAJCXJldHVybiAwOwogCi0Jbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShyb290LT5ybm9kZSk7CisJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocm9vdC0+cm5vZGUpOwogCWlmIChub2RlID09IE5VTEwpCiAJCXJldHVybiAwOwogCkBAIC02MDIsNyArNjAyLDcgQEAKIAkJCUJVR19PTihyZXQgJiYgc2F3X3Vuc2V0X3RhZyk7CiAJCQlyZXR1cm4gISFyZXQ7CiAJCX0KLQkJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShub2RlLT5zbG90c1tvZmZzZXRdKTsKKwkJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobm9kZS0+c2xvdHNbb2Zmc2V0XSk7CiAJCXNoaWZ0IC09IFJBRElYX1RSRUVfTUFQX1NISUZUOwogCQloZWlnaHQtLTsKIAl9CkBAIC03MTEsNyArNzExLDcgQEAKIAkJfQogCiAJCXNoaWZ0IC09IFJBRElYX1RSRUVfTUFQX1NISUZUOwotCQlzbG90ID0gcmN1X2RlcmVmZXJlbmNlKHNsb3QtPnNsb3RzW2ldKTsKKwkJc2xvdCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoc2xvdC0+c2xvdHNbaV0pOwogCQlpZiAoc2xvdCA9PSBOVUxMKQogCQkJZ290byBvdXQ7CiAJfQpAQCAtNzU4LDcgKzc1OCw3IEBACiAJdW5zaWduZWQgbG9uZyBjdXJfaW5kZXggPSBmaXJzdF9pbmRleDsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCi0Jbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShyb290LT5ybm9kZSk7CisJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocm9vdC0+cm5vZGUpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuIDA7CiAKQEAgLTc4Nyw3ICs3ODcsNyBAQAogCQkJc2xvdCA9ICooKCh2b2lkICoqKilyZXN1bHRzKVtyZXQgKyBpXSk7CiAJCQlpZiAoIXNsb3QpCiAJCQkJY29udGludWU7Ci0JCQlyZXN1bHRzW3JldCArIG5yX2ZvdW5kXSA9IHJjdV9kZXJlZmVyZW5jZShzbG90KTsKKwkJCXJlc3VsdHNbcmV0ICsgbnJfZm91bmRdID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhzbG90KTsKIAkJCW5yX2ZvdW5kKys7CiAJCX0KIAkJcmV0ICs9IG5yX2ZvdW5kOwpAQCAtODI2LDcgKzgyNiw3IEBACiAJdW5zaWduZWQgbG9uZyBjdXJfaW5kZXggPSBmaXJzdF9pbmRleDsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCi0Jbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShyb290LT5ybm9kZSk7CisJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocm9vdC0+cm5vZGUpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuIDA7CiAKQEAgLTkxNSw3ICs5MTUsNyBAQAogCQkJfQogCQl9CiAJCXNoaWZ0IC09IFJBRElYX1RSRUVfTUFQX1NISUZUOwotCQlzbG90ID0gcmN1X2RlcmVmZXJlbmNlKHNsb3QtPnNsb3RzW2ldKTsKKwkJc2xvdCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoc2xvdC0+c2xvdHNbaV0pOwogCQlpZiAoc2xvdCA9PSBOVUxMKQogCQkJYnJlYWs7CiAJfQpAQCAtOTUxLDcgKzk1MSw3IEBACiAJaWYgKCFyb290X3RhZ19nZXQocm9vdCwgdGFnKSkKIAkJcmV0dXJuIDA7CiAKLQlub2RlID0gcmN1X2RlcmVmZXJlbmNlKHJvb3QtPnJub2RlKTsKKwlub2RlID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyhyb290LT5ybm9kZSk7CiAJaWYgKCFub2RlKQogCQlyZXR1cm4gMDsKIApAQCAtOTgwLDcgKzk4MCw3IEBACiAJCQlzbG90ID0gKigoKHZvaWQgKioqKXJlc3VsdHMpW3JldCArIGldKTsKIAkJCWlmICghc2xvdCkKIAkJCQljb250aW51ZTsKLQkJCXJlc3VsdHNbcmV0ICsgbnJfZm91bmRdID0gcmN1X2RlcmVmZXJlbmNlKHNsb3QpOworCQkJcmVzdWx0c1tyZXQgKyBucl9mb3VuZF0gPSByY3VfZGVyZWZlcmVuY2VfcmF3KHNsb3QpOwogCQkJbnJfZm91bmQrKzsKIAkJfQogCQlyZXQgKz0gbnJfZm91bmQ7CkBAIC0xMDIwLDcgKzEwMjAsNyBAQAogCWlmICghcm9vdF90YWdfZ2V0KHJvb3QsIHRhZykpCiAJCXJldHVybiAwOwogCi0Jbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShyb290LT5ybm9kZSk7CisJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocm9vdC0+cm5vZGUpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDE3Yjg5NDcuLmQzNGMyYjkgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAtMTk1LDcgKzE5NSw3IEBACiBjb25maWcgTlJfUVVJQ0sKIAlpbnQKIAlkZXBlbmRzIG9uIFFVSUNLTElTVAotCWRlZmF1bHQgIjIiIGlmIFNVUEVSSCB8fCBBVlIzMgorCWRlZmF1bHQgIjIiIGlmIEFWUjMyCiAJZGVmYXVsdCAiMSIKIAogY29uZmlnIFZJUlRfVE9fQlVTCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggZTM3MzY5Mi4uNjk4ZWE4MCAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCisrKyBiL21tL2ZpbGVtYXAuYwpAQCAtMjIzMiw2ICsyMjMyLDkgQEAKIAkJaWYgKHVubGlrZWx5KHN0YXR1cykpCiAJCQlicmVhazsKIAorCQlpZiAobWFwcGluZ193cml0YWJseV9tYXBwZWQobWFwcGluZykpCisJCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKwogCQlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCQljb3BpZWQgPSBpb3ZfaXRlcl9jb3B5X2Zyb21fdXNlcl9hdG9taWMocGFnZSwgaSwgb2Zmc2V0LCBieXRlcyk7CiAJCXBhZ2VmYXVsdF9lbmFibGUoKTsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCBlOTFiODFiLi4zYTVhZWIzIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC0xNTE1LDEwICsxNTE1LDkgQEAKIAkuYXR0cnMgPSBoc3RhdGVfYXR0cnMsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBodWdldGxiX3N5c2ZzX2FkZF9oc3RhdGUoc3RydWN0IGhzdGF0ZSAqaCwKLQkJCQlzdHJ1Y3Qga29iamVjdCAqcGFyZW50LAotCQkJCXN0cnVjdCBrb2JqZWN0ICoqaHN0YXRlX2tvYmpzLAotCQkJCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmhzdGF0ZV9hdHRyX2dyb3VwKQorc3RhdGljIGludCBodWdldGxiX3N5c2ZzX2FkZF9oc3RhdGUoc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGtvYmplY3QgKnBhcmVudCwKKwkJCQkgICAgc3RydWN0IGtvYmplY3QgKipoc3RhdGVfa29ianMsCisJCQkJICAgIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmhzdGF0ZV9hdHRyX2dyb3VwKQogewogCWludCByZXR2YWw7CiAJaW50IGhpID0gaCAtIGhzdGF0ZXM7CkBAIC0yMDg4LDcgKzIwODcsNyBAQAogCiAJZW50cnkgPSBwdGVfbWt3cml0ZShwdGVfbWtkaXJ0eShodWdlX3B0ZXBfZ2V0KHB0ZXApKSk7CiAJaWYgKGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcHRlcCwgZW50cnksIDEpKSB7Ci0JCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBlbnRyeSk7CisJCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGVwKTsKIAl9CiB9CiAKQEAgLTI1NTksNyArMjU1OCw3IEBACiAJZW50cnkgPSBwdGVfbWt5b3VuZyhlbnRyeSk7CiAJaWYgKGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcHRlcCwgZW50cnksCiAJCQkJCQlmbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpKQotCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOworCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlcCk7CiAKIG91dF9wYWdlX3RhYmxlX2xvY2s6CiAJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCAwOWU0YjFiLi43MmZiNWYzIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMTU5Myw3ICsxNTkzLDcgQEAKIAkvKiBPaywgZmluYWxseSBqdXN0IGluc2VydCB0aGUgdGhpbmcuLiAqLwogCWVudHJ5ID0gcHRlX21rc3BlY2lhbChwZm5fcHRlKHBmbiwgcHJvdCkpOwogCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgZW50cnkpOwotCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyLCBlbnRyeSk7IC8qIFhYWDogd2h5IG5vdCBmb3IgaW5zZXJ0X3BhZ2U/ICovCisJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHIsIHB0ZSk7IC8qIFhYWDogd2h5IG5vdCBmb3IgaW5zZXJ0X3BhZ2U/ICovCiAKIAlyZXR2YWwgPSAwOwogb3V0X3VubG9jazoKQEAgLTIxMTYsNyArMjExNiw3IEBACiAJCWVudHJ5ID0gcHRlX21reW91bmcob3JpZ19wdGUpOwogCQllbnRyeSA9IG1heWJlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpLCB2bWEpOwogCQlpZiAocHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnksMSkpCi0JCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOworCQkJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHBhZ2VfdGFibGUpOwogCQlyZXQgfD0gVk1fRkFVTFRfV1JJVEU7CiAJCWdvdG8gdW5sb2NrOwogCX0KQEAgLTIxODUsNyArMjE4NSw3IEBACiAJCSAqIG5ldyBwYWdlIHRvIGJlIG1hcHBlZCBkaXJlY3RseSBpbnRvIHRoZSBzZWNvbmRhcnkgcGFnZSB0YWJsZS4KIAkJICovCiAJCXNldF9wdGVfYXRfbm90aWZ5KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7Ci0JCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBlbnRyeSk7CisJCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwYWdlX3RhYmxlKTsKIAkJaWYgKG9sZF9wYWdlKSB7CiAJCQkvKgogCQkJICogT25seSBhZnRlciBzd2l0Y2hpbmcgdGhlIHB0ZSB0byB0aGUgbmV3IHBhZ2UgbWF5CkBAIC0yNjI5LDcgKzI2MjksNyBAQAogCX0KIAogCS8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSAtIGl0IHdhcyBub24tcHJlc2VudCBiZWZvcmUgKi8KLQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKTsKKwl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZSk7CiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwYWdlX3RhYmxlLCBwdGwpOwogb3V0OgpAQCAtMjY5NCw3ICsyNjk0LDcgQEAKIAlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7CiAKIAkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgLSBpdCB3YXMgbm9uLXByZXNlbnQgYmVmb3JlICovCi0JdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIGVudHJ5KTsKKwl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZSk7CiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwYWdlX3RhYmxlLCBwdGwpOwogCXJldHVybiAwOwpAQCAtMjg1NSw3ICsyODU1LDcgQEAKIAkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnkpOwogCiAJCS8qIG5vIG5lZWQgdG8gaW52YWxpZGF0ZTogYSBub3QtcHJlc2VudCBwYWdlIHdvbid0IGJlIGNhY2hlZCAqLwotCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOworCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZSk7CiAJfSBlbHNlIHsKIAkJaWYgKGNoYXJnZWQpCiAJCQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UocGFnZSk7CkBAIC0yOTkyLDcgKzI5OTIsNyBAQAogCX0KIAllbnRyeSA9IHB0ZV9ta3lvdW5nKGVudHJ5KTsKIAlpZiAocHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcHRlLCBlbnRyeSwgZmxhZ3MgJiBGQVVMVF9GTEFHX1dSSVRFKSkgewotCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOworCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBUaGlzIGlzIG5lZWRlZCBvbmx5IGZvciBwcm90ZWN0aW9uIGZhdWx0cyBidXQgdGhlIGFyY2ggY29kZQpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IGVmZGRiZjAuLmVkYjYxMDEgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQlwYWdlX2FkZF9maWxlX3JtYXAobmV3KTsKIAogCS8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSAtIGl0IHdhcyBub24tcHJlc2VudCBiZWZvcmUgKi8KLQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkciwgcHRlKTsKKwl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkciwgcHRlcCk7CiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpOwogb3V0OgpAQCAtOTEyLDYgKzkxMiw5IEBACiAJCQkJZ290byBvdXRfcG07CiAKIAkJCWVyciA9IC1FTk9ERVY7CisJCQlpZiAobm9kZSA8IDAgfHwgbm9kZSA+PSBNQVhfTlVNTk9ERVMpCisJCQkJZ290byBvdXRfcG07CisKIAkJCWlmICghbm9kZV9zdGF0ZShub2RlLCBOX0hJR0hfTUVNT1JZKSkKIAkJCQlnb3RvIG91dF9wbTsKIApAQCAtOTk5LDMzICsxMDAyLDI3IEBACiAjZGVmaW5lIERPX1BBR0VTX1NUQVRfQ0hVTktfTlIgMTYKIAljb25zdCB2b2lkIF9fdXNlciAqY2h1bmtfcGFnZXNbRE9fUEFHRVNfU1RBVF9DSFVOS19OUl07CiAJaW50IGNodW5rX3N0YXR1c1tET19QQUdFU19TVEFUX0NIVU5LX05SXTsKLQl1bnNpZ25lZCBsb25nIGksIGNodW5rX25yID0gRE9fUEFHRVNfU1RBVF9DSFVOS19OUjsKLQlpbnQgZXJyOwogCi0JZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpICs9IGNodW5rX25yKSB7Ci0JCWlmIChjaHVua19uciA+IG5yX3BhZ2VzIC0gaSkKLQkJCWNodW5rX25yID0gbnJfcGFnZXMgLSBpOworCXdoaWxlIChucl9wYWdlcykgeworCQl1bnNpZ25lZCBsb25nIGNodW5rX25yOwogCi0JCWVyciA9IGNvcHlfZnJvbV91c2VyKGNodW5rX3BhZ2VzLCAmcGFnZXNbaV0sCi0JCQkJICAgICBjaHVua19uciAqIHNpemVvZigqY2h1bmtfcGFnZXMpKTsKLQkJaWYgKGVycikgewotCQkJZXJyID0gLUVGQVVMVDsKLQkJCWdvdG8gb3V0OwotCQl9CisJCWNodW5rX25yID0gbnJfcGFnZXM7CisJCWlmIChjaHVua19uciA+IERPX1BBR0VTX1NUQVRfQ0hVTktfTlIpCisJCQljaHVua19uciA9IERPX1BBR0VTX1NUQVRfQ0hVTktfTlI7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGNodW5rX3BhZ2VzLCBwYWdlcywgY2h1bmtfbnIgKiBzaXplb2YoKmNodW5rX3BhZ2VzKSkpCisJCQlicmVhazsKIAogCQlkb19wYWdlc19zdGF0X2FycmF5KG1tLCBjaHVua19uciwgY2h1bmtfcGFnZXMsIGNodW5rX3N0YXR1cyk7CiAKLQkJZXJyID0gY29weV90b191c2VyKCZzdGF0dXNbaV0sIGNodW5rX3N0YXR1cywKLQkJCQkgICBjaHVua19uciAqIHNpemVvZigqY2h1bmtfc3RhdHVzKSk7Ci0JCWlmIChlcnIpIHsKLQkJCWVyciA9IC1FRkFVTFQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQllcnIgPSAwOworCQlpZiAoY29weV90b191c2VyKHN0YXR1cywgY2h1bmtfc3RhdHVzLCBjaHVua19uciAqIHNpemVvZigqc3RhdHVzKSkpCisJCQlicmVhazsKIAotb3V0OgotCXJldHVybiBlcnI7CisJCXBhZ2VzICs9IGNodW5rX25yOworCQlzdGF0dXMgKz0gY2h1bmtfbnI7CisJCW5yX3BhZ2VzIC09IGNodW5rX25yOworCX0KKwlyZXR1cm4gbnJfcGFnZXMgPyAtRUZBVUxUIDogMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jCmluZGV4IGY1MjQ4MWIuLjIzNzA1MDQgMTAwNjQ0Ci0tLSBhL21tL29vbV9raWxsLmMKKysrIGIvbW0vb29tX2tpbGwuYwpAQCAtNDU5LDYgKzQ1OSw4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmcC0+Y2hpbGRyZW4sIHNpYmxpbmcpIHsKIAkJaWYgKGMtPm1tID09IHAtPm1tKQogCQkJY29udGludWU7CisJCWlmIChtZW0gJiYgIXRhc2tfaW5fbWVtX2Nncm91cChjLCBtZW0pKQorCQkJY29udGludWU7CiAJCWlmICghb29tX2tpbGxfdGFzayhjKSkKIAkJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCBkNTVkOTA1Li5hZTAwNzQ2IDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKKysrIGIvbW0vdm1hbGxvYy5jCkBAIC01MDksNiArNTA5LDkgQEAKIAogc3RhdGljIGF0b21pY190IHZtYXBfbGF6eV9uciA9IEFUT01JQ19JTklUKDApOwogCisvKiBmb3IgcGVyLUNQVSBibG9ja3MgKi8KK3N0YXRpYyB2b2lkIHB1cmdlX2ZyYWdtZW50ZWRfYmxvY2tzX2FsbGNwdXModm9pZCk7CisKIC8qCiAgKiBQdXJnZXMgYWxsIGxhemlseS1mcmVlZCB2bWFwIGFyZWFzLgogICoKQEAgLTUzOSw2ICs1NDIsOSBAQAogCX0gZWxzZQogCQlzcGluX2xvY2soJnB1cmdlX2xvY2spOwogCisJaWYgKHN5bmMpCisJCXB1cmdlX2ZyYWdtZW50ZWRfYmxvY2tzX2FsbGNwdXMoKTsKKwogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2YSwgJnZtYXBfYXJlYV9saXN0LCBsaXN0KSB7CiAJCWlmICh2YS0+ZmxhZ3MgJiBWTV9MQVpZX0ZSRUUpIHsKQEAgLTY2Nyw4ICs2NzMsNiBAQAogc3RydWN0IHZtYXBfYmxvY2tfcXVldWUgewogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWU7Ci0Jc3RydWN0IGxpc3RfaGVhZCBkaXJ0eTsKLQl1bnNpZ25lZCBpbnQgbnJfZGlydHk7CiB9OwogCiBzdHJ1Y3Qgdm1hcF9ibG9jayB7CkBAIC02NzgsMTAgKzY4Miw5IEBACiAJdW5zaWduZWQgbG9uZyBmcmVlLCBkaXJ0eTsKIAlERUNMQVJFX0JJVE1BUChhbGxvY19tYXAsIFZNQVBfQkJNQVBfQklUUyk7CiAJREVDTEFSRV9CSVRNQVAoZGlydHlfbWFwLCBWTUFQX0JCTUFQX0JJVFMpOwotCXVuaW9uIHsKLQkJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7Ci0JCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKLQl9OworCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OworCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHB1cmdlOwogfTsKIAogLyogUXVldWUgb2YgZnJlZSBhbmQgZGlydHkgdm1hcCBibG9ja3MsIGZvciBhbGxvY2F0aW9uIGFuZCBmbHVzaGluZyBwdXJwb3NlcyAqLwpAQCAtNzU3LDcgKzc2MCw3IEBACiAJdmJxID0gJmdldF9jcHVfdmFyKHZtYXBfYmxvY2tfcXVldWUpOwogCXZiLT52YnEgPSB2YnE7CiAJc3Bpbl9sb2NrKCZ2YnEtPmxvY2spOwotCWxpc3RfYWRkKCZ2Yi0+ZnJlZV9saXN0LCAmdmJxLT5mcmVlKTsKKwlsaXN0X2FkZF9yY3UoJnZiLT5mcmVlX2xpc3QsICZ2YnEtPmZyZWUpOwogCXNwaW5fdW5sb2NrKCZ2YnEtPmxvY2spOwogCXB1dF9jcHVfdmFyKHZtYXBfYmxvY2tfcXVldWUpOwogCkBAIC03NzYsOCArNzc5LDYgQEAKIAlzdHJ1Y3Qgdm1hcF9ibG9jayAqdG1wOwogCXVuc2lnbmVkIGxvbmcgdmJfaWR4OwogCi0JQlVHX09OKCFsaXN0X2VtcHR5KCZ2Yi0+ZnJlZV9saXN0KSk7Ci0KIAl2Yl9pZHggPSBhZGRyX3RvX3ZiX2lkeCh2Yi0+dmEtPnZhX3N0YXJ0KTsKIAlzcGluX2xvY2soJnZtYXBfYmxvY2tfdHJlZV9sb2NrKTsKIAl0bXAgPSByYWRpeF90cmVlX2RlbGV0ZSgmdm1hcF9ibG9ja190cmVlLCB2Yl9pZHgpOwpAQCAtNzg4LDEyICs3ODksNjEgQEAKIAljYWxsX3JjdSgmdmItPnJjdV9oZWFkLCByY3VfZnJlZV92Yik7CiB9CiAKK3N0YXRpYyB2b2lkIHB1cmdlX2ZyYWdtZW50ZWRfYmxvY2tzKGludCBjcHUpCit7CisJTElTVF9IRUFEKHB1cmdlKTsKKwlzdHJ1Y3Qgdm1hcF9ibG9jayAqdmI7CisJc3RydWN0IHZtYXBfYmxvY2sgKm5fdmI7CisJc3RydWN0IHZtYXBfYmxvY2tfcXVldWUgKnZicSA9ICZwZXJfY3B1KHZtYXBfYmxvY2tfcXVldWUsIGNwdSk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodmIsICZ2YnEtPmZyZWUsIGZyZWVfbGlzdCkgeworCisJCWlmICghKHZiLT5mcmVlICsgdmItPmRpcnR5ID09IFZNQVBfQkJNQVBfQklUUyAmJiB2Yi0+ZGlydHkgIT0gVk1BUF9CQk1BUF9CSVRTKSkKKwkJCWNvbnRpbnVlOworCisJCXNwaW5fbG9jaygmdmItPmxvY2spOworCQlpZiAodmItPmZyZWUgKyB2Yi0+ZGlydHkgPT0gVk1BUF9CQk1BUF9CSVRTICYmIHZiLT5kaXJ0eSAhPSBWTUFQX0JCTUFQX0JJVFMpIHsKKwkJCXZiLT5mcmVlID0gMDsgLyogcHJldmVudCBmdXJ0aGVyIGFsbG9jcyBhZnRlciByZWxlYXNpbmcgbG9jayAqLworCQkJdmItPmRpcnR5ID0gVk1BUF9CQk1BUF9CSVRTOyAvKiBwcmV2ZW50IHB1cmdpbmcgaXQgYWdhaW4gKi8KKwkJCWJpdG1hcF9maWxsKHZiLT5hbGxvY19tYXAsIFZNQVBfQkJNQVBfQklUUyk7CisJCQliaXRtYXBfZmlsbCh2Yi0+ZGlydHlfbWFwLCBWTUFQX0JCTUFQX0JJVFMpOworCQkJc3Bpbl9sb2NrKCZ2YnEtPmxvY2spOworCQkJbGlzdF9kZWxfcmN1KCZ2Yi0+ZnJlZV9saXN0KTsKKwkJCXNwaW5fdW5sb2NrKCZ2YnEtPmxvY2spOworCQkJc3Bpbl91bmxvY2soJnZiLT5sb2NrKTsKKwkJCWxpc3RfYWRkX3RhaWwoJnZiLT5wdXJnZSwgJnB1cmdlKTsKKwkJfSBlbHNlCisJCQlzcGluX3VubG9jaygmdmItPmxvY2spOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2Yiwgbl92YiwgJnB1cmdlLCBwdXJnZSkgeworCQlsaXN0X2RlbCgmdmItPnB1cmdlKTsKKwkJZnJlZV92bWFwX2Jsb2NrKHZiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHB1cmdlX2ZyYWdtZW50ZWRfYmxvY2tzX3RoaXNjcHUodm9pZCkKK3sKKwlwdXJnZV9mcmFnbWVudGVkX2Jsb2NrcyhzbXBfcHJvY2Vzc29yX2lkKCkpOworfQorCitzdGF0aWMgdm9pZCBwdXJnZV9mcmFnbWVudGVkX2Jsb2Nrc19hbGxjcHVzKHZvaWQpCit7CisJaW50IGNwdTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCisJCXB1cmdlX2ZyYWdtZW50ZWRfYmxvY2tzKGNwdSk7Cit9CisKIHN0YXRpYyB2b2lkICp2Yl9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCB2bWFwX2Jsb2NrX3F1ZXVlICp2YnE7CiAJc3RydWN0IHZtYXBfYmxvY2sgKnZiOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IDA7CiAJdW5zaWduZWQgaW50IG9yZGVyOworCWludCBwdXJnZSA9IDA7CiAKIAlCVUdfT04oc2l6ZSAmIH5QQUdFX01BU0spOwogCUJVR19PTihzaXplID4gUEFHRV9TSVpFKlZNQVBfTUFYX0FMTE9DKTsKQEAgLTgwNiwyNCArODU2LDM4IEBACiAJCWludCBpOwogCiAJCXNwaW5fbG9jaygmdmItPmxvY2spOworCQlpZiAodmItPmZyZWUgPCAxVUwgPDwgb3JkZXIpCisJCQlnb3RvIG5leHQ7CisKIAkJaSA9IGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uKHZiLT5hbGxvY19tYXAsCiAJCQkJCQlWTUFQX0JCTUFQX0JJVFMsIG9yZGVyKTsKIAotCQlpZiAoaSA+PSAwKSB7Ci0JCQlhZGRyID0gdmItPnZhLT52YV9zdGFydCArIChpIDw8IFBBR0VfU0hJRlQpOwotCQkJQlVHX09OKGFkZHJfdG9fdmJfaWR4KGFkZHIpICE9Ci0JCQkJCWFkZHJfdG9fdmJfaWR4KHZiLT52YS0+dmFfc3RhcnQpKTsKLQkJCXZiLT5mcmVlIC09IDFVTCA8PCBvcmRlcjsKLQkJCWlmICh2Yi0+ZnJlZSA9PSAwKSB7Ci0JCQkJc3Bpbl9sb2NrKCZ2YnEtPmxvY2spOwotCQkJCWxpc3RfZGVsX2luaXQoJnZiLT5mcmVlX2xpc3QpOwotCQkJCXNwaW5fdW5sb2NrKCZ2YnEtPmxvY2spOworCQlpZiAoaSA8IDApIHsKKwkJCWlmICh2Yi0+ZnJlZSArIHZiLT5kaXJ0eSA9PSBWTUFQX0JCTUFQX0JJVFMpIHsKKwkJCQkvKiBmcmFnbWVudGVkIGFuZCBubyBvdXRzdGFuZGluZyBhbGxvY2F0aW9ucyAqLworCQkJCUJVR19PTih2Yi0+ZGlydHkgIT0gVk1BUF9CQk1BUF9CSVRTKTsKKwkJCQlwdXJnZSA9IDE7CiAJCQl9Ci0JCQlzcGluX3VubG9jaygmdmItPmxvY2spOwotCQkJYnJlYWs7CisJCQlnb3RvIG5leHQ7CisJCX0KKwkJYWRkciA9IHZiLT52YS0+dmFfc3RhcnQgKyAoaSA8PCBQQUdFX1NISUZUKTsKKwkJQlVHX09OKGFkZHJfdG9fdmJfaWR4KGFkZHIpICE9CisJCQkJYWRkcl90b192Yl9pZHgodmItPnZhLT52YV9zdGFydCkpOworCQl2Yi0+ZnJlZSAtPSAxVUwgPDwgb3JkZXI7CisJCWlmICh2Yi0+ZnJlZSA9PSAwKSB7CisJCQlzcGluX2xvY2soJnZicS0+bG9jayk7CisJCQlsaXN0X2RlbF9yY3UoJnZiLT5mcmVlX2xpc3QpOworCQkJc3Bpbl91bmxvY2soJnZicS0+bG9jayk7CiAJCX0KIAkJc3Bpbl91bmxvY2soJnZiLT5sb2NrKTsKKwkJYnJlYWs7CituZXh0OgorCQlzcGluX3VubG9jaygmdmItPmxvY2spOwogCX0KKworCWlmIChwdXJnZSkKKwkJcHVyZ2VfZnJhZ21lbnRlZF9ibG9ja3NfdGhpc2NwdSgpOworCiAJcHV0X2NwdV92YXIodm1hcF9ibG9ja19xdWV1ZSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKQEAgLTg2MCwxMSArOTI0LDExIEBACiAJQlVHX09OKCF2Yik7CiAKIAlzcGluX2xvY2soJnZiLT5sb2NrKTsKLQliaXRtYXBfYWxsb2NhdGVfcmVnaW9uKHZiLT5kaXJ0eV9tYXAsIG9mZnNldCA+PiBQQUdFX1NISUZULCBvcmRlcik7CisJQlVHX09OKGJpdG1hcF9hbGxvY2F0ZV9yZWdpb24odmItPmRpcnR5X21hcCwgb2Zmc2V0ID4+IFBBR0VfU0hJRlQsIG9yZGVyKSk7CiAKIAl2Yi0+ZGlydHkgKz0gMVVMIDw8IG9yZGVyOwogCWlmICh2Yi0+ZGlydHkgPT0gVk1BUF9CQk1BUF9CSVRTKSB7Ci0JCUJVR19PTih2Yi0+ZnJlZSB8fCAhbGlzdF9lbXB0eSgmdmItPmZyZWVfbGlzdCkpOworCQlCVUdfT04odmItPmZyZWUpOwogCQlzcGluX3VubG9jaygmdmItPmxvY2spOwogCQlmcmVlX3ZtYXBfYmxvY2sodmIpOwogCX0gZWxzZQpAQCAtMTAzMyw4ICsxMDk3LDYgQEAKIAkJdmJxID0gJnBlcl9jcHUodm1hcF9ibG9ja19xdWV1ZSwgaSk7CiAJCXNwaW5fbG9ja19pbml0KCZ2YnEtPmxvY2spOwogCQlJTklUX0xJU1RfSEVBRCgmdmJxLT5mcmVlKTsKLQkJSU5JVF9MSVNUX0hFQUQoJnZicS0+ZGlydHkpOwotCQl2YnEtPm5yX2RpcnR5ID0gMDsKIAl9CiAKIAkvKiBJbXBvcnQgZXhpc3Rpbmcgdm1saXN0IGVudHJpZXMuICovCmRpZmYgLS1naXQgYS9uZXQvOXAvY2xpZW50LmMgYi9uZXQvOXAvY2xpZW50LmMKaW5kZXggOGFmOTViMi4uMDlkNGYxZTIgMTAwNjQ0Ci0tLSBhL25ldC85cC9jbGllbnQuYworKysgYi9uZXQvOXAvY2xpZW50LmMKQEAgLTY5LDcgKzY5LDcgQEAKIAogc3RhdGljIGludCBwYXJzZV9vcHRzKGNoYXIgKm9wdHMsIHN0cnVjdCBwOV9jbGllbnQgKmNsbnQpCiB7Ci0JY2hhciAqb3B0aW9uczsKKwljaGFyICpvcHRpb25zLCAqdG1wX29wdGlvbnM7CiAJY2hhciAqcDsKIAlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CiAJaW50IG9wdGlvbjsKQEAgLTgxLDEyICs4MSwxMyBAQAogCWlmICghb3B0cykKIAkJcmV0dXJuIDA7CiAKLQlvcHRpb25zID0ga3N0cmR1cChvcHRzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9wdGlvbnMpIHsKKwl0bXBfb3B0aW9ucyA9IGtzdHJkdXAob3B0cywgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXBfb3B0aW9ucykgewogCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAogCQkJCSJmYWlsZWQgdG8gYWxsb2NhdGUgY29weSBvZiBvcHRpb24gc3RyaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCW9wdGlvbnMgPSB0bXBfb3B0aW9uczsKIAogCXdoaWxlICgocCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgewogCQlpbnQgdG9rZW47CkBAIC0xMDgsNiArMTA5LDEzIEBACiAJCQlicmVhazsKIAkJY2FzZSBPcHRfdHJhbnM6CiAJCQljbG50LT50cmFuc19tb2QgPSB2OWZzX2dldF90cmFuc19ieV9uYW1lKCZhcmdzWzBdKTsKKwkJCWlmKGNsbnQtPnRyYW5zX21vZCA9PSBOVUxMKSB7CisJCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKKwkJCQkgICAiQ291bGQgbm90IGZpbmQgcmVxdWVzdCB0cmFuc3BvcnQ6ICVzXG4iLAorCQkJCSAgIChjaGFyICopICZhcmdzWzBdKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOworCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2xlZ2FjeToKIAkJCWNsbnQtPmRvdHUgPSAwOwpAQCAtMTE3LDcgKzEyNSw4IEBACiAJCX0KIAl9CiAKLQlrZnJlZShvcHRpb25zKTsKK2ZyZWVfYW5kX3JldHVybjoKKwlrZnJlZSh0bXBfb3B0aW9ucyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjY3LDE4ICs2NzYsMTIgQEAKIAljbG50LT50cmFucyA9IE5VTEw7CiAJc3Bpbl9sb2NrX2luaXQoJmNsbnQtPmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZjbG50LT5maWRsaXN0KTsKLQljbG50LT5maWRwb29sID0gcDlfaWRwb29sX2NyZWF0ZSgpOwotCWlmIChJU19FUlIoY2xudC0+ZmlkcG9vbCkpIHsKLQkJZXJyID0gUFRSX0VSUihjbG50LT5maWRwb29sKTsKLQkJY2xudC0+ZmlkcG9vbCA9IE5VTEw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQogCiAJcDlfdGFnX2luaXQoY2xudCk7CiAKIAllcnIgPSBwYXJzZV9vcHRzKG9wdGlvbnMsIGNsbnQpOwogCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm9yOworCQlnb3RvIGZyZWVfY2xpZW50OwogCiAJaWYgKCFjbG50LT50cmFuc19tb2QpCiAJCWNsbnQtPnRyYW5zX21vZCA9IHY5ZnNfZ2V0X2RlZmF1bHRfdHJhbnMoKTsKQEAgLTY4Nyw3ICs2OTAsMTQgQEAKIAkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKIAkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKIAkJCQkiTm8gdHJhbnNwb3J0IGRlZmluZWQgb3IgZGVmYXVsdCB0cmFuc3BvcnRcbiIpOwotCQlnb3RvIGVycm9yOworCQlnb3RvIGZyZWVfY2xpZW50OworCX0KKworCWNsbnQtPmZpZHBvb2wgPSBwOV9pZHBvb2xfY3JlYXRlKCk7CisJaWYgKElTX0VSUihjbG50LT5maWRwb29sKSkgeworCQllcnIgPSBQVFJfRVJSKGNsbnQtPmZpZHBvb2wpOworCQljbG50LT5maWRwb29sID0gTlVMTDsKKwkJZ290byBwdXRfdHJhbnM7CiAJfQogCiAJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJjbG50ICVwIHRyYW5zICVwIG1zaXplICVkIGRvdHUgJWRcbiIsCkBAIC02OTUsMTkgKzcwNSwyNSBAQAogCiAJZXJyID0gY2xudC0+dHJhbnNfbW9kLT5jcmVhdGUoY2xudCwgZGV2X25hbWUsIG9wdGlvbnMpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyb3I7CisJCWdvdG8gZGVzdHJveV9maWRwb29sOwogCiAJaWYgKChjbG50LT5tc2l6ZStQOV9JT0hEUlNaKSA+IGNsbnQtPnRyYW5zX21vZC0+bWF4c2l6ZSkKIAkJY2xudC0+bXNpemUgPSBjbG50LT50cmFuc19tb2QtPm1heHNpemUtUDlfSU9IRFJTWjsKIAogCWVyciA9IHA5X2NsaWVudF92ZXJzaW9uKGNsbnQpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyb3I7CisJCWdvdG8gY2xvc2VfdHJhbnM7CiAKIAlyZXR1cm4gY2xudDsKIAotZXJyb3I6Ci0JcDlfY2xpZW50X2Rlc3Ryb3koY2xudCk7CitjbG9zZV90cmFuczoKKwljbG50LT50cmFuc19tb2QtPmNsb3NlKGNsbnQpOworZGVzdHJveV9maWRwb29sOgorCXA5X2lkcG9vbF9kZXN0cm95KGNsbnQtPmZpZHBvb2wpOworcHV0X3RyYW5zOgorCXY5ZnNfcHV0X3RyYW5zKGNsbnQtPnRyYW5zX21vZCk7CitmcmVlX2NsaWVudDoKKwlrZnJlZShjbG50KTsKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfY3JlYXRlKTsKQEAgLTEyMTQsMTAgKzEyMzAsMTEgQEAKIHsKIAlpbnQgcmV0OwogCisJLyogTk9URTogc2l6ZSBzaG91bGRuJ3QgaW5jbHVkZSBpdHMgb3duIGxlbmd0aCAqLwogCS8qIHNpemVbMl0gdHlwZVsyXSBkZXZbNF0gcWlkWzEzXSAqLwogCS8qIG1vZGVbNF0gYXRpbWVbNF0gbXRpbWVbNF0gbGVuZ3RoWzhdKi8KIAkvKiBuYW1lW3NdIHVpZFtzXSBnaWRbc10gbXVpZFtzXSAqLwotCXJldCA9IDIrMis0KzEzKzQrNCs0KzgrMisyKzIrMjsKKwlyZXQgPSAyKzQrMTMrNCs0KzQrOCsyKzIrMisyOwogCiAJaWYgKHdzdC0+bmFtZSkKIAkJcmV0ICs9IHN0cmxlbih3c3QtPm5hbWUpOwpAQCAtMTI1OCw3ICsxMjc1LDcgQEAKIAkJd3N0LT5uYW1lLCB3c3QtPnVpZCwgd3N0LT5naWQsIHdzdC0+bXVpZCwgd3N0LT5leHRlbnNpb24sCiAJCXdzdC0+bl91aWQsIHdzdC0+bl9naWQsIHdzdC0+bl9tdWlkKTsKIAotCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVFdTVEFULCAiZHdTIiwgZmlkLT5maWQsIHdzdC0+c2l6ZSwgd3N0KTsKKwlyZXEgPSBwOV9jbGllbnRfcnBjKGNsbnQsIFA5X1RXU1RBVCwgImR3UyIsIGZpZC0+ZmlkLCB3c3QtPnNpemUrMiwgd3N0KTsKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJZXJyID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIGVycm9yOwpkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX2ZkLmMgYi9uZXQvOXAvdHJhbnNfZmQuYwppbmRleCBiZTFjYjkwLi4zMWQwYjA1IDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfZmQuYworKysgYi9uZXQvOXAvdHJhbnNfZmQuYwpAQCAtNzE0LDcgKzcxNCw3IEBACiAJY2hhciAqcDsKIAlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CiAJaW50IG9wdGlvbjsKLQljaGFyICpvcHRpb25zOworCWNoYXIgKm9wdGlvbnMsICp0bXBfb3B0aW9uczsKIAlpbnQgcmV0OwogCiAJb3B0cy0+cG9ydCA9IFA5X1BPUlQ7CkBAIC03MjQsMTIgKzcyNCwxMyBAQAogCWlmICghcGFyYW1zKQogCQlyZXR1cm4gMDsKIAotCW9wdGlvbnMgPSBrc3RyZHVwKHBhcmFtcywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFvcHRpb25zKSB7CisJdG1wX29wdGlvbnMgPSBrc3RyZHVwKHBhcmFtcywgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXBfb3B0aW9ucykgewogCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAogCQkJCSJmYWlsZWQgdG8gYWxsb2NhdGUgY29weSBvZiBvcHRpb24gc3RyaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCW9wdGlvbnMgPSB0bXBfb3B0aW9uczsKIAogCXdoaWxlICgocCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgewogCQlpbnQgdG9rZW47CkBAIC03NjAsNyArNzYxLDggQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJfQotCWtmcmVlKG9wdGlvbnMpOworCisJa2ZyZWUodG1wX29wdGlvbnMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfcmRtYS5jIGIvbmV0LzlwL3RyYW5zX3JkbWEuYwppbmRleCA2NWNiMjlkLi4yYzk1YTg5IDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfcmRtYS5jCisrKyBiL25ldC85cC90cmFuc19yZG1hLmMKQEAgLTE2Niw3ICsxNjYsNyBAQAogCWNoYXIgKnA7CiAJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOwogCWludCBvcHRpb247Ci0JY2hhciAqb3B0aW9uczsKKwljaGFyICpvcHRpb25zLCAqdG1wX29wdGlvbnM7CiAJaW50IHJldDsKIAogCW9wdHMtPnBvcnQgPSBQOV9QT1JUOwpAQCAtMTc3LDEyICsxNzcsMTMgQEAKIAlpZiAoIXBhcmFtcykKIAkJcmV0dXJuIDA7CiAKLQlvcHRpb25zID0ga3N0cmR1cChwYXJhbXMsIEdGUF9LRVJORUwpOwotCWlmICghb3B0aW9ucykgeworCXRtcF9vcHRpb25zID0ga3N0cmR1cChwYXJhbXMsIEdGUF9LRVJORUwpOworCWlmICghdG1wX29wdGlvbnMpIHsKIAkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKIAkJCSAgICJmYWlsZWQgdG8gYWxsb2NhdGUgY29weSBvZiBvcHRpb24gc3RyaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCW9wdGlvbnMgPSB0bXBfb3B0aW9uczsKIAogCXdoaWxlICgocCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgewogCQlpbnQgdG9rZW47CkBAIC0yMTYsNyArMjE3LDcgQEAKIAl9CiAJLyogUlEgbXVzdCBiZSBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgU1EgKi8KIAlvcHRzLT5ycV9kZXB0aCA9IG1heChvcHRzLT5ycV9kZXB0aCwgb3B0cy0+c3FfZGVwdGgpOwotCWtmcmVlKG9wdGlvbnMpOworCWtmcmVlKHRtcF9vcHRpb25zKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jIGIvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCmluZGV4IGVhMWUzZGEuLmNiNTBmNGEgMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc192aXJ0aW8uYworKysgYi9uZXQvOXAvdHJhbnNfdmlydGlvLmMKQEAgLTEwMiw3ICsxMDIsOCBAQAogCXN0cnVjdCB2aXJ0aW9fY2hhbiAqY2hhbiA9IGNsaWVudC0+dHJhbnM7CiAKIAltdXRleF9sb2NrKCZ2aXJ0aW9fOXBfbG9jayk7Ci0JY2hhbi0+aW51c2UgPSBmYWxzZTsKKwlpZiAoY2hhbikKKwkJY2hhbi0+aW51c2UgPSBmYWxzZTsKIAltdXRleF91bmxvY2soJnZpcnRpb185cF9sb2NrKTsKIH0KIApAQCAtMzExLDYgKzMxMiw3IEBACiAJfQogCiAJY2xpZW50LT50cmFucyA9ICh2b2lkICopY2hhbjsKKwljbGllbnQtPnN0YXR1cyA9IENvbm5lY3RlZDsKIAljaGFuLT5jbGllbnQgPSBjbGllbnQ7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwppbmRleCBiN2M0MjI0Li5iMTBlM2NkIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCkBAIC0zNzcsNiArMzc3LDkgQEAKIAogCWlmIChhY2wtPnN0YXRlID09IEJUX0NPTk5FQ1RFRCAmJgogCQkJKHNjby0+c3RhdGUgPT0gQlRfT1BFTiB8fCBzY28tPnN0YXRlID09IEJUX0NMT1NFRCkpIHsKKwkJYWNsLT5wb3dlcl9zYXZlID0gMTsKKwkJaGNpX2Nvbm5fZW50ZXJfYWN0aXZlX21vZGUoYWNsKTsKKwogCQlpZiAobG1wX2VzY29fY2FwYWJsZShoZGV2KSkKIAkJCWhjaV9zZXR1cF9zeW5jKHNjbywgYWNsLT5oYW5kbGUpOwogCQllbHNlCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwppbmRleCAyODUxN2JhLi41OTJkYTVjIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKQEAgLTE2OTksNiArMTY5OSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSAweDFjOgkvKiBTQ08gaW50ZXJ2YWwgcmVqZWN0ZWQgKi8KKwljYXNlIDB4MWE6CS8qIFVuc3VwcG9ydGVkIFJlbW90ZSBGZWF0dXJlICovCiAJY2FzZSAweDFmOgkvKiBVbnNwZWNpZmllZCBlcnJvciAqLwogCQlpZiAoY29ubi0+b3V0ICYmIGNvbm4tPmF0dGVtcHQgPCAyKSB7CiAJCQljb25uLT5wa3RfdHlwZSA9IChoZGV2LT5lc2NvX3R5cGUgJiBTQ09fRVNDT19NQVNLKSB8CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwppbmRleCAxOGU3ZjVhLi4yODA1MjlhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKQEAgLTI0Myw2ICsyNDMsMzkgQEAKIAlpbnB1dF9zeW5jKGRldik7CiB9CiAKK3N0YXRpYyBpbnQgX19oaWRwX3NlbmRfY3RybF9tZXNzYWdlKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24sCisJCQl1bnNpZ25lZCBjaGFyIGhkciwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCUJUX0RCRygic2Vzc2lvbiAlcCBkYXRhICVwIHNpemUgJWQiLCBzZXNzaW9uLCBkYXRhLCBzaXplKTsKKworCWlmICghKHNrYiA9IGFsbG9jX3NrYihzaXplICsgMSwgR0ZQX0FUT01JQykpKSB7CisJCUJUX0VSUigiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgZnJhbWUiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJKnNrYl9wdXQoc2tiLCAxKSA9IGhkcjsKKwlpZiAoZGF0YSAmJiBzaXplID4gMCkKKwkJbWVtY3B5KHNrYl9wdXQoc2tiLCBzaXplKSwgZGF0YSwgc2l6ZSk7CisKKwlza2JfcXVldWVfdGFpbCgmc2Vzc2lvbi0+Y3RybF90cmFuc21pdCwgc2tiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBoaWRwX3NlbmRfY3RybF9tZXNzYWdlKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24sCisJCQl1bnNpZ25lZCBjaGFyIGhkciwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IHNpemUpCit7CisJaW50IGVycjsKKworCWVyciA9IF9faGlkcF9zZW5kX2N0cmxfbWVzc2FnZShzZXNzaW9uLCBoZHIsIGRhdGEsIHNpemUpOworCisJaGlkcF9zY2hlZHVsZShzZXNzaW9uKTsKKworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgaGlkcF9xdWV1ZV9yZXBvcnQoc3RydWN0IGhpZHBfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQl1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgc2l6ZSkKIHsKQEAgLTI4MCw5ICszMTMsMjIgQEAKIAlyZXR1cm4gaGlkcF9xdWV1ZV9yZXBvcnQoc2Vzc2lvbiwgYnVmLCByc2l6ZSk7CiB9CiAKLXN0YXRpYyBpbnQgaGlkcF9vdXRwdXRfcmF3X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgY291bnQpCitzdGF0aWMgaW50IGhpZHBfb3V0cHV0X3Jhd19yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGNvdW50LAorCQl1bnNpZ25lZCBjaGFyIHJlcG9ydF90eXBlKQogewotCWlmIChoaWRwX3F1ZXVlX3JlcG9ydChoaWQtPmRyaXZlcl9kYXRhLCBkYXRhLCBjb3VudCkpCisJc3dpdGNoIChyZXBvcnRfdHlwZSkgeworCWNhc2UgSElEX0ZFQVRVUkVfUkVQT1JUOgorCQlyZXBvcnRfdHlwZSA9IEhJRFBfVFJBTlNfU0VUX1JFUE9SVCB8IEhJRFBfREFUQV9SVFlQRV9GRUFUVVJFOworCQlicmVhazsKKwljYXNlIEhJRF9PVVRQVVRfUkVQT1JUOgorCQlyZXBvcnRfdHlwZSA9IEhJRFBfVFJBTlNfREFUQSB8IEhJRFBfREFUQV9SVFlQRV9PVVBVVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGhpZHBfc2VuZF9jdHJsX21lc3NhZ2UoaGlkLT5kcml2ZXJfZGF0YSwgcmVwb3J0X3R5cGUsCisJCQlkYXRhLCBjb3VudCkpCiAJCXJldHVybiAtRU5PTUVNOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTMwNywzOSArMzUzLDYgQEAKIAkJZGVsX3RpbWVyKCZzZXNzaW9uLT50aW1lcik7CiB9CiAKLXN0YXRpYyBpbnQgX19oaWRwX3NlbmRfY3RybF9tZXNzYWdlKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24sCi0JCQl1bnNpZ25lZCBjaGFyIGhkciwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IHNpemUpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCUJUX0RCRygic2Vzc2lvbiAlcCBkYXRhICVwIHNpemUgJWQiLCBzZXNzaW9uLCBkYXRhLCBzaXplKTsKLQotCWlmICghKHNrYiA9IGFsbG9jX3NrYihzaXplICsgMSwgR0ZQX0FUT01JQykpKSB7Ci0JCUJUX0VSUigiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgZnJhbWUiKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JKnNrYl9wdXQoc2tiLCAxKSA9IGhkcjsKLQlpZiAoZGF0YSAmJiBzaXplID4gMCkKLQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBzaXplKSwgZGF0YSwgc2l6ZSk7Ci0KLQlza2JfcXVldWVfdGFpbCgmc2Vzc2lvbi0+Y3RybF90cmFuc21pdCwgc2tiKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBoaWRwX3NlbmRfY3RybF9tZXNzYWdlKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24sCi0JCQl1bnNpZ25lZCBjaGFyIGhkciwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IHNpemUpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IF9faGlkcF9zZW5kX2N0cmxfbWVzc2FnZShzZXNzaW9uLCBoZHIsIGRhdGEsIHNpemUpOwotCi0JaGlkcF9zY2hlZHVsZShzZXNzaW9uKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyB2b2lkIGhpZHBfcHJvY2Vzc19oYW5kc2hha2Uoc3RydWN0IGhpZHBfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQkJdW5zaWduZWQgY2hhciBwYXJhbSkKIHsKQEAgLTcwMSwyOSArNzE0LDkgQEAKIHN0YXRpYyBpbnQgaGlkcF9wYXJzZShzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQogewogCXN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24gPSBoaWQtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBoaWRwX2Nvbm5hZGRfcmVxICpyZXEgPSBzZXNzaW9uLT5yZXE7Ci0JdW5zaWduZWQgY2hhciAqYnVmOwotCWludCByZXQ7CiAKLQlidWYgPSBrbWFsbG9jKHJlcS0+cmRfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgcmVxLT5yZF9kYXRhLCByZXEtPnJkX3NpemUpKSB7Ci0JCWtmcmVlKGJ1Zik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldCA9IGhpZF9wYXJzZV9yZXBvcnQoc2Vzc2lvbi0+aGlkLCBidWYsIHJlcS0+cmRfc2l6ZSk7Ci0KLQlrZnJlZShidWYpOwotCi0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXNlc3Npb24tPnJlcSA9IE5VTEw7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaGlkX3BhcnNlX3JlcG9ydChzZXNzaW9uLT5oaWQsIHNlc3Npb24tPnJkX2RhdGEsCisJCQlzZXNzaW9uLT5yZF9zaXplKTsKIH0KIAogc3RhdGljIGludCBoaWRwX3N0YXJ0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCkBAIC03NjgsMTIgKzc2MSwyNCBAQAogCWJkYWRkcl90IHNyYywgZHN0OwogCWludCBlcnI7CiAKKwlzZXNzaW9uLT5yZF9kYXRhID0ga3phbGxvYyhyZXEtPnJkX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghc2Vzc2lvbi0+cmRfZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY29weV9mcm9tX3VzZXIoc2Vzc2lvbi0+cmRfZGF0YSwgcmVxLT5yZF9kYXRhLCByZXEtPnJkX3NpemUpKSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZmF1bHQ7CisJfQorCXNlc3Npb24tPnJkX3NpemUgPSByZXEtPnJkX3NpemU7CisKIAloaWQgPSBoaWRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKElTX0VSUihoaWQpKQotCQlyZXR1cm4gUFRSX0VSUihoaWQpOworCWlmIChJU19FUlIoaGlkKSkgeworCQllcnIgPSBQVFJfRVJSKGhpZCk7CisJCWdvdG8gZmF1bHQ7CisJfQogCiAJc2Vzc2lvbi0+aGlkID0gaGlkOwotCXNlc3Npb24tPnJlcSA9IHJlcTsKKwogCWhpZC0+ZHJpdmVyX2RhdGEgPSBzZXNzaW9uOwogCiAJYmFzd2FwKCZzcmMsICZidF9zayhzZXNzaW9uLT5jdHJsX3NvY2stPnNrKS0+c3JjKTsKQEAgLTgwNCw2ICs4MDksMTAgQEAKIAloaWRfZGVzdHJveV9kZXZpY2UoaGlkKTsKIAlzZXNzaW9uLT5oaWQgPSBOVUxMOwogCitmYXVsdDoKKwlrZnJlZShzZXNzaW9uLT5yZF9kYXRhKTsKKwlzZXNzaW9uLT5yZF9kYXRhID0gTlVMTDsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTg5OCw2ICs5MDcsOSBAQAogCQlzZXNzaW9uLT5oaWQgPSBOVUxMOwogCX0KIAorCWtmcmVlKHNlc3Npb24tPnJkX2RhdGEpOworCXNlc3Npb24tPnJkX2RhdGEgPSBOVUxMOworCiBwdXJnZToKIAlza2JfcXVldWVfcHVyZ2UoJnNlc3Npb24tPmN0cmxfdHJhbnNtaXQpOwogCXNrYl9xdWV1ZV9wdXJnZSgmc2Vzc2lvbi0+aW50cl90cmFuc21pdCk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvaGlkcC5oIGIvbmV0L2JsdWV0b290aC9oaWRwL2hpZHAuaAppbmRleCBmYWYzZDc0Li5hNGUyMTVkIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvaGlkcC5oCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9oaWRwLmgKQEAgLTE1NCw3ICsxNTQsOSBAQAogCXN0cnVjdCBza19idWZmX2hlYWQgY3RybF90cmFuc21pdDsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGludHJfdHJhbnNtaXQ7CiAKLQlzdHJ1Y3QgaGlkcF9jb25uYWRkX3JlcSAqcmVxOworCS8qIFJlcG9ydCBkZXNjcmlwdG9yICovCisJX191OCAqcmRfZGF0YTsKKwl1aW50IHJkX3NpemU7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGlkcF9zY2hlZHVsZShzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uKQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcC5jIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCmluZGV4IDExMjBjZjEuLjQwMGVmYTIgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXAuYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKQEAgLTEzNjgsNyArMTM2OCw2IEBACiAKIAl3aGlsZSAoKHNrYiA9IHNrLT5za19zZW5kX2hlYWQpICYmICghbDJjYXBfdHhfd2luZG93X2Z1bGwoc2spKSAmJgogCSAgICAgICAhKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9SRU1PVEVfQlVTWSkpIHsKLQkJdHhfc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiAKIAkJaWYgKHBpLT5yZW1vdGVfbWF4X3R4ICYmCiAJCQkJYnRfY2Ioc2tiKS0+cmV0cmllcyA9PSBwaS0+cmVtb3RlX21heF90eCkgewpAQCAtMTM3Niw2ICsxMzc1LDggQEAKIAkJCWJyZWFrOwogCQl9CiAKKwkJdHhfc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisKIAkJYnRfY2Ioc2tiKS0+cmV0cmllcysrOwogCiAJCWNvbnRyb2wgPSBnZXRfdW5hbGlnbmVkX2xlMTYodHhfc2tiLT5kYXRhICsgTDJDQVBfSERSX1NJWkUpOwpAQCAtMzUxOCw3ICszNTE5LDYgQEAKIAlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpOwogCXUxNiBjb250cm9sLCBsZW47CiAJdTggdHhfc2VxOwotCWludCBlcnI7CiAKIAlzayA9IGwyY2FwX2dldF9jaGFuX2J5X3NjaWQoJmNvbm4tPmNoYW5fbGlzdCwgY2lkKTsKIAlpZiAoIXNrKSB7CkBAIC0zNTcwLDEzICszNTcwLDExIEBACiAJCQlnb3RvIGRyb3A7CiAKIAkJaWYgKF9faXNfaWZyYW1lKGNvbnRyb2wpKQotCQkJZXJyID0gbDJjYXBfZGF0YV9jaGFubmVsX2lmcmFtZShzaywgY29udHJvbCwgc2tiKTsKKwkJCWwyY2FwX2RhdGFfY2hhbm5lbF9pZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CiAJCWVsc2UKLQkJCWVyciA9IGwyY2FwX2RhdGFfY2hhbm5lbF9zZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CisJCQlsMmNhcF9kYXRhX2NoYW5uZWxfc2ZyYW1lKHNrLCBjb250cm9sLCBza2IpOwogCi0JCWlmICghZXJyKQotCQkJZ290byBkb25lOwotCQlicmVhazsKKwkJZ290byBkb25lOwogCiAJY2FzZSBMMkNBUF9NT0RFX1NUUkVBTUlORzoKIAkJY29udHJvbCA9IGdldF91bmFsaWduZWRfbGUxNihza2ItPmRhdGEpOwpAQCAtMzYwMiw3ICszNjAwLDcgQEAKIAkJZWxzZQogCQkJcGktPmV4cGVjdGVkX3R4X3NlcSA9IHR4X3NlcSArIDE7CiAKLQkJZXJyID0gbDJjYXBfc2FyX3JlYXNzZW1ibHlfc2R1KHNrLCBza2IsIGNvbnRyb2wpOworCQlsMmNhcF9zYXJfcmVhc3NlbWJseV9zZHUoc2ssIHNrYiwgY29udHJvbCk7CiAKIAkJZ290byBkb25lOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKaW5kZXggZmM1ZWUzMi4uODlmNGE1OSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwpAQCAtMjUyLDcgKzI1Miw2IEBACiAJQlRfREJHKCJzZXNzaW9uICVwIHN0YXRlICVsZCIsIHMsIHMtPnN0YXRlKTsKIAogCXNldF9iaXQoUkZDT01NX1RJTUVEX09VVCwgJnMtPmZsYWdzKTsKLQlyZmNvbW1fc2Vzc2lvbl9wdXQocyk7CiAJcmZjb21tX3NjaGVkdWxlKFJGQ09NTV9TQ0hFRF9USU1FTyk7CiB9CiAKQEAgLTExNTEsNyArMTE1MCwxMSBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBCVF9ESVNDT05OOgotCQkJcmZjb21tX3Nlc3Npb25fcHV0KHMpOworCQkJLyogV2hlbiBzb2NrZXQgaXMgY2xvc2VkIGFuZCB3ZSBhcmUgbm90IFJGQ09NTQorCQkJICogaW5pdGlhdG9yIHJmY29tbV9wcm9jZXNzX3J4IGFscmVhZHkgY2FsbHMKKwkJCSAqIHJmY29tbV9zZXNzaW9uX3B1dCgpICovCisJCQlpZiAocy0+c29jay0+c2stPnNrX3N0YXRlICE9IEJUX0NMT1NFRCkKKwkJCQlyZmNvbW1fc2Vzc2lvbl9wdXQocyk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTE5MjAsNiArMTkyMyw3IEBACiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkZDT01NX1RJTUVEX09VVCwgJnMtPmZsYWdzKSkgewogCQkJcy0+c3RhdGUgPSBCVF9ESVNDT05OOwogCQkJcmZjb21tX3NlbmRfZGlzYyhzLCAwKTsKKwkJCXJmY29tbV9zZXNzaW9uX3B1dChzKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggYmU5OTI0Zi4uYmIxZjFkYSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTIwNDEsNyArMjA0MSw3IEBACiAJcmN1X3JlYWRfbG9ja19iaCgpOwogCiAJdHhxID0gZGV2X3BpY2tfdHgoZGV2LCBza2IpOwotCXEgPSByY3VfZGVyZWZlcmVuY2UodHhxLT5xZGlzYyk7CisJcSA9IHJjdV9kZXJlZmVyZW5jZV9iaCh0eHEtPnFkaXNjKTsKIAogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogCXNrYi0+dGNfdmVyZCA9IFNFVF9UQ19BVChza2ItPnRjX3ZlcmQsIEFUX0VHUkVTUyk7CkBAIC0yNzYxLDcgKzI3NjEsNyBAQAogCXN3aXRjaCAocmV0KSB7CiAJY2FzZSBHUk9fTk9STUFMOgogCWNhc2UgR1JPX0hFTEQ6Ci0JCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5hcGktPmRldik7CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHNrYi0+ZGV2KTsKIAogCQlpZiAocmV0ID09IEdST19IRUxEKQogCQkJc2tiX2dyb19wdWxsKHNrYiwgLUVUSF9ITEVOKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RzdC5jIGIvbmV0L2NvcmUvZHN0LmMKaW5kZXggNTdiYzRkNS4uY2IxYjM0OCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZHN0LmMKKysrIGIvbmV0L2NvcmUvZHN0LmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPG5ldC9kc3QuaD4KIApAQCAtNzksNiArODAsNyBAQAogCXdoaWxlICgoZHN0ID0gbmV4dCkgIT0gTlVMTCkgewogCQluZXh0ID0gZHN0LT5uZXh0OwogCQlwcmVmZXRjaCgmbmV4dC0+bmV4dCk7CisJCWNvbmRfcmVzY2hlZCgpOwogCQlpZiAobGlrZWx5KGF0b21pY19yZWFkKCZkc3QtPl9fcmVmY250KSkpIHsKIAkJCWxhc3QtPm5leHQgPSBkc3Q7CiAJCQlsYXN0ID0gZHN0OwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZXRodG9vbC5jIGIvbmV0L2NvcmUvZXRodG9vbC5jCmluZGV4IGQ4YWVlNTguLjIzNmE5OTggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2V0aHRvb2wuYworKysgYi9uZXQvY29yZS9ldGh0b29sLmMKQEAgLTkyNyw2ICs5MjcsNyBAQAogCWNhc2UgRVRIVE9PTF9HUEVSTUFERFI6CiAJY2FzZSBFVEhUT09MX0dVRk86CiAJY2FzZSBFVEhUT09MX0dHU086CisJY2FzZSBFVEhUT09MX0dHUk86CiAJY2FzZSBFVEhUT09MX0dGTEFHUzoKIAljYXNlIEVUSFRPT0xfR1BGTEFHUzoKIAljYXNlIEVUSFRPT0xfR1JYRkg6CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDA4ZGI3YjkuLjM1NDFhYTQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCisrKyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC04Niw3ICs4Niw3IEBACiAJCXJldHVybiBlcnI7CiAKIAlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0JZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za19maWx0ZXIpOworCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZV9iaChzay0+c2tfZmlsdGVyKTsKIAlpZiAoZmlsdGVyKSB7CiAJCXVuc2lnbmVkIGludCBwa3RfbGVuID0gc2tfcnVuX2ZpbHRlcihza2IsIGZpbHRlci0+aW5zbnMsCiAJCQkJZmlsdGVyLT5sZW4pOwpAQCAtNTIxLDcgKzUyMSw3IEBACiAJfQogCiAJcmN1X3JlYWRfbG9ja19iaCgpOwotCW9sZF9mcCA9IHJjdV9kZXJlZmVyZW5jZShzay0+c2tfZmlsdGVyKTsKKwlvbGRfZnAgPSByY3VfZGVyZWZlcmVuY2VfYmgoc2stPnNrX2ZpbHRlcik7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHNrLT5za19maWx0ZXIsIGZwKTsKIAlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIApAQCAtNTM2LDcgKzUzNiw3IEBACiAJc3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyOwogCiAJcmN1X3JlYWRfbG9ja19iaCgpOwotCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZShzay0+c2tfZmlsdGVyKTsKKwlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2VfYmgoc2stPnNrX2ZpbHRlcik7CiAJaWYgKGZpbHRlcikgewogCQlyY3VfYXNzaWduX3BvaW50ZXIoc2stPnNrX2ZpbHRlciwgTlVMTCk7CiAJCXNrX2ZpbHRlcl9kZWxheWVkX3VuY2hhcmdlKHNrLCBmaWx0ZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMgYi9uZXQvY29yZS9uZXQtc3lzZnMuYwppbmRleCBmYmMxYzc0Li4wOTljNzUzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXQtc3lzZnMuYworKysgYi9uZXQvY29yZS9uZXQtc3lzZnMuYwpAQCAtNDEwLDcgKzQxMCw4IEBACiAJY29uc3Qgc3RydWN0IGl3X3N0YXRpc3RpY3MgKml3OwogCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKIAotCXJ0bmxfbG9jaygpOworCWlmICghcnRubF90cnlsb2NrKCkpCisJCXJldHVybiByZXN0YXJ0X3N5c2NhbGwoKTsKIAlpZiAoZGV2X2lzYWxpdmUoZGV2KSkgewogCQlpdyA9IGdldF93aXJlbGVzc19zdGF0cyhkZXYpOwogCQlpZiAoaXcpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IGRlMGMyYzcuLjJlNjkyYWYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0zNTI0LDYgKzM1MjQsNyBAQAogCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQodC0+cXVldWUsCiAJCQkJCQkJIHQtPmNvbnRyb2wgIT0gMCwKIAkJCQkJCQkgSFovMTApOworCQkJdHJ5X3RvX2ZyZWV6ZSgpOwogCQkJY29udGludWU7CiAJCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCA3OTRiY2I4Li40YzdkM2Y2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtODksNiArODksMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0wocnRubF9pc19sb2NrZWQpOwogCisjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKK2ludCBsb2NrZGVwX3J0bmxfaXNfaGVsZCh2b2lkKQoreworCXJldHVybiBsb2NrZGVwX2lzX2hlbGQoJnJ0bmxfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChsb2NrZGVwX3J0bmxfaXNfaGVsZCk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HICovCisKIHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rICpydG5sX21zZ19oYW5kbGVyc1tOUFJPVE9dOwogCiBzdGF0aWMgaW5saW5lIGludCBydG1fbXNnaW5kZXgoaW50IG1zZ3R5cGUpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggZTFmNmYyMi4uMzA1Y2JhNCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKyBiL25ldC9jb3JlL3NvY2suYwpAQCAtMTA3Myw3ICsxMDczLDggQEAKIAlpZiAoc2stPnNrX2Rlc3RydWN0KQogCQlzay0+c2tfZGVzdHJ1Y3Qoc2spOwogCi0JZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za19maWx0ZXIpOworCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhzay0+c2tfZmlsdGVyLAorCQkJCSAgICAgICBhdG9taWNfcmVhZCgmc2stPnNrX3dtZW1fYWxsb2MpID09IDApOwogCWlmIChmaWx0ZXIpIHsKIAkJc2tfZmlsdGVyX3VuY2hhcmdlKHNrLCBmaWx0ZXIpOwogCQlyY3VfYXNzaWduX3BvaW50ZXIoc2stPnNrX2ZpbHRlciwgTlVMTCk7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkLmMgYi9uZXQvZGNjcC9jY2lkLmMKaW5kZXggNTdkZmI5Yy4uZmYxNmU5ZCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZC5jCisrKyBiL25ldC9kY2NwL2NjaWQuYwpAQCAtODMsNyArODMsNyBAQAogCXZhX2xpc3QgYXJnczsKIAogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JdnNucHJpbnRmKHNsYWJfbmFtZV9mbXQsIHNpemVvZihzbGFiX25hbWVfZm10KSwgZm10LCBhcmdzKTsKKwl2c25wcmludGYoc2xhYl9uYW1lX2ZtdCwgQ0NJRF9TTEFCX05BTUVfTEVOR1RILCBmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKIAogCXNsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZShzbGFiX25hbWVfZm10LCBzaXplb2Yoc3RydWN0IGNjaWQpICsgb2JqX3NpemUsIDAsCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkLmggYi9uZXQvZGNjcC9jY2lkLmgKaW5kZXggMjY5OTU4Yi4uNmRmNmY4YSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZC5oCisrKyBiL25ldC9kY2NwL2NjaWQuaApAQCAtMTksNyArMTksOSBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAotI2RlZmluZSBDQ0lEX01BWCAyNTUKKy8qIG1heGltdW0gdmFsdWUgZm9yIGEgQ0NJRCAoUkZDIDQzNDAsIDE5LjUpICovCisjZGVmaW5lIENDSURfTUFYCQkyNTUKKyNkZWZpbmUgQ0NJRF9TTEFCX05BTUVfTEVOR1RICTMyCiAKIHN0cnVjdCB0Y3BfaW5mbzsKIApAQCAtNDksOCArNTEsOCBAQAogCWNvbnN0IGNoYXIJCSpjY2lkX25hbWU7CiAJc3RydWN0IGttZW1fY2FjaGUJKmNjaWRfaGNfcnhfc2xhYiwKIAkJCQkqY2NpZF9oY190eF9zbGFiOwotCWNoYXIJCQljY2lkX2hjX3J4X3NsYWJfbmFtZVszMl07Ci0JY2hhcgkJCWNjaWRfaGNfdHhfc2xhYl9uYW1lWzMyXTsKKwljaGFyCQkJY2NpZF9oY19yeF9zbGFiX25hbWVbQ0NJRF9TTEFCX05BTUVfTEVOR1RIXTsKKwljaGFyCQkJY2NpZF9oY190eF9zbGFiX25hbWVbQ0NJRF9TTEFCX05BTUVfTEVOR1RIXTsKIAlfX3UzMgkJCWNjaWRfaGNfcnhfb2JqX3NpemUsCiAJCQkJY2NpZF9oY190eF9vYmpfc2l6ZTsKIAkvKiBJbnRlcmZhY2UgUm91dGluZXMgKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb2JlLmMgYi9uZXQvZGNjcC9wcm9iZS5jCmluZGV4IGJhY2UxZDguLmY1YjM0NjQgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb2JlLmMKKysrIGIvbmV0L2RjY3AvcHJvYmUuYwpAQCAtMTYxLDggKzE2MSw4IEBACiAJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsIHByb2NuYW1lLCBTX0lSVVNSLCAmZGNjcHByb2JlX2ZvcHMpKQogCQlnb3RvIGVycjA7CiAKLQlyZXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSgocmVnaXN0ZXJfanByb2JlKCZkY2NwX3NlbmRfcHJvYmUpID09IDApLAotCQkJCQkiZGNjcCIpOworCXRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKChyZXQgPSByZWdpc3Rlcl9qcHJvYmUoJmRjY3Bfc2VuZF9wcm9iZSkpID09IDAsCisJCQkJImRjY3AiKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjE7CiAKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fcm91dGUuYyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwppbmRleCBhMDMyODQwLi5hN2JmMDNjIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKKysrIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCkBAIC0xMTU1LDggKzExNTUsOCBAQAogCiAJaWYgKCEoZmxhZ3MgJiBNU0dfVFJZSEFSRCkpIHsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlmb3IocnQgPSByY3VfZGVyZWZlcmVuY2UoZG5fcnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbik7IHJ0OwotCQkJcnQgPSByY3VfZGVyZWZlcmVuY2UocnQtPnUuZHN0LmRuX25leHQpKSB7CisJCWZvciAocnQgPSByY3VfZGVyZWZlcmVuY2VfYmgoZG5fcnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbik7IHJ0OworCQkJcnQgPSByY3VfZGVyZWZlcmVuY2VfYmgocnQtPnUuZHN0LmRuX25leHQpKSB7CiAJCQlpZiAoKGZscC0+ZmxkX2RzdCA9PSBydC0+ZmwuZmxkX2RzdCkgJiYKIAkJCSAgICAoZmxwLT5mbGRfc3JjID09IHJ0LT5mbC5mbGRfc3JjKSAmJgogCQkJICAgIChmbHAtPm1hcmsgPT0gcnQtPmZsLm1hcmspICYmCkBAIC0xNjE4LDkgKzE2MTgsOSBAQAogCQlpZiAoaCA+IHNfaCkKIAkJCXNfaWR4ID0gMDsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlmb3IocnQgPSByY3VfZGVyZWZlcmVuY2UoZG5fcnRfaGFzaF90YWJsZVtoXS5jaGFpbiksIGlkeCA9IDA7CisJCWZvcihydCA9IHJjdV9kZXJlZmVyZW5jZV9iaChkbl9ydF9oYXNoX3RhYmxlW2hdLmNoYWluKSwgaWR4ID0gMDsKIAkJCXJ0OwotCQkJcnQgPSByY3VfZGVyZWZlcmVuY2UocnQtPnUuZHN0LmRuX25leHQpLCBpZHgrKykgeworCQkJcnQgPSByY3VfZGVyZWZlcmVuY2VfYmgocnQtPnUuZHN0LmRuX25leHQpLCBpZHgrKykgewogCQkJaWYgKGlkeCA8IHNfaWR4KQogCQkJCWNvbnRpbnVlOwogCQkJc2tiX2RzdF9zZXQoc2tiLCBkc3RfY2xvbmUoJnJ0LT51LmRzdCkpOwpAQCAtMTY1NCwxMiArMTY1NCwxMiBAQAogCiAJZm9yKHMtPmJ1Y2tldCA9IGRuX3J0X2hhc2hfbWFzazsgcy0+YnVja2V0ID49IDA7IC0tcy0+YnVja2V0KSB7CiAJCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQkJcnQgPSBkbl9ydF9oYXNoX3RhYmxlW3MtPmJ1Y2tldF0uY2hhaW47CisJCXJ0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGRuX3J0X2hhc2hfdGFibGVbcy0+YnVja2V0XS5jaGFpbik7CiAJCWlmIChydCkKIAkJCWJyZWFrOwogCQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAl9Ci0JcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShydCk7CisJcmV0dXJuIHJ0OwogfQogCiBzdGF0aWMgc3RydWN0IGRuX3JvdXRlICpkbl9ydF9jYWNoZV9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRuX3JvdXRlICpydCkKQEAgLTE2NzQsNyArMTY3NCw3IEBACiAJCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAkJcnQgPSBkbl9ydF9oYXNoX3RhYmxlW3MtPmJ1Y2tldF0uY2hhaW47CiAJfQotCXJldHVybiByY3VfZGVyZWZlcmVuY2UocnQpOworCXJldHVybiByY3VfZGVyZWZlcmVuY2VfYmgocnQpOwogfQogCiBzdGF0aWMgdm9pZCAqZG5fcnRfY2FjaGVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCAwNDBjNGYwLi4yNmRlYzJiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC0xMzE3LDE0ICsxMzE3LDE5IEBACiB7CiAJaW50ICp2YWxwID0gY3RsLT5kYXRhOwogCWludCB2YWwgPSAqdmFscDsKKwlsb2ZmX3QgcG9zID0gKnBwb3M7CiAJaW50IHJldCA9IHByb2NfZG9pbnR2ZWMoY3RsLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKIAogCWlmICh3cml0ZSAmJiAqdmFscCAhPSB2YWwpIHsKIAkJc3RydWN0IG5ldCAqbmV0ID0gY3RsLT5leHRyYTI7CiAKIAkJaWYgKHZhbHAgIT0gJklQVjRfREVWQ09ORl9ERkxUKG5ldCwgRk9SV0FSRElORykpIHsKLQkJCWlmICghcnRubF90cnlsb2NrKCkpCisJCQlpZiAoIXJ0bmxfdHJ5bG9jaygpKSB7CisJCQkJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWVzIGJlZm9yZSByZXN0YXJ0aW5nICovCisJCQkJKnZhbHAgPSB2YWw7CisJCQkJKnBwb3MgPSBwb3M7CiAJCQkJcmV0dXJuIHJlc3RhcnRfc3lzY2FsbCgpOworCQkJfQogCQkJaWYgKHZhbHAgPT0gJklQVjRfREVWQ09ORl9BTEwobmV0LCBGT1JXQVJESU5HKSkgewogCQkJCWluZXRfZm9yd2FyZF9jaGFuZ2UobmV0KTsKIAkJCX0gZWxzZSBpZiAoKnZhbHApIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lnbXAuYyBiL25ldC9pcHY0L2lnbXAuYwppbmRleCA3NmMwODQwLi5hNDJmNjU4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKKysrIGIvbmV0L2lwdjQvaWdtcC5jCkBAIC05NDYsNyArOTQ2LDYgQEAKIAkJYnJlYWs7CiAJY2FzZSBJR01QX0hPU1RfTUVNQkVSU0hJUF9SRVBPUlQ6CiAJY2FzZSBJR01QVjJfSE9TVF9NRU1CRVJTSElQX1JFUE9SVDoKLQljYXNlIElHTVBWM19IT1NUX01FTUJFUlNISVBfUkVQT1JUOgogCQkvKiBJcyBpdCBvdXIgcmVwb3J0IGxvb3BlZCBiYWNrPyAqLwogCQlpZiAoc2tiX3J0YWJsZShza2IpLT5mbC5paWYgPT0gMCkKIAkJCWJyZWFrOwpAQCAtOTYwLDYgKzk1OSw3IEBACiAJCWluX2Rldl9wdXQoaW5fZGV2KTsKIAkJcmV0dXJuIHBpbV9yY3ZfdjEoc2tiKTsKICNlbmRpZgorCWNhc2UgSUdNUFYzX0hPU1RfTUVNQkVSU0hJUF9SRVBPUlQ6CiAJY2FzZSBJR01QX0RWTVJQOgogCWNhc2UgSUdNUF9UUkFDRToKIAljYXNlIElHTVBfSE9TVF9MRUFWRV9NRVNTQUdFOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBjb21wLmMgYi9uZXQvaXB2NC9pcGNvbXAuYwppbmRleCAzOGZiZjA0Li41NDRjZTA4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGNvbXAuYworKysgYi9uZXQvaXB2NC9pcGNvbXAuYwpAQCAtMTI0LDE2ICsxMjQsMTIgQEAKIAlpZiAoeC0+cHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKSB7CiAJCWVyciA9IGlwY29tcF90dW5uZWxfYXR0YWNoKHgpOwogCQlpZiAoZXJyKQotCQkJZ290byBlcnJvcl90dW5uZWw7CisJCQlnb3RvIG91dDsKIAl9CiAKIAllcnIgPSAwOwogb3V0OgogCXJldHVybiBlcnI7Ci0KLWVycm9yX3R1bm5lbDoKLQlpcGNvbXBfZGVzdHJveSh4KTsKLQlnb3RvIG91dDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX3R5cGUgaXBjb21wX3R5cGUgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwppbmRleCAwNjYzMjc2Li45MDIwM2UxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKQEAgLTkyNSwxMCArOTI1LDEwIEBACiAJaWYgKHQgJiYgIUlTX0VSUih0KSkgewogCQlzdHJ1Y3QgYXJwdF9nZXRpbmZvIGluZm87CiAJCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0+cHJpdmF0ZTsKLQogI2lmZGVmIENPTkZJR19DT01QQVQKKwkJc3RydWN0IHh0X3RhYmxlX2luZm8gdG1wOworCiAJCWlmIChjb21wYXQpIHsKLQkJCXN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDsKIAkJCXJldCA9IGNvbXBhdF90YWJsZV9pbmZvKHByaXZhdGUsICZ0bXApOwogCQkJeHRfY29tcGF0X2ZsdXNoX29mZnNldHMoTkZQUk9UT19BUlApOwogCQkJcHJpdmF0ZSA9ICZ0bXA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKaW5kZXggNTcyMzMwYS4uM2NlNTNjZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwpAQCAtMTEzMiwxMCArMTEzMiwxMCBAQAogCWlmICh0ICYmICFJU19FUlIodCkpIHsKIAkJc3RydWN0IGlwdF9nZXRpbmZvIGluZm87CiAJCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0+cHJpdmF0ZTsKLQogI2lmZGVmIENPTkZJR19DT01QQVQKKwkJc3RydWN0IHh0X3RhYmxlX2luZm8gdG1wOworCiAJCWlmIChjb21wYXQpIHsKLQkJCXN0cnVjdCB4dF90YWJsZV9pbmZvIHRtcDsKIAkJCXJldCA9IGNvbXBhdF90YWJsZV9pbmZvKHByaXZhdGUsICZ0bXApOwogCQkJeHRfY29tcGF0X2ZsdXNoX29mZnNldHMoQUZfSU5FVCk7CiAJCQlwcml2YXRlID0gJnRtcDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCmluZGV4IGQxNzFiMTIuLmQxZWEzOGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwpAQCAtMjEwLDcgKzIxMCw3IEBACiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfYnVja2V0cyIsCi0JCS5kYXRhCQk9ICZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsCisJCS5kYXRhCQk9ICZpbml0X25ldC5jdC5odGFibGVfc2l6ZSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDQ0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCmluZGV4IDg2NjhhM2QuLjJmYjdiNzYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCkBAIC0zMiw3ICszMiw3IEBACiAJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47CiAKIAlmb3IgKHN0LT5idWNrZXQgPSAwOwotCSAgICAgc3QtPmJ1Y2tldCA8IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKKwkgICAgIHN0LT5idWNrZXQgPCBuZXQtPmN0Lmh0YWJsZV9zaXplOwogCSAgICAgc3QtPmJ1Y2tldCsrKSB7CiAJCW4gPSByY3VfZGVyZWZlcmVuY2UobmV0LT5jdC5oYXNoW3N0LT5idWNrZXRdLmZpcnN0KTsKIAkJaWYgKCFpc19hX251bGxzKG4pKQpAQCAtNTAsNyArNTAsNyBAQAogCWhlYWQgPSByY3VfZGVyZWZlcmVuY2UoaGVhZC0+bmV4dCk7CiAJd2hpbGUgKGlzX2FfbnVsbHMoaGVhZCkpIHsKIAkJaWYgKGxpa2VseShnZXRfbnVsbHNfdmFsdWUoaGVhZCkgPT0gc3QtPmJ1Y2tldCkpIHsKLQkJCWlmICgrK3N0LT5idWNrZXQgPj0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKQorCQkJaWYgKCsrc3QtPmJ1Y2tldCA+PSBuZXQtPmN0Lmh0YWJsZV9zaXplKQogCQkJCXJldHVybiBOVUxMOwogCQl9CiAJCWhlYWQgPSByY3VfZGVyZWZlcmVuY2UobmV0LT5jdC5oYXNoW3N0LT5idWNrZXRdLmZpcnN0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKaW5kZXggZmUxYTY0NC4uMjYwNjZhMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKQEAgLTM1LDkgKzM1LDYgQEAKIAogc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90byBfX3JlYWRfbW9zdGx5OwogCi0vKiBDYWxjdWxhdGVkIGF0IGluaXQgYmFzZWQgb24gbWVtb3J5IHNpemUgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfbmF0X2h0YWJsZV9zaXplIF9fcmVhZF9tb3N0bHk7Ci0KICNkZWZpbmUgTUFYX0lQX05BVF9QUk9UTyAyNTYKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sICpuZl9uYXRfcHJvdG9zW01BWF9JUF9OQVRfUFJPVE9dCiAJCQkJCQlfX3JlYWRfbW9zdGx5OwpAQCAtNzIsNyArNjksNyBAQAogCiAvKiBXZSBrZWVwIGFuIGV4dHJhIGhhc2ggZm9yIGVhY2ggY29ubnRyYWNrLCBmb3IgZmFzdCBzZWFyY2hpbmcuICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotaGFzaF9ieV9zcmMoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCitoYXNoX2J5X3NyYyhjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCXVuc2lnbmVkIGludCBoYXNoOwogCkBAIC04MCw3ICs3Nyw3IEBACiAJaGFzaCA9IGpoYXNoXzN3b3JkcygoX19mb3JjZSB1MzIpdHVwbGUtPnNyYy51My5pcCwKIAkJCSAgICAoX19mb3JjZSB1MzIpdHVwbGUtPnNyYy51LmFsbCwKIAkJCSAgICB0dXBsZS0+ZHN0LnByb3RvbnVtLCAwKTsKLQlyZXR1cm4gKCh1NjQpaGFzaCAqIG5mX25hdF9odGFibGVfc2l6ZSkgPj4gMzI7CisJcmV0dXJuICgodTY0KWhhc2ggKiBuZXQtPmlwdjQubmF0X2h0YWJsZV9zaXplKSA+PiAzMjsKIH0KIAogLyogSXMgdGhpcyB0dXBsZSBhbHJlYWR5IHRha2VuPyAobm90IGJ5IHVzKSAqLwpAQCAtMTQ3LDcgKzE0NCw3IEBACiAJCSAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqcmVzdWx0LAogCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKQogewotCXVuc2lnbmVkIGludCBoID0gaGFzaF9ieV9zcmModHVwbGUpOworCXVuc2lnbmVkIGludCBoID0gaGFzaF9ieV9zcmMobmV0LCB0dXBsZSk7CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm5fbmF0ICpuYXQ7CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0OwogCWNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpuOwpAQCAtMzMwLDcgKzMyNyw3IEBACiAJaWYgKGhhdmVfdG9faGFzaCkgewogCQl1bnNpZ25lZCBpbnQgc3JjaGFzaDsKIAotCQlzcmNoYXNoID0gaGFzaF9ieV9zcmMoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7CisJCXNyY2hhc2ggPSBoYXNoX2J5X3NyYyhuZXQsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUpOwogCQlzcGluX2xvY2tfYmgoJm5mX25hdF9sb2NrKTsKIAkJLyogbmZfY29ubnRyYWNrX2FsdGVyX3JlcGx5IG1pZ2h0IHJlLWFsbG9jYXRlIGV4bnRlbnNpb24gYWVyYSAqLwogCQluYXQgPSBuZmN0X25hdChjdCk7CkBAIC02NzksOCArNjc2LDEwIEBACiAKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl9uYXRfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewotCW5ldC0+aXB2NC5uYXRfYnlzb3VyY2UgPSBuZl9jdF9hbGxvY19oYXNodGFibGUoJm5mX25hdF9odGFibGVfc2l6ZSwKLQkJCQkJCSAgICAgICZuZXQtPmlwdjQubmF0X3ZtYWxsb2NlZCwgMCk7CisJLyogTGVhdmUgdGhlbSB0aGUgc2FtZSBmb3IgdGhlIG1vbWVudC4gKi8KKwluZXQtPmlwdjQubmF0X2h0YWJsZV9zaXplID0gbmV0LT5jdC5odGFibGVfc2l6ZTsKKwluZXQtPmlwdjQubmF0X2J5c291cmNlID0gbmZfY3RfYWxsb2NfaGFzaHRhYmxlKCZuZXQtPmlwdjQubmF0X2h0YWJsZV9zaXplLAorCQkJCQkJICAgICAgICZuZXQtPmlwdjQubmF0X3ZtYWxsb2NlZCwgMCk7CiAJaWYgKCFuZXQtPmlwdjQubmF0X2J5c291cmNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXR1cm4gMDsKQEAgLTcwMyw3ICs3MDIsNyBAQAogCW5mX2N0X2l0ZXJhdGVfY2xlYW51cChuZXQsICZjbGVhbl9uYXQsIE5VTEwpOwogCXN5bmNocm9uaXplX3JjdSgpOwogCW5mX2N0X2ZyZWVfaGFzaHRhYmxlKG5ldC0+aXB2NC5uYXRfYnlzb3VyY2UsIG5ldC0+aXB2NC5uYXRfdm1hbGxvY2VkLAotCQkJICAgICBuZl9uYXRfaHRhYmxlX3NpemUpOworCQkJICAgICBuZXQtPmlwdjQubmF0X2h0YWJsZV9zaXplKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBuZl9uYXRfbmV0X29wcyA9IHsKQEAgLTcyNCw5ICs3MjMsNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCS8qIExlYXZlIHRoZW0gdGhlIHNhbWUgZm9yIHRoZSBtb21lbnQuICovCi0JbmZfbmF0X2h0YWJsZV9zaXplID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOwotCiAJcmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmbmZfbmF0X25ldF9vcHMpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGNsZWFudXBfZXh0ZW5kOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggZDYyYjA1ZC4uNGYxMWZhYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0yODcsMTIgKzI4NywxMiBAQAogCQlpZiAoIXJ0X2hhc2hfdGFibGVbc3QtPmJ1Y2tldF0uY2hhaW4pCiAJCQljb250aW51ZTsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlyID0gcmN1X2RlcmVmZXJlbmNlKHJ0X2hhc2hfdGFibGVbc3QtPmJ1Y2tldF0uY2hhaW4pOworCQlyID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0X2hhc2hfdGFibGVbc3QtPmJ1Y2tldF0uY2hhaW4pOwogCQl3aGlsZSAocikgewogCQkJaWYgKGRldl9uZXQoci0+dS5kc3QuZGV2KSA9PSBzZXFfZmlsZV9uZXQoc2VxKSAmJgogCQkJICAgIHItPnJ0X2dlbmlkID09IHN0LT5nZW5pZCkKIAkJCQlyZXR1cm4gcjsKLQkJCXIgPSByY3VfZGVyZWZlcmVuY2Uoci0+dS5kc3QucnRfbmV4dCk7CisJCQlyID0gcmN1X2RlcmVmZXJlbmNlX2JoKHItPnUuZHN0LnJ0X25leHQpOwogCQl9CiAJCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCX0KQEAgLTMxNCw3ICszMTQsNyBAQAogCQlyY3VfcmVhZF9sb2NrX2JoKCk7CiAJCXIgPSBydF9oYXNoX3RhYmxlW3N0LT5idWNrZXRdLmNoYWluOwogCX0KLQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKHIpOworCXJldHVybiByY3VfZGVyZWZlcmVuY2VfYmgocik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpydF9jYWNoZV9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKQEAgLTI2ODksOCArMjY4OSw4IEBACiAJaGFzaCA9IHJ0X2hhc2goZmxwLT5mbDRfZHN0LCBmbHAtPmZsNF9zcmMsIGZscC0+b2lmLCBydF9nZW5pZChuZXQpKTsKIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQlmb3IgKHJ0aCA9IHJjdV9kZXJlZmVyZW5jZShydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluKTsgcnRoOwotCQlydGggPSByY3VfZGVyZWZlcmVuY2UocnRoLT51LmRzdC5ydF9uZXh0KSkgeworCWZvciAocnRoID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4pOyBydGg7CisJCXJ0aCA9IHJjdV9kZXJlZmVyZW5jZV9iaChydGgtPnUuZHN0LnJ0X25leHQpKSB7CiAJCWlmIChydGgtPmZsLmZsNF9kc3QgPT0gZmxwLT5mbDRfZHN0ICYmCiAJCSAgICBydGgtPmZsLmZsNF9zcmMgPT0gZmxwLT5mbDRfc3JjICYmCiAJCSAgICBydGgtPmZsLmlpZiA9PSAwICYmCkBAIC0zMDA4LDggKzMwMDgsOCBAQAogCQlpZiAoIXJ0X2hhc2hfdGFibGVbaF0uY2hhaW4pCiAJCQljb250aW51ZTsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlmb3IgKHJ0ID0gcmN1X2RlcmVmZXJlbmNlKHJ0X2hhc2hfdGFibGVbaF0uY2hhaW4pLCBpZHggPSAwOyBydDsKLQkJICAgICBydCA9IHJjdV9kZXJlZmVyZW5jZShydC0+dS5kc3QucnRfbmV4dCksIGlkeCsrKSB7CisJCWZvciAocnQgPSByY3VfZGVyZWZlcmVuY2VfYmgocnRfaGFzaF90YWJsZVtoXS5jaGFpbiksIGlkeCA9IDA7IHJ0OworCQkgICAgIHJ0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0LT51LmRzdC5ydF9uZXh0KSwgaWR4KyspIHsKIAkJCWlmICghbmV0X2VxKGRldl9uZXQocnQtPnUuZHN0LmRldiksIG5ldCkgfHwgaWR4IDwgc19pZHgpCiAJCQkJY29udGludWU7CiAJCQlpZiAocnRfaXNfZXhwaXJlZChydCkpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IDI4ZTAyOTYuLjNmZGRjNjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC01NzgzLDExICs1NzgzLDkgQEAKIAogCQkJCS8qIHRjcF9hY2sgY29uc2lkZXJzIHRoaXMgQUNLIGFzIGR1cGxpY2F0ZQogCQkJCSAqIGFuZCBkb2VzIG5vdCBjYWxjdWxhdGUgcnR0LgotCQkJCSAqIEZpeCBpdCBhdCBsZWFzdCB3aXRoIHRpbWVzdGFtcHMuCisJCQkJICogRm9yY2UgaXQgaGVyZS4KIAkJCQkgKi8KLQkJCQlpZiAodHAtPnJ4X29wdC5zYXdfdHN0YW1wICYmCi0JCQkJICAgIHRwLT5yeF9vcHQucmN2X3RzZWNyICYmICF0cC0+c3J0dCkKLQkJCQkJdGNwX2Fja19zYXdfdHN0YW1wKHNrLCAwKTsKKwkJCQl0Y3BfYWNrX3VwZGF0ZV9ydHQoc2ssIDAsIDApOwogCiAJCQkJaWYgKHRwLT5yeF9vcHQudHN0YW1wX29rKQogCQkJCQl0cC0+YWR2bXNzIC09IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCBkZTdhMTk0Li4xNDM3OTFkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jCisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmMKQEAgLTUwMiw4ICs1MDIsMTEgQEAKIAlpZiAocCA9PSAmbmV0LT5pcHY2LmRldmNvbmZfZGZsdC0+Zm9yd2FyZGluZykKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIXJ0bmxfdHJ5bG9jaygpKQorCWlmICghcnRubF90cnlsb2NrKCkpIHsKKwkJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWVzIGJlZm9yZSByZXN0YXJ0aW5nICovCisJCSpwID0gb2xkOwogCQlyZXR1cm4gcmVzdGFydF9zeXNjYWxsKCk7CisJfQogCiAJaWYgKHAgPT0gJm5ldC0+aXB2Ni5kZXZjb25mX2FsbC0+Zm9yd2FyZGluZykgewogCQlfX3MzMiBuZXdmID0gbmV0LT5pcHY2LmRldmNvbmZfYWxsLT5mb3J3YXJkaW5nOwpAQCAtNDAyOCwxMiArNDAzMSwxNSBAQAogewogCWludCAqdmFscCA9IGN0bC0+ZGF0YTsKIAlpbnQgdmFsID0gKnZhbHA7CisJbG9mZl90IHBvcyA9ICpwcG9zOwogCWludCByZXQ7CiAKIAlyZXQgPSBwcm9jX2RvaW50dmVjKGN0bCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiAKIAlpZiAod3JpdGUpCiAJCXJldCA9IGFkZHJjb25mX2ZpeHVwX2ZvcndhcmRpbmcoY3RsLCB2YWxwLCB2YWwpOworCWlmIChyZXQpCisJCSpwcG9zID0gcG9zOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQwNzUsOCArNDA4MSwxMSBAQAogCWlmIChwID09ICZuZXQtPmlwdjYuZGV2Y29uZl9kZmx0LT5kaXNhYmxlX2lwdjYpCiAJCXJldHVybiAwOwogCi0JaWYgKCFydG5sX3RyeWxvY2soKSkKKwlpZiAoIXJ0bmxfdHJ5bG9jaygpKSB7CisJCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlcyBiZWZvcmUgcmVzdGFydGluZyAqLworCQkqcCA9IG9sZDsKIAkJcmV0dXJuIHJlc3RhcnRfc3lzY2FsbCgpOworCX0KIAogCWlmIChwID09ICZuZXQtPmlwdjYuZGV2Y29uZl9hbGwtPmRpc2FibGVfaXB2NikgewogCQlfX3MzMiBuZXdmID0gbmV0LT5pcHY2LmRldmNvbmZfYWxsLT5kaXNhYmxlX2lwdjY7CkBAIC00MDk1LDEyICs0MTA0LDE1IEBACiB7CiAJaW50ICp2YWxwID0gY3RsLT5kYXRhOwogCWludCB2YWwgPSAqdmFscDsKKwlsb2ZmX3QgcG9zID0gKnBwb3M7CiAJaW50IHJldDsKIAogCXJldCA9IHByb2NfZG9pbnR2ZWMoY3RsLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKIAogCWlmICh3cml0ZSkKIAkJcmV0ID0gYWRkcmNvbmZfZGlzYWJsZV9pcHY2KGN0bCwgdmFscCwgdmFsKTsKKwlpZiAocmV0KQorCQkqcHBvcyA9IHBvczsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcGNvbXA2LmMgYi9uZXQvaXB2Ni9pcGNvbXA2LmMKaW5kZXggMmYyYTVjYS4uMDAyZTZlZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXBjb21wNi5jCisrKyBiL25ldC9pcHY2L2lwY29tcDYuYwpAQCAtMTU0LDE2ICsxNTQsMTIgQEAKIAlpZiAoeC0+cHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKSB7CiAJCWVyciA9IGlwY29tcDZfdHVubmVsX2F0dGFjaCh4KTsKIAkJaWYgKGVycikKLQkJCWdvdG8gZXJyb3JfdHVubmVsOworCQkJZ290byBvdXQ7CiAJfQogCiAJZXJyID0gMDsKIG91dDoKIAlyZXR1cm4gZXJyOwotZXJyb3JfdHVubmVsOgotCWlwY29tcF9kZXN0cm95KHgpOwotCi0JZ290byBvdXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV90eXBlIGlwY29tcDZfdHlwZSA9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwppbmRleCA0ODBkN2Y4Li44YTdlMGY1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKQEAgLTExNjQsMTAgKzExNjQsMTAgQEAKIAlpZiAodCAmJiAhSVNfRVJSKHQpKSB7CiAJCXN0cnVjdCBpcDZ0X2dldGluZm8gaW5mbzsKIAkJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LT5wcml2YXRlOwotCiAjaWZkZWYgQ09ORklHX0NPTVBBVAorCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyB0bXA7CisKIAkJaWYgKGNvbXBhdCkgewotCQkJc3RydWN0IHh0X3RhYmxlX2luZm8gdG1wOwogCQkJcmV0ID0gY29tcGF0X3RhYmxlX2luZm8ocHJpdmF0ZSwgJnRtcCk7CiAJCQl4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhBRl9JTkVUNik7CiAJCQlwcml2YXRlID0gJnRtcDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYwppbmRleCAzMTJjMjBhZC4uNjI0YTU0OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYwpAQCAtNjMsNiArNjMsNyBAQAogCXN0cnVjdCBpbmV0X2ZyYWdfcXVldWUJcTsKIAogCV9fYmUzMgkJCWlkOwkJLyogZnJhZ21lbnQgaWQJCSovCisJdTMyCQkJdXNlcjsKIAlzdHJ1Y3QgaW42X2FkZHIJCXNhZGRyOwogCXN0cnVjdCBpbjZfYWRkcgkJZGFkZHI7CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMKaW5kZXggMTU2MDIwZC4uNmIzNjAyZCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMKKysrIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMKQEAgLTY5OCwxNSArNjk4LDE4IEBACiAKICAgICAgIC8qIFF1ZXJ5IFBQUCBjaGFubmVsIGFuZCB1bml0IG51bWJlciAqLwogICAgIGNhc2UgUFBQSU9DR0NIQU46CisgICAgICBsb2NrX2tlcm5lbCgpOwogICAgICAgaWYoYXAtPnBwcF9vcGVuICYmICFwdXRfdXNlcihwcHBfY2hhbm5lbF9pbmRleCgmYXAtPmNoYW4pLAogCQkJCQkJKGludCBfX3VzZXIgKilhcmdwKSkKIAllcnIgPSAwOworICAgICAgdW5sb2NrX2tlcm5lbCgpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUFBJT0NHVU5JVDoKICAgICAgIGxvY2tfa2VybmVsKCk7CiAgICAgICBpZihhcC0+cHBwX29wZW4gJiYgIXB1dF91c2VyKHBwcF91bml0X251bWJlcigmYXAtPmNoYW4pLAogCQkJCQkJKGludCBfX3VzZXIgKilhcmdwKSkKLSAgICAgIGVyciA9IDA7CisgICAgICAgIGVyciA9IDA7CisgICAgICB1bmxvY2tfa2VybmVsKCk7CiAgICAgICBicmVhazsKIAogICAgICAgLyogQWxsIHRoZXNlIGlvY3RscyBjYW4gYmUgcGFzc2VkIGJvdGggZGlyZWN0bHkgYW5kIGZyb20gcHBwX2dlbmVyaWMsCmRpZmYgLS1naXQgYS9uZXQva2V5L2FmX2tleS5jIGIvbmV0L2tleS9hZl9rZXkuYwppbmRleCA3NmZhNmZlLi41MzlmNDNiIDEwMDY0NAotLS0gYS9uZXQva2V5L2FmX2tleS5jCisrKyBiL25ldC9rZXkvYWZfa2V5LmMKQEAgLTM3OTQsOSArMzc5NCw5IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcHNlY19wZmtleV9leGl0KHZvaWQpCiB7Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZwZmtleV9uZXRfb3BzKTsKIAl4ZnJtX3VucmVnaXN0ZXJfa20oJnBma2V5djJfbWdyKTsKIAlzb2NrX3VucmVnaXN0ZXIoUEZfS0VZKTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnBma2V5X25ldF9vcHMpOwogCXByb3RvX3VucmVnaXN0ZXIoJmtleV9wcm90byk7CiB9CiAKQEAgLTM4MDcsMjEgKzM4MDcsMjIgQEAKIAlpZiAoZXJyICE9IDApCiAJCWdvdG8gb3V0OwogCi0JZXJyID0gc29ja19yZWdpc3RlcigmcGZrZXlfZmFtaWx5X29wcyk7CisJZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmcGZrZXlfbmV0X29wcyk7CiAJaWYgKGVyciAhPSAwKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX2tleV9wcm90bzsKKwllcnIgPSBzb2NrX3JlZ2lzdGVyKCZwZmtleV9mYW1pbHlfb3BzKTsKKwlpZiAoZXJyICE9IDApCisJCWdvdG8gb3V0X3VucmVnaXN0ZXJfcGVybmV0OwogCWVyciA9IHhmcm1fcmVnaXN0ZXJfa20oJnBma2V5djJfbWdyKTsKIAlpZiAoZXJyICE9IDApCiAJCWdvdG8gb3V0X3NvY2tfdW5yZWdpc3RlcjsKLQllcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZwZmtleV9uZXRfb3BzKTsKLQlpZiAoZXJyICE9IDApCi0JCWdvdG8gb3V0X3hmcm1fdW5yZWdpc3Rlcl9rbTsKIG91dDoKIAlyZXR1cm4gZXJyOwotb3V0X3hmcm1fdW5yZWdpc3Rlcl9rbToKLQl4ZnJtX3VucmVnaXN0ZXJfa20oJnBma2V5djJfbWdyKTsKKwogb3V0X3NvY2tfdW5yZWdpc3RlcjoKIAlzb2NrX3VucmVnaXN0ZXIoUEZfS0VZKTsKK291dF91bnJlZ2lzdGVyX3Blcm5ldDoKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnBma2V5X25ldF9vcHMpOwogb3V0X3VucmVnaXN0ZXJfa2V5X3Byb3RvOgogCXByb3RvX3VucmVnaXN0ZXIoJmtleV9wcm90byk7CiAJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZHJpdmVyLXRyYWNlLmggYi9uZXQvbWFjODAyMTEvZHJpdmVyLXRyYWNlLmgKaW5kZXggZWU5NGVhMC4uZGE4NDk3ZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oCisrKyBiL25ldC9tYWM4MDIxMS9kcml2ZXItdHJhY2UuaApAQCAtNjgwLDcgKzY4MCw3IEBACiAJCV9fZW50cnktPnJldCA9IHJldDsKIAkJX19lbnRyeS0+YWN0aW9uID0gYWN0aW9uOwogCQlfX2VudHJ5LT50aWQgPSB0aWQ7Ci0JCV9fZW50cnktPnNzbiA9ICpzc247CisJCV9fZW50cnktPnNzbiA9IHNzbiA/ICpzc24gOiAwOwogCSksCiAKIAlUUF9wcmludGsoCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWJzcy5jIGIvbmV0L21hYzgwMjExL2lic3MuYwppbmRleCAxZjJkYjY0Li4yMmYwYzJhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWJzcy5jCisrKyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKQEAgLTY0Nyw3ICs2NDcsNyBAQAogCX0KIAlpZiAocG9zWzFdICE9IDAgJiYKIAkgICAgKHBvc1sxXSAhPSBpZmlic3MtPnNzaWRfbGVuIHx8Ci0JICAgICAhbWVtY21wKHBvcyArIDIsIGlmaWJzcy0+c3NpZCwgaWZpYnNzLT5zc2lkX2xlbikpKSB7CisJICAgICBtZW1jbXAocG9zICsgMiwgaWZpYnNzLT5zc2lkLCBpZmlic3MtPnNzaWRfbGVuKSkpIHsKIAkJLyogSWdub3JlIFByb2JlUmVxIGZvciBmb3JlaWduIFNTSUQgKi8KIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYXRlLmMgYi9uZXQvbWFjODAyMTEvcmF0ZS5jCmluZGV4IGI5MDA3ZjguLjEyYTJiZmYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmMKKysrIGIvbmV0L21hYzgwMjExL3JhdGUuYwpAQCAtMjQ1LDYgKzI0NSw5IEBACiAJCWluZm8tPmNvbnRyb2wucmF0ZXNbaV0uY291bnQgPSAxOwogCX0KIAorCWlmIChzZGF0YS0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0hBU19SQVRFX0NPTlRST0wpCisJCXJldHVybjsKKwogCWlmIChzdGEgJiYgc2RhdGEtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeCA+IC0xKSB7CiAJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0gc2RhdGEtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeDsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NjYW4uYyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKaW5kZXggZjkzNGM5Ni4uYmMxN2NmNyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3NjYW4uYworKysgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCkBAIC00MzksNiArNDM5LDE2IEBACiAJaWYgKGxvY2FsLT5zY2FuX3JlcSkKIAkJcmV0dXJuIC1FQlVTWTsKIAorCWlmIChyZXEgIT0gbG9jYWwtPmludF9zY2FuX3JlcSAmJgorCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICAhbGlzdF9lbXB0eSgmaWZtZ2QtPndvcmtfbGlzdCkpIHsKKwkJLyogYWN0dWFsbHkgd2FpdCBmb3IgdGhlIHdvcmsgaXQncyBkb2luZyB0byBmaW5pc2gvdGltZSBvdXQgKi8KKwkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZtZ2QtPnJlcXVlc3QpOworCQlsb2NhbC0+c2Nhbl9yZXEgPSByZXE7CisJCWxvY2FsLT5zY2FuX3NkYXRhID0gc2RhdGE7CisJCXJldHVybiAwOworCX0KKwogCWlmIChsb2NhbC0+b3BzLT5od19zY2FuKSB7CiAJCXU4ICppZXM7CiAKQEAgLTQ2MywxNCArNDczLDYgQEAKIAlsb2NhbC0+c2Nhbl9yZXEgPSByZXE7CiAJbG9jYWwtPnNjYW5fc2RhdGEgPSBzZGF0YTsKIAotCWlmIChyZXEgIT0gbG9jYWwtPmludF9zY2FuX3JlcSAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICAhbGlzdF9lbXB0eSgmaWZtZ2QtPndvcmtfbGlzdCkpIHsKLQkJLyogYWN0dWFsbHkgd2FpdCBmb3IgdGhlIHdvcmsgaXQncyBkb2luZyB0byBmaW5pc2gvdGltZSBvdXQgKi8KLQkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZtZ2QtPnJlcXVlc3QpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlpZiAobG9jYWwtPm9wcy0+aHdfc2NhbikKIAkJX19zZXRfYml0KFNDQU5fSFdfU0NBTk5JTkcsICZsb2NhbC0+c2Nhbm5pbmcpOwogCWVsc2UKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCAwZTk4YzMyLi40ZDc5ZTNjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdF9udWxscy5oPgogCiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KQEAgLTYzLDggKzY0LDYgQEAKIHN0cnVjdCBuZl9jb25uIG5mX2Nvbm50cmFja191bnRyYWNrZWQgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja191bnRyYWNrZWQpOwogCi1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm5mX2Nvbm50cmFja19jYWNoZXAgX19yZWFkX21vc3RseTsKLQogc3RhdGljIGludCBuZl9jb25udHJhY2tfaGFzaF9ybmRfaW5pdHRlZDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2hhc2hfcm5kOwogCkBAIC04Niw5ICs4NSwxMCBAQAogCXJldHVybiAoKHU2NCloICogc2l6ZSkgPj4gMzI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdV9pbnQzMl90IGhhc2hfY29ubnRyYWNrKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQorc3RhdGljIGlubGluZSB1X2ludDMyX3QgaGFzaF9jb25udHJhY2soY29uc3Qgc3RydWN0IG5ldCAqbmV0LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKLQlyZXR1cm4gX19oYXNoX2Nvbm50cmFjayh0dXBsZSwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplLAorCXJldHVybiBfX2hhc2hfY29ubnRyYWNrKHR1cGxlLCBuZXQtPmN0Lmh0YWJsZV9zaXplLAogCQkJCW5mX2Nvbm50cmFja19oYXNoX3JuZCk7CiB9CiAKQEAgLTI5Niw3ICsyOTYsNyBAQAogewogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKLQl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfY29ubnRyYWNrKHR1cGxlKTsKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfY29ubnRyYWNrKG5ldCwgdHVwbGUpOwogCiAJLyogRGlzYWJsZSBCSHMgdGhlIGVudGlyZSB0aW1lIHNpbmNlIHdlIG5vcm1hbGx5IG5lZWQgdG8gZGlzYWJsZSB0aGVtCiAJICogYXQgbGVhc3Qgb25jZSBmb3IgdGhlIHN0YXRzIGFueXdheS4KQEAgLTM2NiwxMCArMzY2LDExIEBACiAKIHZvaWQgbmZfY29ubnRyYWNrX2hhc2hfaW5zZXJ0KHN0cnVjdCBuZl9jb25uICpjdCkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoY3QpOwogCXVuc2lnbmVkIGludCBoYXNoLCByZXBsX2hhc2g7CiAKLQloYXNoID0gaGFzaF9jb25udHJhY2soJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7Ci0JcmVwbF9oYXNoID0gaGFzaF9jb25udHJhY2soJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZSk7CisJaGFzaCA9IGhhc2hfY29ubnRyYWNrKG5ldCwgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7CisJcmVwbF9oYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKIAogCV9fbmZfY29ubnRyYWNrX2hhc2hfaW5zZXJ0KGN0LCBoYXNoLCByZXBsX2hhc2gpOwogfQpAQCAtMzk3LDggKzM5OCw4IEBACiAJaWYgKENUSU5GTzJESVIoY3RpbmZvKSAhPSBJUF9DVF9ESVJfT1JJR0lOQUwpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKLQloYXNoID0gaGFzaF9jb25udHJhY2soJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7Ci0JcmVwbF9oYXNoID0gaGFzaF9jb25udHJhY2soJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZSk7CisJaGFzaCA9IGhhc2hfY29ubnRyYWNrKG5ldCwgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7CisJcmVwbF9oYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKIAogCS8qIFdlJ3JlIG5vdCBpbiBoYXNoIHRhYmxlLCBhbmQgd2UgcmVmdXNlIHRvIHNldCB1cCByZWxhdGVkCiAJICAgY29ubmVjdGlvbnMgZm9yIHVuY29uZmlybWVkIGNvbm5zLiAgQnV0IHBhY2tldCBjb3BpZXMgYW5kCkBAIC00NjgsNyArNDY5LDcgQEAKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoaWdub3JlZF9jb25udHJhY2spOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKLQl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfY29ubnRyYWNrKHR1cGxlKTsKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfY29ubnRyYWNrKG5ldCwgdHVwbGUpOwogCiAJLyogRGlzYWJsZSBCSHMgdGhlIGVudGlyZSB0aW1lIHNpbmNlIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGVtIGF0CiAJICogbGVhc3Qgb25jZSBmb3IgdGhlIHN0YXRzIGFueXdheS4KQEAgLTUwMyw3ICs1MDQsNyBAQAogCWludCBkcm9wcGVkID0gMDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlmb3IgKGkgPSAwOyBpIDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbmV0LT5jdC5odGFibGVfc2l6ZTsgaSsrKSB7CiAJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmbmV0LT5jdC5oYXNoW2hhc2hdLAogCQkJCQkgaG5ub2RlKSB7CiAJCQl0bXAgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwpAQCAtNTIzLDcgKzUyNCw3IEBACiAJCWlmIChjbnQgPj0gTkZfQ1RfRVZJQ1RJT05fUkFOR0UpCiAJCQlicmVhazsKIAotCQloYXNoID0gKGhhc2ggKyAxKSAlIG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKKwkJaGFzaCA9IChoYXNoICsgMSkgJSBuZXQtPmN0Lmh0YWJsZV9zaXplOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIApAQCAtNTU3LDcgKzU1OCw3IEBACiAKIAlpZiAobmZfY29ubnRyYWNrX21heCAmJgogCSAgICB1bmxpa2VseShhdG9taWNfcmVhZCgmbmV0LT5jdC5jb3VudCkgPiBuZl9jb25udHJhY2tfbWF4KSkgewotCQl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfY29ubnRyYWNrKG9yaWcpOworCQl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfY29ubnRyYWNrKG5ldCwgb3JpZyk7CiAJCWlmICghZWFybHlfZHJvcChuZXQsIGhhc2gpKSB7CiAJCQlhdG9taWNfZGVjKCZuZXQtPmN0LmNvdW50KTsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCkBAIC01NzIsNyArNTczLDcgQEAKIAkgKiBEbyBub3QgdXNlIGttZW1fY2FjaGVfemFsbG9jKCksIGFzIHRoaXMgY2FjaGUgdXNlcwogCSAqIFNMQUJfREVTVFJPWV9CWV9SQ1UuCiAJICovCi0JY3QgPSBrbWVtX2NhY2hlX2FsbG9jKG5mX2Nvbm50cmFja19jYWNoZXAsIGdmcCk7CisJY3QgPSBrbWVtX2NhY2hlX2FsbG9jKG5ldC0+Y3QubmZfY29ubnRyYWNrX2NhY2hlcCwgZ2ZwKTsKIAlpZiAoY3QgPT0gTlVMTCkgewogCQlwcl9kZWJ1ZygibmZfY29ubnRyYWNrX2FsbG9jOiBDYW4ndCBhbGxvYyBjb25udHJhY2suXG4iKTsKIAkJYXRvbWljX2RlYygmbmV0LT5jdC5jb3VudCk7CkBAIC02MTEsNyArNjEyLDcgQEAKIAluZl9jdF9leHRfZGVzdHJveShjdCk7CiAJYXRvbWljX2RlYygmbmV0LT5jdC5jb3VudCk7CiAJbmZfY3RfZXh0X2ZyZWUoY3QpOwotCWttZW1fY2FjaGVfZnJlZShuZl9jb25udHJhY2tfY2FjaGVwLCBjdCk7CisJa21lbV9jYWNoZV9mcmVlKG5ldC0+Y3QubmZfY29ubnRyYWNrX2NhY2hlcCwgY3QpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2ZyZWUpOwogCkBAIC0xMDE0LDcgKzEwMTUsNyBAQAogCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwogCiAJc3Bpbl9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0JZm9yICg7ICpidWNrZXQgPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7ICgqYnVja2V0KSsrKSB7CisJZm9yICg7ICpidWNrZXQgPCBuZXQtPmN0Lmh0YWJsZV9zaXplOyAoKmJ1Y2tldCkrKykgewogCQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShoLCBuLCAmbmV0LT5jdC5oYXNoWypidWNrZXRdLCBobm5vZGUpIHsKIAkJCWN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKIAkJCWlmIChpdGVyKGN0LCBkYXRhKSkKQEAgLTExMTMsOSArMTExNCwxMiBAQAogCiBzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfY2xlYW51cF9pbml0X25ldCh2b2lkKQogeworCS8qIHdhaXQgdW50aWwgYWxsIHJlZmVyZW5jZXMgdG8gbmZfY29ubnRyYWNrX3VudHJhY2tlZCBhcmUgZHJvcHBlZCAqLworCXdoaWxlIChhdG9taWNfcmVhZCgmbmZfY29ubnRyYWNrX3VudHJhY2tlZC5jdF9nZW5lcmFsLnVzZSkgPiAxKQorCQlzY2hlZHVsZSgpOworCiAJbmZfY29ubnRyYWNrX2hlbHBlcl9maW5pKCk7CiAJbmZfY29ubnRyYWNrX3Byb3RvX2ZpbmkoKTsKLQlrbWVtX2NhY2hlX2Rlc3Ryb3kobmZfY29ubnRyYWNrX2NhY2hlcCk7CiB9CiAKIHN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpuZXQpCkBAIC0xMTI3LDE1ICsxMTMxLDE0IEBACiAJCXNjaGVkdWxlKCk7CiAJCWdvdG8gaV9zZWVfZGVhZF9wZW9wbGU7CiAJfQotCS8qIHdhaXQgdW50aWwgYWxsIHJlZmVyZW5jZXMgdG8gbmZfY29ubnRyYWNrX3VudHJhY2tlZCBhcmUgZHJvcHBlZCAqLwotCXdoaWxlIChhdG9taWNfcmVhZCgmbmZfY29ubnRyYWNrX3VudHJhY2tlZC5jdF9nZW5lcmFsLnVzZSkgPiAxKQotCQlzY2hlZHVsZSgpOwogCiAJbmZfY3RfZnJlZV9oYXNodGFibGUobmV0LT5jdC5oYXNoLCBuZXQtPmN0Lmhhc2hfdm1hbGxvYywKLQkJCSAgICAgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKTsKKwkJCSAgICAgbmV0LT5jdC5odGFibGVfc2l6ZSk7CiAJbmZfY29ubnRyYWNrX2VjYWNoZV9maW5pKG5ldCk7CiAJbmZfY29ubnRyYWNrX2FjY3RfZmluaShuZXQpOwogCW5mX2Nvbm50cmFja19leHBlY3RfZmluaShuZXQpOworCWttZW1fY2FjaGVfZGVzdHJveShuZXQtPmN0Lm5mX2Nvbm50cmFja19jYWNoZXApOworCWtmcmVlKG5ldC0+Y3Quc2xhYm5hbWUpOwogCWZyZWVfcGVyY3B1KG5ldC0+Y3Quc3RhdCk7CiB9CiAKQEAgLTExOTAsMTAgKzExOTMsMTIgQEAKIHsKIAlpbnQgaSwgYnVja2V0LCB2bWFsbG9jZWQsIG9sZF92bWFsbG9jZWQ7CiAJdW5zaWduZWQgaW50IGhhc2hzaXplLCBvbGRfc2l6ZTsKLQlpbnQgcm5kOwogCXN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoYXNoLCAqb2xkX2hhc2g7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCisJaWYgKGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucyAhPSAmaW5pdF9uZXQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCS8qIE9uIGJvb3QsIHdlIGNhbiBzZXQgdGhpcyB3aXRob3V0IGFueSBmYW5jeSBsb2NraW5nLiAqLwogCWlmICghbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKQogCQlyZXR1cm4gcGFyYW1fc2V0X3VpbnQodmFsLCBrcCk7CkBAIC0xMjA2LDMzICsxMjExLDI5IEBACiAJaWYgKCFoYXNoKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIFdlIGhhdmUgdG8gcmVoYWhzIGZvciB0aGUgbmV3IHRhYmxlIGFueXdheSwgc28gd2UgYWxzbyBjYW4KLQkgKiB1c2UgYSBuZXdyYW5kb20gc2VlZCAqLwotCWdldF9yYW5kb21fYnl0ZXMoJnJuZCwgc2l6ZW9mKHJuZCkpOwotCiAJLyogTG9va3VwcyBpbiB0aGUgb2xkIGhhc2ggbWlnaHQgaGFwcGVuIGluIHBhcmFsbGVsLCB3aGljaCBtZWFucyB3ZQogCSAqIG1pZ2h0IGdldCBmYWxzZSBuZWdhdGl2ZXMgZHVyaW5nIGNvbm5lY3Rpb24gbG9va3VwLiBOZXcgY29ubmVjdGlvbnMKIAkgKiBjcmVhdGVkIGJlY2F1c2Ugb2YgYSBmYWxzZSBuZWdhdGl2ZSB3b24ndCBtYWtlIGl0IGludG8gdGhlIGhhc2gKIAkgKiB0aG91Z2ggc2luY2UgdGhhdCByZXF1aXJlZCB0YWtpbmcgdGhlIGxvY2suCiAJICovCiAJc3Bpbl9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0JZm9yIChpID0gMDsgaSA8IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGluaXRfbmV0LmN0Lmh0YWJsZV9zaXplOyBpKyspIHsKIAkJd2hpbGUgKCFobGlzdF9udWxsc19lbXB0eSgmaW5pdF9uZXQuY3QuaGFzaFtpXSkpIHsKIAkJCWggPSBobGlzdF9udWxsc19lbnRyeShpbml0X25ldC5jdC5oYXNoW2ldLmZpcnN0LAogCQkJCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2gsIGhubm9kZSk7CiAJCQlobGlzdF9udWxsc19kZWxfcmN1KCZoLT5obm5vZGUpOwotCQkJYnVja2V0ID0gX19oYXNoX2Nvbm50cmFjaygmaC0+dHVwbGUsIGhhc2hzaXplLCBybmQpOworCQkJYnVja2V0ID0gX19oYXNoX2Nvbm50cmFjaygmaC0+dHVwbGUsIGhhc2hzaXplLAorCQkJCQkJICBuZl9jb25udHJhY2tfaGFzaF9ybmQpOwogCQkJaGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KCZoLT5obm5vZGUsICZoYXNoW2J1Y2tldF0pOwogCQl9CiAJfQotCW9sZF9zaXplID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOworCW9sZF9zaXplID0gaW5pdF9uZXQuY3QuaHRhYmxlX3NpemU7CiAJb2xkX3ZtYWxsb2NlZCA9IGluaXRfbmV0LmN0Lmhhc2hfdm1hbGxvYzsKIAlvbGRfaGFzaCA9IGluaXRfbmV0LmN0Lmhhc2g7CiAKLQluZl9jb25udHJhY2tfaHRhYmxlX3NpemUgPSBoYXNoc2l6ZTsKKwlpbml0X25ldC5jdC5odGFibGVfc2l6ZSA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSA9IGhhc2hzaXplOwogCWluaXRfbmV0LmN0Lmhhc2hfdm1hbGxvYyA9IHZtYWxsb2NlZDsKIAlpbml0X25ldC5jdC5oYXNoID0gaGFzaDsKLQluZl9jb25udHJhY2tfaGFzaF9ybmQgPSBybmQ7CiAJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKIAogCW5mX2N0X2ZyZWVfaGFzaHRhYmxlKG9sZF9oYXNoLCBvbGRfdm1hbGxvY2VkLCBvbGRfc2l6ZSk7CkBAIC0xMjcxLDE1ICsxMjcyLDYgQEAKIAkgICAgICAgTkZfQ09OTlRSQUNLX1ZFUlNJT04sIG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSwKIAkgICAgICAgbmZfY29ubnRyYWNrX21heCk7CiAKLQluZl9jb25udHJhY2tfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoIm5mX2Nvbm50cmFjayIsCi0JCQkJCQlzaXplb2Yoc3RydWN0IG5mX2Nvbm4pLAotCQkJCQkJMCwgU0xBQl9ERVNUUk9ZX0JZX1JDVSwgTlVMTCk7Ci0JaWYgKCFuZl9jb25udHJhY2tfY2FjaGVwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGNyZWF0ZSBuZl9jb25uIHNsYWIgY2FjaGVcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9jYWNoZTsKLQl9Ci0KIAlyZXQgPSBuZl9jb25udHJhY2tfcHJvdG9faW5pdCgpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9wcm90bzsKQEAgLTEyODgsMTMgKzEyODAsMTkgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfaGVscGVyOwogCisJLyogU2V0IHVwIGZha2UgY29ubnRyYWNrOiB0byBuZXZlciBiZSBkZWxldGVkLCBub3QgaW4gYW55IGhhc2hlcyAqLworI2lmZGVmIENPTkZJR19ORVRfTlMKKwluZl9jb25udHJhY2tfdW50cmFja2VkLmN0X25ldCA9ICZpbml0X25ldDsKKyNlbmRpZgorCWF0b21pY19zZXQoJm5mX2Nvbm50cmFja191bnRyYWNrZWQuY3RfZ2VuZXJhbC51c2UsIDEpOworCS8qICAtIGFuZCBsb29rIGl0IGxpa2UgYXMgYSBjb25maXJtZWQgY29ubmVjdGlvbiAqLworCXNldF9iaXQoSVBTX0NPTkZJUk1FRF9CSVQsICZuZl9jb25udHJhY2tfdW50cmFja2VkLnN0YXR1cyk7CisKIAlyZXR1cm4gMDsKIAogZXJyX2hlbHBlcjoKIAluZl9jb25udHJhY2tfcHJvdG9fZmluaSgpOwogZXJyX3Byb3RvOgotCWttZW1fY2FjaGVfZGVzdHJveShuZl9jb25udHJhY2tfY2FjaGVwKTsKLWVycl9jYWNoZToKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzE2LDcgKzEzMTQsMjQgQEAKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfc3RhdDsKIAl9Ci0JbmV0LT5jdC5oYXNoID0gbmZfY3RfYWxsb2NfaGFzaHRhYmxlKCZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsCisKKwluZXQtPmN0LnNsYWJuYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJuZl9jb25udHJhY2tfJXAiLCBuZXQpOworCWlmICghbmV0LT5jdC5zbGFibmFtZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9zbGFibmFtZTsKKwl9CisKKwluZXQtPmN0Lm5mX2Nvbm50cmFja19jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZShuZXQtPmN0LnNsYWJuYW1lLAorCQkJCQkJCXNpemVvZihzdHJ1Y3QgbmZfY29ubiksIDAsCisJCQkJCQkJU0xBQl9ERVNUUk9ZX0JZX1JDVSwgTlVMTCk7CisJaWYgKCFuZXQtPmN0Lm5mX2Nvbm50cmFja19jYWNoZXApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gY3JlYXRlIG5mX2Nvbm4gc2xhYiBjYWNoZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2NhY2hlOworCX0KKworCW5ldC0+Y3QuaHRhYmxlX3NpemUgPSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7CisJbmV0LT5jdC5oYXNoID0gbmZfY3RfYWxsb2NfaGFzaHRhYmxlKCZuZXQtPmN0Lmh0YWJsZV9zaXplLAogCQkJCQkgICAgICZuZXQtPmN0Lmhhc2hfdm1hbGxvYywgMSk7CiAJaWYgKCFuZXQtPmN0Lmhhc2gpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTEzMzMsMTUgKzEzNDgsNiBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9lY2FjaGU7CiAKLQkvKiBTZXQgdXAgZmFrZSBjb25udHJhY2s6Ci0JICAgIC0gdG8gbmV2ZXIgYmUgZGVsZXRlZCwgbm90IGluIGFueSBoYXNoZXMgKi8KLSNpZmRlZiBDT05GSUdfTkVUX05TCi0JbmZfY29ubnRyYWNrX3VudHJhY2tlZC5jdF9uZXQgPSAmaW5pdF9uZXQ7Ci0jZW5kaWYKLQlhdG9taWNfc2V0KCZuZl9jb25udHJhY2tfdW50cmFja2VkLmN0X2dlbmVyYWwudXNlLCAxKTsKLQkvKiAgLSBhbmQgbG9vayBpdCBsaWtlIGFzIGEgY29uZmlybWVkIGNvbm5lY3Rpb24gKi8KLQlzZXRfYml0KElQU19DT05GSVJNRURfQklULCAmbmZfY29ubnRyYWNrX3VudHJhY2tlZC5zdGF0dXMpOwotCiAJcmV0dXJuIDA7CiAKIGVycl9lY2FjaGU6CkBAIC0xMzUwLDggKzEzNTYsMTIgQEAKIAluZl9jb25udHJhY2tfZXhwZWN0X2ZpbmkobmV0KTsKIGVycl9leHBlY3Q6CiAJbmZfY3RfZnJlZV9oYXNodGFibGUobmV0LT5jdC5oYXNoLCBuZXQtPmN0Lmhhc2hfdm1hbGxvYywKLQkJCSAgICAgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKTsKKwkJCSAgICAgbmV0LT5jdC5odGFibGVfc2l6ZSk7CiBlcnJfaGFzaDoKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobmV0LT5jdC5uZl9jb25udHJhY2tfY2FjaGVwKTsKK2Vycl9jYWNoZToKKwlrZnJlZShuZXQtPmN0LnNsYWJuYW1lKTsKK2Vycl9zbGFibmFtZToKIAlmcmVlX3BlcmNwdShuZXQtPmN0LnN0YXQpOwogZXJyX3N0YXQ6CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKaW5kZXggZmRmNWQyYS4uMmYyNWZmNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKQEAgLTU2OSw3ICs1NjksNyBAQAogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiB9CiAKLW1vZHVsZV9wYXJhbV9uYW1lZChleHBlY3RfaGFzaHNpemUsIG5mX2N0X2V4cGVjdF9oc2l6ZSwgdWludCwgMDYwMCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZXhwZWN0X2hhc2hzaXplLCBuZl9jdF9leHBlY3RfaHNpemUsIHVpbnQsIDA0MDApOwogCiBpbnQgbmZfY29ubnRyYWNrX2V4cGVjdF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCiAJaWYgKG5ldF9lcShuZXQsICZpbml0X25ldCkpIHsKIAkJaWYgKCFuZl9jdF9leHBlY3RfaHNpemUpIHsKLQkJCW5mX2N0X2V4cGVjdF9oc2l6ZSA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSAvIDI1NjsKKwkJCW5mX2N0X2V4cGVjdF9oc2l6ZSA9IG5ldC0+Y3QuaHRhYmxlX3NpemUgLyAyNTY7CiAJCQlpZiAoIW5mX2N0X2V4cGVjdF9oc2l6ZSkKIAkJCQluZl9jdF9leHBlY3RfaHNpemUgPSAxOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jCmluZGV4IDY1YzJhN2IuLjRiMWE1NmIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIAkvKiBHZXQgcmlkIG9mIGV4cGVjdGVkcywgc2V0IGhlbHBlcnMgdG8gTlVMTC4gKi8KIAlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShoLCBubiwgJm5ldC0+Y3QudW5jb25maXJtZWQsIGhubm9kZSkKIAkJdW5oZWxwKGgsIG1lKTsKLQlmb3IgKGkgPSAwOyBpIDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbmV0LT5jdC5odGFibGVfc2l6ZTsgaSsrKSB7CiAJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGgsIG5uLCAmbmV0LT5jdC5oYXNoW2ldLCBobm5vZGUpCiAJCQl1bmhlbHAoaCwgbWUpOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCA1OWQ4MDY0Li4wZmZlNjg5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC01OTQsNyArNTk0LDcgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlsYXN0ID0gKHN0cnVjdCBuZl9jb25uICopY2ItPmFyZ3NbMV07Ci0JZm9yICg7IGNiLT5hcmdzWzBdIDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOyBjYi0+YXJnc1swXSsrKSB7CisJZm9yICg7IGNiLT5hcmdzWzBdIDwgaW5pdF9uZXQuY3QuaHRhYmxlX3NpemU7IGNiLT5hcmdzWzBdKyspIHsKIHJlc3RhcnQ6CiAJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmaW5pdF9uZXQuY3QuaGFzaFtjYi0+YXJnc1swXV0sCiAJCQkJCSBobm5vZGUpIHsKQEAgLTE0MzcsOCArMTQzNyw5IEBACiAJc3RydWN0IG5sYXR0ciAqbmVzdF9wYXJtczsKIAogCW1lbXNldCgmbSwgMHhGRiwgc2l6ZW9mKG0pKTsKLQltLnNyYy51LmFsbCA9IG1hc2stPnNyYy51LmFsbDsKIAltZW1jcHkoJm0uc3JjLnUzLCAmbWFzay0+c3JjLnUzLCBzaXplb2YobS5zcmMudTMpKTsKKwltLnNyYy51LmFsbCA9IG1hc2stPnNyYy51LmFsbDsKKwltLmRzdC5wcm90b251bSA9IHR1cGxlLT5kc3QucHJvdG9udW07CiAKIAluZXN0X3Bhcm1zID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBDVEFfRVhQRUNUX01BU0sgfCBOTEFfRl9ORVNURUQpOwogCWlmICghbmVzdF9wYXJtcykKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKaW5kZXggNGI1NzIxNi4uMDIzOTY2YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKQEAgLTM3Niw3ICszNzYsNyBAQAogCQkJZHB0ciArPSBoZHItPmxlbjsKIAkJZWxzZSBpZiAoaGRyLT5jbmFtZSAmJiBsaW1pdCAtIGRwdHIgPj0gaGRyLT5jbGVuICsgMSAmJgogCQkJIHN0cm5pY21wKGRwdHIsIGhkci0+Y25hbWUsIGhkci0+Y2xlbikgPT0gMCAmJgotCQkJICFpc2FscGhhKCooZHB0ciArIGhkci0+Y2xlbiArIDEpKSkKKwkJCSAhaXNhbHBoYSgqKGRwdHIgKyBoZHItPmNsZW4pKSkKIAkJCWRwdHIgKz0gaGRyLT5jbGVuOwogCQllbHNlCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCAwMjhhYmE2Li5lMzEwZjE1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC01MSw3ICs1MSw3IEBACiAJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47CiAKIAlmb3IgKHN0LT5idWNrZXQgPSAwOwotCSAgICAgc3QtPmJ1Y2tldCA8IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKKwkgICAgIHN0LT5idWNrZXQgPCBuZXQtPmN0Lmh0YWJsZV9zaXplOwogCSAgICAgc3QtPmJ1Y2tldCsrKSB7CiAJCW4gPSByY3VfZGVyZWZlcmVuY2UobmV0LT5jdC5oYXNoW3N0LT5idWNrZXRdLmZpcnN0KTsKIAkJaWYgKCFpc19hX251bGxzKG4pKQpAQCAtNjksNyArNjksNyBAQAogCWhlYWQgPSByY3VfZGVyZWZlcmVuY2UoaGVhZC0+bmV4dCk7CiAJd2hpbGUgKGlzX2FfbnVsbHMoaGVhZCkpIHsKIAkJaWYgKGxpa2VseShnZXRfbnVsbHNfdmFsdWUoaGVhZCkgPT0gc3QtPmJ1Y2tldCkpIHsKLQkJCWlmICgrK3N0LT5idWNrZXQgPj0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKQorCQkJaWYgKCsrc3QtPmJ1Y2tldCA+PSBuZXQtPmN0Lmh0YWJsZV9zaXplKQogCQkJCXJldHVybiBOVUxMOwogCQl9CiAJCWhlYWQgPSByY3VfZGVyZWZlcmVuY2UobmV0LT5jdC5oYXNoW3N0LT5idWNrZXRdLmZpcnN0KTsKQEAgLTM1NSw3ICszNTUsNyBAQAogCX0sCiAJewogCQkucHJvY25hbWUgICAgICAgPSAibmZfY29ubnRyYWNrX2J1Y2tldHMiLAotCQkuZGF0YSAgICAgICAgICAgPSAmbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplLAorCQkuZGF0YSAgICAgICAgICAgPSAmaW5pdF9uZXQuY3QuaHRhYmxlX3NpemUsCiAJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZSAgICAgICAgICAgPSAwNDQ0LAogCQkucHJvY19oYW5kbGVyICAgPSBwcm9jX2RvaW50dmVjLApAQCAtNDIxLDYgKzQyMSw3IEBACiAJCWdvdG8gb3V0X2ttZW1kdXA7CiAKIAl0YWJsZVsxXS5kYXRhID0gJm5ldC0+Y3QuY291bnQ7CisJdGFibGVbMl0uZGF0YSA9ICZuZXQtPmN0Lmh0YWJsZV9zaXplOwogCXRhYmxlWzNdLmRhdGEgPSAmbmV0LT5jdC5zeXNjdGxfY2hlY2tzdW07CiAJdGFibGVbNF0uZGF0YSA9ICZuZXQtPmN0LnN5c2N0bF9sb2dfaW52YWxpZDsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IGE0OTU3YmYuLjRjNTk3MmIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTQ1NSw5ICs0NTUsMTQgQEAKIAlpZiAobmxfdGFibGVbcHJvdG9jb2xdLnJlZ2lzdGVyZWQgJiYKIAkgICAgdHJ5X21vZHVsZV9nZXQobmxfdGFibGVbcHJvdG9jb2xdLm1vZHVsZSkpCiAJCW1vZHVsZSA9IG5sX3RhYmxlW3Byb3RvY29sXS5tb2R1bGU7CisJZWxzZQorCQllcnIgPSAtRVBST1RPTk9TVVBQT1JUOwogCWNiX211dGV4ID0gbmxfdGFibGVbcHJvdG9jb2xdLmNiX211dGV4OwogCW5ldGxpbmtfdW5sb2NrX3RhYmxlKCk7CiAKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKIAllcnIgPSBfX25ldGxpbmtfY3JlYXRlKG5ldCwgc29jaywgY2JfbXV0ZXgsIHByb3RvY29sKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXRfbW9kdWxlOwpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggZjEyNmQxOC4uOTM5NDcxZSAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC01MDgsNyArNTA4LDcgQEAKIAlzdHJ1Y3Qgc2tfZmlsdGVyICpmaWx0ZXI7CiAKIAlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0JZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za19maWx0ZXIpOworCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZV9iaChzay0+c2tfZmlsdGVyKTsKIAlpZiAoZmlsdGVyICE9IE5VTEwpCiAJCXJlcyA9IHNrX3J1bl9maWx0ZXIoc2tiLCBmaWx0ZXItPmluc25zLCBmaWx0ZXItPmxlbik7CiAJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvS2NvbmZpZyBiL25ldC9zY2hlZC9LY29uZmlnCmluZGV4IDkyOTIxOGE0Li4yMWY5Yzc2IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvS2NvbmZpZworKysgYi9uZXQvc2NoZWQvS2NvbmZpZwpAQCAtNDMzLDcgKzQzMyw3IEBACiAJICBtb2R1bGUuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwb2xpY2UuCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3BvbGljZS4KIAogY29uZmlnIE5FVF9BQ1RfR0FDVAogICAgICAgICB0cmlzdGF0ZSAiR2VuZXJpYyBhY3Rpb25zIgpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJICBhY2NlcHRpbmcgcGFja2V0cy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdhY3QuCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2dhY3QuCiAKIGNvbmZpZyBHQUNUX1BST0IKICAgICAgICAgYm9vbCAiUHJvYmFiaWxpdHkgc3VwcG9ydCIKQEAgLTQ1OSw3ICs0NTksNyBAQAogCSAgb3RoZXIgZGV2aWNlcy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1pcnJlZC4KKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfbWlycmVkLgogCiBjb25maWcgTkVUX0FDVF9JUFQKICAgICAgICAgdHJpc3RhdGUgIklQdGFibGVzIHRhcmdldHMiCkBAIC00NjksNyArNDY5LDcgQEAKIAkgIGNsYXNzaWZpY2F0aW9uLgogCiAJICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaXB0LgorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9pcHQuCiAKIGNvbmZpZyBORVRfQUNUX05BVAogICAgICAgICB0cmlzdGF0ZSAiU3RhdGVsZXNzIE5BVCIKQEAgLTQ3OSw3ICs0NzksNyBAQAogCSAgbmV0ZmlsdGVyIGZvciBOQVQgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG5hdC4KKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfbmF0LgogCiBjb25maWcgTkVUX0FDVF9QRURJVAogICAgICAgICB0cmlzdGF0ZSAiUGFja2V0IEVkaXRpbmciCkBAIC00ODgsNyArNDg4LDcgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gbWFuZ2xlIHRoZSBjb250ZW50IG9mIHBhY2tldHMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwZWRpdC4KKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfcGVkaXQuCiAKIGNvbmZpZyBORVRfQUNUX1NJTVAKICAgICAgICAgdHJpc3RhdGUgIlNpbXBsZSBFeGFtcGxlIChEZWJ1ZykiCkBAIC01MDIsNyArNTAyLDcgQEAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzaW1wbGUuCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3NpbXBsZS4KIAogY29uZmlnIE5FVF9BQ1RfU0tCRURJVAogICAgICAgICB0cmlzdGF0ZSAiU0tCIEVkaXRpbmciCkBAIC01MTMsNyArNTEzLDcgQEAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBza2JlZGl0LgorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9za2JlZGl0LgogCiBjb25maWcgTkVUX0NMU19JTkQKIAlib29sICJJbmNvbWluZyBkZXZpY2UgY2xhc3NpZmljYXRpb24iCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2FsZ28uYyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCmluZGV4IDc0M2MwMTMuLjhiNGQ2ZTMgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fYWxnby5jCisrKyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCkBAIC0xMjUsNiArMTI1LDIyIEBACiAJCS5zYWRiX2FsZ19tYXhiaXRzID0gMjU2CiAJfQogfSwKK3sKKwkubmFtZSA9ICJyZmM0NTQzKGdjbShhZXMpKSIsCisKKwkudWluZm8gPSB7CisJCS5hZWFkID0geworCQkJLmljdl90cnVuY2JpdHMgPSAxMjgsCisJCX0KKwl9LAorCisJLmRlc2MgPSB7CisJCS5zYWRiX2FsZ19pZCA9IFNBREJfWF9FQUxHX05VTExfQUVTX0dNQUMsCisJCS5zYWRiX2FsZ19pdmxlbiA9IDgsCisJCS5zYWRiX2FsZ19taW5iaXRzID0gMTI4LAorCQkuc2FkYl9hbGdfbWF4Yml0cyA9IDI1NgorCX0KK30sCiB9OwogCiBzdGF0aWMgc3RydWN0IHhmcm1fYWxnb19kZXNjIGFhbGdfbGlzdFtdID0gewpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCmluZGV4IGIzNmNjMzQuLmY0NDVlYTEgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYworKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTExMDIsNyArMTEwMiw3IEBACiAJaW50IGVyciA9IC1FTk9NRU07CiAJc3RydWN0IHhmcm1fc3RhdGUgKnggPSB4ZnJtX3N0YXRlX2FsbG9jKG5ldCk7CiAJaWYgKCF4KQotCQlnb3RvIGVycm9yOworCQlnb3RvIG91dDsKIAogCW1lbWNweSgmeC0+aWQsICZvcmlnLT5pZCwgc2l6ZW9mKHgtPmlkKSk7CiAJbWVtY3B5KCZ4LT5zZWwsICZvcmlnLT5zZWwsIHNpemVvZih4LT5zZWwpKTsKQEAgLTExNjAsMTYgKzExNjAsMTAgQEAKIAlyZXR1cm4geDsKIAogIGVycm9yOgorCXhmcm1fc3RhdGVfcHV0KHgpOworb3V0OgogCWlmIChlcnJwKQogCQkqZXJycCA9IGVycjsKLQlpZiAoeCkgewotCQlrZnJlZSh4LT5hYWxnKTsKLQkJa2ZyZWUoeC0+ZWFsZyk7Ci0JCWtmcmVlKHgtPmNhbGcpOwotCQlrZnJlZSh4LT5lbmNhcCk7Ci0JCWtmcmVlKHgtPmNvYWRkcik7Ci0JfQotCWtmcmVlKHgpOwogCXJldHVybiBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9zY3JpcHRzLy5naXRpZ25vcmUgYi9zY3JpcHRzLy5naXRpZ25vcmUKaW5kZXggNTJjYWI0NmEuLmM1ZDVkYjUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvLmdpdGlnbm9yZQorKysgYi9zY3JpcHRzLy5naXRpZ25vcmUKQEAgLTYsNSArNiw0IEBACiBwbm10b2xvZ28KIGJpbjJjCiB1bmlmZGVmCi1iaW5vZmZzZXQKIGloZXgyZncKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYmlub2Zmc2V0LmMgYi9zY3JpcHRzL2Jpbm9mZnNldC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTJlMzliLi4wMDAwMDAwCi0tLSBhL3NjcmlwdHMvYmlub2Zmc2V0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogYmlub2Zmc2V0LmMKLSAqIChDKSAyMDAyIFJhbmR5IER1bmxhcCA8cmR1bmxhcEB4ZW5vdGltZS5uZXQ+Ci0KLSMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0jIGJpbm9mZnNldC5jOgotIyAtIHNlYXJjaGVzIGEgKGJpbmFyeSkgZmlsZSBmb3IgYSBzcGVjaWZpZWQgKGJpbmFyeSkgcGF0dGVybgotIyAtIHJldHVybnMgdGhlIG9mZnNldCBvZiB0aGUgbG9jYXRlZCBwYXR0ZXJuIG9yIH4wIGlmIG5vdCBmb3VuZAotIyAtIGV4aXRzIHdpdGggZXhpdCBzdGF0dXMgMCBub3JtYWxseSBvciBub24tMCBpZiBwYXR0ZXJuIGlzIG5vdCBmb3VuZAotIyAgIG9yIGFueSBvdGhlciBlcnJvciBvY2N1cnMuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0KLSNkZWZpbmUgVkVSU0lPTgkJIjAuMSIKLSNkZWZpbmUgQlVGX1NJWkUJKDE2ICogMTAyNCkKLSNkZWZpbmUgUEFUX1NJWkUJMTAwCi0KLWNoYXIJCSpwcm9nbmFtZTsKLWNoYXIJCSppbnB1dG5hbWU7Ci1pbnQJCWlucHV0ZmQ7Ci11bnNpZ25lZCBpbnQJYml4OwkJCS8qIGJ1ZiBpbmRleCAqLwotdW5zaWduZWQgY2hhcglwYXR0ZXJucyBbUEFUX1NJWkVdID0gezB9OyAvKiBieXRlLXNpemVkIHBhdHRlcm4gYXJyYXkgKi8KLWludAkJcGF0X2xlbjsJCS8qIGFjdHVhbCBudW1iZXIgb2YgcGF0dGVybiBieXRlcyAqLwotdW5zaWduZWQgY2hhcgkqbWFkcjsJCQkvKiBtbWFwIGFkZHJlc3MgKi8KLXNpemVfdAkJZmlsZXNpemU7Ci1pbnQJCW51bV9tYXRjaGVzID0gMDsKLW9mZl90CQlmaXJzdGxvYyA9IDA7Ci0KLXZvaWQgdXNhZ2UgKHZvaWQpCi17Ci0JZnByaW50ZiAoc3RkZXJyLCAiJXMgdmVyLiAlc1xuIiwgcHJvZ25hbWUsIFZFUlNJT04pOwotCWZwcmludGYgKHN0ZGVyciwgInVzYWdlOiAgJXMgZmlsZW5hbWUgcGF0dGVybl9ieXRlc1xuIiwKLQkJCXByb2duYW1lKTsKLQlmcHJpbnRmIChzdGRlcnIsICIgICAgICAgIFtwcmludHMgbG9jYXRpb24gb2YgcGF0dGVybl9ieXRlcyBpbiBmaWxlXVxuIik7Ci0JZXhpdCAoMSk7Ci19Ci0KLXZvaWQgZ2V0X3BhdHRlcm4gKGludCBwYXRfY291bnQsIGNoYXIgKnBhdHMgW10pCi17Ci0JaW50IGl4LCBlcnIsIHRtcDsKLQotI2lmZGVmIERFQlVHCi0JZnByaW50ZiAoc3RkZXJyLCJnZXRfcGF0dGVybjogY291bnQgPSAlZFxuIiwgcGF0X2NvdW50KTsKLQlmb3IgKGl4ID0gMDsgaXggPCBwYXRfY291bnQ7IGl4KyspCi0JCWZwcmludGYgKHN0ZGVyciwgIiAgcGF0ICMgJWQ6ICBbJXNdXG4iLCBpeCwgcGF0c1tpeF0pOwotI2VuZGlmCi0KLQlmb3IgKGl4ID0gMDsgaXggPCBwYXRfY291bnQ7IGl4KyspIHsKLQkJdG1wID0gMDsKLQkJZXJyID0gc3NjYW5mIChwYXRzW2l4XSwgIiU1aSIsICZ0bXApOwotCQlpZiAoZXJyICE9IDEgfHwgdG1wID4gMHhmZikgewotCQkJZnByaW50ZiAoc3RkZXJyLCAicGF0dGVybiBvciB2YWx1ZSBlcnJvciBpbiBwYXR0ZXJuICMgJWQgWyVzXVxuIiwKLQkJCQkJaXgsIHBhdHNbaXhdKTsKLQkJCXVzYWdlICgpOwotCQl9Ci0JCXBhdHRlcm5zIFtpeF0gPSB0bXA7Ci0JfQotCXBhdF9sZW4gPSBwYXRfY291bnQ7Ci19Ci0KLXZvaWQgc2VhcmNoX3BhdHRlcm4gKHZvaWQpCi17Ci0JZm9yIChiaXggPSAwOyBiaXggPCBmaWxlc2l6ZTsgYml4KyspIHsKLQkJaWYgKG1hZHJbYml4XSA9PSBwYXR0ZXJuc1swXSkgewotCQkJaWYgKG1lbWNtcCAoJm1hZHJbYml4XSwgcGF0dGVybnMsIHBhdF9sZW4pID09IDApIHsKLQkJCQlpZiAobnVtX21hdGNoZXMgPT0gMCkKLQkJCQkJZmlyc3Rsb2MgPSBiaXg7Ci0JCQkJbnVtX21hdGNoZXMrKzsKLQkJCX0KLQkJfQotCX0KLX0KLQotI2lmZGVmIE5PVERFRgotc2l6ZV90IGdldF9maWxlc2l6ZSAoaW50IGZkKQotewotCW9mZl90IGVuZF9vZmYgPSBsc2VlayAoZmQsIDAsIFNFRUtfRU5EKTsKLQlsc2VlayAoZmQsIDAsIFNFRUtfU0VUKTsKLQlyZXR1cm4gKHNpemVfdCkgZW5kX29mZjsKLX0KLSNlbmRpZgotCi1zaXplX3QgZ2V0X2ZpbGVzaXplIChpbnQgZmQpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgc3RhdCBzdGF0OwotCi0JZXJyID0gZnN0YXQgKGZkLCAmc3RhdCk7Ci0JZnByaW50ZiAoc3RkZXJyLCAiZmlsZXNpemU6ICVsZFxuIiwgZXJyIDwgMCA/IChsb25nKWVyciA6IHN0YXQuc3Rfc2l6ZSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIChzaXplX3QpIHN0YXQuc3Rfc2l6ZTsKLX0KLQotaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2IFtdKQotewotCXByb2duYW1lID0gYXJndlswXTsKLQotCWlmIChhcmdjIDwgMykKLQkJdXNhZ2UgKCk7Ci0KLQlnZXRfcGF0dGVybiAoYXJnYyAtIDIsIGFyZ3YgKyAyKTsKLQotCWlucHV0bmFtZSA9IGFyZ3ZbMV07Ci0KLQlpbnB1dGZkID0gb3BlbiAoaW5wdXRuYW1lLCBPX1JET05MWSk7Ci0JaWYgKGlucHV0ZmQgPT0gLTEpIHsKLQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IGNhbm5vdCBvcGVuICclcydcbiIsCi0JCQkJcHJvZ25hbWUsIGlucHV0bmFtZSk7Ci0JCWV4aXQgKDMpOwotCX0KLQotCWZpbGVzaXplID0gZ2V0X2ZpbGVzaXplIChpbnB1dGZkKTsKLQotCW1hZHIgPSBtbWFwICgwLCBmaWxlc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgaW5wdXRmZCwgMCk7Ci0JaWYgKG1hZHIgPT0gTUFQX0ZBSUxFRCkgewotCQlmcHJpbnRmIChzdGRlcnIsICJtbWFwIGVycm9yID0gJWRcbiIsIGVycm5vKTsKLQkJY2xvc2UgKGlucHV0ZmQpOwotCQlleGl0ICg0KTsKLQl9Ci0KLQlzZWFyY2hfcGF0dGVybiAoKTsKLQotCWlmIChtdW5tYXAgKG1hZHIsIGZpbGVzaXplKSkKLQkJZnByaW50ZiAoc3RkZXJyLCAibXVubWFwIGVycm9yID0gJWRcbiIsIGVycm5vKTsKLQotCWlmIChjbG9zZSAoaW5wdXRmZCkpCi0JCWZwcmludGYgKHN0ZGVyciwgIiVzOiBlcnJvciAlZCBjbG9zaW5nICclcydcbiIsCi0JCQkJcHJvZ25hbWUsIGVycm5vLCBpbnB1dG5hbWUpOwotCi0JZnByaW50ZiAoc3RkZXJyLCAibnVtYmVyIG9mIHBhdHRlcm4gbWF0Y2hlcyA9ICVkXG4iLCBudW1fbWF0Y2hlcyk7Ci0JaWYgKG51bV9tYXRjaGVzID09IDApCi0JCWZpcnN0bG9jID0gfjA7Ci0JcHJpbnRmICgiJWxkXG4iLCBmaXJzdGxvYyk7Ci0JZnByaW50ZiAoc3RkZXJyLCAiJWxkXG4iLCBmaXJzdGxvYyk7Ci0KLQlleGl0IChudW1fbWF0Y2hlcyA/IDAgOiAyKTsKLX0KLQotLyogZW5kIGJpbm9mZnNldC5jICovCmRpZmYgLS1naXQgYS9zY3JpcHRzL2V4dHJhY3QtaWtjb25maWcgYi9zY3JpcHRzL2V4dHJhY3QtaWtjb25maWcKaW5kZXggZGUyMzNmZi4uMzdmMzBkMyAxMDA3NTUKLS0tIGEvc2NyaXB0cy9leHRyYWN0LWlrY29uZmlnCisrKyBiL3NjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZwpAQCAtMSw5MiArMSw1MyBAQAogIyEvYmluL3NoCi0jIGV4dHJhY3RzIC5jb25maWcgaW5mbyBmcm9tIGEgW2JdekltYWdlIGZpbGUKLSMgdXNlczogYmlub2Zmc2V0IChuZXcpLCBkZCwgemNhdCwgc3RyaW5ncywgZ3JlcAotIyAkYXJnMSBpcyBbYl16SW1hZ2UgZmlsZW5hbWUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBleHRyYWN0LWlrY29uZmlnIC0gRXh0cmFjdCB0aGUgLmNvbmZpZyBmaWxlIGZyb20gYSBrZXJuZWwgaW1hZ2UKKyMKKyMgVGhpcyB3aWxsIG9ubHkgd29yayB3aGVuIHRoZSBrZXJuZWwgd2FzIGNvbXBpbGVkIHdpdGggQ09ORklHX0lLQ09ORklHLgorIworIyBUaGUgb2JzY3VyZSB1c2Ugb2YgdGhlICJ0ciIgZmlsdGVyIGlzIHRvIHdvcmsgYXJvdW5kIG9sZGVyIHZlcnNpb25zIG9mCisjICJncmVwIiB0aGF0IHJlcG9ydCB0aGUgYnl0ZSBvZmZzZXQgb2YgdGhlIGxpbmUgaW5zdGVhZCBvZiB0aGUgcGF0dGVybi4KKyMKKyMgKGMpIDIwMDksIERpY2sgU3RyZWVmbGFuZCA8ZGlja0BzdHJlZWZsYW5kLm5ldD4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1iaW5vZmZzZXQ9Ii4vc2NyaXB0cy9iaW5vZmZzZXQiCi10ZXN0IC1lICRiaW5vZmZzZXQgfHwgY2MgLW8gJGJpbm9mZnNldCAuL3NjcmlwdHMvYmlub2Zmc2V0LmMgfHwgZXhpdCAxCitnejE9J1wwMzdcMjEzXDAxMCcKK2d6Mj0nMDEnCitjZjE9J0lLQ0ZHX1NUXDAzN1wyMTNcMDEwJworY2YyPScwMTIzNDU2Nzg5JwogCi1JS0NGR19TVD0iMHg0OSAweDRiIDB4NDMgMHg0NiAweDQ3IDB4NWYgMHg1MyAweDU0IgotSUtDRkdfRUQ9IjB4NDkgMHg0YiAweDQzIDB4NDYgMHg0NyAweDVmIDB4NDUgMHg0NCIKLWR1bXBfY29uZmlnKCkgewotICAgIGZpbGU9IiQxIgotCi0gICAgc3RhcnQ9YCRiaW5vZmZzZXQgJGZpbGUgJElLQ0ZHX1NUIDI+L2Rldi9udWxsYAotICAgIFsgIiQ/IiAhPSAiMCIgXSAmJiBzdGFydD0iLTEiCi0gICAgaWYgWyAiJHN0YXJ0IiAtZXEgIi0xIiBdOyB0aGVuCi0JcmV0dXJuCi0gICAgZmkKLSAgICBlbmQ9YCRiaW5vZmZzZXQgJGZpbGUgJElLQ0ZHX0VEIDI+L2Rldi9udWxsYAotICAgIFsgIiQ/IiAhPSAiMCIgXSAmJiBlbmQ9Ii0xIgotICAgIGlmIFsgIiRlbmQiIC1lcSAiLTEiIF07IHRoZW4KLQlyZXR1cm4KLSAgICBmaQotCi0gICAgc3RhcnQ9YGV4cHIgJHN0YXJ0ICsgOGAKLSAgICBzaXplPWBleHByICRlbmQgLSAkc3RhcnRgCi0KLSAgICBkZCBpZj0iJGZpbGUiIGlicz0xIHNraXA9IiRzdGFydCIgY291bnQ9IiRzaXplIiAyPi9kZXYvbnVsbCB8IHpjYXQKLQotICAgIGNsZWFuX3VwCi0gICAgZXhpdCAwCi19Ci0KLQotdXNhZ2UoKQorZHVtcF9jb25maWcoKQogewotCWVjaG8gIiAgdXNhZ2U6IGV4dHJhY3QtaWtjb25maWcgW2JdekltYWdlX2ZpbGVuYW1lIgotfQotCi1jbGVhbl91cCgpCi17Ci0JaWYgWyAiJFRNUEZJTEUiICE9ICIiIF07IHRoZW4KLQkJcm0gLWYgJFRNUEZJTEUKKwlpZglwb3M9YHRyICIkY2YxXG4kY2YyIiAiXG4kY2YyPSIgPCAiJDEiIHwgZ3JlcCAtYWJvICJeJGNmMiJgCisJdGhlbgorCQlwb3M9JHtwb3MlJToqfQorCQl0YWlsIC1jKyQoKCRwb3MrOCkpICIkMSIgfCB6Y2F0IC1xCisJCWV4aXQgMAogCWZpCiB9CiAKLWlmIFsgJCMgLWx0IDEgXQorIyBDaGVjayBpbnZvY2F0aW9uOgorbWU9JHswIyMqL30KK2ltZz0kMQoraWYJWyAkIyAtbmUgMSAtbyAhIC1zICIkaW1nIiBdCiB0aGVuCi0JdXNhZ2UKLQlleGl0IDEKKwllY2hvICJVc2FnZTogJG1lIDxrZXJuZWwtaW1hZ2U+IiA+JjIKKwlleGl0IDIKIGZpCiAKLVRNUEZJTEU9YG1rdGVtcCAtdCBpa2NvbmZpZy1YWFhYWFhgIHx8IGV4aXQgMQotaW1hZ2U9IiQxIgorIyBJbml0aWFsIGF0dGVtcHQgZm9yIHVuY29tcHJlc3NlZCBpbWFnZXMgb3Igb2JqZWN0czoKK2R1bXBfY29uZmlnICIkaW1nIgogCi0jIHZtbGludXg6IEF0dGVtcHQgdG8gZHVtcCB0aGUgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBmaWxlIGRpcmVjdGx5Ci1kdW1wX2NvbmZpZyAiJGltYWdlIgorIyBUaGF0IGRpZG4ndCB3b3JrLCBzbyBkZWNvbXByZXNzIGFuZCB0cnkgYWdhaW46Cit0bXA9L3RtcC9pa2NvbmZpZyQkCit0cmFwICJybSAtZiAkdG1wIiAwCitmb3IJcG9zIGluIGB0ciAiJGd6MVxuJGd6MiIgIlxuJGd6Mj0iIDwgIiRpbWciIHwgZ3JlcCAtYWJvICJeJGd6MiJgCitkbworCXBvcz0ke3BvcyUlOip9CisJdGFpbCAtYyskcG9zICIkaW1nIiB8IHpjYXQgMj4gL2Rldi9udWxsID4gJHRtcAorCWR1bXBfY29uZmlnICR0bXAKK2RvbmUKIAotR1pIRFIxPSIweDFmIDB4OGIgMHgwOCAweDAwIgotR1pIRFIyPSIweDFmIDB4OGIgMHgwOCAweDA4IgotCi1FTEZIRFI9IjB4N2YgMHg0NSAweDRjIDB4NDYiCi0KLSMgdm1saW51eC5nejogQ2hlY2sgZm9yIGEgY29tcHJlc3NlZCBpbWFnZXMKLW9mZj1gJGJpbm9mZnNldCAiJGltYWdlIiAkR1pIRFIxIDI+L2Rldi9udWxsYAotWyAiJD8iICE9ICIwIiBdICYmIG9mZj0iLTEiCi1pZiBbICIkb2ZmIiAtZXEgIi0xIiBdOyB0aGVuCi0Jb2ZmPWAkYmlub2Zmc2V0ICIkaW1hZ2UiICRHWkhEUjIgMj4vZGV2L251bGxgCi0JWyAiJD8iICE9ICIwIiBdICYmIG9mZj0iLTEiCi1maQotaWYgWyAiJG9mZiIgLWVxICIwIiBdOyB0aGVuCi0JemNhdCA8IiRpbWFnZSIgPiIkVE1QRklMRSIKLQlkdW1wX2NvbmZpZyAiJFRNUEZJTEUiCi1lbGlmIFsgIiRvZmYiIC1uZSAiLTEiIF07IHRoZW4KLQkoZGQgaWJzPSIkb2ZmIiBza2lwPTEgY291bnQ9MCAmJiBkZCBicz01MTJrKSA8IiRpbWFnZSIgMj4vZGV2L251bGwgfCBcCi0JCXpjYXQgPiIkVE1QRklMRSIKLQlkdW1wX2NvbmZpZyAiJFRNUEZJTEUiCi0KLSMgY2hlY2sgaWYgdGhpcyBpcyBzaW1wbHkgYW4gRUxGIGZpbGUKLWVsc2UKLQlvZmY9YCRiaW5vZmZzZXQgIiRpbWFnZSIgJEVMRkhEUiAyPi9kZXYvbnVsbGAKLQlbICIkPyIgIT0gIjAiIF0gJiYgb2ZmPSItMSIKLQlpZiBbICIkb2ZmIiAtZXEgIjAiIF07IHRoZW4KLQkJZHVtcF9jb25maWcgIiRpbWFnZSIKLQlmaQotZmkKLQotZWNobyAiRVJST1I6IFVuYWJsZSB0byBleHRyYWN0IGtlcm5lbCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiIKLWVjaG8gIiAgICAgICBUaGlzIGtlcm5lbCBpbWFnZSBtYXkgbm90IGhhdmUgdGhlIGNvbmZpZyBpbmZvLiIKLQotY2xlYW5fdXAKKyMgQmFpbCBvdXQ6CitlY2hvICIkbWU6IENhbm5vdCBmaW5kIGtlcm5lbCBjb25maWcuIiA+JjIKIGV4aXQgMQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbCBiL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKaW5kZXggMDkwZjI0OC4uMmYzMjMwZCAxMDA3NTUKLS0tIGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbAorKysgYi9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCkBAIC03NCw4ICs3NCw4IEBACiBteSAlVkNTX2NtZHNfZ2l0ID0gKAogICAgICJleGVjdXRlX2NtZCIgPT4gXCZnaXRfZXhlY3V0ZV9jbWQsCiAgICAgImF2YWlsYWJsZSIgPT4gJyh3aGljaCgiZ2l0IikgbmUgIiIpICYmICgtZCAiLmdpdCIpJywKLSAgICAiZmluZF9zaWduZXJzX2NtZCIgPT4gImdpdCBsb2cgLS1zaW5jZT1cJGVtYWlsX2dpdF9zaW5jZSAtLSBcJGZpbGUiLAotICAgICJmaW5kX2NvbW1pdF9zaWduZXJzX2NtZCIgPT4gImdpdCBsb2cgLTEgXCRjb21taXQiLAorICAgICJmaW5kX3NpZ25lcnNfY21kIiA9PiAiZ2l0IGxvZyAtLW5vLWNvbG9yIC0tc2luY2U9XCRlbWFpbF9naXRfc2luY2UgLS0gXCRmaWxlIiwKKyAgICAiZmluZF9jb21taXRfc2lnbmVyc19jbWQiID0+ICJnaXQgbG9nIC0tbm8tY29sb3IgLTEgXCRjb21taXQiLAogICAgICJibGFtZV9yYW5nZV9jbWQiID0+ICJnaXQgYmxhbWUgLWwgLUwgXCRkaWZmX3N0YXJ0LCtcJGRpZmZfbGVuZ3RoIFwkZmlsZSIsCiAgICAgImJsYW1lX2ZpbGVfY21kIiA9PiAiZ2l0IGJsYW1lIC1sIFwkZmlsZSIsCiAgICAgImNvbW1pdF9wYXR0ZXJuIiA9PiAiXmNvbW1pdCBbMC05YS1mXXs0MCw0MH0iLApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlIGIvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCmluZGV4IDk5OWU4YTcuLjE4NmM0NjYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQorKysgYi9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKQEAgLTMwLDggKzMwLDE3IEBACiAJJChRKW1rZGlyIC1wIGluY2x1ZGUvZ2VuZXJhdGVkCiAJJDwgLXMgJChLY29uZmlnKQogCisjIGlmIG5vIHBhdGggaXMgZ2l2ZW4sIHRoZW4gdXNlIHNyYyBkaXJlY3RvcnkgdG8gZmluZCBmaWxlCitpZmRlZiBMU01PRAorTFNNT0RfRiA6PSAkKExTTU9EKQoraWZlcSAoJChmaW5kc3RyaW5nIC8sJChMU01PRCkpLCkKKyAgTFNNT0RfRiA6PSAkKG9ianRyZWUpLyQoTFNNT0QpCitlbmRpZgorZW5kaWYKKwogbG9jYWxtb2Rjb25maWc6ICQob2JqKS9zdHJlYW1saW5lX2NvbmZpZy5wbCAkKG9iaikvY29uZgotCSQoUSlwZXJsICQ8ICQoc3JjdHJlZSkgJChLY29uZmlnKSA+IC50bXAuY29uZmlnCisJJChRKW1rZGlyIC1wIGluY2x1ZGUvZ2VuZXJhdGVkCisJJChRKXBlcmwgJDwgJChzcmN0cmVlKSAkKEtjb25maWcpICQoTFNNT0RfRikgPiAudG1wLmNvbmZpZwogCSQoUSlpZiBbIC1mIC5jb25maWcgXTsgdGhlbiAJCQkJXAogCQkJY21wIC1zIC50bXAuY29uZmlnIC5jb25maWcgfHwJCVwKIAkJCShtdiAtZiAuY29uZmlnIC5jb25maWcub2xkLjE7CQlcCkBAIC00NSw3ICs1NCw4IEBACiAJJChRKXJtIC1mIC50bXAuY29uZmlnCiAKIGxvY2FseWVzY29uZmlnOiAkKG9iaikvc3RyZWFtbGluZV9jb25maWcucGwgJChvYmopL2NvbmYKLQkkKFEpcGVybCAkPCAkKHNyY3RyZWUpICQoS2NvbmZpZykgPiAudG1wLmNvbmZpZworCSQoUSlta2RpciAtcCBpbmNsdWRlL2dlbmVyYXRlZAorCSQoUSlwZXJsICQ8ICQoc3JjdHJlZSkgJChLY29uZmlnKSAkKExTTU9EX0YpID4gLnRtcC5jb25maWcKIAkkKFEpc2VkIC1pIHMvPW0vPXkvIC50bXAuY29uZmlnCiAJJChRKWlmIFsgLWYgLmNvbmZpZyBdOyB0aGVuIAkJCQlcCiAJCQljbXAgLXMgLnRtcC5jb25maWcgLmNvbmZpZyB8fAkJXApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsIGIvc2NyaXB0cy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsCmluZGV4IDBkODAwODIuLmFmYmQ1NGEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZpZy5wbAorKysgYi9zY3JpcHRzL2tjb25maWcvc3RyZWFtbGluZV9jb25maWcucGwKQEAgLTExMyw2ICsxMTMsNyBAQAogIyBHZXQgdGhlIGJ1aWxkIHNvdXJjZSBhbmQgdG9wIGxldmVsIEtjb25maWcgZmlsZSAocGFzc2VkIGluKQogbXkgJGtzb3VyY2UgPSAkQVJHVlswXTsKIG15ICRrY29uZmlnID0gJEFSR1ZbMV07CitteSAkbHNtb2RfZmlsZSA9ICRBUkdWWzJdOwogCiBteSBAbWFrZWZpbGVzID0gYGZpbmQgJGtzb3VyY2UgLW5hbWUgTWFrZWZpbGVgOwogbXkgJWRlcGVuZHM7CkBAIC0xMjEsNiArMTIyLDggQEAKIG15ICVvYmplY3RzOwogbXkgJHZhcjsKIG15ICRjb250ID0gMDsKK215ICRpZmxldmVsID0gMDsKK215IEBpZmRlcHM7CiAKICMgcHJldmVudCByZWN1cnNpb24KIG15ICVyZWFkX2tjb25maWdzOwpAQCAtMTQ2LDYgKzE0OSwxNSBAQAogCSAgICAkc3RhdGUgPSAiTkVXIjsKIAkgICAgJGNvbmZpZyA9ICQxOwogCisJICAgIGZvciAobXkgJGkgPSAwOyAkaSA8ICRpZmxldmVsOyAkaSsrKSB7CisJCWlmICgkaSkgeworCQkgICAgJGRlcGVuZHN7JGNvbmZpZ30gLj0gIiAiIC4gJGlmZGVwc1skaV07CisJCX0gZWxzZSB7CisJCSAgICAkZGVwZW5kc3skY29uZmlnfSA9ICRpZmRlcHNbJGldOworCQl9CisJCSRzdGF0ZSA9ICJERVAiOworCSAgICB9CisKIAkjIGNvbGxlY3QgdGhlIGRlcGVuZHMgZm9yIHRoZSBjb25maWcKIAl9IGVsc2lmICgkc3RhdGUgZXEgIk5FVyIgJiYgL15ccypkZXBlbmRzXHMrb25ccysoLiopJC8pIHsKIAkgICAgJHN0YXRlID0gIkRFUCI7CkBAIC0xNjYsNiArMTc4LDIxIEBACiAJICAgICMgbm90ZSBpZiB0aGUgY29uZmlnIGhhcyBhIHByb21wdAogCSAgICAkcHJvbXB0eyRjb25maWd9ID0gMTsKIAorCSMgQ2hlY2sgZm9yIGlmIHN0YXRlbWVudHMKKwl9IGVsc2lmICgvXmlmXHMrKC4qXFMpXHMqJC8pIHsKKwkgICAgbXkgJGRlcHMgPSAkMTsKKwkgICAgIyByZW1vdmUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgbm9uIHRleHQKKwkgICAgJGRlcHMgPX4gcy9eW15hLXpBLVowLTlfXSovLzsKKwkgICAgJGRlcHMgPX4gcy9bXmEtekEtWjAtOV9dKiQvLzsKKworCSAgICBteSBAZGVwcyA9IHNwbGl0IC9bXmEtekEtWjAtOV9dKy8sICRkZXBzOworCisJICAgICRpZmRlcHNbJGlmbGV2ZWwrK10gPSBqb2luICc6JywgQGRlcHM7CisKKwl9IGVsc2lmICgvXmVuZGlmLykgeworCisJICAgICRpZmxldmVsLS0gaWYgKCRpZmxldmVsKTsKKwogCSMgc3RvcCBvbiAiaGVscCIKIAl9IGVsc2lmICgvXlxzKmhlbHBccyokLykgewogCSAgICAkc3RhdGUgPSAiTk9ORSI7CkBAIC0yMzcsOCArMjY0LDM2IEBACiAKIG15ICVtb2R1bGVzOwogCi0jIHNlZSB3aGF0IG1vZHVsZXMgYXJlIGxvYWRlZCBvbiB0aGlzIHN5c3RlbQotb3BlbihMSU4sIi9zYmluL2xzbW9kfCIpIHx8IGRpZSAiQ2FudCBsc21vZCI7CitpZiAoZGVmaW5lZCgkbHNtb2RfZmlsZSkpIHsKKyAgICBpZiAoICEgLWYgJGxzbW9kX2ZpbGUpIHsKKwlkaWUgIiRsc21vZF9maWxlIG5vdCBmb3VuZCI7CisgICAgfQorICAgIGlmICggLXggJGxzbW9kX2ZpbGUpIHsKKwkjIHRoZSBmaWxlIGlzIGV4ZWN1dGFibGUsIHJ1biBpdAorCW9wZW4oTElOLCAiJGxzbW9kX2ZpbGV8Iik7CisgICAgfSBlbHNlIHsKKwkjIEp1c3QgcmVhZCB0aGUgY29udGVudHMKKwlvcGVuKExJTiwgIiRsc21vZF9maWxlIik7CisgICAgfQorfSBlbHNlIHsKKworICAgICMgc2VlIHdoYXQgbW9kdWxlcyBhcmUgbG9hZGVkIG9uIHRoaXMgc3lzdGVtCisgICAgbXkgJGxzbW9kOworCisgICAgZm9yZWFjaCAkZGlyICggKCIvc2JpbiIsICIvYmluIiwgIi91c3Ivc2JpbiIsICIvdXNyL2JpbiIpICkgeworCWlmICggLXggIiRkaXIvbHNtb2QiICkgeworCSAgICAkbHNtb2QgPSAiJGRpci9sc21vZCI7CisJICAgIGxhc3Q7CisJfQorfQorICAgIGlmICghZGVmaW5lZCgkbHNtb2QpKSB7CisJIyB0cnkganVzdCB0aGUgcGF0aAorCSRsc21vZCA9ICJsc21vZCI7CisgICAgfQorCisgICAgb3BlbihMSU4sIiRsc21vZHwiKSB8fCBkaWUgIkNhbiBub3QgY2FsbCBsc21vZCB3aXRoICRsc21vZCI7Cit9CisKIHdoaWxlICg8TElOPikgewogCW5leHQgaWYgKC9eTW9kdWxlLyk7ICAjIFNraXAgdGhlIGZpcnN0IGxpbmUuCiAJaWYgKC9eKFxTKykvKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tlcm5lbC1kb2MgYi9zY3JpcHRzL2tlcm5lbC1kb2MKaW5kZXggMjQxMzEwZS4uMjA4YWQzYiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9rZXJuZWwtZG9jCisrKyBiL3NjcmlwdHMva2VybmVsLWRvYwpAQCAtMTMsOCArMTMsNiBAQAogIyMgVGhpcyBzb2Z0d2FyZSBmYWxscyB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICAgICAjIwogIyMgUGxlYXNlIHJlYWQgdGhlIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiAgICAgICAgICAgICAjIwogCi0jIHcuby4gMDMtMTEtMjAwMDogYWRkZWQgdGhlICctZmlsZWxpc3QnIG9wdGlvbi4KLQogIyAxOC8wMS8yMDAxIC0gCUNsZWFudXBzCiAjIAkJRnVuY3Rpb25zIHByb3RvdHlwZWQgYXMgZm9vKHZvaWQpIHNhbWUgYXMgZm9vKCkKICMgCQlTdG9wIGV2YWwnaW5nIHdoZXJlIHdlIGRvbid0IG5lZWQgdG8uCkBAIC0yNDUsNyArMjQzLDcgQEAKICMgY291bGQgY2F1c2UgInVzZSBvZiB1bmRlZmluZWQgdmFsdWUiIG9yIG90aGVyIGJ1Z3MuCiBteSAoJGZ1bmN0aW9uLCAlZnVuY3Rpb25fdGFibGUsICVwYXJhbWV0ZXJ0eXBlcywgJGRlY2xhcmF0aW9uX3B1cnBvc2UpOwogbXkgKCR0eXBlLCAkZGVjbGFyYXRpb25fbmFtZSwgJHJldHVybl90eXBlKTsKLW15ICgkbmV3c2VjdGlvbiwgJG5ld2NvbnRlbnRzLCAkcHJvdG90eXBlLCAkZmlsZWxpc3QsICRicmNvdW50LCAlc291cmNlX21hcCk7CitteSAoJG5ld3NlY3Rpb24sICRuZXdjb250ZW50cywgJHByb3RvdHlwZSwgJGJyY291bnQsICVzb3VyY2VfbWFwKTsKIAogaWYgKGRlZmluZWQoJEVOVnsnS0JVSUxEX1ZFUkJPU0UnfSkpIHsKIAkkdmVyYm9zZSA9ICIkRU5WeydLQlVJTERfVkVSQk9TRSd9IjsKQEAgLTMzOCw4ICszMzYsNiBAQAogCSR2ZXJib3NlID0gMTsKICAgICB9IGVsc2lmICgoJGNtZCBlcSAiLWgiKSB8fCAoJGNtZCBlcSAiLS1oZWxwIikpIHsKIAl1c2FnZSgpOwotICAgIH0gZWxzaWYgKCRjbWQgZXEgJy1maWxlbGlzdCcpIHsKLQkgICAgJGZpbGVsaXN0ID0gc2hpZnQgQEFSR1Y7CiAgICAgfSBlbHNpZiAoJGNtZCBlcSAnLW5vLWRvYy1zZWN0aW9ucycpIHsKIAkgICAgJG5vX2RvY19zZWN0aW9ucyA9IDE7CiAgICAgfQpAQCAtMTgxMSwxNCArMTgwNyw2IEBACiAJY2xvc2UoU09VUkNFX01BUCk7CiB9CiAKLWlmICgkZmlsZWxpc3QpIHsKLQlvcGVuKEZMSVNULCI8JGZpbGVsaXN0Iikgb3IgZGllICJDYW4ndCBvcGVuIGZpbGUgbGlzdCAkZmlsZWxpc3QiOwotCXdoaWxlKDxGTElTVD4pIHsKLQkJY2hvcDsKLQkJcHJvY2Vzc19maWxlKCRfKTsKLQl9Ci19Ci0KIGZvcmVhY2ggKEBBUkdWKSB7CiAgICAgY2hvbXA7CiAgICAgcHJvY2Vzc19maWxlKCRfKTsKQEAgLTIwMjMsNiArMjAxMSw4IEBACiAJcmV0dXJuOwogICAgIH0KIAorICAgICQuID0gMTsKKwogICAgICRzZWN0aW9uX2NvdW50ZXIgPSAwOwogICAgIHdoaWxlICg8SU4+KSB7CiAJaWYgKCRzdGF0ZSA9PSAwKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL21hcmt1cF9vb3BzLnBsIGIvc2NyaXB0cy9tYXJrdXBfb29wcy5wbAppbmRleCBjZTNlNDBiLi5lOTUwZjljIDEwMDY0NAotLS0gYS9zY3JpcHRzL21hcmt1cF9vb3BzLnBsCisrKyBiL3NjcmlwdHMvbWFya3VwX29vcHMucGwKQEAgLTE1OCw3ICsxNTgsNyBAQAogCQkkZnVuY3Rpb24gPSAkMTsKIAkJJGZ1bmNfb2Zmc2V0ID0gJDI7CiAJfQotCWlmICgkbGluZSA9fiAvUklQOiAwMDEwOlxbXDxbMC05YS1mXStcPlxdICBcW1w8WzAtOWEtZl0rXD5cXSAoW2EtekEtWjAtOVxfXSspXCsoMHhbMC05YS1mXSspXC8weFthLWYwLTldLykgeworCWlmICgkbGluZSA9fiAvUklQOiAwMDEwOlxbXDxbMC05YS1mXStcPlxdICBcW1w8WzAtOWEtZl0rXD5cXSAoW2EtekEtWjAtOVxfXSspXCsweChbMC05YS1mXSspXC8weFthLWYwLTldLykgewogCQkkZnVuY3Rpb24gPSAkMTsKIAkJJGZ1bmNfb2Zmc2V0ID0gJDI7CiAJfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWNvcmRtY291bnQucGwgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5wbAppbmRleCBlYTZmNmUzLi5mM2M5YzBhIDEwMDc1NQotLS0gYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbAorKysgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5wbApAQCAtMTM2LDEzICsxMzYsMTQgQEAKICAgICAgIi50ZXh0LnVubGlrZWx5IiA9PiAxLAogKTsKIAotJG9iamR1bXAgPSAib2JqZHVtcCIgaWYgKChsZW5ndGggJG9iamR1bXApID09IDApOwotJG9iamNvcHkgPSAib2JqY29weSIgaWYgKChsZW5ndGggJG9iamNvcHkpID09IDApOwotJGNjID0gImdjYyIgaWYgKChsZW5ndGggJGNjKSA9PSAwKTsKLSRsZCA9ICJsZCIgaWYgKChsZW5ndGggJGxkKSA9PSAwKTsKLSRubSA9ICJubSIgaWYgKChsZW5ndGggJG5tKSA9PSAwKTsKLSRybSA9ICJybSIgaWYgKChsZW5ndGggJHJtKSA9PSAwKTsKLSRtdiA9ICJtdiIgaWYgKChsZW5ndGggJG12KSA9PSAwKTsKKyMgTm90ZTogd2UgYXJlIG5pY2UgdG8gQy1wcm9ncmFtbWVycyBoZXJlLCB0aHVzIHdlIHNraXAgdGhlICd8fD0nLWlkaW9tLgorJG9iamR1bXAgPSAnb2JqZHVtcCcgaWYgKCEkb2JqZHVtcCk7Ciskb2JqY29weSA9ICdvYmpjb3B5JyBpZiAoISRvYmpjb3B5KTsKKyRjYyA9ICdnY2MnIGlmICghJGNjKTsKKyRsZCA9ICdsZCcgaWYgKCEkbGQpOworJG5tID0gJ25tJyBpZiAoISRubSk7Ciskcm0gPSAncm0nIGlmICghJHJtKTsKKyRtdiA9ICdtdicgaWYgKCEkbXYpOwogCiAjcHJpbnQgU1RERVJSICJydW5uaW5nOiAkUCAnJGFyY2gnICckb2JqZHVtcCcgJyRvYmpjb3B5JyAnJGNjJyAnJGxkJyAiIC4KICMgICAgIickbm0nICckcm0nICckbXYnICckaW5wdXRmaWxlJ1xuIjsKQEAgLTQzMiwxNCArNDMzLDE0IEBACiAKICAgICAjIExvb3AgdGhyb3VnaCBhbGwgdGhlIG1jb3VudCBjYWxsZXIgb2Zmc2V0cyBhbmQgcHJpbnQgYSByZWZlcmVuY2UKICAgICAjIHRvIHRoZSBjYWxsZXIgYmFzZWQgZnJvbSB0aGUgcmVmX2Z1bmMuCi0gICAgZm9yIChteSAkaT0wOyAkaSA8PSAkI29mZnNldHM7ICRpKyspIHsKLQlpZiAoISRvcGVuZWQpIHsKLQkgICAgb3BlbihGSUxFLCAiPiRtY291bnRfcyIpIHx8IGRpZSAiY2FuJ3QgY3JlYXRlICRtY291bnRfc1xuIjsKLQkgICAgJG9wZW5lZCA9IDE7Ci0JICAgIHByaW50IEZJTEUgIlx0LnNlY3Rpb24gJG1jb3VudF9zZWN0aW9uLFwiYVwiLCRzZWN0aW9uX3R5cGVcbiI7Ci0JICAgIHByaW50IEZJTEUgIlx0LmFsaWduICRhbGlnbm1lbnRcbiIgaWYgKGRlZmluZWQoJGFsaWdubWVudCkpOwotCX0KLQlwcmludGYgRklMRSAiXHQlcyAlcyArICVkXG4iLCAkdHlwZSwgJHJlZl9mdW5jLCAkb2Zmc2V0c1skaV0gLSAkb2Zmc2V0OworICAgIGlmICghJG9wZW5lZCkgeworCW9wZW4oRklMRSwgIj4kbWNvdW50X3MiKSB8fCBkaWUgImNhbid0IGNyZWF0ZSAkbWNvdW50X3NcbiI7CisJJG9wZW5lZCA9IDE7CisJcHJpbnQgRklMRSAiXHQuc2VjdGlvbiAkbWNvdW50X3NlY3Rpb24sXCJhXCIsJHNlY3Rpb25fdHlwZVxuIjsKKwlwcmludCBGSUxFICJcdC5hbGlnbiAkYWxpZ25tZW50XG4iIGlmIChkZWZpbmVkKCRhbGlnbm1lbnQpKTsKKyAgICB9CisgICAgZm9yZWFjaCBteSAkY3VyX29mZnNldCAoQG9mZnNldHMpIHsKKwlwcmludGYgRklMRSAiXHQlcyAlcyArICVkXG4iLCAkdHlwZSwgJHJlZl9mdW5jLCAkY3VyX29mZnNldCAtICRvZmZzZXQ7CiAgICAgfQogfQogCkBAIC00NzYsMTEgKzQ3Nyw3IEBACiAJJHJlYWRfaGVhZGVycyA9IDA7CiAKIAkjIE9ubHkgcmVjb3JkIHRleHQgc2VjdGlvbnMgdGhhdCB3ZSBrbm93IGFyZSBzYWZlCi0JaWYgKGRlZmluZWQoJHRleHRfc2VjdGlvbnN7JDF9KSkgewotCSAgICAkcmVhZF9mdW5jdGlvbiA9IDE7Ci0JfSBlbHNlIHsKLQkgICAgJHJlYWRfZnVuY3Rpb24gPSAwOwotCX0KKwkkcmVhZF9mdW5jdGlvbiA9IGRlZmluZWQoJHRleHRfc2VjdGlvbnN7JDF9KTsKIAkjIHByaW50IG91dCBhbnkgcmVjb3JkZWQgb2Zmc2V0cwogCXVwZGF0ZV9mdW5jcygpOwogCkBAIC01MTQsNyArNTExLDcgQEAKICAgICB9CiAgICAgIyBpcyB0aGlzIGEgY2FsbCBzaXRlIHRvIG1jb3VudD8gSWYgc28sIHJlY29yZCBpdCB0byBwcmludCBsYXRlcgogICAgIGlmICgkdGV4dF9mb3VuZCAmJiAvJG1jb3VudF9yZWdleC8pIHsKLQkkb2Zmc2V0c1skI29mZnNldHMgKyAxXSA9IGhleCAkMTsKKwlwdXNoKEBvZmZzZXRzLCBoZXggJDEpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWEuaCBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hLmgKaW5kZXggYzQxYWZlNi4uNDdmYjY1ZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWEuaAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYS5oCkBAIC02NSw3ICs2NSw2IEBACiAJCQkgY29uc3QgY2hhciAqY2F1c2UsIGludCByZXN1bHQsIGludCBpbmZvKTsKIAogLyogSW50ZXJuYWwgSU1BIGZ1bmN0aW9uIGRlZmluaXRpb25zICovCi12b2lkIGltYV9paW50Y2FjaGVfaW5pdCh2b2lkKTsKIGludCBpbWFfaW5pdCh2b2lkKTsKIHZvaWQgaW1hX2NsZWFudXAodm9pZCk7CiBpbnQgaW1hX2ZzX2luaXQodm9pZCk7CkBAIC0xMzEsNyArMTMwLDcgQEAKIHZvaWQgaWludF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSk7CiAKIC8qIElNQSBwb2xpY3kgcmVsYXRlZCBmdW5jdGlvbnMgKi8KLWVudW0gaW1hX2hvb2tzIHsgUEFUSF9DSEVDSyA9IDEsIEZJTEVfTU1BUCwgQlBSTV9DSEVDSyB9OworZW51bSBpbWFfaG9va3MgeyBGSUxFX0NIRUNLID0gMSwgRklMRV9NTUFQLCBCUFJNX0NIRUNLIH07CiAKIGludCBpbWFfbWF0Y2hfcG9saWN5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gaW1hX2hvb2tzIGZ1bmMsIGludCBtYXNrKTsKIHZvaWQgaW1hX2luaXRfcG9saWN5KHZvaWQpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXBpLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hcGkuYwppbmRleCAzY2Q1OGI2Li4yYTVlMGJjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hcGkuYworKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hcGkuYwpAQCAtOTUsMTIgKzk1LDEyIEBACiAgKiBpbWFfbXVzdF9tZWFzdXJlIC0gbWVhc3VyZSBkZWNpc2lvbiBiYXNlZCBvbiBwb2xpY3kuCiAgKiBAaW5vZGU6IHBvaW50ZXIgdG8gaW5vZGUgdG8gbWVhc3VyZQogICogQG1hc2s6IGNvbnRhaW5zIHRoZSBwZXJtaXNzaW9uIG1hc2sgKE1BWV9SRUFELCBNQVlfV1JJVEUsIE1BWV9FWEVDVVRFKQotICogQGZ1bmN0aW9uOiBjYWxsaW5nIGZ1bmN0aW9uIChQQVRIX0NIRUNLLCBCUFJNX0NIRUNLLCBGSUxFX01NQVApCisgKiBAZnVuY3Rpb246IGNhbGxpbmcgZnVuY3Rpb24gKEZJTEVfQ0hFQ0ssIEJQUk1fQ0hFQ0ssIEZJTEVfTU1BUCkKICAqCiAgKiBUaGUgcG9saWN5IGlzIGRlZmluZWQgaW4gdGVybXMgb2Yga2V5cGFpcnM6CiAgKiAJCXN1Ymo9LCBvYmo9LCB0eXBlPSwgZnVuYz0sIG1hc2s9LCBmc21hZ2ljPQogICoJc3ViaixvYmosIGFuZCB0eXBlOiBhcmUgTFNNIHNwZWNpZmljLgotICogCWZ1bmM6IFBBVEhfQ0hFQ0sgfCBCUFJNX0NIRUNLIHwgRklMRV9NTUFQCisgKiAJZnVuYzogRklMRV9DSEVDSyB8IEJQUk1fQ0hFQ0sgfCBGSUxFX01NQVAKICAqIAltYXNrOiBjb250YWlucyB0aGUgcGVybWlzc2lvbiBtYXNrCiAgKglmc21hZ2ljOiBoZXggdmFsdWUKICAqCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMKaW5kZXggZmE1OTJmZi4uMmQ0ZDA1ZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYwpAQCAtNTIsOSArNTIsNiBAQAogCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCA9IE5VTEw7CiAJaW50IHJjID0gMDsKIAotCWlmICghaW1hX2luaXRpYWxpemVkKQotCQlyZXR1cm4gMDsKLQogCWlpbnQgPSBrbWVtX2NhY2hlX2FsbG9jKGlpbnRfY2FjaGUsIEdGUF9OT0ZTKTsKIAlpZiAoIWlpbnQpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjYsMTIgKzYzLDExIEBACiAJc3Bpbl9sb2NrKCZpbWFfaWludF9sb2NrKTsKIAlyYyA9IHJhZGl4X3RyZWVfaW5zZXJ0KCZpbWFfaWludF9zdG9yZSwgKHVuc2lnbmVkIGxvbmcpaW5vZGUsIGlpbnQpOwogCXNwaW5fdW5sb2NrKCZpbWFfaWludF9sb2NrKTsKKwlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CiBvdXQ6CiAJaWYgKHJjIDwgMCkKIAkJa21lbV9jYWNoZV9mcmVlKGlpbnRfY2FjaGUsIGlpbnQpOwogCi0JcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwotCiAJcmV0dXJuIHJjOwogfQogCkBAIC0xMTgsOCArMTE0LDYgQEAKIHsKIAlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CiAKLQlpZiAoIWltYV9pbml0aWFsaXplZCkKLQkJcmV0dXJuOwogCXNwaW5fbG9jaygmaW1hX2lpbnRfbG9jayk7CiAJaWludCA9IHJhZGl4X3RyZWVfZGVsZXRlKCZpbWFfaWludF9zdG9yZSwgKHVuc2lnbmVkIGxvbmcpaW5vZGUpOwogCXNwaW5fdW5sb2NrKCZpbWFfaWludF9sb2NrKTsKQEAgLTE0MSw5ICsxMzUsMTEgQEAKIAlrcmVmX3NldCgmaWludC0+cmVmY291bnQsIDEpOwogfQogCi12b2lkIF9faW5pdCBpbWFfaWludGNhY2hlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGltYV9paW50Y2FjaGVfaW5pdCh2b2lkKQogewogCWlpbnRfY2FjaGUgPQogCSAgICBrbWVtX2NhY2hlX2NyZWF0ZSgiaWludF9jYWNoZSIsIHNpemVvZihzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUpLCAwLAogCQkJICAgICAgU0xBQl9QQU5JQywgaW5pdF9vbmNlKTsKKwlyZXR1cm4gMDsKIH0KK3NlY3VyaXR5X2luaXRjYWxsKGltYV9paW50Y2FjaGVfaW5pdCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMKaW5kZXggYTg5ZjQ0ZC4uMjk0YjAwNSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYwpAQCAtMTQsNyArMTQsNyBAQAogICoKICAqIEZpbGU6IGltYV9tYWluLmMKICAqCWltcGxlbWVudHMgdGhlIElNQSBob29rczogaW1hX2Jwcm1fY2hlY2ssIGltYV9maWxlX21tYXAsCi0gKglhbmQgaW1hX3BhdGhfY2hlY2suCisgKglhbmQgaW1hX2ZpbGVfY2hlY2suCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CkBAIC04NCw2ICs4NCwzNiBAQAogCXJldHVybiBmb3VuZDsKIH0KIAorLyogaW1hX3JlYWRfd3JpdGVfY2hlY2sgLSByZWZsZWN0IHBvc3NpYmxlIHJlYWRpbmcvd3JpdGluZyBlcnJvcnMgaW4gdGhlIFBDUi4KKyAqCisgKiBXaGVuIG9wZW5pbmcgYSBmaWxlIGZvciByZWFkLCBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IG9wZW4gZm9yIHdyaXRlLAorICogdGhlIGZpbGUgY291bGQgY2hhbmdlLCByZXN1bHRpbmcgaW4gYSBmaWxlIG1lYXN1cmVtZW50IGVycm9yLgorICoKKyAqIE9wZW5pbmcgYSBmaWxlIGZvciB3cml0ZSwgaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBvcGVuIGZvciByZWFkLCByZXN1bHRzCisgKiBpbiBhIHRpbWUgb2YgbWVhc3VyZSwgdGltZSBvZiB1c2UgKFRvTVRvVSkgZXJyb3IuCisgKgorICogSW4gZWl0aGVyIGNhc2UgaW52YWxpZGF0ZSB0aGUgUENSLgorICovCitlbnVtIGlpbnRfcGNyX2Vycm9yIHsgVE9NVE9VLCBPUEVOX1dSSVRFUlMgfTsKK3N0YXRpYyB2b2lkIGltYV9yZWFkX3dyaXRlX2NoZWNrKGVudW0gaWludF9wY3JfZXJyb3IgZXJyb3IsCisJCQkJIHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwKKwkJCQkgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUpCit7CisJc3dpdGNoIChlcnJvcikgeworCWNhc2UgVE9NVE9VOgorCQlpZiAoaWludC0+cmVhZGNvdW50ID4gMCkKKwkJCWltYV9hZGRfdmlvbGF0aW9uKGlub2RlLCBmaWxlbmFtZSwgImludmFsaWRfcGNyIiwKKwkJCQkJICAiVG9NVG9VIik7CisJCWJyZWFrOworCWNhc2UgT1BFTl9XUklURVJTOgorCQlpZiAoaWludC0+d3JpdGVjb3VudCA+IDApCisJCQlpbWFfYWRkX3Zpb2xhdGlvbihpbm9kZSwgZmlsZW5hbWUsICJpbnZhbGlkX3BjciIsCisJCQkJCSAgIm9wZW5fd3JpdGVycyIpOworCQlicmVhazsKKwl9Cit9CisKIC8qCiAgKiBVcGRhdGUgdGhlIGNvdW50cyBnaXZlbiBhbiBmbW9kZV90CiAgKi8KQEAgLTk5LDYgKzEyOSw0NyBAQAogfQogCiAvKgorICogaW1hX2NvdW50c19nZXQgLSBpbmNyZW1lbnQgZmlsZSBjb3VudHMKKyAqCisgKiBNYWludGFpbiByZWFkL3dyaXRlIGNvdW50ZXJzIGZvciBhbGwgZmlsZXMsIGJ1dCBvbmx5CisgKiBpbnZhbGlkYXRlIHRoZSBQQ1IgZm9yIG1lYXN1cmVkIGZpbGVzOgorICogCS0gT3BlbmluZyBhIGZpbGUgZm9yIHdyaXRlIHdoZW4gYWxyZWFkeSBvcGVuIGZvciByZWFkLAorICoJICByZXN1bHRzIGluIGEgdGltZSBvZiBtZWFzdXJlLCB0aW1lIG9mIHVzZSAoVG9NVG9VKSBlcnJvci4KKyAqCS0gT3BlbmluZyBhIGZpbGUgZm9yIHJlYWQgd2hlbiBhbHJlYWR5IG9wZW4gZm9yIHdyaXRlLAorICogCSAgY291bGQgcmVzdWx0IGluIGEgZmlsZSBtZWFzdXJlbWVudCBlcnJvci4KKyAqCisgKi8KK3ZvaWQgaW1hX2NvdW50c19nZXQoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCWZtb2RlX3QgbW9kZSA9IGZpbGUtPmZfbW9kZTsKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CisJaW50IHJjOworCisJaWYgKCFpbWFfaW5pdGlhbGl6ZWQgfHwgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybjsKKwlpaW50ID0gaW1hX2lpbnRfZmluZF9nZXQoaW5vZGUpOworCWlmICghaWludCkKKwkJcmV0dXJuOworCW11dGV4X2xvY2soJmlpbnQtPm11dGV4KTsKKwlyYyA9IGltYV9tdXN0X21lYXN1cmUoaWludCwgaW5vZGUsIE1BWV9SRUFELCBGSUxFX0NIRUNLKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsKKworCWlmIChtb2RlICYgRk1PREVfV1JJVEUpIHsKKwkJaW1hX3JlYWRfd3JpdGVfY2hlY2soVE9NVE9VLCBpaW50LCBpbm9kZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwlpbWFfcmVhZF93cml0ZV9jaGVjayhPUEVOX1dSSVRFUlMsIGlpbnQsIGlub2RlLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKK291dDoKKwlpbWFfaW5jX2NvdW50cyhpaW50LCBmaWxlLT5mX21vZGUpOworCW11dGV4X3VubG9jaygmaWludC0+bXV0ZXgpOworCisJa3JlZl9wdXQoJmlpbnQtPnJlZmNvdW50LCBpaW50X2ZyZWUpOworfQorCisvKgogICogRGVjcmVtZW50IGltYSBjb3VudHMKICAqLwogc3RhdGljIHZvaWQgaW1hX2RlY19jb3VudHMoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLApAQCAtMTUzLDEyMyArMjI0LDYgQEAKIAlrcmVmX3B1dCgmaWludC0+cmVmY291bnQsIGlpbnRfZnJlZSk7CiB9CiAKLS8qIGltYV9yZWFkX3dyaXRlX2NoZWNrIC0gcmVmbGVjdCBwb3NzaWJsZSByZWFkaW5nL3dyaXRpbmcgZXJyb3JzIGluIHRoZSBQQ1IuCi0gKgotICogV2hlbiBvcGVuaW5nIGEgZmlsZSBmb3IgcmVhZCwgaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBvcGVuIGZvciB3cml0ZSwKLSAqIHRoZSBmaWxlIGNvdWxkIGNoYW5nZSwgcmVzdWx0aW5nIGluIGEgZmlsZSBtZWFzdXJlbWVudCBlcnJvci4KLSAqCi0gKiBPcGVuaW5nIGEgZmlsZSBmb3Igd3JpdGUsIGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgb3BlbiBmb3IgcmVhZCwgcmVzdWx0cwotICogaW4gYSB0aW1lIG9mIG1lYXN1cmUsIHRpbWUgb2YgdXNlIChUb01Ub1UpIGVycm9yLgotICoKLSAqIEluIGVpdGhlciBjYXNlIGludmFsaWRhdGUgdGhlIFBDUi4KLSAqLwotZW51bSBpaW50X3Bjcl9lcnJvciB7IFRPTVRPVSwgT1BFTl9XUklURVJTIH07Ci1zdGF0aWMgdm9pZCBpbWFfcmVhZF93cml0ZV9jaGVjayhlbnVtIGlpbnRfcGNyX2Vycm9yIGVycm9yLAotCQkJCSBzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsCi0JCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lKQotewotCXN3aXRjaCAoZXJyb3IpIHsKLQljYXNlIFRPTVRPVToKLQkJaWYgKGlpbnQtPnJlYWRjb3VudCA+IDApCi0JCQlpbWFfYWRkX3Zpb2xhdGlvbihpbm9kZSwgZmlsZW5hbWUsICJpbnZhbGlkX3BjciIsCi0JCQkJCSAgIlRvTVRvVSIpOwotCQlicmVhazsKLQljYXNlIE9QRU5fV1JJVEVSUzoKLQkJaWYgKGlpbnQtPndyaXRlY291bnQgPiAwKQotCQkJaW1hX2FkZF92aW9sYXRpb24oaW5vZGUsIGZpbGVuYW1lLCAiaW52YWxpZF9wY3IiLAotCQkJCQkgICJvcGVuX3dyaXRlcnMiKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgaW50IGdldF9wYXRoX21lYXN1cmVtZW50KHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUpCi17Ci0JaW50IHJjID0gMDsKLQotCWltYV9pbmNfY291bnRzKGlpbnQsIGZpbGUtPmZfbW9kZSk7Ci0KLQlyYyA9IGltYV9jb2xsZWN0X21lYXN1cmVtZW50KGlpbnQsIGZpbGUpOwotCWlmICghcmMpCi0JCWltYV9zdG9yZV9tZWFzdXJlbWVudChpaW50LCBmaWxlLCBmaWxlbmFtZSk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGltYV9wYXRoX2NoZWNrIC0gYmFzZWQgb24gcG9saWN5LCBjb2xsZWN0L3N0b3JlIG1lYXN1cmVtZW50LgotICogQHBhdGg6IGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgcGF0aCB0byBiZSBtZWFzdXJlZAotICogQG1hc2s6IGNvbnRhaW5zIE1BWV9SRUFELCBNQVlfV1JJVEUgb3IgTUFZX0VYRUNVVEUKLSAqCi0gKiBNZWFzdXJlIHRoZSBmaWxlIGJlaW5nIG9wZW4gZm9yIHJlYWRvbmx5LCBiYXNlZCBvbiB0aGUKLSAqIGltYV9tdXN0X21lYXN1cmUoKSBwb2xpY3kgZGVjaXNpb24uCi0gKgotICogS2VlcCByZWFkL3dyaXRlIGNvdW50ZXJzIGZvciBhbGwgZmlsZXMsIGJ1dCBvbmx5Ci0gKiBpbnZhbGlkYXRlIHRoZSBQQ1IgZm9yIG1lYXN1cmVkIGZpbGVzOgotICogCS0gT3BlbmluZyBhIGZpbGUgZm9yIHdyaXRlIHdoZW4gYWxyZWFkeSBvcGVuIGZvciByZWFkLAotICoJICByZXN1bHRzIGluIGEgdGltZSBvZiBtZWFzdXJlLCB0aW1lIG9mIHVzZSAoVG9NVG9VKSBlcnJvci4KLSAqCS0gT3BlbmluZyBhIGZpbGUgZm9yIHJlYWQgd2hlbiBhbHJlYWR5IG9wZW4gZm9yIHdyaXRlLAotICogCSAgY291bGQgcmVzdWx0IGluIGEgZmlsZSBtZWFzdXJlbWVudCBlcnJvci4KLSAqCi0gKiBBbHdheXMgcmV0dXJuIDAgYW5kIGF1ZGl0IGRlbnRyeV9vcGVuIGZhaWx1cmVzLgotICogKFJldHVybiBjb2RlIHdpbGwgYmUgYmFzZWQgdXBvbiBtZWFzdXJlbWVudCBhcHByYWlzYWwuKQotICovCi1pbnQgaW1hX3BhdGhfY2hlY2soc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYXRoLT5kZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OwotCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKLQlpbnQgcmM7Ci0KLQlpZiAoIWltYV9pbml0aWFsaXplZCB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKLQkJcmV0dXJuIDA7Ci0JaWludCA9IGltYV9paW50X2ZpbmRfZ2V0KGlub2RlKTsKLQlpZiAoIWlpbnQpCi0JCXJldHVybiAwOwotCi0JbXV0ZXhfbG9jaygmaWludC0+bXV0ZXgpOwotCi0JcmMgPSBpbWFfbXVzdF9tZWFzdXJlKGlpbnQsIGlub2RlLCBNQVlfUkVBRCwgUEFUSF9DSEVDSyk7Ci0JaWYgKHJjIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoKG1hc2sgJiBNQVlfV1JJVEUpIHx8IChtYXNrID09IDApKQotCQlpbWFfcmVhZF93cml0ZV9jaGVjayhUT01UT1UsIGlpbnQsIGlub2RlLAotCQkJCSAgICAgcGF0aC0+ZGVudHJ5LT5kX25hbWUubmFtZSk7Ci0KLQlpZiAoKG1hc2sgJiAoTUFZX1dSSVRFIHwgTUFZX1JFQUQgfCBNQVlfRVhFQykpICE9IE1BWV9SRUFEKQotCQlnb3RvIG91dDsKLQotCWltYV9yZWFkX3dyaXRlX2NoZWNrKE9QRU5fV1JJVEVSUywgaWludCwgaW5vZGUsCi0JCQkgICAgIHBhdGgtPmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCWlmICghKGlpbnQtPmZsYWdzICYgSU1BX01FQVNVUkVEKSkgewotCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBkZ2V0KHBhdGgtPmRlbnRyeSk7Ci0JCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gbW50Z2V0KHBhdGgtPm1udCk7Ci0KLQkJZmlsZSA9IGRlbnRyeV9vcGVuKGRlbnRyeSwgbW50LCBPX1JET05MWSB8IE9fTEFSR0VGSUxFLAotCQkJCSAgIGN1cnJlbnRfY3JlZCgpKTsKLQkJaWYgKElTX0VSUihmaWxlKSkgewotCQkJaW50IGF1ZGl0X2luZm8gPSAwOwotCi0JCQlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9QQ1IsIGlub2RlLAotCQkJCQkgICAgZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkJICAgICJhZGRfbWVhc3VyZW1lbnQiLAotCQkJCQkgICAgImRlbnRyeV9vcGVuIGZhaWxlZCIsCi0JCQkJCSAgICAxLCBhdWRpdF9pbmZvKTsKLQkJCWZpbGUgPSBOVUxMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJcmMgPSBnZXRfcGF0aF9tZWFzdXJlbWVudChpaW50LCBmaWxlLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKLQl9Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpaW50LT5tdXRleCk7Ci0JaWYgKGZpbGUpCi0JCWZwdXQoZmlsZSk7Ci0Ja3JlZl9wdXQoJmlpbnQtPnJlZmNvdW50LCBpaW50X2ZyZWUpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaW1hX3BhdGhfY2hlY2spOwotCiBzdGF0aWMgaW50IHByb2Nlc3NfbWVhc3VyZW1lbnQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lLAogCQkJICAgICAgIGludCBtYXNrLCBpbnQgZnVuY3Rpb24pCiB7CkBAIC0yOTcsMzMgKzI1MSw2IEBACiAJcmV0dXJuIHJjOwogfQogCi0vKgotICogaW1hX2NvdW50c19nZXQgLSBpbmNyZW1lbnQgZmlsZSBjb3VudHMKLSAqCi0gKiAtIGZvciBJUEMgc2htIGFuZCBzaG1hdCBmaWxlLgotICogLSBmb3IgbmZzZCBleHBvcnRlZCBmaWxlcy4KLSAqCi0gKiBJbmNyZW1lbnQgdGhlIGNvdW50cyBmb3IgdGhlc2UgZmlsZXMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeQotICogaW1iYWxhbmNlIG1lc3NhZ2VzLgotICovCi12b2lkIGltYV9jb3VudHNfZ2V0KHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7Ci0KLQlpZiAoIWltYV9pbml0aWFsaXplZCB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKLQkJcmV0dXJuOwotCWlpbnQgPSBpbWFfaWludF9maW5kX2dldChpbm9kZSk7Ci0JaWYgKCFpaW50KQotCQlyZXR1cm47Ci0JbXV0ZXhfbG9jaygmaWludC0+bXV0ZXgpOwotCWltYV9pbmNfY291bnRzKGlpbnQsIGZpbGUtPmZfbW9kZSk7Ci0JbXV0ZXhfdW5sb2NrKCZpaW50LT5tdXRleCk7Ci0KLQlrcmVmX3B1dCgmaWludC0+cmVmY291bnQsIGlpbnRfZnJlZSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpbWFfY291bnRzX2dldCk7Ci0KIC8qKgogICogaW1hX2ZpbGVfbW1hcCAtIGJhc2VkIG9uIHBvbGljeSwgY29sbGVjdC9zdG9yZSBtZWFzdXJlbWVudC4KICAqIEBmaWxlOiBwb2ludGVyIHRvIHRoZSBmaWxlIHRvIGJlIG1lYXN1cmVkIChNYXkgYmUgTlVMTCkKQEAgLTM2OSwxMSArMjk2LDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogaW1hX3BhdGhfY2hlY2sgLSBiYXNlZCBvbiBwb2xpY3ksIGNvbGxlY3Qvc3RvcmUgbWVhc3VyZW1lbnQuCisgKiBAZmlsZTogcG9pbnRlciB0byB0aGUgZmlsZSB0byBiZSBtZWFzdXJlZAorICogQG1hc2s6IGNvbnRhaW5zIE1BWV9SRUFELCBNQVlfV1JJVEUgb3IgTUFZX0VYRUNVVEUKKyAqCisgKiBNZWFzdXJlIGZpbGVzIGJhc2VkIG9uIHRoZSBpbWFfbXVzdF9tZWFzdXJlKCkgcG9saWN5IGRlY2lzaW9uLgorICoKKyAqIEFsd2F5cyByZXR1cm4gMCBhbmQgYXVkaXQgZGVudHJ5X29wZW4gZmFpbHVyZXMuCisgKiAoUmV0dXJuIGNvZGUgd2lsbCBiZSBiYXNlZCB1cG9uIG1lYXN1cmVtZW50IGFwcHJhaXNhbC4pCisgKi8KK2ludCBpbWFfZmlsZV9jaGVjayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1hc2spCit7CisJaW50IHJjOworCisJcmMgPSBwcm9jZXNzX21lYXN1cmVtZW50KGZpbGUsIGZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCQkgbWFzayAmIChNQVlfUkVBRCB8IE1BWV9XUklURSB8IE1BWV9FWEVDKSwKKwkJCQkgRklMRV9DSEVDSyk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbWFfZmlsZV9jaGVjayk7CisKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfaW1hKHZvaWQpCiB7CiAJaW50IGVycm9yOwogCi0JaW1hX2lpbnRjYWNoZV9pbml0KCk7CiAJZXJyb3IgPSBpbWFfaW5pdCgpOwogCWltYV9pbml0aWFsaXplZCA9IDE7CiAJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9wb2xpY3kuYwppbmRleCBlMTI3ODM5Li40NzU5ZDBmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9wb2xpY3kuYworKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9wb2xpY3kuYwpAQCAtNjcsNyArNjcsNyBAQAogCSAuZmxhZ3MgPSBJTUFfRlVOQyB8IElNQV9NQVNLfSwKIAl7LmFjdGlvbiA9IE1FQVNVUkUsLmZ1bmMgPSBCUFJNX0NIRUNLLC5tYXNrID0gTUFZX0VYRUMsCiAJIC5mbGFncyA9IElNQV9GVU5DIHwgSU1BX01BU0t9LAotCXsuYWN0aW9uID0gTUVBU1VSRSwuZnVuYyA9IFBBVEhfQ0hFQ0ssLm1hc2sgPSBNQVlfUkVBRCwudWlkID0gMCwKKwl7LmFjdGlvbiA9IE1FQVNVUkUsLmZ1bmMgPSBGSUxFX0NIRUNLLC5tYXNrID0gTUFZX1JFQUQsLnVpZCA9IDAsCiAJIC5mbGFncyA9IElNQV9GVU5DIHwgSU1BX01BU0sgfCBJTUFfVUlEfSwKIH07CiAKQEAgLTI4Miw4ICsyODIsMTEgQEAKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9mdW5jOgogCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgImZ1bmM9JXMgIiwgYXJnc1swXS5mcm9tKTsKLQkJCWlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiUEFUSF9DSEVDSyIpID09IDApCi0JCQkJZW50cnktPmZ1bmMgPSBQQVRIX0NIRUNLOworCQkJaWYgKHN0cmNtcChhcmdzWzBdLmZyb20sICJGSUxFX0NIRUNLIikgPT0gMCkKKwkJCQllbnRyeS0+ZnVuYyA9IEZJTEVfQ0hFQ0s7CisJCQkvKiBQQVRIX0NIRUNLIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0ICovCisJCQllbHNlIGlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiUEFUSF9DSEVDSyIpID09IDApCisJCQkJZW50cnktPmZ1bmMgPSBGSUxFX0NIRUNLOwogCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIkZJTEVfTU1BUCIpID09IDApCiAJCQkJZW50cnktPmZ1bmMgPSBGSUxFX01NQVA7CiAJCQllbHNlIGlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiQlBSTV9DSEVDSyIpID09IDApCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2djLmMgYi9zZWN1cml0eS9rZXlzL2djLmMKaW5kZXggNDc3MGJlMy4uMTk5MDIzMSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9nYy5jCisrKyBiL3NlY3VyaXR5L2tleXMvZ2MuYwpAQCAtNzcsNyArNzcsOCBAQAogCQlnb3RvIGRvbnRfZ2M7CiAKIAkvKiBzY2FuIHRoZSBrZXlyaW5nIGxvb2tpbmcgZm9yIGRlYWQga2V5cyAqLwotCWtsaXN0ID0gcmN1X2RlcmVmZXJlbmNlKGtleXJpbmctPnBheWxvYWQuc3Vic2NyaXB0aW9ucyk7CisJa2xpc3QgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soa2V5cmluZy0+cGF5bG9hZC5zdWJzY3JpcHRpb25zLAorCQkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgma2V5X3NlcmlhbF9sb2NrKSk7CiAJaWYgKCFrbGlzdCkKIAkJZ290byBkb250X2djOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCmluZGV4IDhlYzAyNzQuLmU4MTRkMjEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCkBAIC0xNTEsNyArMTUxLDkgQEAKIAkJd3JpdGVfdW5sb2NrKCZrZXlyaW5nX25hbWVfbG9jayk7CiAJfQogCi0Ja2xpc3QgPSByY3VfZGVyZWZlcmVuY2Uoa2V5cmluZy0+cGF5bG9hZC5zdWJzY3JpcHRpb25zKTsKKwlrbGlzdCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhrZXlyaW5nLT5wYXlsb2FkLnN1YnNjcmlwdGlvbnMsCisJCQkJICAgICAgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwKKwkJCQkgICAgICBhdG9taWNfcmVhZCgma2V5cmluZy0+dXNhZ2UpID09IDApOwogCWlmIChrbGlzdCkgewogCQlmb3IgKGxvb3AgPSBrbGlzdC0+bmtleXMgLSAxOyBsb29wID49IDA7IGxvb3AtLSkKIAkJCWtleV9wdXQoa2xpc3QtPmtleXNbbG9vcF0pOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKaW5kZXggMjRlMDYwYi4uMTIyYjc0OCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuYworKysgYi9zZWN1cml0eS9zZWN1cml0eS5jCkBAIC02NjYsOCArNjY2LDYgQEAKIHZvaWQgc2VjdXJpdHlfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKQogewogCXNlY3VyaXR5X29wcy0+ZmlsZV9mcmVlX3NlY3VyaXR5KGZpbGUpOwotCWlmIChmaWxlLT5mX2RlbnRyeSkKLQkJaW1hX2ZpbGVfZnJlZShmaWxlKTsKIH0KIAogaW50IHNlY3VyaXR5X2ZpbGVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9lYml0bWFwLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYwppbmRleCA2OGM3MzQ4Li4wNGI2MTQ1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJCQljbWFwX2lkeCA9IGRlbHRhIC8gTkVUTEJMX0NBVE1BUF9NQVBTSVpFOwogCQkJY21hcF9zZnQgPSBkZWx0YSAlIE5FVExCTF9DQVRNQVBfTUFQU0laRTsKIAkJCWNfaXRlci0+Yml0bWFwW2NtYXBfaWR4XQotCQkJCXw9IGVfaXRlci0+bWFwc1tjbWFwX2lkeF0gPDwgY21hcF9zZnQ7CisJCQkJfD0gZV9pdGVyLT5tYXBzW2ldIDw8IGNtYXBfc2Z0OwogCQl9CiAJCWVfaXRlciA9IGVfaXRlci0+bmV4dDsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYyBiL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jCmluZGV4IDU4Njk2NWYuLjdhNDM3ZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jCisrKyBiL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jCkBAIC03NjgsNyArNzY4LDcgQEAKIAkJCQkicmVxdWlyZWQgcHJvcGVydHkgJXMgbm90IHByZXNlbnRcbiIsIHByb3BuYW1lKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JCWlmICgqcmVmICE9IGNvZGVjLT5ub2RlLT5saW51eF9waGFuZGxlKSB7CisJCWlmICgqcmVmICE9IGNvZGVjLT5ub2RlLT5waGFuZGxlKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJzbmQtYW9hLWZhYnJpYy1sYXlvdXQ6ICIKIAkJCQkiJXMgZG9lc24ndCBtYXRjaCFcbiIsIHByb3BuYW1lKTsKIAkJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9jb250cm9sLmMgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwppbmRleCAyNjhhYjc0Li40MzljZTY0IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2NvbnRyb2wuYworKysgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwpAQCAtMjM3LDggKzIzNyw5IEBACiAJYWNjZXNzID0gbmNvbnRyb2wtPmFjY2VzcyA9PSAwID8gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSA6CiAJCSAobmNvbnRyb2wtPmFjY2VzcyAmIChTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFfAogCQkJCSAgICAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRXwKLQkJIAkJICAgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEV1JJVEV8Ci0JCSAJCSAgICAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ0FMTEJBQ0spKTsKKwkJCQkgICAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQURXUklURXwKKwkJCQkgICAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX0NPTU1BTkR8CisJCQkJICAgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DQUxMQkFDSykpOwogCWtjdGwuaW5mbyA9IG5jb250cm9sLT5pbmZvOwogCWtjdGwuZ2V0ID0gbmNvbnRyb2wtPmdldDsKIAlrY3RsLnB1dCA9IG5jb250cm9sLT5wdXQ7CkBAIC0xMDk5LDcgKzExMDAsNyBAQAogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bHYsIF90bHYsIHNpemVvZih0bHYpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKHRsdi5sZW5ndGggPCBzaXplb2YodW5zaWduZWQgaW50KSAqIDMpCisJaWYgKHRsdi5sZW5ndGggPCBzaXplb2YodW5zaWduZWQgaW50KSAqIDIpCiAJCXJldHVybiAtRUlOVkFMOwogCWRvd25fcmVhZCgmY2FyZC0+Y29udHJvbHNfcndzZW0pOwogCWtjdGwgPSBzbmRfY3RsX2ZpbmRfbnVtaWQoY2FyZCwgdGx2Lm51bWlkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvbWlzYy5jIGIvc291bmQvY29yZS9taXNjLmMKaW5kZXggMjNhMDMyYy4uM2RhNGY5MiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9taXNjLmMKKysrIGIvc291bmQvY29yZS9taXNjLmMKQEAgLTEwMSw2ICsxMDEsMzUgQEAKICNpZmRlZiBDT05GSUdfUENJCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAvKioKKyAqIHNuZF9wY2lfcXVpcmtfbG9va3VwX2lkIC0gbG9vayB1cCBhIFBDSSBTU0lEIHF1aXJrIGxpc3QKKyAqIEB2ZW5kb3I6IFBDSSBTU1YgaWQKKyAqIEBkZXZpY2U6IFBDSSBTU0QgaWQKKyAqIEBsaXN0OiBxdWlyayBsaXN0LCB0ZXJtaW5hdGVkIGJ5IGEgbnVsbCBlbnRyeQorICoKKyAqIExvb2sgdGhyb3VnaCB0aGUgZ2l2ZW4gcXVpcmsgbGlzdCBhbmQgZmluZHMgYSBtYXRjaGluZyBlbnRyeQorICogd2l0aCB0aGUgc2FtZSBQQ0kgU1NJRC4gIFdoZW4gc3ViZGV2aWNlIGlzIDAsIGFsbCBzdWJkZXZpY2UKKyAqIHZhbHVlcyBtYXkgbWF0Y2guCisgKgorICogUmV0dXJucyB0aGUgbWF0Y2hlZCBlbnRyeSBwb2ludGVyLCBvciBOVUxMIGlmIG5vdGhpbmcgbWF0Y2hlZC4KKyAqLworY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKgorc25kX3BjaV9xdWlya19sb29rdXBfaWQodTE2IHZlbmRvciwgdTE2IGRldmljZSwKKwkJCWNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpsaXN0KQoreworCWNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpxOworCisJZm9yIChxID0gbGlzdDsgcS0+c3VidmVuZG9yOyBxKyspIHsKKwkJaWYgKHEtPnN1YnZlbmRvciAhPSB2ZW5kb3IpCisJCQljb250aW51ZTsKKwkJaWYgKCFxLT5zdWJkZXZpY2UgfHwKKwkJICAgIChkZXZpY2UgJiBxLT5zdWJkZXZpY2VfbWFzaykgPT0gcS0+c3ViZGV2aWNlKQorCQkJcmV0dXJuIHE7CisJfQorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChzbmRfcGNpX3F1aXJrX2xvb2t1cF9pZCk7CisKKy8qKgogICogc25kX3BjaV9xdWlya19sb29rdXAgLSBsb29rIHVwIGEgUENJIFNTSUQgcXVpcmsgbGlzdAogICogQHBjaTogcGNpX2RldiBoYW5kbGUKICAqIEBsaXN0OiBxdWlyayBsaXN0LCB0ZXJtaW5hdGVkIGJ5IGEgbnVsbCBlbnRyeQpAQCAtMTE0LDE2ICsxNDMsOSBAQAogY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKgogc25kX3BjaV9xdWlya19sb29rdXAoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKmxpc3QpCiB7Ci0JY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKnE7Ci0KLQlmb3IgKHEgPSBsaXN0OyBxLT5zdWJ2ZW5kb3I7IHErKykgewotCQlpZiAocS0+c3VidmVuZG9yICE9IHBjaS0+c3Vic3lzdGVtX3ZlbmRvcikKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXEtPnN1YmRldmljZSB8fAotCQkgICAgKHBjaS0+c3Vic3lzdGVtX2RldmljZSAmIHEtPnN1YmRldmljZV9tYXNrKSA9PSBxLT5zdWJkZXZpY2UpCi0JCQlyZXR1cm4gcTsKLQl9Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHNuZF9wY2lfcXVpcmtfbG9va3VwX2lkKHBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKKwkJCQkgICAgICAgcGNpLT5zdWJzeXN0ZW1fZGV2aWNlLAorCQkJCSAgICAgICBsaXN0KTsKIH0KIEVYUE9SVF9TWU1CT0woc25kX3BjaV9xdWlya19sb29rdXApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKaW5kZXggZDljOTYzNS4uODJkNGUzMyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwpAQCAtNjMyLDYgKzYzMiwxMiBAQAogCXJldHVybiBieXRlc190b19mcmFtZXMocnVudGltZSwgKGJ1ZmZlcl9zaXplICogYnl0ZXMpIC8gcnVudGltZS0+b3NzLmJ1ZmZlcl9ieXRlcyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUKK3NuZF9wY21fdWZyYW1lc190IGdldF9od19wdHJfcGVyaW9kKHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCit7CisJcmV0dXJuIHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQ7Cit9CisKIC8qIGRlZmluZSBleHRlbmRlZCBmb3JtYXRzIGluIHRoZSByZWNlbnQgT1NTIHZlcnNpb25zIChpZiBhbnkpICovCiAvKiBsaW5lYXIgZm9ybWF0cyAqLwogI2RlZmluZSBBRk1UX1MzMl9MRSAgICAgIDB4MDAwMDEwMDAKQEAgLTExMDIsNyArMTEwOCw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCXJ1bnRpbWUtPm9zcy5wcmVwYXJlID0gMDsKLQlydW50aW1lLT5vc3MucHJldl9od19wdHJfaW50ZXJydXB0ID0gMDsKKwlydW50aW1lLT5vc3MucHJldl9od19wdHJfcGVyaW9kID0gMDsKIAlydW50aW1lLT5vc3MucGVyaW9kX3B0ciA9IDA7CiAJcnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkID0gMDsKIApAQCAtMTk1MCw3ICsxOTU2LDggQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBzbmRfcGNtX29zc19zaW11bGF0ZV9maWxsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzbmRfcGNtX3VmcmFtZXNfdCBod19wdHIpCitzdGF0aWMgdm9pZCBzbmRfcGNtX29zc19zaW11bGF0ZV9maWxsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgIHNuZF9wY21fdWZyYW1lc190IGh3X3B0cikKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXNuZF9wY21fdWZyYW1lc190IGFwcGxfcHRyOwpAQCAtMTk4Niw3ICsxOTkzLDggQEAKIAkJCWlmIChydW50aW1lLT5vc3MudHJpZ2dlcikKIAkJCQlnb3RvIF9za2lwMTsKIAkJCWlmIChhdG9taWNfcmVhZCgmcHN1YnN0cmVhbS0+bW1hcF9jb3VudCkpCi0JCQkJc25kX3BjbV9vc3Nfc2ltdWxhdGVfZmlsbChwc3Vic3RyZWFtLCBydW50aW1lLT5od19wdHJfaW50ZXJydXB0KTsKKwkJCQlzbmRfcGNtX29zc19zaW11bGF0ZV9maWxsKHBzdWJzdHJlYW0sCisJCQkJCQlnZXRfaHdfcHRyX3BlcmlvZChydW50aW1lKSk7CiAJCQlydW50aW1lLT5vc3MudHJpZ2dlciA9IDE7CiAJCQlydW50aW1lLT5zdGFydF90aHJlc2hvbGQgPSAxOwogCQkJY21kID0gU05EUlZfUENNX0lPQ1RMX1NUQVJUOwpAQCAtMjEwNSwxMSArMjExMywxMiBAQAogCWluZm8ucHRyID0gc25kX3BjbV9vc3NfYnl0ZXMoc3Vic3RyZWFtLCBydW50aW1lLT5zdGF0dXMtPmh3X3B0ciAlIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTsKIAlpZiAoYXRvbWljX3JlYWQoJnN1YnN0cmVhbS0+bW1hcF9jb3VudCkpIHsKIAkJc25kX3BjbV9zZnJhbWVzX3QgbjsKLQkJbiA9IChkZWxheSA9IHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQpIC0gcnVudGltZS0+b3NzLnByZXZfaHdfcHRyX2ludGVycnVwdDsKKwkJZGVsYXkgPSBnZXRfaHdfcHRyX3BlcmlvZChydW50aW1lKTsKKwkJbiA9IGRlbGF5IC0gcnVudGltZS0+b3NzLnByZXZfaHdfcHRyX3BlcmlvZDsKIAkJaWYgKG4gPCAwKQogCQkJbiArPSBydW50aW1lLT5ib3VuZGFyeTsKIAkJaW5mby5ibG9ja3MgPSBuIC8gcnVudGltZS0+cGVyaW9kX3NpemU7Ci0JCXJ1bnRpbWUtPm9zcy5wcmV2X2h3X3B0cl9pbnRlcnJ1cHQgPSBkZWxheTsKKwkJcnVudGltZS0+b3NzLnByZXZfaHdfcHRyX3BlcmlvZCA9IGRlbGF5OwogCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKIAkJCXNuZF9wY21fb3NzX3NpbXVsYXRlX2ZpbGwoc3Vic3RyZWFtLCBkZWxheSk7CiAJCWluZm8uYnl0ZXMgPSBzbmRfcGNtX29zc19ieXRlcyhzdWJzdHJlYW0sIHJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyKSAmIElOVF9NQVg7CkBAIC0yNjczLDE4ICsyNjgyLDIyIEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlpZiAoYXRvbWljX3JlYWQoJnN1YnN0cmVhbS0+bW1hcF9jb3VudCkpCi0JCXJldHVybiBydW50aW1lLT5vc3MucHJldl9od19wdHJfaW50ZXJydXB0ICE9IHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQ7CisJCXJldHVybiBydW50aW1lLT5vc3MucHJldl9od19wdHJfcGVyaW9kICE9CisJCQkJCQlnZXRfaHdfcHRyX3BlcmlvZChydW50aW1lKTsKIAllbHNlCi0JCXJldHVybiBzbmRfcGNtX3BsYXliYWNrX2F2YWlsKHJ1bnRpbWUpID49IHJ1bnRpbWUtPm9zcy5wZXJpb2RfZnJhbWVzOworCQlyZXR1cm4gc25kX3BjbV9wbGF5YmFja19hdmFpbChydW50aW1lKSA+PQorCQkJCQkJcnVudGltZS0+b3NzLnBlcmlvZF9mcmFtZXM7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3BjbV9vc3NfY2FwdHVyZV9yZWFkeShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCWlmIChhdG9taWNfcmVhZCgmc3Vic3RyZWFtLT5tbWFwX2NvdW50KSkKLQkJcmV0dXJuIHJ1bnRpbWUtPm9zcy5wcmV2X2h3X3B0cl9pbnRlcnJ1cHQgIT0gcnVudGltZS0+aHdfcHRyX2ludGVycnVwdDsKKwkJcmV0dXJuIHJ1bnRpbWUtPm9zcy5wcmV2X2h3X3B0cl9wZXJpb2QgIT0KKwkJCQkJCWdldF9od19wdHJfcGVyaW9kKHJ1bnRpbWUpOwogCWVsc2UKLQkJcmV0dXJuIHNuZF9wY21fY2FwdHVyZV9hdmFpbChydW50aW1lKSA+PSBydW50aW1lLT5vc3MucGVyaW9kX2ZyYW1lczsKKwkJcmV0dXJuIHNuZF9wY21fY2FwdHVyZV9hdmFpbChydW50aW1lKSA+PQorCQkJCQkJcnVudGltZS0+b3NzLnBlcmlvZF9mcmFtZXM7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3BjbV9vc3NfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbS5jIGIvc291bmQvY29yZS9wY20uYwppbmRleCA2ODg0YWUwLi4wZDQyOGQwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtLmMKQEAgLTg5NCw2ICs4OTQsNyBAQAogCW1lbXNldCgodm9pZCopcnVudGltZS0+Y29udHJvbCwgMCwgc2l6ZSk7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZydW50aW1lLT5zbGVlcCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcnVudGltZS0+dHNsZWVwKTsKIAogCXJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPSBTTkRSVl9QQ01fU1RBVEVfT1BFTjsKIApAQCAtOTIxLDYgKzkyMiwxMCBAQAogCXNuZF9mcmVlX3BhZ2VzKCh2b2lkKilydW50aW1lLT5jb250cm9sLAogCQkgICAgICAgUEFHRV9BTElHTihzaXplb2Yoc3RydWN0IHNuZF9wY21fbW1hcF9jb250cm9sKSkpOwogCWtmcmVlKHJ1bnRpbWUtPmh3X2NvbnN0cmFpbnRzLnJ1bGVzKTsKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCisJaWYgKHJ1bnRpbWUtPmh3cHRyX2xvZykKKwkJa2ZyZWUocnVudGltZS0+aHdwdHJfbG9nKTsKKyNlbmRpZgogCWtmcmVlKHJ1bnRpbWUpOwogCXN1YnN0cmVhbS0+cnVudGltZSA9IE5VTEw7CiAJcHV0X3BpZChzdWJzdHJlYW0tPnBpZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9saWIuYyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCmluZGV4IGEyNzU0NWIyLi5iNTQ2YWMyIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9saWIuYworKysgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwpAQCAtMTI2LDE3ICsxMjYsNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKLSNkZWZpbmUgeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIG1hc2spCSgoc3Vic3RyZWFtKS0+cHN0ci0+eHJ1bl9kZWJ1ZyAmIChtYXNrKSkKLSNlbHNlCi0jZGVmaW5lIHhydW5fZGVidWcoc3Vic3RyZWFtLCBtYXNrKQkwCi0jZW5kaWYKLQotI2RlZmluZSBkdW1wX3N0YWNrX29uX3hydW4oc3Vic3RyZWFtKSBkbyB7CQlcCi0JCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgMikpCQlcCi0JCQlkdW1wX3N0YWNrKCk7CQkJXAotCX0gd2hpbGUgKDApCi0KIHN0YXRpYyB2b2lkIHBjbV9kZWJ1Z19uYW1lKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKIHsKQEAgLTE0Nyw2ICsxMzYsMjQgQEAKIAkJIHN1YnN0cmVhbS0+bnVtYmVyKTsKIH0KIAorI2RlZmluZSBYUlVOX0RFQlVHX0JBU0lDCSgxPDwwKQorI2RlZmluZSBYUlVOX0RFQlVHX1NUQUNLCSgxPDwxKQkvKiBkdW1wIGFsc28gc3RhY2sgKi8KKyNkZWZpbmUgWFJVTl9ERUJVR19KSUZGSUVTQ0hFQ0sJKDE8PDIpCS8qIGRvIGppZmZpZXMgY2hlY2sgKi8KKyNkZWZpbmUgWFJVTl9ERUJVR19QRVJJT0RVUERBVEUJKDE8PDMpCS8qIGZ1bGwgcGVyaW9kIHVwZGF0ZSBpbmZvICovCisjZGVmaW5lIFhSVU5fREVCVUdfSFdQVFJVUERBVEUJKDE8PDQpCS8qIGZ1bGwgaHdwdHIgdXBkYXRlIGluZm8gKi8KKyNkZWZpbmUgWFJVTl9ERUJVR19MT0cJCSgxPDw1KQkvKiBzaG93IGxhc3QgMTAgcG9zaXRpb25zIG9uIGVyciAqLworI2RlZmluZSBYUlVOX0RFQlVHX0xPR09OQ0UJKDE8PDYpCS8qIGRvIGFib3ZlIG9ubHkgb25jZSAqLworCisjaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRworCisjZGVmaW5lIHhydW5fZGVidWcoc3Vic3RyZWFtLCBtYXNrKSBcCisJCQkoKHN1YnN0cmVhbSktPnBzdHItPnhydW5fZGVidWcgJiAobWFzaykpCisKKyNkZWZpbmUgZHVtcF9zdGFja19vbl94cnVuKHN1YnN0cmVhbSkgZG8gewkJCVwKKwkJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtLCBYUlVOX0RFQlVHX1NUQUNLKSkJXAorCQkJZHVtcF9zdGFjaygpOwkJCQlcCisJfSB3aGlsZSAoMCkKKwogc3RhdGljIHZvaWQgeHJ1bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwpAQCAtMTU0LDcgKzE2MSw3IEBACiAJaWYgKHJ1bnRpbWUtPnRzdGFtcF9tb2RlID09IFNORFJWX1BDTV9UU1RBTVBfRU5BQkxFKQogCQlzbmRfcGNtX2dldHRpbWUocnVudGltZSwgKHN0cnVjdCB0aW1lc3BlYyAqKSZydW50aW1lLT5zdGF0dXMtPnRzdGFtcCk7CiAJc25kX3BjbV9zdG9wKHN1YnN0cmVhbSwgU05EUlZfUENNX1NUQVRFX1hSVU4pOwotCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgMSkpIHsKKwlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIFhSVU5fREVCVUdfQkFTSUMpKSB7CiAJCWNoYXIgbmFtZVsxNl07CiAJCXBjbV9kZWJ1Z19uYW1lKHN1YnN0cmVhbSwgbmFtZSwgc2l6ZW9mKG5hbWUpKTsKIAkJc25kX3ByaW50ZChLRVJOX0RFQlVHICJYUlVOOiAlc1xuIiwgbmFtZSk7CkBAIC0xNjIsMzIgKzE2OSwxMDIgQEAKIAl9CiB9CiAKLXN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAotc25kX3BjbV91cGRhdGVfaHdfcHRyX3BvcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCSAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKLXsKLQlzbmRfcGNtX3VmcmFtZXNfdCBwb3M7CisjZGVmaW5lIGh3X3B0cl9lcnJvcihzdWJzdHJlYW0sIGZtdCwgYXJncy4uLikJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtLCBYUlVOX0RFQlVHX0JBU0lDKSkgewkJXAorCQkJeHJ1bl9sb2dfc2hvdyhzdWJzdHJlYW0pOwkJCVwKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsJCQlcCisJCQkJc25kX3ByaW50ZCgiUENNOiAiIGZtdCwgIyNhcmdzKTsJXAorCQkJfQkJCQkJCVwKKwkJCWR1bXBfc3RhY2tfb25feHJ1bihzdWJzdHJlYW0pOwkJCVwKKwkJfQkJCQkJCQlcCisJfSB3aGlsZSAoMCkKIAotCXBvcyA9IHN1YnN0cmVhbS0+b3BzLT5wb2ludGVyKHN1YnN0cmVhbSk7Ci0JaWYgKHBvcyA9PSBTTkRSVl9QQ01fUE9TX1hSVU4pCi0JCXJldHVybiBwb3M7IC8qIFhSVU4gKi8KLQlpZiAocG9zID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7Ci0JCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKLQkJCWNoYXIgbmFtZVsxNl07Ci0JCQlwY21fZGVidWdfbmFtZShzdWJzdHJlYW0sIG5hbWUsIHNpemVvZihuYW1lKSk7Ci0JCQlzbmRfcHJpbnRkKEtFUk5fRVJSICAiQlVHOiAlcywgcG9zID0gMHglbHgsICIKLQkJCQkgICAiYnVmZmVyIHNpemUgPSAweCVseCwgcGVyaW9kIHNpemUgPSAweCVseFxuIiwKLQkJCQkgICBuYW1lLCBwb3MsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAotCQkJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKLQkJfQotCQlwb3MgPSAwOworI2RlZmluZSBYUlVOX0xPR19DTlQJMTAKKworc3RydWN0IGh3cHRyX2xvZ19lbnRyeSB7CisJdW5zaWduZWQgbG9uZyBqaWZmaWVzOworCXNuZF9wY21fdWZyYW1lc190IHBvczsKKwlzbmRfcGNtX3VmcmFtZXNfdCBwZXJpb2Rfc2l6ZTsKKwlzbmRfcGNtX3VmcmFtZXNfdCBidWZmZXJfc2l6ZTsKKwlzbmRfcGNtX3VmcmFtZXNfdCBvbGRfaHdfcHRyOworCXNuZF9wY21fdWZyYW1lc190IGh3X3B0cl9iYXNlOworfTsKKworc3RydWN0IHNuZF9wY21faHdwdHJfbG9nIHsKKwl1bnNpZ25lZCBpbnQgaWR4OworCXVuc2lnbmVkIGludCBoaXQ6IDE7CisJc3RydWN0IGh3cHRyX2xvZ19lbnRyeSBlbnRyaWVzW1hSVU5fTE9HX0NOVF07Cit9OworCitzdGF0aWMgdm9pZCB4cnVuX2xvZyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJICAgICBzbmRfcGNtX3VmcmFtZXNfdCBwb3MpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX3BjbV9od3B0cl9sb2cgKmxvZyA9IHJ1bnRpbWUtPmh3cHRyX2xvZzsKKwlzdHJ1Y3QgaHdwdHJfbG9nX2VudHJ5ICplbnRyeTsKKworCWlmIChsb2cgPT0gTlVMTCkgeworCQlsb2cgPSBremFsbG9jKHNpemVvZigqbG9nKSwgR0ZQX0FUT01JQyk7CisJCWlmIChsb2cgPT0gTlVMTCkKKwkJCXJldHVybjsKKwkJcnVudGltZS0+aHdwdHJfbG9nID0gbG9nOworCX0gZWxzZSB7CisJCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgWFJVTl9ERUJVR19MT0dPTkNFKSAmJiBsb2ctPmhpdCkKKwkJCXJldHVybjsKIAl9Ci0JcG9zIC09IHBvcyAlIHJ1bnRpbWUtPm1pbl9hbGlnbjsKLQlyZXR1cm4gcG9zOworCWVudHJ5ID0gJmxvZy0+ZW50cmllc1tsb2ctPmlkeF07CisJZW50cnktPmppZmZpZXMgPSBqaWZmaWVzOworCWVudHJ5LT5wb3MgPSBwb3M7CisJZW50cnktPnBlcmlvZF9zaXplID0gcnVudGltZS0+cGVyaW9kX3NpemU7CisJZW50cnktPmJ1ZmZlcl9zaXplID0gcnVudGltZS0+YnVmZmVyX3NpemU7OworCWVudHJ5LT5vbGRfaHdfcHRyID0gcnVudGltZS0+c3RhdHVzLT5od19wdHI7CisJZW50cnktPmh3X3B0cl9iYXNlID0gcnVudGltZS0+aHdfcHRyX2Jhc2U7CisJbG9nLT5pZHggPSAobG9nLT5pZHggKyAxKSAlIFhSVU5fTE9HX0NOVDsKIH0KIAotc3RhdGljIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQorc3RhdGljIHZvaWQgeHJ1bl9sb2dfc2hvdyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9od3B0cl9sb2cgKmxvZyA9IHN1YnN0cmVhbS0+cnVudGltZS0+aHdwdHJfbG9nOworCXN0cnVjdCBod3B0cl9sb2dfZW50cnkgKmVudHJ5OworCWNoYXIgbmFtZVsxNl07CisJdW5zaWduZWQgaW50IGlkeDsKKwlpbnQgY250OworCisJaWYgKGxvZyA9PSBOVUxMKQorCQlyZXR1cm47CisJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtLCBYUlVOX0RFQlVHX0xPR09OQ0UpICYmIGxvZy0+aGl0KQorCQlyZXR1cm47CisJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOworCWZvciAoY250ID0gMCwgaWR4ID0gbG9nLT5pZHg7IGNudCA8IFhSVU5fTE9HX0NOVDsgY250KyspIHsKKwkJZW50cnkgPSAmbG9nLT5lbnRyaWVzW2lkeF07CisJCWlmIChlbnRyeS0+cGVyaW9kX3NpemUgPT0gMCkKKwkJCWJyZWFrOworCQlzbmRfcHJpbnRkKCJod3B0ciBsb2c6ICVzOiBqPSVsdSwgcG9zPSVsZC8lbGQvJWxkLCAiCisJCQkgICAiaHdwdHI9JWxkLyVsZFxuIiwKKwkJCSAgIG5hbWUsIGVudHJ5LT5qaWZmaWVzLCAodW5zaWduZWQgbG9uZyllbnRyeS0+cG9zLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPnBlcmlvZF9zaXplLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPmJ1ZmZlcl9zaXplLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPm9sZF9od19wdHIsCisJCQkgICAodW5zaWduZWQgbG9uZyllbnRyeS0+aHdfcHRyX2Jhc2UpOworCQlpZHgrKzsKKwkJaWR4ICU9IFhSVU5fTE9HX0NOVDsKKwl9CisJbG9nLT5oaXQgPSAxOworfQorCisjZWxzZSAvKiAhIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcgKi8KKworI2RlZmluZSB4cnVuX2RlYnVnKHN1YnN0cmVhbSwgbWFzaykJMAorI2RlZmluZSB4cnVuKHN1YnN0cmVhbSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGh3X3B0cl9lcnJvcihzdWJzdHJlYW0sIGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB4cnVuX2xvZyhzdWJzdHJlYW0sIHBvcykJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB4cnVuX2xvZ19zaG93KHN1YnN0cmVhbSkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKKworaW50IHNuZF9wY21fdXBkYXRlX3N0YXRlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCiB7CiAJc25kX3BjbV91ZnJhbWVzX3QgYXZhaWw7CiAKQEAgLTIwOSw4OCArMjg2LDk0IEBACiAJCX0KIAl9CiAJaWYgKGF2YWlsID49IHJ1bnRpbWUtPmNvbnRyb2wtPmF2YWlsX21pbikKLQkJd2FrZV91cCgmcnVudGltZS0+c2xlZXApOworCQl3YWtlX3VwKHJ1bnRpbWUtPnR3YWtlID8gJnJ1bnRpbWUtPnRzbGVlcCA6ICZydW50aW1lLT5zbGVlcCk7CiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwgZm10LCBhcmdzLi4uKQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIDEpKSB7CQkJCVwKLQkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsJCQlcCi0JCQkJc25kX3ByaW50ZCgiUENNOiAiIGZtdCwgIyNhcmdzKTsJXAotCQkJfQkJCQkJCVwKLQkJCWR1bXBfc3RhY2tfb25feHJ1bihzdWJzdHJlYW0pOwkJCVwKLQkJfQkJCQkJCQlcCi0JfSB3aGlsZSAoMCkKLQotc3RhdGljIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfaW50ZXJydXB0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc3RhdGljIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHIwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgdW5zaWduZWQgaW50IGluX2ludGVycnVwdCkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXNuZF9wY21fdWZyYW1lc190IHBvczsKLQlzbmRfcGNtX3VmcmFtZXNfdCBvbGRfaHdfcHRyLCBuZXdfaHdfcHRyLCBod19wdHJfaW50ZXJydXB0LCBod19iYXNlOworCXNuZF9wY21fdWZyYW1lc190IG9sZF9od19wdHIsIG5ld19od19wdHIsIGh3X2Jhc2U7CiAJc25kX3BjbV9zZnJhbWVzX3QgaGRlbHRhLCBkZWx0YTsKIAl1bnNpZ25lZCBsb25nIGpkZWx0YTsKIAogCW9sZF9od19wdHIgPSBydW50aW1lLT5zdGF0dXMtPmh3X3B0cjsKLQlwb3MgPSBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zKHN1YnN0cmVhbSwgcnVudGltZSk7CisJcG9zID0gc3Vic3RyZWFtLT5vcHMtPnBvaW50ZXIoc3Vic3RyZWFtKTsKIAlpZiAocG9zID09IFNORFJWX1BDTV9QT1NfWFJVTikgewogCQl4cnVuKHN1YnN0cmVhbSk7CiAJCXJldHVybiAtRVBJUEU7CiAJfQotCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgOCkpIHsKLQkJY2hhciBuYW1lWzE2XTsKLQkJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOwotCQlzbmRfcHJpbnRkKCJwZXJpb2RfdXBkYXRlOiAlczogcG9zPTB4JXgvMHgleC8weCV4LCAiCi0JCQkgICAiaHdwdHI9MHglbHgsIGh3X2Jhc2U9MHglbHgsIGh3X2ludHI9MHglbHhcbiIsCi0JCQkgICBuYW1lLCAodW5zaWduZWQgaW50KXBvcywKLQkJCSAgICh1bnNpZ25lZCBpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsCi0JCQkgICAodW5zaWduZWQgaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpb2xkX2h3X3B0ciwKLQkJCSAgICh1bnNpZ25lZCBsb25nKXJ1bnRpbWUtPmh3X3B0cl9iYXNlLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCk7CisJaWYgKHBvcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CisJCQljaGFyIG5hbWVbMTZdOworCQkJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOworCQkJeHJ1bl9sb2dfc2hvdyhzdWJzdHJlYW0pOworCQkJc25kX3ByaW50ZChLRVJOX0VSUiAgIkJVRzogJXMsIHBvcyA9ICVsZCwgIgorCQkJCSAgICJidWZmZXIgc2l6ZSA9ICVsZCwgcGVyaW9kIHNpemUgPSAlbGRcbiIsCisJCQkJICAgbmFtZSwgcG9zLCBydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkJCQkgICBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJCX0KKwkJcG9zID0gMDsKIAl9CisJcG9zIC09IHBvcyAlIHJ1bnRpbWUtPm1pbl9hbGlnbjsKKwlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIFhSVU5fREVCVUdfTE9HKSkKKwkJeHJ1bl9sb2coc3Vic3RyZWFtLCBwb3MpOwogCWh3X2Jhc2UgPSBydW50aW1lLT5od19wdHJfYmFzZTsKIAluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKLQlod19wdHJfaW50ZXJydXB0ID0gcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCArIHJ1bnRpbWUtPnBlcmlvZF9zaXplOwotCWRlbHRhID0gbmV3X2h3X3B0ciAtIGh3X3B0cl9pbnRlcnJ1cHQ7Ci0JaWYgKGh3X3B0cl9pbnRlcnJ1cHQgPj0gcnVudGltZS0+Ym91bmRhcnkpIHsKLQkJaHdfcHRyX2ludGVycnVwdCAtPSBydW50aW1lLT5ib3VuZGFyeTsKLQkJaWYgKGh3X2Jhc2UgPCBydW50aW1lLT5ib3VuZGFyeSAvIDIpCi0JCQkvKiBod19iYXNlIHdhcyBhbHJlYWR5IGxhcHBlZDsgcmVjYWxjIGRlbHRhICovCi0JCQlkZWx0YSA9IG5ld19od19wdHIgLSBod19wdHJfaW50ZXJydXB0OwotCX0KLQlpZiAoZGVsdGEgPCAwKSB7Ci0JCWlmIChydW50aW1lLT5wZXJpb2RzID09IDEgfHwgbmV3X2h3X3B0ciA8IG9sZF9od19wdHIpCi0JCQlkZWx0YSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkJaWYgKGRlbHRhIDwgMCkgewotCQkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwgCi0JCQkJICAgICAiVW5leHBlY3RlZCBod19wb2ludGVyIHZhbHVlICIKLQkJCQkgICAgICIoc3RyZWFtPSVpLCBwb3M9JWxkLCBpbnRyX3B0cj0lbGQpXG4iLAotCQkJCSAgICAgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKXBvcywKLQkJCQkgICAgIChsb25nKWh3X3B0cl9pbnRlcnJ1cHQpOwotI2lmIDEKLQkJCS8qIHNpbXBseSBza2lwcGluZyB0aGUgaHdwdHIgdXBkYXRlIHNlZW1zIG1vcmUKLQkJCSAqIHJvYnVzdCBpbiBzb21lIGNhc2VzLCBlLmcuIG9uIFZNd2FyZSB3aXRoCi0JCQkgKiBpbmFjY3VyYXRlIHRpbWVyIHNvdXJjZQotCQkJICovCi0JCQlyZXR1cm4gMDsgLyogc2tpcCB0aGlzIHVwZGF0ZSAqLwotI2Vsc2UKLQkJCS8qIHJlYmFzZSB0byBpbnRlcnJ1cHQgcG9zaXRpb24gKi8KLQkJCWh3X2Jhc2UgPSBuZXdfaHdfcHRyID0gaHdfcHRyX2ludGVycnVwdDsKLQkJCS8qIGFsaWduIGh3X2Jhc2UgdG8gYnVmZmVyX3NpemUgKi8KLQkJCWh3X2Jhc2UgLT0gaHdfYmFzZSAlIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCQkJZGVsdGEgPSAwOwotI2VuZGlmCi0JCX0gZWxzZSB7CisJaWYgKGluX2ludGVycnVwdCkgeworCQkvKiB3ZSBrbm93IHRoYXQgb25lIHBlcmlvZCB3YXMgcHJvY2Vzc2VkICovCisJCS8qIGRlbHRhID0gImV4cGVjdGVkIG5leHQgaHdfcHRyIiBmb3IgaW5faW50ZXJydXB0ICE9IDAgKi8KKwkJZGVsdGEgPSBydW50aW1lLT5od19wdHJfaW50ZXJydXB0ICsgcnVudGltZS0+cGVyaW9kX3NpemU7CisJCWlmIChkZWx0YSA+IG5ld19od19wdHIpIHsKIAkJCWh3X2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7CiAJCQlpZiAoaHdfYmFzZSA+PSBydW50aW1lLT5ib3VuZGFyeSkKIAkJCQlod19iYXNlID0gMDsKIAkJCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOworCQkJZ290byBfX2RlbHRhOwogCQl9CiAJfQorCS8qIG5ld19od19wdHIgbWlnaHQgYmUgbG93ZXIgdGhhbiBvbGRfaHdfcHRyIGluIGNhc2Ugd2hlbiAqLworCS8qIHBvaW50ZXIgY3Jvc3NlcyB0aGUgZW5kIG9mIHRoZSByaW5nIGJ1ZmZlciAqLworCWlmIChuZXdfaHdfcHRyIDwgb2xkX2h3X3B0cikgeworCQlod19iYXNlICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQlpZiAoaHdfYmFzZSA+PSBydW50aW1lLT5ib3VuZGFyeSkKKwkJCWh3X2Jhc2UgPSAwOworCQluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKKwl9CisgICAgICBfX2RlbHRhOgorCWRlbHRhID0gKG5ld19od19wdHIgLSBvbGRfaHdfcHRyKSAlIHJ1bnRpbWUtPmJvdW5kYXJ5OworCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgaW5faW50ZXJydXB0ID8KKwkJCVhSVU5fREVCVUdfUEVSSU9EVVBEQVRFIDogWFJVTl9ERUJVR19IV1BUUlVQREFURSkpIHsKKwkJY2hhciBuYW1lWzE2XTsKKwkJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOworCQlzbmRfcHJpbnRkKCIlc191cGRhdGU6ICVzOiBwb3M9JXUvJXUvJXUsICIKKwkJCSAgICJod3B0cj0lbGQvJWxkLyVsZC8lbGRcbiIsCisJCQkgICBpbl9pbnRlcnJ1cHQgPyAicGVyaW9kIiA6ICJod3B0ciIsCisJCQkgICBuYW1lLAorCQkJICAgKHVuc2lnbmVkIGludClwb3MsCisJCQkgICAodW5zaWduZWQgaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLAorCQkJICAgKHVuc2lnbmVkIGludClydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkJCSAgICh1bnNpZ25lZCBsb25nKWRlbHRhLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpb2xkX2h3X3B0ciwKKwkJCSAgICh1bnNpZ25lZCBsb25nKW5ld19od19wdHIsCisJCQkgICAodW5zaWduZWQgbG9uZylydW50aW1lLT5od19wdHJfYmFzZSk7CisJfQorCS8qIHNvbWV0aGluZyBtdXN0IGJlIHJlYWxseSB3cm9uZyAqLworCWlmIChkZWx0YSA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSArIHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7CisJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sCisJCQkgICAgICAgIlVuZXhwZWN0ZWQgaHdfcG9pbnRlciB2YWx1ZSAlcyIKKwkJCSAgICAgICAiKHN0cmVhbT0laSwgcG9zPSVsZCwgbmV3X2h3X3B0cj0lbGQsICIKKwkJCSAgICAgICAib2xkX2h3X3B0cj0lbGQpXG4iLAorCQkJCSAgICAgaW5faW50ZXJydXB0ID8gIltRXSAiIDogIltQXSIsCisJCQkJICAgICBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpcG9zLAorCQkJCSAgICAgKGxvbmcpbmV3X2h3X3B0ciwgKGxvbmcpb2xkX2h3X3B0cik7CisJCXJldHVybiAwOworCX0KIAogCS8qIERvIGppZmZpZXMgY2hlY2sgb25seSBpbiB4cnVuX2RlYnVnIG1vZGUgKi8KLQlpZiAoIXhydW5fZGVidWcoc3Vic3RyZWFtLCA0KSkKKwlpZiAoIXhydW5fZGVidWcoc3Vic3RyZWFtLCBYUlVOX0RFQlVHX0pJRkZJRVNDSEVDSykpCiAJCWdvdG8gbm9famlmZmllc19jaGVjazsKIAogCS8qIFNraXAgdGhlIGppZmZpZXMgY2hlY2sgZm9yIGhhcmR3YXJlcyB3aXRoIEJBVENIIGZsYWcuCkBAIC0yOTksNyArMzgyLDcgQEAKIAkgKi8KIAlpZiAocnVudGltZS0+aHcuaW5mbyAmIFNORFJWX1BDTV9JTkZPX0JBVENIKQogCQlnb3RvIG5vX2ppZmZpZXNfY2hlY2s7Ci0JaGRlbHRhID0gbmV3X2h3X3B0ciAtIG9sZF9od19wdHI7CisJaGRlbHRhID0gZGVsdGE7CiAJaWYgKGhkZWx0YSA8IHJ1bnRpbWUtPmRlbGF5KQogCQlnb3RvIG5vX2ppZmZpZXNfY2hlY2s7CiAJaGRlbHRhIC09IHJ1bnRpbWUtPmRlbGF5OwpAQCAtMzA4LDEzMCArMzkxLDY4IEBACiAJCWRlbHRhID0gamRlbHRhIC8KIAkJCSgoKHJ1bnRpbWUtPnBlcmlvZF9zaXplICogSFopIC8gcnVudGltZS0+cmF0ZSkKIAkJCQkJCQkJKyBIWi8xMDApOworCQkvKiBtb3ZlIG5ld19od19wdHIgYWNjb3JkaW5nIGppZmZpZXMgbm90IHBvcyB2YXJpYWJsZSAqLworCQluZXdfaHdfcHRyID0gb2xkX2h3X3B0cjsKKwkJaHdfYmFzZSA9IGRlbHRhOworCQkvKiB1c2UgbG9vcCB0byBhdm9pZCBjaGVja3MgZm9yIGRlbHRhIG92ZXJmbG93cyAqLworCQkvKiB0aGUgZGVsdGEgdmFsdWUgaXMgc21hbGwgb3IgemVybyBpbiBtb3N0IGNhc2VzICovCisJCXdoaWxlIChkZWx0YSA+IDApIHsKKwkJCW5ld19od19wdHIgKz0gcnVudGltZS0+cGVyaW9kX3NpemU7CisJCQlpZiAobmV3X2h3X3B0ciA+PSBydW50aW1lLT5ib3VuZGFyeSkKKwkJCQluZXdfaHdfcHRyIC09IHJ1bnRpbWUtPmJvdW5kYXJ5OworCQkJZGVsdGEtLTsKKwkJfQorCQkvKiBhbGlnbiBod19iYXNlIHRvIGJ1ZmZlcl9zaXplICovCiAJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sCi0JCQkgICAgICJod19wdHIgc2tpcHBpbmchIFtRXSAiCisJCQkgICAgICJod19wdHIgc2tpcHBpbmchICVzIgogCQkJICAgICAiKHBvcz0lbGQsIGRlbHRhPSVsZCwgcGVyaW9kPSVsZCwgIgotCQkJICAgICAiamRlbHRhPSVsdS8lbHUvJWx1KVxuIiwKKwkJCSAgICAgImpkZWx0YT0lbHUvJWx1LyVsdSwgaHdfcHRyPSVsZC8lbGQpXG4iLAorCQkJICAgICBpbl9pbnRlcnJ1cHQgPyAiW1FdICIgOiAiIiwKIAkJCSAgICAgKGxvbmcpcG9zLCAobG9uZyloZGVsdGEsCiAJCQkgICAgIChsb25nKXJ1bnRpbWUtPnBlcmlvZF9zaXplLCBqZGVsdGEsCi0JCQkgICAgICgoaGRlbHRhICogSFopIC8gcnVudGltZS0+cmF0ZSksIGRlbHRhKTsKLQkJaHdfcHRyX2ludGVycnVwdCA9IHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQgKwotCQkJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplICogZGVsdGE7Ci0JCWlmIChod19wdHJfaW50ZXJydXB0ID49IHJ1bnRpbWUtPmJvdW5kYXJ5KQotCQkJaHdfcHRyX2ludGVycnVwdCAtPSBydW50aW1lLT5ib3VuZGFyeTsKLQkJLyogcmViYXNlIHRvIGludGVycnVwdCBwb3NpdGlvbiAqLwotCQlod19iYXNlID0gbmV3X2h3X3B0ciA9IGh3X3B0cl9pbnRlcnJ1cHQ7Ci0JCS8qIGFsaWduIGh3X2Jhc2UgdG8gYnVmZmVyX3NpemUgKi8KLQkJaHdfYmFzZSAtPSBod19iYXNlICUgcnVudGltZS0+YnVmZmVyX3NpemU7CisJCQkgICAgICgoaGRlbHRhICogSFopIC8gcnVudGltZS0+cmF0ZSksIGh3X2Jhc2UsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKW9sZF9od19wdHIsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKW5ld19od19wdHIpOworCQkvKiByZXNldCB2YWx1ZXMgdG8gcHJvcGVyIHN0YXRlICovCiAJCWRlbHRhID0gMDsKKwkJaHdfYmFzZSA9IG5ld19od19wdHIgLSAobmV3X2h3X3B0ciAlIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTsKIAl9CiAgbm9famlmZmllc19jaGVjazoKIAlpZiAoZGVsdGEgPiBydW50aW1lLT5wZXJpb2Rfc2l6ZSArIHJ1bnRpbWUtPnBlcmlvZF9zaXplIC8gMikgewogCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLAotCQkJICAgICAiTG9zdCBpbnRlcnJ1cHRzPyAiCi0JCQkgICAgICIoc3RyZWFtPSVpLCBkZWx0YT0lbGQsIGludHJfcHRyPSVsZClcbiIsCisJCQkgICAgICJMb3N0IGludGVycnVwdHM/ICVzIgorCQkJICAgICAiKHN0cmVhbT0laSwgZGVsdGE9JWxkLCBuZXdfaHdfcHRyPSVsZCwgIgorCQkJICAgICAib2xkX2h3X3B0cj0lbGQpXG4iLAorCQkJICAgICBpbl9pbnRlcnJ1cHQgPyAiW1FdICIgOiAiIiwKIAkJCSAgICAgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKWRlbHRhLAotCQkJICAgICAobG9uZylod19wdHJfaW50ZXJydXB0KTsKLQkJLyogcmViYXNlIGh3X3B0cl9pbnRlcnJ1cHQgKi8KLQkJaHdfcHRyX2ludGVycnVwdCA9Ci0JCQluZXdfaHdfcHRyIC0gbmV3X2h3X3B0ciAlIHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCQkJICAgICAobG9uZyluZXdfaHdfcHRyLAorCQkJICAgICAobG9uZylvbGRfaHdfcHRyKTsKIAl9Ci0JcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCA9IGh3X3B0cl9pbnRlcnJ1cHQ7CisKKwlpZiAocnVudGltZS0+c3RhdHVzLT5od19wdHIgPT0gbmV3X2h3X3B0cikKKwkJcmV0dXJuIDA7CiAKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJgogCSAgICBydW50aW1lLT5zaWxlbmNlX3NpemUgPiAwKQogCQlzbmRfcGNtX3BsYXliYWNrX3NpbGVuY2Uoc3Vic3RyZWFtLCBuZXdfaHdfcHRyKTsKIAotCWlmIChydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9PSBuZXdfaHdfcHRyKQotCQlyZXR1cm4gMDsKLQorCWlmIChpbl9pbnRlcnJ1cHQpIHsKKwkJcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCA9IG5ld19od19wdHIgLQorCQkJCShuZXdfaHdfcHRyICUgcnVudGltZS0+cGVyaW9kX3NpemUpOworCX0KIAlydW50aW1lLT5od19wdHJfYmFzZSA9IGh3X2Jhc2U7CiAJcnVudGltZS0+c3RhdHVzLT5od19wdHIgPSBuZXdfaHdfcHRyOwogCXJ1bnRpbWUtPmh3X3B0cl9qaWZmaWVzID0gamlmZmllczsKIAlpZiAocnVudGltZS0+dHN0YW1wX21vZGUgPT0gU05EUlZfUENNX1RTVEFNUF9FTkFCTEUpCiAJCXNuZF9wY21fZ2V0dGltZShydW50aW1lLCAoc3RydWN0IHRpbWVzcGVjICopJnJ1bnRpbWUtPnN0YXR1cy0+dHN0YW1wKTsKIAotCXJldHVybiBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdWJzdHJlYW0sIHJ1bnRpbWUpOworCXJldHVybiBzbmRfcGNtX3VwZGF0ZV9zdGF0ZShzdWJzdHJlYW0sIHJ1bnRpbWUpOwogfQogCiAvKiBDQVVUSU9OOiBjYWxsIGl0IHdpdGggaXJxIGRpc2FibGVkICovCiBpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc25kX3BjbV91ZnJhbWVzX3QgcG9zOwotCXNuZF9wY21fdWZyYW1lc190IG9sZF9od19wdHIsIG5ld19od19wdHIsIGh3X2Jhc2U7Ci0Jc25kX3BjbV9zZnJhbWVzX3QgZGVsdGE7Ci0JdW5zaWduZWQgbG9uZyBqZGVsdGE7Ci0KLQlvbGRfaHdfcHRyID0gcnVudGltZS0+c3RhdHVzLT5od19wdHI7Ci0JcG9zID0gc25kX3BjbV91cGRhdGVfaHdfcHRyX3BvcyhzdWJzdHJlYW0sIHJ1bnRpbWUpOwotCWlmIChwb3MgPT0gU05EUlZfUENNX1BPU19YUlVOKSB7Ci0JCXhydW4oc3Vic3RyZWFtKTsKLQkJcmV0dXJuIC1FUElQRTsKLQl9Ci0JaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtLCAxNikpIHsKLQkJY2hhciBuYW1lWzE2XTsKLQkJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOwotCQlzbmRfcHJpbnRkKCJod191cGRhdGU6ICVzOiBwb3M9MHgleC8weCV4LzB4JXgsICIKLQkJCSAgICJod3B0cj0weCVseCwgaHdfYmFzZT0weCVseCwgaHdfaW50cj0weCVseFxuIiwKLQkJCSAgIG5hbWUsICh1bnNpZ25lZCBpbnQpcG9zLAotCQkJICAgKHVuc2lnbmVkIGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwKLQkJCSAgICh1bnNpZ25lZCBpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsCi0JCQkgICAodW5zaWduZWQgbG9uZylvbGRfaHdfcHRyLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpcnVudGltZS0+aHdfcHRyX2Jhc2UsCi0JCQkgICAodW5zaWduZWQgbG9uZylydW50aW1lLT5od19wdHJfaW50ZXJydXB0KTsKLQl9Ci0KLQlod19iYXNlID0gcnVudGltZS0+aHdfcHRyX2Jhc2U7Ci0JbmV3X2h3X3B0ciA9IGh3X2Jhc2UgKyBwb3M7Ci0KLQlkZWx0YSA9IG5ld19od19wdHIgLSBvbGRfaHdfcHRyOwotCWpkZWx0YSA9IGppZmZpZXMgLSBydW50aW1lLT5od19wdHJfamlmZmllczsKLQlpZiAoZGVsdGEgPCAwKSB7Ci0JCWRlbHRhICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCQlpZiAoZGVsdGEgPCAwKSB7Ci0JCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLCAKLQkJCQkgICAgICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgWzJdICIKLQkJCQkgICAgICIoc3RyZWFtPSVpLCBwb3M9JWxkLCBvbGRfcHRyPSVsZCwgamRlbHRhPSVsaSlcbiIsCi0JCQkJICAgICBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpcG9zLAotCQkJCSAgICAgKGxvbmcpb2xkX2h3X3B0ciwgamRlbHRhKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWh3X2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JCWlmIChod19iYXNlID49IHJ1bnRpbWUtPmJvdW5kYXJ5KQotCQkJaHdfYmFzZSA9IDA7Ci0JCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOwotCX0KLQkvKiBEbyBqaWZmaWVzIGNoZWNrIG9ubHkgaW4geHJ1bl9kZWJ1ZyBtb2RlICovCi0JaWYgKCF4cnVuX2RlYnVnKHN1YnN0cmVhbSwgNCkpCi0JCWdvdG8gbm9famlmZmllc19jaGVjazsKLQlpZiAoZGVsdGEgPCBydW50aW1lLT5kZWxheSkKLQkJZ290byBub19qaWZmaWVzX2NoZWNrOwotCWRlbHRhIC09IHJ1bnRpbWUtPmRlbGF5OwotCWlmICgoKGRlbHRhICogSFopIC8gcnVudGltZS0+cmF0ZSkgPiBqZGVsdGEgKyBIWi8xMDApIHsKLQkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwKLQkJCSAgICAgImh3X3B0ciBza2lwcGluZyEgIgotCQkJICAgICAiKHBvcz0lbGQsIGRlbHRhPSVsZCwgcGVyaW9kPSVsZCwgamRlbHRhPSVsdS8lbHUpXG4iLAotCQkJICAgICAobG9uZylwb3MsIChsb25nKWRlbHRhLAotCQkJICAgICAobG9uZylydW50aW1lLT5wZXJpb2Rfc2l6ZSwgamRlbHRhLAotCQkJICAgICAoKGRlbHRhICogSFopIC8gcnVudGltZS0+cmF0ZSkpOwotCQlyZXR1cm4gMDsKLQl9Ci0gbm9famlmZmllc19jaGVjazoKLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJgotCSAgICBydW50aW1lLT5zaWxlbmNlX3NpemUgPiAwKQotCQlzbmRfcGNtX3BsYXliYWNrX3NpbGVuY2Uoc3Vic3RyZWFtLCBuZXdfaHdfcHRyKTsKLQotCWlmIChydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9PSBuZXdfaHdfcHRyKQotCQlyZXR1cm4gMDsKLQotCXJ1bnRpbWUtPmh3X3B0cl9iYXNlID0gaHdfYmFzZTsKLQlydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9IG5ld19od19wdHI7Ci0JcnVudGltZS0+aHdfcHRyX2ppZmZpZXMgPSBqaWZmaWVzOwotCWlmIChydW50aW1lLT50c3RhbXBfbW9kZSA9PSBTTkRSVl9QQ01fVFNUQU1QX0VOQUJMRSkKLQkJc25kX3BjbV9nZXR0aW1lKHJ1bnRpbWUsIChzdHJ1Y3QgdGltZXNwZWMgKikmcnVudGltZS0+c3RhdHVzLT50c3RhbXApOwotCi0JcmV0dXJuIHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3N0KHN1YnN0cmVhbSwgcnVudGltZSk7CisJcmV0dXJuIHNuZF9wY21fdXBkYXRlX2h3X3B0cjAoc3Vic3RyZWFtLCAwKTsKIH0KIAogLyoqCkBAIC03NDUsMTAgKzc2NiwxMyBAQAogCQkJdW5zaWduZWQgaW50IHJhdHNfY291bnQsIHN0cnVjdCBzbmRfcmF0bnVtICpyYXRzLAogCQkJdW5zaWduZWQgaW50ICpudW1wLCB1bnNpZ25lZCBpbnQgKmRlbnApCiB7Ci0JdW5zaWduZWQgaW50IGJlc3RfbnVtLCBiZXN0X2RpZmYsIGJlc3RfZGVuOworCXVuc2lnbmVkIGludCBiZXN0X251bSwgYmVzdF9kZW47CisJaW50IGJlc3RfZGlmZjsKIAl1bnNpZ25lZCBpbnQgazsKIAlzdHJ1Y3Qgc25kX2ludGVydmFsIHQ7CiAJaW50IGVycjsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0X251bSwgcmVzdWx0X2RlbjsKKwlpbnQgcmVzdWx0X2RpZmY7CiAKIAliZXN0X251bSA9IGJlc3RfZGVuID0gYmVzdF9kaWZmID0gMDsKIAlmb3IgKGsgPSAwOyBrIDwgcmF0c19jb3VudDsgKytrKSB7CkBAIC03NzAsNiArNzk0LDggQEAKIAkJCQlkZW4gLT0gcjsKIAkJfQogCQlkaWZmID0gbnVtIC0gcSAqIGRlbjsKKwkJaWYgKGRpZmYgPCAwKQorCQkJZGlmZiA9IC1kaWZmOwogCQlpZiAoYmVzdF9udW0gPT0gMCB8fAogCQkgICAgZGlmZiAqIGJlc3RfZGVuIDwgYmVzdF9kaWZmICogZGVuKSB7CiAJCQliZXN0X2RpZmYgPSBkaWZmOwpAQCAtNzg0LDYgKzgxMCw5IEBACiAJdC5taW4gPSBkaXZfZG93bihiZXN0X251bSwgYmVzdF9kZW4pOwogCXQub3Blbm1pbiA9ICEhKGJlc3RfbnVtICUgYmVzdF9kZW4pOwogCQorCXJlc3VsdF9udW0gPSBiZXN0X251bTsKKwlyZXN1bHRfZGlmZiA9IGJlc3RfZGlmZjsKKwlyZXN1bHRfZGVuID0gYmVzdF9kZW47CiAJYmVzdF9udW0gPSBiZXN0X2RlbiA9IGJlc3RfZGlmZiA9IDA7CiAJZm9yIChrID0gMDsgayA8IHJhdHNfY291bnQ7ICsraykgewogCQl1bnNpZ25lZCBpbnQgbnVtID0gcmF0c1trXS5udW07CkBAIC04MDYsNiArODM1LDggQEAKIAkJCQlkZW4gKz0gcmF0c1trXS5kZW5fc3RlcCAtIHI7CiAJCX0KIAkJZGlmZiA9IHEgKiBkZW4gLSBudW07CisJCWlmIChkaWZmIDwgMCkKKwkJCWRpZmYgPSAtZGlmZjsKIAkJaWYgKGJlc3RfbnVtID09IDAgfHwKIAkJICAgIGRpZmYgKiBiZXN0X2RlbiA8IGJlc3RfZGlmZiAqIGRlbikgewogCQkJYmVzdF9kaWZmID0gZGlmZjsKQEAgLTgyNSwxMCArODU2LDE0IEBACiAJCXJldHVybiBlcnI7CiAKIAlpZiAoc25kX2ludGVydmFsX3NpbmdsZShpKSkgeworCQlpZiAoYmVzdF9kaWZmICogcmVzdWx0X2RlbiA8IHJlc3VsdF9kaWZmICogYmVzdF9kZW4pIHsKKwkJCXJlc3VsdF9udW0gPSBiZXN0X251bTsKKwkJCXJlc3VsdF9kZW4gPSBiZXN0X2RlbjsKKwkJfQogCQlpZiAobnVtcCkKLQkJCSpudW1wID0gYmVzdF9udW07CisJCQkqbnVtcCA9IHJlc3VsdF9udW07CiAJCWlmIChkZW5wKQotCQkJKmRlbnAgPSBiZXN0X2RlbjsKKwkJCSpkZW5wID0gcmVzdWx0X2RlbjsKIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE2NDMsNyArMTY3OCw3IEBACiAKIAlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycXNhdmUoc3Vic3RyZWFtLCBmbGFncyk7CiAJaWYgKCFzbmRfcGNtX3J1bm5pbmcoc3Vic3RyZWFtKSB8fAotCSAgICBzbmRfcGNtX3VwZGF0ZV9od19wdHJfaW50ZXJydXB0KHN1YnN0cmVhbSkgPCAwKQorCSAgICBzbmRfcGNtX3VwZGF0ZV9od19wdHIwKHN1YnN0cmVhbSwgMSkgPCAwKQogCQlnb3RvIF9lbmQ7CiAKIAlpZiAoc3Vic3RyZWFtLT50aW1lcl9ydW5uaW5nKQpAQCAtMTY3NCw3ICsxNzA5LDcgQEAKIAlsb25nIHRvdXQ7CiAKIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7Ci0JYWRkX3dhaXRfcXVldWUoJnJ1bnRpbWUtPnNsZWVwLCAmd2FpdCk7CisJYWRkX3dhaXRfcXVldWUoJnJ1bnRpbWUtPnRzbGVlcCwgJndhaXQpOwogCWZvciAoOzspIHsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQllcnIgPSAtRVJFU1RBUlRTWVM7CkBAIC0xNzE3LDcgKzE3NTIsNyBAQAogCQkJYnJlYWs7CiAJfQogIF9lbmRsb29wOgotCXJlbW92ZV93YWl0X3F1ZXVlKCZydW50aW1lLT5zbGVlcCwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZydW50aW1lLT50c2xlZXAsICZ3YWl0KTsKIAkqYXZhaWxwID0gYXZhaWw7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE3NzYsNiArMTgxMSw3IEBACiAJCWdvdG8gX2VuZF91bmxvY2s7CiAJfQogCisJcnVudGltZS0+dHdha2UgPSAxOwogCXdoaWxlIChzaXplID4gMCkgewogCQlzbmRfcGNtX3VmcmFtZXNfdCBmcmFtZXMsIGFwcGxfcHRyLCBhcHBsX29mczsKIAkJc25kX3BjbV91ZnJhbWVzX3QgYXZhaWw7CkBAIC0xNzk3LDE1ICsxODMzLDE3IEBACiAJCWlmIChmcmFtZXMgPiBjb250KQogCQkJZnJhbWVzID0gY29udDsKIAkJaWYgKHNuZF9CVUdfT04oIWZyYW1lcykpIHsKKwkJCXJ1bnRpbWUtPnR3YWtlID0gMDsKIAkJCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWFwcGxfcHRyID0gcnVudGltZS0+Y29udHJvbC0+YXBwbF9wdHI7CiAJCWFwcGxfb2ZzID0gYXBwbF9wdHIgJSBydW50aW1lLT5idWZmZXJfc2l6ZTsKIAkJc25kX3BjbV9zdHJlYW1fdW5sb2NrX2lycShzdWJzdHJlYW0pOwotCQlpZiAoKGVyciA9IHRyYW5zZmVyKHN1YnN0cmVhbSwgYXBwbF9vZnMsIGRhdGEsIG9mZnNldCwgZnJhbWVzKSkgPCAwKQotCQkJZ290byBfZW5kOworCQllcnIgPSB0cmFuc2ZlcihzdWJzdHJlYW0sIGFwcGxfb2ZzLCBkYXRhLCBvZmZzZXQsIGZyYW1lcyk7CiAJCXNuZF9wY21fc3RyZWFtX2xvY2tfaXJxKHN1YnN0cmVhbSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBfZW5kX3VubG9jazsKIAkJc3dpdGNoIChydW50aW1lLT5zdGF0dXMtPnN0YXRlKSB7CiAJCWNhc2UgU05EUlZfUENNX1NUQVRFX1hSVU46CiAJCQllcnIgPSAtRVBJUEU7CkBAIC0xODM0LDggKzE4NzIsMTAgQEAKIAkJfQogCX0KICBfZW5kX3VubG9jazoKKwlydW50aW1lLT50d2FrZSA9IDA7CisJaWYgKHhmZXIgPiAwICYmIGVyciA+PSAwKQorCQlzbmRfcGNtX3VwZGF0ZV9zdGF0ZShzdWJzdHJlYW0sIHJ1bnRpbWUpOwogCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKLSBfZW5kOgogCXJldHVybiB4ZmVyID4gMCA/IChzbmRfcGNtX3NmcmFtZXNfdCl4ZmVyIDogZXJyOwogfQogCkBAIC0xOTkzLDYgKzIwMzMsNyBAQAogCQlnb3RvIF9lbmRfdW5sb2NrOwogCX0KIAorCXJ1bnRpbWUtPnR3YWtlID0gMTsKIAl3aGlsZSAoc2l6ZSA+IDApIHsKIAkJc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzLCBhcHBsX3B0ciwgYXBwbF9vZnM7CiAJCXNuZF9wY21fdWZyYW1lc190IGF2YWlsOwpAQCAtMjAyMSwxNSArMjA2MiwxNyBAQAogCQlpZiAoZnJhbWVzID4gY29udCkKIAkJCWZyYW1lcyA9IGNvbnQ7CiAJCWlmIChzbmRfQlVHX09OKCFmcmFtZXMpKSB7CisJCQlydW50aW1lLT50d2FrZSA9IDA7CiAJCQlzbmRfcGNtX3N0cmVhbV91bmxvY2tfaXJxKHN1YnN0cmVhbSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlhcHBsX3B0ciA9IHJ1bnRpbWUtPmNvbnRyb2wtPmFwcGxfcHRyOwogCQlhcHBsX29mcyA9IGFwcGxfcHRyICUgcnVudGltZS0+YnVmZmVyX3NpemU7CiAJCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKLQkJaWYgKChlcnIgPSB0cmFuc2ZlcihzdWJzdHJlYW0sIGFwcGxfb2ZzLCBkYXRhLCBvZmZzZXQsIGZyYW1lcykpIDwgMCkKLQkJCWdvdG8gX2VuZDsKKwkJZXJyID0gdHJhbnNmZXIoc3Vic3RyZWFtLCBhcHBsX29mcywgZGF0YSwgb2Zmc2V0LCBmcmFtZXMpOwogCQlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycShzdWJzdHJlYW0pOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gX2VuZF91bmxvY2s7CiAJCXN3aXRjaCAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSkgewogCQljYXNlIFNORFJWX1BDTV9TVEFURV9YUlVOOgogCQkJZXJyID0gLUVQSVBFOwpAQCAtMjA1Miw4ICsyMDk1LDEwIEBACiAJCXhmZXIgKz0gZnJhbWVzOwogCX0KICBfZW5kX3VubG9jazoKKwlydW50aW1lLT50d2FrZSA9IDA7CisJaWYgKHhmZXIgPiAwICYmIGVyciA+PSAwKQorCQlzbmRfcGNtX3VwZGF0ZV9zdGF0ZShzdWJzdHJlYW0sIHJ1bnRpbWUpOwogCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKLSBfZW5kOgogCXJldHVybiB4ZmVyID4gMCA/IChzbmRfcGNtX3NmcmFtZXNfdCl4ZmVyIDogZXJyOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYyBiL3NvdW5kL2NvcmUvcGNtX21lbW9yeS5jCmluZGV4IGNhYTc3OTYuLmQ2ZDQ5ZDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX21lbW9yeS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX21lbW9yeS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgpAQCAtNDM0LDMgKzQzNSw1NyBAQAogfQogCiBFWFBPUlRfU1lNQk9MKHNuZF9wY21fbGliX2ZyZWVfcGFnZXMpOworCitpbnQgX3NuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKKworCWlmIChQQ01fUlVOVElNRV9DSEVDSyhzdWJzdHJlYW0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCWlmIChydW50aW1lLT5kbWFfYXJlYSkgeworCQlpZiAocnVudGltZS0+ZG1hX2J5dGVzID49IHNpemUpCisJCQlyZXR1cm4gMDsgLyogYWxyZWFkeSBsYXJnZSBlbm91Z2ggKi8KKwkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOworCX0KKwlydW50aW1lLT5kbWFfYXJlYSA9IF9fdm1hbGxvYyhzaXplLCBnZnBfZmxhZ3MsIFBBR0VfS0VSTkVMKTsKKwlpZiAoIXJ1bnRpbWUtPmRtYV9hcmVhKQorCQlyZXR1cm4gLUVOT01FTTsKKwlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOworCXJldHVybiAxOworfQorRVhQT1JUX1NZTUJPTChfc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIpOworCisvKioKKyAqIHNuZF9wY21fbGliX2ZyZWVfdm1hbGxvY19idWZmZXIgLSBmcmVlIHZtYWxsb2MgYnVmZmVyCisgKiBAc3Vic3RyZWFtOiB0aGUgc3Vic3RyZWFtIHdpdGggYSBidWZmZXIgYWxsb2NhdGVkIGJ5CisgKglzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcigpCisgKi8KK2ludCBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CisKKwlpZiAoUENNX1JVTlRJTUVfQ0hFQ0soc3Vic3RyZWFtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7CisJcnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKTsKKworLyoqCisgKiBzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlIC0gbWFwIHZtYWxsb2MgYnVmZmVyIG9mZnNldCB0byBwYWdlIHN0cnVjdAorICogQHN1YnN0cmVhbTogdGhlIHN1YnN0cmVhbSB3aXRoIGEgYnVmZmVyIGFsbG9jYXRlZCBieQorICoJc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIoKQorICogQG9mZnNldDogb2Zmc2V0IGluIHRoZSBidWZmZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIGJlIHVzZWQgYXMgdGhlIHBhZ2UgY2FsbGJhY2sgaW4gdGhlIFBDTSBvcHMuCisgKi8KK3N0cnVjdCBwYWdlICpzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXJldHVybiB2bWFsbG9jX3RvX3BhZ2Uoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSArIG9mZnNldCk7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwppbmRleCAyNWIwNjQxLi44NzI4ODc2IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworKysgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtX3Fvc19wYXJhbXMuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgpAQCAtMzE1LDEwICszMTYsMTAgQEAKIAlpZiAoIXBhcmFtcy0+aW5mbykKIAkJcGFyYW1zLT5pbmZvID0gaHctPmluZm8gJiB+U05EUlZfUENNX0lORk9fRklGT19JTl9GUkFNRVM7CiAJaWYgKCFwYXJhbXMtPmZpZm9fc2l6ZSkgewotCQlpZiAoc25kX21hc2tfbWluKCZwYXJhbXMtPm1hc2tzW1NORFJWX1BDTV9IV19QQVJBTV9GT1JNQVRdKSA9PQotCQkgICAgc25kX21hc2tfbWF4KCZwYXJhbXMtPm1hc2tzW1NORFJWX1BDTV9IV19QQVJBTV9GT1JNQVRdKSAmJgotICAgICAgICAgICAgICAgICAgICBzbmRfbWFza19taW4oJnBhcmFtcy0+bWFza3NbU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTXSkgPT0KLSAgICAgICAgICAgICAgICAgICAgc25kX21hc2tfbWF4KCZwYXJhbXMtPm1hc2tzW1NORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMU10pKSB7CisJCW0gPSBod19wYXJhbV9tYXNrKHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCk7CisJCWkgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyk7CisJCWlmIChzbmRfbWFza19taW4obSkgPT0gc25kX21hc2tfbWF4KG0pICYmCisgICAgICAgICAgICAgICAgICAgIHNuZF9pbnRlcnZhbF9taW4oaSkgPT0gc25kX2ludGVydmFsX21heChpKSkgewogCQkJY2hhbmdlZCA9IHN1YnN0cmVhbS0+b3BzLT5pb2N0bChzdWJzdHJlYW0sCiAJCQkJCVNORFJWX1BDTV9JT0NUTDFfRklGT19TSVpFLCBwYXJhbXMpOwogCQkJaWYgKGNoYW5nZWQgPCAwKQpAQCAtMzY2LDYgKzM2NywzOCBAQAogCXJldHVybiB1c2VjczsKIH0KIAorc3RhdGljIGludCBjYWxjX2JvdW5kYXJ5KHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCit7CisJdV9pbnQ2NF90IGJvdW5kYXJ5OworCisJYm91bmRhcnkgPSAodV9pbnQ2NF90KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplICoKKwkJICAgKHVfaW50NjRfdClydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKyNpZiBCSVRTX1BFUl9MT05HIDwgNjQKKwkvKiB0cnkgdG8gZmluZCBsb3dlc3QgY29tbW9uIG11bHRpcGxlIGZvciBidWZmZXIgYW5kIHBlcmlvZCAqLworCWlmIChib3VuZGFyeSA+IExPTkdfTUFYIC0gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwkJdV9pbnQzMl90IHJlbWFpbmRlciA9IC0xOworCQl1X2ludDMyX3QgZGl2aWRlbnQgPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJdV9pbnQzMl90IGRpdmlzb3IgPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwkJd2hpbGUgKHJlbWFpbmRlcikgeworCQkJcmVtYWluZGVyID0gZGl2aWRlbnQgJSBkaXZpc29yOworCQkJaWYgKHJlbWFpbmRlcikgeworCQkJCWRpdmlkZW50ID0gZGl2aXNvcjsKKwkJCQlkaXZpc29yID0gcmVtYWluZGVyOworCQkJfQorCQl9CisJCWJvdW5kYXJ5ID0gZGl2X3U2NChib3VuZGFyeSwgZGl2aXNvcik7CisJCWlmIChib3VuZGFyeSA+IExPTkdfTUFYIC0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisjZW5kaWYKKwlpZiAoYm91bmRhcnkgPT0gMCkKKwkJcmV0dXJuIC1FUkFOR0U7CisJcnVudGltZS0+Ym91bmRhcnkgPSBib3VuZGFyeTsKKwl3aGlsZSAocnVudGltZS0+Ym91bmRhcnkgKiAyIDw9IExPTkdfTUFYIC0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCXJ1bnRpbWUtPmJvdW5kYXJ5ICo9IDI7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc25kX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQogewpAQCAtNDQxLDkgKzQ3NCw5IEBACiAJcnVudGltZS0+c3RvcF90aHJlc2hvbGQgPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKIAlydW50aW1lLT5zaWxlbmNlX3RocmVzaG9sZCA9IDA7CiAJcnVudGltZS0+c2lsZW5jZV9zaXplID0gMDsKLQlydW50aW1lLT5ib3VuZGFyeSA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCXdoaWxlIChydW50aW1lLT5ib3VuZGFyeSAqIDIgPD0gTE9OR19NQVggLSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJcnVudGltZS0+Ym91bmRhcnkgKj0gMjsKKwllcnIgPSBjYWxjX2JvdW5kYXJ5KHJ1bnRpbWUpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIF9lcnJvcjsKIAogCXNuZF9wY21fdGltZXJfcmVzb2x1dGlvbl9jaGFuZ2Uoc3Vic3RyZWFtKTsKIAlydW50aW1lLT5zdGF0dXMtPnN0YXRlID0gU05EUlZfUENNX1NUQVRFX1NFVFVQOwpAQCAtNTE2LDYgKzU0OSw3IEBACiAJCQkgICAgIHN0cnVjdCBzbmRfcGNtX3N3X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CisJaW50IGVycjsKIAogCWlmIChQQ01fUlVOVElNRV9DSEVDSyhzdWJzdHJlYW0pKQogCQlyZXR1cm4gLUVOWElPOwpAQCAtNTQwLDYgKzU3NCw3IEBACiAJCWlmIChwYXJhbXMtPnNpbGVuY2VfdGhyZXNob2xkID4gcnVudGltZS0+YnVmZmVyX3NpemUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJZXJyID0gMDsKIAlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycShzdWJzdHJlYW0pOwogCXJ1bnRpbWUtPnRzdGFtcF9tb2RlID0gcGFyYW1zLT50c3RhbXBfbW9kZTsKIAlydW50aW1lLT5wZXJpb2Rfc3RlcCA9IHBhcmFtcy0+cGVyaW9kX3N0ZXA7CkBAIC01NTMsMTAgKzU4OCwxMCBAQAogCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJgogCQkgICAgcnVudGltZS0+c2lsZW5jZV9zaXplID4gMCkKIAkJCXNuZF9wY21fcGxheWJhY2tfc2lsZW5jZShzdWJzdHJlYW0sIFVMT05HX01BWCk7Ci0JCXdha2VfdXAoJnJ1bnRpbWUtPnNsZWVwKTsKKwkJZXJyID0gc25kX3BjbV91cGRhdGVfc3RhdGUoc3Vic3RyZWFtLCBydW50aW1lKTsKIAl9CiAJc25kX3BjbV9zdHJlYW1fdW5sb2NrX2lycShzdWJzdHJlYW0pOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3BjbV9zd19wYXJhbXNfdXNlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKQEAgLTkxNyw2ICs5NTIsNyBAQAogCQlydW50aW1lLT5zdGF0dXMtPnN0YXRlID0gc3RhdGU7CiAJfQogCXdha2VfdXAoJnJ1bnRpbWUtPnNsZWVwKTsKKwl3YWtlX3VwKCZydW50aW1lLT50c2xlZXApOwogfQogCiBzdGF0aWMgc3RydWN0IGFjdGlvbl9vcHMgc25kX3BjbV9hY3Rpb25fc3RvcCA9IHsKQEAgLTEwMDIsNiArMTAzOCw3IEBACiAJCQkJCSBTTkRSVl9USU1FUl9FVkVOVF9NUEFVU0UsCiAJCQkJCSAmcnVudGltZS0+dHJpZ2dlcl90c3RhbXApOwogCQl3YWtlX3VwKCZydW50aW1lLT5zbGVlcCk7CisJCXdha2VfdXAoJnJ1bnRpbWUtPnRzbGVlcCk7CiAJfSBlbHNlIHsKIAkJcnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9IFNORFJWX1BDTV9TVEFURV9SVU5OSU5HOwogCQlpZiAoc3Vic3RyZWFtLT50aW1lcikKQEAgLTEwNTksNiArMTA5Niw3IEBACiAJcnVudGltZS0+c3RhdHVzLT5zdXNwZW5kZWRfc3RhdGUgPSBydW50aW1lLT5zdGF0dXMtPnN0YXRlOwogCXJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEOwogCXdha2VfdXAoJnJ1bnRpbWUtPnNsZWVwKTsKKwl3YWtlX3VwKCZydW50aW1lLT50c2xlZXApOwogfQogCiBzdGF0aWMgc3RydWN0IGFjdGlvbl9vcHMgc25kX3BjbV9hY3Rpb25fc3VzcGVuZCA9IHsKQEAgLTMxNjIsOSArMzIwMCw3IEBACiAJbG9uZyBzaXplOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCi0jaWZkZWYgcGdwcm90X25vbmNhY2hlZAogCWFyZWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQoYXJlYS0+dm1fcGFnZV9wcm90KTsKLSNlbmRpZgogCWFyZWEtPnZtX2ZsYWdzIHw9IFZNX0lPOwogCXNpemUgPSBhcmVhLT52bV9lbmQgLSBhcmVhLT52bV9zdGFydDsKIAlvZmZzZXQgPSBhcmVhLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwpAQCAtMzE3OCw2ICszMjE0LDE1IEBACiBFWFBPUlRfU1lNQk9MKHNuZF9wY21fbGliX21tYXBfaW9tZW0pOwogI2VuZGlmIC8qIFNORFJWX1BDTV9JTkZPX01NQVAgKi8KIAorLyogbW1hcCBjYWxsYmFjayB3aXRoIHBncHJvdF9ub25jYWNoZWQgKi8KK2ludCBzbmRfcGNtX2xpYl9tbWFwX25vbmNhY2hlZChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpCit7CisJYXJlYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZChhcmVhLT52bV9wYWdlX3Byb3QpOworCXJldHVybiBzbmRfcGNtX2RlZmF1bHRfbW1hcChzdWJzdHJlYW0sIGFyZWEpOworfQorRVhQT1JUX1NZTUJPTChzbmRfcGNtX2xpYl9tbWFwX25vbmNhY2hlZCk7CisKIC8qCiAgKiBtbWFwIERNQSBidWZmZXIKICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jIGIvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jCmluZGV4IDhjYTJiZTMuLjQ4ZWNhOWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9jbGllbnRtZ3IuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfY2xpZW50bWdyLmMKQEAgLTIxOTAsNyArMjE5MCw3IEBACiAJCWlmIChwLT5jbWQgPT0gY21kKQogCQkJcmV0dXJuIHAtPmZ1bmMoY2xpZW50LCBhcmcpOwogCX0KLQlzbmRfcHJpbnRkKCJzZXEgdW5rbm93biBpb2N0bCgpIDB4JXggKHR5cGU9JyVjJywgbnVtYmVyPTB4JTJ4KVxuIiwKKwlzbmRfcHJpbnRkKCJzZXEgdW5rbm93biBpb2N0bCgpIDB4JXggKHR5cGU9JyVjJywgbnVtYmVyPTB4JTAyeClcbiIsCiAJCSAgIGNtZCwgX0lPQ19UWVBFKGNtZCksIF9JT0NfTlIoY21kKSk7CiAJcmV0dXJuIC1FTk9UVFk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfdGltZXIuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV90aW1lci5jCmluZGV4IGY3NDVjMzEuLjE2MGIxYmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV90aW1lci5jCkBAIC0zMywyMiArMzMsMjEgQEAKIAogI2RlZmluZSBTS0VXX0JBU0UJMHgxMDAwMAkvKiAxNmJpdCBzaGlmdCAqLwogCi1zdGF0aWMgdm9pZCBzbmRfc2VxX3RpbWVyX3NldF90aWNrX3Jlc29sdXRpb24oc3RydWN0IHNuZF9zZXFfdGltZXJfdGljayAqdGljaywKLQkJCQkJICAgICAgaW50IHRlbXBvLCBpbnQgcHBxKQorc3RhdGljIHZvaWQgc25kX3NlcV90aW1lcl9zZXRfdGlja19yZXNvbHV0aW9uKHN0cnVjdCBzbmRfc2VxX3RpbWVyICp0bXIpCiB7Ci0JaWYgKHRlbXBvIDwgMTAwMDAwMCkKLQkJdGljay0+cmVzb2x1dGlvbiA9ICh0ZW1wbyAqIDEwMDApIC8gcHBxOworCWlmICh0bXItPnRlbXBvIDwgMTAwMDAwMCkKKwkJdG1yLT50aWNrLnJlc29sdXRpb24gPSAodG1yLT50ZW1wbyAqIDEwMDApIC8gdG1yLT5wcHE7CiAJZWxzZSB7CiAJCS8qIG1pZ2h0IG92ZXJmbG93Li4gKi8KIAkJdW5zaWduZWQgaW50IHM7Ci0JCXMgPSB0ZW1wbyAlIHBwcTsKLQkJcyA9IChzICogMTAwMCkgLyBwcHE7Ci0JCXRpY2stPnJlc29sdXRpb24gPSAodGVtcG8gLyBwcHEpICogMTAwMDsKLQkJdGljay0+cmVzb2x1dGlvbiArPSBzOworCQlzID0gdG1yLT50ZW1wbyAlIHRtci0+cHBxOworCQlzID0gKHMgKiAxMDAwKSAvIHRtci0+cHBxOworCQl0bXItPnRpY2sucmVzb2x1dGlvbiA9ICh0bXItPnRlbXBvIC8gdG1yLT5wcHEpICogMTAwMDsKKwkJdG1yLT50aWNrLnJlc29sdXRpb24gKz0gczsKIAl9Ci0JaWYgKHRpY2stPnJlc29sdXRpb24gPD0gMCkKLQkJdGljay0+cmVzb2x1dGlvbiA9IDE7Ci0Jc25kX3NlcV90aW1lcl91cGRhdGVfdGljayh0aWNrLCAwKTsKKwlpZiAodG1yLT50aWNrLnJlc29sdXRpb24gPD0gMCkKKwkJdG1yLT50aWNrLnJlc29sdXRpb24gPSAxOworCXNuZF9zZXFfdGltZXJfdXBkYXRlX3RpY2soJnRtci0+dGljaywgMCk7CiB9CiAKIC8qIGNyZWF0ZSBuZXcgdGltZXIgKGNvbnN0cnVjdG9yKSAqLwpAQCAtOTYsNyArOTUsNyBAQAogCS8qIHNldHVwIGRlZmF1bHRzICovCiAJdG1yLT5wcHEgPSA5NjsJCS8qIDk2IFBQUSAqLwogCXRtci0+dGVtcG8gPSA1MDAwMDA7CS8qIDEyMCBCUE0gKi8KLQlzbmRfc2VxX3RpbWVyX3NldF90aWNrX3Jlc29sdXRpb24oJnRtci0+dGljaywgdG1yLT50ZW1wbywgdG1yLT5wcHEpOworCXNuZF9zZXFfdGltZXJfc2V0X3RpY2tfcmVzb2x1dGlvbih0bXIpOwogCXRtci0+cnVubmluZyA9IDA7CiAKIAl0bXItPnR5cGUgPSBTTkRSVl9TRVFfVElNRVJfQUxTQTsKQEAgLTE4MCw3ICsxNzksNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0bXItPmxvY2ssIGZsYWdzKTsKIAlpZiAoKHVuc2lnbmVkIGludCl0ZW1wbyAhPSB0bXItPnRlbXBvKSB7CiAJCXRtci0+dGVtcG8gPSB0ZW1wbzsKLQkJc25kX3NlcV90aW1lcl9zZXRfdGlja19yZXNvbHV0aW9uKCZ0bXItPnRpY2ssIHRtci0+dGVtcG8sIHRtci0+cHBxKTsKKwkJc25kX3NlcV90aW1lcl9zZXRfdGlja19yZXNvbHV0aW9uKHRtcik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtci0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwpAQCAtMjA1LDcgKzIwNCw3IEBACiAJfQogCiAJdG1yLT5wcHEgPSBwcHE7Ci0Jc25kX3NlcV90aW1lcl9zZXRfdGlja19yZXNvbHV0aW9uKCZ0bXItPnRpY2ssIHRtci0+dGVtcG8sIHRtci0+cHBxKTsKKwlzbmRfc2VxX3RpbWVyX3NldF90aWNrX3Jlc29sdXRpb24odG1yKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0bXItPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwppbmRleCAyNTJlMDRjLi43ZjQxOTkwIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMKKysrIGIvc291bmQvZHJpdmVycy9kdW1teS5jCkBAIC00NSwxMDkgKzQ1LDIzIEBACiAjZGVmaW5lIE1BWF9QQ01fU1VCU1RSRUFNUwkxMjgKICNkZWZpbmUgTUFYX01JRElfREVWSUNFUwkyCiAKLSNpZiAwIC8qIGVtdTEwazEgZW11bGF0aW9uICovCi0jZGVmaW5lIE1BWF9CVUZGRVJfU0laRQkJKDEyOCAqIDEwMjQpCi1zdGF0aWMgaW50IGVtdTEwazFfcGxheWJhY2tfY29uc3RyYWludHMoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKLXsKLQlpbnQgZXJyOwotCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMsIDI1NiwgVUlOVF9NQVgpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAwOwotfQotI2RlZmluZSBhZGRfcGxheWJhY2tfY29uc3RyYWludHMgZW11MTBrMV9wbGF5YmFja19jb25zdHJhaW50cwotI2VuZGlmCi0KLSNpZiAwIC8qIFJNRTk2NTIgZW11bGF0aW9uICovCi0jZGVmaW5lIE1BWF9CVUZGRVJfU0laRQkJKDI2ICogNjQgKiAxMDI0KQotI2RlZmluZSBVU0VfRk9STUFUUwkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUKLSNkZWZpbmUgVVNFX0NIQU5ORUxTX01JTgkyNgotI2RlZmluZSBVU0VfQ0hBTk5FTFNfTUFYCTI2Ci0jZGVmaW5lIFVTRV9QRVJJT0RTX01JTgkJMgotI2RlZmluZSBVU0VfUEVSSU9EU19NQVgJCTIKLSNlbmRpZgotCi0jaWYgMCAvKiBJQ0UxNzEyIGVtdWxhdGlvbiAqLwotI2RlZmluZSBNQVhfQlVGRkVSX1NJWkUJCSgyNTYgKiAxMDI0KQotI2RlZmluZSBVU0VfRk9STUFUUwkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUKLSNkZWZpbmUgVVNFX0NIQU5ORUxTX01JTgkxMAotI2RlZmluZSBVU0VfQ0hBTk5FTFNfTUFYCTEwCi0jZGVmaW5lIFVTRV9QRVJJT0RTX01JTgkJMQotI2RlZmluZSBVU0VfUEVSSU9EU19NQVgJCTEwMjQKLSNlbmRpZgotCi0jaWYgMCAvKiBVREExMzQxIGVtdWxhdGlvbiAqLwotI2RlZmluZSBNQVhfQlVGRkVSX1NJWkUJCSgxNjM4MCkKLSNkZWZpbmUgVVNFX0ZPUk1BVFMJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFCi0jZGVmaW5lIFVTRV9DSEFOTkVMU19NSU4JMgotI2RlZmluZSBVU0VfQ0hBTk5FTFNfTUFYCTIKLSNkZWZpbmUgVVNFX1BFUklPRFNfTUlOCQkyCi0jZGVmaW5lIFVTRV9QRVJJT0RTX01BWAkJMjU1Ci0jZW5kaWYKLQotI2lmIDAgLyogc2ltcGxlIEFDOTcgYnJpZGdlIChpbnRlbDh4MCkgd2l0aCA0OGtIeiBBQzk3IG9ubHkgY29kZWMgKi8KLSNkZWZpbmUgVVNFX0ZPUk1BVFMJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFCi0jZGVmaW5lIFVTRV9DSEFOTkVMU19NSU4JMgotI2RlZmluZSBVU0VfQ0hBTk5FTFNfTUFYCTIKLSNkZWZpbmUgVVNFX1JBVEUJCVNORFJWX1BDTV9SQVRFXzQ4MDAwCi0jZGVmaW5lIFVTRV9SQVRFX01JTgkJNDgwMDAKLSNkZWZpbmUgVVNFX1JBVEVfTUFYCQk0ODAwMAotI2VuZGlmCi0KLSNpZiAwIC8qIENBMDEwNiAqLwotI2RlZmluZSBVU0VfRk9STUFUUwkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUKLSNkZWZpbmUgVVNFX0NIQU5ORUxTX01JTgkyCi0jZGVmaW5lIFVTRV9DSEFOTkVMU19NQVgJMgotI2RlZmluZSBVU0VfUkFURQkJKFNORFJWX1BDTV9SQVRFXzQ4MDAwfFNORFJWX1BDTV9SQVRFXzk2MDAwfFNORFJWX1BDTV9SQVRFXzE5MjAwMCkgCi0jZGVmaW5lIFVTRV9SQVRFX01JTgkJNDgwMDAgCi0jZGVmaW5lIFVTRV9SQVRFX01BWAkJMTkyMDAwCi0jZGVmaW5lIE1BWF9CVUZGRVJfU0laRQkJKCg2NTUzNi02NCkqOCkKLSNkZWZpbmUgTUFYX1BFUklPRF9TSVpFCQkoNjU1MzYtNjQpCi0jZGVmaW5lIFVTRV9QRVJJT0RTX01JTgkJMgotI2RlZmluZSBVU0VfUEVSSU9EU19NQVgJCTgKLSNlbmRpZgotCi0KIC8qIGRlZmF1bHRzICovCi0jaWZuZGVmIE1BWF9CVUZGRVJfU0laRQogI2RlZmluZSBNQVhfQlVGRkVSX1NJWkUJCSg2NCoxMDI0KQotI2VuZGlmCi0jaWZuZGVmIE1BWF9QRVJJT0RfU0laRQorI2RlZmluZSBNSU5fUEVSSU9EX1NJWkUJCTY0CiAjZGVmaW5lIE1BWF9QRVJJT0RfU0laRQkJTUFYX0JVRkZFUl9TSVpFCi0jZW5kaWYKLSNpZm5kZWYgVVNFX0ZPUk1BVFMKICNkZWZpbmUgVVNFX0ZPUk1BVFMgCQkoU05EUlZfUENNX0ZNVEJJVF9VOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFKQotI2VuZGlmCi0jaWZuZGVmIFVTRV9SQVRFCiAjZGVmaW5lIFVTRV9SQVRFCQlTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTIHwgU05EUlZfUENNX1JBVEVfODAwMF80ODAwMAogI2RlZmluZSBVU0VfUkFURV9NSU4JCTU1MDAKICNkZWZpbmUgVVNFX1JBVEVfTUFYCQk0ODAwMAotI2VuZGlmCi0jaWZuZGVmIFVTRV9DSEFOTkVMU19NSU4KICNkZWZpbmUgVVNFX0NIQU5ORUxTX01JTiAJMQotI2VuZGlmCi0jaWZuZGVmIFVTRV9DSEFOTkVMU19NQVgKICNkZWZpbmUgVVNFX0NIQU5ORUxTX01BWCAJMgotI2VuZGlmCi0jaWZuZGVmIFVTRV9QRVJJT0RTX01JTgogI2RlZmluZSBVU0VfUEVSSU9EU19NSU4gCTEKLSNlbmRpZgotI2lmbmRlZiBVU0VfUEVSSU9EU19NQVgKICNkZWZpbmUgVVNFX1BFUklPRFNfTUFYIAkxMDI0Ci0jZW5kaWYKLSNpZm5kZWYgYWRkX3BsYXliYWNrX2NvbnN0cmFpbnRzCi0jZGVmaW5lIGFkZF9wbGF5YmFja19jb25zdHJhaW50cyh4KSAwCi0jZW5kaWYKLSNpZm5kZWYgYWRkX2NhcHR1cmVfY29uc3RyYWludHMKLSNkZWZpbmUgYWRkX2NhcHR1cmVfY29uc3RyYWludHMoeCkgMAotI2VuZGlmCiAKIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCiBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IHsxLCBbMSAuLi4gKFNORFJWX0NBUkRTIC0gMSldID0gMH07CitzdGF0aWMgY2hhciAqbW9kZWxbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSBOVUxMfTsKIHN0YXRpYyBpbnQgcGNtX2RldnNbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAxfTsKIHN0YXRpYyBpbnQgcGNtX3N1YnN0cmVhbXNbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSA4fTsKIC8vc3RhdGljIGludCBtaWRpX2RldnNbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAyfTsKQEAgLTE2Miw2ICs3Niw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBkdW1teSBzb3VuZGNhcmQuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIHRoaXMgZHVtbXkgc291bmRjYXJkLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KG1vZGVsLCBjaGFycCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1vZGVsLCAiU291bmRjYXJkIG1vZGVsLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KHBjbV9kZXZzLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwY21fZGV2cywgIlBDTSBkZXZpY2VzICMgKDAtNCkgZm9yIGR1bW15IGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShwY21fc3Vic3RyZWFtcywgaW50LCBOVUxMLCAwNDQ0KTsKQEAgLTE5Myw5ICsxMDksMjggQEAKIAlzbmRfcGNtX3VmcmFtZXNfdCAoKnBvaW50ZXIpKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKTsKIH07CiAKK3N0cnVjdCBkdW1teV9tb2RlbCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgKCpwbGF5YmFja19jb25zdHJhaW50cykoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSk7CisJaW50ICgqY2FwdHVyZV9jb25zdHJhaW50cykoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSk7CisJdTY0IGZvcm1hdHM7CisJc2l6ZV90IGJ1ZmZlcl9ieXRlc19tYXg7CisJc2l6ZV90IHBlcmlvZF9ieXRlc19taW47CisJc2l6ZV90IHBlcmlvZF9ieXRlc19tYXg7CisJdW5zaWduZWQgaW50IHBlcmlvZHNfbWluOworCXVuc2lnbmVkIGludCBwZXJpb2RzX21heDsKKwl1bnNpZ25lZCBpbnQgcmF0ZXM7CisJdW5zaWduZWQgaW50IHJhdGVfbWluOworCXVuc2lnbmVkIGludCByYXRlX21heDsKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHNfbWluOworCXVuc2lnbmVkIGludCBjaGFubmVsc19tYXg7Cit9OworCiBzdHJ1Y3Qgc25kX2R1bW15IHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IGR1bW15X21vZGVsICptb2RlbDsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCXN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHBjbV9odzsKIAlzcGlubG9ja190IG1peGVyX2xvY2s7CiAJaW50IG1peGVyX3ZvbHVtZVtNSVhFUl9BRERSX0xBU1QrMV1bMl07CiAJaW50IGNhcHR1cmVfc291cmNlW01JWEVSX0FERFJfTEFTVCsxXVsyXTsKQEAgLTIwMyw2ICsxMzgsOTIgQEAKIH07CiAKIC8qCisgKiBjYXJkIG1vZGVscworICovCisKK3N0YXRpYyBpbnQgZW11MTBrMV9wbGF5YmFja19jb25zdHJhaW50cyhzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQoreworCWludCBlcnI7CisJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9CWVRFUywgMjU2LCBVSU5UX01BWCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkdW1teV9tb2RlbCBtb2RlbF9lbXUxMGsxID0geworCS5uYW1lID0gImVtdTEwazEiLAorCS5wbGF5YmFja19jb25zdHJhaW50cyA9IGVtdTEwazFfcGxheWJhY2tfY29uc3RyYWludHMsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAxMjggKiAxMDI0LAorfTsKKworc3RydWN0IGR1bW15X21vZGVsIG1vZGVsX3JtZTk2NTIgPSB7CisJLm5hbWUgPSAicm1lOTY1MiIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAyNiAqIDY0ICogMTAyNCwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLAorCS5jaGFubmVsc19taW4gPSAyNiwKKwkuY2hhbm5lbHNfbWF4ID0gMjYsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyLAorfTsKKworc3RydWN0IGR1bW15X21vZGVsIG1vZGVsX2ljZTE3MTIgPSB7CisJLm5hbWUgPSAiaWNlMTcxMiIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAyNTYgKiAxMDI0LAorCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCisJLmNoYW5uZWxzX21pbiA9IDEwLAorCS5jaGFubmVsc19tYXggPSAxMCwKKwkucGVyaW9kc19taW4gPSAxLAorCS5wZXJpb2RzX21heCA9IDEwMjQsCit9OworCitzdHJ1Y3QgZHVtbXlfbW9kZWwgbW9kZWxfdWRhMTM0MSA9IHsKKwkubmFtZSA9ICJ1ZGExMzQxIiwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDE2MzgwLAorCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLmNoYW5uZWxzX21pbiA9IDIsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyNTUsCit9OworCitzdHJ1Y3QgZHVtbXlfbW9kZWwgbW9kZWxfYWM5NyA9IHsKKwkubmFtZSA9ICJhYzk3IiwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCS5yYXRlX21pbiA9IDQ4MDAwLAorCS5yYXRlX21heCA9IDQ4MDAwLAorfTsKKworc3RydWN0IGR1bW15X21vZGVsIG1vZGVsX2NhMDEwNiA9IHsKKwkubmFtZSA9ICJjYTAxMDYiLAorCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAoKDY1NTM2LTY0KSo4KSwKKwkucGVyaW9kX2J5dGVzX21heCA9ICg2NTUzNi02NCksCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSA4LAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwfFNORFJWX1BDTV9SQVRFXzk2MDAwfFNORFJWX1BDTV9SQVRFXzE5MjAwMCwKKwkucmF0ZV9taW4gPSA0ODAwMCwKKwkucmF0ZV9tYXggPSAxOTIwMDAsCit9OworCitzdHJ1Y3QgZHVtbXlfbW9kZWwgKmR1bW15X21vZGVsc1tdID0geworCSZtb2RlbF9lbXUxMGsxLAorCSZtb2RlbF9ybWU5NjUyLAorCSZtb2RlbF9pY2UxNzEyLAorCSZtb2RlbF91ZGExMzQxLAorCSZtb2RlbF9hYzk3LAorCSZtb2RlbF9jYTAxMDYsCisJTlVMTAorfTsKKworLyoKICAqIHN5c3RlbSB0aW1lciBpbnRlcmZhY2UKICAqLwogCkBAIC01MDksNyArNTMwLDcgQEAKIAkuY2hhbm5lbHNfbWluID0JCVVTRV9DSEFOTkVMU19NSU4sCiAJLmNoYW5uZWxzX21heCA9CQlVU0VfQ0hBTk5FTFNfTUFYLAogCS5idWZmZXJfYnl0ZXNfbWF4ID0JTUFYX0JVRkZFUl9TSVpFLAotCS5wZXJpb2RfYnl0ZXNfbWluID0JNjQsCisJLnBlcmlvZF9ieXRlc19taW4gPQlNSU5fUEVSSU9EX1NJWkUsCiAJLnBlcmlvZF9ieXRlc19tYXggPQlNQVhfUEVSSU9EX1NJWkUsCiAJLnBlcmlvZHNfbWluID0JCVVTRV9QRVJJT0RTX01JTiwKIAkucGVyaW9kc19tYXggPQkJVVNFX1BFUklPRFNfTUFYLApAQCAtNTM4LDYgKzU1OSw3IEBACiBzdGF0aWMgaW50IGR1bW15X3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfZHVtbXkgKmR1bW15ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBkdW1teV9tb2RlbCAqbW9kZWwgPSBkdW1teS0+bW9kZWw7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlpbnQgZXJyOwogCkBAIC01NTEsNyArNTczLDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCXJ1bnRpbWUtPmh3ID0gZHVtbXlfcGNtX2hhcmR3YXJlOworCXJ1bnRpbWUtPmh3ID0gZHVtbXktPnBjbV9odzsKIAlpZiAoc3Vic3RyZWFtLT5wY20tPmRldmljZSAmIDEpIHsKIAkJcnVudGltZS0+aHcuaW5mbyAmPSB+U05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQ7CiAJCXJ1bnRpbWUtPmh3LmluZm8gfD0gU05EUlZfUENNX0lORk9fTk9OSU5URVJMRUFWRUQ7CkBAIC01NjAsMTAgKzU4MiwxNiBAQAogCQlydW50aW1lLT5ody5pbmZvICY9IH4oU05EUlZfUENNX0lORk9fTU1BUCB8CiAJCQkJICAgICAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCk7CiAKLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJZXJyID0gYWRkX3BsYXliYWNrX2NvbnN0cmFpbnRzKHN1YnN0cmVhbS0+cnVudGltZSk7Ci0JZWxzZQotCQllcnIgPSBhZGRfY2FwdHVyZV9jb25zdHJhaW50cyhzdWJzdHJlYW0tPnJ1bnRpbWUpOworCWlmIChtb2RlbCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCWlmIChtb2RlbC0+cGxheWJhY2tfY29uc3RyYWludHMpCisJCQllcnIgPSBtb2RlbC0+cGxheWJhY2tfY29uc3RyYWludHMoc3Vic3RyZWFtLT5ydW50aW1lKTsKKwl9IGVsc2UgeworCQlpZiAobW9kZWwtPmNhcHR1cmVfY29uc3RyYWludHMpCisJCQllcnIgPSBtb2RlbC0+Y2FwdHVyZV9jb25zdHJhaW50cyhzdWJzdHJlYW0tPnJ1bnRpbWUpOworCX0KIAlpZiAoZXJyIDwgMCkgewogCQlkdW1teS0+dGltZXJfb3BzLT5mcmVlKHN1YnN0cmVhbSk7CiAJCXJldHVybiBlcnI7CkBAIC04MjMsMTcgKzg1MSwxOSBAQAogLyoKICAqIHByb2MgaW50ZXJmYWNlCiAgKi8KLXN0YXRpYyB2b2lkIHByaW50X2Zvcm1hdHMoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQorc3RhdGljIHZvaWQgcHJpbnRfZm9ybWF0cyhzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teSwKKwkJCSAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFNORFJWX1BDTV9GT1JNQVRfTEFTVDsgaSsrKSB7Ci0JCWlmIChkdW1teV9wY21faGFyZHdhcmUuZm9ybWF0cyAmICgxVUxMIDw8IGkpKQorCQlpZiAoZHVtbXktPnBjbV9ody5mb3JtYXRzICYgKDFVTEwgPDwgaSkpCiAJCQlzbmRfaXByaW50ZihidWZmZXIsICIgJXMiLCBzbmRfcGNtX2Zvcm1hdF9uYW1lKGkpKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50X3JhdGVzKHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3N0YXRpYyB2b2lkIHByaW50X3JhdGVzKHN0cnVjdCBzbmRfZHVtbXkgKmR1bW15LAorCQkJc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQogewogCXN0YXRpYyBpbnQgcmF0ZXNbXSA9IHsKIAkJNTUxMiwgODAwMCwgMTEwMjUsIDE2MDAwLCAyMjA1MCwgMzIwMDAsIDQ0MTAwLCA0ODAwMCwKQEAgLTg0MSwxOSArODcxLDE5IEBACiAJfTsKIAlpbnQgaTsKIAotCWlmIChkdW1teV9wY21faGFyZHdhcmUucmF0ZXMgJiBTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTKQorCWlmIChkdW1teS0+cGNtX2h3LnJhdGVzICYgU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUykKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiIGNvbnRpbnVvdXMiKTsKLQlpZiAoZHVtbXlfcGNtX2hhcmR3YXJlLnJhdGVzICYgU05EUlZfUENNX1JBVEVfS05PVCkKKwlpZiAoZHVtbXktPnBjbV9ody5yYXRlcyAmIFNORFJWX1BDTV9SQVRFX0tOT1QpCiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiBrbm90Iik7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZXMpOyBpKyspCi0JCWlmIChkdW1teV9wY21faGFyZHdhcmUucmF0ZXMgJiAoMSA8PCBpKSkKKwkJaWYgKGR1bW15LT5wY21faHcucmF0ZXMgJiAoMSA8PCBpKSkKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAlZCIsIHJhdGVzW2ldKTsKIH0KIAotI2RlZmluZSBnZXRfZHVtbXlfaW50X3B0cihvZnMpIFwKLQkodW5zaWduZWQgaW50ICopKChjaGFyICopJmR1bW15X3BjbV9oYXJkd2FyZSArIChvZnMpKQotI2RlZmluZSBnZXRfZHVtbXlfbGxfcHRyKG9mcykgXAotCSh1bnNpZ25lZCBsb25nIGxvbmcgKikoKGNoYXIgKikmZHVtbXlfcGNtX2hhcmR3YXJlICsgKG9mcykpCisjZGVmaW5lIGdldF9kdW1teV9pbnRfcHRyKGR1bW15LCBvZnMpIFwKKwkodW5zaWduZWQgaW50ICopKChjaGFyICopJigoZHVtbXkpLT5wY21faHcpICsgKG9mcykpCisjZGVmaW5lIGdldF9kdW1teV9sbF9wdHIoZHVtbXksIG9mcykgXAorCSh1bnNpZ25lZCBsb25nIGxvbmcgKikoKGNoYXIgKikmKChkdW1teSktPnBjbV9odykgKyAob2ZzKSkKIAogc3RydWN0IGR1bW15X2h3X2ZpZWxkIHsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtODg0LDIwICs5MTQsMjEgQEAKIHN0YXRpYyB2b2lkIGR1bW15X3Byb2NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAogCQkJICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKIHsKKwlzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teSA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmaWVsZHMpOyBpKyspIHsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiJXMgIiwgZmllbGRzW2ldLm5hbWUpOwogCQlpZiAoZmllbGRzW2ldLnNpemUgPT0gc2l6ZW9mKGludCkpCiAJCQlzbmRfaXByaW50ZihidWZmZXIsIGZpZWxkc1tpXS5mb3JtYXQsCi0JCQkJICAgICpnZXRfZHVtbXlfaW50X3B0cihmaWVsZHNbaV0ub2Zmc2V0KSk7CisJCQkJKmdldF9kdW1teV9pbnRfcHRyKGR1bW15LCBmaWVsZHNbaV0ub2Zmc2V0KSk7CiAJCWVsc2UKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgZmllbGRzW2ldLmZvcm1hdCwKLQkJCQkgICAgKmdldF9kdW1teV9sbF9wdHIoZmllbGRzW2ldLm9mZnNldCkpOworCQkJCSpnZXRfZHVtbXlfbGxfcHRyKGR1bW15LCBmaWVsZHNbaV0ub2Zmc2V0KSk7CiAJCWlmICghc3RyY21wKGZpZWxkc1tpXS5uYW1lLCAiZm9ybWF0cyIpKQotCQkJcHJpbnRfZm9ybWF0cyhidWZmZXIpOworCQkJcHJpbnRfZm9ybWF0cyhkdW1teSwgYnVmZmVyKTsKIAkJZWxzZSBpZiAoIXN0cmNtcChmaWVsZHNbaV0ubmFtZSwgInJhdGVzIikpCi0JCQlwcmludF9yYXRlcyhidWZmZXIpOworCQkJcHJpbnRfcmF0ZXMoZHVtbXksIGJ1ZmZlcik7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiAJfQogfQpAQCAtOTA1LDYgKzkzNiw3IEBACiBzdGF0aWMgdm9pZCBkdW1teV9wcm9jX3dyaXRlKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCiAJCQkgICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKIHsKKwlzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teSA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CiAJY2hhciBsaW5lWzY0XTsKIAogCXdoaWxlICghc25kX2luZm9fZ2V0X2xpbmUoYnVmZmVyLCBsaW5lLCBzaXplb2YobGluZSkpKSB7CkBAIC05MjQsOSArOTU2LDkgQEAKIAkJaWYgKHN0cmljdF9zdHJ0b3VsbChpdGVtLCAwLCAmdmFsKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoZmllbGRzW2ldLnNpemUgPT0gc2l6ZW9mKGludCkpCi0JCQkqZ2V0X2R1bW15X2ludF9wdHIoZmllbGRzW2ldLm9mZnNldCkgPSB2YWw7CisJCQkqZ2V0X2R1bW15X2ludF9wdHIoZHVtbXksIGZpZWxkc1tpXS5vZmZzZXQpID0gdmFsOwogCQllbHNlCi0JCQkqZ2V0X2R1bW15X2xsX3B0cihmaWVsZHNbaV0ub2Zmc2V0KSA9IHZhbDsKKwkJCSpnZXRfZHVtbXlfbGxfcHRyKGR1bW15LCBmaWVsZHNbaV0ub2Zmc2V0KSA9IHZhbDsKIAl9CiB9CiAKQEAgLTkzOCw2ICs5NzAsNyBAQAogCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNoaXAsIGR1bW15X3Byb2NfcmVhZCk7CiAJCWVudHJ5LT5jLnRleHQud3JpdGUgPSBkdW1teV9wcm9jX3dyaXRlOwogCQllbnRyeS0+bW9kZSB8PSBTX0lXVVNSOworCQllbnRyeS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKIAl9CiB9CiAjZWxzZQpAQCAtOTQ4LDYgKzk4MSw3IEBACiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfZHVtbXkgKmR1bW15OworCXN0cnVjdCBkdW1teV9tb2RlbCAqbSA9IE5VTEwsICoqbWRsOwogCWludCBpZHgsIGVycjsKIAlpbnQgZGV2ID0gZGV2cHRyLT5pZDsKIApAQCAtOTU3LDYgKzk5MSwxNSBAQAogCQlyZXR1cm4gZXJyOwogCWR1bW15ID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWR1bW15LT5jYXJkID0gY2FyZDsKKwlmb3IgKG1kbCA9IGR1bW15X21vZGVsczsgKm1kbCAmJiBtb2RlbFtkZXZdOyBtZGwrKykgeworCQlpZiAoc3RyY21wKG1vZGVsW2Rldl0sICgqbWRsKS0+bmFtZSkgPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSJzbmQtZHVtbXk6IFVzaW5nIG1vZGVsICclcycgZm9yIGNhcmQgJWlcbiIsCisJCQkJKCptZGwpLT5uYW1lLCBjYXJkLT5udW1iZXIpOworCQkJbSA9IGR1bW15LT5tb2RlbCA9ICptZGw7CisJCQlicmVhazsKKwkJfQorCX0KIAlmb3IgKGlkeCA9IDA7IGlkeCA8IE1BWF9QQ01fREVWSUNFUyAmJiBpZHggPCBwY21fZGV2c1tkZXZdOyBpZHgrKykgewogCQlpZiAocGNtX3N1YnN0cmVhbXNbZGV2XSA8IDEpCiAJCQlwY21fc3Vic3RyZWFtc1tkZXZdID0gMTsKQEAgLTk2Niw2ICsxMDA5LDMzIEBACiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBfX25vZGV2OwogCX0KKworCWR1bW15LT5wY21faHcgPSBkdW1teV9wY21faGFyZHdhcmU7CisJaWYgKG0pIHsKKwkJaWYgKG0tPmZvcm1hdHMpCisJCQlkdW1teS0+cGNtX2h3LmZvcm1hdHMgPSBtLT5mb3JtYXRzOworCQlpZiAobS0+YnVmZmVyX2J5dGVzX21heCkKKwkJCWR1bW15LT5wY21faHcuYnVmZmVyX2J5dGVzX21heCA9IG0tPmJ1ZmZlcl9ieXRlc19tYXg7CisJCWlmIChtLT5wZXJpb2RfYnl0ZXNfbWluKQorCQkJZHVtbXktPnBjbV9ody5wZXJpb2RfYnl0ZXNfbWluID0gbS0+cGVyaW9kX2J5dGVzX21pbjsKKwkJaWYgKG0tPnBlcmlvZF9ieXRlc19tYXgpCisJCQlkdW1teS0+cGNtX2h3LnBlcmlvZF9ieXRlc19tYXggPSBtLT5wZXJpb2RfYnl0ZXNfbWF4OworCQlpZiAobS0+cGVyaW9kc19taW4pCisJCQlkdW1teS0+cGNtX2h3LnBlcmlvZHNfbWluID0gbS0+cGVyaW9kc19taW47CisJCWlmIChtLT5wZXJpb2RzX21heCkKKwkJCWR1bW15LT5wY21faHcucGVyaW9kc19tYXggPSBtLT5wZXJpb2RzX21heDsKKwkJaWYgKG0tPnJhdGVzKQorCQkJZHVtbXktPnBjbV9ody5yYXRlcyA9IG0tPnJhdGVzOworCQlpZiAobS0+cmF0ZV9taW4pCisJCQlkdW1teS0+cGNtX2h3LnJhdGVfbWluID0gbS0+cmF0ZV9taW47CisJCWlmIChtLT5yYXRlX21heCkKKwkJCWR1bW15LT5wY21faHcucmF0ZV9tYXggPSBtLT5yYXRlX21heDsKKwkJaWYgKG0tPmNoYW5uZWxzX21pbikKKwkJCWR1bW15LT5wY21faHcuY2hhbm5lbHNfbWluID0gbS0+Y2hhbm5lbHNfbWluOworCQlpZiAobS0+Y2hhbm5lbHNfbWF4KQorCQkJZHVtbXktPnBjbV9ody5jaGFubmVsc19tYXggPSBtLT5jaGFubmVsc19tYXg7CisJfQorCiAJZXJyID0gc25kX2NhcmRfZHVtbXlfbmV3X21peGVyKGR1bW15KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBfX25vZGV2OwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92eC92eF9wY20uYyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfcGNtLmMKaW5kZXggNjY0NGQwMC4uMzVhMmY3MSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF9wY20uYworKysgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3BjbS5jCkBAIC00Niw3ICs0Niw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KQEAgLTU2LDU1ICs1NSw2IEBACiAKIAogLyoKLSAqIHdlIHVzZSBhIHZtYWxsb2MnZWQgKHNnLSlidWZmZXIKLSAqLwotCi0vKiBnZXQgdGhlIHBoeXNpY2FsIHBhZ2UgcG9pbnRlciBvbiB0aGUgZ2l2ZW4gb2Zmc2V0ICovCi1zdGF0aWMgc3RydWN0IHBhZ2UgKnNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0Jdm9pZCAqcGFnZXB0ciA9IHN1YnMtPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OwotCXJldHVybiB2bWFsbG9jX3RvX3BhZ2UocGFnZXB0cik7Ci19Ci0KLS8qCi0gKiBhbGxvY2F0ZSBhIGJ1ZmZlciB2aWEgdm1hbGxvY18zMigpLgotICogY2FsbGVkIGZyb20gaHdfcGFyYW1zCi0gKiBOT1RFOiB0aGlzIG1heSBiZSBjYWxsZWQgbm90IG9ubHkgb25jZSBwZXIgcGNtIG9wZW4hCi0gKi8KLXN0YXRpYyBpbnQgc25kX3BjbV9hbGxvY192bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsIHNpemVfdCBzaXplKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzLT5ydW50aW1lOwotCWlmIChydW50aW1lLT5kbWFfYXJlYSkgewotCQkvKiBhbHJlYWR5IGFsbG9jYXRlZCAqLwotCQlpZiAocnVudGltZS0+ZG1hX2J5dGVzID49IHNpemUpCi0JCQlyZXR1cm4gMDsgLyogYWxyZWFkeSBlbm91Z2ggbGFyZ2UgKi8KLQkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCX0KLQlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2NfMzIoc2l6ZSk7Ci0JaWYgKCEgcnVudGltZS0+ZG1hX2FyZWEpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChydW50aW1lLT5kbWFfYXJlYSwgMCwgc2l6ZSk7Ci0JcnVudGltZS0+ZG1hX2J5dGVzID0gc2l6ZTsKLQlyZXR1cm4gMTsgLyogY2hhbmdlZCAqLwotfQotCi0vKgotICogZnJlZSB0aGUgYnVmZmVyLgotICogY2FsbGVkIGZyb20gaHdfZnJlZSBjYWxsYmFjawotICogTk9URTogdGhpcyBtYXkgYmUgY2FsbGVkIG5vdCBvbmx5IG9uY2UgcGVyIHBjbSBvcGVuIQotICovCi1zdGF0aWMgaW50IHNuZF9wY21fZnJlZV92bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7Ci0KLQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7Ci0JcnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOwotCXJldHVybiAwOwotfQotCi0KLS8qCiAgKiByZWFkIHRocmVlIHBlbmRpbmcgcGNtIGJ5dGVzIHZpYSBpbmIoKQogICovCiBzdGF0aWMgdm9pZCB2eF9wY21fcmVhZF9wZXJfYnl0ZXMoc3RydWN0IHZ4X2NvcmUgKmNoaXAsIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUsCkBAIC04NjUsNyArODE1LDggQEAKIHN0YXRpYyBpbnQgdnhfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsCiAJCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKIHsKLQlyZXR1cm4gc25kX3BjbV9hbGxvY192bWFsbG9jX2J1ZmZlcihzdWJzLCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCXJldHVybiBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jXzMyX2J1ZmZlcgorCQkJCQkoc3VicywgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKIH0KIAogLyoKQEAgLTg3Myw3ICs4MjQsNyBAQAogICovCiBzdGF0aWMgaW50IHZ4X3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicykKIHsKLQlyZXR1cm4gc25kX3BjbV9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnMpOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnMpOwogfQogCiAvKgpAQCAtOTUzLDcgKzkwNCw4IEBACiAJLnByZXBhcmUgPQl2eF9wY21fcHJlcGFyZSwKIAkudHJpZ2dlciA9CXZ4X3BjbV90cmlnZ2VyLAogCS5wb2ludGVyID0JdnhfcGNtX3BsYXliYWNrX3BvaW50ZXIsCi0JLnBhZ2UgPQkJc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlLAorCS5wYWdlID0JCXNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPQkJc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogCkBAIC0xMTczLDcgKzExMjUsOCBAQAogCS5wcmVwYXJlID0JdnhfcGNtX3ByZXBhcmUsCiAJLnRyaWdnZXIgPQl2eF9wY21fdHJpZ2dlciwKIAkucG9pbnRlciA9CXZ4X3BjbV9jYXB0dXJlX3BvaW50ZXIsCi0JLnBhZ2UgPQkJc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlLAorCS5wYWdlID0JCXNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPQkJc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvS2NvbmZpZyBiL3NvdW5kL2lzYS9LY29uZmlnCmluZGV4IDAyZmU4MWMuLjc1NWEwYTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9LY29uZmlnCisrKyBiL3NvdW5kL2lzYS9LY29uZmlnCkBAIC02MywxNSArNjMsMTYgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1hZDE4NDguCiAKIGNvbmZpZyBTTkRfQUxTMTAwCi0JdHJpc3RhdGUgIkF2YW5jZSBMb2dpYyBBTFMxMDAvQUxTMTIwIgorCXRyaXN0YXRlICJEaWFtb25kIFRlY2guIERULTAxOXggYW5kIEF2YW5jZSBMb2dpYyBBTFN4eHgiCiAJZGVwZW5kcyBvbiBQTlAKIAlzZWxlY3QgSVNBUE5QCiAJc2VsZWN0IFNORF9PUEwzX0xJQgogCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKIAlzZWxlY3QgU05EX1NCMTZfRFNQCiAJaGVscAotCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHNvdW5kY2FyZHMgYmFzZWQgb24gQXZhbmNlCi0JICBMb2dpYyBBTFMxMDAsIEFMUzExMCwgQUxTMTIwIGFuZCBBTFMyMDAgY2hpcHMuCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmRjYXJkcyBiYXNlZCBvbiB0aGUKKwkgIERpYW1vbmQgVGVjaG5vbG9naWVzIERULTAxOVggb3IgQXZhbmNlIExvZ2ljIGNoaXBzOiBBTFMwMDcsCisJICBBTFMxMDAsIEFMUzExMCwgQUxTMTIwIGFuZCBBTFMyMDAgY2hpcHMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1hbHMxMDAuCkBAIC0xMjcsMjAgKzEyOCw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtY3M0MjM2LgogCi1jb25maWcgU05EX0RUMDE5WAotCXRyaXN0YXRlICJEaWFtb25kIFRlY2hub2xvZ2llcyBEVC0wMTlYLCBBdmFuY2UgTG9naWMgQUxTLTAwNyIKLQlkZXBlbmRzIG9uIFBOUAotCXNlbGVjdCBJU0FQTlAKLQlzZWxlY3QgU05EX09QTDNfTElCCi0Jc2VsZWN0IFNORF9NUFU0MDFfVUFSVAotCXNlbGVjdCBTTkRfU0IxNl9EU1AKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmRjYXJkcyBiYXNlZCBvbiB0aGUKLQkgIERpYW1vbmQgVGVjaG5vbG9naWVzIERULTAxOVggb3IgQXZhbmNlIExvZ2ljIEFMUy0wMDcgY2hpcHMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHNuZC1kdDAxOXguCi0KIGNvbmZpZyBTTkRfRVM5NjgKIAl0cmlzdGF0ZSAiR2VuZXJpYyBFU1MgRVM5NjggZHJpdmVyIgogCWRlcGVuZHMgb24gUE5QCkBAIC0yNTIsNiArMjM5LDIyIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtaW50ZXJ3YXZlLXN0Yi4KIAorY29uZmlnIFNORF9KQVpaMTYKKwl0cmlzdGF0ZSAiTWVkaWEgVmlzaW9uIEphenoxNiBjYXJkIGFuZCBjb21wYXRpYmxlcyIKKwlzZWxlY3QgU05EX09QTDNfTElCCisJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAorCXNlbGVjdCBTTkRfU0I4X0RTUAorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBzb3VuZGNhcmRzIGJhc2VkIG9uIHRoZQorCSAgTWVkaWEgVmlzaW9uIEphenoxNiBjaGlwc2V0OiBkaWdpdGFsIGNoaXAgTVZEMTIxNiAoSmF6ejE2KSwKKwkgIGNvZGVjIE1WQTQxNiAoQ1M0MjE2KSBhbmQgbWl4ZXIgTVZBNTE0IChJQ1MyNTE0KS4KKwkgIE1lZGlhIFZpc2lvbidzIEphenoxNiBjYXJkcyB3ZXJlIHNvbGQgdW5kZXIgbmFtZXMgUHJvIFNvbmljIDE2LAorCSAgUHJlbWl1bSAzLUQgYW5kIFBybyAzLUQuIFRoZXJlIHdlcmUgYWxzbyBPRU1zIGNhcmRzIHdpdGggdGhlCisJICBKYXp6MTYgY2hpcHNldC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWphenoxNi4KKwogY29uZmlnIFNORF9PUEwzU0EyCiAJdHJpc3RhdGUgIllhbWFoYSBPUEwzLVNBMi9TQTMiCiAJc2VsZWN0IFNORF9PUEwzX0xJQgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL01ha2VmaWxlIGIvc291bmQvaXNhL01ha2VmaWxlCmluZGV4IGI5MDZiOWEuLmM3M2QzMGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9NYWtlZmlsZQorKysgYi9zb3VuZC9pc2EvTWFrZWZpbGUKQEAgLTcsNyArNyw2IEBACiBzbmQtYWxzMTAwLW9ianMgOj0gYWxzMTAwLm8KIHNuZC1henQyMzIwLW9ianMgOj0gYXp0MjMyMC5vCiBzbmQtY21pODMzMC1vYmpzIDo9IGNtaTgzMzAubwotc25kLWR0MDE5eC1vYmpzIDo9IGR0MDE5eC5vCiBzbmQtZXMxOHh4LW9ianMgOj0gZXMxOHh4Lm8KIHNuZC1vcGwzc2EyLW9ianMgOj0gb3BsM3NhMi5vCiBzbmQtc2M2MDAwLW9ianMgOj0gc2M2MDAwLm8KQEAgLTE5LDcgKzE4LDYgQEAKIG9iai0kKENPTkZJR19TTkRfQUxTMTAwKSArPSBzbmQtYWxzMTAwLm8KIG9iai0kKENPTkZJR19TTkRfQVpUMjMyMCkgKz0gc25kLWF6dDIzMjAubwogb2JqLSQoQ09ORklHX1NORF9DTUk4MzMwKSArPSBzbmQtY21pODMzMC5vCi1vYmotJChDT05GSUdfU05EX0RUMDE5WCkgKz0gc25kLWR0MDE5eC5vCiBvYmotJChDT05GSUdfU05EX0VTMThYWCkgKz0gc25kLWVzMTh4eC5vCiBvYmotJChDT05GSUdfU05EX09QTDNTQTIpICs9IHNuZC1vcGwzc2EyLm8KIG9iai0kKENPTkZJR19TTkRfU0M2MDAwKSArPSBzbmQtc2M2MDAwLm8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hbHMxMDAuYyBiL3NvdW5kL2lzYS9hbHMxMDAuYwppbmRleCA1ZmQ1MmU0Li4yMGJlY2M4IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWxzMTAwLmMKKysrIGIvc291bmQvaXNhL2FsczEwMC5jCkBAIC0yLDkgKzIsMTMgQEAKIC8qCiAgICAgY2FyZC1hbHMxMDAuYyAtIGRyaXZlciBmb3IgQXZhbmNlIExvZ2ljIEFMUzEwMCBiYXNlZCBzb3VuZGNhcmRzLgogICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIGJ5IE1hc3NpbW8gUGljY2lvbmkgPGRhZmFzdGlkaW9AbGliZXJvLml0PgorICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIGJ5IE1hc3NpbW8gUGljY2lvbmkgPGRhZmFzdGlkaW9AbGliZXJvLml0PgogCiAgICAgVGhhbmtzIHRvIFBpZXJmcmFuY2VzY28gJ3FNMicgUGFzc2VyaW5pLgogCisgICAgR2VuZXJhbGlzZWQgZm9yIHNvdW5kY2FyZHMgYmFzZWQgb24gRFQtMDE5NiBhbmQgQUxTLTAwNyBjaGlwcworICAgIGJ5IEpvbmF0aGFuIFdvaXRoZSA8andvaXRoZUBwaHlzaWNzLmFkZWxhaWRlLmVkdS5hdT46IEp1bmUgMjAwMi4KKwogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMzMsMTAgKzM3LDEwIEBACiAKICNkZWZpbmUgUEZYICJhbHMxMDA6ICIKIAotTU9EVUxFX0FVVEhPUigiTWFzc2ltbyBQaWNjaW9uaSA8ZGFmYXN0aWRpb0BsaWJlcm8uaXQ+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkF2YW5jZSBMb2dpYyBBTFMxWDAiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0F2YW5jZSBMb2dpYyxBTFMxMDAgLSBQUk8xNlBOUH0sIgorTU9EVUxFX0RFU0NSSVBUSU9OKCJBdmFuY2UgTG9naWMgQUxTMDA3L0FMUzFYMCIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7RGlhbW9uZCBUZWNobm9sb2dpZXMgRFQtMDE5WH0sIgorCQkie0F2YW5jZSBMb2dpYyBBTFMtMDA3fX0iCisJCSJ7e0F2YW5jZSBMb2dpYyxBTFMxMDAgLSBQUk8xNlBOUH0sIgogCSAgICAgICAgIntBdmFuY2UgTG9naWMsQUxTMTEwfSwiCiAJICAgICAgICAie0F2YW5jZSBMb2dpYyxBTFMxMjB9LCIKIAkgICAgICAgICJ7QXZhbmNlIExvZ2ljLEFMUzIwMH0sIgpAQCAtNDUsOSArNDksMTIgQEAKIAkgICAgICAgICJ7QXZhbmNlIExvZ2ljLEFMUzEyMH0sIgogCSAgICAgICAgIntSVEwsUlRMMzAwMH19Iik7CiAKK01PRFVMRV9BVVRIT1IoIk1hc3NpbW8gUGljY2lvbmkgPGRhZmFzdGlkaW9AbGliZXJvLml0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwkvKiBJbmRleCAwLU1BWCAqLwogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCi1zdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9JU0FQTlA7IC8qIEVuYWJsZSB0aGlzIGNhcmQgKi8KK3N0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFOwkvKiBFbmFibGUgdGhpcyBjYXJkICovCiBzdGF0aWMgbG9uZyBwb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogUG5QIHNldHVwICovCiBzdGF0aWMgbG9uZyBtcHVfcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CS8qIFBuUCBzZXR1cCAqLwogc3RhdGljIGxvbmcgZm1fcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CS8qIFBuUCBzZXR1cCAqLwpAQCAtNTcsMTQgKzY0LDE1IEBACiBzdGF0aWMgaW50IGRtYTE2W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRE1BOwkvKiBQblAgc2V0dXAgKi8KIAogbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBhbHMxMDAgYmFzZWQgc291bmRjYXJkLiIpOworTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBBdmFuY2UgTG9naWMgYmFzZWQgc291bmRjYXJkLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBhbHMxMDAgYmFzZWQgc291bmRjYXJkLiIpOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgQXZhbmNlIExvZ2ljIGJhc2VkIHNvdW5kY2FyZC4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgYWxzMTAwIGJhc2VkIHNvdW5kY2FyZC4iKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIEF2YW5jZSBMb2dpYyBiYXNlZCBzb3VuZGNhcmQuIik7CisKK01PRFVMRV9BTElBUygic25kLWR0MDE5eCIpOwogCiBzdHJ1Y3Qgc25kX2NhcmRfYWxzMTAwIHsKLQlpbnQgZGV2X25vOwogCXN0cnVjdCBwbnBfZGV2ICpkZXY7CiAJc3RydWN0IHBucF9kZXYgKmRldm1wdTsKIAlzdHJ1Y3QgcG5wX2RldiAqZGV2b3BsOwpAQCAtNzIsMjUgKzgwLDQzIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCBzbmRfYWxzMTAwX3BucGlkc1tdID0geworCS8qIERUMTk3QTMwICovCisJeyAuaWQgPSAiUldCMTY4OCIsCisJICAuZGV2cyA9IHsgeyAiQEBAMDAwMSIgfSwgeyAiQFhAMDAwMSIgfSwgeyAiQEhAMDAwMSIgfSB9LAorCSAgLmRyaXZlcl9kYXRhID0gU0JfSFdfRFQwMTlYIH0sCisJLyogRFQwMTk2IC8gQUxTLTAwNyAqLworCXsgLmlkID0gIkFMUzAwMDciLAorCSAgLmRldnMgPSB7IHsgIkBAQDAwMDEiIH0sIHsgIkBYQDAwMDEiIH0sIHsgIkBIQDAwMDEiIH0gfSwKKwkgIC5kcml2ZXJfZGF0YSA9IFNCX0hXX0RUMDE5WCB9LAogCS8qIEFMUzEwMCAtIFBSTzE2UE5QICovCi0JeyAuaWQgPSAiQUxTMDAwMSIsIC5kZXZzID0geyB7ICJAQEAwMDAxIiB9LCB7ICJAWEAwMDAxIiB9LCB7ICJASEAwMDAxIiB9IH0gfSwKKwl7IC5pZCA9ICJBTFMwMDAxIiwKKwkgIC5kZXZzID0geyB7ICJAQEAwMDAxIiB9LCB7ICJAWEAwMDAxIiB9LCB7ICJASEAwMDAxIiB9IH0sCisJICAuZHJpdmVyX2RhdGEgPSBTQl9IV19BTFMxMDAgfSwKIAkvKiBBTFMxMTAgLSBNRjEwMDAgLSBEaWdpbWF0ZSAzRCBTb3VuZCAqLwotCXsgLmlkID0gIkFMUzAxMTAiLCAuZGV2cyA9IHsgeyAiQEBAMTAwMSIgfSwgeyAiQFhAMTAwMSIgfSwgeyAiQEhAMTAwMSIgfSB9IH0sCisJeyAuaWQgPSAiQUxTMDExMCIsCisJICAuZGV2cyA9IHsgeyAiQEBAMTAwMSIgfSwgeyAiQFhAMTAwMSIgfSwgeyAiQEhAMTAwMSIgfSB9LAorCSAgLmRyaXZlcl9kYXRhID0gU0JfSFdfQUxTMTAwIH0sCiAJLyogQUxTMTIwICovCi0JeyAuaWQgPSAiQUxTMDEyMCIsIC5kZXZzID0geyB7ICJAQEAyMDAxIiB9LCB7ICJAWEAyMDAxIiB9LCB7ICJASEAyMDAxIiB9IH0gfSwKKwl7IC5pZCA9ICJBTFMwMTIwIiwKKwkgIC5kZXZzID0geyB7ICJAQEAyMDAxIiB9LCB7ICJAWEAyMDAxIiB9LCB7ICJASEAyMDAxIiB9IH0sCisJICAuZHJpdmVyX2RhdGEgPSBTQl9IV19BTFMxMDAgfSwKIAkvKiBBTFMyMDAgKi8KLQl7IC5pZCA9ICJBTFMwMjAwIiwgLmRldnMgPSB7IHsgIkBAQDAwMjAiIH0sIHsgIkBYQDAwMjAiIH0sIHsgIkBIQDAwMDEiIH0gfSB9LAorCXsgLmlkID0gIkFMUzAyMDAiLAorCSAgLmRldnMgPSB7IHsgIkBAQDAwMjAiIH0sIHsgIkBYQDAwMjAiIH0sIHsgIkBIQDAwMDEiIH0gfSwKKwkgIC5kcml2ZXJfZGF0YSA9IFNCX0hXX0FMUzEwMCB9LAogCS8qIEFMUzIwMCBPRU0gKi8KLQl7IC5pZCA9ICJBTFMwMjAwIiwgLmRldnMgPSB7IHsgIkBAQDAwMjAiIH0sIHsgIkBYQDAwMjAiIH0sIHsgIkBIQDAwMjAiIH0gfSB9LAorCXsgLmlkID0gIkFMUzAyMDAiLAorCSAgLmRldnMgPSB7IHsgIkBAQDAwMjAiIH0sIHsgIkBYQDAwMjAiIH0sIHsgIkBIQDAwMjAiIH0gfSwKKwkgIC5kcml2ZXJfZGF0YSA9IFNCX0hXX0FMUzEwMCB9LAogCS8qIFJUTDMwMDAgKi8KLQl7IC5pZCA9ICJSVEwzMDAwIiwgLmRldnMgPSB7IHsgIkBAQDIwMDEiIH0sIHsgIkBYQDIwMDEiIH0sIHsgIkBIQDIwMDEiIH0gfSB9LAotCXsgLmlkID0gIiIsIH0gLyogZW5kICovCisJeyAuaWQgPSAiUlRMMzAwMCIsCisJICAuZGV2cyA9IHsgeyAiQEBAMjAwMSIgfSwgeyAiQFhAMjAwMSIgfSwgeyAiQEhAMjAwMSIgfSB9LAorCSAgLmRyaXZlcl9kYXRhID0gU0JfSFdfQUxTMTAwIH0sCisJeyAuaWQgPSAiIiB9IC8qIGVuZCAqLwogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwbnBfY2FyZCwgc25kX2FsczEwMF9wbnBpZHMpOwogCi0jZGVmaW5lIERSSVZFUl9OQU1FCSJzbmQtY2FyZC1hbHMxMDAiCi0KIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX2FsczEwMF9wbnAoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkX2FsczEwMCAqYWNhcmQsCiAJCQkJCSBzdHJ1Y3QgcG5wX2NhcmRfbGluayAqY2FyZCwKIAkJCQkJIGNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKmlkKQpAQCAtMTEzLDggKzEzOSwxMiBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAlwb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKLQlkbWE4W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDEpOwotCWRtYTE2W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDApOworCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gU0JfSFdfRFQwMTlYKQorCQlkbWE4W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDApOworCWVsc2UgeworCQlkbWE4W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDEpOworCQlkbWExNltkZXZdID0gcG5wX2RtYShwZGV2LCAwKTsKKwl9CiAJaXJxW2Rldl0gPSBwbnBfaXJxKHBkZXYsIDApOwogCiAJcGRldiA9IGFjYXJkLT5kZXZtcHU7CkBAIC0xNzUsMjIgKzIwNSwzMyBAQAogCX0KIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2FyZC0+Y2FyZC0+ZGV2KTsKIAotCWlmICgoZXJyb3IgPSBzbmRfc2Jkc3BfY3JlYXRlKGNhcmQsIHBvcnRbZGV2XSwKLQkJCQkgICAgICBpcnFbZGV2XSwKLQkJCQkgICAgICBzbmRfc2IxNmRzcF9pbnRlcnJ1cHQsCi0JCQkJICAgICAgZG1hOFtkZXZdLAotCQkJCSAgICAgIGRtYTE2W2Rldl0sCi0JCQkJICAgICAgU0JfSFdfQUxTMTAwLCAmY2hpcCkpIDwgMCkgeworCWlmIChwaWQtPmRyaXZlcl9kYXRhID09IFNCX0hXX0RUMDE5WCkKKwkJZG1hMTZbZGV2XSA9IC0xOworCisJZXJyb3IgPSBzbmRfc2Jkc3BfY3JlYXRlKGNhcmQsIHBvcnRbZGV2XSwgaXJxW2Rldl0sCisJCQkJICBzbmRfc2IxNmRzcF9pbnRlcnJ1cHQsCisJCQkJICBkbWE4W2Rldl0sIGRtYTE2W2Rldl0sCisJCQkJICBwaWQtPmRyaXZlcl9kYXRhLAorCQkJCSAgJmNoaXApOworCWlmIChlcnJvciA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAlhY2FyZC0+Y2hpcCA9IGNoaXA7CiAKLQlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQUxTMTAwIik7Ci0Jc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkF2YW5jZSBMb2dpYyBBTFMxMDAiKTsKLQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMsICVzIGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCYlZCIsCi0JCWNhcmQtPnNob3J0bmFtZSwgY2hpcC0+bmFtZSwgY2hpcC0+cG9ydCwKLQkJaXJxW2Rldl0sIGRtYThbZGV2XSwgZG1hMTZbZGV2XSk7CisJaWYgKHBpZC0+ZHJpdmVyX2RhdGEgPT0gU0JfSFdfRFQwMTlYKSB7CisJCXN0cmNweShjYXJkLT5kcml2ZXIsICJEVC0wMTlYIik7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJEaWFtb25kIFRlY2guIERULTAxOVgiKTsKKwkJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzLCAlcyBhdCAweCVseCwgaXJxICVkLCBkbWEgJWQiLAorCQkJY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5uYW1lLCBjaGlwLT5wb3J0LAorCQkJaXJxW2Rldl0sIGRtYThbZGV2XSk7CisJfSBlbHNlIHsKKwkJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFMUzEwMCIpOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQXZhbmNlIExvZ2ljIEFMUzEwMCIpOworCQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMsICVzIGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCYlZCIsCisJCQljYXJkLT5zaG9ydG5hbWUsIGNoaXAtPm5hbWUsIGNoaXAtPnBvcnQsCisJCQlpcnFbZGV2XSwgZG1hOFtkZXZdLCBkbWExNltkZXZdKTsKKwl9CiAKIAlpZiAoKGVycm9yID0gc25kX3NiMTZkc3BfcGNtKGNoaXAsIDAsIE5VTEwpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKQEAgLTIwMyw5ICsyNDQsMTkgQEAKIAl9CiAKIAlpZiAobXB1X3BvcnRbZGV2XSA+IDAgJiYgbXB1X3BvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJaWYgKHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX0FMUzEwMCwKKwkJaW50IG1wdV90eXBlID0gTVBVNDAxX0hXX0FMUzEwMDsKKworCQlpZiAobXB1X2lycVtkZXZdID09IFNORFJWX0FVVE9fSVJRKQorCQkJbXB1X2lycVtkZXZdID0gLTE7CisKKwkJaWYgKHBpZC0+ZHJpdmVyX2RhdGEgPT0gU0JfSFdfRFQwMTlYKQorCQkJbXB1X3R5cGUgPSBNUFU0MDFfSFdfTVBVNDAxOworCisJCWlmIChzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsCisJCQkJCW1wdV90eXBlLAogCQkJCQltcHVfcG9ydFtkZXZdLCAwLCAKLQkJCQkJbXB1X2lycVtkZXZdLCBJUlFGX0RJU0FCTEVELAorCQkJCQltcHVfaXJxW2Rldl0sCisJCQkJCW1wdV9pcnFbZGV2XSA+PSAwID8gSVJRRl9ESVNBQkxFRCA6IDAsCiAJCQkJCU5VTEwpIDwgMCkKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJubyBNUFUtNDAxIGRldmljZSBhdCAweCVseFxuIiwgbXB1X3BvcnRbZGV2XSk7CiAJfQpAQCAtMjkxLDcgKzM0Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZHJpdmVyIGFsczEwMF9wbnBjX2RyaXZlciA9IHsKIAkuZmxhZ3MgICAgICAgICAgPSBQTlBfRFJJVkVSX1JFU19ESVNBQkxFLAotICAgICAgICAubmFtZSAgICAgICAgICAgPSAiYWxzMTAwIiwKKwkubmFtZQkJPSAiYWxzMTAwIiwKICAgICAgICAgLmlkX3RhYmxlICAgICAgID0gc25kX2FsczEwMF9wbnBpZHMsCiAgICAgICAgIC5wcm9iZSAgICAgICAgICA9IHNuZF9hbHMxMDBfcG5wX2RldGVjdCwKICAgICAgICAgLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3Aoc25kX2FsczEwMF9wbnBfcmVtb3ZlKSwKQEAgLTMxMiw3ICszNjMsNyBAQAogCWlmICghYWxzMTAwX2RldmljZXMpIHsKIAkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmFsczEwMF9wbnBjX2RyaXZlcik7CiAjaWZkZWYgTU9EVUxFCi0JCXNuZF9wcmludGsoS0VSTl9FUlIgIm5vIEFMUzEwMCBiYXNlZCBzb3VuZGNhcmRzIGZvdW5kXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAibm8gQXZhbmNlIExvZ2ljIGJhc2VkIHNvdW5kY2FyZHMgZm91bmRcbiIpOwogI2VuZGlmCiAJCXJldHVybiAtRU5PREVWOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9kdDAxOXguYyBiL3NvdW5kL2lzYS9kdDAxOXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmNWIxYS4uMDAwMDAwMAotLS0gYS9zb3VuZC9pc2EvZHQwMTl4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjEgKzAsMCBAQAotCi0vKgotICAgIGR0MDE5eC5jIC0gZHJpdmVyIGZvciBEaWFtb25kIFRlY2hub2xvZ2llcyBEVC0wMTk3SCBiYXNlZCBzb3VuZGNhcmRzLgotICAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMiBieSBNYXNzaW1vIFBpY2Npb25pIDxkYWZhc3RpZGlvQGxpYmVyby5pdD4KLQotICAgIEdlbmVyYWxpc2VkIGZvciBzb3VuZGNhcmRzIGJhc2VkIG9uIERULTAxOTYgYW5kIEFMUy0wMDcgY2hpcHMgCi0gICAgYnkgSm9uYXRoYW4gV29pdGhlIDxqd29pdGhlQHBoeXNpY3MuYWRlbGFpZGUuZWR1LmF1PjogSnVuZSAyMDAyLgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCi0qLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbnAuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0jaW5jbHVkZSA8c291bmQvbXB1NDAxLmg+Ci0jaW5jbHVkZSA8c291bmQvb3BsMy5oPgotI2luY2x1ZGUgPHNvdW5kL3NiLmg+Ci0KLSNkZWZpbmUgUEZYICJkdDAxOXg6ICIKLQotTU9EVUxFX0FVVEhPUigiTWFzc2ltbyBQaWNjaW9uaSA8ZGFmYXN0aWRpb0BsaWJlcm8uaXQ+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkRpYW1vbmQgVGVjaG5vbG9naWVzIERULTAxOVggLyBBdmFuY2UgTG9naWMgQUxTLTAwNyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7RGlhbW9uZCBUZWNobm9sb2dpZXMgRFQtMDE5WH0sIgotCSAgICAgICAie0F2YW5jZSBMb2dpYyBBTFMtMDA3fX0iKTsKLQotc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KLXN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLwotc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEU7CS8qIEVuYWJsZSB0aGlzIGNhcmQgKi8KLXN0YXRpYyBsb25nIHBvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOwkvKiBQblAgc2V0dXAgKi8KLXN0YXRpYyBsb25nIG1wdV9wb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogUG5QIHNldHVwICovCi1zdGF0aWMgbG9uZyBmbV9wb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogUG5QIHNldHVwICovCi1zdGF0aWMgaW50IGlycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsJLyogUG5QIHNldHVwICovCi1zdGF0aWMgaW50IG1wdV9pcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CS8qIFBuUCBzZXR1cCAqLwotc3RhdGljIGludCBkbWE4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRE1BOwkvKiBQblAgc2V0dXAgKi8KLQotbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBEVC0wMTlYIGJhc2VkIHNvdW5kY2FyZC4iKTsKLW1vZHVsZV9wYXJhbV9hcnJheShpZCwgY2hhcnAsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgRFQtMDE5WCBiYXNlZCBzb3VuZGNhcmQuIik7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIERULTAxOVggYmFzZWQgc291bmRjYXJkLiIpOwotCi1zdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4IHsKLQlzdHJ1Y3QgcG5wX2RldiAqZGV2OwotCXN0cnVjdCBwbnBfZGV2ICpkZXZtcHU7Ci0Jc3RydWN0IHBucF9kZXYgKmRldm9wbDsKLQlzdHJ1Y3Qgc25kX3NiICpjaGlwOwotfTsKLQotc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgc25kX2R0MDE5eF9wbnBpZHNbXSA9IHsKLQkvKiBEVDE5N0EzMCAqLwotCXsgLmlkID0gIlJXQjE2ODgiLCAuZGV2cyA9IHsgeyAiQEBAMDAwMSIgfSwgeyAiQFhAMDAwMSIgfSwgeyAiQEhAMDAwMSIgfSwgfSB9LAotCS8qIERUMDE5NiAvIEFMUy0wMDcgKi8KLQl7IC5pZCA9ICJBTFMwMDA3IiwgLmRldnMgPSB7IHsgIkBAQDAwMDEiIH0sIHsgIkBYQDAwMDEiIH0sIHsgIkBIQDAwMDEiIH0sIH0gfSwKLQl7IC5pZCA9ICIiLCAgfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShwbnBfY2FyZCwgc25kX2R0MDE5eF9wbnBpZHMpOwotCi0KLSNkZWZpbmUgRFJJVkVSX05BTUUJInNuZC1jYXJkLWR0MDE5eCIKLQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9kdDAxOXhfcG5wKGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZF9kdDAxOXggKmFjYXJkLAotCQkJCQkgc3RydWN0IHBucF9jYXJkX2xpbmsgKmNhcmQsCi0JCQkJCSBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCi17Ci0Jc3RydWN0IHBucF9kZXYgKnBkZXY7Ci0JaW50IGVycjsKLQotCWFjYXJkLT5kZXYgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShjYXJkLCBwaWQtPmRldnNbMF0uaWQsIE5VTEwpOwotCWlmIChhY2FyZC0+ZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JYWNhcmQtPmRldm1wdSA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKGNhcmQsIHBpZC0+ZGV2c1sxXS5pZCwgTlVMTCk7Ci0JYWNhcmQtPmRldm9wbCA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKGNhcmQsIHBpZC0+ZGV2c1syXS5pZCwgTlVMTCk7Ci0KLQlwZGV2ID0gYWNhcmQtPmRldjsKLQotCWVyciA9IHBucF9hY3RpdmF0ZV9kZXYocGRldik7Ci0JaWYgKGVyciA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIkRULTAxOVggQVVESU8gcG5wIGNvbmZpZ3VyZSBmYWlsdXJlXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlwb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKLQlkbWE4W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDApOwotCWlycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKLQlzbmRfcHJpbnRkZCgiZHQwMTl4OiBmb3VuZCBhdWRpbyBpbnRlcmZhY2U6IHBvcnQ9MHglbHgsIGlycT0weCV4LCBkbWE9MHgleFxuIiwKLQkJCXBvcnRbZGV2XSxpcnFbZGV2XSxkbWE4W2Rldl0pOwotCi0JcGRldiA9IGFjYXJkLT5kZXZtcHU7Ci0JaWYgKHBkZXYgIT0gTlVMTCkgewotCQllcnIgPSBwbnBfYWN0aXZhdGVfZGV2KHBkZXYpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJcG5wX3JlbGVhc2VfY2FyZF9kZXZpY2UocGRldik7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiRFQtMDE5WCBNUFU0MDEgcG5wIGNvbmZpZ3VyZSBmYWlsdXJlLCBza2lwcGluZ1xuIik7Ci0JCQlnb3RvIF9fbXB1X2Vycm9yOwotCQl9Ci0JCW1wdV9wb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKLQkJbXB1X2lycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKLQkJc25kX3ByaW50ZGQoImR0MDE5eDogZm91bmQgTVBVLTQwMTogcG9ydD0weCVseCwgaXJxPTB4JXhcbiIsCi0JCQkgCW1wdV9wb3J0W2Rldl0sbXB1X2lycVtkZXZdKTsKLQl9IGVsc2UgewotCV9fbXB1X2Vycm9yOgotCQlhY2FyZC0+ZGV2bXB1ID0gTlVMTDsKLQkJbXB1X3BvcnRbZGV2XSA9IC0xOwotCX0KLQotCXBkZXYgPSBhY2FyZC0+ZGV2b3BsOwotCWlmIChwZGV2ICE9IE5VTEwpIHsKLQkJZXJyID0gcG5wX2FjdGl2YXRlX2RldihwZGV2KTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXBucF9yZWxlYXNlX2NhcmRfZGV2aWNlKHBkZXYpOwotCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIkRULTAxOVggT1BMMyBwbnAgY29uZmlndXJlIGZhaWx1cmUsIHNraXBwaW5nXG4iKTsKLQkJCWdvdG8gX19mbV9lcnJvcjsKLQkJfQotCQlmbV9wb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKLQkJc25kX3ByaW50ZGQoImR0MDE5eDogZm91bmQgT1BMMyBzeW50aDogcG9ydD0weCVseFxuIixmbV9wb3J0W2Rldl0pOwotCX0gZWxzZSB7Ci0JX19mbV9lcnJvcjoKLQkJYWNhcmQtPmRldm9wbCA9IE5VTEw7Ci0JCWZtX3BvcnRbZGV2XSA9IC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9kdDAxOXhfcHJvYmUoaW50IGRldiwgc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkLCBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCi17Ci0JaW50IGVycm9yOwotCXN0cnVjdCBzbmRfc2IgKmNoaXA7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCXN0cnVjdCBzbmRfY2FyZF9kdDAxOXggKmFjYXJkOwotCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKLQotCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4KSwgJmNhcmQpOwotCWlmIChlcnJvciA8IDApCi0JCXJldHVybiBlcnJvcjsKLQlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQotCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjYXJkLT5jYXJkLT5kZXYpOwotCWlmICgoZXJyb3IgPSBzbmRfY2FyZF9kdDAxOXhfcG5wKGRldiwgYWNhcmQsIHBjYXJkLCBwaWQpKSkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JaWYgKChlcnJvciA9IHNuZF9zYmRzcF9jcmVhdGUoY2FyZCwgcG9ydFtkZXZdLAotCQkJCSAgICAgIGlycVtkZXZdLAotCQkJCSAgICAgIHNuZF9zYjE2ZHNwX2ludGVycnVwdCwKLQkJCQkgICAgICBkbWE4W2Rldl0sCi0JCQkJICAgICAgLTEsCi0JCQkJICAgICAgU0JfSFdfRFQwMTlYLAotCQkJCSAgICAgICZjaGlwKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0JYWNhcmQtPmNoaXAgPSBjaGlwOwotCi0Jc3RyY3B5KGNhcmQtPmRyaXZlciwgIkRULTAxOVgiKTsKLQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiRGlhbW9uZCBUZWNoLiBEVC0wMTlYIik7Ci0Jc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzLCAlcyBhdCAweCVseCwgaXJxICVkLCBkbWEgJWQiLAotCQljYXJkLT5zaG9ydG5hbWUsIGNoaXAtPm5hbWUsIGNoaXAtPnBvcnQsCi0JCWlycVtkZXZdLCBkbWE4W2Rldl0pOwotCi0JaWYgKChlcnJvciA9IHNuZF9zYjE2ZHNwX3BjbShjaGlwLCAwLCBOVUxMKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0JaWYgKChlcnJvciA9IHNuZF9zYm1peGVyX25ldyhjaGlwKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQlpZiAobXB1X3BvcnRbZGV2XSA+IDAgJiYgbXB1X3BvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJaWYgKG1wdV9pcnFbZGV2XSA9PSBTTkRSVl9BVVRPX0lSUSkKLQkJCW1wdV9pcnFbZGV2XSA9IC0xOwotCQlpZiAoc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLAotLyoJCQkJCU1QVTQwMV9IV19TQiwqLwotCQkJCQlNUFU0MDFfSFdfTVBVNDAxLAotCQkJCQltcHVfcG9ydFtkZXZdLCAwLAotCQkJCQltcHVfaXJxW2Rldl0sCi0JCQkJCW1wdV9pcnFbZGV2XSA+PSAwID8gSVJRRl9ESVNBQkxFRCA6IDAsCi0JCQkJCU5VTEwpIDwgMCkKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJubyBNUFUtNDAxIGRldmljZSBhdCAweCVseCA/XG4iLCBtcHVfcG9ydFtkZXZdKTsKLQl9Ci0KLQlpZiAoZm1fcG9ydFtkZXZdID4gMCAmJiBmbV9wb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUKSB7Ci0JCWlmIChzbmRfb3BsM19jcmVhdGUoY2FyZCwKLQkJCQkgICAgZm1fcG9ydFtkZXZdLAotCQkJCSAgICBmbV9wb3J0W2Rldl0gKyAyLAotCQkJCSAgICBPUEwzX0hXX0FVVE8sIDAsICZvcGwzKSA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJubyBPUEwgZGV2aWNlIGF0IDB4JWx4LTB4JWx4ID9cbiIsCi0JCQkJICAgZm1fcG9ydFtkZXZdLCBmbV9wb3J0W2Rldl0gKyAyKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoZXJyb3IgPSBzbmRfb3BsM190aW1lcl9uZXcob3BsMywgMCwgMSkpIDwgMCkgewotCQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQkJcmV0dXJuIGVycm9yOwotCQkJfQotCQkJaWYgKChlcnJvciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKSkgPCAwKSB7Ci0JCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoKGVycm9yID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCXBucF9zZXRfY2FyZF9kcnZkYXRhKHBjYXJkLCBjYXJkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2RldmluaXRkYXRhIGR0MDE5eF9kZXZpY2VzOwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfZHQwMTl4X3BucF9wcm9iZShzdHJ1Y3QgcG5wX2NhcmRfbGluayAqY2FyZCwKLQkJCQkJICBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCi17Ci0Jc3RhdGljIGludCBkZXY7Ci0JaW50IHJlczsKLQotCWZvciAoIDsgZGV2IDwgU05EUlZfQ0FSRFM7IGRldisrKSB7Ci0JCWlmICghZW5hYmxlW2Rldl0pCi0JCQljb250aW51ZTsKLQkJcmVzID0gc25kX2NhcmRfZHQwMTl4X3Byb2JlKGRldiwgY2FyZCwgcGlkKTsKLQkJaWYgKHJlcyA8IDApCi0JCQlyZXR1cm4gcmVzOwotCQlkZXYrKzsKLQkJZHQwMTl4X2RldmljZXMrKzsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX2R0MDE5eF9wbnBfcmVtb3ZlKHN0cnVjdCBwbnBfY2FyZF9saW5rICogcGNhcmQpCi17Ci0Jc25kX2NhcmRfZnJlZShwbnBfZ2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCkpOwotCXBucF9zZXRfY2FyZF9kcnZkYXRhKHBjYXJkLCBOVUxMKTsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzbmRfZHQwMTl4X3BucF9zdXNwZW5kKHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBucF9nZXRfY2FyZF9kcnZkYXRhKHBjYXJkKTsKLQlzdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4ICphY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NiICpjaGlwID0gYWNhcmQtPmNoaXA7Ci0KLQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EM2hvdCk7Ci0Jc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY20pOwotCXNuZF9zYm1peGVyX3N1c3BlbmQoY2hpcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX2R0MDE5eF9wbnBfcmVzdW1lKHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCkKLXsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbnBfZ2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCk7Ci0Jc3RydWN0IHNuZF9jYXJkX2R0MDE5eCAqYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zYiAqY2hpcCA9IGFjYXJkLT5jaGlwOwotCi0Jc25kX3NiZHNwX3Jlc2V0KGNoaXApOwotCXNuZF9zYm1peGVyX3Jlc3VtZShjaGlwKTsKLQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kcml2ZXIgZHQwMTl4X3BucGNfZHJpdmVyID0gewotCS5mbGFncyAgICAgICAgICA9IFBOUF9EUklWRVJfUkVTX0RJU0FCTEUsCi0JLm5hbWUgICAgICAgICAgID0gImR0MDE5eCIsCi0JLmlkX3RhYmxlICAgICAgID0gc25kX2R0MDE5eF9wbnBpZHMsCi0JLnByb2JlICAgICAgICAgID0gc25kX2R0MDE5eF9wbnBfcHJvYmUsCi0JLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3Aoc25kX2R0MDE5eF9wbnBfcmVtb3ZlKSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IHNuZF9kdDAxOXhfcG5wX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzbmRfZHQwMTl4X3BucF9yZXN1bWUsCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9kdDAxOXhfaW5pdCh2b2lkKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBwbnBfcmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmR0MDE5eF9wbnBjX2RyaXZlcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmICghZHQwMTl4X2RldmljZXMpIHsKLQkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmR0MDE5eF9wbnBjX2RyaXZlcik7Ci0jaWZkZWYgTU9EVUxFCi0JCXNuZF9wcmludGsoS0VSTl9FUlIgIm5vIERULTAxOVggLyBBTFMtMDA3IGJhc2VkIHNvdW5kY2FyZHMgZm91bmRcbiIpOwotI2VuZGlmCi0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9kdDAxOXhfZXhpdCh2b2lkKQotewotCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZkdDAxOXhfcG5wY19kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChhbHNhX2NhcmRfZHQwMTl4X2luaXQpCi1tb2R1bGVfZXhpdChhbHNhX2NhcmRfZHQwMTl4X2V4aXQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwppbmRleCBjOGE4ZGEwLi5hNGFmNTNiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCisrKyBiL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogI2luY2x1ZGUgPHNvdW5kL3dzcy5oPgogI2luY2x1ZGUgPHNvdW5kL21wdTQwMS5oPgogI2luY2x1ZGUgPHNvdW5kL29wbDMuaD4KQEAgLTU0Niw2ICs1NDcsOTMgQEAKIAogI2lmZGVmIE9QVGk5M1gKIAorc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRiX3NjYWxlXzViaXRfM2RiX3N0ZXAsIC05MzAwLCAzMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRiX3NjYWxlXzViaXQsIC00NjUwLCAxNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRiX3NjYWxlXzRiaXRfMTJkYl9tYXgsIC0zMzAwLCAzMDAsIDApOworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX29wdGk5M3hfY29udHJvbHNbXSA9IHsKK1dTU19ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAwLAorCQlPUFRpOTNYX09VVF9MRUZULCBPUFRpOTNYX09VVF9SSUdIVCwgNywgNywgMSwgMSksCitXU1NfRE9VQkxFX1RMVigiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCU9QVGk5M1hfT1VUX0xFRlQsIE9QVGk5M1hfT1VUX1JJR0hULCAxLCAxLCAzMSwgMSwKKwkJZGJfc2NhbGVfNWJpdF8zZGJfc3RlcCksCitXU1NfRE9VQkxFX1RMVigiUENNIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCUNTNDIzMV9MRUZUX09VVFBVVCwgQ1M0MjMxX1JJR0hUX09VVFBVVCwgMCwgMCwgMzEsIDEsCisJCWRiX3NjYWxlXzViaXQpLAorV1NTX0RPVUJMRV9UTFYoIkZNIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCUNTNDIzMV9BVVgyX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgyX1JJR0hUX0lOUFVULCAxLCAxLCAxNSwgMSwKKwkJZGJfc2NhbGVfNGJpdF8xMmRiX21heCksCitXU1NfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDAsCisJCUNTNDIzMV9MRUZUX0xJTkVfSU4sIENTNDIzMV9SSUdIVF9MSU5FX0lOLCA3LCA3LCAxLCAxKSwKK1dTU19ET1VCTEVfVExWKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCUNTNDIzMV9MRUZUX0xJTkVfSU4sIENTNDIzMV9SSUdIVF9MSU5FX0lOLCAwLCAwLCAxNSwgMSwKKwkJZGJfc2NhbGVfNGJpdF8xMmRiX21heCksCitXU1NfRE9VQkxFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMCwKKwkJT1BUaTkzWF9NSUNfTEVGVF9JTlBVVCwgT1BUaTkzWF9NSUNfUklHSFRfSU5QVVQsIDcsIDcsIDEsIDEpLAorV1NTX0RPVUJMRV9UTFYoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAwLAorCQlPUFRpOTNYX01JQ19MRUZUX0lOUFVULCBPUFRpOTNYX01JQ19SSUdIVF9JTlBVVCwgMSwgMSwgMTUsIDEsCisJCWRiX3NjYWxlXzRiaXRfMTJkYl9tYXgpLAorV1NTX0RPVUJMRV9UTFYoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCUNTNDIzMV9BVVgxX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgxX1JJR0hUX0lOUFVULCAxLCAxLCAxNSwgMSwKKwkJZGJfc2NhbGVfNGJpdF8xMmRiX21heCksCitXU1NfRE9VQkxFKCJBdXggUGxheWJhY2sgU3dpdGNoIiwgMCwKKwkJT1BUaTkzMV9BVVhfTEVGVF9JTlBVVCwgT1BUaTkzMV9BVVhfUklHSFRfSU5QVVQsIDcsIDcsIDEsIDEpLAorV1NTX0RPVUJMRV9UTFYoIkF1eCBQbGF5YmFjayBWb2x1bWUiLCAwLAorCQlPUFRpOTMxX0FVWF9MRUZUX0lOUFVULCBPUFRpOTMxX0FVWF9SSUdIVF9JTlBVVCwgMSwgMSwgMTUsIDEsCisJCWRiX3NjYWxlXzRiaXRfMTJkYl9tYXgpLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgc25kX29wdGk5M3hfbWl4ZXIoc3RydWN0IHNuZF93c3MgKmNoaXApCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXVuc2lnbmVkIGludCBpZHg7CisJc3RydWN0IHNuZF9jdGxfZWxlbV9pZCBpZDEsIGlkMjsKKwlpbnQgZXJyOworCisJaWYgKHNuZF9CVUdfT04oIWNoaXAgfHwgIWNoaXAtPnBjbSkpCisJCXJldHVybiAtRUlOVkFMOworCisJY2FyZCA9IGNoaXAtPmNhcmQ7CisKKwlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCBjaGlwLT5wY20tPm5hbWUpOworCisJbWVtc2V0KCZpZDEsIDAsIHNpemVvZihpZDEpKTsKKwltZW1zZXQoJmlkMiwgMCwgc2l6ZW9mKGlkMikpOworCWlkMS5pZmFjZSA9IGlkMi5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSOworCS8qIHJlYXNzaWduIEFVWDAgc3dpdGNoIHRvIENEICovCisJc3RyY3B5KGlkMS5uYW1lLCAiQXV4IFBsYXliYWNrIFN3aXRjaCIpOworCXN0cmNweShpZDIubmFtZSwgIkNEIFBsYXliYWNrIFN3aXRjaCIpOworCWVyciA9IHNuZF9jdGxfcmVuYW1lX2lkKGNhcmQsICZpZDEsICZpZDIpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNhbm5vdCByZW5hbWUgb3B0aTkzeCBjb250cm9sXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJLyogcmVhc3NpZ24gQVVYMSBzd2l0Y2ggdG8gRk0gKi8KKwlzdHJjcHkoaWQxLm5hbWUsICJBdXggUGxheWJhY2sgU3dpdGNoIik7IGlkMS5pbmRleCA9IDE7CisJc3RyY3B5KGlkMi5uYW1lLCAiRk0gUGxheWJhY2sgU3dpdGNoIik7CisJZXJyID0gc25kX2N0bF9yZW5hbWVfaWQoY2FyZCwgJmlkMSwgJmlkMik7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ2Fubm90IHJlbmFtZSBvcHRpOTN4IGNvbnRyb2xcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKwkvKiByZW1vdmUgQVVYMSB2b2x1bWUgKi8KKwlzdHJjcHkoaWQxLm5hbWUsICJBdXggUGxheWJhY2sgVm9sdW1lIik7IGlkMS5pbmRleCA9IDE7CisJc25kX2N0bF9yZW1vdmVfaWQoY2FyZCwgJmlkMSk7CisKKwkvKiBSZXBsYWNlIFdTUyB2b2x1bWUgY29udHJvbHMgd2l0aCBPUFRpOTN4IHZvbHVtZSBjb250cm9scyAqLworCWlkMS5pbmRleCA9IDA7CisJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF9vcHRpOTN4X2NvbnRyb2xzKTsgaWR4KyspIHsKKwkJc3RyY3B5KGlkMS5uYW1lLCBzbmRfb3B0aTkzeF9jb250cm9sc1tpZHhdLm5hbWUpOworCQlzbmRfY3RsX3JlbW92ZV9pZChjYXJkLCAmaWQxKTsKKworCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLAorCQkJCXNuZF9jdGxfbmV3MSgmc25kX29wdGk5M3hfY29udHJvbHNbaWR4XSwgY2hpcCkpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX29wdGk5M3hfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3Qgc25kX29wdGk5eHggKmNoaXAgPSBkZXZfaWQ7CkBAIC03NTQsNiArODQyLDExIEBACiAJZXJyb3IgPSBzbmRfd3NzX21peGVyKGNvZGVjKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlyZXR1cm4gZXJyb3I7CisjaWZkZWYgT1BUaTkzWAorCWVycm9yID0gc25kX29wdGk5M3hfbWl4ZXIoY29kZWMpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKKyNlbmRpZgogI2lmZGVmIENTNDIzMQogCWVycm9yID0gc25kX3dzc190aW1lcihjb2RlYywgMCwgJnRpbWVyKTsKIAlpZiAoZXJyb3IgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL01ha2VmaWxlIGIvc291bmQvaXNhL3NiL01ha2VmaWxlCmluZGV4IGZhZWZmY2ViLi5hZjM2Njk2IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2IvTWFrZWZpbGUKKysrIGIvc291bmQvaXNhL3NiL01ha2VmaWxlCkBAIC0xMiw2ICsxMiw3IEBACiBzbmQtc2Jhd2Utb2JqcyA6PSBzYmF3ZS5vIGVtdTgwMDAubwogc25kLWVtdTgwMDAtc3ludGgtb2JqcyA6PSBlbXU4MDAwX3N5bnRoLm8gZW11ODAwMF9jYWxsYmFjay5vIGVtdTgwMDBfcGF0Y2gubyBlbXU4MDAwX3BjbS5vCiBzbmQtZXM5Njgtb2JqcyA6PSBlczk2OC5vCitzbmQtamF6ejE2LW9ianMgOj0gamF6ejE2Lm8KIAogIyBUb3BsZXZlbCBNb2R1bGUgRGVwZW5kZW5jeQogb2JqLSQoQ09ORklHX1NORF9TQl9DT01NT04pICs9IHNuZC1zYi1jb21tb24ubwpAQCAtMjEsNiArMjIsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TQjE2KSArPSBzbmQtc2IxNi5vCiBvYmotJChDT05GSUdfU05EX1NCQVdFKSArPSBzbmQtc2Jhd2Uubwogb2JqLSQoQ09ORklHX1NORF9FUzk2OCkgKz0gc25kLWVzOTY4Lm8KK29iai0kKENPTkZJR19TTkRfSkFaWjE2KSArPSBzbmQtamF6ejE2Lm8KIGlmZXEgKCQoQ09ORklHX1NORF9TQjE2X0NTUCkseSkKICAgb2JqLSQoQ09ORklHX1NORF9TQjE2KSArPSBzbmQtc2IxNi1jc3AubwogICBvYmotJChDT05GSUdfU05EX1NCQVdFKSArPSBzbmQtc2IxNi1jc3AubwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL2phenoxNi5jIGIvc291bmQvaXNhL3NiL2phenoxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMjFhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2Evc2IvamF6ejE2LmMKQEAgLTAsMCArMSw0MDQgQEAKKworLyoKKyAqIGphenoxNi5jIC0gZHJpdmVyIGZvciBNZWRpYSBWaXNpb24gSmF6ejE2IGJhc2VkIHNvdW5kY2FyZHMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgS3J6eXN6dG9mIEhlbHQgPGtyenlzenRvZi5oMUB3cC5wbD4KKyAqIEJhc2VkIG9uIHBhdGNoZXMgcG9zdGVkIGJ5IFJhc2sgSW5nZW1hbm4gTGFtYmVydHNlbiBhbmQgUmVuZSBIZXJtYW4uCisgKiBCYXNlZCBvbiBPU1MgU291bmQgQmxhc3RlciBkcml2ZXIuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzYS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9tcHU0MDEuaD4KKyNpbmNsdWRlIDxzb3VuZC9vcGwzLmg+CisjaW5jbHVkZSA8c291bmQvc2IuaD4KKyNkZWZpbmUgU05EUlZfTEVHQUNZX0ZJTkRfRlJFRV9JUlEKKyNkZWZpbmUgU05EUlZfTEVHQUNZX0ZJTkRfRlJFRV9ETUEKKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisKKyNkZWZpbmUgUEZYICJqYXp6MTY6ICIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYSBWaXNpb24gSmF6ejE2Iik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tNZWRpYSBWaXNpb24gPz8/IH0sIgorCQkie1JUTCxSVEwzMDAwfX0iKTsKKworTU9EVUxFX0FVVEhPUigiS3J6eXN6dG9mIEhlbHQgPGtyenlzenRvZi5oMUB3cC5wbD4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLworc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEU7CS8qIEVuYWJsZSB0aGlzIGNhcmQgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXB1X3BvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGludCBpcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CitzdGF0aWMgaW50IG1wdV9pcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CitzdGF0aWMgaW50IGRtYThbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9ETUE7CitzdGF0aWMgaW50IGRtYTE2W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRE1BOworCittb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIE1lZGlhIFZpc2lvbiBKYXp6MTYgYmFzZWQgc291bmRjYXJkLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBNZWRpYSBWaXNpb24gSmF6ejE2IGJhc2VkIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgTWVkaWEgVmlzaW9uIEphenoxNiBiYXNlZCBzb3VuZGNhcmQuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkocG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHBvcnQsICJQb3J0ICMgZm9yIGphenoxNiBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1X3BvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtcHVfcG9ydCwgIk1QVS00MDEgcG9ydCAjIGZvciBqYXp6MTYgZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KGlycSwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSVJRICMgZm9yIGphenoxNiBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1X2lycSwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobXB1X2lycSwgIk1QVS00MDEgSVJRICMgZm9yIGphenoxNiBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoZG1hOCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hOCwgIkRNQTggIyBmb3IgamF6ejE2IGRyaXZlci4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShkbWExNiwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hMTYsICJETUExNiAjIGZvciBqYXp6MTYgZHJpdmVyLiIpOworCisjZGVmaW5lIFNCX0pBWloxNl9XQUtFVVAJMHhhZgorI2RlZmluZSBTQl9KQVpaMTZfU0VUX1BPUlRTCTB4NTAKKyNkZWZpbmUgU0JfRFNQX0dFVF9KQVpaX0JSRF9SRVYJMHhmYQorI2RlZmluZSBTQl9KQVpaMTZfU0VUX0RNQUlOVFIJMHhmYgorI2RlZmluZSBTQl9EU1BfR0VUX0pBWlpfTU9ERUwJMHhmZQorCitzdHJ1Y3Qgc25kX2NhcmRfamF6ejE2IHsKKwlzdHJ1Y3Qgc25kX3NiICpjaGlwOworfTsKKworc3RhdGljIGlycXJldHVybl90IGphenoxNl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqY2hpcCkKK3sKKwlyZXR1cm4gc25kX3NiOGRzcF9pbnRlcnJ1cHQoY2hpcCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGphenoxNl9jb25maWd1cmVfcG9ydHModW5zaWduZWQgbG9uZyBwb3J0LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBtcHVfcG9ydCwgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKworCWlmICghcmVxdWVzdF9yZWdpb24oMHgyMDEsIDEsICJqYXp6MTYgY29uZmlnIikpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY29uZmlnIHBvcnQgcmVnaW9uIGlzIGFscmVhZHkgaW4gdXNlLlxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCW91dGIoU0JfSkFaWjE2X1dBS0VVUCAtIGlkeCwgMHgyMDEpOworCXVkZWxheSgxMDApOworCW91dGIoU0JfSkFaWjE2X1NFVF9QT1JUUyArIGlkeCwgMHgyMDEpOworCXVkZWxheSgxMDApOworCXZhbCA9IHBvcnQgJiAweDcwOworCXZhbCB8PSAobXB1X3BvcnQgJiAweDMwKSA+PiA0OworCW91dGIodmFsLCAweDIwMSk7CisKKwlyZWxlYXNlX3JlZ2lvbigweDIwMSwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGphenoxNl9kZXRlY3RfYm9hcmQodW5zaWduZWQgbG9uZyBwb3J0LAorCQkJCQkgdW5zaWduZWQgbG9uZyBtcHVfcG9ydCkKK3sKKwlpbnQgZXJyOworCWludCB2YWw7CisJc3RydWN0IHNuZF9zYiBjaGlwOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwb3J0LCAweDEwLCAiamF6ejE2IikpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiSS9PIHBvcnQgcmVnaW9uIGlzIGFscmVhZHkgaW4gdXNlLlxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCS8qIGp1c3QgdG8gY2FsbCBzbmRfc2Jkc3BfY29tbWFuZC9yZXNldC9nZXRfYnl0ZSgpICovCisJY2hpcC5wb3J0ID0gcG9ydDsKKworCWVyciA9IHNuZF9zYmRzcF9yZXNldCgmY2hpcCk7CisJaWYgKGVyciA8IDApCisJCWZvciAodmFsID0gMDsgdmFsIDwgNDsgdmFsKyspIHsKKwkJCWVyciA9IGphenoxNl9jb25maWd1cmVfcG9ydHMocG9ydCwgbXB1X3BvcnQsIHZhbCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlicmVhazsKKworCQkJZXJyID0gc25kX3NiZHNwX3Jlc2V0KCZjaGlwKTsKKwkJCWlmICghZXJyKQorCQkJCWJyZWFrOworCQl9CisJaWYgKGVyciA8IDApIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfdW5tYXA7CisJfQorCWlmICghc25kX3NiZHNwX2NvbW1hbmQoJmNoaXAsIFNCX0RTUF9HRVRfSkFaWl9CUkRfUkVWKSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3VubWFwOworCX0KKwl2YWwgPSBzbmRfc2Jkc3BfZ2V0X2J5dGUoJmNoaXApOworCWlmICh2YWwgPj0gMHgzMCkKKwkJc25kX3NiZHNwX2dldF9ieXRlKCZjaGlwKTsKKworCWlmICgodmFsICYgMHhmMCkgIT0gMHgxMCkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl91bm1hcDsKKwl9CisJaWYgKCFzbmRfc2Jkc3BfY29tbWFuZCgmY2hpcCwgU0JfRFNQX0dFVF9KQVpaX01PREVMKSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3VubWFwOworCX0KKwlzbmRfc2Jkc3BfZ2V0X2J5dGUoJmNoaXApOworCWVyciA9IHNuZF9zYmRzcF9nZXRfYnl0ZSgmY2hpcCk7CisJc25kX3ByaW50ZCgiTWVkaWEgVmlzaW9uIEphenoxNiBib2FyZCBkZXRlY3RlZDogcmV2IDB4JXgsIG1vZGVsIDB4JXhcbiIsCisJCSAgIHZhbCwgZXJyKTsKKworCWVyciA9IDA7CisKK2Vycl91bm1hcDoKKwlyZWxlYXNlX3JlZ2lvbihwb3J0LCAweDEwKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBqYXp6MTZfY29uZmlndXJlX2JvYXJkKHN0cnVjdCBzbmRfc2IgKmNoaXAsIGludCBtcHVfaXJxKQoreworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGphenpfaXJxX2JpdHNbXSA9IHsgMCwgMCwgMiwgMywgMCwgMSwgMCwgNCwKKwkJCQkJCSAwLCAyLCA1LCAwLCAwLCAwLCAwLCA2IH07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgamF6el9kbWFfYml0c1tdID0geyAwLCAxLCAwLCAyLCAwLCAzLCAwLCA0IH07CisKKwlpZiAoamF6el9kbWFfYml0c1tjaGlwLT5kbWE4XSA9PSAwIHx8CisJICAgIGphenpfZG1hX2JpdHNbY2hpcC0+ZG1hMTZdID09IDAgfHwKKwkgICAgamF6el9pcnFfYml0c1tjaGlwLT5pcnFdID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9KQVpaMTZfU0VUX0RNQUlOVFIpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFzbmRfc2Jkc3BfY29tbWFuZChjaGlwLAorCQkJICAgICAgIGphenpfZG1hX2JpdHNbY2hpcC0+ZG1hOF0gfAorCQkJICAgICAgIChqYXp6X2RtYV9iaXRzW2NoaXAtPmRtYTE2XSA8PCA0KSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoIXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsCisJCQkgICAgICAgamF6el9pcnFfYml0c1tjaGlwLT5pcnFdIHwKKwkJCSAgICAgICAoamF6el9pcnFfYml0c1ttcHVfaXJxXSA8PCA0KSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX2phenoxNl9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIHVuc2lnbmVkIGludCBkZXYpCit7CisJaWYgKCFlbmFibGVbZGV2XSkKKwkJcmV0dXJuIDA7CisJaWYgKHBvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAicGxlYXNlIHNwZWNpZnkgcG9ydFxuIik7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAocG9ydFtkZXZdID09IDB4MjAwIHx8IChwb3J0W2Rldl0gJiB+MHgyNzApKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImluY29ycmVjdCBwb3J0IHNwZWNpZmllZFxuIik7CisJCXJldHVybiAwOworCX0KKwlpZiAoZG1hOFtkZXZdICE9IFNORFJWX0FVVE9fRE1BICYmCisJICAgIGRtYThbZGV2XSAhPSAxICYmIGRtYThbZGV2XSAhPSAzKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImRtYTggbXVzdCBiZSAxIG9yIDNcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGRtYTE2W2Rldl0gIT0gU05EUlZfQVVUT19ETUEgJiYKKwkgICAgZG1hMTZbZGV2XSAhPSA1ICYmIGRtYTE2W2Rldl0gIT0gNykgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJkbWExNiBtdXN0IGJlIDUgb3IgN1xuIik7CisJCXJldHVybiAwOworCX0KKwlpZiAobXB1X3BvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQgJiYKKwkgICAgKG1wdV9wb3J0W2Rldl0gJiB+MHgwMzApICE9IDB4MzAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImluY29ycmVjdCBtcHVfcG9ydCBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG1wdV9pcnFbZGV2XSAhPSBTTkRSVl9BVVRPX0RNQSAmJgorCSAgICBtcHVfaXJxW2Rldl0gIT0gMiAmJiBtcHVfaXJxW2Rldl0gIT0gMyAmJgorCSAgICBtcHVfaXJxW2Rldl0gIT0gNSAmJiBtcHVfaXJxW2Rldl0gIT0gNykgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJtcHVfaXJxIG11c3QgYmUgMiwgMywgNSBvciA3XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfamF6ejE2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwgdW5zaWduZWQgaW50IGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHNuZF9jYXJkX2phenoxNiAqamF6ejE2OworCXN0cnVjdCBzbmRfc2IgKmNoaXA7CisJc3RydWN0IHNuZF9vcGwzICpvcGwzOworCXN0YXRpYyBpbnQgcG9zc2libGVfaXJxc1tdID0gezIsIDMsIDUsIDcsIDksIDEwLCAxNSwgLTF9OworCXN0YXRpYyBpbnQgcG9zc2libGVfZG1hczhbXSA9IHsxLCAzLCAtMX07CisJc3RhdGljIGludCBwb3NzaWJsZV9kbWFzMTZbXSA9IHs1LCA3LCAtMX07CisJaW50IGVyciwgeGlycSwgeGRtYTgsIHhkbWExNiwgeG1wdV9wb3J0LCB4bXB1X2lycTsKKworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfamF6ejE2KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJamF6ejE2ID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJeGlycSA9IGlycVtkZXZdOworCWlmICh4aXJxID09IFNORFJWX0FVVE9fSVJRKSB7CisJCXhpcnEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfaXJxcyk7CisJCWlmICh4aXJxIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIElSUVxuIik7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIGVycl9mcmVlOworCQl9CisJfQorCXhkbWE4ID0gZG1hOFtkZXZdOworCWlmICh4ZG1hOCA9PSBTTkRSVl9BVVRPX0RNQSkgeworCQl4ZG1hOCA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWFzOCk7CisJCWlmICh4ZG1hOCA8IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUE4XG4iKTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gZXJyX2ZyZWU7CisJCX0KKwl9CisJeGRtYTE2ID0gZG1hMTZbZGV2XTsKKwlpZiAoeGRtYTE2ID09IFNORFJWX0FVVE9fRE1BKSB7CisJCXhkbWExNiA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWFzMTYpOworCQlpZiAoeGRtYTE2IDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQTE2XG4iKTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gZXJyX2ZyZWU7CisJCX0KKwl9CisKKwl4bXB1X3BvcnQgPSBtcHVfcG9ydFtkZXZdOworCWlmICh4bXB1X3BvcnQgPT0gU05EUlZfQVVUT19QT1JUKQorCQl4bXB1X3BvcnQgPSAwOworCWVyciA9IGphenoxNl9kZXRlY3RfYm9hcmQocG9ydFtkZXZdLCB4bXB1X3BvcnQpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTWVkaWEgVmlzaW9uIEphenoxNiBib2FyZCBub3QgZGV0ZWN0ZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKwllcnIgPSBzbmRfc2Jkc3BfY3JlYXRlKGNhcmQsIHBvcnRbZGV2XSwgaXJxW2Rldl0sCisJCQkgICAgICAgamF6ejE2X2ludGVycnVwdCwKKwkJCSAgICAgICBkbWE4W2Rldl0sIGRtYTE2W2Rldl0sCisJCQkgICAgICAgU0JfSFdfSkFaWjE2LAorCQkJICAgICAgICZjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfZnJlZTsKKworCXhtcHVfaXJxID0gbXB1X2lycVtkZXZdOworCWlmICh4bXB1X2lycSA9PSBTTkRSVl9BVVRPX0lSUSB8fCBtcHVfcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkKKwkJeG1wdV9pcnEgPSAwOworCWVyciA9IGphenoxNl9jb25maWd1cmVfYm9hcmQoY2hpcCwgeG1wdV9pcnEpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTWVkaWEgVmlzaW9uIEphenoxNiBjb25maWd1cmF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJamF6ejE2LT5jaGlwID0gY2hpcDsKKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJqYXp6MTYiKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiTWVkaWEgVmlzaW9uIEphenoxNiIpOworCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsCisJCSJNZWRpYSBWaXNpb24gSmF6ejE2IGF0IDB4JWx4LCBpcnEgJWQsIGRtYTggJWQsIGRtYTE2ICVkIiwKKwkJcG9ydFtkZXZdLCB4aXJxLCB4ZG1hOCwgeGRtYTE2KTsKKworCWVyciA9IHNuZF9zYjhkc3BfcGNtKGNoaXAsIDAsIE5VTEwpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9mcmVlOworCWVyciA9IHNuZF9zYm1peGVyX25ldyhjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfZnJlZTsKKworCWVyciA9IHNuZF9vcGwzX2NyZWF0ZShjYXJkLCBjaGlwLT5wb3J0LCBjaGlwLT5wb3J0ICsgMiwKKwkJCSAgICAgIE9QTDNfSFdfQVVUTywgMSwgJm9wbDMpOworCWlmIChlcnIgPCAwKQorCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAibm8gT1BMIGRldmljZSBhdCAweCVseC0weCVseFxuIiwKKwkJCSAgIGNoaXAtPnBvcnQsIGNoaXAtPnBvcnQgKyAyKTsKKwllbHNlIHsKKwkJZXJyID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyX2ZyZWU7CisJfQorCWlmIChtcHVfcG9ydFtkZXZdID4gMCAmJiBtcHVfcG9ydFtkZXZdICE9IFNORFJWX0FVVE9fUE9SVCkgeworCQlpZiAobXB1X2lycVtkZXZdID09IFNORFJWX0FVVE9fSVJRKQorCQkJbXB1X2lycVtkZXZdID0gLTE7CisKKwkJaWYgKHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwKKwkJCQkJTVBVNDAxX0hXX01QVTQwMSwKKwkJCQkJbXB1X3BvcnRbZGV2XSwgMCwKKwkJCQkJbXB1X2lycVtkZXZdLAorCQkJCQltcHVfaXJxW2Rldl0gPj0gMCA/IElSUUZfRElTQUJMRUQgOiAwLAorCQkJCQlOVUxMKSA8IDApCisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJubyBNUFUtNDAxIGRldmljZSBhdCAweCVseFxuIiwKKwkJCQkJbXB1X3BvcnRbZGV2XSk7CisJfQorCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBkZXZwdHIpOworCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2cHRyLCBjYXJkKTsKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWU6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfamF6ejE2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIHVuc2lnbmVkIGludCBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldnB0cik7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHNuZF9qYXp6MTZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgbiwKKwkJCSAgICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfY2FyZF9qYXp6MTYgKmFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc2IgKmNoaXAgPSBhY2FyZC0+Y2hpcDsKKworCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKKwlzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbSk7CisJc25kX3NibWl4ZXJfc3VzcGVuZChjaGlwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfamF6ejE2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgbikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9jYXJkX2phenoxNiAqYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zYiAqY2hpcCA9IGFjYXJkLT5jaGlwOworCisJc25kX3NiZHNwX3Jlc2V0KGNoaXApOworCXNuZF9zYm1peGVyX3Jlc3VtZShjaGlwKTsKKwlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNuZF9qYXp6MTZfZHJpdmVyID0geworCS5tYXRjaAkJPSBzbmRfamF6ejE2X21hdGNoLAorCS5wcm9iZQkJPSBzbmRfamF6ejE2X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX2phenoxNl9yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gc25kX2phenoxNl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc25kX2phenoxNl9yZXN1bWUsCisjZW5kaWYKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiamF6ejE2IgorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbHNhX2NhcmRfamF6ejE2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaXNhX3JlZ2lzdGVyX2RyaXZlcigmc25kX2phenoxNl9kcml2ZXIsIFNORFJWX0NBUkRTKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9qYXp6MTZfZXhpdCh2b2lkKQoreworCWlzYV91bnJlZ2lzdGVyX2RyaXZlcigmc25kX2phenoxNl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhbHNhX2NhcmRfamF6ejE2X2luaXQpCittb2R1bGVfZXhpdChhbHNhX2NhcmRfamF6ejE2X2V4aXQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2I4X21haW4uYyBiL3NvdW5kL2lzYS9zYi9zYjhfbWFpbi5jCmluZGV4IDY1OGQ1NTcuLjdkODRjOWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYjhfbWFpbi5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYjhfbWFpbi5jCkBAIC0xMDYsOSArMTA2LDIxIEBACiAJc3RydWN0IHNuZF9zYiAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXVuc2lnbmVkIGludCBtaXhyZWcsIHJhdGUsIHNpemUsIGNvdW50OworCXVuc2lnbmVkIGNoYXIgZm9ybWF0OworCXVuc2lnbmVkIGNoYXIgc3RlcmVvID0gcnVudGltZS0+Y2hhbm5lbHMgPiAxOworCWludCBkbWE7CiAKIAlyYXRlID0gcnVudGltZS0+cmF0ZTsKIAlzd2l0Y2ggKGNoaXAtPmhhcmR3YXJlKSB7CisJY2FzZSBTQl9IV19KQVpaMTY6CisJCWlmIChydW50aW1lLT5mb3JtYXQgPT0gU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUpIHsKKwkJCWlmIChjaGlwLT5tb2RlICYgU0JfTU9ERV9DQVBUVVJFXzE2KQorCQkJCXJldHVybiAtRUJVU1k7CisJCQllbHNlCisJCQkJY2hpcC0+bW9kZSB8PSBTQl9NT0RFX1BMQVlCQUNLXzE2OworCQl9CisJCWNoaXAtPnBsYXliYWNrX2Zvcm1hdCA9IFNCX0RTUF9MT19PVVRQVVRfQVVUTzsKKwkJYnJlYWs7CiAJY2FzZSBTQl9IV19QUk86CiAJCWlmIChydW50aW1lLT5jaGFubmVscyA+IDEpIHsKIAkJCWlmIChzbmRfQlVHX09OKHJhdGUgIT0gU0I4X1JBVEUoMTEwMjUpICYmCkBAIC0xMzMsMTEgKzE0NSwyMSBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwlpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfUExBWUJBQ0tfMTYpIHsKKwkJZm9ybWF0ID0gc3RlcmVvID8gU0JfRFNQX1NURVJFT18xNkJJVCA6IFNCX0RTUF9NT05PXzE2QklUOworCQlkbWEgPSBjaGlwLT5kbWExNjsKKwl9IGVsc2UgeworCQlmb3JtYXQgPSBzdGVyZW8gPyBTQl9EU1BfU1RFUkVPXzhCSVQgOiBTQl9EU1BfTU9OT184QklUOworCQljaGlwLT5tb2RlIHw9IFNCX01PREVfUExBWUJBQ0tfODsKKwkJZG1hID0gY2hpcC0+ZG1hODsKKwl9CiAJc2l6ZSA9IGNoaXAtPnBfZG1hX3NpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKIAljb3VudCA9IGNoaXAtPnBfcGVyaW9kX3NpemUgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfU1BFQUtFUl9PTik7Ci0JaWYgKHJ1bnRpbWUtPmNoYW5uZWxzID4gMSkgeworCWlmIChjaGlwLT5oYXJkd2FyZSA9PSBTQl9IV19KQVpaMTYpCisJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIGZvcm1hdCk7CisJZWxzZSBpZiAoc3RlcmVvKSB7CiAJCS8qIHNldCBwbGF5YmFjayBzdGVyZW8gbW9kZSAqLwogCQlzcGluX2xvY2soJmNoaXAtPm1peGVyX2xvY2spOwogCQltaXhyZWcgPSBzbmRfc2JtaXhlcl9yZWFkKGNoaXAsIFNCX0RTUF9TVEVSRU9fU1cpOwpAQCAtMTQ3LDE1ICsxNjksMTQgQEAKIAkJLyogU291bmRibGFzdGVyIGhhcmR3YXJlIHByb2dyYW1taW5nIHJlZmVyZW5jZSBndWlkZSwgMy0yMyAqLwogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfRE1BOF9FWElUKTsKIAkJcnVudGltZS0+ZG1hX2FyZWFbMF0gPSAweDgwOwotCQlzbmRfZG1hX3Byb2dyYW0oY2hpcC0+ZG1hOCwgcnVudGltZS0+ZG1hX2FkZHIsIDEsIERNQV9NT0RFX1dSSVRFKTsKKwkJc25kX2RtYV9wcm9ncmFtKGRtYSwgcnVudGltZS0+ZG1hX2FkZHIsIDEsIERNQV9NT0RFX1dSSVRFKTsKIAkJLyogZm9yY2UgaW50ZXJydXB0ICovCi0JCWNoaXAtPm1vZGUgPSBTQl9NT0RFX0hBTFQ7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9PVVRQVVQpOwogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCAwKTsKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgMCk7CiAJfQogCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9TQU1QTEVfUkFURSk7Ci0JaWYgKHJ1bnRpbWUtPmNoYW5uZWxzID4gMSkgeworCWlmIChzdGVyZW8pIHsKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgMjU2IC0gcnVudGltZS0+cmF0ZV9kZW4gLyAyKTsKIAkJc3Bpbl9sb2NrKCZjaGlwLT5taXhlcl9sb2NrKTsKIAkJLyogc2F2ZSBvdXRwdXQgZmlsdGVyIHN0YXR1cyBhbmQgdHVybiBpdCBvZmYgKi8KQEAgLTE2OCwxMyArMTg5LDE1IEBACiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIDI1NiAtIHJ1bnRpbWUtPnJhdGVfZGVuKTsKIAl9CiAJaWYgKGNoaXAtPnBsYXliYWNrX2Zvcm1hdCAhPSBTQl9EU1BfT1VUUFVUKSB7CisJCWlmIChjaGlwLT5tb2RlICYgU0JfTU9ERV9QTEFZQkFDS18xNikKKwkJCWNvdW50IC89IDI7CiAJCWNvdW50LS07CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9CTE9DS19TSVpFKTsKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgY291bnQgJiAweGZmKTsKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgY291bnQgPj4gOCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0Jc25kX2RtYV9wcm9ncmFtKGNoaXAtPmRtYTgsIHJ1bnRpbWUtPmRtYV9hZGRyLAorCXNuZF9kbWFfcHJvZ3JhbShkbWEsIHJ1bnRpbWUtPmRtYV9hZGRyLAogCQkJc2l6ZSwgRE1BX01PREVfV1JJVEUgfCBETUFfQVVUT0lOSVQpOwogCXJldHVybiAwOwogfQpAQCAtMjEyLDcgKzIzNSw2IEBACiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9TUEVBS0VSX09GRik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0JY2hpcC0+bW9kZSA9IChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpID8gU0JfTU9ERV9QTEFZQkFDS184IDogU0JfTU9ERV9IQUxUOwogCXJldHVybiAwOwogfQogCkBAIC0yMzQsOSArMjU2LDIxIEBACiAJc3RydWN0IHNuZF9zYiAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXVuc2lnbmVkIGludCBtaXhyZWcsIHJhdGUsIHNpemUsIGNvdW50OworCXVuc2lnbmVkIGNoYXIgZm9ybWF0OworCXVuc2lnbmVkIGNoYXIgc3RlcmVvID0gcnVudGltZS0+Y2hhbm5lbHMgPiAxOworCWludCBkbWE7CiAKIAlyYXRlID0gcnVudGltZS0+cmF0ZTsKIAlzd2l0Y2ggKGNoaXAtPmhhcmR3YXJlKSB7CisJY2FzZSBTQl9IV19KQVpaMTY6CisJCWlmIChydW50aW1lLT5mb3JtYXQgPT0gU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUpIHsKKwkJCWlmIChjaGlwLT5tb2RlICYgU0JfTU9ERV9QTEFZQkFDS18xNikKKwkJCQlyZXR1cm4gLUVCVVNZOworCQkJZWxzZQorCQkJCWNoaXAtPm1vZGUgfD0gU0JfTU9ERV9DQVBUVVJFXzE2OworCQl9CisJCWNoaXAtPmNhcHR1cmVfZm9ybWF0ID0gU0JfRFNQX0xPX0lOUFVUX0FVVE87CisJCWJyZWFrOwogCWNhc2UgU0JfSFdfUFJPOgogCQlpZiAocnVudGltZS0+Y2hhbm5lbHMgPiAxKSB7CiAJCQlpZiAoc25kX0JVR19PTihyYXRlICE9IFNCOF9SQVRFKDExMDI1KSAmJgpAQCAtMjYyLDE0ICsyOTYsMjQgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJaWYgKGNoaXAtPm1vZGUgJiBTQl9NT0RFX0NBUFRVUkVfMTYpIHsKKwkJZm9ybWF0ID0gc3RlcmVvID8gU0JfRFNQX1NURVJFT18xNkJJVCA6IFNCX0RTUF9NT05PXzE2QklUOworCQlkbWEgPSBjaGlwLT5kbWExNjsKKwl9IGVsc2UgeworCQlmb3JtYXQgPSBzdGVyZW8gPyBTQl9EU1BfU1RFUkVPXzhCSVQgOiBTQl9EU1BfTU9OT184QklUOworCQljaGlwLT5tb2RlIHw9IFNCX01PREVfQ0FQVFVSRV84OworCQlkbWEgPSBjaGlwLT5kbWE4OworCX0KIAlzaXplID0gY2hpcC0+Y19kbWFfc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwogCWNvdW50ID0gY2hpcC0+Y19wZXJpb2Rfc2l6ZSA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9TUEVBS0VSX09GRik7Ci0JaWYgKHJ1bnRpbWUtPmNoYW5uZWxzID4gMSkKKwlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gU0JfSFdfSkFaWjE2KQorCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBmb3JtYXQpOworCWVsc2UgaWYgKHN0ZXJlbykKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgU0JfRFNQX1NURVJFT184QklUKTsKIAlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfU0FNUExFX1JBVEUpOwotCWlmIChydW50aW1lLT5jaGFubmVscyA+IDEpIHsKKwlpZiAoc3RlcmVvKSB7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIDI1NiAtIHJ1bnRpbWUtPnJhdGVfZGVuIC8gMik7CiAJCXNwaW5fbG9jaygmY2hpcC0+bWl4ZXJfbG9jayk7CiAJCS8qIHNhdmUgaW5wdXQgZmlsdGVyIHN0YXR1cyBhbmQgdHVybiBpdCBvZmYgKi8KQEAgLTI4MiwxMyArMzI2LDE1IEBACiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIDI1NiAtIHJ1bnRpbWUtPnJhdGVfZGVuKTsKIAl9CiAJaWYgKGNoaXAtPmNhcHR1cmVfZm9ybWF0ICE9IFNCX0RTUF9JTlBVVCkgeworCQlpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfUExBWUJBQ0tfMTYpCisJCQljb3VudCAvPSAyOwogCQljb3VudC0tOwogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfQkxPQ0tfU0laRSk7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIGNvdW50ICYgMHhmZik7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIGNvdW50ID4+IDgpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCXNuZF9kbWFfcHJvZ3JhbShjaGlwLT5kbWE4LCBydW50aW1lLT5kbWFfYWRkciwKKwlzbmRfZG1hX3Byb2dyYW0oZG1hLCBydW50aW1lLT5kbWFfYWRkciwKIAkJCXNpemUsIERNQV9NT0RFX1JFQUQgfCBETUFfQVVUT0lOSVQpOwogCXJldHVybiAwOwogfQpAQCAtMzI4LDcgKzM3NCw2IEBACiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9TUEVBS0VSX09GRik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0JY2hpcC0+bW9kZSA9IChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpID8gU0JfTU9ERV9DQVBUVVJFXzggOiBTQl9NT0RFX0hBTFQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzOSwxMyArMzg0LDIxIEBACiAKIAlzbmRfc2JfYWNrXzhiaXQoY2hpcCk7CiAJc3dpdGNoIChjaGlwLT5tb2RlKSB7Ci0JY2FzZSBTQl9NT0RFX1BMQVlCQUNLXzg6CS8qIG9rLi4gcGxheWJhY2sgaXMgYWN0aXZlICovCisJY2FzZSBTQl9NT0RFX1BMQVlCQUNLXzE2OgkvKiBvay4uIHBsYXliYWNrIGlzIGFjdGl2ZSAqLworCQlpZiAoY2hpcC0+aGFyZHdhcmUgIT0gU0JfSFdfSkFaWjE2KQorCQkJYnJlYWs7CisJCS8qIGZhbGx0aHJ1ICovCisJY2FzZSBTQl9NT0RFX1BMQVlCQUNLXzg6CiAJCXN1YnN0cmVhbSA9IGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbTsKIAkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAkJaWYgKGNoaXAtPnBsYXliYWNrX2Zvcm1hdCA9PSBTQl9EU1BfT1VUUFVUKQogCQkgICAgCXNuZF9zYjhfcGxheWJhY2tfdHJpZ2dlcihzdWJzdHJlYW0sIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKTsKIAkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwogCQlicmVhazsKKwljYXNlIFNCX01PREVfQ0FQVFVSRV8xNjoKKwkJaWYgKGNoaXAtPmhhcmR3YXJlICE9IFNCX0hXX0pBWloxNikKKwkJCWJyZWFrOworCQkvKiBmYWxsdGhydSAqLwogCWNhc2UgU0JfTU9ERV9DQVBUVVJFXzg6CiAJCXN1YnN0cmVhbSA9IGNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtOwogCQlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwpAQCAtMzYxLDEwICs0MTQsMTUgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NiICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXNpemVfdCBwdHI7CisJaW50IGRtYTsKIAotCWlmIChjaGlwLT5tb2RlICE9IFNCX01PREVfUExBWUJBQ0tfOCkKKwlpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfUExBWUJBQ0tfOCkKKwkJZG1hID0gY2hpcC0+ZG1hODsKKwllbHNlIGlmIChjaGlwLT5tb2RlICYgU0JfTU9ERV9QTEFZQkFDS18xNikKKwkJZG1hID0gY2hpcC0+ZG1hMTY7CisJZWxzZQogCQlyZXR1cm4gMDsKLQlwdHIgPSBzbmRfZG1hX3BvaW50ZXIoY2hpcC0+ZG1hOCwgY2hpcC0+cF9kbWFfc2l6ZSk7CisJcHRyID0gc25kX2RtYV9wb2ludGVyKGRtYSwgY2hpcC0+cF9kbWFfc2l6ZSk7CiAJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWJzdHJlYW0tPnJ1bnRpbWUsIHB0cik7CiB9CiAKQEAgLTM3MiwxMCArNDMwLDE1IEBACiB7CiAJc3RydWN0IHNuZF9zYiAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzaXplX3QgcHRyOworCWludCBkbWE7CiAKLQlpZiAoY2hpcC0+bW9kZSAhPSBTQl9NT0RFX0NBUFRVUkVfOCkKKwlpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfQ0FQVFVSRV84KQorCQlkbWEgPSBjaGlwLT5kbWE4OworCWVsc2UgaWYgKGNoaXAtPm1vZGUgJiBTQl9NT0RFX0NBUFRVUkVfMTYpCisJCWRtYSA9IGNoaXAtPmRtYTE2OworCWVsc2UKIAkJcmV0dXJuIDA7Ci0JcHRyID0gc25kX2RtYV9wb2ludGVyKGNoaXAtPmRtYTgsIGNoaXAtPmNfZG1hX3NpemUpOworCXB0ciA9IHNuZF9kbWFfcG9pbnRlcihkbWEsIGNoaXAtPmNfZG1hX3NpemUpOwogCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vic3RyZWFtLT5ydW50aW1lLCBwdHIpOwogfQogCkBAIC00NDYsNiArNTA5LDE0IEBACiAJCXJ1bnRpbWUtPmh3ID0gc25kX3NiOF9jYXB0dXJlOwogCX0KIAlzd2l0Y2ggKGNoaXAtPmhhcmR3YXJlKSB7CisJY2FzZSBTQl9IV19KQVpaMTY6CisJCWlmIChjaGlwLT5kbWExNiA9PSA1IHx8IGNoaXAtPmRtYTE2ID09IDcpCisJCQlydW50aW1lLT5ody5mb3JtYXRzIHw9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFOworCQlydW50aW1lLT5ody5yYXRlcyB8PSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwOworCQlydW50aW1lLT5ody5yYXRlX21pbiA9IDQwMDA7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWF4ID0gNTAwMDA7CisJCXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA9IDI7CisJCWJyZWFrOwogCWNhc2UgU0JfSFdfUFJPOgogCQlydW50aW1lLT5ody5yYXRlX21heCA9IDQ0MTAwOwogCQlydW50aW1lLT5ody5jaGFubmVsc19tYXggPSAyOwpAQCAtNDY4LDYgKzUzOSwxNCBAQAogCX0KIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0bnVtcyhydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKIAkJCQkgICAgICAmaHdfY29uc3RyYWludHNfY2xvY2spOworCWlmIChjaGlwLT5kbWE4ID4gMyB8fCBjaGlwLT5kbWExNiA+PSAwKSB7CisJCXNuZF9wY21faHdfY29uc3RyYWludF9zdGVwKHJ1bnRpbWUsIDAsCisJCQkJCSAgIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMsIDIpOworCQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcChydW50aW1lLCAwLAorCQkJCQkgICBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX0JZVEVTLCAyKTsKKwkJcnVudGltZS0+aHcuYnVmZmVyX2J5dGVzX21heCA9IDEyOCAqIDEwMjQgKiAxMDI0OworCQlydW50aW1lLT5ody5wZXJpb2RfYnl0ZXNfbWF4ID0gMTI4ICogMTAyNCAqIDEwMjQ7CisJfQogCXJldHVybiAwOwkKIH0KIApAQCAtNDgwLDYgKzU1OSwxMCBAQAogCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gTlVMTDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+b3Blbl9sb2NrLCBmbGFncyk7CiAJY2hpcC0+b3BlbiAmPSB+U0JfT1BFTl9QQ007CisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWNoaXAtPm1vZGUgJj0gflNCX01PREVfUExBWUJBQ0s7CisJZWxzZQorCQljaGlwLT5tb2RlICY9IH5TQl9NT0RFX0NBUFRVUkU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+b3Blbl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CkBAIC01MTUsNiArNTk4LDcgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBjaGlwLT5jYXJkOwogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycjsKKwlzaXplX3QgbWF4X3ByZWFsbG9jID0gNjQgKiAxMDI0OwogCiAJaWYgKHJwY20pCiAJCSpycGNtID0gTlVMTDsKQEAgLTUyNyw5ICs2MTEsMTEgQEAKIAlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmc25kX3NiOF9wbGF5YmFja19vcHMpOwogCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnNuZF9zYjhfY2FwdHVyZV9vcHMpOwogCisJaWYgKGNoaXAtPmRtYTggPiAzIHx8IGNoaXAtPmRtYTE2ID49IDApCisJCW1heF9wcmVhbGxvYyA9IDEyOCAqIDEwMjQ7CiAJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKIAkJCQkJICAgICAgc25kX2RtYV9pc2FfZGF0YSgpLAotCQkJCQkgICAgICA2NCoxMDI0LCA2NCoxMDI0KTsKKwkJCQkJICAgICAgNjQqMTAyNCwgbWF4X3ByZWFsbG9jKTsKIAogCWlmIChycGNtKQogCQkqcnBjbSA9IHBjbTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYl9jb21tb24uYyBiL3NvdW5kL2lzYS9zYi9zYl9jb21tb24uYwppbmRleCAyN2E2NTE1Li5lYWU2YzFjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2JfY29tbW9uLmMKKysrIGIvc291bmQvaXNhL3NiL3NiX2NvbW1vbi5jCkBAIC0xNzAsNiArMTcwLDkgQEAKIAljYXNlIFNCX0hXX0NTNTUzMDoKIAkJc3RyID0gIjE2IChDUzU1MzApIjsKIAkJYnJlYWs7CisJY2FzZSBTQl9IV19KQVpaMTY6CisJCXN0ciA9ICJQcm8gKEphenoxNikiOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYyBiL3NvdW5kL2lzYS9zYi9zYl9taXhlci5jCmluZGV4IDMxOGZmMGMuLjY0OTY4MjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYl9taXhlci5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYl9taXhlci5jCkBAIC01MjgsMjAgKzUyOCwxMSBAQAogICogU0IgMi4wIHNwZWNpZmljIG1peGVyIGVsZW1lbnRzCiAgKi8KIAotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjIwX2N0bF9tYXN0ZXJfcGxheV92b2wgPQotCVNCX1NJTkdMRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDIwX01BU1RFUl9ERVYsIDEsIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjIwX2N0bF9wY21fcGxheV92b2wgPQotCVNCX1NJTkdMRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDIwX1BDTV9ERVYsIDEsIDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjIwX2N0bF9zeW50aF9wbGF5X3ZvbCA9Ci0JU0JfU0lOR0xFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9GTV9ERVYsIDEsIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjIwX2N0bF9jZF9wbGF5X3ZvbCA9Ci0JU0JfU0lOR0xFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9DRF9ERVYsIDEsIDcpOwotCi1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gKnNuZF9zYjIwX2NvbnRyb2xzW10gPSB7Ci0JJnNuZF9zYjIwX2N0bF9tYXN0ZXJfcGxheV92b2wsCi0JJnNuZF9zYjIwX2N0bF9wY21fcGxheV92b2wsCi0JJnNuZF9zYjIwX2N0bF9zeW50aF9wbGF5X3ZvbCwKLQkmc25kX3NiMjBfY3RsX2NkX3BsYXlfdm9sCitzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMjBfY29udHJvbHNbXSA9IHsKKwlTQl9TSU5HTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9NQVNURVJfREVWLCAxLCA3KSwKKwlTQl9TSU5HTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9QQ01fREVWLCAxLCAzKSwKKwlTQl9TSU5HTEUoIlN5bnRoIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDIwX0ZNX0RFViwgMSwgNyksCisJU0JfU0lOR0xFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9DRF9ERVYsIDEsIDcpCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBzbmRfc2IyMF9pbml0X3ZhbHVlc1tdWzJdID0gewpAQCAtNTUyLDQxICs1NDMsMjQgQEAKIC8qCiAgKiBTQiBQcm8gc3BlY2lmaWMgbWl4ZXIgZWxlbWVudHMKICAqLwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfbWFzdGVyX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1BfTUFTVEVSX0RFViwgU0JfRFNQX01BU1RFUl9ERVYsIDUsIDEsIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfcGNtX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1BfUENNX0RFViwgU0JfRFNQX1BDTV9ERVYsIDUsIDEsIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfcGNtX3BsYXlfZmlsdGVyID0KLQlTQl9TSU5HTEUoIlBDTSBQbGF5YmFjayBGaWx0ZXIiLCBTQl9EU1BfUExBWUJBQ0tfRklMVCwgNSwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NicHJvX2N0bF9zeW50aF9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1BfRk1fREVWLCBTQl9EU1BfRk1fREVWLCA1LCAxLCA3KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2Jwcm9fY3RsX2NkX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUF9DRF9ERVYsIFNCX0RTUF9DRF9ERVYsIDUsIDEsIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfbGluZV9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUF9MSU5FX0RFViwgU0JfRFNQX0xJTkVfREVWLCA1LCAxLCA3KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2Jwcm9fY3RsX21pY19wbGF5X3ZvbCA9Ci0JU0JfU0lOR0xFKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQX01JQ19ERVYsIDEsIDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfY2FwdHVyZV9zb3VyY2UgPQorc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jb250cm9sc1tdID0geworCVNCX0RPVUJMRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFNQX01BU1RFUl9ERVYsIFNCX0RTUF9NQVNURVJfREVWLCA1LCAxLCA3KSwKKwlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLAorCQkgIFNCX0RTUF9QQ01fREVWLCBTQl9EU1BfUENNX0RFViwgNSwgMSwgNyksCisJU0JfU0lOR0xFKCJQQ00gUGxheWJhY2sgRmlsdGVyIiwgU0JfRFNQX1BMQVlCQUNLX0ZJTFQsIDUsIDEpLAorCVNCX0RPVUJMRSgiU3ludGggUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1BfRk1fREVWLCBTQl9EU1BfRk1fREVWLCA1LCAxLCA3KSwKKwlTQl9ET1VCTEUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUF9DRF9ERVYsIFNCX0RTUF9DRF9ERVYsIDUsIDEsIDcpLAorCVNCX0RPVUJMRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLAorCQkgIFNCX0RTUF9MSU5FX0RFViwgU0JfRFNQX0xJTkVfREVWLCA1LCAxLCA3KSwKKwlTQl9TSU5HTEUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1BfTUlDX0RFViwgMSwgMyksCiAJewogCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCiAJCS50eXBlID0gU0JfTUlYX0NBUFRVUkVfUFJPCi0JfTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2Jwcm9fY3RsX2NhcHR1cmVfZmlsdGVyID0KLQlTQl9TSU5HTEUoIkNhcHR1cmUgRmlsdGVyIiwgU0JfRFNQX0NBUFRVUkVfRklMVCwgNSwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NicHJvX2N0bF9jYXB0dXJlX2xvd19maWx0ZXIgPQotCVNCX1NJTkdMRSgiQ2FwdHVyZSBMb3ctUGFzcyBGaWx0ZXIiLCBTQl9EU1BfQ0FQVFVSRV9GSUxULCAzLCAxKTsKLQotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfc2Jwcm9fY29udHJvbHNbXSA9IHsKLQkmc25kX3NicHJvX2N0bF9tYXN0ZXJfcGxheV92b2wsCi0JJnNuZF9zYnByb19jdGxfcGNtX3BsYXlfdm9sLAotCSZzbmRfc2Jwcm9fY3RsX3BjbV9wbGF5X2ZpbHRlciwKLQkmc25kX3NicHJvX2N0bF9zeW50aF9wbGF5X3ZvbCwKLQkmc25kX3NicHJvX2N0bF9jZF9wbGF5X3ZvbCwKLQkmc25kX3NicHJvX2N0bF9saW5lX3BsYXlfdm9sLAotCSZzbmRfc2Jwcm9fY3RsX21pY19wbGF5X3ZvbCwKLQkmc25kX3NicHJvX2N0bF9jYXB0dXJlX3NvdXJjZSwKLQkmc25kX3NicHJvX2N0bF9jYXB0dXJlX2ZpbHRlciwKLQkmc25kX3NicHJvX2N0bF9jYXB0dXJlX2xvd19maWx0ZXIKKwl9LAorCVNCX1NJTkdMRSgiQ2FwdHVyZSBGaWx0ZXIiLCBTQl9EU1BfQ0FQVFVSRV9GSUxULCA1LCAxKSwKKwlTQl9TSU5HTEUoIkNhcHR1cmUgTG93LVBhc3MgRmlsdGVyIiwgU0JfRFNQX0NBUFRVUkVfRklMVCwgMywgMSkKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNuZF9zYnByb19pbml0X3ZhbHVlc1tdWzJdID0gewpAQCAtNTk4LDY4ICs1NzIsNDIgQEAKIC8qCiAgKiBTQjE2IHNwZWNpZmljIG1peGVyIGVsZW1lbnRzCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbWFzdGVyX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1A0X01BU1RFUl9ERVYsIChTQl9EU1A0X01BU1RFUl9ERVYgKyAxKSwgMywgMywgMzEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF8zZF9lbmhhbmNlX3N3aXRjaCA9Ci0JU0JfU0lOR0xFKCIzRCBFbmhhbmNlbWVudCBTd2l0Y2giLCBTQl9EU1A0XzNEU0UsIDAsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF90b25lX2Jhc3MgPQotCVNCX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gQmFzcyIsIFNCX0RTUDRfQkFTU19ERVYsIChTQl9EU1A0X0JBU1NfREVWICsgMSksIDQsIDQsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfdG9uZV90cmVibGUgPQotCVNCX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gVHJlYmxlIiwgU0JfRFNQNF9UUkVCTEVfREVWLCAoU0JfRFNQNF9UUkVCTEVfREVWICsgMSksIDQsIDQsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfcGNtX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1A0X1BDTV9ERVYsIChTQl9EU1A0X1BDTV9ERVYgKyAxKSwgMywgMywgMzEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9zeW50aF9jYXB0dXJlX3JvdXRlID0KLQlTQjE2X0lOUFVUX1NXKCJTeW50aCBDYXB0dXJlIFJvdXRlIiwgU0JfRFNQNF9JTlBVVF9MRUZULCBTQl9EU1A0X0lOUFVUX1JJR0hULCA2LCA1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfc3ludGhfcGxheV92b2wgPQotCVNCX0RPVUJMRSgiU3ludGggUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQNF9TWU5USF9ERVYsIChTQl9EU1A0X1NZTlRIX0RFViArIDEpLCAzLCAzLCAzMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX2NkX2NhcHR1cmVfcm91dGUgPQotCVNCMTZfSU5QVVRfU1coIkNEIENhcHR1cmUgUm91dGUiLCBTQl9EU1A0X0lOUFVUX0xFRlQsIFNCX0RTUDRfSU5QVVRfUklHSFQsIDIsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9jZF9wbGF5X3N3aXRjaCA9Ci0JU0JfRE9VQkxFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCBTQl9EU1A0X09VVFBVVF9TVywgU0JfRFNQNF9PVVRQVVRfU1csIDIsIDEsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9jZF9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1A0X0NEX0RFViwgKFNCX0RTUDRfQ0RfREVWICsgMSksIDMsIDMsIDMxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbGluZV9jYXB0dXJlX3JvdXRlID0KLQlTQjE2X0lOUFVUX1NXKCJMaW5lIENhcHR1cmUgUm91dGUiLCBTQl9EU1A0X0lOUFVUX0xFRlQsIFNCX0RTUDRfSU5QVVRfUklHSFQsIDQsIDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9saW5lX3BsYXlfc3dpdGNoID0KLQlTQl9ET1VCTEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgU0JfRFNQNF9PVVRQVVRfU1csIFNCX0RTUDRfT1VUUFVUX1NXLCA0LCAzLCAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDRfTElORV9ERVYsIChTQl9EU1A0X0xJTkVfREVWICsgMSksIDMsIDMsIDMxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbWljX2NhcHR1cmVfcm91dGUgPQotCVNCMTZfSU5QVVRfU1coIk1pYyBDYXB0dXJlIFJvdXRlIiwgU0JfRFNQNF9JTlBVVF9MRUZULCBTQl9EU1A0X0lOUFVUX1JJR0hULCAwLCAwKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbWljX3BsYXlfc3dpdGNoID0KLQlTQl9TSU5HTEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCBTQl9EU1A0X09VVFBVVF9TVywgMCwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX21pY19wbGF5X3ZvbCA9Ci0JU0JfU0lOR0xFKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQNF9NSUNfREVWLCAzLCAzMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX3BjX3NwZWFrZXJfdm9sID0KLQlTQl9TSU5HTEUoIkJlZXAgVm9sdW1lIiwgU0JfRFNQNF9TUEVBS0VSX0RFViwgNiwgMyk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX2NhcHR1cmVfdm9sID0KLQlTQl9ET1VCTEUoIkNhcHR1cmUgVm9sdW1lIiwgU0JfRFNQNF9JR0FJTl9ERVYsIChTQl9EU1A0X0lHQUlOX0RFViArIDEpLCA2LCA2LCAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfcGxheV92b2wgPQotCVNCX0RPVUJMRSgiUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQNF9PR0FJTl9ERVYsIChTQl9EU1A0X09HQUlOX0RFViArIDEpLCA2LCA2LCAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfYXV0b19taWNfZ2FpbiA9Ci0JU0JfU0lOR0xFKCJNaWMgQXV0byBHYWluIiwgU0JfRFNQNF9NSUNfQUdDLCAwLCAxKTsKLQotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfc2IxNl9jb250cm9sc1tdID0gewotCSZzbmRfc2IxNl9jdGxfbWFzdGVyX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfM2RfZW5oYW5jZV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF90b25lX2Jhc3MsCi0JJnNuZF9zYjE2X2N0bF90b25lX3RyZWJsZSwKLQkmc25kX3NiMTZfY3RsX3BjbV9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX3N5bnRoX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9zYjE2X2N0bF9zeW50aF9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX2NkX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9zYjE2X2N0bF9jZF9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX2NkX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfbGluZV9jYXB0dXJlX3JvdXRlLAotCSZzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX2xpbmVfcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9taWNfY2FwdHVyZV9yb3V0ZSwKLQkmc25kX3NiMTZfY3RsX21pY19wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX21pY19wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX3BjX3NwZWFrZXJfdm9sLAotCSZzbmRfc2IxNl9jdGxfY2FwdHVyZV92b2wsCi0JJnNuZF9zYjE2X2N0bF9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX2F1dG9fbWljX2dhaW4KK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jb250cm9sc1tdID0geworCVNCX0RPVUJMRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFNQNF9NQVNURVJfREVWLCAoU0JfRFNQNF9NQVNURVJfREVWICsgMSksIDMsIDMsIDMxKSwKKwlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLAorCQkgIFNCX0RTUDRfUENNX0RFViwgKFNCX0RTUDRfUENNX0RFViArIDEpLCAzLCAzLCAzMSksCisJU0IxNl9JTlBVVF9TVygiU3ludGggQ2FwdHVyZSBSb3V0ZSIsCisJCSAgICAgIFNCX0RTUDRfSU5QVVRfTEVGVCwgU0JfRFNQNF9JTlBVVF9SSUdIVCwgNiwgNSksCisJU0JfRE9VQkxFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLAorCQkgIFNCX0RTUDRfU1lOVEhfREVWLCAoU0JfRFNQNF9TWU5USF9ERVYgKyAxKSwgMywgMywgMzEpLAorCVNCMTZfSU5QVVRfU1coIkNEIENhcHR1cmUgUm91dGUiLAorCQkgICAgICBTQl9EU1A0X0lOUFVUX0xFRlQsIFNCX0RTUDRfSU5QVVRfUklHSFQsIDIsIDEpLAorCVNCX0RPVUJMRSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwKKwkJICBTQl9EU1A0X09VVFBVVF9TVywgU0JfRFNQNF9PVVRQVVRfU1csIDIsIDEsIDEpLAorCVNCX0RPVUJMRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1A0X0NEX0RFViwgKFNCX0RTUDRfQ0RfREVWICsgMSksIDMsIDMsIDMxKSwKKwlTQjE2X0lOUFVUX1NXKCJNaWMgQ2FwdHVyZSBSb3V0ZSIsCisJCSAgICAgIFNCX0RTUDRfSU5QVVRfTEVGVCwgU0JfRFNQNF9JTlBVVF9SSUdIVCwgMCwgMCksCisJU0JfU0lOR0xFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgU0JfRFNQNF9PVVRQVVRfU1csIDAsIDEpLAorCVNCX1NJTkdMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDRfTUlDX0RFViwgMywgMzEpLAorCVNCX1NJTkdMRSgiQmVlcCBWb2x1bWUiLCBTQl9EU1A0X1NQRUFLRVJfREVWLCA2LCAzKSwKKwlTQl9ET1VCTEUoIkNhcHR1cmUgVm9sdW1lIiwKKwkJICBTQl9EU1A0X0lHQUlOX0RFViwgKFNCX0RTUDRfSUdBSU5fREVWICsgMSksIDYsIDYsIDMpLAorCVNCX0RPVUJMRSgiUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1A0X09HQUlOX0RFViwgKFNCX0RTUDRfT0dBSU5fREVWICsgMSksIDYsIDYsIDMpLAorCVNCMTZfSU5QVVRfU1coIkxpbmUgQ2FwdHVyZSBSb3V0ZSIsCisJCSAgICAgIFNCX0RTUDRfSU5QVVRfTEVGVCwgU0JfRFNQNF9JTlBVVF9SSUdIVCwgNCwgMyksCisJU0JfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsCisJCSAgU0JfRFNQNF9PVVRQVVRfU1csIFNCX0RTUDRfT1VUUFVUX1NXLCA0LCAzLCAxKSwKKwlTQl9ET1VCTEUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1A0X0xJTkVfREVWLCAoU0JfRFNQNF9MSU5FX0RFViArIDEpLCAzLCAzLCAzMSksCisJU0JfU0lOR0xFKCJNaWMgQXV0byBHYWluIiwgU0JfRFNQNF9NSUNfQUdDLCAwLCAxKSwKKwlTQl9TSU5HTEUoIjNEIEVuaGFuY2VtZW50IFN3aXRjaCIsIFNCX0RTUDRfM0RTRSwgMCwgMSksCisJU0JfRE9VQkxFKCJUb25lIENvbnRyb2wgLSBCYXNzIiwKKwkJICBTQl9EU1A0X0JBU1NfREVWLCAoU0JfRFNQNF9CQVNTX0RFViArIDEpLCA0LCA0LCAxNSksCisJU0JfRE9VQkxFKCJUb25lIENvbnRyb2wgLSBUcmVibGUiLAorCQkgIFNCX0RTUDRfVFJFQkxFX0RFViwgKFNCX0RTUDRfVFJFQkxFX0RFViArIDEpLCA0LCA0LCAxNSkKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNuZF9zYjE2X2luaXRfdmFsdWVzW11bMl0gPSB7CkBAIC02NzgsNDYgKzYyNiwzNCBAQAogLyoKICAqIERUMDE5eCBzcGVjaWZpYyBtaXhlciBlbGVtZW50cwogICovCi1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2R0MDE5eF9jdGxfbWFzdGVyX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBTQl9EVDAxOVhfTUFTVEVSX0RFViwgU0JfRFQwMTlYX01BU1RFUl9ERVYsIDQsMCwgMTUpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9kdDAxOXhfY3RsX3BjbV9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgU0JfRFQwMTlYX1BDTV9ERVYsIFNCX0RUMDE5WF9QQ01fREVWLCA0LDAsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2N0bF9zeW50aF9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EVDAxOVhfU1lOVEhfREVWLCBTQl9EVDAxOVhfU1lOVEhfREVWLCA0LDAsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2N0bF9jZF9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EVDAxOVhfQ0RfREVWLCBTQl9EVDAxOVhfQ0RfREVWLCA0LDAsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2N0bF9taWNfcGxheV92b2wgPQotCVNCX1NJTkdMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RUMDE5WF9NSUNfREVWLCA0LCA3KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2N0bF9wY19zcGVha2VyX3ZvbCA9Ci0JU0JfU0lOR0xFKCJCZWVwIFZvbHVtZSIsIFNCX0RUMDE5WF9TUEtSX0RFViwgMCwgIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9kdDAxOXhfY3RsX2xpbmVfcGxheV92b2wgPQotCVNCX0RPVUJMRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCBTQl9EVDAxOVhfTElORV9ERVYsIFNCX0RUMDE5WF9MSU5FX0RFViwgNCwwLCAxNSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2R0MDE5eF9jdGxfcGNtX3BsYXlfc3dpdGNoID0KLQlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDIsMSwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV9zd2l0Y2ggPQotCVNCX0RPVUJMRSgiU3ludGggUGxheWJhY2sgU3dpdGNoIiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCA0LDMsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9kdDAxOXhfY3RsX2NhcHR1cmVfc291cmNlID0KK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2NvbnRyb2xzW10gPSB7CisJLyogQUxTNDAwMCBiZWxvdyBoYXMgc29tZSBwYXJ0cyB3aGljaCB3ZSBtaWdodCBiZSBsYWNraW5nLAorCSAqIGUuZy4gc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoIC0gY2hlY2sgaXQhICovCisJU0JfRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EVDAxOVhfTUFTVEVSX0RFViwgU0JfRFQwMTlYX01BU1RFUl9ERVYsIDQsIDAsIDE1KSwKKwlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLAorCQkgIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgMiwgMSwgMSksCisJU0JfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EVDAxOVhfUENNX0RFViwgU0JfRFQwMTlYX1BDTV9ERVYsIDQsIDAsIDE1KSwKKwlTQl9ET1VCTEUoIlN5bnRoIFBsYXliYWNrIFN3aXRjaCIsCisJCSAgU0JfRFQwMTlYX09VVFBVVF9TVzIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCA0LCAzLCAxKSwKKwlTQl9ET1VCTEUoIlN5bnRoIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFQwMTlYX1NZTlRIX0RFViwgU0JfRFQwMTlYX1NZTlRIX0RFViwgNCwgMCwgMTUpLAorCVNCX0RPVUJMRSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwKKwkJICBTQl9EU1A0X09VVFBVVF9TVywgU0JfRFNQNF9PVVRQVVRfU1csIDIsIDEsIDEpLAorCVNCX0RPVUJMRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EVDAxOVhfQ0RfREVWLCBTQl9EVDAxOVhfQ0RfREVWLCA0LCAwLCAxNSksCisJU0JfU0lOR0xFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgU0JfRFNQNF9PVVRQVVRfU1csIDAsIDEpLAorCVNCX1NJTkdMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RUMDE5WF9NSUNfREVWLCA0LCA3KSwKKwlTQl9TSU5HTEUoIkJlZXAgVm9sdW1lIiwgU0JfRFQwMTlYX1NQS1JfREVWLCAwLCAgNyksCisJU0JfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsCisJCSAgU0JfRFNQNF9PVVRQVVRfU1csIFNCX0RTUDRfT1VUUFVUX1NXLCA0LCAzLCAxKSwKKwlTQl9ET1VCTEUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EVDAxOVhfTElORV9ERVYsIFNCX0RUMDE5WF9MSU5FX0RFViwgNCwgMCwgMTUpLAogCXsKIAkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAogCQkudHlwZSA9IFNCX01JWF9DQVBUVVJFX0RUMDE5WAotCX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSAqc25kX2R0MDE5eF9jb250cm9sc1tdID0gewotCS8qIEFMUzQwMDAgYmVsb3cgaGFzIHNvbWUgcGFydHMgd2hpY2ggd2UgbWlnaHQgYmUgbGFja2luZywKLQkgKiBlLmcuIHNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCAtIGNoZWNrIGl0ISAqLwotCSZzbmRfZHQwMTl4X2N0bF9tYXN0ZXJfcGxheV92b2wsCi0JJnNuZF9kdDAxOXhfY3RsX3BjbV9wbGF5X3ZvbCwKLQkmc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV92b2wsCi0JJnNuZF9kdDAxOXhfY3RsX2NkX3BsYXlfdm9sLAotCSZzbmRfZHQwMTl4X2N0bF9taWNfcGxheV92b2wsCi0JJnNuZF9kdDAxOXhfY3RsX3BjX3NwZWFrZXJfdm9sLAotCSZzbmRfZHQwMTl4X2N0bF9saW5lX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfY2RfcGxheV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfc3dpdGNoLAotCSZzbmRfZHQwMTl4X2N0bF9wY21fcGxheV9zd2l0Y2gsCi0JJnNuZF9kdDAxOXhfY3RsX3N5bnRoX3BsYXlfc3dpdGNoLAotCSZzbmRfZHQwMTl4X2N0bF9jYXB0dXJlX3NvdXJjZQorCX0KIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNuZF9kdDAxOXhfaW5pdF92YWx1ZXNbXVsyXSA9IHsKQEAgLTczNSw4MiArNjcxLDM3IEBACiAvKgogICogQUxTNDAwMCBzcGVjaWZpYyBtaXhlciBlbGVtZW50cwogICovCi1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21hc3Rlcl9tb25vX3BsYXliYWNrX3N3aXRjaCA9Ci0JU0JfU0lOR0xFKCJNYXN0ZXIgTW9ubyBQbGF5YmFjayBTd2l0Y2giLCBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCwgNSwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczRrX2N0bF9tYXN0ZXJfbW9ub19jYXB0dXJlX3JvdXRlID0geworc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2NvbnRyb2xzW10gPSB7CisJU0JfRE9VQkxFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwKKwkJICBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDIsIDEsIDEpLAorCVNCX0RPVUJMRSgiU3ludGggUGxheWJhY2sgU3dpdGNoIiwKKwkJICBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDQsIDMsIDEpLAorCVNCX1NJTkdMRSgiTWljIEJvb3N0ICgrMjBkQikiLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCAwLCAweDAzKSwKKwlTQl9TSU5HTEUoIk1hc3RlciBNb25vIFBsYXliYWNrIFN3aXRjaCIsIFNCX0FMUzQwMDBfTU9OT19JT19DVFJMLCA1LCAxKSwKKwl7CiAJCS5uYW1lID0gIk1hc3RlciBNb25vIENhcHR1cmUgUm91dGUiLAogCQkudHlwZSA9IFNCX01JWF9NT05PX0NBUFRVUkVfQUxTNEsKLQl9Owotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCA9Ci0JU0JfU0lOR0xFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCAwLCAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWljXzIwZGJfYm9vc3QgPQotCVNCX1NJTkdMRSgiTWljIEJvb3N0ICgrMjBkQikiLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCAwLCAweDAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfYW5hbG9nX2xvb3BiYWNrID0KLQlTQl9TSU5HTEUoIkFuYWxvZyBMb29wYmFjayBTd2l0Y2giLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCA3LCAweDAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfZGlnaXRhbF9sb29wYmFjayA9CisJfSwKKwlTQl9TSU5HTEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDAsIDEpLAorCVNCX1NJTkdMRSgiQW5hbG9nIExvb3BiYWNrIFN3aXRjaCIsIFNCX0FMUzQwMDBfTUlDX0lOX0dBSU4sIDcsIDB4MDEpLAorCVNCX1NJTkdMRSgiM0QgQ29udHJvbCAtIFN3aXRjaCIsIFNCX0FMUzQwMDBfM0RfU05EX0ZYLCA2LCAweDAxKSwKIAlTQl9TSU5HTEUoIkRpZ2l0YWwgTG9vcGJhY2sgU3dpdGNoIiwKLQkJICBTQl9BTFM0MDAwX0NSM19DT05GSUdVUkFUSU9OLCA3LCAweDAxKTsKLS8qIEZJWE1FOiBmdW5jdGlvbmFsaXR5IG9mIDNEIGNvbnRyb2xzIG1pZ2h0IGJlIHN3YXBwZWQsIEkgZGlkbid0IGZpbmQKLSAqIGEgZGVzY3JpcHRpb24gb2YgaG93IHRvIGlkZW50aWZ5IHdoYXQgaXMgc3VwcG9zZWQgdG8gYmUgd2hhdCAqLwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfc3dpdGNoID0KLQlTQl9TSU5HTEUoIjNEIENvbnRyb2wgLSBTd2l0Y2giLCBTQl9BTFM0MDAwXzNEX1NORF9GWCwgNiwgMHgwMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfM2RfY29udHJvbF9yYXRpbyA9Ci0JU0JfU0lOR0xFKCIzRCBDb250cm9sIC0gTGV2ZWwiLCBTQl9BTFM0MDAwXzNEX1NORF9GWCwgMCwgMHgwNyk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfM2RfY29udHJvbF9mcmVxID0KKwkJICBTQl9BTFM0MDAwX0NSM19DT05GSUdVUkFUSU9OLCA3LCAweDAxKSwKKwkvKiBGSVhNRTogZnVuY3Rpb25hbGl0eSBvZiAzRCBjb250cm9scyBtaWdodCBiZSBzd2FwcGVkLCBJIGRpZG4ndCBmaW5kCisJICogYSBkZXNjcmlwdGlvbiBvZiBob3cgdG8gaWRlbnRpZnkgd2hhdCBpcyBzdXBwb3NlZCB0byBiZSB3aGF0ICovCisJU0JfU0lOR0xFKCIzRCBDb250cm9sIC0gTGV2ZWwiLCBTQl9BTFM0MDAwXzNEX1NORF9GWCwgMCwgMHgwNyksCiAJLyogRklYTUU6IG1heWJlIHRoZXJlJ3MgYWN0dWFsbHkgc29tZSBzdGFuZGFyZCAzRCBjdHJsIG5hbWUgZm9yIGl0Pz8gKi8KLQlTQl9TSU5HTEUoIjNEIENvbnRyb2wgLSBGcmVxIiwgU0JfQUxTNDAwMF8zRF9TTkRfRlgsIDQsIDB4MDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfZGVsYXkgPQorCVNCX1NJTkdMRSgiM0QgQ29udHJvbCAtIEZyZXEiLCBTQl9BTFM0MDAwXzNEX1NORF9GWCwgNCwgMHgwMyksCiAJLyogRklYTUU6IEFMUzQwMDBhLnBkZiBtZW50aW9ucyBCQkQgKEJ1Y2tldCBCcmlnYWRlIERldmljZSkgdGltZSBkZWxheSwKIAkgKiBidXQgd2hhdCBBTFNBIDNEIGF0dHJpYnV0ZSBpcyB0aGF0IGFjdHVhbGx5PyAiQ2VudGVyIiwgIkRlcHRoIiwKIAkgKiAiV2lkZSIgb3IgIlNwYWNlIiBvciBldmVuICJMZXZlbCI/IEFzc3VtaW5nICJXaWRlIiBmb3Igbm93Li4uICovCi0JU0JfU0lOR0xFKCIzRCBDb250cm9sIC0gV2lkZSIsIFNCX0FMUzQwMDBfM0RfVElNRV9ERUxBWSwgMCwgMHgwZik7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfM2RfY29udHJvbF9wb3dlcm9mZl9zd2l0Y2ggPQotCVNCX1NJTkdMRSgiM0QgUG93ZXJPZmYgU3dpdGNoIiwgU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLCA0LCAweDAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfM2RiX2ZyZXFfY29udHJvbF9zd2l0Y2ggPQorCVNCX1NJTkdMRSgiM0QgQ29udHJvbCAtIFdpZGUiLCBTQl9BTFM0MDAwXzNEX1RJTUVfREVMQVksIDAsIDB4MGYpLAorCVNCX1NJTkdMRSgiM0QgUG93ZXJPZmYgU3dpdGNoIiwgU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLCA0LCAweDAxKSwKIAlTQl9TSU5HTEUoIk1hc3RlciBQbGF5YmFjayA4a0h6IC8gMjBrSHogTFBGIFN3aXRjaCIsCi0JCSAgU0JfQUxTNDAwMF9GTURBQywgNSwgMHgwMSk7CisJCSAgU0JfQUxTNDAwMF9GTURBQywgNSwgMHgwMSksCiAjaWZkZWYgTk9UX0FWQUlMQUJMRQotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9mbWRhYyA9Ci0JU0JfU0lOR0xFKCJGTURBQyBTd2l0Y2ggKE9wdGlvbiA/KSIsIFNCX0FMUzQwMDBfRk1EQUMsIDAsIDB4MDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9xc291bmQgPQotCVNCX1NJTkdMRSgiUVNvdW5kIE1vZGUiLCBTQl9BTFM0MDAwX1FTT1VORCwgMSwgMHgxZik7Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfYWxzNDAwMF9jb250cm9sc1tdID0gewotCQkJCQkJLyogQUxTNDAwMGEuUERGIHJlZ3MgcGFnZSAqLwotCSZzbmRfc2IxNl9jdGxfbWFzdGVyX3BsYXlfdm9sLAkJLyogTVgzMC8zMSAxMiAqLwotCSZzbmRfZHQwMTl4X2N0bF9wY21fcGxheV9zd2l0Y2gsCS8qIE1YNEMgICAgMTYgKi8KLQkmc25kX3NiMTZfY3RsX3BjbV9wbGF5X3ZvbCwJCS8qIE1YMzIvMzMgMTIgKi8KLQkmc25kX3NiMTZfY3RsX3N5bnRoX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KLQkmc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV9zd2l0Y2gsCS8qIE1YNEMgICAgMTYgKi8KLQkmc25kX3NiMTZfY3RsX3N5bnRoX3BsYXlfdm9sLAkJLyogTVgzNC8zNSAxMi8xMyAqLwotCSZzbmRfc2IxNl9jdGxfY2RfY2FwdHVyZV9yb3V0ZSwJCS8qIE1YM0QvM0UgMTQgKi8KLQkmc25kX3NiMTZfY3RsX2NkX3BsYXlfc3dpdGNoLAkJLyogTVgzQyAgICAxNCAqLwotCSZzbmRfc2IxNl9jdGxfY2RfcGxheV92b2wsCQkvKiBNWDM2LzM3IDEzICovCi0JJnNuZF9zYjE2X2N0bF9saW5lX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KLQkmc25kX3NiMTZfY3RsX2xpbmVfcGxheV9zd2l0Y2gsCQkvKiBNWDNDICAgIDE0ICovCi0JJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfdm9sLAkJLyogTVgzOC8zOSAxMyAqLwotCSZzbmRfc2IxNl9jdGxfbWljX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KLQkmc25kX2FsczQwMDBfY3RsX21pY18yMGRiX2Jvb3N0LAkvKiBNWDREICAgIDE2ICovCi0JJnNuZF9zYjE2X2N0bF9taWNfcGxheV9zd2l0Y2gsCQkvKiBNWDNDICAgIDE0ICovCi0JJnNuZF9zYjE2X2N0bF9taWNfcGxheV92b2wsCQkvKiBNWDNBICAgIDEzICovCi0JJnNuZF9zYjE2X2N0bF9wY19zcGVha2VyX3ZvbCwJCS8qIE1YM0IgICAgMTQgKi8KLQkmc25kX3NiMTZfY3RsX2NhcHR1cmVfdm9sLAkJLyogTVgzRi80MCAxNSAqLwotCSZzbmRfc2IxNl9jdGxfcGxheV92b2wsCQkJLyogTVg0MS80MiAxNSAqLwotCSZzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fcGxheWJhY2tfc3dpdGNoLCAvKiBNWDRDIDE2ICovCi0JJnNuZF9hbHM0a19jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSwgLyogTVg0QiAgMTYgKi8KLQkmc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoLAkvKiBNWDRDICAgIDE2ICovCi0JJnNuZF9hbHM0MDAwX2N0bF9taXhlcl9hbmFsb2dfbG9vcGJhY2ssIC8qIE1YNEQgICAgMTYgKi8KLQkmc25kX2FsczQwMDBfY3RsX21peGVyX2RpZ2l0YWxfbG9vcGJhY2ssIC8qIENSMyAgICAyMSAqLwotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3N3aXRjaCwJCSAvKiBNWDUwICAgMTcgKi8KLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9yYXRpbywJCSAvKiBNWDUwICAgMTcgKi8KLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9mcmVxLAkJIC8qIE1YNTAgICAxNyAqLwotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX2RlbGF5LAkJIC8qIE1YNTEgICAxOCAqLwotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3Bvd2Vyb2ZmX3N3aXRjaCwJLyogTVg1MSAgICAxOCAqLwotCSZzbmRfYWxzNDAwMF9jdGxfM2RiX2ZyZXFfY29udHJvbF9zd2l0Y2gsCS8qIE1YNEYgICAgMTcgKi8KLSNpZmRlZiBOT1RfQVZBSUxBQkxFCi0JJnNuZF9hbHM0MDAwX2N0bF9mbWRhYywKLQkmc25kX2FsczQwMDBfY3RsX3Fzb3VuZCwKKwlTQl9TSU5HTEUoIkZNREFDIFN3aXRjaCAoT3B0aW9uID8pIiwgU0JfQUxTNDAwMF9GTURBQywgMCwgMHgwMSksCisJU0JfU0lOR0xFKCJRU291bmQgTW9kZSIsIFNCX0FMUzQwMDBfUVNPVU5ELCAxLCAweDFmKSwKICNlbmRpZgogfTsKIApAQCAtODI5LDExICs3MjAsMTAgQEAKIAl7IFNCX0FMUzQwMDBfTUlDX0lOX0dBSU4sIDAgfSwKIH07CiAKLQogLyoKICAqLwogc3RhdGljIGludCBzbmRfc2JtaXhlcl9pbml0KHN0cnVjdCBzbmRfc2IgKmNoaXAsCi0JCQkgICAgc3RydWN0IHNibWl4X2VsZW0gKipjb250cm9scywKKwkJCSAgICBzdHJ1Y3Qgc2JtaXhfZWxlbSAqY29udHJvbHMsCiAJCQkgICAgaW50IGNvbnRyb2xzX2NvdW50LAogCQkJICAgIHVuc2lnbmVkIGNoYXIgbWFwW11bMl0sCiAJCQkgICAgaW50IG1hcF9jb3VudCwKQEAgLTg1Niw3ICs3NDYsOCBAQAogCX0KIAogCWZvciAoaWR4ID0gMDsgaWR4IDwgY29udHJvbHNfY291bnQ7IGlkeCsrKSB7Ci0JCWlmICgoZXJyID0gc25kX3NibWl4ZXJfYWRkX2N0bF9lbGVtKGNoaXAsIGNvbnRyb2xzW2lkeF0pKSA8IDApCisJCWVyciA9IHNuZF9zYm1peGVyX2FkZF9jdGxfZWxlbShjaGlwLCAmY29udHJvbHNbaWR4XSk7CisJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CiAJc25kX2NvbXBvbmVudF9hZGQoY2FyZCwgbmFtZSk7CkBAIC04ODgsNiArNzc5LDcgQEAKIAkJCXJldHVybiBlcnI7CiAJCWJyZWFrOwogCWNhc2UgU0JfSFdfUFJPOgorCWNhc2UgU0JfSFdfSkFaWjE2OgogCQlpZiAoKGVyciA9IHNuZF9zYm1peGVyX2luaXQoY2hpcCwKIAkJCQkJICAgIHNuZF9zYnByb19jb250cm9scywKIAkJCQkJICAgIEFSUkFZX1NJWkUoc25kX3NicHJvX2NvbnRyb2xzKSwKQEAgLTkwOCw2ICs4MDAsMTUgQEAKIAkJCXJldHVybiBlcnI7CiAJCWJyZWFrOwogCWNhc2UgU0JfSFdfQUxTNDAwMDoKKwkJLyogdXNlIG9ubHkgdGhlIGZpcnN0IDE2IGNvbnRyb2xzIGZyb20gU0IxNiAqLworCQllcnIgPSBzbmRfc2JtaXhlcl9pbml0KGNoaXAsCisJCQkJCXNuZF9zYjE2X2NvbnRyb2xzLAorCQkJCQkxNiwKKwkJCQkJc25kX3NiMTZfaW5pdF92YWx1ZXMsCisJCQkJCUFSUkFZX1NJWkUoc25kX3NiMTZfaW5pdF92YWx1ZXMpLAorCQkJCQkiQUxTNDAwMCIpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAJCWlmICgoZXJyID0gc25kX3NibWl4ZXJfaW5pdChjaGlwLAogCQkJCQkgICAgc25kX2FsczQwMDBfY29udHJvbHMsCiAJCQkJCSAgICBBUlJBWV9TSVpFKHNuZF9hbHM0MDAwX2NvbnRyb2xzKSwKQEAgLTEwMjksNiArOTMwLDcgQEAKIAkJc2F2ZV9taXhlcihjaGlwLCBzYjIwX3NhdmVkX3JlZ3MsIEFSUkFZX1NJWkUoc2IyMF9zYXZlZF9yZWdzKSk7CiAJCWJyZWFrOwogCWNhc2UgU0JfSFdfUFJPOgorCWNhc2UgU0JfSFdfSkFaWjE2OgogCQlzYXZlX21peGVyKGNoaXAsIHNicHJvX3NhdmVkX3JlZ3MsIEFSUkFZX1NJWkUoc2Jwcm9fc2F2ZWRfcmVncykpOwogCQlicmVhazsKIAljYXNlIFNCX0hXXzE2OgpAQCAtMTA1NSw2ICs5NTcsNyBAQAogCQlyZXN0b3JlX21peGVyKGNoaXAsIHNiMjBfc2F2ZWRfcmVncywgQVJSQVlfU0laRShzYjIwX3NhdmVkX3JlZ3MpKTsKIAkJYnJlYWs7CiAJY2FzZSBTQl9IV19QUk86CisJY2FzZSBTQl9IV19KQVpaMTY6CiAJCXJlc3RvcmVfbWl4ZXIoY2hpcCwgc2Jwcm9fc2F2ZWRfcmVncywgQVJSQVlfU0laRShzYnByb19zYXZlZF9yZWdzKSk7CiAJCWJyZWFrOwogCWNhc2UgU0JfSFdfMTY6CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd3NzL3dzc19saWIuYyBiL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCmluZGV4IDViOWQ2YzEuLjkxOTFiMzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCisrKyBiL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCkBAIC0yMDE0LDYgKzIwMTQsNyBAQAogCWNhc2UgV1NTX0hXX0lOVEVSV0FWRToKIAkJcHRleHRzID0gZ3VzbWF4X3RleHRzOwogCQlicmVhazsKKwljYXNlIFdTU19IV19PUFRJOTNYOgogCWNhc2UgV1NTX0hXX09QTDNTQTI6CiAJCXB0ZXh0cyA9IG9wbDNzYV90ZXh0czsKIAkJYnJlYWs7CkBAIC0yMjQ2LDU0ICsyMjQ3LDEyIEBACiAJCUNTNDIzMV9NT05PX0NUUkwsIDUsIDEsIDApLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9vcHRpOTN4X2NvbnRyb2xzW10gPSB7Ci1XU1NfRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMCwKLQkJT1BUaTkzWF9PVVRfTEVGVCwgT1BUaTkzWF9PVVRfUklHSFQsIDcsIDcsIDEsIDEpLAotV1NTX0RPVUJMRV9UTFYoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAwLAotCQlPUFRpOTNYX09VVF9MRUZULCBPUFRpOTNYX09VVF9SSUdIVCwgMSwgMSwgMzEsIDEsCi0JCWRiX3NjYWxlXzZiaXQpLAotV1NTX0RPVUJMRSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIDAsCi0JCUNTNDIzMV9MRUZUX09VVFBVVCwgQ1M0MjMxX1JJR0hUX09VVFBVVCwgNywgNywgMSwgMSksCi1XU1NfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMCwKLQkJQ1M0MjMxX0xFRlRfT1VUUFVULCBDUzQyMzFfUklHSFRfT1VUUFVULCAwLCAwLCAzMSwgMSksCi1XU1NfRE9VQkxFKCJGTSBQbGF5YmFjayBTd2l0Y2giLCAwLAotCQlDUzQyMzFfQVVYMl9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMl9SSUdIVF9JTlBVVCwgNywgNywgMSwgMSksCi1XU1NfRE9VQkxFKCJGTSBQbGF5YmFjayBWb2x1bWUiLCAwLAotCQlDUzQyMzFfQVVYMl9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMl9SSUdIVF9JTlBVVCwgMSwgMSwgMTUsIDEpLAotV1NTX0RPVUJMRSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAwLAotCQlDUzQyMzFfTEVGVF9MSU5FX0lOLCBDUzQyMzFfUklHSFRfTElORV9JTiwgNywgNywgMSwgMSksCi1XU1NfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDAsCi0JCUNTNDIzMV9MRUZUX0xJTkVfSU4sIENTNDIzMV9SSUdIVF9MSU5FX0lOLCAwLCAwLCAxNSwgMSksCi1XU1NfRE9VQkxFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMCwKLQkJT1BUaTkzWF9NSUNfTEVGVF9JTlBVVCwgT1BUaTkzWF9NSUNfUklHSFRfSU5QVVQsIDcsIDcsIDEsIDEpLAotV1NTX0RPVUJMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDAsCi0JCU9QVGk5M1hfTUlDX0xFRlRfSU5QVVQsIE9QVGk5M1hfTUlDX1JJR0hUX0lOUFVULCAxLCAxLCAxNSwgMSksCi1XU1NfRE9VQkxFKCJNaWMgQm9vc3QiLCAwLAotCQlDUzQyMzFfTEVGVF9JTlBVVCwgQ1M0MjMxX1JJR0hUX0lOUFVULCA1LCA1LCAxLCAwKSwKLVdTU19ET1VCTEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDAsCi0JCUNTNDIzMV9BVVgxX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgxX1JJR0hUX0lOUFVULCA3LCA3LCAxLCAxKSwKLVdTU19ET1VCTEUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDAsCi0JCUNTNDIzMV9BVVgxX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgxX1JJR0hUX0lOUFVULCAxLCAxLCAxNSwgMSksCi1XU1NfRE9VQkxFKCJBdXggUGxheWJhY2sgU3dpdGNoIiwgMCwKLQkJT1BUaTkzMV9BVVhfTEVGVF9JTlBVVCwgT1BUaTkzMV9BVVhfUklHSFRfSU5QVVQsIDcsIDcsIDEsIDEpLAotV1NTX0RPVUJMRSgiQXV4IFBsYXliYWNrIFZvbHVtZSIsIDAsCi0JCU9QVGk5MzFfQVVYX0xFRlRfSU5QVVQsIE9QVGk5MzFfQVVYX1JJR0hUX0lOUFVULCAxLCAxLCAxNSwgMSksCi1XU1NfRE9VQkxFKCJDYXB0dXJlIFZvbHVtZSIsIDAsCi0JCUNTNDIzMV9MRUZUX0lOUFVULCBDUzQyMzFfUklHSFRfSU5QVVQsIDAsIDAsIDE1LCAwKSwKLXsKLQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCi0JLmluZm8gPSBzbmRfd3NzX2luZm9fbXV4LAotCS5nZXQgPSBzbmRfd3NzX2dldF9tdXgsCi0JLnB1dCA9IHNuZF93c3NfcHV0X211eCwKLX0KLX07Ci0KIGludCBzbmRfd3NzX21peGVyKHN0cnVjdCBzbmRfd3NzICpjaGlwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAl1bnNpZ25lZCBpbnQgaWR4OwogCWludCBlcnI7CisJaW50IGNvdW50ID0gQVJSQVlfU0laRShzbmRfd3NzX2NvbnRyb2xzKTsKIAogCWlmIChzbmRfQlVHX09OKCFjaGlwIHx8ICFjaGlwLT5wY20pKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIzMDIsMjggKzIyNjEsMTkgQEAKIAogCXN0cmNweShjYXJkLT5taXhlcm5hbWUsIGNoaXAtPnBjbS0+bmFtZSk7CiAKLQlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX09QVEk5M1gpCi0JCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfb3B0aTkzeF9jb250cm9scyk7IGlkeCsrKSB7Ci0JCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLAotCQkJCQlzbmRfY3RsX25ldzEoJnNuZF9vcHRpOTN4X2NvbnRyb2xzW2lkeF0sCi0JCQkJCQkgICAgIGNoaXApKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KLQllbHNlIHsKLQkJaW50IGNvdW50ID0gQVJSQVlfU0laRShzbmRfd3NzX2NvbnRyb2xzKTsKKwkvKiBVc2Ugb25seSB0aGUgZmlyc3QgMTEgZW50cmllcyBvbiBBRDE4NDggKi8KKwlpZiAoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQUQxODQ4X01BU0spCisJCWNvdW50ID0gMTE7CisJLyogVGhlcmUgaXMgbm8gbG9vcGJhY2sgb24gT1BUSTkzWCAqLworCWVsc2UgaWYgKGNoaXAtPmhhcmR3YXJlID09IFdTU19IV19PUFRJOTNYKQorCQljb3VudCA9IDk7CiAKLQkJLyogVXNlIG9ubHkgdGhlIGZpcnN0IDExIGVudHJpZXMgb24gQUQxODQ4ICovCi0JCWlmIChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19BRDE4NDhfTUFTSykKLQkJCWNvdW50ID0gMTE7Ci0KLQkJZm9yIChpZHggPSAwOyBpZHggPCBjb3VudDsgaWR4KyspIHsKLQkJCWVyciA9IHNuZF9jdGxfYWRkKGNhcmQsCi0JCQkJCXNuZF9jdGxfbmV3MSgmc25kX3dzc19jb250cm9sc1tpZHhdLAotCQkJCQkJICAgICBjaGlwKSk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOwotCQl9CisJZm9yIChpZHggPSAwOyBpZHggPCBjb3VudDsgaWR4KyspIHsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwKKwkJCQlzbmRfY3RsX25ldzEoJnNuZF93c3NfY29udHJvbHNbaWR4XSwKKwkJCQkJICAgICBjaGlwKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCmluZGV4IGYxZDlkMTYuLjZhZmYyMTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCisrKyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtNjAzLDI1ICs2MDIsMTQgQEAKIHN0YXRpYyBpbnQgc25kX3NnaW8yYXVkaW9fcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCiB7Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlpbnQgc2l6ZSA9IHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKTsKLQotCS8qIGFsbG9jIHZpcnR1YWwgJ2RtYScgYXJlYSAqLwotCWlmIChydW50aW1lLT5kbWFfYXJlYSkKLQkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvY191c2VyKHNpemUpOwotCWlmIChydW50aW1lLT5kbWFfYXJlYSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOwotCXJldHVybiAwOworCXJldHVybiBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0sCisJCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwogfQogCiAvKiBod19mcmVlIGNhbGxiYWNrICovCiBzdGF0aWMgaW50IHNuZF9zZ2lvMmF1ZGlvX3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewotCXZmcmVlKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpOwotCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOwotCXJldHVybiAwOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSk7CiB9CiAKIC8qIHByZXBhcmUgY2FsbGJhY2sgKi8KQEAgLTY5MiwxMyArNjgwLDYgQEAKIAkJCSAgICAgICBjaGlwLT5jaGFubmVsW2NoYW4tPmlkeF0ucG9zKTsKIH0KIAotLyogZ2V0IHRoZSBwaHlzaWNhbCBwYWdlIHBvaW50ZXIgb24gdGhlIGdpdmVuIG9mZnNldCAqLwotc3RhdGljIHN0cnVjdCBwYWdlICpzbmRfc2dpbzJhdWRpb19wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCkKLXsKLQlyZXR1cm4gdm1hbGxvY190b19wYWdlKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgKyBvZmZzZXQpOwotfQotCiAvKiBvcGVyYXRvcnMgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX3NnaW8yYXVkaW9fcGxheWJhY2sxX29wcyA9IHsKIAkub3BlbiA9ICAgICAgICBzbmRfc2dpbzJhdWRpb19wbGF5YmFjazFfb3BlbiwKQEAgLTcwOSw3ICs2OTAsOCBAQAogCS5wcmVwYXJlID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV9wcmVwYXJlLAogCS50cmlnZ2VyID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV90cmlnZ2VyLAogCS5wb2ludGVyID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV9wb2ludGVyLAotCS5wYWdlID0gICAgICAgIHNuZF9zZ2lvMmF1ZGlvX3BhZ2UsCisJLnBhZ2UgPSAgICAgICAgc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9ICAgICAgICBzbmRfcGNtX2xpYl9tbWFwX3ZtYWxsb2MsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9zZ2lvMmF1ZGlvX3BsYXliYWNrMl9vcHMgPSB7CkBAIC03MjEsNyArNzAzLDggQEAKIAkucHJlcGFyZSA9ICAgICBzbmRfc2dpbzJhdWRpb19wY21fcHJlcGFyZSwKIAkudHJpZ2dlciA9ICAgICBzbmRfc2dpbzJhdWRpb19wY21fdHJpZ2dlciwKIAkucG9pbnRlciA9ICAgICBzbmRfc2dpbzJhdWRpb19wY21fcG9pbnRlciwKLQkucGFnZSA9ICAgICAgICBzbmRfc2dpbzJhdWRpb19wYWdlLAorCS5wYWdlID0gICAgICAgIHNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPSAgICAgICAgc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfc2dpbzJhdWRpb19jYXB0dXJlX29wcyA9IHsKQEAgLTczMyw3ICs3MTYsOCBAQAogCS5wcmVwYXJlID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV9wcmVwYXJlLAogCS50cmlnZ2VyID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV90cmlnZ2VyLAogCS5wb2ludGVyID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV9wb2ludGVyLAotCS5wYWdlID0gICAgICAgIHNuZF9zZ2lvMmF1ZGlvX3BhZ2UsCisJLnBhZ2UgPSAgICAgICAgc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9ICAgICAgICBzbmRfcGNtX2xpYl9tbWFwX3ZtYWxsb2MsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMgYi9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYwppbmRleCA0MTkxYWNjLi5jMTA3MGUzIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYworKysgYi9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYwpAQCAtNjE0LDcgKzYxNCw4IEBACiAJLyogUHV0IHR3byBidWZmZXJzIG9uIHRoZSByaW5nIHRvIGdldCB0aGluZ3Mgc3RhcnRlZC4KIAkqLwogCWZvciAoaT0wOyBpPDI7IGkrKykgewotCQlhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoZGItPmRtYW5yLCBkYi0+bmV4dEluLCBkYi0+ZG1hX2ZyYWdzaXplKTsKKwkJYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGRiLT5kbWFuciwgdmlydF90b19waHlzKGRiLT5uZXh0SW4pLAorCQkJCWRiLT5kbWFfZnJhZ3NpemUsIERETUFfRkxBR1NfSUUpOwogCiAJCWRiLT5uZXh0SW4gKz0gZGItPmRtYV9mcmFnc2l6ZTsKIAkJaWYgKGRiLT5uZXh0SW4gPj0gZGItPnJhd2J1ZiArIGRiLT5kbWFzaXplKQpAQCAtNzMyLDggKzczMyw5IEBACiAJZGItPmRtYV9xY291bnQtLTsKIAogCWlmIChkYi0+Y291bnQgPj0gZGItPmZyYWdzaXplKSB7Ci0JCWlmIChhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShkYi0+ZG1hbnIsIGRiLT5uZXh0T3V0LAotCQkJCQkJCWRiLT5mcmFnc2l6ZSkgPT0gMCkgeworCQlpZiAoYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoZGItPmRtYW5yLAorCQkJCXZpcnRfdG9fcGh5cyhkYi0+bmV4dE91dCksIGRiLT5mcmFnc2l6ZSwKKwkJCQlERE1BX0ZMQUdTX0lFKSA9PSAwKSB7CiAJCQllcnIoInFjb3VudCA8IDIgYW5kIG5vIHJpbmcgcm9vbSEiKTsKIAkJfQogCQlkYi0+bmV4dE91dCArPSBkYi0+ZnJhZ3NpemU7CkBAIC03NzcsNyArNzc5LDggQEAKIAogCS8qIFB1dCBhIG5ldyBlbXB0eSBidWZmZXIgb24gdGhlIGRlc3RpbmF0aW9uIERNQS4KIAkqLwotCWF1MXh4eF9kYmRtYV9wdXRfZGVzdChkcC0+ZG1hbnIsIGRwLT5uZXh0SW4sIGRwLT5kbWFfZnJhZ3NpemUpOworCWF1MXh4eF9kYmRtYV9wdXRfZGVzdChkcC0+ZG1hbnIsIHZpcnRfdG9fcGh5cyhkcC0+bmV4dEluKSwKKwkJCSAgICAgIGRwLT5kbWFfZnJhZ3NpemUsIERETUFfRkxBR1NfSUUpOwogCiAJZHAtPm5leHRJbiArPSBkcC0+ZG1hX2ZyYWdzaXplOwogCWlmIChkcC0+bmV4dEluID49IGRwLT5yYXdidWYgKyBkcC0+ZG1hc2l6ZSkKQEAgLTExNzcsOCArMTE4MCw5IEBACiAJCSAqIHdlIGtub3cgdGhlIGRtYSBoYXMgc3RvcHBlZC4KIAkJICovCiAJCXdoaWxlICgoZGItPmRtYV9xY291bnQgPCAyKSAmJiAoZGItPmNvdW50ID49IGRiLT5mcmFnc2l6ZSkpIHsKLQkJCWlmIChhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShkYi0+ZG1hbnIsIGRiLT5uZXh0T3V0LAotCQkJCQkJCWRiLT5mcmFnc2l6ZSkgPT0gMCkgeworCQkJaWYgKGF1MXh4eF9kYmRtYV9wdXRfc291cmNlKGRiLT5kbWFuciwKKwkJCQl2aXJ0X3RvX3BoeXMoZGItPm5leHRPdXQpLCBkYi0+ZnJhZ3NpemUsCisJCQkJRERNQV9GTEFHU19JRSkgPT0gMCkgewogCQkJCWVycigicWNvdW50IDwgMiBhbmQgbm8gcmluZyByb29tISIpOwogCQkJfQogCQkJZGItPm5leHRPdXQgKz0gZGItPmZyYWdzaXplOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2thaGx1YS5jIGIvc291bmQvb3NzL2thaGx1YS5jCmluZGV4IDg5NDY2YjAuLjI0ZDE1MmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9rYWhsdWEuYworKysgYi9zb3VuZC9vc3Mva2FobHVhLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogICoJNTUzMCBvbmx5LiBUaGUgNTUxMC81NTIwIGRlY29kZSBpcyBkaWZmZXJlbnQuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGlkX3RibCkgPSB7CiAJeyBQQ0lfVkRFVklDRShDWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX0FVRElPKSwgMCB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zb3VuZGNhcmQuYyBiL3NvdW5kL29zcy9zb3VuZGNhcmQuYwppbmRleCBjNjI1MzA5Li5mZGU3YzEyIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc291bmRjYXJkLmMKKysrIGIvc291bmQvb3NzL3NvdW5kY2FyZC5jCkBAIC0zMjgsMTEgKzMyOCwxMSBAQAogCXJldHVybiBtaXhlcl9kZXZzW21peGRldl0tPmlvY3RsKG1peGRldiwgY21kLCBhcmcpOwogfQogCi1zdGF0aWMgaW50IHNvdW5kX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBzb3VuZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IGxlbiA9IDAsIGR0eXBlOwotCWludCBkZXYgPSBpbWlub3IoaW5vZGUpOworCWludCBkZXYgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCWxvbmcgcmV0ID0gLUVJTlZBTDsKIAl2b2lkIF9fdXNlciAqcCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAogCWlmIChfU0lPQ19ESVIoY21kKSAhPSBfU0lPQ19OT05FICYmIF9TSU9DX0RJUihjbWQpICE9IDApIHsKQEAgLTM1Myw2ICszNTMsNyBAQAogCWlmIChjbWQgPT0gT1NTX0dFVFZFUlNJT04pCiAJCXJldHVybiBfX3B1dF91c2VyKFNPVU5EX1ZFUlNJT04sIChpbnQgX191c2VyICopcCk7CiAJCisJbG9ja19rZXJuZWwoKTsKIAlpZiAoX0lPQ19UWVBFKGNtZCkgPT0gJ00nICYmIG51bV9taXhlcnMgPiAwICYmICAgLyogTWl4ZXIgaW9jdGwgKi8KIAkgICAgKGRldiAmIDB4MGYpICE9IFNORF9ERVZfQ1RMKSB7ICAgICAgICAgICAgICAKIAkJZHR5cGUgPSBkZXYgJiAweDBmOwpAQCAtMzYwLDI0ICszNjEsMzEgQEAKIAkJY2FzZSBTTkRfREVWX0RTUDoKIAkJY2FzZSBTTkRfREVWX0RTUDE2OgogCQljYXNlIFNORF9ERVZfQVVESU86Ci0JCQlyZXR1cm4gc291bmRfbWl4ZXJfaW9jdGwoYXVkaW9fZGV2c1tkZXYgPj4gNF0tPm1peGVyX2RldiwKKwkJCXJldCA9IHNvdW5kX21peGVyX2lvY3RsKGF1ZGlvX2RldnNbZGV2ID4+IDRdLT5taXhlcl9kZXYsCiAJCQkJCQkgY21kLCBwKTsKLQkJCQorCQkJYnJlYWs7CQkJCiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gc291bmRfbWl4ZXJfaW9jdGwoZGV2ID4+IDQsIGNtZCwgcCk7CisJCQlyZXQgPSBzb3VuZF9taXhlcl9pb2N0bChkZXYgPj4gNCwgY21kLCBwKTsKKwkJCWJyZWFrOwogCQl9CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIHJldDsKIAl9CisKIAlzd2l0Y2ggKGRldiAmIDB4MGYpIHsKIAljYXNlIFNORF9ERVZfQ1RMOgogCQlpZiAoY21kID09IFNPVU5EX01JWEVSX0dFVExFVkVMUykKLQkJCXJldHVybiBnZXRfbWl4ZXJfbGV2ZWxzKHApOwotCQlpZiAoY21kID09IFNPVU5EX01JWEVSX1NFVExFVkVMUykKLQkJCXJldHVybiBzZXRfbWl4ZXJfbGV2ZWxzKHApOwotCQlyZXR1cm4gc291bmRfbWl4ZXJfaW9jdGwoZGV2ID4+IDQsIGNtZCwgcCk7CisJCQlyZXQgPSBnZXRfbWl4ZXJfbGV2ZWxzKHApOworCQllbHNlIGlmIChjbWQgPT0gU09VTkRfTUlYRVJfU0VUTEVWRUxTKQorCQkJcmV0ID0gc2V0X21peGVyX2xldmVscyhwKTsKKwkJZWxzZQorCQkJcmV0ID0gc291bmRfbWl4ZXJfaW9jdGwoZGV2ID4+IDQsIGNtZCwgcCk7CisJCWJyZWFrOwogCiAJY2FzZSBTTkRfREVWX1NFUToKIAljYXNlIFNORF9ERVZfU0VRMjoKLQkJcmV0dXJuIHNlcXVlbmNlcl9pb2N0bChkZXYsIGZpbGUsIGNtZCwgcCk7CisJCXJldCA9IHNlcXVlbmNlcl9pb2N0bChkZXYsIGZpbGUsIGNtZCwgcCk7CisJCWJyZWFrOwogCiAJY2FzZSBTTkRfREVWX0RTUDoKIAljYXNlIFNORF9ERVZfRFNQMTY6CkBAIC0zOTAsNyArMzk4LDggQEAKIAkJYnJlYWs7CiAKIAl9Ci0JcmV0dXJuIC1FSU5WQUw7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc291bmRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCkBAIC00OTAsNyArNDk5LDcgQEAKIAkucmVhZAkJPSBzb3VuZF9yZWFkLAogCS53cml0ZQkJPSBzb3VuZF93cml0ZSwKIAkucG9sbAkJPSBzb3VuZF9wb2xsLAotCS5pb2N0bAkJPSBzb3VuZF9pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwJPSBzb3VuZF9pb2N0bCwKIAkubW1hcAkJPSBzb3VuZF9tbWFwLAogCS5vcGVuCQk9IHNvdW5kX29wZW4sCiAJLnJlbGVhc2UJPSBzb3VuZF9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL0tjb25maWcgYi9zb3VuZC9wY2kvS2NvbmZpZwppbmRleCAzNTE2NTRjLi4xMjk4YzY4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvS2NvbmZpZwpAQCAtNzg5LDYgKzc4OSw3IEBACiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gdGhlCiAJICBBc3VzIEFWMTAwL0FWMjAwIGNoaXBzLCBpLmUuLCBYb25hciBEMSwgRFgsIEQyLCBEMlgsCiAJICBFc3NlbmNlIFNUIChEZWx1eGUpLCBhbmQgRXNzZW5jZSBTVFguCisJICBTdXBwb3J0IGZvciB0aGUgRFMgaXMgZXhwZXJpbWVudGFsLgogCSAgU3VwcG9ydCBmb3IgdGhlIEhEQVYxLjMgKERlbHV4ZSkgaXMgdmVyeSBleHBlcmltZW50YWwuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYwppbmRleCBkOTI2NmJhLi4xY2FmNWUzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCkBAIC01NDQsMjUgKzU0NCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBhdGNoX3dvbGZzb25fd205NzA1X3NwZWNpZmljKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCi17Ci0JaW50IGVyciwgaTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTk3eHhfc25kX2FjOTdfY29udHJvbHMpOyBpKyspIHsKLQkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChhYzk3LT5idXMtPmNhcmQsIHNuZF9hYzk3X2NuZXcoJndtOTd4eF9zbmRfYWM5N19jb250cm9sc1tpXSwgYWM5NykpKSA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCAgMHg3MiwgMHgwODA4KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfYWM5N19idWlsZF9vcHMgcGF0Y2hfd29sZnNvbl93bTk3MDVfb3BzID0gewotCS5idWlsZF9zcGVjaWZpYyA9IHBhdGNoX3dvbGZzb25fd205NzA1X3NwZWNpZmljLAotfTsKLQogc3RhdGljIGludCBwYXRjaF93b2xmc29uMDUoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAkvKiBXTTk3MDUsIFdNOTcxMCAqLwotCWFjOTctPmJ1aWxkX29wcyA9ICZwYXRjaF93b2xmc29uX3dtOTcwNV9vcHM7CisJYWM5Ny0+YnVpbGRfb3BzID0gJnBhdGNoX3dvbGZzb25fd205NzAzX29wczsKICNpZmRlZiBDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzA1CiAJLyogV005NzA1IHRvdWNoc2NyZWVuIHVzZXMgQVVYIGFuZCBWSURFTyBmb3IgdG91Y2ggKi8KIAlhYzk3LT5mbGFncyB8PSBBQzk3X0hBU19OT19WSURFTyB8IEFDOTdfSEFTX05PX0FVWDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hZDE4ODkuYyBiL3NvdW5kL3BjaS9hZDE4ODkuYwppbmRleCA4ZjUwOThmLi40MzgyZDBmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWQxODg5LmMKKysrIGIvc291bmQvcGNpL2FkMTg4OS5jCkBAIC0xMDQ4LDcgKzEwNDgsNyBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2FkMTg4OV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfYWQxODg5X2lkcykgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU5BTE9HX0RFVklDRVMsIFBDSV9ERVZJQ0VfSURfQUQxODg5SlMpIH0sCiAJeyAwLCB9LAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCBhYWY0ZGE2Li41YzZlMzIyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC0yNzUsNyArMjc1LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hbGlfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2FsaV9pZHMpID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTU0NTEpLCAwLCAwLCAwfSwKIAl7MCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHMzMDAuYyBiL3NvdW5kL3BjaS9hbHMzMDAuYwppbmRleCAzYWEzNWFmLi5kNzY1M2NiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzMzAwLmMKKysrIGIvc291bmQvcGNpL2FsczMwMC5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlpbnQgYmxvY2tfY291bnRlcl9yZWdpc3RlcjsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYWxzMzAwX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9hbHMzMDBfaWRzKSA9IHsKIAl7IDB4NDAwNSwgMHgwMzAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBERVZJQ0VfQUxTMzAwIH0sCiAJeyAweDQwMDUsIDB4MDMwOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgREVWSUNFX0FMUzMwMF9QTFVTIH0sCiAJeyAwLCB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxzNDAwMC5jIGIvc291bmQvcGNpL2FsczQwMDAuYwppbmRleCAzZGJhY2RlLi5kNzVjZjdiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzNDAwMC5jCisrKyBiL3NvdW5kL3BjaS9hbHM0MDAwLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2FsczQwMDBfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2FsczQwMDBfaWRzKSA9IHsKIAl7IDB4NDAwNSwgMHg0MDAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAgIC8qIEFMUzQwMDAgKi8KIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwLmMgYi9zb3VuZC9wY2kvYXRpaXhwLmMKaW5kZXggNDJiNGZiYi4uNDlkNTcyYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cC5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHAuYwpAQCAtMjg2LDcgKzI4Niw3IEBACiAKIC8qCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXRpaXhwX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9hdGlpeHBfaWRzKSA9IHsKIAl7IFBDSV9WREVWSUNFKEFUSSwgMHg0MzQxKSwgMCB9LCAvKiBTQjIwMCAqLwogCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzNjEpLCAwIH0sIC8qIFNCMzAwICovCiAJeyBQQ0lfVkRFVklDRShBVEksIDB4NDM3MCksIDAgfSwgLyogU0I0MDAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwppbmRleCBlN2UxNDdiLi45MWQ3MDM2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCkBAIC0yNjEsNyArMjYxLDcgQEAKIAogLyoKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hdGlpeHBfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2F0aWl4cF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzNGQpLCAwIH0sIC8qIFNCMjAwICovCiAJeyBQQ0lfVkRFVklDRShBVEksIDB4NDM3OCksIDAgfSwgLyogU0I0MDAgKi8KIAl7IDAsIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODEwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgxMC5jCmluZGV4IGMwZThjNmIuLmFhNTFjYzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODEwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MTAuYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJhdTg4MTAuaCIKICNpbmNsdWRlICJhdTg4eDAuaCIKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdm9ydGV4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF92b3J0ZXhfaWRzKSA9IHsKIAl7UENJX1ZERVZJQ0UoQVVSRUFMLCBQQ0lfREVWSUNFX0lEX0FVUkVBTF9BRFZBTlRBR0UpLCAxLH0sCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODIwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgyMC5jCmluZGV4IGE2NTI3MzMuLjJmMzIxZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODIwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MjAuYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJhdTg4MjAuaCIKICNpbmNsdWRlICJhdTg4eDAuaCIKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdm9ydGV4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF92b3J0ZXhfaWRzKSA9IHsKIAl7UENJX1ZERVZJQ0UoQVVSRUFMLCBQQ0lfREVWSUNFX0lEX0FVUkVBTF9WT1JURVhfMSksIDAsfSwKIAl7MCx9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4MzAuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODMwLmMKaW5kZXggNmM3MDJhZC4uMjc5Yjc4ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4MzAuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgzMC5jCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgImF1ODgzMC5oIgogI2luY2x1ZGUgImF1ODh4MC5oIgotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92b3J0ZXhfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3ZvcnRleF9pZHMpID0gewogCXtQQ0lfVkRFVklDRShBVVJFQUwsIFBDSV9ERVZJQ0VfSURfQVVSRUFMX1ZPUlRFWF8yKSwgMCx9LAogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMgYi9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMKaW5kZXggNGQzNGJiMC4uNjc5MjFmOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jCisrKyBiL3NvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIEF1ZGlvd2VyazIgc291bmRjYXJkLiIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2F3Ml9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfYXcyX2lkcykgPSB7CiAJe1BDSV9WRU5ET1JfSURfU0FBNzE0NiwgUENJX0RFVklDRV9JRF9TQUE3MTQ2LCAwLCAwLAogCSAwLCAwLCAwfSwKIAl7MH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDY5ODY3YWMuLjQ2NzllZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtMzUwLDcgKzM1MCw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXpmMzMyOF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfYXpmMzMyOF9pZHMpID0gewogCXsgMHgxMjJELCAweDUwREMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgICAvKiBQQ0kxNjgvMzMyOCAqLwogCXsgMHgxMjJELCAweDgwREEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgICAvKiAzMzI4ICovCiAJeyAwLCB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYnQ4N3guYyBiL3NvdW5kL3BjaS9idDg3eC5jCmluZGV4IDRlMmI5MjUuLjM3ZTFiNWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9idDg3eC5jCisrKyBiL3NvdW5kL3BjaS9idDg3eC5jCkBAIC03OTUsNyArNzk1LDcgQEAKIAkgIC5kcml2ZXJfZGF0YSA9IFNORF9CVDg3WF9CT0FSRF8gIyMgaWQgfQogLyogZHJpdmVyX2RhdGEgaXMgdGhlIGNhcmQgaWQgZm9yIHRoYXQgZGV2aWNlICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYnQ4N3hfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2J0ODd4X2lkcykgPSB7CiAJLyogSGF1cHBhdWdlIFdpblRWIHNlcmllcyAqLwogCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MDA3MCwgMHgxM2ViLCBHRU5FUklDKSwKIAkvKiBIYXVwcGF1Z2UgV2luVFYgc2VyaWVzICovCkBAIC05NjQsNyArOTY0LDcgQEAKIAogLyogZGVmYXVsdCBlbnRyaWVzIGZvciBhbGwgQnQ4N3ggY2FyZHMgLSBpdCdzIG5vdCBleHBvcnRlZCAqLwogLyogZHJpdmVyX2RhdGEgaXMgc2V0IHRvIDAgdG8gY2FsbCBkZXRlY3Rpb24gKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYnQ4N3hfZGVmYXVsdF9pZHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9idDg3eF9kZWZhdWx0X2lkcykgPSB7CiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgVU5LTk9XTiksCiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgVU5LTk9XTiksCiAJeyB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggMTVlNDEzOC4uMGEzZDNkNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtMTg3NSw3ICsxODc1LDcgQEAKICNlbmRpZgogCiAvLyBQQ0kgSURzCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2NhMDEwNl9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfY2EwMTA2X2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShDUkVBVElWRSwgMHgwMDA3KSwgMCB9LAkvKiBBdWRpZ3kgTFMgb3IgTGl2ZSAyNGJpdCAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jbWlwY2kuYyBiL3NvdW5kL3BjaS9jbWlwY2kuYwppbmRleCBhMzEyYmFlLi4xZGVkNjRlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY21pcGNpLmMKKysrIGIvc291bmQvcGNpL2NtaXBjaS5jCkBAIC0yNzk2LDcgKzI3OTYsNyBAQAogI2VuZGlmCiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jbWlwY2lfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2NtaXBjaV9pZHMpID0gewogCXtQQ0lfVkRFVklDRShDTUVESUEsIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODMzOEEpLCAwfSwKIAl7UENJX1ZERVZJQ0UoQ01FRElBLCBQQ0lfREVWSUNFX0lEX0NNRURJQV9DTTgzMzhCKSwgMH0sCiAJe1BDSV9WREVWSUNFKENNRURJQSwgUENJX0RFVklDRV9JRF9DTUVESUFfQ004NzM4KSwgMH0sCkBAIC0zMDE4LDcgKzMwMTgsNyBAQAogCWludCBpbnRlZ3JhdGVkX21pZGkgPSAwOwogCWNoYXIgbW9kZWxzdHJbMTZdOwogCWludCBwY21faW5kZXgsIHBjbV9zcGRpZl9pbmRleDsKLQlzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaW50ZWxfODI0Mzd2eFtdID0geworCXN0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShpbnRlbF84MjQzN3Z4KSA9IHsKIAkJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0MzdWWCkgfSwKIAkJeyB9LAogCX07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0MjgxLmMgYi9zb3VuZC9wY2kvY3M0MjgxLmMKaW5kZXggZTJlMDM1OS4uOWVkYzY1MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDI4MS5jCisrKyBiL3NvdW5kL3BjaS9jczQyODEuYwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfY3M0MjgxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2NzNDI4MV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfY3M0MjgxX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShDSVJSVVMsIDB4NjAwNSksIDAsIH0sCS8qIENTNDI4MSAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCmluZGV4IDAzM2FlYzQuLjc2N2ZhN2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYwpAQCAtNjQsNyArNjQsNyBAQAogbW9kdWxlX3BhcmFtX2FycmF5KG1tYXBfdmFsaWQsIGJvb2wsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtbWFwX3ZhbGlkLCAiU3VwcG9ydCBPU1MgbW1hcC4iKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jczQ2eHhfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2NzNDZ4eF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoQ0lSUlVTLCAweDYwMDEpLCAwLCB9LCAgIC8qIENTNDI4MCAqLwogCXsgUENJX1ZERVZJQ0UoQ0lSUlVTLCAweDYwMDMpLCAwLCB9LCAgIC8qIENTNDYxMiAqLwogCXsgUENJX1ZERVZJQ0UoQ0lSUlVTLCAweDYwMDQpLCAwLCB9LCAgIC8qIENTNDYxNSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwppbmRleCAxYmU5NmVhLi4zZjk5YTVlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwpAQCAtMjIzOCwxMSArMjIzOCwxMSBAQAogCiAJLyogc2V0IHRoZSBkZXNpcmVkIENPREVDIG1vZGUgKi8KIAlpZiAoYWM5Ny0+bnVtID09IENTNDZYWF9QUklNQVJZX0NPREVDX0lOREVYKSB7Ci0JCXNuZF9wcmludGRkKCJjczQ2eHg6IENPRE9FQzEgbW9kZSAlMDR4XG4iLDB4MCk7Ci0JCXNuZF9jczQ2eHhfYWM5N193cml0ZShhYzk3LEFDOTdfQ1NSX0FDTU9ERSwweDApOworCQlzbmRfcHJpbnRkZCgiY3M0Nnh4OiBDT0RFQzEgbW9kZSAlMDR4XG4iLCAweDApOworCQlzbmRfY3M0Nnh4X2FjOTdfd3JpdGUoYWM5NywgQUM5N19DU1JfQUNNT0RFLCAweDApOwogCX0gZWxzZSBpZiAoYWM5Ny0+bnVtID09IENTNDZYWF9TRUNPTkRBUllfQ09ERUNfSU5ERVgpIHsKLQkJc25kX3ByaW50ZGQoImNzNDZ4eDogQ09ET0VDMiBtb2RlICUwNHhcbiIsMHgzKTsKLQkJc25kX2NzNDZ4eF9hYzk3X3dyaXRlKGFjOTcsQUM5N19DU1JfQUNNT0RFLDB4Myk7CisJCXNuZF9wcmludGRkKCJjczQ2eHg6IENPREVDMiBtb2RlICUwNHhcbiIsIDB4Myk7CisJCXNuZF9jczQ2eHhfYWM5N193cml0ZShhYzk3LCBBQzk3X0NTUl9BQ01PREUsIDB4Myk7CiAJfSBlbHNlIHsKIAkJc25kX0JVRygpOyAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuIC4uLiAqLwogCX0KQEAgLTIyNjYsNyArMjI2Niw3IEBACiAJCQlyZXR1cm47CiAKIAkJLyogdGVzdCBpZiB3ZSBjYW4gd3JpdGUgdG8gdGhlIHJlY29yZCBnYWluIHZvbHVtZSByZWdpc3RlciAqLwotCQlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCBBQzk3X1JFQ19HQUlOLCAweDhhMDUpOworCQlzbmRfYWM5N193cml0ZShhYzk3LCBBQzk3X1JFQ19HQUlOLCAweDhhMDUpOwogCQlpZiAoKGVyciA9IHNuZF9hYzk3X3JlYWQoYWM5NywgQUM5N19SRUNfR0FJTikpID09IDB4OGEwNSkKIAkJCXJldHVybjsKIApAQCAtMzU5Nyw3ICszNTk3LDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2F2ZWRfcmVnc1tdID0gewogCUJBMF9BQ09TViwKLQlCQTBfQVNFUl9GQUREUiwKKwkvKkJBMF9BU0VSX0ZBRERSLCovCiAJQkEwX0FTRVJfTUFTVEVSLAogCUJBMV9QVk9MLAogCUJBMV9DVk9MLApAQCAtMzY0NCw2ICszNjQ0LDcgQEAKICNpZmRlZiBDT05GSUdfU05EX0NTNDZYWF9ORVdfRFNQCiAJaW50IGk7CiAjZW5kaWYKKwl1bnNpZ25lZCBpbnQgdG1wOwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKQEAgLTM2ODUsNiArMzY4NiwxNSBAQAogCXNuZF9hYzk3X3Jlc3VtZShjaGlwLT5hYzk3W0NTNDZYWF9QUklNQVJZX0NPREVDX0lOREVYXSk7CiAJc25kX2FjOTdfcmVzdW1lKGNoaXAtPmFjOTdbQ1M0NlhYX1NFQ09OREFSWV9DT0RFQ19JTkRFWF0pOwogCisJLyoKKyAgICAgICAgICogIFN0b3AgY2FwdHVyZSBETUEuCisJICovCisJdG1wID0gc25kX2NzNDZ4eF9wZWVrKGNoaXAsIEJBMV9DQ1RMKTsKKwljaGlwLT5jYXB0LmN0bCA9IHRtcCAmIDB4MDAwMGZmZmY7CisJc25kX2NzNDZ4eF9wb2tlKGNoaXAsIEJBMV9DQ1RMLCB0bXAgJiAweGZmZmYwMDAwKTsKKworCW1kZWxheSg1KTsKKwogCS8qIHJlc2V0IHBsYXliYWNrL2NhcHR1cmUgKi8KIAlzbmRfY3M0Nnh4X3NldF9wbGF5X3NhbXBsZV9yYXRlKGNoaXAsIDgwMDApOwogCXNuZF9jczQ2eHhfc2V0X2NhcHR1cmVfc2FtcGxlX3JhdGUoY2hpcCwgODAwMCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmMKaW5kZXggZjRmMGM4Zi4uM2U1Y2E4ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvcy5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3MuYwpAQCAtMjk4LDYgKzI5OCw5IEBACiAJCWlmIChpbnMtPnNjYnNbaV0uZGVsZXRlZCkgY29udGludWU7CiAKIAkJY3M0Nnh4X2RzcF9wcm9jX2ZyZWVfc2NiX2Rlc2MgKCAoaW5zLT5zY2JzICsgaSkgKTsKKyNpZmRlZiBDT05GSUdfUE0KKwkJa2ZyZWUoaW5zLT5zY2JzW2ldLmRhdGEpOworI2VuZGlmCiAJfQogCiAJa2ZyZWUoaW5zLT5jb2RlLmRhdGEpOwpAQCAtOTc0LDEzICs5NzcsMTEgQEAKIAogCWluZGV4ID0gZmluZF9mcmVlX3NjYl9pbmRleCAoaW5zKTsKIAorCW1lbXNldCgmaW5zLT5zY2JzW2luZGV4XSwgMCwgc2l6ZW9mKGlucy0+c2Nic1tpbmRleF0pKTsKIAlzdHJjcHkoaW5zLT5zY2JzW2luZGV4XS5zY2JfbmFtZSwgbmFtZSk7CiAJaW5zLT5zY2JzW2luZGV4XS5hZGRyZXNzID0gZGVzdDsKIAlpbnMtPnNjYnNbaW5kZXhdLmluZGV4ID0gaW5kZXg7Ci0JaW5zLT5zY2JzW2luZGV4XS5wcm9jX2luZm8gPSBOVUxMOwogCWlucy0+c2Nic1tpbmRleF0ucmVmX2NvdW50ID0gMTsKLQlpbnMtPnNjYnNbaW5kZXhdLmRlbGV0ZWQgPSAwOwotCXNwaW5fbG9ja19pbml0KCZpbnMtPnNjYnNbaW5kZXhdLmxvY2spOwogCiAJZGVzYyA9IChpbnMtPnNjYnMgKyBpbmRleCk7CiAJaW5zLT5zY2JzW2luZGV4XS5zY2Jfc3ltYm9sID0gYWRkX3N5bWJvbCAoY2hpcCwgbmFtZSwgZGVzdCwgU1lNQk9MX1BBUkFNRVRFUik7CkBAIC0xMDIyLDE3ICsxMDIzLDI5IEBACiAJcmV0dXJuIGRlc2M7CiB9CiAKKyNkZWZpbmUgU0NCX0JZVEVTCSgweDEwICogNCkKKwogc3RydWN0IGRzcF9zY2JfZGVzY3JpcHRvciAqCiBjczQ2eHhfZHNwX2NyZWF0ZV9zY2IgKHN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwLCBjaGFyICogbmFtZSwgdTMyICogc2NiX2RhdGEsIHUzMiBkZXN0KQogewogCXN0cnVjdCBkc3Bfc2NiX2Rlc2NyaXB0b3IgKiBkZXNjOwogCisjaWZkZWYgQ09ORklHX1BNCisJLyogY29weSB0aGUgZGF0YSBmb3IgcmVzdW1lICovCisJc2NiX2RhdGEgPSBrbWVtZHVwKHNjYl9kYXRhLCBTQ0JfQllURVMsIEdGUF9LRVJORUwpOworCWlmICghc2NiX2RhdGEpCisJCXJldHVybiBOVUxMOworI2VuZGlmCisKIAlkZXNjID0gX21hcF9zY2IgKGNoaXAsbmFtZSxkZXN0KTsKIAlpZiAoZGVzYykgewogCQlkZXNjLT5kYXRhID0gc2NiX2RhdGE7CiAJCV9kc3BfY3JlYXRlX3NjYihjaGlwLHNjYl9kYXRhLGRlc3QpOwogCX0gZWxzZSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImRzcF9zcG9zOiBmYWlsZWQgdG8gbWFwIFNDQlxuIik7CisjaWZkZWYgQ09ORklHX1BNCisJCWtmcmVlKHNjYl9kYXRhKTsKKyNlbmRpZgogCX0KIAogCXJldHVybiBkZXNjOwpAQCAtMTk4OCw3ICsyMDAxLDI4IEBACiAJCQljb250aW51ZTsKIAkJX2RzcF9jcmVhdGVfc2NiKGNoaXAsIHMtPmRhdGEsIHMtPmFkZHJlc3MpOwogCX0KLQorCWZvciAoaSA9IDA7IGkgPCBpbnMtPm5zY2I7IGkrKykgeworCQlzdHJ1Y3QgZHNwX3NjYl9kZXNjcmlwdG9yICpzID0gJmlucy0+c2Nic1tpXTsKKwkJaWYgKHMtPmRlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKHMtPnVwZGF0ZWQpCisJCQljczQ2eHhfZHNwX3Nwb3NfdXBkYXRlX3NjYihjaGlwLCBzKTsKKwkJaWYgKHMtPnZvbHVtZV9zZXQpCisJCQljczQ2eHhfZHNwX3NjYl9zZXRfdm9sdW1lKGNoaXAsIHMsCisJCQkJCQkgIHMtPnZvbHVtZVswXSwgcy0+dm9sdW1lWzFdKTsKKwl9CisJaWYgKGlucy0+c3BkaWZfc3RhdHVzX291dCAmIERTUF9TUERJRl9TVEFUVVNfSFdfRU5BQkxFRCkgeworCQljczQ2eHhfZHNwX2VuYWJsZV9zcGRpZl9odyhjaGlwKTsKKwkJc25kX2NzNDZ4eF9wb2tlKGNoaXAsIChpbnMtPnJlZl9zbm9vcF9zY2ItPmFkZHJlc3MgKyAyKSA8PCAyLAorCQkJCShPVVRQVVRfU05PT1BfQlVGRkVSICsgMHgxMCkgPDwgMHgxMCk7CisJCWlmIChpbnMtPnNwZGlmX3N0YXR1c19vdXQgJiBEU1BfU1BESUZfU1RBVFVTX1BMQVlCQUNLX09QRU4pCisJCQljczQ2eHhfcG9rZV92aWFfZHNwKGNoaXAsIFNQX1NQRE9VVF9DU1VWLAorCQkJCQkgICAgaW5zLT5zcGRpZl9jc3V2X3N0cmVhbSk7CisJfQorCWlmIChjaGlwLT5kc3Bfc3Bvc19pbnN0YW5jZS0+c3BkaWZfc3RhdHVzX2luKSB7CisJCWNzNDZ4eF9wb2tlX3ZpYV9kc3AoY2hpcCwgU1BfQVNFUl9DT1VOVERPV04sIDB4ODAwMDAwMDUpOworCQljczQ2eHhfcG9rZV92aWFfZHNwKGNoaXAsIFNQX1NQRElOX0NPTlRST0wsIDB4ODAwMDAzZmYpOworCX0KIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvcy5oIGIvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvcy5oCmluZGV4IGY5ZTE2OWQuLmNhNDdhODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3MuaAorKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmgKQEAgLTIxMiw2ICsyMTIsNyBAQAogCQkJKHNjYi0+YWRkcmVzcyArIFNDQnN1Ykxpc3RQdHIpIDw8IDIsCiAJCQkoc2NiLT5zdWJfbGlzdF9wdHItPmFkZHJlc3MgPDwgMHgxMCkgfAogCQkJKHNjYi0+bmV4dF9zY2JfcHRyLT5hZGRyZXNzKSk7CQorCXNjYi0+dXBkYXRlZCA9IDE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjczQ2eHhfZHNwX3NjYl9zZXRfdm9sdW1lIChzdHJ1Y3Qgc25kX2NzNDZ4eCAqIGNoaXAsCkBAIC0yMjIsNiArMjIzLDkgQEAKIAogCXNuZF9jczQ2eHhfcG9rZShjaGlwLCAoc2NiLT5hZGRyZXNzICsgU0NCVm9sdW1lQ3RybCkgPDwgMiwgdmFsKTsKIAlzbmRfY3M0Nnh4X3Bva2UoY2hpcCwgKHNjYi0+YWRkcmVzcyArIFNDQlZvbHVtZUN0cmwgKyAxKSA8PCAyLCB2YWwpOworCXNjYi0+dm9sdW1lX3NldCA9IDE7CisJc2NiLT52b2x1bWVbMF0gPSBsZWZ0OworCXNjYi0+dm9sdW1lWzFdID0gcmlnaHQ7CiB9CiAjZW5kaWYgLyogX19EU1BfU1BPU19IX18gKi8KICNlbmRpZiAvKiBDT05GSUdfU05EX0NTNDZYWF9ORVdfRFNQICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvc19zY2JfbGliLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zX3NjYl9saWIuYwppbmRleCBkZDdjNDFiLi4wMGIxNDhhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zX3NjYl9saWIuYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zX3NjYl9saWIuYwpAQCAtMTE1LDcgKzExNSw2IEBACiBzdGF0aWMgdm9pZCBfZHNwX3VubGlua19zY2IgKHN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwLCBzdHJ1Y3QgZHNwX3NjYl9kZXNjcmlwdG9yICogc2NiKQogewogCXN0cnVjdCBkc3Bfc3Bvc19pbnN0YW5jZSAqIGlucyA9IGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIHNjYi0+cGFyZW50X3NjYl9wdHIgKSB7CiAJCS8qIHVubGluayBwYXJlbnQgU0NCICovCkBAIC0xNTMsOCArMTUyLDYgQEAKIAkJCXNjYi0+bmV4dF9zY2JfcHRyID0gaW5zLT50aGVfbnVsbF9zY2I7CiAJCX0KIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsgICAgCi0KIAkJLyogdXBkYXRlIHBhcmVudCBmaXJzdCBlbnRyeSBpbiBEU1AgUkFNICovCiAJCWNzNDZ4eF9kc3Bfc3Bvc191cGRhdGVfc2NiKGNoaXAsc2NiLT5wYXJlbnRfc2NiX3B0cik7CiAKQEAgLTE2Miw3ICsxNTksNiBAQAogCQljczQ2eHhfZHNwX3Nwb3NfdXBkYXRlX3NjYihjaGlwLHNjYik7CiAKIAkJc2NiLT5wYXJlbnRfc2NiX3B0ciA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJfQogfQogCkBAIC0xOTcsOSArMTkzLDkgQEAKIAkJZ290byBfZW5kOwogI2VuZGlmCiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NiLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7ICAgIAogCV9kc3BfdW5saW5rX3NjYiAoY2hpcCxzY2IpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjYi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAKIAljczQ2eHhfZHNwX3Byb2NfZnJlZV9zY2JfZGVzYyhzY2IpOwogCWlmIChzbmRfQlVHX09OKCFzY2ItPnNjYl9zeW1ib2wpKQpAQCAtMjA3LDYgKzIwMywxMCBAQAogCXJlbW92ZV9zeW1ib2wgKGNoaXAsc2NiLT5zY2Jfc3ltYm9sKTsKIAogCWlucy0+c2Nic1tzY2ItPmluZGV4XS5kZWxldGVkID0gMTsKKyNpZmRlZiBDT05GSUdfUE0KKwlrZnJlZShpbnMtPnNjYnNbc2NiLT5pbmRleF0uZGF0YSk7CisJaW5zLT5zY2JzW3NjYi0+aW5kZXhdLmRhdGEgPSBOVUxMOworI2VuZGlmCiAKIAlpZiAoc2NiLT5pbmRleCA8IGlucy0+c2NiX2hpZ2hlc3RfZnJhZ19pbmRleCkKIAkJaW5zLT5zY2JfaGlnaGVzdF9mcmFnX2luZGV4ID0gc2NiLT5pbmRleDsKQEAgLTE1MDgsMjAgKzE1MDgsMTcgQEAKIAkJICAgICAgIGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlLT5ucGNtX2NoYW5uZWxzIDw9IDApKQogCQlyZXR1cm4gLUVJTzsKIAotCXNwaW5fbG9jaygmcGNtX2NoYW5uZWwtPnNyY19zY2ItPmxvY2spOwotCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJaWYgKHBjbV9jaGFubmVsLT51bmxpbmtlZCkgewotCQlzcGluX3VubG9jaygmcGNtX2NoYW5uZWwtPnNyY19zY2ItPmxvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlwY21fY2hhbm5lbC0+dW5saW5rZWQgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAKIAlfZHNwX3VubGlua19zY2IgKGNoaXAscGNtX2NoYW5uZWwtPnBjbV9yZWFkZXJfc2NiKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCi0Jc3Bpbl91bmxvY2soJnBjbV9jaGFubmVsLT5zcmNfc2NiLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUzMywxMCArMTUzMCwxMCBAQAogCXN0cnVjdCBkc3Bfc2NiX2Rlc2NyaXB0b3IgKiBzcmNfc2NiID0gcGNtX2NoYW5uZWwtPnNyY19zY2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmcGNtX2NoYW5uZWwtPnNyY19zY2ItPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHBjbV9jaGFubmVsLT51bmxpbmtlZCA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrKCZwY21fY2hhbm5lbC0+c3JjX3NjYi0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTU1Miw4ICsxNTQ5LDYgQEAKIAlzbmRfQlVHX09OKHBjbV9jaGFubmVsLT5wY21fcmVhZGVyX3NjYi0+cGFyZW50X3NjYl9wdHIpOwogCXBjbV9jaGFubmVsLT5wY21fcmVhZGVyX3NjYi0+cGFyZW50X3NjYl9wdHIgPSBwYXJlbnRfc2NiOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0KIAkvKiB1cGRhdGUgU0NCIGVudHJ5IGluIERTUCBSQU0gKi8KIAljczQ2eHhfZHNwX3Nwb3NfdXBkYXRlX3NjYihjaGlwLHBjbV9jaGFubmVsLT5wY21fcmVhZGVyX3NjYik7CiAKQEAgLTE1NjIsOCArMTU1Nyw2IEBACiAKIAlwY21fY2hhbm5lbC0+dW5saW5rZWQgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0KLQlzcGluX3VubG9jaygmcGNtX2NoYW5uZWwtPnNyY19zY2ItPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xNTk2LDEzICsxNTg5LDE3IEBACiAKIGludCBjczQ2eHhfc3JjX3VubGluayhzdHJ1Y3Qgc25kX2NzNDZ4eCAqY2hpcCwgc3RydWN0IGRzcF9zY2JfZGVzY3JpcHRvciAqIHNyYykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJaWYgKHNuZF9CVUdfT04oIXNyYy0+cGFyZW50X3NjYl9wdHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIG11dGUgU0NCICovCiAJY3M0Nnh4X2RzcF9zY2Jfc2V0X3ZvbHVtZSAoY2hpcCxzcmMsMCwwKTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCV9kc3BfdW5saW5rX3NjYiAoY2hpcCxzcmMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzAuYyBiL3NvdW5kL3BjaS9jczU1MzAuYwppbmRleCBkYzQ2NDMyLi4yMDc0NzlhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M1NTMwLmMKKysrIGIvc291bmQvcGNpL2NzNTUzMC5jCkBAIC01OCw3ICs1OCw3IEBACiAJdW5zaWduZWQgbG9uZyBwY2lfYmFzZTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY3M1NTMwX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9jczU1MzBfaWRzKSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX0FVRElPLCBQQ0lfQU5ZX0lELAogCQkJCQkJCVBDSV9BTllfSUQsIDAsIDB9LAogCXswLH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKaW5kZXggOTFlN2ZhZi4uYWZiODAzNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKKysrIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKQEAgLTY2LDcgKzY2LDcgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgIiBEUklWRVJfTkFNRSk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY3M1NTM1YXVkaW9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2NzNTUzNWF1ZGlvX2lkcykgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlMsIFBDSV9ERVZJQ0VfSURfTlNfQ1M1NTM1X0FVRElPKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0FVRElPKSB9LAogCXt9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYyBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jCmluZGV4IGNiNjViZDAuLjQ4MGNiMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jCkBAIC0xNjYsMTggKzE2Niw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGF0Y19nZXRfcHRwX3BoeXMoc3RydWN0IGN0X2F0YyAqYXRjLCBpbnQgaW5kZXgpCiB7Ci0Jc3RydWN0IGN0X3ZtICp2bTsKLQl2b2lkICprdmlydF9hZGRyOwotCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOwotCi0Jdm0gPSBhdGMtPnZtOwotCWt2aXJ0X2FkZHIgPSB2bS0+Z2V0X3B0cF92aXJ0KHZtLCBpbmRleCk7Ci0JaWYgKGt2aXJ0X2FkZHIgPT0gTlVMTCkKLQkJcGh5c19hZGRyID0gKH4wVUwpOwotCWVsc2UKLQkJcGh5c19hZGRyID0gdmlydF90b19waHlzKGt2aXJ0X2FkZHIpOwotCi0JcmV0dXJuIHBoeXNfYWRkcjsKKwlyZXR1cm4gYXRjLT52bS0+Z2V0X3B0cF9waHlzKGF0Yy0+dm0sIGluZGV4KTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBjb252ZXJ0X2Zvcm1hdChzbmRfcGNtX2Zvcm1hdF90IHNuZF9mb3JtYXQpCkBAIC0xMjI1LDEwICsxMjE0LDExIEBACiAJcmV0dXJuIGN0X2F0Y19kZXN0cm95KGF0Yyk7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGF0Y19pZGVudGlmeV9jYXJkKHN0cnVjdCBjdF9hdGMgKmF0YykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0Y19pZGVudGlmeV9jYXJkKHN0cnVjdCBjdF9hdGMgKmF0YywgdW5zaWduZWQgaW50IHNzaWQpCiB7CiAJY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKnA7CiAJY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKmxpc3Q7CisJdTE2IHZlbmRvcl9pZCwgZGV2aWNlX2lkOwogCiAJc3dpdGNoIChhdGMtPmNoaXBfdHlwZSkgewogCWNhc2UgQVRDMjBLMToKQEAgLTEyNDIsMTMgKzEyMzIsMTkgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JcCA9IHNuZF9wY2lfcXVpcmtfbG9va3VwKGF0Yy0+cGNpLCBsaXN0KTsKKwlpZiAoc3NpZCkgeworCQl2ZW5kb3JfaWQgPSBzc2lkID4+IDE2OworCQlkZXZpY2VfaWQgPSBzc2lkICYgMHhmZmZmOworCX0gZWxzZSB7CisJCXZlbmRvcl9pZCA9IGF0Yy0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yOworCQlkZXZpY2VfaWQgPSBhdGMtPnBjaS0+c3Vic3lzdGVtX2RldmljZTsKKwl9CisJcCA9IHNuZF9wY2lfcXVpcmtfbG9va3VwX2lkKHZlbmRvcl9pZCwgZGV2aWNlX2lkLCBsaXN0KTsKIAlpZiAocCkgewogCQlpZiAocC0+dmFsdWUgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImN0eGZpOiAiCiAJCQkgICAgICAgIkRldmljZSAlMDR4OiUwNHggaXMgYmxhY2stbGlzdGVkXG4iLAotCQkJICAgICAgIGF0Yy0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yLAotCQkJICAgICAgIGF0Yy0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwkJCSAgICAgICB2ZW5kb3JfaWQsIGRldmljZV9pZCk7CiAJCQlyZXR1cm4gLUVOT0VOVDsKIAkJfQogCQlhdGMtPm1vZGVsID0gcC0+dmFsdWU7CkBAIC0xMjYxLDggKzEyNTcsNyBAQAogCWF0Yy0+bW9kZWxfbmFtZSA9IGN0X3N1YnN5c19uYW1lW2F0Yy0+bW9kZWxdOwogCXNuZF9wcmludGQoImN0eGZpOiBjaGlwICVzIG1vZGVsICVzICglMDR4OiUwNHgpIGlzIGZvdW5kXG4iLAogCQkgICBhdGMtPmNoaXBfbmFtZSwgYXRjLT5tb2RlbF9uYW1lLAotCQkgICBhdGMtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKLQkJICAgYXRjLT5wY2ktPnN1YnN5c3RlbV9kZXZpY2UpOworCQkgICB2ZW5kb3JfaWQsIGRldmljZV9pZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MzYsNyArMTYzMSw4IEBACiAKIGludCBfX2RldmluaXQgY3RfYXRjX2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBwY2lfZGV2ICpwY2ksCiAJCQkgICAgdW5zaWduZWQgaW50IHJzciwgdW5zaWduZWQgaW50IG1zciwKLQkJCSAgICBpbnQgY2hpcF90eXBlLCBzdHJ1Y3QgY3RfYXRjICoqcmF0YykKKwkJCSAgICBpbnQgY2hpcF90eXBlLCB1bnNpZ25lZCBpbnQgc3NpZCwKKwkJCSAgICBzdHJ1Y3QgY3RfYXRjICoqcmF0YykKIHsKIAlzdHJ1Y3QgY3RfYXRjICphdGM7CiAJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CkBAIC0xNjYyLDE0ICsxNjU4LDE0IEBACiAJbXV0ZXhfaW5pdCgmYXRjLT5hdGNfbXV0ZXgpOwogCiAJLyogRmluZCBjYXJkIG1vZGVsICovCi0JZXJyID0gYXRjX2lkZW50aWZ5X2NhcmQoYXRjKTsKKwllcnIgPSBhdGNfaWRlbnRpZnlfY2FyZChhdGMsIHNzaWQpOwogCWlmIChlcnIgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY3RhdGM6IENhcmQgbm90IHJlY29nbmlzZWRcbiIpOwogCQlnb3RvIGVycm9yMTsKIAl9CiAKIAkvKiBTZXQgdXAgZGV2aWNlIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQgb2JqZWN0ICovCi0JZXJyID0gY3Rfdm1fY3JlYXRlKCZhdGMtPnZtKTsKKwllcnIgPSBjdF92bV9jcmVhdGUoJmF0Yy0+dm0sIHBjaSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyb3IxOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuaCBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5oCmluZGV4IDlmZDhhNTcuLjcxNjdjMDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5oCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5oCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAogaW50IF9fZGV2aW5pdCBjdF9hdGNfY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHBjaV9kZXYgKnBjaSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgcnNyLCB1bnNpZ25lZCBpbnQgbXNyLCBpbnQgY2hpcF90eXBlLAotCQkJICAgIHN0cnVjdCBjdF9hdGMgKipyYXRjKTsKKwkJCSAgICB1bnNpZ25lZCBpbnQgc3Vic3lzaWQsIHN0cnVjdCBjdF9hdGMgKipyYXRjKTsKIGludCBfX2RldmluaXQgY3RfYXRjX2NyZWF0ZV9hbHNhX2RldnMoc3RydWN0IGN0X2F0YyAqYXRjKTsKIAogI2VuZGlmIC8qIENUQVRDX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jdHhmaS9jdHZtZW0uYyBiL3NvdW5kL3BjaS9jdHhmaS9jdHZtZW0uYwppbmRleCA2Yjc4NzUyLi42NWRhNmU0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3R4ZmkvY3R2bWVtLmMKKysrIGIvc291bmQvcGNpL2N0eGZpL2N0dm1lbS5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JcHRwID0gdm0tPnB0cFswXTsKKwlwdHAgPSAodW5zaWduZWQgbG9uZyAqKXZtLT5wdHBbMF0uYXJlYTsKIAlwdGVfc3RhcnQgPSAoYmxvY2stPmFkZHIgPj4gQ1RfUEFHRV9TSElGVCk7CiAJcGFnZXMgPSBibG9jay0+c2l6ZSA+PiBDVF9QQUdFX1NISUZUOwogCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrKSB7CkBAIC0xNTgsMjUgKzE1OCwyNSBAQAogfQogCiAvKiAqCi0gKiByZXR1cm4gdGhlIGhvc3QgKGttYWxsb2NlZCkgYWRkciBvZiB0aGUgQGluZGV4LXRoIGRldmljZQotICogcGFnZSB0YWxiZSBwYWdlIG9uIHN1Y2Nlc3MsIG9yIE5VTEwgb24gZmFpbHVyZS4KLSAqIFRoZSBmaXJzdCByZXR1cm5lZCBOVUxMIGluZGljYXRlcyB0aGUgdGVybWluYXRpb24uCisgKiByZXR1cm4gdGhlIGhvc3QgcGh5c2ljYWwgYWRkciBvZiB0aGUgQGluZGV4LXRoIGRldmljZQorICogcGFnZSB0YWJsZSBwYWdlIG9uIHN1Y2Nlc3MsIG9yIH4wVUwgb24gZmFpbHVyZS4KKyAqIFRoZSBmaXJzdCByZXR1cm5lZCB+MFVMIGluZGljYXRlcyB0aGUgdGVybWluYXRpb24uCiAgKiAqLwotc3RhdGljIHZvaWQgKgotY3RfZ2V0X3B0cF92aXJ0KHN0cnVjdCBjdF92bSAqdm0sIGludCBpbmRleCkKK3N0YXRpYyBkbWFfYWRkcl90CitjdF9nZXRfcHRwX3BoeXMoc3RydWN0IGN0X3ZtICp2bSwgaW50IGluZGV4KQogewotCXZvaWQgKmFkZHI7CisJZG1hX2FkZHJfdCBhZGRyOwogCi0JYWRkciA9IChpbmRleCA+PSBDVF9QVFBfTlVNKSA/IE5VTEwgOiB2bS0+cHRwW2luZGV4XTsKKwlhZGRyID0gKGluZGV4ID49IENUX1BUUF9OVU0pID8gfjBVTCA6IHZtLT5wdHBbaW5kZXhdLmFkZHI7CiAKIAlyZXR1cm4gYWRkcjsKIH0KIAotaW50IGN0X3ZtX2NyZWF0ZShzdHJ1Y3QgY3Rfdm0gKipydm0pCitpbnQgY3Rfdm1fY3JlYXRlKHN0cnVjdCBjdF92bSAqKnJ2bSwgc3RydWN0IHBjaV9kZXYgKnBjaSkKIHsKIAlzdHJ1Y3QgY3Rfdm0gKnZtOwogCXN0cnVjdCBjdF92bV9ibG9jayAqYmxvY2s7Ci0JaW50IGk7CisJaW50IGksIGVyciA9IDA7CiAKIAkqcnZtID0gTlVMTDsKIApAQCAtMTg4LDIzICsxODgsMjEgQEAKIAogCS8qIEFsbG9jYXRlIHBhZ2UgdGFibGUgcGFnZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQ1RfUFRQX05VTTsgaSsrKSB7Ci0JCXZtLT5wdHBbaV0gPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdm0tPnB0cFtpXSkKKwkJZXJyID0gc25kX2RtYV9hbGxvY19wYWdlcyhTTkRSVl9ETUFfVFlQRV9ERVYsCisJCQkJCSAgc25kX2RtYV9wY2lfZGF0YShwY2kpLAorCQkJCQkgIFBBR0VfU0laRSwgJnZtLT5wdHBbaV0pOworCQlpZiAoZXJyIDwgMCkKIAkJCWJyZWFrOwogCX0KLQlpZiAoIWkpIHsKKwlpZiAoZXJyIDwgMCkgewogCQkvKiBubyBwYWdlIHRhYmxlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgKi8KLQkJa2ZyZWUodm0pOworCQljdF92bV9kZXN0cm95KHZtKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXZtLT5zaXplID0gQ1RfQUREUlNfUEVSX1BBR0UgKiBpOwotCS8qIEluaXRpYWxpc2UgcmVtYWluaW5nIHB0cHMgKi8KLQlmb3IgKDsgaSA8IENUX1BUUF9OVU07IGkrKykKLQkJdm0tPnB0cFtpXSA9IE5VTEw7Ci0KIAl2bS0+bWFwID0gY3Rfdm1fbWFwOwogCXZtLT51bm1hcCA9IGN0X3ZtX3VubWFwOwotCXZtLT5nZXRfcHRwX3ZpcnQgPSBjdF9nZXRfcHRwX3ZpcnQ7CisJdm0tPmdldF9wdHBfcGh5cyA9IGN0X2dldF9wdHBfcGh5czsKIAlJTklUX0xJU1RfSEVBRCgmdm0tPnVudXNlZCk7CiAJSU5JVF9MSVNUX0hFQUQoJnZtLT51c2VkKTsKIAlibG9jayA9IGt6YWxsb2Moc2l6ZW9mKCpibG9jayksIEdGUF9LRVJORUwpOwpAQCAtMjQyLDcgKzI0MCw3IEBACiAKIAkvKiBmcmVlIGFsbG9jYXRlZCBwYWdlIHRhYmxlIHBhZ2VzICovCiAJZm9yIChpID0gMDsgaSA8IENUX1BUUF9OVU07IGkrKykKLQkJa2ZyZWUodm0tPnB0cFtpXSk7CisJCXNuZF9kbWFfZnJlZV9wYWdlcygmdm0tPnB0cFtpXSk7CiAKIAl2bS0+c2l6ZSA9IDA7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jdHhmaS9jdHZtZW0uaCBiL3NvdW5kL3BjaS9jdHhmaS9jdHZtZW0uaAppbmRleCAwMWU0ZmQwLi5iMjNhZGZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3R4ZmkvY3R2bWVtLmgKKysrIGIvc291bmQvcGNpL2N0eGZpL2N0dm1lbS5oCkBAIC0yMiw2ICsyMiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxzb3VuZC9tZW1hbGxvYy5oPgogCiAvKiBUaGUgY2hpcCBjYW4gaGFuZGxlIHRoZSBwYWdlIHRhYmxlIG9mIDRrIHBhZ2VzCiAgKiAoZW11MjBrMSBjYW4gaGFuZGxlIGV2ZW4gOGsgcGFnZXMsIGJ1dCB3ZSBkb24ndCB1c2UgaXQgcmlnaHQgbm93KQpAQCAtNDEsNyArNDMsNyBAQAogCiAvKiBWaXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50IG9iamVjdCBmb3IgY2FyZCBkZXZpY2UgKi8KIHN0cnVjdCBjdF92bSB7Ci0Jdm9pZCAqcHRwW0NUX1BUUF9OVU1dOwkJLyogRGV2aWNlIHBhZ2UgdGFibGUgcGFnZXMgKi8KKwlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgcHRwW0NUX1BUUF9OVU1dOwkvKiBEZXZpY2UgcGFnZSB0YWJsZSBwYWdlcyAqLwogCXVuc2lnbmVkIGludCBzaXplOwkJLyogQXZhaWxhYmxlIGFkZHIgc3BhY2UgaW4gYnl0ZXMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHVudXNlZDsJLyogTGlzdCBvZiB1bnVzZWQgYmxvY2tzICovCiAJc3RydWN0IGxpc3RfaGVhZCB1c2VkOwkJLyogTGlzdCBvZiB1c2VkIGJsb2NrcyAqLwpAQCAtNTIsMTAgKzU0LDEwIEBACiAJCQkJICAgaW50IHNpemUpOwogCS8qIFVubWFwIGRldmljZSBsb2dpY2FsIGFkZHIgYXJlYS4gKi8KIAl2b2lkICgqdW5tYXApKHN0cnVjdCBjdF92bSAqLCBzdHJ1Y3QgY3Rfdm1fYmxvY2sgKmJsb2NrKTsKLQl2b2lkICooKmdldF9wdHBfdmlydCkoc3RydWN0IGN0X3ZtICp2bSwgaW50IGluZGV4KTsKKwlkbWFfYWRkcl90ICgqZ2V0X3B0cF9waHlzKShzdHJ1Y3QgY3Rfdm0gKnZtLCBpbnQgaW5kZXgpOwogfTsKIAotaW50IGN0X3ZtX2NyZWF0ZShzdHJ1Y3QgY3Rfdm0gKipydm0pOworaW50IGN0X3ZtX2NyZWF0ZShzdHJ1Y3QgY3Rfdm0gKipydm0sIHN0cnVjdCBwY2lfZGV2ICpwY2kpOwogdm9pZCBjdF92bV9kZXN0cm95KHN0cnVjdCBjdF92bSAqdm0pOwogCiAjZW5kaWYgLyogQ1RWTUVNX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jdHhmaS94ZmkuYyBiL3NvdW5kL3BjaS9jdHhmaS94ZmkuYwppbmRleCA3NjU0MTc0Li5mNDJlN2UxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3R4ZmkveGZpLmMKKysrIGIvc291bmQvcGNpL2N0eGZpL3hmaS5jCkBAIC0zMiw2ICszMiw3IEBACiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwogc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QOworc3RhdGljIHVuc2lnbmVkIGludCBzdWJzeXN0ZW1bU05EUlZfQ0FSRFNdOwogCiBtb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIENyZWF0aXZlIFgtRmkgZHJpdmVyIik7CkBAIC0zOSw4ICs0MCwxMCBAQAogTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgQ3JlYXRpdmUgWC1GaSBkcml2ZXIiKTsKIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgQ3JlYXRpdmUgWC1GaSBkcml2ZXIiKTsKK21vZHVsZV9wYXJhbV9hcnJheShzdWJzeXN0ZW0sIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHN1YnN5c3RlbSwgIk92ZXJyaWRlIHN1YnN5c3RlbSBJRCBmb3IgQ3JlYXRpdmUgWC1GaSBkcml2ZXIiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGN0X3BjaV9kZXZfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY3RfcGNpX2Rldl9pZHMpID0gewogCS8qIG9ubHkgWC1GaSBpcyBzdXBwb3J0ZWQsIHNvLi4uICovCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ1JFQVRJVkUsIFBDSV9ERVZJQ0VfSURfQ1JFQVRJVkVfMjBLMSksCiAJICAuZHJpdmVyX2RhdGEgPSBBVEMyMEsxLApAQCAtODUsNyArODgsNyBAQAogCQltdWx0aXBsZSA9IDI7CiAJfQogCWVyciA9IGN0X2F0Y19jcmVhdGUoY2FyZCwgcGNpLCByZWZlcmVuY2VfcmF0ZSwgbXVsdGlwbGUsCi0JCQkgICAgcGNpX2lkLT5kcml2ZXJfZGF0YSwgJmF0Yyk7CisJCQkgICAgcGNpX2lkLT5kcml2ZXJfZGF0YSwgc3Vic3lzdGVtW2Rldl0sICZhdGMpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm9yOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjAuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMC5jCmluZGV4IDhjNmRiM2EuLmE2NWJhZmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMC5jCkBAIC02Myw3ICs2Myw3IEBACiAJezAsICJkYXJsYTIwX2RzcC5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDE4MDEsIDB4RUNDMCwgMHgwMDEwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzAxIERhcmxhMjAgcmV2LjAgKi8KIAl7MCx9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTIwX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTIwX2RzcC5jCmluZGV4IDI5MDQzMzAuLjIwYzdjYmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjBfZHNwLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0RBUkxBMjBfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfREFSTEEyMF9EU1A7CiAJY2hpcC0+c3BkaWZfc3RhdHVzID0gR0RfU1BESUZfU1RBVFVTX1VOREVGOwogCWNoaXAtPmNsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfVU5ERUY7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCkBAIC01NywxNSArNTcsMTkgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogLyogVGhlIERhcmxhMjAgaGFzIG5vIGV4dGVybmFsIGNsb2NrIHNvdXJjZXMgKi8KIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0LmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjQuYwppbmRleCAwNGNiZjNlLi4wYTZjNTBiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjQuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjQuYwpAQCAtNjcsNyArNjcsNyBAQAogCXswLCAiZGFybGEyNF9kc3AuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDA0MCwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBEYXJsYTI0IHJldi4wICovCiAJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDA0MSwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBEYXJsYTI0IHJldi4xICovCiAJezAsfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0X2RzcC5jCmluZGV4IDYwMjI4NzMuLjZkYTY2NjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyNF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjRfZHNwLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0RBUkxBMjRfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfREFSTEEyNF9EU1A7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCiAJICAgd29ya3MgT0sgKi8KIAljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CkBAIC01NiwxNSArNTYsMTkgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJdTMyIGNsb2Nrc19mcm9tX2RzcCwgY2xvY2tfYml0czsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZy5jCmluZGV4IDQwMjJlNDMuLmY1MTQyNzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2cuYwpAQCAtODEsNyArODEsNyBAQAogCXswLCAiM2dfYXNpYy5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMTAwLCAwLCAwLCAwfSwJLyogRWNobyAzRyAqLwogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCmluZGV4IDU3OTY3ZTUuLjNjZGMyZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCkBAIC02MSw3ICs2MSw3IEBACiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CiAJY2hpcC0+aGFzX21pZGkgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19FQ0hPM0dfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfRUNITzNHX0RTUDsKIAogCS8qIExvYWQgdGhlIERTUCBjb2RlIGFuZCB0aGUgQVNJQyBvbiB0aGUgUENJIGNhcmQgYW5kIGdldAogCXdoYXQgdHlwZSBvZiBleHRlcm5hbCBib3ggaXMgYXR0YWNoZWQgKi8KQEAgLTk3LDIwICs5Nyw2IEBACiAJY2hpcC0+ZGlnaXRhbF9tb2RlcyA9CUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfUkNBIHwKIAkJCQlFQ0hPQ0FQU19IQVNfRElHSVRBTF9NT0RFX1NQRElGX09QVElDQUwgfAogCQkJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfQURBVDsKLQljaGlwLT5kaWdpdGFsX21vZGUgPQlESUdJVEFMX01PREVfU1BESUZfUkNBOwotCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IEZBTFNFOwotCWNoaXAtPm5vbl9hdWRpb19zcGRpZiA9IEZBTFNFOwotCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwotCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gc2V0X2RpZ2l0YWxfbW9kZShjaGlwLCBESUdJVEFMX01PREVfU1BESUZfUkNBKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzZXRfcGhhbnRvbV9wb3dlcihjaGlwLCAwKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIFRSVUUpOwogCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CkBAIC0xMTgsNiArMTA0LDE4IEBACiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWNoaXAtPmRpZ2l0YWxfbW9kZSA9IERJR0lUQUxfTU9ERV9TUERJRl9SQ0E7CisJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gRkFMU0U7CisJY2hpcC0+bm9uX2F1ZGlvX3NwZGlmID0gRkFMU0U7CisJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CisJY2hpcC0+cGhhbnRvbV9wb3dlciA9IEZBTFNFOworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIGludCBzZXRfcGhhbnRvbV9wb3dlcihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIG9uKQogewogCXUzMiBjb250cm9sX3JlZyA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwppbmRleCAxMzA1ZjdjLi44ZGFiODJkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKQEAgLTM2LDIyICszNiw2MSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBjaGFubmVsc19saXN0WzEwXSA9IHsxLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAxNiwgOTk5OTk5fTsKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYl9zY2FsZV9vdXRwdXRfZ2FpbiwgLTEyODAwLCAxMDAsIDEpOwogCisKKwogc3RhdGljIGludCBnZXRfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZndfZW50cnksCi0JCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZybSwgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKKwkJCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNvbnN0IHNob3J0IGZ3X2luZGV4KQogewogCWludCBlcnI7CiAJY2hhciBuYW1lWzMwXTsKLQlERV9BQ1QoKCJmaXJtd2FyZSByZXF1ZXN0ZWQ6ICVzXG4iLCBmcm0tPmRhdGEpKTsKLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJlYS8lcyIsIGZybS0+ZGF0YSk7Ci0JaWYgKChlcnIgPSByZXF1ZXN0X2Zpcm13YXJlKGZ3X2VudHJ5LCBuYW1lLCBwY2lfZGV2aWNlKGNoaXApKSkgPCAwKQorCisjaWZkZWYgQ09ORklHX1BNCisJaWYgKGNoaXAtPmZ3X2NhY2hlW2Z3X2luZGV4XSkgeworCQlERV9BQ1QoKCJmaXJtd2FyZSByZXF1ZXN0ZWQ6ICVzIGlzIGNhY2hlZFxuIiwgY2FyZF9md1tmd19pbmRleF0uZGF0YSkpOworCQkqZndfZW50cnkgPSBjaGlwLT5md19jYWNoZVtmd19pbmRleF07CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCisJREVfQUNUKCgiZmlybXdhcmUgcmVxdWVzdGVkOiAlc1xuIiwgY2FyZF9md1tmd19pbmRleF0uZGF0YSkpOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImVhLyVzIiwgY2FyZF9md1tmd19pbmRleF0uZGF0YSk7CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZShmd19lbnRyeSwgbmFtZSwgcGNpX2RldmljZShjaGlwKSk7CisJaWYgKGVyciA8IDApCiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImdldF9maXJtd2FyZSgpOiBGaXJtd2FyZSBub3QgYXZhaWxhYmxlICglZClcbiIsIGVycik7CisjaWZkZWYgQ09ORklHX1BNCisJZWxzZQorCQljaGlwLT5md19jYWNoZVtmd19pbmRleF0gPSAqZndfZW50cnk7CisjZW5kaWYKIAlyZXR1cm4gZXJyOwogfQogCisKKwogc3RhdGljIHZvaWQgZnJlZV9maXJtd2FyZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5KQogeworI2lmZGVmIENPTkZJR19QTQorCURFX0FDVCgoImZpcm13YXJlIG5vdCByZWxlYXNlZCAoa2VwdCBpbiBjYWNoZSlcbiIpKTsKKyNlbHNlCiAJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CiAJREVfQUNUKCgiZmlybXdhcmUgcmVsZWFzZWRcbiIpKTsKKyNlbmRpZgorfQorCisKKworc3RhdGljIHZvaWQgZnJlZV9maXJtd2FyZV9jYWNoZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworI2lmZGVmIENPTkZJR19QTQorCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDggOyBpKyspCisJCWlmIChjaGlwLT5md19jYWNoZVtpXSkgeworCQkJcmVsZWFzZV9maXJtd2FyZShjaGlwLT5md19jYWNoZVtpXSk7CisJCQlERV9BQ1QoKCJyZWxlYXNlX2Zpcm13YXJlKCVkKVxuIiwgaSkpOworCQl9CisKKwlERV9BQ1QoKCJmaXJtd2FyZV9jYWNoZSByZWxlYXNlZFxuIikpOworI2VuZGlmCiB9CiAKIApAQCAtNzE0LDYgKzc1Myw4IEBACiAKIAlzcGluX2xvY2soJmNoaXAtPmxvY2spOwogCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJCURFX0FDVCgoInBjbV90cmlnZ2VyIHJlc3VtZVxuIikpOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgogCQlERV9BQ1QoKCJwY21fdHJpZ2dlciBzdGFydFxuIikpOwpAQCAtNzM3LDYgKzc3OCw4IEBACiAJCWVyciA9IHN0YXJ0X3RyYW5zcG9ydChjaGlwLCBjaGFubmVsbWFzaywKIAkJCQkgICAgICBjaGlwLT5waXBlX2N5Y2xpY19tYXNrKTsKIAkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCQlERV9BQ1QoKCJwY21fdHJpZ2dlciBzdXNwZW5kXG4iKSk7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgogCQlERV9BQ1QoKCJwY21fdHJpZ2dlciBzdG9wXG4iKSk7CiAJCWZvciAoaSA9IDA7IGkgPCBEU1BfTUFYUElQRVM7IGkrKykgewpAQCAtMTgyMSw3ICsxODY0LDkgQEAKIAkvKiBUaGUgaGFyZHdhcmUgZG9lc24ndCB0ZWxsIHVzIHdoaWNoIHN1YnN0cmVhbSBjYXVzZWQgdGhlIGlycSwKIAl0aHVzIHdlIGhhdmUgdG8gY2hlY2sgYWxsIHJ1bm5pbmcgc3Vic3RyZWFtcy4gKi8KIAlmb3IgKHNzID0gMDsgc3MgPCBEU1BfTUFYUElQRVM7IHNzKyspIHsKLQkJaWYgKChzdWJzdHJlYW0gPSBjaGlwLT5zdWJzdHJlYW1bc3NdKSkgeworCQlzdWJzdHJlYW0gPSBjaGlwLT5zdWJzdHJlYW1bc3NdOworCQlpZiAoc3Vic3RyZWFtICYmICgoc3RydWN0IGF1ZGlvcGlwZSAqKXN1YnN0cmVhbS0+cnVudGltZS0+CisJCQkJcHJpdmF0ZV9kYXRhKS0+c3RhdGUgPT0gUElQRV9TVEFURV9TVEFSVEVEKSB7CiAJCQlwZXJpb2QgPSBwY21fcG9pbnRlcihzdWJzdHJlYW0pIC8KIAkJCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPnBlcmlvZF9zaXplOwogCQkJaWYgKHBlcmlvZCAhPSBjaGlwLT5sYXN0X3BlcmlvZFtzc10pIHsKQEAgLTE4NzQsNiArMTkxOSw3IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CiAKIAkvKiByZWxlYXNlIGNoaXAgZGF0YSAqLworCWZyZWVfZmlybXdhcmVfY2FjaGUoY2hpcCk7CiAJa2ZyZWUoY2hpcCk7CiAJREVfSU5JVCgoIkNoaXAgZnJlZWQuXG4iKSk7CiAJcmV0dXJuIDA7CkBAIC0xOTExLDE4ICsxOTU3LDI3IEBACiAJCXJldHVybiBlcnI7CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAotCS8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhICovCi0JY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjaGlwKSB7Ci0JCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkvKiBBbGxvY2F0ZSBjaGlwIGlmIG5lZWRlZCAqLworCWlmICghKnJjaGlwKSB7CisJCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworCQlpZiAoIWNoaXApIHsKKwkJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJREVfSU5JVCgoImNoaXA9JXBcbiIsIGNoaXApKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmxvY2spOworCQljaGlwLT5jYXJkID0gY2FyZDsKKwkJY2hpcC0+cGNpID0gcGNpOworCQljaGlwLT5pcnEgPSAtMTsKKwkJYXRvbWljX3NldCgmY2hpcC0+b3BlbmNvdW50LCAwKTsKKwkJbXV0ZXhfaW5pdCgmY2hpcC0+bW9kZV9tdXRleCk7CisJCWNoaXAtPmNhbl9zZXRfcmF0ZSA9IDE7CisJfSBlbHNlIHsKKwkJLyogSWYgdGhpcyB3YXMgY2FsbGVkIGZyb20gdGhlIHJlc3VtZSBmdW5jdGlvbiwgY2hpcCBpcworCQkgKiBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaXQgY29udGFpbnMgY3VycmVudCBjYXJkIHNldHRpbmdzLgorCQkgKi8KKwkJY2hpcCA9ICpyY2hpcDsKIAl9Ci0JREVfSU5JVCgoImNoaXA9JXBcbiIsIGNoaXApKTsKLQotCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKLQljaGlwLT5jYXJkID0gY2FyZDsKLQljaGlwLT5wY2kgPSBwY2k7Ci0JY2hpcC0+aXJxID0gLTE7CiAKIAkvKiBQQ0kgcmVzb3VyY2UgYWxsb2NhdGlvbiAqLwogCWNoaXAtPmRzcF9yZWdpc3RlcnNfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwpAQCAtMTk2Miw3ICsyMDE3LDkgQEAKIAljaGlwLT5jb21tX3BhZ2UgPSAoc3RydWN0IGNvbW1fcGFnZSAqKWNoaXAtPmNvbW1wYWdlX2RtYV9idWYuYXJlYTsKIAogCWVyciA9IGluaXRfaHcoY2hpcCwgY2hpcC0+cGNpLT5kZXZpY2UsIGNoaXAtPnBjaS0+c3Vic3lzdGVtX2RldmljZSk7Ci0JaWYgKGVycikgeworCWlmIChlcnIgPj0gMCkKKwkJZXJyID0gc2V0X21peGVyX2RlZmF1bHRzKGNoaXApOworCWlmIChlcnIgPCAwKSB7CiAJCURFX0lOSVQoKCJpbml0X2h3IGVycj0lZFxuIiwgZXJyKSk7CiAJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CiAJCXJldHVybiBlcnI7CkBAIC0xOTczLDkgKzIwMzAsNiBAQAogCQlzbmRfZWNob19mcmVlKGNoaXApOwogCQlyZXR1cm4gZXJyOwogCX0KLQlhdG9taWNfc2V0KCZjaGlwLT5vcGVuY291bnQsIDApOwotCW11dGV4X2luaXQoJmNoaXAtPm1vZGVfbXV0ZXgpOwotCWNoaXAtPmNhbl9zZXRfcmF0ZSA9IDE7CiAJKnJjaGlwID0gY2hpcDsKIAkvKiBJbml0IGRvbmUgISAqLwogCXJldHVybiAwOwpAQCAtMjAwOCw2ICsyMDYyLDcgQEAKIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKIAorCWNoaXAgPSBOVUxMOwkvKiBUZWxscyBzbmRfZWNob19jcmVhdGUgdG8gYWxsb2NhdGUgY2hpcCAqLwogCWlmICgoZXJyID0gc25kX2VjaG9fY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKQEAgLTIxNDcsNiArMjIwMiwxMTIgQEAKIAogCiAKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkKKworc3RhdGljIGludCBzbmRfZWNob19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwID0gcGNpX2dldF9kcnZkYXRhKHBjaSk7CisKKwlERV9JTklUKCgic3VzcGVuZCBzdGFydFxuIikpOworCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+YW5hbG9nX3BjbSk7CisJc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5kaWdpdGFsX3BjbSk7CisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfTUlESQorCS8qIFRoaXMgY2FsbCBjYW4gc2xlZXAgKi8KKwlpZiAoY2hpcC0+bWlkaV9vdXQpCisJCXNuZF9lY2hvX21pZGlfb3V0cHV0X3RyaWdnZXIoY2hpcC0+bWlkaV9vdXQsIDApOworI2VuZGlmCisJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKwljbGVhcl9oYW5kc2hha2UoY2hpcCk7CisJaWYgKHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19HT19DT01BVE9TRSkgPCAwKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKwlzcGluX3VubG9ja19pcnEoJmNoaXAtPmxvY2spOworCisJY2hpcC0+ZHNwX2NvZGUgPSBOVUxMOworCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CisJY2hpcC0+aXJxID0gLTE7CisJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKworCURFX0lOSVQoKCJzdXNwZW5kIGRvbmVcbiIpKTsKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgc25kX2VjaG9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2kpCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcCA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOworCXN0cnVjdCBjb21tX3BhZ2UgKmNvbW1wYWdlLCAqY29tbXBhZ2VfYmFrOworCXUzMiBwaXBlX2FsbG9jX21hc2s7CisJaW50IGVycjsKKworCURFX0lOSVQoKCJyZXN1bWUgc3RhcnRcbiIpKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOworCWNvbW1wYWdlX2JhayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBlY2hvYXVkaW8pLCBHRlBfS0VSTkVMKTsKKwljb21tcGFnZSA9IGNoaXAtPmNvbW1fcGFnZTsKKwltZW1jcHkoY29tbXBhZ2VfYmFrLCBjb21tcGFnZSwgc2l6ZW9mKHN0cnVjdCBjb21tX3BhZ2UpKTsKKworCWVyciA9IGluaXRfaHcoY2hpcCwgY2hpcC0+cGNpLT5kZXZpY2UsIGNoaXAtPnBjaS0+c3Vic3lzdGVtX2RldmljZSk7CisJaWYgKGVyciA8IDApIHsKKwkJa2ZyZWUoY29tbXBhZ2VfYmFrKTsKKwkJREVfSU5JVCgoInJlc3VtZSBpbml0X2h3IGVycj0lZFxuIiwgZXJyKSk7CisJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CisJCXJldHVybiBlcnI7CisJfQorCURFX0lOSVQoKCJyZXN1bWUgaW5pdCBPS1xuIikpOworCisJLyogVGVtcG9yYXJpbHkgc2V0IGNoaXAtPnBpcGVfYWxsb2NfbWFzaz0wIG90aGVyd2lzZQorCSAqIHJlc3RvcmVfZHNwX3NldHRpbmdzKCkgZmFpbHMuCisJICovCisJcGlwZV9hbGxvY19tYXNrID0gY2hpcC0+cGlwZV9hbGxvY19tYXNrOworCWNoaXAtPnBpcGVfYWxsb2NfbWFzayA9IDA7CisJZXJyID0gcmVzdG9yZV9kc3BfcmV0dGluZ3MoY2hpcCk7CisJY2hpcC0+cGlwZV9hbGxvY19tYXNrID0gcGlwZV9hbGxvY19tYXNrOworCWlmIChlcnIgPCAwKSB7CisJCWtmcmVlKGNvbW1wYWdlX2Jhayk7CisJCXJldHVybiBlcnI7CisJfQorCURFX0lOSVQoKCJyZXN1bWUgcmVzdG9yZSBPS1xuIikpOworCisJbWVtY3B5KCZjb21tcGFnZS0+YXVkaW9fZm9ybWF0LCAmY29tbXBhZ2VfYmFrLT5hdWRpb19mb3JtYXQsCisJCXNpemVvZihjb21tcGFnZS0+YXVkaW9fZm9ybWF0KSk7CisJbWVtY3B5KCZjb21tcGFnZS0+c2dsaXN0X2FkZHIsICZjb21tcGFnZV9iYWstPnNnbGlzdF9hZGRyLAorCQlzaXplb2YoY29tbXBhZ2UtPnNnbGlzdF9hZGRyKSk7CisJbWVtY3B5KCZjb21tcGFnZS0+bWlkaV9vdXRwdXQsICZjb21tcGFnZV9iYWstPm1pZGlfb3V0cHV0LAorCQlzaXplb2YoY29tbXBhZ2UtPm1pZGlfb3V0cHV0KSk7CisJa2ZyZWUoY29tbXBhZ2VfYmFrKTsKKworCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2VjaG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCUVDSE9DQVJEX05BTUUsIGNoaXApKSB7CisJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBncmFiIGlycVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWNoaXAtPmlycSA9IHBjaS0+aXJxOworCURFX0lOSVQoKCJyZXN1bWUgaXJxPSVkXG4iLCBjaGlwLT5pcnEpKTsKKworI2lmZGVmIEVDSE9DQVJEX0hBU19NSURJCisJaWYgKGNoaXAtPm1pZGlfaW5wdXRfZW5hYmxlZCkKKwkJZW5hYmxlX21pZGlfaW5wdXQoY2hpcCwgVFJVRSk7CisJaWYgKGNoaXAtPm1pZGlfb3V0KQorCQlzbmRfZWNob19taWRpX291dHB1dF90cmlnZ2VyKGNoaXAtPm1pZGlfb3V0LCAxKTsKKyNlbmRpZgorCisJREVfSU5JVCgoInJlc3VtZSBkb25lXG4iKSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworCisKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfZWNob19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSkKIHsKIAlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwOwpAQCAtMjE2OSw2ICsyMzMwLDEwIEBACiAJLmlkX3RhYmxlID0gc25kX2VjaG9faWRzLAogCS5wcm9iZSA9IHNuZF9lY2hvX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfZWNob19yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gc25kX2VjaG9fc3VzcGVuZCwKKwkucmVzdW1lID0gc25kX2VjaG9fcmVzdW1lLAorI2VuZGlmIC8qIENPTkZJR19QTSAqLwogfTsKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaAppbmRleCBmOTQ5MGFlLi4xZGY5NzRkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmgKQEAgLTQ0MiwxMyArNDQyLDE2IEBACiAJdTE2IGRldmljZV9pZCwgc3ViZGV2aWNlX2lkOwogCXUxNiAqZHNwX2NvZGU7CQkJLyogQ3VycmVudCBEU1AgY29kZSBsb2FkZWQsCiAJCQkJCSAqIE5VTEwgaWYgbm90aGluZyBsb2FkZWQgKi8KLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmRzcF9jb2RlX3RvX2xvYWQ7LyogRFNQIGNvZGUgdG8gbG9hZCAqLwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpY19jb2RlOwkvKiBDdXJyZW50IEFTSUMgY29kZSAqLworCXNob3J0IGRzcF9jb2RlX3RvX2xvYWQ7CQkvKiBEU1AgY29kZSB0byBsb2FkICovCisJc2hvcnQgYXNpY19jb2RlOwkJLyogQ3VycmVudCBBU0lDIGNvZGUgKi8KIAl1MzIgY29tbV9wYWdlX3BoeXM7CQkJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUKIAkJCQkJCSAqIG1lbW9yeSBzZWVuIGJ5IERTUCAqLwogCXZvbGF0aWxlIHUzMiBfX2lvbWVtICpkc3BfcmVnaXN0ZXJzOwkvKiBEU1AncyByZWdpc3RlciBiYXNlICovCiAJdTMyIGFjdGl2ZV9tYXNrOwkJCS8qIENocy4gYWN0aXZlIG1hc2sgb3IKIAkJCQkJCSAqIHB1bmtzIG91dCAqLworI2lmZGVmIENPTkZJR19QTQorCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfY2FjaGVbOF07CS8qIENhY2hlZCBmaXJtd2FyZXMgKi8KKyNlbmRpZgogCiAjaWZkZWYgRUNIT0NBUkRfSEFTX01JREkKIAl1MTYgbXRjX3N0YXRlOwkJCQkvKiBTdGF0ZSBmb3IgTUlESSBpbnB1dCBwYXJzaW5nIHN0YXRlIG1hY2hpbmUgKi8KQEAgLTQ2NCwxMSArNDY3LDEzIEBACiBzdGF0aWMgaW50IHdhaXRfaGFuZHNoYWtlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwogc3RhdGljIGludCBzZW5kX3ZlY3RvcihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY29tbWFuZCk7CiBzdGF0aWMgaW50IGdldF9maXJtd2FyZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmd19lbnRyeSwKLQkJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnJtLCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKKwkJCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNvbnN0IHNob3J0IGZ3X2luZGV4KTsKIHN0YXRpYyB2b2lkIGZyZWVfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSk7CiAKICNpZmRlZiBFQ0hPQ0FSRF9IQVNfTUlESQogc3RhdGljIGludCBlbmFibGVfbWlkaV9pbnB1dChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIGVuYWJsZSk7CitzdGF0aWMgdm9pZCBzbmRfZWNob19taWRpX291dHB1dF90cmlnZ2VyKAorCQkJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgdXApOwogc3RhdGljIGludCBtaWRpX3NlcnZpY2VfaXJxKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwogc3RhdGljIGludCBfX2RldmluaXQgc25kX2VjaG9fbWlkaV9jcmVhdGUoc3RydWN0IHNuZF9jYXJkICpjYXJkLAogCQkJCQkgIHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMKaW5kZXggZTMyYTc0OC4uNjU4ZGI0NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb18zZy5jCkBAIC0yMjcsMTIgKzIyNywxMSBAQAogCS8qIEdpdmUgdGhlIERTUCBhIGZldyBtaWxsaXNlY29uZHMgdG8gc2V0dGxlIGRvd24gKi8KIAltZGVsYXkoMik7CiAKLQllcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfM0dfQVNJQywKLQkJCQkmY2FyZF9md1tGV18zR19BU0lDXSk7CisJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEXzNHX0FTSUMsIEZXXzNHX0FTSUMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2hpcC0+YXNpY19jb2RlID0gJmNhcmRfZndbRldfM0dfQVNJQ107CisJY2hpcC0+YXNpY19jb2RlID0gRldfM0dfQVNJQzsKIAogCS8qIE5vdyBnaXZlIHRoZSBuZXcgQVNJQyBzb21lIHRpbWUgdG8gc2V0IHVwICovCiAJbXNsZWVwKDEwMDApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYwppbmRleCA0ZGY1MWVmLi42NDQxN2E3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYwpAQCAtMTc1LDE1ICsxNzUsMTUgQEAKICNpZmRlZiBFQ0hPQ0FSRF9IQVNfQVNJQwogCiAvKiBMb2FkIEFTSUMgY29kZSAtIGRvbmUgYWZ0ZXIgdGhlIERTUCBpcyBsb2FkZWQgKi8KLXN0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljKQorc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLCBzaG9ydCBhc2ljKQogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJaW50IGVycjsKIAl1MzIgaSwgc2l6ZTsKIAl1OCAqY29kZTsKIAotCWlmICgoZXJyID0gZ2V0X2Zpcm13YXJlKCZmdywgYXNpYywgY2hpcCkpIDwgMCkgeworCWVyciA9IGdldF9maXJtd2FyZSgmZncsIGNoaXAsIGFzaWMpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJGaXJtd2FyZSBub3QgZm91bmQgIVxuIik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMjQ1LDcgKzI0NSw4IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmICgoaSA9IGdldF9maXJtd2FyZSgmZncsICZjYXJkX2Z3W0ZXXzM2MV9MT0FERVJdLCBjaGlwKSkgPCAwKSB7CisJaSA9IGdldF9maXJtd2FyZSgmZncsIGNoaXAsIEZXXzM2MV9MT0FERVIpOworCWlmIChpIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiRmlybXdhcmUgbm90IGZvdW5kICFcbiIpOwogCQlyZXR1cm4gaTsKIAl9CkBAIC00ODUsNyArNDg2LDggQEAKIAkJY2hpcC0+ZHNwX2NvZGUgPSBOVUxMOwogCX0KIAotCWlmICgoZXJyID0gZ2V0X2Zpcm13YXJlKCZmdywgY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCwgY2hpcCkpIDwgMCkKKwllcnIgPSBnZXRfZmlybXdhcmUoJmZ3LCBjaGlwLCBjaGlwLT5kc3BfY29kZV90b19sb2FkKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAllcnIgPSBsb2FkX2RzcChjaGlwLCAodTE2ICopZnctPmRhdGEpOwogCWZyZWVfZmlybXdhcmUoZncpOwpAQCAtNDk1LDkgKzQ5Nyw2IEBACiAJaWYgKChib3hfdHlwZSA9IGxvYWRfYXNpYyhjaGlwKSkgPCAwKQogCQlyZXR1cm4gYm94X3R5cGU7CS8qIGVycm9yICovCiAKLQlpZiAoKGVyciA9IHJlc3RvcmVfZHNwX3JldHRpbmdzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KIAlyZXR1cm4gYm94X3R5cGU7CiB9CiAKQEAgLTY1NywyNSArNjU2LDg5IEBACiAKIHN0YXRpYyBpbnQgcmVzdG9yZV9kc3BfcmV0dGluZ3Moc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKIHsKLQlpbnQgZXJyOworCWludCBpLCBvLCBlcnI7CiAJREVfSU5JVCgoInJlc3RvcmVfZHNwX3NldHRpbmdzXG4iKSk7CiAKIAlpZiAoKGVyciA9IGNoZWNrX2FzaWNfc3RhdHVzKGNoaXApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQkvKiBAIEdpbmEyMC9EYXJsYTIwIG9ubHkuIFNob3VsZCBiZSBoYXJtbGVzcyBmb3Igb3RoZXIgY2FyZHMuICovCisJLyogR2luYTIwL0RhcmxhMjAgb25seS4gU2hvdWxkIGJlIGhhcm1sZXNzIGZvciBvdGhlciBjYXJkcy4gKi8KIAljaGlwLT5jb21tX3BhZ2UtPmdkX2Nsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfVU5ERUY7CiAJY2hpcC0+Y29tbV9wYWdlLT5nZF9zcGRpZl9zdGF0dXMgPSBHRF9TUERJRl9TVEFUVVNfVU5ERUY7CiAJY2hpcC0+Y29tbV9wYWdlLT5oYW5kc2hha2UgPSAweGZmZmZmZmZmOwogCi0JaWYgKChlcnIgPSBzZXRfc2FtcGxlX3JhdGUoY2hpcCwgY2hpcC0+c2FtcGxlX3JhdGUpKSA8IDApCisJLyogUmVzdG9yZSBvdXRwdXQgYnVzc2VzICovCisJZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfb3V0KGNoaXApOyBpKyspIHsKKwkJZXJyID0gc2V0X291dHB1dF9nYWluKGNoaXAsIGksIGNoaXAtPm91dHB1dF9nYWluW2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworI2lmZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpcGVzX291dChjaGlwKTsgaSsrKQorCQlmb3IgKG8gPSAwOyBvIDwgbnVtX2J1c3Nlc19vdXQoY2hpcCk7IG8rKykgeworCQkJZXJyID0gc2V0X3ZtaXhlcl9nYWluKGNoaXAsIG8sIGksCisJCQkJCQljaGlwLT52bWl4ZXJfZ2FpbltvXVtpXSk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJaWYgKHVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKyNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfVk1JWEVSICovCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgorCWZvciAobyA9IDA7IG8gPCBudW1fYnVzc2VzX291dChjaGlwKTsgbysrKQorCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1c3Nlc19pbihjaGlwKTsgaSsrKSB7CisJCQllcnIgPSBzZXRfbW9uaXRvcl9nYWluKGNoaXAsIG8sIGksCisJCQkJCQljaGlwLT5tb25pdG9yX2dhaW5bb11baV0pOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19NT05JVE9SICovCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfSU5QVVRfR0FJTgorCWZvciAoaSA9IDA7IGkgPCBudW1fYnVzc2VzX2luKGNoaXApOyBpKyspIHsKKwkJZXJyID0gc2V0X2lucHV0X2dhaW4oY2hpcCwgaSwgY2hpcC0+aW5wdXRfZ2FpbltpXSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisjZW5kaWYgLyogRUNIT0NBUkRfSEFTX0lOUFVUX0dBSU4gKi8KKworCWVyciA9IHVwZGF0ZV9vdXRwdXRfbGluZV9sZXZlbChjaGlwKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWlmIChjaGlwLT5tZXRlcnNfZW5hYmxlZCkKLQkJaWYgKHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19NRVRFUlNfT04pIDwgMCkKLQkJCXJldHVybiAtRUlPOworCWVyciA9IHVwZGF0ZV9pbnB1dF9saW5lX2xldmVsKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gc2V0X3NhbXBsZV9yYXRlKGNoaXAsIGNoaXAtPnNhbXBsZV9yYXRlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmIChjaGlwLT5tZXRlcnNfZW5hYmxlZCkgeworCQllcnIgPSBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfTUVURVJTX09OKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworI2lmZGVmIEVDSE9DQVJEX0hBU19ESUdJVEFMX01PREVfU1dJVENICisJaWYgKHNldF9kaWdpdGFsX21vZGUoY2hpcCwgY2hpcC0+ZGlnaXRhbF9tb2RlKSA8IDApCisJCXJldHVybiAtRUlPOworI2VuZGlmCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9JTworCWlmIChzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIGNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKyNlbmRpZgorCisjaWZkZWYgRUNIT0NBUkRfSEFTX1BIQU5UT01fUE9XRVIKKwlpZiAoc2V0X3BoYW50b21fcG93ZXIoY2hpcCwgY2hpcC0+cGhhbnRvbV9wb3dlcikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKyNlbmRpZgogCiAjaWZkZWYgRUNIT0NBUkRfSEFTX0VYVEVSTkFMX0NMT0NLCisJLyogc2V0X2lucHV0X2Nsb2NrKCkgYWxzbyByZXN0b3JlcyBhdXRvbXV0ZSBzZXR0aW5nICovCiAJaWYgKHNldF9pbnB1dF9jbG9jayhjaGlwLCBjaGlwLT5pbnB1dF9jbG9jaykgPCAwKQogCQlyZXR1cm4gLUVJTzsKICNlbmRpZgpAQCAtNjg1LDIzICs3NDgsMTQgQEAKIAkJcmV0dXJuIC1FSU87CiAjZW5kaWYKIAotCWlmICh1cGRhdGVfb3V0cHV0X2xpbmVfbGV2ZWwoY2hpcCkgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmICh1cGRhdGVfaW5wdXRfbGluZV9sZXZlbChjaGlwKSA8IDApCi0JCXJldHVybiAtRUlPOwotCi0jaWZkZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgotCWlmICh1cGRhdGVfdm1peGVyX2xldmVsKGNoaXApIDwgMCkKLQkJcmV0dXJuIC1FSU87Ci0jZW5kaWYKLQogCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSA8IDApCiAJCXJldHVybiAtRUlPOwogCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwlpZiAoc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1VQREFURV9GTEFHUykgPCAwKQorCQlyZXR1cm4gLUVJTzsKIAogCURFX0lOSVQoKCJyZXN0b3JlX2RzcF9yZXR0aW5ncyBkb25lXG4iKSk7Ci0JcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfRkxBR1MpOworCXJldHVybiAwOwogfQogCiAKQEAgLTkxOCw5ICs5NzIsNiBAQAogCWNoaXAtPmNhcmRfbmFtZSA9IEVDSE9DQVJEX05BTUU7CiAJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsJLyogU2V0IFRSVUUgdW50aWwgRFNQIGxvYWRlZCAqLwogCWNoaXAtPmRzcF9jb2RlID0gTlVMTDsJLyogQ3VycmVudCBEU1AgY29kZSBub3QgbG9hZGVkICovCi0JY2hpcC0+ZGlnaXRhbF9tb2RlID0gRElHSVRBTF9NT0RFX05PTkU7Ci0JY2hpcC0+aW5wdXRfY2xvY2sgPSBFQ0hPX0NMT0NLX0lOVEVSTkFMOwotCWNoaXAtPm91dHB1dF9jbG9jayA9IEVDSE9fQ0xPQ0tfV09SRDsKIAljaGlwLT5hc2ljX2xvYWRlZCA9IEZBTFNFOwogCW1lbXNldChjaGlwLT5jb21tX3BhZ2UsIDAsIHNpemVvZihzdHJ1Y3QgY29tbV9wYWdlKSk7CiAKQEAgLTkzMSw3ICs5ODIsNiBAQAogCWNoaXAtPmNvbW1fcGFnZS0+bWlkaV9vdXRfZnJlZV9jb3VudCA9CiAJCWNwdV90b19sZTMyKERTUF9NSURJX09VVF9GSUZPX1NJWkUpOwogCWNoaXAtPmNvbW1fcGFnZS0+c2FtcGxlX3JhdGUgPSBjcHVfdG9fbGUzMig0NDEwMCk7Ci0JY2hpcC0+c2FtcGxlX3JhdGUgPSA0NDEwMDsKIAogCS8qIFNldCBsaW5lIGxldmVscyBzbyB3ZSBkb24ndCBibGFzdCBhbnkgaW5wdXRzIG9uIHN0YXJ0dXAgKi8KIAltZW1zZXQoY2hpcC0+Y29tbV9wYWdlLT5tb25pdG9ycywgRUNIT0dBSU5fTVVURUQsIE1PTklUT1JfQVJSQVlfU0laRSk7CkBAIC05NDIsNTAgKzk5MiwyMSBAQAogCiAKIAotLyogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgc2V2ZXJhbCB2b2x1bWUgY29udHJvbHMgZm9yIGJ1c3NlcyBhbmQgcGlwZXMuCi1UaGlzIE1VU1QgYmUgY2FsbGVkIGFmdGVyIHRoZSBEU1AgaXMgdXAgYW5kIHJ1bm5pbmcgISAqLworLyogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgY2hpcCBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcywgaWUuIGFsbAorICogbXV0ZWQgYW5kIGludGVybmFsIGNsb2NrIHNvdXJjZS4gVGhlbiBpdCBjb3BpZXMgdGhlIHNldHRpbmdzIHRvIHRoZSBEU1AuCisgKiBUaGlzIE1VU1QgYmUgY2FsbGVkIGFmdGVyIHRoZSBEU1AgaXMgdXAgYW5kIHJ1bm5pbmcgIQorICovCiBzdGF0aWMgaW50IGluaXRfbGluZV9sZXZlbHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKIHsKLQlpbnQgc3QsIGksIG87Ci0KIAlERV9JTklUKCgiaW5pdF9saW5lX2xldmVsc1xuIikpOwotCi0JLyogTXV0ZSBvdXRwdXQgYnVzc2VzICovCi0JZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfb3V0KGNoaXApOyBpKyspCi0JCWlmICgoc3QgPSBzZXRfb3V0cHV0X2dhaW4oY2hpcCwgaSwgRUNIT0dBSU5fTVVURUQpKSkKLQkJCXJldHVybiBzdDsKLQlpZiAoKHN0ID0gdXBkYXRlX291dHB1dF9saW5lX2xldmVsKGNoaXApKSkKLQkJcmV0dXJuIHN0OwotCi0jaWZkZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgotCS8qIE11dGUgdGhlIFZtaXhlciAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fcGlwZXNfb3V0KGNoaXApOyBpKyspCi0JCWZvciAobyA9IDA7IG8gPCBudW1fYnVzc2VzX291dChjaGlwKTsgbysrKQotCQkJaWYgKChzdCA9IHNldF92bWl4ZXJfZ2FpbihjaGlwLCBvLCBpLCBFQ0hPR0FJTl9NVVRFRCkpKQotCQkJCXJldHVybiBzdDsKLQlpZiAoKHN0ID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKSkpCi0JCXJldHVybiBzdDsKLSNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfVk1JWEVSICovCi0KLSNpZmRlZiBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgotCS8qIE11dGUgdGhlIG1vbml0b3IgbWl4ZXIgKi8KLQlmb3IgKG8gPSAwOyBvIDwgbnVtX2J1c3Nlc19vdXQoY2hpcCk7IG8rKykKLQkJZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfaW4oY2hpcCk7IGkrKykKLQkJCWlmICgoc3QgPSBzZXRfbW9uaXRvcl9nYWluKGNoaXAsIG8sIGksIEVDSE9HQUlOX01VVEVEKSkpCi0JCQkJcmV0dXJuIHN0OwotCWlmICgoc3QgPSB1cGRhdGVfb3V0cHV0X2xpbmVfbGV2ZWwoY2hpcCkpKQotCQlyZXR1cm4gc3Q7Ci0jZW5kaWYgLyogRUNIT0NBUkRfSEFTX01PTklUT1IgKi8KLQotI2lmZGVmIEVDSE9DQVJEX0hBU19JTlBVVF9HQUlOCi0JZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfaW4oY2hpcCk7IGkrKykKLQkJaWYgKChzdCA9IHNldF9pbnB1dF9nYWluKGNoaXAsIGksIEVDSE9HQUlOX01VVEVEKSkpCi0JCQlyZXR1cm4gc3Q7Ci0JaWYgKChzdCA9IHVwZGF0ZV9pbnB1dF9saW5lX2xldmVsKGNoaXApKSkKLQkJcmV0dXJuIHN0OwotI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19JTlBVVF9HQUlOICovCi0KLQlyZXR1cm4gMDsKKwltZW1zZXQoY2hpcC0+b3V0cHV0X2dhaW4sIEVDSE9HQUlOX01VVEVELCBzaXplb2YoY2hpcC0+b3V0cHV0X2dhaW4pKTsKKwltZW1zZXQoY2hpcC0+aW5wdXRfZ2FpbiwgRUNIT0dBSU5fTVVURUQsIHNpemVvZihjaGlwLT5pbnB1dF9nYWluKSk7CisJbWVtc2V0KGNoaXAtPm1vbml0b3JfZ2FpbiwgRUNIT0dBSU5fTVVURUQsIHNpemVvZihjaGlwLT5tb25pdG9yX2dhaW4pKTsKKwltZW1zZXQoY2hpcC0+dm1peGVyX2dhaW4sIEVDSE9HQUlOX01VVEVELCBzaXplb2YoY2hpcC0+dm1peGVyX2dhaW4pKTsKKwljaGlwLT5pbnB1dF9jbG9jayA9IEVDSE9fQ0xPQ0tfSU5URVJOQUw7CisJY2hpcC0+b3V0cHV0X2Nsb2NrID0gRUNIT19DTE9DS19XT1JEOworCWNoaXAtPnNhbXBsZV9yYXRlID0gNDQxMDA7CisJcmV0dXJuIHJlc3RvcmVfZHNwX3JldHRpbmdzKGNoaXApOwogfQogCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMC5jCmluZGV4IGMwZTY0YjguLjIzNjRmOGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjAuYwpAQCAtNjcsNyArNjcsNyBAQAogCXswLCAiZ2luYTIwX2RzcC5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDE4MDEsIDB4RUNDMCwgMHgwMDIwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzAxIEdpbmEyMCByZXYuMCAqLwogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCmluZGV4IDNmMWU3NDcuLmQxNjE1YTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCkBAIC00OSw3ICs0OSw3IEBACiAJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOwogCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKIAljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19HSU5BMjBfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfR0lOQTIwX0RTUDsKIAljaGlwLT5zcGRpZl9zdGF0dXMgPSBHRF9TUERJRl9TVEFUVVNfVU5ERUY7CiAJY2hpcC0+Y2xvY2tfc3RhdGUgPSBHRF9DTE9DS19VTkRFRjsKIAkvKiBTaW5jZSB0aGlzIGNhcmQgaGFzIG5vIEFTSUMsIG1hcmsgaXQgYXMgbG9hZGVkIHNvIGV2ZXJ5dGhpbmcKQEAgLTYyLDE3ICs2MiwyMCBAQAogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwogCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIFRSVUUpOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IEZBTFNFOworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJdTMyIGNsb2Nrc19mcm9tX2RzcCwgY2xvY2tfYml0czsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTI0LmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNC5jCmluZGV4IGMzNmE3OGQuLjYxNmI1NTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTI0LmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjQuYwpAQCAtODUsNyArODUsNyBAQAogCXswLCAiZ2luYTI0XzM2MV9hc2ljLmZ3In0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZWNob19pZHMpID0gewogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwNTAsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgR2luYTI0IHJldi4wICovCiAJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDA1MSwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBHaW5hMjQgcmV2LjEgKi8KIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMDUwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzYxIEdpbmEyNCByZXYuMCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjRfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNF9kc3AuYwppbmRleCAyZmVmMzdhLi45OGY3Y2ZhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNF9kc3AuYwpAQCAtMzMsOCArMzMsNyBAQAogc3RhdGljIGludCBzZXRfaW5wdXRfY2xvY2soc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGNsb2NrKTsKIHN0YXRpYyBpbnQgc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIHByb2YpOwogc3RhdGljIGludCBzZXRfZGlnaXRhbF9tb2RlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHU4IG1vZGUpOwotc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLAotCQkJICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWMpOworc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLCBzaG9ydCBhc2ljKTsKIHN0YXRpYyBpbnQgY2hlY2tfYXNpY19zdGF0dXMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CiAKIApAQCAtNTgsMTkgKzU3LDE2IEBACiAJCUVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMIHwgRUNIT19DTE9DS19CSVRfU1BESUYgfAogCQlFQ0hPX0NMT0NLX0JJVF9FU1lOQyB8IEVDSE9fQ0xPQ0tfQklUX0VTWU5DOTYgfAogCQlFQ0hPX0NMT0NLX0JJVF9BREFUOwotCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IEZBTFNFOwotCWNoaXAtPmRpZ2l0YWxfaW5fYXV0b211dGUgPSBUUlVFOwotCWNoaXAtPmRpZ2l0YWxfbW9kZSA9IERJR0lUQUxfTU9ERV9TUERJRl9SQ0E7CiAKIAkvKiBHaW5hMjQgY29tZXMgaW4gYm90aCAnMzAxIGFuZCAnMzYxIGZsYXZvcnMgKi8KIAlpZiAoY2hpcC0+ZGV2aWNlX2lkID09IERFVklDRV9JRF81NjM2MSkgewotCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfR0lOQTI0XzM2MV9EU1BdOworCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfR0lOQTI0XzM2MV9EU1A7CiAJCWNoaXAtPmRpZ2l0YWxfbW9kZXMgPQogCQkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9SQ0EgfAogCQkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9PUFRJQ0FMIHwKIAkJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfQURBVDsKIAl9IGVsc2UgewotCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfR0lOQTI0XzMwMV9EU1BdOworCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfR0lOQTI0XzMwMV9EU1A7CiAJCWNoaXAtPmRpZ2l0YWxfbW9kZXMgPQogCQkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9SQ0EgfAogCQkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9PUFRJQ0FMIHwKQEAgLTgyLDE5ICs3OCwyMiBAQAogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwogCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gc2V0X2RpZ2l0YWxfbW9kZShjaGlwLCBESUdJVEFMX01PREVfU1BESUZfUkNBKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIFRSVUUpOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWNoaXAtPmRpZ2l0YWxfbW9kZSA9IERJR0lUQUxfTU9ERV9TUERJRl9SQ0E7CisJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gRkFMU0U7CisJY2hpcC0+ZGlnaXRhbF9pbl9hdXRvbXV0ZSA9IFRSVUU7CisJcmV0dXJuIGluaXRfbGluZV9sZXZlbHMoY2hpcCk7Cit9CisKKworCiBzdGF0aWMgdTMyIGRldGVjdF9pbnB1dF9jbG9ja3MoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKIHsKIAl1MzIgY2xvY2tzX2Zyb21fZHNwLCBjbG9ja19iaXRzOwpAQCAtMTI1LDcgKzEyNCw3IEBACiB7CiAJdTMyIGNvbnRyb2xfcmVnOwogCWludCBlcnI7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlzaG9ydCBhc2ljOwogCiAJaWYgKGNoaXAtPmFzaWNfbG9hZGVkKQogCQlyZXR1cm4gMTsKQEAgLTEzNSwxNCArMTM0LDE1IEBACiAKIAkvKiBQaWNrIHRoZSBjb3JyZWN0IEFTSUMgZm9yICczMDEgb3IgJzM2MSBHaW5hMjQgKi8KIAlpZiAoY2hpcC0+ZGV2aWNlX2lkID09IERFVklDRV9JRF81NjM2MSkKLQkJZncgPSAmY2FyZF9md1tGV19HSU5BMjRfMzYxX0FTSUNdOworCQlhc2ljID0gRldfR0lOQTI0XzM2MV9BU0lDOwogCWVsc2UKLQkJZncgPSAmY2FyZF9md1tGV19HSU5BMjRfMzAxX0FTSUNdOworCQlhc2ljID0gRldfR0lOQTI0XzMwMV9BU0lDOwogCi0JaWYgKChlcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfR0lOQTI0X0FTSUMsIGZ3KSkgPCAwKQorCWVyciA9IGxvYWRfYXNpY19nZW5lcmljKGNoaXAsIERTUF9GTkNfTE9BRF9HSU5BMjRfQVNJQywgYXNpYyk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQljaGlwLT5hc2ljX2NvZGUgPSBmdzsKKwljaGlwLT5hc2ljX2NvZGUgPSBhc2ljOwogCiAJLyogTm93IGdpdmUgdGhlIG5ldyBBU0lDIGEgbGl0dGxlIHRpbWUgdG8gc2V0IHVwICovCiAJbWRlbGF5KDEwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnby5jCmluZGV4IDBhNThhN2MuLjc3NjE3NWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ28uYwpAQCAtNjgsNyArNjgsNyBAQAogCXswLCAiaW5kaWdvX2RzcC5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMDkwLCAwLCAwLCAwfSwJLyogSW5kaWdvICovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMKaW5kZXggMGIyY2Q5Yy4uNWU4NWYxNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0lORElHT19EU1BdOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSBGV19JTkRJR09fRFNQOwogCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZwogCSAgIHdvcmtzIE9LICovCiAJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOwpAQCAtNjAsMTUgKzYwLDE5IEBACiAJCXJldHVybiBlcnI7CiAJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CiAKLQlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKLQkJcmV0dXJuIGVycjsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQogCiAKIAorc3RhdGljIGludCBzZXRfbWl4ZXJfZGVmYXVsdHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KKworCisKIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewogCXJldHVybiBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2V4cHJlc3NfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19leHByZXNzX2RzcC5jCmluZGV4IDlhYjYyNWUuLjJlNGFiM2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2V4cHJlc3NfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZXhwcmVzc19kc3AuYwpAQCAtNjEsNiArNjEsNyBAQAogCiAJY29udHJvbF9yZWcgfD0gY2xvY2s7CiAJaWYgKGNvbnRyb2xfcmVnICE9IG9sZF9jb250cm9sX3JlZykgeworCQlERV9BQ1QoKCJzZXRfc2FtcGxlX3JhdGU6ICVkIGNsb2NrICVkXG4iLCByYXRlLCBjbG9jaykpOwogCQljaGlwLT5jb21tX3BhZ2UtPmNvbnRyb2xfcmVnaXN0ZXIgPSBjcHVfdG9fbGUzMihjb250cm9sX3JlZyk7CiAJCWNoaXAtPnNhbXBsZV9yYXRlID0gcmF0ZTsKIAkJY2xlYXJfaGFuZHNoYWtlKGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kai5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kai5jCmluZGV4IDJkYjI0ZDIuLjg4MTZiMGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGouYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAl7MCwgImluZGlnb19kal9kc3AuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDBCMCwgMCwgMCwgMH0sCS8qIEluZGlnbyBESiovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGpfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqX2RzcC5jCmluZGV4IDA4MzkyOTEuLjY4ZjNjOGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGpfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYwpAQCAtNTAsNyArNTAsNyBAQAogCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKIAljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CiAJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKLQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfSU5ESUdPX0RKX0RTUF07CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX0lORElHT19ESl9EU1A7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCiAJICAgd29ya3MgT0sgKi8KIAljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CkBAIC02MCwxNSArNjAsMTkgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJcmV0dXJuIEVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanguYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4LmMKaW5kZXggMmU0NDMxNi4uYjFlMzY1MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanguYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeC5jCkBAIC02OCw3ICs2OCw3IEBACiAJezAsICJpbmRpZ29fZGp4X2RzcC5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMEUwLCAwLCAwLCAwfSwJLyogSW5kaWdvIERKeCovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanhfZHNwLmMKaW5kZXggZjU5MWZjMi4uYmI5NjMyYzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4X2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4X2RzcC5jCkBAIC00OCw3ICs0OCw3IEBACiAJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOwogCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKIAljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19JTkRJR09fREpYX0RTUF07CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX0lORElHT19ESlhfRFNQOwogCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZwogCSAgIHdvcmtzIE9LICovCiAJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOwpAQCAtNTksMTAgKzU5LDEzIEBACiAJCXJldHVybiBlcnI7CiAJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CiAKLQllcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CisKKworCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pby5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pby5jCmluZGV4IGE2MGMwYTAuLjEwMzUxMjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW8uYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAl7MCwgImluZGlnb19pb19kc3AuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDBBMCwgMCwgMCwgMH0sCS8qIEluZGlnbyBJTyovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW9fZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvX2RzcC5jCmluZGV4IDA2MDRjOGEuLmJlYjlhNWI2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW9fZHNwLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0lORElHT19JT19EU1BdOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSBGV19JTkRJR09fSU9fRFNQOwogCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZwogCSAgIHdvcmtzIE9LICovCiAJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOwpAQCAtNjAsMTUgKzYwLDE5IEBACiAJCXJldHVybiBlcnI7CiAJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CiAKLQlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKLQkJcmV0dXJuIGVycjsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQogCiAKIAorc3RhdGljIGludCBzZXRfbWl4ZXJfZGVmYXVsdHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KKworCisKIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewogCXJldHVybiBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94LmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveC5jCmluZGV4IGViMzgxOWYuLjYwYjdjYjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94LmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3guYwpAQCAtNjksNyArNjksNyBAQAogCXswLCAiaW5kaWdvX2lveF9kc3AuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDBEMCwgMCwgMCwgMH0sCS8qIEluZGlnbyBJT3ggKi8KIAl7MCx9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3hfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveF9kc3AuYwppbmRleCBmMzU3NTIxLi4zOTRjNmU3NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3hfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3hfZHNwLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0lORElHT19JT1hfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfSU5ESUdPX0lPWF9EU1A7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCiAJICAgd29ya3MgT0sgKi8KIAljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CkBAIC01OSwxMCArNTksMTMgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KKworCisKK3N0YXRpYyBpbnQgc2V0X21peGVyX2RlZmF1bHRzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIGluaXRfbGluZV9sZXZlbHMoY2hpcCk7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjAuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMC5jCmluZGV4IDUwNjE5NDYuLjhjM2Y1YzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMC5jCkBAIC03Niw3ICs3Niw3IEBACiAJezAsICJsYXlsYTIwX2FzaWMuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDAzMCwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBMYXlsYTIwIHJldi4wICovCiAJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDAzMSwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBMYXlsYTIwIHJldi4xICovCiAJezAsfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwX2RzcC5jCmluZGV4IDgzNzUwZTkuLjUzY2U5NDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMKQEAgLTMxLDggKzMxLDcgQEAKIAogc3RhdGljIGludCByZWFkX2RzcChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgKmRhdGEpOwogc3RhdGljIGludCBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNoYXIgcHJvZik7Ci1zdGF0aWMgaW50IGxvYWRfYXNpY19nZW5lcmljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiBjbWQsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpYyk7CitzdGF0aWMgaW50IGxvYWRfYXNpY19nZW5lcmljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiBjbWQsIHNob3J0IGFzaWMpOwogc3RhdGljIGludCBjaGVja19hc2ljX3N0YXR1cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKIHN0YXRpYyBpbnQgdXBkYXRlX2ZsYWdzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwogCkBAIC01NCw3ICs1Myw3IEBACiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CiAJY2hpcC0+aGFzX21pZGkgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19MQVlMQTIwX0RTUF07CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX0xBWUxBMjBfRFNQOwogCWNoaXAtPmlucHV0X2Nsb2NrX3R5cGVzID0KIAkJRUNIT19DTE9DS19CSVRfSU5URVJOQUwgfCBFQ0hPX0NMT0NLX0JJVF9TUERJRiB8CiAJCUVDSE9fQ0xPQ0tfQklUX1dPUkQgfCBFQ0hPX0NMT0NLX0JJVF9TVVBFUjsKQEAgLTY1LDE3ICs2NCwyMCBAQAogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwogCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIFRSVUUpOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IEZBTFNFOworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJdTMyIGNsb2Nrc19mcm9tX2RzcCwgY2xvY2tfYml0czsKQEAgLTE0NCw3ICsxNDYsNyBAQAogCQlyZXR1cm4gMDsKIAogCWVyciA9IGxvYWRfYXNpY19nZW5lcmljKGNoaXAsIERTUF9GTkNfTE9BRF9MQVlMQV9BU0lDLAotCQkJCSZjYXJkX2Z3W0ZXX0xBWUxBMjBfQVNJQ10pOworCQkJCUZXX0xBWUxBMjBfQVNJQyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTI0LmMKaW5kZXggZTA5ZTNlYS4uZWQxY2MwYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTI0LmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTI0LmMKQEAgLTg3LDcgKzg3LDcgQEAKIAl7MCwgImxheWxhMjRfMlNfYXNpYy5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMDYwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzYxIExheWxhMjQgcmV2LjAgKi8KIAl7MCx9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTI0X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTI0X2RzcC5jCmluZGV4IGQ2MWI1Y2IuLjhjMDQxNjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjRfZHNwLmMKQEAgLTMyLDggKzMyLDcgQEAKIHN0YXRpYyBpbnQgc2V0X2lucHV0X2Nsb2NrKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBjbG9jayk7CiBzdGF0aWMgaW50IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgY2hhciBwcm9mKTsKIHN0YXRpYyBpbnQgc2V0X2RpZ2l0YWxfbW9kZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1OCBtb2RlKTsKLXN0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljKTsKK3N0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwgc2hvcnQgYXNpYyk7CiBzdGF0aWMgaW50IGNoZWNrX2FzaWNfc3RhdHVzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwogCiAKQEAgLTU0LDcgKzUzLDcgQEAKIAljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CiAJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKIAljaGlwLT5oYXNfbWlkaSA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0xBWUxBMjRfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfTEFZTEEyNF9EU1A7CiAJY2hpcC0+aW5wdXRfY2xvY2tfdHlwZXMgPQogCQlFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTCB8IEVDSE9fQ0xPQ0tfQklUX1NQRElGIHwKIAkJRUNIT19DTE9DS19CSVRfV09SRCB8IEVDSE9fQ0xPQ0tfQklUX0FEQVQ7CkBAIC02Miw5ICs2MSw2IEBACiAJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfUkNBIHwKIAkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9PUFRJQ0FMIHwKIAkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9BREFUOwotCWNoaXAtPmRpZ2l0YWxfbW9kZSA9CQlESUdJVEFMX01PREVfU1BESUZfUkNBOwotCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IEZBTFNFOwotCWNoaXAtPmRpZ2l0YWxfaW5fYXV0b211dGUgPSBUUlVFOwogCiAJaWYgKChlcnIgPSBsb2FkX2Zpcm13YXJlKGNoaXApKSA8IDApCiAJCXJldHVybiBlcnI7CkBAIC03MywxNyArNjksMjIgQEAKIAlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IHNldF9kaWdpdGFsX21vZGUoY2hpcCwgRElHSVRBTF9NT0RFX1NQRElGX1JDQSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihjaGlwLCBUUlVFKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQogCiAKIAorc3RhdGljIGludCBzZXRfbWl4ZXJfZGVmYXVsdHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwljaGlwLT5kaWdpdGFsX21vZGUgPSBESUdJVEFMX01PREVfU1BESUZfUkNBOworCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IEZBTFNFOworCWNoaXAtPmRpZ2l0YWxfaW5fYXV0b211dGUgPSBUUlVFOworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJdTMyIGNsb2Nrc19mcm9tX2RzcCwgY2xvY2tfYml0czsKQEAgLTEyMywxOCArMTI0LDE4IEBACiAKIAkvKiBMb2FkIHRoZSBBU0lDIGZvciB0aGUgUENJIGNhcmQgKi8KIAllcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfTEFZTEEyNF9QQ0lfQ0FSRF9BU0lDLAotCQkJCSZjYXJkX2Z3W0ZXX0xBWUxBMjRfMV9BU0lDXSk7CisJCQkJRldfTEFZTEEyNF8xX0FTSUMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2hpcC0+YXNpY19jb2RlID0gJmNhcmRfZndbRldfTEFZTEEyNF8yU19BU0lDXTsKKwljaGlwLT5hc2ljX2NvZGUgPSBGV19MQVlMQTI0XzJTX0FTSUM7CiAKIAkvKiBOb3cgZ2l2ZSB0aGUgbmV3IEFTSUMgYSBsaXR0bGUgdGltZSB0byBzZXQgdXAgKi8KIAltZGVsYXkoMTApOwogCiAJLyogRG8gdGhlIGV4dGVybmFsIG9uZSAqLwogCWVyciA9IGxvYWRfYXNpY19nZW5lcmljKGNoaXAsIERTUF9GTkNfTE9BRF9MQVlMQTI0X0VYVEVSTkFMX0FTSUMsCi0JCQkJJmNhcmRfZndbRldfTEFZTEEyNF8yU19BU0lDXSk7CisJCQkJRldfTEFZTEEyNF8yU19BU0lDKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIEZBTFNFOwogCkBAIC0yOTksNyArMzAwLDcgQEAKIC8qIERlcGVuZGluZyBvbiB3aGF0IGRpZ2l0YWwgbW9kZSB5b3Ugd2FudCwgTGF5bGEyNCBuZWVkcyBkaWZmZXJlbnQgQVNJQ3MKIGxvYWRlZC4gIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBBU0lDIG5lZWRlZCBmb3IgdGhlIG5ldyBtb2RlIGFuZCBzZWVzCiBpZiBpdCBtYXRjaGVzIHRoZSBvbmUgYWxyZWFkeSBsb2FkZWQuICovCi1zdGF0aWMgaW50IHN3aXRjaF9hc2ljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpYykKK3N0YXRpYyBpbnQgc3dpdGNoX2FzaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgc2hvcnQgYXNpYykKIHsKIAlzOCAqbW9uaXRvcnM7CiAKQEAgLTMzNSw3ICszMzYsNyBAQAogewogCXUzMiBjb250cm9sX3JlZzsKIAlpbnQgZXJyLCBpbmNvbXBhdGlibGVfY2xvY2s7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljOworCXNob3J0IGFzaWM7CiAKIAkvKiBTZXQgY2xvY2sgdG8gImludGVybmFsIiBpZiBpdCdzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIG5ldyBtb2RlICovCiAJaW5jb21wYXRpYmxlX2Nsb2NrID0gRkFMU0U7CkBAIC0zNDQsMTIgKzM0NSwxMiBAQAogCWNhc2UgRElHSVRBTF9NT0RFX1NQRElGX1JDQToKIAkJaWYgKGNoaXAtPmlucHV0X2Nsb2NrID09IEVDSE9fQ0xPQ0tfQURBVCkKIAkJCWluY29tcGF0aWJsZV9jbG9jayA9IFRSVUU7Ci0JCWFzaWMgPSAmY2FyZF9md1tGV19MQVlMQTI0XzJTX0FTSUNdOworCQlhc2ljID0gRldfTEFZTEEyNF8yU19BU0lDOwogCQlicmVhazsKIAljYXNlIERJR0lUQUxfTU9ERV9BREFUOgogCQlpZiAoY2hpcC0+aW5wdXRfY2xvY2sgPT0gRUNIT19DTE9DS19TUERJRikKIAkJCWluY29tcGF0aWJsZV9jbG9jayA9IFRSVUU7Ci0JCWFzaWMgPSAmY2FyZF9md1tGV19MQVlMQTI0XzJBX0FTSUNdOworCQlhc2ljID0gRldfTEFZTEEyNF8yQV9BU0lDOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlERV9BQ1QoKCJEaWdpdGFsIG1vZGUgbm90IHN1cHBvcnRlZDogJWRcbiIsIG1vZGUpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jCmluZGV4IGYwNWM4YzAuLmNjMmJiZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWEuYwpAQCAtNzcsNyArNzcsNyBAQAogCXswLCAibWlhX2RzcC5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMDgwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzYxIE1pYSByZXYuMCAqLwogCXsweDEwNTcsIDB4MzQxMCwgMHhFQ0MwLCAweDAwODEsIDAsIDAsIDB9LAkvKiBEU1AgNTYzNjEgTWlhIHJldi4xICovCiAJezAsfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYwppbmRleCA1NTE0MDUxLi42ZWJmYTZlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYwpAQCAtNTMsNyArNTMsNyBAQAogCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKIAljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CiAJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKLQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfTUlBX0RTUF07CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX01JQV9EU1A7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCiAJICAgd29ya3MgT0sgKi8KIAljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CkBAIC02NiwxNSArNjYsMTkgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkpCi0JCXJldHVybiBlcnI7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KIAogCiAKK3N0YXRpYyBpbnQgc2V0X21peGVyX2RlZmF1bHRzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIGluaXRfbGluZV9sZXZlbHMoY2hpcCk7Cit9CisKKworCiBzdGF0aWMgdTMyIGRldGVjdF9pbnB1dF9jbG9ja3MoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKIHsKIAl1MzIgY2xvY2tzX2Zyb21fZHNwLCBjbG9ja19iaXRzOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9tb25hLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21vbmEuYwppbmRleCBiMDViYWQ5Li4zZTdlMDE4MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9tb25hLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9tb25hLmMKQEAgLTkyLDcgKzkyLDcgQEAKIAl7MCwgIm1vbmFfMl9hc2ljLmZ3In0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZWNob19pZHMpID0gewogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwNzAsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgTW9uYSByZXYuMCAqLwogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwNzEsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgTW9uYSByZXYuMSAqLwogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwNzIsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgTW9uYSByZXYuMiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9tb25hX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9tb25hX2RzcC5jCmluZGV4IGVhYTYxOWIuLjZlNmE3ZWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbW9uYV9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21vbmFfZHNwLmMKQEAgLTMzLDggKzMzLDcgQEAKIHN0YXRpYyBpbnQgc2V0X2lucHV0X2Nsb2NrKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBjbG9jayk7CiBzdGF0aWMgaW50IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgY2hhciBwcm9mKTsKIHN0YXRpYyBpbnQgc2V0X2RpZ2l0YWxfbW9kZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1OCBtb2RlKTsKLXN0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljKTsKK3N0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwgc2hvcnQgYXNpYyk7CiBzdGF0aWMgaW50IGNoZWNrX2FzaWNfc3RhdHVzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwogCiAKQEAgLTY0LDMyICs2MywzMCBAQAogCiAJLyogTW9uYSBjb21lcyBpbiBib3RoICczMDEgYW5kICczNjEgZmxhdm9ycyAqLwogCWlmIChjaGlwLT5kZXZpY2VfaWQgPT0gREVWSUNFX0lEXzU2MzYxKQotCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfTU9OQV8zNjFfRFNQXTsKKwkJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX01PTkFfMzYxX0RTUDsKIAllbHNlCi0JCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19NT05BXzMwMV9EU1BdOwotCi0JY2hpcC0+ZGlnaXRhbF9tb2RlID0gRElHSVRBTF9NT0RFX1NQRElGX1JDQTsKLQljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKLQljaGlwLT5kaWdpdGFsX2luX2F1dG9tdXRlID0gVFJVRTsKKwkJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX01PTkFfMzAxX0RTUDsKIAogCWlmICgoZXJyID0gbG9hZF9maXJtd2FyZShjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwogCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBzZXRfZGlnaXRhbF9tb2RlKGNoaXAsIERJR0lUQUxfTU9ERV9TUERJRl9SQ0EpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWVyciA9IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoY2hpcCwgVFJVRSk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KIAogCiAKK3N0YXRpYyBpbnQgc2V0X21peGVyX2RlZmF1bHRzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJY2hpcC0+ZGlnaXRhbF9tb2RlID0gRElHSVRBTF9NT0RFX1NQRElGX1JDQTsKKwljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKKwljaGlwLT5kaWdpdGFsX2luX2F1dG9tdXRlID0gVFJVRTsKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KKworCisKIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewogCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CkBAIC0xMjAsNyArMTE3LDcgQEAKIHsKIAl1MzIgY29udHJvbF9yZWc7CiAJaW50IGVycjsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWM7CisJc2hvcnQgYXNpYzsKIAogCWlmIChjaGlwLT5hc2ljX2xvYWRlZCkKIAkJcmV0dXJuIDA7CkBAIC0xMjgsOSArMTI1LDkgQEAKIAltZGVsYXkoMTApOwogCiAJaWYgKGNoaXAtPmRldmljZV9pZCA9PSBERVZJQ0VfSURfNTYzNjEpCi0JCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM0OF07CisJCWFzaWMgPSBGV19NT05BXzM2MV8xX0FTSUM0ODsKIAllbHNlCi0JCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzMwMV8xX0FTSUM0OF07CisJCWFzaWMgPSBGV19NT05BXzMwMV8xX0FTSUM0ODsKIAogCWVyciA9IGxvYWRfYXNpY19nZW5lcmljKGNoaXAsIERTUF9GTkNfTE9BRF9NT05BX1BDSV9DQVJEX0FTSUMsIGFzaWMpOwogCWlmIChlcnIgPCAwKQpAQCAtMTQxLDcgKzEzOCw3IEBACiAKIAkvKiBEbyB0aGUgZXh0ZXJuYWwgb25lICovCiAJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEX01PTkFfRVhURVJOQUxfQVNJQywKLQkJCQkmY2FyZF9md1tGV19NT05BXzJfQVNJQ10pOworCQkJCUZXX01PTkFfMl9BU0lDKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMTY1LDIyICsxNjIsMjIgQEAKIGlmIGl0IG1hdGNoZXMgdGhlIG9uZSBhbHJlYWR5IGxvYWRlZC4gKi8KIHN0YXRpYyBpbnQgc3dpdGNoX2FzaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgY2hhciBkb3VibGVfc3BlZWQpCiB7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljOwogCWludCBlcnI7CisJc2hvcnQgYXNpYzsKIAogCS8qIENoZWNrIHRoZSBjbG9jayBkZXRlY3QgYml0cyB0byBzZWUgaWYgdGhpcyBpcwogCWEgc2luZ2xlLXNwZWVkIGNsb2NrIG9yIGEgZG91YmxlLXNwZWVkIGNsb2NrOyBsb2FkCiAJYSBuZXcgQVNJQyBpZiBuZWNlc3NhcnkuICovCiAJaWYgKGNoaXAtPmRldmljZV9pZCA9PSBERVZJQ0VfSURfNTYzNjEpIHsKIAkJaWYgKGRvdWJsZV9zcGVlZCkKLQkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM5Nl07CisJCQlhc2ljID0gRldfTU9OQV8zNjFfMV9BU0lDOTY7CiAJCWVsc2UKLQkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM0OF07CisJCQlhc2ljID0gRldfTU9OQV8zNjFfMV9BU0lDNDg7CiAJfSBlbHNlIHsKIAkJaWYgKGRvdWJsZV9zcGVlZCkKLQkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzMwMV8xX0FTSUM5Nl07CisJCQlhc2ljID0gRldfTU9OQV8zMDFfMV9BU0lDOTY7CiAJCWVsc2UKLQkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzMwMV8xX0FTSUM0OF07CisJCQlhc2ljID0gRldfTU9OQV8zMDFfMV9BU0lDNDg7CiAJfQogCiAJaWYgKGFzaWMgIT0gY2hpcC0+YXNpY19jb2RlKSB7CkBAIC0yMDAsNyArMTk3LDcgQEAKIHN0YXRpYyBpbnQgc2V0X3NhbXBsZV9yYXRlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiByYXRlKQogewogCXUzMiBjb250cm9sX3JlZywgY2xvY2s7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljOworCXNob3J0IGFzaWM7CiAJY2hhciBmb3JjZV93cml0ZTsKIAogCS8qIE9ubHkgc2V0IHRoZSBjbG9jayBmb3IgaW50ZXJuYWwgbW9kZS4gKi8KQEAgLTIxOCwxNCArMjE1LDE0IEBACiAJCWlmIChjaGlwLT5kaWdpdGFsX21vZGUgPT0gRElHSVRBTF9NT0RFX0FEQVQpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGNoaXAtPmRldmljZV9pZCA9PSBERVZJQ0VfSURfNTYzNjEpCi0JCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zNjFfMV9BU0lDOTZdOworCQkJYXNpYyA9IEZXX01PTkFfMzYxXzFfQVNJQzk2OwogCQllbHNlCi0JCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zMDFfMV9BU0lDOTZdOworCQkJYXNpYyA9IEZXX01PTkFfMzAxXzFfQVNJQzk2OwogCX0gZWxzZSB7CiAJCWlmIChjaGlwLT5kZXZpY2VfaWQgPT0gREVWSUNFX0lEXzU2MzYxKQotCQkJYXNpYyA9ICZjYXJkX2Z3W0ZXX01PTkFfMzYxXzFfQVNJQzQ4XTsKKwkJCWFzaWMgPSBGV19NT05BXzM2MV8xX0FTSUM0ODsKIAkJZWxzZQotCQkJYXNpYyA9ICZjYXJkX2Z3W0ZXX01PTkFfMzAxXzFfQVNJQzQ4XTsKKwkJCWFzaWMgPSBGV19NT05BXzMwMV8xX0FTSUM0ODsKIAl9CiAKIAlmb3JjZV93cml0ZSA9IDA7CkBAIC00MTAsOCArNDA3LDggQEAKIAljYXNlIERJR0lUQUxfTU9ERV9BREFUOgogCQkvKiBJZiB0aGUgY3VycmVudCBBU0lDIGlzIHRoZSA5NktIeiBBU0lDLCBzd2l0Y2ggdGhlIEFTSUMKIAkJICAgYW5kIHNldCB0byA0OCBLSHogKi8KLQkJaWYgKGNoaXAtPmFzaWNfY29kZSA9PSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM5Nl0gfHwKLQkJICAgIGNoaXAtPmFzaWNfY29kZSA9PSAmY2FyZF9md1tGV19NT05BXzMwMV8xX0FTSUM5Nl0pIHsKKwkJaWYgKGNoaXAtPmFzaWNfY29kZSA9PSBGV19NT05BXzM2MV8xX0FTSUM5NiB8fAorCQkgICAgY2hpcC0+YXNpY19jb2RlID09IEZXX01PTkFfMzAxXzFfQVNJQzk2KSB7CiAJCQlzZXRfc2FtcGxlX3JhdGUoY2hpcCwgNDgwMDApOwogCQl9CiAJCWNvbnRyb2xfcmVnIHw9IEdNTF9BREFUX01PREU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKaW5kZXggMTY4YWY2Ny4uNDIwMzc4MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYwpAQCAtNzYsNyArNzYsNyBAQAogLyoKICAqIENsYXNzIDA0MDE6IDExMDI6MDAwOCAocmV2IDAwKSBTdWJzeXN0ZW06IDExMDI6MTAwMSAtPiBBdWRpZ3kyIFZhbHVlICBNb2RlbDpTQjA0MDAKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lbXUxMGsxX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lbXUxMGsxX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShDUkVBVElWRSwgMHgwMDAyKSwgMCB9LAkvKiBFTVUxMEsxICovCiAJeyBQQ0lfVkRFVklDRShDUkVBVElWRSwgMHgwMDA0KSwgMSB9LAkvKiBBdWRpZ3kgKi8KIAl7IFBDSV9WREVWSUNFKENSRUFUSVZFLCAweDAwMDgpLCAxIH0sCS8qIEF1ZGlneSAyIFZhbHVlIFNCMDQwMCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKaW5kZXggMWQzNjlmZi4uZGY0N2Y3MyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCkBAIC0xNjA1LDcgKzE2MDUsNyBAQAogfQogCiAvLyBQQ0kgSURzCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VtdTEwazF4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lbXUxMGsxeF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoQ1JFQVRJVkUsIDB4MDAwNiksIDAgfSwJLyogRGVsbCBPRU0gdmVyc2lvbiAoRU1VMTBLMSkgKi8KIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW5zMTM3MC5jIGIvc291bmQvcGNpL2VuczEzNzAuYwppbmRleCAyYjgyYzVjLi5jN2ZiYTUzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW5zMTM3MC5jCisrKyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2F1ZGlvcGNpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2F1ZGlvcGNpX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9hdWRpb3BjaV9pZHMpID0gewogI2lmZGVmIENISVAxMzcwCiAJeyBQQ0lfVkRFVklDRShFTlNPTklRLCAweDUwMDApLCAwLCB9LAkvKiBFUzEzNzAgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTkzOC5jIGIvc291bmQvcGNpL2VzMTkzOC5jCmluZGV4IGZiODNlMWYuLjU1M2I3NTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5MzguYworKysgYi9zb3VuZC9wY2kvZXMxOTM4LmMKQEAgLTI0Myw3ICsyNDMsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2VzMTkzOF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lczE5MzhfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VzMTkzOF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoRVNTLCAweDE5NjkpLCAwLCB9LCAgIC8qIFNvbG8tMSAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5NjguYyBiL3NvdW5kL3BjaS9lczE5NjguYwppbmRleCBhMTFmNDUzLi5lY2FlYTlmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTY4LmMKKysrIGIvc291bmQvcGNpL2VzMTk2OC5jCkBAIC01NTEsNyArNTUxLDcgQEAKIAogc3RhdGljIGlycXJldHVybl90IHNuZF9lczE5NjhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZXMxOTY4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lczE5NjhfaWRzKSA9IHsKIAkvKiBNYWVzdHJvIDEgKi8KICAgICAgICAgeyAweDEyODUsIDB4MDEwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIFRZUEVfTUFFU1RSTyB9LAogCS8qIE1hZXN0cm8gMiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ZtODAxLmMgYi9zb3VuZC9wY2kvZm04MDEuYwppbmRleCA4MzUwOGIzLi5lMWJhYWQ3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZm04MDEuYworKysgYi9zb3VuZC9wY2kvZm04MDEuYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZm04MDFfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2ZtODAxX2lkcykgPSB7CiAJeyAweDEzMTksIDB4MDgwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIDAsIH0sICAgLyogRk04MDEgKi8KIAl7IDB4NTIxMywgMHgwNTEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyA8PCA4LCAweGZmZmYwMCwgMCwgfSwgICAvKiBHYWxsYW50IE9keXNzZXkgU291bmQgNCAqLwogCXsgMCwgfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggZjk4YjQ3Yy4uNzZkM2M0YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC04MjQsNiArODI0LDkgQEAKIAlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluOwogCXVuc2lnbmVkIGludCBvbGRjZmc7CiAKKwlpZiAoZ2V0X3djYXBzX3R5cGUoZ2V0X3djYXBzKGNvZGVjLCBuaWQpKSAhPSBBQ19XSURfUElOKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW9sZGNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAlwaW4gPSBsb29rX3VwX3BpbmNmZyhjb2RlYywgbGlzdCwgbmlkKTsKIAlpZiAoIXBpbikgewpAQCAtODk5LDYgKzkwMiwyNSBAQAogCX0KIH0KIAorLyoqCisgKiBzbmRfaGRhX3NodXR1cF9waW5zIC0gU2h1dCB1cCBhbGwgcGlucworICogQGNvZGVjOiB0aGUgSERBIGNvZGVjCisgKgorICogQ2xlYXIgYWxsIHBpbiBjb250cm9scyB0byBzaHVwIHVwIGJlZm9yZSBzdXNwZW5kIGZvciBhdm9pZGluZyBjbGljayBub2lzZS4KKyAqIFRoZSBjb250cm9scyBhcmVuJ3QgY2FjaGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcmVzdW1lZCBwcm9wZXJseS4KKyAqLwordm9pZCBzbmRfaGRhX3NodXR1cF9waW5zKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+aW5pdF9waW5zLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluID0gc25kX2FycmF5X2VsZW0oJmNvZGVjLT5pbml0X3BpbnMsIGkpOworCQkvKiB1c2UgcmVhZCBoZXJlIGZvciBzeW5jaW5nIGFmdGVyIGlzc3VpbmcgZWFjaCB2ZXJiICovCisJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluLT5uaWQsIDAsCisJCQkJICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX3NodXR1cF9waW5zKTsKKwogc3RhdGljIHZvaWQgaW5pdF9oZGFfY2FjaGUoc3RydWN0IGhkYV9jYWNoZV9yZWMgKmNhY2hlLAogCQkJICAgdW5zaWduZWQgaW50IHJlY29yZF9zaXplKTsKIHN0YXRpYyB2b2lkIGZyZWVfaGRhX2NhY2hlKHN0cnVjdCBoZGFfY2FjaGVfcmVjICpjYWNoZSk7CkBAIC05MzEsNiArOTUzLDcgQEAKICNlbmRpZgogCWxpc3RfZGVsKCZjb2RlYy0+bGlzdCk7CiAJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5taXhlcnMpOworCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+bmlkcyk7CiAJY29kZWMtPmJ1cy0+Y2FkZHJfdGJsW2NvZGVjLT5hZGRyXSA9IE5VTEw7CiAJaWYgKGNvZGVjLT5wYXRjaF9vcHMuZnJlZSkKIAkJY29kZWMtPnBhdGNoX29wcy5mcmVlKGNvZGVjKTsKQEAgLTk4NSw3ICsxMDA4LDggQEAKIAltdXRleF9pbml0KCZjb2RlYy0+Y29udHJvbF9tdXRleCk7CiAJaW5pdF9oZGFfY2FjaGUoJmNvZGVjLT5hbXBfY2FjaGUsIHNpemVvZihzdHJ1Y3QgaGRhX2FtcF9pbmZvKSk7CiAJaW5pdF9oZGFfY2FjaGUoJmNvZGVjLT5jbWRfY2FjaGUsIHNpemVvZihzdHJ1Y3QgaGRhX2NhY2hlX2hlYWQpKTsKLQlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPm1peGVycywgc2l6ZW9mKHN0cnVjdCBoZGFfbmlkX2l0ZW0pLCA2MCk7CisJc25kX2FycmF5X2luaXQoJmNvZGVjLT5taXhlcnMsIHNpemVvZihzdHJ1Y3QgaGRhX25pZF9pdGVtKSwgMzIpOworCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+bmlkcywgc2l6ZW9mKHN0cnVjdCBoZGFfbmlkX2l0ZW0pLCAzMik7CiAJc25kX2FycmF5X2luaXQoJmNvZGVjLT5pbml0X3BpbnMsIHNpemVvZihzdHJ1Y3QgaGRhX3BpbmNmZyksIDE2KTsKIAlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmRyaXZlcl9waW5zLCBzaXplb2Yoc3RydWN0IGhkYV9waW5jZmcpLCAxNik7CiAJaWYgKGNvZGVjLT5idXMtPm1vZGVsbmFtZSkgewpAQCAtMTcwOCw3ICsxNzMyLDcgQEAKIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfZmluZF9taXhlcl9jdGwpOwogCiAvKioKLSAqIHNuZF9oZGFfY3RsLWFkZCAtIEFkZCBhIGNvbnRyb2wgZWxlbWVudCBhbmQgYXNzaWduIHRvIHRoZSBjb2RlYworICogc25kX2hkYV9jdGxfYWRkIC0gQWRkIGEgY29udHJvbCBlbGVtZW50IGFuZCBhc3NpZ24gdG8gdGhlIGNvZGVjCiAgKiBAY29kZWM6IEhELWF1ZGlvIGNvZGVjCiAgKiBAbmlkOiBjb3JyZXNwb25kaW5nIE5JRCAob3B0aW9uYWwpCiAgKiBAa2N0bDogdGhlIGNvbnRyb2wgZWxlbWVudCB0byBhc3NpZ24KQEAgLTE3MjMsMTkgKzE3NDcsMjUgQEAKICAqCiAgKiBzbmRfaGRhX2N0bF9hZGQoKSBjaGVja3MgdGhlIGNvbnRyb2wgc3ViZGV2IGlkIGZpZWxkIHdoZXRoZXIKICAqICNIREFfU1VCREVWX05JRF9GTEFHIGJpdCBpcyBzZXQuICBJZiBzZXQgKGFuZCBAbmlkIGlzIHplcm8pLCB0aGUgbG93ZXIKLSAqIGJpdHMgdmFsdWUgaXMgdGFrZW4gYXMgdGhlIE5JRCB0byBhc3NpZ24uCisgKiBiaXRzIHZhbHVlIGlzIHRha2VuIGFzIHRoZSBOSUQgdG8gYXNzaWduLiBUaGUgI0hEQV9OSURfSVRFTV9BTVAgYml0CisgKiBzcGVjaWZpZXMgaWYga2N0bC0+cHJpdmF0ZV92YWx1ZSBpcyBhIEhEQSBhbXBsaWZpZXIgdmFsdWUuCiAgKi8KIGludCBzbmRfaGRhX2N0bF9hZGQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCiAJCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsKQogewogCWludCBlcnI7CisJdW5zaWduZWQgc2hvcnQgZmxhZ3MgPSAwOwogCXN0cnVjdCBoZGFfbmlkX2l0ZW0gKml0ZW07CiAKLQlpZiAoa2N0bC0+aWQuc3ViZGV2aWNlICYgSERBX1NVQkRFVl9OSURfRkxBRykgeworCWlmIChrY3RsLT5pZC5zdWJkZXZpY2UgJiBIREFfU1VCREVWX0FNUF9GTEFHKSB7CisJCWZsYWdzIHw9IEhEQV9OSURfSVRFTV9BTVA7CiAJCWlmIChuaWQgPT0gMCkKLQkJCW5pZCA9IGtjdGwtPmlkLnN1YmRldmljZSAmIDB4ZmZmZjsKLQkJa2N0bC0+aWQuc3ViZGV2aWNlID0gMDsKKwkJCW5pZCA9IGdldF9hbXBfbmlkXyhrY3RsLT5wcml2YXRlX3ZhbHVlKTsKIAl9CisJaWYgKChrY3RsLT5pZC5zdWJkZXZpY2UgJiBIREFfU1VCREVWX05JRF9GTEFHKSAhPSAwICYmIG5pZCA9PSAwKQorCQluaWQgPSBrY3RsLT5pZC5zdWJkZXZpY2UgJiAweGZmZmY7CisJaWYgKGtjdGwtPmlkLnN1YmRldmljZSAmIChIREFfU1VCREVWX05JRF9GTEFHfEhEQV9TVUJERVZfQU1QX0ZMQUcpKQorCQlrY3RsLT5pZC5zdWJkZXZpY2UgPSAwOwogCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5idXMtPmNhcmQsIGtjdGwpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTc0NCwxMSArMTc3NCw0MSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlpdGVtLT5rY3RsID0ga2N0bDsKIAlpdGVtLT5uaWQgPSBuaWQ7CisJaXRlbS0+ZmxhZ3MgPSBmbGFnczsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY3RsX2FkZCk7CiAKIC8qKgorICogc25kX2hkYV9hZGRfbmlkIC0gQXNzaWduIGEgTklEIHRvIGEgY29udHJvbCBlbGVtZW50CisgKiBAY29kZWM6IEhELWF1ZGlvIGNvZGVjCisgKiBAbmlkOiBjb3JyZXNwb25kaW5nIE5JRCAob3B0aW9uYWwpCisgKiBAa2N0bDogdGhlIGNvbnRyb2wgZWxlbWVudCB0byBhc3NpZ24KKyAqIEBpbmRleDogaW5kZXggdG8ga2N0bAorICoKKyAqIEFkZCB0aGUgZ2l2ZW4gY29udHJvbCBlbGVtZW50IHRvIGFuIGFycmF5IGluc2lkZSB0aGUgY29kZWMgaW5zdGFuY2UuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiAjc25kX2hkYV9jdGxfYWRkIGNhbm5vdCBiZSB1c2VkIGZvciAxOjEKKyAqIE5JRDpLQ1RMIG1hcHBpbmcgLSBmb3IgZXhhbXBsZSAiQ2FwdHVyZSBTb3VyY2UiIHNlbGVjdG9yLgorICovCitpbnQgc25kX2hkYV9hZGRfbmlkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAorCQkgICAgdW5zaWduZWQgaW50IGluZGV4LCBoZGFfbmlkX3QgbmlkKQoreworCXN0cnVjdCBoZGFfbmlkX2l0ZW0gKml0ZW07CisKKwlpZiAobmlkID4gMCkgeworCQlpdGVtID0gc25kX2FycmF5X25ldygmY29kZWMtPm5pZHMpOworCQlpZiAoIWl0ZW0pCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaXRlbS0+a2N0bCA9IGtjdGw7CisJCWl0ZW0tPmluZGV4ID0gaW5kZXg7CisJCWl0ZW0tPm5pZCA9IG5pZDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9hZGRfbmlkKTsKKworLyoqCiAgKiBzbmRfaGRhX2N0bHNfY2xlYXIgLSBDbGVhciBhbGwgY29udHJvbHMgYXNzaWduZWQgdG8gdGhlIGdpdmVuIGNvZGVjCiAgKiBAY29kZWM6IEhELWF1ZGlvIGNvZGVjCiAgKi8KQEAgLTE3NTksNiArMTgxOSw3IEBACiAJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5taXhlcnMudXNlZDsgaSsrKQogCQlzbmRfY3RsX3JlbW92ZShjb2RlYy0+YnVzLT5jYXJkLCBpdGVtc1tpXS5rY3RsKTsKIAlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPm1peGVycyk7CisJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5uaWRzKTsKIH0KIAogLyogcHNldWRvIGRldmljZSBsb2NraW5nCkBAIC0yNzA2LDcgKzI3NjcsOCBAQAogCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgZmcsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLAogCQkJICAgIHBvd2VyX3N0YXRlKTsKIAkvKiBwYXJ0aWFsIHdvcmthcm91bmQgZm9yICJhenhfZ2V0X3Jlc3BvbnNlIHRpbWVvdXQiICovCi0JaWYgKHBvd2VyX3N0YXRlID09IEFDX1BXUlNUX0QwKQorCWlmIChwb3dlcl9zdGF0ZSA9PSBBQ19QV1JTVF9EMCAmJgorCSAgICAoY29kZWMtPnZlbmRvcl9pZCAmIDB4ZmZmZjAwMDApID09IDB4MTRmMTAwMDApCiAJCW1zbGVlcCgxMCk7CiAKIAluaWQgPSBjb2RlYy0+c3RhcnRfbmlkOwpAQCAtMjc0MCw3ICsyODAyLDYgQEAKIAlpZiAocG93ZXJfc3RhdGUgPT0gQUNfUFdSU1RfRDApIHsKIAkJdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKIAkJaW50IHN0YXRlOwotCQltc2xlZXAoMTApOwogCQkvKiB3YWl0IHVudGlsIHRoZSBjb2RlYyByZWFjaHMgdG8gRDAgKi8KIAkJZW5kX3RpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDApOwogCQlkbyB7CkBAIC0zMjE0LDYgKzMyNzUsOCBAQAogCiAvKgogICogZ2V0IHRoZSBlbXB0eSBQQ00gZGV2aWNlIG51bWJlciB0byBhc3NpZ24KKyAqCisgKiBub3RlIHRoZSBtYXggZGV2aWNlIG51bWJlciBpcyBsaW1pdGVkIGJ5IEhEQV9NQVhfUENNUywgY3VycmVudGx5IDEwCiAgKi8KIHN0YXRpYyBpbnQgZ2V0X2VtcHR5X3BjbV9kZXZpY2Uoc3RydWN0IGhkYV9idXMgKmJ1cywgaW50IHR5cGUpCiB7CkBAIC0zNDc4LDYgKzM1NDEsOCBAQAogCiAJZm9yICg7IGtuZXctPm5hbWU7IGtuZXcrKykgewogCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCQlpZiAoa25ldy0+aWZhY2UgPT0gLTEpCS8qIHNraXAgdGhpcyBjb2RlYyBwcml2YXRlIHZhbHVlICovCisJCQljb250aW51ZTsKIAkJa2N0bCA9IHNuZF9jdGxfbmV3MShrbmV3LCBjb2RlYyk7CiAJCWlmICgha2N0bCkKIAkJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKaW5kZXggMGE3NzBhMi4uYjc1ZGE0NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCkBAIC01MjcsNiArNTI3LDkgQEAKIC8qIG1heC4gY29kZWMgYWRkcmVzcyAqLwogI2RlZmluZSBIREFfTUFYX0NPREVDX0FERFJFU1MJMHgwZgogCisvKiBtYXggbnVtYmVyIG9mIFBDTSBkZXZpY3MgcGVyIGNhcmQgKi8KKyNkZWZpbmUgSERBX01BWF9QQ01TCQkxMAorCiAvKgogICogZ2VuZXJpYyBhcnJheXMKICAqLwpAQCAtNzg5LDYgKzc5Miw3IEBACiAJdTMyICp3Y2FwczsKIAogCXN0cnVjdCBzbmRfYXJyYXkgbWl4ZXJzOwkvKiBsaXN0IG9mIGFzc2lnbmVkIG1peGVyIGVsZW1lbnRzICovCisJc3RydWN0IHNuZF9hcnJheSBuaWRzOwkJLyogbGlzdCBvZiBtYXBwZWQgbWl4ZXIgZWxlbWVudHMgKi8KIAogCXN0cnVjdCBoZGFfY2FjaGVfcmVjIGFtcF9jYWNoZTsJLyogY2FjaGUgZm9yIGFtcCBhY2Nlc3MgKi8KIAlzdHJ1Y3QgaGRhX2NhY2hlX3JlYyBjbWRfY2FjaGU7CS8qIGNhY2hlIGZvciBvdGhlciBjb21tYW5kcyAqLwpAQCAtODk4LDYgKzkwMiw3IEBACiAJCQkgICAgIHVuc2lnbmVkIGludCBjZmcpOwogaW50IHNuZF9oZGFfYWRkX3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9hcnJheSAqbGlzdCwKIAkJICAgICAgIGhkYV9uaWRfdCBuaWQsIHVuc2lnbmVkIGludCBjZmcpOyAvKiBmb3IgaHdkZXAgKi8KK3ZvaWQgc25kX2hkYV9zaHV0dXBfcGlucyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKIC8qCiAgKiBNaXhlcgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCmluZGV4IDA5MmM2YTcuLjVlYTIxMjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKQEAgLTg2MSw3ICs4NjEsOCBAQAogCX0KIAogCS8qIGNyZWF0ZSBpbnB1dCBNVVggaWYgbXVsdGlwbGUgc291cmNlcyBhcmUgYXZhaWxhYmxlICovCi0JZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCAwLCBzbmRfY3RsX25ldzEoJmNhcF9zZWwsIGNvZGVjKSk7CisJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCBzcGVjLT5hZGNfbm9kZS0+bmlkLAorCQkJICAgICAgc25kX2N0bF9uZXcxKCZjYXBfc2VsLCBjb2RlYykpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYwppbmRleCA0MGNjYjQxLi5hMWZjODM3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMKQEAgLTI5Myw4ICsyOTMsMTEgQEAKIHsJCQkJCQkJCVwKIAlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsJCVwKLQljaGFyICphZnRlcjsJCQkJCQlcCi0JY29kZWMtPnR5cGUgPSBzaW1wbGVfc3RydG91bChidWYsICZhZnRlciwgMCk7CQlcCisJdW5zaWduZWQgbG9uZyB2YWw7CQkJCQlcCisJaW50IGVyciA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCk7CQkJXAorCWlmIChlcnIgPCAwKQkJCQkJCVwKKwkJcmV0dXJuIGVycjsJCQkJCVwKKwljb2RlYy0+dHlwZSA9IHZhbDsJCQkJCVwKIAlyZXR1cm4gY291bnQ7CQkJCQkJXAogfQogCkBAIC02MjIsNiArNjI1LDEwIEBACiAJTElORV9NT0RFX1BJTkNGRywKIAlMSU5FX01PREVfVkVSQiwKIAlMSU5FX01PREVfSElOVCwKKwlMSU5FX01PREVfVkVORE9SX0lELAorCUxJTkVfTU9ERV9TVUJTWVNURU1fSUQsCisJTElORV9NT0RFX1JFVklTSU9OX0lELAorCUxJTkVfTU9ERV9DSElQX05BTUUsCiAJTlVNX0xJTkVfTU9ERVMsCiB9OwogCkBAIC02NTEsNTMgKzY1OCw3MSBAQAogfQogCiAvKiBwYXJzZSB0aGUgY29udGVudHMgYWZ0ZXIgdGhlIG90aGVyIGNvbW1hbmQgdGFncywgW3BpbmNmZ10sIFt2ZXJiXSwKLSAqIFtoaW50XSBhbmQgW21vZGVsXQorICogW3ZlbmRvcl9pZF0sIFtzdWJzeXN0ZW1faWRdLCBbcmV2aXNpb25faWRdLCBbY2hpcF9uYW1lXSwgW2hpbnRdIGFuZCBbbW9kZWxdCiAgKiBqdXN0IHBhc3MgdG8gdGhlIHN5c2ZzIGhlbHBlciAob25seSB3aGVuIGFueSBjb2RlYyB3YXMgc3BlY2lmaWVkKQogICovCiBzdGF0aWMgdm9pZCBwYXJzZV9waW5jZmdfbW9kZShjaGFyICpidWYsIHN0cnVjdCBoZGFfYnVzICpidXMsCiAJCQkgICAgICBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQogewotCWlmICghKmNvZGVjcCkKLQkJcmV0dXJuOwogCXBhcnNlX3VzZXJfcGluX2NvbmZpZ3MoKmNvZGVjcCwgYnVmKTsKIH0KIAogc3RhdGljIHZvaWQgcGFyc2VfdmVyYl9tb2RlKGNoYXIgKmJ1Ziwgc3RydWN0IGhkYV9idXMgKmJ1cywKIAkJCSAgICBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQogewotCWlmICghKmNvZGVjcCkKLQkJcmV0dXJuOwogCXBhcnNlX2luaXRfdmVyYnMoKmNvZGVjcCwgYnVmKTsKIH0KIAogc3RhdGljIHZvaWQgcGFyc2VfaGludF9tb2RlKGNoYXIgKmJ1Ziwgc3RydWN0IGhkYV9idXMgKmJ1cywKIAkJCSAgICBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQogewotCWlmICghKmNvZGVjcCkKLQkJcmV0dXJuOwogCXBhcnNlX2hpbnRzKCpjb2RlY3AsIGJ1Zik7CiB9CiAKIHN0YXRpYyB2b2lkIHBhcnNlX21vZGVsX21vZGUoY2hhciAqYnVmLCBzdHJ1Y3QgaGRhX2J1cyAqYnVzLAogCQkJICAgICBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQogewotCWlmICghKmNvZGVjcCkKLQkJcmV0dXJuOwogCWtmcmVlKCgqY29kZWNwKS0+bW9kZWxuYW1lKTsKIAkoKmNvZGVjcCktPm1vZGVsbmFtZSA9IGtzdHJkdXAoYnVmLCBHRlBfS0VSTkVMKTsKIH0KIAorc3RhdGljIHZvaWQgcGFyc2VfY2hpcF9uYW1lX21vZGUoY2hhciAqYnVmLCBzdHJ1Y3QgaGRhX2J1cyAqYnVzLAorCQkJCSBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQoreworCWtmcmVlKCgqY29kZWNwKS0+Y2hpcF9uYW1lKTsKKwkoKmNvZGVjcCktPmNoaXBfbmFtZSA9IGtzdHJkdXAoYnVmLCBHRlBfS0VSTkVMKTsKK30KKworI2RlZmluZSBERUZJTkVfUEFSU0VfSURfTU9ERShuYW1lKSBcCitzdGF0aWMgdm9pZCBwYXJzZV8jI25hbWUjI19tb2RlKGNoYXIgKmJ1Ziwgc3RydWN0IGhkYV9idXMgKmJ1cywgXAorCQkJCSBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKSBcCit7IFwKKwl1bnNpZ25lZCBsb25nIHZhbDsgXAorCWlmICghc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKSkgXAorCQkoKmNvZGVjcCktPm5hbWUgPSB2YWw7IFwKK30KKworREVGSU5FX1BBUlNFX0lEX01PREUodmVuZG9yX2lkKTsKK0RFRklORV9QQVJTRV9JRF9NT0RFKHN1YnN5c3RlbV9pZCk7CitERUZJTkVfUEFSU0VfSURfTU9ERShyZXZpc2lvbl9pZCk7CisKKwogc3RydWN0IGhkYV9wYXRjaF9pdGVtIHsKIAljb25zdCBjaGFyICp0YWc7CiAJdm9pZCAoKnBhcnNlcikoY2hhciAqYnVmLCBzdHJ1Y3QgaGRhX2J1cyAqYnVzLCBzdHJ1Y3QgaGRhX2NvZGVjICoqcmV0Yyk7CisJaW50IG5lZWRfY29kZWM7CiB9OwogCiBzdGF0aWMgc3RydWN0IGhkYV9wYXRjaF9pdGVtIHBhdGNoX2l0ZW1zW05VTV9MSU5FX01PREVTXSA9IHsKLQlbTElORV9NT0RFX0NPREVDXSA9IHsgIltjb2RlY10iLCBwYXJzZV9jb2RlY19tb2RlIH0sCi0JW0xJTkVfTU9ERV9NT0RFTF0gPSB7ICJbbW9kZWxdIiwgcGFyc2VfbW9kZWxfbW9kZSB9LAotCVtMSU5FX01PREVfVkVSQl0gPSB7ICJbdmVyYl0iLCBwYXJzZV92ZXJiX21vZGUgfSwKLQlbTElORV9NT0RFX1BJTkNGR10gPSB7ICJbcGluY2ZnXSIsIHBhcnNlX3BpbmNmZ19tb2RlIH0sCi0JW0xJTkVfTU9ERV9ISU5UXSA9IHsgIltoaW50XSIsIHBhcnNlX2hpbnRfbW9kZSB9LAorCVtMSU5FX01PREVfQ09ERUNdID0geyAiW2NvZGVjXSIsIHBhcnNlX2NvZGVjX21vZGUsIDAgfSwKKwlbTElORV9NT0RFX01PREVMXSA9IHsgIlttb2RlbF0iLCBwYXJzZV9tb2RlbF9tb2RlLCAxIH0sCisJW0xJTkVfTU9ERV9WRVJCXSA9IHsgIlt2ZXJiXSIsIHBhcnNlX3ZlcmJfbW9kZSwgMSB9LAorCVtMSU5FX01PREVfUElOQ0ZHXSA9IHsgIltwaW5jZmddIiwgcGFyc2VfcGluY2ZnX21vZGUsIDEgfSwKKwlbTElORV9NT0RFX0hJTlRdID0geyAiW2hpbnRdIiwgcGFyc2VfaGludF9tb2RlLCAxIH0sCisJW0xJTkVfTU9ERV9WRU5ET1JfSURdID0geyAiW3ZlbmRvcl9pZF0iLCBwYXJzZV92ZW5kb3JfaWRfbW9kZSwgMSB9LAorCVtMSU5FX01PREVfU1VCU1lTVEVNX0lEXSA9IHsgIltzdWJzeXN0ZW1faWRdIiwgcGFyc2Vfc3Vic3lzdGVtX2lkX21vZGUsIDEgfSwKKwlbTElORV9NT0RFX1JFVklTSU9OX0lEXSA9IHsgIltyZXZpc2lvbl9pZF0iLCBwYXJzZV9yZXZpc2lvbl9pZF9tb2RlLCAxIH0sCisJW0xJTkVfTU9ERV9DSElQX05BTUVdID0geyAiW2NoaXBfbmFtZV0iLCBwYXJzZV9jaGlwX25hbWVfbW9kZSwgMSB9LAogfTsKIAogLyogY2hlY2sgdGhlIGxpbmUgc3RhcnRpbmcgd2l0aCAnWycgLS0gY2hhbmdlIHRoZSBwYXJzZXIgbW9kZSBhY2NvZGluZ2x5ICovCkBAIC03ODAsNyArODA1LDggQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoKmJ1ZiA9PSAnWycpCiAJCQlsaW5lX21vZGUgPSBwYXJzZV9saW5lX21vZGUoYnVmLCBidXMpOwotCQllbHNlIGlmIChwYXRjaF9pdGVtc1tsaW5lX21vZGVdLnBhcnNlcikKKwkJZWxzZSBpZiAocGF0Y2hfaXRlbXNbbGluZV9tb2RlXS5wYXJzZXIgJiYKKwkJCSAoY29kZWMgfHwgIXBhdGNoX2l0ZW1zW2xpbmVfbW9kZV0ubmVlZF9jb2RlYykpCiAJCQlwYXRjaF9pdGVtc1tsaW5lX21vZGVdLnBhcnNlcihidWYsIGJ1cywgJmNvZGVjKTsKIAl9CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCBlYzljMzQ4Li5kNWM5M2FkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKQEAgLTEyNSw2ICsxMjUsNyBAQAogCQkJICJ7SW50ZWwsIElDSDl9LCIKIAkJCSAie0ludGVsLCBJQ0gxMH0sIgogCQkJICJ7SW50ZWwsIFBDSH0sIgorCQkJICJ7SW50ZWwsIENQVH0sIgogCQkJICJ7SW50ZWwsIFNDSH0sIgogCQkJICJ7QVRJLCBTQjQ1MH0sIgogCQkJICJ7QVRJLCBTQjYwMH0sIgpAQCAtMjU5LDggKzI2MCw2IEBACiAjZGVmaW5lIEFaWF9NQVhfRlJBRwkJMzIKIC8qIG1heCBidWZmZXIgc2l6ZSAtIG5vIGgvdyBsaW1pdCwgeW91IGNhbiBpbmNyZWFzZSBhcyB5b3UgbGlrZSAqLwogI2RlZmluZSBBWlhfTUFYX0JVRl9TSVpFCSgxMDI0KjEwMjQqMTAyNCkKLS8qIG1heCBudW1iZXIgb2YgUENNIGRldmljcyBwZXIgY2FyZCAqLwotI2RlZmluZSBBWlhfTUFYX1BDTVMJCTgKIAogLyogUklSQiBpbnQgbWFzazogb3ZlcnJ1blsyXSwgcmVzcG9uc2VbMF0gKi8KICNkZWZpbmUgUklSQl9JTlRfUkVTUE9OU0UJMHgwMQpAQCAtNDA4LDcgKzQwNyw3IEBACiAJc3RydWN0IGF6eF9kZXYgKmF6eF9kZXY7CiAKIAkvKiBQQ00gKi8KLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtW0FaWF9NQVhfUENNU107CisJc3RydWN0IHNuZF9wY20gKnBjbVtIREFfTUFYX1BDTVNdOwogCiAJLyogSEQgY29kZWMgKi8KIAl1bnNpZ25lZCBzaG9ydCBjb2RlY19tYXNrOwpAQCAtNDI2LDYgKzQyNSw3IEBACiAKIAkvKiBmbGFncyAqLwogCWludCBwb3NpdGlvbl9maXg7CisJaW50IHBvbGxfY291bnQ7CiAJdW5zaWduZWQgaW50IHJ1bm5pbmcgOjE7CiAJdW5zaWduZWQgaW50IGluaXRpYWxpemVkIDoxOwogCXVuc2lnbmVkIGludCBzaW5nbGVfY21kIDoxOwpAQCAtNDQ4LDYgKzQ0OCw3IEBACiAvKiBkcml2ZXIgdHlwZXMgKi8KIGVudW0gewogCUFaWF9EUklWRVJfSUNILAorCUFaWF9EUklWRVJfUENILAogCUFaWF9EUklWRVJfU0NILAogCUFaWF9EUklWRVJfQVRJLAogCUFaWF9EUklWRVJfQVRJSERNSSwKQEAgLTQ2Miw2ICs0NjMsNyBAQAogCiBzdGF0aWMgY2hhciAqZHJpdmVyX3Nob3J0X25hbWVzW10gX19kZXZpbml0ZGF0YSA9IHsKIAlbQVpYX0RSSVZFUl9JQ0hdID0gIkhEQSBJbnRlbCIsCisJW0FaWF9EUklWRVJfUENIXSA9ICJIREEgSW50ZWwgUENIIiwKIAlbQVpYX0RSSVZFUl9TQ0hdID0gIkhEQSBJbnRlbCBNSUQiLAogCVtBWlhfRFJJVkVSX0FUSV0gPSAiSERBIEFUSSBTQiIsCiAJW0FaWF9EUklWRVJfQVRJSERNSV0gPSAiSERBIEFUSSBIRE1JIiwKQEAgLTUwNiw3ICs1MDgsNyBAQAogI2RlZmluZSBnZXRfYXp4X2RldihzdWJzdHJlYW0pIChzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YSkKIAogc3RhdGljIGludCBhenhfYWNxdWlyZV9pcnEoc3RydWN0IGF6eCAqY2hpcCwgaW50IGRvX2Rpc2Nvbm5lY3QpOwotCitzdGF0aWMgaW50IGF6eF9zZW5kX2NtZChzdHJ1Y3QgaGRhX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgdmFsKTsKIC8qCiAgKiBJbnRlcmZhY2UgZm9yIEhEIGNvZGVjCiAgKi8KQEAgLTY2NCwxMSArNjY2LDEyIEBACiB7CiAJc3RydWN0IGF6eCAqY2hpcCA9IGJ1cy0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlpbnQgZG9fcG9sbCA9IDA7CiAKICBhZ2FpbjoKIAl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7CiAJZm9yICg7OykgewotCQlpZiAoY2hpcC0+cG9sbGluZ19tb2RlKSB7CisJCWlmIChjaGlwLT5wb2xsaW5nX21vZGUgfHwgZG9fcG9sbCkgewogCQkJc3Bpbl9sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwogCQkJYXp4X3VwZGF0ZV9yaXJiKGNoaXApOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7CkBAIC02NzYsNiArNjc5LDkgQEAKIAkJaWYgKCFjaGlwLT5yaXJiLmNtZHNbYWRkcl0pIHsKIAkJCXNtcF9ybWIoKTsKIAkJCWJ1cy0+cmlyYl9lcnJvciA9IDA7CisKKwkJCWlmICghZG9fcG9sbCkKKwkJCQljaGlwLT5wb2xsX2NvdW50ID0gMDsKIAkJCXJldHVybiBjaGlwLT5yaXJiLnJlc1thZGRyXTsgLyogdGhlIGxhc3QgdmFsdWUgKi8KIAkJfQogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKQEAgLTY4OCw2ICs2OTQsMTYgQEAKIAkJfQogCX0KIAorCWlmICghY2hpcC0+cG9sbGluZ19tb2RlICYmIGNoaXAtPnBvbGxfY291bnQgPCAyKSB7CisJCXNuZF9wcmludGRkKFNGWCAiYXp4X2dldF9yZXNwb25zZSB0aW1lb3V0LCAiCisJCQkgICAicG9sbGluZyB0aGUgY29kZWMgb25jZTogbGFzdCBjbWQ9MHglMDh4XG4iLAorCQkJICAgY2hpcC0+bGFzdF9jbWRbYWRkcl0pOworCQlkb19wb2xsID0gMTsKKwkJY2hpcC0+cG9sbF9jb3VudCsrOworCQlnb3RvIGFnYWluOworCX0KKworCiAJaWYgKCFjaGlwLT5wb2xsaW5nX21vZGUpIHsKIAkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgU0ZYICJhenhfZ2V0X3Jlc3BvbnNlIHRpbWVvdXQsICIKIAkJCSAgICJzd2l0Y2hpbmcgdG8gcG9sbGluZyBtb2RlOiBsYXN0IGNtZD0weCUwOHhcbiIsCkBAIC05NTMsOCArOTY5LDggQEAKIAlhenhfZGV2LT5pbnN1ZmZpY2llbnQgPSAxOwogCiAJLyogZW5hYmxlIFNJRSAqLwotCWF6eF93cml0ZWIoY2hpcCwgSU5UQ1RMLAotCQkgICBhenhfcmVhZGIoY2hpcCwgSU5UQ1RMKSB8ICgxIDw8IGF6eF9kZXYtPmluZGV4KSk7CisJYXp4X3dyaXRlbChjaGlwLCBJTlRDVEwsCisJCSAgIGF6eF9yZWFkbChjaGlwLCBJTlRDVEwpIHwgKDEgPDwgYXp4X2Rldi0+aW5kZXgpKTsKIAkvKiBzZXQgRE1BIHN0YXJ0IGFuZCBpbnRlcnJ1cHQgbWFzayAqLwogCWF6eF9zZF93cml0ZWIoYXp4X2RldiwgU0RfQ1RMLCBhenhfc2RfcmVhZGIoYXp4X2RldiwgU0RfQ1RMKSB8CiAJCSAgICAgIFNEX0NUTF9ETUFfU1RBUlQgfCBTRF9JTlRfTUFTSyk7CkBAIC05NzMsOCArOTg5LDggQEAKIHsKIAlhenhfc3RyZWFtX2NsZWFyKGNoaXAsIGF6eF9kZXYpOwogCS8qIGRpc2FibGUgU0lFICovCi0JYXp4X3dyaXRlYihjaGlwLCBJTlRDVEwsCi0JCSAgIGF6eF9yZWFkYihjaGlwLCBJTlRDVEwpICYgfigxIDw8IGF6eF9kZXYtPmluZGV4KSk7CisJYXp4X3dyaXRlbChjaGlwLCBJTlRDVEwsCisJCSAgIGF6eF9yZWFkbChjaGlwLCBJTlRDVEwpICYgfigxIDw8IGF6eF9kZXYtPmluZGV4KSk7CiB9CiAKIApAQCAtMTA1MCw2ICsxMDY2LDcgQEAKIAkJCQkweDAxLCBOVklESUFfSERBX0VOQUJMRV9DT0hCSVQpOwogCQlicmVhazsKIAljYXNlIEFaWF9EUklWRVJfU0NIOgorCWNhc2UgQVpYX0RSSVZFUl9QQ0g6CiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGNoaXAtPnBjaSwgSU5URUxfU0NIX0hEQV9ERVZDLCAmc25vb3ApOwogCQlpZiAoc25vb3AgJiBJTlRFTF9TQ0hfSERBX0RFVkNfTk9TTk9PUCkgewogCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGNoaXAtPnBjaSwgSU5URUxfU0NIX0hEQV9ERVZDLApAQCAtMTMzNSw3ICsxMzUyLDcgQEAKIAlpZiAoY2hpcC0+aW5pdGlhbGl6ZWQpIHsKIAkJaW50IGk7CiAKLQkJZm9yIChpID0gMDsgaSA8IEFaWF9NQVhfUENNUzsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgSERBX01BWF9QQ01TOyBpKyspCiAJCQlzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbVtpXSk7CiAJCXNuZF9oZGFfc3VzcGVuZChjaGlwLT5idXMpOwogCQlzbmRfaGRhX3Jlc3VtZShjaGlwLT5idXMpOwpAQCAtMTM5Nyw3ICsxNDE0LDcgQEAKIAkJCQljaGlwLT5jb2RlY19tYXNrICY9IH4oMSA8PCBjKTsKIAkJCQkvKiBNb3JlIGJhZGx5LCBhY2Nlc3NpbmcgdG8gYSBub24tZXhpc3RpbmcKIAkJCQkgKiBjb2RlYyBvZnRlbiBzY3Jld3MgdXAgdGhlIGNvbnRyb2xsZXIgY2hpcCwKLQkJCQkgKiBhbmQgZGlzdHJ1YnMgdGhlIGZ1cnRoZXIgY29tbXVuaWNhdGlvbnMuCisJCQkJICogYW5kIGRpc3R1cmJzIHRoZSBmdXJ0aGVyIGNvbW11bmljYXRpb25zLgogCQkJCSAqIFRodXMgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBwcm9iaW5nLAogCQkJCSAqIGJldHRlciB0byByZXNldCB0aGUgY29udHJvbGxlciBjaGlwIHRvCiAJCQkJICogZ2V0IGJhY2sgdG8gdGhlIHNhbml0eSBzdGF0ZS4KQEAgLTE4NzgsNiArMTg5NSw5IEBACiAKIAlpZiAoIWJkbF9wb3NfYWRqW2NoaXAtPmRldl9pbmRleF0pCiAJCXJldHVybiAxOyAvKiBubyBkZWxheWVkIGFjayAqLworCWlmIChXQVJOX09OQ0UoIWF6eF9kZXYtPnBlcmlvZF9ieXRlcywKKwkJICAgICAgImhkYS1pbnRlbDogemVybyBhenhfZGV2LT5wZXJpb2RfYnl0ZXMiKSkKKwkJcmV0dXJuIDA7IC8qIHRoaXMgc2hvdWxkbid0IGhhcHBlbiEgKi8KIAlpZiAocG9zICUgYXp4X2Rldi0+cGVyaW9kX2J5dGVzID4gYXp4X2Rldi0+cGVyaW9kX2J5dGVzIC8gMikKIAkJcmV0dXJuIDA7IC8qIE5HIC0gaXQncyBiZWxvdyB0aGUgcGVyaW9kIGJvdW5kYXJ5ICovCiAJcmV0dXJuIDE7IC8qIE9LLCBpdCdzIGZpbmUgKi8KQEAgLTE5NjUsNyArMTk4NSw3IEBACiAJaW50IHBjbV9kZXYgPSBjcGNtLT5kZXZpY2U7CiAJaW50IHMsIGVycjsKIAotCWlmIChwY21fZGV2ID49IEFaWF9NQVhfUENNUykgeworCWlmIChwY21fZGV2ID49IEhEQV9NQVhfUENNUykgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFNGWCAiSW52YWxpZCBQQ00gZGV2aWNlIG51bWJlciAlZFxuIiwKIAkJCSAgIHBjbV9kZXYpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIwNDMsNyArMjA2Myw3IEBACiB7CiAJaWYgKHJlcXVlc3RfaXJxKGNoaXAtPnBjaS0+aXJxLCBhenhfaW50ZXJydXB0LAogCQkJY2hpcC0+bXNpID8gMCA6IElSUUZfU0hBUkVELAotCQkJIkhEQSBJbnRlbCIsIGNoaXApKSB7CisJCQkiaGRhX2ludGVsIiwgY2hpcCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZGEtaW50ZWw6IHVuYWJsZSB0byBncmFiIElSUSAlZCwgIgogCQkgICAgICAgImRpc2FibGluZyBkZXZpY2VcbiIsIGNoaXAtPnBjaS0+aXJxKTsKIAkJaWYgKGRvX2Rpc2Nvbm5lY3QpCkBAIC0yMTIxLDcgKzIxNDEsNyBAQAogCiAJc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwogCWF6eF9jbGVhcl9pcnFfcGVuZGluZyhjaGlwKTsKLQlmb3IgKGkgPSAwOyBpIDwgQVpYX01BWF9QQ01TOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEhEQV9NQVhfUENNUzsgaSsrKQogCQlzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbVtpXSk7CiAJaWYgKGNoaXAtPmluaXRpYWxpemVkKQogCQlzbmRfaGRhX3N1c3BlbmQoY2hpcC0+YnVzKTsKQEAgLTIyNDQsNiArMjI2NCw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDFjYywgIkRlbGwgRDgyMCIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDFkZSwgIkRlbGwgUHJlY2lzaW9uIDM5MCIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzA2ZCwgIkhQIGR2MyIsIFBPU19GSVhfTFBJQiksCisJU05EX1BDSV9RVUlSSygweDExMDYsIDB4MzI4OCwgIkFTVVMgTTJWLU1YIFNFIiwgUE9TX0ZJWF9MUElCKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MTNkLCAiQVNVUyBQNUFEMiIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MTAwMiwgIk1TSSBXaW5kIFUxMTUiLCBQT1NfRklYX0xQSUIpLAogCXt9CkBAIC0yMzMyLDYgKzIzNTMsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgbXNpX2JsYWNrX2xpc3RbXSBfX2RldmluaXRkYXRhID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxZjIsICJBU1VTIiwgMCksIC8qIEF0aGxvbjY0IFgyICsgbnZpZGlhICovCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFmNiwgIkFTVVMiLCAwKSwgLyogbnZpZGlhICovCiAJe30KIH07CiAKQEAgLTIzOTksNiArMjQyMSw3IEBACiAJaWYgKGJkbF9wb3NfYWRqW2Rldl0gPCAwKSB7CiAJCXN3aXRjaCAoY2hpcC0+ZHJpdmVyX3R5cGUpIHsKIAkJY2FzZSBBWlhfRFJJVkVSX0lDSDoKKwkJY2FzZSBBWlhfRFJJVkVSX1BDSDoKIAkJCWJkbF9wb3NfYWRqW2Rldl0gPSAxOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC0yNjY0LDcgKzI2ODcsNyBAQAogfQogCiAvKiBQQ0kgSURzICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXp4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGF6eF9pZHMpID0gewogCS8qIElDSCA2Li4xMCAqLwogCXsgUENJX0RFVklDRSgweDgwODYsIDB4MjY2OCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfSUNIIH0sCiAJeyBQQ0lfREVWSUNFKDB4ODA4NiwgMHgyN2Q4KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9JQ0ggfSwKQEAgLTI2NzcsNiArMjcwMCw4IEBACiAJeyBQQ0lfREVWSUNFKDB4ODA4NiwgMHgzYTZlKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9JQ0ggfSwKIAkvKiBQQ0ggKi8KIAl7IFBDSV9ERVZJQ0UoMHg4MDg2LCAweDNiNTYpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX0lDSCB9LAorCS8qIENQVCAqLworCXsgUENJX0RFVklDRSgweDgwODYsIDB4MWMyMCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfUENIIH0sCiAJLyogU0NIICovCiAJeyBQQ0lfREVWSUNFKDB4ODA4NiwgMHg4MTFiKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9TQ0ggfSwKIAkvKiBBVEkgU0IgNDUwLzYwMCAqLwpAQCAtMjcwNCwzMiArMjcyOSwxMCBAQAogCS8qIFVMSSBNNTQ2MSAqLwogCXsgUENJX0RFVklDRSgweDEwYjksIDB4NTQ2MSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfVUxJIH0sCiAJLyogTlZJRElBIE1DUCAqLwotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDI2YyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwMzcxKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDAzZTQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDNmMCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNDRhKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA0NGIpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDU1YyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNTVkKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA1OTApLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDc3NCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNzc1KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA3NzYpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDc3NyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwN2ZjKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA3ZmQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGFjMCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYWMxKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBhYzIpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGFjMyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYmUyKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBiZTMpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGJlNCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk0KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTUpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGQ5NiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk3KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9BTllfSUQpLAorCSAgLmNsYXNzID0gUENJX0NMQVNTX01VTFRJTUVESUFfSERfQVVESU8gPDwgOCwKKwkgIC5jbGFzc19tYXNrID0gMHhmZmZmZmYsCisJICAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCS8qIFRlcmFkaWNpICovCiAJeyBQQ0lfREVWSUNFKDB4NjU0OSwgMHgxMjAwKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9URVJBIH0sCiAJLyogQ3JlYXRpdmUgWC1GaSAoQ0EwMTEwLUlCRykgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmggYi9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCmluZGV4IDU3NzhhZTguLjdjZWUzNjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaApAQCAtMzEsNiArMzEsNyBAQAogICogaW4gc25kX2hkYV9jdGxfYWRkKCksIHNvIHRoYXQgdGhpcyB2YWx1ZSB3b24ndCBhcHBlYXIgaW4gdGhlIG91dHNpZGUuCiAgKi8KICNkZWZpbmUgSERBX1NVQkRFVl9OSURfRkxBRwkoMVUgPDwgMzEpCisjZGVmaW5lIEhEQV9TVUJERVZfQU1QX0ZMQUcJKDFVIDw8IDMwKQogCiAvKgogICogZm9yIG1peGVyIGNvbnRyb2xzCkBAIC00Miw3ICs0Myw3IEBACiAvKiBtb25vIHZvbHVtZSB3aXRoIGluZGV4IChpbmRleD0wLDEsLi4uKSAoY2hhbm5lbD0xLDIpICovCiAjZGVmaW5lIEhEQV9DT0RFQ19WT0xVTUVfTU9OT19JRFgoeG5hbWUsIHhjaWR4LCBuaWQsIGNoYW5uZWwsIHhpbmRleCwgZGlyZWN0aW9uKSBcCiAJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0geGNpZHgsICBcCi0JICAuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IChuaWQpLCBcCisJICAuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywgXAogCSAgLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfCBcCiAJICAJICAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCB8IFwKIAkgIAkgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DQUxMQkFDSywgXApAQCAtNjMsNyArNjQsNyBAQAogLyogbW9ubyBtdXRlIHN3aXRjaCB3aXRoIGluZGV4IChpbmRleD0wLDEsLi4uKSAoY2hhbm5lbD0xLDIpICovCiAjZGVmaW5lIEhEQV9DT0RFQ19NVVRFX01PTk9fSURYKHhuYW1lLCB4Y2lkeCwgbmlkLCBjaGFubmVsLCB4aW5kZXgsIGRpcmVjdGlvbikgXAogCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IHhjaWR4LCBcCi0JICAuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IChuaWQpLCBcCisJICAuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywgXAogCSAgLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywgXAogCSAgLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsIFwKIAkgIC5wdXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfcHV0LCBcCkBAIC04MSw3ICs4Miw3IEBACiAvKiBzcGVjaWFsIGJlZXAgbW9ubyBtdXRlIHN3aXRjaCB3aXRoIGluZGV4IChpbmRleD0wLDEsLi4uKSAoY2hhbm5lbD0xLDIpICovCiAjZGVmaW5lIEhEQV9DT0RFQ19NVVRFX0JFRVBfTU9OT19JRFgoeG5hbWUsIHhjaWR4LCBuaWQsIGNoYW5uZWwsIHhpbmRleCwgZGlyZWN0aW9uKSBcCiAJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0geGNpZHgsIFwKLQkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgKG5pZCksIFwKKwkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLCBcCiAJICAuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9pbmZvLCBcCiAJICAuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2dldCwgXAogCSAgLnB1dCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9wdXRfYmVlcCwgXApAQCAtNDY0LDEzICs0NjUsMjAgQEAKIHUzMiBzbmRfaGRhX3Bpbl9zZW5zZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCk7CiBpbnQgc25kX2hkYV9qYWNrX2RldGVjdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCk7CiAKKy8qIGZsYWdzIGZvciBoZGFfbmlkX2l0ZW0gKi8KKyNkZWZpbmUgSERBX05JRF9JVEVNX0FNUAkoMTw8MCkKKwogc3RydWN0IGhkYV9uaWRfaXRlbSB7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CiAJaGRhX25pZF90IG5pZDsKKwl1bnNpZ25lZCBzaG9ydCBmbGFnczsKIH07CiAKIGludCBzbmRfaGRhX2N0bF9hZGQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCiAJCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsKTsKK2ludCBzbmRfaGRhX2FkZF9uaWQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwsCisJCSAgICB1bnNpZ25lZCBpbnQgaW5kZXgsIGhkYV9uaWRfdCBuaWQpOwogdm9pZCBzbmRfaGRhX2N0bHNfY2xlYXIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCmluZGV4IGM5YWZjMDQuLmY5N2QzNWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKQEAgLTYxLDE4ICs2MSwyOSBAQAogCQlyZXR1cm4gIlVOS05PV04gV2lkZ2V0IjsKIH0KIAotc3RhdGljIHZvaWQgcHJpbnRfbmlkX21peGVycyhzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIsCi0JCQkgICAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQorc3RhdGljIHZvaWQgcHJpbnRfbmlkX2FycmF5KHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlciwKKwkJCSAgICBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJCSAgICBzdHJ1Y3Qgc25kX2FycmF5ICphcnJheSkKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgaGRhX25pZF9pdGVtICppdGVtcyA9IGNvZGVjLT5taXhlcnMubGlzdDsKKwlzdHJ1Y3QgaGRhX25pZF9pdGVtICppdGVtcyA9IGFycmF5LT5saXN0LCAqaXRlbTsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOwotCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+bWl4ZXJzLnVzZWQ7IGkrKykgewotCQlpZiAoaXRlbXNbaV0ubmlkID09IG5pZCkgewotCQkJa2N0bCA9IGl0ZW1zW2ldLmtjdGw7CisJZm9yIChpID0gMDsgaSA8IGFycmF5LT51c2VkOyBpKyspIHsKKwkJaXRlbSA9ICZpdGVtc1tpXTsKKwkJaWYgKGl0ZW0tPm5pZCA9PSBuaWQpIHsKKwkJCWtjdGwgPSBpdGVtLT5rY3RsOwogCQkJc25kX2lwcmludGYoYnVmZmVyLAogCQkJICAiICBDb250cm9sOiBuYW1lPVwiJXNcIiwgaW5kZXg9JWksIGRldmljZT0laVxuIiwKLQkJCSAga2N0bC0+aWQubmFtZSwga2N0bC0+aWQuaW5kZXgsIGtjdGwtPmlkLmRldmljZSk7CisJCQkgIGtjdGwtPmlkLm5hbWUsIGtjdGwtPmlkLmluZGV4ICsgaXRlbS0+aW5kZXgsCisJCQkgIGtjdGwtPmlkLmRldmljZSk7CisJCQlpZiAoaXRlbS0+ZmxhZ3MgJiBIREFfTklEX0lURU1fQU1QKQorCQkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwKKwkJCQkgICIgICAgQ29udHJvbEFtcDogY2hzPSVsdSwgZGlyPSVzLCAiCisJCQkJICAiaWR4PSVsdSwgb2ZzPSVsdVxuIiwKKwkJCQkgIGdldF9hbXBfY2hhbm5lbHMoa2N0bCksCisJCQkJICBnZXRfYW1wX2RpcmVjdGlvbihrY3RsKSA/ICJPdXQiIDogIkluIiwKKwkJCQkgIGdldF9hbXBfaW5kZXgoa2N0bCksCisJCQkJICBnZXRfYW1wX29mZnNldChrY3RsKSk7CiAJCX0KIAl9CiB9CkBAIC01MjgsNyArNTM5LDggQEAKIAkJCSAgICAoZGF0YSAmICgxPDxpKSkgPyAxIDogMCwKIAkJCSAgICAodW5zb2wgJiAoMTw8aSkpID8gMSA6IDApOwogCS8qIEZJWE1FOiBhZGQgR1BPIGFuZCBHUEkgcGluIGluZm9ybWF0aW9uICovCi0JcHJpbnRfbmlkX21peGVycyhidWZmZXIsIGNvZGVjLCBuaWQpOworCXByaW50X25pZF9hcnJheShidWZmZXIsIGNvZGVjLCBuaWQsICZjb2RlYy0+bWl4ZXJzKTsKKwlwcmludF9uaWRfYXJyYXkoYnVmZmVyLCBjb2RlYywgbmlkLCAmY29kZWMtPm5pZHMpOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9jb2RlY19pbmZvKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCkBAIC02MDgsNyArNjIwLDggQEAKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiBDUCIpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOwogCi0JCXByaW50X25pZF9taXhlcnMoYnVmZmVyLCBjb2RlYywgbmlkKTsKKwkJcHJpbnRfbmlkX2FycmF5KGJ1ZmZlciwgY29kZWMsIG5pZCwgJmNvZGVjLT5taXhlcnMpOworCQlwcmludF9uaWRfYXJyYXkoYnVmZmVyLCBjb2RlYywgbmlkLCAmY29kZWMtPm5pZHMpOwogCQlwcmludF9uaWRfcGNtcyhidWZmZXIsIGNvZGVjLCBuaWQpOwogCiAJCS8qIHZvbHVtZSBrbm9iIGlzIGEgc3BlY2lhbCB3aWRnZXQgdGhhdCBhbHdheXMgaGF2ZSBjb25uZWN0aW9uCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwppbmRleCA2OWE5NDFjLi5lNmQxYmRmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKQEAgLTE3NCw2ICsxNzQsNyBAQAogc3RhdGljIGludCBhZDE5OHhfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZXJyOwogCkBAIC0yMDgsOSArMjA5LDcgQEAKIAkJCWlmICgha2N0bCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCWtjdGwtPnByaXZhdGVfdmFsdWUgPSBzcGVjLT5iZWVwX2FtcDsKLQkJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywKLQkJCQkJCWdldF9hbXBfbmlkXyhzcGVjLT5iZWVwX2FtcCksCi0JCQkJCQlrY3RsKTsKKwkJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywgMCwga2N0bCk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0yMzksNiArMjM4LDI3IEBACiAJfQogCiAJYWQxOTh4X2ZyZWVfa2N0bHMoY29kZWMpOyAvKiBubyBsb25nZXIgbmVlZGVkICovCisKKwkvKiBhc3NpZ24gQ2FwdHVyZSBTb3VyY2UgZW51bXMgdG8gTklEICovCisJa2N0bCA9IHNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJDYXB0dXJlIFNvdXJjZSIpOworCWlmICgha2N0bCkKKwkJa2N0bCA9IHNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJJbnB1dCBTb3VyY2UiKTsKKwlmb3IgKGkgPSAwOyBrY3RsICYmIGkgPCBrY3RsLT5jb3VudDsgaSsrKSB7CisJCWVyciA9IHNuZF9oZGFfYWRkX25pZChjb2RlYywga2N0bCwgaSwgc3BlYy0+Y2Fwc3JjX25pZHNbaV0pOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJLyogYXNzaWduIElFQzk1OCBlbnVtcyB0byBOSUQgKi8KKwlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywKKwkJCVNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIixQTEFZQkFDSyxOT05FKSAiU291cmNlIik7CisJaWYgKGtjdGwpIHsKKwkJZXJyID0gc25kX2hkYV9hZGRfbmlkKGNvZGVjLCBrY3RsLCAwLAorCQkJCSAgICAgIHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC00MjEsNiArNDQxLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZDE5OHhfc2h1dHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXNuZF9oZGFfc2h1dHVwX3BpbnMoY29kZWMpOworfQorCiBzdGF0aWMgdm9pZCBhZDE5OHhfZnJlZV9rY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTQzNCw2ICs0NTksNDYgQEAKIAlzbmRfYXJyYXlfZnJlZSgmc3BlYy0+a2N0bHMpOwogfQogCitzdGF0aWMgdm9pZCBhZDE5OHhfcG93ZXJfZWFwZF93cml0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IGZyb250LAorCQkJCWhkYV9uaWRfdCBocCkKK3sKKwlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBmcm9udCwgMCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsCisJCQkgICAgIXNwZWMtPmludl9lYXBkID8gMHgwMCA6IDB4MDIpOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGhwLCAwLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwKKwkJCSAgICAhc3BlYy0+aW52X2VhcGQgPyAweDAwIDogMHgwMik7Cit9CisKK3N0YXRpYyB2b2lkIGFkMTk4eF9wb3dlcl9lYXBkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCS8qIFdlIGN1cnJlbnRseSBvbmx5IGhhbmRsZSBmcm9udCwgSFAgKi8KKwlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKKwljYXNlIDB4MTFkNDE4ODI6CisJY2FzZSAweDExZDQ4ODJhOgorCWNhc2UgMHgxMWQ0MTg4NDoKKwljYXNlIDB4MTFkNDE5ODQ6CisJY2FzZSAweDExZDQxODgzOgorCWNhc2UgMHgxMWQ0MTg0YToKKwljYXNlIDB4MTFkNDE5NGE6CisJY2FzZSAweDExZDQxOTRiOgorCQlhZDE5OHhfcG93ZXJfZWFwZF93cml0ZShjb2RlYywgMHgxMiwgMHgxMSk7CisJCWJyZWFrOworCWNhc2UgMHgxMWQ0MTk4MToKKwljYXNlIDB4MTFkNDE5ODM6CisJCWFkMTk4eF9wb3dlcl9lYXBkX3dyaXRlKGNvZGVjLCAweDA1LCAweDA2KTsKKwkJYnJlYWs7CisJY2FzZSAweDExZDQxOTg2OgorCQlhZDE5OHhfcG93ZXJfZWFwZF93cml0ZShjb2RlYywgMHgxYiwgMHgxYSk7CisJCWJyZWFrOworCWNhc2UgMHgxMWQ0MTk4ODoKKwljYXNlIDB4MTFkNDE5OGI6CisJY2FzZSAweDExZDQ5ODlhOgorCWNhc2UgMHgxMWQ0OTg5YjoKKwkJYWQxOTh4X3Bvd2VyX2VhcGRfd3JpdGUoY29kZWMsIDB4MjksIDB4MjIpOworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGFkMTk4eF9mcmVlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtNDQxLDExICs1MDYsMjkgQEAKIAlpZiAoIXNwZWMpCiAJCXJldHVybjsKIAorCWFkMTk4eF9zaHV0dXAoY29kZWMpOwogCWFkMTk4eF9mcmVlX2tjdGxzKGNvZGVjKTsKIAlrZnJlZShzcGVjKTsKIAlzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShjb2RlYyk7CiB9CiAKKyNpZmRlZiBTTkRfSERBX05FRURTX1JFU1VNRQorc3RhdGljIGludCBhZDE5OHhfc3VzcGVuZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWFkMTk4eF9zaHV0dXAoY29kZWMpOworCWFkMTk4eF9wb3dlcl9lYXBkKGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZDE5OHhfcmVzdW1lKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWFkMTk4eF9pbml0KGNvZGVjKTsKKwlzbmRfaGRhX2NvZGVjX3Jlc3VtZV9hbXAoY29kZWMpOworCXNuZF9oZGFfY29kZWNfcmVzdW1lX2NhY2hlKGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGhkYV9jb2RlY19vcHMgYWQxOTh4X3BhdGNoX29wcyA9IHsKIAkuYnVpbGRfY29udHJvbHMgPSBhZDE5OHhfYnVpbGRfY29udHJvbHMsCiAJLmJ1aWxkX3BjbXMgPSBhZDE5OHhfYnVpbGRfcGNtcywKQEAgLTQ1NCw2ICs1MzcsMTEgQEAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJLmNoZWNrX3Bvd2VyX3N0YXR1cyA9IGFkMTk4eF9jaGVja19wb3dlcl9zdGF0dXMsCiAjZW5kaWYKKyNpZmRlZiBTTkRfSERBX05FRURTX1JFU1VNRQorCS5zdXNwZW5kID0gYWQxOTh4X3N1c3BlbmQsCisJLnJlc3VtZSA9IGFkMTk4eF9yZXN1bWUsCisjZW5kaWYKKwkucmVib290X25vdGlmeSA9IGFkMTk4eF9zaHV0dXAsCiB9OwogCiAKQEAgLTcwMSw2ICs3ODksNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIkV4dGVybmFsIEFtcGxpZmllciIsCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgMHgxYiwKIAkJLmluZm8gPSBhZDE5OHhfZWFwZF9pbmZvLAogCQkuZ2V0ID0gYWQxOTh4X2VhcGRfZ2V0LAogCQkucHV0ID0gYWQxOTh4X2VhcGRfcHV0LApAQCAtODA4LDYgKzg5Nyw3IEBACiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLAogCQkuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9pbmZvLAogCQkuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2dldCwKIAkJLnB1dCA9IGFkMTk4NmFfaHBfbWFzdGVyX3N3X3B1dCwKQEAgLTEwMDgsNyArMTA5OCw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFjYiwgIkFTVVMgTTJOIiwgQUQxOTg2QV8zU1RBQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyMzQsICJBU1VTIE0yTiIsIEFEMTk4NkFfM1NUQUNLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTBkZSwgMHhjYjg0LCAiQVNVUyBBOE4tVk0iLCBBRDE5ODZBXzNTVEFDSyksCi0JU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmY0MCwgIlRvc2hpYmEiLCBBRDE5ODZBX0xBUFRPUF9FQVBEKSwKKwlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjQwLCAiVG9zaGliYSBTYXRlbGxpdGUgTDQwLTEwUSIsIEFEMTk4NkFfM1NUQUNLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhiMDNjLCAiU2Ftc3VuZyBSNTUiLCBBRDE5ODZBXzNTVEFDSyksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAxZSwgIkZTQyBWMjA2MCIsIEFEMTk4NkFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDI0LCAiU2Ftc3VuZyBQNTAiLCBBRDE5ODZBX1NBTVNVTkdfUDUwKSwKQEAgLTE2MTIsNiArMTcwMiw3IEBACiAJSERBX0JJTkRfVk9MKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgJmFkMTk4MV9ocF9iaW5kX21hc3Rlcl92b2wpLAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgMHgwNSwKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCiAJCS5pbmZvID0gYWQxOTh4X2VhcGRfaW5mbywKIAkJLmdldCA9IGFkMTk4eF9lYXBkX2dldCwKQEAgLTIxMzYsNiArMjIyNyw3IEBACiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiRXh0ZXJuYWwgQW1wbGlmaWVyIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAweDEyLAogCQkuaW5mbyA9IGFkMTk4eF9lYXBkX2luZm8sCiAJCS5nZXQgPSBhZDE5OHhfZWFwZF9nZXQsCiAJCS5wdXQgPSBhZDE5OHhfZWFwZF9wdXQsCkBAIC0yMjU3LDYgKzIzNDksNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIklFQzk1OCBQbGF5YmFjayBTb3VyY2UiLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IDB4MWIsCiAJCS5pbmZvID0gYWQxOTg4X3NwZGlmX3BsYXliYWNrX3NvdXJjZV9pbmZvLAogCQkuZ2V0ID0gYWQxOTg4X3NwZGlmX3BsYXliYWNrX3NvdXJjZV9nZXQsCiAJCS5wdXQgPSBhZDE5ODhfc3BkaWZfcGxheWJhY2tfc291cmNlX3B1dCwKQEAgLTIzNzIsNiArMjQ2NSwxMiBAQAogCXsgfQogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODhfc3BkaWZfaW5faW5pdF92ZXJic1tdID0geworCS8qIHVubXV0ZSBTUERJRiBpbnB1dCBwaW4gKi8KKwl7MHgxYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJeyB9Cit9OworCiAvKiBBRDE5ODkgaGFzIG5vIEFEQyAtPiBTUERJRiByb3V0ZSAqLwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODlfc3BkaWZfaW5pdF92ZXJic1tdID0gewogCS8qIFNQRElGLTEgb3V0IHBpbiAqLwpAQCAtMjU4OSw3ICsyNjg4LDcgQEAKIAlpZiAoISBrbmV3LT5uYW1lKQogCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoZ2V0X2FtcF9uaWRfKHZhbCkpCi0JCWtuZXctPnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCBnZXRfYW1wX25pZF8odmFsKTsKKwkJa25ldy0+c3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRzsKIAlrbmV3LT5wcml2YXRlX3ZhbHVlID0gdmFsOwogCXJldHVybiAwOwogfQpAQCAtMzEwNyw4ICszMjA2LDExIEBACiAJCQkJYWQxOTg4X3NwZGlmX2luaXRfdmVyYnM7CiAJCX0KIAl9Ci0JaWYgKHNwZWMtPmRpZ19pbl9uaWQgJiYgY29kZWMtPnZlbmRvcl9pZCA8IDB4MTFkNDk4OWEpCisJaWYgKHNwZWMtPmRpZ19pbl9uaWQgJiYgY29kZWMtPnZlbmRvcl9pZCA8IDB4MTFkNDk4OWEpIHsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBhZDE5ODhfc3BkaWZfaW5fbWl4ZXJzOworCQlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pbml0X3ZlcmJzKytdID0KKwkJCWFkMTk4OF9zcGRpZl9pbl9pbml0X3ZlcmJzOworCX0KIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBhZDE5OHhfcGF0Y2hfb3BzOwogCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7CkBAIC0zNzQ3LDYgKzM4NDksNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhZDE4ODRhX21vYmlsZV9tYXN0ZXJfc3dfcHV0LApAQCAtMzc3NSw2ICszODc4LDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gYWQxODg0YV9tb2JpbGVfbWFzdGVyX3N3X3B1dCwKQEAgLTQxMTYsNiArNDIyMCw3IEBACiAvKglIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksKi8KIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMKaW5kZXggZmUwNDIzYy4uN2RlNzgyYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCkBAIC01MDEsNyArNTAxLDggQEAKIAlrbmV3LnByaXZhdGVfdmFsdWUgPSBwdmFsOwogCXNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIlcyAlcyBTd2l0Y2giLCBuYW1lLCBkaXJfc2Z4W2Rpcl0pOwogCSprY3RscCA9IHNuZF9jdGxfbmV3MSgma25ldywgY29kZWMpOwotCXJldHVybiBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIGdldF9hbXBfbmlkXyhwdmFsKSwgKmtjdGxwKTsKKwkoKmtjdGxwKS0+aWQuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRzsKKwlyZXR1cm4gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCAwLCAqa2N0bHApOwogfQogCiBzdGF0aWMgaW50IGFkZF92b2x1bWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKm5hbWUsCkBAIC01MTQsNyArNTE1LDggQEAKIAlrbmV3LnByaXZhdGVfdmFsdWUgPSBwdmFsOwogCXNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIlcyAlcyBWb2x1bWUiLCBuYW1lLCBkaXJfc2Z4W2Rpcl0pOwogCSprY3RscCA9IHNuZF9jdGxfbmV3MSgma25ldywgY29kZWMpOwotCXJldHVybiBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIGdldF9hbXBfbmlkXyhwdmFsKSwgKmtjdGxwKTsKKwkoKmtjdGxwKS0+aWQuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRzsKKwlyZXR1cm4gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCAwLCAqa2N0bHApOwogfQogCiBzdGF0aWMgdm9pZCBmaXhfdm9sdW1lX2NhcHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBkYWMpCkBAIC03NTEsNiArNzUzLDcgQEAKIAlzcGVjLT5jYXB0dXJlX2JpbmRbMV0gPSBtYWtlX2JpbmRfY2FwdHVyZShjb2RlYywgJnNuZF9oZGFfYmluZF92b2wpOwogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwkJaW50IG47CiAJCWlmICghc3BlYy0+Y2FwdHVyZV9iaW5kW2ldKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWtjdGwgPSBzbmRfY3RsX25ldzEoJmNzX2NhcHR1cmVfY3Rsc1tpXSwgY29kZWMpOwpAQCAtNzYwLDYgKzc2MywxMyBAQAogCQllcnIgPSBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIDAsIGtjdGwpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CisJCWZvciAobiA9IDA7IG4gPCBBVVRPX1BJTl9MQVNUOyBuKyspIHsKKwkJCWlmICghc3BlYy0+YWRjX25pZFtuXSkKKwkJCQljb250aW51ZTsKKwkJCWVyciA9IHNuZF9oZGFfYWRkX25pZChjb2RlYywga2N0bCwgMCwgc3BlYy0+YWRjX25pZFtpXSk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CiAJfQogCQogCWlmIChzcGVjLT5udW1faW5wdXRzID4gMSAmJiAhc3BlYy0+bWljX2RldGVjdCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMKaW5kZXggYTQ1YzExNi4uZmY2MDkwOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jCkBAIC0zMTUsNyArMzE1LDggQEAKIHN0YXRpYyBpbnQgY21pOTg4MF9idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgY21pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgZXJyOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CisJaW50IGksIGVycjsKIAogCWVyciA9IHNuZF9oZGFfYWRkX25ld19jdGxzKGNvZGVjLCBjbWk5ODgwX2Jhc2ljX21peGVyKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTM0MCw2ICszNDEsMTQgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KKworCS8qIGFzc2lnbiBDYXB0dXJlIFNvdXJjZSBlbnVtcyB0byBOSUQgKi8KKwlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIkNhcHR1cmUgU291cmNlIik7CisJZm9yIChpID0gMDsga2N0bCAmJiBpIDwga2N0bC0+Y291bnQ7IGkrKykgeworCQllcnIgPSBzbmRfaGRhX2FkZF9uaWQoY29kZWMsIGtjdGwsIGksIHNwZWMtPmFkY19uaWRzW2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCmluZGV4IGM1NzhjMjguLjE5NGEyOGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKQEAgLTQyLDEwICs0MiwxMiBAQAogCiAvKiBDb25leGFudCA1MDUxIHNwZWNpZmljICovCiAKLSNkZWZpbmUgQ1hUNTA1MV9TUERJRl9PVVQJMHgxQworI2RlZmluZSBDWFQ1MDUxX1NQRElGX09VVAkweDEyCiAjZGVmaW5lIENYVDUwNTFfUE9SVEJfRVZFTlQJMHgzOAogI2RlZmluZSBDWFQ1MDUxX1BPUlRDX0VWRU5UCTB4MzkKIAorI2RlZmluZSBBVVRPX01JQ19QT1JUQgkJKDEgPDwgMSkKKyNkZWZpbmUgQVVUT19NSUNfUE9SVEMJCSgxIDw8IDIpCiAKIHN0cnVjdCBjb25leGFudF9qYWNrIHsKIApAQCAtNzQsNyArNzYsNyBAQAogCQkJCQkgKi8KIAl1bnNpZ25lZCBpbnQgY3VyX2VhcGQ7CiAJdW5zaWduZWQgaW50IGhwX3ByZXNlbnQ7Ci0JdW5zaWduZWQgaW50IG5vX2F1dG9fbWljOworCXVuc2lnbmVkIGludCBhdXRvX21pYzsKIAl1bnNpZ25lZCBpbnQgbmVlZF9kYWNfZml4OwogCiAJLyogY2FwdHVyZSAqLwpAQCAtMTExLDggKzExMywyMyBAQAogCiAJdW5zaWduZWQgaW50IGRlbGxfYXV0b211dGU7CiAJdW5zaWduZWQgaW50IHBvcnRfZF9tb2RlOwotCXVuc2lnbmVkIGNoYXIgZXh0X21pY19iaWFzOwotCXVuc2lnbmVkIGludCBkZWxsX3Zvc3RybzsKKwl1bnNpZ25lZCBpbnQgZGVsbF92b3N0cm86MTsKKwl1bnNpZ25lZCBpbnQgaWRlYXBhZDoxOworCisJdW5zaWduZWQgaW50IGV4dF9taWNfcHJlc2VudDsKKwl1bnNpZ25lZCBpbnQgcmVjb3JkaW5nOworCXZvaWQgKCpjYXB0dXJlX3ByZXBhcmUpKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKKwl2b2lkICgqY2FwdHVyZV9jbGVhbnVwKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CisKKwkvKiBPTFBDIFhPLTEuNSBzdXBwb3J0cyBEQyBpbnB1dCBtb2RlIChlLmcuIGZvciB1c2Ugd2l0aCBhbmFsb2cgc2Vuc29ycykKKwkgKiB0aHJvdWdoIHRoZSBtaWNyb3Bob25lIGphY2suCisJICogV2hlbiB0aGUgdXNlciBlbmFibGVzIHRoaXMgdGhyb3VnaCBhIG1peGVyIHN3aXRjaCwgYm90aCBpbnRlcm5hbCBhbmQKKwkgKiBleHRlcm5hbCBtaWNyb3Bob25lcyBhcmUgZGlzYWJsZWQuIEdhaW4gaXMgZml4ZWQgYXQgMGRCLiBJbiB0aGlzIG1vZGUsCisJICogd2UgYWxzbyBhbGxvdyB0aGUgYmlhcyB0byBiZSBjb25maWd1cmVkIHRocm91Z2ggYSBzZXBhcmF0ZSBtaXhlcgorCSAqIGNvbnRyb2wuICovCisJdW5zaWduZWQgaW50IGRjX2VuYWJsZTsKKwl1bnNpZ25lZCBpbnQgZGNfaW5wdXRfYmlhczsgLyogb2Zmc2V0IGludG8gY3h0NTA2Nl9vbHBjX2RjX2JpYXMgKi8KKwl1bnNpZ25lZCBpbnQgbWljX2Jvb3N0OyAvKiBvZmZzZXQgaW50byBjeHQ1MDY2X2FuYWxvZ19taWNfYm9vc3QgKi8KIH07CiAKIHN0YXRpYyBpbnQgY29uZXhhbnRfcGxheWJhY2tfcGNtX29wZW4oc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKQEAgLTE4NSw2ICsyMDIsOCBAQAogCQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaWYgKHNwZWMtPmNhcHR1cmVfcHJlcGFyZSkKKwkJc3BlYy0+Y2FwdHVyZV9wcmVwYXJlKGNvZGVjKTsKIAlzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShjb2RlYywgc3BlYy0+YWRjX25pZHNbc3Vic3RyZWFtLT5udW1iZXJdLAogCQkJCSAgIHN0cmVhbV90YWcsIDAsIGZvcm1hdCk7CiAJcmV0dXJuIDA7CkBAIC0xOTYsNiArMjE1LDggQEAKIHsKIAlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXNuZF9oZGFfY29kZWNfY2xlYW51cF9zdHJlYW0oY29kZWMsIHNwZWMtPmFkY19uaWRzW3N1YnN0cmVhbS0+bnVtYmVyXSk7CisJaWYgKHNwZWMtPmNhcHR1cmVfY2xlYW51cCkKKwkJc3BlYy0+Y2FwdHVyZV9jbGVhbnVwKGNvZGVjKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU4NSw2ICsxNjA2LDExIEBACiB7CiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAl1bnNpZ25lZCBpbnQgcGluY3RsOworCS8qIGhlYWRwaG9uZSBwaW4gKi8KKwlwaW5jdGwgPSAoc3BlYy0+aHBfcHJlc2VudCAmJiBzcGVjLT5jdXJfZWFwZCkgPyBQSU5fSFAgOiAwOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTYsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKKwkJCSAgICBwaW5jdGwpOworCS8qIHNwZWFrZXIgcGluICovCiAJcGluY3RsID0gKCFzcGVjLT5ocF9wcmVzZW50ICYmIHNwZWMtPmN1cl9lYXBkKSA/IFBJTl9PVVQgOiAwOwogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWEsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKIAkJCSAgICBwaW5jdGwpOwpAQCAtMTYwOCw3ICsxNjM0LDcgQEAKIAlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXVuc2lnbmVkIGludCBwcmVzZW50OwogCi0JaWYgKHNwZWMtPm5vX2F1dG9fbWljKQorCWlmICghKHNwZWMtPmF1dG9fbWljICYgQVVUT19NSUNfUE9SVEIpKQogCQlyZXR1cm47CiAJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MTcpOwogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTQsIDAsCkBAIC0xNjIzLDcgKzE2NDksNyBAQAogCXVuc2lnbmVkIGludCBwcmVzZW50OwogCWhkYV9uaWRfdCBuZXdfYWRjOwogCi0JaWYgKHNwZWMtPm5vX2F1dG9fbWljKQorCWlmICghKHNwZWMtPmF1dG9fbWljICYgQVVUT19NSUNfUE9SVEMpKQogCQlyZXR1cm47CiAJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MTgpOwogCWlmIChwcmVzZW50KQpAQCAtMTY2OSwxMyArMTY5NSw3IEBACiAJY29uZXhhbnRfcmVwb3J0X2phY2soY29kZWMsIG5pZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX21peGVyc1tdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBWb2x1bWUiLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJFeHRlcm5hbCBNaWMgVm9sdW1lIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiRXh0ZXJuYWwgTWljIFN3aXRjaCIsIDB4MTQsIDB4MDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRG9ja2luZyBNaWMgVm9sdW1lIiwgMHgxNSwgMHgwMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiRG9ja2luZyBNaWMgU3dpdGNoIiwgMHgxNSwgMHgwMCwgSERBX0lOUFVUKSwKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX3BsYXliYWNrX21peGVyc1tdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMTY4NSw3ICsxNzA1LDE2IEBACiAJCS5wdXQgPSBjeHQ1MDUxX2hwX21hc3Rlcl9zd19wdXQsCiAJCS5wcml2YXRlX3ZhbHVlID0gMHgxYSwKIAl9LAorCXt9Cit9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA1MV9jYXB0dXJlX21peGVyc1tdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBWb2x1bWUiLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJFeHRlcm5hbCBNaWMgVm9sdW1lIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiRXh0ZXJuYWwgTWljIFN3aXRjaCIsIDB4MTQsIDB4MDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRG9ja2luZyBNaWMgVm9sdW1lIiwgMHgxNSwgMHgwMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiRG9ja2luZyBNaWMgU3dpdGNoIiwgMHgxNSwgMHgwMCwgSERBX0lOUFVUKSwKIAl7fQogfTsKIApAQCAtMTY5NCwzMiArMTcyMywyNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJFeHRlcm5hbCBNaWMgVm9sdW1lIiwgMHgxNSwgMHgwMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRXh0ZXJuYWwgTWljIFN3aXRjaCIsIDB4MTUsIDB4MDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAotCQkuaW5mbyA9IGN4dF9lYXBkX2luZm8sCi0JCS5nZXQgPSBjeHRfZWFwZF9nZXQsCi0JCS5wdXQgPSBjeHQ1MDUxX2hwX21hc3Rlcl9zd19wdXQsCi0JCS5wcml2YXRlX3ZhbHVlID0gMHgxYSwKLQl9LAotCiAJe30KIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX2hwX2R2NjczNl9taXhlcnNbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgVm9sdW1lIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTWljIFN3aXRjaCIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAotCQkuaW5mbyA9IGN4dF9lYXBkX2luZm8sCi0JCS5nZXQgPSBjeHRfZWFwZF9nZXQsCi0JCS5wdXQgPSBjeHQ1MDUxX2hwX21hc3Rlcl9zd19wdXQsCi0JCS5wcml2YXRlX3ZhbHVlID0gMHgxYSwKLQl9LAorCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCXt9Cit9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA1MV9mNzAwX21peGVyc1tdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA1MV90b3NoaWJhX21peGVyc1tdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBWb2x1bWUiLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJFeHRlcm5hbCBNaWMgVm9sdW1lIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiRXh0ZXJuYWwgTWljIFN3aXRjaCIsIDB4MTQsIDB4MDEsIEhEQV9JTlBVVCksCiAJe30KIH07CiAKQEAgLTE3NDgsOCArMTc3MSw2IEBACiAJLyogRUFQRCAqLwogCXsweDFhLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgyfSwgLyogZGVmYXVsdCBvbiAqLyAKIAl7MHgxNiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCi0JezB4MTcsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQl9FVkVOVH0sCi0JezB4MTgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQ19FVkVOVH0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTc3NSw3ICsxNzk2LDYgQEAKIAkvKiBFQVBEICovCiAJezB4MWEsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDJ9LCAvKiBkZWZhdWx0IG9uICovCiAJezB4MTYsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q09ORVhBTlRfSFBfRVZFTlR9LAotCXsweDE3LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENYVDUwNTFfUE9SVEJfRVZFTlR9LAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE4MDcsMTcgKzE4MjcsNjAgQEAKIAkvKiBFQVBEICovCiAJezB4MWEsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDJ9LCAvKiBkZWZhdWx0IG9uICovCiAJezB4MTYsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q09ORVhBTlRfSFBfRVZFTlR9LAotCXsweDE3LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENYVDUwNTFfUE9SVEJfRVZFTlR9LAotCXsweDE4LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENYVDUwNTFfUE9SVENfRVZFTlR9LAogCXsweDE5LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENPTkVYQU5UX0hQX0VWRU5UfSwKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNTFfZjcwMF9pbml0X3ZlcmJzW10gPSB7CisJLyogTGluZSBpbiwgTWljICovCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDB9LAorCXsweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MH0sCisJLyogU1BLICAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogSFAsIEFtcCAgKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogREFDMSAqLworCXsweDEwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogUmVjb3JkIHNlbGVjdG9yOiBJbnQgbWljICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSkgfCAweDQ0fSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCisJLyogU1BESUYgcm91dGU6IFBDTSAqLworCXsweDFjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKKwkvKiBFQVBEICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDJ9LCAvKiBkZWZhdWx0IG9uICovCisJezB4MTYsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q09ORVhBTlRfSFBfRVZFTlR9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyB2b2lkIGN4dDUwNTFfaW5pdF9taWNfcG9ydChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJCQkgdW5zaWduZWQgaW50IGV2ZW50KQoreworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCSAgICBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCisJCQkgICAgQUNfVVNSU1BfRU4gfCBldmVudCk7CisjaWZkZWYgQ09ORklHX1NORF9IREFfSU5QVVRfSkFDSworCWNvbmV4YW50X2FkZF9qYWNrKGNvZGVjLCBuaWQsIFNORF9KQUNLX01JQ1JPUEhPTkUpOworCWNvbmV4YW50X3JlcG9ydF9qYWNrKGNvZGVjLCBuaWQpOworI2VuZGlmCit9CisKIC8qIGluaXRpYWxpemUgamFjay1zZW5zaW5nLCB0b28gKi8KIHN0YXRpYyBpbnQgY3h0NTA1MV9pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogeworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKIAljb25leGFudF9pbml0KGNvZGVjKTsKIAljb25leGFudF9pbml0X2phY2tzKGNvZGVjKTsKKworCWlmIChzcGVjLT5hdXRvX21pYyAmIEFVVE9fTUlDX1BPUlRCKQorCQljeHQ1MDUxX2luaXRfbWljX3BvcnQoY29kZWMsIDB4MTcsIENYVDUwNTFfUE9SVEJfRVZFTlQpOworCWlmIChzcGVjLT5hdXRvX21pYyAmIEFVVE9fTUlDX1BPUlRDKQorCQljeHQ1MDUxX2luaXRfbWljX3BvcnQoY29kZWMsIDB4MTgsIENYVDUwNTFfUE9SVENfRVZFTlQpOworCiAJaWYgKGNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQpIHsKIAkJY3h0NTA1MV9ocF9hdXRvbXV0ZShjb2RlYyk7CiAJCWN4dDUwNTFfcG9ydGJfYXV0b21pYyhjb2RlYyk7CkBAIC0xODMyLDYgKzE4OTUsOCBAQAogCUNYVDUwNTFfSFAsCS8qIG5vIGRvY2tpbmcgKi8KIAlDWFQ1MDUxX0hQX0RWNjczNiwJLyogSFAgd2l0aG91dCBtaWMgc3dpdGNoICovCiAJQ1hUNTA1MV9MRU5PVk9fWDIwMCwJLyogTGVub3ZvIFgyMDAgbGFwdG9wICovCisJQ1hUNTA1MV9GNzAwLCAgICAgICAvKiBIUCBDb21wYXEgUHJlc2FyaW8gRjcwMCAqLworCUNYVDUwNTFfVE9TSElCQSwJLyogVG9zaGliYSBNMzAwICYgY28gKi8KIAlDWFQ1MDUxX01PREVMUwogfTsKIApAQCAtMTg0MCwxMSArMTkwNSwxNSBAQAogCVtDWFQ1MDUxX0hQXQkJPSAiaHAiLAogCVtDWFQ1MDUxX0hQX0RWNjczNl0JPSAiaHAtZHY2NzM2IiwKIAlbQ1hUNTA1MV9MRU5PVk9fWDIwMF0JPSAibGVub3ZvLXgyMDAiLAorCVtDWFQ1MDUxX0Y3MDBdICAgICAgICAgID0gImhwLTcwMCIsCisJW0NYVDUwNTFfVE9TSElCQV0JPSAidG9zaGliYSIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA1MV9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBjZiwgIkhQIERWNjczNiIsIENYVDUwNTFfSFBfRFY2NzM2KSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzNjBiLCAiQ29tcGFxIFByZXNhcmlvIENRNjAiLCBDWFQ1MDUxX0hQKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGVhLCAiQ29tcGFxIFByZXNhcmlvIEY3MDAiLCBDWFQ1MDUxX0Y3MDApLAorCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmNTAsICJUb3NoaWJhIE0zMHgiLCBDWFQ1MDUxX1RPU0hJQkEpLAogCVNORF9QQ0lfUVVJUksoMHgxNGYxLCAweDAxMDEsICJDb25leGFudCBSZWZlcmVuY2UgYm9hcmQiLAogCQkgICAgICBDWFQ1MDUxX0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDE0ZjEsIDB4NTA1MSwgIkhQIFNwYXJ0YW4gMS4xIiwgQ1hUNTA1MV9IUCksCkBAIC0xODcyLDggKzE5NDEsOSBAQAogCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQ1hUNTA1MV9TUERJRl9PVVQ7CiAJc3BlYy0+bnVtX2FkY19uaWRzID0gMTsgLyogbm90IDI7IHZpYSBhdXRvLW1pYyBzd2l0Y2ggKi8KIAlzcGVjLT5hZGNfbmlkcyA9IGN4dDUwNTFfYWRjX25pZHM7Ci0Jc3BlYy0+bnVtX21peGVycyA9IDE7Ci0Jc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA1MV9taXhlcnM7CisJc3BlYy0+bnVtX21peGVycyA9IDI7CisJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA1MV9jYXB0dXJlX21peGVyczsKKwlzcGVjLT5taXhlcnNbMV0gPSBjeHQ1MDUxX3BsYXliYWNrX21peGVyczsKIAlzcGVjLT5udW1faW5pdF92ZXJicyA9IDE7CiAJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNTFfaW5pdF92ZXJiczsKIAlzcGVjLT5zcGRpZl9yb3V0ZSA9IDA7CkBAIC0xODg3LDYgKzE5NTcsNyBAQAogCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBDWFQ1MDUxX01PREVMUywKIAkJCQkJCSAgY3h0NTA1MV9tb2RlbHMsCiAJCQkJCQkgIGN4dDUwNTFfY2ZnX3RibCk7CisJc3BlYy0+YXV0b19taWMgPSBBVVRPX01JQ19QT1JUQiB8IEFVVE9fTUlDX1BPUlRDOwogCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7CiAJY2FzZSBDWFQ1MDUxX0hQOgogCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX2hwX21peGVyczsKQEAgLTE4OTQsMTEgKzE5NjUsMjAgQEAKIAljYXNlIENYVDUwNTFfSFBfRFY2NzM2OgogCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA1MV9ocF9kdjY3MzZfaW5pdF92ZXJiczsKIAkJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA1MV9ocF9kdjY3MzZfbWl4ZXJzOwotCQlzcGVjLT5ub19hdXRvX21pYyA9IDE7CisJCXNwZWMtPmF1dG9fbWljID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBDWFQ1MDUxX0xFTk9WT19YMjAwOgogCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA1MV9sZW5vdm9feDIwMF9pbml0X3ZlcmJzOwogCQlicmVhazsKKwljYXNlIENYVDUwNTFfRjcwMDoKKwkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNTFfZjcwMF9pbml0X3ZlcmJzOworCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX2Y3MDBfbWl4ZXJzOworCQlzcGVjLT5hdXRvX21pYyA9IDA7CisJCWJyZWFrOworCWNhc2UgQ1hUNTA1MV9UT1NISUJBOgorCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX3Rvc2hpYmFfbWl4ZXJzOworCQlzcGVjLT5hdXRvX21pYyA9IEFVVE9fTUlDX1BPUlRCOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE5NjYsNTMgKzIwNDYsOTcgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCi1zdGF0aWMgdm9pZCBjeHQ1MDY2X2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA2Nl9vbHBjX2RjX2JpYXMgPSB7CisJLm51bV9pdGVtcyA9IDMsCisJLml0ZW1zID0geworCQl7ICJPZmYiLCBQSU5fSU4gfSwKKwkJeyAiNTAlIiwgUElOX1ZSRUY1MCB9LAorCQl7ICI4MCUiLCBQSU5fVlJFRjgwIH0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgY3h0NTA2Nl9zZXRfb2xwY19kY19iaWFzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc3RydWN0IGhkYV92ZXJiIGV4dF9taWNfcHJlc2VudFtdID0gewotCQkvKiBlbmFibGUgZXh0ZXJuYWwgbWljLCBwb3J0IEIgKi8KLQkJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgc3BlYy0+ZXh0X21pY19iaWFzfSwKKwkvKiBFdmVuIHRob3VnaCBwb3J0IEYgaXMgdGhlIERDIGlucHV0LCB0aGUgYmlhcyBpcyBjb250cm9sbGVkIG9uIHBvcnQgQi4KKwkgKiB3ZSBhbHNvIGxlYXZlIHRoYXQgcG9ydCBhcyBhbiBhY3RpdmUgaW5wdXQgKGJ1dCB1bnNlbGVjdGVkKSBpbiBEQyBtb2RlCisJICoganVzdCBpbiBjYXNlIHRoYXQgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgdGhlIGJpYXMgc2V0dGluZyB0YWtlIGVmZmVjdC4gKi8KKwlyZXR1cm4gc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxYSwgMCwKKwkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQljeHQ1MDY2X29scGNfZGNfYmlhcy5pdGVtc1tzcGVjLT5kY19pbnB1dF9iaWFzXS5pbmRleCk7Cit9CiAKLQkJLyogc3dpdGNoIHRvIGV4dGVybmFsIG1pYyBpbnB1dCAqLwotCQl7MHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LAorLyogT0xQQyBkZWZlcnMgbWljIHdpZGdldCBjb250cm9sIHVudGlsIHdoZW4gY2FwdHVyZSBpcyBzdGFydGVkIGJlY2F1c2UgdGhlCisgKiBtaWNyb3Bob25lIExFRCBjb21lcyBvbiBhcyBzb29uIGFzIHRoZXNlIHNldHRpbmdzIGFyZSBwdXQgaW4gcGxhY2UuIGlmIHdlCisgKiBkaWQgdGhpcyBiZWZvcmUgcmVjb3JkaW5nLCBpdCB3b3VsZCBnaXZlIHRoZSBmYWxzZSBpbmRpY2F0aW9uIHRoYXQgcmVjb3JkaW5nCisgKiBpcyBoYXBwZW5pbmcgd2hlbiBpdCBpcyBub3QuICovCitzdGF0aWMgdm9pZCBjeHQ1MDY2X29scGNfc2VsZWN0X21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWlmICghc3BlYy0+cmVjb3JkaW5nKQorCQlyZXR1cm47CiAKLQkJLyogZGlzYWJsZSBpbnRlcm5hbCBtaWMsIHBvcnQgQyAqLwotCQl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKLQkJe30KLQl9OwotCXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgZXh0X21pY19hYnNlbnRbXSA9IHsKLQkJLyogZW5hYmxlIGludGVybmFsIG1pYywgcG9ydCBDICovCi0JCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCWlmIChzcGVjLT5kY19lbmFibGUpIHsKKwkJLyogaW4gREMgbW9kZSB3ZSBpZ25vcmUgcHJlc2VuY2UgZGV0ZWN0aW9uIGFuZCBqdXN0IHVzZSB0aGUgamFjaworCQkgKiB0aHJvdWdoIG91ciBzcGVjaWFsIERDIHBvcnQgKi8KKwkJY29uc3Qgc3RydWN0IGhkYV92ZXJiIGVuYWJsZV9kY19tb2RlW10gPSB7CisJCQkvKiBkaXNibGUgaW50ZXJuYWwgbWljLCBwb3J0IEMgKi8KKwkJCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAogCi0JCS8qIHN3aXRjaCB0byBpbnRlcm5hbCBtaWMgaW5wdXQgKi8KLQkJezB4MTcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAxfSwKKwkJCS8qIGVuYWJsZSBEQyBjYXB0dXJlLCBwb3J0IEYgKi8KKwkJCXsweDFlLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJCQl7fSwKKwkJfTsKIAotCQkvKiBkaXNhYmxlIGV4dGVybmFsIG1pYywgcG9ydCBCICovCi0JCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAotCQl7fQotCX07CisJCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUoY29kZWMsIGVuYWJsZV9kY19tb2RlKTsKKwkJLyogcG9ydCBCIGlucHV0IGRpc2FibGVkIChhbmQgYmlhcyBzZXQpIHRocm91Z2ggdGhlIGZvbGxvd2luZyBjYWxsICovCisJCWN4dDUwNjZfc2V0X29scGNfZGNfYmlhcyhjb2RlYyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBkaXNhYmxlIERDIChwb3J0IEYpICovCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxZSwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKKworCS8qIGV4dGVybmFsIG1pYywgcG9ydCBCICovCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxYSwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQlzcGVjLT5leHRfbWljX3ByZXNlbnQgPyBDWFQ1MDY2X09MUENfRVhUX01JQ19CSUFTIDogMCk7CisKKwkvKiBpbnRlcm5hbCBtaWMsIHBvcnQgQyAqLworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWIsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKKwkJc3BlYy0+ZXh0X21pY19wcmVzZW50ID8gMCA6IFBJTl9WUkVGODApOworfQorCisvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KK3N0YXRpYyB2b2lkIGN4dDUwNjZfb2xwY19hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJdW5zaWduZWQgaW50IHByZXNlbnQ7CiAKLQlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxYSk7Ci0JaWYgKHByZXNlbnQpIHsKKwlpZiAoc3BlYy0+ZGNfZW5hYmxlKSAvKiBkb24ndCBkbyBwcmVzZW5jZSBkZXRlY3Rpb24gaW4gREMgbW9kZSAqLworCQlyZXR1cm47CisKKwlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFhLCAwLAorCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisJaWYgKHByZXNlbnQpCiAJCXNuZF9wcmludGRkKCJDWFQ1MDY2OiBleHRlcm5hbCBtaWNyb3Bob25lIGRldGVjdGVkXG4iKTsKLQkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgZXh0X21pY19wcmVzZW50KTsKLQl9IGVsc2UgeworCWVsc2UKIAkJc25kX3ByaW50ZGQoIkNYVDUwNjY6IGV4dGVybmFsIG1pY3JvcGhvbmUgYWJzZW50XG4iKTsKLQkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgZXh0X21pY19hYnNlbnQpOwotCX0KKworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTcsIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAorCQlwcmVzZW50ID8gMCA6IDEpOworCXNwZWMtPmV4dF9taWNfcHJlc2VudCA9ICEhcHJlc2VudDsKKworCWN4dDUwNjZfb2xwY19zZWxlY3RfbWljKGNvZGVjKTsKIH0KIAogLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGRpZ2l0YWwgbWljIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCiBzdGF0aWMgdm9pZCBjeHQ1MDY2X3Zvc3Ryb19hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJdW5zaWduZWQgaW50IHByZXNlbnQ7CiAKIAlzdHJ1Y3QgaGRhX3ZlcmIgZXh0X21pY19wcmVzZW50W10gPSB7CiAJCS8qIGVuYWJsZSBleHRlcm5hbCBtaWMsIHBvcnQgQiAqLwotCQl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBzcGVjLT5leHRfbWljX2JpYXN9LAorCQl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKIAogCQkvKiBzd2l0Y2ggdG8gZXh0ZXJuYWwgbWljIGlucHV0ICovCiAJCXsweDE3LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMH0sCkBAIC0yMDQ0LDYgKzIxNjgsMzQgQEAKIAl9CiB9CiAKKy8qIHRvZ2dsZSBpbnB1dCBvZiBidWlsdC1pbiBkaWdpdGFsIG1pYyBhbmQgbWljIGphY2sgYXBwcm9wcmlhdGVseSAqLworc3RhdGljIHZvaWQgY3h0NTA2Nl9pZGVhcGFkX2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJdW5zaWduZWQgaW50IHByZXNlbnQ7CisKKwlzdHJ1Y3QgaGRhX3ZlcmIgZXh0X21pY19wcmVzZW50W10gPSB7CisJCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMH0sCisJCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCQl7MHgyMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwkJe30KKwl9OworCXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgZXh0X21pY19hYnNlbnRbXSA9IHsKKwkJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAyfSwKKwkJezB4MjMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwkJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJCXt9CisJfTsKKworCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDFiKTsKKwlpZiAocHJlc2VudCkgeworCQlzbmRfcHJpbnRkZCgiQ1hUNTA2NjogZXh0ZXJuYWwgbWljcm9waG9uZSBkZXRlY3RlZFxuIik7CisJCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUoY29kZWMsIGV4dF9taWNfcHJlc2VudCk7CisJfSBlbHNlIHsKKwkJc25kX3ByaW50ZGQoIkNYVDUwNjY6IGV4dGVybmFsIG1pY3JvcGhvbmUgYWJzZW50XG4iKTsKKwkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgZXh0X21pY19hYnNlbnQpOworCX0KK30KKwogLyogbXV0ZSBpbnRlcm5hbCBzcGVha2VyIGlmIEhQIGlzIHBsdWdnZWQgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNjZfaHBfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0yMDYzLDE1ICsyMjE1LDE4IEBACiB9CiAKIC8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBqYWNrIHNlbnNpbmcgKi8KLXN0YXRpYyB2b2lkIGN4dDUwNjZfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCitzdGF0aWMgdm9pZCBjeHQ1MDY2X29scGNfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCiB7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlzbmRfcHJpbnRkZCgiQ1hUNTA2NjogdW5zb2wgZXZlbnQgJXggKCV4KVxuIiwgcmVzLCByZXMgPj4gMjYpOwogCXN3aXRjaCAocmVzID4+IDI2KSB7CiAJY2FzZSBDT05FWEFOVF9IUF9FVkVOVDoKIAkJY3h0NTA2Nl9ocF9hdXRvbXV0ZShjb2RlYyk7CiAJCWJyZWFrOwogCWNhc2UgQ09ORVhBTlRfTUlDX0VWRU5UOgotCQljeHQ1MDY2X2F1dG9taWMoY29kZWMpOworCQkvKiBpZ25vcmUgbWljIGV2ZW50cyBpbiBEQyBtb2RlOyB3ZSdyZSBhbHdheXMgdXNpbmcgdGhlIGphY2sgKi8KKwkJaWYgKCFzcGVjLT5kY19lbmFibGUpCisJCQljeHQ1MDY2X29scGNfYXV0b21pYyhjb2RlYyk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTIwOTAsNiArMjI0NSwyMCBAQAogCX0KIH0KIAorLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIGphY2sgc2Vuc2luZyAqLworc3RhdGljIHZvaWQgY3h0NTA2Nl9pZGVhcGFkX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQoreworCXNuZF9wcmludGRkKCJDWFQ1MDY2X2lkZWFwYWQ6IHVuc29sIGV2ZW50ICV4ICgleClcbiIsIHJlcywgcmVzID4+IDI2KTsKKwlzd2l0Y2ggKHJlcyA+PiAyNikgeworCWNhc2UgQ09ORVhBTlRfSFBfRVZFTlQ6CisJCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwljYXNlIENPTkVYQU5UX01JQ19FVkVOVDoKKwkJY3h0NTA2Nl9pZGVhcGFkX2F1dG9taWMoY29kZWMpOworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDY2X2FuYWxvZ19taWNfYm9vc3QgPSB7CiAJLm51bV9pdGVtcyA9IDUsCiAJLml0ZW1zID0gewpAQCAtMjEwMSw2ICsyMjcwLDIzIEBACiAJfSwKIH07CiAKK3N0YXRpYyB2b2lkIGN4dDUwNjZfc2V0X21pY19ib29zdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MTcsIDAsCisJCUFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCisJCUFDX0FNUF9TRVRfUklHSFQgfCBBQ19BTVBfU0VUX0xFRlQgfCBBQ19BTVBfU0VUX09VVFBVVCB8CisJCQljeHQ1MDY2X2FuYWxvZ19taWNfYm9vc3QuaXRlbXNbc3BlYy0+bWljX2Jvb3N0XS5pbmRleCk7CisJaWYgKHNwZWMtPmlkZWFwYWQpIHsKKwkJLyogYWRqdXN0IHRoZSBpbnRlcm5hbCBtaWMgYXMgd2VsbC4uLml0IGlzIG5vdCB0aHJvdWdoIDB4MTcgKi8KKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgyMywgMCwKKwkJCUFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCisJCQlBQ19BTVBfU0VUX1JJR0hUIHwgQUNfQU1QX1NFVF9MRUZUIHwgQUNfQU1QX1NFVF9JTlBVVCB8CisJCQkJY3h0NTA2Nl9hbmFsb2dfbWljX2Jvb3N0LgorCQkJCQlpdGVtc1tzcGVjLT5taWNfYm9vc3RdLmluZGV4KTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKQEAgLTIxMTEsMTUgKzIyOTcsOCBAQAogCQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCWludCB2YWw7Ci0JaGRhX25pZF90IG5pZCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKLQlpbnQgaW5vdXQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweDEwMCkgPwotCQlBQ19BTVBfR0VUX0lOUFVUIDogQUNfQU1QX0dFVF9PVVRQVVQ7Ci0KLQl2YWwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJQUNfVkVSQl9HRVRfQU1QX0dBSU5fTVVURSwgaW5vdXQpOwotCi0JdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHZhbCAmIEFDX0FNUF9HQUlOOworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHNwZWMtPm1pY19ib29zdDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjEyNywyNiArMjMwNiwxMzIgQEAKIAkJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJmN4dDUwNjZfYW5hbG9nX21pY19ib29zdDsKIAl1bnNpZ25lZCBpbnQgaWR4OwotCWhkYV9uaWRfdCBuaWQgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7Ci0JaW50IGlub3V0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHgxMDApID8KLQkJQUNfQU1QX1NFVF9JTlBVVCA6IEFDX0FNUF9TRVRfT1VUUFVUOwotCi0JaWYgKCFpbXV4LT5udW1faXRlbXMpCi0JCXJldHVybiAwOwogCWlkeCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CiAJaWYgKGlkeCA+PSBpbXV4LT5udW1faXRlbXMpCiAJCWlkeCA9IGltdXgtPm51bV9pdGVtcyAtIDE7CiAKLQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCi0JCUFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCi0JCUFDX0FNUF9TRVRfUklHSFQgfCBBQ19BTVBfU0VUX0xFRlQgfCBpbm91dCB8Ci0JCQlpbXV4LT5pdGVtc1tpZHhdLmluZGV4KTsKKwlzcGVjLT5taWNfYm9vc3QgPSBpZHg7CisJaWYgKCFzcGVjLT5kY19lbmFibGUpCisJCWN4dDUwNjZfc2V0X21pY19ib29zdChjb2RlYyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGN4dDUwNjZfZW5hYmxlX2RjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiBlbmFibGVfZGNfbW9kZVtdID0geworCQkvKiBkaXNhYmxlIGdhaW4gKi8KKwkJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKworCQkvKiBzd2l0Y2ggdG8gREMgaW5wdXQgKi8KKwkJezB4MTcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAzfSwKKwkJe30KKwl9OworCisJLyogY29uZmlndXJlIGFzIGlucHV0IHNvdXJjZSAqLworCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUoY29kZWMsIGVuYWJsZV9kY19tb2RlKTsKKwljeHQ1MDY2X29scGNfc2VsZWN0X21pYyhjb2RlYyk7IC8qIGFsc28gc2V0cyBjb25maWd1cmVkIGJpYXMgKi8KK30KKworc3RhdGljIHZvaWQgY3h0NTA2Nl9kaXNhYmxlX2RjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCS8qIHJlY29uZmlndXJlIGlucHV0IHNvdXJjZSAqLworCWN4dDUwNjZfc2V0X21pY19ib29zdChjb2RlYyk7CisJLyogYXV0b21pYyBhbHNvIHNlbGVjdHMgdGhlIHJpZ2h0IG1pYyBpZiB3ZSdyZSByZWNvcmRpbmcgKi8KKwljeHQ1MDY2X29scGNfYXV0b21pYyhjb2RlYyk7Cit9CisKK3N0YXRpYyBpbnQgY3h0NTA2Nl9vbHBjX2RjX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHNwZWMtPmRjX2VuYWJsZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeHQ1MDY2X29scGNfZGNfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBkY19lbmFibGUgPSAhIXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCisJaWYgKGRjX2VuYWJsZSA9PSBzcGVjLT5kY19lbmFibGUpCisJCXJldHVybiAwOworCisJc3BlYy0+ZGNfZW5hYmxlID0gZGNfZW5hYmxlOworCWlmIChkY19lbmFibGUpCisJCWN4dDUwNjZfZW5hYmxlX2RjKGNvZGVjKTsKKwllbHNlCisJCWN4dDUwNjZfZGlzYWJsZV9kYyhjb2RlYyk7CiAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBjeHQ1MDY2X29scGNfZGNfYmlhc19lbnVtX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJcmV0dXJuIHNuZF9oZGFfaW5wdXRfbXV4X2luZm8oJmN4dDUwNjZfb2xwY19kY19iaWFzLCB1aW5mbyk7Cit9CisKK3N0YXRpYyBpbnQgY3h0NTA2Nl9vbHBjX2RjX2JpYXNfZW51bV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gc3BlYy0+ZGNfaW5wdXRfYmlhczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeHQ1MDY2X29scGNfZGNfYmlhc19lbnVtX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJmN4dDUwNjZfYW5hbG9nX21pY19ib29zdDsKKwl1bnNpZ25lZCBpbnQgaWR4OworCisJaWR4ID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKwlpZiAoaWR4ID49IGltdXgtPm51bV9pdGVtcykKKwkJaWR4ID0gaW11eC0+bnVtX2l0ZW1zIC0gMTsKKworCXNwZWMtPmRjX2lucHV0X2JpYXMgPSBpZHg7CisJaWYgKHNwZWMtPmRjX2VuYWJsZSkKKwkJY3h0NTA2Nl9zZXRfb2xwY19kY19iaWFzKGNvZGVjKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgY3h0NTA2Nl9vbHBjX2NhcHR1cmVfcHJlcGFyZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCS8qIG1hcmsgYXMgcmVjb3JkaW5nIGFuZCBjb25maWd1cmUgdGhlIG1pY3JvcGhvbmUgd2lkZ2V0IHNvIHRoYXQgdGhlCisJICogcmVjb3JkaW5nIExFRCBjb21lcyBvbi4gKi8KKwlzcGVjLT5yZWNvcmRpbmcgPSAxOworCWN4dDUwNjZfb2xwY19zZWxlY3RfbWljKGNvZGVjKTsKK30KKworc3RhdGljIHZvaWQgY3h0NTA2Nl9vbHBjX2NhcHR1cmVfY2xlYW51cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiBkaXNhYmxlX21pY3NbXSA9IHsKKwkJLyogZGlzYWJsZSBleHRlcm5hbCBtaWMsIHBvcnQgQiAqLworCQl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKworCQkvKiBkaXNibGUgaW50ZXJuYWwgbWljLCBwb3J0IEMgKi8KKwkJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisKKwkJLyogZGlzYWJsZSBEQyBjYXB0dXJlLCBwb3J0IEYgKi8KKwkJezB4MWUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJCXt9LAorCX07CisKKwlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBkaXNhYmxlX21pY3MpOworCXNwZWMtPnJlY29yZGluZyA9IDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDY2X2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSA0LAogCS5pdGVtcyA9IHsKQEAgLTIxODcsNiArMjQ3Miw3IEBACiAJCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwKIAkJCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCB8CiAJCQkJICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX0NBTExCQUNLLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9nZXQsCiAJCS5wdXQgPSBzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfcHV0LApAQCAtMjE5OCw2ICsyNDg0LDI0IEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDY2X21peGVyX29scGNfZGNbXSA9IHsKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJEQyBNb2RlIEVuYWJsZSBTd2l0Y2giLAorCQkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCisJCS5nZXQgPSBjeHQ1MDY2X29scGNfZGNfZ2V0LAorCQkucHV0ID0gY3h0NTA2Nl9vbHBjX2RjX3B1dCwKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkRDIElucHV0IEJpYXMgRW51bSIsCisJCS5pbmZvID0gY3h0NTA2Nl9vbHBjX2RjX2JpYXNfZW51bV9pbmZvLAorCQkuZ2V0ID0gY3h0NTA2Nl9vbHBjX2RjX2JpYXNfZW51bV9nZXQsCisJCS5wdXQgPSBjeHQ1MDY2X29scGNfZGNfYmlhc19lbnVtX3B1dCwKKwl9LAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA2Nl9taXhlcnNbXSA9IHsKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMjIxMCwxMSArMjUxNCwxMCBAQAogCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiRXh0IE1pYyBCb29zdCBDYXB0dXJlIEVudW0iLAorCQkubmFtZSA9ICJBbmFsb2cgTWljIEJvb3N0IENhcHR1cmUgRW51bSIsCiAJCS5pbmZvID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1faW5mbywKIAkJLmdldCA9IGN4dDUwNjZfbWljX2Jvb3N0X211eF9lbnVtX2dldCwKIAkJLnB1dCA9IGN4dDUwNjZfbWljX2Jvb3N0X211eF9lbnVtX3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSAweDE3LAogCX0sCiAKIAlIREFfQklORF9WT0woIkNhcHR1cmUgVm9sdW1lIiwgJmN4dDUwNjZfYmluZF9jYXB0dXJlX3ZvbF9vdGhlcnMpLApAQCAtMjI5NiwxMCArMjU5OSwxMCBAQAogCXsweDE5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIERBQzEgKi8KIAogCS8qIFBvcnQgQjogZXh0ZXJuYWwgbWljcm9waG9uZSAqLwotCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIENYVDUwNjZfT0xQQ19FWFRfTUlDX0JJQVN9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAogCiAJLyogUG9ydCBDOiBpbnRlcm5hbCBtaWNyb3Bob25lICovCi0JezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCiAKIAkvKiBQb3J0IEQ6IHVudXNlZCAqLwogCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LApAQCAtMjMwOCw3ICsyNjExLDcgQEAKIAl7MHgxZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKIAl7MHgxZCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4Mn0sIC8qIGRlZmF1bHQgb24gKi8KIAotCS8qIFBvcnQgRjogdW51c2VkICovCisJLyogUG9ydCBGOiBleHRlcm5hbCBEQyBpbnB1dCB0aHJvdWdoIG1pY3JvcGhvbmUgcG9ydCAqLwogCXsweDFlLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAogCiAJLyogUG9ydCBHOiBpbnRlcm5hbCBzcGVha2VycyAqLwpAQCAtMjQxMiw2ICsyNzE1LDU2IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDY2X2luaXRfdmVyYnNfaWRlYXBhZFtdID0geworCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LCAvKiBQb3J0IEIgKi8KKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwgLyogUG9ydCBDICovCisJezB4MWUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwgLyogUG9ydCBGICovCisJezB4MWQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwgLyogUG9ydCBFICovCisKKwkvKiBTcGVha2VycyAgKi8KKwl7MHgxZiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxZiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LCAvKiBEQUMxICovCisKKwkvKiBIUCwgQW1wICAqLworCXsweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwgLyogREFDMSAqLworCisJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxYywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LCAvKiBEQUMxICovCisKKwkvKiBEQUMxICovCisJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKworCS8qIE5vZGUgMTQgY29ubmVjdGlvbnM6IDB4MTcgMHgxOCAweDIzIDB4MjQgMHgyNyAqLworCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHg1MH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgyKSB8IDB4NTB9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDJ9LAkvKiBkZWZhdWx0IHRvIGludGVybmFsIG1pYyAqLworCisJLyogQXVkaW8gaW5wdXQgc2VsZWN0b3IgKi8KKwl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfCAweDJ9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMX0sCS8qIHJvdXRlIGV4dCBtaWMgKi8KKworCS8qIFNQRElGIHJvdXRlOiBQQ00gKi8KKwl7MHgyMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCisJezB4MjIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAorCisJezB4MjAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MjIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisKKwkvKiBpbnRlcm5hbCBtaWNyb3Bob25lICovCisJezB4MjMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwgLyogZW5hYmxlIGludCBtaWMgKi8KKworCS8qIEVBUEQgKi8KKwl7MHgxZCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4Mn0sIC8qIGRlZmF1bHQgb24gKi8KKworCXsweDE5LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQ09ORVhBTlRfSFBfRVZFTlR9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQ09ORVhBTlRfTUlDX0VWRU5UfSwKKwl7IH0gLyogZW5kICovCit9OworCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNjZfaW5pdF92ZXJic19wb3J0ZF9sb1tdID0gewogCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAogCXsgfSAvKiBlbmQgKi8KQEAgLTI0MjgsOCArMjc4MSwyNCBAQAogCQljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKIAkJaWYgKHNwZWMtPmRlbGxfdm9zdHJvKQogCQkJY3h0NTA2Nl92b3N0cm9fYXV0b21pYyhjb2RlYyk7Ci0JCWVsc2UKLQkJCWN4dDUwNjZfYXV0b21pYyhjb2RlYyk7CisJCWVsc2UgaWYgKHNwZWMtPmlkZWFwYWQpCisJCQljeHQ1MDY2X2lkZWFwYWRfYXV0b21pYyhjb2RlYyk7CisJfQorCWN4dDUwNjZfc2V0X21pY19ib29zdChjb2RlYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3h0NTA2Nl9vbHBjX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzbmRfcHJpbnRkZCgiQ1hUNTA2NjogaW5pdFxuIik7CisJY29uZXhhbnRfaW5pdChjb2RlYyk7CisJY3h0NTA2Nl9ocF9hdXRvbXV0ZShjb2RlYyk7CisJaWYgKCFzcGVjLT5kY19lbmFibGUpIHsKKwkJY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KGNvZGVjKTsKKwkJY3h0NTA2Nl9vbHBjX2F1dG9taWMoY29kZWMpOworCX0gZWxzZSB7CisJCWN4dDUwNjZfZW5hYmxlX2RjKGNvZGVjKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDM5LDYgKzI4MDgsNyBAQAogCUNYVDUwNjZfREVMTF9MQVBUT1AsCS8qIERlbGwgTGFwdG9wICovCiAJQ1hUNTA2Nl9PTFBDX1hPXzFfNSwJLyogT0xQQyBYTyAxLjUgKi8KIAlDWFQ1MDY2X0RFTExfVk9TVE8sCS8qIERlbGwgVm9zdHJvIDEwMTVpICovCisJQ1hUNTA2Nl9JREVBUEFELAkvKiBMZW5vdm8gSWRlYVBhZCBVMTUwICovCiAJQ1hUNTA2Nl9NT0RFTFMKIH07CiAKQEAgLTI0NDYsNyArMjgxNiw4IEBACiAJW0NYVDUwNjZfTEFQVE9QXQkJPSAibGFwdG9wIiwKIAlbQ1hUNTA2Nl9ERUxMX0xBUFRPUF0JPSAiZGVsbC1sYXB0b3AiLAogCVtDWFQ1MDY2X09MUENfWE9fMV81XQk9ICJvbHBjLXhvLTFfNSIsCi0JW0NYVDUwNjZfREVMTF9WT1NUT10gICAgPSAiZGVsbC12b3N0cm8iCisJW0NYVDUwNjZfREVMTF9WT1NUT10gICAgPSAiZGVsbC12b3N0cm8iLAorCVtDWFQ1MDY2X0lERUFQQURdCT0gImlkZWFwYWQiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGN4dDUwNjZfY2ZnX3RibFtdID0gewpAQCAtMjQ1Niw2ICsyODI3LDcgQEAKIAkJICAgICAgQ1hUNTA2Nl9ERUxMX0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MDgzMywgIk9MUEMgWE8tMS41IiwgQ1hUNTA2Nl9PTFBDX1hPXzFfNSksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDQwMiwgIkRlbGwgVm9zdHJvIiwgQ1hUNTA2Nl9ERUxMX1ZPU1RPKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzYTBkLCAiaWRlYXBhZCIsIENYVDUwNjZfSURFQVBBRCksCiAJe30KIH07CiAKQEAgLTI0NzAsNyArMjg0Miw3IEBACiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCiAJY29kZWMtPnBhdGNoX29wcyA9IGNvbmV4YW50X3BhdGNoX29wczsKLQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDY2X2luaXQ7CisJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY29uZXhhbnRfaW5pdDsKIAogCXNwZWMtPmRlbGxfYXV0b211dGUgPSAwOwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CkBAIC0yNDgzLDcgKzI4NTUsNiBAQAogCXNwZWMtPmlucHV0X211eCA9ICZjeHQ1MDY2X2NhcHR1cmVfc291cmNlOwogCiAJc3BlYy0+cG9ydF9kX21vZGUgPSBQSU5fSFA7Ci0Jc3BlYy0+ZXh0X21pY19iaWFzID0gUElOX1ZSRUY4MDsKIAogCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMTsKIAlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA2Nl9pbml0X3ZlcmJzOwpAQCAtMjUxMCwyMCArMjg4MSwyOCBAQAogCQlzcGVjLT5kZWxsX2F1dG9tdXRlID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBDWFQ1MDY2X09MUENfWE9fMV81OgotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl91bnNvbF9ldmVudDsKKwkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA2Nl9vbHBjX2luaXQ7CisJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X29scGNfdW5zb2xfZXZlbnQ7CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnNfb2xwYzsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3Rlcl9vbHBjOworCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfb2xwY19kYzsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyczsKIAkJc3BlYy0+cG9ydF9kX21vZGUgPSAwOwotCQlzcGVjLT5leHRfbWljX2JpYXMgPSBDWFQ1MDY2X09MUENfRVhUX01JQ19CSUFTOworCQlzcGVjLT5taWNfYm9vc3QgPSAzOyAvKiBkZWZhdWx0IDMwZEIgZ2FpbiAqLwogCiAJCS8qIG5vIFMvUERJRiBvdXQgKi8KIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSAwOwogCiAJCS8qIGlucHV0IHNvdXJjZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkICovCiAJCXNwZWMtPmlucHV0X211eCA9IE5VTEw7CisKKwkJLyogb3VyIGNhcHR1cmUgaG9va3Mgd2hpY2ggYWxsb3cgdXMgdG8gdHVybiBvbiB0aGUgbWljcm9waG9uZSBMRUQKKwkJICogYXQgdGhlIHJpZ2h0IHRpbWUgKi8KKwkJc3BlYy0+Y2FwdHVyZV9wcmVwYXJlID0gY3h0NTA2Nl9vbHBjX2NhcHR1cmVfcHJlcGFyZTsKKwkJc3BlYy0+Y2FwdHVyZV9jbGVhbnVwID0gY3h0NTA2Nl9vbHBjX2NhcHR1cmVfY2xlYW51cDsKIAkJYnJlYWs7CiAJY2FzZSBDWFQ1MDY2X0RFTExfVk9TVE86CisJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNjZfaW5pdDsKIAkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfdm9zdHJvX2V2ZW50OwogCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA2Nl9pbml0X3ZlcmJzX3Zvc3RybzsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3Rlcl9vbHBjOwpAQCAtMjUzMSw2ICsyOTEwLDcgQEAKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X3Zvc3Ryb19taXhlcnM7CiAJCXNwZWMtPnBvcnRfZF9tb2RlID0gMDsKIAkJc3BlYy0+ZGVsbF92b3N0cm8gPSAxOworCQlzcGVjLT5taWNfYm9vc3QgPSAzOyAvKiBkZWZhdWx0IDMwZEIgZ2FpbiAqLwogCQlzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMyk7CiAKIAkJLyogbm8gUy9QRElGIG91dCAqLwpAQCAtMjUzOSw2ICsyOTE5LDIyIEBACiAJCS8qIGlucHV0IHNvdXJjZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkICovCiAJCXNwZWMtPmlucHV0X211eCA9IE5VTEw7CiAJCWJyZWFrOworCWNhc2UgQ1hUNTA2Nl9JREVBUEFEOgorCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDY2X2luaXQ7CisJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X2lkZWFwYWRfZXZlbnQ7CisJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcl9tYXN0ZXI7CisJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcnM7CisJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnNfaWRlYXBhZDsKKwkJc3BlYy0+cG9ydF9kX21vZGUgPSAwOworCQlzcGVjLT5pZGVhcGFkID0gMTsKKwkJc3BlYy0+bWljX2Jvb3N0ID0gMjsJLyogZGVmYXVsdCAyMGRCIGdhaW4gKi8KKworCQkvKiBubyBTL1BESUYgb3V0ICovCisJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKKworCQkvKiBpbnB1dCBzb3VyY2UgYXV0b21hdGljYWxseSBzZWxlY3RlZCAqLworCQlzcGVjLT5pbnB1dF9tdXggPSBOVUxMOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggZGEzNDA5NS4uZThjYmUyMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTEzMSw4ICsxMzEsMTAgQEAKIGVudW0gewogCUFMQzI2OV9CQVNJQywKIAlBTEMyNjlfUVVBTlRBX0ZMMSwKLQlBTEMyNjlfQVNVU19BTUlDLAotCUFMQzI2OV9BU1VTX0RNSUMsCisJQUxDMjY5X0FNSUMsCisJQUxDMjY5X0RNSUMsCisJQUxDMjY5VkJfQU1JQywKKwlBTEMyNjlWQl9ETUlDLAogCUFMQzI2OV9GVUpJVFNVLAogCUFMQzI2OV9MSUZFQk9PSywKIAlBTEMyNjlfQVVUTywKQEAgLTIwNyw4ICsyMDksMTAgQEAKIAlBTEM4ODJfQVNVU19BN0osCiAJQUxDODgyX0FTVVNfQTdNLAogCUFMQzg4NV9NQUNQUk8sCisJQUxDODg1X01CQTIxLAogCUFMQzg4NV9NQlAzLAogCUFMQzg4NV9NQjUsCisJQUxDODg1X01BQ01JTkkzLAogCUFMQzg4NV9JTUFDMjQsCiAJQUxDODg1X0lNQUM5MSwKIAlBTEM4ODNfM1NUXzJjaF9ESUcsCkBAIC0zMzgsNyArMzQyLDcgQEAKIAl2b2lkICgqaW5pdF9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAJdm9pZCAoKnVuc29sX2V2ZW50KShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcyk7CiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQotCXZvaWQgKCpwb3dlcl9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKTsKKwl2b2lkICgqcG93ZXJfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogI2VuZGlmCiAKIAkvKiBmb3IgcGluIHNlbnNpbmcgKi8KQEAgLTM5MSw3ICszOTUsNyBAQAogCXZvaWQgKCppbml0X2hvb2spKHN0cnVjdCBoZGFfY29kZWMgKik7CiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCXN0cnVjdCBoZGFfYW1wX2xpc3QgKmxvb3BiYWNrczsKLQl2b2lkICgqcG93ZXJfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBwb3dlcik7CisJdm9pZCAoKnBvd2VyX2hvb2spKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKICNlbmRpZgogfTsKIApAQCAtNjMzLDYgKzYzNyw3IEBACiAKICNkZWZpbmUgQUxDX1BJTl9NT0RFKHhuYW1lLCBuaWQsIGRpcikgXAogCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IDAsICBcCisJICAuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IG5pZCwgXAogCSAgLmluZm8gPSBhbGNfcGluX21vZGVfaW5mbywgXAogCSAgLmdldCA9IGFsY19waW5fbW9kZV9nZXQsIFwKIAkgIC5wdXQgPSBhbGNfcGluX21vZGVfcHV0LCBcCkBAIC02ODQsNiArNjg5LDcgQEAKIH0KICNkZWZpbmUgQUxDX0dQSU9fREFUQV9TV0lUQ0goeG5hbWUsIG5pZCwgbWFzaykgXAogCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IDAsICBcCisJICAuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IG5pZCwgXAogCSAgLmluZm8gPSBhbGNfZ3Bpb19kYXRhX2luZm8sIFwKIAkgIC5nZXQgPSBhbGNfZ3Bpb19kYXRhX2dldCwgXAogCSAgLnB1dCA9IGFsY19ncGlvX2RhdGFfcHV0LCBcCkBAIC03MzgsNiArNzQ0LDcgQEAKIH0KICNkZWZpbmUgQUxDX1NQRElGX0NUUkxfU1dJVENIKHhuYW1lLCBuaWQsIG1hc2spIFwKIAl7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5kZXggPSAwLCAgXAorCSAgLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCBuaWQsIFwKIAkgIC5pbmZvID0gYWxjX3NwZGlmX2N0cmxfaW5mbywgXAogCSAgLmdldCA9IGFsY19zcGRpZl9jdHJsX2dldCwgXAogCSAgLnB1dCA9IGFsY19zcGRpZl9jdHJsX3B1dCwgXApAQCAtNzkxLDYgKzc5OCw3IEBACiAKICNkZWZpbmUgQUxDX0VBUERfQ1RSTF9TV0lUQ0goeG5hbWUsIG5pZCwgbWFzaykgXAogCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IDAsICBcCisJICAuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IG5pZCwgXAogCSAgLmluZm8gPSBhbGNfZWFwZF9jdHJsX2luZm8sIFwKIAkgIC5nZXQgPSBhbGNfZWFwZF9jdHJsX2dldCwgXAogCSAgLnB1dCA9IGFsY19lYXBkX2N0cmxfcHV0LCBcCkBAIC04MzcsMjcgKzg0NSw2IEBACiAJc3BlYy0+aW5pdF92ZXJic1tzcGVjLT5udW1faW5pdF92ZXJicysrXSA9IHZlcmI7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotLyoKLSAqIGhvb2sgZm9yIHByb2MKLSAqLwotc3RhdGljIHZvaWQgcHJpbnRfcmVhbHRla19jb2VmKHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlciwKLQkJCSAgICAgICBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKLXsKLQlpbnQgY29lZmY7Ci0KLQlpZiAobmlkICE9IDB4MjApCi0JCXJldHVybjsKLQljb2VmZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLCBBQ19WRVJCX0dFVF9QUk9DX0NPRUYsIDApOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgUHJvY2Vzc2luZyBDb2VmZmljaWVudDogMHglMDJ4XG4iLCBjb2VmZik7Ci0JY29lZmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkgICBBQ19WRVJCX0dFVF9DT0VGX0lOREVYLCAwKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICIgIENvZWZmaWNpZW50IEluZGV4OiAweCUwMnhcbiIsIGNvZWZmKTsKLX0KLSNlbHNlCi0jZGVmaW5lIHByaW50X3JlYWx0ZWtfY29lZglOVUxMCi0jZW5kaWYKLQogLyoKICAqIHNldCB1cCBmcm9tIHRoZSBwcmVzZXQgdGFibGUKICAqLwpAQCAtMTE2Miw2ICsxMTQ5LDcgQEAKIAkJY2FzZSAweDEwZWMwODg4OgogCQkJYWxjODg4X2NvZWZfaW5pdChjb2RlYyk7CiAJCQlicmVhazsKKyNpZiAwIC8qIFhYWDogVGhpcyBtYXkgY2F1c2UgdGhlIHNpbGVudCBvdXRwdXQgb24gc3BlYWtlciBvbiBzb21lIG1hY2hpbmVzICovCiAJCWNhc2UgMHgxMGVjMDI2NzoKIAkJY2FzZSAweDEwZWMwMjY4OgogCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyMCwgMCwKQEAgLTExNzQsNiArMTE2Miw3IEBACiAJCQkJCSAgICBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsCiAJCQkJCSAgICB0bXAgfCAweDMwMDApOwogCQkJYnJlYWs7CisjZW5kaWYgLyogWFhYICovCiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTI2NSw3ICsxMjU0LDcgQEAKICAqLwogc3RhdGljIGludCBhbGNfc3Vic3lzdGVtX2lkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJICAgIGhkYV9uaWRfdCBwb3J0YSwgaGRhX25pZF90IHBvcnRlLAotCQkJICAgIGhkYV9uaWRfdCBwb3J0ZCkKKwkJCSAgICBoZGFfbmlkX3QgcG9ydGQsIGhkYV9uaWRfdCBwb3J0aSkKIHsKIAl1bnNpZ25lZCBpbnQgYXNzLCB0bXAsIGk7CiAJdW5zaWduZWQgbmlkOwpAQCAtMTI5MSw3ICsxMjgwLDcgQEAKIAlzbmRfcHJpbnRkKCJyZWFsdGVrOiBObyB2YWxpZCBTU0lELCAiCiAJCSAgICJjaGVja2luZyBwaW5jZmcgMHglMDh4IGZvciBOSUQgMHgleFxuIiwKIAkJICAgYXNzLCBuaWQpOwotCWlmICghKGFzcyAmIDEpICYmICEoYXNzICYgMHgxMDAwMDApKQorCWlmICghKGFzcyAmIDEpKQogCQlyZXR1cm4gMDsKIAlpZiAoKGFzcyA+PiAzMCkgIT0gMSkJLyogbm8gcGh5c2ljYWwgY29ubmVjdGlvbiAqLwogCQlyZXR1cm4gMDsKQEAgLTEzNTEsNiArMTM0MCw4IEBACiAJCQluaWQgPSBwb3J0ZTsKIAkJZWxzZSBpZiAodG1wID09IDIpCiAJCQluaWQgPSBwb3J0ZDsKKwkJZWxzZSBpZiAodG1wID09IDMpCisJCQluaWQgPSBwb3J0aTsKIAkJZWxzZQogCQkJcmV0dXJuIDE7CiAJCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0czsgaSsrKQpAQCAtMTM2NSw5ICsxMzU2LDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkIGFsY19zc2lkX2NoZWNrKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJICAgaGRhX25pZF90IHBvcnRhLCBoZGFfbmlkX3QgcG9ydGUsIGhkYV9uaWRfdCBwb3J0ZCkKKwkJCSAgIGhkYV9uaWRfdCBwb3J0YSwgaGRhX25pZF90IHBvcnRlLAorCQkJICAgaGRhX25pZF90IHBvcnRkLCBoZGFfbmlkX3QgcG9ydGkpCiB7Ci0JaWYgKCFhbGNfc3Vic3lzdGVtX2lkKGNvZGVjLCBwb3J0YSwgcG9ydGUsIHBvcnRkKSkgeworCWlmICghYWxjX3N1YnN5c3RlbV9pZChjb2RlYywgcG9ydGEsIHBvcnRlLCBwb3J0ZCwgcG9ydGkpKSB7CiAJCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCQlzbmRfcHJpbnRkKCJyZWFsdGVrOiAiCiAJCQkgICAiRW5hYmxlIGRlZmF1bHQgc2V0dXAgZm9yIGF1dG8gbW9kZSBhcyBmYWxsYmFja1xuIik7CkBAIC0xODQwLDE0ICsxODMyLDYgQEAKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1syXSA9IDB4MWI7CiB9CiAKLSNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi1zdGF0aWMgdm9pZCBhbGM4ODlfcG93ZXJfZWFwZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKQotewotCXNldF9lYXBkKGNvZGVjLCAweDE0LCBwb3dlcik7Ci0Jc2V0X2VhcGQoY29kZWMsIDB4MTUsIHBvd2VyKTsKLX0KLSNlbmRpZgotCiAvKgogICogQUxDODgwIDMtc3RhY2sgbW9kZWwKICAqCkBAIC0yNDUwLDYgKzI0MzQsMTUgQEAKICAqIGJ1aWxkIGNvbnRyb2wgZWxlbWVudHMKICAqLwogCisjZGVmaW5lIE5JRF9NQVBQSU5HCQkoLTEpCisKKyNkZWZpbmUgU1VCREVWX1NQRUFLRVJfCQkoMCA8PCA2KQorI2RlZmluZSBTVUJERVZfSFBfCQkoMSA8PCA2KQorI2RlZmluZSBTVUJERVZfTElORV8JCSgyIDw8IDYpCisjZGVmaW5lIFNVQkRFVl9TUEVBS0VSKHgpCShTVUJERVZfU1BFQUtFUl8gfCAoKHgpICYgMHgzZikpCisjZGVmaW5lIFNVQkRFVl9IUCh4KQkJKFNVQkRFVl9IUF8gfCAoKHgpICYgMHgzZikpCisjZGVmaW5lIFNVQkRFVl9MSU5FKHgpCQkoU1VCREVWX0xJTkVfIHwgKCh4KSAmIDB4M2YpKQorCiBzdGF0aWMgdm9pZCBhbGNfZnJlZV9rY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9JTlBVVF9CRUVQCkBAIC0yNDY0LDggKzI0NTcsMTEgQEAKIHN0YXRpYyBpbnQgYWxjX2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBlcnI7Ci0JaW50IGk7CisJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKKwlpbnQgaSwgaiwgZXJyOworCXVuc2lnbmVkIGludCB1OworCWhkYV9uaWRfdCBuaWQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX21peGVyczsgaSsrKSB7CiAJCWVyciA9IHNuZF9oZGFfYWRkX25ld19jdGxzKGNvZGVjLCBzcGVjLT5taXhlcnNbaV0pOwpAQCAtMjUwNiw4ICsyNTAyLDcgQEAKIAkJCWlmICgha2N0bCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCWtjdGwtPnByaXZhdGVfdmFsdWUgPSBzcGVjLT5iZWVwX2FtcDsKLQkJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywKLQkJCQkJZ2V0X2FtcF9uaWRfKHNwZWMtPmJlZXBfYW1wKSwga2N0bCk7CisJCQllcnIgPSBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIDAsIGtjdGwpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtMjUzNCw2ICsyNTI5LDc1IEBACiAJfQogCiAJYWxjX2ZyZWVfa2N0bHMoY29kZWMpOyAvKiBubyBsb25nZXIgbmVlZGVkICovCisKKwkvKiBhc3NpZ24gQ2FwdHVyZSBTb3VyY2UgZW51bXMgdG8gTklEICovCisJa2N0bCA9IHNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJDYXB0dXJlIFNvdXJjZSIpOworCWlmICgha2N0bCkKKwkJa2N0bCA9IHNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJJbnB1dCBTb3VyY2UiKTsKKwlmb3IgKGkgPSAwOyBrY3RsICYmIGkgPCBrY3RsLT5jb3VudDsgaSsrKSB7CisJCWhkYV9uaWRfdCAqbmlkcyA9IHNwZWMtPmNhcHNyY19uaWRzOworCQlpZiAoIW5pZHMpCisJCQluaWRzID0gc3BlYy0+YWRjX25pZHM7CisJCWVyciA9IHNuZF9oZGFfYWRkX25pZChjb2RlYywga2N0bCwgaSwgbmlkc1tpXSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisJaWYgKHNwZWMtPmNhcF9taXhlcikgeworCQljb25zdCBjaGFyICprbmFtZSA9IGtjdGwgPyBrY3RsLT5pZC5uYW1lIDogTlVMTDsKKwkJZm9yIChrbmV3ID0gc3BlYy0+Y2FwX21peGVyOyBrbmV3LT5uYW1lOyBrbmV3KyspIHsKKwkJCWlmIChrbmFtZSAmJiBzdHJjbXAoa25ldy0+bmFtZSwga25hbWUpID09IDApCisJCQkJY29udGludWU7CisJCQlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywga25ldy0+bmFtZSk7CisJCQlmb3IgKGkgPSAwOyBrY3RsICYmIGkgPCBrY3RsLT5jb3VudDsgaSsrKSB7CisJCQkJZXJyID0gc25kX2hkYV9hZGRfbmlkKGNvZGVjLCBrY3RsLCBpLAorCQkJCQkJICAgICAgc3BlYy0+YWRjX25pZHNbaV0pOworCQkJCWlmIChlcnIgPCAwKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisJfQorCisJLyogb3RoZXIgbmlkLT5jb250cm9sIG1hcHBpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX21peGVyczsgaSsrKSB7CisJCWZvciAoa25ldyA9IHNwZWMtPm1peGVyc1tpXTsga25ldy0+bmFtZTsga25ldysrKSB7CisJCQlpZiAoa25ldy0+aWZhY2UgIT0gTklEX01BUFBJTkcpCisJCQkJY29udGludWU7CisJCQlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywga25ldy0+bmFtZSk7CisJCQlpZiAoa2N0bCA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCQkJdSA9IGtuZXctPnN1YmRldmljZTsKKwkJCWZvciAoaiA9IDA7IGogPCA0OyBqKyssIHUgPj49IDgpIHsKKwkJCQluaWQgPSB1ICYgMHgzZjsKKwkJCQlpZiAobmlkID09IDApCisJCQkJCWNvbnRpbnVlOworCQkJCXN3aXRjaCAodSAmIDB4YzApIHsKKwkJCQljYXNlIFNVQkRFVl9TUEVBS0VSXzoKKwkJCQkJbmlkID0gc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbbmlkXTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTVUJERVZfTElORV86CisJCQkJCW5pZCA9IHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGluc1tuaWRdOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNVQkRFVl9IUF86CisJCQkJCW5pZCA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1tuaWRdOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJZXJyID0gc25kX2hkYV9hZGRfbmlkKGNvZGVjLCBrY3RsLCAwLCBuaWQpOworCQkJCWlmIChlcnIgPCAwKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQorCQkJdSA9IGtuZXctPnByaXZhdGVfdmFsdWU7CisJCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrLCB1ID4+PSA4KSB7CisJCQkJbmlkID0gdSAmIDB4ZmY7CisJCQkJaWYgKG5pZCA9PSAwKQorCQkJCQljb250aW51ZTsKKwkJCQllcnIgPSBzbmRfaGRhX2FkZF9uaWQoY29kZWMsIGtjdGwsIDAsIG5pZCk7CisJCQkJaWYgKGVyciA8IDApCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCX0KKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2MTYsNiArMzY4MCwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYWxjX3NodXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfaGRhX3NodXR1cF9waW5zKGNvZGVjKTsKK30KKwogc3RhdGljIHZvaWQgYWxjX2ZyZWVfa2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC0zNjM2LDE3ICszNzA1LDQ0IEBACiAJaWYgKCFzcGVjKQogCQlyZXR1cm47CiAKKwlhbGNfc2h1dHVwKGNvZGVjKTsKIAlhbGNfZnJlZV9rY3Rscyhjb2RlYyk7CiAJa2ZyZWUoc3BlYyk7CiAJc25kX2hkYV9kZXRhY2hfYmVlcF9kZXZpY2UoY29kZWMpOwogfQogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorc3RhdGljIHZvaWQgYWxjX3Bvd2VyX2VhcGQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJLyogV2UgY3VycmVudGx5IG9ubHkgaGFuZGxlIGZyb250LCBIUCAqLworCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgeworCWNhc2UgMHgxMGVjMDI2MDoKKwkJc2V0X2VhcGQoY29kZWMsIDB4MGYsIDApOworCQlzZXRfZWFwZChjb2RlYywgMHgxMCwgMCk7CisJCWJyZWFrOworCWNhc2UgMHgxMGVjMDI2MjoKKwljYXNlIDB4MTBlYzAyNjc6CisJY2FzZSAweDEwZWMwMjY4OgorCWNhc2UgMHgxMGVjMDI2OToKKwljYXNlIDB4MTBlYzAyNzA6CisJY2FzZSAweDEwZWMwMjcyOgorCWNhc2UgMHgxMGVjMDY2MDoKKwljYXNlIDB4MTBlYzA2NjI6CisJY2FzZSAweDEwZWMwNjYzOgorCWNhc2UgMHgxMGVjMDg2MjoKKwljYXNlIDB4MTBlYzA4ODk6CisJCXNldF9lYXBkKGNvZGVjLCAweDE0LCAwKTsKKwkJc2V0X2VhcGQoY29kZWMsIDB4MTUsIDApOworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyBpbnQgYWxjX3N1c3BlbmQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlhbGNfc2h1dHVwKGNvZGVjKTsKIAlpZiAoc3BlYyAmJiBzcGVjLT5wb3dlcl9ob29rKQotCQlzcGVjLT5wb3dlcl9ob29rKGNvZGVjLCAwKTsKKwkJc3BlYy0+cG93ZXJfaG9vayhjb2RlYyk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKQEAgLTM2NTQsMTYgKzM3NTAsOSBAQAogI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCiBzdGF0aWMgaW50IGFsY19yZXN1bWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0jaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQotCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotI2VuZGlmCiAJY29kZWMtPnBhdGNoX29wcy5pbml0KGNvZGVjKTsKIAlzbmRfaGRhX2NvZGVjX3Jlc3VtZV9hbXAoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2NhY2hlKGNvZGVjKTsKLSNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi0JaWYgKHNwZWMgJiYgc3BlYy0+cG93ZXJfaG9vaykKLQkJc3BlYy0+cG93ZXJfaG9vayhjb2RlYywgMSk7Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtMzY4Myw2ICszNzcyLDcgQEAKIAkuc3VzcGVuZCA9IGFsY19zdXNwZW5kLAogCS5jaGVja19wb3dlcl9zdGF0dXMgPSBhbGNfY2hlY2tfcG93ZXJfc3RhdHVzLAogI2VuZGlmCisJLnJlYm9vdF9ub3RpZnkgPSBhbGNfc2h1dHVwLAogfTsKIAogCkBAIC0zODM5LDYgKzM5MjksNyBAQAogI2RlZmluZSBQSU5fQ1RMX1RFU1QoeG5hbWUsbmlkKSB7CQkJXAogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwJXAogCQkJLm5hbWUgPSB4bmFtZSwJCSAgICAgICBcCisJCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IG5pZCwgXAogCQkJLmluZm8gPSBhbGNfdGVzdF9waW5fY3RsX2luZm8sIFwKIAkJCS5nZXQgPSBhbGNfdGVzdF9waW5fY3RsX2dldCwgICBcCiAJCQkucHV0ID0gYWxjX3Rlc3RfcGluX2N0bF9wdXQsICAgXApAQCAtMzg0OCw2ICszOTM5LDcgQEAKICNkZWZpbmUgUElOX1NSQ19URVNUKHhuYW1lLG5pZCkgewkJCVwKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCVwKIAkJCS5uYW1lID0geG5hbWUsCQkgICAgICAgXAorCQkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCBuaWQsIFwKIAkJCS5pbmZvID0gYWxjX3Rlc3RfcGluX3NyY19pbmZvLCBcCiAJCQkuZ2V0ID0gYWxjX3Rlc3RfcGluX3NyY19nZXQsICAgXAogCQkJLnB1dCA9IGFsY190ZXN0X3Bpbl9zcmNfcHV0LCAgIFwKQEAgLTQzODcsNyArNDQ3OSw3IEBACiAJaWYgKCFrbmV3LT5uYW1lKQogCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoZ2V0X2FtcF9uaWRfKHZhbCkpCi0JCWtuZXctPnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCBnZXRfYW1wX25pZF8odmFsKTsKKwkJa25ldy0+c3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRzsKIAlrbmV3LT5wcml2YXRlX3ZhbHVlID0gdmFsOwogCXJldHVybiAwOwogfQpAQCAtNDc3MCw3ICs0ODYyLDcgQEAKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKLQlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCk7CisJYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQsIDApOwogCiAJcmV0dXJuIDE7CiB9CkBAIC00OTc0LDcgKzUwNjYsNiBAQAogCWlmICghc3BlYy0+bG9vcGJhY2suYW1wbGlzdCkKIAkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzg4MF9sb29wYmFja3M7CiAjZW5kaWYKLQljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKIAogCXJldHVybiAwOwogfQpAQCAtNTE4Miw2ICs1MjczLDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAweDExLAogCQkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCiAJCS5nZXQgPSBhbGMyNjBfaHBfbWFzdGVyX3N3X2dldCwKIAkJLnB1dCA9IGFsYzI2MF9ocF9tYXN0ZXJfc3dfcHV0LApAQCAtNTIyMCw2ICs1MzEyLDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAweDExLAogCQkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCiAJCS5nZXQgPSBhbGMyNjBfaHBfbWFzdGVyX3N3X2dldCwKIAkJLnB1dCA9IGFsYzI2MF9ocF9tYXN0ZXJfc3dfcHV0LApAQCAtNjMwMyw3ICs2Mzk2LDcgQEAKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKLQlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxMCwgMHgxNSwgMHgwZik7CisJYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTAsIDB4MTUsIDB4MGYsIDApOwogCiAJcmV0dXJuIDE7CiB9CkBAIC02NTgyLDcgKzY2NzUsNiBAQAogCWlmICghc3BlYy0+bG9vcGJhY2suYW1wbGlzdCkKIAkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzI2MF9sb29wYmFja3M7CiAjZW5kaWYKLQljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKIAogCXJldHVybiAwOwogfQpAQCAtNjY2NCw2ICs2NzU2LDE0IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBtYWNtaW5pM19jYXB0dXJlX3NvdXJjZSA9IHsKKwkubnVtX2l0ZW1zID0gMiwKKwkuaXRlbXMgPSB7CisJCXsgIkxpbmUiLCAweDIgfSwKKwkJeyAiQ0QiLCAweDQgfSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4M18zc3RhY2tfNmNoX2ludGVsID0gewogCS5udW1faXRlbXMgPSA0LAogCS5pdGVtcyA9IHsKQEAgLTY4NTIsNiArNjk1MiwxMyBAQAogCXsgOCwgYWxjODgyX3NpeHN0YWNrX2NoOF9pbml0IH0sCiB9OwogCisKKy8qIE1hY2Jvb2sgQWlyIDIsMSAqLworCitzdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODg1X21iYTIxX2NoX21vZGVzWzFdID0geworICAgICAgeyAyLCBOVUxMIH0sCit9OworCiAvKgogICogbWFjYm9vayBwcm8gQUxDODg1IGNhbiBzd2l0Y2ggTGluZUluIHRvIExpbmVPdXQgd2l0aG91dCBsb3NpbmcgTWljCiAgKi8KQEAgLTY5MTIsNiArNzAxOSw3IEBACiAJeyA2LCBhbGM4ODVfbWI1X2NoNl9pbml0IH0sCiB9OwogCisjZGVmaW5lIGFsYzg4NV9tYWNtaW5pM182Y2hfbW9kZXMJYWxjODg1X21iNV82Y2hfbW9kZXMKIAogLyoKICAqIDJjaCBtb2RlCkBAIC03MTIzLDYgKzcyMzEsMTUgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCisvKiBNYWNib29rIEFpciAyLDEgc2FtZSBjb250cm9sIGZvciBIUCBhbmQgaW50ZXJuYWwgU3BlYWtlciAqLworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1X21iYTIxX21peGVyW10gPSB7CisgICAgICBIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MDAsIEhEQV9PVVRQVVQpLAorICAgICAgSERBX0JJTkRfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAweDAyLCBIREFfT1VUUFVUKSwKKyAgICAgeyB9Cit9OworCisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODVfbWJwM19taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwMCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSAgICgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAweDAyLCBIREFfSU5QVVQpLApAQCAtNzE1Niw2ICs3MjczLDIxIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4NV9tYWNtaW5pM19taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUgICAoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgwZCwgMHgwMCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSAgICgiU3Vycm91bmQgUGxheWJhY2sgU3dpdGNoIiwgMHgwZCwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMRkUgUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMHgwMCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSAgICgiTEZFIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGYsIDB4MDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUgICAoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDBmLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNywgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSAgKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDcsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBCb29zdCIsIDB4MTUsIDB4MDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4NV9pbWFjOTFfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lLU91dCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFICAgKCJMaW5lLU91dCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAweDAyLCBIREFfSU5QVVQpLApAQCAtNzI0NywyOSArNzM3OSwxOCBAQAogCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml9iYXNlX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBGcm9udCBtaXhlcjogdW5tdXRlIGlucHV0L291dHB1dCBhbXAgbGVmdCBhbmQgcmlnaHQgKHZvbHVtZSA9IDApICovCi0JezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKIAl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAogCS8qIFJlYXIgbWl4ZXIgKi8KLQl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKIAl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCiAJLyogQ0xGRSBtaXhlciAqLwotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKIAkvKiBTaWRlIG1peGVyICovCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKIAl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAogCi0JLyogbXV0ZSBhbmFsb2cgaW5wdXQgbG9vcGJhY2tzICovCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAotCiAJLyogRnJvbnQgUGluOiBvdXRwdXQgMCAoMHgwYykgKi8KIAl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKIAl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LApAQCAtNzMwNiwxNCArNzQyNyw4IEBACiAJLyogTWl4ZXIgZWxlbWVudHM6IDB4MTgsIDE5LCAxYSwgMWIsIDFjLCAxZCwgMTQsIDE1LCAxNiwgMTcsIDBiICovCiAJLyogSW5wdXQgbWl4ZXIyICovCiAJezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCi0JezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAogCS8qIElucHV0IG1peGVyMyAqLwogCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKIAkvKiBBREMyOiBtdXRlIGFtcCBsZWZ0IGFuZCByaWdodCAqLwogCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJezB4MDgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKQEAgLTczNTcsMjYgKzc0NzIsMTcgQEAKIAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODVfaW5pdF92ZXJic1tdID0gewogCS8qIEZyb250IG1peGVyOiB1bm11dGUgaW5wdXQvb3V0cHV0IGFtcCBsZWZ0IGFuZCByaWdodCAodm9sdW1lID0gMCkgKi8KLQl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKLQl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAkvKiBSZWFyIG1peGVyICovCi0JezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAJLyogQ0xGRSBtaXhlciAqLwotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCS8qIFNpZGUgbWl4ZXIgKi8KLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCi0KLQkvKiBtdXRlIGFuYWxvZyBpbnB1dCBsb29wYmFja3MgKi8KLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCiAJLyogRnJvbnQgSFAgUGluOiBvdXRwdXQgMCAoMHgwYykgKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LApAQCAtNzQxMCwxNyArNzUxNiwxMSBAQAogCiAJLyogTWl4ZXIgZWxlbWVudHM6IDB4MTgsICwgMHgxYSwgMHgxYiAqLwogCS8qIElucHV0IG1peGVyMSAqLwotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDMpfSwKLQl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCisJezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIElucHV0IG1peGVyMiAqLwogCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCiAJLyogSW5wdXQgbWl4ZXIzICovCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMil9LAotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogQURDMjogbXV0ZSBhbXAgbGVmdCBhbmQgcmlnaHQgKi8KIAl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCS8qIEFEQzM6IG11dGUgYW1wIGxlZnQgYW5kIHJpZ2h0ICovCkBAIC03NTYyLDYgKzc2NjIsNzYgQEAKIAl7IH0KIH07CiAKKy8qIE1hY21pbmkgMywxICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4NV9tYWNtaW5pM19pbml0X3ZlcmJzW10gPSB7CisJLyogREFDcyAqLworCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgwNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDA1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogRnJvbnQgbWl4ZXIgKi8KKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJLyogU3Vycm91bmQgbWl4ZXIgKi8KKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJLyogTEZFIG1peGVyICovCisJezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCS8qIEhQIG1peGVyICovCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCS8qIEZyb250IFBpbiAoMHgwYykgKi8KKwl7MHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIHwgMHgwMX0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIExGRSBQaW4gKDB4MGUpICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB8IDB4MDF9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyfSwKKwkvKiBIUCBQaW4gKDB4MGYpICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDN9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFMQzg4MF9IUF9FVkVOVCB8IEFDX1VTUlNQX0VOfSwKKwkvKiBMaW5lIEluIHBpbiAqLworCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisKKwl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKKwl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAorCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCisJeyB9Cit9OworCisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg1X21iYTIxX2luaXRfdmVyYnNbXSA9IHsKKwkvKkludGVybmFsIGFuZCBIUCBTcGVha2VyIE1peGVyKi8KKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCS8qSW50ZXJuYWwgU3BlYWtlciBQaW4gKDB4MGMpKi8KKwl7MHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAoUElOX09VVCB8IEFDX1BJTkNUTF9WUkVGXzUwKSB9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBIUCBQaW46IG91dHB1dCAwICgweDBlKSAqLworCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4YzR9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCAoQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU4pfSwKKwkvKiBMaW5lIGluIChpcyBocCB3aGVuIGphY2sgY29ubmVjdGVkKSovCisJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgQUNfUElOQ1RMX1ZSRUZfNTB9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCisJeyB9CisgfTsKKworCiAvKiBNYWNib29rIFBybyByZXYzICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4NV9tYnAzX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBGcm9udCBtaXhlcjogdW5tdXRlIGlucHV0L291dHB1dCBhbXAgbGVmdCBhbmQgcmlnaHQgKHZvbHVtZSA9IDApICovCkBAIC03NzI0LDYgKzc4OTQsMjAgQEAKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1sxXSA9IDB4MWE7CiB9CiAKKyNkZWZpbmUgYWxjODg1X21iNV9zZXR1cAlhbGM4ODVfaW1hYzI0X3NldHVwCisjZGVmaW5lIGFsYzg4NV9tYWNtaW5pM19zZXR1cAlhbGM4ODVfaW1hYzI0X3NldHVwCisKKy8qIE1hY2Jvb2sgQWlyIDIsMSAqLworc3RhdGljIHZvaWQgYWxjODg1X21iYTIxX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworICAgICAgIHN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisgICAgICAgc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNDsKKyAgICAgICBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTg7Cit9CisKKworCiBzdGF0aWMgdm9pZCBhbGM4ODVfbWJwM19zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTc3MzIsNDYgKzc5MTYsMTMgQEAKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CiB9CiAKLXN0YXRpYyB2b2lkIGFsYzg4NV9tYjVfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGM4ODVfaW1hYzkxX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXVuc2lnbmVkIGludCBwcmVzZW50OworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCi0JcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxNCwgMCwKLQkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxOCwgSERBX09VVFBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMCk7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFhLCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwKTsKLQotfQotCi1zdGF0aWMgdm9pZCBhbGM4ODVfbWI1X3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgcmVzKQotewotCS8qIEhlYWRwaG9uZSBpbnNlcnRpb24gb3IgcmVtb3ZhbC4gKi8KLQlpZiAoKHJlcyA+PiAyNikgPT0gQUxDODgwX0hQX0VWRU5UKQotCQlhbGM4ODVfbWI1X2F1dG9tdXRlKGNvZGVjKTsKLX0KLQotc3RhdGljIHZvaWQgYWxjODg1X2ltYWM5MV9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLSAJdW5zaWduZWQgaW50IHByZXNlbnQ7Ci0KLQlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE0LCAwLAotCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE1LCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWEsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDApOwotCi19Ci0KLXN0YXRpYyB2b2lkIGFsYzg4NV9pbWFjOTFfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICAgIHVuc2lnbmVkIGludCByZXMpCi17Ci0JLyogSGVhZHBob25lIGluc2VydGlvbiBvciByZW1vdmFsLiAqLwotCWlmICgocmVzID4+IDI2KSA9PSBBTEM4ODBfSFBfRVZFTlQpCi0JCWFsYzg4NV9pbWFjOTFfYXV0b211dGUoY29kZWMpOworCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTQ7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE1OworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzFdID0gMHgxYTsKIH0KIAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODJfdGFyZ2FfdmVyYnNbXSA9IHsKQEAgLTc5MDYsMTggKzgwNTcsNiBAQAogCXsweDA5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCi0JLyogTXV0ZSBpbnB1dCBhbXBzIChDRCwgTGluZSBJbiwgTWljIDEgJiBNaWMgMikgb2YgdGhlIGFuYWxvZy1sb29wYmFjawotCSAqIG1peGVyIHdpZGdldAotCSAqIE5vdGU6IFBBU0QgbW90aGVyYm9hcmRzIHVzZXMgdGhlIExpbmUgSW4gMiBhcyB0aGUgaW5wdXQgZm9yCi0JICogZnJvbnQgcGFuZWwgbWljIChtaWMgMikKLQkgKi8KLQkvKiBBbXAgSW5kaWNlczogTWljMSA9IDAsIE1pYzIgPSAxLCBMaW5lMSA9IDIsIExpbmUyID0gMywgQ0QgPSA0ICovCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAotCiAJLyoKIAkgKiBTZXQgdXAgb3V0cHV0IG1peGVycyAoMHgwYyAtIDB4MGYpCiAJICovCkBAIC03OTQyLDE2ICs4MDgxLDkgQEAKIAkvKiBGSVhNRTogdXNlIG1hdHJpeC10eXBlIGlucHV0IHNvdXJjZSBzZWxlY3Rpb24gKi8KIAkvKiBNaXhlciBlbGVtZW50czogMHgxOCwgMTksIDFhLCAxYiwgMWMsIDFkLCAxNCwgMTUsIDE2LCAxNywgMGIgKi8KIAkvKiBJbnB1dCBtaXhlcjIgKi8KLQl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzAwMCB8ICgweDAwIDw8IDgpKX0sCi0JezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwODAgfCAoMHgwMyA8PCA4KSl9LAotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDgwIHwgKDB4MDIgPDwgOCkpfSwKLQl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzA4MCB8ICgweDA0IDw8IDgpKX0sCisJezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIElucHV0IG1peGVyMyAqLwotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDAwIHwgKDB4MDAgPDwgOCkpfSwKLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzA4MCB8ICgweDAzIDw8IDgpKX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwODAgfCAoMHgwMiA8PCA4KSl9LAotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDgwIHwgKDB4MDQgPDwgOCkpfSwKLQorCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7IH0KIH07CiAKQEAgLTg5MzgsNiArOTA3MCw4IEBACiAJW0FMQzg4Ml9BU1VTX0E3TV0JPSAiYXN1cy1hN20iLAogCVtBTEM4ODVfTUFDUFJPXQkJPSAibWFjcHJvIiwKIAlbQUxDODg1X01CNV0JCT0gIm1iNSIsCisJW0FMQzg4NV9NQUNNSU5JM10JPSAibWFjbWluaTMiLAorCVtBTEM4ODVfTUJBMjFdCQk9ICJtYmEyMSIsCiAJW0FMQzg4NV9NQlAzXQkJPSAibWJwMyIsCiAJW0FMQzg4NV9JTUFDMjRdCQk9ICJpbWFjMjQiLAogCVtBTEM4ODVfSU1BQzkxXQkJPSAiaW1hYzkxIiwKQEAgLTkxMjEsNiArOTI1NSw3IEBACiAJICovCiAJU05EX1BDSV9RVUlSSygweDEwNmIsIDB4NDAwMCwgIk1hY2Jvb2tQcm8gNSwxIiwgQUxDODg1X01CNSksCiAJU05EX1BDSV9RVUlSSygweDEwNmIsIDB4NDYwMCwgIk1hY2Jvb2tQcm8gNSwyIiwgQUxDODg1X01CNSksCisJU05EX1BDSV9RVUlSSygweDEwNmIsIDB4NDEwMCwgIk1hY21pbmkgMywxIiwgQUxDODg1X01BQ01JTkkzKSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCkBAIC05MTcyLDYgKzkzMDcsMTggQEAKIAkJLmlucHV0X211eCA9ICZhbGM4ODJfY2FwdHVyZV9zb3VyY2UsCiAJCS5kaWdfb3V0X25pZCA9IEFMQzg4Ml9ESUdPVVRfTklELAogCX0sCisJICAgW0FMQzg4NV9NQkEyMV0gPSB7CisJCQkubWl4ZXJzID0geyBhbGM4ODVfbWJhMjFfbWl4ZXIgfSwKKwkJCS5pbml0X3ZlcmJzID0geyBhbGM4ODVfbWJhMjFfaW5pdF92ZXJicywgYWxjODgwX2dwaW8xX2luaXRfdmVyYnMgfSwKKwkJCS5udW1fZGFjcyA9IDIsCisJCQkuZGFjX25pZHMgPSBhbGM4ODJfZGFjX25pZHMsCisJCQkuY2hhbm5lbF9tb2RlID0gYWxjODg1X21iYTIxX2NoX21vZGVzLAorCQkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4NV9tYmEyMV9jaF9tb2RlcyksCisJCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKKwkJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCQkuc2V0dXAgPSBhbGM4ODVfbWJhMjFfc2V0dXAsCisJCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKKyAgICAgICB9LAogCVtBTEM4ODVfTUJQM10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4NV9tYnAzX21peGVyLCBhbGM4ODJfY2htb2RlX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGM4ODVfbWJwM19pbml0X3ZlcmJzLApAQCAtOTE5OSw4ICs5MzQ2LDI0IEBACiAJCS5pbnB1dF9tdXggPSAmbWI1X2NhcHR1cmVfc291cmNlLAogCQkuZGlnX291dF9uaWQgPSBBTEM4ODJfRElHT1VUX05JRCwKIAkJLmRpZ19pbl9uaWQgPSBBTEM4ODJfRElHSU5fTklELAotCQkudW5zb2xfZXZlbnQgPSBhbGM4ODVfbWI1X3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjODg1X21iNV9hdXRvbXV0ZSwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjODg1X21iNV9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCisJfSwKKwlbQUxDODg1X01BQ01JTkkzXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjODg1X21hY21pbmkzX21peGVyLCBhbGM4ODJfY2htb2RlX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODVfbWFjbWluaTNfaW5pdF92ZXJicywKKwkJCQlhbGM4ODBfZ3BpbzFfaW5pdF92ZXJicyB9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4Ml9kYWNfbmlkcyksCisJCS5kYWNfbmlkcyA9IGFsYzg4Ml9kYWNfbmlkcywKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4NV9tYWNtaW5pM182Y2hfbW9kZXMsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODVfbWFjbWluaTNfNmNoX21vZGVzKSwKKwkJLmlucHV0X211eCA9ICZtYWNtaW5pM19jYXB0dXJlX3NvdXJjZSwKKwkJLmRpZ19vdXRfbmlkID0gQUxDODgyX0RJR09VVF9OSUQsCisJCS5kaWdfaW5fbmlkID0gQUxDODgyX0RJR0lOX05JRCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjODg1X21hY21pbmkzX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKIAl9LAogCVtBTEM4ODVfTUFDUFJPXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgyX21hY3Byb19taXhlciB9LApAQCAtOTIzOSw4ICs5NDAyLDkgQEAKIAkJLmlucHV0X211eCA9ICZhbGM4ODJfY2FwdHVyZV9zb3VyY2UsCiAJCS5kaWdfb3V0X25pZCA9IEFMQzg4Ml9ESUdPVVRfTklELAogCQkuZGlnX2luX25pZCA9IEFMQzg4Ml9ESUdJTl9OSUQsCi0JCS51bnNvbF9ldmVudCA9IGFsYzg4NV9pbWFjOTFfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4ODVfaW1hYzkxX2F1dG9tdXRlLAorCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM4ODVfaW1hYzkxX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKIAl9LAogCVtBTEM4ODJfVEFSR0FdID0gewogCQkubWl4ZXJzID0geyBhbGM4ODJfdGFyZ2FfbWl4ZXIsIGFsYzg4Ml9jaG1vZGVfbWl4ZXIgfSwKQEAgLTk1MjgsNyArOTY5Miw3IEBACiAJCS5zZXR1cCA9IGFsYzg4OV9hY2VyX2FzcGlyZV84OTMwZ19zZXR1cCwKIAkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQotCQkucG93ZXJfaG9vayA9IGFsYzg4OV9wb3dlcl9lYXBkLAorCQkucG93ZXJfaG9vayA9IGFsY19wb3dlcl9lYXBkLAogI2VuZGlmCiAJfSwKIAlbQUxDODg4X0FDRVJfQVNQSVJFXzc3MzBHXSA9IHsKQEAgLTEwMDYzLDcgKzEwMjI3LDcgQEAKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKLQlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCk7CisJYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQsIDApOwogCiAJZXJyID0gYWxjX2F1dG9fYWRkX21pY19ib29zdChjb2RlYyk7CiAJaWYgKGVyciA8IDApCkBAIC0xMDIwMSw3ICsxMDM2NSw2IEBACiAJaWYgKCFzcGVjLT5sb29wYmFjay5hbXBsaXN0KQogCQlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gYWxjODgyX2xvb3BiYWNrczsKICNlbmRpZgotCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gcHJpbnRfcmVhbHRla19jb2VmOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDMyNCw4ICsxMDQ4NywxNCBAQAogCQkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCQlcCiAJCS5nZXQgPSBhbGMyNjJfaHBfbWFzdGVyX3N3X2dldCwJCQlcCiAJCS5wdXQgPSBhbGMyNjJfaHBfbWFzdGVyX3N3X3B1dCwJCQlcCisJfSwgXAorCXsJCQkJCQkJXAorCQkuaWZhY2UgPSBOSURfTUFQUElORywJCQkJXAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwJCVwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDE1IHwgKDB4MTYgPDwgOCkgfCAoMHgxYiA8PCAxNiksCVwKIAl9CiAKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2Ml9IUF9CUENfbWl4ZXJbXSA9IHsKIAlBTEMyNjJfSFBfTUFTVEVSX1NXSVRDSCwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTA0ODMsNiArMTA2NTIsMTIgQEAKIAkJLmluZm8gPSBzbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvLAkJXAogCQkuZ2V0ID0gYWxjMjYyX2hpcHBvX21hc3Rlcl9zd19nZXQsCQlcCiAJCS5wdXQgPSBhbGMyNjJfaGlwcG9fbWFzdGVyX3N3X3B1dCwJCVwKKwl9LAkJCQkJCQlcCisJewkJCQkJCQlcCisJCS5pZmFjZSA9IE5JRF9NQVBQSU5HLAkJCQlcCisJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAkJXAorCQkuc3ViZGV2aWNlID0gU1VCREVWX0hQKDApIHwgKFNVQkRFVl9MSU5FKDApIDw8IDgpIHwgXAorCQkJICAgICAoU1VCREVWX1NQRUFLRVIoMCkgPDwgMTYpLCBcCiAJfQogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX2hpcHBvX21peGVyW10gPSB7CkBAIC0xMDk2MywxMSArMTExMzgsMTcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gYWxjMjYyX2Z1aml0c3VfbWFzdGVyX3N3X3B1dCwKIAkJLnByaXZhdGVfdmFsdWUgPSBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTQsIDMsIDAsIEhEQV9PVVRQVVQpLAogCX0sCisJeworCQkuaWZhY2UgPSBOSURfTUFQUElORywKKwkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5wcml2YXRlX3ZhbHVlID0gMHgxYiwKKwl9LAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKQEAgLTEwOTk4LDYgKzExMTc5LDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gYWxjMjYyX2xlbm92b18zMDAwX21hc3Rlcl9zd19wdXQsCkBAIC0xMTE1Miw2ICsxMTMzNCwxMSBAQAogCQkuZ2V0ID0gYWxjX211eF9lbnVtX2dldCwKIAkJLnB1dCA9IGFsYzI2Ml91bHRyYV9tdXhfZW51bV9wdXQsCiAJfSwKKwl7CisJCS5pZmFjZSA9IE5JRF9NQVBQSU5HLAorCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCisJCS5wcml2YXRlX3ZhbHVlID0gMHgxNSwKKwl9LAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTExNTk4LDcgKzExNzg1LDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDE0LCAweDFiKTsKKwlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCwgMCk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTEyMDQxLDcgKzEyMjI4LDYgQEAKIAlpZiAoIXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QpCiAJCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSBhbGMyNjJfbG9vcGJhY2tzOwogI2VuZGlmCi0JY29kZWMtPnByb2Nfd2lkZ2V0X2hvb2sgPSBwcmludF9yZWFsdGVrX2NvZWY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMTcwLDYgKzEyMzU2LDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gYWxjMjY4X2FjZXJfbWFzdGVyX3N3X3B1dCwKQEAgLTEyMTg1LDYgKzEyMzcyLDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gYWxjMjY4X2FjZXJfbWFzdGVyX3N3X3B1dCwKQEAgLTEyMjAyLDYgKzEyMzkwLDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gYWxjMjY4X2FjZXJfbWFzdGVyX3N3X3B1dCwKQEAgLTEyNTQ3LDcgKzEyNzM2LDYgQEAKIAkJZGFjID0gMHgwMjsKIAkJYnJlYWs7CiAJY2FzZSAweDE1OgotCWNhc2UgMHgyMToKIAkJZGFjID0gMHgwMzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEyNzY4LDcgKzEyOTU2LDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0KTsKKwlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCwgMCk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTEzMTA1LDggKzEzMjkzLDYgQEAKIAlpZiAoYm9hcmRfY29uZmlnID09IEFMQzI2OF9BVVRPKQogCQlzcGVjLT5pbml0X2hvb2sgPSBhbGMyNjhfYXV0b19pbml0OwogCi0JY29kZWMtPnByb2Nfd2lkZ2V0X2hvb2sgPSBwcmludF9yZWFsdGVrX2NvZWY7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMxMjYsNiArMTMzMTIsMTUgQEAKIAkweDIzLAogfTsKIAorc3RhdGljIGhkYV9uaWRfdCBhbGMyNjl2Yl9hZGNfbmlkc1sxXSA9IHsKKwkvKiBBREMxICovCisJMHgwOSwKK307CisKK3N0YXRpYyBoZGFfbmlkX3QgYWxjMjY5dmJfY2Fwc3JjX25pZHNbMV0gPSB7CisJMHgyMiwKK307CisKIC8qIE5PVEU6IEFEQzIgKDB4MDcpIGlzIGNvbm5lY3RlZCBmcm9tIGEgcmVjb3JkaW5nICpNSVhFUiogKDB4MjQpLAogICogICAgICAgbm90IGEgbXV4IQogICovCkBAIC0xMzE1NSw2ICsxMzM1MCw3IEBACiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLAogCQkuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9pbmZvLAogCQkuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2dldCwKIAkJLnB1dCA9IGFsYzI2OF9hY2VyX21hc3Rlcl9zd19wdXQsCkBAIC0xMzE3NSw2ICsxMzM3MSw3IEBACiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLAogCQkuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9pbmZvLAogCQkuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2dldCwKIAkJLnB1dCA9IGFsYzI2OF9hY2VyX21hc3Rlcl9zd19wdXQsCkBAIC0xMzE5Miw3ICsxMzM4OSw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY5X2VlZXBjX21peGVyW10gPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY5X2xhcHRvcF9taXhlcltdID0gewogCUhEQV9DT0RFQ19NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MTQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTEzMjAwLDE2ICsxMzM5Nyw0NyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjl2Yl9sYXB0b3BfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwMiwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDMsIDB4MCwgSERBX09VVFBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKwogLyogY2FwdHVyZSBtaXhlciBlbGVtZW50cyAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OV9lcGNfY2FwdHVyZV9taXhlcltdID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OV9sYXB0b3BfYW5hbG9nX2NhcHR1cmVfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfbGFwdG9wX2RpZ2l0YWxfY2FwdHVyZV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjl2Yl9sYXB0b3BfYW5hbG9nX2NhcHR1cmVfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjl2Yl9sYXB0b3BfZGlnaXRhbF9jYXB0dXJlX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKwogLyogRlNDIGFtaWxvICovCi0jZGVmaW5lIGFsYzI2OV9mdWppdHN1X21peGVyCWFsYzI2OV9lZWVwY19taXhlcgorI2RlZmluZSBhbGMyNjlfZnVqaXRzdV9taXhlcglhbGMyNjlfbGFwdG9wX21peGVyCiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5X3F1YW50YV9mbDFfdmVyYnNbXSA9IHsKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LApAQCAtMTMzNTIsNyArMTM1ODAsNyBAQAogCWFsYzI2OV9saWZlYm9va19taWNfYXV0b3N3aXRjaChjb2RlYyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5X2VlZXBjX2RtaWNfaW5pdF92ZXJic1tdID0geworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfbGFwdG9wX2RtaWNfaW5pdF92ZXJic1tdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCiAJezB4MjMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDA1fSwKIAl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDI2IH0sCkBAIC0xMzM2Myw3ICsxMzU5MSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5X2VlZXBjX2FtaWNfaW5pdF92ZXJic1tdID0geworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfbGFwdG9wX2FtaWNfaW5pdF92ZXJic1tdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCiAJezB4MjMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKIAl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDI2IH0sCkBAIC0xMzM3Myw2ICsxMzYwMSwyOCBAQAogCXt9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OXZiX2xhcHRvcF9kbWljX2luaXRfdmVyYnNbXSA9IHsKKwl7MHgyMSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwNn0sCisJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAyNiB9LAorCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDE5IHwgKDB4MDAgPDwgOCkpfSwKKwl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDE4LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX01JQ19FVkVOVH0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OXZiX2xhcHRvcF9hbWljX2luaXRfdmVyYnNbXSA9IHsKKwl7MHgyMSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCisJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAyNiB9LAorCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDE5IHwgKDB4MDAgPDwgOCkpfSwKKwl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDE4LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX01JQ19FVkVOVH0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAorCXt9Cit9OworCiAvKiB0b2dnbGUgc3BlYWtlci1vdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCiBzdGF0aWMgdm9pZCBhbGMyNjlfc3BlYWtlcl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTEzMzkwLDcgKzEzNjQwLDcgQEAKIH0KIAogLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIEhQIGphY2sgc2Vuc2luZyAqLwotc3RhdGljIHZvaWQgYWxjMjY5X2VlZXBjX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorc3RhdGljIHZvaWQgYWxjMjY5X2xhcHRvcF91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkgICAgIHVuc2lnbmVkIGludCByZXMpCiB7CiAJc3dpdGNoIChyZXMgPj4gMjYpIHsKQEAgLTEzNDAzLDcgKzEzNjUzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGFsYzI2OV9lZWVwY19kbWljX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjMjY5X2xhcHRvcF9kbWljX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKQEAgLTEzNDEzLDcgKzEzNjYzLDE3IEBACiAJc3BlYy0+YXV0b19taWMgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBhbGMyNjlfZWVlcGNfYW1pY19zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzI2OXZiX2xhcHRvcF9kbWljX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKKwlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOworCXNwZWMtPmludF9taWMucGluID0gMHgxMjsKKwlzcGVjLT5pbnRfbWljLm11eF9pZHggPSA2OworCXNwZWMtPmF1dG9fbWljID0gMTsKK30KKworc3RhdGljIHZvaWQgYWxjMjY5X2xhcHRvcF9hbWljX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKQEAgLTEzNDIzLDcgKzEzNjgzLDcgQEAKIAlzcGVjLT5hdXRvX21pYyA9IDE7CiB9CiAKLXN0YXRpYyB2b2lkIGFsYzI2OV9lZWVwY19pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzI2OV9sYXB0b3BfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJYWxjMjY5X3NwZWFrZXJfYXV0b211dGUoY29kZWMpOwogCWFsY19taWNfYXV0b211dGUoY29kZWMpOwpAQCAtMTM0MzYsMjIgKzEzNjk2LDEwIEBACiAJLyoKIAkgKiBVbm11dGUgQURDMCBhbmQgc2V0IHRoZSBkZWZhdWx0IGlucHV0IHRvIG1pYy1pbgogCSAqLwotCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQotCS8qIE11dGUgaW5wdXQgYW1wcyAoUENCZWVwLCBMaW5lIEluLCBNaWMgMSAmIE1pYyAyKSBvZiB0aGUKLQkgKiBhbmFsb2ctbG9vcGJhY2sgbWl4ZXIgd2lkZ2V0Ci0JICogTm90ZTogUEFTRCBtb3RoZXJib2FyZHMgdXNlcyB0aGUgTGluZSBJbiAyIGFzIHRoZSBpbnB1dCBmb3IKLQkgKiBmcm9udCBwYW5lbCBtaWMgKG1pYyAyKQotCSAqLwotCS8qIEFtcCBJbmRpY2VzOiBNaWMxID0gMCwgTWljMiA9IDEsIExpbmUxID0gMiwgTGluZTIgPSAzLCBDRCA9IDQgKi8KLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCisJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCiAJLyoKLQkgKiBTZXQgdXAgb3V0cHV0IG1peGVycyAoMHgwYyAtIDB4MGUpCisJICogU2V0IHVwIG91dHB1dCBtaXhlcnMgKDB4MDIgLSAweDAzKQogCSAqLwogCS8qIHNldCB2b2w9MCB0byBvdXRwdXQgbWl4ZXJzICovCiAJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCkBAIC0xMzQ3NiwyNiArMTM3MjQsNTcgQEAKIAogCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKLQl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQl7MHgxYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAotCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCi0JezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKLQotCS8qIEZJWE1FOiB1c2UgbWF0cml4LXR5cGUgaW5wdXQgc291cmNlIHNlbGVjdGlvbiAqLworCS8qIEZJWE1FOiB1c2UgTXV4LXR5cGUgaW5wdXQgc291cmNlIHNlbGVjdGlvbiAqLwogCS8qIE1peGVyIGVsZW1lbnRzOiAweDE4LCAxOSwgMWEsIDFiLCAxZCwgMGIgKi8KIAkvKiBJbnB1dCBtaXhlcjE6IHVubXV0ZSBNaWMsIEYtTWljLCBMaW5lLCBDRCBpbnB1dHMgKi8KLQl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCisJezB4MjMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKIAogCS8qIHNldCBFQVBEICovCiAJezB4MTQsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAyfSwKLQl7MHgxNSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDJ9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjl2Yl9pbml0X3ZlcmJzW10gPSB7CisJLyoKKwkgKiBVbm11dGUgQURDMCBhbmQgc2V0IHRoZSBkZWZhdWx0IGlucHV0IHRvIG1pYy1pbgorCSAqLworCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKworCS8qCisJICogU2V0IHVwIG91dHB1dCBtaXhlcnMgKDB4MDIgLSAweDAzKQorCSAqLworCS8qIHNldCB2b2w9MCB0byBvdXRwdXQgbWl4ZXJzICovCisJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisKKwkvKiBzZXQgdXAgaW5wdXQgYW1wcyBmb3IgYW5hbG9nIGxvb3BiYWNrICovCisJLyogQW1wIEluZGljZXM6IERBQyA9IDAsIG1peGVyID0gMSAqLworCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCisJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisKKwkvKiBGSVhNRTogdXNlIE11eC10eXBlIGlucHV0IHNvdXJjZSBzZWxlY3Rpb24gKi8KKwkvKiBNaXhlciBlbGVtZW50czogMHgxOCwgMTksIDFhLCAxYiwgMWQsIDBiICovCisJLyogSW5wdXQgbWl4ZXIxOiB1bm11dGUgTWljLCBGLU1pYywgTGluZSwgQ0QgaW5wdXRzICovCisJezB4MjIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKworCS8qIHNldCBFQVBEICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAyfSwKIAl7IH0KIH07CiAKQEAgLTEzNTQzLDYgKzEzODIyLDcgQEAKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgZXJyOwogCXN0YXRpYyBoZGFfbmlkX3QgYWxjMjY5X2lnbm9yZVtdID0geyAweDFkLCAwIH07CisJaGRhX25pZF90IHJlYWxfY2Fwc3JjX25pZHM7CiAKIAllcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKIAkJCQkJICAgYWxjMjY5X2lnbm9yZSk7CkBAIC0xMzU2NCwxMSArMTM4NDQsMjAgQEAKIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKIAkJYWRkX21peGVyKHNwZWMsIHNwZWMtPmtjdGxzLmxpc3QpOwogCi0JYWRkX3ZlcmIoc3BlYywgYWxjMjY5X2luaXRfdmVyYnMpOworCWlmICgoYWxjX3JlYWRfY29lZl9pZHgoY29kZWMsIDApICYgMHgwMGYwKSA9PSAweDAwMTApIHsKKwkJYWRkX3ZlcmIoc3BlYywgYWxjMjY5dmJfaW5pdF92ZXJicyk7CisJCXJlYWxfY2Fwc3JjX25pZHMgPSBhbGMyNjl2Yl9jYXBzcmNfbmlkc1swXTsKKwkJYWxjX3NzaWRfY2hlY2soY29kZWMsIDAsIDB4MWIsIDB4MTQsIDB4MjEpOworCX0gZWxzZSB7CisJCWFkZF92ZXJiKHNwZWMsIGFsYzI2OV9pbml0X3ZlcmJzKTsKKwkJcmVhbF9jYXBzcmNfbmlkcyA9IGFsYzI2OV9jYXBzcmNfbmlkc1swXTsKKwkJYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQsIDApOworCX0KKwogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAkvKiBzZXQgZGVmYXVsdCBpbnB1dCBzb3VyY2UgKi8KLQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBhbGMyNjlfY2Fwc3JjX25pZHNbMF0sCisJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgcmVhbF9jYXBzcmNfbmlkcywKIAkJCQkgIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAogCQkJCSAgc3BlYy0+aW5wdXRfbXV4LT5pdGVtc1swXS5pbmRleCk7CiAKQEAgLTEzNTc5LDggKzEzODY4LDYgQEAKIAlpZiAoIXNwZWMtPmNhcF9taXhlciAmJiAhc3BlYy0+bm9fYW5hbG9nKQogCQlzZXRfY2FwdHVyZV9taXhlcihjb2RlYyk7CiAKLQlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCk7Ci0KIAlyZXR1cm4gMTsKIH0KIApAQCAtMTM2MDYsOCArMTM4OTMsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKmFsYzI2OV9tb2RlbHNbQUxDMjY5X01PREVMX0xBU1RdID0gewogCVtBTEMyNjlfQkFTSUNdCQkJPSAiYmFzaWMiLAogCVtBTEMyNjlfUVVBTlRBX0ZMMV0JCT0gInF1YW50YSIsCi0JW0FMQzI2OV9BU1VTX0FNSUNdCQk9ICJhc3VzLWFtaWMiLAotCVtBTEMyNjlfQVNVU19ETUlDXQkJPSAiYXN1cy1kbWljIiwKKwlbQUxDMjY5X0FNSUNdCQkJPSAibGFwdG9wLWFtaWMiLAorCVtBTEMyNjlfRE1JQ10JCQk9ICJsYXB0b3AtZG1pYyIsCiAJW0FMQzI2OV9GVUpJVFNVXQkJPSAiZnVqaXRzdSIsCiAJW0FMQzI2OV9MSUZFQk9PS10JCT0gImxpZmVib29rIiwKIAlbQUxDMjY5X0FVVE9dCQkJPSAiYXV0byIsCkBAIC0xMzYxNiw0MyArMTM5MDMsNTcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjlfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNiZjgsICJRdWFudGEgRkwxIiwgQUxDMjY5X1FVQU5UQV9GTDEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzMzAsICJBU1VTIEVlZXBjIFA3MDMgUDkwMEEiLAotCQkgICAgICBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMTMzLCAiQVNVUyBVSjIwZnQiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMjczLCAiQVNVUyBVTDgwSlQiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMjgzLCAiQVNVUyBVNTNKYyIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyYjMsICJBU1VTIE44Mkp2IiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNhMywgIkFTVVMgVUwzMFZ0IiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTM3MywgIkFTVVMgRzczSlgiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzgzLCAiQVNVUyBVSjMwSmMiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxM2QzLCAiQVNVUyBONjFKQSIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0MTMsICJBU1VTIFVMNTAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNDQzLCAiQVNVUyBVTDMwIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQ1MywgIkFTVVMgTTYwSnYiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNDgzLCAiQVNVUyBVTDgwIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTRmMywgIkFTVVMgRjgzVmYiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNGUzLCAiQVNVUyBVTDIwIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTUxMywgIkFTVVMgVVgzMCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1YTMsICJBU1VTIE42MEp2IiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTViMywgIkFTVVMgTjYwRHAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNWMzLCAiQVNVUyBONzBEZSIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1ZTMsICJBU1VTIEY4M1QiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjQzLCAiQVNVUyBNNjBKIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTY1MywgIkFTVVMgVTUwIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTY5MywgIkFTVVMgRjUwTiIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2YTMsICJBU1VTIEY1USIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2ZTMsICJBU1VTIFVYNTAiLCBBTEMyNjlfQVNVU19ETUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzIzLCAiQVNVUyBQODAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzQzLCAiQVNVUyBVODAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzczLCAiQVNVUyBVMjBBIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg4MywgIkFTVVMgRjgxU2UiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwkJICAgICAgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEwMTMsICJBU1VTIE42MURhIiwgQUxDMjY5VkJfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTExMywgIkFTVVMgTjYzSm4iLCBBTEMyNjlWQl9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMTQzLCAiQVNVUyBCNTNmIiwgQUxDMjY5VkJfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTEzMywgIkFTVVMgVUoyMGZ0IiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExODMsICJBU1VTIEs3MkRSIiwgQUxDMjY5VkJfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFiMywgIkFTVVMgSzUyRFIiLCBBTEMyNjlWQl9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWUzLCAiQVNVUyBVMzNKYyIsIEFMQzI2OVZCX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyNzMsICJBU1VTIFVMODBKdCIsIEFMQzI2OVZCX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyODMsICJBU1VTIFU1M0pjIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyYjMsICJBU1VTIE44Mkp2IiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyZDMsICJBU1VTIE42MUp2IiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzYTMsICJBU1VTIFVMMzBWdCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzczLCAiQVNVUyBHNzNKWCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzgzLCAiQVNVUyBVSjMwSmMiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNkMywgIkFTVVMgTjYxSkEiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQxMywgIkFTVVMgVUw1MCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNDQzLCAiQVNVUyBVTDMwIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0NTMsICJBU1VTIE02MEp2IiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0ODMsICJBU1VTIFVMODAiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTRmMywgIkFTVVMgRjgzVmYiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTRlMywgIkFTVVMgVUwyMCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNTEzLCAiQVNVUyBVWDMwIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1OTMsICJBU1VTIE41MVZuIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1YTMsICJBU1VTIE42MEp2IiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1YjMsICJBU1VTIE42MERwIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1YzMsICJBU1VTIE43MERlIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1ZTMsICJBU1VTIEY4M1QiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTY0MywgIkFTVVMgTTYwSiIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjUzLCAiQVNVUyBVNTAiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTY5MywgIkFTVVMgRjUwTiIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmEzLCAiQVNVUyBGNVEiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZlMywgIkFTVVMgVVg1MCIsIEFMQzI2OV9ETUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzIzLCAiQVNVUyBQODAiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc0MywgIkFTVVMgVTgwIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NzMsICJBU1VTIFUyMEEiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg4MywgIkFTVVMgRjgxU2UiLCBBTEMyNjlfQU1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODMxYSwgIkFTVVMgRWVlcGMgUDkwMSIsCi0JCSAgICAgIEFMQzI2OV9BU1VTX0RNSUMpLAorCQkgICAgICBBTEMyNjlfRE1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODM0YSwgIkFTVVMgRWVlcGMgUzEwMSIsCi0JCSAgICAgIEFMQzI2OV9BU1VTX0RNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzOTgsICJBU1VTIFAxMDA1SEEiLCBBTEMyNjlfQVNVU19ETUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4M2NlLCAiQVNVUyBQMTAwNUhBIiwgQUxDMjY5X0FTVVNfRE1JQyksCi0JU05EX1BDSV9RVUlSSygweDE3MzQsIDB4MTE1ZCwgIkZTQyBBbWlsbyIsIEFMQzI2OV9GVUpJVFNVKSwKKwkJICAgICAgQUxDMjY5X0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzOTgsICJBU1VTIFAxMDA1SEEiLCBBTEMyNjlfRE1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODNjZSwgIkFTVVMgUDEwMDVIQSIsIEFMQzI2OV9ETUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDcxLCAiU09OWSBYVEIiLCBBTEMyNjlfRE1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwY2YsIDB4MTQ3NSwgIkxpZmVib29rIElDSDlNLWJhc2VkIiwgQUxDMjY5X0xJRkVCT09LKSwKKwlTTkRfUENJX1FVSVJLKDB4MTUyZCwgMHgxNzc4LCAiUXVhbnRhIE9OMSIsIEFMQzI2OV9ETUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTczNCwgMHgxMTVkLCAiRlNDIEFtaWxvIiwgQUxDMjY5X0ZVSklUU1UpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNiZTksICJRdWFudGEgV2lzdHJvbiIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzYmY4LCAiUXVhbnRhIEZMMSIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdmZiwgMHgwNTlhLCAiUXVhbnRhIEVMMyIsIEFMQzI2OV9ETUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdmZiwgMHgwNTliLCAiUXVhbnRhIEpSMSIsIEFMQzI2OV9ETUlDKSwKIAl7fQogfTsKIApAQCAtMTM2ODAsNDcgKzEzOTgxLDc1IEBACiAJCS5zZXR1cCA9IGFsYzI2OV9xdWFudGFfZmwxX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjMjY5X3F1YW50YV9mbDFfaW5pdF9ob29rLAogCX0sCi0JW0FMQzI2OV9BU1VTX0FNSUNdID0gewotCQkubWl4ZXJzID0geyBhbGMyNjlfZWVlcGNfbWl4ZXIgfSwKLQkJLmNhcF9taXhlciA9IGFsYzI2OV9lcGNfY2FwdHVyZV9taXhlciwKKwlbQUxDMjY5X0FNSUNdID0geworCQkubWl4ZXJzID0geyBhbGMyNjlfbGFwdG9wX21peGVyIH0sCisJCS5jYXBfbWl4ZXIgPSBhbGMyNjlfbGFwdG9wX2FuYWxvZ19jYXB0dXJlX21peGVyLAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY5X2luaXRfdmVyYnMsCi0JCQkJYWxjMjY5X2VlZXBjX2FtaWNfaW5pdF92ZXJicyB9LAorCQkJCWFsYzI2OV9sYXB0b3BfYW1pY19pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjY5X2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjMjY5X2RhY19uaWRzLAogCQkuaHBfbmlkID0gMHgwMywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2OV9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjlfbW9kZXMsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2OV9lZWVwY191bnNvbF9ldmVudCwKLQkJLnNldHVwID0gYWxjMjY5X2VlZXBjX2FtaWNfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGMyNjlfZWVlcGNfaW5pdGhvb2ssCisJCS51bnNvbF9ldmVudCA9IGFsYzI2OV9sYXB0b3BfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzI2OV9sYXB0b3BfYW1pY19zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsYzI2OV9sYXB0b3BfaW5pdGhvb2ssCiAJfSwKLQlbQUxDMjY5X0FTVVNfRE1JQ10gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzI2OV9lZWVwY19taXhlciB9LAotCQkuY2FwX21peGVyID0gYWxjMjY5X2VwY19jYXB0dXJlX21peGVyLAorCVtBTEMyNjlfRE1JQ10gPSB7CisJCS5taXhlcnMgPSB7IGFsYzI2OV9sYXB0b3BfbWl4ZXIgfSwKKwkJLmNhcF9taXhlciA9IGFsYzI2OV9sYXB0b3BfZGlnaXRhbF9jYXB0dXJlX21peGVyLAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY5X2luaXRfdmVyYnMsCi0JCQkJYWxjMjY5X2VlZXBjX2RtaWNfaW5pdF92ZXJicyB9LAorCQkJCWFsYzI2OV9sYXB0b3BfZG1pY19pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjY5X2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjMjY5X2RhY19uaWRzLAogCQkuaHBfbmlkID0gMHgwMywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2OV9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjlfbW9kZXMsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2OV9lZWVwY191bnNvbF9ldmVudCwKLQkJLnNldHVwID0gYWxjMjY5X2VlZXBjX2RtaWNfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGMyNjlfZWVlcGNfaW5pdGhvb2ssCisJCS51bnNvbF9ldmVudCA9IGFsYzI2OV9sYXB0b3BfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzI2OV9sYXB0b3BfZG1pY19zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsYzI2OV9sYXB0b3BfaW5pdGhvb2ssCisJfSwKKwlbQUxDMjY5VkJfQU1JQ10gPSB7CisJCS5taXhlcnMgPSB7IGFsYzI2OXZiX2xhcHRvcF9taXhlciB9LAorCQkuY2FwX21peGVyID0gYWxjMjY5dmJfbGFwdG9wX2FuYWxvZ19jYXB0dXJlX21peGVyLAorCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY5dmJfaW5pdF92ZXJicywKKwkJCQlhbGMyNjl2Yl9sYXB0b3BfYW1pY19pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjY5X2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjMjY5X2RhY19uaWRzLAorCQkuaHBfbmlkID0gMHgwMywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2OV9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGMyNjlfbW9kZXMsCisJCS51bnNvbF9ldmVudCA9IGFsYzI2OV9sYXB0b3BfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzI2OV9sYXB0b3BfYW1pY19zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsYzI2OV9sYXB0b3BfaW5pdGhvb2ssCisJfSwKKwlbQUxDMjY5VkJfRE1JQ10gPSB7CisJCS5taXhlcnMgPSB7IGFsYzI2OXZiX2xhcHRvcF9taXhlciB9LAorCQkuY2FwX21peGVyID0gYWxjMjY5dmJfbGFwdG9wX2RpZ2l0YWxfY2FwdHVyZV9taXhlciwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OXZiX2luaXRfdmVyYnMsCisJCQkJYWxjMjY5dmJfbGFwdG9wX2RtaWNfaW5pdF92ZXJicyB9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2OV9kYWNfbmlkcyksCisJCS5kYWNfbmlkcyA9IGFsYzI2OV9kYWNfbmlkcywKKwkJLmhwX25pZCA9IDB4MDMsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjlfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjMjY5X21vZGVzLAorCQkudW5zb2xfZXZlbnQgPSBhbGMyNjlfbGFwdG9wX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGMyNjl2Yl9sYXB0b3BfZG1pY19zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsYzI2OV9sYXB0b3BfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjY5X0ZVSklUU1VdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjlfZnVqaXRzdV9taXhlciB9LAotCQkuY2FwX21peGVyID0gYWxjMjY5X2VwY19jYXB0dXJlX21peGVyLAorCQkuY2FwX21peGVyID0gYWxjMjY5X2xhcHRvcF9kaWdpdGFsX2NhcHR1cmVfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjlfaW5pdF92ZXJicywKLQkJCQlhbGMyNjlfZWVlcGNfZG1pY19pbml0X3ZlcmJzIH0sCisJCQkJYWxjMjY5X2xhcHRvcF9kbWljX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjlfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGMyNjlfZGFjX25pZHMsCiAJCS5ocF9uaWQgPSAweDAzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY5X21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OV9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2VlZXBjX3Vuc29sX2V2ZW50LAotCQkuc2V0dXAgPSBhbGMyNjlfZWVlcGNfZG1pY19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzI2OV9lZWVwY19pbml0aG9vaywKKwkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2xhcHRvcF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjMjY5X2xhcHRvcF9kbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2xhcHRvcF9pbml0aG9vaywKIAl9LAogCVtBTEMyNjlfTElGRUJPT0tdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjlfbGlmZWJvb2tfbWl4ZXIgfSwKQEAgLTEzNzQxLDYgKzE0MDcwLDcgQEAKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWM7CiAJaW50IGJvYXJkX2NvbmZpZzsKIAlpbnQgZXJyOworCWludCBpc19hbGMyNjl2YiA9IDA7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMTM3NTcsNiArMTQwODcsNyBAQAogCQkJYWxjX2ZyZWUoY29kZWMpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KKwkJaXNfYWxjMjY5dmIgPSAxOwogCX0KIAogCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBBTEMyNjlfTU9ERUxfTEFTVCwKQEAgLTEzNzkyLDcgKzE0MTIzLDcgQEAKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzI2OV9BVVRPKQogCQlzZXR1cF9wcmVzZXQoY29kZWMsICZhbGMyNjlfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIAotCWlmIChjb2RlYy0+c3Vic3lzdGVtX2lkID09IDB4MTdhYTNiZjgpIHsKKwlpZiAoYm9hcmRfY29uZmlnID09IEFMQzI2OV9RVUFOVEFfRkwxKSB7CiAJCS8qIER1ZSB0byBhIGhhcmR3YXJlIHByb2JsZW0gb24gTGVub3ZvIElkZWFkcGFkLCB3ZSBuZWVkIHRvCiAJCSAqIGZpeCB0aGUgc2FtcGxlIHJhdGUgb2YgYW5hbG9nIEkvTyB0byA0NC4xa0h6CiAJCSAqLwpAQCAtMTM4MDUsOSArMTQxMzYsMTYgQEAKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZhbGMyNjlfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfY2FwdHVyZSA9ICZhbGMyNjlfcGNtX2RpZ2l0YWxfY2FwdHVyZTsKIAotCXNwZWMtPmFkY19uaWRzID0gYWxjMjY5X2FkY19uaWRzOwotCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjMjY5X2FkY19uaWRzKTsKLQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzI2OV9jYXBzcmNfbmlkczsKKwlpZiAoIWlzX2FsYzI2OXZiKSB7CisJCXNwZWMtPmFkY19uaWRzID0gYWxjMjY5X2FkY19uaWRzOworCQlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzI2OV9hZGNfbmlkcyk7CisJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjY5X2NhcHNyY19uaWRzOworCX0gZWxzZSB7CisJCXNwZWMtPmFkY19uaWRzID0gYWxjMjY5dmJfYWRjX25pZHM7CisJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjMjY5dmJfYWRjX25pZHMpOworCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzI2OXZiX2NhcHNyY19uaWRzOworCX0KKwogCWlmICghc3BlYy0+Y2FwX21peGVyKQogCQlzZXRfY2FwdHVyZV9taXhlcihjb2RlYyk7CiAJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCk7CkBAIC0xMzgyMSw3ICsxNDE1OSw2IEBACiAJaWYgKCFzcGVjLT5sb29wYmFjay5hbXBsaXN0KQogCQlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gYWxjMjY5X2xvb3BiYWNrczsKICNlbmRpZgotCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gcHJpbnRfcmVhbHRla19jb2VmOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDY4NCw3ICsxNTAyMSw3IEBACiAJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4NjFfYWRjX25pZHMpOwogCXNldF9jYXB0dXJlX21peGVyKGNvZGVjKTsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDBlLCAweDBmLCAweDBiKTsKKwlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgwZSwgMHgwZiwgMHgwYiwgMCk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE0OTM5LDEzICsxNTI3NiwxNiBAQAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwMzsKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBhbGNfcGF0Y2hfb3BzOwotCWlmIChib2FyZF9jb25maWcgPT0gQUxDODYxX0FVVE8pCisJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM4NjFfQVVUTykgewogCQlzcGVjLT5pbml0X2hvb2sgPSBhbGM4NjFfYXV0b19pbml0OwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwkJc3BlYy0+cG93ZXJfaG9vayA9IGFsY19wb3dlcl9lYXBkOworI2VuZGlmCisJfQorI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAlpZiAoIXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QpCiAJCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSBhbGM4NjFfbG9vcGJhY2tzOwogI2VuZGlmCi0JY29kZWMtPnByb2Nfd2lkZ2V0X2hvb2sgPSBwcmludF9yZWFsdGVrX2NvZWY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1NTcyLDcgKzE1OTEyLDcgQEAKIHN0YXRpYyBpbnQgYWxjODYxdmRfYXV0b19jcmVhdGVfaW5wdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKLQlyZXR1cm4gYWxjX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoY29kZWMsIGNmZywgMHgxNSwgMHgyMiwgMCk7CisJcmV0dXJuIGFsY19hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKGNvZGVjLCBjZmcsIDB4MTUsIDB4MDksIDApOwogfQogCiAKQEAgLTE1ODA4LDcgKzE2MTQ4LDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0KTsKKwlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCwgMCk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE1OTI1LDcgKzE2MjY1LDYgQEAKIAlpZiAoIXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QpCiAJCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSBhbGM4NjF2ZF9sb29wYmFja3M7CiAjZW5kaWYKLQljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKIAogCXJldHVybiAwOwogfQpAQCAtMTYzOTIsMTMgKzE2NzMxLDYgQEAKIAkvKiBBREM6IG11dGUgYW1wIGxlZnQgYW5kIHJpZ2h0ICovCiAJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKIAl7MHgwOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAotCS8qIEZyb250IG1peGVyOiB1bm11dGUgaW5wdXQvb3V0cHV0IGFtcCBsZWZ0IGFuZCByaWdodCAodm9sdW1lID0gMCkgKi8KLQotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKIAogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCkBAIC0xNjQ0OCw2ICsxNjc4MCwyOCBAQAogCXsgfQogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjNfaW5pdF92ZXJic1tdID0geworCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNzJfaW5pdF92ZXJic1tdID0geworCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJeyB9Cit9OworCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2Ml9zdWVfaW5pdF92ZXJic1tdID0gewogCXsweDE0LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfEFMQzg4MF9GUk9OVF9FVkVOVH0sCiAJezB4MWIsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58QUxDODgwX0hQX0VWRU5UfSwKQEAgLTE2NDY3LDYxICsxNjgyMSw2IEBACiAJe30KIH07CiAKLS8qCi0gKiBnZW5lcmljIGluaXRpYWxpemF0aW9uIG9mIEFEQywgaW5wdXQgbWl4ZXJzIGFuZCBvdXRwdXQgbWl4ZXJzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYyX2F1dG9faW5pdF92ZXJic1tdID0gewotCS8qCi0JICogVW5tdXRlIEFEQyBhbmQgc2V0IHRoZSBkZWZhdWx0IGlucHV0IHRvIG1pYy1pbgotCSAqLwotCXsweDA5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCi0JezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCi0JLyogVW5tdXRlIGlucHV0IGFtcHMgKENELCBMaW5lIEluLCBNaWMgMSAmIE1pYyAyKSBvZiB0aGUgYW5hbG9nLWxvb3BiYWNrCi0JICogbWl4ZXIgd2lkZ2V0Ci0JICogTm90ZTogUEFTRCBtb3RoZXJib2FyZHMgdXNlcyB0aGUgTGluZSBJbiAyIGFzIHRoZSBpbnB1dCBmb3IgZnJvbnQKLQkgKiBwYW5lbCBtaWMgKG1pYyAyKQotCSAqLwotCS8qIEFtcCBJbmRpY2VzOiBNaWMxID0gMCwgTWljMiA9IDEsIExpbmUxID0gMiwgTGluZTIgPSAzLCBDRCA9IDQgKi8KLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCi0KLQkvKgotCSAqIFNldCB1cCBvdXRwdXQgbWl4ZXJzICgweDBjIC0gMHgwZikKLQkgKi8KLQkvKiBzZXQgdm9sPTAgdG8gb3V0cHV0IG1peGVycyAqLwotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCi0JLyogc2V0IHVwIGlucHV0IGFtcHMgZm9yIGFuYWxvZyBsb29wYmFjayAqLwotCS8qIEFtcCBJbmRpY2VzOiBEQUMgPSAwLCBtaXhlciA9IDEgKi8KLQl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQotCi0JLyogRklYTUU6IHVzZSBtYXRyaXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCi0JLyogTWl4ZXIgZWxlbWVudHM6IDB4MTgsIDE5LCAxYSwgMWIsIDFjLCAxZCwgMTQsIDE1LCAxNiwgMTcsIDBiICovCi0JLyogSW5wdXQgbWl4ZXIgKi8KLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsgfQotfTsKLQotLyogYWRkaXRpb25hbCB2ZXJicyBmb3IgQUxDNjYzICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2M19hdXRvX2luaXRfdmVyYnNbXSA9IHsKLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCXsgfQotfTsKLQogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjNfbTUxdmFfaW5pdF92ZXJic1tdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCiAJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKQEAgLTE3MjcyLDYgKzE3NTcxLDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMmY0LCAiREVMTCBaTTEiLCBBTEMyNzJfREVMTF9aTTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEwMDAsICJBU1VTIE41MFZtIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEwOTIsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExNzMsICJBU1VTIEs3M0puIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExYzMsICJBU1VTIE03MFYiLCBBTEM2NjNfQVNVU19NT0RFMyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFkMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFmMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCkBAIC0xNzMwNyw2ICsxNzYwNyw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg5MywgIkFTVVMgTTUwVm0iLCBBTEM2NjNfQVNVU19NT0RFMyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg5NCwgIkFTVVMgWDU1IiwgQUxDNjYzX0FTVVNfTU9ERTMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4YjMsICJBU1VTIE44MFZjIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4YzMsICJBU1VTIFZYNSIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOGQzLCAiQVNVUyBOODFUZSIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOGYzLCAiQVNVUyBONTA1VHAiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTkwMywgIkFTVVMgRjVHTCIsIEFMQzY2M19BU1VTX01PREUxKSwKQEAgLTE3MzM0LDYgKzE3NjM1LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjYTAwLCAiU2Ftc3VuZyBOQzEwIiwgQUxDMjcyX1NBTVNVTkdfTkMxMCksCiAJU05EX1BDSV9RVUlSSygweDE0NTgsIDB4YTAwMiwgIkdpZ2FieXRlIDk0NUdDTS1TMkwiLAogCQkgICAgICBBTEM2NjJfM1NUXzZjaF9ESUcpLAorCVNORF9QQ0lfUVVJUksoMHgxNTJkLCAweDIzMDQsICJRdWFudGEgV0gxIiwgQUxDNjYzX0FTVVNfSDEzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTU2NSwgMHg4MjBmLCAiQmlvc3RhciBUQTc4MEcgTTIrIiwgQUxDNjYyXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTYzMSwgMHhjMTBjLCAiUEIgUlM2NSIsIEFMQzY2M19BU1VTX001MVZBKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgxMDFlLCAiTGVub3ZvIiwgQUxDNjYyX0xFTk9WT18xMDFFKSwKQEAgLTE3OTUyLDE1ICsxODI1NCwyMyBAQAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAotCWFkZF92ZXJiKHNwZWMsIGFsYzY2Ml9hdXRvX2luaXRfdmVyYnMpOwotCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NjMpCi0JCWFkZF92ZXJiKHNwZWMsIGFsYzY2M19hdXRvX2luaXRfdmVyYnMpOworCWFkZF92ZXJiKHNwZWMsIGFsYzY2Ml9pbml0X3ZlcmJzKTsKKwlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwMjcyIHx8IGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2MyB8fAorCSAgICBjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NjUpCisJCWFkZF92ZXJiKHNwZWMsIGFsYzY2M19pbml0X3ZlcmJzKTsKKworCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzAyNzIpCisJCWFkZF92ZXJiKHNwZWMsIGFsYzI3Ml9pbml0X3ZlcmJzKTsKIAogCWVyciA9IGFsY19hdXRvX2FkZF9taWNfYm9vc3QoY29kZWMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQpOworCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzAyNzIgfHwgY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjYzIHx8CisJICAgIGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2NSB8fCBjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NzApCisJICAgIGFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0LCAweDIxKTsKKwllbHNlCisJICAgIGFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0LCAwKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTgwNDYsMTEgKzE4MzU2LDIwIEBACiAKIAlpZiAoIXNwZWMtPmNhcF9taXhlcikKIAkJc2V0X2NhcHR1cmVfbWl4ZXIoY29kZWMpOwotCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NjIpCi0JCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOwotCWVsc2UKLQkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCk7CiAKKwlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKKwljYXNlIDB4MTBlYzA2NjI6CisJCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOworCQlicmVhazsKKwljYXNlIDB4MTBlYzAyNzI6CisJY2FzZSAweDEwZWMwNjYzOgorCWNhc2UgMHgxMGVjMDY2NToKKwkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCk7CisJCWJyZWFrOworCWNhc2UgMHgxMGVjMDI3MzoKKwkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDMsIEhEQV9JTlBVVCk7CisJCWJyZWFrOworCX0KIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MDI7CiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gYWxjX3BhdGNoX29wczsKQEAgLTE4MDYwLDcgKzE4Mzc5LDYgQEAKIAlpZiAoIXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QpCiAJCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSBhbGM2NjJfbG9vcGJhY2tzOwogI2VuZGlmCi0JY29kZWMtPnByb2Nfd2lkZ2V0X2hvb2sgPSBwcmludF9yZWFsdGVrX2NvZWY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4MTAxLDYgKzE4NDE5LDggQEAKIAl7IC5pZCA9IDB4MTBlYzA2NjIsIC5yZXYgPSAweDEwMDEwMSwgLm5hbWUgPSAiQUxDNjYyIHJldjEiLAogCSAgLnBhdGNoID0gcGF0Y2hfYWxjNjYyIH0sCiAJeyAuaWQgPSAweDEwZWMwNjYzLCAubmFtZSA9ICJBTEM2NjMiLCAucGF0Y2ggPSBwYXRjaF9hbGM2NjIgfSwKKwl7IC5pZCA9IDB4MTBlYzA2NjUsIC5uYW1lID0gIkFMQzY2NSIsIC5wYXRjaCA9IHBhdGNoX2FsYzY2MiB9LAorCXsgLmlkID0gMHgxMGVjMDY3MCwgLm5hbWUgPSAiQUxDNjcwIiwgLnBhdGNoID0gcGF0Y2hfYWxjNjYyIH0sCiAJeyAuaWQgPSAweDEwZWMwODgwLCAubmFtZSA9ICJBTEM4ODAiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODAgfSwKIAl7IC5pZCA9IDB4MTBlYzA4ODIsIC5uYW1lID0gIkFMQzg4MiIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MiB9LAogCXsgLmlkID0gMHgxMGVjMDg4MywgLm5hbWUgPSAiQUxDODgzIiwgLnBhdGNoID0gcGF0Y2hfYWxjODgyIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpMzA1NC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaTMwNTQuYwppbmRleCA0M2I0MzZjLi5mNDE5ZWU4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpMzA1NC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2kzMDU0LmMKQEAgLTEyMiw2ICsxMjIsNyBAQAogI2RlZmluZSBTSTMwNTRfS0NPTlRST0woa25hbWUscmVnLG1hc2spIHsgXAogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCiAJLm5hbWUgPSBrbmFtZSwgXAorCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgcmVnLCBcCiAJLmluZm8gPSBzaTMwNTRfc3dpdGNoX2luZm8sIFwKIAkuZ2V0ICA9IHNpMzA1NF9zd2l0Y2hfZ2V0LCBcCiAJLnB1dCAgPSBzaTMwNTRfc3dpdGNoX3B1dCwgXApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IDc5OWJhMjUuLjhjNDE2YmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTU2OCw2ICs1NjgsMTEgQEAKIAkweDBmLCAweDEwLCAweDExLCAweDFmLCAweDIwLAogfTsKIAorc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDg4eHh4X3Bpbl9uaWRzWzEwXSA9IHsKKwkweDBhLCAweDBiLCAweDBjLCAweDBkLAorCTB4MGYsIDB4MTEsIDB4MWYsIDB4MjAsCit9OworCiAjZGVmaW5lIFNUQUM5MkhENzFCWFhfTlVNX1BJTlMgMTMKIHN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc180cG9ydFtTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDAwLApAQCAtMjY4OCw3ICsyNjkzLDcgQEAKIHN0YWNfY29udHJvbF9uZXcoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsCiAJCSBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa3RlbXAsCiAJCSBjb25zdCBjaGFyICpuYW1lLAotCQkgaGRhX25pZF90IG5pZCkKKwkJIHVuc2lnbmVkIGludCBzdWJkZXYpCiB7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CiAKQEAgLTI3MDQsOCArMjcwOSw3IEBACiAJCXNwZWMtPmtjdGxzLmFsbG9jZWQtLTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWlmIChuaWQpCi0JCWtuZXctPnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCBuaWQ7CisJa25ldy0+c3ViZGV2aWNlID0gc3ViZGV2OwogCXJldHVybiBrbmV3OwogfQogCkBAIC0yNzE1LDcgKzI3MTksNyBAQAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwpCiB7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXcgPSBzdGFjX2NvbnRyb2xfbmV3KHNwZWMsIGt0ZW1wLCBuYW1lLAotCQkJCQkJCSBnZXRfYW1wX25pZF8odmFsKSk7CisJCQkJCQkJIEhEQV9TVUJERVZfQU1QX0ZMQUcpOwogCWlmICgha25ldykKIAkJcmV0dXJuIC1FTk9NRU07CiAJa25ldy0+aW5kZXggPSBpZHg7CkBAIC0yODc0LDYgKzI4NzgsMTMgQEAKIAogCWNvbm5fbGVuID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubiwKIAkJCQkJICAgSERBX01BWF9DT05ORUNUSU9OUyk7CisJLyogOTJIRDg4OiB0cmFjZSBiYWNrIHVwIHRoZSBsaW5rIG9mIG5pZHMgdG8gZmluZCB0aGUgREFDICovCisJd2hpbGUgKGNvbm5fbGVuID09IDEgJiYgKGdldF93Y2Fwc190eXBlKGdldF93Y2Fwcyhjb2RlYywgY29ublswXSkpCisJCQkJCSE9IEFDX1dJRF9BVURfT1VUKSkgeworCQluaWQgPSBjb25uWzBdOworCQljb25uX2xlbiA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsIGNvbm4sCisJCQlIREFfTUFYX0NPTk5FQ1RJT05TKTsKKwl9CiAJZm9yIChqID0gMDsgaiA8IGNvbm5fbGVuOyBqKyspIHsKIAkJd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIGNvbm5bal0pOwogCQl3dHlwZSA9IGdldF93Y2Fwc190eXBlKHdjYXBzKTsKQEAgLTQxNjAsMzQgKzQxNzEsNTIgQEAKIHN0YXRpYyB2b2lkIHN0YWNfdG9nZ2xlX3Bvd2VyX21hcChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKIAkJCQkgIGludCBlbmFibGUpOwogCitzdGF0aWMgaW5saW5lIGludCBnZXRfaW50X2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSwKKwkJCSAgICAgICBpbnQgKnZhbHApCit7CisJY29uc3QgY2hhciAqcDsKKwlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywga2V5KTsKKwlpZiAocCkgeworCQl1bnNpZ25lZCBsb25nIHZhbDsKKwkJaWYgKCFzdHJpY3Rfc3RydG91bChwLCAwLCAmdmFsKSkgeworCQkJKnZhbHAgPSB2YWw7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwogLyogb3ZlcnJpZGUgc29tZSBoaW50cyBmcm9tIHRoZSBod2RlcCBlbnRyeSAqLwogc3RhdGljIHZvaWQgc3RhY19zdG9yZV9oaW50cyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWNvbnN0IGNoYXIgKnA7CiAJaW50IHZhbDsKIAogCXZhbCA9IHNuZF9oZGFfZ2V0X2Jvb2xfaGludChjb2RlYywgImhwX2RldGVjdCIpOwogCWlmICh2YWwgPj0gMCkKIAkJc3BlYy0+aHBfZGV0ZWN0ID0gdmFsOwotCXAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCAiZ3Bpb19tYXNrIik7Ci0JaWYgKHApIHsKLQkJc3BlYy0+Z3Bpb19tYXNrID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCk7CisJaWYgKGdldF9pbnRfaGludChjb2RlYywgImdwaW9fbWFzayIsICZzcGVjLT5ncGlvX21hc2spKSB7CiAJCXNwZWMtPmVhcGRfbWFzayA9IHNwZWMtPmdwaW9fZGlyID0gc3BlYy0+Z3Bpb19kYXRhID0KIAkJCXNwZWMtPmdwaW9fbWFzazsKIAl9Ci0JcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJncGlvX2RpciIpOwotCWlmIChwKQotCQlzcGVjLT5ncGlvX2RpciA9IHNpbXBsZV9zdHJ0b3VsKHAsIE5VTEwsIDApICYgc3BlYy0+Z3Bpb19tYXNrOwotCXAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCAiZ3Bpb19kYXRhIik7Ci0JaWYgKHApCi0JCXNwZWMtPmdwaW9fZGF0YSA9IHNpbXBsZV9zdHJ0b3VsKHAsIE5VTEwsIDApICYgc3BlYy0+Z3Bpb19tYXNrOwotCXAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCAiZWFwZF9tYXNrIik7Ci0JaWYgKHApCi0JCXNwZWMtPmVhcGRfbWFzayA9IHNpbXBsZV9zdHJ0b3VsKHAsIE5VTEwsIDApICYgc3BlYy0+Z3Bpb19tYXNrOworCWlmIChnZXRfaW50X2hpbnQoY29kZWMsICJncGlvX2RpciIsICZzcGVjLT5ncGlvX2RpcikpCisJCXNwZWMtPmdwaW9fbWFzayAmPSBzcGVjLT5ncGlvX21hc2s7CisJaWYgKGdldF9pbnRfaGludChjb2RlYywgImdwaW9fZGF0YSIsICZzcGVjLT5ncGlvX2RhdGEpKQorCQlzcGVjLT5ncGlvX2RpciAmPSBzcGVjLT5ncGlvX21hc2s7CisJaWYgKGdldF9pbnRfaGludChjb2RlYywgImVhcGRfbWFzayIsICZzcGVjLT5lYXBkX21hc2spKQorCQlzcGVjLT5lYXBkX21hc2sgJj0gc3BlYy0+Z3Bpb19tYXNrOworCWlmIChnZXRfaW50X2hpbnQoY29kZWMsICJncGlvX211dGUiLCAmc3BlYy0+Z3Bpb19tdXRlKSkKKwkJc3BlYy0+Z3Bpb19tdXRlICY9IHNwZWMtPmdwaW9fbWFzazsKIAl2YWwgPSBzbmRfaGRhX2dldF9ib29sX2hpbnQoY29kZWMsICJlYXBkX3N3aXRjaCIpOwogCWlmICh2YWwgPj0gMCkKIAkJc3BlYy0+ZWFwZF9zd2l0Y2ggPSB2YWw7CisJZ2V0X2ludF9oaW50KGNvZGVjLCAiZ3Bpb19sZWRfcG9sYXJpdHkiLCAmc3BlYy0+Z3Bpb19sZWRfcG9sYXJpdHkpOworCWlmIChnZXRfaW50X2hpbnQoY29kZWMsICJncGlvX2xlZCIsICZzcGVjLT5ncGlvX2xlZCkpIHsKKwkJc3BlYy0+Z3Bpb19tYXNrIHw9IHNwZWMtPmdwaW9fbGVkOworCQlzcGVjLT5ncGlvX2RpciB8PSBzcGVjLT5ncGlvX2xlZDsKKwkJaWYgKHNwZWMtPmdwaW9fbGVkX3BvbGFyaXR5KQorCQkJc3BlYy0+Z3Bpb19kYXRhIHw9IHNwZWMtPmdwaW9fbGVkOworCX0KIH0KIAogc3RhdGljIGludCBzdGFjOTJ4eF9pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtNDMzNCw2ICs0MzYzLDEyIEBACiAJCWlmIChlbmFibGVfcGluX2RldGVjdChjb2RlYywgbmlkLCBTVEFDX1BXUl9FVkVOVCkpCiAJCQlzdGFjX2lzc3VlX3Vuc29sX2V2ZW50KGNvZGVjLCBuaWQpOwogCX0KKworI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwkvKiBzeW5jIG11dGUgTEVEICovCisJaWYgKHNwZWMtPmdwaW9fbGVkICYmIGNvZGVjLT5wYXRjaF9vcHMuY2hlY2tfcG93ZXJfc3RhdHVzKQorCQljb2RlYy0+cGF0Y2hfb3BzLmNoZWNrX3Bvd2VyX3N0YXR1cyhjb2RlYywgMHgwMSk7CisjZW5kaWYJCiAJaWYgKHNwZWMtPmRhY19saXN0KQogCQlzdGFjOTJ4eF9wb3dlcl9kb3duKGNvZGVjKTsKIAlyZXR1cm4gMDsKQEAgLTQzNzIsMTggKzQ0MDcsOCBAQAogc3RhdGljIHZvaWQgc3RhYzkyeHhfc2h1dHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IGk7Ci0JaGRhX25pZF90IG5pZDsKIAotCS8qIHJlc2V0IGVhY2ggcGluIGJlZm9yZSBwb3dlcmluZyBkb3duIERBQy9BREMgdG8gYXZvaWQgY2xpY2sgbm9pc2UgKi8KLQluaWQgPSBjb2RlYy0+c3RhcnRfbmlkOwotCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+bnVtX25vZGVzOyBpKyssIG5pZCsrKSB7Ci0JCXVuc2lnbmVkIGludCB3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKTsKLQkJdW5zaWduZWQgaW50IHdpZF90eXBlID0gZ2V0X3djYXBzX3R5cGUod2NhcHMpOwotCQlpZiAod2lkX3R5cGUgPT0gQUNfV0lEX1BJTikKLQkJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7Ci0JfQorCXNuZF9oZGFfc2h1dHVwX3BpbnMoY29kZWMpOwogCiAJaWYgKHNwZWMtPmVhcGRfbWFzaykKIAkJc3RhY19ncGlvX3NldChjb2RlYywgc3BlYy0+Z3Bpb19tYXNrLApAQCAtNDczNSwxOSArNDc2MCwxNCBAQAogc3RhdGljIHZvaWQgc2V0X2hwX2xlZF9ncGlvKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7Ci0JY2FzZSAweDExMWQ3NjA4OgotCQkvKiBHUElPIDAgKi8KLQkJc3BlYy0+Z3Bpb19sZWQgPSAweDAxOwotCQlicmVhazsKLQljYXNlIDB4MTExZDc2MDA6Ci0JY2FzZSAweDExMWQ3NjAxOgotCWNhc2UgMHgxMTFkNzYwMjoKLQljYXNlIDB4MTExZDc2MDM6Ci0JCS8qIEdQSU8gMyAqLwotCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDg7Ci0JCWJyZWFrOwotCX0KKwl1bnNpZ25lZCBpbnQgZ3BpbzsKKworCWdwaW8gPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIGNvZGVjLT5hZmcsIEFDX1BBUl9HUElPX0NBUCk7CisJZ3BpbyAmPSBBQ19HUElPX0lPX0NPVU5UOworCWlmIChncGlvID4gMykKKwkJc3BlYy0+Z3Bpb19sZWQgPSAweDA4OyAvKiBHUElPIDMgKi8KKwllbHNlCisJCXNwZWMtPmdwaW9fbGVkID0gMHgwMTsgLyogR1BJTyAwICovCiB9CiAKIC8qCkBAIC00NzcwLDcgKzQ3OTAsNyBAQAogICogTmVlZCBtb3JlIGluZm9ybWF0aW9uIG9uIHdoZXRoZXIgaXQgaXMgdHJ1ZSBhY3Jvc3MgdGhlIGVudGlyZSBzZXJpZXMuCiAgKiAtLSBrdW5hbAogICovCi1zdGF0aWMgaW50IGZpbmRfbXV0ZV9sZWRfZ3BpbyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyBpbnQgZmluZF9tdXRlX2xlZF9ncGlvKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgZGVmYXVsdF9wb2xhcml0eSkKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWNvbnN0IHN0cnVjdCBkbWlfZGV2aWNlICpkZXYgPSBOVUxMOwpAQCAtNDc5Nyw3ICs0ODE3LDcgQEAKIAkJICovCiAJCWlmICghaHBfYmxpa2Vfc3lzdGVtKGNvZGVjLT5zdWJzeXN0ZW1faWQpKSB7CiAJCQlzZXRfaHBfbGVkX2dwaW8oY29kZWMpOwotCQkJc3BlYy0+Z3Bpb19sZWRfcG9sYXJpdHkgPSAxOworCQkJc3BlYy0+Z3Bpb19sZWRfcG9sYXJpdHkgPSBkZWZhdWx0X3BvbGFyaXR5OwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9CkBAIC00ODk1LDYgKzQ5MTUsMTEgQEAKIAkJCXN0YWNfaXNzdWVfdW5zb2xfZXZlbnQoY29kZWMsCiAJCQkJCSAgICAgICBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbMF0pOwogCX0KKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCisJLyogc3luYyBtdXRlIExFRCAqLworCWlmIChzcGVjLT5ncGlvX2xlZCAmJiBjb2RlYy0+cGF0Y2hfb3BzLmNoZWNrX3Bvd2VyX3N0YXR1cykKKwkJY29kZWMtPnBhdGNoX29wcy5jaGVja19wb3dlcl9zdGF0dXMoY29kZWMsIDB4MDEpOworI2VuZGlmCQogCXJldHVybiAwOwogfQogCkBAIC00OTE0LDQzICs0OTM5LDI5IEBACiAJCQkJCSAgICAgIGhkYV9uaWRfdCBuaWQpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaSwgbXV0ZWQgPSAxOwogCi0JaWYgKG5pZCA9PSAweDEwKSB7Ci0JCWlmIChzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCBuaWQsIDAsIEhEQV9PVVRQVVQsIDApICYKLQkJICAgIEhEQV9BTVBfTVVURSkKLQkJCXNwZWMtPmdwaW9fZGF0YSAmPSB+c3BlYy0+Z3Bpb19sZWQ7IC8qIG9yYW5nZSAqLwotCQllbHNlCi0JCQlzcGVjLT5ncGlvX2RhdGEgfD0gc3BlYy0+Z3Bpb19sZWQ7IC8qIHdoaXRlICovCi0KLQkJaWYgKCFzcGVjLT5ncGlvX2xlZF9wb2xhcml0eSkgewotCQkJLyogTEVEIHN0YXRlIGlzIGludmVydGVkIG9uIHRoZXNlIHN5c3RlbXMgKi8KLQkJCXNwZWMtPmdwaW9fZGF0YSBePSBzcGVjLT5ncGlvX2xlZDsKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bXVsdGlvdXQubnVtX2RhY3M7IGkrKykgeworCQluaWQgPSBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXTsKKwkJaWYgKCEoc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgbmlkLCAwLCBIREFfT1VUUFVULCAwKSAmCisJCSAgICAgIEhEQV9BTVBfTVVURSkpIHsKKwkJCW11dGVkID0gMDsgLyogc29tZXRoaW5nIGhlYXJkICovCisJCQlicmVhazsKIAkJfQorCX0KKwlpZiAobXV0ZWQpCisJCXNwZWMtPmdwaW9fZGF0YSAmPSB+c3BlYy0+Z3Bpb19sZWQ7IC8qIG9yYW5nZSAqLworCWVsc2UKKwkJc3BlYy0+Z3Bpb19kYXRhIHw9IHNwZWMtPmdwaW9fbGVkOyAvKiB3aGl0ZSAqLwogCi0JCXN0YWNfZ3Bpb19zZXQoY29kZWMsIHNwZWMtPmdwaW9fbWFzaywKLQkJCSAgICAgIHNwZWMtPmdwaW9fZGlyLAotCQkJICAgICAgc3BlYy0+Z3Bpb19kYXRhKTsKKwlpZiAoIXNwZWMtPmdwaW9fbGVkX3BvbGFyaXR5KSB7CisJCS8qIExFRCBzdGF0ZSBpcyBpbnZlcnRlZCBvbiB0aGVzZSBzeXN0ZW1zICovCisJCXNwZWMtPmdwaW9fZGF0YSBePSBzcGVjLT5ncGlvX2xlZDsKIAl9CiAKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZHQ5MmhkODN4eHhfaHBfY2hlY2tfcG93ZXJfc3RhdHVzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCQkgICAgICBoZGFfbmlkX3QgbmlkKQotewotCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0KLQlpZiAobmlkICE9IDB4MTMpCi0JCXJldHVybiAwOwotCWlmIChzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCBuaWQsIDAsIEhEQV9PVVRQVVQsIDApICYgSERBX0FNUF9NVVRFKQotCQlzcGVjLT5ncGlvX2RhdGEgfD0gc3BlYy0+Z3Bpb19sZWQ7IC8qIG11dGUgTEVEIG9uICovCi0JZWxzZQotCQlzcGVjLT5ncGlvX2RhdGEgJj0gfnNwZWMtPmdwaW9fbGVkOyAvKiBtdXRlIExFRCBvZmYgKi8KIAlzdGFjX2dwaW9fc2V0KGNvZGVjLCBzcGVjLT5ncGlvX21hc2ssIHNwZWMtPmdwaW9fZGlyLCBzcGVjLT5ncGlvX2RhdGEpOwotCiAJcmV0dXJuIDA7CiB9Ci0KICNlbmRpZgogCiBzdGF0aWMgaW50IHN0YWM5Mnh4X3N1c3BlbmQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKQEAgLTUyNzIsNyArNTI4Myw2IEBACiAJaGRhX25pZF90IGNvbm5bU1RBQzkySEQ4M19EQUNfQ09VTlQgKyAxXTsKIAlpbnQgZXJyOwogCWludCBudW1fZGFjczsKLQloZGFfbmlkX3QgbmlkOwogCiAJc3BlYyAgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC01MzExLDcgKzUzMjEsMTggQEAKIAkJCQlzdGFjOTJoZDgzeHh4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7CiAKIAlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKKwljYXNlIDB4MTExZDc2NjY6CisJY2FzZSAweDExMWQ3NjY3OgorCWNhc2UgMHgxMTFkNzY2ODoKKwljYXNlIDB4MTExZDc2Njk6CisJCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTJoZDg4eHh4X3Bpbl9uaWRzKTsKKwkJc3BlYy0+cGluX25pZHMgPSBzdGFjOTJoZDg4eHh4X3Bpbl9uaWRzOworCQlzcGVjLT5tb25vX25pZCA9IDA7CisJCXNwZWMtPmRpZ2JlZXBfbmlkID0gMDsKKwkJc3BlYy0+bnVtX3B3cnMgPSAwOworCQlicmVhazsKIAljYXNlIDB4MTExZDc2MDQ6CisJY2FzZSAweDExMWQ3NmQ0OgogCWNhc2UgMHgxMTFkNzYwNToKIAljYXNlIDB4MTExZDc2ZDU6CiAJCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPT0gU1RBQ185MkhEODNYWFhfUFdSX1JFRikKQEAgLTUzMjIsOCArNTM0MywxMCBAQAogCiAJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5Mnh4X3BhdGNoX29wczsKIAotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPT0gU1RBQ185MkhEODNYWFhfSFApCi0JCXNwZWMtPmdwaW9fbGVkID0gMHgwMTsKKwlpZiAoZmluZF9tdXRlX2xlZF9ncGlvKGNvZGVjLCAwKSkKKwkJc25kX3ByaW50ZCgibXV0ZSBMRUQgZ3BpbyAlZCBwb2xhcml0eSAlZFxuIiwKKwkJCQlzcGVjLT5ncGlvX2xlZCwKKwkJCQlzcGVjLT5ncGlvX2xlZF9wb2xhcml0eSk7CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJaWYgKHNwZWMtPmdwaW9fbGVkKSB7CkBAIC01MzMyLDcgKzUzNTUsNyBAQAogCQlzcGVjLT5ncGlvX2RhdGEgfD0gc3BlYy0+Z3Bpb19sZWQ7CiAJCS8qIHJlZ2lzdGVyIGNoZWNrX3Bvd2VyX3N0YXR1cyBjYWxsYmFjay4gKi8KIAkJY29kZWMtPnBhdGNoX29wcy5jaGVja19wb3dlcl9zdGF0dXMgPQotCQkJaWR0OTJoZDgzeHh4X2hwX2NoZWNrX3Bvd2VyX3N0YXR1czsKKwkJCXN0YWM5Mnh4X2hwX2NoZWNrX3Bvd2VyX3N0YXR1czsKIAl9CiAjZW5kaWYJCiAKQEAgLTUzNTIsMjQgKzUzNzUsMjEgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlzd2l0Y2ggKHNwZWMtPmJvYXJkX2NvbmZpZykgewotCWNhc2UgU1RBQ19ERUxMX1MxNDoKLQkJbmlkID0gMHhmOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQluaWQgPSAweGU7Ci0JCWJyZWFrOwotCX0KLQotCW51bV9kYWNzID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwKKwkvKiBkb2NraW5nIG91dHB1dCBzdXBwb3J0ICovCisJbnVtX2RhY3MgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgMHhGLAogCQkJCWNvbm4sIFNUQUM5MkhEODNfREFDX0NPVU5UICsgMSkgLSAxOwotCWlmIChudW1fZGFjcyA8IDApCi0JCW51bV9kYWNzID0gU1RBQzkySEQ4M19EQUNfQ09VTlQ7Ci0KLQkvKiBzZXQgcG9ydCBYIHRvIHNlbGVjdCB0aGUgbGFzdCBEQUMKLQkgKi8KLQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCisJLyogc2tpcCBub24tREFDIGNvbm5lY3Rpb25zICovCisJd2hpbGUgKG51bV9kYWNzID49IDAgJiYKKwkJCShnZXRfd2NhcHNfdHlwZShnZXRfd2NhcHMoY29kZWMsIGNvbm5bbnVtX2RhY3NdKSkKKwkJCQkJIT0gQUNfV0lEX0FVRF9PVVQpKQorCQludW1fZGFjcy0tOworCS8qIHNldCBwb3J0IEUgYW5kIEYgdG8gc2VsZWN0IHRoZSBsYXN0IERBQyAqLworCWlmIChudW1fZGFjcyA+PSAwKSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4RSwgMCwKIAkJCUFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCBudW1fZGFjcyk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4RiwgMCwKKwkJCUFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCBudW1fZGFjcyk7CisJfQogCiAJY29kZWMtPnByb2Nfd2lkZ2V0X2hvb2sgPSBzdGFjOTJoZF9wcm9jX2hvb2s7CiAKQEAgLTU0MzEsNiArNTQ1MSw1NCBAQAogCQlyZXR1cm4gMDsKIH0KIAorLyogSFAgZHY3IGJhc3Mgc3dpdGNoIC0gR1BJTzUgKi8KKyNkZWZpbmUgc3RhY19ocF9iYXNzX2dwaW9faW5mbwlzbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvCitzdGF0aWMgaW50IHN0YWNfaHBfYmFzc19ncGlvX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9ICEhKHNwZWMtPmdwaW9fZGF0YSAmIDB4MjApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YWNfaHBfYmFzc19ncGlvX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1bnNpZ25lZCBpbnQgZ3Bpb19kYXRhOworCisJZ3Bpb19kYXRhID0gKHNwZWMtPmdwaW9fZGF0YSAmIH4weDIwKSB8CisJCSh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA/IDB4MjAgOiAwKTsKKwlpZiAoZ3Bpb19kYXRhID09IHNwZWMtPmdwaW9fZGF0YSkKKwkJcmV0dXJuIDA7CisJc3BlYy0+Z3Bpb19kYXRhID0gZ3Bpb19kYXRhOworCXN0YWNfZ3Bpb19zZXQoY29kZWMsIHNwZWMtPmdwaW9fbWFzaywgc3BlYy0+Z3Bpb19kaXIsIHNwZWMtPmdwaW9fZGF0YSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjX2hwX2Jhc3Nfc3dfY3RybCA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkuaW5mbyA9IHN0YWNfaHBfYmFzc19ncGlvX2luZm8sCisJLmdldCA9IHN0YWNfaHBfYmFzc19ncGlvX2dldCwKKwkucHV0ID0gc3RhY19ocF9iYXNzX2dwaW9fcHV0LAorfTsKKworc3RhdGljIGludCBzdGFjX2FkZF9ocF9iYXNzX3N3aXRjaChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJaWYgKCFzdGFjX2NvbnRyb2xfbmV3KHNwZWMsICZzdGFjX2hwX2Jhc3Nfc3dfY3RybCwKKwkJCSAgICAgICJCYXNzIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMCkpCisJCXJldHVybiAtRU5PTUVNOworCisJc3BlYy0+Z3Bpb19tYXNrIHw9IDB4MjA7CisJc3BlYy0+Z3Bpb19kaXIgfD0gMHgyMDsKKwlzcGVjLT5ncGlvX2RhdGEgfD0gMHgyMDsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBwYXRjaF9zdGFjOTJoZDcxYnh4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjOwpAQCAtNTYwMiw3ICs1NjcwLDYgQEAKIAkJICovCiAJCXNwZWMtPm51bV9zbXV4ZXMgPSAxOwogCQlzcGVjLT5udW1fZG11eGVzID0gMTsKLQkJc3BlYy0+Z3Bpb19sZWQgPSAweDAxOwogCQkvKiBmYWxsdGhyb3VnaCAqLwogCWNhc2UgU1RBQ19IUF9EVjU6CiAJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZCwgMHg5MDE3MDAxMCk7CkBAIC01NjE3LDggKzU2ODQsNiBAQAogCQlzcGVjLT5udW1fZG1pY3MgPSAxOwogCQlzcGVjLT5udW1fZG11eGVzID0gMTsKIAkJc3BlYy0+bnVtX3NtdXhlcyA9IDE7Ci0JCS8qIG9yYW5nZS93aGl0ZSBtdXRlIGxlZCBvbiBHUElPMywgb3JhbmdlPTAsIHdoaXRlPTEgKi8KLQkJc3BlYy0+Z3Bpb19sZWQgPSAweDA4OwogCQlicmVhazsKIAl9CiAKQEAgLTU2NDAsNyArNTcwNSw3IEBACiAJCX0KIAl9CiAKLQlpZiAoZmluZF9tdXRlX2xlZF9ncGlvKGNvZGVjKSkKKwlpZiAoZmluZF9tdXRlX2xlZF9ncGlvKGNvZGVjLCAxKSkKIAkJc25kX3ByaW50ZCgibXV0ZSBMRUQgZ3BpbyAlZCBwb2xhcml0eSAlZFxuIiwKIAkJCQlzcGVjLT5ncGlvX2xlZCwKIAkJCQlzcGVjLT5ncGlvX2xlZF9wb2xhcml0eSk7CkBAIC01Njc0LDYgKzU3MzksMTUgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwkvKiBlbmFibGUgYmFzcyBvbiBIUCBkdjcgKi8KKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnID09IFNUQUNfSFBfRFY1KSB7CisJCXVuc2lnbmVkIGludCBjYXA7CisJCWNhcCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgMHgxLCBBQ19QQVJfR1BJT19DQVApOworCQljYXAgJj0gQUNfR1BJT19JT19DT1VOVDsKKwkJaWYgKGNhcCA+PSA2KQorCQkJc3RhY19hZGRfaHBfYmFzc19zd2l0Y2goY29kZWMpOworCX0KKwogCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gc3RhYzkyaGQ3eF9wcm9jX2hvb2s7CiAKIAlyZXR1cm4gMDsKQEAgLTYxNzIsOCArNjI0NiwxMyBAQAogIAl7IC5pZCA9IDB4ODM4NDc2YTcsIC5uYW1lID0gIlNUQUM5MjU0RCIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MjA1IH0sCiAJeyAuaWQgPSAweDExMWQ3NjAzLCAubmFtZSA9ICI5MkhENzVCM1g1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ3MWJ4eH0sCiAJeyAuaWQgPSAweDExMWQ3NjA0LCAubmFtZSA9ICI5MkhEODNDMVg1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCisJeyAuaWQgPSAweDExMWQ3NmQ0LCAubmFtZSA9ICI5MkhEODNDMUM1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCiAJeyAuaWQgPSAweDExMWQ3NjA1LCAubmFtZSA9ICI5MkhEODFCMVg1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCiAJeyAuaWQgPSAweDExMWQ3NmQ1LCAubmFtZSA9ICI5MkhEODFCMUM1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCisJeyAuaWQgPSAweDExMWQ3NjY2LCAubmFtZSA9ICI5MkhEODhCMyIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkODN4eHh9LAorCXsgLmlkID0gMHgxMTFkNzY2NywgLm5hbWUgPSAiOTJIRDg4QjEiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKKwl7IC5pZCA9IDB4MTExZDc2NjgsIC5uYW1lID0gIjkySEQ4OEIyIiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCisJeyAuaWQgPSAweDExMWQ3NjY5LCAubmFtZSA9ICI5MkhEODhCNCIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkODN4eHh9LAogCXsgLmlkID0gMHgxMTFkNzYwOCwgLm5hbWUgPSAiOTJIRDc1QjJYNSIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkNzFieHh9LAogCXsgLmlkID0gMHgxMTFkNzY3NCwgLm5hbWUgPSAiOTJIRDczRDFYNSIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkNzN4eCB9LAogCXsgLmlkID0gMHgxMTFkNzY3NSwgLm5hbWUgPSAiOTJIRDczQzFYNSIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkNzN4eCB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKaW5kZXggYjcwZTI2YS4uOWRkYzM3MyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCkBAIC01NCw2ICs1NCw4IEBACiAjaW5jbHVkZSAiaGRhX2NvZGVjLmgiCiAjaW5jbHVkZSAiaGRhX2xvY2FsLmgiCiAKKyNkZWZpbmUgTklEX01BUFBJTkcJCSgtMSkKKwogLyogYW1wIHZhbHVlcyAqLwogI2RlZmluZSBBTVBfVkFMX0lEWF9TSElGVAkxOQogI2RlZmluZSBBTVBfVkFMX0lEWF9NQVNLCSgweDBmPDwxOSkKQEAgLTE1Nyw2ICsxNTksMTkgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIHN0cnVjdCB2aWFfc3BlYyAqIHZpYV9uZXdfc3BlYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWM7CisKKwlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3BlYyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWNvZGVjLT5zcGVjID0gc3BlYzsKKwlzcGVjLT5jb2RlYyA9IGNvZGVjOworCXJldHVybiBzcGVjOworfQorCiBzdGF0aWMgZW51bSBWSUFfSERBX0NPREVDIGdldF9jb2RlY190eXBlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXUzMiB2ZW5kb3JfaWQgPSBjb2RlYy0+dmVuZG9yX2lkOwpAQCAtNDQzLDExICs0NTgsMjcgQEAKIAlpZiAoIWtuZXctPm5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmIChnZXRfYW1wX25pZF8odmFsKSkKLQkJa25ldy0+c3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IGdldF9hbXBfbmlkXyh2YWwpOworCQlrbmV3LT5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHOwogCWtuZXctPnByaXZhdGVfdmFsdWUgPSB2YWw7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqdmlhX2Nsb25lX2NvbnRyb2woc3RydWN0IHZpYV9zcGVjICpzcGVjLAorCQkJCQkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKnRtcGwpCit7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisKKwlzbmRfYXJyYXlfaW5pdCgmc3BlYy0+a2N0bHMsIHNpemVvZigqa25ldyksIDMyKTsKKwlrbmV3ID0gc25kX2FycmF5X25ldygmc3BlYy0+a2N0bHMpOworCWlmICgha25ldykKKwkJcmV0dXJuIE5VTEw7CisJKmtuZXcgPSAqdG1wbDsKKwlrbmV3LT5uYW1lID0ga3N0cmR1cCh0bXBsLT5uYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtuZXctPm5hbWUpCisJCXJldHVybiBOVUxMOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCB2aWFfZnJlZV9rY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTEwODgsMjQgKzExMTksOSBAQAogCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHZpYV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IG5pZDsKKwloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJdW5zaWduZWQgaW50IHBpbnNlbDsKIAotCXN3aXRjaCAoc3BlYy0+Y29kZWNfdHlwZSkgewotCWNhc2UgVlQxNzE4UzoKLQkJbmlkID0gMHgzNDsKLQkJYnJlYWs7Ci0JY2FzZSBWVDIwMDJQOgotCQluaWQgPSAweDM1OwotCQlicmVhazsKLQljYXNlIFZUMTgxMjoKLQkJbmlkID0gMHgzZDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOwotCQlicmVhazsKLQl9CiAJLyogdXNlICEhIHRvIHRyYW5zbGF0ZSBjb25uIHNlbCAyIGZvciBWVDE3MThTICovCiAJcGluc2VsID0gISFzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKIAkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05ORUNUX1NFTCwKQEAgLTExMjcsMjkgKzExNDMsMjQgQEAKIAl9CiB9CiAKK3N0YXRpYyBoZGFfbmlkX3Qgc2lkZV9tdXRlX2NoYW5uZWwoc3RydWN0IHZpYV9zcGVjICpzcGVjKQoreworCXN3aXRjaCAoc3BlYy0+Y29kZWNfdHlwZSkgeworCWNhc2UgVlQxNzA4OgkJcmV0dXJuIDB4MWI7CisJY2FzZSBWVDE3MDlfMTBDSDoJcmV0dXJuIDB4Mjk7CisJY2FzZSBWVDE3MDhCXzhDSDoJLyogZmFsbCB0aHJ1ICovCisJY2FzZSBWVDE3MDhTOgkJcmV0dXJuIDB4Mjc7CisJZGVmYXVsdDoJCXJldHVybiAwOworCX0KK30KKwogc3RhdGljIGludCB1cGRhdGVfc2lkZV9tdXRlX3N0YXR1cyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAkvKiBtdXRlIHNpZGUgY2hhbm5lbCAqLwogCXN0cnVjdCB2aWFfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXVuc2lnbmVkIGludCBwYXJtID0gc3BlYy0+aHBfaW5kZXBlbmRlbnRfbW9kZQogCQk/IEFNUF9PVVRfTVVURSA6IEFNUF9PVVRfVU5NVVRFOwotCWhkYV9uaWRfdCBzdzM7Ci0KLQlzd2l0Y2ggKHNwZWMtPmNvZGVjX3R5cGUpIHsKLQljYXNlIFZUMTcwODoKLQkJc3czID0gMHgxYjsKLQkJYnJlYWs7Ci0JY2FzZSBWVDE3MDlfMTBDSDoKLQkJc3czID0gMHgyOTsKLQkJYnJlYWs7Ci0JY2FzZSBWVDE3MDhCXzhDSDoKLQljYXNlIFZUMTcwOFM6Ci0JCXN3MyA9IDB4Mjc7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXN3MyA9IDA7Ci0JCWJyZWFrOwotCX0KKwloZGFfbmlkX3Qgc3czID0gc2lkZV9tdXRlX2NoYW5uZWwoc3BlYyk7CiAKIAlpZiAoc3czKQogCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBzdzMsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCkBAIC0xMTYyLDI4ICsxMTczLDExIEBACiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IHZpYV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKKwloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJdW5zaWduZWQgaW50IHBpbnNlbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CiAJLyogR2V0IEluZGVwZW5kZW50IE1vZGUgaW5kZXggb2YgaGVhZHBob25lIHBpbiB3aWRnZXQgKi8KIAlzcGVjLT5ocF9pbmRlcGVuZGVudF9tb2RlID0gc3BlYy0+aHBfaW5kZXBlbmRlbnRfbW9kZV9pbmRleCA9PSBwaW5zZWwKIAkJPyAxIDogMDsKLQotCXN3aXRjaCAoc3BlYy0+Y29kZWNfdHlwZSkgewotCWNhc2UgVlQxNzE4UzoKLQkJbmlkID0gMHgzNDsKLQkJcGluc2VsID0gcGluc2VsID8gMiA6IDA7IC8qIGluZGVwIEhQIHVzZSBBT1c0IChpbmRleCAyKSAqLwotCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDQ7Ci0JCWJyZWFrOwotCWNhc2UgVlQyMDAyUDoKLQkJbmlkID0gMHgzNTsKLQkJYnJlYWs7Ci0JY2FzZSBWVDE4MTI6Ci0JCW5pZCA9IDB4M2Q7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW5pZCA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKLQkJYnJlYWs7Ci0JfQogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIHBpbnNlbCk7CiAKIAlpZiAoc3BlYy0+bXVsdGlvdXQuaHBfbmlkICYmIHNwZWMtPm11bHRpb3V0LmhwX25pZApAQCAtMTIwNywxOCArMTIwMSw1NSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdmlhX2hwX21peGVyW10gPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdmlhX2hwX21peGVyWzJdID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIkluZGVwZW5kZW50IEhQIiwKLQkJLmNvdW50ID0gMSwKIAkJLmluZm8gPSB2aWFfaW5kZXBlbmRlbnRfaHBfaW5mbywKIAkJLmdldCA9IHZpYV9pbmRlcGVuZGVudF9ocF9nZXQsCiAJCS5wdXQgPSB2aWFfaW5kZXBlbmRlbnRfaHBfcHV0LAogCX0sCi0JeyB9IC8qIGVuZCAqLworCXsKKwkJLmlmYWNlID0gTklEX01BUFBJTkcsCisJCS5uYW1lID0gIkluZGVwZW5kZW50IEhQIiwKKwl9LAogfTsKIAorc3RhdGljIGludCB2aWFfaHBfYnVpbGQoc3RydWN0IHZpYV9zcGVjICpzcGVjKQoreworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCWhkYV9uaWRfdCBuaWQ7CisKKwlrbmV3ID0gdmlhX2Nsb25lX2NvbnRyb2woc3BlYywgJnZpYV9ocF9taXhlclswXSk7CisJaWYgKGtuZXcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzd2l0Y2ggKHNwZWMtPmNvZGVjX3R5cGUpIHsKKwljYXNlIFZUMTcxOFM6CisJCW5pZCA9IDB4MzQ7CisJCWJyZWFrOworCWNhc2UgVlQyMDAyUDoKKwkJbmlkID0gMHgzNTsKKwkJYnJlYWs7CisJY2FzZSBWVDE4MTI6CisJCW5pZCA9IDB4M2Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW5pZCA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKKwkJYnJlYWs7CisJfQorCisJa25ldy0+c3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IG5pZDsKKwlrbmV3LT5wcml2YXRlX3ZhbHVlID0gbmlkOworCisJa25ldyA9IHZpYV9jbG9uZV9jb250cm9sKHNwZWMsICZ2aWFfaHBfbWl4ZXJbMV0pOworCWlmIChrbmV3ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWtuZXctPnN1YmRldmljZSA9IHNpZGVfbXV0ZV9jaGFubmVsKHNwZWMpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIG5vdGlmeV9hYV9wYXRoX2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJaW50IGk7CkBAIC0xMzc2LDcgKzE0MDcsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdmlhX3NtYXJ0NTFfbWl4ZXJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2aWFfc21hcnQ1MV9taXhlclsyXSA9IHsKIAl7CiAJIC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCSAubmFtZSA9ICJTbWFydCA1LjEiLApAQCAtMTM4NSw5ICsxNDE2LDM2IEBACiAJIC5nZXQgPSB2aWFfc21hcnQ1MV9nZXQsCiAJIC5wdXQgPSB2aWFfc21hcnQ1MV9wdXQsCiAJIH0sCi0Je30JCQkvKiBlbmQgKi8KKwl7CisJIC5pZmFjZSA9IE5JRF9NQVBQSU5HLAorCSAubmFtZSA9ICJTbWFydCA1LjEiLAorCX0KIH07CiAKK3N0YXRpYyBpbnQgdmlhX3NtYXJ0NTFfYnVpbGQoc3RydWN0IHZpYV9zcGVjICpzcGVjKQoreworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCWludCBpbmRleFtdID0geyBBVVRPX1BJTl9NSUMsIEFVVE9fUElOX0ZST05UX01JQywgQVVUT19QSU5fTElORSB9OworCWhkYV9uaWRfdCBuaWQ7CisJaW50IGk7CisKKwlrbmV3ID0gdmlhX2Nsb25lX2NvbnRyb2woc3BlYywgJnZpYV9zbWFydDUxX21peGVyWzBdKTsKKwlpZiAoa25ldyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluZGV4KTsgaSsrKSB7CisJCW5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpbmRleFtpXV07CisJCWlmIChuaWQpIHsKKwkJCWtuZXcgPSB2aWFfY2xvbmVfY29udHJvbChzcGVjLCAmdmlhX3NtYXJ0NTFfbWl4ZXJbMV0pOworCQkJaWYgKGtuZXcgPT0gTlVMTCkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCWtuZXctPnN1YmRldmljZSA9IG5pZDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCiAvKiBjYXB0dXJlIG1peGVyIGVsZW1lbnRzICovCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdnQxNzA4X2NhcHR1cmVfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKQEAgLTE4MTksOCArMTg3Nyw5IEBACiBzdGF0aWMgaW50IHZpYV9idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgZXJyOwotCWludCBpOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJaW50IGVyciwgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fbWl4ZXJzOyBpKyspIHsKIAkJZXJyID0gc25kX2hkYV9hZGRfbmV3X2N0bHMoY29kZWMsIHNwZWMtPm1peGVyc1tpXSk7CkBAIC0xODQ1LDYgKzE5MDQsMjcgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJLyogYXNzaWduIENhcHR1cmUgU291cmNlIGVudW1zIHRvIE5JRCAqLworCWtjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiSW5wdXQgU291cmNlIik7CisJZm9yIChpID0gMDsga2N0bCAmJiBpIDwga2N0bC0+Y291bnQ7IGkrKykgeworCQllcnIgPSBzbmRfaGRhX2FkZF9uaWQoY29kZWMsIGtjdGwsIGksIHNwZWMtPm11eF9uaWRzW2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCS8qIG90aGVyIG5pZC0+Y29udHJvbCBtYXBwaW5nICovCisJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9taXhlcnM7IGkrKykgeworCQlmb3IgKGtuZXcgPSBzcGVjLT5taXhlcnNbaV07IGtuZXctPm5hbWU7IGtuZXcrKykgeworCQkJaWYgKGtuZXctPmlmYWNlICE9IE5JRF9NQVBQSU5HKQorCQkJCWNvbnRpbnVlOworCQkJa2N0bCA9IHNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsIGtuZXctPm5hbWUpOworCQkJaWYgKGtjdGwgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKwkJCWVyciA9IHNuZF9oZGFfYWRkX25pZChjb2RlYywga2N0bCwgMCwKKwkJCQkJICAgICAga25ldy0+c3ViZGV2aWNlKTsKKwkJfQorCX0KKwogCS8qIGluaXQgcG93ZXIgc3RhdGVzICovCiAJc2V0X2phY2tfcG93ZXJfc3RhdGUoY29kZWMpOwogCWFuYWxvZ19sb3dfY3VycmVudF9tb2RlKGNvZGVjLCAxKTsKQEAgLTI0ODEsOSArMjU2MSw5IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKLQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9zbWFydDUxX21peGVyOworCXZpYV9zbWFydDUxX2J1aWxkKHNwZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0yNTU0LDEyICsyNjM0LDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCiAJZXJyID0gdnQxNzA4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtMjU5Nyw3ICsyNjc1LDYgQEAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IHZ0MTcwOF9sb29wYmFja3M7CiAjZW5kaWYKLQlzcGVjLT5jb2RlYyA9IGNvZGVjOwogCUlOSVRfREVMQVlFRF9XT1JLKCZzcGVjLT52dDE3MDhfaHBfd29yaywgdnQxNzA4X3VwZGF0ZV9ocF9qYWNrX3N0YXRlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMwMTAsOSArMzA4Nyw5IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKLQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9zbWFydDUxX21peGVyOworCXZpYV9zbWFydDUxX2J1aWxkKHNwZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0zMDMyLDEyICszMTA5LDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJZXJyID0gdnQxNzA5X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkgewogCQl2aWFfZnJlZShjb2RlYyk7CkBAIC0zMTI2LDEyICszMjAxLDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJZXJyID0gdnQxNzA5X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkgewogCQl2aWFfZnJlZShjb2RlYyk7CkBAIC0zNTgxLDkgKzM2NTQsOSBAQAogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlpZiAoc3BlYy0+aHBfbXV4KQotCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9ocF9taXhlcjsKKwkJdmlhX2hwX2J1aWxkKHNwZWMpOwogCi0Jc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfc21hcnQ1MV9taXhlcjsKKwl2aWFfc21hcnQ1MV9idWlsZChzcGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMzYwNSwxMiArMzY3OCwxMCBAQAogCWlmIChnZXRfY29kZWNfdHlwZShjb2RlYykgPT0gVlQxNzA4QkNFKQogCQlyZXR1cm4gcGF0Y2hfdnQxNzA4Uyhjb2RlYyk7CiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KIAllcnIgPSB2dDE3MDhCX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtMzY1NywxMiArMzcyOCwxMCBAQAogCWludCBlcnI7CiAKIAkvKiBjcmVhdGUgYSBjb2RlYyBzcGVjaWZpYyByZWNvcmQgKi8KLQlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0gdmlhX25ld19zcGVjKGNvZGVjKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvZGVjLT5zcGVjID0gc3BlYzsKLQogCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwogCWVyciA9IHZ0MTcwOEJfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CkBAIC00MDcxLDkgKzQxNDAsOSBAQAogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlpZiAoc3BlYy0+aHBfbXV4KQotCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9ocF9taXhlcjsKKwkJdmlhX2hwX2J1aWxkKHNwZWMpOwogCi0Jc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfc21hcnQ1MV9taXhlcjsKKwl2aWFfc21hcnQ1MV9idWlsZChzcGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNDEwMywxMiArNDE3MiwxMCBAQAogCWludCBlcnI7CiAKIAkvKiBjcmVhdGUgYSBjb2RlYyBzcGVjaWZpYyByZWNvcmQgKi8KLQlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0gdmlhX25ld19zcGVjKGNvZGVjKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvZGVjLT5zcGVjID0gc3BlYzsKLQogCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwogCWVyciA9IHZ0MTcwOFNfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CkBAIC00NDQzLDcgKzQ1MTAsNyBAQAogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlpZiAoc3BlYy0+aHBfbXV4KQotCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9ocF9taXhlcjsKKwkJdmlhX2hwX2J1aWxkKHNwZWMpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC00NDY0LDEyICs0NTMxLDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCiAJZXJyID0gdnQxNzAyX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtNDg2NSw5ICs0OTMwLDkgQEAKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJaWYgKHNwZWMtPmhwX211eCkKLQkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfaHBfbWl4ZXI7CisJCXZpYV9ocF9idWlsZChzcGVjKTsKIAotCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX3NtYXJ0NTFfbWl4ZXI7CisJdmlhX3NtYXJ0NTFfYnVpbGQoc3BlYyk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTQ4ODgsMTIgKzQ5NTMsMTAgQEAKIAlpbnQgZXJyOwogCiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KIAllcnIgPSB2dDE3MThTX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtNTAxNCw2ICs1MDc3LDcgQEAKIAl7CiAJIC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCSAubmFtZSA9ICJEaWdpdGFsIE1pYyBDYXB0dXJlIFN3aXRjaCIsCisJIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgMHgyNiwKIAkgLmNvdW50ID0gMSwKIAkgLmluZm8gPSB2dDE3MTZzX2RtaWNfaW5mbywKIAkgLmdldCA9IHZ0MTcxNnNfZG1pY19nZXQsCkBAIC01MzYxLDkgKzU0MjUsOSBAQAogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlpZiAoc3BlYy0+aHBfbXV4KQotCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9ocF9taXhlcjsKKwkJdmlhX2hwX2J1aWxkKHNwZWMpOwogCi0Jc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfc21hcnQ1MV9taXhlcjsKKwl2aWFfc21hcnQ1MV9idWlsZChzcGVjKTsKIAogCXJldHVybiAxOwogfQpAQCAtNTM4NCwxMiArNTQ0OCwxMCBAQAogCWludCBlcnI7CiAKIAkvKiBjcmVhdGUgYSBjb2RlYyBzcGVjaWZpYyByZWNvcmQgKi8KLQlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0gdmlhX25ld19zcGVjKGNvZGVjKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvZGVjLT5zcGVjID0gc3BlYzsKLQogCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwogCWVyciA9IHZ0MTcxNlNfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CkBAIC01NzE5LDcgKzU3ODEsNyBAQAogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlpZiAoc3BlYy0+aHBfbXV4KQotCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9ocF9taXhlcjsKKwkJdmlhX2hwX2J1aWxkKHNwZWMpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC01NzQxLDEyICs1ODAzLDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCiAJZXJyID0gdnQyMDAyUF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CiAJaWYgKGVyciA8IDApIHsKQEAgLTYwNzAsNyArNjEzMCw3IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTYwOTIsMTIgKzYxNTIsMTAgQEAKIAlpbnQgZXJyOwogCiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KIAllcnIgPSB2dDE4MTJfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2F1cmVvbi5jCmluZGV4IDc2NWQ3YmQuLjllNjZmNmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2F1cmVvbi5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2F1cmVvbi5jCkBAIC03MDMsMTEgKzcwMywxMyBAQAogewogCXVuc2lnbmVkIGNoYXIgbnZvbDsKIAotCWlmICgobWFzdGVyICYgV01fVk9MX01VVEUpIHx8ICh2b2wgJiBXTV9WT0xfTVVURSkpCisJaWYgKChtYXN0ZXIgJiBXTV9WT0xfTVVURSkgfHwgKHZvbCAmIFdNX1ZPTF9NVVRFKSkgewogCQludm9sID0gMDsKLQllbHNlCisJfSBlbHNlIHsKIAkJbnZvbCA9ICgodm9sICUgV01fVk9MX0NOVCkgKiAobWFzdGVyICUgV01fVk9MX0NOVCkpIC8KIAkJCQkJCQkJV01fVk9MX01BWDsKKwkJbnZvbCArPSAweDFiOworCX0KIAogCXdtX3B1dChpY2UsIGluZGV4LCBudm9sKTsKIAl3bV9wdXRfbm9jYWNoZShpY2UsIGluZGV4LCAweDE4MCB8IG52b2wpOwpAQCAtNzc4LDcgKzc4MCw3IEBACiAJZm9yIChjaCA9IDA7IGNoIDwgMjsgY2grKykgewogCQl1bnNpZ25lZCBpbnQgdm9sID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbY2hdOwogCQlpZiAodm9sID4gV01fVk9MX01BWCkKLQkJCWNvbnRpbnVlOworCQkJdm9sID0gV01fVk9MX01BWDsKIAkJdm9sIHw9IHNwZWMtPm1hc3RlcltjaF0gJiBXTV9WT0xfTVVURTsKIAkJaWYgKHZvbCAhPSBzcGVjLT5tYXN0ZXJbY2hdKSB7CiAJCQlpbnQgZGFjOwpAQCAtODM0LDggKzgzNiw4IEBACiAJZm9yIChpID0gMDsgaSA8IHZvaWNlczsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCB2b2wgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXTsKIAkJaWYgKHZvbCA+IFdNX1ZPTF9NQVgpCi0JCQljb250aW51ZTsKLQkJdm9sIHw9IHNwZWMtPnZvbFtvZnMraV07CisJCQl2b2wgPSBXTV9WT0xfTUFYOworCQl2b2wgfD0gc3BlYy0+dm9sW29mcytpXSAmIFdNX1ZPTF9NVVRFOwogCQlpZiAodm9sICE9IHNwZWMtPnZvbFtvZnMraV0pIHsKIAkJCXNwZWMtPnZvbFtvZnMraV0gPSB2b2w7CiAJCQlpZHggID0gV01fREFDX0FUVEVOICsgb2ZzICsgaTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwppbmRleCBjN2NmZjZmLi40ZmM2ZDhiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZHhyX2VuYWJsZSwgIkVuYWJsZSBEWFIgc3VwcG9ydCBmb3IgVGVycmF0ZWMgRE1YNkZJUkUuIik7CiAKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9pY2UxNzEyX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9pY2UxNzEyX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShJQ0UsIFBDSV9ERVZJQ0VfSURfSUNFXzE3MTIpLCAwIH0sICAgLyogSUNFMTcxMiAqLwogCXsgMCwgfQogfTsKQEAgLTExODAsNiArMTE4MCwxMCBAQAogCXNuZF9wY21fc2V0X3N5bmMoc3Vic3RyZWFtKTsKIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbXNiaXRzKHJ1bnRpbWUsIDAsIDMyLCAyNCk7CiAJc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsICZod19jb25zdHJhaW50c19yYXRlcyk7CisJaWYgKGlzX3Byb19yYXRlX2xvY2tlZChpY2UpKSB7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWluID0gUFJPX1JBVEVfREVGQVVMVDsKKwkJcnVudGltZS0+aHcucmF0ZV9tYXggPSBQUk9fUkFURV9ERUZBVUxUOworCX0KIAogCWlmIChpY2UtPnNwZGlmLm9wcy5vcGVuKQogCQlpY2UtPnNwZGlmLm9wcy5vcGVuKGljZSwgc3Vic3RyZWFtKTsKQEAgLTExOTcsNiArMTIwMSwxMSBAQAogCXNuZF9wY21fc2V0X3N5bmMoc3Vic3RyZWFtKTsKIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbXNiaXRzKHJ1bnRpbWUsIDAsIDMyLCAyNCk7CiAJc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsICZod19jb25zdHJhaW50c19yYXRlcyk7CisJaWYgKGlzX3Byb19yYXRlX2xvY2tlZChpY2UpKSB7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWluID0gUFJPX1JBVEVfREVGQVVMVDsKKwkJcnVudGltZS0+aHcucmF0ZV9tYXggPSBQUk9fUkFURV9ERUZBVUxUOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKaW5kZXggYWUyOTA3My4uYzE0OThmYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwpAQCAtOTQsNyArOTQsNyBAQAogCiAKIC8qIEJvdGggVlQxNzIwIGFuZCBWVDE3MjQgaGF2ZSB0aGUgc2FtZSBQQ0kgSURzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3Z0MTcyNF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfdnQxNzI0X2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShJQ0UsIFBDSV9ERVZJQ0VfSURfVlQxNzI0KSwgMCB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jIGIvc291bmQvcGNpL2ludGVsOHgwLmMKaW5kZXggYjk5MDE0My4uNjQzM2U2NSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwLmMKQEAgLTQyMCw3ICs0MjAsNyBAQAogCXUzMiBpbnRfc3RhX21hc2s7CQkvKiBpbnRlcnJ1cHQgc3RhdHVzIG1hc2sgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfaW50ZWw4eDBfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2ludGVsOHgwX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyNDE1KSwgREVWSUNFX0lOVEVMIH0sCS8qIDgyODAxQUEgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI0MjUpLCBERVZJQ0VfSU5URUwgfSwJLyogODI5MDFBQiAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjQ0NSksIERFVklDRV9JTlRFTCB9LAkvKiA4MjgwMUJBICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDBtLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKaW5kZXggOWU3ZDEyZS4uMTNjZWMxZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwbS5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MG0uYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJdW5zaWduZWQgaW50IHBjbV9wb3Nfc2hpZnQ7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2ludGVsOHgwbV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfaW50ZWw4eDBtX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyNDE2KSwgREVWSUNFX0lOVEVMIH0sCS8qIDgyODAxQUEgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI0MjYpLCBERVZJQ0VfSU5URUwgfSwJLyogODI5MDFBQiAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjQ0NiksIERFVklDRV9JTlRFTCB9LAkvKiA4MjgwMUJBICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCmluZGV4IDdjYzM4YTEuLjZkNzk1NzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCisrKyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCkBAIC00MTgsNyArNDE4LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIEtvcmcgMTIxMiBzb3VuZGNhcmQuIik7CiBNT0RVTEVfQVVUSE9SKCJIYXJvbGRvIEdhbWFsIDxnYW1hbEBhbHRlcm5leC5jb20uYnI+Iik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfa29yZzEyMTJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2tvcmcxMjEyX2lkcykgPSB7CiAJewogCQkudmVuZG9yCSAgID0gMHgxMGI1LAogCQkuZGV2aWNlCSAgID0gMHg5MDZkLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmMgYi9zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuYwppbmRleCAxMWI4YzY1Li4wY2NhNTYwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuYworKysgYi9zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuYwpAQCAtNTUsNyArNTUsNyBAQAogCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX0xYNjQ2NEVTCQlQQ0lfREVWSUNFX0lEX1BMWF85MDU2CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbHg2NDY0ZXNfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2x4NjQ2NGVzX2lkcykgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF9MWDY0NjRFUyksCiAJICAuc3VidmVuZG9yID0gUENJX1ZFTkRPUl9JRF9ESUdJR1JBTSwKIAkgIC5zdWJkZXZpY2UgPSBQQ0lfU1VCREVWSUNFX0lEX0RJR0lHUkFNX0xYNjQ2NEVTX1NFUklBTF9TVUJTWVNURU0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jIGIvc291bmQvcGNpL21hZXN0cm8zLmMKaW5kZXggNzUyODNmYmIuLmI2NGU3ODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jCisrKyBiL3NvdW5kL3BjaS9tYWVzdHJvMy5jCkBAIC04NjEsNyArODYxLDcgQEAKIC8qCiAgKiBwY2kgaWRzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbTNfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX20zX2lkcykgPSB7CiAJe1BDSV9WRU5ET1JfSURfRVNTLCBQQ0lfREVWSUNFX0lEX0VTU19BTExFR1JPXzEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJIFBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPIDw8IDgsIDB4ZmZmZjAwLCAwfSwKIAl7UENJX1ZFTkRPUl9JRF9FU1MsIFBDSV9ERVZJQ0VfSURfRVNTX0FMTEVHUk8sIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jIGIvc291bmQvcGNpL21peGFydC9taXhhcnQuYwppbmRleCBhODNkMTk2Li43ZThlN2RhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCisrKyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKQEAgLTYwLDcgKzYwLDcgQEAKIC8qCiAgKi8KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9taXhhcnRfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX21peGFydF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoTU9UT1JPTEEsIDB4MDAwMyksIDAsIH0sIC8qIE1DODI0MCAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKaW5kZXggOTdhMDczMS4uNWE2MDQ5MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL25tMjU2L25tMjU2LmMKKysrIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogLyoKICAqIFBDSSBpZHMKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9ubTI1Nl9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfbm0yNTZfaWRzKSA9IHsKIAl7UENJX1ZERVZJQ0UoTkVPTUFHSUMsIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZBVl9BVURJTyksIDB9LAogCXtQQ0lfVkRFVklDRShORU9NQUdJQywgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19OTTI1NlpYX0FVRElPKSwgMH0sCiAJe1BDSV9WREVWSUNFKE5FT01BR0lDLCBQQ0lfREVWSUNFX0lEX05FT01BR0lDX05NMjU2WExfUExVU19BVURJTyksIDB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9NYWtlZmlsZSBiL3NvdW5kL3BjaS9veHlnZW4vTWFrZWZpbGUKaW5kZXggMzg5OTQxYy4uYWNkOGYxNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9NYWtlZmlsZQorKysgYi9zb3VuZC9wY2kvb3h5Z2VuL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogc25kLWhpZmllci1vYmpzIDo9IGhpZmllci5vCiBzbmQtb3h5Z2VuLW9ianMgOj0gb3h5Z2VuLm8KIHNuZC12aXJ0dW9zby1vYmpzIDo9IHZpcnR1b3NvLm8geG9uYXJfbGliLm8gXAotCXhvbmFyX3BjbTE3OXgubyB4b25hcl9jczQzeHgubyB4b25hcl9oZG1pLm8KKwl4b25hcl9wY20xNzl4Lm8geG9uYXJfY3M0M3h4Lm8geG9uYXJfd204N3g2Lm8geG9uYXJfaGRtaS5vCiAKIG9iai0kKENPTkZJR19TTkRfT1hZR0VOX0xJQikgKz0gc25kLW94eWdlbi1saWIubwogb2JqLSQoQ09ORklHX1NORF9ISUZJRVIpICs9IHNuZC1oaWZpZXIubwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYyBiL3NvdW5kL3BjaS9veHlnZW4vaGlmaWVyLmMKaW5kZXggZTNjMjI5Yi4uNWE4N2Q2OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jCkBAIC00OCw3ICs0OCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiZW5hYmxlIGNhcmQiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhpZmllcl9pZHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGhpZmllcl9pZHMpID0gewogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDE0YzMsIDB4MTcxMCkgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxNGMzLCAweDE3MTEpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEX0JST0tFTl9FRVBST00gfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5jCmluZGV4IGFjYmVkZWIuLjI4OWNiNGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uYwpAQCAtNzIsNyArNzIsNyBAQAogCU1PREVMX0NMQVJPX0hBTE8sCS8qIEhULU9tZWdhIENsYXJvIGhhbG8gKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBveHlnZW5faWRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShveHlnZW5faWRzKSA9IHsKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMGIwLCAweDAyMTYpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTUVESUFfUkVGIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTBiMCwgMHgwMjE4KSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ01FRElBX1JFRiB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwYjAsIDB4MDIxOSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NNRURJQV9SRUYgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYyBiL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYwppbmRleCA2YWNjYWY5Li5mMDNhMmYyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL3ZpcnR1b3NvLmMKKysrIGIvc291bmQvcGNpL294eWdlbi92aXJ0dW9zby5jCkBAIC00MCw3ICs0MCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiZW5hYmxlIGNhcmQiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHhvbmFyX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoeG9uYXJfaWRzKSA9IHsKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgyNjkpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4Mjc1KSB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODJiNykgfSwKQEAgLTQ5LDYgKzQ5LDcgQEAKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgzNGYpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4MzVjKSB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODM1ZCkgfSwKKwl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgzOGUpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEX0JST0tFTl9FRVBST00gfSwKIAl7IH0KIH07CkBAIC02MSw2ICs2Miw4IEBACiAJCXJldHVybiAwOwogCWlmIChnZXRfeG9uYXJfY3M0M3h4X21vZGVsKGNoaXAsIGlkKSA+PSAwKQogCQlyZXR1cm4gMDsKKwlpZiAoZ2V0X3hvbmFyX3dtODd4Nl9tb2RlbChjaGlwLCBpZCkgPj0gMCkKKwkJcmV0dXJuIDA7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vd204NzY2LmggYi9zb3VuZC9wY2kvb3h5Z2VuL3dtODc2Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZTg0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3dtODc2Ni5oCkBAIC0wLDAgKzEsNzMgQEAKKyNpZm5kZWYgV004NzY2X0hfSU5DTFVERUQKKyNkZWZpbmUgV004NzY2X0hfSU5DTFVERUQKKworI2RlZmluZSBXTTg3NjZfTERBMQkJMHgwMAorI2RlZmluZSBXTTg3NjZfUkRBMQkJMHgwMQorI2RlZmluZSBXTTg3NjZfREFDX0NUUkwJCTB4MDIKKyNkZWZpbmUgV004NzY2X0lOVF9DVFJMCQkweDAzCisjZGVmaW5lIFdNODc2Nl9MREEyCQkweDA0CisjZGVmaW5lIFdNODc2Nl9SREEyCQkweDA1CisjZGVmaW5lIFdNODc2Nl9MREEzCQkweDA2CisjZGVmaW5lIFdNODc2Nl9SREEzCQkweDA3CisjZGVmaW5lIFdNODc2Nl9NQVNUREEJCTB4MDgKKyNkZWZpbmUgV004NzY2X0RBQ19DVFJMMgkweDA5CisjZGVmaW5lIFdNODc2Nl9EQUNfQ1RSTDMJMHgwYQorI2RlZmluZSBXTTg3NjZfTVVURTEJCTB4MGMKKyNkZWZpbmUgV004NzY2X01VVEUyCQkweDBmCisjZGVmaW5lIFdNODc2Nl9SRVNFVAkJMHgxZgorCisvKiBMREF4L1JEQXgvTUFTVERBICovCisjZGVmaW5lIFdNODc2Nl9BVFRfTUFTSwkJMHgwZmYKKyNkZWZpbmUgV004NzY2X1VQREFURQkJMHgxMDAKKy8qIERBQ19DVFJMICovCisjZGVmaW5lIFdNODc2Nl9NVVRFQUxMCQkweDAwMQorI2RlZmluZSBXTTg3NjZfREVFTVBBTEwJCTB4MDAyCisjZGVmaW5lIFdNODc2Nl9QV0ROCQkweDAwNAorI2RlZmluZSBXTTg3NjZfQVRDCQkweDAwOAorI2RlZmluZSBXTTg3NjZfSVpECQkweDAxMAorI2RlZmluZSBXTTg3NjZfUExfTEVGVF9NQVNLCTB4MDYwCisjZGVmaW5lIFdNODc2Nl9QTF9MRUZUX01VVEUJMHgwMDAKKyNkZWZpbmUgV004NzY2X1BMX0xFRlRfTEVGVAkweDAyMAorI2RlZmluZSBXTTg3NjZfUExfTEVGVF9SSUdIVAkweDA0MAorI2RlZmluZSBXTTg3NjZfUExfTEVGVF9MUk1JWAkweDA2MAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfTUFTSwkweDE4MAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfTVVURQkweDAwMAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfTEVGVAkweDA4MAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfUklHSFQJMHgxMDAKKyNkZWZpbmUgV004NzY2X1BMX1JJR0hUX0xSTUlYCTB4MTgwCisvKiBJTlRfQ1RSTCAqLworI2RlZmluZSBXTTg3NjZfRk1UX01BU0sJCTB4MDAzCisjZGVmaW5lIFdNODc2Nl9GTVRfUkpVU1QJMHgwMDAKKyNkZWZpbmUgV004NzY2X0ZNVF9MSlVTVAkweDAwMQorI2RlZmluZSBXTTg3NjZfRk1UX0kyUwkJMHgwMDIKKyNkZWZpbmUgV004NzY2X0ZNVF9EU1AJCTB4MDAzCisjZGVmaW5lIFdNODc2Nl9MUlAJCTB4MDA0CisjZGVmaW5lIFdNODc2Nl9CQ1AJCTB4MDA4CisjZGVmaW5lIFdNODc2Nl9JV0xfTUFTSwkJMHgwMzAKKyNkZWZpbmUgV004NzY2X0lXTF8xNgkJMHgwMDAKKyNkZWZpbmUgV004NzY2X0lXTF8yMAkJMHgwMTAKKyNkZWZpbmUgV004NzY2X0lXTF8yNAkJMHgwMjAKKyNkZWZpbmUgV004NzY2X0lXTF8zMgkJMHgwMzAKKyNkZWZpbmUgV004NzY2X1BIQVNFX01BU0sJMHgxYzAKKy8qIERBQ19DVFJMMiAqLworI2RlZmluZSBXTTg3NjZfWkNECQkweDAwMQorI2RlZmluZSBXTTg3NjZfRFpGTV9NQVNLCTB4MDA2CisjZGVmaW5lIFdNODc2Nl9ETVVURV9NQVNLCTB4MDM4CisjZGVmaW5lIFdNODc2Nl9ERUVNUF9NQVNLCTB4MWMwCisvKiBEQUNfQ1RSTDMgKi8KKyNkZWZpbmUgV004NzY2X0RBQ1BEX01BU0sJMHgwMGUKKyNkZWZpbmUgV004NzY2X1BXUkROQUxMCQkweDAxMAorI2RlZmluZSBXTTg3NjZfTVMJCTB4MDIwCisjZGVmaW5lIFdNODc2Nl9SQVRFX01BU0sJMHgxYzAKKyNkZWZpbmUgV004NzY2X1JBVEVfMTI4CQkweDAwMAorI2RlZmluZSBXTTg3NjZfUkFURV8xOTIJCTB4MDQwCisjZGVmaW5lIFdNODc2Nl9SQVRFXzI1NgkJMHgwODAKKyNkZWZpbmUgV004NzY2X1JBVEVfMzg0CQkweDBjMAorI2RlZmluZSBXTTg3NjZfUkFURV81MTIJCTB4MTAwCisjZGVmaW5lIFdNODc2Nl9SQVRFXzc2OAkJMHgxNDAKKy8qIE1VVEUxICovCisjZGVmaW5lIFdNODc2Nl9NUEQxCQkweDA0MAorLyogTVVURTIgKi8KKyNkZWZpbmUgV004NzY2X01QRDIJCTB4MDIwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi93bTg3NzYuaCBiL3NvdW5kL3BjaS9veHlnZW4vd204Nzc2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5NmY1NgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vd204Nzc2LmgKQEAgLTAsMCArMSwxNzcgQEAKKyNpZm5kZWYgV004Nzc2X0hfSU5DTFVERUQKKyNkZWZpbmUgV004Nzc2X0hfSU5DTFVERUQKKworLyoKKyAqIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXIgbmFtZXMgYXJlIGZyb206CisgKiB3bTg3NzYuaCAgLS0gIFdNODc3NiBBU29DIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2RlZmluZSBXTTg3NzZfSFBMVk9MCQkweDAwCisjZGVmaW5lIFdNODc3Nl9IUFJWT0wJCTB4MDEKKyNkZWZpbmUgV004Nzc2X0hQTUFTVEVSCQkweDAyCisjZGVmaW5lIFdNODc3Nl9EQUNMVk9MCQkweDAzCisjZGVmaW5lIFdNODc3Nl9EQUNSVk9MCQkweDA0CisjZGVmaW5lIFdNODc3Nl9EQUNNQVNURVIJMHgwNQorI2RlZmluZSBXTTg3NzZfUEhBU0VTV0FQCTB4MDYKKyNkZWZpbmUgV004Nzc2X0RBQ0NUUkwxCQkweDA3CisjZGVmaW5lIFdNODc3Nl9EQUNNVVRFCQkweDA4CisjZGVmaW5lIFdNODc3Nl9EQUNDVFJMMgkJMHgwOQorI2RlZmluZSBXTTg3NzZfREFDSUZDVFJMCTB4MGEKKyNkZWZpbmUgV004Nzc2X0FEQ0lGQ1RSTAkweDBiCisjZGVmaW5lIFdNODc3Nl9NU1RSQ1RSTAkJMHgwYworI2RlZmluZSBXTTg3NzZfUFdSRE9XTgkJMHgwZAorI2RlZmluZSBXTTg3NzZfQURDTFZPTAkJMHgwZQorI2RlZmluZSBXTTg3NzZfQURDUlZPTAkJMHgwZgorI2RlZmluZSBXTTg3NzZfQUxDQ1RSTDEJCTB4MTAKKyNkZWZpbmUgV004Nzc2X0FMQ0NUUkwyCQkweDExCisjZGVmaW5lIFdNODc3Nl9BTENDVFJMMwkJMHgxMgorI2RlZmluZSBXTTg3NzZfTk9JU0VHQVRFCTB4MTMKKyNkZWZpbmUgV004Nzc2X0xJTUlURVIJCTB4MTQKKyNkZWZpbmUgV004Nzc2X0FEQ01VWAkJMHgxNQorI2RlZmluZSBXTTg3NzZfT1VUTVVYCQkweDE2CisjZGVmaW5lIFdNODc3Nl9SRVNFVAkJMHgxNworCisKKy8qIEhQTFZPTC9IUFJWT0wvSFBNQVNURVIgKi8KKyNkZWZpbmUgV004Nzc2X0hQQVRUX01BU0sJMHgwN2YKKyNkZWZpbmUgV004Nzc2X0hQWkNFTgkJMHgwODAKKyNkZWZpbmUgV004Nzc2X1VQREFURQkJMHgxMDAKKworLyogREFDTFZPTC9EQUNSVk9ML0RBQ01BU1RFUiAqLworI2RlZmluZSBXTTg3NzZfREFUVF9NQVNLCTB4MGZmCisvKiNkZWZpbmUgV004Nzc2X1VQREFURQkJMHgxMDAqLworCisvKiBQSEFTRVNXQVAgKi8KKyNkZWZpbmUgV004Nzc2X1BIX01BU0sJCTB4MDAzCisKKy8qIERBQ0NUUkwxICovCisjZGVmaW5lIFdNODc3Nl9EWkNFTgkJMHgwMDEKKyNkZWZpbmUgV004Nzc2X0FUQwkJMHgwMDIKKyNkZWZpbmUgV004Nzc2X0laRAkJMHgwMDQKKyNkZWZpbmUgV004Nzc2X1RPRAkJMHgwMDgKKyNkZWZpbmUgV004Nzc2X1BMX0xFRlRfTUFTSwkweDAzMAorI2RlZmluZSBXTTg3NzZfUExfTEVGVF9NVVRFCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9QTF9MRUZUX0xFRlQJMHgwMTAKKyNkZWZpbmUgV004Nzc2X1BMX0xFRlRfUklHSFQJMHgwMjAKKyNkZWZpbmUgV004Nzc2X1BMX0xFRlRfTFJNSVgJMHgwMzAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX01BU0sJMHgwYzAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX01VVEUJMHgwMDAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX0xFRlQJMHgwNDAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX1JJR0hUCTB4MDgwCisjZGVmaW5lIFdNODc3Nl9QTF9SSUdIVF9MUk1JWAkweDBjMAorCisvKiBEQUNNVVRFICovCisjZGVmaW5lIFdNODc3Nl9ETVVURQkJMHgwMDEKKworLyogREFDQ1RSTDIgKi8KKyNkZWZpbmUgV004Nzc2X0RFRU1QSAkJMHgwMDEKKyNkZWZpbmUgV004Nzc2X0RaRk1fTUFTSwkweDAwNgorI2RlZmluZSBXTTg3NzZfRFpGTV9OT05FCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9EWkZNX0xSCQkweDAwMgorI2RlZmluZSBXTTg3NzZfRFpGTV9CT1RICTB4MDA0CisjZGVmaW5lIFdNODc3Nl9EWkZNX0VJVEhFUgkweDAwNgorCisvKiBEQUNJRkNUUkwgKi8KKyNkZWZpbmUgV004Nzc2X0RBQ0ZNVF9NQVNLCTB4MDAzCisjZGVmaW5lIFdNODc3Nl9EQUNGTVRfUkpVU1QJMHgwMDAKKyNkZWZpbmUgV004Nzc2X0RBQ0ZNVF9MSlVTVAkweDAwMQorI2RlZmluZSBXTTg3NzZfREFDRk1UX0kyUwkweDAwMgorI2RlZmluZSBXTTg3NzZfREFDRk1UX0RTUAkweDAwMworI2RlZmluZSBXTTg3NzZfREFDTFJQCQkweDAwNAorI2RlZmluZSBXTTg3NzZfREFDQkNQCQkweDAwOAorI2RlZmluZSBXTTg3NzZfREFDV0xfTUFTSwkweDAzMAorI2RlZmluZSBXTTg3NzZfREFDV0xfMTYJCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9EQUNXTF8yMAkJMHgwMTAKKyNkZWZpbmUgV004Nzc2X0RBQ1dMXzI0CQkweDAyMAorI2RlZmluZSBXTTg3NzZfREFDV0xfMzIJCTB4MDMwCisKKy8qIEFEQ0lGQ1RSTCAqLworI2RlZmluZSBXTTg3NzZfQURDRk1UX01BU0sJMHgwMDMKKyNkZWZpbmUgV004Nzc2X0FEQ0ZNVF9SSlVTVAkweDAwMAorI2RlZmluZSBXTTg3NzZfQURDRk1UX0xKVVNUCTB4MDAxCisjZGVmaW5lIFdNODc3Nl9BRENGTVRfSTJTCTB4MDAyCisjZGVmaW5lIFdNODc3Nl9BRENGTVRfRFNQCTB4MDAzCisjZGVmaW5lIFdNODc3Nl9BRENMUlAJCTB4MDA0CisjZGVmaW5lIFdNODc3Nl9BRENCQ1AJCTB4MDA4CisjZGVmaW5lIFdNODc3Nl9BRENXTF9NQVNLCTB4MDMwCisjZGVmaW5lIFdNODc3Nl9BRENXTF8xNgkJMHgwMDAKKyNkZWZpbmUgV004Nzc2X0FEQ1dMXzIwCQkweDAxMAorI2RlZmluZSBXTTg3NzZfQURDV0xfMjQJCTB4MDIwCisjZGVmaW5lIFdNODc3Nl9BRENXTF8zMgkJMHgwMzAKKyNkZWZpbmUgV004Nzc2X0FEQ01DTEsJCTB4MDQwCisjZGVmaW5lIFdNODc3Nl9BRENIUEQJCTB4MTAwCisKKy8qIE1TVFJDVFJMICovCisjZGVmaW5lIFdNODc3Nl9BRENSQVRFX01BU0sJMHgwMDcKKyNkZWZpbmUgV004Nzc2X0FEQ1JBVEVfMjU2CTB4MDAyCisjZGVmaW5lIFdNODc3Nl9BRENSQVRFXzM4NAkweDAwMworI2RlZmluZSBXTTg3NzZfQURDUkFURV81MTIJMHgwMDQKKyNkZWZpbmUgV004Nzc2X0FEQ1JBVEVfNzY4CTB4MDA1CisjZGVmaW5lIFdNODc3Nl9BRENPU1IJCTB4MDA4CisjZGVmaW5lIFdNODc3Nl9EQUNSQVRFX01BU0sJMHgwNzAKKyNkZWZpbmUgV004Nzc2X0RBQ1JBVEVfMTI4CTB4MDAwCisjZGVmaW5lIFdNODc3Nl9EQUNSQVRFXzE5MgkweDAxMAorI2RlZmluZSBXTTg3NzZfREFDUkFURV8yNTYJMHgwMjAKKyNkZWZpbmUgV004Nzc2X0RBQ1JBVEVfMzg0CTB4MDMwCisjZGVmaW5lIFdNODc3Nl9EQUNSQVRFXzUxMgkweDA0MAorI2RlZmluZSBXTTg3NzZfREFDUkFURV83NjgJMHgwNTAKKyNkZWZpbmUgV004Nzc2X0RBQ01TCQkweDA4MAorI2RlZmluZSBXTTg3NzZfQURDTVMJCTB4MTAwCisKKy8qIFBXUkRPV04gKi8KKyNkZWZpbmUgV004Nzc2X1BEV04JCTB4MDAxCisjZGVmaW5lIFdNODc3Nl9BRENQRAkJMHgwMDIKKyNkZWZpbmUgV004Nzc2X0RBQ1BECQkweDAwNAorI2RlZmluZSBXTTg3NzZfSFBQRAkJMHgwMDgKKyNkZWZpbmUgV004Nzc2X0FJTlBECQkweDA0MAorCisvKiBBRENMVk9ML0FEQ1JWT0wgKi8KKyNkZWZpbmUgV004Nzc2X0FHTUFTSwkJMHgwZmYKKyNkZWZpbmUgV004Nzc2X1pDQQkJMHgxMDAKKworLyogQUxDQ1RSTDEgKi8KKyNkZWZpbmUgV004Nzc2X0xDVF9NQVNLCQkweDAwZgorI2RlZmluZSBXTTg3NzZfTUFYR0FJTl9NQVNLCTB4MDcwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9NQVNLCTB4MTgwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9MSU1JVEVSCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9BTENfUklHSFQgMHgwODAKKyNkZWZpbmUgV004Nzc2X0xDU0VMX0FMQ19MRUZUCTB4MTAwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9BTENfU1RFUkVPCTB4MTgwCisKKy8qIEFMQ0NUUkwyICovCisjZGVmaW5lIFdNODc3Nl9ITERfTUFTSwkJMHgwMGYKKyNkZWZpbmUgV004Nzc2X0FMQ1pDCQkweDA4MAorI2RlZmluZSBXTTg3NzZfTENFTgkJMHgxMDAKKworLyogQUxDQ1RSTDMgKi8KKyNkZWZpbmUgV004Nzc2X0FUS19NQVNLCQkweDAwZgorI2RlZmluZSBXTTg3NzZfRENZX01BU0sJCTB4MGYwCisKKy8qIE5PSVNFR0FURSAqLworI2RlZmluZSBXTTg3NzZfTkdBVAkJMHgwMDEKKyNkZWZpbmUgV004Nzc2X05HVEhfTUFTSwkweDAxYworCisvKiBMSU1JVEVSICovCisjZGVmaW5lIFdNODc3Nl9NQVhBVFRFTl9NQVNLCTB4MDBmCisjZGVmaW5lIFdNODc3Nl9UUkFOV0lOX01BU0sJMHgwNzAKKworLyogQURDTVVYICovCisjZGVmaW5lIFdNODc3Nl9BTVhfTUFTSwkJMHgwMWYKKyNkZWZpbmUgV004Nzc2X01VVEVSQQkJMHgwNDAKKyNkZWZpbmUgV004Nzc2X01VVEVMQQkJMHgwODAKKyNkZWZpbmUgV004Nzc2X0xSQk9USAkJMHgxMDAKKworLyogT1VUTVVYICovCisjZGVmaW5lIFdNODc3Nl9NWF9EQUMJCTB4MDAxCisjZGVmaW5lIFdNODc3Nl9NWF9BVVgJCTB4MDAyCisjZGVmaW5lIFdNODc3Nl9NWF9CWVBBU1MJMHgwMDQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyLmggYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyLmgKaW5kZXggODliM2VkOC4uYjM1MzQzYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi94b25hci5oCisrKyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXIuaApAQCAtMzUsNiArMzUsOCBAQAogCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CiBpbnQgZ2V0X3hvbmFyX2NzNDN4eF9tb2RlbChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKTsKK2ludCBnZXRfeG9uYXJfd204N3g2X21vZGVsKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwogCiAvKiBIRE1JIGhlbHBlciBmdW5jdGlvbnMgKi8KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi94b25hcl93bTg3eDYuYyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfd204N3g2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1NGRiMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfd204N3g2LmMKQEAgLTAsMCArMSwxMDIxIEBACisvKgorICogY2FyZCBkcml2ZXIgZm9yIG1vZGVscyB3aXRoIFdNODc3Ni9XTTg3NjYgREFDcyAoWG9uYXIgRFMpCisgKgorICogQ29weXJpZ2h0IChjKSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KKyAqCisgKgorICogIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKgorICogIFRoaXMgZHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgZHJpdmVyOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyoKKyAqIFhvbmFyIERTCisgKiAtLS0tLS0tLQorICoKKyAqIENNSTg3ODg6CisgKgorICogU1BJIDAgLT4gV004NzY2IChzdXJyb3VuZCwgY2VudGVyL0xGRSwgYmFjaykKKyAqIFNQSSAxIC0+IFdNODc3NiAoZnJvbnQsIGlucHV0KQorICoKKyAqIEdQSU8gNCA8LSBoZWFkcGhvbmUgZGV0ZWN0CisgKiBHUElPIDYgLT4gcm91dGUgaW5wdXQgamFjayB0byBpbnB1dCAxLzIgKDEvMCkKKyAqIEdQSU8gNyAtPiBlbmFibGUgb3V0cHV0IHRvIHNwZWFrZXJzCisgKiBHUElPIDggLT4gZW5hYmxlIG91dHB1dCB0byBzcGVha2VycworICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgInhvbmFyLmgiCisjaW5jbHVkZSAid204Nzc2LmgiCisjaW5jbHVkZSAid204NzY2LmgiCisKKyNkZWZpbmUgR1BJT19EU19IUF9ERVRFQ1QJMHgwMDEwCisjZGVmaW5lIEdQSU9fRFNfSU5QVVRfUk9VVEUJMHgwMDQwCisjZGVmaW5lIEdQSU9fRFNfT1VUUFVUX0VOQUJMRQkweDAxODAKKworI2RlZmluZSBMQ19DT05UUk9MX0xJTUlURVIJMHg0MDAwMDAwMAorI2RlZmluZSBMQ19DT05UUk9MX0FMQwkJMHgyMDAwMDAwMAorCitzdHJ1Y3QgeG9uYXJfd204N3g2IHsKKwlzdHJ1Y3QgeG9uYXJfZ2VuZXJpYyBnZW5lcmljOworCXUxNiB3bTg3NzZfcmVnc1sweDE3XTsKKwl1MTYgd204NzY2X3JlZ3NbMHgxMF07CisJc3RydWN0IHNuZF9rY29udHJvbCAqbGNfY29udHJvbHNbMTNdOworfTsKKworc3RhdGljIHZvaWQgd204Nzc2X3dyaXRlKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJb3h5Z2VuX3dyaXRlX3NwaShjaGlwLCBPWFlHRU5fU1BJX1RSSUdHRVIgfAorCQkJIE9YWUdFTl9TUElfREFUQV9MRU5HVEhfMiB8CisJCQkgT1hZR0VOX1NQSV9DTE9DS18xNjAgfAorCQkJICgxIDw8IE9YWUdFTl9TUElfQ09ERUNfU0hJRlQpIHwKKwkJCSBPWFlHRU5fU1BJX0NFTl9MQVRDSF9DTE9DS19MTywKKwkJCSAocmVnIDw8IDkpIHwgdmFsdWUpOworCWlmIChyZWcgPCBBUlJBWV9TSVpFKGRhdGEtPndtODc3Nl9yZWdzKSkgeworCQlpZiAocmVnID49IFdNODc3Nl9IUExWT0wgfHwgcmVnIDw9IFdNODc3Nl9EQUNNQVNURVIpCisJCQl2YWx1ZSAmPSB+V004Nzc2X1VQREFURTsKKwkJZGF0YS0+d204Nzc2X3JlZ3NbcmVnXSA9IHZhbHVlOworCX0KK30KKworc3RhdGljIHZvaWQgd204Nzc2X3dyaXRlX2NhY2hlZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCXVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCWlmIChyZWcgPj0gQVJSQVlfU0laRShkYXRhLT53bTg3NzZfcmVncykgfHwKKwkgICAgdmFsdWUgIT0gZGF0YS0+d204Nzc2X3JlZ3NbcmVnXSkKKwkJd204Nzc2X3dyaXRlKGNoaXAsIHJlZywgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCB3bTg3NjZfd3JpdGUoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCSB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlveHlnZW5fd3JpdGVfc3BpKGNoaXAsIE9YWUdFTl9TUElfVFJJR0dFUiB8CisJCQkgT1hZR0VOX1NQSV9EQVRBX0xFTkdUSF8yIHwKKwkJCSBPWFlHRU5fU1BJX0NMT0NLXzE2MCB8CisJCQkgKDAgPDwgT1hZR0VOX1NQSV9DT0RFQ19TSElGVCkgfAorCQkJIE9YWUdFTl9TUElfQ0VOX0xBVENIX0NMT0NLX0xPLAorCQkJIChyZWcgPDwgOSkgfCB2YWx1ZSk7CisJaWYgKHJlZyA8IEFSUkFZX1NJWkUoZGF0YS0+d204NzY2X3JlZ3MpKQorCQlkYXRhLT53bTg3NjZfcmVnc1tyZWddID0gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIHdtODc2Nl93cml0ZV9jYWNoZWQoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQl1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlpZiAocmVnID49IEFSUkFZX1NJWkUoZGF0YS0+d204NzY2X3JlZ3MpIHx8CisJICAgIHZhbHVlICE9IGRhdGEtPndtODc2Nl9yZWdzW3JlZ10pIHsKKwkJaWYgKChyZWcgPj0gV004NzY2X0xEQTEgJiYgcmVnIDw9IFdNODc2Nl9SREExKSB8fAorCQkgICAgKHJlZyA+PSBXTTg3NjZfTERBMiAmJiByZWcgPD0gV004NzY2X01BU1REQSkpCisJCQl2YWx1ZSAmPSB+V004NzY2X1VQREFURTsKKwkJd204NzY2X3dyaXRlKGNoaXAsIHJlZywgdmFsdWUpOworCX0KK30KKworc3RhdGljIHZvaWQgd204Nzc2X3JlZ2lzdGVyc19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X1JFU0VULCAwKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ0NUUkwxLCBXTTg3NzZfRFpDRU4gfAorCQkgICAgIFdNODc3Nl9QTF9MRUZUX0xFRlQgfCBXTTg3NzZfUExfUklHSFRfUklHSFQpOworCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfREFDTVVURSwgY2hpcC0+ZGFjX211dGUgPyBXTTg3NzZfRE1VVEUgOiAwKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ0lGQ1RSTCwKKwkJICAgICBXTTg3NzZfREFDRk1UX0xKVVNUIHwgV004Nzc2X0RBQ1dMXzI0KTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0FEQ0lGQ1RSTCwKKwkJICAgICBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDSUZDVFJMXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9NU1RSQ1RSTCwgZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X01TVFJDVFJMXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9QV1JET1dOLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfUFdSRE9XTl0pOworCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfSFBMVk9MLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBMVk9MXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9IUFJWT0wsIGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUFJWT0xdIHwKKwkJICAgICBXTTg3NzZfVVBEQVRFKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0FEQ0xWT0wsIGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9BRENSVk9MLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDUlZPTF0pOworCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfQURDTVVYLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDTVVYXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9EQUNMVk9MLCBjaGlwLT5kYWNfdm9sdW1lWzBdKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ1JWT0wsIGNoaXAtPmRhY192b2x1bWVbMV0gfCBXTTg3NzZfVVBEQVRFKTsKK30KKworc3RhdGljIHZvaWQgd204NzY2X3JlZ2lzdGVyc19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9SRVNFVCwgMCk7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9JTlRfQ1RSTCwgV004NzY2X0ZNVF9MSlVTVCB8IFdNODc2Nl9JV0xfMjQpOworCXdtODc2Nl93cml0ZShjaGlwLCBXTTg3NjZfREFDX0NUUkwyLAorCQkgICAgIFdNODc2Nl9aQ0QgfCAoY2hpcC0+ZGFjX211dGUgPyBXTTg3NjZfRE1VVEVfTUFTSyA6IDApKTsKKwl3bTg3NjZfd3JpdGUoY2hpcCwgV004NzY2X0xEQTEsIGNoaXAtPmRhY192b2x1bWVbMl0pOworCXdtODc2Nl93cml0ZShjaGlwLCBXTTg3NjZfUkRBMSwgY2hpcC0+ZGFjX3ZvbHVtZVszXSk7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9MREEyLCBjaGlwLT5kYWNfdm9sdW1lWzRdKTsKKwl3bTg3NjZfd3JpdGUoY2hpcCwgV004NzY2X1JEQTIsIGNoaXAtPmRhY192b2x1bWVbNV0pOworCXdtODc2Nl93cml0ZShjaGlwLCBXTTg3NjZfTERBMywgY2hpcC0+ZGFjX3ZvbHVtZVs2XSk7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9SREEzLCBjaGlwLT5kYWNfdm9sdW1lWzddIHwgV004NzY2X1VQREFURSk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODc3Nl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBMVk9MXSA9ICgweDc5IC0gNjApIHwgV004Nzc2X0hQWkNFTjsKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBSVk9MXSA9ICgweDc5IC0gNjApIHwgV004Nzc2X0hQWkNFTjsKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDSUZDVFJMXSA9CisJCVdNODc3Nl9BRENGTVRfTEpVU1QgfCBXTTg3NzZfQURDV0xfMjQgfCBXTTg3NzZfQURDTUNMSzsKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfTVNUUkNUUkxdID0KKwkJV004Nzc2X0FEQ1JBVEVfMjU2IHwgV004Nzc2X0RBQ1JBVEVfMjU2OworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9QV1JET1dOXSA9IFdNODc3Nl9IUFBEOworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSA9IDB4YTUgfCBXTTg3NzZfWkNBOworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENSVk9MXSA9IDB4YTUgfCBXTTg3NzZfWkNBOworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENNVVhdID0gMHgwMDE7CisJd204Nzc2X3JlZ2lzdGVyc19pbml0KGNoaXApOworfQorCitzdGF0aWMgdm9pZCB4b25hcl9kc19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlkYXRhLT5nZW5lcmljLmFudGlfcG9wX2RlbGF5ID0gMzAwOworCWRhdGEtPmdlbmVyaWMub3V0cHV0X2VuYWJsZV9iaXQgPSBHUElPX0RTX09VVFBVVF9FTkFCTEU7CisKKwl3bTg3NzZfaW5pdChjaGlwKTsKKwl3bTg3NjZfcmVnaXN0ZXJzX2luaXQoY2hpcCk7CisKKwlveHlnZW5fd3JpdGUxNl9tYXNrZWQoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwgR1BJT19EU19JTlBVVF9ST1VURSwKKwkJCSAgICAgIEdQSU9fRFNfSFBfREVURUNUIHwgR1BJT19EU19JTlBVVF9ST1VURSk7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgR1BJT19EU19JTlBVVF9ST1VURSk7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fSU5URVJSVVBUX01BU0ssIEdQSU9fRFNfSFBfREVURUNUKTsKKwljaGlwLT5pbnRlcnJ1cHRfbWFzayB8PSBPWFlHRU5fSU5UX0dQSU87CisKKwl4b25hcl9lbmFibGVfb3V0cHV0KGNoaXApOworCisJc25kX2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIldNODc3NiIpOworCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJXTTg3NjYiKTsKK30KKworc3RhdGljIHZvaWQgeG9uYXJfZHNfY2xlYW51cChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXhvbmFyX2Rpc2FibGVfb3V0cHV0KGNoaXApOworfQorCitzdGF0aWMgdm9pZCB4b25hcl9kc19zdXNwZW5kKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJeG9uYXJfZHNfY2xlYW51cChjaGlwKTsKK30KKworc3RhdGljIHZvaWQgeG9uYXJfZHNfcmVzdW1lKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJd204Nzc2X3JlZ2lzdGVyc19pbml0KGNoaXApOworCXdtODc2Nl9yZWdpc3RlcnNfaW5pdChjaGlwKTsKKwl4b25hcl9lbmFibGVfb3V0cHV0KGNoaXApOworfQorCitzdGF0aWMgdm9pZCB3bTg3NzZfYWRjX2hhcmR3YXJlX2ZpbHRlcih1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwkJCQkgICAgICAgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgKmhhcmR3YXJlKQoreworCWlmIChjaGFubmVsID09IFBDTV9BKSB7CisJCWhhcmR3YXJlLT5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzY0MDAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzg4MjAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzk2MDAwOworCQloYXJkd2FyZS0+cmF0ZV9tYXggPSA5NjAwMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF93bTg3eDZfZGFjX3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNldF93bTg3NzZfYWRjX3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJdTE2IHJlZzsKKworCXJlZyA9IFdNODc3Nl9BRENSQVRFXzI1NiB8IFdNODc3Nl9EQUNSQVRFXzI1NjsKKwlpZiAocGFyYW1zX3JhdGUocGFyYW1zKSA+IDQ4MDAwKQorCQlyZWcgfD0gV004Nzc2X0FEQ09TUjsKKwl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9NU1RSQ1RSTCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3dtODc3Nl92b2x1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1OCB0b19jaGFuZ2U7CisKKwlpZiAoY2hpcC0+ZGFjX3ZvbHVtZVswXSA9PSBjaGlwLT5kYWNfdm9sdW1lWzFdKSB7CisJCWlmIChjaGlwLT5kYWNfdm9sdW1lWzBdICE9IGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9EQUNMVk9MXSB8fAorCQkgICAgY2hpcC0+ZGFjX3ZvbHVtZVsxXSAhPSBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfREFDUlZPTF0pIHsKKwkJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfREFDTUFTVEVSLAorCQkJCSAgICAgY2hpcC0+ZGFjX3ZvbHVtZVswXSB8IFdNODc3Nl9VUERBVEUpOworCQkJZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0RBQ0xWT0xdID0gY2hpcC0+ZGFjX3ZvbHVtZVswXTsKKwkJCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9EQUNSVk9MXSA9IGNoaXAtPmRhY192b2x1bWVbMF07CisJCX0KKwl9IGVsc2UgeworCQl0b19jaGFuZ2UgPSAoY2hpcC0+ZGFjX3ZvbHVtZVswXSAhPQorCQkJICAgICBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfREFDTFZPTF0pIDw8IDA7CisJCXRvX2NoYW5nZSB8PSAoY2hpcC0+ZGFjX3ZvbHVtZVsxXSAhPQorCQkJICAgICAgZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0RBQ0xWT0xdKSA8PCAxOworCQlpZiAodG9fY2hhbmdlICYgMSkKKwkJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfREFDTFZPTCwgY2hpcC0+ZGFjX3ZvbHVtZVswXSB8CisJCQkJICAgICAoKHRvX2NoYW5nZSAmIDIpID8gMCA6IFdNODc3Nl9VUERBVEUpKTsKKwkJaWYgKHRvX2NoYW5nZSAmIDIpCisJCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ1JWT0wsCisJCQkJICAgICBjaGlwLT5kYWNfdm9sdW1lWzFdIHwgV004Nzc2X1VQREFURSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfd204N3g2X3ZvbHVtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXN0YXRpYyBjb25zdCB1OCB3bTg3NjZfcmVnc1s2XSA9IHsKKwkJV004NzY2X0xEQTEsIFdNODc2Nl9SREExLAorCQlXTTg3NjZfTERBMiwgV004NzY2X1JEQTIsCisJCVdNODc2Nl9MREEzLCBXTTg3NjZfUkRBMywKKwl9OworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBpOworCXU4IHRvX2NoYW5nZTsKKworCXVwZGF0ZV93bTg3NzZfdm9sdW1lKGNoaXApOworCWlmIChjaGlwLT5kYWNfdm9sdW1lWzJdID09IGNoaXAtPmRhY192b2x1bWVbM10gJiYKKwkgICAgY2hpcC0+ZGFjX3ZvbHVtZVsyXSA9PSBjaGlwLT5kYWNfdm9sdW1lWzRdICYmCisJICAgIGNoaXAtPmRhY192b2x1bWVbMl0gPT0gY2hpcC0+ZGFjX3ZvbHVtZVs1XSAmJgorCSAgICBjaGlwLT5kYWNfdm9sdW1lWzJdID09IGNoaXAtPmRhY192b2x1bWVbNl0gJiYKKwkgICAgY2hpcC0+ZGFjX3ZvbHVtZVsyXSA9PSBjaGlwLT5kYWNfdm9sdW1lWzddKSB7CisJCXRvX2NoYW5nZSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpCisJCQlpZiAoY2hpcC0+ZGFjX3ZvbHVtZVsyXSAhPQorCQkJICAgIGRhdGEtPndtODc2Nl9yZWdzW3dtODc2Nl9yZWdzW2ldXSkKKwkJCQl0b19jaGFuZ2UgPSAxOworCQlpZiAodG9fY2hhbmdlKSB7CisJCQl3bTg3NjZfd3JpdGUoY2hpcCwgV004NzY2X01BU1REQSwKKwkJCQkgICAgIGNoaXAtPmRhY192b2x1bWVbMl0gfCBXTTg3NjZfVVBEQVRFKTsKKwkJCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpCisJCQkJZGF0YS0+d204NzY2X3JlZ3Nbd204NzY2X3JlZ3NbaV1dID0KKwkJCQkJY2hpcC0+ZGFjX3ZvbHVtZVsyXTsKKwkJfQorCX0gZWxzZSB7CisJCXRvX2NoYW5nZSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpCisJCQl0b19jaGFuZ2UgfD0gKGNoaXAtPmRhY192b2x1bWVbMiArIGldICE9CisJCQkJICAgICAgZGF0YS0+d204NzY2X3JlZ3Nbd204NzY2X3JlZ3NbaV1dKSA8PCBpOworCQlmb3IgKGkgPSAwOyBpIDwgNjsgKytpKQorCQkJaWYgKHRvX2NoYW5nZSAmICgxIDw8IGkpKQorCQkJCXdtODc2Nl93cml0ZShjaGlwLCB3bTg3NjZfcmVnc1tpXSwKKwkJCQkJICAgICBjaGlwLT5kYWNfdm9sdW1lWzIgKyBpXSB8CisJCQkJCSAgICAgKCh0b19jaGFuZ2UgJiAoMHgzZSA8PCBpKSkKKwkJCQkJICAgICAgPyAwIDogV004NzY2X1VQREFURSkpOworCX0KK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3dtODc3Nl9tdXRlKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJd204Nzc2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NzZfREFDTVVURSwKKwkJCSAgICBjaGlwLT5kYWNfbXV0ZSA/IFdNODc3Nl9ETVVURSA6IDApOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfd204N3g2X211dGUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwl1cGRhdGVfd204Nzc2X211dGUoY2hpcCk7CisJd204NzY2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NjZfREFDX0NUUkwyLCBXTTg3NjZfWkNEIHwKKwkJCSAgICAoY2hpcC0+ZGFjX211dGUgPyBXTTg3NjZfRE1VVEVfTUFTSyA6IDApKTsKK30KKworc3RhdGljIHZvaWQgeG9uYXJfZHNfZ3Bpb19jaGFuZ2VkKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJdTE2IGJpdHM7CisKKwliaXRzID0gb3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBKTsKKwlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSFAgZGV0ZWN0OiAlZFxuIiwgISEoYml0cyAmIEdQSU9fRFNfSFBfREVURUNUKSk7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2JpdF9zd2l0Y2hfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXUxNiBiaXQgPSBjdGwtPnByaXZhdGVfdmFsdWUgJiAweGZmZmY7CisJdW5zaWduZWQgaW50IHJlZ19pbmRleCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmZjsKKwlib29sIGludmVydCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMjQpICYgMTsKKworCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0KKwkJKChkYXRhLT53bTg3NzZfcmVnc1tyZWdfaW5kZXhdICYgYml0KSAhPSAwKSBeIGludmVydDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzZfYml0X3N3aXRjaF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdTE2IGJpdCA9IGN0bC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmZmZjsKKwl1MTYgcmVnX3ZhbHVlOworCXVuc2lnbmVkIGludCByZWdfaW5kZXggPSAoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CisJYm9vbCBpbnZlcnQgPSAoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDI0KSAmIDE7CisJaW50IGNoYW5nZWQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJcmVnX3ZhbHVlID0gZGF0YS0+d204Nzc2X3JlZ3NbcmVnX2luZGV4XSAmIH5iaXQ7CisJaWYgKHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIF4gaW52ZXJ0KQorCQlyZWdfdmFsdWUgfD0gYml0OworCWNoYW5nZWQgPSByZWdfdmFsdWUgIT0gZGF0YS0+d204Nzc2X3JlZ3NbcmVnX2luZGV4XTsKKwlpZiAoY2hhbmdlZCkKKwkJd204Nzc2X3dyaXRlKGNoaXAsIHJlZ19pbmRleCwgcmVnX3ZhbHVlKTsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGludCB3bTg3NzZfZmllbGRfZW51bV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaGxkWzE2XSA9IHsKKwkJIjAgbXMiLCAiMi42NyBtcyIsICI1LjMzIG1zIiwgIjEwLjYgbXMiLAorCQkiMjEuMyBtcyIsICI0Mi43IG1zIiwgIjg1LjMgbXMiLCAiMTcxIG1zIiwKKwkJIjM0MSBtcyIsICI2ODMgbXMiLCAiMS4zNyBzIiwgIjIuNzMgcyIsCisJCSI1LjQ2IHMiLCAiMTAuOSBzIiwgIjIxLjggcyIsICI0My43IHMiLAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGF0a19saW1bMTFdID0geworCQkiMC4yNSBtcyIsICIwLjUgbXMiLCAiMSBtcyIsICIyIG1zIiwKKwkJIjQgbXMiLCAiOCBtcyIsICIxNiBtcyIsICIzMiBtcyIsCisJCSI2NCBtcyIsICIxMjggbXMiLCAiMjU2IG1zIiwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBhdGtfYWxjWzExXSA9IHsKKwkJIjguNDAgbXMiLCAiMTYuOCBtcyIsICIzMy42IG1zIiwgIjY3LjIgbXMiLAorCQkiMTM0IG1zIiwgIjI2OSBtcyIsICI1MzggbXMiLCAiMS4wOCBzIiwKKwkJIjIuMTUgcyIsICI0LjMgcyIsICI4LjYgcyIsCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZGN5X2xpbVsxMV0gPSB7CisJCSIxLjIgbXMiLCAiMi40IG1zIiwgIjQuOCBtcyIsICI5LjYgbXMiLAorCQkiMTkuMiBtcyIsICIzOC40IG1zIiwgIjc2LjggbXMiLCAiMTU0IG1zIiwKKwkJIjMwNyBtcyIsICI2MTQgbXMiLCAiMS4yMyBzIiwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBkY3lfYWxjWzExXSA9IHsKKwkJIjMzLjUgbXMiLCAiNjcuMCBtcyIsICIxMzQgbXMiLCAiMjY4IG1zIiwKKwkJIjUzNiBtcyIsICIxLjA3IHMiLCAiMi4xNCBzIiwgIjQuMjkgcyIsCisJCSI4LjU4IHMiLCAiMTcuMiBzIiwgIjM0LjMgcyIsCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdHJhbndpbls4XSA9IHsKKwkJIjAgdXMiLCAiNjIuNSB1cyIsICIxMjUgdXMiLCAiMjUwIHVzIiwKKwkJIjUwMCB1cyIsICIxIG1zIiwgIjIgbXMiLCAiNCBtcyIsCisJfTsKKwl1OCBtYXg7CisJY29uc3QgY2hhciAqY29uc3QgKm5hbWVzOworCisJbWF4ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiAweGY7CisJaW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwlpbmZvLT5jb3VudCA9IDE7CisJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IG1heCArIDE7CisJaWYgKGluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+IG1heCkKKwkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gbWF4OworCXN3aXRjaCAoKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAyNCkgJiAweDFmKSB7CisJY2FzZSBXTTg3NzZfQUxDQ1RSTDI6CisJCW5hbWVzID0gaGxkOworCQlicmVhazsKKwljYXNlIFdNODc3Nl9BTENDVFJMMzoKKwkJaWYgKCgoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDIwKSAmIDB4ZikgPT0gMCkgeworCQkJaWYgKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIExDX0NPTlRST0xfTElNSVRFUikKKwkJCQluYW1lcyA9IGF0a19saW07CisJCQllbHNlCisJCQkJbmFtZXMgPSBhdGtfYWxjOworCQl9IGVsc2UgeworCQkJaWYgKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIExDX0NPTlRST0xfTElNSVRFUikKKwkJCQluYW1lcyA9IGRjeV9saW07CisJCQllbHNlCisJCQkJbmFtZXMgPSBkY3lfYWxjOworCQl9CisJCWJyZWFrOworCWNhc2UgV004Nzc2X0xJTUlURVI6CisJCW5hbWVzID0gdHJhbndpbjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJc3RyY3B5KGluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgbmFtZXNbaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2ZpZWxkX3ZvbHVtZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQoreworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJaW5mby0+Y291bnQgPSAxOworCWluZm8tPnZhbHVlLmludGVnZXIubWluID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiA4KSAmIDB4ZjsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMTIpICYgMHhmOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bTg3NzZfZmllbGRfc2V0X2Zyb21fY3RsKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdW5zaWduZWQgaW50IHZhbHVlLCByZWdfaW5kZXgsIG1vZGU7CisJdTggbWluLCBtYXgsIHNoaWZ0OworCXUxNiBtYXNrLCByZWdfdmFsdWU7CisJYm9vbCBpbnZlcnQ7CisKKwlpZiAoKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BTENDVFJMMV0gJiBXTTg3NzZfTENTRUxfTUFTSykgPT0KKwkgICAgV004Nzc2X0xDU0VMX0xJTUlURVIpCisJCW1vZGUgPSBMQ19DT05UUk9MX0xJTUlURVI7CisJZWxzZQorCQltb2RlID0gTENfQ09OVFJPTF9BTEM7CisJaWYgKCEoY3RsLT5wcml2YXRlX3ZhbHVlICYgbW9kZSkpCisJCXJldHVybjsKKworCXZhbHVlID0gY3RsLT5wcml2YXRlX3ZhbHVlICYgMHhmOworCW1pbiA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAweGY7CisJbWF4ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiAweGY7CisJbWFzayA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmOworCXNoaWZ0ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAyMCkgJiAweGY7CisJcmVnX2luZGV4ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAyNCkgJiAweDFmOworCWludmVydCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMjkpICYgMHgxOworCisJaWYgKGludmVydCkKKwkJdmFsdWUgPSBtYXggLSAodmFsdWUgLSBtaW4pOworCXJlZ192YWx1ZSA9IGRhdGEtPndtODc3Nl9yZWdzW3JlZ19pbmRleF07CisJcmVnX3ZhbHVlICY9IH4obWFzayA8PCBzaGlmdCk7CisJcmVnX3ZhbHVlIHw9IHZhbHVlIDw8IHNoaWZ0OworCXdtODc3Nl93cml0ZV9jYWNoZWQoY2hpcCwgcmVnX2luZGV4LCByZWdfdmFsdWUpOworfQorCitzdGF0aWMgaW50IHdtODc3Nl9maWVsZF9zZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXU4IG1pbiwgbWF4OworCWludCBjaGFuZ2VkOworCisJbWluID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiA4KSAmIDB4ZjsKKwltYXggPSAoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDEyKSAmIDB4ZjsKKwlpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpCisJCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKKwljaGFuZ2VkID0gdmFsdWUgIT0gKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIDB4Zik7CisJaWYgKGNoYW5nZWQpIHsKKwkJY3RsLT5wcml2YXRlX3ZhbHVlID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIH4weGYpIHwgdmFsdWU7CisJCXdtODc3Nl9maWVsZF9zZXRfZnJvbV9jdGwoY3RsKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2ZpZWxkX2VudW1fZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGN0bC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzZfZmllbGRfdm9sdW1lX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjdGwtPnByaXZhdGVfdmFsdWUgJiAweGY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2ZpZWxkX2VudW1fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJcmV0dXJuIHdtODc3Nl9maWVsZF9zZXQoY3RsLCB2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKTsKK30KKworc3RhdGljIGludCB3bTg3NzZfZmllbGRfdm9sdW1lX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJcmV0dXJuIHdtODc3Nl9maWVsZF9zZXQoY3RsLCB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2hwX3ZvbF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCWluZm8tPmNvdW50ID0gMjsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDB4NzkgLSA2MDsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDB4N2Y7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2hwX3ZvbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPQorCQlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBMVk9MXSAmIFdNODc3Nl9IUEFUVF9NQVNLOworCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0KKwkJZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0hQUlZPTF0gJiBXTTg3NzZfSFBBVFRfTUFTSzsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzZfaHBfdm9sX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1OCB0b191cGRhdGU7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJdG9fdXBkYXRlID0gKHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICE9CisJCSAgICAgKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUExWT0xdICYgV004Nzc2X0hQQVRUX01BU0spKQorCQk8PCAwOworCXRvX3VwZGF0ZSB8PSAodmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gIT0KKwkJICAgICAgKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUFJWT0xdICYgV004Nzc2X0hQQVRUX01BU0spKQorCQk8PCAxOworCWlmICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9PSB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSkgeworCQlpZiAodG9fdXBkYXRlKSB7CisJCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0hQTUFTVEVSLAorCQkJCSAgICAgdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfAorCQkJCSAgICAgV004Nzc2X0hQWkNFTiB8IFdNODc3Nl9VUERBVEUpOworCQkJZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0hQTFZPTF0gPQorCQkJCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIHwgV004Nzc2X0hQWkNFTjsKKwkJCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUFJWT0xdID0KKwkJCQl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSB8IFdNODc3Nl9IUFpDRU47CisJCX0KKwl9IGVsc2UgeworCQlpZiAodG9fdXBkYXRlICYgMSkKKwkJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfSFBMVk9MLAorCQkJCSAgICAgdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfAorCQkJCSAgICAgV004Nzc2X0hQWkNFTiB8CisJCQkJICAgICAoKHRvX3VwZGF0ZSAmIDIpID8gMCA6IFdNODc3Nl9VUERBVEUpKTsKKwkJaWYgKHRvX3VwZGF0ZSAmIDIpCisJCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0hQUlZPTCwKKwkJCQkgICAgIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdIHwKKwkJCQkgICAgIFdNODc3Nl9IUFpDRU4gfCBXTTg3NzZfVVBEQVRFKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIHRvX3VwZGF0ZSAhPSAwOworfQorCitzdGF0aWMgaW50IHdtODc3Nl9pbnB1dF9tdXhfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdW5zaWduZWQgaW50IG11eF9iaXQgPSBjdGwtPnByaXZhdGVfdmFsdWU7CisKKwl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9CisJCSEhKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENNVVhdICYgbXV4X2JpdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2lucHV0X211eF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1bnNpZ25lZCBpbnQgbXV4X2JpdCA9IGN0bC0+cHJpdmF0ZV92YWx1ZTsKKwl1MTYgcmVnOworCWludCBjaGFuZ2VkOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCXJlZyA9IGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENNVVhdOworCWlmICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkgeworCQlyZWcgJj0gfjB4MDAzOworCQlyZWcgfD0gbXV4X2JpdDsKKwl9IGVsc2UKKwkJcmVnICY9IH5tdXhfYml0OworCWNoYW5nZWQgPSByZWcgIT0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ01VWF07CisJaWYgKGNoYW5nZWQpIHsKKwkJb3h5Z2VuX3dyaXRlMTZfbWFza2VkKGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsCisJCQkJICAgICAgcmVnICYgMSA/IEdQSU9fRFNfSU5QVVRfUk9VVEUgOiAwLAorCQkJCSAgICAgIEdQSU9fRFNfSU5QVVRfUk9VVEUpOworCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0FEQ01VWCwgcmVnKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2lucHV0X3ZvbF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQoreworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJaW5mby0+Y291bnQgPSAyOworCWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMHhhNTsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDB4ZmY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2lucHV0X3ZvbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKKwl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9CisJCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSAmIFdNODc3Nl9BR01BU0s7CisJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPQorCQlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDUlZPTF0gJiBXTTg3NzZfQUdNQVNLOworCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODc3Nl9pbnB1dF92b2xfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJaW50IGNoYW5nZWQgPSAwOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCWNoYW5nZWQgPSAodmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gIT0KKwkJICAgKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSAmIFdNODc3Nl9BR01BU0spKSB8fAorCQkgICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSAhPQorCQkgICAoZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ1JWT0xdICYgV004Nzc2X0FHTUFTSykpOworCXdtODc3Nl93cml0ZV9jYWNoZWQoY2hpcCwgV004Nzc2X0FEQ0xWT0wsCisJCQkgICAgdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfCBXTTg3NzZfWkNBKTsKKwl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9BRENSVk9MLAorCQkJICAgIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdIHwgV004Nzc2X1pDQSk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2xldmVsX2NvbnRyb2xfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzWzNdID0geworCQkiTm9uZSIsICJQZWFrIExpbWl0ZXIiLCAiQXV0b21hdGljIExldmVsIENvbnRyb2wiCisJfTsKKwlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCWluZm8tPmNvdW50ID0gMTsKKwlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKKwlpZiAoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IDMpCisJCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDI7CisJc3RyY3B5KGluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgbmFtZXNbaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2xldmVsX2NvbnRyb2xfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJaWYgKCEoZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FMQ0NUUkwyXSAmIFdNODc3Nl9MQ0VOKSkKKwkJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7CisJZWxzZSBpZiAoKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BTENDVFJMMV0gJiBXTTg3NzZfTENTRUxfTUFTSykgPT0KKwkJIFdNODc3Nl9MQ1NFTF9MSU1JVEVSKQorCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMTsKKwllbHNlCisJCXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAyOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhY3RpdmF0ZV9jb250cm9sKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IGFjY2VzczsKKworCWlmIChjdGwtPnByaXZhdGVfdmFsdWUgJiBtb2RlKQorCQlhY2Nlc3MgPSAwOworCWVsc2UKKwkJYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFOworCWlmICgoY3RsLT52ZFswXS5hY2Nlc3MgJiBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkUpICE9IGFjY2VzcykgeworCQljdGwtPnZkWzBdLmFjY2VzcyBePSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkU7CisJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX0lORk8sICZjdGwtPmlkKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2xldmVsX2NvbnRyb2xfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBtb2RlID0gMCwgaTsKKwl1MTYgY3RybDEsIGN0cmwyOworCWludCBjaGFuZ2VkOworCisJaWYgKHZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPj0gMykKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCWNoYW5nZWQgPSB2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICE9IGN0bC0+cHJpdmF0ZV92YWx1ZTsKKwlpZiAoY2hhbmdlZCkgeworCQljdGwtPnByaXZhdGVfdmFsdWUgPSB2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCQljdHJsMSA9IGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BTENDVFJMMV07CisJCWN0cmwyID0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FMQ0NUUkwyXTsKKwkJc3dpdGNoICh2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKSB7CisJCWRlZmF1bHQ6CisJCQl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9BTENDVFJMMiwKKwkJCQkJICAgIGN0cmwyICYgfldNODc3Nl9MQ0VOKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9BTENDVFJMMSwKKwkJCQkJICAgIChjdHJsMSAmIH5XTTg3NzZfTENTRUxfTUFTSykgfAorCQkJCQkgICAgV004Nzc2X0xDU0VMX0xJTUlURVIpOworCQkJd204Nzc2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NzZfQUxDQ1RSTDIsCisJCQkJCSAgICBjdHJsMiB8IFdNODc3Nl9MQ0VOKTsKKwkJCW1vZGUgPSBMQ19DT05UUk9MX0xJTUlURVI7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJd204Nzc2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NzZfQUxDQ1RSTDEsCisJCQkJCSAgICAoY3RybDEgJiB+V004Nzc2X0xDU0VMX01BU0spIHwKKwkJCQkJICAgIFdNODc3Nl9MQ1NFTF9BTENfU1RFUkVPKTsKKwkJCXdtODc3Nl93cml0ZV9jYWNoZWQoY2hpcCwgV004Nzc2X0FMQ0NUUkwyLAorCQkJCQkgICAgY3RybDIgfCBXTTg3NzZfTENFTik7CisJCQltb2RlID0gTENfQ09OVFJPTF9BTEM7CisJCQlicmVhazsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT5sY19jb250cm9scyk7ICsraSkKKwkJCWFjdGl2YXRlX2NvbnRyb2woY2hpcCwgZGF0YS0+bGNfY29udHJvbHNbaV0sIG1vZGUpOworCX0KKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGludCBocGZfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbMl0gPSB7CisJCSJOb25lIiwgIkhpZ2gtcGFzcyBGaWx0ZXIiCisJfTsKKworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJaW5mby0+Y291bnQgPSAxOworCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAyOworCWlmIChpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gMikKKwkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMTsKKwlzdHJjcHkoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCBuYW1lc1tpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBocGZfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9CisJCSEoZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ0lGQ1RSTF0gJiBXTTg3NzZfQURDSFBEKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBocGZfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCByZWc7CisJaW50IGNoYW5nZWQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJcmVnID0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ0lGQ1RSTF0gJiB+V004Nzc2X0FEQ0hQRDsKKwlpZiAoIXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pCisJCXJlZyB8PSBXTTg3NzZfQURDSFBEOworCWNoYW5nZWQgPSByZWcgIT0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ0lGQ1RSTF07CisJaWYgKGNoYW5nZWQpCisJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfQURDSUZDVFJMLCByZWcpOworCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiBjaGFuZ2VkOworfQorCisjZGVmaW5lIFdNODc3Nl9CSVRfU1dJVENIKHhuYW1lLCByZWcsIGJpdCwgaW52ZXJ0LCBmbGFncykgeyBcCisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKKwkubmFtZSA9IHhuYW1lLCBcCisJLmluZm8gPSBzbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvLCBcCisJLmdldCA9IHdtODc3Nl9iaXRfc3dpdGNoX2dldCwgXAorCS5wdXQgPSB3bTg3NzZfYml0X3N3aXRjaF9wdXQsIFwKKwkucHJpdmF0ZV92YWx1ZSA9ICgocmVnKSA8PCAxNikgfCAoYml0KSB8ICgoaW52ZXJ0KSA8PCAyNCkgfCAoZmxhZ3MpLCBcCit9CisjZGVmaW5lIF9XTTg3NzZfRklFTERfQ1RMKHhuYW1lLCByZWcsIHNoaWZ0LCBpbml0dmFsLCBtaW4sIG1heCwgbWFzaywgZmxhZ3MpIFwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAorCS5uYW1lID0geG5hbWUsIFwKKwkucHJpdmF0ZV92YWx1ZSA9IChpbml0dmFsKSB8ICgobWluKSA8PCA4KSB8ICgobWF4KSA8PCAxMikgfCBcCisJKChtYXNrKSA8PCAxNikgfCAoKHNoaWZ0KSA8PCAyMCkgfCAoKHJlZykgPDwgMjQpIHwgKGZsYWdzKQorI2RlZmluZSBXTTg3NzZfRklFTERfQ1RMX0VOVU0oeG5hbWUsIHJlZywgc2hpZnQsIGluaXQsIG1pbiwgbWF4LCBtYXNrLCBmbGFncykge1wKKwlfV004Nzc2X0ZJRUxEX0NUTCh4bmFtZSAiIENhcHR1cmUgRW51bSIsIFwKKwkJCSAgcmVnLCBzaGlmdCwgaW5pdCwgbWluLCBtYXgsIG1hc2ssIGZsYWdzKSwgXAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwgXAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRSwgXAorCS5pbmZvID0gd204Nzc2X2ZpZWxkX2VudW1faW5mbywgXAorCS5nZXQgPSB3bTg3NzZfZmllbGRfZW51bV9nZXQsIFwKKwkucHV0ID0gd204Nzc2X2ZpZWxkX2VudW1fcHV0LCBcCit9CisjZGVmaW5lIFdNODc3Nl9GSUVMRF9DVExfVk9MVU1FKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIHRsdl9wKSB7IFwKKwlfV004Nzc2X0ZJRUxEX0NUTChhICIgQ2FwdHVyZSBWb2x1bWUiLCBiLCBjLCBkLCBlLCBmLCBnLCBoKSwgXAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwgXAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRSB8IFwKKwkJICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQsIFwKKwkuaW5mbyA9IHdtODc3Nl9maWVsZF92b2x1bWVfaW5mbywgXAorCS5nZXQgPSB3bTg3NzZfZmllbGRfdm9sdW1lX2dldCwgXAorCS5wdXQgPSB3bTg3NzZfZmllbGRfdm9sdW1lX3B1dCwgXAorCS50bHYgPSB7IC5wID0gdGx2X3AgfSwgXAorfQorCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204N3g2X2RhY19kYl9zY2FsZSwgLTYwMDAsIDUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRSh3bTg3NzZfYWRjX2RiX3NjYWxlLCAtMjEwMCwgNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHdtODc3Nl9ocF9kYl9zY2FsZSwgLTYwMDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204Nzc2X2xjdF9kYl9zY2FsZSwgLTE2MDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204Nzc2X21heGdhaW5fZGJfc2NhbGUsIDAsIDQwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204Nzc2X25ndGhfZGJfc2NhbGUsIC03ODAwLCA2MDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHdtODc3Nl9tYXhhdHRlbl9saW1fZGJfc2NhbGUsIC0xMjAwLCAxMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHdtODc3Nl9tYXhhdHRlbl9hbGNfZGJfc2NhbGUsIC0yMTAwLCA0MDAsIDApOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZHNfY29udHJvbHNbXSA9IHsKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkJLmluZm8gPSB3bTg3NzZfaHBfdm9sX2luZm8sCisJCS5nZXQgPSB3bTg3NzZfaHBfdm9sX2dldCwKKwkJLnB1dCA9IHdtODc3Nl9ocF92b2xfcHV0LAorCQkudGx2ID0geyAucCA9IHdtODc3Nl9ocF9kYl9zY2FsZSB9LAorCX0sCisJV004Nzc2X0JJVF9TV0lUQ0goIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLAorCQkJICBXTTg3NzZfUFdSRE9XTiwgV004Nzc2X0hQUEQsIDEsIDApLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIklucHV0IENhcHR1cmUgVm9sdW1lIiwKKwkJLmluZm8gPSB3bTg3NzZfaW5wdXRfdm9sX2luZm8sCisJCS5nZXQgPSB3bTg3NzZfaW5wdXRfdm9sX2dldCwKKwkJLnB1dCA9IHdtODc3Nl9pbnB1dF92b2xfcHV0LAorCQkudGx2ID0geyAucCA9IHdtODc3Nl9hZGNfZGJfc2NhbGUgfSwKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkxpbmUgQ2FwdHVyZSBTd2l0Y2giLAorCQkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCisJCS5nZXQgPSB3bTg3NzZfaW5wdXRfbXV4X2dldCwKKwkJLnB1dCA9IHdtODc3Nl9pbnB1dF9tdXhfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IDEgPDwgMCwKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIk1pYyBDYXB0dXJlIFN3aXRjaCIsCisJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKKwkJLmdldCA9IHdtODc3Nl9pbnB1dF9tdXhfZ2V0LAorCQkucHV0ID0gd204Nzc2X2lucHV0X211eF9wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gMSA8PCAxLAorCX0sCisJV004Nzc2X0JJVF9TV0lUQ0goIkF1eCIsIFdNODc3Nl9BRENNVVgsIDEgPDwgMiwgMCwgMCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQURDIEZpbHRlciBDYXB0dXJlIEVudW0iLAorCQkuaW5mbyA9IGhwZl9pbmZvLAorCQkuZ2V0ID0gaHBmX2dldCwKKwkJLnB1dCA9IGhwZl9wdXQsCisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJMZXZlbCBDb250cm9sIENhcHR1cmUgRW51bSIsCisJCS5pbmZvID0gd204Nzc2X2xldmVsX2NvbnRyb2xfaW5mbywKKwkJLmdldCA9IHdtODc3Nl9sZXZlbF9jb250cm9sX2dldCwKKwkJLnB1dCA9IHdtODc3Nl9sZXZlbF9jb250cm9sX3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSAwLAorCX0sCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxjX2NvbnRyb2xzW10gPSB7CisJV004Nzc2X0ZJRUxEX0NUTF9WT0xVTUUoIkxpbWl0ZXIgVGhyZXNob2xkIiwKKwkJCQlXTTg3NzZfQUxDQ1RSTDEsIDAsIDExLCAwLCAxNSwgMHhmLAorCQkJCUxDX0NPTlRST0xfTElNSVRFUiwgd204Nzc2X2xjdF9kYl9zY2FsZSksCisJV004Nzc2X0ZJRUxEX0NUTF9FTlVNKCJMaW1pdGVyIEF0dGFjayBUaW1lIiwKKwkJCSAgICAgIFdNODc3Nl9BTENDVFJMMywgMCwgMiwgMCwgMTAsIDB4ZiwKKwkJCSAgICAgIExDX0NPTlRST0xfTElNSVRFUiksCisJV004Nzc2X0ZJRUxEX0NUTF9FTlVNKCJMaW1pdGVyIERlY2F5IFRpbWUiLAorCQkJICAgICAgV004Nzc2X0FMQ0NUUkwzLCA0LCAzLCAwLCAxMCwgMHhmLAorCQkJICAgICAgTENfQ09OVFJPTF9MSU1JVEVSKSwKKwlXTTg3NzZfRklFTERfQ1RMX0VOVU0oIkxpbWl0ZXIgVHJhbnNpZW50IFdpbmRvdyIsCisJCQkgICAgICBXTTg3NzZfTElNSVRFUiwgNCwgMiwgMCwgNywgMHg3LAorCQkJICAgICAgTENfQ09OVFJPTF9MSU1JVEVSKSwKKwlXTTg3NzZfRklFTERfQ1RMX1ZPTFVNRSgiTGltaXRlciBNYXhpbXVtIEF0dGVudWF0aW9uIiwKKwkJCQlXTTg3NzZfTElNSVRFUiwgMCwgNiwgMywgMTIsIDB4ZiwKKwkJCQlMQ19DT05UUk9MX0xJTUlURVIsCisJCQkJd204Nzc2X21heGF0dGVuX2xpbV9kYl9zY2FsZSksCisJV004Nzc2X0ZJRUxEX0NUTF9WT0xVTUUoIkFMQyBUYXJnZXQgTGV2ZWwiLAorCQkJCVdNODc3Nl9BTENDVFJMMSwgMCwgMTEsIDAsIDE1LCAweGYsCisJCQkJTENfQ09OVFJPTF9BTEMsIHdtODc3Nl9sY3RfZGJfc2NhbGUpLAorCVdNODc3Nl9GSUVMRF9DVExfRU5VTSgiQUxDIEF0dGFjayBUaW1lIiwKKwkJCSAgICAgIFdNODc3Nl9BTENDVFJMMywgMCwgMiwgMCwgMTAsIDB4ZiwKKwkJCSAgICAgIExDX0NPTlRST0xfQUxDKSwKKwlXTTg3NzZfRklFTERfQ1RMX0VOVU0oIkFMQyBEZWNheSBUaW1lIiwKKwkJCSAgICAgIFdNODc3Nl9BTENDVFJMMywgNCwgMywgMCwgMTAsIDB4ZiwKKwkJCSAgICAgIExDX0NPTlRST0xfQUxDKSwKKwlXTTg3NzZfRklFTERfQ1RMX1ZPTFVNRSgiQUxDIE1heGltdW0gR2FpbiIsCisJCQkJV004Nzc2X0FMQ0NUUkwxLCA0LCA3LCAxLCA3LCAweDcsCisJCQkJTENfQ09OVFJPTF9BTEMsIHdtODc3Nl9tYXhnYWluX2RiX3NjYWxlKSwKKwlXTTg3NzZfRklFTERfQ1RMX1ZPTFVNRSgiQUxDIE1heGltdW0gQXR0ZW51YXRpb24iLAorCQkJCVdNODc3Nl9MSU1JVEVSLCAwLCAxMCwgMTAsIDE1LCAweGYsCisJCQkJTENfQ09OVFJPTF9BTEMsIHdtODc3Nl9tYXhhdHRlbl9hbGNfZGJfc2NhbGUpLAorCVdNODc3Nl9GSUVMRF9DVExfRU5VTSgiQUxDIEhvbGQgVGltZSIsCisJCQkgICAgICBXTTg3NzZfQUxDQ1RSTDIsIDAsIDAsIDAsIDE1LCAweGYsCisJCQkgICAgICBMQ19DT05UUk9MX0FMQyksCisJV004Nzc2X0JJVF9TV0lUQ0goIk5vaXNlIEdhdGUgQ2FwdHVyZSBTd2l0Y2giLAorCQkJICBXTTg3NzZfTk9JU0VHQVRFLCBXTTg3NzZfTkdBVCwgMCwKKwkJCSAgTENfQ09OVFJPTF9BTEMpLAorCVdNODc3Nl9GSUVMRF9DVExfVk9MVU1FKCJOb2lzZSBHYXRlIFRocmVzaG9sZCIsCisJCQkJV004Nzc2X05PSVNFR0FURSwgMiwgMCwgMCwgNywgMHg3LAorCQkJCUxDX0NPTlRST0xfQUxDLCB3bTg3NzZfbmd0aF9kYl9zY2FsZSksCit9OworCitzdGF0aWMgaW50IHhvbmFyX2RzX2NvbnRyb2xfZmlsdGVyKHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICp0ZW1wbGF0ZSkKK3sKKwlpZiAoIXN0cm5jbXAodGVtcGxhdGUtPm5hbWUsICJDRCBDYXB0dXJlICIsIDExKSkKKwkJcmV0dXJuIDE7IC8qIG5vIENEIGlucHV0ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeG9uYXJfZHNfbWl4ZXJfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bDsKKwlpbnQgZXJyOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHNfY29udHJvbHMpOyArK2kpIHsKKwkJY3RsID0gc25kX2N0bF9uZXcxKCZkc19jb250cm9sc1tpXSwgY2hpcCk7CisJCWlmICghY3RsKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGN0bCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUobGNfY29udHJvbHMpICE9IEFSUkFZX1NJWkUoZGF0YS0+bGNfY29udHJvbHMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsY19jb250cm9scyk7ICsraSkgeworCQljdGwgPSBzbmRfY3RsX25ldzEoJmxjX2NvbnRyb2xzW2ldLCBjaGlwKTsKKwkJaWYgKCFjdGwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgY3RsKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQlkYXRhLT5sY19jb250cm9sc1tpXSA9IGN0bDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX2RzID0geworCS5zaG9ydG5hbWUgPSAiWG9uYXIgRFMiLAorCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDIwMCIsCisJLmNoaXAgPSAiQVYyMDAiLAorCS5pbml0ID0geG9uYXJfZHNfaW5pdCwKKwkuY29udHJvbF9maWx0ZXIgPSB4b25hcl9kc19jb250cm9sX2ZpbHRlciwKKwkubWl4ZXJfaW5pdCA9IHhvbmFyX2RzX21peGVyX2luaXQsCisJLmNsZWFudXAgPSB4b25hcl9kc19jbGVhbnVwLAorCS5zdXNwZW5kID0geG9uYXJfZHNfc3VzcGVuZCwKKwkucmVzdW1lID0geG9uYXJfZHNfcmVzdW1lLAorCS5wY21faGFyZHdhcmVfZmlsdGVyID0gd204Nzc2X2FkY19oYXJkd2FyZV9maWx0ZXIsCisJLmdldF9pMnNfbWNsayA9IG94eWdlbl9kZWZhdWx0X2kyc19tY2xrLAorCS5zZXRfZGFjX3BhcmFtcyA9IHNldF93bTg3eDZfZGFjX3BhcmFtcywKKwkuc2V0X2FkY19wYXJhbXMgPSBzZXRfd204Nzc2X2FkY19wYXJhbXMsCisJLnVwZGF0ZV9kYWNfdm9sdW1lID0gdXBkYXRlX3dtODd4Nl92b2x1bWUsCisJLnVwZGF0ZV9kYWNfbXV0ZSA9IHVwZGF0ZV93bTg3eDZfbXV0ZSwKKwkuZ3Bpb19jaGFuZ2VkID0geG9uYXJfZHNfZ3Bpb19jaGFuZ2VkLAorCS5kYWNfdGx2ID0gd204N3g2X2RhY19kYl9zY2FsZSwKKwkubW9kZWxfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCB4b25hcl93bTg3eDYpLAorCS5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAorCQkJIFBMQVlCQUNLXzFfVE9fU1BESUYgfAorCQkJIENBUFRVUkVfMF9GUk9NX0kyU18xLAorCS5kYWNfY2hhbm5lbHMgPSA4LAorCS5kYWNfdm9sdW1lX21pbiA9IDI1NSAtIDIqNjAsCisJLmRhY192b2x1bWVfbWF4ID0gMjU1LAorCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl9TUEksCisJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCisJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCit9OworCitpbnQgX19kZXZpbml0IGdldF94b25hcl93bTg3eDZfbW9kZWwoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzd2l0Y2ggKGlkLT5zdWJkZXZpY2UpIHsKKwljYXNlIDB4ODM4ZToKKwkJY2hpcC0+bW9kZWwgPSBtb2RlbF94b25hcl9kczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwppbmRleCA4MzNlOWM3Li45NWNmZGUyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwpAQCAtOTQsNyArOTQsNyBAQAogCVBDSV9JRF9MQVNUCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGN4aHJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGN4aHJfaWRzKSA9IHsKIAl7IDB4MTBiNSwgMHg5NjU2LCAweDEzNjksIDB4YjAwMSwgMCwgMCwgUENJX0lEX1ZYODgySFIsIH0sCiAJeyAweDEwYjUsIDB4OTY1NiwgMHgxMzY5LCAweGIxMDEsIDAsIDAsIFBDSV9JRF9QQ1g4ODJIUiwgfSwKIAl7IDB4MTBiNSwgMHg5NjU2LCAweDEzNjksIDB4YjIwMSwgMCwgMCwgUENJX0lEX1ZYODgxSFIsIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMgYi9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKaW5kZXggZTY2ZWYyYi4uOTYwYTIyNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCisrKyBiL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYwpAQCAtNTA2LDcgKzUwNiw3IEBACiAvKgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfcmlwdGlkZV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfcmlwdGlkZV9pZHMpID0gewogCXsgUENJX0RFVklDRSgweDEyN2EsIDB4NDMxMCkgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMjdhLCAweDQzMjApIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTI3YSwgMHg0MzMwKSB9LApAQCAtNTE1LDcgKzUxNSw3IEBACiB9OwogCiAjaWZkZWYgU1VQUE9SVF9KT1lTVElDSwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9yaXB0aWRlX2pveXN0aWNrX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3JpcHRpZGVfam95c3RpY2tfaWRzKSA9IHsKIAl7IFBDSV9ERVZJQ0UoMHgxMjdhLCAweDQzMTIpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTI3YSwgMHg0MzIyKSB9LAogCXsgUENJX0RFVklDRSgweDEyN2EsIDB4NDMzMikgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWUzMi5jIGIvc291bmQvcGNpL3JtZTMyLmMKaW5kZXggZjk3N2RiYS4uZDVlMWM2ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTMyLmMKKysrIGIvc291bmQvcGNpL3JtZTMyLmMKQEAgLTIyNiw3ICsyMjYsNyBAQAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKnNwZGlmX2N0bDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfcm1lMzJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3JtZTMyX2lkcykgPSB7CiAJe1BDSV9WREVWSUNFKFhJTElOWF9STUUsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMiksIDAsfSwKIAl7UENJX1ZERVZJQ0UoWElMSU5YX1JNRSwgUENJX0RFVklDRV9JRF9STUVfRElHSTMyXzgpLCAwLH0sCiAJe1BDSV9WREVWSUNFKFhJTElOWF9STUUsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMl9QUk8pLCAwLH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTYuYyBiL3NvdW5kL3BjaS9ybWU5Ni5jCmluZGV4IDJiYTVjMGYuLjlkNTI1MmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5Ni5jCisrKyBiL3NvdW5kL3BjaS9ybWU5Ni5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICAgKnNwZGlmX2N0bDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfcm1lOTZfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3JtZTk2X2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShYSUxJTlgsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5NiksIDAsIH0sCiAJeyBQQ0lfVkRFVklDRShYSUxJTlgsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5Nl84KSwgMCwgfSwKIAl7IFBDSV9WREVWSUNFKFhJTElOWCwgUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzhfUFJPKSwgMCwgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwppbmRleCA3YmI4MjdjLi41MmM2ZWI1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCkBAIC01ODUsNyArNTg1LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2hkc3BfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2hkc3BfaWRzKSA9IHsKIAl7CiAJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1hJTElOWCwKIAkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfWElMSU5YX0hBTU1FUkZBTExfRFNQLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKaW5kZXggYTFiMTBkMS4uM2Q3MmMxZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCkBAIC01MTIsNyArNTEyLDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9oZHNwbV9pZHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9oZHNwbV9pZHMpID0gewogCXsKIAkgLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfWElMSU5YLAogCSAuZGV2aWNlID0gUENJX0RFVklDRV9JRF9YSUxJTlhfSEFNTUVSRkFMTF9EU1BfTUFESSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYwppbmRleCBiYzUzOWFiLi40NGEzZTJkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCkBAIC0zMTQsNyArMzE0LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3JtZTk2NTJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3JtZTk2NTJfaWRzKSA9IHsKIAl7CiAJCS52ZW5kb3IJICAgPSAweDEwZWUsCiAJCS5kZXZpY2UJICAgPSAweDNmYzQsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc2lzNzAxOS5jIGIvc291bmQvcGNpL3NpczcwMTkuYwppbmRleCAxYTVmZjA2Li43ZTNlOGZiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc2lzNzAxOS5jCisrKyBiL3NvdW5kL3BjaS9zaXM3MDE5LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIG1vZHVsZV9wYXJhbShlbmFibGUsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgU2lTNzAxOSBBdWRpbyBBY2NlbGVyYXRvci4iKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9zaXM3MDE5X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9zaXM3MDE5X2lkcykgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0ksIDB4NzAxOSkgfSwKIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwppbmRleCAxZjY0MDZjLi4zMzdiOWZhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCisrKyBiL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3NvbmljX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9zb25pY19pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoUzMsIDB4Y2EwMCksIDAsIH0sCiAgICAgICAgIHsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYwppbmRleCAyMWNlZjk3Li42ZDA1ODE4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKKysrIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCkBAIC02Miw3ICs2Miw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkod2F2ZXRhYmxlX3NpemUsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdhdmV0YWJsZV9zaXplLCAiTWF4aW11bSBtZW1vcnkgc2l6ZSBpbiBrQiBmb3Igd2F2ZXRhYmxlIHN5bnRoLiIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3RyaWRlbnRfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3RyaWRlbnRfaWRzKSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RSSURFTlQsIFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfRFgpLCAKIAkJUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIDB9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVFJJREVOVCwgUENJX0RFVklDRV9JRF9UUklERU5UXzREV0FWRV9OWCksIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggOGEzMzJkMi4uN2U0OTRiNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC00MDEsNyArNDAxLDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92aWE4Mnh4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF92aWE4Mnh4X2lkcykgPSB7CiAJLyogMHgxMTA2LCAweDMwNTggKi8KIAl7IFBDSV9WREVWSUNFKFZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNjg2XzUpLCBUWVBFX0NBUkRfVklBNjg2LCB9LAkvKiA2ODZBICovCiAJLyogMHgxMTA2LCAweDMwNTkgKi8KQEAgLTE3OTEsNiArMTc5MSwxMiBAQAogCQkudHlwZSA9IEFDOTdfVFVORV9IUF9PTkxZCiAJfSwKIAl7CisJCS5zdWJ2ZW5kb3IgPSAweDExMGEsCisJCS5zdWJkZXZpY2UgPSAweDAwNzksCisJCS5uYW1lID0gIkZ1aml0c3UgU2llbWVucyBEMTI4OSIsCisJCS50eXBlID0gQUM5N19UVU5FX0hQX09OTFkKKwl9LAorCXsKIAkJLnN1YnZlbmRvciA9IDB4MTAxOSwKIAkJLnN1YmRldmljZSA9IDB4MGE4MSwKIAkJLm5hbWUgPSAiRUNTIEs3VlRBMyIsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwppbmRleCA0N2ViNjE1Li5mN2U4YmJiZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCkBAIC0yNjAsNyArMjYwLDcgQEAKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2NfZW50cnk7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3ZpYTgyeHhfbW9kZW1faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3ZpYTgyeHhfbW9kZW1faWRzKSA9IHsKIAl7IFBDSV9WREVWSUNFKFZJQSwgMHgzMDY4KSwgVFlQRV9DQVJEX1ZJQTgyWFhfTU9ERU0sIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwppbmRleCBmYzkxMzZjLi45OWE5YTgxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdngyMjIvdngyMjIuYworKysgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwpAQCAtNjAsNyArNjAsNyBAQAogCVZYX1BDSV9WWDIyMl9ORVcKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdngyMjJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3Z4MjIyX2lkcykgPSB7CiAJeyAweDEwYjUsIDB4OTA1MCwgMHgxMzY5LCBQQ0lfQU5ZX0lELCAwLCAwLCBWWF9QQ0lfVlgyMjJfT0xELCB9LCAgIC8qIFBMWCAqLwogCXsgMHgxMGI1LCAweDkwMzAsIDB4MTM2OSwgUENJX0FOWV9JRCwgMCwgMCwgVlhfUENJX1ZYMjIyX05FVywgfSwgICAvKiBQTFggKi8KIAl7IDAsIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCmluZGV4IGU2YjE4YjkuLjgwYzY4MjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKKysrIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYwpAQCAtNjYsNyArNjYsNyBAQAogbW9kdWxlX3BhcmFtX2FycmF5KHJlYXJfc3dpdGNoLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmVhcl9zd2l0Y2gsICJFbmFibGUgc2hhcmVkIHJlYXIvbGluZS1pbiBzd2l0Y2giKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF95bWZwY2lfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3ltZnBjaV9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoWUFNQUhBLCAweDAwMDQpLCAwLCB9LCAgIC8qIFlNRjcyNCAqLwogCXsgUENJX1ZERVZJQ0UoWUFNQUhBLCAweDAwMGQpLCAwLCB9LCAgIC8qIFlNRjcyNEYgKi8KIAl7IFBDSV9WREVWSUNFKFlBTUFIQSwgMHgwMDBhKSwgMCwgfSwgICAvKiBZTUY3NDAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX3BjbS5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMKaW5kZXggNWNmYTYwOC4uMGQ2NjhmNCAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgpAQCAtMjksNDkgKzI4LDYgQEAKIAogCiAvKgotICogd2UgdXNlIGEgdm1hbGxvYydlZCAoc2ctKWJ1ZmZlcgotICovCi0KLS8qIGdldCB0aGUgcGh5c2ljYWwgcGFnZSBwb2ludGVyIG9uIHRoZSBnaXZlbiBvZmZzZXQgKi8KLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicywgdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0Jdm9pZCAqcGFnZXB0ciA9IHN1YnMtPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OwotCXJldHVybiB2bWFsbG9jX3RvX3BhZ2UocGFnZXB0cik7Ci19Ci0KLS8qCi0gKiBod19wYXJhbXMgY2FsbGJhY2sKLSAqIE5PVEU6IHRoaXMgbWF5IGJlIGNhbGxlZCBub3Qgb25seSBvbmNlIHBlciBwY20gb3BlbiEKLSAqLwotc3RhdGljIGludCBzbmRfcGNtX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vicywgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7Ci0JaWYgKHJ1bnRpbWUtPmRtYV9hcmVhKSB7Ci0JCWlmIChydW50aW1lLT5kbWFfYnl0ZXMgPj0gc2l6ZSkKLQkJCXJldHVybiAwOyAvKiBhbHJlYWR5IGVub3VnaCBsYXJnZSAqLwotCQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7Ci0JfQotCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvY18zMl91c2VyKHNpemUpOwotCWlmICghIHJ1bnRpbWUtPmRtYV9hcmVhKQotCQlyZXR1cm4gLUVOT01FTTsKLQlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOwotCXJldHVybiAwOwotfQotCi0vKgotICogaHdfZnJlZSBjYWxsYmFjawotICogTk9URTogdGhpcyBtYXkgYmUgY2FsbGVkIG5vdCBvbmx5IG9uY2UgcGVyIHBjbSBvcGVuIQotICovCi1zdGF0aWMgaW50IHNuZF9wY21fZnJlZV92bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7Ci0KLQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7Ci0JcnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOwotCXJldHVybiAwOwotfQotCi0vKgogICogY2xlYXIgdGhlIFNSQU0gY29udGVudHMKICAqLwogc3RhdGljIGludCBwZGFjZl9wY21fY2xlYXJfc3JhbShzdHJ1Y3Qgc25kX3BkYWNmICpjaGlwKQpAQCAtMTQ3LDcgKzEwMyw4IEBACiBzdGF0aWMgaW50IHBkYWNmX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLAogCQkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCiB7Ci0JcmV0dXJuIHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3VicywgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY18zMl9idWZmZXIKKwkJCQkJKHN1YnMsIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CiB9CiAKIC8qCkBAIC0xNTUsNyArMTEyLDcgQEAKICAqLwogc3RhdGljIGludCBwZGFjZl9wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMpCiB7Ci0JcmV0dXJuIHNuZF9wY21fZnJlZV92bWFsbG9jX2J1ZmZlcihzdWJzKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV92bWFsbG9jX2J1ZmZlcihzdWJzKTsKIH0KIAogLyoKQEAgLTMxOSw3ICsyNzYsOCBAQAogCS5wcmVwYXJlID0JcGRhY2ZfcGNtX3ByZXBhcmUsCiAJLnRyaWdnZXIgPQlwZGFjZl9wY21fdHJpZ2dlciwKIAkucG9pbnRlciA9CXBkYWNmX3BjbV9jYXB0dXJlX3BvaW50ZXIsCi0JLnBhZ2UgPQkJc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlLAorCS5wYWdlID0JCXNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPQkJc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvYXdhY3MuYyBiL3NvdW5kL3BwYy9hd2Fjcy5jCmluZGV4IDJlMTU2NDYuLmIzNjY3OTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9hd2Fjcy5jCisrKyBiL3NvdW5kL3BwYy9hd2Fjcy5jCkBAIC03NTEsOCArNzUxLDggQEAKIAogc3RhdGljIHZvaWQgc25kX3BtYWNfYXdhY3NfcmVzdW1lKHN0cnVjdCBzbmRfcG1hYyAqY2hpcCkKIHsKLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDEiKQotCSAgICB8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMiIpKSB7CisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywxIikKKwkgICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDIiKSkgewogCQltc2xlZXAoMTAwKTsKIAkJc25kX3BtYWNfYXdhY3Nfd3JpdGVfcmVnKGNoaXAsIDEsCiAJCQljaGlwLT5hd2Fjc19yZWdbMV0gJiB+TUFTS19QQVJPVVQpOwpAQCAtNzgwLDE2ICs3ODAsMTYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAotI2RlZmluZSBJU19QTTc1MDAgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw3NTAwIikgXAotCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsODUwMCIpIFwKLQkJfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDk1MDAiKSkKLSNkZWZpbmUgSVNfUE01NTAwIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsZTQxMSIpKQotI2RlZmluZSBJU19CRUlHRSAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLEdvc3NhbWVyIikpCi0jZGVmaW5lIElTX0lNQUMxIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwxIikpCi0jZGVmaW5lIElTX0lNQUMyIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwyIikgXAotCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwxIikpCi0jZGVmaW5lIElTX0c0QUdQIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMywxIikpCi0jZGVmaW5lIElTX0xPTUJBUkQgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpCisjZGVmaW5lIElTX1BNNzUwMCAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDc1MDAiKSBcCisJCXx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw4NTAwIikgXAorCQl8fCBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsOTUwMCIpKQorI2RlZmluZSBJU19QTTU1MDAgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxlNDExIikpCisjZGVmaW5lIElTX0JFSUdFIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsR29zc2FtZXIiKSkKKyNkZWZpbmUgSVNfSU1BQzEgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDEiKSkKKyNkZWZpbmUgSVNfSU1BQzIgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDIiKSBcCisJCXx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDEiKSkKKyNkZWZpbmUgSVNfRzRBR1AgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMzLDEiKSkKKyNkZWZpbmUgSVNfTE9NQkFSRCAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkKIAogc3RhdGljIGludCBpbWFjMSwgaW1hYzI7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9idXJndW5keS5jIGIvc291bmQvcHBjL2J1cmd1bmR5LmMKaW5kZXggMGFjY2ZlNC4uMWY3MmUxYyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2J1cmd1bmR5LmMKKysrIGIvc291bmQvcHBjL2J1cmd1bmR5LmMKQEAgLTU4Miw3ICs1ODIsNyBAQAogc3RhdGljIHZvaWQgc25kX3BtYWNfYnVyZ3VuZHlfdXBkYXRlX2F1dG9tdXRlKHN0cnVjdCBzbmRfcG1hYyAqY2hpcCwgaW50IGRvX25vdGlmeSkKIHsKIAlpZiAoY2hpcC0+YXV0b19tdXRlKSB7Ci0JCWludCBpbWFjID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJpTWFjIik7CisJCWludCBpbWFjID0gb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJpTWFjIik7CiAJCWludCByZWcsIG9yZWc7CiAJCXJlZyA9IG9yZWcgPSBzbmRfcG1hY19idXJndW5keV9yY2IoY2hpcCwKIAkJCQlNQVNLX0FERFJfQlVSR1VORFlfTU9SRV9PVVRQVVRFTkFCTEVTKTsKQEAgLTYyMCw3ICs2MjAsNyBAQAogICovCiBpbnQgX19kZXZpbml0IHNuZF9wbWFjX2J1cmd1bmR5X2luaXQoc3RydWN0IHNuZF9wbWFjICpjaGlwKQogewotCWludCBpbWFjID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJpTWFjIik7CisJaW50IGltYWMgPSBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoImlNYWMiKTsKIAlpbnQgaSwgZXJyOwogCiAJLyogQ2hlY2tzIHRvIHNlZSB0aGUgY2hpcCBpcyBhbGl2ZSBhbmQga2lja2luZyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3BtYWMuYyBiL3NvdW5kL3BwYy9wbWFjLmMKaW5kZXggN2JjNDkyZS4uODUwODExNyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3BtYWMuYworKysgYi9zb3VuZC9wcGMvcG1hYy5jCkBAIC05MjIsMTEgKzkyMiwxMSBAQAogCX0KIAogCS8qIGl0IHNlZW1zIHRoZSBQaXNtbyAmIGlCb29rIGNhbid0IGJ5dGUtc3dhcCBpbiBoYXJkd2FyZS4gKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDEiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMSIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMiwxIikpCiAJCWNoaXAtPmNhbl9ieXRlX3N3YXAgPSAwIDsKIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKQogCQljaGlwLT5jYW5fZHVwbGV4ID0gMDsKIH0KIApAQCAtOTU5LDExICs5NTksMTEgQEAKIAljaGlwLT5jb250cm9sX21hc2sgPSBNQVNLX0lFUEMgfCBNQVNLX0lFRSB8IDB4MTE7IC8qIGRlZmF1bHQgKi8KIAogCS8qIGNoZWNrIG1hY2hpbmUgdHlwZSAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzQwMC8yNDAwIikKLQkgICAgfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM1MDAiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM0MDAvMjQwMCIpCisJICAgIHx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNTAwIikpCiAJCWNoaXAtPmlzX3Bib29rXzM0MDAgPSAxOwotCWVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikKLQkJIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikpCisJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKQorCQkgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFBvd2VyQm9vazE5OTgiKSkKIAkJY2hpcC0+aXNfcGJvb2tfRzMgPSAxOwogCWNoaXAtPm5vZGUgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiYXdhY3MiKTsKIAlzb3VuZCA9IG9mX25vZGVfZ2V0KGNoaXAtPm5vZGUpOwpAQCAtMTAzMyw4ICsxMDMzLDggQEAKIAl9CiAJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHNvdW5kLCAidHVtYmxlciIpKSB7CiAJCWNoaXAtPm1vZGVsID0gUE1BQ19UVU1CTEVSOwotCQljaGlwLT5jYW5fY2FwdHVyZSA9IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDIiKQotCQkJCXx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwxIik7CisJCWNoaXAtPmNhbl9jYXB0dXJlID0gb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsMiIpCisJCQkJfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKTsKIAkJY2hpcC0+Y2FuX2R1cGxleCA9IDA7CiAJCS8vIGNoaXAtPmNhbl9ieXRlX3N3YXAgPSAwOyAvKiBGSVhNRTogY2hlY2sgdGhpcyAqLwogCQljaGlwLT5udW1fZnJlcXMgPSBBUlJBWV9TSVpFKHR1bWJsZXJfZnJlcXMpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvS2NvbmZpZyBiL3NvdW5kL3NvYy9hdTF4L0tjb25maWcKaW5kZXggNDEwYTg5My4uNGI2NzE0MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvYXUxeC9LY29uZmlnCkBAIC0yMiwxMSArMjIsMTMgQEAKICMjCiAjIyBCb2FyZHMKICMjCi1jb25maWcgU05EX1NPQ19TQU1QTEVfUFNDX0FDOTcKLQl0cmlzdGF0ZSAiU2FtcGxlIEF1MTJ4MC9BdTE1NTAgUFNDIEFDOTcgc291bmQgbWFjaGluZSIKK2NvbmZpZyBTTkRfU09DX0RCMTIwMAorCXRyaXN0YXRlICJEQjEyMDAgQUM5NytJMlMgYXVkaW8gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNORF9TT0NfQVUxWFBTQwogCXNlbGVjdCBTTkRfU09DX0FVMVhQU0NfQUM5NwogCXNlbGVjdCBTTkRfU09DX0FDOTdfQ09ERUMKKwlzZWxlY3QgU05EX1NPQ19BVTFYUFNDX0kyUworCXNlbGVjdCBTTkRfU09DX1dNODczMQogCWhlbHAKLQkgIFRoaXMgaXMgYSBzYW1wbGUgQUM5NyBzb3VuZCBtYWNoaW5lIGZvciB1c2UgaW4gQXUxMngwL0F1MTU1MAotCSAgYmFzZWQgc3lzdGVtcyB3aGljaCBoYXZlIGF1ZGlvIG9uIFBTQzEgKGUuZy4gRGIxMjAwIGRlbW9ib2FyZCkuCisJICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIGF1ZGlvIChBQzk3IG9yIEkyUykgb24gdGhlCisJICBBbGNoZW15L0FNRC9STUkgREIxMjAwIGRlbW9ib2FyZC4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L01ha2VmaWxlIGIvc291bmQvc29jL2F1MXgvTWFrZWZpbGUKaW5kZXggNmM2OTUwYi4uMTY4NzMwNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2F1MXgvTWFrZWZpbGUKQEAgLTgsNiArOCw2IEBACiBvYmotJChDT05GSUdfU05EX1NPQ19BVTFYUFNDX0FDOTcpICs9IHNuZC1zb2MtYXUxeHBzYy1hYzk3Lm8KIAogIyBCb2FyZHMKLXNuZC1zb2Mtc2FtcGxlLWFjOTctb2JqcyA6PSBzYW1wbGUtYWM5Ny5vCitzbmQtc29jLWRiMTIwMC1vYmpzIDo9IGRiMTIwMC5vCiAKLW9iai0kKENPTkZJR19TTkRfU09DX1NBTVBMRV9QU0NfQUM5NykgKz0gc25kLXNvYy1zYW1wbGUtYWM5Ny5vCitvYmotJChDT05GSUdfU05EX1NPQ19EQjEyMDApICs9IHNuZC1zb2MtZGIxMjAwLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L2RiMTIwMC5jIGIvc291bmQvc29jL2F1MXgvZGIxMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmN2JlMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9hdTF4L2RiMTIwMC5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogREIxMjAwIEFTb0MgYXVkaW8gZmFicmljIHN1cHBvcnQgY29kZS4KKyAqCisgKiAoYykgMjAwOC05IE1hbnVlbCBMYXVzcyA8bWFudWVsLmxhdXNzQGdtYWlsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy9hYzk3LmgiCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtODczMS5oIgorI2luY2x1ZGUgInBzYy5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFDOTcgUEFSVCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGRiMTIwMF9hYzk3X2RhaSA9IHsKKwkubmFtZQkJPSAiQUM5NyIsCisJLnN0cmVhbV9uYW1lCT0gIkFDOTcgSGlGaSIsCisJLmNwdV9kYWkJPSAmYXUxeHBzY19hYzk3X2RhaSwKKwkuY29kZWNfZGFpCT0gJmFjOTdfZGFpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZGIxMjAwX2FjOTdfbWFjaGluZSA9IHsKKwkubmFtZQkJPSAiREIxMjAwX0FDOTciLAorCS5kYWlfbGluawk9ICZkYjEyMDBfYWM5N19kYWksCisJLm51bV9saW5rcwk9IDEsCisJLnBsYXRmb3JtCT0gJmF1MXhwc2Nfc29jX3BsYXRmb3JtLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBkYjEyMDBfYWM5N19kZXZkYXRhID0geworCS5jYXJkCQk9ICZkYjEyMDBfYWM5N19tYWNoaW5lLAorCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl9hYzk3LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMlMgUEFSVCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBkYjEyMDBfaTJzX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwlpbnQgcmV0OworCisJLyogV004NzMxIGhhcyBpdHMgb3duIDEyTUh6IGNyeXN0YWwgKi8KKwlzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004NzMxX1NZU0NMSywKKwkJCQkxMjAwMDAwMCwgU05EX1NPQ19DTE9DS19JTik7CisKKwkvKiBjb2RlYyBpcyBiaXRjbG9jayBhbmQgbHJjbGsgbWFzdGVyICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0xFRlRfSiB8CisJCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfTEVGVF9KIHwKKwkJCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGRiMTIwMF9pMnNfd204NzMxX29wcyA9IHsKKwkuc3RhcnR1cAk9IGRiMTIwMF9pMnNfc3RhcnR1cCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBkYjEyMDBfaTJzX2RhaSA9IHsKKwkubmFtZQkJPSAiV004NzMxIiwKKwkuc3RyZWFtX25hbWUJPSAiV004NzMxIFBDTSIsCisJLmNwdV9kYWkJPSAmYXUxeHBzY19pMnNfZGFpLAorCS5jb2RlY19kYWkJPSAmd204NzMxX2RhaSwKKwkub3BzCQk9ICZkYjEyMDBfaTJzX3dtODczMV9vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBkYjEyMDBfaTJzX21hY2hpbmUgPSB7CisJLm5hbWUJCT0gIkRCMTIwMF9JMlMiLAorCS5kYWlfbGluawk9ICZkYjEyMDBfaTJzX2RhaSwKKwkubnVtX2xpbmtzCT0gMSwKKwkucGxhdGZvcm0JPSAmYXUxeHBzY19zb2NfcGxhdGZvcm0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGRiMTIwMF9pMnNfZGV2ZGF0YSA9IHsKKwkuY2FyZAkJPSAmZGIxMjAwX2kyc19tYWNoaW5lLAorCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl93bTg3MzEsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPTU1PTiBQQVJUICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGIxMjAwX2Fzb2NfZGV2OworCitzdGF0aWMgaW50IF9faW5pdCBkYjEyMDBfYXVkaW9fbG9hZCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSAtRU5PTUVNOworCWRiMTIwMF9hc29jX2RldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghZGIxMjAwX2Fzb2NfZGV2KQorCQlnb3RvIG91dDsKKworCS8qIERCMTIwMCBib2FyZCBzZXR1cCBzZXQgUFNDMU1VWCB0byBwcmVmZXJyZWQgYXVkaW8gZGV2aWNlICovCisJaWYgKGJjc3JfcmVhZChCQ1NSX1JFU0VUUykgJiBCQ1NSX1JFU0VUU19QU0MxTVVYKQorCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkYjEyMDBfYXNvY19kZXYsICZkYjEyMDBfaTJzX2RldmRhdGEpOworCWVsc2UKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGIxMjAwX2Fzb2NfZGV2LCAmZGIxMjAwX2FjOTdfZGV2ZGF0YSk7CisKKwlkYjEyMDBfYWM5N19kZXZkYXRhLmRldiA9ICZkYjEyMDBfYXNvY19kZXYtPmRldjsKKwlkYjEyMDBfaTJzX2RldmRhdGEuZGV2ID0gJmRiMTIwMF9hc29jX2Rldi0+ZGV2OworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoZGIxMjAwX2Fzb2NfZGV2KTsKKworCWlmIChyZXQpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChkYjEyMDBfYXNvY19kZXYpOworCQlkYjEyMDBfYXNvY19kZXYgPSBOVUxMOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZGIxMjAwX2F1ZGlvX3VubG9hZCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRiMTIwMF9hc29jX2Rldik7Cit9CisKK21vZHVsZV9pbml0KGRiMTIwMF9hdWRpb19sb2FkKTsKK21vZHVsZV9leGl0KGRiMTIwMF9hdWRpb191bmxvYWQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRCMTIwMCBBU29DIGF1ZGlvIHN1cHBvcnQiKTsKK01PRFVMRV9BVVRIT1IoIk1hbnVlbCBMYXVzcyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvZGJkbWEyLmMgYi9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYwppbmRleCAxOWU0ZDM3Li42ZDlmNGM2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYworKysgYi9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYwpAQCAtNTEsOCArNTEsOCBAQAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCXVuc2lnbmVkIGxvbmcgY3Vycl9wZXJpb2Q7CS8qIGN1cnJlbnQgc2VnbWVudCBERE1BIGlzIHdvcmtpbmcgb24gKi8KIAl1bnNpZ25lZCBsb25nIHFfcGVyaW9kOwkJLyogcXVldWUgcGVyaW9kKHMpICovCi0JdW5zaWduZWQgbG9uZyBkbWFfYXJlYTsJCS8qIGFkZHJlc3Mgb2YgcXVldWVkIERNQSBhcmVhICovCi0JdW5zaWduZWQgbG9uZyBkbWFfYXJlYV9zOwkvKiBzdGFydCBhZGRyZXNzIG9mIERNQSBhcmVhICovCisJZG1hX2FkZHJfdCBkbWFfYXJlYTsJCS8qIGFkZHJlc3Mgb2YgcXVldWVkIERNQSBhcmVhICovCisJZG1hX2FkZHJfdCBkbWFfYXJlYV9zOwkJLyogc3RhcnQgYWRkcmVzcyBvZiBETUEgYXJlYSAqLwogCXVuc2lnbmVkIGxvbmcgcG9zOwkJLyogY3VycmVudCBieXRlIHBvc2l0aW9uIGJlaW5nIHBsYXllZCAqLwogCXVuc2lnbmVkIGxvbmcgcGVyaW9kczsJCS8qIG51bWJlciBvZiBTRyBzZWdtZW50cyBpbiB0b3RhbCAqLwogCXVuc2lnbmVkIGxvbmcgcGVyaW9kX2J5dGVzOwkvKiBzaXplIGluIGJ5dGVzIG9mIG9uZSBTRyBzZWdtZW50ICovCkBAIC05NCw4ICs5NCw3IEBACiAKIHN0YXRpYyB2b2lkIGF1MXhfcGNtX3F1ZXVlX3R4KHN0cnVjdCBhdTF4cHNjX2F1ZGlvX2RtYWRhdGEgKmNkKQogewotCWF1MXh4eF9kYmRtYV9wdXRfc291cmNlX2ZsYWdzKGNkLT5kZG1hX2NoYW4sCi0JCQkJKHZvaWQgKilwaHlzX3RvX3ZpcnQoY2QtPmRtYV9hcmVhKSwKKwlhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShjZC0+ZGRtYV9jaGFuLCBjZC0+ZG1hX2FyZWEsCiAJCQkJY2QtPnBlcmlvZF9ieXRlcywgRERNQV9GTEFHU19JRSk7CiAKIAkvKiB1cGRhdGUgbmV4dC10by1xdWV1ZSBwZXJpb2QgKi8KQEAgLTEwOSw5ICsxMDgsOCBAQAogCiBzdGF0aWMgdm9pZCBhdTF4X3BjbV9xdWV1ZV9yeChzdHJ1Y3QgYXUxeHBzY19hdWRpb19kbWFkYXRhICpjZCkKIHsKLQlhdTF4eHhfZGJkbWFfcHV0X2Rlc3RfZmxhZ3MoY2QtPmRkbWFfY2hhbiwKLQkJCQkodm9pZCAqKXBoeXNfdG9fdmlydChjZC0+ZG1hX2FyZWEpLAotCQkJCWNkLT5wZXJpb2RfYnl0ZXMsIERETUFfRkxBR1NfSUUpOworCWF1MXh4eF9kYmRtYV9wdXRfZGVzdChjZC0+ZGRtYV9jaGFuLCBjZC0+ZG1hX2FyZWEsCisJCQkgICAgICBjZC0+cGVyaW9kX2J5dGVzLCBERE1BX0ZMQUdTX0lFKTsKIAogCS8qIHVwZGF0ZSBuZXh0LXRvLXF1ZXVlIHBlcmlvZCAqLwogCSsrY2QtPnFfcGVyaW9kOwpAQCAtMjMzLDcgKzIzMSw3IEBACiAJcGNkLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CiAJcGNkLT5wZXJpb2RfYnl0ZXMgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKHBhcmFtcyk7CiAJcGNkLT5wZXJpb2RzID0gcGFyYW1zX3BlcmlvZHMocGFyYW1zKTsKLQlwY2QtPmRtYV9hcmVhX3MgPSBwY2QtPmRtYV9hcmVhID0gKHVuc2lnbmVkIGxvbmcpcnVudGltZS0+ZG1hX2FkZHI7CisJcGNkLT5kbWFfYXJlYV9zID0gcGNkLT5kbWFfYXJlYSA9IHJ1bnRpbWUtPmRtYV9hZGRyOwogCXBjZC0+cV9wZXJpb2QgPSAwOwogCXBjZC0+Y3Vycl9wZXJpb2QgPSAwOwogCXBjZC0+cG9zID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L3NhbXBsZS1hYzk3LmMgYi9zb3VuZC9zb2MvYXUxeC9zYW1wbGUtYWM5Ny5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzY4M2ViLi4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9hdTF4L3NhbXBsZS1hYzk3LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIFNhbXBsZSBBdTEyeDAvQXUxNTUwIFBTQyBBQzk3IHNvdW5kIG1hY2hpbmUuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWFudWVsIExhdXNzIDxtYW5vQHJvYXJpbmVsay5ob21lbGludXgubmV0PgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvdXRsaW5lZCBpbiB0aGUgZmlsZSBDT1BZSU5HIGF0IHRoZSByb290IG9mIHRoaXMKLSAqICBzb3VyY2UgYXJjaGl2ZS4KLSAqCi0gKiBUaGlzIGlzIGEgdmVyeSBnZW5lcmljIEFDOTcgc291bmQgbWFjaGluZSBkcml2ZXIgZm9yIGJvYXJkcyB3aGljaAotICogaGF2ZSAoQUM5NykgYXVkaW8gYXQgUFNDMSAoZS5nLiBEQjEyMDAgZGVtb2JvYXJkcykuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+Ci0KLSNpbmNsdWRlICIuLi9jb2RlY3MvYWM5Ny5oIgotI2luY2x1ZGUgInBzYy5oIgotCi1zdGF0aWMgaW50IGF1MXhwc2Nfc2FtcGxlX2FjOTdfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgYXUxeHBzY19zYW1wbGVfYWM5N19kYWkgPSB7Ci0JLm5hbWUJCT0gIkFDOTciLAotCS5zdHJlYW1fbmFtZQk9ICJBQzk3IEhpRmkiLAotCS5jcHVfZGFpCT0gJmF1MXhwc2NfYWM5N19kYWksCS8qIHNlZSBwc2MtYWM5Ny5jICovCi0JLmNvZGVjX2RhaQk9ICZhYzk3X2RhaSwJCS8qIHNlZSBjb2RlY3MvYWM5Ny5jICovCi0JLmluaXQJCT0gYXUxeHBzY19zYW1wbGVfYWM5N19pbml0LAotCS5vcHMJCT0gTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGF1MXhwc2Nfc2FtcGxlX2FjOTdfbWFjaGluZSA9IHsKLQkubmFtZQkJPSAiQXUxeHh4IFBTQyBBQzk3IEF1ZGlvIiwKLQkuZGFpX2xpbmsJPSAmYXUxeHBzY19zYW1wbGVfYWM5N19kYWksCi0JLm51bV9saW5rcwk9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2ZGF0YSA9IHsKLQkuY2FyZAkJPSAmYXUxeHBzY19zYW1wbGVfYWM5N19tYWNoaW5lLAotCS5wbGF0Zm9ybQk9ICZhdTF4cHNjX3NvY19wbGF0Zm9ybSwgLyogc2VlIGRiZG1hMi5jICovCi0JLmNvZGVjX2Rldgk9ICZzb2NfY29kZWNfZGV2X2FjOTcsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MXhwc2NfcHNjMV9yZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IENQSFlTQUREUihQU0MxX0JBU0VfQUREUiksCi0JCS5lbmQJPSBDUEhZU0FERFIoUFNDMV9CQVNFX0FERFIpICsgMHgwMDBmZmZmZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0jaWZkZWYgQ09ORklHX1NPQ19BVTEyMDAKLQkJLnN0YXJ0CT0gQVUxMjAwX1BTQzFfSU5ULAotCQkuZW5kCT0gQVUxMjAwX1BTQzFfSU5ULAotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQkJLnN0YXJ0CT0gQVUxNTUwX1BTQzFfSU5ULAotCQkuZW5kCT0gQVUxNTUwX1BTQzFfSU5ULAotI2VuZGlmCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBEU0NSX0NNRDBfUFNDMV9UWCwKLQkJLmVuZAk9IERTQ1JfQ01EMF9QU0MxX1RYLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gRFNDUl9DTUQwX1BTQzFfUlgsCi0JCS5lbmQJPSBEU0NSX0NNRDBfUFNDMV9SWCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdTF4cHNjX3NhbXBsZV9hYzk3X2RldjsKLQotc3RhdGljIGludCBfX2luaXQgYXUxeHBzY19zYW1wbGVfYWM5N19sb2FkKHZvaWQpCi17Ci0JaW50IHJldDsKLQotI2lmZGVmIENPTkZJR19TT0NfQVUxMjAwCi0JdW5zaWduZWQgbG9uZyBpbzsKLQotCS8qIG1vZGlmeSBzeXNfcGluZnVuYyBmb3IgQUM5NyBvbiBQU0MxICovCi0JaW8gPSBhdV9yZWFkbChTWVNfUElORlVOQyk7Ci0JaW8gfD0gU1lTX1BJTkZVTkNfUDFDOwotCWlvICY9IH4oU1lTX1BJTkZVTkNfUDFBIHwgU1lTX1BJTkZVTkNfUDFCKTsKLQlhdV93cml0ZWwoaW8sIFNZU19QSU5GVU5DKTsKLQlhdV9zeW5jKCk7Ci0jZW5kaWYKLQotCXJldCA9IC1FTk9NRU07Ci0KLQkvKiBzZXR1cCBQU0MgY2xvY2sgc291cmNlIGZvciBBQzk3IHBhcnQ6IGV4dGVybmFsIGNsb2NrIHByb3ZpZGVkCi0JICogYnkgY29kZWMuICBUaGUgcHNjLWFjOTcuYyBkcml2ZXIgZGVwZW5kcyBvbiB0aGlzIHNldHRpbmchCi0JICovCi0JYXVfd3JpdGVsKFBTQ19TRUxfQ0xLX1NFUkNMSywgUFNDMV9CQVNFX0FERFIgKyBQU0NfU0VMX09GRlNFVCk7Ci0JYXVfc3luYygpOwotCi0JYXUxeHBzY19zYW1wbGVfYWM5N19kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKLQlpZiAoIWF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2KQotCQlnb3RvIG91dDsKLQotCWF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2LT5yZXNvdXJjZSA9Ci0JCWttZW1kdXAoYXUxeHBzY19wc2MxX3Jlcywgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKgotCQkJQVJSQVlfU0laRShhdTF4cHNjX3BzYzFfcmVzKSwgR0ZQX0tFUk5FTCk7Ci0JYXUxeHBzY19zYW1wbGVfYWM5N19kZXYtPm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGF1MXhwc2NfcHNjMV9yZXMpOwotCWF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2LT5pZCA9IDE7Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShhdTF4cHNjX3NhbXBsZV9hYzk3X2RldiwKLQkJCSAgICAgJmF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2ZGF0YSk7Ci0JYXUxeHBzY19zYW1wbGVfYWM5N19kZXZkYXRhLmRldiA9ICZhdTF4cHNjX3NhbXBsZV9hYzk3X2Rldi0+ZGV2OwotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoYXUxeHBzY19zYW1wbGVfYWM5N19kZXYpOwotCi0JaWYgKHJldCkgewotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2KTsKLQkJYXUxeHBzY19zYW1wbGVfYWM5N19kZXYgPSBOVUxMOwotCX0KLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhdTF4cHNjX3NhbXBsZV9hYzk3X2V4aXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihhdTF4cHNjX3NhbXBsZV9hYzk3X2Rldik7Ci19Ci0KLW1vZHVsZV9pbml0KGF1MXhwc2Nfc2FtcGxlX2FjOTdfbG9hZCk7Ci1tb2R1bGVfZXhpdChhdTF4cHNjX3NhbXBsZV9hYzk3X2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkF1MXh4eCBQU0Mgc2FtcGxlIEFDOTcgbWFjaGluZSIpOwotTU9EVUxFX0FVVEhPUigiTWFudWVsIExhdXNzIDxtYW5vQHJvYXJpbmVsay5ob21lbGludXgubmV0PiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTctcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYwppbmRleCBjZjBkZmI3Li42N2NiZmU3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYwpAQCAtMzQ5LDkgKzM0OSw3IEBACiAJCQlzcG9ydF9oYW5kbGUtPnR4X2RtYV9idWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgXAogCQkJCXNpemUsICZzcG9ydF9oYW5kbGUtPnR4X2RtYV9waHksIEdGUF9LRVJORUwpOwogCQkJaWYgKCFzcG9ydF9oYW5kbGUtPnR4X2RtYV9idWYpIHsKLQkJCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHR4IGRtYSBcCi0JCQkJCWJ1ZiAtIFBsZWFzZSBpbmNyZWFzZSB1bmNhY2hlZCBETUEgXAotCQkJCQltZW1vcnkgcmVnaW9uXG4iKTsKKwkJCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHR4IGRtYSBidWYgLSBQbGVhc2UgaW5jcmVhc2UgdW5jYWNoZWQgRE1BIG1lbW9yeSByZWdpb25cbiIpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfSBlbHNlCiAJCQkJbWVtc2V0KHNwb3J0X2hhbmRsZS0+dHhfZG1hX2J1ZiwgMCwgc2l6ZSk7CkBAIC0zNjIsOSArMzYwLDcgQEAKIAkJCXNwb3J0X2hhbmRsZS0+cnhfZG1hX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBcCiAJCQkJc2l6ZSwgJnNwb3J0X2hhbmRsZS0+cnhfZG1hX3BoeSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXNwb3J0X2hhbmRsZS0+cnhfZG1hX2J1ZikgewotCQkJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcnggZG1hIFwKLQkJCQkJYnVmIC0gUGxlYXNlIGluY3JlYXNlIHVuY2FjaGVkIERNQSBcCi0JCQkJCW1lbW9yeSByZWdpb25cbiIpOworCQkJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcnggZG1hIGJ1ZiAtIFBsZWFzZSBpbmNyZWFzZSB1bmNhY2hlZCBETUEgbWVtb3J5IHJlZ2lvblxuIik7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9IGVsc2UKIAkJCQltZW1zZXQoc3BvcnRfaGFuZGxlLT5yeF9kbWFfYnVmLCAwLCBzaXplKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLXBjbS5jCmluZGV4IDYyZmJiODQuLmM2YzZhNGE3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMKQEAgLTIwNyw4ICsyMDcsNyBAQAogCWJ1Zi0+YXJlYSA9IGRtYV9hbGxvY19jb2hlcmVudChwY20tPmNhcmQtPmRldiwgc2l6ZSwKIAkJCSZidWYtPmFkZHIsIEdGUF9LRVJORUwpOwogCWlmICghYnVmLT5hcmVhKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIGRtYSBtZW1vcnkgXAotCQkJUGxlYXNlIGluY3JlYXNlIHVuY2FjaGVkIERNQSBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZG1hIG1lbW9yeSAtIFBsZWFzZSBpbmNyZWFzZSB1bmNhY2hlZCBETUEgbWVtb3J5IHJlZ2lvblxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlidWYtPmJ5dGVzID0gc2l6ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0tcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLXBjbS5jCmluZGV4IGE4YzczY2IuLjVlMDNiYjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0tcGNtLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS1wY20uYwpAQCAtMjQ0LDggKzI0NCw3IEBACiAJYnVmLT5hcmVhID0gZG1hX2FsbG9jX2NvaGVyZW50KHBjbS0+Y2FyZC0+ZGV2LCBzaXplICogNCwKIAkJJmJ1Zi0+YWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYtPmFyZWEpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZG1hIG1lbW9yeSBcCi0JCQlQbGVhc2UgaW5jcmVhc2UgdW5jYWNoZWQgRE1BIG1lbW9yeSByZWdpb25cbiIpOworCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgbWVtb3J5IC0gUGxlYXNlIGluY3JlYXNlIHVuY2FjaGVkIERNQSBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWJ1Zi0+Ynl0ZXMgPSBzaXplOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCmluZGV4IDUyYjAwNWYuLjE3NDNkNTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKQEAgLTIzLDYgKzIzLDcgQEAKIAlzZWxlY3QgU05EX1NPQ19BSzQ2NzEgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfQ1M0MjcwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX01BWDk4NzcgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfREE3MjEwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1BDTTMwMDgKIAlzZWxlY3QgU05EX1NPQ19TUERJRgogCXNlbGVjdCBTTkRfU09DX1NTTTI2MDIgaWYgSTJDCkBAIC0zNSw2ICszNiw3IEBACiAJc2VsZWN0IFNORF9TT0NfVFdMNDAzMCBpZiBUV0w0MDMwX0NPUkUKIAlzZWxlY3QgU05EX1NPQ19VREExMzRYCiAJc2VsZWN0IFNORF9TT0NfVURBMTM4MCBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19XTTIwMDAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004MzUwIGlmIE1GRF9XTTgzNTAKIAlzZWxlY3QgU05EX1NPQ19XTTg0MDAgaWYgTUZEX1dNODQwMAogCXNlbGVjdCBTTkRfU09DX1dNODUxMCBpZiBTTkRfU09DX0kyQ19BTkRfU1BJCkBAIC00OSwxNCArNTEsMTggQEAKIAlzZWxlY3QgU05EX1NPQ19XTTg3NzYgaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1dNODkwMCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5MDMgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfV004OTA0IGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk0MCBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19XTTg5NTUgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTYwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk2MSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5NzEgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTc0IGlmIEkyQworCXNlbGVjdCBTTkRfU09DX1dNODk3OCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5ODggaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1dNODk5MCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5OTMgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfV004OTk0IGlmIE1GRF9XTTg5OTQKIAlzZWxlY3QgU05EX1NPQ19XTTkwODEgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV005NzA1IGlmIFNORF9TT0NfQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19XTTk3MTIgaWYgU05EX1NPQ19BQzk3X0JVUwpAQCAtMTEyLDYgKzExOCw5IEBACiBjb25maWcgU05EX1NPQ19DUzQyNzAKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19EQTcyMTAKKyAgICAgICAgdHJpc3RhdGUKKwogIyBDaXJydXMgTG9naWMgQ1M0MjcwIENvZGVjIFZEID0gMy4zViBFcnJhdGEKICMgU2VsZWN0IGlmIHlvdSBhcmUgYWZmZWN0ZWQgYnkgdGhlIGVycmF0YSB3aGVyZSB0aGUgcGFydCB3aWxsIG5vdCBmdW5jdGlvbgogIyBpZiBNQ0xLIGRpdmlkZS1ieS0xLjUgaXMgc2VsZWN0ZWQgYW5kIFZEIGlzIHNldCB0byAzLjNWLiAgVGhlIGRyaXZlciB3aWxsCkBAIC0yMDMsOSArMjEyLDE1IEBACiBjb25maWcgU05EX1NPQ19XTTg5MDMKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTg5MDQKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTg5NDAKICAgICAgICAgdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfV004OTU1CisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfV004OTYwCiAJdHJpc3RhdGUKIApAQCAtMjE4LDYgKzIzMyw5IEBACiBjb25maWcgU05EX1NPQ19XTTg5NzQKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTg5NzgKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTg5ODgKIAl0cmlzdGF0ZQogCkBAIC0yMjcsNiArMjQ1LDkgQEAKIGNvbmZpZyBTTkRfU09DX1dNODk5MwogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1dNODk5NAorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX1dNOTA4MQogCXRyaXN0YXRlCiAKQEAgLTI0NSwzICsyNjYsNiBAQAogCiBjb25maWcgU05EX1NPQ19UUEE2MTMwQTIKIAl0cmlzdGF0ZQorCitjb25maWcgU05EX1NPQ19XTTIwMDAKKwl0cmlzdGF0ZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKaW5kZXggZGJhZWNiMS4uZGQ1Y2U2ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCkBAIC0xMCw2ICsxMCw3IEBACiBzbmQtc29jLWFrNDY3MS1vYmpzIDo9IGFrNDY3MS5vCiBzbmQtc29jLWNzNDI3MC1vYmpzIDo9IGNzNDI3MC5vCiBzbmQtc29jLWN4MjA0NDItb2JqcyA6PSBjeDIwNDQyLm8KK3NuZC1zb2MtZGE3MjEwLW9ianMgOj0gZGE3MjEwLm8KIHNuZC1zb2MtbDMtb2JqcyA6PSBsMy5vCiBzbmQtc29jLXBjbTMwMDgtb2JqcyA6PSBwY20zMDA4Lm8KIHNuZC1zb2Mtc3BkaWYtb2JqcyA6PSBzcGRpZl90cmFuc2NpZXZlci5vCkBAIC0zNiwxNCArMzcsMTggQEAKIHNuZC1zb2Mtd204Nzc2LW9ianMgOj0gd204Nzc2Lm8KIHNuZC1zb2Mtd204OTAwLW9ianMgOj0gd204OTAwLm8KIHNuZC1zb2Mtd204OTAzLW9ianMgOj0gd204OTAzLm8KK3NuZC1zb2Mtd204OTA0LW9ianMgOj0gd204OTA0Lm8KIHNuZC1zb2Mtd204OTQwLW9ianMgOj0gd204OTQwLm8KK3NuZC1zb2Mtd204OTU1LW9ianMgOj0gd204OTU1Lm8KIHNuZC1zb2Mtd204OTYwLW9ianMgOj0gd204OTYwLm8KIHNuZC1zb2Mtd204OTYxLW9ianMgOj0gd204OTYxLm8KIHNuZC1zb2Mtd204OTcxLW9ianMgOj0gd204OTcxLm8KIHNuZC1zb2Mtd204OTc0LW9ianMgOj0gd204OTc0Lm8KK3NuZC1zb2Mtd204OTc4LW9ianMgOj0gd204OTc4Lm8KIHNuZC1zb2Mtd204OTg4LW9ianMgOj0gd204OTg4Lm8KIHNuZC1zb2Mtd204OTkwLW9ianMgOj0gd204OTkwLm8KIHNuZC1zb2Mtd204OTkzLW9ianMgOj0gd204OTkzLm8KK3NuZC1zb2Mtd204OTk0LW9ianMgOj0gd204OTk0Lm8KIHNuZC1zb2Mtd205MDgxLW9ianMgOj0gd205MDgxLm8KIHNuZC1zb2Mtd205NzA1LW9ianMgOj0gd205NzA1Lm8KIHNuZC1zb2Mtd205NzEyLW9ianMgOj0gd205NzEyLm8KQEAgLTUzLDYgKzU4LDcgQEAKICMgQW1wCiBzbmQtc29jLW1heDk4Nzctb2JqcyA6PSBtYXg5ODc3Lm8KIHNuZC1zb2MtdHBhNjEzMGEyLW9ianMgOj0gdHBhNjEzMGEyLm8KK3NuZC1zb2Mtd20yMDAwLW9ianMgOj0gd20yMDAwLm8KIAogb2JqLSQoQ09ORklHX1NORF9TT0NfQUM5N19DT0RFQykJKz0gc25kLXNvYy1hYzk3Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX0FEMTgzNikJKz0gc25kLXNvYy1hZDE4MzYubwpAQCAtNjYsNiArNzIsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfQUs0NjcxKQkrPSBzbmQtc29jLWFrNDY3MS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19DUzQyNzApCSs9IHNuZC1zb2MtY3M0MjcwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0NYMjA0NDIpCSs9IHNuZC1zb2MtY3gyMDQ0Mi5vCitvYmotJChDT05GSUdfU05EX1NPQ19EQTcyMTApCSs9IHNuZC1zb2MtZGE3MjEwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0wzKQkrPSBzbmQtc29jLWwzLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1BDTTMwMDgpCSs9IHNuZC1zb2MtcGNtMzAwOC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19TUERJRikJKz0gc25kLXNvYy1zcGRpZi5vCkBAIC05MiwxNCArOTksMTggQEAKIG9iai0kKENPTkZJR19TTkRfU09DX1dNODc3NikJKz0gc25kLXNvYy13bTg3NzYubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTAwKQkrPSBzbmQtc29jLXdtODkwMC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5MDMpCSs9IHNuZC1zb2Mtd204OTAzLm8KLW9iai0kKENPTkZJR19TTkRfU09DX1dNODk3MSkJKz0gc25kLXNvYy13bTg5NzEubwotb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTc0KQkrPSBzbmQtc29jLXdtODk3NC5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTg5MDQpCSs9IHNuZC1zb2Mtd204OTA0Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk0MCkJKz0gc25kLXNvYy13bTg5NDAubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTU1KQkrPSBzbmQtc29jLXdtODk1NS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NjApCSs9IHNuZC1zb2Mtd204OTYwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk2MSkJKz0gc25kLXNvYy13bTg5NjEubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTcxKQkrPSBzbmQtc29jLXdtODk3MS5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NzQpCSs9IHNuZC1zb2Mtd204OTc0Lm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNODk3OCkJKz0gc25kLXNvYy13bTg5Nzgubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTg4KQkrPSBzbmQtc29jLXdtODk4OC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5OTApCSs9IHNuZC1zb2Mtd204OTkwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk5MykJKz0gc25kLXNvYy13bTg5OTMubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTk0KQkrPSBzbmQtc29jLXdtODk5NC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTkwODEpCSs9IHNuZC1zb2Mtd205MDgxLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNOTcwNSkJKz0gc25kLXNvYy13bTk3MDUubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV005NzEyKQkrPSBzbmQtc29jLXdtOTcxMi5vCkBAIC0xMDksMyArMTIwLDQgQEAKICMgQW1wCiBvYmotJChDT05GSUdfU05EX1NPQ19NQVg5ODc3KQkrPSBzbmQtc29jLW1heDk4Nzcubwogb2JqLSQoQ09ORklHX1NORF9TT0NfVFBBNjEzMEEyKQkrPSBzbmQtc29jLXRwYTYxMzBhMi5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTIwMDApCSs9IHNuZC1zb2Mtd20yMDAwLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmMgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jCmluZGV4IDJjMThlM2QuLjNjODAxMzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYwpAQCAtMTcxLDU3ICsxNzEsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi0vKgotICogaW50ZXJmYWNlIHRvIHJlYWQvd3JpdGUgYWQxODM2IHJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgQUQxODM2X1NQSV9SRUdfU0hGVCAxMgotI2RlZmluZSBBRDE4MzZfU1BJX1JFQUQgICAgICgxIDw8IDExKQotI2RlZmluZSBBRDE4MzZfU1BJX1ZBTF9NU0sgIDB4M0ZGCi0KLS8qCi0gKiB3cml0ZSB0byB0aGUgYWQxODM2IHJlZ2lzdGVyIHNwYWNlCi0gKi8KLQotc3RhdGljIGludCBhZDE4MzZfd3JpdGVfcmVnKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKLQkJdW5zaWduZWQgaW50IHZhbHVlKQorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhZDE4MzZfc29jX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKLQlpZiAodmFsdWUgIT0gcmVnX2NhY2hlW3JlZ10pIHsKLQkJdW5zaWduZWQgc2hvcnQgYnVmOwotCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQgPSB7Ci0JCQkudHhfYnVmID0gJmJ1ZiwKLQkJCS5sZW4gPSAyLAotCQl9OwotCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwkvKiByZXNldCBjbG9jayBjb250cm9sIG1vZGUgKi8KKwl1MTYgYWRjX2N0cmwyID0gc25kX3NvY19yZWFkKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwyKTsKKwlhZGNfY3RybDIgJj0gfkFEMTgzNl9BRENfU0VSRk1UX01BU0s7CiAKLQkJYnVmID0gKHJlZyA8PCBBRDE4MzZfU1BJX1JFR19TSEZUKSB8Ci0JCQkodmFsdWUgJiBBRDE4MzZfU1BJX1ZBTF9NU0spOwotCQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKLQkJcmV0ID0gc3BpX3N5bmMoY29kZWMtPmNvbnRyb2xfZGF0YSwgJm0pOwotCQlpZiAocmV0ID09IDApCi0JCQlyZWdfY2FjaGVbcmVnXSA9IHZhbHVlOwotCX0KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDIsIGFkY19jdHJsMik7CiB9CiAKLS8qCi0gKiByZWFkIGZyb20gdGhlIGFkMTgzNiByZWdpc3RlciBzcGFjZSBjYWNoZQotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGFkMTgzNl9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCQkJCSAgdW5zaWduZWQgaW50IHJlZykKK3N0YXRpYyBpbnQgYWQxODM2X3NvY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQl1MTYgKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCi0JaWYgKHJlZyA+PSBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCi0JCXJldHVybiAtRUlOVkFMOworCS8qIHJlc3RvcmUgY2xvY2sgY29udHJvbCBtb2RlICovCisJdTE2IGFkY19jdHJsMiA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUQxODM2X0FEQ19DVFJMMik7CisJYWRjX2N0cmwyIHw9IEFEMTgzNl9BRENfQVVYOwogCi0JcmV0dXJuIHJlZ19jYWNoZVtyZWddOworCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwyLCBhZGNfY3RybDIpOwogfQorI2Vsc2UKKyNkZWZpbmUgYWQxODM2X3NvY19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgYWQxODM2X3NvY19yZXN1bWUgIE5VTEwKKyNlbmRpZgogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZDE4MzZfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CkBAIC0zMDYsMzIgKzI4NCwzOCBAQAogCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwogCWNvZGVjLT5kYWkgPSAmYWQxODM2X2RhaTsKIAljb2RlYy0+bnVtX2RhaSA9IDE7Ci0JY29kZWMtPndyaXRlID0gYWQxODM2X3dyaXRlX3JlZzsKLQljb2RlYy0+cmVhZCA9IGFkMTgzNl9yZWFkX3JlZ19jYWNoZTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKIAogCWFkMTgzNl9kYWkuZGV2ID0gY29kZWMtPmRldjsKIAlhZDE4MzZfY29kZWMgPSBjb2RlYzsKIAorCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA0LCAxMiwgU05EX1NPQ19TUEkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwKKwkJCQlyZXQpOworCQlrZnJlZShhZDE4MzYpOworCQlyZXR1cm4gcmV0OworCX0KKwogCS8qIGRlZmF1bHQgc2V0dGluZyBmb3IgYWQxODM2ICovCiAJLyogZGUtZW1waGFzaXM6IDQ4a0h6LCBwb3dlci1vbiBkYWMgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfQ1RSTDEsIDB4MzAwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfREFDX0NUUkwxLCAweDMwMCk7CiAJLyogdW5tdXRlIGRhYyBjaGFubmVscyAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0RBQ19DVFJMMiwgMHgwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfREFDX0NUUkwyLCAweDApOwogCS8qIGhpZ2gtcGFzcyBmaWx0ZXIgZW5hYmxlLCBwb3dlci1vbiBhZGMgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDEsIDB4MTAwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwxLCAweDEwMCk7CiAJLyogdW5tdXRlIGFkYyBjaGFubmxlcywgYWRjIGF1eCBtb2RlICovCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwyLCAweDE4MCk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0FEQ19DVFJMMiwgMHgxODApOwogCS8qIGxlZnQvcmlnaHQgZGlmZjpQR0EvTVVYICovCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwzLCAweDNBKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwzLCAweDNBKTsKIAkvKiB2b2x1bWUgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfTDFfVk9MLCAweDNGRik7Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfREFDX1IxX1ZPTCwgMHgzRkYpOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0RBQ19MMl9WT0wsIDB4M0ZGKTsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfUjJfVk9MLCAweDNGRik7Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfREFDX0wzX1ZPTCwgMHgzRkYpOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0RBQ19SM19WT0wsIDB4M0ZGKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfREFDX0wxX1ZPTCwgMHgzRkYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfUjFfVk9MLCAweDNGRik7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0RBQ19MMl9WT0wsIDB4M0ZGKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfREFDX1IyX1ZPTCwgMHgzRkYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfTDNfVk9MLCAweDNGRik7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0RBQ19SM19WT0wsIDB4M0ZGKTsKIAogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOwogCWlmIChyZXQgIT0gMCkgewpAQCAtNDA0LDYgKzM4OCw4IEBACiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9hZDE4MzYgPSB7CiAJLnByb2JlID0gCWFkMTgzNl9wcm9iZSwKIAkucmVtb3ZlID0gCWFkMTgzNl9yZW1vdmUsCisJLnN1c3BlbmQgPSAgICAgIGFkMTgzNl9zb2Nfc3VzcGVuZCwKKwkucmVzdW1lID0gICAgICAgYWQxODM2X3NvY19yZXN1bWUsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl9hZDE4MzYpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5oIGIvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuaAppbmRleCA3NjYwZWU2Li5lOWQ5MGQzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmgKQEAgLTU0LDYgKzU0LDcgQEAKICNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfTUFTSwkgICAgICAgKDcgPDwgNikKICNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfUENLMjU2ICAgICAgICgweDQgPDwgNikKICNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfUENLMTI4ICAgICAgICgweDUgPDwgNikKKyNkZWZpbmUgQUQxODM2X0FEQ19BVVggICAgICAgICAgICAgICAgICgweDYgPDwgNikKIAogI2RlZmluZSBBRDE4MzZfQURDX0NUUkwzICAgICAgICAgICAgICAgMTQKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE5MzguYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTM4LmMKaW5kZXggNWQ0ODkxOC4uYzIzMzgxMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE5MzguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTkzOC5jCkBAIC00Niw2ICs0NiwxMSBAQAogCXU4IHJlZ19jYWNoZVtBRDE5MzhfTlVNX1JFR1NdOwogfTsKIAorLyogYWQxOTM4IHJlZ2lzdGVyIGNhY2hlICYgZGVmYXVsdCByZWdpc3RlciBzZXR0aW5ncyAqLworc3RhdGljIGNvbnN0IHU4IGFkMTkzOF9yZWdbQUQxOTM4X05VTV9SRUdTXSA9IHsKKwkwLCAwLCAwLCAwLCAwLCAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAwLCAwLCAwLAorfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICphZDE5MzhfY29kZWM7CiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9hZDE5Mzg7CiBzdGF0aWMgaW50IGFkMTkzOF9yZWdpc3RlcihzdHJ1Y3QgYWQxOTM4X3ByaXYgKmFkMTkzOCk7CkBAIC05Nyw2ICsxMDIsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IGFkMTkzOF9kYXBtX3dpZGdldHNbXSA9IHsKIAlTTkRfU09DX0RBUE1fREFDKCJEQUMiLCAiUGxheWJhY2siLCBBRDE5MzhfREFDX0NUUkwwLCAwLCAxKSwKIAlTTkRfU09DX0RBUE1fQURDKCJBREMiLCAiQ2FwdHVyZSIsIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiUExMX1BXUiIsIEFEMTkzOF9QTExfQ0xLX0NUUkwwLCAwLCAxLCBOVUxMLCAwKSwKIAlTTkRfU09DX0RBUE1fU1VQUExZKCJBRENfUFdSIiwgQUQxOTM4X0FEQ19DVFJMMCwgMCwgMSwgTlVMTCwgMCksCiAJU05EX1NPQ19EQVBNX09VVFBVVCgiREFDMU9VVCIpLAogCVNORF9TT0NfREFQTV9PVVRQVVQoIkRBQzJPVVQiKSwKQEAgLTEwNyw2ICsxMTMsOCBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fcGF0aHNbXSA9IHsKKwl7ICJEQUMiLCBOVUxMLCAiUExMX1BXUiIgfSwKKwl7ICJBREMiLCBOVUxMLCAiUExMX1BXUiIgfSwKIAl7ICJEQUMiLCBOVUxMLCAiQURDX1BXUiIgfSwKIAl7ICJBREMiLCBOVUxMLCAiQURDX1BXUiIgfSwKIAl7ICJEQUMxT1VUIiwgIkRBQzEgU3dpdGNoIiwgIkRBQyIgfSwKQEAgLTEyNiwzMCArMTM0LDIwIEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKIAlpbnQgcmVnOwogCi0JcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIpOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUQxOTM4X0RBQ19DVFJMMik7CiAJcmVnID0gKG11dGUgPiAwKSA/IHJlZyB8IEFEMTkzOF9EQUNfTUFTVEVSX01VVEUgOiByZWcgJgogCQkofkFEMTkzOF9EQUNfTUFTVEVSX01VVEUpOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMiwgcmVnKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhZDE5MzhfcGxsX3Bvd2VyY3RybChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBjbWQpCi17Ci0JaW50IHJlZyA9IGNvZGVjLT5yZWFkKGNvZGVjLCBBRDE5MzhfUExMX0NMS19DVFJMMCk7Ci0JcmVnID0gKGNtZCA+IDApID8gcmVnICYgKH5BRDE5MzhfUExMX1BPV0VSRE9XTikgOiByZWcgfAotCQlBRDE5MzhfUExMX1BPV0VSRE9XTjsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9QTExfQ0xLX0NUUkwwLCByZWcpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIsIHJlZyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhZDE5Mzhfc2V0X3RkbV9zbG90KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgdHhfbWFzaywKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWFzaywgaW50IHNsb3RzLCBpbnQgd2lkdGgpCisJCQkgICAgICAgdW5zaWduZWQgaW50IHJ4X21hc2ssIGludCBzbG90cywgaW50IHdpZHRoKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7Ci0JaW50IGRhY19yZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0RBQ19DVFJMMSk7Ci0JaW50IGFkY19yZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0FEQ19DVFJMMik7CisJaW50IGRhY19yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDEpOworCWludCBhZGNfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwyKTsKIAogCWRhY19yZWcgJj0gfkFEMTkzOF9EQUNfQ0hBTl9NQVNLOwogCWFkY19yZWcgJj0gfkFEMTkzOF9BRENfQ0hBTl9NQVNLOwpAQCAtMTc1LDggKzE3Myw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMSwgZGFjX3JlZyk7Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwyLCBhZGNfcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwxLCBkYWNfcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwyLCBhZGNfcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTg3LDggKzE4NSw4IEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKIAlpbnQgYWRjX3JlZywgZGFjX3JlZzsKIAotCWFkY19yZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0FEQ19DVFJMMik7Ci0JZGFjX3JlZyA9IGNvZGVjLT5yZWFkKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwxKTsKKwlhZGNfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwyKTsKKwlkYWNfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwxKTsKIAogCS8qIEF0IHByZXNlbnQsIHRoZSBkcml2ZXIgb25seSBzdXBwb3J0IEFVWCBBREMgbW9kZShTTkRfU09DX0RBSUZNVF9JMlMKIAkgKiB3aXRoIFRETSkgYW5kIEFEQyZEQUMgVERNIG1vZGUoU05EX1NPQ19EQUlGTVRfRFNQX0EpCkBAIC0yNjUsOCArMjYzLDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwyLCBhZGNfcmVnKTsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDEsIGRhY19yZWcpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDIsIGFkY19yZWcpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDEsIGRhY19yZWcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTUsMTM0ICsyOTMsMTMgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIpOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUQxOTM4X0RBQ19DVFJMMik7CiAJcmVnID0gKHJlZyAmICh+QUQxOTM4X0RBQ19XT1JEX0xFTl9NQVNLKSkgfCB3b3JkX2xlbjsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIsIHJlZyk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMiwgcmVnKTsKIAotCXJlZyA9IGNvZGVjLT5yZWFkKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwxKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDEpOwogCXJlZyA9IChyZWcgJiAofkFEMTkzOF9BRENfV09SRF9MRU5fTUFTSykpIHwgd29yZF9sZW47Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwxLCByZWcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQxOTM4X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQkJZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCi17Ci0Jc3dpdGNoIChsZXZlbCkgewotCWNhc2UgU05EX1NPQ19CSUFTX09OOgotCQlhZDE5MzhfcGxsX3Bvd2VyY3RybChjb2RlYywgMSk7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgotCQlhZDE5MzhfcGxsX3Bvd2VyY3RybChjb2RlYywgMCk7Ci0JCWJyZWFrOwotCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOwotCXJldHVybiAwOwotfQotCi0vKgotICogaW50ZXJmYWNlIHRvIHJlYWQvd3JpdGUgYWQxOTM4IHJlZ2lzdGVyCi0gKi8KLQotI2RlZmluZSBBRDE5MzhfU1BJX0FERFIgICAgMHg0Ci0jZGVmaW5lIEFEMTkzOF9TUElfUkVBRCAgICAweDEKLSNkZWZpbmUgQUQxOTM4X1NQSV9CVUZMRU4gIDMKLQotLyoKLSAqIHdyaXRlIHRvIHRoZSBhZDE5MzggcmVnaXN0ZXIgc3BhY2UKLSAqLwotCi1zdGF0aWMgaW50IGFkMTkzOF93cml0ZV9yZWcoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAotCQl1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTggKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAodmFsdWUgIT0gcmVnX2NhY2hlW3JlZ10pIHsKLQkJdWludDhfdCBidWZbQUQxOTM4X1NQSV9CVUZMRU5dOwotCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQgPSB7Ci0JCQkudHhfYnVmID0gYnVmLAotCQkJLmxlbiA9IEFEMTkzOF9TUElfQlVGTEVOLAotCQl9OwotCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQotCQlidWZbMF0gPSBBRDE5MzhfU1BJX0FERFIgPDwgMTsKLQkJYnVmWzFdID0gcmVnOwotCQlidWZbMl0gPSB2YWx1ZTsKLQkJc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0JCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7Ci0JCXJldCA9IHNwaV9zeW5jKGNvZGVjLT5jb250cm9sX2RhdGEsICZtKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmVnX2NhY2hlW3JlZ10gPSB2YWx1ZTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogcmVhZCBmcm9tIHRoZSBhZDE5MzggcmVnaXN0ZXIgc3BhY2UgY2FjaGUKLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGFkMTkzOF9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCQkJCSAgdW5zaWduZWQgaW50IHJlZykKLXsKLQl1OCAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQotCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiByZWdfY2FjaGVbcmVnXTsKLX0KLQotLyoKLSAqIHJlYWQgZnJvbSB0aGUgYWQxOTM4IHJlZ2lzdGVyIHNwYWNlCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBhZDE5MzhfcmVhZF9yZWcoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCQkJCQkJdW5zaWduZWQgaW50IHJlZykKLXsKLQljaGFyIHdfYnVmW0FEMTkzOF9TUElfQlVGTEVOXTsKLQljaGFyIHJfYnVmW0FEMTkzOF9TUElfQlVGTEVOXTsKLQlpbnQgcmV0OwotCi0Jc3RydWN0IHNwaV90cmFuc2ZlciB0ID0gewotCQkudHhfYnVmID0gd19idWYsCi0JCS5yeF9idWYgPSByX2J1ZiwKLQkJLmxlbiA9IEFEMTkzOF9TUElfQlVGTEVOLAotCX07Ci0Jc3RydWN0IHNwaV9tZXNzYWdlIG07Ci0KLQl3X2J1ZlswXSA9IChBRDE5MzhfU1BJX0FERFIgPDwgMSkgfCBBRDE5MzhfU1BJX1JFQUQ7Ci0Jd19idWZbMV0gPSByZWc7Ci0Jd19idWZbMl0gPSAwOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKLQlyZXQgPSBzcGlfc3luYyhjb2RlYy0+Y29udHJvbF9kYXRhLCAmbSk7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXR1cm4Jcl9idWZbMl07Ci0JZWxzZQotCQlyZXR1cm4gLUVJTzsKLX0KLQotc3RhdGljIGludCBhZDE5MzhfZmlsbF9jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGk7Ci0JdTggKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0Jc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvZGVjLT5jb250cm9sX2RhdGE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPnJlZ19jYWNoZV9zaXplOyBpKyspIHsKLQkJaW50IHJldCA9IGFkMTkzOF9yZWFkX3JlZyhjb2RlYywgaSk7Ci0JCWlmIChyZXQgPT0gLUVJTykgewotCQkJZGV2X2Vycigmc3BpLT5kZXYsICJBRDE5MzggU1BJIHJlYWQgZmFpbHVyZVxuIik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCXJlZ19jYWNoZVtpXSA9IHJldDsKLQl9CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0FEQ19DVFJMMSwgcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTEyLDMyICszODksMzcgQEAKIAljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAljb2RlYy0+ZGFpID0gJmFkMTkzOF9kYWk7CiAJY29kZWMtPm51bV9kYWkgPSAxOwotCWNvZGVjLT53cml0ZSA9IGFkMTkzOF93cml0ZV9yZWc7Ci0JY29kZWMtPnJlYWQgPSBhZDE5MzhfcmVhZF9yZWdfY2FjaGU7Ci0JY29kZWMtPnNldF9iaWFzX2xldmVsID0gYWQxOTM4X3NldF9iaWFzX2xldmVsOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwogCiAJYWQxOTM4X2RhaS5kZXYgPSBjb2RlYy0+ZGV2OwogCWFkMTkzOF9jb2RlYyA9IGNvZGVjOwogCisJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIGFkMTkzOF9yZWcsIEFEMTkzOF9OVU1fUkVHUyk7CisKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgMTYsIDgsIFNORF9TT0NfU1BJKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsCisJCQkJcmV0KTsKKwkJa2ZyZWUoYWQxOTM4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAkvKiBkZWZhdWx0IHNldHRpbmcgZm9yIGFkMTkzOCAqLwogCiAJLyogdW5tdXRlIGRhYyBjaGFubmVscyAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DSE5MX01VVEUsIDB4MCk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DSE5MX01VVEUsIDB4MCk7CiAJLyogZGUtZW1waGFzaXM6IDQ4a0h6LCBwb3dlZG93biBkYWMgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIsIDB4MUEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIsIDB4MUEpOwogCS8qIHBvd2VyZG93biBkYWMsIGRhYyBpbiB0ZG0gbW9kZSAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMCwgMHg0MSk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMCwgMHg0MSk7CiAJLyogaGlnaC1wYXNzIGZpbHRlciBlbmFibGUgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDAsIDB4Myk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0FEQ19DVFJMMCwgMHgzKTsKIAkvKiBzYXRhIGRlbGF5PTEsIGFkYyBhdXggbW9kZSAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0FEQ19DVFJMMSwgMHg0Myk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0FEQ19DVFJMMSwgMHg0Myk7CiAJLyogcGxsIGlucHV0OiBtY2xraS94aSAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X1BMTF9DTEtfQ1RSTDAsIDB4OUQpOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X1BMTF9DTEtfQ1RSTDEsIDB4MDQpOwotCi0JYWQxOTM4X2ZpbGxfY2FjaGUoY29kZWMpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9QTExfQ0xLX0NUUkwwLCAweDlEKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfUExMX0NMS19DVFJMMSwgMHgwNCk7CiAKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKIAlpZiAocmV0ICE9IDApIHsKQEAgLTU1OSw3ICs0NDEsNiBAQAogCiBzdGF0aWMgdm9pZCBhZDE5MzhfdW5yZWdpc3RlcihzdHJ1Y3QgYWQxOTM4X3ByaXYgKmFkMTkzOCkKIHsKLQlhZDE5Mzhfc2V0X2JpYXNfbGV2ZWwoJmFkMTkzOC0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmFkMTkzOF9kYWkpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmYWQxOTM4LT5jb2RlYyk7CiAJa2ZyZWUoYWQxOTM4KTsKQEAgLTU5Myw3ICs0NzQsNiBAQAogCQkJCSAgQVJSQVlfU0laRShhZDE5MzhfZGFwbV93aWRnZXRzKSk7CiAJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX3BhdGhzLCBBUlJBWV9TSVpFKGF1ZGlvX3BhdGhzKSk7CiAKLQlhZDE5Mzhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAogcGNtX2VycjoKIAlyZXR1cm4gcmV0OwpAQCAtNjEwLDM3ICs0OTAsOSBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGFkMTkzOF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCXBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7Ci0KLQlhZDE5Mzhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkMTkzOF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7Ci0KLQlpZiAoY29kZWMtPnN1c3BlbmRfYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT04pCi0JCWFkMTkzOF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09OKTsKLQotCXJldHVybiAwOwotfQotI2Vsc2UKLSNkZWZpbmUgYWQxOTM4X3N1c3BlbmQgTlVMTAotI2RlZmluZSBhZDE5MzhfcmVzdW1lIE5VTEwKLSNlbmRpZgotCiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9hZDE5MzggPSB7CiAJLnByb2JlID0gCWFkMTkzOF9wcm9iZSwKIAkucmVtb3ZlID0gCWFkMTkzOF9yZW1vdmUsCi0JLnN1c3BlbmQgPSAgICAgIGFkMTkzOF9zdXNwZW5kLAotCS5yZXN1bWUgPSAgICAgICBhZDE5MzhfcmVzdW1lLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfYWQxOTM4KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMKaW5kZXggM2ExNGM2Zi4uYjllZjdlNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5jCkBAIC0xODUsOSArMTg1LDcgQEAKIAkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKIAkJLmNoYW5uZWxzX21pbiA9IDIsCiAJCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80NDEwMCB8Ci0JCQkgU05EUlZfUENNX1JBVEVfNDgwMDAgfAotCQkJIFNORFJWX1BDTV9SQVRFXzMyMDAwLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMCwKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSAgfAogCQkJICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwKIAkJCSAgIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jIGIvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYwppbmRleCBmZmUxMjJkLi5kZmJlYjJkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAogI2luY2x1ZGUgImNzNDI3MC5oIgogCkBAIC0xMDYsNiArMTA3LDEwIEBACiAjZGVmaW5lIENTNDI3MF9NVVRFX0RBQ19BCTB4MDEKICNkZWZpbmUgQ1M0MjcwX01VVEVfREFDX0IJMHgwMgogCitzdGF0aWMgY29uc3QgY2hhciAqc3VwcGx5X25hbWVzW10gPSB7CisJInZhIiwgInZkIiwgInZsYyIKK307CisKIC8qIFByaXZhdGUgZGF0YSBmb3IgdGhlIENTNDI3MCAqLwogc3RydWN0IGNzNDI3MF9wcml2YXRlIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKQEAgLTExNCw2ICsxMTksOSBAQAogCXVuc2lnbmVkIGludCBtb2RlOyAvKiBUaGUgbW9kZSAoSTJTIG9yIGxlZnQtanVzdGlmaWVkKSAqLwogCXVuc2lnbmVkIGludCBzbGF2ZV9tb2RlOwogCXVuc2lnbmVkIGludCBtYW51YWxfbXV0ZTsKKworCS8qIHBvd2VyIGRvbWFpbiByZWd1bGF0b3JzICovCisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbQVJSQVlfU0laRShzdXBwbHlfbmFtZXMpXTsKIH07CiAKIC8qKgpAQCAtMTkyLDYgKzIwMCwxMSBAQAogICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSB0aGUgbWFjaGluZSBkcml2ZXIncyAnc3RhcnR1cCcgZnVuY3Rpb24sCiAgKiBvdGhlcndpc2UgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHNhbXBsZSByYXRlcyB3aWxsIG5vdCBiZSBhdmFpbGFibGUgaW4KICAqIHRpbWUgZm9yIEFMU0EuCisgKgorICogRm9yIHNldHVwcyB3aXRoIHZhcmlhYmxlIE1DTEtzLCBwYXNzIDAgYXMgJ2ZyZXEnIGFyZ3VtZW50LiBUaGlzIHdpbGwgY2F1c2UKKyAqIHRoZW9yZXRpY2FsbHkgcG9zc2libGUgc2FtcGxlIHJhdGVzIHRvIGJlIGVuYWJsZWQuIENhbGwgaXQgYWdhaW4gd2l0aCBhCisgKiBwcm9wZXIgdmFsdWUgc2V0IG9uZSB0aGUgZXh0ZXJuYWwgY2xvY2sgaXMgc2V0IChtb3N0IHByb2JhYmx5IHlvdSB3b3VsZCBkbworICogdGhhdCBmcm9tIGEgbWFjaGluZSdzIGRyaXZlciAnaHdfcGFyYW0nIGhvb2suCiAgKi8KIHN0YXRpYyBpbnQgY3M0MjcwX3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAogCQkJCSBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKQEAgLTIwNSwyMCArMjE4LDI3IEBACiAKIAljczQyNzAtPm1jbGsgPSBmcmVxOwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9NQ0xLX1JBVElPUzsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCByYXRlID0gZnJlcSAvIGNzNDI3MF9tb2RlX3JhdGlvc1tpXS5yYXRpbzsKLQkJcmF0ZXMgfD0gc25kX3BjbV9yYXRlX3RvX3JhdGVfYml0KHJhdGUpOwotCQlpZiAocmF0ZSA8IHJhdGVfbWluKQotCQkJcmF0ZV9taW4gPSByYXRlOwotCQlpZiAocmF0ZSA+IHJhdGVfbWF4KQotCQkJcmF0ZV9tYXggPSByYXRlOwotCX0KLQkvKiBGSVhNRTogc29jIHNob3VsZCBzdXBwb3J0IGEgcmF0ZSBsaXN0ICovCi0JcmF0ZXMgJj0gflNORFJWX1BDTV9SQVRFX0tOT1Q7CisJaWYgKGNzNDI3MC0+bWNsaykgeworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX01DTEtfUkFUSU9TOyBpKyspIHsKKwkJCXVuc2lnbmVkIGludCByYXRlID0gZnJlcSAvIGNzNDI3MF9tb2RlX3JhdGlvc1tpXS5yYXRpbzsKKwkJCXJhdGVzIHw9IHNuZF9wY21fcmF0ZV90b19yYXRlX2JpdChyYXRlKTsKKwkJCWlmIChyYXRlIDwgcmF0ZV9taW4pCisJCQkJcmF0ZV9taW4gPSByYXRlOworCQkJaWYgKHJhdGUgPiByYXRlX21heCkKKwkJCQlyYXRlX21heCA9IHJhdGU7CisJCX0KKwkJLyogRklYTUU6IHNvYyBzaG91bGQgc3VwcG9ydCBhIHJhdGUgbGlzdCAqLworCQlyYXRlcyAmPSB+U05EUlZfUENNX1JBVEVfS05PVDsKIAotCWlmICghcmF0ZXMpIHsKLQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiY291bGQgbm90IGZpbmQgYSB2YWxpZCBzYW1wbGUgcmF0ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlpZiAoIXJhdGVzKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJjb3VsZCBub3QgZmluZCBhIHZhbGlkIHNhbXBsZSByYXRlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJLyogZW5hYmxlIGFsbCBwb3NzaWJsZSByYXRlcyAqLworCQlyYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfMTkyMDAwOworCQlyYXRlX21pbiA9IDgwMDA7CisJCXJhdGVfbWF4ID0gMTkyMDAwOwogCX0KIAogCWNvZGVjX2RhaS0+cGxheWJhY2sucmF0ZXMgPSByYXRlczsKQEAgLTU3OSw3ICs1OTksOCBAQAogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY3M0MjcwX2NvZGVjOwotCWludCByZXQ7CisJc3RydWN0IGNzNDI3MF9wcml2YXRlICpjczQyNzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBpLCByZXQ7CiAKIAkvKiBDb25uZWN0IHRoZSBjb2RlYyB0byB0aGUgc29jZGV2LiAgc25kX3NvY19uZXdfcGNtcygpIG5lZWRzIHRoaXMuICovCiAJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwpAQCAtNTk5LDggKzYyMCwyNiBAQAogCQlnb3RvIGVycm9yX2ZyZWVfcGNtczsKIAl9CiAKKwkvKiBnZXQgdGhlIHBvd2VyIHN1cHBseSByZWd1bGF0b3JzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3VwcGx5X25hbWVzKTsgaSsrKQorCQljczQyNzAtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHN1cHBseV9uYW1lc1tpXTsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChjb2RlYy0+ZGV2LCBBUlJBWV9TSVpFKGNzNDI3MC0+c3VwcGxpZXMpLAorCQkJCSBjczQyNzAtPnN1cHBsaWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9mcmVlX3BjbXM7CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShjczQyNzAtPnN1cHBsaWVzKSwKKwkJCQkgICAgY3M0MjcwLT5zdXBwbGllcyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfZnJlZV9yZWd1bGF0b3JzOworCiAJcmV0dXJuIDA7CiAKK2Vycm9yX2ZyZWVfcmVndWxhdG9yczoKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUoY3M0MjcwLT5zdXBwbGllcyksCisJCQkgICAgY3M0MjcwLT5zdXBwbGllcyk7CisKIGVycm9yX2ZyZWVfcGNtczoKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCkBAIC02MTYsOCArNjU1LDEyIEBACiBzdGF0aWMgaW50IGNzNDI3MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNzNDI3MF9jb2RlYzsKKwlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShjczQyNzAtPnN1cHBsaWVzKSwgY3M0MjcwLT5zdXBwbGllcyk7CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKGNzNDI3MC0+c3VwcGxpZXMpLCBjczQyNzAtPnN1cHBsaWVzKTsKIAogCXJldHVybiAwOwogfTsKQEAgLTc5OSwxNyArODQyLDMzIEBACiBzdGF0aWMgaW50IGNzNDI3MF9zb2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjczQyNzBfY29kZWM7Ci0JaW50IHJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQ1M0MjcwX1BXUkNUTCkgfCBDUzQyNzBfUFdSQ1RMX1BETl9BTEw7CisJc3RydWN0IGNzNDI3MF9wcml2YXRlICpjczQyNzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZWcsIHJldDsKIAotCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyNzBfUFdSQ1RMLCByZWcpOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQ1M0MjcwX1BXUkNUTCkgfCBDUzQyNzBfUFdSQ1RMX1BETl9BTEw7CisJaWYgKHJlZyA8IDApCisJCXJldHVybiByZWc7CisKKwlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyNzBfUFdSQ1RMLCByZWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGNzNDI3MC0+c3VwcGxpZXMpLAorCQkJICAgICAgIGNzNDI3MC0+c3VwcGxpZXMpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY3M0MjcwX3NvY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjczQyNzBfY29kZWM7CisJc3RydWN0IGNzNDI3MF9wcml2YXRlICpjczQyNzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50ID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKIAlpbnQgcmVnOwogCisJcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUoY3M0MjcwLT5zdXBwbGllcyksCisJCQkgICAgICBjczQyNzAtPnN1cHBsaWVzKTsKKwogCS8qIEluIGNhc2UgdGhlIGRldmljZSB3YXMgcHV0IHRvIGhhcmQgcmVzZXQgZHVyaW5nIHNsZWVwLCB3ZSBuZWVkIHRvCiAJICogd2FpdCA1MDBucyBoZXJlIGJlZm9yZSBhbnkgSTJDIGNvbW11bmljYXRpb24uICovCiAJbmRlbGF5KDUwMCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2RhNzIxMC5jIGIvc291bmQvc29jL2NvZGVjcy9kYTcyMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjI5NzVhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9kYTcyMTAuYwpAQCAtMCwwICsxLDU4OSBAQAorLyoKKyAqIERBNzIxMCBBTFNBIFNvYyBjb2RlYyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIFdyaXR0ZW4gYnkgRGF2aWQgQ2hlbiA8RGFqdW4uY2hlbkBkaWFzZW1pLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIENsZWFudXBzIGJ5IEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiBUZXN0ZWQgb24gU3VwZXJIIEVjb3ZlYzI0IGJvYXJkIHdpdGggUzE2L1MyNCBMRSBpbiA0OEtIeiB1c2luZyBJMlMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgImRhNzIxMC5oIgorCisvKiBEQTcyMTAgcmVnaXN0ZXIgc3BhY2UgKi8KKyNkZWZpbmUgREE3MjEwX1NUQVRVUwkJCTB4MDIKKyNkZWZpbmUgREE3MjEwX1NUQVJUVVAxCQkJMHgwMworI2RlZmluZSBEQTcyMTBfTUlDX0wJCQkweDA3CisjZGVmaW5lIERBNzIxMF9NSUNfUgkJCTB4MDgKKyNkZWZpbmUgREE3MjEwX0lOTUlYX0wJCQkweDBECisjZGVmaW5lIERBNzIxMF9JTk1JWF9SCQkJMHgwRQorI2RlZmluZSBEQTcyMTBfQURDX0hQRgkJCTB4MEYKKyNkZWZpbmUgREE3MjEwX0FEQwkJCTB4MTAKKyNkZWZpbmUgREE3MjEwX0RBQ19IUEYJCQkweDE0CisjZGVmaW5lIERBNzIxMF9EQUNfTAkJCTB4MTUKKyNkZWZpbmUgREE3MjEwX0RBQ19SCQkJMHgxNgorI2RlZmluZSBEQTcyMTBfREFDX1NFTAkJCTB4MTcKKyNkZWZpbmUgREE3MjEwX09VVE1JWF9MCQkJMHgxQworI2RlZmluZSBEQTcyMTBfT1VUTUlYX1IJCQkweDFECisjZGVmaW5lIERBNzIxMF9IUF9MX1ZPTAkJCTB4MjEKKyNkZWZpbmUgREE3MjEwX0hQX1JfVk9MCQkJMHgyMgorI2RlZmluZSBEQTcyMTBfSFBfQ0ZHCQkJMHgyMworI2RlZmluZSBEQTcyMTBfREFJX1NSQ19TRUwJCTB4MjUKKyNkZWZpbmUgREE3MjEwX0RBSV9DRkcxCQkJMHgyNgorI2RlZmluZSBEQTcyMTBfREFJX0NGRzMJCQkweDI4CisjZGVmaW5lIERBNzIxMF9QTExfRElWMwkJCTB4MkIKKyNkZWZpbmUgREE3MjEwX1BMTAkJCTB4MkMKKworLyogU1RBUlRVUDEgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfU0NfTVNUX0VOCQkoMSA8PCAwKQorCisvKiBNSUNfTCBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9NSUNCSUFTX0VOCQkoMSA8PCA2KQorI2RlZmluZSBEQTcyMTBfTUlDX0xfRU4JCQkoMSA8PCA3KQorCisvKiBNSUNfUiBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9NSUNfUl9FTgkJCSgxIDw8IDcpCisKKy8qIElOTUlYX0wgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfSU5fTF9FTgkJCSgxIDw8IDcpCisKKy8qIElOTUlYX1IgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfSU5fUl9FTgkJCSgxIDw8IDcpCisKKy8qIEFEQ19IUEYgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfQURDX1ZPSUNFX0VOCQkoMSA8PCA3KQorCisvKiBBREMgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfQURDX0xfRU4JCQkoMSA8PCAzKQorI2RlZmluZSBEQTcyMTBfQURDX1JfRU4JCQkoMSA8PCA3KQorCisvKiBEQUNfSFBGIGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfREFDX1ZPSUNFX0VOCQkoMSA8PCA3KQorCisvKiBEQUNfU0VMIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX0RBQ19MX1NSQ19EQUlfTAkJKDQgPDwgMCkKKyNkZWZpbmUgREE3MjEwX0RBQ19MX0VOCQkJKDEgPDwgMykKKyNkZWZpbmUgREE3MjEwX0RBQ19SX1NSQ19EQUlfUgkJKDUgPDwgNCkKKyNkZWZpbmUgREE3MjEwX0RBQ19SX0VOCQkJKDEgPDwgNykKKworLyogT1VUTUlYX0wgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfT1VUX0xfRU4JCQkoMSA8PCA3KQorCisvKiBPVVRNSVhfUiBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9PVVRfUl9FTgkJCSgxIDw8IDcpCisKKy8qIEhQX0NGRyBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9IUF8yQ0FQX01PREUJCSgxIDw8IDEpCisjZGVmaW5lIERBNzIxMF9IUF9TRU5TRV9FTgkJKDEgPDwgMikKKyNkZWZpbmUgREE3MjEwX0hQX0xfRU4JCQkoMSA8PCAzKQorI2RlZmluZSBEQTcyMTBfSFBfTU9ERQkJCSgxIDw8IDYpCisjZGVmaW5lIERBNzIxMF9IUF9SX0VOCQkJKDEgPDwgNykKKworLyogREFJX1NSQ19TRUwgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfREFJX09VVF9MX1NSQwkJKDYgPDwgMCkKKyNkZWZpbmUgREE3MjEwX0RBSV9PVVRfUl9TUkMJCSg3IDw8IDQpCisKKy8qIERBSV9DRkcxIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX0RBSV9XT1JEX1MxNl9MRQkJKDAgPDwgMCkKKyNkZWZpbmUgREE3MjEwX0RBSV9XT1JEX1MyNF9MRQkJKDIgPDwgMCkKKyNkZWZpbmUgREE3MjEwX0RBSV9GTEVOXzY0QklUCQkoMSA8PCAyKQorI2RlZmluZSBEQTcyMTBfREFJX01PREVfTUFTVEVSCQkoMSA8PCA3KQorCisvKiBEQUlfQ0ZHMyBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9EQUlfRk9STUFUX0kyU01PREUJKDAgPDwgMCkKKyNkZWZpbmUgREE3MjEwX0RBSV9PRQkJCSgxIDw8IDMpCisjZGVmaW5lIERBNzIxMF9EQUlfRU4JCQkoMSA8PCA3KQorCisvKlBMTF9ESVYzIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX01DTEtfUkFOR0VfMTBfMjBfTUhaCSgxIDw8IDQpCisjZGVmaW5lIERBNzIxMF9QTExfQllQCQkJKDEgPDwgNikKKworLyogUExMIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX1BMTF9GU180ODAwMAkJKDExIDw8IDApCisKKyNkZWZpbmUgREE3MjEwX1ZFUlNJT04gIjAuMC4xIgorCisvKiBDb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCBkYTcyMTBfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKmRhNzIxMF9jb2RlYzsKKworLyoKKyAqIFJlZ2lzdGVyIGNhY2hlCisgKi8KK3N0YXRpYyBjb25zdCB1OCBkYTcyMTBfcmVnW10gPSB7CisJMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjAgIC0gUjcgICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwJLyogUjggIC0gUkYgICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgxMCwgMHgxMCwgMHg1NCwJLyogUjEwIC0gUjE3ICovCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjE4IC0gUjFGICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3NiwgMHgwMCwgMHgwMCwJLyogUjIwIC0gUjI3ICovCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgyQSwgMHgwMCwgMHg0MCwgMHgwMCwJLyogUjI4IC0gUjJGICovCisJMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwJLyogUjMwIC0gUjM3ICovCisJMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjM4IC0gUjNGICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjQwIC0gUjRGICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjQ4IC0gUjRGICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjUwIC0gUjU3ICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjU4IC0gUjVGICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjYwIC0gUjY3ICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjY4IC0gUjZGICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjcwIC0gUjc3ICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMCwJLyogUjc4IC0gUjdGICovCisJMHgwMCwgMHgwMCwgMHgyQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjgwIC0gUjg3ICovCisJMHgwMCwJCQkJCQkvKiBSODggICAgICAgKi8KK307CisKKy8qCisgKiBSZWFkIGRhNzIxMCByZWdpc3RlciBjYWNoZQorICovCitzdGF0aWMgaW5saW5lIHUzMiBkYTcyMTBfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1MzIgcmVnKQoreworCXU4ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJQlVHX09OKHJlZyA+IEFSUkFZX1NJWkUoZGE3MjEwX3JlZykpOworCXJldHVybiBjYWNoZVtyZWddOworfQorCisvKgorICogV3JpdGUgdG8gdGhlIGRhNzIxMCByZWdpc3RlciBzcGFjZQorICovCitzdGF0aWMgaW50IGRhNzIxMF93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHUzMiByZWcsIHUzMiB2YWx1ZSkKK3sKKwl1OCAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCXU4IGRhdGFbMl07CisKKwlCVUdfT04oY29kZWMtPnZvbGF0aWxlX3JlZ2lzdGVyKTsKKworCWRhdGFbMF0gPSByZWcgJiAweGZmOworCWRhdGFbMV0gPSB2YWx1ZSAmIDB4ZmY7CisKKwlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoMiAhPSBjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMikpCisJCXJldHVybiAtRUlPOworCisJY2FjaGVbcmVnXSA9IHZhbHVlOworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCBmcm9tIHRoZSBkYTcyMTAgcmVnaXN0ZXIgc3BhY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGRhNzIxMF9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdTMyIHJlZykKK3sKKwlpZiAoREE3MjEwX1NUQVRVUyA9PSByZWcpCisJCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY29kZWMtPmNvbnRyb2xfZGF0YSwgcmVnKTsKKworCXJldHVybiBkYTcyMTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIHJlZyk7Cit9CisKK3N0YXRpYyBpbnQgZGE3MjEwX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCWludCBpc19wbGF5ID0gc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCisJaWYgKGlzX3BsYXkpIHsKKwkJLyogUGxheUJhY2sgVm9sdW1lIDQwICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxMF9IUF9MX1ZPTCwgMHgzRiwgNDApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMTBfSFBfUl9WT0wsIDB4M0YsIDQwKTsKKworCQkvKiBFbmFibGUgT3V0ICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxMF9PVVRNSVhfTCwgMHgxRiwgMHgxMCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxMF9PVVRNSVhfUiwgMHgxRiwgMHgxMCk7CisKKwl9IGVsc2UgeworCQkvKiBWb2x1bWUgNyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMTBfTUlDX0wsIDB4NywgMHg3KTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjEwX01JQ19SLCAweDcsIDB4Nyk7CisKKwkJLyogRW5hYmxlIE1pYyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMTBfSU5NSVhfTCwgMHgxRiwgMHgxKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjEwX0lOTUlYX1IsIDB4MUYsIDB4MSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgUENNIERBSSB3b3JkIGxlbmd0aC4KKyAqLworc3RhdGljIGludCBkYTcyMTBfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJdTMyIGRhaV9jZmcxOworCXUzMiByZWcsIG1hc2s7CisKKwkvKiBzZXQgREFJIHNvdXJjZSB0byBMZWZ0IGFuZCBSaWdodCBBREMgKi8KKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9EQUlfU1JDX1NFTCwKKwkJICAgICBEQTcyMTBfREFJX09VVF9SX1NSQyB8IERBNzIxMF9EQUlfT1VUX0xfU1JDKTsKKworCS8qIEVuYWJsZSBEQUkgKi8KKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9EQUlfQ0ZHMywgREE3MjEwX0RBSV9PRSB8IERBNzIxMF9EQUlfRU4pOworCisJZGFpX2NmZzEgPSAweEZDICYgZGE3MjEwX3JlYWQoY29kZWMsIERBNzIxMF9EQUlfQ0ZHMSk7CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWRhaV9jZmcxIHw9IERBNzIxMF9EQUlfV09SRF9TMTZfTEU7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWRhaV9jZmcxIHw9IERBNzIxMF9EQUlfV09SRF9TMjRfTEU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX0RBSV9DRkcxLCBkYWlfY2ZnMSk7CisKKwkvKiBGSVhNRQorCSAqCisJICogSXQgc3VwcG9ydCA0OEsgb25seSBub3cKKwkgKi8KKwlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKKwljYXNlIDQ4MDAwOgorCQlpZiAoU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyA9PSBzdWJzdHJlYW0tPnN0cmVhbSkgeworCQkJcmVnICA9IERBNzIxMF9EQUNfSFBGOworCQkJbWFzayA9IERBNzIxMF9EQUNfVk9JQ0VfRU47CisJCX0gZWxzZSB7CisJCQlyZWcgID0gREE3MjEwX0FEQ19IUEY7CisJCQltYXNrID0gREE3MjEwX0FEQ19WT0lDRV9FTjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsIG1hc2ssIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgREFJIG1vZGUgYW5kIEZvcm1hdAorICovCitzdGF0aWMgaW50IGRhNzIxMF9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwgdTMyIGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXUzMiBkYWlfY2ZnMTsKKwl1MzIgZGFpX2NmZzM7CisKKwlkYWlfY2ZnMSA9IDB4N2YgJiBkYTcyMTBfcmVhZChjb2RlYywgREE3MjEwX0RBSV9DRkcxKTsKKwlkYWlfY2ZnMyA9IDB4ZmMgJiBkYTcyMTBfcmVhZChjb2RlYywgREE3MjEwX0RBSV9DRkczKTsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWRhaV9jZmcxIHw9IERBNzIxMF9EQUlfTU9ERV9NQVNURVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEZJWE1FCisJICoKKwkgKiBJdCBzdXBwb3J0IEkyUyBvbmx5IG5vdworCSAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJZGFpX2NmZzMgfD0gREE3MjEwX0RBSV9GT1JNQVRfSTJTTU9ERTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRklYTUUKKwkgKgorCSAqIEl0IHN1cHBvcnQgNjRiaXQgZGF0YSB0cmFuc21pc3Npb24gb25seSBub3cKKwkgKi8KKwlkYWlfY2ZnMSB8PSBEQTcyMTBfREFJX0ZMRU5fNjRCSVQ7CisKKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9EQUlfQ0ZHMSwgZGFpX2NmZzEpOworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX0RBSV9DRkczLCBkYWlfY2ZnMyk7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBEQTcyMTBfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKKworLyogREFJIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGRhNzIxMF9kYWlfb3BzID0geworCS5zdGFydHVwCT0gZGE3MjEwX3N0YXJ0dXAsCisJLmh3X3BhcmFtcwk9IGRhNzIxMF9od19wYXJhbXMsCisJLnNldF9mbXQJPSBkYTcyMTBfc2V0X2RhaV9mbXQsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgZGE3MjEwX2RhaSA9IHsKKwkubmFtZSA9ICJEQTcyMTAgSUlTIiwKKwkuaWQgPSAwLAorCS8qIHBsYXliYWNrIGNhcGFiaWxpdGllcyAqLworCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwLAorCQkuZm9ybWF0cyA9IERBNzIxMF9GT1JNQVRTLAorCX0sCisJLyogY2FwdHVyZSBjYXBhYmlsaXRpZXMgKi8KKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAsCisJCS5mb3JtYXRzID0gREE3MjEwX0ZPUk1BVFMsCisJfSwKKwkub3BzID0gJmRhNzIxMF9kYWlfb3BzLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGRhNzIxMF9kYWkpOworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgREE3MjEwIGRyaXZlcgorICogcmVnaXN0ZXIgdGhlIG1peGVyIGFuZCBkc3AgaW50ZXJmYWNlcyB3aXRoIHRoZSBrZXJuZWwKKyAqLworc3RhdGljIGludCBkYTcyMTBfaW5pdChzdHJ1Y3QgZGE3MjEwX3ByaXYgKmRhNzIxMCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmZGE3MjEwLT5jb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkYTcyMTBfY29kZWMpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQW5vdGhlciBkYTcyMTAgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+cHJpdmF0ZV9kYXRhCT0gZGE3MjEwOworCWNvZGVjLT5uYW1lCQk9ICJEQTcyMTAiOworCWNvZGVjLT5vd25lcgkJPSBUSElTX01PRFVMRTsKKwljb2RlYy0+cmVhZAkJPSBkYTcyMTBfcmVhZDsKKwljb2RlYy0+d3JpdGUJCT0gZGE3MjEwX3dyaXRlOworCWNvZGVjLT5kYWkJCT0gJmRhNzIxMF9kYWk7CisJY29kZWMtPm51bV9kYWkJCT0gMTsKKwljb2RlYy0+aHdfd3JpdGUJCT0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZQk9IEFSUkFZX1NJWkUoZGE3MjEwX3JlZyk7CisJY29kZWMtPnJlZ19jYWNoZQk9IGttZW1kdXAoZGE3MjEwX3JlZywKKwkJCQkJICBzaXplb2YoZGE3MjEwX3JlZyksIEdGUF9LRVJORUwpOworCisJaWYgKCFjb2RlYy0+cmVnX2NhY2hlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhNzIxMF9kYWkuZGV2ID0gY29kZWMtPmRldjsKKwlkYTcyMTBfY29kZWMgPSBjb2RlYzsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIENPREVDOiAlZFxuIiwgcmV0KTsKKwkJZ290byBpbml0X2VycjsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmZGE3MjEwX2RhaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJZ290byBpbml0X2VycjsKKwl9CisKKwkvKiBGSVhNRQorCSAqCisJICogVGhpcyBkcml2ZXIgdXNlIGZpeGVkIHZhbHVlIGhlcmUKKwkgKi8KKworCS8qCisJICogQURDIHNldHRpbmdzCisJICovCisKKwkvKiBFbmFibGUgTGVmdCAmIFJpZ2h0IE1JQyBQR0EgYW5kIE1pYyBCaWFzICovCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfTUlDX0wsIERBNzIxMF9NSUNfTF9FTiB8IERBNzIxMF9NSUNCSUFTX0VOKTsKKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9NSUNfUiwgREE3MjEwX01JQ19SX0VOKTsKKworCS8qIEVuYWJsZSBMZWZ0IGFuZCBSaWdodCBpbnB1dCBQR0EgKi8KKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9JTk1JWF9MLCBEQTcyMTBfSU5fTF9FTik7CisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfSU5NSVhfUiwgREE3MjEwX0lOX1JfRU4pOworCisJLyogRW5hYmxlIExlZnQgYW5kIFJpZ2h0IEFEQyAqLworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX0FEQywgREE3MjEwX0FEQ19MX0VOIHwgREE3MjEwX0FEQ19SX0VOKTsKKworCS8qCisJICogREFDIHNldHRpbmdzCisJICovCisKKwkvKiBFbmFibGUgTGVmdCBhbmQgUmlnaHQgREFDICovCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfREFDX1NFTCwKKwkJICAgICBEQTcyMTBfREFDX0xfU1JDX0RBSV9MIHwgREE3MjEwX0RBQ19MX0VOIHwKKwkJICAgICBEQTcyMTBfREFDX1JfU1JDX0RBSV9SIHwgREE3MjEwX0RBQ19SX0VOKTsKKworCS8qIEVuYWJsZSBMZWZ0IGFuZCBSaWdodCBvdXQgUEdBICovCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfT1VUTUlYX0wsIERBNzIxMF9PVVRfTF9FTik7CisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfT1VUTUlYX1IsIERBNzIxMF9PVVRfUl9FTik7CisKKwkvKiBFbmFibGUgTGVmdCBhbmQgUmlnaHQgSGVhZFBob25lIFBHQSAqLworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX0hQX0NGRywKKwkJICAgICBEQTcyMTBfSFBfMkNBUF9NT0RFIHwgREE3MjEwX0hQX1NFTlNFX0VOIHwKKwkJICAgICBEQTcyMTBfSFBfTF9FTiB8IERBNzIxMF9IUF9NT0RFIHwgREE3MjEwX0hQX1JfRU4pOworCisJLyogRGlhYmxlIFBMTCBhbmQgYnlwYXNzIGl0ICovCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfUExMLCBEQTcyMTBfUExMX0ZTXzQ4MDAwKTsKKworCS8qIEJ5cGFzcyBQTEwgYW5kIHNldCBNQ0xLIGZyZXEgcmFuZyB0byAxMC0yME1IeiAqLworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX1BMTF9ESVYzLAorCQkgICAgIERBNzIxMF9NQ0xLX1JBTkdFXzEwXzIwX01IWiB8IERBNzIxMF9QTExfQllQKTsKKworCS8qIEFjdGl2YXRlIGFsbCBlbmFibGVkIHN1YnN5c3RlbSAqLworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX1NUQVJUVVAxLCBEQTcyMTBfU0NfTVNUX0VOKTsKKworCXJldHVybiByZXQ7CisKK2luaXRfZXJyOgorCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOworCWNvZGVjLT5yZWdfY2FjaGUgPSBOVUxMOworCisJcmV0dXJuIHJldDsKKworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorc3RhdGljIGludCBfX2RldmluaXQgZGE3MjEwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJICAgCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZGE3MjEwX3ByaXYgKmRhNzIxMDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldDsKKworCWRhNzIxMCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYTcyMTBfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghZGE3MjEwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJmRhNzIxMC0+Y29kZWM7CisJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGRhNzIxMCk7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKworCXJldCA9IGRhNzIxMF9pbml0KGRhNzIxMCk7CisJaWYgKHJldCA8IDApCisJCXByX2VycigiRmFpbGVkIHRvIGluaXRpYWxpc2UgZGE3MjEwIGF1ZGlvIGNvZGVjXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRhNzIxMF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGRhNzIxMF9wcml2ICpkYTcyMTAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmRhNzIxMF9kYWkpOworCWtmcmVlKGRhNzIxMC0+Y29kZWMucmVnX2NhY2hlKTsKKwlrZnJlZShkYTcyMTApOworCWRhNzIxMF9jb2RlYyA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGRhNzIxMF9pMmNfaWRbXSA9IHsKKwl7ICJkYTcyMTAiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGRhNzIxMF9pMmNfaWQpOworCisvKiBJMkMgY29kZWMgY29udHJvbCBsYXllciAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRhNzIxMF9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIkRBNzIxMCBJMkMgQ29kZWMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IGRhNzIxMF9pMmNfcHJvYmUsCisJLnJlbW92ZSA9ICBfX2RldmV4aXRfcChkYTcyMTBfaTJjX3JlbW92ZSksCisJLmlkX3RhYmxlID0gZGE3MjEwX2kyY19pZCwKK307CisjZW5kaWYKKworc3RhdGljIGludCBkYTcyMTBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0OworCisJaWYgKCFkYTcyMTBfY29kZWMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29kZWMgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGRhNzIxMF9jb2RlYzsKKwljb2RlYyA9IGRhNzIxMF9jb2RlYzsKKworCS8qIFJlZ2lzdGVyIHBjbXMgKi8KKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHBjbV9lcnI7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiREE3MjEwIEF1ZGlvIENvZGVjICVzXG4iLCBEQTcyMTBfVkVSU0lPTik7CisKK3BjbV9lcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkYTcyMTBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9kYTcyMTAgPSB7CisJLnByb2JlID0JZGE3MjEwX3Byb2JlLAorCS5yZW1vdmUgPQlkYTcyMTBfcmVtb3ZlLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfZGE3MjEwKTsKKworc3RhdGljIGludCBfX2luaXQgZGE3MjEwX21vZGluaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJmRhNzIxMF9pMmNfZHJpdmVyKTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdChkYTcyMTBfbW9kaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkYTcyMTBfZXhpdCh2b2lkKQoreworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2RyaXZlcigmZGE3MjEwX2kyY19kcml2ZXIpOworI2VuZGlmCit9Cittb2R1bGVfZXhpdChkYTcyMTBfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBEQTcyMTAgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJEYXZpZCBDaGVuLCBLdW5pbm9yaSBNb3JpbW90byIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9kYTcyMTAuaCBiL3NvdW5kL3NvYy9jb2RlY3MvZGE3MjEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkwZDYyMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvZGE3MjEwLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIGRhNzIxMC5oICAtLSAgYXVkaW8gZHJpdmVyIGZvciBkYTcyMTAKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIFdyaXR0ZW4gYnkgRGF2aWQgQ2hlbiA8RGFqdW4uY2hlbkBkaWFzZW1pLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIENsZWFudXBzIGJ5IEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9EQTcyMTBfSAorI2RlZmluZSBfREE3MjEwX0gKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBkYTcyMTBfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X2RhNzIxMDsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYwppbmRleCBhOWRjNWZiLi5kYTU4OWQ4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCkBAIC02MjcsNyArNjI3LDcgQEAKIAl1MTYgcmVnOwogCiAJLyogU3luYyByZWdfY2FjaGUgd2l0aCB0aGUgaGFyZHdhcmUgKi8KLQlmb3IgKHJlZyA9IDA7IHJlZyA8IFRMVjMyMEFJQzIzX1JFU0VUOyByZWcrKykgeworCWZvciAocmVnID0gMDsgcmVnIDw9IFRMVjMyMEFJQzIzX0FDVElWRTsgcmVnKyspIHsKIAkJdTE2IHZhbCA9IHRsdjMyMGFpYzIzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCByZWcpOwogCQl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgcmVnLCB2YWwpOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYwppbmRleCAyYjRkYzJiLi5lNGI5NDZhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCkBAIC03NjUsOSArNzY1LDEwIEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgYWljM3hfcHJpdiAqYWljM3ggPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCWludCBjb2RlY19jbGsgPSAwLCBieXBhc3NfcGxsID0gMCwgZnNyZWYsIGxhc3RfY2xrID0gMDsKLQl1OCBkYXRhLCByLCBwLCBwbGxfcSwgcGxsX3AgPSAxLCBwbGxfciA9IDEsIHBsbF9qID0gMTsKLQl1MTYgcGxsX2QgPSAxOworCXU4IGRhdGEsIGosIHIsIHAsIHBsbF9xLCBwbGxfcCA9IDEsIHBsbF9yID0gMSwgcGxsX2ogPSAxOworCXUxNiBkLCBwbGxfZCA9IDE7CiAJdTggcmVnOworCWludCBjbGs7CiAKIAkvKiBzZWxlY3QgZGF0YSB3b3JkIGxlbmd0aCAqLwogCWRhdGEgPQpAQCAtODMzLDQ4ICs4MzQsNzAgQEAKIAlpZiAoYnlwYXNzX3BsbCkKIAkJcmV0dXJuIDA7CiAKLQkvKiBVc2UgUExMCi0JICogZmluZCBhbiBhcHJvcHJpYXRlIHNldHVwIGZvciBqLCBkLCByIGFuZCBwIGJ5IGl0ZXJhdGluZyBvdmVyCi0JICogcCBhbmQgciAtIGogYW5kIGQgYXJlIGNhbGN1bGF0ZWQgZm9yIGVhY2ggZnJhY3Rpb24uCi0JICogVXAgdG8gMTI4IHZhbHVlcyBhcmUgcHJvYmVkLCB0aGUgY2xvc2VzdCBvbmUgd2lucyB0aGUgZ2FtZS4KKwkvKiBVc2UgUExMLCBjb21wdXRlIGFwcm9wcmlhdGUgc2V0dXAgZm9yIGosIGQsIHIgYW5kIHAsIHRoZSBjbG9zZXN0CisJICogb25lIHdpbnMgdGhlIGdhbWUuIFRyeSB3aXRoIGQ9PTAgZmlyc3QsIG5leHQgd2l0aCBkIT0wLgorCSAqIENvbnN0cmFpbnRzIGZvciBqIGFyZSBhY2NvcmRpbmcgdG8gdGhlIGRhdGFzaGVldC4KIAkgKiBUaGUgc3lzY2xrIGlzIGRpdmlkZWQgYnkgMTAwMCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzLgogCSAqLworCiAJY29kZWNfY2xrID0gKDIwNDggKiBmc3JlZikgLyAoYWljM3gtPnN5c2NsayAvIDEwMDApOwogCiAJZm9yIChyID0gMTsgciA8PSAxNjsgcisrKQogCQlmb3IgKHAgPSAxOyBwIDw9IDg7IHArKykgewotCQkJaW50IGNsaywgdG1wID0gKGNvZGVjX2NsayAqIHBsbF9yICogMTApIC8gcGxsX3A7Ci0JCQl1OCBqID0gdG1wIC8gMTAwMDA7Ci0JCQl1MTYgZCA9IHRtcCAlIDEwMDAwOworCQkJZm9yIChqID0gNDsgaiA8PSA1NTsgaisrKSB7CisJCQkJLyogVGhpcyBpcyBhY3R1YWxseSAxMDAwKigoaisoZC8xMDAwMCkpKnIpL3AKKwkJCQkgKiBUaGUgdGVybSBoYWQgdG8gYmUgY29udmVydGVkIHRvIGdldAorCQkJCSAqIHJpZCBvZiB0aGUgZGl2aXNpb24gYnkgMTAwMDA7IGQgPSAwIGhlcmUKKwkJCQkgKi8KKwkJCQlpbnQgdG1wX2NsayA9ICgxMDAwICogaiAqIHIpIC8gcDsKIAotCQkJaWYgKGogPiA2MykKLQkJCQljb250aW51ZTsKKwkJCQkvKiBDaGVjayB3aGV0aGVyIHRoaXMgdmFsdWVzIGdldCBjbG9zZXIgdGhhbgorCQkJCSAqIHRoZSBiZXN0IG9uZXMgd2UgaGFkIGJlZm9yZQorCQkJCSAqLworCQkJCWlmIChhYnMoY29kZWNfY2xrIC0gdG1wX2NsaykgPAorCQkJCQlhYnMoY29kZWNfY2xrIC0gbGFzdF9jbGspKSB7CisJCQkJCXBsbF9qID0gajsgcGxsX2QgPSAwOworCQkJCQlwbGxfciA9IHI7IHBsbF9wID0gcDsKKwkJCQkJbGFzdF9jbGsgPSB0bXBfY2xrOworCQkJCX0KIAotCQkJaWYgKGQgIT0gMCAmJiBhaWMzeC0+c3lzY2xrIDwgMTAwMDAwMDApCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIFRoaXMgaXMgYWN0dWFsbHkgMTAwMCAqICgoaiArIChkLzEwMDAwKSkgKiByKSAvIHAKLQkJCSAqIFRoZSB0ZXJtIGhhZCB0byBiZSBjb252ZXJ0ZWQgdG8gZ2V0IHJpZCBvZiB0aGUKLQkJCSAqIGRpdmlzaW9uIGJ5IDEwMDAwICovCi0JCQljbGsgPSAoKDEwMDAwICogaiAqIHIpICsgKGQgKiByKSkgLyAoMTAgKiBwKTsKLQotCQkJLyogY2hlY2sgd2hldGhlciB0aGlzIHZhbHVlcyBnZXQgY2xvc2VyIHRoYW4gdGhlIGJlc3QKLQkJCSAqIG9uZXMgd2UgaGFkIGJlZm9yZSAqLwotCQkJaWYgKGFicyhjb2RlY19jbGsgLSBjbGspIDwgYWJzKGNvZGVjX2NsayAtIGxhc3RfY2xrKSkgewotCQkJCXBsbF9qID0gajsgcGxsX2QgPSBkOyBwbGxfciA9IHI7IHBsbF9wID0gcDsKLQkJCQlsYXN0X2NsayA9IGNsazsKKwkJCQkvKiBFYXJseSBleGl0IGZvciBleGFjdCBtYXRjaGVzICovCisJCQkJaWYgKHRtcF9jbGsgPT0gY29kZWNfY2xrKQorCQkJCQlnb3RvIGZvdW5kOwogCQkJfQotCi0JCQkvKiBFYXJseSBleGl0IGZvciBleGFjdCBtYXRjaGVzICovCi0JCQlpZiAoY2xrID09IGNvZGVjX2NsaykKLQkJCQlicmVhazsKIAkJfQogCisJLyogdHJ5IHdpdGggZCAhPSAwICovCisJZm9yIChwID0gMTsgcCA8PSA4OyBwKyspIHsKKwkJaiA9IGNvZGVjX2NsayAqIHAgLyAxMDAwOworCisJCWlmIChqIDwgNCB8fCBqID4gMTEpCisJCQljb250aW51ZTsKKworCQkvKiBkbyBub3QgdXNlIGNvZGVjX2NsayBoZXJlIHNpbmNlIHdlJ2QgbG9vc2UgcHJlY2lzaW9uICovCisJCWQgPSAoKDIwNDggKiBwICogZnNyZWYpIC0gaiAqIGFpYzN4LT5zeXNjbGspCisJCQkqIDEwMCAvIChhaWMzeC0+c3lzY2xrLzEwMCk7CisKKwkJY2xrID0gKDEwMDAwICogaiArIGQpIC8gKDEwICogcCk7CisKKwkJLyogY2hlY2sgd2hldGhlciB0aGlzIHZhbHVlcyBnZXQgY2xvc2VyIHRoYW4gdGhlIGJlc3QKKwkJICogb25lcyB3ZSBoYWQgYmVmb3JlICovCisJCWlmIChhYnMoY29kZWNfY2xrIC0gY2xrKSA8IGFicyhjb2RlY19jbGsgLSBsYXN0X2NsaykpIHsKKwkJCXBsbF9qID0gajsgcGxsX2QgPSBkOyBwbGxfciA9IDE7IHBsbF9wID0gcDsKKwkJCWxhc3RfY2xrID0gY2xrOworCQl9CisKKwkJLyogRWFybHkgZXhpdCBmb3IgZXhhY3QgbWF0Y2hlcyAqLworCQlpZiAoY2xrID09IGNvZGVjX2NsaykKKwkJCWdvdG8gZm91bmQ7CisJfQorCiAJaWYgKGxhc3RfY2xrID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiB1bmFibGUgdG8gc2V0dXAgUExMXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorZm91bmQ6CiAJZGF0YSA9IGFpYzN4X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBBSUMzWF9QTExfUFJPR0FfUkVHKTsKIAlhaWMzeF93cml0ZShjb2RlYywgQUlDM1hfUExMX1BST0dBX1JFRywgZGF0YSB8IChwbGxfcCA8PCBQTExQX1NISUZUKSk7CiAJYWljM3hfd3JpdGUoY29kZWMsIEFJQzNYX09WUkZfU1RBVFVTX0FORF9QTExSX1JFRywgcGxsX3IgPDwgUExMUl9TSElGVCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmMKaW5kZXggOWM4OTAzZC4uZjlmMzY3ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgpAQCAtNTgsMTEgKzU5LDI2IEBACiAJREFDMzNfRkxVU0gsCiB9OwogCitlbnVtIGRhYzMzX2ZpZm9fbW9kZXMgeworCURBQzMzX0ZJRk9fQllQQVNTID0gMCwKKwlEQUMzM19GSUZPX01PREUxLAorCURBQzMzX0ZJRk9fTU9ERTcsCisJREFDMzNfRklGT19MQVNUX01PREUsCit9OworCisjZGVmaW5lIERBQzMzX05VTV9TVVBQTElFUyAzCitzdGF0aWMgY29uc3QgY2hhciAqZGFjMzNfc3VwcGx5X25hbWVzW0RBQzMzX05VTV9TVVBQTElFU10gPSB7CisJIkFWREQiLAorCSJEVkREIiwKKwkiSU9WREQiLAorfTsKKwogc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgewogCXN0cnVjdCBtdXRleCBtdXRleDsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZGFjMzNfd3E7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbREFDMzNfTlVNX1NVUFBMSUVTXTsKIAlpbnQgcG93ZXJfZ3BpbzsKIAlpbnQgY2hpcF9wb3dlcjsKIAlpbnQgaXJxOwpAQCAtNzMsOCArODksOSBAQAogCQkJCQkgKiB0aGlzICovCiAJdW5zaWduZWQgaW50IG5zYW1wbGVfbWF4OwkvKiBuc2FtcGxlIHNob3VsZCBub3QgYmUgaGlnaGVyIHRoYW4KIAkJCQkJICogdGhpcyAqLwotCXVuc2lnbmVkIGludCBuc2FtcGxlX3N3aXRjaDsJLyogVXNlIEZJRk8gb3IgYnlwYXNzIEZJRk8gc3dpdGNoICovCisJZW51bSBkYWMzM19maWZvX21vZGVzIGZpZm9fbW9kZTsvKiBGSUZPIG1vZGUgc2VsZWN0aW9uICovCiAJdW5zaWduZWQgaW50IG5zYW1wbGU7CQkvKiBidXJzdCByZWFkIGFtb3VudCBmcm9tIGhvc3QgKi8KKwl1OCBidXJzdF9iY2xrZGl2OwkJLyogQkNMSyBkaXZpZGVyIHZhbHVlIGluIGJ1cnN0IG1vZGUgKi8KIAogCWVudW0gZGFjMzNfc3RhdGUgc3RhdGU7CiB9OwpAQCAtMjk3LDI4ICszMTQsNDkgQEAKIAlkYWMzM193cml0ZShjb2RlYywgREFDMzNfUFdSX0NUUkwsIHJlZyk7CiB9CiAKLXN0YXRpYyB2b2lkIGRhYzMzX2hhcmRfcG93ZXIoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgcG93ZXIpCitzdGF0aWMgaW50IGRhYzMzX2hhcmRfcG93ZXIoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgcG93ZXIpCiB7CiAJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmZGFjMzMtPm11dGV4KTsKIAlpZiAocG93ZXIpIHsKLQkJaWYgKGRhYzMzLT5wb3dlcl9ncGlvID49IDApIHsKLQkJCWdwaW9fc2V0X3ZhbHVlKGRhYzMzLT5wb3dlcl9ncGlvLCAxKTsKLQkJCWRhYzMzLT5jaGlwX3Bvd2VyID0gMTsKLQkJCS8qIFJlc3RvcmUgcmVnaXN0ZXJzICovCi0JCQlkYWMzM19yZXN0b3JlX3JlZ3MoY29kZWMpOworCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShkYWMzMy0+c3VwcGxpZXMpLAorCQkJCQkgIGRhYzMzLT5zdXBwbGllcyk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJCQlnb3RvIGV4aXQ7CiAJCX0KKworCQlpZiAoZGFjMzMtPnBvd2VyX2dwaW8gPj0gMCkKKwkJCWdwaW9fc2V0X3ZhbHVlKGRhYzMzLT5wb3dlcl9ncGlvLCAxKTsKKworCQlkYWMzMy0+Y2hpcF9wb3dlciA9IDE7CisKKwkJLyogUmVzdG9yZSByZWdpc3RlcnMgKi8KKwkJZGFjMzNfcmVzdG9yZV9yZWdzKGNvZGVjKTsKKwogCQlkYWMzM19zb2Z0X3Bvd2VyKGNvZGVjLCAxKTsKIAl9IGVsc2UgewogCQlkYWMzM19zb2Z0X3Bvd2VyKGNvZGVjLCAwKTsKLQkJaWYgKGRhYzMzLT5wb3dlcl9ncGlvID49IDApIHsKKwkJaWYgKGRhYzMzLT5wb3dlcl9ncGlvID49IDApCiAJCQlncGlvX3NldF92YWx1ZShkYWMzMy0+cG93ZXJfZ3BpbywgMCk7Ci0JCQlkYWMzMy0+Y2hpcF9wb3dlciA9IDA7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZkYWMzMy0+bXV0ZXgpOwogCisJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShkYWMzMy0+c3VwcGxpZXMpLAorCQkJCQkgICAgIGRhYzMzLT5zdXBwbGllcyk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gZGlzYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlkYWMzMy0+Y2hpcF9wb3dlciA9IDA7CisJfQorCitleGl0OgorCW11dGV4X3VubG9jaygmZGFjMzMtPm11dGV4KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRhYzMzX2dldF9uc2FtcGxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLApAQCAtMzUxLDM5ICszODksNDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGRhYzMzX2dldF9uc2FtcGxlX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKK3N0YXRpYyBpbnQgZGFjMzNfZ2V0X2ZpZm9fbW9kZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAotCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gZGFjMzMtPm5zYW1wbGVfc3dpdGNoOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gZGFjMzMtPmZpZm9fbW9kZTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRhYzMzX3NldF9uc2FtcGxlX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKK3N0YXRpYyBpbnQgZGFjMzNfc2V0X2ZpZm9fbW9kZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChkYWMzMy0+bnNhbXBsZV9zd2l0Y2ggPT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCisJaWYgKGRhYzMzLT5maWZvX21vZGUgPT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCiAJCXJldHVybiAwOwogCS8qIERvIG5vdCBhbGxvdyBjaGFuZ2VzIHdoaWxlIHN0cmVhbSBpcyBydW5uaW5nKi8KIAlpZiAoY29kZWMtPmFjdGl2ZSkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA8IDAgfHwKLQkgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPiAxKQorCSAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA+PSBEQUMzM19GSUZPX0xBU1RfTU9ERSkKIAkJcmV0ID0gLUVJTlZBTDsKIAllbHNlCi0JCWRhYzMzLT5uc2FtcGxlX3N3aXRjaCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCQlkYWMzMy0+Zmlmb19tb2RlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CiAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBDb2RlYyBvcGVyYXRpb24gbW9kZXMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkYWMzM19maWZvX21vZGVfdGV4dHNbXSA9IHsKKwkiQnlwYXNzIiwgIk1vZGUgMSIsICJNb2RlIDciCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhYzMzX2ZpZm9fbW9kZV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEVfRVhUKEFSUkFZX1NJWkUoZGFjMzNfZmlmb19tb2RlX3RleHRzKSwKKwkJCSAgICBkYWMzM19maWZvX21vZGVfdGV4dHMpOworCiAvKgogICogREFDTC9SIGRpZ2l0YWwgdm9sdW1lIGNvbnRyb2w6CiAgKiBmcm9tIDAgZEIgdG8gLTYzLjUgaW4gMC41IGRCIHN0ZXBzCkBAIC00MDYsOCArNDUzLDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYWMzM19uc2FtcGxlX3NuZF9jb250cm9sc1tdID0gewogCVNPQ19TSU5HTEVfRVhUKCJuU2FtcGxlIiwgMCwgMCwgNTkwMCwgMCwKIAkJIGRhYzMzX2dldF9uc2FtcGxlLCBkYWMzM19zZXRfbnNhbXBsZSksCi0JU09DX1NJTkdMRV9FWFQoIm5TYW1wbGUgU3dpdGNoIiwgMCwgMCwgMSwgMCwKLQkJIGRhYzMzX2dldF9uc2FtcGxlX3N3aXRjaCwgZGFjMzNfc2V0X25zYW1wbGVfc3dpdGNoKSwKKwlTT0NfRU5VTV9FWFQoIkZJRk8gTW9kZSIsIGRhYzMzX2ZpZm9fbW9kZV9lbnVtLAorCQkgZGFjMzNfZ2V0X2ZpZm9fbW9kZSwgZGFjMzNfc2V0X2ZpZm9fbW9kZSksCiB9OwogCiAvKiBBbmFsb2cgYnlwYXNzICovCkBAIC00NjksNiArNTE2LDggQEAKIHN0YXRpYyBpbnQgZGFjMzNfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogeworCWludCByZXQ7CisKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046CiAJCWRhYzMzX3NvZnRfcG93ZXIoY29kZWMsIDEpOwpAQCAtNDc2LDEyICs1MjUsMTkgQEAKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikKLQkJCWRhYzMzX2hhcmRfcG93ZXIoY29kZWMsIDEpOworCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJcmV0ID0gZGFjMzNfaGFyZF9wb3dlcihjb2RlYywgMSk7CisJCQlpZiAocmV0ICE9IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCiAJCWRhYzMzX3NvZnRfcG93ZXIoY29kZWMsIDApOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19PRkY6Ci0JCWRhYzMzX2hhcmRfcG93ZXIoY29kZWMsIDApOworCQlyZXQgPSBkYWMzM19oYXJkX3Bvd2VyKGNvZGVjLCAwKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwogCQlicmVhazsKIAl9CiAJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKQEAgLTQ4OSw2ICs1NDUsNTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGRhYzMzX3ByZWZpbGxfaGFuZGxlcihzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCisJY29kZWMgPSAmZGFjMzMtPmNvZGVjOworCisJc3dpdGNoIChkYWMzMy0+Zmlmb19tb2RlKSB7CisJY2FzZSBEQUMzM19GSUZPX01PREUxOgorCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19OU0FNUExFX01TQiwKKwkJCQlEQUMzM19USFJSRUcoZGFjMzMtPm5zYW1wbGUpKTsKKwkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfUFJFRklMTF9NU0IsCisJCQkJREFDMzNfVEhSUkVHKGRhYzMzLT5hbGFybV90aHJlc2hvbGQpKTsKKwkJYnJlYWs7CisJY2FzZSBEQUMzM19GSUZPX01PREU3OgorCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19QUkVGSUxMX01TQiwKKwkJCQlEQUMzM19USFJSRUcoMTApKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oY29kZWMtPmRldiwgIlVuaGFuZGxlZCBGSUZPIG1vZGU6ICVkXG4iLAorCQkJCQkJCWRhYzMzLT5maWZvX21vZGUpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYWMzM19wbGF5YmFja19oYW5kbGVyKHN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisKKwljb2RlYyA9ICZkYWMzMy0+Y29kZWM7CisKKwlzd2l0Y2ggKGRhYzMzLT5maWZvX21vZGUpIHsKKwljYXNlIERBQzMzX0ZJRk9fTU9ERTE6CisJCWRhYzMzX3dyaXRlMTYoY29kZWMsIERBQzMzX05TQU1QTEVfTVNCLAorCQkJCURBQzMzX1RIUlJFRyhkYWMzMy0+bnNhbXBsZSkpOworCQlicmVhazsKKwljYXNlIERBQzMzX0ZJRk9fTU9ERTc6CisJCS8qIEF0IHRoZSBtb21lbnQgd2UgYXJlIG5vdCB1c2luZyBpbnRlcnJ1cHRzIGluIG1vZGU3ICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl93YXJuKGNvZGVjLT5kZXYsICJVbmhhbmRsZWQgRklGTyBtb2RlOiAlZFxuIiwKKwkJCQkJCQlkYWMzMy0+Zmlmb19tb2RlKTsKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgdm9pZCBkYWMzM193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CkBAIC01MDIsMTQgKzYwMywxMCBAQAogCXN3aXRjaCAoZGFjMzMtPnN0YXRlKSB7CiAJY2FzZSBEQUMzM19QUkVGSUxMOgogCQlkYWMzMy0+c3RhdGUgPSBEQUMzM19QTEFZQkFDSzsKLQkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfTlNBTVBMRV9NU0IsCi0JCQkJREFDMzNfVEhSUkVHKGRhYzMzLT5uc2FtcGxlKSk7Ci0JCWRhYzMzX3dyaXRlMTYoY29kZWMsIERBQzMzX1BSRUZJTExfTVNCLAotCQkJCURBQzMzX1RIUlJFRyhkYWMzMy0+YWxhcm1fdGhyZXNob2xkKSk7CisJCWRhYzMzX3ByZWZpbGxfaGFuZGxlcihkYWMzMyk7CiAJCWJyZWFrOwogCWNhc2UgREFDMzNfUExBWUJBQ0s6Ci0JCWRhYzMzX3dyaXRlMTYoY29kZWMsIERBQzMzX05TQU1QTEVfTVNCLAotCQkJCURBQzMzX1RIUlJFRyhkYWMzMy0+bnNhbXBsZSkpOworCQlkYWMzM19wbGF5YmFja19oYW5kbGVyKGRhYzMzKTsKIAkJYnJlYWs7CiAJY2FzZSBEQUMzM19JRExFOgogCQlicmVhazsKQEAgLTU0Nyw3ICs2NDQsNyBAQAogCXVuc2lnbmVkIGludCBwd3JfY3RybDsKIAogCS8qIFN0b3AgcGVuZGluZyB3b3JrcXVldWUgKi8KLQlpZiAoZGFjMzMtPm5zYW1wbGVfc3dpdGNoKQorCWlmIChkYWMzMy0+Zmlmb19tb2RlKQogCQljYW5jZWxfd29ya19zeW5jKCZkYWMzMy0+d29yayk7CiAKIAltdXRleF9sb2NrKCZkYWMzMy0+bXV0ZXgpOwpAQCAtNjAzLDcgKzcwMCw3IEBACiB9CiAKICNkZWZpbmUgQ0FMQ19PU0NTRVQocmF0ZSwgcmVmY2xrKSAoIFwKLQkoKCgocmF0ZSAqIDEwMDAwKSAvIHJlZmNsaykgKiA0MDk2KSArIDUwMDApIC8gMTAwMDApCisJKCgoKHJhdGUgKiAxMDAwMCkgLyByZWZjbGspICogNDA5NikgKyA3MDAwKSAvIDEwMDAwKQogI2RlZmluZSBDQUxDX1JBVElPU0VUKHJhdGUsIHJlZmNsaykgKCBcCiAJKCgoKHJlZmNsayAgKiAxMDAwMDApIC8gcmF0ZSkgKiAxNjM4NCkgKyA1MDAwMCkgLyAxMDAwMDApCiAKQEAgLTYxOSw3ICs3MTYsNyBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgb3Njc2V0LCByYXRpb3NldCwgcHdyX2N0cmwsIHJlZ190bXA7Ci0JdTggYWljdHJsX2EsIGZpZm9jdHJsX2E7CisJdTggYWljdHJsX2EsIGFpY3RybF9iLCBmaWZvY3RybF9hOwogCiAJc3dpdGNoIChzdWJzdHJlYW0tPnJ1bnRpbWUtPnJhdGUpIHsKIAljYXNlIDQ0MTAwOgpAQCAtNjM3LDcgKzczNCwxMCBAQAogCiAJYWljdHJsX2EgPSBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9BKTsKIAlhaWN0cmxfYSAmPSB+KERBQzMzX05DWUNMX01BU0sgfCBEQUMzM19XTEVOX01BU0spOworCS8qIFJlYWQgRklGTyBjb250cm9sIEEsIGFuZCBjbGVhciBGSUZPIGZsdXNoIGJpdCAqLwogCWZpZm9jdHJsX2EgPSBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNfRklGT19DVFJMX0EpOworCWZpZm9jdHJsX2EgJj0gfkRBQzMzX0ZJRk9GTFVTSDsKKwogCWZpZm9jdHJsX2EgJj0gfkRBQzMzX1dJRFRIOwogCXN3aXRjaCAoc3Vic3RyZWFtLT5ydW50aW1lLT5mb3JtYXQpIHsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgpAQCAtNjc1LDcgKzc3NSw4IEBACiAKIAlkYWMzM19vc2N3YWl0KGNvZGVjKTsKIAotCWlmIChkYWMzMy0+bnNhbXBsZV9zd2l0Y2gpIHsKKwlpZiAoZGFjMzMtPmZpZm9fbW9kZSkgeworCQkvKiBHZW5lcmljIGZvciBhbGwgRklGTyBtb2RlcyAqLwogCQkvKiA1MC01MSA6IEFTUkMgQ29udHJvbCByZWdpc3RlcnMgKi8KIAkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0FTUkNfQ1RSTF9BLCAoMSA8PCA0KSk7IC8qIGRpdj0yICovCiAJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19BU1JDX0NUUkxfQiwgMSk7IC8qID8/PyAqLwpAQCAtNjg1LDM4ICs3ODYsMTAxIEBACiAKIAkJLyogU2V0IGludGVycnVwdHMgdG8gaGlnaCBhY3RpdmUgKi8KIAkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0lOVFBfQ1RSTF9BLCBEQUMzM19JTlRQTV9BSElHSCk7Ci0KLQkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0ZJRk9fSVJRX01PREVfQiwKLQkJCSAgICBEQUMzM19BVE0oREFDMzNfRklGT19JUlFfTU9ERV9MRVZFTCkpOwotCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfRklGT19JUlFfTUFTSywgREFDMzNfTUFUKTsKIAl9IGVsc2UgeworCQkvKiBGSUZPIGJ5cGFzcyBtb2RlICovCiAJCS8qIDUwLTUxIDogQVNSQyBDb250cm9sIHJlZ2lzdGVycyAqLwogCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfQVNSQ19DVFJMX0EsIERBQzMzX1NSQ0JZUCk7CiAJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19BU1JDX0NUUkxfQiwgMCk7IC8qID8/PyAqLwogCX0KIAotCWlmIChkYWMzMy0+bnNhbXBsZV9zd2l0Y2gpCisJLyogSW50ZXJydXB0IGJlaGF2aW91ciBjb25maWd1cmF0aW9uICovCisJc3dpdGNoIChkYWMzMy0+Zmlmb19tb2RlKSB7CisJY2FzZSBEQUMzM19GSUZPX01PREUxOgorCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfRklGT19JUlFfTU9ERV9CLAorCQkJICAgIERBQzMzX0FUTShEQUMzM19GSUZPX0lSUV9NT0RFX0xFVkVMKSk7CisJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19GSUZPX0lSUV9NQVNLLCBEQUMzM19NQVQpOworCQlicmVhazsKKwljYXNlIERBQzMzX0ZJRk9fTU9ERTc6CisJCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0ZJRk9fSVJRX01BU0ssIDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBpbiBGSUZPIGJ5cGFzcyBtb2RlLCB0aGUgaW50ZXJydXB0cyBhcmUgbm90IHVzZWQgKi8KKwkJYnJlYWs7CisJfQorCisJYWljdHJsX2IgPSBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9CKTsKKworCXN3aXRjaCAoZGFjMzMtPmZpZm9fbW9kZSkgeworCWNhc2UgREFDMzNfRklGT19NT0RFMToKKwkJLyoKKwkJICogRm9yIG1vZGUxOgorCQkgKiBEaXNhYmxlIHRoZSBGSUZPIGJ5cGFzcyAoRW5hYmxlIHRoZSB1c2Ugb2YgRklGTykKKwkJICogU2VsZWN0IG5TYW1wbGUgbW9kZQorCQkgKiBCQ0xLIGlzIG9ubHkgcnVubmluZyB3aGVuIGRhdGEgaXMgbmVlZGVkIGJ5IERBQzMzCisJCSAqLwogCQlmaWZvY3RybF9hICY9IH5EQUMzM19GQllQQVM7Ci0JZWxzZQorCQlmaWZvY3RybF9hICY9IH5EQUMzM19GQVVUTzsKKwkJYWljdHJsX2IgJj0gfkRBQzMzX0JDTEtPTjsKKwkJYnJlYWs7CisJY2FzZSBEQUMzM19GSUZPX01PREU3OgorCQkvKgorCQkgKiBGb3IgbW9kZTE6CisJCSAqIERpc2FibGUgdGhlIEZJRk8gYnlwYXNzIChFbmFibGUgdGhlIHVzZSBvZiBGSUZPKQorCQkgKiBTZWxlY3QgVGhyZXNob2xkIG1vZGUKKwkJICogQkNMSyBpcyBvbmx5IHJ1bm5pbmcgd2hlbiBkYXRhIGlzIG5lZWRlZCBieSBEQUMzMworCQkgKi8KKwkJZmlmb2N0cmxfYSAmPSB+REFDMzNfRkJZUEFTOworCQlmaWZvY3RybF9hIHw9IERBQzMzX0ZBVVRPOworCQlhaWN0cmxfYiAmPSB+REFDMzNfQkNMS09OOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKgorCQkgKiBGb3IgRklGTyBieXBhc3MgbW9kZToKKwkJICogRW5hYmxlIHRoZSBGSUZPIGJ5cGFzcyAoRGlzYWJsZSB0aGUgRklGTyB1c2UpCisJCSAqIFNldCB0aGUgQkNMSyBhcyBjb250aW5vdXMKKwkJICovCiAJCWZpZm9jdHJsX2EgfD0gREFDMzNfRkJZUEFTOworCQlhaWN0cmxfYiB8PSBEQUMzM19CQ0xLT047CisJCWJyZWFrOworCX0KKwogCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19GSUZPX0NUUkxfQSwgZmlmb2N0cmxfYSk7Ci0KIAlkYWMzM193cml0ZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9BLCBhaWN0cmxfYSk7Ci0JcmVnX3RtcCA9IGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0IpOwotCWlmIChkYWMzMy0+bnNhbXBsZV9zd2l0Y2gpCi0JCXJlZ190bXAgJj0gfkRBQzMzX0JDTEtPTjsKKwlkYWMzM193cml0ZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9CLCBhaWN0cmxfYik7CisKKwkvKgorCSAqIEJDTEsgZGl2aWRlIHJhdGlvCisJICogMDogMS41CisJICogMTogMQorCSAqIDI6IDIKKwkgKiAuLi4KKwkgKiAyNTQ6IDI1NAorCSAqIDI1NTogMjU1CisJICovCisJaWYgKGRhYzMzLT5maWZvX21vZGUpCisJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0MsCisJCQkJCQkJZGFjMzMtPmJ1cnN0X2JjbGtkaXYpOwogCWVsc2UKLQkJcmVnX3RtcCB8PSBEQUMzM19CQ0xLT047Ci0JZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQiwgcmVnX3RtcCk7CisJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0MsIDMyKTsKIAotCWlmIChkYWMzMy0+bnNhbXBsZV9zd2l0Y2gpIHsKLQkJLyogMjA6IEJDTEsgZGl2aWRlIHJhdGlvICovCi0JCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0MsIDMpOwotCisJc3dpdGNoIChkYWMzMy0+Zmlmb19tb2RlKSB7CisJY2FzZSBEQUMzM19GSUZPX01PREUxOgogCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19BVEhSX01TQiwKIAkJCSAgICAgIERBQzMzX1RIUlJFRyhkYWMzMy0+YWxhcm1fdGhyZXNob2xkKSk7Ci0JfSBlbHNlIHsKLQkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQywgMzIpOworCQlicmVhazsKKwljYXNlIERBQzMzX0ZJRk9fTU9ERTc6CisJCS8qCisJCSAqIENvbmZpZ3VyZSB0aGUgdGhyZXNob2xkIGxldmVscywgYW5kIGxlYXZlIDEwIHNhbXBsZSBzcGFjZQorCQkgKiBhdCB0aGUgYm90dG9tLCBhbmQgYWxzbyBhdCB0aGUgdG9wIG9mIHRoZSBGSUZPCisJCSAqLworCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19VVEhSX01TQiwKKwkJCURBQzMzX1RIUlJFRyhEQUMzM19CVUZGRVJfU0laRV9TQU1QTEVTIC0gMTApKTsKKwkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfTFRIUl9NU0IsCisJCQlEQUMzM19USFJSRUcoMTApKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZkYWMzMy0+bXV0ZXgpOwpAQCAtNzg5LDcgKzk1Myw3IEBACiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6Ci0JCWlmIChkYWMzMy0+bnNhbXBsZV9zd2l0Y2gpIHsKKwkJaWYgKGRhYzMzLT5maWZvX21vZGUpIHsKIAkJCWRhYzMzLT5zdGF0ZSA9IERBQzMzX1BSRUZJTEw7CiAJCQlxdWV1ZV93b3JrKGRhYzMzLT5kYWMzM193cSwgJmRhYzMzLT53b3JrKTsKIAkJfQpAQCAtNzk3LDcgKzk2MSw3IEBACiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6Ci0JCWlmIChkYWMzMy0+bnNhbXBsZV9zd2l0Y2gpIHsKKwkJaWYgKGRhYzMzLT5maWZvX21vZGUpIHsKIAkJCWRhYzMzLT5zdGF0ZSA9IERBQzMzX0ZMVVNIOwogCQkJcXVldWVfd29yayhkYWMzMy0+ZGFjMzNfd3EsICZkYWMzMy0+d29yayk7CiAJCX0KQEAgLTg0Myw2ICsxMDA3LDcgQEAKIAkJCSAgICAgdW5zaWduZWQgaW50IGZtdCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJdTggYWljdHJsX2EsIGFpY3RybF9iOwogCiAJYWljdHJsX2EgPSBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9BKTsKQEAgLTg1NSw3ICsxMDIwLDExIEBACiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKIAkJLyogQ29kZWMgU2xhdmUgKi8KLQkJYWljdHJsX2EgJj0gfihEQUMzM19NU0JDTEsgfCBEQUMzM19NU1dDTEspOworCQlpZiAoZGFjMzMtPmZpZm9fbW9kZSkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRklGTyBtb2RlIHJlcXVpcmVzIG1hc3RlciBtb2RlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UKKwkJCWFpY3RybF9hICY9IH4oREFDMzNfTVNCQ0xLIHwgREFDMzNfTVNXQ0xLKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC05NTksNiArMTEyOCw5IEBACiAJLyogcG93ZXIgb24gZGV2aWNlICovCiAJZGFjMzNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAorCS8qIEJpYXMgbGV2ZWwgY29uZmlndXJhdGlvbiBoYXMgZW5hYmxlZCByZWd1bGF0b3IgYW4gZXh0cmEgdGltZSAqLworCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShkYWMzMy0+c3VwcGxpZXMpLCBkYWMzMy0+c3VwcGxpZXMpOworCiAJcmV0dXJuIDA7CiAKIHBjbV9lcnI6CkBAIC0xMDMzLDEzICsxMjA1LDEzIEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoZGFjMzNfZGFpKTsKIAotc3RhdGljIGludCBkYWMzM19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRhYzMzX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB0bHYzMjBkYWMzM19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzM7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCWludCByZXQgPSAwOworCWludCByZXQsIGk7CiAKIAlpZiAoY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiUGxhdGZvcm0gZGF0YSBub3Qgc2V0XG4iKTsKQEAgLTEwODAsMTAgKzEyNTIsMTEgQEAKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYWMzMyk7CiAKIAlkYWMzMy0+cG93ZXJfZ3BpbyA9IHBkYXRhLT5wb3dlcl9ncGlvOworCWRhYzMzLT5idXJzdF9iY2xrZGl2ID0gcGRhdGEtPmJ1cnN0X2JjbGtkaXY7CiAJZGFjMzMtPmlycSA9IGNsaWVudC0+aXJxOwogCWRhYzMzLT5uc2FtcGxlID0gTlNBTVBMRV9NQVg7CiAJLyogRGlzYWJsZSBGSUZPIHVzZSBieSBkZWZhdWx0ICovCi0JZGFjMzMtPm5zYW1wbGVfc3dpdGNoID0gMDsKKwlkYWMzMy0+Zmlmb19tb2RlID0gREFDMzNfRklGT19CWVBBU1M7CiAKIAl0bHYzMjBkYWMzM19jb2RlYyA9IGNvZGVjOwogCkBAIC0xMTMwLDYgKzEzMDMsMjQgQEAKIAkJfQogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhYzMzLT5zdXBwbGllcyk7IGkrKykKKwkJZGFjMzMtPnN1cHBsaWVzW2ldLnN1cHBseSA9IGRhYzMzX3N1cHBseV9uYW1lc1tpXTsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChjb2RlYy0+ZGV2LCBBUlJBWV9TSVpFKGRhYzMzLT5zdXBwbGllcyksCisJCQkJIGRhYzMzLT5zdXBwbGllcyk7CisKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3Qgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9nZXQ7CisJfQorCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUoZGFjMzMtPnN1cHBsaWVzKSwKKwkJCQkgICAgZGFjMzMtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKQEAgLTExNDksNiArMTM0MCwxMCBAQAogCXJldHVybiByZXQ7CiAKIGVycm9yX2NvZGVjOgorCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShkYWMzMy0+c3VwcGxpZXMpLCBkYWMzMy0+c3VwcGxpZXMpOworZXJyX2VuYWJsZToKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUoZGFjMzMtPnN1cHBsaWVzKSwgZGFjMzMtPnN1cHBsaWVzKTsKK2Vycl9nZXQ6CiAJaWYgKGRhYzMzLT5pcnEgPj0gMCkgewogCQlmcmVlX2lycShkYWMzMy0+aXJxLCAmZGFjMzMtPmNvZGVjKTsKIAkJZGVzdHJveV93b3JrcXVldWUoZGFjMzMtPmRhYzMzX3dxKTsKQEAgLTExNjUsNyArMTM2MCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBkYWMzM19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBkYWMzM19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzOwogCkBAIC0xMTc3LDYgKzEzNzIsOCBAQAogCWlmIChkYWMzMy0+aXJxID49IDApCiAJCWZyZWVfaXJxKGRhYzMzLT5pcnEsICZkYWMzMy0+Y29kZWMpOwogCisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKGRhYzMzLT5zdXBwbGllcyksIGRhYzMzLT5zdXBwbGllcyk7CisKIAlkZXN0cm95X3dvcmtxdWV1ZShkYWMzMy0+ZGFjMzNfd3EpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmRhYzMzX2RhaSk7CiAJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZkYWMzMy0+Y29kZWMpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90cGE2MTMwYTIuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdHBhNjEzMGEyLmMKaW5kZXggNmI2NTBjMS4uOTU4ZDQ5YyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90cGE2MTMwYTIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RwYTYxMzBhMi5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPHNvdW5kL3RwYTYxMzBhMi1wbGF0Lmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KQEAgLTM0LDEwICszNSwyMiBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKnRwYTYxMzBhMl9jbGllbnQ7CiAKKyNkZWZpbmUgVFBBNjEzMEEyX05VTV9TVVBQTElFUyAyCitzdGF0aWMgY29uc3QgY2hhciAqdHBhNjEzMGEyX3N1cHBseV9uYW1lc1tUUEE2MTMwQTJfTlVNX1NVUFBMSUVTXSA9IHsKKwkiQ1BWU1MiLAorCSJWZGQiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnRwYTYxNDBhMl9zdXBwbHlfbmFtZXNbVFBBNjEzMEEyX05VTV9TVVBQTElFU10gPSB7CisJIkhQVmRkIiwKKwkiQVZkZCIsCit9OworCiAvKiBUaGlzIHN0cnVjdCBpcyB1c2VkIHRvIHNhdmUgdGhlIGNvbnRleHQgKi8KIHN0cnVjdCB0cGE2MTMwYTJfZGF0YSB7CiAJc3RydWN0IG11dGV4IG11dGV4OwogCXVuc2lnbmVkIGNoYXIgcmVnc1tUUEE2MTMwQTJfQ0FDSEVSRUdOVU1dOworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW1RQQTYxMzBBMl9OVU1fU1VQUExJRVNdOwogCWludCBwb3dlcl9ncGlvOwogCXVuc2lnbmVkIGNoYXIgcG93ZXJfc3RhdGU7CiB9OwpAQCAtMTA2LDEwICsxMTksMTEgQEAKIAkJdHBhNjEzMGEyX2kyY193cml0ZShpLCBkYXRhLT5yZWdzW2ldKTsKIH0KIAotc3RhdGljIHZvaWQgdHBhNjEzMGEyX3Bvd2VyKGludCBwb3dlcikKK3N0YXRpYyBpbnQgdHBhNjEzMGEyX3Bvd2VyKGludCBwb3dlcikKIHsKIAlzdHJ1Y3QJdHBhNjEzMGEyX2RhdGEgKmRhdGE7CiAJdTgJdmFsOworCWludAlyZXQ7CiAKIAlCVUdfT04odHBhNjEzMGEyX2NsaWVudCA9PSBOVUxMKTsKIAlkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKHRwYTYxMzBhMl9jbGllbnQpOwpAQCAtMTE3LDExICsxMzEsMjAgQEAKIAltdXRleF9sb2NrKCZkYXRhLT5tdXRleCk7CiAJaWYgKHBvd2VyKSB7CiAJCS8qIFBvd2VyIG9uICovCi0JCWlmIChkYXRhLT5wb3dlcl9ncGlvID49IDApIHsKKwkJaWYgKGRhdGEtPnBvd2VyX2dwaW8gPj0gMCkKIAkJCWdwaW9fc2V0X3ZhbHVlKGRhdGEtPnBvd2VyX2dwaW8sIDEpOwotCQkJZGF0YS0+cG93ZXJfc3RhdGUgPSAxOwotCQkJdHBhNjEzMGEyX2luaXRpYWxpemUoKTsKKworCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShkYXRhLT5zdXBwbGllcyksCisJCQkJCSAgICBkYXRhLT5zdXBwbGllcyk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2VycigmdHBhNjEzMGEyX2NsaWVudC0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXhpdDsKIAkJfQorCisJCWRhdGEtPnBvd2VyX3N0YXRlID0gMTsKKwkJdHBhNjEzMGEyX2luaXRpYWxpemUoKTsKKwogCQkvKiBDbGVhciBTV1MgKi8KIAkJdmFsID0gdHBhNjEzMGEyX3JlYWQoVFBBNjEzMEEyX1JFR19DT05UUk9MKTsKIAkJdmFsICY9IH5UUEE2MTMwQTJfU1dTOwpAQCAtMTMxLDEzICsxNTQsMjUgQEAKIAkJdmFsID0gdHBhNjEzMGEyX3JlYWQoVFBBNjEzMEEyX1JFR19DT05UUk9MKTsKIAkJdmFsIHw9IFRQQTYxMzBBMl9TV1M7CiAJCXRwYTYxMzBhMl9pMmNfd3JpdGUoVFBBNjEzMEEyX1JFR19DT05UUk9MLCB2YWwpOworCiAJCS8qIFBvd2VyIG9mZiAqLwotCQlpZiAoZGF0YS0+cG93ZXJfZ3BpbyA+PSAwKSB7CisJCWlmIChkYXRhLT5wb3dlcl9ncGlvID49IDApCiAJCQlncGlvX3NldF92YWx1ZShkYXRhLT5wb3dlcl9ncGlvLCAwKTsKLQkJCWRhdGEtPnBvd2VyX3N0YXRlID0gMDsKKworCQlyZXQgPSByZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoZGF0YS0+c3VwcGxpZXMpLAorCQkJCQkgICAgIGRhdGEtPnN1cHBsaWVzKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKCZ0cGE2MTMwYTJfY2xpZW50LT5kZXYsCisJCQkJIkZhaWxlZCB0byBkaXNhYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXhpdDsKIAkJfQorCisJCWRhdGEtPnBvd2VyX3N0YXRlID0gMDsKIAl9CisKK2V4aXQ6CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT5tdXRleCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB0cGE2MTMwYTJfZ2V0X3JlZyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKQEAgLTIzNywxMiArMjcyLDggQEAKICAqLwogc3RhdGljIHZvaWQgdHBhNjEzMGEyX2NoYW5uZWxfZW5hYmxlKHU4IGNoYW5uZWwsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0CXRwYTYxMzBhMl9kYXRhICpkYXRhOwogCXU4CXZhbDsKIAotCUJVR19PTih0cGE2MTMwYTJfY2xpZW50ID09IE5VTEwpOwotCWRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEodHBhNjEzMGEyX2NsaWVudCk7Ci0KIAlpZiAoZW5hYmxlKSB7CiAJCS8qIEVuYWJsZSBjaGFubmVsICovCiAJCS8qIEVuYWJsZSBhbXBsaWZpZXIgKi8KQEAgLTI5OSwxNSArMzMwLDE3IEBACiBzdGF0aWMgaW50IHRwYTYxMzBhMl9zdXBwbHlfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7CisJaW50IHJldCA9IDA7CisKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6Ci0JCXRwYTYxMzBhMl9wb3dlcigxKTsKKwkJcmV0ID0gdHBhNjEzMGEyX3Bvd2VyKDEpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKLQkJdHBhNjEzMGEyX3Bvd2VyKDApOworCQlyZXQgPSB0cGE2MTMwYTJfcG93ZXIoMCk7CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgdHBhNjEzMGEyX2RhcG1fd2lkZ2V0c1tdID0gewpAQCAtMzQ2LDEzICszNzksMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwYTYxMzBhMl9hZGRfY29udHJvbHMpOwogCi1zdGF0aWMgaW50IHRwYTYxMzBhMl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCBfX2RldmluaXQgdHBhNjEzMGEyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCB0cGE2MTMwYTJfZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgdHBhNjEzMGEyX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwotCWludCByZXQ7CisJaW50IGksIHJldDsKIAogCWRldiA9ICZjbGllbnQtPmRldjsKIApAQCAtMzg3LDE1ICs0MjAsMzggQEAKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgcG93ZXIgR1BJTyAoJWQpXG4iLAogCQkJCWRhdGEtPnBvd2VyX2dwaW8pOwotCQkJZ290byBmYWlsOworCQkJZ290byBlcnJfZ3BpbzsKIAkJfQogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZGF0YS0+cG93ZXJfZ3BpbywgMCk7Ci0JfSBlbHNlIHsKLQkJZGF0YS0+cG93ZXJfc3RhdGUgPSAxOwotCQl0cGE2MTMwYTJfaW5pdGlhbGl6ZSgpOwogCX0KIAotCXRwYTYxMzBhMl9wb3dlcigxKTsKKwlzd2l0Y2ggKHBkYXRhLT5pZCkgeworCWNhc2UgVFBBNjEzMEEyOgorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT5zdXBwbGllcyk7IGkrKykKKwkJCWRhdGEtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHRwYTYxMzBhMl9zdXBwbHlfbmFtZXNbaV07CisJCWJyZWFrOworCWNhc2UgVFBBNjE0MEEyOgorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT5zdXBwbGllcyk7IGkrKykKKwkJCWRhdGEtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHRwYTYxNDBhMl9zdXBwbHlfbmFtZXNbaV07OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2FybihkZXYsICJVbmtub3duIFRQQSBtb2RlbCAoJWQpLiBBc3N1bWluZyA2MTMwQTJcbiIsCisJCQkgcGRhdGEtPmlkKTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YS0+c3VwcGxpZXMpOyBpKyspCisJCQlkYXRhLT5zdXBwbGllc1tpXS5zdXBwbHkgPSB0cGE2MTMwYTJfc3VwcGx5X25hbWVzW2ldOworCX0KKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChkZXYsIEFSUkFZX1NJWkUoZGF0YS0+c3VwcGxpZXMpLAorCQkJCSBkYXRhLT5zdXBwbGllcyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3Qgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9yZWd1bGF0b3I7CisJfQorCisJcmV0ID0gdHBhNjEzMGEyX3Bvd2VyKDEpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBlcnJfcG93ZXI7CisKIAogCS8qIFJlYWQgdmVyc2lvbiAqLwogCXJldCA9IHRwYTYxMzBhMl9pMmNfcmVhZChUUEE2MTMwQTJfUkVHX1ZFUlNJT04pICYKQEAgLTQwNCwxMCArNDYwLDE4IEBACiAJCWRldl93YXJuKGRldiwgIlVOVEVTVEVEIHZlcnNpb24gZGV0ZWN0ZWQgKCVkKVxuIiwgcmV0KTsKIAogCS8qIERpc2FibGUgdGhlIGNoaXAgKi8KLQl0cGE2MTMwYTJfcG93ZXIoMCk7CisJcmV0ID0gdHBhNjEzMGEyX3Bvd2VyKDApOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBlcnJfcG93ZXI7CiAKIAlyZXR1cm4gMDsKLWZhaWw6CisKK2Vycl9wb3dlcjoKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUoZGF0YS0+c3VwcGxpZXMpLCBkYXRhLT5zdXBwbGllcyk7CitlcnJfcmVndWxhdG9yOgorCWlmIChkYXRhLT5wb3dlcl9ncGlvID49IDApCisJCWdwaW9fZnJlZShkYXRhLT5wb3dlcl9ncGlvKTsKK2Vycl9ncGlvOgogCWtmcmVlKGRhdGEpOwogCWkyY19zZXRfY2xpZW50ZGF0YSh0cGE2MTMwYTJfY2xpZW50LCBOVUxMKTsKIAl0cGE2MTMwYTJfY2xpZW50ID0gTlVMTDsKQEAgLTQxNSw3ICs0NzksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdHBhNjEzMGEyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBfX2RldmV4aXQgdHBhNjEzMGEyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCB0cGE2MTMwYTJfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC00MjMsNiArNDg3LDkgQEAKIAogCWlmIChkYXRhLT5wb3dlcl9ncGlvID49IDApCiAJCWdwaW9fZnJlZShkYXRhLT5wb3dlcl9ncGlvKTsKKworCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRShkYXRhLT5zdXBwbGllcyksIGRhdGEtPnN1cHBsaWVzKTsKKwogCWtmcmVlKGRhdGEpOwogCXRwYTYxMzBhMl9jbGllbnQgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jCmluZGV4IDJhMjdmN2IuLjZmNWQ0YWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jCkBAIC01NSw3ICs1NSw3IEBACiAJMHgwYywgLyogUkVHX0FUWFIxUEdBCQkoMHhCKQkqLwogCTB4MDAsIC8qIFJFR19BVlRYTDJQR0EJCSgweEMpCSovCiAJMHgwMCwgLyogUkVHX0FWVFhSMlBHQQkJKDB4RCkJKi8KLQkweDAxLCAvKiBSRUdfQVVESU9fSUYJCSgweEUpCSovCisJMHgwMCwgLyogUkVHX0FVRElPX0lGCQkoMHhFKQkqLwogCTB4MDAsIC8qIFJFR19WT0lDRV9JRgkJKDB4RikJKi8KIAkweDAwLCAvKiBSRUdfQVJYUjFQR0EJCSgweDEwKQkqLwogCTB4MDAsIC8qIFJFR19BUlhMMVBHQQkJKDB4MTEpCSovCkBAIC02NCwxOSArNjQsMTkgQEAKIAkweDAwLCAvKiBSRUdfVlJYUEdBCQkoMHgxNCkJKi8KIAkweDAwLCAvKiBSRUdfVlNUUEdBCQkoMHgxNSkJKi8KIAkweDAwLCAvKiBSRUdfVlJYMkFSWFBHQQkJKDB4MTYpCSovCi0JMHgwYywgLyogUkVHX0FWREFDX0NUTAkJKDB4MTcpCSovCisJMHgwMCwgLyogUkVHX0FWREFDX0NUTAkJKDB4MTcpCSovCiAJMHgwMCwgLyogUkVHX0FSWDJWVFhQR0EJCSgweDE4KQkqLwogCTB4MDAsIC8qIFJFR19BUlhMMV9BUEdBX0NUTAkoMHgxOSkJKi8KIAkweDAwLCAvKiBSRUdfQVJYUjFfQVBHQV9DVEwJKDB4MUEpCSovCi0JMHg0YiwgLyogUkVHX0FSWEwyX0FQR0FfQ1RMCSgweDFCKQkqLwotCTB4NGIsIC8qIFJFR19BUlhSMl9BUEdBX0NUTAkoMHgxQykJKi8KKwkweDRhLCAvKiBSRUdfQVJYTDJfQVBHQV9DVEwJKDB4MUIpCSovCisJMHg0YSwgLyogUkVHX0FSWFIyX0FQR0FfQ1RMCSgweDFDKQkqLwogCTB4MDAsIC8qIFJFR19BVFgyQVJYUEdBCQkoMHgxRCkJKi8KIAkweDAwLCAvKiBSRUdfQlRfSUYJCSgweDFFKQkqLwogCTB4MDAsIC8qIFJFR19CVFBHQQkJKDB4MUYpCSovCiAJMHgwMCwgLyogUkVHX0JUU1RQR0EJCSgweDIwKQkqLwogCTB4MDAsIC8qIFJFR19FQVJfQ1RMCQkoMHgyMSkJKi8KLQkweDI0LCAvKiBSRUdfSFNfU0VMCQkoMHgyMikJKi8KLQkweDBhLCAvKiBSRUdfSFNfR0FJTl9TRVQJKDB4MjMpCSovCisJMHgwMCwgLyogUkVHX0hTX1NFTAkJKDB4MjIpCSovCisJMHgwMCwgLyogUkVHX0hTX0dBSU5fU0VUCSgweDIzKQkqLwogCTB4MDAsIC8qIFJFR19IU19QT1BOX1NFVAkoMHgyNCkJKi8KIAkweDAwLCAvKiBSRUdfUFJFRExfQ1RMCQkoMHgyNSkJKi8KIAkweDAwLCAvKiBSRUdfUFJFRFJfQ1RMCQkoMHgyNikJKi8KQEAgLTk5LDcgKzk5LDcgQEAKIAkweDAwLCAvKiBSRUdfSTJTX1JYX1NDUkFNQkxFX0gJKDB4MzcpCSovCiAJMHgwMCwgLyogUkVHX0kyU19SWF9TQ1JBTUJMRV9NCSgweDM4KQkqLwogCTB4MDAsIC8qIFJFR19JMlNfUlhfU0NSQU1CTEVfTAkoMHgzOSkJKi8KLQkweDE2LCAvKiBSRUdfQVBMTF9DVEwJCSgweDNBKQkqLworCTB4MDYsIC8qIFJFR19BUExMX0NUTAkJKDB4M0EpCSovCiAJMHgwMCwgLyogUkVHX0RUTUZfQ1RMCQkoMHgzQikJKi8KIAkweDAwLCAvKiBSRUdfRFRNRl9QR0FfQ1RMMgkoMHgzQykJKi8KIAkweDAwLCAvKiBSRUdfRFRNRl9QR0FfQ1RMMQkoMHgzRCkJKi8KQEAgLTEyMDMsNiArMTIwMyw4IEBACiAJU05EX1NPQ19EQVBNX1NVUFBMWSgiQVBMTCBFbmFibGUiLCBTTkRfU09DX05PUE0sIDAsIDAsIGFwbGxfZXZlbnQsCiAJCQkgICAgU05EX1NPQ19EQVBNX1BSRV9QTVV8U05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKIAorCVNORF9TT0NfREFQTV9TVVBQTFkoIkFJRiBFbmFibGUiLCBUV0w0MDMwX1JFR19BVURJT19JRiwgMCwgMCwgTlVMTCwgMCksCisKIAkvKiBPdXRwdXQgTUlYRVIgY29udHJvbHMgKi8KIAkvKiBFYXJwaWVjZSAqLwogCVNORF9TT0NfREFQTV9NSVhFUigiRWFycGllY2UgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCkBAIC0xMzM3LDYgKzEzMzksMTEgQEAKIAl7IkRpZ2l0YWwgTDIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiQVBMTCBFbmFibGUifSwKIAl7IkRpZ2l0YWwgVm9pY2UgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiQVBMTCBFbmFibGUifSwKIAorCXsiRGlnaXRhbCBSMSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJBSUYgRW5hYmxlIn0sCisJeyJEaWdpdGFsIEwxIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkFJRiBFbmFibGUifSwKKwl7IkRpZ2l0YWwgUjIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiQUlGIEVuYWJsZSJ9LAorCXsiRGlnaXRhbCBMMiBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJBSUYgRW5hYmxlIn0sCisKIAl7IkFuYWxvZyBMMSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJEaWdpdGFsIEwxIFBsYXliYWNrIE1peGVyIn0sCiAJeyJBbmFsb2cgUjEgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiRGlnaXRhbCBSMSBQbGF5YmFjayBNaXhlciJ9LAogCXsiQW5hbG9nIEwyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkRpZ2l0YWwgTDIgUGxheWJhY2sgTWl4ZXIifSwKQEAgLTE0NTUsNiArMTQ2MiwxMSBAQAogCXsiQURDIFZpcnR1YWwgTGVmdDIiLCBOVUxMLCAiQVBMTCBFbmFibGUifSwKIAl7IkFEQyBWaXJ0dWFsIFJpZ2h0MiIsIE5VTEwsICJBUExMIEVuYWJsZSJ9LAogCisJeyJBREMgVmlydHVhbCBMZWZ0MSIsIE5VTEwsICJBSUYgRW5hYmxlIn0sCisJeyJBREMgVmlydHVhbCBSaWdodDEiLCBOVUxMLCAiQUlGIEVuYWJsZSJ9LAorCXsiQURDIFZpcnR1YWwgTGVmdDIiLCBOVUxMLCAiQUlGIEVuYWJsZSJ9LAorCXsiQURDIFZpcnR1YWwgUmlnaHQyIiwgTlVMTCwgIkFJRiBFbmFibGUifSwKKwogCS8qIEFuYWxvZyBieXBhc3Mgcm91dGVzICovCiAJeyJSaWdodDEgQW5hbG9nIExvb3BiYWNrIiwgIlN3aXRjaCIsICJBbmFsb2cgUmlnaHQifSwKIAl7IkxlZnQxIEFuYWxvZyBMb29wYmFjayIsICJTd2l0Y2giLCAiQW5hbG9nIExlZnQifSwKQEAgLTIxNTIsOCArMjE2NCw2IEBACiAJdHdsNDAzMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwotCWtmcmVlKGNvZGVjLT5wcml2YXRlX2RhdGEpOwotCWtmcmVlKGNvZGVjKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjE5Miw3ICsyMjAyLDcgQEAKIAljb2RlYy0+d3JpdGUgPSB0d2w0MDMwX3dyaXRlOwogCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHR3bDQwMzBfc2V0X2JpYXNfbGV2ZWw7CiAJY29kZWMtPmRhaSA9IHR3bDQwMzBfZGFpOwotCWNvZGVjLT5udW1fZGFpID0gQVJSQVlfU0laRSh0d2w0MDMwX2RhaSksCisJY29kZWMtPm51bV9kYWkgPSBBUlJBWV9TSVpFKHR3bDQwMzBfZGFpKTsKIAljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBzaXplb2YodHdsNDAzMF9yZWcpOwogCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWVtZHVwKHR3bDQwMzBfcmVnLCBzaXplb2YodHdsNDAzMF9yZWcpLAogCQkJCQlHRlBfS0VSTkVMKTsKQEAgLTIyMzcsNiArMjI0Nyw5IEBACiB7CiAJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCisJc25kX3NvY191bnJlZ2lzdGVyX2RhaXMoJnR3bDQwMzBfZGFpWzBdLCBBUlJBWV9TSVpFKHR3bDQwMzBfZGFpKSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZ0d2w0MDMwLT5jb2RlYyk7CisJa2ZyZWUodHdsNDAzMC0+Y29kZWMucmVnX2NhY2hlKTsKIAlrZnJlZSh0d2w0MDMwKTsKIAogCXR3bDQwMzBfY29kZWMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmggYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaAppbmRleCBkZDYzOTZlLi5mMjA2ZDI0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaApAQCAtMjUsNyArMjUsNyBAQAogLyogUmVnaXN0ZXIgZGVzY3JpcHRpb25zIGFyZSBoZXJlICovCiAjaW5jbHVkZSA8bGludXgvbWZkL3R3bDQwMzAtY29kZWMuaD4KIAotLyogU2dhZG93IHJlZ2lzdGVyIHVzZWQgYnkgdGhlIGF1ZGlvIGRyaXZlciAqLworLyogU2hhZG93IHJlZ2lzdGVyIHVzZWQgYnkgdGhlIGF1ZGlvIGRyaXZlciAqLwogI2RlZmluZSBUV0w0MDMwX1JFR19TV19TSEFET1cJCTB4NEEKICNkZWZpbmUgVFdMNDAzMF9DQUNIRVJFR05VTQkoVFdMNDAzMF9SRUdfU1dfU0hBRE9XICsgMSkKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTIwMDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE3YjAyNgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmMKQEAgLTAsMCArMSw4ODggQEAKKy8qCisgKiB3bTIwMDAuYyAgLS0gIFdNMjAwMCBBTFNBIFNvYyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoZSBkb3dubG9hZCBpbWFnZSBmb3IgdGhlIFdNMjAwMCB3aWxsIGJlIHJlcXVlc3RlZCBhcworICogJ3dtMjAwMF9hbmMuYmluJyBieSBkZWZhdWx0IChvdmVycmlkYWJsZSB2aWEgcGxhdGZvcm0gZGF0YSkgYXQKKyAqIHJ1bnRpbWUgYW5kIGlzIGV4cGVjdGVkIHRvIGJlIGluIGZsYXQgYmluYXJ5IGZvcm1hdC4gIFRoaXMgaXMKKyAqIGdlbmVyYXRlZCBieSBXb2xmc29uIGNvbmZpZ3VyYXRpb24gdG9vbHMgYW5kIGluY2x1ZGVzCisgKiBzeXN0ZW0tc3BlY2lmaWMgY2FsbGlicmF0aW9uIGluZm9ybWF0aW9uLiAgSWYgc3VwcGxpZWQgYXMgYQorICogc2VxdWVuY2Ugb2YgQVNDSUktZW5jb2RlZCBoZXhpZGVjaW1hbCBieXRlcyB0aGlzIGNhbiBiZSBjb252ZXJ0ZWQKKyAqIGludG8gYSBmbGF0IGJpbmFyeSB3aXRoIGEgY29tbWFuZCBzdWNoIGFzIHRoaXMgb24gdGhlIGNvbW1hbmQgbGluZToKKyAqCisgKiBwZXJsIC1lICd3aGlsZSAoPD4pIHsgcy9bXHJcbl0rLy8gOyBwcmludGYoIiVjIiwgaGV4KCRfKSk7IH0nCisgKiAgICAgICAgICAgICAgICAgPCBmaWxlICA+IHdtMjAwMF9hbmMuYmluCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKworI2luY2x1ZGUgPHNvdW5kL3dtMjAwMC5oPgorCisjaW5jbHVkZSAid20yMDAwLmgiCisKK2VudW0gd20yMDAwX2FuY19tb2RlIHsKKwlBTkNfQUNUSVZFID0gMCwKKwlBTkNfQllQQVNTID0gMSwKKwlBTkNfU1RBTkRCWSA9IDIsCisJQU5DX09GRiA9IDMsCit9OworCitzdHJ1Y3Qgd20yMDAwX3ByaXYgeworCXN0cnVjdCBpMmNfY2xpZW50ICppMmM7CisKKwllbnVtIHdtMjAwMF9hbmNfbW9kZSBhbmNfbW9kZTsKKworCXVuc2lnbmVkIGludCBhbmNfYWN0aXZlOjE7CisJdW5zaWduZWQgaW50IGFuY19lbmdfZW5hOjE7CisJdW5zaWduZWQgaW50IHNwa19lbmE6MTsKKworCXVuc2lnbmVkIGludCBtY2xrX2RpdjoxOworCXVuc2lnbmVkIGludCBzcGVlY2hfY2xhcml0eToxOworCisJaW50IGFuY19kb3dubG9hZF9zaXplOworCWNoYXIgKmFuY19kb3dubG9hZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAqd20yMDAwX2kyYzsKKworc3RhdGljIGludCB3bTIwMDBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmkyYywgdW5zaWduZWQgaW50IHJlZywKKwkJCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl1OCBkYXRhWzNdOworCWludCByZXQ7CisKKwlkYXRhWzBdID0gKHJlZyA+PiA4KSAmIDB4ZmY7CisJZGF0YVsxXSA9IHJlZyAmIDB4ZmY7CisJZGF0YVsyXSA9IHZhbHVlICYgMHhmZjsKKworCWRldl92ZGJnKCZpMmMtPmRldiwgIndyaXRlICV4ID0gJXhcbiIsIHJlZywgdmFsdWUpOworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgZGF0YSwgMyk7CisJaWYgKHJldCA9PSAzKQorCQlyZXR1cm4gMDsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwllbHNlCisJCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHdtMjAwMF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIHVuc2lnbmVkIGludCByKQoreworCXN0cnVjdCBpMmNfbXNnIHhmZXJbMl07CisJdTggcmVnWzJdOworCXU4IGRhdGE7CisJaW50IHJldDsKKworCS8qIFdyaXRlIHJlZ2lzdGVyICovCisJcmVnWzBdID0gKHIgPj4gOCkgJiAweGZmOworCXJlZ1sxXSA9IHIgJiAweGZmOworCXhmZXJbMF0uYWRkciA9IGkyYy0+YWRkcjsKKwl4ZmVyWzBdLmZsYWdzID0gMDsKKwl4ZmVyWzBdLmxlbiA9IHNpemVvZihyZWcpOworCXhmZXJbMF0uYnVmID0gJnJlZ1swXTsKKworCS8qIFJlYWQgZGF0YSAqLworCXhmZXJbMV0uYWRkciA9IGkyYy0+YWRkcjsKKwl4ZmVyWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJeGZlclsxXS5sZW4gPSAxOworCXhmZXJbMV0uYnVmID0gJmRhdGE7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLT5hZGFwdGVyLCB4ZmVyLCAyKTsKKwlpZiAocmV0ICE9IDIpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJpMmNfdHJhbnNmZXIoKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJZGV2X3ZkYmcoJmkyYy0+ZGV2LCAicmVhZCAleCBmcm9tICV4XG4iLCBkYXRhLCByKTsKKworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgdm9pZCB3bTIwMDBfcmVzZXQoc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IHdtMjAwMC0+aTJjOworCisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwgV00yMDAwX0FOQ19FTkdfQ0xSKTsKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfUkFNX0NMUik7CisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19JRDEsIDApOworCisJd20yMDAwLT5hbmNfbW9kZSA9IEFOQ19PRkY7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX3BvbGxfYml0KHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkgICB1bnNpZ25lZCBpbnQgcmVnLCB1OCBtYXNrLCBpbnQgdGltZW91dCkKK3sKKwlpbnQgdmFsOworCisJdmFsID0gd20yMDAwX3JlYWQoaTJjLCByZWcpOworCisJd2hpbGUgKCEodmFsICYgbWFzaykgJiYgLS10aW1lb3V0KSB7CisJCW1zbGVlcCgxKTsKKwkJdmFsID0gd20yMDAwX3JlYWQoaTJjLCByZWcpOworCX0KKworCWlmICh0aW1lb3V0ID09IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX3Bvd2VyX3VwKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCBhbmFsb2d1ZSkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmaTJjLT5kZXYpOworCWludCByZXQsIHRpbWVvdXQ7CisKKwlCVUdfT04od20yMDAwLT5hbmNfbW9kZSAhPSBBTkNfT0ZGKTsKKworCWRldl9kYmcoJmkyYy0+ZGV2LCAiQmVnaW5uaW5nIHBvd2VyIHVwXG4iKTsKKworCWlmICghd20yMDAwLT5tY2xrX2RpdikgeworCQlkZXZfZGJnKCZpMmMtPmRldiwgIkRpc2FibGluZyBNQ0xLIGRpdmlkZXJcbiIpOworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLAorCQkJICAgICBXTTIwMDBfTUNMS19ESVYyX0VOQV9DTFIpOworCX0gZWxzZSB7CisJCWRldl9kYmcoJmkyYy0+ZGV2LCAiRW5hYmxpbmcgTUNMSyBkaXZpZGVyXG4iKTsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwKKwkJCSAgICAgV00yMDAwX01DTEtfRElWMl9FTkFfU0VUKTsKKwl9CisKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfQU5DX0VOR19DTFIpOworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9BTkNfRU5HX1NFVCk7CisKKwkvKiBXYWl0IGZvciBBTkMgZW5naW5lIHRvIGJlY29tZSByZWFkeSAqLworCWlmICghd20yMDAwX3BvbGxfYml0KGkyYywgV00yMDAwX1JFR19BTkNfU1RBVCwKKwkJCSAgICAgV00yMDAwX0FOQ19FTkdfSURMRSwgMSkpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJBTkMgZW5naW5lIGZhaWxlZCB0byByZXNldFxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCWlmICghd20yMDAwX3BvbGxfYml0KGkyYywgV00yMDAwX1JFR19TWVNfU1RBVFVTLAorCQkJICAgICBXTTIwMDBfU1RBVFVTX0JPT1RfQ09NUExFVEUsIDEpKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiQU5DIGVuZ2luZSBmYWlsZWQgdG8gaW5pdGlhbGlzZVxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9SQU1fU0VUKTsKKworCS8qIE9wZW4gY29kZSBkb3dubG9hZCBvZiB0aGUgZGF0YSBzaW5jZSBpdCBpcyB0aGUgb25seSBidWxrCisJICogd3JpdGUgd2UgZG8uICovCisJZGV2X2RiZygmaTJjLT5kZXYsICJEb3dubG9hZGluZyAlZCBieXRlc1xuIiwKKwkJd20yMDAwLT5hbmNfZG93bmxvYWRfc2l6ZSAtIDIpOworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgd20yMDAwLT5hbmNfZG93bmxvYWQsCisJCQkgICAgICB3bTIwMDAtPmFuY19kb3dubG9hZF9zaXplKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgImkyY190cmFuc2ZlcigpIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWlmIChyZXQgIT0gd20yMDAwLT5hbmNfZG93bmxvYWRfc2l6ZSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgImkyY190cmFuc2ZlcigpIGZhaWxlZCwgJWQgIT0gJWRcbiIsCisJCQlyZXQsIHdtMjAwMC0+YW5jX2Rvd25sb2FkX3NpemUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXZfZGJnKCZpMmMtPmRldiwgIkRvd25sb2FkIGNvbXBsZXRlXG4iKTsKKworCWlmIChhbmFsb2d1ZSkgeworCQl0aW1lb3V0ID0gMjQ4OworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX0FOQV9WTUlEX1BVX1RJTUUsIHRpbWVvdXQgLyA0KTsKKworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19NT0RFX0NOVFJMLAorCQkJICAgICBXTTIwMDBfTU9ERV9BTkFfU0VRX0lOQ0xVREUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9NT1VTRV9FTkFCTEUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9USEVSTUFMX0VOQUJMRSk7CisJfSBlbHNlIHsKKwkJdGltZW91dCA9IDEwOworCisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX01PVVNFX0VOQUJMRSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFKTsKKwl9CisKKwlyZXQgPSB3bTIwMDBfcmVhZChpMmMsIFdNMjAwMF9SRUdfU1BFRUNIX0NMQVJJVFkpOworCWlmICh3bTIwMDAtPnNwZWVjaF9jbGFyaXR5KQorCQlyZXQgJj0gfldNMjAwMF9TUEVFQ0hfQ0xBUklUWTsKKwllbHNlCisJCXJldCB8PSBXTTIwMDBfU1BFRUNIX0NMQVJJVFk7CisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TUEVFQ0hfQ0xBUklUWSwgcmV0KTsKKworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX1NUQVJUMCwgMHgzMyk7CisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfU1RBUlQxLCAweDAyKTsKKworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9BTkNfSU5UX05fQ0xSKTsKKworCWlmICghd20yMDAwX3BvbGxfYml0KGkyYywgV00yMDAwX1JFR19TWVNfU1RBVFVTLAorCQkJICAgICBXTTIwMDBfU1RBVFVTX01PVVNFX0FDVElWRSwgdGltZW91dCkpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgZGV2aWNlIGFmdGVyICVkbXNcbiIsCisJCQl0aW1lb3V0ICogMTApOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlkZXZfZGJnKCZpMmMtPmRldiwgIkFOQyBhY3RpdmVcbiIpOworCWlmIChhbmFsb2d1ZSkKKwkJZGV2X2RiZygmaTJjLT5kZXYsICJBbmFsb2d1ZSBhY3RpdmVcbiIpOworCXdtMjAwMC0+YW5jX21vZGUgPSBBTkNfQUNUSVZFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX3Bvd2VyX2Rvd24oc3RydWN0IGkyY19jbGllbnQgKmkyYywgaW50IGFuYWxvZ3VlKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZpMmMtPmRldik7CisJaW50IHRpbWVvdXQ7CisKKwlpZiAoYW5hbG9ndWUpIHsKKwkJdGltZW91dCA9IDI0ODsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19BTkFfVk1JRF9QRF9USU1FLCB0aW1lb3V0IC8gNCk7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX0FOQV9TRVFfSU5DTFVERSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX1BPV0VSX0RPV04pOworCX0gZWxzZSB7CisJCXRpbWVvdXQgPSAxMDsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfUE9XRVJfRE9XTik7CisJfQorCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX1NZU19TVEFUVVMsCisJCQkgICAgIFdNMjAwMF9TVEFUVVNfUE9XRVJfRE9XTl9DT01QTEVURSwgdGltZW91dCkpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJUaW1lb3V0IHdhaXRpbmcgZm9yIEFOQyBwb3dlciBkb3duXG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX0FOQ19TVEFULAorCQkJICAgICBXTTIwMDBfQU5DX0VOR19JRExFLCAxKSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIlRpbWVvdXQgd2FpdGluZyBmb3IgQU5DIGVuZ2luZSBpZGxlXG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJZGV2X2RiZygmaTJjLT5kZXYsICJwb3dlcmVkIG9mZlxuIik7CisJd20yMDAwLT5hbmNfbW9kZSA9IEFOQ19PRkY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTIwMDBfZW50ZXJfYnlwYXNzKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCBhbmFsb2d1ZSkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmaTJjLT5kZXYpOworCisJQlVHX09OKHdtMjAwMC0+YW5jX21vZGUgIT0gQU5DX0FDVElWRSk7CisKKwlpZiAoYW5hbG9ndWUpIHsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfQU5BX1NFUV9JTkNMVURFIHwKKwkJCSAgICAgV00yMDAwX01PREVfVEhFUk1BTF9FTkFCTEUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9CWVBBU1NfRU5UUlkpOworCX0gZWxzZSB7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFIHwKKwkJCSAgICAgV00yMDAwX01PREVfQllQQVNTX0VOVFJZKTsKKwl9CisKKwlpZiAoIXdtMjAwMF9wb2xsX2JpdChpMmMsIFdNMjAwMF9SRUdfU1lTX1NUQVRVUywKKwkJCSAgICAgV00yMDAwX1NUQVRVU19BTkNfRElTQUJMRUQsIDEwKSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIlRpbWVvdXQgd2FpdGluZyBmb3IgQU5DIGRpc2FibGVcbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlpZiAoIXdtMjAwMF9wb2xsX2JpdChpMmMsIFdNMjAwMF9SRUdfQU5DX1NUQVQsCisJCQkgICAgIFdNMjAwMF9BTkNfRU5HX0lETEUsIDEpKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiVGltZW91dCB3YWl0aW5nIGZvciBBTkMgZW5naW5lIGlkbGVcbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwxLCBXTTIwMDBfU1lTX1NUQlkpOworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9SQU1fQ0xSKTsKKworCXdtMjAwMC0+YW5jX21vZGUgPSBBTkNfQllQQVNTOworCWRldl9kYmcoJmkyYy0+ZGV2LCAiYnlwYXNzIGVuYWJsZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX2V4aXRfYnlwYXNzKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCBhbmFsb2d1ZSkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmaTJjLT5kZXYpOworCisJQlVHX09OKHdtMjAwMC0+YW5jX21vZGUgIT0gQU5DX0JZUEFTUyk7CisJCisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMSwgMCk7CisKKwlpZiAoYW5hbG9ndWUpIHsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfQU5BX1NFUV9JTkNMVURFIHwKKwkJCSAgICAgV00yMDAwX01PREVfTU9VU0VfRU5BQkxFIHwKKwkJCSAgICAgV00yMDAwX01PREVfVEhFUk1BTF9FTkFCTEUpOworCX0gZWxzZSB7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX01PVVNFX0VOQUJMRSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFKTsKKwl9CisKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfUkFNX1NFVCk7CisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwgV00yMDAwX0FOQ19JTlRfTl9DTFIpOworCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX1NZU19TVEFUVVMsCisJCQkgICAgIFdNMjAwMF9TVEFUVVNfTU9VU0VfQUNUSVZFLCAxMCkpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgTU9VU0VcbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwl3bTIwMDAtPmFuY19tb2RlID0gQU5DX0FDVElWRTsKKwlkZXZfZGJnKCZpMmMtPmRldiwgIk1PVVNFIGFjdGl2ZVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTIwMDBfZW50ZXJfc3RhbmRieShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgYW5hbG9ndWUpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJmkyYy0+ZGV2KTsKKwlpbnQgdGltZW91dDsKKworCUJVR19PTih3bTIwMDAtPmFuY19tb2RlICE9IEFOQ19BQ1RJVkUpOworCisJaWYgKGFuYWxvZ3VlKSB7CisJCXRpbWVvdXQgPSAyNDg7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfQU5BX1ZNSURfUERfVElNRSwgdGltZW91dCAvIDQpOworCisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX0FOQV9TRVFfSU5DTFVERSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFIHwKKwkJCSAgICAgV00yMDAwX01PREVfU1RBTkRCWV9FTlRSWSk7CisJfSBlbHNlIHsKKwkJdGltZW91dCA9IDEwOworCisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFIHwKKwkJCSAgICAgV00yMDAwX01PREVfU1RBTkRCWV9FTlRSWSk7CisJfQorCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX1NZU19TVEFUVVMsCisJCQkgICAgIFdNMjAwMF9TVEFUVVNfQU5DX0RJU0FCTEVELCB0aW1lb3V0KSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwKKwkJCSJUaW1lZCBvdXQgd2FpdGluZyBmb3IgQU5DIGRpc2FibGUgYWZ0ZXIgMW1zXG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX0FOQ19TVEFULCBXTTIwMDBfQU5DX0VOR19JRExFLAorCQkJICAgICAxKSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwKKwkJCSJUaW1lZCBvdXQgd2FpdGluZyBmb3Igc3RhbmRieSBhZnRlciAlZG1zXG4iLAorCQkJdGltZW91dCAqIDEwKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMSwgV00yMDAwX1NZU19TVEJZKTsKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfUkFNX0NMUik7CisKKwl3bTIwMDAtPmFuY19tb2RlID0gQU5DX1NUQU5EQlk7CisJZGV2X2RiZygmaTJjLT5kZXYsICJzdGFuZGJ5XG4iKTsKKwlpZiAoYW5hbG9ndWUpCisJCWRldl9kYmcoJmkyYy0+ZGV2LCAiQW5hbG9ndWUgZGlzYWJsZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX2V4aXRfc3RhbmRieShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgYW5hbG9ndWUpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJmkyYy0+ZGV2KTsKKwlpbnQgdGltZW91dDsKKworCUJVR19PTih3bTIwMDAtPmFuY19tb2RlICE9IEFOQ19TVEFOREJZKTsKKworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDEsIDApOworCisJaWYgKGFuYWxvZ3VlKSB7CisJCXRpbWVvdXQgPSAyNDg7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfQU5BX1ZNSURfUFVfVElNRSwgdGltZW91dCAvIDQpOworCisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX0FOQV9TRVFfSU5DTFVERSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFIHwKKwkJCSAgICAgV00yMDAwX01PREVfTU9VU0VfRU5BQkxFKTsKKwl9IGVsc2UgeworCQl0aW1lb3V0ID0gMTA7CisKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfVEhFUk1BTF9FTkFCTEUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9NT1VTRV9FTkFCTEUpOworCX0KKworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9SQU1fU0VUKTsKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfQU5DX0lOVF9OX0NMUik7CisKKwlpZiAoIXdtMjAwMF9wb2xsX2JpdChpMmMsIFdNMjAwMF9SRUdfU1lTX1NUQVRVUywKKwkJCSAgICAgV00yMDAwX1NUQVRVU19NT1VTRV9BQ1RJVkUsIHRpbWVvdXQpKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIE1PVVNFIGFmdGVyICVkbXNcbiIsCisJCQl0aW1lb3V0ICogMTApOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwl3bTIwMDAtPmFuY19tb2RlID0gQU5DX0FDVElWRTsKKwlkZXZfZGJnKCZpMmMtPmRldiwgIk1PVVNFIGFjdGl2ZVxuIik7CisJaWYgKGFuYWxvZ3VlKQorCQlkZXZfZGJnKCZpMmMtPmRldiwgIkFuYWxvZ3VlIGVuYWJsZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3R5cGVkZWYgaW50ICgqd20yMDAwX21vZGVfZm4pKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCBhbmFsb2d1ZSk7CisKK3N0YXRpYyBzdHJ1Y3QgeworCWVudW0gd20yMDAwX2FuY19tb2RlIHNvdXJjZTsKKwllbnVtIHdtMjAwMF9hbmNfbW9kZSBkZXN0OworCWludCBhbmFsb2d1ZTsKKwl3bTIwMDBfbW9kZV9mbiBzdGVwWzJdOworfSBhbmNfdHJhbnNpdGlvbnNbXSA9IHsKKwl7CisJCS5zb3VyY2UgPSBBTkNfT0ZGLAorCQkuZGVzdCA9IEFOQ19BQ1RJVkUsCisJCS5hbmFsb2d1ZSA9IDEsCisJCS5zdGVwID0geworCQkJd20yMDAwX3Bvd2VyX3VwLAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX09GRiwKKwkJLmRlc3QgPSBBTkNfU1RBTkRCWSwKKwkJLnN0ZXAgPSB7CisJCQl3bTIwMDBfcG93ZXJfdXAsCisJCQl3bTIwMDBfZW50ZXJfc3RhbmRieSwKKwkJfSwKKwl9LAorCXsKKwkJLnNvdXJjZSA9IEFOQ19PRkYsCisJCS5kZXN0ID0gQU5DX0JZUEFTUywKKwkJLmFuYWxvZ3VlID0gMSwKKwkJLnN0ZXAgPSB7CisJCQl3bTIwMDBfcG93ZXJfdXAsCisJCQl3bTIwMDBfZW50ZXJfYnlwYXNzLAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX0FDVElWRSwKKwkJLmRlc3QgPSBBTkNfQllQQVNTLAorCQkuYW5hbG9ndWUgPSAxLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9lbnRlcl9ieXBhc3MsCisJCX0sCisJfSwKKwl7CisJCS5zb3VyY2UgPSBBTkNfQUNUSVZFLAorCQkuZGVzdCA9IEFOQ19TVEFOREJZLAorCQkuYW5hbG9ndWUgPSAxLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9lbnRlcl9zdGFuZGJ5LAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX0FDVElWRSwKKwkJLmRlc3QgPSBBTkNfT0ZGLAorCQkuYW5hbG9ndWUgPSAxLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9wb3dlcl9kb3duLAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX0JZUEFTUywKKwkJLmRlc3QgPSBBTkNfQUNUSVZFLAorCQkuYW5hbG9ndWUgPSAxLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9leGl0X2J5cGFzcywKKwkJfSwKKwl9LAorCXsKKwkJLnNvdXJjZSA9IEFOQ19CWVBBU1MsCisJCS5kZXN0ID0gQU5DX1NUQU5EQlksCisJCS5hbmFsb2d1ZSA9IDEsCisJCS5zdGVwID0geworCQkJd20yMDAwX2V4aXRfYnlwYXNzLAorCQkJd20yMDAwX2VudGVyX3N0YW5kYnksCisJCX0sCisJfSwKKwl7CisJCS5zb3VyY2UgPSBBTkNfQllQQVNTLAorCQkuZGVzdCA9IEFOQ19PRkYsCisJCS5zdGVwID0geworCQkJd20yMDAwX2V4aXRfYnlwYXNzLAorCQkJd20yMDAwX3Bvd2VyX2Rvd24sCisJCX0sCisJfSwKKwl7CisJCS5zb3VyY2UgPSBBTkNfU1RBTkRCWSwKKwkJLmRlc3QgPSBBTkNfQUNUSVZFLAorCQkuYW5hbG9ndWUgPSAxLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9leGl0X3N0YW5kYnksCisJCX0sCisJfSwKKwl7CisJCS5zb3VyY2UgPSBBTkNfU1RBTkRCWSwKKwkJLmRlc3QgPSBBTkNfQllQQVNTLAorCQkuYW5hbG9ndWUgPSAxLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9leGl0X3N0YW5kYnksCisJCQl3bTIwMDBfZW50ZXJfYnlwYXNzLAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX1NUQU5EQlksCisJCS5kZXN0ID0gQU5DX09GRiwKKwkJLnN0ZXAgPSB7CisJCQl3bTIwMDBfZXhpdF9zdGFuZGJ5LAorCQkJd20yMDAwX3Bvd2VyX2Rvd24sCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgd20yMDAwX2FuY190cmFuc2l0aW9uKHN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwLAorCQkJCSBlbnVtIHdtMjAwMF9hbmNfbW9kZSBtb2RlKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSB3bTIwMDAtPmkyYzsKKwlpbnQgaSwgajsKKwlpbnQgcmV0OworCisJaWYgKHdtMjAwMC0+YW5jX21vZGUgPT0gbW9kZSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbmNfdHJhbnNpdGlvbnMpOyBpKyspCisJCWlmIChhbmNfdHJhbnNpdGlvbnNbaV0uc291cmNlID09IHdtMjAwMC0+YW5jX21vZGUgJiYKKwkJICAgIGFuY190cmFuc2l0aW9uc1tpXS5kZXN0ID09IG1vZGUpCisJCQlicmVhazsKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGFuY190cmFuc2l0aW9ucykpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJObyB0cmFuc2l0aW9uIGZvciAlZC0+JWRcbiIsCisJCQl3bTIwMDAtPmFuY19tb2RlLCBtb2RlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoYW5jX3RyYW5zaXRpb25zW2pdLnN0ZXApOyBqKyspIHsKKwkJaWYgKCFhbmNfdHJhbnNpdGlvbnNbaV0uc3RlcFtqXSkKKwkJCWJyZWFrOworCQlyZXQgPSBhbmNfdHJhbnNpdGlvbnNbaV0uc3RlcFtqXShpMmMsCisJCQkJCQkgYW5jX3RyYW5zaXRpb25zW2ldLmFuYWxvZ3VlKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTIwMDBfYW5jX3NldF9tb2RlKHN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSB3bTIwMDAtPmkyYzsKKwllbnVtIHdtMjAwMF9hbmNfbW9kZSBtb2RlOworCisJaWYgKHdtMjAwMC0+YW5jX2VuZ19lbmEgJiYgd20yMDAwLT5zcGtfZW5hKQorCQlpZiAod20yMDAwLT5hbmNfYWN0aXZlKQorCQkJbW9kZSA9IEFOQ19BQ1RJVkU7CisJCWVsc2UKKwkJCW1vZGUgPSBBTkNfQllQQVNTOworCWVsc2UKKwkJbW9kZSA9IEFOQ19TVEFOREJZOworCisJZGV2X2RiZygmaTJjLT5kZXYsICJTZXQgbW9kZSAlZCAoZW5hYmxlZCAlZCwgbXV0ZSAlZCwgYWN0aXZlICVkKVxuIiwKKwkJbW9kZSwgd20yMDAwLT5hbmNfZW5nX2VuYSwgIXdtMjAwMC0+c3BrX2VuYSwKKwkJd20yMDAwLT5hbmNfYWN0aXZlKTsKKworCXJldHVybiB3bTIwMDBfYW5jX3RyYW5zaXRpb24od20yMDAwLCBtb2RlKTsKK30KKworc3RhdGljIGludCB3bTIwMDBfYW5jX21vZGVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZ3bTIwMDBfaTJjLT5kZXYpOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHdtMjAwMC0+YW5jX2FjdGl2ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9hbmNfbW9kZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJndtMjAwMF9pMmMtPmRldik7CisJaW50IGFuY19hY3RpdmUgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCisJaWYgKGFuY19hY3RpdmUgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdtMjAwMC0+YW5jX2FjdGl2ZSA9IGFuY19hY3RpdmU7CisKKwlyZXR1cm4gd20yMDAwX2FuY19zZXRfbW9kZSh3bTIwMDApOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9zcGVha2VyX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZ3bTIwMDBfaTJjLT5kZXYpOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHdtMjAwMC0+c3BrX2VuYTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9zcGVha2VyX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZ3bTIwMDBfaTJjLT5kZXYpOworCWludCB2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCisJaWYgKHZhbCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJd20yMDAwLT5zcGtfZW5hID0gdmFsOworCisJcmV0dXJuIHdtMjAwMF9hbmNfc2V0X21vZGUod20yMDAwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtMjAwMF9jb250cm9sc1tdID0geworCVNPQ19TSU5HTEVfQk9PTF9FWFQoIldNMjAwMCBBTkMgU3dpdGNoIiwgMCwKKwkJCSAgICB3bTIwMDBfYW5jX21vZGVfZ2V0LAorCQkJICAgIHdtMjAwMF9hbmNfbW9kZV9wdXQpLAorCVNPQ19TSU5HTEVfQk9PTF9FWFQoIldNMjAwMCBTd2l0Y2giLCAwLAorCQkJICAgIHdtMjAwMF9zcGVha2VyX2dldCwKKwkJCSAgICB3bTIwMDBfc3BlYWtlcl9wdXQpLAorfTsKKworc3RhdGljIGludCB3bTIwMDBfYW5jX3Bvd2VyX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCSAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmd20yMDAwX2kyYy0+ZGV2KTsKKworCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKQorCQl3bTIwMDAtPmFuY19lbmdfZW5hID0gMTsKKworCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT0ZGKGV2ZW50KSkKKwkJd20yMDAwLT5hbmNfZW5nX2VuYSA9IDA7CisKKwlyZXR1cm4gd20yMDAwX2FuY19zZXRfbW9kZSh3bTIwMDApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd20yMDAwX2RhcG1fd2lkZ2V0c1tdID0geworLyogRXh0ZXJuYWxseSB2aXNpYmxlIHBpbnMgKi8KK1NORF9TT0NfREFQTV9PVVRQVVQoIldNMjAwMCBTUEtOIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJXTTIwMDAgU1BLUCIpLAorCitTTkRfU09DX0RBUE1fSU5QVVQoIldNMjAwMCBMSU5OIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIldNMjAwMCBMSU5QIiksCisKK1NORF9TT0NfREFQTV9QR0FfRSgiQU5DIEVuZ2luZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwkJICAgd20yMDAwX2FuY19wb3dlcl9ldmVudCwKKwkJICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAorfTsKKworLyogVGFyZ2V0LCBQYXRoLCBTb3VyY2UgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCXsgIldNMjAwMCBTUEtOIiwgTlVMTCwgIkFOQyBFbmdpbmUiIH0sCisJeyAiV00yMDAwIFNQS1AiLCBOVUxMLCAiQU5DIEVuZ2luZSIgfSwKKwl7ICJBTkMgRW5naW5lIiwgTlVMTCwgIldNMjAwMCBMSU5OIiB9LAorCXsgIkFOQyBFbmdpbmUiLCBOVUxMLCAiV00yMDAwIExJTlAiIH0sCit9OworCisvKiBDYWxsZWQgZnJvbSB0aGUgbWFjaGluZSBkcml2ZXIgKi8KK2ludCB3bTIwMDBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgcmV0OworCisJaWYgKCF3bTIwMDBfaTJjKSB7CisJCXByX2VycigiV00yMDAwIG5vdCB5ZXQgcHJvYmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd20yMDAwX2RhcG1fd2lkZ2V0cywKKwkJCQkJQVJSQVlfU0laRSh3bTIwMDBfZGFwbV93aWRnZXRzKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTIwMDBfY29udHJvbHMsCisJCQlBUlJBWV9TSVpFKHdtMjAwMF9jb250cm9scykpOworfQorRVhQT1JUX1NZTUJPTF9HUEwod20yMDAwX2FkZF9jb250cm9scyk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdtMjAwMF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaTJjX2lkKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwOworCXN0cnVjdCB3bTIwMDBfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlpbnQgcmVnLCByZXQ7CisJdTE2IGlkOworCisJaWYgKHdtMjAwMF9pMmMpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJBbm90aGVyIFdNMjAwMCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3bTIwMDAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd20yMDAwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod20yMDAwID09IE5VTEwpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgcHJpdmF0ZSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogVmVyaWZ5IHRoYXQgdGhpcyBpcyBhIFdNMjAwMCAqLworCXJlZyA9IHdtMjAwMF9yZWFkKGkyYywgV00yMDAwX1JFR19JRDEpOworCWlkID0gcmVnIDw8IDg7CisJcmVnID0gd20yMDAwX3JlYWQoaTJjLCBXTTIwMDBfUkVHX0lEMik7CisJaWQgfD0gcmVnICYgMHhmZjsKKworCWlmIChpZCAhPSAweDIwMDApIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJEZXZpY2UgaXMgbm90IGEgV00yMDAwIC0gSUQgJXhcbiIsIGlkKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnI7CisJfQorCisJcmVnID0gd20yMDAwX3JlYWQoaTJjLCBXTTIwMDBfUkVHX1JFVklTT04pOworCWRldl9pbmZvKCZpMmMtPmRldiwgInJldmlzaW9uICVjXG4iLCByZWcgKyAnQScpOworCisJZmlsZW5hbWUgPSAid20yMDAwX2FuYy5iaW4iOworCXBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmaTJjLT5kZXYpOworCWlmIChwZGF0YSkgeworCQl3bTIwMDAtPm1jbGtfZGl2ID0gcGRhdGEtPm1jbGtkaXYyOworCQl3bTIwMDAtPnNwZWVjaF9jbGFyaXR5ID0gIXBkYXRhLT5zcGVlY2hfZW5oX2Rpc2FibGU7CisKKwkJaWYgKHBkYXRhLT5kb3dubG9hZF9maWxlKQorCQkJZmlsZW5hbWUgPSBwZGF0YS0+ZG93bmxvYWRfZmlsZTsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZmlsZW5hbWUsICZpMmMtPmRldik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiRmFpbGVkIHRvIGFjcXVpcmUgQU5DIGRhdGE6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBQcmUtY29vayB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBvbnRvIHRoZSBpbWFnZSAqLworCXdtMjAwMC0+YW5jX2Rvd25sb2FkX3NpemUgPSBmdy0+c2l6ZSArIDI7CisJd20yMDAwLT5hbmNfZG93bmxvYWQgPSBrbWFsbG9jKHdtMjAwMC0+YW5jX2Rvd25sb2FkX3NpemUsIEdGUF9LRVJORUwpOworCWlmICh3bTIwMDAtPmFuY19kb3dubG9hZCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2Z3OworCX0KKworCXdtMjAwMC0+YW5jX2Rvd25sb2FkWzBdID0gMHg4MDsKKwl3bTIwMDAtPmFuY19kb3dubG9hZFsxXSA9IDB4MDA7CisJbWVtY3B5KHdtMjAwMC0+YW5jX2Rvd25sb2FkICsgMiwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKworCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJZGV2X3NldF9kcnZkYXRhKCZpMmMtPmRldiwgd20yMDAwKTsKKwl3bTIwMDAtPmFuY19lbmdfZW5hID0gMTsKKwl3bTIwMDAtPmkyYyA9IGkyYzsKKworCXdtMjAwMF9yZXNldCh3bTIwMDApOworCisJLyogVGhpcyB3aWxsIHRyaWdnZXIgYSB0cmFuc2l0aW9uIHRvIHN0YW5kYnkgbW9kZSBieSBkZWZhdWx0ICovCisJd20yMDAwX2FuY19zZXRfbW9kZSh3bTIwMDApOwkKKworCXdtMjAwMF9pMmMgPSBpMmM7CisKKwlyZXR1cm4gMDsKKworZXJyX2Z3OgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworZXJyOgorCWtmcmVlKHdtMjAwMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgd20yMDAwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmkyYykKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmaTJjLT5kZXYpOworCisJd20yMDAwX2FuY190cmFuc2l0aW9uKHdtMjAwMCwgQU5DX09GRik7CisKKwl3bTIwMDBfaTJjID0gTlVMTDsKKwlrZnJlZSh3bTIwMDAtPmFuY19kb3dubG9hZCk7CisJa2ZyZWUod20yMDAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bTIwMDBfaTJjX3NodXRkb3duKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJmkyYy0+ZGV2KTsKKworCXdtMjAwMF9hbmNfdHJhbnNpdGlvbih3bTIwMDAsIEFOQ19PRkYpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtMjAwMF9pMmNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmaTJjLT5kZXYpOworCisJcmV0dXJuIHdtMjAwMF9hbmNfdHJhbnNpdGlvbih3bTIwMDAsIEFOQ19PRkYpOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9pMmNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJmkyYy0+ZGV2KTsKKworCXJldHVybiB3bTIwMDBfYW5jX3NldF9tb2RlKHdtMjAwMCk7Cit9CisjZWxzZQorI2RlZmluZSB3bTIwMDBfaTJjX3N1c3BlbmQgTlVMTAorI2RlZmluZSB3bTIwMDBfaTJjX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtMjAwMF9pMmNfaWRbXSA9IHsKKwl7ICJ3bTIwMDAiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtMjAwMF9pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd20yMDAwX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid20yMDAwIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSB3bTIwMDBfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTIwMDBfaTJjX3JlbW92ZSksCisJLnN1c3BlbmQgPSB3bTIwMDBfaTJjX3N1c3BlbmQsCisJLnJlc3VtZSA9IHdtMjAwMF9pMmNfcmVzdW1lLAorCS5zaHV0ZG93biA9IHdtMjAwMF9pMmNfc2h1dGRvd24sCisJLmlkX3RhYmxlID0gd20yMDAwX2kyY19pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdtMjAwMF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ3bTIwMDBfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh3bTIwMDBfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTIwMDBfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ3bTIwMDBfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTIwMDBfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBXTTIwMDAgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZm9ubWljcm8uY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTIwMDAuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4ZTI2MQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIHdtMjAwMC5oICAtLSAgV00yMDAwIFNvYyBBdWRpbyBkcml2ZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX1dNMjAwMF9ICisjZGVmaW5lIF9XTTIwMDBfSAorCitzdHJ1Y3Qgd20yMDAwX3NldHVwX2RhdGEgeworCXVuc2lnbmVkIHNob3J0IGkyY19hZGRyZXNzOworCWludCBtY2xrX2RpdjsgICAvKiBTZXQgdG8gYSBub24temVybyB2YWx1ZSBpZiBNQ0xLX0RJVl8yIHJlcXVpcmVkICovCit9OworCitleHRlcm4gaW50IHdtMjAwMF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKTsKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTIwMDBfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtMjAwMDsKKworI2RlZmluZSBXTTIwMDBfUkVHX1NZU19TVEFSVAkgICAgMHg4MDAwCisjZGVmaW5lIFdNMjAwMF9SRUdfU1BFRUNIX0NMQVJJVFkgICAweDhmZWYKKyNkZWZpbmUgV00yMDAwX1JFR19TWVNfV0FUQ0hET0cgICAgIDB4OGZmNgorI2RlZmluZSBXTTIwMDBfUkVHX0FOQV9WTUlEX1BEX1RJTUUgMHg4ZmY3CisjZGVmaW5lIFdNMjAwMF9SRUdfQU5BX1ZNSURfUFVfVElNRSAweDhmZjgKKyNkZWZpbmUgV00yMDAwX1JFR19DQVRfRkxUUl9JTkRYICAgIDB4OGZmOQorI2RlZmluZSBXTTIwMDBfUkVHX0NBVF9HQUlOXzAgICAgICAgMHg4ZmZhCisjZGVmaW5lIFdNMjAwMF9SRUdfU1lTX1NUQVRVUyAgICAgICAweDhmZmMKKyNkZWZpbmUgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCAgIDB4OGZmZAorI2RlZmluZSBXTTIwMDBfUkVHX1NZU19TVEFSVDAgICAgICAgMHg4ZmZlCisjZGVmaW5lIFdNMjAwMF9SRUdfU1lTX1NUQVJUMSAgICAgICAweDhmZmYKKyNkZWZpbmUgV00yMDAwX1JFR19JRDEgICAgICAgICAgICAgIDB4ZjAwMAorI2RlZmluZSBXTTIwMDBfUkVHX0lEMiAgICAgICAgICAgICAgMHhmMDAxCisjZGVmaW5lIFdNMjAwMF9SRUdfUkVWSVNPTiAgICAgICAgICAweGYwMDIKKyNkZWZpbmUgV00yMDAwX1JFR19TWVNfQ1RMMSAgICAgICAgIDB4ZjAwMworI2RlZmluZSBXTTIwMDBfUkVHX1NZU19DVEwyICAgICAgICAgMHhmMDA0CisjZGVmaW5lIFdNMjAwMF9SRUdfQU5DX1NUQVQgICAgICAgICAweGYwMDUKKyNkZWZpbmUgV00yMDAwX1JFR19JRl9DVEwgICAgICAgICAgIDB4ZjAwNgorCisvKiBTUEVFQ0hfQ0xBUklUWSAqLworI2RlZmluZSBXTTIwMDBfU1BFRUNIX0NMQVJJVFkgICAweDAxCisKKy8qIFNZU19TVEFUVVMgKi8KKyNkZWZpbmUgV00yMDAwX1NUQVRVU19NT1VTRV9BQ1RJVkUgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgV00yMDAwX1NUQVRVU19DQVRfRlJFUV9DT01QTEVURSAgICAgICAgIDB4MjAKKyNkZWZpbmUgV00yMDAwX1NUQVRVU19DQVRfR0FJTl9DT01QTEVURSAgICAgICAgIDB4MTAKKyNkZWZpbmUgV00yMDAwX1NUQVRVU19USEVSTUFMX1NIVVRET1dOX0NPTVBMRVRFIDB4MDgKKyNkZWZpbmUgV00yMDAwX1NUQVRVU19BTkNfRElTQUJMRUQgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgV00yMDAwX1NUQVRVU19QT1dFUl9ET1dOX0NPTVBMRVRFICAgICAgIDB4MDIKKyNkZWZpbmUgV00yMDAwX1NUQVRVU19CT09UX0NPTVBMRVRFICAgICAgICAgICAgIDB4MDEKKworLyogU1lTX01PREVfQ05UUkwgKi8KKyNkZWZpbmUgV00yMDAwX01PREVfQU5BX1NFUV9JTkNMVURFIDB4ODAKKyNkZWZpbmUgV00yMDAwX01PREVfTU9VU0VfRU5BQkxFICAgIDB4NDAKKyNkZWZpbmUgV00yMDAwX01PREVfQ0FUX0ZSRVFfRU5BQkxFIDB4MjAKKyNkZWZpbmUgV00yMDAwX01PREVfQ0FUX0dBSU5fRU5BQkxFIDB4MTAKKyNkZWZpbmUgV00yMDAwX01PREVfQllQQVNTX0VOVFJZICAgIDB4MDgKKyNkZWZpbmUgV00yMDAwX01PREVfU1RBTkRCWV9FTlRSWSAgIDB4MDQKKyNkZWZpbmUgV00yMDAwX01PREVfVEhFUk1BTF9FTkFCTEUgIDB4MDIKKyNkZWZpbmUgV00yMDAwX01PREVfUE9XRVJfRE9XTiAgICAgIDB4MDEKKworLyogU1lTX0NUTDEgKi8KKyNkZWZpbmUgV00yMDAwX1NZU19TVEJZICAgICAgICAgIDB4MDEKKworLyogU1lTX0NUTDIgKi8KKyNkZWZpbmUgV00yMDAwX01DTEtfRElWMl9FTkFfQ0xSIDB4ODAKKyNkZWZpbmUgV00yMDAwX01DTEtfRElWMl9FTkFfU0VUIDB4NDAKKyNkZWZpbmUgV00yMDAwX0FOQ19FTkdfQ0xSICAgICAgIDB4MjAKKyNkZWZpbmUgV00yMDAwX0FOQ19FTkdfU0VUICAgICAgIDB4MTAKKyNkZWZpbmUgV00yMDAwX0FOQ19JTlRfTl9DTFIgICAgIDB4MDgKKyNkZWZpbmUgV00yMDAwX0FOQ19JTlRfTl9TRVQgICAgIDB4MDQKKyNkZWZpbmUgV00yMDAwX1JBTV9DTFIgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgV00yMDAwX1JBTV9TRVQgICAgICAgICAgIDB4MDEKKworLyogQU5DX1NUQVQgKi8KKyNkZWZpbmUgV00yMDAwX0FOQ19FTkdfSURMRSAgICAgIDB4MDEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODcyNy5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3MjcuYwppbmRleCBkOGZmYmQ2Li42M2EyNTRlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODcyNy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI3LmMKQEAgLTQ0LDIzICs0NCwxNiBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODcyN19kYWkpOwogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODcyN19jb2RlYzsKKwogc3RhdGljIGludCB3bTg3Mjdfc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAJaW50IHJldCA9IDA7CiAKLQljb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNvZGVjID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7Ci0JY29kZWMtPm5hbWUgPSAiV004NzI3IjsKLQljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQljb2RlYy0+ZGFpID0gJndtODcyN19kYWk7Ci0JY29kZWMtPm51bV9kYWkgPSAxOwotCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKwlCVUdfT04oIXdtODcyN19jb2RlYyk7CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204NzI3X2NvZGVjOwogCiAJLyogcmVnaXN0ZXIgcGNtcyAqLwogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CkBAIC04MCwxMiArNzMsOSBAQAogc3RhdGljIGludCB3bTg3Mjdfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAotCWlmIChjb2RlYyA9PSBOVUxMKQotCQlyZXR1cm4gMDsKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwotCWtmcmVlKGNvZGVjKTsKKwogCXJldHVybiAwOwogfQogCkBAIC05OCwxMyArODgsNTUgQEAKIAogc3RhdGljIF9fZGV2aW5pdCBpbnQgd204NzI3X3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQ7CisKKwlpZiAod204NzI3X2NvZGVjKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkFub3RoZXIgV004NzI3IGlzIHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY29kZWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJd204NzI3X2NvZGVjID0gY29kZWM7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjb2RlYyk7CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCWNvZGVjLT5kZXYgPSAmcGRldi0+ZGV2OworCWNvZGVjLT5uYW1lID0gIldNODcyNyI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmRhaSA9ICZ3bTg3MjdfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKwogCXdtODcyN19kYWkuZGV2ID0gJnBkZXYtPmRldjsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWkoJndtODcyN19kYWkpOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBDT0RFQzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg3MjdfZGFpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NvZGVjOworCX0KKworZXJyX2NvZGVjOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CitlcnI6CisJa2ZyZWUoY29kZWMpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IHdtODcyN19wbGF0Zm9ybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZ3bTg3MjdfZGFpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYwppbmRleCAzYTQ5NzgxLi41YTI2MTlkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKQEAgLTQ1Niw2ICs0NTYsOSBAQAogCiAJLyogU3luYyByZWdfY2FjaGUgd2l0aCB0aGUgaGFyZHdhcmUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3MzFfcmVnKTsgaSsrKSB7CisJCWlmIChjYWNoZVtpXSA9PSB3bTg3MzFfcmVnW2ldKQorCQkJY29udGludWU7CisKIAkJZGF0YVswXSA9IChpIDw8IDEpIHwgKChjYWNoZVtpXSA+PiA4KSAmIDB4MDAwMSk7CiAJCWRhdGFbMV0gPSBjYWNoZVtpXSAmIDB4MDBmZjsKIAkJY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKaW5kZXggZDY4NTBkYWNkLi5jMjQ0NGU3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKQEAgLTE1MDcsMTAgKzE1MDcsNiBAQAogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAotCS8qIHdlIG9ubHkgbmVlZCB0byBzdXNwZW5kIGlmIHdlIGFyZSBhIHZhbGlkIGNhcmQgKi8KLQlpZiAoIWNvZGVjLT5jYXJkKQotCQlyZXR1cm4gMDsKLQogCXdtODc1M19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTIzLDEwICsxNTE5LDYgQEAKIAl1OCBkYXRhWzJdOwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCi0JLyogd2Ugb25seSBuZWVkIHRvIHJlc3VtZSBpZiB3ZSBhcmUgYSB2YWxpZCBjYXJkICovCi0JaWYgKCFjb2RlYy0+Y2FyZCkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBTeW5jIHJlZ19jYWNoZSB3aXRoIHRoZSBoYXJkd2FyZSAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc1M19yZWcpOyBpKyspIHsKIAkJaWYgKGkgKyAxID09IFdNODc1M19SRVNFVCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204Nzc2LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc3Ni5jCmluZGV4IGFiMmMwZGEuLjQ0ZTdkOWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204Nzc2LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NzYuYwpAQCAtNDA2LDYgKzQwNiw4IEBACiAKIAkvKiBTeW5jIHJlZ19jYWNoZSB3aXRoIHRoZSBoYXJkd2FyZSAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc3Nl9yZWcpOyBpKyspIHsKKwkJaWYgKGNhY2hlW2ldID09IHdtODc3Nl9yZWdbaV0pCisJCQljb250aW51ZTsKIAkJZGF0YVswXSA9IChpIDw8IDEpIHwgKChjYWNoZVtpXSA+PiA4KSAmIDB4MDAwMSk7CiAJCWRhdGFbMV0gPSBjYWNoZVtpXSAmIDB4MDBmZjsKIAkJY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzZTQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMKQEAgLTAsMCArMSwyNjU2IEBACisvKgorICogd204OTA0LmMgIC0tICBXTTg5MDQgQUxTQSBTb0MgQXVkaW8gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIHBsYworICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL3dtODkwNC5oPgorCisjaW5jbHVkZSAid204OTA0LmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204OTA0X2NvZGVjOworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTA0OworCitlbnVtIHdtODkwNF90eXBlIHsKKwlXTTg5MDQsCisJV004OTEyLAorfTsKKworI2RlZmluZSBXTTg5MDRfTlVNX0RDU19DSEFOTkVMUyA0CisKKyNkZWZpbmUgV004OTA0X05VTV9TVVBQTElFUyA1CitzdGF0aWMgY29uc3QgY2hhciAqd204OTA0X3N1cHBseV9uYW1lc1tXTTg5MDRfTlVNX1NVUFBMSUVTXSA9IHsKKwkiRENWREQiLAorCSJEQlZERCIsCisJIkFWREQiLAorCSJDUFZERCIsCisJIk1JQ1ZERCIsCit9OworCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB3bTg5MDRfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdTE2IHJlZ19jYWNoZVtXTTg5MDRfTUFYX1JFR0lTVEVSICsgMV07CisKKwllbnVtIHdtODkwNF90eXBlIGRldnR5cGU7CisKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tXTTg5MDRfTlVNX1NVUFBMSUVTXTsKKworCXN0cnVjdCB3bTg5MDRfcGRhdGEgKnBkYXRhOworCisJaW50IGRlZW1waDsKKworCS8qIFBsYXRmb3JtIHByb3ZpZGVkIERSQyBjb25maWd1cmF0aW9uICovCisJY29uc3QgY2hhciAqKmRyY190ZXh0czsKKwlpbnQgZHJjX2NmZzsKKwlzdHJ1Y3Qgc29jX2VudW0gZHJjX2VudW07CisKKwkvKiBQbGF0Zm9ybSBwcm92aWRlZCBSZVR1bmUgbW9iaWxlIGNvbmZpZ3VyYXRpb24gKi8KKwlpbnQgbnVtX3JldHVuZV9tb2JpbGVfdGV4dHM7CisJY29uc3QgY2hhciAqKnJldHVuZV9tb2JpbGVfdGV4dHM7CisJaW50IHJldHVuZV9tb2JpbGVfY2ZnOworCXN0cnVjdCBzb2NfZW51bSByZXR1bmVfbW9iaWxlX2VudW07CisKKwkvKiBGTEwgc2V0dXAgKi8KKwlpbnQgZmxsX3NyYzsKKwlpbnQgZmxsX2ZyZWY7CisJaW50IGZsbF9mb3V0OworCisJLyogQ2xvY2tpbmcgY29uZmlndXJhdGlvbiAqLworCXVuc2lnbmVkIGludCBtY2xrX3JhdGU7CisJaW50IHN5c2Nsa19zcmM7CisJdW5zaWduZWQgaW50IHN5c2Nsa19yYXRlOworCisJaW50IHRkbV93aWR0aDsKKwlpbnQgdGRtX3Nsb3RzOworCWludCBiY2xrOworCWludCBmczsKKworCS8qIERDIHNlcnZvIGNvbmZpZ3VyYXRpb24gLSBjYWNoZWQgb2Zmc2V0IHZhbHVlcyAqLworCWludCBkY3Nfc3RhdGVbV004OTA0X05VTV9EQ1NfQ0hBTk5FTFNdOworfTsKKworc3RhdGljIGNvbnN0IHUxNiB3bTg5MDRfcmVnW1dNODkwNF9NQVhfUkVHSVNURVIgKyAxXSA9IHsKKwkweDg5MDQsICAgICAvKiBSMCAgIC0gU1cgUmVzZXQgYW5kIElEICovCisJMHgwMDAwLCAgICAgLyogUjEgICAtIFJldmlzaW9uICovCisJMHgwMDAwLCAgICAgLyogUjIgKi8KKwkweDAwMDAsICAgICAvKiBSMyAqLworCTB4MDAxOCwgICAgIC8qIFI0ICAgLSBCaWFzIENvbnRyb2wgMCAqLworCTB4MDAwMCwgICAgIC8qIFI1ICAgLSBWTUlEIENvbnRyb2wgMCAqLworCTB4MDAwMCwgICAgIC8qIFI2ICAgLSBNaWMgQmlhcyBDb250cm9sIDAgKi8KKwkweDAwMDAsICAgICAvKiBSNyAgIC0gTWljIEJpYXMgQ29udHJvbCAxICovCisJMHgwMDAxLCAgICAgLyogUjggICAtIEFuYWxvZ3VlIERBQyAwICovCisJMHg5Njk2LCAgICAgLyogUjkgICAtIG1pYyBGaWx0ZXIgQ29udHJvbCAqLworCTB4MDAwMSwgICAgIC8qIFIxMCAgLSBBbmFsb2d1ZSBBREMgMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMiAgLSBQb3dlciBNYW5hZ2VtZW50IDAgKi8KKwkweDAwMDAsICAgICAvKiBSMTMgKi8KKwkweDAwMDAsICAgICAvKiBSMTQgIC0gUG93ZXIgTWFuYWdlbWVudCAyICovCisJMHgwMDAwLCAgICAgLyogUjE1ICAtIFBvd2VyIE1hbmFnZW1lbnQgMyAqLworCTB4MDAwMCwgICAgIC8qIFIxNiAqLworCTB4MDAwMCwgICAgIC8qIFIxNyAqLworCTB4MDAwMCwgICAgIC8qIFIxOCAgLSBQb3dlciBNYW5hZ2VtZW50IDYgKi8KKwkweDAwMDAsICAgICAvKiBSMTkgKi8KKwkweDk0NUUsICAgICAvKiBSMjAgIC0gQ2xvY2sgUmF0ZXMgMCAqLworCTB4MEMwNSwgICAgIC8qIFIyMSAgLSBDbG9jayBSYXRlcyAxICovCisJMHgwMDA2LCAgICAgLyogUjIyICAtIENsb2NrIFJhdGVzIDIgKi8KKwkweDAwMDAsICAgICAvKiBSMjMgKi8KKwkweDAwNTAsICAgICAvKiBSMjQgIC0gQXVkaW8gSW50ZXJmYWNlIDAgKi8KKwkweDAwMEEsICAgICAvKiBSMjUgIC0gQXVkaW8gSW50ZXJmYWNlIDEgKi8KKwkweDAwRTQsICAgICAvKiBSMjYgIC0gQXVkaW8gSW50ZXJmYWNlIDIgKi8KKwkweDAwNDAsICAgICAvKiBSMjcgIC0gQXVkaW8gSW50ZXJmYWNlIDMgKi8KKwkweDAwMDAsICAgICAvKiBSMjggKi8KKwkweDAwMDAsICAgICAvKiBSMjkgKi8KKwkweDAwQzAsICAgICAvKiBSMzAgIC0gREFDIERpZ2l0YWwgVm9sdW1lIExlZnQgKi8KKwkweDAwQzAsICAgICAvKiBSMzEgIC0gREFDIERpZ2l0YWwgVm9sdW1lIFJpZ2h0ICovCisJMHgwMDAwLCAgICAgLyogUjMyICAtIERBQyBEaWdpdGFsIDAgKi8KKwkweDAwMDgsICAgICAvKiBSMzMgIC0gREFDIERpZ2l0YWwgMSAqLworCTB4MDAwMCwgICAgIC8qIFIzNCAqLworCTB4MDAwMCwgICAgIC8qIFIzNSAqLworCTB4MDBDMCwgICAgIC8qIFIzNiAgLSBBREMgRGlnaXRhbCBWb2x1bWUgTGVmdCAqLworCTB4MDBDMCwgICAgIC8qIFIzNyAgLSBBREMgRGlnaXRhbCBWb2x1bWUgUmlnaHQgKi8KKwkweDAwMTAsICAgICAvKiBSMzggIC0gQURDIERpZ2l0YWwgMCAqLworCTB4MDAwMCwgICAgIC8qIFIzOSAgLSBEaWdpdGFsIE1pY3JvcGhvbmUgMCAqLworCTB4MDFBRiwgICAgIC8qIFI0MCAgLSBEUkMgMCAqLworCTB4MzI0OCwgICAgIC8qIFI0MSAgLSBEUkMgMSAqLworCTB4MDAwMCwgICAgIC8qIFI0MiAgLSBEUkMgMiAqLworCTB4MDAwMCwgICAgIC8qIFI0MyAgLSBEUkMgMyAqLworCTB4MDA4NSwgICAgIC8qIFI0NCAgLSBBbmFsb2d1ZSBMZWZ0IElucHV0IDAgKi8KKwkweDAwODUsICAgICAvKiBSNDUgIC0gQW5hbG9ndWUgUmlnaHQgSW5wdXQgMCAqLworCTB4MDA0NCwgICAgIC8qIFI0NiAgLSBBbmFsb2d1ZSBMZWZ0IElucHV0IDEgKi8KKwkweDAwNDQsICAgICAvKiBSNDcgIC0gQW5hbG9ndWUgUmlnaHQgSW5wdXQgMSAqLworCTB4MDAwMCwgICAgIC8qIFI0OCAqLworCTB4MDAwMCwgICAgIC8qIFI0OSAqLworCTB4MDAwMCwgICAgIC8qIFI1MCAqLworCTB4MDAwMCwgICAgIC8qIFI1MSAqLworCTB4MDAwMCwgICAgIC8qIFI1MiAqLworCTB4MDAwMCwgICAgIC8qIFI1MyAqLworCTB4MDAwMCwgICAgIC8qIFI1NCAqLworCTB4MDAwMCwgICAgIC8qIFI1NSAqLworCTB4MDAwMCwgICAgIC8qIFI1NiAqLworCTB4MDAyRCwgICAgIC8qIFI1NyAgLSBBbmFsb2d1ZSBPVVQxIExlZnQgKi8KKwkweDAwMkQsICAgICAvKiBSNTggIC0gQW5hbG9ndWUgT1VUMSBSaWdodCAqLworCTB4MDAzOSwgICAgIC8qIFI1OSAgLSBBbmFsb2d1ZSBPVVQyIExlZnQgKi8KKwkweDAwMzksICAgICAvKiBSNjAgIC0gQW5hbG9ndWUgT1VUMiBSaWdodCAqLworCTB4MDAwMCwgICAgIC8qIFI2MSAgLSBBbmFsb2d1ZSBPVVQxMiBaQyAqLworCTB4MDAwMCwgICAgIC8qIFI2MiAqLworCTB4MDAwMCwgICAgIC8qIFI2MyAqLworCTB4MDAwMCwgICAgIC8qIFI2NCAqLworCTB4MDAwMCwgICAgIC8qIFI2NSAqLworCTB4MDAwMCwgICAgIC8qIFI2NiAqLworCTB4MDAwMCwgICAgIC8qIFI2NyAgLSBEQyBTZXJ2byAwICovCisJMHgwMDAwLCAgICAgLyogUjY4ICAtIERDIFNlcnZvIDEgKi8KKwkweEFBQUEsICAgICAvKiBSNjkgIC0gREMgU2Vydm8gMiAqLworCTB4MDAwMCwgICAgIC8qIFI3MCAqLworCTB4QUFBQSwgICAgIC8qIFI3MSAgLSBEQyBTZXJ2byA0ICovCisJMHhBQUFBLCAgICAgLyogUjcyICAtIERDIFNlcnZvIDUgKi8KKwkweDAwMDAsICAgICAvKiBSNzMgIC0gREMgU2Vydm8gNiAqLworCTB4MDAwMCwgICAgIC8qIFI3NCAgLSBEQyBTZXJ2byA3ICovCisJMHgwMDAwLCAgICAgLyogUjc1ICAtIERDIFNlcnZvIDggKi8KKwkweDAwMDAsICAgICAvKiBSNzYgIC0gREMgU2Vydm8gOSAqLworCTB4MDAwMCwgICAgIC8qIFI3NyAgLSBEQyBTZXJ2byBSZWFkYmFjayAwICovCisJMHgwMDAwLCAgICAgLyogUjc4ICovCisJMHgwMDAwLCAgICAgLyogUjc5ICovCisJMHgwMDAwLCAgICAgLyogUjgwICovCisJMHgwMDAwLCAgICAgLyogUjgxICovCisJMHgwMDAwLCAgICAgLyogUjgyICovCisJMHgwMDAwLCAgICAgLyogUjgzICovCisJMHgwMDAwLCAgICAgLyogUjg0ICovCisJMHgwMDAwLCAgICAgLyogUjg1ICovCisJMHgwMDAwLCAgICAgLyogUjg2ICovCisJMHgwMDAwLCAgICAgLyogUjg3ICovCisJMHgwMDAwLCAgICAgLyogUjg4ICovCisJMHgwMDAwLCAgICAgLyogUjg5ICovCisJMHgwMDAwLCAgICAgLyogUjkwICAtIEFuYWxvZ3VlIEhQIDAgKi8KKwkweDAwMDAsICAgICAvKiBSOTEgKi8KKwkweDAwMDAsICAgICAvKiBSOTIgKi8KKwkweDAwMDAsICAgICAvKiBSOTMgKi8KKwkweDAwMDAsICAgICAvKiBSOTQgIC0gQW5hbG9ndWUgTGluZW91dCAwICovCisJMHgwMDAwLCAgICAgLyogUjk1ICovCisJMHgwMDAwLCAgICAgLyogUjk2ICovCisJMHgwMDAwLCAgICAgLyogUjk3ICovCisJMHgwMDAwLCAgICAgLyogUjk4ICAtIENoYXJnZSBQdW1wIDAgKi8KKwkweDAwMDAsICAgICAvKiBSOTkgKi8KKwkweDAwMDAsICAgICAvKiBSMTAwICovCisJMHgwMDAwLCAgICAgLyogUjEwMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTAzICovCisJMHgwMDA0LCAgICAgLyogUjEwNCAtIENsYXNzIFcgMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMDUgKi8KKwkweDAwMDAsICAgICAvKiBSMTA2ICovCisJMHgwMDAwLCAgICAgLyogUjEwNyAqLworCTB4MDAwMCwgICAgIC8qIFIxMDggLSBXcml0ZSBTZXF1ZW5jZXIgMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMDkgLSBXcml0ZSBTZXF1ZW5jZXIgMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTAgLSBXcml0ZSBTZXF1ZW5jZXIgMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMTEgLSBXcml0ZSBTZXF1ZW5jZXIgMyAqLworCTB4MDAwMCwgICAgIC8qIFIxMTIgLSBXcml0ZSBTZXF1ZW5jZXIgNCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTMgKi8KKwkweDAwMDAsICAgICAvKiBSMTE0ICovCisJMHgwMDAwLCAgICAgLyogUjExNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTYgLSBGTEwgQ29udHJvbCAxICovCisJMHgwMDA3LCAgICAgLyogUjExNyAtIEZMTCBDb250cm9sIDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTE4IC0gRkxMIENvbnRyb2wgMyAqLworCTB4MkVFMCwgICAgIC8qIFIxMTkgLSBGTEwgQ29udHJvbCA0ICovCisJMHgwMDA0LCAgICAgLyogUjEyMCAtIEZMTCBDb250cm9sIDUgKi8KKwkweDAwMTQsICAgICAvKiBSMTIxIC0gR1BJTyBDb250cm9sIDEgKi8KKwkweDAwMTAsICAgICAvKiBSMTIyIC0gR1BJTyBDb250cm9sIDIgKi8KKwkweDAwMTAsICAgICAvKiBSMTIzIC0gR1BJTyBDb250cm9sIDMgKi8KKwkweDAwMDAsICAgICAvKiBSMTI0IC0gR1BJTyBDb250cm9sIDQgKi8KKwkweDAwMDAsICAgICAvKiBSMTI1ICovCisJMHgwMDAwLCAgICAgLyogUjEyNiAtIERpZ2l0YWwgUHVsbHMgKi8KKwkweDAwMDAsICAgICAvKiBSMTI3IC0gSW50ZXJydXB0IFN0YXR1cyAqLworCTB4RkZGRiwgICAgIC8qIFIxMjggLSBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMTI5IC0gSW50ZXJydXB0IFBvbGFyaXR5ICovCisJMHgwMDAwLCAgICAgLyogUjEzMCAtIEludGVycnVwdCBEZWJvdW5jZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzEgKi8KKwkweDAwMDAsICAgICAvKiBSMTMyICovCisJMHgwMDAwLCAgICAgLyogUjEzMyAqLworCTB4MDAwMCwgICAgIC8qIFIxMzQgLSBFUTEgKi8KKwkweDAwMEMsICAgICAvKiBSMTM1IC0gRVEyICovCisJMHgwMDBDLCAgICAgLyogUjEzNiAtIEVRMyAqLworCTB4MDAwQywgICAgIC8qIFIxMzcgLSBFUTQgKi8KKwkweDAwMEMsICAgICAvKiBSMTM4IC0gRVE1ICovCisJMHgwMDBDLCAgICAgLyogUjEzOSAtIEVRNiAqLworCTB4MEZDQSwgICAgIC8qIFIxNDAgLSBFUTcgKi8KKwkweDA0MDAsICAgICAvKiBSMTQxIC0gRVE4ICovCisJMHgwMEQ4LCAgICAgLyogUjE0MiAtIEVROSAqLworCTB4MUVCNSwgICAgIC8qIFIxNDMgLSBFUTEwICovCisJMHhGMTQ1LCAgICAgLyogUjE0NCAtIEVRMTEgKi8KKwkweDBCNzUsICAgICAvKiBSMTQ1IC0gRVExMiAqLworCTB4MDFDNSwgICAgIC8qIFIxNDYgLSBFUTEzICovCisJMHgxQzU4LCAgICAgLyogUjE0NyAtIEVRMTQgKi8KKwkweEYzNzMsICAgICAvKiBSMTQ4IC0gRVExNSAqLworCTB4MEE1NCwgICAgIC8qIFIxNDkgLSBFUTE2ICovCisJMHgwNTU4LCAgICAgLyogUjE1MCAtIEVRMTcgKi8KKwkweDE2OEUsICAgICAvKiBSMTUxIC0gRVExOCAqLworCTB4RjgyOSwgICAgIC8qIFIxNTIgLSBFUTE5ICovCisJMHgwN0FELCAgICAgLyogUjE1MyAtIEVRMjAgKi8KKwkweDExMDMsICAgICAvKiBSMTU0IC0gRVEyMSAqLworCTB4MDU2NCwgICAgIC8qIFIxNTUgLSBFUTIyICovCisJMHgwNTU5LCAgICAgLyogUjE1NiAtIEVRMjMgKi8KKwkweDQwMDAsICAgICAvKiBSMTU3IC0gRVEyNCAqLworCTB4MDAwMCwgICAgIC8qIFIxNTggKi8KKwkweDAwMDAsICAgICAvKiBSMTU5ICovCisJMHgwMDAwLCAgICAgLyogUjE2MCAqLworCTB4MDAwMCwgICAgIC8qIFIxNjEgLSBDb250cm9sIEludGVyZmFjZSBUZXN0IDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTYyICovCisJMHgwMDAwLCAgICAgLyogUjE2MyAqLworCTB4MDAwMCwgICAgIC8qIFIxNjQgKi8KKwkweDAwMDAsICAgICAvKiBSMTY1ICovCisJMHgwMDAwLCAgICAgLyogUjE2NiAqLworCTB4MDAwMCwgICAgIC8qIFIxNjcgKi8KKwkweDAwMDAsICAgICAvKiBSMTY4ICovCisJMHgwMDAwLCAgICAgLyogUjE2OSAqLworCTB4MDAwMCwgICAgIC8qIFIxNzAgKi8KKwkweDAwMDAsICAgICAvKiBSMTcxICovCisJMHgwMDAwLCAgICAgLyogUjE3MiAqLworCTB4MDAwMCwgICAgIC8qIFIxNzMgKi8KKwkweDAwMDAsICAgICAvKiBSMTc0ICovCisJMHgwMDAwLCAgICAgLyogUjE3NSAqLworCTB4MDAwMCwgICAgIC8qIFIxNzYgKi8KKwkweDAwMDAsICAgICAvKiBSMTc3ICovCisJMHgwMDAwLCAgICAgLyogUjE3OCAqLworCTB4MDAwMCwgICAgIC8qIFIxNzkgKi8KKwkweDAwMDAsICAgICAvKiBSMTgwICovCisJMHgwMDAwLCAgICAgLyogUjE4MSAqLworCTB4MDAwMCwgICAgIC8qIFIxODIgKi8KKwkweDAwMDAsICAgICAvKiBSMTgzICovCisJMHgwMDAwLCAgICAgLyogUjE4NCAqLworCTB4MDAwMCwgICAgIC8qIFIxODUgKi8KKwkweDAwMDAsICAgICAvKiBSMTg2ICovCisJMHgwMDAwLCAgICAgLyogUjE4NyAqLworCTB4MDAwMCwgICAgIC8qIFIxODggKi8KKwkweDAwMDAsICAgICAvKiBSMTg5ICovCisJMHgwMDAwLCAgICAgLyogUjE5MCAqLworCTB4MDAwMCwgICAgIC8qIFIxOTEgKi8KKwkweDAwMDAsICAgICAvKiBSMTkyICovCisJMHgwMDAwLCAgICAgLyogUjE5MyAqLworCTB4MDAwMCwgICAgIC8qIFIxOTQgKi8KKwkweDAwMDAsICAgICAvKiBSMTk1ICovCisJMHgwMDAwLCAgICAgLyogUjE5NiAqLworCTB4MDAwMCwgICAgIC8qIFIxOTcgKi8KKwkweDAwMDAsICAgICAvKiBSMTk4ICovCisJMHgwMDAwLCAgICAgLyogUjE5OSAqLworCTB4MDAwMCwgICAgIC8qIFIyMDAgKi8KKwkweDAwMDAsICAgICAvKiBSMjAxICovCisJMHgwMDAwLCAgICAgLyogUjIwMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMDMgKi8KKwkweDAwMDAsICAgICAvKiBSMjA0IC0gQW5hbG9ndWUgT3V0cHV0IEJpYXMgMCAqLworCTB4MDAwMCwgICAgIC8qIFIyMDUgKi8KKwkweDAwMDAsICAgICAvKiBSMjA2ICovCisJMHgwMDAwLCAgICAgLyogUjIwNyAqLworCTB4MDAwMCwgICAgIC8qIFIyMDggKi8KKwkweDAwMDAsICAgICAvKiBSMjA5ICovCisJMHgwMDAwLCAgICAgLyogUjIxMCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTEgKi8KKwkweDAwMDAsICAgICAvKiBSMjEyICovCisJMHgwMDAwLCAgICAgLyogUjIxMyAqLworCTB4MDAwMCwgICAgIC8qIFIyMTQgKi8KKwkweDAwMDAsICAgICAvKiBSMjE1ICovCisJMHgwMDAwLCAgICAgLyogUjIxNiAqLworCTB4MDAwMCwgICAgIC8qIFIyMTcgKi8KKwkweDAwMDAsICAgICAvKiBSMjE4ICovCisJMHgwMDAwLCAgICAgLyogUjIxOSAqLworCTB4MDAwMCwgICAgIC8qIFIyMjAgKi8KKwkweDAwMDAsICAgICAvKiBSMjIxICovCisJMHgwMDAwLCAgICAgLyogUjIyMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMjMgKi8KKwkweDAwMDAsICAgICAvKiBSMjI0ICovCisJMHgwMDAwLCAgICAgLyogUjIyNSAqLworCTB4MDAwMCwgICAgIC8qIFIyMjYgKi8KKwkweDAwMDAsICAgICAvKiBSMjI3ICovCisJMHgwMDAwLCAgICAgLyogUjIyOCAqLworCTB4MDAwMCwgICAgIC8qIFIyMjkgKi8KKwkweDAwMDAsICAgICAvKiBSMjMwICovCisJMHgwMDAwLCAgICAgLyogUjIzMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMzIgKi8KKwkweDAwMDAsICAgICAvKiBSMjMzICovCisJMHgwMDAwLCAgICAgLyogUjIzNCAqLworCTB4MDAwMCwgICAgIC8qIFIyMzUgKi8KKwkweDAwMDAsICAgICAvKiBSMjM2ICovCisJMHgwMDAwLCAgICAgLyogUjIzNyAqLworCTB4MDAwMCwgICAgIC8qIFIyMzggKi8KKwkweDAwMDAsICAgICAvKiBSMjM5ICovCisJMHgwMDAwLCAgICAgLyogUjI0MCAqLworCTB4MDAwMCwgICAgIC8qIFIyNDEgKi8KKwkweDAwMDAsICAgICAvKiBSMjQyICovCisJMHgwMDAwLCAgICAgLyogUjI0MyAqLworCTB4MDAwMCwgICAgIC8qIFIyNDQgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ1ICovCisJMHgwMDAwLCAgICAgLyogUjI0NiAqLworCTB4MDAwMCwgICAgIC8qIFIyNDcgLSBGTEwgTkNPIFRlc3QgMCAqLworCTB4MDAxOSwgICAgIC8qIFIyNDggLSBGTEwgTkNPIFRlc3QgMSAqLworfTsKKworc3RhdGljIHN0cnVjdCB7CisJaW50IHJlYWRhYmxlOworCWludCB3cml0YWJsZTsKKwlpbnQgdm9sOworfSB3bTg5MDRfYWNjZXNzW10gPSB7CisJeyAweEZGRkYsIDB4RkZGRiwgMSB9LCAvKiBSMCAgIC0gU1cgUmVzZXQgYW5kIElEICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMSAgIC0gUmV2aXNpb24gKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMyAqLworCXsgMHgwMDFGLCAweDAwMUYsIDAgfSwgLyogUjQgICAtIEJpYXMgQ29udHJvbCAwICovCisJeyAweDAwNDcsIDB4MDA0NywgMCB9LCAvKiBSNSAgIC0gVk1JRCBDb250cm9sIDAgKi8KKwl7IDB4MDA3RiwgMHgwMDdGLCAwIH0sIC8qIFI2ICAgLSBNaWMgQmlhcyBDb250cm9sIDAgKi8KKwl7IDB4QzAwNywgMHhDMDA3LCAwIH0sIC8qIFI3ICAgLSBNaWMgQmlhcyBDb250cm9sIDEgKi8KKwl7IDB4MDAxRSwgMHgwMDFFLCAwIH0sIC8qIFI4ICAgLSBBbmFsb2d1ZSBEQUMgMCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjkgICAtIG1pYyBGaWx0ZXIgQ29udHJvbCAqLworCXsgMHgwMDAxLCAweDAwMDEsIDAgfSwgLyogUjEwICAtIEFuYWxvZ3VlIEFEQyAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTEgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAwIH0sIC8qIFIxMiAgLSBQb3dlciBNYW5hZ2VtZW50IDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMyAqLworCXsgMHgwMDAzLCAweDAwMDMsIDAgfSwgLyogUjE0ICAtIFBvd2VyIE1hbmFnZW1lbnQgMiAqLworCXsgMHgwMDAzLCAweDAwMDMsIDAgfSwgLyogUjE1ICAtIFBvd2VyIE1hbmFnZW1lbnQgMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTcgKi8KKwl7IDB4MDAwRiwgMHgwMDBGLCAwIH0sIC8qIFIxOCAgLSBQb3dlciBNYW5hZ2VtZW50IDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxOSAqLworCXsgMHg3MDAxLCAweDcwMDEsIDAgfSwgLyogUjIwICAtIENsb2NrIFJhdGVzIDAgKi8KKwl7IDB4M0MwNywgMHgzQzA3LCAwIH0sIC8qIFIyMSAgLSBDbG9jayBSYXRlcyAxICovCisJeyAweEQwMEYsIDB4RDAwRiwgMCB9LCAvKiBSMjIgIC0gQ2xvY2sgUmF0ZXMgMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIzICovCisJeyAweDFGRkYsIDB4MUZGRiwgMCB9LCAvKiBSMjQgIC0gQXVkaW8gSW50ZXJmYWNlIDAgKi8KKwl7IDB4M0RERiwgMHgzRERGLCAwIH0sIC8qIFIyNSAgLSBBdWRpbyBJbnRlcmZhY2UgMSAqLworCXsgMHgwRjFGLCAweDBGMUYsIDAgfSwgLyogUjI2ICAtIEF1ZGlvIEludGVyZmFjZSAyICovCisJeyAweDBGRkYsIDB4MEZGRiwgMCB9LCAvKiBSMjcgIC0gQXVkaW8gSW50ZXJmYWNlIDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjI5ICovCisJeyAweDAwRkYsIDB4MDFGRiwgMCB9LCAvKiBSMzAgIC0gREFDIERpZ2l0YWwgVm9sdW1lIExlZnQgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAwIH0sIC8qIFIzMSAgLSBEQUMgRGlnaXRhbCBWb2x1bWUgUmlnaHQgKi8KKwl7IDB4MEZGRiwgMHgwRkZGLCAwIH0sIC8qIFIzMiAgLSBEQUMgRGlnaXRhbCAwICovCisJeyAweDFFNEUsIDB4MUU0RSwgMCB9LCAvKiBSMzMgIC0gREFDIERpZ2l0YWwgMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMzUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAwIH0sIC8qIFIzNiAgLSBBREMgRGlnaXRhbCBWb2x1bWUgTGVmdCAqLworCXsgMHgwMEZGLCAweDAxRkYsIDAgfSwgLyogUjM3ICAtIEFEQyBEaWdpdGFsIFZvbHVtZSBSaWdodCAqLworCXsgMHgwMDczLCAweDAwNzMsIDAgfSwgLyogUjM4ICAtIEFEQyBEaWdpdGFsIDAgKi8KKwl7IDB4MTgwMCwgMHgxODAwLCAwIH0sIC8qIFIzOSAgLSBEaWdpdGFsIE1pY3JvcGhvbmUgMCAqLworCXsgMHhERkVGLCAweERGRUYsIDAgfSwgLyogUjQwICAtIERSQyAwICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSNDEgIC0gRFJDIDEgKi8KKwl7IDB4MDAzRiwgMHgwMDNGLCAwIH0sIC8qIFI0MiAgLSBEUkMgMiAqLworCXsgMHgwN0ZGLCAweDA3RkYsIDAgfSwgLyogUjQzICAtIERSQyAzICovCisJeyAweDAwOUYsIDB4MDA5RiwgMCB9LCAvKiBSNDQgIC0gQW5hbG9ndWUgTGVmdCBJbnB1dCAwICovCisJeyAweDAwOUYsIDB4MDA5RiwgMCB9LCAvKiBSNDUgIC0gQW5hbG9ndWUgUmlnaHQgSW5wdXQgMCAqLworCXsgMHgwMDdGLCAweDAwN0YsIDAgfSwgLyogUjQ2ICAtIEFuYWxvZ3VlIExlZnQgSW5wdXQgMSAqLworCXsgMHgwMDdGLCAweDAwN0YsIDAgfSwgLyogUjQ3ICAtIEFuYWxvZ3VlIFJpZ2h0IElucHV0IDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNTYgKi8KKwl7IDB4MDE3RiwgMHgwMUZGLCAwIH0sIC8qIFI1NyAgLSBBbmFsb2d1ZSBPVVQxIExlZnQgKi8KKwl7IDB4MDE3RiwgMHgwMUZGLCAwIH0sIC8qIFI1OCAgLSBBbmFsb2d1ZSBPVVQxIFJpZ2h0ICovCisJeyAweDAxN0YsIDB4MDFGRiwgMCB9LCAvKiBSNTkgIC0gQW5hbG9ndWUgT1VUMiBMZWZ0ICovCisJeyAweDAxN0YsIDB4MDFGRiwgMCB9LCAvKiBSNjAgIC0gQW5hbG9ndWUgT1VUMiBSaWdodCAqLworCXsgMHgwMDBGLCAweDAwMEYsIDAgfSwgLyogUjYxICAtIEFuYWxvZ3VlIE9VVDEyIFpDICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI2NiAqLworCXsgMHgwMDBGLCAweDAwMEYsIDAgfSwgLyogUjY3ICAtIERDIFNlcnZvIDAgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAxIH0sIC8qIFI2OCAgLSBEQyBTZXJ2byAxICovCisJeyAweDBGMEYsIDB4MEYwRiwgMCB9LCAvKiBSNjkgIC0gREMgU2Vydm8gMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjcwICovCisJeyAweDAwN0YsIDB4MDA3RiwgMCB9LCAvKiBSNzEgIC0gREMgU2Vydm8gNCAqLworCXsgMHgwMDdGLCAweDAwN0YsIDAgfSwgLyogUjcyICAtIERDIFNlcnZvIDUgKi8KKwl7IDB4MDBGRiwgMHgwMEZGLCAxIH0sIC8qIFI3MyAgLSBEQyBTZXJ2byA2ICovCisJeyAweDAwRkYsIDB4MDBGRiwgMSB9LCAvKiBSNzQgIC0gREMgU2Vydm8gNyAqLworCXsgMHgwMEZGLCAweDAwRkYsIDEgfSwgLyogUjc1ICAtIERDIFNlcnZvIDggKi8KKwl7IDB4MDBGRiwgMHgwMEZGLCAxIH0sIC8qIFI3NiAgLSBEQyBTZXJ2byA5ICovCisJeyAweDBGRkYsIDB4MDAwMCwgMSB9LCAvKiBSNzcgIC0gREMgU2Vydm8gUmVhZGJhY2sgMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI4OSAqLworCXsgMHgwMEZGLCAweDAwRkYsIDAgfSwgLyogUjkwICAtIEFuYWxvZ3VlIEhQIDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSOTMgKi8KKwl7IDB4MDBGRiwgMHgwMEZGLCAwIH0sIC8qIFI5NCAgLSBBbmFsb2d1ZSBMaW5lb3V0IDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSOTcgKi8KKwl7IDB4MDAwMSwgMHgwMDAxLCAwIH0sIC8qIFI5OCAgLSBDaGFyZ2UgUHVtcCAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMDMgKi8KKwl7IDB4MDAwMSwgMHgwMDAxLCAwIH0sIC8qIFIxMDQgLSBDbGFzcyBXIDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMDcgKi8KKwl7IDB4MDExRiwgMHgwMTFGLCAwIH0sIC8qIFIxMDggLSBXcml0ZSBTZXF1ZW5jZXIgMCAqLworCXsgMHg3RkZGLCAweDdGRkYsIDAgfSwgLyogUjEwOSAtIFdyaXRlIFNlcXVlbmNlciAxICovCisJeyAweDRGRkYsIDB4NEZGRiwgMCB9LCAvKiBSMTEwIC0gV3JpdGUgU2VxdWVuY2VyIDIgKi8KKwl7IDB4MDAzRiwgMHgwMzNGLCAwIH0sIC8qIFIxMTEgLSBXcml0ZSBTZXF1ZW5jZXIgMyAqLworCXsgMHgwM0YxLCAweDAwMDAsIDAgfSwgLyogUjExMiAtIFdyaXRlIFNlcXVlbmNlciA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTE1ICovCisJeyAweDAwMDcsIDB4MDAwNywgMCB9LCAvKiBSMTE2IC0gRkxMIENvbnRyb2wgMSAqLworCXsgMHgzRjc3LCAweDNGNzcsIDAgfSwgLyogUjExNyAtIEZMTCBDb250cm9sIDIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxMTggLSBGTEwgQ29udHJvbCAzICovCisJeyAweDdGRUYsIDB4N0ZFRiwgMCB9LCAvKiBSMTE5IC0gRkxMIENvbnRyb2wgNCAqLworCXsgMHgwMDFCLCAweDAwMUIsIDAgfSwgLyogUjEyMCAtIEZMTCBDb250cm9sIDUgKi8KKwl7IDB4MDAzRiwgMHgwMDNGLCAwIH0sIC8qIFIxMjEgLSBHUElPIENvbnRyb2wgMSAqLworCXsgMHgwMDNGLCAweDAwM0YsIDAgfSwgLyogUjEyMiAtIEdQSU8gQ29udHJvbCAyICovCisJeyAweDAwM0YsIDB4MDAzRiwgMCB9LCAvKiBSMTIzIC0gR1BJTyBDb250cm9sIDMgKi8KKwl7IDB4MDM4RiwgMHgwMzhGLCAwIH0sIC8qIFIxMjQgLSBHUElPIENvbnRyb2wgNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjEyNSAqLworCXsgMHgwMEZGLCAweDAwRkYsIDAgfSwgLyogUjEyNiAtIERpZ2l0YWwgUHVsbHMgKi8KKwl7IDB4MDdGRiwgMHgwM0ZGLCAxIH0sIC8qIFIxMjcgLSBJbnRlcnJ1cHQgU3RhdHVzICovCisJeyAweDAzRkYsIDB4MDNGRiwgMCB9LCAvKiBSMTI4IC0gSW50ZXJydXB0IFN0YXR1cyBNYXNrICovCisJeyAweDAzRkYsIDB4MDNGRiwgMCB9LCAvKiBSMTI5IC0gSW50ZXJydXB0IFBvbGFyaXR5ICovCisJeyAweDAzRkYsIDB4MDNGRiwgMCB9LCAvKiBSMTMwIC0gSW50ZXJydXB0IERlYm91bmNlICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTMzICovCisJeyAweDAwMDEsIDB4MDAwMSwgMCB9LCAvKiBSMTM0IC0gRVExICovCisJeyAweDAwMUYsIDB4MDAxRiwgMCB9LCAvKiBSMTM1IC0gRVEyICovCisJeyAweDAwMUYsIDB4MDAxRiwgMCB9LCAvKiBSMTM2IC0gRVEzICovCisJeyAweDAwMUYsIDB4MDAxRiwgMCB9LCAvKiBSMTM3IC0gRVE0ICovCisJeyAweDAwMUYsIDB4MDAxRiwgMCB9LCAvKiBSMTM4IC0gRVE1ICovCisJeyAweDAwMUYsIDB4MDAxRiwgMCB9LCAvKiBSMTM5IC0gRVE2ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQwIC0gRVE3ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQxIC0gRVE4ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQyIC0gRVE5ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQzIC0gRVExMCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE0NCAtIEVRMTEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNDUgLSBFUTEyICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQ2IC0gRVExMyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE0NyAtIEVRMTQgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNDggLSBFUTE1ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQ5IC0gRVExNiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE1MCAtIEVRMTcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNTF3bTg1MjNfZGFpIC0gRVExOCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE1MiAtIEVRMTkgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNTMgLSBFUTIwICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTU0IC0gRVEyMSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE1NSAtIEVRMjIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNTYgLSBFUTIzICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTU3IC0gRVEyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2MCAqLworCXsgMHgwMDAyLCAweDAwMDIsIDAgfSwgLyogUjE2MSAtIENvbnRyb2wgSW50ZXJmYWNlIFRlc3QgMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIwMyAqLworCXsgMHgwMDcwLCAweDAwNzAsIDAgfSwgLyogUjIwNCAtIEFuYWxvZ3VlIE91dHB1dCBCaWFzIDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyNDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyNDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyNDYgKi8KKwl7IDB4MDAwMSwgMHgwMDAxLCAwIH0sIC8qIFIyNDcgLSBGTEwgTkNPIFRlc3QgMCAqLworCXsgMHgwMDNGLCAweDAwM0YsIDAgfSwgLyogUjI0OCAtIEZMTCBOQ08gVGVzdCAxICovCit9OworCitzdGF0aWMgaW50IHdtODkwNF92b2xhdGlsZV9yZWdpc3Rlcih1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiB3bTg5MDRfYWNjZXNzW3JlZ10udm9sOworfQorCitzdGF0aWMgaW50IHdtODkwNF9yZXNldChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwNF9TV19SRVNFVF9BTkRfSUQsIDApOworfQorCitzdGF0aWMgaW50IHdtODkwNF9jb25maWd1cmVfY2xvY2tpbmcoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgY2xvY2swLCBjbG9jazIsIHJhdGU7CisKKwkvKiBHYXRlIHRoZSBjbG9jayB3aGlsZSB3ZSdyZSB1cGRhdGluZyB0byBhdm9pZCBtaXNjbG9ja2luZyAqLworCWNsb2NrMiA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTA0X0NMT0NLX1JBVEVTXzIpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9DTE9DS19SQVRFU18yLAorCQkJICAgIFdNODkwNF9TWVNDTEtfU1JDLCAwKTsKKworCS8qIFRoaXMgc2hvdWxkIGJlIGRvbmUgb24gaW5pdCgpIGZvciBieXBhc3MgcGF0aHMgKi8KKwlzd2l0Y2ggKHdtODkwNC0+c3lzY2xrX3NyYykgeworCWNhc2UgV004OTA0X0NMS19NQ0xLOgorCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJVc2luZyAlZEh6IE1DTEtcbiIsIHdtODkwNC0+bWNsa19yYXRlKTsKKworCQljbG9jazIgJj0gfldNODkwNF9TWVNDTEtfU1JDOworCQlyYXRlID0gd204OTA0LT5tY2xrX3JhdGU7CisKKwkJLyogRW5zdXJlIHRoZSBGTEwgaXMgc3RvcHBlZCAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMSwKKwkJCQkgICAgV004OTA0X0ZMTF9PU0NfRU5BIHwgV004OTA0X0ZMTF9FTkEsIDApOworCQlicmVhazsKKworCWNhc2UgV004OTA0X0NMS19GTEw6CisJCWRldl9kYmcoY29kZWMtPmRldiwgIlVzaW5nICVkSHogRkxMIGNsb2NrXG4iLAorCQkJd204OTA0LT5mbGxfZm91dCk7CisKKwkJY2xvY2syIHw9IFdNODkwNF9TWVNDTEtfU1JDOworCQlyYXRlID0gd204OTA0LT5mbGxfZm91dDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJTeXN0ZW0gY2xvY2sgbm90IGNvbmZpZ3VyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBTWVNDTEsgc2hvdWxkbid0IGJlIG92ZXIgMTMuNU1IeiAqLworCWlmIChyYXRlID4gMTM1MDAwMDApIHsKKwkJY2xvY2swID0gV004OTA0X01DTEtfRElWOworCQl3bTg5MDQtPnN5c2Nsa19yYXRlID0gcmF0ZSAvIDI7CisJfSBlbHNlIHsKKwkJY2xvY2swID0gMDsKKwkJd204OTA0LT5zeXNjbGtfcmF0ZSA9IHJhdGU7CisJfQorCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0NMT0NLX1JBVEVTXzAsIFdNODkwNF9NQ0xLX0RJViwKKwkJCSAgICBjbG9jazApOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0NMT0NLX1JBVEVTXzIsCisJCQkgICAgV004OTA0X0NMS19TWVNfRU5BIHwgV004OTA0X1NZU0NMS19TUkMsIGNsb2NrMik7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJDTEtfU1lTIGlzICVkSHpcbiIsIHdtODkwNC0+c3lzY2xrX3JhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdtODkwNF9zZXRfZHJjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHdtODkwNF9wZGF0YSAqcGRhdGEgPSB3bTg5MDQtPnBkYXRhOworCWludCBzYXZlLCBpOworCisJLyogU2F2ZSBhbnkgZW5hYmxlczsgdGhlIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGNsZWFyIHRoZW0uICovCisJc2F2ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTA0X0RSQ18wKTsKKworCWZvciAoaSA9IDA7IGkgPCBXTTg5MDRfRFJDX1JFR1M7IGkrKykKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0RSQ18wICsgaSwgMHhmZmZmLAorCQkJCSAgICBwZGF0YS0+ZHJjX2NmZ3Nbd204OTA0LT5kcmNfY2ZnXS5yZWdzW2ldKTsKKworCS8qIFJlZW5hYmxlIHRoZSBEUkMgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRFJDXzAsCisJCQkgICAgV004OTA0X0RSQ19FTkEgfCBXTTg5MDRfRFJDX0RBQ19QQVRILCBzYXZlKTsKK30KKworc3RhdGljIGludCB3bTg5MDRfcHV0X2RyY19lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CQorCXN0cnVjdCB3bTg5MDRfcGRhdGEgKnBkYXRhID0gd204OTA0LT5wZGF0YTsKKwlpbnQgdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWlmICh2YWx1ZSA+PSBwZGF0YS0+bnVtX2RyY19jZmdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdtODkwNC0+ZHJjX2NmZyA9IHZhbHVlOworCisJd204OTA0X3NldF9kcmMoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X2dldF9kcmNfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHdtODkwNC0+ZHJjX2NmZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bTg5MDRfc2V0X3JldHVuZV9tb2JpbGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgd204OTA0X3BkYXRhICpwZGF0YSA9IHdtODkwNC0+cGRhdGE7CisJaW50IGJlc3QsIGJlc3RfdmFsLCBzYXZlLCBpLCBjZmc7CisKKwlpZiAoIXBkYXRhIHx8ICF3bTg5MDQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzKQorCQlyZXR1cm47CisKKwkvKiBGaW5kIHRoZSB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY29uZmlndXJhdGlvbgorCSAqIHdpdGggdGhlIG5lYXJlc3Qgc2FtcGxlIHJhdGUuICovCisJY2ZnID0gd204OTA0LT5yZXR1bmVfbW9iaWxlX2NmZzsKKwliZXN0ID0gMDsKKwliZXN0X3ZhbCA9IElOVF9NQVg7CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzOyBpKyspIHsKKwkJaWYgKHN0cmNtcChwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLm5hbWUsCisJCQkgICB3bTg5MDQtPnJldHVuZV9tb2JpbGVfdGV4dHNbY2ZnXSkgPT0gMCAmJgorCQkgICAgYWJzKHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ucmF0ZQorCQkJLSB3bTg5MDQtPmZzKSA8IGJlc3RfdmFsKSB7CisJCQliZXN0ID0gaTsKKwkJCWJlc3RfdmFsID0gYWJzKHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ucmF0ZQorCQkJCSAgICAgICAtIHdtODkwNC0+ZnMpOworCQl9CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiUmVUdW5lIE1vYmlsZSAlcy8lZEh6IGZvciAlZEh6IHNhbXBsZSByYXRlXG4iLAorCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2Jlc3RdLm5hbWUsCisJCXBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbYmVzdF0ucmF0ZSwKKwkJd204OTA0LT5mcyk7CisKKwkvKiBUaGUgRVEgd2lsbCBiZSBkaXNhYmxlZCB3aGlsZSByZWNvbmZpZ3VyaW5nIGl0LCByZW1lbWJlciB0aGUKKwkgKiBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIAorCSAqLworCXNhdmUgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwNF9FUTEpOworCisJZm9yIChpID0gMDsgaSA8IFdNODkwNF9FUV9SRUdTOyBpKyspCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9FUTEgKyBpLCAweGZmZmYsCisJCQkJcGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tiZXN0XS5yZWdzW2ldKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9FUTEsIFdNODkwNF9FUV9FTkEsIHNhdmUpOworfQorCitzdGF0aWMgaW50IHdtODkwNF9wdXRfcmV0dW5lX21vYmlsZV9lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsJCisJc3RydWN0IHdtODkwNF9wZGF0YSAqcGRhdGEgPSB3bTg5MDQtPnBkYXRhOworCWludCB2YWx1ZSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCisJaWYgKHZhbHVlID49IHBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdtODkwNC0+cmV0dW5lX21vYmlsZV9jZmcgPSB2YWx1ZTsKKworCXdtODkwNF9zZXRfcmV0dW5lX21vYmlsZShjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5MDRfZ2V0X3JldHVuZV9tb2JpbGVfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gd204OTA0LT5yZXR1bmVfbW9iaWxlX2NmZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlZW1waF9zZXR0aW5nc1tdID0geyAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwIH07CisKK3N0YXRpYyBpbnQgd204OTA0X3NldF9kZWVtcGgoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgdmFsLCBpLCBiZXN0OworCisJLyogSWYgd2UncmUgdXNpbmcgZGVlbXBoYXNpcyBzZWxlY3QgdGhlIG5lYXJlc3QgYXZhaWxhYmxlIHNhbXBsZSAKKwkgKiByYXRlLgorCSAqLworCWlmICh3bTg5MDQtPmRlZW1waCkgeworCQliZXN0ID0gMTsKKwkJZm9yIChpID0gMjsgaSA8IEFSUkFZX1NJWkUoZGVlbXBoX3NldHRpbmdzKTsgaSsrKSB7CisJCQlpZiAoYWJzKGRlZW1waF9zZXR0aW5nc1tpXSAtIHdtODkwNC0+ZnMpIDwKKwkJCSAgICBhYnMoZGVlbXBoX3NldHRpbmdzW2Jlc3RdIC0gd204OTA0LT5mcykpCisJCQkJYmVzdCA9IGk7CisJCX0KKworCQl2YWwgPSBiZXN0IDw8IFdNODkwNF9ERUVNUEhfU0hJRlQ7CisJfSBlbHNlIHsKKwkJdmFsID0gMDsKKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJTZXQgZGVlbXBoYXNpcyAlZFxuIiwgdmFsKTsKKworCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfREFDX0RJR0lUQUxfMSwKKwkJCQkgICBXTTg5MDRfREVFTVBIX01BU0ssIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X2dldF9kZWVtcGgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gd204OTA0LT5kZWVtcGg7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X3B1dF9kZWVtcGgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBkZWVtcGggPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCisJaWYgKGRlZW1waCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJd204OTA0LT5kZWVtcGggPSBkZWVtcGg7CisKKwlyZXR1cm4gd204OTA0X3NldF9kZWVtcGgoY29kZWMpOworfQorCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGFjX2Jvb3N0X3RsdiwgMCwgNjAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkaWdpdGFsX3RsdiwgLTcyMDAsIDc1LCAxKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShvdXRfdGx2LCAtNTcwMCwgMTAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShzaWRldG9uZV90bHYsIC0zNjAwLCAzMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGVxX3RsdiwgLTEyMDAsIDEwMCwgMCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICppbnB1dF9tb2RlX3RleHRbXSA9IHsKKwkiU2luZ2xlLUVuZGVkIiwgIkRpZmZlcmVudGlhbCBMaW5lIiwgIkRpZmZlcmVudGlhbCBNaWMiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGxpbl9tb2RlID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FOQUxPR1VFX0xFRlRfSU5QVVRfMSwgMCwgMywgaW5wdXRfbW9kZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSByaW5fbW9kZSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BTkFMT0dVRV9SSUdIVF9JTlBVVF8xLCAwLCAzLCBpbnB1dF9tb2RlX3RleHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqaHBmX21vZGVfdGV4dFtdID0geworCSJIaS1maSIsICJWb2ljZSAxIiwgIlZvaWNlIDIiLCAiVm9pY2UgMyIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gaHBmX21vZGUgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQURDX0RJR0lUQUxfMCwgNSwgNCwgaHBmX21vZGVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5MDRfYWRjX3NuZF9jb250cm9sc1tdID0geworU09DX0RPVUJMRV9SX1RMVigiRGlnaXRhbCBDYXB0dXJlIFZvbHVtZSIsIFdNODkwNF9BRENfRElHSVRBTF9WT0xVTUVfTEVGVCwKKwkJIFdNODkwNF9BRENfRElHSVRBTF9WT0xVTUVfUklHSFQsIDEsIDExOSwgMCwgZGlnaXRhbF90bHYpLAorCitTT0NfRU5VTSgiTGVmdCBDYXB1dHVyZSBNb2RlIiwgbGluX21vZGUpLAorU09DX0VOVU0oIlJpZ2h0IENhcHR1cmUgTW9kZSIsIHJpbl9tb2RlKSwKKworLyogTm8gVExWIHNpbmNlIGl0IGRlcGVuZHMgb24gbW9kZSAqLworU09DX0RPVUJMRV9SKCJDYXB0dXJlIFZvbHVtZSIsIFdNODkwNF9BTkFMT0dVRV9MRUZUX0lOUFVUXzAsCisJICAgICBXTTg5MDRfQU5BTE9HVUVfUklHSFRfSU5QVVRfMCwgMCwgMzEsIDApLAorU09DX0RPVUJMRV9SKCJDYXB0dXJlIFN3aXRjaCIsIFdNODkwNF9BTkFMT0dVRV9MRUZUX0lOUFVUXzAsCisJICAgICBXTTg5MDRfQU5BTE9HVUVfUklHSFRfSU5QVVRfMCwgNywgMSwgMCksCisKK1NPQ19TSU5HTEUoIkhpZ2ggUGFzcyBGaWx0ZXIgU3dpdGNoIiwgV004OTA0X0FEQ19ESUdJVEFMXzAsIDQsIDEsIDApLAorU09DX0VOVU0oIkhpZ2ggUGFzcyBGaWx0ZXIgTW9kZSIsIGhwZl9tb2RlKSwKKworU09DX1NJTkdMRSgiQURDIDEyOHggT1NSIFN3aXRjaCIsIFdNODkwNF9BTkFMT0dVRV9BRENfMCwgMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZHJjX3BhdGhfdGV4dFtdID0geworCSJBREMiLCAiREFDIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkcmNfcGF0aCA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9EUkNfMCwgMTQsIDIsIGRyY19wYXRoX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTA0X2RhY19zbmRfY29udHJvbHNbXSA9IHsKK1NPQ19TSU5HTEVfVExWKCJEaWdpdGFsIFBsYXliYWNrIEJvb3N0IFZvbHVtZSIsIAorCSAgICAgICBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzAsIDksIDMsIDAsIGRhY19ib29zdF90bHYpLAorU09DX0RPVUJMRV9SX1RMVigiRGlnaXRhbCBQbGF5YmFjayBWb2x1bWUiLCBXTTg5MDRfREFDX0RJR0lUQUxfVk9MVU1FX0xFRlQsCisJCSBXTTg5MDRfREFDX0RJR0lUQUxfVk9MVU1FX1JJR0hULCAxLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorCitTT0NfRE9VQkxFX1JfVExWKCJIZWFkcGhvbmUgVm9sdW1lIiwgV004OTA0X0FOQUxPR1VFX09VVDFfTEVGVCwKKwkJIFdNODkwNF9BTkFMT0dVRV9PVVQxX1JJR0hULCAwLCA2MywgMCwgb3V0X3RsdiksCitTT0NfRE9VQkxFX1IoIkhlYWRwaG9uZSBTd2l0Y2giLCBXTTg5MDRfQU5BTE9HVUVfT1VUMV9MRUZULAorCSAgICAgV004OTA0X0FOQUxPR1VFX09VVDFfUklHSFQsIDgsIDEsIDEpLAorU09DX0RPVUJMRV9SKCJIZWFkcGhvbmUgWkMgU3dpdGNoIiwgV004OTA0X0FOQUxPR1VFX09VVDFfTEVGVCwKKwkgICAgIFdNODkwNF9BTkFMT0dVRV9PVVQxX1JJR0hULCA2LCAxLCAwKSwKKworU09DX0RPVUJMRV9SX1RMVigiTGluZSBPdXRwdXQgVm9sdW1lIiwgV004OTA0X0FOQUxPR1VFX09VVDJfTEVGVCwKKwkJIFdNODkwNF9BTkFMT0dVRV9PVVQyX1JJR0hULCAwLCA2MywgMCwgb3V0X3RsdiksCitTT0NfRE9VQkxFX1IoIkxpbmUgT3V0cHV0IFN3aXRjaCIsIFdNODkwNF9BTkFMT0dVRV9PVVQyX0xFRlQsCisJICAgICBXTTg5MDRfQU5BTE9HVUVfT1VUMl9SSUdIVCwgOCwgMSwgMSksCitTT0NfRE9VQkxFX1IoIkxpbmUgT3V0cHV0IFpDIFN3aXRjaCIsIFdNODkwNF9BTkFMT0dVRV9PVVQyX0xFRlQsCisJICAgICBXTTg5MDRfQU5BTE9HVUVfT1VUMl9SSUdIVCwgNiwgMSwgMCksCisKK1NPQ19TSU5HTEUoIkVRIFN3aXRjaCIsIFdNODkwNF9FUTEsIDAsIDEsIDApLAorU09DX1NJTkdMRSgiRFJDIFN3aXRjaCIsIFdNODkwNF9EUkNfMCwgMTUsIDEsIDApLAorU09DX0VOVU0oIkRSQyBQYXRoIiwgZHJjX3BhdGgpLAorU09DX1NJTkdMRSgiREFDIE9TUngyIFN3aXRjaCIsIFdNODkwNF9EQUNfRElHSVRBTF8xLCA2LCAxLCAwKSwKK1NPQ19TSU5HTEVfQk9PTF9FWFQoIkRBQyBEZWVtcGhhc2lzIFN3aXRjaCIsIDAsCisJCSAgICB3bTg5MDRfZ2V0X2RlZW1waCwgd204OTA0X3B1dF9kZWVtcGgpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODkwNF9zbmRfY29udHJvbHNbXSA9IHsKK1NPQ19ET1VCTEVfVExWKCJEaWdpdGFsIFNpZGV0b25lIFZvbHVtZSIsIFdNODkwNF9EQUNfRElHSVRBTF8wLCA0LCA4LCAxNSwgMCwKKwkgICAgICAgc2lkZXRvbmVfdGx2KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5MDRfZXFfY29udHJvbHNbXSA9IHsKK1NPQ19TSU5HTEVfVExWKCJFUTEgVm9sdW1lIiwgV004OTA0X0VRMiwgMCwgMjQsIDAsIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRVEyIFZvbHVtZSIsIFdNODkwNF9FUTMsIDAsIDI0LCAwLCBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkVRMyBWb2x1bWUiLCBXTTg5MDRfRVE0LCAwLCAyNCwgMCwgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJFUTQgVm9sdW1lIiwgV004OTA0X0VRNSwgMCwgMjQsIDAsIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRVE1IFZvbHVtZSIsIFdNODkwNF9FUTYsIDAsIDI0LCAwLCBlcV90bHYpLAorfTsKKworc3RhdGljIGludCBjcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJQlVHX09OKGV2ZW50ICE9IFNORF9TT0NfREFQTV9QT1NUX1BNVSk7CisKKwkvKiBNYXhpbXVtIHN0YXJ0dXAgdGltZSAqLworCXVkZWxheSg1MDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3lzY2xrX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CisJCS8qIElmIHdlJ3JlIHVzaW5nIHRoZSBGTEwgdGhlbiB3ZSBvbmx5IHN0YXJ0IGl0IHdoZW4KKwkJICogcmVxdWlyZWQ7IHdlIGFzc3VtZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGhhcyBiZWVuCisJCSAqIGRvbmUgcHJldmlvdXNseSBhbmQgYWxsIHdlIG5lZWQgdG8gZG8gaXMga2ljayBpdAorCQkgKiBvZmYuCisJCSAqLworCQlzd2l0Y2ggKHdtODkwNC0+c3lzY2xrX3NyYykgeworCQljYXNlIFdNODkwNF9DTEtfRkxMOgorCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzEsCisJCQkJCSAgICBXTTg5MDRfRkxMX09TQ19FTkEsCisJCQkJCSAgICBXTTg5MDRfRkxMX09TQ19FTkEpOworCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMSwKKwkJCQkJICAgIFdNODkwNF9GTExfRU5BLAorCQkJCQkgICAgV004OTA0X0ZMTF9FTkEpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8xLAorCQkJCSAgICBXTTg5MDRfRkxMX09TQ19FTkEgfCBXTTg5MDRfRkxMX0VOQSwgMCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG91dF9wZ2FfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJlZywgdmFsOworCWludCBkY3NfbWFzazsKKwlpbnQgZGNzX2wsIGRjc19yOworCWludCBkY3NfbF9yZWcsIGRjc19yX3JlZzsKKwlpbnQgdGltZW91dDsKKwlpbnQgcHdyX3JlZzsKKworCS8qIFRoaXMgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiBIUCBhbmQgTElORU9VVDsgd2UgZG8gYWxsIG91cgorCSAqIHBvd2VyIG1hbmFnZW1lbnQgaW4gc3RlcmVvIHBhaXJzIHRvIGF2b2lkIGxhdGVuY3kgaXNzdWVzIHNvCisJICogd2UgcmV1c2Ugc2hpZnQgdG8gaWRlbnRpZnkgd2hpY2ggcmF0aGVyIHRoYW4gc3RyY21wKCkgdGhlCisJICogbmFtZS4gKi8KKwlyZWcgPSB3LT5zaGlmdDsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBXTTg5MDRfQU5BTE9HVUVfSFBfMDoKKwkJcHdyX3JlZyA9IFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzI7CisJCWRjc19tYXNrID0gV004OTA0X0RDU19FTkFfQ0hBTl8wIHwgV004OTA0X0RDU19FTkFfQ0hBTl8xOworCQlkY3Nfcl9yZWcgPSBXTTg5MDRfRENfU0VSVk9fODsKKwkJZGNzX2xfcmVnID0gV004OTA0X0RDX1NFUlZPXzk7CisJCWRjc19sID0gMDsKKwkJZGNzX3IgPSAxOworCQlicmVhazsKKwljYXNlIFdNODkwNF9BTkFMT0dVRV9MSU5FT1VUXzA6CisJCXB3cl9yZWcgPSBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF8zOworCQlkY3NfbWFzayA9IFdNODkwNF9EQ1NfRU5BX0NIQU5fMiB8IFdNODkwNF9EQ1NfRU5BX0NIQU5fMzsKKwkJZGNzX3JfcmVnID0gV004OTA0X0RDX1NFUlZPXzY7CisJCWRjc19sX3JlZyA9IFdNODkwNF9EQ19TRVJWT183OworCQlkY3NfbCA9IDI7CisJCWRjc19yID0gMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQkvKiBQb3dlciBvbiB0aGUgUEdBcyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBwd3JfcmVnLAorCQkJCSAgICBXTTg5MDRfSFBMX1BHQV9FTkEgfCBXTTg5MDRfSFBSX1BHQV9FTkEsCisJCQkJICAgIFdNODkwNF9IUExfUEdBX0VOQSB8IFdNODkwNF9IUFJfUEdBX0VOQSk7CisKKwkJLyogUG93ZXIgb24gdGhlIGFtcGxpZmllciAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsCisJCQkJICAgIFdNODkwNF9IUExfRU5BIHwgV004OTA0X0hQUl9FTkEsCisJCQkJICAgIFdNODkwNF9IUExfRU5BIHwgV004OTA0X0hQUl9FTkEpOworCisKKwkJLyogRW5hYmxlIHRoZSBmaXJzdCBzdGFnZSAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsCisJCQkJICAgIFdNODkwNF9IUExfRU5BX0RMWSB8IFdNODkwNF9IUFJfRU5BX0RMWSwKKwkJCQkgICAgV004OTA0X0hQTF9FTkFfRExZIHwgV004OTA0X0hQUl9FTkFfRExZKTsKKworCQkvKiBQb3dlciB1cCB0aGUgREMgc2Vydm8gKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0RDX1NFUlZPXzAsCisJCQkJICAgIGRjc19tYXNrLCBkY3NfbWFzayk7CisKKwkJLyogRWl0aGVyIGNhbGlicmF0ZSB0aGUgREMgc2Vydm8gb3IgcmVzdG9yZSBjYWNoZWQgc3RhdGUKKwkJICogaWYgd2UgaGF2ZSB0aGF0LgorCQkgKi8KKwkJaWYgKHdtODkwNC0+ZGNzX3N0YXRlW2Rjc19sXSB8fCB3bTg5MDQtPmRjc19zdGF0ZVtkY3Nfcl0pIHsKKwkJCWRldl9kYmcoY29kZWMtPmRldiwgIlJlc3RvcmluZyBEQyBzZXJ2byBzdGF0ZVxuIik7CisKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIGRjc19sX3JlZywKKwkJCQkgICAgICB3bTg5MDQtPmRjc19zdGF0ZVtkY3NfbF0pOworCQkJc25kX3NvY193cml0ZShjb2RlYywgZGNzX3JfcmVnLAorCQkJCSAgICAgIHdtODkwNC0+ZGNzX3N0YXRlW2Rjc19yXSk7CisKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwNF9EQ19TRVJWT18xLCBkY3NfbWFzayk7CisKKwkJCXRpbWVvdXQgPSAyMDsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoY29kZWMtPmRldiwgIkNhbGlicmF0aW5nIERDIHNlcnZvXG4iKTsKKworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTA0X0RDX1NFUlZPXzEsCisJCQkJZGNzX21hc2sgPDwgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMF9TSElGVCk7CisKKwkJCXRpbWVvdXQgPSA1MDA7CisJCX0KKworCQkvKiBXYWl0IGZvciBEQyBzZXJ2byB0byBjb21wbGV0ZSAqLworCQlkY3NfbWFzayA8PD0gV004OTA0X0RDU19DQUxfQ09NUExFVEVfU0hJRlQ7CisJCWRvIHsKKwkJCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTA0X0RDX1NFUlZPX1JFQURCQUNLXzApOworCQkJaWYgKCh2YWwgJiBkY3NfbWFzaykgPT0gZGNzX21hc2spCisJCQkJYnJlYWs7CisKKwkJCW1zbGVlcCgxKTsKKwkJfSB3aGlsZSAoLS10aW1lb3V0KTsKKworCQlpZiAoKHZhbCAmIGRjc19tYXNrKSAhPSBkY3NfbWFzaykKKwkJCWRldl93YXJuKGNvZGVjLT5kZXYsICJEQyBzZXJ2byB0aW1lZCBvdXRcbiIpOworCQllbHNlCisJCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJEQyBzZXJ2byByZWFkeVxuIik7CisKKwkJLyogRW5hYmxlIHRoZSBvdXRwdXQgc3RhZ2UgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLAorCQkJCSAgICBXTTg5MDRfSFBMX0VOQV9PVVRQIHwgV004OTA0X0hQUl9FTkFfT1VUUCwKKwkJCQkgICAgV004OTA0X0hQTF9FTkFfT1VUUCB8IFdNODkwNF9IUFJfRU5BX09VVFApOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQkvKiBVbnNob3J0IHRoZSBvdXRwdXQgaXRzZWxmICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywKKwkJCQkgICAgV004OTA0X0hQTF9STVZfU0hPUlQgfAorCQkJCSAgICBXTTg5MDRfSFBSX1JNVl9TSE9SVCwKKwkJCQkgICAgV004OTA0X0hQTF9STVZfU0hPUlQgfAorCQkJCSAgICBXTTg5MDRfSFBSX1JNVl9TSE9SVCk7CisKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgorCQkvKiBTaG9ydCB0aGUgb3V0cHV0ICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywKKwkJCQkgICAgV004OTA0X0hQTF9STVZfU0hPUlQgfAorCQkJCSAgICBXTTg5MDRfSFBSX1JNVl9TSE9SVCwgMCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCS8qIENhY2hlIHRoZSBEQyBzZXJ2byBjb25maWd1cmF0aW9uOyB0aGlzIHdpbGwgYmUKKwkJICogaW52YWxpZGF0ZWQgaWYgd2UgY2hhbmdlIHRoZSBjb25maWd1cmF0aW9uLiAqLworCQl3bTg5MDQtPmRjc19zdGF0ZVtkY3NfbF0gPSBzbmRfc29jX3JlYWQoY29kZWMsIGRjc19sX3JlZyk7CisJCXdtODkwNC0+ZGNzX3N0YXRlW2Rjc19yXSA9IHNuZF9zb2NfcmVhZChjb2RlYywgZGNzX3JfcmVnKTsKKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRENfU0VSVk9fMCwKKwkJCQkgICAgZGNzX21hc2ssIDApOworCisJCS8qIERpc2FibGUgdGhlIGFtcGxpZmllciBpbnB1dCBhbmQgb3V0cHV0IHN0YWdlcyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsCisJCQkJICAgIFdNODkwNF9IUExfRU5BIHwgV004OTA0X0hQUl9FTkEgfAorCQkJCSAgICBXTTg5MDRfSFBMX0VOQV9ETFkgfCBXTTg5MDRfSFBSX0VOQV9ETFkgfAorCQkJCSAgICBXTTg5MDRfSFBMX0VOQV9PVVRQIHwgV004OTA0X0hQUl9FTkFfT1VUUCwKKwkJCQkgICAgMCk7CisKKwkJLyogUEdBcyB0b28gKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcHdyX3JlZywKKwkJCQkgICAgV004OTA0X0hQTF9QR0FfRU5BIHwgV004OTA0X0hQUl9QR0FfRU5BLAorCQkJCSAgICAwKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpsaW5fdGV4dFtdID0geworCSJJTjFMIiwgIklOMkwiLCAiSU4zTCIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbGluX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQU5BTE9HVUVfTEVGVF9JTlBVVF8xLCAyLCAzLCBsaW5fdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsaW5fbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJMZWZ0IENhcHR1cmUgTXV4IiwgbGluX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGxpbl9pbnZfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BTkFMT0dVRV9MRUZUX0lOUFVUXzEsIDQsIDMsIGxpbl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxpbl9pbnZfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJMZWZ0IENhcHR1cmUgSW52ZXRpbmcgTXV4IiwgbGluX2ludl9lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnJpbl90ZXh0W10gPSB7CisJIklOMVIiLCAiSU4yUiIsICJJTjNSIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSByaW5fZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BTkFMT0dVRV9SSUdIVF9JTlBVVF8xLCAyLCAzLCByaW5fdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyByaW5fbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJSaWdodCBDYXB0dXJlIE11eCIsIHJpbl9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSByaW5faW52X2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQU5BTE9HVUVfUklHSFRfSU5QVVRfMSwgNCwgMywgcmluX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcmluX2ludl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIlJpZ2h0IENhcHR1cmUgSW52ZXRpbmcgTXV4IiwgcmluX2ludl9lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFpZl90ZXh0W10gPSB7CisJIkxlZnQiLCAiUmlnaHQiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZm91dGxfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMCwgNywgMiwgYWlmX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmb3V0bF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFJRk9VVEwgTXV4IiwgYWlmb3V0bF9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWZvdXRyX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQVVESU9fSU5URVJGQUNFXzAsIDYsIDIsIGFpZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZm91dHJfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJBSUZPVVRSIE11eCIsIGFpZm91dHJfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmaW5sX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQVVESU9fSU5URVJGQUNFXzAsIDUsIDIsIGFpZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZmlubF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFJRklOTCBNdXgiLCBhaWZpbmxfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmaW5yX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQVVESU9fSU5URVJGQUNFXzAsIDQsIDIsIGFpZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZmlucl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFJRklOUiBNdXgiLCBhaWZpbnJfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5MDRfY29yZV9kYXBtX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9TVVBQTFkoIlNZU0NMSyIsIFdNODkwNF9DTE9DS19SQVRFU18yLCAyLCAwLCBzeXNjbGtfZXZlbnQsCisJCSAgICBTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCitTTkRfU09DX0RBUE1fU1VQUExZKCJDTEtfRFNQIiwgV004OTA0X0NMT0NLX1JBVEVTXzIsIDEsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1NVUFBMWSgiVE9DTEsiLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMiwgMCwgMCwgTlVMTCwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTA0X2FkY19kYXBtX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4xTCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJTjFSIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIklOMkwiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4yUiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJTjNMIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIklOM1IiKSwKKworU05EX1NPQ19EQVBNX01JQ0JJQVMoIk1JQ0JJQVMiLCBXTTg5MDRfTUlDX0JJQVNfQ09OVFJPTF8wLCAwLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiTGVmdCBDYXB0dXJlIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmxpbl9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiTGVmdCBDYXB0dXJlIEludmVydGluZyBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAmbGluX2ludl9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgQ2FwdHVyZSBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZyaW5fbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIlJpZ2h0IENhcHR1cmUgSW52ZXJ0aW5nIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICZyaW5faW52X211eCksCisKK1NORF9TT0NfREFQTV9QR0EoIkxlZnQgQ2FwdHVyZSBQR0EiLCBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF8wLCAxLCAwLAorCQkgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBDYXB0dXJlIFBHQSIsIFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzAsIDAsIDAsCisJCSBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX0FEQygiQURDTCIsIE5VTEwsIFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzYsIDEsIDApLAorU05EX1NPQ19EQVBNX0FEQygiQURDUiIsIE5VTEwsIFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzYsIDAsIDApLAorCitTTkRfU09DX0RBUE1fTVVYKCJBSUZPVVRMIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmFpZm91dGxfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkFJRk9VVFIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmb3V0cl9tdXgpLAorCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGT1VUTCIsICJDYXB0dXJlIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUZPVVRSIiwgIkNhcHR1cmUiLCAxLCBTTkRfU09DX05PUE0sIDAsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODkwNF9kYWNfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUZJTkwiLCAiUGxheWJhY2siLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGSU5SIiwgIlBsYXliYWNrIiwgMSwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiREFDTCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZhaWZpbmxfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkRBQ1IgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmaW5yX211eCksCisKK1NORF9TT0NfREFQTV9EQUMoIkRBQ0wiLCBOVUxMLCBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF82LCAzLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQ1IiLCBOVUxMLCBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF82LCAyLCAwKSwKKworU05EX1NPQ19EQVBNX1NVUFBMWSgiQ2hhcmdlIHB1bXAiLCBXTTg5MDRfQ0hBUkdFX1BVTVBfMCwgMCwgMCwgY3BfZXZlbnQsCisJCSAgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCitTTkRfU09DX0RBUE1fUEdBKCJIUEwgUEdBIiwgU05EX1NPQ19OT1BNLCAxLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkhQUiBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fUEdBKCJMSU5FTCBQR0EiLCBTTkRfU09DX05PUE0sIDEsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiTElORVIgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX1BHQV9FKCJIZWFkcGhvbmUgT3V0cHV0IiwgU05EX1NPQ19OT1BNLCBXTTg5MDRfQU5BTE9HVUVfSFBfMCwKKwkJICAgMCwgTlVMTCwgMCwgb3V0X3BnYV9ldmVudCwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCitTTkRfU09DX0RBUE1fUEdBX0UoIkxpbmUgT3V0cHV0IiwgU05EX1NPQ19OT1BNLCBXTTg5MDRfQU5BTE9HVUVfTElORU9VVF8wLAorCQkgICAwLCBOVUxMLCAwLCBvdXRfcGdhX2V2ZW50LAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNVSB8CisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1EIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworU05EX1NPQ19EQVBNX09VVFBVVCgiSFBPVVRMIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJIUE9VVFIiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkxJTkVPVVRMIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJMSU5FT1VUUiIpLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm91dF9tdXhfdGV4dFtdID0geworCSJEQUMiLCAiQnlwYXNzIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBocGxfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BTkFMT0dVRV9PVVQxMl9aQywgMywgMiwgb3V0X211eF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGhwbF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkhQTCBNdXgiLCBocGxfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gaHByX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQU5BTE9HVUVfT1VUMTJfWkMsIDIsIDIsIG91dF9tdXhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBocHJfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJIUFIgTXV4IiwgaHByX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGxpbmVsX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQU5BTE9HVUVfT1VUMTJfWkMsIDEsIDIsIG91dF9tdXhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsaW5lbF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkxJTkVMIE11eCIsIGxpbmVsX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGxpbmVyX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQU5BTE9HVUVfT1VUMTJfWkMsIDAsIDIsIG91dF9tdXhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsaW5lcl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkxJTkVMIE11eCIsIGxpbmVyX2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqc2lkZXRvbmVfdGV4dFtdID0geworCSJOb25lIiwgIkxlZnQiLCAiUmlnaHQiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhY2xfc2lkZXRvbmVfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9EQUNfRElHSVRBTF8wLCAyLCAzLCBzaWRldG9uZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhY2xfc2lkZXRvbmVfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJMZWZ0IFNpZGV0b25lIE11eCIsIGRhY2xfc2lkZXRvbmVfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZGFjcl9zaWRldG9uZV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0RBQ19ESUdJVEFMXzAsIDAsIDMsIHNpZGV0b25lX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGFjcl9zaWRldG9uZV9tdXggPQorCVNPQ19EQVBNX0VOVU0oIlJpZ2h0IFNpZGV0b25lIE11eCIsIGRhY3Jfc2lkZXRvbmVfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5MDRfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fU1VQUExZKCJDbGFzcyBHIiwgV004OTA0X0NMQVNTX1dfMCwgMCwgMSwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IEJ5cGFzcyIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBCeXBhc3MiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fTVVYKCJMZWZ0IFNpZGV0b25lIiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmZGFjbF9zaWRldG9uZV9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgU2lkZXRvbmUiLCBTTkRfU09DX05PUE0sIDAsIDAsICZkYWNyX3NpZGV0b25lX211eCksCisKK1NORF9TT0NfREFQTV9NVVgoIkhQTCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZocGxfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkhQUiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZocHJfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkxJTkVMIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmxpbmVsX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJMSU5FUiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZsaW5lcl9tdXgpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgY29yZV9pbnRlcmNvbltdID0geworCXsgIkNMS19EU1AiLCBOVUxMLCAiU1lTQ0xLIiB9LAorCXsgIlRPQ0xLIiwgTlVMTCwgIlNZU0NMSyIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGFkY19pbnRlcmNvbltdID0geworCXsgIkxlZnQgQ2FwdHVyZSBNdXgiLCAiSU4xTCIsICJJTjFMIiB9LAorCXsgIkxlZnQgQ2FwdHVyZSBNdXgiLCAiSU4yTCIsICJJTjJMIiB9LAorCXsgIkxlZnQgQ2FwdHVyZSBNdXgiLCAiSU4zTCIsICJJTjNMIiB9LAorCisJeyAiTGVmdCBDYXB0dXJlIEludmVydGluZyBNdXgiLCAiSU4xTCIsICJJTjFMIiB9LAorCXsgIkxlZnQgQ2FwdHVyZSBJbnZlcnRpbmcgTXV4IiwgIklOMkwiLCAiSU4yTCIgfSwKKwl7ICJMZWZ0IENhcHR1cmUgSW52ZXJ0aW5nIE11eCIsICJJTjNMIiwgIklOM0wiIH0sCisKKwl7ICJSaWdodCBDYXB0dXJlIE11eCIsICJJTjFSIiwgIklOMVIiIH0sCisJeyAiUmlnaHQgQ2FwdHVyZSBNdXgiLCAiSU4yUiIsICJJTjJSIiB9LAorCXsgIlJpZ2h0IENhcHR1cmUgTXV4IiwgIklOM1IiLCAiSU4zUiIgfSwKKworCXsgIlJpZ2h0IENhcHR1cmUgSW52ZXJ0aW5nIE11eCIsICJJTjFSIiwgIklOMVIiIH0sCisJeyAiUmlnaHQgQ2FwdHVyZSBJbnZlcnRpbmcgTXV4IiwgIklOMlIiLCAiSU4yUiIgfSwKKwl7ICJSaWdodCBDYXB0dXJlIEludmVydGluZyBNdXgiLCAiSU4zUiIsICJJTjNSIiB9LAorCisJeyAiTGVmdCBDYXB0dXJlIFBHQSIsIE5VTEwsICJMZWZ0IENhcHR1cmUgTXV4IiB9LAorCXsgIkxlZnQgQ2FwdHVyZSBQR0EiLCBOVUxMLCAiTGVmdCBDYXB0dXJlIEludmVydGluZyBNdXgiIH0sCisKKwl7ICJSaWdodCBDYXB0dXJlIFBHQSIsIE5VTEwsICJSaWdodCBDYXB0dXJlIE11eCIgfSwKKwl7ICJSaWdodCBDYXB0dXJlIFBHQSIsIE5VTEwsICJSaWdodCBDYXB0dXJlIEludmVydGluZyBNdXgiIH0sCisKKwl7ICJBSUZPVVRMIiwgIkxlZnQiLCAgIkFEQ0wiIH0sCisJeyAiQUlGT1VUTCIsICJSaWdodCIsICJBRENSIiB9LAorCXsgIkFJRk9VVFIiLCAiTGVmdCIsICAiQURDTCIgfSwKKwl7ICJBSUZPVVRSIiwgIlJpZ2h0IiwgIkFEQ1IiIH0sCisKKwl7ICJBRENMIiwgTlVMTCwgIkNMS19EU1AiIH0sCisJeyAiQURDTCIsIE5VTEwsICJMZWZ0IENhcHR1cmUgUEdBIiB9LAorCisJeyAiQURDUiIsIE5VTEwsICJDTEtfRFNQIiB9LAorCXsgIkFEQ1IiLCBOVUxMLCAiUmlnaHQgQ2FwdHVyZSBQR0EiIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBkYWNfaW50ZXJjb25bXSA9IHsKKwl7ICJEQUNMIiwgIlJpZ2h0IiwgIkFJRklOUiIgfSwKKwl7ICJEQUNMIiwgIkxlZnQiLCAgIkFJRklOTCIgfSwKKwl7ICJEQUNMIiwgTlVMTCwgIkNMS19EU1AiIH0sCisKKwl7ICJEQUNSIiwgIlJpZ2h0IiwgIkFJRklOUiIgfSwKKwl7ICJEQUNSIiwgIkxlZnQiLCAgIkFJRklOTCIgfSwKKwl7ICJEQUNSIiwgTlVMTCwgIkNMS19EU1AiIH0sCisKKwl7ICJDaGFyZ2UgcHVtcCIsIE5VTEwsICJTWVNDTEsiIH0sCisKKwl7ICJIZWFkcGhvbmUgT3V0cHV0IiwgTlVMTCwgIkhQTCBQR0EiIH0sCisJeyAiSGVhZHBob25lIE91dHB1dCIsIE5VTEwsICJIUFIgUEdBIiB9LAorCXsgIkhlYWRwaG9uZSBPdXRwdXQiLCBOVUxMLCAiQ2hhcmdlIHB1bXAiIH0sCisJeyAiSGVhZHBob25lIE91dHB1dCIsIE5VTEwsICJUT0NMSyIgfSwKKworCXsgIkxpbmUgT3V0cHV0IiwgTlVMTCwgIkxJTkVMIFBHQSIgfSwKKwl7ICJMaW5lIE91dHB1dCIsIE5VTEwsICJMSU5FUiBQR0EiIH0sCisJeyAiTGluZSBPdXRwdXQiLCBOVUxMLCAiQ2hhcmdlIHB1bXAiIH0sCisJeyAiTGluZSBPdXRwdXQiLCBOVUxMLCAiVE9DTEsiIH0sCisKKwl7ICJIUE9VVEwiLCBOVUxMLCAiSGVhZHBob25lIE91dHB1dCIgfSwKKwl7ICJIUE9VVFIiLCBOVUxMLCAiSGVhZHBob25lIE91dHB1dCIgfSwKKworCXsgIkxJTkVPVVRMIiwgTlVMTCwgIkxpbmUgT3V0cHV0IiB9LAorCXsgIkxJTkVPVVRSIiwgTlVMTCwgIkxpbmUgT3V0cHV0IiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTA0X2ludGVyY29uW10gPSB7CisJeyAiTGVmdCBTaWRldG9uZSIsICJMZWZ0IiwgIkFEQ0wiIH0sCisJeyAiTGVmdCBTaWRldG9uZSIsICJSaWdodCIsICJBRENSIiB9LAorCXsgIkRBQ0wiLCBOVUxMLCAiTGVmdCBTaWRldG9uZSIgfSwKKwkKKwl7ICJSaWdodCBTaWRldG9uZSIsICJMZWZ0IiwgIkFEQ0wiIH0sCisJeyAiUmlnaHQgU2lkZXRvbmUiLCAiUmlnaHQiLCAiQURDUiIgfSwKKwl7ICJEQUNSIiwgTlVMTCwgIlJpZ2h0IFNpZGV0b25lIiB9LAorCisJeyAiTGVmdCBCeXBhc3MiLCBOVUxMLCAiQ2xhc3MgRyIgfSwKKwl7ICJMZWZ0IEJ5cGFzcyIsIE5VTEwsICJMZWZ0IENhcHR1cmUgUEdBIiB9LAorCisJeyAiUmlnaHQgQnlwYXNzIiwgTlVMTCwgIkNsYXNzIEciIH0sCisJeyAiUmlnaHQgQnlwYXNzIiwgTlVMTCwgIlJpZ2h0IENhcHR1cmUgUEdBIiB9LAorCisJeyAiSFBMIE11eCIsICJEQUMiLCAiREFDTCIgfSwKKwl7ICJIUEwgTXV4IiwgIkJ5cGFzcyIsICJMZWZ0IEJ5cGFzcyIgfSwKKworCXsgIkhQUiBNdXgiLCAiREFDIiwgIkRBQ1IiIH0sCisJeyAiSFBSIE11eCIsICJCeXBhc3MiLCAiUmlnaHQgQnlwYXNzIiB9LAorCisJeyAiTElORUwgTXV4IiwgIkRBQyIsICJEQUNMIiB9LAorCXsgIkxJTkVMIE11eCIsICJCeXBhc3MiLCAiTGVmdCBCeXBhc3MiIH0sCisKKwl7ICJMSU5FUiBNdXgiLCAiREFDIiwgIkRBQ1IiIH0sCisJeyAiTElORVIgTXV4IiwgIkJ5cGFzcyIsICJSaWdodCBCeXBhc3MiIH0sCisKKwl7ICJIUEwgUEdBIiwgTlVMTCwgIkhQTCBNdXgiIH0sCisJeyAiSFBSIFBHQSIsIE5VTEwsICJIUFIgTXV4IiB9LAorCisJeyAiTElORUwgUEdBIiwgTlVMTCwgIkxJTkVMIE11eCIgfSwKKwl7ICJMSU5FUiBQR0EiLCBOVUxMLCAiTElORVIgTXV4IiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTEyX2ludGVyY29uW10gPSB7CisJeyAiSFBMIFBHQSIsIE5VTEwsICJEQUNMIiB9LAorCXsgIkhQUiBQR0EiLCBOVUxMLCAiREFDUiIgfSwKKworCXsgIkxJTkVMIFBHQSIsIE5VTEwsICJEQUNMIiB9LAorCXsgIkxJTkVSIFBHQSIsIE5VTEwsICJEQUNSIiB9LAorfTsKKworc3RhdGljIGludCB3bTg5MDRfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODkwNF9jb3JlX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204OTA0X2NvcmVfZGFwbV93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGNvcmVfaW50ZXJjb24sCisJCQkJQVJSQVlfU0laRShjb3JlX2ludGVyY29uKSk7CisKKwlzd2l0Y2ggKHdtODkwNC0+ZGV2dHlwZSkgeworCWNhc2UgV004OTA0OgorCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTA0X2FkY19zbmRfY29udHJvbHMsCisJCQkJICAgICBBUlJBWV9TSVpFKHdtODkwNF9hZGNfc25kX2NvbnRyb2xzKSk7CisJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfZGFjX3NuZF9jb250cm9scywKKwkJCQkgICAgIEFSUkFZX1NJWkUod204OTA0X2RhY19zbmRfY29udHJvbHMpKTsKKwkJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODkwNF9zbmRfY29udHJvbHMsCisJCQkJICAgICBBUlJBWV9TSVpFKHdtODkwNF9zbmRfY29udHJvbHMpKTsKKworCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfYWRjX2RhcG1fd2lkZ2V0cywKKwkJCQkJICBBUlJBWV9TSVpFKHdtODkwNF9hZGNfZGFwbV93aWRnZXRzKSk7CisJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODkwNF9kYWNfZGFwbV93aWRnZXRzLAorCQkJCQkgIEFSUkFZX1NJWkUod204OTA0X2RhY19kYXBtX3dpZGdldHMpKTsKKwkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTA0X2RhcG1fd2lkZ2V0cywKKwkJCQkJICBBUlJBWV9TSVpFKHdtODkwNF9kYXBtX3dpZGdldHMpKTsKKworCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgY29yZV9pbnRlcmNvbiwKKwkJCQkJQVJSQVlfU0laRShjb3JlX2ludGVyY29uKSk7CisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhZGNfaW50ZXJjb24sCisJCQkJCUFSUkFZX1NJWkUoYWRjX2ludGVyY29uKSk7CisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBkYWNfaW50ZXJjb24sCisJCQkJCUFSUkFZX1NJWkUoZGFjX2ludGVyY29uKSk7CisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCB3bTg5MDRfaW50ZXJjb24sCisJCQkJCUFSUkFZX1NJWkUod204OTA0X2ludGVyY29uKSk7CisJCWJyZWFrOworCisJY2FzZSBXTTg5MTI6CisJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfZGFjX3NuZF9jb250cm9scywKKwkJCQkgICAgIEFSUkFZX1NJWkUod204OTA0X2RhY19zbmRfY29udHJvbHMpKTsKKworCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfZGFjX2RhcG1fd2lkZ2V0cywKKwkJCQkJICBBUlJBWV9TSVpFKHdtODkwNF9kYWNfZGFwbV93aWRnZXRzKSk7CisKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGRhY19pbnRlcmNvbiwKKwkJCQkJQVJSQVlfU0laRShkYWNfaW50ZXJjb24pKTsKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIHdtODkxMl9pbnRlcmNvbiwKKwkJCQkJQVJSQVlfU0laRSh3bTg5MTJfaW50ZXJjb24pKTsKKwkJYnJlYWs7CisJfQorCisJc25kX3NvY19kYXBtX25ld193aWRnZXRzKGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB7CisJaW50IHJhdGlvOworCXVuc2lnbmVkIGludCBjbGtfc3lzX3JhdGU7Cit9IGNsa19zeXNfcmF0ZXNbXSA9IHsKKwl7ICAgNjQsICAwIH0sCisJeyAgMTI4LCAgMSB9LAorCXsgIDE5MiwgIDIgfSwKKwl7ICAyNTYsICAzIH0sCisJeyAgMzg0LCAgNCB9LAorCXsgIDUxMiwgIDUgfSwKKwl7ICA3ODYsICA2IH0sCisJeyAxMDI0LCAgNyB9LAorCXsgMTQwOCwgIDggfSwKKwl7IDE1MzYsICA5IH0sCit9OworCitzdGF0aWMgc3RydWN0IHsKKwlpbnQgcmF0ZTsKKwlpbnQgc2FtcGxlX3JhdGU7Cit9IHNhbXBsZV9yYXRlc1tdID0geworCXsgODAwMCwgIDAgIH0sCisJeyAxMTAyNSwgMSAgfSwKKwl7IDEyMDAwLCAxICB9LAorCXsgMTYwMDAsIDIgIH0sCisJeyAyMjA1MCwgMyAgfSwKKwl7IDI0MDAwLCAzICB9LAorCXsgMzIwMDAsIDQgIH0sCisJeyA0NDEwMCwgNSAgfSwKKwl7IDQ4MDAwLCA1ICB9LAorfTsKKworc3RhdGljIHN0cnVjdCB7CisJaW50IGRpdjsgLyogKjEwIGR1ZSB0byAuNXMgKi8KKwlpbnQgYmNsa19kaXY7Cit9IGJjbGtfZGl2c1tdID0geworCXsgMTAsICAwICB9LAorCXsgMTUsICAxICB9LAorCXsgMjAsICAyICB9LAorCXsgMzAsICAzICB9LAorCXsgNDAsICA0ICB9LAorCXsgNTAsICA1ICB9LAorCXsgNTUsICA2ICB9LAorCXsgNjAsICA3ICB9LAorCXsgODAsICA4ICB9LAorCXsgMTAwLCA5ICB9LAorCXsgMTEwLCAxMCB9LAorCXsgMTIwLCAxMSB9LAorCXsgMTYwLCAxMiB9LAorCXsgMjAwLCAxMyB9LAorCXsgMjIwLCAxNCB9LAorCXsgMjQwLCAxNiB9LAorCXsgMjAwLCAxNyB9LAorCXsgMzIwLCAxOCB9LAorCXsgNDQwLCAxOSB9LAorCXsgNDgwLCAyMCB9LAorfTsKKworCitzdGF0aWMgaW50IHdtODkwNF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCwgaSwgYmVzdCwgYmVzdF92YWwsIGN1cl92YWw7CisJdW5zaWduZWQgaW50IGFpZjEgPSAwOworCXVuc2lnbmVkIGludCBhaWYyID0gMDsKKwl1bnNpZ25lZCBpbnQgYWlmMyA9IDA7CisJdW5zaWduZWQgaW50IGNsb2NrMSA9IDA7CisJdW5zaWduZWQgaW50IGRhY19kaWdpdGFsMSA9IDA7CisKKwkvKiBXaGF0IEJDTEsgZG8gd2UgbmVlZD8gKi8KKwl3bTg5MDQtPmZzID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwlpZiAod204OTA0LT50ZG1fc2xvdHMpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ29uZmlndXJpbmcgZm9yICVkICVkIGJpdCBURE0gc2xvdHNcbiIsCisJCQl3bTg5MDQtPnRkbV9zbG90cywgd204OTA0LT50ZG1fd2lkdGgpOworCQl3bTg5MDQtPmJjbGsgPSBzbmRfc29jX2NhbGNfYmNsayh3bTg5MDQtPmZzLAorCQkJCQkJIHdtODkwNC0+dGRtX3dpZHRoLCAyLAorCQkJCQkJIHdtODkwNC0+dGRtX3Nsb3RzKTsKKwl9IGVsc2UgeworCQl3bTg5MDQtPmJjbGsgPSBzbmRfc29jX3BhcmFtc190b19iY2xrKHBhcmFtcyk7CisJfQorCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJYWlmMSB8PSAweDQwOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlhaWYxIHw9IDB4ODA7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CisJCWFpZjEgfD0gMHhjMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJUYXJnZXQgQkNMSyBpcyAlZEh6XG4iLCB3bTg5MDQtPmJjbGspOworCisJcmV0ID0gd204OTA0X2NvbmZpZ3VyZV9jbG9ja2luZyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyogU2VsZWN0IG5lYXJlc3QgQ0xLX1NZU19SQVRFICovCisJYmVzdCA9IDA7CisJYmVzdF92YWwgPSBhYnMoKHdtODkwNC0+c3lzY2xrX3JhdGUgLyBjbGtfc3lzX3JhdGVzWzBdLnJhdGlvKQorCQkgICAgICAgLSB3bTg5MDQtPmZzKTsKKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShjbGtfc3lzX3JhdGVzKTsgaSsrKSB7CisJCWN1cl92YWwgPSBhYnMoKHdtODkwNC0+c3lzY2xrX3JhdGUgLworCQkJICAgICAgIGNsa19zeXNfcmF0ZXNbaV0ucmF0aW8pIC0gd204OTA0LT5mcyk7OworCQlpZiAoY3VyX3ZhbCA8IGJlc3RfdmFsKSB7CisJCQliZXN0ID0gaTsKKwkJCWJlc3RfdmFsID0gY3VyX3ZhbDsKKwkJfQorCX0KKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJTZWxlY3RlZCBDTEtfU1lTX1JBVElPIG9mICVkXG4iLAorCQljbGtfc3lzX3JhdGVzW2Jlc3RdLnJhdGlvKTsKKwljbG9jazEgfD0gKGNsa19zeXNfcmF0ZXNbYmVzdF0uY2xrX3N5c19yYXRlCisJCSAgIDw8IFdNODkwNF9DTEtfU1lTX1JBVEVfU0hJRlQpOworCisJLyogU0FNUExFX1JBVEUgKi8KKwliZXN0ID0gMDsKKwliZXN0X3ZhbCA9IGFicyh3bTg5MDQtPmZzIC0gc2FtcGxlX3JhdGVzWzBdLnJhdGUpOworCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKHNhbXBsZV9yYXRlcyk7IGkrKykgeworCQkvKiBDbG9zZXN0IG1hdGNoICovCisJCWN1cl92YWwgPSBhYnMod204OTA0LT5mcyAtIHNhbXBsZV9yYXRlc1tpXS5yYXRlKTsKKwkJaWYgKGN1cl92YWwgPCBiZXN0X3ZhbCkgeworCQkJYmVzdCA9IGk7CisJCQliZXN0X3ZhbCA9IGN1cl92YWw7CisJCX0KKwl9CisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU2VsZWN0ZWQgU0FNUExFX1JBVEUgb2YgJWRIelxuIiwKKwkJc2FtcGxlX3JhdGVzW2Jlc3RdLnJhdGUpOworCWNsb2NrMSB8PSAoc2FtcGxlX3JhdGVzW2Jlc3RdLnNhbXBsZV9yYXRlCisJCSAgIDw8IFdNODkwNF9TQU1QTEVfUkFURV9TSElGVCk7CisKKwkvKiBFbmFibGUgc2xvcGluZyBzdG9wYmFuZCBmaWx0ZXIgZm9yIGxvdyBzYW1wbGUgcmF0ZXMgKi8KKwlpZiAod204OTA0LT5mcyA8PSAyNDAwMCkKKwkJZGFjX2RpZ2l0YWwxIHw9IFdNODkwNF9EQUNfU0JfRklMVDsKKworCS8qIEJDTEtfRElWICovCisJYmVzdCA9IDA7CisJYmVzdF92YWwgPSBJTlRfTUFYOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJjbGtfZGl2cyk7IGkrKykgeworCQljdXJfdmFsID0gKCh3bTg5MDQtPnN5c2Nsa19yYXRlICogMTApIC8gYmNsa19kaXZzW2ldLmRpdikKKwkJCS0gd204OTA0LT5iY2xrOworCQlpZiAoY3VyX3ZhbCA8IDApIC8qIFRhYmxlIGlzIHNvcnRlZCAqLworCQkJYnJlYWs7CisJCWlmIChjdXJfdmFsIDwgYmVzdF92YWwpIHsKKwkJCWJlc3QgPSBpOworCQkJYmVzdF92YWwgPSBjdXJfdmFsOworCQl9CisJfQorCXdtODkwNC0+YmNsayA9ICh3bTg5MDQtPnN5c2Nsa19yYXRlICogMTApIC8gYmNsa19kaXZzW2Jlc3RdLmRpdjsKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJTZWxlY3RlZCBCQ0xLX0RJViBvZiAlZCBmb3IgJWRIeiBCQ0xLXG4iLAorCQliY2xrX2RpdnNbYmVzdF0uZGl2LCB3bTg5MDQtPmJjbGspOworCWFpZjIgfD0gYmNsa19kaXZzW2Jlc3RdLmJjbGtfZGl2OworCisJLyogTFJDTEsgaXMgYSBzaW1wbGUgZnJhY3Rpb24gb2YgQkNMSyAqLworCWRldl9kYmcoY29kZWMtPmRldiwgIkxSQ0xLX1JBVEUgaXMgJWRcbiIsIHdtODkwNC0+YmNsayAvIHdtODkwNC0+ZnMpOworCWFpZjMgfD0gd204OTA0LT5iY2xrIC8gd204OTA0LT5mczsKKworCS8qIEFwcGx5IHRoZSBzZXR0aW5ncyAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9EQUNfRElHSVRBTF8xLAorCQkJICAgIFdNODkwNF9EQUNfU0JfRklMVCwgZGFjX2RpZ2l0YWwxKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzEsCisJCQkgICAgV004OTA0X0FJRl9XTF9NQVNLLCBhaWYxKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzIsCisJCQkgICAgV004OTA0X0JDTEtfRElWX01BU0ssIGFpZjIpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMywKKwkJCSAgICBXTTg5MDRfTFJDTEtfUkFURV9NQVNLLCBhaWYzKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMSwKKwkJCSAgICBXTTg5MDRfU0FNUExFX1JBVEVfTUFTSyB8CisJCQkgICAgV004OTA0X0NMS19TWVNfUkFURV9NQVNLLCBjbG9jazEpOworCisJLyogVXBkYXRlIGZpbHRlcnMgZm9yIHRoZSBuZXcgc2V0dGluZ3MgKi8KKwl3bTg5MDRfc2V0X3JldHVuZV9tb2JpbGUoY29kZWMpOworCXdtODkwNF9zZXRfZGVlbXBoKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgd204OTA0X3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBjbGtfaWQsCisJCQkgICAgIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODkwNF9wcml2ICpwcml2ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY2xrX2lkKSB7CisJY2FzZSBXTTg5MDRfQ0xLX01DTEs6CisJCXByaXYtPnN5c2Nsa19zcmMgPSBjbGtfaWQ7CisJCXByaXYtPm1jbGtfcmF0ZSA9IGZyZXE7CisJCWJyZWFrOworCisJY2FzZSBXTTg5MDRfQ0xLX0ZMTDoKKwkJcHJpdi0+c3lzY2xrX3NyYyA9IGNsa19pZDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXZfZGJnKGRhaS0+ZGV2LCAiQ2xvY2sgc291cmNlIGlzICVkIGF0ICV1SHpcbiIsIGNsa19pZCwgZnJlcSk7CisKKwl3bTg5MDRfY29uZmlndXJlX2Nsb2NraW5nKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODkwNF9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJdW5zaWduZWQgaW50IGFpZjEgPSAwOworCXVuc2lnbmVkIGludCBhaWYzID0gMDsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGTToKKwkJYWlmMyB8PSBXTTg5MDRfTFJDTEtfRElSOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRlM6CisJCWFpZjEgfD0gV004OTA0X0JDTEtfRElSOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWFpZjEgfD0gV004OTA0X0JDTEtfRElSOworCQlhaWYzIHw9IFdNODkwNF9MUkNMS19ESVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQlhaWYxIHw9IFdNODkwNF9BSUZfTFJDTEtfSU5WOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWFpZjEgfD0gMHgzOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJYWlmMSB8PSAweDI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWFpZjEgfD0gMHgxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQkvKiBmcmFtZSBpbnZlcnNpb24gbm90IHZhbGlkIGZvciBEU1AgbW9kZXMgKi8KKwkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCQlhaWYxIHw9IFdNODkwNF9BSUZfQkNMS19JTlY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJCWFpZjEgfD0gV004OTA0X0FJRl9CQ0xLX0lOViB8IFdNODkwNF9BSUZfTFJDTEtfSU5WOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCQlhaWYxIHw9IFdNODkwNF9BSUZfQkNMS19JTlY7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKKwkJCWFpZjEgfD0gV004OTA0X0FJRl9MUkNMS19JTlY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMSwKKwkJCSAgICBXTTg5MDRfQUlGX0JDTEtfSU5WIHwgV004OTA0X0FJRl9MUkNMS19JTlYgfAorCQkJICAgIFdNODkwNF9BSUZfRk1UX01BU0sgfCBXTTg5MDRfQkNMS19ESVIsIGFpZjEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMywKKwkJCSAgICBXTTg5MDRfTFJDTEtfRElSLCBhaWYzKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgd204OTA0X3NldF90ZG1fc2xvdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IHR4X21hc2ssCisJCQkgICAgICAgdW5zaWduZWQgaW50IHJ4X21hc2ssIGludCBzbG90cywgaW50IHNsb3Rfd2lkdGgpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGFpZjEgPSAwOworCisJLyogRG9uJ3QgbmVlZCB0byB2YWxpZGF0ZSBhbnl0aGluZyBpZiB3ZSdyZSB0dXJuaW5nIG9mZiBURE0gKi8KKwlpZiAoc2xvdHMgPT0gMCkKKwkJZ290byBvdXQ7CisKKwkvKiBOb3RlIHRoYXQgd2UgYWxsb3cgY29uZmlndXJhdGlvbnMgd2UgY2FuJ3QgaGFuZGxlIG91cnNlbHZlcyAtIAorCSAqIGZvciBleGFtcGxlLCB3ZSBjYW4gZ2VuZXJhdGUgY2xvY2tzIGZvciBzbG90cyAyIGFuZCB1cCBldmVuIGlmCisJICogd2UgY2FuJ3QgdXNlIHRob3NlIHNsb3RzIG91cnNlbHZlcy4KKwkgKi8KKwlhaWYxIHw9IFdNODkwNF9BSUZBRENfVERNIHwgV004OTA0X0FJRkRBQ19URE07CisKKwlzd2l0Y2ggKHJ4X21hc2spIHsKKwljYXNlIDM6CisJCWJyZWFrOworCWNhc2UgMHhjOgorCQlhaWYxIHw9IFdNODkwNF9BSUZBRENfVERNX0NIQU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCisJc3dpdGNoICh0eF9tYXNrKSB7CisJY2FzZSAzOgorCQlicmVhazsKKwljYXNlIDB4YzoKKwkJYWlmMSB8PSBXTTg5MDRfQUlGREFDX1RETV9DSEFOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKK291dDoKKwl3bTg5MDQtPnRkbV93aWR0aCA9IHNsb3Rfd2lkdGg7CisJd204OTA0LT50ZG1fc2xvdHMgPSBzbG90cyAvIDI7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzEsCisJCQkgICAgV004OTA0X0FJRkFEQ19URE0gfCBXTTg5MDRfQUlGQURDX1RETV9DSEFOIHwKKwkJCSAgICBXTTg5MDRfQUlGREFDX1RETSB8IFdNODkwNF9BSUZEQUNfVERNX0NIQU4sIGFpZjEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBfZmxsX2RpdiB7CisJdTE2IGZsbF9mcmF0aW87CisJdTE2IGZsbF9vdXRkaXY7CisJdTE2IGZsbF9jbGtfcmVmX2RpdjsKKwl1MTYgbjsKKwl1MTYgazsKK307CisKKy8qIFRoZSBzaXplIGluIGJpdHMgb2YgdGhlIEZMTCBkaXZpZGUgbXVsdGlwbGllZCBieSAxMAorICogdG8gYWxsb3cgcm91bmRpbmcgbGF0ZXIgKi8KKyNkZWZpbmUgRklYRURfRkxMX1NJWkUgKCgxIDw8IDE2KSAqIDEwKQorCitzdGF0aWMgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgbWluOworCXVuc2lnbmVkIGludCBtYXg7CisJdTE2IGZsbF9mcmF0aW87CisJaW50IHJhdGlvOworfSBmbGxfZnJhdGlvc1tdID0geworCXsgICAgICAgMCwgICAgNjQwMDAsIDQsIDE2IH0sCisJeyAgIDY0MDAwLCAgIDEyODAwMCwgMywgIDggfSwKKwl7ICAxMjgwMDAsICAgMjU2MDAwLCAyLCAgNCB9LAorCXsgIDI1NjAwMCwgIDEwMDAwMDAsIDEsICAyIH0sCisJeyAxMDAwMDAwLCAxMzUwMDAwMCwgMCwgIDEgfSwKK307CisKK3N0YXRpYyBpbnQgZmxsX2ZhY3RvcnMoc3RydWN0IF9mbGxfZGl2ICpmbGxfZGl2LCB1bnNpZ25lZCBpbnQgRnJlZiwKKwkJICAgICAgIHVuc2lnbmVkIGludCBGb3V0KQoreworCXU2NCBLcGFydDsKKwl1bnNpZ25lZCBpbnQgSywgTmRpdiwgTm1vZCwgdGFyZ2V0OworCXVuc2lnbmVkIGludCBkaXY7CisJaW50IGk7CisKKwkvKiBGcmVmIG11c3QgYmUgPD0xMy41TUh6ICovCisJZGl2ID0gMTsKKwlmbGxfZGl2LT5mbGxfY2xrX3JlZl9kaXYgPSAwOworCXdoaWxlICgoRnJlZiAvIGRpdikgPiAxMzUwMDAwMCkgeworCQlkaXYgKj0gMjsKKwkJZmxsX2Rpdi0+ZmxsX2Nsa19yZWZfZGl2Kys7CisKKwkJaWYgKGRpdiA+IDgpIHsKKwkJCXByX2VycigiQ2FuJ3Qgc2NhbGUgJWRNSHogaW5wdXQgZG93biB0byA8PTEzLjVNSHpcbiIsCisJCQkgICAgICAgRnJlZik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXByX2RlYnVnKCJGcmVmPSV1IEZvdXQ9JXVcbiIsIEZyZWYsIEZvdXQpOworCisJLyogQXBwbHkgdGhlIGRpdmlzaW9uIGZvciBvdXIgcmVtYWluaW5nIGNhbGN1bGF0aW9ucyAqLworCUZyZWYgLz0gZGl2OworCisJLyogRnZjbyBzaG91bGQgYmUgOTAtMTAwTUh6OyBkb24ndCBjaGVjayB0aGUgdXBwZXIgYm91bmQgKi8KKwlkaXYgPSA0OworCXdoaWxlIChGb3V0ICogZGl2IDwgOTAwMDAwMDApIHsKKwkJZGl2Kys7CisJCWlmIChkaXYgPiA2NCkgeworCQkJcHJfZXJyKCJVbmFibGUgdG8gZmluZCBGTExfT1VURElWIGZvciBGb3V0PSV1SHpcbiIsCisJCQkgICAgICAgRm91dCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwl0YXJnZXQgPSBGb3V0ICogZGl2OworCWZsbF9kaXYtPmZsbF9vdXRkaXYgPSBkaXYgLSAxOworCisJcHJfZGVidWcoIkZ2Y289JWRIelxuIiwgdGFyZ2V0KTsKKworCS8qIEZpbmQgYW4gYXBwcm9wcmFpdGUgRkxMX0ZSQVRJTyBhbmQgZmFjdG9yIGl0IG91dCBvZiB0aGUgdGFyZ2V0ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmxsX2ZyYXRpb3MpOyBpKyspIHsKKwkJaWYgKGZsbF9mcmF0aW9zW2ldLm1pbiA8PSBGcmVmICYmIEZyZWYgPD0gZmxsX2ZyYXRpb3NbaV0ubWF4KSB7CisJCQlmbGxfZGl2LT5mbGxfZnJhdGlvID0gZmxsX2ZyYXRpb3NbaV0uZmxsX2ZyYXRpbzsKKwkJCXRhcmdldCAvPSBmbGxfZnJhdGlvc1tpXS5yYXRpbzsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChpID09IEFSUkFZX1NJWkUoZmxsX2ZyYXRpb3MpKSB7CisJCXByX2VycigiVW5hYmxlIHRvIGZpbmQgRkxMX0ZSQVRJTyBmb3IgRnJlZj0ldUh6XG4iLCBGcmVmKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogTm93LCBjYWxjdWxhdGUgTi5LICovCisJTmRpdiA9IHRhcmdldCAvIEZyZWY7CisKKwlmbGxfZGl2LT5uID0gTmRpdjsKKwlObW9kID0gdGFyZ2V0ICUgRnJlZjsKKwlwcl9kZWJ1ZygiTm1vZD0lZFxuIiwgTm1vZCk7CisKKwkvKiBDYWxjdWxhdGUgZnJhY3Rpb25hbCBwYXJ0IC0gc2NhbGUgdXAgc28gd2UgY2FuIHJvdW5kLiAqLworCUtwYXJ0ID0gRklYRURfRkxMX1NJWkUgKiAobG9uZyBsb25nKU5tb2Q7CisKKwlkb19kaXYoS3BhcnQsIEZyZWYpOworCisJSyA9IEtwYXJ0ICYgMHhGRkZGRkZGRjsKKworCWlmICgoSyAlIDEwKSA+PSA1KQorCQlLICs9IDU7CisKKwkvKiBNb3ZlIGRvd24gdG8gcHJvcGVyIHJhbmdlIG5vdyByb3VuZGluZyBpcyBkb25lICovCisJZmxsX2Rpdi0+ayA9IEsgLyAxMDsKKworCXByX2RlYnVnKCJOPSV4IEs9JXggRkxMX0ZSQVRJTz0leCBGTExfT1VURElWPSV4IEZMTF9DTEtfUkVGX0RJVj0leFxuIiwKKwkJIGZsbF9kaXYtPm4sIGZsbF9kaXYtPmssCisJCSBmbGxfZGl2LT5mbGxfZnJhdGlvLCBmbGxfZGl2LT5mbGxfb3V0ZGl2LAorCQkgZmxsX2Rpdi0+ZmxsX2Nsa19yZWZfZGl2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODkwNF9zZXRfZmxsKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgZmxsX2lkLCBpbnQgc291cmNlLAorCQkJICB1bnNpZ25lZCBpbnQgRnJlZiwgdW5zaWduZWQgaW50IEZvdXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IF9mbGxfZGl2IGZsbF9kaXY7CisJaW50IHJldCwgdmFsOworCWludCBjbG9jazIsIGZsbDE7CisKKwkvKiBBbnkgY2hhbmdlPyAqLworCWlmIChzb3VyY2UgPT0gd204OTA0LT5mbGxfc3JjICYmIEZyZWYgPT0gd204OTA0LT5mbGxfZnJlZiAmJgorCSAgICBGb3V0ID09IHdtODkwNC0+ZmxsX2ZvdXQpCisJCXJldHVybiAwOworCisJY2xvY2syID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMik7CisKKwlpZiAoRm91dCA9PSAwKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkZMTCBkaXNhYmxlZFxuIik7CisKKwkJd204OTA0LT5mbGxfZnJlZiA9IDA7CisJCXdtODkwNC0+ZmxsX2ZvdXQgPSAwOworCisJCS8qIEdhdGUgU1lTQ0xLIHRvIGF2b2lkIGdsaXRjaGVzICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9DTE9DS19SQVRFU18yLAorCQkJCSAgICBXTTg5MDRfQ0xLX1NZU19FTkEsIDApOworCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8xLAorCQkJCSAgICBXTTg5MDRfRkxMX09TQ19FTkEgfCBXTTg5MDRfRkxMX0VOQSwgMCk7CisKKwkJZ290byBvdXQ7CisJfQorCisJLyogVmFsaWRhdGUgdGhlIEZMTCBJRCAqLworCXN3aXRjaCAoc291cmNlKSB7CisJY2FzZSBXTTg5MDRfRkxMX01DTEs6CisJY2FzZSBXTTg5MDRfRkxMX0xSQ0xLOgorCWNhc2UgV004OTA0X0ZMTF9CQ0xLOgorCQlyZXQgPSBmbGxfZmFjdG9ycygmZmxsX2RpdiwgRnJlZiwgRm91dCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJCWJyZWFrOworCisJY2FzZSBXTTg5MDRfRkxMX0ZSRUVfUlVOTklORzoKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiVXNpbmcgZnJlZSBydW5uaW5nIEZMTFxuIik7CisJCS8qIEZvcmNlIDEyTUh6IGFuZCBvdXRwdXQvNCBmb3Igbm93ICovCisJCUZvdXQgPSAxMjAwMDAwMDsKKwkJRnJlZiA9IDEyMDAwMDAwOworCisJCW1lbXNldCgmZmxsX2RpdiwgMCwgc2l6ZW9mKGZsbF9kaXYpKTsKKwkJZmxsX2Rpdi5mbGxfb3V0ZGl2ID0gMzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJVbmtub3duIEZMTCBJRCAlZFxuIiwgZmxsX2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogU2F2ZSBjdXJyZW50IHN0YXRlIHRoZW4gZGlzYWJsZSB0aGUgRkxMIGFuZCBTWVNDTEsgdG8gYXZvaWQKKwkgKiBtaXNjbG9ja2luZyAqLworCWZsbDEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8xKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMiwKKwkJCSAgICBXTTg5MDRfQ0xLX1NZU19FTkEsIDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8xLAorCQkJICAgIFdNODkwNF9GTExfT1NDX0VOQSB8IFdNODkwNF9GTExfRU5BLCAwKTsKKworCS8qIFVubG9jayBmb3JjZWQgb3NjaWxhdG9yIGNvbnRyb2wgdG8gc3dpdGNoIGl0IG9uL29mZiAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9DT05UUk9MX0lOVEVSRkFDRV9URVNUXzEsCisJCQkgICAgV004OTA0X1VTRVJfS0VZLCBXTTg5MDRfVVNFUl9LRVkpOworCisJaWYgKGZsbF9pZCA9PSBXTTg5MDRfRkxMX0ZSRUVfUlVOTklORykgeworCQl2YWwgPSBXTTg5MDRfRkxMX0ZSQ19OQ087CisJfSBlbHNlIHsKKwkJdmFsID0gMDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX05DT19URVNUXzEsIFdNODkwNF9GTExfRlJDX05DTywKKwkJCSAgICB2YWwpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9DT05UUk9MX0lOVEVSRkFDRV9URVNUXzEsCisJCQkgICAgV004OTA0X1VTRVJfS0VZLCAwKTsKKworCXN3aXRjaCAoZmxsX2lkKSB7CisJY2FzZSBXTTg5MDRfRkxMX01DTEs6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF81LAorCQkJCSAgICBXTTg5MDRfRkxMX0NMS19SRUZfU1JDX01BU0ssIDApOworCQlicmVhazsKKworCWNhc2UgV004OTA0X0ZMTF9MUkNMSzoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzUsCisJCQkJICAgIFdNODkwNF9GTExfQ0xLX1JFRl9TUkNfTUFTSywgMSk7CisJCWJyZWFrOworCisJY2FzZSBXTTg5MDRfRkxMX0JDTEs6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF81LAorCQkJCSAgICBXTTg5MDRfRkxMX0NMS19SRUZfU1JDX01BU0ssIDIpOworCQlicmVhazsKKwl9CisKKwlpZiAoZmxsX2Rpdi5rKQorCQl2YWwgPSBXTTg5MDRfRkxMX0ZSQUNOX0VOQTsKKwllbHNlCisJCXZhbCA9IDA7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzEsCisJCQkgICAgV004OTA0X0ZMTF9GUkFDTl9FTkEsIHZhbCk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMiwKKwkJCSAgICBXTTg5MDRfRkxMX09VVERJVl9NQVNLIHwgV004OTA0X0ZMTF9GUkFUSU9fTUFTSywKKwkJCSAgICAoZmxsX2Rpdi5mbGxfb3V0ZGl2IDw8IFdNODkwNF9GTExfT1VURElWX1NISUZUKSB8CisJCQkgICAgKGZsbF9kaXYuZmxsX2ZyYXRpbyA8PCBXTTg5MDRfRkxMX0ZSQVRJT19TSElGVCkpOworCisJc25kX3NvY193cml0ZShjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzMsIGZsbF9kaXYuayk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfNCwgV004OTA0X0ZMTF9OX01BU0ssCisJCQkgICAgZmxsX2Rpdi5uIDw8IFdNODkwNF9GTExfTl9TSElGVCk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfNSwKKwkJCSAgICBXTTg5MDRfRkxMX0NMS19SRUZfRElWX01BU0ssCisJCQkgICAgZmxsX2Rpdi5mbGxfY2xrX3JlZl9kaXYgCisJCQkgICAgPDwgV004OTA0X0ZMTF9DTEtfUkVGX0RJVl9TSElGVCk7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJGTEwgY29uZmlndXJlZCBmb3IgJWRIei0+JWRIelxuIiwgRnJlZiwgRm91dCk7CisKKwl3bTg5MDQtPmZsbF9mcmVmID0gRnJlZjsKKwl3bTg5MDQtPmZsbF9mb3V0ID0gRm91dDsKKwl3bTg5MDQtPmZsbF9zcmMgPSBzb3VyY2U7CisKKwkvKiBFbmFibGUgdGhlIEZMTCBpZiBpdCB3YXMgcHJldmlvdXNseSBhY3RpdmUgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMSwKKwkJCSAgICBXTTg5MDRfRkxMX09TQ19FTkEsIGZsbDEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8xLAorCQkJICAgIFdNODkwNF9GTExfRU5BLCBmbGwxKTsKKworb3V0OgorCS8qIFJlZW5hYmxlIFNZU0NMSyBpZiBpdCB3YXMgcHJldmlvdXNseSBhY3RpdmUgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMiwKKwkJCSAgICBXTTg5MDRfQ0xLX1NZU19FTkEsIGNsb2NrMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5MDRfZGlnaXRhbF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCBpbnQgbXV0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCWludCB2YWw7CisKKwlpZiAobXV0ZSkKKwkJdmFsID0gV004OTA0X0RBQ19NVVRFOworCWVsc2UKKwkJdmFsID0gMDsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9EQUNfRElHSVRBTF8xLCBXTTg5MDRfREFDX01VVEUsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd204OTA0X3N5bmNfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgaTsKKworCWlmICghY29kZWMtPmNhY2hlX3N5bmMpCisJCXJldHVybjsKKworCWNvZGVjLT5jYWNoZV9vbmx5ID0gMDsKKworCS8qIFN5bmMgYmFjayBjYWNoZWQgdmFsdWVzIGlmIHRoZXkncmUgZGlmZmVyZW50IGZyb20gdGhlCisJICogaGFyZHdhcmUgZGVmYXVsdC4KKwkgKi8KKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRSh3bTg5MDQtPnJlZ19jYWNoZSk7IGkrKykgeworCQlpZiAoIXdtODkwNF9hY2Nlc3NbaV0ud3JpdGFibGUpCisJCQljb250aW51ZTsKKworCQlpZiAod204OTA0LT5yZWdfY2FjaGVbaV0gPT0gd204OTA0X3JlZ1tpXSkKKwkJCWNvbnRpbnVlOworCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIGksIHdtODkwNC0+cmVnX2NhY2hlW2ldKTsKKwl9CisKKwljb2RlYy0+Y2FjaGVfc3luYyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJLyogVk1JRCByZXNpc3RhbmNlIDIqNTBrICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9WTUlEX0NPTlRST0xfMCwKKwkJCQkgICAgV004OTA0X1ZNSURfUkVTX01BU0ssCisJCQkJICAgIDB4MSA8PCBXTTg5MDRfVk1JRF9SRVNfU0hJRlQpOworCisJCS8qIE5vcm1hbCBiaWFzIGN1cnJlbnQgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0JJQVNfQ09OVFJPTF8wLAorCQkJCSAgICBXTTg5MDRfSVNFTF9NQVNLLCAyIDw8IFdNODkwNF9JU0VMX1NISUZUKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204OTA0LT5zdXBwbGllcyksCisJCQkJCQkgICAgd204OTA0LT5zdXBwbGllcyk7CisJCQlpZiAocmV0ICE9IDApIHsKKwkJCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkJCSJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwKKwkJCQkJcmV0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQl3bTg5MDRfc3luY19jYWNoZShjb2RlYyk7CisKKwkJCS8qIEVuYWJsZSBiaWFzICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQklBU19DT05UUk9MXzAsCisJCQkJCSAgICBXTTg5MDRfQklBU19FTkEsIFdNODkwNF9CSUFTX0VOQSk7CisKKwkJCS8qIEVuYWJsZSBWTUlELCBWTUlEIGJ1ZmZlcmluZywgMio1ayByZXNpc3RhbmNlICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfVk1JRF9DT05UUk9MXzAsCisJCQkJCSAgICBXTTg5MDRfVk1JRF9FTkEgfAorCQkJCQkgICAgV004OTA0X1ZNSURfUkVTX01BU0ssCisJCQkJCSAgICBXTTg5MDRfVk1JRF9FTkEgfAorCQkJCQkgICAgMHgzIDw8IFdNODkwNF9WTUlEX1JFU19TSElGVCk7CisKKwkJCS8qIExldCBWTUlEIHJhbXAgKi8KKwkJCW1zbGVlcCgxKTsKKwkJfQorCisJCS8qIE1haW50YWluIFZNSUQgd2l0aCAyKjI1MGsgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X1ZNSURfQ09OVFJPTF8wLAorCQkJCSAgICBXTTg5MDRfVk1JRF9SRVNfTUFTSywKKwkJCQkgICAgMHgyIDw8IFdNODkwNF9WTUlEX1JFU19TSElGVCk7CisKKwkJLyogQmlhcyBjdXJyZW50ICowLjUgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0JJQVNfQ09OVFJPTF8wLAorCQkJCSAgICBXTTg5MDRfSVNFTF9NQVNLLCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCS8qIFR1cm4gb2ZmIFZNSUQgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X1ZNSURfQ09OVFJPTF8wLAorCQkJCSAgICBXTTg5MDRfVk1JRF9SRVNfTUFTSyB8IFdNODkwNF9WTUlEX0VOQSwgMCk7CisKKwkJLyogU3RvcCBiaWFzIGdlbmVyYXRpb24gKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0JJQVNfQ09OVFJPTF8wLAorCQkJCSAgICBXTTg5MDRfQklBU19FTkEsIDApOworCisjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgorCQkvKiBQb3N0IDIuNi4zNCB3ZSB3aWxsIGJlIGFibGUgdG8gZ2V0IGEgY2FsbGJhY2sgd2hlbgorCQkgKiB0aGUgcmVndWxhdG9ycyBhcmUgZGlzYWJsZWQgd2hpY2ggd2UgY2FuIHVzZSBidXQKKwkJICogZm9yIG5vdyBqdXN0IGFzc3VtZSB0aGF0IHRoZSBwb3dlciB3aWxsIGJlIGN1dCBpZgorCQkgKiB0aGUgcmVndWxhdG9yIEFQSSBpcyBpbiB1c2UuCisJCSAqLworCQljb2RlYy0+Y2FjaGVfc3luYyA9IDE7CisjZW5kaWYKKworCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTA0LT5zdXBwbGllcyksCisJCQkJICAgICAgIHdtODkwNC0+c3VwcGxpZXMpOworCQlicmVhazsKKwl9CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBXTTg5MDRfUkFURVMgU05EUlZfUENNX1JBVEVfODAwMF85NjAwMAorCisjZGVmaW5lIFdNODkwNF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTA0X2RhaV9vcHMgPSB7CisJLnNldF9zeXNjbGsgPSB3bTg5MDRfc2V0X3N5c2NsaywKKwkuc2V0X2ZtdCA9IHdtODkwNF9zZXRfZm10LAorCS5zZXRfdGRtX3Nsb3QgPSB3bTg5MDRfc2V0X3RkbV9zbG90LAorCS5zZXRfcGxsID0gd204OTA0X3NldF9mbGwsCisJLmh3X3BhcmFtcyA9IHdtODkwNF9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZSA9IHdtODkwNF9kaWdpdGFsX211dGUsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTA0X2RhaSA9IHsKKwkubmFtZSA9ICJXTTg5MDQiLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBXTTg5MDRfUkFURVMsCisJCS5mb3JtYXRzID0gV004OTA0X0ZPUk1BVFMsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFdNODkwNF9SQVRFUywKKwkJLmZvcm1hdHMgPSBXTTg5MDRfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmd204OTA0X2RhaV9vcHMsCisJLnN5bW1ldHJpY19yYXRlcyA9IDEsCit9OworRVhQT1JUX1NZTUJPTF9HUEwod204OTA0X2RhaSk7CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd204OTA0X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODkwNF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5MDRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCisJd204OTA0X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHdtODkwNF9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgd204OTA0X3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIHZvaWQgd204OTA0X2hhbmRsZV9yZXR1bmVfbW9iaWxlX3BkYXRhKHN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5MDQtPmNvZGVjOworCXN0cnVjdCB3bTg5MDRfcGRhdGEgKnBkYXRhID0gd204OTA0LT5wZGF0YTsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjb250cm9sID0KKwkJU09DX0VOVU1fRVhUKCJFUSBNb2RlIiwKKwkJCSAgICAgd204OTA0LT5yZXR1bmVfbW9iaWxlX2VudW0sCisJCQkgICAgIHdtODkwNF9nZXRfcmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5MDRfcHV0X3JldHVuZV9tb2JpbGVfZW51bSk7CisJaW50IHJldCwgaSwgajsKKwljb25zdCBjaGFyICoqdDsKKworCS8qIFdlIG5lZWQgYW4gYXJyYXkgb2YgdGV4dHMgZm9yIHRoZSBlbnVtIEFQSSBidXQgdGhlIG51bWJlcgorCSAqIG9mIHRleHRzIGlzIGxpa2VseSB0byBiZSBsZXNzIHRoYW4gdGhlIG51bWJlciBvZgorCSAqIGNvbmZpZ3VyYXRpb25zIGR1ZSB0byB0aGUgc2FtcGxlIHJhdGUgZGVwZW5kZW5jeSBvZiB0aGUKKwkgKiBjb25maWd1cmF0aW9ucy4gKi8KKwl3bTg5MDQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzID0gMDsKKwl3bTg5MDQtPnJldHVuZV9tb2JpbGVfdGV4dHMgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZnczsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCB3bTg5MDQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzOyBqKyspIHsKKwkJCWlmIChzdHJjbXAocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5uYW1lLAorCQkJCSAgIHdtODkwNC0+cmV0dW5lX21vYmlsZV90ZXh0c1tqXSkgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChqICE9IHdtODkwNC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMpCisJCQljb250aW51ZTsKKworCQkvKiBFeHBhbmQgdGhlIGFycmF5Li4uICovCisJCXQgPSBrcmVhbGxvYyh3bTg5MDQtPnJldHVuZV9tb2JpbGVfdGV4dHMsCisJCQkgICAgIHNpemVvZihjaGFyICopICogCisJCQkgICAgICh3bTg5MDQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzICsgMSksCisJCQkgICAgIEdGUF9LRVJORUwpOworCQlpZiAodCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJLyogLi4uc3RvcmUgdGhlIG5ldyBlbnRyeS4uLiAqLworCQl0W3dtODkwNC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHNdID0gCisJCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLm5hbWU7CisKKwkJLyogLi4uYW5kIHJlbWVtYmVyIHRoZSBuZXcgdmVyc2lvbi4gKi8KKwkJd204OTA0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cysrOworCQl3bTg5MDQtPnJldHVuZV9tb2JpbGVfdGV4dHMgPSB0OworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIkFsbG9jYXRlZCAlZCB1bmlxdWUgUmVUdW5lIE1vYmlsZSBuYW1lc1xuIiwKKwkJd204OTA0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cyk7CisKKwl3bTg5MDQtPnJldHVuZV9tb2JpbGVfZW51bS5tYXggPSB3bTg5MDQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzOworCXdtODkwNC0+cmV0dW5lX21vYmlsZV9lbnVtLnRleHRzID0gd204OTA0LT5yZXR1bmVfbW9iaWxlX3RleHRzOworCisJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoJndtODkwNC0+Y29kZWMsICZjb250cm9sLCAxKTsKKwlpZiAocmV0ICE9IDApCisJCWRldl9lcnIod204OTA0LT5jb2RlYy5kZXYsCisJCQkiRmFpbGVkIHRvIGFkZCBSZVR1bmUgTW9iaWxlIGNvbnRyb2w6ICVkXG4iLCByZXQpOworfQorCitzdGF0aWMgdm9pZCB3bTg5MDRfaGFuZGxlX3BkYXRhKHN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5MDQtPmNvZGVjOworCXN0cnVjdCB3bTg5MDRfcGRhdGEgKnBkYXRhID0gd204OTA0LT5wZGF0YTsKKwlpbnQgcmV0LCBpOworCisJaWYgKCFwZGF0YSkgeworCQlzbmRfc29jX2FkZF9jb250cm9scygmd204OTA0LT5jb2RlYywgd204OTA0X2VxX2NvbnRyb2xzLAorCQkJCSAgICAgQVJSQVlfU0laRSh3bTg5MDRfZXFfY29udHJvbHMpKTsKKwkJcmV0dXJuOworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVkIERSQyBjb25maWd1cmF0aW9uc1xuIiwgcGRhdGEtPm51bV9kcmNfY2Zncyk7CisKKwlpZiAocGRhdGEtPm51bV9kcmNfY2ZncykgeworCQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjb250cm9sID0KKwkJCVNPQ19FTlVNX0VYVCgiRFJDIE1vZGUiLCB3bTg5MDQtPmRyY19lbnVtLAorCQkJCSAgICAgd204OTA0X2dldF9kcmNfZW51bSwgd204OTA0X3B1dF9kcmNfZW51bSk7CisKKwkJLyogV2UgbmVlZCBhbiBhcnJheSBvZiB0ZXh0cyBmb3IgdGhlIGVudW0gQVBJICovCisJCXdtODkwNC0+ZHJjX3RleHRzID0ga21hbGxvYyhzaXplb2YoY2hhciAqKQorCQkJCQkgICAgKiBwZGF0YS0+bnVtX2RyY19jZmdzLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF3bTg5MDQtPmRyY190ZXh0cykgeworCQkJZGV2X2Vycih3bTg5MDQtPmNvZGVjLmRldiwKKwkJCQkiRmFpbGVkIHRvIGFsbG9jYXRlICVkIERSQyBjb25maWcgdGV4dHNcbiIsCisJCQkJcGRhdGEtPm51bV9kcmNfY2Zncyk7CisJCQlyZXR1cm47CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9kcmNfY2ZnczsgaSsrKQorCQkJd204OTA0LT5kcmNfdGV4dHNbaV0gPSBwZGF0YS0+ZHJjX2NmZ3NbaV0ubmFtZTsKKworCQl3bTg5MDQtPmRyY19lbnVtLm1heCA9IHBkYXRhLT5udW1fZHJjX2NmZ3M7CisJCXdtODkwNC0+ZHJjX2VudW0udGV4dHMgPSB3bTg5MDQtPmRyY190ZXh0czsKKworCQlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scygmd204OTA0LT5jb2RlYywgJmNvbnRyb2wsIDEpOworCQlpZiAocmV0ICE9IDApCisJCQlkZXZfZXJyKHdtODkwNC0+Y29kZWMuZGV2LAorCQkJCSJGYWlsZWQgdG8gYWRkIERSQyBtb2RlIGNvbnRyb2w6ICVkXG4iLCByZXQpOworCisJCXdtODkwNF9zZXRfZHJjKGNvZGVjKTsKKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlZCBSZVR1bmUgTW9iaWxlIGNvbmZpZ3VyYXRpb25zXG4iLAorCQlwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2Zncyk7CisKKwlpZiAocGRhdGEtPm51bV9yZXR1bmVfbW9iaWxlX2NmZ3MpCisJCXdtODkwNF9oYW5kbGVfcmV0dW5lX21vYmlsZV9wZGF0YSh3bTg5MDQpOworCWVsc2UKKwkJc25kX3NvY19hZGRfY29udHJvbHMoJndtODkwNC0+Y29kZWMsIHdtODkwNF9lcV9jb250cm9scywKKwkJCQkgICAgIEFSUkFZX1NJWkUod204OTA0X2VxX2NvbnRyb2xzKSk7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldCA9IDA7CisKKwlpZiAod204OTA0X2NvZGVjID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29kZWMgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IHdtODkwNF9jb2RlYzsKKwljb2RlYyA9IHdtODkwNF9jb2RlYzsKKworCS8qIHJlZ2lzdGVyIHBjbXMgKi8KKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtczogJWRcbiIsIHJldCk7CisJCWdvdG8gcGNtX2VycjsKKwl9CisKKwl3bTg5MDRfaGFuZGxlX3BkYXRhKGNvZGVjLT5wcml2YXRlX2RhdGEpOworCisJd204OTA0X2FkZF93aWRnZXRzKGNvZGVjKTsKKworCXJldHVybiByZXQ7CisKK3BjbV9lcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bTg5MDRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg5MDQgPSB7CisJLnByb2JlID0gCXdtODkwNF9wcm9iZSwKKwkucmVtb3ZlID0gCXdtODkwNF9yZW1vdmUsCisJLnN1c3BlbmQgPSAJd204OTA0X3N1c3BlbmQsCisJLnJlc3VtZSA9CXdtODkwNF9yZXN1bWUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg5MDQpOworCitzdGF0aWMgaW50IHdtODkwNF9yZWdpc3RlcihzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCwKKwkJCSAgIGVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5MDQtPmNvZGVjOworCWludCBpOworCisJaWYgKHdtODkwNF9jb2RlYykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIFdNODkwNCBpcyByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg5MDQ7CisJY29kZWMtPm5hbWUgPSAiV004OTA0IjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204OTA0X3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSAmd204OTA0X2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gV004OTA0X01BWF9SRUdJU1RFUjsKKwljb2RlYy0+cmVnX2NhY2hlID0gJndtODkwNC0+cmVnX2NhY2hlOworCWNvZGVjLT52b2xhdGlsZV9yZWdpc3RlciA9IHdtODkwNF92b2xhdGlsZV9yZWdpc3RlcjsKKwljb2RlYy0+Y2FjaGVfc3luYyA9IDE7CisJY29kZWMtPmlkbGVfYmlhc19vZmYgPSAxOworCisJc3dpdGNoICh3bTg5MDQtPmRldnR5cGUpIHsKKwljYXNlIFdNODkwNDoKKwkJYnJlYWs7CisJY2FzZSBXTTg5MTI6CisJCW1lbXNldCgmd204OTA0X2RhaS5jYXB0dXJlLCAwLCBzaXplb2Yod204OTA0X2RhaS5jYXB0dXJlKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlVua25vd24gZGV2aWNlIHR5cGUgJWRcbiIsCisJCQl3bTg5MDQtPmRldnR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204OTA0X3JlZywgc2l6ZW9mKHdtODkwNF9yZWcpKTsKKworCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA4LCAxNiwgY29udHJvbCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTA0LT5zdXBwbGllcyk7IGkrKykKKwkJd204OTA0LT5zdXBwbGllc1tpXS5zdXBwbHkgPSB3bTg5MDRfc3VwcGx5X25hbWVzW2ldOworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZ2V0KGNvZGVjLT5kZXYsIEFSUkFZX1NJWkUod204OTA0LT5zdXBwbGllcyksCisJCQkJIHdtODkwNC0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODkwNC0+c3VwcGxpZXMpLAorCQkJCSAgICB3bTg5MDQtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2dldDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwNF9TV19SRVNFVF9BTkRfSUQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWFkIElEIHJlZ2lzdGVyXG4iKTsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKwlpZiAocmV0ICE9IHdtODkwNF9yZWdbV004OTA0X1NXX1JFU0VUX0FORF9JRF0pIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRGV2aWNlIGlzIG5vdCBhIFdNODkwNCwgSUQgaXMgJXhcbiIsIHJldCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwNF9SRVZJU0lPTik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgZGV2aWNlIHJldmlzaW9uOiAlZFxuIiwKKwkJCXJldCk7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisJZGV2X2luZm8oY29kZWMtPmRldiwgInJldmlzaW9uICVjXG4iLCByZXQgKyAnQScpOworCisJcmV0ID0gd204OTA0X3Jlc2V0KGNvZGVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXRcbiIpOworCQlnb3RvIGVycl9lbmFibGU7CisJfQorCisJd204OTA0X2RhaS5kZXYgPSBjb2RlYy0+ZGV2OworCisJLyogQ2hhbmdlIHNvbWUgZGVmYXVsdCBzZXR0aW5ncyAtIGxhdGNoIFZVIGFuZCBlbmFibGUgWkMgKi8KKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfQURDX0RJR0lUQUxfVk9MVU1FX0xFRlRdIHw9IFdNODkwNF9BRENfVlU7CisJd204OTA0LT5yZWdfY2FjaGVbV004OTA0X0FEQ19ESUdJVEFMX1ZPTFVNRV9SSUdIVF0gfD0gV004OTA0X0FEQ19WVTsKKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfREFDX0RJR0lUQUxfVk9MVU1FX0xFRlRdIHw9IFdNODkwNF9EQUNfVlU7CisJd204OTA0LT5yZWdfY2FjaGVbV004OTA0X0RBQ19ESUdJVEFMX1ZPTFVNRV9SSUdIVF0gfD0gV004OTA0X0RBQ19WVTsKKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfQU5BTE9HVUVfT1VUMV9MRUZUXSB8PSBXTTg5MDRfSFBPVVRfVlUgfAorCQlXTTg5MDRfSFBPVVRMWkM7CisJd204OTA0LT5yZWdfY2FjaGVbV004OTA0X0FOQUxPR1VFX09VVDFfUklHSFRdIHw9IFdNODkwNF9IUE9VVF9WVSB8CisJCVdNODkwNF9IUE9VVFJaQzsKKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfQU5BTE9HVUVfT1VUMl9MRUZUXSB8PSBXTTg5MDRfTElORU9VVF9WVSB8CisJCVdNODkwNF9MSU5FT1VUTFpDOworCXdtODkwNC0+cmVnX2NhY2hlW1dNODkwNF9BTkFMT0dVRV9PVVQyX1JJR0hUXSB8PSBXTTg5MDRfTElORU9VVF9WVSB8CisJCVdNODkwNF9MSU5FT1VUUlpDOworCXdtODkwNC0+cmVnX2NhY2hlW1dNODkwNF9DTE9DS19SQVRFU18wXSAmPSB+V004OTA0X1NSX01PREU7CisKKwkvKiBTZXQgQ2xhc3MgVyBieSBkZWZhdWx0IC0gdGhpcyB3aWxsIGJlIG1hbmFnZWQgYnkgdGhlIENsYXNzCisJICogRyB3aWRnZXQgYXQgcnVudGltZSB3aGVyZSBieXBhc3MgcGF0aHMgYXJlIGF2YWlsYWJsZS4KKwkgKi8KKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfQ0xBU1NfV18wXSB8PSBXTTg5MDRfQ1BfRFlOX1BXUjsKKworCS8qIFVzZSBub3JtYWwgYmlhcyBzb3VyY2UgKi8KKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfQklBU19DT05UUk9MXzBdICY9IH5XTTg5MDRfUE9CQ1RSTDsKKworCXdtODkwNF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJLyogQmlhcyBsZXZlbCBjb25maWd1cmF0aW9uIHdpbGwgaGF2ZSBkb25lIGFuIGV4dHJhIGVuYWJsZSAqLworCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5MDQtPnN1cHBsaWVzKSwgd204OTA0LT5zdXBwbGllcyk7CisKKwl3bTg5MDRfY29kZWMgPSBjb2RlYzsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg5MDRfZGFpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9lbmFibGU6CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODkwNC0+c3VwcGxpZXMpLCB3bTg5MDQtPnN1cHBsaWVzKTsKK2Vycl9nZXQ6CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODkwNC0+c3VwcGxpZXMpLCB3bTg5MDQtPnN1cHBsaWVzKTsKK2VycjoKKwlrZnJlZSh3bTg5MDQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdtODkwNF91bnJlZ2lzdGVyKHN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0KQoreworCXdtODkwNF9zZXRfYmlhc19sZXZlbCgmd204OTA0LT5jb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODkwNC0+c3VwcGxpZXMpLCB3bTg5MDQtPnN1cHBsaWVzKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZ3bTg5MDRfZGFpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJndtODkwNC0+Y29kZWMpOworCWtmcmVlKHdtODkwNCk7CisJd204OTA0X2NvZGVjID0gTlVMTDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODkwNF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCisJd204OTA0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODkwNF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODkwNCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJndtODkwNC0+Y29kZWM7CisJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworCisJd204OTA0LT5kZXZ0eXBlID0gaWQtPmRyaXZlcl9kYXRhOworCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204OTA0KTsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOworCXdtODkwNC0+cGRhdGEgPSBpMmMtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKworCXJldHVybiB3bTg5MDRfcmVnaXN0ZXIod204OTA0LCBTTkRfU09DX0kyQyk7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IHdtODkwNF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl3bTg5MDRfdW5yZWdpc3Rlcih3bTg5MDQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204OTA0X2kyY19pZFtdID0geworCXsgIndtODkwNCIsIFdNODkwNCB9LAorCXsgIndtODkxMiIsIFdNODkxMiB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg5MDRfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODkwNF9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIldNODkwNCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gICAgd204OTA0X2kyY19wcm9iZSwKKwkucmVtb3ZlID0gICBfX2RldmV4aXRfcCh3bTg5MDRfaTJjX3JlbW92ZSksCisJLmlkX3RhYmxlID0gd204OTA0X2kyY19pZCwKK307CisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgd204OTA0X21vZGluaXQodm9pZCkKK3sKKwlpbnQgcmV0OworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204OTA0X2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBXTTg5MDQgSTJDIGRyaXZlcjogJWRcbiIsCisJCSAgICAgICByZXQpOworCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorbW9kdWxlX2luaXQod204OTA0X21vZGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204OTA0X2V4aXQodm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9kcml2ZXIoJndtODkwNF9pMmNfZHJpdmVyKTsKKyNlbmRpZgorfQorbW9kdWxlX2V4aXQod204OTA0X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV004OTA0IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjg4ODZkCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDQuaApAQCAtMCwwICsxLDE2ODEgQEAKKy8qCisgKiB3bTg5MDQuaCAgLS0gIFdNODkwNCBBU29DIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcywgcGxjCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX1dNODkwNF9ICisjZGVmaW5lIF9XTTg5MDRfSAorCisjZGVmaW5lIFdNODkwNF9DTEtfTUNMSyAxCisjZGVmaW5lIFdNODkwNF9DTEtfRkxMICAyCisKKyNkZWZpbmUgV004OTA0X0ZMTF9NQ0xLICAgICAgICAgIDEKKyNkZWZpbmUgV004OTA0X0ZMTF9CQ0xLICAgICAgICAgIDIKKyNkZWZpbmUgV004OTA0X0ZMTF9MUkNMSyAgICAgICAgIDMKKyNkZWZpbmUgV004OTA0X0ZMTF9GUkVFX1JVTk5JTkcgIDQKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg5MDRfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODkwNDsKKworLyoKKyAqIFJlZ2lzdGVyIHZhbHVlcy4KKyAqLworI2RlZmluZSBXTTg5MDRfU1dfUkVTRVRfQU5EX0lEICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBXTTg5MDRfUkVWSVNJT04JCQkJMHgwMQorI2RlZmluZSBXTTg5MDRfQklBU19DT05UUk9MXzAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBXTTg5MDRfVk1JRF9DT05UUk9MXzAgICAgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBXTTg5MDRfTUlDX0JJQVNfQ09OVFJPTF8wICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBXTTg5MDRfTUlDX0JJQVNfQ09OVFJPTF8xICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfREFDXzAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBXTTg5MDRfTUlDX0ZJTFRFUl9DT05UUk9MICAgICAgICAgICAgICAgMHgwOQorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfQURDXzAgICAgICAgICAgICAgICAgICAgMHgwQQorI2RlZmluZSBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF8wICAgICAgICAgICAgICAgMHgwQworI2RlZmluZSBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF8yICAgICAgICAgICAgICAgMHgwRQorI2RlZmluZSBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF8zICAgICAgICAgICAgICAgMHgwRgorI2RlZmluZSBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF82ICAgICAgICAgICAgICAgMHgxMgorI2RlZmluZSBXTTg5MDRfQ0xPQ0tfUkFURVNfMCAgICAgICAgICAgICAgICAgICAgMHgxNAorI2RlZmluZSBXTTg5MDRfQ0xPQ0tfUkFURVNfMSAgICAgICAgICAgICAgICAgICAgMHgxNQorI2RlZmluZSBXTTg5MDRfQ0xPQ0tfUkFURVNfMiAgICAgICAgICAgICAgICAgICAgMHgxNgorI2RlZmluZSBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzEgICAgICAgICAgICAgICAgMHgxOQorI2RlZmluZSBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzIgICAgICAgICAgICAgICAgMHgxQQorI2RlZmluZSBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzMgICAgICAgICAgICAgICAgMHgxQgorI2RlZmluZSBXTTg5MDRfREFDX0RJR0lUQUxfVk9MVU1FX0xFRlQgICAgICAgICAgMHgxRQorI2RlZmluZSBXTTg5MDRfREFDX0RJR0lUQUxfVk9MVU1FX1JJR0hUICAgICAgICAgMHgxRgorI2RlZmluZSBXTTg5MDRfREFDX0RJR0lUQUxfMCAgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBXTTg5MDRfREFDX0RJR0lUQUxfMSAgICAgICAgICAgICAgICAgICAgMHgyMQorI2RlZmluZSBXTTg5MDRfQURDX0RJR0lUQUxfVk9MVU1FX0xFRlQgICAgICAgICAgMHgyNAorI2RlZmluZSBXTTg5MDRfQURDX0RJR0lUQUxfVk9MVU1FX1JJR0hUICAgICAgICAgMHgyNQorI2RlZmluZSBXTTg5MDRfQURDX0RJR0lUQUxfMCAgICAgICAgICAgICAgICAgICAgMHgyNgorI2RlZmluZSBXTTg5MDRfRElHSVRBTF9NSUNST1BIT05FXzAgICAgICAgICAgICAgMHgyNworI2RlZmluZSBXTTg5MDRfRFJDXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBXTTg5MDRfRFJDXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOQorI2RlZmluZSBXTTg5MDRfRFJDXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyQQorI2RlZmluZSBXTTg5MDRfRFJDXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyQgorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfTEVGVF9JTlBVVF8wICAgICAgICAgICAgMHgyQworI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfUklHSFRfSU5QVVRfMCAgICAgICAgICAgMHgyRAorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfTEVGVF9JTlBVVF8xICAgICAgICAgICAgMHgyRQorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfUklHSFRfSU5QVVRfMSAgICAgICAgICAgMHgyRgorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfT1VUMV9MRUZUICAgICAgICAgICAgICAgMHgzOQorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfT1VUMV9SSUdIVCAgICAgICAgICAgICAgMHgzQQorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfT1VUMl9MRUZUICAgICAgICAgICAgICAgMHgzQgorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfT1VUMl9SSUdIVCAgICAgICAgICAgICAgMHgzQworI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfT1VUMTJfWkMgICAgICAgICAgICAgICAgMHgzRAorI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fMCAgICAgICAgICAgICAgICAgICAgICAgMHg0MworI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fMSAgICAgICAgICAgICAgICAgICAgICAgMHg0NAorI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fMiAgICAgICAgICAgICAgICAgICAgICAgMHg0NQorI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fNCAgICAgICAgICAgICAgICAgICAgICAgMHg0NworI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fNSAgICAgICAgICAgICAgICAgICAgICAgMHg0OAorI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fNiAgICAgICAgICAgICAgICAgICAgICAgMHg0OQorI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fNyAgICAgICAgICAgICAgICAgICAgICAgMHg0QQorI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fOCAgICAgICAgICAgICAgICAgICAgICAgMHg0QgorI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fOSAgICAgICAgICAgICAgICAgICAgICAgMHg0QworI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fUkVBREJBQ0tfMCAgICAgICAgICAgICAgMHg0RAorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfSFBfMCAgICAgICAgICAgICAgICAgICAgMHg1QQorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfTElORU9VVF8wICAgICAgICAgICAgICAgMHg1RQorI2RlZmluZSBXTTg5MDRfQ0hBUkdFX1BVTVBfMCAgICAgICAgICAgICAgICAgICAgMHg2MgorI2RlZmluZSBXTTg5MDRfQ0xBU1NfV18wICAgICAgICAgICAgICAgICAgICAgICAgMHg2OAorI2RlZmluZSBXTTg5MDRfV1JJVEVfU0VRVUVOQ0VSXzAgICAgICAgICAgICAgICAgMHg2QworI2RlZmluZSBXTTg5MDRfV1JJVEVfU0VRVUVOQ0VSXzEgICAgICAgICAgICAgICAgMHg2RAorI2RlZmluZSBXTTg5MDRfV1JJVEVfU0VRVUVOQ0VSXzIgICAgICAgICAgICAgICAgMHg2RQorI2RlZmluZSBXTTg5MDRfV1JJVEVfU0VRVUVOQ0VSXzMgICAgICAgICAgICAgICAgMHg2RgorI2RlZmluZSBXTTg5MDRfV1JJVEVfU0VRVUVOQ0VSXzQgICAgICAgICAgICAgICAgMHg3MAorI2RlZmluZSBXTTg5MDRfRkxMX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgICAgMHg3NAorI2RlZmluZSBXTTg5MDRfRkxMX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgICAgMHg3NQorI2RlZmluZSBXTTg5MDRfRkxMX0NPTlRST0xfMyAgICAgICAgICAgICAgICAgICAgMHg3NgorI2RlZmluZSBXTTg5MDRfRkxMX0NPTlRST0xfNCAgICAgICAgICAgICAgICAgICAgMHg3NworI2RlZmluZSBXTTg5MDRfRkxMX0NPTlRST0xfNSAgICAgICAgICAgICAgICAgICAgMHg3OAorI2RlZmluZSBXTTg5MDRfR1BJT19DT05UUk9MXzEgICAgICAgICAgICAgICAgICAgMHg3OQorI2RlZmluZSBXTTg5MDRfR1BJT19DT05UUk9MXzIgICAgICAgICAgICAgICAgICAgMHg3QQorI2RlZmluZSBXTTg5MDRfR1BJT19DT05UUk9MXzMgICAgICAgICAgICAgICAgICAgMHg3QgorI2RlZmluZSBXTTg5MDRfR1BJT19DT05UUk9MXzQgICAgICAgICAgICAgICAgICAgMHg3QworI2RlZmluZSBXTTg5MDRfRElHSVRBTF9QVUxMUyAgICAgICAgICAgICAgICAgICAgMHg3RQorI2RlZmluZSBXTTg5MDRfSU5URVJSVVBUX1NUQVRVUyAgICAgICAgICAgICAgICAgMHg3RgorI2RlZmluZSBXTTg5MDRfSU5URVJSVVBUX1NUQVRVU19NQVNLICAgICAgICAgICAgMHg4MAorI2RlZmluZSBXTTg5MDRfSU5URVJSVVBUX1BPTEFSSVRZICAgICAgICAgICAgICAgMHg4MQorI2RlZmluZSBXTTg5MDRfSU5URVJSVVBUX0RFQk9VTkNFICAgICAgICAgICAgICAgMHg4MgorI2RlZmluZSBXTTg5MDRfRVExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NgorI2RlZmluZSBXTTg5MDRfRVEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NworI2RlZmluZSBXTTg5MDRfRVEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OAorI2RlZmluZSBXTTg5MDRfRVE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OQorI2RlZmluZSBXTTg5MDRfRVE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QQorI2RlZmluZSBXTTg5MDRfRVE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QgorI2RlZmluZSBXTTg5MDRfRVE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QworI2RlZmluZSBXTTg5MDRfRVE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RAorI2RlZmluZSBXTTg5MDRfRVE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RQorI2RlZmluZSBXTTg5MDRfRVExMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RgorI2RlZmluZSBXTTg5MDRfRVExMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MAorI2RlZmluZSBXTTg5MDRfRVExMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MQorI2RlZmluZSBXTTg5MDRfRVExMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MgorI2RlZmluZSBXTTg5MDRfRVExNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MworI2RlZmluZSBXTTg5MDRfRVExNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NAorI2RlZmluZSBXTTg5MDRfRVExNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NQorI2RlZmluZSBXTTg5MDRfRVExNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NgorI2RlZmluZSBXTTg5MDRfRVExOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NworI2RlZmluZSBXTTg5MDRfRVExOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OAorI2RlZmluZSBXTTg5MDRfRVEyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OQorI2RlZmluZSBXTTg5MDRfRVEyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5QQorI2RlZmluZSBXTTg5MDRfRVEyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5QgorI2RlZmluZSBXTTg5MDRfRVEyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5QworI2RlZmluZSBXTTg5MDRfRVEyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5RAorI2RlZmluZSBXTTg5MDRfQ09OVFJPTF9JTlRFUkZBQ0VfVEVTVF8xICAgICAgICAgMHhBMQorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfT1VUUFVUX0JJQVNfMCAgICAgICAgICAgMHhDQworI2RlZmluZSBXTTg5MDRfRkxMX05DT19URVNUXzAgICAgICAgICAgICAgICAgICAgMHhGNworI2RlZmluZSBXTTg5MDRfRkxMX05DT19URVNUXzEgICAgICAgICAgICAgICAgICAgMHhGOAorCisjZGVmaW5lIFdNODkwNF9SRUdJU1RFUl9DT1VOVCAgICAgICAgICAgICAgICAgICAxMDEKKyNkZWZpbmUgV004OTA0X01BWF9SRUdJU1RFUiAgICAgICAgICAgICAgICAgICAgIDB4RjgKKworLyoKKyAqIEZpZWxkIERlZmluaXRpb25zLgorICovCisKKy8qCisgKiBSMCAoMHgwMCkgLSBTVyBSZXNldCBhbmQgSUQKKyAqLworI2RlZmluZSBXTTg5MDRfU1dfUlNUX0RFVl9JRDFfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBTV19SU1RfREVWX0lEMSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfU1dfUlNUX0RFVl9JRDFfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBTV19SU1RfREVWX0lEMSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfU1dfUlNUX0RFVl9JRDFfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBTV19SU1RfREVWX0lEMSAtIFsxNTowXSAqLworCisvKgorICogUjEgKDB4MDEpIC0gUmV2aXNpb24KKyAqLworI2RlZmluZSBXTTg5MDRfUkVWSVNJT05fTUFTSyAgICAgICAgICAgICAgCTB4MDAwRiAgLyogUkVWSVNJT04gLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfUkVWSVNJT05fU0hJRlQgICAgICAgICAgICAgCSAgICAgMCAgLyogUkVWSVNJT04gLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfUkVWSVNJT05fV0lEVEggICAgICAgICAgICAgCSAgICAxNiAgLyogUkVWSVNJT04gLSBbMzowXSAqLworCisvKgorICogUjQgKDB4MDQpIC0gQmlhcyBDb250cm9sIDAKKyAqLworI2RlZmluZSBXTTg5MDRfUE9CQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBQT0JDVFJMICovCisjZGVmaW5lIFdNODkwNF9QT0JDVFJMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFBPQkNUUkwgKi8KKyNkZWZpbmUgV004OTA0X1BPQkNUUkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogUE9CQ1RSTCAqLworI2RlZmluZSBXTTg5MDRfUE9CQ1RSTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBQT0JDVFJMICovCisjZGVmaW5lIFdNODkwNF9JU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIElTRUwgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfSVNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBJU0VMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0lTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogSVNFTCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9TVEFSVFVQX0JJQVNfRU5BICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFNUQVJUVVBfQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X1NUQVJUVVBfQklBU19FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogU1RBUlRVUF9CSUFTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfU1RBUlRVUF9CSUFTX0VOQV9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBTVEFSVFVQX0JJQVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9TVEFSVFVQX0JJQVNfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIFNUQVJUVVBfQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0JJQVNfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0JJQVNfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0JJQVNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0JJQVNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQklBU19FTkEgKi8KKworLyoKKyAqIFI1ICgweDA1KSAtIFZNSUQgQ29udHJvbCAwCisgKi8KKyNkZWZpbmUgV004OTA0X1ZNSURfQlVGX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODkwNF9WTUlEX0JVRl9FTkFfTUFTSyAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFZNSURfQlVGX0VOQSAqLworI2RlZmluZSBXTTg5MDRfVk1JRF9CVUZfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICA2ICAvKiBWTUlEX0JVRl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X1ZNSURfQlVGX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODkwNF9WTUlEX1JFU19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDYgIC8qIFZNSURfUkVTIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTA0X1ZNSURfUkVTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVk1JRF9SRVMgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5MDRfVk1JRF9SRVNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBWTUlEX1JFUyAtIFsyOjFdICovCisjZGVmaW5lIFdNODkwNF9WTUlEX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFZNSURfRU5BICovCisjZGVmaW5lIFdNODkwNF9WTUlEX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFZNSURfRU5BICovCisjZGVmaW5lIFdNODkwNF9WTUlEX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFZNSURfRU5BICovCisjZGVmaW5lIFdNODkwNF9WTUlEX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZNSURfRU5BICovCisKKy8qCisgKiBSNiAoMHgwNikgLSBNaWMgQmlhcyBDb250cm9sIDAKKyAqLworI2RlZmluZSBXTTg5MDRfTUlDREVUX1RIUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBNSUNERVRfVEhSIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ0RFVF9USFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTUlDREVUX1RIUiAtIFs2OjRdICovCisjZGVmaW5lIFdNODkwNF9NSUNERVRfVEhSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE1JQ0RFVF9USFIgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5MDRfTUlDU0hPUlRfVEhSX01BU0sgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBNSUNTSE9SVF9USFIgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfTUlDU0hPUlRfVEhSX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBNSUNTSE9SVF9USFIgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfTUlDU0hPUlRfVEhSX1dJRFRIICAgICAgICAgICAgICAgICAgICAyICAvKiBNSUNTSE9SVF9USFIgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfTUlDREVUX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNERVRfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNERVRfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ0RFVF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ0RFVF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDREVUX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDREVUX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNERVRfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNCSUFTX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0JJQVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNCSUFTX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0JJQVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNCSUFTX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ0JJQVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNCSUFTX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0JJQVNfRU5BICovCisKKy8qCisgKiBSNyAoMHgwNykgLSBNaWMgQmlhcyBDb250cm9sIDEKKyAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9GSUxURVJfRU5BICAgICAgICAgICAgICAgMHg4MDAwICAvKiBNSUNfREVUX0ZJTFRFUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRklMVEVSX0VOQV9NQVNLICAgICAgICAgIDB4ODAwMCAgLyogTUlDX0RFVF9GSUxURVJfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0ZJTFRFUl9FTkFfU0hJRlQgICAgICAgICAgICAgMTUgIC8qIE1JQ19ERVRfRklMVEVSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9GSUxURVJfRU5BX1dJRFRIICAgICAgICAgICAgICAxICAvKiBNSUNfREVUX0ZJTFRFUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9GSUxURVJfRU5BICAgICAgICAgICAgIDB4NDAwMCAgLyogTUlDX1NIT1JUX0ZJTFRFUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9GSUxURVJfRU5BX01BU0sgICAgICAgIDB4NDAwMCAgLyogTUlDX1NIT1JUX0ZJTFRFUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9GSUxURVJfRU5BX1NISUZUICAgICAgICAgICAxNCAgLyogTUlDX1NIT1JUX0ZJTFRFUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9GSUxURVJfRU5BX1dJRFRIICAgICAgICAgICAgMSAgLyogTUlDX1NIT1JUX0ZJTFRFUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ0JJQVNfU0VMX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogTUlDQklBU19TRUwgLSBbMjowXSAqLworI2RlZmluZSBXTTg5MDRfTUlDQklBU19TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBNSUNCSUFTX1NFTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODkwNF9NSUNCSUFTX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE1JQ0JJQVNfU0VMIC0gWzI6MF0gKi8KKworLyoKKyAqIFI4ICgweDA4KSAtIEFuYWxvZ3VlIERBQyAwCisgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19CSUFTX1NFTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAxOCAgLyogREFDX0JJQVNfU0VMIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTA0X0RBQ19CSUFTX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMyAgLyogREFDX0JJQVNfU0VMIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTA0X0RBQ19CSUFTX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgMiAgLyogREFDX0JJQVNfU0VMIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTA0X0RBQ19WTUlEX0JJQVNfU0VMX01BU0sgICAgICAgICAgIDB4MDAwNiAgLyogREFDX1ZNSURfQklBU19TRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5MDRfREFDX1ZNSURfQklBU19TRUxfU0hJRlQgICAgICAgICAgICAgICAxICAvKiBEQUNfVk1JRF9CSUFTX1NFTCAtIFsyOjFdICovCisjZGVmaW5lIFdNODkwNF9EQUNfVk1JRF9CSUFTX1NFTF9XSURUSCAgICAgICAgICAgICAgIDIgIC8qIERBQ19WTUlEX0JJQVNfU0VMIC0gWzI6MV0gKi8KKworLyoKKyAqIFI5ICgweDA5KSAtIG1pYyBGaWx0ZXIgQ29udHJvbAorICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX1NFVF9USFJFU0hPTERfTUFTSyAgICAgICAweEYwMDAgIC8qIE1JQ19ERVRfU0VUX1RIUkVTSE9MRCAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfU0VUX1RIUkVTSE9MRF9TSElGVCAgICAgICAgICAxMiAgLyogTUlDX0RFVF9TRVRfVEhSRVNIT0xEIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9TRVRfVEhSRVNIT0xEX1dJRFRIICAgICAgICAgICA0ICAvKiBNSUNfREVUX1NFVF9USFJFU0hPTEQgLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX1JFU0VUX1RIUkVTSE9MRF9NQVNLICAgICAweDBGMDAgIC8qIE1JQ19ERVRfUkVTRVRfVEhSRVNIT0xEIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX1JFU0VUX1RIUkVTSE9MRF9TSElGVCAgICAgICAgIDggIC8qIE1JQ19ERVRfUkVTRVRfVEhSRVNIT0xEIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX1JFU0VUX1RIUkVTSE9MRF9XSURUSCAgICAgICAgIDQgIC8qIE1JQ19ERVRfUkVTRVRfVEhSRVNIT0xEIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hPUlRfU0VUX1RIUkVTSE9MRF9NQVNLICAgICAweDAwRjAgIC8qIE1JQ19TSE9SVF9TRVRfVEhSRVNIT0xEIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9TRVRfVEhSRVNIT0xEX1NISUZUICAgICAgICAgNCAgLyogTUlDX1NIT1JUX1NFVF9USFJFU0hPTEQgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIT1JUX1NFVF9USFJFU0hPTERfV0lEVEggICAgICAgICA0ICAvKiBNSUNfU0hPUlRfU0VUX1RIUkVTSE9MRCAtIFs3OjRdICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hPUlRfUkVTRVRfVEhSRVNIT0xEX01BU0sgICAweDAwMEYgIC8qIE1JQ19TSE9SVF9SRVNFVF9USFJFU0hPTEQgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIT1JUX1JFU0VUX1RIUkVTSE9MRF9TSElGVCAgICAgICAwICAvKiBNSUNfU0hPUlRfUkVTRVRfVEhSRVNIT0xEIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9SRVNFVF9USFJFU0hPTERfV0lEVEggICAgICAgNCAgLyogTUlDX1NIT1JUX1JFU0VUX1RIUkVTSE9MRCAtIFszOjBdICovCisKKy8qCisgKiBSMTAgKDB4MEEpIC0gQW5hbG9ndWUgQURDIDAKKyAqLworI2RlZmluZSBXTTg5MDRfQURDX09TUjEyOCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENfT1NSMTI4ICovCisjZGVmaW5lIFdNODkwNF9BRENfT1NSMTI4X01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFEQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTA0X0FEQ19PU1IxMjhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDX09TUjEyOCAqLworI2RlZmluZSBXTTg5MDRfQURDX09TUjEyOF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENfT1NSMTI4ICovCisKKy8qCisgKiBSMTIgKDB4MEMpIC0gUG93ZXIgTWFuYWdlbWVudCAwCisgKi8KKyNkZWZpbmUgV004OTA0X0lOTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU5MX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5MX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBJTkxfRU5BICovCisjZGVmaW5lIFdNODkwNF9JTkxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU5MX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5SX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTlJfRU5BICovCisjZGVmaW5lIFdNODkwNF9JTlJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIElOUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSU5SX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5SX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTlJfRU5BICovCisKKy8qCisgKiBSMTQgKDB4MEUpIC0gUG93ZXIgTWFuYWdlbWVudCAyCisgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9QR0FfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFBMX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9QR0FfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFBMX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9QR0FfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBMX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9QR0FfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBMX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9QR0FfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSFBSX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9QR0FfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSFBSX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9QR0FfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBSX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9QR0FfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBSX1BHQV9FTkEgKi8KKworLyoKKyAqIFIxNSAoMHgwRikgLSBQb3dlciBNYW5hZ2VtZW50IDMKKyAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfUEdBX0VOQSAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBMSU5FT1VUTF9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9QR0FfRU5BX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIExJTkVPVVRMX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1BHQV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVExfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfUEdBX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUTF9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9QR0FfRU5BICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExJTkVPVVRSX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1BHQV9FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogTElORU9VVFJfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfUEdBX0VOQV9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBMSU5FT1VUUl9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9QR0FfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRSX1BHQV9FTkEgKi8KKworLyoKKyAqIFIxOCAoMHgxMikgLSBQb3dlciBNYW5hZ2VtZW50IDYKKyAqLworI2RlZmluZSBXTTg5MDRfREFDTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfREFDTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfREFDTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBEQUNMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfREFDTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfREFDUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUNSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfREFDUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUNSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfREFDUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEQUNSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfREFDUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBBRENSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENSX0VOQSAqLworCisvKgorICogUjIwICgweDE0KSAtIENsb2NrIFJhdGVzIDAKKyAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURV9ESVYxNiAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBUT0NMS19SQVRFX0RJVjE2ICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFX0RJVjE2X01BU0sgICAgICAgICAgICAweDQwMDAgIC8qIFRPQ0xLX1JBVEVfRElWMTYgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX1JBVEVfRElWMTZfU0hJRlQgICAgICAgICAgICAgICAxNCAgLyogVE9DTEtfUkFURV9ESVYxNiAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURV9ESVYxNl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBUT0NMS19SQVRFX0RJVjE2ICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFX1g0ICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIFRPQ0xLX1JBVEVfWDQgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX1JBVEVfWDRfTUFTSyAgICAgICAgICAgICAgIDB4MjAwMCAgLyogVE9DTEtfUkFURV9YNCAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURV9YNF9TSElGVCAgICAgICAgICAgICAgICAgIDEzICAvKiBUT0NMS19SQVRFX1g0ICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFX1g0X1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIFRPQ0xLX1JBVEVfWDQgKi8KKyNkZWZpbmUgV004OTA0X1NSX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogU1JfTU9ERSAqLworI2RlZmluZSBXTTg5MDRfU1JfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBTUl9NT0RFICovCisjZGVmaW5lIFdNODkwNF9TUl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIFNSX01PREUgKi8KKyNkZWZpbmUgV004OTA0X1NSX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1JfTU9ERSAqLworI2RlZmluZSBXTTg5MDRfTUNMS19ESVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNQ0xLX0RJViAqLworI2RlZmluZSBXTTg5MDRfTUNMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNQ0xLX0RJViAqLworI2RlZmluZSBXTTg5MDRfTUNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBNQ0xLX0RJViAqLworI2RlZmluZSBXTTg5MDRfTUNMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLX0RJViAqLworCisvKgorICogUjIxICgweDE1KSAtIENsb2NrIFJhdGVzIDEKKyAqLworI2RlZmluZSBXTTg5MDRfQ0xLX1NZU19SQVRFX01BU0sgICAgICAgICAgICAgICAgMHgzQzAwICAvKiBDTEtfU1lTX1JBVEUgLSBbMTM6MTBdICovCisjZGVmaW5lIFdNODkwNF9DTEtfU1lTX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgMTAgIC8qIENMS19TWVNfUkFURSAtIFsxMzoxMF0gKi8KKyNkZWZpbmUgV004OTA0X0NMS19TWVNfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgNCAgLyogQ0xLX1NZU19SQVRFIC0gWzEzOjEwXSAqLworI2RlZmluZSBXTTg5MDRfU0FNUExFX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBTQU1QTEVfUkFURSAtIFsyOjBdICovCisjZGVmaW5lIFdNODkwNF9TQU1QTEVfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNBTVBMRV9SQVRFIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTA0X1NBTVBMRV9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMyAgLyogU0FNUExFX1JBVEUgLSBbMjowXSAqLworCisvKgorICogUjIyICgweDE2KSAtIENsb2NrIFJhdGVzIDIKKyAqLworI2RlZmluZSBXTTg5MDRfTUNMS19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBNQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfTUNMS19JTlZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBNQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfTUNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBNQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfTUNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfU1lTQ0xLX1NSQyAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBTWVNDTEtfU1JDICovCisjZGVmaW5lIFdNODkwNF9TWVNDTEtfU1JDX01BU0sgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFNZU0NMS19TUkMgKi8KKyNkZWZpbmUgV004OTA0X1NZU0NMS19TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxNCAgLyogU1lTQ0xLX1NSQyAqLworI2RlZmluZSBXTTg5MDRfU1lTQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTWVNDTEtfU1JDICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFRPQ0xLX1JBVEUgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogVE9DTEtfUkFURSAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBUT0NMS19SQVRFICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRPQ0xLX1JBVEUgKi8KKyNkZWZpbmUgV004OTA0X09QQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODkwNF9PUENMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIE9QQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MDRfT1BDTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBPUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTA0X09QQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfU1lTX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIENMS19TWVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfU1lTX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIENMS19TWVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfU1lTX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIENMS19TWVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfU1lTX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENMS19TWVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfRFNQX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIENMS19EU1BfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfRFNQX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIENMS19EU1BfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfRFNQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENMS19EU1BfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfRFNQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENMS19EU1BfRU5BICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFRPQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogVE9DTEtfRU5BICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRPQ0xLX0VOQSAqLworCisvKgorICogUjI0ICgweDE4KSAtIEF1ZGlvIEludGVyZmFjZSAwCisgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfREFUSU5WICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogREFDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfREFUSU5WX01BU0sgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogREFDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfREFUSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAxMiAgLyogREFDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfREFUSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfREFUSU5WICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogREFDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfREFUSU5WX01BU0sgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogREFDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfREFUSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAxMSAgLyogREFDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfREFUSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19CT09TVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDYwMCAgLyogREFDX0JPT1NUIC0gWzEwOjldICovCisjZGVmaW5lIFdNODkwNF9EQUNfQk9PU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERBQ19CT09TVCAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5MDRfREFDX0JPT1NUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEQUNfQk9PU1QgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTA0X0xPT1BCQUNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTE9PUEJBQ0sgKi8KKyNkZWZpbmUgV004OTA0X0xPT1BCQUNLX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTE9PUEJBQ0sgKi8KKyNkZWZpbmUgV004OTA0X0xPT1BCQUNLX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTE9PUEJBQ0sgKi8KKyNkZWZpbmUgV004OTA0X0xPT1BCQUNLX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE9PUEJBQ0sgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ0xfU1JDICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ0xfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ0xfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgNyAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ0xfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ1JfU1JDICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ1JfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ1JfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgNiAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ1JfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ0xfU1JDICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQUlGREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ0xfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQUlGREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ0xfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogQUlGREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ0xfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ1JfU1JDICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ1JfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ1JfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ1JfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19DT01QICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19DT01QX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19DT01QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19DT01QTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODkwNF9BRENfQ09NUE1PREVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5MDRfQURDX0NPTVBNT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19DT01QTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODkwNF9EQUNfQ09NUCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ19DT01QICovCisjZGVmaW5lIFdNODkwNF9EQUNfQ09NUF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ19DT01QICovCisjZGVmaW5lIFdNODkwNF9EQUNfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19DT01QICovCisjZGVmaW5lIFdNODkwNF9EQUNfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19DT01QICovCisjZGVmaW5lIFdNODkwNF9EQUNfQ09NUE1PREUgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5MDRfREFDX0NPTVBNT0RFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19DT01QTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODkwNF9EQUNfQ09NUE1PREVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19DT01QTU9ERSAqLworCisvKgorICogUjI1ICgweDE5KSAtIEF1ZGlvIEludGVyZmFjZSAxCisgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ19URE0gICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGREFDX1RETSAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDX1RETV9NQVNLICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUZEQUNfVERNICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNfVERNX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIEFJRkRBQ19URE0gKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ19URE1fV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGREFDX1RETSAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDX1RETV9DSEFOICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUZEQUNfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ19URE1fQ0hBTl9NQVNLICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGREFDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNfVERNX0NIQU5fU0hJRlQgICAgICAgICAgICAgICAgMTIgIC8qIEFJRkRBQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDX1RETV9DSEFOX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBBSUZEQUNfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ19URE0gICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQUlGQURDX1RETSAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDX1RETV9NQVNLICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBBSUZBRENfVERNICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENfVERNX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIEFJRkFEQ19URE0gKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ19URE1fV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGQURDX1RETSAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDX1RETV9DSEFOICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBBSUZBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ19URE1fQ0hBTl9NQVNLICAgICAgICAgICAgIDB4MDQwMCAgLyogQUlGQURDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENfVERNX0NIQU5fU0hJRlQgICAgICAgICAgICAgICAgMTAgIC8qIEFJRkFEQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDX1RETV9DSEFOX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBBSUZBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTA0X0FJRl9UUklTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9UUklTX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9UUklTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9UUklTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9CQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODkwNF9BSUZfQkNMS19JTlZfTUFTSyAgICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRl9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfQUlGX0JDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICA3ICAvKiBBSUZfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9CQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEJDTEtfRElSICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX0RJUl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEJDTEtfRElSICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEJDTEtfRElSICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX0RJUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEtfRElSICovCisjZGVmaW5lIFdNODkwNF9BSUZfTFJDTEtfSU5WICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9MUkNMS19JTlZfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfQUlGX0xSQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUZfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODkwNF9BSUZfTFJDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9XTF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogQUlGX1dMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0FJRl9XTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGX1dMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0FJRl9XTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGX1dMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0FJRl9GTVRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogQUlGX0ZNVCAtIFsxOjBdICovCisjZGVmaW5lIFdNODkwNF9BSUZfRk1UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRl9GTVQgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfQUlGX0ZNVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUZfRk1UIC0gWzE6MF0gKi8KKworLyoKKyAqIFIyNiAoMHgxQSkgLSBBdWRpbyBJbnRlcmZhY2UgMgorICovCisjZGVmaW5lIFdNODkwNF9PUENMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAweDBGMDAgIC8qIE9QQ0xLX0RJViAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfT1BDTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBPUENMS19ESVYgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X09QQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogT1BDTEtfRElWIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIEJDTEtfRElWIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQkNMS19ESVYgLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfQkNMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBCQ0xLX0RJViAtIFs0OjBdICovCisKKy8qCisgKiBSMjcgKDB4MUIpIC0gQXVkaW8gSW50ZXJmYWNlIDMKKyAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfRElSICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBMUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX0RJUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogTFJDTEtfRElSICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19ESVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIExSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfRElSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDdGRiAgLyogTFJDTEtfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMUkNMS19SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIExSQ0xLX1JBVEUgLSBbMTA6MF0gKi8KKworLyoKKyAqIFIzMCAoMHgxRSkgLSBEQUMgRGlnaXRhbCBWb2x1bWUgTGVmdAorICovCisjZGVmaW5lIFdNODkwNF9EQUNfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5MDRfREFDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODkwNF9EQUNfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5MDRfREFDTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEQUNMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQUNMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQ0xfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDTF9WT0wgLSBbNzowXSAqLworCisvKgorICogUjMxICgweDFGKSAtIERBQyBEaWdpdGFsIFZvbHVtZSBSaWdodAorICovCisjZGVmaW5lIFdNODkwNF9EQUNfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5MDRfREFDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODkwNF9EQUNfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5MDRfREFDUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEQUNSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQUNSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQ1JfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDUl9WT0wgLSBbNzowXSAqLworCisvKgorICogUjMyICgweDIwKSAtIERBQyBEaWdpdGFsIDAKKyAqLworI2RlZmluZSBXTTg5MDRfQURDTF9EQUNfU1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwRjAwICAvKiBBRENMX0RBQ19TVk9MIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9BRENMX0RBQ19TVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDggIC8qIEFEQ0xfREFDX1NWT0wgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfREFDX1NWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgNCAgLyogQURDTF9EQUNfU1ZPTCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9EQUNfU1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwMEYwICAvKiBBRENSX0RBQ19TVk9MIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfREFDX1NWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogQURDUl9EQUNfU1ZPTCAtIFs3OjRdICovCisjZGVmaW5lIFdNODkwNF9BRENSX0RBQ19TVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ1JfREFDX1NWT0wgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MDRfQURDX1RPX0RBQ0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBBRENfVE9fREFDTCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9BRENfVE9fREFDTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEQ19UT19EQUNMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ19UT19EQUNMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX1RPX0RBQ0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfQURDX1RPX0RBQ1JfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBBRENfVE9fREFDUiAtIFsxOjBdICovCisjZGVmaW5lIFdNODkwNF9BRENfVE9fREFDUl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ19UT19EQUNSIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ19UT19EQUNSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX1RPX0RBQ1IgLSBbMTowXSAqLworCisvKgorICogUjMzICgweDIxKSAtIERBQyBEaWdpdGFsIDEKKyAqLworI2RlZmluZSBXTTg5MDRfREFDX01PTk8gICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBEQUNfTU9OTyAqLworI2RlZmluZSBXTTg5MDRfREFDX01PTk9fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBEQUNfTU9OTyAqLworI2RlZmluZSBXTTg5MDRfREFDX01PTk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBEQUNfTU9OTyAqLworI2RlZmluZSBXTTg5MDRfREFDX01PTk9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfTU9OTyAqLworI2RlZmluZSBXTTg5MDRfREFDX1NCX0ZJTFQgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBEQUNfU0JfRklMVCAqLworI2RlZmluZSBXTTg5MDRfREFDX1NCX0ZJTFRfTUFTSyAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBEQUNfU0JfRklMVCAqLworI2RlZmluZSBXTTg5MDRfREFDX1NCX0ZJTFRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDExICAvKiBEQUNfU0JfRklMVCAqLworI2RlZmluZSBXTTg5MDRfREFDX1NCX0ZJTFRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfU0JfRklMVCAqLworI2RlZmluZSBXTTg5MDRfREFDX01VVEVSQVRFICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NVVRFUkFURV9NQVNLICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODkwNF9EQUNfTVVURVJBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgMTAgIC8qIERBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg5MDRfREFDX01VVEVSQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19VTk1VVEVfUkFNUCAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODkwNF9EQUNfVU5NVVRFX1JBTVBfTUFTSyAgICAgICAgICAgICAweDAyMDAgIC8qIERBQ19VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5MDRfREFDX1VOTVVURV9SQU1QX1NISUZUICAgICAgICAgICAgICAgICA5ICAvKiBEQUNfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19VTk1VVEVfUkFNUF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogREFDX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODkwNF9EQUNfT1NSMTI4ICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIERBQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTA0X0RBQ19PU1IxMjhfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogREFDX09TUjEyOCAqLworI2RlZmluZSBXTTg5MDRfREFDX09TUjEyOF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBEQUNfT1NSMTI4ICovCisjZGVmaW5lIFdNODkwNF9EQUNfT1NSMTI4X1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NVVRFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NVVRFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogREFDX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0RFRU1QSF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNiAgLyogREVFTVBIIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTA0X0RFRU1QSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREVFTVBIIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTA0X0RFRU1QSF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogREVFTVBIIC0gWzI6MV0gKi8KKworLyoKKyAqIFIzNiAoMHgyNCkgLSBBREMgRGlnaXRhbCBWb2x1bWUgTGVmdAorICovCisjZGVmaW5lIFdNODkwNF9BRENfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg5MDRfQURDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODkwNF9BRENfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg5MDRfQURDTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBBRENMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9BRENMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ0xfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQURDTF9WT0wgLSBbNzowXSAqLworCisvKgorICogUjM3ICgweDI1KSAtIEFEQyBEaWdpdGFsIFZvbHVtZSBSaWdodAorICovCisjZGVmaW5lIFdNODkwNF9BRENfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg5MDRfQURDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODkwNF9BRENfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBBRENSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9BRENSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ1JfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQURDUl9WT0wgLSBbNzowXSAqLworCisvKgorICogUjM4ICgweDI2KSAtIEFEQyBEaWdpdGFsIDAKKyAqLworI2RlZmluZSBXTTg5MDRfQURDX0hQRl9DVVRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDYwICAvKiBBRENfSFBGX0NVVCAtIFs2OjVdICovCisjZGVmaW5lIFdNODkwNF9BRENfSFBGX0NVVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ19IUEZfQ1VUIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ19IUEZfQ1VUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX0hQRl9DVVQgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5MDRfQURDX0hQRiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENfSFBGICovCisjZGVmaW5lIFdNODkwNF9BRENfSFBGX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFEQ19IUEYgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19IUEZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogQURDX0hQRiAqLworI2RlZmluZSBXTTg5MDRfQURDX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENfSFBGICovCisjZGVmaW5lIFdNODkwNF9BRENMX0RBVElOViAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9BRENMX0RBVElOVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9BRENMX0RBVElOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9BRENMX0RBVElOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9BRENSX0RBVElOViAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFEQ1JfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9BRENSX0RBVElOVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFEQ1JfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9BRENSX0RBVElOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ1JfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9BRENSX0RBVElOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ1JfREFUSU5WICovCisKKy8qCisgKiBSMzkgKDB4MjcpIC0gRGlnaXRhbCBNaWNyb3Bob25lIDAKKyAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBETUlDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBETUlDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBETUlDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19TUkMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBETUlDX1NSQyAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19TUkNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBETUlDX1NSQyAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDExICAvKiBETUlDX1NSQyAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDX1NSQyAqLworCisvKgorICogUjQwICgweDI4KSAtIERSQyAwCisgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBEUkNfRU5BICovCisjZGVmaW5lIFdNODkwNF9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIERSQ19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0RBQ19QQVRIICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBEUkNfREFDX1BBVEggKi8KKyNkZWZpbmUgV004OTA0X0RSQ19EQUNfUEFUSF9NQVNLICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogRFJDX0RBQ19QQVRIICovCisjZGVmaW5lIFdNODkwNF9EUkNfREFDX1BBVEhfU0hJRlQgICAgICAgICAgICAgICAgICAgMTQgIC8qIERSQ19EQUNfUEFUSCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0RBQ19QQVRIX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEUkNfREFDX1BBVEggKi8KKyNkZWZpbmUgV004OTA0X0RSQ19HU19IWVNUX0xWTF9NQVNLICAgICAgICAgICAgIDB4MTgwMCAgLyogRFJDX0dTX0hZU1RfTFZMIC0gWzEyOjExXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0hZU1RfTFZMX1NISUZUICAgICAgICAgICAgICAgIDExICAvKiBEUkNfR1NfSFlTVF9MVkwgLSBbMTI6MTFdICovCisjZGVmaW5lIFdNODkwNF9EUkNfR1NfSFlTVF9MVkxfV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIERSQ19HU19IWVNUX0xWTCAtIFsxMjoxMV0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19TVEFSVFVQX0dBSU5fTUFTSyAgICAgICAgICAgIDB4MDdDMCAgLyogRFJDX1NUQVJUVVBfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX1NUQVJUVVBfR0FJTl9TSElGVCAgICAgICAgICAgICAgICA2ICAvKiBEUkNfU1RBUlRVUF9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODkwNF9EUkNfU1RBUlRVUF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgIDUgIC8qIERSQ19TVEFSVFVQX0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19GRl9ERUxBWSAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRFJDX0ZGX0RFTEFZICovCisjZGVmaW5lIFdNODkwNF9EUkNfRkZfREVMQVlfTUFTSyAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERSQ19GRl9ERUxBWSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0ZGX0RFTEFZX1NISUZUICAgICAgICAgICAgICAgICAgICA1ICAvKiBEUkNfRkZfREVMQVkgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19GRl9ERUxBWV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogRFJDX0ZGX0RFTEFZICovCisjZGVmaW5lIFdNODkwNF9EUkNfR1NfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERSQ19HU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19HU19FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogRFJDX0dTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBEUkNfR1NfRU5BICovCisjZGVmaW5lIFdNODkwNF9EUkNfR1NfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERSQ19HU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19RUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRFJDX1FSICovCisjZGVmaW5lIFdNODkwNF9EUkNfUVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERSQ19RUiAqLworI2RlZmluZSBXTTg5MDRfRFJDX1FSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEUkNfUVIgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19RUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFJDX1FSICovCisjZGVmaW5lIFdNODkwNF9EUkNfQU5USUNMSVAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0FOVElDTElQX01BU0sgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEUkNfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19BTlRJQ0xJUF9TSElGVCAgICAgICAgICAgICAgICAgICAgMSAgLyogRFJDX0FOVElDTElQICovCisjZGVmaW5lIFdNODkwNF9EUkNfQU5USUNMSVBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0hZU1QgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEUkNfR1NfSFlTVCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0hZU1RfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEUkNfR1NfSFlTVCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0hZU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBEUkNfR1NfSFlTVCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0hZU1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBEUkNfR1NfSFlTVCAqLworCisvKgorICogUjQxICgweDI5KSAtIERSQyAxCisgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19BVEtfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RjAwMCAgLyogRFJDX0FUSyAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19BVEtfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMiAgLyogRFJDX0FUSyAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19BVEtfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRFJDX0FUSyAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19EQ1lfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MEYwMCAgLyogRFJDX0RDWSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0RDWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEUkNfRENZIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9EUkNfRENZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERSQ19EQ1kgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19RUl9USFJfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDBDMCAgLyogRFJDX1FSX1RIUiAtIFs3OjZdICovCisjZGVmaW5lIFdNODkwNF9EUkNfUVJfVEhSX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIERSQ19RUl9USFIgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX1FSX1RIUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEUkNfUVJfVEhSIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19RUl9EQ1lfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAzMCAgLyogRFJDX1FSX0RDWSAtIFs1OjRdICovCisjZGVmaW5lIFdNODkwNF9EUkNfUVJfRENZX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERSQ19RUl9EQ1kgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX1FSX0RDWV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEUkNfUVJfRENZIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19NSU5HQUlOX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogRFJDX01JTkdBSU4gLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAyICAvKiBEUkNfTUlOR0FJTiAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9EUkNfTUlOR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERSQ19NSU5HQUlOIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19NQVhHQUlOX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogRFJDX01BWEdBSU4gLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX01BWEdBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBEUkNfTUFYR0FJTiAtIFsxOjBdICovCisjZGVmaW5lIFdNODkwNF9EUkNfTUFYR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERSQ19NQVhHQUlOIC0gWzE6MF0gKi8KKworLyoKKyAqIFI0MiAoMHgyQSkgLSBEUkMgMgorICovCisjZGVmaW5lIFdNODkwNF9EUkNfSElfQ09NUF9NQVNLICAgICAgICAgICAgICAgICAweDAwMzggIC8qIERSQ19ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19ISV9DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICAgMyAgLyogRFJDX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0hJX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAzICAvKiBEUkNfSElfQ09NUCAtIFs1OjNdICovCisjZGVmaW5lIFdNODkwNF9EUkNfTE9fQ09NUF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIERSQ19MT19DT01QIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19MT19DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFJDX0xPX0NPTVAgLSBbMjowXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0xPX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAzICAvKiBEUkNfTE9fQ09NUCAtIFsyOjBdICovCisKKy8qCisgKiBSNDMgKDB4MkIpIC0gRFJDIDMKKyAqLworI2RlZmluZSBXTTg5MDRfRFJDX0tORUVfSVBfTUFTSyAgICAgICAgICAgICAgICAgMHgwN0UwICAvKiBEUkNfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0tORUVfSVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICA1ICAvKiBEUkNfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0tORUVfSVBfV0lEVEggICAgICAgICAgICAgICAgICAgICA2ICAvKiBEUkNfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0tORUVfT1BfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBEUkNfS05FRV9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9EUkNfS05FRV9PUF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERSQ19LTkVFX09QIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19LTkVFX09QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNSAgLyogRFJDX0tORUVfT1AgLSBbNDowXSAqLworCisvKgorICogUjQ0ICgweDJDKSAtIEFuYWxvZ3VlIExlZnQgSW5wdXQgMAorICovCisjZGVmaW5lIFdNODkwNF9MSU5NVVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTk1VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTk1VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElOTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElOTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMSU5NVVRFICovCisjZGVmaW5lIFdNODkwNF9MSU5NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTk1VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogTElOX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9MSU5fVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExJTl9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfTElOX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMSU5fVk9MIC0gWzQ6MF0gKi8KKworLyoKKyAqIFI0NSAoMHgyRCkgLSBBbmFsb2d1ZSBSaWdodCBJbnB1dCAwCisgKi8KKyNkZWZpbmUgV004OTA0X1JJTk1VVEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUklOTVVURSAqLworI2RlZmluZSBXTTg5MDRfUklOTVVURV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSSU5NVVRFICovCisjZGVmaW5lIFdNODkwNF9SSU5NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJJTk1VVEUgKi8KKyNkZWZpbmUgV004OTA0X1JJTk1VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUklOTVVURSAqLworI2RlZmluZSBXTTg5MDRfUklOX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBSSU5fVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X1JJTl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUklOX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9SSU5fVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFJJTl9WT0wgLSBbNDowXSAqLworCisvKgorICogUjQ2ICgweDJFKSAtIEFuYWxvZ3VlIExlZnQgSW5wdXQgMQorICovCisjZGVmaW5lIFdNODkwNF9JTkxfQ01fRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOTF9DTV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOTF9DTV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU5MX0NNX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5MX0NNX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBJTkxfQ01fRU5BICovCisjZGVmaW5lIFdNODkwNF9JTkxfQ01fRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOTF9DTV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xfSVBfU0VMX05fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAzMCAgLyogTF9JUF9TRUxfTiAtIFs1OjRdICovCisjZGVmaW5lIFdNODkwNF9MX0lQX1NFTF9OX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExfSVBfU0VMX04gLSBbNTo0XSAqLworI2RlZmluZSBXTTg5MDRfTF9JUF9TRUxfTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMX0lQX1NFTF9OIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTA0X0xfSVBfU0VMX1BfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogTF9JUF9TRUxfUCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9MX0lQX1NFTF9QX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExfSVBfU0VMX1AgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfTF9JUF9TRUxfUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMX0lQX1NFTF9QIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0xfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogTF9NT0RFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTF9NT0RFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTF9NT0RFIC0gWzE6MF0gKi8KKworLyoKKyAqIFI0NyAoMHgyRikgLSBBbmFsb2d1ZSBSaWdodCBJbnB1dCAxCisgKi8KKyNkZWZpbmUgV004OTA0X0lOUl9DTV9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU5SX0NNX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5SX0NNX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTlJfQ01fRU5BICovCisjZGVmaW5lIFdNODkwNF9JTlJfQ01fRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIElOUl9DTV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOUl9DTV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU5SX0NNX0VOQSAqLworI2RlZmluZSBXTTg5MDRfUl9JUF9TRUxfTl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDMwICAvKiBSX0lQX1NFTF9OIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTA0X1JfSVBfU0VMX05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogUl9JUF9TRUxfTiAtIFs1OjRdICovCisjZGVmaW5lIFdNODkwNF9SX0lQX1NFTF9OX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFJfSVBfU0VMX04gLSBbNTo0XSAqLworI2RlZmluZSBXTTg5MDRfUl9JUF9TRUxfUF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBSX0lQX1NFTF9QIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X1JfSVBfU0VMX1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMiAgLyogUl9JUF9TRUxfUCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9SX0lQX1NFTF9QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFJfSVBfU0VMX1AgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfUl9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBSX01PREUgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfUl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBSX01PREUgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfUl9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBSX01PREUgLSBbMTowXSAqLworCisvKgorICogUjU3ICgweDM5KSAtIEFuYWxvZ3VlIE9VVDEgTGVmdAorICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExfTVVURSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEhQT1VUTF9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExfTVVURV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEhQT1VUTF9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIEhQT1VUTF9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUTF9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExaQyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUTFpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExaQ19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUTFpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEhQT1VUTFpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUTFpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExfVk9MX01BU0sgICAgICAgICAgICAgICAgICAweDAwM0YgIC8qIEhQT1VUTF9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUE9VVExfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgNiAgLyogSFBPVVRMX1ZPTCAtIFs1OjBdICovCisKKy8qCisgKiBSNTggKDB4M0EpIC0gQW5hbG9ndWUgT1VUMSBSaWdodAorICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJfTVVURSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEhQT1VUUl9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJfTVVURV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEhQT1VUUl9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIEhQT1VUUl9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUUl9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJaQyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUUlpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJaQ19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUUlpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEhQT1VUUlpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUUlpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJfVk9MX01BU0sgICAgICAgICAgICAgICAgICAweDAwM0YgIC8qIEhQT1VUUl9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUE9VVFJfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgNiAgLyogSFBPVVRSX1ZPTCAtIFs1OjBdICovCisKKy8qCisgKiBSNTkgKDB4M0IpIC0gQW5hbG9ndWUgT1VUMiBMZWZ0CisgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX01VVEUgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTElORU9VVExfTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfTVVURV9NQVNLICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMSU5FT1VUTF9NVVRFICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgIDggIC8qIExJTkVPVVRMX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVExfTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVF9WVSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSU5FT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUX1ZVX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTElORU9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTFpDICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVRMWkMgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTElORU9VVExaQyAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBMSU5FT1VUTFpDICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTFpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRMWkMgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1ZPTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAzRiAgLyogTElORU9VVExfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogTElORU9VVExfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgNiAgLyogTElORU9VVExfVk9MIC0gWzU6MF0gKi8KKworLyoKKyAqIFI2MCAoMHgzQykgLSBBbmFsb2d1ZSBPVVQyIFJpZ2h0CisgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX01VVEUgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTElORU9VVFJfTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfTVVURV9NQVNLICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMSU5FT1VUUl9NVVRFICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgIDggIC8qIExJTkVPVVRSX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVFJfTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVF9WVSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSU5FT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUX1ZVX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTElORU9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUlpDICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVRSWkMgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTElORU9VVFJaQyAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBMSU5FT1VUUlpDICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUlpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRSWkMgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1ZPTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAzRiAgLyogTElORU9VVFJfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogTElORU9VVFJfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgNiAgLyogTElORU9VVFJfVk9MIC0gWzU6MF0gKi8KKworLyoKKyAqIFI2MSAoMHgzRCkgLSBBbmFsb2d1ZSBPVVQxMiBaQworICovCisjZGVmaW5lIFdNODkwNF9IUExfQllQX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEhQTF9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUExfQllQX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEhQTF9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUExfQllQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEhQTF9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUExfQllQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQTF9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfQllQX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQUl9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfQllQX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQUl9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfQllQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEhQUl9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfQllQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQUl9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9CWVBfRU5BICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIExJTkVPVVRMX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0JZUF9FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogTElORU9VVExfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfQllQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUTF9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9CWVBfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRMX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0JZUF9FTkEgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTElORU9VVFJfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfQllQX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDAxICAvKiBMSU5FT1VUUl9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9CWVBfRU5BX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIExJTkVPVVRSX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0JZUF9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogTElORU9VVFJfQllQX0VOQSAqLworCisvKgorICogUjY3ICgweDQzKSAtIERDIFNlcnZvIDAKKyAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzMgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfRU5BX0NIQU5fMyAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzNfTUFTSyAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfRU5BX0NIQU5fMyAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzNfU0hJRlQgICAgICAgICAgICAgICAgICAzICAvKiBEQ1NfRU5BX0NIQU5fMyAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzNfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMyAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzIgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfRU5BX0NIQU5fMiAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzJfTUFTSyAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfRU5BX0NIQU5fMiAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzJfU0hJRlQgICAgICAgICAgICAgICAgICAyICAvKiBEQ1NfRU5BX0NIQU5fMiAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzJfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMiAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzEgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzFfTUFTSyAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzFfU0hJRlQgICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzFfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzBfTUFTSyAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzBfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzBfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworCisvKgorICogUjY4ICgweDQ0KSAtIERDIFNlcnZvIDEKKyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzMgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzNfTUFTSyAgICAgICAgICAgMHg4MDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzNfU0hJRlQgICAgICAgICAgICAgIDE1ICAvKiBEQ1NfVFJJR19TSU5HTEVfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzNfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TSU5HTEVfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzIgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzJfTUFTSyAgICAgICAgICAgMHg0MDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzJfU0hJRlQgICAgICAgICAgICAgIDE0ICAvKiBEQ1NfVFJJR19TSU5HTEVfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzJfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TSU5HTEVfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzEgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzFfTUFTSyAgICAgICAgICAgMHgyMDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzFfU0hJRlQgICAgICAgICAgICAgIDEzICAvKiBEQ1NfVFJJR19TSU5HTEVfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzFfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TSU5HTEVfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzBfTUFTSyAgICAgICAgICAgMHgxMDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzBfU0hJRlQgICAgICAgICAgICAgIDEyICAvKiBEQ1NfVFJJR19TSU5HTEVfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TSU5HTEVfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzMgICAgICAgICAgICAgICAgMHgwODAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzNfTUFTSyAgICAgICAgICAgMHgwODAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzNfU0hJRlQgICAgICAgICAgICAgIDExICAvKiBEQ1NfVFJJR19TRVJJRVNfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzNfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TRVJJRVNfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzIgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzJfTUFTSyAgICAgICAgICAgMHgwNDAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzJfU0hJRlQgICAgICAgICAgICAgIDEwICAvKiBEQ1NfVFJJR19TRVJJRVNfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzJfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TRVJJRVNfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzEgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzFfTUFTSyAgICAgICAgICAgMHgwMjAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzFfU0hJRlQgICAgICAgICAgICAgICA5ICAvKiBEQ1NfVFJJR19TRVJJRVNfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzFfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TRVJJRVNfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzBfTUFTSyAgICAgICAgICAgMHgwMTAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzBfU0hJRlQgICAgICAgICAgICAgICA4ICAvKiBEQ1NfVFJJR19TRVJJRVNfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TRVJJRVNfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8zICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfM19NQVNLICAgICAgICAgIDB4MDA4MCAgLyogRENTX1RSSUdfU1RBUlRVUF8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzNfU0hJRlQgICAgICAgICAgICAgIDcgIC8qIERDU19UUklHX1NUQVJUVVBfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8zX1dJRFRIICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TVEFSVFVQXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMiAgICAgICAgICAgICAgIDB4MDA0MCAgLyogRENTX1RSSUdfU1RBUlRVUF8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzJfTUFTSyAgICAgICAgICAweDAwNDAgIC8qIERDU19UUklHX1NUQVJUVVBfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8yX1NISUZUICAgICAgICAgICAgICA2ICAvKiBEQ1NfVFJJR19TVEFSVFVQXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMl9XSURUSCAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU1RBUlRVUF8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzEgICAgICAgICAgICAgICAweDAwMjAgIC8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8xX01BU0sgICAgICAgICAgMHgwMDIwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMV9TSElGVCAgICAgICAgICAgICAgNSAgLyogRENTX1RSSUdfU1RBUlRVUF8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzFfV0lEVEggICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8wICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMF9NQVNLICAgICAgICAgIDB4MDAxMCAgLyogRENTX1RSSUdfU1RBUlRVUF8wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzBfU0hJRlQgICAgICAgICAgICAgIDQgIC8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8wX1dJRFRIICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TVEFSVFVQXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8zICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogRENTX1RSSUdfREFDX1dSXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8zX01BU0sgICAgICAgICAgIDB4MDAwOCAgLyogRENTX1RSSUdfREFDX1dSXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8zX1NISUZUICAgICAgICAgICAgICAgMyAgLyogRENTX1RSSUdfREFDX1dSXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8zX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfREFDX1dSXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8yICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRENTX1RSSUdfREFDX1dSXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8yX01BU0sgICAgICAgICAgIDB4MDAwNCAgLyogRENTX1RSSUdfREFDX1dSXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8yX1NISUZUICAgICAgICAgICAgICAgMiAgLyogRENTX1RSSUdfREFDX1dSXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8yX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfREFDX1dSXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8xICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRENTX1RSSUdfREFDX1dSXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8xX01BU0sgICAgICAgICAgIDB4MDAwMiAgLyogRENTX1RSSUdfREFDX1dSXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8xX1NISUZUICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfREFDX1dSXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8xX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfREFDX1dSXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8wICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRENTX1RSSUdfREFDX1dSXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8wX01BU0sgICAgICAgICAgIDB4MDAwMSAgLyogRENTX1RSSUdfREFDX1dSXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8wX1NISUZUICAgICAgICAgICAgICAgMCAgLyogRENTX1RSSUdfREFDX1dSXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8wX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfREFDX1dSXzAgKi8KKworLyoKKyAqIFI2OSAoMHg0NSkgLSBEQyBTZXJ2byAyCisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19USU1FUl9QRVJJT0RfMjNfTUFTSyAgICAgICAgIDB4MEYwMCAgLyogRENTX1RJTUVSX1BFUklPRF8yMyAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RJTUVSX1BFUklPRF8yM19TSElGVCAgICAgICAgICAgICA4ICAvKiBEQ1NfVElNRVJfUEVSSU9EXzIzIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVElNRVJfUEVSSU9EXzIzX1dJRFRIICAgICAgICAgICAgIDQgIC8qIERDU19USU1FUl9QRVJJT0RfMjMgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19USU1FUl9QRVJJT0RfMDFfTUFTSyAgICAgICAgIDB4MDAwRiAgLyogRENTX1RJTUVSX1BFUklPRF8wMSAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVElNRVJfUEVSSU9EXzAxX1NISUZUICAgICAgICAgICAgIDAgIC8qIERDU19USU1FUl9QRVJJT0RfMDEgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RJTUVSX1BFUklPRF8wMV9XSURUSCAgICAgICAgICAgICA0ICAvKiBEQ1NfVElNRVJfUEVSSU9EXzAxIC0gWzM6MF0gKi8KKworLyoKKyAqIFI3MSAoMHg0NykgLSBEQyBTZXJ2byA0CisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19TRVJJRVNfTk9fMjNfTUFTSyAgICAgICAgICAgIDB4MDA3RiAgLyogRENTX1NFUklFU19OT18yMyAtIFs2OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfU0VSSUVTX05PXzIzX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19TRVJJRVNfTk9fMjMgLSBbNjowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX1NFUklFU19OT18yM19XSURUSCAgICAgICAgICAgICAgICA3ICAvKiBEQ1NfU0VSSUVTX05PXzIzIC0gWzY6MF0gKi8KKworLyoKKyAqIFI3MiAoMHg0OCkgLSBEQyBTZXJ2byA1CisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19TRVJJRVNfTk9fMDFfTUFTSyAgICAgICAgICAgIDB4MDA3RiAgLyogRENTX1NFUklFU19OT18wMSAtIFs2OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfU0VSSUVTX05PXzAxX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19TRVJJRVNfTk9fMDEgLSBbNjowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX1NFUklFU19OT18wMV9XSURUSCAgICAgICAgICAgICAgICA3ICAvKiBEQ1NfU0VSSUVTX05PXzAxIC0gWzY6MF0gKi8KKworLyoKKyAqIFI3MyAoMHg0OSkgLSBEQyBTZXJ2byA2CisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzNfTUFTSyAgICAgICAgICAgIDB4MDBGRiAgLyogRENTX0RBQ19XUl9WQUxfMyAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8zX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19EQUNfV1JfVkFMXzMgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfM19XSURUSCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8zIC0gWzc6MF0gKi8KKworLyoKKyAqIFI3NCAoMHg0QSkgLSBEQyBTZXJ2byA3CisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzJfTUFTSyAgICAgICAgICAgIDB4MDBGRiAgLyogRENTX0RBQ19XUl9WQUxfMiAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8yX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19EQUNfV1JfVkFMXzIgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfMl9XSURUSCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8yIC0gWzc6MF0gKi8KKworLyoKKyAqIFI3NSAoMHg0QikgLSBEQyBTZXJ2byA4CisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzFfTUFTSyAgICAgICAgICAgIDB4MDBGRiAgLyogRENTX0RBQ19XUl9WQUxfMSAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8xX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19EQUNfV1JfVkFMXzEgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfMV9XSURUSCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8xIC0gWzc6MF0gKi8KKworLyoKKyAqIFI3NiAoMHg0QykgLSBEQyBTZXJ2byA5CisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzBfTUFTSyAgICAgICAgICAgIDB4MDBGRiAgLyogRENTX0RBQ19XUl9WQUxfMCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8wX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19EQUNfV1JfVkFMXzAgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfMF9XSURUSCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8wIC0gWzc6MF0gKi8KKworLyoKKyAqIFI3NyAoMHg0RCkgLSBEQyBTZXJ2byBSZWFkYmFjayAwCisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19DQUxfQ09NUExFVEVfTUFTSyAgICAgICAgICAgIDB4MEYwMCAgLyogRENTX0NBTF9DT01QTEVURSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfRENTX0NBTF9DT01QTEVURV9TSElGVCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfQ0FMX0NPTVBMRVRFIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfQ0FMX0NPTVBMRVRFX1dJRFRIICAgICAgICAgICAgICAgIDQgIC8qIERDU19DQUxfQ09NUExFVEUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfQ09NUExFVEVfTUFTSyAgICAgICAgIDB4MDBGMCAgLyogRENTX0RBQ19XUl9DT01QTEVURSAtIFs3OjRdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX0NPTVBMRVRFX1NISUZUICAgICAgICAgICAgIDQgIC8qIERDU19EQUNfV1JfQ09NUExFVEUgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9DT01QTEVURV9XSURUSCAgICAgICAgICAgICA0ICAvKiBEQ1NfREFDX1dSX0NPTVBMRVRFIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19TVEFSVFVQX0NPTVBMRVRFX01BU0sgICAgICAgIDB4MDAwRiAgLyogRENTX1NUQVJUVVBfQ09NUExFVEUgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX1NUQVJUVVBfQ09NUExFVEVfU0hJRlQgICAgICAgICAgICAwICAvKiBEQ1NfU1RBUlRVUF9DT01QTEVURSAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfU1RBUlRVUF9DT01QTEVURV9XSURUSCAgICAgICAgICAgIDQgIC8qIERDU19TVEFSVFVQX0NPTVBMRVRFIC0gWzM6MF0gKi8KKworLyoKKyAqIFI5MCAoMHg1QSkgLSBBbmFsb2d1ZSBIUCAwCisgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9STVZfU0hPUlQgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfSFBMX1JNVl9TSE9SVF9NQVNLICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUExfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9IUExfUk1WX1NIT1JUX1NISUZUICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9STVZfU0hPUlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSFBMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfSFBMX0VOQV9PVVRQICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUExfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfT1VUUF9NQVNLICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBMX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9IUExfRU5BX09VVFBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDYgIC8qIEhQTF9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfSFBMX0VOQV9PVVRQX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBIUExfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfRExZICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfRExZX01BU0sgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfRExZX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogSFBMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfRExZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSFBMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBIUExfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUExfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEhQTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBSX1JNVl9TSE9SVCAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBIUFJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9IUFJfUk1WX1NIT1JUX01BU0sgICAgICAgICAgICAgICAweDAwMDggIC8qIEhQUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9STVZfU0hPUlRfU0hJRlQgICAgICAgICAgICAgICAgICAgMyAgLyogSFBSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfSFBSX1JNVl9TSE9SVF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBIUFJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9IUFJfRU5BX09VVFAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9PVVRQX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUFJfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9FTkFfT1VUUF9TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogSFBSX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9IUFJfRU5BX09VVFBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9ETFlfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9ETFlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9ETFlfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBIUFJfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEhQUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUFJfRU5BICovCisKKy8qCisgKiBSOTQgKDB4NUUpIC0gQW5hbG9ndWUgTGluZW91dCAwCisgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1JNVl9TSE9SVCAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElORU9VVExfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9STVZfU0hPUlRfTUFTSyAgICAgICAgICAweDAwODAgIC8qIExJTkVPVVRMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfUk1WX1NIT1JUX1NISUZUICAgICAgICAgICAgICA3ICAvKiBMSU5FT1VUTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1JNVl9TSE9SVF9XSURUSCAgICAgICAgICAgICAgMSAgLyogTElORU9VVExfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfT1VUUCAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVRMX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfT1VUUF9NQVNLICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVRMX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfT1VUUF9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIExJTkVPVVRMX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfT1VUUF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRMX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfRExZICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExJTkVPVVRMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0VOQV9ETFlfTUFTSyAgICAgICAgICAgIDB4MDAyMCAgLyogTElORU9VVExfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfRU5BX0RMWV9TSElGVCAgICAgICAgICAgICAgICA1ICAvKiBMSU5FT1VUTF9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfRExZX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTElORU9VVExfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExJTkVPVVRMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICA0ICAvKiBMSU5FT1VUTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVExfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9STVZfU0hPUlQgICAgICAgICAgICAgICAweDAwMDggIC8qIExJTkVPVVRSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfUk1WX1NIT1JUX01BU0sgICAgICAgICAgMHgwMDA4ICAvKiBMSU5FT1VUUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1JNVl9TSE9SVF9TSElGVCAgICAgICAgICAgICAgMyAgLyogTElORU9VVFJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9STVZfU0hPUlRfV0lEVEggICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX09VVFAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBMSU5FT1VUUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX09VVFBfTUFTSyAgICAgICAgICAgMHgwMDA0ICAvKiBMSU5FT1VUUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX09VVFBfU0hJRlQgICAgICAgICAgICAgICAyICAvKiBMSU5FT1VUUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX09VVFBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX0RMWSAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBMSU5FT1VUUl9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9FTkFfRExZX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIExJTkVPVVRSX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0VOQV9ETFlfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX0RMWV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUUl9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9FTkEgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExJTkVPVVRSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMSU5FT1VUUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogTElORU9VVFJfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRSX0VOQSAqLworCisvKgorICogUjk4ICgweDYyKSAtIENoYXJnZSBQdW1wIDAKKyAqLworI2RlZmluZSBXTTg5MDRfQ1BfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBDUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0NQX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQ1BfRU5BICovCisjZGVmaW5lIFdNODkwNF9DUF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIENQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQ1BfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDUF9FTkEgKi8KKworLyoKKyAqIFIxMDQgKDB4NjgpIC0gQ2xhc3MgVyAwCisgKi8KKyNkZWZpbmUgV004OTA0X0NQX0RZTl9QV1IgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQ1BfRFlOX1BXUiAqLworI2RlZmluZSBXTTg5MDRfQ1BfRFlOX1BXUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBDUF9EWU5fUFdSICovCisjZGVmaW5lIFdNODkwNF9DUF9EWU5fUFdSX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIENQX0RZTl9QV1IgKi8KKyNkZWZpbmUgV004OTA0X0NQX0RZTl9QV1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ1BfRFlOX1BXUiAqLworCisvKgorICogUjEwOCAoMHg2QykgLSBXcml0ZSBTZXF1ZW5jZXIgMAorICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODkwNF9XU0VRX1dSSVRFX0lOREVYX01BU0sgICAgICAgICAgICAweDAwMUYgIC8qIFdTRVFfV1JJVEVfSU5ERVggLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9XUklURV9JTkRFWF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBXU0VRX1dSSVRFX0lOREVYIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfV1JJVEVfSU5ERVhfV0lEVEggICAgICAgICAgICAgICAgNSAgLyogV1NFUV9XUklURV9JTkRFWCAtIFs0OjBdICovCisKKy8qCisgKiBSMTA5ICgweDZEKSAtIFdyaXRlIFNlcXVlbmNlciAxCisgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfREFUQV9XSURUSF9NQVNLICAgICAgICAgICAgIDB4NzAwMCAgLyogV1NFUV9EQVRBX1dJRFRIIC0gWzE0OjEyXSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9EQVRBX1dJRFRIX1NISUZUICAgICAgICAgICAgICAgIDEyICAvKiBXU0VRX0RBVEFfV0lEVEggLSBbMTQ6MTJdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0RBVEFfV0lEVEhfV0lEVEggICAgICAgICAgICAgICAgIDMgIC8qIFdTRVFfREFUQV9XSURUSCAtIFsxNDoxMl0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfREFUQV9TVEFSVF9NQVNLICAgICAgICAgICAgIDB4MEYwMCAgLyogV1NFUV9EQVRBX1NUQVJUIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0RBVEFfU1RBUlRfU0hJRlQgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfREFUQV9TVEFSVCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9EQVRBX1NUQVJUX1dJRFRIICAgICAgICAgICAgICAgICA0ICAvKiBXU0VRX0RBVEFfU1RBUlQgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQUREUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogV1NFUV9BRERSIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQUREUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogV1NFUV9BRERSIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQUREUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9BRERSIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMTAgKDB4NkUpIC0gV3JpdGUgU2VxdWVuY2VyIDIKKyAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FT1MgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBXU0VRX0VPUyAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FT1NfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBXU0VRX0VPUyAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FT1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBXU0VRX0VPUyAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FT1NfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0VPUyAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9ERUxBWV9NQVNLICAgICAgICAgICAgICAgICAgMHgwRjAwICAvKiBXU0VRX0RFTEFZIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0RFTEFZX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfREVMQVkgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfREVMQVlfV0lEVEggICAgICAgICAgICAgICAgICAgICAgNCAgLyogV1NFUV9ERUxBWSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9EQVRBX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBXU0VRX0RBVEEgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9EQVRBX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBXU0VRX0RBVEEgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9EQVRBX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX0RBVEEgLSBbNzowXSAqLworCisvKgorICogUjExMSAoMHg2RikgLSBXcml0ZSBTZXF1ZW5jZXIgMworICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQUJPUlRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogV1NFUV9BQk9SVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9BQk9SVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBXU0VRX0FCT1JUICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0FCT1JUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9TVEFSVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9TVEFSVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX1NUQVJUICovCisjZGVmaW5lIFdNODkwNF9XU0VRX1NUQVJUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfU1RBUlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfU1RBUlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9TVEFSVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9TVEFSVF9JTkRFWF9NQVNLICAgICAgICAgICAgMHgwMDNGICAvKiBXU0VRX1NUQVJUX0lOREVYIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfU1RBUlRfSU5ERVhfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogV1NFUV9TVEFSVF9JTkRFWCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX1NUQVJUX0lOREVYX1dJRFRIICAgICAgICAgICAgICAgIDYgIC8qIFdTRVFfU1RBUlRfSU5ERVggLSBbNTowXSAqLworCisvKgorICogUjExMiAoMHg3MCkgLSBXcml0ZSBTZXF1ZW5jZXIgNAorICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0NVUlJFTlRfSU5ERVhfTUFTSyAgICAgICAgICAweDAzRjAgIC8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs5OjRdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0NVUlJFTlRfSU5ERVhfU0hJRlQgICAgICAgICAgICAgIDQgIC8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs5OjRdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0NVUlJFTlRfSU5ERVhfV0lEVEggICAgICAgICAgICAgIDYgIC8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs5OjRdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFdTRVFfQlVTWSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9CVVNZX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBXU0VRX0JVU1kgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQlVTWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogV1NFUV9CVVNZICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0JVU1lfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfQlVTWSAqLworCisvKgorICogUjExNiAoMHg3NCkgLSBGTEwgQ29udHJvbCAxCisgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkFDTl9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0ZSQUNOX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQUNOX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfRlJBQ05fRU5BICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJBQ05fRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9GUkFDTl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkFDTl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0ZSQUNOX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX09TQ19FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX09TQ19FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX09TQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX09TQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBGTExfRU5BICovCisjZGVmaW5lIFdNODkwNF9GTExfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfRU5BICovCisKKy8qCisgKiBSMTE3ICgweDc1KSAtIEZMTCBDb250cm9sIDIKKyAqLworI2RlZmluZSBXTTg5MDRfRkxMX09VVERJVl9NQVNLICAgICAgICAgICAgICAgICAgMHgzRjAwICAvKiBGTExfT1VURElWIC0gWzEzOjhdICovCisjZGVmaW5lIFdNODkwNF9GTExfT1VURElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEZMTF9PVVRESVYgLSBbMTM6OF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9PVVRESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgNiAgLyogRkxMX09VVERJViAtIFsxMzo4XSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NUUkxfUkFURV9NQVNLICAgICAgICAgICAgICAgMHgwMDcwICAvKiBGTExfQ1RSTF9SQVRFIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9DVFJMX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogRkxMX0NUUkxfUkFURSAtIFs2OjRdICovCisjZGVmaW5lIFdNODkwNF9GTExfQ1RSTF9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTF9DVFJMX1JBVEUgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQVRJT19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBGTExfRlJBVElPIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkFUSU9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0ZSQVRJTyAtIFsyOjBdICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJBVElPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTF9GUkFUSU8gLSBbMjowXSAqLworCisvKgorICogUjExOCAoMHg3NikgLSBGTEwgQ29udHJvbCAzCisgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9LX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRkxMX0sgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9LX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0sgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9LX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRkxMX0sgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTkgKDB4NzcpIC0gRkxMIENvbnRyb2wgNAorICovCisjZGVmaW5lIFdNODkwNF9GTExfTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDdGRTAgIC8qIEZMTF9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODkwNF9GTExfTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEZMTF9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODkwNF9GTExfTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIEZMTF9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODkwNF9GTExfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEZMTF9HQUlOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0dBSU4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBGTExfR0FJTiAtIFszOjBdICovCisKKy8qCisgKiBSMTIwICgweDc4KSAtIEZMTCBDb250cm9sIDUKKyAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NMS19SRUZfRElWX01BU0sgICAgICAgICAgICAgMHgwMDE4ICAvKiBGTExfQ0xLX1JFRl9ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NMS19SRUZfRElWX1NISUZUICAgICAgICAgICAgICAgICAzICAvKiBGTExfQ0xLX1JFRl9ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NMS19SRUZfRElWX1dJRFRIICAgICAgICAgICAgICAgICAyICAvKiBGTExfQ0xLX1JFRl9ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NMS19SRUZfU1JDX01BU0sgICAgICAgICAgICAgMHgwMDAzICAvKiBGTExfQ0xLX1JFRl9TUkMgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NMS19SRUZfU1JDX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBGTExfQ0xLX1JFRl9TUkMgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NMS19SRUZfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAyICAvKiBGTExfQ0xLX1JFRl9TUkMgLSBbMTowXSAqLworCisvKgorICogUjEyMSAoMHg3OSkgLSBHUElPIENvbnRyb2wgMQorICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8xX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8xX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEdQSU8xX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8xX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSU8xX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSU8xX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU8xX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8xX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEdQSU8xX1NFTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQSU8xX1NFTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU8xX1NFTCAtIFszOjBdICovCisKKy8qCisgKiBSMTIyICgweDdBKSAtIEdQSU8gQ29udHJvbCAyCisgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzJfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzJfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogR1BJTzJfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzJfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJTzJfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJTzJfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJTzJfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzJfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogR1BJTzJfU0VMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1BJTzJfU0VMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJTzJfU0VMIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxMjMgKDB4N0IpIC0gR1BJTyBDb250cm9sIDMKKyAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPM19QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPM19QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBHUElPM19QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPM19QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPM19QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPM19QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPM19QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPM19QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUElPM19TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUElPM19TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPM19TRUwgLSBbMzowXSAqLworCisvKgorICogUjEyNCAoMHg3QykgLSBHUElPIENvbnRyb2wgNAorICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQSTdfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQSTdfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEdQSTdfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSTdfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQSThfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQSThfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEdQSThfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSThfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfTU9ERV9FTkEgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU9fQkNMS19NT0RFX0VOQSAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX01PREVfRU5BX01BU0sgICAgICAgICAgMHgwMDgwICAvKiBHUElPX0JDTEtfTU9ERV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19NT0RFX0VOQV9TSElGVCAgICAgICAgICAgICAgNyAgLyogR1BJT19CQ0xLX01PREVfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfTU9ERV9FTkFfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEdQSU9fQkNMS19NT0RFX0VOQSAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX1NFTF9NQVNLICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUElPX0JDTEtfU0VMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogR1BJT19CQ0xLX1NFTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU9fQkNMS19TRUwgLSBbMzowXSAqLworCisvKgorICogUjEyNiAoMHg3RSkgLSBEaWdpdGFsIFB1bGxzCisgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfUFUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfTUNMS19QVV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBNQ0xLX1BVICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIE1DTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfTUNMS19QRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNQ0xLX1BEICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX1BEX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIE1DTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTUNMS19QRCAqLworI2RlZmluZSBXTTg5MDRfTUNMS19QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLX1BEICovCisjZGVmaW5lIFdNODkwNF9EQUNEQVRfUFUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERBQ0RBVF9QVSAqLworI2RlZmluZSBXTTg5MDRfREFDREFUX1BVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBEQUNEQVRfUFUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0RBVF9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogREFDREFUX1BVICovCisjZGVmaW5lIFdNODkwNF9EQUNEQVRfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0RBVF9QVSAqLworI2RlZmluZSBXTTg5MDRfREFDREFUX1BEICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQUNEQVRfUEQgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0RBVF9QRF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREFDREFUX1BEICovCisjZGVmaW5lIFdNODkwNF9EQUNEQVRfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERBQ0RBVF9QRCAqLworI2RlZmluZSBXTTg5MDRfREFDREFUX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNEQVRfUEQgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTFJDTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTFJDTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTFJDTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTFJDTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTFJDTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTFJDTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTFJDTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTFJDTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfUFUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQkNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfQkNMS19QVV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBCQ0xLX1BVICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfQkNMS19QRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCQ0xLX1BEICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX1BEX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJDTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQkNMS19QRCAqLworI2RlZmluZSBXTTg5MDRfQkNMS19QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLX1BEICovCisKKy8qCisgKiBSMTI3ICgweDdGKSAtIEludGVycnVwdCBTdGF0dXMKKyAqLworI2RlZmluZSBXTTg5MDRfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBJUlEgKi8KKyNkZWZpbmUgV004OTA0X0lSUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogSVJRICovCisjZGVmaW5lIFdNODkwNF9JUlFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIElSUSAqLworI2RlZmluZSBXTTg5MDRfSVJRX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJUlEgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1BJT19CQ0xLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1BJT19CQ0xLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgOSAgLyogR1BJT19CQ0xLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogR1BJT19CQ0xLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU8zX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJTzNfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBHUElPM19FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8zX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX0VJTlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJTzJfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUElPMl9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEdQSU8yX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzJfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPMV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8xX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNSAgLyogR1BJTzFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSThfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUEk4X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJOF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSThfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBHUEk3X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1BJN19FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEdQSTdfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk3X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9MT0NLX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9GTExfTE9DS19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9MT0NLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVCAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hSVF9FSU5UX01BU0sgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ19TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSFJUX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogTUlDX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ19ERVRfRUlOVCAqLworCisvKgorICogUjEyOCAoMHg4MCkgLSBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sKKyAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJT19CQ0xLX0VJTlQgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBJTV9HUElPX0JDTEtfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJT19CQ0xLX0VJTlRfTUFTSyAgICAgICAgICAgMHgwMjAwICAvKiBJTV9HUElPX0JDTEtfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJT19CQ0xLX0VJTlRfU0hJRlQgICAgICAgICAgICAgICA5ICAvKiBJTV9HUElPX0JDTEtfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJT19CQ0xLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTV9HUElPX0JDTEtfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fV1NFUV9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTV9XU0VRX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX1dTRVFfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU1fV1NFUV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9XU0VRX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDggIC8qIElNX1dTRVFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fV1NFUV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9XU0VRX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8zX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU1fR1BJTzNfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzNfRUlOVF9NQVNLICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTV9HUElPM19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPM19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDcgIC8qIElNX0dQSU8zX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8zX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1BJTzNfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzJfRUlOVCAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTV9HUElPMl9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPMl9FSU5UX01BU0sgICAgICAgICAgICAgICAweDAwNDAgIC8qIElNX0dQSU8yX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8yX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgNiAgLyogSU1fR1BJTzJfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzJfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUElPMl9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPMV9FSU5UICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElNX0dQSU8xX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8xX0VJTlRfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU1fR1BJTzFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzFfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBJTV9HUElPMV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPMV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQSU8xX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSThfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSU1fR1BJOF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUEk4X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElNX0dQSThfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJOF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICA0ICAvKiBJTV9HUEk4X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSThfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1BJOF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUEk3X0VJTlQgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIElNX0dQSTdfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJN19FSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTV9HUEk3X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSTdfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMyAgLyogSU1fR1BJN19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUEk3X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQSTdfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fRkxMX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBJTV9GTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9GTExfTE9DS19FSU5UX01BU0sgICAgICAgICAgICAweDAwMDQgIC8qIElNX0ZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0ZMTF9MT0NLX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgMiAgLyogSU1fRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fRkxMX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBJTV9GTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9NSUNfU0hSVF9FSU5UICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElNX01JQ19TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX01JQ19TSFJUX0VJTlRfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogSU1fTUlDX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fTUlDX1NIUlRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBJTV9NSUNfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9NSUNfU0hSVF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIElNX01JQ19TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX01JQ19ERVRfRUlOVCAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU1fTUlDX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9NSUNfREVUX0VJTlRfTUFTSyAgICAgICAgICAgICAweDAwMDEgIC8qIElNX01JQ19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fTUlDX0RFVF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBJTV9NSUNfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX01JQ19ERVRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogSU1fTUlDX0RFVF9FSU5UICovCisKKy8qCisgKiBSMTI5ICgweDgxKSAtIEludGVycnVwdCBQb2xhcml0eQorICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9QT0wgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQSU9fQkNMS19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX0VJTlRfUE9MX01BU0sgICAgICAgICAgMHgwMjAwICAvKiBHUElPX0JDTEtfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UX1BPTF9TSElGVCAgICAgICAgICAgICAgOSAgLyogR1BJT19CQ0xLX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9QT0xfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEdQSU9fQkNMS19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UX1BPTCAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlRfUE9MX01BU0sgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVF9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX1BPTCAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU8zX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX1BPTF9NQVNLICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU8zX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgIDcgIC8qIEdQSU8zX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8zX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX1BPTCAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSU8yX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX1BPTF9NQVNLICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSU8yX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIEdQSU8yX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8yX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX1BPTCAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8xX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX1BPTF9NQVNLICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8xX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgIDUgIC8qIEdQSU8xX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8xX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlRfUE9MICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSThfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRUlOVF9QT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJOF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBHUEk4X0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlRfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSThfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9QT0wgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1BJN19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UX1BPTF9NQVNLICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBHUEk3X0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VJTlRfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgIDMgIC8qIEdQSTdfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogR1BJN19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9QT0wgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfTE9DS19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9QT0xfTUFTSyAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfTE9DS19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9QT0xfU0hJRlQgICAgICAgICAgICAgICAyICAvKiBGTExfTE9DS19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9QT0xfV0lEVEggICAgICAgICAgICAgICAxICAvKiBGTExfTE9DS19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9QT0wgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNfU0hSVF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9QT0xfTUFTSyAgICAgICAgICAgMHgwMDAyICAvKiBNSUNfU0hSVF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9QT0xfU0hJRlQgICAgICAgICAgICAgICAxICAvKiBNSUNfU0hSVF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9QT0xfV0lEVEggICAgICAgICAgICAgICAxICAvKiBNSUNfU0hSVF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX1BPTCAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNfREVUX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlRfUE9MX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ19ERVRfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRUlOVF9QT0xfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogTUlDX0RFVF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX1BPTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBNSUNfREVUX0VJTlRfUE9MICovCisKKy8qCisgKiBSMTMwICgweDgyKSAtIEludGVycnVwdCBEZWJvdW5jZQorICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9EQiAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQSU9fQkNMS19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9EQl9NQVNLICAgICAgICAgICAweDAyMDAgIC8qIEdQSU9fQkNMS19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9EQl9TSElGVCAgICAgICAgICAgICAgIDkgIC8qIEdQSU9fQkNMS19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9EQl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEdQSU9fQkNMS19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlRfREIgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UX0RCX01BU0sgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVF9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlRfREJfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfRUlOVF9EQiAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUElPM19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX0RCX01BU0sgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU8zX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX0VJTlRfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgNyAgLyogR1BJTzNfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfRUlOVF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPM19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX0RCICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSU8yX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX0VJTlRfREJfTUFTSyAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJTzJfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfRUlOVF9EQl9TSElGVCAgICAgICAgICAgICAgICAgICA2ICAvKiBHUElPMl9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8yX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX0VJTlRfREIgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzFfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfRUlOVF9EQl9NQVNLICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPMV9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX0RCX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIEdQSU8xX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX0VJTlRfREJfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzFfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UX0RCICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUEk4X0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRUlOVF9EQl9NQVNLICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJOF9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlRfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSThfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk4X0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9EQiAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1BJN19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VJTlRfREJfTUFTSyAgICAgICAgICAgICAgICAweDAwMDggIC8qIEdQSTdfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAzICAvKiBHUEk3X0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJN19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9GTExfTE9DS19FSU5UX0RCICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEZMTF9MT0NLX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9MT0NLX0VJTlRfREJfTUFTSyAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0xPQ0tfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9EQl9TSElGVCAgICAgICAgICAgICAgICAyICAvKiBGTExfTE9DS19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9GTExfTE9DS19FSU5UX0RCX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9MT0NLX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSFJUX0VJTlRfREIgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDX1NIUlRfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9EQl9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNfU0hSVF9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hSVF9FSU5UX0RCX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIE1JQ19TSFJUX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSFJUX0VJTlRfREJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogTUlDX1NIUlRfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX0RCICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNfREVUX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRUlOVF9EQl9NQVNLICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDX0RFVF9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlRfREJfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ19ERVRfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX0RCX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBNSUNfREVUX0VJTlRfREIgKi8KKworLyoKKyAqIFIxMzQgKDB4ODYpIC0gRVExCisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRVFfRU5BICovCisjZGVmaW5lIFdNODkwNF9FUV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEVRX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRVFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRVFfRU5BICovCisKKy8qCisgKiBSMTM1ICgweDg3KSAtIEVRMgorICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9HQUlOX01BU0sgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIEVRX0IxX0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjFfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMV9HQUlOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IxX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgNSAgLyogRVFfQjFfR0FJTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTM2ICgweDg4KSAtIEVRMworICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9HQUlOX01BU0sgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIEVRX0IyX0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMl9HQUlOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgNSAgLyogRVFfQjJfR0FJTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTM3ICgweDg5KSAtIEVRNAorICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19HQUlOX01BU0sgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIEVRX0IzX0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CM19HQUlOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgNSAgLyogRVFfQjNfR0FJTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTM4ICgweDhBKSAtIEVRNQorICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9HQUlOX01BU0sgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIEVRX0I0X0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CNF9HQUlOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgNSAgLyogRVFfQjRfR0FJTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTM5ICgweDhCKSAtIEVRNgorICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9HQUlOX01BU0sgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIEVRX0I1X0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjVfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CNV9HQUlOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I1X0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgNSAgLyogRVFfQjVfR0FJTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTQwICgweDhDKSAtIEVRNworICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9BX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IxX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IxX0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjFfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjFfQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CMV9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxICgweDhEKSAtIEVROAorICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9CX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IxX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IxX0JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjFfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjFfQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CMV9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQyICgweDhFKSAtIEVROQorICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9QR19NQVNLICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IxX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9QR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IxX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9QR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IxX1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQzICgweDhGKSAtIEVRMTAKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CMl9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IyX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0FfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjJfQSAtIFsxNTowXSAqLworCisvKgorICogUjE0NCAoMHg5MCkgLSBFUTExCisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0JfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjJfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMl9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9CX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IyX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDUgKDB4OTEpIC0gRVExMgorICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9DX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IyX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjJfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CMl9DIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQ2ICgweDkyKSAtIEVRMTMKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfUEdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CMl9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfUEdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMl9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfUEdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CMl9QRyAtIFsxNTowXSAqLworCisvKgorICogUjE0NyAoMHg5MykgLSBFUTE0CisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0FfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjNfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CM19BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IzX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDggKDB4OTQpIC0gRVExNQorICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19CX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IzX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjNfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CM19CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQ5ICgweDk1KSAtIEVRMTYKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CM19DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19DX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IzX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0NfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjNfQyAtIFsxNTowXSAqLworCisvKgorICogUjE1MCAoMHg5NikgLSBFUTE3CisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX1BHX01BU0sgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX1BHX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX1BHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjNfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNTEgKDB4OTcpIC0gRVExOAorICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9BX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0I0X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjRfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CNF9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTUyICgweDk4KSAtIEVRMTkKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfQl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CNF9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9CX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I0X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjRfQiAtIFsxNTowXSAqLworCisvKgorICogUjE1MyAoMHg5OSkgLSBFUTIwCisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0NfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjRfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CNF9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9DX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0I0X0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNTQgKDB4OUEpIC0gRVEyMQorICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9QR19NQVNLICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0I0X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9QR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I0X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9QR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0I0X1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTU1ICgweDlCKSAtIEVRMjIKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjVfQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CNV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I1X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I1X0FfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjVfQSAtIFsxNTowXSAqLworCisvKgorICogUjE1NiAoMHg5QykgLSBFUTIzCisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0I1X0JfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjVfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjVfQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CNV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9CX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0I1X0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNTcgKDB4OUQpIC0gRVEyNAorICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9QR19NQVNLICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0I1X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9QR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I1X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9QR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0I1X1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTYxICgweEExKSAtIENvbnRyb2wgSW50ZXJmYWNlIFRlc3QgMQorICovCisjZGVmaW5lIFdNODkwNF9VU0VSX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFVTRVJfS0VZICovCisjZGVmaW5lIFdNODkwNF9VU0VSX0tFWV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFVTRVJfS0VZICovCisjZGVmaW5lIFdNODkwNF9VU0VSX0tFWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFVTRVJfS0VZICovCisjZGVmaW5lIFdNODkwNF9VU0VSX0tFWV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFVTRVJfS0VZICovCisKKy8qCisgKiBSMjA0ICgweENDKSAtIEFuYWxvZ3VlIE91dHB1dCBCaWFzIDAKKyAqLworI2RlZmluZSBXTTg5MDRfUEdBX0JJQVNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBQR0FfQklBUyAtIFs2OjRdICovCisjZGVmaW5lIFdNODkwNF9QR0FfQklBU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFBHQV9CSUFTIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTA0X1BHQV9CSUFTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUEdBX0JJQVMgLSBbNjo0XSAqLworCisvKgorICogUjI0NyAoMHhGNykgLSBGTEwgTkNPIFRlc3QgMAorICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJDX05DTyAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTF9GUkNfTkNPICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJDX05DT19NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTF9GUkNfTkNPICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJDX05DT19TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9GUkNfTkNPICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJDX05DT19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9GUkNfTkNPICovCisKKy8qCisgKiBSMjQ4ICgweEY4KSAtIEZMTCBOQ08gVGVzdCAxCisgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkNfTkNPX1ZBTF9NQVNLICAgICAgICAgICAgIDB4MDAzRiAgLyogRkxMX0ZSQ19OQ09fVkFMIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkNfTkNPX1ZBTF9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0ZSQ19OQ09fVkFMIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkNfTkNPX1ZBTF9XSURUSCAgICAgICAgICAgICAgICAgNiAgLyogRkxMX0ZSQ19OQ09fVkFMIC0gWzU6MF0gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTVkYWIyCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NTUuYwpAQCAtMCwwICsxLDExNTEgQEAKKy8qCisgKiB3bTg5NTUuYyAgLS0gIFdNODk1NSBBTFNBIFNvQyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgcGxjCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxzb3VuZC93bTg5NTUuaD4KKworI2luY2x1ZGUgIndtODk1NS5oIgorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODk1NV9jb2RlYzsKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk1NTsKKworI2RlZmluZSBXTTg5NTVfTlVNX1NVUFBMSUVTIDQKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NTVfc3VwcGx5X25hbWVzW1dNODk1NV9OVU1fU1VQUExJRVNdID0geworCSJEQ1ZERCIsCisJIkRCVkREIiwKKwkiSFBWREQiLAorCSJBVkREIiwKK307CisKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IHdtODk1NV9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1MTYgcmVnX2NhY2hlW1dNODk1NV9NQVhfUkVHSVNURVIgKyAxXTsKKworCXVuc2lnbmVkIGludCBtY2xrX3JhdGU7CisKKwlpbnQgZGVlbXBoOworCWludCBmczsKKworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW1dNODk1NV9OVU1fU1VQUExJRVNdOworCisJc3RydWN0IHdtODk1NV9wZGF0YSAqcGRhdGE7Cit9OworCitzdGF0aWMgY29uc3QgdTE2IHdtODk1NV9yZWdbV004OTU1X01BWF9SRUdJU1RFUiArIDFdID0geworCTB4MDAwMCwgICAgIC8qIFIwICovCisJMHgwMDAwLCAgICAgLyogUjEgKi8KKwkweDAwNzksICAgICAvKiBSMiAgLSBMT1VUMSB2b2x1bWUgKi8KKwkweDAwNzksICAgICAvKiBSMyAgLSBST1VUMSB2b2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSNCAqLworCTB4MDAwOCwgICAgIC8qIFI1ICAtIERBQyBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjYgKi8KKwkweDAwMEEsICAgICAvKiBSNyAgLSBBdWRpbyBJbnRlcmZhY2UgKi8KKwkweDAwMDAsICAgICAvKiBSOCAgLSBTYW1wbGUgUmF0ZSAqLworCTB4MDAwMCwgICAgIC8qIFI5ICovCisJMHgwMEZGLCAgICAgLyogUjEwIC0gTGVmdCBEQUMgdm9sdW1lICovCisJMHgwMEZGLCAgICAgLyogUjExIC0gUmlnaHQgREFDIHZvbHVtZSAqLworCTB4MDAwRiwgICAgIC8qIFIxMiAtIEJhc3MgY29udHJvbCAqLworCTB4MDAwRiwgICAgIC8qIFIxMyAtIFRyZWJsZSBjb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE0ICovCisJMHgwMDAwLCAgICAgLyogUjE1IC0gUmVzZXQgKi8KKwkweDAwMDAsICAgICAvKiBSMTYgKi8KKwkweDAwMDAsICAgICAvKiBSMTcgKi8KKwkweDAwMDAsICAgICAvKiBSMTggKi8KKwkweDAwMDAsICAgICAvKiBSMTkgKi8KKwkweDAwMDAsICAgICAvKiBSMjAgKi8KKwkweDAwMDAsICAgICAvKiBSMjEgKi8KKwkweDAwMDAsICAgICAvKiBSMjIgKi8KKwkweDAwQzEsICAgICAvKiBSMjMgLSBBZGRpdGlvbmFsIGNvbnRyb2wgKDEpICovCisJMHgwMDAwLCAgICAgLyogUjI0IC0gQWRkaXRpb25hbCBjb250cm9sICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFIyNSAtIFBvd2VyIE1hbmFnZW1lbnQgKDEpICovCisJMHgwMDAwLCAgICAgLyogUjI2IC0gUG93ZXIgTWFuYWdlbWVudCAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSMjcgLSBBZGRpdGlvbmFsIENvbnRyb2wgKDMpICovCisJMHgwMDAwLCAgICAgLyogUjI4ICovCisJMHgwMDAwLCAgICAgLyogUjI5ICovCisJMHgwMDAwLCAgICAgLyogUjMwICovCisJMHgwMDAwLCAgICAgLyogUjMxICovCisJMHgwMDAwLCAgICAgLyogUjMyICovCisJMHgwMDAwLCAgICAgLyogUjMzICovCisJMHgwMDUwLCAgICAgLyogUjM0IC0gTGVmdCBvdXQgTWl4ICgxKSAqLworCTB4MDA1MCwgICAgIC8qIFIzNSAtIExlZnQgb3V0IE1peCAoMikgKi8KKwkweDAwNTAsICAgICAvKiBSMzYgLSBSaWdodCBvdXQgTWl4ICgxKSAqLworCTB4MDA1MCwgICAgIC8qIFIzNyAtIFJpZ2h0IE91dCBNaXggKDIpICovCisJMHgwMDUwLCAgICAgLyogUjM4IC0gTW9ubyBvdXQgTWl4ICgxKSAqLworCTB4MDA1MCwgICAgIC8qIFIzOSAtIE1vbm8gb3V0IE1peCAoMikgKi8KKwkweDAwNzksICAgICAvKiBSNDAgLSBMT1VUMiB2b2x1bWUgKi8KKwkweDAwNzksICAgICAvKiBSNDEgLSBST1VUMiB2b2x1bWUgKi8KKwkweDAwNzksICAgICAvKiBSNDIgLSBNT05PT1VUIHZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFI0MyAtIENsb2NraW5nIC8gUExMICovCisJMHgwMTAzLCAgICAgLyogUjQ0IC0gUExMIENvbnRyb2wgMSAqLworCTB4MDAyNCwgICAgIC8qIFI0NSAtIFBMTCBDb250cm9sIDIgKi8KKwkweDAxQkEsICAgICAvKiBSNDYgLSBQTEwgQ29udHJvbCAzICovCisJMHgwMDAwLCAgICAgLyogUjQ3ICovCisJMHgwMDAwLCAgICAgLyogUjQ4ICovCisJMHgwMDAwLCAgICAgLyogUjQ5ICovCisJMHgwMDAwLCAgICAgLyogUjUwICovCisJMHgwMDAwLCAgICAgLyogUjUxICovCisJMHgwMDAwLCAgICAgLyogUjUyICovCisJMHgwMDAwLCAgICAgLyogUjUzICovCisJMHgwMDAwLCAgICAgLyogUjU0ICovCisJMHgwMDAwLCAgICAgLyogUjU1ICovCisJMHgwMDAwLCAgICAgLyogUjU2ICovCisJMHgwMDAwLCAgICAgLyogUjU3ICovCisJMHgwMDAwLCAgICAgLyogUjU4ICovCisJMHgwMDAwLCAgICAgLyogUjU5IC0gUExMIENvbnRyb2wgNCAqLworfTsKKworc3RhdGljIGludCB3bTg5NTVfcmVzZXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NTVfUkVTRVQsIDApOworfQorCitzdHJ1Y3QgcGxsX2ZhY3RvcnMgeworCWludCBuOworCWludCBrOworCWludCBvdXRkaXY7Cit9OworCisvKiBUaGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSBGTEwgZGl2aWRlIG11bHRpcGxpZWQgYnkgMTAKKyAqIHRvIGFsbG93IHJvdW5kaW5nIGxhdGVyICovCisjZGVmaW5lIEZJWEVEX0ZMTF9TSVpFICgoMSA8PCAyMikgKiAxMCkKKworc3RhdGljIGludCB3bTg5OTVfcGxsX2ZhY3RvcnMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgaW50IEZyZWYsIGludCBGb3V0LCBzdHJ1Y3QgcGxsX2ZhY3RvcnMgKnBsbCkKK3sKKwl1NjQgS3BhcnQ7CisJdW5zaWduZWQgaW50IEssIE5kaXYsIE5tb2QsIHRhcmdldDsKKworCWRldl9kYmcoZGV2LCAiRnJlZj0ldSBGb3V0PSV1XG4iLCBGcmVmLCBGb3V0KTsKKworCS8qIFRoZSBvc2NpbGF0b3Igc2hvdWxkIHJ1biBhdCBzaG91bGQgYmUgOTAtMTAwTUh6LCBhbmQKKwkgKiB0aGVyZSdzIGEgZGl2aWRlIGJ5IDQgcGx1cyBhbiBvcHRpb25hbCBkaXZpZGUgYnkgMiBpbiB0aGUKKwkgKiBvdXRwdXQgcGF0aCB0byBnZW5lcmF0ZSB0aGUgc3lzdGVtIGNsb2NrLiAgVGhlIGNsb2NrIHRhYmxlCisJICogaXMgc29ydGQgc28gd2Ugc2hvdWxkIGFsd2F5cyBnZW5lcmF0ZSBhIHN1aXRhYmxlIHRhcmdldC4gKi8KKwl0YXJnZXQgPSBGb3V0ICogNDsKKwlpZiAodGFyZ2V0IDwgOTAwMDAwMDApIHsKKwkJcGxsLT5vdXRkaXYgPSAxOworCQl0YXJnZXQgKj0gMjsKKwl9IGVsc2UgeworCQlwbGwtPm91dGRpdiA9IDA7CisJfQorCisJV0FSTl9PTih0YXJnZXQgPCA5MDAwMDAwMCB8fCB0YXJnZXQgPiAxMDAwMDAwMDApOworCisJZGV2X2RiZyhkZXYsICJGdmNvPSVkSHpcbiIsIHRhcmdldCk7CisKKwkvKiBOb3csIGNhbGN1bGF0ZSBOLksgKi8KKwlOZGl2ID0gdGFyZ2V0IC8gRnJlZjsKKworCXBsbC0+biA9IE5kaXY7CisJTm1vZCA9IHRhcmdldCAlIEZyZWY7CisJZGV2X2RiZyhkZXYsICJObW9kPSVkXG4iLCBObW9kKTsKKworCS8qIENhbGN1bGF0ZSBmcmFjdGlvbmFsIHBhcnQgLSBzY2FsZSB1cCBzbyB3ZSBjYW4gcm91bmQuICovCisJS3BhcnQgPSBGSVhFRF9GTExfU0laRSAqIChsb25nIGxvbmcpTm1vZDsKKworCWRvX2RpdihLcGFydCwgRnJlZik7CisKKwlLID0gS3BhcnQgJiAweEZGRkZGRkZGOworCisJaWYgKChLICUgMTApID49IDUpCisJCUsgKz0gNTsKKworCS8qIE1vdmUgZG93biB0byBwcm9wZXIgcmFuZ2Ugbm93IHJvdW5kaW5nIGlzIGRvbmUgKi8KKwlwbGwtPmsgPSBLIC8gMTA7CisKKwlkZXZfZGJnKGRldiwgIk49JXggSz0leCBPVVRESVY9JXhcbiIsIHBsbC0+biwgcGxsLT5rLCBwbGwtPm91dGRpdik7CisKKwlyZXR1cm4gMDsKK30KKworLyogTG9va3VwIHRhYmxlIHNwZWNpZml5aW5nIFNSQVRFICh0YWJsZSAyNSBpbiBkYXRhc2hlZXQpOyBzb21lIG9mIHRoZQorICogb3V0cHV0IGZyZXF1ZW5jaWVzIGhhdmUgYmVlbiByb3VuZGVkIHRvIHRoZSBzdGFuZGFyZCBmcmVxdWVuY2llcworICogdGhleSBhcmUgaW50ZW5kZWQgdG8gbWF0Y2ggd2hlcmUgdGhlIGVycm9yIGlzIHNsaWdodC4gKi8KK3N0YXRpYyBzdHJ1Y3QgeworCWludCBtY2xrOworCWludCBmczsKKwlpbnQgdXNiOworCWludCBzcjsKK30gY2xvY2tfY2Znc1tdID0geworCXsgMTg0MzIwMDAsICA4MDAwLCAwLCAgMywgfSwKKwl7IDE4NDMyMDAwLCAxMjAwMCwgMCwgIDksIH0sCisJeyAxODQzMjAwMCwgMTYwMDAsIDAsIDExLCB9LAorCXsgMTg0MzIwMDAsIDI0MDAwLCAwLCAyOSwgfSwKKwl7IDE4NDMyMDAwLCAzMjAwMCwgMCwgMTMsIH0sCisJeyAxODQzMjAwMCwgNDgwMDAsIDAsICAxLCB9LAorCXsgMTg0MzIwMDAsIDk2MDAwLCAwLCAxNSwgfSwKKworCXsgMTY5MzQ0MDAsICA4MDE4LCAwLCAxOSwgfSwKKwl7IDE2OTM0NDAwLCAxMTAyNSwgMCwgMjUsIH0sCisJeyAxNjkzNDQwMCwgMjIwNTAsIDAsIDI3LCB9LAorCXsgMTY5MzQ0MDAsIDQ0MTAwLCAwLCAxNywgfSwKKwl7IDE2OTM0NDAwLCA4ODIwMCwgMCwgMzEsIH0sCisKKwl7IDEyMDAwMDAwLCAgODAwMCwgMSwgIDIsIH0sCisJeyAxMjAwMDAwMCwgMTEwMjUsIDEsIDI1LCB9LAorCXsgMTIwMDAwMDAsIDEyMDAwLCAxLCAgOCwgfSwKKwl7IDEyMDAwMDAwLCAxNjAwMCwgMSwgMTAsIH0sCisJeyAxMjAwMDAwMCwgMjIwNTAsIDEsIDI3LCB9LAorCXsgMTIwMDAwMDAsIDI0MDAwLCAxLCAyOCwgfSwKKwl7IDEyMDAwMDAwLCAzMjAwMCwgMSwgMTIsIH0sCisJeyAxMjAwMDAwMCwgNDQxMDAsIDEsIDE3LCB9LAorCXsgMTIwMDAwMDAsIDQ4MDAwLCAxLCAgMCwgfSwKKwl7IDEyMDAwMDAwLCA4ODIwMCwgMSwgMzEsIH0sCisJeyAxMjAwMDAwMCwgOTYwMDAsIDEsIDE0LCB9LAorCisJeyAxMjI4ODAwMCwgIDgwMDAsIDAsICAyLCB9LAorCXsgMTIyODgwMDAsIDEyMDAwLCAwLCAgOCwgfSwKKwl7IDEyMjg4MDAwLCAxNjAwMCwgMCwgMTAsIH0sCisJeyAxMjI4ODAwMCwgMjQwMDAsIDAsIDI4LCB9LAorCXsgMTIyODgwMDAsIDMyMDAwLCAwLCAxMiwgfSwKKwl7IDEyMjg4MDAwLCA0ODAwMCwgMCwgIDAsIH0sCisJeyAxMjI4ODAwMCwgOTYwMDAsIDAsIDE0LCB9LAorCisJeyAxMjI4OTYwMCwgIDgwMTgsIDAsIDE4LCB9LAorCXsgMTIyODk2MDAsIDExMDI1LCAwLCAyNCwgfSwKKwl7IDEyMjg5NjAwLCAyMjA1MCwgMCwgMjYsIH0sCisJeyAxMTI4OTYwMCwgNDQxMDAsIDAsIDE2LCB9LAorCXsgMTEyODk2MDAsIDg4MjAwLCAwLCAzMSwgfSwKK307CisKK3N0YXRpYyBpbnQgd204OTU1X2NvbmZpZ3VyZV9jbG9ja2luZyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODk1NV9wcml2ICp3bTg5NTUgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBpLCByZXQsIHZhbDsKKwlpbnQgY2xvY2tpbmcgPSAwOworCWludCBzcmF0ZSA9IDA7CisJaW50IHNyID0gLTE7CisJc3RydWN0IHBsbF9mYWN0b3JzIHBsbDsKKworCS8qIElmIHdlJ3JlIG5vdCBydW5uaW5nIGEgc2FtcGxlIHJhdGUgY3VycmVudGx5IGp1c3QgcGljayBvbmUgKi8KKwlpZiAod204OTU1LT5mcyA9PSAwKQorCQl3bTg5NTUtPmZzID0gODAwMDsKKworCS8qIENhbiB3ZSBnZW5lcmF0ZSBhbiBleGFjdCBvdXRwdXQ/ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2xvY2tfY2Zncyk7IGkrKykgeworCQlpZiAod204OTU1LT5mcyAhPSBjbG9ja19jZmdzW2ldLmZzKQorCQkJY29udGludWU7CisJCXNyID0gaTsKKworCQlpZiAod204OTU1LT5tY2xrX3JhdGUgPT0gY2xvY2tfY2Znc1tpXS5tY2xrKQorCQkJYnJlYWs7CisJfQorCisJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIHdpdGggYW4gdW5zdXBwb3J0ZWQgc2FtcGxlIHJhdGUgKi8KKwlpZiAoc3IgPT0gLTEpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiU2FtcGxlIHJhdGUgJWRIeiB1bnN1cHBvcnRlZFxuIiwKKwkJCXdtODk1NS0+ZnMpOworCQlXQVJOX09OKHNyID09IC0xKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGkgPT0gQVJSQVlfU0laRShjbG9ja19jZmdzKSkgeworCQkvKiBJZiB3ZSBjYW4ndCBnZW5lcmF0ZSB0aGUgcmlnaHQgY2xvY2sgZnJvbSBNQ0xLIHRoZW4KKwkJICogd2Ugc2hvdWxkIGNvbmZpZ3VyZSB0aGUgUExMIHRvIHN1cHBseSB1cyB3aXRoIGFuCisJCSAqIGFwcHJvcHJpYXRlIGNsb2NrLgorCQkgKi8KKwkJY2xvY2tpbmcgfD0gV004OTU1X01DTEtTRUw7CisKKwkJLyogVXNlIHRoZSBsYXN0IGRpdmlkZXIgY29uZmlndXJhdGlvbiB3ZSBzYXcgZm9yIHRoZQorCQkgKiBzYW1wbGUgcmF0ZS4gKi8KKwkJcmV0ID0gd204OTk1X3BsbF9mYWN0b3JzKGNvZGVjLT5kZXYsIHdtODk1NS0+bWNsa19yYXRlLAorCQkJCQkgY2xvY2tfY2Znc1tzcl0ubWNsaywgJnBsbCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCSJVbmFibGUgdG8gZ2VuZXJhdGUgJWRIeiBmcm9tICVkSHogTUNMS1xuIiwKKwkJCQl3bTg5NTUtPmZzLCB3bTg5NTUtPm1jbGtfcmF0ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9QTExfQ09OVFJPTF8xLAorCQkJCSAgICBXTTg5NTVfTl9NQVNLIHwgV004OTU1X0tfMjFfMThfTUFTSywKKwkJCQkgICAgKHBsbC5uIDw8IFdNODk1NV9OX1NISUZUKSB8CisJCQkJICAgIHBsbC5rID4+IDE4KTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BMTF9DT05UUk9MXzIsCisJCQkJICAgIFdNODk1NV9LXzE3XzlfTUFTSywKKwkJCQkgICAgKHBsbC5rID4+IDkpICYgV004OTU1X0tfMTdfOV9NQVNLKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BMTF9DT05UUk9MXzIsCisJCQkJICAgIFdNODk1NV9LXzhfMF9NQVNLLAorCQkJCSAgICBwbGwuayAmIFdNODk1NV9LXzhfMF9NQVNLKTsKKwkJaWYgKHBsbC5rKQorCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BMTF9DT05UUk9MXzQsCisJCQkJCSAgICBXTTg5NTVfS0VOLCBXTTg5NTVfS0VOKTsKKwkJZWxzZQorCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BMTF9DT05UUk9MXzQsCisJCQkJCSAgICBXTTg5NTVfS0VOLCAwKTsKKworCQlpZiAocGxsLm91dGRpdikKKwkJCXZhbCA9IFdNODk1NV9QTExfUkIgfCBXTTg5NTVfUExMT1VURElWMjsKKwkJZWxzZQorCQkJdmFsID0gV004OTU1X1BMTF9SQjsKKworCQkvKiBOb3cgc3RhcnQgdGhlIFBMTCBydW5uaW5nICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9DTE9DS0lOR19QTEwsCisJCQkJICAgIFdNODk1NV9QTExfUkIgfCBXTTg5NTVfUExMT1VURElWMiwgdmFsKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0NMT0NLSU5HX1BMTCwKKwkJCQkgICAgV004OTU1X1BMTEVOLCBXTTg5NTVfUExMRU4pOworCX0KKworCXNyYXRlID0gY2xvY2tfY2Znc1tzcl0udXNiIHwgKGNsb2NrX2NmZ3Nbc3JdLnNyIDw8IFdNODk1NV9TUl9TSElGVCk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfU0FNUExFX1JBVEUsCisJCQkgICAgV004OTU1X1VTQiB8IFdNODk1NV9TUl9NQVNLLCBzcmF0ZSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0NMT0NLSU5HX1BMTCwKKwkJCSAgICBXTTg5NTVfTUNMS1NFTCwgY2xvY2tpbmcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTU1X3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCWludCByZXQgPSAwOworCisJLyogQWx3YXlzIGRpc2FibGUgdGhlIGNsb2NrcyAtIGlmIHdlJ3JlIGRvaW5nIHJlY29uZmlndXJhdGlvbiB0aGlzCisJICogYXZvaWRzIG1pc2Nsb2NraW5nLgorCSAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkgICAgV004OTU1X0RJR0VOQiwgMCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0NMT0NLSU5HX1BMTCwKKwkJCSAgICBXTTg5NTVfUExMX1JCIHwgV004OTU1X1BMTEVOLCAwKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKKwkJcmV0ID0gd204OTU1X2NvbmZpZ3VyZV9jbG9ja2luZyhjb2RlYyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGVlbXBoX3NldHRpbmdzW10gPSB7IDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfTsKKworc3RhdGljIGludCB3bTg5NTVfc2V0X2RlZW1waChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODk1NV9wcml2ICp3bTg5NTUgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCB2YWwsIGksIGJlc3Q7CisKKwkvKiBJZiB3ZSdyZSB1c2luZyBkZWVtcGhhc2lzIHNlbGVjdCB0aGUgbmVhcmVzdCBhdmFpbGFibGUgc2FtcGxlCisJICogcmF0ZS4KKwkgKi8KKwlpZiAod204OTU1LT5kZWVtcGgpIHsKKwkJYmVzdCA9IDE7CisJCWZvciAoaSA9IDI7IGkgPCBBUlJBWV9TSVpFKGRlZW1waF9zZXR0aW5ncyk7IGkrKykgeworCQkJaWYgKGFicyhkZWVtcGhfc2V0dGluZ3NbaV0gLSB3bTg5NTUtPmZzKSA8CisJCQkgICAgYWJzKGRlZW1waF9zZXR0aW5nc1tiZXN0XSAtIHdtODk1NS0+ZnMpKQorCQkJCWJlc3QgPSBpOworCQl9CisKKwkJdmFsID0gYmVzdCA8PCBXTTg5NTVfREVFTVBIX1NISUZUOworCX0gZWxzZSB7CisJCXZhbCA9IDA7CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU2V0IGRlZW1waGFzaXMgJWRcbiIsIHZhbCk7CisKKwlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0RBQ19DT05UUk9MLAorCQkJCSAgIFdNODk1NV9ERUVNUEhfTUFTSywgdmFsKTsKK30KKworc3RhdGljIGludCB3bTg5NTVfZ2V0X2RlZW1waChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5NTVfcHJpdiAqd204OTU1ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiB3bTg5NTUtPmRlZW1waDsKK30KKworc3RhdGljIGludCB3bTg5NTVfcHV0X2RlZW1waChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5NTVfcHJpdiAqd204OTU1ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgZGVlbXBoID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKworCWlmIChkZWVtcGggPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdtODk1NS0+ZGVlbXBoID0gZGVlbXBoOworCisJcmV0dXJuIHdtODk1NV9zZXRfZGVlbXBoKGNvZGVjKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmJhc3NfbW9kZV90ZXh0W10gPSB7CisJIkxpbmVhciIsICJBZGFwdGl2ZSIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGJhc3NfbW9kZSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk1NV9CQVNTX0NPTlRST0wsIDcsIDIsIGJhc3NfbW9kZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmJhc3NfY3V0b2ZmX3RleHRbXSA9IHsKKwkiTG93IiwgIkhpZ2giCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGJhc3NfY3V0b2ZmID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTU1X0JBU1NfQ09OVFJPTCwgNiwgMiwgYmFzc19jdXRvZmZfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICp0cmVibGVfY3V0b2ZmX3RleHRbXSA9IHsKKwkiSGlnaCIsICJMb3ciCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHRyZWJsZV9jdXRvZmYgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5NTVfVFJFQkxFX0NPTlRST0wsIDYsIDIsIHRyZWJsZV9jdXRvZmZfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkaWdpdGFsX3RsdiwgLTEyNzUwLCA1MCwgMSk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoYXR0ZW5fdGx2LCAtNjAwLCA2MDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGJ5cGFzc190bHYsIC0xNTAwLCAzMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG1vbm9fdGx2LCAtMjEwMCwgMzAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShvdXRfdGx2LCAtMTIxMDAsIDEwMCwgMSk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUodHJlYmxlX3RsdiwgLTEyMDAsIDE1MCwgMSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NTVfc25kX2NvbnRyb2xzW10gPSB7CitTT0NfRE9VQkxFX1JfVExWKCJEaWdpdGFsIFBsYXliYWNrIFZvbHVtZSIsIFdNODk1NV9MRUZUX0RBQ19WT0xVTUUsCisJCSBXTTg5NTVfUklHSFRfREFDX1ZPTFVNRSwgMCwgMjU1LCAwLCBkaWdpdGFsX3RsdiksCitTT0NfU0lOR0xFX1RMVigiUGxheWJhY2sgQXR0ZW51YXRpb24gVm9sdW1lIiwgV004OTU1X0RBQ19DT05UUk9MLCA3LCAxLCAxLAorCSAgICAgICBhdHRlbl90bHYpLAorU09DX1NJTkdMRV9CT09MX0VYVCgiREFDIERlZW1waGFzaXMgU3dpdGNoIiwgMCwKKwkJICAgIHdtODk1NV9nZXRfZGVlbXBoLCB3bTg5NTVfcHV0X2RlZW1waCksCisKK1NPQ19FTlVNKCJCYXNzIE1vZGUiLCBiYXNzX21vZGUpLAorU09DX0VOVU0oIkJhc3MgQ3V0b2ZmIiwgYmFzc19jdXRvZmYpLAorU09DX1NJTkdMRSgiQmFzcyBWb2x1bWUiLCBXTTg5NTVfQkFTU19DT05UUk9MLCAwLCAxNSwgMSksCisKK1NPQ19FTlVNKCJUcmVibGUgQ3V0b2ZmIiwgdHJlYmxlX2N1dG9mZiksCitTT0NfU0lOR0xFX1RMVigiVHJlYmxlIFZvbHVtZSIsIFdNODk1NV9UUkVCTEVfQ09OVFJPTCwgMCwgMTQsIDEsIHRyZWJsZV90bHYpLAorCitTT0NfU0lOR0xFX1RMVigiTGVmdCBCeXBhc3MgVm9sdW1lIiwgV004OTU1X0xFRlRfT1VUX01JWF8xLCA0LCA3LCAxLAorCSAgICAgICBieXBhc3NfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJMZWZ0IE1vbm8gVm9sdW1lIiwgV004OTU1X0xFRlRfT1VUX01JWF8yLCA0LCA3LCAxLAorCSAgICAgICBieXBhc3NfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIlJpZ2h0IE1vbm8gVm9sdW1lIiwgV004OTU1X1JJR0hUX09VVF9NSVhfMSwgNCwgNywgMSwKKwkgICAgICAgYnlwYXNzX3RsdiksCitTT0NfU0lOR0xFX1RMVigiUmlnaHQgQnlwYXNzIFZvbHVtZSIsIFdNODk1NV9SSUdIVF9PVVRfTUlYXzIsIDQsIDcsIDEsCisJICAgICAgIGJ5cGFzc190bHYpLAorCisvKiBOb3QgYSBzdGVyZW8gcGFpciBzbyB0aGV5IGxpbmUgdXAgd2l0aCB0aGUgREFQTSBzd2l0Y2hlcyAqLworU09DX1NJTkdMRV9UTFYoIk1vbm8gTGVmdCBCeXBhc3MgVm9sdW1lIiwgV004OTU1X01PTk9fT1VUX01JWF8xLCA0LCA3LCAxLAorCSAgICAgICBtb25vX3RsdiksCitTT0NfU0lOR0xFX1RMVigiTW9ubyBSaWdodCBCeXBhc3MgVm9sdW1lIiwgV004OTU1X01PTk9fT1VUX01JWF8yLCA0LCA3LCAxLAorCSAgICAgICBtb25vX3RsdiksCisKK1NPQ19ET1VCTEVfUl9UTFYoIkhlYWRwaG9uZSBWb2x1bWUiLCBXTTg5NTVfTE9VVDFfVk9MVU1FLAorCQkgV004OTU1X1JPVVQxX1ZPTFVNRSwgMCwgMTI3LCAwLCBvdXRfdGx2KSwKK1NPQ19ET1VCTEVfUigiSGVhZHBob25lIFpDIFN3aXRjaCIsIFdNODk1NV9MT1VUMV9WT0xVTUUsCisJICAgICBXTTg5NTVfUk9VVDFfVk9MVU1FLCA3LCAxLCAwKSwKKworU09DX0RPVUJMRV9SX1RMVigiU3BlYWtlciBWb2x1bWUiLCBXTTg5NTVfTE9VVDJfVk9MVU1FLAorCQkgV004OTU1X1JPVVQyX1ZPTFVNRSwgMCwgMTI3LCAwLCBvdXRfdGx2KSwKK1NPQ19ET1VCTEVfUigiU3BlYWtlciBaQyBTd2l0Y2giLCBXTTg5NTVfTE9VVDJfVk9MVU1FLAorCSAgICAgV004OTU1X1JPVVQyX1ZPTFVNRSwgNywgMSwgMCksCisKK1NPQ19TSU5HTEVfVExWKCJNb25vIFZvbHVtZSIsIFdNODk1NV9NT05PT1VUX1ZPTFVNRSwgMCwgMTI3LCAwLCBvdXRfdGx2KSwKK1NPQ19TSU5HTEUoIk1vbm8gWkMgU3dpdGNoIiwgV004OTU1X01PTk9PVVRfVk9MVU1FLCA3LCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsbWl4ZXJbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUGxheWJhY2sgU3dpdGNoIiwgV004OTU1X0xFRlRfT1VUX01JWF8xLCA4LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQnlwYXNzIFN3aXRjaCIsIFdNODk1NV9MRUZUX09VVF9NSVhfMSwgNywgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IFBsYXliYWNrIFN3aXRjaCIsIFdNODk1NV9MRUZUX09VVF9NSVhfMiwgOCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIk1vbm8gU3dpdGNoIiwgV004OTU1X0xFRlRfT1VUX01JWF8yLCA3LCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBybWl4ZXJbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTGVmdCBQbGF5YmFjayBTd2l0Y2giLCBXTTg5NTVfUklHSFRfT1VUX01JWF8xLCA4LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTW9ubyBTd2l0Y2giLCBXTTg5NTVfUklHSFRfT1VUX01JWF8xLCA3LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUGxheWJhY2sgU3dpdGNoIiwgV004OTU1X1JJR0hUX09VVF9NSVhfMiwgOCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkJ5cGFzcyBTd2l0Y2giLCBXTTg5NTVfUklHSFRfT1VUX01JWF8yLCA3LCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBtbWl4ZXJbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTGVmdCBQbGF5YmFjayBTd2l0Y2giLCBXTTg5NTVfTU9OT19PVVRfTUlYXzEsIDgsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMZWZ0IEJ5cGFzcyBTd2l0Y2giLCBXTTg5NTVfTU9OT19PVVRfTUlYXzEsIDcsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJSaWdodCBQbGF5YmFjayBTd2l0Y2giLCBXTTg5NTVfTU9OT19PVVRfTUlYXzIsIDgsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJSaWdodCBCeXBhc3MgU3dpdGNoIiwgV004OTU1X01PTk9fT1VUX01JWF8yLCA3LCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5NTVfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fSU5QVVQoIk1PTk9JTi0iKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiTU9OT0lOKyIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJMSU5FSU5SIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkxJTkVJTkwiKSwKKworU05EX1NPQ19EQVBNX1BHQSgiTW9ubyBJbnB1dCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9TVVBQTFkoIlNZU0NMSyIsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzEsIDAsIDEsIHdtODk1NV9zeXNjbGssCisJCSAgICBTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCitTTkRfU09DX0RBUE1fU1VQUExZKCJUU0RFTiIsIFdNODk1NV9BRERJVElPTkFMX0NPTlRST0xfMSwgOCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9EQUMoIkRBQ0wiLCAiUGxheWJhY2siLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8yLCA4LCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQ1IiLCAiUGxheWJhY2siLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8yLCA3LCAwKSwKKworU05EX1NPQ19EQVBNX1BHQSgiTE9VVDEgUEdBIiwgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMiwgNiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJST1VUMSBQR0EiLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8yLCA1LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkxPVVQyIFBHQSIsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzIsIDQsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiUk9VVDIgUEdBIiwgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMiwgMywgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJNT1VUIFBHQSIsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzIsIDIsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiT1VUMyBQR0EiLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8yLCAxLCAwLCBOVUxMLCAwKSwKKworLyogVGhlIG5hbWVzIGFyZSBjaG9zZW4gdG8gbWFrZSB0aGUgY29udHJvbCBuYW1lcyBuaWNlICovCitTTkRfU09DX0RBUE1fTUlYRVIoIkxlZnQiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAgIGxtaXhlciwgQVJSQVlfU0laRShsbWl4ZXIpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiUmlnaHQiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAgIHJtaXhlciwgQVJSQVlfU0laRShybWl4ZXIpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiTW9ubyIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgbW1peGVyLCBBUlJBWV9TSVpFKG1taXhlcikpLAorCitTTkRfU09DX0RBUE1fT1VUUFVUKCJMT1VUMSIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiUk9VVDEiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkxPVVQyIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJST1VUMiIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiTU9OT09VVCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiT1VUMyIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTU1X2ludGVyY29uW10gPSB7CisJeyAiREFDTCIsIE5VTEwsICJTWVNDTEsiIH0sCisJeyAiREFDUiIsIE5VTEwsICJTWVNDTEsiIH0sCisKKwl7ICJNb25vIElucHV0IiwgTlVMTCwgIk1PTk9JTi0iIH0sCisJeyAiTW9ubyBJbnB1dCIsIE5VTEwsICJNT05PSU4rIiB9LAorCisJeyAiTGVmdCIsICJQbGF5YmFjayBTd2l0Y2giLCAiREFDTCIgfSwKKwl7ICJMZWZ0IiwgIlJpZ2h0IFBsYXliYWNrIFN3aXRjaCIsICJEQUNSIiB9LAorCXsgIkxlZnQiLCAiQnlwYXNzIFN3aXRjaCIsICJMSU5FSU5MIiB9LAorCXsgIkxlZnQiLCAiTW9ubyBTd2l0Y2giLCAiTW9ubyBJbnB1dCIgfSwKKworCXsgIlJpZ2h0IiwgIlBsYXliYWNrIFN3aXRjaCIsICJEQUNSIiB9LAorCXsgIlJpZ2h0IiwgIkxlZnQgUGxheWJhY2sgU3dpdGNoIiwgIkRBQ0wiIH0sCisJeyAiUmlnaHQiLCAiQnlwYXNzIFN3aXRjaCIsICJMSU5FSU5SIiB9LAorCXsgIlJpZ2h0IiwgIk1vbm8gU3dpdGNoIiwgIk1vbm8gSW5wdXQiIH0sCisKKwl7ICJNb25vIiwgIkxlZnQgUGxheWJhY2sgU3dpdGNoIiwgIkRBQ0wiIH0sCisJeyAiTW9ubyIsICJSaWdodCBQbGF5YmFjayBTd2l0Y2giLCAiREFDUiIgfSwKKwl7ICJNb25vIiwgIkxlZnQgQnlwYXNzIFN3aXRjaCIsICJMSU5FSU5MIiB9LAorCXsgIk1vbm8iLCAiUmlnaHQgQnlwYXNzIFN3aXRjaCIsICJMSU5FSU5SIiB9LAorCisJeyAiTE9VVDEgUEdBIiwgTlVMTCwgIkxlZnQiIH0sCisJeyAiTE9VVDEiLCBOVUxMLCAiVFNERU4iIH0sCisJeyAiTE9VVDEiLCBOVUxMLCAiTE9VVDEgUEdBIiB9LAorCisJeyAiUk9VVDEgUEdBIiwgTlVMTCwgIlJpZ2h0IiB9LAorCXsgIlJPVVQxIiwgTlVMTCwgIlRTREVOIiB9LAorCXsgIlJPVVQxIiwgTlVMTCwgIlJPVVQxIFBHQSIgfSwKKworCXsgIkxPVVQyIFBHQSIsIE5VTEwsICJMZWZ0IiB9LAorCXsgIkxPVVQyIiwgTlVMTCwgIlRTREVOIiB9LAorCXsgIkxPVVQyIiwgTlVMTCwgIkxPVVQyIFBHQSIgfSwKKworCXsgIlJPVVQyIFBHQSIsIE5VTEwsICJSaWdodCIgfSwKKwl7ICJST1VUMiIsIE5VTEwsICJUU0RFTiIgfSwKKwl7ICJST1VUMiIsIE5VTEwsICJST1VUMiBQR0EiIH0sCisKKwl7ICJNT1VUIFBHQSIsIE5VTEwsICJNb25vIiB9LAorCXsgIk1PTk9PVVQiLCBOVUxMLCAiTU9VVCBQR0EiIH0sCisKKwkvKiBPVVQzIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQgKi8KKwl7ICJPVVQzIiwgTlVMTCwgIk9VVDMgUEdBIiB9LAorfTsKKworc3RhdGljIGludCB3bTg5NTVfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5NTVfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKHdtODk1NV9zbmRfY29udHJvbHMpKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODk1NV9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODk1NV9kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCB3bTg5NTVfaW50ZXJjb24sCisJCQkJQVJSQVlfU0laRSh3bTg5NTVfaW50ZXJjb24pKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk1NV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTU1X3ByaXYgKndtODk1NSA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKwlpbnQgd2w7CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCXdsID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCXdsID0gMHg0OworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQl3bCA9IDB4ODsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJd2wgPSAweGM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfQVVESU9fSU5URVJGQUNFLAorCQkJICAgIFdNODk1NV9XTF9NQVNLLCB3bCk7CisKKwl3bTg5NTUtPmZzID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwl3bTg5NTVfc2V0X2RlZW1waChjb2RlYyk7CisKKwkvKiBJZiB0aGUgY2hpcCBpcyBjbG9ja2VkIHRoZW4gZGlzYWJsZSB0aGUgY2xvY2tzIGFuZCBmb3JjZSBhCisJICogcmVjb25maWd1cmF0aW9uLCBvdGhlcndpc2UgREFQTSB3aWxsIHBvd2VyIHVwIHRoZQorCSAqIGNsb2NrcyBmb3IgdXMgbGF0ZXIuICovCisJcmV0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8xKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocmV0ICYgV004OTU1X0RJR0VOQikgeworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICBXTTg5NTVfRElHRU5CLCAwKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0NMT0NLSU5HX1BMTCwKKwkJCQkgICAgV004OTU1X1BMTF9SQiB8IFdNODk1NV9QTExFTiwgMCk7CisKKwkJd204OTU1X2NvbmZpZ3VyZV9jbG9ja2luZyhjb2RlYyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB3bTg5NTVfc2V0X3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IGNsa19pZCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTU1X3ByaXYgKnByaXYgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBkaXY7CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgV004OTU1X0NMS19NQ0xLOgorCQlpZiAoZnJlcSA+IDE1MDAwMDAwKSB7CisJCQlwcml2LT5tY2xrX3JhdGUgPSBmcmVxIC89IDI7CisJCQlkaXYgPSBXTTg5NTVfTUNMS0RJVjI7CisJCX0gZWxzZSB7CisJCQlwcml2LT5tY2xrX3JhdGUgPSBmcmVxOworCQkJZGl2ID0gMDsKKwkJfQorCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9TQU1QTEVfUkFURSwKKwkJCQkgICAgV004OTU1X01DTEtESVYyLCBkaXYpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9kYmcoZGFpLT5kZXYsICJDbG9jayBzb3VyY2UgaXMgJWQgYXQgJXVIelxuIiwgY2xrX2lkLCBmcmVxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk1NV9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJdTE2IGFpZiA9IDA7CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWFpZiB8PSBXTTg5NTVfTVM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQlhaWYgfD0gV004OTU1X0xSUDsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQlhaWYgfD0gMHgzOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJYWlmIHw9IDB4MjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJYWlmIHw9IDB4MTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJLyogZnJhbWUgaW52ZXJzaW9uIG5vdCB2YWxpZCBmb3IgRFNQIG1vZGVzICovCisJCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQkJYWlmIHw9IFdNODk1NV9CQ0xLSU5WOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCQlhaWYgfD0gV004OTU1X0JDTEtJTlYgfCBXTTg5NTVfTFJQOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCQlhaWYgfD0gV004OTU1X0JDTEtJTlY7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKKwkJCWFpZiB8PSBXTTg5NTVfTFJQOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfQVVESU9fSU5URVJGQUNFLAorCQkJICAgIFdNODk1NV9NUyB8IFdNODk1NV9GT1JNQVRfTUFTSyB8IFdNODk1NV9CQ0xLSU5WIHwKKwkJCSAgICBXTTg5NTVfTFJQLCBhaWYpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB3bTg5NTVfZGlnaXRhbF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCBpbnQgbXV0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCWludCB2YWw7CisKKwlpZiAobXV0ZSkKKwkJdmFsID0gV004OTU1X0RBQ01VOworCWVsc2UKKwkJdmFsID0gMDsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9EQUNfQ09OVFJPTCwgV004OTU1X0RBQ01VLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTU1X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3RydWN0IHdtODk1NV9wcml2ICp3bTg5NTUgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZXQsIGk7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJLyogVk1JRCByZXNpc3RhbmNlIDIqNTBrICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJICAgIFdNODk1NV9WTUlEU0VMX01BU0ssCisJCQkJICAgIDB4MSA8PCBXTTg5NTVfVk1JRFNFTF9TSElGVCk7CisKKwkJLyogRGVmYXVsdCBiaWFzIGN1cnJlbnQgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0FERElUSU9OQUxfQ09OVFJPTF8xLAorCQkJCSAgICBXTTg5NTVfVlNFTF9NQVNLLAorCQkJCSAgICAweDIgPDwgV004OTU1X1ZTRUxfU0hJRlQpOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg5NTUtPnN1cHBsaWVzKSwKKwkJCQkJCSAgICB3bTg5NTUtPnN1cHBsaWVzKTsKKwkJCWlmIChyZXQgIT0gMCkgeworCQkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkJIkZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXM6ICVkXG4iLAorCQkJCQlyZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCS8qIFN5bmMgYmFjayBjYWNoZWQgdmFsdWVzIGlmIHRoZXkncmUKKwkJCSAqIGRpZmZlcmVudCBmcm9tIHRoZSBoYXJkd2FyZSBkZWZhdWx0LgorCQkJICovCisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5NTUtPnJlZ19jYWNoZSk7IGkrKykgeworCQkJCWlmIChpID09IFdNODk1NV9SRVNFVCkKKwkJCQkJY29udGludWU7CisKKwkJCQlpZiAod204OTU1LT5yZWdfY2FjaGVbaV0gPT0gd204OTU1X3JlZ1tpXSkKKwkJCQkJY29udGludWU7CisKKwkJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBpLCB3bTg5NTUtPnJlZ19jYWNoZVtpXSk7CisJCQl9CisKKwkJCS8qIEVuYWJsZSBWUkVGIGFuZCBWTUlEICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCQkgICAgV004OTU1X1ZSRUYgfAorCQkJCQkgICAgV004OTU1X1ZNSURTRUxfTUFTSywKKwkJCQkJICAgIFdNODk1NV9WUkVGIHwKKwkJCQkJICAgIDB4MyA8PCBXTTg5NTVfVlJFRl9TSElGVCk7CisKKwkJCS8qIExldCBWTUlEIHJhbXAgKi8KKwkJCW1zbGVlcCg1MDApOworCisJCQkvKiBIaWdoIHJlc2lzdGFuY2UgVlJPSSB0byBtYWludGFpbiBvdXRwdXRzICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLAorCQkJCQkgICAgV004OTU1X0FERElUSU9OQUxfQ09OVFJPTF8zLAorCQkJCQkgICAgV004OTU1X1ZST0ksIFdNODk1NV9WUk9JKTsKKwkJfQorCisJCS8qIE1haW50YWluIFZNSUQgd2l0aCAyKjI1MGsgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgV004OTU1X1ZNSURTRUxfTUFTSywKKwkJCQkgICAgMHgyIDw8IFdNODk1NV9WTUlEU0VMX1NISUZUKTsKKworCQkvKiBNaW5pbXVtIGJpYXMgY3VycmVudCAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfQURESVRJT05BTF9DT05UUk9MXzEsCisJCQkJICAgIFdNODk1NV9WU0VMX01BU0ssIDApOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJLyogTG93IHJlc2lzdGFuY2UgVlJPSSB0byBoZWxwIGRpc2NoYXJnZSAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLAorCQkJCSAgICBXTTg5NTVfQURESVRJT05BTF9DT05UUk9MXzMsCisJCQkJICAgIFdNODk1NV9WUk9JLCAwKTsKKworCQkvKiBUdXJuIG9mZiBWTUlEIGFuZCBWUkVGICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJICAgIFdNODk1NV9WUkVGIHwKKwkJCQkgICAgV004OTU1X1ZNSURTRUxfTUFTSywgMCk7CisKKwkJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODk1NS0+c3VwcGxpZXMpLAorCQkJCSAgICAgICB3bTg5NTUtPnN1cHBsaWVzKTsKKwkJYnJlYWs7CisJfQorCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgV004OTU1X1JBVEVTIFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKKworI2RlZmluZSBXTTg5NTVfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODk1NV9kYWlfb3BzID0geworCS5zZXRfc3lzY2xrID0gd204OTU1X3NldF9zeXNjbGssCisJLnNldF9mbXQgPSB3bTg5NTVfc2V0X2ZtdCwKKwkuaHdfcGFyYW1zID0gd204OTU1X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlID0gd204OTU1X2RpZ2l0YWxfbXV0ZSwKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSB3bTg5NTVfZGFpID0geworCS5uYW1lID0gIldNODk1NSIsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFdNODk1NV9SQVRFUywKKwkJLmZvcm1hdHMgPSBXTTg5NTVfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmd204OTU1X2RhaV9vcHMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwod204OTU1X2RhaSk7CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd204OTU1X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODk1NV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NTVfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCisJd204OTU1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHdtODk1NV9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgd204OTU1X3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIGludCB3bTg5NTVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh3bTg5NTVfY29kZWMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb2RlYyBkZXZpY2Ugbm90IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204OTU1X2NvZGVjOworCWNvZGVjID0gd204OTU1X2NvZGVjOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zOiAlZFxuIiwgcmV0KTsKKwkJZ290byBwY21fZXJyOworCX0KKworCXdtODk1NV9hZGRfd2lkZ2V0cyhjb2RlYyk7CisKKwlyZXR1cm4gcmV0OworCitwY21fZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204OTU1X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTU1ID0geworCS5wcm9iZSA9IAl3bTg5NTVfcHJvYmUsCisJLnJlbW92ZSA9IAl3bTg5NTVfcmVtb3ZlLAorCS5zdXNwZW5kID0gCXdtODk1NV9zdXNwZW5kLAorCS5yZXN1bWUgPQl3bTg5NTVfcmVzdW1lLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204OTU1KTsKKworc3RhdGljIGludCB3bTg5NTVfcmVnaXN0ZXIoc3RydWN0IHdtODk1NV9wcml2ICp3bTg5NTUsCisJCQkgICBlbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2wpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204OTU1LT5jb2RlYzsKKwlpbnQgaTsKKworCWlmICh3bTg5NTVfY29kZWMpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQW5vdGhlciBXTTg5NTUgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204OTU1OworCWNvZGVjLT5uYW1lID0gIldNODk1NSI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOworCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODk1NV9zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+ZGFpID0gJndtODk1NV9kYWk7CisJY29kZWMtPm51bV9kYWkgPSAxOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IFdNODk1NV9NQVhfUkVHSVNURVI7CisJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg5NTUtPnJlZ19jYWNoZTsKKworCW1lbWNweShjb2RlYy0+cmVnX2NhY2hlLCB3bTg5NTVfcmVnLCBzaXplb2Yod204OTU1X3JlZykpOworCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDcsIDksIGNvbnRyb2wpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk1NS0+c3VwcGxpZXMpOyBpKyspCisJCXdtODk1NS0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gd204OTU1X3N1cHBseV9uYW1lc1tpXTsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChjb2RlYy0+ZGV2LCBBUlJBWV9TSVpFKHdtODk1NS0+c3VwcGxpZXMpLAorCQkJCSB3bTg5NTUtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3Qgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg5NTUtPnN1cHBsaWVzKSwKKwkJCQkgICAgd204OTU1LT5zdXBwbGllcyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9nZXQ7CisJfQorCisJcmV0ID0gd204OTU1X3Jlc2V0KGNvZGVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9lbmFibGU7CisJfQorCisJd204OTU1X2RhaS5kZXYgPSBjb2RlYy0+ZGV2OworCisJLyogQ2hhbmdlIHNvbWUgZGVmYXVsdCBzZXR0aW5ncyAtIGxhdGNoIFZVIGFuZCBlbmFibGUgWkMgKi8KKwl3bTg5NTUtPnJlZ19jYWNoZVtXTTg5NTVfTEVGVF9EQUNfVk9MVU1FXSB8PSBXTTg5NTVfTERWVTsKKwl3bTg5NTUtPnJlZ19jYWNoZVtXTTg5NTVfUklHSFRfREFDX1ZPTFVNRV0gfD0gV004OTU1X1JEVlU7CisJd204OTU1LT5yZWdfY2FjaGVbV004OTU1X0xPVVQxX1ZPTFVNRV0gfD0gV004OTU1X0xPMVZVIHwgV004OTU1X0xPMVpDOworCXdtODk1NS0+cmVnX2NhY2hlW1dNODk1NV9ST1VUMV9WT0xVTUVdIHw9IFdNODk1NV9STzFWVSB8IFdNODk1NV9STzFaQzsKKwl3bTg5NTUtPnJlZ19jYWNoZVtXTTg5NTVfTE9VVDJfVk9MVU1FXSB8PSBXTTg5NTVfTE8yVlUgfCBXTTg5NTVfTE8yWkM7CisJd204OTU1LT5yZWdfY2FjaGVbV004OTU1X1JPVVQyX1ZPTFVNRV0gfD0gV004OTU1X1JPMlZVIHwgV004OTU1X1JPMlpDOworCXdtODk1NS0+cmVnX2NhY2hlW1dNODk1NV9NT05PT1VUX1ZPTFVNRV0gfD0gV004OTU1X01PWkM7CisKKwkvKiBBbHNvIGVuYWJsZSBhZGFwdGl2ZSBiYXNzIGJvb3N0IGJ5IGRlZmF1bHQgKi8KKwl3bTg5NTUtPnJlZ19jYWNoZVtXTTg5NTVfQkFTU19DT05UUk9MXSB8PSBXTTg5NTVfQkI7CisKKwkvKiBTZXQgcGxhdGZvcm0gZGF0YSB2YWx1ZXMgKi8KKwlpZiAod204OTU1LT5wZGF0YSkgeworCQlpZiAod204OTU1LT5wZGF0YS0+b3V0Ml9zcGVha2VyKQorCQkJd204OTU1LT5yZWdfY2FjaGVbV004OTU1X0FERElUSU9OQUxfQ09OVFJPTF8yXQorCQkJCXw9IFdNODk1NV9ST1VUMklOVjsKKworCQlpZiAod204OTU1LT5wZGF0YS0+bW9ub2luX2RpZmYpCisJCQl3bTg5NTUtPnJlZ19jYWNoZVtXTTg5NTVfTU9OT19PVVRfTUlYXzFdCisJCQkJfD0gV004OTU1X0RNRU47CisJfQorCisJd204OTU1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwkvKiBCaWFzIGxldmVsIGNvbmZpZ3VyYXRpb24gd2lsbCBoYXZlIGRvbmUgYW4gZXh0cmEgZW5hYmxlICovCisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODk1NS0+c3VwcGxpZXMpLCB3bTg5NTUtPnN1cHBsaWVzKTsKKworCXdtODk1NV9jb2RlYyA9IGNvZGVjOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJndtODk1NV9kYWkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2VuYWJsZToKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTU1LT5zdXBwbGllcyksIHdtODk1NS0+c3VwcGxpZXMpOworZXJyX2dldDoKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204OTU1LT5zdXBwbGllcyksIHdtODk1NS0+c3VwcGxpZXMpOworZXJyOgorCWtmcmVlKHdtODk1NSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd204OTU1X3VucmVnaXN0ZXIoc3RydWN0IHdtODk1NV9wcml2ICp3bTg5NTUpCit7CisJd204OTU1X3NldF9iaWFzX2xldmVsKCZ3bTg5NTUtPmNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204OTU1LT5zdXBwbGllcyksIHdtODk1NS0+c3VwcGxpZXMpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODk1NV9kYWkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204OTU1LT5jb2RlYyk7CisJa2ZyZWUod204OTU1KTsKKwl3bTg5NTVfY29kZWMgPSBOVUxMOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorc3RhdGljIF9fZGV2aW5pdCBpbnQgd204OTU1X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgd204OTU1X3ByaXYgKndtODk1NTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisKKwl3bTg5NTUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204OTU1X3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204OTU1ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY29kZWMgPSAmd204OTU1LT5jb2RlYzsKKwljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB3bTg5NTUpOworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CisJd204OTU1LT5wZGF0YSA9IGkyYy0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OworCisJcmV0dXJuIHdtODk1NV9yZWdpc3Rlcih3bTg5NTUsIFNORF9TT0NfSTJDKTsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTU1X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgd204OTU1X3ByaXYgKndtODk1NSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXdtODk1NV91bnJlZ2lzdGVyKHdtODk1NSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg5NTVfaTJjX2lkW10gPSB7CisJeyAid204OTU1IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg5NTVfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODk1NV9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIndtODk1NSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gICAgd204OTU1X2kyY19wcm9iZSwKKwkucmVtb3ZlID0gICBfX2RldmV4aXRfcCh3bTg5NTVfaTJjX3JlbW92ZSksCisJLmlkX3RhYmxlID0gd204OTU1X2kyY19pZCwKK307CisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgd204OTU1X21vZGluaXQodm9pZCkKK3sKKwlpbnQgcmV0OworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204OTU1X2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBXTTg5NTUgSTJDIGRyaXZlcjogJWRcbiIsCisJCSAgICAgICByZXQpOworCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorbW9kdWxlX2luaXQod204OTU1X21vZGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204OTU1X2V4aXQodm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9kcml2ZXIoJndtODk1NV9pMmNfZHJpdmVyKTsKKyNlbmRpZgorfQorbW9kdWxlX2V4aXQod204OTU1X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV004OTU1IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5NTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTM0OWM4Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NTUuaApAQCAtMCwwICsxLDQ4OSBAQAorLyoKKyAqIHdtODk1NS5oICAtLSAgV004OTA0IEFTb0MgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzLCBwbGMKKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfV004OTU1X0gKKyNkZWZpbmUgX1dNODk1NV9ICisKKyNkZWZpbmUgV004OTU1X0NMS19NQ0xLIDEKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg5NTVfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk1NTsKKworLyoKKyAqIFJlZ2lzdGVyIHZhbHVlcy4KKyAqLworI2RlZmluZSBXTTg5NTVfTE9VVDFfVk9MVU1FICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBXTTg5NTVfUk9VVDFfVk9MVU1FICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBXTTg5NTVfREFDX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBXTTg5NTVfQVVESU9fSU5URVJGQUNFICAgICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBXTTg5NTVfU0FNUExFX1JBVEUgICAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBXTTg5NTVfTEVGVF9EQUNfVk9MVU1FICAgICAgICAgICAgICAgICAgMHgwQQorI2RlZmluZSBXTTg5NTVfUklHSFRfREFDX1ZPTFVNRSAgICAgICAgICAgICAgICAgMHgwQgorI2RlZmluZSBXTTg5NTVfQkFTU19DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHgwQworI2RlZmluZSBXTTg5NTVfVFJFQkxFX0NPTlRST0wgICAgICAgICAgICAgICAgICAgMHgwRAorI2RlZmluZSBXTTg5NTVfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRgorI2RlZmluZSBXTTg5NTVfQURESVRJT05BTF9DT05UUk9MXzEgICAgICAgICAgICAgMHgxNworI2RlZmluZSBXTTg5NTVfQURESVRJT05BTF9DT05UUk9MXzIgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8xICAgICAgICAgICAgICAgMHgxOQorI2RlZmluZSBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8yICAgICAgICAgICAgICAgMHgxQQorI2RlZmluZSBXTTg5NTVfQURESVRJT05BTF9DT05UUk9MXzMgICAgICAgICAgICAgMHgxQgorI2RlZmluZSBXTTg5NTVfTEVGVF9PVVRfTUlYXzEgICAgICAgICAgICAgICAgICAgMHgyMgorI2RlZmluZSBXTTg5NTVfTEVGVF9PVVRfTUlYXzIgICAgICAgICAgICAgICAgICAgMHgyMworI2RlZmluZSBXTTg5NTVfUklHSFRfT1VUX01JWF8xICAgICAgICAgICAgICAgICAgMHgyNAorI2RlZmluZSBXTTg5NTVfUklHSFRfT1VUX01JWF8yICAgICAgICAgICAgICAgICAgMHgyNQorI2RlZmluZSBXTTg5NTVfTU9OT19PVVRfTUlYXzEgICAgICAgICAgICAgICAgICAgMHgyNgorI2RlZmluZSBXTTg5NTVfTU9OT19PVVRfTUlYXzIgICAgICAgICAgICAgICAgICAgMHgyNworI2RlZmluZSBXTTg5NTVfTE9VVDJfVk9MVU1FICAgICAgICAgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBXTTg5NTVfUk9VVDJfVk9MVU1FICAgICAgICAgICAgICAgICAgICAgMHgyOQorI2RlZmluZSBXTTg5NTVfTU9OT09VVF9WT0xVTUUgICAgICAgICAgICAgICAgICAgMHgyQQorI2RlZmluZSBXTTg5NTVfQ0xPQ0tJTkdfUExMICAgICAgICAgICAgICAgICAgICAgMHgyQgorI2RlZmluZSBXTTg5NTVfUExMX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgICAgMHgyQworI2RlZmluZSBXTTg5NTVfUExMX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgICAgMHgyRAorI2RlZmluZSBXTTg5NTVfUExMX0NPTlRST0xfMyAgICAgICAgICAgICAgICAgICAgMHgyRQorI2RlZmluZSBXTTg5NTVfUExMX0NPTlRST0xfNCAgICAgICAgICAgICAgICAgICAgMHgzQgorCisjZGVmaW5lIFdNODk1NV9SRUdJU1RFUl9DT1VOVCAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBXTTg5NTVfTUFYX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgMHgzQgorCisvKgorICogRmllbGQgRGVmaW5pdGlvbnMuCisgKi8KKworLyoKKyAqIFIyICgweDAyKSAtIExPVVQxIHZvbHVtZQorICovCisjZGVmaW5lIFdNODk1NV9MTzFWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExPMVZVICovCisjZGVmaW5lIFdNODk1NV9MTzFWVV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExPMVZVICovCisjZGVmaW5lIFdNODk1NV9MTzFWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIExPMVZVICovCisjZGVmaW5lIFdNODk1NV9MTzFWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPMVZVICovCisjZGVmaW5lIFdNODk1NV9MTzFaQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExPMVpDICovCisjZGVmaW5lIFdNODk1NV9MTzFaQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExPMVpDICovCisjZGVmaW5lIFdNODk1NV9MTzFaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExPMVpDICovCisjZGVmaW5lIFdNODk1NV9MTzFaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPMVpDICovCisjZGVmaW5lIFdNODk1NV9MT1VUVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIExPVVRWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NTVfTE9VVFZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMT1VUVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTU1X0xPVVRWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTE9VVFZPTCAtIFs2OjBdICovCisKKy8qCisgKiBSMyAoMHgwMykgLSBST1VUMSB2b2x1bWUKKyAqLworI2RlZmluZSBXTTg5NTVfUk8xVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSTzFWVSAqLworI2RlZmluZSBXTTg5NTVfUk8xVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSTzFWVSAqLworI2RlZmluZSBXTTg5NTVfUk8xVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBSTzFWVSAqLworI2RlZmluZSBXTTg5NTVfUk8xVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSTzFWVSAqLworI2RlZmluZSBXTTg5NTVfUk8xWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSTzFaQyAqLworI2RlZmluZSBXTTg5NTVfUk8xWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSTzFaQyAqLworI2RlZmluZSBXTTg5NTVfUk8xWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBSTzFaQyAqLworI2RlZmluZSBXTTg5NTVfUk8xWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSTzFaQyAqLworI2RlZmluZSBXTTg5NTVfUk9VVFZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBST1VUVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTU1X1JPVVRWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUk9VVFZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk1NV9ST1VUVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJPVVRWT0wgLSBbNjowXSAqLworCisvKgorICogUjUgKDB4MDUpIC0gREFDIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTg5NTVfREFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEQVQgKi8KKyNkZWZpbmUgV004OTU1X0RBVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogREFUICovCisjZGVmaW5lIFdNODk1NV9EQVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIERBVCAqLworI2RlZmluZSBXTTg5NTVfREFUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQVQgKi8KKyNkZWZpbmUgV004OTU1X0RBQ01VICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDTVUgKi8KKyNkZWZpbmUgV004OTU1X0RBQ01VX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDTVUgKi8KKyNkZWZpbmUgV004OTU1X0RBQ01VX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogREFDTVUgKi8KKyNkZWZpbmUgV004OTU1X0RBQ01VX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTVUgKi8KKyNkZWZpbmUgV004OTU1X0RFRU1QSF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNiAgLyogREVFTVBIIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTU1X0RFRU1QSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREVFTVBIIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTU1X0RFRU1QSF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogREVFTVBIIC0gWzI6MV0gKi8KKworLyoKKyAqIFI3ICgweDA3KSAtIEF1ZGlvIEludGVyZmFjZQorICovCisjZGVmaW5lIFdNODk1NV9CQ0xLSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEJDTEtJTlYgKi8KKyNkZWZpbmUgV004OTU1X0JDTEtJTlZfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQkNMS0lOViAqLworI2RlZmluZSBXTTg5NTVfQkNMS0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBCQ0xLSU5WICovCisjZGVmaW5lIFdNODk1NV9CQ0xLSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEtJTlYgKi8KKyNkZWZpbmUgV004OTU1X01TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTVMgKi8KKyNkZWZpbmUgV004OTU1X01TX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTVMgKi8KKyNkZWZpbmUgV004OTU1X01TX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTVMgKi8KKyNkZWZpbmUgV004OTU1X01TX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTVMgKi8KKyNkZWZpbmUgV004OTU1X0xSU1dBUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTFJTV0FQICovCisjZGVmaW5lIFdNODk1NV9MUlNXQVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExSU1dBUCAqLworI2RlZmluZSBXTTg5NTVfTFJTV0FQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMUlNXQVAgKi8KKyNkZWZpbmUgV004OTU1X0xSU1dBUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTFJTV0FQICovCisjZGVmaW5lIFdNODk1NV9MUlAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExSUCAqLworI2RlZmluZSBXTTg5NTVfTFJQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMUlAgKi8KKyNkZWZpbmUgV004OTU1X0xSUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTFJQICovCisjZGVmaW5lIFdNODk1NV9MUlBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExSUCAqLworI2RlZmluZSBXTTg5NTVfV0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBXTCAtIFszOjJdICovCisjZGVmaW5lIFdNODk1NV9XTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFdMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTU1X1dMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogV0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5NTVfRk9STUFUX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBGT1JNQVQgLSBbMTowXSAqLworI2RlZmluZSBXTTg5NTVfRk9STUFUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGT1JNQVQgLSBbMTowXSAqLworI2RlZmluZSBXTTg5NTVfRk9STUFUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBGT1JNQVQgLSBbMTowXSAqLworCisvKgorICogUjggKDB4MDgpIC0gU2FtcGxlIFJhdGUKKyAqLworI2RlZmluZSBXTTg5NTVfQkNMS0RJVjIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBCQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfQkNMS0RJVjJfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBCQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfQkNMS0RJVjJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBCQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfQkNMS0RJVjJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfTUNMS0RJVjIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfTUNMS0RJVjJfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfTUNMS0RJVjJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBNQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfTUNMS0RJVjJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNFICAvKiBTUiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk1NV9TUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNSIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTU1X1NSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogU1IgLSBbNToxXSAqLworI2RlZmluZSBXTTg5NTVfVVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBVU0IgKi8KKyNkZWZpbmUgV004OTU1X1VTQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVVNCICovCisjZGVmaW5lIFdNODk1NV9VU0JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFVTQiAqLworI2RlZmluZSBXTTg5NTVfVVNCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBVU0IgKi8KKworLyoKKyAqIFIxMCAoMHgwQSkgLSBMZWZ0IERBQyB2b2x1bWUKKyAqLworI2RlZmluZSBXTTg5NTVfTERWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMRFZVICovCisjZGVmaW5lIFdNODk1NV9MRFZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExEVlUgKi8KKyNkZWZpbmUgV004OTU1X0xEVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTERWVSAqLworI2RlZmluZSBXTTg5NTVfTERWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRFZVICovCisjZGVmaW5lIFdNODk1NV9MREFDVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIExEQUNWT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5NTVfTERBQ1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMREFDVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTU1X0xEQUNWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTERBQ1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTEgKDB4MEIpIC0gUmlnaHQgREFDIHZvbHVtZQorICovCisjZGVmaW5lIFdNODk1NV9SRFZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJEVlUgKi8KKyNkZWZpbmUgV004OTU1X1JEVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUkRWVSAqLworI2RlZmluZSBXTTg5NTVfUkRWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBSRFZVICovCisjZGVmaW5lIFdNODk1NV9SRFZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJEVlUgKi8KKyNkZWZpbmUgV004OTU1X1JEQUNWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogUkRBQ1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk1NV9SREFDVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJEQUNWT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5NTVfUkRBQ1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBSREFDVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMiAoMHgwQykgLSBCYXNzIGNvbnRyb2wKKyAqLworI2RlZmluZSBXTTg5NTVfQkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBCQiAqLworI2RlZmluZSBXTTg5NTVfQkJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBCQiAqLworI2RlZmluZSBXTTg5NTVfQkJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBCQiAqLworI2RlZmluZSBXTTg5NTVfQkJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQiAqLworI2RlZmluZSBXTTg5NTVfQkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBCQyAqLworI2RlZmluZSBXTTg5NTVfQkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBCQyAqLworI2RlZmluZSBXTTg5NTVfQkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBCQyAqLworI2RlZmluZSBXTTg5NTVfQkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQyAqLworI2RlZmluZSBXTTg5NTVfQkFTU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBCQVNTIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTU1X0JBU1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQkFTUyAtIFszOjBdICovCisjZGVmaW5lIFdNODk1NV9CQVNTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEJBU1MgLSBbMzowXSAqLworCisvKgorICogUjEzICgweDBEKSAtIFRyZWJsZSBjb250cm9sCisgKi8KKyNkZWZpbmUgV004OTU1X1RDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVEMgKi8KKyNkZWZpbmUgV004OTU1X1RDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVEMgKi8KKyNkZWZpbmUgV004OTU1X1RDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogVEMgKi8KKyNkZWZpbmUgV004OTU1X1RDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVEMgKi8KKyNkZWZpbmUgV004OTU1X1RSQkxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogVFJCTCAtIFszOjBdICovCisjZGVmaW5lIFdNODk1NV9UUkJMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFRSQkwgLSBbMzowXSAqLworI2RlZmluZSBXTTg5NTVfVFJCTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBUUkJMIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxNSAoMHgwRikgLSBSZXNldAorICovCisjZGVmaW5lIFdNODk1NV9SRVNFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxRkYgIC8qIFJFU0VUIC0gWzg6MF0gKi8KKyNkZWZpbmUgV004OTU1X1JFU0VUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUkVTRVQgLSBbODowXSAqLworI2RlZmluZSBXTTg5NTVfUkVTRVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBSRVNFVCAtIFs4OjBdICovCisKKy8qCisgKiBSMjMgKDB4MTcpIC0gQWRkaXRpb25hbCBjb250cm9sICgxKQorICovCisjZGVmaW5lIFdNODk1NV9UU0RFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFRTREVOICovCisjZGVmaW5lIFdNODk1NV9UU0RFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFRTREVOICovCisjZGVmaW5lIFdNODk1NV9UU0RFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFRTREVOICovCisjZGVmaW5lIFdNODk1NV9UU0RFTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRTREVOICovCisjZGVmaW5lIFdNODk1NV9WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwQzAgIC8qIFZTRUwgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5NTVfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBWU0VMIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTU1X1ZTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogVlNFTCAtIFs3OjZdICovCisjZGVmaW5lIFdNODk1NV9ETU9OT01JWF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMzAgIC8qIERNT05PTUlYIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTU1X0RNT05PTUlYX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRE1PTk9NSVggLSBbNTo0XSAqLworI2RlZmluZSBXTTg5NTVfRE1PTk9NSVhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBETU9OT01JWCAtIFs1OjRdICovCisjZGVmaW5lIFdNODk1NV9EQUNJTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ0lOViAqLworI2RlZmluZSBXTTg5NTVfREFDSU5WX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQUNJTlYgKi8KKyNkZWZpbmUgV004OTU1X0RBQ0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDSU5WICovCisjZGVmaW5lIFdNODk1NV9EQUNJTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0lOViAqLworI2RlZmluZSBXTTg5NTVfVE9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBUT0VOICovCisjZGVmaW5lIFdNODk1NV9UT0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFRPRU4gKi8KKyNkZWZpbmUgV004OTU1X1RPRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogVE9FTiAqLworI2RlZmluZSBXTTg5NTVfVE9FTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUT0VOICovCisKKy8qCisgKiBSMjQgKDB4MTgpIC0gQWRkaXRpb25hbCBjb250cm9sICgyKQorICovCisjZGVmaW5lIFdNODk1NV9PVVQzU1dfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxODAgIC8qIE9VVDNTVyAtIFs4OjddICovCisjZGVmaW5lIFdNODk1NV9PVVQzU1dfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIE9VVDNTVyAtIFs4OjddICovCisjZGVmaW5lIFdNODk1NV9PVVQzU1dfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIE9VVDNTVyAtIFs4OjddICovCisjZGVmaW5lIFdNODk1NV9ST1VUMklOViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFJPVVQySU5WICovCisjZGVmaW5lIFdNODk1NV9ST1VUMklOVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFJPVVQySU5WICovCisjZGVmaW5lIFdNODk1NV9ST1VUMklOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFJPVVQySU5WICovCisjZGVmaW5lIFdNODk1NV9ST1VUMklOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPVVQySU5WICovCisjZGVmaW5lIFdNODk1NV9EQUNPU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ09TUiAqLworI2RlZmluZSBXTTg5NTVfREFDT1NSX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNPU1IgKi8KKyNkZWZpbmUgV004OTU1X0RBQ09TUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDT1NSICovCisjZGVmaW5lIFdNODk1NV9EQUNPU1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ09TUiAqLworCisvKgorICogUjI1ICgweDE5KSAtIFBvd2VyIE1hbmFnZW1lbnQgKDEpCisgKi8KKyNkZWZpbmUgV004OTU1X1ZNSURTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDE4MCAgLyogVk1JRFNFTCAtIFs4OjddICovCisjZGVmaW5lIFdNODk1NV9WTUlEU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFZNSURTRUwgLSBbODo3XSAqLworI2RlZmluZSBXTTg5NTVfVk1JRFNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBWTUlEU0VMIC0gWzg6N10gKi8KKyNkZWZpbmUgV004OTU1X1ZSRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVlJFRiAqLworI2RlZmluZSBXTTg5NTVfVlJFRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBWUkVGICovCisjZGVmaW5lIFdNODk1NV9WUkVGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFZSRUYgKi8KKyNkZWZpbmUgV004OTU1X1ZSRUZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVlJFRiAqLworI2RlZmluZSBXTTg5NTVfRElHRU5CICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBESUdFTkIgKi8KKyNkZWZpbmUgV004OTU1X0RJR0VOQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRElHRU5CICovCisjZGVmaW5lIFdNODk1NV9ESUdFTkJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERJR0VOQiAqLworI2RlZmluZSBXTTg5NTVfRElHRU5CX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBESUdFTkIgKi8KKworLyoKKyAqIFIyNiAoMHgxQSkgLSBQb3dlciBNYW5hZ2VtZW50ICgyKQorICovCisjZGVmaW5lIFdNODk1NV9EQUNMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ0wgKi8KKyNkZWZpbmUgV004OTU1X0RBQ0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDTCAqLworI2RlZmluZSBXTTg5NTVfREFDTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUNMICovCisjZGVmaW5lIFdNODk1NV9EQUNMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0wgKi8KKyNkZWZpbmUgV004OTU1X0RBQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogREFDUiAqLworI2RlZmluZSBXTTg5NTVfREFDUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEQUNSICovCisjZGVmaW5lIFdNODk1NV9EQUNSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIERBQ1IgKi8KKyNkZWZpbmUgV004OTU1X0RBQ1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDUiAqLworI2RlZmluZSBXTTg5NTVfTE9VVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMT1VUMSAqLworI2RlZmluZSBXTTg5NTVfTE9VVDFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMT1VUMSAqLworI2RlZmluZSBXTTg5NTVfTE9VVDFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBMT1VUMSAqLworI2RlZmluZSBXTTg5NTVfTE9VVDFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMT1VUMSAqLworI2RlZmluZSBXTTg5NTVfUk9VVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBST1VUMSAqLworI2RlZmluZSBXTTg5NTVfUk9VVDFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBST1VUMSAqLworI2RlZmluZSBXTTg5NTVfUk9VVDFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBST1VUMSAqLworI2RlZmluZSBXTTg5NTVfUk9VVDFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBST1VUMSAqLworI2RlZmluZSBXTTg5NTVfTE9VVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMT1VUMiAqLworI2RlZmluZSBXTTg5NTVfTE9VVDJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMT1VUMiAqLworI2RlZmluZSBXTTg5NTVfTE9VVDJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBMT1VUMiAqLworI2RlZmluZSBXTTg5NTVfTE9VVDJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMT1VUMiAqLworI2RlZmluZSBXTTg5NTVfUk9VVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBST1VUMiAqLworI2RlZmluZSBXTTg5NTVfUk9VVDJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBST1VUMiAqLworI2RlZmluZSBXTTg5NTVfUk9VVDJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBST1VUMiAqLworI2RlZmluZSBXTTg5NTVfUk9VVDJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBST1VUMiAqLworI2RlZmluZSBXTTg5NTVfTU9OTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBNT05PICovCisjZGVmaW5lIFdNODk1NV9NT05PX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIE1PTk8gKi8KKyNkZWZpbmUgV004OTU1X01PTk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTU9OTyAqLworI2RlZmluZSBXTTg5NTVfTU9OT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNT05PICovCisjZGVmaW5lIFdNODk1NV9PVVQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE9VVDMgKi8KKyNkZWZpbmUgV004OTU1X09VVDNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogT1VUMyAqLworI2RlZmluZSBXTTg5NTVfT1VUM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBPVVQzICovCisjZGVmaW5lIFdNODk1NV9PVVQzX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9VVDMgKi8KKworLyoKKyAqIFIyNyAoMHgxQikgLSBBZGRpdGlvbmFsIENvbnRyb2wgKDMpCisgKi8KKyNkZWZpbmUgV004OTU1X1ZST0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVlJPSSAqLworI2RlZmluZSBXTTg5NTVfVlJPSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBWUk9JICovCisjZGVmaW5lIFdNODk1NV9WUk9JX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFZST0kgKi8KKyNkZWZpbmUgV004OTU1X1ZST0lfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVlJPSSAqLworCisvKgorICogUjM0ICgweDIyKSAtIExlZnQgb3V0IE1peCAoMSkKKyAqLworI2RlZmluZSBXTTg5NTVfTEQyTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMRDJMTyAqLworI2RlZmluZSBXTTg5NTVfTEQyTE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMRDJMTyAqLworI2RlZmluZSBXTTg5NTVfTEQyTE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMRDJMTyAqLworI2RlZmluZSBXTTg5NTVfTEQyTE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRDJMTyAqLworI2RlZmluZSBXTTg5NTVfTEkyTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSTJMTyAqLworI2RlZmluZSBXTTg5NTVfTEkyTE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSTJMTyAqLworI2RlZmluZSBXTTg5NTVfTEkyTE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMSTJMTyAqLworI2RlZmluZSBXTTg5NTVfTEkyTE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSTJMTyAqLworI2RlZmluZSBXTTg5NTVfTEkyTE9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBMSTJMT1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9MSTJMT1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExJMkxPVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X0xJMkxPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTEkyTE9WT0wgLSBbNjo0XSAqLworCisvKgorICogUjM1ICgweDIzKSAtIExlZnQgb3V0IE1peCAoMikKKyAqLworI2RlZmluZSBXTTg5NTVfUkQyTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSRDJMTyAqLworI2RlZmluZSBXTTg5NTVfUkQyTE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSRDJMTyAqLworI2RlZmluZSBXTTg5NTVfUkQyTE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBSRDJMTyAqLworI2RlZmluZSBXTTg5NTVfUkQyTE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSRDJMTyAqLworI2RlZmluZSBXTTg5NTVfUkkyTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSSTJMTyAqLworI2RlZmluZSBXTTg5NTVfUkkyTE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSSTJMTyAqLworI2RlZmluZSBXTTg5NTVfUkkyTE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBSSTJMTyAqLworI2RlZmluZSBXTTg5NTVfUkkyTE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSSTJMTyAqLworI2RlZmluZSBXTTg5NTVfUkkyTE9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBSSTJMT1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9SSTJMT1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFJJMkxPVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X1JJMkxPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUkkyTE9WT0wgLSBbNjo0XSAqLworCisvKgorICogUjM2ICgweDI0KSAtIFJpZ2h0IG91dCBNaXggKDEpCisgKi8KKyNkZWZpbmUgV004OTU1X0xEMlJPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTEQyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xEMlJPX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTEQyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xEMlJPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTEQyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xEMlJPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEQyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xJMlJPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTEkyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xJMlJPX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTEkyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xJMlJPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTEkyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xJMlJPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEkyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xJMlJPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3MCAgLyogTEkyUk9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfTEkyUk9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBMSTJST1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9MSTJST1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExJMlJPVk9MIC0gWzY6NF0gKi8KKworLyoKKyAqIFIzNyAoMHgyNSkgLSBSaWdodCBPdXQgTWl4ICgyKQorICovCisjZGVmaW5lIFdNODk1NV9SRDJSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJEMlJPICovCisjZGVmaW5lIFdNODk1NV9SRDJST19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJEMlJPICovCisjZGVmaW5lIFdNODk1NV9SRDJST19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFJEMlJPICovCisjZGVmaW5lIFdNODk1NV9SRDJST19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJEMlJPICovCisjZGVmaW5lIFdNODk1NV9SSTJSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJMlJPICovCisjZGVmaW5lIFdNODk1NV9SSTJST19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJMlJPICovCisjZGVmaW5lIFdNODk1NV9SSTJST19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJJMlJPICovCisjZGVmaW5lIFdNODk1NV9SSTJST19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJJMlJPICovCisjZGVmaW5lIFdNODk1NV9SSTJST1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNzAgIC8qIFJJMlJPVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X1JJMlJPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogUkkyUk9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfUkkyUk9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBSSTJST1ZPTCAtIFs2OjRdICovCisKKy8qCisgKiBSMzggKDB4MjYpIC0gTW9ubyBvdXQgTWl4ICgxKQorICovCisjZGVmaW5lIFdNODk1NV9MRDJNTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExEMk1PICovCisjZGVmaW5lIFdNODk1NV9MRDJNT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExEMk1PICovCisjZGVmaW5lIFdNODk1NV9MRDJNT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIExEMk1PICovCisjZGVmaW5lIFdNODk1NV9MRDJNT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExEMk1PICovCisjZGVmaW5lIFdNODk1NV9MSTJNTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJMk1PICovCisjZGVmaW5lIFdNODk1NV9MSTJNT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJMk1PICovCisjZGVmaW5lIFdNODk1NV9MSTJNT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExJMk1PICovCisjZGVmaW5lIFdNODk1NV9MSTJNT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJMk1PICovCisjZGVmaW5lIFdNODk1NV9MSTJNT1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNzAgIC8qIExJMk1PVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X0xJMk1PVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTEkyTU9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfTEkyTU9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMSTJNT1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9ETUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERNRU4gKi8KKyNkZWZpbmUgV004OTU1X0RNRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRE1FTiAqLworI2RlZmluZSBXTTg5NTVfRE1FTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBETUVOICovCisjZGVmaW5lIFdNODk1NV9ETUVOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNRU4gKi8KKworLyoKKyAqIFIzOSAoMHgyNykgLSBNb25vIG91dCBNaXggKDIpCisgKi8KKyNkZWZpbmUgV004OTU1X1JEMk1PICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUkQyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JEMk1PX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUkQyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JEMk1PX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogUkQyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JEMk1PX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkQyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JJMk1PICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUkkyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JJMk1PX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUkkyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JJMk1PX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogUkkyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JJMk1PX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkkyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JJMk1PVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3MCAgLyogUkkyTU9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfUkkyTU9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBSSTJNT1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9SSTJNT1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJJMk1PVk9MIC0gWzY6NF0gKi8KKworLyoKKyAqIFI0MCAoMHgyOCkgLSBMT1VUMiB2b2x1bWUKKyAqLworI2RlZmluZSBXTTg5NTVfTE8yVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMTzJWVSAqLworI2RlZmluZSBXTTg5NTVfTE8yVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMTzJWVSAqLworI2RlZmluZSBXTTg5NTVfTE8yVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMTzJWVSAqLworI2RlZmluZSBXTTg5NTVfTE8yVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMTzJWVSAqLworI2RlZmluZSBXTTg5NTVfTE8yWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMTzJaQyAqLworI2RlZmluZSBXTTg5NTVfTE8yWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMTzJaQyAqLworI2RlZmluZSBXTTg5NTVfTE8yWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMTzJaQyAqLworI2RlZmluZSBXTTg5NTVfTE8yWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMTzJaQyAqLworI2RlZmluZSBXTTg5NTVfTE9VVDJWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBMT1VUMlZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk1NV9MT1VUMlZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExPVVQyVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTU1X0xPVVQyVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTE9VVDJWT0wgLSBbNjowXSAqLworCisvKgorICogUjQxICgweDI5KSAtIFJPVVQyIHZvbHVtZQorICovCisjZGVmaW5lIFdNODk1NV9STzJWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJPMlZVICovCisjZGVmaW5lIFdNODk1NV9STzJWVV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJPMlZVICovCisjZGVmaW5lIFdNODk1NV9STzJWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFJPMlZVICovCisjZGVmaW5lIFdNODk1NV9STzJWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPMlZVICovCisjZGVmaW5lIFdNODk1NV9STzJaQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJPMlpDICovCisjZGVmaW5lIFdNODk1NV9STzJaQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJPMlpDICovCisjZGVmaW5lIFdNODk1NV9STzJaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJPMlpDICovCisjZGVmaW5lIFdNODk1NV9STzJaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPMlpDICovCisjZGVmaW5lIFdNODk1NV9ST1VUMlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIFJPVVQyVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTU1X1JPVVQyVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUk9VVDJWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NTVfUk9VVDJWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBST1VUMlZPTCAtIFs2OjBdICovCisKKy8qCisgKiBSNDIgKDB4MkEpIC0gTU9OT09VVCB2b2x1bWUKKyAqLworI2RlZmluZSBXTTg5NTVfTU9aQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBNT1pDICovCisjZGVmaW5lIFdNODk1NV9NT1pDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1PWkMgKi8KKyNkZWZpbmUgV004OTU1X01PWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTU9aQyAqLworI2RlZmluZSBXTTg5NTVfTU9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNT1pDICovCisjZGVmaW5lIFdNODk1NV9NT1VUVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIE1PVVRWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NTVfTU9VVFZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBNT1VUVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTU1X01PVVRWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTU9VVFZPTCAtIFs2OjBdICovCisKKy8qCisgKiBSNDMgKDB4MkIpIC0gQ2xvY2tpbmcgLyBQTEwKKyAqLworI2RlZmluZSBXTTg5NTVfTUNMS1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBNQ0xLU0VMICovCisjZGVmaW5lIFdNODk1NV9NQ0xLU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE1DTEtTRUwgKi8KKyNkZWZpbmUgV004OTU1X01DTEtTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTUNMS1NFTCAqLworI2RlZmluZSBXTTg5NTVfTUNMS1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLU0VMICovCisjZGVmaW5lIFdNODk1NV9QTExPVVRESVYyICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFBMTE9VVERJVjIgKi8KKyNkZWZpbmUgV004OTU1X1BMTE9VVERJVjJfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogUExMT1VURElWMiAqLworI2RlZmluZSBXTTg5NTVfUExMT1VURElWMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBQTExPVVRESVYyICovCisjZGVmaW5lIFdNODk1NV9QTExPVVRESVYyX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFBMTE9VVERJVjIgKi8KKyNkZWZpbmUgV004OTU1X1BMTF9SQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUExMX1JCICovCisjZGVmaW5lIFdNODk1NV9QTExfUkJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFBMTF9SQiAqLworI2RlZmluZSBXTTg5NTVfUExMX1JCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBQTExfUkIgKi8KKyNkZWZpbmUgV004OTU1X1BMTF9SQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUExMX1JCICovCisjZGVmaW5lIFdNODk1NV9QTExFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFBMTEVOICovCisjZGVmaW5lIFdNODk1NV9QTExFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFBMTEVOICovCisjZGVmaW5lIFdNODk1NV9QTExFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFBMTEVOICovCisjZGVmaW5lIFdNODk1NV9QTExFTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFBMTEVOICovCisKKy8qCisgKiBSNDQgKDB4MkMpIC0gUExMIENvbnRyb2wgMQorICovCisjZGVmaW5lIFdNODk1NV9OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxRTAgIC8qIE4gLSBbODo1XSAqLworI2RlZmluZSBXTTg5NTVfTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBOIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTU1X05fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTiAtIFs4OjVdICovCisjZGVmaW5lIFdNODk1NV9LXzIxXzE4X01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEsoMjE6MTgpIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTU1X0tfMjFfMThfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSygyMToxOCkgLSBbMzowXSAqLworI2RlZmluZSBXTTg5NTVfS18yMV8xOF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBLKDIxOjE4KSAtIFszOjBdICovCisKKy8qCisgKiBSNDUgKDB4MkQpIC0gUExMIENvbnRyb2wgMgorICovCisjZGVmaW5lIFdNODk1NV9LXzE3XzlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxRkYgIC8qIEsoMTc6OSkgLSBbODowXSAqLworI2RlZmluZSBXTTg5NTVfS18xN185X1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBLKDE3OjkpIC0gWzg6MF0gKi8KKyNkZWZpbmUgV004OTU1X0tfMTdfOV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogSygxNzo5KSAtIFs4OjBdICovCisKKy8qCisgKiBSNDYgKDB4MkUpIC0gUExMIENvbnRyb2wgMworICovCisjZGVmaW5lIFdNODk1NV9LXzhfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxRkYgIC8qIEsoODowKSAtIFs4OjBdICovCisjZGVmaW5lIFdNODk1NV9LXzhfMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEsoODowKSAtIFs4OjBdICovCisjZGVmaW5lIFdNODk1NV9LXzhfMF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEsoODowKSAtIFs4OjBdICovCisKKy8qCisgKiBSNTkgKDB4M0IpIC0gUExMIENvbnRyb2wgNAorICovCisjZGVmaW5lIFdNODk1NV9LRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEtFTiAqLworI2RlZmluZSBXTTg5NTVfS0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBLRU4gKi8KKyNkZWZpbmUgV004OTU1X0tFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogS0VOICovCisjZGVmaW5lIFdNODk1NV9LRU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEtFTiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2MS5jCmluZGV4IGE4MDA3ZDUuLmQyMzQyYzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjEuYwpAQCAtMTAyMiw2ICsxMDIyLDkgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+cmVnX2NhY2hlX3NpemU7IGkrKykgeworCQlpZiAocmVnX2NhY2hlW2ldID09IHdtODk2MV9yZWdfZGVmYXVsdHNbaV0pCisJCQljb250aW51ZTsKKwogCQlpZiAoaSA9PSBXTTg5NjFfU09GVFdBUkVfUkVTRVQpCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NzQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMKaW5kZXggODgxMjc1MS4uZWU2MzdhZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NzQuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5jCkBAIC0xNzAsNiArMTcwLDEwIEBACiAKIFNPQ19TSU5HTEUoIkNhcHR1cmUgQm9vc3QoKzIwZEIpIiwgV004OTc0X0FEQ0JPT1NULCAgOCwgMSwgMCksCiBTT0NfU0lOR0xFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIFdNODk3NF9NT05PTUlYLCA2LCAxLCAxKSwKKworLyogREFDIC8gQURDIG92ZXJzYW1wbGluZyAqLworU09DX1NJTkdMRSgiREFDIDEyOHggT3ZlcnNhbXBsaW5nIFN3aXRjaCIsIFdNODk3NF9EQUMsIDgsIDEsIDApLAorU09DX1NJTkdMRSgiQURDIDEyOHggT3ZlcnNhbXBsaW5nIFN3aXRjaCIsIFdNODk3NF9BREMsIDgsIDEsIDApLAogfTsKIAogLyogU3BlYWtlciBPdXRwdXQgTWl4ZXIgKi8KQEAgLTM4MSwxNCArMzg1LDYgQEAKIAkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzRfQ0xPQ0spICYgMHgxMWY7CiAJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9DTE9DSywgcmVnIHwgZGl2KTsKIAkJYnJlYWs7Ci0JY2FzZSBXTTg5NzRfQURDQ0xLOgotCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3NF9BREMpICYgMHgxZjc7Ci0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9BREMsIHJlZyB8IGRpdik7Ci0JCWJyZWFrOwotCWNhc2UgV004OTc0X0RBQ0NMSzoKLQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzRfREFDKSAmIDB4MWY3OwotCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzRfREFDLCByZWcgfCBkaXYpOwotCQlicmVhazsKIAljYXNlIFdNODk3NF9CQ0xLRElWOgogCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3NF9DTE9DSykgJiAweDFlMzsKIAkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc0X0NMT0NLLCByZWcgfCBkaXYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NzQuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmgKaW5kZXggOThkZTk1Ni4uODk2YTdmMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NzQuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5oCkBAIC01NywxNyArNTcsNyBAQAogLyogQ2xvY2sgZGl2aWRlciBJZCdzICovCiAjZGVmaW5lIFdNODk3NF9PUENMS0RJVgkJMAogI2RlZmluZSBXTTg5NzRfTUNMS0RJVgkJMQotI2RlZmluZSBXTTg5NzRfQURDQ0xLCQkyCi0jZGVmaW5lIFdNODk3NF9EQUNDTEsJCTMKLSNkZWZpbmUgV004OTc0X0JDTEtESVYJCTQKLQotLyogREFDIGNsb2NrIGRpdmlkZXJzICovCi0jZGVmaW5lIFdNODk3NF9EQUNDTEtfRjIJKDEgPDwgMykKLSNkZWZpbmUgV004OTc0X0RBQ0NMS19GNAkoMCA8PCAzKQotCi0vKiBBREMgY2xvY2sgZGl2aWRlcnMgKi8KLSNkZWZpbmUgV004OTc0X0FEQ0NMS19GMgkoMSA8PCAzKQotI2RlZmluZSBXTTg5NzRfQURDQ0xLX0Y0CSgwIDw8IDMpCisjZGVmaW5lIFdNODk3NF9CQ0xLRElWCQkyCiAKIC8qIFBMTCBPdXQgZGl2aWRlcnMgKi8KICNkZWZpbmUgV004OTc0X09QQ0xLRElWXzEJKDAgPDwgNCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YmI1OWUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3OC5jCkBAIC0wLDAgKzEsMTE0OSBAQAorLyoKKyAqIHdtODk3OC5jICAtLSAgV004OTc4IEFMU0EgU29DIEF1ZGlvIENvZGVjIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA3IENhcmxvcyBNdW5veiA8Y2FybG9zQGtlbmF0aS5jb20+CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKiBCYXNlZCBvbiB3bTg5NzQgYW5kIHdtODk5MCBieSBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaW5jbHVkZSAid204OTc4LmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204OTc4X2NvZGVjOworCisvKiB3bTg5NzggcmVnaXN0ZXIgY2FjaGUuIE5vdGUgdGhhdCByZWdpc3RlciAwIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgY2FjaGUuICovCitzdGF0aWMgY29uc3QgdTE2IHdtODk3OF9yZWdbV004OTc4X0NBQ0hFUkVHTlVNXSA9IHsKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIDB4MDAuLi4weDAzICovCisJMHgwMDUwLCAweDAwMDAsIDB4MDE0MCwgMHgwMDAwLAkvKiAweDA0Li4uMHgwNyAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDBmZiwJLyogMHgwOC4uLjB4MGIgKi8KKwkweDAwZmYsIDB4MDAwMCwgMHgwMTAwLCAweDAwZmYsCS8qIDB4MGMuLi4weDBmICovCisJMHgwMGZmLCAweDAwMDAsIDB4MDEyYywgMHgwMDJjLAkvKiAweDEwLi4uMHgxMyAqLworCTB4MDAyYywgMHgwMDJjLCAweDAwMmMsIDB4MDAwMCwJLyogMHgxNC4uLjB4MTcgKi8KKwkweDAwMzIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIDB4MTguLi4weDFiICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKiAweDFjLi4uMHgxZiAqLworCTB4MDAzOCwgMHgwMDBiLCAweDAwMzIsIDB4MDAwMCwJLyogMHgyMC4uLjB4MjMgKi8KKwkweDAwMDgsIDB4MDAwYywgMHgwMDkzLCAweDAwZTksCS8qIDB4MjQuLi4weDI3ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKiAweDI4Li4uMHgyYiAqLworCTB4MDAzMywgMHgwMDEwLCAweDAwMTAsIDB4MDEwMCwJLyogMHgyYy4uLjB4MmYgKi8KKwkweDAxMDAsIDB4MDAwMiwgMHgwMDAxLCAweDAwMDEsCS8qIDB4MzAuLi4weDMzICovCisJMHgwMDM5LCAweDAwMzksIDB4MDAzOSwgMHgwMDM5LAkvKiAweDM0Li4uMHgzNyAqLworCTB4MDAwMSwJMHgwMDAxLAkJCS8qIDB4MzguLi4weDNiICovCit9OworCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB3bTg5NzhfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdW5zaWduZWQgaW50IGZfcGxsb3V0OworCXVuc2lnbmVkIGludCBmX21jbGs7CisJdW5zaWduZWQgaW50IGZfMjU2ZnM7CisJdW5zaWduZWQgaW50IGZfb3BjbGs7CisJaW50IG1jbGtfaWR4OworCWVudW0gd204OTc4X3N5c2Nsa19zcmMgc3lzY2xrOworCXUxNiByZWdfY2FjaGVbV004OTc4X0NBQ0hFUkVHTlVNXTsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfY29tcGFuZGluZ1tdID0geyJPZmYiLCAiTkMiLCAidS1sYXciLCAiQS1sYXcifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfZXFtb2RlW10gPSB7IkNhcHR1cmUiLCAiUGxheWJhY2sifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfYndbXSA9IHsiTmFycm93IiwgIldpZGUifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfZXExW10gPSB7IjgwSHoiLCAiMTA1SHoiLCAiMTM1SHoiLCAiMTc1SHoifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfZXEyW10gPSB7IjIzMEh6IiwgIjMwMEh6IiwgIjM4NUh6IiwgIjUwMEh6In07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2VxM1tdID0geyI2NTBIeiIsICI4NTBIeiIsICIxLjFrSHoiLCAiMS40a0h6In07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2VxNFtdID0geyIxLjhrSHoiLCAiMi40a0h6IiwgIjMuMmtIeiIsICI0LjFrSHoifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfZXE1W10gPSB7IjUuM2tIeiIsICI2LjlrSHoiLCAiOWtIeiIsICIxMS43a0h6In07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2FsYzNbXSA9IHsiQUxDIiwgIkxpbWl0ZXIifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfYWxjMVtdID0geyJPZmYiLCAiUmlnaHQiLCAiTGVmdCIsICJCb3RoIn07CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChhZGNfY29tcGFuZCwgV004OTc4X0NPTVBBTkRJTkdfQ09OVFJPTCwgMSwKKwkJCQkgIHdtODk3OF9jb21wYW5kaW5nKTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChkYWNfY29tcGFuZCwgV004OTc4X0NPTVBBTkRJTkdfQ09OVFJPTCwgMywKKwkJCQkgIHdtODk3OF9jb21wYW5kaW5nKTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChlcW1vZGUsIFdNODk3OF9FUTEsIDgsIHdtODk3OF9lcW1vZGUpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGVxMSwgV004OTc4X0VRMSwgNSwgd204OTc4X2VxMSk7CitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woZXEyYncsIFdNODk3OF9FUTIsIDgsIHdtODk3OF9idyk7CitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woZXEyLCBXTTg5NzhfRVEyLCA1LCB3bTg5NzhfZXEyKTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChlcTNidywgV004OTc4X0VRMywgOCwgd204OTc4X2J3KTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChlcTMsIFdNODk3OF9FUTMsIDUsIHdtODk3OF9lcTMpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGVxNGJ3LCBXTTg5NzhfRVE0LCA4LCB3bTg5NzhfYncpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGVxNCwgV004OTc4X0VRNCwgNSwgd204OTc4X2VxNCk7CitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woZXE1LCBXTTg5NzhfRVE1LCA1LCB3bTg5NzhfZXE1KTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChhbGMzLCBXTTg5NzhfQUxDX0NPTlRST0xfMywgOCwgd204OTc4X2FsYzMpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGFsYzEsIFdNODk3OF9BTENfQ09OVFJPTF8xLCA3LCB3bTg5NzhfYWxjMSk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkaWdpdGFsX3RsdiwgLTEyNzUwLCA1MCwgMSk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZXFfdGx2LCAtMTIwMCwgMTAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShpbnBnYV90bHYsIC0xMjAwLCA3NSwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoc3BrX3RsdiwgLTU3MDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoYm9vc3RfdGx2LCAtMTUwMCwgMzAwLCAxKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk3OF9zbmRfY29udHJvbHNbXSA9IHsKKworCVNPQ19TSU5HTEUoIkRpZ2l0YWwgTG9vcGJhY2sgU3dpdGNoIiwKKwkJV004OTc4X0NPTVBBTkRJTkdfQ09OVFJPTCwgMCwgMSwgMCksCisKKwlTT0NfRU5VTSgiQURDIENvbXBhbmRpbmciLCBhZGNfY29tcGFuZCksCisJU09DX0VOVU0oIkRBQyBDb21wYW5kaW5nIiwgZGFjX2NvbXBhbmQpLAorCisJU09DX0RPVUJMRSgiREFDIEludmVyc2lvbiBTd2l0Y2giLCBXTTg5NzhfREFDX0NPTlRST0wsIDAsIDEsIDEsIDApLAorCisJU09DX0RPVUJMRV9SX1RMVigiUENNIFZvbHVtZSIsCisJCVdNODk3OF9MRUZUX0RBQ19ESUdJVEFMX1ZPTFVNRSwgV004OTc4X1JJR0hUX0RBQ19ESUdJVEFMX1ZPTFVNRSwKKwkJMCwgMjU1LCAwLCBkaWdpdGFsX3RsdiksCisKKwlTT0NfU0lOR0xFKCJIaWdoIFBhc3MgRmlsdGVyIFN3aXRjaCIsIFdNODk3OF9BRENfQ09OVFJPTCwgOCwgMSwgMCksCisJU09DX1NJTkdMRSgiSGlnaCBQYXNzIEN1dCBPZmYiLCBXTTg5NzhfQURDX0NPTlRST0wsIDQsIDcsIDApLAorCVNPQ19ET1VCTEUoIkFEQyBJbnZlcnNpb24gU3dpdGNoIiwgV004OTc4X0FEQ19DT05UUk9MLCAwLCAxLCAxLCAwKSwKKworCVNPQ19ET1VCTEVfUl9UTFYoIkFEQyBWb2x1bWUiLAorCQlXTTg5NzhfTEVGVF9BRENfRElHSVRBTF9WT0xVTUUsIFdNODk3OF9SSUdIVF9BRENfRElHSVRBTF9WT0xVTUUsCisJCTAsIDI1NSwgMCwgZGlnaXRhbF90bHYpLAorCisJU09DX0VOVU0oIkVxdWFsaXNlciBGdW5jdGlvbiIsIGVxbW9kZSksCisJU09DX0VOVU0oIkVRMSBDdXQgT2ZmIiwgZXExKSwKKwlTT0NfU0lOR0xFX1RMVigiRVExIFZvbHVtZSIsIFdNODk3OF9FUTEsICAwLCAyNCwgMSwgZXFfdGx2KSwKKworCVNPQ19FTlVNKCJFcXVhbGlzZXIgRVEyIEJhbmR3aXRoIiwgZXEyYncpLAorCVNPQ19FTlVNKCJFUTIgQ3V0IE9mZiIsIGVxMiksCisJU09DX1NJTkdMRV9UTFYoIkVRMiBWb2x1bWUiLCBXTTg5NzhfRVEyLCAgMCwgMjQsIDEsIGVxX3RsdiksCisKKwlTT0NfRU5VTSgiRXF1YWxpc2VyIEVRMyBCYW5kd2l0aCIsIGVxM2J3KSwKKwlTT0NfRU5VTSgiRVEzIEN1dCBPZmYiLCBlcTMpLAorCVNPQ19TSU5HTEVfVExWKCJFUTMgVm9sdW1lIiwgV004OTc4X0VRMywgIDAsIDI0LCAxLCBlcV90bHYpLAorCisJU09DX0VOVU0oIkVxdWFsaXNlciBFUTQgQmFuZHdpdGgiLCBlcTRidyksCisJU09DX0VOVU0oIkVRNCBDdXQgT2ZmIiwgZXE0KSwKKwlTT0NfU0lOR0xFX1RMVigiRVE0IFZvbHVtZSIsIFdNODk3OF9FUTQsICAwLCAyNCwgMSwgZXFfdGx2KSwKKworCVNPQ19FTlVNKCJFUTUgQ3V0IE9mZiIsIGVxNSksCisJU09DX1NJTkdMRV9UTFYoIkVRNSBWb2x1bWUiLCBXTTg5NzhfRVE1LCAwLCAyNCwgMSwgZXFfdGx2KSwKKworCVNPQ19TSU5HTEUoIkRBQyBQbGF5YmFjayBMaW1pdGVyIFN3aXRjaCIsCisJCVdNODk3OF9EQUNfTElNSVRFUl8xLCA4LCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJEQUMgUGxheWJhY2sgTGltaXRlciBEZWNheSIsCisJCVdNODk3OF9EQUNfTElNSVRFUl8xLCA0LCAxNSwgMCksCisJU09DX1NJTkdMRSgiREFDIFBsYXliYWNrIExpbWl0ZXIgQXR0YWNrIiwKKwkJV004OTc4X0RBQ19MSU1JVEVSXzEsIDAsIDE1LCAwKSwKKworCVNPQ19TSU5HTEUoIkRBQyBQbGF5YmFjayBMaW1pdGVyIFRocmVzaG9sZCIsCisJCVdNODk3OF9EQUNfTElNSVRFUl8yLCA0LCA3LCAwKSwKKwlTT0NfU0lOR0xFKCJEQUMgUGxheWJhY2sgTGltaXRlciBCb29zdCIsCisJCVdNODk3OF9EQUNfTElNSVRFUl8yLCAwLCAxNSwgMCksCisKKwlTT0NfRU5VTSgiQUxDIEVuYWJsZSBTd2l0Y2giLCBhbGMxKSwKKwlTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBNaW4gR2FpbiIsIFdNODk3OF9BTENfQ09OVFJPTF8xLCAwLCA3LCAwKSwKKwlTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBNYXggR2FpbiIsIFdNODk3OF9BTENfQ09OVFJPTF8xLCAzLCA3LCAwKSwKKworCVNPQ19TSU5HTEUoIkFMQyBDYXB0dXJlIEhvbGQiLCBXTTg5NzhfQUxDX0NPTlRST0xfMiwgNCwgNywgMCksCisJU09DX1NJTkdMRSgiQUxDIENhcHR1cmUgVGFyZ2V0IiwgV004OTc4X0FMQ19DT05UUk9MXzIsIDAsIDE1LCAwKSwKKworCVNPQ19FTlVNKCJBTEMgQ2FwdHVyZSBNb2RlIiwgYWxjMyksCisJU09DX1NJTkdMRSgiQUxDIENhcHR1cmUgRGVjYXkiLCBXTTg5NzhfQUxDX0NPTlRST0xfMywgNCwgMTUsIDApLAorCVNPQ19TSU5HTEUoIkFMQyBDYXB0dXJlIEF0dGFjayIsIFdNODk3OF9BTENfQ09OVFJPTF8zLCAwLCAxNSwgMCksCisKKwlTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBOb2lzZSBHYXRlIFN3aXRjaCIsIFdNODk3OF9OT0lTRV9HQVRFLCAzLCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBOb2lzZSBHYXRlIFRocmVzaG9sZCIsCisJCVdNODk3OF9OT0lTRV9HQVRFLCAwLCA3LCAwKSwKKworCVNPQ19ET1VCTEVfUigiQ2FwdHVyZSBQR0EgWkMgU3dpdGNoIiwKKwkJV004OTc4X0xFRlRfSU5QX1BHQV9DT05UUk9MLCBXTTg5NzhfUklHSFRfSU5QX1BHQV9DT05UUk9MLAorCQk3LCAxLCAwKSwKKworCS8qIE9VVDEgLSBIZWFkcGhvbmVzICovCisJU09DX0RPVUJMRV9SKCJIZWFkcGhvbmUgUGxheWJhY2sgWkMgU3dpdGNoIiwKKwkJV004OTc4X0xPVVQxX0hQX0NPTlRST0wsIFdNODk3OF9ST1VUMV9IUF9DT05UUk9MLCA3LCAxLCAwKSwKKworCVNPQ19ET1VCTEVfUl9UTFYoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLAorCQlXTTg5NzhfTE9VVDFfSFBfQ09OVFJPTCwgV004OTc4X1JPVVQxX0hQX0NPTlRST0wsCisJCTAsIDYzLCAwLCBzcGtfdGx2KSwKKworCS8qIE9VVDIgLSBTcGVha2VycyAqLworCVNPQ19ET1VCTEVfUigiU3BlYWtlciBQbGF5YmFjayBaQyBTd2l0Y2giLAorCQlXTTg5NzhfTE9VVDJfU1BLX0NPTlRST0wsIFdNODk3OF9ST1VUMl9TUEtfQ09OVFJPTCwgNywgMSwgMCksCisKKwlTT0NfRE9VQkxFX1JfVExWKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsCisJCVdNODk3OF9MT1VUMl9TUEtfQ09OVFJPTCwgV004OTc4X1JPVVQyX1NQS19DT05UUk9MLAorCQkwLCA2MywgMCwgc3BrX3RsdiksCisKKwkvKiBPVVQzLzQgLSBMaW5lIE91dHB1dCAqLworCVNPQ19ET1VCTEVfUigiTGluZSBQbGF5YmFjayBTd2l0Y2giLAorCQlXTTg5NzhfT1VUM19NSVhFUl9DT05UUk9MLCBXTTg5NzhfT1VUNF9NSVhFUl9DT05UUk9MLCA2LCAxLCAxKSwKKworCS8qIE1peGVyICMzOiBCb29zdCAoSW5wdXQpIG1peGVyICovCisJU09DX0RPVUJMRV9SKCJQR0EgQm9vc3QgKCsyMGRCKSIsCisJCVdNODk3OF9MRUZUX0FEQ19CT09TVF9DT05UUk9MLCBXTTg5NzhfUklHSFRfQURDX0JPT1NUX0NPTlRST0wsCisJCTgsIDEsIDApLAorCVNPQ19ET1VCTEVfUl9UTFYoIkwyL1IyIEJvb3N0IFZvbHVtZSIsCisJCVdNODk3OF9MRUZUX0FEQ19CT09TVF9DT05UUk9MLCBXTTg5NzhfUklHSFRfQURDX0JPT1NUX0NPTlRST0wsCisJCTQsIDcsIDAsIGJvb3N0X3RsdiksCisJU09DX0RPVUJMRV9SX1RMVigiQXV4IEJvb3N0IFZvbHVtZSIsCisJCVdNODk3OF9MRUZUX0FEQ19CT09TVF9DT05UUk9MLCBXTTg5NzhfUklHSFRfQURDX0JPT1NUX0NPTlRST0wsCisJCTAsIDcsIDAsIGJvb3N0X3RsdiksCisKKwkvKiBJbnB1dCBQR0Egdm9sdW1lICovCisJU09DX0RPVUJMRV9SX1RMVigiSW5wdXQgUEdBIFZvbHVtZSIsCisJCVdNODk3OF9MRUZUX0lOUF9QR0FfQ09OVFJPTCwgV004OTc4X1JJR0hUX0lOUF9QR0FfQ09OVFJPTCwKKwkJMCwgNjMsIDAsIGlucGdhX3RsdiksCisKKwkvKiBIZWFkcGhvbmUgKi8KKwlTT0NfRE9VQkxFX1IoIkhlYWRwaG9uZSBTd2l0Y2giLAorCQlXTTg5NzhfTE9VVDFfSFBfQ09OVFJPTCwgV004OTc4X1JPVVQxX0hQX0NPTlRST0wsIDYsIDEsIDEpLAorCisJLyogU3BlYWtlciAqLworCVNPQ19ET1VCTEVfUigiU3BlYWtlciBTd2l0Y2giLAorCQlXTTg5NzhfTE9VVDJfU1BLX0NPTlRST0wsIFdNODk3OF9ST1VUMl9TUEtfQ09OVFJPTCwgNiwgMSwgMSksCisKKwkvKiBEQUMgLyBBREMgb3ZlcnNhbXBsaW5nICovCisJU09DX1NJTkdMRSgiREFDIDEyOHggT3ZlcnNhbXBsaW5nIFN3aXRjaCIsIFdNODk3OF9EQUNfQ09OVFJPTCwgOCwgMSwgMCksCisJU09DX1NJTkdMRSgiQURDIDEyOHggT3ZlcnNhbXBsaW5nIFN3aXRjaCIsIFdNODk3OF9BRENfQ09OVFJPTCwgOCwgMSwgMCksCit9OworCisvKiBNaXhlciAjMTogT3V0cHV0IChPVVQxLCBPVVQyKSBNaXhlcjogbWl4IEFVWCwgSW5wdXQgbWl4ZXIgb3V0cHV0IGFuZCBEQUMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NzhfbGVmdF9vdXRfbWl4ZXJbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkxpbmUgQnlwYXNzIFN3aXRjaCIsIFdNODk3OF9MRUZUX01JWEVSX0NPTlRST0wsIDEsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiQXV4IFBsYXliYWNrIFN3aXRjaCIsIFdNODk3OF9MRUZUX01JWEVSX0NPTlRST0wsIDUsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIFdNODk3OF9MRUZUX01JWEVSX0NPTlRST0wsIDAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk3OF9yaWdodF9vdXRfbWl4ZXJbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkxpbmUgQnlwYXNzIFN3aXRjaCIsIFdNODk3OF9SSUdIVF9NSVhFUl9DT05UUk9MLCAxLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkF1eCBQbGF5YmFjayBTd2l0Y2giLCBXTTg5NzhfUklHSFRfTUlYRVJfQ09OVFJPTCwgNSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgV004OTc4X1JJR0hUX01JWEVSX0NPTlRST0wsIDAsIDEsIDApLAorfTsKKworLyogT1VUMy9PVVQ0IE1peGVyIG5vdCBpbXBsZW1lbnRlZCAqLworCisvKiBNaXhlciAjMjogSW5wdXQgUEdBIE11dGUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NzhfbGVmdF9pbnB1dF9taXhlcltdID0geworCVNPQ19EQVBNX1NJTkdMRSgiTDIgU3dpdGNoIiwgV004OTc4X0lOUFVUX0NPTlRST0wsIDIsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTWljTiBTd2l0Y2giLCBXTTg5NzhfSU5QVVRfQ09OVFJPTCwgMSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNaWNQIFN3aXRjaCIsIFdNODk3OF9JTlBVVF9DT05UUk9MLCAwLCAxLCAwKSwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTc4X3JpZ2h0X2lucHV0X21peGVyW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJSMiBTd2l0Y2giLCBXTTg5NzhfSU5QVVRfQ09OVFJPTCwgNiwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNaWNOIFN3aXRjaCIsIFdNODk3OF9JTlBVVF9DT05UUk9MLCA1LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIk1pY1AgU3dpdGNoIiwgV004OTc4X0lOUFVUX0NPTlRST0wsIDQsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk3OF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fREFDKCJMZWZ0IERBQyIsICJMZWZ0IEhpRmkgUGxheWJhY2siLAorCQkJIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsIDAsIDApLAorCVNORF9TT0NfREFQTV9EQUMoIlJpZ2h0IERBQyIsICJSaWdodCBIaUZpIFBsYXliYWNrIiwKKwkJCSBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8zLCAxLCAwKSwKKwlTTkRfU09DX0RBUE1fQURDKCJMZWZ0IEFEQyIsICJMZWZ0IEhpRmkgQ2FwdHVyZSIsCisJCQkgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwgMCwgMCksCisJU05EX1NPQ19EQVBNX0FEQygiUmlnaHQgQURDIiwgIlJpZ2h0IEhpRmkgQ2FwdHVyZSIsCisJCQkgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwgMSwgMCksCisKKwkvKiBNaXhlciAjMTogT1VUMSwyICovCisJU09DX01JWEVSX0FSUkFZKCJMZWZ0IE91dHB1dCBNaXhlciIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJCQkyLCAwLCB3bTg5NzhfbGVmdF9vdXRfbWl4ZXIpLAorCVNPQ19NSVhFUl9BUlJBWSgiUmlnaHQgT3V0cHV0IE1peGVyIiwgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMywKKwkJCTMsIDAsIHdtODk3OF9yaWdodF9vdXRfbWl4ZXIpLAorCisJU09DX01JWEVSX0FSUkFZKCJMZWZ0IElucHV0IE1peGVyIiwgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJCTIsIDAsIHdtODk3OF9sZWZ0X2lucHV0X21peGVyKSwKKwlTT0NfTUlYRVJfQVJSQVkoIlJpZ2h0IElucHV0IE1peGVyIiwgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJCTMsIDAsIHdtODk3OF9yaWdodF9pbnB1dF9taXhlciksCisKKwlTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IEJvb3N0IE1peGVyIiwgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJCSA0LCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBCb29zdCBNaXhlciIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCQkgNSwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IENhcHR1cmUgUEdBIiwgV004OTc4X0xFRlRfSU5QX1BHQV9DT05UUk9MLAorCQkJIDYsIDEsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIlJpZ2h0IENhcHR1cmUgUEdBIiwgV004OTc4X1JJR0hUX0lOUF9QR0FfQ09OVFJPTCwKKwkJCSA2LCAxLCBOVUxMLCAwKSwKKworCVNORF9TT0NfREFQTV9QR0EoIkxlZnQgSGVhZHBob25lIE91dCIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCQkgNywgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiUmlnaHQgSGVhZHBob25lIE91dCIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCQkgOCwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IFNwZWFrZXIgT3V0IiwgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMywKKwkJCSA2LCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBTcGVha2VyIE91dCIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJCQkgNSwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fTUlYRVIoIk9VVDQgVk1JRCIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJCQkgICA4LCAwLCBOVUxMLCAwKSwKKworCVNORF9TT0NfREFQTV9NSUNCSUFTKCJNaWMgQmlhcyIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIDQsIDApLAorCisJU05EX1NPQ19EQVBNX0lOUFVUKCJMTUlDTiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTE1JQ1AiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIlJNSUNOIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJSTUlDUCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTEFVWCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiUkFVWCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTDIiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIlIyIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTEhQIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiUkhQIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTFNQSyIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIlJTUEsiKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCS8qIE91dHB1dCBtaXhlciAqLworCXsiUmlnaHQgT3V0cHV0IE1peGVyIiwgIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAiUmlnaHQgREFDIn0sCisJeyJSaWdodCBPdXRwdXQgTWl4ZXIiLCAiQXV4IFBsYXliYWNrIFN3aXRjaCIsICJSQVVYIn0sCisJeyJSaWdodCBPdXRwdXQgTWl4ZXIiLCAiTGluZSBCeXBhc3MgU3dpdGNoIiwgIlJpZ2h0IEJvb3N0IE1peGVyIn0sCisKKwl7IkxlZnQgT3V0cHV0IE1peGVyIiwgIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAiTGVmdCBEQUMifSwKKwl7IkxlZnQgT3V0cHV0IE1peGVyIiwgIkF1eCBQbGF5YmFjayBTd2l0Y2giLCAiTEFVWCJ9LAorCXsiTGVmdCBPdXRwdXQgTWl4ZXIiLCAiTGluZSBCeXBhc3MgU3dpdGNoIiwgIkxlZnQgQm9vc3QgTWl4ZXIifSwKKworCS8qIE91dHB1dHMgKi8KKwl7IlJpZ2h0IEhlYWRwaG9uZSBPdXQiLCBOVUxMLCAiUmlnaHQgT3V0cHV0IE1peGVyIn0sCisJeyJSSFAiLCBOVUxMLCAiUmlnaHQgSGVhZHBob25lIE91dCJ9LAorCisJeyJMZWZ0IEhlYWRwaG9uZSBPdXQiLCBOVUxMLCAiTGVmdCBPdXRwdXQgTWl4ZXIifSwKKwl7IkxIUCIsIE5VTEwsICJMZWZ0IEhlYWRwaG9uZSBPdXQifSwKKworCXsiUmlnaHQgU3BlYWtlciBPdXQiLCBOVUxMLCAiUmlnaHQgT3V0cHV0IE1peGVyIn0sCisJeyJSU1BLIiwgTlVMTCwgIlJpZ2h0IFNwZWFrZXIgT3V0In0sCisKKwl7IkxlZnQgU3BlYWtlciBPdXQiLCBOVUxMLCAiTGVmdCBPdXRwdXQgTWl4ZXIifSwKKwl7IkxTUEsiLCBOVUxMLCAiTGVmdCBTcGVha2VyIE91dCJ9LAorCisJLyogQm9vc3QgTWl4ZXIgKi8KKwl7IlJpZ2h0IEFEQyIsIE5VTEwsICJSaWdodCBCb29zdCBNaXhlciJ9LAorCisJeyJSaWdodCBCb29zdCBNaXhlciIsIE5VTEwsICJSQVVYIn0sCisJeyJSaWdodCBCb29zdCBNaXhlciIsIE5VTEwsICJSaWdodCBDYXB0dXJlIFBHQSJ9LAorCXsiUmlnaHQgQm9vc3QgTWl4ZXIiLCBOVUxMLCAiUjIifSwKKworCXsiTGVmdCBBREMiLCBOVUxMLCAiTGVmdCBCb29zdCBNaXhlciJ9LAorCisJeyJMZWZ0IEJvb3N0IE1peGVyIiwgTlVMTCwgIkxBVVgifSwKKwl7IkxlZnQgQm9vc3QgTWl4ZXIiLCBOVUxMLCAiTGVmdCBDYXB0dXJlIFBHQSJ9LAorCXsiTGVmdCBCb29zdCBNaXhlciIsIE5VTEwsICJMMiJ9LAorCisJLyogSW5wdXQgUEdBICovCisJeyJSaWdodCBDYXB0dXJlIFBHQSIsIE5VTEwsICJSaWdodCBJbnB1dCBNaXhlciJ9LAorCXsiTGVmdCBDYXB0dXJlIFBHQSIsIE5VTEwsICJMZWZ0IElucHV0IE1peGVyIn0sCisKKwl7IlJpZ2h0IElucHV0IE1peGVyIiwgIlIyIFN3aXRjaCIsICJSMiJ9LAorCXsiUmlnaHQgSW5wdXQgTWl4ZXIiLCAiTWljTiBTd2l0Y2giLCAiUk1JQ04ifSwKKwl7IlJpZ2h0IElucHV0IE1peGVyIiwgIk1pY1AgU3dpdGNoIiwgIlJNSUNQIn0sCisKKwl7IkxlZnQgSW5wdXQgTWl4ZXIiLCAiTDIgU3dpdGNoIiwgIkwyIn0sCisJeyJMZWZ0IElucHV0IE1peGVyIiwgIk1pY04gU3dpdGNoIiwgIkxNSUNOIn0sCisJeyJMZWZ0IElucHV0IE1peGVyIiwgIk1pY1AgU3dpdGNoIiwgIkxNSUNQIn0sCit9OworCitzdGF0aWMgaW50IHdtODk3OF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTc4X2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204OTc4X2RhcG1fd2lkZ2V0cykpOworCisJLyogc2V0IHVwIHRoZSBXTTg5NzggYXVkaW8gbWFwICovCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKworCXJldHVybiAwOworfQorCisvKiBQTEwgZGl2aXNvcnMgKi8KK3N0cnVjdCB3bTg5NzhfcGxsX2RpdiB7CisJdTMyIGs7CisJdTggbjsKKwl1OCBkaXYyOworfTsKKworI2RlZmluZSBGSVhFRF9QTExfU0laRSAoMSA8PCAyNCkKKworc3RhdGljIHZvaWQgcGxsX2ZhY3RvcnMoc3RydWN0IHdtODk3OF9wbGxfZGl2ICpwbGxfZGl2LCB1bnNpZ25lZCBpbnQgdGFyZ2V0LAorCQkJdW5zaWduZWQgaW50IHNvdXJjZSkKK3sKKwl1NjQga19wYXJ0OworCXVuc2lnbmVkIGludCBrLCBuX2Rpdiwgbl9tb2Q7CisKKwluX2RpdiA9IHRhcmdldCAvIHNvdXJjZTsKKwlpZiAobl9kaXYgPCA2KSB7CisJCXNvdXJjZSA+Pj0gMTsKKwkJcGxsX2Rpdi0+ZGl2MiA9IDE7CisJCW5fZGl2ID0gdGFyZ2V0IC8gc291cmNlOworCX0gZWxzZSB7CisJCXBsbF9kaXYtPmRpdjIgPSAwOworCX0KKworCWlmIChuX2RpdiA8IDYgfHwgbl9kaXYgPiAxMikKKwkJZGV2X3dhcm4od204OTc4X2NvZGVjLT5kZXYsCisJCQkgIldNODk3OCBOIHZhbHVlIGV4Y2VlZHMgcmVjb21tZW5kZWQgcmFuZ2UhIE4gPSAldVxuIiwKKwkJCSBuX2Rpdik7CisKKwlwbGxfZGl2LT5uID0gbl9kaXY7CisJbl9tb2QgPSB0YXJnZXQgLSBzb3VyY2UgKiBuX2RpdjsKKwlrX3BhcnQgPSBGSVhFRF9QTExfU0laRSAqIChsb25nIGxvbmcpbl9tb2QgKyBzb3VyY2UgLyAyOworCisJZG9fZGl2KGtfcGFydCwgc291cmNlKTsKKworCWsgPSBrX3BhcnQgJiAweEZGRkZGRkZGOworCisJcGxsX2Rpdi0+ayA9IGs7Cit9CisKKy8qIE1DTEsgZGl2aWRlcnMgKi8KK3N0YXRpYyBjb25zdCBpbnQgbWNsa19udW1lcmF0b3JbXQk9IHsxLCAzLCAyLCAzLCA0LCA2LCA4LCAxMn07CitzdGF0aWMgY29uc3QgaW50IG1jbGtfZGVub21pbmF0b3JbXQk9IHsxLCAyLCAxLCAxLCAxLCAxLCAxLCAxfTsKKworLyoKKyAqIGZpbmQgaW5kZXggPj0gaWR4LCBzdWNoIHRoYXQsIGZvciBhIGdpdmVuIGZfb3V0LAorICogMyAqIGZfbWNsayAvIDQgPD0gZl9QTExPVVQgPCAxMyAqIGZfbWNsayAvIDQKKyAqIGZfb3V0IGNhbiBiZSBmXzI1NmZzIG9yIGZfb3BjbGssIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIGZfMjU2ZnMuIENhbiBiZQorICogZ2VuZXJhbGlzZWQgZm9yIGZfb3BjbGsgd2l0aCBzdWl0YWJsZSBjb2VmZmljaWVudCBhcnJheXMsIGJ1dCBjdXJyZW50bHkKKyAqIHRoZSBPUENMSyBkaXZpc29yIGlzIGNhbGN1bGF0ZWQgZGlyZWN0bHksIG5vdCBpdGVyYXRpdmVseS4KKyAqLworc3RhdGljIGludCB3bTg5NzhfZW51bV9tY2xrKHVuc2lnbmVkIGludCBmX291dCwgdW5zaWduZWQgaW50IGZfbWNsaywKKwkJCSAgICB1bnNpZ25lZCBpbnQgKmZfcGxsb3V0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWNsa19udW1lcmF0b3IpOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGZfcGxsb3V0X3g0ID0gNCAqIGZfb3V0ICogbWNsa19udW1lcmF0b3JbaV0gLworCQkJbWNsa19kZW5vbWluYXRvcltpXTsKKwkJaWYgKDMgKiBmX21jbGsgPD0gZl9wbGxvdXRfeDQgJiYgZl9wbGxvdXRfeDQgPCAxMyAqIGZfbWNsaykgeworCQkJKmZfcGxsb3V0ID0gZl9wbGxvdXRfeDQgLyA0OworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIENhbGN1bGF0ZSBpbnRlcm5hbCBmcmVxdWVuY2llcyBhbmQgZGl2aWRlcnMsIGFjY29yZGluZyB0byBGaWd1cmUgNDAKKyAqICJQTEwgYW5kIENsb2NrIFNlbGVjdCBDaXJjdWl0IiBpbiBXTTg5NzggZGF0YXNoZWV0IFJldi4gMi42CisgKi8KK3N0YXRpYyBpbnQgd204OTc4X2NvbmZpZ3VyZV9wbGwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5NzhfcHJpdiAqd204OTc4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgd204OTc4X3BsbF9kaXYgcGxsX2RpdjsKKwl1bnNpZ25lZCBpbnQgZl9vcGNsayA9IHdtODk3OC0+Zl9vcGNsaywgZl9tY2xrID0gd204OTc4LT5mX21jbGssCisJCWZfMjU2ZnMgPSB3bTg5NzgtPmZfMjU2ZnM7CisJdW5zaWduZWQgaW50IGYyOworCisJaWYgKCFmX21jbGspCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZfb3BjbGspIHsKKwkJdW5zaWduZWQgaW50IG9wY2xrX2RpdjsKKwkJLyogQ2Fubm90IHNldCB1cCBNQ0xLIGRpdmlkZXIgbm93LCBkbyBsYXRlciAqLworCQl3bTg5NzgtPm1jbGtfaWR4ID0gLTE7CisKKwkJLyoKKwkJICogVGhlIHVzZXIgbmVlZHMgT1BDTEsuIENob29zZSBPUENMS0RJViB0byBwdXQKKwkJICogNiA8PSBSID0gZjIgLyBmMSA8IDEzLCAxIDw9IE9QQ0xLRElWIDw9IDQuCisJCSAqIGZfb3BjbGsgPSBmX21jbGsgKiBwcmVzY2FsZSAqIFIgLyA0IC8gT1BDTEtESVYsIHdoZXJlCisJCSAqIHByZXNjYWxlID0gMSwgb3IgcHJlc2NhbGUgPSAyLiBQcmVzY2FsZSBpcyBjYWxjdWxhdGVkIGluc2lkZQorCQkgKiBwbGxfZmFjdG9ycygpLiBXZSBoYXZlIHRvIHNlbGVjdCBmX1BMTE9VVCwgc3VjaCB0aGF0CisJCSAqIGZfbWNsayAqIDMgLyA0IDw9IGZfUExMT1VUIDwgZl9tY2xrICogMTMgLyA0LiBNdXN0IGJlCisJCSAqIGZfbWNsayAqIDMgLyAxNiA8PSBmX29wY2xrIDwgZl9tY2xrICogMTMgLyA0LgorCQkgKi8KKwkJaWYgKDE2ICogZl9vcGNsayA8IDMgKiBmX21jbGsgfHwgNCAqIGZfb3BjbGsgPj0gMTMgKiBmX21jbGspCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoNCAqIGZfb3BjbGsgPCAzICogZl9tY2xrKQorCQkJLyogSGF2ZSB0byB1c2UgT1BDTEtESVYgKi8KKwkJCW9wY2xrX2RpdiA9ICgzICogZl9tY2xrIC8gNCArIGZfb3BjbGsgLSAxKSAvIGZfb3BjbGs7CisJCWVsc2UKKwkJCW9wY2xrX2RpdiA9IDE7CisKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJXM6IE9QQ0xLRElWPSVkXG4iLCBfX2Z1bmNfXywgb3BjbGtfZGl2KTsKKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfR1BJT19DT05UUk9MLCAweDMwLAorCQkJCSAgICAob3BjbGtfZGl2IC0gMSkgPDwgNCk7CisKKwkJd204OTc4LT5mX3BsbG91dCA9IGZfb3BjbGsgKiBvcGNsa19kaXY7CisJfSBlbHNlIGlmIChmXzI1NmZzKSB7CisJCS8qCisJCSAqIE5vdCB1c2luZyBPUENMSywgYnV0IFBMTCBpcyB1c2VkIGZvciB0aGUgY29kZWMsIGNob29zZSBSOgorCQkgKiA2IDw9IFIgPSBmMiAvIGYxIDwgMTMsIHRvIHB1dCAxIDw9IE1DTEtESVYgPD0gMTIuCisJCSAqIGZfMjU2ZnMgPSBmX21jbGsgKiBwcmVzY2FsZSAqIFIgLyA0IC8gTUNMS0RJViwgd2hlcmUKKwkJICogcHJlc2NhbGUgPSAxLCBvciBwcmVzY2FsZSA9IDIuIFByZXNjYWxlIGlzIGNhbGN1bGF0ZWQgaW5zaWRlCisJCSAqIHBsbF9mYWN0b3JzKCkuIFdlIGhhdmUgdG8gc2VsZWN0IGZfUExMT1VULCBzdWNoIHRoYXQKKwkJICogZl9tY2xrICogMyAvIDQgPD0gZl9QTExPVVQgPCBmX21jbGsgKiAxMyAvIDQuIE11c3QgYmUKKwkJICogZl9tY2xrICogMyAvIDQ4IDw9IGZfMjU2ZnMgPCBmX21jbGsgKiAxMyAvIDQuIFRoaXMgbWVhbnMgTUNMSworCQkgKiBtdXN0IGJlIDMuNzgxTUh6IDw9IGZfTUNMSyA8PSAzMi43NjhNSHoKKwkJICovCisJCWludCBpZHggPSB3bTg5NzhfZW51bV9tY2xrKGZfMjU2ZnMsIGZfbWNsaywgJndtODk3OC0+Zl9wbGxvdXQpOworCQlpZiAoaWR4IDwgMCkKKwkJCXJldHVybiBpZHg7CisKKwkJd204OTc4LT5tY2xrX2lkeCA9IGlkeDsKKworCQkvKiBHUElPMSBpbnRvIGRlZmF1bHQgbW9kZSBhcyBpbnB1dCAtIGJlZm9yZSBjb25maWd1cmluZyBQTEwgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0dQSU9fQ09OVFJPTCwgNywgMCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZjIgPSB3bTg5NzgtPmZfcGxsb3V0ICogNDsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzOiBmX01DTEs9JXVIeiwgZl9QTExPVVQ9JXVIelxuIiwgX19mdW5jX18sCisJCXdtODk3OC0+Zl9tY2xrLCB3bTg5NzgtPmZfcGxsb3V0KTsKKworCXBsbF9mYWN0b3JzKCZwbGxfZGl2LCBmMiwgd204OTc4LT5mX21jbGspOworCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJXM6IGNhbGN1bGF0ZWQgUExMIE49MHgleCwgSz0weCV4LCBkaXYyPSVkXG4iLAorCQlfX2Z1bmNfXywgcGxsX2Rpdi5uLCBwbGxfZGl2LmssIHBsbF9kaXYuZGl2Mik7CisKKwkvKiBUdXJuIFBMTCBvZmYgZm9yIGNvbmZpZ3VyYXRpb24uLi4gKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8xLCAweDIwLCAwKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9QTExfTiwgKHBsbF9kaXYuZGl2MiA8PCA0KSB8IHBsbF9kaXYubik7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1BMTF9LMSwgcGxsX2Rpdi5rID4+IDE4KTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfUExMX0syLCAocGxsX2Rpdi5rID4+IDkpICYgMHgxZmYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9QTExfSzMsIHBsbF9kaXYuayAmIDB4MWZmKTsKKworCS8qIC4uLmFuZCBvbiBhZ2FpbiAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MjAsIDB4MjApOworCisJaWYgKGZfb3BjbGspCisJCS8qIE91dHB1dCBQTEwgKE9QQ0xLKSB0byBHUElPMSAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfR1BJT19DT05UUk9MLCA3LCA0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogQ29uZmlndXJlIFdNODk3OCBjbG9jayBkaXZpZGVycy4KKyAqLworc3RhdGljIGludCB3bTg5Nzhfc2V0X2RhaV9jbGtkaXYoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCQkJIGludCBkaXZfaWQsIGludCBkaXYpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGRpdl9pZCkgeworCWNhc2UgV004OTc4X09QQ0xLUkFURToKKwkJd204OTc4LT5mX29wY2xrID0gZGl2OworCisJCWlmICh3bTg5NzgtPmZfbWNsaykKKwkJCS8qCisJCQkgKiBXZSBrbm93IHRoZSBNQ0xLIGZyZXF1ZW5jeSwgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZAorCQkJICogT1BDTEssIGNvbmZpZ3VyZSB0aGUgUExMIGJhc2VkIG9uIHRoYXQgYW5kIHN0YXJ0IGl0CisJCQkgKiBhbmQgT1BDTEsgaW1tZWRpYXRlbHkuIFdlIHdpbGwgY29uZmlndXJlIFBMTCB0byBtYXRjaAorCQkJICogdXNlci1yZXF1ZXN0ZWQgT1BDTEsgZnJxdWVuY3kgYXMgZ29vZCBhcyBwb3NzaWJsZS4KKwkJCSAqIEluIGZhY3QsIGl0IGlzIGxpa2VseSwgdGhhdCBtYXRjaGluZyB0aGUgc2FtcGxpbmcKKwkJCSAqIHJhdGUsIHdoZW4gaXQgYmVjb21lcyBrbm93biwgaXMgbW9yZSBpbXBvcnRhbnQsIGFuZAorCQkJICogd2Ugd2lsbCBub3QgYmUgcmVjb25maWd1cmluZyBQTEwgdGhlbiwgYmVjYXVzZSB3ZQorCQkJICogbXVzdCBub3QgaW50ZXJydXB0IE9QQ0xLLiBCdXQgaXQgc2hvdWxkIGJlIGZpbmUsCisJCQkgKiBiZWNhdXNlIHR5cGljYWxseSB0aGUgdXNlciB3aWxsIHJlcXVlc3QgT1BDTEsgdG8gcnVuCisJCQkgKiBhdCAyNTZmcyBvciA1MTJmcywgYW5kIGZvciB0aGVzZSBjYXNlcyB3ZSB3aWxsIGFsc28KKwkJCSAqIGZpbmQgYW4gZXhhY3QgTUNMSyBkaXZpZGVyIGNvbmZpZ3VyYXRpb24gLSBpdCB3aWxsCisJCQkgKiBiZSBlcXVhbCB0byBvciBkb3VibGUgdGhlIE9QQ0xLIGRpdmlzb3IuCisJCQkgKi8KKwkJCXJldCA9IHdtODk3OF9jb25maWd1cmVfcGxsKGNvZGVjKTsKKwkJYnJlYWs7CisJY2FzZSBXTTg5NzhfQkNMS0RJVjoKKwkJaWYgKGRpdiAmIH4weDFjKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9DTE9DS0lORywgMHgxYywgZGl2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJXM6IElEICVkLCB2YWx1ZSAldVxuIiwgX19mdW5jX18sIGRpdl9pZCwgZGl2KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBAZnJlcToJd2hlbiAuc2V0X3BsbCgpIHVzIG5vdCB1c2VkLCBmcmVxIGlzIGNvZGVjIE1DTEsgaW5wdXQgZnJlcXVlbmN5CisgKi8KK3N0YXRpYyBpbnQgd204OTc4X3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCBpbnQgY2xrX2lkLAorCQkJCSB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCB3bTg5NzhfcHJpdiAqd204OTc4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzOiBJRCAlZCwgZnJlcSAldVxuIiwgX19mdW5jX18sIGNsa19pZCwgZnJlcSk7CisKKwlpZiAoZnJlcSkgeworCQl3bTg5NzgtPmZfbWNsayA9IGZyZXE7CisKKwkJLyogRXZlbiBpZiBNQ0xLIGlzIHVzZWQgZm9yIHN5c3RlbSBjbG9jaywgbWlnaHQgaGF2ZSB0byBkcml2ZSBPUENMSyAqLworCQlpZiAod204OTc4LT5mX29wY2xrKQorCQkJcmV0ID0gd204OTc4X2NvbmZpZ3VyZV9wbGwoY29kZWMpOworCisJCS8qIE91ciBzeXNjbGsgaXMgZml4ZWQgdG8gMjU2ICogZnMsIHdpbGwgY29uZmlndXJlIGluIC5od19wYXJhbXMoKSAgKi8KKworCQlpZiAoIXJldCkKKwkJCXdtODk3OC0+c3lzY2xrID0gY2xrX2lkOworCX0KKworCWlmICh3bTg5NzgtPnN5c2NsayA9PSBXTTg5NzhfUExMICYmICghZnJlcSB8fCBjbGtfaWQgPT0gV004OTc4X01DTEspKSB7CisJCS8qIENsb2NrIENPREVDIGRpcmVjdGx5IGZyb20gTUNMSyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfQ0xPQ0tJTkcsIDB4MTAwLCAwKTsKKworCQkvKiBHUElPMSBpbnRvIGRlZmF1bHQgbW9kZSBhcyBpbnB1dCAtIGJlZm9yZSBjb25maWd1cmluZyBQTEwgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0dQSU9fQ09OVFJPTCwgNywgMCk7CisKKwkJLyogVHVybiBvZmYgUExMICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MjAsIDApOworCQl3bTg5NzgtPnN5c2NsayA9IFdNODk3OF9NQ0xLOworCQl3bTg5NzgtPmZfcGxsb3V0ID0gMDsKKwkJd204OTc4LT5mX29wY2xrID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2V0IEFEQyBhbmQgVm9pY2UgREFDIGZvcm1hdC4KKyAqLworc3RhdGljIGludCB3bTg5Nzhfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwkvKgorCSAqIEJDTEsgcG9sYXJpdHkgbWFzayA9IDB4MTAwLCBMUkMgY2xvY2sgcG9sYXJpdHkgbWFzayA9IDB4ODAsCisJICogRGF0YSBGb3JtYXQgbWFzayA9IDB4MTg6IGFsbCB3aWxsIGJlIGNhbGN1bGF0ZWQgYW5ldworCSAqLworCXUxNiBpZmFjZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTc4X0FVRElPX0lOVEVSRkFDRSkgJiB+MHgxOTg7CisJdTE2IGNsayA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTc4X0NMT0NLSU5HKTsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBzZXQgbWFzdGVyL3NsYXZlIGF1ZGlvIGludGVyZmFjZSAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWNsayB8PSAxOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWNsayAmPSB+MTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogaW50ZXJmYWNlIGZvcm1hdCAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJaWZhY2UgfD0gMHgxMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJaWZhY2UgfD0gMHg4OworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQlpZmFjZSB8PSAweDE4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjbG9jayBpbnZlcnNpb24gKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJaWZhY2UgfD0gMHgxODA7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCWlmYWNlIHw9IDB4MTAwOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQlpZmFjZSB8PSAweDgwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfQVVESU9fSU5URVJGQUNFLCBpZmFjZSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X0NMT0NLSU5HLCBjbGspOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgUENNIERBSSBiaXQgc2l6ZSBhbmQgc2FtcGxlIHJhdGUuCisgKi8KK3N0YXRpYyBpbnQgd204OTc4X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCXN0cnVjdCB3bTg5NzhfcHJpdiAqd204OTc4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwkvKiBXb3JkIGxlbmd0aCBtYXNrID0gMHg2MCAqLworCXUxNiBpZmFjZV9jdGwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3OF9BVURJT19JTlRFUkZBQ0UpICYgfjB4NjA7CisJLyogU2FtcGxpbmcgcmF0ZSBtYXNrID0gMHhlIChmb3IgZmlsdGVycykgKi8KKwl1MTYgYWRkX2N0bCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTc4X0FERElUSU9OQUxfQ09OVFJPTCkgJiB+MHhlOworCXUxNiBjbGtpbmcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3OF9DTE9DS0lORyk7CisJZW51bSB3bTg5Nzhfc3lzY2xrX3NyYyBjdXJyZW50X2Nsa19pZCA9IGNsa2luZyAmIDB4MTAwID8KKwkJV004OTc4X1BMTCA6IFdNODk3OF9NQ0xLOworCXVuc2lnbmVkIGludCBmX3NlbCwgZGlmZiwgZGlmZl9iZXN0ID0gSU5UX01BWDsKKwlpbnQgaSwgYmVzdCA9IDA7CisKKwlpZiAoIXdtODk3OC0+Zl9tY2xrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGJpdCBzaXplICovCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJaWZhY2VfY3RsIHw9IDB4MjA7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWlmYWNlX2N0bCB8PSAweDQwOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQlpZmFjZV9jdGwgfD0gMHg2MDsKKwkJYnJlYWs7CisJfQorCisJLyogZmlsdGVyIGNvZWZmaWNpZW50ICovCisJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CisJY2FzZSA4MDAwOgorCQlhZGRfY3RsIHw9IDB4NSA8PCAxOworCQlicmVhazsKKwljYXNlIDExMDI1OgorCQlhZGRfY3RsIHw9IDB4NCA8PCAxOworCQlicmVhazsKKwljYXNlIDE2MDAwOgorCQlhZGRfY3RsIHw9IDB4MyA8PCAxOworCQlicmVhazsKKwljYXNlIDIyMDUwOgorCQlhZGRfY3RsIHw9IDB4MiA8PCAxOworCQlicmVhazsKKwljYXNlIDMyMDAwOgorCQlhZGRfY3RsIHw9IDB4MSA8PCAxOworCQlicmVhazsKKwljYXNlIDQ0MTAwOgorCWNhc2UgNDgwMDA6CisJCWJyZWFrOworCX0KKworCS8qIFNhbXBsaW5nIHJhdGUgaXMga25vd24gbm93LCBjYW4gY29uZmlndXJlIHRoZSBNQ0xLIGRpdmlkZXIgKi8KKwl3bTg5NzgtPmZfMjU2ZnMgPSBwYXJhbXNfcmF0ZShwYXJhbXMpICogMjU2OworCisJaWYgKHdtODk3OC0+c3lzY2xrID09IFdNODk3OF9NQ0xLKSB7CisJCXdtODk3OC0+bWNsa19pZHggPSAtMTsKKwkJZl9zZWwgPSB3bTg5NzgtPmZfbWNsazsKKwl9IGVsc2UgeworCQlpZiAoIXdtODk3OC0+Zl9wbGxvdXQpIHsKKwkJCS8qIFdlIG9ubHkgZW50ZXIgaGVyZSwgaWYgT1BDTEsgaXMgbm90IHVzZWQgKi8KKwkJCWludCByZXQgPSB3bTg5NzhfY29uZmlndXJlX3BsbChjb2RlYyk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCWZfc2VsID0gd204OTc4LT5mX3BsbG91dDsKKwl9CisKKwlpZiAod204OTc4LT5tY2xrX2lkeCA8IDApIHsKKwkJLyogRWl0aGVyIE1DTEsgaXMgdXNlZCBkaXJlY3RseSwgb3IgT1BDTEsgaXMgdXNlZCAqLworCQlpZiAoZl9zZWwgPCB3bTg5NzgtPmZfMjU2ZnMgfHwgZl9zZWwgPiAxMiAqIHdtODk3OC0+Zl8yNTZmcykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1jbGtfbnVtZXJhdG9yKTsgaSsrKSB7CisJCQlkaWZmID0gYWJzKHdtODk3OC0+Zl8yNTZmcyAqIDMgLQorCQkJCSAgIGZfc2VsICogMyAqIG1jbGtfZGVub21pbmF0b3JbaV0gLyBtY2xrX251bWVyYXRvcltpXSk7CisKKwkJCWlmIChkaWZmIDwgZGlmZl9iZXN0KSB7CisJCQkJZGlmZl9iZXN0ID0gZGlmZjsKKwkJCQliZXN0ID0gaTsKKwkJCX0KKworCQkJaWYgKCFkaWZmKQorCQkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJLyogT1BDTEsgbm90IHVzZWQsIGNvZGVjIGRyaXZlbiBieSBQTEwgKi8KKwkJYmVzdCA9IHdtODk3OC0+bWNsa19pZHg7CisJCWRpZmYgPSAwOworCX0KKworCWlmIChkaWZmKQorCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiSW1wcmVjaXNlIHNhbXBsaW5nIHJhdGU6ICV1SHolc1xuIiwKKwkJCWZfc2VsICogbWNsa19kZW5vbWluYXRvcltiZXN0XSAvIG1jbGtfbnVtZXJhdG9yW2Jlc3RdIC8gMjU2LAorCQkJd204OTc4LT5zeXNjbGsgPT0gV004OTc4X01DTEsgPworCQkJIiwgY29uc2lkZXIgdXNpbmcgUExMIiA6ICIiKTsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzOiBmbXQgJWQsIHJhdGUgJXUsIE1DTEsgZGl2aXNvciAjJWRcbiIsIF9fZnVuY19fLAorCQlwYXJhbXNfZm9ybWF0KHBhcmFtcyksIHBhcmFtc19yYXRlKHBhcmFtcyksIGJlc3QpOworCisJLyogTUNMSyBkaXZpc29yIG1hc2sgPSAweGUwICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0NMT0NLSU5HLCAweGUwLCBiZXN0IDw8IDUpOworCisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X0FVRElPX0lOVEVSRkFDRSwgaWZhY2VfY3RsKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfQURESVRJT05BTF9DT05UUk9MLCBhZGRfY3RsKTsKKworCWlmICh3bTg5NzgtPnN5c2NsayAhPSBjdXJyZW50X2Nsa19pZCkgeworCQlpZiAod204OTc4LT5zeXNjbGsgPT0gV004OTc4X1BMTCkKKwkJCS8qIFJ1biBDT0RFQyBmcm9tIFBMTCBpbnN0ZWFkIG9mIE1DTEsgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9DTE9DS0lORywKKwkJCQkJICAgIDB4MTAwLCAweDEwMCk7CisJCWVsc2UKKwkJCS8qIENsb2NrIENPREVDIGRpcmVjdGx5IGZyb20gTUNMSyAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0NMT0NLSU5HLCAweDEwMCwgMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTc4X211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlczogJWRcbiIsIF9fZnVuY19fLCBtdXRlKTsKKworCWlmIChtdXRlKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfREFDX0NPTlRST0wsIDB4NDAsIDB4NDApOworCWVsc2UKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0RBQ19DT05UUk9MLCAweDQwLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk3OF9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXUxNiBwb3dlcjEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEpICYgfjM7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJcG93ZXIxIHw9IDE7ICAvKiBWTUlEIDc1ayAqLworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8xLCBwb3dlcjEpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQkvKiBiaXQgMzogZW5hYmxlIGJpYXMsIGJpdCAyOiBlbmFibGUgSS9PIHRpZSBvZmYgYnVmZmVyICovCisJCXBvd2VyMSB8PSAweGM7CisKKwkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCS8qIEluaXRpYWwgY2FwIGNoYXJnZSBhdCBWTUlEIDVrICovCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICAgIHBvd2VyMSB8IDB4Myk7CisJCQltZGVsYXkoMTAwKTsKKwkJfQorCisJCXBvd2VyMSB8PSAweDI7ICAvKiBWTUlEIDUwMGsgKi8KKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMSwgcG93ZXIxKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCQkvKiBQcmVzZXJ2ZSBQTEwgLSBPUENMSyBtYXkgYmUgdXNlZCBieSBzb21lb25lICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIH4weDIwLCAwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwgMCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsIDApOworCQlicmVhazsKKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlczogJWQsICV4XG4iLCBfX2Z1bmNfXywgbGV2ZWwsIHBvd2VyMSk7CisKKwljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdNODk3OF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFwKKwlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5NzhfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gd204OTc4X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204OTc4X211dGUsCisJLnNldF9mbXQJPSB3bTg5Nzhfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg5Nzhfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9zeXNjbGsJPSB3bTg5Nzhfc2V0X2RhaV9zeXNjbGssCit9OworCisvKiBBbHNvIHN1cHBvcnRzIDEya0h6ICovCitzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTc4X2RhaSA9IHsKKwkubmFtZSA9ICJXTTg5NzggSGlGaSIsCisJLmlkID0gMSwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJLmZvcm1hdHMgPSBXTTg5NzhfRk9STUFUUywKKwl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJLmZvcm1hdHMgPSBXTTg5NzhfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmd204OTc4X2RhaV9vcHMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwod204OTc4X2RhaSk7CisKK3N0YXRpYyBpbnQgd204OTc4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODk3OF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJLyogQWxzbyBzd2l0Y2ggUExMIG9mZiAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTc4X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGk7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisKKwkvKiBTeW5jIHJlZ19jYWNoZSB3aXRoIHRoZSBoYXJkd2FyZSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk3OF9yZWcpOyBpKyspIHsKKwkJaWYgKGkgPT0gV004OTc4X1JFU0VUKQorCQkJY29udGludWU7CisJCWlmIChjYWNoZVtpXSAhPSB3bTg5NzhfcmVnW2ldKQorCQkJc25kX3NvY193cml0ZShjb2RlYywgaSwgY2FjaGVbaV0pOworCX0KKworCXdtODk3OF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJaWYgKHdtODk3OC0+Zl9wbGxvdXQpCisJCS8qIFN3aXRjaCBQTEwgb24gKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMSwgMHgyMCwgMHgyMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NzhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh3bTg5NzhfY29kZWMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb2RlYyBkZXZpY2Ugbm90IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204OTc4X2NvZGVjOworCWNvZGVjID0gd204OTc4X2NvZGVjOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zOiAlZFxuIiwgcmV0KTsKKwkJZ290byBwY21fZXJyOworCX0KKworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5Nzhfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKHdtODk3OF9zbmRfY29udHJvbHMpKTsKKwl3bTg5NzhfYWRkX3dpZGdldHMoY29kZWMpOworCitwY21fZXJyOgorCXJldHVybiByZXQ7Cit9CisKKy8qIHBvd2VyIGRvd24gY2hpcCAqLworc3RhdGljIGludCB3bTg5NzhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg5NzggPSB7CisJLnByb2JlCQk9IHdtODk3OF9wcm9iZSwKKwkucmVtb3ZlCQk9IHdtODk3OF9yZW1vdmUsCisJLnN1c3BlbmQJPSB3bTg5Nzhfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHdtODk3OF9yZXN1bWUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg5NzgpOworCisvKgorICogVGhlc2UgcmVnaXN0ZXJzIGNvbnRhaW4gYW4gInVwZGF0ZSIgYml0IC0gYml0IDguIFRoaXMgbWVhbnMsIGZvciBleGFtcGxlLAorICogdGhhdCBvbmUgY2FuIHdyaXRlIG5ldyBEQUMgZGlnaXRhbCB2b2x1bWUgZm9yIGJvdGggY2hhbm5lbHMsIGJ1dCBvbmx5IHdoZW4KKyAqIHRoZSB1cGRhdGUgYml0IGlzIHNldCwgd2lsbCBhbHNvIHRoZSB2b2x1bWUgYmUgdXBkYXRlZCAtIHNpbXVsdGFuZW91c2x5IGZvcgorICogYm90aCBjaGFubmVscy4KKyAqLworc3RhdGljIGNvbnN0IGludCB1cGRhdGVfcmVnW10gPSB7CisJV004OTc4X0xFRlRfREFDX0RJR0lUQUxfVk9MVU1FLAorCVdNODk3OF9SSUdIVF9EQUNfRElHSVRBTF9WT0xVTUUsCisJV004OTc4X0xFRlRfQURDX0RJR0lUQUxfVk9MVU1FLAorCVdNODk3OF9SSUdIVF9BRENfRElHSVRBTF9WT0xVTUUsCisJV004OTc4X0xFRlRfSU5QX1BHQV9DT05UUk9MLAorCVdNODk3OF9SSUdIVF9JTlBfUEdBX0NPTlRST0wsCisJV004OTc4X0xPVVQxX0hQX0NPTlRST0wsCisJV004OTc4X1JPVVQxX0hQX0NPTlRST0wsCisJV004OTc4X0xPVVQyX1NQS19DT05UUk9MLAorCVdNODk3OF9ST1VUMl9TUEtfQ09OVFJPTCwKK307CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODk3OF9yZWdpc3RlcihzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCkKK3sKKwlpbnQgcmV0LCBpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5NzgtPmNvZGVjOworCisJaWYgKHdtODk3OF9jb2RlYykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIFdNODk3OCBpcyByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBTZXQgZGVmYXVsdCBzeXN0ZW0gY2xvY2sgdG8gUExMLCBpdCBpcyBtb3JlIHByZWNpc2UsIHRoaXMgaXMgYWxzbyB0aGUKKwkgKiBkZWZhdWx0IGhhcmR3YXJlIHNldHRpbmcKKwkgKi8KKwl3bTg5NzgtPnN5c2NsayA9IFdNODk3OF9QTEw7CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODk3ODsKKwljb2RlYy0+bmFtZSA9ICJXTTg5NzgiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKKwljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg5Nzhfc2V0X2JpYXNfbGV2ZWw7CisJY29kZWMtPmRhaSA9ICZ3bTg5NzhfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBXTTg5NzhfQ0FDSEVSRUdOVU07CisJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg5NzgtPnJlZ19jYWNoZTsKKworCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA3LCA5LCBTTkRfU09DX0kyQyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204OTc4X3JlZywgc2l6ZW9mKHdtODk3OF9yZWcpKTsKKworCS8qCisJICogU2V0IHRoZSB1cGRhdGUgYml0IGluIGFsbCByZWdpc3RlcnMsIHRoYXQgaGF2ZSBvbmUuIFRoaXMgd2F5IGFsbAorCSAqIHdyaXRlcyB0byB0aG9zZSByZWdpc3RlcnMgd2lsbCBhbHNvIGNhdXNlIHRoZSB1cGRhdGUgYml0IHRvIGJlCisJICogd3JpdHRlbi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh1cGRhdGVfcmVnKTsgaSsrKQorCQkoKHUxNiAqKWNvZGVjLT5yZWdfY2FjaGUpW3VwZGF0ZV9yZWdbaV1dIHw9IDB4MTAwOworCisJLyogUmVzZXQgdGhlIGNvZGVjICovCisJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1JFU0VULCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwl3bTg5NzhfZGFpLmRldiA9IGNvZGVjLT5kZXY7CisKKwl3bTg5Nzhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCXdtODk3OF9jb2RlYyA9IGNvZGVjOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg5NzhfZGFpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NvZGVjOworCX0KKworCXJldHVybiAwOworCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKK2VycjoKKwlrZnJlZSh3bTg5NzgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgdm9pZCB3bTg5NzhfdW5yZWdpc3RlcihzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCkKK3sKKwl3bTg5Nzhfc2V0X2JpYXNfbGV2ZWwoJndtODk3OC0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODk3OF9kYWkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204OTc4LT5jb2RlYyk7CisJa2ZyZWUod204OTc4KTsKKwl3bTg5NzhfY29kZWMgPSBOVUxMOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg5NzhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB3bTg5NzhfcHJpdiAqd204OTc4OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCXdtODk3OCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg5NzhfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg5NzggPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZ3bTg5NzgtPmNvZGVjOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODk3OCk7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKworCWNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CisKKwlyZXR1cm4gd204OTc4X3JlZ2lzdGVyKHdtODk3OCk7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IHdtODk3OF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdtODk3OF9wcml2ICp3bTg5NzggPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl3bTg5NzhfdW5yZWdpc3Rlcih3bTg5NzgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204OTc4X2kyY19pZFtdID0geworCXsgIndtODk3OCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd204OTc4X2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg5NzhfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJXTTg5NzgiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9ICAgIHdtODk3OF9pMmNfcHJvYmUsCisJLnJlbW92ZSA9ICAgX19kZXZleGl0X3Aod204OTc4X2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IHdtODk3OF9pMmNfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bTg5NzhfbW9kaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmd204OTc4X2kyY19kcml2ZXIpOworfQorbW9kdWxlX2luaXQod204OTc4X21vZGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204OTc4X2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmd204OTc4X2kyY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204OTc4X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV004OTc4IGNvZGVjIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3OC5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmVjODMyCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzguaApAQCAtMCwwICsxLDg2IEBACisvKgorICogd204OTc4LmgJCS0tICBjb2RlYyBkcml2ZXIgZm9yIFdNODk3OAorICoKKyAqIENvcHlyaWdodCAyMDA5IEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX1dNODk3OF9IX18KKyNkZWZpbmUgX19XTTg5NzhfSF9fCisKKy8qCisgKiBSZWdpc3RlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgV004OTc4X1JFU0VUCQkJCTB4MDAKKyNkZWZpbmUgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMQkJMHgwMQorI2RlZmluZSBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8yCQkweDAyCisjZGVmaW5lIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMJCTB4MDMKKyNkZWZpbmUgV004OTc4X0FVRElPX0lOVEVSRkFDRQkJCTB4MDQKKyNkZWZpbmUgV004OTc4X0NPTVBBTkRJTkdfQ09OVFJPTAkJMHgwNQorI2RlZmluZSBXTTg5NzhfQ0xPQ0tJTkcJCQkJMHgwNgorI2RlZmluZSBXTTg5NzhfQURESVRJT05BTF9DT05UUk9MCQkweDA3CisjZGVmaW5lIFdNODk3OF9HUElPX0NPTlRST0wJCQkweDA4CisjZGVmaW5lIFdNODk3OF9KQUNLX0RFVEVDVF9DT05UUk9MXzEJCTB4MDkKKyNkZWZpbmUgV004OTc4X0RBQ19DT05UUk9MCQkJMHgwQQorI2RlZmluZSBXTTg5NzhfTEVGVF9EQUNfRElHSVRBTF9WT0xVTUUJCTB4MEIKKyNkZWZpbmUgV004OTc4X1JJR0hUX0RBQ19ESUdJVEFMX1ZPTFVNRQkJMHgwQworI2RlZmluZSBXTTg5NzhfSkFDS19ERVRFQ1RfQ09OVFJPTF8yCQkweDBECisjZGVmaW5lIFdNODk3OF9BRENfQ09OVFJPTAkJCTB4MEUKKyNkZWZpbmUgV004OTc4X0xFRlRfQURDX0RJR0lUQUxfVk9MVU1FCQkweDBGCisjZGVmaW5lIFdNODk3OF9SSUdIVF9BRENfRElHSVRBTF9WT0xVTUUJCTB4MTAKKyNkZWZpbmUgV004OTc4X0VRMQkJCQkweDEyCisjZGVmaW5lIFdNODk3OF9FUTIJCQkJMHgxMworI2RlZmluZSBXTTg5NzhfRVEzCQkJCTB4MTQKKyNkZWZpbmUgV004OTc4X0VRNAkJCQkweDE1CisjZGVmaW5lIFdNODk3OF9FUTUJCQkJMHgxNgorI2RlZmluZSBXTTg5NzhfREFDX0xJTUlURVJfMQkJCTB4MTgKKyNkZWZpbmUgV004OTc4X0RBQ19MSU1JVEVSXzIJCQkweDE5CisjZGVmaW5lIFdNODk3OF9OT1RDSF9GSUxURVJfMQkJCTB4MWIKKyNkZWZpbmUgV004OTc4X05PVENIX0ZJTFRFUl8yCQkJMHgxYworI2RlZmluZSBXTTg5NzhfTk9UQ0hfRklMVEVSXzMJCQkweDFkCisjZGVmaW5lIFdNODk3OF9OT1RDSF9GSUxURVJfNAkJCTB4MWUKKyNkZWZpbmUgV004OTc4X0FMQ19DT05UUk9MXzEJCQkweDIwCisjZGVmaW5lIFdNODk3OF9BTENfQ09OVFJPTF8yCQkJMHgyMQorI2RlZmluZSBXTTg5NzhfQUxDX0NPTlRST0xfMwkJCTB4MjIKKyNkZWZpbmUgV004OTc4X05PSVNFX0dBVEUJCQkweDIzCisjZGVmaW5lIFdNODk3OF9QTExfTgkJCQkweDI0CisjZGVmaW5lIFdNODk3OF9QTExfSzEJCQkJMHgyNQorI2RlZmluZSBXTTg5NzhfUExMX0syCQkJCTB4MjYKKyNkZWZpbmUgV004OTc4X1BMTF9LMwkJCQkweDI3CisjZGVmaW5lIFdNODk3OF8zRF9DT05UUk9MCQkJMHgyOQorI2RlZmluZSBXTTg5NzhfQkVFUF9DT05UUk9MCQkJMHgyYgorI2RlZmluZSBXTTg5NzhfSU5QVVRfQ09OVFJPTAkJCTB4MmMKKyNkZWZpbmUgV004OTc4X0xFRlRfSU5QX1BHQV9DT05UUk9MCQkweDJkCisjZGVmaW5lIFdNODk3OF9SSUdIVF9JTlBfUEdBX0NPTlRST0wJCTB4MmUKKyNkZWZpbmUgV004OTc4X0xFRlRfQURDX0JPT1NUX0NPTlRST0wJCTB4MmYKKyNkZWZpbmUgV004OTc4X1JJR0hUX0FEQ19CT09TVF9DT05UUk9MCQkweDMwCisjZGVmaW5lIFdNODk3OF9PVVRQVVRfQ09OVFJPTAkJCTB4MzEKKyNkZWZpbmUgV004OTc4X0xFRlRfTUlYRVJfQ09OVFJPTAkJMHgzMgorI2RlZmluZSBXTTg5NzhfUklHSFRfTUlYRVJfQ09OVFJPTAkJMHgzMworI2RlZmluZSBXTTg5NzhfTE9VVDFfSFBfQ09OVFJPTAkJCTB4MzQKKyNkZWZpbmUgV004OTc4X1JPVVQxX0hQX0NPTlRST0wJCQkweDM1CisjZGVmaW5lIFdNODk3OF9MT1VUMl9TUEtfQ09OVFJPTAkJMHgzNgorI2RlZmluZSBXTTg5NzhfUk9VVDJfU1BLX0NPTlRST0wJCTB4MzcKKyNkZWZpbmUgV004OTc4X09VVDNfTUlYRVJfQ09OVFJPTAkJMHgzOAorI2RlZmluZSBXTTg5NzhfT1VUNF9NSVhFUl9DT05UUk9MCQkweDM5CisKKyNkZWZpbmUgV004OTc4X0NBQ0hFUkVHTlVNCQkJNTgKKworLyogQ2xvY2sgZGl2aWRlciBJZCdzICovCitlbnVtIHdtODk3OF9jbGtfaWQgeworCVdNODk3OF9PUENMS1JBVEUsCisJV004OTc4X0JDTEtESVYsCit9OworCitlbnVtIHdtODk3OF9zeXNjbGtfc3JjIHsKKwlXTTg5NzhfUExMLAorCVdNODk3OF9NQ0xLCit9OworCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtODk3OF9kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTc4OworCisjZW5kaWYJLyogX19XTTg5NzhfSF9fICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYwppbmRleCAzNDE0ODFlLi5hNTRkYzc3YiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCkBAIC0xMzE5LDEwICsxMzE5LDYgQEAKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKLQkvKiB3ZSBvbmx5IG5lZWQgdG8gc3VzcGVuZCBpZiB3ZSBhcmUgYSB2YWxpZCBjYXJkICovCi0JaWYgKCFjb2RlYy0+Y2FyZCkKLQkJcmV0dXJuIDA7Ci0KIAl3bTg5OTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwogfQpAQCAtMTMzNSwxMCArMTMzMSw2IEBACiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKIAotCS8qIHdlIG9ubHkgbmVlZCB0byByZXN1bWUgaWYgd2UgYXJlIGEgdmFsaWQgY2FyZCAqLwotCWlmICghY29kZWMtPmNhcmQpCi0JCXJldHVybiAwOwotCiAJLyogU3luYyByZWdfY2FjaGUgd2l0aCB0aGUgaGFyZHdhcmUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTBfcmVnKTsgaSsrKSB7CiAJCWlmIChpICsgMSA9PSBXTTg5OTBfUkVTRVQpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTMuYwppbmRleCAyOTgxYWZhLi5iZjAyMmY2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogd204OTkzLmMgLS0gV004OTkzIEFMU0EgU29DIGF1ZGlvIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqIENvcHlyaWdodCAyMDA5LCAyMDEwIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKICAqCiAgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgogICoKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KQEAgLTI5LDYgKzMwLDE2IEBACiAjaW5jbHVkZSAid204OTkzLmgiCiAjaW5jbHVkZSAid21faHVicy5oIgogCisjZGVmaW5lIFdNODk5M19OVU1fU1VQUExJRVMgNgorc3RhdGljIGNvbnN0IGNoYXIgKndtODk5M19zdXBwbHlfbmFtZXNbV004OTkzX05VTV9TVVBQTElFU10gPSB7CisJIkRDVkREIiwKKwkiREJWREQiLAorCSJBVkREMSIsCisJIkFWREQyIiwKKwkiQ1BWREQiLAorCSJTUEtWREQiLAorfTsKKwogc3RhdGljIHUxNiB3bTg5OTNfcmVnX2RlZmF1bHRzW1dNODk5M19SRUdJU1RFUl9DT1VOVF0gPSB7CiAJMHg4OTkzLCAgICAgLyogUjAgICAtIFNvZnR3YXJlIFJlc2V0ICovCiAJMHgwMDAwLCAgICAgLyogUjEgICAtIFBvd2VyIE1hbmFnZW1lbnQgKDEpICovCkBAIC0yMTMsNyArMjI0LDkgQEAKIH07CiAKIHN0cnVjdCB3bTg5OTNfcHJpdiB7CisJc3RydWN0IHdtX2h1YnNfZGF0YSBodWJzX2RhdGE7CiAJdTE2IHJlZ19jYWNoZVtXTTg5OTNfUkVHSVNURVJfQ09VTlRdOworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW1dNODk5M19OVU1fU1VQUExJRVNdOwogCXN0cnVjdCB3bTg5OTNfcGxhdGZvcm1fZGF0YSBwZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKIAlpbnQgbWFzdGVyOwpAQCAtMjI3LDM2ICsyNDAsOSBAQAogCWludCBjbGFzc193X3VzZXJzOwogCXVuc2lnbmVkIGludCBmbGxfZnJlZjsKIAl1bnNpZ25lZCBpbnQgZmxsX2ZvdXQ7CisJaW50IGZsbF9zcmM7CiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHdtODk5M19yZWFkX2h3KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdTggcmVnKQotewotCXN0cnVjdCBpMmNfbXNnIHhmZXJbMl07Ci0JdTE2IGRhdGE7Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKLQotCS8qIFdyaXRlIHJlZ2lzdGVyICovCi0JeGZlclswXS5hZGRyID0gaTJjLT5hZGRyOwotCXhmZXJbMF0uZmxhZ3MgPSAwOwotCXhmZXJbMF0ubGVuID0gMTsKLQl4ZmVyWzBdLmJ1ZiA9ICZyZWc7Ci0KLQkvKiBSZWFkIGRhdGEgKi8KLQl4ZmVyWzFdLmFkZHIgPSBpMmMtPmFkZHI7Ci0JeGZlclsxXS5mbGFncyA9IEkyQ19NX1JEOwotCXhmZXJbMV0ubGVuID0gMjsKLQl4ZmVyWzFdLmJ1ZiA9ICh1OCAqKSZkYXRhOwotCi0JcmV0ID0gaTJjX3RyYW5zZmVyKGkyYy0+YWRhcHRlciwgeGZlciwgMik7Ci0JaWYgKHJldCAhPSAyKSB7Ci0JCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWFkIDB4JXg6ICVkXG4iLCByZWcsIHJldCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAoZGF0YSA+PiA4KSB8ICgoZGF0YSAmIDB4ZmYpIDw8IDgpOwotfQotCiBzdGF0aWMgaW50IHdtODk5M192b2xhdGlsZSh1bnNpZ25lZCBpbnQgcmVnKQogewogCXN3aXRjaCAocmVnKSB7CkBAIC0yNzEsNDggKzI1Nyw2IEBACiAJfQogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHdtODk5M19yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQkJCQl1bnNpZ25lZCBpbnQgcmVnKQotewotCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQotCUJVR19PTihyZWcgPiBXTTg5OTNfTUFYX1JFR0lTVEVSKTsKLQotCWlmICh3bTg5OTNfdm9sYXRpbGUocmVnKSkKLQkJcmV0dXJuIHdtODk5M19yZWFkX2h3KGNvZGVjLCByZWcpOwotCWVsc2UKLQkJcmV0dXJuIHJlZ19jYWNoZVtyZWddOwotfQotCi1zdGF0aWMgaW50IHdtODk5M193cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCi0JCQl1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTE2ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCXU4IGRhdGFbM107Ci0JaW50IHJldDsKLQotCUJVR19PTihyZWcgPiBXTTg5OTNfTUFYX1JFR0lTVEVSKTsKLQotCS8qIGRhdGEgaXMKLQkgKiAgIEQxNS4uRDkgV004OTkzIHJlZ2lzdGVyIG9mZnNldAotCSAqICAgRDguLi5EMCByZWdpc3RlciBkYXRhCi0JICovCi0JZGF0YVswXSA9IHJlZzsKLQlkYXRhWzFdID0gdmFsdWUgPj4gODsKLQlkYXRhWzJdID0gdmFsdWUgJiAweDAwZmY7Ci0KLQlpZiAoIXdtODk5M192b2xhdGlsZShyZWcpKQotCQlyZWdfY2FjaGVbcmVnXSA9IHZhbHVlOwotCi0JcmV0ID0gY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDMpOwotCi0JaWYgKHJldCA9PSAzKQotCQlyZXR1cm4gMDsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQlyZXR1cm4gLUVJTzsKLX0KLQogc3RydWN0IF9mbGxfZGl2IHsKIAl1MTYgZmxsX2ZyYXRpbzsKIAl1MTYgZmxsX291dGRpdjsKQEAgLTQ0MSw5ICszODUsOSBAQAogCQl3bTg5OTMtPmZsbF9mcmVmID0gMDsKIAkJd204OTkzLT5mbGxfZm91dCA9IDA7CiAKLQkJcmVnMSA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSk7CisJCXJlZzEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xKTsKIAkJcmVnMSAmPSB+V004OTkzX0ZMTF9FTkE7Ci0JCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEsIHJlZzEpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSwgcmVnMSk7CiAKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNDUyLDcgKzM5Niw3IEBACiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmVnNSA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfNSk7CisJcmVnNSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzUpOwogCXJlZzUgJj0gfldNODk5M19GTExfQ0xLX1NSQ19NQVNLOwogCiAJc3dpdGNoIChmbGxfaWQpIHsKQEAgLTQ3NCwzOCArNDE4LDM5IEBACiAKIAkvKiBBbnkgRkxMIGNvbmZpZ3VyYXRpb24gY2hhbmdlIHJlcXVpcmVzIHRoYXQgdGhlIEZMTCBiZQogCSAqIGRpc2FibGVkIGZpcnN0LiAqLwotCXJlZzEgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEpOworCXJlZzEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xKTsKIAlyZWcxICY9IH5XTTg5OTNfRkxMX0VOQTsKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xLCByZWcxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSwgcmVnMSk7CiAKIAkvKiBBcHBseSB0aGUgY29uZmlndXJhdGlvbiAqLwogCWlmIChmbGxfZGl2LmspCiAJCXJlZzEgfD0gV004OTkzX0ZMTF9GUkFDX01BU0s7CiAJZWxzZQogCQlyZWcxICY9IH5XTTg5OTNfRkxMX0ZSQUNfTUFTSzsKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xLCByZWcxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSwgcmVnMSk7CiAKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8yLAotCQkgICAgIChmbGxfZGl2LmZsbF9vdXRkaXYgPDwgV004OTkzX0ZMTF9PVVRESVZfU0hJRlQpIHwKLQkJICAgICAoZmxsX2Rpdi5mbGxfZnJhdGlvIDw8IFdNODk5M19GTExfRlJBVElPX1NISUZUKSk7Ci0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMywgZmxsX2Rpdi5rKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMiwKKwkJICAgICAgKGZsbF9kaXYuZmxsX291dGRpdiA8PCBXTTg5OTNfRkxMX09VVERJVl9TSElGVCkgfAorCQkgICAgICAoZmxsX2Rpdi5mbGxfZnJhdGlvIDw8IFdNODk5M19GTExfRlJBVElPX1NISUZUKSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzMsIGZsbF9kaXYuayk7CiAKLQlyZWc0ID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF80KTsKKwlyZWc0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfNCk7CiAJcmVnNCAmPSB+V004OTkzX0ZMTF9OX01BU0s7CiAJcmVnNCB8PSBmbGxfZGl2Lm4gPDwgV004OTkzX0ZMTF9OX1NISUZUOwotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzQsIHJlZzQpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF80LCByZWc0KTsKIAogCXJlZzUgJj0gfldNODk5M19GTExfQ0xLX1JFRl9ESVZfTUFTSzsKIAlyZWc1IHw9IGZsbF9kaXYuZmxsX2Nsa19yZWZfZGl2IDw8IFdNODk5M19GTExfQ0xLX1JFRl9ESVZfU0hJRlQ7Ci0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfNSwgcmVnNSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzUsIHJlZzUpOwogCiAJLyogRW5hYmxlIHRoZSBGTEwgKi8KLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xLCByZWcxIHwgV004OTkzX0ZMTF9FTkEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xLCByZWcxIHwgV004OTkzX0ZMTF9FTkEpOwogCiAJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRkxMIGVuYWJsZWQgYXQgJWRIei0+JWRIelxuIiwgRnJlZiwgRm91dCk7CiAKIAl3bTg5OTMtPmZsbF9mcmVmID0gRnJlZjsKIAl3bTg5OTMtPmZsbF9mb3V0ID0gRm91dDsKKwl3bTg5OTMtPmZsbF9zcmMgPSBzb3VyY2U7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyMCw3ICs0NjUsNyBAQAogCWNhc2UgV004OTkzX1NZU0NMS19NQ0xLOgogCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJVc2luZyAlZEh6IE1DTEtcbiIsIHdtODk5My0+bWNsa19yYXRlKTsKIAotCQlyZWcgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0NMT0NLSU5HXzIpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18yKTsKIAkJcmVnICY9IH4oV004OTkzX01DTEtfRElWIHwgV004OTkzX1NZU0NMS19TUkMpOwogCQlpZiAod204OTkzLT5tY2xrX3JhdGUgPiAxMzUwMDAwMCkgewogCQkJcmVnIHw9IFdNODk5M19NQ0xLX0RJVjsKQEAgLTUyOSwxNCArNDc0LDE0IEBACiAJCQlyZWcgJj0gfldNODk5M19NQ0xLX0RJVjsKIAkJCXdtODk5My0+c3lzY2xrX3JhdGUgPSB3bTg5OTMtPm1jbGtfcmF0ZTsKIAkJfQotCQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19DTE9DS0lOR18yLCByZWcpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMiwgcmVnKTsKIAkJYnJlYWs7CiAKIAljYXNlIFdNODk5M19TWVNDTEtfRkxMOgogCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJVc2luZyAlZEh6IEZMTCBjbG9ja1xuIiwKIAkJCXdtODk5My0+ZmxsX2ZvdXQpOwogCi0JCXJlZyA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0NMT0NLSU5HXzIpOwogCQlyZWcgfD0gV004OTkzX1NZU0NMS19TUkM7CiAJCWlmICh3bTg5OTMtPmZsbF9mb3V0ID4gMTM1MDAwMDApIHsKIAkJCXJlZyB8PSBXTTg5OTNfTUNMS19ESVY7CkBAIC01NDUsNyArNDkwLDcgQEAKIAkJCXJlZyAmPSB+V004OTkzX01DTEtfRElWOwogCQkJd204OTkzLT5zeXNjbGtfcmF0ZSA9IHdtODk5My0+ZmxsX2ZvdXQ7CiAJCX0KLQkJd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMiwgcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0NMT0NLSU5HXzIsIHJlZyk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTk3OCwxMCArOTIzLDMzIEBACiAJeyAiUmlnaHQgSGVhZHBob25lIE11eCIsICJEQUMiLCAiREFDUiIgfSwKIH07CiAKK3N0YXRpYyB2b2lkIHdtODk5M19jYWNoZV9yZXN0b3JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpbnQgaTsKKworCWlmICghY29kZWMtPmNhY2hlX3N5bmMpCisJCXJldHVybjsKKworCS8qIFJlZW5hYmxlIGhhcmR3YXJlIHdyaXRlcyAqLworCWNvZGVjLT5jYWNoZV9vbmx5ID0gMDsKKworCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVyIHNldHRpbmdzICovCisJZm9yIChpID0gMTsgaSA8IFdNODk5M19NQVhfUkVHSVNURVI7IGkrKykgeworCQlpZiAoY2FjaGVbaV0gPT0gd204OTkzX3JlZ19kZWZhdWx0c1tpXSkKKwkJCWNvbnRpbnVlOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBpLCBjYWNoZVtpXSk7CisJfQorCisJLyogV2UncmUgaW4gc3luYyBhZ2FpbiAqLworCWNvZGVjLT5jYWNoZV9zeW5jID0gMDsKK30KKwogc3RhdGljIGludCB3bTg5OTNfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKIAlzdHJ1Y3Qgd204OTkzX3ByaXYgKndtODk5MyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKIAogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKQEAgLTk5NSw2ICs5NjMsMTggQEAKIAogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg5OTMtPnN1cHBsaWVzKSwKKwkJCQkJCSAgICB3bTg5OTMtPnN1cHBsaWVzKTsKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQl3bTg5OTNfY2FjaGVfcmVzdG9yZShjb2RlYyk7CisKKwkJCS8qIFR1bmUgREMgc2Vydm8gY29uZmlndXJhdGlvbiAqLworCQkJc25kX3NvY193cml0ZShjb2RlYywgMHg0NCwgMyk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCAweDU2LCAzKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIDB4NDQsIDApOworCiAJCQkvKiBCcmluZyB1cCBWTUlEIHdpdGggZmFzdCBzb2Z0IHN0YXJ0ICovCiAJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQU5USVBPUDIsCiAJCQkJCSAgICBXTTg5OTNfU1RBUlRVUF9CSUFTX0VOQSB8CkBAIC0xMDQyLDYgKzEwMjIsMTggQEAKIAkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMSwKIAkJCQkgICAgV004OTkzX1ZNSURfU0VMX01BU0sgfCBXTTg5OTNfQklBU19FTkEsCiAJCQkJICAgIDApOworCisjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgorICAgICAgICAgICAgICAgLyogUG9zdCAyLjYuMzQgd2Ugd2lsbCBiZSBhYmxlIHRvIGdldCBhIGNhbGxiYWNrIHdoZW4KKyAgICAgICAgICAgICAgICAqIHRoZSByZWd1bGF0b3JzIGFyZSBkaXNhYmxlZCB3aGljaCB3ZSBjYW4gdXNlIGJ1dAorCQkqIGZvciBub3cganVzdCBhc3N1bWUgdGhhdCB0aGUgcG93ZXIgd2lsbCBiZSBjdXQgaWYKKwkJKiB0aGUgcmVndWxhdG9yIEFQSSBpcyBpbiB1c2UuCisJCSovCisJCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKKyNlbmRpZgorCisJCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5OTMtPnN1cHBsaWVzKSwKKwkJCQkgICAgICAgd204OTkzLT5zdXBwbGllcyk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTA3NSw4ICsxMDY3LDggQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwogCXN0cnVjdCB3bTg5OTNfcHJpdiAqd204OTkzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBpbnQgYWlmMSA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzEpOwotCXVuc2lnbmVkIGludCBhaWY0ID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfNCk7CisJdW5zaWduZWQgaW50IGFpZjEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMSk7CisJdW5zaWduZWQgaW50IGFpZjQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfNCk7CiAKIAlhaWYxICY9IH4oV004OTkzX0JDTEtfRElSIHwgV004OTkzX0FJRl9CQ0xLX0lOViB8CiAJCSAgV004OTkzX0FJRl9MUkNMS19JTlYgfCBXTTg5OTNfQUlGX0ZNVF9NQVNLKTsKQEAgLTExNTksOCArMTE1MSw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8xLCBhaWYxKTsKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfNCwgYWlmNCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8xLCBhaWYxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzQsIGFpZjQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTc0LDE2ICsxMTY2LDE2IEBACiAJaW50IHJldCwgaSwgYmVzdCwgYmVzdF92YWwsIGN1cl92YWw7CiAJdW5zaWduZWQgaW50IGNsb2NraW5nMSwgY2xvY2tpbmczLCBhaWYxLCBhaWY0OwogCi0JY2xvY2tpbmcxID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18xKTsKKwljbG9ja2luZzEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18xKTsKIAljbG9ja2luZzEgJj0gfldNODk5M19CQ0xLX0RJVl9NQVNLOwogCi0JY2xvY2tpbmczID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18zKTsKKwljbG9ja2luZzMgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18zKTsKIAljbG9ja2luZzMgJj0gfihXTTg5OTNfQ0xLX1NZU19SQVRFX01BU0sgfCBXTTg5OTNfU0FNUExFX1JBVEVfTUFTSyk7CiAKLQlhaWYxID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMSk7CisJYWlmMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8xKTsKIAlhaWYxICY9IH5XTTg5OTNfQUlGX1dMX01BU0s7CiAKLQlhaWY0ID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfNCk7CisJYWlmNCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV80KTsKIAlhaWY0ICY9IH5XTTg5OTNfTFJDTEtfUkFURV9NQVNLOwogCiAJLyogV2hhdCBCQ0xLIGRvIHdlIG5lZWQ/ICovCkBAIC0xMjc2LDE0ICsxMjY4LDE0IEBACiAJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTFJDTEtfUkFURSBpcyAlZFxuIiwgd204OTkzLT5iY2xrIC8gd204OTkzLT5mcyk7CiAJYWlmNCB8PSB3bTg5OTMtPmJjbGsgLyB3bTg5OTMtPmZzOwogCi0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMSwgY2xvY2tpbmcxKTsKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19DTE9DS0lOR18zLCBjbG9ja2luZzMpOwotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8xLCBhaWYxKTsKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfNCwgYWlmNCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0NMT0NLSU5HXzEsIGNsb2NraW5nMSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0NMT0NLSU5HXzMsIGNsb2NraW5nMyk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8xLCBhaWYxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzQsIGFpZjQpOwogCiAJLyogUmVUdW5lIE1vYmlsZT8gKi8KIAlpZiAod204OTkzLT5wZGF0YS5udW1fcmV0dW5lX2NvbmZpZ3MpIHsKLQkJdTE2IGVxMSA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfRVExKTsKKwkJdTE2IGVxMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0VRMSk7CiAJCXN0cnVjdCB3bTg5OTNfcmV0dW5lX21vYmlsZV9zZXR0aW5nICpzOwogCiAJCWJlc3QgPSAwOwpAQCAtMTMwNiw3ICsxMjk4LDcgQEAKIAkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0VRMSwgV004OTkzX0VRX0VOQSwgMCk7CiAKIAkJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUocy0+Y29uZmlnKTsgaSsrKQotCQkJd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfRVExICsgaSwgcy0+Y29uZmlnW2ldKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19FUTEgKyBpLCBzLT5jb25maWdbaV0pOwogCiAJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19FUTEsIFdNODk5M19FUV9FTkEsIGVxMSk7CiAJfQpAQCAtMTMxOSwxNCArMTMxMSwxNCBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CiAJdW5zaWduZWQgaW50IHJlZzsKIAotCXJlZyA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfREFDX0NUUkwpOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0RBQ19DVFJMKTsKIAogCWlmIChtdXRlKQogCQlyZWcgfD0gV004OTkzX0RBQ19NVVRFOwogCWVsc2UKIAkJcmVnICY9IH5XTTg5OTNfREFDX01VVEU7CiAKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19EQUNfQ1RSTCwgcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfREFDX0NUUkwsIHJlZyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0ODAsOSArMTQ3Miw2NiBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODk5M19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJc3RydWN0IHdtODk5M19wcml2ICp3bTg5OTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBmbGxfZm91dCA9IHdtODk5My0+ZmxsX2ZvdXQ7CisJaW50IGZsbF9mcmVmICA9IHdtODk5My0+ZmxsX2ZyZWY7CisJaW50IHJldDsKKworCS8qIFN0b3AgdGhlIEZMTCBpbiBhbiBvcmRlcmx5IGZhc2hpb24gKi8KKwlyZXQgPSB3bTg5OTNfc2V0X2ZsbChjb2RlYy0+ZGFpLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHN0b3AgRkxMXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3bTg5OTMtPmZsbF9mb3V0ID0gZmxsX2ZvdXQ7CisJd204OTkzLT5mbGxfZnJlZiA9IGZsbF9mcmVmOworCisJd204OTkzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5M19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJc3RydWN0IHdtODk5M19wcml2ICp3bTg5OTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CisKKwl3bTg5OTNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCS8qIFJlc3RhcnQgdGhlIEZMTD8gKi8KKwlpZiAod204OTkzLT5mbGxfZm91dCkgeworCQlpbnQgZmxsX2ZvdXQgPSB3bTg5OTMtPmZsbF9mb3V0OworCQlpbnQgZmxsX2ZyZWYgID0gd204OTkzLT5mbGxfZnJlZjsKKworCQl3bTg5OTMtPmZsbF9mcmVmID0gMDsKKwkJd204OTkzLT5mbGxfZm91dCA9IDA7CisKKwkJcmV0ID0gd204OTkzX3NldF9mbGwoY29kZWMtPmRhaSwgMCwgd204OTkzLT5mbGxfc3JjLAorCQkJCSAgICAgZmxsX2ZyZWYsIGZsbF9mb3V0KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlc3RhcnQgRkxMXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHdtODk5M19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgd204OTkzX3Jlc3VtZSBOVUxMCisjZW5kaWYKKwogc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTkzID0gewogCS5wcm9iZSA9IAl3bTg5OTNfcHJvYmUsCiAJLnJlbW92ZSA9IAl3bTg5OTNfcmVtb3ZlLAorCS5zdXNwZW5kID0Jd204OTkzX3N1c3BlbmQsCisJLnJlc3VtZSA9CXdtODk5M19yZXN1bWUsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg5OTMpOwogCkBAIC0xNDkzLDYgKzE1NDIsNyBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCWludCByZXQ7CisJaW50IGk7CiAKIAlpZiAod204OTkzX2NvZGVjKSB7CiAJCWRldl9lcnIoJmkyYy0+ZGV2LCAiQSBXTTg5OTMgaXMgYWxyZWFkeSByZWdpc3RlcmVkXG4iKTsKQEAgLTE1MTMsOSArMTU2Myw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKIAogCWNvZGVjLT5uYW1lID0gIldNODk5MyI7Ci0JY29kZWMtPnJlYWQgPSB3bTg5OTNfcmVhZDsKLQljb2RlYy0+d3JpdGUgPSB3bTg5OTNfd3JpdGU7Ci0JY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworCWNvZGVjLT52b2xhdGlsZV9yZWdpc3RlciA9IHdtODk5M192b2xhdGlsZTsKIAljb2RlYy0+cmVnX2NhY2hlID0gd204OTkzLT5yZWdfY2FjaGU7CiAJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRSh3bTg5OTMtPnJlZ19jYWNoZSk7CiAJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOwpAQCAtMTUyNCwyNSArMTU3Miw1MyBAQAogCWNvZGVjLT5udW1fZGFpID0gMTsKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204OTkzOwogCisJd204OTkzLT5odWJzX2RhdGEuaHBfc3RhcnR1cF9tb2RlID0gMTsKKwl3bTg5OTMtPmh1YnNfZGF0YS5kY3NfY29kZXMgPSAtMjsKKwogCW1lbWNweSh3bTg5OTMtPnJlZ19jYWNoZSwgd204OTkzX3JlZ19kZWZhdWx0cywKIAkgICAgICAgc2l6ZW9mKHdtODk5My0+cmVnX2NhY2hlKSk7CiAKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgOCwgMTYsIFNORF9TT0NfSTJDKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB3bTg5OTMpOwogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CiAJd204OTkzX2NvZGVjID0gY29kZWM7CiAKIAljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OwogCi0JdmFsID0gd204OTkzX3JlYWRfaHcoY29kZWMsIFdNODk5M19TT0ZUV0FSRV9SRVNFVCk7Ci0JaWYgKHZhbCAhPSB3bTg5OTNfcmVnX2RlZmF1bHRzW1dNODk5M19TT0ZUV0FSRV9SRVNFVF0pIHsKLQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiSW52YWxpZCBJRCByZWdpc3RlciB2YWx1ZSAleFxuIiwgdmFsKTsKLQkJcmV0ID0gLUVJTlZBTDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTMtPnN1cHBsaWVzKTsgaSsrKQorCQl3bTg5OTMtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHdtODk5M19zdXBwbHlfbmFtZXNbaV07CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQoY29kZWMtPmRldiwgQVJSQVlfU0laRSh3bTg5OTMtPnN1cHBsaWVzKSwKKwkJCQkgd204OTkzLT5zdXBwbGllcyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnI7CiAJfQogCi0JcmV0ID0gd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfU09GVFdBUkVfUkVTRVQsIDB4ZmZmZik7CisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204OTkzLT5zdXBwbGllcyksCisJCQkJICAgIHdtODk5My0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZ2V0OworCX0KKworCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX1NPRlRXQVJFX1JFU0VUKTsKKwlpZiAodmFsICE9IHdtODk5M19yZWdfZGVmYXVsdHNbV004OTkzX1NPRlRXQVJFX1JFU0VUXSkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJJbnZhbGlkIElEIHJlZ2lzdGVyIHZhbHVlICV4XG4iLCB2YWwpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9lbmFibGU7CisJfQorCisJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX1NPRlRXQVJFX1JFU0VULCAweGZmZmYpOwogCWlmIChyZXQgIT0gMCkKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX2VuYWJsZTsKKworCWNvZGVjLT5jYWNoZV9vbmx5ID0gMTsKIAogCS8qIEJ5IGRlZmF1bHQgd2UncmUgdXNpbmcgdGhlIG91dHB1dCBtaXhlcnMgKi8KIAl3bTg5OTMtPmNsYXNzX3dfdXNlcnMgPSAyOwpAQCAtMTU3Miw3ICsxNjQ4LDcgQEAKIAkJCSAgICAgCiAJcmV0ID0gd204OTkzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAJaWYgKHJldCAhPSAwKQotCQlnb3RvIGVycjsKKwkJZ290byBlcnJfZW5hYmxlOwogCiAJd204OTkzX2RhaS5kZXYgPSBjb2RlYy0+ZGV2OwogCkBAIC0xNTg2LDYgKzE2NjIsMTAgQEAKIAogZXJyX2JpYXM6CiAJd204OTkzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKK2Vycl9lbmFibGU6CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODk5My0+c3VwcGxpZXMpLCB3bTg5OTMtPnN1cHBsaWVzKTsKK2Vycl9nZXQ6CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODk5My0+c3VwcGxpZXMpLCB3bTg5OTMtPnN1cHBsaWVzKTsKIGVycjoKIAl3bTg5OTNfY29kZWMgPSBOVUxMOwogCWtmcmVlKHdtODk5Myk7CkBAIC0xNjAwLDYgKzE2ODAsNyBAQAogCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODk5M19kYWkpOwogCiAJd204OTkzX3NldF9iaWFzX2xldmVsKCZ3bTg5OTMtPmNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204OTkzLT5zdXBwbGllcyksIHdtODk5My0+c3VwcGxpZXMpOwogCWtmcmVlKHdtODk5Myk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZjM3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCkBAIC0wLDAgKzEsMzg2NyBAQAorLyoKKyAqIHdtODk5NC5jICAtLSAgV004OTk0IEFMU0EgU29DIEF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKworI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvcmVnaXN0ZXJzLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODk5NC9wZGF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvZ3Bpby5oPgorCisjaW5jbHVkZSAid204OTk0LmgiCisjaW5jbHVkZSAid21faHVicy5oIgorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODk5NF9jb2RlYzsKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk5NDsKKworc3RydWN0IGZsbF9jb25maWcgeworCWludCBzcmM7CisJaW50IGluOworCWludCBvdXQ7Cit9OworCisjZGVmaW5lIFdNODk5NF9OVU1fRFJDIDMKKyNkZWZpbmUgV004OTk0X05VTV9FUSAgMworCitzdGF0aWMgaW50IHdtODk5NF9kcmNfYmFzZVtdID0geworCVdNODk5NF9BSUYxX0RSQzFfMSwKKwlXTTg5OTRfQUlGMV9EUkMyXzEsCisJV004OTk0X0FJRjJfRFJDXzEsCit9OworCitzdGF0aWMgaW50IHdtODk5NF9yZXR1bmVfbW9iaWxlX2Jhc2VbXSA9IHsKKwlXTTg5OTRfQUlGMV9EQUMxX0VRX0dBSU5TXzEsCisJV004OTk0X0FJRjFfREFDMl9FUV9HQUlOU18xLAorCVdNODk5NF9BSUYyX0VRX0dBSU5TXzEsCit9OworCisjZGVmaW5lIFdNODk5NF9SRUdfQ0FDSEVfU0laRSAgMHg2MjEKKworLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3Qgd204OTk0X3ByaXYgeworCXN0cnVjdCB3bV9odWJzX2RhdGEgaHViczsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1MTYgcmVnX2NhY2hlW1dNODk5NF9SRUdfQ0FDSEVfU0laRSArIDFdOworCWludCBzeXNjbGtbMl07CisJaW50IHN5c2Nsa19yYXRlWzJdOworCWludCBtY2xrWzJdOworCWludCBhaWZjbGtbMl07CisJc3RydWN0IGZsbF9jb25maWcgZmxsWzJdLCBmbGxfc3VzcGVuZFsyXTsKKworCWludCBkYWNfcmF0ZXNbMl07CisJaW50IGxyY2xrX3NoYXJlZFsyXTsKKworCS8qIFBsYXRmb3JtIGRlcGVuZGFudCBEUkMgY29uZmlndXJhdGlvbiAqLworCWNvbnN0IGNoYXIgKipkcmNfdGV4dHM7CisJaW50IGRyY19jZmdbV004OTk0X05VTV9EUkNdOworCXN0cnVjdCBzb2NfZW51bSBkcmNfZW51bTsKKworCS8qIFBsYXRmb3JtIGRlcGVuZGFudCBSZVR1bmUgbW9iaWxlIGNvbmZpZ3VyYXRpb24gKi8KKwlpbnQgbnVtX3JldHVuZV9tb2JpbGVfdGV4dHM7CisJY29uc3QgY2hhciAqKnJldHVuZV9tb2JpbGVfdGV4dHM7CisJaW50IHJldHVuZV9tb2JpbGVfY2ZnW1dNODk5NF9OVU1fRVFdOworCXN0cnVjdCBzb2NfZW51bSByZXR1bmVfbW9iaWxlX2VudW07CisKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0ICByZWFkYWJsZTsgICAvKiBNYXNrIG9mIHJlYWRhYmxlIGJpdHMgKi8KKwl1bnNpZ25lZCBzaG9ydCAgd3JpdGFibGU7ICAgLyogTWFzayBvZiB3cml0YWJsZSBiaXRzICovCisJdW5zaWduZWQgc2hvcnQgIHZvbDsgICAgICAgIC8qIE1hc2sgb2Ygdm9sYXRpbGUgYml0cyAqLworfSBhY2Nlc3NfbWFza3NbXSA9IHsKKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjAgICAgIC0gU29mdHdhcmUgUmVzZXQgKi8KKwl7IDB4M0IzNywgMHgzQjM3LCAweDAwMDAgfSwgLyogUjEgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoMSkgKi8KKwl7IDB4NkJGMCwgMHg2QkYwLCAweDAwMDAgfSwgLyogUjIgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoMikgKi8KKwl7IDB4M0ZGMCwgMHgzRkYwLCAweDAwMDAgfSwgLyogUjMgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoMykgKi8KKwl7IDB4M0YzRiwgMHgzRjNGLCAweDAwMDAgfSwgLyogUjQgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoNCkgKi8KKwl7IDB4M0YwRiwgMHgzRjBGLCAweDAwMDAgfSwgLyogUjUgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoNSkgKi8KKwl7IDB4MDAzRiwgMHgwMDNGLCAweDAwMDAgfSwgLyogUjYgICAgIC0gUG93ZXIgTWFuYWdlbWVudCAoNikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMCAqLworCXsgMHgwMUMwLCAweDAxQzAsIDB4MDAwMCB9LCAvKiBSMjEgICAgLSBJbnB1dCBNaXhlciAoMSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMyAqLworCXsgMHgwMERGLCAweDAxREYsIDB4MDAwMCB9LCAvKiBSMjQgICAgLSBMZWZ0IExpbmUgSW5wdXQgMSYyIFZvbHVtZSAqLworCXsgMHgwMERGLCAweDAxREYsIDB4MDAwMCB9LCAvKiBSMjUgICAgLSBMZWZ0IExpbmUgSW5wdXQgMyY0IFZvbHVtZSAqLworCXsgMHgwMERGLCAweDAxREYsIDB4MDAwMCB9LCAvKiBSMjYgICAgLSBSaWdodCBMaW5lIElucHV0IDEmMiBWb2x1bWUgKi8KKwl7IDB4MDBERiwgMHgwMURGLCAweDAwMDAgfSwgLyogUjI3ICAgIC0gUmlnaHQgTGluZSBJbnB1dCAzJjQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIyOCAgICAtIExlZnQgT3V0cHV0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMjkgICAgLSBSaWdodCBPdXRwdXQgVm9sdW1lICovCisJeyAweDAwNzcsIDB4MDA3NywgMHgwMDAwIH0sIC8qIFIzMCAgICAtIExpbmUgT3V0cHV0cyBWb2x1bWUgKi8KKwl7IDB4MDAzMCwgMHgwMDMwLCAweDAwMDAgfSwgLyogUjMxICAgIC0gSFBPVVQyIFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMzIgICAgLSBMZWZ0IE9QR0EgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIzMyAgICAtIFJpZ2h0IE9QR0EgVm9sdW1lICovCisJeyAweDAwN0YsIDB4MDA3RiwgMHgwMDAwIH0sIC8qIFIzNCAgICAtIFNQS01JWEwgQXR0ZW51YXRpb24gKi8KKwl7IDB4MDE3RiwgMHgwMTdGLCAweDAwMDAgfSwgLyogUjM1ICAgIC0gU1BLTUlYUiBBdHRlbnVhdGlvbiAqLworCXsgMHgwMDNGLCAweDAwM0YsIDB4MDAwMCB9LCAvKiBSMzYgICAgLSBTUEtPVVQgTWl4ZXJzICovCisJeyAweDAwM0YsIDB4MDAzRiwgMHgwMDAwIH0sIC8qIFIzNyAgICAtIENsYXNzRCAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMzggICAgLSBTcGVha2VyIFZvbHVtZSBMZWZ0ICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIzOSAgICAtIFNwZWFrZXIgVm9sdW1lIFJpZ2h0ICovCisJeyAweDAwRkYsIDB4MDBGRiwgMHgwMDAwIH0sIC8qIFI0MCAgICAtIElucHV0IE1peGVyICgyKSAqLworCXsgMHgwMUI3LCAweDAxQjcsIDB4MDAwMCB9LCAvKiBSNDEgICAgLSBJbnB1dCBNaXhlciAoMykgKi8KKwl7IDB4MDFCNywgMHgwMUI3LCAweDAwMDAgfSwgLyogUjQyICAgIC0gSW5wdXQgTWl4ZXIgKDQpICovCisJeyAweDAxQzcsIDB4MDFDNywgMHgwMDAwIH0sIC8qIFI0MyAgICAtIElucHV0IE1peGVyICg1KSAqLworCXsgMHgwMUM3LCAweDAxQzcsIDB4MDAwMCB9LCAvKiBSNDQgICAgLSBJbnB1dCBNaXhlciAoNikgKi8KKwl7IDB4MDFGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjQ1ICAgIC0gT3V0cHV0IE1peGVyICgxKSAqLworCXsgMHgwMUZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSNDYgICAgLSBPdXRwdXQgTWl4ZXIgKDIpICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHgwMDAwIH0sIC8qIFI0NyAgICAtIE91dHB1dCBNaXhlciAoMykgKi8KKwl7IDB4MEZGRiwgMHgwRkZGLCAweDAwMDAgfSwgLyogUjQ4ICAgIC0gT3V0cHV0IE1peGVyICg0KSAqLworCXsgMHgwRkZGLCAweDBGRkYsIDB4MDAwMCB9LCAvKiBSNDkgICAgLSBPdXRwdXQgTWl4ZXIgKDUpICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHgwMDAwIH0sIC8qIFI1MCAgICAtIE91dHB1dCBNaXhlciAoNikgKi8KKwl7IDB4MDAzOCwgMHgwMDM4LCAweDAwMDAgfSwgLyogUjUxICAgIC0gSFBPVVQyIE1peGVyICovCisJeyAweDAwNzcsIDB4MDA3NywgMHgwMDAwIH0sIC8qIFI1MiAgICAtIExpbmUgTWl4ZXIgKDEpICovCisJeyAweDAwNzcsIDB4MDA3NywgMHgwMDAwIH0sIC8qIFI1MyAgICAtIExpbmUgTWl4ZXIgKDIpICovCisJeyAweDAzRkYsIDB4MDNGRiwgMHgwMDAwIH0sIC8qIFI1NCAgICAtIFNwZWFrZXIgTWl4ZXIgKi8KKwl7IDB4MDBDMSwgMHgwMEMxLCAweDAwMDAgfSwgLyogUjU1ICAgIC0gQWRkaXRpb25hbCBDb250cm9sICovCisJeyAweDAwRjAsIDB4MDBGMCwgMHgwMDAwIH0sIC8qIFI1NiAgICAtIEFudGlQT1AgKDEpICovCisJeyAweDAxRUYsIDB4MDFFRiwgMHgwMDAwIH0sIC8qIFI1NyAgICAtIEFudGlQT1AgKDIpICovCisJeyAweDAwRkYsIDB4MDBGRiwgMHgwMDAwIH0sIC8qIFI1OCAgICAtIE1JQ0JJQVMgKi8KKwl7IDB4MDAwRiwgMHgwMDBGLCAweDAwMDAgfSwgLyogUjU5ICAgIC0gTERPIDEgKi8KKwl7IDB4MDAwNywgMHgwMDA3LCAweDAwMDAgfSwgLyogUjYwICAgIC0gTERPIDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzUgKi8KKwl7IDB4ODAwMCwgMHg4MDAwLCAweDAwMDAgfSwgLyogUjc2ICAgIC0gQ2hhcmdlIFB1bXAgKDEpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MCAqLworCXsgMHgwMzAxLCAweDAzMDEsIDB4MDAwMCB9LCAvKiBSODEgICAgLSBDbGFzcyBXICgxKSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzICovCisJeyAweDMzM0YsIDB4MzMzRiwgMHgwMDAwIH0sIC8qIFI4NCAgICAtIERDIFNlcnZvICgxKSAqLworCXsgMHgwRkVGLCAweDBGRUYsIDB4MDAwMCB9LCAvKiBSODUgICAgLSBEQyBTZXJ2byAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFI4NyAgICAtIERDIFNlcnZvICg0KSAqLworCXsgMHgwMzMzLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODggICAgLSBEQyBTZXJ2byBSZWFkYmFjayAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTUgKi8KKwl7IDB4MDBFRSwgMHgwMEVFLCAweDAwMDAgfSwgLyogUjk2ICAgIC0gQW5hbG9ndWUgSFAgKDEpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjU1ICovCisJeyAweDAwMEYsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTYgICAtIENoaXAgUmV2aXNpb24gKi8KKwl7IDB4MDA3NCwgMHgwMDc0LCAweDAwMDAgfSwgLyogUjI1NyAgIC0gQ29udHJvbCBJbnRlcmZhY2UgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjcxICovCisJeyAweDgwN0YsIDB4ODM3RiwgMHgwMDAwIH0sIC8qIFIyNzIgICAtIFdyaXRlIFNlcXVlbmNlciBDdHJsICgxKSAqLworCXsgMHgwMTdGLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjczICAgLSBXcml0ZSBTZXF1ZW5jZXIgQ3RybCAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyOTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyOTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyOTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzU2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzOTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzOTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzOTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0ODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0ODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0ODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDg4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0ODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0OTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0OTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0OTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUxMSAqLworCXsgMHgwMDFGLCAweDAwMUYsIDB4MDAwMCB9LCAvKiBSNTEyICAgLSBBSUYxIENsb2NraW5nICgxKSAqLworCXsgMHgwMDNGLCAweDAwM0YsIDB4MDAwMCB9LCAvKiBSNTEzICAgLSBBSUYxIENsb2NraW5nICgyKSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MTUgKi8KKwl7IDB4MDAxRiwgMHgwMDFGLCAweDAwMDAgfSwgLyogUjUxNiAgIC0gQUlGMiBDbG9ja2luZyAoMSkgKi8KKwl7IDB4MDAzRiwgMHgwMDNGLCAweDAwMDAgfSwgLyogUjUxNyAgIC0gQUlGMiBDbG9ja2luZyAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTE5ICovCisJeyAweDAwMUYsIDB4MDAxRiwgMHgwMDAwIH0sIC8qIFI1MjAgICAtIENsb2NraW5nICgxKSAqLworCXsgMHgwNzc3LCAweDA3NzcsIDB4MDAwMCB9LCAvKiBSNTIxICAgLSBDbG9ja2luZyAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MjcgKi8KKwl7IDB4MDBGRiwgMHgwMEZGLCAweDAwMDAgfSwgLyogUjUyOCAgIC0gQUlGMSBSYXRlICovCisJeyAweDAwRkYsIDB4MDBGRiwgMHgwMDAwIH0sIC8qIFI1MjkgICAtIEFJRjIgUmF0ZSAqLworCXsgMHgwMDBGLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTMwICAgLSBSYXRlIFN0YXR1cyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTQzICovCisJeyAweDAwMDcsIDB4MDAwNywgMHgwMDAwIH0sIC8qIFI1NDQgICAtIEZMTDEgQ29udHJvbCAoMSkgKi8KKwl7IDB4M0Y3NywgMHgzRjc3LCAweDAwMDAgfSwgLyogUjU0NSAgIC0gRkxMMSBDb250cm9sICgyKSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSNTQ2ICAgLSBGTEwxIENvbnRyb2wgKDMpICovCisJeyAweDdGRUYsIDB4N0ZFRiwgMHgwMDAwIH0sIC8qIFI1NDcgICAtIEZMTDEgQ29udHJvbCAoNCkgKi8KKwl7IDB4MUZEQiwgMHgxRkRCLCAweDAwMDAgfSwgLyogUjU0OCAgIC0gRkxMMSBDb250cm9sICg1KSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU1NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU3NSAqLworCXsgMHgwMDA3LCAweDAwMDcsIDB4MDAwMCB9LCAvKiBSNTc2ICAgLSBGTEwyIENvbnRyb2wgKDEpICovCisJeyAweDNGNzcsIDB4M0Y3NywgMHgwMDAwIH0sIC8qIFI1NzcgICAtIEZMTDIgQ29udHJvbCAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjU3OCAgIC0gRkxMMiBDb250cm9sICgzKSAqLworCXsgMHg3RkVGLCAweDdGRUYsIDB4MDAwMCB9LCAvKiBSNTc5ICAgLSBGTEwyIENvbnRyb2wgKDQpICovCisJeyAweDFGREIsIDB4MUZEQiwgMHgwMDAwIH0sIC8qIFI1ODAgICAtIEZMTDIgQ29udHJvbCAoNSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTg4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjU3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzU2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc2NyAqLworCXsgMHhFMUY4LCAweEUxRjgsIDB4MDAwMCB9LCAvKiBSNzY4ICAgLSBBSUYxIENvbnRyb2wgKDEpICovCisJeyAweENEMUYsIDB4Q0QxRiwgMHgwMDAwIH0sIC8qIFI3NjkgICAtIEFJRjEgQ29udHJvbCAoMikgKi8KKwl7IDB4RjAwMCwgMHhGMDAwLCAweDAwMDAgfSwgLyogUjc3MCAgIC0gQUlGMSBNYXN0ZXIvU2xhdmUgKi8KKwl7IDB4MDFGMCwgMHgwMUYwLCAweDAwMDAgfSwgLyogUjc3MSAgIC0gQUlGMSBCQ0xLICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHgwMDAwIH0sIC8qIFI3NzIgICAtIEFJRjFBREMgTFJDTEsgKi8KKwl7IDB4MEZGRiwgMHgwRkZGLCAweDAwMDAgfSwgLyogUjc3MyAgIC0gQUlGMURBQyBMUkNMSyAqLworCXsgMHgwMDAzLCAweDAwMDMsIDB4MDAwMCB9LCAvKiBSNzc0ICAgLSBBSUYxREFDIERhdGEgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweDAwMDAgfSwgLyogUjc3NSAgIC0gQUlGMUFEQyBEYXRhICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3ODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc4MyAqLworCXsgMHhGMUY4LCAweEYxRjgsIDB4MDAwMCB9LCAvKiBSNzg0ICAgLSBBSUYyIENvbnRyb2wgKDEpICovCisJeyAweEZEMUYsIDB4RkQxRiwgMHgwMDAwIH0sIC8qIFI3ODUgICAtIEFJRjIgQ29udHJvbCAoMikgKi8KKwl7IDB4RjAwMCwgMHhGMDAwLCAweDAwMDAgfSwgLyogUjc4NiAgIC0gQUlGMiBNYXN0ZXIvU2xhdmUgKi8KKwl7IDB4MDFGMCwgMHgwMUYwLCAweDAwMDAgfSwgLyogUjc4NyAgIC0gQUlGMiBCQ0xLICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHgwMDAwIH0sIC8qIFI3ODggICAtIEFJRjJBREMgTFJDTEsgKi8KKwl7IDB4MEZGRiwgMHgwRkZGLCAweDAwMDAgfSwgLyogUjc4OSAgIC0gQUlGMkRBQyBMUkNMSyAqLworCXsgMHgwMDAzLCAweDAwMDMsIDB4MDAwMCB9LCAvKiBSNzkwICAgLSBBSUYyREFDIERhdGEgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweDAwMDAgfSwgLyogUjc5MSAgIC0gQUlGMkFEQyBEYXRhICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODU3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4OTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4OTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4OTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTU2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5ODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5ODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5ODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMjMgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEwMjQgIC0gQUlGMSBBREMxIExlZnQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMDI1ICAtIEFJRjEgQURDMSBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEwMjYgIC0gQUlGMSBEQUMxIExlZnQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMDI3ICAtIEFJRjEgREFDMSBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEwMjggIC0gQUlGMSBBREMyIExlZnQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMDI5ICAtIEFJRjEgQURDMiBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEwMzAgIC0gQUlGMSBEQUMyIExlZnQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMDMxICAtIEFJRjEgREFDMiBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMzkgKi8KKwl7IDB4RjgwMCwgMHhGODAwLCAweDAwMDAgfSwgLyogUjEwNDAgIC0gQUlGMSBBREMxIEZpbHRlcnMgKi8KKwl7IDB4NzgwMCwgMHg3ODAwLCAweDAwMDAgfSwgLyogUjEwNDEgIC0gQUlGMSBBREMyIEZpbHRlcnMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNTUgKi8KKwl7IDB4MDJCNiwgMHgwMkI2LCAweDAwMDAgfSwgLyogUjEwNTYgIC0gQUlGMSBEQUMxIEZpbHRlcnMgKDEpICovCisJeyAweDNGMDAsIDB4M0YwMCwgMHgwMDAwIH0sIC8qIFIxMDU3ICAtIEFJRjEgREFDMSBGaWx0ZXJzICgyKSAqLworCXsgMHgwMkI2LCAweDAyQjYsIDB4MDAwMCB9LCAvKiBSMTA1OCAgLSBBSUYxIERBQzIgRmlsdGVycyAoMSkgKi8KKwl7IDB4M0YwMCwgMHgzRjAwLCAweDAwMDAgfSwgLyogUjEwNTkgIC0gQUlGMSBEQUMyIEZpbHRlcnMgKDIpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDg3ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMDg4ICAtIEFJRjEgRFJDMSAoMSkgKi8KKwl7IDB4MUZGRiwgMHgxRkZGLCAweDAwMDAgfSwgLyogUjEwODkgIC0gQUlGMSBEUkMxICgyKSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTA5MCAgLSBBSUYxIERSQzEgKDMpICovCisJeyAweDA3RkYsIDB4MDdGRiwgMHgwMDAwIH0sIC8qIFIxMDkxICAtIEFJRjEgRFJDMSAoNCkgKi8KKwl7IDB4MDNGRiwgMHgwM0ZGLCAweDAwMDAgfSwgLyogUjEwOTIgIC0gQUlGMSBEUkMxICg1KSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEwMyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTEwNCAgLSBBSUYxIERSQzIgKDEpICovCisJeyAweDFGRkYsIDB4MUZGRiwgMHgwMDAwIH0sIC8qIFIxMTA1ICAtIEFJRjEgRFJDMiAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExMDYgIC0gQUlGMSBEUkMyICgzKSAqLworCXsgMHgwN0ZGLCAweDA3RkYsIDB4MDAwMCB9LCAvKiBSMTEwNyAgLSBBSUYxIERSQzIgKDQpICovCisJeyAweDAzRkYsIDB4MDNGRiwgMHgwMDAwIH0sIC8qIFIxMTA4ICAtIEFJRjEgRFJDMiAoNSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNTEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNTIgIC0gQUlGMSBEQUMxIEVRIEdhaW5zICgxKSAqLworCXsgMHhGRkMwLCAweEZGQzAsIDB4MDAwMCB9LCAvKiBSMTE1MyAgLSBBSUYxIERBQzEgRVEgR2FpbnMgKDIpICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTU0ICAtIEFJRjEgREFDMSBFUSBCYW5kIDEgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE1NSAgLSBBSUYxIERBQzEgRVEgQmFuZCAxIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNTYgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMSBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE1NyAgLSBBSUYxIERBQzEgRVEgQmFuZCAyIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNTggIC0gQUlGMSBEQUMxIEVRIEJhbmQgMiBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTU5ICAtIEFJRjEgREFDMSBFUSBCYW5kIDIgQyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE2MCAgLSBBSUYxIERBQzEgRVEgQmFuZCAyIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTYxICAtIEFJRjEgREFDMSBFUSBCYW5kIDMgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE2MiAgLSBBSUYxIERBQzEgRVEgQmFuZCAzIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNjMgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMyBDICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTY0ICAtIEFJRjEgREFDMSBFUSBCYW5kIDMgUEcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNjUgIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTY2ICAtIEFJRjEgREFDMSBFUSBCYW5kIDQgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE2NyAgLSBBSUYxIERBQzEgRVEgQmFuZCA0IEMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNjggIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE2OSAgLSBBSUYxIERBQzEgRVEgQmFuZCA1IEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNzAgIC0gQUlGMSBEQUMxIEVRIEJhbmQgNSBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTcxICAtIEFJRjEgREFDMSBFUSBCYW5kIDUgUEcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExODMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExODQgIC0gQUlGMSBEQUMyIEVRIEdhaW5zICgxKSAqLworCXsgMHhGRkMwLCAweEZGQzAsIDB4MDAwMCB9LCAvKiBSMTE4NSAgLSBBSUYxIERBQzIgRVEgR2FpbnMgKDIpICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTg2ICAtIEFJRjEgREFDMiBFUSBCYW5kIDEgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE4NyAgLSBBSUYxIERBQzIgRVEgQmFuZCAxIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExODggIC0gQUlGMSBEQUMyIEVRIEJhbmQgMSBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE4OSAgLSBBSUYxIERBQzIgRVEgQmFuZCAyIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExOTAgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMiBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTkxICAtIEFJRjEgREFDMiBFUSBCYW5kIDIgQyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE5MiAgLSBBSUYxIERBQzIgRVEgQmFuZCAyIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTkzICAtIEFJRjEgREFDMiBFUSBCYW5kIDMgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE5NCAgLSBBSUYxIERBQzIgRVEgQmFuZCAzIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExOTUgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMyBDICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTk2ICAtIEFJRjEgREFDMiBFUSBCYW5kIDMgUEcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExOTcgIC0gQUlGMSBEQUMyIEVRIEJhbmQgNCBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTk4ICAtIEFJRjEgREFDMiBFUSBCYW5kIDQgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE5OSAgLSBBSUYxIERBQzIgRVEgQmFuZCA0IEMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjEyMDAgIC0gQUlGMSBEQUMyIEVRIEJhbmQgNCBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTIwMSAgLSBBSUYxIERBQzIgRVEgQmFuZCA1IEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjEyMDIgIC0gQUlGMSBEQUMyIEVRIEJhbmQgNSBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMjAzICAtIEFJRjEgREFDMiBFUSBCYW5kIDUgUEcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNzkgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEyODAgIC0gQUlGMiBBREMgTGVmdCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEyODEgIC0gQUlGMiBBREMgUmlnaHQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMjgyICAtIEFJRjIgREFDIExlZnQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMjgzICAtIEFJRjIgREFDIFJpZ2h0IFZvbHVtZSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5NSAqLworCXsgMHhGODAwLCAweEY4MDAsIDB4MDAwMCB9LCAvKiBSMTI5NiAgLSBBSUYyIEFEQyBGaWx0ZXJzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzExICovCisJeyAweDAyQjYsIDB4MDJCNiwgMHgwMDAwIH0sIC8qIFIxMzEyICAtIEFJRjIgREFDIEZpbHRlcnMgKDEpICovCisJeyAweDNGMDAsIDB4M0YwMCwgMHgwMDAwIH0sIC8qIFIxMzEzICAtIEFJRjIgREFDIEZpbHRlcnMgKDIpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQzICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMzQ0ICAtIEFJRjIgRFJDICgxKSAqLworCXsgMHgxRkZGLCAweDFGRkYsIDB4MDAwMCB9LCAvKiBSMTM0NSAgLSBBSUYyIERSQyAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjEzNDYgIC0gQUlGMiBEUkMgKDMpICovCisJeyAweDA3RkYsIDB4MDdGRiwgMHgwMDAwIH0sIC8qIFIxMzQ3ICAtIEFJRjIgRFJDICg0KSAqLworCXsgMHgwM0ZGLCAweDAzRkYsIDB4MDAwMCB9LCAvKiBSMTM0OCAgLSBBSUYyIERSQyAoNSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MDcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MDggIC0gQUlGMiBFUSBHYWlucyAoMSkgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjE0MDkgIC0gQUlGMiBFUSBHYWlucyAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MTAgIC0gQUlGMiBFUSBCYW5kIDEgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQxMSAgLSBBSUYyIEVRIEJhbmQgMSBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDEyICAtIEFJRjIgRVEgQmFuZCAxIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDEzICAtIEFJRjIgRVEgQmFuZCAyIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MTQgIC0gQUlGMiBFUSBCYW5kIDIgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQxNSAgLSBBSUYyIEVRIEJhbmQgMiBDICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDE2ICAtIEFJRjIgRVEgQmFuZCAyIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDE3ICAtIEFJRjIgRVEgQmFuZCAzIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MTggIC0gQUlGMiBFUSBCYW5kIDMgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQxOSAgLSBBSUYyIEVRIEJhbmQgMyBDICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDIwICAtIEFJRjIgRVEgQmFuZCAzIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDIxICAtIEFJRjIgRVEgQmFuZCA0IEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MjIgIC0gQUlGMiBFUSBCYW5kIDQgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQyMyAgLSBBSUYyIEVRIEJhbmQgNCBDICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDI0ICAtIEFJRjIgRVEgQmFuZCA0IFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDI1ICAtIEFJRjIgRVEgQmFuZCA1IEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MjYgIC0gQUlGMiBFUSBCYW5kIDUgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQyNyAgLSBBSUYyIEVRIEJhbmQgNSBQRyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUzNSAqLworCXsgMHgwMUVGLCAweDAxRUYsIDB4MDAwMCB9LCAvKiBSMTUzNiAgLSBEQUMxIE1peGVyIFZvbHVtZXMgKi8KKwl7IDB4MDAzNywgMHgwMDM3LCAweDAwMDAgfSwgLyogUjE1MzcgIC0gREFDMSBMZWZ0IE1peGVyIFJvdXRpbmcgKi8KKwl7IDB4MDAzNywgMHgwMDM3LCAweDAwMDAgfSwgLyogUjE1MzggIC0gREFDMSBSaWdodCBNaXhlciBSb3V0aW5nICovCisJeyAweDAxRUYsIDB4MDFFRiwgMHgwMDAwIH0sIC8qIFIxNTM5ICAtIERBQzIgTWl4ZXIgVm9sdW1lcyAqLworCXsgMHgwMDM3LCAweDAwMzcsIDB4MDAwMCB9LCAvKiBSMTU0MCAgLSBEQUMyIExlZnQgTWl4ZXIgUm91dGluZyAqLworCXsgMHgwMDM3LCAweDAwMzcsIDB4MDAwMCB9LCAvKiBSMTU0MSAgLSBEQUMyIFJpZ2h0IE1peGVyIFJvdXRpbmcgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweDAwMDAgfSwgLyogUjE1NDIgIC0gQUlGMSBBREMxIExlZnQgTWl4ZXIgUm91dGluZyAqLworCXsgMHgwMDAzLCAweDAwMDMsIDB4MDAwMCB9LCAvKiBSMTU0MyAgLSBBSUYxIEFEQzEgUmlnaHQgTWl4ZXIgUm91dGluZyAqLworCXsgMHgwMDAzLCAweDAwMDMsIDB4MDAwMCB9LCAvKiBSMTU0NCAgLSBBSUYxIEFEQzIgTGVmdCBNaXhlciBSb3V0aW5nICovCisJeyAweDAwMDMsIDB4MDAwMywgMHgwMDAwIH0sIC8qIFIxNTQ1ICAtIEFJRjEgQURDMiBSaWdodCBtaXhlciBSb3V0aW5nICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTUxICovCisJeyAweDAyRkYsIDB4MDNGRiwgMHgwMDAwIH0sIC8qIFIxNTUyICAtIERBQzEgTGVmdCBWb2x1bWUgKi8KKwl7IDB4MDJGRiwgMHgwM0ZGLCAweDAwMDAgfSwgLyogUjE1NTMgIC0gREFDMSBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDJGRiwgMHgwM0ZGLCAweDAwMDAgfSwgLyogUjE1NTQgIC0gREFDMiBMZWZ0IFZvbHVtZSAqLworCXsgMHgwMkZGLCAweDAzRkYsIDB4MDAwMCB9LCAvKiBSMTU1NSAgLSBEQUMyIFJpZ2h0IFZvbHVtZSAqLworCXsgMHgwMDAzLCAweDAwMDMsIDB4MDAwMCB9LCAvKiBSMTU1NiAgLSBEQUMgU29mdG11dGUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NjcgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweDAwMDAgfSwgLyogUjE1NjggIC0gT3ZlcnNhbXBsaW5nICovCisJeyAweDAzQzMsIDB4MDNDMywgMHgwMDAwIH0sIC8qIFIxNTY5ICAtIFNpZGV0b25lICovCit9OworCitzdGF0aWMgaW50IHdtODk5NF9yZWFkYWJsZSh1bnNpZ25lZCBpbnQgcmVnKQoreworCWlmIChyZWcgPj0gQVJSQVlfU0laRShhY2Nlc3NfbWFza3MpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gYWNjZXNzX21hc2tzW3JlZ10ucmVhZGFibGUgIT0gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfdm9sYXRpbGUodW5zaWduZWQgaW50IHJlZykKK3sKKwlpZiAocmVnID49IFdNODk5NF9SRUdfQ0FDSEVfU0laRSkKKwkJcmV0dXJuIDE7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgV004OTk0X1NPRlRXQVJFX1JFU0VUOgorCWNhc2UgV004OTk0X0NISVBfUkVWSVNJT046CisJY2FzZSBXTTg5OTRfRENfU0VSVk9fMToKKwljYXNlIFdNODk5NF9EQ19TRVJWT19SRUFEQkFDSzoKKwljYXNlIFdNODk5NF9SQVRFX1NUQVRVUzoKKwljYXNlIFdNODk5NF9MRE9fMToKKwljYXNlIFdNODk5NF9MRE9fMjoKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IHdtODk5NF93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCUJVR19PTihyZWcgPiBXTTg5OTRfTUFYX1JFR0lTVEVSKTsKKworCWlmICghd204OTk0X3ZvbGF0aWxlKHJlZykpCisJCXdtODk5NC0+cmVnX2NhY2hlW3JlZ10gPSB2YWx1ZTsKKworCXJldHVybiB3bTg5OTRfcmVnX3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIHJlZywgdmFsdWUpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHdtODk5NF9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQl1bnNpZ25lZCBpbnQgcmVnKQoreworCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKworCUJVR19PTihyZWcgPiBXTTg5OTRfTUFYX1JFR0lTVEVSKTsKKworCWlmICh3bTg5OTRfdm9sYXRpbGUocmVnKSkKKwkJcmV0dXJuIHdtODk5NF9yZWdfcmVhZChjb2RlYy0+Y29udHJvbF9kYXRhLCByZWcpOworCWVsc2UKKwkJcmV0dXJuIHJlZ19jYWNoZVtyZWddOworfQorCitzdGF0aWMgaW50IGNvbmZpZ3VyZV9haWZfY2xvY2soc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgYWlmKQoreworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmF0ZTsKKwlpbnQgcmVnMSA9IDA7CisJaW50IG9mZnNldDsKKworCWlmIChhaWYpCisJCW9mZnNldCA9IDQ7CisJZWxzZQorCQlvZmZzZXQgPSAwOworCisJc3dpdGNoICh3bTg5OTQtPnN5c2Nsa1thaWZdKSB7CisJY2FzZSBXTTg5OTRfU1lTQ0xLX01DTEsxOgorCQlyYXRlID0gd204OTk0LT5tY2xrWzBdOworCQlicmVhazsKKworCWNhc2UgV004OTk0X1NZU0NMS19NQ0xLMjoKKwkJcmVnMSB8PSAweDg7CisJCXJhdGUgPSB3bTg5OTQtPm1jbGtbMV07CisJCWJyZWFrOworCisJY2FzZSBXTTg5OTRfU1lTQ0xLX0ZMTDE6CisJCXJlZzEgfD0gMHgxMDsKKwkJcmF0ZSA9IHdtODk5NC0+ZmxsWzBdLm91dDsKKwkJYnJlYWs7CisKKwljYXNlIFdNODk5NF9TWVNDTEtfRkxMMjoKKwkJcmVnMSB8PSAweDE4OworCQlyYXRlID0gd204OTk0LT5mbGxbMV0ub3V0OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChyYXRlID49IDEzNTAwMDAwKSB7CisJCXJhdGUgLz0gMjsKKwkJcmVnMSB8PSBXTTg5OTRfQUlGMUNMS19ESVY7CisKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRGl2aWRpbmcgQUlGJWQgY2xvY2sgdG8gJWRIelxuIiwKKwkJCWFpZiArIDEsIHJhdGUpOworCX0KKwl3bTg5OTQtPmFpZmNsa1thaWZdID0gcmF0ZTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0NMT0NLSU5HXzEgKyBvZmZzZXQsCisJCQkgICAgV004OTk0X0FJRjFDTEtfU1JDX01BU0sgfCBXTTg5OTRfQUlGMUNMS19ESVYsCisJCQkgICAgcmVnMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb25maWd1cmVfY2xvY2soc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgb2xkLCBuZXc7CisKKwkvKiBCcmluZyB1cCB0aGUgQUlGIGNsb2NrcyBmaXJzdCAqLworCWNvbmZpZ3VyZV9haWZfY2xvY2soY29kZWMsIDApOworCWNvbmZpZ3VyZV9haWZfY2xvY2soY29kZWMsIDEpOworCisJLyogVGhlbiBzd2l0Y2ggQ0xLX1NZUyBvdmVyIHRvIHRoZSBoaWdoZXIgb2YgdGhlbTsgYSBjaGFuZ2UKKwkgKiBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSBjbG9ja2luZyBjaGFuZ2Ugd2hpY2ggY2FuCisJICogb25seSBiZSBtYWRlIG91dHNpZGUgb2YgREFQTSBzbyB3ZSBjYW4gc2FmZWx5IHJlZG8gdGhlCisJICogY2xvY2tpbmcuCisJICovCisKKwkvKiBJZiB0aGV5J3JlIGVxdWFsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGlzIHVzZWQgKi8KKwlpZiAod204OTk0LT5haWZjbGtbMF0gPT0gd204OTk0LT5haWZjbGtbMV0pCisJCXJldHVybiAwOworCisJaWYgKHdtODk5NC0+YWlmY2xrWzBdIDwgd204OTk0LT5haWZjbGtbMV0pCisJCW5ldyA9IFdNODk5NF9TWVNDTEtfU1JDOworCWVsc2UKKwkJbmV3ID0gMDsKKworCW9sZCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X0NMT0NLSU5HXzEpICYgV004OTk0X1NZU0NMS19TUkM7CisKKwkvKiBJZiB0aGVyZSdzIG5vIGNoYW5nZSB0aGVuIHdlJ3JlIGRvbmUuICovCisJaWYgKG9sZCA9PSBuZXcpCisJCXJldHVybiAwOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0NMT0NLSU5HXzEsIFdNODk5NF9TWVNDTEtfU1JDLCBuZXcpOworCisJc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfY2xrX3N5cyhzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc291cmNlLAorCQkJIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzaW5rKQoreworCWludCByZWcgPSBzbmRfc29jX3JlYWQoc291cmNlLT5jb2RlYywgV004OTk0X0NMT0NLSU5HXzEpOworCWNvbnN0IGNoYXIgKmNsazsKKworCS8qIENoZWNrIHdoYXQgd2UncmUgY3VycmVudGx5IHVzaW5nIGZvciBDTEtfU1lTICovCisJaWYgKHJlZyAmIFdNODk5NF9TWVNDTEtfU1JDKQorCQljbGsgPSAiQUlGMkNMSyI7CisJZWxzZQorCQljbGsgPSAiQUlGMUNMSyI7CisKKwlyZXR1cm4gc3RyY21wKHNvdXJjZS0+bmFtZSwgY2xrKSA9PSAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2lkZXRvbmVfaHBmX3RleHRbXSA9IHsKKwkiMi43a0h6IiwgIjEuMzVrSHoiLCAiNjc1SHoiLCAiMzcwSHoiLCAiMTgwSHoiLCAiOTBIeiIsICI0NUh6IgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBzaWRldG9uZV9ocGYgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfU0lERVRPTkUsIDcsIDcsIHNpZGV0b25lX2hwZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGFpZl90bHYsIDAsIDYwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGlnaXRhbF90bHYsIC03MjAwLCA3NSwgMSk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoc3RfdGx2LCAtMzYwMCwgMzAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRSh3bTg5OTRfM2RfdGx2LCAtMTYwMCwgMTgzLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShlcV90bHYsIC0xMjAwLCAxMDAsIDApOworCisjZGVmaW5lIFdNODk5NF9EUkNfU1dJVENIKHhuYW1lLCByZWcsIHNoaWZ0KSBcCit7CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCBcCisJLmluZm8gPSBzbmRfc29jX2luZm9fdm9sc3csIC5nZXQgPSBzbmRfc29jX2dldF92b2xzdyxcCisJLnB1dCA9IHdtODk5NF9wdXRfZHJjX3N3LCBcCisJLnByaXZhdGVfdmFsdWUgPSAgU09DX1NJTkdMRV9WQUxVRShyZWcsIHNoaWZ0LCAxLCAwKSB9CisKK3N0YXRpYyBpbnQgd204OTk0X3B1dF9kcmNfc3coc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPQorCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBtYXNrLCByZXQ7CisKKwkvKiBDYW4ndCBlbmFibGUgYm90aCBBREMgYW5kIERBQyBwYXRocyBzaW11bHRhbmVvdXNseSAqLworCWlmIChtYy0+c2hpZnQgPT0gV004OTk0X0FJRjFEQUMxX0RSQ19FTkFfU0hJRlQpCisJCW1hc2sgPSBXTTg5OTRfQUlGMUFEQzFMX0RSQ19FTkFfTUFTSyB8CisJCQlXTTg5OTRfQUlGMUFEQzFSX0RSQ19FTkFfTUFTSzsKKwllbHNlCisJCW1hc2sgPSBXTTg5OTRfQUlGMURBQzFfRFJDX0VOQV9NQVNLOworCisJcmV0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBtYy0+cmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocmV0ICYgbWFzaykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc25kX3NvY19wdXRfdm9sc3coa2NvbnRyb2wsIHVjb250cm9sKTsKK30KKworCisKK3N0YXRpYyB2b2lkIHdtODk5NF9zZXRfZHJjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGRyYykKK3sKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEgPSB3bTg5OTQtPnBkYXRhOworCWludCBiYXNlID0gd204OTk0X2RyY19iYXNlW2RyY107CisJaW50IGNmZyA9IHdtODk5NC0+ZHJjX2NmZ1tkcmNdOworCWludCBzYXZlLCBpOworCisJLyogU2F2ZSBhbnkgZW5hYmxlczsgdGhlIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGNsZWFyIHRoZW0uICovCisJc2F2ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgYmFzZSk7CisJc2F2ZSAmPSBXTTg5OTRfQUlGMURBQzFfRFJDX0VOQSB8IFdNODk5NF9BSUYxQURDMUxfRFJDX0VOQSB8CisJCVdNODk5NF9BSUYxQURDMVJfRFJDX0VOQTsKKworCWZvciAoaSA9IDA7IGkgPCBXTTg5OTRfRFJDX1JFR1M7IGkrKykKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYmFzZSArIGksIDB4ZmZmZiwKKwkJCQkgICAgcGRhdGEtPmRyY19jZmdzW2NmZ10ucmVnc1tpXSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBiYXNlLCBXTTg5OTRfQUlGMURBQzFfRFJDX0VOQSB8CisJCQkgICAgIFdNODk5NF9BSUYxQURDMUxfRFJDX0VOQSB8CisJCQkgICAgIFdNODk5NF9BSUYxQURDMVJfRFJDX0VOQSwgc2F2ZSk7Cit9CisKKy8qIElja3kgYXMgaGVsbCBidXQgc2F2ZXMgY29kZSBkdXBsaWNhdGlvbiAqLworc3RhdGljIGludCB3bTg5OTRfZ2V0X2RyYyhjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChzdHJjbXAobmFtZSwgIkFJRjFEUkMxIE1vZGUiKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RyY21wKG5hbWUsICJBSUYxRFJDMiBNb2RlIikgPT0gMCkKKwkJcmV0dXJuIDE7CisJaWYgKHN0cmNtcChuYW1lLCAiQUlGMkRSQyBNb2RlIikgPT0gMCkKKwkJcmV0dXJuIDI7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X3B1dF9kcmNfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwkKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YSA9IHdtODk5NC0+cGRhdGE7CisJaW50IGRyYyA9IHdtODk5NF9nZXRfZHJjKGtjb250cm9sLT5pZC5uYW1lKTsKKwlpbnQgdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWlmIChkcmMgPCAwKQorCQlyZXR1cm4gZHJjOworCisJaWYgKHZhbHVlID49IHBkYXRhLT5udW1fZHJjX2NmZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJd204OTk0LT5kcmNfY2ZnW2RyY10gPSB2YWx1ZTsKKworCXdtODk5NF9zZXRfZHJjKGNvZGVjLCBkcmMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2dldF9kcmNfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBkcmMgPSB3bTg5OTRfZ2V0X2RyYyhrY29udHJvbC0+aWQubmFtZSk7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gd204OTk0LT5kcmNfY2ZnW2RyY107CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd204OTk0X3NldF9yZXR1bmVfbW9iaWxlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGJsb2NrKQoreworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YSA9IHdtODk5NC0+cGRhdGE7CisJaW50IGJhc2UgPSB3bTg5OTRfcmV0dW5lX21vYmlsZV9iYXNlW2Jsb2NrXTsKKwlpbnQgaWZhY2UsIGJlc3QsIGJlc3RfdmFsLCBzYXZlLCBpLCBjZmc7CisKKwlpZiAoIXBkYXRhIHx8ICF3bTg5OTQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGJsb2NrKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJaWZhY2UgPSAwOworCQlicmVhazsKKwljYXNlIDI6CisJCWlmYWNlID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCS8qIEZpbmQgdGhlIHZlcnNpb24gb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjb25maWd1cmF0aW9uCisJICogd2l0aCB0aGUgbmVhcmVzdCBzYW1wbGUgcmF0ZS4gKi8KKwljZmcgPSB3bTg5OTQtPnJldHVuZV9tb2JpbGVfY2ZnW2Jsb2NrXTsKKwliZXN0ID0gMDsKKwliZXN0X3ZhbCA9IElOVF9NQVg7CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzOyBpKyspIHsKKwkJaWYgKHN0cmNtcChwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLm5hbWUsCisJCQkgICB3bTg5OTQtPnJldHVuZV9tb2JpbGVfdGV4dHNbY2ZnXSkgPT0gMCAmJgorCQkgICAgYWJzKHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ucmF0ZQorCQkJLSB3bTg5OTQtPmRhY19yYXRlc1tpZmFjZV0pIDwgYmVzdF92YWwpIHsKKwkJCWJlc3QgPSBpOworCQkJYmVzdF92YWwgPSBhYnMocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5yYXRlCisJCQkJICAgICAgIC0gd204OTk0LT5kYWNfcmF0ZXNbaWZhY2VdKTsKKwkJfQorCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIlJlVHVuZSBNb2JpbGUgJWQgJXMvJWRIeiBmb3IgJWRIeiBzYW1wbGUgcmF0ZVxuIiwKKwkJYmxvY2ssCisJCXBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbYmVzdF0ubmFtZSwKKwkJcGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tiZXN0XS5yYXRlLAorCQl3bTg5OTQtPmRhY19yYXRlc1tpZmFjZV0pOworCisJLyogVGhlIEVRIHdpbGwgYmUgZGlzYWJsZWQgd2hpbGUgcmVjb25maWd1cmluZyBpdCwgcmVtZW1iZXIgdGhlCisJICogY3VycmVudCBjb25maWd1cmF0aW9uLiAKKwkgKi8KKwlzYXZlID0gc25kX3NvY19yZWFkKGNvZGVjLCBiYXNlKTsKKwlzYXZlICY9IFdNODk5NF9BSUYxREFDMV9FUV9FTkE7CisKKwlmb3IgKGkgPSAwOyBpIDwgV004OTk0X0VRX1JFR1M7IGkrKykKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYmFzZSArIGksIDB4ZmZmZiwKKwkJCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2Jlc3RdLnJlZ3NbaV0pOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYmFzZSwgV004OTk0X0FJRjFEQUMxX0VRX0VOQSwgc2F2ZSk7Cit9CisKKy8qIElja3kgYXMgaGVsbCBidXQgc2F2ZXMgY29kZSBkdXBsaWNhdGlvbiAqLworc3RhdGljIGludCB3bTg5OTRfZ2V0X3JldHVuZV9tb2JpbGVfYmxvY2soY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoc3RyY21wKG5hbWUsICJBSUYxLjEgRVEgTW9kZSIpID09IDApCisJCXJldHVybiAwOworCWlmIChzdHJjbXAobmFtZSwgIkFJRjEuMiBFUSBNb2RlIikgPT0gMCkKKwkJcmV0dXJuIDE7CisJaWYgKHN0cmNtcChuYW1lLCAiQUlGMiBFUSBNb2RlIikgPT0gMCkKKwkJcmV0dXJuIDI7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X3B1dF9yZXR1bmVfbW9iaWxlX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwkKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YSA9IHdtODk5NC0+cGRhdGE7CisJaW50IGJsb2NrID0gd204OTk0X2dldF9yZXR1bmVfbW9iaWxlX2Jsb2NrKGtjb250cm9sLT5pZC5uYW1lKTsKKwlpbnQgdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWlmIChibG9jayA8IDApCisJCXJldHVybiBibG9jazsKKworCWlmICh2YWx1ZSA+PSBwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3bTg5OTQtPnJldHVuZV9tb2JpbGVfY2ZnW2Jsb2NrXSA9IHZhbHVlOworCisJd204OTk0X3NldF9yZXR1bmVfbW9iaWxlKGNvZGVjLCBibG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfZ2V0X3JldHVuZV9tb2JpbGVfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGJsb2NrID0gd204OTk0X2dldF9yZXR1bmVfbW9iaWxlX2Jsb2NrKGtjb250cm9sLT5pZC5uYW1lKTsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB3bTg5OTQtPnJldHVuZV9tb2JpbGVfY2ZnW2Jsb2NrXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTk0X3NuZF9jb250cm9sc1tdID0geworU09DX0RPVUJMRV9SX1RMVigiQUlGMUFEQzEgVm9sdW1lIiwgV004OTk0X0FJRjFfQURDMV9MRUZUX1ZPTFVNRSwKKwkJIFdNODk5NF9BSUYxX0FEQzFfUklHSFRfVk9MVU1FLAorCQkgMSwgMTE5LCAwLCBkaWdpdGFsX3RsdiksCitTT0NfRE9VQkxFX1JfVExWKCJBSUYxQURDMiBWb2x1bWUiLCBXTTg5OTRfQUlGMV9BREMyX0xFRlRfVk9MVU1FLAorCQkgV004OTk0X0FJRjFfQURDMl9SSUdIVF9WT0xVTUUsCisJCSAxLCAxMTksIDAsIGRpZ2l0YWxfdGx2KSwKK1NPQ19ET1VCTEVfUl9UTFYoIkFJRjJBREMgVm9sdW1lIiwgV004OTk0X0FJRjJfQURDX0xFRlRfVk9MVU1FLAorCQkgV004OTk0X0FJRjJfQURDX1JJR0hUX1ZPTFVNRSwKKwkJIDEsIDExOSwgMCwgZGlnaXRhbF90bHYpLAorCitTT0NfRE9VQkxFX1JfVExWKCJBSUYxREFDMSBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMxX0xFRlRfVk9MVU1FLAorCQkgV004OTk0X0FJRjFfREFDMV9SSUdIVF9WT0xVTUUsIDEsIDk2LCAwLCBkaWdpdGFsX3RsdiksCitTT0NfRE9VQkxFX1JfVExWKCJBSUYxREFDMiBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMyX0xFRlRfVk9MVU1FLAorCQkgV004OTk0X0FJRjFfREFDMl9SSUdIVF9WT0xVTUUsIDEsIDk2LCAwLCBkaWdpdGFsX3RsdiksCitTT0NfRE9VQkxFX1JfVExWKCJBSUYyREFDIFZvbHVtZSIsIFdNODk5NF9BSUYyX0RBQ19MRUZUX1ZPTFVNRSwKKwkJIFdNODk5NF9BSUYyX0RBQ19SSUdIVF9WT0xVTUUsIDEsIDk2LCAwLCBkaWdpdGFsX3RsdiksCisKK1NPQ19TSU5HTEVfVExWKCJBSUYxIEJvb3N0IFZvbHVtZSIsIFdNODk5NF9BSUYxX0NPTlRST0xfMiwgMTAsIDMsIDAsIGFpZl90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjIgQm9vc3QgVm9sdW1lIiwgV004OTk0X0FJRjJfQ09OVFJPTF8yLCAxMCwgMywgMCwgYWlmX3RsdiksCisKK1NPQ19TSU5HTEUoIkFJRjFEQUMxIEVRIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RBQzFfRVFfR0FJTlNfMSwgMCwgMSwgMCksCitTT0NfU0lOR0xFKCJBSUYxREFDMiBFUSBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EQUMyX0VRX0dBSU5TXzEsIDAsIDEsIDApLAorU09DX1NJTkdMRSgiQUlGMiBFUSBTd2l0Y2giLCBXTTg5OTRfQUlGMl9FUV9HQUlOU18xLCAwLCAxLCAwKSwKKworV004OTk0X0RSQ19TV0lUQ0goIkFJRjFEQUMxIERSQyBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EUkMxXzEsIDIpLAorV004OTk0X0RSQ19TV0lUQ0goIkFJRjFBREMxTCBEUkMgU3dpdGNoIiwgV004OTk0X0FJRjFfRFJDMV8xLCAxKSwKK1dNODk5NF9EUkNfU1dJVENIKCJBSUYxQURDMVIgRFJDIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RSQzFfMSwgMCksCisKK1dNODk5NF9EUkNfU1dJVENIKCJBSUYxREFDMiBEUkMgU3dpdGNoIiwgV004OTk0X0FJRjFfRFJDMl8xLCAyKSwKK1dNODk5NF9EUkNfU1dJVENIKCJBSUYxQURDMkwgRFJDIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RSQzJfMSwgMSksCitXTTg5OTRfRFJDX1NXSVRDSCgiQUlGMUFEQzJSIERSQyBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EUkMyXzEsIDApLAorCitXTTg5OTRfRFJDX1NXSVRDSCgiQUlGMkRBQyBEUkMgU3dpdGNoIiwgV004OTk0X0FJRjJfRFJDXzEsIDIpLAorV004OTk0X0RSQ19TV0lUQ0goIkFJRjJBRENMIERSQyBTd2l0Y2giLCBXTTg5OTRfQUlGMl9EUkNfMSwgMSksCitXTTg5OTRfRFJDX1NXSVRDSCgiQUlGMkFEQ1IgRFJDIFN3aXRjaCIsIFdNODk5NF9BSUYyX0RSQ18xLCAwKSwKKworU09DX1NJTkdMRV9UTFYoIkRBQzEgUmlnaHQgU2lkZXRvbmUgVm9sdW1lIiwgV004OTk0X0RBQzFfTUlYRVJfVk9MVU1FUywKKwkgICAgICAgNSwgMTIsIDAsIHN0X3RsdiksCitTT0NfU0lOR0xFX1RMVigiREFDMSBMZWZ0IFNpZGV0b25lIFZvbHVtZSIsIFdNODk5NF9EQUMxX01JWEVSX1ZPTFVNRVMsCisJICAgICAgIDAsIDEyLCAwLCBzdF90bHYpLAorU09DX1NJTkdMRV9UTFYoIkRBQzIgUmlnaHQgU2lkZXRvbmUgVm9sdW1lIiwgV004OTk0X0RBQzJfTUlYRVJfVk9MVU1FUywKKwkgICAgICAgNSwgMTIsIDAsIHN0X3RsdiksCitTT0NfU0lOR0xFX1RMVigiREFDMiBMZWZ0IFNpZGV0b25lIFZvbHVtZSIsIFdNODk5NF9EQUMyX01JWEVSX1ZPTFVNRVMsCisJICAgICAgIDAsIDEyLCAwLCBzdF90bHYpLAorU09DX0VOVU0oIlNpZGV0b25lIEhQRiBNdXgiLCBzaWRldG9uZV9ocGYpLAorU09DX1NJTkdMRSgiU2lkZXRvbmUgSFBGIFN3aXRjaCIsIFdNODk5NF9TSURFVE9ORSwgNiwgMSwgMCksCisKK1NPQ19ET1VCTEVfUl9UTFYoIkRBQzEgVm9sdW1lIiwgV004OTk0X0RBQzFfTEVGVF9WT0xVTUUsCisJCSBXTTg5OTRfREFDMV9SSUdIVF9WT0xVTUUsIDEsIDk2LCAwLCBkaWdpdGFsX3RsdiksCitTT0NfRE9VQkxFX1IoIkRBQzEgU3dpdGNoIiwgV004OTk0X0RBQzFfTEVGVF9WT0xVTUUsCisJICAgICBXTTg5OTRfREFDMV9SSUdIVF9WT0xVTUUsIDksIDEsIDEpLAorCitTT0NfRE9VQkxFX1JfVExWKCJEQUMyIFZvbHVtZSIsIFdNODk5NF9EQUMyX0xFRlRfVk9MVU1FLAorCQkgV004OTk0X0RBQzJfUklHSFRfVk9MVU1FLCAxLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorU09DX0RPVUJMRV9SKCJEQUMyIFN3aXRjaCIsIFdNODk5NF9EQUMyX0xFRlRfVk9MVU1FLAorCSAgICAgV004OTk0X0RBQzJfUklHSFRfVk9MVU1FLCA5LCAxLCAxKSwKKworU09DX1NJTkdMRV9UTFYoIlNQS0wgREFDMiBWb2x1bWUiLCBXTTg5OTRfU1BLTUlYTF9BVFRFTlVBVElPTiwKKwkgICAgICAgNiwgMSwgMSwgd21faHVic19zcGttaXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJTUEtMIERBQzEgVm9sdW1lIiwgV004OTk0X1NQS01JWExfQVRURU5VQVRJT04sCisJICAgICAgIDIsIDEsIDEsIHdtX2h1YnNfc3BrbWl4X3RsdiksCisKK1NPQ19TSU5HTEVfVExWKCJTUEtSIERBQzIgVm9sdW1lIiwgV004OTk0X1NQS01JWFJfQVRURU5VQVRJT04sCisJICAgICAgIDYsIDEsIDEsIHdtX2h1YnNfc3BrbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiU1BLUiBEQUMxIFZvbHVtZSIsIFdNODk5NF9TUEtNSVhSX0FUVEVOVUFUSU9OLAorCSAgICAgICAyLCAxLCAxLCB3bV9odWJzX3Nwa21peF90bHYpLAorCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzEgM0QgU3RlcmVvIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzFfRklMVEVSU18yLAorCSAgICAgICAxMCwgMTUsIDAsIHdtODk5NF8zZF90bHYpLAorU09DX1NJTkdMRSgiQUlGMURBQzEgM0QgU3RlcmVvIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RBQzJfRklMVEVSU18yLAorCSAgIDgsIDEsIDApLAorU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMyIDNEIFN0ZXJlbyBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMyX0ZJTFRFUlNfMiwKKwkgICAgICAgMTAsIDE1LCAwLCB3bTg5OTRfM2RfdGx2KSwKK1NPQ19TSU5HTEUoIkFJRjFEQUMyIDNEIFN0ZXJlbyBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EQUMyX0ZJTFRFUlNfMiwKKwkgICA4LCAxLCAwKSwKK1NPQ19TSU5HTEVfVExWKCJBSUYyREFDIDNEIFN0ZXJlbyBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMxX0ZJTFRFUlNfMiwKKwkgICAgICAgMTAsIDE1LCAwLCB3bTg5OTRfM2RfdGx2KSwKK1NPQ19TSU5HTEUoIkFJRjJEQUMgM0QgU3RlcmVvIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RBQzJfRklMVEVSU18yLAorCSAgIDgsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk5NF9lcV9jb250cm9sc1tdID0geworU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMxIEVRMSBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMxX0VRX0dBSU5TXzEsIDExLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMSBFUTIgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMV9FUV9HQUlOU18xLCA2LCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMSBFUTMgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMV9FUV9HQUlOU18xLCAxLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMSBFUTQgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMV9FUV9HQUlOU18yLCAxMSwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzEgRVE1IFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzFfRVFfR0FJTlNfMiwgNiwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCisKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMiBFUTEgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMl9FUV9HQUlOU18xLCAxMSwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzIgRVEyIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzJfRVFfR0FJTlNfMSwgNiwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzIgRVEzIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzJfRVFfR0FJTlNfMSwgMSwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzIgRVE0IFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzJfRVFfR0FJTlNfMiwgMTEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMyIEVRNSBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMyX0VRX0dBSU5TXzIsIDYsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorCitTT0NfU0lOR0xFX1RMVigiQUlGMiBFUTEgVm9sdW1lIiwgV004OTk0X0FJRjJfRVFfR0FJTlNfMSwgMTEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjIgRVEyIFZvbHVtZSIsIFdNODk5NF9BSUYyX0VRX0dBSU5TXzEsIDYsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjIgRVEzIFZvbHVtZSIsIFdNODk5NF9BSUYyX0VRX0dBSU5TXzEsIDEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjIgRVE0IFZvbHVtZSIsIFdNODk5NF9BSUYyX0VRX0dBSU5TXzIsIDExLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYyIEVRNSBWb2x1bWUiLCBXTTg5OTRfQUlGMl9FUV9HQUlOU18yLCA2LCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK307CisKK3N0YXRpYyBpbnQgY2xrX3N5c19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CisJCXJldHVybiBjb25maWd1cmVfY2xvY2soY29kZWMpOworCisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCWNvbmZpZ3VyZV9jbG9jayhjb2RlYyk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bTg5OTRfdXBkYXRlX2NsYXNzX3coc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCBlbmFibGUgPSAxOworCWludCBzb3VyY2UgPSAwOyAgLyogR0NDIGZsb3cgYW5hbHlzaXMgY2FuJ3QgdHJhY2sgZW5hYmxlICovCisJaW50IHJlZywgcmVnX3I7CisKKwkvKiBPbmx5IHN1cHBvcnQgZGlyZWN0IERBQy0+aGVhZHBob25lIHBhdGhzICovCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfT1VUUFVUX01JWEVSXzEpOworCWlmICghKHJlZyAmIFdNODk5NF9EQUMxTF9UT19IUE9VVDFMKSkgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJIUEwgY29ubmVjdGVkIHRvIG91dHB1dCBtaXhlclxuIik7CisJCWVuYWJsZSA9IDA7CisJfQorCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfT1VUUFVUX01JWEVSXzIpOworCWlmICghKHJlZyAmIFdNODk5NF9EQUMxUl9UT19IUE9VVDFSKSkgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJIUFIgY29ubmVjdGVkIHRvIG91dHB1dCBtaXhlclxuIik7CisJCWVuYWJsZSA9IDA7CisJfQorCisJLyogV2UgYWxzbyBuZWVkIHRoZSBzYW1lIHNldHRpbmcgZm9yIEwvUiBhbmQgb25seSBvbmUgcGF0aCAqLworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HKTsKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgV004OTk0X0FJRjJEQUNMX1RPX0RBQzFMOgorCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJDbGFzcyBXIHNvdXJjZSBBSUYyREFDXG4iKTsKKwkJc291cmNlID0gMiA8PCBXTTg5OTRfQ1BfRFlOX1NSQ19TRUxfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgV004OTk0X0FJRjFEQUMyTF9UT19EQUMxTDoKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ2xhc3MgVyBzb3VyY2UgQUlGMURBQzJcbiIpOworCQlzb3VyY2UgPSAxIDw8IFdNODk5NF9DUF9EWU5fU1JDX1NFTF9TSElGVDsKKwkJYnJlYWs7CisJY2FzZSBXTTg5OTRfQUlGMURBQzFMX1RPX0RBQzFMOgorCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJDbGFzcyBXIHNvdXJjZSBBSUYxREFDMVxuIik7CisJCXNvdXJjZSA9IDAgPDwgV004OTk0X0NQX0RZTl9TUkNfU0VMX1NISUZUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJEQUMgbWl4ZXIgc2V0dGluZzogJXhcbiIsIHJlZyk7CisJCWVuYWJsZSA9IDA7CisJCWJyZWFrOworCX0KKworCXJlZ19yID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HKTsKKwlpZiAocmVnX3IgIT0gcmVnKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkxlZnQgYW5kIHJpZ2h0IERBQyBtaXhlcnMgZGlmZmVyZW50XG4iKTsKKwkJZW5hYmxlID0gMDsKKwl9CisKKwlpZiAoZW5hYmxlKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkNsYXNzIFcgZW5hYmxlZFxuIik7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9DTEFTU19XXzEsCisJCQkJICAgIFdNODk5NF9DUF9EWU5fUFdSIHwKKwkJCQkgICAgV004OTk0X0NQX0RZTl9TUkNfU0VMX01BU0ssCisJCQkJICAgIHNvdXJjZSB8IFdNODk5NF9DUF9EWU5fUFdSKTsKKwkJCisJfSBlbHNlIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ2xhc3MgVyBkaXNhYmxlZFxuIik7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9DTEFTU19XXzEsCisJCQkJICAgIFdNODk5NF9DUF9EWU5fUFdSLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpocF9tdXhfdGV4dFtdID0geworCSJNaXhlciIsCisJIkRBQyIsCit9OworCisjZGVmaW5lIFdNODk5NF9IUF9FTlVNKHhuYW1lLCB4ZW51bSkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgXAorCS5pbmZvID0gc25kX3NvY19pbmZvX2VudW1fZG91YmxlLCBcCisgCS5nZXQgPSBzbmRfc29jX2RhcG1fZ2V0X2VudW1fZG91YmxlLCBcCisgCS5wdXQgPSB3bTg5OTRfcHV0X2hwX2VudW0sIFwKKyAgCS5wcml2YXRlX3ZhbHVlID0gKHVuc2lnbmVkIGxvbmcpJnhlbnVtIH0KKworc3RhdGljIGludCB3bTg5OTRfcHV0X2hwX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlpbnQgcmV0OworCisJcmV0ID0gc25kX3NvY19kYXBtX3B1dF9lbnVtX2RvdWJsZShrY29udHJvbCwgdWNvbnRyb2wpOworCisJd204OTk0X3VwZGF0ZV9jbGFzc193KGNvZGVjKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gaHBsX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfT1VUUFVUX01JWEVSXzEsIDgsIDIsIGhwX211eF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGhwbF9tdXggPQorCVdNODk5NF9IUF9FTlVNKCJMZWZ0IEhlYWRwaG9uZSBNdXgiLCBocGxfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gaHByX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfT1VUUFVUX01JWEVSXzIsIDgsIDIsIGhwX211eF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGhwcl9tdXggPQorCVdNODk5NF9IUF9FTlVNKCJSaWdodCBIZWFkcGhvbmUgTXV4IiwgaHByX2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqYWRjX211eF90ZXh0W10gPSB7CisJIkFEQyIsCisJIkRNSUMiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhZGNfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKDAsIDAsIDIsIGFkY19tdXhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZGNsX211eCA9CisJU09DX0RBUE1fRU5VTV9WSVJUKCJBRENMIE11eCIsIGFkY19lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkY3JfbXV4ID0KKwlTT0NfREFQTV9FTlVNX1ZJUlQoIkFEQ1IgTXV4IiwgYWRjX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGVmdF9zcGVha2VyX21peGVyW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkRBQzIgU3dpdGNoIiwgV004OTk0X1NQRUFLRVJfTUlYRVIsIDksIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJJbnB1dCBTd2l0Y2giLCBXTTg5OTRfU1BFQUtFUl9NSVhFUiwgNywgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIklOMUxQIFN3aXRjaCIsIFdNODk5NF9TUEVBS0VSX01JWEVSLCA1LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiT3V0cHV0IFN3aXRjaCIsIFdNODk5NF9TUEVBS0VSX01JWEVSLCAzLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiREFDMSBTd2l0Y2giLCBXTTg5OTRfU1BFQUtFUl9NSVhFUiwgMSwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcmlnaHRfc3BlYWtlcl9taXhlcltdID0geworU09DX0RBUE1fU0lOR0xFKCJEQUMyIFN3aXRjaCIsIFdNODk5NF9TUEVBS0VSX01JWEVSLCA4LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiSW5wdXQgU3dpdGNoIiwgV004OTk0X1NQRUFLRVJfTUlYRVIsIDYsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJJTjFSUCBTd2l0Y2giLCBXTTg5OTRfU1BFQUtFUl9NSVhFUiwgNCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIk91dHB1dCBTd2l0Y2giLCBXTTg5OTRfU1BFQUtFUl9NSVhFUiwgMiwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkRBQzEgU3dpdGNoIiwgV004OTk0X1NQRUFLRVJfTUlYRVIsIDAsIDEsIDApLAorfTsKKworLyogRGVidWdnaW5nOyBkdW1wIGNoaXAgc3RhdHVzIGFmdGVyIERBUE0gdHJhbnNpdGlvbnMgKi8KK3N0YXRpYyBpbnQgcG9zdF9ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJTUkMgc3RhdHVzOiAleFxuIiwKKwkJc25kX3NvY19yZWFkKGNvZGVjLAorCQkJICAgICBXTTg5OTRfUkFURV9TVEFUVVMpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjFhZGMxbF9taXhbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiQURDL0RNSUMgU3dpdGNoIiwgV004OTk0X0FJRjFfQURDMV9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJBSUYyIFN3aXRjaCIsIFdNODk5NF9BSUYxX0FEQzFfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYxYWRjMXJfbWl4W10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkFEQy9ETUlDIFN3aXRjaCIsIFdNODk5NF9BSUYxX0FEQzFfUklHSFRfTUlYRVJfUk9VVElORywKKwkJMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkFJRjIgU3dpdGNoIiwgV004OTk0X0FJRjFfQURDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYyZGFjMmxfbWl4W10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5NF9EQUMyX0xFRlRfTUlYRVJfUk9VVElORywKKwkJNSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTk0X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQk0LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQUlGMiBTd2l0Y2giLCBXTTg5OTRfREFDMl9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTIsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJBSUYxLjIgU3dpdGNoIiwgV004OTk0X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkxLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQUlGMS4xIFN3aXRjaCIsIFdNODk5NF9EQUMyX0xFRlRfTUlYRVJfUk9VVElORywKKwkJMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmMmRhYzJyX21peFtdID0geworU09DX0RBUE1fU0lOR0xFKCJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTRfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQk1LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTRfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQk0LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQUlGMiBTd2l0Y2giLCBXTTg5OTRfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkyLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQUlGMS4yIFN3aXRjaCIsIFdNODk5NF9EQUMyX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJBSUYxLjEgU3dpdGNoIiwgV004OTk0X0RBQzJfUklHSFRfTUlYRVJfUk9VVElORywKKwkJMCwgMSwgMCksCit9OworCisjZGVmaW5lIFdNODk5NF9DTEFTU19XX1NXSVRDSCh4bmFtZSwgcmVnLCBzaGlmdCwgbWF4LCBpbnZlcnQpIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIFwKKwkuaW5mbyA9IHNuZF9zb2NfaW5mb192b2xzdywgXAorCS5nZXQgPSBzbmRfc29jX2RhcG1fZ2V0X3ZvbHN3LCAucHV0ID0gd204OTk0X3B1dF9jbGFzc193LCBcCisJLnByaXZhdGVfdmFsdWUgPSAgU09DX1NJTkdMRV9WQUxVRShyZWcsIHNoaWZ0LCBtYXgsIGludmVydCkgfQorCitzdGF0aWMgaW50IHdtODk5NF9wdXRfY2xhc3NfdyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCWludCByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhcG1fcHV0X3ZvbHN3KGtjb250cm9sLCB1Y29udHJvbCk7CisKKwl3bTg5OTRfdXBkYXRlX2NsYXNzX3coY29kZWMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhYzFsX21peFtdID0geworV004OTk0X0NMQVNTX1dfU1dJVENIKCJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTRfREFDMV9MRUZUX01JWEVSX1JPVVRJTkcsCisJCSAgICAgIDUsIDEsIDApLAorV004OTk0X0NMQVNTX1dfU1dJVENIKCJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5NF9EQUMxX0xFRlRfTUlYRVJfUk9VVElORywKKwkJICAgICAgNCwgMSwgMCksCitXTTg5OTRfQ0xBU1NfV19TV0lUQ0goIkFJRjIgU3dpdGNoIiwgV004OTk0X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkgICAgICAyLCAxLCAwKSwKK1dNODk5NF9DTEFTU19XX1NXSVRDSCgiQUlGMS4yIFN3aXRjaCIsIFdNODk5NF9EQUMxX0xFRlRfTUlYRVJfUk9VVElORywKKwkJICAgICAgMSwgMSwgMCksCitXTTg5OTRfQ0xBU1NfV19TV0lUQ0goIkFJRjEuMSBTd2l0Y2giLCBXTTg5OTRfREFDMV9MRUZUX01JWEVSX1JPVVRJTkcsCisJCSAgICAgIDAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhYzFyX21peFtdID0geworV004OTk0X0NMQVNTX1dfU1dJVENIKCJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTRfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkgICAgICA1LCAxLCAwKSwKK1dNODk5NF9DTEFTU19XX1NXSVRDSCgiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTRfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkgICAgICA0LCAxLCAwKSwKK1dNODk5NF9DTEFTU19XX1NXSVRDSCgiQUlGMiBTd2l0Y2giLCBXTTg5OTRfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkgICAgICAyLCAxLCAwKSwKK1dNODk5NF9DTEFTU19XX1NXSVRDSCgiQUlGMS4yIFN3aXRjaCIsIFdNODk5NF9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCSAgICAgIDEsIDEsIDApLAorV004OTk0X0NMQVNTX1dfU1dJVENIKCJBSUYxLjEgU3dpdGNoIiwgV004OTk0X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORywKKwkJICAgICAgMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc2lkZXRvbmVfdGV4dFtdID0geworCSJBREMvRE1JQzEiLCAiRE1JQzIiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBzaWRldG9uZTFfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9TSURFVE9ORSwgMCwgMiwgc2lkZXRvbmVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzaWRldG9uZTFfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJMZWZ0IFNpZGV0b25lIE11eCIsIHNpZGV0b25lMV9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBzaWRldG9uZTJfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9TSURFVE9ORSwgMSwgMiwgc2lkZXRvbmVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzaWRldG9uZTJfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJSaWdodCBTaWRldG9uZSBNdXgiLCBzaWRldG9uZTJfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICphaWYxZGFjX3RleHRbXSA9IHsKKwkiQUlGMURBQ0RBVCIsICJBSUYzREFDREFUIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmMWRhY19lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNiwgMCwgMiwgYWlmMWRhY190ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjFkYWNfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJBSUYxREFDIE11eCIsIGFpZjFkYWNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICphaWYyZGFjX3RleHRbXSA9IHsKKwkiQUlGMkRBQ0RBVCIsICJBSUYzREFDREFUIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmMmRhY19lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNiwgMSwgMiwgYWlmMmRhY190ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjJkYWNfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJBSUYyREFDIE11eCIsIGFpZjJkYWNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICphaWYyYWRjX3RleHRbXSA9IHsKKwkiQUlGMkFEQ0RBVCIsICJBSUYzREFDREFUIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmMmFkY19lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNiwgMiwgMiwgYWlmMmFkY190ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjJhZGNfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJBSUYyQURDIE11eCIsIGFpZjJhZGNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICphaWYzYWRjX3RleHRbXSA9IHsKKwkiQUlGMUFEQ0RBVCIsICJBSUYyQURDREFUIiwgIkFJRjJEQUNEQVQiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWYzYWRjX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF82LCAzLCAzLCBhaWYzYWRjX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmM2FkY19tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFJRjNBREMgTXV4IiwgYWlmM2FkY19lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5NF9kYXBtX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9JTlBVVCgiRE1JQzFEQVQiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiRE1JQzJEQVQiKSwKKworU05EX1NPQ19EQVBNX1NVUFBMWSgiQ0xLX1NZUyIsIFNORF9TT0NfTk9QTSwgMCwgMCwgY2xrX3N5c19ldmVudCwKKwkJICAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKKworU05EX1NPQ19EQVBNX1NVUFBMWSgiRFNQMUNMSyIsIFdNODk5NF9DTE9DS0lOR18xLCAzLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9TVVBQTFkoIkRTUDJDTEsiLCBXTTg5OTRfQ0xPQ0tJTkdfMSwgMiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fU1VQUExZKCJEU1BJTlRDTEsiLCBXTTg5OTRfQ0xPQ0tJTkdfMSwgMSwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9TVVBQTFkoIkFJRjFDTEsiLCBXTTg5OTRfQUlGMV9DTE9DS0lOR18xLCAwLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9TVVBQTFkoIkFJRjJDTEsiLCBXTTg5OTRfQUlGMl9DTE9DS0lOR18xLCAwLCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMxTCIsICJBSUYxIENhcHR1cmUiLAorCQkgICAgIDAsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDksIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMxUiIsICJBSUYxIENhcHR1cmUiLAorCQkgICAgIDAsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDgsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMURBQzFMIiwgTlVMTCwgMCwKKwkJICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDksIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMURBQzFSIiwgTlVMTCwgMCwKKwkJICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDgsIDApLAorCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzJMIiwgIkFJRjEgQ2FwdHVyZSIsCisJCSAgICAgMCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMTEsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMyUiIsICJBSUYxIENhcHR1cmUiLAorCQkgICAgIDAsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDEwLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFEQUMyTCIsIE5VTEwsIDAsCisJCSAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAxMSwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxREFDMlIiLCBOVUxMLCAwLAorCQkgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMTAsIDApLAorCitTTkRfU09DX0RBUE1fTUlYRVIoIkFJRjFBREMxTCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgYWlmMWFkYzFsX21peCwgQVJSQVlfU0laRShhaWYxYWRjMWxfbWl4KSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkFJRjFBREMxUiBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgYWlmMWFkYzFyX21peCwgQVJSQVlfU0laRShhaWYxYWRjMXJfbWl4KSksCisKK1NORF9TT0NfREFQTV9NSVhFUigiQUlGMkRBQzJMIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBhaWYyZGFjMmxfbWl4LCBBUlJBWV9TSVpFKGFpZjJkYWMybF9taXgpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiQUlGMkRBQzJSIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBhaWYyZGFjMnJfbWl4LCBBUlJBWV9TSVpFKGFpZjJkYWMycl9taXgpKSwKKworU05EX1NPQ19EQVBNX01VWCgiTGVmdCBTaWRldG9uZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJnNpZGV0b25lMV9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgU2lkZXRvbmUiLCBTTkRfU09DX05PUE0sIDAsIDAsICZzaWRldG9uZTJfbXV4KSwKKworU05EX1NPQ19EQVBNX01JWEVSKCJEQUMxTCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgZGFjMWxfbWl4LCBBUlJBWV9TSVpFKGRhYzFsX21peCkpLAorU05EX1NPQ19EQVBNX01JWEVSKCJEQUMxUiBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgZGFjMXJfbWl4LCBBUlJBWV9TSVpFKGRhYzFyX21peCkpLAorCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMkFEQ0wiLCBOVUxMLCAwLAorCQkgICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDEzLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYyQURDUiIsIE5VTEwsIDAsCisJCSAgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMTIsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMkRBQ0wiLCBOVUxMLCAwLAorCQkgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMTMsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMkRBQ1IiLCBOVUxMLCAwLAorCQkgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMTIsIDApLAorCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxREFDREFUIiwgIkFJRjEgUGxheWJhY2siLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMkRBQ0RBVCIsICJBSUYyIFBsYXliYWNrIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYyQURDREFUIiwgIkFJRjIgQ2FwdHVyZSIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCisKK1NORF9TT0NfREFQTV9NVVgoIkFJRjFEQUMgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmMWRhY19tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiQUlGMkRBQyBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZhaWYyZGFjX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJBSUYyQURDIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmFpZjJhZGNfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkFJRjNBREMgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmM2FkY19tdXgpLAorCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYzREFDREFUIiwgIkFJRjMgUGxheWJhY2siLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGM0FEQ0RBVCIsICJBSUYzIENhcHR1cmUiLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorCitTTkRfU09DX0RBUE1fU1VQUExZKCJUT0NMSyIsIFdNODk5NF9DTE9DS0lOR18xLCA0LCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX0FEQygiRE1JQzJMIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgNSwgMCksCitTTkRfU09DX0RBUE1fQURDKCJETUlDMlIiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCA0LCAwKSwKK1NORF9TT0NfREFQTV9BREMoIkRNSUMxTCIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDMsIDApLAorU05EX1NPQ19EQVBNX0FEQygiRE1JQzFSIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMiwgMCksCisKKy8qIFBvd2VyIGlzIGRvbmUgd2l0aCB0aGUgbXV4ZXMgc2luY2UgdGhlIEFEQyBwb3dlciBhbHNvIGNvbnRyb2xzIHRoZQorICogZG93bnNhbXBsaW5nIGNoYWluLCB0aGUgY2hpcCB3aWxsIGF1dG9tYXRpY2FsbHkgbWFuYWdlIHRoZSBhbmFsb2d1ZQorICogc3BlY2lmaWMgcG9ydGlvbnMuCisgKi8KK1NORF9TT0NfREFQTV9BREMoIkFEQ0wiLCBOVUxMLCBTTkRfU09DX05PUE0sIDEsIDApLAorU05EX1NPQ19EQVBNX0FEQygiQURDUiIsIE5VTEwsIFNORF9TT0NfTk9QTSwgMCwgMCksCisKK1NORF9TT0NfREFQTV9NVVgoIkFEQ0wgTXV4IiwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMSwgMCwgJmFkY2xfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkFEQ1IgTXV4IiwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMCwgMCwgJmFkY3JfbXV4KSwKKworU05EX1NPQ19EQVBNX0RBQygiREFDMkwiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAzLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQzJSIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMiwgMCksCitTTkRfU09DX0RBUE1fREFDKCJEQUMxTCIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDEsIDApLAorU05EX1NPQ19EQVBNX0RBQygiREFDMVIiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAwLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiTGVmdCBIZWFkcGhvbmUgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmaHBsX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJSaWdodCBIZWFkcGhvbmUgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmaHByX211eCksCisKK1NORF9TT0NfREFQTV9NSVhFUigiU1BLTCIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzMsIDgsIDAsCisJCSAgIGxlZnRfc3BlYWtlcl9taXhlciwgQVJSQVlfU0laRShsZWZ0X3NwZWFrZXJfbWl4ZXIpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiU1BLUiIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzMsIDksIDAsCisJCSAgIHJpZ2h0X3NwZWFrZXJfbWl4ZXIsIEFSUkFZX1NJWkUocmlnaHRfc3BlYWtlcl9taXhlcikpLAorCitTTkRfU09DX0RBUE1fUE9TVCgiRGVidWcgbG9nIiwgcG9zdF9ldiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBpbnRlcmNvbltdID0geworCisJeyAiQ0xLX1NZUyIsIE5VTEwsICJBSUYxQ0xLIiwgY2hlY2tfY2xrX3N5cyB9LAorCXsgIkNMS19TWVMiLCBOVUxMLCAiQUlGMkNMSyIsIGNoZWNrX2Nsa19zeXMgfSwKKworCXsgIkRTUDFDTEsiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwl7ICJEU1AyQ0xLIiwgTlVMTCwgIkNMS19TWVMiIH0sCisJeyAiRFNQSU5UQ0xLIiwgTlVMTCwgIkNMS19TWVMiIH0sCisKKwl7ICJBSUYxQURDMUwiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxQURDMUwiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxQURDMVIiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxQURDMVIiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxQURDMVIiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiQUlGMURBQzFMIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQUlGMURBQzFMIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQUlGMURBQzFSIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQUlGMURBQzFSIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQUlGMURBQzFSIiwgTlVMTCwgIkRTUElOVENMSyIgfSwKKworCXsgIkFJRjFBREMyTCIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkFJRjFBREMyTCIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkFJRjFBREMyUiIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkFJRjFBREMyUiIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkFJRjFBREMyUiIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJBSUYxREFDMkwiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxREFDMkwiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxREFDMlIiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxREFDMlIiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxREFDMlIiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiQUlGMkFEQ0wiLCBOVUxMLCAiQUlGMkNMSyIgfSwKKwl7ICJBSUYyQURDTCIsIE5VTEwsICJEU1AyQ0xLIiB9LAorCXsgIkFJRjJBRENSIiwgTlVMTCwgIkFJRjJDTEsiIH0sCisJeyAiQUlGMkFEQ1IiLCBOVUxMLCAiRFNQMkNMSyIgfSwKKwl7ICJBSUYyQURDUiIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJBSUYyREFDTCIsIE5VTEwsICJBSUYyQ0xLIiB9LAorCXsgIkFJRjJEQUNMIiwgTlVMTCwgIkRTUDJDTEsiIH0sCisJeyAiQUlGMkRBQ1IiLCBOVUxMLCAiQUlGMkNMSyIgfSwKKwl7ICJBSUYyREFDUiIsIE5VTEwsICJEU1AyQ0xLIiB9LAorCXsgIkFJRjJEQUNSIiwgTlVMTCwgIkRTUElOVENMSyIgfSwKKworCXsgIkRNSUMxTCIsIE5VTEwsICJETUlDMURBVCIgfSwKKwl7ICJETUlDMUwiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwl7ICJETUlDMVIiLCBOVUxMLCAiRE1JQzFEQVQiIH0sCisJeyAiRE1JQzFSIiwgTlVMTCwgIkNMS19TWVMiIH0sCisJeyAiRE1JQzJMIiwgTlVMTCwgIkRNSUMyREFUIiB9LAorCXsgIkRNSUMyTCIsIE5VTEwsICJDTEtfU1lTIiB9LAorCXsgIkRNSUMyUiIsIE5VTEwsICJETUlDMkRBVCIgfSwKKwl7ICJETUlDMlIiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKworCXsgIkFEQ0wiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBRENMIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQURDTCIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJBRENSIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQURDUiIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkFEQ1IiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiQURDTCBNdXgiLCAiQURDIiwgIkFEQ0wiIH0sCisJeyAiQURDTCBNdXgiLCAiRE1JQyIsICJETUlDMUwiIH0sCisJeyAiQURDUiBNdXgiLCAiQURDIiwgIkFEQ1IiIH0sCisJeyAiQURDUiBNdXgiLCAiRE1JQyIsICJETUlDMVIiIH0sCisKKwl7ICJEQUMxTCIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkRBQzFMIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiREFDMUwiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiREFDMVIiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJEQUMxUiIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkRBQzFSIiwgTlVMTCwgIkRTUElOVENMSyIgfSwKKworCXsgIkRBQzJMIiwgTlVMTCwgIkFJRjJDTEsiIH0sCisJeyAiREFDMkwiLCBOVUxMLCAiRFNQMkNMSyIgfSwKKwl7ICJEQUMyTCIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJEQUMyUiIsIE5VTEwsICJBSUYyREFDUiIgfSwKKwl7ICJEQUMyUiIsIE5VTEwsICJBSUYyQ0xLIiB9LAorCXsgIkRBQzJSIiwgTlVMTCwgIkRTUDJDTEsiIH0sCisJeyAiREFDMlIiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiVE9DTEsiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKworCS8qIEFJRjEgb3V0cHV0cyAqLworCXsgIkFJRjFBREMxTCIsIE5VTEwsICJBSUYxQURDMUwgTWl4ZXIiIH0sCisJeyAiQUlGMUFEQzFMIE1peGVyIiwgIkFEQy9ETUlDIFN3aXRjaCIsICJBRENMIE11eCIgfSwKKwl7ICJBSUYxQURDMUwgTWl4ZXIiLCAiQUlGMiBTd2l0Y2giLCAiQUlGMkRBQ0wiIH0sCisKKwl7ICJBSUYxQURDMVIiLCBOVUxMLCAiQUlGMUFEQzFSIE1peGVyIiB9LAorCXsgIkFJRjFBREMxUiBNaXhlciIsICJBREMvRE1JQyBTd2l0Y2giLCAiQURDUiBNdXgiIH0sCisJeyAiQUlGMUFEQzFSIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNSIiB9LAorCisJLyogUGluIGxldmVsIHJvdXRpbmcgZm9yIEFJRjMgKi8KKwl7ICJBSUYxREFDMUwiLCBOVUxMLCAiQUlGMURBQyBNdXgiIH0sCisJeyAiQUlGMURBQzFSIiwgTlVMTCwgIkFJRjFEQUMgTXV4IiB9LAorCXsgIkFJRjFEQUMyTCIsIE5VTEwsICJBSUYxREFDIE11eCIgfSwKKwl7ICJBSUYxREFDMlIiLCBOVUxMLCAiQUlGMURBQyBNdXgiIH0sCisKKwl7ICJBSUYyREFDTCIsIE5VTEwsICJBSUYyREFDIE11eCIgfSwKKwl7ICJBSUYyREFDUiIsIE5VTEwsICJBSUYyREFDIE11eCIgfSwKKworCXsgIkFJRjFEQUMgTXV4IiwgIkFJRjFEQUNEQVQiLCAiQUlGMURBQ0RBVCIgfSwKKwl7ICJBSUYxREFDIE11eCIsICJBSUYzREFDREFUIiwgIkFJRjNEQUNEQVQiIH0sCisJeyAiQUlGMkRBQyBNdXgiLCAiQUlGMkRBQ0RBVCIsICJBSUYyREFDREFUIiB9LAorCXsgIkFJRjJEQUMgTXV4IiwgIkFJRjNEQUNEQVQiLCAiQUlGM0RBQ0RBVCIgfSwKKwl7ICJBSUYyQURDIE11eCIsICJBSUYyQURDREFUIiwgIkFJRjJBRENMIiB9LAorCXsgIkFJRjJBREMgTXV4IiwgIkFJRjJBRENEQVQiLCAiQUlGMkFEQ1IiIH0sCisJeyAiQUlGMkFEQyBNdXgiLCAiQUlGM0RBQ0RBVCIsICJBSUYzQURDREFUIiB9LAorCisJLyogREFDMSBpbnB1dHMgKi8KKwl7ICJEQUMxTCIsIE5VTEwsICJEQUMxTCBNaXhlciIgfSwKKwl7ICJEQUMxTCBNaXhlciIsICJBSUYyIFN3aXRjaCIsICJBSUYyREFDTCIgfSwKKwl7ICJEQUMxTCBNaXhlciIsICJBSUYxLjIgU3dpdGNoIiwgIkFJRjFEQUMyTCIgfSwKKwl7ICJEQUMxTCBNaXhlciIsICJBSUYxLjEgU3dpdGNoIiwgIkFJRjFEQUMxTCIgfSwKKwl7ICJEQUMxTCBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAorCXsgIkRBQzFMIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKKworCXsgIkRBQzFSIiwgTlVMTCwgIkRBQzFSIE1peGVyIiB9LAorCXsgIkRBQzFSIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNSIiB9LAorCXsgIkRBQzFSIE1peGVyIiwgIkFJRjEuMiBTd2l0Y2giLCAiQUlGMURBQzJSIiB9LAorCXsgIkRBQzFSIE1peGVyIiwgIkFJRjEuMSBTd2l0Y2giLCAiQUlGMURBQzFSIiB9LAorCXsgIkRBQzFSIE1peGVyIiwgIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgIkxlZnQgU2lkZXRvbmUiIH0sCisJeyAiREFDMVIgTWl4ZXIiLCAiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgIlJpZ2h0IFNpZGV0b25lIiB9LAorCisJLyogREFDMi9BSUYyIG91dHB1dHMgICovCisJeyAiQUlGMkFEQ0wiLCBOVUxMLCAiQUlGMkRBQzJMIE1peGVyIiB9LAorCXsgIkRBQzJMIiwgTlVMTCwgIkFJRjJEQUMyTCBNaXhlciIgfSwKKwl7ICJBSUYyREFDMkwgTWl4ZXIiLCAiQUlGMiBTd2l0Y2giLCAiQUlGMkRBQ0wiIH0sCisJeyAiQUlGMkRBQzJMIE1peGVyIiwgIkFJRjEuMiBTd2l0Y2giLCAiQUlGMURBQzJMIiB9LAorCXsgIkFJRjJEQUMyTCBNaXhlciIsICJBSUYxLjEgU3dpdGNoIiwgIkFJRjFEQUMxTCIgfSwKKwl7ICJBSUYyREFDMkwgTWl4ZXIiLCAiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCAiTGVmdCBTaWRldG9uZSIgfSwKKwl7ICJBSUYyREFDMkwgTWl4ZXIiLCAiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgIlJpZ2h0IFNpZGV0b25lIiB9LAorCisJeyAiQUlGMkFEQ1IiLCBOVUxMLCAiQUlGMkRBQzJSIE1peGVyIiB9LAorCXsgIkRBQzJSIiwgTlVMTCwgIkFJRjJEQUMyUiBNaXhlciIgfSwKKwl7ICJBSUYyREFDMlIgTWl4ZXIiLCAiQUlGMiBTd2l0Y2giLCAiQUlGMkRBQ1IiIH0sCisJeyAiQUlGMkRBQzJSIE1peGVyIiwgIkFJRjEuMiBTd2l0Y2giLCAiQUlGMURBQzJSIiB9LAorCXsgIkFJRjJEQUMyUiBNaXhlciIsICJBSUYxLjEgU3dpdGNoIiwgIkFJRjFEQUMxUiIgfSwKKwl7ICJBSUYyREFDMlIgTWl4ZXIiLCAiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCAiTGVmdCBTaWRldG9uZSIgfSwKKwl7ICJBSUYyREFDMlIgTWl4ZXIiLCAiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgIlJpZ2h0IFNpZGV0b25lIiB9LAorCisJeyAiQUlGMkFEQ0RBVCIsIE5VTEwsICJBSUYyQURDIE11eCIgfSwKKworCS8qIEFJRjMgb3V0cHV0ICovCisJeyAiQUlGM0FEQ0RBVCIsICJBSUYxQURDREFUIiwgIkFJRjFBREMxTCIgfSwKKwl7ICJBSUYzQURDREFUIiwgIkFJRjFBRENEQVQiLCAiQUlGMUFEQzFSIiB9LAorCXsgIkFJRjNBRENEQVQiLCAiQUlGMUFEQ0RBVCIsICJBSUYxQURDMkwiIH0sCisJeyAiQUlGM0FEQ0RBVCIsICJBSUYxQURDREFUIiwgIkFJRjFBREMyUiIgfSwKKwl7ICJBSUYzQURDREFUIiwgIkFJRjJBRENEQVQiLCAiQUlGMkFEQ0wiIH0sCisJeyAiQUlGM0FEQ0RBVCIsICJBSUYyQURDREFUIiwgIkFJRjJBRENSIiB9LAorCXsgIkFJRjNBRENEQVQiLCAiQUlGMkRBQ0RBVCIsICJBSUYyREFDTCIgfSwKKwl7ICJBSUYzQURDREFUIiwgIkFJRjJEQUNEQVQiLCAiQUlGMkRBQ1IiIH0sCisKKwkvKiBTaWRldG9uZSAqLworCXsgIkxlZnQgU2lkZXRvbmUiLCAiQURDL0RNSUMxIiwgIkFEQ0wgTXV4IiB9LAorCXsgIkxlZnQgU2lkZXRvbmUiLCAiRE1JQzIiLCAiRE1JQzJMIiB9LAorCXsgIlJpZ2h0IFNpZGV0b25lIiwgIkFEQy9ETUlDMSIsICJBRENSIE11eCIgfSwKKwl7ICJSaWdodCBTaWRldG9uZSIsICJETUlDMiIsICJETUlDMlIiIH0sCisKKwkvKiBPdXRwdXQgc3RhZ2VzICovCisJeyAiTGVmdCBPdXRwdXQgTWl4ZXIiLCAiREFDIFN3aXRjaCIsICJEQUMxTCIgfSwKKwl7ICJSaWdodCBPdXRwdXQgTWl4ZXIiLCAiREFDIFN3aXRjaCIsICJEQUMxUiIgfSwKKworCXsgIlNQS0wiLCAiREFDMSBTd2l0Y2giLCAiREFDMUwiIH0sCisJeyAiU1BLTCIsICJEQUMyIFN3aXRjaCIsICJEQUMyTCIgfSwKKworCXsgIlNQS1IiLCAiREFDMSBTd2l0Y2giLCAiREFDMVIiIH0sCisJeyAiU1BLUiIsICJEQUMyIFN3aXRjaCIsICJEQUMyUiIgfSwKKworCXsgIkxlZnQgSGVhZHBob25lIE11eCIsICJEQUMiLCAiREFDMUwiIH0sCisJeyAiUmlnaHQgSGVhZHBob25lIE11eCIsICJEQUMiLCAiREFDMVIiIH0sCit9OworCisvKiBUaGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSBGTEwgZGl2aWRlIG11bHRpcGxpZWQgYnkgMTAKKyAqIHRvIGFsbG93IHJvdW5kaW5nIGxhdGVyICovCisjZGVmaW5lIEZJWEVEX0ZMTF9TSVpFICgoMSA8PCAxNikgKiAxMCkKKworc3RydWN0IGZsbF9kaXYgeworCXUxNiBvdXRkaXY7CisJdTE2IG47CisJdTE2IGs7CisJdTE2IGNsa19yZWZfZGl2OworCXUxNiBmbGxfZnJhdGlvOworfTsKKworc3RhdGljIGludCB3bTg5OTRfZ2V0X2ZsbF9jb25maWcoc3RydWN0IGZsbF9kaXYgKmZsbCwKKwkJCQkgaW50IGZyZXFfaW4sIGludCBmcmVxX291dCkKK3sKKwl1NjQgS3BhcnQ7CisJdW5zaWduZWQgaW50IEssIE5kaXYsIE5tb2Q7CisKKwlwcl9kZWJ1ZygiRkxMIGlucHV0PSVkSHosIG91dHB1dD0lZEh6XG4iLCBmcmVxX2luLCBmcmVxX291dCk7CisKKwkvKiBTY2FsZSB0aGUgaW5wdXQgZnJlcXVlbmN5IGRvd24gdG8gPD0gMTMuNU1IeiAqLworCWZsbC0+Y2xrX3JlZl9kaXYgPSAwOworCXdoaWxlIChmcmVxX2luID4gMTM1MDAwMDApIHsKKwkJZmxsLT5jbGtfcmVmX2RpdisrOworCQlmcmVxX2luIC89IDI7CisKKwkJaWYgKGZsbC0+Y2xrX3JlZl9kaXYgPiAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXByX2RlYnVnKCJDTEtfUkVGX0RJVj0lZCwgRnJlZj0lZEh6XG4iLCBmbGwtPmNsa19yZWZfZGl2LCBmcmVxX2luKTsKKworCS8qIFNjYWxlIHRoZSBvdXRwdXQgdG8gZ2l2ZSA5ME1Iejw9RnZjbzw9MTAwTUh6ICovCisJZmxsLT5vdXRkaXYgPSAzOworCXdoaWxlIChmcmVxX291dCAqIChmbGwtPm91dGRpdiArIDEpIDwgOTAwMDAwMDApIHsKKwkJZmxsLT5vdXRkaXYrKzsKKwkJaWYgKGZsbC0+b3V0ZGl2ID4gNjMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZnJlcV9vdXQgKj0gZmxsLT5vdXRkaXYgKyAxOworCXByX2RlYnVnKCJPVVRESVY9JWQsIEZ2Y289JWRIelxuIiwgZmxsLT5vdXRkaXYsIGZyZXFfb3V0KTsKKworCWlmIChmcmVxX2luID4gMTAwMDAwMCkgeworCQlmbGwtPmZsbF9mcmF0aW8gPSAwOworCX0gZWxzZSB7CisJCWZsbC0+ZmxsX2ZyYXRpbyA9IDM7CisJCWZyZXFfaW4gKj0gODsKKwl9CisJcHJfZGVidWcoIkZMTF9GUkFUSU89JWQsIEZyZWY9JWRIelxuIiwgZmxsLT5mbGxfZnJhdGlvLCBmcmVxX2luKTsKKworCS8qIE5vdywgY2FsY3VsYXRlIE4uSyAqLworCU5kaXYgPSBmcmVxX291dCAvIGZyZXFfaW47CisKKwlmbGwtPm4gPSBOZGl2OworCU5tb2QgPSBmcmVxX291dCAlIGZyZXFfaW47CisJcHJfZGVidWcoIk5tb2Q9JWRcbiIsIE5tb2QpOworCisJLyogQ2FsY3VsYXRlIGZyYWN0aW9uYWwgcGFydCAtIHNjYWxlIHVwIHNvIHdlIGNhbiByb3VuZC4gKi8KKwlLcGFydCA9IEZJWEVEX0ZMTF9TSVpFICogKGxvbmcgbG9uZylObW9kOworCisJZG9fZGl2KEtwYXJ0LCBmcmVxX2luKTsKKworCUsgPSBLcGFydCAmIDB4RkZGRkZGRkY7CisKKwlpZiAoKEsgJSAxMCkgPj0gNSkKKwkJSyArPSA1OworCisJLyogTW92ZSBkb3duIHRvIHByb3BlciByYW5nZSBub3cgcm91bmRpbmcgaXMgZG9uZSAqLworCWZsbC0+ayA9IEsgLyAxMDsKKworCXByX2RlYnVnKCJOPSV4IEs9JXhcbiIsIGZsbC0+biwgZmxsLT5rKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9zZXRfZmxsKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgaWQsIGludCBzcmMsCisJCQkgIHVuc2lnbmVkIGludCBmcmVxX2luLCB1bnNpZ25lZCBpbnQgZnJlcV9vdXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJlZ19vZmZzZXQsIHJldDsKKwlzdHJ1Y3QgZmxsX2RpdiBmbGw7CisJdTE2IHJlZywgYWlmMSwgYWlmMjsKKworCWFpZjEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5NF9BSUYxX0NMT0NLSU5HXzEpCisJCSYgV004OTk0X0FJRjFDTEtfRU5BOworCisJYWlmMiA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X0FJRjJfQ0xPQ0tJTkdfMSkKKwkJJiBXTTg5OTRfQUlGMkNMS19FTkE7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBXTTg5OTRfRkxMMToKKwkJcmVnX29mZnNldCA9IDA7CisJCWlkID0gMDsKKwkJYnJlYWs7CisJY2FzZSBXTTg5OTRfRkxMMjoKKwkJcmVnX29mZnNldCA9IDB4MjA7CisJCWlkID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQXJlIHdlIGNoYW5naW5nIGFueXRoaW5nPyAqLworCWlmICh3bTg5OTQtPmZsbFtpZF0uc3JjID09IHNyYyAmJgorCSAgICB3bTg5OTQtPmZsbFtpZF0uaW4gPT0gZnJlcV9pbiAmJiB3bTg5OTQtPmZsbFtpZF0ub3V0ID09IGZyZXFfb3V0KQorCQlyZXR1cm4gMDsKKworCS8qIElmIHdlJ3JlIHN0b3BwaW5nIHRoZSBGTEwgcmVkbyB0aGUgb2xkIGNvbmZpZyAtIG5vCisJICogcmVnaXN0ZXJzIHdpbGwgYWN0dWFsbHkgYmUgd3JpdHRlbiBidXQgd2UgYXZvaWQgR0NDIGZsb3cKKwkgKiBhbmFseXNpcyBidWdzIHNwZXdpbmcgd2FybmluZ3MuCisJICovCisJaWYgKGZyZXFfb3V0KQorCQlyZXQgPSB3bTg5OTRfZ2V0X2ZsbF9jb25maWcoJmZsbCwgZnJlcV9pbiwgZnJlcV9vdXQpOworCWVsc2UKKwkJcmV0ID0gd204OTk0X2dldF9mbGxfY29uZmlnKCZmbGwsIHdtODk5NC0+ZmxsW2lkXS5pbiwKKwkJCQkJICAgIHdtODk5NC0+ZmxsW2lkXS5vdXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogR2F0ZSB0aGUgQUlGIGNsb2NrcyB3aGlsZSB3ZSByZWNsb2NrICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfQ0xPQ0tJTkdfMSwKKwkJCSAgICBXTTg5OTRfQUlGMUNMS19FTkEsIDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYyX0NMT0NLSU5HXzEsCisJCQkgICAgV004OTk0X0FJRjJDTEtfRU5BLCAwKTsKKworCS8qIFdlIGFsd2F5cyBuZWVkIHRvIGRpc2FibGUgdGhlIEZMTCB3aGlsZSByZWNvbmZpZ3VyaW5nICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0ZMTDFfQ09OVFJPTF8xICsgcmVnX29mZnNldCwKKwkJCSAgICBXTTg5OTRfRkxMMV9FTkEsIDApOworCisJcmVnID0gKGZsbC5vdXRkaXYgPDwgV004OTk0X0ZMTDFfT1VURElWX1NISUZUKSB8CisJCShmbGwuZmxsX2ZyYXRpbyA8PCBXTTg5OTRfRkxMMV9GUkFUSU9fU0hJRlQpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9GTEwxX0NPTlRST0xfMiArIHJlZ19vZmZzZXQsCisJCQkgICAgV004OTk0X0ZMTDFfT1VURElWX01BU0sgfAorCQkJICAgIFdNODk5NF9GTEwxX0ZSQVRJT19NQVNLLCByZWcpOworCisJc25kX3NvY193cml0ZShjb2RlYywgV004OTk0X0ZMTDFfQ09OVFJPTF8zICsgcmVnX29mZnNldCwgZmxsLmspOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0ZMTDFfQ09OVFJPTF80ICsgcmVnX29mZnNldCwKKwkJCSAgICBXTTg5OTRfRkxMMV9OX01BU0ssCisJCQkJICAgIGZsbC5uIDw8IFdNODk5NF9GTEwxX05fU0hJRlQpOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0ZMTDFfQ09OVFJPTF81ICsgcmVnX29mZnNldCwKKwkJCSAgICBXTTg5OTRfRkxMMV9SRUZDTEtfRElWX01BU0ssCisJCQkgICAgZmxsLmNsa19yZWZfZGl2IDw8IFdNODk5NF9GTEwxX1JFRkNMS19ESVZfU0hJRlQpOworCisJLyogRW5hYmxlICh3aXRoIGZyYWN0aW9uYWwgbW9kZSBpZiByZXF1aXJlZCkgKi8KKwlpZiAoZnJlcV9vdXQpIHsKKwkJaWYgKGZsbC5rKQorCQkJcmVnID0gV004OTk0X0ZMTDFfRU5BIHwgV004OTk0X0ZMTDFfRlJBQzsKKwkJZWxzZQorCQkJcmVnID0gV004OTk0X0ZMTDFfRU5BOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfRkxMMV9DT05UUk9MXzEgKyByZWdfb2Zmc2V0LAorCQkJCSAgICBXTTg5OTRfRkxMMV9FTkEgfCBXTTg5OTRfRkxMMV9GUkFDLAorCQkJCSAgICByZWcpOworCX0KKworCXdtODk5NC0+ZmxsW2lkXS5pbiA9IGZyZXFfaW47CisJd204OTk0LT5mbGxbaWRdLm91dCA9IGZyZXFfb3V0OworCisJLyogRW5hYmxlIGFueSBnYXRlZCBBSUYgY2xvY2tzICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfQ0xPQ0tJTkdfMSwKKwkJCSAgICBXTTg5OTRfQUlGMUNMS19FTkEsIGFpZjEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYyX0NMT0NLSU5HXzEsCisJCQkgICAgV004OTk0X0FJRjJDTEtfRU5BLCBhaWYyKTsKKworCWNvbmZpZ3VyZV9jbG9jayhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCWludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChkYWktPmlkKSB7CisJY2FzZSAxOgorCWNhc2UgMjoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBBSUYzIHNoYXJlcyBjbG9ja2luZyB3aXRoIEFJRjEvMiAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgV004OTk0X1NZU0NMS19NQ0xLMToKKwkJd204OTk0LT5zeXNjbGtbZGFpLT5pZCAtIDFdID0gV004OTk0X1NZU0NMS19NQ0xLMTsKKwkJd204OTk0LT5tY2xrWzBdID0gZnJlcTsKKwkJZGV2X2RiZyhkYWktPmRldiwgIkFJRiVkIHVzaW5nIE1DTEsxIGF0ICV1SHpcbiIsCisJCQlkYWktPmlkLCBmcmVxKTsKKwkJYnJlYWs7CisKKwljYXNlIFdNODk5NF9TWVNDTEtfTUNMSzI6CisJCS8qIFRPRE86IFNldCBHUElPIEFGICovCisJCXdtODk5NC0+c3lzY2xrW2RhaS0+aWQgLSAxXSA9IFdNODk5NF9TWVNDTEtfTUNMSzI7CisJCXdtODk5NC0+bWNsa1sxXSA9IGZyZXE7CisJCWRldl9kYmcoZGFpLT5kZXYsICJBSUYlZCB1c2luZyBNQ0xLMiBhdCAldUh6XG4iLAorCQkJZGFpLT5pZCwgZnJlcSk7CisJCWJyZWFrOworCisJY2FzZSBXTTg5OTRfU1lTQ0xLX0ZMTDE6CisJCXdtODk5NC0+c3lzY2xrW2RhaS0+aWQgLSAxXSA9IFdNODk5NF9TWVNDTEtfRkxMMTsKKwkJZGV2X2RiZyhkYWktPmRldiwgIkFJRiVkIHVzaW5nIEZMTDFcbiIsIGRhaS0+aWQpOworCQlicmVhazsKKworCWNhc2UgV004OTk0X1NZU0NMS19GTEwyOgorCQl3bTg5OTQtPnN5c2Nsa1tkYWktPmlkIC0gMV0gPSBXTTg5OTRfU1lTQ0xLX0ZMTDI7CisJCWRldl9kYmcoZGFpLT5kZXYsICJBSUYlZCB1c2luZyBGTEwyXG4iLCBkYWktPmlkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljb25maWd1cmVfY2xvY2soY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCS8qIFZNSUQ9Mng0MGsgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgV004OTk0X1ZNSURfU0VMX01BU0ssIDB4Mik7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCS8qIFR3ZWFrIERDIHNlcnZvIGNvbmZpZ3VyYXRpb24gZm9yIGltcHJvdmVkCisJCQkgKiBwZXJmb3JtYW5jZS4gKi8KKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIDB4MTAyLCAweDMpOworCQkJc25kX3NvY193cml0ZShjb2RlYywgMHg1NiwgMHgzKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIDB4MTAyLCAwKTsKKworCQkJLyogRGlzY2hhcmdlIExJTkVPVVQxICYgMiAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FOVElQT1BfMSwKKwkJCQkJICAgIFdNODk5NF9MSU5FT1VUMV9ESVNDSCB8CisJCQkJCSAgICBXTTg5OTRfTElORU9VVDJfRElTQ0gsCisJCQkJCSAgICBXTTg5OTRfTElORU9VVDFfRElTQ0ggfAorCQkJCQkgICAgV004OTk0X0xJTkVPVVQyX0RJU0NIKTsKKworCQkJLyogU3RhcnR1cCBiaWFzLCBWTUlEIHJhbXAgJiBidWZmZXIgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BTlRJUE9QXzIsCisJCQkJCSAgICBXTTg5OTRfU1RBUlRVUF9CSUFTX0VOQSB8CisJCQkJCSAgICBXTTg5OTRfVk1JRF9CVUZfRU5BIHwKKwkJCQkJICAgIFdNODk5NF9WTUlEX1JBTVBfTUFTSywKKwkJCQkJICAgIFdNODk5NF9TVEFSVFVQX0JJQVNfRU5BIHwKKwkJCQkJICAgIFdNODk5NF9WTUlEX0JVRl9FTkEgfAorCQkJCQkgICAgKDB4MTEgPDwgV004OTk0X1ZNSURfUkFNUF9TSElGVCkpOworCisJCQkvKiBNYWluIGJpYXMgZW5hYmxlLCBWTUlEPTJ4NDBrICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCQkgICAgV004OTk0X0JJQVNfRU5BIHwKKwkJCQkJICAgIFdNODk5NF9WTUlEX1NFTF9NQVNLLAorCQkJCQkgICAgV004OTk0X0JJQVNfRU5BIHwgMHgyKTsKKworCQkJbXNsZWVwKDIwKTsKKwkJfQorCisJCS8qIFZNSUQ9Mng1MDBrICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJICAgIFdNODk5NF9WTUlEX1NFTF9NQVNLLCAweDQpOworCisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCQkvKiBTd2l0Y2ggb3ZlciB0byBzdGFydHVwIGJpYXNlcyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQU5USVBPUF8yLAorCQkJCSAgICBXTTg5OTRfQklBU19TUkMgfCBXTTg5OTRfU1RBUlRVUF9CSUFTX0VOQSB8CisJCQkJICAgIFdNODk5NF9WTUlEX0JVRl9FTkEgfAorCQkJCSAgICBXTTg5OTRfVk1JRF9SQU1QX01BU0ssCisJCQkJICAgIFdNODk5NF9CSUFTX1NSQyB8IFdNODk5NF9TVEFSVFVQX0JJQVNfRU5BIHwKKwkJCQkgICAgV004OTk0X1ZNSURfQlVGX0VOQSB8CisJCQkJICAgICgxIDw8IFdNODk5NF9WTUlEX1JBTVBfU0hJRlQpKTsKKworCQkvKiBEaXNhYmxlIG1haW4gYmlhc2VzICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJICAgIFdNODk5NF9CSUFTX0VOQSB8IFdNODk5NF9WTUlEX1NFTF9NQVNLLCAwKTsKKworCQkvKiBEaXNjaGFyZ2UgbGluZSAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQU5USVBPUF8xLAorCQkJCSAgICBXTTg5OTRfTElORU9VVDFfRElTQ0ggfAorCQkJCSAgICBXTTg5OTRfTElORU9VVDJfRElTQ0gsCisJCQkJICAgIFdNODk5NF9MSU5FT1VUMV9ESVNDSCB8CisJCQkJICAgIFdNODk5NF9MSU5FT1VUMl9ESVNDSCk7CisKKwkJbXNsZWVwKDUpOworCisJCS8qIFN3aXRjaCBvZmYgc3RhcnR1cCBiaWFzZXMgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FOVElQT1BfMiwKKwkJCQkgICAgV004OTk0X0JJQVNfU1JDIHwgV004OTk0X1NUQVJUVVBfQklBU19FTkEgfAorCQkJCSAgICBXTTg5OTRfVk1JRF9CVUZfRU5BIHwKKwkJCQkgICAgV004OTk0X1ZNSURfUkFNUF9NQVNLLCAwKTsKKworCQlicmVhazsKKwl9CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlpbnQgbXNfcmVnOworCWludCBhaWYxX3JlZzsKKwlpbnQgbXMgPSAwOworCWludCBhaWYxID0gMDsKKworCXN3aXRjaCAoZGFpLT5pZCkgeworCWNhc2UgMToKKwkJbXNfcmVnID0gV004OTk0X0FJRjFfTUFTVEVSX1NMQVZFOworCQlhaWYxX3JlZyA9IFdNODk5NF9BSUYxX0NPTlRST0xfMTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQltc19yZWcgPSBXTTg5OTRfQUlGMl9NQVNURVJfU0xBVkU7CisJCWFpZjFfcmVnID0gV004OTk0X0FJRjJfQ09OVFJPTF8xOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCW1zID0gV004OTk0X0FJRjFfTVNUUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCWFpZjEgfD0gV004OTk0X0FJRjFfTFJDTEtfSU5WOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWFpZjEgfD0gMHgxODsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWFpZjEgfD0gMHgxMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJYWlmMSB8PSAweDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCS8qIGZyYW1lIGludmVyc2lvbiBub3QgdmFsaWQgZm9yIERTUCBtb2RlcyAqLworCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJCWFpZjEgfD0gV004OTk0X0FJRjFfQkNMS19JTlY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJCWFpZjEgfD0gV004OTk0X0FJRjFfQkNMS19JTlYgfCBXTTg5OTRfQUlGMV9MUkNMS19JTlY7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJCWFpZjEgfD0gV004OTk0X0FJRjFfQkNMS19JTlY7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKKwkJCWFpZjEgfD0gV004OTk0X0FJRjFfTFJDTEtfSU5WOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBhaWYxX3JlZywKKwkJCSAgICBXTTg5OTRfQUlGMV9CQ0xLX0lOViB8IFdNODk5NF9BSUYxX0xSQ0xLX0lOViB8CisJCQkgICAgV004OTk0X0FJRjFfRk1UX01BU0ssCisJCQkgICAgYWlmMSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgbXNfcmVnLCBXTTg5OTRfQUlGMV9NU1RSLAorCQkJICAgIG1zKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHsKKwlpbnQgdmFsLCByYXRlOworfSBzcnNbXSA9IHsKKwl7IDAsICAgODAwMCB9LAorCXsgMSwgIDExMDI1IH0sCisJeyAyLCAgMTIwMDAgfSwKKwl7IDMsICAxNjAwMCB9LAorCXsgNCwgIDIyMDUwIH0sCisJeyA1LCAgMjQwMDAgfSwKKwl7IDYsICAzMjAwMCB9LAorCXsgNywgIDQ0MTAwIH0sCisJeyA4LCAgNDgwMDAgfSwKKwl7IDksICA4ODIwMCB9LAorCXsgMTAsIDk2MDAwIH0sCit9OworCitzdGF0aWMgaW50IGZzX3JhdGlvc1tdID0geworCTY0LCAxMjgsIDE5MiwgMjU2LCAzNDgsIDUxMiwgNzY4LCAxMDI0LCAxNDA4LCAxNTM2Cit9OworCitzdGF0aWMgaW50IGJjbGtfZGl2c1tdID0geworCTEwLCAxNSwgMjAsIDMwLCA0MCwgNTAsIDYwLCA4MCwgMTEwLCAxMjAsIDE2MCwgMjIwLCAyNDAsIDMyMCwgNDQwLCA0ODAsCisJNjQwLCA4ODAsIDk2MCwgMTI4MCwgMTc2MCwgMTkyMAorfTsKKworc3RhdGljIGludCB3bTg5OTRfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBhaWYxX3JlZzsKKwlpbnQgYmNsa19yZWc7CisJaW50IGxyY2xrX3JlZzsKKwlpbnQgcmF0ZV9yZWc7CisJaW50IGFpZjEgPSAwOworCWludCBiY2xrID0gMDsKKwlpbnQgbHJjbGsgPSAwOworCWludCByYXRlX3ZhbCA9IDA7CisJaW50IGlkID0gZGFpLT5pZCAtIDE7CisKKwlpbnQgaSwgY3VyX3ZhbCwgYmVzdF92YWwsIGJjbGtfcmF0ZSwgYmVzdDsKKworCXN3aXRjaCAoZGFpLT5pZCkgeworCWNhc2UgMToKKwkJYWlmMV9yZWcgPSBXTTg5OTRfQUlGMV9DT05UUk9MXzE7CisJCWJjbGtfcmVnID0gV004OTk0X0FJRjFfQkNMSzsKKwkJcmF0ZV9yZWcgPSBXTTg5OTRfQUlGMV9SQVRFOworCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyB8fAorCQkgICAgd204OTk0LT5scmNsa19zaGFyZWRbMF0pCisJCQlscmNsa19yZWcgPSBXTTg5OTRfQUlGMURBQ19MUkNMSzsKKwkJZWxzZQorCQkJbHJjbGtfcmVnID0gV004OTk0X0FJRjFBRENfTFJDTEs7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYWlmMV9yZWcgPSBXTTg5OTRfQUlGMl9DT05UUk9MXzE7CisJCWJjbGtfcmVnID0gV004OTk0X0FJRjJfQkNMSzsKKwkJcmF0ZV9yZWcgPSBXTTg5OTRfQUlGMl9SQVRFOworCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyB8fAorCQkgICAgd204OTk0LT5scmNsa19zaGFyZWRbMV0pCisJCQlscmNsa19yZWcgPSBXTTg5OTRfQUlGMkRBQ19MUkNMSzsKKwkJZWxzZQorCQkJbHJjbGtfcmVnID0gV004OTk0X0FJRjJBRENfTFJDTEs7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJjbGtfcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcykgKiAyOworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJYmNsa19yYXRlICo9IDE2OworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJYmNsa19yYXRlICo9IDIwOworCQlhaWYxIHw9IDB4MjA7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWJjbGtfcmF0ZSAqPSAyNDsKKwkJYWlmMSB8PSAweDQwOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQliY2xrX3JhdGUgKj0gMzI7CisJCWFpZjEgfD0gMHg2MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVHJ5IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgc2FtcGxlIHJhdGU7IGxvb2sgZm9yIGFuIGV4YWN0IG1hdGNoLiAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNycyk7IGkrKykKKwkJaWYgKHNyc1tpXS5yYXRlID09IHBhcmFtc19yYXRlKHBhcmFtcykpCisJCQlicmVhazsKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKHNycykpCisJCXJldHVybiAtRUlOVkFMOworCXJhdGVfdmFsIHw9IHNyc1tpXS52YWwgPDwgV004OTk0X0FJRjFfU1JfU0hJRlQ7CisKKwlkZXZfZGJnKGRhaS0+ZGV2LCAiU2FtcGxlIHJhdGUgaXMgJWRIelxuIiwgc3JzW2ldLnJhdGUpOworCWRldl9kYmcoZGFpLT5kZXYsICJBSUYlZENMSyBpcyAlZEh6LCB0YXJnZXQgQkNMSyAlZEh6XG4iLAorCQlkYWktPmlkLCB3bTg5OTQtPmFpZmNsa1tpZF0sIGJjbGtfcmF0ZSk7CisKKwlpZiAod204OTk0LT5haWZjbGtbaWRdID09IDApIHsKKwkJZGV2X2VycihkYWktPmRldiwgIkFJRiVkQ0xLIG5vdCBjb25maWd1cmVkXG4iLCBkYWktPmlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQUlGQ0xLL2ZzIHJhdGlvOyBsb29rIGZvciBhIGNsb3NlIG1hdGNoIGluIGVpdGhlciBkaXJlY3Rpb24gKi8KKwliZXN0ID0gMDsKKwliZXN0X3ZhbCA9IGFicygoZnNfcmF0aW9zWzBdICogcGFyYW1zX3JhdGUocGFyYW1zKSkKKwkJICAgICAgIC0gd204OTk0LT5haWZjbGtbaWRdKTsKKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShmc19yYXRpb3MpOyBpKyspIHsKKwkJY3VyX3ZhbCA9IGFicygoZnNfcmF0aW9zW2ldICogcGFyYW1zX3JhdGUocGFyYW1zKSkKKwkJCSAgICAgIC0gd204OTk0LT5haWZjbGtbaWRdKTsKKwkJaWYgKGN1cl92YWwgPj0gYmVzdF92YWwpCisJCQljb250aW51ZTsKKwkJYmVzdCA9IGk7CisJCWJlc3RfdmFsID0gY3VyX3ZhbDsKKwl9CisJZGV2X2RiZyhkYWktPmRldiwgIlNlbGVjdGVkIEFJRiVkQ0xLL2ZzID0gJWRcbiIsCisJCWRhaS0+aWQsIGZzX3JhdGlvc1tiZXN0XSk7CisJcmF0ZV92YWwgfD0gYmVzdDsKKworCS8qIFdlIG1heSBub3QgZ2V0IHF1aXRlIHRoZSByaWdodCBmcmVxdWVuY3kgaWYgdXNpbmcKKwkgKiBhcHByb3hpbWF0ZSBjbG9ja3Mgc28gbG9vayBmb3IgdGhlIGNsb3Nlc3QgbWF0Y2ggdGhhdCBpcworCSAqIGhpZ2hlciB0aGFuIHRoZSB0YXJnZXQgKHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlcmUgZW5vdWdoCisJICogQkNMS3MgdG8gY2xvY2sgb3V0IHRoZSBzYW1wbGVzKS4KKwkgKi8KKwliZXN0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShiY2xrX2RpdnMpOyBpKyspIHsKKwkJY3VyX3ZhbCA9ICh3bTg5OTQtPmFpZmNsa1tpZF0gKiAxMCAvIGJjbGtfZGl2c1tpXSkgLSBiY2xrX3JhdGU7CisJCWlmIChjdXJfdmFsIDwgMCkgLyogQkNMSyB0YWJsZSBpcyBzb3J0ZWQgKi8KKwkJCWJyZWFrOworCQliZXN0ID0gaTsKKwl9CisJYmNsa19yYXRlID0gd204OTk0LT5haWZjbGtbaWRdICogMTAgLyBiY2xrX2RpdnNbYmVzdF07CisJZGV2X2RiZyhkYWktPmRldiwgIlVzaW5nIEJDTEtfRElWICVkIGZvciBhY3R1YWwgQkNMSyAlZEh6XG4iLAorCQliY2xrX2RpdnNbYmVzdF0sIGJjbGtfcmF0ZSk7CisJYmNsayB8PSBiZXN0IDw8IFdNODk5NF9BSUYxX0JDTEtfRElWX1NISUZUOworCisJbHJjbGsgPSBiY2xrX3JhdGUgLyBwYXJhbXNfcmF0ZShwYXJhbXMpOworCWRldl9kYmcoZGFpLT5kZXYsICJVc2luZyBMUkNMSyByYXRlICVkIGZvciBhY3R1YWwgTFJDTEsgJWRIelxuIiwKKwkJbHJjbGssIGJjbGtfcmF0ZSAvIGxyY2xrKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGFpZjFfcmVnLCBXTTg5OTRfQUlGMV9XTF9NQVNLLCBhaWYxKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBiY2xrX3JlZywgV004OTk0X0FJRjFfQkNMS19ESVZfTUFTSywgYmNsayk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgbHJjbGtfcmVnLCBXTTg5OTRfQUlGMURBQ19SQVRFX01BU0ssCisJCQkgICAgbHJjbGspOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJhdGVfcmVnLCBXTTg5OTRfQUlGMV9TUl9NQVNLIHwKKwkJCSAgICBXTTg5OTRfQUlGMUNMS19SQVRFX01BU0ssIHJhdGVfdmFsKTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCXN3aXRjaCAoZGFpLT5pZCkgeworCQljYXNlIDE6CisJCQl3bTg5OTQtPmRhY19yYXRlc1swXSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisJCQl3bTg5OTRfc2V0X3JldHVuZV9tb2JpbGUoY29kZWMsIDApOworCQkJd204OTk0X3NldF9yZXR1bmVfbW9iaWxlKGNvZGVjLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQl3bTg5OTQtPmRhY19yYXRlc1sxXSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisJCQl3bTg5OTRfc2V0X3JldHVuZV9tb2JpbGUoY29kZWMsIDIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfYWlmX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIGludCBtdXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJaW50IG11dGVfcmVnOworCWludCByZWc7CisKKwlzd2l0Y2ggKGNvZGVjX2RhaS0+aWQpIHsKKwljYXNlIDE6CisJCW11dGVfcmVnID0gV004OTk0X0FJRjFfREFDMV9GSUxURVJTXzE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbXV0ZV9yZWcgPSBXTTg5OTRfQUlGMl9EQUNfRklMVEVSU18xOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobXV0ZSkKKwkJcmVnID0gV004OTk0X0FJRjFEQUMxX01VVEU7CisJZWxzZQorCQlyZWcgPSAwOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgbXV0ZV9yZWcsIFdNODk5NF9BSUYxREFDMV9NVVRFLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgV004OTk0X1JBVEVTIFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKKworI2RlZmluZSBXTTg5OTRfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5OTRfYWlmMV9kYWlfb3BzID0geworCS5zZXRfc3lzY2xrCT0gd204OTk0X3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10CT0gd204OTk0X3NldF9kYWlfZm10LAorCS5od19wYXJhbXMJPSB3bTg5OTRfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSB3bTg5OTRfYWlmX211dGUsCisJLnNldF9wbGwJPSB3bTg5OTRfc2V0X2ZsbCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODk5NF9haWYyX2RhaV9vcHMgPSB7CisJLnNldF9zeXNjbGsJPSB3bTg5OTRfc2V0X2RhaV9zeXNjbGssCisJLnNldF9mbXQJPSB3bTg5OTRfc2V0X2RhaV9mbXQsCisJLmh3X3BhcmFtcwk9IHdtODk5NF9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZSAgID0gd204OTk0X2FpZl9tdXRlLAorCS5zZXRfcGxsCT0gd204OTk0X3NldF9mbGwsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTk0X2RhaVtdID0geworCXsKKwkJLm5hbWUgPSAiV004OTk0IEFJRjEiLAorCQkuaWQgPSAxLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMSBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gV004OTk0X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBXTTg5OTRfRk9STUFUUywKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMSBDYXB0dXJlIiwKKwkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBXTTg5OTRfUkFURVMsCisJCQkuZm9ybWF0cyA9IFdNODk5NF9GT1JNQVRTLAorCQkgfSwKKwkJLm9wcyA9ICZ3bTg5OTRfYWlmMV9kYWlfb3BzLAorCX0sCisJeworCQkubmFtZSA9ICJXTTg5OTQgQUlGMiIsCisJCS5pZCA9IDIsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJBSUYyIFBsYXliYWNrIiwKKwkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBXTTg5OTRfUkFURVMsCisJCQkuZm9ybWF0cyA9IFdNODk5NF9GT1JNQVRTLAorCQl9LAorCQkuY2FwdHVyZSA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJBSUYyIENhcHR1cmUiLAorCQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFdNODk5NF9SQVRFUywKKwkJCS5mb3JtYXRzID0gV004OTk0X0ZPUk1BVFMsCisJCX0sCisJCS5vcHMgPSAmd204OTk0X2FpZjJfZGFpX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiV004OTk0IEFJRjMiLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMyBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gV004OTk0X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBXTTg5OTRfRk9STUFUUywKKwkJfSwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFJRjMgQ2FwdHVyZSIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gV004OTk0X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBXTTg5OTRfRk9STUFUUywKKwkJfSwKKwl9Cit9OworRVhQT1JUX1NZTUJPTF9HUEwod204OTk0X2RhaSk7CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd204OTk0X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5NC0+ZmxsKTsgaSsrKSB7CisJCW1lbWNweSgmd204OTk0LT5mbGxfc3VzcGVuZFtpXSwgJndtODk5NC0+ZmxsW2ldLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBmbGxfY29uZmlnKSk7CisJCXJldCA9IHdtODk5NF9zZXRfZmxsKCZjb2RlYy0+ZGFpWzBdLCBpICsgMSwgMCwgMCwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJZGV2X3dhcm4oY29kZWMtPmRldiwgIkZhaWxlZCB0byBzdG9wIEZMTCVkOiAlZFxuIiwKKwkJCQkgaSArIDEsIHJldCk7CisJfQorCisJd204OTk0X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpbnQgaSwgcmV0OworCisJLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzICovCisJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUod204OTk0LT5yZWdfY2FjaGUpOyBpKyspIHsKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgV004OTk0X0xET18xOgorCQljYXNlIFdNODk5NF9MRE9fMjoKKwkJY2FzZSBXTTg5OTRfU09GVFdBUkVfUkVTRVQ6CisJCQkvKiBIYW5kbGVkIGJ5IG90aGVyIE1GRCBkcml2ZXJzICovCisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKCFhY2Nlc3NfbWFza3NbaV0ud3JpdGFibGUpCisJCQljb250aW51ZTsKKworCQl3bTg5OTRfcmVnX3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGksIHJlZ19jYWNoZVtpXSk7CisJfQorCisJd204OTk0X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTQtPmZsbCk7IGkrKykgeworCQlyZXQgPSB3bTg5OTRfc2V0X2ZsbCgmY29kZWMtPmRhaVswXSwgaSArIDEsCisJCQkJICAgICB3bTg5OTQtPmZsbF9zdXNwZW5kW2ldLnNyYywKKwkJCQkgICAgIHdtODk5NC0+ZmxsX3N1c3BlbmRbaV0uaW4sCisJCQkJICAgICB3bTg5OTQtPmZsbF9zdXNwZW5kW2ldLm91dCk7CisJCWlmIChyZXQgPCAwKQorCQkJZGV2X3dhcm4oY29kZWMtPmRldiwgIkZhaWxlZCB0byByZXN0b3JlIEZMTCVkOiAlZFxuIiwKKwkJCQkgaSArIDEsIHJldCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSB3bTg5OTRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODk5NF9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHdtODk5NF9oYW5kbGVfcmV0dW5lX21vYmlsZV9wZGF0YShzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204OTk0LT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YSA9IHdtODk5NC0+cGRhdGE7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY29udHJvbHNbXSA9IHsKKwkJU09DX0VOVU1fRVhUKCJBSUYxLjEgRVEgTW9kZSIsCisJCQkgICAgIHdtODk5NC0+cmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5OTRfZ2V0X3JldHVuZV9tb2JpbGVfZW51bSwKKwkJCSAgICAgd204OTk0X3B1dF9yZXR1bmVfbW9iaWxlX2VudW0pLAorCQlTT0NfRU5VTV9FWFQoIkFJRjEuMiBFUSBNb2RlIiwKKwkJCSAgICAgd204OTk0LT5yZXR1bmVfbW9iaWxlX2VudW0sCisJCQkgICAgIHdtODk5NF9nZXRfcmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5OTRfcHV0X3JldHVuZV9tb2JpbGVfZW51bSksCisJCVNPQ19FTlVNX0VYVCgiQUlGMiBFUSBNb2RlIiwKKwkJCSAgICAgd204OTk0LT5yZXR1bmVfbW9iaWxlX2VudW0sCisJCQkgICAgIHdtODk5NF9nZXRfcmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5OTRfcHV0X3JldHVuZV9tb2JpbGVfZW51bSksCisJfTsKKwlpbnQgcmV0LCBpLCBqOworCWNvbnN0IGNoYXIgKip0OworCisJLyogV2UgbmVlZCBhbiBhcnJheSBvZiB0ZXh0cyBmb3IgdGhlIGVudW0gQVBJIGJ1dCB0aGUgbnVtYmVyCisJICogb2YgdGV4dHMgaXMgbGlrZWx5IHRvIGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mCisJICogY29uZmlndXJhdGlvbnMgZHVlIHRvIHRoZSBzYW1wbGUgcmF0ZSBkZXBlbmRlbmN5IG9mIHRoZQorCSAqIGNvbmZpZ3VyYXRpb25zLiAqLworCXdtODk5NC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMgPSAwOworCXdtODk5NC0+cmV0dW5lX21vYmlsZV90ZXh0cyA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IHdtODk5NC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHM7IGorKykgeworCQkJaWYgKHN0cmNtcChwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLm5hbWUsCisJCQkJICAgd204OTk0LT5yZXR1bmVfbW9iaWxlX3RleHRzW2pdKSA9PSAwKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGogIT0gd204OTk0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cykKKwkJCWNvbnRpbnVlOworCisJCS8qIEV4cGFuZCB0aGUgYXJyYXkuLi4gKi8KKwkJdCA9IGtyZWFsbG9jKHdtODk5NC0+cmV0dW5lX21vYmlsZV90ZXh0cywKKwkJCSAgICAgc2l6ZW9mKGNoYXIgKikgKiAKKwkJCSAgICAgKHdtODk5NC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMgKyAxKSwKKwkJCSAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICh0ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQkvKiAuLi5zdG9yZSB0aGUgbmV3IGVudHJ5Li4uICovCisJCXRbd204OTk0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0c10gPSAKKwkJCXBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ubmFtZTsKKworCQkvKiAuLi5hbmQgcmVtZW1iZXIgdGhlIG5ldyB2ZXJzaW9uLiAqLworCQl3bTg5OTQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzKys7CisJCXdtODk5NC0+cmV0dW5lX21vYmlsZV90ZXh0cyA9IHQ7CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQWxsb2NhdGVkICVkIHVuaXF1ZSBSZVR1bmUgTW9iaWxlIG5hbWVzXG4iLAorCQl3bTg5OTQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzKTsKKworCXdtODk5NC0+cmV0dW5lX21vYmlsZV9lbnVtLm1heCA9IHdtODk5NC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHM7CisJd204OTk0LT5yZXR1bmVfbW9iaWxlX2VudW0udGV4dHMgPSB3bTg5OTQtPnJldHVuZV9tb2JpbGVfdGV4dHM7CisKKwlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scygmd204OTk0LT5jb2RlYywgY29udHJvbHMsCisJCQkJICAgQVJSQVlfU0laRShjb250cm9scykpOworCWlmIChyZXQgIT0gMCkKKwkJZGV2X2Vycih3bTg5OTQtPmNvZGVjLmRldiwKKwkJCSJGYWlsZWQgdG8gYWRkIFJlVHVuZSBNb2JpbGUgY29udHJvbHM6ICVkXG4iLCByZXQpOworfQorCitzdGF0aWMgdm9pZCB3bTg5OTRfaGFuZGxlX3BkYXRhKHN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5OTQtPmNvZGVjOworCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhID0gd204OTk0LT5wZGF0YTsKKwlpbnQgcmV0LCBpOworCisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuOworCisJd21faHVic19oYW5kbGVfYW5hbG9ndWVfcGRhdGEoY29kZWMsIHBkYXRhLT5saW5lb3V0MV9kaWZmLAorCQkJCSAgICAgIHBkYXRhLT5saW5lb3V0Ml9kaWZmLAorCQkJCSAgICAgIHBkYXRhLT5saW5lb3V0MWZiLAorCQkJCSAgICAgIHBkYXRhLT5saW5lb3V0MmZiLAorCQkJCSAgICAgIHBkYXRhLT5qZF9zY3RociwKKwkJCQkgICAgICBwZGF0YS0+amRfdGhyLAorCQkJCSAgICAgIHBkYXRhLT5taWNiaWFzMV9sdmwsCisJCQkJICAgICAgcGRhdGEtPm1pY2JpYXMyX2x2bCk7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlZCBEUkMgY29uZmlndXJhdGlvbnNcbiIsIHBkYXRhLT5udW1fZHJjX2NmZ3MpOworCisJaWYgKHBkYXRhLT5udW1fZHJjX2NmZ3MpIHsKKwkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY29udHJvbHNbXSA9IHsKKwkJCVNPQ19FTlVNX0VYVCgiQUlGMURSQzEgTW9kZSIsIHdtODk5NC0+ZHJjX2VudW0sCisJCQkJICAgICB3bTg5OTRfZ2V0X2RyY19lbnVtLCB3bTg5OTRfcHV0X2RyY19lbnVtKSwKKwkJCVNPQ19FTlVNX0VYVCgiQUlGMURSQzIgTW9kZSIsIHdtODk5NC0+ZHJjX2VudW0sCisJCQkJICAgICB3bTg5OTRfZ2V0X2RyY19lbnVtLCB3bTg5OTRfcHV0X2RyY19lbnVtKSwKKwkJCVNPQ19FTlVNX0VYVCgiQUlGMkRSQyBNb2RlIiwgd204OTk0LT5kcmNfZW51bSwKKwkJCQkgICAgIHdtODk5NF9nZXRfZHJjX2VudW0sIHdtODk5NF9wdXRfZHJjX2VudW0pLAorCQl9OworCisJCS8qIFdlIG5lZWQgYW4gYXJyYXkgb2YgdGV4dHMgZm9yIHRoZSBlbnVtIEFQSSAqLworCQl3bTg5OTQtPmRyY190ZXh0cyA9IGttYWxsb2Moc2l6ZW9mKGNoYXIgKikKKwkJCQkJICAgICogcGRhdGEtPm51bV9kcmNfY2ZncywgR0ZQX0tFUk5FTCk7CisJCWlmICghd204OTk0LT5kcmNfdGV4dHMpIHsKKwkJCWRldl9lcnIod204OTk0LT5jb2RlYy5kZXYsCisJCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBEUkMgY29uZmlnIHRleHRzXG4iLAorCQkJCXBkYXRhLT5udW1fZHJjX2NmZ3MpOworCQkJcmV0dXJuOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fZHJjX2NmZ3M7IGkrKykKKwkJCXdtODk5NC0+ZHJjX3RleHRzW2ldID0gcGRhdGEtPmRyY19jZmdzW2ldLm5hbWU7CisKKwkJd204OTk0LT5kcmNfZW51bS5tYXggPSBwZGF0YS0+bnVtX2RyY19jZmdzOworCQl3bTg5OTQtPmRyY19lbnVtLnRleHRzID0gd204OTk0LT5kcmNfdGV4dHM7CisKKwkJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoJndtODk5NC0+Y29kZWMsIGNvbnRyb2xzLAorCQkJCQkgICBBUlJBWV9TSVpFKGNvbnRyb2xzKSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWRldl9lcnIod204OTk0LT5jb2RlYy5kZXYsCisJCQkJIkZhaWxlZCB0byBhZGQgRFJDIG1vZGUgY29udHJvbHM6ICVkXG4iLCByZXQpOworCisJCWZvciAoaSA9IDA7IGkgPCBXTTg5OTRfTlVNX0RSQzsgaSsrKQorCQkJd204OTk0X3NldF9kcmMoY29kZWMsIGkpOworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVkIFJlVHVuZSBNb2JpbGUgY29uZmlndXJhdGlvbnNcbiIsCisJCXBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzKTsKKworCWlmIChwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZncykKKwkJd204OTk0X2hhbmRsZV9yZXR1bmVfbW9iaWxlX3BkYXRhKHdtODk5NCk7CisJZWxzZQorCQlzbmRfc29jX2FkZF9jb250cm9scygmd204OTk0LT5jb2RlYywgd204OTk0X2VxX2NvbnRyb2xzLAorCQkJCSAgICAgQVJSQVlfU0laRSh3bTg5OTRfZXFfY29udHJvbHMpKTsKK30KKworc3RhdGljIGludCB3bTg5OTRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh3bTg5OTRfY29kZWMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb2RlYyBkZXZpY2Ugbm90IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204OTk0X2NvZGVjOworCWNvZGVjID0gd204OTk0X2NvZGVjOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3bTg5OTRfaGFuZGxlX3BkYXRhKGNvZGVjLT5wcml2YXRlX2RhdGEpOworCisJd21faHVic19hZGRfYW5hbG9ndWVfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5OTRfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKHdtODk5NF9zbmRfY29udHJvbHMpKTsKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg5OTRfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh3bTg5OTRfZGFwbV93aWRnZXRzKSk7CisJd21faHVic19hZGRfYW5hbG9ndWVfcm91dGVzKGNvZGVjLCAwLCAwKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk5NCA9IHsKKwkucHJvYmUgPSAJd204OTk0X3Byb2JlLAorCS5yZW1vdmUgPSAJd204OTk0X3JlbW92ZSwKKwkuc3VzcGVuZCA9IAl3bTg5OTRfc3VzcGVuZCwKKwkucmVzdW1lID0Jd204OTk0X3Jlc3VtZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODk5NCk7CisKK3N0YXRpYyBpbnQgd204OTk0X2NvZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IGk7CisJdTE2IHJldjsKKworCWlmICh3bTg5OTRfY29kZWMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQW5vdGhlciBXTTg5OTQgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdtODk5NCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg5OTRfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghd204OTk0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBwcml2YXRlIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljb2RlYyA9ICZ3bTg5OTQtPmNvZGVjOworCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg5OTQ7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwljb2RlYy0+bmFtZSA9ICJXTTg5OTQiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5yZWFkID0gd204OTk0X3JlYWQ7CisJY29kZWMtPndyaXRlID0gd204OTk0X3dyaXRlOworCWNvZGVjLT5yZWFkYWJsZV9yZWdpc3RlciA9IHdtODk5NF9yZWFkYWJsZTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204OTk0X3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSAmd204OTk0X2RhaVswXTsKKwljb2RlYy0+bnVtX2RhaSA9IDM7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gV004OTk0X01BWF9SRUdJU1RFUjsKKwljb2RlYy0+cmVnX2NhY2hlID0gJndtODk5NC0+cmVnX2NhY2hlOworCWNvZGVjLT5kZXYgPSAmcGRldi0+ZGV2OworCisJd204OTk0LT5wZGF0YSA9IHBkZXYtPmRldi5wYXJlbnQtPnBsYXRmb3JtX2RhdGE7CisKKwkvKiBGaWxsIHRoZSBjYWNoZSB3aXRoIHBoeXNpY2FsIHZhbHVlcyB3ZSBpbmhlcml0ZWQ7IGRvbid0IHJlc2V0ICovCisJcmV0ID0gd204OTk0X2J1bGtfcmVhZChjb2RlYy0+Y29udHJvbF9kYXRhLCAwLAorCQkJICAgICAgIEFSUkFZX1NJWkUod204OTk0LT5yZWdfY2FjaGUpIC0gMSwKKwkJCSAgICAgICBjb2RlYy0+cmVnX2NhY2hlKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gZmlsbCByZWdpc3RlciBjYWNoZTogJWRcbiIsCisJCQlyZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBDbGVhciB0aGUgY2FjaGVkIHZhbHVlcyBmb3IgdW5yZWFkYWJsZS92b2xhdGlsZSByZWdpc3RlcnMgdG8KKwkgKiBhdm9pZCBwb3RlbnRpYWwgY29uZnVzaW9uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5NC0+cmVnX2NhY2hlKTsgaSsrKQorCQlpZiAod204OTk0X3ZvbGF0aWxlKGkpIHx8ICF3bTg5OTRfcmVhZGFibGUoaSkpCisJCQl3bTg5OTQtPnJlZ19jYWNoZVtpXSA9IDA7CisKKwkvKiBTZXQgcmV2aXNpb24tc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqLworCXJldiA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X0NISVBfUkVWSVNJT04pOworCXN3aXRjaCAocmV2KSB7CisJY2FzZSAyOgorCWNhc2UgMzoKKwkJd204OTk0LT5odWJzLmRjc19jb2RlcyA9IC01OworCQl3bTg5OTQtPmh1YnMuaHBfc3RhcnR1cF9tb2RlID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCQkJICAgCisKKwkvKiBSZW1lbWJlciBpZiBBSUZuTFJDTEsgaXMgY29uZmlndXJlZCBhcyBhIEdQSU8uICBUaGlzIHNob3VsZCBiZQorCSAqIGNvbmZpZ3VyZWQgb24gaW5pdCAtIGlmIGEgc3lzdGVtIHdhbnRzIHRvIGRvIHRoaXMgZHluYW1pY2FsbHkKKwkgKiBhdCBydW50aW1lIHdlIGNhbiBkZWFsIHdpdGggdGhhdCB0aGVuLgorCSAqLworCXJldCA9IHdtODk5NF9yZWdfcmVhZChjb2RlYy0+Y29udHJvbF9kYXRhLCBXTTg5OTRfR1BJT18xKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBHUElPMSBzdGF0ZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKwlpZiAoKHJldCAmIFdNODk5NF9HUE5fRk5fTUFTSykgIT0gV004OTk0X0dQX0ZOX1BJTl9TUEVDSUZJQykgeworCQl3bTg5OTQtPmxyY2xrX3NoYXJlZFswXSA9IDE7CisJCXdtODk5NF9kYWlbMF0uc3ltbWV0cmljX3JhdGVzID0gMTsKKwl9IGVsc2UgeworCQl3bTg5OTQtPmxyY2xrX3NoYXJlZFswXSA9IDA7CisJfQorCisJcmV0ID0gd204OTk0X3JlZ19yZWFkKGNvZGVjLT5jb250cm9sX2RhdGEsIFdNODk5NF9HUElPXzYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWFkIEdQSU82IHN0YXRlOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCWlmICgocmV0ICYgV004OTk0X0dQTl9GTl9NQVNLKSAhPSBXTTg5OTRfR1BfRk5fUElOX1NQRUNJRklDKSB7CisJCXdtODk5NC0+bHJjbGtfc2hhcmVkWzFdID0gMTsKKwkJd204OTk0X2RhaVsxXS5zeW1tZXRyaWNfcmF0ZXMgPSAxOworCX0gZWxzZSB7CisJCXdtODk5NC0+bHJjbGtfc2hhcmVkWzFdID0gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTRfZGFpKTsgaSsrKQorCQl3bTg5OTRfZGFpW2ldLmRldiA9IGNvZGVjLT5kZXY7CisKKwl3bTg5OTRfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCXdtODk5NF9jb2RlYyA9IGNvZGVjOworCisJLyogTGF0Y2ggdm9sdW1lIHVwZGF0ZXMgKHJpZ2h0IG9ubHk7IHdlIGFsd2F5cyBkbyBsZWZ0IHRoZW4gcmlnaHQpLiAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0RBQzFfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYxREFDMV9WVSwgV004OTk0X0FJRjFEQUMxX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9EQUMyX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMURBQzJfVlUsIFdNODk5NF9BSUYxREFDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfREFDX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMkRBQ19WVSwgV004OTk0X0FJRjJEQUNfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0FEQzFfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYxQURDMV9WVSwgV004OTk0X0FJRjFBREMxX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9BREMyX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMUFEQzJfVlUsIFdNODk5NF9BSUYxQURDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfQURDX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMkFEQ19WVSwgV004OTk0X0FJRjFBREMyX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfREFDMV9SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0RBQzFfVlUsIFdNODk5NF9EQUMxX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfREFDMl9SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0RBQzJfVlUsIFdNODk5NF9EQUMyX1ZVKTsKKworCS8qIFNldCB0aGUgbG93IGJpdCBvZiB0aGUgM0Qgc3RlcmVvIGRlcHRoIHNvIFRMViBtYXRjaGVzICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfREFDMV9GSUxURVJTXzIsCisJCQkgICAgMSA8PCBXTTg5OTRfQUlGMURBQzFfM0RfR0FJTl9TSElGVCwKKwkJCSAgICAxIDw8IFdNODk5NF9BSUYxREFDMV8zRF9HQUlOX1NISUZUKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9EQUMyX0ZJTFRFUlNfMiwKKwkJCSAgICAxIDw8IFdNODk5NF9BSUYxREFDMl8zRF9HQUlOX1NISUZULAorCQkJICAgIDEgPDwgV004OTk0X0FJRjFEQUMyXzNEX0dBSU5fU0hJRlQpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYyX0RBQ19GSUxURVJTXzIsCisJCQkgICAgMSA8PCBXTTg5OTRfQUlGMkRBQ18zRF9HQUlOX1NISUZULAorCQkJICAgIDEgPDwgV004OTk0X0FJRjJEQUNfM0RfR0FJTl9TSElGVCk7CisKKwl3bTg5OTRfdXBkYXRlX2NsYXNzX3coY29kZWMpOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyh3bTg5OTRfZGFpLCBBUlJBWV9TSVpFKHdtODk5NF9kYWkpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9jb2RlYzsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB3bTg5OTQpOworCisJcmV0dXJuIDA7CisKK2Vycl9jb2RlYzoKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworZXJyOgorCWtmcmVlKHdtODk5NCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgd204OTk0X2NvZGVjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODk5NC0+Y29kZWM7CisKKwl3bTg5OTRfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHdtODk5NF9kYWksIEFSUkFZX1NJWkUod204OTk0X2RhaSkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204OTk0LT5jb2RlYyk7CisJa2ZyZWUod204OTk0KTsKKwl3bTg5OTRfY29kZWMgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHdtODk5NF9jb2RlY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAid204OTk0LWNvZGVjIiwKKwkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAgIH0sCisJLnByb2JlID0gd204OTk0X2NvZGVjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTg5OTRfY29kZWNfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IHdtODk5NF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd204OTk0X2NvZGVjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh3bTg5OTRfaW5pdCk7CisKK3N0YXRpYyBfX2V4aXQgdm9pZCB3bTg5OTRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3bTg5OTRfY29kZWNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdtODk5NF9leGl0KTsKKworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV004OTk0IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOndtODk5NC1jb2RlYyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1ZTE0MgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIHdtODk5NC5oICAtLSAgV004OTk0IFNvYyBBdWRpbyBkcml2ZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX1dNODk5NF9ICisjZGVmaW5lIF9XTTg5OTRfSAorCisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg5OTQ7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtODk5NF9kYWlbXTsKKworLyogU291cmNlcyBmb3IgQUlGMS8yIFNZU0NMSyAtIHVzZSB3aXRoIHNldF9kYWlfc3lzY2xrKCkgKi8KKyNkZWZpbmUgV004OTk0X1NZU0NMS19NQ0xLMSAxCisjZGVmaW5lIFdNODk5NF9TWVNDTEtfTUNMSzIgMgorI2RlZmluZSBXTTg5OTRfU1lTQ0xLX0ZMTDEgIDMKKyNkZWZpbmUgV004OTk0X1NZU0NMS19GTEwyICA0CisKKyNkZWZpbmUgV004OTk0X0ZMTDEgMQorI2RlZmluZSBXTTg5OTRfRkxMMiAyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKaW5kZXggYzU4YWFiMy4uY2ViODZiNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jCkBAIC0yMywxMyArMjMsMTIgQEAKICNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSAid205NzEzLmgiCiAKLSNkZWZpbmUgV005NzEzX1ZFUlNJT04gIjAuMTUiCi0KIHN0cnVjdCB3bTk3MTNfcHJpdiB7CiAJdTMyIHBsbF9pbjsgLyogUExMIGlucHV0IGZyZXF1ZW5jeSAqLwogfTsKQEAgLTExNSwxNSArMTE0LDI3IEBACiBTT0NfRU5VTV9TSU5HTEUoTUlDQl9NVVgsIDAsIDIsIHdtOTcxM19taWNiX3NlbGVjdCksIC8qIG1pYyBzZWxlY3Rpb24gMTkgKi8KIH07CiAKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShvdXRfdGx2LCAtNDY1MCwgMTUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShtYWluX3RsdiwgLTM0NTAsIDE1MCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUobWlzY190bHYsIC0xNTAwLCAzMDAsIDApOworc3RhdGljIHVuc2lnbmVkIGludCBtaWNfdGx2W10gPSB7CisJVExWX0RCX1JBTkdFX0hFQUQoMiksCisJMCwgMiwgVExWX0RCX1NDQUxFX0lURU0oMTIwMCwgNjAwLCAwKSwKKwkzLCAzLCBUTFZfREJfU0NBTEVfSVRFTSgzMDAwLCAwLCAwKSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTk3MTNfc25kX2FjOTdfY29udHJvbHNbXSA9IHsKLVNPQ19ET1VCTEUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NQVNURVIsIDgsIDAsIDMxLCAxKSwKK1NPQ19ET1VCTEVfVExWKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfTUFTVEVSLCA4LCAwLCAzMSwgMSwgb3V0X3RsdiksCiBTT0NfRE9VQkxFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfTUFTVEVSLCAxNSwgNywgMSwgMSksCi1TT0NfRE9VQkxFKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19IRUFEUEhPTkUsIDgsIDAsIDMxLCAxKSwKK1NPQ19ET1VCTEVfVExWKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19IRUFEUEhPTkUsIDgsIDAsIDMxLCAxLAorCSAgICAgICBvdXRfdGx2KSwKIFNPQ19ET1VCTEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X0hFQURQSE9ORSwgMTUsIDcsIDEsIDEpLAotU09DX0RPVUJMRSgiTGluZSBJbiBWb2x1bWUiLCBBQzk3X1BDX0JFRVAsIDgsIDAsIDMxLCAxKSwKLVNPQ19ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1BIT05FLCA4LCAwLCAzMSwgMSksCi1TT0NfU0lOR0xFKCJNaWMgMSBWb2x1bWUiLCBBQzk3X01JQywgOCwgMzEsIDEpLAotU09DX1NJTkdMRSgiTWljIDIgVm9sdW1lIiwgQUM5N19NSUMsIDAsIDMxLCAxKSwKK1NPQ19ET1VCTEVfVExWKCJMaW5lIEluIFZvbHVtZSIsIEFDOTdfUENfQkVFUCwgOCwgMCwgMzEsIDEsIG1haW5fdGx2KSwKK1NPQ19ET1VCTEVfVExWKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgQUM5N19QSE9ORSwgOCwgMCwgMzEsIDEsIG1haW5fdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJNaWMgMSBWb2x1bWUiLCBBQzk3X01JQywgOCwgMzEsIDEsIG1haW5fdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJNaWMgMiBWb2x1bWUiLCBBQzk3X01JQywgMCwgMzEsIDEsIG1haW5fdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJNaWMgMSBQcmVhbXAgVm9sdW1lIiwgQUM5N18zRF9DT05UUk9MLCAxMCwgMywgMCwgbWljX3RsdiksCitTT0NfU0lOR0xFX1RMVigiTWljIDIgUHJlYW1wIFZvbHVtZSIsIEFDOTdfM0RfQ09OVFJPTCwgMTIsIDMsIDAsIG1pY190bHYpLAogCiBTT0NfU0lOR0xFKCJNaWMgQm9vc3QgKCsyMGRCKSBTd2l0Y2giLCBBQzk3X0xJTkUsIDUsIDEsIDApLAogU09DX1NJTkdMRSgiTWljIEhlYWRwaG9uZSBNaXhlciBWb2x1bWUiLCBBQzk3X0xJTkUsIDAsIDcsIDEpLApAQCAtMTMzLDcgKzE0NCw3IEBACiBTT0NfRE9VQkxFKCJDYXB0dXJlIFZvbHVtZSIsIEFDOTdfQ0QsIDgsIDAsIDMxLCAwKSwKIFNPQ19TSU5HTEUoIkNhcHR1cmUgWkMgU3dpdGNoIiwgQUM5N19DRCwgNywgMSwgMCksCiAKLVNPQ19TSU5HTEUoIkNhcHR1cmUgdG8gSGVhZHBob25lIFZvbHVtZSIsIEFDOTdfVklERU8sIDExLCA3LCAxKSwKK1NPQ19TSU5HTEVfVExWKCJDYXB0dXJlIHRvIEhlYWRwaG9uZSBWb2x1bWUiLCBBQzk3X1ZJREVPLCAxMSwgNywgMSwgbWlzY190bHYpLAogU09DX1NJTkdMRSgiQ2FwdHVyZSB0byBNb25vIEJvb3N0ICgrMjBkQikgU3dpdGNoIiwgQUM5N19WSURFTywgOCwgMSwgMCksCiBTT0NfU0lOR0xFKCJDYXB0dXJlIEFEQyBCb29zdCAoKzIwZEIpIFN3aXRjaCIsIEFDOTdfVklERU8sIDYsIDEsIDApLAogCkBAIC0xNTQsMjggKzE2NSw0MyBAQAogCiBTT0NfU0lOR0xFKCJPdXQ0IFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfTUFTVEVSX01PTk8sIDE1LCAxLCAxKSwKIFNPQ19TSU5HTEUoIk91dDQgUGxheWJhY2sgWkMgU3dpdGNoIiwgQUM5N19NQVNURVJfTU9OTywgMTQsIDEsIDApLAotU09DX1NJTkdMRSgiT3V0NCBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01BU1RFUl9NT05PLCA4LCA2MywgMSksCitTT0NfU0lOR0xFX1RMVigiT3V0NCBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01BU1RFUl9NT05PLCA4LCAzMSwgMSwgb3V0X3RsdiksCiAKIFNPQ19TSU5HTEUoIk91dDMgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19NQVNURVJfTU9OTywgNywgMSwgMSksCiBTT0NfU0lOR0xFKCJPdXQzIFBsYXliYWNrIFpDIFN3aXRjaCIsIEFDOTdfTUFTVEVSX01PTk8sIDYsIDEsIDApLAotU09DX1NJTkdMRSgiT3V0MyBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01BU1RFUl9NT05PLCAwLCA2MywgMSksCitTT0NfU0lOR0xFX1RMVigiT3V0MyBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01BU1RFUl9NT05PLCAwLCAzMSwgMSwgb3V0X3RsdiksCiAKLVNPQ19TSU5HTEUoIk1vbm8gQ2FwdHVyZSBWb2x1bWUiLCBBQzk3X01BU1RFUl9UT05FLCA4LCAzMSwgMSksCitTT0NfU0lOR0xFX1RMVigiTW9ubyBDYXB0dXJlIFZvbHVtZSIsIEFDOTdfTUFTVEVSX1RPTkUsIDgsIDMxLCAxLCBtYWluX3RsdiksCiBTT0NfU0lOR0xFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfTUFTVEVSX1RPTkUsIDcsIDEsIDEpLAogU09DX1NJTkdMRSgiTW9ubyBQbGF5YmFjayBaQyBTd2l0Y2giLCBBQzk3X01BU1RFUl9UT05FLCA2LCAxLCAwKSwKLVNPQ19TSU5HTEUoIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NQVNURVJfVE9ORSwgMCwgMzEsIDEpLAorU09DX1NJTkdMRV9UTFYoIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NQVNURVJfVE9ORSwgMCwgMzEsIDEsIG91dF90bHYpLAogCi1TT0NfU0lOR0xFKCJCZWVwIFBsYXliYWNrIEhlYWRwaG9uZSBWb2x1bWUiLCBBQzk3X0FVWCwgMTIsIDcsIDEpLAotU09DX1NJTkdMRSgiQmVlcCBQbGF5YmFjayBTcGVha2VyIFZvbHVtZSIsIEFDOTdfQVVYLCA4LCA3LCAxKSwKLVNPQ19TSU5HTEUoIkJlZXAgUGxheWJhY2sgTW9ubyBWb2x1bWUiLCBBQzk3X0FVWCwgNCwgNywgMSksCitTT0NfU0lOR0xFX1RMVigiSGVhZHBob25lIE1peGVyIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19BVVgsIDEyLCA3LCAxLAorCSAgICAgICBtaXNjX3RsdiksCitTT0NfU0lOR0xFX1RMVigiU3BlYWtlciBNaXhlciBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfQVVYLCA4LCA3LCAxLAorCSAgICAgICBtaXNjX3RsdiksCitTT0NfU0lOR0xFX1RMVigiTW9ubyBNaXhlciBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfQVVYLCA0LCA3LCAxLCBtaXNjX3RsdiksCiAKLVNPQ19TSU5HTEUoIlZvaWNlIFBsYXliYWNrIEhlYWRwaG9uZSBWb2x1bWUiLCBBQzk3X1BDTSwgMTIsIDcsIDEpLAorU09DX1NJTkdMRV9UTFYoIlZvaWNlIFBsYXliYWNrIEhlYWRwaG9uZSBWb2x1bWUiLCBBQzk3X1BDTSwgMTIsIDcsIDEsCisJICAgICAgIG1pc2NfdGx2KSwKIFNPQ19TSU5HTEUoIlZvaWNlIFBsYXliYWNrIE1hc3RlciBWb2x1bWUiLCBBQzk3X1BDTSwgOCwgNywgMSksCiBTT0NfU0lOR0xFKCJWb2ljZSBQbGF5YmFjayBNb25vIFZvbHVtZSIsIEFDOTdfUENNLCA0LCA3LCAxKSwKIAorU09DX1NJTkdMRV9UTFYoIkhlYWRwaG9uZSBNaXhlciBBdXggUGxheWJhY2sgVm9sdW1lIiwgQUM5N19SRUNfU0VMLCAxMiwgNywgMSwKKwkgICAgICAgbWlzY190bHYpLAorCitTT0NfU0lOR0xFX1RMVigiU3BlYWtlciBNaXhlciBWb2ljZSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1BDTSwgOCwgNywgMSwKKwkgICAgICAgbWlzY190bHYpLAorU09DX1NJTkdMRV9UTFYoIlNwZWFrZXIgTWl4ZXIgQXV4IFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfUkVDX1NFTCwgOCwgNywgMSwKKwkgICAgICAgbWlzY190bHYpLAorCitTT0NfU0lOR0xFX1RMVigiTW9ubyBNaXhlciBWb2ljZSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1BDTSwgNCwgNywgMSwKKwkgICAgICAgbWlzY190bHYpLAorU09DX1NJTkdMRV9UTFYoIk1vbm8gTWl4ZXIgQXV4IFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfUkVDX1NFTCwgNCwgNywgMSwKKwkgICAgICAgbWlzY190bHYpLAorCiBTT0NfU0lOR0xFKCJBdXggUGxheWJhY2sgSGVhZHBob25lIFZvbHVtZSIsIEFDOTdfUkVDX1NFTCwgMTIsIDcsIDEpLAogU09DX1NJTkdMRSgiQXV4IFBsYXliYWNrIE1hc3RlciBWb2x1bWUiLCBBQzk3X1JFQ19TRUwsIDgsIDcsIDEpLAotU09DX1NJTkdMRSgiQXV4IFBsYXliYWNrIE1vbm8gVm9sdW1lIiwgQUM5N19SRUNfU0VMLCA0LCA3LCAxKSwKIAogU09DX0VOVU0oIkJhc3MgQ29udHJvbCIsIHdtOTcxM19lbnVtWzE2XSksCiBTT0NfU0lOR0xFKCJCYXNzIEN1dC1vZmYgU3dpdGNoIiwgQUM5N19HRU5FUkFMX1BVUlBPU0UsIDEyLCAxLCAxKSwKQEAgLTExODYsOCArMTIxMiw2IEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCWludCByZXQgPSAwLCByZWc7CiAKLQlwcmludGsoS0VSTl9JTkZPICJXTTk3MTMvV005NzE0IFNvQyBBdWRpbyBDb2RlYyAlc1xuIiwgV005NzEzX1ZFUlNJT04pOwotCiAJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwKIAkJCQkgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoc29jZGV2LT5jYXJkLT5jb2RlYyA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwppbmRleCBkNzNjMzA1Li4wYWQ5ZjVkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwpAQCAtNjgsMjQgKzY4LDc3IEBACiAJaW50IGNvdW50ID0gMDsKIAogCWRldl9kYmcoY29kZWMtPmRldiwgIldhaXRpbmcgZm9yIERDIHNlcnZvLi4uXG4iKTsKKwogCWRvIHsKIAkJY291bnQrKzsKIAkJbXNsZWVwKDEpOwogCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19EQ19TRVJWT19SRUFEQkFDS18wKTsKLQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiREMgc2Vydm8gc3RhdHVzOiAleFxuIiwgcmVnKTsKLQl9IHdoaWxlICgocmVnICYgV004OTkzX0RDU19DQUxfQ09NUExFVEVfTUFTSykKLQkJICE9IFdNODk5M19EQ1NfQ0FMX0NPTVBMRVRFX01BU0sgJiYgY291bnQgPCAxMDAwKTsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiREMgc2Vydm86ICV4XG4iLCByZWcpOworCX0gd2hpbGUgKHJlZyAmIFdNODk5M19EQ1NfREFUQVBBVEhfQlVTWSk7CiAKLQlpZiAoKHJlZyAmIFdNODk5M19EQ1NfQ0FMX0NPTVBMRVRFX01BU0spCi0JICAgICE9IFdNODk5M19EQ1NfQ0FMX0NPTVBMRVRFX01BU0spCisJaWYgKHJlZyAmIFdNODk5M19EQ1NfREFUQVBBVEhfQlVTWSkKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIERDIFNlcnZvXG4iKTsKIH0KIAogLyoKKyAqIFN0YXJ0dXAgY2FsaWJyYXRpb24gb2YgdGhlIERDIHNlcnZvCisgKi8KK3N0YXRpYyB2b2lkIGNhbGlicmF0ZV9kY19zZXJ2byhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtX2h1YnNfZGF0YSAqaHVicyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJdTE2IHJlZywgZGNzX2NmZzsKKworCS8qIFNldCBmb3IgMzIgc2VyaWVzIHVwZGF0ZXMgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fMSwKKwkJCSAgICBXTTg5OTNfRENTX1NFUklFU19OT18wMV9NQVNLLAorCQkJICAgIDMyIDw8IFdNODk5M19EQ1NfU0VSSUVTX05PXzAxX1NISUZUKTsKKworCS8qIEVuYWJsZSB0aGUgREMgc2Vydm8uICBXcml0ZSBhbGwgYml0cyB0byBhdm9pZCB0cmlnZ2VyaW5nIHN0YXJ0dXAKKwkgKiBvciB3cml0ZSBjYWxpYnJhdGlvbi4KKwkgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fMCwKKwkJCSAgICAweEZGRkYsCisJCQkgICAgV004OTkzX0RDU19FTkFfQ0hBTl8wIHwKKwkJCSAgICBXTTg5OTNfRENTX0VOQV9DSEFOXzEgfAorCQkJICAgIFdNODk5M19EQ1NfVFJJR19TRVJJRVNfMSB8CisJCQkgICAgV004OTkzX0RDU19UUklHX1NFUklFU18wKTsKKworCXdhaXRfZm9yX2RjX3NlcnZvKGNvZGVjKTsKKworCS8qIEFwcGx5IGNvcnJlY3Rpb24gdG8gREMgc2Vydm8gcmVzdWx0ICovCisJaWYgKGh1YnMtPmRjc19jb2RlcykgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJBcHBseWluZyAlZCBjb2RlIERDIHNlcnZvIGNvcnJlY3Rpb25cbiIsCisJCQlodWJzLT5kY3NfY29kZXMpOworCisJCS8qIEhQT1VUMUwgKi8KKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fUkVBREJBQ0tfMSkgJgorCQkJV004OTkzX0RDU19JTlRFR19DSEFOXzBfTUFTSzs7CisJCXJlZyArPSBodWJzLT5kY3NfY29kZXM7CisJCWRjc19jZmcgPSByZWcgPDwgV004OTkzX0RDU19EQUNfV1JfVkFMXzFfU0hJRlQ7CisKKwkJLyogSFBPVVQxUiAqLworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19EQ19TRVJWT19SRUFEQkFDS18yKSAmCisJCQlXTTg5OTNfRENTX0lOVEVHX0NIQU5fMV9NQVNLOworCQlyZWcgKz0gaHVicy0+ZGNzX2NvZGVzOworCQlkY3NfY2ZnIHw9IHJlZzsKKworCQkvKiBEbyBpdCAqLworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fMywgZGNzX2NmZyk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19EQ19TRVJWT18wLAorCQkJCSAgICBXTTg5OTNfRENTX1RSSUdfREFDX1dSXzAgfAorCQkJCSAgICBXTTg5OTNfRENTX1RSSUdfREFDX1dSXzEsCisJCQkJICAgIFdNODk5M19EQ1NfVFJJR19EQUNfV1JfMCB8CisJCQkJICAgIFdNODk5M19EQ1NfVFJJR19EQUNfV1JfMSk7CisKKwkJd2FpdF9mb3JfZGNfc2Vydm8oY29kZWMpOworCX0KK30KKworLyoKICAqIFVwZGF0ZSB0aGUgREMgc2Vydm8gY2FsaWJyYXRpb24gb24gZ2FpbiBjaGFuZ2VzCiAgKi8KIHN0YXRpYyBpbnQgd204OTkzX3B1dF9kY19zZXJ2byhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgcmV0OwpAQCAtMjUxLDYgKzMwNCw0NyBAQAogCSAgICAgICBsaW5lX3RsdiksCiB9OwogCitzdGF0aWMgaW50IGhwX3N1cHBseV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHdtX2h1YnNfZGF0YSAqaHVicyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKKwkJc3dpdGNoIChodWJzLT5ocF9zdGFydHVwX21vZGUpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCS8qIEVuYWJsZSB0aGUgaGVhZHBob25lIGFtcCAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkJICAgIFdNODk5M19IUE9VVDFMX0VOQSB8CisJCQkJCSAgICBXTTg5OTNfSFBPVVQxUl9FTkEsCisJCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9FTkEgfAorCQkJCQkgICAgV004OTkzX0hQT1VUMVJfRU5BKTsKKworCQkJLyogRW5hYmxlIHRoZSBzZWNvbmQgc3RhZ2UgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19BTkFMT0dVRV9IUF8wLAorCQkJCQkgICAgV004OTkzX0hQT1VUMUxfRExZIHwKKwkJCQkJICAgIFdNODk5M19IUE9VVDFSX0RMWSwKKwkJCQkJICAgIFdNODk5M19IUE9VVDFMX0RMWSB8CisJCQkJCSAgICBXTTg5OTNfSFBPVVQxUl9ETFkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJVbmtub3duIEhQIHN0YXJ0dXAgbW9kZSAlZFxuIiwKKwkJCQlodWJzLT5ocF9zdGFydHVwX21vZGUpOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19DSEFSR0VfUFVNUF8xLAorCQkJCSAgICBXTTg5OTNfQ1BfRU5BLCAwKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaHBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewpAQCAtMjcxLDE0ICszNjUsMTEgQEAKIAkJcmVnIHw9IFdNODk5M19IUE9VVDFMX0RMWSB8IFdNODk5M19IUE9VVDFSX0RMWTsKIAkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0FOQUxPR1VFX0hQXzAsIHJlZyk7CiAKLQkJLyogU3RhcnQgdGhlIERDIHNlcnZvICovCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19EQ19TRVJWT18wLAotCQkJCSAgICAweEZGRkYsCi0JCQkJICAgIFdNODk5M19EQ1NfRU5BX0NIQU5fMCB8Ci0JCQkJICAgIFdNODk5M19EQ1NfRU5BX0NIQU5fMSB8Ci0JCQkJICAgIFdNODk5M19EQ1NfVFJJR19TVEFSVFVQXzEgfAotCQkJCSAgICBXTTg5OTNfRENTX1RSSUdfU1RBUlRVUF8wKTsKLQkJd2FpdF9mb3JfZGNfc2Vydm8oY29kZWMpOworCQkvKiBTbWFsbGVzdCBzdXBwb3J0ZWQgdXBkYXRlIGludGVydmFsICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19EQ19TRVJWT18xLAorCQkJCSAgICBXTTg5OTNfRENTX1RJTUVSX1BFUklPRF8wMV9NQVNLLCAxKTsKKworCQljYWxpYnJhdGVfZGNfc2Vydm8oY29kZWMpOwogCiAJCXJlZyB8PSBXTTg5OTNfSFBPVVQxUl9PVVRQIHwgV004OTkzX0hQT1VUMVJfUk1WX1NIT1JUIHwKIAkJCVdNODk5M19IUE9VVDFMX09VVFAgfCBXTTg5OTNfSFBPVVQxTF9STVZfU0hPUlQ7CkBAIC0yODYsMjMgKzM3NywxOSBAQAogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6Ci0JCXJlZyAmPSB+KFdNODk5M19IUE9VVDFMX1JNVl9TSE9SVCB8Ci0JCQkgV004OTkzX0hQT1VUMUxfRExZIHwKLQkJCSBXTTg5OTNfSFBPVVQxTF9PVVRQIHwKLQkJCSBXTTg5OTNfSFBPVVQxUl9STVZfU0hPUlQgfAotCQkJIFdNODk5M19IUE9VVDFSX0RMWSB8Ci0JCQkgV004OTkzX0hQT1VUMVJfT1VUUCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19BTkFMT0dVRV9IUF8wLAorCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9ETFkgfAorCQkJCSAgICBXTTg5OTNfSFBPVVQxUl9ETFkgfAorCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9STVZfU0hPUlQgfAorCQkJCSAgICBXTTg5OTNfSFBPVVQxUl9STVZfU0hPUlQsIDApOwogCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19EQ19TRVJWT18wLAotCQkJCSAgICAweGZmZmYsIDApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQU5BTE9HVUVfSFBfMCwKKwkJCQkgICAgV004OTkzX0hQT1VUMUxfT1VUUCB8CisJCQkJICAgIFdNODk5M19IUE9VVDFSX09VVFAsIDApOwogCi0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19BTkFMT0dVRV9IUF8wLCByZWcpOwogCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8xLAogCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9FTkEgfCBXTTg5OTNfSFBPVVQxUl9FTkEsCiAJCQkJICAgIDApOwotCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19DSEFSR0VfUFVNUF8xLAotCQkJCSAgICBXTTg5OTNfQ1BfRU5BLCAwKTsKIAkJYnJlYWs7CiAJfQogCkBAIC00NzMsNiArNTYwLDggQEAKIFNORF9TT0NfREFQTV9QR0EoIkxlZnQgT3V0cHV0IFBHQSIsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzMsIDcsIDAsIE5VTEwsIDApLAogU05EX1NPQ19EQVBNX1BHQSgiUmlnaHQgT3V0cHV0IFBHQSIsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzMsIDYsIDAsIE5VTEwsIDApLAogCitTTkRfU09DX0RBUE1fU1VQUExZKCJIZWFkcGhvbmUgU3VwcGx5IiwgU05EX1NPQ19OT1BNLCAwLCAwLCBocF9zdXBwbHlfZXZlbnQsIAorCQkgICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCiBTTkRfU09DX0RBUE1fUEdBX0UoIkhlYWRwaG9uZSBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsCiAJCSAgIE5VTEwsIDAsCiAJCSAgIGhwX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCkBAIC02MjYsNiArNzE1LDcgQEAKIAl7ICJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIkxlZnQgSGVhZHBob25lIE11eCIgfSwKIAl7ICJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIlJpZ2h0IEhlYWRwaG9uZSBNdXgiIH0sCiAJeyAiSGVhZHBob25lIFBHQSIsIE5VTEwsICJDTEtfU1lTIiB9LAorCXsgIkhlYWRwaG9uZSBQR0EiLCBOVUxMLCAiSGVhZHBob25lIFN1cHBseSIgfSwKIAogCXsgIkhQT1VUMUwiLCBOVUxMLCAiSGVhZHBob25lIFBHQSIgfSwKIAl7ICJIUE9VVDFSIiwgTlVMTCwgIkhlYWRwaG9uZSBQR0EiIH0sCkBAIC03NTMsNiArODQzLDEyIEBACiAJCQkJICAgIFdNODk5M19MSU5FT1VUMl9NT0RFLAogCQkJCSAgICBXTTg5OTNfTElORU9VVDJfTU9ERSk7CiAKKwkvKiBJZiB0aGUgbGluZSBvdXRwdXRzIGFyZSBkaWZmZXJlbnRpYWwgdGhlbiB3ZSBhcmVuJ3QgcHJlc2VudGluZworCSAqIFZNSUQgYXMgYW4gb3V0cHV0IGFuZCBjYW4gZGlzYWJsZSBpdC4KKwkgKi8KKwlpZiAobGluZW91dDFfZGlmZiAmJiBsaW5lb3V0Ml9kaWZmKQorCQljb2RlYy0+aWRsZV9iaWFzX29mZiA9IDE7CisKIAlpZiAobGluZW91dDFmYikKIAkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0FERElUSU9OQUxfQ09OVFJPTCwKIAkJCQkgICAgV004OTkzX0xJTkVPVVQxX0ZCLCBXTTg5OTNfTElORU9VVDFfRkIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuaAppbmRleCAzNmQzZmJhLi40MjAxMDRmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuaApAQCAtMTgsNiArMTgsMTIgQEAKIAogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCB3bV9odWJzX3Nwa21peF90bHZbXTsKIAorLyogVGhpcyAqbXVzdCogYmUgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGNvZGVjLT5wcml2YXRlX2RhdGEgc3RydWN0ICovCitzdHJ1Y3Qgd21faHVic19kYXRhIHsKKwlpbnQgZGNzX2NvZGVzOworCWludCBocF9zdGFydHVwX21vZGU7Cit9OworCiBleHRlcm4gaW50IHdtX2h1YnNfYWRkX2FuYWxvZ3VlX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICopOwogZXh0ZXJuIGludCB3bV9odWJzX2FkZF9hbmFsb2d1ZV9yb3V0ZXMoc3RydWN0IHNuZF9zb2NfY29kZWMgKiwgaW50LCBpbnQpOwogZXh0ZXJuIGludCB3bV9odWJzX2hhbmRsZV9hbmFsb2d1ZV9wZGF0YShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCmluZGV4IDBhMzAyZTEwLi5hYjY1MThkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCkBAIC03NjcsMTQgKzc2NywyNiBAQAogCWludCByZXQgPSAwOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlpZiAoIWRldi0+Y2xrX2FjdGl2ZSkgeworCQkJY2xrX2VuYWJsZShkZXYtPmNsayk7CisJCQlkZXYtPmNsa19hY3RpdmUgPSAxOworCQl9CiAJCWRhdmluY2lfbWNhc3Bfc3RhcnQoZGV2LCBzdWJzdHJlYW0tPnN0cmVhbSk7CiAJCWJyZWFrOwogCi0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwkJZGF2aW5jaV9tY2FzcF9zdG9wKGRldiwgc3Vic3RyZWFtLT5zdHJlYW0pOworCQlpZiAoZGV2LT5jbGtfYWN0aXZlKSB7CisJCQljbGtfZGlzYWJsZShkZXYtPmNsayk7CisJCQlkZXYtPmNsa19hY3RpdmUgPSAwOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgogCQlkYXZpbmNpX21jYXNwX3N0b3AoZGV2LCBzdWJzdHJlYW0tPnN0cmVhbSk7CiAJCWJyZWFrOwpAQCAtODY2LDYgKzg3OCw3IEBACiAJfQogCiAJY2xrX2VuYWJsZShkZXYtPmNsayk7CisJZGV2LT5jbGtfYWN0aXZlID0gMTsKIAogCWRldi0+YmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKG1lbS0+c3RhcnQpOwogCWRldi0+b3BfbW9kZSA9IHBkYXRhLT5vcF9tb2RlOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oCmluZGV4IDU4MmM5MjQuLmU3NTViNTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuaAorKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmgKQEAgLTQ0LDYgKzQ0LDcgQEAKIAlpbnQgc2FtcGxlX3JhdGU7CiAJc3RydWN0IGNsayAqY2xrOwogCXVuc2lnbmVkIGludCBjb2RlY19mbXQ7CisJdTggY2xrX2FjdGl2ZTsKIAogCS8qIE1jQVNQIHNwZWNpZmljIGRhdGEgKi8KIAlpbnQJdGRtX3Nsb3RzOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKaW5kZXggYWQ0ZDdmNC4uODBjN2ZkZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCkBAIC00OSw3ICs0OSw3IEBACiBzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgcGNtX2hhcmR3YXJlX3BsYXliYWNrID0gewogCS5pbmZvID0gKFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAogCQkgU05EUlZfUENNX0lORk9fTU1BUCB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAotCQkgU05EUlZfUENNX0lORk9fUEFVU0UpLAorCQkgU05EUlZfUENNX0lORk9fUEFVU0UgfCBTTkRSVl9QQ01fSU5GT19SRVNVTUUpLAogCS5mb3JtYXRzID0gKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFKSwKIAkucmF0ZXMgPSAoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzE2MDAwIHwKIAkJICBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZWZpa2EtYXVkaW8tZmFicmljLmMgYi9zb3VuZC9zb2MvZnNsL2VmaWthLWF1ZGlvLWZhYnJpYy5jCmluZGV4IDMzMjZlMmEuLjFhNWI4ZTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvZWZpa2EtYXVkaW8tZmFicmljLmMKKysrIGIvc291bmQvc29jL2ZzbC9lZmlrYS1hdWRpby1mYWJyaWMuYwpAQCAtNTUsNyArNTUsNyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJaW50IHJjOwogCi0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoImJwbGFuLGVmaWthIikpCisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoImJwbGFuLGVmaWthIikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJY2FyZC5wbGF0Zm9ybSA9ICZtcGM1MjAwX2F1ZGlvX2RtYV9wbGF0Zm9ybTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvcGNtMDMwLWF1ZGlvLWZhYnJpYy5jIGIvc291bmQvc29jL2ZzbC9wY20wMzAtYXVkaW8tZmFicmljLmMKaW5kZXggYjkyOGVmNy4uNjY0NGNiYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9wY20wMzAtYXVkaW8tZmFicmljLmMKKysrIGIvc291bmQvc29jL2ZzbC9wY20wMzAtYXVkaW8tZmFicmljLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCWludCByYzsKIAotCWlmICghbWFjaGluZV9pc19jb21wYXRpYmxlKCJwaHl0ZWMscGNtMDMwIikpCisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInBoeXRlYyxwY20wMzAiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAljYXJkLnBsYXRmb3JtID0gJm1wYzUyMDBfYXVkaW9fZG1hX3BsYXRmb3JtOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9LY29uZmlnIGIvc291bmQvc29jL2lteC9LY29uZmlnCmluZGV4IGE3MDA1NjJlLi5jN2QwZmQ5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW14L0tjb25maWcKKysrIGIvc291bmQvc29jL2lteC9LY29uZmlnCkBAIC0xLDIxICsxLDEzIEBACi1jb25maWcgU05EX01YMV9NWDJfU09DCi0JdHJpc3RhdGUgIlNvQyBBdWRpbyBmb3IgRnJlZWNhbGUgaS5NWDF4IGkuTVgyeCBDUFVzIgotCWRlcGVuZHMgb24gQVJDSF9NWDIgfHwgQVJDSF9NWDEKK2NvbmZpZyBTTkRfSU1YX1NPQworCXRyaXN0YXRlICJTb0MgQXVkaW8gZm9yIEZyZWVzY2FsZSBpLk1YIENQVXMiCisJZGVwZW5kcyBvbiBBUkNIX01YQyAmJiBCUk9LRU4KIAlzZWxlY3QgU05EX1BDTQorCXNlbGVjdCBGSVEKKwlzZWxlY3QgU05EX1NPQ19BQzk3X0JVUwogCWhlbHAKIAkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGNvZGVjcyBhdHRhY2hlZCB0bwotCSAgdGhlIE1YMSBvciBNWDIgU1NJIGludGVyZmFjZS4KKwkgIHRoZSBpLk1YIFNTSSBpbnRlcmZhY2UuCiAKIGNvbmZpZyBTTkRfTVhDX1NPQ19TU0kKIAl0cmlzdGF0ZQogCi1jb25maWcgU05EX1NPQ19NWDI3VklTX1dNODk3NAotCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgTVgyNyAtIFdNODk3NCBWaXNzdHJpbV9zbTEwIGJvYXJkIgotCWRlcGVuZHMgb24gU05EX01YMV9NWDJfU09DICYmIE1BQ0hfTVgyNyAmJiBNQUNIX0lNWDI3X1ZJU1NUUklNX00xMAotCXNlbGVjdCBTTkRfTVhDX1NPQ19TU0kKLQlzZWxlY3QgU05EX1NPQ19XTTg5NzQKLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIFZpc3N0cmltIFNNMTAKLQkgIGJvYXJkIHdpdGggV004OTc0LgotCi0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvTWFrZWZpbGUgYi9zb3VuZC9zb2MvaW14L01ha2VmaWxlCmluZGV4IGMyZmZkMmMuLjlmOGJiOTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2lteC9NYWtlZmlsZQpAQCAtMSwxMCArMSwxMiBAQAogIyBpLk1YIFBsYXRmb3JtIFN1cHBvcnQKLXNuZC1zb2MtbXgxX214Mi1vYmpzIDo9IG14MV9teDItcGNtLm8KLXNuZC1zb2MtbXhjLXNzaS1vYmpzIDo9IG14Yy1zc2kubworc25kLXNvYy1pbXgtb2JqcyA6PSBpbXgtc3NpLm8gaW14LXBjbS1maXEubwogCi1vYmotJChDT05GSUdfU05EX01YMV9NWDJfU09DKSArPSBzbmQtc29jLW14MV9teDIubwotb2JqLSQoQ09ORklHX1NORF9NWENfU09DX1NTSSkgKz0gc25kLXNvYy1teGMtc3NpLm8KK2lmZGVmIENPTkZJR19NQUNIX01YMjcKK3NuZC1zb2MtaW14LW9ianMgKz0gaW14LXBjbS1kbWEtbXgyLm8KK2VuZGlmCisKK29iai0kKENPTkZJR19TTkRfSU1YX1NPQykgKz0gc25kLXNvYy1pbXgubwogCiAjIGkuTVggTWFjaGluZSBTdXBwb3J0Ci1zbmQtc29jLW14Mjd2aXMtd204OTc0LW9ianMgOj0gbXgyN3Zpc193bTg5NzQubwotb2JqLSQoQ09ORklHX1NORF9TT0NfTVgyN1ZJU19XTTg5NzQpICs9IHNuZC1zb2MtbXgyN3Zpcy13bTg5NzQubworc25kLXNvYy1waHljb3JlLWFjOTctb2JqcyA6PSBwaHljb3JlLWFjOTcubworb2JqLSQoQ09ORklHX1NORF9TT0NfUEhZQ09SRV9BQzk3KSArPSBzbmQtc29jLXBoeWNvcmUtYWM5Ny5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L2lteC1wY20tZG1hLW14Mi5jIGIvc291bmQvc29jL2lteC9pbXgtcGNtLWRtYS1teDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTQ1MmU0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2lteC9pbXgtcGNtLWRtYS1teDIuYwpAQCAtMCwwICsxLDMxMyBAQAorLyoKKyAqIGlteC1wY20tZG1hLW14Mi5jICAtLSAgQUxTQSBTb2MgQXVkaW8gTGF5ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGNvZGUgY29weXJpZ2h0ZWQgYnkgRnJlZXNjYWxlLAorICogTGlhbSBHaXJkd29vZCwgSmF2aWVyIE1hcnRpbiBhbmQgcHJvYmFibHkgb3RoZXJzLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSA8bWFjaC9kbWEtbXgxLW14Mi5oPgorCisjaW5jbHVkZSAiaW14LXNzaS5oIgorCitzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgeworCWludCBzZ19jb3VudDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2xpc3Q7CisJaW50IHBlcmlvZDsKKwlpbnQgcGVyaW9kczsKKwl1bnNpZ25lZCBsb25nIGRtYV9hZGRyOworCWludCBkbWE7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGxvbmcgcGVyaW9kX2NudDsKKwl2b2lkICpidWY7CisJaW50IHBlcmlvZF90aW1lOworfTsKKworLyogQ2FsbGVkIGJ5IHRoZSBETUEgZnJhbWV3b3JrIHdoZW4gYSBwZXJpb2QgaGFzIGVsYXBzZWQgKi8KK3N0YXRpYyB2b2lkIGlteF9zc2lfZG1hX3Byb2dyZXNzaW9uKGludCBjaGFubmVsLCB2b2lkICpkYXRhLAorCQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIXNnKQorCQlyZXR1cm47CisKKwlydW50aW1lID0gaXBydGQtPnN1YnN0cmVhbS0+cnVudGltZTsKKworCWlwcnRkLT5vZmZzZXQgPSBzZy0+ZG1hX2FkZHJlc3MgLSBydW50aW1lLT5kbWFfYWRkcjsKKworCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoaXBydGQtPnN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkIGlteF9zc2lfZG1hX2NhbGxiYWNrKGludCBjaGFubmVsLCB2b2lkICpkYXRhKQoreworCXByX2VycigiJXMgc2hvdWxkbid0IGJlIGNhbGxlZFxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgdm9pZCBzbmRfaW14X2RtYV9lcnJfY2FsbGJhY2soaW50IGNoYW5uZWwsIHZvaWQgKmRhdGEsIGludCBlcnIpCit7CisJcHJfZXJyKCJETUEgZXJyb3IgY2FsbGJhY2sgY2FsbGVkXG4iKTsKKworCXByX2VycigiRE1BIHRpbWVvdXQgb24gY2hhbm5lbCAlZCAtJXMlcyVzJXNcbiIsCisJCSBjaGFubmVsLAorCQkgZXJyICYgSU1YX0RNQV9FUlJfQlVSU1QgPyAgICAiIGJ1cnN0IiA6ICIiLAorCQkgZXJyICYgSU1YX0RNQV9FUlJfUkVRVUVTVCA/ICAiIHJlcXVlc3QiIDogIiIsCisJCSBlcnIgJiBJTVhfRE1BX0VSUl9UUkFOU0ZFUiA/ICIgdHJhbnNmZXIiIDogIiIsCisJCSBlcnIgJiBJTVhfRE1BX0VSUl9CVUZGRVIgPyAgICIgYnVmZmVyIiA6ICIiKTsKK30KKworc3RhdGljIGludCBpbXhfc3NpX2RtYV9hbGxvYyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGlteF9wY21fZG1hX3BhcmFtcyAqZG1hX3BhcmFtcyA9IHJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKworCWlwcnRkLT5kbWEgPSBpbXhfZG1hX3JlcXVlc3RfYnlfcHJpbyhEUlZfTkFNRSwgRE1BX1BSSU9fSElHSCk7CisJaWYgKGlwcnRkLT5kbWEgPCAwKSB7CisJCXByX2VycigiRmFpbGVkIHRvIGNsYWltIHRoZSBhdWRpbyBETUFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSBpbXhfZG1hX3NldHVwX2hhbmRsZXJzKGlwcnRkLT5kbWEsCisJCQkJaW14X3NzaV9kbWFfY2FsbGJhY2ssCisJCQkJc25kX2lteF9kbWFfZXJyX2NhbGxiYWNrLCBzdWJzdHJlYW0pOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gaW14X2RtYV9zZXR1cF9wcm9ncmVzc2lvbl9oYW5kbGVyKGlwcnRkLT5kbWEsCisJCQlpbXhfc3NpX2RtYV9wcm9ncmVzc2lvbik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIkZhaWxlZCB0byBzZXR1cCB0aGUgRE1BIGhhbmRsZXJcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBpbXhfZG1hX2NvbmZpZ19jaGFubmVsKGlwcnRkLT5kbWEsCisJCQlJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKKwkJCUlNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCisJCQlkbWFfcGFyYW1zLT5kbWEsIDEpOworCWlmIChyZXQgPCAwKSB7CisJCXByX2VycigiQ2Fubm90IGNvbmZpZ3VyZSBETUEgY2hhbm5lbDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlteF9kbWFfY29uZmlnX2J1cnN0bGVuKGlwcnRkLT5kbWEsIGRtYV9wYXJhbXMtPmJ1cnN0c2l6ZSAqIDIpOworCisJcmV0dXJuIDA7CitvdXQ6CisJaW14X2RtYV9mcmVlKGlwcnRkLT5kbWEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc25kX2lteF9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGRtYV9hZGRyOworCisJaW14X3NzaV9kbWFfYWxsb2Moc3Vic3RyZWFtKTsKKworCWlwcnRkLT5zaXplID0gcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpOworCWlwcnRkLT5wZXJpb2RzID0gcGFyYW1zX3BlcmlvZHMocGFyYW1zKTsKKwlpcHJ0ZC0+cGVyaW9kID0gcGFyYW1zX3BlcmlvZF9ieXRlcyhwYXJhbXMpOworCWlwcnRkLT5vZmZzZXQgPSAwOworCWlwcnRkLT5wZXJpb2RfdGltZSA9IEhaIC8gKHBhcmFtc19yYXRlKHBhcmFtcykgLworCQkJcGFyYW1zX3BlcmlvZF9zaXplKHBhcmFtcykpOworCisJc25kX3BjbV9zZXRfcnVudGltZV9idWZmZXIoc3Vic3RyZWFtLCAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyKTsKKworCWlmIChpcHJ0ZC0+c2dfY291bnQgIT0gaXBydGQtPnBlcmlvZHMpIHsKKwkJa2ZyZWUoaXBydGQtPnNnX2xpc3QpOworCisJCWlwcnRkLT5zZ19saXN0ID0ga2NhbGxvYyhpcHJ0ZC0+cGVyaW9kcyArIDEsCisJCQkJc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCksIEdGUF9LRVJORUwpOworCQlpZiAoIWlwcnRkLT5zZ19saXN0KQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWlwcnRkLT5zZ19jb3VudCA9IGlwcnRkLT5wZXJpb2RzICsgMTsKKwl9CisKKwlzZ19pbml0X3RhYmxlKGlwcnRkLT5zZ19saXN0LCBpcHJ0ZC0+c2dfY291bnQpOworCWRtYV9hZGRyID0gcnVudGltZS0+ZG1hX2FkZHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgaXBydGQtPnBlcmlvZHM7IGkrKykgeworCQlpcHJ0ZC0+c2dfbGlzdFtpXS5wYWdlX2xpbmsgPSAwOworCQlpcHJ0ZC0+c2dfbGlzdFtpXS5vZmZzZXQgPSAwOworCQlpcHJ0ZC0+c2dfbGlzdFtpXS5kbWFfYWRkcmVzcyA9IGRtYV9hZGRyOworCQlpcHJ0ZC0+c2dfbGlzdFtpXS5sZW5ndGggPSBpcHJ0ZC0+cGVyaW9kOworCQlkbWFfYWRkciArPSBpcHJ0ZC0+cGVyaW9kOworCX0KKworCS8qIGNsb3NlIHRoZSBsb29wICovCisJaXBydGQtPnNnX2xpc3RbaXBydGQtPnNnX2NvdW50IC0gMV0ub2Zmc2V0ID0gMDsKKwlpcHJ0ZC0+c2dfbGlzdFtpcHJ0ZC0+c2dfY291bnQgLSAxXS5sZW5ndGggPSAwOworCWlwcnRkLT5zZ19saXN0W2lwcnRkLT5zZ19jb3VudCAtIDFdLnBhZ2VfbGluayA9CisJCQkoKHVuc2lnbmVkIGxvbmcpIGlwcnRkLT5zZ19saXN0IHwgMHgwMSkgJiB+MHgwMjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfaW14X3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCWlmIChpcHJ0ZC0+ZG1hID49IDApIHsKKwkJaW14X2RtYV9mcmVlKGlwcnRkLT5kbWEpOworCQlpcHJ0ZC0+ZG1hID0gLUVJTlZBTDsKKwl9CisKKwlrZnJlZShpcHJ0ZC0+c2dfbGlzdCk7CisJaXBydGQtPnNnX2xpc3QgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2lteF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaW14X3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zID0gcnRkLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKworCWlwcnRkLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJaXBydGQtPmJ1ZiA9ICh1bnNpZ25lZCBpbnQgKilzdWJzdHJlYW0tPmRtYV9idWZmZXIuYXJlYTsKKwlpcHJ0ZC0+cGVyaW9kX2NudCA9IDA7CisKKwlwcl9kZWJ1ZygiJXM6IGJ1ZjogJXAgcGVyaW9kOiAlZCBwZXJpb2RzOiAlZFxuIiwKKwkJCV9fZnVuY19fLCBpcHJ0ZC0+YnVmLCBpcHJ0ZC0+cGVyaW9kLCBpcHJ0ZC0+cGVyaW9kcyk7CisKKwllcnIgPSBpbXhfZG1hX3NldHVwX3NnKGlwcnRkLT5kbWEsIGlwcnRkLT5zZ19saXN0LCBpcHJ0ZC0+c2dfY291bnQsCisJCQlJTVhfRE1BX0xFTkdUSF9MT09QLCBkbWFfcGFyYW1zLT5kbWFfYWRkciwKKwkJCXN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgPworCQkJRE1BX01PREVfV1JJVEUgOiBETUFfTU9ERV9SRUFEKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2lteF9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlpbXhfZG1hX2VuYWJsZShpcHJ0ZC0+ZG1hKTsKKworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlpbXhfZG1hX2Rpc2FibGUoaXBydGQtPmRtYSk7CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfaW14X3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vic3RyZWFtLT5ydW50aW1lLCBpcHJ0ZC0+b2Zmc2V0KTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9pbXhfaGFyZHdhcmUgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQlTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCVNORFJWX1BDTV9JTkZPX1JFU1VNRSwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlX21pbiA9IDgwMDAsCisJLmNoYW5uZWxzX21pbiA9IDIsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSBJTVhfU1NJX0RNQUJVRl9TSVpFLAorCS5wZXJpb2RfYnl0ZXNfbWluID0gMTI4LAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTYgKiAxMDI0LAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjU1LAorCS5maWZvX3NpemUgPSAwLAorfTsKKworc3RhdGljIGludCBzbmRfaW14X29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkOworCWludCByZXQ7CisKKwlpcHJ0ZCA9IGt6YWxsb2Moc2l6ZW9mKCppcHJ0ZCksIEdGUF9LRVJORUwpOworCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGlwcnRkOworCisJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIoc3Vic3RyZWFtLT5ydW50aW1lLAorCQkJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZzbmRfaW14X2hhcmR3YXJlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBpbXhfcGNtX29wcyA9IHsKKwkub3BlbgkJPSBzbmRfaW14X29wZW4sCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBzbmRfaW14X3BjbV9od19wYXJhbXMsCisJLmh3X2ZyZWUJPSBzbmRfaW14X3BjbV9od19mcmVlLAorCS5wcmVwYXJlCT0gc25kX2lteF9wY21fcHJlcGFyZSwKKwkudHJpZ2dlcgk9IHNuZF9pbXhfcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIJPSBzbmRfaW14X3BjbV9wb2ludGVyLAorCS5tbWFwCQk9IHNuZF9pbXhfcGNtX21tYXAsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gaW14X3NvY19wbGF0Zm9ybV9kbWEgPSB7CisJLm5hbWUJCT0gImlteC1hdWRpbyIsCisJLnBjbV9vcHMgCT0gJmlteF9wY21fb3BzLAorCS5wY21fbmV3CT0gaW14X3BjbV9uZXcsCisJLnBjbV9mcmVlCT0gaW14X3BjbV9mcmVlLAorfTsKKworc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKmlteF9zc2lfZG1hX214Ml9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXN0cnVjdCBpbXhfc3NpICpzc2kpCit7CisJc3NpLT5kbWFfcGFyYW1zX3R4LmJ1cnN0c2l6ZSA9IERNQV9UWEZJRk9fQlVSU1Q7CisJc3NpLT5kbWFfcGFyYW1zX3J4LmJ1cnN0c2l6ZSA9IERNQV9SWEZJRk9fQlVSU1Q7CisKKwlyZXR1cm4gJmlteF9zb2NfcGxhdGZvcm1fZG1hOworfQorCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L2lteC1wY20tZmlxLmMgYi9zb3VuZC9zb2MvaW14L2lteC1wY20tZmlxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDljYjk4NAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbXgvaW14LXBjbS1maXEuYwpAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqIGlteC1wY20tZmlxLmMgIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gY29kZSBjb3B5cmlnaHRlZCBieSBGcmVlc2NhbGUsCisgKiBMaWFtIEdpcmR3b29kLCBKYXZpZXIgTWFydGluIGFuZCBwcm9iYWJseSBvdGhlcnMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxhc20vZmlxLmg+CisKKyNpbmNsdWRlIDxtYWNoL3NzaS5oPgorCisjaW5jbHVkZSAiaW14LXNzaS5oIgorCitzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgeworCWludCBwZXJpb2Q7CisJaW50IHBlcmlvZHM7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBsYXN0X29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJaW50IHBvbGxfdGltZTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbXhfc3NpX3NldF9uZXh0X3BvbGwoc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCkKK3sKKwlpcHJ0ZC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBpcHJ0ZC0+cG9sbF90aW1lOworfQorCitzdGF0aWMgdm9pZCBpbXhfc3NpX3RpbWVyX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9ICh2b2lkICopZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHB0X3JlZ3MgcmVnczsKKwl1bnNpZ25lZCBsb25nIGRlbHRhOworCisJZ2V0X2ZpcV9yZWdzKCZyZWdzKTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlpcHJ0ZC0+b2Zmc2V0ID0gcmVncy5BUk1fcjggJiAweGZmZmY7CisJZWxzZQorCQlpcHJ0ZC0+b2Zmc2V0ID0gcmVncy5BUk1fcjkgJiAweGZmZmY7CisKKwkvKiBIb3cgbXVjaCBkYXRhIGhhdmUgd2UgdHJhbnNmZXJyZWQgc2luY2UgdGhlIGxhc3QgcGVyaW9kIHJlcG9ydD8gKi8KKwlpZiAoaXBydGQtPm9mZnNldCA+PSBpcHJ0ZC0+bGFzdF9vZmZzZXQpCisJCWRlbHRhID0gaXBydGQtPm9mZnNldCAtIGlwcnRkLT5sYXN0X29mZnNldDsKKwllbHNlCisJCWRlbHRhID0gcnVudGltZS0+YnVmZmVyX3NpemUgKyBpcHJ0ZC0+b2Zmc2V0CisJCQktIGlwcnRkLT5sYXN0X29mZnNldDsKKworCS8qIElmIHdlJ3ZlIHRyYW5zZmVycmVkIGF0IGxlYXN0IGEgcGVyaW9kIHRoZW4gcmVwb3J0IGl0IGFuZAorCSAqIHJlc2V0IG91ciBwb2xsIHRpbWUgKi8KKwlpZiAoZGVsdGEgPj0gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworCQlpcHJ0ZC0+bGFzdF9vZmZzZXQgPSBpcHJ0ZC0+b2Zmc2V0OworCisJCWlteF9zc2lfc2V0X25leHRfcG9sbChpcHJ0ZCk7CisJfQorCisJLyogUmVzdGFydCB0aGUgdGltZXI7IGlmIHdlIGRpZG4ndCByZXBvcnQgd2UnbGwgcnVuIG9uIHRoZSBuZXh0IHRpY2sgKi8KKwlhZGRfdGltZXIoJmlwcnRkLT50aW1lcik7CisKK30KKworc3RhdGljIHN0cnVjdCBmaXFfaGFuZGxlciBmaCA9IHsKKwkubmFtZQkJPSBEUlZfTkFNRSwKK307CisKK3N0YXRpYyBpbnQgc25kX2lteF9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCWlwcnRkLT5zaXplID0gcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpOworCWlwcnRkLT5wZXJpb2RzID0gcGFyYW1zX3BlcmlvZHMocGFyYW1zKTsKKwlpcHJ0ZC0+cGVyaW9kID0gcGFyYW1zX3BlcmlvZF9ieXRlcyhwYXJhbXMpIDsKKwlpcHJ0ZC0+b2Zmc2V0ID0gMDsKKwlpcHJ0ZC0+bGFzdF9vZmZzZXQgPSAwOworCWlwcnRkLT5wb2xsX3RpbWUgPSBIWiAvIChwYXJhbXNfcmF0ZShwYXJhbXMpIC8gcGFyYW1zX3BlcmlvZF9zaXplKHBhcmFtcykpOworCisJc25kX3BjbV9zZXRfcnVudGltZV9idWZmZXIoc3Vic3RyZWFtLCAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9pbXhfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisKKwlnZXRfZmlxX3JlZ3MoJnJlZ3MpOworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlyZWdzLkFSTV9yOCA9IChpcHJ0ZC0+cGVyaW9kICogaXBydGQtPnBlcmlvZHMgLSAxKSA8PCAxNjsKKwllbHNlCisJCXJlZ3MuQVJNX3I5ID0gKGlwcnRkLT5wZXJpb2QgKiBpcHJ0ZC0+cGVyaW9kcyAtIDEpIDw8IDE2OworCisJc2V0X2ZpcV9yZWdzKCZyZWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpcV9lbmFibGU7CitzdGF0aWMgaW50IGlteF9wY21fZmlxOworCitzdGF0aWMgaW50IHNuZF9pbXhfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJaW14X3NzaV9zZXRfbmV4dF9wb2xsKGlwcnRkKTsKKwkJYWRkX3RpbWVyKCZpcHJ0ZC0+dGltZXIpOworCQlpZiAoKytmaXFfZW5hYmxlID09IDEpCisJCQllbmFibGVfZmlxKGlteF9wY21fZmlxKTsKKworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlkZWxfdGltZXIoJmlwcnRkLT50aW1lcik7CisJCWlmICgtLWZpcV9lbmFibGUgPT0gMCkKKwkJCWRpc2FibGVfZmlxKGlteF9wY21fZmlxKTsKKworCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc25kX2lteF9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwgaXBydGQtPm9mZnNldCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfaW14X2hhcmR3YXJlID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX01NQVAgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQlTTkRSVl9QQ01fSU5GT19SRVNVTUUsCisJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkucmF0ZV9taW4gPSA4MDAwLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gSU1YX1NTSV9ETUFCVUZfU0laRSwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDEyOCwKKwkucGVyaW9kX2J5dGVzX21heCA9IDE2ICogMTAyNCwKKwkucGVyaW9kc19taW4gPSAyLAorCS5wZXJpb2RzX21heCA9IDI1NSwKKwkuZmlmb19zaXplID0gMCwKK307CisKK3N0YXRpYyBpbnQgc25kX2lteF9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZDsKKwlpbnQgcmV0OworCisJaXBydGQgPSBremFsbG9jKHNpemVvZigqaXBydGQpLCBHRlBfS0VSTkVMKTsKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBpcHJ0ZDsKKworCWluaXRfdGltZXIoJmlwcnRkLT50aW1lcik7CisJaXBydGQtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylzdWJzdHJlYW07CisJaXBydGQtPnRpbWVyLmZ1bmN0aW9uID0gaW14X3NzaV90aW1lcl9jYWxsYmFjazsKKworCXJldCA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHN1YnN0cmVhbS0+cnVudGltZSwKKwkJCVNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmc25kX2lteF9oYXJkd2FyZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2lteF9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlkZWxfdGltZXJfc3luYygmaXBydGQtPnRpbWVyKTsKKwlrZnJlZShpcHJ0ZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBpbXhfcGNtX29wcyA9IHsKKwkub3BlbgkJPSBzbmRfaW14X29wZW4sCisJLmNsb3NlCQk9IHNuZF9pbXhfY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBzbmRfaW14X3BjbV9od19wYXJhbXMsCisJLnByZXBhcmUJPSBzbmRfaW14X3BjbV9wcmVwYXJlLAorCS50cmlnZ2VyCT0gc25kX2lteF9wY21fdHJpZ2dlciwKKwkucG9pbnRlcgk9IHNuZF9pbXhfcGNtX3BvaW50ZXIsCisJLm1tYXAJCT0gc25kX2lteF9wY21fbW1hcCwKK307CisKK3N0YXRpYyBpbnQgaW14X3BjbV9maXFfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaW14X3BjbV9uZXcoY2FyZCwgZGFpLCBwY20pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoZGFpLT5wbGF5YmFjay5jaGFubmVsc19taW4pIHsKKwkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPQorCQkJcGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLnN1YnN0cmVhbTsKKwkJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOworCisJCWlteF9zc2lfZmlxX3R4X2J1ZmZlciA9ICh1bnNpZ25lZCBsb25nKWJ1Zi0+YXJlYTsKKwl9CisKKwlpZiAoZGFpLT5jYXB0dXJlLmNoYW5uZWxzX21pbikgeworCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9CisJCQlwY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5zdWJzdHJlYW07CisJCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKworCQlpbXhfc3NpX2ZpcV9yeF9idWZmZXIgPSAodW5zaWduZWQgbG9uZylidWYtPmFyZWE7CisJfQorCisJc2V0X2ZpcV9oYW5kbGVyKCZpbXhfc3NpX2ZpcV9zdGFydCwKKwkJJmlteF9zc2lfZmlxX2VuZCAtICZpbXhfc3NpX2ZpcV9zdGFydCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtIGlteF9zb2NfcGxhdGZvcm1fZmlxID0geworCS5wY21fb3BzIAk9ICZpbXhfcGNtX29wcywKKwkucGNtX25ldwk9IGlteF9wY21fZmlxX25ldywKKwkucGNtX2ZyZWUJPSBpbXhfcGNtX2ZyZWUsCit9OworCitzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqaW14X3NzaV9maXFfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlzdHJ1Y3QgaW14X3NzaSAqc3NpKQoreworCWludCByZXQgPSAwOworCisJcmV0ID0gY2xhaW1fZmlxKCZmaCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gY2xhaW0gZmlxOiAlZCIsIHJldCk7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJbXhjX3NldF9pcnFfZmlxKHNzaS0+aXJxLCAxKTsKKworCWlteF9wY21fZmlxID0gc3NpLT5pcnE7CisKKwlpbXhfc3NpX2ZpcV9iYXNlID0gKHVuc2lnbmVkIGxvbmcpc3NpLT5iYXNlOworCisJc3NpLT5kbWFfcGFyYW1zX3R4LmJ1cnN0c2l6ZSA9IDQ7CisJc3NpLT5kbWFfcGFyYW1zX3J4LmJ1cnN0c2l6ZSA9IDY7CisKKwlyZXR1cm4gJmlteF9zb2NfcGxhdGZvcm1fZmlxOworfQorCit2b2lkIGlteF9zc2lfZmlxX2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJc3RydWN0IGlteF9zc2kgKnNzaSkKK3sKKwlteGNfc2V0X2lycV9maXEoc3NpLT5pcnEsIDApOworCXJlbGVhc2VfZmlxKCZmaCk7Cit9CisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jIGIvc291bmQvc29jL2lteC9pbXgtc3NpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZmNDZhNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jCkBAIC0wLDAgKzEsNzU4IEBACisvKgorICogaW14LXNzaS5jICAtLSAgQUxTQSBTb2MgQXVkaW8gTGF5ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGNvZGUgY29weXJpZ2h0ZWQgYnkgRnJlZXNjYWxlLAorICogTGlhbSBHaXJkd29vZCwgSmF2aWVyIE1hcnRpbiBhbmQgcHJvYmFibHkgb3RoZXJzLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCisgKiBUaGUgaS5NWCBTU0kgY29yZSBoYXMgc29tZSBuYXN0eSBsaW1pdGF0aW9ucyBpbiBBQzk3IG1vZGUuIFdoaWxlIG1vc3QKKyAqIHNhbmUgcHJvY2Vzc29yIHZlbmRvcnMgaGF2ZSBhIEZJRk8gcGVyIEFDOTcgc2xvdCwgdGhlIGkuTVggaGFzIG9ubHkKKyAqIG9uZSBGSUZPIHdoaWNoIGNvbWJpbmVzIGFsbCB2YWxpZCByZWNlaXZlIHNsb3RzLiBXZSBjYW5ub3QgZXZlbiBzZWxlY3QKKyAqIHdoaWNoIHNsb3RzIHdlIHdhbnQgdG8gcmVjZWl2ZS4gVGhlIFdNOTcxMiB3aXRoIHdoaWNoIHRoaXMgZHJpdmVyCisgKiB3YXMgZGV2ZWxvcHBlZCB3aXRoIGFsd2F5cyBzZW5kcyBHUElPIHN0YXR1cyBkYXRhIGluIHNsb3QgMTIgd2hpY2gKKyAqIHdlIHJlY2VpdmUgaW4gb3VyIChQQ00tKSBkYXRhIHN0cmVhbS4gVGhlIG9ubHkgY2hhbmNlIHdlIGhhdmUgaXMgdG8KKyAqIG1hbnVhbGx5IHNraXAgdGhpcyBkYXRhIGluIHRoZSBGSVEgaGFuZGxlci4gV2l0aCBzYW1wbGluZyByYXRlcyBkaWZmZXJlbnQKKyAqIGZyb20gNDgwMDBIeiBub3QgZXZlcnkgZnJhbWUgaGFzIHZhbGlkIHJlY2VpdmUgZGF0YSwgc28gdGhlIHJhdGlvCisgKiBiZXR3ZWVuIHBjbSBkYXRhIGFuZCBHUElPIHN0YXR1cyBkYXRhIGNoYW5nZXMuIE91ciBGSVEgaGFuZGxlciBpcyBub3QKKyAqIGFibGUgdG8gaGFuZGxlIHRoaXMsIGhlbmNlIHRoaXMgZHJpdmVyIG9ubHkgd29ya3Mgd2l0aCA0ODAwMEh6IHNhbXBsaW5nCisgKiByYXRlLgorICogUmVhZGluZyBhbmQgd3JpdGluZyBBQzk3IHJlZ2lzdGVycyBpcyBhbm90aGVyIGNoYWxsYW5nZS4gVGhlIGNvcmUKKyAqIHByb3ZpZGVzIHVzIHN0YXR1cyBiaXRzIHdoZW4gdGhlIHJlYWQgcmVnaXN0ZXIgaXMgdXBkYXRlZCB3aXRoICphbm90aGVyKgorICogdmFsdWUuIFdoZW4gd2UgcmVhZCB0aGUgc2FtZSByZWdpc3RlciB0d28gdGltZXMgKGFuZCB0aGUgcmVnaXN0ZXIgc3RpbGwKKyAqIGNvbnRhaW5zIHRoZSBzYW1lIHZhbHVlKSB0aGVzZSBzdGF0dXMgYml0cyBhcmUgbm90IHNldC4gV2Ugd29yaworICogYXJvdW5kIHRoaXMgYnkgbm90IHBvbGxpbmcgdGhlc2UgYml0cyBidXQgb25seSB3YWl0IGEgZml4ZWQgZGVsYXkuCisgKiAKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSA8bWFjaC9zc2kuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlICJpbXgtc3NpLmgiCisKKyNkZWZpbmUgU1NJX1NBQ05UX0RFRkFVTFQgKFNTSV9TQUNOVF9BQzk3RU4gfCBTU0lfU0FDTlRfRlYpCisKKy8qCisgKiBTU0kgTmV0d29yayBNb2RlIG9yIFRETSBzbG90cyBjb25maWd1cmF0aW9uLgorICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgorICovCitzdGF0aWMgaW50IGlteF9zc2lfc2V0X2RhaV90ZG1fc2xvdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCisJdW5zaWduZWQgaW50IHR4X21hc2ssIHVuc2lnbmVkIGludCByeF9tYXNrLCBpbnQgc2xvdHMsIGludCBzbG90X3dpZHRoKQoreworCXN0cnVjdCBpbXhfc3NpICpzc2kgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CisJdTMyIHNjY3I7CisKKwlzY2NyID0gcmVhZGwoc3NpLT5iYXNlICsgU1NJX1NUQ0NSKTsKKwlzY2NyICY9IH5TU0lfU1RDQ1JfRENfTUFTSzsKKwlzY2NyIHw9IFNTSV9TVENDUl9EQyhzbG90cyAtIDEpOworCXdyaXRlbChzY2NyLCBzc2ktPmJhc2UgKyBTU0lfU1RDQ1IpOworCisJc2NjciA9IHJlYWRsKHNzaS0+YmFzZSArIFNTSV9TUkNDUik7CisJc2NjciAmPSB+U1NJX1NUQ0NSX0RDX01BU0s7CisJc2NjciB8PSBTU0lfU1RDQ1JfREMoc2xvdHMgLSAxKTsKKwl3cml0ZWwoc2Njciwgc3NpLT5iYXNlICsgU1NJX1NSQ0NSKTsKKworCXdyaXRlbCh0eF9tYXNrLCBzc2ktPmJhc2UgKyBTU0lfU1RNU0spOworCXdyaXRlbChyeF9tYXNrLCBzc2ktPmJhc2UgKyBTU0lfU1JNU0spOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTU0kgREFJIGZvcm1hdCBjb25maWd1cmF0aW9uLgorICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgorICogTm90ZTogV2UgZG9uJ3QgdXNlIHRoZSBJMlMgbW9kZXMgYnV0IGluc3RlYWQgbWFudWFsbHkgY29uZmlndXJlIHRoZQorICogU1NJIGZvciBJMlMgYmVjYXVzZSB0aGUgSTJTIG1vZGUgaXMgb25seSBhIHJlZ2lzdGVyIHByZXNldC4KKyAqLworc3RhdGljIGludCBpbXhfc3NpX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwgdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3QgaW14X3NzaSAqc3NpID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXUzMiBzdHJjciA9IDAsIHNjcjsKKworCXNjciA9IHJlYWRsKHNzaS0+YmFzZSArIFNTSV9TQ1IpICYgfihTU0lfU0NSX1NZTiB8IFNTSV9TQ1JfTkVUKTsKKworCS8qIERBSSBtb2RlICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGxvdyAxY2xrIGJlZm9yZSBkYXRhICovCisJCXN0cmNyIHw9IFNTSV9TVENSX1RGU0kgfCBTU0lfU1RDUl9URUZTIHwgU1NJX1NUQ1JfVFhCSVQwOworCQlzY3IgfD0gU1NJX1NDUl9ORVQ7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGhpZ2ggd2l0aCBkYXRhICovCisJCXN0cmNyIHw9IFNTSV9TVENSX1RYQklUMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJLyogZGF0YSBvbiByaXNpbmcgZWRnZSBvZiBiY2xrLCBmcmFtZSBoaWdoIHdpdGggZGF0YSAqLworCQlzdHJjciB8PSBTU0lfU1RDUl9URlNMOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGhpZ2ggMWNsayBiZWZvcmUgZGF0YSAqLworCQlzdHJjciB8PSBTU0lfU1RDUl9URlNMIHwgU1NJX1NUQ1JfVEVGUzsKKwkJYnJlYWs7CisJfQorCisJLyogREFJIGNsb2NrIGludmVyc2lvbiAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgorCQlzdHJjciB8PSBTU0lfU1RDUl9URlNJOworCQlzdHJjciAmPSB+U1NJX1NUQ1JfVFNDS1A7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCXN0cmNyICY9IH4oU1NJX1NUQ1JfVFNDS1AgfCBTU0lfU1RDUl9URlNJKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKKwkJc3RyY3IgfD0gU1NJX1NUQ1JfVEZTSSB8IFNTSV9TVENSX1RTQ0tQOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQlzdHJjciAmPSB+U1NJX1NUQ1JfVEZTSTsKKwkJc3RyY3IgfD0gU1NJX1NUQ1JfVFNDS1A7CisJCWJyZWFrOworCX0KKworCS8qIERBSSBjbG9jayBtYXN0ZXIgbWFza3MgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBNYXN0ZXIgbW9kZSBub3QgaW1wbGVtZW50ZWQsIG5lZWRzIGhhbmRsaW5nIG9mIGNsb2Nrcy4gKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3RyY3IgfD0gU1NJX1NUQ1JfVEZFTjA7CisKKwl3cml0ZWwoc3RyY3IsIHNzaS0+YmFzZSArIFNTSV9TVENSKTsKKwl3cml0ZWwoc3RyY3IsIHNzaS0+YmFzZSArIFNTSV9TUkNSKTsKKwl3cml0ZWwoc2NyLCBzc2ktPmJhc2UgKyBTU0lfU0NSKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU1NJIHN5c3RlbSBjbG9jayBjb25maWd1cmF0aW9uLgorICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgorICovCitzdGF0aWMgaW50IGlteF9zc2lfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAorCQkJCSAgaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IGlteF9zc2kgKnNzaSA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwl1MzIgc2NyOworCisJc2NyID0gcmVhZGwoc3NpLT5iYXNlICsgU1NJX1NDUik7CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgSU1YX1NTUF9TWVNfQ0xLOgorCQlpZiAoZGlyID09IFNORF9TT0NfQ0xPQ0tfT1VUKQorCQkJc2NyIHw9IFNTSV9TQ1JfU1lTX0NMS19FTjsKKwkJZWxzZQorCQkJc2NyICY9IH5TU0lfU0NSX1NZU19DTEtfRU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdyaXRlbChzY3IsIHNzaS0+YmFzZSArIFNTSV9TQ1IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTU0kgQ2xvY2sgZGl2aWRlcnMKKyAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHBvcnQgaXMgaW5hY3RpdmUgKGkuZS4gU1NJRU4gPSAwKS4KKyAqLworc3RhdGljIGludCBpbXhfc3NpX3NldF9kYWlfY2xrZGl2KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKKwkJCQkgIGludCBkaXZfaWQsIGludCBkaXYpCit7CisJc3RydWN0IGlteF9zc2kgKnNzaSA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwl1MzIgc3RjY3IsIHNyY2NyOworCisJc3RjY3IgPSByZWFkbChzc2ktPmJhc2UgKyBTU0lfU1RDQ1IpOworCXNyY2NyID0gcmVhZGwoc3NpLT5iYXNlICsgU1NJX1NSQ0NSKTsKKworCXN3aXRjaCAoZGl2X2lkKSB7CisJY2FzZSBJTVhfU1NJX1RYX0RJVl8yOgorCQlzdGNjciAmPSB+U1NJX1NUQ0NSX0RJVjI7CisJCXN0Y2NyIHw9IGRpdjsKKwkJYnJlYWs7CisJY2FzZSBJTVhfU1NJX1RYX0RJVl9QU1I6CisJCXN0Y2NyICY9IH5TU0lfU1RDQ1JfUFNSOworCQlzdGNjciB8PSBkaXY7CisJCWJyZWFrOworCWNhc2UgSU1YX1NTSV9UWF9ESVZfUE06CisJCXN0Y2NyICY9IH4weGZmOworCQlzdGNjciB8PSBTU0lfU1RDQ1JfUE0oZGl2KTsKKwkJYnJlYWs7CisJY2FzZSBJTVhfU1NJX1JYX0RJVl8yOgorCQlzdGNjciAmPSB+U1NJX1NUQ0NSX0RJVjI7CisJCXN0Y2NyIHw9IGRpdjsKKwkJYnJlYWs7CisJY2FzZSBJTVhfU1NJX1JYX0RJVl9QU1I6CisJCXN0Y2NyICY9IH5TU0lfU1RDQ1JfUFNSOworCQlzdGNjciB8PSBkaXY7CisJCWJyZWFrOworCWNhc2UgSU1YX1NTSV9SWF9ESVZfUE06CisJCXN0Y2NyICY9IH4weGZmOworCQlzdGNjciB8PSBTU0lfU1RDQ1JfUE0oZGl2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd3JpdGVsKHN0Y2NyLCBzc2ktPmJhc2UgKyBTU0lfU1RDQ1IpOworCXdyaXRlbChzcmNjciwgc3NpLT5iYXNlICsgU1NJX1NSQ0NSKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLAorICogYWx0aG91Z2ggY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBieSB1cHBlciBsYXllcnMuCisgKi8KK3N0YXRpYyBpbnQgaW14X3NzaV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCit7CisJc3RydWN0IGlteF9zc2kgKnNzaSA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwl1MzIgcmVnLCBzY2NyOworCisJLyogVHgvUnggY29uZmlnICovCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJcmVnID0gU1NJX1NUQ0NSOworCQljcHVfZGFpLT5kbWFfZGF0YSA9ICZzc2ktPmRtYV9wYXJhbXNfdHg7CisJfSBlbHNlIHsKKwkJcmVnID0gU1NJX1NSQ0NSOworCQljcHVfZGFpLT5kbWFfZGF0YSA9ICZzc2ktPmRtYV9wYXJhbXNfcng7CisJfQorCisJc2NjciA9IHJlYWRsKHNzaS0+YmFzZSArIHJlZykgJiB+U1NJX1NUQ0NSX1dMX01BU0s7CisKKwkvKiBEQUkgZGF0YSAod29yZCkgc2l6ZSAqLworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJc2NjciB8PSBTU0lfU1JDQ1JfV0woMTYpOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJc2NjciB8PSBTU0lfU1JDQ1JfV0woMjApOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlzY2NyIHw9IFNTSV9TUkNDUl9XTCgyNCk7CisJCWJyZWFrOworCX0KKworCXdyaXRlbChzY2NyLCBzc2ktPmJhc2UgKyByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW14X3NzaV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAorCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJc3RydWN0IGlteF9zc2kgKnNzaSA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgc2llcl9iaXRzLCBzaWVyOworCXVuc2lnbmVkIGludCBzY3I7CisKKwlzY3IgPSByZWFkbChzc2ktPmJhc2UgKyBTU0lfU0NSKTsKKwlzaWVyID0gcmVhZGwoc3NpLT5iYXNlICsgU1NJX1NJRVIpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJaWYgKHNzaS0+ZmxhZ3MgJiBJTVhfU1NJX0RNQSkKKwkJCXNpZXJfYml0cyA9IFNTSV9TSUVSX1RETUFFOworCQllbHNlCisJCQlzaWVyX2JpdHMgPSBTU0lfU0lFUl9USUUgfCBTU0lfU0lFUl9URkUwX0VOOworCX0gZWxzZSB7CisJCWlmIChzc2ktPmZsYWdzICYgSU1YX1NTSV9ETUEpCisJCQlzaWVyX2JpdHMgPSBTU0lfU0lFUl9SRE1BRTsKKwkJZWxzZQorCQkJc2llcl9iaXRzID0gU1NJX1NJRVJfUklFIHwgU1NJX1NJRVJfUkZGMF9FTjsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCXNjciB8PSBTU0lfU0NSX1RFOworCQllbHNlCisJCQlzY3IgfD0gU1NJX1NDUl9SRTsKKwkJc2llciB8PSBzaWVyX2JpdHM7CisKKwkJaWYgKCsrc3NpLT5lbmFibGVkID09IDEpCisJCQlzY3IgfD0gU1NJX1NDUl9TU0lFTjsKKworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCXNjciAmPSB+U1NJX1NDUl9URTsKKwkJZWxzZQorCQkJc2NyICY9IH5TU0lfU0NSX1JFOworCQlzaWVyICY9IH5zaWVyX2JpdHM7CisKKwkJaWYgKC0tc3NpLT5lbmFibGVkID09IDApCisJCQlzY3IgJj0gflNTSV9TQ1JfU1NJRU47CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCEoc3NpLT5mbGFncyAmIElNWF9TU0lfVVNFX0FDOTcpKQorCQkvKiByeC90eCBhcmUgYWx3YXlzIGVuYWJsZWQgdG8gYWNjZXNzIGFjOTcgcmVnaXN0ZXJzICovCisJCXdyaXRlbChzY3IsIHNzaS0+YmFzZSArIFNTSV9TQ1IpOworCisJd3JpdGVsKHNpZXIsIHNzaS0+YmFzZSArIFNTSV9TSUVSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBpbXhfc3NpX3BjbV9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBpbXhfc3NpX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IGlteF9zc2lfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSBpbXhfc3NpX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfc3lzY2xrCT0gaW14X3NzaV9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X3RkbV9zbG90CT0gaW14X3NzaV9zZXRfZGFpX3RkbV9zbG90LAorCS50cmlnZ2VyCT0gaW14X3NzaV90cmlnZ2VyLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaSBpbXhfc3NpX2RhaSA9IHsKKwkucGxheWJhY2sgPSB7CisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwl9LAorCS5jYXB0dXJlID0geworCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJfSwKKwkub3BzID0gJmlteF9zc2lfcGNtX2RhaV9vcHMsCit9OworCitpbnQgc25kX2lteF9wY21fbW1hcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlpbnQgcmV0OworCisJcmV0ID0gZG1hX21tYXBfY29oZXJlbnQoTlVMTCwgdm1hLCBydW50aW1lLT5kbWFfYXJlYSwKKwkJCXJ1bnRpbWUtPmRtYV9hZGRyLCBydW50aW1lLT5kbWFfYnl0ZXMpOworCisJcHJfZGVidWcoIiVzOiByZXQ6ICVkICVwIDB4JTA4eCAweCUwOHhcbiIsIF9fZnVuY19fLCByZXQsCisJCQlydW50aW1lLT5kbWFfYXJlYSwKKwkJCXJ1bnRpbWUtPmRtYV9hZGRyLAorCQkJcnVudGltZS0+ZG1hX2J5dGVzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlteF9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKwlzaXplX3Qgc2l6ZSA9IElNWF9TU0lfRE1BQlVGX1NJWkU7CisKKwlidWYtPmRldi50eXBlID0gU05EUlZfRE1BX1RZUEVfREVWOworCWJ1Zi0+ZGV2LmRldiA9IHBjbS0+Y2FyZC0+ZGV2OworCWJ1Zi0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlidWYtPmFyZWEgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKHBjbS0+Y2FyZC0+ZGV2LCBzaXplLAorCQkJCQkgICAmYnVmLT5hZGRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1Zi0+YXJlYSkKKwkJcmV0dXJuIC1FTk9NRU07CisJYnVmLT5ieXRlcyA9IHNpemU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU2NCBpbXhfcGNtX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitpbnQgaW14X3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCisJaW50IHJldCA9IDA7CisKKwlpZiAoIWNhcmQtPmRldi0+ZG1hX21hc2spCisJCWNhcmQtPmRldi0+ZG1hX21hc2sgPSAmaW14X3BjbV9kbWFtYXNrOworCWlmICghY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzaykKKwkJY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisJaWYgKGRhaS0+cGxheWJhY2suY2hhbm5lbHNfbWluKSB7CisJCXJldCA9IGlteF9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCisJCQlTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCWlmIChkYWktPmNhcHR1cmUuY2hhbm5lbHNfbWluKSB7CisJCXJldCA9IGlteF9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCisJCQlTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBpbXhfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZjsKKwlpbnQgc3RyZWFtOworCisJZm9yIChzdHJlYW0gPSAwOyBzdHJlYW0gPCAyOyBzdHJlYW0rKykgeworCQlzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW07CisJCWlmICghc3Vic3RyZWFtKQorCQkJY29udGludWU7CisKKwkJYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKwkJaWYgKCFidWYtPmFyZWEpCisJCQljb250aW51ZTsKKworCQlkbWFfZnJlZV93cml0ZWNvbWJpbmUocGNtLT5jYXJkLT5kZXYsIGJ1Zi0+Ynl0ZXMsCisJCQkJICAgICAgYnVmLT5hcmVhLCBidWYtPmFkZHIpOworCQlidWYtPmFyZWEgPSBOVUxMOworCX0KK30KKworc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gaW14X3NvY19wbGF0Zm9ybSA9IHsKKwkubmFtZQkJPSAiaW14LWF1ZGlvIiwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpbXhfc29jX3BsYXRmb3JtKTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaSBpbXhfYWM5N19kYWkgPSB7CisJLm5hbWUgPSAiQUM5NyIsCisJLmFjOTdfY29udHJvbCA9IDEsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJfSwKKwkub3BzID0gJmlteF9zc2lfcGNtX2RhaV9vcHMsCit9OworCitzdGF0aWMgdm9pZCBzZXR1cF9jaGFubmVsX3RvX2FjOTcoc3RydWN0IGlteF9zc2kgKmlteF9zc2kpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gaW14X3NzaS0+YmFzZTsKKworCXdyaXRlbCgweDAsIGJhc2UgKyBTU0lfU0NSKTsKKwl3cml0ZWwoMHgwLCBiYXNlICsgU1NJX1NUQ1IpOworCXdyaXRlbCgweDAsIGJhc2UgKyBTU0lfU1JDUik7CisKKwl3cml0ZWwoU1NJX1NDUl9TWU4gfCBTU0lfU0NSX05FVCwgYmFzZSArIFNTSV9TQ1IpOworCisJd3JpdGVsKFNTSV9TRkNTUl9SRldNMCg4KSB8CisJCVNTSV9TRkNTUl9URldNMCg4KSB8CisJCVNTSV9TRkNTUl9SRldNMSg4KSB8CisJCVNTSV9TRkNTUl9URldNMSg4KSwgYmFzZSArIFNTSV9TRkNTUik7CisKKwl3cml0ZWwoU1NJX1NUQ0NSX1dMKDE2KSB8IFNTSV9TVENDUl9EQygxMiksIGJhc2UgKyBTU0lfU1RDQ1IpOworCXdyaXRlbChTU0lfU1RDQ1JfV0woMTYpIHwgU1NJX1NUQ0NSX0RDKDEyKSwgYmFzZSArIFNTSV9TUkNDUik7CisKKwl3cml0ZWwoU1NJX1NDUl9TWU4gfCBTU0lfU0NSX05FVCB8IFNTSV9TQ1JfU1NJRU4sIGJhc2UgKyBTU0lfU0NSKTsKKwl3cml0ZWwoU1NJX1NPUl9XQUlUKDMpLCBiYXNlICsgU1NJX1NPUik7CisKKwl3cml0ZWwoU1NJX1NDUl9TWU4gfCBTU0lfU0NSX05FVCB8IFNTSV9TQ1JfU1NJRU4gfAorCQkJU1NJX1NDUl9URSB8IFNTSV9TQ1JfUkUsCisJCQliYXNlICsgU1NJX1NDUik7CisKKwl3cml0ZWwoU1NJX1NBQ05UX0RFRkFVTFQsIGJhc2UgKyBTU0lfU0FDTlQpOworCXdyaXRlbCgweGZmLCBiYXNlICsgU1NJX1NBQ0NESVMpOworCXdyaXRlbCgweDMwMCwgYmFzZSArIFNTSV9TQUNDRU4pOworfQorCitzdGF0aWMgc3RydWN0IGlteF9zc2kgKmFjOTdfc3NpOworCitzdGF0aWMgdm9pZCBpbXhfc3NpX2FjOTdfd3JpdGUoc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCXVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlzdHJ1Y3QgaW14X3NzaSAqaW14X3NzaSA9IGFjOTdfc3NpOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGlteF9zc2ktPmJhc2U7CisJdW5zaWduZWQgaW50IGxyZWc7CisJdW5zaWduZWQgaW50IGx2YWw7CisKKwlpZiAocmVnID4gMHg3ZikKKwkJcmV0dXJuOworCisJcHJfZGVidWcoIiVzOiAweCUwMnggMHglMDR4XG4iLCBfX2Z1bmNfXywgcmVnLCB2YWwpOworCisJbHJlZyA9IHJlZyA8PCAgMTI7CisJd3JpdGVsKGxyZWcsIGJhc2UgKyBTU0lfU0FDQUREKTsKKworCWx2YWwgPSB2YWwgPDwgNDsKKwl3cml0ZWwobHZhbCAsIGJhc2UgKyBTU0lfU0FDREFUKTsKKworCXdyaXRlbChTU0lfU0FDTlRfREVGQVVMVCB8IFNTSV9TQUNOVF9XUiwgYmFzZSArIFNTSV9TQUNOVCk7CisJdWRlbGF5KDEwMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbXhfc3NpX2FjOTdfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCXVuc2lnbmVkIHNob3J0IHJlZykKK3sKKwlzdHJ1Y3QgaW14X3NzaSAqaW14X3NzaSA9IGFjOTdfc3NpOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGlteF9zc2ktPmJhc2U7CisKKwl1bnNpZ25lZCBzaG9ydCB2YWwgPSAtMTsKKwl1bnNpZ25lZCBpbnQgbHJlZzsKKworCWxyZWcgPSAocmVnICYgMHg3ZikgPDwgIDEyIDsKKwl3cml0ZWwobHJlZywgYmFzZSArIFNTSV9TQUNBREQpOworCXdyaXRlbChTU0lfU0FDTlRfREVGQVVMVCB8IFNTSV9TQUNOVF9SRCwgYmFzZSArIFNTSV9TQUNOVCk7CisKKwl1ZGVsYXkoMTAwKTsKKworCXZhbCA9IChyZWFkbChiYXNlICsgU1NJX1NBQ0RBVCkgPj4gNCkgJiAweGZmZmY7CisKKwlwcl9kZWJ1ZygiJXM6IDB4JTAyeCAweCUwNHhcbiIsIF9fZnVuY19fLCByZWcsIHZhbCk7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdm9pZCBpbXhfc3NpX2FjOTdfcmVzZXQoc3RydWN0IHNuZF9hYzk3ICphYzk3KQoreworCXN0cnVjdCBpbXhfc3NpICppbXhfc3NpID0gYWM5N19zc2k7CisKKwlpZiAoaW14X3NzaS0+YWM5N19yZXNldCkKKwkJaW14X3NzaS0+YWM5N19yZXNldChhYzk3KTsKK30KKworc3RhdGljIHZvaWQgaW14X3NzaV9hYzk3X3dhcm1fcmVzZXQoc3RydWN0IHNuZF9hYzk3ICphYzk3KQoreworCXN0cnVjdCBpbXhfc3NpICppbXhfc3NpID0gYWM5N19zc2k7CisKKwlpZiAoaW14X3NzaS0+YWM5N193YXJtX3Jlc2V0KQorCQlpbXhfc3NpLT5hYzk3X3dhcm1fcmVzZXQoYWM5Nyk7Cit9CisKK3N0cnVjdCBzbmRfYWM5N19idXNfb3BzIHNvY19hYzk3X29wcyA9IHsKKwkucmVhZAkJPSBpbXhfc3NpX2FjOTdfcmVhZCwKKwkud3JpdGUJCT0gaW14X3NzaV9hYzk3X3dyaXRlLAorCS5yZXNldAkJPSBpbXhfc3NpX2FjOTdfcmVzZXQsCisJLndhcm1fcmVzZXQJPSBpbXhfc3NpX2FjOTdfd2FybV9yZXNldAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19hYzk3X29wcyk7CisKK3N0cnVjdCBzbmRfc29jX2RhaSBpbXhfc3NpX3BjbV9kYWlbMl07CitFWFBPUlRfU1lNQk9MX0dQTChpbXhfc3NpX3BjbV9kYWkpOworCitzdGF0aWMgaW50IGlteF9zc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgaW14X3NzaSAqc3NpOworCXN0cnVjdCBpbXhfc3NpX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCB2YWw7CisJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSAmaW14X3NzaV9wY21fZGFpW3BkZXYtPmlkXTsKKworCWlmIChkYWktPmlkID49IEFSUkFZX1NJWkUoaW14X3NzaV9wY21fZGFpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzc2kgPSBremFsbG9jKHNpemVvZigqc3NpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzc2kpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHBkYXRhKSB7CisJCXNzaS0+YWM5N19yZXNldCA9IHBkYXRhLT5hYzk3X3Jlc2V0OworCQlzc2ktPmFjOTdfd2FybV9yZXNldCA9IHBkYXRhLT5hYzk3X3dhcm1fcmVzZXQ7CisJCXNzaS0+ZmxhZ3MgPSBwZGF0YS0+ZmxhZ3M7CisJfQorCisJc3NpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJc3NpLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoc3NpLT5jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoc3NpLT5jbGspOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZ2V0IHRoZSBjbG9jazogJWRcbiIsCisJCQlyZXQpOworCQlnb3RvIGZhaWxlZF9jbGs7CisJfQorCWNsa19lbmFibGUoc3NpLT5jbGspOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGZhaWxlZF9nZXRfcmVzb3VyY2U7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBEUlZfTkFNRSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBmYWlsZWRfZ2V0X3Jlc291cmNlOworCX0KKworCXNzaS0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIXNzaS0+YmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbGVkX2lvcmVtYXA7CisJfQorCisJaWYgKHNzaS0+ZmxhZ3MgJiBJTVhfU1NJX1VTRV9BQzk3KSB7CisJCWlmIChhYzk3X3NzaSkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBmYWlsZWRfYWM5NzsKKwkJfQorCQlhYzk3X3NzaSA9IHNzaTsKKwkJc2V0dXBfY2hhbm5lbF90b19hYzk3KHNzaSk7CisJCW1lbWNweShkYWksICZpbXhfYWM5N19kYWksIHNpemVvZihpbXhfYWM5N19kYWkpKTsKKwl9IGVsc2UKKwkJbWVtY3B5KGRhaSwgJmlteF9zc2lfZGFpLCBzaXplb2YoaW14X3NzaV9kYWkpKTsKKworCXdyaXRlbCgweDAsIHNzaS0+YmFzZSArIFNTSV9TSUVSKTsKKworCXNzaS0+ZG1hX3BhcmFtc19yeC5kbWFfYWRkciA9IHJlcy0+c3RhcnQgKyBTU0lfU1JYMDsKKwlzc2ktPmRtYV9wYXJhbXNfdHguZG1hX2FkZHIgPSByZXMtPnN0YXJ0ICsgU1NJX1NUWDA7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAidHgwIik7CisJaWYgKHJlcykKKwkJc3NpLT5kbWFfcGFyYW1zX3R4LmRtYSA9IHJlcy0+c3RhcnQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAicngwIik7CisJaWYgKHJlcykKKwkJc3NpLT5kbWFfcGFyYW1zX3J4LmRtYSA9IHJlcy0+c3RhcnQ7CisKKwlkYWktPmlkID0gcGRldi0+aWQ7CisJZGFpLT5kZXYgPSAmcGRldi0+ZGV2OworCWRhaS0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiaW14LXNzaS4lZCIsIHBkZXYtPmlkKTsKKwlkYWktPnByaXZhdGVfZGF0YSA9IHNzaTsKKworCWlmICgoY3B1X2lzX214MjcoKSB8fCBjcHVfaXNfbXgyMSgpKSAmJgorCQkJIShzc2ktPmZsYWdzICYgSU1YX1NTSV9VU0VfQUM5NykpIHsKKwkJc3NpLT5mbGFncyB8PSBJTVhfU1NJX0RNQTsKKwkJcGxhdGZvcm0gPSBpbXhfc3NpX2RtYV9teDJfaW5pdChwZGV2LCBzc2kpOworCX0gZWxzZQorCQlwbGF0Zm9ybSA9IGlteF9zc2lfZmlxX2luaXQocGRldiwgc3NpKTsKKworCWlteF9zb2NfcGxhdGZvcm0ucGNtX29wcyA9IHBsYXRmb3JtLT5wY21fb3BzOworCWlteF9zb2NfcGxhdGZvcm0ucGNtX25ldyA9IHBsYXRmb3JtLT5wY21fbmV3OworCWlteF9zb2NfcGxhdGZvcm0ucGNtX2ZyZWUgPSBwbGF0Zm9ybS0+cGNtX2ZyZWU7CisKKwl2YWwgPSBTU0lfU0ZDU1JfVEZXTTAoc3NpLT5kbWFfcGFyYW1zX3R4LmJ1cnN0c2l6ZSkgfAorCQlTU0lfU0ZDU1JfUkZXTTAoc3NpLT5kbWFfcGFyYW1zX3J4LmJ1cnN0c2l6ZSk7CisJd3JpdGVsKHZhbCwgc3NpLT5iYXNlICsgU1NJX1NGQ1NSKTsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKGRhaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZWdpc3RlciBEQUkgZmFpbGVkXG4iKTsKKwkJZ290byBmYWlsZWRfcmVnaXN0ZXI7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc3NpKTsKKworCXJldHVybiAwOworCitmYWlsZWRfcmVnaXN0ZXI6CitmYWlsZWRfYWM5NzoKKwlpb3VubWFwKHNzaS0+YmFzZSk7CitmYWlsZWRfaW9yZW1hcDoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2ZhaWxlZF9nZXRfcmVzb3VyY2U6CisJY2xrX2Rpc2FibGUoc3NpLT5jbGspOworCWNsa19wdXQoc3NpLT5jbGspOworZmFpbGVkX2NsazoKKwlrZnJlZShzc2kpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgaW14X3NzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJc3RydWN0IGlteF9zc2kgKnNzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gJmlteF9zc2lfcGNtX2RhaVtwZGV2LT5pZF07CisKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKGRhaSk7CisKKwlpZiAoc3NpLT5mbGFncyAmIElNWF9TU0lfVVNFX0FDOTcpCisJCWFjOTdfc3NpID0gTlVMTDsKKworCWlmICghKHNzaS0+ZmxhZ3MgJiBJTVhfU1NJX0RNQSkpCisJCWlteF9zc2lfZmlxX2V4aXQocGRldiwgc3NpKTsKKworCWlvdW5tYXAoc3NpLT5iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwljbGtfZGlzYWJsZShzc2ktPmNsayk7CisJY2xrX3B1dChzc2ktPmNsayk7CisJa2ZyZWUoc3NpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpbXhfc3NpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBpbXhfc3NpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChpbXhfc3NpX3JlbW92ZSksCisKKwkuZHJpdmVyID0geworCQkubmFtZSA9IERSVl9OQU1FLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW14X3NzaV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfcGxhdGZvcm0oJmlteF9zb2NfcGxhdGZvcm0pOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVnaXN0ZXIgc29jIHBsYXRmb3JtOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlteF9zc2lfZHJpdmVyKTsKKwlpZiAocmV0KSB7CisJCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmaW14X3NvY19wbGF0Zm9ybSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpbXhfc3NpX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaW14X3NzaV9kcml2ZXIpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmaW14X3NvY19wbGF0Zm9ybSk7Cit9CisKK21vZHVsZV9pbml0KGlteF9zc2lfaW5pdCk7Cittb2R1bGVfZXhpdChpbXhfc3NpX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIlNhc2NoYSBIYXVlciwgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImkuTVggSTJTL2FjOTcgU29DIEludGVyZmFjZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L2lteC1zc2kuaCBiL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZjI2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvaW14L2lteC1zc2kuaApAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfSU1YX1NTSV9ICisjZGVmaW5lIF9JTVhfU1NJX0gKKworI2RlZmluZSBTU0lfU1RYMAkweDAwCisjZGVmaW5lIFNTSV9TVFgxCTB4MDQKKyNkZWZpbmUgU1NJX1NSWDAJMHgwOAorI2RlZmluZSBTU0lfU1JYMQkweDBjCisKKyNkZWZpbmUgU1NJX1NDUgkJMHgxMAorI2RlZmluZSBTU0lfU0NSX0NMS19JU1QJCSgxIDw8IDkpCisjZGVmaW5lIFNTSV9TQ1JfQ0xLX0lTVF9TSElGVAk5CisjZGVmaW5lIFNTSV9TQ1JfVENIX0VOCQkoMSA8PCA4KQorI2RlZmluZSBTU0lfU0NSX1NZU19DTEtfRU4JKDEgPDwgNykKKyNkZWZpbmUgU1NJX1NDUl9JMlNfTU9ERV9OT1JNCSgwIDw8IDUpCisjZGVmaW5lIFNTSV9TQ1JfSTJTX01PREVfTVNUUgkoMSA8PCA1KQorI2RlZmluZSBTU0lfU0NSX0kyU19NT0RFX1NMQVZFCSgyIDw8IDUpCisjZGVmaW5lIFNTSV9JMlNfTU9ERV9NQVNLCSgzIDw8IDUpCisjZGVmaW5lIFNTSV9TQ1JfU1lOCQkoMSA8PCA0KQorI2RlZmluZSBTU0lfU0NSX05FVAkJKDEgPDwgMykKKyNkZWZpbmUgU1NJX1NDUl9SRQkJKDEgPDwgMikKKyNkZWZpbmUgU1NJX1NDUl9URQkJKDEgPDwgMSkKKyNkZWZpbmUgU1NJX1NDUl9TU0lFTgkJKDEgPDwgMCkKKworI2RlZmluZSBTU0lfU0lTUgkweDE0CisjZGVmaW5lIFNTSV9TSVNSX01BU0sJCSgoMSA8PCAxOSkgLSAxKQorI2RlZmluZSBTU0lfU0lTUl9DTURBVQkJKDEgPDwgMTgpCisjZGVmaW5lIFNTSV9TSVNSX0NNRERVCQkoMSA8PCAxNykKKyNkZWZpbmUgU1NJX1NJU1JfUlhUCQkoMSA8PCAxNikKKyNkZWZpbmUgU1NJX1NJU1JfUkRSMQkJKDEgPDwgMTUpCisjZGVmaW5lIFNTSV9TSVNSX1JEUjAJCSgxIDw8IDE0KQorI2RlZmluZSBTU0lfU0lTUl9UREUxCQkoMSA8PCAxMykKKyNkZWZpbmUgU1NJX1NJU1JfVERFMAkJKDEgPDwgMTIpCisjZGVmaW5lIFNTSV9TSVNSX1JPRTEJCSgxIDw8IDExKQorI2RlZmluZSBTU0lfU0lTUl9ST0UwCQkoMSA8PCAxMCkKKyNkZWZpbmUgU1NJX1NJU1JfVFVFMQkJKDEgPDwgOSkKKyNkZWZpbmUgU1NJX1NJU1JfVFVFMAkJKDEgPDwgOCkKKyNkZWZpbmUgU1NJX1NJU1JfVEZTCQkoMSA8PCA3KQorI2RlZmluZSBTU0lfU0lTUl9SRlMJCSgxIDw8IDYpCisjZGVmaW5lIFNTSV9TSVNSX1RMUwkJKDEgPDwgNSkKKyNkZWZpbmUgU1NJX1NJU1JfUkxTCQkoMSA8PCA0KQorI2RlZmluZSBTU0lfU0lTUl9SRkYxCQkoMSA8PCAzKQorI2RlZmluZSBTU0lfU0lTUl9SRkYwCQkoMSA8PCAyKQorI2RlZmluZSBTU0lfU0lTUl9URkUxCQkoMSA8PCAxKQorI2RlZmluZSBTU0lfU0lTUl9URkUwCQkoMSA8PCAwKQorCisjZGVmaW5lIFNTSV9TSUVSCTB4MTgKKyNkZWZpbmUgU1NJX1NJRVJfUkRNQUUJCSgxIDw8IDIyKQorI2RlZmluZSBTU0lfU0lFUl9SSUUJCSgxIDw8IDIxKQorI2RlZmluZSBTU0lfU0lFUl9URE1BRQkJKDEgPDwgMjApCisjZGVmaW5lIFNTSV9TSUVSX1RJRQkJKDEgPDwgMTkpCisjZGVmaW5lIFNTSV9TSUVSX0NNREFVX0VOCSgxIDw8IDE4KQorI2RlZmluZSBTU0lfU0lFUl9DTUREVV9FTgkoMSA8PCAxNykKKyNkZWZpbmUgU1NJX1NJRVJfUlhUX0VOCQkoMSA8PCAxNikKKyNkZWZpbmUgU1NJX1NJRVJfUkRSMV9FTgkoMSA8PCAxNSkKKyNkZWZpbmUgU1NJX1NJRVJfUkRSMF9FTgkoMSA8PCAxNCkKKyNkZWZpbmUgU1NJX1NJRVJfVERFMV9FTgkoMSA8PCAxMykKKyNkZWZpbmUgU1NJX1NJRVJfVERFMF9FTgkoMSA8PCAxMikKKyNkZWZpbmUgU1NJX1NJRVJfUk9FMV9FTgkoMSA8PCAxMSkKKyNkZWZpbmUgU1NJX1NJRVJfUk9FMF9FTgkoMSA8PCAxMCkKKyNkZWZpbmUgU1NJX1NJRVJfVFVFMV9FTgkoMSA8PCA5KQorI2RlZmluZSBTU0lfU0lFUl9UVUUwX0VOCSgxIDw8IDgpCisjZGVmaW5lIFNTSV9TSUVSX1RGU19FTgkJKDEgPDwgNykKKyNkZWZpbmUgU1NJX1NJRVJfUkZTX0VOCQkoMSA8PCA2KQorI2RlZmluZSBTU0lfU0lFUl9UTFNfRU4JCSgxIDw8IDUpCisjZGVmaW5lIFNTSV9TSUVSX1JMU19FTgkJKDEgPDwgNCkKKyNkZWZpbmUgU1NJX1NJRVJfUkZGMV9FTgkoMSA8PCAzKQorI2RlZmluZSBTU0lfU0lFUl9SRkYwX0VOCSgxIDw8IDIpCisjZGVmaW5lIFNTSV9TSUVSX1RGRTFfRU4JKDEgPDwgMSkKKyNkZWZpbmUgU1NJX1NJRVJfVEZFMF9FTgkoMSA8PCAwKQorCisjZGVmaW5lIFNTSV9TVENSCTB4MWMKKyNkZWZpbmUgU1NJX1NUQ1JfVFhCSVQwCQkoMSA8PCA5KQorI2RlZmluZSBTU0lfU1RDUl9URkVOMQkJKDEgPDwgOCkKKyNkZWZpbmUgU1NJX1NUQ1JfVEZFTjAJCSgxIDw8IDcpCisjZGVmaW5lIFNTSV9GSUZPX0VOQUJMRV8wX1NISUZUIDcKKyNkZWZpbmUgU1NJX1NUQ1JfVEZESVIJCSgxIDw8IDYpCisjZGVmaW5lIFNTSV9TVENSX1RYRElSCQkoMSA8PCA1KQorI2RlZmluZSBTU0lfU1RDUl9UU0hGRAkJKDEgPDwgNCkKKyNkZWZpbmUgU1NJX1NUQ1JfVFNDS1AJCSgxIDw8IDMpCisjZGVmaW5lIFNTSV9TVENSX1RGU0kJCSgxIDw8IDIpCisjZGVmaW5lIFNTSV9TVENSX1RGU0wJCSgxIDw8IDEpCisjZGVmaW5lIFNTSV9TVENSX1RFRlMJCSgxIDw8IDApCisKKyNkZWZpbmUgU1NJX1NSQ1IJMHgyMAorI2RlZmluZSBTU0lfU1JDUl9SWEJJVDAJCSgxIDw8IDkpCisjZGVmaW5lIFNTSV9TUkNSX1JGRU4xCQkoMSA8PCA4KQorI2RlZmluZSBTU0lfU1JDUl9SRkVOMAkJKDEgPDwgNykKKyNkZWZpbmUgU1NJX0ZJRk9fRU5BQkxFXzBfU0hJRlQgNworI2RlZmluZSBTU0lfU1JDUl9SRkRJUgkJKDEgPDwgNikKKyNkZWZpbmUgU1NJX1NSQ1JfUlhESVIJCSgxIDw8IDUpCisjZGVmaW5lIFNTSV9TUkNSX1JTSEZECQkoMSA8PCA0KQorI2RlZmluZSBTU0lfU1JDUl9SU0NLUAkJKDEgPDwgMykKKyNkZWZpbmUgU1NJX1NSQ1JfUkZTSQkJKDEgPDwgMikKKyNkZWZpbmUgU1NJX1NSQ1JfUkZTTAkJKDEgPDwgMSkKKyNkZWZpbmUgU1NJX1NSQ1JfUkVGUwkJKDEgPDwgMCkKKworI2RlZmluZSBTU0lfU1JDQ1IJCTB4MjgKKyNkZWZpbmUgU1NJX1NSQ0NSX0RJVjIJCSgxIDw8IDE4KQorI2RlZmluZSBTU0lfU1JDQ1JfUFNSCQkoMSA8PCAxNykKKyNkZWZpbmUgU1NJX1NSQ0NSX1dMKHgpCQkoKCgoeCkgLSAyKSA+PiAxKSA8PCAxMykKKyNkZWZpbmUgU1NJX1NSQ0NSX0RDKHgpCQkoKCh4KSAmIDB4MWYpIDw8IDgpCisjZGVmaW5lIFNTSV9TUkNDUl9QTSh4KQkJKCgoeCkgJiAweGZmKSA8PCAwKQorI2RlZmluZSBTU0lfU1JDQ1JfV0xfTUFTSwkoMHhmIDw8IDEzKQorI2RlZmluZSBTU0lfU1JDQ1JfRENfTUFTSwkoMHgxZiA8PCA4KQorI2RlZmluZSBTU0lfU1JDQ1JfUE1fTUFTSwkoMHhmZiA8PCAwKQorCisjZGVmaW5lIFNTSV9TVENDUgkJMHgyNAorI2RlZmluZSBTU0lfU1RDQ1JfRElWMgkJKDEgPDwgMTgpCisjZGVmaW5lIFNTSV9TVENDUl9QU1IJCSgxIDw8IDE3KQorI2RlZmluZSBTU0lfU1RDQ1JfV0woeCkJCSgoKCh4KSAtIDIpID4+IDEpIDw8IDEzKQorI2RlZmluZSBTU0lfU1RDQ1JfREMoeCkJCSgoKHgpICYgMHgxZikgPDwgOCkKKyNkZWZpbmUgU1NJX1NUQ0NSX1BNKHgpCQkoKCh4KSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIFNTSV9TVENDUl9XTF9NQVNLCSgweGYgPDwgMTMpCisjZGVmaW5lIFNTSV9TVENDUl9EQ19NQVNLCSgweDFmIDw8IDgpCisjZGVmaW5lIFNTSV9TVENDUl9QTV9NQVNLCSgweGZmIDw8IDApCisKKyNkZWZpbmUgU1NJX1NGQ1NSCTB4MmMKKyNkZWZpbmUgU1NJX1NGQ1NSX1JGQ05UMSh4KQkoKCh4KSAmIDB4ZikgPDwgMjgpCisjZGVmaW5lIFNTSV9SWF9GSUZPXzFfQ09VTlRfU0hJRlQgMjgKKyNkZWZpbmUgU1NJX1NGQ1NSX1RGQ05UMSh4KQkoKCh4KSAmIDB4ZikgPDwgMjQpCisjZGVmaW5lIFNTSV9UWF9GSUZPXzFfQ09VTlRfU0hJRlQgMjQKKyNkZWZpbmUgU1NJX1NGQ1NSX1JGV00xKHgpCSgoKHgpICYgMHhmKSA8PCAyMCkKKyNkZWZpbmUgU1NJX1NGQ1NSX1RGV00xKHgpCSgoKHgpICYgMHhmKSA8PCAxNikKKyNkZWZpbmUgU1NJX1NGQ1NSX1JGQ05UMCh4KQkoKCh4KSAmIDB4ZikgPDwgMTIpCisjZGVmaW5lIFNTSV9SWF9GSUZPXzBfQ09VTlRfU0hJRlQgMTIKKyNkZWZpbmUgU1NJX1NGQ1NSX1RGQ05UMCh4KQkoKCh4KSAmIDB4ZikgPDwgIDgpCisjZGVmaW5lIFNTSV9UWF9GSUZPXzBfQ09VTlRfU0hJRlQgOAorI2RlZmluZSBTU0lfU0ZDU1JfUkZXTTAoeCkJKCgoeCkgJiAweGYpIDw8ICA0KQorI2RlZmluZSBTU0lfU0ZDU1JfVEZXTTAoeCkJKCgoeCkgJiAweGYpIDw8ICAwKQorI2RlZmluZSBTU0lfU0ZDU1JfUkZXTTBfTUFTSwkoMHhmIDw8ICA0KQorI2RlZmluZSBTU0lfU0ZDU1JfVEZXTTBfTUFTSwkoMHhmIDw8ICAwKQorCisjZGVmaW5lIFNTSV9TVFIJCTB4MzAKKyNkZWZpbmUgU1NJX1NUUl9URVNUCQkoMSA8PCAxNSkKKyNkZWZpbmUgU1NJX1NUUl9SQ0syVENLCQkoMSA8PCAxNCkKKyNkZWZpbmUgU1NJX1NUUl9SRlMyVEZTCQkoMSA8PCAxMykKKyNkZWZpbmUgU1NJX1NUUl9SWFNUQVRFKHgpCSgoKHgpICYgMHhmKSA8PCA4KQorI2RlZmluZSBTU0lfU1RSX1RYRDJSWEQJCSgxIDw8ICA3KQorI2RlZmluZSBTU0lfU1RSX1RDSzJSQ0sJCSgxIDw8ICA2KQorI2RlZmluZSBTU0lfU1RSX1RGUzJSRlMJCSgxIDw8ICA1KQorI2RlZmluZSBTU0lfU1RSX1RYU1RBVEUoeCkJKCgoeCkgJiAweGYpIDw8IDApCisKKyNkZWZpbmUgU1NJX1NPUgkJMHgzNAorI2RlZmluZSBTU0lfU09SX0NMS09GRgkJKDEgPDwgNikKKyNkZWZpbmUgU1NJX1NPUl9SWF9DTFIJCSgxIDw8IDUpCisjZGVmaW5lIFNTSV9TT1JfVFhfQ0xSCQkoMSA8PCA0KQorI2RlZmluZSBTU0lfU09SX0lOSVQJCSgxIDw8IDMpCisjZGVmaW5lIFNTSV9TT1JfV0FJVCh4KQkJKCgoeCkgJiAweDMpIDw8IDEpCisjZGVmaW5lIFNTSV9TT1JfV0FJVF9NQVNLCSgweDMgPDwgMSkKKyNkZWZpbmUgU1NJX1NPUl9TWU5SU1QJCSgxIDw8IDApCisKKyNkZWZpbmUgU1NJX1NBQ05UCTB4MzgKKyNkZWZpbmUgU1NJX1NBQ05UX0ZSRElWKHgpCSgoKHgpICYgMHgzZikgPDwgNSkKKyNkZWZpbmUgU1NJX1NBQ05UX1dSCQkoMSA8PCA0KQorI2RlZmluZSBTU0lfU0FDTlRfUkQJCSgxIDw8IDMpCisjZGVmaW5lIFNTSV9TQUNOVF9USUYJCSgxIDw8IDIpCisjZGVmaW5lIFNTSV9TQUNOVF9GVgkJKDEgPDwgMSkKKyNkZWZpbmUgU1NJX1NBQ05UX0FDOTdFTgkoMSA8PCAwKQorCisjZGVmaW5lIFNTSV9TQUNBREQJMHgzYworI2RlZmluZSBTU0lfU0FDREFUCTB4NDAKKyNkZWZpbmUgU1NJX1NBVEFHCTB4NDQKKyNkZWZpbmUgU1NJX1NUTVNLCTB4NDgKKyNkZWZpbmUgU1NJX1NSTVNLCTB4NGMKKyNkZWZpbmUgU1NJX1NBQ0NTVAkweDUwCisjZGVmaW5lIFNTSV9TQUNDRU4JMHg1NAorI2RlZmluZSBTU0lfU0FDQ0RJUwkweDU4CisKKy8qIFNTSSBjbG9jayBzb3VyY2VzICovCisjZGVmaW5lIElNWF9TU1BfU1lTX0NMSwkJMAorCisvKiBTU0kgYXVkaW8gZGl2aWRlcnMgKi8KKyNkZWZpbmUgSU1YX1NTSV9UWF9ESVZfMgkwCisjZGVmaW5lIElNWF9TU0lfVFhfRElWX1BTUgkxCisjZGVmaW5lIElNWF9TU0lfVFhfRElWX1BNCTIKKyNkZWZpbmUgSU1YX1NTSV9SWF9ESVZfMgkzCisjZGVmaW5lIElNWF9TU0lfUlhfRElWX1BTUgk0CisjZGVmaW5lIElNWF9TU0lfUlhfRElWX1BNCTUKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBpbXhfc3NpX3BjbV9kYWlbMl07CitleHRlcm4gc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gaW14X3NvY19wbGF0Zm9ybTsKKworI2RlZmluZSBEUlZfTkFNRSAiaW14LXNzaSIKKworc3RydWN0IGlteF9wY21fZG1hX3BhcmFtcyB7CisJaW50IGRtYTsKKwl1bnNpZ25lZCBsb25nIGRtYV9hZGRyOworCWludCBidXJzdHNpemU7Cit9OworCitzdHJ1Y3QgaW14X3NzaSB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYWM5N19kZXY7CisKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgaW14X2FjOTc7CisJc3RydWN0IGNsayAqY2xrOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgaXJxOworCWludCBmaXFfZW5hYmxlOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKwl2b2lkICgqYWM5N19yZXNldCkgKHN0cnVjdCBzbmRfYWM5NyAqYWM5Nyk7CisJdm9pZCAoKmFjOTdfd2FybV9yZXNldCkoc3RydWN0IHNuZF9hYzk3ICphYzk3KTsKKworCXN0cnVjdCBpbXhfcGNtX2RtYV9wYXJhbXMJZG1hX3BhcmFtc19yeDsKKwlzdHJ1Y3QgaW14X3BjbV9kbWFfcGFyYW1zCWRtYV9wYXJhbXNfdHg7CisKKwlpbnQgZW5hYmxlZDsKK307CisKK3N0cnVjdCBzbmRfc29jX3BsYXRmb3JtICppbXhfc3NpX2ZpcV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXN0cnVjdCBpbXhfc3NpICpzc2kpOwordm9pZCBpbXhfc3NpX2ZpcV9leGl0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBpbXhfc3NpICpzc2kpOworc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKmlteF9zc2lfZG1hX214Ml9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXN0cnVjdCBpbXhfc3NpICpzc2kpOworCitpbnQgc25kX2lteF9wY21fbW1hcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworaW50IGlteF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJc3RydWN0IHNuZF9wY20gKnBjbSk7Cit2b2lkIGlteF9wY21fZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKTsKKworLyoKKyAqIERvIG5vdCBjaGFuZ2UgdGhpcyBhcyB0aGUgRklRIGhhbmRsZXIgZGVwZW5kcyBvbiB0aGlzIHNpemUKKyAqLworI2RlZmluZSBJTVhfU1NJX0RNQUJVRl9TSVpFCSg2NCAqIDEwMjQpCisKKyNkZWZpbmUgRE1BX1JYRklGT19CVVJTVCAgICAgIDB4NAorI2RlZmluZSBETUFfVFhGSUZPX0JVUlNUICAgICAgMHg2CisKKyNlbmRpZiAvKiBfSU1YX1NTSV9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L214MV9teDItcGNtLmMgYi9zb3VuZC9zb2MvaW14L214MV9teDItcGNtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZmZmY2QuLjAwMDAwMDAKLS0tIGEvc291bmQvc29jL2lteC9teDFfbXgyLXBjbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDg4ICswLDAgQEAKLS8qCi0gKiBteDFfbXgyLXBjbS5jIC0tIEFMU0EgU29DIGludGVyZmFjZSBmb3IgRnJlZXNjYWxlIGkuTVgxeCwgaS5NWDJ4IENQVXMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOSBWaXN0YSBTaWxpY29uIFMuTC4KLSAqIEF1dGhvcjogSmF2aWVyIE1hcnRpbgotICogICAgICAgICBqYXZpZXIubWFydGluQHZpc3RhLXNpbGljb24uY29tCi0gKgotICogQmFzZWQgb24gbXhjLXBjbS5jIGJ5IExpYW0gR2lyZHdvb2QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvZG1hLW14MS1teDIuaD4KLQotI2luY2x1ZGUgIm14MV9teDItcGNtLmgiCi0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIG14MV9teDJfcGNtX2hhcmR3YXJlID0gewotCS5pbmZvCQkJPSAoU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKLQkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKLQkuYnVmZmVyX2J5dGVzX21heAk9IDMyICogMTAyNCwKLQkucGVyaW9kX2J5dGVzX21pbgk9IDY0LAotCS5wZXJpb2RfYnl0ZXNfbWF4CT0gOCAqIDEwMjQsCi0JLnBlcmlvZHNfbWluCQk9IDIsCi0JLnBlcmlvZHNfbWF4CQk9IDI1NSwKLQkuZmlmb19zaXplCQk9IDAsCi19OwotCi1zdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgewotCWludCBkbWFfY2g7Ci0JaW50IGFjdGl2ZTsKLQl1bnNpZ25lZCBpbnQgcGVyaW9kOwotCXVuc2lnbmVkIGludCBwZXJpb2RzOwotCWludCB0eF9zcGluOwotCXNwaW5sb2NrX3QgZG1hX2xvY2s7Ci0Jc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgKmRtYV9wYXJhbXM7Ci19OwotCi0KLS8qKgotICAqIFRoaXMgZnVuY3Rpb24gc3RvcHMgdGhlIGN1cnJlbnQgZG1hIHRyYW5zZmVyIGZvciBwbGF5YmFjawotICAqIGFuZCBjbGVhcnMgdGhlIGRtYSBwb2ludGVycy4KLSAgKgotICAqIEBwYXJhbQlzdWJzdHJlYW0JcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIG9mIHRoZSBjdXJyZW50IHN0cmVhbS4KLSAgKgotICAqLwotc3RhdGljIGludCBhdWRpb19zdG9wX2RtYShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBydGQtPmRtYV9sb2NrLCBmbGFncyk7Ci0KLQlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKLQotCXBydGQtPmFjdGl2ZSA9IDA7Ci0JcHJ0ZC0+cGVyaW9kID0gMDsKLQlwcnRkLT5wZXJpb2RzID0gMDsKLQotCS8qIHRoaXMgc3RvcHMgdGhlIGRtYSBjaGFubmVsIGFuZCBjbGVhcnMgdGhlIGJ1ZmZlciBwdHJzICovCi0KLQlpbXhfZG1hX2Rpc2FibGUocHJ0ZC0+ZG1hX2NoKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBydGQtPmRtYV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBuZXcgYXVkaW8gYmxvY2sgbmVlZHMgdG8gYmUKLSAgKiB0cmFuc2ZlcnJlZCB0byB0aGUgY29kZWMuIFRoZSBmdW5jdGlvbiByZWNlaXZlcyB0aGUgYWRkcmVzcyBhbmQgdGhlIHNpemUKLSAgKiBvZiB0aGUgbmV3IGJsb2NrIGFuZCBzdGFydCBhIG5ldyBETUEgdHJhbnNmZXIuCi0gICoKLSAgKiBAcGFyYW0Jc3Vic3RyZWFtCXBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgY3VycmVudCBzdHJlYW0uCi0gICoKLSAgKi8KLXN0YXRpYyBpbnQgZG1hX25ld19wZXJpb2Qoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9ICBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCBkbWFfc2l6ZTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCWludCByZXQgPSAwOwotCWRtYV9hZGRyX3QgbWVtX2FkZHI7Ci0JdW5zaWduZWQgaW50IGRldl9hZGRyOwotCi0JaWYgKHBydGQtPmFjdGl2ZSkgewotCQlkbWFfc2l6ZSA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7Ci0JCW9mZnNldCA9IGRtYV9zaXplICogcHJ0ZC0+cGVyaW9kOwotCi0JCXByX2RlYnVnKCIlczogcGVyaW9kICglZCkgb3V0IG9mICglZClcbiIsIF9fZnVuY19fLAotCQkJcHJ0ZC0+cGVyaW9kLAotCQkJcnVudGltZS0+cGVyaW9kcyk7Ci0JCXByX2RlYnVnKCJwZXJpb2Rfc2l6ZSAlZCBmcmFtZXNcbiBvZmZzZXQgJWQgYnl0ZXNcbiIsCi0JCQkodW5zaWduZWQgaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLAotCQkJb2Zmc2V0KTsKLQkJcHJfZGVidWcoImRtYV9zaXplICVkIGJ5dGVzXG4iLCBkbWFfc2l6ZSk7Ci0KLQkJc25kX0JVR19PTihkbWFfc2l6ZSA+IG14MV9teDJfcGNtX2hhcmR3YXJlLnBlcmlvZF9ieXRlc19tYXgpOwotCi0JCW1lbV9hZGRyID0gKGRtYV9hZGRyX3QpKHJ1bnRpbWUtPmRtYV9hZGRyICsgb2Zmc2V0KTsKLQkJZGV2X2FkZHIgPSBwcnRkLT5kbWFfcGFyYW1zLT5wZXJfYWRkcmVzczsKLQkJcHJfZGVidWcoIiVzOiBtZW1fYWRkciBpcyAleFxuIGRldl9hZGRyIGlzICV4XG4iLAotCQkJCSBfX2Z1bmNfXywgbWVtX2FkZHIsIGRldl9hZGRyKTsKLQotCQlyZXQgPSBpbXhfZG1hX3NldHVwX3NpbmdsZShwcnRkLT5kbWFfY2gsIG1lbV9hZGRyLAotCQkJCQlkbWFfc2l6ZSwgZGV2X2FkZHIsCi0JCQkJCXBydGQtPmRtYV9wYXJhbXMtPnRyYW5zZmVyX3R5cGUpOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciAlZCBjb25maWd1cmluZyBETUFcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCWlteF9kbWFfZW5hYmxlKHBydGQtPmRtYV9jaCk7Ci0KLQkJcHJfZGVidWcoIiVzOiB0cmFuc2ZlciBlbmFibGVkXG5tZW1fYWRkciA9ICV4XG4iLAotCQkJX19mdW5jX18sICh1bnNpZ25lZCBpbnQpIG1lbV9hZGRyKTsKLQkJcHJfZGVidWcoImRldl9hZGRyID0gJXhcbmRtYV9zaXplID0gJWRcbiIsCi0JCQkodW5zaWduZWQgaW50KSBkZXZfYWRkciwgZG1hX3NpemUpOwotCi0JCXBydGQtPnR4X3NwaW4gPSAxOyAvKiBGR0EgbGl0dGxlIHRyaWNrIHRvIHJldHJpZXZlIERNQSBwb3MgKi8KLQkJcHJ0ZC0+cGVyaW9kKys7Ci0JCXBydGQtPnBlcmlvZCAlPSBydW50aW1lLT5wZXJpb2RzOwotICAgIH0KLQlyZXR1cm4gcmV0OwotfQotCi0KLS8qKgotICAqIFRoaXMgaXMgYSBjYWxsYmFjayB3aGljaCB3aWxsIGJlIGNhbGxlZAotICAqIHdoZW4gYSBUWCB0cmFuc2ZlciBmaW5pc2hlcy4gVGhlIGNhbGwgb2NjdXJzCi0gICogaW4gaW50ZXJydXB0IGNvbnRleHQuCi0gICoKLSAgKiBAcGFyYW0JZGF0CXBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgY3VycmVudCBzdHJlYW0uCi0gICoKLSAgKi8KLXN0YXRpYyB2b2lkIGF1ZGlvX2RtYV9pcnEoaW50IGNoYW5uZWwsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKLQlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQ7Ci0JdW5zaWduZWQgaW50IGRtYV9zaXplOwotCXVuc2lnbmVkIGludCBwcmV2aW91c19wZXJpb2Q7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLQotCXN1YnN0cmVhbSA9IGRhdGE7Ci0JcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXByZXZpb3VzX3BlcmlvZCAgPSBwcnRkLT5wZXJpb2RzOwotCWRtYV9zaXplID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKLQlvZmZzZXQgPSBkbWFfc2l6ZSAqIHByZXZpb3VzX3BlcmlvZDsKLQotCXBydGQtPnR4X3NwaW4gPSAwOwotCXBydGQtPnBlcmlvZHMrKzsKLQlwcnRkLT5wZXJpb2RzICU9IHJ1bnRpbWUtPnBlcmlvZHM7Ci0KLQlwcl9kZWJ1ZygiJXM6IGlycSBwZXIgJWQgb2Zmc2V0ICV4XG4iLCBfX2Z1bmNfXywgcHJ0ZC0+cGVyaW9kcywgb2Zmc2V0KTsKLQotCS8qCi0JICAqIElmIHdlIGFyZSBnZXR0aW5nIGEgY2FsbGJhY2sgZm9yIGFuIGFjdGl2ZSBzdHJlYW0gdGhlbiB3ZSBpbmZvcm0KLQkgICogdGhlIFBDTSBtaWRkbGUgbGF5ZXIgd2UndmUgZmluaXNoZWQgYSBwZXJpb2QKLQkgICovCi0JaWYgKHBydGQtPmFjdGl2ZSkKLQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwotCi0JLyoKLQkgICogVHJpZyBuZXh0IERNQSB0cmFuc2ZlcgotCSAgKi8KLQlkbWFfbmV3X3BlcmlvZChzdWJzdHJlYW0pOwotfQotCi0vKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIGhhcmR3YXJlIHRvIGFsbG93IGF1ZGlvCi0gICogcGxheWJhY2sgb3BlcmF0aW9ucy4gSXQgaXMgY2FsbGVkIGJ5IEFMU0EgZnJhbWV3b3JrLgotICAqCi0gICogQHBhcmFtCXN1YnN0cmVhbQlwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGN1cnJlbnQgc3RyZWFtLgotICAqCi0gICogQHJldHVybiAgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuCi0gICovCi1zdGF0aWMgaW50Ci1zbmRfbXgxX214Ml9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSAgc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLQotCXBydGQtPnBlcmlvZCA9IDA7Ci0JcHJ0ZC0+cGVyaW9kcyA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteDFfbXgyX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0Jc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKLQkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBmYWlsZWQgdG8gbWFsbG9jIHBjbSBwYWdlcyBcbiIsCi0JCV9fZnVuY19fLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXByX2RlYnVnKCIlczogc25kX2lteDFfbXgyX2F1ZGlvX2h3X3BhcmFtcyBydW50aW1lLT5kbWFfYWRkciAweCgleClcbiIsCi0JCV9fZnVuY19fLCAodW5zaWduZWQgaW50KXJ1bnRpbWUtPmRtYV9hZGRyKTsKLQlwcl9kZWJ1ZygiJXM6IHNuZF9pbXgxX214Ml9hdWRpb19od19wYXJhbXMgcnVudGltZS0+ZG1hX2FyZWEgMHgoJXgpXG4iLAotCQlfX2Z1bmNfXywgKHVuc2lnbmVkIGludClydW50aW1lLT5kbWFfYXJlYSk7Ci0JcHJfZGVidWcoIiVzOiBzbmRfaW14MV9teDJfYXVkaW9faHdfcGFyYW1zIHJ1bnRpbWUtPmRtYV9ieXRlcyAweCgleClcbiIsCi0JCV9fZnVuY19fLCAodW5zaWduZWQgaW50KXJ1bnRpbWUtPmRtYV9ieXRlcyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG14MV9teDJfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0KLQlpbXhfZG1hX2ZyZWUocHJ0ZC0+ZG1hX2NoKTsKLQotCXNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14MV9teDJfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCi17Ci0Jc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJldCA9IDA7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JCXBydGQtPnR4X3NwaW4gPSAwOwotCQkvKiByZXF1ZXN0ZWQgc3RyZWFtIHN0YXJ0dXAgKi8KLQkJcHJ0ZC0+YWN0aXZlID0gMTsKLQkJcHJfZGVidWcoIiVzOiBzdGFydGluZyBkbWFfbmV3X3BlcmlvZFxuIiwgX19mdW5jX18pOwotCQlyZXQgPSBkbWFfbmV3X3BlcmlvZChzdWJzdHJlYW0pOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JCS8qIHJlcXVlc3RlZCBzdHJlYW0gc2h1dGRvd24gKi8KLQkJcHJfZGVidWcoIiVzOiBzdG9wcGluZyBkbWEgdHJhbnNmZXJcbiIsIF9fZnVuY19fKTsKLQkJcmV0ID0gYXVkaW9fc3RvcF9kbWEoc3Vic3RyZWFtKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNuZF9wY21fdWZyYW1lc190Ci1teDFfbXgyX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwOwotCi0JLyogdHhfc3BpbiB2YWx1ZSBpcyB1c2VkIGhlcmUgdG8gY2hlY2sgaWYgYSB0cmFuc2ZlciBpcyBhY3RpdmUgKi8KLQlpZiAocHJ0ZC0+dHhfc3BpbikgewotCQlvZmZzZXQgPSAocnVudGltZS0+cGVyaW9kX3NpemUgKiAocHJ0ZC0+cGVyaW9kcykpICsKLQkJCQkJCShydW50aW1lLT5wZXJpb2Rfc2l6ZSA+PiAxKTsKLQkJaWYgKG9mZnNldCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJCW9mZnNldCA9IHJ1bnRpbWUtPnBlcmlvZF9zaXplID4+IDE7Ci0JfSBlbHNlIHsKLQkJb2Zmc2V0ID0gKHJ1bnRpbWUtPnBlcmlvZF9zaXplICogKHBydGQtPnBlcmlvZHMpKTsKLQkJaWYgKG9mZnNldCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJCW9mZnNldCA9IDA7Ci0JfQotCXByX2RlYnVnKCIlczogcG9pbnRlciBvZmZzZXQgJXhcbiIsIF9fZnVuY19fLCBvZmZzZXQpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIGludCBteDFfbXgyX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkOwotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyAqZG1hX2RhdGEgPSBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGE7Ci0JaW50IHJldDsKLQotCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmbXgxX214Ml9wY21faGFyZHdhcmUpOwotCi0JcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwKLQkJCQkJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcHJ0ZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSksIEdGUF9LRVJORUwpOwotCWlmIChwcnRkID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gcHJ0ZDsKLQotCWlmICghZG1hX2RhdGEpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcHJ0ZC0+ZG1hX3BhcmFtcyA9IGRtYV9kYXRhOwotCi0JcHJfZGVidWcoIiVzOiBSZXF1ZXN0aW5nIGRtYSBjaGFubmVsICglcylcbiIsIF9fZnVuY19fLAotCQkJCQkJcHJ0ZC0+ZG1hX3BhcmFtcy0+bmFtZSk7Ci0JcmV0ID0gaW14X2RtYV9yZXF1ZXN0X2J5X3ByaW8ocHJ0ZC0+ZG1hX3BhcmFtcy0+bmFtZSwgRE1BX1BSSU9fSElHSCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciAlZCByZXF1ZXN0aW5nIGRtYSBjaGFubmVsXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlwcnRkLT5kbWFfY2ggPSByZXQ7Ci0JaW14X2RtYV9jb25maWdfYnVyc3RsZW4ocHJ0ZC0+ZG1hX2NoLAotCQkJCXBydGQtPmRtYV9wYXJhbXMtPndhdGVybWFya19sZXZlbCk7Ci0KLQlyZXQgPSBpbXhfZG1hX2NvbmZpZ19jaGFubmVsKHBydGQtPmRtYV9jaCwKLQkJCXBydGQtPmRtYV9wYXJhbXMtPnBlcl9jb25maWcsCi0JCQlwcnRkLT5kbWFfcGFyYW1zLT5tZW1fY29uZmlnLAotCQkJcHJ0ZC0+ZG1hX3BhcmFtcy0+ZXZlbnRfaWQsIDApOwotCi0JaWYgKHJldCkgewotCQlwcl9kZWJ1ZyhLRVJOX0VSUiAiRXJyb3IgJWQgY29uZmlndXJpbmcgZG1hIGNoYW5uZWwgJWRcbiIsCi0JCQlyZXQsIHBydGQtPmRtYV9jaCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcHJfZGVidWcoIiVzOiBTZXR0aW5nIHR4IGRtYSBjYWxsYmFjayBmdW5jdGlvblxuIiwgX19mdW5jX18pOwotCXJldCA9IGlteF9kbWFfc2V0dXBfaGFuZGxlcnMocHJ0ZC0+ZG1hX2NoLAotCQkJCWF1ZGlvX2RtYV9pcnEsIE5VTEwsCi0JCQkJKHZvaWQgKilzdWJzdHJlYW0pOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgJWQgc2V0dGluZyBkbWEgY2FsbGJhY2sgZnVuY3Rpb25cbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiAwOwotCi0gb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbXgxX214Ml9wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0KLQlrZnJlZShwcnRkKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14MV9teDJfcGNtX21tYXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlyZXR1cm4gZG1hX21tYXBfd3JpdGVjb21iaW5lKHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXYsIHZtYSwKLQkJCQkgICAgIHJ1bnRpbWUtPmRtYV9hcmVhLAotCQkJCSAgICAgcnVudGltZS0+ZG1hX2FkZHIsCi0JCQkJICAgICBydW50aW1lLT5kbWFfYnl0ZXMpOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIG14MV9teDJfcGNtX29wcyA9IHsKLQkub3BlbgkJPSBteDFfbXgyX3BjbV9vcGVuLAotCS5jbG9zZQkJPSBteDFfbXgyX3BjbV9jbG9zZSwKLQkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCi0JLmh3X3BhcmFtcwk9IG14MV9teDJfcGNtX2h3X3BhcmFtcywKLQkuaHdfZnJlZQk9IG14MV9teDJfcGNtX2h3X2ZyZWUsCi0JLnByZXBhcmUJPSBzbmRfbXgxX214Ml9wcmVwYXJlLAotCS50cmlnZ2VyCT0gbXgxX214Ml9wY21fdHJpZ2dlciwKLQkucG9pbnRlcgk9IG14MV9teDJfcGNtX3BvaW50ZXIsCi0JLm1tYXAJCT0gbXgxX214Ml9wY21fbW1hcCwKLX07Ci0KLXN0YXRpYyB1NjQgbXgxX214Ml9wY21fZG1hbWFzayA9IDB4ZmZmZmZmZmY7Ci0KLXN0YXRpYyBpbnQgbXgxX214Ml9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtKQotewotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOwotCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKLQlzaXplX3Qgc2l6ZSA9IG14MV9teDJfcGNtX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXg7Ci0JYnVmLT5kZXYudHlwZSA9IFNORFJWX0RNQV9UWVBFX0RFVjsKLQlidWYtPmRldi5kZXYgPSBwY20tPmNhcmQtPmRldjsKLQlidWYtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0KLQkvKiBSZXNlcnZlIHVuY2FjaGVkLWJ1ZmZlcmVkIG1lbW9yeSBhcmVhIGZvciBETUEgKi8KLQlidWYtPmFyZWEgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKHBjbS0+Y2FyZC0+ZGV2LCBzaXplLAotCQkJCQkgICAmYnVmLT5hZGRyLCBHRlBfS0VSTkVMKTsKLQotCXByX2RlYnVnKCIlczogcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcjogYXJlYT0lcCwgYWRkcj0lcCwgc2l6ZT0lZFxuIiwKLQkJX19mdW5jX18sICh2b2lkICopIGJ1Zi0+YXJlYSwgKHZvaWQgKikgYnVmLT5hZGRyLCBzaXplKTsKLQotCWlmICghYnVmLT5hcmVhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWJ1Zi0+Ynl0ZXMgPSBzaXplOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBteDFfbXgyX3BjbV9mcmVlX2RtYV9idWZmZXJzKHN0cnVjdCBzbmRfcGNtICpwY20pCi17Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07Ci0Jc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWY7Ci0JaW50IHN0cmVhbTsKLQotCWZvciAoc3RyZWFtID0gMDsgc3RyZWFtIDwgMjsgc3RyZWFtKyspIHsKLQkJc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOwotCQlpZiAoIXN1YnN0cmVhbSkKLQkJCWNvbnRpbnVlOwotCi0JCWJ1ZiA9ICZzdWJzdHJlYW0tPmRtYV9idWZmZXI7Ci0JCWlmICghYnVmLT5hcmVhKQotCQkJY29udGludWU7Ci0KLQkJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKHBjbS0+Y2FyZC0+ZGV2LCBidWYtPmJ5dGVzLAotCQkJCSAgICAgIGJ1Zi0+YXJlYSwgYnVmLT5hZGRyKTsKLQkJYnVmLT5hcmVhID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbXgxX214Ml9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCi0Jc3RydWN0IHNuZF9wY20gKnBjbSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghY2FyZC0+ZGV2LT5kbWFfbWFzaykKLQkJY2FyZC0+ZGV2LT5kbWFfbWFzayA9ICZteDFfbXgyX3BjbV9kbWFtYXNrOwotCWlmICghY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzaykKLQkJY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmY7Ci0KLQlpZiAoZGFpLT5wbGF5YmFjay5jaGFubmVsc19taW4pIHsKLQkJcmV0ID0gbXgxX214Ml9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCi0JCQlTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKLQkJcHJfZGVidWcoIiVzOiBwcmVhbGxvY2F0ZSBwbGF5YmFjayBidWZmZXJcbiIsIF9fZnVuY19fKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KLQotCWlmIChkYWktPmNhcHR1cmUuY2hhbm5lbHNfbWluKSB7Ci0JCXJldCA9IG14MV9teDJfcGNtX3ByZWFsbG9jYXRlX2RtYV9idWZmZXIocGNtLAotCQkJU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKTsKLQkJcHJfZGVidWcoIiVzOiBwcmVhbGxvY2F0ZSBjYXB0dXJlIGJ1ZmZlclxuIiwgX19mdW5jX18pOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfQotIG91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBteDFfbXgyX3NvY19wbGF0Zm9ybSA9IHsKLQkubmFtZQkJPSAibXgxX214Mi1hdWRpbyIsCi0JLnBjbV9vcHMgCT0gJm14MV9teDJfcGNtX29wcywKLQkucGNtX25ldwk9IG14MV9teDJfcGNtX25ldywKLQkucGNtX2ZyZWUJPSBteDFfbXgyX3BjbV9mcmVlX2RtYV9idWZmZXJzLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKG14MV9teDJfc29jX3BsYXRmb3JtKTsKLQotc3RhdGljIGludCBfX2luaXQgbXgxX214Ml9zb2NfcGxhdGZvcm1faW5pdCh2b2lkKQotewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX3BsYXRmb3JtKCZteDFfbXgyX3NvY19wbGF0Zm9ybSk7Ci19Ci1tb2R1bGVfaW5pdChteDFfbXgyX3NvY19wbGF0Zm9ybV9pbml0KTsKLQotc3RhdGljIHZvaWQgX19leGl0IG14MV9teDJfc29jX3BsYXRmb3JtX2V4aXQodm9pZCkKLXsKLQlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJm14MV9teDJfc29jX3BsYXRmb3JtKTsKLX0KLW1vZHVsZV9leGl0KG14MV9teDJfc29jX3BsYXRmb3JtX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJKYXZpZXIgTWFydGluLCBqYXZpZXIubWFydGluQHZpc3RhLXNpbGljb24uY29tIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBpLk1YMngsIGkuTVgxeCBQQ00gRE1BIG1vZHVsZSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teDFfbXgyLXBjbS5oIGIvc291bmQvc29jL2lteC9teDFfbXgyLXBjbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTUyODEwLi4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9pbXgvbXgxX214Mi1wY20uaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiBteDFfbXgyLXBjbS5oIDotIEFTb0MgcGxhdGZvcm0gaGVhZGVyIGZvciBGcmVlc2NhbGUgaS5NWDF4LCBpLk1YMngKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX01YMV9NWDJfUENNX0gKLSNkZWZpbmUgX01YMV9NWDJfUENNX0gKLQotLyogRE1BIGluZm9ybWF0aW9uIGZvciBteDFfbXgyIHBsYXRmb3JtcyAqLwotc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgewotCWNoYXIgKm5hbWU7CQkJLyogc3RyZWFtIGlkZW50aWZpZXIgKi8KLQl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfdHlwZTsJLyogUkVBRCBvciBXUklURSBETUEgdHJhbnNmZXIgKi8KLQlkbWFfYWRkcl90IHBlcl9hZGRyZXNzOwkJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBTU0kgZmlmbyAqLwotCWludCBldmVudF9pZDsJCQkvKiBmaXhlZCBETUEgbnVtYmVyIGZvciBTU0kgZmlmbyAqLwotCWludCB3YXRlcm1hcmtfbGV2ZWw7CQkvKiBTU0kgZmlmbyB3YXRlcm1hcmsgbGV2ZWwgKi8KLQlpbnQgcGVyX2NvbmZpZzsJCQkvKiBETUEgQ29uZmlnIGZsYWdzIGZvciBwZXJpcGhlcmFsICovCi0JaW50IG1lbV9jb25maWc7CQkJLyogRE1BIENvbmZpZyBmbGFncyBmb3IgUkFNICovCi0gfTsKLQotLyogcGxhdGZvcm0gZGF0YSAqLwotZXh0ZXJuIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtIG14MV9teDJfc29jX3BsYXRmb3JtOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvbXgyN3Zpc193bTg5NzQuYyBiL3NvdW5kL3NvYy9pbXgvbXgyN3Zpc193bTg5NzQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdkMmEyNC4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvaW14L214Mjd2aXNfd204OTc0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTggKzAsMCBAQAotLyoKLSAqIG14Mjd2aXNfd204OTc0LmMgIC0tICBTb0MgYXVkaW8gZm9yIG14Mjd2aXMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOSBWaXN0YSBTaWxpY29uIFMuTC4KLSAqIEF1dGhvcjogSmF2aWVyIE1hcnRpbgotICogICAgICAgICBqYXZpZXIubWFydGluQHZpc3RhLXNpbGljb24uY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgotCi0KLSNpbmNsdWRlICIuLi9jb2RlY3Mvd204OTc0LmgiCi0jaW5jbHVkZSAibXgxX214Mi1wY20uaCIKLSNpbmNsdWRlICJteGMtc3NpLmgiCi0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC5oPgotCi0jZGVmaW5lIElHTk9SRURfQVJHIDAKLQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBteDI3dmlzOwotCi0vKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGNvbm5lY3RzIFNTSTEgKEhQQ1IxKSBhcyBzbGF2ZSB0bwotICAqIFNTSTEgZXh0ZXJuYWwgc2lnbmFscyAoUFBDUjEpCi0gICogQXMgc2xhdmUsIEhQQ1IxIG11c3Qgc2V0IFRGU0RJUiBhbmQgVENMS0RJUiBhcyBpbnB1dHMgZnJvbQotICAqIHBvcnQgNAotICAqLwotdm9pZCBhdWRtdXhfY29ubmVjdF8xXzQodm9pZCkKLXsKLQlwcl9kZWJ1ZygiQVVETVVYOiBub3JtYWwgb3BlcmF0aW9uIG1vZGVcbiIpOwotCS8qIFJlc2V0IEhQQ1IxIGFuZCBQUENSMSAqLwotCi0JREFNX0hQQ1IxID0gMHgwMDAwMDAwMDsKLQlEQU1fUFBDUjEgPSAweDAwMDAwMDAwOwotCi0JLyogc2V0IHRvIHN5bmNocm9ub3VzICovCi0JREFNX0hQQ1IxIHw9IEFVRE1VWF9IUENSX1NZTjsKLQlEQU1fUFBDUjEgfD0gQVVETVVYX1BQQ1JfU1lOOwotCi0KLQkvKiBzZXQgUnggc291cmNlcyAxIDwtLT4gNCAqLwotCURBTV9IUENSMSB8PSBBVURNVVhfSFBDUl9SWERTRUwoMyk7IC8qIHBvcnQgNCAqLwotCURBTV9QUENSMSB8PSBBVURNVVhfUFBDUl9SWERTRUwoMCk7IC8qIHBvcnQgMSAqLwotCi0JLyogc2V0IFR4IGZyYW1lIGFuZCBDbG9jayBkaXJlY3Rpb24gYW5kIHNvdXJjZSAgNCAtLT4gMSBvdXRwdXQgKi8KLQlEQU1fSFBDUjEgfD0gQVVETVVYX0hQQ1JfVEZTRElSIHwgQVVETVVYX0hQQ1JfVENMS0RJUjsKLQlEQU1fSFBDUjEgfD0gQVVETVVYX0hQQ1JfVEZDU0VMKDMpOyAvKiBUeERTIGFuZCBUeENjbGsgZnJvbSBwb3J0IDQgKi8KLQotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBteDI3dmlzX2hpZmlfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0JdW5zaWduZWQgaW50IHBsbF9vdXQgPSAwLCBiY2xrID0gMCwgZm10ID0gMCwgbWNsayA9IDA7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKgotCSAqIFRoZSBXTTg5NzQgaXMgYmV0dGVyIGF0IGdlbmVyYXRpbmcgYWNjdXJhdGUgYXVkaW8gY2xvY2tzIHRoYW4gdGhlCi0JICogTVgyNyBTU0kgY29udHJvbGxlciwgc28gd2Ugd2lsbCB1c2UgaXQgYXMgbWFzdGVyIHdoZW4gd2UgY2FuLgotCSAqLwotCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgewotCWNhc2UgODAwMDoKLQkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJbWNsayA9IFdNODk3NF9NQ0xLRElWXzEyOwotCQlwbGxfb3V0ID0gMjQ1NzYwMDA7Ci0JCWJyZWFrOwotCWNhc2UgMTYwMDA6Ci0JCWZtdCA9IFNORF9TT0NfREFJRk1UX0NCTV9DRk07Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSA0ODAwMDoKLQkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJYmNsayA9IFdNODk3NF9CQ0xLRElWXzQ7Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSA5NjAwMDoKLQkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJYmNsayA9IFdNODk3NF9CQ0xLRElWXzI7Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSAxMTAyNToKLQkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJYmNsayA9IFdNODk3NF9CQ0xLRElWXzE2OwotCQlwbGxfb3V0ID0gMTEyODk2MDA7Ci0JCWJyZWFrOwotCWNhc2UgMjIwNTA6Ci0JCWZtdCA9IFNORF9TT0NfREFJRk1UX0NCTV9DRk07Ci0JCWJjbGsgPSBXTTg5NzRfQkNMS0RJVl84OwotCQlwbGxfb3V0ID0gMTEyODk2MDA7Ci0JCWJyZWFrOwotCWNhc2UgNDQxMDA6Ci0JCWZtdCA9IFNORF9TT0NfREFJRk1UX0NCTV9DRk07Ci0JCWJjbGsgPSBXTTg5NzRfQkNMS0RJVl80OwotCQltY2xrID0gV004OTc0X01DTEtESVZfMjsKLQkJcGxsX291dCA9IDExMjg5NjAwOwotCQlicmVhazsKLQljYXNlIDg4MjAwOgotCQlmbXQgPSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOwotCQliY2xrID0gV004OTc0X0JDTEtESVZfMjsKLQkJcGxsX291dCA9IDExMjg5NjAwOwotCQlicmVhazsKLQl9Ci0KLQkvKiBzZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSBjb2RlY19kYWktPm9wcy0+c2V0X2ZtdChjb2RlY19kYWksCi0JCVNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05CX0lGIHwKLQkJU05EX1NPQ19EQUlGTVRfU1lOQyB8IGZtdCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBmcm9tIGNvZGVjIERBSSBjb25maWd1cmF0aW9uXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBzZXQgY3B1IERBSSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gY3B1X2RhaS0+b3BzLT5zZXRfZm10KGNwdV9kYWksCi0JCVNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05CX05GIHwKLQkJU05EX1NPQ19EQUlGTVRfU1lOQyB8IGZtdCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBmcm9tIGNwdSBEQUkgY29uZmlndXJhdGlvblxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogUHV0IERDIGZpZWxkIG9mIFNUQ0NSIHRvIDEgKG5vdCB6ZXJvKSAqLwotCXJldCA9IGNwdV9kYWktPm9wcy0+c2V0X3RkbV9zbG90KGNwdV9kYWksIDAsIDIpOwotCi0JLyogc2V0IHRoZSBTU0kgc3lzdGVtIGNsb2NrIGFzIGlucHV0ICovCi0JcmV0ID0gY3B1X2RhaS0+b3BzLT5zZXRfc3lzY2xrKGNwdV9kYWksIElNWF9TU1BfU1lTX0NMSywgMCwKLQkJU05EX1NPQ19DTE9DS19JTik7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3aGVuIHNldHRpbmcgc3lzdGVtIFNTSSBjbGtcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIHNldCBjb2RlYyBCQ0xLIGRpdmlzaW9uIGZvciBzYW1wbGUgcmF0ZSAqLwotCXJldCA9IGNvZGVjX2RhaS0+b3BzLT5zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV004OTc0X0JDTEtESVYsIGJjbGspOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igd2hlbiBzZXR0aW5nIEJDTEsgZGl2aXNpb25cbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCi0JLyogY29kZWMgUExMIGlucHV0IGlzIDI1IE1IeiAqLwotCXJldCA9IGNvZGVjX2RhaS0+b3BzLT5zZXRfcGxsKGNvZGVjX2RhaSwgSUdOT1JFRF9BUkcsIElHTk9SRURfQVJHLAotCQkJCQkyNTAwMDAwMCwgcGxsX291dCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3aGVuIHNldHRpbmcgUExMIGlucHV0XG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKnNldCBjb2RlYyBNQ0xLIGRpdmlzaW9uIGZvciBzYW1wbGUgcmF0ZSAqLwotCXJldCA9IGNvZGVjX2RhaS0+b3BzLT5zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV004OTc0X01DTEtESVYsIG1jbGspOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igd2hlbiBzZXR0aW5nIE1DTEsgZGl2aXNpb25cbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14Mjd2aXNfaGlmaV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7Ci0KLQkvKiBkaXNhYmxlIHRoZSBQTEwgKi8KLQlyZXR1cm4gY29kZWNfZGFpLT5vcHMtPnNldF9wbGwoY29kZWNfZGFpLCBJR05PUkVEX0FSRywgSUdOT1JFRF9BUkcsCi0JCQkJICAgICAgIDAsIDApOwotfQotCi0vKgotICogbXgyN3ZpcyBXTTg5NzQgSGlGaSBEQUkgb3BzZXJhdGlvbnMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgbXgyN3Zpc19oaWZpX29wcyA9IHsKLQkuaHdfcGFyYW1zID0gbXgyN3Zpc19oaWZpX2h3X3BhcmFtcywKLQkuaHdfZnJlZSA9IG14Mjd2aXNfaGlmaV9od19mcmVlLAotfTsKLQotCi1zdGF0aWMgaW50IG14Mjd2aXNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXgyN3Zpc19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteDI3dmlzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlyZXQgPSBnZXRfc3NpX2NsaygwLCAmcGRldi0+ZGV2KTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbnQgZ2V0IHNzaSBjbG9ja1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXgyN3Zpc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlwdXRfc3NpX2NsaygwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIG14Mjd2aXNfZGFpW10gPSB7Ci17IC8qIEhpZmkgUGxheWJhY2sqLwotCS5uYW1lID0gIldNODk3NCIsCi0JLnN0cmVhbV9uYW1lID0gIldNODk3NCBIaUZpIiwKLQkuY3B1X2RhaSA9ICZpbXhfc3NpX3BjbV9kYWlbMF0sCi0JLmNvZGVjX2RhaSA9ICZ3bTg5NzRfZGFpLAotCS5vcHMgPSAmbXgyN3Zpc19oaWZpX29wcywKLX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBteDI3dmlzID0gewotCS5uYW1lID0gIm14Mjd2aXMiLAotCS5wbGF0Zm9ybSA9ICZteDFfbXgyX3NvY19wbGF0Zm9ybSwKLQkucHJvYmUgPSBteDI3dmlzX3Byb2JlLAotCS5yZW1vdmUgPSBteDI3dmlzX3JlbW92ZSwKLQkuc3VzcGVuZF9wcmUgPSBteDI3dmlzX3N1c3BlbmQsCi0JLnJlc3VtZV9wb3N0ID0gbXgyN3Zpc19yZXN1bWUsCi0JLmRhaV9saW5rID0gbXgyN3Zpc19kYWksCi0JLm51bV9saW5rcyA9IEFSUkFZX1NJWkUobXgyN3Zpc19kYWkpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBteDI3dmlzX3NuZF9kZXZkYXRhID0gewotCS5jYXJkID0gJm14Mjd2aXMsCi0JLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtODk3NCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpteDI3dmlzX3NuZF9kZXZpY2U7Ci0KLS8qIFRlbXBvcmFsIGRlZmluaXRpb24gb2YgYm9hcmQgc3BlY2lmaWMgYmVoYXZpb3VyICovCi12b2lkIGdwaW9fc3NpX2FjdGl2ZShpbnQgc3NpX251bSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCXVuc2lnbmVkIGludCBzc2kxX3BpbnNbXSA9IHsKLQkJUEMyMF9QRl9TU0kxX0ZTLAotCQlQQzIxX1BGX1NTSTFfUlhELAotCQlQQzIyX1BGX1NTSTFfVFhELAotCQlQQzIzX1BGX1NTSTFfQ0xLLAotCX07Ci0JdW5zaWduZWQgaW50IHNzaTJfcGluc1tdID0gewotCQlQQzI0X1BGX1NTSTJfRlMsCi0JCVBDMjVfUEZfU1NJMl9SWEQsCi0JCVBDMjZfUEZfU1NJMl9UWEQsCi0JCVBDMjdfUEZfU1NJMl9DTEssCi0JfTsKLQlpZiAoc3NpX251bSA9PSAwKQotCQlyZXQgPSBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKHNzaTFfcGlucywKLQkJCQlBUlJBWV9TSVpFKHNzaTFfcGlucyksICJVU0IgT1RHIik7Ci0JZWxzZQotCQlyZXQgPSBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKHNzaTJfcGlucywKLQkJCQlBUlJBWV9TSVpFKHNzaTJfcGlucyksICJVU0IgT1RHIik7Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZXF1ZXN0aW5nIHNzaSAleCBwaW5zXG4iLCBzc2lfbnVtKTsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBteDI3dmlzX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JbXgyN3Zpc19zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7Ci0JaWYgKCFteDI3dmlzX3NuZF9kZXZpY2UpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEobXgyN3Zpc19zbmRfZGV2aWNlLCAmbXgyN3Zpc19zbmRfZGV2ZGF0YSk7Ci0JbXgyN3Zpc19zbmRfZGV2ZGF0YS5kZXYgPSAmbXgyN3Zpc19zbmRfZGV2aWNlLT5kZXY7Ci0JcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChteDI3dmlzX3NuZF9kZXZpY2UpOwotCi0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIkFTb0M6IFBsYXRmb3JtIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Ci0JCXBsYXRmb3JtX2RldmljZV9wdXQobXgyN3Zpc19zbmRfZGV2aWNlKTsKLQl9Ci0KLQkvKiBXTTg5NzQgdXNlcyBTU0kxIChIUENSMSkgdmlhIEFVRE1VWCBwb3J0IDQgZm9yIGF1ZGlvIChQUENSMSkgKi8KLQlncGlvX3NzaV9hY3RpdmUoMCk7Ci0JYXVkbXV4X2Nvbm5lY3RfMV80KCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgbXgyN3Zpc19leGl0KHZvaWQpCi17Ci0JLyogV2Ugc2hvdWxkIGNhbGwgc29tZSAic3NpX2dwaW9faW5hY3RpdmUoKSIgcHJvcGVybHkgKi8KLX0KLQotbW9kdWxlX2luaXQobXgyN3Zpc19pbml0KTsKLW1vZHVsZV9leGl0KG14Mjd2aXNfZXhpdCk7Ci0KLQotTU9EVUxFX0FVVEhPUigiSmF2aWVyIE1hcnRpbiwgamF2aWVyLm1hcnRpbkB2aXN0YS1zaWxpY29uLmNvbSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBXTTg5NzQgbXgyN3ZpcyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teGMtc3NpLmMgYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NkZWZlNi4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvaW14L214Yy1zc2kuYworKysgL2Rldi9udWxsCkBAIC0xLDg2MCArMCwwIEBACi0vKgotICogbXhjLXNzaS5jICAtLSAgU1NJIGRyaXZlciBmb3IgRnJlZXNjYWxlIElNWAotICoKLSAqIENvcHlyaWdodCAyMDA2IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QKLSAqICAgICAgICAgbGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KLSAqCi0gKiAgQmFzZWQgb24gbXhjLWFsc2EtbWMxMzc4MyAoQykgMjAwNiBGcmVlc2NhbGUuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVE9ETzoKLSAqICAgTmVlZCB0byByZXdvcmsgU1NJIHJlZ2lzdGVyIGRlZnMgd2hlbiBuZXcgZGVmcyBnbyBpbnRvIG1haW5saW5lLgotICogICBBZGQgc3VwcG9ydCBmb3IgVERNIGFuZCBGSUZPIDEuCi0gKiAgIEFkZCBzdXBwb3J0IGZvciBpLm14M3ggRE1BIGludGVyZmFjZS4KLSAqCi0gKi8KLQotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8bWFjaC9kbWEtbXgxLW14Mi5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0KLSNpbmNsdWRlICJteGMtc3NpLmgiCi0jaW5jbHVkZSAibXgxX214Mi1wY20uaCIKLQotI2RlZmluZSBTU0kxX1BPUlQJMAotI2RlZmluZSBTU0kyX1BPUlQJMQotCi1zdGF0aWMgaW50IHNzaV9hY3RpdmVbMl0gPSB7MCwgMH07Ci0KLS8qIERNQSBpbmZvcm1hdGlvbiBmb3IgbXgxX214MiBwbGF0Zm9ybXMgKi8KLXN0YXRpYyBzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyBpbXhfc3NpMV9wY21fc3RlcmVvX291dDAgPSB7Ci0JLm5hbWUJCQk9ICJTU0kxIFBDTSBTdGVyZW8gb3V0IDAiLAotCS50cmFuc2Zlcl90eXBlID0gRE1BX01PREVfV1JJVEUsCi0JLnBlcl9hZGRyZXNzID0gU1NJMV9CQVNFX0FERFIgKyBTVFgwLAotCS5ldmVudF9pZCA9IERNQV9SRVFfU1NJMV9UWDAsCi0JLndhdGVybWFya19sZXZlbCA9IFRYRklGT19XQVRFUk1BUkssCi0JLnBlcl9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKLQkubWVtX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCi19OwotCi1zdGF0aWMgc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgaW14X3NzaTFfcGNtX3N0ZXJlb19vdXQxID0gewotCS5uYW1lCQkJPSAiU1NJMSBQQ00gU3RlcmVvIG91dCAxIiwKLQkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1dSSVRFLAotCS5wZXJfYWRkcmVzcyA9IFNTSTFfQkFTRV9BRERSICsgU1RYMSwKLQkuZXZlbnRfaWQgPSBETUFfUkVRX1NTSTFfVFgxLAotCS53YXRlcm1hcmtfbGV2ZWwgPSBUWEZJRk9fV0FURVJNQVJLLAotCS5wZXJfY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzE2IHwgSU1YX0RNQV9UWVBFX0ZJRk8sCi0JLm1lbV9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMzIgfCBJTVhfRE1BX1RZUEVfTElORUFSLAotfTsKLQotc3RhdGljIHN0cnVjdCBteDFfbXgyX3BjbV9kbWFfcGFyYW1zIGlteF9zc2kxX3BjbV9zdGVyZW9faW4wID0gewotCS5uYW1lCQkJPSAiU1NJMSBQQ00gU3RlcmVvIGluIDAiLAotCS50cmFuc2Zlcl90eXBlID0gRE1BX01PREVfUkVBRCwKLQkucGVyX2FkZHJlc3MgPSBTU0kxX0JBU0VfQUREUiArIFNSWDAsCi0JLmV2ZW50X2lkID0gRE1BX1JFUV9TU0kxX1JYMCwKLQkud2F0ZXJtYXJrX2xldmVsID0gUlhGSUZPX1dBVEVSTUFSSywKLQkucGVyX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8xNiB8IElNWF9ETUFfVFlQRV9GSUZPLAotCS5tZW1fY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzMyIHwgSU1YX0RNQV9UWVBFX0xJTkVBUiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyBpbXhfc3NpMV9wY21fc3RlcmVvX2luMSA9IHsKLQkubmFtZQkJCT0gIlNTSTEgUENNIFN0ZXJlbyBpbiAxIiwKLQkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1JFQUQsCi0JLnBlcl9hZGRyZXNzID0gU1NJMV9CQVNFX0FERFIgKyBTUlgxLAotCS5ldmVudF9pZCA9IERNQV9SRVFfU1NJMV9SWDEsCi0JLndhdGVybWFya19sZXZlbCA9IFJYRklGT19XQVRFUk1BUkssCi0JLnBlcl9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKLQkubWVtX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCi19OwotCi1zdGF0aWMgc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgaW14X3NzaTJfcGNtX3N0ZXJlb19vdXQwID0gewotCS5uYW1lCQkJPSAiU1NJMiBQQ00gU3RlcmVvIG91dCAwIiwKLQkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1dSSVRFLAotCS5wZXJfYWRkcmVzcyA9IFNTSTJfQkFTRV9BRERSICsgU1RYMCwKLQkuZXZlbnRfaWQgPSBETUFfUkVRX1NTSTJfVFgwLAotCS53YXRlcm1hcmtfbGV2ZWwgPSBUWEZJRk9fV0FURVJNQVJLLAotCS5wZXJfY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzE2IHwgSU1YX0RNQV9UWVBFX0ZJRk8sCi0JLm1lbV9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMzIgfCBJTVhfRE1BX1RZUEVfTElORUFSLAotfTsKLQotc3RhdGljIHN0cnVjdCBteDFfbXgyX3BjbV9kbWFfcGFyYW1zIGlteF9zc2kyX3BjbV9zdGVyZW9fb3V0MSA9IHsKLQkubmFtZQkJCT0gIlNTSTIgUENNIFN0ZXJlbyBvdXQgMSIsCi0JLnRyYW5zZmVyX3R5cGUgPSBETUFfTU9ERV9XUklURSwKLQkucGVyX2FkZHJlc3MgPSBTU0kyX0JBU0VfQUREUiArIFNUWDEsCi0JLmV2ZW50X2lkID0gRE1BX1JFUV9TU0kyX1RYMSwKLQkud2F0ZXJtYXJrX2xldmVsID0gVFhGSUZPX1dBVEVSTUFSSywKLQkucGVyX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8xNiB8IElNWF9ETUFfVFlQRV9GSUZPLAotCS5tZW1fY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzMyIHwgSU1YX0RNQV9UWVBFX0xJTkVBUiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyBpbXhfc3NpMl9wY21fc3RlcmVvX2luMCA9IHsKLQkubmFtZQkJCT0gIlNTSTIgUENNIFN0ZXJlbyBpbiAwIiwKLQkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1JFQUQsCi0JLnBlcl9hZGRyZXNzID0gU1NJMl9CQVNFX0FERFIgKyBTUlgwLAotCS5ldmVudF9pZCA9IERNQV9SRVFfU1NJMl9SWDAsCi0JLndhdGVybWFya19sZXZlbCA9IFJYRklGT19XQVRFUk1BUkssCi0JLnBlcl9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKLQkubWVtX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCi19OwotCi1zdGF0aWMgc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgaW14X3NzaTJfcGNtX3N0ZXJlb19pbjEgPSB7Ci0JLm5hbWUJCQk9ICJTU0kyIFBDTSBTdGVyZW8gaW4gMSIsCi0JLnRyYW5zZmVyX3R5cGUgPSBETUFfTU9ERV9SRUFELAotCS5wZXJfYWRkcmVzcyA9IFNTSTJfQkFTRV9BRERSICsgU1JYMSwKLQkuZXZlbnRfaWQgPSBETUFfUkVRX1NTSTJfUlgxLAotCS53YXRlcm1hcmtfbGV2ZWwgPSBSWEZJRk9fV0FURVJNQVJLLAotCS5wZXJfY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzE2IHwgSU1YX0RNQV9UWVBFX0ZJRk8sCi0JLm1lbV9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMzIgfCBJTVhfRE1BX1RZUEVfTElORUFSLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKnNzaV9jbGswLCAqc3NpX2NsazE7Ci0KLWludCBnZXRfc3NpX2NsayhpbnQgc3NpLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3dpdGNoIChzc2kpIHsKLQljYXNlIDA6Ci0JCXNzaV9jbGswID0gY2xrX2dldChkZXYsICJzc2kxIik7Ci0JCWlmIChJU19FUlIoc3NpX2NsazApKQotCQkJcmV0dXJuIFBUUl9FUlIoc3NpX2NsazApOwotCQlyZXR1cm4gMDsKLQljYXNlIDE6Ci0JCXNzaV9jbGsxID0gY2xrX2dldChkZXYsICJzc2kyIik7Ci0JCWlmIChJU19FUlIoc3NpX2NsazEpKQotCQkJcmV0dXJuIFBUUl9FUlIoc3NpX2NsazEpOwotCQlyZXR1cm4gMDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MKGdldF9zc2lfY2xrKTsKLQotdm9pZCBwdXRfc3NpX2NsayhpbnQgc3NpKQotewotCXN3aXRjaCAoc3NpKSB7Ci0JY2FzZSAwOgotCQljbGtfcHV0KHNzaV9jbGswKTsKLQkJc3NpX2NsazAgPSBOVUxMOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWNsa19wdXQoc3NpX2NsazEpOwotCQlzc2lfY2xrMSA9IE5VTEw7Ci0JCWJyZWFrOwotCX0KLX0KLUVYUE9SVF9TWU1CT0wocHV0X3NzaV9jbGspOwotCi0vKgotICogU1NJIHN5c3RlbSBjbG9jayBjb25maWd1cmF0aW9uLgotICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgotICovCi1zdGF0aWMgaW50IGlteF9zc2lfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAotCWludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQotewotCXUzMiBzY3I7Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlzY3IgPSBTU0kxX1NDUjsKLQkJcHJfZGVidWcoIiVzOiBTQ1IgZm9yIFNTSTEgaXMgJXhcbiIsIF9fZnVuY19fLCBzY3IpOwotCX0gZWxzZSB7Ci0JCXNjciA9IFNTSTJfU0NSOwotCQlwcl9kZWJ1ZygiJXM6IFNDUiBmb3IgU1NJMiBpcyAleFxuIiwgX19mdW5jX18sIHNjcik7Ci0JfQotCi0JaWYgKHNjciAmIFNTSV9TQ1JfU1NJRU4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBzc2kgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3dpdGNoIChjbGtfaWQpIHsKLQljYXNlIElNWF9TU1BfU1lTX0NMSzoKLQkJaWYgKGRpciA9PSBTTkRfU09DX0NMT0NLX09VVCkgewotCQkJc2NyIHw9IFNTSV9TQ1JfU1lTX0NMS19FTjsKLQkJCXByX2RlYnVnKCIlczogY2xrIG9mIGlzIG91dHB1dFxuIiwgX19mdW5jX18pOwotCQl9IGVsc2UgewotCQkJc2NyICY9IH5TU0lfU0NSX1NZU19DTEtfRU47Ci0JCQlwcl9kZWJ1ZygiJXM6IGNsayBvZiBpcyBpbnB1dFxuIiwgX19mdW5jX18pOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0JCXByX2RlYnVnKCIlczogd3JpdGViYWNrIG9mIFNTSTFfU0NSXG4iLCBfX2Z1bmNfXyk7Ci0JCVNTSTFfU0NSID0gc2NyOwotCX0gZWxzZSB7Ci0JCXByX2RlYnVnKCIlczogd3JpdGViYWNrIG9mIFNTSTJfU0NSXG4iLCBfX2Z1bmNfXyk7Ci0JCVNTSTJfU0NSID0gc2NyOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogU1NJIENsb2NrIGRpdmlkZXJzCi0gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCkuCi0gKi8KLXN0YXRpYyBpbnQgaW14X3NzaV9zZXRfZGFpX2Nsa2RpdihzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCi0JaW50IGRpdl9pZCwgaW50IGRpdikKLXsKLQl1MzIgc3RjY3IsIHNyY2NyOwotCi0JcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJaWYgKFNTSTFfU0NSICYgU1NJX1NDUl9TU0lFTikKLQkJCXJldHVybiAwOwotCQlzcmNjciA9IFNTSTFfU1RDQ1I7Ci0JCXN0Y2NyID0gU1NJMV9TVENDUjsKLQl9IGVsc2UgewotCQlpZiAoU1NJMl9TQ1IgJiBTU0lfU0NSX1NTSUVOKQotCQkJcmV0dXJuIDA7Ci0JCXNyY2NyID0gU1NJMl9TVENDUjsKLQkJc3RjY3IgPSBTU0kyX1NUQ0NSOwotCX0KLQotCXN3aXRjaCAoZGl2X2lkKSB7Ci0JY2FzZSBJTVhfU1NJX1RYX0RJVl8yOgotCQlzdGNjciAmPSB+U1NJX1NUQ0NSX0RJVjI7Ci0JCXN0Y2NyIHw9IGRpdjsKLQkJYnJlYWs7Ci0JY2FzZSBJTVhfU1NJX1RYX0RJVl9QU1I6Ci0JCXN0Y2NyICY9IH5TU0lfU1RDQ1JfUFNSOwotCQlzdGNjciB8PSBkaXY7Ci0JCWJyZWFrOwotCWNhc2UgSU1YX1NTSV9UWF9ESVZfUE06Ci0JCXN0Y2NyICY9IH4weGZmOwotCQlzdGNjciB8PSBTU0lfU1RDQ1JfUE0oZGl2KTsKLQkJYnJlYWs7Ci0JY2FzZSBJTVhfU1NJX1JYX0RJVl8yOgotCQlzdGNjciAmPSB+U1NJX1NUQ0NSX0RJVjI7Ci0JCXN0Y2NyIHw9IGRpdjsKLQkJYnJlYWs7Ci0JY2FzZSBJTVhfU1NJX1JYX0RJVl9QU1I6Ci0JCXN0Y2NyICY9IH5TU0lfU1RDQ1JfUFNSOwotCQlzdGNjciB8PSBkaXY7Ci0JCWJyZWFrOwotCWNhc2UgSU1YX1NTSV9SWF9ESVZfUE06Ci0JCXN0Y2NyICY9IH4weGZmOwotCQlzdGNjciB8PSBTU0lfU1RDQ1JfUE0oZGl2KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJU1NJMV9TVENDUiA9IHN0Y2NyOwotCQlTU0kxX1NSQ0NSID0gc3JjY3I7Ci0JfSBlbHNlIHsKLQkJU1NJMl9TVENDUiA9IHN0Y2NyOwotCQlTU0kyX1NSQ0NSID0gc3JjY3I7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogU1NJIE5ldHdvcmsgTW9kZSBvciBURE0gc2xvdHMgY29uZmlndXJhdGlvbi4KLSAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHBvcnQgaXMgaW5hY3RpdmUgKGkuZS4gU1NJRU4gPSAwKS4KLSAqLwotc3RhdGljIGludCBpbXhfc3NpX3NldF9kYWlfdGRtX3Nsb3Qoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAotCXVuc2lnbmVkIGludCBtYXNrLCBpbnQgc2xvdHMpCi17Ci0JdTMyIHN0bXNrLCBzcm1zaywgc3RjY3I7Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlpZiAoU1NJMV9TQ1IgJiBTU0lfU0NSX1NTSUVOKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nIHNzaSBhbHJlYWR5IGVuYWJsZWRcbiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJc3RjY3IgPSBTU0kxX1NUQ0NSOwotCX0gZWxzZSB7Ci0JCWlmIChTU0kyX1NDUiAmIFNTSV9TQ1JfU1NJRU4pIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmcgc3NpIGFscmVhZHkgZW5hYmxlZFxuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlzdGNjciA9IFNTSTJfU1RDQ1I7Ci0JfQotCi0Jc3Rtc2sgPSBzcm1zayA9IG1hc2s7Ci0Jc3RjY3IgJj0gflNTSV9TVENDUl9EQ19NQVNLOwotCXN0Y2NyIHw9IFNTSV9TVENDUl9EQyhzbG90cyAtIDEpOwotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJU1NJMV9TVE1TSyA9IHN0bXNrOwotCQlTU0kxX1NSTVNLID0gc3Jtc2s7Ci0JCVNTSTFfU1JDQ1IgPSBTU0kxX1NUQ0NSID0gc3RjY3I7Ci0JfSBlbHNlIHsKLQkJU1NJMl9TVE1TSyA9IHN0bXNrOwotCQlTU0kyX1NSTVNLID0gc3Jtc2s7Ci0JCVNTSTJfU1JDQ1IgPSBTU0kyX1NUQ0NSID0gc3RjY3I7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTU0kgREFJIGZvcm1hdCBjb25maWd1cmF0aW9uLgotICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgotICogTm90ZTogV2UgZG9uJ3QgdXNlIHRoZSBJMlMgbW9kZXMgYnV0IGluc3RlYWQgbWFudWFsbHkgY29uZmlndXJlIHRoZQotICogU1NJIGZvciBJMlMuCi0gKi8KLXN0YXRpYyBpbnQgaW14X3NzaV9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCi0JCXVuc2lnbmVkIGludCBmbXQpCi17Ci0JdTMyIHN0Y3IgPSAwLCBzcmNyID0gMCwgc2NyOwotCi0JLyoKLQkgKiBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgdGhpcyBmdW5jdGlvbiB0byBtb2RpZnkKLQkgKiBwcmV2aW91cyBzZXQgdmFsdWVzIGluIHN0Y3IKLQkgKi8KLQlzdGNyID0gU1NJMV9TVENSOwotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpCi0JCXNjciA9IFNTSTFfU0NSICYgfihTU0lfU0NSX1NZTiB8IFNTSV9TQ1JfTkVUKTsKLQllbHNlCi0JCXNjciA9IFNTSTJfU0NSICYgfihTU0lfU0NSX1NZTiB8IFNTSV9TQ1JfTkVUKTsKLQotCWlmIChzY3IgJiBTU0lfU0NSX1NTSUVOKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmcgc3NpIGFscmVhZHkgZW5hYmxlZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIERBSSBtb2RlICovCi0Jc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewotCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgotCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGxvdyAxY2xrIGJlZm9yZSBkYXRhICovCi0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZTSSB8IFNTSV9TVENSX1RFRlMgfCBTU0lfU1RDUl9UWEJJVDA7Ci0JCXNyY3IgfD0gU1NJX1NSQ1JfUkZTSSB8IFNTSV9TUkNSX1JFRlMgfCBTU0lfU1JDUl9SWEJJVDA7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgotCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGhpZ2ggd2l0aCBkYXRhICovCi0JCXN0Y3IgfD0gU1NJX1NUQ1JfVFhCSVQwOwotCQlzcmNyIHw9IFNTSV9TUkNSX1JYQklUMDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKLQkJLyogZGF0YSBvbiByaXNpbmcgZWRnZSBvZiBiY2xrLCBmcmFtZSBoaWdoIHdpdGggZGF0YSAqLwotCQlzdGNyIHw9IFNTSV9TVENSX1RGU0w7Ci0JCXNyY3IgfD0gU1NJX1NSQ1JfUkZTTDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKLQkJLyogZGF0YSBvbiByaXNpbmcgZWRnZSBvZiBiY2xrLCBmcmFtZSBoaWdoIDFjbGsgYmVmb3JlIGRhdGEgKi8KLQkJc3RjciB8PSBTU0lfU1RDUl9URlNMIHwgU1NJX1NUQ1JfVEVGUzsKLQkJc3JjciB8PSBTU0lfU1JDUl9SRlNMIHwgU1NJX1NSQ1JfUkVGUzsKLQkJYnJlYWs7Ci0JfQotCi0JLyogREFJIGNsb2NrIGludmVyc2lvbiAqLwotCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKLQljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgotCQlzdGNyIHw9IFNTSV9TVENSX1RGU0k7Ci0JCXN0Y3IgJj0gflNTSV9TVENSX1RTQ0tQOwotCQlzcmNyIHw9IFNTSV9TUkNSX1JGU0k7Ci0JCXNyY3IgJj0gflNTSV9TUkNSX1JTQ0tQOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgotCQlzdGNyICY9IH4oU1NJX1NUQ1JfVFNDS1AgfCBTU0lfU1RDUl9URlNJKTsKLQkJc3JjciAmPSB+KFNTSV9TUkNSX1JTQ0tQIHwgU1NJX1NSQ1JfUkZTSSk7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6Ci0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZTSSB8IFNTSV9TVENSX1RTQ0tQOwotCQlzcmNyIHw9IFNTSV9TUkNSX1JGU0kgfCBTU0lfU1JDUl9SU0NLUDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKLQkJc3RjciAmPSB+U1NJX1NUQ1JfVEZTSTsKLQkJc3RjciB8PSBTU0lfU1RDUl9UU0NLUDsKLQkJc3JjciAmPSB+U1NJX1NSQ1JfUkZTSTsKLQkJc3JjciB8PSBTU0lfU1JDUl9SU0NLUDsKLQkJYnJlYWs7Ci0JfQotCi0JLyogREFJIGNsb2NrIG1hc3RlciBtYXNrcyAqLwotCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKLQljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6Ci0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZESVIgfCBTU0lfU1RDUl9UWERJUjsKLQkJc3JjciB8PSBTU0lfU1JDUl9SRkRJUiB8IFNTSV9TUkNSX1JYRElSOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRlM6Ci0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZESVI7Ci0JCXNyY3IgfD0gU1NJX1NSQ1JfUkZESVI7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGTToKLQkJc3RjciB8PSBTU0lfU1RDUl9UWERJUjsKLQkJc3JjciB8PSBTU0lfU1JDUl9SWERJUjsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJU1NJMV9TVENSID0gc3RjcjsKLQkJU1NJMV9TUkNSID0gc3JjcjsKLQkJU1NJMV9TQ1IgPSBzY3I7Ci0JfSBlbHNlIHsKLQkJU1NJMl9TVENSID0gc3RjcjsKLQkJU1NJMl9TUkNSID0gc3JjcjsKLQkJU1NJMl9TQ1IgPSBzY3I7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW14X3NzaV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwotCi0JaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKLQkJLyogc2V0IHVwIFRYIERNQSBwYXJhbXMgKi8KLQkJc3dpdGNoIChjcHVfZGFpLT5pZCkgewotCQljYXNlIElNWF9EQUlfU1NJMDoKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kxX3BjbV9zdGVyZW9fb3V0MDsKLQkJCWJyZWFrOwotCQljYXNlIElNWF9EQUlfU1NJMToKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kxX3BjbV9zdGVyZW9fb3V0MTsKLQkJCWJyZWFrOwotCQljYXNlIElNWF9EQUlfU1NJMjoKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kyX3BjbV9zdGVyZW9fb3V0MDsKLQkJCWJyZWFrOwotCQljYXNlIElNWF9EQUlfU1NJMzoKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kyX3BjbV9zdGVyZW9fb3V0MTsKLQkJfQotCQlwcl9kZWJ1ZygiJXM6IChwbGF5YmFjaylcbiIsIF9fZnVuY19fKTsKLQl9IGVsc2UgewotCQkvKiBzZXQgdXAgUlggRE1BIHBhcmFtcyAqLwotCQlzd2l0Y2ggKGNwdV9kYWktPmlkKSB7Ci0JCWNhc2UgSU1YX0RBSV9TU0kwOgotCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTFfcGNtX3N0ZXJlb19pbjA7Ci0JCQlicmVhazsKLQkJY2FzZSBJTVhfREFJX1NTSTE6Ci0JCQljcHVfZGFpLT5kbWFfZGF0YSA9ICZpbXhfc3NpMV9wY21fc3RlcmVvX2luMTsKLQkJCWJyZWFrOwotCQljYXNlIElNWF9EQUlfU1NJMjoKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kyX3BjbV9zdGVyZW9faW4wOwotCQkJYnJlYWs7Ci0JCWNhc2UgSU1YX0RBSV9TU0kzOgotCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTJfcGNtX3N0ZXJlb19pbjE7Ci0JCX0KLQkJcHJfZGVidWcoIiVzOiAoY2FwdHVyZSlcbiIsIF9fZnVuY19fKTsKLQl9Ci0KLQkvKgotCSAqIHdlIGNhbnQgcmVhbGx5IGNoYW5nZSBhbnkgU1NJIHZhbHVlcyBhZnRlciBTU0kgaXMgZW5hYmxlZAotCSAqIG5lZWQgdG8gZml4IGluIHNvZnR3YXJlIGZvciBtYXggZmxleGliaWxpdHkgLSBscmcKLQkgKi8KLQlpZiAoY3B1X2RhaS0+YWN0aXZlKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmcgc3NpIGFscmVhZHkgZW5hYmxlZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIHJlc2V0IHRoZSBTU0kgcG9ydCAtIFNlY3QgNDUuNC40ICovCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQotCQlpZiAoIXNzaV9jbGswKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKHNzaV9hY3RpdmVbU1NJMV9QT1JUXSsrKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IGV4aXQgYmVmb3JlIHJlc2V0XG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCS8qIFNTSTEgUmVzZXQgKi8KLQkJU1NJMV9TQ1IgPSAwOwotCi0JCVNTSTFfU0ZDU1IgPSBTU0lfU0ZDU1JfUkZXTTEoUlhGSUZPX1dBVEVSTUFSSykgfAotCQkJU1NJX1NGQ1NSX1JGV00wKFJYRklGT19XQVRFUk1BUkspIHwKLQkJCVNTSV9TRkNTUl9URldNMShUWEZJRk9fV0FURVJNQVJLKSB8Ci0JCQlTU0lfU0ZDU1JfVEZXTTAoVFhGSUZPX1dBVEVSTUFSSyk7Ci0JfSBlbHNlIHsKLQotCQlpZiAoIXNzaV9jbGsxKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKHNzaV9hY3RpdmVbU1NJMl9QT1JUXSsrKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IGV4aXQgYmVmb3JlIHJlc2V0XG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCS8qIFNTSTIgUmVzZXQgKi8KLQkJU1NJMl9TQ1IgPSAwOwotCi0JCVNTSTJfU0ZDU1IgPSBTU0lfU0ZDU1JfUkZXTTEoUlhGSUZPX1dBVEVSTUFSSykgfAotCQkJU1NJX1NGQ1NSX1JGV00wKFJYRklGT19XQVRFUk1BUkspIHwKLQkJCVNTSV9TRkNTUl9URldNMShUWEZJRk9fV0FURVJNQVJLKSB8Ci0JCQlTU0lfU0ZDU1JfVEZXTTAoVFhGSUZPX1dBVEVSTUFSSyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBpbXhfc3NpX2h3X3R4X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0JdTMyIHN0Y2NyLCBzdGNyLCBzaWVyOwotCi0JcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlzdGNjciA9IFNTSTFfU1RDQ1IgJiB+U1NJX1NUQ0NSX1dMX01BU0s7Ci0JCXN0Y3IgPSBTU0kxX1NUQ1I7Ci0JCXNpZXIgPSBTU0kxX1NJRVI7Ci0JfSBlbHNlIHsKLQkJc3RjY3IgPSBTU0kyX1NUQ0NSICYgflNTSV9TVENDUl9XTF9NQVNLOwotCQlzdGNyID0gU1NJMl9TVENSOwotCQlzaWVyID0gU1NJMl9TSUVSOwotCX0KLQotCS8qIERBSSBkYXRhICh3b3JkKSBzaXplICovCi0Jc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgotCQlzdGNjciB8PSBTU0lfU1RDQ1JfV0woMTYpOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKLQkJc3RjY3IgfD0gU1NJX1NUQ0NSX1dMKDIwKTsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKLQkJc3RjY3IgfD0gU1NJX1NUQ0NSX1dMKDI0KTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogZW5hYmxlIGludGVycnVwdHMgKi8KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikKLQkJc3RjciB8PSBTU0lfU1RDUl9URkVOMDsKLQllbHNlCi0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZFTjE7Ci0Jc2llciB8PSBTU0lfU0lFUl9URE1BRTsKLQotCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0JCVNTSTFfU1RDUiA9IHN0Y3I7Ci0JCVNTSTFfU1RDQ1IgPSBzdGNjcjsKLQkJU1NJMV9TSUVSID0gc2llcjsKLQl9IGVsc2UgewotCQlTU0kyX1NUQ1IgPSBzdGNyOwotCQlTU0kyX1NUQ0NSID0gc3RjY3I7Ci0JCVNTSTJfU0lFUiA9IHNpZXI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBpbXhfc3NpX2h3X3J4X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0JdTMyIHNyY2NyLCBzcmNyLCBzaWVyOwotCi0JcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlzcmNjciA9IFNTSTFfU1JDQ1IgJiB+U1NJX1NSQ0NSX1dMX01BU0s7Ci0JCXNyY3IgPSBTU0kxX1NSQ1I7Ci0JCXNpZXIgPSBTU0kxX1NJRVI7Ci0JfSBlbHNlIHsKLQkJc3JjY3IgPSBTU0kyX1NSQ0NSICYgflNTSV9TUkNDUl9XTF9NQVNLOwotCQlzcmNyID0gU1NJMl9TUkNSOwotCQlzaWVyID0gU1NJMl9TSUVSOwotCX0KLQotCS8qIERBSSBkYXRhICh3b3JkKSBzaXplICovCi0Jc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgotCQlzcmNjciB8PSBTU0lfU1JDQ1JfV0woMTYpOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKLQkJc3JjY3IgfD0gU1NJX1NSQ0NSX1dMKDIwKTsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKLQkJc3JjY3IgfD0gU1NJX1NSQ0NSX1dMKDI0KTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogZW5hYmxlIGludGVycnVwdHMgKi8KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikKLQkJc3JjciB8PSBTU0lfU1JDUl9SRkVOMDsKLQllbHNlCi0JCXNyY3IgfD0gU1NJX1NSQ1JfUkZFTjE7Ci0Jc2llciB8PSBTU0lfU0lFUl9SRE1BRTsKLQotCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0JCVNTSTFfU1JDUiA9IHNyY3I7Ci0JCVNTSTFfU1JDQ1IgPSBzcmNjcjsKLQkJU1NJMV9TSUVSID0gc2llcjsKLQl9IGVsc2UgewotCQlTU0kyX1NSQ1IgPSBzcmNyOwotCQlTU0kyX1NSQ0NSID0gc3JjY3I7Ci0JCVNTSTJfU0lFUiA9IHNpZXI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCksCi0gKiBhbHRob3VnaCBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGJ5IHVwcGVyIGxheWVycy4KLSAqLwotaW50IGlteF9zc2lfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQotCWludCByZXQ7Ci0KLQkvKiBjYW50IGNoYW5nZSBhbnkgcGFyYW1ldGVycyB3aGVuIFNTSSBpcyBydW5uaW5nICovCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJaWYgKFNTSTFfU0NSICYgU1NJX1NDUl9TU0lFTikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBzc2kgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKFNTSTJfU0NSICYgU1NJX1NDUl9TU0lFTikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBzc2kgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBDb25maWd1cmUgYm90aCB0eCBhbmQgcnggcGFyYW1zIHdpdGggdGhlIHNhbWUgc2V0dGluZ3MuIFRoaXMgaXMKLQkgKiByZWFsbHkgYSBoYXJ3YXJlIHJlc3RyaWN0aW9uIGJlY2F1c2UgU1NJIG11c3QgYmUgZGlzYWJsZWQgdW50aWwKLQkgKiB3ZSBjYW4gY2hhbmdlIHRob3NlIHZhbHVlcy4gSWYgdGhlcmUgaXMgYW4gYWN0aXZlIGF1ZGlvIHN0cmVhbSBpbgotCSAqIG9uZSBkaXJlY3Rpb24sIGVuYWJsaW5nIHRoZSBvdGhlciBkaXJlY3Rpb24gd2l0aCBkaWZmZXJlbnQKLQkgKiBzZXR0aW5ncyB3b3VsZCBtZWFuIGRpc3R1cmJpbmcgdGhlIHJ1bm5pbmcgb25lLgotCSAqLwotCXJldCA9IGlteF9zc2lfaHdfdHhfcGFyYW1zKHN1YnN0cmVhbSwgcGFyYW1zKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQlyZXR1cm4gaW14X3NzaV9od19yeF9wYXJhbXMoc3Vic3RyZWFtLCBwYXJhbXMpOwotfQotCi1pbnQgaW14X3NzaV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwotCWludCByZXQ7Ci0KLQlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKLQotCS8qIEVuYWJsZSBjbGtzIGhlcmUgdG8gZm9sbG93IFNTSSByZWNvbW1lbmRlZCBpbml0IHNlcXVlbmNlICovCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJcmV0ID0gY2xrX2VuYWJsZShzc2lfY2xrMCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gZW5hYmxlIHNzaV9jbGswXG4iKTsKLQl9IGVsc2UgewotCQlyZXQgPSBjbGtfZW5hYmxlKHNzaV9jbGsxKTsKLQkJaWYgKHJldCA8IDApCi0JCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBlbmFibGUgc3NpX2NsazFcbiIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlteF9zc2lfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKLQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQl1MzIgc2NyOwotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpCi0JCXNjciA9IFNTSTFfU0NSOwotCWVsc2UKLQkJc2NyID0gU1NJMl9TQ1I7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJCXNjciB8PSBTU0lfU0NSX1RFIHwgU1NJX1NDUl9TU0lFTjsKLQkJZWxzZQotCQkJc2NyIHw9IFNTSV9TQ1JfUkUgfCBTU0lfU0NSX1NTSUVOOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLQkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCQlzY3IgJj0gflNTSV9TQ1JfVEU7Ci0JCWVsc2UKLQkJCXNjciAmPSB+U1NJX1NDUl9SRTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpCi0JCVNTSTFfU0NSID0gc2NyOwotCWVsc2UKLQkJU1NJMl9TQ1IgPSBzY3I7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaW14X3NzaV9zaHV0ZG93bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQotCS8qIHNodXRkb3duIFNTSSBpZiBuZWl0aGVyIFR4IG9yIFJ4IGlzIGFjdGl2ZSAqLwotCWlmICghY3B1X2RhaS0+YWN0aXZlKSB7Ci0KLQkJaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fAotCQkJY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0KLQkJCWlmICgtLXNzaV9hY3RpdmVbU1NJMV9QT1JUXSA+IDEpCi0JCQkJcmV0dXJuOwotCi0JCQlTU0kxX1NDUiA9IDA7Ci0JCQljbGtfZGlzYWJsZShzc2lfY2xrMCk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoLS1zc2lfYWN0aXZlW1NTSTJfUE9SVF0pCi0JCQkJcmV0dXJuOwotCQkJU1NJMl9TQ1IgPSAwOwotCQkJY2xrX2Rpc2FibGUoc3NpX2NsazEpOwotCQl9Ci0JfQotfQotCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGlteF9zc2lfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCi0Jc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW14X3NzaV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgaW14X3NzaV9zdXNwZW5kCU5VTEwKLSNkZWZpbmUgaW14X3NzaV9yZXN1bWUJTlVMTAotI2VuZGlmCi0KLSNkZWZpbmUgSU1YX1NTSV9SQVRFUyBcCi0JKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xMTAyNSB8IFwKLQlTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgXAotCVNORFJWX1BDTV9SQVRFXzMyMDAwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCi0JU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV84ODIwMCB8IFwKLQlTTkRSVl9QQ01fUkFURV85NjAwMCkKLQotI2RlZmluZSBJTVhfU1NJX0JJVFMgXAotCShTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFwKLQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgaW14X3NzaV9wY21fZGFpX29wcyA9IHsKLQkuc3RhcnR1cCA9IGlteF9zc2lfc3RhcnR1cCwKLQkuc2h1dGRvd24gPSBpbXhfc3NpX3NodXRkb3duLAotCS50cmlnZ2VyID0gaW14X3NzaV90cmlnZ2VyLAotCS5wcmVwYXJlID0gaW14X3NzaV9wcmVwYXJlLAotCS5od19wYXJhbXMgPSBpbXhfc3NpX2h3X3BhcmFtcywKLQkuc2V0X3N5c2NsayA9IGlteF9zc2lfc2V0X2RhaV9zeXNjbGssCi0JLnNldF9jbGtkaXYgPSBpbXhfc3NpX3NldF9kYWlfY2xrZGl2LAotCS5zZXRfZm10ID0gaW14X3NzaV9zZXRfZGFpX2ZtdCwKLQkuc2V0X3RkbV9zbG90ID0gaW14X3NzaV9zZXRfZGFpX3RkbV9zbG90LAotfTsKLQotc3RydWN0IHNuZF9zb2NfZGFpIGlteF9zc2lfcGNtX2RhaVtdID0gewotewotCS5uYW1lID0gImlteC1pMnMtMS0wIiwKLQkuaWQgPSBJTVhfREFJX1NTSTAsCi0JLnN1c3BlbmQgPSBpbXhfc3NpX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGlteF9zc2lfcmVzdW1lLAotCS5wbGF5YmFjayA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKLQkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAotCS5jYXB0dXJlID0gewotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5mb3JtYXRzID0gSU1YX1NTSV9CSVRTLAotCQkucmF0ZXMgPSBJTVhfU1NJX1JBVEVTLH0sCi0JLm9wcyA9ICZpbXhfc3NpX3BjbV9kYWlfb3BzLAotfSwKLXsKLQkubmFtZSA9ICJpbXgtaTJzLTItMCIsCi0JLmlkID0gSU1YX0RBSV9TU0kxLAotCS5wbGF5YmFjayA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKLQkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAotCS5jYXB0dXJlID0gewotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5mb3JtYXRzID0gSU1YX1NTSV9CSVRTLAotCQkucmF0ZXMgPSBJTVhfU1NJX1JBVEVTLH0sCi0JLm9wcyA9ICZpbXhfc3NpX3BjbV9kYWlfb3BzLAotfSwKLXsKLQkubmFtZSA9ICJpbXgtaTJzLTEtMSIsCi0JLmlkID0gSU1YX0RBSV9TU0kyLAotCS5zdXNwZW5kID0gaW14X3NzaV9zdXNwZW5kLAotCS5yZXN1bWUgPSBpbXhfc3NpX3Jlc3VtZSwKLQkucGxheWJhY2sgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAxLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLmZvcm1hdHMgPSBJTVhfU1NJX0JJVFMsCi0JCS5yYXRlcyA9IElNWF9TU0lfUkFURVMsfSwKLQkuY2FwdHVyZSA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKLQkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAotCS5vcHMgPSAmaW14X3NzaV9wY21fZGFpX29wcywKLX0sCi17Ci0JLm5hbWUgPSAiaW14LWkycy0yLTEiLAotCS5pZCA9IElNWF9EQUlfU1NJMywKLQkucGxheWJhY2sgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAxLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLmZvcm1hdHMgPSBJTVhfU1NJX0JJVFMsCi0JCS5yYXRlcyA9IElNWF9TU0lfUkFURVMsfSwKLQkuY2FwdHVyZSA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKLQkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAotCS5vcHMgPSAmaW14X3NzaV9wY21fZGFpX29wcywKLX0sCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaW14X3NzaV9wY21fZGFpKTsKLQotc3RhdGljIGludCBfX2luaXQgaW14X3NzaV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyhpbXhfc3NpX3BjbV9kYWksCi0JCQkJQVJSQVlfU0laRShpbXhfc3NpX3BjbV9kYWkpKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGlteF9zc2lfZXhpdCh2b2lkKQotewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKGlteF9zc2lfcGNtX2RhaSwKLQkJCQlBUlJBWV9TSVpFKGlteF9zc2lfcGNtX2RhaSkpOwotfQotCi1tb2R1bGVfaW5pdChpbXhfc3NpX2luaXQpOwotbW9kdWxlX2V4aXQoaW14X3NzaV9leGl0KTsKLU1PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QsIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJpLk1YIEFTb0MgSTJTIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teGMtc3NpLmggYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJiYmRjOS4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvaW14L214Yy1zc2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9JTVhfU1NJX0gKLSNkZWZpbmUgX0lNWF9TU0lfSAotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0vKiBTU0kgcmVncyBkZWZpbml0aW9uIC0gTU9WRSB0byAvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoLyB3aGVuIHN0YWJsZSAqLwotI2RlZmluZSBTU0kxX0lPX0JBU0VfQUREUglJT19BRERSRVNTKFNTSTFfQkFTRV9BRERSKQotI2RlZmluZSBTU0kyX0lPX0JBU0VfQUREUglJT19BRERSRVNTKFNTSTJfQkFTRV9BRERSKQotCi0jZGVmaW5lIFNUWDAgICAweDAwCi0jZGVmaW5lIFNUWDEgICAweDA0Ci0jZGVmaW5lIFNSWDAgICAweDA4Ci0jZGVmaW5lIFNSWDEgICAweDBjCi0jZGVmaW5lIFNDUiAgICAweDEwCi0jZGVmaW5lIFNJU1IgICAweDE0Ci0jZGVmaW5lIFNJRVIgICAweDE4Ci0jZGVmaW5lIFNUQ1IgICAweDFjCi0jZGVmaW5lIFNSQ1IgICAweDIwCi0jZGVmaW5lIFNUQ0NSICAweDI0Ci0jZGVmaW5lIFNSQ0NSICAweDI4Ci0jZGVmaW5lIFNGQ1NSICAweDJjCi0jZGVmaW5lIFNUUiAgICAweDMwCi0jZGVmaW5lIFNPUiAgICAweDM0Ci0jZGVmaW5lIFNBQ05UICAweDM4Ci0jZGVmaW5lIFNBQ0FERCAweDNjCi0jZGVmaW5lIFNBQ0RBVCAweDQwCi0jZGVmaW5lIFNBVEFHICAweDQ0Ci0jZGVmaW5lIFNUTVNLICAweDQ4Ci0jZGVmaW5lIFNSTVNLICAweDRjCi0KLSNkZWZpbmUgU1NJMV9TVFgwCSgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTVFgwKSkpCi0jZGVmaW5lIFNTSTFfU1RYMSAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTVFgxKSkpCi0jZGVmaW5lIFNTSTFfU1JYMCAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTUlgwKSkpCi0jZGVmaW5lIFNTSTFfU1JYMSAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTUlgxKSkpCi0jZGVmaW5lIFNTSTFfU0NSICAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTQ1IpKSkKLSNkZWZpbmUgU1NJMV9TSVNSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNJU1IpKSkKLSNkZWZpbmUgU1NJMV9TSUVSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNJRVIpKSkKLSNkZWZpbmUgU1NJMV9TVENSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNUQ1IpKSkKLSNkZWZpbmUgU1NJMV9TUkNSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNSQ1IpKSkKLSNkZWZpbmUgU1NJMV9TVENDUiAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNUQ0NSKSkpCi0jZGVmaW5lIFNTSTFfU1JDQ1IgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTUkNDUikpKQotI2RlZmluZSBTU0kxX1NGQ1NSICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU0ZDU1IpKSkKLSNkZWZpbmUgU1NJMV9TVFIgICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNUUikpKQotI2RlZmluZSBTU0kxX1NPUiAgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU09SKSkpCi0jZGVmaW5lIFNTSTFfU0FDTlQgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTQUNOVCkpKQotI2RlZmluZSBTU0kxX1NBQ0FERCAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU0FDQUREKSkpCi0jZGVmaW5lIFNTSTFfU0FDREFUICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTQUNEQVQpKSkKLSNkZWZpbmUgU1NJMV9TQVRBRyAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNBVEFHKSkpCi0jZGVmaW5lIFNTSTFfU1RNU0sgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTVE1TSykpKQotI2RlZmluZSBTU0kxX1NSTVNLICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU1JNU0spKSkKLQotCi0jZGVmaW5lIFNTSTJfU1RYMAkoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1RYMCkpKQotI2RlZmluZSBTU0kyX1NUWDEgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1RYMSkpKQotI2RlZmluZSBTU0kyX1NSWDAgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1JYMCkpKQotI2RlZmluZSBTU0kyX1NSWDEgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1JYMSkpKQotI2RlZmluZSBTU0kyX1NDUiAgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU0NSKSkpCi0jZGVmaW5lIFNTSTJfU0lTUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTSVNSKSkpCi0jZGVmaW5lIFNTSTJfU0lFUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTSUVSKSkpCi0jZGVmaW5lIFNTSTJfU1RDUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTVENSKSkpCi0jZGVmaW5lIFNTSTJfU1JDUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTUkNSKSkpCi0jZGVmaW5lIFNTSTJfU1RDQ1IgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTVENDUikpKQotI2RlZmluZSBTU0kyX1NSQ0NSICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1JDQ1IpKSkKLSNkZWZpbmUgU1NJMl9TRkNTUiAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNGQ1NSKSkpCi0jZGVmaW5lIFNTSTJfU1RSICAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTVFIpKSkKLSNkZWZpbmUgU1NJMl9TT1IgICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNPUikpKQotI2RlZmluZSBTU0kyX1NBQ05UICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU0FDTlQpKSkKLSNkZWZpbmUgU1NJMl9TQUNBREQgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNBQ0FERCkpKQotI2RlZmluZSBTU0kyX1NBQ0RBVCAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU0FDREFUKSkpCi0jZGVmaW5lIFNTSTJfU0FUQUcgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTQVRBRykpKQotI2RlZmluZSBTU0kyX1NUTVNLICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1RNU0spKSkKLSNkZWZpbmUgU1NJMl9TUk1TSyAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNSTVNLKSkpCi0KLSNkZWZpbmUgU1NJX1NDUl9DTEtfSVNUICAgICAgICAoMSA8PCA5KQotI2RlZmluZSBTU0lfU0NSX1RDSF9FTiAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIFNTSV9TQ1JfU1lTX0NMS19FTiAgICAgKDEgPDwgNykKLSNkZWZpbmUgU1NJX1NDUl9JMlNfTU9ERV9OT1JNICAoMCA8PCA1KQotI2RlZmluZSBTU0lfU0NSX0kyU19NT0RFX01TVFIgICgxIDw8IDUpCi0jZGVmaW5lIFNTSV9TQ1JfSTJTX01PREVfU0xBVkUgKDIgPDwgNSkKLSNkZWZpbmUgU1NJX1NDUl9TWU4gICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBTU0lfU0NSX05FVCAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIFNTSV9TQ1JfUkUgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgU1NJX1NDUl9URSAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBTU0lfU0NSX1NTSUVOICAgICAgICAgICgxIDw8IDApCi0KLSNkZWZpbmUgU1NJX1NJU1JfQ01EQVUgICAgICAgICAoMSA8PCAxOCkKLSNkZWZpbmUgU1NJX1NJU1JfQ01ERFUgICAgICAgICAoMSA8PCAxNykKLSNkZWZpbmUgU1NJX1NJU1JfUlhUICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgU1NJX1NJU1JfUkRSMSAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgU1NJX1NJU1JfUkRSMCAgICAgICAgICAoMSA8PCAxNCkKLSNkZWZpbmUgU1NJX1NJU1JfVERFMSAgICAgICAgICAoMSA8PCAxMykKLSNkZWZpbmUgU1NJX1NJU1JfVERFMCAgICAgICAgICAoMSA8PCAxMikKLSNkZWZpbmUgU1NJX1NJU1JfUk9FMSAgICAgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgU1NJX1NJU1JfUk9FMCAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgU1NJX1NJU1JfVFVFMSAgICAgICAgICAoMSA8PCA5KQotI2RlZmluZSBTU0lfU0lTUl9UVUUwICAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIFNTSV9TSVNSX1RGUyAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgU1NJX1NJU1JfUkZTICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBTU0lfU0lTUl9UTFMgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIFNTSV9TSVNSX1JMUyAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgU1NJX1NJU1JfUkZGMSAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBTU0lfU0lTUl9SRkYwICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIFNTSV9TSVNSX1RGRTEgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgU1NJX1NJU1JfVEZFMCAgICAgICAgICAoMSA8PCAwKQotCi0jZGVmaW5lIFNTSV9TSUVSX1JETUFFICAgICAgICAgKDEgPDwgMjIpCi0jZGVmaW5lIFNTSV9TSUVSX1JJRSAgICAgICAgICAgKDEgPDwgMjEpCi0jZGVmaW5lIFNTSV9TSUVSX1RETUFFICAgICAgICAgKDEgPDwgMjApCi0jZGVmaW5lIFNTSV9TSUVSX1RJRSAgICAgICAgICAgKDEgPDwgMTkpCi0jZGVmaW5lIFNTSV9TSUVSX0NNREFVX0VOICAgICAgKDEgPDwgMTgpCi0jZGVmaW5lIFNTSV9TSUVSX0NNRERVX0VOICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIFNTSV9TSUVSX1JYVF9FTiAgICAgICAgKDEgPDwgMTYpCi0jZGVmaW5lIFNTSV9TSUVSX1JEUjFfRU4gICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIFNTSV9TSUVSX1JEUjBfRU4gICAgICAgKDEgPDwgMTQpCi0jZGVmaW5lIFNTSV9TSUVSX1RERTFfRU4gICAgICAgKDEgPDwgMTMpCi0jZGVmaW5lIFNTSV9TSUVSX1RERTBfRU4gICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIFNTSV9TSUVSX1JPRTFfRU4gICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIFNTSV9TSUVSX1JPRTBfRU4gICAgICAgKDEgPDwgMTApCi0jZGVmaW5lIFNTSV9TSUVSX1RVRTFfRU4gICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgU1NJX1NJRVJfVFVFMF9FTiAgICAgICAoMSA8PCA4KQotI2RlZmluZSBTU0lfU0lFUl9URlNfRU4gICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIFNTSV9TSUVSX1JGU19FTiAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgU1NJX1NJRVJfVExTX0VOICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBTU0lfU0lFUl9STFNfRU4gICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIFNTSV9TSUVSX1JGRjFfRU4gICAgICAgKDEgPDwgMykKLSNkZWZpbmUgU1NJX1NJRVJfUkZGMF9FTiAgICAgICAoMSA8PCAyKQotI2RlZmluZSBTU0lfU0lFUl9URkUxX0VOICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIFNTSV9TSUVSX1RGRTBfRU4gICAgICAgKDEgPDwgMCkKLQotI2RlZmluZSBTU0lfU1RDUl9UWEJJVDAgICAgICAgICgxIDw8IDkpCi0jZGVmaW5lIFNTSV9TVENSX1RGRU4xICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgU1NJX1NUQ1JfVEZFTjAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBTU0lfU1RDUl9URkRJUiAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIFNTSV9TVENSX1RYRElSICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgU1NJX1NUQ1JfVFNIRkQgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBTU0lfU1RDUl9UU0NLUCAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIFNTSV9TVENSX1RGU0kgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgU1NJX1NUQ1JfVEZTTCAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBTU0lfU1RDUl9URUZTICAgICAgICAgICgxIDw8IDApCi0KLSNkZWZpbmUgU1NJX1NSQ1JfUlhCSVQwICAgICAgICAoMSA8PCA5KQotI2RlZmluZSBTU0lfU1JDUl9SRkVOMSAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIFNTSV9TUkNSX1JGRU4wICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgU1NJX1NSQ1JfUkZESVIgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBTU0lfU1JDUl9SWERJUiAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIFNTSV9TUkNSX1JTSEZEICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgU1NJX1NSQ1JfUlNDS1AgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBTU0lfU1JDUl9SRlNJICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIFNTSV9TUkNSX1JGU0wgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgU1NJX1NSQ1JfUkVGUyAgICAgICAgICAoMSA8PCAwKQotCi0jZGVmaW5lIFNTSV9TVENDUl9ESVYyICAgICAgICAgKDEgPDwgMTgpCi0jZGVmaW5lIFNTSV9TVENDUl9QU1IgICAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIFNTSV9TVENDUl9XTCh4KSAgICAgICAgKCgoKHgpIC0gMikgPj4gMSkgPDwgMTMpCi0jZGVmaW5lIFNTSV9TVENDUl9EQyh4KSAgICAgICAgKCgoeCkgJiAweDFmKSA8PCA4KQotI2RlZmluZSBTU0lfU1RDQ1JfUE0oeCkgICAgICAgICgoKHgpICYgMHhmZikgPDwgMCkKLSNkZWZpbmUgU1NJX1NUQ0NSX1dMX01BU0sgICAgICAgICgweGYgPDwgMTMpCi0jZGVmaW5lIFNTSV9TVENDUl9EQ19NQVNLICAgICAgICAoMHgxZiA8PCA4KQotI2RlZmluZSBTU0lfU1RDQ1JfUE1fTUFTSyAgICAgICAgKDB4ZmYgPDwgMCkKLQotI2RlZmluZSBTU0lfU1JDQ1JfRElWMiAgICAgICAgICgxIDw8IDE4KQotI2RlZmluZSBTU0lfU1JDQ1JfUFNSICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBTU0lfU1JDQ1JfV0woeCkgICAgICAgICgoKCh4KSAtIDIpID4+IDEpIDw8IDEzKQotI2RlZmluZSBTU0lfU1JDQ1JfREMoeCkgICAgICAgICgoKHgpICYgMHgxZikgPDwgOCkKLSNkZWZpbmUgU1NJX1NSQ0NSX1BNKHgpICAgICAgICAoKCh4KSAmIDB4ZmYpIDw8IDApCi0jZGVmaW5lIFNTSV9TUkNDUl9XTF9NQVNLICAgICAgICAoMHhmIDw8IDEzKQotI2RlZmluZSBTU0lfU1JDQ1JfRENfTUFTSyAgICAgICAgKDB4MWYgPDwgOCkKLSNkZWZpbmUgU1NJX1NSQ0NSX1BNX01BU0sgICAgICAgICgweGZmIDw8IDApCi0KLQotI2RlZmluZSBTU0lfU0ZDU1JfUkZDTlQxKHgpICAgKCgoeCkgJiAweGYpIDw8IDI4KQotI2RlZmluZSBTU0lfU0ZDU1JfVEZDTlQxKHgpICAgKCgoeCkgJiAweGYpIDw8IDI0KQotI2RlZmluZSBTU0lfU0ZDU1JfUkZXTTEoeCkgICAgKCgoeCkgJiAweGYpIDw8IDIwKQotI2RlZmluZSBTU0lfU0ZDU1JfVEZXTTEoeCkgICAgKCgoeCkgJiAweGYpIDw8IDE2KQotI2RlZmluZSBTU0lfU0ZDU1JfUkZDTlQwKHgpICAgKCgoeCkgJiAweGYpIDw8IDEyKQotI2RlZmluZSBTU0lfU0ZDU1JfVEZDTlQwKHgpICAgKCgoeCkgJiAweGYpIDw8ICA4KQotI2RlZmluZSBTU0lfU0ZDU1JfUkZXTTAoeCkgICAgKCgoeCkgJiAweGYpIDw8ICA0KQotI2RlZmluZSBTU0lfU0ZDU1JfVEZXTTAoeCkgICAgKCgoeCkgJiAweGYpIDw8ICAwKQotCi0jZGVmaW5lIFNTSV9TVFJfVEVTVCAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgU1NJX1NUUl9SQ0syVENLICAgICAgICgxIDw8IDE0KQotI2RlZmluZSBTU0lfU1RSX1JGUzJURlMgICAgICAgKDEgPDwgMTMpCi0jZGVmaW5lIFNTSV9TVFJfUlhTVEFURSh4KSAgICAoKCh4KSAmIDB4ZikgPDwgOCkKLSNkZWZpbmUgU1NJX1NUUl9UWEQyUlhEICAgICAgICgxIDw8ICA3KQotI2RlZmluZSBTU0lfU1RSX1RDSzJSQ0sgICAgICAgKDEgPDwgIDYpCi0jZGVmaW5lIFNTSV9TVFJfVEZTMlJGUyAgICAgICAoMSA8PCAgNSkKLSNkZWZpbmUgU1NJX1NUUl9UWFNUQVRFKHgpICAgICgoKHgpICYgMHhmKSA8PCAwKQotCi0jZGVmaW5lIFNTSV9TT1JfQ0xLT0ZGICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBTU0lfU09SX1JYX0NMUiAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgU1NJX1NPUl9UWF9DTFIgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIFNTSV9TT1JfSU5JVCAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBTU0lfU09SX1dBSVQoeCkgICAgICAgKCgoeCkgJiAweDMpIDw8IDEpCi0jZGVmaW5lIFNTSV9TT1JfU1lOUlNUICAgICAgICAoMSA8PCAwKQotCi0jZGVmaW5lIFNTSV9TQUNOVF9GUkRJVih4KSAgICAoKCh4KSAmIDB4M2YpIDw8IDUpCi0jZGVmaW5lIFNTSV9TQUNOVF9XUiAgICAgICAgICAoeCA8PCA0KQotI2RlZmluZSBTU0lfU0FDTlRfUkQgICAgICAgICAgKHggPDwgMykKLSNkZWZpbmUgU1NJX1NBQ05UX1RJRiAgICAgICAgICh4IDw8IDIpCi0jZGVmaW5lIFNTSV9TQUNOVF9GViAgICAgICAgICAoeCA8PCAxKQotI2RlZmluZSBTU0lfU0FDTlRfQUM5N0VOICAgICAgKHggPDwgMCkKLQotLyogV2F0ZXJtYXJrcyBmb3IgRklGTydzICovCi0jZGVmaW5lIFRYRklGT19XQVRFUk1BUksJCQkJMHg0Ci0jZGVmaW5lIFJYRklGT19XQVRFUk1BUksJCQkJMHg0Ci0KLS8qIGkuTVggREFJIFNTUCBJRCdzICovCi0jZGVmaW5lIElNWF9EQUlfU1NJMAkJCTAgLyogU1NJMSBGSUZPIDAgKi8KLSNkZWZpbmUgSU1YX0RBSV9TU0kxCQkJMSAvKiBTU0kxIEZJRk8gMSAqLwotI2RlZmluZSBJTVhfREFJX1NTSTIJCQkyIC8qIFNTSTIgRklGTyAwICovCi0jZGVmaW5lIElNWF9EQUlfU1NJMwkJCTMgLyogU1NJMiBGSUZPIDEgKi8KLQotLyogU1NJIGNsb2NrIHNvdXJjZXMgKi8KLSNkZWZpbmUgSU1YX1NTUF9TWVNfQ0xLCQkwCi0KLS8qIFNTSSBhdWRpbyBkaXZpZGVycyAqLwotI2RlZmluZSBJTVhfU1NJX1RYX0RJVl8yCQkJMAotI2RlZmluZSBJTVhfU1NJX1RYX0RJVl9QU1IJCQkxCi0jZGVmaW5lIElNWF9TU0lfVFhfRElWX1BNCQkJMgotI2RlZmluZSBJTVhfU1NJX1JYX0RJVl8yCQkJMwotI2RlZmluZSBJTVhfU1NJX1JYX0RJVl9QU1IJCQk0Ci0jZGVmaW5lIElNWF9TU0lfUlhfRElWX1BNCQkJNQotCi0KLS8qIFNTSSBEaXYgMiAqLwotI2RlZmluZSBJTVhfU1NJX0RJVl8yX09GRgkJKH5TU0lfU1RDQ1JfRElWMikKLSNkZWZpbmUgSU1YX1NTSV9ESVZfMl9PTgkJU1NJX1NUQ0NSX0RJVjIKLQotZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBpbXhfc3NpX3BjbV9kYWlbNF07Ci1leHRlcm4gaW50IGdldF9zc2lfY2xrKGludCBzc2ksIHN0cnVjdCBkZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBwdXRfc3NpX2NsayhpbnQgc3NpKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9waHljb3JlLWFjOTcuYyBiL3NvdW5kL3NvYy9pbXgvcGh5Y29yZS1hYzk3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzMDdkNQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbXgvcGh5Y29yZS1hYzk3LmMKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIHBoeWNvcmUtYWM5Ny5jICAtLSAgU29DIGF1ZGlvIGZvciBpbXhfcGh5Y29yZSBpbiBBQzk3IG1vZGUKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4IDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtOTcxMi5oIgorI2luY2x1ZGUgImlteC1zc2kuaCIKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgaW14X3BoeWNvcmU7CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgaW14X3BoeWNvcmVfaGlmaV9vcHMgPSB7Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgaW14X3BoeWNvcmVfZGFpX2FjOTdbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJIaUZpIiwKKwkJLnN0cmVhbV9uYW1lCT0gIkhpRmkiLAorCQkuY29kZWNfZGFpCT0gJndtOTcxMl9kYWlbV005NzEyX0RBSV9BQzk3X0hJRkldLAorCQkub3BzCQk9ICZpbXhfcGh5Y29yZV9oaWZpX29wcywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgaW14X3BoeWNvcmUgPSB7CisJLm5hbWUJCT0gIlBoeUNPUkUtYXVkaW8iLAorCS5wbGF0Zm9ybQk9ICZpbXhfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluawk9IGlteF9waHljb3JlX2RhaV9hYzk3LAorCS5udW1fbGlua3MJPSBBUlJBWV9TSVpFKGlteF9waHljb3JlX2RhaV9hYzk3KSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgaW14X3BoeWNvcmVfc25kX2RldmRhdGEgPSB7CisJLmNhcmQJCT0gJmlteF9waHljb3JlLAorCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl93bTk3MTIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaW14X3BoeWNvcmVfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgaW14X3BoeWNvcmVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfcGNtMDQzKCkgJiYgIW1hY2hpbmVfaXNfcGNhMTAwKCkpCisJCS8qIHJldHVybiBoYXBweS4gV2UgbWlnaHQgcnVuIG9uIGEgdG90YWxseSBkaWZmZXJlbnQgbWFjaGluZSAqLworCQlyZXR1cm4gMDsKKworCWlteF9waHljb3JlX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWlteF9waHljb3JlX3NuZF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJaW14X3BoeWNvcmVfZGFpX2FjOTdbMF0uY3B1X2RhaSA9ICZpbXhfc3NpX3BjbV9kYWlbMF07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShpbXhfcGh5Y29yZV9zbmRfZGV2aWNlLCAmaW14X3BoeWNvcmVfc25kX2RldmRhdGEpOworCWlteF9waHljb3JlX3NuZF9kZXZkYXRhLmRldiA9ICZpbXhfcGh5Y29yZV9zbmRfZGV2aWNlLT5kZXY7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChpbXhfcGh5Y29yZV9zbmRfZGV2aWNlKTsKKworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBQbGF0Zm9ybSBkZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGlteF9waHljb3JlX3NuZF9kZXZpY2UpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpbXhfcGh5Y29yZV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoaW14X3BoeWNvcmVfc25kX2RldmljZSk7Cit9CisKK2xhdGVfaW5pdGNhbGwoaW14X3BoeWNvcmVfaW5pdCk7Cittb2R1bGVfZXhpdChpbXhfcGh5Y29yZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQaHlDT1JFIEFMU0EgU29DIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvS2NvbmZpZyBiL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKaW5kZXggNjE5NTJhYS4uZjExOTYzYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvS2NvbmZpZworKysgYi9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCkBAIC02LDYgKzYsOSBAQAogCXRyaXN0YXRlCiAJc2VsZWN0IE9NQVBfTUNCU1AKIAorY29uZmlnIFNORF9PTUFQX1NPQ19NQ1BETQorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfT01BUF9TT0NfTjgxMAogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgTm9raWEgTjgxMCIKIAlkZXBlbmRzIG9uIFNORF9PTUFQX1NPQyAmJiBNQUNIX05PS0lBX044MTAgJiYgSTJDCkBAIC05NCwxMiArOTcsMTQgQEAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlIE9NQVAzIFBhbmRvcmEuCiAKIGNvbmZpZyBTTkRfT01BUF9TT0NfT01BUDNfQkVBR0xFCi0JdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBPTUFQMyBCZWFnbGUiCi0JZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUgJiYgU05EX09NQVBfU09DICYmIE1BQ0hfT01BUDNfQkVBR0xFCisJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBPTUFQMyBCZWFnbGUgYW5kIERldmtpdDgwMDAiCisJZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUgJiYgU05EX09NQVBfU09DCisJZGVwZW5kcyBvbiAoTUFDSF9PTUFQM19CRUFHTEUgfHwgTUFDSF9ERVZLSVQ4MDAwKQogCXNlbGVjdCBTTkRfT01BUF9TT0NfTUNCU1AKIAlzZWxlY3QgU05EX1NPQ19UV0w0MDMwCiAJaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUgQmVhZ2xlYm9hcmQuCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZSBCZWFnbGVib2FyZCBvcgorCSAgdGhlIGNsb25lIERldmtpdDgwMDAuCiAKIGNvbmZpZyBTTkRfT01BUF9TT0NfWk9PTTIKIAl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIFpvb20yIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvTWFrZWZpbGUgYi9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQppbmRleCAzZGI4YTZjLi4wYmMwMGNhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQpAQCAtMSw5ICsxLDExIEBACiAjIE9NQVAgUGxhdGZvcm0gU3VwcG9ydAogc25kLXNvYy1vbWFwLW9ianMgOj0gb21hcC1wY20ubwogc25kLXNvYy1vbWFwLW1jYnNwLW9ianMgOj0gb21hcC1tY2JzcC5vCitzbmQtc29jLW9tYXAtbWNwZG0tb2JqcyA6PSBvbWFwLW1jcGRtLm8gbWNwZG0ubwogCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DKSArPSBzbmQtc29jLW9tYXAubwogb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19NQ0JTUCkgKz0gc25kLXNvYy1vbWFwLW1jYnNwLm8KK29iai0kKENPTkZJR19TTkRfT01BUF9TT0NfTUNQRE0pICs9IHNuZC1zb2Mtb21hcC1tY3BkbS5vCiAKICMgT01BUCBNYWNoaW5lIFN1cHBvcnQKIHNuZC1zb2MtbjgxMC1vYmpzIDo9IG44MTAubwpAQCAtMjUsNyArMjcsNyBAQAogb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19PVkVSTykgKz0gc25kLXNvYy1vdmVyby5vCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX09NQVAyRVZNKSArPSBzbmQtc29jLW9tYXAyZXZtLm8KIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfT01BUDNFVk0pICs9IHNuZC1zb2Mtb21hcDNldm0ubwotb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQMzUxN0VWTSkgKz0gc25kLXNvYy1hbTM1MTdldm0ubworb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19BTTM1MTdFVk0pICs9IHNuZC1zb2MtYW0zNTE3ZXZtLm8KIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfU0RQMzQzMCkgKz0gc25kLXNvYy1zZHAzNDMwLm8KIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfT01BUDNfUEFORE9SQSkgKz0gc25kLXNvYy1vbWFwM3BhbmRvcmEubwogb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQM19CRUFHTEUpICs9IHNuZC1zb2Mtb21hcDNiZWFnbGUubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvbWNwZG0uYyBiL3NvdW5kL3NvYy9vbWFwL21jcGRtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4ZGY2YwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9vbWFwL21jcGRtLmMKQEAgLTAsMCArMSw0ODQgQEAKKy8qCisgKiBtY3BkbS5jICAtLSAgTWNQRE0gaW50ZXJmYWNlIGRyaXZlcgorICoKKyAqIEF1dGhvcjogSm9yZ2UgRWR1YXJkbyBDYW5kZWxhcmlhIDx4MDEwNzIwOUB0aS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCisjaW5jbHVkZSAibWNwZG0uaCIKKworc3RhdGljIHN0cnVjdCBvbWFwX21jcGRtICptY3BkbTsKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfbWNwZG1fd3JpdGUodTE2IHJlZywgdTMyIHZhbCkKK3sKKyAgICAgICBfX3Jhd193cml0ZWwodmFsLCBtY3BkbS0+aW9fYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfbWNwZG1fcmVhZCh1MTYgcmVnKQoreworICAgICAgIHJldHVybiBfX3Jhd19yZWFkbChtY3BkbS0+aW9fYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfbWNwZG1fcmVnX2R1bXAodm9pZCkKK3sKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICIqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiSVJRU1RBVFVTX1JBVzogIDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0lSUVNUQVRVU19SQVcpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJJUlFTVEFUVVM6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9JUlFTVEFUVVMpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJJUlFFTkFCTEVfU0VUOiAgMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvbWFwX21jcGRtX3JlYWQoTUNQRE1fSVJRRU5BQkxFX1NFVCkpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIklSUUVOQUJMRV9DTFI6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9JUlFFTkFCTEVfQ0xSKSk7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiSVJRV0FLRV9FTjogMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvbWFwX21jcGRtX3JlYWQoTUNQRE1fSVJRV0FLRV9FTikpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIkRNQUVOQUJMRV9TRVQ6IDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0RNQUVOQUJMRV9TRVQpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJETUFFTkFCTEVfQ0xSOiAgMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvbWFwX21jcGRtX3JlYWQoTUNQRE1fRE1BRU5BQkxFX0NMUikpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIkRNQVdBS0VFTjogIDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0RNQVdBS0VFTikpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIkNUUkw6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9DVFJMKSk7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiRE5fREFUQTogIDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0ROX0RBVEEpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJVUF9EQVRBOiAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9VUF9EQVRBKSk7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiRklGT19DVFJMX0ROOiAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9GSUZPX0NUUkxfRE4pKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJGSUZPX0NUUkxfVVA6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9GSUZPX0NUUkxfVVApKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJETl9PRkZTRVQ6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9ETl9PRkZTRVQpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICIqKioqKioqKioqKioqKioqKioqKioqKlxuIik7Cit9CisKKy8qCisgKiBUYWtlcyB0aGUgTWNQRE0gbW9kdWxlIGluIGFuZCBvdXQgb2YgcmVzZXQgc3RhdGUuCisgKiBVcGxpbmsgYW5kIGRvd25saW5rIGNhbiBiZSByZXNldCBpbmRpdmlkdWFsbHkuCisgKi8KK3N0YXRpYyB2b2lkIG9tYXBfbWNwZG1fcmVzZXRfY2FwdHVyZShpbnQgcmVzZXQpCit7CisgICAgICAgaW50IGN0cmwgPSBvbWFwX21jcGRtX3JlYWQoTUNQRE1fQ1RSTCk7CisKKyAgICAgICBpZiAocmVzZXQpCisgICAgICAgICAgICAgICBjdHJsIHw9IFNXX1VQX1JTVDsKKyAgICAgICBlbHNlCisgICAgICAgICAgICAgICBjdHJsICY9IH5TV19VUF9SU1Q7CisKKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0NUUkwsIGN0cmwpOworfQorCitzdGF0aWMgdm9pZCBvbWFwX21jcGRtX3Jlc2V0X3BsYXliYWNrKGludCByZXNldCkKK3sKKyAgICAgICBpbnQgY3RybCA9IG9tYXBfbWNwZG1fcmVhZChNQ1BETV9DVFJMKTsKKworICAgICAgIGlmIChyZXNldCkKKyAgICAgICAgICAgICAgIGN0cmwgfD0gU1dfRE5fUlNUOworICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIGN0cmwgJj0gflNXX0ROX1JTVDsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7Cit9CisKKy8qCisgKiBFbmFibGVzIHRoZSB0cmFuc2ZlciB0aHJvdWdoIHRoZSBQRE0gaW50ZXJmYWNlIHRvL2Zyb20gdGhlIFBob2VuaXgKKyAqIGNvZGVjIGJ5IGVuYWJsaW5nIHRoZSBjb3JyZXNwb25kaW5nIFVQIG9yIEROIGNoYW5uZWxzLgorICovCit2b2lkIG9tYXBfbWNwZG1fc3RhcnQoaW50IHN0cmVhbSkKK3sKKyAgICAgICBpbnQgY3RybCA9IG9tYXBfbWNwZG1fcmVhZChNQ1BETV9DVFJMKTsKKworICAgICAgIGlmIChzdHJlYW0pCisgICAgICAgICAgICAgICBjdHJsIHw9IG1jcGRtLT51cF9jaGFubmVsczsKKyAgICAgICBlbHNlCisgICAgICAgICAgICAgICBjdHJsIHw9IG1jcGRtLT5kbl9jaGFubmVsczsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7Cit9CisKKy8qCisgKiBEaXNhYmxlcyB0aGUgdHJhbnNmZXIgdGhyb3VnaCB0aGUgUERNIGludGVyZmFjZSB0by9mcm9tIHRoZSBQaG9lbml4CisgKiBjb2RlYyBieSBkaXNhYmxpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVVAgb3IgRE4gY2hhbm5lbHMuCisgKi8KK3ZvaWQgb21hcF9tY3BkbV9zdG9wKGludCBzdHJlYW0pCit7CisgICAgICAgaW50IGN0cmwgPSBvbWFwX21jcGRtX3JlYWQoTUNQRE1fQ1RSTCk7CisKKyAgICAgICBpZiAoc3RyZWFtKQorICAgICAgICAgICAgICAgY3RybCAmPSB+bWNwZG0tPnVwX2NoYW5uZWxzOworICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIGN0cmwgJj0gfm1jcGRtLT5kbl9jaGFubmVsczsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7Cit9CisKKy8qCisgKiBDb25maWd1cmVzIE1jUERNIHVwbGluayBmb3IgYXVkaW8gcmVjb3JkaW5nLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBvbWFwX21jcGRtX3N0YXJ0LgorICovCitpbnQgb21hcF9tY3BkbV9jYXB0dXJlX29wZW4oc3RydWN0IG9tYXBfbWNwZG1fbGluayAqdXBsaW5rKQoreworICAgICAgIGludCBpcnFfbWFzayA9IDA7CisgICAgICAgaW50IGN0cmw7CisKKyAgICAgICBpZiAoIXVwbGluaykKKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgbWNwZG0tPnVwbGluayA9IHVwbGluazsKKworICAgICAgIC8qIEVuYWJsZSBpcnEgcmVxdWVzdCBnZW5lcmF0aW9uICovCisgICAgICAgaXJxX21hc2sgfD0gdXBsaW5rLT5pcnFfbWFzayAmIE1DUERNX1VQTElOS19JUlFfTUFTSzsKKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0lSUUVOQUJMRV9TRVQsIGlycV9tYXNrKTsKKworICAgICAgIC8qIENvbmZpZ3VyZSB1cGxpbmsgdGhyZXNob2xkICovCisgICAgICAgaWYgKHVwbGluay0+dGhyZXNob2xkID4gVVBfVEhSRVNfTUFYKQorICAgICAgICAgICAgICAgdXBsaW5rLT50aHJlc2hvbGQgPSBVUF9USFJFU19NQVg7CisKKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0ZJRk9fQ1RSTF9VUCwgdXBsaW5rLT50aHJlc2hvbGQpOworCisgICAgICAgLyogQ29uZmlndXJlIERNQSBjb250cm9sbGVyICovCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9ETUFFTkFCTEVfU0VULCBETUFfVVBfRU5BQkxFKTsKKworICAgICAgIC8qIFNldCBwZG0gb3V0IGZvcm1hdCAqLworICAgICAgIGN0cmwgPSBvbWFwX21jcGRtX3JlYWQoTUNQRE1fQ1RSTCk7CisgICAgICAgY3RybCAmPSB+UERNT1VURk9STUFUOworICAgICAgIGN0cmwgfD0gdXBsaW5rLT5mb3JtYXQgJiBQRE1PVVRGT1JNQVQ7CisKKyAgICAgICAvKiBVcGxpbmsgY2hhbm5lbHMgKi8KKyAgICAgICBtY3BkbS0+dXBfY2hhbm5lbHMgPSB1cGxpbmstPmNoYW5uZWxzICYgKFBETV9VUF9NQVNLIHwgUERNX1NUQVRVU19NQVNLKTsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIENvbmZpZ3VyZXMgTWNQRE0gZG93bmxpbmsgZm9yIGF1ZGlvIHBsYXliYWNrLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBvbWFwX21jcGRtX3N0YXJ0LgorICovCitpbnQgb21hcF9tY3BkbV9wbGF5YmFja19vcGVuKHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKmRvd25saW5rKQoreworICAgICAgIGludCBpcnFfbWFzayA9IDA7CisgICAgICAgaW50IGN0cmw7CisKKyAgICAgICBpZiAoIWRvd25saW5rKQorICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICBtY3BkbS0+ZG93bmxpbmsgPSBkb3dubGluazsKKworICAgICAgIC8qIEVuYWJsZSBpcnEgcmVxdWVzdCBnZW5lcmF0aW9uICovCisgICAgICAgaXJxX21hc2sgfD0gZG93bmxpbmstPmlycV9tYXNrICYgTUNQRE1fRE9XTkxJTktfSVJRX01BU0s7CisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9JUlFFTkFCTEVfU0VULCBpcnFfbWFzayk7CisKKyAgICAgICAvKiBDb25maWd1cmUgdXBsaW5rIHRocmVzaG9sZCAqLworICAgICAgIGlmIChkb3dubGluay0+dGhyZXNob2xkID4gRE5fVEhSRVNfTUFYKQorICAgICAgICAgICAgICAgZG93bmxpbmstPnRocmVzaG9sZCA9IEROX1RIUkVTX01BWDsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fRklGT19DVFJMX0ROLCBkb3dubGluay0+dGhyZXNob2xkKTsKKworICAgICAgIC8qIEVuYWJsZSBETUEgcmVxdWVzdCBnZW5lcmF0aW9uICovCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9ETUFFTkFCTEVfU0VULCBETUFfRE5fRU5BQkxFKTsKKworICAgICAgIC8qIFNldCBwZG0gb3V0IGZvcm1hdCAqLworICAgICAgIGN0cmwgPSBvbWFwX21jcGRtX3JlYWQoTUNQRE1fQ1RSTCk7CisgICAgICAgY3RybCAmPSB+UERNT1VURk9STUFUOworICAgICAgIGN0cmwgfD0gZG93bmxpbmstPmZvcm1hdCAmIFBETU9VVEZPUk1BVDsKKworICAgICAgIC8qIERvd25saW5rIGNoYW5uZWxzICovCisgICAgICAgbWNwZG0tPmRuX2NoYW5uZWxzID0gZG93bmxpbmstPmNoYW5uZWxzICYgKFBETV9ETl9NQVNLIHwgUERNX0NNRF9NQVNLKTsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIENsZWFucyBNY1BETSB1cGxpbmsgY29uZmlndXJhdGlvbi4KKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gaXMgY2xvc2VkLgorICovCitpbnQgb21hcF9tY3BkbV9jYXB0dXJlX2Nsb3NlKHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKnVwbGluaykKK3sKKyAgICAgICBpbnQgaXJxX21hc2sgPSAwOworCisgICAgICAgaWYgKCF1cGxpbmspCisgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgIC8qIERpc2FibGUgaXJxIHJlcXVlc3QgZ2VuZXJhdGlvbiAqLworICAgICAgIGlycV9tYXNrIHw9IHVwbGluay0+aXJxX21hc2sgJiBNQ1BETV9VUExJTktfSVJRX01BU0s7CisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9JUlFFTkFCTEVfQ0xSLCBpcnFfbWFzayk7CisKKyAgICAgICAvKiBEaXNhYmxlIERNQSByZXF1ZXN0IGdlbmVyYXRpb24gKi8KKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0RNQUVOQUJMRV9DTFIsIERNQV9VUF9FTkFCTEUpOworCisgICAgICAgLyogQ2xlYXIgRG93bmxpbmsgY2hhbm5lbHMgKi8KKyAgICAgICBtY3BkbS0+dXBfY2hhbm5lbHMgPSAwOworCisgICAgICAgbWNwZG0tPnVwbGluayA9IE5VTEw7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIENsZWFucyBNY1BETSBkb3dubGluayBjb25maWd1cmF0aW9uLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSBpcyBjbG9zZWQuCisgKi8KK2ludCBvbWFwX21jcGRtX3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKmRvd25saW5rKQoreworICAgICAgIGludCBpcnFfbWFzayA9IDA7CisKKyAgICAgICBpZiAoIWRvd25saW5rKQorICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICAvKiBEaXNhYmxlIGlycSByZXF1ZXN0IGdlbmVyYXRpb24gKi8KKyAgICAgICBpcnFfbWFzayB8PSBkb3dubGluay0+aXJxX21hc2sgJiBNQ1BETV9ET1dOTElOS19JUlFfTUFTSzsKKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0lSUUVOQUJMRV9DTFIsIGlycV9tYXNrKTsKKworICAgICAgIC8qIERpc2FibGUgRE1BIHJlcXVlc3QgZ2VuZXJhdGlvbiAqLworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fRE1BRU5BQkxFX0NMUiwgRE1BX0ROX0VOQUJMRSk7CisKKyAgICAgICAvKiBjbGVhciBEb3dubGluayBjaGFubmVscyAqLworICAgICAgIG1jcGRtLT5kbl9jaGFubmVscyA9IDA7CisKKyAgICAgICBtY3BkbS0+ZG93bmxpbmsgPSBOVUxMOworCisgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBvbWFwX21jcGRtX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKyAgICAgICBzdHJ1Y3Qgb21hcF9tY3BkbSAqbWNwZG1faXJxID0gZGV2X2lkOworICAgICAgIGludCBpcnFfc3RhdHVzOworCisgICAgICAgaXJxX3N0YXR1cyA9IG9tYXBfbWNwZG1fcmVhZChNQ1BETV9JUlFTVEFUVVMpOworCisgICAgICAgLyogQWNrbm93bGVkZ2UgaXJxIGV2ZW50ICovCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9JUlFTVEFUVVMsIGlycV9zdGF0dXMpOworCisgICAgICAgaWYgKGlycSAmIE1DUERNX0ROX0lSUV9GVUxMKSB7CisgICAgICAgICAgICAgICBkZXZfZXJyKG1jcGRtX2lycS0+ZGV2LCAiRE4gRklGTyBlcnJvciAleFxuIiwgaXJxX3N0YXR1cyk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X3BsYXliYWNrKDEpOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9wbGF5YmFja19vcGVuKG1jcGRtX2lycS0+ZG93bmxpbmspOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZXNldF9wbGF5YmFjaygwKTsKKyAgICAgICB9CisKKyAgICAgICBpZiAoaXJxICYgTUNQRE1fRE5fSVJRX0VNUFRZKSB7CisgICAgICAgICAgICAgICBkZXZfZXJyKG1jcGRtX2lycS0+ZGV2LCAiRE4gRklGTyBlcnJvciAleFxuIiwgaXJxX3N0YXR1cyk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X3BsYXliYWNrKDEpOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9wbGF5YmFja19vcGVuKG1jcGRtX2lycS0+ZG93bmxpbmspOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZXNldF9wbGF5YmFjaygwKTsKKyAgICAgICB9CisKKyAgICAgICBpZiAoaXJxICYgTUNQRE1fRE5fSVJRKSB7CisgICAgICAgICAgICAgICBkZXZfZGJnKG1jcGRtX2lycS0+ZGV2LCAiRE4gd3JpdGUgcmVxdWVzdFxuIik7CisgICAgICAgfQorCisgICAgICAgaWYgKGlycSAmIE1DUERNX1VQX0lSUV9GVUxMKSB7CisgICAgICAgICAgICAgICBkZXZfZXJyKG1jcGRtX2lycS0+ZGV2LCAiVVAgRklGTyBlcnJvciAleFxuIiwgaXJxX3N0YXR1cyk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X2NhcHR1cmUoMSk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX2NhcHR1cmVfb3BlbihtY3BkbV9pcnEtPnVwbGluayk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X2NhcHR1cmUoMCk7CisgICAgICAgfQorCisgICAgICAgaWYgKGlycSAmIE1DUERNX1VQX0lSUV9FTVBUWSkgeworICAgICAgICAgICAgICAgZGV2X2VycihtY3BkbV9pcnEtPmRldiwgIlVQIEZJRk8gZXJyb3IgJXhcbiIsIGlycV9zdGF0dXMpOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZXNldF9jYXB0dXJlKDEpOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9jYXB0dXJlX29wZW4obWNwZG1faXJxLT51cGxpbmspOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZXNldF9jYXB0dXJlKDApOworICAgICAgIH0KKworICAgICAgIGlmIChpcnEgJiBNQ1BETV9VUF9JUlEpIHsKKyAgICAgICAgICAgICAgIGRldl9kYmcobWNwZG1faXJxLT5kZXYsICJVUCB3cml0ZSByZXF1ZXN0XG4iKTsKKyAgICAgICB9CisKKyAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2ludCBvbWFwX21jcGRtX3JlcXVlc3Qodm9pZCkKK3sKKyAgICAgICBpbnQgcmV0OworCisgICAgICAgY2xrX2VuYWJsZShtY3BkbS0+Y2xrKTsKKworICAgICAgIHNwaW5fbG9jaygmbWNwZG0tPmxvY2spOworCisgICAgICAgaWYgKCFtY3BkbS0+ZnJlZSkgeworICAgICAgICAgICAgICAgZGV2X2VycihtY3BkbS0+ZGV2LCAiTWNQRE0gaW50ZXJmYWNlIGlzIGluIHVzZVxuIik7CisgICAgICAgICAgICAgICBzcGluX3VubG9jaygmbWNwZG0tPmxvY2spOworICAgICAgICAgICAgICAgcmV0ID0gLUVCVVNZOworICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgfQorICAgICAgIG1jcGRtLT5mcmVlID0gMDsKKworICAgICAgIHNwaW5fdW5sb2NrKCZtY3BkbS0+bG9jayk7CisKKyAgICAgICAvKiBEaXNhYmxlIGxpbmVzIHdoaWxlIHJlcXVlc3QgaXMgb25nb2luZyAqLworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgMHgwMCk7CisKKyAgICAgICByZXQgPSByZXF1ZXN0X2lycShtY3BkbS0+aXJxLCBvbWFwX21jcGRtX2lycV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICJNY1BETSIsICh2b2lkICopbWNwZG0pOworICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgIGRldl9lcnIobWNwZG0tPmRldiwgIlJlcXVlc3QgZm9yIE1jUERNIElSUSBmYWlsZWRcbiIpOworICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgfQorCisgICAgICAgcmV0dXJuIDA7CisKK2VycjoKKyAgICAgICBjbGtfZGlzYWJsZShtY3BkbS0+Y2xrKTsKKyAgICAgICByZXR1cm4gcmV0OworfQorCit2b2lkIG9tYXBfbWNwZG1fZnJlZSh2b2lkKQoreworICAgICAgIHNwaW5fbG9jaygmbWNwZG0tPmxvY2spOworICAgICAgIGlmIChtY3BkbS0+ZnJlZSkgeworICAgICAgICAgICAgICAgZGV2X2VycihtY3BkbS0+ZGV2LCAiTWNQRE0gaW50ZXJmYWNlIGlzIGFscmVhZHkgZnJlZVxuIik7CisgICAgICAgICAgICAgICBzcGluX3VubG9jaygmbWNwZG0tPmxvY2spOworICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgIH0KKyAgICAgICBtY3BkbS0+ZnJlZSA9IDE7CisgICAgICAgc3Bpbl91bmxvY2soJm1jcGRtLT5sb2NrKTsKKworICAgICAgIGNsa19kaXNhYmxlKG1jcGRtLT5jbGspOworCisgICAgICAgZnJlZV9pcnEobWNwZG0tPmlycSwgKHZvaWQgKiltY3BkbSk7Cit9CisKKy8qIEVuYWJsZS9kaXNhYmxlIERDIG9mZnNldCBjYW5jZWxhdGlvbiBmb3IgdGhlIGFuYWxvZworICogaGVhZHNldCBwYXRoIChQRE0gY2hhbm5lbHMgMSBhbmQgMikuCisgKi8KK2ludCBvbWFwX21jcGRtX3NldF9vZmZzZXQoaW50IG9mZnNldDEsIGludCBvZmZzZXQyKQoreworICAgICAgIGludCBvZmZzZXQ7CisKKyAgICAgICBpZiAoKG9mZnNldDEgPiBETl9PRlNUX01BWCkgfHwgKG9mZnNldDIgPiBETl9PRlNUX01BWCkpCisgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgIG9mZnNldCA9IChvZmZzZXQxIDw8IEROX09GU1RfUlgxKSB8IChvZmZzZXQyIDw8IEROX09GU1RfUlgyKTsKKworICAgICAgIC8qIG9mZnNldCBjYW5jZWxsYXRpb24gZm9yIGNoYW5uZWwgMSAqLworICAgICAgIGlmIChvZmZzZXQxKQorICAgICAgICAgICAgICAgb2Zmc2V0IHw9IEROX09GU1RfUlgxX0VOOworICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIG9mZnNldCAmPSB+RE5fT0ZTVF9SWDFfRU47CisKKyAgICAgICAvKiBvZmZzZXQgY2FuY2VsbGF0aW9uIGZvciBjaGFubmVsIDIgKi8KKyAgICAgICBpZiAob2Zmc2V0MikKKyAgICAgICAgICAgICAgIG9mZnNldCB8PSBETl9PRlNUX1JYMl9FTjsKKyAgICAgICBlbHNlCisgICAgICAgICAgICAgICBvZmZzZXQgJj0gfkROX09GU1RfUlgyX0VOOworCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9ETl9PRkZTRVQsIG9mZnNldCk7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgb21hcF9tY3BkbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworICAgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzOworICAgICAgIGludCByZXQgPSAwOworCisgICAgICAgbWNwZG0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9tY3BkbSksIEdGUF9LRVJORUwpOworICAgICAgIGlmICghbWNwZG0pIHsKKyAgICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgfQorCisgICAgICAgcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKyAgICAgICBpZiAocmVzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHJlc291cmNlXG4iKTsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyX3Jlc291cmNlOworICAgICAgIH0KKworICAgICAgIHNwaW5fbG9ja19pbml0KCZtY3BkbS0+bG9jayk7CisgICAgICAgbWNwZG0tPmZyZWUgPSAxOworICAgICAgIG1jcGRtLT5pb19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworICAgICAgIGlmICghbWNwZG0tPmlvX2Jhc2UpIHsKKyAgICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICBnb3RvIGVycl9yZXNvdXJjZTsKKyAgICAgICB9CisKKyAgICAgICBtY3BkbS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKworICAgICAgIG1jcGRtLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJwZG1fY2siKTsKKyAgICAgICBpZiAoSVNfRVJSKG1jcGRtLT5jbGspKSB7CisgICAgICAgICAgICAgICByZXQgPSBQVFJfRVJSKG1jcGRtLT5jbGspOworICAgICAgICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBwZG1fY2s6ICVkXG4iLCByZXQpOworICAgICAgICAgICAgICAgZ290byBlcnJfY2xrOworICAgICAgIH0KKworICAgICAgIG1jcGRtLT5kZXYgPSAmcGRldi0+ZGV2OworICAgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jcGRtKTsKKworICAgICAgIHJldHVybiAwOworCitlcnJfY2xrOgorICAgICAgIGlvdW5tYXAobWNwZG0tPmlvX2Jhc2UpOworZXJyX3Jlc291cmNlOgorICAgICAgIGtmcmVlKG1jcGRtKTsKK2V4aXQ6CisgICAgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgb21hcF9tY3BkbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKyAgICAgICBzdHJ1Y3Qgb21hcF9tY3BkbSAqbWNwZG1fcHRyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKyAgICAgICBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworICAgICAgIGNsa19wdXQobWNwZG1fcHRyLT5jbGspOworCisgICAgICAgaW91bm1hcChtY3BkbV9wdHItPmlvX2Jhc2UpOworCisgICAgICAgbWNwZG1fcHRyLT5jbGsgPSBOVUxMOworICAgICAgIG1jcGRtX3B0ci0+ZnJlZSA9IDA7CisgICAgICAgbWNwZG1fcHRyLT5kZXYgPSBOVUxMOworCisgICAgICAga2ZyZWUobWNwZG1fcHRyKTsKKworICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX21jcGRtX2RyaXZlciA9IHsKKyAgICAgICAucHJvYmUgPSBvbWFwX21jcGRtX3Byb2JlLAorICAgICAgIC5yZW1vdmUgPSBfX2RldmV4aXRfcChvbWFwX21jcGRtX3JlbW92ZSksCisgICAgICAgLmRyaXZlciA9IHsKKyAgICAgICAgICAgICAgIC5uYW1lID0gIm9tYXAtbWNwZG0iLAorICAgICAgIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcF9tY3BkbV9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfbWNwZG1faW5pdCh2b2lkKQoreworICAgICAgIHJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBfbWNwZG1fZHJpdmVyKTsKK30KK2FyY2hfaW5pdGNhbGwob21hcF9tY3BkbV9pbml0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL21jcGRtLmggYi9zb3VuZC9zb2Mvb21hcC9tY3BkbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYjMyNmUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvb21hcC9tY3BkbS5oCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogbWNwZG0uaCAtLSBEZWZpbmVzIGZvciBNY1BETSBkcml2ZXIKKyAqCisgKiBBdXRob3I6IEpvcmdlIEVkdWFyZG8gQ2FuZGVsYXJpYSA8eDAxMDcyMDlAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworLyogTWNQRE0gcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgTUNQRE1fUkVWSVNJT04gICAgICAgICAweDAwCisjZGVmaW5lIE1DUERNX1NZU0NPTkZJRyAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIE1DUERNX0lSUVNUQVRVU19SQVcgICAgMHgyNAorI2RlZmluZSBNQ1BETV9JUlFTVEFUVVMgICAgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBNQ1BETV9JUlFFTkFCTEVfU0VUICAgIDB4MkMKKyNkZWZpbmUgTUNQRE1fSVJRRU5BQkxFX0NMUiAgICAweDMwCisjZGVmaW5lIE1DUERNX0lSUVdBS0VfRU4gICAgICAgMHgzNAorI2RlZmluZSBNQ1BETV9ETUFFTkFCTEVfU0VUICAgIDB4MzgKKyNkZWZpbmUgTUNQRE1fRE1BRU5BQkxFX0NMUiAgICAweDNDCisjZGVmaW5lIE1DUERNX0RNQVdBS0VFTiAgICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIE1DUERNX0NUUkwgICAgICAgICAgICAgMHg0NAorI2RlZmluZSBNQ1BETV9ETl9EQVRBICAgICAgICAgIDB4NDgKKyNkZWZpbmUgTUNQRE1fVVBfREFUQSAgICAgICAgICAweDRDCisjZGVmaW5lIE1DUERNX0ZJRk9fQ1RSTF9ETiAgICAgMHg1MAorI2RlZmluZSBNQ1BETV9GSUZPX0NUUkxfVVAgICAgIDB4NTQKKyNkZWZpbmUgTUNQRE1fRE5fT0ZGU0VUICAgICAgICAgICAgICAgIDB4NTgKKworLyoKKyAqIE1DUERNX0lSUSBiaXQgZmllbGRzCisgKiBJUlFTVEFUVVNfUkFXLCBJUlFTVEFUVVMsIElSUUVOQUJMRV9TRVQsIElSUUVOQUJMRV9DTFIKKyAqLworCisjZGVmaW5lIE1DUERNX0ROX0lSUSAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBNQ1BETV9ETl9JUlFfRU1QVFkgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgTUNQRE1fRE5fSVJRX0FMTVNUX0VNUFRZICAgICAgICgxIDw8IDIpCisjZGVmaW5lIE1DUERNX0ROX0lSUV9GVUxMICAgICAgICAgICAgICAoMSA8PCAzKQorCisjZGVmaW5lIE1DUERNX1VQX0lSUSAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBNQ1BETV9VUF9JUlFfRU1QVFkgICAgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgTUNQRE1fVVBfSVJRX0FMTVNUX0ZVTEwgICAgICAgICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIE1DUERNX1VQX0lSUV9GVUxMICAgICAgICAgICAgICAoMSA8PCAxMSkKKworI2RlZmluZSBNQ1BETV9ET1dOTElOS19JUlFfTUFTSyAgICAgICAgICAgICAgICAweDAwRgorI2RlZmluZSBNQ1BETV9VUExJTktfSVJRX01BU0sgICAgICAgICAgMHhGMDAKKworLyoKKyAqIE1DUERNX0RNQUVOQUJMRSBiaXQgZmllbGRzCisgKi8KKworI2RlZmluZSBETUFfRE5fRU5BQkxFICAgICAgICAgIDB4MQorI2RlZmluZSBETUFfVVBfRU5BQkxFICAgICAgICAgIDB4MgorCisvKgorICogTUNQRE1fQ1RSTCBiaXQgZmllbGRzCisgKi8KKworI2RlZmluZSBQRE1fVVAxX0VOICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBQRE1fVVAyX0VOICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBQRE1fVVAzX0VOICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBQRE1fRE4xX0VOICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBQRE1fRE4yX0VOICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBQRE1fRE4zX0VOICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBQRE1fRE40X0VOICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBQRE1fRE41X0VOICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBQRE1PVVRGT1JNQVQgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBDTURfSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFNUQVRVU19JTlQgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFNXX1VQX1JTVCAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFNXX0ROX1JTVCAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFBETV9VUF9NQVNLICAgICAgICAgICAgMHgwMDcKKyNkZWZpbmUgUERNX0ROX01BU0sgICAgICAgICAgICAweDBGOAorI2RlZmluZSBQRE1fQ01EX01BU0sgICAgICAgICAgIDB4MjAwCisjZGVmaW5lIFBETV9TVEFUVVNfTUFTSyAgICAgICAgICAgICAgICAweDQwMAorCisKKyNkZWZpbmUgUERNT1VURk9STUFUX0xKVVNUICAgICAoMCA8PCA4KQorI2RlZmluZSBQRE1PVVRGT1JNQVRfUkpVU1QgICAgICgxIDw8IDgpCisKKy8qCisgKiBNQ1BETV9GSUZPX0NUUkwgYml0IGZpZWxkcworICovCisKKyNkZWZpbmUgVVBfVEhSRVNfTUFYICAgICAgICAgICAweEYKKyNkZWZpbmUgRE5fVEhSRVNfTUFYICAgICAgICAgICAweEYKKworLyoKKyAqIE1DUERNX0ROX09GRlNFVCBiaXQgZmllbGRzCisgKi8KKworI2RlZmluZSBETl9PRlNUX1JYMV9FTiAgICAgICAgIDB4MDAwMQorI2RlZmluZSBETl9PRlNUX1JYMl9FTiAgICAgICAgIDB4MDEwMAorCisjZGVmaW5lIEROX09GU1RfUlgxICAgICAgICAgICAgMQorI2RlZmluZSBETl9PRlNUX1JYMiAgICAgICAgICAgIDkKKyNkZWZpbmUgRE5fT0ZTVF9NQVggICAgICAgICAgICAweDFGCisKKyNkZWZpbmUgTUNQRE1fVVBMSU5LICAgICAgICAgICAxCisjZGVmaW5lIE1DUERNX0RPV05MSU5LICAgICAgICAgMgorCitzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rIHsKKyAgICAgICBpbnQgaXJxX21hc2s7CisgICAgICAgaW50IHRocmVzaG9sZDsKKyAgICAgICBpbnQgZm9ybWF0OworICAgICAgIGludCBjaGFubmVsczsKK307CisKK3N0cnVjdCBvbWFwX21jcGRtX3BsYXRmb3JtX2RhdGEgeworICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOworICAgICAgIHUxNiBpcnE7Cit9OworCitzdHJ1Y3Qgb21hcF9tY3BkbSB7CisgICAgICAgc3RydWN0IGRldmljZSAqZGV2OworICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOworICAgICAgIHZvaWQgX19pb21lbSAqaW9fYmFzZTsKKyAgICAgICB1OCBmcmVlOworICAgICAgIGludCBpcnE7CisKKyAgICAgICBzcGlubG9ja190IGxvY2s7CisgICAgICAgc3RydWN0IG9tYXBfbWNwZG1fcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisgICAgICAgc3RydWN0IGNsayAqY2xrOworICAgICAgIHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKmRvd25saW5rOworICAgICAgIHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKnVwbGluazsKKyAgICAgICBzdHJ1Y3QgY29tcGxldGlvbiBpcnFfY29tcGxldGlvbjsKKworICAgICAgIGludCBkbl9jaGFubmVsczsKKyAgICAgICBpbnQgdXBfY2hhbm5lbHM7Cit9OworCitleHRlcm4gdm9pZCBvbWFwX21jcGRtX3N0YXJ0KGludCBzdHJlYW0pOworZXh0ZXJuIHZvaWQgb21hcF9tY3BkbV9zdG9wKGludCBzdHJlYW0pOworZXh0ZXJuIGludCBvbWFwX21jcGRtX2NhcHR1cmVfb3BlbihzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rICp1cGxpbmspOworZXh0ZXJuIGludCBvbWFwX21jcGRtX3BsYXliYWNrX29wZW4oc3RydWN0IG9tYXBfbWNwZG1fbGluayAqZG93bmxpbmspOworZXh0ZXJuIGludCBvbWFwX21jcGRtX2NhcHR1cmVfY2xvc2Uoc3RydWN0IG9tYXBfbWNwZG1fbGluayAqdXBsaW5rKTsKK2V4dGVybiBpbnQgb21hcF9tY3BkbV9wbGF5YmFja19jbG9zZShzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rICpkb3dubGluayk7CitleHRlcm4gaW50IG9tYXBfbWNwZG1fcmVxdWVzdCh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXBfbWNwZG1fZnJlZSh2b2lkKTsKK2V4dGVybiBpbnQgb21hcF9tY3BkbV9zZXRfb2Zmc2V0KGludCBvZmZzZXQxLCBpbnQgb2Zmc2V0Mik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKaW5kZXggNmJiYmQyYS4uZDI5NzI1NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwpAQCAtMjg3LDYgKzI4Nyw4IEBACiAJb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dLmRtYV9yZXEgPSBkbWE7CiAJb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dLnBvcnRfYWRkciA9IHBvcnQ7CiAJb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dLnN5bmNfbW9kZSA9IHN5bmNfbW9kZTsKKwlvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW2lkXVtzdWJzdHJlYW0tPnN0cmVhbV0uZGF0YV90eXBlID0KKwkJCQkJCQlPTUFQX0RNQV9EQVRBX1RZUEVfUzE2OwogCWNwdV9kYWktPmRtYV9kYXRhID0gJm9tYXBfbWNic3BfZGFpX2RtYV9wYXJhbXNbaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKIAogCWlmIChtY2JzcF9kYXRhLT5jb25maWd1cmVkKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jcGRtLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jcGRtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVmMTllNAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNwZG0uYwpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIG9tYXAtbWNwZG0uYyAgLS0gIE9NQVAgQUxTQSBTb0MgREFJIGRyaXZlciB1c2luZyBNY1BETSBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzCisgKgorICogQXV0aG9yOiBNaXNhZWwgTG9wZXogQ3J1eiA8eDAwNTI3MjlAdGkuY29tPgorICogQ29udGFjdDogSm9yZ2UgRWR1YXJkbyBDYW5kZWxhcmlhIDx4MDEwNzIwOUB0aS5jb20+CisgKiAgICAgICAgICBNYXJnYXJpdGEgT2xheWEgPG1hZ2kub2xheWFAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLmg+CisjaW5jbHVkZSA8cGxhdC9tY2JzcC5oPgorI2luY2x1ZGUgIm1jcGRtLmgiCisjaW5jbHVkZSAib21hcC1tY3BkbS5oIgorI2luY2x1ZGUgIm9tYXAtcGNtLmgiCisKK3N0cnVjdCBvbWFwX21jcGRtX2RhdGEgeworCXN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKmxpbmtzOworCWludCBhY3RpdmU7Cit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbWNwZG1fbGluayBvbWFwX21jcGRtX2xpbmtzW10gPSB7CisJLyogZG93bmxpbmsgKi8KKwl7CisJCS5pcnFfbWFzayA9IE1DUERNX0ROX0lSUV9FTVBUWSB8IE1DUERNX0ROX0lSUV9GVUxMLAorCQkudGhyZXNob2xkID0gMSwKKwkJLmZvcm1hdCA9IFBETU9VVEZPUk1BVF9MSlVTVCwKKwl9LAorCS8qIHVwbGluayAqLworCXsKKwkJLmlycV9tYXNrID0gTUNQRE1fVVBfSVJRX0VNUFRZIHwgTUNQRE1fVVBfSVJRX0ZVTEwsCisJCS50aHJlc2hvbGQgPSAxLAorCQkuZm9ybWF0ID0gUERNT1VURk9STUFUX0xKVVNULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbWNwZG1fZGF0YSBtY3BkbV9kYXRhID0geworCS5saW5rcyA9IG9tYXBfbWNwZG1fbGlua3MsCisJLmFjdGl2ZSA9IDAsCit9OworCisvKgorICogU3RyZWFtIERNQSBwYXJhbWV0ZXJzCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9wY21fZG1hX2RhdGEgb21hcF9tY3BkbV9kYWlfZG1hX3BhcmFtc1tdID0geworCXsKKwkJLm5hbWUgPSAiQXVkaW8gcGxheWJhY2siLAorCQkuZG1hX3JlcSA9IE9NQVA0NFhYX0RNQV9NQ1BETV9ETCwKKwkJLmRhdGFfdHlwZSA9IE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIsCisJCS5zeW5jX21vZGUgPSBPTUFQX0RNQV9TWU5DX1BBQ0tFVCwKKwkJLnBhY2tldF9zaXplID0gMTYsCisJCS5wb3J0X2FkZHIgPSBPTUFQNDRYWF9NQ1BETV9MM19CQVNFICsgTUNQRE1fRE5fREFUQSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiQXVkaW8gY2FwdHVyZSIsCisJCS5kbWFfcmVxID0gT01BUDQ0WFhfRE1BX01DUERNX1VQLAorCQkuZGF0YV90eXBlID0gT01BUF9ETUFfREFUQV9UWVBFX1MzMiwKKwkJLnN5bmNfbW9kZSA9IE9NQVBfRE1BX1NZTkNfUEFDS0VULAorCQkucGFja2V0X3NpemUgPSAxNiwKKwkJLnBvcnRfYWRkciA9IE9NQVA0NFhYX01DUERNX0wzX0JBU0UgKyBNQ1BETV9VUF9EQVRBLAorCX0sCit9OworCitzdGF0aWMgaW50IG9tYXBfbWNwZG1fZGFpX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIWNwdV9kYWktPmFjdGl2ZSkKKwkJZXJyID0gb21hcF9tY3BkbV9yZXF1ZXN0KCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBvbWFwX21jcGRtX2RhaV9zaHV0ZG93bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCisJaWYgKCFjcHVfZGFpLT5hY3RpdmUpCisJCW9tYXBfbWNwZG1fZnJlZSgpOworfQorCitzdGF0aWMgaW50IG9tYXBfbWNwZG1fZGFpX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCisJCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJc3RydWN0IG9tYXBfbWNwZG1fZGF0YSAqbWNwZG1fcHJpdiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwlpbnQgc3RyZWFtID0gc3Vic3RyZWFtLT5zdHJlYW07CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlpZiAoIW1jcGRtX3ByaXYtPmFjdGl2ZSsrKQorCQkJb21hcF9tY3BkbV9zdGFydChzdHJlYW0pOworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlpZiAoIS0tbWNwZG1fcHJpdi0+YWN0aXZlKQorCQkJb21hcF9tY3BkbV9zdG9wKHN0cmVhbSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvbWFwX21jcGRtX2RhaV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJc3RydWN0IG9tYXBfbWNwZG1fZGF0YSAqbWNwZG1fcHJpdiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rICptY3BkbV9saW5rcyA9IG1jcGRtX3ByaXYtPmxpbmtzOworCWludCBzdHJlYW0gPSBzdWJzdHJlYW0tPnN0cmVhbTsKKwlpbnQgY2hhbm5lbHMsIGVyciwgbGlua19tYXNrID0gMDsKKworCWNwdV9kYWktPmRtYV9kYXRhID0gJm9tYXBfbWNwZG1fZGFpX2RtYV9wYXJhbXNbc3RyZWFtXTsKKworCWNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CisJc3dpdGNoIChjaGFubmVscykgeworCWNhc2UgNDoKKwkJaWYgKHN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCisJCQkvKiB1cCB0byAyIGNoYW5uZWxzIGZvciBjYXB0dXJlICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbGlua19tYXNrIHw9IDEgPDwgMzsKKwljYXNlIDM6CisJCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKQorCQkJLyogdXAgdG8gMiBjaGFubmVscyBmb3IgY2FwdHVyZSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWxpbmtfbWFzayB8PSAxIDw8IDI7CisJY2FzZSAyOgorCQlsaW5rX21hc2sgfD0gMSA8PCAxOworCWNhc2UgMToKKwkJbGlua19tYXNrIHw9IDEgPDwgMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogdW5zdXBwb3J0ZWQgbnVtYmVyIG9mIGNoYW5uZWxzICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQltY3BkbV9saW5rc1tzdHJlYW1dLmNoYW5uZWxzID0gbGlua19tYXNrIDw8IDM7CisJCWVyciA9IG9tYXBfbWNwZG1fcGxheWJhY2tfb3BlbigmbWNwZG1fbGlua3Nbc3RyZWFtXSk7CisJfSBlbHNlIHsKKwkJbWNwZG1fbGlua3Nbc3RyZWFtXS5jaGFubmVscyA9IGxpbmtfbWFzayA8PCAwOworCQllcnIgPSBvbWFwX21jcGRtX2NhcHR1cmVfb3BlbigmbWNwZG1fbGlua3Nbc3RyZWFtXSk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvbWFwX21jcGRtX2RhaV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCXN0cnVjdCBvbWFwX21jcGRtX2RhdGEgKm1jcGRtX3ByaXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG9tYXBfbWNwZG1fbGluayAqbWNwZG1fbGlua3MgPSBtY3BkbV9wcml2LT5saW5rczsKKwlpbnQgc3RyZWFtID0gc3Vic3RyZWFtLT5zdHJlYW07CisJaW50IGVycjsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSAgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJZXJyID0gb21hcF9tY3BkbV9wbGF5YmFja19jbG9zZSgmbWNwZG1fbGlua3Nbc3RyZWFtXSk7CisJZWxzZQorCQllcnIgPSBvbWFwX21jcGRtX2NhcHR1cmVfY2xvc2UoJm1jcGRtX2xpbmtzW3N0cmVhbV0pOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgb21hcF9tY3BkbV9kYWlfb3BzID0geworCS5zdGFydHVwCT0gb21hcF9tY3BkbV9kYWlfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBvbWFwX21jcGRtX2RhaV9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IG9tYXBfbWNwZG1fZGFpX3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IG9tYXBfbWNwZG1fZGFpX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IG9tYXBfbWNwZG1fZGFpX2h3X2ZyZWUsCit9OworCisjZGVmaW5lIE9NQVBfTUNQRE1fUkFURVMJKFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDApCisjZGVmaW5lIE9NQVBfTUNQRE1fRk9STUFUUwkoU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisKK3N0cnVjdCBzbmRfc29jX2RhaSBvbWFwX21jcGRtX2RhaSA9IHsKKwkubmFtZSA9ICJvbWFwLW1jcGRtIiwKKwkuaWQgPSAtMSwKKwkucGxheWJhY2sgPSB7CisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gNCwKKwkJLnJhdGVzID0gT01BUF9NQ1BETV9SQVRFUywKKwkJLmZvcm1hdHMgPSBPTUFQX01DUERNX0ZPUk1BVFMsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBPTUFQX01DUERNX1JBVEVTLAorCQkuZm9ybWF0cyA9IE9NQVBfTUNQRE1fRk9STUFUUywKKwl9LAorCS5vcHMgPSAmb21hcF9tY3BkbV9kYWlfb3BzLAorCS5wcml2YXRlX2RhdGEgPSAmbWNwZG1fZGF0YSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX21jcGRtX2RhaSk7CisKK3N0YXRpYyBpbnQgX19pbml0IHNuZF9vbWFwX21jcGRtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWkoJm9tYXBfbWNwZG1fZGFpKTsKK30KK21vZHVsZV9pbml0KHNuZF9vbWFwX21jcGRtX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc25kX29tYXBfbWNwZG1fZXhpdCh2b2lkKQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJm9tYXBfbWNwZG1fZGFpKTsKK30KK21vZHVsZV9leGl0KHNuZF9vbWFwX21jcGRtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNaXNhZWwgTG9wZXogQ3J1eiA8eDAwNTI3MjlAdGkuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJPTUFQIFBETSBTb0MgSW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jcGRtLmggYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jcGRtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNiODBkNQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNwZG0uaApAQCAtMCwwICsxLDI5IEBACisvKgorICogb21hcC1tY3BkbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzCisgKgorICogQ29udGFjdDogTWlzYWVsIExvcGV6IENydXogPHgwMDUyNzI5QHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19PTUFQX01DUERNX0hfXworI2RlZmluZSBfX09NQVBfTUNQRE1fSF9fCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgb21hcF9tY3BkbV9kYWk7CisKKyNlbmRpZgkvKiBFbmQgb2YgX19PTUFQX01DUERNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKaW5kZXggOWRiMjc3MC4uODI1ZGIzOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCkBAIC0zNyw3ICszNyw4IEBACiAJCQkJICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CiAJCQkJICBTTkRSVl9QQ01fSU5GT19QQVVTRSB8CiAJCQkJICBTTkRSVl9QQ01fSU5GT19SRVNVTUUsCi0JLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJCSAgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCiAJLnBlcmlvZF9ieXRlc19taW4JPSAzMiwKIAkucGVyaW9kX2J5dGVzX21heAk9IDY0ICogMTAyNCwKIAkucGVyaW9kc19taW4JCT0gMiwKQEAgLTE0OSw2ICsxNTAsNyBAQAogCXN0cnVjdCBvbWFwX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgb21hcF9wY21fZG1hX2RhdGEgKmRtYV9kYXRhID0gcHJ0ZC0+ZG1hX2RhdGE7CiAJc3RydWN0IG9tYXBfZG1hX2NoYW5uZWxfcGFyYW1zIGRtYV9wYXJhbXM7CisJaW50IGJ5dGVzOwogCiAJLyogcmV0dXJuIGlmIHRoaXMgaXMgYSBidWZmZXJsZXNzIHRyYW5zZmVyIGUuZy4KIAkgKiBjb2RlYyA8LS0+IEJUIGNvZGVjIG9yIEdTTSBtb2RlbSAtLSBsZyBGSVhNRSAqLwpAQCAtMTU2LDExICsxNTgsNyBAQAogCQlyZXR1cm4gMDsKIAogCW1lbXNldCgmZG1hX3BhcmFtcywgMCwgc2l6ZW9mKGRtYV9wYXJhbXMpKTsKLQkvKgotCSAqIE5vdGU6IFJlZ2FyZGxlc3Mgb2YgaW50ZXJmYWNlIGRhdGEgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgT01BUCBNY0JTUAotCSAqIG9yIEVBQyBibG9ja3MsIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGlzIGFsd2F5cyBmaXhlZCAxNi1iaXQvc2FtcGxlCi0JICovCi0JZG1hX3BhcmFtcy5kYXRhX3R5cGUJCQk9IE9NQVBfRE1BX0RBVEFfVFlQRV9TMTY7CisJZG1hX3BhcmFtcy5kYXRhX3R5cGUJCQk9IGRtYV9kYXRhLT5kYXRhX3R5cGU7CiAJZG1hX3BhcmFtcy50cmlnZ2VyCQkJPSBkbWFfZGF0YS0+ZG1hX3JlcTsKIAlkbWFfcGFyYW1zLnN5bmNfbW9kZQkJCT0gZG1hX2RhdGEtPnN5bmNfbW9kZTsKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewpAQCAtMTcwLDYgKzE2OCw3IEBACiAJCWRtYV9wYXJhbXMuc3JjX3N0YXJ0CQk9IHJ1bnRpbWUtPmRtYV9hZGRyOwogCQlkbWFfcGFyYW1zLmRzdF9zdGFydAkJPSBkbWFfZGF0YS0+cG9ydF9hZGRyOwogCQlkbWFfcGFyYW1zLmRzdF9wb3J0CQk9IE9NQVBfRE1BX1BPUlRfTVBVSTsKKwkJZG1hX3BhcmFtcy5kc3RfZmkJCT0gZG1hX2RhdGEtPnBhY2tldF9zaXplOwogCX0gZWxzZSB7CiAJCWRtYV9wYXJhbXMuc3JjX2Ftb2RlCQk9IE9NQVBfRE1BX0FNT0RFX0NPTlNUQU5UOwogCQlkbWFfcGFyYW1zLmRzdF9hbW9kZQkJPSBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQzsKQEAgLTE3Nyw2ICsxNzYsNyBAQAogCQlkbWFfcGFyYW1zLnNyY19zdGFydAkJPSBkbWFfZGF0YS0+cG9ydF9hZGRyOwogCQlkbWFfcGFyYW1zLmRzdF9zdGFydAkJPSBydW50aW1lLT5kbWFfYWRkcjsKIAkJZG1hX3BhcmFtcy5zcmNfcG9ydAkJPSBPTUFQX0RNQV9QT1JUX01QVUk7CisJCWRtYV9wYXJhbXMuc3JjX2ZpCQk9IGRtYV9kYXRhLT5wYWNrZXRfc2l6ZTsKIAl9CiAJLyoKIAkgKiBTZXQgRE1BIHRyYW5zZmVyIGZyYW1lIHNpemUgZXF1YWwgdG8gQUxTQSBwZXJpb2Qgc2l6ZSBhbmQgZnJhbWUKQEAgLTE4NCw3ICsxODQsOCBAQAogCSAqIHdlIGNhbiB0cmFuc2ZlciB0aGUgd2hvbGUgQUxTQSBidWZmZXIgd2l0aCBzaW5nbGUgRE1BIHRyYW5zZmVyIGJ1dAogCSAqIHN0aWxsIGNhbiBnZXQgYW4gaW50ZXJydXB0IGF0IGVhY2ggcGVyaW9kIGJvdW5hcnkKIAkgKi8KLQlkbWFfcGFyYW1zLmVsZW1fY291bnQJPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSAvIDI7CisJYnl0ZXMgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwlkbWFfcGFyYW1zLmVsZW1fY291bnQJPSBieXRlcyA+PiBkbWFfZGF0YS0+ZGF0YV90eXBlOwogCWRtYV9wYXJhbXMuZnJhbWVfY291bnQJPSBydW50aW1lLT5wZXJpb2RzOwogCW9tYXBfc2V0X2RtYV9wYXJhbXMocHJ0ZC0+ZG1hX2NoLCAmZG1hX3BhcmFtcyk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmggYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5oCmluZGV4IDM4YTgyMWQuLmIxOTk3NWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmgKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1wY20uaApAQCAtMjksOCArMjksMTAgQEAKIAljaGFyCQkqbmFtZTsJCS8qIHN0cmVhbSBpZGVudGlmaWVyICovCiAJaW50CQlkbWFfcmVxOwkvKiBETUEgcmVxdWVzdCBsaW5lICovCiAJdW5zaWduZWQgbG9uZwlwb3J0X2FkZHI7CS8qIHRyYW5zbWl0L3JlY2VpdmUgcmVnaXN0ZXIgKi8KLQlpbnQJCXN5bmNfbW9kZTsJLyogRE1BIHN5bmMgbW9kZSAqLwogCXZvaWQgKCpzZXRfdGhyZXNob2xkKShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CisJaW50CQlkYXRhX3R5cGU7CS8qIGRhdGEgdHlwZSA4LDE2LDMyICovCisJaW50CQlzeW5jX21vZGU7CS8qIERNQSBzeW5jIG1vZGUgKi8KKwlpbnQJCXBhY2tldF9zaXplOwkvKiBwYWNrZXQgc2l6ZSBvbmx5IGluIFBBQ0tFVCBtb2RlICovCiB9OwogCiBleHRlcm4gc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gb21hcF9zb2NfcGxhdGZvcm07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwM2JlYWdsZS5jIGIvc291bmQvc29jL29tYXAvb21hcDNiZWFnbGUuYwppbmRleCBkODhhZDVjLi4yNDBlMDk3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwM2JlYWdsZS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzYmVhZ2xlLmMKQEAgLTExNywxMSArMTE3LDExIEBACiB7CiAJaW50IHJldDsKIAotCWlmICghbWFjaGluZV9pc19vbWFwM19iZWFnbGUoKSkgewotCQlwcl9kZWJ1ZygiTm90IE9NQVAzIEJlYWdsZSFcbiIpOworCWlmICghKG1hY2hpbmVfaXNfb21hcDNfYmVhZ2xlKCkgfHwgbWFjaGluZV9pc19kZXZraXQ4MDAwKCkpKSB7CisJCXByX2RlYnVnKCJOb3QgT01BUDMgQmVhZ2xlIG9yIERldmtpdDgwMDAhXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXByX2luZm8oIk9NQVAzIEJlYWdsZSBTb0MgaW5pdFxuIik7CisJcHJfaW5mbygiT01BUDMgQmVhZ2xlL0RldmtpdDgwMDAgU29DIGluaXRcbiIpOwogCiAJb21hcDNiZWFnbGVfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwogCWlmICghb21hcDNiZWFnbGVfc25kX2RldmljZSkgewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYwppbmRleCA3MWIyYzE2Li5kZTEwZjc2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtNDAsNiArNDEsOCBAQAogCiAjZGVmaW5lIFBSRUZJWCAiQVNvQyBvbWFwM3BhbmRvcmE6ICIKIAorc3RhdGljIHN0cnVjdCByZWd1bGF0b3IgKm9tYXAzcGFuZG9yYV9kYWNfcmVnOworCiBzdGF0aWMgaW50IG9tYXAzcGFuZG9yYV9jbW5faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLCB1bnNpZ25lZCBpbnQgZm10KQogewpAQCAtMTA2LDE3ICsxMDksMzMgQEAKIAkJCQkJICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKIH0KIAorc3RhdGljIGludCBvbWFwM3BhbmRvcmFfZGFjX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmssIGludCBldmVudCkKK3sKKwkvKgorCSAqIFRoZSBQQ00xNzczIERBQyBkYXRhc2hlZXQgcmVxdWlyZXMgMW1zIGRlbGF5IGJldHdlZW4gc3dpdGNoaW5nCisJICogVkNDIHBvd2VyIG9uL29mZiBhbmQgL1BEIHBpbiBoaWdoL2xvdworCSAqLworCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKSB7CisJCXJlZ3VsYXRvcl9lbmFibGUob21hcDNwYW5kb3JhX2RhY19yZWcpOworCQltZGVsYXkoMSk7CisJCWdwaW9fc2V0X3ZhbHVlKE9NQVAzX1BBTkRPUkFfREFDX1BPV0VSX0dQSU8sIDEpOworCX0gZWxzZSB7CisJCWdwaW9fc2V0X3ZhbHVlKE9NQVAzX1BBTkRPUkFfREFDX1BPV0VSX0dQSU8sIDApOworCQltZGVsYXkoMSk7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKG9tYXAzcGFuZG9yYV9kYWNfcmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBvbWFwM3BhbmRvcmFfaHBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqaywgaW50IGV2ZW50KQogewotCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKSB7Ci0JCWdwaW9fc2V0X3ZhbHVlKE9NQVAzX1BBTkRPUkFfREFDX1BPV0VSX0dQSU8sIDEpOworCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKQogCQlncGlvX3NldF92YWx1ZShPTUFQM19QQU5ET1JBX0FNUF9QT1dFUl9HUElPLCAxKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJZ3Bpb19zZXRfdmFsdWUoT01BUDNfUEFORE9SQV9BTVBfUE9XRVJfR1BJTywgMCk7Ci0JCW1kZWxheSgxKTsKLQkJZ3Bpb19zZXRfdmFsdWUoT01BUDNfUEFORE9SQV9EQUNfUE9XRVJfR1BJTywgMCk7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzAsNyArMTQ5LDkgQEAKICAqICB8UHwgPC0tLSBUV0w0MDMwIDwtLS0tLS0tLS0gTGluZSBJbiBhbmQgTUlDcwogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgb21hcDNwYW5kb3JhX291dF9kYXBtX3dpZGdldHNbXSA9IHsKLQlTTkRfU09DX0RBUE1fREFDKCJQQ00gREFDIiwgIkhpRmkgUGxheWJhY2siLCBTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9EQUNfRSgiUENNIERBQyIsICJIaUZpIFBsYXliYWNrIiwgU05EX1NPQ19OT1BNLAorCQkJICAgMCwgMCwgb21hcDNwYW5kb3JhX2RhY19ldmVudCwKKwkJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKIAlTTkRfU09DX0RBUE1fUEdBX0UoIkhlYWRwaG9uZSBBbXBsaWZpZXIiLCBTTkRfU09DX05PUE0sCiAJCQkgICAwLCAwLCBOVUxMLCAwLCBvbWFwM3BhbmRvcmFfaHBfZXZlbnQsCiAJCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCkBAIC0xNDUsNiArMTY2LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIG9tYXAzcGFuZG9yYV9vdXRfbWFwW10gPSB7CisJeyJQQ00gREFDIiwgTlVMTCwgIkFQTEwgRW5hYmxlIn0sCiAJeyJIZWFkcGhvbmUgQW1wbGlmaWVyIiwgTlVMTCwgIlBDTSBEQUMifSwKIAl7IkxpbmUgT3V0IiwgTlVMTCwgIlBDTSBEQUMifSwKIAl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhlYWRwaG9uZSBBbXBsaWZpZXIifSwKQEAgLTMwNSw4ICszMjcsMTggQEAKIAkJZ290byBmYWlsMjsKIAl9CiAKKwlvbWFwM3BhbmRvcmFfZGFjX3JlZyA9IHJlZ3VsYXRvcl9nZXQoJm9tYXAzcGFuZG9yYV9zbmRfZGV2aWNlLT5kZXYsICJ2Y2MiKTsKKwlpZiAoSVNfRVJSKG9tYXAzcGFuZG9yYV9kYWNfcmVnKSkgeworCQlwcl9lcnIoUFJFRklYICJGYWlsZWQgdG8gZ2V0IERBQyByZWd1bGF0b3IgZnJvbSAlczogJWxkXG4iLAorCQkJZGV2X25hbWUoJm9tYXAzcGFuZG9yYV9zbmRfZGV2aWNlLT5kZXYpLAorCQkJUFRSX0VSUihvbWFwM3BhbmRvcmFfZGFjX3JlZykpOworCQlnb3RvIGZhaWwzOworCX0KKwogCXJldHVybiAwOwogCitmYWlsMzoKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKG9tYXAzcGFuZG9yYV9zbmRfZGV2aWNlKTsKIGZhaWwyOgogCXBsYXRmb3JtX2RldmljZV9wdXQob21hcDNwYW5kb3JhX3NuZF9kZXZpY2UpOwogZmFpbDE6CkBAIC0zMTksNiArMzUxLDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IG9tYXAzcGFuZG9yYV9zb2NfZXhpdCh2b2lkKQogeworCXJlZ3VsYXRvcl9wdXQob21hcDNwYW5kb3JhX2RhY19yZWcpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG9tYXAzcGFuZG9yYV9zbmRfZGV2aWNlKTsKIAlncGlvX2ZyZWUoT01BUDNfUEFORE9SQV9BTVBfUE9XRVJfR1BJTyk7CiAJZ3Bpb19mcmVlKE9NQVAzX1BBTkRPUkFfREFDX1BPV0VSX0dQSU8pOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEtc3NwLmMgYi9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYwppbmRleCAzYmQ3NzEyLi5lNjkzOTdmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYwpAQCAtMTM1LDEwICsxMzUsMTEgQEAKIAlzdHJ1Y3Qgc3NwX3ByaXYgKnByaXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoIWNwdV9kYWktPmFjdGl2ZSkKLQkJcmV0dXJuIDA7CisJCWNsa19lbmFibGUocHJpdi0+ZGV2LnNzcC0+Y2xrKTsKIAogCXNzcF9zYXZlX3N0YXRlKCZwcml2LT5kZXYsICZwcml2LT5zdGF0ZSk7CiAJY2xrX2Rpc2FibGUocHJpdi0+ZGV2LnNzcC0+Y2xrKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNDYsMTIgKzE0NywxMyBAQAogewogCXN0cnVjdCBzc3BfcHJpdiAqcHJpdiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKIAotCWlmICghY3B1X2RhaS0+YWN0aXZlKQotCQlyZXR1cm4gMDsKLQogCWNsa19lbmFibGUocHJpdi0+ZGV2LnNzcC0+Y2xrKTsKIAlzc3BfcmVzdG9yZV9zdGF0ZSgmcHJpdi0+ZGV2LCAmcHJpdi0+c3RhdGUpOwotCXNzcF9lbmFibGUoJnByaXYtPmRldik7CisKKwlpZiAoY3B1X2RhaS0+YWN0aXZlKQorCQlzc3BfZW5hYmxlKCZwcml2LT5kZXYpOworCWVsc2UKKwkJY2xrX2Rpc2FibGUocHJpdi0+ZGV2LnNzcC0+Y2xrKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9yYXVtZmVsZC5jIGIvc291bmQvc29jL3B4YS9yYXVtZmVsZC5jCmluZGV4IGFjZmNlMWMuLjdlM2Y0MTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcmF1bWZlbGQuYworKysgYi9zb3VuZC9zb2MvcHhhL3JhdW1mZWxkLmMKQEAgLTQxLDcgKzQxLDkgQEAKIH07CiAKICNkZWZpbmUgTUFYOTQ4NV9NQ0xLX0ZSRVFfMTEyODk2IDB4MjIKLSNkZWZpbmUJTUFYOTQ4NV9NQ0xLX0ZSRVFfMTIyODgwIDB4MjMKKyNkZWZpbmUgTUFYOTQ4NV9NQ0xLX0ZSRVFfMTIyODgwIDB4MjMKKyNkZWZpbmUgTUFYOTQ4NV9NQ0xLX0ZSRVFfMjI1NzkyIDB4MzIKKyNkZWZpbmUgTUFYOTQ4NV9NQ0xLX0ZSRVFfMjQ1NzYwIDB4MzMKIAogc3RhdGljIHZvaWQgc2V0X21heDk0ODVfY2xrKGNoYXIgY2xrKQogewpAQCAtNzEsOSArNzMsMTcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOwogCi0Jc2V0X21heDk0ODVfY2xrKE1BWDk0ODVfTUNMS19GUkVRXzExMjg5Nik7CisJLyogc2V0IGZyZXEgdG8gMCB0byBlbmFibGUgYWxsIHBvc3NpYmxlIGNvZGVjIHNhbXBsZSByYXRlcyAqLworCXJldHVybiBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwgMCwgMCk7Cit9CiAKLQlyZXR1cm4gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIDAsIDExMjg5NjAwLCAwKTsKK3N0YXRpYyB2b2lkIHJhdW1mZWxkX2NzNDI3MF9zaHV0ZG93bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOworCisJLyogc2V0IGZyZXEgdG8gMCB0byBlbmFibGUgYWxsIHBvc3NpYmxlIGNvZGVjIHNhbXBsZSByYXRlcyAqLworCXNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCAwLCAwLCAwKTsKIH0KIAogc3RhdGljIGludCByYXVtZmVsZF9jczQyNzBfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLApAQCAtODYsMjAgKzk2LDI0IEBACiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKLQljYXNlIDgwMDA6Ci0JY2FzZSAxNjAwMDoKLQljYXNlIDQ4MDAwOgotCWNhc2UgOTYwMDA6Ci0JCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8xMjI4ODApOwotCQljbGsgPSAxMjI4ODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSAxMTAyNToKLQljYXNlIDIyMDUwOgogCWNhc2UgNDQxMDA6Ci0JY2FzZSA4ODIwMDoKIAkJc2V0X21heDk0ODVfY2xrKE1BWDk0ODVfTUNMS19GUkVRXzExMjg5Nik7CiAJCWNsayA9IDExMjg5NjAwOwogCQlicmVhazsKKwljYXNlIDQ4MDAwOgorCQlzZXRfbWF4OTQ4NV9jbGsoTUFYOTQ4NV9NQ0xLX0ZSRVFfMTIyODgwKTsKKwkJY2xrID0gMTIyODgwMDA7CisJCWJyZWFrOworCWNhc2UgODgyMDA6CisJCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8yMjU3OTIpOworCQljbGsgPSAyMjU3OTIwMDsKKwkJYnJlYWs7CisJY2FzZSA5NjAwMDoKKwkJc2V0X21heDk0ODVfY2xrKE1BWDk0ODVfTUNMS19GUkVRXzI0NTc2MCk7CisJCWNsayA9IDI0NTc2MDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlmbXQgPSBTTkRfU09DX0RBSUZNVF9JMlMgfApAQCAtMTI4LDcgKzE0Miw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNwdV9kYWksIFBYQV9TU1BfQ0xLX0VYVCwgMCwgMSk7CisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhjcHVfZGFpLCBQWEFfU1NQX0NMS19FWFQsIGNsaywgMSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTEzNyw2ICsxNTEsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIHJhdW1mZWxkX2NzNDI3MF9vcHMgPSB7CiAJLnN0YXJ0dXAgPSByYXVtZmVsZF9jczQyNzBfc3RhcnR1cCwKKwkuc2h1dGRvd24gPSByYXVtZmVsZF9jczQyNzBfc2h1dGRvd24sCiAJLmh3X3BhcmFtcyA9IHJhdW1mZWxkX2NzNDI3MF9od19wYXJhbXMsCiB9OwogCkBAIC0xODEsMjAgKzE5NiwyNCBAQAogCWludCBmbXQsIHJldCA9IDAsIGNsayA9IDA7CiAKIAlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKLQljYXNlIDgwMDA6Ci0JY2FzZSAxNjAwMDoKLQljYXNlIDQ4MDAwOgotCWNhc2UgOTYwMDA6Ci0JCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8xMjI4ODApOwotCQljbGsgPSAxMjI4ODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSAxMTAyNToKLQljYXNlIDIyMDUwOgogCWNhc2UgNDQxMDA6Ci0JY2FzZSA4ODIwMDoKIAkJc2V0X21heDk0ODVfY2xrKE1BWDk0ODVfTUNMS19GUkVRXzExMjg5Nik7CiAJCWNsayA9IDExMjg5NjAwOwogCQlicmVhazsKKwljYXNlIDQ4MDAwOgorCQlzZXRfbWF4OTQ4NV9jbGsoTUFYOTQ4NV9NQ0xLX0ZSRVFfMTIyODgwKTsKKwkJY2xrID0gMTIyODgwMDA7CisJCWJyZWFrOworCWNhc2UgODgyMDA6CisJCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8yMjU3OTIpOworCQljbGsgPSAyMjU3OTIwMDsKKwkJYnJlYWs7CisJY2FzZSA5NjAwMDoKKwkJc2V0X21heDk0ODVfY2xrKE1BWDk0ODVfTUNMS19GUkVRXzI0NTc2MCk7CisJCWNsayA9IDI0NTc2MDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlmbXQgPSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORjsKQEAgLTIxNyw3ICsyMzYsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhjcHVfZGFpLCBQWEFfU1NQX0NMS19FWFQsIDAsIDEpOworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgUFhBX1NTUF9DTEtfRVhULCBjbGssIDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnIGIvc291bmQvc29jL3MzYzI0eHgvS2NvbmZpZwppbmRleCBiNDg5ZjFhLi4xNWZlNTdlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L0tjb25maWcKQEAgLTI3LDEyICsyNywxMCBAQAogY29uZmlnIFNORF9TM0NfU09DX1BDTQogCXRyaXN0YXRlCiAKLWNvbmZpZyBTTkRfUzNDMjQ0M19TT0NfQUM5NworY29uZmlnIFNORF9TM0NfU09DX0FDOTcKIAl0cmlzdGF0ZQotCXNlbGVjdCBTM0MyNDEwX0RNQQotCXNlbGVjdCBBQzk3X0JVUwogCXNlbGVjdCBTTkRfU09DX0FDOTdfQlVTCi0JCisKIGNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfTkVPMTk3M19XTTg3NTMKIAl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBORU8xOTczIC0gV004NzUzIgogCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIE1BQ0hfTkVPMTk3M19HVEEwMQpAQCAtNzEsOCArNjksMTAgQEAKIGNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfU01ESzI0NDNfV005NzEwCiAJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIFNNREsyNDQzIC0gV005NzEwIgogCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIE1BQ0hfU01ESzI0NDMKLQlzZWxlY3QgU05EX1MzQzI0NDNfU09DX0FDOTcKKwlzZWxlY3QgUzNDMjQxMF9ETUEKKwlzZWxlY3QgQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19BQzk3X0NPREVDCisJc2VsZWN0IFNORF9TM0NfU09DX0FDOTcKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHNtZGsyNDQzCiAJICB3aXRoIHRoZSBXTTk3MTAuCkBAIC04MCw4ICs4MCwxMCBAQAogY29uZmlnIFNORF9TM0MyNFhYX1NPQ19MTjI0NDBTQkNfQUxDNjUwCiAJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIExOMjQ0MFNCQyAtIEFMQzY1MCIKIAlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQyAmJiBBUkNIX1MzQzI0MTAKLQlzZWxlY3QgU05EX1MzQzI0NDNfU09DX0FDOTcKKwlzZWxlY3QgUzNDMjQxMF9ETUEKKwlzZWxlY3QgQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19BQzk3X0NPREVDCisJc2VsZWN0IFNORF9TM0NfU09DX0FDOTcKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIGxuMjQ0MHNiYwogCSAgd2l0aCB0aGUgQUxDNjUwLgpAQCAtMTExLDMgKzExMywxMSBAQAogCXNlbGVjdCBTTkRfUzNDMjRYWF9TT0NfSTJTCiAJc2VsZWN0IFNORF9TT0NfVExWMzIwQUlDM1gKIAlzZWxlY3QgU05EX1MzQzI0WFhfU09DX1NJTVRFQworCitjb25maWcgU05EX1NPQ19TTURLX1dNOTcxMworCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBzdXBwb3J0IGZvciBTTURLIHdpdGggV005NzEzIgorCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIE1BQ0hfU01ESzY0MTAKKwlzZWxlY3QgU05EX1NPQ19XTTk3MTMKKwlzZWxlY3QgU05EX1MzQ19TT0NfQUM5NworCWhlbHAKKwkgIFNhdCBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlIFNNREsuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9zM2MyNHh4L01ha2VmaWxlCmluZGV4IGI3NDQ2NTcuLmRmMDcxYTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L01ha2VmaWxlCkBAIC0zLDEzICszLDEzIEBACiBzbmQtc29jLXMzYzI0eHgtaTJzLW9ianMgOj0gczNjMjR4eC1pMnMubwogc25kLXNvYy1zM2MyNDEyLWkycy1vYmpzIDo9IHMzYzI0MTItaTJzLm8KIHNuZC1zb2MtczNjNjR4eC1pMnMtb2JqcyA6PSBzM2M2NHh4LWkycy5vCi1zbmQtc29jLXMzYzI0NDMtYWM5Ny1vYmpzIDo9IHMzYzI0NDMtYWM5Ny5vCitzbmQtc29jLXMzYy1hYzk3LW9ianMgOj0gczNjLWFjOTcubwogc25kLXNvYy1zM2MtaTJzLXYyLW9ianMgOj0gczNjLWkycy12Mi5vCiBzbmQtc29jLXMzYy1wY20tb2JqcyA6PSBzM2MtcGNtLm8KIAogb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQykgKz0gc25kLXNvYy1zM2MyNHh4Lm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfSTJTKSArPSBzbmQtc29jLXMzYzI0eHgtaTJzLm8KLW9iai0kKENPTkZJR19TTkRfUzNDMjQ0M19TT0NfQUM5NykgKz0gc25kLXNvYy1zM2MyNDQzLWFjOTcubworb2JqLSQoQ09ORklHX1NORF9TM0NfU09DX0FDOTcpICs9IHNuZC1zb2MtczNjLWFjOTcubwogb2JqLSQoQ09ORklHX1NORF9TM0MyNDEyX1NPQ19JMlMpICs9IHNuZC1zb2MtczNjMjQxMi1pMnMubwogb2JqLSQoQ09ORklHX1NORF9TM0M2NFhYX1NPQ19JMlMpICs9IHNuZC1zb2MtczNjNjR4eC1pMnMubwogb2JqLSQoQ09ORklHX1NORF9TM0NfSTJTVjJfU09DKSArPSBzbmQtc29jLXMzYy1pMnMtdjIubwpAQCAtMjYsNiArMjYsNyBAQAogc25kLXNvYy1zM2MyNHh4LXNpbXRlYy1oZXJtZXMtb2JqcyA6PSBzM2MyNHh4X3NpbXRlY19oZXJtZXMubwogc25kLXNvYy1zM2MyNHh4LXNpbXRlYy10bHYzMjBhaWMyMy1vYmpzIDo9IHMzYzI0eHhfc2ltdGVjX3RsdjMyMGFpYzIzLm8KIHNuZC1zb2Mtc21kazY0eHgtd204NTgwLW9ianMgOj0gc21kazY0eHhfd204NTgwLm8KK3NuZC1zb2Mtc21kay13bTk3MTMtb2JqcyA6PSBzbWRrX3dtOTcxMy5vCiAKIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfSklWRV9XTTg3NTApICs9IHNuZC1zb2Mtaml2ZS13bTg3NTAubwogb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19ORU8xOTczX1dNODc1MykgKz0gc25kLXNvYy1uZW8xOTczLXdtODc1My5vCkBAIC0zNyw0ICszOCw0IEBACiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX1NJTVRFQ19IRVJNRVMpICs9IHNuZC1zb2MtczNjMjR4eC1zaW10ZWMtaGVybWVzLm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfU0lNVEVDX1RMVjMyMEFJQzIzKSArPSBzbmQtc29jLXMzYzI0eHgtc2ltdGVjLXRsdjMyMGFpYzIzLm8KIG9iai0kKENPTkZJR19TTkRfUzNDNjRYWF9TT0NfV004NTgwKSArPSBzbmQtc29jLXNtZGs2NHh4LXdtODU4MC5vCi0KK29iai0kKENPTkZJR19TTkRfU09DX1NNREtfV005NzEzKSArPSBzbmQtc29jLXNtZGstd205NzEzLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L2xuMjQ0MHNiY19hbGM2NTAuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L2xuMjQ0MHNiY19hbGM2NTAuYwppbmRleCBkMDBkMzU5Li5mZmE5NTRmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9sbjI0NDBzYmNfYWxjNjUwLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvbG4yNDQwc2JjX2FsYzY1MC5jCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICIuLi9jb2RlY3MvYWM5Ny5oIgogI2luY2x1ZGUgInMzYy1kbWEuaCIKLSNpbmNsdWRlICJzM2MyNHh4LWFjOTcuaCIKKyNpbmNsdWRlICJzM2MtYWM5Ny5oIgogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBsbjI0NDBzYmM7CiAKQEAgLTMzLDcgKzMzLDcgQEAKIHsKIAkubmFtZSA9ICJBQzk3IiwKIAkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKLQkuY3B1X2RhaSA9ICZzM2MyNDQzX2FjOTdfZGFpWzBdLAorCS5jcHVfZGFpID0gJnMzY19hYzk3X2RhaVtTM0NfQUM5N19EQUlfUENNXSwKIAkuY29kZWNfZGFpID0gJmFjOTdfZGFpLAogfSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtYWM5Ny5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZThlZDlkNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmMKQEAgLTAsMCArMSw1MTggQEAKKy8qIHNvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmMKKyAqCisgKiBBTFNBIFNvQyBBdWRpbyBMYXllciAtIFMzQyBBQzk3IENvbnRyb2xsZXIgZHJpdmVyCisgKiAJRXZvbHZlZCBmcm9tIHMzYzI0NDMtYWM5Ny5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uIEx0ZAorICogCUF1dGhvcjogSmFzd2luZGVyIFNpbmdoIDxqYXNzaS5icmFyQHNhbXN1bmcuY29tPgorICogCUNyZWRpdHM6IEdyYWVtZSBHcmVnb3J5LCBTZWFuIENob2kKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3MtYWM5Ny5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgorCisjaW5jbHVkZSAiczNjLWRtYS5oIgorI2luY2x1ZGUgInMzYy1hYzk3LmgiCisKKyNkZWZpbmUgQUNfQ01EX0FERFIoeCkgKHggPDwgMTYpCisjZGVmaW5lIEFDX0NNRF9EQVRBKHgpICh4ICYgMHhmZmZmKQorCitzdHJ1Y3QgczNjX2FjOTdfaW5mbyB7CisJdW5zaWduZWQgICAgICAgICAgIHN0YXRlOworCXN0cnVjdCBjbGsgICAgICAgICAqYWM5N19jbGs7CisJdm9pZCBfX2lvbWVtCSAgICpyZWdzOworCXN0cnVjdCBtdXRleCAgICAgICBsb2NrOworCXN0cnVjdCBjb21wbGV0aW9uICBkb25lOworfTsKK3N0YXRpYyBzdHJ1Y3QgczNjX2FjOTdfaW5mbyBzM2NfYWM5NzsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjX2RtYV9jbGllbnRfb3V0ID0geworCS5uYW1lID0gIkFDOTcgUENNT3V0IgorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjX2RtYV9jbGllbnRfaW4gPSB7CisJLm5hbWUgPSAiQUM5NyBQQ01JbiIKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzY19kbWFfY2xpZW50X21pY2luID0geworCS5uYW1lID0gIkFDOTcgTWljSW4iCit9OworCitzdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzY19hYzk3X3BjbV9vdXQgPSB7CisJLmNsaWVudAkJPSAmczNjX2RtYV9jbGllbnRfb3V0LAorCS5kbWFfc2l6ZQk9IDQsCit9OworCitzdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzY19hYzk3X3BjbV9pbiA9IHsKKwkuY2xpZW50CQk9ICZzM2NfZG1hX2NsaWVudF9pbiwKKwkuZG1hX3NpemUJPSA0LAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfZG1hX3BhcmFtcyBzM2NfYWM5N19taWNfaW4gPSB7CisJLmNsaWVudAkJPSAmczNjX2RtYV9jbGllbnRfbWljaW4sCisJLmRtYV9zaXplCT0gNCwKK307CisKK3N0YXRpYyB2b2lkIHMzY19hYzk3X2FjdGl2YXRlKHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3sKKwl1MzIgYWNfZ2xiY3RybCwgc3RhdDsKKworCXN0YXQgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCU1RBVCkgJiAweDc7CisJaWYgKHN0YXQgPT0gUzNDX0FDOTdfR0xCU1RBVF9NQUlOU1RBVEVfQUNUSVZFKQorCQlyZXR1cm47IC8qIFJldHVybiBpZiBhbHJlYWR5IGFjdGl2ZSAqLworCisJSU5JVF9DT01QTEVUSU9OKHMzY19hYzk3LmRvbmUpOworCisJYWNfZ2xiY3RybCA9IHJlYWRsKHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwlhY19nbGJjdHJsID0gUzNDX0FDOTdfR0xCQ1RSTF9BQ0xJTktPTjsKKwl3cml0ZWwoYWNfZ2xiY3RybCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCW1zbGVlcCgxKTsKKworCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9UUkFOU0ZFUkRBVEFFTkFCTEU7CisJd3JpdGVsKGFjX2dsYmN0cmwsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwltc2xlZXAoMSk7CisKKwlhY19nbGJjdHJsID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9DT0RFQ1JFQURZSUU7CisJd3JpdGVsKGFjX2dsYmN0cmwsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzM2NfYWM5Ny5kb25lLCBIWikpCisJCXByaW50ayhLRVJOX0VSUiAiQUM5NzogVW5hYmxlIHRvIGFjdGl2YXRlISIpOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgczNjX2FjOTdfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJdW5zaWduZWQgc2hvcnQgcmVnKQoreworCXUzMiBhY19nbGJjdHJsLCBhY19jb2RlY19jbWQ7CisJdTMyIHN0YXQsIGFkZHIsIGRhdGE7CisKKwltdXRleF9sb2NrKCZzM2NfYWM5Ny5sb2NrKTsKKworCXMzY19hYzk3X2FjdGl2YXRlKGFjOTcpOworCisJSU5JVF9DT01QTEVUSU9OKHMzY19hYzk3LmRvbmUpOworCisJYWNfY29kZWNfY21kID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0NPREVDX0NNRCk7CisJYWNfY29kZWNfY21kID0gUzNDX0FDOTdfQ09ERUNfQ01EX1JFQUQgfCBBQ19DTURfQUREUihyZWcpOworCXdyaXRlbChhY19jb2RlY19jbWQsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOworCisJdWRlbGF5KDUwKTsKKworCWFjX2dsYmN0cmwgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX0NPREVDUkVBRFlJRTsKKwl3cml0ZWwoYWNfZ2xiY3RybCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnMzY19hYzk3LmRvbmUsIEhaKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJBQzk3OiBVbmFibGUgdG8gcmVhZCEiKTsKKworCXN0YXQgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfU1RBVCk7CisJYWRkciA9IChzdGF0ID4+IDE2KSAmIDB4N2Y7CisJZGF0YSA9IChzdGF0ICYgMHhmZmZmKTsKKworCWlmIChhZGRyICE9IHJlZykKKwkJcHJpbnRrKEtFUk5fRVJSICJzM2MtYWM5NzogcmVxIGFkZHIgPSAlMDJ4LCByZXAgYWRkciA9ICUwMnhcbiIsIHJlZywgYWRkcik7CisKKwltdXRleF91bmxvY2soJnMzY19hYzk3LmxvY2spOworCisJcmV0dXJuICh1bnNpZ25lZCBzaG9ydClkYXRhOworfQorCitzdGF0aWMgdm9pZCBzM2NfYWM5N193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKKwl1bnNpZ25lZCBzaG9ydCB2YWwpCit7CisJdTMyIGFjX2dsYmN0cmwsIGFjX2NvZGVjX2NtZDsKKworCW11dGV4X2xvY2soJnMzY19hYzk3LmxvY2spOworCisJczNjX2FjOTdfYWN0aXZhdGUoYWM5Nyk7CisKKwlJTklUX0NPTVBMRVRJT04oczNjX2FjOTcuZG9uZSk7CisKKwlhY19jb2RlY19jbWQgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKKwlhY19jb2RlY19jbWQgPSBBQ19DTURfQUREUihyZWcpIHwgQUNfQ01EX0RBVEEodmFsKTsKKwl3cml0ZWwoYWNfY29kZWNfY21kLCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKKworCXVkZWxheSg1MCk7CisKKwlhY19nbGJjdHJsID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9DT0RFQ1JFQURZSUU7CisJd3JpdGVsKGFjX2dsYmN0cmwsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzM2NfYWM5Ny5kb25lLCBIWikpCisJCXByaW50ayhLRVJOX0VSUiAiQUM5NzogVW5hYmxlIHRvIHdyaXRlISIpOworCisJYWNfY29kZWNfY21kID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0NPREVDX0NNRCk7CisJYWNfY29kZWNfY21kIHw9IFMzQ19BQzk3X0NPREVDX0NNRF9SRUFEOworCXdyaXRlbChhY19jb2RlY19jbWQsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOworCisJbXV0ZXhfdW5sb2NrKCZzM2NfYWM5Ny5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgczNjX2FjOTdfY29sZF9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCit7CisJd3JpdGVsKFMzQ19BQzk3X0dMQkNUUkxfQ09MRFJFU0VULAorCQkJczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCW1zbGVlcCgxKTsKKworCXdyaXRlbCgwLCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisJbXNsZWVwKDEpOworfQorCitzdGF0aWMgdm9pZCBzM2NfYWM5N193YXJtX3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3sKKwl1MzIgc3RhdDsKKworCXN0YXQgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCU1RBVCkgJiAweDc7CisJaWYgKHN0YXQgPT0gUzNDX0FDOTdfR0xCU1RBVF9NQUlOU1RBVEVfQUNUSVZFKQorCQlyZXR1cm47IC8qIFJldHVybiBpZiBhbHJlYWR5IGFjdGl2ZSAqLworCisJd3JpdGVsKFMzQ19BQzk3X0dMQkNUUkxfV0FSTVJFU0VULCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisJbXNsZWVwKDEpOworCisJd3JpdGVsKDAsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwltc2xlZXAoMSk7CisKKwlzM2NfYWM5N19hY3RpdmF0ZShhYzk3KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHMzY19hYzk3X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdTMyIGFjX2dsYmN0cmwsIGFjX2dsYnN0YXQ7CisKKwlhY19nbGJzdGF0ID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQlNUQVQpOworCisJaWYgKGFjX2dsYnN0YXQgJiBTM0NfQUM5N19HTEJTVEFUX0NPREVDUkVBRFkpIHsKKworCQlhY19nbGJjdHJsID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCQlhY19nbGJjdHJsICY9IH5TM0NfQUM5N19HTEJDVFJMX0NPREVDUkVBRFlJRTsKKwkJd3JpdGVsKGFjX2dsYmN0cmwsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKworCQljb21wbGV0ZSgmczNjX2FjOTcuZG9uZSk7CisJfQorCisJYWNfZ2xiY3RybCA9IHJlYWRsKHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwlhY19nbGJjdHJsIHw9ICgxPDwzMCk7IC8qIENsZWFyIGludGVycnVwdCAqLworCXdyaXRlbChhY19nbGJjdHJsLCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0cnVjdCBzbmRfYWM5N19idXNfb3BzIHNvY19hYzk3X29wcyA9IHsKKwkucmVhZCAgICAgICA9IHMzY19hYzk3X3JlYWQsCisJLndyaXRlICAgICAgPSBzM2NfYWM5N193cml0ZSwKKwkud2FybV9yZXNldCA9IHMzY19hYzk3X3dhcm1fcmVzZXQsCisJLnJlc2V0ICAgICAgPSBzM2NfYWM5N19jb2xkX3Jlc2V0LAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19hYzk3X29wcyk7CisKK3N0YXRpYyBpbnQgczNjX2FjOTdfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjX2FjOTdfcGNtX291dDsKKwllbHNlCisJCWNwdV9kYWktPmRtYV9kYXRhID0gJnMzY19hYzk3X3BjbV9pbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY19hYzk3X3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCisJCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJdTMyIGFjX2dsYmN0cmw7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCWludCBjaGFubmVsID0gKChzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgKikKKwkJICBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGEpLT5jaGFubmVsOworCisJYWNfZ2xiY3RybCA9IHJlYWRsKHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKQorCQlhY19nbGJjdHJsICY9IH5TM0NfQUM5N19HTEJDVFJMX1BDTUlOVE1fTUFTSzsKKwllbHNlCisJCWFjX2dsYmN0cmwgJj0gflMzQ19BQzk3X0dMQkNUUkxfUENNT1VUVE1fTUFTSzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCisJCQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfUENNSU5UTV9ETUE7CisJCWVsc2UKKwkJCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9QQ01PVVRUTV9ETUE7CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWJyZWFrOworCX0KKworCXdyaXRlbChhY19nbGJjdHJsLCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisKKwlzM2MyNDEwX2RtYV9jdHJsKGNoYW5uZWwsIFMzQzI0MTBfRE1BT1BfU1RBUlRFRCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2NfYWM5N19od19taWNfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlyZXR1cm4gLUVOT0RFVjsKKwllbHNlCisJCWNwdV9kYWktPmRtYV9kYXRhID0gJnMzY19hYzk3X21pY19pbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY19hYzk3X21pY190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICBpbnQgY21kLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwl1MzIgYWNfZ2xiY3RybDsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJaW50IGNoYW5uZWwgPSAoKHN0cnVjdCBzM2NfZG1hX3BhcmFtcyAqKQorCQkgIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YSktPmNoYW5uZWw7CisKKwlhY19nbGJjdHJsID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCWFjX2dsYmN0cmwgJj0gflMzQ19BQzk3X0dMQkNUUkxfTUlDSU5UTV9NQVNLOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX01JQ0lOVE1fRE1BOworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlicmVhazsKKwl9CisKKwl3cml0ZWwoYWNfZ2xiY3RybCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCisJczNjMjQxMF9kbWFfY3RybChjaGFubmVsLCBTM0MyNDEwX0RNQU9QX1NUQVJURUQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzY19hYzk3X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHMzY19hYzk3X2h3X3BhcmFtcywKKwkudHJpZ2dlcgk9IHMzY19hYzk3X3RyaWdnZXIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzM2NfYWM5N19taWNfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gczNjX2FjOTdfaHdfbWljX3BhcmFtcywKKwkudHJpZ2dlcgk9IHMzY19hYzk3X21pY190cmlnZ2VyLAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIHMzY19hYzk3X2RhaVtdID0geworCVtTM0NfQUM5N19EQUlfUENNXSA9IHsKKwkJLm5hbWUgPQkiczNjLWFjOTciLAorCQkuaWQgPSBTM0NfQUM5N19EQUlfUENNLAorCQkuYWM5N19jb250cm9sID0gMSwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFDOTcgUGxheWJhY2siLAorCQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCisJCS5jYXB0dXJlID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQ2FwdHVyZSIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKKwkJLm9wcyA9ICZzM2NfYWM5N19kYWlfb3BzLAorCX0sCisJW1MzQ19BQzk3X0RBSV9NSUNdID0geworCQkubmFtZSA9ICJzM2MtYWM5Ny1taWMiLAorCQkuaWQgPSBTM0NfQUM5N19EQUlfTUlDLAorCQkuYWM5N19jb250cm9sID0gMSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBNaWMgQ2FwdHVyZSIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAxLAorCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKKwkJLm9wcyA9ICZzM2NfYWM5N19taWNfZGFpX29wcywKKwl9LAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHMzY19hYzk3X2RhaSk7CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHMzY19hYzk3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICptZW1fcmVzLCAqZG1hdHhfcmVzLCAqZG1hcnhfcmVzLCAqZG1hbWljX3JlcywgKmlycV9yZXM7CisJc3RydWN0IHMzY19hdWRpb19wZGF0YSAqYWM5N19wZGF0YTsKKwlpbnQgcmV0OworCisJYWM5N19wZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghYWM5N19wZGF0YSB8fCAhYWM5N19wZGF0YS0+Y2ZnX2dwaW8pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2ZnX2dwaW8gY2FsbGJhY2sgbm90IHByb3ZpZGVkIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENoZWNrIGZvciBhdmFpbGFiaWxpdHkgb2YgbmVjZXNzYXJ5IHJlc291cmNlICovCisJZG1hdHhfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAwKTsKKwlpZiAoIWRtYXR4X3JlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IEFDOTctVFggZG1hIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlkbWFyeF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOworCWlmICghZG1hcnhfcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgQUM5Ny1SWCBkbWEgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWRtYW1pY19yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDIpOworCWlmICghZG1hbWljX3JlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IEFDOTctTUlDIGRtYSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJbWVtX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFtZW1fcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgcmVnaXN0ZXIgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlycV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghaXJxX3JlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJBQzk3IElSUSBub3QgcHJvdmlkZWQhXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwKKwkJCQlyZXNvdXJjZV9zaXplKG1lbV9yZXMpLCAiczNjLWFjOTciKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gcmVxdWVzdCByZWdpc3RlciByZWdpb25cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXMzY19hYzk3X3BjbV9vdXQuY2hhbm5lbCA9IGRtYXR4X3Jlcy0+c3RhcnQ7CisJczNjX2FjOTdfcGNtX291dC5kbWFfYWRkciA9IG1lbV9yZXMtPnN0YXJ0ICsgUzNDX0FDOTdfUENNX0RBVEE7CisJczNjX2FjOTdfcGNtX2luLmNoYW5uZWwgPSBkbWFyeF9yZXMtPnN0YXJ0OworCXMzY19hYzk3X3BjbV9pbi5kbWFfYWRkciA9IG1lbV9yZXMtPnN0YXJ0ICsgUzNDX0FDOTdfUENNX0RBVEE7CisJczNjX2FjOTdfbWljX2luLmNoYW5uZWwgPSBkbWFtaWNfcmVzLT5zdGFydDsKKwlzM2NfYWM5N19taWNfaW4uZG1hX2FkZHIgPSBtZW1fcmVzLT5zdGFydCArIFMzQ19BQzk3X01JQ19EQVRBOworCisJaW5pdF9jb21wbGV0aW9uKCZzM2NfYWM5Ny5kb25lKTsKKwltdXRleF9pbml0KCZzM2NfYWM5Ny5sb2NrKTsKKworCXMzY19hYzk3LnJlZ3MgPSBpb3JlbWFwKG1lbV9yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbV9yZXMpKTsKKwlpZiAoczNjX2FjOTcucmVncyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBpb3JlbWFwIHJlZ2lzdGVyIHJlZ2lvblxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnIxOworCX0KKworCXMzY19hYzk3LmFjOTdfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiYWM5NyIpOworCWlmIChJU19FUlIoczNjX2FjOTcuYWM5N19jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInMzYy1hYzk3IGZhaWxlZCB0byBnZXQgYWM5N19jbG9ja1xuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyMjsKKwl9CisJY2xrX2VuYWJsZShzM2NfYWM5Ny5hYzk3X2Nsayk7CisKKwlpZiAoYWM5N19wZGF0YS0+Y2ZnX2dwaW8ocGRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGNvbmZpZ3VyZSBncGlvXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnIzOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycV9yZXMtPnN0YXJ0LCBzM2NfYWM5N19pcnEsCisJCQkJCUlSUUZfRElTQUJMRUQsICJBQzk3IiwgTlVMTCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzM2MtYWM5NzogaW50ZXJydXB0IHJlcXVlc3QgZmFpbGVkLlxuIik7CisJCWdvdG8gZXJyNDsKKwl9CisKKwlzM2NfYWM5N19kYWlbUzNDX0FDOTdfREFJX1BDTV0uZGV2ID0gJnBkZXYtPmRldjsKKwlzM2NfYWM5N19kYWlbUzNDX0FDOTdfREFJX01JQ10uZGV2ID0gJnBkZXYtPmRldjsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyhzM2NfYWM5N19kYWksIEFSUkFZX1NJWkUoczNjX2FjOTdfZGFpKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI1OworCisJcmV0dXJuIDA7CisKK2VycjU6CisJZnJlZV9pcnEoaXJxX3Jlcy0+c3RhcnQsIE5VTEwpOworZXJyNDoKK2VycjM6CisJY2xrX2Rpc2FibGUoczNjX2FjOTcuYWM5N19jbGspOworCWNsa19wdXQoczNjX2FjOTcuYWM5N19jbGspOworZXJyMjoKKwlpb3VubWFwKHMzY19hYzk3LnJlZ3MpOworZXJyMToKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtX3Jlcy0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtX3JlcykpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgczNjX2FjOTdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICptZW1fcmVzLCAqaXJxX3JlczsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHMzY19hYzk3X2RhaSwgQVJSQVlfU0laRShzM2NfYWM5N19kYWkpKTsKKworCWlycV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChpcnFfcmVzKQorCQlmcmVlX2lycShpcnFfcmVzLT5zdGFydCwgTlVMTCk7CisKKwljbGtfZGlzYWJsZShzM2NfYWM5Ny5hYzk3X2Nsayk7CisJY2xrX3B1dChzM2NfYWM5Ny5hYzk3X2Nsayk7CisKKwlpb3VubWFwKHMzY19hYzk3LnJlZ3MpOworCisJbWVtX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKG1lbV9yZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW1fcmVzKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjX2FjOTdfZHJpdmVyID0geworCS5wcm9iZSAgPSBzM2NfYWM5N19wcm9iZSwKKwkucmVtb3ZlID0gczNjX2FjOTdfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInMzYy1hYzk3IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHMzY19hYzk3X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2NfYWM5N19kcml2ZXIpOworfQorbW9kdWxlX2luaXQoczNjX2FjOTdfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzM2NfYWM5N19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzY19hYzk3X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzM2NfYWM5N19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSmFzd2luZGVyIFNpbmdoLCA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUM5NyBkcml2ZXIgZm9yIHRoZSBTYW1zdW5nIFNvQyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuaCBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4MTk4MwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmgKQEAgLTAsMCArMSwyMyBAQAorLyogc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuaAorICoKKyAqIEFMU0EgU29DIEF1ZGlvIExheWVyIC0gUzNDIEFDOTcgQ29udHJvbGxlciBkcml2ZXIKKyAqIAlFdm9sdmVkIGZyb20gczNjMjQ0My1hYzk3LmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4gTHRkCisgKiAJQXV0aG9yOiBKYXN3aW5kZXIgU2luZ2ggPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+CisgKiAJQ3JlZGl0czogR3JhZW1lIEdyZWdvcnksIFNlYW4gQ2hvaQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX1MzQ19BQzk3X0hfCisjZGVmaW5lIF9fUzNDX0FDOTdfSF8KKworI2RlZmluZSBTM0NfQUM5N19EQUlfUENNIDAKKyNkZWZpbmUgUzNDX0FDOTdfREFJX01JQyAxCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgczNjX2FjOTdfZGFpW107CisKKyNlbmRpZiAvKiBfX1MzQ19BQzk3X0hfICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtcGNtLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MtcGNtLmMKaW5kZXggOWU2MWE3Yy4uYTk4ZjQwYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1wY20uYwpAQCAtMjI5LDggKzIyOSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY20tPmxvY2ssIGZsYWdzKTsKIAotCWRldl9kYmcocGNtLT5kZXYsICJQQ01TT1VSQ0VfQ0xLLSVsdSBTQ0xLPSV1ZnMgXAotCQkJCVNDTEtfRElWPSVkIFNZTkNfRElWPSVkXG4iLAorCWRldl9kYmcocGNtLT5kZXYsICJQQ01TT1VSQ0VfQ0xLLSVsdSBTQ0xLPSV1ZnMgU0NMS19ESVY9JWQgU1lOQ19ESVY9JWRcbiIsCiAJCQkJY2xrX2dldF9yYXRlKGNsayksIHBjbS0+c2Nsa19wZXJfZnMsCiAJCQkJc2Nsa19kaXYsIHN5bmNfZGl2KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjQ0My1hYzk3LmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDQzLWFjOTcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE5MWUzYS4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDQzLWFjOTcuYworKysgL2Rldi9udWxsCkBAIC0xLDQzMiArMCwwIEBACi0vKgotICogczNjMjQ0My1hYzk3LmMgIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgotICoKLSAqIChjKSAyMDA3IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCi0gKiBHcmFlbWUgR3JlZ29yeSBncmFlbWUuZ3JlZ29yeUB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LCBTZWFuIENob2kgPHNoNDI4LmNob2lAc2Ftc3VuZy5jb20+Ci0gKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxwbGF0L3JlZ3MtYWM5Ny5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPG1hY2gvZG1hLmg+Ci0KLSNpbmNsdWRlICJzM2MtZG1hLmgiCi0jaW5jbHVkZSAiczNjMjR4eC1hYzk3LmgiCi0KLXN0cnVjdCBzM2MyNHh4X2FjOTdfaW5mbyB7Ci0Jdm9pZCBfX2lvbWVtCSpyZWdzOwotCXN0cnVjdCBjbGsJKmFjOTdfY2xrOwotfTsKLXN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9hYzk3X2luZm8gczNjMjR4eF9hYzk3OwotCi1zdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGFjOTdfY29tcGxldGlvbik7Ci1zdGF0aWMgdTMyIGNvZGVjX3JlYWR5Owotc3RhdGljIERFRklORV9NVVRFWChhYzk3X211dGV4KTsKLQotc3RhdGljIHVuc2lnbmVkIHNob3J0IHMzYzI0NDNfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKLQl1bnNpZ25lZCBzaG9ydCByZWcpCi17Ci0JdTMyIGFjX2dsYmN0cmw7Ci0JdTMyIGFjX2NvZGVjX2NtZDsKLQl1MzIgc3RhdCwgYWRkciwgZGF0YTsKLQotCW11dGV4X2xvY2soJmFjOTdfbXV0ZXgpOwotCi0JY29kZWNfcmVhZHkgPSBTM0NfQUM5N19HTEJTVEFUX0NPREVDUkVBRFk7Ci0JYWNfY29kZWNfY21kID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOwotCWFjX2NvZGVjX2NtZCA9IFMzQ19BQzk3X0NPREVDX0NNRF9SRUFEIHwgQUNfQ01EX0FERFIocmVnKTsKLQl3cml0ZWwoYWNfY29kZWNfY21kLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0NPREVDX0NNRCk7Ci0KLQl1ZGVsYXkoNTApOwotCi0JYWNfZ2xiY3RybCA9IHJlYWRsKHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX0NPREVDUkVBRFlJRTsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFjOTdfY29tcGxldGlvbik7Ci0KLQlzdGF0ID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19TVEFUKTsKLQlhZGRyID0gKHN0YXQgPj4gMTYpICYgMHg3ZjsKLQlkYXRhID0gKHN0YXQgJiAweGZmZmYpOwotCi0JaWYgKGFkZHIgIT0gcmVnKQotCQlwcmludGsoS0VSTl9FUlIgInMzYzI0eHgtYWM5NzogcmVxIGFkZHIgPSAlMDJ4LCIKLQkJCQkiIHJlcCBhZGRyID0gJTAyeFxuIiwgcmVnLCBhZGRyKTsKLQotCW11dGV4X3VubG9jaygmYWM5N19tdXRleCk7Ci0KLQlyZXR1cm4gKHVuc2lnbmVkIHNob3J0KWRhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzYzI0NDNfYWM5N193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKLQl1bnNpZ25lZCBzaG9ydCB2YWwpCi17Ci0JdTMyIGFjX2dsYmN0cmw7Ci0JdTMyIGFjX2NvZGVjX2NtZDsKLQotCW11dGV4X2xvY2soJmFjOTdfbXV0ZXgpOwotCi0JY29kZWNfcmVhZHkgPSBTM0NfQUM5N19HTEJTVEFUX0NPREVDUkVBRFk7Ci0JYWNfY29kZWNfY21kID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOwotCWFjX2NvZGVjX2NtZCA9IEFDX0NNRF9BRERSKHJlZykgfCBBQ19DTURfREFUQSh2YWwpOwotCXdyaXRlbChhY19jb2RlY19jbWQsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKLQotCXVkZWxheSg1MCk7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfQ09ERUNSRUFEWUlFOwotCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCi0Jd2FpdF9mb3JfY29tcGxldGlvbigmYWM5N19jb21wbGV0aW9uKTsKLQotCWFjX2NvZGVjX2NtZCA9IHJlYWRsKHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKLQlhY19jb2RlY19jbWQgfD0gUzNDX0FDOTdfQ09ERUNfQ01EX1JFQUQ7Ci0Jd3JpdGVsKGFjX2NvZGVjX2NtZCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOwotCi0JbXV0ZXhfdW5sb2NrKCZhYzk3X211dGV4KTsKLQotfQotCi1zdGF0aWMgdm9pZCBzM2MyNDQzX2FjOTdfd2FybV9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCi17Ci0JdTMyIGFjX2dsYmN0cmw7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlhY19nbGJjdHJsID0gUzNDX0FDOTdfR0xCQ1RSTF9XQVJNUkVTRVQ7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JbXNsZWVwKDEpOwotCi0JYWNfZ2xiY3RybCA9IDA7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JbXNsZWVwKDEpOwotfQotCi1zdGF0aWMgdm9pZCBzM2MyNDQzX2FjOTdfY29sZF9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCi17Ci0JdTMyIGFjX2dsYmN0cmw7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlhY19nbGJjdHJsID0gUzNDX0FDOTdfR0xCQ1RSTF9DT0xEUkVTRVQ7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JbXNsZWVwKDEpOwotCi0JYWNfZ2xiY3RybCA9IDA7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JbXNsZWVwKDEpOwotCi0JYWNfZ2xiY3RybCA9IHJlYWRsKHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JYWNfZ2xiY3RybCA9IFMzQ19BQzk3X0dMQkNUUkxfQUNMSU5LT047Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JbXNsZWVwKDEpOwotCi0JYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX1RSQU5TRkVSREFUQUVOQUJMRTsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfUENNT1VUVE1fRE1BIHwKLQkJUzNDX0FDOTdfR0xCQ1RSTF9QQ01JTlRNX0RNQSB8IFMzQ19BQzk3X0dMQkNUUkxfTUlDSU5UTV9ETUE7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBzM2MyNDQzX2FjOTdfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlpbnQgc3RhdHVzOwotCXUzMiBhY19nbGJjdHJsOwotCi0Jc3RhdHVzID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJTVEFUKSAmIGNvZGVjX3JlYWR5OwotCi0JaWYgKHN0YXR1cykgewotCQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQkJYWNfZ2xiY3RybCAmPSB+UzNDX0FDOTdfR0xCQ1RSTF9DT0RFQ1JFQURZSUU7Ci0JCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCQljb21wbGV0ZSgmYWM5N19jb21wbGV0aW9uKTsKLQl9Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdHJ1Y3Qgc25kX2FjOTdfYnVzX29wcyBzb2NfYWM5N19vcHMgPSB7Ci0JLnJlYWQJPSBzM2MyNDQzX2FjOTdfcmVhZCwKLQkud3JpdGUJPSBzM2MyNDQzX2FjOTdfd3JpdGUsCi0JLndhcm1fcmVzZXQJPSBzM2MyNDQzX2FjOTdfd2FybV9yZXNldCwKLQkucmVzZXQJPSBzM2MyNDQzX2FjOTdfY29sZF9yZXNldCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzI0NDNfZG1hX2NsaWVudF9vdXQgPSB7Ci0JLm5hbWUgPSAiQUM5NyBQQ00gU3RlcmVvIG91dCIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzI0NDNfZG1hX2NsaWVudF9pbiA9IHsKLQkubmFtZSA9ICJBQzk3IFBDTSBTdGVyZW8gaW4iCi19OwotCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2MyNDQzX2RtYV9jbGllbnRfbWljaW4gPSB7Ci0JLm5hbWUgPSAiQUM5NyBNaWMgTW9ubyBpbiIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgczNjMjQ0M19hYzk3X3BjbV9zdGVyZW9fb3V0ID0gewotCS5jbGllbnQJCT0gJnMzYzI0NDNfZG1hX2NsaWVudF9vdXQsCi0JLmNoYW5uZWwJPSBETUFDSF9QQ01fT1VULAotCS5kbWFfYWRkcgk9IFMzQzI0NDBfUEFfQUM5NyArIFMzQ19BQzk3X1BDTV9EQVRBLAotCS5kbWFfc2l6ZQk9IDQsCi19OwotCi1zdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzYzI0NDNfYWM5N19wY21fc3RlcmVvX2luID0gewotCS5jbGllbnQJCT0gJnMzYzI0NDNfZG1hX2NsaWVudF9pbiwKLQkuY2hhbm5lbAk9IERNQUNIX1BDTV9JTiwKLQkuZG1hX2FkZHIJPSBTM0MyNDQwX1BBX0FDOTcgKyBTM0NfQUM5N19QQ01fREFUQSwKLQkuZG1hX3NpemUJPSA0LAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfZG1hX3BhcmFtcyBzM2MyNDQzX2FjOTdfbWljX21vbm9faW4gPSB7Ci0JLmNsaWVudAkJPSAmczNjMjQ0M19kbWFfY2xpZW50X21pY2luLAotCS5jaGFubmVsCT0gRE1BQ0hfTUlDX0lOLAotCS5kbWFfYWRkcgk9IFMzQzI0NDBfUEFfQUM5NyArIFMzQ19BQzk3X01JQ19EQVRBLAotCS5kbWFfc2l6ZQk9IDQsCi19OwotCi1zdGF0aWMgaW50IHMzYzI0NDNfYWM5N19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0JaW50IHJldDsKLQl1MzIgYWNfZ2xiY3RybDsKLQotCXMzYzI0eHhfYWM5Ny5yZWdzID0gaW9yZW1hcChTM0MyNDQwX1BBX0FDOTcsIDB4MTAwKTsKLQlpZiAoczNjMjR4eF9hYzk3LnJlZ3MgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTlhJTzsKLQotCXMzYzI0eHhfYWM5Ny5hYzk3X2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImFjOTciKTsKLQlpZiAoczNjMjR4eF9hYzk3LmFjOTdfY2xrID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzM2MyNDQzLWFjOTcgZmFpbGVkIHRvIGdldCBhYzk3X2Nsb2NrXG4iKTsKLQkJaW91bm1hcChzM2MyNHh4X2FjOTcucmVncyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQljbGtfZW5hYmxlKHMzYzI0eHhfYWM5Ny5hYzk3X2Nsayk7Ci0KLQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMCwgUzNDMjQ0M19HUEUwX0FDX25SRVNFVCk7Ci0JczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTEsIFMzQzI0NDNfR1BFMV9BQ19TWU5DKTsKLQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMiwgUzNDMjQ0M19HUEUyX0FDX0JJVENMSyk7Ci0JczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTMsIFMzQzI0NDNfR1BFM19BQ19TREkpOwotCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEU0LCBTM0MyNDQzX0dQRTRfQUNfU0RPKTsKLQotCWFjX2dsYmN0cmwgPSByZWFkbChzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCWFjX2dsYmN0cmwgPSBTM0NfQUM5N19HTEJDVFJMX0NPTERSRVNFVDsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsID0gMDsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlhY19nbGJjdHJsID0gUzNDX0FDOTdfR0xCQ1RSTF9BQ0xJTktPTjsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfVFJBTlNGRVJEQVRBRU5BQkxFOwotCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCi0JcmV0ID0gcmVxdWVzdF9pcnEoSVJRX1MzQzI0NHhfQUM5NywgczNjMjQ0M19hYzk3X2lycSwKLQkJSVJRRl9ESVNBQkxFRCwgIkFDOTciLCBOVUxMKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgInMzYzI0eHgtYWM5NzogaW50ZXJydXB0IHJlcXVlc3QgZmFpbGVkLlxuIik7Ci0JCWNsa19kaXNhYmxlKHMzYzI0eHhfYWM5Ny5hYzk3X2Nsayk7Ci0JCWNsa19wdXQoczNjMjR4eF9hYzk3LmFjOTdfY2xrKTsKLQkJaW91bm1hcChzM2MyNHh4X2FjOTcucmVncyk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzYzI0NDNfYWM5N19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlmcmVlX2lycShJUlFfUzNDMjQ0eF9BQzk3LCBOVUxMKTsKLQljbGtfZGlzYWJsZShzM2MyNHh4X2FjOTcuYWM5N19jbGspOwotCWNsa19wdXQoczNjMjR4eF9hYzk3LmFjOTdfY2xrKTsKLQlpb3VubWFwKHMzYzI0eHhfYWM5Ny5yZWdzKTsKLX0KLQotc3RhdGljIGludCBzM2MyNDQzX2FjOTdfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCi0JCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0KLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjMjQ0M19hYzk3X3BjbV9zdGVyZW9fb3V0OwotCWVsc2UKLQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjMjQ0M19hYzk3X3BjbV9zdGVyZW9faW47Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2MyNDQzX2FjOTdfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKLQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQl1MzIgYWNfZ2xiY3RybDsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0JaW50IGNoYW5uZWwgPSAoKHN0cnVjdCBzM2NfZG1hX3BhcmFtcyAqKQotCQkgIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YSktPmNoYW5uZWw7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKQotCQkJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX1BDTUlOVE1fRE1BOwotCQllbHNlCi0JCQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfUENNT1VUVE1fRE1BOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLQkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkKLQkJCWFjX2dsYmN0cmwgJj0gflMzQ19BQzk3X0dMQkNUUkxfUENNSU5UTV9NQVNLOwotCQllbHNlCi0JCQlhY19nbGJjdHJsICY9IH5TM0NfQUM5N19HTEJDVFJMX1BDTU9VVFRNX01BU0s7Ci0JCWJyZWFrOwotCX0KLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQotCXMzYzI0MTBfZG1hX2N0cmwoY2hhbm5lbCwgUzNDMjQxMF9ETUFPUF9TVEFSVEVEKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0NDNfYWM5N19od19taWNfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJCSAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQotCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQlyZXR1cm4gLUVOT0RFVjsKLQllbHNlCi0JCWNwdV9kYWktPmRtYV9kYXRhID0gJnMzYzI0NDNfYWM5N19taWNfbW9ub19pbjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0NDNfYWM5N19taWNfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgICAgaW50IGNtZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0JdTMyIGFjX2dsYmN0cmw7Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCWludCBjaGFubmVsID0gKChzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgKikKLQkJICBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGEpLT5jaGFubmVsOwotCi0JYWNfZ2xiY3RybCA9IHJlYWRsKHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKLQkJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX1BDTUlOVE1fRE1BOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLQkJYWNfZ2xiY3RybCAmPSB+UzNDX0FDOTdfR0xCQ1RSTF9QQ01JTlRNX01BU0s7Ci0JfQotCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCi0JczNjMjQxMF9kbWFfY3RybChjaGFubmVsLCBTM0MyNDEwX0RNQU9QX1NUQVJURUQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgczNjMjQ0M19BQzk3X1JBVEVTIChTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTEwMjUgfFwKLQkJU05EUlZfUENNX1JBVEVfMTYwMDAgfCBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFwKLQkJU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCkKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgczNjMjQ0M19hYzk3X2RhaV9vcHMgPSB7Ci0JLmh3X3BhcmFtcwk9IHMzYzI0NDNfYWM5N19od19wYXJhbXMsCi0JLnRyaWdnZXIJPSBzM2MyNDQzX2FjOTdfdHJpZ2dlciwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzYzI0NDNfYWM5N19taWNfZGFpX29wcyA9IHsKLQkuaHdfcGFyYW1zCT0gczNjMjQ0M19hYzk3X2h3X21pY19wYXJhbXMsCi0JLnRyaWdnZXIJPSBzM2MyNDQzX2FjOTdfbWljX3RyaWdnZXIsCi19OwotCi1zdHJ1Y3Qgc25kX3NvY19kYWkgczNjMjQ0M19hYzk3X2RhaVtdID0gewotewotCS5uYW1lID0gInMzYzI0NDMtYWM5NyIsCi0JLmlkID0gMCwKLQkuYWM5N19jb250cm9sID0gMSwKLQkucHJvYmUgPSBzM2MyNDQzX2FjOTdfcHJvYmUsCi0JLnJlbW92ZSA9IHMzYzI0NDNfYWM5N19yZW1vdmUsCi0JLnBsYXliYWNrID0gewotCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBQbGF5YmFjayIsCi0JCS5jaGFubmVsc19taW4gPSAyLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gczNjMjQ0M19BQzk3X1JBVEVTLAotCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLmNhcHR1cmUgPSB7Ci0JCS5zdHJlYW1fbmFtZSA9ICJBQzk3IENhcHR1cmUiLAotCQkuY2hhbm5lbHNfbWluID0gMiwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5yYXRlcyA9IHMzYzI0NDNfQUM5N19SQVRFUywKLQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSAmczNjMjQ0M19hYzk3X2RhaV9vcHMsCi19LAotewotCS5uYW1lID0gInB4YTJ4eC1hYzk3LW1pYyIsCi0JLmlkID0gMSwKLQkuYWM5N19jb250cm9sID0gMSwKLQkuY2FwdHVyZSA9IHsKLQkJLnN0cmVhbV9uYW1lID0gIkFDOTcgTWljIENhcHR1cmUiLAotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDEsCi0JCS5yYXRlcyA9IHMzYzI0NDNfQUM5N19SQVRFUywKLQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSAmczNjMjQ0M19hYzk3X21pY19kYWlfb3BzLAotfSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChzM2MyNDQzX2FjOTdfZGFpKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHNvY19hYzk3X29wcyk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHMzYzI0NDNfYWM5N19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyhzM2MyNDQzX2FjOTdfZGFpLAotCQkJCSAgICAgQVJSQVlfU0laRShzM2MyNDQzX2FjOTdfZGFpKSk7Ci19Ci1tb2R1bGVfaW5pdChzM2MyNDQzX2FjOTdfaW5pdCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzM2MyNDQzX2FjOTdfZXhpdCh2b2lkKQotewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHMzYzI0NDNfYWM5N19kYWksCi0JCQkJQVJSQVlfU0laRShzM2MyNDQzX2FjOTdfZGFpKSk7Ci19Ci1tb2R1bGVfZXhpdChzM2MyNDQzX2FjOTdfZXhpdCk7Ci0KLQotTU9EVUxFX0FVVEhPUigiR3JhZW1lIEdyZWdvcnkiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQUM5NyBkcml2ZXIgZm9yIHRoZSBTYW1zdW5nIHMzYzI0NDMgY2hpcCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1hYzk3LmggYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWFjOTcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk2Zjk0MS4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWFjOTcuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiBzM2MyNHh4LWFjOTcuYyAgLS0gIEFMU0EgU29jIEF1ZGlvIExheWVyCi0gKgotICogKGMpIDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogR3JhZW1lIEdyZWdvcnkKLSAqICAgICAgICAgZ3JhZW1lLmdyZWdvcnlAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFJldmlzaW9uIGhpc3RvcnkKLSAqICAgIDEwdGggTm92IDIwMDYgICBJbml0aWFsIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBTM0MyNFhYQUM5N19IXwotI2RlZmluZSBTM0MyNFhYQUM5N19IXwotCi0jZGVmaW5lIEFDX0NNRF9BRERSKHgpICh4IDw8IDE2KQotI2RlZmluZSBBQ19DTURfREFUQSh4KSAoeCAmIDB4ZmZmZikKLQotZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBzM2MyNDQzX2FjOTdfZGFpW107Ci0KLSNlbmRpZiAvKlMzQzI0WFhBQzk3X0hfKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCmluZGV4IGNjN2VkYjUuLjkzZWQzYWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYwpAQCAtMTUsMTYgKzE1LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KIAogI2luY2x1ZGUgPHBsYXQvcmVncy1zM2MyNDEyLWlpcy5oPgpAQCAtMzgsNiArMzIsMTEgQEAKICNpbmNsdWRlICJzM2MtZG1hLmgiCiAjaW5jbHVkZSAiczNjNjR4eC1pMnMuaCIKIAorLyogVGhlIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gbWF4aW11bSBvZiB0aGUgdG90YWwgbnVtYmVyCisgKiBvZiBJMlN2MyBjb250cm9sbGVycyB0aGF0IGFueSBzdXBwb3J0ZWQgU29DIGhhcy4KKyAqLworI2RlZmluZSBNQVhfSTJTVjMJMgorCiBzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2M2NHh4X2RtYV9jbGllbnRfb3V0ID0gewogCS5uYW1lCQk9ICJJMlMgUENNIFN0ZXJlbyBvdXQiCiB9OwpAQCAtNDYsMzcgKzQ1LDEyIEBACiAJLm5hbWUJCT0gIkkyUyBQQ00gU3RlcmVvIGluIgogfTsKIAotc3RhdGljIHN0cnVjdCBzM2NfZG1hX3BhcmFtcyBzM2M2NHh4X2kyc19wY21fc3RlcmVvX291dFsyXSA9IHsKLQlbMF0gPSB7Ci0JCS5jaGFubmVsCT0gRE1BQ0hfSTJTMF9PVVQsCi0JCS5jbGllbnQJCT0gJnMzYzY0eHhfZG1hX2NsaWVudF9vdXQsCi0JCS5kbWFfYWRkcgk9IFMzQzY0WFhfUEFfSUlTMCArIFMzQzI0MTJfSUlTVFhELAotCQkuZG1hX3NpemUJPSA0LAotCX0sCi0JWzFdID0gewotCQkuY2hhbm5lbAk9IERNQUNIX0kyUzFfT1VULAotCQkuY2xpZW50CQk9ICZzM2M2NHh4X2RtYV9jbGllbnRfb3V0LAotCQkuZG1hX2FkZHIJPSBTM0M2NFhYX1BBX0lJUzEgKyBTM0MyNDEyX0lJU1RYRCwKLQkJLmRtYV9zaXplCT0gNCwKLQl9LAotfTsKK3N0YXRpYyBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19vdXRbTUFYX0kyU1YzXTsKK3N0YXRpYyBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19pbltNQVhfSTJTVjNdOworc3RhdGljIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyBzM2M2NHh4X2kyc1tNQVhfSTJTVjNdOwogCi1zdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzYzY0eHhfaTJzX3BjbV9zdGVyZW9faW5bMl0gPSB7Ci0JWzBdID0gewotCQkuY2hhbm5lbAk9IERNQUNIX0kyUzBfSU4sCi0JCS5jbGllbnQJCT0gJnMzYzY0eHhfZG1hX2NsaWVudF9pbiwKLQkJLmRtYV9hZGRyCT0gUzNDNjRYWF9QQV9JSVMwICsgUzNDMjQxMl9JSVNSWEQsCi0JCS5kbWFfc2l6ZQk9IDQsCi0JfSwKLQlbMV0gPSB7Ci0JCS5jaGFubmVsCT0gRE1BQ0hfSTJTMV9JTiwKLQkJLmNsaWVudAkJPSAmczNjNjR4eF9kbWFfY2xpZW50X2luLAotCQkuZG1hX2FkZHIJPSBTM0M2NFhYX1BBX0lJUzEgKyBTM0MyNDEyX0lJU1JYRCwKLQkJLmRtYV9zaXplCT0gNCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyBzM2M2NHh4X2kyc1syXTsKK3N0cnVjdCBzbmRfc29jX2RhaSBzM2M2NHh4X2kyc19kYWlbTUFYX0kyU1YzXTsKK0VYUE9SVF9TWU1CT0xfR1BMKHMzYzY0eHhfaTJzX2RhaSk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHMzY19pMnN2Ml9pbmZvICp0b19pbmZvKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKIHsKQEAgLTE2OSw1NSArMTQzLDEzIEBACiAJLnNldF9zeXNjbGsJPSBzM2M2NHh4X2kyc19zZXRfc3lzY2xrLAkKIH07CiAKLXN0cnVjdCBzbmRfc29jX2RhaSBzM2M2NHh4X2kyc19kYWlbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJzM2M2NHh4LWkycyIsCi0JCS5pZAkJPSAwLAotCQkucHJvYmUJCT0gczNjNjR4eF9pMnNfcHJvYmUsCi0JCS5wbGF5YmFjayA9IHsKLQkJCS5jaGFubmVsc19taW4JPSAyLAotCQkJLmNoYW5uZWxzX21heAk9IDIsCi0JCQkucmF0ZXMJCT0gUzNDNjRYWF9JMlNfUkFURVMsCi0JCQkuZm9ybWF0cwk9IFMzQzY0WFhfSTJTX0ZNVFMsCi0JCX0sCi0JCS5jYXB0dXJlID0gewotCQkJIC5jaGFubmVsc19taW4JPSAyLAotCQkJIC5jaGFubmVsc19tYXgJPSAyLAotCQkJIC5yYXRlcwkJPSBTM0M2NFhYX0kyU19SQVRFUywKLQkJCSAuZm9ybWF0cwk9IFMzQzY0WFhfSTJTX0ZNVFMsCi0JCSB9LAotCQkub3BzID0gJnMzYzY0eHhfaTJzX2RhaV9vcHMsCi0JCS5zeW1tZXRyaWNfcmF0ZXMgPSAxLAotCX0sCi0JewotCQkubmFtZQkJPSAiczNjNjR4eC1pMnMiLAotCQkuaWQJCT0gMSwKLQkJLnByb2JlCQk9IHMzYzY0eHhfaTJzX3Byb2JlLAotCQkucGxheWJhY2sgPSB7Ci0JCQkuY2hhbm5lbHNfbWluCT0gMiwKLQkJCS5jaGFubmVsc19tYXgJPSAyLAotCQkJLnJhdGVzCQk9IFMzQzY0WFhfSTJTX1JBVEVTLAotCQkJLmZvcm1hdHMJPSBTM0M2NFhYX0kyU19GTVRTLAotCQl9LAotCQkuY2FwdHVyZSA9IHsKLQkJCSAuY2hhbm5lbHNfbWluCT0gMiwKLQkJCSAuY2hhbm5lbHNfbWF4CT0gMiwKLQkJCSAucmF0ZXMJCT0gUzNDNjRYWF9JMlNfUkFURVMsCi0JCQkgLmZvcm1hdHMJPSBTM0M2NFhYX0kyU19GTVRTLAotCQkgfSwKLQkJLm9wcyA9ICZzM2M2NHh4X2kyc19kYWlfb3BzLAotCQkuc3ltbWV0cmljX3JhdGVzID0gMSwKLQl9LAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKHMzYzY0eHhfaTJzX2RhaSk7Ci0KIHN0YXRpYyBfX2RldmluaXQgaW50IHMzYzY0eHhfaWlzX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpOwogCWludCByZXQ7CiAKLQlpZiAocGRldi0+aWQgPj0gQVJSQVlfU0laRShzM2M2NHh4X2kycykpIHsKKwlpZiAocGRldi0+aWQgPj0gTUFYX0kyU1YzKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImlkICVkIG91dCBvZiByYW5nZVxuIiwgcGRldi0+aWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yMjUsMTAgKzE1Nyw0MCBAQAogCWkycyA9ICZzM2M2NHh4X2kyc1twZGV2LT5pZF07CiAJZGFpID0gJnMzYzY0eHhfaTJzX2RhaVtwZGV2LT5pZF07CiAJZGFpLT5kZXYgPSAmcGRldi0+ZGV2OworCWRhaS0+bmFtZSA9ICJzM2M2NHh4LWkycyI7CisJZGFpLT5pZCA9IHBkZXYtPmlkOworCWRhaS0+c3ltbWV0cmljX3JhdGVzID0gMTsKKwlkYWktPnBsYXliYWNrLmNoYW5uZWxzX21pbiA9IDI7CisJZGFpLT5wbGF5YmFjay5jaGFubmVsc19tYXggPSAyOworCWRhaS0+cGxheWJhY2sucmF0ZXMgPSBTM0M2NFhYX0kyU19SQVRFUzsKKwlkYWktPnBsYXliYWNrLmZvcm1hdHMgPSBTM0M2NFhYX0kyU19GTVRTOworCWRhaS0+Y2FwdHVyZS5jaGFubmVsc19taW4gPSAyOworCWRhaS0+Y2FwdHVyZS5jaGFubmVsc19tYXggPSAyOworCWRhaS0+Y2FwdHVyZS5yYXRlcyA9IFMzQzY0WFhfSTJTX1JBVEVTOworCWRhaS0+Y2FwdHVyZS5mb3JtYXRzID0gUzNDNjRYWF9JMlNfRk1UUzsKKwlkYWktPnByb2JlID0gczNjNjR4eF9pMnNfcHJvYmU7CisJZGFpLT5vcHMgPSAmczNjNjR4eF9pMnNfZGFpX29wczsKIAogCWkycy0+ZG1hX2NhcHR1cmUgPSAmczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19pbltwZGV2LT5pZF07CiAJaTJzLT5kbWFfcGxheWJhY2sgPSAmczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19vdXRbcGRldi0+aWRdOwogCisJaWYgKHBkZXYtPmlkID09IDApIHsKKwkJaTJzLT5kbWFfY2FwdHVyZS0+Y2hhbm5lbCA9IERNQUNIX0kyUzBfSU47CisJCWkycy0+ZG1hX2NhcHR1cmUtPmRtYV9hZGRyID0gUzNDNjRYWF9QQV9JSVMwICsgUzNDMjQxMl9JSVNSWEQ7CisJCWkycy0+ZG1hX3BsYXliYWNrLT5jaGFubmVsID0gRE1BQ0hfSTJTMF9PVVQ7CisJCWkycy0+ZG1hX3BsYXliYWNrLT5kbWFfYWRkciA9IFMzQzY0WFhfUEFfSUlTMCArIFMzQzI0MTJfSUlTVFhEOworCX0gZWxzZSB7CisJCWkycy0+ZG1hX2NhcHR1cmUtPmNoYW5uZWwgPSBETUFDSF9JMlMxX0lOOworCQlpMnMtPmRtYV9jYXB0dXJlLT5kbWFfYWRkciA9IFMzQzY0WFhfUEFfSUlTMSArIFMzQzI0MTJfSUlTUlhEOworCQlpMnMtPmRtYV9wbGF5YmFjay0+Y2hhbm5lbCA9IERNQUNIX0kyUzFfT1VUOworCQlpMnMtPmRtYV9wbGF5YmFjay0+ZG1hX2FkZHIgPSBTM0M2NFhYX1BBX0lJUzEgKyBTM0MyNDEyX0lJU1RYRDsKKwl9CisKKwlpMnMtPmRtYV9jYXB0dXJlLT5jbGllbnQgPSAmczNjNjR4eF9kbWFfY2xpZW50X2luOworCWkycy0+ZG1hX2NhcHR1cmUtPmRtYV9zaXplID0gNDsKKwlpMnMtPmRtYV9wbGF5YmFjay0+Y2xpZW50ID0gJnMzYzY0eHhfZG1hX2NsaWVudF9vdXQ7CisJaTJzLT5kbWFfcGxheWJhY2stPmRtYV9zaXplID0gNDsKKwogCWkycy0+aWlzX2NjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJhdWRpby1idXMiKTsKIAlpZiAoSVNfRVJSKGkycy0+aWlzX2NjbGspKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgYXVkaW8tYnVzXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGsyNDQzX3dtOTcxMC5jIGIvc291bmQvc29jL3MzYzI0eHgvc21kazI0NDNfd205NzEwLmMKaW5kZXggMTJiNzgzYjEuLjM2MjI1ODggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGsyNDQzX3dtOTcxMC5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGsyNDQzX3dtOTcxMC5jCkBAIC0yMSw3ICsyMSw3IEBACiAKICNpbmNsdWRlICIuLi9jb2RlY3MvYWM5Ny5oIgogI2luY2x1ZGUgInMzYy1kbWEuaCIKLSNpbmNsdWRlICJzM2MyNHh4LWFjOTcuaCIKKyNpbmNsdWRlICJzM2MtYWM5Ny5oIgogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbWRrMjQ0MzsKIApAQCAtMjksNyArMjksNyBAQAogewogCS5uYW1lID0gIkFDOTciLAogCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAotCS5jcHVfZGFpID0gJnMzYzI0NDNfYWM5N19kYWlbMF0sCisJLmNwdV9kYWkgPSAmczNjX2FjOTdfZGFpW1MzQ19BQzk3X0RBSV9QQ01dLAogCS5jb2RlY19kYWkgPSAmYWM5N19kYWksCiB9LAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGtfd205NzEzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zbWRrX3dtOTcxMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZmQzOWYKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zbWRrX3dtOTcxMy5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBzbWRrX3dtOTcxMy5jICAtLSAgU29DIGF1ZGlvIGZvciBTTURLCisgKgorICogQ29weXJpZ2h0IDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4gTHRkLgorICogQXV0aG9yOiBKYXN3aW5kZXIgU2luZ2ggQnJhciA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3Mvd205NzEzLmgiCisjaW5jbHVkZSAiczNjLWRtYS5oIgorI2luY2x1ZGUgInMzYy1hYzk3LmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHNtZGs7CisKKy8qCisgKiBEZWZhdWx0IENGRyBzd2l0Y2ggc2V0dGluZ3MgdG8gdXNlIHRoaXMgZHJpdmVyOgorICoKKyAqICAgU01ESzY0MTA6IFNldCBDRkcxIDEtMyBPbiwgQ0ZHMiAxLTQgT2ZmCisgKi8KKworLyoKKyBQbGF5YmFjayAoSGVhZFBob25lKTotCisJJCBhbWl4ZXIgc3NldCAnSGVhZHBob25lJyB1bm11dGUKKwkkIGFtaXhlciBzc2V0ICdSaWdodCBIZWFkcGhvbmUgT3V0IE11eCcgJ0hlYWRwaG9uZScKKwkkIGFtaXhlciBzc2V0ICdMZWZ0IEhlYWRwaG9uZSBPdXQgTXV4JyAnSGVhZHBob25lJworCSQgYW1peGVyIHNzZXQgJ1JpZ2h0IEhQIE1peGVyIFBDTScgdW5tdXRlCisJJCBhbWl4ZXIgc3NldCAnTGVmdCBIUCBNaXhlciBQQ00nIHVubXV0ZQorCisgQ2FwdHVyZSAoTGluZUluKTotCisJJCBhbWl4ZXIgc3NldCAnUmlnaHQgQ2FwdHVyZSBTb3VyY2UnICdMaW5lJworCSQgYW1peGVyIHNzZXQgJ0xlZnQgQ2FwdHVyZSBTb3VyY2UnICdMaW5lJworKi8KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHNtZGtfZGFpID0geworCS5uYW1lID0gIkFDOTciLAorCS5zdHJlYW1fbmFtZSA9ICJBQzk3IFBDTSIsCisJLmNwdV9kYWkgPSAmczNjX2FjOTdfZGFpW1MzQ19BQzk3X0RBSV9QQ01dLAorCS5jb2RlY19kYWkgPSAmd205NzEzX2RhaVtXTTk3MTNfREFJX0FDOTdfSElGSV0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbWRrID0geworCS5uYW1lID0gIlNNREsiLAorCS5wbGF0Zm9ybSA9ICZzM2MyNHh4X3NvY19wbGF0Zm9ybSwKKwkuZGFpX2xpbmsgPSAmc21ka19kYWksCisJLm51bV9saW5rcyA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIHNtZGtfc25kX2FjOTdfZGV2ZGF0YSA9IHsKKwkuY2FyZCA9ICZzbWRrLAorCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl93bTk3MTMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21ka19zbmRfYWM5N19kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IHNtZGtfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlzbWRrX3NuZF9hYzk3X2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghc21ka19zbmRfYWM5N19kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoc21ka19zbmRfYWM5N19kZXZpY2UsCisJCQkgICAgICZzbWRrX3NuZF9hYzk3X2RldmRhdGEpOworCXNtZGtfc25kX2FjOTdfZGV2ZGF0YS5kZXYgPSAmc21ka19zbmRfYWM5N19kZXZpY2UtPmRldjsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoc21ka19zbmRfYWM5N19kZXZpY2UpOworCWlmIChyZXQpCisJCXBsYXRmb3JtX2RldmljZV9wdXQoc21ka19zbmRfYWM5N19kZXZpY2UpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNtZGtfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNtZGtfc25kX2FjOTdfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoc21ka19pbml0KTsKK21vZHVsZV9leGl0KHNtZGtfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUigiSmFzd2luZGVyIFNpbmdoIEJyYXIsIGphc3NpLmJyYXJAc2Ftc3VuZy5jb20iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgU01ESytXTTk3MTMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9LY29uZmlnIGIvc291bmQvc29jL3NoL0tjb25maWcKaW5kZXggOWU2OTc2NS4uMTA2Njc0OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL0tjb25maWcKKysrIGIvc291bmQvc29jL3NoL0tjb25maWcKQEAgLTI2LDYgKzI2LDEzIEBACiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBGU0kgc291bmQgc3VwcG9ydAogCitjb25maWcgU05EX1NPQ19TSDRfU0lVCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIChTVVBFUkggfHwgQVJDSF9TSE1PQklMRSkgJiYgSEFWRV9DTEsKKwlzZWxlY3QgRE1BX0VOR0lORQorCXNlbGVjdCBETUFERVZJQ0VTCisJc2VsZWN0IFNIX0RNQUUKKwogIyMKICMjIEJvYXJkcwogIyMKQEAgLTQ3LDQgKzU0LDIwIEBACiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIGdlbmVyaWMgc291bmQgc3VwcG9ydCBmb3IgdGhlCiAJICBGU0kgLSBBSzQ2NDIgdW5pdAogCitjb25maWcgU05EX0ZTSV9EQTcyMTAKKwlib29sICJGU0ktREE3MjEwIHNvdW5kIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTTkRfU09DX1NINF9GU0kKKwlzZWxlY3QgU05EX1NPQ19EQTcyMTAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIGdlbmVyaWMgc291bmQgc3VwcG9ydCBmb3IgdGhlCisJICBGU0kgLSBEQTcyMTAgdW5pdAorCitjb25maWcgU05EX1NJVV9NSUdPUgorCXRyaXN0YXRlICJTSVUgc291bmQgc3VwcG9ydCBvbiBNaWdvLVIiCisJZGVwZW5kcyBvbiBTSF9NSUdPUgorCXNlbGVjdCBTTkRfU09DX1NINF9TSVUKKwlzZWxlY3QgU05EX1NPQ19XTTg5NzgKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHNvdW5kIHN1cHBvcnQgZm9yIHRoZSBTSDc3MjIgTWlnby1SIGJvYXJkCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9zaC9NYWtlZmlsZQppbmRleCBhNjk5Nzg3Li44YTVhMTkyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL3NoL01ha2VmaWxlCkBAIC02LDEzICs2LDE5IEBACiBzbmQtc29jLWhhYy1vYmpzCTo9IGhhYy5vCiBzbmQtc29jLXNzaS1vYmpzCTo9IHNzaS5vCiBzbmQtc29jLWZzaS1vYmpzCTo9IGZzaS5vCitzbmQtc29jLXNpdS1vYmpzCTo9IHNpdV9wY20ubyBzaXVfZGFpLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1NINF9IQUMpCSs9IHNuZC1zb2MtaGFjLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1NINF9TU0kpCSs9IHNuZC1zb2Mtc3NpLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1NINF9GU0kpCSs9IHNuZC1zb2MtZnNpLm8KK29iai0kKENPTkZJR19TTkRfU09DX1NINF9TSVUpCSs9IHNuZC1zb2Mtc2l1Lm8KIAogIyMgYm9hcmRzCiBzbmQtc29jLXNoNzc2MC1hYzk3LW9ianMJOj0gc2g3NzYwLWFjOTcubwogc25kLXNvYy1mc2ktYWs0NjQyLW9ianMJCTo9IGZzaS1hazQ2NDIubworc25kLXNvYy1mc2ktZGE3MjEwLW9ianMJCTo9IGZzaS1kYTcyMTAubworc25kLXNvYy1taWdvci1vYmpzCQk6PSBtaWdvci5vCiAKIG9iai0kKENPTkZJR19TTkRfU0g3NzYwX0FDOTcpCSs9IHNuZC1zb2Mtc2g3NzYwLWFjOTcubwogb2JqLSQoQ09ORklHX1NORF9GU0lfQUs0NjQyKQkrPSBzbmQtc29jLWZzaS1hazQ2NDIubworb2JqLSQoQ09ORklHX1NORF9GU0lfREE3MjEwKQkrPSBzbmQtc29jLWZzaS1kYTcyMTAubworb2JqLSQoQ09ORklHX1NORF9TSVVfTUlHT1IpCSs9IHNuZC1zb2MtbWlnb3IubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2ZzaS1kYTcyMTAuYyBiL3NvdW5kL3NvYy9zaC9mc2ktZGE3MjEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiNGQxNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zaC9mc2ktZGE3MjEwLmMKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIGZzaS1kYTcyMTAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgPHNvdW5kL3NoX2ZzaS5oPgorI2luY2x1ZGUgIi4uL2NvZGVjcy9kYTcyMTAuaCIKKworc3RhdGljIGludCBmc2lfZGE3MjEwX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXJldHVybiBzbmRfc29jX2RhaV9zZXRfZm10KCZkYTcyMTBfZGFpLAorCQkJCSAgIFNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJCQkgICBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGZzaV9kYTcyMTBfZGFpID0geworCS5uYW1lCQk9ICJEQTcyMTAiLAorCS5zdHJlYW1fbmFtZQk9ICJEQTcyMTAiLAorCS5jcHVfZGFpCT0gJmZzaV9zb2NfZGFpWzFdLCAvKiBGU0kgQiAqLworCS5jb2RlY19kYWkJPSAmZGE3MjEwX2RhaSwKKwkuaW5pdAkJPSBmc2lfZGE3MjEwX2luaXQsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBmc2lfc29jX2NhcmQgPSB7CisJLm5hbWUJCT0gIkZTSSIsCisJLnBsYXRmb3JtCT0gJmZzaV9zb2NfcGxhdGZvcm0sCisJLmRhaV9saW5rCT0gJmZzaV9kYTcyMTBfZGFpLAorCS5udW1fbGlua3MJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBmc2lfZGE3MjEwX3NuZF9kZXZkYXRhID0geworCS5jYXJkCQk9ICZmc2lfc29jX2NhcmQsCisJLmNvZGVjX2Rldgk9ICZzb2NfY29kZWNfZGV2X2RhNzIxMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpmc2lfZGE3MjEwX3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IGZzaV9kYTcyMTBfc291bmRfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlmc2lfZGE3MjEwX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWZzaV9kYTcyMTBfc25kX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShmc2lfZGE3MjEwX3NuZF9kZXZpY2UsICZmc2lfZGE3MjEwX3NuZF9kZXZkYXRhKTsKKwlmc2lfZGE3MjEwX3NuZF9kZXZkYXRhLmRldiA9ICZmc2lfZGE3MjEwX3NuZF9kZXZpY2UtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGZzaV9kYTcyMTBfc25kX2RldmljZSk7CisJaWYgKHJldCkKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChmc2lfZGE3MjEwX3NuZF9kZXZpY2UpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZzaV9kYTcyMTBfc291bmRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGZzaV9kYTcyMTBfc25kX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGZzaV9kYTcyMTBfc291bmRfaW5pdCk7Cittb2R1bGVfZXhpdChmc2lfZGE3MjEwX3NvdW5kX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgRlNJIERBMjcxMCIpOworTU9EVUxFX0FVVEhPUigiS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2ZzaS5jIGIvc291bmQvc29jL3NoL2ZzaS5jCmluZGV4IDQyODEzYjguLjk5M2FiYjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9mc2kuYworKysgYi9zb3VuZC9zb2Mvc2gvZnNpLmMKQEAgLTY3LDYgKzY3LDcgQEAKIC8qIERPRkZfU1QgKi8KICNkZWZpbmUgRVJSX09WRVIJMHgwMDAwMDAxMAogI2RlZmluZSBFUlJfVU5ERVIJMHgwMDAwMDAwMQorI2RlZmluZSBTVF9FUlIJCShFUlJfT1ZFUiB8IEVSUl9VTkRFUikKIAogLyogQ0xLX1JTVCAqLwogI2RlZmluZSBCX0NMSwkJMHgwMDAwMDAxMApAQCAtOTIsNiArOTMsNyBAQAogc3RydWN0IGZzaV9wcml2IHsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlcjsKIAogCWludCBmaWZvX21heDsKIAlpbnQgY2hhbjsKQEAgLTEwOCwxMCArMTEwLDkgQEAKIAlzdHJ1Y3QgZnNpX3ByaXYgZnNpYTsKIAlzdHJ1Y3QgZnNpX3ByaXYgZnNpYjsKIAlzdHJ1Y3Qgc2hfZnNpX3BsYXRmb3JtX2luZm8gKmluZm87CisJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAotc3RhdGljIHN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXI7Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogCkBAIC0xMTksMzUgKzEyMCwzNSBAQAogCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgX19mc2lfcmVnX3dyaXRlKHUzMiByZWcsIHUzMiBkYXRhKQorc3RhdGljIHZvaWQgX19mc2lfcmVnX3dyaXRlKHUzMiByZWcsIHUzMiBkYXRhKQogewogCS8qIHZhbGlkIGRhdGEgYXJlYSBpcyAyNGJpdCAqLwogCWRhdGEgJj0gMHgwMGZmZmZmZjsKIAotCXJldHVybiBjdHJsX291dGwoZGF0YSwgcmVnKTsKKwlfX3Jhd193cml0ZWwoZGF0YSwgcmVnKTsKIH0KIAogc3RhdGljIHUzMiBfX2ZzaV9yZWdfcmVhZCh1MzIgcmVnKQogewotCXJldHVybiBjdHJsX2lubChyZWcpOworCXJldHVybiBfX3Jhd19yZWFkbChyZWcpOwogfQogCi1zdGF0aWMgaW50IF9fZnNpX3JlZ19tYXNrX3NldCh1MzIgcmVnLCB1MzIgbWFzaywgdTMyIGRhdGEpCitzdGF0aWMgdm9pZCBfX2ZzaV9yZWdfbWFza19zZXQodTMyIHJlZywgdTMyIG1hc2ssIHUzMiBkYXRhKQogewogCXUzMiB2YWwgPSBfX2ZzaV9yZWdfcmVhZChyZWcpOwogCiAJdmFsICY9IH5tYXNrOwogCXZhbCB8PSBkYXRhICYgbWFzazsKIAotCXJldHVybiBfX2ZzaV9yZWdfd3JpdGUocmVnLCB2YWwpOworCV9fZnNpX3JlZ193cml0ZShyZWcsIHZhbCk7CiB9CiAKLXN0YXRpYyBpbnQgZnNpX3JlZ193cml0ZShzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgdTMyIHJlZywgdTMyIGRhdGEpCitzdGF0aWMgdm9pZCBmc2lfcmVnX3dyaXRlKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCB1MzIgcmVnLCB1MzIgZGF0YSkKIHsKIAlpZiAocmVnID4gUkVHX0VORCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm47CiAKLQlyZXR1cm4gX19mc2lfcmVnX3dyaXRlKCh1MzIpKGZzaS0+YmFzZSArIHJlZyksIGRhdGEpOworCV9fZnNpX3JlZ193cml0ZSgodTMyKShmc2ktPmJhc2UgKyByZWcpLCBkYXRhKTsKIH0KIAogc3RhdGljIHUzMiBmc2lfcmVnX3JlYWQoc3RydWN0IGZzaV9wcml2ICpmc2ksIHUzMiByZWcpCkBAIC0xNTgsMzkgKzE1OSw1NSBAQAogCXJldHVybiBfX2ZzaV9yZWdfcmVhZCgodTMyKShmc2ktPmJhc2UgKyByZWcpKTsKIH0KIAotc3RhdGljIGludCBmc2lfcmVnX21hc2tfc2V0KHN0cnVjdCBmc2lfcHJpdiAqZnNpLCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIGRhdGEpCitzdGF0aWMgdm9pZCBmc2lfcmVnX21hc2tfc2V0KHN0cnVjdCBmc2lfcHJpdiAqZnNpLCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIGRhdGEpCiB7CiAJaWYgKHJlZyA+IFJFR19FTkQpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuOwogCi0JcmV0dXJuIF9fZnNpX3JlZ19tYXNrX3NldCgodTMyKShmc2ktPmJhc2UgKyByZWcpLCBtYXNrLCBkYXRhKTsKKwlfX2ZzaV9yZWdfbWFza19zZXQoKHUzMikoZnNpLT5iYXNlICsgcmVnKSwgbWFzaywgZGF0YSk7CiB9CiAKLXN0YXRpYyBpbnQgZnNpX21hc3Rlcl93cml0ZSh1MzIgcmVnLCB1MzIgZGF0YSkKK3N0YXRpYyB2b2lkIGZzaV9tYXN0ZXJfd3JpdGUoc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciwgdTMyIHJlZywgdTMyIGRhdGEpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCWlmICgocmVnIDwgTVJFR19TVEFSVCkgfHwKIAkgICAgKHJlZyA+IE1SRUdfRU5EKSkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm47CiAKLQlyZXR1cm4gX19mc2lfcmVnX3dyaXRlKCh1MzIpKG1hc3Rlci0+YmFzZSArIHJlZyksIGRhdGEpOworCXNwaW5fbG9ja19pcnFzYXZlKCZtYXN0ZXItPmxvY2ssIGZsYWdzKTsKKwlfX2ZzaV9yZWdfd3JpdGUoKHUzMikobWFzdGVyLT5iYXNlICsgcmVnKSwgZGF0YSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFzdGVyLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB1MzIgZnNpX21hc3Rlcl9yZWFkKHUzMiByZWcpCitzdGF0aWMgdTMyIGZzaV9tYXN0ZXJfcmVhZChzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyLCB1MzIgcmVnKQogeworCXUzMiByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCWlmICgocmVnIDwgTVJFR19TVEFSVCkgfHwKIAkgICAgKHJlZyA+IE1SRUdfRU5EKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gX19mc2lfcmVnX3JlYWQoKHUzMikobWFzdGVyLT5iYXNlICsgcmVnKSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hc3Rlci0+bG9jaywgZmxhZ3MpOworCXJldCA9IF9fZnNpX3JlZ19yZWFkKCh1MzIpKG1hc3Rlci0+YmFzZSArIHJlZykpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hc3Rlci0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBmc2lfbWFzdGVyX21hc2tfc2V0KHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgZGF0YSkKK3N0YXRpYyB2b2lkIGZzaV9tYXN0ZXJfbWFza19zZXQoc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciwKKwkJCSAgICAgICB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIGRhdGEpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCWlmICgocmVnIDwgTVJFR19TVEFSVCkgfHwKIAkgICAgKHJlZyA+IE1SRUdfRU5EKSkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm47CiAKLQlyZXR1cm4gX19mc2lfcmVnX21hc2tfc2V0KCh1MzIpKG1hc3Rlci0+YmFzZSArIHJlZyksIG1hc2ssIGRhdGEpOworCXNwaW5fbG9ja19pcnFzYXZlKCZtYXN0ZXItPmxvY2ssIGZsYWdzKTsKKwlfX2ZzaV9yZWdfbWFza19zZXQoKHUzMikobWFzdGVyLT5iYXNlICsgcmVnKSwgbWFzaywgZGF0YSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFzdGVyLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIwMCw0MyArMjE3LDM1IEBACiAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCBmc2lfcHJpdiAqZnNpX2dldChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyBzdHJ1Y3QgZnNpX21hc3RlciAqZnNpX2dldF9tYXN0ZXIoc3RydWN0IGZzaV9wcml2ICpmc2kpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKLQlzdHJ1Y3QgZnNpX3ByaXYgKmZzaSA9IE5VTEw7Ci0KLQlpZiAoIXN1YnN0cmVhbSB8fCAhbWFzdGVyKQotCQlyZXR1cm4gTlVMTDsKLQotCXJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN3aXRjaCAocnRkLT5kYWktPmNwdV9kYWktPmlkKSB7Ci0JY2FzZSAwOgotCQlmc2kgPSAmbWFzdGVyLT5mc2lhOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWZzaSA9ICZtYXN0ZXItPmZzaWI7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBmc2k7CisJcmV0dXJuIGZzaS0+bWFzdGVyOwogfQogCiBzdGF0aWMgaW50IGZzaV9pc19wb3J0X2Eoc3RydWN0IGZzaV9wcml2ICpmc2kpCiB7Ci0JLyogcmV0dXJuCi0JICogMSA6IHBvcnQgYQotCSAqIDAgOiBwb3J0IGIKLQkgKi8KKwlyZXR1cm4gZnNpLT5tYXN0ZXItPmJhc2UgPT0gZnNpLT5iYXNlOworfQogCi0JaWYgKGZzaSA9PSAmbWFzdGVyLT5mc2lhKQotCQlyZXR1cm4gMTsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWkgKmZzaV9nZXRfZGFpKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqbWFjaGluZSA9IHJ0ZC0+ZGFpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuICBtYWNoaW5lLT5jcHVfZGFpOworfQorCitzdGF0aWMgc3RydWN0IGZzaV9wcml2ICpmc2lfZ2V0X3ByaXYoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBmc2lfZ2V0X2RhaShzdWJzdHJlYW0pOworCisJcmV0dXJuIGRhaS0+cHJpdmF0ZV9kYXRhOwogfQogCiBzdGF0aWMgdTMyIGZzaV9nZXRfaW5mb19mbGFncyhzdHJ1Y3QgZnNpX3ByaXYgKmZzaSkKIHsKIAlpbnQgaXNfcG9ydGEgPSBmc2lfaXNfcG9ydF9hKGZzaSk7CisJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciA9IGZzaV9nZXRfbWFzdGVyKGZzaSk7CiAKIAlyZXR1cm4gaXNfcG9ydGEgPyBtYXN0ZXItPmluZm8tPnBvcnRhX2ZsYWdzIDoKIAkJbWFzdGVyLT5pbmZvLT5wb3J0Yl9mbGFnczsKQEAgLTMxNCwyNyArMzIzLDMwIEBACiBzdGF0aWMgdm9pZCBmc2lfaXJxX2VuYWJsZShzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IGlzX3BsYXkpCiB7CiAJdTMyIGRhdGEgPSBmc2lfcG9ydF9hYl9pb19iaXQoZnNpLCBpc19wbGF5KTsKKwlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyID0gZnNpX2dldF9tYXN0ZXIoZnNpKTsKIAotCWZzaV9tYXN0ZXJfbWFza19zZXQoSU1TSywgIGRhdGEsIGRhdGEpOwotCWZzaV9tYXN0ZXJfbWFza19zZXQoSUVNU0ssIGRhdGEsIGRhdGEpOworCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBJTVNLLCAgZGF0YSwgZGF0YSk7CisJZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIElFTVNLLCBkYXRhLCBkYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgZnNpX2lycV9kaXNhYmxlKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCBpbnQgaXNfcGxheSkKIHsKIAl1MzIgZGF0YSA9IGZzaV9wb3J0X2FiX2lvX2JpdChmc2ksIGlzX3BsYXkpOworCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIgPSBmc2lfZ2V0X21hc3Rlcihmc2kpOwogCi0JZnNpX21hc3Rlcl9tYXNrX3NldChJTVNLLCAgZGF0YSwgMCk7Ci0JZnNpX21hc3Rlcl9tYXNrX3NldChJRU1TSywgZGF0YSwgMCk7CisJZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIElNU0ssICBkYXRhLCAwKTsKKwlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgSUVNU0ssIGRhdGEsIDApOwogfQogCiBzdGF0aWMgdm9pZCBmc2lfY2xrX2N0cmwoc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBlbmFibGUpCiB7CiAJdTMyIHZhbCA9IGZzaV9pc19wb3J0X2EoZnNpKSA/ICgxIDw8IDApIDogKDEgPDwgNCk7CisJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciA9IGZzaV9nZXRfbWFzdGVyKGZzaSk7CiAKIAlpZiAoZW5hYmxlKQotCQlmc2lfbWFzdGVyX21hc2tfc2V0KENMS19SU1QsIHZhbCwgdmFsKTsKKwkJZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIENMS19SU1QsIHZhbCwgdmFsKTsKIAllbHNlCi0JCWZzaV9tYXN0ZXJfbWFza19zZXQoQ0xLX1JTVCwgdmFsLCAwKTsKKwkJZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIENMS19SU1QsIHZhbCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZzaV9pcnFfaW5pdChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IGlzX3BsYXkpCkBAIC0zNTUsNDMgKzM2Nyw0NiBAQAogCWZzaV9yZWdfbWFza19zZXQoZnNpLCBjdHJsLCBGSUZPX0NMUiwgRklGT19DTFIpOwogCiAJLyogY2xlYXIgaW50ZXJydXB0IGZhY3RvciAqLwotCWZzaV9tYXN0ZXJfbWFza19zZXQoSU5UX1NULCBkYXRhLCAwKTsKKwlmc2lfbWFzdGVyX21hc2tfc2V0KGZzaV9nZXRfbWFzdGVyKGZzaSksIElOVF9TVCwgZGF0YSwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZzaV9zb2Z0X2FsbF9yZXNldCh2b2lkKQorc3RhdGljIHZvaWQgZnNpX3NvZnRfYWxsX3Jlc2V0KHN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIpCiB7Ci0JdTMyIHN0YXR1cyA9IGZzaV9tYXN0ZXJfcmVhZChTT0ZUX1JTVCk7CisJdTMyIHN0YXR1cyA9IGZzaV9tYXN0ZXJfcmVhZChtYXN0ZXIsIFNPRlRfUlNUKTsKIAogCS8qIHBvcnQgQUIgcmVzZXQgKi8KIAlzdGF0dXMgJj0gMHgwMDAwMDBmZjsKLQlmc2lfbWFzdGVyX3dyaXRlKFNPRlRfUlNULCBzdGF0dXMpOworCWZzaV9tYXN0ZXJfd3JpdGUobWFzdGVyLCBTT0ZUX1JTVCwgc3RhdHVzKTsKIAltZGVsYXkoMTApOwogCiAJLyogc29mdCByZXNldCAqLwogCXN0YXR1cyAmPSAweDAwMDAwMGYwOwotCWZzaV9tYXN0ZXJfd3JpdGUoU09GVF9SU1QsIHN0YXR1cyk7CisJZnNpX21hc3Rlcl93cml0ZShtYXN0ZXIsIFNPRlRfUlNULCBzdGF0dXMpOwogCXN0YXR1cyB8PSAweDAwMDAwMDAxOwotCWZzaV9tYXN0ZXJfd3JpdGUoU09GVF9SU1QsIHN0YXR1cyk7CisJZnNpX21hc3Rlcl93cml0ZShtYXN0ZXIsIFNPRlRfUlNULCBzdGF0dXMpOwogCW1kZWxheSgxMCk7CiB9CiAKIC8qIHBsYXliYWNrIGludGVycnVwdCAqLwotc3RhdGljIGludCBmc2lfZGF0YV9wdXNoKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQorc3RhdGljIGludCBmc2lfZGF0YV9wdXNoKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCBpbnQgc3RhcnR1cCkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gTlVMTDsKKwl1MzIgc3RhdHVzOwogCWludCBzZW5kOwogCWludCBmaWZvX2ZyZWU7CiAJaW50IHdpZHRoOwogCXU4ICpzdGFydDsKLQlpbnQgaTsKKwlpbnQgaSwgb3Zlcl9wZXJpb2Q7CiAKIAlpZiAoIWZzaQkJCXx8CiAJICAgICFmc2ktPnN1YnN0cmVhbQkJfHwKIAkgICAgIWZzaS0+c3Vic3RyZWFtLT5ydW50aW1lKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJ1bnRpbWUgPSBmc2ktPnN1YnN0cmVhbS0+cnVudGltZTsKKwlvdmVyX3BlcmlvZAk9IDA7CisJc3Vic3RyZWFtCT0gZnNpLT5zdWJzdHJlYW07CisJcnVudGltZQkJPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAKIAkvKiBGU0kgRklGTyBoYXMgbGltaXQuCiAJICogU28sIHRoaXMgZHJpdmVyIGNhbiBub3Qgc2VuZCBwZXJpb2RzIGRhdGEgYXQgYSB0aW1lCkBAIC0zOTksNyArNDE0LDcgQEAKIAlpZiAoZnNpLT5ieXRlX29mZnNldCA+PQogCSAgICBmc2ktPnBlcmlvZF9sZW4gKiAoZnNpLT5wZXJpb2RzICsgMSkpIHsKIAotCQlzdWJzdHJlYW0gPSBmc2ktPnN1YnN0cmVhbTsKKwkJb3Zlcl9wZXJpb2QgPSAxOwogCQlmc2ktPnBlcmlvZHMgPSAoZnNpLT5wZXJpb2RzICsgMSkgJSBydW50aW1lLT5wZXJpb2RzOwogCiAJCWlmICgwID09IGZzaS0+cGVyaW9kcykKQEAgLTQzOCwzMCArNDUzLDQ0IEBACiAKIAlmc2ktPmJ5dGVfb2Zmc2V0ICs9IHNlbmQgKiB3aWR0aDsKIAorCXN0YXR1cyA9IGZzaV9yZWdfcmVhZChmc2ksIERPRkZfU1QpOworCWlmICghc3RhcnR1cCkgeworCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IGZzaV9nZXRfZGFpKHN1YnN0cmVhbSk7CisKKwkJaWYgKHN0YXR1cyAmIEVSUl9PVkVSKQorCQkJZGV2X2VycihkYWktPmRldiwgIm92ZXIgcnVuXG4iKTsKKwkJaWYgKHN0YXR1cyAmIEVSUl9VTkRFUikKKwkJCWRldl9lcnIoZGFpLT5kZXYsICJ1bmRlciBydW5cbiIpOworCX0KKwlmc2lfcmVnX3dyaXRlKGZzaSwgRE9GRl9TVCwgMCk7CisKIAlmc2lfaXJxX2VuYWJsZShmc2ksIDEpOwogCi0JaWYgKHN1YnN0cmVhbSkKKwlpZiAob3Zlcl9wZXJpb2QpCiAJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZzaV9kYXRhX3BvcChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSkKK3N0YXRpYyBpbnQgZnNpX2RhdGFfcG9wKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCBpbnQgc3RhcnR1cCkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gTlVMTDsKKwl1MzIgc3RhdHVzOwogCWludCBmcmVlOwogCWludCBmaWZvX2ZpbGw7CiAJaW50IHdpZHRoOwogCXU4ICpzdGFydDsKLQlpbnQgaTsKKwlpbnQgaSwgb3Zlcl9wZXJpb2Q7CiAKIAlpZiAoIWZzaQkJCXx8CiAJICAgICFmc2ktPnN1YnN0cmVhbQkJfHwKIAkgICAgIWZzaS0+c3Vic3RyZWFtLT5ydW50aW1lKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJ1bnRpbWUgPSBmc2ktPnN1YnN0cmVhbS0+cnVudGltZTsKKwlvdmVyX3BlcmlvZAk9IDA7CisJc3Vic3RyZWFtCT0gZnNpLT5zdWJzdHJlYW07CisJcnVudGltZQkJPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAKIAkvKiBGU0kgRklGTyBoYXMgbGltaXQuCiAJICogU28sIHRoaXMgZHJpdmVyIGNhbiBub3Qgc2VuZCBwZXJpb2RzIGRhdGEgYXQgYSB0aW1lCkBAIC00NjksNyArNDk4LDcgQEAKIAlpZiAoZnNpLT5ieXRlX29mZnNldCA+PQogCSAgICBmc2ktPnBlcmlvZF9sZW4gKiAoZnNpLT5wZXJpb2RzICsgMSkpIHsKIAotCQlzdWJzdHJlYW0gPSBmc2ktPnN1YnN0cmVhbTsKKwkJb3Zlcl9wZXJpb2QgPSAxOwogCQlmc2ktPnBlcmlvZHMgPSAoZnNpLT5wZXJpb2RzICsgMSkgJSBydW50aW1lLT5wZXJpb2RzOwogCiAJCWlmICgwID09IGZzaS0+cGVyaW9kcykKQEAgLTUwNyw5ICs1MzYsMjAgQEAKIAogCWZzaS0+Ynl0ZV9vZmZzZXQgKz0gZmlmb19maWxsICogd2lkdGg7CiAKKwlzdGF0dXMgPSBmc2lfcmVnX3JlYWQoZnNpLCBESUZGX1NUKTsKKwlpZiAoIXN0YXJ0dXApIHsKKwkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBmc2lfZ2V0X2RhaShzdWJzdHJlYW0pOworCisJCWlmIChzdGF0dXMgJiBFUlJfT1ZFUikKKwkJCWRldl9lcnIoZGFpLT5kZXYsICJvdmVyIHJ1blxuIik7CisJCWlmIChzdGF0dXMgJiBFUlJfVU5ERVIpCisJCQlkZXZfZXJyKGRhaS0+ZGV2LCAidW5kZXIgcnVuXG4iKTsKKwl9CisJZnNpX3JlZ193cml0ZShmc2ksIERJRkZfU1QsIDApOworCiAJZnNpX2lycV9lbmFibGUoZnNpLCAwKTsKIAotCWlmIChzdWJzdHJlYW0pCisJaWYgKG92ZXJfcGVyaW9kKQogCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CiAKIAlyZXR1cm4gMDsKQEAgLTUxNywyMyArNTU3LDI0IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBmc2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0JdTMyIHN0YXR1cyA9IGZzaV9tYXN0ZXJfcmVhZChTT0ZUX1JTVCkgJiB+MHgwMDAwMDAxMDsKLQl1MzIgaW50X3N0ID0gZnNpX21hc3Rlcl9yZWFkKElOVF9TVCk7CisJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciA9IGRhdGE7CisJdTMyIHN0YXR1cyA9IGZzaV9tYXN0ZXJfcmVhZChtYXN0ZXIsIFNPRlRfUlNUKSAmIH4weDAwMDAwMDEwOworCXUzMiBpbnRfc3QgPSBmc2lfbWFzdGVyX3JlYWQobWFzdGVyLCBJTlRfU1QpOwogCiAJLyogY2xlYXIgaXJxIHN0YXR1cyAqLwotCWZzaV9tYXN0ZXJfd3JpdGUoU09GVF9SU1QsIHN0YXR1cyk7Ci0JZnNpX21hc3Rlcl93cml0ZShTT0ZUX1JTVCwgc3RhdHVzIHwgMHgwMDAwMDAxMCk7CisJZnNpX21hc3Rlcl93cml0ZShtYXN0ZXIsIFNPRlRfUlNULCBzdGF0dXMpOworCWZzaV9tYXN0ZXJfd3JpdGUobWFzdGVyLCBTT0ZUX1JTVCwgc3RhdHVzIHwgMHgwMDAwMDAxMCk7CiAKIAlpZiAoaW50X3N0ICYgSU5UX0FfT1VUKQotCQlmc2lfZGF0YV9wdXNoKCZtYXN0ZXItPmZzaWEpOworCQlmc2lfZGF0YV9wdXNoKCZtYXN0ZXItPmZzaWEsIDApOwogCWlmIChpbnRfc3QgJiBJTlRfQl9PVVQpCi0JCWZzaV9kYXRhX3B1c2goJm1hc3Rlci0+ZnNpYik7CisJCWZzaV9kYXRhX3B1c2goJm1hc3Rlci0+ZnNpYiwgMCk7CiAJaWYgKGludF9zdCAmIElOVF9BX0lOKQotCQlmc2lfZGF0YV9wb3AoJm1hc3Rlci0+ZnNpYSk7CisJCWZzaV9kYXRhX3BvcCgmbWFzdGVyLT5mc2lhLCAwKTsKIAlpZiAoaW50X3N0ICYgSU5UX0JfSU4pCi0JCWZzaV9kYXRhX3BvcCgmbWFzdGVyLT5mc2liKTsKKwkJZnNpX2RhdGFfcG9wKCZtYXN0ZXItPmZzaWIsIDApOwogCi0JZnNpX21hc3Rlcl93cml0ZShJTlRfU1QsIDB4MDAwMDAwMCk7CisJZnNpX21hc3Rlcl93cml0ZShtYXN0ZXIsIElOVF9TVCwgMHgwMDAwMDAwKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTU0OCw3ICs1ODksNyBAQAogc3RhdGljIGludCBmc2lfZGFpX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKLQlzdHJ1Y3QgZnNpX3ByaXYgKmZzaSA9IGZzaV9nZXQoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgZnNpX3ByaXYgKmZzaSA9IGZzaV9nZXRfcHJpdihzdWJzdHJlYW0pOwogCWNvbnN0IGNoYXIgKm1zZzsKIAl1MzIgZmxhZ3MgPSBmc2lfZ2V0X2luZm9fZmxhZ3MoZnNpKTsKIAl1MzIgZm10OwpAQCAtNjY3LDcgKzcwOCw3IEBACiBzdGF0aWMgdm9pZCBmc2lfZGFpX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKLQlzdHJ1Y3QgZnNpX3ByaXYgKmZzaSA9IGZzaV9nZXQoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgZnNpX3ByaXYgKmZzaSA9IGZzaV9nZXRfcHJpdihzdWJzdHJlYW0pOwogCWludCBpc19wbGF5ID0gc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKIAogCWZzaV9pcnFfZGlzYWJsZShmc2ksIGlzX3BsYXkpOwpAQCAtNjc5LDcgKzcyMCw3IEBACiBzdGF0aWMgaW50IGZzaV9kYWlfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKIAkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldChzdWJzdHJlYW0pOworCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldF9wcml2KHN1YnN0cmVhbSk7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlpbnQgaXNfcGxheSA9IHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0s7CiAJaW50IHJldCA9IDA7CkBAIC02ODksNyArNzMwLDcgQEAKIAkJZnNpX3N0cmVhbV9wdXNoKGZzaSwgc3Vic3RyZWFtLAogCQkJCWZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5idWZmZXJfc2l6ZSksCiAJCQkJZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKSk7Ci0JCXJldCA9IGlzX3BsYXkgPyBmc2lfZGF0YV9wdXNoKGZzaSkgOiBmc2lfZGF0YV9wb3AoZnNpKTsKKwkJcmV0ID0gaXNfcGxheSA/IGZzaV9kYXRhX3B1c2goZnNpLCAxKSA6IGZzaV9kYXRhX3BvcChmc2ksIDEpOwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CiAJCWZzaV9pcnFfZGlzYWJsZShmc2ksIGlzX3BsYXkpOwpAQCAtNzYwLDcgKzgwMSw3IEBACiBzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgZnNpX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3QgZnNpX3ByaXYgKmZzaSA9IGZzaV9nZXQoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgZnNpX3ByaXYgKmZzaSA9IGZzaV9nZXRfcHJpdihzdWJzdHJlYW0pOwogCWxvbmcgbG9jYXRpb247CiAKIAlsb2NhdGlvbiA9IChmc2ktPmJ5dGVfb2Zmc2V0IC0gMSk7CkBAIC04NzAsMTAgKzkxMSwxNiBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBmc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXVuc2lnbmVkIGludCBpcnE7CiAJaW50IHJldDsKIAorCWlmICgwICE9IHBkZXYtPmlkKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImN1cnJlbnQgZnNpIHN1cHBvcnQgaWQgMCBvbmx5IG5vd1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoIXJlcyB8fCAoaW50KWlycSA8PSAwKSB7CkBAIC04OTksMTUgKzk0NiwyMCBAQAogCW1hc3Rlci0+aXJxCQk9IGlycTsKIAltYXN0ZXItPmluZm8JCT0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJbWFzdGVyLT5mc2lhLmJhc2UJPSBtYXN0ZXItPmJhc2U7CisJbWFzdGVyLT5mc2lhLm1hc3Rlcgk9IG1hc3RlcjsKIAltYXN0ZXItPmZzaWIuYmFzZQk9IG1hc3Rlci0+YmFzZSArIDB4NDA7CisJbWFzdGVyLT5mc2liLm1hc3Rlcgk9IG1hc3RlcjsKKwlzcGluX2xvY2tfaW5pdCgmbWFzdGVyLT5sb2NrKTsKIAogCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwogCXBtX3J1bnRpbWVfcmVzdW1lKCZwZGV2LT5kZXYpOwogCiAJZnNpX3NvY19kYWlbMF0uZGV2CQk9ICZwZGV2LT5kZXY7CisJZnNpX3NvY19kYWlbMF0ucHJpdmF0ZV9kYXRhCT0gJm1hc3Rlci0+ZnNpYTsKIAlmc2lfc29jX2RhaVsxXS5kZXYJCT0gJnBkZXYtPmRldjsKKwlmc2lfc29jX2RhaVsxXS5wcml2YXRlX2RhdGEJPSAmbWFzdGVyLT5mc2liOwogCi0JZnNpX3NvZnRfYWxsX3Jlc2V0KCk7CisJZnNpX3NvZnRfYWxsX3Jlc2V0KG1hc3Rlcik7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsICZmc2lfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAiZnNpIiwgbWFzdGVyKTsKIAlpZiAocmV0KSB7CkBAIC05MzcsNiArOTg5LDEwIEBACiAKIHN0YXRpYyBpbnQgZnNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXI7CisKKwltYXN0ZXIgPSBmc2lfZ2V0X21hc3Rlcihmc2lfc29jX2RhaVswXS5wcml2YXRlX2RhdGEpOworCiAJc25kX3NvY191bnJlZ2lzdGVyX2RhaXMoZnNpX3NvY19kYWksIEFSUkFZX1NJWkUoZnNpX3NvY19kYWkpKTsKIAlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJmZzaV9zb2NfcGxhdGZvcm0pOwogCkBAIC05NDYsNyArMTAwMiwxMiBAQAogCiAJaW91bm1hcChtYXN0ZXItPmJhc2UpOwogCWtmcmVlKG1hc3Rlcik7Ci0JbWFzdGVyID0gTlVMTDsKKworCWZzaV9zb2NfZGFpWzBdLmRldgkJPSBOVUxMOworCWZzaV9zb2NfZGFpWzBdLnByaXZhdGVfZGF0YQk9IE5VTEw7CisJZnNpX3NvY19kYWlbMV0uZGV2CQk9IE5VTEw7CisJZnNpX3NvY19kYWlbMV0ucHJpdmF0ZV9kYXRhCT0gTlVMTDsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvbWlnb3IuYyBiL3NvdW5kL3NvYy9zaC9taWdvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MjNhNWMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvc2gvbWlnb3IuYwpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIEFMU0EgU29DIGRyaXZlciBmb3IgTWlnby1SCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9jbG9jay5oPgorCisjaW5jbHVkZSA8Y3B1L3NoNzcyMi5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3Mvd204OTc4LmgiCisjaW5jbHVkZSAic2l1LmgiCisKKy8qIERlZmF1bHQgODAwMEh6IHNhbXBsaW5nIGZyZXF1ZW5jeSAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgY29kZWNfZnJlcSA9IDgwMDAgKiA1MTI7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXNlX2NvdW50OworCisvKiBFeHRlcm5hbCBjbG9jaywgc291cmNlZCBmcm9tIHRoZSBjb2RlYyBhdCB0aGUgU0lVTUNLQiBwaW4gKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNpdW1ja2JfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY29kZWNfZnJlcTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNpdW1ja2JfY2xrX29wcyA9IHsKKwkucmVjYWxjID0gc2l1bWNrYl9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzaXVtY2tiX2NsayA9IHsKKwkubmFtZQkJPSAic2l1bWNrYl9jbGsiLAorCS5pZAkJPSAtMSwKKwkub3BzCQk9ICZzaXVtY2tiX2Nsa19vcHMsCisJLnJhdGUJCT0gMCwgLyogaW5pdGlhbGlzZWQgYXQgcnVuLXRpbWUgKi8KK307CisKK3N0YXRpYyBpbnQgbWlnb3JfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg5NzhfUExMLCAxMzAwMDAwMCwKKwkJCQkgICAgIFNORF9TT0NfQ0xPQ0tfSU4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2Rpdihjb2RlY19kYWksIFdNODk3OF9PUENMS1JBVEUsIHJhdGUgKiA1MTIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX05CX0lGIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX0NCU19DRlMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChydGQtPmRhaS0+Y3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfTkJfSUYgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljb2RlY19mcmVxID0gcmF0ZSAqIDUxMjsKKwkvKgorCSAqIFRoaXMgcHJvcGFnYXRlcyB0aGUgcGFyZW50IGZyZXF1ZW5jeSBjaGFuZ2UgdG8gY2hpbGRyZW4gYW5kCisJICogcmVjYWxjdWxhdGVzIHRoZSBmcmVxdWVuY3kgdGFibGUKKwkgKi8KKwljbGtfc2V0X3JhdGUoJnNpdW1ja2JfY2xrLCBjb2RlY19mcmVxKTsKKwlkZXZfZGJnKGNvZGVjX2RhaS0+ZGV2LCAiJXM6IGNvbmZpZ3VyZSAlbHVIelxuIiwgX19mdW5jX18sIGNvZGVjX2ZyZXEpOworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhydGQtPmRhaS0+Y3B1X2RhaSwgU0lVX0NMS0JfRVhULAorCQkJCSAgICAgY29kZWNfZnJlcSAvIDIsIFNORF9TT0NfQ0xPQ0tfSU4pOworCisJaWYgKCFyZXQpCisJCXVzZV9jb3VudCsrOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtaWdvcl9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7CisKKwlpZiAodXNlX2NvdW50KSB7CisJCXVzZV9jb3VudC0tOworCisJCWlmICghdXNlX2NvdW50KQorCQkJc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODk3OF9QTEwsIDAsCisJCQkJCSAgICAgICBTTkRfU09DX0NMT0NLX0lOKTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKGNvZGVjX2RhaS0+ZGV2LCAiVW5iYWxhbmNlZCBod19mcmVlIVxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgbWlnb3JfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gbWlnb3JfaHdfcGFyYW1zLAorCS5od19mcmVlID0gbWlnb3JfaHdfZnJlZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBtaWdvcl9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIk9uYm9hcmQgTWljcm9waG9uZSIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIkV4dGVybmFsIE1pY3JvcGhvbmUiLCBOVUxMKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCS8qIEhlYWRwaG9uZSBvdXRwdXQgY29ubmVjdGVkIHRvIExIUC9SSFAsIGVuYWJsZSBPVVQ0IGZvciBWTUlEICovCisJeyAiSGVhZHBob25lIiwgTlVMTCwgICJPVVQ0IFZNSUQiIH0sCisJeyAiT1VUNCBWTUlEIiwgTlVMTCwgICJMSFAiIH0sCisJeyAiT1VUNCBWTUlEIiwgTlVMTCwgICJSSFAiIH0sCisKKwkvKiBPbi1ib2FyZCBtaWNyb3Bob25lICovCisJeyAiUk1JQ04iLCBOVUxMLCAiTWljIEJpYXMiIH0sCisJeyAiUk1JQ1AiLCBOVUxMLCAiTWljIEJpYXMiIH0sCisJeyAiTWljIEJpYXMiLCBOVUxMLCAiT25ib2FyZCBNaWNyb3Bob25lIiB9LAorCisJLyogRXh0ZXJuYWwgbWljcm9waG9uZSAqLworCXsgIkxNSUNOIiwgTlVMTCwgIk1pYyBCaWFzIiB9LAorCXsgIkxNSUNQIiwgTlVMTCwgIk1pYyBCaWFzIiB9LAorCXsgIk1pYyBCaWFzIiwgTlVMTCwgIkV4dGVybmFsIE1pY3JvcGhvbmUiIH0sCit9OworCitzdGF0aWMgaW50IG1pZ29yX2RhaV9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBtaWdvcl9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKG1pZ29yX2RhcG1fd2lkZ2V0cykpOworCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKworCXJldHVybiAwOworfQorCisvKiBtaWdvciBkaWdpdGFsIGF1ZGlvIGludGVyZmFjZSBnbHVlIC0gY29ubmVjdHMgY29kZWMgPC0tPiBDUFUgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBtaWdvcl9kYWkgPSB7CisJLm5hbWUgPSAid204OTc4IiwKKwkuc3RyZWFtX25hbWUgPSAiV004OTc4IiwKKwkuY3B1X2RhaSA9ICZzaXVfaTJzX2RhaSwKKwkuY29kZWNfZGFpID0gJndtODk3OF9kYWksCisJLm9wcyA9ICZtaWdvcl9kYWlfb3BzLAorCS5pbml0ID0gbWlnb3JfZGFpX2luaXQsCit9OworCisvKiBtaWdvciBhdWRpbyBtYWNoaW5lIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY19taWdvciA9IHsKKwkubmFtZSA9ICJNaWdvLVIiLAorCS5wbGF0Zm9ybSA9ICZzaXVfcGxhdGZvcm0sCisJLmRhaV9saW5rID0gJm1pZ29yX2RhaSwKKwkubnVtX2xpbmtzID0gMSwKK307CisKKy8qIG1pZ29yIGF1ZGlvIHN1YnN5c3RlbSAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBtaWdvcl9zbmRfZGV2ZGF0YSA9IHsKKwkuY2FyZCA9ICZzbmRfc29jX21pZ29yLAorCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl93bTg5NzgsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWlnb3Jfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgbWlnb3JfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBjbGtfcmVnaXN0ZXIoJnNpdW1ja2JfY2xrKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFBvcnQgbnVtYmVyIHVzZWQgb24gdGhpcyBtYWNoaW5lOiBwb3J0IEIgKi8KKwltaWdvcl9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAxKTsKKwlpZiAoIW1pZ29yX3NuZF9kZXZpY2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcGRldmFsbG9jOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKG1pZ29yX3NuZF9kZXZpY2UsICZtaWdvcl9zbmRfZGV2ZGF0YSk7CisKKwltaWdvcl9zbmRfZGV2ZGF0YS5kZXYgPSAmbWlnb3Jfc25kX2RldmljZS0+ZGV2OworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChtaWdvcl9zbmRfZGV2aWNlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVwZGV2YWRkOworCisJcmV0dXJuIDA7CisKK2VwZGV2YWRkOgorCXBsYXRmb3JtX2RldmljZV9wdXQobWlnb3Jfc25kX2RldmljZSk7CitlcGRldmFsbG9jOgorCWNsa191bnJlZ2lzdGVyKCZzaXVtY2tiX2Nsayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1pZ29yX2V4aXQodm9pZCkKK3sKKwljbGtfdW5yZWdpc3Rlcigmc2l1bWNrYl9jbGspOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1pZ29yX3NuZF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChtaWdvcl9pbml0KTsKK21vZHVsZV9leGl0KG1pZ29yX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgTWlnb3IiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9zaXUuaCBiL3NvdW5kL3NvYy9zaC9zaXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2MwNGFiCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NoL3NpdS5oCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogc2l1LmggLSBBTFNBIFNvQyBkcml2ZXIgZm9yIFJlbmVzYXMgU0g3MzQzLCBTSDc3MjIgU0lVIHBlcmlwaGVyYWwuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ2FybG9zIE11bm96IDxjYXJsb3NAa2VuYXRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIFNJVV9ICisjZGVmaW5lIFNJVV9ICisKKy8qIENvbW1vbiBrZXJuZWwgYW5kIHVzZXItc3BhY2UgZmlybXdhcmUtYnVpbGRpbmcgZGVmaW5lcyBhbmQgdHlwZXMgKi8KKworI2RlZmluZSBZUkFNMF9TSVpFCQkoMHgwMDQwIC8gNCkJCS8qIDE2ICovCisjZGVmaW5lIFlSQU0xX1NJWkUJCSgweDAwODAgLyA0KQkJLyogMzIgKi8KKyNkZWZpbmUgWVJBTTJfU0laRQkJKDB4MDA0MCAvIDQpCQkvKiAxNiAqLworI2RlZmluZSBZUkFNM19TSVpFCQkoMHgwMDgwIC8gNCkJCS8qIDMyICovCisjZGVmaW5lIFlSQU00X1NJWkUJCSgweDAwODAgLyA0KQkJLyogMzIgKi8KKyNkZWZpbmUgWVJBTV9ERUZfU0laRQkJKFlSQU0wX1NJWkUgKyBZUkFNMV9TSVpFICsgWVJBTTJfU0laRSArIFwKKwkJCQkgWVJBTTNfU0laRSArIFlSQU00X1NJWkUpCisjZGVmaW5lIFlSQU1fRklSX1NJWkUJCSgweDA0MDAgLyA0KQkJLyogMjU2ICovCisjZGVmaW5lIFlSQU1fSUlSX1NJWkUJCSgweDAyMDAgLyA0KQkJLyogMTI4ICovCisKKyNkZWZpbmUgWFJBTTBfU0laRQkJKDB4MDQwMCAvIDQpCQkvKiAyNTYgKi8KKyNkZWZpbmUgWFJBTTFfU0laRQkJKDB4MDIwMCAvIDQpCQkvKiAxMjggKi8KKyNkZWZpbmUgWFJBTTJfU0laRQkJKDB4MDIwMCAvIDQpCQkvKiAxMjggKi8KKworLyogUFJBTSBwcm9ncmFtIGFycmF5IHNpemUgKi8KKyNkZWZpbmUgUFJBTTBfU0laRQkJKDB4MDEwMCAvIDQpCQkvKiA2NCAqLworI2RlZmluZSBQUkFNMV9TSVpFCQkoKDB4MjAwMCAtIDB4MDEwMCkgLyA0KQkvKiAxOTg0ICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3Qgc2l1X3NwYl9wYXJhbSB7CisJX191MzIJYWIxYTsJLyogaW5wdXQgRklGTyBhZGRyZXNzICovCisJX191MzIJYWIwYTsJLyogb3V0cHV0IEZJRk8gYWRkcmVzcyAqLworCV9fdTMyCWRpcjsJLyogMD10aGUgYXRoZXIgZXhjZXB0IENQVU9VVFBVVCwgMT1DUFVJTlBVVCAqLworCV9fdTMyCWV2ZW50OwkvKiBTUEIgcHJvZ3JhbSBzdGFydGluZyBjb25kaXRpb25zICovCisJX191MzIJc3RmaWZvOwkvKiBTVEZJRk8gcmVnaXN0ZXIgc2V0dGluZyB2YWx1ZSAqLworCV9fdTMyCXRyZGF0OwkvKiBUUkRBVCByZWdpc3RlciBzZXR0aW5nIHZhbHVlICovCit9OworCitzdHJ1Y3Qgc2l1X2Zpcm13YXJlIHsKKwlfX3UzMgkJCXlyYW1fZmlyX2NvZWZmW1lSQU1fRklSX1NJWkVdOworCV9fdTMyCQkJcHJhbTBbUFJBTTBfU0laRV07CisJX191MzIJCQlwcmFtMVtQUkFNMV9TSVpFXTsKKwlfX3UzMgkJCXlyYW0wW1lSQU0wX1NJWkVdOworCV9fdTMyCQkJeXJhbTFbWVJBTTFfU0laRV07CisJX191MzIJCQl5cmFtMltZUkFNMl9TSVpFXTsKKwlfX3UzMgkJCXlyYW0zW1lSQU0zX1NJWkVdOworCV9fdTMyCQkJeXJhbTRbWVJBTTRfU0laRV07CisJX191MzIJCQlzcGJwYXJfbnVtOworCXN0cnVjdCBzaXVfc3BiX3BhcmFtCXNwYnBhclszMl07Cit9OworCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFpLmg+CisKKyNkZWZpbmUgU0lVX1BFUklPRF9CWVRFU19NQVgJODE5MgkJLyogRE1BIHRyYW5zZmVyL3BlcmlvZCBzaXplICovCisjZGVmaW5lIFNJVV9QRVJJT0RfQllURVNfTUlOCTI1NgkJLyogRE1BIHRyYW5zZmVyL3BlcmlvZCBzaXplICovCisjZGVmaW5lIFNJVV9QRVJJT0RTX01BWAkJNjQJCS8qIE1heCBwZXJpb2RzIGluIGJ1ZmZlciAqLworI2RlZmluZSBTSVVfUEVSSU9EU19NSU4JCTQJCS8qIE1pbiBwZXJpb2RzIGluIGJ1ZmZlciAqLworI2RlZmluZSBTSVVfQlVGRkVSX0JZVEVTX01BWAkoU0lVX1BFUklPRF9CWVRFU19NQVggKiBTSVVfUEVSSU9EU19NQVgpCisKKy8qIFNJVSBwb3J0czogb25seSBvbmUgY2FuIGJlIHVzZWQgYXQgYSB0aW1lICovCitlbnVtIHsKKwlTSVVfUE9SVF9BLAorCVNJVV9QT1JUX0IsCisJU0lVX1BPUlRfTlVNLAorfTsKKworLyogU0lVIGNsb2NrIGNvbmZpZ3VyYXRpb24gKi8KK2VudW0geworCVNJVV9DTEtBX1BMTCwKKwlTSVVfQ0xLQV9FWFQsCisJU0lVX0NMS0JfUExMLAorCVNJVV9DTEtCX0VYVAorfTsKKworc3RydWN0IHNpdV9pbmZvIHsKKwlpbnQJCQlwb3J0X2lkOworCXUzMiBfX2lvbWVtCQkqcHJhbTsKKwl1MzIgX19pb21lbQkJKnhyYW07CisJdTMyIF9faW9tZW0JCSp5cmFtOworCXUzMiBfX2lvbWVtCQkqcmVnOworCXN0cnVjdCBzaXVfZmlybXdhcmUJZnc7Cit9OworCitzdHJ1Y3Qgc2l1X3N0cmVhbSB7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CQl0YXNrbGV0OworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbQkqc3Vic3RyZWFtOworCXNuZF9wY21fZm9ybWF0X3QJCWZvcm1hdDsKKwlzaXplX3QJCQkJYnVmX2J5dGVzOworCXNpemVfdAkJCQlwZXJpb2RfYnl0ZXM7CisJaW50CQkJCWN1cl9wZXJpb2Q7CS8qIFBlcmlvZCBjdXJyZW50bHkgaW4gZG1hICovCisJdTMyCQkJCXZvbHVtZTsKKwlzbmRfcGNtX3NmcmFtZXNfdAkJeGZlcl9jbnQ7CS8qIE51bWJlciBvZiBmcmFtZXMgKi8KKwl1OAkJCQlyd19mbGc7CQkvKiB0cmFuc2ZlciBzdGF0dXMgKi8KKwkvKiBETUEgc3RhdHVzICovCisJc3RydWN0IGRtYV9jaGFuCQkJKmNoYW47CQkvKiBETUEgY2hhbm5lbCAqLworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcgkqdHhfZGVzYzsKKwlkbWFfY29va2llX3QJCQljb29raWU7CisJc3RydWN0IHNoX2RtYWVfc2xhdmUJCXBhcmFtOworfTsKKworc3RydWN0IHNpdV9wb3J0IHsKKwl1bnNpZ25lZCBsb25nCQlwbGF5X2NhcDsJLyogVXNlZCB0byB0cmFjayBmdWxsIGR1cGxleCAqLworCXN0cnVjdCBzbmRfcGNtCQkqcGNtOworCXN0cnVjdCBzaXVfc3RyZWFtCXBsYXliYWNrOworCXN0cnVjdCBzaXVfc3RyZWFtCWNhcHR1cmU7CisJdTMyCQkJc3RmaWZvOwkJLyogU1RGSUZPIHZhbHVlIGZyb20gZmlybXdhcmUgKi8KKwl1MzIJCQl0cmRhdDsJCS8qIFRSREFUIHZhbHVlIGZyb20gZmlybXdhcmUgKi8KK307CisKK2V4dGVybiBzdHJ1Y3Qgc2l1X3BvcnQgKnNpdV9wb3J0c1tTSVVfUE9SVF9OVU1dOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzaXVfcG9ydCAqc2l1X3BvcnRfaW5mbyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0KKwkJdG9fcGxhdGZvcm1fZGV2aWNlKHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXYpOworCXJldHVybiBzaXVfcG9ydHNbcGRldi0+aWRdOworfQorCisvKiBSZWdpc3RlciBhY2Nlc3MgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzaXVfd3JpdGUzMih1MzIgX19pb21lbSAqYWRkciwgdTMyIHZhbCkKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgc2l1X3JlYWQzMih1MzIgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoYWRkcik7Cit9CisKKy8qIFNJVSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU0lVX0lGQ1RMCSgweDAwMCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfU1JDVEwJKDB4MDA0IC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TRk9STQkoMHgwMDggLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0NLQ1RMCSgweDAwYyAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfVFJEQVQJKDB4MDEwIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TVEZJRk8JKDB4MDE0IC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9EUEFLCSgweDAxYyAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfQ0tSRVYJKDB4MDIwIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9FVk5UQwkoMHgwMjggLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX1NCQ1RMCSgweDA0MCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfU0JQU0VUCSgweDA0NCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfU0JGU1RTCSgweDA2OCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfU0JEVkNBCSgweDA2YyAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfU0JEVkNCCSgweDA3MCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfU0JBQ1RJVgkoMHgwNzQgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0RNQUlBCSgweDA5MCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfRE1BSUIJKDB4MDk0IC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9ETUFPQQkoMHgwOTggLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0RNQU9CCSgweDA5YyAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfRE1BTUwJKDB4MGEwIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TUFNUUwkoMHgwY2MgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX1NQQ1RMCSgweDBkMCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfQlJHQVNFTAkoMHgxMDAgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0JSUkEJKDB4MTA0IC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9CUkdCU0VMCSgweDEwOCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfQlJSQgkoMHgxMGMgLyBzaXplb2YodTMyKSkKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtIHNpdV9wbGF0Zm9ybTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgc2l1X2kyc19kYWk7CisKK2ludCBzaXVfaW5pdF9wb3J0KGludCBwb3J0LCBzdHJ1Y3Qgc2l1X3BvcnQgKipwb3J0X2luZm8sIHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7Cit2b2lkIHNpdV9mcmVlX3BvcnQoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8pOworCisjZW5kaWYKKworI2VuZGlmIC8qIFNJVV9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvc2l1X2RhaS5jIGIvc291bmQvc29jL3NoL3NpdV9kYWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDUyZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NoL3NpdV9kYWkuYwpAQCAtMCwwICsxLDg0NyBAQAorLyoKKyAqIHNpdV9kYWkuYyAtIEFMU0EgU29DIGRyaXZlciBmb3IgUmVuZXNhcyBTSDczNDMsIFNINzcyMiBTSVUgcGVyaXBoZXJhbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBDYXJsb3MgTXVub3ogPGNhcmxvc0BrZW5hdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL3NpdS5oPgorCisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYWkuaD4KKworI2luY2x1ZGUgInNpdS5oIgorCisvKiBCb2FyZCBzcGVjaWZpY3MgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCisjIGRlZmluZSBTSVVfTUFYX1ZPTFVNRQkJMHgxMDAwCisjZWxzZQorIyBkZWZpbmUgU0lVX01BWF9WT0xVTUUJCTB4N2ZmZgorI2VuZGlmCisKKyNkZWZpbmUgUFJBTV9TSVpFCTB4MjAwMAorI2RlZmluZSBYUkFNX1NJWkUJMHg4MDAKKyNkZWZpbmUgWVJBTV9TSVpFCTB4ODAwCisKKyNkZWZpbmUgWFJBTV9PRkZTRVQJMHg0MDAwCisjZGVmaW5lIFlSQU1fT0ZGU0VUCTB4NjAwMAorI2RlZmluZSBSRUdfT0ZGU0VUCTB4YzAwMAorCisjZGVmaW5lIFBMQVlCQUNLX0VOQUJMRUQJMQorI2RlZmluZSBDQVBUVVJFX0VOQUJMRUQJCTIKKworI2RlZmluZSBWT0xVTUVfQ0FQVFVSRQkJMAorI2RlZmluZSBWT0xVTUVfUExBWUJBQ0sJCTEKKyNkZWZpbmUgREZMVF9WT0xVTUVfTEVWRUwJMHgwODAwMDgwMAorCisvKgorICogU1BESUYgaXMgb25seSBhdmFpbGFibGUgb24gcG9ydCBBIGFuZCBvbiBzb21lIFNJVSBpbXBsZW1lbnRhdGlvbnMgaXQgaXMgb25seQorICogYXZhaWxhYmxlIGZvciBpbnB1dC4gRHVlIHRvIHRoZSBsYWNrIG9mIGhhcmR3YXJlIHRvIHRlc3QgaXQsIFNQRElGIGlzIGxlZnQKKyAqIGRpc2FibGVkIGluIHRoaXMgZHJpdmVyIHZlcnNpb24KKyAqLworc3RydWN0IGZvcm1hdF9mbGFnIHsKKwl1MzIJaTJzOworCXUzMglwY207CisJdTMyCXNwZGlmOworCXUzMgltYXNrOworfTsKKworc3RydWN0IHBvcnRfZmxhZyB7CisJc3RydWN0IGZvcm1hdF9mbGFnCXBsYXliYWNrOworCXN0cnVjdCBmb3JtYXRfZmxhZwljYXB0dXJlOworfTsKKworc3RhdGljIHN0cnVjdCBwb3J0X2ZsYWcgc2l1X2ZsYWdzW1NJVV9QT1JUX05VTV0gPSB7CisJW1NJVV9QT1JUX0FdID0geworCQkucGxheWJhY2sgPSB7CisJCQkuaTJzCT0gMHg1MDAwMDAwMCwKKwkJCS5wY20JPSAweDQwMDAwMDAwLAorCQkJLnNwZGlmCT0gMHg4MDAwMDAwMCwJLyogbm90IG9uIGFsbCBTSVUgdmVyc2lvbnMgKi8KKwkJCS5tYXNrCT0gMHhkMDAwMDAwMCwKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuaTJzCT0gMHgwNTAwMDAwMCwKKwkJCS5wY20JPSAweDA0MDAwMDAwLAorCQkJLnNwZGlmCT0gMHgwODAwMDAwMCwKKwkJCS5tYXNrCT0gMHgwZDAwMDAwMCwKKwkJfSwKKwl9LAorCVtTSVVfUE9SVF9CXSA9IHsKKwkJLnBsYXliYWNrID0geworCQkJLmkycwk9IDB4MDA1MDAwMDAsCisJCQkucGNtCT0gMHgwMDQwMDAwMCwKKwkJCS5zcGRpZgk9IDAsCQkvKiBpbXBvc3NpYmxlIC0gdHVybiBvZmYgKi8KKwkJCS5tYXNrCT0gMHgwMDUwMDAwMCwKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuaTJzCT0gMHgwMDA1MDAwMCwKKwkJCS5wY20JPSAweDAwMDQwMDAwLAorCQkJLnNwZGlmCT0gMCwJCS8qIGltcG9zc2libGUgLSB0dXJuIG9mZiAqLworCQkJLm1hc2sJPSAweDAwMDUwMDAwLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgdm9pZCBzaXVfZGFpX3N0YXJ0KHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKworCWRldl9kYmcocG9ydF9pbmZvLT5wY20tPmNhcmQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBUdXJuIG9uIFNJVSBjbG9jayAqLworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoc2l1X2kyc19kYWkuZGV2KTsKKworCS8qIElzc3VlIHNvZnR3YXJlIHJlc2V0IHRvIHNpdSAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU1JDVEwsIDApOworCisJLyogV2FpdCBmb3IgdGhlIHJlc2V0IHRvIHRha2UgZWZmZWN0ICovCisJdWRlbGF5KDEpOworCisJcG9ydF9pbmZvLT5zdGZpZm8gPSAwOworCXBvcnRfaW5mby0+dHJkYXQgPSAwOworCisJLyogcG9ydEEsIHBvcnRCLCBTSVUgb3BlcmF0ZSAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU1JDVEwsIDB4MzAxKTsKKworCS8qIHBvcnRBPTI1NmZzLCBwb3J0Qj0yNTZmcyAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfQ0tDVEwsIDB4NDA0MDAwMDApOworCisJLyogcG9ydEEncyBCUkcgZG9lcyBub3QgZGl2aWRlIFNJVUNLQSAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfQlJHQVNFTCwgMCk7CisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9CUlJBLCAwKTsKKworCS8qIHBvcnRCJ3MgQlJHIGRpdmlkZXMgU0lVQ0tCIGJ5IGhhbGYgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX0JSR0JTRUwsIDEpOworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfQlJSQiwgMCk7CisKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX0lGQ1RMLCAweDQ0NDQwMDAwKTsKKworCS8qIHBvcnRBOiAzMiBiaXQvZnMsIG1hc3RlcjsgcG9ydEI6IDMyIGJpdC9mcywgbWFzdGVyICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TRk9STSwgMHgwYzBjMDAwMCk7CisKKwkvKgorCSAqIFZvbHVtZSBsZXZlbHM6IGxvb2tzIGxpa2UgdGhlIERTUCBmaXJtd2FyZSBpbXBsZW1lbnRzIHZvbHVtZSBjb250cm9scworCSAqIGRpZmZlcmVudGx5IGZyb20gd2hhdCdzIGRlc2NyaWJlZCBpbiB0aGUgZGF0YXNoZWV0CisJICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TQkRWQ0EsIHBvcnRfaW5mby0+cGxheWJhY2sudm9sdW1lKTsKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NCRFZDQiwgcG9ydF9pbmZvLT5jYXB0dXJlLnZvbHVtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNpdV9kYWlfc3RvcCh2b2lkKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKworCS8qIFNJVSBzb2Z0d2FyZSByZXNldCAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU1JDVEwsIDApOworCisJLyogVHVybiBvZmYgU0lVIGNsb2NrICovCisJcG1fcnVudGltZV9wdXRfc3luYyhzaXVfaTJzX2RhaS5kZXYpOworfQorCitzdGF0aWMgdm9pZCBzaXVfZGFpX3NwYkFzZWxlY3Qoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8pCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzaXVfZmlybXdhcmUgKmZ3ID0gJmluZm8tPmZ3OworCXUzMiAqeWRlZiA9IGZ3LT55cmFtMDsKKwl1MzIgaWR4OworCisJLyogcGF0aCBBIHVzZSAqLworCWlmICghaW5mby0+cG9ydF9pZCkKKwkJaWR4ID0gMTsJCS8qIHBvcnRBICovCisJZWxzZQorCQlpZHggPSAyOwkJLyogcG9ydEIgKi8KKworCXlkZWZbMF0gPSAoZnctPnNwYnBhcltpZHhdLmFiMWEgPDwgMTYpIHwKKwkJKGZ3LT5zcGJwYXJbaWR4XS5hYjBhIDw8IDgpIHwKKwkJKGZ3LT5zcGJwYXJbaWR4XS5kaXIgPDwgNykgfCAzOworCXlkZWZbMV0gPSBmdy0+eXJhbTBbMV07CS8qIDB4MDMwMDAzMDAgKi8KKwl5ZGVmWzJdID0gKDE2IC8gMikgPDwgMjQ7CisJeWRlZlszXSA9IGZ3LT55cmFtMFszXTsJLyogMCAqLworCXlkZWZbNF0gPSBmdy0+eXJhbTBbNF07CS8qIDAgKi8KKwl5ZGVmWzddID0gZnctPnNwYnBhcltpZHhdLmV2ZW50OworCXBvcnRfaW5mby0+c3RmaWZvIHw9IGZ3LT5zcGJwYXJbaWR4XS5zdGZpZm87CisJcG9ydF9pbmZvLT50cmRhdCB8PSBmdy0+c3BicGFyW2lkeF0udHJkYXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNpdV9kYWlfc3BiQnNlbGVjdChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbykKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNpdV9maXJtd2FyZSAqZncgPSAmaW5mby0+Znc7CisJdTMyICp5ZGVmID0gZnctPnlyYW0wOworCXUzMiBpZHg7CisKKwkvKiBwYXRoIEIgdXNlICovCisJaWYgKCFpbmZvLT5wb3J0X2lkKQorCQlpZHggPSA3OwkJLyogcG9ydEEgKi8KKwllbHNlCisJCWlkeCA9IDg7CQkvKiBwb3J0QiAqLworCisJeWRlZls1XSA9IChmdy0+c3BicGFyW2lkeF0uYWIxYSA8PCAxNikgfAorCQkoZnctPnNwYnBhcltpZHhdLmFiMGEgPDwgOCkgfCAxOworCXlkZWZbNl0gPSBmdy0+c3BicGFyW2lkeF0uZXZlbnQ7CisJcG9ydF9pbmZvLT5zdGZpZm8gfD0gZnctPnNwYnBhcltpZHhdLnN0ZmlmbzsKKwlwb3J0X2luZm8tPnRyZGF0IHw9IGZ3LT5zcGJwYXJbaWR4XS50cmRhdDsKK30KKworc3RhdGljIHZvaWQgc2l1X2RhaV9vcGVuKHN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKwl1MzIgc3JjdGwsIGlmY3RsOworCisJc3JjdGwgPSBzaXVfcmVhZDMyKGJhc2UgKyBTSVVfU1JDVEwpOworCWlmY3RsID0gc2l1X3JlYWQzMihiYXNlICsgU0lVX0lGQ1RMKTsKKworCXN3aXRjaCAoaW5mby0+cG9ydF9pZCkgeworCWNhc2UgU0lVX1BPUlRfQToKKwkJLyogcG9ydEEgb3BlcmF0ZXMgKi8KKwkJc3JjdGwgfD0gMHgyMDA7CisJCWlmY3RsICY9IH4weGMyOworCQlicmVhazsKKwljYXNlIFNJVV9QT1JUX0I6CisJCS8qIHBvcnRCIG9wZXJhdGVzICovCisJCXNyY3RsIHw9IDB4MTAwOworCQlpZmN0bCAmPSB+MHgzMTsKKwkJYnJlYWs7CisJfQorCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TUkNUTCwgc3JjdGwpOworCS8qIFVubXV0ZSBhbmQgY29uZmlndXJlIHBvcnRBICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9JRkNUTCwgaWZjdGwpOworfQorCisvKgorICogQXQgdGhlIG1vbWVudCBvbmx5IGZpeGVkIExlZnQtdXBwZXIsIExlZnQtbG93ZXIsIFJpZ2h0LXVwcGVyLCBSaWdodC1sb3dlcgorICogcGFja2luZyBpcyBzdXBwb3J0ZWQKKyAqLworc3RhdGljIHZvaWQgc2l1X2RhaV9wY21kYXRhcGFjayhzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbSkKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisJdTMyIGRwYWs7CisKKwlkcGFrID0gc2l1X3JlYWQzMihiYXNlICsgU0lVX0RQQUspOworCisJc3dpdGNoIChpbmZvLT5wb3J0X2lkKSB7CisJY2FzZSBTSVVfUE9SVF9BOgorCQlkcGFrICY9IH4weGMwMDAwMDAwOworCQlicmVhazsKKwljYXNlIFNJVV9QT1JUX0I6CisJCWRwYWsgJj0gfjB4MDBjMDAwMDA7CisJCWJyZWFrOworCX0KKworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfRFBBSywgZHBhayk7Cit9CisKK3N0YXRpYyBpbnQgc2l1X2RhaV9zcGJzdGFydChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbykKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisJc3RydWN0IHNpdV9maXJtd2FyZSAqZncgPSAmaW5mby0+Znc7CisJdTMyICp5ZGVmID0gZnctPnlyYW0wOworCWludCBjbnQ7CisJdTMyIF9faW9tZW0gKmFkZDsKKwl1MzIgKnB0cjsKKworCS8qIExvYWQgU1BCIFByb2dyYW0gaW4gUFJBTSAqLworCXB0ciA9IGZ3LT5wcmFtMDsKKwlhZGQgPSBpbmZvLT5wcmFtOworCWZvciAoY250ID0gMDsgY250IDwgUFJBTTBfU0laRTsgY250KyssIGFkZCsrLCBwdHIrKykKKwkJc2l1X3dyaXRlMzIoYWRkLCAqcHRyKTsKKworCXB0ciA9IGZ3LT5wcmFtMTsKKwlhZGQgPSBpbmZvLT5wcmFtICsgKDB4MDEwMCAvIHNpemVvZih1MzIpKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IFBSQU0xX1NJWkU7IGNudCsrLCBhZGQrKywgcHRyKyspCisJCXNpdV93cml0ZTMyKGFkZCwgKnB0cik7CisKKwkvKiBYUkFNIGluaXRpYWxpemF0aW9uICovCisJYWRkID0gaW5mby0+eHJhbTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IFhSQU0wX1NJWkUgKyBYUkFNMV9TSVpFICsgWFJBTTJfU0laRTsgY250KyssIGFkZCsrKQorCQlzaXVfd3JpdGUzMihhZGQsIDApOworCisJLyogWVJBTSB2YXJpYWJsZSBhcmVhIGluaXRpYWxpemF0aW9uICovCisJYWRkID0gaW5mby0+eXJhbTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IFlSQU1fREVGX1NJWkU7IGNudCsrLCBhZGQrKykKKwkJc2l1X3dyaXRlMzIoYWRkLCB5ZGVmW2NudF0pOworCisJLyogWVJBTSBGSVIgY29lZmZpY2llbnQgYXJlYSBpbml0aWFsaXphdGlvbiAqLworCWFkZCA9IGluZm8tPnlyYW0gKyAoMHgwMjAwIC8gc2l6ZW9mKHUzMikpOworCWZvciAoY250ID0gMDsgY250IDwgWVJBTV9GSVJfU0laRTsgY250KyssIGFkZCsrKQorCQlzaXVfd3JpdGUzMihhZGQsIGZ3LT55cmFtX2Zpcl9jb2VmZltjbnRdKTsKKworCS8qIFlSQU0gSUlSIGNvZWZmaWNpZW50IGFyZWEgaW5pdGlhbGl6YXRpb24gKi8KKwlhZGQgPSBpbmZvLT55cmFtICsgKDB4MDYwMCAvIHNpemVvZih1MzIpKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IFlSQU1fSUlSX1NJWkU7IGNudCsrLCBhZGQrKykKKwkJc2l1X3dyaXRlMzIoYWRkLCAwKTsKKworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfVFJEQVQsIHBvcnRfaW5mby0+dHJkYXQpOworCXBvcnRfaW5mby0+dHJkYXQgPSAweDA7CisKKworCS8qIFNQQiBzdGFydCBjb25kaXRpb246IHNvZnR3YXJlICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TQkFDVElWLCAwKTsKKwkvKiBTdGFydCBTUEIgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NCQ1RMLCAweGMwMDAwMDAwKTsKKwkvKiBXYWl0IGZvciBwcm9ncmFtIHRvIGhhbHQgKi8KKwljbnQgPSAweDEwMDAwOworCXdoaWxlICgtLWNudCAmJiBzaXVfcmVhZDMyKGJhc2UgKyBTSVVfU0JDVEwpICE9IDB4ODAwMDAwMDApCisJCWNwdV9yZWxheCgpOworCisJaWYgKCFjbnQpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBTUEIgcHJvZ3JhbSBzdGFydCBhZGRyZXNzIHNldHRpbmcgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NCUFNFVCwgMHgwMDQwMDAwMCk7CisJLyogU1BCIGhhcmR3YXJlIHN0YXJ0KEZJRk9DVEwgc291cmNlKSAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU0JBQ1RJViwgMHhjMDAwMDAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2l1X2RhaV9zcGJzdG9wKHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU0JBQ1RJViwgMCk7CisJLyogU1BCIHN0b3AgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NCQ1RMLCAwKTsKKworCXBvcnRfaW5mby0+c3RmaWZvID0gMDsKK30KKworLyoJCUFQSSBmdW5jdGlvbnMJCSovCisKKy8qIFBsYXliYWNrIGFuZCBjYXB0dXJlIGhhcmR3YXJlIHByb3BlcnRpZXMgYXJlIGlkZW50aWNhbCAqLworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNpdV9kYWlfcGNtX2h3ID0geworCS5pbmZvCQkJPSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCwKKwkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1MxNiwKKwkucmF0ZXMJCQk9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJLnJhdGVfbWluCQk9IDgwMDAsCisJLnJhdGVfbWF4CQk9IDQ4MDAwLAorCS5jaGFubmVsc19taW4JCT0gMiwKKwkuY2hhbm5lbHNfbWF4CQk9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXgJPSBTSVVfQlVGRkVSX0JZVEVTX01BWCwKKwkucGVyaW9kX2J5dGVzX21pbgk9IFNJVV9QRVJJT0RfQllURVNfTUlOLAorCS5wZXJpb2RfYnl0ZXNfbWF4CT0gU0lVX1BFUklPRF9CWVRFU19NQVgsCisJLnBlcmlvZHNfbWluCQk9IFNJVV9QRVJJT0RTX01JTiwKKwkucGVyaW9kc19tYXgJCT0gU0lVX1BFUklPRFNfTUFYLAorfTsKKworc3RhdGljIGludCBzaXVfZGFpX2luZm9fdm9sdW1lKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdHJsLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8gPSBzbmRfa2NvbnRyb2xfY2hpcChrY3RybCk7CisKKwlkZXZfZGJnKHBvcnRfaW5mby0+cGNtLT5jYXJkLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMjsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IFNJVV9NQVhfVk9MVU1FOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2l1X2RhaV9nZXRfdm9sdW1lKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdHJsLAorCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8gPSBzbmRfa2NvbnRyb2xfY2hpcChrY3RybCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcG9ydF9pbmZvLT5wY20tPmNhcmQtPmRldjsKKwl1MzIgdm9sOworCisJZGV2X2RiZyhkZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJc3dpdGNoIChrY3RybC0+cHJpdmF0ZV92YWx1ZSkgeworCWNhc2UgVk9MVU1FX1BMQVlCQUNLOgorCQkvKiBQbGF5YmFjayBpcyBhbHdheXMgb24gcG9ydCAwICovCisJCXZvbCA9IHBvcnRfaW5mby0+cGxheWJhY2sudm9sdW1lOworCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHZvbCAmIDB4ZmZmZjsKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSB2b2wgPj4gMTYgJiAweGZmZmY7CisJCWJyZWFrOworCWNhc2UgVk9MVU1FX0NBUFRVUkU6CisJCS8qIENhcHR1cmUgaXMgYWx3YXlzIG9uIHBvcnQgMSAqLworCQl2b2wgPSBwb3J0X2luZm8tPmNhcHR1cmUudm9sdW1lOworCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHZvbCAmIDB4ZmZmZjsKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSB2b2wgPj4gMTYgJiAweGZmZmY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiJXMoKSBpbnZhbGlkIHByaXZhdGVfdmFsdWU9JWxkXG4iLAorCQkJX19mdW5jX18sIGtjdHJsLT5wcml2YXRlX3ZhbHVlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2l1X2RhaV9wdXRfdm9sdW1lKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdHJsLAorCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8gPSBzbmRfa2NvbnRyb2xfY2hpcChrY3RybCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcG9ydF9pbmZvLT5wY20tPmNhcmQtPmRldjsKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisJdTMyIG5ld192b2w7CisJdTMyIGN1cl92b2w7CisKKwlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPCAwIHx8CisJICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID4gU0lVX01BWF9WT0xVTUUgfHwKKwkgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPCAwIHx8CisJICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID4gU0lVX01BWF9WT0xVTUUpCisJCXJldHVybiAtRUlOVkFMOworCisJbmV3X3ZvbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIHwKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPDwgMTY7CisKKwkvKiBTZWUgY29tbWVudCBhYm92ZSAtIERTUCBmaXJtd2FyZSBpbXBsZW1lbnRhdGlvbiAqLworCXN3aXRjaCAoa2N0cmwtPnByaXZhdGVfdmFsdWUpIHsKKwljYXNlIFZPTFVNRV9QTEFZQkFDSzoKKwkJLyogUGxheWJhY2sgaXMgYWx3YXlzIG9uIHBvcnQgMCAqLworCQljdXJfdm9sID0gcG9ydF9pbmZvLT5wbGF5YmFjay52b2x1bWU7CisJCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU0JEVkNBLCBuZXdfdm9sKTsKKwkJcG9ydF9pbmZvLT5wbGF5YmFjay52b2x1bWUgPSBuZXdfdm9sOworCQlicmVhazsKKwljYXNlIFZPTFVNRV9DQVBUVVJFOgorCQkvKiBDYXB0dXJlIGlzIGFsd2F5cyBvbiBwb3J0IDEgKi8KKwkJY3VyX3ZvbCA9IHBvcnRfaW5mby0+Y2FwdHVyZS52b2x1bWU7CisJCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU0JEVkNCLCBuZXdfdm9sKTsKKwkJcG9ydF9pbmZvLT5jYXB0dXJlLnZvbHVtZSA9IG5ld192b2w7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiJXMoKSBpbnZhbGlkIHByaXZhdGVfdmFsdWU9JWxkXG4iLAorCQkJX19mdW5jX18sIGtjdHJsLT5wcml2YXRlX3ZhbHVlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGN1cl92b2wgIT0gbmV3X3ZvbCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHBsYXliYWNrX2NvbnRyb2xzID0geworCS5pZmFjZQkJPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZQkJPSAiUENNIFBsYXliYWNrIFZvbHVtZSIsCisJLmluZGV4CQk9IDAsCisJLmluZm8JCT0gc2l1X2RhaV9pbmZvX3ZvbHVtZSwKKwkuZ2V0CQk9IHNpdV9kYWlfZ2V0X3ZvbHVtZSwKKwkucHV0CQk9IHNpdV9kYWlfcHV0X3ZvbHVtZSwKKwkucHJpdmF0ZV92YWx1ZQk9IFZPTFVNRV9QTEFZQkFDSywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjYXB0dXJlX2NvbnRyb2xzID0geworCS5pZmFjZQkJPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZQkJPSAiUENNIENhcHR1cmUgVm9sdW1lIiwKKwkuaW5kZXgJCT0gMCwKKwkuaW5mbwkJPSBzaXVfZGFpX2luZm9fdm9sdW1lLAorCS5nZXQJCT0gc2l1X2RhaV9nZXRfdm9sdW1lLAorCS5wdXQJCT0gc2l1X2RhaV9wdXRfdm9sdW1lLAorCS5wcml2YXRlX3ZhbHVlCT0gVk9MVU1FX0NBUFRVUkUsCit9OworCitpbnQgc2l1X2luaXRfcG9ydChpbnQgcG9ydCwgc3RydWN0IHNpdV9wb3J0ICoqcG9ydF9pbmZvLCBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY2FyZC0+ZGV2OworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdHJsOworCWludCByZXQ7CisKKwkqcG9ydF9pbmZvID0ga3phbGxvYyhzaXplb2YoKipwb3J0X2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoISpwb3J0X2luZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X2RiZyhkZXYsICIlczogcG9ydCAjJWRAJXBcbiIsIF9fZnVuY19fLCBwb3J0LCAqcG9ydF9pbmZvKTsKKworCSgqcG9ydF9pbmZvKS0+cGxheWJhY2sudm9sdW1lID0gREZMVF9WT0xVTUVfTEVWRUw7CisJKCpwb3J0X2luZm8pLT5jYXB0dXJlLnZvbHVtZSA9IERGTFRfVk9MVU1FX0xFVkVMOworCisJLyoKKwkgKiBBZGQgbWl4ZXIgc3VwcG9ydC4gVGhlIFNQQiBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgdm9sdW1lLiBCb3RoCisJICogcG9ydHMgdXNlIHRoZSBzYW1lIFNQQi4gVGhlcmVmb3JlLCB3ZSBvbmx5IHJlZ2lzdGVyIG9uZQorCSAqIGNvbnRyb2wgaW5zdGFuY2Ugc2luY2UgaXQgd2lsbCBiZSB1c2VkIGJ5IGJvdGggY2hhbm5lbHMuCisJICogSW4gZXJyb3IgY2FzZSB3ZSBjb250aW51ZSB3aXRob3V0IGNvbnRyb2xzLgorCSAqLworCWtjdHJsID0gc25kX2N0bF9uZXcxKCZwbGF5YmFja19jb250cm9scywgKnBvcnRfaW5mbyk7CisJcmV0ID0gc25kX2N0bF9hZGQoY2FyZCwga2N0cmwpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGRldiwKKwkJCSJmYWlsZWQgdG8gYWRkIHBsYXliYWNrIGNvbnRyb2xzICVwIHBvcnQ9JWQgZXJyPSVkXG4iLAorCQkJa2N0cmwsIHBvcnQsIHJldCk7CisKKwlrY3RybCA9IHNuZF9jdGxfbmV3MSgmY2FwdHVyZV9jb250cm9scywgKnBvcnRfaW5mbyk7CisJcmV0ID0gc25kX2N0bF9hZGQoY2FyZCwga2N0cmwpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGRldiwKKwkJCSJmYWlsZWQgdG8gYWRkIGNhcHR1cmUgY29udHJvbHMgJXAgcG9ydD0lZCBlcnI9JWRcbiIsCisJCQlrY3RybCwgcG9ydCwgcmV0KTsKKworCXJldHVybiAwOworfQorCit2b2lkIHNpdV9mcmVlX3BvcnQoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8pCit7CisJa2ZyZWUocG9ydF9pbmZvKTsKK30KKworc3RhdGljIGludCBzaXVfZGFpX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnQgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNpdV9wb3J0CSpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHN1YnN0cmVhbSk7CisJaW50IHJldDsKKworCWRldl9kYmcoc3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldiwgIiVzOiBwb3J0PSVkQCVwXG4iLCBfX2Z1bmNfXywKKwkJaW5mby0+cG9ydF9pZCwgcG9ydF9pbmZvKTsKKworCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmc2l1X2RhaV9wY21faHcpOworCisJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnQsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpCisJCXJldHVybiByZXQ7CisKKwlzaXVfZGFpX3N0YXJ0KHBvcnRfaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2l1X2RhaV9zaHV0ZG93bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzaXVfcG9ydAkqcG9ydF9pbmZvID0gc2l1X3BvcnRfaW5mbyhzdWJzdHJlYW0pOworCisJZGV2X2RiZyhzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2LCAiJXM6IHBvcnQ9JWRAJXBcbiIsIF9fZnVuY19fLAorCQlpbmZvLT5wb3J0X2lkLCBwb3J0X2luZm8pOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXBvcnRfaW5mby0+cGxheV9jYXAgJj0gflBMQVlCQUNLX0VOQUJMRUQ7CisJZWxzZQorCQlwb3J0X2luZm8tPnBsYXlfY2FwICY9IH5DQVBUVVJFX0VOQUJMRUQ7CisKKwkvKiBTdG9wIHRoZSBzaXUgaWYgdGhlIG90aGVyIHN0cmVhbSBpcyBub3QgdXNpbmcgaXQgKi8KKwlpZiAoIXBvcnRfaW5mby0+cGxheV9jYXApIHsKKwkJLyogZHVyaW5nIHN0bXJlYWQgb3Igc3Rtd3JpdGUgPyAqLworCQlCVUdfT04ocG9ydF9pbmZvLT5wbGF5YmFjay5yd19mbGcgfHwgcG9ydF9pbmZvLT5jYXB0dXJlLnJ3X2ZsZyk7CisJCXNpdV9kYWlfc3Bic3RvcChwb3J0X2luZm8pOworCQlzaXVfZGFpX3N0b3AoKTsKKwl9Cit9CisKKy8qIFBDTSBwYXJ0IG9mIHNpdV9kYWlfcGxheWJhY2tfcHJlcGFyZSgpIC8gc2l1X2RhaV9jYXB0dXJlX3ByZXBhcmUoKSAqLworc3RhdGljIGludCBzaXVfZGFpX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnQgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHN1YnN0cmVhbSk7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW07CisJaW50IHNlbGYsIHJldDsKKworCWRldl9kYmcoc3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldiwKKwkJIiVzOiBwb3J0ICVkLCBhY3RpdmUgc3RyZWFtcyAlbHgsICVkIGNoYW5uZWxzXG4iLAorCQlfX2Z1bmNfXywgaW5mby0+cG9ydF9pZCwgcG9ydF9pbmZvLT5wbGF5X2NhcCwgcnQtPmNoYW5uZWxzKTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCXNlbGYgPSBQTEFZQkFDS19FTkFCTEVEOworCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+cGxheWJhY2s7CisJfSBlbHNlIHsKKwkJc2VsZiA9IENBUFRVUkVfRU5BQkxFRDsKKwkJc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPmNhcHR1cmU7CisJfQorCisJLyogU2V0IHVwIHRoZSBzaXUgaWYgbm90IGFscmVhZHkgZG9uZSAqLworCWlmICghcG9ydF9pbmZvLT5wbGF5X2NhcCkgeworCQlzaXVfc3RyZWFtLT5yd19mbGcgPSAwOwkvKiBzdHJlYW0tZGF0YSB0cmFuc2ZlciBmbGFnICovCisKKwkJc2l1X2RhaV9zcGJBc2VsZWN0KHBvcnRfaW5mbyk7CisJCXNpdV9kYWlfc3BiQnNlbGVjdChwb3J0X2luZm8pOworCisJCXNpdV9kYWlfb3BlbihzaXVfc3RyZWFtKTsKKworCQlzaXVfZGFpX3BjbWRhdGFwYWNrKHNpdV9zdHJlYW0pOworCisJCXJldCA9IHNpdV9kYWlfc3Bic3RhcnQocG9ydF9pbmZvKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWw7CisJfQorCisJcG9ydF9pbmZvLT5wbGF5X2NhcCB8PSBzZWxmOworCitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTSVUgY2FuIHNldCBidXMgZm9ybWF0IHRvIEkyUyAvIFBDTSAvIFNQRElGIGluZGVwZW5kZW50bHkgZm9yIHBsYXliYWNrIGFuZAorICogY2FwdHVyZSwgaG93ZXZlciwgdGhlIGN1cnJlbnQgQVBJIHNldHMgdGhlIGJ1cyBmb3JtYXQgZ2xvYmFsbHkgZm9yIGEgREFJLgorICovCitzdGF0aWMgaW50IHNpdV9kYWlfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwkJCSAgIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCXUzMiBpZmN0bDsKKworCWRldl9kYmcoZGFpLT5kZXYsICIlczogZm10IDB4JXggb24gcG9ydCAlZFxuIiwKKwkJX19mdW5jX18sIGZtdCwgaW5mby0+cG9ydF9pZCk7CisKKwlpZiAoaW5mby0+cG9ydF9pZCA8IDApCisJCXJldHVybiAtRU5PREVWOworCisJLyogSGVyZSBzZWxlY3QgYmV0d2VlbiBJMlMgLyBQQ00gLyBTUERJRiAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJaWZjdGwgPSBzaXVfZmxhZ3NbaW5mby0+cG9ydF9pZF0ucGxheWJhY2suaTJzIHwKKwkJCXNpdV9mbGFnc1tpbmZvLT5wb3J0X2lkXS5jYXB0dXJlLmkyczsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWlmY3RsID0gc2l1X2ZsYWdzW2luZm8tPnBvcnRfaWRdLnBsYXliYWNrLnBjbSB8CisJCQlzaXVfZmxhZ3NbaW5mby0+cG9ydF9pZF0uY2FwdHVyZS5wY207CisJCWJyZWFrOworCS8qIFNQRElGIGRpc2FibGVkIC0gc2VlIGNvbW1lbnQgYXQgdGhlIHRvcCAqLworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmY3RsIHw9IH4oc2l1X2ZsYWdzW2luZm8tPnBvcnRfaWRdLnBsYXliYWNrLm1hc2sgfAorCQkgICBzaXVfZmxhZ3NbaW5mby0+cG9ydF9pZF0uY2FwdHVyZS5tYXNrKSAmCisJCXNpdV9yZWFkMzIoYmFzZSArIFNJVV9JRkNUTCk7CisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9JRkNUTCwgaWZjdGwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2l1X2RhaV9zZXRfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgY2xrX2lkLAorCQkJICAgICAgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IGNsayAqc2l1X2NsaywgKnBhcmVudF9jbGs7CisJY2hhciAqc2l1X25hbWUsICpwYXJlbnRfbmFtZTsKKwlpbnQgcmV0OworCisJaWYgKGRpciAhPSBTTkRfU09DX0NMT0NLX0lOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldl9kYmcoZGFpLT5kZXYsICIlczogdXNpbmcgY2xvY2sgJWRcbiIsIF9fZnVuY19fLCBjbGtfaWQpOworCisJc3dpdGNoIChjbGtfaWQpIHsKKwljYXNlIFNJVV9DTEtBX1BMTDoKKwkJc2l1X25hbWUgPSAic2l1YV9jbGsiOworCQlwYXJlbnRfbmFtZSA9ICJwbGxfY2xrIjsKKwkJYnJlYWs7CisJY2FzZSBTSVVfQ0xLQV9FWFQ6CisJCXNpdV9uYW1lID0gInNpdWFfY2xrIjsKKwkJcGFyZW50X25hbWUgPSAic2l1bWNrYV9jbGsiOworCQlicmVhazsKKwljYXNlIFNJVV9DTEtCX1BMTDoKKwkJc2l1X25hbWUgPSAic2l1Yl9jbGsiOworCQlwYXJlbnRfbmFtZSA9ICJwbGxfY2xrIjsKKwkJYnJlYWs7CisJY2FzZSBTSVVfQ0xLQl9FWFQ6CisJCXNpdV9uYW1lID0gInNpdWJfY2xrIjsKKwkJcGFyZW50X25hbWUgPSAic2l1bWNrYl9jbGsiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzaXVfY2xrID0gY2xrX2dldChzaXVfaTJzX2RhaS5kZXYsIHNpdV9uYW1lKTsKKwlpZiAoSVNfRVJSKHNpdV9jbGspKQorCQlyZXR1cm4gUFRSX0VSUihzaXVfY2xrKTsKKworCXBhcmVudF9jbGsgPSBjbGtfZ2V0KHNpdV9pMnNfZGFpLmRldiwgcGFyZW50X25hbWUpOworCWlmICghSVNfRVJSKHBhcmVudF9jbGspKSB7CisJCXJldCA9IGNsa19zZXRfcGFyZW50KHNpdV9jbGssIHBhcmVudF9jbGspOworCQlpZiAoIXJldCkKKwkJCWNsa19zZXRfcmF0ZShzaXVfY2xrLCBmcmVxKTsKKwkJY2xrX3B1dChwYXJlbnRfY2xrKTsKKwl9CisKKwljbGtfcHV0KHNpdV9jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHNpdV9kYWlfb3BzID0geworCS5zdGFydHVwCT0gc2l1X2RhaV9zdGFydHVwLAorCS5zaHV0ZG93bgk9IHNpdV9kYWlfc2h1dGRvd24sCisJLnByZXBhcmUJPSBzaXVfZGFpX3ByZXBhcmUsCisJLnNldF9zeXNjbGsJPSBzaXVfZGFpX3NldF9zeXNjbGssCisJLnNldF9mbXQJPSBzaXVfZGFpX3NldF9mbXQsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgc2l1X2kyc19kYWkgPSB7CisJLm5hbWUgPSAic2gtc2l1IiwKKwkuaWQgPSAwLAorCS5wbGF5YmFjayA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2LAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkgfSwKKwkub3BzID0gJnNpdV9kYWlfb3BzLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNpdV9pMnNfZGFpKTsKKworc3RhdGljIGludCBfX2RldmluaXQgc2l1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgKnJlZ2lvbjsKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm87CisJaW50IHJldDsKKworCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgInNpdV9zcGIuYmluIiwgJnBkZXYtPmRldik7CisJaWYgKHJldCkKKwkJZ290byBlcmVxZnc7CisKKwkvKgorCSAqIExvYWRlZCBmaXJtd2FyZSBpcyAiY29uc3QiIC0gcmVhZCBvbmx5LCBidXQgd2UgaGF2ZSB0byBtb2RpZnkgaXQgaW4KKwkgKiBzbmRfc2l1X3NoNzM0M19zcGJBc2VsZWN0KCkgYW5kIHNuZF9zaXVfc2g3MzQzX3NwYkJzZWxlY3QoKQorCSAqLworCW1lbWNweSgmaW5mby0+ZncsIGZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSk7CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlZ2V0cmVzOworCX0KKworCXJlZ2lvbiA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksCisJCQkJICAgIHBkZXYtPm5hbWUpOworCWlmICghcmVnaW9uKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlNJVSByZWdpb24gYWxyZWFkeSBjbGFpbWVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVyZXFtZW1yZWc7CisJfQorCisJcmV0ID0gLUVOT01FTTsKKwlpbmZvLT5wcmFtID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBQUkFNX1NJWkUpOworCWlmICghaW5mby0+cHJhbSkKKwkJZ290byBlbWFwcHJhbTsKKwlpbmZvLT54cmFtID0gaW9yZW1hcChyZXMtPnN0YXJ0ICsgWFJBTV9PRkZTRVQsIFhSQU1fU0laRSk7CisJaWYgKCFpbmZvLT54cmFtKQorCQlnb3RvIGVtYXB4cmFtOworCWluZm8tPnlyYW0gPSBpb3JlbWFwKHJlcy0+c3RhcnQgKyBZUkFNX09GRlNFVCwgWVJBTV9TSVpFKTsKKwlpZiAoIWluZm8tPnlyYW0pCisJCWdvdG8gZW1hcHlyYW07CisJaW5mby0+cmVnID0gaW9yZW1hcChyZXMtPnN0YXJ0ICsgUkVHX09GRlNFVCwgcmVzb3VyY2Vfc2l6ZShyZXMpIC0KKwkJCSAgICBSRUdfT0ZGU0VUKTsKKwlpZiAoIWluZm8tPnJlZykKKwkJZ290byBlbWFwcmVnOworCisJc2l1X2kyc19kYWkuZGV2ID0gJnBkZXYtPmRldjsKKwlzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGEgPSBpbmZvOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWlzKCZzaXVfaTJzX2RhaSwgMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZWRhaWluaXQ7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX3BsYXRmb3JtKCZzaXVfcGxhdGZvcm0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVzb2NyZWdwOworCisJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisKKwlyZXR1cm4gcmV0OworCitlc29jcmVncDoKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcygmc2l1X2kyc19kYWksIDEpOworZWRhaWluaXQ6CisJaW91bm1hcChpbmZvLT5yZWcpOworZW1hcHJlZzoKKwlpb3VubWFwKGluZm8tPnlyYW0pOworZW1hcHlyYW06CisJaW91bm1hcChpbmZvLT54cmFtKTsKK2VtYXB4cmFtOgorCWlvdW5tYXAoaW5mby0+cHJhbSk7CitlbWFwcHJhbToKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2VyZXFtZW1yZWc6CitlZ2V0cmVzOgorZXJlcWZ3OgorCWtmcmVlKGluZm8pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc2l1X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmc2l1X3BsYXRmb3JtKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcygmc2l1X2kyc19kYWksIDEpOworCisJaW91bm1hcChpbmZvLT5yZWcpOworCWlvdW5tYXAoaW5mby0+eXJhbSk7CisJaW91bm1hcChpbmZvLT54cmFtKTsKKwlpb3VubWFwKGluZm8tPnByYW0pOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHJlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJa2ZyZWUoaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2l1X2RyaXZlciA9IHsKKwkuZHJpdmVyIAk9IHsKKwkJLm5hbWUJPSAic2hfc2l1IiwKKwl9LAorCS5wcm9iZQkJPSBzaXVfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzaXVfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNpdV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2l1X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzaXVfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzaXVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2l1X2luaXQpCittb2R1bGVfZXhpdChzaXVfZXhpdCkKKworTU9EVUxFX0FVVEhPUigiQ2FybG9zIE11bm96IDxjYXJsb3NAa2VuYXRpLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgU0g3NzIyIFNJVSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9zaXVfcGNtLmMgYi9zb3VuZC9zb2Mvc2gvc2l1X3BjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZWZjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvc2gvc2l1X3BjbS5jCkBAIC0wLDAgKzEsNjE2IEBACisvKgorICogc2l1X3BjbS5jIC0gQUxTQSBkcml2ZXIgZm9yIFJlbmVzYXMgU0g3MzQzLCBTSDc3MjIgU0lVIHBlcmlwaGVyYWwuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ2FybG9zIE11bm96IDxjYXJsb3NAa2VuYXRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFpLmg+CisKKyNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CisjaW5jbHVkZSA8YXNtL3NpdS5oPgorCisjaW5jbHVkZSAic2l1LmgiCisKKyNkZWZpbmUgR0VUX01BWF9QRVJJT0RTKGJ1Zl9ieXRlcywgcGVyaW9kX2J5dGVzKSBcCisJCQkJKChidWZfYnl0ZXMpIC8gKHBlcmlvZF9ieXRlcykpCisjZGVmaW5lIFBFUklPRF9PRkZTRVQoYnVmX2FkZHIsIHBlcmlvZF9udW0sIHBlcmlvZF9ieXRlcykgXAorCQkJCSgoYnVmX2FkZHIpICsgKChwZXJpb2RfbnVtKSAqIChwZXJpb2RfYnl0ZXMpKSkKKworI2RlZmluZSBSV0ZfU1RNX1JECQkweDAxCQkvKiBSZWFkIGluIHByb2dyZXNzICovCisjZGVmaW5lIFJXRl9TVE1fV1QJCTB4MDIJCS8qIFdyaXRlIGluIHByb2dyZXNzICovCisKK3N0cnVjdCBzaXVfcG9ydCAqc2l1X3BvcnRzW1NJVV9QT1JUX05VTV07CisKKy8qIHRyYW5zZmVyc2l6ZSBpcyBudW1iZXIgb2YgdTMyIGRtYSB0cmFuc2ZlcnMgcGVyIHBlcmlvZCAqLworc3RhdGljIGludCBzaXVfcGNtX3N0bXdyaXRlX3N0b3Aoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8pCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+cGxheWJhY2s7CisJdTMyIHN0ZmlmbzsKKworCWlmICghc2l1X3N0cmVhbS0+cndfZmxnKQorCQlyZXR1cm4gLUVQRVJNOworCisJLyogb3V0cHV0IEZJRk8gZGlzYWJsZSAqLworCXN0ZmlmbyA9IHNpdV9yZWFkMzIoYmFzZSArIFNJVV9TVEZJRk8pOworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU1RGSUZPLCBzdGZpZm8gJiB+MHgwYzE4MGMxOCk7CisJcHJfZGVidWcoIiVzOiBTVEZJRk8gJXggLT4gJXhcbiIsIF9fZnVuY19fLAorCQkgc3RmaWZvLCBzdGZpZm8gJiB+MHgwYzE4MGMxOCk7CisKKwkvKiBkdXJpbmcgc3Rtd3JpdGUgY2xlYXIgKi8KKwlzaXVfc3RyZWFtLT5yd19mbGcgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2l1X3BjbV9zdG13cml0ZV9zdGFydChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbykKK3sKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPnBsYXliYWNrOworCisJaWYgKHNpdV9zdHJlYW0tPnJ3X2ZsZykKKwkJcmV0dXJuIC1FUEVSTTsKKworCS8qIEN1cnJlbnQgcGVyaW9kIGluIGJ1ZmZlciAqLworCXBvcnRfaW5mby0+cGxheWJhY2suY3VyX3BlcmlvZCA9IDA7CisKKwkvKiBkdXJpbmcgc3Rtd3JpdGUgZmxhZyBzZXQgKi8KKwlzaXVfc3RyZWFtLT5yd19mbGcgPSBSV0ZfU1RNX1dUOworCisJLyogRE1BIHRyYW5zZmVyIHN0YXJ0ICovCisJdGFza2xldF9zY2hlZHVsZSgmc2l1X3N0cmVhbS0+dGFza2xldCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2l1X2RtYV90eF9jb21wbGV0ZSh2b2lkICphcmcpCit7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW0gPSBhcmc7CisKKwlpZiAoIXNpdV9zdHJlYW0tPnJ3X2ZsZykKKwkJcmV0dXJuOworCisJLyogVXBkYXRlIGNvbXBsZXRlZCBwZXJpb2QgY291bnQgKi8KKwlpZiAoKytzaXVfc3RyZWFtLT5jdXJfcGVyaW9kID49CisJICAgIEdFVF9NQVhfUEVSSU9EUyhzaXVfc3RyZWFtLT5idWZfYnl0ZXMsCisJCQkgICAgc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzKSkKKwkJc2l1X3N0cmVhbS0+Y3VyX3BlcmlvZCA9IDA7CisKKwlwcl9kZWJ1ZygiJXM6IGRvbmUgcGVyaW9kICMlZCAoJXUvJXUgYnl0ZXMpLCBjb29raWUgJWRcbiIsCisJCV9fZnVuY19fLCBzaXVfc3RyZWFtLT5jdXJfcGVyaW9kLAorCQlzaXVfc3RyZWFtLT5jdXJfcGVyaW9kICogc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzLAorCQlzaXVfc3RyZWFtLT5idWZfYnl0ZXMsIHNpdV9zdHJlYW0tPmNvb2tpZSk7CisKKwl0YXNrbGV0X3NjaGVkdWxlKCZzaXVfc3RyZWFtLT50YXNrbGV0KTsKKworCS8qIE5vdGlmeSBhbHNhOiBhIHBlcmlvZCBpcyBkb25lICovCisJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzaXVfc3RyZWFtLT5zdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IHNpdV9wY21fd3Jfc2V0KHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvLAorCQkJICBkbWFfYWRkcl90IGJ1ZmYsIHUzMiBzaXplKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPnBsYXliYWNrOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gc2l1X3N0cmVhbS0+c3Vic3RyZWFtOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXY7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjOworCWRtYV9jb29raWVfdCBjb29raWU7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCXUzMiBzdGZpZm87CisKKwlzZ19pbml0X3RhYmxlKCZzZywgMSk7CisJc2dfc2V0X3BhZ2UoJnNnLCBwZm5fdG9fcGFnZShQRk5fRE9XTihidWZmKSksCisJCSAgICBzaXplLCBvZmZzZXRfaW5fcGFnZShidWZmKSk7CisJc2dfZG1hX2FkZHJlc3MoJnNnKSA9IGJ1ZmY7CisKKwlkZXNjID0gc2l1X3N0cmVhbS0+Y2hhbi0+ZGV2aWNlLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZyhzaXVfc3RyZWFtLT5jaGFuLAorCQkmc2csIDEsIERNQV9UT19ERVZJQ0UsIERNQV9QUkVQX0lOVEVSUlVQVCB8IERNQV9DVFJMX0FDSyk7CisJaWYgKCFkZXNjKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGEgZG1hIGRlc2NyaXB0b3JcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXNjLT5jYWxsYmFjayA9IHNpdV9kbWFfdHhfY29tcGxldGU7CisJZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSBzaXVfc3RyZWFtOworCWNvb2tpZSA9IGRlc2MtPnR4X3N1Ym1pdChkZXNjKTsKKwlpZiAoY29va2llIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzdWJtaXQgYSBkbWEgdHJhbnNmZXJcbiIpOworCQlyZXR1cm4gY29va2llOworCX0KKworCXNpdV9zdHJlYW0tPnR4X2Rlc2MgPSBkZXNjOworCXNpdV9zdHJlYW0tPmNvb2tpZSA9IGNvb2tpZTsKKworCWRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHNpdV9zdHJlYW0tPmNoYW4pOworCisJLyogb25seSBvdXRwdXQgRklGTyBlbmFibGUgKi8KKwlzdGZpZm8gPSBzaXVfcmVhZDMyKGJhc2UgKyBTSVVfU1RGSUZPKTsKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NURklGTywgc3RmaWZvIHwgKHBvcnRfaW5mby0+c3RmaWZvICYgMHgwYzE4MGMxOCkpOworCWRldl9kYmcoZGV2LCAiJXM6IFNURklGTyAleCAtPiAleFxuIiwgX19mdW5jX18sCisJCXN0Zmlmbywgc3RmaWZvIHwgKHBvcnRfaW5mby0+c3RmaWZvICYgMHgwYzE4MGMxOCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2l1X3BjbV9yZF9zZXQoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8sCisJCQkgIGRtYV9hZGRyX3QgYnVmZiwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+Y2FwdHVyZTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IHNpdV9zdHJlYW0tPnN1YnN0cmVhbTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2OworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYzsKKwlkbWFfY29va2llX3QgY29va2llOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKwl1MzIgc3RmaWZvOworCisJZGV2X2RiZyhkZXYsICIlczogJXVAJWxseFxuIiwgX19mdW5jX18sIHNpemUsICh1bnNpZ25lZCBsb25nIGxvbmcpYnVmZik7CisKKwlzZ19pbml0X3RhYmxlKCZzZywgMSk7CisJc2dfc2V0X3BhZ2UoJnNnLCBwZm5fdG9fcGFnZShQRk5fRE9XTihidWZmKSksCisJCSAgICBzaXplLCBvZmZzZXRfaW5fcGFnZShidWZmKSk7CisJc2dfZG1hX2FkZHJlc3MoJnNnKSA9IGJ1ZmY7CisKKwlkZXNjID0gc2l1X3N0cmVhbS0+Y2hhbi0+ZGV2aWNlLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZyhzaXVfc3RyZWFtLT5jaGFuLAorCQkmc2csIDEsIERNQV9GUk9NX0RFVklDRSwgRE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKKwlpZiAoIWRlc2MpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgZG1hIGRlc2NyaXB0b3JcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXNjLT5jYWxsYmFjayA9IHNpdV9kbWFfdHhfY29tcGxldGU7CisJZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSBzaXVfc3RyZWFtOworCWNvb2tpZSA9IGRlc2MtPnR4X3N1Ym1pdChkZXNjKTsKKwlpZiAoY29va2llIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzdWJtaXQgZG1hIGRlc2NyaXB0b3JcbiIpOworCQlyZXR1cm4gY29va2llOworCX0KKworCXNpdV9zdHJlYW0tPnR4X2Rlc2MgPSBkZXNjOworCXNpdV9zdHJlYW0tPmNvb2tpZSA9IGNvb2tpZTsKKworCWRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHNpdV9zdHJlYW0tPmNoYW4pOworCisJLyogb25seSBpbnB1dCBGSUZPIGVuYWJsZSAqLworCXN0ZmlmbyA9IHNpdV9yZWFkMzIoYmFzZSArIFNJVV9TVEZJRk8pOworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU1RGSUZPLCBzaXVfcmVhZDMyKGJhc2UgKyBTSVVfU1RGSUZPKSB8CisJCSAgICAocG9ydF9pbmZvLT5zdGZpZm8gJiAweDEzMDcxMzA3KSk7CisJZGV2X2RiZyhkZXYsICIlczogU1RGSUZPICV4IC0+ICV4XG4iLCBfX2Z1bmNfXywKKwkJc3RmaWZvLCBzdGZpZm8gfCAocG9ydF9pbmZvLT5zdGZpZm8gJiAweDEzMDcxMzA3KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2l1X2lvX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtID0gKHN0cnVjdCBzaXVfc3RyZWFtICopZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IHNpdV9zdHJlYW0tPnN1YnN0cmVhbTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2OworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ0ID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvID0gc2l1X3BvcnRfaW5mbyhzdWJzdHJlYW0pOworCisJZGV2X2RiZyhkZXYsICIlczogZmxhZ3MgJXhcbiIsIF9fZnVuY19fLCBzaXVfc3RyZWFtLT5yd19mbGcpOworCisJaWYgKCFzaXVfc3RyZWFtLT5yd19mbGcpIHsKKwkJZGV2X2RiZyhkZXYsICIlczogc3RyZWFtIGluYWN0aXZlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKSB7CisJCWRtYV9hZGRyX3QgYnVmZjsKKwkJc2l6ZV90IGNvdW50OworCQl1OCAqdmlydDsKKworCQlidWZmID0gKGRtYV9hZGRyX3QpUEVSSU9EX09GRlNFVChydC0+ZG1hX2FkZHIsCisJCQkJCQlzaXVfc3RyZWFtLT5jdXJfcGVyaW9kLAorCQkJCQkJc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzKTsKKwkJdmlydCA9IFBFUklPRF9PRkZTRVQocnQtPmRtYV9hcmVhLAorCQkJCSAgICAgc2l1X3N0cmVhbS0+Y3VyX3BlcmlvZCwKKwkJCQkgICAgIHNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlcyk7CisJCWNvdW50ID0gc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzOworCisJCS8qIERNQSB0cmFuc2ZlciBzdGFydCAqLworCQlzaXVfcGNtX3JkX3NldChwb3J0X2luZm8sIGJ1ZmYsIGNvdW50KTsKKwl9IGVsc2UgeworCQlzaXVfcGNtX3dyX3NldChwb3J0X2luZm8sCisJCQkgICAgICAgKGRtYV9hZGRyX3QpUEVSSU9EX09GRlNFVChydC0+ZG1hX2FkZHIsCisJCQkJCQlzaXVfc3RyZWFtLT5jdXJfcGVyaW9kLAorCQkJCQkJc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzKSwKKwkJCSAgICAgICBzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMpOworCX0KK30KKworLyogQ2FwdHVyZSAqLworc3RhdGljIGludCBzaXVfcGNtX3N0bXJlYWRfc3RhcnQoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8pCit7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5jYXB0dXJlOworCisJaWYgKHNpdV9zdHJlYW0tPnhmZXJfY250ID4gMHgxMDAwMDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoc2l1X3N0cmVhbS0+cndfZmxnKQorCQlyZXR1cm4gLUVQRVJNOworCisJLyogQ3VycmVudCBwZXJpb2QgaW4gYnVmZmVyICovCisJc2l1X3N0cmVhbS0+Y3VyX3BlcmlvZCA9IDA7CisKKwkvKiBkdXJpbmcgc3RtcmVhZCBmbGFnIHNldCAqLworCXNpdV9zdHJlYW0tPnJ3X2ZsZyA9IFJXRl9TVE1fUkQ7CisKKwl0YXNrbGV0X3NjaGVkdWxlKCZzaXVfc3RyZWFtLT50YXNrbGV0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpdV9wY21fc3RtcmVhZF9zdG9wKHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPmNhcHR1cmU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gc2l1X3N0cmVhbS0+c3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldjsKKwl1MzIgc3RmaWZvOworCisJaWYgKCFzaXVfc3RyZWFtLT5yd19mbGcpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiBpbnB1dCBGSUZPIGRpc2FibGUgKi8KKwlzdGZpZm8gPSBzaXVfcmVhZDMyKGJhc2UgKyBTSVVfU1RGSUZPKTsKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NURklGTywgc3RmaWZvICYgfjB4MTMwNzEzMDcpOworCWRldl9kYmcoZGV2LCAiJXM6IFNURklGTyAleCAtPiAleFxuIiwgX19mdW5jX18sCisJCXN0Zmlmbywgc3RmaWZvICYgfjB4MTMwNzEzMDcpOworCisJLyogZHVyaW5nIHN0bXJlYWQgZmxhZyBjbGVhciAqLworCXNpdV9zdHJlYW0tPnJ3X2ZsZyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzLAorCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3MtPnBjbS0+Y2FyZC0+ZGV2OworCWludCByZXQ7CisKKwlkZXZfZGJnKGRldiwgIiVzOiBwb3J0PSVkXG4iLCBfX2Z1bmNfXywgaW5mby0+cG9ydF9pZCk7CisKKwlyZXQgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3MsIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoZGV2LCAic25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKCkgZmFpbGVkXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2l1X3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3MpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzaXVfcG9ydAkqcG9ydF9pbmZvID0gc2l1X3BvcnRfaW5mbyhzcyk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3MtPnBjbS0+Y2FyZC0+ZGV2OworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtOworCisJaWYgKHNzLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPnBsYXliYWNrOworCWVsc2UKKwkJc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPmNhcHR1cmU7CisKKwlkZXZfZGJnKGRldiwgIiVzOiBwb3J0PSVkXG4iLCBfX2Z1bmNfXywgaW5mby0+cG9ydF9pZCk7CisKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzcyk7Cit9CisKK3N0YXRpYyBib29sIGZpbHRlcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKnNsYXZlKQoreworCXN0cnVjdCBzaF9kbWFlX3NsYXZlICpwYXJhbSA9IHNsYXZlOworCisJcHJfZGVidWcoIiVzOiBzbGF2ZSBJRCAlZFxuIiwgX19mdW5jX18sIHBhcmFtLT5zbGF2ZV9pZCk7CisKKwlpZiAodW5saWtlbHkocGFyYW0tPmRtYV9kZXYgIT0gY2hhbi0+ZGV2aWNlLT5kZXYpKQorCQlyZXR1cm4gZmFsc2U7CisKKwljaGFuLT5wcml2YXRlID0gcGFyYW07CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgc2l1X3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3MpCit7CisJLyogUGxheWJhY2sgLyBDYXB0dXJlICovCisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvID0gc2l1X3BvcnRfaW5mbyhzcyk7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW07CisJdTMyIHBvcnQgPSBpbmZvLT5wb3J0X2lkOworCXN0cnVjdCBzaXVfcGxhdGZvcm0gKnBkYXRhID0gc2l1X2kyc19kYWkuZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHNzLT5wY20tPmNhcmQtPmRldjsKKwlkbWFfY2FwX21hc2tfdCBtYXNrOworCXN0cnVjdCBzaF9kbWFlX3NsYXZlICpwYXJhbTsKKworCWRtYV9jYXBfemVybyhtYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCisJZGV2X2RiZyhkZXYsICIlcywgcG9ydD0lZEAlcFxuIiwgX19mdW5jX18sIHBvcnQsIHBvcnRfaW5mbyk7CisKKwlpZiAoc3MtPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCXNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5wbGF5YmFjazsKKwkJcGFyYW0gPSAmc2l1X3N0cmVhbS0+cGFyYW07CisJCXBhcmFtLT5zbGF2ZV9pZCA9IHBvcnQgPyBTSERNQV9TTEFWRV9TSVVCX1RYIDoKKwkJCVNIRE1BX1NMQVZFX1NJVUFfVFg7CisJfSBlbHNlIHsKKwkJc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPmNhcHR1cmU7CisJCXBhcmFtID0gJnNpdV9zdHJlYW0tPnBhcmFtOworCQlwYXJhbS0+c2xhdmVfaWQgPSBwb3J0ID8gU0hETUFfU0xBVkVfU0lVQl9SWCA6CisJCQlTSERNQV9TTEFWRV9TSVVBX1JYOworCX0KKworCXBhcmFtLT5kbWFfZGV2ID0gcGRhdGEtPmRtYV9kZXY7CisJLyogR2V0IERNQSBjaGFubmVsICovCisJc2l1X3N0cmVhbS0+Y2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgZmlsdGVyLCBwYXJhbSk7CisJaWYgKCFzaXVfc3RyZWFtLT5jaGFuKSB7CisJCWRldl9lcnIoZGV2LCAiRE1BIGNoYW5uZWwgYWxsb2NhdGlvbiBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzaXVfc3RyZWFtLT5zdWJzdHJlYW0gPSBzczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpdV9wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcykKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3MtPnBjbS0+Y2FyZC0+ZGV2OworCXN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvID0gc2l1X3BvcnRfaW5mbyhzcyk7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW07CisKKwlkZXZfZGJnKGRldiwgIiVzOiBwb3J0PSVkXG4iLCBfX2Z1bmNfXywgaW5mby0+cG9ydF9pZCk7CisKKwlpZiAoc3MtPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+cGxheWJhY2s7CisJZWxzZQorCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+Y2FwdHVyZTsKKworCWRtYV9yZWxlYXNlX2NoYW5uZWwoc2l1X3N0cmVhbS0+Y2hhbik7CisJc2l1X3N0cmVhbS0+Y2hhbiA9IE5VTEw7CisKKwlzaXVfc3RyZWFtLT5zdWJzdHJlYW0gPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2l1X3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3MpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvID0gc2l1X3BvcnRfaW5mbyhzcyk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3MtPnBjbS0+Y2FyZC0+ZGV2OworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgCSpydCA9IHNzLT5ydW50aW1lOworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtOworCXNuZF9wY21fc2ZyYW1lc190IHhmZXJfY250OworCisJaWYgKHNzLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPnBsYXliYWNrOworCWVsc2UKKwkJc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPmNhcHR1cmU7CisKKwlydCA9IHNpdV9zdHJlYW0tPnN1YnN0cmVhbS0+cnVudGltZTsKKworCXNpdV9zdHJlYW0tPmJ1Zl9ieXRlcyA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzcyk7CisJc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHNzKTsKKworCWRldl9kYmcoZGV2LCAiJXM6IHBvcnQ9JWQsICVkIGNoYW5uZWxzLCBwZXJpb2Q9JXUgYnl0ZXNcbiIsIF9fZnVuY19fLAorCQlpbmZvLT5wb3J0X2lkLCBydC0+Y2hhbm5lbHMsIHNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlcyk7CisKKwkvKiBXZSBvbmx5IHN1cHBvcnQgYnVmZmVycyB0aGF0IGFyZSBtdWx0aXBsZXMgb2YgdGhlIHBlcmlvZCAqLworCWlmIChzaXVfc3RyZWFtLT5idWZfYnl0ZXMgJSBzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMpIHsKKwkJZGV2X2VycihkZXYsICIlcygpIC0gYnVmZmVyPSVkIG5vdCBtdWx0aXBsZSBvZiBwZXJpb2Q9JWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc2l1X3N0cmVhbS0+YnVmX2J5dGVzLAorCQkgICAgICAgc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJeGZlcl9jbnQgPSBieXRlc190b19mcmFtZXMocnQsIHNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlcyk7CisJaWYgKCF4ZmVyX2NudCB8fCB4ZmVyX2NudCA+IDB4MTAwMDAwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaXVfc3RyZWFtLT5mb3JtYXQgPSBydC0+Zm9ybWF0OworCXNpdV9zdHJlYW0tPnhmZXJfY250ID0geGZlcl9jbnQ7CisKKwlkZXZfZGJnKGRldiwgInBvcnQ9JWQgYnVmPSVseCBidWZfYnl0ZXM9JWQgcGVyaW9kX2J5dGVzPSVkICIKKwkJImZvcm1hdD0lZCBjaGFubmVscz0lZCB4ZmVyX2NudD0lZFxuIiwgaW5mby0+cG9ydF9pZCwKKwkJKHVuc2lnbmVkIGxvbmcpcnQtPmRtYV9hZGRyLCBzaXVfc3RyZWFtLT5idWZfYnl0ZXMsCisJCXNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlcywKKwkJc2l1X3N0cmVhbS0+Zm9ybWF0LCBydC0+Y2hhbm5lbHMsIChpbnQpeGZlcl9jbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2l1X3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3MsIGludCBjbWQpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHNzLT5wY20tPmNhcmQtPmRldjsKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNpdV9wb3J0X2luZm8oc3MpOworCWludCByZXQ7CisKKwlkZXZfZGJnKGRldiwgIiVzOiBwb3J0PSVkQCVwLCBjbWQ9JWRcbiIsIF9fZnVuY19fLAorCQlpbmZvLT5wb3J0X2lkLCBwb3J0X2luZm8sIGNtZCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCWlmIChzcy0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCQlyZXQgPSBzaXVfcGNtX3N0bXdyaXRlX3N0YXJ0KHBvcnRfaW5mbyk7CisJCWVsc2UKKwkJCXJldCA9IHNpdV9wY21fc3RtcmVhZF9zdGFydChwb3J0X2luZm8pOworCisJCWlmIChyZXQgPCAwKQorCQkJZGV2X3dhcm4oZGV2LCAiJXM6IHN0YXJ0IGZhaWxlZCBvbiBwb3J0PSVkXG4iLAorCQkJCSBfX2Z1bmNfXywgaW5mby0+cG9ydF9pZCk7CisKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlpZiAoc3MtPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQkJc2l1X3BjbV9zdG13cml0ZV9zdG9wKHBvcnRfaW5mbyk7CisJCWVsc2UKKwkJCXNpdV9wY21fc3RtcmVhZF9zdG9wKHBvcnRfaW5mbyk7CisJCXJldCA9IDA7CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICIlcygpIHVuc3VwcG9ydGVkIGNtZD0lZFxuIiwgX19mdW5jX18sIGNtZCk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNvIGZhciBvbmx5IHJlc29sdXRpb24gb2Ygb25lIHBlcmlvZCBpcyBzdXBwb3J0ZWQsIHN1YmplY3QgdG8gZXh0ZW5kaW5nIHRoZQorICogZG1hbmdpbmUgQVBJCisgKi8KK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzaXVfcGNtX3BvaW50ZXJfZG1hKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3MpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3MtPnBjbS0+Y2FyZC0+ZGV2OworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNpdV9wb3J0X2luZm8oc3MpOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ0ID0gc3MtPnJ1bnRpbWU7CisJc2l6ZV90IHB0cjsKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbTsKKworCWlmIChzcy0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5wbGF5YmFjazsKKwllbHNlCisJCXNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5jYXB0dXJlOworCisJLyoKKwkgKiBwdHIgaXMgdGhlIG9mZnNldCBpbnRvIHRoZSBidWZmZXIgd2hlcmUgdGhlIGRtYSBpcyBjdXJyZW50bHkgYXQuIFdlCisJICogY2hlY2sgaWYgdGhlIGRtYSBidWZmZXIgaGFzIGp1c3Qgd3JhcHBlZC4KKwkgKi8KKwlwdHIgPSBQRVJJT0RfT0ZGU0VUKHJ0LT5kbWFfYWRkciwKKwkJCSAgICBzaXVfc3RyZWFtLT5jdXJfcGVyaW9kLAorCQkJICAgIHNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlcykgLSBydC0+ZG1hX2FkZHI7CisKKwlkZXZfZGJnKGRldiwKKwkJIiVzOiBwb3J0PSVkLCBldmVudHMgJXgsIEZTVFMgJXgsIHhmZXJyZWQgJXUvJXUsIGNvb2tpZSAlZFxuIiwKKwkJX19mdW5jX18sIGluZm8tPnBvcnRfaWQsIHNpdV9yZWFkMzIoYmFzZSArIFNJVV9FVk5UQyksCisJCXNpdV9yZWFkMzIoYmFzZSArIFNJVV9TQkZTVFMpLCBwdHIsIHNpdV9zdHJlYW0tPmJ1Zl9ieXRlcywKKwkJc2l1X3N0cmVhbS0+Y29va2llKTsKKworCWlmIChwdHIgPj0gc2l1X3N0cmVhbS0+YnVmX2J5dGVzKQorCQlwdHIgPSAwOworCisJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzcy0+cnVudGltZSwgcHRyKTsKK30KKworc3RhdGljIGludCBzaXVfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCQkgICAgICAgc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwkvKiBjYXJkLT5kZXYgPT0gc29jZGV2LT5kZXYsIHNlZSBzbmRfc29jX25ld19wY21zKCkgKi8KKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShjYXJkLT5kZXYpOworCWludCByZXQ7CisJaW50IGk7CisKKwkvKiBwZGV2LT5pZCBzZWxlY3RzIGJldHdlZW4gU0lVQSBhbmQgU0lVQiAqLworCWlmIChwZGV2LT5pZCA8IDAgfHwgcGRldi0+aWQgPj0gU0lVX1BPUlRfTlVNKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWluZm8tPnBvcnRfaWQgPSBwZGV2LT5pZDsKKworCS8qCisJICogV2hpbGUgdGhlIHNpdSBoYXMgMiBwb3J0cywgb25seSBvbmUgcG9ydCBjYW4gYmUgb24gYXQgYSB0aW1lIChvbmx5IDEKKwkgKiBTUEIpLiBTbyBmYXIgYWxsIHRoZSBib2FyZHMgdXNpbmcgdGhlIHNpdSBoYWQgb25seSBvbmUgb2YgdGhlIHBvcnRzCisJICogd2lyZWQgdG8gYSBjb2RlYy4gVG8gc2ltcGxpZnkgdGhpbmdzLCB3ZSBvbmx5IHJlZ2lzdGVyIG9uZSBwb3J0IHdpdGgKKwkgKiBhbHNhLiBJbiBjYXNlIGJvdGggcG9ydHMgYXJlIG5lZWRlZCwgaXQgc2hvdWxkIGJlIGNoYW5nZWQgaGVyZQorCSAqLworCWZvciAoaSA9IHBkZXYtPmlkOyBpIDwgcGRldi0+aWQgKyAxOyBpKyspIHsKKwkJc3RydWN0IHNpdV9wb3J0ICoqcG9ydF9pbmZvID0gJnNpdV9wb3J0c1tpXTsKKworCQlyZXQgPSBzaXVfaW5pdF9wb3J0KGksIHBvcnRfaW5mbywgY2FyZCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwKKwkJCQlTTkRSVl9ETUFfVFlQRV9ERVYsIE5VTEwsCisJCQkJU0lVX0JVRkZFUl9CWVRFU19NQVgsIFNJVV9CVUZGRVJfQllURVNfTUFYKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoY2FyZC0+ZGV2LAorCQkJICAgICAgICJzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKCkgZXJyPSVkIiwKKwkJCQlyZXQpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJKCpwb3J0X2luZm8pLT5wY20gPSBwY207CisKKwkJLyogSU8gdGFza2xldHMgKi8KKwkJdGFza2xldF9pbml0KCYoKnBvcnRfaW5mbyktPnBsYXliYWNrLnRhc2tsZXQsIHNpdV9pb190YXNrbGV0LAorCQkJICAgICAodW5zaWduZWQgbG9uZykmKCpwb3J0X2luZm8pLT5wbGF5YmFjayk7CisJCXRhc2tsZXRfaW5pdCgmKCpwb3J0X2luZm8pLT5jYXB0dXJlLnRhc2tsZXQsIHNpdV9pb190YXNrbGV0LAorCQkJICAgICAodW5zaWduZWQgbG9uZykmKCpwb3J0X2luZm8pLT5jYXB0dXJlKTsKKwl9CisKKwlkZXZfaW5mbyhjYXJkLT5kZXYsICJTdXBlckggU0lVIGRyaXZlciBpbml0aWFsaXplZC5cbiIpOworCXJldHVybiAwOworCitmYWlsOgorCXNpdV9mcmVlX3BvcnQoc2l1X3BvcnRzW3BkZXYtPmlkXSk7CisJZGV2X2VycihjYXJkLT5kZXYsICJTSVU6IGZhaWxlZCB0byBpbml0aWFsaXplLlxuIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2l1X3BjbV9mcmVlKHN0cnVjdCBzbmRfcGNtICpwY20pCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShwY20tPmNhcmQtPmRldik7CisJc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8gPSBzaXVfcG9ydHNbcGRldi0+aWRdOworCisJdGFza2xldF9raWxsKCZwb3J0X2luZm8tPmNhcHR1cmUudGFza2xldCk7CisJdGFza2xldF9raWxsKCZwb3J0X2luZm8tPnBsYXliYWNrLnRhc2tsZXQpOworCisJc2l1X2ZyZWVfcG9ydChwb3J0X2luZm8pOworCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX2ZyZWVfZm9yX2FsbChwY20pOworCisJZGV2X2RiZyhwY20tPmNhcmQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc2l1X3BjbV9vcHMgPSB7CisJLm9wZW4JCT0gc2l1X3BjbV9vcGVuLAorCS5jbG9zZQkJPSBzaXVfcGNtX2Nsb3NlLAorCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zCT0gc2l1X3BjbV9od19wYXJhbXMsCisJLmh3X2ZyZWUJPSBzaXVfcGNtX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBzaXVfcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBzaXVfcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIJPSBzaXVfcGNtX3BvaW50ZXJfZG1hLAorfTsKKworc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gc2l1X3BsYXRmb3JtID0geworCS5uYW1lCQk9ICJzaXUtYXVkaW8iLAorCS5wY21fb3BzIAk9ICZzaXVfcGNtX29wcywKKwkucGNtX25ldwk9IHNpdV9wY21fbmV3LAorCS5wY21fZnJlZQk9IHNpdV9wY21fZnJlZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChzaXVfcGxhdGZvcm0pOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jYWNoZS5jIGIvc291bmQvc29jL3NvYy1jYWNoZS5jCmluZGV4IGQyNTA1ZTguLjU4NjlkYzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY2FjaGUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNhY2hlLmMKQEAgLTE1LDYgKzE1LDc0IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogCitzdGF0aWMgdW5zaWduZWQgaW50IHNuZF9zb2NfNF8xMl9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgIHVuc2lnbmVkIGludCByZWcpCit7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJaWYgKHJlZyA+PSBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gY2FjaGVbcmVnXTsKK30KKworc3RhdGljIGludCBzbmRfc29jXzRfMTJfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJdTggZGF0YVsyXTsKKwlpbnQgcmV0OworCisJQlVHX09OKGNvZGVjLT52b2xhdGlsZV9yZWdpc3Rlcik7CisKKwlkYXRhWzBdID0gKHJlZyA8PCA0KSB8ICgodmFsdWUgPj4gOCkgJiAweDAwMGYpOworCWRhdGFbMV0gPSB2YWx1ZSAmIDB4MDBmZjsKKworCWlmIChyZWcgPCBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCisJCWNhY2hlW3JlZ10gPSB2YWx1ZTsKKworCWlmIChjb2RlYy0+Y2FjaGVfb25seSkgeworCQljb2RlYy0+Y2FjaGVfc3luYyA9IDE7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKTsKKwlpZiAocmV0ID09IDIpCisJCXJldHVybiAwOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIC1FSU87Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorc3RhdGljIGludCBzbmRfc29jXzRfMTJfc3BpX3dyaXRlKHZvaWQgKmNvbnRyb2xfZGF0YSwgY29uc3QgY2hhciAqZGF0YSwKKwkJCQkgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY29udHJvbF9kYXRhOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwl1OCBtc2dbMl07CisKKwlpZiAobGVuIDw9IDApCisJCXJldHVybiAwOworCisJbXNnWzBdID0gZGF0YVsxXTsKKwltc2dbMV0gPSBkYXRhWzBdOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJbWVtc2V0KCZ0LCAwLCAoc2l6ZW9mIHQpKTsKKworCXQudHhfYnVmID0gJm1zZ1swXTsKKwl0LmxlbiA9IGxlbjsKKworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7CisJc3BpX3N5bmMoc3BpLCAmbSk7CisKKwlyZXR1cm4gbGVuOworfQorI2Vsc2UKKyNkZWZpbmUgc25kX3NvY180XzEyX3NwaV93cml0ZSBOVUxMCisjZW5kaWYKKwogc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzdfOV9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJCQkgICAgIHVuc2lnbmVkIGludCByZWcpCiB7CkBAIC0zOCw2ICsxMDYsMTIgQEAKIAogCWlmIChyZWcgPCBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCiAJCWNhY2hlW3JlZ10gPSB2YWx1ZTsKKworCWlmIChjb2RlYy0+Y2FjaGVfb25seSkgeworCQljb2RlYy0+Y2FjaGVfc3luYyA9IDE7CisJCXJldHVybiAwOworCX0KKwogCXJldCA9IGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKTsKIAlpZiAocmV0ID09IDIpCiAJCXJldHVybiAwOwpAQCAtOTEsNiArMTY1LDExIEBACiAJaWYgKHJlZyA8IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKIAkJY2FjaGVbcmVnXSA9IHZhbHVlOwogCisJaWYgKGNvZGVjLT5jYWNoZV9vbmx5KSB7CisJCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKSA9PSAyKQogCQlyZXR1cm4gMDsKIAllbHNlCkBAIC0xMTksNiArMTk4LDExIEBACiAJaWYgKCFzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpKQogCQlyZWdfY2FjaGVbcmVnXSA9IHZhbHVlOwogCisJaWYgKGNvZGVjLT5jYWNoZV9vbmx5KSB7CisJCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAzKSA9PSAzKQogCQlyZXR1cm4gMDsKIAllbHNlCkBAIC0xMzEsMTAgKzIxNSwxNCBAQAogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCiAJaWYgKHJlZyA+PSBjb2RlYy0+cmVnX2NhY2hlX3NpemUgfHwKLQkgICAgc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKSkKKwkgICAgc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKSkgeworCQlpZiAoY29kZWMtPmNhY2hlX29ubHkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwogCQlyZXR1cm4gY29kZWMtPmh3X3JlYWQoY29kZWMsIHJlZyk7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCXJldHVybiBjYWNoZVtyZWddOworCX0KIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgKGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKQEAgLTE3MSw2ICsyNTksMTE0IEBACiAjZGVmaW5lIHNuZF9zb2NfOF8xNl9yZWFkX2kyYyBOVUxMCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgKGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3NvY18xNl84X3JlYWRfaTJjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkJICB1bnNpZ25lZCBpbnQgcikKK3sKKwlzdHJ1Y3QgaTJjX21zZyB4ZmVyWzJdOworCXUxNiByZWcgPSByOworCXU4IGRhdGE7CisJaW50IHJldDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKKworCS8qIFdyaXRlIHJlZ2lzdGVyICovCisJeGZlclswXS5hZGRyID0gY2xpZW50LT5hZGRyOworCXhmZXJbMF0uZmxhZ3MgPSAwOworCXhmZXJbMF0ubGVuID0gMjsKKwl4ZmVyWzBdLmJ1ZiA9ICh1OCAqKSZyZWc7CisKKwkvKiBSZWFkIGRhdGEgKi8KKwl4ZmVyWzFdLmFkZHIgPSBjbGllbnQtPmFkZHI7CisJeGZlclsxXS5mbGFncyA9IEkyQ19NX1JEOworCXhmZXJbMV0ubGVuID0gMTsKKwl4ZmVyWzFdLmJ1ZiA9ICZkYXRhOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgeGZlciwgMik7CisJaWYgKHJldCAhPSAyKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiaTJjX3RyYW5zZmVyKCkgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBkYXRhOworfQorI2Vsc2UKKyNkZWZpbmUgc25kX3NvY18xNl84X3JlYWRfaTJjIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgaW50IHNuZF9zb2NfMTZfOF9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgIHVuc2lnbmVkIGludCByZWcpCit7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisKKwlyZWcgJj0gMHhmZjsKKwlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBjYWNoZVtyZWddOworfQorCitzdGF0aWMgaW50IHNuZF9zb2NfMTZfOF93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCQkgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwl1OCBkYXRhWzNdOworCWludCByZXQ7CisKKwlCVUdfT04oY29kZWMtPnZvbGF0aWxlX3JlZ2lzdGVyKTsKKworCWRhdGFbMF0gPSAocmVnID4+IDgpICYgMHhmZjsKKwlkYXRhWzFdID0gcmVnICYgMHhmZjsKKwlkYXRhWzJdID0gdmFsdWU7CisKKwlyZWcgJj0gMHhmZjsKKwlpZiAocmVnIDwgY29kZWMtPnJlZ19jYWNoZV9zaXplKQorCQljYWNoZVtyZWddID0gdmFsdWU7CisKKwlpZiAoY29kZWMtPmNhY2hlX29ubHkpIHsKKwkJY29kZWMtPmNhY2hlX3N5bmMgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSBjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMyk7CisJaWYgKHJldCA9PSAzKQorCQlyZXR1cm4gMDsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwllbHNlCisJCXJldHVybiAtRUlPOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKK3N0YXRpYyBpbnQgc25kX3NvY18xNl84X3NwaV93cml0ZSh2b2lkICpjb250cm9sX2RhdGEsIGNvbnN0IGNoYXIgKmRhdGEsCisJCQkJIGludCBsZW4pCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvbnRyb2xfZGF0YTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJdTggbXNnWzNdOworCisJaWYgKGxlbiA8PSAwKQorCQlyZXR1cm4gMDsKKworCW1zZ1swXSA9IGRhdGFbMF07CisJbXNnWzFdID0gZGF0YVsxXTsKKwltc2dbMl0gPSBkYXRhWzJdOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJbWVtc2V0KCZ0LCAwLCAoc2l6ZW9mIHQpKTsKKworCXQudHhfYnVmID0gJm1zZ1swXTsKKwl0LmxlbiA9IGxlbjsKKworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7CisJc3BpX3N5bmMoc3BpLCAmbSk7CisKKwlyZXR1cm4gbGVuOworfQorI2Vsc2UKKyNkZWZpbmUgc25kX3NvY18xNl84X3NwaV93cml0ZSBOVUxMCisjZW5kaWYKKworCiBzdGF0aWMgc3RydWN0IHsKIAlpbnQgYWRkcl9iaXRzOwogCWludCBkYXRhX2JpdHM7CkBAIC0xODAsOSArMzc2LDE0IEBACiAJdW5zaWduZWQgaW50ICgqaTJjX3JlYWQpKHN0cnVjdCBzbmRfc29jX2NvZGVjICosIHVuc2lnbmVkIGludCk7CiB9IGlvX3R5cGVzW10gPSB7CiAJeworCQkuYWRkcl9iaXRzID0gNCwgLmRhdGFfYml0cyA9IDEyLAorCQkud3JpdGUgPSBzbmRfc29jXzRfMTJfd3JpdGUsIC5yZWFkID0gc25kX3NvY180XzEyX3JlYWQsCisJCS5zcGlfd3JpdGUgPSBzbmRfc29jXzRfMTJfc3BpX3dyaXRlLAorCX0sCisJewogCQkuYWRkcl9iaXRzID0gNywgLmRhdGFfYml0cyA9IDksCiAJCS53cml0ZSA9IHNuZF9zb2NfN185X3dyaXRlLCAucmVhZCA9IHNuZF9zb2NfN185X3JlYWQsCi0JCS5zcGlfd3JpdGUgPSBzbmRfc29jXzdfOV9zcGlfd3JpdGUgCisJCS5zcGlfd3JpdGUgPSBzbmRfc29jXzdfOV9zcGlfd3JpdGUsCiAJfSwKIAl7CiAJCS5hZGRyX2JpdHMgPSA4LCAuZGF0YV9iaXRzID0gOCwKQEAgLTE5Myw2ICszOTQsMTIgQEAKIAkJLndyaXRlID0gc25kX3NvY184XzE2X3dyaXRlLCAucmVhZCA9IHNuZF9zb2NfOF8xNl9yZWFkLAogCQkuaTJjX3JlYWQgPSBzbmRfc29jXzhfMTZfcmVhZF9pMmMsCiAJfSwKKwl7CisJCS5hZGRyX2JpdHMgPSAxNiwgLmRhdGFfYml0cyA9IDgsCisJCS53cml0ZSA9IHNuZF9zb2NfMTZfOF93cml0ZSwgLnJlYWQgPSBzbmRfc29jXzE2XzhfcmVhZCwKKwkJLmkyY19yZWFkID0gc25kX3NvY18xNl84X3JlYWRfaTJjLAorCQkuc3BpX3dyaXRlID0gc25kX3NvY18xNl84X3NwaV93cml0ZSwKKwl9LAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IDBhNjQ0MGMuLmEwM2JhYzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC0xMzAsNiArMTMwLDI5IEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihjb2RlY19yZWcsIDA0NDQsIGNvZGVjX3JlZ19zaG93LCBOVUxMKTsKIAorc3RhdGljIHNzaXplX3QgcG1kb3duX3RpbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBzb2NkZXYtPmNhcmQ7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIGNhcmQtPnBtZG93bl90aW1lKTsKK30KKworc3RhdGljIHNzaXplX3QgcG1kb3duX3RpbWVfc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBzb2NkZXYtPmNhcmQ7CisKKwlzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZjYXJkLT5wbWRvd25fdGltZSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihwbWRvd25fdGltZSwgMDY0NCwgcG1kb3duX3RpbWVfc2hvdywgcG1kb3duX3RpbWVfc2V0KTsKKwogI2lmZGVmIENPTkZJR19ERUJVR19GUwogc3RhdGljIGludCBjb2RlY19yZWdfb3Blbl9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewpAQCAtNTQyLDcgKzU2NSw3IEBACiAJCS8qIHN0YXJ0IGRlbGF5ZWQgcG9wIHdxIGhlcmUgZm9yIHBsYXliYWNrIHN0cmVhbXMgKi8KIAkJY29kZWNfZGFpLT5wb3Bfd2FpdCA9IDE7CiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2FyZC0+ZGVsYXllZF93b3JrLAotCQkJbXNlY3NfdG9famlmZmllcyhwbWRvd25fdGltZSkpOworCQkJbXNlY3NfdG9famlmZmllcyhjYXJkLT5wbWRvd25fdGltZSkpOwogCX0gZWxzZSB7CiAJCS8qIGNhcHR1cmUgc3RyZWFtcyBjYW4gYmUgcG93ZXJlZCBkb3duIG5vdyAqLwogCQlzbmRfc29jX2RhcG1fc3RyZWFtX2V2ZW50KGNvZGVjLApAQCAtOTQwLDYgKzk2MywxMiBAQAogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBzb2NkZXYtPmNhcmQ7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gY2FyZC0+ZGFpX2xpbmtbMF0uY3B1X2RhaTsKIAorCS8qIElmIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIHNvYyBkZXZpY2UgZmFpbGVkLCB0aGVyZSBpcyBubyBjb2RlYworCSAqIGFzc29jaWF0ZWQgd2l0aCBpdC4gSnVzdCBiYWlsIG91dCBpbiB0aGlzIGNhc2UuCisJICovCisJaWYgKCFjYXJkLT5jb2RlYykKKwkJcmV0dXJuIDA7CisKIAkvKiBBQzk3IGRldmljZXMgbWlnaHQgaGF2ZSBvdGhlciBkcml2ZXJzIGhhbmdpbmcgb2ZmIHRoZW0gc28KIAkgKiBuZWVkIHRvIHJlc3VtZSBpbW1lZGlhdGVseS4gIE90aGVyIGRyaXZlcnMgZG9uJ3QgaGF2ZSB0aGF0CiAJICogcHJvYmxlbSBhbmQgbWF5IHRha2UgYSBzdWJzdGFudGlhbCBhbW91bnQgb2YgdGltZSB0byByZXN1bWUKQEAgLTEwMzksNiArMTA2OCw4IEBACiAJZGV2X2RiZyhjYXJkLT5kZXYsICJBbGwgY29tcG9uZW50cyBwcmVzZW50LCBpbnN0YW50aWF0aW5nXG4iKTsKIAogCS8qIEZvdW5kIGV2ZXJ5dGhpbmcsIGJyaW5nIGl0IHVwICovCisJY2FyZC0+cG1kb3duX3RpbWUgPSBwbWRvd25fdGltZTsKKwogCWlmIChjYXJkLT5wcm9iZSkgewogCQlyZXQgPSBjYXJkLT5wcm9iZShwZGV2KTsKIAkJaWYgKHJldCA8IDApCkBAIC0xMTIyLDYgKzExNTMsMTAgQEAKIAlpZiAocmV0IDwgMCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXNvYzogZmFpbGVkIHRvIGFkZCBkYXBtIHN5c2ZzIGVudHJpZXNcbiIpOwogCisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGNhcmQtPnNvY2Rldi0+ZGV2LCAmZGV2X2F0dHJfcG1kb3duX3RpbWUpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJhc29jOiBmYWlsZWQgdG8gYWRkIHBtZG93bl90aW1lIHN5c2ZzXG4iKTsKKwogCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZShjYXJkLT5zb2NkZXYtPmRldiwgJmRldl9hdHRyX2NvZGVjX3JlZyk7CiAJaWYgKHJldCA8IDApCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImFzb2M6IGZhaWxlZCB0byBhZGQgY29kZWMgc3lzZnMgZmlsZXNcbiIpOwpAQCAtMTI3Niw4ICsxMzExLDggQEAKIAljb2RlY19kYWktPmNvZGVjID0gY2FyZC0+Y29kZWM7CiAKIAkvKiBjaGVjayBjbGllbnQgYW5kIGludGVyZmFjZSBodyBjYXBhYmlsaXRpZXMgKi8KLQlzcHJpbnRmKG5ld19uYW1lLCAiJXMgJXMtJWQiLCBkYWlfbGluay0+c3RyZWFtX25hbWUsIGNvZGVjX2RhaS0+bmFtZSwKLQkJbnVtKTsKKwlzbnByaW50ZihuZXdfbmFtZSwgc2l6ZW9mKG5ld19uYW1lKSwgIiVzICVzLSVkIiwKKwkJIGRhaV9saW5rLT5zdHJlYW1fbmFtZSwgY29kZWNfZGFpLT5uYW1lLCBudW0pOwogCiAJaWYgKGNvZGVjX2RhaS0+cGxheWJhY2suY2hhbm5lbHNfbWluKQogCQlwbGF5YmFjayA9IDE7CkBAIC0xMzY4LDYgKzE0MDMsNyBAQAogCiAJY29kZWMtPmFjOTctPmJ1cy0+b3BzID0gb3BzOwogCWNvZGVjLT5hYzk3LT5udW0gPSBudW07CisJY29kZWMtPmRldiA9ICZjb2RlYy0+YWM5Ny0+ZGV2OwogCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MjcsOSArMTQ2Myw5IEBACiAgKgogICogUmV0dXJucyAxIGZvciBjaGFuZ2UgZWxzZSAwLgogICovCi1zdGF0aWMgaW50IHNuZF9zb2NfdXBkYXRlX2JpdHNfbG9ja2VkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQkJCQl1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIGludCBtYXNrLAotCQkJCXVuc2lnbmVkIGludCB2YWx1ZSkKK2ludCBzbmRfc29jX3VwZGF0ZV9iaXRzX2xvY2tlZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBpbnQgbWFzaywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7CiAJaW50IGNoYW5nZTsKIApAQCAtMTQzOSw2ICsxNDc1LDcgQEAKIAogCXJldHVybiBjaGFuZ2U7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX3VwZGF0ZV9iaXRzX2xvY2tlZCk7CiAKIC8qKgogICogc25kX3NvY190ZXN0X2JpdHMgLSB0ZXN0IHJlZ2lzdGVyIGZvciBjaGFuZ2UKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggMGQyOTRlZi4uNmMzMzUxMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTQ0LDEzICs0NCw2IEBACiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAKLS8qIGRlYnVnICovCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUgZHVtcF9kYXBtKGNvZGVjLCBhY3Rpb24pIGRiZ19kdW1wX2RhcG0oY29kZWMsIGFjdGlvbikKLSNlbHNlCi0jZGVmaW5lIGR1bXBfZGFwbShjb2RlYywgYWN0aW9uKQotI2VuZGlmCi0KIC8qIGRhcG0gcG93ZXIgc2VxdWVuY2VzIC0gbWFrZSB0aGlzIHBlciBjb2RlYyBpbiB0aGUgZnV0dXJlICovCiBzdGF0aWMgaW50IGRhcG1fdXBfc2VxW10gPSB7CiAJW3NuZF9zb2NfZGFwbV9wcmVdID0gMCwKQEAgLTczOSw2ICs3MzIsOCBAQAogCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpiLAogCQkJICAgIGludCBzb3J0W10pCiB7CisJaWYgKGEtPmNvZGVjICE9IGItPmNvZGVjKQorCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYSAtICh1bnNpZ25lZCBsb25nKWI7CiAJaWYgKHNvcnRbYS0+aWRdICE9IHNvcnRbYi0+aWRdKQogCQlyZXR1cm4gc29ydFthLT5pZF0gLSBzb3J0W2ItPmlkXTsKIAlpZiAoYS0+cmVnICE9IGItPnJlZykKQEAgLTEwMTcsMTMgKzEwMTIsMjggQEAKIAkJCXN5c19wb3dlciA9IDA7CiAJCQlicmVhazsKIAkJY2FzZSBTTkRfU09DX0RBUE1fU1RSRUFNX05PUDoKLQkJCXN5c19wb3dlciA9IGNvZGVjLT5iaWFzX2xldmVsICE9IFNORF9TT0NfQklBU19TVEFOREJZOworCQkJc3dpdGNoIChjb2RlYy0+Ymlhc19sZXZlbCkgeworCQkJCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCQkJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCQkJCQlzeXNfcG93ZXIgPSAwOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlzeXNfcG93ZXIgPSAxOworCQkJCQlicmVhazsKKwkJCX0KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KIAl9CiAKKwlpZiAoc3lzX3Bvd2VyICYmIGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJcmV0ID0gc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKHNvY2RldiwKKwkJCQkJCSAgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCQlpZiAocmV0ICE9IDApCisJCQlwcl9lcnIoIkZhaWxlZCB0byB0dXJuIG9uIGJpYXM6ICVkXG4iLCByZXQpOworCX0KKwogCS8qIElmIHdlJ3JlIGNoYW5naW5nIHRvIGFsbCBvbiBvciBhbGwgb2ZmIHRoZW4gcHJlcGFyZSAqLwogCWlmICgoc3lzX3Bvd2VyICYmIGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19TVEFOREJZKSB8fAogCSAgICAoIXN5c19wb3dlciAmJiBjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT04pKSB7CkBAIC0xMDQ3LDYgKzEwNTcsMTQgQEAKIAkJCXByX2VycigiRmFpbGVkIHRvIGFwcGx5IHN0YW5kYnkgYmlhczogJWRcbiIsIHJldCk7CiAJfQogCisJLyogSWYgd2UncmUgaW4gc3RhbmRieSBhbmQgY2FuIHN1cHBvcnQgYmlhcyBvZmYgdGhlbiBkbyB0aGF0ICovCisJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19TVEFOREJZICYmCisJICAgIGNvZGVjLT5pZGxlX2JpYXNfb2ZmKSB7CisJCXJldCA9IHNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChzb2NkZXYsIFNORF9TT0NfQklBU19PRkYpOworCQlpZiAocmV0ICE9IDApCisJCQlwcl9lcnIoIkZhaWxlZCB0byB0dXJuIG9mZiBiaWFzOiAlZFxuIiwgcmV0KTsKKwl9CisKIAkvKiBJZiB3ZSBqdXN0IHBvd2VyZWQgdXAgdGhlbiBtb3ZlIHRvIGFjdGl2ZSBiaWFzICovCiAJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19QUkVQQVJFICYmIHN5c19wb3dlcikgewogCQlyZXQgPSBzbmRfc29jX2RhcG1fc2V0X2JpYXNfbGV2ZWwoc29jZGV2LApAQCAtMTA2MSw2NiArMTA3OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBERUJVRwotc3RhdGljIHZvaWQgZGJnX2R1bXBfZGFwbShzdHJ1Y3Qgc25kX3NvY19jb2RlYyogY29kZWMsIGNvbnN0IGNoYXIgKmFjdGlvbikKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3BhdGggKnAgPSBOVUxMOwotCWludCBpbiwgb3V0OwotCi0JcHJpbnRrKCJEQVBNICVzICVzXG4iLCBjb2RlYy0+bmFtZSwgYWN0aW9uKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmNvZGVjLT5kYXBtX3dpZGdldHMsIGxpc3QpIHsKLQotCQkvKiBvbmx5IGRpc3BsYXkgd2lkZ2V0cyB0aGF0IGVmZmVjdCByb3V0aW5nICovCi0JCXN3aXRjaCAody0+aWQpIHsKLQkJY2FzZSBzbmRfc29jX2RhcG1fcHJlOgotCQljYXNlIHNuZF9zb2NfZGFwbV9wb3N0OgotCQljYXNlIHNuZF9zb2NfZGFwbV92bWlkOgotCQkJY29udGludWU7Ci0JCWNhc2Ugc25kX3NvY19kYXBtX211eDoKLQkJY2FzZSBzbmRfc29jX2RhcG1fdmFsdWVfbXV4OgotCQljYXNlIHNuZF9zb2NfZGFwbV9vdXRwdXQ6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX2lucHV0OgotCQljYXNlIHNuZF9zb2NfZGFwbV9zd2l0Y2g6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX2hwOgotCQljYXNlIHNuZF9zb2NfZGFwbV9taWM6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX3NwazoKLQkJY2FzZSBzbmRfc29jX2RhcG1fbGluZToKLQkJY2FzZSBzbmRfc29jX2RhcG1fbWljYmlhczoKLQkJY2FzZSBzbmRfc29jX2RhcG1fZGFjOgotCQljYXNlIHNuZF9zb2NfZGFwbV9hZGM6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX3BnYToKLQkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDoKLQkJY2FzZSBzbmRfc29jX2RhcG1fc3VwcGx5OgotCQljYXNlIHNuZF9zb2NfZGFwbV9haWZfaW46Ci0JCWNhc2Ugc25kX3NvY19kYXBtX2FpZl9vdXQ6Ci0JCQlpZiAody0+bmFtZSkgewotCQkJCWluID0gaXNfY29ubmVjdGVkX2lucHV0X2VwKHcpOwotCQkJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7Ci0JCQkJb3V0ID0gaXNfY29ubmVjdGVkX291dHB1dF9lcCh3KTsKLQkJCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOwotCQkJCXByaW50aygiJXM6ICVzICBpbiAlZCBvdXQgJWRcbiIsIHctPm5hbWUsCi0JCQkJCXctPnBvd2VyID8gIk9uIjoiT2ZmIixpbiwgb3V0KTsKLQotCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJnctPnNvdXJjZXMsIGxpc3Rfc2luaykgewotCQkJCQlpZiAocC0+Y29ubmVjdCkKLQkJCQkJCXByaW50aygiIGluICAlcyAlc1xuIiwgcC0+bmFtZSA/IHAtPm5hbWUgOiAic3RhdGljIiwKLQkJCQkJCQlwLT5zb3VyY2UtPm5hbWUpOwotCQkJCX0KLQkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZ3LT5zaW5rcywgbGlzdF9zb3VyY2UpIHsKLQkJCQkJaWYgKHAtPmNvbm5lY3QpCi0JCQkJCQlwcmludGsoIiBvdXQgJXMgJXNcbiIsIHAtPm5hbWUgPyBwLT5uYW1lIDogInN0YXRpYyIsCi0JCQkJCQkJcC0+c2luay0+bmFtZSk7Ci0JCQkJfQotCQkJfQotCQlicmVhazsKLQkJfQotCX0KLX0KLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiBzdGF0aWMgaW50IGRhcG1fd2lkZ2V0X3Bvd2VyX29wZW5fZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKQEAgLTExNDcsOSArMTEwNSwxNiBAQAogCW91dCA9IGlzX2Nvbm5lY3RlZF9vdXRwdXRfZXAodyk7CiAJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKIAotCXJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXM6ICVzICBpbiAlZCBvdXQgJWRcbiIsCisJcmV0ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlczogJXMgIGluICVkIG91dCAlZCIsCiAJCSAgICAgICB3LT5uYW1lLCB3LT5wb3dlciA/ICJPbiIgOiAiT2ZmIiwgaW4sIG91dCk7CiAKKwlpZiAody0+cmVnID49IDApCisJCXJldCArPSBzbnByaW50ZihidWYgKyByZXQsIFBBR0VfU0laRSAtIHJldCwKKwkJCQkiIC0gUiVkKDB4JXgpIGJpdCAlZCIsCisJCQkJdy0+cmVnLCB3LT5yZWcsIHctPnNoaWZ0KTsKKworCXJldCArPSBzbnByaW50ZihidWYgKyByZXQsIFBBR0VfU0laRSAtIHJldCwgIlxuIik7CisKIAlpZiAody0+c25hbWUpCiAJCXJldCArPSBzbnByaW50ZihidWYgKyByZXQsIFBBR0VfU0laRSAtIHJldCwgIiBzdHJlYW0gJXMgJXNcbiIsCiAJCQkJdy0+c25hbWUsCkBAIC0xMjQ1LDE4ICsxMjEwLDE1IEBACiAJCQlwYXRoLT5jb25uZWN0ID0gMDsgLyogb2xkIGNvbm5lY3Rpb24gbXVzdCBiZSBwb3dlcmVkIGRvd24gKi8KIAl9CiAKLQlpZiAoZm91bmQpIHsKKwlpZiAoZm91bmQpCiAJCWRhcG1fcG93ZXJfd2lkZ2V0cyh3aWRnZXQtPmNvZGVjLCBTTkRfU09DX0RBUE1fU1RSRUFNX05PUCk7Ci0JCWR1bXBfZGFwbSh3aWRnZXQtPmNvZGVjLCAibXV4IHBvd2VyIHVwZGF0ZSIpOwotCX0KIAogCXJldHVybiAwOwogfQogCiAvKiB0ZXN0IGFuZCB1cGRhdGUgdGhlIHBvd2VyIHN0YXR1cyBvZiBhIG1peGVyIG9yIHN3aXRjaCB3aWRnZXQgKi8KIHN0YXRpYyBpbnQgZGFwbV9taXhlcl91cGRhdGVfcG93ZXIoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKndpZGdldCwKLQkJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IHJlZywKLQkJCQkgICBpbnQgdmFsX21hc2ssIGludCB2YWwsIGludCBpbnZlcnQpCisJCQkJICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBjb25uZWN0KQogewogCXN0cnVjdCBzbmRfc29jX2RhcG1fcGF0aCAqcGF0aDsKIAlpbnQgZm91bmQgPSAwOwpAQCAtMTI2Niw5ICsxMjI4LDYgQEAKIAkgICAgd2lkZ2V0LT5pZCAhPSBzbmRfc29jX2RhcG1fc3dpdGNoKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICghc25kX3NvY190ZXN0X2JpdHMod2lkZ2V0LT5jb2RlYywgcmVnLCB2YWxfbWFzaywgdmFsKSkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBmaW5kIGRhcG0gd2lkZ2V0IHBhdGggYXNzb2Mgd2l0aCBrY29udHJvbCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkocGF0aCwgJndpZGdldC0+Y29kZWMtPmRhcG1fcGF0aHMsIGxpc3QpIHsKIAkJaWYgKHBhdGgtPmtjb250cm9sICE9IGtjb250cm9sKQpAQCAtMTI3NiwxOSArMTIzNSwxMiBAQAogCiAJCS8qIGZvdW5kLCBub3cgY2hlY2sgdHlwZSAqLwogCQlmb3VuZCA9IDE7Ci0JCWlmICh2YWwpCi0JCQkvKiBuZXcgY29ubmVjdGlvbiAqLwotCQkJcGF0aC0+Y29ubmVjdCA9IGludmVydCA/IDA6MTsKLQkJZWxzZQotCQkJLyogb2xkIGNvbm5lY3Rpb24gbXVzdCBiZSBwb3dlcmVkIGRvd24gKi8KLQkJCXBhdGgtPmNvbm5lY3QgPSBpbnZlcnQgPyAxOjA7CisJCXBhdGgtPmNvbm5lY3QgPSBjb25uZWN0OwogCQlicmVhazsKIAl9CiAKLQlpZiAoZm91bmQpIHsKKwlpZiAoZm91bmQpCiAJCWRhcG1fcG93ZXJfd2lkZ2V0cyh3aWRnZXQtPmNvZGVjLCBTTkRfU09DX0RBUE1fU1RSRUFNX05PUCk7Ci0JCWR1bXBfZGFwbSh3aWRnZXQtPmNvZGVjLCAibWl4ZXIgcG93ZXIgdXBkYXRlIik7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDA0LDkgKzEzNTYsNyBAQAogICovCiBpbnQgc25kX3NvY19kYXBtX3N5bmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCWludCByZXQgPSBkYXBtX3Bvd2VyX3dpZGdldHMoY29kZWMsIFNORF9TT0NfREFQTV9TVFJFQU1fTk9QKTsKLQlkdW1wX2RhcG0oY29kZWMsICJzeW5jIik7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZGFwbV9wb3dlcl93aWRnZXRzKGNvZGVjLCBTTkRfU09DX0RBUE1fU1RSRUFNX05PUCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1fc3luYyk7CiAKQEAgLTE2ODgsNiArMTYzOCw3IEBACiAJdW5zaWduZWQgaW50IG1hc2sgPSAoMSA8PCBmbHMobWF4KSkgLSAxOwogCXVuc2lnbmVkIGludCBpbnZlcnQgPSBtYy0+aW52ZXJ0OwogCXVuc2lnbmVkIGludCB2YWwsIHZhbDIsIHZhbF9tYXNrOworCWludCBjb25uZWN0OwogCWludCByZXQ7CiAKIAl2YWwgPSAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiBtYXNrKTsKQEAgLTE3MTQsNyArMTY2NSwxNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlkYXBtX21peGVyX3VwZGF0ZV9wb3dlcih3aWRnZXQsIGtjb250cm9sLCByZWcsIHZhbF9tYXNrLCB2YWwsIGludmVydCk7CisJaWYgKHNuZF9zb2NfdGVzdF9iaXRzKHdpZGdldC0+Y29kZWMsIHJlZywgdmFsX21hc2ssIHZhbCkpIHsKKwkJaWYgKHZhbCkKKwkJCS8qIG5ldyBjb25uZWN0aW9uICovCisJCQljb25uZWN0ID0gaW52ZXJ0ID8gMDoxOworCQllbHNlCisJCQkvKiBvbGQgY29ubmVjdGlvbiBtdXN0IGJlIHBvd2VyZWQgZG93biAqLworCQkJY29ubmVjdCA9IGludmVydCA/IDE6MDsKKworCQlkYXBtX21peGVyX3VwZGF0ZV9wb3dlcih3aWRnZXQsIGtjb250cm9sLCBjb25uZWN0KTsKKwl9CisKIAlpZiAod2lkZ2V0LT5ldmVudCkgewogCQlpZiAod2lkZ2V0LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QUkVfUkVHKSB7CiAJCQlyZXQgPSB3aWRnZXQtPmV2ZW50KHdpZGdldCwga2NvbnRyb2wsCkBAIC0yMTUyLDcgKzIxMTMsNiBAQAogCiAJZGFwbV9wb3dlcl93aWRnZXRzKGNvZGVjLCBldmVudCk7CiAJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOwotCWR1bXBfZGFwbShjb2RlYywgX19mdW5jX18pOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX3N0cmVhbV9ldmVudCk7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvS2NvbmZpZyBiL3NvdW5kL3VzYi9LY29uZmlnCmluZGV4IDczNTI1YzAuLjhjMjkyNTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9LY29uZmlnCisrKyBiL3NvdW5kL3VzYi9LY29uZmlnCkBAIC0yMSw2ICsyMSwxOCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLXVzYi1hdWRpby4KIAorY29uZmlnIFNORF9VU0JfVUExMDEKKwl0cmlzdGF0ZSAiRWRpcm9sIFVBLTEwMSBkcml2ZXIgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgU05EX1BDTQorCXNlbGVjdCBTTkRfUkFXTUlESQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgRWRpcm9sIFVBLTEwMSBhdWRpby9NSURJCisJICBpbnRlcmZhY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC11YTEwMS4KKwogY29uZmlnIFNORF9VU0JfVVNYMlkKIAl0cmlzdGF0ZSAiVGFzY2FtIFVTLTEyMiwgVVMtMjI0IGFuZCBVUy00MjggVVNCIGRyaXZlciIKIAlkZXBlbmRzIG9uIFg4NiB8fCBQUEMgfHwgQUxQSEEKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9NYWtlZmlsZSBiL3NvdW5kL3VzYi9NYWtlZmlsZQppbmRleCBhYmIyODhiLi41YmY2NGFlIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvTWFrZWZpbGUKKysrIGIvc291bmQvdXNiL01ha2VmaWxlCkBAIC00LDkgKzQsMTEgQEAKIAogc25kLXVzYi1hdWRpby1vYmpzIDo9IHVzYmF1ZGlvLm8gdXNibWl4ZXIubwogc25kLXVzYi1saWItb2JqcyA6PSB1c2JtaWRpLm8KK3NuZC11YTEwMS1vYmpzIDo9IHVhMTAxLm8KIAogIyBUb3BsZXZlbCBNb2R1bGUgRGVwZW5kZW5jeQogb2JqLSQoQ09ORklHX1NORF9VU0JfQVVESU8pICs9IHNuZC11c2ItYXVkaW8ubyBzbmQtdXNiLWxpYi5vCitvYmotJChDT05GSUdfU05EX1VTQl9VQTEwMSkgKz0gc25kLXVhMTAxLm8gc25kLXVzYi1saWIubwogb2JqLSQoQ09ORklHX1NORF9VU0JfVVNYMlkpICs9IHNuZC11c2ItbGliLm8KIG9iai0kKENPTkZJR19TTkRfVVNCX1VTMTIyTCkgKz0gc25kLXVzYi1saWIubwogCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdWExMDEuYyBiL3NvdW5kL3VzYi91YTEwMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNGNjZGYKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvdWExMDEuYwpAQCAtMCwwICsxLDE0MjEgQEAKKy8qCisgKiBFZGlyb2wgVUEtMTAxIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgZHJpdmVyLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9hdWRpby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgInVzYmF1ZGlvLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRWRpcm9sIFVBLTEwMSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkNsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7RWRpcm9sLFVBLTEwMX19Iik7CisKKy8qIEkgdXNlIG15IFVBLTFBIGZvciB0ZXN0aW5nIGJlY2F1c2UgSSBkb24ndCBoYXZlIGEgVUEtMTAxIC4uLiAqLworI2RlZmluZSBVQTFBX0hBQ0sKKworLyoKKyAqIFNob3VsZCBub3QgYmUgbG93ZXIgdGhhbiB0aGUgbWluaW11bSBzY2hlZHVsaW5nIGRlbGF5IG9mIHRoZSBob3N0CisgKiBjb250cm9sbGVyLiAgU29tZSBJbnRlbCBjb250cm9sbGVycyBuZWVkIG1vcmUgdGhhbiBvbmUgZnJhbWU7IGFzIGxvbmcgYXMKKyAqIHRoYXQgZHJpdmVyIGRvZXNuJ3QgdGVsbCB1cyBhYm91dCB0aGlzLCB1c2UgMS41IGZyYW1lcyBqdXN0IHRvIGJlIHN1cmUuCisgKi8KKyNkZWZpbmUgTUlOX1FVRVVFX0xFTkdUSAkxMgorLyogU29tZXdoYXQgcmFuZG9tLiAqLworI2RlZmluZSBNQVhfUVVFVUVfTEVOR1RICTMwCisvKgorICogVGhpcyBtYWdpYyB2YWx1ZSBvcHRpbWl6ZXMgbWVtb3J5IHVzYWdlIGVmZmljaWVuY3kgZm9yIHRoZSBVQS0xMDEncyBwYWNrZXQKKyAqIHNpemVzIGF0IGFsbCBzYW1wbGUgcmF0ZXMsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN0dXBpZCBjYWNoZSBwb29sIHNpemVzCisgKiB0aGF0IHVzYl9idWZmZXJfYWxsb2MoKSB1c2VzLgorICovCisjZGVmaW5lIERFRkFVTFRfUVVFVUVfTEVOR1RICTIxCisKKyNkZWZpbmUgTUFYX1BBQ0tFVF9TSVpFCQk2NzIgLyogaGFyZHdhcmUgc3BlY2lmaWMgKi8KKyNkZWZpbmUgTUFYX01FTU9SWV9CVUZGRVJTCURJVl9ST1VORF9VUChNQVhfUVVFVUVfTEVOR1RILCBcCisJCQkJCSAgICAgUEFHRV9TSVpFIC8gTUFYX1BBQ0tFVF9TSVpFKQorCitzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOworc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOworc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QOworc3RhdGljIHVuc2lnbmVkIGludCBxdWV1ZV9sZW5ndGggPSAyMTsKKworbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgImNhcmQgaW5kZXgiKTsKK21vZHVsZV9wYXJhbV9hcnJheShpZCwgY2hhcnAsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyIpOworbW9kdWxlX3BhcmFtX2FycmF5KGVuYWJsZSwgYm9vbCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgImVuYWJsZSBjYXJkIik7Cittb2R1bGVfcGFyYW0ocXVldWVfbGVuZ3RoLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocXVldWVfbGVuZ3RoLCAiVVNCIHF1ZXVlIGxlbmd0aCBpbiBtaWNyb2ZyYW1lcywgIgorCQkgX19zdHJpbmdpZnkoTUlOX1FVRVVFX0xFTkdUSCkiLSJfX3N0cmluZ2lmeShNQVhfUVVFVUVfTEVOR1RIKSk7CisKK2VudW0geworCUlOVEZfUExBWUJBQ0ssCisJSU5URl9DQVBUVVJFLAorCUlOVEZfTUlESSwKKworCUlOVEZfQ09VTlQKK307CisKKy8qIGJpdHMgaW4gc3RydWN0IHVhMTAxOjpzdGF0ZXMgKi8KK2VudW0geworCVVTQl9DQVBUVVJFX1JVTk5JTkcsCisJVVNCX1BMQVlCQUNLX1JVTk5JTkcsCisJQUxTQV9DQVBUVVJFX09QRU4sCisJQUxTQV9QTEFZQkFDS19PUEVOLAorCUFMU0FfQ0FQVFVSRV9SVU5OSU5HLAorCUFMU0FfUExBWUJBQ0tfUlVOTklORywKKwlDQVBUVVJFX1VSQl9DT01QTEVURUQsCisJUExBWUJBQ0tfVVJCX0NPTVBMRVRFRCwKKwlESVNDT05ORUNURUQsCit9OworCitzdHJ1Y3QgdWExMDEgeworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmW0lOVEZfQ09VTlRdOworCWludCBjYXJkX2luZGV4OworCXN0cnVjdCBzbmRfcGNtICpwY207CisJc3RydWN0IGxpc3RfaGVhZCBtaWRpX2xpc3Q7CisJdTY0IGZvcm1hdF9iaXQ7CisJdW5zaWduZWQgaW50IHJhdGU7CisJdW5zaWduZWQgaW50IHBhY2tldHNfcGVyX3NlY29uZDsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IG11dGV4IG11dGV4OworCXVuc2lnbmVkIGxvbmcgc3RhdGVzOworCisJLyogRklGTyB0byBzeW5jaHJvbml6ZSBwbGF5YmFjayByYXRlIHRvIGNhcHR1cmUgcmF0ZSAqLworCXVuc2lnbmVkIGludCByYXRlX2ZlZWRiYWNrX3N0YXJ0OworCXVuc2lnbmVkIGludCByYXRlX2ZlZWRiYWNrX2NvdW50OworCXU4IHJhdGVfZmVlZGJhY2tbTUFYX1FVRVVFX0xFTkdUSF07CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlYWR5X3BsYXliYWNrX3VyYnM7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHBsYXliYWNrX3Rhc2tsZXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgYWxzYV9jYXB0dXJlX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcmF0ZV9mZWVkYmFja193YWl0OworCXdhaXRfcXVldWVfaGVhZF90IGFsc2FfcGxheWJhY2tfd2FpdDsKKwlzdHJ1Y3QgdWExMDFfc3RyZWFtIHsKKwkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJCXVuc2lnbmVkIGludCB1c2JfcGlwZTsKKwkJdW5zaWduZWQgaW50IGNoYW5uZWxzOworCQl1bnNpZ25lZCBpbnQgZnJhbWVfYnl0ZXM7CisJCXVuc2lnbmVkIGludCBtYXhfcGFja2V0X2J5dGVzOworCQl1bnNpZ25lZCBpbnQgcGVyaW9kX3BvczsKKwkJdW5zaWduZWQgaW50IGJ1ZmZlcl9wb3M7CisJCXVuc2lnbmVkIGludCBxdWV1ZV9sZW5ndGg7CisJCXN0cnVjdCB1YTEwMV91cmIgeworCQkJc3RydWN0IHVyYiB1cmI7CisJCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciBpc29fZnJhbWVfZGVzY1sxXTsKKwkJCXN0cnVjdCBsaXN0X2hlYWQgcmVhZHlfbGlzdDsKKwkJfSAqdXJic1tNQVhfUVVFVUVfTEVOR1RIXTsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGludCBzaXplOworCQkJdm9pZCAqYWRkcjsKKwkJCWRtYV9hZGRyX3QgZG1hOworCQl9IGJ1ZmZlcnNbTUFYX01FTU9SWV9CVUZGRVJTXTsKKwl9IGNhcHR1cmUsIHBsYXliYWNrOworCisJdW5zaWduZWQgaW50IGZwc1sxMF07CisJdW5zaWduZWQgaW50IGZyYW1lX2NvdW50ZXI7Cit9OworCitzdGF0aWMgREVGSU5FX01VVEVYKGRldmljZXNfbXV0ZXgpOworc3RhdGljIHVuc2lnbmVkIGludCBkZXZpY2VzX3VzZWQ7CitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdWExMDFfZHJpdmVyOworCitzdGF0aWMgdm9pZCBhYm9ydF9hbHNhX3BsYXliYWNrKHN0cnVjdCB1YTEwMSAqdWEpOworc3RhdGljIHZvaWQgYWJvcnRfYWxzYV9jYXB0dXJlKHN0cnVjdCB1YTEwMSAqdWEpOworCitzdGF0aWMgY29uc3QgY2hhciAqdXNiX2Vycm9yX3N0cmluZyhpbnQgZXJyKQoreworCXN3aXRjaCAoZXJyKSB7CisJY2FzZSAtRU5PREVWOgorCQlyZXR1cm4gIm5vIGRldmljZSI7CisJY2FzZSAtRU5PRU5UOgorCQlyZXR1cm4gImVuZHBvaW50IG5vdCBlbmFibGVkIjsKKwljYXNlIC1FUElQRToKKwkJcmV0dXJuICJlbmRwb2ludCBzdGFsbGVkIjsKKwljYXNlIC1FTk9TUEM6CisJCXJldHVybiAibm90IGVub3VnaCBiYW5kd2lkdGgiOworCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuICJkZXZpY2UgZGlzYWJsZWQiOworCWNhc2UgLUVIT1NUVU5SRUFDSDoKKwkJcmV0dXJuICJkZXZpY2Ugc3VzcGVuZGVkIjsKKwljYXNlIC1FSU5WQUw6CisJY2FzZSAtRUFHQUlOOgorCWNhc2UgLUVGQklHOgorCWNhc2UgLUVNU0dTSVpFOgorCQlyZXR1cm4gImludGVybmFsIGVycm9yIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gInVua25vd24gZXJyb3IiOworCX0KK30KKworc3RhdGljIHZvaWQgYWJvcnRfdXNiX2NhcHR1cmUoc3RydWN0IHVhMTAxICp1YSkKK3sKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkgeworCQl3YWtlX3VwKCZ1YS0+YWxzYV9jYXB0dXJlX3dhaXQpOworCQl3YWtlX3VwKCZ1YS0+cmF0ZV9mZWVkYmFja193YWl0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFib3J0X3VzYl9wbGF5YmFjayhzdHJ1Y3QgdWExMDEgKnVhKQoreworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNCX1BMQVlCQUNLX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJd2FrZV91cCgmdWEtPmFsc2FfcGxheWJhY2tfd2FpdCk7Cit9CisKK3N0YXRpYyB2b2lkIHBsYXliYWNrX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1c2JfdXJiKQoreworCXN0cnVjdCB1YTEwMV91cmIgKnVyYiA9IChzdHJ1Y3QgdWExMDFfdXJiICopdXNiX3VyYjsKKwlzdHJ1Y3QgdWExMDEgKnVhID0gdXJiLT51cmIuY29udGV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHVubGlrZWx5KHVyYi0+dXJiLnN0YXR1cyA9PSAtRU5PRU5UIHx8CS8qIHVubGlua2VkICovCisJCSAgICAgdXJiLT51cmIuc3RhdHVzID09IC1FTk9ERVYgfHwJLyogZGV2aWNlIHJlbW92ZWQgKi8KKwkJICAgICB1cmItPnVyYi5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwJLyogdW5saW5rZWQgKi8KKwkJICAgICB1cmItPnVyYi5zdGF0dXMgPT0gLUVTSFVURE9XTikpIHsJLyogZGV2aWNlIGRpc2FibGVkICovCisJCWFib3J0X3VzYl9wbGF5YmFjayh1YSk7CisJCWFib3J0X2Fsc2FfcGxheWJhY2sodWEpOworCQlyZXR1cm47CisJfQorCisJaWYgKHRlc3RfYml0KFVTQl9QTEFZQkFDS19SVU5OSU5HLCAmdWEtPnN0YXRlcykpIHsKKwkJLyogYXBwZW5kIFVSQiB0byBGSUZPICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ1YS0+bG9jaywgZmxhZ3MpOworCQlsaXN0X2FkZF90YWlsKCZ1cmItPnJlYWR5X2xpc3QsICZ1YS0+cmVhZHlfcGxheWJhY2tfdXJicyk7CisJCWlmICh1YS0+cmF0ZV9mZWVkYmFja19jb3VudCA+IDApCisJCQl0YXNrbGV0X3NjaGVkdWxlKCZ1YS0+cGxheWJhY2tfdGFza2xldCk7CisJCXVhLT5wbGF5YmFjay5zdWJzdHJlYW0tPnJ1bnRpbWUtPmRlbGF5IC09CisJCQkJdXJiLT51cmIuaXNvX2ZyYW1lX2Rlc2NbMF0ubGVuZ3RoIC8KKwkJCQkJCXVhLT5wbGF5YmFjay5mcmFtZV9ieXRlczsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWEtPmxvY2ssIGZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZpcnN0X3BsYXliYWNrX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHVyYi0+Y29udGV4dDsKKworCXVyYi0+Y29tcGxldGUgPSBwbGF5YmFja191cmJfY29tcGxldGU7CisJcGxheWJhY2tfdXJiX2NvbXBsZXRlKHVyYik7CisKKwlzZXRfYml0KFBMQVlCQUNLX1VSQl9DT01QTEVURUQsICZ1YS0+c3RhdGVzKTsKKwl3YWtlX3VwKCZ1YS0+YWxzYV9wbGF5YmFja193YWl0KTsKK30KKworLyogY29weSBkYXRhIGZyb20gdGhlIEFMU0EgcmluZyBidWZmZXIgaW50byB0aGUgVVJCIGJ1ZmZlciAqLworc3RhdGljIGJvb2wgY29weV9wbGF5YmFja19kYXRhKHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IHVyYiAqdXJiLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBmcmFtZXMpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfYnl0ZXMsIGZyYW1lczE7CisJY29uc3QgdTggKnNvdXJjZTsKKworCXJ1bnRpbWUgPSBzdHJlYW0tPnN1YnN0cmVhbS0+cnVudGltZTsKKwlmcmFtZV9ieXRlcyA9IHN0cmVhbS0+ZnJhbWVfYnl0ZXM7CisJc291cmNlID0gcnVudGltZS0+ZG1hX2FyZWEgKyBzdHJlYW0tPmJ1ZmZlcl9wb3MgKiBmcmFtZV9ieXRlczsKKwlpZiAoc3RyZWFtLT5idWZmZXJfcG9zICsgZnJhbWVzIDw9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7CisJCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciwgc291cmNlLCBmcmFtZXMgKiBmcmFtZV9ieXRlcyk7CisJfSBlbHNlIHsKKwkJLyogd3JhcCBhcm91bmQgYXQgZW5kIG9mIHJpbmcgYnVmZmVyICovCisJCWZyYW1lczEgPSBydW50aW1lLT5idWZmZXJfc2l6ZSAtIHN0cmVhbS0+YnVmZmVyX3BvczsKKwkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBzb3VyY2UsIGZyYW1lczEgKiBmcmFtZV9ieXRlcyk7CisJCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciArIGZyYW1lczEgKiBmcmFtZV9ieXRlcywKKwkJICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhLCAoZnJhbWVzIC0gZnJhbWVzMSkgKiBmcmFtZV9ieXRlcyk7CisJfQorCisJc3RyZWFtLT5idWZmZXJfcG9zICs9IGZyYW1lczsKKwlpZiAoc3RyZWFtLT5idWZmZXJfcG9zID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQlzdHJlYW0tPmJ1ZmZlcl9wb3MgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJc3RyZWFtLT5wZXJpb2RfcG9zICs9IGZyYW1lczsKKwlpZiAoc3RyZWFtLT5wZXJpb2RfcG9zID49IHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7CisJCXN0cmVhbS0+cGVyaW9kX3BvcyAtPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZF93aXRoX3dyYXBhcm91bmQoc3RydWN0IHVhMTAxICp1YSwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50ICp2YWx1ZSwgdW5zaWduZWQgaW50IGFkZCkKK3sKKwkqdmFsdWUgKz0gYWRkOworCWlmICgqdmFsdWUgPj0gdWEtPnBsYXliYWNrLnF1ZXVlX2xlbmd0aCkKKwkJKnZhbHVlIC09IHVhLT5wbGF5YmFjay5xdWV1ZV9sZW5ndGg7Cit9CisKK3N0YXRpYyB2b2lkIHBsYXliYWNrX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSAodm9pZCAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgZnJhbWVzOworCXN0cnVjdCB1YTEwMV91cmIgKnVyYjsKKwlib29sIGRvX3BlcmlvZF9lbGFwc2VkID0gZmFsc2U7CisJaW50IGVycjsKKworCWlmICh1bmxpa2VseSghdGVzdF9iaXQoVVNCX1BMQVlCQUNLX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkpCisJCXJldHVybjsKKworCS8qCisJICogU3luY2hyb25pemluZyB0aGUgcGxheWJhY2sgcmF0ZSB0byB0aGUgY2FwdHVyZSByYXRlIGlzIGRvbmUgYnkgdXNpbmcKKwkgKiB0aGUgc2FtZSBzZXF1ZW5jZSBvZiBwYWNrZXQgc2l6ZXMgZm9yIGJvdGggc3RyZWFtcy4KKwkgKiBTdWJtaXR0aW5nIGEgcGxheWJhY2sgVVJCIHRoZXJlZm9yZSByZXF1aXJlcyBib3RoIGEgcmVhZHkgVVJCIGFuZAorCSAqIHRoZSBzaXplIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNhcHR1cmUgcGFja2V0LCBpLmUuLCBib3RoIHBsYXliYWNrCisJICogYW5kIGNhcHR1cmUgVVJCcyBtdXN0IGhhdmUgYmVlbiBjb21wbGV0ZWQuICBTaW5jZSB0aGUgVVNCIGNvcmUgZG9lcworCSAqIG5vdCBndWFyYW50ZWUgdGhhdCBwbGF5YmFjayBhbmQgY2FwdHVyZSBjb21wbGV0ZSBjYWxsYmFja3MgYXJlCisJICogY2FsbGVkIGFsdGVybmF0ZWx5LCB3ZSB1c2UgdHdvIEZJRk9zIGZvciBwYWNrZXQgc2l6ZXMgYW5kIHJlYWQgVVJCczsKKwkgKiBzdWJtaXR0aW5nIHBsYXliYWNrIFVSQnMgaXMgcG9zc2libGUgYXMgbG9uZyBhcyBib3RoIEZJRk9zIGFyZQorCSAqIG5vbmVtcHR5LgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ1YS0+bG9jaywgZmxhZ3MpOworCXdoaWxlICh1YS0+cmF0ZV9mZWVkYmFja19jb3VudCA+IDAgJiYKKwkgICAgICAgIWxpc3RfZW1wdHkoJnVhLT5yZWFkeV9wbGF5YmFja191cmJzKSkgeworCQkvKiB0YWtlIHBhY2tldCBzaXplIG91dCBvZiBGSUZPICovCisJCWZyYW1lcyA9IHVhLT5yYXRlX2ZlZWRiYWNrW3VhLT5yYXRlX2ZlZWRiYWNrX3N0YXJ0XTsKKwkJYWRkX3dpdGhfd3JhcGFyb3VuZCh1YSwgJnVhLT5yYXRlX2ZlZWRiYWNrX3N0YXJ0LCAxKTsKKwkJdWEtPnJhdGVfZmVlZGJhY2tfY291bnQtLTsKKworCQkvKiB0YWtlIFVSQiBvdXQgb2YgRklGTyAqLworCQl1cmIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ1YS0+cmVhZHlfcGxheWJhY2tfdXJicywKKwkJCQkgICAgICAgc3RydWN0IHVhMTAxX3VyYiwgcmVhZHlfbGlzdCk7CisJCWxpc3RfZGVsKCZ1cmItPnJlYWR5X2xpc3QpOworCisJCS8qIGZpbGwgcGFja2V0IHdpdGggZGF0YSBvciBzaWxlbmNlICovCisJCXVyYi0+dXJiLmlzb19mcmFtZV9kZXNjWzBdLmxlbmd0aCA9CisJCQlmcmFtZXMgKiB1YS0+cGxheWJhY2suZnJhbWVfYnl0ZXM7CisJCWlmICh0ZXN0X2JpdChBTFNBX1BMQVlCQUNLX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJCWRvX3BlcmlvZF9lbGFwc2VkIHw9IGNvcHlfcGxheWJhY2tfZGF0YSgmdWEtPnBsYXliYWNrLAorCQkJCQkJCQkmdXJiLT51cmIsCisJCQkJCQkJCWZyYW1lcyk7CisJCWVsc2UKKwkJCW1lbXNldCh1cmItPnVyYi50cmFuc2Zlcl9idWZmZXIsIDAsCisJCQkgICAgICAgdXJiLT51cmIuaXNvX2ZyYW1lX2Rlc2NbMF0ubGVuZ3RoKTsKKworCQkvKiBhbmQgb2ZmIHlvdSBnbyAuLi4gKi8KKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIoJnVyYi0+dXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YS0+bG9jaywgZmxhZ3MpOworCQkJYWJvcnRfdXNiX3BsYXliYWNrKHVhKTsKKwkJCWFib3J0X2Fsc2FfcGxheWJhY2sodWEpOworCQkJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAiVVNCIHJlcXVlc3QgZXJyb3IgJWQ6ICVzXG4iLAorCQkJCWVyciwgdXNiX2Vycm9yX3N0cmluZyhlcnIpKTsKKwkJCXJldHVybjsKKwkJfQorCQl1YS0+cGxheWJhY2suc3Vic3RyZWFtLT5ydW50aW1lLT5kZWxheSArPSBmcmFtZXM7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVhLT5sb2NrLCBmbGFncyk7CisJaWYgKGRvX3BlcmlvZF9lbGFwc2VkKQorCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHVhLT5wbGF5YmFjay5zdWJzdHJlYW0pOworfQorCisvKiBjb3B5IGRhdGEgZnJvbSB0aGUgVVJCIGJ1ZmZlciBpbnRvIHRoZSBBTFNBIHJpbmcgYnVmZmVyICovCitzdGF0aWMgYm9vbCBjb3B5X2NhcHR1cmVfZGF0YShzdHJ1Y3QgdWExMDFfc3RyZWFtICpzdHJlYW0sIHN0cnVjdCB1cmIgKnVyYiwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBmcmFtZXMpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfYnl0ZXMsIGZyYW1lczE7CisJdTggKmRlc3Q7CisKKwlydW50aW1lID0gc3RyZWFtLT5zdWJzdHJlYW0tPnJ1bnRpbWU7CisJZnJhbWVfYnl0ZXMgPSBzdHJlYW0tPmZyYW1lX2J5dGVzOworCWRlc3QgPSBydW50aW1lLT5kbWFfYXJlYSArIHN0cmVhbS0+YnVmZmVyX3BvcyAqIGZyYW1lX2J5dGVzOworCWlmIChzdHJlYW0tPmJ1ZmZlcl9wb3MgKyBmcmFtZXMgPD0gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwkJbWVtY3B5KGRlc3QsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBmcmFtZXMgKiBmcmFtZV9ieXRlcyk7CisJfSBlbHNlIHsKKwkJLyogd3JhcCBhcm91bmQgYXQgZW5kIG9mIHJpbmcgYnVmZmVyICovCisJCWZyYW1lczEgPSBydW50aW1lLT5idWZmZXJfc2l6ZSAtIHN0cmVhbS0+YnVmZmVyX3BvczsKKwkJbWVtY3B5KGRlc3QsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBmcmFtZXMxICogZnJhbWVfYnl0ZXMpOworCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEsCisJCSAgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlciArIGZyYW1lczEgKiBmcmFtZV9ieXRlcywKKwkJICAgICAgIChmcmFtZXMgLSBmcmFtZXMxKSAqIGZyYW1lX2J5dGVzKTsKKwl9CisKKwlzdHJlYW0tPmJ1ZmZlcl9wb3MgKz0gZnJhbWVzOworCWlmIChzdHJlYW0tPmJ1ZmZlcl9wb3MgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCXN0cmVhbS0+YnVmZmVyX3BvcyAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwlzdHJlYW0tPnBlcmlvZF9wb3MgKz0gZnJhbWVzOworCWlmIChzdHJlYW0tPnBlcmlvZF9wb3MgPj0gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJc3RyZWFtLT5wZXJpb2RfcG9zIC09IHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBjYXB0dXJlX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdWExMDFfc3RyZWFtICpzdHJlYW0gPSAmdWEtPmNhcHR1cmU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgZnJhbWVzLCB3cml0ZV9wdHI7CisJYm9vbCBkb19wZXJpb2RfZWxhcHNlZDsKKwlpbnQgZXJyOworCisJaWYgKHVubGlrZWx5KHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwJCS8qIHVubGlua2VkICovCisJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVOT0RFViB8fAkJLyogZGV2aWNlIHJlbW92ZWQgKi8KKwkJICAgICB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAkvKiB1bmxpbmtlZCAqLworCQkgICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKQkvKiBkZXZpY2UgZGlzYWJsZWQgKi8KKwkJZ290byBzdHJlYW1fc3RvcHBlZDsKKworCWlmICh1cmItPnN0YXR1cyA+PSAwICYmIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbMF0uc3RhdHVzID49IDApCisJCWZyYW1lcyA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbMF0uYWN0dWFsX2xlbmd0aCAvCisJCQlzdHJlYW0tPmZyYW1lX2J5dGVzOworCWVsc2UKKwkJZnJhbWVzID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1YS0+bG9jaywgZmxhZ3MpOworCisJaWYgKGZyYW1lcyA+IDAgJiYgdGVzdF9iaXQoQUxTQV9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJZG9fcGVyaW9kX2VsYXBzZWQgPSBjb3B5X2NhcHR1cmVfZGF0YShzdHJlYW0sIHVyYiwgZnJhbWVzKTsKKwllbHNlCisJCWRvX3BlcmlvZF9lbGFwc2VkID0gZmFsc2U7CisKKwlpZiAodGVzdF9iaXQoVVNCX0NBUFRVUkVfUlVOTklORywgJnVhLT5zdGF0ZXMpKSB7CisJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJCWlmICh1bmxpa2VseShlcnIgPCAwKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWEtPmxvY2ssIGZsYWdzKTsKKwkJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgIlVTQiByZXF1ZXN0IGVycm9yICVkOiAlc1xuIiwKKwkJCQllcnIsIHVzYl9lcnJvcl9zdHJpbmcoZXJyKSk7CisJCQlnb3RvIHN0cmVhbV9zdG9wcGVkOworCQl9CisKKwkJLyogYXBwZW5kIHBhY2tldCBzaXplIHRvIEZJRk8gKi8KKwkJd3JpdGVfcHRyID0gdWEtPnJhdGVfZmVlZGJhY2tfc3RhcnQ7CisJCWFkZF93aXRoX3dyYXBhcm91bmQodWEsICZ3cml0ZV9wdHIsIHVhLT5yYXRlX2ZlZWRiYWNrX2NvdW50KTsKKwkJdWEtPnJhdGVfZmVlZGJhY2tbd3JpdGVfcHRyXSA9IGZyYW1lczsKKwkJaWYgKHVhLT5yYXRlX2ZlZWRiYWNrX2NvdW50IDwgdWEtPnBsYXliYWNrLnF1ZXVlX2xlbmd0aCkgeworCQkJdWEtPnJhdGVfZmVlZGJhY2tfY291bnQrKzsKKwkJCWlmICh1YS0+cmF0ZV9mZWVkYmFja19jb3VudCA9PQorCQkJCQkJdWEtPnBsYXliYWNrLnF1ZXVlX2xlbmd0aCkKKwkJCQl3YWtlX3VwKCZ1YS0+cmF0ZV9mZWVkYmFja193YWl0KTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBSaW5nIGJ1ZmZlciBvdmVyZmxvdzsgdGhpcyBoYXBwZW5zIHdoZW4gdGhlIHBsYXliYWNrCisJCQkgKiBzdHJlYW0gaXMgbm90IHJ1bm5pbmcuICBUaHJvdyBhd2F5IHRoZSBvbGRlc3QgZW50cnksCisJCQkgKiBzbyB0aGF0IHRoZSBwbGF5YmFjayBzdHJlYW0sIHdoZW4gaXQgc3RhcnRzLCBzZWVzCisJCQkgKiB0aGUgbW9zdCByZWNlbnQgcGFja2V0IHNpemVzLgorCQkJICovCisJCQlhZGRfd2l0aF93cmFwYXJvdW5kKHVhLCAmdWEtPnJhdGVfZmVlZGJhY2tfc3RhcnQsIDEpOworCQl9CisJCWlmICh0ZXN0X2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpICYmCisJCSAgICAhbGlzdF9lbXB0eSgmdWEtPnJlYWR5X3BsYXliYWNrX3VyYnMpKQorCQkJdGFza2xldF9zY2hlZHVsZSgmdWEtPnBsYXliYWNrX3Rhc2tsZXQpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVhLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZG9fcGVyaW9kX2VsYXBzZWQpCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3RyZWFtLT5zdWJzdHJlYW0pOworCisJLyogZm9yIGRlYnVnZ2luZzogbWVhc3VyZSB0aGUgc2FtcGxlIHJhdGUgcmVsYXRpdmUgdG8gdGhlIFVTQiBjbG9jayAqLworCXVhLT5mcHNbdWEtPmZyYW1lX2NvdW50ZXIrKyAvIHVhLT5wYWNrZXRzX3Blcl9zZWNvbmRdICs9IGZyYW1lczsKKwlpZiAodWEtPmZyYW1lX2NvdW50ZXIgPj0gQVJSQVlfU0laRSh1YS0+ZnBzKSAqIHVhLT5wYWNrZXRzX3Blcl9zZWNvbmQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImNhcHR1cmUgcmF0ZToiKTsKKwkJZm9yIChmcmFtZXMgPSAwOyBmcmFtZXMgPCBBUlJBWV9TSVpFKHVhLT5mcHMpOyArK2ZyYW1lcykKKwkJCXByaW50ayhLRVJOX0NPTlQgIiAldSIsIHVhLT5mcHNbZnJhbWVzXSk7CisJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisJCW1lbXNldCh1YS0+ZnBzLCAwLCBzaXplb2YodWEtPmZwcykpOworCQl1YS0+ZnJhbWVfY291bnRlciA9IDA7CisJfQorCXJldHVybjsKKworc3RyZWFtX3N0b3BwZWQ6CisJYWJvcnRfdXNiX3BsYXliYWNrKHVhKTsKKwlhYm9ydF91c2JfY2FwdHVyZSh1YSk7CisJYWJvcnRfYWxzYV9wbGF5YmFjayh1YSk7CisJYWJvcnRfYWxzYV9jYXB0dXJlKHVhKTsKK30KKworc3RhdGljIHZvaWQgZmlyc3RfY2FwdHVyZV91cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSB1cmItPmNvbnRleHQ7CisKKwl1cmItPmNvbXBsZXRlID0gY2FwdHVyZV91cmJfY29tcGxldGU7CisJY2FwdHVyZV91cmJfY29tcGxldGUodXJiKTsKKworCXNldF9iaXQoQ0FQVFVSRV9VUkJfQ09NUExFVEVELCAmdWEtPnN0YXRlcyk7CisJd2FrZV91cCgmdWEtPmFsc2FfY2FwdHVyZV93YWl0KTsKK30KKworc3RhdGljIGludCBzdWJtaXRfc3RyZWFtX3VyYnMoc3RydWN0IHVhMTAxICp1YSwgc3RydWN0IHVhMTAxX3N0cmVhbSAqc3RyZWFtKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHN0cmVhbS0+cXVldWVfbGVuZ3RoOyArK2kpIHsKKwkJaW50IGVyciA9IHVzYl9zdWJtaXRfdXJiKCZzdHJlYW0tPnVyYnNbaV0tPnVyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsICJVU0IgcmVxdWVzdCBlcnJvciAlZDogJXNcbiIsCisJCQkJZXJyLCB1c2JfZXJyb3Jfc3RyaW5nKGVycikpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQga2lsbF9zdHJlYW1fdXJicyhzdHJ1Y3QgdWExMDFfc3RyZWFtICpzdHJlYW0pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RyZWFtLT5xdWV1ZV9sZW5ndGg7ICsraSkKKwkJdXNiX2tpbGxfdXJiKCZzdHJlYW0tPnVyYnNbaV0tPnVyYik7Cit9CisKK3N0YXRpYyBpbnQgZW5hYmxlX2lzb19pbnRlcmZhY2Uoc3RydWN0IHVhMTAxICp1YSwgdW5zaWduZWQgaW50IGludGZfaW5kZXgpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0czsKKworCWFsdHMgPSB1YS0+aW50ZltpbnRmX2luZGV4XS0+Y3VyX2FsdHNldHRpbmc7CisJaWYgKGFsdHMtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcgIT0gMSkgeworCQlpbnQgZXJyID0gdXNiX3NldF9pbnRlcmZhY2UodWEtPmRldiwKKwkJCQkJICAgIGFsdHMtPmRlc2MuYkludGVyZmFjZU51bWJlciwgMSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsCisJCQkJImNhbm5vdCBpbml0aWFsaXplIGludGVyZmFjZTsgZXJyb3IgJWQ6ICVzXG4iLAorCQkJCWVyciwgdXNiX2Vycm9yX3N0cmluZyhlcnIpKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfaXNvX2ludGVyZmFjZShzdHJ1Y3QgdWExMDEgKnVhLCB1bnNpZ25lZCBpbnQgaW50Zl9pbmRleCkKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOworCisJYWx0cyA9IHVhLT5pbnRmW2ludGZfaW5kZXhdLT5jdXJfYWx0c2V0dGluZzsKKwlpZiAoYWx0cy0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyAhPSAwKSB7CisJCWludCBlcnIgPSB1c2Jfc2V0X2ludGVyZmFjZSh1YS0+ZGV2LAorCQkJCQkgICAgYWx0cy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAwKTsKKwkJaWYgKGVyciA8IDAgJiYgIXRlc3RfYml0KERJU0NPTk5FQ1RFRCwgJnVhLT5zdGF0ZXMpKQorCQkJZGV2X3dhcm4oJnVhLT5kZXYtPmRldiwKKwkJCQkgImludGVyZmFjZSByZXNldCBmYWlsZWQ7IGVycm9yICVkOiAlc1xuIiwKKwkJCQkgZXJyLCB1c2JfZXJyb3Jfc3RyaW5nKGVycikpOworCX0KK30KKworc3RhdGljIHZvaWQgc3RvcF91c2JfY2FwdHVyZShzdHJ1Y3QgdWExMDEgKnVhKQoreworCWNsZWFyX2JpdChVU0JfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcyk7CisKKwlraWxsX3N0cmVhbV91cmJzKCZ1YS0+Y2FwdHVyZSk7CisKKwlkaXNhYmxlX2lzb19pbnRlcmZhY2UodWEsIElOVEZfQ0FQVFVSRSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfdXNiX2NhcHR1cmUoc3RydWN0IHVhMTAxICp1YSkKK3sKKwlpbnQgZXJyOworCisJaWYgKHRlc3RfYml0KERJU0NPTk5FQ1RFRCwgJnVhLT5zdGF0ZXMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICh0ZXN0X2JpdChVU0JfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcykpCisJCXJldHVybiAwOworCisJa2lsbF9zdHJlYW1fdXJicygmdWEtPmNhcHR1cmUpOworCisJZXJyID0gZW5hYmxlX2lzb19pbnRlcmZhY2UodWEsIElOVEZfQ0FQVFVSRSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwljbGVhcl9iaXQoQ0FQVFVSRV9VUkJfQ09NUExFVEVELCAmdWEtPnN0YXRlcyk7CisJdWEtPmNhcHR1cmUudXJic1swXS0+dXJiLmNvbXBsZXRlID0gZmlyc3RfY2FwdHVyZV91cmJfY29tcGxldGU7CisJdWEtPnJhdGVfZmVlZGJhY2tfc3RhcnQgPSAwOworCXVhLT5yYXRlX2ZlZWRiYWNrX2NvdW50ID0gMDsKKworCXNldF9iaXQoVVNCX0NBUFRVUkVfUlVOTklORywgJnVhLT5zdGF0ZXMpOworCWVyciA9IHN1Ym1pdF9zdHJlYW1fdXJicyh1YSwgJnVhLT5jYXB0dXJlKTsKKwlpZiAoZXJyIDwgMCkKKwkJc3RvcF91c2JfY2FwdHVyZSh1YSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgc3RvcF91c2JfcGxheWJhY2soc3RydWN0IHVhMTAxICp1YSkKK3sKKwljbGVhcl9iaXQoVVNCX1BMQVlCQUNLX1JVTk5JTkcsICZ1YS0+c3RhdGVzKTsKKworCWtpbGxfc3RyZWFtX3VyYnMoJnVhLT5wbGF5YmFjayk7CisKKwl0YXNrbGV0X2tpbGwoJnVhLT5wbGF5YmFja190YXNrbGV0KTsKKworCWRpc2FibGVfaXNvX2ludGVyZmFjZSh1YSwgSU5URl9QTEFZQkFDSyk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfdXNiX3BsYXliYWNrKHN0cnVjdCB1YTEwMSAqdWEpCit7CisJdW5zaWduZWQgaW50IGksIGZyYW1lczsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGVyciA9IDA7CisKKwlpZiAodGVzdF9iaXQoRElTQ09OTkVDVEVELCAmdWEtPnN0YXRlcykpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHRlc3RfYml0KFVTQl9QTEFZQkFDS19SVU5OSU5HLCAmdWEtPnN0YXRlcykpCisJCXJldHVybiAwOworCisJa2lsbF9zdHJlYW1fdXJicygmdWEtPnBsYXliYWNrKTsKKwl0YXNrbGV0X2tpbGwoJnVhLT5wbGF5YmFja190YXNrbGV0KTsKKworCWVyciA9IGVuYWJsZV9pc29faW50ZXJmYWNlKHVhLCBJTlRGX1BMQVlCQUNLKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWNsZWFyX2JpdChQTEFZQkFDS19VUkJfQ09NUExFVEVELCAmdWEtPnN0YXRlcyk7CisJdWEtPnBsYXliYWNrLnVyYnNbMF0tPnVyYi5jb21wbGV0ZSA9CisJCWZpcnN0X3BsYXliYWNrX3VyYl9jb21wbGV0ZTsKKwlzcGluX2xvY2tfaXJxKCZ1YS0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnVhLT5yZWFkeV9wbGF5YmFja191cmJzKTsKKwlzcGluX3VubG9ja19pcnEoJnVhLT5sb2NrKTsKKworCS8qCisJICogV2Ugc3VibWl0IHRoZSBpbml0aWFsIFVSQnMgYWxsIGF0IG9uY2UsIHNvIHdlIGhhdmUgdG8gd2FpdCBmb3IgdGhlCisJICogcGFja2V0IHNpemUgRklGTyB0byBiZSBmdWxsLgorCSAqLworCXdhaXRfZXZlbnQodWEtPnJhdGVfZmVlZGJhY2tfd2FpdCwKKwkJICAgdWEtPnJhdGVfZmVlZGJhY2tfY291bnQgPj0gdWEtPnBsYXliYWNrLnF1ZXVlX2xlbmd0aCB8fAorCQkgICAhdGVzdF9iaXQoVVNCX0NBUFRVUkVfUlVOTklORywgJnVhLT5zdGF0ZXMpIHx8CisJCSAgIHRlc3RfYml0KERJU0NPTk5FQ1RFRCwgJnVhLT5zdGF0ZXMpKTsKKwlpZiAodGVzdF9iaXQoRElTQ09OTkVDVEVELCAmdWEtPnN0YXRlcykpIHsKKwkJc3RvcF91c2JfcGxheWJhY2sodWEpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKCF0ZXN0X2JpdChVU0JfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcykpIHsKKwkJc3RvcF91c2JfcGxheWJhY2sodWEpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgdWEtPnBsYXliYWNrLnF1ZXVlX2xlbmd0aDsgKytpKSB7CisJCS8qIGFsbCBpbml0aWFsIFVSQnMgY29udGFpbiBzaWxlbmNlICovCisJCXNwaW5fbG9ja19pcnEoJnVhLT5sb2NrKTsKKwkJZnJhbWVzID0gdWEtPnJhdGVfZmVlZGJhY2tbdWEtPnJhdGVfZmVlZGJhY2tfc3RhcnRdOworCQlhZGRfd2l0aF93cmFwYXJvdW5kKHVhLCAmdWEtPnJhdGVfZmVlZGJhY2tfc3RhcnQsIDEpOworCQl1YS0+cmF0ZV9mZWVkYmFja19jb3VudC0tOworCQlzcGluX3VubG9ja19pcnEoJnVhLT5sb2NrKTsKKwkJdXJiID0gJnVhLT5wbGF5YmFjay51cmJzW2ldLT51cmI7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbMF0ubGVuZ3RoID0KKwkJCWZyYW1lcyAqIHVhLT5wbGF5YmFjay5mcmFtZV9ieXRlczsKKwkJbWVtc2V0KHVyYi0+dHJhbnNmZXJfYnVmZmVyLCAwLAorCQkgICAgICAgdXJiLT5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGgpOworCX0KKworCXNldF9iaXQoVVNCX1BMQVlCQUNLX1JVTk5JTkcsICZ1YS0+c3RhdGVzKTsKKwllcnIgPSBzdWJtaXRfc3RyZWFtX3VyYnModWEsICZ1YS0+cGxheWJhY2spOworCWlmIChlcnIgPCAwKQorCQlzdG9wX3VzYl9wbGF5YmFjayh1YSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYWJvcnRfYWxzYV9jYXB0dXJlKHN0cnVjdCB1YTEwMSAqdWEpCit7CisJaWYgKHRlc3RfYml0KEFMU0FfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcykpCisJCXNuZF9wY21fc3RvcCh1YS0+Y2FwdHVyZS5zdWJzdHJlYW0sIFNORFJWX1BDTV9TVEFURV9YUlVOKTsKK30KKworc3RhdGljIHZvaWQgYWJvcnRfYWxzYV9wbGF5YmFjayhzdHJ1Y3QgdWExMDEgKnVhKQoreworCWlmICh0ZXN0X2JpdChBTFNBX1BMQVlCQUNLX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJc25kX3BjbV9zdG9wKHVhLT5wbGF5YmFjay5zdWJzdHJlYW0sIFNORFJWX1BDTV9TVEFURV9YUlVOKTsKK30KKworc3RhdGljIGludCBzZXRfc3RyZWFtX2h3KHN0cnVjdCB1YTEwMSAqdWEsIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJIHVuc2lnbmVkIGludCBjaGFubmVscykKK3sKKwlpbnQgZXJyOworCisJc3Vic3RyZWFtLT5ydW50aW1lLT5ody5pbmZvID0KKwkJU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQlTTkRSVl9QQ01fSU5GT19CQVRDSCB8CisJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19GSUZPX0lOX0ZSQU1FUzsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LmZvcm1hdHMgPSB1YS0+Zm9ybWF0X2JpdDsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LnJhdGVzID0gc25kX3BjbV9yYXRlX3RvX3JhdGVfYml0KHVhLT5yYXRlKTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LnJhdGVfbWluID0gdWEtPnJhdGU7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5ody5yYXRlX21heCA9IHVhLT5yYXRlOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcuY2hhbm5lbHNfbWluID0gY2hhbm5lbHM7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5ody5jaGFubmVsc19tYXggPSBjaGFubmVsczsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LmJ1ZmZlcl9ieXRlc19tYXggPSA0NTAwMCAqIDEwMjQ7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5ody5wZXJpb2RfYnl0ZXNfbWluID0gMTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LnBlcmlvZF9ieXRlc19tYXggPSBVSU5UX01BWDsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LnBlcmlvZHNfbWluID0gMjsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LnBlcmlvZHNfbWF4ID0gVUlOVF9NQVg7CisJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChzdWJzdHJlYW0tPnJ1bnRpbWUsCisJCQkJCSAgIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfVElNRSwKKwkJCQkJICAgMTUwMDAwMCAvIHVhLT5wYWNrZXRzX3Blcl9zZWNvbmQsCisJCQkJCSAgIDgxOTIwMDApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9tc2JpdHMoc3Vic3RyZWFtLT5ydW50aW1lLCAwLCAzMiwgMjQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY2FwdHVyZV9wY21fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKworCXVhLT5jYXB0dXJlLnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwllcnIgPSBzZXRfc3RyZWFtX2h3KHVhLCBzdWJzdHJlYW0sIHVhLT5jYXB0dXJlLmNoYW5uZWxzKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LmZpZm9fc2l6ZSA9CisJCURJVl9ST1VORF9DTE9TRVNUKHVhLT5yYXRlLCB1YS0+cGFja2V0c19wZXJfc2Vjb25kKTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRlbGF5ID0gc3Vic3RyZWFtLT5ydW50aW1lLT5ody5maWZvX3NpemU7CisKKwltdXRleF9sb2NrKCZ1YS0+bXV0ZXgpOworCWVyciA9IHN0YXJ0X3VzYl9jYXB0dXJlKHVhKTsKKwlpZiAoZXJyID49IDApCisJCXNldF9iaXQoQUxTQV9DQVBUVVJFX09QRU4sICZ1YS0+c3RhdGVzKTsKKwltdXRleF91bmxvY2soJnVhLT5tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwbGF5YmFja19wY21fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKworCXVhLT5wbGF5YmFjay5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJZXJyID0gc2V0X3N0cmVhbV9odyh1YSwgc3Vic3RyZWFtLCB1YS0+cGxheWJhY2suY2hhbm5lbHMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcuZmlmb19zaXplID0KKwkJRElWX1JPVU5EX0NMT1NFU1QodWEtPnJhdGUgKiB1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoLAorCQkJCSAgdWEtPnBhY2tldHNfcGVyX3NlY29uZCk7CisKKwltdXRleF9sb2NrKCZ1YS0+bXV0ZXgpOworCWVyciA9IHN0YXJ0X3VzYl9jYXB0dXJlKHVhKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKKwllcnIgPSBzdGFydF91c2JfcGxheWJhY2sodWEpOworCWlmIChlcnIgPCAwKSB7CisJCWlmICghdGVzdF9iaXQoQUxTQV9DQVBUVVJFX09QRU4sICZ1YS0+c3RhdGVzKSkKKwkJCXN0b3BfdXNiX2NhcHR1cmUodWEpOworCQlnb3RvIGVycm9yOworCX0KKwlzZXRfYml0KEFMU0FfUExBWUJBQ0tfT1BFTiwgJnVhLT5zdGF0ZXMpOworZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZ1YS0+bXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY2FwdHVyZV9wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCisJbXV0ZXhfbG9jaygmdWEtPm11dGV4KTsKKwljbGVhcl9iaXQoQUxTQV9DQVBUVVJFX09QRU4sICZ1YS0+c3RhdGVzKTsKKwlpZiAoIXRlc3RfYml0KEFMU0FfUExBWUJBQ0tfT1BFTiwgJnVhLT5zdGF0ZXMpKQorCQlzdG9wX3VzYl9jYXB0dXJlKHVhKTsKKwltdXRleF91bmxvY2soJnVhLT5tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGxheWJhY2tfcGNtX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKworCW11dGV4X2xvY2soJnVhLT5tdXRleCk7CisJc3RvcF91c2JfcGxheWJhY2sodWEpOworCWNsZWFyX2JpdChBTFNBX1BMQVlCQUNLX09QRU4sICZ1YS0+c3RhdGVzKTsKKwlpZiAoIXRlc3RfYml0KEFMU0FfQ0FQVFVSRV9PUEVOLCAmdWEtPnN0YXRlcykpCisJCXN0b3BfdXNiX2NhcHR1cmUodWEpOworCW11dGV4X3VubG9jaygmdWEtPm11dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYXB0dXJlX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmdWEtPm11dGV4KTsKKwllcnIgPSBzdGFydF91c2JfY2FwdHVyZSh1YSk7CisJbXV0ZXhfdW5sb2NrKCZ1YS0+bXV0ZXgpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSwKKwkJCQkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7Cit9CisKK3N0YXRpYyBpbnQgcGxheWJhY2tfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmdWEtPm11dGV4KTsKKwllcnIgPSBzdGFydF91c2JfY2FwdHVyZSh1YSk7CisJaWYgKGVyciA+PSAwKQorCQllcnIgPSBzdGFydF91c2JfcGxheWJhY2sodWEpOworCW11dGV4X3VubG9jaygmdWEtPm11dGV4KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0sCisJCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworfQorCitzdGF0aWMgaW50IHVhMTAxX3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgY2FwdHVyZV9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJnVhLT5tdXRleCk7CisJZXJyID0gc3RhcnRfdXNiX2NhcHR1cmUodWEpOworCW11dGV4X3VubG9jaygmdWEtPm11dGV4KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qCisJICogVGhlIEVIQ0kgZHJpdmVyIHNjaGVkdWxlcyB0aGUgZmlyc3QgcGFja2V0IG9mIGFuIGlzbyBzdHJlYW0gYXQgMTAgbXMKKwkgKiBpbiB0aGUgZnV0dXJlLCBpLmUuLCBubyBkYXRhIGlzIGFjdHVhbGx5IGNhcHR1cmVkIGZvciB0aGF0IGxvbmcuCisJICogVGFrZSB0aGUgd2FpdCBoZXJlIHNvIHRoYXQgdGhlIHN0cmVhbSBpcyBrbm93biB0byBiZSBhY3R1YWxseQorCSAqIHJ1bm5pbmcgd2hlbiB0aGUgc3RhcnQgdHJpZ2dlciBoYXMgYmVlbiBjYWxsZWQuCisJICovCisJd2FpdF9ldmVudCh1YS0+YWxzYV9jYXB0dXJlX3dhaXQsCisJCSAgIHRlc3RfYml0KENBUFRVUkVfVVJCX0NPTVBMRVRFRCwgJnVhLT5zdGF0ZXMpIHx8CisJCSAgICF0ZXN0X2JpdChVU0JfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcykpOworCWlmICh0ZXN0X2JpdChESVNDT05ORUNURUQsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCF0ZXN0X2JpdChVU0JfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcykpCisJCXJldHVybiAtRUlPOworCisJdWEtPmNhcHR1cmUucGVyaW9kX3BvcyA9IDA7CisJdWEtPmNhcHR1cmUuYnVmZmVyX3BvcyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGxheWJhY2tfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZ1YS0+bXV0ZXgpOworCWVyciA9IHN0YXJ0X3VzYl9jYXB0dXJlKHVhKTsKKwlpZiAoZXJyID49IDApCisJCWVyciA9IHN0YXJ0X3VzYl9wbGF5YmFjayh1YSk7CisJbXV0ZXhfdW5sb2NrKCZ1YS0+bXV0ZXgpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogc2VlIHRoZSBjb21tZW50IGluIGNhcHR1cmVfcGNtX3ByZXBhcmUoKSAqLworCXdhaXRfZXZlbnQodWEtPmFsc2FfcGxheWJhY2tfd2FpdCwKKwkJICAgdGVzdF9iaXQoUExBWUJBQ0tfVVJCX0NPTVBMRVRFRCwgJnVhLT5zdGF0ZXMpIHx8CisJCSAgICF0ZXN0X2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKTsKKwlpZiAodGVzdF9iaXQoRElTQ09OTkVDVEVELCAmdWEtPnN0YXRlcykpCisJCXJldHVybiAtRU5PREVWOworCWlmICghdGVzdF9iaXQoVVNCX1BMQVlCQUNLX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIC1FSU87CisKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRlbGF5ID0gMDsKKwl1YS0+cGxheWJhY2sucGVyaW9kX3BvcyA9IDA7CisJdWEtPnBsYXliYWNrLmJ1ZmZlcl9wb3MgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhcHR1cmVfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQlpZiAoIXRlc3RfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJCXJldHVybiAtRUlPOworCQlzZXRfYml0KEFMU0FfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcyk7CisJCXJldHVybiAwOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJY2xlYXJfYml0KEFMU0FfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcyk7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGludCBwbGF5YmFja19wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCWlmICghdGVzdF9iaXQoVVNCX1BMQVlCQUNLX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJCXJldHVybiAtRUlPOworCQlzZXRfYml0KEFMU0FfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpOworCQlyZXR1cm4gMDsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCWNsZWFyX2JpdChBTFNBX1BMQVlCQUNLX1JVTk5JTkcsICZ1YS0+c3RhdGVzKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHNuZF9wY21fdWZyYW1lc190IHVhMTAxX3BjbV9wb2ludGVyKHN0cnVjdCB1YTEwMSAqdWEsCisJCQkJCQkgIHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBwb3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWEtPmxvY2ssIGZsYWdzKTsKKwlwb3MgPSBzdHJlYW0tPmJ1ZmZlcl9wb3M7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWEtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcG9zOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgY2FwdHVyZV9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMpCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHN1YnMtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiB1YTEwMV9wY21fcG9pbnRlcih1YSwgJnVhLT5jYXB0dXJlKTsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHBsYXliYWNrX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicykKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vicy0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHVhMTAxX3BjbV9wb2ludGVyKHVhLCAmdWEtPnBsYXliYWNrKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBjYXB0dXJlX3BjbV9vcHMgPSB7CisJLm9wZW4gPSBjYXB0dXJlX3BjbV9vcGVuLAorCS5jbG9zZSA9IGNhcHR1cmVfcGNtX2Nsb3NlLAorCS5pb2N0bCA9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPSBjYXB0dXJlX3BjbV9od19wYXJhbXMsCisJLmh3X2ZyZWUgPSB1YTEwMV9wY21faHdfZnJlZSwKKwkucHJlcGFyZSA9IGNhcHR1cmVfcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIgPSBjYXB0dXJlX3BjbV90cmlnZ2VyLAorCS5wb2ludGVyID0gY2FwdHVyZV9wY21fcG9pbnRlciwKKwkucGFnZSA9IHNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPSBzbmRfcGNtX2xpYl9tbWFwX3ZtYWxsb2MsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHBsYXliYWNrX3BjbV9vcHMgPSB7CisJLm9wZW4gPSBwbGF5YmFja19wY21fb3BlbiwKKwkuY2xvc2UgPSBwbGF5YmFja19wY21fY2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9IHBsYXliYWNrX3BjbV9od19wYXJhbXMsCisJLmh3X2ZyZWUgPSB1YTEwMV9wY21faHdfZnJlZSwKKwkucHJlcGFyZSA9IHBsYXliYWNrX3BjbV9wcmVwYXJlLAorCS50cmlnZ2VyID0gcGxheWJhY2tfcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIgPSBwbGF5YmFja19wY21fcG9pbnRlciwKKwkucGFnZSA9IHNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPSBzbmRfcGNtX2xpYl9tbWFwX3ZtYWxsb2MsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2Rpc2NyZXRlX2Rlc2NyaXB0b3IgKgorZmluZF9mb3JtYXRfZGVzY3JpcHRvcihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKKwl1OCAqZXh0cmE7CisJaW50IGV4dHJhbGVuOworCisJaWYgKGludGVyZmFjZS0+bnVtX2FsdHNldHRpbmcgIT0gMikgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgImludmFsaWQgbnVtX2FsdHNldHRpbmdcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlhbHQgPSAmaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzBdOworCWlmIChhbHQtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAwKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiaW52YWxpZCBiTnVtRW5kcG9pbnRzXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYWx0ID0gJmludGVyZmFjZS0+YWx0c2V0dGluZ1sxXTsKKwlpZiAoYWx0LT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gMSkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgImludmFsaWQgYk51bUVuZHBvaW50c1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWV4dHJhID0gYWx0LT5leHRyYTsKKwlleHRyYWxlbiA9IGFsdC0+ZXh0cmFsZW47CisJd2hpbGUgKGV4dHJhbGVuID49IHNpemVvZihzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyKSkgeworCQlzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lfZGlzY3JldGVfZGVzY3JpcHRvciAqZGVzYzsKKworCQlkZXNjID0gKHN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yICopZXh0cmE7CisJCWlmIChkZXNjLT5iTGVuZ3RoID4gZXh0cmFsZW4pIHsKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiZGVzY3JpcHRvciBvdmVyZmxvd1xuIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlpZiAoZGVzYy0+Ykxlbmd0aCA9PSBVQUNfRk9STUFUX1RZUEVfSV9ESVNDUkVURV9ERVNDX1NJWkUoMSkgJiYKKwkJICAgIGRlc2MtPmJEZXNjcmlwdG9yVHlwZSA9PSBVU0JfRFRfQ1NfSU5URVJGQUNFICYmCisJCSAgICBkZXNjLT5iRGVzY3JpcHRvclN1YnR5cGUgPT0gVUFDX0ZPUk1BVF9UWVBFKSB7CisJCQlpZiAoZGVzYy0+YkZvcm1hdFR5cGUgIT0gVUFDX0ZPUk1BVF9UWVBFX0lfUENNIHx8CisJCQkgICAgZGVzYy0+YlNhbUZyZXFUeXBlICE9IDEpIHsKKwkJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwKKwkJCQkJImludmFsaWQgZm9ybWF0IHR5cGVcbiIpOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJcmV0dXJuIGRlc2M7CisJCX0KKwkJZXh0cmFsZW4gLT0gZGVzYy0+Ykxlbmd0aDsKKwkJZXh0cmEgKz0gZGVzYy0+Ykxlbmd0aDsKKwl9CisJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJzYW1wbGUgZm9ybWF0IGRlc2NyaXB0b3Igbm90IGZvdW5kXG4iKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBkZXRlY3RfdXNiX2Zvcm1hdChzdHJ1Y3QgdWExMDEgKnVhKQoreworCWNvbnN0IHN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yICpmbXRfY2FwdHVyZTsKKwljb25zdCBzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lfZGlzY3JldGVfZGVzY3JpcHRvciAqZm10X3BsYXliYWNrOworCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkOworCXVuc2lnbmVkIGludCByYXRlMjsKKworCWZtdF9jYXB0dXJlID0gZmluZF9mb3JtYXRfZGVzY3JpcHRvcih1YS0+aW50ZltJTlRGX0NBUFRVUkVdKTsKKwlmbXRfcGxheWJhY2sgPSBmaW5kX2Zvcm1hdF9kZXNjcmlwdG9yKHVhLT5pbnRmW0lOVEZfUExBWUJBQ0tdKTsKKwlpZiAoIWZtdF9jYXB0dXJlIHx8ICFmbXRfcGxheWJhY2spCisJCXJldHVybiAtRU5YSU87CisKKwlzd2l0Y2ggKGZtdF9jYXB0dXJlLT5iU3ViZnJhbWVTaXplKSB7CisJY2FzZSAzOgorCQl1YS0+Zm9ybWF0X2JpdCA9IFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl1YS0+Zm9ybWF0X2JpdCA9IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsICJzYW1wbGUgd2lkdGggaXMgbm90IDI0IG9yIDMyIGJpdHNcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwlpZiAoZm10X2NhcHR1cmUtPmJTdWJmcmFtZVNpemUgIT0gZm10X3BsYXliYWNrLT5iU3ViZnJhbWVTaXplKSB7CisJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwKKwkJCSJwbGF5YmFjay9jYXB0dXJlIHNhbXBsZSB3aWR0aHMgZG8gbm90IG1hdGNoXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpZiAoZm10X2NhcHR1cmUtPmJCaXRSZXNvbHV0aW9uICE9IDI0IHx8CisJICAgIGZtdF9wbGF5YmFjay0+YkJpdFJlc29sdXRpb24gIT0gMjQpIHsKKwkJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAic2FtcGxlIHdpZHRoIGlzIG5vdCAyNCBiaXRzXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwl1YS0+cmF0ZSA9IGNvbWJpbmVfdHJpcGxlKGZtdF9jYXB0dXJlLT50U2FtRnJlcVswXSk7CisJcmF0ZTIgPSBjb21iaW5lX3RyaXBsZShmbXRfcGxheWJhY2stPnRTYW1GcmVxWzBdKTsKKwlpZiAodWEtPnJhdGUgIT0gcmF0ZTIpIHsKKwkJZGV2X2VycigmdWEtPmRldi0+ZGV2LAorCQkJInBsYXliYWNrL2NhcHR1cmUgcmF0ZXMgZG8gbm90IG1hdGNoOiAldS8ldVxuIiwKKwkJCXJhdGUyLCB1YS0+cmF0ZSk7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJc3dpdGNoICh1YS0+ZGV2LT5zcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCXVhLT5wYWNrZXRzX3Blcl9zZWNvbmQgPSAxMDAwOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQl1YS0+cGFja2V0c19wZXJfc2Vjb25kID0gODAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAidW5rbm93biBkZXZpY2Ugc3BlZWRcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXVhLT5jYXB0dXJlLmNoYW5uZWxzID0gZm10X2NhcHR1cmUtPmJOckNoYW5uZWxzOworCXVhLT5wbGF5YmFjay5jaGFubmVscyA9IGZtdF9wbGF5YmFjay0+Yk5yQ2hhbm5lbHM7CisJdWEtPmNhcHR1cmUuZnJhbWVfYnl0ZXMgPQorCQlmbXRfY2FwdHVyZS0+YlN1YmZyYW1lU2l6ZSAqIHVhLT5jYXB0dXJlLmNoYW5uZWxzOworCXVhLT5wbGF5YmFjay5mcmFtZV9ieXRlcyA9CisJCWZtdF9wbGF5YmFjay0+YlN1YmZyYW1lU2l6ZSAqIHVhLT5wbGF5YmFjay5jaGFubmVsczsKKworCWVwZCA9ICZ1YS0+aW50ZltJTlRGX0NBUFRVUkVdLT5hbHRzZXR0aW5nWzFdLmVuZHBvaW50WzBdLmRlc2M7CisJaWYgKCF1c2JfZW5kcG9pbnRfaXNfaXNvY19pbihlcGQpKSB7CisJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgImludmFsaWQgY2FwdHVyZSBlbmRwb2ludFxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCXVhLT5jYXB0dXJlLnVzYl9waXBlID0gdXNiX3Jjdmlzb2NwaXBlKHVhLT5kZXYsIHVzYl9lbmRwb2ludF9udW0oZXBkKSk7CisJdWEtPmNhcHR1cmUubWF4X3BhY2tldF9ieXRlcyA9IGxlMTZfdG9fY3B1KGVwZC0+d01heFBhY2tldFNpemUpOworCisJZXBkID0gJnVhLT5pbnRmW0lOVEZfUExBWUJBQ0tdLT5hbHRzZXR0aW5nWzFdLmVuZHBvaW50WzBdLmRlc2M7CisJaWYgKCF1c2JfZW5kcG9pbnRfaXNfaXNvY19vdXQoZXBkKSkgeworCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsICJpbnZhbGlkIHBsYXliYWNrIGVuZHBvaW50XG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJdWEtPnBsYXliYWNrLnVzYl9waXBlID0gdXNiX3NuZGlzb2NwaXBlKHVhLT5kZXYsIHVzYl9lbmRwb2ludF9udW0oZXBkKSk7CisJdWEtPnBsYXliYWNrLm1heF9wYWNrZXRfYnl0ZXMgPSBsZTE2X3RvX2NwdShlcGQtPndNYXhQYWNrZXRTaXplKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbGxvY19zdHJlYW1fYnVmZmVycyhzdHJ1Y3QgdWExMDEgKnVhLCBzdHJ1Y3QgdWExMDFfc3RyZWFtICpzdHJlYW0pCit7CisJdW5zaWduZWQgaW50IHJlbWFpbmluZ19wYWNrZXRzLCBwYWNrZXRzLCBwYWNrZXRzX3Blcl9wYWdlLCBpOworCXNpemVfdCBzaXplOworCisJc3RyZWFtLT5xdWV1ZV9sZW5ndGggPSBxdWV1ZV9sZW5ndGg7CisJc3RyZWFtLT5xdWV1ZV9sZW5ndGggPSBtYXgoc3RyZWFtLT5xdWV1ZV9sZW5ndGgsCisJCQkJICAgKHVuc2lnbmVkIGludClNSU5fUVVFVUVfTEVOR1RIKTsKKwlzdHJlYW0tPnF1ZXVlX2xlbmd0aCA9IG1pbihzdHJlYW0tPnF1ZXVlX2xlbmd0aCwKKwkJCQkgICAodW5zaWduZWQgaW50KU1BWF9RVUVVRV9MRU5HVEgpOworCisJLyoKKwkgKiBUaGUgY2FjaGUgcG9vbCBzaXplcyB1c2VkIGJ5IHVzYl9idWZmZXJfYWxsb2MoKSAoMTI4LCA1MTIsIDIwNDgpIGFyZQorCSAqIHF1aXRlIGJhZCB3aGVuIHVzZWQgd2l0aCB0aGUgcGFja2V0IHNpemVzIG9mIHRoaXMgZGV2aWNlIChlLmcuIDI4MCwKKwkgKiA1MjAsIDYyNCkuICBUaGVyZWZvcmUsIHdlIGFsbG9jYXRlIGFuZCBzdWJkaXZpZGUgZW50aXJlIHBhZ2VzLCB1c2luZworCSAqIGEgc21hbGxlciBidWZmZXIgb25seSBmb3IgdGhlIGxhc3QgY2h1bmsuCisJICovCisJcmVtYWluaW5nX3BhY2tldHMgPSBzdHJlYW0tPnF1ZXVlX2xlbmd0aDsKKwlwYWNrZXRzX3Blcl9wYWdlID0gUEFHRV9TSVpFIC8gc3RyZWFtLT5tYXhfcGFja2V0X2J5dGVzOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0cmVhbS0+YnVmZmVycyk7ICsraSkgeworCQlwYWNrZXRzID0gbWluKHJlbWFpbmluZ19wYWNrZXRzLCBwYWNrZXRzX3Blcl9wYWdlKTsKKwkJc2l6ZSA9IHBhY2tldHMgKiBzdHJlYW0tPm1heF9wYWNrZXRfYnl0ZXM7CisJCXN0cmVhbS0+YnVmZmVyc1tpXS5hZGRyID0KKwkJCXVzYl9idWZmZXJfYWxsb2ModWEtPmRldiwgc2l6ZSwgR0ZQX0tFUk5FTCwKKwkJCQkJICZzdHJlYW0tPmJ1ZmZlcnNbaV0uZG1hKTsKKwkJaWYgKCFzdHJlYW0tPmJ1ZmZlcnNbaV0uYWRkcikKKwkJCXJldHVybiAtRU5PTUVNOworCQlzdHJlYW0tPmJ1ZmZlcnNbaV0uc2l6ZSA9IHNpemU7CisJCXJlbWFpbmluZ19wYWNrZXRzIC09IHBhY2tldHM7CisJCWlmICghcmVtYWluaW5nX3BhY2tldHMpCisJCQlicmVhazsKKwl9CisJaWYgKHJlbWFpbmluZ19wYWNrZXRzKSB7CisJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgInRvbyBtYW55IHBhY2tldHNcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9zdHJlYW1fYnVmZmVycyhzdHJ1Y3QgdWExMDEgKnVhLCBzdHJ1Y3QgdWExMDFfc3RyZWFtICpzdHJlYW0pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdHJlYW0tPmJ1ZmZlcnMpOyArK2kpCisJCXVzYl9idWZmZXJfZnJlZSh1YS0+ZGV2LAorCQkJCXN0cmVhbS0+YnVmZmVyc1tpXS5zaXplLAorCQkJCXN0cmVhbS0+YnVmZmVyc1tpXS5hZGRyLAorCQkJCXN0cmVhbS0+YnVmZmVyc1tpXS5kbWEpOworfQorCitzdGF0aWMgaW50IGFsbG9jX3N0cmVhbV91cmJzKHN0cnVjdCB1YTEwMSAqdWEsIHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSwKKwkJCSAgICAgdm9pZCAoKnVyYl9jb21wbGV0ZSkoc3RydWN0IHVyYiAqKSkKK3sKKwl1bnNpZ25lZCBtYXhfcGFja2V0X3NpemUgPSBzdHJlYW0tPm1heF9wYWNrZXRfYnl0ZXM7CisJc3RydWN0IHVhMTAxX3VyYiAqdXJiOworCXVuc2lnbmVkIGludCBiLCB1ID0gMDsKKworCWZvciAoYiA9IDA7IGIgPCBBUlJBWV9TSVpFKHN0cmVhbS0+YnVmZmVycyk7ICsrYikgeworCQl1bnNpZ25lZCBpbnQgc2l6ZSA9IHN0cmVhbS0+YnVmZmVyc1tiXS5zaXplOworCQl1OCAqYWRkciA9IHN0cmVhbS0+YnVmZmVyc1tiXS5hZGRyOworCQlkbWFfYWRkcl90IGRtYSA9IHN0cmVhbS0+YnVmZmVyc1tiXS5kbWE7CisKKwkJd2hpbGUgKHNpemUgPj0gbWF4X3BhY2tldF9zaXplKSB7CisJCQlpZiAodSA+PSBzdHJlYW0tPnF1ZXVlX2xlbmd0aCkKKwkJCQlnb3RvIGJ1ZnNpemVfZXJyb3I7CisJCQl1cmIgPSBrbWFsbG9jKHNpemVvZigqdXJiKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXVyYikKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCXVzYl9pbml0X3VyYigmdXJiLT51cmIpOworCQkJdXJiLT51cmIuZGV2ID0gdWEtPmRldjsKKwkJCXVyYi0+dXJiLnBpcGUgPSBzdHJlYW0tPnVzYl9waXBlOworCQkJdXJiLT51cmIudHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVAgfAorCQkJCQlVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwkJCXVyYi0+dXJiLnRyYW5zZmVyX2J1ZmZlciA9IGFkZHI7CisJCQl1cmItPnVyYi50cmFuc2Zlcl9kbWEgPSBkbWE7CisJCQl1cmItPnVyYi50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gbWF4X3BhY2tldF9zaXplOworCQkJdXJiLT51cmIubnVtYmVyX29mX3BhY2tldHMgPSAxOworCQkJdXJiLT51cmIuaW50ZXJ2YWwgPSAxOworCQkJdXJiLT51cmIuY29udGV4dCA9IHVhOworCQkJdXJiLT51cmIuY29tcGxldGUgPSB1cmJfY29tcGxldGU7CisJCQl1cmItPnVyYi5pc29fZnJhbWVfZGVzY1swXS5vZmZzZXQgPSAwOworCQkJdXJiLT51cmIuaXNvX2ZyYW1lX2Rlc2NbMF0ubGVuZ3RoID0gbWF4X3BhY2tldF9zaXplOworCQkJc3RyZWFtLT51cmJzW3UrK10gPSB1cmI7CisJCQlzaXplIC09IG1heF9wYWNrZXRfc2l6ZTsKKwkJCWFkZHIgKz0gbWF4X3BhY2tldF9zaXplOworCQkJZG1hICs9IG1heF9wYWNrZXRfc2l6ZTsKKwkJfQorCX0KKwlpZiAodSA9PSBzdHJlYW0tPnF1ZXVlX2xlbmd0aCkKKwkJcmV0dXJuIDA7CitidWZzaXplX2Vycm9yOgorCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgImludGVybmFsIGJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwlyZXR1cm4gLUVOWElPOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3N0cmVhbV91cmJzKHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzdHJlYW0tPnF1ZXVlX2xlbmd0aDsgKytpKQorCQlrZnJlZShzdHJlYW0tPnVyYnNbaV0pOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3VzYl9yZWxhdGVkX3Jlc291cmNlcyhzdHJ1Y3QgdWExMDEgKnVhLAorCQkJCSAgICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXVuc2lnbmVkIGludCBpOworCisJZnJlZV9zdHJlYW1fdXJicygmdWEtPmNhcHR1cmUpOworCWZyZWVfc3RyZWFtX3VyYnMoJnVhLT5wbGF5YmFjayk7CisJZnJlZV9zdHJlYW1fYnVmZmVycyh1YSwgJnVhLT5jYXB0dXJlKTsKKwlmcmVlX3N0cmVhbV9idWZmZXJzKHVhLCAmdWEtPnBsYXliYWNrKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHVhLT5pbnRmKTsgKytpKQorCQlpZiAodWEtPmludGZbaV0pIHsKKwkJCXVzYl9zZXRfaW50ZmRhdGEodWEtPmludGZbaV0sIE5VTEwpOworCQkJaWYgKHVhLT5pbnRmW2ldICE9IGludGVyZmFjZSkKKwkJCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKCZ1YTEwMV9kcml2ZXIsCisJCQkJCQkJICAgICB1YS0+aW50ZltpXSk7CisJCX0KK30KKworc3RhdGljIHZvaWQgdWExMDFfY2FyZF9mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJbXV0ZXhfZGVzdHJveSgmdWEtPm11dGV4KTsKK30KKworc3RhdGljIGludCB1YTEwMV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKnVzYl9pZCkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF91c2JfbWlkaV9lbmRwb2ludF9pbmZvIG1pZGlfZXAgPSB7CisJCS5vdXRfY2FibGVzID0gMHgwMDAxLAorCQkuaW5fY2FibGVzID0gMHgwMDAxCisJfTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmsgbWlkaV9xdWlyayA9IHsKKwkJLnR5cGUgPSBRVUlSS19NSURJX0ZJWEVEX0VORFBPSU5ULAorCQkuZGF0YSA9ICZtaWRpX2VwCisJfTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHVhMTAxICp1YTsKKwl1bnNpZ25lZCBpbnQgY2FyZF9pbmRleCwgaTsKKwljaGFyIHVzYl9wYXRoWzMyXTsKKwlpbnQgZXJyOworCisJaWYgKGludGVyZmFjZS0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyICE9IDApCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmZGV2aWNlc19tdXRleCk7CisKKwlmb3IgKGNhcmRfaW5kZXggPSAwOyBjYXJkX2luZGV4IDwgU05EUlZfQ0FSRFM7ICsrY2FyZF9pbmRleCkKKwkJaWYgKGVuYWJsZVtjYXJkX2luZGV4XSAmJiAhKGRldmljZXNfdXNlZCAmICgxIDw8IGNhcmRfaW5kZXgpKSkKKwkJCWJyZWFrOworCWlmIChjYXJkX2luZGV4ID49IFNORFJWX0NBUkRTKSB7CisJCW11dGV4X3VubG9jaygmZGV2aWNlc19tdXRleCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbY2FyZF9pbmRleF0sIGlkW2NhcmRfaW5kZXhdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZigqdWEpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXZpY2VzX211dGV4KTsKKwkJcmV0dXJuIGVycjsKKwl9CisJY2FyZC0+cHJpdmF0ZV9mcmVlID0gdWExMDFfY2FyZF9mcmVlOworCXVhID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCXVhLT5kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJdWEtPmNhcmQgPSBjYXJkOworCXVhLT5jYXJkX2luZGV4ID0gY2FyZF9pbmRleDsKKwlJTklUX0xJU1RfSEVBRCgmdWEtPm1pZGlfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJnVhLT5sb2NrKTsKKwltdXRleF9pbml0KCZ1YS0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZ1YS0+cmVhZHlfcGxheWJhY2tfdXJicyk7CisJdGFza2xldF9pbml0KCZ1YS0+cGxheWJhY2tfdGFza2xldCwKKwkJICAgICBwbGF5YmFja190YXNrbGV0LCAodW5zaWduZWQgbG9uZyl1YSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmdWEtPmFsc2FfY2FwdHVyZV93YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1YS0+cmF0ZV9mZWVkYmFja193YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1YS0+YWxzYV9wbGF5YmFja193YWl0KTsKKworI2lmZGVmIFVBMUFfSEFDSworCWlmICh1YS0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSBjcHVfdG9fbGUxNigweDAwMTgpKSB7CisJCXVhLT5pbnRmWzJdID0gaW50ZXJmYWNlOworCQl1YS0+aW50ZlswXSA9IHVzYl9pZm51bV90b19pZih1YS0+ZGV2LCAxKTsKKwkJdWEtPmludGZbMV0gPSB1c2JfaWZudW1fdG9faWYodWEtPmRldiwgMik7CisJCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZ1YTEwMV9kcml2ZXIsIHVhLT5pbnRmWzBdLCB1YSk7CisJCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZ1YTEwMV9kcml2ZXIsIHVhLT5pbnRmWzFdLCB1YSk7CisJfSBlbHNlIHsKKyNlbmRpZgorCXVhLT5pbnRmWzBdID0gaW50ZXJmYWNlOworCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKHVhLT5pbnRmKTsgKytpKSB7CisJCXVhLT5pbnRmW2ldID0gdXNiX2lmbnVtX3RvX2lmKHVhLT5kZXYsIGkpOworCQlpZiAoIXVhLT5pbnRmW2ldKSB7CisJCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsICJpbnRlcmZhY2UgJXUgbm90IGZvdW5kXG4iLCBpKTsKKwkJCWVyciA9IC1FTlhJTzsKKwkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCX0KKwkJZXJyID0gdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJnVhMTAxX2RyaXZlciwKKwkJCQkJCSB1YS0+aW50ZltpXSwgdWEpOworCQlpZiAoZXJyIDwgMCkgeworCQkJdWEtPmludGZbaV0gPSBOVUxMOworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCX0KKyNpZmRlZiBVQTFBX0hBQ0sKKwl9CisjZW5kaWYKKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmludGVyZmFjZS0+ZGV2KTsKKworI2lmZGVmIFVBMUFfSEFDSworCWlmICh1YS0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSBjcHVfdG9fbGUxNigweDAwMTgpKSB7CisJCXVhLT5mb3JtYXRfYml0ID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEU7CisJCXVhLT5yYXRlID0gNDQxMDA7CisJCXVhLT5wYWNrZXRzX3Blcl9zZWNvbmQgPSAxMDAwOworCQl1YS0+Y2FwdHVyZS5jaGFubmVscyA9IDI7CisJCXVhLT5wbGF5YmFjay5jaGFubmVscyA9IDI7CisJCXVhLT5jYXB0dXJlLmZyYW1lX2J5dGVzID0gNDsKKwkJdWEtPnBsYXliYWNrLmZyYW1lX2J5dGVzID0gNDsKKwkJdWEtPmNhcHR1cmUudXNiX3BpcGUgPSB1c2JfcmN2aXNvY3BpcGUodWEtPmRldiwgMik7CisJCXVhLT5wbGF5YmFjay51c2JfcGlwZSA9IHVzYl9zbmRpc29jcGlwZSh1YS0+ZGV2LCAxKTsKKwkJdWEtPmNhcHR1cmUubWF4X3BhY2tldF9ieXRlcyA9IDE5MjsKKwkJdWEtPnBsYXliYWNrLm1heF9wYWNrZXRfYnl0ZXMgPSAxOTI7CisJfSBlbHNlIHsKKyNlbmRpZgorCWVyciA9IGRldGVjdF91c2JfZm9ybWF0KHVhKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBwcm9iZV9lcnJvcjsKKyNpZmRlZiBVQTFBX0hBQ0sKKwl9CisjZW5kaWYKKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJVQS0xMDEiKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiVUEtMTAxIik7CisJdXNiX21ha2VfcGF0aCh1YS0+ZGV2LCB1c2JfcGF0aCwgc2l6ZW9mKHVzYl9wYXRoKSk7CisJc25wcmludGYodWEtPmNhcmQtPmxvbmduYW1lLCBzaXplb2YodWEtPmNhcmQtPmxvbmduYW1lKSwKKwkJICJFRElST0wgVUEtMTAxIChzZXJpYWwgJXMpLCAldSBIeiBhdCAlcywgJXMgc3BlZWQiLAorCQkgdWEtPmRldi0+c2VyaWFsID8gdWEtPmRldi0+c2VyaWFsIDogIj8iLCB1YS0+cmF0ZSwgdXNiX3BhdGgsCisJCSB1YS0+ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCA/ICJoaWdoIiA6ICJmdWxsIik7CisKKwllcnIgPSBhbGxvY19zdHJlYW1fYnVmZmVycyh1YSwgJnVhLT5jYXB0dXJlKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBwcm9iZV9lcnJvcjsKKwllcnIgPSBhbGxvY19zdHJlYW1fYnVmZmVycyh1YSwgJnVhLT5wbGF5YmFjayk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gcHJvYmVfZXJyb3I7CisKKwllcnIgPSBhbGxvY19zdHJlYW1fdXJicyh1YSwgJnVhLT5jYXB0dXJlLCBjYXB0dXJlX3VyYl9jb21wbGV0ZSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gcHJvYmVfZXJyb3I7CisJZXJyID0gYWxsb2Nfc3RyZWFtX3VyYnModWEsICZ1YS0+cGxheWJhY2ssIHBsYXliYWNrX3VyYl9jb21wbGV0ZSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gcHJvYmVfZXJyb3I7CisKKwllcnIgPSBzbmRfcGNtX25ldyhjYXJkLCAiVUEtMTAxIiwgMCwgMSwgMSwgJnVhLT5wY20pOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHByb2JlX2Vycm9yOworCXVhLT5wY20tPnByaXZhdGVfZGF0YSA9IHVhOworCXN0cmNweSh1YS0+cGNtLT5uYW1lLCAiVUEtMTAxIik7CisJc25kX3BjbV9zZXRfb3BzKHVhLT5wY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssICZwbGF5YmFja19wY21fb3BzKTsKKwlzbmRfcGNtX3NldF9vcHModWEtPnBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmY2FwdHVyZV9wY21fb3BzKTsKKworI2lmZGVmIFVBMUFfSEFDSworCWlmICh1YS0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCAhPSBjcHVfdG9fbGUxNigweDAwMTgpKSB7CisjZW5kaWYKKwllcnIgPSBzbmRfdXNibWlkaV9jcmVhdGUoY2FyZCwgdWEtPmludGZbSU5URl9NSURJXSwKKwkJCQkgJnVhLT5taWRpX2xpc3QsICZtaWRpX3F1aXJrKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBwcm9iZV9lcnJvcjsKKyNpZmRlZiBVQTFBX0hBQ0sKKwl9CisjZW5kaWYKKworCWVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHByb2JlX2Vycm9yOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHVhKTsKKwlkZXZpY2VzX3VzZWQgfD0gMSA8PCBjYXJkX2luZGV4OworCisJbXV0ZXhfdW5sb2NrKCZkZXZpY2VzX211dGV4KTsKKwlyZXR1cm4gMDsKKworcHJvYmVfZXJyb3I6CisJZnJlZV91c2JfcmVsYXRlZF9yZXNvdXJjZXModWEsIGludGVyZmFjZSk7CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwltdXRleF91bmxvY2soJmRldmljZXNfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHVhMTAxX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXN0cnVjdCBsaXN0X2hlYWQgKm1pZGk7CisKKwlpZiAoIXVhKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZkZXZpY2VzX211dGV4KTsKKworCXNldF9iaXQoRElTQ09OTkVDVEVELCAmdWEtPnN0YXRlcyk7CisJd2FrZV91cCgmdWEtPnJhdGVfZmVlZGJhY2tfd2FpdCk7CisKKwkvKiBtYWtlIHN1cmUgdGhhdCB1c2Vyc3BhY2UgY2Fubm90IGNyZWF0ZSBuZXcgcmVxdWVzdHMgKi8KKwlzbmRfY2FyZF9kaXNjb25uZWN0KHVhLT5jYXJkKTsKKworCS8qIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBwZW5kaW5nIFVTQiByZXF1ZXN0cyAqLworCV9fbGlzdF9mb3JfZWFjaChtaWRpLCAmdWEtPm1pZGlfbGlzdCkKKwkJc25kX3VzYm1pZGlfZGlzY29ubmVjdChtaWRpKTsKKwlhYm9ydF9hbHNhX3BsYXliYWNrKHVhKTsKKwlhYm9ydF9hbHNhX2NhcHR1cmUodWEpOworCW11dGV4X2xvY2soJnVhLT5tdXRleCk7CisJc3RvcF91c2JfcGxheWJhY2sodWEpOworCXN0b3BfdXNiX2NhcHR1cmUodWEpOworCW11dGV4X3VubG9jaygmdWEtPm11dGV4KTsKKworCWZyZWVfdXNiX3JlbGF0ZWRfcmVzb3VyY2VzKHVhLCBpbnRlcmZhY2UpOworCisJZGV2aWNlc191c2VkICY9IH4oMSA8PCB1YS0+Y2FyZF9pbmRleCk7CisKKwlzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKHVhLT5jYXJkKTsKKworCW11dGV4X3VubG9jaygmZGV2aWNlc19tdXRleCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1YTEwMV9pZHNbXSA9IHsKKyNpZmRlZiBVQTFBX0hBQ0sKKwl7IFVTQl9ERVZJQ0UoMHgwNTgyLCAweDAwMTgpIH0sCisjZW5kaWYKKwl7IFVTQl9ERVZJQ0UoMHgwNTgyLCAweDAwN2QpIH0sCisJeyBVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDhkKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1YTEwMV9pZHMpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdWExMDFfZHJpdmVyID0geworCS5uYW1lID0gInNuZC11YTEwMSIsCisJLmlkX3RhYmxlID0gdWExMDFfaWRzLAorCS5wcm9iZSA9IHVhMTAxX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gdWExMDFfZGlzY29ubmVjdCwKKyNpZiAwCisJLnN1c3BlbmQgPSB1YTEwMV9zdXNwZW5kLAorCS5yZXN1bWUgPSB1YTEwMV9yZXN1bWUsCisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF91YTEwMV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmdWExMDFfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF91YTEwMV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnVhMTAxX2RyaXZlcik7CisJbXV0ZXhfZGVzdHJveSgmZGV2aWNlc19tdXRleCk7Cit9CisKK21vZHVsZV9pbml0KGFsc2FfY2FyZF91YTEwMV9pbml0KTsKK21vZHVsZV9leGl0KGFsc2FfY2FyZF91YTEwMV9leGl0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5jIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKaW5kZXggOWVkZWY0Ni4uYzUzOWY3ZiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmMKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKQEAgLTQ0LDkgKzQ0LDExIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2F1ZGlvLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgorCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KQEAgLTE3MCwxMSArMTcyLDEyIEBACiAJdW5zaWduZWQgaW50IGN1cnBhY2tzaXplOwkvKiBjdXJyZW50IHBhY2tldCBzaXplIGluIGJ5dGVzIChmb3IgY2FwdHVyZSkgKi8KIAl1bnNpZ25lZCBpbnQgY3VyZnJhbWVzaXplOwkvKiBjdXJyZW50IHBhY2tldCBzaXplIGluIGZyYW1lcyAoZm9yIGNhcHR1cmUpICovCiAJdW5zaWduZWQgaW50IGZpbGxfbWF4OiAxOwkvKiBmaWxsIG1heCBwYWNrZXQgc2l6ZSBhbHdheXMgKi8KKwl1bnNpZ25lZCBpbnQgdHhmcl9xdWlyazoxOwkvKiBhbGxvdyBzdWItZnJhbWUgYWxpZ25tZW50ICovCiAJdW5zaWduZWQgaW50IGZtdF90eXBlOwkJLyogVVNCIGF1ZGlvIGZvcm1hdCB0eXBlICgxLTMpICovCiAKIAl1bnNpZ25lZCBpbnQgcnVubmluZzogMTsJLyogcnVubmluZyBzdGF0dXMgKi8KIAotCXVuc2lnbmVkIGludCBod3B0cl9kb25lOwkJCS8qIHByb2Nlc3NlZCBmcmFtZSBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyICovCisJdW5zaWduZWQgaW50IGh3cHRyX2RvbmU7CS8qIHByb2Nlc3NlZCBieXRlIHBvc2l0aW9uIGluIHRoZSBidWZmZXIgKi8KIAl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfZG9uZTsJCS8qIHByb2Nlc3NlZCBmcmFtZXMgc2luY2UgbGFzdCBwZXJpb2QgdXBkYXRlICovCiAJdW5zaWduZWQgbG9uZyBhY3RpdmVfbWFzazsJLyogYml0bWFzayBvZiBhY3RpdmUgdXJicyAqLwogCXVuc2lnbmVkIGxvbmcgdW5saW5rX21hc2s7CS8qIGJpdG1hc2sgb2YgdW5saW5rZWQgdXJicyAqLwpAQCAtMzQzLDcgKzM0Niw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyICpjcDsKIAlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgc3RyaWRlLCBsZW4sIG9sZHB0cjsKKwl1bnNpZ25lZCBpbnQgc3RyaWRlLCBmcmFtZXMsIGJ5dGVzLCBvbGRwdHI7CiAJaW50IHBlcmlvZF9lbGFwc2VkID0gMDsKIAogCXN0cmlkZSA9IHJ1bnRpbWUtPmZyYW1lX2JpdHMgPj4gMzsKQEAgLTM1NCwyOSArMzU3LDM5IEBACiAJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJmcmFtZSAlZCBhY3RpdmU6ICVkXG4iLCBpLCB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyk7CiAJCQkvLyBjb250aW51ZTsKIAkJfQotCQlsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggLyBzdHJpZGU7Ci0JCWlmICghIGxlbikKLQkJCWNvbnRpbnVlOworCQlieXRlcyA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJZnJhbWVzID0gYnl0ZXMgLyBzdHJpZGU7CisJCWlmICghc3Vicy0+dHhmcl9xdWlyaykKKwkJCWJ5dGVzID0gZnJhbWVzICogc3RyaWRlOworCQlpZiAoYnl0ZXMgJSAocnVudGltZS0+c2FtcGxlX2JpdHMgPj4gMykgIT0gMCkgeworI2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQorCQkJaW50IG9sZGJ5dGVzID0gYnl0ZXM7CisjZW5kaWYKKwkJCWJ5dGVzID0gZnJhbWVzICogc3RyaWRlOworCQkJc25kX3ByaW50ZGQoS0VSTl9FUlIgIkNvcnJlY3RlZCB1cmIgZGF0YSBsZW4uICVkLT4lZFxuIiwKKwkJCQkJCQlvbGRieXRlcywgYnl0ZXMpOworCQl9CiAJCS8qIHVwZGF0ZSB0aGUgY3VycmVudCBwb2ludGVyICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzdWJzLT5sb2NrLCBmbGFncyk7CiAJCW9sZHB0ciA9IHN1YnMtPmh3cHRyX2RvbmU7Ci0JCXN1YnMtPmh3cHRyX2RvbmUgKz0gbGVuOwotCQlpZiAoc3Vicy0+aHdwdHJfZG9uZSA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJCXN1YnMtPmh3cHRyX2RvbmUgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JCXN1YnMtPnRyYW5zZmVyX2RvbmUgKz0gbGVuOworCQlzdWJzLT5od3B0cl9kb25lICs9IGJ5dGVzOworCQlpZiAoc3Vicy0+aHdwdHJfZG9uZSA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSAqIHN0cmlkZSkKKwkJCXN1YnMtPmh3cHRyX2RvbmUgLT0gcnVudGltZS0+YnVmZmVyX3NpemUgKiBzdHJpZGU7CisJCWZyYW1lcyA9IChieXRlcyArIChvbGRwdHIgJSBzdHJpZGUpKSAvIHN0cmlkZTsKKwkJc3Vicy0+dHJhbnNmZXJfZG9uZSArPSBmcmFtZXM7CiAJCWlmIChzdWJzLT50cmFuc2Zlcl9kb25lID49IHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7CiAJCQlzdWJzLT50cmFuc2Zlcl9kb25lIC09IHJ1bnRpbWUtPnBlcmlvZF9zaXplOwogCQkJcGVyaW9kX2VsYXBzZWQgPSAxOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnMtPmxvY2ssIGZsYWdzKTsKIAkJLyogY29weSBhIGRhdGEgY2h1bmsgKi8KLQkJaWYgKG9sZHB0ciArIGxlbiA+IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7Ci0JCQl1bnNpZ25lZCBpbnQgY250ID0gcnVudGltZS0+YnVmZmVyX3NpemUgLSBvbGRwdHI7Ci0JCQl1bnNpZ25lZCBpbnQgYmxlbiA9IGNudCAqIHN0cmlkZTsKLQkJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIG9sZHB0ciAqIHN0cmlkZSwgY3AsIGJsZW4pOwotCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhLCBjcCArIGJsZW4sIGxlbiAqIHN0cmlkZSAtIGJsZW4pOworCQlpZiAob2xkcHRyICsgYnl0ZXMgPiBydW50aW1lLT5idWZmZXJfc2l6ZSAqIHN0cmlkZSkgeworCQkJdW5zaWduZWQgaW50IGJ5dGVzMSA9CisJCQkJCXJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc3RyaWRlIC0gb2xkcHRyOworCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgb2xkcHRyLCBjcCwgYnl0ZXMxKTsKKwkJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSwgY3AgKyBieXRlczEsIGJ5dGVzIC0gYnl0ZXMxKTsKIAkJfSBlbHNlIHsKLQkJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIG9sZHB0ciAqIHN0cmlkZSwgY3AsIGxlbiAqIHN0cmlkZSk7CisJCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBvbGRwdHIsIGNwLCBieXRlcyk7CiAJCX0KIAl9CiAJaWYgKHBlcmlvZF9lbGFwc2VkKQpAQCAtNTYzLDM0ICs1NzYsMzQgQEAKIAkJCQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lLAogCQkJCXN0cnVjdCB1cmIgKnVyYikKIHsKLQlpbnQgaSwgc3RyaWRlLCBvZmZzOwotCXVuc2lnbmVkIGludCBjb3VudHM7CisJaW50IGksIHN0cmlkZTsKKwl1bnNpZ25lZCBpbnQgY291bnRzLCBmcmFtZXMsIGJ5dGVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHBlcmlvZF9lbGFwc2VkID0gMDsKIAlzdHJ1Y3Qgc25kX3VyYl9jdHggKmN0eCA9IHVyYi0+Y29udGV4dDsKIAogCXN0cmlkZSA9IHJ1bnRpbWUtPmZyYW1lX2JpdHMgPj4gMzsKIAotCW9mZnMgPSAwOworCWZyYW1lcyA9IDA7CiAJdXJiLT5kZXYgPSBjdHgtPnN1YnMtPmRldjsgLyogd2UgbmVlZCB0byBzZXQgdGhpcyBhdCBlYWNoIHRpbWUgKi8KIAl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gMDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3Vicy0+bG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBjdHgtPnBhY2tldHM7IGkrKykgewogCQljb3VudHMgPSBzbmRfdXNiX2F1ZGlvX25leHRfcGFja2V0X3NpemUoc3Vicyk7CiAJCS8qIHNldCB1cCBkZXNjcmlwdG9yICovCi0JCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ID0gb2ZmcyAqIHN0cmlkZTsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBmcmFtZXMgKiBzdHJpZGU7CiAJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gY291bnRzICogc3RyaWRlOwotCQlvZmZzICs9IGNvdW50czsKKwkJZnJhbWVzICs9IGNvdW50czsKIAkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cysrOwogCQlzdWJzLT50cmFuc2Zlcl9kb25lICs9IGNvdW50czsKIAkJaWYgKHN1YnMtPnRyYW5zZmVyX2RvbmUgPj0gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKIAkJCXN1YnMtPnRyYW5zZmVyX2RvbmUgLT0gcnVudGltZS0+cGVyaW9kX3NpemU7CiAJCQlwZXJpb2RfZWxhcHNlZCA9IDE7Ci0JCQlpZiAoc3Vicy0+Zm10X3R5cGUgPT0gVVNCX0ZPUk1BVF9UWVBFX0lJKSB7CisJCQlpZiAoc3Vicy0+Zm10X3R5cGUgPT0gVUFDX0ZPUk1BVF9UWVBFX0lJKSB7CiAJCQkJaWYgKHN1YnMtPnRyYW5zZmVyX2RvbmUgPiAwKSB7CiAJCQkJCS8qIEZJWE1FOiBmaWxsLW1heCBtb2RlIGlzIG5vdAogCQkJCQkgKiBzdXBwb3J0ZWQgeWV0ICovCi0JCQkJCW9mZnMgLT0gc3Vicy0+dHJhbnNmZXJfZG9uZTsKKwkJCQkJZnJhbWVzIC09IHN1YnMtPnRyYW5zZmVyX2RvbmU7CiAJCQkJCWNvdW50cyAtPSBzdWJzLT50cmFuc2Zlcl9kb25lOwogCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9CiAJCQkJCQljb3VudHMgKiBzdHJpZGU7CkBAIC02MDAsNyArNjEzLDcgQEAKIAkJCQlpZiAoaSA8IGN0eC0+cGFja2V0cykgewogCQkJCQkvKiBhZGQgYSB0cmFuc2ZlciBkZWxpbWl0ZXIgKi8KIAkJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPQotCQkJCQkJb2ZmcyAqIHN0cmlkZTsKKwkJCQkJCWZyYW1lcyAqIHN0cmlkZTsKIAkJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSAwOwogCQkJCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzKys7CiAJCQkJfQpAQCAtNjEwLDI2ICs2MjMsMjUgQEAKIAkJaWYgKHBlcmlvZF9lbGFwc2VkKSAvKiBmaW5pc2ggYXQgdGhlIHBlcmlvZCBib3VuZGFyeSAqLwogCQkJYnJlYWs7CiAJfQotCWlmIChzdWJzLT5od3B0cl9kb25lICsgb2ZmcyA+IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7CisJYnl0ZXMgPSBmcmFtZXMgKiBzdHJpZGU7CisJaWYgKHN1YnMtPmh3cHRyX2RvbmUgKyBieXRlcyA+IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc3RyaWRlKSB7CiAJCS8qIGVyciwgdGhlIHRyYW5zZmVycmVkIGFyZWEgZ29lcyBvdmVyIGJ1ZmZlciBib3VuZGFyeS4gKi8KLQkJdW5zaWduZWQgaW50IGxlbiA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gc3Vicy0+aHdwdHJfZG9uZTsKKwkJdW5zaWduZWQgaW50IGJ5dGVzMSA9CisJCQlydW50aW1lLT5idWZmZXJfc2l6ZSAqIHN0cmlkZSAtIHN1YnMtPmh3cHRyX2RvbmU7CiAJCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhICsgc3Vicy0+aHdwdHJfZG9uZSAqIHN0cmlkZSwKLQkJICAgICAgIGxlbiAqIHN0cmlkZSk7Ci0JCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciArIGxlbiAqIHN0cmlkZSwKLQkJICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhLAotCQkgICAgICAgKG9mZnMgLSBsZW4pICogc3RyaWRlKTsKKwkJICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhICsgc3Vicy0+aHdwdHJfZG9uZSwgYnl0ZXMxKTsKKwkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgYnl0ZXMxLAorCQkgICAgICAgcnVudGltZS0+ZG1hX2FyZWEsIGJ5dGVzIC0gYnl0ZXMxKTsKIAl9IGVsc2UgewogCQltZW1jcHkodXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCSAgICAgICBydW50aW1lLT5kbWFfYXJlYSArIHN1YnMtPmh3cHRyX2RvbmUgKiBzdHJpZGUsCi0JCSAgICAgICBvZmZzICogc3RyaWRlKTsKKwkJICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhICsgc3Vicy0+aHdwdHJfZG9uZSwgYnl0ZXMpOwogCX0KLQlzdWJzLT5od3B0cl9kb25lICs9IG9mZnM7Ci0JaWYgKHN1YnMtPmh3cHRyX2RvbmUgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCi0JCXN1YnMtPmh3cHRyX2RvbmUgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JcnVudGltZS0+ZGVsYXkgKz0gb2ZmczsKKwlzdWJzLT5od3B0cl9kb25lICs9IGJ5dGVzOworCWlmIChzdWJzLT5od3B0cl9kb25lID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc3RyaWRlKQorCQlzdWJzLT5od3B0cl9kb25lIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc3RyaWRlOworCXJ1bnRpbWUtPmRlbGF5ICs9IGZyYW1lczsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJzLT5sb2NrLCBmbGFncyk7Ci0JdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gb2ZmcyAqIHN0cmlkZTsKKwl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBieXRlczsKIAlpZiAocGVyaW9kX2VsYXBzZWQpCiAJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vicy0+cGNtX3N1YnN0cmVhbSk7CiAJcmV0dXJuIDA7CkBAIC03MzUsNDEgKzc0Nyw2IEBACiB9CiAKIAotLyogZ2V0IHRoZSBwaHlzaWNhbCBwYWdlIHBvaW50ZXIgYXQgdGhlIGdpdmVuIG9mZnNldCAqLwotc3RhdGljIHN0cnVjdCBwYWdlICpzbmRfcGNtX2dldF92bWFsbG9jX3BhZ2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCXZvaWQgKnBhZ2VwdHIgPSBzdWJzLT5ydW50aW1lLT5kbWFfYXJlYSArIG9mZnNldDsKLQlyZXR1cm4gdm1hbGxvY190b19wYWdlKHBhZ2VwdHIpOwotfQotCi0vKiBhbGxvY2F0ZSB2aXJ0dWFsIGJ1ZmZlcjsgbWF5IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSAqLwotc3RhdGljIGludCBzbmRfcGNtX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vicywgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7Ci0JaWYgKHJ1bnRpbWUtPmRtYV9hcmVhKSB7Ci0JCWlmIChydW50aW1lLT5kbWFfYnl0ZXMgPj0gc2l6ZSkKLQkJCXJldHVybiAwOyAvKiBhbHJlYWR5IGxhcmdlIGVub3VnaCAqLwotCQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7Ci0JfQotCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvY191c2VyKHNpemUpOwotCWlmICghcnVudGltZS0+ZG1hX2FyZWEpCi0JCXJldHVybiAtRU5PTUVNOwotCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IHNpemU7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIGZyZWUgdmlydHVhbCBidWZmZXI7IG1heSBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgKi8KLXN0YXRpYyBpbnQgc25kX3BjbV9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicykKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vicy0+cnVudGltZTsKLQotCXZmcmVlKHJ1bnRpbWUtPmRtYV9hcmVhKTsKLQlydW50aW1lLT5kbWFfYXJlYSA9IE5VTEw7Ci0JcmV0dXJuIDA7Ci19Ci0KLQogLyoKICAqIHVubGluayBhY3RpdmUgdXJicy4KICAqLwpAQCAtOTM3LDE4ICs5MTQsMTggQEAKIAogCiAvKgotICogcmV0dXJuIHRoZSBjdXJyZW50IHBjbSBwb2ludGVyLiAganVzdCByZXR1cm4gdGhlIGh3cHRyX2RvbmUgdmFsdWUuCisgKiByZXR1cm4gdGhlIGN1cnJlbnQgcGNtIHBvaW50ZXIuICBqdXN0IGJhc2VkIG9uIHRoZSBod3B0cl9kb25lIHZhbHVlLgogICovCiBzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc25kX3VzYl9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3VzYl9zdWJzdHJlYW0gKnN1YnM7Ci0Jc25kX3BjbV91ZnJhbWVzX3QgaHdwdHJfZG9uZTsKKwl1bnNpZ25lZCBpbnQgaHdwdHJfZG9uZTsKIAkKIAlzdWJzID0gKHN0cnVjdCBzbmRfdXNiX3N1YnN0cmVhbSAqKXN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCXNwaW5fbG9jaygmc3Vicy0+bG9jayk7CiAJaHdwdHJfZG9uZSA9IHN1YnMtPmh3cHRyX2RvbmU7CiAJc3Bpbl91bmxvY2soJnN1YnMtPmxvY2spOwotCXJldHVybiBod3B0cl9kb25lOworCXJldHVybiBod3B0cl9kb25lIC8gKHN1YnN0cmVhbS0+cnVudGltZS0+ZnJhbWVfYml0cyA+PiAzKTsKIH0KIAogCkBAIC0xMTMwLDcgKzExMDcsNyBAQAogCQl1LT5wYWNrZXRzID0gKGkgKyAxKSAqIHRvdGFsX3BhY2tzIC8gc3Vicy0+bnVyYnMKIAkJCS0gaSAqIHRvdGFsX3BhY2tzIC8gc3Vicy0+bnVyYnM7CiAJCXUtPmJ1ZmZlcl9zaXplID0gbWF4c2l6ZSAqIHUtPnBhY2tldHM7Ci0JCWlmIChzdWJzLT5mbXRfdHlwZSA9PSBVU0JfRk9STUFUX1RZUEVfSUkpCisJCWlmIChzdWJzLT5mbXRfdHlwZSA9PSBVQUNfRk9STUFUX1RZUEVfSUkpCiAJCQl1LT5wYWNrZXRzKys7IC8qIGZvciB0cmFuc2ZlciBkZWxpbWl0ZXIgKi8KIAkJdS0+dXJiID0gdXNiX2FsbG9jX3VyYih1LT5wYWNrZXRzLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF1LT51cmIpCkBAIC0xMjA2LDcgKzExODMsNyBAQAogCQkJaWYgKGkgPj0gZnAtPm5yX3JhdGVzKQogCQkJCWNvbnRpbnVlOwogCQl9Ci0JCWF0dHIgPSBmcC0+ZXBfYXR0ciAmIEVQX0FUVFJfTUFTSzsKKwkJYXR0ciA9IGZwLT5lcF9hdHRyICYgVVNCX0VORFBPSU5UX1NZTkNUWVBFOwogCQlpZiAoISBmb3VuZCkgewogCQkJZm91bmQgPSBmcDsKIAkJCWN1cl9hdHRyID0gYXR0cjsKQEAgLTEyMTgsMTQgKzExOTUsMTQgQEAKIAkJICogTS1hdWRpbyBhdWRpb3BoaWxlIFVTQi4KIAkJICovCiAJCWlmIChhdHRyICE9IGN1cl9hdHRyKSB7Ci0JCQlpZiAoKGF0dHIgPT0gRVBfQVRUUl9BU1lOQyAmJgorCQkJaWYgKChhdHRyID09IFVTQl9FTkRQT0lOVF9TWU5DX0FTWU5DICYmCiAJCQkgICAgIHN1YnMtPmRpcmVjdGlvbiA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB8fAotCQkJICAgIChhdHRyID09IEVQX0FUVFJfQURBUFRJVkUgJiYKKwkJCSAgICAoYXR0ciA9PSBVU0JfRU5EUE9JTlRfU1lOQ19BREFQVElWRSAmJgogCQkJICAgICBzdWJzLT5kaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKSkKIAkJCQljb250aW51ZTsKLQkJCWlmICgoY3VyX2F0dHIgPT0gRVBfQVRUUl9BU1lOQyAmJgorCQkJaWYgKChjdXJfYXR0ciA9PSBVU0JfRU5EUE9JTlRfU1lOQ19BU1lOQyAmJgogCQkJICAgICBzdWJzLT5kaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgfHwKLQkJCSAgICAoY3VyX2F0dHIgPT0gRVBfQVRUUl9BREFQVElWRSAmJgorCQkJICAgIChjdXJfYXR0ciA9PSBVU0JfRU5EUE9JTlRfU1lOQ19BREFQVElWRSAmJgogCQkJICAgICBzdWJzLT5kaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKSkgewogCQkJCWZvdW5kID0gZnA7CiAJCQkJY3VyX2F0dHIgPSBhdHRyOwpAQCAtMTI1NSwxMSArMTIzMiwxMSBAQAogCiAJZXAgPSBnZXRfZW5kcG9pbnQoYWx0cywgMCktPmJFbmRwb2ludEFkZHJlc3M7CiAJLyogaWYgZW5kcG9pbnQgaGFzIHBpdGNoIGNvbnRyb2wsIGVuYWJsZSBpdCAqLwotCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiBFUF9DU19BVFRSX1BJVENIX0NPTlRST0wpIHsKKwlpZiAoZm10LT5hdHRyaWJ1dGVzICYgVUFDX0VQX0NTX0FUVFJfUElUQ0hfQ09OVFJPTCkgewogCQlkYXRhWzBdID0gMTsKLQkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwKKwkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgVUFDX1NFVF9DVVIsCiAJCQkJCSAgIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX09VVCwKLQkJCQkJICAgUElUQ0hfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMSwgMTAwMCkpIDwgMCkgeworCQkJCQkgICBVQUNfRVBfQ1NfQVRUUl9QSVRDSF9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAxLCAxMDAwKSkgPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDolZDolZDogY2Fubm90IHNldCBlbmFibGUgUElUQ0hcbiIsCiAJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlLCBlcCk7CiAJCQlyZXR1cm4gZXJyOwpAQCAtMTI3OCwyMSArMTI1NSwyMSBAQAogCiAJZXAgPSBnZXRfZW5kcG9pbnQoYWx0cywgMCktPmJFbmRwb2ludEFkZHJlc3M7CiAJLyogaWYgZW5kcG9pbnQgaGFzIHNhbXBsaW5nIHJhdGUgY29udHJvbCwgc2V0IGl0ICovCi0JaWYgKGZtdC0+YXR0cmlidXRlcyAmIEVQX0NTX0FUVFJfU0FNUExFX1JBVEUpIHsKKwlpZiAoZm10LT5hdHRyaWJ1dGVzICYgVUFDX0VQX0NTX0FUVFJfU0FNUExFX1JBVEUpIHsKIAkJaW50IGNyYXRlOwogCQlkYXRhWzBdID0gcmF0ZTsKIAkJZGF0YVsxXSA9IHJhdGUgPj4gODsKIAkJZGF0YVsyXSA9IHJhdGUgPj4gMTY7Ci0JCWlmICgoZXJyID0gc25kX3VzYl9jdGxfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsCisJCWlmICgoZXJyID0gc25kX3VzYl9jdGxfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFVBQ19TRVRfQ1VSLAogCQkJCQkgICBVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfRU5EUE9JTlR8VVNCX0RJUl9PVVQsCi0JCQkJCSAgIFNBTVBMSU5HX0ZSRVFfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMywgMTAwMCkpIDwgMCkgeworCQkJCQkgICBVQUNfRVBfQ1NfQVRUUl9TQU1QTEVfUkFURSA8PCA4LCBlcCwgZGF0YSwgMywgMTAwMCkpIDwgMCkgewogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JWQ6JWQ6IGNhbm5vdCBzZXQgZnJlcSAlZCB0byBlcCAlI3hcbiIsCiAJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlLCBmbXQtPmFsdHNldHRpbmcsIHJhdGUsIGVwKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KLQkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX0NVUiwKKwkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgVUFDX0dFVF9DVVIsCiAJCQkJCSAgIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX0lOLAotCQkJCQkgICBTQU1QTElOR19GUkVRX0NPTlRST0wgPDwgOCwgZXAsIGRhdGEsIDMsIDEwMDApKSA8IDApIHsKKwkJCQkJICAgVUFDX0VQX0NTX0FUVFJfU0FNUExFX1JBVEUgPDwgOCwgZXAsIGRhdGEsIDMsIDEwMDApKSA8IDApIHsKIAkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICIlZDolZDolZDogY2Fubm90IGdldCBmcmVxIGF0IGVwICUjeFxuIiwKIAkJCQkgICBkZXYtPmRldm51bSwgaWZhY2UsIGZtdC0+YWx0c2V0dGluZywgZXApOwogCQkJcmV0dXJuIDA7IC8qIHNvbWUgZGV2aWNlcyBkb24ndCBzdXBwb3J0IHJlYWRpbmcgKi8KQEAgLTEzMDcsNiArMTI4NCw0NyBAQAogfQogCiAvKgorICogRm9yIEUtTXUgMDQwNFVTQi8wMjAyVVNCL1RyYWNrZXJQcmUgc2FtcGxlIHJhdGUgc2hvdWxkIGJlIHNldCBmb3IgZGV2aWNlLAorICogbm90IGZvciBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyB2b2lkIHNldF9mb3JtYXRfZW11X3F1aXJrKHN0cnVjdCBzbmRfdXNiX3N1YnN0cmVhbSAqc3VicywKKwkJCQkgc3RydWN0IGF1ZGlvZm9ybWF0ICpmbXQpCit7CisJdW5zaWduZWQgY2hhciBlbXVfc2FtcGxlcmF0ZV9pZCA9IDA7CisKKwkvKiBXaGVuIGNhcHR1cmUgaXMgYWN0aXZlCisJICogc2FtcGxlIHJhdGUgc2hvdWxkbid0IGJlIGNoYW5nZWQKKwkgKiBieSBwbGF5YmFjayBzdWJzdHJlYW0KKwkgKi8KKwlpZiAoc3Vicy0+ZGlyZWN0aW9uID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJaWYgKHN1YnMtPnN0cmVhbS0+c3Vic3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uaW50ZXJmYWNlICE9IC0xKQorCQkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoZm10LT5yYXRlX21pbikgeworCWNhc2UgNDgwMDA6CisJCWVtdV9zYW1wbGVyYXRlX2lkID0gRU1VX1FVSVJLX1NSXzQ4MDAwSFo7CisJCWJyZWFrOworCWNhc2UgODgyMDA6CisJCWVtdV9zYW1wbGVyYXRlX2lkID0gRU1VX1FVSVJLX1NSXzg4MjAwSFo7CisJCWJyZWFrOworCWNhc2UgOTYwMDA6CisJCWVtdV9zYW1wbGVyYXRlX2lkID0gRU1VX1FVSVJLX1NSXzk2MDAwSFo7CisJCWJyZWFrOworCWNhc2UgMTc2NDAwOgorCQllbXVfc2FtcGxlcmF0ZV9pZCA9IEVNVV9RVUlSS19TUl8xNzY0MDBIWjsKKwkJYnJlYWs7CisJY2FzZSAxOTIwMDA6CisJCWVtdV9zYW1wbGVyYXRlX2lkID0gRU1VX1FVSVJLX1NSXzE5MjAwMEhaOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllbXVfc2FtcGxlcmF0ZV9pZCA9IEVNVV9RVUlSS19TUl80NDEwMEhaOworCQlicmVhazsKKwl9CisJc25kX2VtdXVzYl9zZXRfc2FtcGxlcmF0ZShzdWJzLT5zdHJlYW0tPmNoaXAsIGVtdV9zYW1wbGVyYXRlX2lkKTsKK30KKworLyoKICAqIGZpbmQgYSBtYXRjaGluZyBmb3JtYXQgYW5kIHNldCB1cCB0aGUgaW50ZXJmYWNlCiAgKi8KIHN0YXRpYyBpbnQgc2V0X2Zvcm1hdChzdHJ1Y3Qgc25kX3VzYl9zdWJzdHJlYW0gKnN1YnMsIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZm10KQpAQCAtMTM2OSw5ICsxMzg3LDkgQEAKIAkgKiBkZXNjcmlwdG9ycyB3aGljaCBmb29sIHVzLiAgaWYgaXQgaGFzIG9ubHkgb25lIEVQLAogCSAqIGFzc3VtZSBpdCBhcyBhZGFwdGl2ZS1vdXQgb3Igc3luYy1pbi4KIAkgKi8KLQlhdHRyID0gZm10LT5lcF9hdHRyICYgRVBfQVRUUl9NQVNLOwotCWlmICgoKGlzX3BsYXliYWNrICYmIGF0dHIgPT0gRVBfQVRUUl9BU1lOQykgfHwKLQkgICAgICghIGlzX3BsYXliYWNrICYmIGF0dHIgPT0gRVBfQVRUUl9BREFQVElWRSkpICYmCisJYXR0ciA9IGZtdC0+ZXBfYXR0ciAmIFVTQl9FTkRQT0lOVF9TWU5DVFlQRTsKKwlpZiAoKChpc19wbGF5YmFjayAmJiBhdHRyID09IFVTQl9FTkRQT0lOVF9TWU5DX0FTWU5DKSB8fAorCSAgICAgKCEgaXNfcGxheWJhY2sgJiYgYXR0ciA9PSBVU0JfRU5EUE9JTlRfU1lOQ19BREFQVElWRSkpICYmCiAJICAgIGFsdHNkLT5iTnVtRW5kcG9pbnRzID49IDIpIHsKIAkJLyogY2hlY2sgc3luYy1waXBlIGVuZHBvaW50ICovCiAJCS8qIC4uLiBhbmQgY2hlY2sgZGVzY3JpcHRvciBzaXplIGJlZm9yZSBhY2Nlc3NpbmcgYlN5bmNoQWRkcmVzcwpAQCAtMTQxMSw3ICsxNDI5LDcgQEAKIAl9CiAKIAkvKiBhbHdheXMgZmlsbCBtYXggcGFja2V0IHNpemUgKi8KLQlpZiAoZm10LT5hdHRyaWJ1dGVzICYgRVBfQ1NfQVRUUl9GSUxMX01BWCkKKwlpZiAoZm10LT5hdHRyaWJ1dGVzICYgVUFDX0VQX0NTX0FUVFJfRklMTF9NQVgpCiAJCXN1YnMtPmZpbGxfbWF4ID0gMTsKIAogCWlmICgoZXJyID0gaW5pdF91c2JfcGl0Y2goZGV2LCBzdWJzLT5pbnRlcmZhY2UsIGFsdHMsIGZtdCkpIDwgMCkKQEAgLTE0MTksNiArMTQzNywxNCBAQAogCiAJc3Vicy0+Y3VyX2F1ZGlvZm10ID0gZm10OwogCisJc3dpdGNoIChzdWJzLT5zdHJlYW0tPmNoaXAtPnVzYl9pZCkgeworCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzZjAyKTogLyogRS1NdSAwMjAyIFVTQiAqLworCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzZjA0KTogLyogRS1NdSAwNDA0IFVTQiAqLworCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzZjBhKTogLyogRS1NdSBUcmFja2VyIFByZSAqLworCQlzZXRfZm9ybWF0X2VtdV9xdWlyayhzdWJzLCBmbXQpOworCQlicmVhazsKKwl9CisKICNpZiAwCiAJcHJpbnRrKEtFUk5fREVCVUcKIAkgICAgICAgInNldHRpbmcgZG9uZTogZm9ybWF0ID0gJWQsIHJhdGUgPSAlZC4uJWQsIGNoYW5uZWxzID0gJWRcbiIsCkBAIC0xNDQ5LDggKzE0NzUsOCBAQAogCXVuc2lnbmVkIGludCBjaGFubmVscywgcmF0ZSwgZm9ybWF0OwogCWludCByZXQsIGNoYW5nZWQ7CiAKLQlyZXQgPSBzbmRfcGNtX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSwKLQkJCQkJICAgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlyZXQgPSBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0sCisJCQkJCSAgICAgICBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xNTA3LDcgKzE1MzMsNyBAQAogCXN1YnMtPnBlcmlvZF9ieXRlcyA9IDA7CiAJaWYgKCFzdWJzLT5zdHJlYW0tPmNoaXAtPnNodXRkb3duKQogCQlyZWxlYXNlX3N1YnN0cmVhbV91cmJzKHN1YnMsIDApOwotCXJldHVybiBzbmRfcGNtX2ZyZWVfdm1hbGxvY19idWZmZXIoc3Vic3RyZWFtKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV92bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0pOwogfQogCiAvKgpAQCAtMTg2MSw3ICsxODg3LDcgQEAKIAkJCXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21pbiA9IGZwLT5jaGFubmVsczsKIAkJaWYgKHJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA8IGZwLT5jaGFubmVscykKIAkJCXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA9IGZwLT5jaGFubmVsczsKLQkJaWYgKGZwLT5mbXRfdHlwZSA9PSBVU0JfRk9STUFUX1RZUEVfSUkgJiYgZnAtPmZyYW1lX3NpemUgPiAwKSB7CisJCWlmIChmcC0+Zm10X3R5cGUgPT0gVUFDX0ZPUk1BVF9UWVBFX0lJICYmIGZwLT5mcmFtZV9zaXplID4gMCkgewogCQkJLyogRklYTUU6IHRoZXJlIG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmUgYXVkaW8gZm9ybWF0cy4uLiAqLwogCQkJcnVudGltZS0+aHcucGVyaW9kX2J5dGVzX21pbiA9IHJ1bnRpbWUtPmh3LnBlcmlvZF9ieXRlc19tYXggPQogCQkJCWZwLT5mcmFtZV9zaXplOwpAQCAtMTk3Myw3ICsxOTk5LDggQEAKIAkucHJlcGFyZSA9CXNuZF91c2JfcGNtX3ByZXBhcmUsCiAJLnRyaWdnZXIgPQlzbmRfdXNiX3BjbV9wbGF5YmFja190cmlnZ2VyLAogCS5wb2ludGVyID0Jc25kX3VzYl9wY21fcG9pbnRlciwKLQkucGFnZSA9CQlzbmRfcGNtX2dldF92bWFsbG9jX3BhZ2UsCisJLnBhZ2UgPQkJc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9CQlzbmRfcGNtX2xpYl9tbWFwX3ZtYWxsb2MsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF91c2JfY2FwdHVyZV9vcHMgPSB7CkBAIC0xOTg1LDcgKzIwMTIsOCBAQAogCS5wcmVwYXJlID0Jc25kX3VzYl9wY21fcHJlcGFyZSwKIAkudHJpZ2dlciA9CXNuZF91c2JfcGNtX2NhcHR1cmVfdHJpZ2dlciwKIAkucG9pbnRlciA9CXNuZF91c2JfcGNtX3BvaW50ZXIsCi0JLnBhZ2UgPQkJc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlLAorCS5wYWdlID0JCXNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPQkJc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogCkBAIC0yMDkzLDcgKzIxMjEsNyBAQAogI2luY2x1ZGUgInVzYnF1aXJrcy5oIgogICAgIHsgLm1hdGNoX2ZsYWdzID0gKFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MpLAogICAgICAgLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKLSAgICAgIC5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9fQ09OVFJPTCB9LAorICAgICAgLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wgfSwKICAgICB7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApAQCAtMjEzMiw3ICsyMTYwLDcgQEAKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIEVuZHBvaW50OiAlZCAlcyAoJXMpXG4iLAogCQkJICAgIGZwLT5lbmRwb2ludCAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSywKIAkJCSAgICBmcC0+ZW5kcG9pbnQgJiBVU0JfRElSX0lOID8gIklOIiA6ICJPVVQiLAotCQkJICAgIHN5bmNfdHlwZXNbKGZwLT5lcF9hdHRyICYgRVBfQVRUUl9NQVNLKSA+PiAyXSk7CisJCQkgICAgc3luY190eXBlc1soZnAtPmVwX2F0dHIgJiBVU0JfRU5EUE9JTlRfU1lOQ1RZUEUpID4+IDJdKTsKIAkJaWYgKGZwLT5yYXRlcyAmIFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMpIHsKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBSYXRlczogJWQgLSAlZCAoY29udGludW91cylcbiIsCiAJCQkJICAgIGZwLT5yYXRlX21pbiwgZnAtPnJhdGVfbWF4KTsKQEAgLTIyMjcsNiArMjI1NSw3IEBACiAJc3Vicy0+c3RyZWFtID0gYXM7CiAJc3Vicy0+ZGlyZWN0aW9uID0gc3RyZWFtOwogCXN1YnMtPmRldiA9IGFzLT5jaGlwLT5kZXY7CisJc3Vicy0+dHhmcl9xdWlyayA9IGFzLT5jaGlwLT50eGZyX3F1aXJrOwogCWlmIChzbmRfdXNiX2dldF9zcGVlZChzdWJzLT5kZXYpID09IFVTQl9TUEVFRF9GVUxMKSB7CiAJCXN1YnMtPm9wcyA9IGF1ZGlvX3VyYl9vcHNbc3RyZWFtXTsKIAl9IGVsc2UgewpAQCAtMjM5NCwyOSArMjQyMyw2OCBAQAogICogQGZvcm1hdDogdGhlIGZvcm1hdCB0YWcgKHdGb3JtYXRUYWcpCiAgKiBAZm10OiB0aGUgZm9ybWF0IHR5cGUgZGVzY3JpcHRvcgogICovCi1zdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2Zvcm1hdF9pX3R5cGUoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCi0JCQkJICAgICBpbnQgZm9ybWF0LCB1bnNpZ25lZCBjaGFyICpmbXQpCitzdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2Zvcm1hdF9pX3R5cGUoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCisJCQkJICAgICBzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwLAorCQkJCSAgICAgaW50IGZvcm1hdCwgdm9pZCAqX2ZtdCwKKwkJCQkgICAgIGludCBwcm90b2NvbCkKIHsKLQlpbnQgcGNtX2Zvcm1hdDsKKwlpbnQgcGNtX2Zvcm1hdCwgaTsKIAlpbnQgc2FtcGxlX3dpZHRoLCBzYW1wbGVfYnl0ZXM7CiAKKwlzd2l0Y2ggKHByb3RvY29sKSB7CisJY2FzZSBVQUNfVkVSU0lPTl8xOiB7CisJCXN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yICpmbXQgPSBfZm10OworCQlzYW1wbGVfd2lkdGggPSBmbXQtPmJCaXRSZXNvbHV0aW9uOworCQlzYW1wbGVfYnl0ZXMgPSBmbXQtPmJTdWJmcmFtZVNpemU7CisJCWJyZWFrOworCX0KKworCWNhc2UgVUFDX1ZFUlNJT05fMjogeworCQlzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lfZXh0X2Rlc2NyaXB0b3IgKmZtdCA9IF9mbXQ7CisJCXNhbXBsZV93aWR0aCA9IGZtdC0+YkJpdFJlc29sdXRpb247CisJCXNhbXBsZV9ieXRlcyA9IGZtdC0+YlN1YnNsb3RTaXplOworCisJCS8qCisJCSAqIEZJWE1FCisJCSAqIFVTQiBhdWRpbyBjbGFzcyB2MiBkZXZpY2VzIHNwZWNpZnkgYSBiaXRtYXAgb2YgcG9zc2libGUKKwkJICogYXVkaW8gZm9ybWF0cyByYXRoZXIgdGhhbiBvbmUgZml4IHZhbHVlLiBGb3Igbm93LCB3ZSBqdXN0CisJCSAqIHBpY2sgb25lIG9mIHRoZW0gYW5kIHJlcG9ydCB0aGF0IGFzIHRoZSBvbmx5IHBvc3NpYmxlCisJCSAqIHZhbHVlIGZvciB0aGlzIHNldHRpbmcuCisJCSAqIFRoZSBiaXQgYWxsb2NhdGlvbiBtYXAgaXMgaW4gZmFjdCBjb21wYXRpYmxlIHRvIHRoZQorCQkgKiB3Rm9ybWF0VGFnIG9mIHRoZSB2MSBBUyBzdHJlYW1pbmcgZGVzY3JpcHRvcnMsIHdoaWNoIGlzIHdoeQorCQkgKiB3ZSBjYW4gc2ltcGx5IG1hcCB0aGUgbWF0cml4LgorCQkgKi8KKworCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQkJaWYgKGZvcm1hdCAmICgxVUwgPDwgaSkpIHsKKwkJCQlmb3JtYXQgPSBpICsgMTsKKwkJCQlicmVhazsKKwkJCX0KKworCQlicmVhazsKKwl9CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAkvKiBGSVhNRTogY29ycmVjdCBlbmRpYW5lc3MgYW5kIHNpZ24/ICovCiAJcGNtX2Zvcm1hdCA9IC0xOwotCXNhbXBsZV93aWR0aCA9IGZtdFs2XTsKLQlzYW1wbGVfYnl0ZXMgPSBmbXRbNV07CisKIAlzd2l0Y2ggKGZvcm1hdCkgewotCWNhc2UgMDogLyogc29tZSBkZXZpY2VzIGRvbid0IGRlZmluZSB0aGlzIGNvcnJlY3RseS4uLiAqLworCWNhc2UgVUFDX0ZPUk1BVF9UWVBFX0lfVU5ERUZJTkVEOiAvKiBzb21lIGRldmljZXMgZG9uJ3QgZGVmaW5lIHRoaXMgY29ycmVjdGx5Li4uICovCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQgOiBmb3JtYXQgdHlwZSAwIGlzIGRldGVjdGVkLCBwcm9jZXNzZWQgYXMgUENNXG4iLAogCQkJICAgIGNoaXAtPmRldi0+ZGV2bnVtLCBmcC0+aWZhY2UsIGZwLT5hbHRzZXR0aW5nKTsKIAkJLyogZmFsbC10aHJvdWdoICovCi0JY2FzZSBVU0JfQVVESU9fRk9STUFUX1BDTToKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JX1BDTToKIAkJaWYgKHNhbXBsZV93aWR0aCA+IHNhbXBsZV9ieXRlcyAqIDgpIHsKIAkJCXNuZF9wcmludGsoS0VSTl9JTkZPICIlZDoldTolZCA6IHNhbXBsZSBiaXR3aWR0aCAlZCBpbiBvdmVyIHNhbXBsZSBieXRlcyAlZFxuIiwKIAkJCQkgICBjaGlwLT5kZXYtPmRldm51bSwgZnAtPmlmYWNlLCBmcC0+YWx0c2V0dGluZywKIAkJCQkgICBzYW1wbGVfd2lkdGgsIHNhbXBsZV9ieXRlcyk7CiAJCX0KIAkJLyogY2hlY2sgdGhlIGZvcm1hdCBieXRlIHNpemUgKi8KLQkJc3dpdGNoIChmbXRbNV0pIHsKKwkJcHJpbnRrKCIgWFhYWFggU0FNUExFIEJZVEVTICVkXG4iLCBzYW1wbGVfYnl0ZXMpOworCQlzd2l0Y2ggKHNhbXBsZV9ieXRlcykgewogCQljYXNlIDE6CiAJCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TODsKIAkJCWJyZWFrOwpAQCAtMjQzNywxMiArMjUwNSwxMiBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiJWQ6JXU6JWQgOiB1bnN1cHBvcnRlZCBzYW1wbGUgYml0d2lkdGggJWQgaW4gJWQgYnl0ZXNcbiIsCi0JCQkJICAgY2hpcC0+ZGV2LT5kZXZudW0sIGZwLT5pZmFjZSwKLQkJCQkgICBmcC0+YWx0c2V0dGluZywgc2FtcGxlX3dpZHRoLCBzYW1wbGVfYnl0ZXMpOworCQkJCSAgIGNoaXAtPmRldi0+ZGV2bnVtLCBmcC0+aWZhY2UsIGZwLT5hbHRzZXR0aW5nLAorCQkJCSAgIHNhbXBsZV93aWR0aCwgc2FtcGxlX2J5dGVzKTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwotCWNhc2UgVVNCX0FVRElPX0ZPUk1BVF9QQ004OgorCWNhc2UgVUFDX0ZPUk1BVF9UWVBFX0lfUENNODoKIAkJcGNtX2Zvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfVTg7CiAKIAkJLyogRGFsbGFzIERTNDIwMSB3b3JrYXJvdW5kOiBpdCBhZHZlcnRpc2VzIFU4IGZvcm1hdCwgYnV0IHJlYWxseQpAQCAtMjQ1MCwxMyArMjUxOCwxMyBAQAogCQlpZiAoY2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0ZmEsIDB4NDIwMSkpCiAJCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TODsKIAkJYnJlYWs7Ci0JY2FzZSBVU0JfQVVESU9fRk9STUFUX0lFRUVfRkxPQVQ6CisJY2FzZSBVQUNfRk9STUFUX1RZUEVfSV9JRUVFX0ZMT0FUOgogCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9GTE9BVF9MRTsKIAkJYnJlYWs7Ci0JY2FzZSBVU0JfQVVESU9fRk9STUFUX0FMQVc6CisJY2FzZSBVQUNfRk9STUFUX1RZUEVfSV9BTEFXOgogCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9BX0xBVzsKIAkJYnJlYWs7Ci0JY2FzZSBVU0JfQVVESU9fRk9STUFUX01VX0xBVzoKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JX01VTEFXOgogCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9NVV9MQVc7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yNDcwLDcgKzI1MzgsNyBAQAogCiAvKgogICogcGFyc2UgdGhlIGZvcm1hdCBkZXNjcmlwdG9yIGFuZCBzdG9yZXMgdGhlIHBvc3NpYmxlIHNhbXBsZSByYXRlcwotICogb24gdGhlIGF1ZGlvZm9ybWF0IHRhYmxlLgorICogb24gdGhlIGF1ZGlvZm9ybWF0IHRhYmxlIChhdWRpbyBjbGFzcyB2MSkuCiAgKgogICogQGRldjogdXNiIGRldmljZQogICogQGZwOiBhdWRpb2Zvcm1hdCByZWNvcmQKQEAgLTI0NzgsMTMgKzI1NDYsMTMgQEAKICAqIEBvZmZzZXQ6IHRoZSBzdGFydCBvZmZzZXQgb2YgZGVzY3JpcHRvciBwb2ludGluZyB0aGUgcmF0ZSB0eXBlCiAgKiAgICAgICAgICAoNyBmb3IgdHlwZSBJIGFuZCBJSSwgOCBmb3IgdHlwZSBJSSkKICAqLwotc3RhdGljIGludCBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXMoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCi0JCQkJICAgIHVuc2lnbmVkIGNoYXIgKmZtdCwgaW50IG9mZnNldCkKK3N0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZm9ybWF0X3JhdGVzX3YxKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLCBzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpmbXQsIGludCBvZmZzZXQpCiB7CiAJaW50IG5yX3JhdGVzID0gZm10W29mZnNldF07CiAKIAlpZiAoZm10WzBdIDwgb2Zmc2V0ICsgMSArIDMgKiAobnJfcmF0ZXMgPyBucl9yYXRlcyA6IDIpKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogaW52YWxpZCBGT1JNQVRfVFlQRSBkZXNjXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IGludmFsaWQgVUFDX0ZPUk1BVF9UWVBFIGRlc2NcbiIsCiAJCQkJICAgY2hpcC0+ZGV2LT5kZXZudW0sIGZwLT5pZmFjZSwgZnAtPmFsdHNldHRpbmcpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMjUzNSwxNCArMjYwMyw4NyBAQAogfQogCiAvKgorICogcGFyc2UgdGhlIGZvcm1hdCBkZXNjcmlwdG9yIGFuZCBzdG9yZXMgdGhlIHBvc3NpYmxlIHNhbXBsZSByYXRlcworICogb24gdGhlIGF1ZGlvZm9ybWF0IHRhYmxlIChhdWRpbyBjbGFzcyB2MikuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZm9ybWF0X3JhdGVzX3YyKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLAorCQkJCSAgICAgICBzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwLAorCQkJCSAgICAgICBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gY2hpcC0+ZGV2OworCXVuc2lnbmVkIGNoYXIgdG1wWzJdLCAqZGF0YTsKKwlpbnQgaSwgbnJfcmF0ZXMsIGRhdGFfc2l6ZSwgcmV0ID0gMDsKKworCS8qIGdldCB0aGUgbnVtYmVyIG9mIHNhbXBsZSByYXRlcyBmaXJzdCBieSBvbmx5IGZldGNoaW5nIDIgYnl0ZXMgKi8KKwlyZXQgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgVUFDMl9DU19SQU5HRSwKKwkJCSAgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX0lOLAorCQkJICAgICAgIDB4MDEwMCwgY2hpcC0+Y2xvY2tfaWQgPDwgOCwgdG1wLCBzaXplb2YodG1wKSwgMTAwMCk7CisKKwlpZiAocmV0IDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmV0cmlldmUgbnVtYmVyIG9mIHNhbXBsZSByYXRlc1xuIik7CisJCWdvdG8gZXJyOworCX0KKworCW5yX3JhdGVzID0gKHRtcFsxXSA8PCA4KSB8IHRtcFswXTsKKwlkYXRhX3NpemUgPSAyICsgMTIgKiBucl9yYXRlczsKKwlkYXRhID0ga3phbGxvYyhkYXRhX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBub3cgZ2V0IHRoZSBmdWxsIGluZm9ybWF0aW9uICovCisJcmV0ID0gc25kX3VzYl9jdGxfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIFVBQzJfQ1NfUkFOR0UsCisJCQkgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9JTiwKKwkJCSAgICAgICAweDAxMDAsIGNoaXAtPmNsb2NrX2lkIDw8IDgsIGRhdGEsIGRhdGFfc2l6ZSwgMTAwMCk7CisKKwlpZiAocmV0IDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmV0cmlldmUgc2FtcGxlIHJhdGUgcmFuZ2VcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWZwLT5yYXRlX3RhYmxlID0ga21hbGxvYyhzaXplb2YoaW50KSAqIG5yX3JhdGVzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZwLT5yYXRlX3RhYmxlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZnAtPm5yX3JhdGVzID0gMDsKKwlmcC0+cmF0ZV9taW4gPSBmcC0+cmF0ZV9tYXggPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5yX3JhdGVzOyBpKyspIHsKKwkJaW50IHJhdGUgPSBjb21iaW5lX3F1YWQoJmRhdGFbMiArIDEyICogaV0pOworCisJCWZwLT5yYXRlX3RhYmxlW2ZwLT5ucl9yYXRlc10gPSByYXRlOworCQlpZiAoIWZwLT5yYXRlX21pbiB8fCByYXRlIDwgZnAtPnJhdGVfbWluKQorCQkJZnAtPnJhdGVfbWluID0gcmF0ZTsKKwkJaWYgKCFmcC0+cmF0ZV9tYXggfHwgcmF0ZSA+IGZwLT5yYXRlX21heCkKKwkJCWZwLT5yYXRlX21heCA9IHJhdGU7CisJCWZwLT5yYXRlcyB8PSBzbmRfcGNtX3JhdGVfdG9fcmF0ZV9iaXQocmF0ZSk7CisJCWZwLT5ucl9yYXRlcysrOworCX0KKworZXJyX2ZyZWU6CisJa2ZyZWUoZGF0YSk7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworLyoKICAqIHBhcnNlIHRoZSBmb3JtYXQgdHlwZSBJIGFuZCBJSUkgZGVzY3JpcHRvcnMKICAqLwotc3RhdGljIGludCBwYXJzZV9hdWRpb19mb3JtYXRfaShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwgc3RydWN0IGF1ZGlvZm9ybWF0ICpmcCwKLQkJCQlpbnQgZm9ybWF0LCB1bnNpZ25lZCBjaGFyICpmbXQpCitzdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2Zvcm1hdF9pKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLAorCQkJCXN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCisJCQkJaW50IGZvcm1hdCwgdm9pZCAqX2ZtdCwKKwkJCQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZSkKIHsKLQlpbnQgcGNtX2Zvcm1hdDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICphbHRzZCA9IGdldF9pZmFjZV9kZXNjKGlmYWNlKTsKKwlzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lfZGlzY3JldGVfZGVzY3JpcHRvciAqZm10ID0gX2ZtdDsKKwlpbnQgcHJvdG9jb2wgPSBhbHRzZC0+YkludGVyZmFjZVByb3RvY29sOworCWludCBwY21fZm9ybWF0LCByZXQ7CiAKLQlpZiAoZm10WzNdID09IFVTQl9GT1JNQVRfVFlQRV9JSUkpIHsKKwlpZiAoZm10LT5iRm9ybWF0VHlwZSA9PSBVQUNfRk9STUFUX1RZUEVfSUlJKSB7CiAJCS8qIEZJWE1FOiB0aGUgZm9ybWF0IHR5cGUgaXMgcmVhbGx5IElFQ3h4eAogCQkgKiAgICAgICAgYnV0IHdlIGdpdmUgbm9ybWFsIFBDTSBmb3JtYXQgdG8gZ2V0IHRoZSBleGlzdGluZwogCQkgKiAgICAgICAgYXBwcyB3b3JraW5nLi4uCkBAIC0yNTYwLDM0ICsyNzAxLDU3IEBACiAJCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU7CiAJCX0KIAl9IGVsc2UgewotCQlwY21fZm9ybWF0ID0gcGFyc2VfYXVkaW9fZm9ybWF0X2lfdHlwZShjaGlwLCBmcCwgZm9ybWF0LCBmbXQpOworCQlwY21fZm9ybWF0ID0gcGFyc2VfYXVkaW9fZm9ybWF0X2lfdHlwZShjaGlwLCBmcCwgZm9ybWF0LCBmbXQsIHByb3RvY29sKTsKIAkJaWYgKHBjbV9mb3JtYXQgPCAwKQogCQkJcmV0dXJuIC0xOwogCX0KKwogCWZwLT5mb3JtYXQgPSBwY21fZm9ybWF0OwotCWZwLT5jaGFubmVscyA9IGZtdFs0XTsKKworCS8qIGdhdGhlciBwb3NzaWJsZSBzYW1wbGUgcmF0ZXMgKi8KKwkvKiBhdWRpbyBjbGFzcyB2MSByZXBvcnRzIHBvc3NpYmxlIHNhbXBsZSByYXRlcyBhcyBwYXJ0IG9mIHRoZQorCSAqIHByb3ByaWV0YXJ5IGNsYXNzIHNwZWNpZmljIGRlc2NyaXB0b3IuCisJICogYXVkaW8gY2xhc3MgdjIgdXNlcyBjbGFzcyBzcGVjaWZpYyBFUDAgcmFuZ2UgcmVxdWVzdHMgZm9yIHRoYXQuCisJICovCisJc3dpdGNoIChwcm90b2NvbCkgeworCWNhc2UgVUFDX1ZFUlNJT05fMToKKwkJZnAtPmNoYW5uZWxzID0gZm10LT5iTnJDaGFubmVsczsKKwkJcmV0ID0gcGFyc2VfYXVkaW9fZm9ybWF0X3JhdGVzX3YxKGNoaXAsIGZwLCBfZm10LCA3KTsKKwkJYnJlYWs7CisJY2FzZSBVQUNfVkVSU0lPTl8yOgorCQkvKiBmcC0+Y2hhbm5lbHMgaXMgYWxyZWFkeSBzZXQgaW4gdGhpcyBjYXNlICovCisJCXJldCA9IHBhcnNlX2F1ZGlvX2Zvcm1hdF9yYXRlc192MihjaGlwLCBmcCwgaWZhY2UpOworCQlicmVhazsKKwl9CisKIAlpZiAoZnAtPmNoYW5uZWxzIDwgMSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IGludmFsaWQgY2hhbm5lbHMgJWRcbiIsCiAJCQkgICBjaGlwLT5kZXYtPmRldm51bSwgZnAtPmlmYWNlLCBmcC0+YWx0c2V0dGluZywgZnAtPmNoYW5uZWxzKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlyZXR1cm4gcGFyc2VfYXVkaW9fZm9ybWF0X3JhdGVzKGNoaXAsIGZwLCBmbXQsIDcpOworCisJcmV0dXJuIHJldDsKIH0KIAogLyoKLSAqIHByYXNlIHRoZSBmb3JtYXQgdHlwZSBJSSBkZXNjcmlwdG9yCisgKiBwYXJzZSB0aGUgZm9ybWF0IHR5cGUgSUkgZGVzY3JpcHRvcgogICovCi1zdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2Zvcm1hdF9paShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwgc3RydWN0IGF1ZGlvZm9ybWF0ICpmcCwKLQkJCQkgaW50IGZvcm1hdCwgdW5zaWduZWQgY2hhciAqZm10KQorc3RhdGljIGludCBwYXJzZV9hdWRpb19mb3JtYXRfaWkoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCisJCQkJIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCisJCQkJIGludCBmb3JtYXQsIHZvaWQgKl9mbXQsCisJCQkJIHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlKQogewotCWludCBicmF0ZSwgZnJhbWVzaXplOworCWludCBicmF0ZSwgZnJhbWVzaXplLCByZXQ7CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqYWx0c2QgPSBnZXRfaWZhY2VfZGVzYyhpZmFjZSk7CisJaW50IHByb3RvY29sID0gYWx0c2QtPmJJbnRlcmZhY2VQcm90b2NvbDsKKwogCXN3aXRjaCAoZm9ybWF0KSB7Ci0JY2FzZSBVU0JfQVVESU9fRk9STUFUX0FDMzoKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JSV9BQzM6CiAJCS8qIEZJWE1FOiB0aGVyZSBpcyBubyBBQzMgZm9ybWF0IGRlZmluZWQgeWV0ICovCiAJCS8vIGZwLT5mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX0FDMzsKIAkJZnAtPmZvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfVTg7IC8qIHRlbXBvcmFyaWx5IGhhY2sgdG8gcmVjZWl2ZSBieXRlIHN0cmVhbXMgKi8KIAkJYnJlYWs7Ci0JY2FzZSBVU0JfQVVESU9fRk9STUFUX01QRUc6CisJY2FzZSBVQUNfRk9STUFUX1RZUEVfSUlfTVBFRzoKIAkJZnAtPmZvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfTVBFRzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTI1OTYsMjYgKzI3NjAsNDYgQEAKIAkJZnAtPmZvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfTVBFRzsKIAkJYnJlYWs7CiAJfQorCiAJZnAtPmNoYW5uZWxzID0gMTsKLQlicmF0ZSA9IGNvbWJpbmVfd29yZCgmZm10WzRdKTsgCS8qIGZtdFs0LDVdIDogd01heEJpdFJhdGUgKGluIGticHMpICovCi0JZnJhbWVzaXplID0gY29tYmluZV93b3JkKCZmbXRbNl0pOyAvKiBmbXRbNiw3XTogd1NhbXBsZXNQZXJGcmFtZSAqLwotCXNuZF9wcmludGQoS0VSTl9JTkZPICJmb3VuZCBmb3JtYXQgSUkgd2l0aCBtYXguYml0cmF0ZSA9ICVkLCBmcmFtZSBzaXplPSVkXG4iLCBicmF0ZSwgZnJhbWVzaXplKTsKLQlmcC0+ZnJhbWVfc2l6ZSA9IGZyYW1lc2l6ZTsKLQlyZXR1cm4gcGFyc2VfYXVkaW9fZm9ybWF0X3JhdGVzKGNoaXAsIGZwLCBmbXQsIDgpOyAvKiBmbXRbOC4uXSBzYW1wbGUgcmF0ZXMgKi8KKworCXN3aXRjaCAocHJvdG9jb2wpIHsKKwljYXNlIFVBQ19WRVJTSU9OXzE6IHsKKwkJc3RydWN0IHVhY19mb3JtYXRfdHlwZV9paV9kaXNjcmV0ZV9kZXNjcmlwdG9yICpmbXQgPSBfZm10OworCQlicmF0ZSA9IGxlMTZfdG9fY3B1KGZtdC0+d01heEJpdFJhdGUpOworCQlmcmFtZXNpemUgPSBsZTE2X3RvX2NwdShmbXQtPndTYW1wbGVzUGVyRnJhbWUpOworCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiZm91bmQgZm9ybWF0IElJIHdpdGggbWF4LmJpdHJhdGUgPSAlZCwgZnJhbWUgc2l6ZT0lZFxuIiwgYnJhdGUsIGZyYW1lc2l6ZSk7CisJCWZwLT5mcmFtZV9zaXplID0gZnJhbWVzaXplOworCQlyZXQgPSBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXNfdjEoY2hpcCwgZnAsIF9mbXQsIDgpOyAvKiBmbXRbOC4uXSBzYW1wbGUgcmF0ZXMgKi8KKwkJYnJlYWs7CisJfQorCWNhc2UgVUFDX1ZFUlNJT05fMjogeworCQlzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lpX2V4dF9kZXNjcmlwdG9yICpmbXQgPSBfZm10OworCQlicmF0ZSA9IGxlMTZfdG9fY3B1KGZtdC0+d01heEJpdFJhdGUpOworCQlmcmFtZXNpemUgPSBsZTE2X3RvX2NwdShmbXQtPndTYW1wbGVzUGVyRnJhbWUpOworCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiZm91bmQgZm9ybWF0IElJIHdpdGggbWF4LmJpdHJhdGUgPSAlZCwgZnJhbWUgc2l6ZT0lZFxuIiwgYnJhdGUsIGZyYW1lc2l6ZSk7CisJCWZwLT5mcmFtZV9zaXplID0gZnJhbWVzaXplOworCQlyZXQgPSBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXNfdjIoY2hpcCwgZnAsIGlmYWNlKTsKKwkJYnJlYWs7CisJfQorCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZm9ybWF0KHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLCBzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwLAotCQkJICAgICAgaW50IGZvcm1hdCwgdW5zaWduZWQgY2hhciAqZm10LCBpbnQgc3RyZWFtKQorCQkJICAgICAgaW50IGZvcm1hdCwgdW5zaWduZWQgY2hhciAqZm10LCBpbnQgc3RyZWFtLAorCQkJICAgICAgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2UpCiB7CiAJaW50IGVycjsKIAogCXN3aXRjaCAoZm10WzNdKSB7Ci0JY2FzZSBVU0JfRk9STUFUX1RZUEVfSToKLQljYXNlIFVTQl9GT1JNQVRfVFlQRV9JSUk6Ci0JCWVyciA9IHBhcnNlX2F1ZGlvX2Zvcm1hdF9pKGNoaXAsIGZwLCBmb3JtYXQsIGZtdCk7CisJY2FzZSBVQUNfRk9STUFUX1RZUEVfSToKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JSUk6CisJCWVyciA9IHBhcnNlX2F1ZGlvX2Zvcm1hdF9pKGNoaXAsIGZwLCBmb3JtYXQsIGZtdCwgaWZhY2UpOwogCQlicmVhazsKLQljYXNlIFVTQl9GT1JNQVRfVFlQRV9JSToKLQkJZXJyID0gcGFyc2VfYXVkaW9fZm9ybWF0X2lpKGNoaXAsIGZwLCBmb3JtYXQsIGZtdCk7CisJY2FzZSBVQUNfRk9STUFUX1RZUEVfSUk6CisJCWVyciA9IHBhcnNlX2F1ZGlvX2Zvcm1hdF9paShjaGlwLCBmcCwgZm9ybWF0LCBmbXQsIGlmYWNlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc25kX3ByaW50ZChLRVJOX0lORk8gIiVkOiV1OiVkIDogZm9ybWF0IHR5cGUgJWQgaXMgbm90IHN1cHBvcnRlZCB5ZXRcbiIsCkBAIC0yNjMzLDcgKzI4MTcsNyBAQAogCWlmIChjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDAwKSB8fAogCSAgICBjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDIwKSB8fAogCSAgICBjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDYxKSkgewotCQlpZiAoZm10WzNdID09IFVTQl9GT1JNQVRfVFlQRV9JICYmCisJCWlmIChmbXRbM10gPT0gVUFDX0ZPUk1BVF9UWVBFX0kgJiYKIAkJICAgIGZwLT5yYXRlcyAhPSBTTkRSVl9QQ01fUkFURV80ODAwMCAmJgogCQkgICAgZnAtPnJhdGVzICE9IFNORFJWX1BDTV9SQVRFXzk2MDAwKQogCQkJcmV0dXJuIC0xOwpAQCAtMjY2MiwxMCArMjg0NiwxMCBAQAogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHM7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqYWx0c2Q7CiAJaW50IGksIGFsdG5vLCBlcnIsIHN0cmVhbTsKLQlpbnQgZm9ybWF0OworCWludCBmb3JtYXQgPSAwLCBudW1fY2hhbm5lbHMgPSAwOwogCXN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAgPSBOVUxMOwogCXVuc2lnbmVkIGNoYXIgKmZtdCwgKmNzZXA7Ci0JaW50IG51bTsKKwlpbnQgbnVtLCBwcm90b2NvbDsKIAogCWRldiA9IGNoaXAtPmRldjsKIApAQCAtMjY4NCwxMCArMjg2OCwxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewogCQlhbHRzID0gJmlmYWNlLT5hbHRzZXR0aW5nW2ldOwogCQlhbHRzZCA9IGdldF9pZmFjZV9kZXNjKGFsdHMpOworCQlwcm90b2NvbCA9IGFsdHNkLT5iSW50ZXJmYWNlUHJvdG9jb2w7CiAJCS8qIHNraXAgaW52YWxpZCBvbmUgKi8KIAkJaWYgKChhbHRzZC0+YkludGVyZmFjZUNsYXNzICE9IFVTQl9DTEFTU19BVURJTyAmJgogCQkgICAgIGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDKSB8fAotCQkgICAgKGFsdHNkLT5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gVVNCX1NVQkNMQVNTX0FVRElPX1NUUkVBTUlORyAmJgorCQkgICAgKGFsdHNkLT5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gVVNCX1NVQkNMQVNTX0FVRElPU1RSRUFNSU5HICYmCiAJCSAgICAgYWx0c2QtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSBVU0JfU1VCQ0xBU1NfVkVORE9SX1NQRUMpIHx8CiAJCSAgICBhbHRzZC0+Yk51bUVuZHBvaW50cyA8IDEgfHwKIAkJICAgIGxlMTZfdG9fY3B1KGdldF9lbmRwb2ludChhbHRzLCAwKS0+d01heFBhY2tldFNpemUpID09IDApCkBAIC0yNzA4LDMwICsyODkzLDY1IEBACiAJCQljb250aW51ZTsKIAogCQkvKiBnZXQgYXVkaW8gZm9ybWF0cyAqLwotCQlmbXQgPSBzbmRfdXNiX2ZpbmRfY3NpbnRfZGVzYyhhbHRzLT5leHRyYSwgYWx0cy0+ZXh0cmFsZW4sIE5VTEwsIEFTX0dFTkVSQUwpOwotCQlpZiAoIWZtdCkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiBBU19HRU5FUkFMIGRlc2NyaXB0b3Igbm90IGZvdW5kXG4iLAotCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8pOwotCQkJY29udGludWU7CisJCXN3aXRjaCAocHJvdG9jb2wpIHsKKwkJY2FzZSBVQUNfVkVSU0lPTl8xOiB7CisJCQlzdHJ1Y3QgdWFjX2FzX2hlYWRlcl9kZXNjcmlwdG9yX3YxICphcyA9CisJCQkJc25kX3VzYl9maW5kX2NzaW50X2Rlc2MoYWx0cy0+ZXh0cmEsIGFsdHMtPmV4dHJhbGVuLCBOVUxMLCBVQUNfQVNfR0VORVJBTCk7CisKKwkJCWlmICghYXMpIHsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IFVBQ19BU19HRU5FUkFMIGRlc2NyaXB0b3Igbm90IGZvdW5kXG4iLAorCQkJCQkgICBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKGFzLT5iTGVuZ3RoIDwgc2l6ZW9mKCphcykpIHsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IGludmFsaWQgVUFDX0FTX0dFTkVSQUwgZGVzY1xuIiwKKwkJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubyk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWZvcm1hdCA9IGxlMTZfdG9fY3B1KGFzLT53Rm9ybWF0VGFnKTsgLyogcmVtZW1iZXIgdGhlIGZvcm1hdCB2YWx1ZSAqLworCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoZm10WzBdIDwgNykgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiBpbnZhbGlkIEFTX0dFTkVSQUwgZGVzY1xuIiwKLQkJCQkgICBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vKTsKLQkJCWNvbnRpbnVlOworCQljYXNlIFVBQ19WRVJTSU9OXzI6IHsKKwkJCXN0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3JfdjIgKmFzID0KKwkJCQlzbmRfdXNiX2ZpbmRfY3NpbnRfZGVzYyhhbHRzLT5leHRyYSwgYWx0cy0+ZXh0cmFsZW4sIE5VTEwsIFVBQ19BU19HRU5FUkFMKTsKKworCQkJaWYgKCFhcykgeworCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogVUFDX0FTX0dFTkVSQUwgZGVzY3JpcHRvciBub3QgZm91bmRcbiIsCisJCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoYXMtPmJMZW5ndGggPCBzaXplb2YoKmFzKSkgeworCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogaW52YWxpZCBVQUNfQVNfR0VORVJBTCBkZXNjXG4iLAorCQkJCQkgICBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJbnVtX2NoYW5uZWxzID0gYXMtPmJOckNoYW5uZWxzOworCQkJZm9ybWF0ID0gbGUzMl90b19jcHUoYXMtPmJtRm9ybWF0cyk7CisKKwkJCWJyZWFrOwogCQl9CiAKLQkJZm9ybWF0ID0gKGZtdFs2XSA8PCA4KSB8IGZtdFs1XTsgLyogcmVtZW1iZXIgdGhlIGZvcm1hdCB2YWx1ZSAqLworCQlkZWZhdWx0OgorCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiB1bmtub3duIGludGVyZmFjZSBwcm90b2NvbCAlMDR4XG4iLAorCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8sIHByb3RvY29sKTsKKwkJCWNvbnRpbnVlOworCQl9CiAKIAkJLyogZ2V0IGZvcm1hdCB0eXBlICovCi0JCWZtdCA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGFsdHMtPmV4dHJhLCBhbHRzLT5leHRyYWxlbiwgTlVMTCwgRk9STUFUX1RZUEUpOworCQlmbXQgPSBzbmRfdXNiX2ZpbmRfY3NpbnRfZGVzYyhhbHRzLT5leHRyYSwgYWx0cy0+ZXh0cmFsZW4sIE5VTEwsIFVBQ19GT1JNQVRfVFlQRSk7CiAJCWlmICghZm10KSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IG5vIEZPUk1BVF9UWVBFIGRlc2NcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IG5vIFVBQ19GT1JNQVRfVFlQRSBkZXNjXG4iLAogCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8pOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKGZtdFswXSA8IDgpIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogaW52YWxpZCBGT1JNQVRfVFlQRSBkZXNjXG4iLAorCQlpZiAoKChwcm90b2NvbCA9PSBVQUNfVkVSU0lPTl8xKSAmJiAoZm10WzBdIDwgOCkpIHx8CisJCSAgICAoKHByb3RvY29sID09IFVBQ19WRVJTSU9OXzIpICYmIChmbXRbMF0gIT0gNikpKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IGludmFsaWQgVUFDX0ZPUk1BVF9UWVBFIGRlc2NcbiIsCiAJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubyk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjc0NCw2ICsyOTY0LDcgQEAKIAkJaWYgKGZtdFs0XSA9PSAxICYmIGZtdFs1XSA9PSAyICYmIGFsdG5vID09IDIgJiYgbnVtID09IDMgJiYKIAkJICAgIGZwICYmIGZwLT5hbHRzZXR0aW5nID09IDEgJiYgZnAtPmNoYW5uZWxzID09IDEgJiYKIAkJICAgIGZwLT5mb3JtYXQgPT0gU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUgJiYKKwkJICAgIHByb3RvY29sID09IFVBQ19WRVJTSU9OXzEgJiYKIAkJICAgIGxlMTZfdG9fY3B1KGdldF9lbmRwb2ludChhbHRzLCAwKS0+d01heFBhY2tldFNpemUpID09CiAJCQkJCQkJZnAtPm1heHBhY2tzaXplICogMikKIAkJCWNvbnRpbnVlOwpAQCAtMjc1Miw3ICsyOTczLDcgQEAKIAkJLyogQ3JlYW13YXJlIE5vYWggaGFzIHRoaXMgZGVzY3JpcHRvciBhZnRlciB0aGUgMm5kIGVuZHBvaW50ICovCiAJCWlmICghY3NlcCAmJiBhbHRzZC0+Yk51bUVuZHBvaW50cyA+PSAyKQogCQkJY3NlcCA9IHNuZF91c2JfZmluZF9kZXNjKGFsdHMtPmVuZHBvaW50WzFdLmV4dHJhLCBhbHRzLT5lbmRwb2ludFsxXS5leHRyYWxlbiwgTlVMTCwgVVNCX0RUX0NTX0VORFBPSU5UKTsKLQkJaWYgKCFjc2VwIHx8IGNzZXBbMF0gPCA3IHx8IGNzZXBbMl0gIT0gRVBfR0VORVJBTCkgeworCQlpZiAoIWNzZXAgfHwgY3NlcFswXSA8IDcgfHwgY3NlcFsyXSAhPSBVQUNfRVBfR0VORVJBTCkgewogCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIiVkOiV1OiVkIDogbm8gb3IgaW52YWxpZCIKIAkJCQkgICAiIGNsYXNzIHNwZWNpZmljIGVuZHBvaW50IGRlc2NyaXB0b3JcbiIsCiAJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubyk7CkBAIC0yNzcyLDYgKzI5OTMsOCBAQAogCQlmcC0+ZXBfYXR0ciA9IGdldF9lbmRwb2ludChhbHRzLCAwKS0+Ym1BdHRyaWJ1dGVzOwogCQlmcC0+ZGF0YWludGVydmFsID0gcGFyc2VfZGF0YWludGVydmFsKGNoaXAsIGFsdHMpOwogCQlmcC0+bWF4cGFja3NpemUgPSBsZTE2X3RvX2NwdShnZXRfZW5kcG9pbnQoYWx0cywgMCktPndNYXhQYWNrZXRTaXplKTsKKwkJLyogbnVtX2NoYW5uZWxzIGlzIG9ubHkgc2V0IGZvciB2MiBpbnRlcmZhY2VzICovCisJCWZwLT5jaGFubmVscyA9IG51bV9jaGFubmVsczsKIAkJaWYgKHNuZF91c2JfZ2V0X3NwZWVkKGRldikgPT0gVVNCX1NQRUVEX0hJR0gpCiAJCQlmcC0+bWF4cGFja3NpemUgPSAoKChmcC0+bWF4cGFja3NpemUgPj4gMTEpICYgMykgKyAxKQogCQkJCQkqIChmcC0+bWF4cGFja3NpemUgJiAweDdmZik7CkBAIC0yNzg0LDEyICszMDA3LDEyIEBACiAJCQkvKiBPcHRvcGxheSBzZXRzIHRoZSBzYW1wbGUgcmF0ZSBhdHRyaWJ1dGUgYWx0aG91Z2gKIAkJCSAqIGl0IHNlZW1zIG5vdCBzdXBwb3J0aW5nIGl0IGluIGZhY3QuCiAJCQkgKi8KLQkJCWZwLT5hdHRyaWJ1dGVzICY9IH5FUF9DU19BVFRSX1NBTVBMRV9SQVRFOworCQkJZnAtPmF0dHJpYnV0ZXMgJj0gflVBQ19FUF9DU19BVFRSX1NBTVBMRV9SQVRFOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzMDIwKTogLyogQ3JlYXRpdmUgU0IgQXVkaWd5IDIgTlggKi8KIAkJY2FzZSBVU0JfSUQoMHgwNzYzLCAweDIwMDMpOiAvKiBNLUF1ZGlvIEF1ZGlvcGhpbGUgVVNCICovCiAJCQkvKiBkb2Vzbid0IHNldCB0aGUgc2FtcGxlIHJhdGUgYXR0cmlidXRlLCBidXQgc3VwcG9ydHMgaXQgKi8KLQkJCWZwLT5hdHRyaWJ1dGVzIHw9IEVQX0NTX0FUVFJfU0FNUExFX1JBVEU7CisJCQlmcC0+YXR0cmlidXRlcyB8PSBVQUNfRVBfQ1NfQVRUUl9TQU1QTEVfUkFURTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9JRCgweDA0N2YsIDB4MGNhMSk6IC8qIHBsYW50cm9uaWNzIGhlYWRzZXQgKi8KIAkJY2FzZSBVU0JfSUQoMHgwNzdkLCAweDA3YWYpOiAvKiBHcmlmZmluIGlNaWMgKG5vdGUgdGhhdCB0aGVyZSBpcwpAQCAtMjc5OCwxNiArMzAyMSwxNiBAQAogCQkgKiBwbGFudHJvbmljcyBoZWFkc2V0IGFuZCBHcmlmZmluIGlNaWMgaGF2ZSBzZXQgYWRhcHRpdmUtaW4KIAkJICogYWx0aG91Z2ggaXQncyByZWFsbHkgbm90Li4uCiAJCSAqLwotCQkJZnAtPmVwX2F0dHIgJj0gfkVQX0FUVFJfTUFTSzsKKwkJCWZwLT5lcF9hdHRyICY9IH5VU0JfRU5EUE9JTlRfU1lOQ1RZUEU7CiAJCQlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCQkJZnAtPmVwX2F0dHIgfD0gRVBfQVRUUl9BREFQVElWRTsKKwkJCQlmcC0+ZXBfYXR0ciB8PSBVU0JfRU5EUE9JTlRfU1lOQ19BREFQVElWRTsKIAkJCWVsc2UKLQkJCQlmcC0+ZXBfYXR0ciB8PSBFUF9BVFRSX1NZTkM7CisJCQkJZnAtPmVwX2F0dHIgfD0gVVNCX0VORFBPSU5UX1NZTkNfU1lOQzsKIAkJCWJyZWFrOwogCQl9CiAKIAkJLyogb2ssIGxldCdzIHBhcnNlIGZ1cnRoZXIuLi4gKi8KLQkJaWYgKHBhcnNlX2F1ZGlvX2Zvcm1hdChjaGlwLCBmcCwgZm9ybWF0LCBmbXQsIHN0cmVhbSkgPCAwKSB7CisJCWlmIChwYXJzZV9hdWRpb19mb3JtYXQoY2hpcCwgZnAsIGZvcm1hdCwgZm10LCBzdHJlYW0sIGFsdHMpIDwgMCkgewogCQkJa2ZyZWUoZnAtPnJhdGVfdGFibGUpOwogCQkJa2ZyZWUoZnApOwogCQkJY29udGludWU7CkBAIC0yODQ5LDYgKzMwNzIsNjUgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgc25kX3VzYl9jcmVhdGVfc3RyZWFtKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLCBpbnQgY3RybGlmLCBpbnQgaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBjaGlwLT5kZXY7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0czsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICphbHRzZDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UgPSB1c2JfaWZudW1fdG9faWYoZGV2LCBpbnRlcmZhY2UpOworCisJaWYgKCFpZmFjZSkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IGRvZXMgbm90IGV4aXN0XG4iLAorCQkJICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaW50ZXJmYWNlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVzYl9pbnRlcmZhY2VfY2xhaW1lZChpZmFjZSkpIHsKKwkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICIlZDolZDolZDogc2tpcHBpbmcsIGFscmVhZHkgY2xhaW1lZFxuIiwKKwkJCQkJCWRldi0+ZGV2bnVtLCBjdHJsaWYsIGludGVyZmFjZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWFsdHMgPSAmaWZhY2UtPmFsdHNldHRpbmdbMF07CisJYWx0c2QgPSBnZXRfaWZhY2VfZGVzYyhhbHRzKTsKKwlpZiAoKGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX0FVRElPIHx8CisJICAgICBhbHRzZC0+YkludGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19WRU5ET1JfU1BFQykgJiYKKwkgICAgYWx0c2QtPmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBVU0JfU1VCQ0xBU1NfTUlESVNUUkVBTUlORykgeworCQlpbnQgZXJyID0gc25kX3VzYm1pZGlfY3JlYXRlKGNoaXAtPmNhcmQsIGlmYWNlLAorCQkJCQkgICAgICZjaGlwLT5taWRpX2xpc3QsIE5VTEwpOworCQlpZiAoZXJyIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQ6IGNhbm5vdCBjcmVhdGUgc2VxdWVuY2VyIGRldmljZVxuIiwKKwkJCQkJCWRldi0+ZGV2bnVtLCBjdHJsaWYsIGludGVyZmFjZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmdXNiX2F1ZGlvX2RyaXZlciwgaWZhY2UsICh2b2lkICopLTFMKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0FVRElPICYmCisJICAgICBhbHRzZC0+YkludGVyZmFjZUNsYXNzICE9IFVTQl9DTEFTU19WRU5ET1JfU1BFQykgfHwKKwkgICAgYWx0c2QtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSBVU0JfU1VCQ0xBU1NfQVVESU9TVFJFQU1JTkcpIHsKKwkJc25kX3ByaW50ZGQoS0VSTl9FUlIgIiVkOiV1OiVkOiBza2lwcGluZyBub24tc3VwcG9ydGVkIGludGVyZmFjZSAlZFxuIiwKKwkJCQkJZGV2LT5kZXZudW0sIGN0cmxpZiwgaW50ZXJmYWNlLCBhbHRzZC0+YkludGVyZmFjZUNsYXNzKTsKKwkJLyogc2tpcCBub24tc3VwcG9ydGVkIGNsYXNzZXMgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHNuZF91c2JfZ2V0X3NwZWVkKGRldikgPT0gVVNCX1NQRUVEX0xPVykgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJsb3cgc3BlZWQgYXVkaW8gc3RyZWFtaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoISBwYXJzZV9hdWRpb19lbmRwb2ludHMoY2hpcCwgaW50ZXJmYWNlKSkgeworCQl1c2Jfc2V0X2ludGVyZmFjZShkZXYsIGludGVyZmFjZSwgMCk7IC8qIHJlc2V0IHRoZSBjdXJyZW50IGludGVyZmFjZSAqLworCQl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmdXNiX2F1ZGlvX2RyaXZlciwgaWZhY2UsICh2b2lkICopLTFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBwYXJzZSBhdWRpbyBjb250cm9sIGRlc2NyaXB0b3IgYW5kIGNyZWF0ZSBwY20vbWlkaSBzdHJlYW1zCiAgKi8KQEAgLTI4NTYsNjcgKzMxMzgsODEgQEAKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gY2hpcC0+ZGV2OwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmhvc3RfaWZhY2U7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlOwotCXVuc2lnbmVkIGNoYXIgKnAxOwotCWludCBpLCBqOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmFsdHNkOworCXZvaWQgKmNvbnRyb2xfaGVhZGVyOworCWludCBpLCBwcm90b2NvbDsKIAogCS8qIGZpbmQgYXVkaW9jb250cm9sIGludGVyZmFjZSAqLwogCWhvc3RfaWZhY2UgPSAmdXNiX2lmbnVtX3RvX2lmKGRldiwgY3RybGlmKS0+YWx0c2V0dGluZ1swXTsKLQlpZiAoIShwMSA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGhvc3RfaWZhY2UtPmV4dHJhLCBob3N0X2lmYWNlLT5leHRyYWxlbiwgTlVMTCwgSEVBREVSKSkpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IGZpbmQgSEVBREVSXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmICghIHAxWzddIHx8IHAxWzBdIDwgOCArIHAxWzddKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgImludmFsaWQgSEVBREVSXG4iKTsKKwljb250cm9sX2hlYWRlciA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGhvc3RfaWZhY2UtPmV4dHJhLAorCQkJCQkJIGhvc3RfaWZhY2UtPmV4dHJhbGVuLAorCQkJCQkJIE5VTEwsIFVBQ19IRUFERVIpOworCWFsdHNkID0gZ2V0X2lmYWNlX2Rlc2MoaG9zdF9pZmFjZSk7CisJcHJvdG9jb2wgPSBhbHRzZC0+YkludGVyZmFjZVByb3RvY29sOworCisJaWYgKCFjb250cm9sX2hlYWRlcikgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZmluZCBVQUNfSEVBREVSXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyoKLQkgKiBwYXJzZSBhbGwgVVNCIGF1ZGlvIHN0cmVhbWluZyBpbnRlcmZhY2VzCi0JICovCi0JZm9yIChpID0gMDsgaSA8IHAxWzddOyBpKyspIHsKLQkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0czsKLQkJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqYWx0c2Q7Ci0JCWogPSBwMVs4ICsgaV07Ci0JCWlmYWNlID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgaik7Ci0JCWlmICghaWZhY2UpIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogZG9lcyBub3QgZXhpc3RcbiIsCi0JCQkJICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7Ci0JCQljb250aW51ZTsKKwlzd2l0Y2ggKHByb3RvY29sKSB7CisJY2FzZSBVQUNfVkVSU0lPTl8xOiB7CisJCXN0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfdjEgKmgxID0gY29udHJvbF9oZWFkZXI7CisKKwkJaWYgKCFoMS0+YkluQ29sbGVjdGlvbikgeworCQkJc25kX3ByaW50ayhLRVJOX0lORk8gInNraXBwaW5nIGVtcHR5IGF1ZGlvIGludGVyZmFjZSAodjEpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmICh1c2JfaW50ZXJmYWNlX2NsYWltZWQoaWZhY2UpKSB7Ci0JCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gIiVkOiVkOiVkOiBza2lwcGluZywgYWxyZWFkeSBjbGFpbWVkXG4iLCBkZXYtPmRldm51bSwgY3RybGlmLCBqKTsKLQkJCWNvbnRpbnVlOworCisJCWlmIChoMS0+Ykxlbmd0aCA8IHNpemVvZigqaDEpICsgaDEtPmJJbkNvbGxlY3Rpb24pIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImludmFsaWQgVUFDX0hFQURFUiAodjEpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWFsdHMgPSAmaWZhY2UtPmFsdHNldHRpbmdbMF07Ci0JCWFsdHNkID0gZ2V0X2lmYWNlX2Rlc2MoYWx0cyk7Ci0JCWlmICgoYWx0c2QtPmJJbnRlcmZhY2VDbGFzcyA9PSBVU0JfQ0xBU1NfQVVESU8gfHwKLQkJICAgICBhbHRzZC0+YkludGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19WRU5ET1JfU1BFQykgJiYKLQkJICAgIGFsdHNkLT5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gVVNCX1NVQkNMQVNTX01JRElfU1RSRUFNSU5HKSB7Ci0JCQlpbnQgZXJyID0gc25kX3VzYm1pZGlfY3JlYXRlKGNoaXAtPmNhcmQsIGlmYWNlLAotCQkJCQkJICAgICAmY2hpcC0+bWlkaV9saXN0LCBOVUxMKTsKLQkJCWlmIChlcnIgPCAwKSB7Ci0JCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQ6IGNhbm5vdCBjcmVhdGUgc2VxdWVuY2VyIGRldmljZVxuIiwgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmdXNiX2F1ZGlvX2RyaXZlciwgaWZhY2UsICh2b2lkICopLTFMKTsKLQkJCWNvbnRpbnVlOworCisJCWZvciAoaSA9IDA7IGkgPCBoMS0+YkluQ29sbGVjdGlvbjsgaSsrKQorCQkJc25kX3VzYl9jcmVhdGVfc3RyZWFtKGNoaXAsIGN0cmxpZiwgaDEtPmJhSW50ZXJmYWNlTnJbaV0pOworCisJCWJyZWFrOworCX0KKworCWNhc2UgVUFDX1ZFUlNJT05fMjogeworCQlzdHJ1Y3QgdWFjX2Nsb2NrX3NvdXJjZV9kZXNjcmlwdG9yICpjczsKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2VfYXNzb2NfZGVzY3JpcHRvciAqYXNzb2MgPQorCQkJdXNiX2lmbnVtX3RvX2lmKGRldiwgY3RybGlmKS0+aW50Zl9hc3NvYzsKKworCQlpZiAoIWFzc29jKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJBdWRpbyBjbGFzcyB2MiBpbnRlcmZhY2VzIG5lZWQgYW4gaW50ZXJmYWNlIGFzc29jaWF0aW9uXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmICgoYWx0c2QtPmJJbnRlcmZhY2VDbGFzcyAhPSBVU0JfQ0xBU1NfQVVESU8gJiYKLQkJICAgICBhbHRzZC0+YkludGVyZmFjZUNsYXNzICE9IFVTQl9DTEFTU19WRU5ET1JfU1BFQykgfHwKLQkJICAgIGFsdHNkLT5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gVVNCX1NVQkNMQVNTX0FVRElPX1NUUkVBTUlORykgewotCQkJc25kX3ByaW50ZGQoS0VSTl9FUlIgIiVkOiV1OiVkOiBza2lwcGluZyBub24tc3VwcG9ydGVkIGludGVyZmFjZSAlZFxuIiwgZGV2LT5kZXZudW0sIGN0cmxpZiwgaiwgYWx0c2QtPmJJbnRlcmZhY2VDbGFzcyk7Ci0JCQkvKiBza2lwIG5vbi1zdXBwb3J0ZWQgY2xhc3NlcyAqLwotCQkJY29udGludWU7CisKKwkJLyogRklYTUU6IGZvciBub3csIHdlIGV4cGVjdCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2xvY2sgc291cmNlCisJCSAqIGRlc2NyaXB0b3IgYW5kIHdlIGFsd2F5cyB0YWtlIHRoZSBmaXJzdCBvbmUuCisJCSAqIFdlIHNob3VsZCBwcm9wZXJseSBzdXBwb3J0IGRldmljZXMgd2l0aCBtdWx0aXBsZSBjbG9jayBzb3VyY2VzLAorCQkgKiBjbG9jayBzZWxlY3RvcnMgYW5kIHNhbXBsZSByYXRlIGNvbnZlcnNpb24gdW5pdHMuICovCisKKwkJY3MgPSBzbmRfdXNiX2ZpbmRfY3NpbnRfZGVzYyhob3N0X2lmYWNlLT5leHRyYSwgaG9zdF9pZmFjZS0+ZXh0cmFsZW4sCisJCQkJCQlOVUxMLCBVQUNfQ0xPQ0tfU09VUkNFKTsKKworCQlpZiAoIWNzKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDTE9DS19TT1VSQ0UgZGVzY3JpcHRvciBub3QgZm91bmRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKHNuZF91c2JfZ2V0X3NwZWVkKGRldikgPT0gVVNCX1NQRUVEX0xPVykgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAibG93IHNwZWVkIGF1ZGlvIHN0cmVhbWluZyBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJCWNvbnRpbnVlOworCisJCWNoaXAtPmNsb2NrX2lkID0gY3MtPmJDbG9ja0lEOworCisJCWZvciAoaSA9IDA7IGkgPCBhc3NvYy0+YkludGVyZmFjZUNvdW50OyBpKyspIHsKKwkJCWludCBpbnRmID0gYXNzb2MtPmJGaXJzdEludGVyZmFjZSArIGk7CisKKwkJCWlmIChpbnRmICE9IGN0cmxpZikKKwkJCQlzbmRfdXNiX2NyZWF0ZV9zdHJlYW0oY2hpcCwgY3RybGlmLCBpbnRmKTsKIAkJfQotCQlpZiAoISBwYXJzZV9hdWRpb19lbmRwb2ludHMoY2hpcCwgaikpIHsKLQkJCXVzYl9zZXRfaW50ZXJmYWNlKGRldiwgaiwgMCk7IC8qIHJlc2V0IHRoZSBjdXJyZW50IGludGVyZmFjZSAqLwotCQkJdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJnVzYl9hdWRpb19kcml2ZXIsIGlmYWNlLCAodm9pZCAqKS0xTCk7Ci0JCX0KKworCQlicmVhazsKKwl9CisKKwlkZWZhdWx0OgorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmtub3duIHByb3RvY29sIHZlcnNpb24gMHglMDJ4XG4iLCBwcm90b2NvbCk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzAwNyw3ICszMzAzLDcgQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF1ZGlvZm9ybWF0IHVhX2Zvcm1hdCA9IHsKIAkJLmZvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfUzI0XzNMRSwKIAkJLmNoYW5uZWxzID0gMiwKLQkJLmZtdF90eXBlID0gVVNCX0ZPUk1BVF9UWVBFX0ksCisJCS5mbXRfdHlwZSA9IFVBQ19GT1JNQVRfVFlQRV9JLAogCQkuYWx0c2V0dGluZyA9IDEsCiAJCS5hbHRzZXRfaWR4ID0gMSwKIAkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUywKQEAgLTMwOTksNyArMzM5NSw3IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdWRpb2Zvcm1hdCB1YTEwMDBfZm9ybWF0ID0gewogCQkuZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TMzJfTEUsCi0JCS5mbXRfdHlwZSA9IFVTQl9GT1JNQVRfVFlQRV9JLAorCQkuZm10X3R5cGUgPSBVQUNfRk9STUFUX1RZUEVfSSwKIAkJLmFsdHNldHRpbmcgPSAxLAogCQkuYWx0c2V0X2lkeCA9IDEsCiAJCS5hdHRyaWJ1dGVzID0gMCwKQEAgLTMxNDIsNTkgKzM0MzgsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogQ3JlYXRlIGEgc3RyZWFtIGZvciBhbiBFZGlyb2wgVUEtMTAxIGludGVyZmFjZS4KLSAqIENvcHksIHBhc3RlIGFuZCBtb2RpZnkgZnJvbSBFZGlyb2wgVUEtMTAwMAotICovCi1zdGF0aWMgaW50IGNyZWF0ZV91YTEwMV9xdWlyayhzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKLQkJCSAgICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmsgKnF1aXJrKQotewotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXVkaW9mb3JtYXQgdWExMDFfZm9ybWF0ID0gewotCQkuZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TMzJfTEUsCi0JCS5mbXRfdHlwZSA9IFVTQl9GT1JNQVRfVFlQRV9JLAotCQkuYWx0c2V0dGluZyA9IDEsCi0JCS5hbHRzZXRfaWR4ID0gMSwKLQkJLmF0dHJpYnV0ZXMgPSAwLAotCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTLAotCX07Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0czsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICphbHRzZDsKLQlzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwOwotCWludCBzdHJlYW0sIGVycjsKLQotCWlmIChpZmFjZS0+bnVtX2FsdHNldHRpbmcgIT0gMikKLQkJcmV0dXJuIC1FTlhJTzsKLQlhbHRzID0gJmlmYWNlLT5hbHRzZXR0aW5nWzFdOwotCWFsdHNkID0gZ2V0X2lmYWNlX2Rlc2MoYWx0cyk7Ci0JaWYgKGFsdHMtPmV4dHJhbGVuICE9IDE4IHx8IGFsdHMtPmV4dHJhWzFdICE9IFVTQl9EVF9DU19JTlRFUkZBQ0UgfHwKLQkgICAgYWx0c2QtPmJOdW1FbmRwb2ludHMgIT0gMSkKLQkJcmV0dXJuIC1FTlhJTzsKLQotCWZwID0ga21lbWR1cCgmdWExMDFfZm9ybWF0LCBzaXplb2YoKmZwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmcC0+Y2hhbm5lbHMgPSBhbHRzLT5leHRyYVsxMV07Ci0JZnAtPmlmYWNlID0gYWx0c2QtPmJJbnRlcmZhY2VOdW1iZXI7Ci0JZnAtPmVuZHBvaW50ID0gZ2V0X2VuZHBvaW50KGFsdHMsIDApLT5iRW5kcG9pbnRBZGRyZXNzOwotCWZwLT5lcF9hdHRyID0gZ2V0X2VuZHBvaW50KGFsdHMsIDApLT5ibUF0dHJpYnV0ZXM7Ci0JZnAtPmRhdGFpbnRlcnZhbCA9IHBhcnNlX2RhdGFpbnRlcnZhbChjaGlwLCBhbHRzKTsKLQlmcC0+bWF4cGFja3NpemUgPSBsZTE2X3RvX2NwdShnZXRfZW5kcG9pbnQoYWx0cywgMCktPndNYXhQYWNrZXRTaXplKTsKLQlmcC0+cmF0ZV9tYXggPSBmcC0+cmF0ZV9taW4gPSBjb21iaW5lX3RyaXBsZSgmYWx0cy0+ZXh0cmFbMTVdKTsKLQotCXN0cmVhbSA9IChmcC0+ZW5kcG9pbnQgJiBVU0JfRElSX0lOKQotCQk/IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSA6IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0s7Ci0JZXJyID0gYWRkX2F1ZGlvX2VuZHBvaW50KGNoaXAsIHN0cmVhbSwgZnApOwotCWlmIChlcnIgPCAwKSB7Ci0JCWtmcmVlKGZwKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JLyogRklYTUU6IHBsYXliYWNrIG11c3QgYmUgc3luY2hyb25pemVkIHRvIGNhcHR1cmUgKi8KLQl1c2Jfc2V0X2ludGVyZmFjZShjaGlwLT5kZXYsIGZwLT5pZmFjZSwgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc25kX3VzYl9jcmVhdGVfcXVpcmsoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCiAJCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLAogCQkJCWNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrICpxdWlyayk7CkBAIC0zMjMyLDYgKzM0NzUsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIEFsbG93IGFsaWdubWVudCBvbiBhdWRpbyBzdWItc2xvdCAoY2hhbm5lbCBzYW1wbGVzKSByYXRoZXIgdGhhbgorICogb24gYXVkaW8gc2xvdHMgKGF1ZGlvIGZyYW1lcykKKyAqLworc3RhdGljIGludCBjcmVhdGVfYWxpZ25fdHJhbnNmZXJfcXVpcmsoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCisJCQkJICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsCisJCQkJICBjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyayAqcXVpcmspCit7CisJY2hpcC0+dHhmcl9xdWlyayA9IDE7CisJcmV0dXJuIDE7CS8qIENvbnRpbnVlIHdpdGggY3JlYXRpbmcgc3RyZWFtcyBhbmQgbWl4ZXIgKi8KK30KKwogCiAvKgogICogYm9vdCBxdWlya3MKQEAgLTMzMjcsNiArMzU4MiwzMiBAQAogfQogCiAvKgorICogVGhpcyBjYWxsIHdpbGwgcHV0IHRoZSBzeW50aCBpbiAiVVNCIHNlbmQiIG1vZGUsIGkuZSBpdCB3aWxsIHNlbmQgTUlESQorICogbWVzc2FnZXMgdGhyb3VnaCBVU0IgKHRoaXMgaXMgZGlzYWJsZWQgYXQgc3RhcnR1cCkuIFRoZSBzeW50aCB3aWxsCisgKiBhY2tub3dsZWRnZSBieSBzZW5kaW5nIGEgc3lzZXggb24gZW5kcG9pbnQgMHg4NSBhbmQgYnkgZGlzcGxheWluZyBhIFVTQgorICogc2lnbiBvbiBpdHMgTENELiBWYWx1ZXMgaGVyZSBhcmUgY2hvc2VuIGJhc2VkIG9uIHNuaWZmaW5nIFVTQiB0cmFmZmljCisgKiB1bmRlciBXaW5kb3dzLgorICovCitzdGF0aWMgaW50IHNuZF91c2JfYWNjZXNzbXVzaWNfYm9vdF9xdWlyayhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCWludCBlcnIsIGFjdHVhbF9sZW5ndGg7CisKKwkvKiAibWlkaSBzZW5kIiBlbmFibGUgKi8KKwlzdGF0aWMgY29uc3QgdTggc2VxW10gPSB7IDB4NGUsIDB4NzMsIDB4NTIsIDB4MDEgfTsKKworCXZvaWQgKmJ1ZiA9IGttZW1kdXAoc2VxLCBBUlJBWV9TSVpFKHNlcSksIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSB1c2JfaW50ZXJydXB0X21zZyhkZXYsIHVzYl9zbmRpbnRwaXBlKGRldiwgMHgwNSksIGJ1ZiwKKwkJCUFSUkFZX1NJWkUoc2VxKSwgJmFjdHVhbF9sZW5ndGgsIDEwMDApOworCWtmcmVlKGJ1Zik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIFNldHVwIHF1aXJrcwogICovCiAjZGVmaW5lIEFVRElPUEhJTEVfU0VUCQkJMHgwMSAvKiBpZiBzZXQsIHBhcnNlIGRldmljZV9zZXR1cCAqLwpAQCAtMzQwNiw4ICszNjg3LDggQEAKIAkJW1FVSVJLX0FVRElPX1NUQU5EQVJEX0lOVEVSRkFDRV0gPSBjcmVhdGVfc3RhbmRhcmRfYXVkaW9fcXVpcmssCiAJCVtRVUlSS19BVURJT19GSVhFRF9FTkRQT0lOVF0gPSBjcmVhdGVfZml4ZWRfc3RyZWFtX3F1aXJrLAogCQlbUVVJUktfQVVESU9fRURJUk9MX1VBMTAwMF0gPSBjcmVhdGVfdWExMDAwX3F1aXJrLAotCQlbUVVJUktfQVVESU9fRURJUk9MX1VBMTAxXSA9IGNyZWF0ZV91YTEwMV9xdWlyaywKLQkJW1FVSVJLX0FVRElPX0VESVJPTF9VQVhYXSA9IGNyZWF0ZV91YXh4X3F1aXJrCisJCVtRVUlSS19BVURJT19FRElST0xfVUFYWF0gPSBjcmVhdGVfdWF4eF9xdWlyaywKKwkJW1FVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSXSA9IGNyZWF0ZV9hbGlnbl90cmFuc2Zlcl9xdWlyawogCX07CiAKIAlpZiAocXVpcmstPnR5cGUgPCBRVUlSS19UWVBFX0NPVU5UKSB7CkBAIC0zNTk2LDcgKzM4NzcsNiBAQAogCWlmbnVtID0gZ2V0X2lmYWNlX2Rlc2MoYWx0cyktPmJJbnRlcmZhY2VOdW1iZXI7CiAJaWQgPSBVU0JfSUQobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKIAkJICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKLQogCWlmIChxdWlyayAmJiBxdWlyay0+aWZudW0gPj0gMCAmJiBpZm51bSAhPSBxdWlyay0+aWZudW0pCiAJCWdvdG8gX19lcnJfdmFsOwogCkBAIC0zNjI0LDYgKzM5MDQsMTIgQEAKIAkJCWdvdG8gX19lcnJfdmFsOwogCX0KIAorCS8qIEFjY2VzcyBNdXNpYyBWaXJ1c1RJIERlc2t0b3AgKi8KKwlpZiAoaWQgPT0gVVNCX0lEKDB4MTMzZSwgMHgwODE1KSkgeworCQlpZiAoc25kX3VzYl9hY2Nlc3NtdXNpY19ib290X3F1aXJrKGRldikgPCAwKQorCQkJZ290byBfX2Vycl92YWw7CisJfQorCiAJLyoKIAkgKiBmb3VuZCBhIGNvbmZpZy4gIG5vdyByZWdpc3RlciB0byBBTFNBCiAJICovCkBAIC0zNjYxLDYgKzM5NDcsNyBAQAogCQl9CiAJfQogCisJY2hpcC0+dHhmcl9xdWlyayA9IDA7CiAJZXJyID0gMTsgLyogY29udGludWUgKi8KIAlpZiAocXVpcmsgJiYgcXVpcmstPmlmbnVtICE9IFFVSVJLX05PX0lOVEVSRkFDRSkgewogCQkvKiBuZWVkIHNvbWUgc3BlY2lhbCBoYW5kbGluZ3MgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5oIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKaW5kZXggNDBiYTgxMS4uNmIwMTZkNCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmgKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKQEAgLTIxLDkzICsyMSw2IEBACiAgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQogICovCiAKLQotLyoKLSAqLwotCi0jZGVmaW5lIFVTQl9TVUJDTEFTU19BVURJT19DT05UUk9MCTB4MDEKLSNkZWZpbmUgVVNCX1NVQkNMQVNTX0FVRElPX1NUUkVBTUlORwkweDAyCi0jZGVmaW5lIFVTQl9TVUJDTEFTU19NSURJX1NUUkVBTUlORwkweDAzCi0jZGVmaW5lIFVTQl9TVUJDTEFTU19WRU5ET1JfU1BFQwkweGZmCi0KLSNkZWZpbmUgSEVBREVSCQkJCTB4MDEKLSNkZWZpbmUgSU5QVVRfVEVSTUlOQUwJCQkweDAyCi0jZGVmaW5lIE9VVFBVVF9URVJNSU5BTAkJCTB4MDMKLSNkZWZpbmUgTUlYRVJfVU5JVAkJCTB4MDQKLSNkZWZpbmUgU0VMRUNUT1JfVU5JVAkJCTB4MDUKLSNkZWZpbmUgRkVBVFVSRV9VTklUCQkJMHgwNgotI2RlZmluZSBQUk9DRVNTSU5HX1VOSVQJCQkweDA3Ci0jZGVmaW5lIEVYVEVOU0lPTl9VTklUCQkJMHgwOAotCi0jZGVmaW5lIEFTX0dFTkVSQUwJCQkweDAxCi0jZGVmaW5lIEZPUk1BVF9UWVBFCQkJMHgwMgotI2RlZmluZSBGT1JNQVRfU1BFQ0lGSUMJCQkweDAzCi0KLSNkZWZpbmUgRVBfR0VORVJBTAkJCTB4MDEKLQotI2RlZmluZSBNU19HRU5FUkFMCQkJMHgwMQotI2RlZmluZSBNSURJX0lOX0pBQ0sJCQkweDAyCi0jZGVmaW5lIE1JRElfT1VUX0pBQ0sJCQkweDAzCi0KLS8qIGVuZHBvaW50IGF0dHJpYnV0ZXMgKi8KLSNkZWZpbmUgRVBfQVRUUl9NQVNLCQkJMHgwYwotI2RlZmluZSBFUF9BVFRSX0FTWU5DCQkJMHgwNAotI2RlZmluZSBFUF9BVFRSX0FEQVBUSVZFCQkweDA4Ci0jZGVmaW5lIEVQX0FUVFJfU1lOQwkJCTB4MGMKLQotLyogY3MgZW5kcG9pbnQgYXR0cmlidXRlcyAqLwotI2RlZmluZSBFUF9DU19BVFRSX1NBTVBMRV9SQVRFCQkweDAxCi0jZGVmaW5lIEVQX0NTX0FUVFJfUElUQ0hfQ09OVFJPTAkweDAyCi0jZGVmaW5lIEVQX0NTX0FUVFJfRklMTF9NQVgJCTB4ODAKLQotLyogQXVkaW8gQ2xhc3Mgc3BlY2lmaWMgUmVxdWVzdCBDb2RlcyAqLwotCi0jZGVmaW5lIFNFVF9DVVIgICAgMHgwMQotI2RlZmluZSBHRVRfQ1VSICAgIDB4ODEKLSNkZWZpbmUgU0VUX01JTiAgICAweDAyCi0jZGVmaW5lIEdFVF9NSU4gICAgMHg4MgotI2RlZmluZSBTRVRfTUFYICAgIDB4MDMKLSNkZWZpbmUgR0VUX01BWCAgICAweDgzCi0jZGVmaW5lIFNFVF9SRVMgICAgMHgwNAotI2RlZmluZSBHRVRfUkVTICAgIDB4ODQKLSNkZWZpbmUgU0VUX01FTSAgICAweDA1Ci0jZGVmaW5lIEdFVF9NRU0gICAgMHg4NQotI2RlZmluZSBHRVRfU1RBVCAgIDB4ZmYKLQotLyogVGVybWluYWwgQ29udHJvbCBTZWxlY3RvcnMgKi8KLQotI2RlZmluZSBDT1BZX1BST1RFQ1RfQ09OVFJPTCAgICAgICAweDAxCi0KLS8qIEVuZHBvaW50IENvbnRyb2wgU2VsZWN0b3JzICovCi0KLSNkZWZpbmUgU0FNUExJTkdfRlJFUV9DT05UUk9MICAgICAgMHgwMQotI2RlZmluZSBQSVRDSF9DT05UUk9MICAgICAgICAgICAgICAweDAyCi0KLS8qIEZvcm1hdCBUeXBlcyAqLwotI2RlZmluZSBVU0JfRk9STUFUX1RZUEVfSQkweDAxCi0jZGVmaW5lIFVTQl9GT1JNQVRfVFlQRV9JSQkweDAyCi0jZGVmaW5lIFVTQl9GT1JNQVRfVFlQRV9JSUkJMHgwMwotCi0vKiB0eXBlIEkgKi8KLSNkZWZpbmUgVVNCX0FVRElPX0ZPUk1BVF9QQ00JMHgwMQotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX1BDTTgJMHgwMgotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0lFRUVfRkxPQVQJMHgwMwotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0FMQVcJMHgwNAotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX01VX0xBVwkweDA1Ci0KLS8qIHR5cGUgSUkgKi8KLSNkZWZpbmUgVVNCX0FVRElPX0ZPUk1BVF9NUEVHCTB4MTAwMQotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0FDMwkweDEwMDIKLQotLyogdHlwZSBJSUkgKi8KLSNkZWZpbmUgVVNCX0FVRElPX0ZPUk1BVF9JRUMxOTM3X0FDMwkweDIwMDEKLSNkZWZpbmUgVVNCX0FVRElPX0ZPUk1BVF9JRUMxOTM3X01QRUcxX0xBWUVSMQkweDIwMDIKLSNkZWZpbmUgVVNCX0FVRElPX0ZPUk1BVF9JRUMxOTM3X01QRUcyX05PRVhUCTB4MjAwMwotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0lFQzE5MzdfTVBFRzJfRVhUCTB4MjAwNAotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0lFQzE5MzdfTVBFRzJfTEFZRVIxX0xTCTB4MjAwNQotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0lFQzE5MzdfTVBFRzJfTEFZRVIyM19MUwkweDIwMDYKLQotCiAvKiBtYXhpbXVtIG51bWJlciBvZiBlbmRwb2ludHMgcGVyIGludGVyZmFjZSAqLwogI2RlZmluZSBNSURJX01BWF9FTkRQT0lOVFMgMgogCkBAIC0xMjUsOSArMzgsMTMgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJdTMyIHVzYl9pZDsKIAlpbnQgc2h1dGRvd247CisJdW5zaWduZWQgaW50IHR4ZnJfcXVpcms6MTsgLyogU3ViZnJhbWUgYm91bmRhcmllcyBvbiB0cmFuc2ZlcnMgKi8KIAlpbnQgbnVtX2ludGVyZmFjZXM7CiAJaW50IG51bV9zdXNwZW5kZWRfaW50ZjsKIAorCS8qIGZvciBhdWRpbyBjbGFzcyB2MiAqLworCWludCBjbG9ja19pZDsKKwogCXN0cnVjdCBsaXN0X2hlYWQgcGNtX2xpc3Q7CS8qIGxpc3Qgb2YgcGNtIHN0cmVhbXMgKi8KIAlpbnQgcGNtX2RldnM7CiAKQEAgLTE1OSw4ICs3Niw4IEBACiAJUVVJUktfQVVESU9fU1RBTkRBUkRfSU5URVJGQUNFLAogCVFVSVJLX0FVRElPX0ZJWEVEX0VORFBPSU5ULAogCVFVSVJLX0FVRElPX0VESVJPTF9VQTEwMDAsCi0JUVVJUktfQVVESU9fRURJUk9MX1VBMTAxLAogCVFVSVJLX0FVRElPX0VESVJPTF9VQVhYLAorCVFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAogCiAJUVVJUktfVFlQRV9DT1VOVAogfTsKQEAgLTIwOSw2ICsxMjYsMTYgQEAKIC8qCiAgKi8KIAorLypFLW11IFVTQiBzYW1wbGVyYXRlIGNvbnRyb2wgcXVpcmsqLworZW51bSB7CisJRU1VX1FVSVJLX1NSXzQ0MTAwSFogPSAwLAorCUVNVV9RVUlSS19TUl80ODAwMEhaLAorCUVNVV9RVUlSS19TUl84ODIwMEhaLAorCUVNVV9RVUlSS19TUl85NjAwMEhaLAorCUVNVV9RVUlSS19TUl8xNzY0MDBIWiwKKwlFTVVfUVVJUktfU1JfMTkyMDAwSFoKK307CisKICNkZWZpbmUgY29tYmluZV93b3JkKHMpICAgICgoKihzKSkgfCAoKHVuc2lnbmVkIGludCkocylbMV0gPDwgOCkpCiAjZGVmaW5lIGNvbWJpbmVfdHJpcGxlKHMpICAoY29tYmluZV93b3JkKHMpIHwgKCh1bnNpZ25lZCBpbnQpKHMpWzJdIDw8IDE2KSkKICNkZWZpbmUgY29tYmluZV9xdWFkKHMpICAgIChjb21iaW5lX3RyaXBsZShzKSB8ICgodW5zaWduZWQgaW50KShzKVszXSA8PCAyNCkpCkBAIC0yMzQsNiArMTYxLDkgQEAKIHZvaWQgc25kX3VzYm1pZGlfaW5wdXRfc3RhcnQoc3RydWN0IGxpc3RfaGVhZCogcCk7CiB2b2lkIHNuZF91c2JtaWRpX2Rpc2Nvbm5lY3Qoc3RydWN0IGxpc3RfaGVhZCAqcCk7CiAKK3ZvaWQgc25kX2VtdXVzYl9zZXRfc2FtcGxlcmF0ZShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKKwkJCXVuc2lnbmVkIGNoYXIgc2FtcGxlcmF0ZV9pZCk7CisKIC8qCiAgKiByZXRyaWV2ZSB1c2JfaW50ZXJmYWNlIGRlc2NyaXB0b3IgZnJvbSB0aGUgaG9zdCBpbnRlcmZhY2UKICAqIChjb25kaXRpb25hbCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvbGRlciBBUEkpCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNibWlkaS5jIGIvc291bmQvdXNiL3VzYm1pZGkuYwppbmRleCA2ZTg5YjgzLi4yYzU5YWZkIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNibWlkaS5jCisrKyBiL3NvdW5kL3VzYi91c2JtaWRpLmMKQEAgLTQ2LDYgKzQ2LDggQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvYXVkaW8uaD4KKwogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CiAjaW5jbHVkZSA8c291bmQvcmF3bWlkaS5oPgpAQCAtMTE2MiwxMCArMTE2NCwyMiBAQAogCQlwaXBlID0gdXNiX3NuZGludHBpcGUodW1pZGktPmRldiwgZXBfaW5mby0+b3V0X2VwKTsKIAllbHNlCiAJCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUodW1pZGktPmRldiwgZXBfaW5mby0+b3V0X2VwKTsKLQlpZiAodW1pZGktPnVzYl9pZCA9PSBVU0JfSUQoMHgwYTkyLCAweDEwMjApKSAvKiBFU0kgTTRVICovCi0JCWVwLT5tYXhfdHJhbnNmZXIgPSA0OwotCWVsc2UKKwlzd2l0Y2ggKHVtaWRpLT51c2JfaWQpIHsKKwlkZWZhdWx0OgogCQllcC0+bWF4X3RyYW5zZmVyID0gdXNiX21heHBhY2tldCh1bWlkaS0+ZGV2LCBwaXBlLCAxKTsKKwkJYnJlYWs7CisJCS8qCisJCSAqIFZhcmlvdXMgY2hpcHMgZGVjbGFyZSBhIHBhY2tldCBzaXplIGxhcmdlciB0aGFuIDQgYnl0ZXMsIGJ1dAorCQkgKiBkbyBub3QgYWN0dWFsbHkgd29yayB3aXRoIGxhcmdlciBwYWNrZXRzOgorCQkgKi8KKwljYXNlIFVTQl9JRCgweDBhOTIsIDB4MTAyMCk6IC8qIEVTSSBNNFUgKi8KKwljYXNlIFVTQl9JRCgweDE0MzAsIDB4NDc0Yik6IC8qIFJlZE9jdGFuZSBHSCBNSURJIElOVEVSRkFDRSAqLworCWNhc2UgVVNCX0lEKDB4MTVjYSwgMHgwMTAxKTogLyogVGV4dGVjaCBVU0IgTWlkaSBDYWJsZSAqLworCWNhc2UgVVNCX0lEKDB4MTVjYSwgMHgxODA2KTogLyogVGV4dGVjaCBVU0IgTWlkaSBDYWJsZSAqLworCWNhc2UgVVNCX0lEKDB4MWE4NiwgMHg3NTJkKTogLyogUWluSGVuZyBDSDM0NSAiVVNCMi4wLU1JREkiICovCisJCWVwLT5tYXhfdHJhbnNmZXIgPSA0OworCQlicmVhazsKKwl9CiAJZm9yIChpID0gMDsgaSA8IE9VVFBVVF9VUkJTOyArK2kpIHsKIAkJYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyh1bWlkaS0+ZGV2LAogCQkJCQkgIGVwLT5tYXhfdHJhbnNmZXIsIEdGUF9LRVJORUwsCkBAIC0xNDA3LDYgKzE0MjEsMTIgQEAKIAlFWFRFUk5BTF9QT1JUKDB4MDg2YSwgMHgwMDAxLCA4LCAiJXMgQnJvYWRjYXN0IiksCiAJRVhURVJOQUxfUE9SVCgweDA4NmEsIDB4MDAwMiwgOCwgIiVzIEJyb2FkY2FzdCIpLAogCUVYVEVSTkFMX1BPUlQoMHgwODZhLCAweDAwMDMsIDQsICIlcyBCcm9hZGNhc3QiKSwKKwkvKiBBY2Nlc3MgTXVzaWMgVmlydXMgVEkgKi8KKwlFWFRFUk5BTF9QT1JUKDB4MTMzZSwgMHgwODE1LCAwLCAiJXMgTUlESSIpLAorCVBPUlRfSU5GTygweDEzM2UsIDB4MDgxNSwgMSwgIiVzIFN5bnRoIiwgMCwKKwkJU05EUlZfU0VRX1BPUlRfVFlQRV9NSURJX0dFTkVSSUMgfAorCQlTTkRSVl9TRVFfUE9SVF9UWVBFX0hBUkRXQVJFIHwKKwkJU05EUlZfU0VRX1BPUlRfVFlQRV9TWU5USEVTSVpFUiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBvcnRfaW5mbyAqZmluZF9wb3J0X2luZm8oc3RydWN0IHNuZF91c2JfbWlkaSogdW1pZGksIGludCBudW1iZXIpCkBAIC0xNTIyLDcgKzE1NDIsNyBAQAogCWlmIChob3N0aWYtPmV4dHJhbGVuID49IDcgJiYKIAkgICAgbXNfaGVhZGVyLT5iTGVuZ3RoID49IDcgJiYKIAkgICAgbXNfaGVhZGVyLT5iRGVzY3JpcHRvclR5cGUgPT0gVVNCX0RUX0NTX0lOVEVSRkFDRSAmJgotCSAgICBtc19oZWFkZXItPmJEZXNjcmlwdG9yU3VidHlwZSA9PSBIRUFERVIpCisJICAgIG1zX2hlYWRlci0+YkRlc2NyaXB0b3JTdWJ0eXBlID09IFVBQ19IRUFERVIpCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiTUlESVN0cmVhbWluZyB2ZXJzaW9uICUwMnguJTAyeFxuIiwKIAkJCSAgICBtc19oZWFkZXItPmJjZE1TQ1sxXSwgbXNfaGVhZGVyLT5iY2RNU0NbMF0pOwogCWVsc2UKQEAgLTE1MzgsNyArMTU1OCw3IEBACiAJCWlmIChob3N0ZXAtPmV4dHJhbGVuIDwgNCB8fAogCQkgICAgbXNfZXAtPmJMZW5ndGggPCA0IHx8CiAJCSAgICBtc19lcC0+YkRlc2NyaXB0b3JUeXBlICE9IFVTQl9EVF9DU19FTkRQT0lOVCB8fAotCQkgICAgbXNfZXAtPmJEZXNjcmlwdG9yU3VidHlwZSAhPSBNU19HRU5FUkFMKQorCQkgICAgbXNfZXAtPmJEZXNjcmlwdG9yU3VidHlwZSAhPSBVQUNfTVNfR0VORVJBTCkKIAkJCWNvbnRpbnVlOwogCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9vdXQoZXApKSB7CiAJCQlpZiAoZW5kcG9pbnRzW2VwaWR4XS5vdXRfZXApIHsKQEAgLTE3NTAsOSArMTc3MCw5IEBACiAJICAgICBjc19kZXNjIDwgaG9zdGlmLT5leHRyYSArIGhvc3RpZi0+ZXh0cmFsZW4gJiYgY3NfZGVzY1swXSA+PSAyOwogCSAgICAgY3NfZGVzYyArPSBjc19kZXNjWzBdKSB7CiAJCWlmIChjc19kZXNjWzFdID09IFVTQl9EVF9DU19JTlRFUkZBQ0UpIHsKLQkJCWlmIChjc19kZXNjWzJdID09IE1JRElfSU5fSkFDSykKKwkJCWlmIChjc19kZXNjWzJdID09IFVBQ19NSURJX0lOX0pBQ0spCiAJCQkJZW5kcG9pbnQtPmluX2NhYmxlcyA9IChlbmRwb2ludC0+aW5fY2FibGVzIDw8IDEpIHwgMTsKLQkJCWVsc2UgaWYgKGNzX2Rlc2NbMl0gPT0gTUlESV9PVVRfSkFDSykKKwkJCWVsc2UgaWYgKGNzX2Rlc2NbMl0gPT0gVUFDX01JRElfT1VUX0pBQ0spCiAJCQkJZW5kcG9pbnQtPm91dF9jYWJsZXMgPSAoZW5kcG9pbnQtPm91dF9jYWJsZXMgPDwgMSkgfCAxOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYm1peGVyLmMgYi9zb3VuZC91c2IvdXNibWl4ZXIuYwppbmRleCBjOTk4MjIwLi44ZThmODcxYiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1peGVyLmMKKysrIGIvc291bmQvdXNiL3VzYm1peGVyLmMKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2F1ZGlvLmg+CisKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL2h3ZGVwLmg+CkBAIC02OSwxMyArNzEsMTYgQEAKIAl7IFVTQl9JRCgweDA0MWUsIDB4MzA0OCksIDIsIDIsIDYsIDYsICAyLCAgMHg2ZTkxIH0sIC8qIFRvc2hpYmEgU0IwNTAwICovCiB9OwogCisjZGVmaW5lIE1BWF9JRF9FTEVNUwkyNTYKKwogc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgewogCXN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwOwogCXVuc2lnbmVkIGludCBjdHJsaWY7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXVuc2lnbmVkIGludCBpZ25vcmVfY3RsX2Vycm9yOwogCXN0cnVjdCB1cmIgKnVyYjsKLQlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqKmlkX2VsZW1zOyAvKiBhcnJheVsyNTZdLCBpbmRleGVkIGJ5IHVuaXQgaWQgKi8KKwkvKiBhcnJheVtNQVhfSURfRUxFTVNdLCBpbmRleGVkIGJ5IHVuaXQgaWQgKi8KKwlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqKmlkX2VsZW1zOwogCiAJLyogU291bmQgQmxhc3RlciByZW1vdGUgY29udHJvbCBzdHVmZiAqLwogCWNvbnN0IHN0cnVjdCByY19jb25maWcgKnJjX2NmZzsKQEAgLTEwNSw3ICsxMTAsNyBAQAogCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcjsKIAl1bnNpZ25lZCBjaGFyICpidWZmZXI7CiAJdW5zaWduZWQgaW50IGJ1ZmxlbjsKLQlERUNMQVJFX0JJVE1BUCh1bml0Yml0bWFwLCAyNTYpOworCURFQ0xBUkVfQklUTUFQKHVuaXRiaXRtYXAsIE1BWF9JRF9FTEVNUyk7CiAJc3RydWN0IHVzYl9hdWRpb190ZXJtIG90ZXJtOwogCWNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKm1hcDsKIAljb25zdCBzdHJ1Y3QgdXNibWl4X3NlbGVjdG9yX21hcCAqc2VsZWN0b3JfbWFwOwpAQCAtMTIzLDYgKzEyOCw3IEBACiAJaW50IGNoYW5uZWxzOwogCWludCB2YWxfdHlwZTsKIAlpbnQgbWluLCBtYXgsIHJlczsKKwlpbnQgZEJtaW4sIGRCbWF4OwogCWludCBjYWNoZWQ7CiAJaW50IGNhY2hlX3ZhbFtNQVhfQ0hBTk5FTFNdOwogCXU4IGluaXRpYWxpemVkOwpAQCAtMTg2LDYgKzE5MiwyMSBAQAogCVVTQl9QUk9DX0RDUl9SRUxFQVNFID0gNiwKIH07CiAKKy8qRS1tdSAwMjAyKDA0MDQpIGVYdGVuc2lvbiBVbml0KFhVKSBjb250cm9sKi8KK2VudW0geworCVVTQl9YVV9DTE9DS19SQVRFIAkJPSAweGUzMDEsCisJVVNCX1hVX0NMT0NLX1NPVVJDRQkJPSAweGUzMDIsCisJVVNCX1hVX0RJR0lUQUxfSU9fU1RBVFVTCT0gMHhlMzAzLAorCVVTQl9YVV9ERVZJQ0VfT1BUSU9OUwkJPSAweGUzMDQsCisJVVNCX1hVX0RJUkVDVF9NT05JVE9SSU5HCT0gMHhlMzA1LAorCVVTQl9YVV9NRVRFUklORwkJCT0gMHhlMzA2Cit9OworZW51bSB7CisJVVNCX1hVX0NMT0NLX1NPVVJDRV9TRUxFQ1RPUiA9IDB4MDIsCS8qIGNsb2NrIHNvdXJjZSovCisJVVNCX1hVX0NMT0NLX1JBVEVfU0VMRUNUT1IgPSAweDAzLAkvKiBjbG9jayByYXRlICovCisJVVNCX1hVX0RJR0lUQUxfRk9STUFUX1NFTEVDVE9SID0gMHgwMSwJLyogdGhlIHNwZGlmIGZvcm1hdCAqLworCVVTQl9YVV9TT0ZUX0xJTUlUX1NFTEVDVE9SID0gMHgwMwkvKiBzb2Z0IGxpbWl0ZXIgKi8KK307CiAKIC8qCiAgKiBtYW51YWwgbWFwcGluZyBvZiBtaXhlciBuYW1lcwpAQCAtMTk0LDQyICsyMTUsNTAgQEAKICAqLwogI2luY2x1ZGUgInVzYm1peGVyX21hcHMuYyIKIAotLyogZ2V0IHRoZSBtYXBwZWQgbmFtZSBpZiB0aGUgdW5pdCBtYXRjaGVzICovCi1zdGF0aWMgaW50IGNoZWNrX21hcHBlZF9uYW1lKHN0cnVjdCBtaXhlcl9idWlsZCAqc3RhdGUsIGludCB1bml0aWQsIGludCBjb250cm9sLCBjaGFyICpidWYsIGludCBidWZsZW4pCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYm1peF9uYW1lX21hcCAqCitmaW5kX21hcChzdHJ1Y3QgbWl4ZXJfYnVpbGQgKnN0YXRlLCBpbnQgdW5pdGlkLCBpbnQgY29udHJvbCkKIHsKLQljb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICpwOworCWNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKnAgPSBzdGF0ZS0+bWFwOwogCi0JaWYgKCEgc3RhdGUtPm1hcCkKLQkJcmV0dXJuIDA7CisJaWYgKCFwKQorCQlyZXR1cm4gTlVMTDsKIAogCWZvciAocCA9IHN0YXRlLT5tYXA7IHAtPmlkOyBwKyspIHsKLQkJaWYgKHAtPmlkID09IHVuaXRpZCAmJiBwLT5uYW1lICYmCi0JCSAgICAoISBjb250cm9sIHx8ICEgcC0+Y29udHJvbCB8fCBjb250cm9sID09IHAtPmNvbnRyb2wpKSB7Ci0JCQlidWZsZW4tLTsKLQkJCXJldHVybiBzdHJsY3B5KGJ1ZiwgcC0+bmFtZSwgYnVmbGVuKTsKLQkJfQorCQlpZiAocC0+aWQgPT0gdW5pdGlkICYmCisJCSAgICAoIWNvbnRyb2wgfHwgIXAtPmNvbnRyb2wgfHwgY29udHJvbCA9PSBwLT5jb250cm9sKSkKKwkJCXJldHVybiBwOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogZ2V0IHRoZSBtYXBwZWQgbmFtZSBpZiB0aGUgdW5pdCBtYXRjaGVzICovCitzdGF0aWMgaW50CitjaGVja19tYXBwZWRfbmFtZShjb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICpwLCBjaGFyICpidWYsIGludCBidWZsZW4pCit7CisJaWYgKCFwIHx8ICFwLT5uYW1lKQorCQlyZXR1cm4gMDsKKworCWJ1Zmxlbi0tOworCXJldHVybiBzdHJsY3B5KGJ1ZiwgcC0+bmFtZSwgYnVmbGVuKTsKIH0KIAogLyogY2hlY2sgd2hldGhlciB0aGUgY29udHJvbCBzaG91bGQgYmUgaWdub3JlZCAqLwotc3RhdGljIGludCBjaGVja19pZ25vcmVkX2N0bChzdHJ1Y3QgbWl4ZXJfYnVpbGQgKnN0YXRlLCBpbnQgdW5pdGlkLCBpbnQgY29udHJvbCkKK3N0YXRpYyBpbmxpbmUgaW50CitjaGVja19pZ25vcmVkX2N0bChjb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICpwKQogewotCWNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKnA7Ci0KLQlpZiAoISBzdGF0ZS0+bWFwKQorCWlmICghcCB8fCBwLT5uYW1lIHx8IHAtPmRCKQogCQlyZXR1cm4gMDsKLQlmb3IgKHAgPSBzdGF0ZS0+bWFwOyBwLT5pZDsgcCsrKSB7Ci0JCWlmIChwLT5pZCA9PSB1bml0aWQgJiYgISBwLT5uYW1lICYmCi0JCSAgICAoISBjb250cm9sIHx8ICEgcC0+Y29udHJvbCB8fCBjb250cm9sID09IHAtPmNvbnRyb2wpKSB7Ci0JCQkvKgotCQkJcHJpbnRrKEtFUk5fREVCVUcgImlnbm9yZWQgY29udHJvbCAlZDolZFxuIiwKLQkJCSAgICAgICB1bml0aWQsIGNvbnRyb2wpOwotCQkJKi8KLQkJCXJldHVybiAxOwotCQl9CisJcmV0dXJuIDE7Cit9CisKKy8qIGRCIG1hcHBpbmcgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19tYXBwZWRfZEIoY29uc3Qgc3RydWN0IHVzYm1peF9uYW1lX21hcCAqcCwKKwkJCQkgICBzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCkKK3sKKwlpZiAocCAmJiBwLT5kQikgeworCQljdmFsLT5kQm1pbiA9IHAtPmRCLT5taW47CisJCWN2YWwtPmRCbWF4ID0gcC0+ZEItPm1heDsKIAl9Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIGdldCB0aGUgbWFwcGVkIHNlbGVjdG9yIHNvdXJjZSBuYW1lICovCkBAIC0yNTcsNyArMjg2LDcgQEAKIAlwID0gTlVMTDsKIAl3aGlsZSAoKHAgPSBzbmRfdXNiX2ZpbmRfZGVzYyhzdGF0ZS0+YnVmZmVyLCBzdGF0ZS0+YnVmbGVuLCBwLAogCQkJCSAgICAgIFVTQl9EVF9DU19JTlRFUkZBQ0UpKSAhPSBOVUxMKSB7Ci0JCWlmIChwWzBdID49IDQgJiYgcFsyXSA+PSBJTlBVVF9URVJNSU5BTCAmJiBwWzJdIDw9IEVYVEVOU0lPTl9VTklUICYmIHBbM10gPT0gdW5pdCkKKwkJaWYgKHBbMF0gPj0gNCAmJiBwWzJdID49IFVBQ19JTlBVVF9URVJNSU5BTCAmJiBwWzJdIDw9IFVBQ19FWFRFTlNJT05fVU5JVF9WMSAmJiBwWzNdID09IHVuaXQpCiAJCQlyZXR1cm4gcDsKIAl9CiAJcmV0dXJuIE5VTEw7CkBAIC0zNzgsMTQgKzQwNywxNCBAQAogCiBzdGF0aWMgaW50IGdldF9jdXJfY3RsX3ZhbHVlKHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLCBpbnQgdmFsaWR4LCBpbnQgKnZhbHVlKQogewotCXJldHVybiBnZXRfY3RsX3ZhbHVlKGN2YWwsIEdFVF9DVVIsIHZhbGlkeCwgdmFsdWUpOworCXJldHVybiBnZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19HRVRfQ1VSLCB2YWxpZHgsIHZhbHVlKTsKIH0KIAogLyogY2hhbm5lbCA9IDA6IG1hc3RlciwgMSA9IGZpcnN0IGNoYW5uZWwgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGdldF9jdXJfbWl4X3JhdyhzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwKIAkJCQkgIGludCBjaGFubmVsLCBpbnQgKnZhbHVlKQogewotCXJldHVybiBnZXRfY3RsX3ZhbHVlKGN2YWwsIEdFVF9DVVIsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgY2hhbm5lbCwgdmFsdWUpOworCXJldHVybiBnZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19HRVRfQ1VSLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IGNoYW5uZWwsIHZhbHVlKTsKIH0KIAogc3RhdGljIGludCBnZXRfY3VyX21peF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwKQEAgLTQzOSwxNCArNDY4LDE0IEBACiAKIHN0YXRpYyBpbnQgc2V0X2N1cl9jdGxfdmFsdWUoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsIGludCB2YWxpZHgsIGludCB2YWx1ZSkKIHsKLQlyZXR1cm4gc2V0X2N0bF92YWx1ZShjdmFsLCBTRVRfQ1VSLCB2YWxpZHgsIHZhbHVlKTsKKwlyZXR1cm4gc2V0X2N0bF92YWx1ZShjdmFsLCBVQUNfU0VUX0NVUiwgdmFsaWR4LCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgc2V0X2N1cl9taXhfdmFsdWUoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsIGludCBjaGFubmVsLAogCQkJICAgICBpbnQgaW5kZXgsIGludCB2YWx1ZSkKIHsKIAlpbnQgZXJyOwotCWVyciA9IHNldF9jdGxfdmFsdWUoY3ZhbCwgU0VUX0NVUiwgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBjaGFubmVsLAorCWVyciA9IHNldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX1NFVF9DVVIsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgY2hhbm5lbCwKIAkJCSAgICB2YWx1ZSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC00NjYsMjAgKzQ5NSw4IEBACiAKIAlpZiAoc2l6ZSA8IHNpemVvZihzY2FsZSkpCiAJCXJldHVybiAtRU5PTUVNOwotCS8qIFVTQiBkZXNjcmlwdGlvbnMgY29udGFpbiB0aGUgZEIgc2NhbGUgaW4gMS8yNTYgZEIgdW5pdAotCSAqIHdoaWxlIEFMU0EgVExWIGNvbnRhaW5zIGluIDEvMTAwIGRCIHVuaXQKLQkgKi8KLQlzY2FsZVsyXSA9IChjb252ZXJ0X3NpZ25lZF92YWx1ZShjdmFsLCBjdmFsLT5taW4pICogMTAwKSAvIDI1NjsKLQlzY2FsZVszXSA9IChjb252ZXJ0X3NpZ25lZF92YWx1ZShjdmFsLCBjdmFsLT5tYXgpICogMTAwKSAvIDI1NjsKLQlpZiAoc2NhbGVbM10gPD0gc2NhbGVbMl0pIHsKLQkJLyogc29tZXRoaW5nIGlzIHdyb25nOyBhc3N1bWUgaXQncyBlaXRoZXIgZnJvbS90byAwZEIgKi8KLQkJaWYgKHNjYWxlWzJdIDwgMCkKLQkJCXNjYWxlWzNdID0gMDsKLQkJZWxzZSBpZiAoc2NhbGVbMl0gPiAwKQotCQkJc2NhbGVbMl0gPSAwOwotCQllbHNlIC8qIHRvdGFsbHkgY3JhcCwgcmV0dXJuIGFuIGVycm9yICovCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJc2NhbGVbMl0gPSBjdmFsLT5kQm1pbjsKKwlzY2FsZVszXSA9IGN2YWwtPmRCbWF4OwogCWlmIChjb3B5X3RvX3VzZXIoX3Rsdiwgc2NhbGUsIHNpemVvZihzY2FsZSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKQEAgLTU4OCwxMyArNjA1LDEzIEBACiAJCWlmICh0ZXJtX29ubHkpCiAJCQlyZXR1cm4gMDsKIAkJc3dpdGNoIChpdGVybS0+dHlwZSA+PiAxNikgewotCQljYXNlIFNFTEVDVE9SX1VOSVQ6CisJCWNhc2UgVUFDX1NFTEVDVE9SX1VOSVQ6CiAJCQlzdHJjcHkobmFtZSwgIlNlbGVjdG9yIik7IHJldHVybiA4OwotCQljYXNlIFBST0NFU1NJTkdfVU5JVDoKKwkJY2FzZSBVQUNfUFJPQ0VTU0lOR19VTklUX1YxOgogCQkJc3RyY3B5KG5hbWUsICJQcm9jZXNzIFVuaXQiKTsgcmV0dXJuIDEyOwotCQljYXNlIEVYVEVOU0lPTl9VTklUOgorCQljYXNlIFVBQ19FWFRFTlNJT05fVU5JVF9WMToKIAkJCXN0cmNweShuYW1lLCAiRXh0IFVuaXQiKTsgcmV0dXJuIDg7Ci0JCWNhc2UgTUlYRVJfVU5JVDoKKwkJY2FzZSBVQUNfTUlYRVJfVU5JVDoKIAkJCXN0cmNweShuYW1lLCAiTWl4ZXIiKTsgcmV0dXJuIDU7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gc3ByaW50ZihuYW1lLCAiVW5pdCAlZCIsIGl0ZXJtLT5pZCk7CkBAIC02MzMsMjIgKzY1MCwyMiBAQAogCXdoaWxlICgocDEgPSBmaW5kX2F1ZGlvX2NvbnRyb2xfdW5pdChzdGF0ZSwgaWQpKSAhPSBOVUxMKSB7CiAJCXRlcm0tPmlkID0gaWQ7CiAJCXN3aXRjaCAocDFbMl0pIHsKLQkJY2FzZSBJTlBVVF9URVJNSU5BTDoKKwkJY2FzZSBVQUNfSU5QVVRfVEVSTUlOQUw6CiAJCQl0ZXJtLT50eXBlID0gY29tYmluZV93b3JkKHAxICsgNCk7CiAJCQl0ZXJtLT5jaGFubmVscyA9IHAxWzddOwogCQkJdGVybS0+Y2hjb25maWcgPSBjb21iaW5lX3dvcmQocDEgKyA4KTsKIAkJCXRlcm0tPm5hbWUgPSBwMVsxMV07CiAJCQlyZXR1cm4gMDsKLQkJY2FzZSBGRUFUVVJFX1VOSVQ6CisJCWNhc2UgVUFDX0ZFQVRVUkVfVU5JVDoKIAkJCWlkID0gcDFbNF07CiAJCQlicmVhazsgLyogY29udGludWUgdG8gcGFyc2UgKi8KLQkJY2FzZSBNSVhFUl9VTklUOgorCQljYXNlIFVBQ19NSVhFUl9VTklUOgogCQkJdGVybS0+dHlwZSA9IHAxWzJdIDw8IDE2OyAvKiB2aXJ0dWFsIHR5cGUgKi8KIAkJCXRlcm0tPmNoYW5uZWxzID0gcDFbNSArIHAxWzRdXTsKIAkJCXRlcm0tPmNoY29uZmlnID0gY29tYmluZV93b3JkKHAxICsgNiArIHAxWzRdKTsKIAkJCXRlcm0tPm5hbWUgPSBwMVtwMVswXSAtIDFdOwogCQkJcmV0dXJuIDA7Ci0JCWNhc2UgU0VMRUNUT1JfVU5JVDoKKwkJY2FzZSBVQUNfU0VMRUNUT1JfVU5JVDoKIAkJCS8qIGNhbGwgcmVjdXJzaXZlbHkgdG8gcmV0cmlldmUgdGhlIGNoYW5uZWwgaW5mbyAqLwogCQkJaWYgKGNoZWNrX2lucHV0X3Rlcm0oc3RhdGUsIHAxWzVdLCB0ZXJtKSA8IDApCiAJCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC02NTYsOCArNjczLDggQEAKIAkJCXRlcm0tPmlkID0gaWQ7CiAJCQl0ZXJtLT5uYW1lID0gcDFbOSArIHAxWzBdIC0gMV07CiAJCQlyZXR1cm4gMDsKLQkJY2FzZSBQUk9DRVNTSU5HX1VOSVQ6Ci0JCWNhc2UgRVhURU5TSU9OX1VOSVQ6CisJCWNhc2UgVUFDX1BST0NFU1NJTkdfVU5JVF9WMToKKwkJY2FzZSBVQUNfRVhURU5TSU9OX1VOSVRfVjE6CiAJCQlpZiAocDFbNl0gPT0gMSkgewogCQkJCWlkID0gcDFbN107CiAJCQkJYnJlYWs7IC8qIGNvbnRpbnVlIHRvIHBhcnNlICovCkBAIC03MjAsNiArNzM3LDcgQEAKIAljdmFsLT5taW4gPSBkZWZhdWx0X21pbjsKIAljdmFsLT5tYXggPSBjdmFsLT5taW4gKyAxOwogCWN2YWwtPnJlcyA9IDE7CisJY3ZhbC0+ZEJtaW4gPSBjdmFsLT5kQm1heCA9IDA7CiAKIAlpZiAoY3ZhbC0+dmFsX3R5cGUgPT0gVVNCX01JWEVSX0JPT0xFQU4gfHwKIAkgICAgY3ZhbC0+dmFsX3R5cGUgPT0gVVNCX01JWEVSX0lOVl9CT09MRUFOKSB7CkBAIC03MzQsMjMgKzc1MiwyMyBAQAogCQkJCQlicmVhazsKIAkJCQl9CiAJCX0KLQkJaWYgKGdldF9jdGxfdmFsdWUoY3ZhbCwgR0VUX01BWCwgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBtaW5jaG4sICZjdmFsLT5tYXgpIDwgMCB8fAotCQkgICAgZ2V0X2N0bF92YWx1ZShjdmFsLCBHRVRfTUlOLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPm1pbikgPCAwKSB7CisJCWlmIChnZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19HRVRfTUFYLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPm1heCkgPCAwIHx8CisJCSAgICBnZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19HRVRfTUlOLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPm1pbikgPCAwKSB7CiAJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICIlZDolZDogY2Fubm90IGdldCBtaW4vbWF4IHZhbHVlcyBmb3IgY29udHJvbCAlZCAoaWQgJWQpXG4iLAogCQkJCSAgIGN2YWwtPmlkLCBjdmFsLT5taXhlci0+Y3RybGlmLCBjdmFsLT5jb250cm9sLCBjdmFsLT5pZCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAoZ2V0X2N0bF92YWx1ZShjdmFsLCBHRVRfUkVTLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPnJlcykgPCAwKSB7CisJCWlmIChnZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19HRVRfUkVTLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPnJlcykgPCAwKSB7CiAJCQljdmFsLT5yZXMgPSAxOwogCQl9IGVsc2UgewogCQkJaW50IGxhc3RfdmFsaWRfcmVzID0gY3ZhbC0+cmVzOwogCiAJCQl3aGlsZSAoY3ZhbC0+cmVzID4gMSkgewotCQkJCWlmIChzZXRfY3RsX3ZhbHVlKGN2YWwsIFNFVF9SRVMsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCBjdmFsLT5yZXMgLyAyKSA8IDApCisJCQkJaWYgKHNldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX1NFVF9SRVMsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCBjdmFsLT5yZXMgLyAyKSA8IDApCiAJCQkJCWJyZWFrOwogCQkJCWN2YWwtPnJlcyAvPSAyOwogCQkJfQotCQkJaWYgKGdldF9jdGxfdmFsdWUoY3ZhbCwgR0VUX1JFUywgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBtaW5jaG4sICZjdmFsLT5yZXMpIDwgMCkKKwkJCWlmIChnZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19HRVRfUkVTLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPnJlcykgPCAwKQogCQkJCWN2YWwtPnJlcyA9IGxhc3RfdmFsaWRfcmVzOwogCQl9CiAJCWlmIChjdmFsLT5yZXMgPT0gMCkKQEAgLTc4Nyw2ICs4MDUsMjQgQEAKIAogCQljdmFsLT5pbml0aWFsaXplZCA9IDE7CiAJfQorCisJLyogVVNCIGRlc2NyaXB0aW9ucyBjb250YWluIHRoZSBkQiBzY2FsZSBpbiAxLzI1NiBkQiB1bml0CisJICogd2hpbGUgQUxTQSBUTFYgY29udGFpbnMgaW4gMS8xMDAgZEIgdW5pdAorCSAqLworCWN2YWwtPmRCbWluID0gKGNvbnZlcnRfc2lnbmVkX3ZhbHVlKGN2YWwsIGN2YWwtPm1pbikgKiAxMDApIC8gMjU2OworCWN2YWwtPmRCbWF4ID0gKGNvbnZlcnRfc2lnbmVkX3ZhbHVlKGN2YWwsIGN2YWwtPm1heCkgKiAxMDApIC8gMjU2OworCWlmIChjdmFsLT5kQm1pbiA+IGN2YWwtPmRCbWF4KSB7CisJCS8qIHNvbWV0aGluZyBpcyB3cm9uZzsgYXNzdW1lIGl0J3MgZWl0aGVyIGZyb20vdG8gMGRCICovCisJCWlmIChjdmFsLT5kQm1pbiA8IDApCisJCQljdmFsLT5kQm1heCA9IDA7CisJCWVsc2UgaWYgKGN2YWwtPmRCbWluID4gMCkKKwkJCWN2YWwtPmRCbWluID0gMDsKKwkJaWYgKGN2YWwtPmRCbWluID4gY3ZhbC0+ZEJtYXgpIHsKKwkJCS8qIHRvdGFsbHkgY3JhcCwgcmV0dXJuIGFuIGVycm9yICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwogCXJldHVybiAwOwogfQogCkBAIC05MTIsNiArOTQ4LDcgQEAKIAlpbnQgbmFtZWlkID0gZGVzY1tkZXNjWzBdIC0gMV07CiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKIAlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbDsKKwljb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICptYXA7CiAKIAljb250cm9sKys7IC8qIGNoYW5nZSBmcm9tIHplcm8tYmFzZWQgdG8gMS1iYXNlZCB2YWx1ZSAqLwogCkBAIC05MjAsNyArOTU3LDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChjaGVja19pZ25vcmVkX2N0bChzdGF0ZSwgdW5pdGlkLCBjb250cm9sKSkKKwltYXAgPSBmaW5kX21hcChzdGF0ZSwgdW5pdGlkLCBjb250cm9sKTsKKwlpZiAoY2hlY2tfaWdub3JlZF9jdGwobWFwKSkKIAkJcmV0dXJuOwogCiAJY3ZhbCA9IGt6YWxsb2Moc2l6ZW9mKCpjdmFsKSwgR0ZQX0tFUk5FTCk7CkBAIC05NTQsMTAgKzk5MiwxMSBAQAogCX0KIAlrY3RsLT5wcml2YXRlX2ZyZWUgPSB1c2JfbWl4ZXJfZWxlbV9mcmVlOwogCi0JbGVuID0gY2hlY2tfbWFwcGVkX25hbWUoc3RhdGUsIHVuaXRpZCwgY29udHJvbCwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwlsZW4gPSBjaGVja19tYXBwZWRfbmFtZShtYXAsIGtjdGwtPmlkLm5hbWUsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CiAJbWFwcGVkX25hbWUgPSBsZW4gIT0gMDsKIAlpZiAoISBsZW4gJiYgbmFtZWlkKQotCQlsZW4gPSBzbmRfdXNiX2NvcHlfc3RyaW5nX2Rlc2Moc3RhdGUsIG5hbWVpZCwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwkJbGVuID0gc25kX3VzYl9jb3B5X3N0cmluZ19kZXNjKHN0YXRlLCBuYW1laWQsCisJCQkJa2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKIAogCXN3aXRjaCAoY29udHJvbCkgewogCWNhc2UgVVNCX0ZFQVRVUkVfTVVURToKQEAgLTk5NSw2ICsxMDM0LDcgQEAKIAkJCWtjdGwtPnZkWzBdLmFjY2VzcyB8PSAKIAkJCQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQgfAogCQkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ0FMTEJBQ0s7CisJCQljaGVja19tYXBwZWRfZEIobWFwLCBjdmFsKTsKIAkJfQogCQlicmVhazsKIApAQCAtMTA0OCwyOSArMTA4OCwzMCBAQAogICoKICAqIG1vc3Qgb2YgY29udHJvbGxzIGFyZSBkZWZpbmVkIGhlcmUuCiAgKi8KLXN0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZmVhdHVyZV91bml0KHN0cnVjdCBtaXhlcl9idWlsZCAqc3RhdGUsIGludCB1bml0aWQsIHVuc2lnbmVkIGNoYXIgKmZ0cikKK3N0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZmVhdHVyZV91bml0KHN0cnVjdCBtaXhlcl9idWlsZCAqc3RhdGUsIGludCB1bml0aWQsIHZvaWQgKl9mdHIpCiB7CiAJaW50IGNoYW5uZWxzLCBpLCBqOwogCXN0cnVjdCB1c2JfYXVkaW9fdGVybSBpdGVybTsKIAl1bnNpZ25lZCBpbnQgbWFzdGVyX2JpdHMsIGZpcnN0X2NoX2JpdHM7CiAJaW50IGVyciwgY3NpemU7CisJc3RydWN0IHVhY19mZWF0dXJlX3VuaXRfZGVzY3JpcHRvciAqZnRyID0gX2Z0cjsKIAotCWlmIChmdHJbMF0gPCA3IHx8ICEgKGNzaXplID0gZnRyWzVdKSB8fCBmdHJbMF0gPCA3ICsgY3NpemUpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IGludmFsaWQgRkVBVFVSRV9VTklUIGRlc2NyaXB0b3JcbiIsIHVuaXRpZCk7CisJaWYgKGZ0ci0+Ykxlbmd0aCA8IDcgfHwgISAoY3NpemUgPSBmdHItPmJDb250cm9sU2l6ZSkgfHwgZnRyLT5iTGVuZ3RoIDwgNyArIGNzaXplKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB1bml0ICV1OiBpbnZhbGlkIFVBQ19GRUFUVVJFX1VOSVQgZGVzY3JpcHRvclxuIiwgdW5pdGlkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogcGFyc2UgdGhlIHNvdXJjZSB1bml0ICovCi0JaWYgKChlcnIgPSBwYXJzZV9hdWRpb191bml0KHN0YXRlLCBmdHJbNF0pKSA8IDApCisJaWYgKChlcnIgPSBwYXJzZV9hdWRpb191bml0KHN0YXRlLCBmdHItPmJTb3VyY2VJRCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAogCS8qIGRldGVybWluZSB0aGUgaW5wdXQgc291cmNlIHR5cGUgYW5kIG5hbWUgKi8KLQlpZiAoY2hlY2tfaW5wdXRfdGVybShzdGF0ZSwgZnRyWzRdLCAmaXRlcm0pIDwgMCkKKwlpZiAoY2hlY2tfaW5wdXRfdGVybShzdGF0ZSwgZnRyLT5iU291cmNlSUQsICZpdGVybSkgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWNoYW5uZWxzID0gKGZ0clswXSAtIDcpIC8gY3NpemUgLSAxOworCWNoYW5uZWxzID0gKGZ0ci0+Ykxlbmd0aCAtIDcpIC8gY3NpemUgLSAxOwogCi0JbWFzdGVyX2JpdHMgPSBzbmRfdXNiX2NvbWJpbmVfYnl0ZXMoZnRyICsgNiwgY3NpemUpOworCW1hc3Rlcl9iaXRzID0gc25kX3VzYl9jb21iaW5lX2J5dGVzKGZ0ci0+Y29udHJvbHMsIGNzaXplKTsKIAkvKiBtYXN0ZXIgY29uZmlndXJhdGlvbiBxdWlya3MgKi8KIAlzd2l0Y2ggKHN0YXRlLT5jaGlwLT51c2JfaWQpIHsKIAljYXNlIFVTQl9JRCgweDA4YmIsIDB4MjcwMik6CkBAIC0xMDgxLDIxICsxMTIyLDIxIEBACiAJCWJyZWFrOwogCX0KIAlpZiAoY2hhbm5lbHMgPiAwKQotCQlmaXJzdF9jaF9iaXRzID0gc25kX3VzYl9jb21iaW5lX2J5dGVzKGZ0ciArIDYgKyBjc2l6ZSwgY3NpemUpOworCQlmaXJzdF9jaF9iaXRzID0gc25kX3VzYl9jb21iaW5lX2J5dGVzKGZ0ci0+Y29udHJvbHMgKyBjc2l6ZSwgY3NpemUpOwogCWVsc2UKIAkJZmlyc3RfY2hfYml0cyA9IDA7CiAJLyogY2hlY2sgYWxsIGNvbnRyb2wgdHlwZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgY2hfYml0cyA9IDA7CiAJCWZvciAoaiA9IDA7IGogPCBjaGFubmVsczsgaisrKSB7Ci0JCQl1bnNpZ25lZCBpbnQgbWFzayA9IHNuZF91c2JfY29tYmluZV9ieXRlcyhmdHIgKyA2ICsgY3NpemUgKiAoaisxKSwgY3NpemUpOworCQkJdW5zaWduZWQgaW50IG1hc2sgPSBzbmRfdXNiX2NvbWJpbmVfYnl0ZXMoZnRyLT5jb250cm9scyArIGNzaXplICogKGorMSksIGNzaXplKTsKIAkJCWlmIChtYXNrICYgKDEgPDwgaSkpCiAJCQkJY2hfYml0cyB8PSAoMSA8PCBqKTsKIAkJfQogCQlpZiAoY2hfYml0cyAmIDEpIC8qIHRoZSBmaXJzdCBjaGFubmVsIG11c3QgYmUgc2V0IChmb3IgZWFzZSBvZiBwcm9ncmFtbWluZykgKi8KLQkJCWJ1aWxkX2ZlYXR1cmVfY3RsKHN0YXRlLCBmdHIsIGNoX2JpdHMsIGksICZpdGVybSwgdW5pdGlkKTsKKwkJCWJ1aWxkX2ZlYXR1cmVfY3RsKHN0YXRlLCBfZnRyLCBjaF9iaXRzLCBpLCAmaXRlcm0sIHVuaXRpZCk7CiAJCWlmIChtYXN0ZXJfYml0cyAmICgxIDw8IGkpKQotCQkJYnVpbGRfZmVhdHVyZV9jdGwoc3RhdGUsIGZ0ciwgMCwgaSwgJml0ZXJtLCB1bml0aWQpOworCQkJYnVpbGRfZmVhdHVyZV9jdGwoc3RhdGUsIF9mdHIsIDAsIGksICZpdGVybSwgdW5pdGlkKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTExMjIsOCArMTE2MywxMCBAQAogCXVuc2lnbmVkIGludCBudW1fb3V0cyA9IGRlc2NbNSArIGlucHV0X3BpbnNdOwogCXVuc2lnbmVkIGludCBpLCBsZW47CiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwljb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICptYXA7CiAKLQlpZiAoY2hlY2tfaWdub3JlZF9jdGwoc3RhdGUsIHVuaXRpZCwgMCkpCisJbWFwID0gZmluZF9tYXAoc3RhdGUsIHVuaXRpZCwgMCk7CisJaWYgKGNoZWNrX2lnbm9yZWRfY3RsKG1hcCkpCiAJCXJldHVybjsKIAogCWN2YWwgPSBremFsbG9jKHNpemVvZigqY3ZhbCksIEdGUF9LRVJORUwpOwpAQCAtMTE1Miw3ICsxMTk1LDcgQEAKIAl9CiAJa2N0bC0+cHJpdmF0ZV9mcmVlID0gdXNiX21peGVyX2VsZW1fZnJlZTsKIAotCWxlbiA9IGNoZWNrX21hcHBlZF9uYW1lKHN0YXRlLCB1bml0aWQsIDAsIGtjdGwtPmlkLm5hbWUsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CisJbGVuID0gY2hlY2tfbWFwcGVkX25hbWUobWFwLCBrY3RsLT5pZC5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOwogCWlmICghIGxlbikKIAkJbGVuID0gZ2V0X3Rlcm1fbmFtZShzdGF0ZSwgaXRlcm0sIGtjdGwtPmlkLm5hbWUsIHNpemVvZihrY3RsLT5pZC5uYW1lKSwgMCk7CiAJaWYgKCEgbGVuKQpAQCAtMTMzMCw3ICsxMzczLDMyIEBACiAJeyBVU0JfUFJPQ19EQ1IsICJEQ1IiLCBkY3JfcHJvY19pbmZvIH0sCiAJeyAwIH0sCiB9OwotCisvKgorICogcHJlZGVmaW5lZCBkYXRhIGZvciBleHRlbnNpb24gdW5pdHMKKyAqLworc3RhdGljIHN0cnVjdCBwcm9jdW5pdF92YWx1ZV9pbmZvIGNsb2NrX3JhdGVfeHVfaW5mb1tdID0geworICAgICAgIHsgVVNCX1hVX0NMT0NLX1JBVEVfU0VMRUNUT1IsICJTZWxlY3RvciIsIFVTQl9NSVhFUl9VOCwgMCB9LAorICAgICAgIHsgMCB9Cit9Oworc3RhdGljIHN0cnVjdCBwcm9jdW5pdF92YWx1ZV9pbmZvIGNsb2NrX3NvdXJjZV94dV9pbmZvW10gPSB7CisJeyBVU0JfWFVfQ0xPQ0tfU09VUkNFX1NFTEVDVE9SLCAiRXh0ZXJuYWwiLCBVU0JfTUlYRVJfQk9PTEVBTiB9LAorCXsgMCB9Cit9Oworc3RhdGljIHN0cnVjdCBwcm9jdW5pdF92YWx1ZV9pbmZvIHNwZGlmX2Zvcm1hdF94dV9pbmZvW10gPSB7CisJeyBVU0JfWFVfRElHSVRBTF9GT1JNQVRfU0VMRUNUT1IsICJTUERJRi9BQzMiLCBVU0JfTUlYRVJfQk9PTEVBTiB9LAorCXsgMCB9Cit9Oworc3RhdGljIHN0cnVjdCBwcm9jdW5pdF92YWx1ZV9pbmZvIHNvZnRfbGltaXRfeHVfaW5mb1tdID0geworCXsgVVNCX1hVX1NPRlRfTElNSVRfU0VMRUNUT1IsICIgIiwgVVNCX01JWEVSX0JPT0xFQU4gfSwKKwl7IDAgfQorfTsKK3N0YXRpYyBzdHJ1Y3QgcHJvY3VuaXRfaW5mbyBleHR1bml0c1tdID0geworCXsgVVNCX1hVX0NMT0NLX1JBVEUsICJDbG9jayByYXRlIiwgY2xvY2tfcmF0ZV94dV9pbmZvIH0sCisJeyBVU0JfWFVfQ0xPQ0tfU09VUkNFLCAiRGlnaXRhbEluIENMSyBzb3VyY2UiLCBjbG9ja19zb3VyY2VfeHVfaW5mbyB9LAorCXsgVVNCX1hVX0RJR0lUQUxfSU9fU1RBVFVTLCAiRGlnaXRhbE91dCBmb3JtYXQ6Iiwgc3BkaWZfZm9ybWF0X3h1X2luZm8gfSwKKwl7IFVTQl9YVV9ERVZJQ0VfT1BUSU9OUywgIkFuYWxvZ3VlSW4gU29mdCBMaW1pdCIsIHNvZnRfbGltaXRfeHVfaW5mbyB9LAorCXsgMCB9Cit9OwogLyoKICAqIGJ1aWxkIGEgcHJvY2Vzc2luZy9leHRlbnNpb24gdW5pdAogICovCkBAIC0xMzQyLDYgKzE0MTAsNyBAQAogCWludCBpLCBlcnIsIG5hbWVpZCwgdHlwZSwgbGVuOwogCXN0cnVjdCBwcm9jdW5pdF9pbmZvICppbmZvOwogCXN0cnVjdCBwcm9jdW5pdF92YWx1ZV9pbmZvICp2YWxpbmZvOworCWNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKm1hcDsKIAlzdGF0aWMgc3RydWN0IHByb2N1bml0X3ZhbHVlX2luZm8gZGVmYXVsdF92YWx1ZV9pbmZvW10gPSB7CiAJCXsgMHgwMSwgIlN3aXRjaCIsIFVTQl9NSVhFUl9CT09MRUFOIH0sCiAJCXsgMCB9CkBAIC0xMzcxLDcgKzE0NDAsOCBAQAogCQkvKiBGSVhNRTogYml0bWFwIG1pZ2h0IGJlIGxvbmdlciB0aGFuIDhiaXQgKi8KIAkJaWYgKCEgKGRzY1sxMiArIG51bV9pbnNdICYgKDEgPDwgKHZhbGluZm8tPmNvbnRyb2wgLSAxKSkpKQogCQkJY29udGludWU7Ci0JCWlmIChjaGVja19pZ25vcmVkX2N0bChzdGF0ZSwgdW5pdGlkLCB2YWxpbmZvLT5jb250cm9sKSkKKwkJbWFwID0gZmluZF9tYXAoc3RhdGUsIHVuaXRpZCwgdmFsaW5mby0+Y29udHJvbCk7CisJCWlmIChjaGVja19pZ25vcmVkX2N0bChtYXApKQogCQkJY29udGludWU7CiAJCWN2YWwgPSBremFsbG9jKHNpemVvZigqY3ZhbCksIEdGUF9LRVJORUwpOwogCQlpZiAoISBjdmFsKSB7CkBAIC0xMzkxLDggKzE0NjEsMTggQEAKIAkJCWN2YWwtPm1heCA9IGRzY1sxNV07CiAJCQljdmFsLT5yZXMgPSAxOwogCQkJY3ZhbC0+aW5pdGlhbGl6ZWQgPSAxOwotCQl9IGVsc2UKLQkJCWdldF9taW5fbWF4KGN2YWwsIHZhbGluZm8tPm1pbl92YWx1ZSk7CisJCX0gZWxzZSB7CisJCQlpZiAodHlwZSA9PSBVU0JfWFVfQ0xPQ0tfUkFURSkgeworCQkJCS8qIEUtTXUgVVNCIDA0MDQvMDIwMi9UcmFja2VyUHJlCisJCQkJICogc2FtcGxlcmF0ZSBjb250cm9sIHF1aXJrCisJCQkJICovCisJCQkJY3ZhbC0+bWluID0gMDsKKwkJCQljdmFsLT5tYXggPSA1OworCQkJCWN2YWwtPnJlcyA9IDE7CisJCQkJY3ZhbC0+aW5pdGlhbGl6ZWQgPSAxOworCQkJfSBlbHNlCisJCQkJZ2V0X21pbl9tYXgoY3ZhbCwgdmFsaW5mby0+bWluX3ZhbHVlKTsKKwkJfQogCiAJCWtjdGwgPSBzbmRfY3RsX25ldzEoJm1peGVyX3Byb2N1bml0X2N0bCwgY3ZhbCk7CiAJCWlmICghIGtjdGwpIHsKQEAgLTE0MDIsOCArMTQ4Miw5IEBACiAJCX0KIAkJa2N0bC0+cHJpdmF0ZV9mcmVlID0gdXNiX21peGVyX2VsZW1fZnJlZTsKIAotCQlpZiAoY2hlY2tfbWFwcGVkX25hbWUoc3RhdGUsIHVuaXRpZCwgY3ZhbC0+Y29udHJvbCwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKSkKLQkJCTsKKwkJaWYgKGNoZWNrX21hcHBlZF9uYW1lKG1hcCwga2N0bC0+aWQubmFtZSwKKwkJCQkJCXNpemVvZihrY3RsLT5pZC5uYW1lKSkpCisJCQkvKiBub3RoaW5nICovIDsKIAkJZWxzZSBpZiAoaW5mby0+bmFtZSkKIAkJCXN0cmxjcHkoa2N0bC0+aWQubmFtZSwgaW5mby0+bmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKIAkJZWxzZSB7CkBAIC0xNDMzLDcgKzE1MTQsNyBAQAogCiBzdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2V4dGVuc2lvbl91bml0KHN0cnVjdCBtaXhlcl9idWlsZCAqc3RhdGUsIGludCB1bml0aWQsIHVuc2lnbmVkIGNoYXIgKmRlc2MpCiB7Ci0JcmV0dXJuIGJ1aWxkX2F1ZGlvX3Byb2N1bml0KHN0YXRlLCB1bml0aWQsIGRlc2MsIE5VTEwsICJFeHRlbnNpb24gVW5pdCIpOworCXJldHVybiBidWlsZF9hdWRpb19wcm9jdW5pdChzdGF0ZSwgdW5pdGlkLCBkZXNjLCBleHR1bml0cywgIkV4dGVuc2lvbiBVbml0Iik7CiB9CiAKIApAQCAtMTU0Miw2ICsxNjIzLDcgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CisJY29uc3Qgc3RydWN0IHVzYm1peF9uYW1lX21hcCAqbWFwOwogCWNoYXIgKipuYW1lbGlzdDsKIAogCWlmICghIG51bV9pbnMgfHwgZGVzY1swXSA8IDUgKyBudW1faW5zKSB7CkBAIC0xNTU3LDcgKzE2MzksOCBAQAogCWlmIChudW1faW5zID09IDEpIC8qIG9ubHkgb25lID8gbm9uc2Vuc2UhICovCiAJCXJldHVybiAwOwogCi0JaWYgKGNoZWNrX2lnbm9yZWRfY3RsKHN0YXRlLCB1bml0aWQsIDApKQorCW1hcCA9IGZpbmRfbWFwKHN0YXRlLCB1bml0aWQsIDApOworCWlmIChjaGVja19pZ25vcmVkX2N0bChtYXApKQogCQlyZXR1cm4gMDsKIAogCWN2YWwgPSBremFsbG9jKHNpemVvZigqY3ZhbCksIEdGUF9LRVJORUwpOwpAQCAtMTYxMiw3ICsxNjk1LDcgQEAKIAlrY3RsLT5wcml2YXRlX2ZyZWUgPSB1c2JfbWl4ZXJfc2VsZWN0b3JfZWxlbV9mcmVlOwogCiAJbmFtZWlkID0gZGVzY1tkZXNjWzBdIC0gMV07Ci0JbGVuID0gY2hlY2tfbWFwcGVkX25hbWUoc3RhdGUsIHVuaXRpZCwgMCwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwlsZW4gPSBjaGVja19tYXBwZWRfbmFtZShtYXAsIGtjdGwtPmlkLm5hbWUsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CiAJaWYgKGxlbikKIAkJOwogCWVsc2UgaWYgKG5hbWVpZCkKQEAgLTE2NTYsMTcgKzE3MzksMTcgQEAKIAl9CiAKIAlzd2l0Y2ggKHAxWzJdKSB7Ci0JY2FzZSBJTlBVVF9URVJNSU5BTDoKKwljYXNlIFVBQ19JTlBVVF9URVJNSU5BTDoKIAkJcmV0dXJuIDA7IC8qIE5PUCAqLwotCWNhc2UgTUlYRVJfVU5JVDoKKwljYXNlIFVBQ19NSVhFUl9VTklUOgogCQlyZXR1cm4gcGFyc2VfYXVkaW9fbWl4ZXJfdW5pdChzdGF0ZSwgdW5pdGlkLCBwMSk7Ci0JY2FzZSBTRUxFQ1RPUl9VTklUOgorCWNhc2UgVUFDX1NFTEVDVE9SX1VOSVQ6CiAJCXJldHVybiBwYXJzZV9hdWRpb19zZWxlY3Rvcl91bml0KHN0YXRlLCB1bml0aWQsIHAxKTsKLQljYXNlIEZFQVRVUkVfVU5JVDoKKwljYXNlIFVBQ19GRUFUVVJFX1VOSVQ6CiAJCXJldHVybiBwYXJzZV9hdWRpb19mZWF0dXJlX3VuaXQoc3RhdGUsIHVuaXRpZCwgcDEpOwotCWNhc2UgUFJPQ0VTU0lOR19VTklUOgorCWNhc2UgVUFDX1BST0NFU1NJTkdfVU5JVF9WMToKIAkJcmV0dXJuIHBhcnNlX2F1ZGlvX3Byb2Nlc3NpbmdfdW5pdChzdGF0ZSwgdW5pdGlkLCBwMSk7Ci0JY2FzZSBFWFRFTlNJT05fVU5JVDoKKwljYXNlIFVBQ19FWFRFTlNJT05fVU5JVF9WMToKIAkJcmV0dXJuIHBhcnNlX2F1ZGlvX2V4dGVuc2lvbl91bml0KHN0YXRlLCB1bml0aWQsIHAxKTsKIAlkZWZhdWx0OgogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAldTogdW5leHBlY3RlZCB0eXBlIDB4JTAyeFxuIiwgdW5pdGlkLCBwMVsyXSk7CkBAIC0xNjk2LDExICsxNzc5LDExIEBACiAvKgogICogY3JlYXRlIG1peGVyIGNvbnRyb2xzCiAgKgotICogd2FsayB0aHJvdWdoIGFsbCBPVVRQVVRfVEVSTUlOQUwgZGVzY3JpcHRvcnMgdG8gc2VhcmNoIGZvciBtaXhlcnMKKyAqIHdhbGsgdGhyb3VnaCBhbGwgVUFDX09VVFBVVF9URVJNSU5BTCBkZXNjcmlwdG9ycyB0byBzZWFyY2ggZm9yIG1peGVycwogICovCiBzdGF0aWMgaW50IHNuZF91c2JfbWl4ZXJfY29udHJvbHMoc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyKQogewotCXVuc2lnbmVkIGNoYXIgKmRlc2M7CisJc3RydWN0IHVhY19vdXRwdXRfdGVybWluYWxfZGVzY3JpcHRvcl92MSAqZGVzYzsKIAlzdHJ1Y3QgbWl4ZXJfYnVpbGQgc3RhdGU7CiAJaW50IGVycjsKIAljb25zdCBzdHJ1Y3QgdXNibWl4X2N0bF9tYXAgKm1hcDsKQEAgLTE3MjQsMTQgKzE4MDcsMTQgQEAKIAl9CiAKIAlkZXNjID0gTlVMTDsKLQl3aGlsZSAoKGRlc2MgPSBzbmRfdXNiX2ZpbmRfY3NpbnRfZGVzYyhob3N0aWYtPmV4dHJhLCBob3N0aWYtPmV4dHJhbGVuLCBkZXNjLCBPVVRQVVRfVEVSTUlOQUwpKSAhPSBOVUxMKSB7Ci0JCWlmIChkZXNjWzBdIDwgOSkKKwl3aGlsZSAoKGRlc2MgPSBzbmRfdXNiX2ZpbmRfY3NpbnRfZGVzYyhob3N0aWYtPmV4dHJhLCBob3N0aWYtPmV4dHJhbGVuLCBkZXNjLCBVQUNfT1VUUFVUX1RFUk1JTkFMKSkgIT0gTlVMTCkgeworCQlpZiAoZGVzYy0+Ykxlbmd0aCA8IDkpCiAJCQljb250aW51ZTsgLyogaW52YWxpZCBkZXNjcmlwdG9yPyAqLwotCQlzZXRfYml0KGRlc2NbM10sIHN0YXRlLnVuaXRiaXRtYXApOyAgLyogbWFyayB0ZXJtaW5hbCBJRCBhcyB2aXNpdGVkICovCi0JCXN0YXRlLm90ZXJtLmlkID0gZGVzY1szXTsKLQkJc3RhdGUub3Rlcm0udHlwZSA9IGNvbWJpbmVfd29yZCgmZGVzY1s0XSk7Ci0JCXN0YXRlLm90ZXJtLm5hbWUgPSBkZXNjWzhdOwotCQllcnIgPSBwYXJzZV9hdWRpb191bml0KCZzdGF0ZSwgZGVzY1s3XSk7CisJCXNldF9iaXQoZGVzYy0+YlRlcm1pbmFsSUQsIHN0YXRlLnVuaXRiaXRtYXApOyAgLyogbWFyayB0ZXJtaW5hbCBJRCBhcyB2aXNpdGVkICovCisJCXN0YXRlLm90ZXJtLmlkID0gZGVzYy0+YlRlcm1pbmFsSUQ7CisJCXN0YXRlLm90ZXJtLnR5cGUgPSBsZTE2X3RvX2NwdShkZXNjLT53VGVybWluYWxUeXBlKTsKKwkJc3RhdGUub3Rlcm0ubmFtZSA9IGRlc2MtPmlUZXJtaW5hbDsKKwkJZXJyID0gcGFyc2VfYXVkaW9fdW5pdCgmc3RhdGUsIGRlc2MtPmJTb3VyY2VJRCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0xNzQ4LDYgKzE4MzEsNDYgQEAKIAkJCSAgICAgICBpbmZvLT5lbGVtX2lkKTsKIH0KIAorc3RhdGljIHZvaWQgc25kX3VzYl9taXhlcl9kdW1wX2N2YWwoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLAorCQkJCSAgICBpbnQgdW5pdGlkLAorCQkJCSAgICBzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCkKK3sKKwlzdGF0aWMgY2hhciAqdmFsX3R5cGVzW10gPSB7IkJPT0xFQU4iLCAiSU5WX0JPT0xFQU4iLAorCQkJCSAgICAiUzgiLCAiVTgiLCAiUzE2IiwgIlUxNiJ9OworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgVW5pdDogJWlcbiIsIHVuaXRpZCk7CisJaWYgKGN2YWwtPmVsZW1faWQpCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBDb250cm9sOiBuYW1lPVwiJXNcIiwgaW5kZXg9JWlcbiIsCisJCQkJY3ZhbC0+ZWxlbV9pZC0+bmFtZSwgY3ZhbC0+ZWxlbV9pZC0+aW5kZXgpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBJbmZvOiBpZD0laSwgY29udHJvbD0laSwgY21hc2s9MHgleCwgIgorCQkJICAgICJjaGFubmVscz0laSwgdHlwZT1cIiVzXCJcbiIsIGN2YWwtPmlkLAorCQkJICAgIGN2YWwtPmNvbnRyb2wsIGN2YWwtPmNtYXNrLCBjdmFsLT5jaGFubmVscywKKwkJCSAgICB2YWxfdHlwZXNbY3ZhbC0+dmFsX3R5cGVdKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgICAgVm9sdW1lOiBtaW49JWksIG1heD0laSwgZEJtaW49JWksIGRCbWF4PSVpXG4iLAorCQkJICAgIGN2YWwtPm1pbiwgY3ZhbC0+bWF4LCBjdmFsLT5kQm1pbiwgY3ZhbC0+ZEJtYXgpOworfQorCitzdGF0aWMgdm9pZCBzbmRfdXNiX21peGVyX3Byb2NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAorCQkJCSAgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcjsKKwlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbDsKKwlpbnQgdW5pdGlkOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtaXhlciwgJmNoaXAtPm1peGVyX2xpc3QsIGxpc3QpIHsKKwkJc25kX2lwcmludGYoYnVmZmVyLAorCQkJIlVTQiBNaXhlcjogdXNiX2lkPTB4JTA4eCwgY3RybGlmPSVpLCBjdGxlcnI9JWlcbiIsCisJCQkJY2hpcC0+dXNiX2lkLCBtaXhlci0+Y3RybGlmLAorCQkJCW1peGVyLT5pZ25vcmVfY3RsX2Vycm9yKTsKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiQ2FyZDogJXNcbiIsIGNoaXAtPmNhcmQtPmxvbmduYW1lKTsKKwkJZm9yICh1bml0aWQgPSAwOyB1bml0aWQgPCBNQVhfSURfRUxFTVM7IHVuaXRpZCsrKSB7CisJCQlmb3IgKGN2YWwgPSBtaXhlci0+aWRfZWxlbXNbdW5pdGlkXTsgY3ZhbDsKKwkJCQkJCWN2YWwgPSBjdmFsLT5uZXh0X2lkX2VsZW0pCisJCQkJc25kX3VzYl9taXhlcl9kdW1wX2N2YWwoYnVmZmVyLCB1bml0aWQsIGN2YWwpOworCQl9CisJfQorfQorCiBzdGF0aWMgdm9pZCBzbmRfdXNiX21peGVyX21lbW9yeV9jaGFuZ2Uoc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyLAogCQkJCQlpbnQgdW5pdGlkKQogewpAQCAtMTkyNCw3ICsyMDQ3LDcgQEAKIAl9CiAJbWl4ZXItPnJjX3NldHVwX3BhY2tldC0+YlJlcXVlc3RUeXBlID0KIAkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKLQltaXhlci0+cmNfc2V0dXBfcGFja2V0LT5iUmVxdWVzdCA9IEdFVF9NRU07CisJbWl4ZXItPnJjX3NldHVwX3BhY2tldC0+YlJlcXVlc3QgPSBVQUNfR0VUX01FTTsKIAltaXhlci0+cmNfc2V0dXBfcGFja2V0LT53VmFsdWUgPSBjcHVfdG9fbGUxNigwKTsKIAltaXhlci0+cmNfc2V0dXBfcGFja2V0LT53SW5kZXggPSBjcHVfdG9fbGUxNigwKTsKIAltaXhlci0+cmNfc2V0dXBfcGFja2V0LT53TGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuKTsKQEAgLTIwNDcsNyArMjE3MCw3IEBACiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiVzOiAiLCBqYWNrc1tpXS5uYW1lKTsKIAkJZXJyID0gc25kX3VzYl9jdGxfbXNnKG1peGVyLT5jaGlwLT5kZXYsCiAJCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKG1peGVyLT5jaGlwLT5kZXYsIDApLAotCQkJCSAgICAgIEdFVF9NRU0sIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8CisJCQkJICAgICAgVUFDX0dFVF9NRU0sIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8CiAJCQkJICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMCwKIAkJCQkgICAgICBqYWNrc1tpXS51bml0aWQgPDwgOCwgYnVmLCAzLCAxMDApOwogCQlpZiAoZXJyID09IDMgJiYgKGJ1ZlswXSA9PSAzIHx8IGJ1ZlswXSA9PSA2KSkKQEAgLTIxMDksNiArMjIzMiwyNCBAQAogCXJldHVybiAwOwogfQogCit2b2lkIHNuZF9lbXV1c2Jfc2V0X3NhbXBsZXJhdGUoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciBzYW1wbGVyYXRlX2lkKQoreworCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcjsKKwlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbDsKKwlpbnQgdW5pdGlkID0gMTI7IC8qIFNhbWxlUmF0ZSBFeHRlbnNpb25Vbml0IElEICovCisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1peGVyLCAmY2hpcC0+bWl4ZXJfbGlzdCwgbGlzdCkgeworCQljdmFsID0gbWl4ZXItPmlkX2VsZW1zW3VuaXRpZF07CisJCWlmIChjdmFsKSB7CisJCQlzZXRfY3VyX2N0bF92YWx1ZShjdmFsLCBjdmFsLT5jb250cm9sIDw8IDgsCisJCQkJCSAgc2FtcGxlcmF0ZV9pZCk7CisJCQlzbmRfdXNiX21peGVyX25vdGlmeV9pZChtaXhlciwgdW5pdGlkKTsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKIGludCBzbmRfdXNiX2NyZWF0ZV9taXhlcihzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwgaW50IGN0cmxpZiwKIAkJCSBpbnQgaWdub3JlX2Vycm9yKQogewpAQCAtMjExNiw3ICsyMjU3LDkgQEAKIAkJLmRldl9mcmVlID0gc25kX3VzYl9taXhlcl9kZXZfZnJlZQogCX07CiAJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyOwotCWludCBlcnI7CisJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpob3N0X2lmYWNlOworCWludCBlcnIsIHByb3RvY29sOwogCiAJc3RyY3B5KGNoaXAtPmNhcmQtPm1peGVybmFtZSwgIlVTQiBNaXhlciIpOwogCkBAIC0yMTI2LDEyICsyMjY5LDIzIEBACiAJbWl4ZXItPmNoaXAgPSBjaGlwOwogCW1peGVyLT5jdHJsaWYgPSBjdHJsaWY7CiAJbWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IgPSBpZ25vcmVfZXJyb3I7Ci0JbWl4ZXItPmlkX2VsZW1zID0ga2NhbGxvYygyNTYsIHNpemVvZigqbWl4ZXItPmlkX2VsZW1zKSwgR0ZQX0tFUk5FTCk7CisJbWl4ZXItPmlkX2VsZW1zID0ga2NhbGxvYyhNQVhfSURfRUxFTVMsIHNpemVvZigqbWl4ZXItPmlkX2VsZW1zKSwKKwkJCQkgIEdGUF9LRVJORUwpOwogCWlmICghbWl4ZXItPmlkX2VsZW1zKSB7CiAJCWtmcmVlKG1peGVyKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJaG9zdF9pZmFjZSA9ICZ1c2JfaWZudW1fdG9faWYoY2hpcC0+ZGV2LCBjdHJsaWYpLT5hbHRzZXR0aW5nWzBdOworCXByb3RvY29sID0gaG9zdF9pZmFjZS0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2w7CisKKwkvKiBGSVhNRSEgKi8KKwlpZiAocHJvdG9jb2wgIT0gVUFDX1ZFUlNJT05fMSkgeworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAibWl4ZXIgaW50ZXJmYWNlIHByb3RvY29sIDB4JTAyeCBub3QgeWV0IHN1cHBvcnRlZFxuIiwKKwkJCQkJcHJvdG9jb2wpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoKGVyciA9IHNuZF91c2JfbWl4ZXJfY29udHJvbHMobWl4ZXIpKSA8IDAgfHwKIAkgICAgKGVyciA9IHNuZF91c2JfbWl4ZXJfc3RhdHVzX2NyZWF0ZShtaXhlcikpIDwgMCkKIAkJZ290byBfZXJyb3I7CkBAIC0yMTQyLDggKzIyOTYsNiBAQAogCWlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzAyMCkgfHwKIAkgICAgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApIHx8CiAJICAgIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSkgewotCQlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OwotCiAJCWlmICgoZXJyID0gc25kX2F1ZGlneTJueF9jb250cm9sc19jcmVhdGUobWl4ZXIpKSA8IDApCiAJCQlnb3RvIF9lcnJvcjsKIAkJaWYgKCFzbmRfY2FyZF9wcm9jX25ldyhjaGlwLT5jYXJkLCAiYXVkaWd5Mm54IiwgJmVudHJ5KSkKQEAgLTIxNjEsNiArMjMxMywxMSBAQAogCWVyciA9IHNuZF9kZXZpY2VfbmV3KGNoaXAtPmNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgbWl4ZXIsICZkZXZfb3BzKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBfZXJyb3I7CisKKwlpZiAobGlzdF9lbXB0eSgmY2hpcC0+bWl4ZXJfbGlzdCkgJiYKKwkgICAgIXNuZF9jYXJkX3Byb2NfbmV3KGNoaXAtPmNhcmQsICJ1c2JtaXhlciIsICZlbnRyeSkpCisJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgc25kX3VzYl9taXhlcl9wcm9jX3JlYWQpOworCiAJbGlzdF9hZGQoJm1peGVyLT5saXN0LCAmY2hpcC0+bWl4ZXJfbGlzdCk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMgYi9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jCmluZGV4IDc3YzM1ODguLjc5ZTkwM2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMKKysrIGIvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYwpAQCAtMTksMTEgKzE5LDE2IEBACiAgKgogICovCiAKK3N0cnVjdCB1c2JtaXhfZEJfbWFwIHsKKwl1MzIgbWluOworCXUzMiBtYXg7Cit9OwogCiBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwIHsKIAlpbnQgaWQ7CiAJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgY29udHJvbDsKKwlzdHJ1Y3QgdXNibWl4X2RCX21hcCAqZEI7CiB9OwogCiBzdHJ1Y3QgdXNibWl4X3NlbGVjdG9yX21hcCB7CkBAIC03Miw3ICs3Nyw3IEBACiAJeyA4LCAiTGluZSBQbGF5YmFjayIgfSwgLyogRlUgKi8KIAkvKiA5OiBJVCBtaWMgKi8KIAl7IDEwLCAiTWljIFBsYXliYWNrIiB9LCAvKiBGVSAqLwotCXsgMTEsICJDYXB0dXJlIElucHV0IFNvdXJjZSIgfSwgLyogU1UgKi8KKwl7IDExLCAiQ2FwdHVyZSBTb3VyY2UiIH0sIC8qIFNVICovCiAJeyAxMiwgIkNhcHR1cmUiIH0sIC8qIEZVICovCiAJLyogMTM6IE9UIHBjbSBjYXB0dXJlICovCiAJLyogMTQ6IE1VICh3L28gY29udHJvbHMpICovCkBAIC0xMDIsNiArMTA3LDkgQEAKICAqIGUuZy4gbm8gTWFzdGVyIGFuZCBmYWtlIFBDTSB2b2x1bWUKICAqCQkJUGF2ZWwgTWloYXlsb3YgPGJpbkBiYXNoLmluZm8+CiAgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNibWl4X2RCX21hcCBtcDNwbHVzX2RCXzEgPSB7LTQ3ODEsIDB9OwkvKiBqdXN0IGd1ZXNzICovCitzdGF0aWMgc3RydWN0IHVzYm1peF9kQl9tYXAgbXAzcGx1c19kQl8yID0gey0xNzgxLCA2MTh9OyAvKiBqdXN0IGd1ZXNzICovCisKIHN0YXRpYyBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwIG1wM3BsdXNfbWFwW10gPSB7CiAJLyogMTogSVQgcGNtICovCiAJLyogMjogSVQgbWljICovCkBAIC0xMTAsMTYgKzExOCwxOSBAQAogCS8qIDU6IE9UIGRpZ2l0YWwgb3V0ICovCiAJLyogNjogT1Qgc3BlYWtlciAqLwogCS8qIDc6IE9UIHBjbSBjYXB0dXJlICovCi0JeyA4LCAiQ2FwdHVyZSBJbnB1dCBTb3VyY2UiIH0sIC8qIEZVLCBkZWZhdWx0IFBDTSBDYXB0dXJlIFNvdXJjZSAqLworCXsgOCwgIkNhcHR1cmUgU291cmNlIiB9LCAvKiBGVSwgZGVmYXVsdCBQQ00gQ2FwdHVyZSBTb3VyY2UgKi8KIAkJLyogKE1pYywgSW5wdXQgMSA9IExpbmUgaW5wdXQsIElucHV0IDIgPSBPcHRpY2FsIGlucHV0KSAqLwogCXsgOSwgIk1hc3RlciBQbGF5YmFjayIgfSwgLyogRlUsIGRlZmF1bHQgU3BlYWtlciAxICovCiAJLyogeyAxMCwgIk1pYyBDYXB0dXJlIiwgMSB9LCAqLyAvKiBGVSwgTWljIENhcHR1cmUgKi8KLQkvKiB7IDEwLCAiTWljIENhcHR1cmUiLCAyIH0sICovIC8qIEZVLCBNaWMgQ2FwdHVyZSAqLworCXsgMTAsIC8qICJNaWMgQ2FwdHVyZSIsICovIE5VTEwsIDIsIC5kQiA9ICZtcDNwbHVzX2RCXzIgfSwKKwkJLyogRlUsIE1pYyBDYXB0dXJlICovCiAJeyAxMCwgIk1pYyBCb29zdCIsIDcgfSwgLyogRlUsIGRlZmF1bHQgQXV0byBHYWluIElucHV0ICovCi0JeyAxMSwgIkxpbmUgQ2FwdHVyZSIgfSwgLyogRlUsIGRlZmF1bHQgUENNIENhcHR1cmUgKi8KKwl7IDExLCAiTGluZSBDYXB0dXJlIiwgLmRCID0gJm1wM3BsdXNfZEJfMiB9LAorCQkvKiBGVSwgZGVmYXVsdCBQQ00gQ2FwdHVyZSAqLwogCXsgMTIsICJEaWdpdGFsIEluIFBsYXliYWNrIiB9LCAvKiBGVSwgZGVmYXVsdCBQQ00gMSAqLwotCS8qIHsgMTMsICJNaWMgUGxheWJhY2siIH0sICovIC8qIEZVLCBkZWZhdWx0IE1pYyBQbGF5YmFjayAqLwotCXsgMTQsICJMaW5lIFBsYXliYWNrIiB9LCAvKiBGVSwgZGVmYXVsdCBTcGVha2VyICovCisJeyAxMywgLyogIk1pYyBQbGF5YmFjayIsICovIC5kQiA9ICZtcDNwbHVzX2RCXzEgfSwKKwkJLyogRlUsIGRlZmF1bHQgTWljIFBsYXliYWNrICovCisJeyAxNCwgIkxpbmUgUGxheWJhY2siLCAuZEIgPSAmbXAzcGx1c19kQl8xIH0sIC8qIEZVLCBkZWZhdWx0IFNwZWFrZXIgKi8KIAkvKiAxNTogTVUgKi8KIAl7IDAgfSAvKiB0ZXJtaW5hdG9yICovCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYnF1aXJrcy5oIGIvc291bmQvdXNiL3VzYnF1aXJrcy5oCmluZGV4IGE4OTJiZGEuLmYwNmZhZjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JxdWlya3MuaAorKysgYi9zb3VuZC91c2IvdXNicXVpcmtzLmgKQEAgLTkxLDcgKzkxLDcgQEAKIAkuaWRWZW5kb3IgPSAweDA0NmQsCiAJLmlkUHJvZHVjdCA9IDB4MDg1MCwKIAkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9fQ09OVFJPTAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MCiB9LAogewogCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKQEAgLTEwMCw3ICsxMDAsNyBAQAogCS5pZFZlbmRvciA9IDB4MDQ2ZCwKIAkuaWRQcm9kdWN0ID0gMHgwOGFlLAogCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT19DT05UUk9MCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wKIH0sCiB7CiAJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfApAQCAtMTA5LDcgKzEwOSw3IEBACiAJLmlkVmVuZG9yID0gMHgwNDZkLAogCS5pZFByb2R1Y3QgPSAweDA4YzYsCiAJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKLQkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPX0NPTlRST0wKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTAogfSwKIHsKIAkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CkBAIC0xMTgsNyArMTE4LDcgQEAKIAkuaWRWZW5kb3IgPSAweDA0NmQsCiAJLmlkUHJvZHVjdCA9IDB4MDhmMCwKIAkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9fQ09OVFJPTAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MCiB9LAogewogCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKQEAgLTEyNyw3ICsxMjcsNyBAQAogCS5pZFZlbmRvciA9IDB4MDQ2ZCwKIAkuaWRQcm9kdWN0ID0gMHgwOGY1LAogCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT19DT05UUk9MCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wKIH0sCiB7CiAJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfApAQCAtMTM2LDcgKzEzNiw3IEBACiAJLmlkVmVuZG9yID0gMHgwNDZkLAogCS5pZFByb2R1Y3QgPSAweDA4ZjYsCiAJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKLQkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPX0NPTlRST0wKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTAogfSwKIHsKIAlVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOTkwKSwKQEAgLTMwMSw3ICszMDEsNyBAQAogCQkJCQkuaWZhY2UgPSAxLAogCQkJCQkuYWx0c2V0dGluZyA9IDEsCiAJCQkJCS5hbHRzZXRfaWR4ID0gMSwKLQkJCQkJLmF0dHJpYnV0ZXMgPSBFUF9DU19BVFRSX0ZJTExfTUFYLAorCQkJCQkuYXR0cmlidXRlcyA9IFVBQ19FUF9DU19BVFRSX0ZJTExfTUFYLAogCQkJCQkuZW5kcG9pbnQgPSAweDgxLAogCQkJCQkuZXBfYXR0ciA9IDB4MDUsCiAJCQkJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMsCkBAIC0xMjY2LDM3ICsxMjY2LDYgQEAKIAkJfQogCX0KIH0sCi0vKiBSb2xhbmQgVUEtMTAxIGluIEhpZ2gtU3BlZWQgTW9kZSBvbmx5ICovCi17Ci0JVVNCX0RFVklDRSgweDA1ODIsIDB4MDA3ZCksCi0JLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7Ci0JCS52ZW5kb3JfbmFtZSA9ICJSb2xhbmQiLAotCQkucHJvZHVjdF9uYW1lID0gIlVBLTEwMSIsCi0JCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCi0JCS50eXBlID0gUVVJUktfQ09NUE9TSVRFLAotCQkuZGF0YSA9IChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlya1tdKSB7Ci0JCQl7Ci0JCQkJLmlmbnVtID0gMCwKLQkJCQkudHlwZSA9IFFVSVJLX0FVRElPX0VESVJPTF9VQTEwMQotCQkJfSwKLQkJCXsKLQkJCQkuaWZudW0gPSAxLAotCQkJCS50eXBlID0gUVVJUktfQVVESU9fRURJUk9MX1VBMTAxCi0JCQl9LAotCQkJewotCQkJCS5pZm51bSA9IDIsCi0JCQkJLnR5cGUgPSBRVUlSS19NSURJX0ZJWEVEX0VORFBPSU5ULAotCQkJCS5kYXRhID0gJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfbWlkaV9lbmRwb2ludF9pbmZvKSB7Ci0JCQkJCS5vdXRfY2FibGVzID0gMHgwMDAxLAotCQkJCQkuaW5fY2FibGVzICA9IDB4MDAwMQotCQkJCX0KLQkJCX0sCi0JCQl7Ci0JCQkJLmlmbnVtID0gLTEKLQkJCX0KLQkJfQotCX0KLX0sCiB7CiAJLyogaGFzIElEIDB4MDA4MSB3aGVuIG5vdCBpbiAiQWR2YW5jZWQgRHJpdmVyIiBtb2RlICovCiAJVVNCX0RFVklDRSgweDA1ODIsIDB4MDA4MCksCkBAIC0yMDczLDYgKzIwNDIsMzMgQEAKIAl9CiB9LAogCisvKiBBY2Nlc3MgTXVzaWMgZGV2aWNlcyAqLworeworCS8qIFZpcnVzVEkgRGVza3RvcCAqLworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgxMzNlLCAweDA4MTUpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQ09NUE9TSVRFLAorCQkuZGF0YSA9ICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmtbXSkgeworCQkJeworCQkJCS5pZm51bSA9IDMsCisJCQkJLnR5cGUgPSBRVUlSS19NSURJX0ZJWEVEX0VORFBPSU5ULAorCQkJCS5kYXRhID0gJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9taWRpX2VuZHBvaW50X2luZm8pIHsKKwkJCQkJLm91dF9jYWJsZXMgPSAweDAwMDMsCisJCQkJCS5pbl9jYWJsZXMgID0gMHgwMDAzCisJCQkJfQorCQkJfSwKKwkJCXsKKwkJCQkuaWZudW0gPSA0LAorCQkJCS50eXBlID0gUVVJUktfSUdOT1JFX0lOVEVSRkFDRQorCQkJfSwKKwkJCXsKKwkJCQkuaWZudW0gPSAtMQorCQkJfQorCQl9CisJfQorfSwKKwogLyogKi8KIHsKIAkvKiBha2EuIFNlcmF0byBTY3JhdGNoIExpdmUgREogQm94ICovCkBAIC0yMTA1LDYgKzIxMDEsMTY1IEBACiAJfQogfSwKIAorLyogSGF1cHBhdWdlIEhWUi05NTBRIGFuZCBIVlItODUwICovCit7CisJVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDIwNDAsIDB4NzIwMCksCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCisJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiSGF1cHBhdWdlIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJIVlItOTUwUSIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCisJfQorfSwKK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjAxKSwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAorCQkucHJvZHVjdF9uYW1lID0gIkhWUi05NTBRIiwKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKKwl9Cit9LAoreworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgyMDQwLCAweDcyMDIpLAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIkhhdXBwYXVnZSIsCisJCS5wcm9kdWN0X25hbWUgPSAiSFZSLTk1MFEiLAorCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAorCQkudHlwZSA9IFFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAorCX0KK30sCit7CisJVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDIwNDAsIDB4NzIwMyksCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCisJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiSGF1cHBhdWdlIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJIVlItOTUwUSIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCisJfQorfSwKK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjA0KSwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAorCQkucHJvZHVjdF9uYW1lID0gIkhWUi05NTBRIiwKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKKwl9Cit9LAoreworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgyMDQwLCAweDcyMDUpLAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIkhhdXBwYXVnZSIsCisJCS5wcm9kdWN0X25hbWUgPSAiSFZSLTk1MFEiLAorCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAorCQkudHlwZSA9IFFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAorCX0KK30sCit7CisJVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDIwNDAsIDB4NzI1MCksCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCisJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiSGF1cHBhdWdlIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJIVlItOTUwUSIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCisJfQorfSwKK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjMwKSwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAorCQkucHJvZHVjdF9uYW1lID0gIkhWUi04NTAiLAorCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAorCQkudHlwZSA9IFFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAorCX0KK30sCisKKy8qIERpZ2lkZXNpZ24gTWJveCAqLworeworCS8qIFRoYW5rcyB0byBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4gKi8KKwlVU0JfREVWSUNFKDB4MGRiYSwgMHgxMDAwKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiRGlnaWRlc2lnbiIsCisJCS5wcm9kdWN0X25hbWUgPSAiTUJveCIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQ09NUE9TSVRFLAorCQkuZGF0YSA9IChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlya1tdKXsKKwkJCXsKKwkJCQkuaWZudW0gPSAwLAorCQkJCS50eXBlID0gUVVJUktfSUdOT1JFX0lOVEVSRkFDRSwKKwkJCX0sCisJCQl7CisJCQkJLmlmbnVtID0gMSwKKwkJCQkudHlwZSA9IFFVSVJLX0FVRElPX0ZJWEVEX0VORFBPSU5ULAorCQkJCS5kYXRhID0gJihjb25zdCBzdHJ1Y3QgYXVkaW9mb3JtYXQpIHsKKwkJCQkJLmZvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfUzI0XzNCRSwKKwkJCQkJLmNoYW5uZWxzID0gMiwKKwkJCQkJLmlmYWNlID0gMSwKKwkJCQkJLmFsdHNldHRpbmcgPSAxLAorCQkJCQkuYWx0c2V0X2lkeCA9IDEsCisJCQkJCS5hdHRyaWJ1dGVzID0gVUFDX0VQX0NTX0FUVFJfU0FNUExFX1JBVEUsCisJCQkJCS5lbmRwb2ludCA9IDB4MDIsCisJCQkJCS5lcF9hdHRyID0gMHgwMSwKKwkJCQkJLm1heHBhY2tzaXplID0gMHgxMzAsCisJCQkJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCQkJCSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJCQkJLnJhdGVfbWluID0gNDQxMDAsCisJCQkJCS5yYXRlX21heCA9IDQ4MDAwLAorCQkJCQkubnJfcmF0ZXMgPSAyLAorCQkJCQkucmF0ZV90YWJsZSA9ICh1bnNpZ25lZCBpbnRbXSkgeworCQkJCQkJNDQxMDAsIDQ4MDAwCisJCQkJCX0KKwkJCQl9CisJCQl9LAorCQkJeworCQkJCS5pZm51bSA9IC0xCisJCQl9CisJCX0KKworCX0KK30sCisKIHsKIAkvKgogCSAqIFNvbWUgVVNCIE1JREkgZGV2aWNlcyBkb24ndCBoYXZlIGFuIGF1ZGlvIGNvbnRyb2wgaW50ZXJmYWNlLApAQCAtMjExMyw3ICsyMjY4LDcgQEAKIAkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CiAJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKIAkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfTUlESV9TVFJFQU1JTkcsCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19NSURJU1RSRUFNSU5HLAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgewogCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAogCQkudHlwZSA9IFFVSVJLX01JRElfU1RBTkRBUkRfSU5URVJGQUNFCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMgYi9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKaW5kZXggOTFiYjI5Ni4uNDRkZWIyMSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYwpAQCAtMTYsNiArMTYsOCBAQAogICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9hdWRpby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9od2RlcC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtMzE1LDkgKzMxNyw5IEBACiAJZGF0YVswXSA9IHJhdGU7CiAJZGF0YVsxXSA9IHJhdGUgPj4gODsKIAlkYXRhWzJdID0gcmF0ZSA+PiAxNjsKLQllcnIgPSB1czEyMmxfY3RsX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBTRVRfQ1VSLAorCWVyciA9IHVzMTIybF9jdGxfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFVBQ19TRVRfQ1VSLAogCQkJICAgICBVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfRU5EUE9JTlR8VVNCX0RJUl9PVVQsCi0JCQkgICAgIFNBTVBMSU5HX0ZSRVFfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMywgMTAwMCk7CisJCQkgICAgIFVBQ19FUF9DU19BVFRSX1NBTVBMRV9SQVRFIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKTsKIAlpZiAoZXJyIDwgMCkKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6IGNhbm5vdCBzZXQgZnJlcSAlZCB0byBlcCAweCV4XG4iLAogCQkJICAgZGV2LT5kZXZudW0sIHJhdGUsIGVwKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZSBiL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQppbmRleCBmZTA4NjYwLi5lMWQ2MGQ3IDEwMDY0NAotLS0gYS90b29scy9wZXJmLy5naXRpZ25vcmUKKysrIGIvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCkBAIC0xMyw2ICsxMyw4IEBACiBwZXJmKi5odG1sCiBjb21tb24tY21kcy5oCiBwZXJmLmRhdGEKK3BlcmYuZGF0YS5vbGQKK3BlcmYtYXJjaGl2ZQogdGFncwogVEFHUwogY3Njb3BlKgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYXJjaGl2ZS50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1hcmNoaXZlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWUxNzRkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYXJjaGl2ZS50eHQKQEAgLTAsMCArMSwyMiBAQAorcGVyZi1hcmNoaXZlKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorcGVyZi1hcmNoaXZlIC0gQ3JlYXRlIGFyY2hpdmUgd2l0aCBvYmplY3QgZmlsZXMgd2l0aCBidWlsZC1pZHMgZm91bmQgaW4gcGVyZi5kYXRhIGZpbGUKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisncGVyZiBhcmNoaXZlJyBbZmlsZV0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgcnVucyBydW5zIHBlcmYtYnVpbGRpZC1saXN0IC0td2l0aC1oaXRzLCBhbmQgY29sbGVjdHMgdGhlIGZpbGVzCit3aXRoIHRoZSBidWlsZGlkcyBmb3VuZCBzbyB0aGF0IGFuYWxpc3lzIG9mIHBlcmYuZGF0YSBjb250ZW50cyBjYW4gYmUgcG9zc2libGUKK29uIGFub3RoZXIgbWFjaGluZS4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLWJ1aWxkaWQtbGlzdFsxXSwgbGlua3BlcmY6cGVyZi1yZXBvcnRbMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJ1aWxkaWQtY2FjaGUudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1jYWNoZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhiYzNiNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJ1aWxkaWQtY2FjaGUudHh0CkBAIC0wLDAgKzEsMzMgQEAKK3BlcmYtYnVpbGRpZC1jYWNoZSgxKQorPT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK3BlcmYtYnVpbGRpZC1jYWNoZSAtIE1hbmFnZSBidWlsZC1pZCBjYWNoZS4KKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisncGVyZiBidWlsZGlkLWxpc3QgPG9wdGlvbnM+JworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgY29tbWFuZCBtYW5hZ2VzIHRoZSBidWlsZC1pZCBjYWNoZS4gSXQgY2FuIGFkZCBhbmQgcmVtb3ZlIGZpbGVzIHRvIHRoZQorY2FjaGUuIEluIHRoZSBmdXR1cmUgaXQgc2hvdWxkIGFzIHdlbGwgcHVyZ2Ugb2xkZXIgZW50cmllcywgc2V0IHVwcGVyIGxpbWl0cworZm9yIHRoZSBzcGFjZSB1c2VkIGJ5IHRoZSBjYWNoZSwgZXRjLgorCitPUFRJT05TCistLS0tLS0tCistYTo6CistLWFkZD06OgorICAgICAgICBBZGQgc3BlY2lmaWVkIGZpbGUgdG8gdGhlIGNhY2hlLgorLXI6OgorLS1yZW1vdmU9OjoKKyAgICAgICAgUmVtb3ZlIHNwZWNpZmllZCBmaWxlIHRvIHRoZSBjYWNoZS4KKy12OjoKKy0tdmVyYm9zZTo6CisJQmUgbW9yZSB2ZXJib3NlLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLXJlcG9ydFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcHJvYmUudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcHJvYmUudHh0CmluZGV4IDI1MGUzOTEuLjJkZTM0MDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1wcm9iZS50eHQKQEAgLTE1LDYgKzE1LDggQEAKICdwZXJmIHByb2JlJyBbb3B0aW9uc10gLS1kZWw9J1tHUk9VUDpdRVZFTlQnIFsuLi5dCiBvcgogJ3BlcmYgcHJvYmUnIC0tbGlzdAorb3IKKydwZXJmIHByb2JlJyAtLWxpbmU9J0ZVTkNbOlJMTlsrTlVNfDpSTE4yXV18U1JDOkFMTlsrTlVNfDpBTE4yXScKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC00NSw2ICs0NywxMSBAQAogLS1saXN0OjoKIAlMaXN0IHVwIGN1cnJlbnQgcHJvYmUgZXZlbnRzLgogCistTDo6CistLWxpbmU9OjoKKwlTaG93IHNvdXJjZSBjb2RlIGxpbmVzIHdoaWNoIGNhbiBiZSBwcm9iZWQuIFRoaXMgbmVlZHMgYW4gYXJndW1lbnQKKwl3aGljaCBzcGVjaWZpZXMgYSByYW5nZSBvZiB0aGUgc291cmNlIGNvZGUuCisKIFBST0JFIFNZTlRBWAogLS0tLS0tLS0tLS0tCiBQcm9iZSBwb2ludHMgYXJlIGRlZmluZWQgYnkgZm9sbG93aW5nIHN5bnRheC4KQEAgLTU2LDYgKzYzLDE5IEBACiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgYSBwcm9iZSBwb2ludCBieSB0aGUgc291cmNlIGxpbmUgbnVtYmVyIGJ5IHVzaW5nICdTUkM6QUxOJyBzeW50YXgsIHdoZXJlICdTUkMnIGlzIHRoZSBzb3VyY2UgZmlsZSBwYXRoIGFuZCAnQUxOJyBpcyB0aGUgbGluZSBudW1iZXIuCiAnQVJHJyBzcGVjaWZpZXMgdGhlIGFyZ3VtZW50cyBvZiB0aGlzIHByb2JlIHBvaW50LiBZb3UgY2FuIHVzZSB0aGUgbmFtZSBvZiBsb2NhbCB2YXJpYWJsZSwgb3Iga3Byb2JlLXRyYWNlciBhcmd1bWVudCBmb3JtYXQgKGUuZy4gJHJldHZhbCwgJWF4LCBldGMpLgogCitMSU5FIFNZTlRBWAorLS0tLS0tLS0tLS0KK0xpbmUgcmFuZ2UgaXMgZGVzY3JpcHRlZCBieSBmb2xsb3dpbmcgc3ludGF4LgorCisgIkZVTkNbOlJMTlsrTlVNfDpSTE4yXV18U1JDOkFMTlsrTlVNfDpBTE4yXSIKKworRlVOQyBzcGVjaWZpZXMgdGhlIGZ1bmN0aW9uIG5hbWUgb2Ygc2hvd2luZyBsaW5lcy4gJ1JMTicgaXMgdGhlIHN0YXJ0IGxpbmUKK251bWJlciBmcm9tIGZ1bmN0aW9uIGVudHJ5IGxpbmUsIGFuZCAnUkxOMicgaXMgdGhlIGVuZCBsaW5lIG51bWJlci4gQXMgc2FtZSBhcworcHJvYmUgc3ludGF4LCAnU1JDJyBtZWFucyB0aGUgc291cmNlIGZpbGUgcGF0aCwgJ0FMTicgaXMgc3RhcnQgbGluZSBudW1iZXIsCithbmQgJ0FMTjInIGlzIGVuZCBsaW5lIG51bWJlciBpbiB0aGUgZmlsZS4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IGhvdworbWFueSBsaW5lcyB0byBzaG93IGJ5IHVzaW5nICdOVU0nLgorU28sICJzb3VyY2UuYzoxMDAtMTIwIiBzaG93cyBsaW5lcyBiZXR3ZWVuIDEwMHRoIHRvIGwyMHRoIGluIHNvdXJjZS5jIGZpbGUuIEFuZCAiZnVuYzoxMCsyMCIgc2hvd3MgMjAgbGluZXMgZnJvbSAxMHRoIGxpbmUgb2YgZnVuYyBmdW5jdGlvbi4KKwogU0VFIEFMU08KIC0tLS0tLS0tCiBsaW5rcGVyZjpwZXJmLXRyYWNlWzFdLCBsaW5rcGVyZjpwZXJmLXJlY29yZFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdG9wLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRvcC50eHQKaW5kZXggNGE3ZDU1OC4uNzg1YjlmYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdG9wLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10b3AudHh0CkBAIC03NCw3ICs3NCw3IEBACiAKIC1zIDxzeW1ib2w+OjoKIC0tc3ltLWFubm90YXRlPTxzeW1ib2w+OjoKLSAgICAgICAgQW5ub3RhdGUgdGhpcyBzeW1ib2wuICBSZXF1aXJlcyAtayBvcHRpb24uCisgICAgICAgIEFubm90YXRlIHRoaXMgc3ltYm9sLgogCiAtdjo6CiAtLXZlcmJvc2U6OgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UtcGVybC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1wZXJsLnR4dAppbmRleCBjNWY1NWY0Li5kNzI5Y2VlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1wZXJsLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1wZXJsLnR4dApAQCAtOCw3ICs4LDcgQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ3BlcmYgdHJhY2UnIFstcyBbbGFuZ106c2NyaXB0Wy5leHRdIF0KKydwZXJmIHRyYWNlJyBbLXMgW1BlcmxdOnNjcmlwdFsucGxdIF0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1weXRob24udHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UtcHl0aG9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjQxYWNhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UtcHl0aG9uLnR4dApAQCAtMCwwICsxLDYyNSBAQAorcGVyZi10cmFjZS1weXRob24oMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitwZXJmLXRyYWNlLXB5dGhvbiAtIFByb2Nlc3MgdHJhY2UgZGF0YSB3aXRoIGEgUHl0aG9uIHNjcmlwdAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydwZXJmIHRyYWNlJyBbLXMgW1B5dGhvbl06c2NyaXB0Wy5weV0gXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBwZXJmIHRyYWNlIG9wdGlvbiBpcyB1c2VkIHRvIHByb2Nlc3MgcGVyZiB0cmFjZSBkYXRhIHVzaW5nIHBlcmYncworYnVpbHQtaW4gUHl0aG9uIGludGVycHJldGVyLiAgSXQgcmVhZHMgYW5kIHByb2Nlc3NlcyB0aGUgaW5wdXQgZmlsZSBhbmQKK2Rpc3BsYXlzIHRoZSByZXN1bHRzIG9mIHRoZSB0cmFjZSBhbmFseXNpcyBpbXBsZW1lbnRlZCBpbiB0aGUgZ2l2ZW4KK1B5dGhvbiBzY3JpcHQsIGlmIGFueS4KKworQSBRVUlDSyBFWEFNUExFCistLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzZWN0aW9uIHNob3dzIHRoZSBwcm9jZXNzLCBzdGFydCB0byBmaW5pc2gsIG9mIGNyZWF0aW5nIGEgd29ya2luZworUHl0aG9uIHNjcmlwdCB0aGF0IGFnZ3JlZ2F0ZXMgYW5kIGV4dHJhY3RzIHVzZWZ1bCBpbmZvcm1hdGlvbiBmcm9tIGEKK3JhdyBwZXJmIHRyYWNlIHN0cmVhbS4gIFlvdSBjYW4gYXZvaWQgcmVhZGluZyB0aGUgcmVzdCBvZiB0aGlzCitkb2N1bWVudCBpZiBhbiBleGFtcGxlIGlzIGVub3VnaCBmb3IgeW91OyB0aGUgcmVzdCBvZiB0aGUgZG9jdW1lbnQKK3Byb3ZpZGVzIG1vcmUgZGV0YWlscyBvbiBlYWNoIHN0ZXAgYW5kIGxpc3RzIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucworYXZhaWxhYmxlIHRvIHNjcmlwdCB3cml0ZXJzLgorCitUaGlzIGV4YW1wbGUgYWN0dWFsbHkgZGV0YWlscyB0aGUgc3RlcHMgdGhhdCB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZQorJ3N5c2NhbGwtY291bnRzJyBzY3JpcHQgeW91IHNlZSB3aGVuIHlvdSBsaXN0IHRoZSBhdmFpbGFibGUgcGVyZiB0cmFjZQorc2NyaXB0cyB2aWEgJ3BlcmYgdHJhY2UgLWwnLiAgQXMgc3VjaCwgdGhpcyBzY3JpcHQgYWxzbyBzaG93cyBob3cgdG8KK2ludGVncmF0ZSB5b3VyIHNjcmlwdCBpbnRvIHRoZSBsaXN0IG9mIGdlbmVyYWwtcHVycG9zZSAncGVyZiB0cmFjZScKK3NjcmlwdHMgbGlzdGVkIGJ5IHRoYXQgY29tbWFuZC4KKworVGhlIHN5c2NhbGwtY291bnRzIHNjcmlwdCBpcyBhIHNpbXBsZSBzY3JpcHQsIGJ1dCBkZW1vbnN0cmF0ZXMgYWxsIHRoZQorYmFzaWMgaWRlYXMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIHVzZWZ1bCBzY3JpcHQuICBIZXJlJ3MgYW4gZXhhbXBsZQorb2YgaXRzIG91dHB1dCAoc3lzY2FsbCBuYW1lcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQsIHRoZXkgd2lsbCBhcHBlYXIKK2FzIG51bWJlcnMpOgorCistLS0tCitzeXNjYWxsIGV2ZW50czoKKworZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0KK3N5c193cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTUwNjcKK3N5c19nZXRkZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwNzIKK3N5c19jbG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwMzcKK3N5c19zd2Fwb2ZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3NjkKK3N5c19yZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MjMKK3N5c19zY2hlZF9zZXRwYXJhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MjYKK3N5c19vcGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMzEKK3N5c19uZXdmc3RhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMjYKK3N5c19tbWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTcKK3N5c19tdW5tYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTYKK3N5c19mdXRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDEKK3N5c19zZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDIKK3N5c19wb2xsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODQKK3N5c19zZXRpdGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKK3N5c193cml0ZXYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKK3N5c19sc2VlayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKK3N5c19ydF9zaWdwcm9jbWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKK3N5c193YWl0NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKK3N5c19pb2N0bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKK3N5c19zZXRfcm9idXN0X2xpc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKK3N5c19leGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKzU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKK3N5c19hY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKy0tLS0KKworQmFzaWNhbGx5IG91ciB0YXNrIGlzIHRvIGtlZXAgYSBwZXItc3lzY2FsbCB0YWxseSB0aGF0IGdldHMgdXBkYXRlZAorZXZlcnkgdGltZSBhIHN5c3RlbSBjYWxsIG9jY3VycyBpbiB0aGUgc3lzdGVtLiAgT3VyIHNjcmlwdCB3aWxsIGRvCit0aGF0LCBidXQgZmlyc3Qgd2UgbmVlZCB0byByZWNvcmQgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIHByb2Nlc3NlZCBieQordGhhdCBzY3JpcHQuICBUaGVvcmV0aWNhbGx5LCB0aGVyZSBhcmUgYSBjb3VwbGUgb2Ygd2F5cyB3ZSBjb3VsZCBkbwordGhhdDoKKworLSB3ZSBjb3VsZCBlbmFibGUgZXZlcnkgZXZlbnQgdW5kZXIgdGhlIHRyYWNpbmcvZXZlbnRzL3N5c2NhbGxzCisgIGRpcmVjdG9yeSwgYnV0IHRoaXMgaXMgb3ZlciA2MDAgc3lzY2FsbHMsIHdlbGwgYmV5b25kIHRoZSBudW1iZXIKKyAgYWxsb3dhYmxlIGJ5IHBlcmYuICBUaGVzZSBpbmRpdmlkdWFsIHN5c2NhbGwgZXZlbnRzIHdpbGwgaG93ZXZlciBiZQorICB1c2VmdWwgaWYgd2Ugd2FudCB0byBsYXRlciB1c2UgdGhlIGd1aWRhbmNlIHdlIGdldCBmcm9tIHRoZQorICBnZW5lcmFsLXB1cnBvc2Ugc2NyaXB0cyB0byBkcmlsbCBkb3duIGFuZCBnZXQgbW9yZSBkZXRhaWwgYWJvdXQKKyAgaW5kaXZpZHVhbCBzeXNjYWxscyBvZiBpbnRlcmVzdC4KKworLSB3ZSBjYW4gZW5hYmxlIHRoZSBzeXNfZW50ZXIgYW5kL29yIHN5c19leGl0IHN5c2NhbGxzIGZvdW5kIHVuZGVyCisgIHRyYWNpbmcvZXZlbnRzL3Jhd19zeXNjYWxscy4gIFRoZXNlIGFyZSBjYWxsZWQgZm9yIGFsbCBzeXNjYWxsczsgdGhlCisgICdpZCcgZmllbGQgY2FuIGJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBpbmRpdmlkdWFsIHN5c2NhbGwKKyAgbnVtYmVycy4KKworRm9yIHRoaXMgc2NyaXB0LCB3ZSBvbmx5IG5lZWQgdG8ga25vdyB0aGF0IGEgc3lzY2FsbCB3YXMgZW50ZXJlZDsgd2UKK2Rvbid0IGNhcmUgaG93IGl0IGV4aXRlZCwgc28gd2UnbGwgdXNlICdwZXJmIHJlY29yZCcgdG8gcmVjb3JkIG9ubHkKK3RoZSBzeXNfZW50ZXIgZXZlbnRzOgorCistLS0tCisjIHBlcmYgcmVjb3JkIC1jIDEgLWYgLWEgLU0gLVIgLWUgcmF3X3N5c2NhbGxzOnN5c19lbnRlcgorCiteQ1sgcGVyZiByZWNvcmQ6IFdva2VuIHVwIDEgdGltZXMgdG8gd3JpdGUgZGF0YSBdCitbIHBlcmYgcmVjb3JkOiBDYXB0dXJlZCBhbmQgd3JvdGUgNTYuNTQ1IE1CIHBlcmYuZGF0YSAofjI0NzA1MDMgc2FtcGxlcykgXQorLS0tLQorCitUaGUgb3B0aW9ucyBiYXNpY2FsbHkgc2F5IHRvIGNvbGxlY3QgZGF0YSBmb3IgZXZlcnkgc3lzY2FsbCBldmVudAorc3lzdGVtLXdpZGUgYW5kIG11bHRpcGxleCB0aGUgcGVyLWNwdSBvdXRwdXQgaW50byBhIHNpbmdsZSBzdHJlYW0uCitUaGF0IHNpbmdsZSBzdHJlYW0gd2lsbCBiZSByZWNvcmRlZCBpbiBhIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CitjYWxsZWQgcGVyZi5kYXRhLgorCitPbmNlIHdlIGhhdmUgYSBwZXJmLmRhdGEgZmlsZSBjb250YWluaW5nIG91ciBkYXRhLCB3ZSBjYW4gdXNlIHRoZSAtZworJ3BlcmYgdHJhY2UnIG9wdGlvbiB0byBnZW5lcmF0ZSBhIFB5dGhvbiBzY3JpcHQgdGhhdCB3aWxsIGNvbnRhaW4gYQorY2FsbGJhY2sgaGFuZGxlciBmb3IgZWFjaCBldmVudCB0eXBlIGZvdW5kIGluIHRoZSBwZXJmLmRhdGEgdHJhY2UKK3N0cmVhbSAoZm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBTVEFSVEVSIFNDUklQVFMgc2VjdGlvbikuCisKKy0tLS0KKyMgcGVyZiB0cmFjZSAtZyBweXRob24KK2dlbmVyYXRlZCBQeXRob24gc2NyaXB0OiBwZXJmLXRyYWNlLnB5CisKK1RoZSBvdXRwdXQgZmlsZSBjcmVhdGVkIGFsc28gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIG5hbWVkCitwZXJmLXRyYWNlLnB5LiAgSGVyZSdzIHRoZSBmaWxlIGluIGl0cyBlbnRpcmV0eToKKworIyBwZXJmIHRyYWNlIGV2ZW50IGhhbmRsZXJzLCBnZW5lcmF0ZWQgYnkgcGVyZiB0cmFjZSAtZyBweXRob24KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisKKyMgVGhlIGNvbW1vbl8qIGV2ZW50IGhhbmRsZXIgZmllbGRzIGFyZSB0aGUgbW9zdCB1c2VmdWwgZmllbGRzIGNvbW1vbiB0bworIyBhbGwgZXZlbnRzLiAgVGhleSBkb24ndCBuZWNlc3NhcmlseSBjb3JyZXNwb25kIHRvIHRoZSAnY29tbW9uXyonIGZpZWxkcworIyBpbiB0aGUgZm9ybWF0IGZpbGVzLiAgVGhvc2UgZmllbGRzIG5vdCBhdmFpbGFibGUgYXMgaGFuZGxlciBwYXJhbXMgY2FuCisjIGJlIHJldHJpZXZlZCB1c2luZyBQeXRob24gZnVuY3Rpb25zIG9mIHRoZSBmb3JtIGNvbW1vbl8qKGNvbnRleHQpLgorIyBTZWUgdGhlIHBlcmYtdHJhY2UtcHl0aG9uIERvY3VtZW50YXRpb24gZm9yIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCitmcm9tIENvcmUgaW1wb3J0ICoKKworZGVmIHRyYWNlX2JlZ2luKCk6CisJcHJpbnQgImluIHRyYWNlX2JlZ2luIgorCitkZWYgdHJhY2VfZW5kKCk6CisJcHJpbnQgImluIHRyYWNlX2VuZCIKKworZGVmIHJhd19zeXNjYWxsc19fc3lzX2VudGVyKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJaWQsIGFyZ3MpOgorCQlwcmludF9oZWFkZXIoZXZlbnRfbmFtZSwgY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywKKwkJCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKQorCisJCXByaW50ICJpZD0lZCwgYXJncz0lc1xuIiAlIFwKKwkJKGlkLCBhcmdzKSwKKworZGVmIHRyYWNlX3VuaGFuZGxlZChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQljb21tb25fcGlkLCBjb21tb25fY29tbSk6CisJCXByaW50X2hlYWRlcihldmVudF9uYW1lLCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQljb21tb25fcGlkLCBjb21tb25fY29tbSkKKworZGVmIHByaW50X2hlYWRlcihldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pOgorCXByaW50ICIlLTIwcyAlNXUgJTA1dS4lMDl1ICU4dSAlLTIwcyAiICUgXAorCShldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pLAorLS0tLQorCitBdCB0aGUgdG9wIGlzIGEgY29tbWVudCBibG9jayBmb2xsb3dlZCBieSBzb21lIGltcG9ydCBzdGF0ZW1lbnRzIGFuZCBhCitwYXRoIGFwcGVuZCB3aGljaCBldmVyeSBwZXJmIHRyYWNlIHNjcmlwdCBzaG91bGQgaW5jbHVkZS4KKworRm9sbG93aW5nIHRoYXQgYXJlIGEgY291cGxlIGdlbmVyYXRlZCBmdW5jdGlvbnMsIHRyYWNlX2JlZ2luKCkgYW5kCit0cmFjZV9lbmQoKSwgd2hpY2ggYXJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9mIHRoZQorc2NyaXB0IHJlc3BlY3RpdmVseSAoZm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBTQ1JJUFRfTEFZT1VUIHNlY3Rpb24KK2JlbG93KS4KKworRm9sbG93aW5nIHRob3NlIGFyZSB0aGUgJ2V2ZW50IGhhbmRsZXInIGZ1bmN0aW9ucyBnZW5lcmF0ZWQgb25lIGZvcgorZXZlcnkgZXZlbnQgaW4gdGhlICdwZXJmIHJlY29yZCcgb3V0cHV0LiAgVGhlIGhhbmRsZXIgZnVuY3Rpb25zIHRha2UKK3RoZSBmb3JtIHN1YnN5c3RlbV9fZXZlbnRfbmFtZSwgYW5kIGNvbnRhaW4gbmFtZWQgcGFyYW1ldGVycywgb25lIGZvcgorZWFjaCBmaWVsZCBpbiB0aGUgZXZlbnQ7IGluIHRoaXMgY2FzZSwgdGhlcmUncyBvbmx5IG9uZSBldmVudCwKK3Jhd19zeXNjYWxsc19fc3lzX2VudGVyKCkuICAoc2VlIHRoZSBFVkVOVCBIQU5ETEVSUyBzZWN0aW9uIGJlbG93IGZvcgorbW9yZSBpbmZvIG9uIGV2ZW50IGhhbmRsZXJzKS4KKworVGhlIGZpbmFsIGNvdXBsZSBvZiBmdW5jdGlvbnMgYXJlLCBsaWtlIHRoZSBiZWdpbiBhbmQgZW5kIGZ1bmN0aW9ucywKK2dlbmVyYXRlZCBmb3IgZXZlcnkgc2NyaXB0LiAgVGhlIGZpcnN0LCB0cmFjZV91bmhhbmRsZWQoKSwgaXMgY2FsbGVkCitldmVyeSB0aW1lIHRoZSBzY3JpcHQgZmluZHMgYW4gZXZlbnQgaW4gdGhlIHBlcmYuZGF0YSBmaWxlIHRoYXQKK2RvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgZXZlbnQgaGFuZGxlciBpbiB0aGUgc2NyaXB0LiAgVGhpcyBjb3VsZAorbWVhbiBlaXRoZXIgdGhhdCB0aGUgcmVjb3JkIHN0ZXAgcmVjb3JkZWQgZXZlbnQgdHlwZXMgdGhhdCBpdCB3YXNuJ3QKK3JlYWxseSBpbnRlcmVzdGVkIGluLCBvciB0aGUgc2NyaXB0IHdhcyBydW4gYWdhaW5zdCBhIHRyYWNlIGZpbGUgdGhhdAorZG9lc24ndCBjb3JyZXNwb25kIHRvIHRoZSBzY3JpcHQuCisKK1RoZSBzY3JpcHQgZ2VuZXJhdGVkIGJ5IC1nIG9wdGlvbiBvcHRpb24gc2ltcGx5IHByaW50cyBhIGxpbmUgZm9yIGVhY2gKK2V2ZW50IGZvdW5kIGluIHRoZSB0cmFjZSBzdHJlYW0gaS5lLiBpdCBiYXNpY2FsbHkganVzdCBkdW1wcyB0aGUgZXZlbnQKK2FuZCBpdHMgcGFyYW1ldGVyIHZhbHVlcyB0byBzdGRvdXQuICBUaGUgcHJpbnRfaGVhZGVyKCkgZnVuY3Rpb24gaXMKK3NpbXBseSBhIHV0aWxpdHkgZnVuY3Rpb24gdXNlZCBmb3IgdGhhdCBwdXJwb3NlLiAgTGV0J3MgcmVuYW1lIHRoZQorc2NyaXB0IGFuZCBydW4gaXQgdG8gc2VlIHRoZSBkZWZhdWx0IG91dHB1dDoKKworLS0tLQorIyBtdiBwZXJmLXRyYWNlLnB5IHN5c2NhbGwtY291bnRzLnB5CisjIHBlcmYgdHJhY2UgLXMgc3lzY2FsbC1jb3VudHMucHkKKworcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NTgyMDgzICAgICA3NTA2IHBlcmYgICAgICAgICAgICAgICAgICBpZD0xLCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NTk1NzY0ICAgICA3NTA2IHBlcmYgICAgICAgICAgICAgICAgICBpZD0xLCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NjIwODYwICAgICA3NTA2IHBlcmYgICAgICAgICAgICAgICAgICBpZD0xLCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NzEwNDc4ICAgICA2NTMzIG5wdmlld2VyLmJpbiAgICAgICAgICBpZD03OCwgYXJncz0KK3Jhd19zeXNjYWxsc19fc3lzX2VudGVyICAgICAxIDAwODQwLjg0NzcxOTIwNCAgICAgNjUzMyBucHZpZXdlci5iaW4gICAgICAgICAgaWQ9MTQyLCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NzU1NDQ1ICAgICA2NTMzIG5wdmlld2VyLmJpbiAgICAgICAgICBpZD0zLCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3Nzc1NjAxICAgICA2NTMzIG5wdmlld2VyLmJpbiAgICAgICAgICBpZD0zLCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NzgxODIwICAgICA2NTMzIG5wdmlld2VyLmJpbiAgICAgICAgICBpZD0zLCBhcmdzPQorLgorLgorLgorLS0tLQorCitPZiBjb3Vyc2UsIGZvciB0aGlzIHNjcmlwdCwgd2UncmUgbm90IGludGVyZXN0ZWQgaW4gcHJpbnRpbmcgZXZlcnkKK3RyYWNlIGV2ZW50LCBidXQgcmF0aGVyIGFnZ3JlZ2F0aW5nIGl0IGluIGEgdXNlZnVsIHdheS4gIFNvIHdlJ2xsIGdldAorcmlkIG9mIGV2ZXJ5dGhpbmcgdG8gZG8gd2l0aCBwcmludGluZyBhcyB3ZWxsIGFzIHRoZSB0cmFjZV9iZWdpbigpIGFuZAordHJhY2VfdW5oYW5kbGVkKCkgZnVuY3Rpb25zLCB3aGljaCB3ZSB3b24ndCBiZSB1c2luZy4gIFRoYXQgbGVhdmVzIHVzCit3aXRoIHRoaXMgbWluaW1hbGlzdGljIHNrZWxldG9uOgorCistLS0tCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworc3lzLnBhdGguYXBwZW5kKG9zLmVudmlyb25bJ1BFUkZfRVhFQ19QQVRIJ10gKyBcCisJJy9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKQorCitmcm9tIHBlcmZfdHJhY2VfY29udGV4dCBpbXBvcnQgKgorZnJvbSBDb3JlIGltcG9ydCAqCisKK2RlZiB0cmFjZV9lbmQoKToKKwlwcmludCAiaW4gdHJhY2VfZW5kIgorCitkZWYgcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlpZCwgYXJncyk6CistLS0tCisKK0luIHRyYWNlX2VuZCgpLCB3ZSdsbCBzaW1wbHkgcHJpbnQgdGhlIHJlc3VsdHMsIGJ1dCBmaXJzdCB3ZSBuZWVkIHRvCitnZW5lcmF0ZSBzb21lIHJlc3VsdHMgdG8gcHJpbnQuICBUbyBkbyB0aGF0IHdlIG5lZWQgdG8gaGF2ZSBvdXIKK3N5c19lbnRlcigpIGhhbmRsZXIgZG8gdGhlIG5lY2Vzc2FyeSB0YWxseWluZyB1bnRpbCBhbGwgZXZlbnRzIGhhdmUKK2JlZW4gY291bnRlZC4gIEEgaGFzaCB0YWJsZSBpbmRleGVkIGJ5IHN5c2NhbGwgaWQgaXMgYSBnb29kIHdheSB0bworc3RvcmUgdGhhdCBpbmZvcm1hdGlvbjsgZXZlcnkgdGltZSB0aGUgc3lzX2VudGVyKCkgaGFuZGxlciBpcyBjYWxsZWQsCit3ZSBzaW1wbHkgaW5jcmVtZW50IGEgY291bnQgYXNzb2NpYXRlZCB3aXRoIHRoYXQgaGFzaCBlbnRyeSBpbmRleGVkIGJ5Cit0aGF0IHN5c2NhbGwgaWQ6CisKKy0tLS0KKyAgc3lzY2FsbHMgPSBhdXRvZGljdCgpCisKKyAgdHJ5OgorICAgIHN5c2NhbGxzW2lkXSArPSAxCisgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgc3lzY2FsbHNbaWRdID0gMQorLS0tLQorCitUaGUgc3lzY2FsbHMgJ2F1dG9kaWN0JyBvYmplY3QgaXMgYSBzcGVjaWFsIGtpbmQgb2YgUHl0aG9uIGRpY3Rpb25hcnkKKyhpbXBsZW1lbnRlZCBpbiBDb3JlLnB5KSB0aGF0IGltcGxlbWVudHMgUGVybCdzICdhdXRvdml2aWZ5aW5nJyBoYXNoZXMKK2luIFB5dGhvbiBpLmUuIHdpdGggYXV0b3ZpdmlmeWluZyBoYXNoZXMsIHlvdSBjYW4gYXNzaWduIG5lc3RlZCBoYXNoCit2YWx1ZXMgd2l0aG91dCBoYXZpbmcgdG8gZ28gdG8gdGhlIHRyb3VibGUgb2YgY3JlYXRpbmcgaW50ZXJtZWRpYXRlCitsZXZlbHMgaWYgdGhleSBkb24ndCBleGlzdCBlLmcgc3lzY2FsbHNbY29tbV1bcGlkXVtpZF0gPSAxIHdpbGwgY3JlYXRlCit0aGUgaW50ZXJtZWRpYXRlIGhhc2ggbGV2ZWxzIGFuZCBmaW5hbGx5IGFzc2lnbiB0aGUgdmFsdWUgMSB0byB0aGUKK2hhc2ggZW50cnkgZm9yICdpZCcgKGJlY2F1c2UgdGhlIHZhbHVlIGJlaW5nIGFzc2lnbmVkIGlzbid0IGEgaGFzaAorb2JqZWN0IGl0c2VsZiwgdGhlIGluaXRpYWwgdmFsdWUgaXMgYXNzaWduZWQgaW4gdGhlIFR5cGVFcnJvcgorZXhjZXB0aW9uLiAgV2VsbCwgdGhlcmUgbWF5IGJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIGluIFB5dGhvbiBidXQKK3RoYXQncyB3aGF0IHdvcmtzIGZvciBub3cpLgorCitQdXR0aW5nIHRoYXQgY29kZSBpbnRvIHRoZSByYXdfc3lzY2FsbHNfX3N5c19lbnRlcigpIGhhbmRsZXIsIHdlCitlZmZlY3RpdmVseSBlbmQgdXAgd2l0aCBhIHNpbmdsZS1sZXZlbCBkaWN0aW9uYXJ5IGtleWVkIG9uIHN5c2NhbGwgaWQKK2FuZCBoYXZpbmcgdGhlIGNvdW50cyB3ZSd2ZSB0YWxsaWVkIGFzIHZhbHVlcy4KKworVGhlIHByaW50X3N5c2NhbGxfdG90YWxzKCkgZnVuY3Rpb24gaXRlcmF0ZXMgb3ZlciB0aGUgZW50cmllcyBpbiB0aGUKK2RpY3Rpb25hcnkgYW5kIGRpc3BsYXlzIGEgbGluZSBmb3IgZWFjaCBlbnRyeSBjb250YWluaW5nIHRoZSBzeXNjYWxsCituYW1lICh0aGUgZGljdG9uYXJ5IGtleXMgY29udGFpbiB0aGUgc3lzY2FsbCBpZHMsIHdoaWNoIGFyZSBwYXNzZWQgdG8KK3RoZSBVdGlsIGZ1bmN0aW9uIHN5c2NhbGxfbmFtZSgpLCB3aGljaCB0cmFuc2xhdGVzIHRoZSByYXcgc3lzY2FsbAorbnVtYmVycyB0byB0aGUgY29ycmVzcG9uZGluZyBzeXNjYWxsIG5hbWUgc3RyaW5ncykuICBUaGUgb3V0cHV0IGlzCitkaXNwbGF5ZWQgYWZ0ZXIgYWxsIHRoZSBldmVudHMgaW4gdGhlIHRyYWNlIGhhdmUgYmVlbiBwcm9jZXNzZWQsIGJ5CitjYWxsaW5nIHRoZSBwcmludF9zeXNjYWxsX3RvdGFscygpIGZ1bmN0aW9uIGZyb20gdGhlIHRyYWNlX2VuZCgpCitoYW5kbGVyIGNhbGxlZCBhdCB0aGUgZW5kIG9mIHNjcmlwdCBwcm9jZXNzaW5nLgorCitUaGUgZmluYWwgc2NyaXB0IHByb2R1Y2luZyB0aGUgb3V0cHV0IHNob3duIGFib3ZlIGlzIHNob3duIGluIGl0cworZW50aXJldHkgYmVsb3cgKHN5c2NhbGxfbmFtZSgpIGhlbHBlciBpcyBub3QgeWV0IGF2YWlsYWJsZSwgeW91IGNhbgorb25seSBkZWFsIHdpdGggaWQncyBmb3Igbm93KToKKworLS0tLQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK3N5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXAorCScvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJykKKworZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKK2Zyb20gQ29yZSBpbXBvcnQgKgorZnJvbSBVdGlsIGltcG9ydCAqCisKK3N5c2NhbGxzID0gYXV0b2RpY3QoKQorCitkZWYgdHJhY2VfZW5kKCk6CisJcHJpbnRfc3lzY2FsbF90b3RhbHMoKQorCitkZWYgcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlpZCwgYXJncyk6CisJdHJ5OgorCQlzeXNjYWxsc1tpZF0gKz0gMQorCWV4Y2VwdCBUeXBlRXJyb3I6CisJCXN5c2NhbGxzW2lkXSA9IDEKKworZGVmIHByaW50X3N5c2NhbGxfdG90YWxzKCk6CisgICAgaWYgZm9yX2NvbW0gaXMgbm90IE5vbmU6CisJICAgIHByaW50ICJcbnN5c2NhbGwgZXZlbnRzIGZvciAlczpcblxuIiAlIChmb3JfY29tbSksCisgICAgZWxzZToKKwkgICAgcHJpbnQgIlxuc3lzY2FsbCBldmVudHM6XG5cbiIsCisKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoImV2ZW50IiwgImNvdW50IiksCisgICAgcHJpbnQgIiUtNDBzICAlMTBzXG4iICUgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tLS0tLS0tIiksCisKKyAgICBmb3IgaWQsIHZhbCBpbiBzb3J0ZWQoc3lzY2FsbHMuaXRlcml0ZW1zKCksIGtleSA9IGxhbWJkYShrLCB2KTogKHYsIGspLCBcCisJCQkJICByZXZlcnNlID0gVHJ1ZSk6CisJICAgIHByaW50ICIlLTQwcyAgJTEwZFxuIiAlIChzeXNjYWxsX25hbWUoaWQpLCB2YWwpLAorLS0tLQorCitUaGUgc2NyaXB0IGNhbiBiZSBydW4ganVzdCBhcyBiZWZvcmU6CisKKyAgIyBwZXJmIHRyYWNlIC1zIHN5c2NhbGwtY291bnRzLnB5CisKK1NvIHRob3NlIGFyZSB0aGUgZXNzZW50aWFsIHN0ZXBzIGluIHdyaXRpbmcgYW5kIHJ1bm5pbmcgYSBzY3JpcHQuICBUaGUKK3Byb2Nlc3MgY2FuIGJlIGdlbmVyYWxpemVkIHRvIGFueSB0cmFjZXBvaW50IG9yIHNldCBvZiB0cmFjZXBvaW50cworeW91J3JlIGludGVyZXN0ZWQgaW4gLSBiYXNpY2FsbHkgZmluZCB0aGUgdHJhY2Vwb2ludChzKSB5b3UncmUKK2ludGVyZXN0ZWQgaW4gYnkgbG9va2luZyBhdCB0aGUgbGlzdCBvZiBhdmFpbGFibGUgZXZlbnRzIHNob3duIGJ5CisncGVyZiBsaXN0JyBhbmQvb3IgbG9vayBpbiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIGV2ZW50cyBmb3IKK2RldGFpbGVkIGV2ZW50IGFuZCBmaWVsZCBpbmZvLCByZWNvcmQgdGhlIGNvcnJlc3BvbmRpbmcgdHJhY2UgZGF0YQordXNpbmcgJ3BlcmYgcmVjb3JkJywgcGFzc2luZyBpdCB0aGUgbGlzdCBvZiBpbnRlcmVzdGluZyBldmVudHMsCitnZW5lcmF0ZSBhIHNrZWxldG9uIHNjcmlwdCB1c2luZyAncGVyZiB0cmFjZSAtZyBweXRob24nIGFuZCBtb2RpZnkgdGhlCitjb2RlIHRvIGFnZ3JlZ2F0ZSBhbmQgZGlzcGxheSBpdCBmb3IgeW91ciBwYXJ0aWN1bGFyIG5lZWRzLgorCitBZnRlciB5b3UndmUgZG9uZSB0aGF0IHlvdSBtYXkgZW5kIHVwIHdpdGggYSBnZW5lcmFsLXB1cnBvc2Ugc2NyaXB0Cit0aGF0IHlvdSB3YW50IHRvIGtlZXAgYXJvdW5kIGFuZCBoYXZlIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZS4gIEJ5Cit3cml0aW5nIGEgY291cGxlIG9mIHZlcnkgc2ltcGxlIHNoZWxsIHNjcmlwdHMgYW5kIHB1dHRpbmcgdGhlbSBpbiB0aGUKK3JpZ2h0IHBsYWNlLCB5b3UgY2FuIGhhdmUgeW91ciBzY3JpcHQgbGlzdGVkIGFsb25nc2lkZSB0aGUgb3RoZXIKK3NjcmlwdHMgbGlzdGVkIGJ5IHRoZSAncGVyZiB0cmFjZSAtbCcgY29tbWFuZCBlLmcuOgorCistLS0tCityb290QHRyb3BpY2FuYTp+IyBwZXJmIHRyYWNlIC1sCitMaXN0IG9mIGF2YWlsYWJsZSB0cmFjZSBzY3JpcHRzOgorICB3b3JrcXVldWUtc3RhdHMgICAgICAgICAgICAgICAgICAgICAgd29ya3F1ZXVlIHN0YXRzIChpbnMvZXhlL2NyZWF0ZS9kZXN0cm95KQorICB3YWtldXAtbGF0ZW5jeSAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtLXdpZGUgbWluL21heC9hdmcgd2FrZXVwIGxhdGVuY3kKKyAgcnctYnktZmlsZSA8Y29tbT4gICAgICAgICAgICAgICAgICAgIHIvdyBhY3Rpdml0eSBmb3IgYSBwcm9ncmFtLCBieSBmaWxlCisgIHJ3LWJ5LXBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0td2lkZSByL3cgYWN0aXZpdHkKKy0tLS0KKworQSBuaWNlIHNpZGUgZWZmZWN0IG9mIGRvaW5nIHRoaXMgaXMgdGhhdCB5b3UgYWxzbyB0aGVuIGNhcHR1cmUgdGhlCitwcm9iYWJseSBsZW5ndGh5ICdwZXJmIHJlY29yZCcgY29tbWFuZCBuZWVkZWQgdG8gcmVjb3JkIHRoZSBldmVudHMgZm9yCit0aGUgc2NyaXB0LgorCitUbyBoYXZlIHRoZSBzY3JpcHQgYXBwZWFyIGFzIGEgJ2J1aWx0LWluJyBzY3JpcHQsIHlvdSB3cml0ZSB0d28gc2ltcGxlCitzY3JpcHRzLCBvbmUgZm9yIHJlY29yZGluZyBhbmQgb25lIGZvciAncmVwb3J0aW5nJy4KKworVGhlICdyZWNvcmQnIHNjcmlwdCBpcyBhIHNoZWxsIHNjcmlwdCB3aXRoIHRoZSBzYW1lIGJhc2UgbmFtZSBhcyB5b3VyCitzY3JpcHQsIGJ1dCB3aXRoIC1yZWNvcmQgYXBwZW5kZWQuICBUaGUgc2hlbGwgc2NyaXB0IHNob3VsZCBiZSBwdXQKK2ludG8gdGhlIHBlcmYvc2NyaXB0cy9weXRob24vYmluIGRpcmVjdG9yeSBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLgorSW4gdGhhdCBzY3JpcHQsIHlvdSB3cml0ZSB0aGUgJ3BlcmYgcmVjb3JkJyBjb21tYW5kLWxpbmUgbmVlZGVkIGZvcgoreW91ciBzY3JpcHQ6CisKKy0tLS0KKyMgY2F0IGtlcm5lbC1zb3VyY2UvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtcmVjb3JkCisKKyMhL2Jpbi9iYXNoCitwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIHJhd19zeXNjYWxsczpzeXNfZW50ZXIKKy0tLS0KKworVGhlICdyZXBvcnQnIHNjcmlwdCBpcyBhbHNvIGEgc2hlbGwgc2NyaXB0IHdpdGggdGhlIHNhbWUgYmFzZSBuYW1lIGFzCit5b3VyIHNjcmlwdCwgYnV0IHdpdGggLXJlcG9ydCBhcHBlbmRlZC4gIEl0IHNob3VsZCBhbHNvIGJlIGxvY2F0ZWQgaW4KK3RoZSBwZXJmL3NjcmlwdHMvcHl0aG9uL2JpbiBkaXJlY3RvcnkuICBJbiB0aGF0IHNjcmlwdCwgeW91IHdyaXRlIHRoZQorJ3BlcmYgdHJhY2UgLXMnIGNvbW1hbmQtbGluZSBuZWVkZWQgZm9yIHJ1bm5pbmcgeW91ciBzY3JpcHQ6CisKKy0tLS0KKyMgY2F0IGtlcm5lbC1zb3VyY2UvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtcmVwb3J0CisKKyMhL2Jpbi9iYXNoCisjIGRlc2NyaXB0aW9uOiBzeXN0ZW0td2lkZSBzeXNjYWxsIGNvdW50cworcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcHl0aG9uL3N5c2NhbGwtY291bnRzLnB5CistLS0tCisKK05vdGUgdGhhdCB0aGUgbG9jYXRpb24gb2YgdGhlIFB5dGhvbiBzY3JpcHQgZ2l2ZW4gaW4gdGhlIHNoZWxsIHNjcmlwdAoraXMgaW4gdGhlIGxpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcHl0aG9uIGRpcmVjdG9yeSAtIHRoaXMgaXMgd2hlcmUKK3RoZSBzY3JpcHQgd2lsbCBiZSBjb3BpZWQgYnkgJ21ha2UgaW5zdGFsbCcgd2hlbiB5b3UgaW5zdGFsbCBwZXJmLgorRm9yIHRoZSBpbnN0YWxsYXRpb24gdG8gaW5zdGFsbCB5b3VyIHNjcmlwdCB0aGVyZSwgeW91ciBzY3JpcHQgbmVlZHMKK3RvIGJlIGxvY2F0ZWQgaW4gdGhlIHBlcmYvc2NyaXB0cy9weXRob24gZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwKK3NvdXJjZSB0cmVlOgorCistLS0tCisjIGxzIC1hbCBrZXJuZWwtc291cmNlL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24KKworcm9vdEB0cm9waWNhbmE6L2hvbWUvdHJ6L3NyYy90aXAjIGxzIC1hbCB0b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uCit0b3RhbCAzMgorZHJ3eHIteHIteCA0IHRyeiB0cnogNDA5NiAyMDEwLTAxLTI2IDIyOjMwIC4KK2Ryd3hyLXhyLXggNCB0cnogdHJ6IDQwOTYgMjAxMC0wMS0yNiAyMjoyOSAuLgorZHJ3eHIteHIteCAyIHRyeiB0cnogNDA5NiAyMDEwLTAxLTI2IDIyOjI5IGJpbgorLXJ3LXItLXItLSAxIHRyeiB0cnogMjU0OCAyMDEwLTAxLTI2IDIyOjI5IGNoZWNrLXBlcmYtdHJhY2UucHkKK2Ryd3hyLXhyLXggMyB0cnogdHJ6IDQwOTYgMjAxMC0wMS0yNiAyMjo0OSBQZXJmLVRyYWNlLVV0aWwKKy1ydy1yLS1yLS0gMSB0cnogdHJ6IDE0NjIgMjAxMC0wMS0yNiAyMjozMCBzeXNjYWxsLWNvdW50cy5weQorLS0tLQorCitPbmNlIHlvdSd2ZSBkb25lIHRoYXQgKGRvbid0IGZvcmdldCB0byBkbyBhIG5ldyAnbWFrZSBpbnN0YWxsJywKK290aGVyd2lzZSB5b3VyIHNjcmlwdCB3b24ndCBzaG93IHVwIGF0IHJ1bi10aW1lKSwgJ3BlcmYgdHJhY2UgLWwnCitzaG91bGQgc2hvdyBhIG5ldyBlbnRyeSBmb3IgeW91ciBzY3JpcHQ6CisKKy0tLS0KK3Jvb3RAdHJvcGljYW5hOn4jIHBlcmYgdHJhY2UgLWwKK0xpc3Qgb2YgYXZhaWxhYmxlIHRyYWNlIHNjcmlwdHM6CisgIHdvcmtxdWV1ZS1zdGF0cyAgICAgICAgICAgICAgICAgICAgICB3b3JrcXVldWUgc3RhdHMgKGlucy9leGUvY3JlYXRlL2Rlc3Ryb3kpCisgIHdha2V1cC1sYXRlbmN5ICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0td2lkZSBtaW4vbWF4L2F2ZyB3YWtldXAgbGF0ZW5jeQorICBydy1ieS1maWxlIDxjb21tPiAgICAgICAgICAgICAgICAgICAgci93IGFjdGl2aXR5IGZvciBhIHByb2dyYW0sIGJ5IGZpbGUKKyAgcnctYnktcGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIHIvdyBhY3Rpdml0eQorICBzeXNjYWxsLWNvdW50cyAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtLXdpZGUgc3lzY2FsbCBjb3VudHMKKy0tLS0KKworWW91IGNhbiBub3cgcGVyZm9ybSB0aGUgcmVjb3JkIHN0ZXAgdmlhICdwZXJmIHRyYWNlIHJlY29yZCc6CisKKyAgIyBwZXJmIHRyYWNlIHJlY29yZCBzeXNjYWxsLWNvdW50cworCithbmQgZGlzcGxheSB0aGUgb3V0cHV0IHVzaW5nICdwZXJmIHRyYWNlIHJlcG9ydCc6CisKKyAgIyBwZXJmIHRyYWNlIHJlcG9ydCBzeXNjYWxsLWNvdW50cworCitTVEFSVEVSIFNDUklQVFMKKy0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHF1aWNrbHkgZ2V0IHN0YXJ0ZWQgd3JpdGluZyBhIHNjcmlwdCBmb3IgYSBwYXJ0aWN1bGFyIHNldCBvZgordHJhY2UgZGF0YSBieSBnZW5lcmF0aW5nIGEgc2tlbGV0b24gc2NyaXB0IHVzaW5nICdwZXJmIHRyYWNlIC1nCitweXRob24nIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyBhbiBleGlzdGluZyBwZXJmLmRhdGEgdHJhY2UgZmlsZS4KK1RoYXQgd2lsbCBnZW5lcmF0ZSBhIHN0YXJ0ZXIgc2NyaXB0IGNvbnRhaW5pbmcgYSBoYW5kbGVyIGZvciBlYWNoIG9mCit0aGUgZXZlbnQgdHlwZXMgaW4gdGhlIHRyYWNlIGZpbGU7IGl0IHNpbXBseSBwcmludHMgZXZlcnkgYXZhaWxhYmxlCitmaWVsZCBmb3IgZWFjaCBldmVudCBpbiB0aGUgdHJhY2UgZmlsZS4KKworWW91IGNhbiBhbHNvIGxvb2sgYXQgdGhlIGV4aXN0aW5nIHNjcmlwdHMgaW4KK34vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24gZm9yIHR5cGljYWwgZXhhbXBsZXMgc2hvd2luZyBob3cgdG8KK2RvIGJhc2ljIHRoaW5ncyBsaWtlIGFnZ3JlZ2F0ZSBldmVudCBkYXRhLCBwcmludCByZXN1bHRzLCBldGMuICBBbHNvLAordGhlIGNoZWNrLXBlcmYtdHJhY2UucHkgc2NyaXB0LCB3aGlsZSBub3QgaW50ZXJlc3RpbmcgZm9yIGl0cyByZXN1bHRzLAorYXR0ZW1wdHMgdG8gZXhlcmNpc2UgYWxsIG9mIHRoZSBtYWluIHNjcmlwdGluZyBmZWF0dXJlcy4KKworRVZFTlQgSEFORExFUlMKKy0tLS0tLS0tLS0tLS0tCisKK1doZW4gcGVyZiB0cmFjZSBpcyBpbnZva2VkIHVzaW5nIGEgdHJhY2Ugc2NyaXB0LCBhIHVzZXItZGVmaW5lZAorJ2hhbmRsZXIgZnVuY3Rpb24nIGlzIGNhbGxlZCBmb3IgZWFjaCBldmVudCBpbiB0aGUgdHJhY2UuICBJZiB0aGVyZSdzCitubyBoYW5kbGVyIGZ1bmN0aW9uIGRlZmluZWQgZm9yIGEgZ2l2ZW4gZXZlbnQgdHlwZSwgdGhlIGV2ZW50IGlzCitpZ25vcmVkIChvciBwYXNzZWQgdG8gYSAndHJhY2VfaGFuZGxlZCcgZnVuY3Rpb24sIHNlZSBiZWxvdykgYW5kIHRoZQorbmV4dCBldmVudCBpcyBwcm9jZXNzZWQuCisKK01vc3Qgb2YgdGhlIGV2ZW50J3MgZmllbGQgdmFsdWVzIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIHRoZQoraGFuZGxlciBmdW5jdGlvbjsgc29tZSBvZiB0aGUgbGVzcyBjb21tb24gb25lcyBhcmVuJ3QgLSB0aG9zZSBhcmUKK2F2YWlsYWJsZSBhcyBjYWxscyBiYWNrIGludG8gdGhlIHBlcmYgZXhlY3V0YWJsZSAoc2VlIGJlbG93KS4KKworQXMgYW4gZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBwZXJmIHJlY29yZCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHJlY29yZAorYWxsIHNjaGVkX3dha2V1cCBldmVudHMgaW4gdGhlIHN5c3RlbToKKworICMgcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSBzY2hlZDpzY2hlZF93YWtldXAKKworVHJhY2VzIG1lYW50IHRvIGJlIHByb2Nlc3NlZCB1c2luZyBhIHNjcmlwdCBzaG91bGQgYmUgcmVjb3JkZWQgd2l0aAordGhlIGFib3ZlIG9wdGlvbnM6IC1jIDEgc2F5cyB0byBzYW1wbGUgZXZlcnkgZXZlbnQsIC1hIHRvIGVuYWJsZQorc3lzdGVtLXdpZGUgY29sbGVjdGlvbiwgLU0gdG8gbXVsdGlwbGV4IHRoZSBvdXRwdXQsIGFuZCAtUiB0byBjb2xsZWN0CityYXcgc2FtcGxlcy4KKworVGhlIGZvcm1hdCBmaWxlIGZvciB0aGUgc2NoZWRfd2FrZXAgZXZlbnQgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZpZWxkcworKHNlZSAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9zY2hlZC9zY2hlZF93YWtldXAvZm9ybWF0KToKKworLS0tLQorIGZvcm1hdDoKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgc2hvcnQgY29tbW9uX3R5cGU7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX2ZsYWdzOworICAgICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OworICAgICAgICBmaWVsZDppbnQgY29tbW9uX3BpZDsKKyAgICAgICAgZmllbGQ6aW50IGNvbW1vbl9sb2NrX2RlcHRoOworCisgICAgICAgIGZpZWxkOmNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKKyAgICAgICAgZmllbGQ6cGlkX3QgcGlkOworICAgICAgICBmaWVsZDppbnQgcHJpbzsKKyAgICAgICAgZmllbGQ6aW50IHN1Y2Nlc3M7CisgICAgICAgIGZpZWxkOmludCB0YXJnZXRfY3B1OworLS0tLQorCitUaGUgaGFuZGxlciBmdW5jdGlvbiBmb3IgdGhpcyBldmVudCB3b3VsZCBiZSBkZWZpbmVkIGFzOgorCistLS0tCitkZWYgc2NoZWRfX3NjaGVkX3dha2V1cChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LCBjb21tb25fc2VjcywKKyAgICAgICBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorICAgICAgIGNvbW0sIHBpZCwgcHJpbywgc3VjY2VzcywgdGFyZ2V0X2NwdSk6CisgICAgICAgcGFzcworLS0tLQorCitUaGUgaGFuZGxlciBmdW5jdGlvbiB0YWtlcyB0aGUgZm9ybSBzdWJzeXN0ZW1fX2V2ZW50X25hbWUuCisKK1RoZSBjb21tb25fKiBhcmd1bWVudHMgaW4gdGhlIGhhbmRsZXIncyBhcmd1bWVudCBsaXN0IGFyZSB0aGUgc2V0IG9mCithcmd1bWVudHMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyczsgc29tZSBvZiB0aGUgZmllbGRzIGNvcnJlc3BvbmQKK3RvIHRoZSBjb21tb25fKiBmaWVsZHMgaW4gdGhlIGZvcm1hdCBmaWxlLCBidXQgc29tZSBhcmUgc3ludGhlc2l6ZWQsCithbmQgc29tZSBvZiB0aGUgY29tbW9uXyogZmllbGRzIGFyZW4ndCBjb21tb24gZW5vdWdoIHRvIHRvIGJlIHBhc3NlZAordG8gZXZlcnkgZXZlbnQgYXMgYXJndW1lbnRzIGJ1dCBhcmUgYXZhaWxhYmxlIGFzIGxpYnJhcnkgZnVuY3Rpb25zLgorCitIZXJlJ3MgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIG9mIHRoZSBpbnZhcmlhbnQgZXZlbnQgYXJnczoKKworIGV2ZW50X25hbWUgCSAgCSAgICB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgYXMgdGV4dAorIGNvbnRleHQJCSAgICBhbiBvcGFxdWUgJ2Nvb2tpZScgdXNlZCBpbiBjYWxscyBiYWNrIGludG8gcGVyZgorIGNvbW1vbl9jcHUJCSAgICB0aGUgY3B1IHRoZSBldmVudCBvY2N1cnJlZCBvbgorIGNvbW1vbl9zZWNzCQkgICAgdGhlIHNlY3MgcG9ydGlvbiBvZiB0aGUgZXZlbnQgdGltZXN0YW1wCisgY29tbW9uX25zZWNzCQkgICAgdGhlIG5zZWNzIHBvcnRpb24gb2YgdGhlIGV2ZW50IHRpbWVzdGFtcAorIGNvbW1vbl9waWQJCSAgICB0aGUgcGlkIG9mIHRoZSBjdXJyZW50IHRhc2sKKyBjb21tb25fY29tbQkJICAgIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MKKworQWxsIG9mIHRoZSByZW1haW5pbmcgZmllbGRzIGluIHRoZSBldmVudCdzIGZvcm1hdCBmaWxlIGhhdmUKK2NvdW50ZXJwYXJ0cyBhcyBoYW5kbGVyIGZ1bmN0aW9uIGFyZ3VtZW50cyBvZiB0aGUgc2FtZSBuYW1lLCBhcyBjYW4gYmUKK3NlZW4gaW4gdGhlIGV4YW1wbGUgYWJvdmUuCisKK1RoZSBhYm92ZSBwcm92aWRlcyB0aGUgYmFzaWNzIG5lZWRlZCB0byBkaXJlY3RseSBhY2Nlc3MgZXZlcnkgZmllbGQgb2YKK2V2ZXJ5IGV2ZW50IGluIGEgdHJhY2UsIHdoaWNoIGNvdmVycyA5MCUgb2Ygd2hhdCB5b3UgbmVlZCB0byBrbm93IHRvCit3cml0ZSBhIHVzZWZ1bCB0cmFjZSBzY3JpcHQuICBUaGUgc2VjdGlvbnMgYmVsb3cgY292ZXIgdGhlIHJlc3QuCisKK1NDUklQVCBMQVlPVVQKKy0tLS0tLS0tLS0tLS0KKworRXZlcnkgcGVyZiB0cmFjZSBQeXRob24gc2NyaXB0IHNob3VsZCBzdGFydCBieSBzZXR0aW5nIHVwIGEgUHl0aG9uCittb2R1bGUgc2VhcmNoIHBhdGggYW5kICdpbXBvcnQnaW5nIGEgZmV3IHN1cHBvcnQgbW9kdWxlcyAoc2VlIG1vZHVsZQorZGVzY3JpcHRpb25zIGJlbG93KToKKworLS0tLQorIGltcG9ydCBvcworIGltcG9ydCBzeXMKKworIHN5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXAorCSAgICAgICcvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJykKKworIGZyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCisgZnJvbSBDb3JlIGltcG9ydCAqCistLS0tCisKK1RoZSByZXN0IG9mIHRoZSBzY3JpcHQgY2FuIGNvbnRhaW4gaGFuZGxlciBmdW5jdGlvbnMgYW5kIHN1cHBvcnQKK2Z1bmN0aW9ucyBpbiBhbnkgb3JkZXIuCisKK0FzaWRlIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb25zIGRpc2N1c3NlZCBhYm92ZSwgZXZlcnkgc2NyaXB0CitjYW4gaW1wbGVtZW50IGEgc2V0IG9mIG9wdGlvbmFsIGZ1bmN0aW9uczoKKworKnRyYWNlX2JlZ2luKiwgaWYgZGVmaW5lZCwgaXMgY2FsbGVkIGJlZm9yZSBhbnkgZXZlbnQgaXMgcHJvY2Vzc2VkIGFuZAorZ2l2ZXMgc2NyaXB0cyBhIGNoYW5jZSB0byBkbyBzZXR1cCB0YXNrczoKKworLS0tLQorZGVmIHRyYWNlX2JlZ2luOgorICAgIHBhc3MKKy0tLS0KKworKnRyYWNlX2VuZCosIGlmIGRlZmluZWQsIGlzIGNhbGxlZCBhZnRlciBhbGwgZXZlbnRzIGhhdmUgYmVlbgorIHByb2Nlc3NlZCBhbmQgZ2l2ZXMgc2NyaXB0cyBhIGNoYW5jZSB0byBkbyBlbmQtb2Ytc2NyaXB0IHRhc2tzLCBzdWNoCisgYXMgZGlzcGxheSByZXN1bHRzOgorCistLS0tCitkZWYgdHJhY2VfZW5kOgorICAgIHBhc3MKKy0tLS0KKworKnRyYWNlX3VuaGFuZGxlZCosIGlmIGRlZmluZWQsIGlzIGNhbGxlZCBhZnRlciBmb3IgYW55IGV2ZW50IHRoYXQKKyBkb2Vzbid0IGhhdmUgYSBoYW5kbGVyIGV4cGxpY2l0bHkgZGVmaW5lZCBmb3IgaXQuICBUaGUgc3RhbmRhcmQgc2V0Cisgb2YgY29tbW9uIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGludG8gaXQ6CisKKy0tLS0KK2RlZiB0cmFjZV91bmhhbmRsZWQoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsCisgICAgICAgIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pOgorICAgIHBhc3MKKy0tLS0KKworVGhlIHJlbWFpbmluZyBzZWN0aW9ucyBwcm92aWRlIGRlc2NyaXB0aW9ucyBvZiBlYWNoIG9mIHRoZSBhdmFpbGFibGUKK2J1aWx0LWluIHBlcmYgdHJhY2UgUHl0aG9uIG1vZHVsZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZnVuY3Rpb25zLgorCitBVkFJTEFCTEUgTU9EVUxFUyBBTkQgRlVOQ1RJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgdGhlIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGF2YWlsYWJsZQordmlhIHRoZSB2YXJpb3VzIHBlcmYgdHJhY2UgUHl0aG9uIG1vZHVsZXMuICBUbyB1c2UgdGhlIGZ1bmN0aW9ucyBhbmQKK3ZhcmlhYmxlcyBmcm9tIHRoZSBnaXZlbiBtb2R1bGUsIGFkZCB0aGUgY29ycmVzcG9uZGluZyAnZnJvbSBYWFhYCitpbXBvcnQnIGxpbmUgdG8geW91ciBwZXJmIHRyYWNlIHNjcmlwdC4KKworQ29yZS5weSBNb2R1bGUKK35+fn5+fn5+fn5+fn5+CisKK1RoZXNlIGZ1bmN0aW9ucyBwcm92aWRlIHNvbWUgZXNzZW50aWFsIGZ1bmN0aW9ucyB0byB1c2VyIHNjcmlwdHMuCisKK1RoZSAqZmxhZ19zdHIqIGFuZCAqc3ltYm9sX3N0ciogZnVuY3Rpb25zIHByb3ZpZGUgaHVtYW4tcmVhZGFibGUKK3N0cmluZ3MgZm9yIGZsYWcgYW5kIHN5bWJvbGljIGZpZWxkcy4gIFRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIHN0cmluZ3MKK2FuZCB2YWx1ZXMgcGFyc2VkIGZyb20gdGhlICdwcmludCBmbXQnIGZpZWxkcyBvZiB0aGUgZXZlbnQgZm9ybWF0CitmaWxlczoKKworICBmbGFnX3N0cihldmVudF9uYW1lLCBmaWVsZF9uYW1lLCBmaWVsZF92YWx1ZSkgLSByZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50aW9uIGNvcnJlc3BvbmRpbmcgdG8gZmllbGRfdmFsdWUgZm9yIHRoZSBmbGFnIGZpZWxkIGZpZWxkX25hbWUgb2YgZXZlbnQgZXZlbnRfbmFtZQorICBzeW1ib2xfc3RyKGV2ZW50X25hbWUsIGZpZWxkX25hbWUsIGZpZWxkX3ZhbHVlKSAtIHJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRpb24gY29ycmVzcG9uZGluZyB0byBmaWVsZF92YWx1ZSBmb3IgdGhlIHN5bWJvbGljIGZpZWxkIGZpZWxkX25hbWUgb2YgZXZlbnQgZXZlbnRfbmFtZQorCitUaGUgKmF1dG9kaWN0KiBmdW5jdGlvbiByZXR1cm5zIGEgc3BlY2lhbCBzcGVjaWFsIGtpbmQgb2YgUHl0aG9uCitkaWN0aW9uYXJ5IHRoYXQgaW1wbGVtZW50cyBQZXJsJ3MgJ2F1dG92aXZpZnlpbmcnIGhhc2hlcyBpbiBQeXRob24KK2kuZS4gd2l0aCBhdXRvdml2aWZ5aW5nIGhhc2hlcywgeW91IGNhbiBhc3NpZ24gbmVzdGVkIGhhc2ggdmFsdWVzCit3aXRob3V0IGhhdmluZyB0byBnbyB0byB0aGUgdHJvdWJsZSBvZiBjcmVhdGluZyBpbnRlcm1lZGlhdGUgbGV2ZWxzIGlmCit0aGV5IGRvbid0IGV4aXN0LgorCisgIGF1dG9kaWN0KCkgLSByZXR1cm5zIGFuIGF1dG92aXZpZnlpbmcgZGljdGlvbmFyeSBpbnN0YW5jZQorCisKK3BlcmZfdHJhY2VfY29udGV4dCBNb2R1bGUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU29tZSBvZiB0aGUgJ2NvbW1vbicgZmllbGRzIGluIHRoZSBldmVudCBmb3JtYXQgZmlsZSBhcmVuJ3QgYWxsIHRoYXQKK2NvbW1vbiwgYnV0IG5lZWQgdG8gYmUgbWFkZSBhY2Nlc3NpYmxlIHRvIHVzZXIgc2NyaXB0cyBub25ldGhlbGVzcy4KKworcGVyZl90cmFjZV9jb250ZXh0IGRlZmluZXMgYSBzZXQgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8KK2FjY2VzcyB0aGlzIGRhdGEgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgZXZlbnQuICBFYWNoIG9mIHRoZXNlCitmdW5jdGlvbnMgZXhwZWN0cyBhIGNvbnRleHQgdmFyaWFibGUsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZQorY29udGV4dCB2YXJpYWJsZSBwYXNzZWQgaW50byBldmVyeSBldmVudCBoYW5kbGVyIGFzIHRoZSBzZWNvbmQKK2FyZ3VtZW50LgorCisgY29tbW9uX3BjKGNvbnRleHQpIC0gcmV0dXJucyBjb21tb25fcHJlZW1wdCBjb3VudCBmb3IgdGhlIGN1cnJlbnQgZXZlbnQKKyBjb21tb25fZmxhZ3MoY29udGV4dCkgLSByZXR1cm5zIGNvbW1vbl9mbGFncyBmb3IgdGhlIGN1cnJlbnQgZXZlbnQKKyBjb21tb25fbG9ja19kZXB0aChjb250ZXh0KSAtIHJldHVybnMgY29tbW9uX2xvY2tfZGVwdGggZm9yIHRoZSBjdXJyZW50IGV2ZW50CisKK1V0aWwucHkgTW9kdWxlCit+fn5+fn5+fn5+fn5+fgorCitWYXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB1c2Ugd2l0aCBwZXJmIHRyYWNlOgorCisgIG5zZWNzKHNlY3MsIG5zZWNzKSAtIHJldHVybnMgdG90YWwgbnNlY3MgZ2l2ZW4gc2Vjcy9uc2VjcyBwYWlyCisgIG5zZWNzX3NlY3MobnNlY3MpIC0gcmV0dXJucyB3aG9sZSBzZWNzIHBvcnRpb24gZ2l2ZW4gbnNlY3MKKyAgbnNlY3NfbnNlY3MobnNlY3MpIC0gcmV0dXJucyBuc2VjcyByZW1haW5kZXIgZ2l2ZW4gbnNlY3MKKyAgbnNlY3Nfc3RyKG5zZWNzKSAtIHJldHVybnMgcHJpbnRhYmxlIHN0cmluZyBpbiB0aGUgZm9ybSBzZWNzLm5zZWNzCisgIGF2Zyh0b3RhbCwgbikgLSByZXR1cm5zIGF2ZXJhZ2UgZ2l2ZW4gYSBzdW0gYW5kIGEgdG90YWwgbnVtYmVyIG9mIHZhbHVlcworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtwZXJmOnBlcmYtdHJhY2VbMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLnR4dAppbmRleCA2MGU1OTAwLi44ODc5Mjk5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UudHh0CkBAIC0xOSw2ICsxOSwxMSBAQAogICAncGVyZiB0cmFjZScgdG8gc2VlIGEgZGV0YWlsZWQgdHJhY2Ugb2YgdGhlIHdvcmtsb2FkIHRoYXQgd2FzCiAgIHJlY29yZGVkLgogCisgIFlvdSBjYW4gYWxzbyBydW4gYSBzZXQgb2YgcHJlLWNhbm5lZCBzY3JpcHRzIHRoYXQgYWdncmVnYXRlIGFuZAorICBzdW1tYXJpemUgdGhlIHJhdyB0cmFjZSBkYXRhIGluIHZhcmlvdXMgd2F5cyAodGhlIGxpc3Qgb2Ygc2NyaXB0cyBpcworICBhdmFpbGFibGUgdmlhICdwZXJmIHRyYWNlIC1sJykuICBUaGUgZm9sbG93aW5nIHZhcmlhbnRzIGFsbG93IHlvdSB0bworICByZWNvcmQgYW5kIHJ1biB0aG9zZSBzY3JpcHRzOgorCiAgICdwZXJmIHRyYWNlIHJlY29yZCA8c2NyaXB0PicgdG8gcmVjb3JkIHRoZSBldmVudHMgcmVxdWlyZWQgZm9yICdwZXJmCiAgIHRyYWNlIHJlcG9ydCcuICA8c2NyaXB0PiBpcyB0aGUgbmFtZSBkaXNwbGF5ZWQgaW4gdGhlIG91dHB1dCBvZgogICAncGVyZiB0cmFjZSAtLWxpc3QnIGkuZS4gdGhlIGFjdHVhbCBzY3JpcHQgbmFtZSBtaW51cyBhbnkgbGFuZ3VhZ2UKQEAgLTMxLDYgKzM2LDkgQEAKICAgcmVjb3JkIDxzY3JpcHQ+JyBpcyB1c2VkIGFuZCBzaG91bGQgYmUgcHJlc2VudCBmb3IgdGhpcyBjb21tYW5kIHRvCiAgIHN1Y2NlZWQuCiAKKyAgU2VlIHRoZSAnU0VFIEFMU08nIHNlY3Rpb24gZm9yIGxpbmtzIHRvIGxhbmd1YWdlLXNwZWNpZmljCisgIGluZm9ybWF0aW9uIG9uIGhvdyB0byB3cml0ZSBhbmQgcnVuIHlvdXIgb3duIHRyYWNlIHNjcmlwdHMuCisKIE9QVElPTlMKIC0tLS0tLS0KIC1EOjoKQEAgLTQ1LDkgKzUzLDExIEBACiAtLWxpc3Q9OjoKICAgICAgICAgRGlzcGxheSBhIGxpc3Qgb2YgYXZhaWxhYmxlIHRyYWNlIHNjcmlwdHMuCiAKLS1zOjoKKy1zIFsnbGFuZyddOjoKIC0tc2NyaXB0PTo6CiAgICAgICAgIFByb2Nlc3MgdHJhY2UgZGF0YSB3aXRoIHRoZSBnaXZlbiBzY3JpcHQgKFtsYW5nXTpzY3JpcHRbLmV4dF0pLgorCUlmIHRoZSBzdHJpbmcgJ2xhbmcnIGlzIHNwZWNpZmllZCBpbiBwbGFjZSBvZiBhIHNjcmlwdCBuYW1lLCBhCisgICAgICAgIGxpc3Qgb2Ygc3VwcG9ydGVkIGxhbmd1YWdlcyB3aWxsIGJlIGRpc3BsYXllZCBpbnN0ZWFkLgogCiAtZzo6CiAtLWdlbi1zY3JpcHQ9OjoKQEAgLTU2LDQgKzY2LDUgQEAKIAogU0VFIEFMU08KIC0tLS0tLS0tCi1saW5rcGVyZjpwZXJmLXJlY29yZFsxXSwgbGlua3BlcmY6cGVyZi10cmFjZS1wZXJsWzFdCitsaW5rcGVyZjpwZXJmLXJlY29yZFsxXSwgbGlua3BlcmY6cGVyZi10cmFjZS1wZXJsWzFdLAorbGlua3BlcmY6cGVyZi10cmFjZS1weXRob25bMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLnR4dAppbmRleCA2OWM4MzI1Li4wZWViMjQ3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYudHh0CkBAIC0xMiw3ICsxMiw3IEBACiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotUGVyZm9ybWFuY2UgY291bnRlcnMgZm9yIExpbnV4IGFyZSBhcmUgYSBuZXcga2VybmVsLWJhc2VkIHN1YnN5c3RlbQorUGVyZm9ybWFuY2UgY291bnRlcnMgZm9yIExpbnV4IGFyZSBhIG5ldyBrZXJuZWwtYmFzZWQgc3Vic3lzdGVtCiB0aGF0IHByb3ZpZGUgYSBmcmFtZXdvcmsgZm9yIGFsbCB0aGluZ3MgcGVyZm9ybWFuY2UgYW5hbHlzaXMuIEl0CiBjb3ZlcnMgaGFyZHdhcmUgbGV2ZWwgKENQVS9QTVUsIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCkgZmVhdHVyZXMKIGFuZCBzb2Z0d2FyZSBmZWF0dXJlcyAoc29mdHdhcmUgY291bnRlcnMsIHRyYWNlcG9pbnRzKSBhcyB3ZWxsLgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKaW5kZXggMmU3ZmEzYS4uNTRhNWI1MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL01ha2VmaWxlCkBAIC0yODYsMTEgKzI4Niw3IEBACiBTQ1JJUFRfU0ggPQogVEVTVF9QUk9HUkFNUyA9CiAKLSMKLSMgTm8gc2NyaXB0cyByaWdodCBub3c6Ci0jCi0KLSMgU0NSSVBUX1NIICs9IHBlcmYtYW0uc2gKK1NDUklQVF9TSCArPSBwZXJmLWFyY2hpdmUuc2gKIAogIwogIyBObyBQZXJsIHNjcmlwdHMgcmlnaHQgbm93OgpAQCAtMzE1LDkgKzMxMSw2IEBACiAjIExpc3QgYnVpbHQtaW4gY29tbWFuZCAkQyB3aG9zZSBpbXBsZW1lbnRhdGlvbiBjbWRfJEMoKSBpcyBub3QgaW4KICMgYnVpbHRpbi0kQy5vIGJ1dCBpcyBsaW5rZWQgaW4gYXMgcGFydCBvZiBzb21lIG90aGVyIGNvbW1hbmQuCiAjCi0jIE5vbmUgcmlnaHQgbm93OgotIwotIyBCVUlMVF9JTlMgKz0gcGVyZi1pbml0ICRYCiAKICMgd2hhdCAnYWxsJyB3aWxsIGJ1aWxkIGFuZCAnaW5zdGFsbCcgd2lsbCBpbnN0YWxsLCBpbiBwZXJmZXhlY2RpcgogQUxMX1BST0dSQU1TID0gJChQUk9HUkFNUykgJChTQ1JJUFRTKQpAQCAtMzQwLDYgKzMzMyw3IEBACiBMSUJfSCArPSAuLi8uLi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAogTElCX0ggKz0gLi4vLi4vaW5jbHVkZS9saW51eC9yYnRyZWUuaAogTElCX0ggKz0gLi4vLi4vaW5jbHVkZS9saW51eC9saXN0LmgKK0xJQl9IICs9IC4uLy4uL2luY2x1ZGUvbGludXgvaGFzaC5oCiBMSUJfSCArPSAuLi8uLi9pbmNsdWRlL2xpbnV4L3N0cmluZ2lmeS5oCiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvYml0bWFwLmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9iaXRvcHMuaApAQCAtMzYzLDEyICszNTcsMTQgQEAKIExJQl9IICs9IHBlcmYuaAogTElCX0ggKz0gdXRpbC9jYWNoZS5oCiBMSUJfSCArPSB1dGlsL2NhbGxjaGFpbi5oCitMSUJfSCArPSB1dGlsL2J1aWxkLWlkLmgKIExJQl9IICs9IHV0aWwvZGVidWcuaAogTElCX0ggKz0gdXRpbC9kZWJ1Z2ZzLmgKIExJQl9IICs9IHV0aWwvZXZlbnQuaAogTElCX0ggKz0gdXRpbC9leGVjX2NtZC5oCiBMSUJfSCArPSB1dGlsL3R5cGVzLmgKIExJQl9IICs9IHV0aWwvbGV2ZW5zaHRlaW4uaAorTElCX0ggKz0gdXRpbC9tYXAuaAogTElCX0ggKz0gdXRpbC9wYXJzZS1vcHRpb25zLmgKIExJQl9IICs9IHV0aWwvcGFyc2UtZXZlbnRzLmgKIExJQl9IICs9IHV0aWwvcXVvdGUuaApAQCAtMzg5LDEyICszODUsMTIgQEAKIExJQl9IICs9IHV0aWwvaGlzdC5oCiBMSUJfSCArPSB1dGlsL3RocmVhZC5oCiBMSUJfSCArPSB1dGlsL3RyYWNlLWV2ZW50LmgKLUxJQl9IICs9IHV0aWwvdHJhY2UtZXZlbnQtcGVybC5oCiBMSUJfSCArPSB1dGlsL3Byb2JlLWZpbmRlci5oCiBMSUJfSCArPSB1dGlsL3Byb2JlLWV2ZW50LmgKIAogTElCX09CSlMgKz0gdXRpbC9hYnNwYXRoLm8KIExJQl9PQkpTICs9IHV0aWwvYWxpYXMubworTElCX09CSlMgKz0gdXRpbC9idWlsZC1pZC5vCiBMSUJfT0JKUyArPSB1dGlsL2NvbmZpZy5vCiBMSUJfT0JKUyArPSB1dGlsL2N0eXBlLm8KIExJQl9PQkpTICs9IHV0aWwvZGVidWdmcy5vCkBAIC00MzEsMTIgKzQyNywxMiBAQAogTElCX09CSlMgKz0gdXRpbC90cmFjZS1ldmVudC1wYXJzZS5vCiBMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LXJlYWQubwogTElCX09CSlMgKz0gdXRpbC90cmFjZS1ldmVudC1pbmZvLm8KLUxJQl9PQkpTICs9IHV0aWwvdHJhY2UtZXZlbnQtcGVybC5vCitMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LXNjcmlwdGluZy5vCiBMSUJfT0JKUyArPSB1dGlsL3N2Z2hlbHBlci5vCiBMSUJfT0JKUyArPSB1dGlsL3NvcnQubwogTElCX09CSlMgKz0gdXRpbC9oaXN0Lm8KLUxJQl9PQkpTICs9IHV0aWwvZGF0YV9tYXAubwogTElCX09CSlMgKz0gdXRpbC9wcm9iZS1ldmVudC5vCitMSUJfT0JKUyArPSB1dGlsL3V0aWwubwogCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1hbm5vdGF0ZS5vCiAKQEAgLTQ1MSw2ICs0NDcsNyBAQAogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4taGVscC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1zY2hlZC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1idWlsZGlkLWxpc3QubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tYnVpbGRpZC1jYWNoZS5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1saXN0Lm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXJlY29yZC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1yZXBvcnQubwpAQCAtNDYwLDYgKzQ1Nyw3IEBACiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi10cmFjZS5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1wcm9iZS5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1rbWVtLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluLWxvY2subwogCiBQRVJGTElCUyA9ICQoTElCX0ZJTEUpCiAKQEAgLTUyMCw5ICs1MTgsMjMgQEAKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19MSUJQRVJMCiBlbHNlCiAJQUxMX0xERkxBR1MgKz0gJChQRVJMX0VNQkVEX0xET1BUUykKKwlMSUJfT0JKUyArPSB1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwubwogCUxJQl9PQkpTICs9IHNjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vCiBlbmRpZgogCitpZm5kZWYgTk9fTElCUFlUSE9OCitQWVRIT05fRU1CRURfTERPUFRTID0gYHB5dGhvbi1jb25maWcgLS1sZGZsYWdzIDI+L2Rldi9udWxsYAorUFlUSE9OX0VNQkVEX0NDT1BUUyA9IGBweXRob24tY29uZmlnIC0tY2ZsYWdzIDI+L2Rldi9udWxsYAorZW5kaWYKKworaWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPFB5dGhvbi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgUHlfSW5pdGlhbGl6ZSgpOyByZXR1cm4gMDsgfScpIHwgJChDQykgLXggYyAtICQoUFlUSE9OX0VNQkVEX0NDT1BUUykgLW8gL2Rldi9udWxsICQoUFlUSE9OX0VNQkVEX0xET1BUUykgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKSwgeSkKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19MSUJQWVRIT04KK2Vsc2UKKwlBTExfTERGTEFHUyArPSAkKFBZVEhPTl9FTUJFRF9MRE9QVFMpCisJTElCX09CSlMgKz0gdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24ubworCUxJQl9PQkpTICs9IHNjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm8KK2VuZGlmCisKIGlmZGVmIE5PX0RFTUFOR0xFCiAJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fREVNQU5HTEUKIGVsc2UKQEAgLTg5NCwxMiArOTA2LDE4IEBACiB1dGlsL2ZpbmRfbmV4dF9iaXQubzogLi4vLi4vbGliL2ZpbmRfbmV4dF9iaXQuYyBQRVJGLUNGTEFHUwogCSQoUVVJRVRfQ0MpJChDQykgLW8gdXRpbC9maW5kX25leHRfYml0Lm8gLWMgJChBTExfQ0ZMQUdTKSAtREVUQ19QRVJGQ09ORklHPSciJChFVENfUEVSRkNPTkZJR19TUSkiJyAkPAogCi11dGlsL3RyYWNlLWV2ZW50LXBlcmwubzogdXRpbC90cmFjZS1ldmVudC1wZXJsLmMgUEVSRi1DRkxBR1MKLQkkKFFVSUVUX0NDKSQoQ0MpIC1vIHV0aWwvdHJhY2UtZXZlbnQtcGVybC5vIC1jICQoQUxMX0NGTEFHUykgJChQRVJMX0VNQkVEX0NDT1BUUykgLVduby1yZWR1bmRhbnQtZGVjbHMgLVduby1zdHJpY3QtcHJvdG90eXBlcyAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVduby1zaGFkb3cgJDwKK3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5vOiB1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwuYyBQRVJGLUNGTEFHUworCSQoUVVJRVRfQ0MpJChDQykgLW8gdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLm8gLWMgJChBTExfQ0ZMQUdTKSAkKFBFUkxfRU1CRURfQ0NPUFRTKSAtV25vLXJlZHVuZGFudC1kZWNscyAtV25vLXN0cmljdC1wcm90b3R5cGVzIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLXNoYWRvdyAkPAogCiBzY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQubzogc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMgUEVSRi1DRkxBR1MKIAkkKFFVSUVUX0NDKSQoQ0MpIC1vIHNjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vIC1jICQoQUxMX0NGTEFHUykgJChQRVJMX0VNQkVEX0NDT1BUUykgLVduby1yZWR1bmRhbnQtZGVjbHMgLVduby1zdHJpY3QtcHJvdG90eXBlcyAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVduby1uZXN0ZWQtZXh0ZXJucyAkPAogCit1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5vOiB1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5jIFBFUkYtQ0ZMQUdTCisJJChRVUlFVF9DQykkKENDKSAtbyB1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5vIC1jICQoQUxMX0NGTEFHUykgJChQWVRIT05fRU1CRURfQ0NPUFRTKSAtV25vLXJlZHVuZGFudC1kZWNscyAtV25vLXN0cmljdC1wcm90b3R5cGVzIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLXNoYWRvdyAkPAorCitzY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vOiBzY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5jIFBFUkYtQ0ZMQUdTCisJJChRVUlFVF9DQykkKENDKSAtbyBzY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vIC1jICQoQUxMX0NGTEFHUykgJChQWVRIT05fRU1CRURfQ0NPUFRTKSAtV25vLXJlZHVuZGFudC1kZWNscyAtV25vLXN0cmljdC1wcm90b3R5cGVzIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLW5lc3RlZC1leHRlcm5zICQ8CisKIHBlcmYtJSRYOiAlLm8gJChQRVJGTElCUykKIAkkKFFVSUVUX0xJTkspJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKEFMTF9MREZMQUdTKSAkKGZpbHRlciAlLm8sJF4pICQoTElCUykKIApAQCAtMTAwOSw5ICsxMDI3LDE2IEBACiAJJChJTlNUQUxMKSBwZXJmJFggJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCiAJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnCiAJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcGVybC9iaW4nCisJJChJTlNUQUxMKSBwZXJmLWFyY2hpdmUgLXQgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpJwogCSQoSU5TVEFMTCkgc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS8qIC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJwogCSQoSU5TVEFMTCkgc2NyaXB0cy9wZXJsLyoucGwgLXQgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcGVybCcKIAkkKElOU1RBTEwpIHNjcmlwdHMvcGVybC9iaW4vKiAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9wZXJsL2JpbicKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJworCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3B5dGhvbi9iaW4nCisJJChJTlNUQUxMKSBzY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvKiAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJworCSQoSU5TVEFMTCkgc2NyaXB0cy9weXRob24vKi5weSAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9weXRob24nCisJJChJTlNUQUxMKSBzY3JpcHRzL3B5dGhvbi9iaW4vKiAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9weXRob24vYmluJworCiBpZmRlZiBCVUlMVF9JTlMKIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSknCiAJJChJTlNUQUxMKSAkKEJVSUxUX0lOUykgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpJwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwppbmRleCA1OTNmZjI1Li41ZWM1ZGU5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwpAQCAtNTMsMzIgKzUzLDIwIEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICpzeW1faGlzdF9maWx0ZXI7CiAKLXN0YXRpYyBpbnQgc3ltYm9sX2ZpbHRlcihzdHJ1Y3QgbWFwICptYXAgX191c2VkLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCitzdGF0aWMgaW50IHN5bV9fYWxsb2NfaGlzdChzdHJ1Y3Qgc3ltYm9sICpzZWxmKQogewotCWlmIChzeW1faGlzdF9maWx0ZXIgPT0gTlVMTCB8fAotCSAgICBzdHJjbXAoc3ltLT5uYW1lLCBzeW1faGlzdF9maWx0ZXIpID09IDApIHsKLQkJc3RydWN0IHN5bV9wcml2ICpwcml2ID0gc3ltYm9sX19wcml2KHN5bSk7Ci0JCWNvbnN0IGludCBzaXplID0gKHNpemVvZigqcHJpdi0+aGlzdCkgKwotCQkJCSAgKHN5bS0+ZW5kIC0gc3ltLT5zdGFydCkgKiBzaXplb2YodTY0KSk7CisJc3RydWN0IHN5bV9wcml2ICpwcml2ID0gc3ltYm9sX19wcml2KHNlbGYpOworCWNvbnN0IGludCBzaXplID0gKHNpemVvZigqcHJpdi0+aGlzdCkgKworCQkJICAoc2VsZi0+ZW5kIC0gc2VsZi0+c3RhcnQpICogc2l6ZW9mKHU2NCkpOwogCi0JCXByaXYtPmhpc3QgPSBtYWxsb2Moc2l6ZSk7Ci0JCWlmIChwcml2LT5oaXN0KQotCQkJbWVtc2V0KHByaXYtPmhpc3QsIDAsIHNpemUpOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyoKLQkgKiBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBmaWx0ZXIgaXQgb3V0LCBhcyB3ZSBkb24ndCB3YW50IHRvIGdvIHRocnUgc3ltYm9scwotCSAqIHdlJ3JlIG5vdCBpbnRlcmVzdGVkLCBhbmQgaWYgYSBEU08gZW5kcyB1cCB3aXRoIG5vIHN5bWJvbHMsIGRlbGV0ZSBpdCB0b28sCi0JICogYnV0IHJpZ2h0IG5vdyB0aGUga2VybmVsIGxvYWRpbmcgcm91dGluZXMgaW4gc3ltYm9sLmMgYmFpbCBvdXQgaWYgbm8gc3ltYm9scwotCSAqIGFyZSBmb3VuZCwgZml4IGl0IGxhdGVyLgotCSAqLwotCXJldHVybiAwOworCXByaXYtPmhpc3QgPSB6YWxsb2Moc2l6ZSk7CisJcmV0dXJuIHByaXYtPmhpc3QgPT0gTlVMTCA/IC0xIDogMDsKIH0KIAogLyoKICAqIGNvbGxlY3QgaGlzdG9ncmFtIGNvdW50cwogICovCi1zdGF0aWMgdm9pZCBoaXN0X2hpdChzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIHU2NCBpcCkKK3N0YXRpYyBpbnQgYW5ub3RhdGVfX2hpc3RfaGl0KHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgdTY0IGlwKQogewogCXVuc2lnbmVkIGludCBzeW1fc2l6ZSwgb2Zmc2V0OwogCXN0cnVjdCBzeW1ib2wgKnN5bSA9IGhlLT5zeW07CkBAIC04OCw4MyArNzYsMTI3IEBACiAJaGUtPmNvdW50Kys7CiAKIAlpZiAoIXN5bSB8fCAhaGUtPm1hcCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCXByaXYgPSBzeW1ib2xfX3ByaXYoc3ltKTsKLQlpZiAoIXByaXYtPmhpc3QpCi0JCXJldHVybjsKKwlpZiAocHJpdi0+aGlzdCA9PSBOVUxMICYmIHN5bV9fYWxsb2NfaGlzdChzeW0pIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlzeW1fc2l6ZSA9IHN5bS0+ZW5kIC0gc3ltLT5zdGFydDsKIAlvZmZzZXQgPSBpcCAtIHN5bS0+c3RhcnQ7CiAKLQlpZiAodmVyYm9zZSkKLQkJZnByaW50ZihzdGRlcnIsICIlczogaXA9JUx4XG4iLCBfX2Z1bmNfXywKLQkJCWhlLT5tYXAtPnVubWFwX2lwKGhlLT5tYXAsIGlwKSk7CisJcHJfZGVidWczKCIlczogaXA9JSNMeFxuIiwgX19mdW5jX18sIGhlLT5tYXAtPnVubWFwX2lwKGhlLT5tYXAsIGlwKSk7CiAKIAlpZiAob2Zmc2V0ID49IHN5bV9zaXplKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJaCA9IHByaXYtPmhpc3Q7CiAJaC0+c3VtKys7CiAJaC0+aXBbb2Zmc2V0XSsrOwogCi0JaWYgKHZlcmJvc2UgPj0gMykKLQkJcHJpbnRmKCIlcCAlczogY291bnQrKyBbaXA6ICVwLCAlMDhMeF0gPT4gJUxkXG4iLAotCQkJKHZvaWQgKikodW5zaWduZWQgbG9uZyloZS0+c3ltLT5zdGFydCwKLQkJCWhlLT5zeW0tPm5hbWUsCi0JCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWlwLCBpcCAtIGhlLT5zeW0tPnN0YXJ0LAotCQkJaC0+aXBbb2Zmc2V0XSk7CisJcHJfZGVidWczKCIlI0x4ICVzOiBjb3VudCsrIFtpcDogJSNMeCwgJSNMeF0gPT4gJUxkXG4iLCBoZS0+c3ltLT5zdGFydCwKKwkJICBoZS0+c3ltLT5uYW1lLCBpcCwgaXAgLSBoZS0+c3ltLT5zdGFydCwgaC0+aXBbb2Zmc2V0XSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19hZGRfaGlzdF9lbnRyeShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAogCQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsIHU2NCBjb3VudCkKIHsKIAlib29sIGhpdDsKLQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUgPSBfX3BlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2VsZiwgYWwsIE5VTEwsCi0JCQkJCQkJICAgICAgIGNvdW50LCAmaGl0KTsKKwlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGU7CisKKwlpZiAoc3ltX2hpc3RfZmlsdGVyICE9IE5VTEwgJiYKKwkgICAgKGFsLT5zeW0gPT0gTlVMTCB8fCBzdHJjbXAoc3ltX2hpc3RfZmlsdGVyLCBhbC0+c3ltLT5uYW1lKSAhPSAwKSkgeworCQkvKiBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gYSBzeW1ib2wgbmFtZWQgc3ltX2hpc3RfZmlsdGVyICovCisJCWlmIChhbC0+c3ltICE9IE5VTEwpIHsKKwkJCXJiX2VyYXNlKCZhbC0+c3ltLT5yYl9ub2RlLAorCQkJCSAmYWwtPm1hcC0+ZHNvLT5zeW1ib2xzW2FsLT5tYXAtPnR5cGVdKTsKKwkJCXN5bWJvbF9fZGVsZXRlKGFsLT5zeW0pOworCQl9CisJCXJldHVybiAwOworCX0KKworCWhlID0gX19wZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHNlbGYsIGFsLCBOVUxMLCBjb3VudCwgJmhpdCk7CiAJaWYgKGhlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWhpc3RfaGl0KGhlLCBhbC0+YWRkcik7Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gYW5ub3RhdGVfX2hpc3RfaGl0KGhlLCBhbC0+YWRkcik7CiB9CiAKIHN0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkOiAlcFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAotCQkgICAgZXZlbnQtPmlwLnBpZCwgKHZvaWQgKikobG9uZylldmVudC0+aXAuaXApOworCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQ6ICUjTHhcbiIsIGV2ZW50LT5oZWFkZXIubWlzYywKKwkJICAgIGV2ZW50LT5pcC5waWQsIGV2ZW50LT5pcC5pcCk7CiAKLQlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLCAmYWwsIHN5bWJvbF9maWx0ZXIpIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAotCQkJZXZlbnQtPmhlYWRlci50eXBlKTsKKwlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLCAmYWwsIE5VTEwpIDwgMCkgeworCQlwcl93YXJuaW5nKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKKwkJCSAgIGV2ZW50LT5oZWFkZXIudHlwZSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoIWFsLmZpbHRlcmVkICYmIHBlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2Vzc2lvbiwgJmFsLCAxKSkgewotCQlmcHJpbnRmKHN0ZGVyciwgInByb2JsZW0gaW5jcmVtZW50aW5nIHN5bWJvbCBjb3VudCwgIgotCQkJCSJza2lwcGluZyBldmVudFxuIik7CisJCXByX3dhcm5pbmcoInByb2JsZW0gaW5jcmVtZW50aW5nIHN5bWJvbCBjb3VudCwgIgorCQkJICAgInNraXBwaW5nIGV2ZW50XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX2xpbmUoRklMRSAqZmlsZSwgc3RydWN0IGhpc3RfZW50cnkgKmhlLCB1NjQgbGVuKQorc3RydWN0IG9iamR1bXBfbGluZSB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXM2NAkJIG9mZnNldDsKKwljaGFyCQkgKmxpbmU7Cit9OworCitzdGF0aWMgc3RydWN0IG9iamR1bXBfbGluZSAqb2JqZHVtcF9saW5lX19uZXcoczY0IG9mZnNldCwgY2hhciAqbGluZSkKK3sKKwlzdHJ1Y3Qgb2JqZHVtcF9saW5lICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOworCisJaWYgKHNlbGYgIT0gTlVMTCkgeworCQlzZWxmLT5vZmZzZXQgPSBvZmZzZXQ7CisJCXNlbGYtPmxpbmUgPSBsaW5lOworCX0KKworCXJldHVybiBzZWxmOworfQorCitzdGF0aWMgdm9pZCBvYmpkdW1wX2xpbmVfX2ZyZWUoc3RydWN0IG9iamR1bXBfbGluZSAqc2VsZikKK3sKKwlmcmVlKHNlbGYtPmxpbmUpOworCWZyZWUoc2VsZik7Cit9CisKK3N0YXRpYyB2b2lkIG9iamR1bXBfX2FkZF9saW5lKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBvYmpkdW1wX2xpbmUgKmxpbmUpCit7CisJbGlzdF9hZGRfdGFpbCgmbGluZS0+bm9kZSwgaGVhZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZHVtcF9saW5lICpvYmpkdW1wX19nZXRfbmV4dF9pcF9saW5lKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJCQkgICAgICBzdHJ1Y3Qgb2JqZHVtcF9saW5lICpwb3MpCit7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShwb3MsIGhlYWQsIG5vZGUpCisJCWlmIChwb3MtPm9mZnNldCA+PSAwKQorCQkJcmV0dXJuIHBvczsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHBhcnNlX2xpbmUoRklMRSAqZmlsZSwgc3RydWN0IGhpc3RfZW50cnkgKmhlLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewogCXN0cnVjdCBzeW1ib2wgKnN5bSA9IGhlLT5zeW07CisJc3RydWN0IG9iamR1bXBfbGluZSAqb2JqZHVtcF9saW5lOwogCWNoYXIgKmxpbmUgPSBOVUxMLCAqdG1wLCAqdG1wMjsKLQlzdGF0aWMgY29uc3QgY2hhciAqcHJldl9saW5lOwotCXN0YXRpYyBjb25zdCBjaGFyICpwcmV2X2NvbG9yOwotCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJc2l6ZV90IGxpbmVfbGVuOwotCXU2NCBzdGFydDsKLQlzNjQgbGluZV9pcDsKLQlpbnQgcmV0OworCXM2NCBsaW5lX2lwLCBvZmZzZXQgPSAtMTsKIAljaGFyICpjOwogCiAJaWYgKGdldGxpbmUoJmxpbmUsICZsaW5lX2xlbiwgZmlsZSkgPCAwKQogCQlyZXR1cm4gLTE7CisKIAlpZiAoIWxpbmUpCiAJCXJldHVybiAtMTsKIApAQCAtMTczLDggKzIwNSw2IEBACiAJCSpjID0gMDsKIAogCWxpbmVfaXAgPSAtMTsKLQlvZmZzZXQgPSAwOwotCXJldCA9IC0yOwogCiAJLyoKIAkgKiBTdHJpcCBsZWFkaW5nIHNwYWNlczoKQEAgLTE5NSw5ICsyMjUsMzAgQEAKIAkJCWxpbmVfaXAgPSAtMTsKIAl9CiAKLQlzdGFydCA9IGhlLT5tYXAtPnVubWFwX2lwKGhlLT5tYXAsIHN5bS0+c3RhcnQpOwotCiAJaWYgKGxpbmVfaXAgIT0gLTEpIHsKKwkJdTY0IHN0YXJ0ID0gbWFwX19yaXBfMm9iamR1bXAoaGUtPm1hcCwgc3ltLT5zdGFydCk7CisJCW9mZnNldCA9IGxpbmVfaXAgLSBzdGFydDsKKwl9CisKKwlvYmpkdW1wX2xpbmUgPSBvYmpkdW1wX2xpbmVfX25ldyhvZmZzZXQsIGxpbmUpOworCWlmIChvYmpkdW1wX2xpbmUgPT0gTlVMTCkgeworCQlmcmVlKGxpbmUpOworCQlyZXR1cm4gLTE7CisJfQorCW9iamR1bXBfX2FkZF9saW5lKGhlYWQsIG9iamR1bXBfbGluZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvYmpkdW1wX2xpbmVfX3ByaW50KHN0cnVjdCBvYmpkdW1wX2xpbmUgKnNlbGYsCisJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkJCSAgICAgICBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIHU2NCBsZW4pCit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gaGUtPnN5bTsKKwlzdGF0aWMgY29uc3QgY2hhciAqcHJldl9saW5lOworCXN0YXRpYyBjb25zdCBjaGFyICpwcmV2X2NvbG9yOworCisJaWYgKHNlbGYtPm9mZnNldCAhPSAtMSkgewogCQljb25zdCBjaGFyICpwYXRoID0gTlVMTDsKIAkJdW5zaWduZWQgaW50IGhpdHMgPSAwOwogCQlkb3VibGUgcGVyY2VudCA9IDAuMDsKQEAgLTIwNSwxNSArMjU2LDIyIEBACiAJCXN0cnVjdCBzeW1fcHJpdiAqcHJpdiA9IHN5bWJvbF9fcHJpdihzeW0pOwogCQlzdHJ1Y3Qgc3ltX2V4dCAqc3ltX2V4dCA9IHByaXYtPmV4dDsKIAkJc3RydWN0IHN5bV9oaXN0ICpoID0gcHJpdi0+aGlzdDsKKwkJczY0IG9mZnNldCA9IHNlbGYtPm9mZnNldDsKKwkJc3RydWN0IG9iamR1bXBfbGluZSAqbmV4dCA9IG9iamR1bXBfX2dldF9uZXh0X2lwX2xpbmUoaGVhZCwgc2VsZik7CiAKLQkJb2Zmc2V0ID0gbGluZV9pcCAtIHN0YXJ0OwotCQlpZiAob2Zmc2V0IDwgbGVuKQotCQkJaGl0cyA9IGgtPmlwW29mZnNldF07CisJCXdoaWxlIChvZmZzZXQgPCAoczY0KWxlbiAmJgorCQkgICAgICAgKG5leHQgPT0gTlVMTCB8fCBvZmZzZXQgPCBuZXh0LT5vZmZzZXQpKSB7CisJCQlpZiAoc3ltX2V4dCkgeworCQkJCWlmIChwYXRoID09IE5VTEwpCisJCQkJCXBhdGggPSBzeW1fZXh0W29mZnNldF0ucGF0aDsKKwkJCQlwZXJjZW50ICs9IHN5bV9leHRbb2Zmc2V0XS5wZXJjZW50OworCQkJfSBlbHNlCisJCQkJaGl0cyArPSBoLT5pcFtvZmZzZXRdOwogCi0JCWlmIChvZmZzZXQgPCBsZW4gJiYgc3ltX2V4dCkgewotCQkJcGF0aCA9IHN5bV9leHRbb2Zmc2V0XS5wYXRoOwotCQkJcGVyY2VudCA9IHN5bV9leHRbb2Zmc2V0XS5wZXJjZW50OwotCQl9IGVsc2UgaWYgKGgtPnN1bSkKKwkJCSsrb2Zmc2V0OworCQl9CisKKwkJaWYgKHN5bV9leHQgPT0gTlVMTCAmJiBoLT5zdW0pCiAJCQlwZXJjZW50ID0gMTAwLjAgKiBoaXRzIC8gaC0+c3VtOwogCiAJCWNvbG9yID0gZ2V0X3BlcmNlbnRfY29sb3IocGVyY2VudCk7CkBAIC0yMzQsMTIgKzI5MiwxMiBAQAogCiAJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBjb2xvciwgIiAlNy4yZiIsIHBlcmNlbnQpOwogCQlwcmludGYoIiA6CSIpOwotCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgUEVSRl9DT0xPUl9CTFVFLCAiJXNcbiIsIGxpbmUpOworCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgUEVSRl9DT0xPUl9CTFVFLCAiJXNcbiIsIHNlbGYtPmxpbmUpOwogCX0gZWxzZSB7Ci0JCWlmICghKmxpbmUpCisJCWlmICghKnNlbGYtPmxpbmUpCiAJCQlwcmludGYoIiAgICAgICAgIDpcbiIpOwogCQllbHNlCi0JCQlwcmludGYoIiAgICAgICAgIDoJJXNcbiIsIGxpbmUpOworCQkJcHJpbnRmKCIgICAgICAgICA6CSVzXG4iLCBzZWxmLT5saW5lKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM2NSw2ICs0MjMsMjAgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGhpc3RfZW50cnlfX3ByaW50X2hpdHMoc3RydWN0IGhpc3RfZW50cnkgKnNlbGYpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gc2VsZi0+c3ltOworCXN0cnVjdCBzeW1fcHJpdiAqcHJpdiA9IHN5bWJvbF9fcHJpdihzeW0pOworCXN0cnVjdCBzeW1faGlzdCAqaCA9IHByaXYtPmhpc3Q7CisJdTY0IGxlbiA9IHN5bS0+ZW5kIC0gc3ltLT5zdGFydCwgb2Zmc2V0OworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBsZW47ICsrb2Zmc2V0KQorCQlpZiAoaC0+aXBbb2Zmc2V0XSAhPSAwKQorCQkJcHJpbnRmKCIlKkx4OiAlTHVcbiIsIEJJVFNfUEVSX0xPTkcgLyAyLAorCQkJICAgICAgIHN5bS0+c3RhcnQgKyBvZmZzZXQsIGgtPmlwW29mZnNldF0pOworCXByaW50ZigiJSpzOiAlTHVcbiIsIEJJVFNfUEVSX0xPTkcgLyAyLCAiaC0+c3VtIiwgaC0+c3VtKTsKK30KKwogc3RhdGljIHZvaWQgYW5ub3RhdGVfc3ltKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkKIHsKIAlzdHJ1Y3QgbWFwICptYXAgPSBoZS0+bWFwOwpAQCAtMzc0LDE1ICs0NDYsMTUgQEAKIAl1NjQgbGVuOwogCWNoYXIgY29tbWFuZFtQQVRIX01BWCoyXTsKIAlGSUxFICpmaWxlOworCUxJU1RfSEVBRChoZWFkKTsKKwlzdHJ1Y3Qgb2JqZHVtcF9saW5lICpwb3MsICpuOwogCiAJaWYgKCFmaWxlbmFtZSkKIAkJcmV0dXJuOwogCi0JaWYgKHZlcmJvc2UpCi0JCWZwcmludGYoc3RkZXJyLCAiJXM6IGZpbGVuYW1lPSVzLCBzeW09JXMsIHN0YXJ0PSVMeCwgZW5kPSVMeFxuIiwKLQkJCV9fZnVuY19fLCBmaWxlbmFtZSwgc3ltLT5uYW1lLAotCQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLAotCQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+ZW5kKSk7CisJcHJfZGVidWcoIiVzOiBmaWxlbmFtZT0lcywgc3ltPSVzLCBzdGFydD0lI0x4LCBlbmQ9JSNMeFxuIiwgX19mdW5jX18sCisJCSBmaWxlbmFtZSwgc3ltLT5uYW1lLCBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCksCisJCSBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpKTsKIAogCWlmIChmdWxsX3BhdGhzKQogCQlkX2ZpbGVuYW1lID0gZmlsZW5hbWU7CkBAIC00MDUsNyArNDc3LDggQEAKIAkJICAgICAgIGRzbywgZHNvLT5sb25nX25hbWUsIHN5bSwgc3ltLT5uYW1lKTsKIAogCXNwcmludGYoY29tbWFuZCwgIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPTB4JTAxNkx4IC0tc3RvcC1hZGRyZXNzPTB4JTAxNkx4IC1kUyAlc3xncmVwIC12ICVzIiwKLQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLCBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpLAorCQltYXBfX3JpcF8yb2JqZHVtcChtYXAsIHN5bS0+c3RhcnQpLAorCQltYXBfX3JpcF8yb2JqZHVtcChtYXAsIHN5bS0+ZW5kKSwKIAkJZmlsZW5hbWUsIGZpbGVuYW1lKTsKIAogCWlmICh2ZXJib3NlID49IDMpCkBAIC00MTYsMTEgKzQ4OSwyMSBAQAogCQlyZXR1cm47CiAKIAl3aGlsZSAoIWZlb2YoZmlsZSkpIHsKLQkJaWYgKHBhcnNlX2xpbmUoZmlsZSwgaGUsIGxlbikgPCAwKQorCQlpZiAocGFyc2VfbGluZShmaWxlLCBoZSwgJmhlYWQpIDwgMCkKIAkJCWJyZWFrOwogCX0KIAogCXBjbG9zZShmaWxlKTsKKworCWlmICh2ZXJib3NlKQorCQloaXN0X2VudHJ5X19wcmludF9oaXRzKGhlKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICZoZWFkLCBub2RlKSB7CisJCW9iamR1bXBfbGluZV9fcHJpbnQocG9zLCAmaGVhZCwgaGUsIGxlbik7CisJCWxpc3RfZGVsKCZwb3MtPm5vZGUpOworCQlvYmpkdW1wX2xpbmVfX2ZyZWUocG9zKTsKKwl9CisKIAlpZiAocHJpbnRfbGluZSkKIAkJZnJlZV9zb3VyY2VfbGluZShoZSwgbGVuKTsKIH0KQEAgLTQ1MSwxMCArNTM0LDEwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewotCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAotCS5wcm9jZXNzX21tYXBfZXZlbnQJPSBldmVudF9fcHJvY2Vzc19tbWFwLAotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5wcm9jZXNzX2ZvcmtfZXZlbnQJPSBldmVudF9fcHJvY2Vzc190YXNrLAorCS5zYW1wbGUJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkubW1hcAk9IGV2ZW50X19wcm9jZXNzX21tYXAsCisJLmNvbW0JPSBldmVudF9fcHJvY2Vzc19jb21tLAorCS5mb3JrCT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKIH07CiAKIHN0YXRpYyBpbnQgX19jbWRfYW5ub3RhdGUodm9pZCkKQEAgLTU0Miw5ICs2MjUsOCBAQAogCXNldHVwX3BhZ2VyKCk7CiAKIAlpZiAoZmllbGRfc2VwICYmICpmaWVsZF9zZXAgPT0gJy4nKSB7Ci0JCWZwdXRzKCInLicgaXMgdGhlIG9ubHkgbm9uIHZhbGlkIC0tZmllbGQtc2VwYXJhdG9yIGFyZ3VtZW50XG4iLAotCQkJCXN0ZGVycik7Ci0JCWV4aXQoMTI5KTsKKwkJcHJfZXJyKCInLicgaXMgdGhlIG9ubHkgbm9uIHZhbGlkIC0tZmllbGQtc2VwYXJhdG9yIGFyZ3VtZW50XG4iKTsKKwkJcmV0dXJuIC0xOwogCX0KIAogCXJldHVybiBfX2NtZF9hbm5vdGF0ZSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtY2FjaGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWNhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhMDVmNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWNhY2hlLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBidWlsdGluLWJ1aWxkaWQtY2FjaGUuYworICoKKyAqIEJ1aWx0aW4gYnVpbGRpZC1jYWNoZSBjb21tYW5kOiBNYW5hZ2VzIGJ1aWxkLWlkIGNhY2hlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQHJlZGhhdC5jb20+CisgKi8KKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGVyZi5oIgorI2luY2x1ZGUgInV0aWwvY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCisjaW5jbHVkZSAidXRpbC9oZWFkZXIuaCIKKyNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1dGlsL3N0cmxpc3QuaCIKKyNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgorCitzdGF0aWMgY2hhciBjb25zdCAqYWRkX25hbWVfbGlzdF9zdHIsICpyZW1vdmVfbmFtZV9saXN0X3N0cjsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsZGlkX2NhY2hlX3VzYWdlW10gPSB7CisJInBlcmYgYnVpbGRpZC1jYWNoZSBbPG9wdGlvbnM+XSIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gYnVpbGRpZF9jYWNoZV9vcHRpb25zW10gPSB7CisJT1BUX1NUUklORygnYScsICJhZGQiLCAmYWRkX25hbWVfbGlzdF9zdHIsCisJCSAgICJmaWxlIGxpc3QiLCAiZmlsZShzKSB0byBhZGQiKSwKKwlPUFRfU1RSSU5HKCdyJywgInJlbW92ZSIsICZyZW1vdmVfbmFtZV9saXN0X3N0ciwgImZpbGUgbGlzdCIsCisJCSAgICAiZmlsZShzKSB0byByZW1vdmUiKSwKKwlPUFRfQk9PTEVBTigndicsICJ2ZXJib3NlIiwgJnZlcmJvc2UsICJiZSBtb3JlIHZlcmJvc2UiKSwKKwlPUFRfRU5EKCkKK307CisKK3N0YXRpYyBpbnQgYnVpbGRfaWRfY2FjaGVfX2FkZF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpkZWJ1Z2RpcikKK3sKKwljaGFyIHNidWlsZF9pZFtCVUlMRF9JRF9TSVpFICogMiArIDFdOworCXU4IGJ1aWxkX2lkW0JVSUxEX0lEX1NJWkVdOworCWludCBlcnI7CisKKwlpZiAoZmlsZW5hbWVfX3JlYWRfYnVpbGRfaWQoZmlsZW5hbWUsICZidWlsZF9pZCwgc2l6ZW9mKGJ1aWxkX2lkKSkgPCAwKSB7CisJCXByX2RlYnVnKCJDb3VsZG4ndCByZWFkIGEgYnVpbGQtaWQgaW4gJXNcbiIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWJ1aWxkX2lkX19zcHJpbnRmKGJ1aWxkX2lkLCBzaXplb2YoYnVpbGRfaWQpLCBzYnVpbGRfaWQpOworCWVyciA9IGJ1aWxkX2lkX2NhY2hlX19hZGRfcyhzYnVpbGRfaWQsIGRlYnVnZGlyLCBmaWxlbmFtZSwgZmFsc2UpOworCWlmICh2ZXJib3NlKQorCQlwcl9pbmZvKCJBZGRpbmcgJXMgJXM6ICVzXG4iLCBzYnVpbGRfaWQsIGZpbGVuYW1lLAorCQkJZXJyID8gIkZBSUwiIDogIk9rIik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBidWlsZF9pZF9jYWNoZV9fcmVtb3ZlX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUgX191c2VkLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpkZWJ1Z2RpciBfX3VzZWQpCit7CisJdTggYnVpbGRfaWRbQlVJTERfSURfU0laRV07CisJY2hhciBzYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKKworCWludCBlcnI7CisKKwlpZiAoZmlsZW5hbWVfX3JlYWRfYnVpbGRfaWQoZmlsZW5hbWUsICZidWlsZF9pZCwgc2l6ZW9mKGJ1aWxkX2lkKSkgPCAwKSB7CisJCXByX2RlYnVnKCJDb3VsZG4ndCByZWFkIGEgYnVpbGQtaWQgaW4gJXNcbiIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWJ1aWxkX2lkX19zcHJpbnRmKGJ1aWxkX2lkLCBzaXplb2YoYnVpbGRfaWQpLCBzYnVpbGRfaWQpOworCWVyciA9IGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfcyhzYnVpbGRfaWQsIGRlYnVnZGlyKTsKKwlpZiAodmVyYm9zZSkKKwkJcHJfaW5mbygiUmVtb3ZpbmcgJXMgJXM6ICVzXG4iLCBzYnVpbGRfaWQsIGZpbGVuYW1lLAorCQkJZXJyID8gIkZBSUwiIDogIk9rIik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fY21kX2J1aWxkaWRfY2FjaGUodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RybGlzdCAqbGlzdDsKKwlzdHJ1Y3Qgc3RyX25vZGUgKnBvczsKKwljaGFyIGRlYnVnZGlyW1BBVEhfTUFYXTsKKworCXNucHJpbnRmKGRlYnVnZGlyLCBzaXplb2YoZGVidWdkaXIpLCAiJXMvJXMiLCBnZXRlbnYoIkhPTUUiKSwKKwkJIERFQlVHX0NBQ0hFX0RJUik7CisKKwlpZiAoYWRkX25hbWVfbGlzdF9zdHIpIHsKKwkJbGlzdCA9IHN0cmxpc3RfX25ldyh0cnVlLCBhZGRfbmFtZV9saXN0X3N0cik7CisJCWlmIChsaXN0KSB7CisJCQlzdHJsaXN0X19mb3JfZWFjaChwb3MsIGxpc3QpCisJCQkJaWYgKGJ1aWxkX2lkX2NhY2hlX19hZGRfZmlsZShwb3MtPnMsIGRlYnVnZGlyKSkgeworCQkJCQlpZiAoZXJybm8gPT0gRUVYSVNUKSB7CisJCQkJCQlwcl9kZWJ1ZygiJXMgYWxyZWFkeSBpbiB0aGUgY2FjaGVcbiIsCisJCQkJCQkJIHBvcy0+cyk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlwcl93YXJuaW5nKCJDb3VsZG4ndCBhZGQgJXM6ICVzXG4iLAorCQkJCQkJICAgcG9zLT5zLCBzdHJlcnJvcihlcnJubykpOworCQkJCX0KKworCQkJc3RybGlzdF9fZGVsZXRlKGxpc3QpOworCQl9CisJfQorCisJaWYgKHJlbW92ZV9uYW1lX2xpc3Rfc3RyKSB7CisJCWxpc3QgPSBzdHJsaXN0X19uZXcodHJ1ZSwgcmVtb3ZlX25hbWVfbGlzdF9zdHIpOworCQlpZiAobGlzdCkgeworCQkJc3RybGlzdF9fZm9yX2VhY2gocG9zLCBsaXN0KQorCQkJCWlmIChidWlsZF9pZF9jYWNoZV9fcmVtb3ZlX2ZpbGUocG9zLT5zLCBkZWJ1Z2RpcikpIHsKKwkJCQkJaWYgKGVycm5vID09IEVOT0VOVCkgeworCQkJCQkJcHJfZGVidWcoIiVzIHdhc24ndCBpbiB0aGUgY2FjaGVcbiIsCisJCQkJCQkJIHBvcy0+cyk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlwcl93YXJuaW5nKCJDb3VsZG4ndCByZW1vdmUgJXM6ICVzXG4iLAorCQkJCQkJICAgcG9zLT5zLCBzdHJlcnJvcihlcnJubykpOworCQkJCX0KKworCQkJc3RybGlzdF9fZGVsZXRlKGxpc3QpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfYnVpbGRpZF9jYWNoZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCit7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbGRpZF9jYWNoZV9vcHRpb25zLAorCQkJICAgICBidWlsZGlkX2NhY2hlX3VzYWdlLCAwKTsKKworCWlmIChzeW1ib2xfX2luaXQoKSA8IDApCisJCXJldHVybiAtMTsKKworCXNldHVwX3BhZ2VyKCk7CisJcmV0dXJuIF9fY21kX2J1aWxkaWRfY2FjaGUoKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYwppbmRleCAxZTk5YWM4Li5kMDY3NWMwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1saXN0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jCkBAIC04LDYgKzgsNyBAQAogICovCiAjaW5jbHVkZSAiYnVpbHRpbi5oIgogI2luY2x1ZGUgInBlcmYuaCIKKyNpbmNsdWRlICJ1dGlsL2J1aWxkLWlkLmgiCiAjaW5jbHVkZSAidXRpbC9jYWNoZS5oIgogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKQEAgLTE2LDYgKzE3LDcgQEAKIAogc3RhdGljIGNoYXIgY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKIHN0YXRpYyBpbnQgZm9yY2U7CitzdGF0aWMgYm9vbCB3aXRoX2hpdHM7CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbGRpZF9saXN0X3VzYWdlW10gPSB7CiAJInBlcmYgYnVpbGRpZC1saXN0IFs8b3B0aW9ucz5dIiwKQEAgLTIzLDYgKzI1LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwlPUFRfQk9PTEVBTignSCcsICJ3aXRoLWhpdHMiLCAmd2l0aF9oaXRzLCAiU2hvdyBvbmx5IERTT3Mgd2l0aCBoaXRzIiksCiAJT1BUX1NUUklORygnaScsICJpbnB1dCIsICZpbnB1dF9uYW1lLCAiZmlsZSIsCiAJCSAgICAiaW5wdXQgZmlsZSBuYW1lIiksCiAJT1BUX0JPT0xFQU4oJ2YnLCAiZm9yY2UiLCAmZm9yY2UsICJkb24ndCBjb21wbGFpbiwgZG8gaXQiKSwKQEAgLTMxLDI2ICszNCw2IEBACiAJT1BUX0VORCgpCiB9OwogCi1zdGF0aWMgaW50IHBlcmZfZmlsZV9zZWN0aW9uX19wcm9jZXNzX2J1aWxkaWRzKHN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqc2VsZiwKLQkJCQkJICAgICAgIGludCBmZWF0LCBpbnQgZmQpCi17Ci0JaWYgKGZlYXQgIT0gSEVBREVSX0JVSUxEX0lEKQotCQlyZXR1cm4gMDsKLQotCWlmIChsc2VlayhmZCwgc2VsZi0+b2Zmc2V0LCBTRUVLX1NFVCkgPCAwKSB7Ci0JCXByX3dhcm5pbmcoIkZhaWxlZCB0byBsc2VlayB0byAlTGQgb2Zmc2V0IGZvciBidWlsZGlkcyFcbiIsCi0JCQkgICBzZWxmLT5vZmZzZXQpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKHBlcmZfaGVhZGVyX19yZWFkX2J1aWxkX2lkcyhmZCwgc2VsZi0+b2Zmc2V0LCBzZWxmLT5zaXplKSkgewotCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gcmVhZCBidWlsZGlkcyFcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19jbWRfYnVpbGRpZF9saXN0KHZvaWQpCiB7CiAJaW50IGVyciA9IC0xOwpAQCAtNjAsMTAgKzQzLDEwIEBACiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCi0JZXJyID0gcGVyZl9oZWFkZXJfX3Byb2Nlc3Nfc2VjdGlvbnMoJnNlc3Npb24tPmhlYWRlciwgc2Vzc2lvbi0+ZmQsCi0JCQkJICAgICAgICAgcGVyZl9maWxlX3NlY3Rpb25fX3Byb2Nlc3NfYnVpbGRpZHMpOwotCWlmIChlcnIgPj0gMCkKLQkJZHNvc19fZnByaW50Zl9idWlsZGlkKHN0ZG91dCk7CisJaWYgKHdpdGhfaGl0cykKKwkJcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCAmYnVpbGRfaWRfX21hcmtfZHNvX2hpdF9vcHMpOworCisJZHNvc19fZnByaW50Zl9idWlsZGlkKHN0ZG91dCwgd2l0aF9oaXRzKTsKIAogCXBlcmZfc2Vzc2lvbl9fZGVsZXRlKHNlc3Npb24pOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwppbmRleCBiZDcxYjhjLi4xOGIzZjUwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKQEAgLTQyLDggKzQyLDggQEAKIAlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKIAlzdHJ1Y3Qgc2FtcGxlX2RhdGEgZGF0YSA9IHsgLnBlcmlvZCA9IDEsIH07CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkOiAlcFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAotCQkgICAgZXZlbnQtPmlwLnBpZCwgKHZvaWQgKikobG9uZylldmVudC0+aXAuaXApOworCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQ6ICUjTHhcbiIsIGV2ZW50LT5oZWFkZXIubWlzYywKKwkJICAgIGV2ZW50LT5pcC5waWQsIGV2ZW50LT5pcC5pcCk7CiAKIAlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLCAmYWwsIE5VTEwpIDwgMCkgewogCQlwcl93YXJuaW5nKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKQEAgLTUxLDEyICs1MSwxMiBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKGFsLmZpbHRlcmVkKQorCWlmIChhbC5maWx0ZXJlZCB8fCBhbC5zeW0gPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKIAlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOwogCi0JaWYgKGFsLnN5bSAmJiBwZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHNlc3Npb24sICZhbCwgZGF0YS5wZXJpb2QpKSB7CisJaWYgKHBlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2Vzc2lvbiwgJmFsLCBkYXRhLnBlcmlvZCkpIHsKIAkJcHJfd2FybmluZygicHJvYmxlbSBpbmNyZW1lbnRpbmcgc3ltYm9sIGNvdW50LCBza2lwcGluZyBldmVudFxuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC02NiwxMiArNjYsMTIgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBldmVudF9vcHMgPSB7Ci0JLnByb2Nlc3Nfc2FtcGxlX2V2ZW50ID0gZGlmZl9fcHJvY2Vzc19zYW1wbGVfZXZlbnQsCi0JLnByb2Nlc3NfbW1hcF9ldmVudCAgID0gZXZlbnRfX3Byb2Nlc3NfbW1hcCwKLQkucHJvY2Vzc19jb21tX2V2ZW50ICAgPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5wcm9jZXNzX2V4aXRfZXZlbnQgICA9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCi0JLnByb2Nlc3NfZm9ya19ldmVudCAgID0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKLQkucHJvY2Vzc19sb3N0X2V2ZW50ICAgPSBldmVudF9fcHJvY2Vzc19sb3N0LAorCS5zYW1wbGUJPSBkaWZmX19wcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkubW1hcAk9IGV2ZW50X19wcm9jZXNzX21tYXAsCisJLmNvbW0JPSBldmVudF9fcHJvY2Vzc19jb21tLAorCS5leGl0CT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKKwkuZm9yawk9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCisJLmxvc3QJPSBldmVudF9fcHJvY2Vzc19sb3N0LAogfTsKIAogc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19pbnNlcnRfaGlzdF9lbnRyeV9ieV9uYW1lKHN0cnVjdCByYl9yb290ICpyb290LApAQCAtODIsMjkgKzgyLDE5IEBACiAJc3RydWN0IGhpc3RfZW50cnkgKml0ZXI7CiAKIAl3aGlsZSAoKnAgIT0gTlVMTCkgewotCQlpbnQgY21wOwogCQlwYXJlbnQgPSAqcDsKIAkJaXRlciA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwotCi0JCWNtcCA9IHN0cmNtcChoZS0+bWFwLT5kc28tPm5hbWUsIGl0ZXItPm1hcC0+ZHNvLT5uYW1lKTsKLQkJaWYgKGNtcCA+IDApCisJCWlmIChoaXN0X2VudHJ5X19jbXAoaGUsIGl0ZXIpIDwgMCkKIAkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKLQkJZWxzZSBpZiAoY21wIDwgMCkKKwkJZWxzZQogCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKLQkJZWxzZSB7Ci0JCQljbXAgPSBzdHJjbXAoaGUtPnN5bS0+bmFtZSwgaXRlci0+c3ltLT5uYW1lKTsKLQkJCWlmIChjbXAgPiAwKQotCQkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKLQkJCWVsc2UKLQkJCQlwID0gJigqcCktPnJiX3JpZ2h0OwotCQl9CiAJfQogCiAJcmJfbGlua19ub2RlKCZoZS0+cmJfbm9kZSwgcGFyZW50LCBwKTsKIAlyYl9pbnNlcnRfY29sb3IoJmhlLT5yYl9ub2RlLCByb290KTsKIH0KIAotc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19yZXNvcnRfYnlfbmFtZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQorc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19yZXNvcnRfaGlzdF9lbnRyaWVzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCiB7CiAJdW5zaWduZWQgbG9uZyBwb3NpdGlvbiA9IDE7CiAJc3RydWN0IHJiX3Jvb3QgdG1wID0gUkJfUk9PVDsKQEAgLTEyMiwyOSArMTEyLDI4IEBACiAJc2VsZi0+aGlzdHMgPSB0bXA7CiB9CiAKK3N0YXRpYyB2b2lkIHBlcmZfc2Vzc2lvbl9fc2V0X2hpc3RfZW50cmllc19wb3NpdGlvbnMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKK3sKKwlwZXJmX3Nlc3Npb25fX291dHB1dF9yZXNvcnQoc2VsZiwgc2VsZi0+ZXZlbnRzX3N0YXRzLnRvdGFsKTsKKwlwZXJmX3Nlc3Npb25fX3Jlc29ydF9oaXN0X2VudHJpZXMoc2VsZik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaGlzdF9lbnRyeSAqCi1wZXJmX3Nlc3Npb25fX2ZpbmRfaGlzdF9lbnRyeV9ieV9uYW1lKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCi0JCQkJICAgICAgc3RydWN0IGhpc3RfZW50cnkgKmhlKQorcGVyZl9zZXNzaW9uX19maW5kX2hpc3RfZW50cnkoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCSAgICAgIHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHNlbGYtPmhpc3RzLnJiX25vZGU7CiAKIAl3aGlsZSAobikgewogCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaXRlciA9IHJiX2VudHJ5KG4sIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKLQkJaW50IGNtcCA9IHN0cmNtcChoZS0+bWFwLT5kc28tPm5hbWUsIGl0ZXItPm1hcC0+ZHNvLT5uYW1lKTsKKwkJaW50NjRfdCBjbXAgPSBoaXN0X2VudHJ5X19jbXAoaGUsIGl0ZXIpOwogCi0JCWlmIChjbXAgPiAwKQorCQlpZiAoY21wIDwgMCkKIAkJCW4gPSBuLT5yYl9sZWZ0OwotCQllbHNlIGlmIChjbXAgPCAwKQorCQllbHNlIGlmIChjbXAgPiAwKQogCQkJbiA9IG4tPnJiX3JpZ2h0OwotCQllbHNlIHsKLQkJCWNtcCA9IHN0cmNtcChoZS0+c3ltLT5uYW1lLCBpdGVyLT5zeW0tPm5hbWUpOwotCQkJaWYgKGNtcCA+IDApCi0JCQkJbiA9IG4tPnJiX2xlZnQ7Ci0JCQllbHNlIGlmIChjbXAgPCAwKQotCQkJCW4gPSBuLT5yYl9yaWdodDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gaXRlcjsKLQkJfQorCQllbHNlIAorCQkJcmV0dXJuIGl0ZXI7CiAJfQogCiAJcmV0dXJuIE5VTEw7CkBAIC0xNTUsMTEgKzE0NCw5IEBACiB7CiAJc3RydWN0IHJiX25vZGUgKm5kOwogCi0JcGVyZl9zZXNzaW9uX19yZXNvcnRfYnlfbmFtZShvbGRfc2Vzc2lvbik7Ci0KIAlmb3IgKG5kID0gcmJfZmlyc3QoJm5ld19zZXNzaW9uLT5oaXN0cyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CiAJCXN0cnVjdCBoaXN0X2VudHJ5ICpwb3MgPSByYl9lbnRyeShuZCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwotCQlwb3MtPnBhaXIgPSBwZXJmX3Nlc3Npb25fX2ZpbmRfaGlzdF9lbnRyeV9ieV9uYW1lKG9sZF9zZXNzaW9uLCBwb3MpOworCQlwb3MtPnBhaXIgPSBwZXJmX3Nlc3Npb25fX2ZpbmRfaGlzdF9lbnRyeShvbGRfc2Vzc2lvbiwgcG9zKTsKIAl9CiB9CiAKQEAgLTE3Nyw5ICsxNjQsMTIgQEAKIAkJcmV0ID0gcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uW2ldLCAmZXZlbnRfb3BzKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X2RlbGV0ZTsKLQkJcGVyZl9zZXNzaW9uX19vdXRwdXRfcmVzb3J0KHNlc3Npb25baV0sIHNlc3Npb25baV0tPmV2ZW50c19zdGF0cy50b3RhbCk7CiAJfQogCisJcGVyZl9zZXNzaW9uX19vdXRwdXRfcmVzb3J0KHNlc3Npb25bMV0sIHNlc3Npb25bMV0tPmV2ZW50c19zdGF0cy50b3RhbCk7CisJaWYgKHNob3dfZGlzcGxhY2VtZW50KQorCQlwZXJmX3Nlc3Npb25fX3NldF9oaXN0X2VudHJpZXNfcG9zaXRpb25zKHNlc3Npb25bMF0pOworCiAJcGVyZl9zZXNzaW9uX19tYXRjaF9oaXN0cyhzZXNzaW9uWzBdLCBzZXNzaW9uWzFdKTsKIAlwZXJmX3Nlc3Npb25fX2ZwcmludGZfaGlzdHMoc2Vzc2lvblsxXSwgc2Vzc2lvblswXSwKIAkJCQkgICAgc2hvd19kaXNwbGFjZW1lbnQsIHN0ZG91dCk7CkBAIC0yMDQsNyArMTk0LDcgQEAKIAlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZmb3JjZSwgImRvbid0IGNvbXBsYWluLCBkbyBpdCIpLAogCU9QVF9CT09MRUFOKCdtJywgIm1vZHVsZXMiLCAmc3ltYm9sX2NvbmYudXNlX21vZHVsZXMsCiAJCSAgICAibG9hZCBtb2R1bGUgc3ltYm9scyAtIFdBUk5JTkc6IHVzZSBvbmx5IHdpdGggLWsgYW5kIExJVkUga2VybmVsIiksCi0JT1BUX0JPT0xFQU4oJ1AnLCAiZnVsbC1wYXRocyIsICZldmVudF9vcHMuZnVsbF9wYXRocywKKwlPUFRfQk9PTEVBTignUCcsICJmdWxsLXBhdGhzIiwgJnN5bWJvbF9jb25mLmZ1bGxfcGF0aHMsCiAJCSAgICAiRG9uJ3Qgc2hvcnRlbiB0aGUgcGF0aG5hbWVzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGN3ZCIpLAogCU9QVF9TVFJJTkcoJ2QnLCAiZHNvcyIsICZzeW1ib2xfY29uZi5kc29fbGlzdF9zdHIsICJkc29bLGRzby4uLl0iLAogCQkgICAib25seSBjb25zaWRlciBzeW1ib2xzIGluIHRoZXNlIGRzb3MiKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1oZWxwLmMgYi90b29scy9wZXJmL2J1aWx0aW4taGVscC5jCmluZGV4IDlmODEwYjEuLjIxNWI1ODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1oZWxwLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWhlbHAuYwpAQCAtMjg2LDggKzI4Niw3IEBACiAKIAlwdXRzKCIgVGhlIG1vc3QgY29tbW9ubHkgdXNlZCBwZXJmIGNvbW1hbmRzIGFyZToiKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tb25fY21kcyk7IGkrKykgewotCQlwcmludGYoIiAgICVzICAgIiwgY29tbW9uX2NtZHNbaV0ubmFtZSk7Ci0JCW1wdXRfY2hhcignICcsIGxvbmdlc3QgLSBzdHJsZW4oY29tbW9uX2NtZHNbaV0ubmFtZSkpOworCQlwcmludGYoIiAgICUtKnMgICAiLCBsb25nZXN0LCBjb21tb25fY21kc1tpXS5uYW1lKTsKIAkJcHV0cyhjb21tb25fY21kc1tpXS5oZWxwKTsKIAl9CiB9CkBAIC0zMTQsOCArMzEzLDYgQEAKIAkJcmV0dXJuICJwZXJmIjsKIAllbHNlIGlmICghcHJlZml4Y21wKHBlcmZfY21kLCAicGVyZiIpKQogCQlyZXR1cm4gcGVyZl9jbWQ7Ci0JZWxzZSBpZiAoaXNfcGVyZl9jb21tYW5kKHBlcmZfY21kKSkKLQkJcmV0dXJuIHByZXBlbmQoInBlcmYtIiwgcGVyZl9jbWQpOwogCWVsc2UKIAkJcmV0dXJuIHByZXBlbmQoInBlcmYtIiwgcGVyZl9jbWQpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKaW5kZXggOTNjNjdiZi4uOTI0YTk1MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYworKysgYi90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jCkBAIC05MiwyMyArOTIsMTggQEAKIAlpZiAoIWRpcjEpCiAJCXJldHVybjsKIAotCXdoaWxlICh0cnVlKSB7Ci0JCWRlbnQxID0gcmVhZGRpcihkaXIxKTsKLQkJaWYgKCFkZW50MSkKLQkJCWJyZWFrOwotCi0JCWlmIChzc2NhbmYoZGVudDEtPmRfbmFtZSwgIm5vZGUldSIsICZtZW0pIDwgMSkKKwl3aGlsZSAoKGRlbnQxID0gcmVhZGRpcihkaXIxKSkgIT0gTlVMTCkgeworCQlpZiAoZGVudDEtPmRfdHlwZSAhPSBEVF9ESVIgfHwKKwkJICAgIHNzY2FuZihkZW50MS0+ZF9uYW1lLCAibm9kZSV1IiwgJm1lbSkgPCAxKQogCQkJY29udGludWU7CiAKIAkJc25wcmludGYoYnVmLCBQQVRIX01BWCwgIiVzLyVzIiwgUEFUSF9TWVNfTk9ERSwgZGVudDEtPmRfbmFtZSk7CiAJCWRpcjIgPSBvcGVuZGlyKGJ1Zik7CiAJCWlmICghZGlyMikKIAkJCWNvbnRpbnVlOwotCQl3aGlsZSAodHJ1ZSkgewotCQkJZGVudDIgPSByZWFkZGlyKGRpcjIpOwotCQkJaWYgKCFkZW50MikKLQkJCQlicmVhazsKLQkJCWlmIChzc2NhbmYoZGVudDItPmRfbmFtZSwgImNwdSV1IiwgJmNwdSkgPCAxKQorCQl3aGlsZSAoKGRlbnQyID0gcmVhZGRpcihkaXIyKSkgIT0gTlVMTCkgeworCQkJaWYgKGRlbnQyLT5kX3R5cGUgIT0gRFRfTE5LIHx8CisJCQkgICAgc3NjYW5mKGRlbnQyLT5kX25hbWUsICJjcHUldSIsICZjcHUpIDwgMSkKIAkJCQljb250aW51ZTsKIAkJCWNwdW5vZGVfbWFwW2NwdV0gPSBtZW07CiAJCX0KQEAgLTMyMSwxMSArMzE2LDggQEAKIAogCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKLQkJZXZlbnQtPmhlYWRlci5taXNjLAotCQlkYXRhLnBpZCwgZGF0YS50aWQsCi0JCSh2b2lkICopKGxvbmcpZGF0YS5pcCwKLQkJKGxvbmcgbG9uZylkYXRhLnBlcmlvZCk7CisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSNMeCBwZXJpb2Q6ICVMZFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAorCQkgICAgZGF0YS5waWQsIGRhdGEudGlkLCBkYXRhLmlwLCBkYXRhLnBlcmlvZCk7CiAKIAl0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgZXZlbnQtPmlwLnBpZCk7CiAJaWYgKHRocmVhZCA9PSBOVUxMKSB7CkBAIC0zNDIsMjIgKzMzNCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FtcGxlX3R5cGVfY2hlY2soc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKLXsKLQlpZiAoIShzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykpIHsKLQkJZnByaW50ZihzdGRlcnIsCi0JCQkiTm8gdHJhY2Ugc2FtcGxlIHRvIHJlYWQuIERpZCB5b3UgY2FsbCBwZXJmIHJlY29yZCAiCi0JCQkid2l0aG91dCAtUj8iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfb3BzIGV2ZW50X29wcyA9IHsKLQkucHJvY2Vzc19zYW1wbGVfZXZlbnQJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKLQkucHJvY2Vzc19jb21tX2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKLQkuc2FtcGxlX3R5cGVfY2hlY2sJPSBzYW1wbGVfdHlwZV9jaGVjaywKKwkuc2FtcGxlCT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCisJLmNvbW0JPSBldmVudF9fcHJvY2Vzc19jb21tLAogfTsKIAogc3RhdGljIGRvdWJsZSBmcmFnbWVudGF0aW9uKHVuc2lnbmVkIGxvbmcgbl9yZXEsIHVuc2lnbmVkIGxvbmcgbl9hbGxvYykKQEAgLTM5MCw3ICszNjksNyBAQAogCQlpZiAoaXNfY2FsbGVyKSB7CiAJCQlhZGRyID0gZGF0YS0+Y2FsbF9zaXRlOwogCQkJaWYgKCFyYXdfaXApCi0JCQkJc3ltID0gbWFwX2dyb3Vwc19fZmluZF9mdW5jdGlvbigmc2Vzc2lvbi0+a21hcHMsIHNlc3Npb24sIGFkZHIsIE5VTEwpOworCQkJCXN5bSA9IG1hcF9ncm91cHNfX2ZpbmRfZnVuY3Rpb24oJnNlc3Npb24tPmttYXBzLCBhZGRyLCBOVUxMKTsKIAkJfSBlbHNlCiAJCQlhZGRyID0gZGF0YS0+cHRyOwogCkBAIC01MDQsMTEgKzQ4MywxNCBAQAogCiBzdGF0aWMgaW50IF9fY21kX2ttZW0odm9pZCkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAtRUlOVkFMOwogCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgMCk7CiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAoIXBlcmZfc2Vzc2lvbl9faGFzX3RyYWNlcyhzZXNzaW9uLCAia21lbSByZWNvcmQiKSkKKwkJZ290byBvdXRfZGVsZXRlOworCiAJc2V0dXBfcGFnZXIoKTsKIAllcnIgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOwogCWlmIChlcnIgIT0gMCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMgYi90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOWFiMmEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jCkBAIC0wLDAgKzEsNjc4IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBlcmYuaCIKKworI2luY2x1ZGUgInV0aWwvdXRpbC5oIgorI2luY2x1ZGUgInV0aWwvY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgorI2luY2x1ZGUgInV0aWwvdGhyZWFkLmgiCisjaW5jbHVkZSAidXRpbC9oZWFkZXIuaCIKKworI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInV0aWwvdHJhY2UtZXZlbnQuaCIKKworI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL3Nlc3Npb24uaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorCisvKiBiYXNlZCBvbiBrZXJuZWwvbG9ja2RlcC5jICovCisjZGVmaW5lIExPQ0tIQVNIX0JJVFMJCTEyCisjZGVmaW5lIExPQ0tIQVNIX1NJWkUJCSgxVUwgPDwgTE9DS0hBU0hfQklUUykKKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgbG9ja2hhc2hfdGFibGVbTE9DS0hBU0hfU0laRV07CisKKyNkZWZpbmUgX19sb2NraGFzaGZuKGtleSkJaGFzaF9sb25nKCh1bnNpZ25lZCBsb25nKWtleSwgTE9DS0hBU0hfQklUUykKKyNkZWZpbmUgbG9ja2hhc2hlbnRyeShrZXkpCShsb2NraGFzaF90YWJsZSArIF9fbG9ja2hhc2hmbigoa2V5KSkpCisKKyNkZWZpbmUgTE9DS19TVEFURV9VTkxPQ0tFRAkwCSAgICAgICAvKiBpbml0aWFsIHN0YXRlICovCisjZGVmaW5lIExPQ0tfU1RBVEVfTE9DS0VECTEKKworc3RydWN0IGxvY2tfc3RhdCB7CisJc3RydWN0IGxpc3RfaGVhZAloYXNoX2VudHJ5OworCXN0cnVjdCByYl9ub2RlCQlyYjsJCS8qIHVzZWQgZm9yIHNvcnRpbmcgKi8KKworCS8qCisJICogRklYTUU6IHJhd19maWVsZF92YWx1ZSgpIHJldHVybnMgdW5zaWduZWQgbG9uZyBsb25nLAorCSAqIHNvIGFkZHJlc3Mgb2YgbG9ja2RlcF9tYXAgc2hvdWxkIGJlIGRlYWxlZCBhcyA2NGJpdC4KKwkgKiBJcyB0aGVyZSBtb3JlIGJldHRlciBzb2x1dGlvbj8KKwkgKi8KKwl2b2lkCQkJKmFkZHI7CQkvKiBhZGRyZXNzIG9mIGxvY2tkZXBfbWFwLCB1c2VkIGFzIElEICovCisJY2hhcgkJCSpuYW1lOwkJLyogZm9yIHN0cmNweSgpLCB3ZSBjYW5ub3QgdXNlIGNvbnN0ICovCisKKwlpbnQJCQlzdGF0ZTsKKwl1NjQJCQlwcmV2X2V2ZW50X3RpbWU7IC8qIHRpbWVzdGFtcCBvZiBwcmV2aW91cyBldmVudCAqLworCisJdW5zaWduZWQgaW50CQlucl9hY3F1aXJlZDsKKwl1bnNpZ25lZCBpbnQJCW5yX2FjcXVpcmU7CisJdW5zaWduZWQgaW50CQlucl9jb250ZW5kZWQ7CisJdW5zaWduZWQgaW50CQlucl9yZWxlYXNlOworCisJLyogdGhlc2UgdGltZXMgYXJlIGluIG5hbm8gc2VjLiAqLworCXU2NAkJCXdhaXRfdGltZV90b3RhbDsKKwl1NjQJCQl3YWl0X3RpbWVfbWluOworCXU2NAkJCXdhaXRfdGltZV9tYXg7Cit9OworCisvKiBidWlsZCBzaW1wbGUga2V5IGZ1bmN0aW9uIG9uZSBpcyBiaWdnZXIgdGhhbiB0d28gKi8KKyNkZWZpbmUgU0lOR0xFX0tFWShtZW1iZXIpCQkJCQkJXAorCXN0YXRpYyBpbnQgbG9ja19zdGF0X2tleV8gIyMgbWVtYmVyKHN0cnVjdCBsb2NrX3N0YXQgKm9uZSwJXAorCQkJCQkgc3RydWN0IGxvY2tfc3RhdCAqdHdvKQkJXAorCXsJCQkJCQkJCVwKKwkJcmV0dXJuIG9uZS0+bWVtYmVyID4gdHdvLT5tZW1iZXI7CQkJXAorCX0KKworU0lOR0xFX0tFWShucl9hY3F1aXJlZCkKK1NJTkdMRV9LRVkobnJfY29udGVuZGVkKQorU0lOR0xFX0tFWSh3YWl0X3RpbWVfdG90YWwpCitTSU5HTEVfS0VZKHdhaXRfdGltZV9taW4pCitTSU5HTEVfS0VZKHdhaXRfdGltZV9tYXgpCisKK3N0cnVjdCBsb2NrX2tleSB7CisJLyoKKwkgKiBuYW1lOiB0aGUgdmFsdWUgZm9yIHNwZWNpZnkgYnkgdXNlcgorCSAqIHRoaXMgc2hvdWxkIGJlIHNpbXBsZXIgdGhhbiByYXcgbmFtZSBvZiBtZW1iZXIKKwkgKiBlLmcuIG5yX2FjcXVpcmVkIC0+IGFjcXVpcmVkLCB3YWl0X3RpbWVfdG90YWwgLT4gd2FpdF90b3RhbAorCSAqLworCWNvbnN0IGNoYXIJCSpuYW1lOworCWludAkJCSgqa2V5KShzdHJ1Y3QgbG9ja19zdGF0Kiwgc3RydWN0IGxvY2tfc3RhdCopOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIJCSpzb3J0X2tleSA9ICJhY3F1aXJlZCI7CisKK3N0YXRpYyBpbnQJCQkoKmNvbXBhcmUpKHN0cnVjdCBsb2NrX3N0YXQgKiwgc3RydWN0IGxvY2tfc3RhdCAqKTsKKworc3RhdGljIHN0cnVjdCByYl9yb290CQlyZXN1bHQ7CS8qIHBsYWNlIHRvIHN0b3JlIHNvcnRlZCBkYXRhICovCisKKyNkZWZpbmUgREVGX0tFWV9MT0NLKG5hbWUsIGZuX3N1ZmZpeCkJXAorCXsgI25hbWUsIGxvY2tfc3RhdF9rZXlfICMjIGZuX3N1ZmZpeCB9CitzdHJ1Y3QgbG9ja19rZXkga2V5c1tdID0geworCURFRl9LRVlfTE9DSyhhY3F1aXJlZCwgbnJfYWNxdWlyZWQpLAorCURFRl9LRVlfTE9DSyhjb250ZW5kZWQsIG5yX2NvbnRlbmRlZCksCisJREVGX0tFWV9MT0NLKHdhaXRfdG90YWwsIHdhaXRfdGltZV90b3RhbCksCisJREVGX0tFWV9MT0NLKHdhaXRfbWluLCB3YWl0X3RpbWVfbWluKSwKKwlERUZfS0VZX0xPQ0sod2FpdF9tYXgsIHdhaXRfdGltZV9tYXgpLAorCisJLyogZXh0cmEgY29tcGFyaXNvbnMgbXVjaCBjb21wbGljYXRlZCBzaG91bGQgYmUgaGVyZSAqLworCisJeyBOVUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyB2b2lkIHNlbGVjdF9rZXkodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGtleXNbaV0ubmFtZTsgaSsrKSB7CisJCWlmICghc3RyY21wKGtleXNbaV0ubmFtZSwgc29ydF9rZXkpKSB7CisJCQljb21wYXJlID0ga2V5c1tpXS5rZXk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlkaWUoIlVua25vd24gY29tcGFyZSBrZXk6JXNcbiIsIHNvcnRfa2V5KTsKK30KKworc3RhdGljIHZvaWQgaW5zZXJ0X3RvX3Jlc3VsdChzdHJ1Y3QgbG9ja19zdGF0ICpzdCwKKwkJCSAgICAgaW50ICgqYmlnZ2VyKShzdHJ1Y3QgbG9ja19zdGF0ICosIHN0cnVjdCBsb2NrX3N0YXQgKikpCit7CisJc3RydWN0IHJiX25vZGUgKipyYiA9ICZyZXN1bHQucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgbG9ja19zdGF0ICpwOworCisJd2hpbGUgKCpyYikgeworCQlwID0gY29udGFpbmVyX29mKCpyYiwgc3RydWN0IGxvY2tfc3RhdCwgcmIpOworCQlwYXJlbnQgPSAqcmI7CisKKwkJaWYgKGJpZ2dlcihzdCwgcCkpCisJCQlyYiA9ICYoKnJiKS0+cmJfbGVmdDsKKwkJZWxzZQorCQkJcmIgPSAmKCpyYiktPnJiX3JpZ2h0OworCX0KKworCXJiX2xpbmtfbm9kZSgmc3QtPnJiLCBwYXJlbnQsIHJiKTsKKwlyYl9pbnNlcnRfY29sb3IoJnN0LT5yYiwgJnJlc3VsdCk7Cit9CisKKy8qIHJldHVybnMgbGVmdCBtb3N0IGVsZW1lbnQgb2YgcmVzdWx0LCBhbmQgZXJhc2UgaXQgKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19zdGF0ICpwb3BfZnJvbV9yZXN1bHQodm9pZCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9IHJlc3VsdC5yYl9ub2RlOworCisJaWYgKCFub2RlKQorCQlyZXR1cm4gTlVMTDsKKworCXdoaWxlIChub2RlLT5yYl9sZWZ0KQorCQlub2RlID0gbm9kZS0+cmJfbGVmdDsKKworCXJiX2VyYXNlKG5vZGUsICZyZXN1bHQpOworCXJldHVybiBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGxvY2tfc3RhdCwgcmIpOworfQorCitzdGF0aWMgc3RydWN0IGxvY2tfc3RhdCAqbG9ja19zdGF0X2ZpbmRuZXcodm9pZCAqYWRkciwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSA9IGxvY2toYXNoZW50cnkoYWRkcik7CisJc3RydWN0IGxvY2tfc3RhdCAqcmV0LCAqbmV3OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXQsIGVudHJ5LCBoYXNoX2VudHJ5KSB7CisJCWlmIChyZXQtPmFkZHIgPT0gYWRkcikKKwkJCXJldHVybiByZXQ7CisJfQorCisJbmV3ID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgbG9ja19zdGF0KSk7CisJaWYgKCFuZXcpCisJCWdvdG8gYWxsb2NfZmFpbGVkOworCisJbmV3LT5hZGRyID0gYWRkcjsKKwluZXctPm5hbWUgPSB6YWxsb2Moc2l6ZW9mKGNoYXIpICogc3RybGVuKG5hbWUpICsgMSk7CisJaWYgKCFuZXctPm5hbWUpCisJCWdvdG8gYWxsb2NfZmFpbGVkOworCXN0cmNweShuZXctPm5hbWUsIG5hbWUpOworCisJLyogTE9DS19TVEFURV9VTkxPQ0tFRCA9PSAwIGlzbid0IGd1YXJhbnRlZWQgZm9yZXZlciAqLworCW5ldy0+c3RhdGUgPSBMT0NLX1NUQVRFX1VOTE9DS0VEOworCW5ldy0+d2FpdF90aW1lX21pbiA9IFVMTE9OR19NQVg7CisKKwlsaXN0X2FkZCgmbmV3LT5oYXNoX2VudHJ5LCBlbnRyeSk7CisJcmV0dXJuIG5ldzsKKworYWxsb2NfZmFpbGVkOgorCWRpZSgibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKK30KKworc3RhdGljIGNoYXIJCQljb25zdCAqaW5wdXRfbmFtZSA9ICJwZXJmLmRhdGEiOworCitzdGF0aWMgaW50CQkJcHJvZmlsZV9jcHUgPSAtMTsKKworc3RydWN0IHJhd19ldmVudF9zYW1wbGUgeworCXUzMgkJCXNpemU7CisJY2hhcgkJCWRhdGFbMF07Cit9OworCitzdHJ1Y3QgdHJhY2VfYWNxdWlyZV9ldmVudCB7CisJdm9pZAkJCSphZGRyOworCWNvbnN0IGNoYXIJCSpuYW1lOworfTsKKworc3RydWN0IHRyYWNlX2FjcXVpcmVkX2V2ZW50IHsKKwl2b2lkCQkJKmFkZHI7CisJY29uc3QgY2hhcgkJKm5hbWU7Cit9OworCitzdHJ1Y3QgdHJhY2VfY29udGVuZGVkX2V2ZW50IHsKKwl2b2lkCQkJKmFkZHI7CisJY29uc3QgY2hhcgkJKm5hbWU7Cit9OworCitzdHJ1Y3QgdHJhY2VfcmVsZWFzZV9ldmVudCB7CisJdm9pZAkJCSphZGRyOworCWNvbnN0IGNoYXIJCSpuYW1lOworfTsKKworc3RydWN0IHRyYWNlX2xvY2tfaGFuZGxlciB7CisJdm9pZCAoKmFjcXVpcmVfZXZlbnQpKHN0cnVjdCB0cmFjZV9hY3F1aXJlX2V2ZW50ICosCisJCQkgICAgICBzdHJ1Y3QgZXZlbnQgKiwKKwkJCSAgICAgIGludCBjcHUsCisJCQkgICAgICB1NjQgdGltZXN0YW1wLAorCQkJICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKKworCXZvaWQgKCphY3F1aXJlZF9ldmVudCkoc3RydWN0IHRyYWNlX2FjcXVpcmVkX2V2ZW50ICosCisJCQkgICAgICAgc3RydWN0IGV2ZW50ICosCisJCQkgICAgICAgaW50IGNwdSwKKwkJCSAgICAgICB1NjQgdGltZXN0YW1wLAorCQkJICAgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCk7CisKKwl2b2lkICgqY29udGVuZGVkX2V2ZW50KShzdHJ1Y3QgdHJhY2VfY29udGVuZGVkX2V2ZW50ICosCisJCQkJc3RydWN0IGV2ZW50ICosCisJCQkJaW50IGNwdSwKKwkJCQl1NjQgdGltZXN0YW1wLAorCQkJCXN0cnVjdCB0aHJlYWQgKnRocmVhZCk7CisKKwl2b2lkICgqcmVsZWFzZV9ldmVudCkoc3RydWN0IHRyYWNlX3JlbGVhc2VfZXZlbnQgKiwKKwkJCSAgICAgIHN0cnVjdCBldmVudCAqLAorCQkJICAgICAgaW50IGNwdSwKKwkJCSAgICAgIHU2NCB0aW1lc3RhbXAsCisJCQkgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpOworfTsKKworc3RhdGljIHZvaWQKK3JlcG9ydF9sb2NrX2FjcXVpcmVfZXZlbnQoc3RydWN0IHRyYWNlX2FjcXVpcmVfZXZlbnQgKmFjcXVpcmVfZXZlbnQsCisJCQlzdHJ1Y3QgZXZlbnQgKl9fZXZlbnQgX191c2VkLAorCQkJaW50IGNwdSBfX3VzZWQsCisJCQl1NjQgdGltZXN0YW1wLAorCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgbG9ja19zdGF0ICpzdDsKKworCXN0ID0gbG9ja19zdGF0X2ZpbmRuZXcoYWNxdWlyZV9ldmVudC0+YWRkciwgYWNxdWlyZV9ldmVudC0+bmFtZSk7CisKKwlzd2l0Y2ggKHN0LT5zdGF0ZSkgeworCWNhc2UgTE9DS19TVEFURV9VTkxPQ0tFRDoKKwkJYnJlYWs7CisJY2FzZSBMT0NLX1NUQVRFX0xPQ0tFRDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHX09OKDEpOworCQlicmVhazsKKwl9CisKKwlzdC0+cHJldl9ldmVudF90aW1lID0gdGltZXN0YW1wOworfQorCitzdGF0aWMgdm9pZAorcmVwb3J0X2xvY2tfYWNxdWlyZWRfZXZlbnQoc3RydWN0IHRyYWNlX2FjcXVpcmVkX2V2ZW50ICphY3F1aXJlZF9ldmVudCwKKwkJCSBzdHJ1Y3QgZXZlbnQgKl9fZXZlbnQgX191c2VkLAorCQkJIGludCBjcHUgX191c2VkLAorCQkJIHU2NCB0aW1lc3RhbXAsCisJCQkgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgbG9ja19zdGF0ICpzdDsKKworCXN0ID0gbG9ja19zdGF0X2ZpbmRuZXcoYWNxdWlyZWRfZXZlbnQtPmFkZHIsIGFjcXVpcmVkX2V2ZW50LT5uYW1lKTsKKworCXN3aXRjaCAoc3QtPnN0YXRlKSB7CisJY2FzZSBMT0NLX1NUQVRFX1VOTE9DS0VEOgorCQlzdC0+c3RhdGUgPSBMT0NLX1NUQVRFX0xPQ0tFRDsKKwkJc3QtPm5yX2FjcXVpcmVkKys7CisJCWJyZWFrOworCWNhc2UgTE9DS19TVEFURV9MT0NLRUQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVR19PTigxKTsKKwkJYnJlYWs7CisJfQorCisJc3QtPnByZXZfZXZlbnRfdGltZSA9IHRpbWVzdGFtcDsKK30KKworc3RhdGljIHZvaWQKK3JlcG9ydF9sb2NrX2NvbnRlbmRlZF9ldmVudChzdHJ1Y3QgdHJhY2VfY29udGVuZGVkX2V2ZW50ICpjb250ZW5kZWRfZXZlbnQsCisJCQkgIHN0cnVjdCBldmVudCAqX19ldmVudCBfX3VzZWQsCisJCQkgIGludCBjcHUgX191c2VkLAorCQkJICB1NjQgdGltZXN0YW1wLAorCQkJICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCBsb2NrX3N0YXQgKnN0OworCisJc3QgPSBsb2NrX3N0YXRfZmluZG5ldyhjb250ZW5kZWRfZXZlbnQtPmFkZHIsIGNvbnRlbmRlZF9ldmVudC0+bmFtZSk7CisKKwlzd2l0Y2ggKHN0LT5zdGF0ZSkgeworCWNhc2UgTE9DS19TVEFURV9VTkxPQ0tFRDoKKwkJYnJlYWs7CisJY2FzZSBMT0NLX1NUQVRFX0xPQ0tFRDoKKwkJc3QtPm5yX2NvbnRlbmRlZCsrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUdfT04oMSk7CisJCWJyZWFrOworCX0KKworCXN0LT5wcmV2X2V2ZW50X3RpbWUgPSB0aW1lc3RhbXA7Cit9CisKK3N0YXRpYyB2b2lkCityZXBvcnRfbG9ja19yZWxlYXNlX2V2ZW50KHN0cnVjdCB0cmFjZV9yZWxlYXNlX2V2ZW50ICpyZWxlYXNlX2V2ZW50LAorCQkJc3RydWN0IGV2ZW50ICpfX2V2ZW50IF9fdXNlZCwKKwkJCWludCBjcHUgX191c2VkLAorCQkJdTY0IHRpbWVzdGFtcCwKKwkJCXN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IGxvY2tfc3RhdCAqc3Q7CisJdTY0IGhvbGRfdGltZTsKKworCXN0ID0gbG9ja19zdGF0X2ZpbmRuZXcocmVsZWFzZV9ldmVudC0+YWRkciwgcmVsZWFzZV9ldmVudC0+bmFtZSk7CisKKwlzd2l0Y2ggKHN0LT5zdGF0ZSkgeworCWNhc2UgTE9DS19TVEFURV9VTkxPQ0tFRDoKKwkJYnJlYWs7CisJY2FzZSBMT0NLX1NUQVRFX0xPQ0tFRDoKKwkJc3QtPnN0YXRlID0gTE9DS19TVEFURV9VTkxPQ0tFRDsKKwkJaG9sZF90aW1lID0gdGltZXN0YW1wIC0gc3QtPnByZXZfZXZlbnRfdGltZTsKKworCQlpZiAodGltZXN0YW1wIDwgc3QtPnByZXZfZXZlbnRfdGltZSkgeworCQkJLyogdGVycmlibHksIHRoaXMgY2FuIGhhcHBlbi4uLiAqLworCQkJZ290byBlbmQ7CisJCX0KKworCQlpZiAoc3QtPndhaXRfdGltZV9taW4gPiBob2xkX3RpbWUpCisJCQlzdC0+d2FpdF90aW1lX21pbiA9IGhvbGRfdGltZTsKKwkJaWYgKHN0LT53YWl0X3RpbWVfbWF4IDwgaG9sZF90aW1lKQorCQkJc3QtPndhaXRfdGltZV9tYXggPSBob2xkX3RpbWU7CisJCXN0LT53YWl0X3RpbWVfdG90YWwgKz0gaG9sZF90aW1lOworCisJCXN0LT5ucl9yZWxlYXNlKys7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVR19PTigxKTsKKwkJYnJlYWs7CisJfQorCitlbmQ6CisJc3QtPnByZXZfZXZlbnRfdGltZSA9IHRpbWVzdGFtcDsKK30KKworLyogbG9jayBvcmllbnRlZCBoYW5kbGVycyAqLworLyogVE9ETzogaGFuZGxlcnMgZm9yIENQVSBvcmllbnRlZCwgdGhyZWFkIG9yaWVudGVkICovCitzdGF0aWMgc3RydWN0IHRyYWNlX2xvY2tfaGFuZGxlciByZXBvcnRfbG9ja19vcHMgID0geworCS5hY3F1aXJlX2V2ZW50CQk9IHJlcG9ydF9sb2NrX2FjcXVpcmVfZXZlbnQsCisJLmFjcXVpcmVkX2V2ZW50CQk9IHJlcG9ydF9sb2NrX2FjcXVpcmVkX2V2ZW50LAorCS5jb250ZW5kZWRfZXZlbnQJPSByZXBvcnRfbG9ja19jb250ZW5kZWRfZXZlbnQsCisJLnJlbGVhc2VfZXZlbnQJCT0gcmVwb3J0X2xvY2tfcmVsZWFzZV9ldmVudCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfbG9ja19oYW5kbGVyICp0cmFjZV9oYW5kbGVyOworCitzdGF0aWMgdm9pZAorcHJvY2Vzc19sb2NrX2FjcXVpcmVfZXZlbnQodm9pZCAqZGF0YSwKKwkJCSAgIHN0cnVjdCBldmVudCAqZXZlbnQgX191c2VkLAorCQkJICAgaW50IGNwdSBfX3VzZWQsCisJCQkgICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHRyYWNlX2FjcXVpcmVfZXZlbnQgYWNxdWlyZV9ldmVudDsKKwl1NjQgdG1wOwkJLyogdGhpcyBpcyByZXF1aXJlZCBmb3IgY2FzdGluZy4uLiAqLworCisJdG1wID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAibG9ja2RlcF9hZGRyIiwgZGF0YSk7CisJbWVtY3B5KCZhY3F1aXJlX2V2ZW50LmFkZHIsICZ0bXAsIHNpemVvZih2b2lkICopKTsKKwlhY3F1aXJlX2V2ZW50Lm5hbWUgPSAoY2hhciAqKXJhd19maWVsZF9wdHIoZXZlbnQsICJuYW1lIiwgZGF0YSk7CisKKwlpZiAodHJhY2VfaGFuZGxlci0+YWNxdWlyZV9ldmVudCkKKwkJdHJhY2VfaGFuZGxlci0+YWNxdWlyZV9ldmVudCgmYWNxdWlyZV9ldmVudCwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworfQorCitzdGF0aWMgdm9pZAorcHJvY2Vzc19sb2NrX2FjcXVpcmVkX2V2ZW50KHZvaWQgKmRhdGEsCisJCQkgICAgc3RydWN0IGV2ZW50ICpldmVudCBfX3VzZWQsCisJCQkgICAgaW50IGNwdSBfX3VzZWQsCisJCQkgICAgdTY0IHRpbWVzdGFtcCBfX3VzZWQsCisJCQkgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgdHJhY2VfYWNxdWlyZWRfZXZlbnQgYWNxdWlyZWRfZXZlbnQ7CisJdTY0IHRtcDsJCS8qIHRoaXMgaXMgcmVxdWlyZWQgZm9yIGNhc3RpbmcuLi4gKi8KKworCXRtcCA9IHJhd19maWVsZF92YWx1ZShldmVudCwgImxvY2tkZXBfYWRkciIsIGRhdGEpOworCW1lbWNweSgmYWNxdWlyZWRfZXZlbnQuYWRkciwgJnRtcCwgc2l6ZW9mKHZvaWQgKikpOworCWFjcXVpcmVkX2V2ZW50Lm5hbWUgPSAoY2hhciAqKXJhd19maWVsZF9wdHIoZXZlbnQsICJuYW1lIiwgZGF0YSk7CisKKwlpZiAodHJhY2VfaGFuZGxlci0+YWNxdWlyZV9ldmVudCkKKwkJdHJhY2VfaGFuZGxlci0+YWNxdWlyZWRfZXZlbnQoJmFjcXVpcmVkX2V2ZW50LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX2xvY2tfY29udGVuZGVkX2V2ZW50KHZvaWQgKmRhdGEsCisJCQkgICAgIHN0cnVjdCBldmVudCAqZXZlbnQgX191c2VkLAorCQkJICAgICBpbnQgY3B1IF9fdXNlZCwKKwkJCSAgICAgdTY0IHRpbWVzdGFtcCBfX3VzZWQsCisJCQkgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHRyYWNlX2NvbnRlbmRlZF9ldmVudCBjb250ZW5kZWRfZXZlbnQ7CisJdTY0IHRtcDsJCS8qIHRoaXMgaXMgcmVxdWlyZWQgZm9yIGNhc3RpbmcuLi4gKi8KKworCXRtcCA9IHJhd19maWVsZF92YWx1ZShldmVudCwgImxvY2tkZXBfYWRkciIsIGRhdGEpOworCW1lbWNweSgmY29udGVuZGVkX2V2ZW50LmFkZHIsICZ0bXAsIHNpemVvZih2b2lkICopKTsKKwljb250ZW5kZWRfZXZlbnQubmFtZSA9IChjaGFyICopcmF3X2ZpZWxkX3B0cihldmVudCwgIm5hbWUiLCBkYXRhKTsKKworCWlmICh0cmFjZV9oYW5kbGVyLT5hY3F1aXJlX2V2ZW50KQorCQl0cmFjZV9oYW5kbGVyLT5jb250ZW5kZWRfZXZlbnQoJmNvbnRlbmRlZF9ldmVudCwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworfQorCitzdGF0aWMgdm9pZAorcHJvY2Vzc19sb2NrX3JlbGVhc2VfZXZlbnQodm9pZCAqZGF0YSwKKwkJCSAgIHN0cnVjdCBldmVudCAqZXZlbnQgX191c2VkLAorCQkJICAgaW50IGNwdSBfX3VzZWQsCisJCQkgICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHRyYWNlX3JlbGVhc2VfZXZlbnQgcmVsZWFzZV9ldmVudDsKKwl1NjQgdG1wOwkJLyogdGhpcyBpcyByZXF1aXJlZCBmb3IgY2FzdGluZy4uLiAqLworCisJdG1wID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAibG9ja2RlcF9hZGRyIiwgZGF0YSk7CisJbWVtY3B5KCZyZWxlYXNlX2V2ZW50LmFkZHIsICZ0bXAsIHNpemVvZih2b2lkICopKTsKKwlyZWxlYXNlX2V2ZW50Lm5hbWUgPSAoY2hhciAqKXJhd19maWVsZF9wdHIoZXZlbnQsICJuYW1lIiwgZGF0YSk7CisKKwlpZiAodHJhY2VfaGFuZGxlci0+YWNxdWlyZV9ldmVudCkKKwkJdHJhY2VfaGFuZGxlci0+cmVsZWFzZV9ldmVudCgmcmVsZWFzZV9ldmVudCwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworfQorCitzdGF0aWMgdm9pZAorcHJvY2Vzc19yYXdfZXZlbnQodm9pZCAqZGF0YSwgaW50IGNwdSwKKwkJICB1NjQgdGltZXN0YW1wLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCit7CisJc3RydWN0IGV2ZW50ICpldmVudDsKKwlpbnQgdHlwZTsKKworCXR5cGUgPSB0cmFjZV9wYXJzZV9jb21tb25fdHlwZShkYXRhKTsKKwlldmVudCA9IHRyYWNlX2ZpbmRfZXZlbnQodHlwZSk7CisKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgImxvY2tfYWNxdWlyZSIpKQorCQlwcm9jZXNzX2xvY2tfYWNxdWlyZV9ldmVudChkYXRhLCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJsb2NrX2FjcXVpcmVkIikpCisJCXByb2Nlc3NfbG9ja19hY3F1aXJlZF9ldmVudChkYXRhLCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJsb2NrX2NvbnRlbmRlZCIpKQorCQlwcm9jZXNzX2xvY2tfY29udGVuZGVkX2V2ZW50KGRhdGEsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgImxvY2tfcmVsZWFzZSIpKQorCQlwcm9jZXNzX2xvY2tfcmVsZWFzZV9ldmVudChkYXRhLCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCit7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkOworCXN0cnVjdCBzYW1wbGVfZGF0YSBkYXRhOworCisJYnplcm8oJmRhdGEsIHNpemVvZihzdHJ1Y3Qgc2FtcGxlX2RhdGEpKTsKKwlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOworCXRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBkYXRhLnBpZCk7CisKKwlpZiAodGhyZWFkID09IE5VTEwpIHsKKwkJcHJfZGVidWcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAorCQkJIGV2ZW50LT5oZWFkZXIudHlwZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlkdW1wX3ByaW50ZigiIC4uLiB0aHJlYWQ6ICVzOiVkXG4iLCB0aHJlYWQtPmNvbW0sIHRocmVhZC0+cGlkKTsKKworCWlmIChwcm9maWxlX2NwdSAhPSAtMSAmJiBwcm9maWxlX2NwdSAhPSAoaW50KSBkYXRhLmNwdSkKKwkJcmV0dXJuIDA7CisKKwlwcm9jZXNzX3Jhd19ldmVudChkYXRhLnJhd19kYXRhLCBkYXRhLmNwdSwgZGF0YS50aW1lLCB0aHJlYWQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRPRE86IHZhcmlvdXMgd2F5IHRvIHByaW50LCBjb2xvcmluZywgbmFubyBvciBtaWxsaSBzZWMgKi8KK3N0YXRpYyB2b2lkIHByaW50X3Jlc3VsdCh2b2lkKQoreworCXN0cnVjdCBsb2NrX3N0YXQgKnN0OworCWNoYXIgY3V0X25hbWVbMjBdOworCisJcHJpbnRmKCIlMThzICIsICJJRCIpOworCXByaW50ZigiJTIwcyAiLCAiTmFtZSIpOworCXByaW50ZigiJTEwcyAiLCAiYWNxdWlyZWQiKTsKKwlwcmludGYoIiUxMHMgIiwgImNvbnRlbmRlZCIpOworCisJcHJpbnRmKCIlMTVzICIsICJ0b3RhbCB3YWl0IChucykiKTsKKwlwcmludGYoIiUxNXMgIiwgIm1heCB3YWl0IChucykiKTsKKwlwcmludGYoIiUxNXMgIiwgIm1pbiB3YWl0IChucykiKTsKKworCXByaW50ZigiXG5cbiIpOworCisJd2hpbGUgKChzdCA9IHBvcF9mcm9tX3Jlc3VsdCgpKSkgeworCQliemVybyhjdXRfbmFtZSwgMjApOworCisJCXByaW50ZigiJXAgIiwgc3QtPmFkZHIpOworCisJCWlmIChzdHJsZW4oc3QtPm5hbWUpIDwgMTYpIHsKKwkJCS8qIG91dHB1dCByYXcgbmFtZSAqLworCQkJcHJpbnRmKCIlMjBzICIsIHN0LT5uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCXN0cm5jcHkoY3V0X25hbWUsIHN0LT5uYW1lLCAxNik7CisJCQljdXRfbmFtZVsxNl0gPSAnLic7CisJCQljdXRfbmFtZVsxN10gPSAnLic7CisJCQljdXRfbmFtZVsxOF0gPSAnLic7CisJCQljdXRfbmFtZVsxOV0gPSAnXDAnOworCQkJLyogY3V0IG9mZiBuYW1lIGZvciBzYXZpbmcgb3V0cHV0IHN0eWxlICovCisJCQlwcmludGYoIiUyMHMgIiwgY3V0X25hbWUpOworCQl9CisKKwkJcHJpbnRmKCIlMTB1ICIsIHN0LT5ucl9hY3F1aXJlZCk7CisJCXByaW50ZigiJTEwdSAiLCBzdC0+bnJfY29udGVuZGVkKTsKKworCQlwcmludGYoIiUxNWxsdSAiLCBzdC0+d2FpdF90aW1lX3RvdGFsKTsKKwkJcHJpbnRmKCIlMTVsbHUgIiwgc3QtPndhaXRfdGltZV9tYXgpOworCQlwcmludGYoIiUxNWxsdSAiLCBzdC0+d2FpdF90aW1lX21pbiA9PSBVTExPTkdfTUFYID8KKwkJICAgICAgIDAgOiBzdC0+d2FpdF90aW1lX21pbik7CisJCXByaW50ZigiXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfbWFwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGxvY2tfc3RhdCAqc3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgTE9DS0hBU0hfU0laRTsgaSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3QsICZsb2NraGFzaF90YWJsZVtpXSwgaGFzaF9lbnRyeSkgeworCQkJcHJpbnRmKCIlcDogJXNcbiIsIHN0LT5hZGRyLCBzdC0+bmFtZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZW9wcyA9IHsKKwkuc2FtcGxlCQkJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkuY29tbQkJCT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uOworCitzdGF0aWMgaW50IHJlYWRfZXZlbnRzKHZvaWQpCit7CisJc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCAwKTsKKwlpZiAoIXNlc3Npb24pCisJCWRpZSgiSW5pdGlhbGl6aW5nIHBlcmYgc2Vzc2lvbiBmYWlsZWRcbiIpOworCisJcmV0dXJuIHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgJmVvcHMpOworfQorCitzdGF0aWMgdm9pZCBzb3J0X3Jlc3VsdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBsb2NrX3N0YXQgKnN0OworCisJZm9yIChpID0gMDsgaSA8IExPQ0tIQVNIX1NJWkU7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0LCAmbG9ja2hhc2hfdGFibGVbaV0sIGhhc2hfZW50cnkpIHsKKwkJCWluc2VydF90b19yZXN1bHQoc3QsIGNvbXBhcmUpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2NtZF9yZXBvcnQodm9pZCkKK3sKKwlzZXR1cF9wYWdlcigpOworCXNlbGVjdF9rZXkoKTsKKwlyZWFkX2V2ZW50cygpOworCXNvcnRfcmVzdWx0KCk7CisJcHJpbnRfcmVzdWx0KCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVwb3J0X3VzYWdlW10gPSB7CisJInBlcmYgbG9jayByZXBvcnQgWzxvcHRpb25zPl0iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIHJlcG9ydF9vcHRpb25zW10gPSB7CisJT1BUX1NUUklORygnaycsICJrZXkiLCAmc29ydF9rZXksICJhY3F1aXJlZCIsCisJCSAgICAia2V5IGZvciBzb3J0aW5nIiksCisJLyogVE9ETzogdHlwZSAqLworCU9QVF9FTkQoKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsb2NrX3VzYWdlW10gPSB7CisJInBlcmYgbG9jayBbPG9wdGlvbnM+XSB7cmVjb3JkfHRyYWNlfHJlcG9ydH0iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvY2tfb3B0aW9uc1tdID0geworCU9QVF9TVFJJTkcoJ2knLCAiaW5wdXQiLCAmaW5wdXRfbmFtZSwgImZpbGUiLCAiaW5wdXQgZmlsZSBuYW1lIiksCisJT1BUX0JPT0xFQU4oJ3YnLCAidmVyYm9zZSIsICZ2ZXJib3NlLCAiYmUgbW9yZSB2ZXJib3NlIChzaG93IHN5bWJvbCBhZGRyZXNzLCBldGMpIiksCisJT1BUX0JPT0xFQU4oJ0QnLCAiZHVtcC1yYXctdHJhY2UiLCAmZHVtcF90cmFjZSwgImR1bXAgcmF3IHRyYWNlIGluIEFTQ0lJIiksCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcmVjb3JkX2FyZ3NbXSA9IHsKKwkicmVjb3JkIiwKKwkiLWEiLAorCSItUiIsCisJIi1NIiwKKwkiLWYiLAorCSItbSIsICIxMDI0IiwKKwkiLWMiLCAiMSIsCisJIi1lIiwgImxvY2s6bG9ja19hY3F1aXJlOnIiLAorCSItZSIsICJsb2NrOmxvY2tfYWNxdWlyZWQ6ciIsCisJIi1lIiwgImxvY2s6bG9ja19jb250ZW5kZWQ6ciIsCisJIi1lIiwgImxvY2s6bG9ja19yZWxlYXNlOnIiLAorfTsKKworc3RhdGljIGludCBfX2NtZF9yZWNvcmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGludCByZWNfYXJnYywgaSwgajsKKwljb25zdCBjaGFyICoqcmVjX2FyZ3Y7CisKKwlyZWNfYXJnYyA9IEFSUkFZX1NJWkUocmVjb3JkX2FyZ3MpICsgYXJnYyAtIDE7CisJcmVjX2FyZ3YgPSBjYWxsb2MocmVjX2FyZ2MgKyAxLCBzaXplb2YoY2hhciAqKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWNvcmRfYXJncyk7IGkrKykKKwkJcmVjX2FyZ3ZbaV0gPSBzdHJkdXAocmVjb3JkX2FyZ3NbaV0pOworCisJZm9yIChqID0gMTsgaiA8ICh1bnNpZ25lZCBpbnQpYXJnYzsgaisrLCBpKyspCisJCXJlY19hcmd2W2ldID0gYXJndltqXTsKKworCUJVR19PTihpICE9IHJlY19hcmdjKTsKKworCXJldHVybiBjbWRfcmVjb3JkKGksIHJlY19hcmd2LCBOVUxMKTsKK30KKworaW50IGNtZF9sb2NrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCXN5bWJvbF9faW5pdCgpOworCWZvciAoaSA9IDA7IGkgPCBMT0NLSEFTSF9TSVpFOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKGxvY2toYXNoX3RhYmxlICsgaSk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBsb2NrX29wdGlvbnMsIGxvY2tfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCWlmICghYXJnYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGxvY2tfdXNhZ2UsIGxvY2tfb3B0aW9ucyk7CisKKwlpZiAoIXN0cm5jbXAoYXJndlswXSwgInJlYyIsIDMpKSB7CisJCXJldHVybiBfX2NtZF9yZWNvcmQoYXJnYywgYXJndik7CisJfSBlbHNlIGlmICghc3RybmNtcChhcmd2WzBdLCAicmVwb3J0IiwgNikpIHsKKwkJdHJhY2VfaGFuZGxlciA9ICZyZXBvcnRfbG9ja19vcHM7CisJCWlmIChhcmdjKSB7CisJCQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LAorCQkJCQkgICAgIHJlcG9ydF9vcHRpb25zLCByZXBvcnRfdXNhZ2UsIDApOworCQkJaWYgKGFyZ2MpCisJCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHJlcG9ydF91c2FnZSwgcmVwb3J0X29wdGlvbnMpOworCQl9CisJCV9fY21kX3JlcG9ydCgpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAidHJhY2UiKSkgeworCQkvKiBBbGlhc2VkIHRvICdwZXJmIHRyYWNlJyAqLworCQlyZXR1cm4gY21kX3RyYWNlKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJtYXAiKSkgeworCQkvKiByZWN5Y2xpbmcgcmVwb3J0X2xvY2tfb3BzICovCisJCXRyYWNlX2hhbmRsZXIgPSAmcmVwb3J0X2xvY2tfb3BzOworCQlzZXR1cF9wYWdlcigpOworCQlyZWFkX2V2ZW50cygpOworCQlkdW1wX21hcCgpOworCX0gZWxzZSB7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhsb2NrX3VzYWdlLCBsb2NrX29wdGlvbnMpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXByb2JlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYwppbmRleCBjMWU2Nzc0Li5hZDQ3YmQ0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYwpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgInV0aWwvZGVidWdmcy5oIgogI2luY2x1ZGUgInV0aWwvc3ltYm9sLmgiCiAjaW5jbHVkZSAidXRpbC90aHJlYWQuaCIKLSNpbmNsdWRlICJ1dGlsL3Nlc3Npb24uaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLWV2ZW50cy5oIgkvKiBGb3IgZGVidWdmc19wYXRoICovCiAjaW5jbHVkZSAidXRpbC9wcm9iZS1maW5kZXIuaCIKQEAgLTU1LDExICs1NCwxMyBAQAogCWJvb2wgbmVlZF9kd2FyZjsKIAlib29sIGxpc3RfZXZlbnRzOwogCWJvb2wgZm9yY2VfYWRkOworCWJvb2wgc2hvd19saW5lczsKIAlpbnQgbnJfcHJvYmU7CiAJc3RydWN0IHByb2JlX3BvaW50IHByb2Jlc1tNQVhfUFJPQkVTXTsKIAlzdHJ1Y3Qgc3RybGlzdCAqZGVsbGlzdDsKLQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpwc2Vzc2lvbjsKLQlzdHJ1Y3QgbWFwICprbWFwOworCXN0cnVjdCBtYXBfZ3JvdXBzIGttYXBfZ3JvdXBzOworCXN0cnVjdCBtYXAgKmttYXBzW01BUF9fTlJfVFlQRVNdOworCXN0cnVjdCBsaW5lX3JhbmdlIGxpbmVfcmFuZ2U7CiB9IHNlc3Npb247CiAKIApAQCAtMTIwLDggKzEyMSw4IEBACiBzdGF0aWMgdm9pZCBldmFsdWF0ZV9wcm9iZV9wb2ludChzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKQogewogCXN0cnVjdCBzeW1ib2wgKnN5bTsKLQlzeW0gPSBtYXBfX2ZpbmRfc3ltYm9sX2J5X25hbWUoc2Vzc2lvbi5rbWFwLCBwcC0+ZnVuY3Rpb24sCi0JCQkJICAgICAgIHNlc3Npb24ucHNlc3Npb24sIE5VTEwpOworCXN5bSA9IG1hcF9fZmluZF9zeW1ib2xfYnlfbmFtZShzZXNzaW9uLmttYXBzW01BUF9fRlVOQ1RJT05dLAorCQkJCSAgICAgICBwcC0+ZnVuY3Rpb24sIE5VTEwpOwogCWlmICghc3ltKQogCQlkaWUoIktlcm5lbCBzeW1ib2wgXCclc1wnIG5vdCBmb3VuZCAtIHByb2JlIG5vdCBhZGRlZC4iLAogCQkgICAgcHAtPmZ1bmN0aW9uKTsKQEAgLTEzMCwxMiArMTMxLDIzIEBACiAjaWZuZGVmIE5PX0xJQkRXQVJGCiBzdGF0aWMgaW50IG9wZW5fdm1saW51eCh2b2lkKQogewotCWlmIChtYXBfX2xvYWQoc2Vzc2lvbi5rbWFwLCBzZXNzaW9uLnBzZXNzaW9uLCBOVUxMKSA8IDApIHsKKwlpZiAobWFwX19sb2FkKHNlc3Npb24ua21hcHNbTUFQX19GVU5DVElPTl0sIE5VTEwpIDwgMCkgewogCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGxvYWQga2VybmVsIG1hcC5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcHJfZGVidWcoIlRyeSB0byBvcGVuICVzXG4iLCBzZXNzaW9uLmttYXAtPmRzby0+bG9uZ19uYW1lKTsKLQlyZXR1cm4gb3BlbihzZXNzaW9uLmttYXAtPmRzby0+bG9uZ19uYW1lLCBPX1JET05MWSk7CisJcHJfZGVidWcoIlRyeSB0byBvcGVuICVzXG4iLAorCQkgc2Vzc2lvbi5rbWFwc1tNQVBfX0ZVTkNUSU9OXS0+ZHNvLT5sb25nX25hbWUpOworCXJldHVybiBvcGVuKHNlc3Npb24ua21hcHNbTUFQX19GVU5DVElPTl0tPmRzby0+bG9uZ19uYW1lLCBPX1JET05MWSk7Cit9CisKK3N0YXRpYyBpbnQgb3B0X3Nob3dfbGluZXMoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0IF9fdXNlZCwKKwkJCSAgY29uc3QgY2hhciAqc3RyLCBpbnQgdW5zZXQgX191c2VkKQoreworCWlmIChzdHIpCisJCXBhcnNlX2xpbmVfcmFuZ2VfZGVzYyhzdHIsICZzZXNzaW9uLmxpbmVfcmFuZ2UpOworCUlOSVRfTElTVF9IRUFEKCZzZXNzaW9uLmxpbmVfcmFuZ2UubGluZV9saXN0KTsKKwlzZXNzaW9uLnNob3dfbGluZXMgPSB0cnVlOworCXJldHVybiAwOwogfQogI2VuZGlmCiAKQEAgLTE0NCw2ICsxNTYsNyBAQAogCSJwZXJmIHByb2JlIFs8b3B0aW9ucz5dIC0tYWRkICdQUk9CRURFRicgWy0tYWRkICdQUk9CRURFRicgLi4uXSIsCiAJInBlcmYgcHJvYmUgWzxvcHRpb25zPl0gLS1kZWwgJ1tHUk9VUDpdRVZFTlQnIC4uLiIsCiAJInBlcmYgcHJvYmUgLS1saXN0IiwKKwkicGVyZiBwcm9iZSAtLWxpbmUgJ0xJTkVERVNDJyIsCiAJTlVMTAogfTsKIApAQCAtMTgyLDkgKzE5NSwzMSBAQAogCQlvcHRfYWRkX3Byb2JlX2V2ZW50KSwKIAlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZzZXNzaW9uLmZvcmNlX2FkZCwgImZvcmNpYmx5IGFkZCBldmVudHMiCiAJCSAgICAiIHdpdGggZXhpc3RpbmcgbmFtZSIpLAorI2lmbmRlZiBOT19MSUJEV0FSRgorCU9QVF9DQUxMQkFDSygnTCcsICJsaW5lIiwgTlVMTCwKKwkJICAgICAiRlVOQ1s6UkxOWytOVU18OlJMTjJdXXxTUkM6QUxOWytOVU18OkFMTjJdIiwKKwkJICAgICAiU2hvdyBzb3VyY2UgY29kZSBsaW5lcy4iLCBvcHRfc2hvd19saW5lcyksCisjZW5kaWYKIAlPUFRfRU5EKCkKIH07CiAKKy8qIEluaXRpYWxpemUgc3ltYm9sIG1hcHMgZm9yIHZtbGludXggKi8KK3N0YXRpYyB2b2lkIGluaXRfdm1saW51eCh2b2lkKQoreworCXN5bWJvbF9jb25mLnNvcnRfYnlfbmFtZSA9IHRydWU7CisJaWYgKHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSA9PSBOVUxMKQorCQlzeW1ib2xfY29uZi50cnlfdm1saW51eF9wYXRoID0gdHJ1ZTsKKwllbHNlCisJCXByX2RlYnVnKCJVc2Ugdm1saW51eDogJXNcbiIsIHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSk7CisJaWYgKHN5bWJvbF9faW5pdCgpIDwgMCkKKwkJZGllKCJGYWlsZWQgdG8gaW5pdCBzeW1ib2wgbWFwLiIpOworCisJbWFwX2dyb3Vwc19faW5pdCgmc2Vzc2lvbi5rbWFwX2dyb3Vwcyk7CisJaWYgKG1hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcygmc2Vzc2lvbi5rbWFwX2dyb3VwcywKKwkJCQkJICAgc2Vzc2lvbi5rbWFwcykgPCAwKQorCQlkaWUoIkZhaWxlZCB0byBjcmVhdGUga2VybmVsIG1hcHMuIik7Cit9CisKIGludCBjbWRfcHJvYmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQogewogCWludCBpLCByZXQ7CkBAIC0yMDMsNyArMjM4LDggQEAKIAkJcGFyc2VfcHJvYmVfZXZlbnRfYXJndihhcmdjLCBhcmd2KTsKIAl9CiAKLQlpZiAoKCFzZXNzaW9uLm5yX3Byb2JlICYmICFzZXNzaW9uLmRlbGxpc3QgJiYgIXNlc3Npb24ubGlzdF9ldmVudHMpKQorCWlmICgoIXNlc3Npb24ubnJfcHJvYmUgJiYgIXNlc3Npb24uZGVsbGlzdCAmJiAhc2Vzc2lvbi5saXN0X2V2ZW50cyAmJgorCSAgICAgIXNlc3Npb24uc2hvd19saW5lcykpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7CiAKIAlpZiAoZGVidWdmc192YWxpZF9tb3VudHBvaW50KGRlYnVnZnNfcGF0aCkgPCAwKQpAQCAtMjE1LDEwICsyNTEsMzQgQEAKIAkJCQkgICAiIC0tYWRkLy0tZGVsLlxuIik7CiAJCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOwogCQl9CisJCWlmIChzZXNzaW9uLnNob3dfbGluZXMpIHsKKwkJCXByX3dhcm5pbmcoIiAgRXJyb3I6IERvbid0IHVzZSAtLWxpc3Qgd2l0aCAtLWxpbmUuXG4iKTsKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7CisJCX0KIAkJc2hvd19wZXJmX3Byb2JlX2V2ZW50cygpOwogCQlyZXR1cm4gMDsKIAl9CiAKKyNpZm5kZWYgTk9fTElCRFdBUkYKKwlpZiAoc2Vzc2lvbi5zaG93X2xpbmVzKSB7CisJCWlmIChzZXNzaW9uLm5yX3Byb2JlICE9IDAgfHwgc2Vzc2lvbi5kZWxsaXN0KSB7CisJCQlwcl93YXJuaW5nKCIgIEVycm9yOiBEb24ndCB1c2UgLS1saW5lIHdpdGgiCisJCQkJICAgIiAtLWFkZC8tLWRlbC5cbiIpOworCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKKwkJfQorCQlpbml0X3ZtbGludXgoKTsKKwkJZmQgPSBvcGVuX3ZtbGludXgoKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWRpZSgiQ291bGQgbm90IG9wZW4gZGVidWdpbmZvIGZpbGUuIik7CisJCXJldCA9IGZpbmRfbGluZV9yYW5nZShmZCwgJnNlc3Npb24ubGluZV9yYW5nZSk7CisJCWlmIChyZXQgPD0gMCkKKwkJCWRpZSgiU291cmNlIGxpbmUgaXMgbm90IGZvdW5kLlxuIik7CisJCWNsb3NlKGZkKTsKKwkJc2hvd19saW5lX3JhbmdlKCZzZXNzaW9uLmxpbmVfcmFuZ2UpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwogCWlmIChzZXNzaW9uLmRlbGxpc3QpIHsKIAkJZGVsX3RyYWNlX2twcm9iZV9ldmVudHMoc2Vzc2lvbi5kZWxsaXN0KTsKIAkJc3RybGlzdF9fZGVsZXRlKHNlc3Npb24uZGVsbGlzdCk7CkBAIC0yMjYsMjAgKzI4Niw4IEBACiAJCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBJbml0aWFsaXplIHN5bWJvbCBtYXBzIGZvciB2bWxpbnV4ICovCi0Jc3ltYm9sX2NvbmYuc29ydF9ieV9uYW1lID0gdHJ1ZTsKLQlpZiAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lID09IE5VTEwpCi0JCXN5bWJvbF9jb25mLnRyeV92bWxpbnV4X3BhdGggPSB0cnVlOwotCWlmIChzeW1ib2xfX2luaXQoKSA8IDApCi0JCWRpZSgiRmFpbGVkIHRvIGluaXQgc3ltYm9sIG1hcC4iKTsKLQlzZXNzaW9uLnBzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoTlVMTCwgT19XUk9OTFksIGZhbHNlKTsKLQlpZiAoc2Vzc2lvbi5wc2Vzc2lvbiA9PSBOVUxMKQotCQlkaWUoIkZhaWxlZCB0byBpbml0IHBlcmZfc2Vzc2lvbi4iKTsKLQlzZXNzaW9uLmttYXAgPSBtYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoJnNlc3Npb24ucHNlc3Npb24tPmttYXBzLAotCQkJCQkJTUFQX19GVU5DVElPTiwKLQkJCQkJCSJba2VybmVsLmthbGxzeW1zXSIpOwotCWlmICghc2Vzc2lvbi5rbWFwKQotCQlkaWUoIkNvdWxkIG5vdCBmaW5kIGtlcm5lbCBtYXAuXG4iKTsKKwkvKiBBZGQgcHJvYmVzICovCisJaW5pdF92bWxpbnV4KCk7CiAKIAlpZiAoc2Vzc2lvbi5uZWVkX2R3YXJmKQogI2lmZGVmIE5PX0xJQkRXQVJGCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKaW5kZXggMjY1NDI1My4uNzcxNTMzYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwpAQCAtNSwxMCArNSwxMyBAQAogICogKG9yIGEgQ1BVLCBvciBhIFBJRCkgaW50byB0aGUgcGVyZi5kYXRhIG91dHB1dCBmaWxlIC0gZm9yCiAgKiBsYXRlciBhbmFseXNpcyB2aWEgcGVyZiByZXBvcnQuCiAgKi8KKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKwogI2luY2x1ZGUgImJ1aWx0aW4uaCIKIAogI2luY2x1ZGUgInBlcmYuaCIKIAorI2luY2x1ZGUgInV0aWwvYnVpbGQtaWQuaCIKICNpbmNsdWRlICJ1dGlsL3V0aWwuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLWV2ZW50cy5oIgpAQCAtNjIsNiArNjUsNyBAQAogc3RhdGljIGludAkJCW5yX2NwdQkJCQk9ICAgICAgMDsKIAogc3RhdGljIGludAkJCWZpbGVfbmV3CQkJPSAgICAgIDE7CitzdGF0aWMgb2ZmX3QJCQlwb3N0X3Byb2Nlc3Npbmdfb2Zmc2V0OwogCiBzdGF0aWMgc3RydWN0IHBlcmZfc2Vzc2lvbgkqc2Vzc2lvbjsKIApAQCAtMTExLDIyICsxMTUsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHdyaXRlX2V2ZW50KGV2ZW50X3QgKmJ1Ziwgc2l6ZV90IHNpemUpCi17Ci0JLyoKLQkqIEFkZCBpdCB0byB0aGUgbGlzdCBvZiBEU09zLCBzbyB0aGF0IHdoZW4gd2UgZmluaXNoIHRoaXMKLQkgKiByZWNvcmQgc2Vzc2lvbiB3ZSBjYW4gcGljayB0aGUgYXZhaWxhYmxlIGJ1aWxkLWlkcy4KLQkgKi8KLQlpZiAoYnVmLT5oZWFkZXIudHlwZSA9PSBQRVJGX1JFQ09SRF9NTUFQKQotCQlkc29zX19maW5kbmV3KGJ1Zi0+bW1hcC5maWxlbmFtZSk7Ci0KLQl3cml0ZV9vdXRwdXQoYnVmLCBzaXplKTsKLX0KLQogc3RhdGljIGludCBwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50KGV2ZW50X3QgKmV2ZW50LAogCQkJCSAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiBfX3VzZWQpCiB7Ci0Jd3JpdGVfZXZlbnQoZXZlbnQsIGV2ZW50LT5oZWFkZXIuc2l6ZSk7CisJd3JpdGVfb3V0cHV0KGV2ZW50LCBldmVudC0+aGVhZGVyLnNpemUpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzgsMTQgKzE3MCwxNCBAQAogCQlzaXplID0gbWQtPm1hc2sgKyAxIC0gKG9sZCAmIG1kLT5tYXNrKTsKIAkJb2xkICs9IHNpemU7CiAKLQkJd3JpdGVfZXZlbnQoYnVmLCBzaXplKTsKKwkJd3JpdGVfb3V0cHV0KGJ1Ziwgc2l6ZSk7CiAJfQogCiAJYnVmID0gJmRhdGFbb2xkICYgbWQtPm1hc2tdOwogCXNpemUgPSBoZWFkIC0gb2xkOwogCW9sZCArPSBzaXplOwogCi0Jd3JpdGVfZXZlbnQoYnVmLCBzaXplKTsKKwl3cml0ZV9vdXRwdXQoYnVmLCBzaXplKTsKIAogCW1kLT5wcmV2ID0gb2xkOwogCW1tYXBfd3JpdGVfdGFpbChtZCwgb2xkKTsKQEAgLTM5NSwxMCArMzg3LDIxIEBACiAJbnJfY3B1Kys7CiB9CiAKK3N0YXRpYyBpbnQgcHJvY2Vzc19idWlsZGlkcyh2b2lkKQoreworCXU2NCBzaXplID0gbHNlZWsob3V0cHV0LCAwLCBTRUVLX0NVUik7CisKKwlzZXNzaW9uLT5mZCA9IG91dHB1dDsKKwlyZXR1cm4gX19wZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sIHBvc3RfcHJvY2Vzc2luZ19vZmZzZXQsCisJCQkJCSAgICAgIHNpemUgLSBwb3N0X3Byb2Nlc3Npbmdfb2Zmc2V0LAorCQkJCQkgICAgICBzaXplLCAmYnVpbGRfaWRfX21hcmtfZHNvX2hpdF9vcHMpOworfQorCiBzdGF0aWMgdm9pZCBhdGV4aXRfaGVhZGVyKHZvaWQpCiB7CiAJc2Vzc2lvbi0+aGVhZGVyLmRhdGFfc2l6ZSArPSBieXRlc193cml0dGVuOwogCisJcHJvY2Vzc19idWlsZGlkcygpOwogCXBlcmZfaGVhZGVyX193cml0ZSgmc2Vzc2lvbi0+aGVhZGVyLCBvdXRwdXQsIHRydWUpOwogfQogCkBAIC01NTEsOCArNTU0LDIzIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCXBvc3RfcHJvY2Vzc2luZ19vZmZzZXQgPSBsc2VlayhvdXRwdXQsIDAsIFNFRUtfQ1VSKTsKKworCWVyciA9IGV2ZW50X19zeW50aGVzaXplX2tlcm5lbF9tbWFwKHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsCisJCQkJCSAgICBzZXNzaW9uLCAiX3RleHQiKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcl9lcnIoIkNvdWxkbid0IHJlY29yZCBrZXJuZWwgcmVmZXJlbmNlIHJlbG9jYXRpb24gc3ltYm9sLlxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gZXZlbnRfX3N5bnRoZXNpemVfbW9kdWxlcyhwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LCBzZXNzaW9uKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcl9lcnIoIkNvdWxkbid0IHJlY29yZCBrZXJuZWwgcmVmZXJlbmNlIHJlbG9jYXRpb24gc3ltYm9sLlxuIik7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKCFzeXN0ZW1fd2lkZSAmJiBwcm9maWxlX2NwdSA9PSAtMSkKLQkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZCwgcHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCwKKwkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHRhcmdldF9waWQsIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsCiAJCQkJCSBzZXNzaW9uKTsKIAllbHNlCiAJCWV2ZW50X19zeW50aGVzaXplX3RocmVhZHMocHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCwgc2Vzc2lvbik7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKaW5kZXggZGIxMGMwZS4uY2ZjNjU1ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwpAQCAtMzQsNiArMzQsOCBAQAogc3RhdGljIGNoYXIJCWNvbnN0ICppbnB1dF9uYW1lID0gInBlcmYuZGF0YSI7CiAKIHN0YXRpYyBpbnQJCWZvcmNlOworc3RhdGljIGJvb2wJCWhpZGVfdW5yZXNvbHZlZDsKK3N0YXRpYyBib29sCQlkb250X3VzZV9jYWxsY2hhaW5zOwogCiBzdGF0aWMgaW50CQlzaG93X3RocmVhZHM7CiBzdGF0aWMgc3RydWN0IHBlcmZfcmVhZF92YWx1ZXMJc2hvd190aHJlYWRzX3ZhbHVlczsKQEAgLTkxLDExICs5Myw4IEBACiAKIAlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOwogCi0JZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJXAgcGVyaW9kOiAlTGRcbiIsCi0JCWV2ZW50LT5oZWFkZXIubWlzYywKLQkJZGF0YS5waWQsIGRhdGEudGlkLAotCQkodm9pZCAqKShsb25nKWRhdGEuaXAsCi0JCShsb25nIGxvbmcpZGF0YS5wZXJpb2QpOworCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICUjTHggcGVyaW9kOiAlTGRcbiIsIGV2ZW50LT5oZWFkZXIubWlzYywKKwkJICAgIGRhdGEucGlkLCBkYXRhLnRpZCwgZGF0YS5pcCwgZGF0YS5wZXJpb2QpOwogCiAJaWYgKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSB7CiAJCXVuc2lnbmVkIGludCBpOwpAQCAtMTIxLDcgKzEyMCw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoYWwuZmlsdGVyZWQpCisJaWYgKGFsLmZpbHRlcmVkIHx8IChoaWRlX3VucmVzb2x2ZWQgJiYgYWwuc3ltID09IE5VTEwpKQogCQlyZXR1cm4gMDsKIAogCWlmIChwZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHNlc3Npb24sICZhbCwgZGF0YS5jYWxsY2hhaW4sIGRhdGEucGVyaW9kKSkgewpAQCAtMTU2LDE0ICsxNTUsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYW1wbGVfdHlwZV9jaGVjayhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQorc3RhdGljIGludCBwZXJmX3Nlc3Npb25fX3NldHVwX3NhbXBsZV90eXBlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCiB7Ci0JaWYgKCEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pKSB7CisJaWYgKCEoc2VsZi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pKSB7CiAJCWlmIChzb3J0X19oYXNfcGFyZW50KSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwgInNlbGVjdGVkIC0tc29ydCBwYXJlbnQsIGJ1dCBubyIKIAkJCQkJIiBjYWxsY2hhaW4gZGF0YS4gRGlkIHlvdSBjYWxsIgogCQkJCQkiIHBlcmYgcmVjb3JkIHdpdGhvdXQgLWc/XG4iKTsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwgInNlbGVjdGVkIC1nIGJ1dCBubyBjYWxsY2hhaW4gZGF0YS4iCkBAIC0xNzEsMTIgKzE3MCwxMyBAQAogCQkJCQkiIC1nP1xuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KLQl9IGVsc2UgaWYgKGNhbGxjaGFpbl9wYXJhbS5tb2RlICE9IENIQUlOX05PTkUgJiYgIXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pIHsKKwl9IGVsc2UgaWYgKCFkb250X3VzZV9jYWxsY2hhaW5zICYmIGNhbGxjaGFpbl9wYXJhbS5tb2RlICE9IENIQUlOX05PTkUgJiYKKwkJICAgIXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pIHsKIAkJCXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gPSB0cnVlOwogCQkJaWYgKHJlZ2lzdGVyX2NhbGxjaGFpbl9wYXJhbSgmY2FsbGNoYWluX3BhcmFtKSA8IDApIHsKIAkJCQlmcHJpbnRmKHN0ZGVyciwgIkNhbid0IHJlZ2lzdGVyIGNhbGxjaGFpbiIKIAkJCQkJCSIgcGFyYW1zXG4iKTsKLQkJCQlyZXR1cm4gLTE7CisJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJfQogCkBAIC0xODQsMjAgKzE4NCwxOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfb3BzIGV2ZW50X29wcyA9IHsKLQkucHJvY2Vzc19zYW1wbGVfZXZlbnQJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKLQkucHJvY2Vzc19tbWFwX2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfbW1hcCwKLQkucHJvY2Vzc19jb21tX2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKLQkucHJvY2Vzc19leGl0X2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKLQkucHJvY2Vzc19mb3JrX2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKLQkucHJvY2Vzc19sb3N0X2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfbG9zdCwKLQkucHJvY2Vzc19yZWFkX2V2ZW50CT0gcHJvY2Vzc19yZWFkX2V2ZW50LAotCS5zYW1wbGVfdHlwZV9jaGVjawk9IHNhbXBsZV90eXBlX2NoZWNrLAorCS5zYW1wbGUJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkubW1hcAk9IGV2ZW50X19wcm9jZXNzX21tYXAsCisJLmNvbW0JPSBldmVudF9fcHJvY2Vzc19jb21tLAorCS5leGl0CT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKKwkuZm9yawk9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCisJLmxvc3QJPSBldmVudF9fcHJvY2Vzc19sb3N0LAorCS5yZWFkCT0gcHJvY2Vzc19yZWFkX2V2ZW50LAogfTsKIAotCiBzdGF0aWMgaW50IF9fY21kX3JlcG9ydCh2b2lkKQogewotCWludCByZXQ7CisJaW50IHJldCA9IC1FSU5WQUw7CiAJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbjsKIAogCXNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgZm9yY2UpOwpAQCAtMjA3LDYgKzIwNSwxMCBAQAogCWlmIChzaG93X3RocmVhZHMpCiAJCXBlcmZfcmVhZF92YWx1ZXNfaW5pdCgmc2hvd190aHJlYWRzX3ZhbHVlcyk7CiAKKwlyZXQgPSBwZXJmX3Nlc3Npb25fX3NldHVwX3NhbXBsZV90eXBlKHNlc3Npb24pOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2RlbGV0ZTsKKwogCXJldCA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgJmV2ZW50X29wcyk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZGVsZXRlOwpAQCAtMjQzLDExICsyNDUsMTkgQEAKIAogc3RhdGljIGludAogcGFyc2VfY2FsbGNoYWluX29wdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLCBjb25zdCBjaGFyICphcmcsCi0JCSAgICBpbnQgdW5zZXQgX191c2VkKQorCQkgICAgaW50IHVuc2V0KQogewogCWNoYXIgKnRvazsKIAljaGFyICplbmRwdHI7CiAKKwkvKgorCSAqIC0tbm8tY2FsbC1ncmFwaAorCSAqLworCWlmICh1bnNldCkgeworCQlkb250X3VzZV9jYWxsY2hhaW5zID0gdHJ1ZTsKKwkJcmV0dXJuIDA7CisJfQorCiAJc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbiA9IHRydWU7CiAKIAlpZiAoIWFyZykKQEAgLTI2OSw3ICsyNzksNyBAQAogCiAJZWxzZSBpZiAoIXN0cm5jbXAodG9rLCAibm9uZSIsIHN0cmxlbihhcmcpKSkgewogCQljYWxsY2hhaW5fcGFyYW0ubW9kZSA9IENIQUlOX05PTkU7Ci0JCXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gPSB0cnVlOworCQlzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluID0gZmFsc2U7CiAKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMzE5LDcgKzMyOSw3IEBACiAJCSAgICJwcmV0dHkgcHJpbnRpbmcgc3R5bGUga2V5OiBub3JtYWwgcmF3IiksCiAJT1BUX1NUUklORygncycsICJzb3J0IiwgJnNvcnRfb3JkZXIsICJrZXlbLGtleTIuLi5dIiwKIAkJICAgInNvcnQgYnkga2V5KHMpOiBwaWQsIGNvbW0sIGRzbywgc3ltYm9sLCBwYXJlbnQiKSwKLQlPUFRfQk9PTEVBTignUCcsICJmdWxsLXBhdGhzIiwgJmV2ZW50X29wcy5mdWxsX3BhdGhzLAorCU9QVF9CT09MRUFOKCdQJywgImZ1bGwtcGF0aHMiLCAmc3ltYm9sX2NvbmYuZnVsbF9wYXRocywKIAkJICAgICJEb24ndCBzaG9ydGVuIHRoZSBwYXRobmFtZXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY3dkIiksCiAJT1BUX1NUUklORygncCcsICJwYXJlbnQiLCAmcGFyZW50X3BhdHRlcm4sICJyZWdleCIsCiAJCSAgICJyZWdleCBmaWx0ZXIgdG8gaWRlbnRpZnkgcGFyZW50LCBzZWU6ICctLXNvcnQgcGFyZW50JyIpLApAQCAtMzQwLDYgKzM1MCw4IEBACiAJT1BUX1NUUklORygndCcsICJmaWVsZC1zZXBhcmF0b3IiLCAmc3ltYm9sX2NvbmYuZmllbGRfc2VwLCAic2VwYXJhdG9yIiwKIAkJICAgInNlcGFyYXRvciBmb3IgY29sdW1ucywgbm8gc3BhY2VzIHdpbGwgYmUgYWRkZWQgYmV0d2VlbiAiCiAJCSAgICJjb2x1bW5zICcuJyBpcyByZXNlcnZlZC4iKSwKKwlPUFRfQk9PTEVBTignVScsICJoaWRlLXVucmVzb2x2ZWQiLCAmaGlkZV91bnJlc29sdmVkLAorCQkgICAgIk9ubHkgZGlzcGxheSBlbnRyaWVzIHJlc29sdmVkIHRvIGEgc3ltYm9sIiksCiAJT1BUX0VORCgpCiB9OwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCmluZGV4IDgwMjA5ZGYuLjRmNWEwM2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCkBAIC0xNjIxLDExICsxNjIxLDggQEAKIAogCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKLQkJZXZlbnQtPmhlYWRlci5taXNjLAotCQlkYXRhLnBpZCwgZGF0YS50aWQsCi0JCSh2b2lkICopKGxvbmcpZGF0YS5pcCwKLQkJKGxvbmcgbG9uZylkYXRhLnBlcmlvZCk7CisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSNMeCBwZXJpb2Q6ICVMZFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAorCQkgICAgZGF0YS5waWQsIGRhdGEudGlkLCBkYXRhLmlwLCBkYXRhLnBlcmlvZCk7CiAKIAl0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgZGF0YS5waWQpOwogCWlmICh0aHJlYWQgPT0gTlVMTCkgewpAQCAtMTY1MywzMyArMTY1MCwyMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkKQotewotCWlmICghKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgewotCQlmcHJpbnRmKHN0ZGVyciwKLQkJCSJObyB0cmFjZSBzYW1wbGUgdG8gcmVhZC4gRGlkIHlvdSBjYWxsIHBlcmYgcmVjb3JkICIKLQkJCSJ3aXRob3V0IC1SPyIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewotCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5wcm9jZXNzX2xvc3RfZXZlbnQJPSBwcm9jZXNzX2xvc3RfZXZlbnQsCi0JLnNhbXBsZV90eXBlX2NoZWNrCT0gc2FtcGxlX3R5cGVfY2hlY2ssCisJLnNhbXBsZQk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAorCS5jb21tCT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKKwkubG9zdAk9IHByb2Nlc3NfbG9zdF9ldmVudCwKIH07CiAKIHN0YXRpYyBpbnQgcmVhZF9ldmVudHModm9pZCkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAtRUlOVkFMOwogCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgMCk7CiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQllcnIgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOworCWlmIChwZXJmX3Nlc3Npb25fX2hhc190cmFjZXMoc2Vzc2lvbiwgInJlY29yZCAtUiIpKQorCQllcnIgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOworCiAJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCmluZGV4IGM3MGQ3MjAuLmU4Yzg1ZDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCiAjaW5jbHVkZSAidXRpbC9ldmVudC5oIgogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgogCiAjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNzksNiArODAsOCBAQAogCiBzdGF0aWMgaW50CQkJZXZlbnRfc2NhbGVkW01BWF9DT1VOVEVSU107CiAKK3N0YXRpYyB2b2xhdGlsZSBpbnQgZG9uZSA9IDA7CisKIHN0cnVjdCBzdGF0cwogewogCWRvdWJsZSBuLCBtZWFuLCBNMjsKQEAgLTI0Nyw2MSArMjUwLDY0IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIHQwLCB0MTsKIAlpbnQgc3RhdHVzID0gMDsKIAlpbnQgY291bnRlcjsKLQlpbnQgcGlkOworCWludCBwaWQgPSB0YXJnZXRfcGlkOwogCWludCBjaGlsZF9yZWFkeV9waXBlWzJdLCBnb19waXBlWzJdOworCWNvbnN0IGJvb2wgZm9ya3MgPSAodGFyZ2V0X3BpZCA9PSAtMSAmJiBhcmdjID4gMCk7CiAJY2hhciBidWY7CiAKIAlpZiAoIXN5c3RlbV93aWRlKQogCQlucl9jcHVzID0gMTsKIAotCWlmIChwaXBlKGNoaWxkX3JlYWR5X3BpcGUpIDwgMCB8fCBwaXBlKGdvX3BpcGUpIDwgMCkgeworCWlmIChmb3JrcyAmJiAocGlwZShjaGlsZF9yZWFkeV9waXBlKSA8IDAgfHwgcGlwZShnb19waXBlKSA8IDApKSB7CiAJCXBlcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBwaXBlcyIpOwogCQlleGl0KDEpOwogCX0KIAotCWlmICgocGlkID0gZm9yaygpKSA8IDApCi0JCXBlcnJvcigiZmFpbGVkIHRvIGZvcmsiKTsKKwlpZiAoZm9ya3MpIHsKKwkJaWYgKChwaWQgPSBmb3JrKCkpIDwgMCkKKwkJCXBlcnJvcigiZmFpbGVkIHRvIGZvcmsiKTsKIAotCWlmICghcGlkKSB7Ci0JCWNsb3NlKGNoaWxkX3JlYWR5X3BpcGVbMF0pOwotCQljbG9zZShnb19waXBlWzFdKTsKLQkJZmNudGwoZ29fcGlwZVswXSwgRl9TRVRGRCwgRkRfQ0xPRVhFQyk7CisJCWlmICghcGlkKSB7CisJCQljbG9zZShjaGlsZF9yZWFkeV9waXBlWzBdKTsKKwkJCWNsb3NlKGdvX3BpcGVbMV0pOworCQkJZmNudGwoZ29fcGlwZVswXSwgRl9TRVRGRCwgRkRfQ0xPRVhFQyk7CisKKwkJCS8qCisJCQkgKiBEbyBhIGR1bW15IGV4ZWN2cCB0byBnZXQgdGhlIFBMVCBlbnRyeSByZXNvbHZlZCwKKwkJCSAqIHNvIHdlIGF2b2lkIHRoZSByZXNvbHZlciBvdmVyaGVhZCBvbiB0aGUgcmVhbAorCQkJICogZXhlY3ZwIGNhbGwuCisJCQkgKi8KKwkJCWV4ZWN2cCgiIiwgKGNoYXIgKiopYXJndik7CisKKwkJCS8qCisJCQkgKiBUZWxsIHRoZSBwYXJlbnQgd2UncmUgcmVhZHkgdG8gZ28KKwkJCSAqLworCQkJY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVsxXSk7CisKKwkJCS8qCisJCQkgKiBXYWl0IHVudGlsIHRoZSBwYXJlbnQgdGVsbHMgdXMgdG8gZ28uCisJCQkgKi8KKwkJCWlmIChyZWFkKGdvX3BpcGVbMF0sICZidWYsIDEpID09IC0xKQorCQkJCXBlcnJvcigidW5hYmxlIHRvIHJlYWQgcGlwZSIpOworCisJCQlleGVjdnAoYXJndlswXSwgKGNoYXIgKiopYXJndik7CisKKwkJCXBlcnJvcihhcmd2WzBdKTsKKwkJCWV4aXQoLTEpOworCQl9CisKKwkJY2hpbGRfcGlkID0gcGlkOwogCiAJCS8qCi0JCSAqIERvIGEgZHVtbXkgZXhlY3ZwIHRvIGdldCB0aGUgUExUIGVudHJ5IHJlc29sdmVkLAotCQkgKiBzbyB3ZSBhdm9pZCB0aGUgcmVzb2x2ZXIgb3ZlcmhlYWQgb24gdGhlIHJlYWwKLQkJICogZXhlY3ZwIGNhbGwuCi0JCSAqLwotCQlleGVjdnAoIiIsIChjaGFyICoqKWFyZ3YpOwotCi0JCS8qCi0JCSAqIFRlbGwgdGhlIHBhcmVudCB3ZSdyZSByZWFkeSB0byBnbworCQkgKiBXYWl0IGZvciB0aGUgY2hpbGQgdG8gYmUgcmVhZHkgdG8gZXhlYy4KIAkJICovCiAJCWNsb3NlKGNoaWxkX3JlYWR5X3BpcGVbMV0pOwotCi0JCS8qCi0JCSAqIFdhaXQgdW50aWwgdGhlIHBhcmVudCB0ZWxscyB1cyB0byBnby4KLQkJICovCi0JCWlmIChyZWFkKGdvX3BpcGVbMF0sICZidWYsIDEpID09IC0xKQorCQljbG9zZShnb19waXBlWzBdKTsKKwkJaWYgKHJlYWQoY2hpbGRfcmVhZHlfcGlwZVswXSwgJmJ1ZiwgMSkgPT0gLTEpCiAJCQlwZXJyb3IoInVuYWJsZSB0byByZWFkIHBpcGUiKTsKLQotCQlleGVjdnAoYXJndlswXSwgKGNoYXIgKiopYXJndik7Ci0KLQkJcGVycm9yKGFyZ3ZbMF0pOwotCQlleGl0KC0xKTsKKwkJY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVswXSk7CiAJfQogCi0JY2hpbGRfcGlkID0gcGlkOwotCi0JLyoKLQkgKiBXYWl0IGZvciB0aGUgY2hpbGQgdG8gYmUgcmVhZHkgdG8gZXhlYy4KLQkgKi8KLQljbG9zZShjaGlsZF9yZWFkeV9waXBlWzFdKTsKLQljbG9zZShnb19waXBlWzBdKTsKLQlpZiAocmVhZChjaGlsZF9yZWFkeV9waXBlWzBdLCAmYnVmLCAxKSA9PSAtMSkKLQkJcGVycm9yKCJ1bmFibGUgdG8gcmVhZCBwaXBlIik7Ci0JY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVswXSk7Ci0KIAlmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgbnJfY291bnRlcnM7IGNvdW50ZXIrKykKIAkJY3JlYXRlX3BlcmZfc3RhdF9jb3VudGVyKGNvdW50ZXIsIHBpZCk7CiAKQEAgLTMxMCw4ICszMTYsMTIgQEAKIAkgKi8KIAl0MCA9IHJkY2xvY2soKTsKIAotCWNsb3NlKGdvX3BpcGVbMV0pOwotCXdhaXQoJnN0YXR1cyk7CisJaWYgKGZvcmtzKSB7CisJCWNsb3NlKGdvX3BpcGVbMV0pOworCQl3YWl0KCZzdGF0dXMpOworCX0gZWxzZSB7CisJCXdoaWxlKCFkb25lKTsKKwl9CiAKIAl0MSA9IHJkY2xvY2soKTsKIApAQCAtNDE3LDEwICs0MjcsMTMgQEAKIAlmZmx1c2goc3Rkb3V0KTsKIAogCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKLQlmcHJpbnRmKHN0ZGVyciwgIiBQZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRzIGZvciBcJyVzIiwgYXJndlswXSk7Ci0KLQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQotCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyIsIGFyZ3ZbaV0pOworCWZwcmludGYoc3RkZXJyLCAiIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICIpOworCWlmKHRhcmdldF9waWQgPT0gLTEpIHsKKwkJZnByaW50ZihzdGRlcnIsICJcJyVzIiwgYXJndlswXSk7CisJCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisJCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyIsIGFyZ3ZbaV0pOworCX1lbHNlCisJCWZwcmludGYoc3RkZXJyLCAidGFzayBwaWQgXCclZCIsIHRhcmdldF9waWQpOwogCiAJZnByaW50ZihzdGRlcnIsICJcJyIpOwogCWlmIChydW5fY291bnQgPiAxKQpAQCAtNDQ1LDYgKzQ1OCw5IEBACiAKIHN0YXRpYyB2b2lkIHNraXBfc2lnbmFsKGludCBzaWdubykKIHsKKwlpZih0YXJnZXRfcGlkICE9IC0xKQorCQlkb25lID0gMTsKKwogCXNpZ25yID0gc2lnbm87CiB9CiAKQEAgLTQ2MSw3ICs0NzcsNyBAQAogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN0YXRfdXNhZ2VbXSA9IHsKLQkicGVyZiBzdGF0IFs8b3B0aW9ucz5dIDxjb21tYW5kPiIsCisJInBlcmYgc3RhdCBbPG9wdGlvbnM+XSBbPGNvbW1hbmQ+XSIsCiAJTlVMTAogfTsKIApAQCAtNDkyLDcgKzUwOCw3IEBACiAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBzdGF0X3VzYWdlLAogCQlQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKLQlpZiAoIWFyZ2MpCisJaWYgKCFhcmdjICYmIHRhcmdldF9waWQgPT0gLTEpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhzdGF0X3VzYWdlLCBvcHRpb25zKTsKIAlpZiAocnVuX2NvdW50IDw9IDApCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhzdGF0X3VzYWdlLCBvcHRpb25zKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwppbmRleCAzZjhiYmNmLi4wZDRkOGZmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCkBAIC0xMDI5LDMzICsxMDI5LDI0IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCi17Ci0JaWYgKCEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiTm8gdHJhY2Ugc2FtcGxlcyBmb3VuZCBpbiB0aGUgZmlsZS5cbiIKLQkJCQkiSGF2ZSB5b3UgdXNlZCAncGVyZiB0aW1lY2hhcnQgcmVjb3JkJyB0byByZWNvcmQgaXQ/XG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfb3BzIGV2ZW50X29wcyA9IHsKLQkucHJvY2Vzc19jb21tX2V2ZW50CT0gcHJvY2Vzc19jb21tX2V2ZW50LAotCS5wcm9jZXNzX2ZvcmtfZXZlbnQJPSBwcm9jZXNzX2ZvcmtfZXZlbnQsCi0JLnByb2Nlc3NfZXhpdF9ldmVudAk9IHByb2Nlc3NfZXhpdF9ldmVudCwKLQkucHJvY2Vzc19zYW1wbGVfZXZlbnQJPSBxdWV1ZV9zYW1wbGVfZXZlbnQsCi0JLnNhbXBsZV90eXBlX2NoZWNrCT0gc2FtcGxlX3R5cGVfY2hlY2ssCisJLmNvbW0JPSBwcm9jZXNzX2NvbW1fZXZlbnQsCisJLmZvcmsJPSBwcm9jZXNzX2ZvcmtfZXZlbnQsCisJLmV4aXQJPSBwcm9jZXNzX2V4aXRfZXZlbnQsCisJLnNhbXBsZQk9IHF1ZXVlX3NhbXBsZV9ldmVudCwKIH07CiAKIHN0YXRpYyBpbnQgX19jbWRfdGltZWNoYXJ0KHZvaWQpCiB7CiAJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCAwKTsKLQlpbnQgcmV0OworCWludCByZXQgPSAtRUlOVkFMOwogCiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAoIXBlcmZfc2Vzc2lvbl9faGFzX3RyYWNlcyhzZXNzaW9uLCAidGltZWNoYXJ0IHJlY29yZCIpKQorCQlnb3RvIG91dF9kZWxldGU7CisKIAlyZXQgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2RlbGV0ZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwppbmRleCBkZGM1ODRiLi4zMWYyZTU5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCkBAIC05NCw2ICs5NCw3IEBACiAKIHN0YXRpYyBjaGFyCQkJKnN5bV9maWx0ZXIJCQk9ICAgTlVMTDsKIHN0cnVjdCBzeW1fZW50cnkJCSpzeW1fZmlsdGVyX2VudHJ5CQk9ICAgTlVMTDsKK3N0cnVjdCBzeW1fZW50cnkJCSpzeW1fZmlsdGVyX2VudHJ5X3NjaGVkCQk9ICAgTlVMTDsKIHN0YXRpYyBpbnQJCQlzeW1fcGNudF9maWx0ZXIJCQk9ICAgICAgNTsKIHN0YXRpYyBpbnQJCQlzeW1fY291bnRlcgkJCT0gICAgICAwOwogc3RhdGljIGludAkJCWRpc3BsYXlfd2VpZ2h0ZWQJCT0gICAgIC0xOwpAQCAtMjAxLDEwICsyMDIsOSBAQAogCWxlbiA9IHN5bS0+ZW5kIC0gc3ltLT5zdGFydDsKIAogCXNwcmludGYoY29tbWFuZCwKLQkJIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPTB4JTAxNkx4ICIKLQkJCSAiLS1zdG9wLWFkZHJlc3M9MHglMDE2THggLWRTICVzIiwKLQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLAotCQltYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpLCBwYXRoKTsKKwkJIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPSUjMCpMeCAtLXN0b3AtYWRkcmVzcz0lIzAqTHggLWRTICVzIiwKKwkJQklUU19QRVJfTE9ORyAvIDQsIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5zdGFydCksCisJCUJJVFNfUEVSX0xPTkcgLyA0LCBtYXBfX3JpcF8yb2JqZHVtcChtYXAsIHN5bS0+ZW5kKSwgcGF0aCk7CiAKIAlmaWxlID0gcG9wZW4oY29tbWFuZCwgInIiKTsKIAlpZiAoIWZpbGUpCkBAIC0yMTUsNyArMjE1LDcgQEAKIAl3aGlsZSAoIWZlb2YoZmlsZSkpIHsKIAkJc3RydWN0IHNvdXJjZV9saW5lICpzcmM7CiAJCXNpemVfdCBkdW1teSA9IDA7Ci0JCWNoYXIgKmM7CisJCWNoYXIgKmMsICpzZXA7CiAKIAkJc3JjID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc291cmNlX2xpbmUpKTsKIAkJYXNzZXJ0KHNyYyAhPSBOVUxMKTsKQEAgLTIzNCwxNCArMjM0LDExIEBACiAJCSpzb3VyY2UtPmxpbmVzX3RhaWwgPSBzcmM7CiAJCXNvdXJjZS0+bGluZXNfdGFpbCA9ICZzcmMtPm5leHQ7CiAKLQkJaWYgKHN0cmxlbihzcmMtPmxpbmUpPjggJiYgc3JjLT5saW5lWzhdID09ICc6JykgewotCQkJc3JjLT5laXAgPSBzdHJ0b3VsbChzcmMtPmxpbmUsIE5VTEwsIDE2KTsKLQkJCXNyYy0+ZWlwID0gbWFwLT51bm1hcF9pcChtYXAsIHNyYy0+ZWlwKTsKLQkJfQotCQlpZiAoc3RybGVuKHNyYy0+bGluZSk+OCAmJiBzcmMtPmxpbmVbMTZdID09ICc6JykgewotCQkJc3JjLT5laXAgPSBzdHJ0b3VsbChzcmMtPmxpbmUsIE5VTEwsIDE2KTsKLQkJCXNyYy0+ZWlwID0gbWFwLT51bm1hcF9pcChtYXAsIHNyYy0+ZWlwKTsKLQkJfQorCQlzcmMtPmVpcCA9IHN0cnRvdWxsKHNyYy0+bGluZSwgJnNlcCwgMTYpOworCQlpZiAoKnNlcCA9PSAnOicpCisJCQlzcmMtPmVpcCA9IG1hcF9fb2JqZHVtcF8yaXAobWFwLCBzcmMtPmVpcCk7CisJCWVsc2UgLyogdGhpcyBsaW5lIGhhcyBubyBpcCBpbmZvIChlLmcuIHNvdXJjZSBsaW5lKSAqLworCQkJc3JjLT5laXAgPSAwOwogCX0KIAlwY2xvc2UoZmlsZSk7CiBvdXRfYXNzaWduOgpAQCAtMjc2LDYgKzI3Myw5IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWZvciAobGluZSA9IHN5bWUtPnNyYy0+bGluZXM7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0KSB7CisJCS8qIHNraXAgbGluZXMgd2l0aG91dCBJUCBpbmZvICovCisJCWlmIChsaW5lLT5laXAgPT0gMCkKKwkJCWNvbnRpbnVlOwogCQlpZiAobGluZS0+ZWlwID09IGlwKSB7CiAJCQlsaW5lLT5jb3VudFtjb3VudGVyXSsrOwogCQkJYnJlYWs7CkBAIC0yODcsMTcgKzI4NywyMCBAQAogCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzeW1lLT5zcmMtPmxvY2spOwogfQogCisjZGVmaW5lIFBBVFRFUk5fTEVOCQkoQklUU19QRVJfTE9ORyAvIDQgKyAyKQorCiBzdGF0aWMgdm9pZCBsb29rdXBfc3ltX3NvdXJjZShzdHJ1Y3Qgc3ltX2VudHJ5ICpzeW1lKQogewogCXN0cnVjdCBzeW1ib2wgKnN5bWJvbCA9IHN5bV9lbnRyeV9fc3ltYm9sKHN5bWUpOwogCXN0cnVjdCBzb3VyY2VfbGluZSAqbGluZTsKLQljaGFyIHBhdHRlcm5bUEFUSF9NQVhdOworCWNoYXIgcGF0dGVybltQQVRURVJOX0xFTiArIDFdOwogCi0Jc3ByaW50ZihwYXR0ZXJuLCAiPCVzPjoiLCBzeW1ib2wtPm5hbWUpOworCXNwcmludGYocGF0dGVybiwgIiUwKkx4IDwiLCBCSVRTX1BFUl9MT05HIC8gNCwKKwkJbWFwX19yaXBfMm9iamR1bXAoc3ltZS0+bWFwLCBzeW1ib2wtPnN0YXJ0KSk7CiAKIAlwdGhyZWFkX211dGV4X2xvY2soJnN5bWUtPnNyYy0+bG9jayk7CiAJZm9yIChsaW5lID0gc3ltZS0+c3JjLT5saW5lczsgbGluZTsgbGluZSA9IGxpbmUtPm5leHQpIHsKLQkJaWYgKHN0cnN0cihsaW5lLT5saW5lLCBwYXR0ZXJuKSkgeworCQlpZiAobWVtY21wKGxpbmUtPmxpbmUsIHBhdHRlcm4sIFBBVFRFUk5fTEVOKSA9PSAwKSB7CiAJCQlzeW1lLT5zcmMtPnNvdXJjZSA9IGxpbmU7CiAJCQlicmVhazsKIAkJfQpAQCAtNjY3LDcgKzY3MCw3IEBACiAJfQogCiAJaWYgKCFmb3VuZCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIlNvcnJ5LCAlcyBpcyBub3QgYWN0aXZlLlxuIiwgc3ltX2ZpbHRlcik7CisJCWZwcmludGYoc3RkZXJyLCAiU29ycnksICVzIGlzIG5vdCBhY3RpdmUuXG4iLCBidWYpOwogCQlzbGVlcCgxKTsKIAkJcmV0dXJuOwogCX0gZWxzZQpAQCAtNjk1LDE3ICs2OTgsMTUgQEAKIAogCWZwcmludGYoc3Rkb3V0LCAiXHRbZl0gICAgIHByb2ZpbGUgZGlzcGxheSBmaWx0ZXIgKGNvdW50KS4gICAgXHQoJWQpXG4iLCBjb3VudF9maWx0ZXIpOwogCi0JaWYgKHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSkgewotCQlmcHJpbnRmKHN0ZG91dCwgIlx0W0ZdICAgICBhbm5vdGF0ZSBkaXNwbGF5IGZpbHRlciAocGVyY2VudCkuIFx0KCVkJSUpXG4iLCBzeW1fcGNudF9maWx0ZXIpOwotCQlmcHJpbnRmKHN0ZG91dCwgIlx0W3NdICAgICBhbm5vdGF0ZSBzeW1ib2wuICAgICAgICAgICAgICAgICAgIFx0KCVzKVxuIiwgbmFtZT86ICJOVUxMIik7Ci0JCWZwcmludGYoc3Rkb3V0LCAiXHRbU10gICAgIHN0b3AgYW5ub3RhdGlvbi5cbiIpOwotCX0KKwlmcHJpbnRmKHN0ZG91dCwgIlx0W0ZdICAgICBhbm5vdGF0ZSBkaXNwbGF5IGZpbHRlciAocGVyY2VudCkuIFx0KCVkJSUpXG4iLCBzeW1fcGNudF9maWx0ZXIpOworCWZwcmludGYoc3Rkb3V0LCAiXHRbc10gICAgIGFubm90YXRlIHN5bWJvbC4gICAgICAgICAgICAgICAgICAgXHQoJXMpXG4iLCBuYW1lPzogIk5VTEwiKTsKKwlmcHJpbnRmKHN0ZG91dCwgIlx0W1NdICAgICBzdG9wIGFubm90YXRpb24uXG4iKTsKIAogCWlmIChucl9jb3VudGVycyA+IDEpCiAJCWZwcmludGYoc3Rkb3V0LCAiXHRbd10gICAgIHRvZ2dsZSBkaXNwbGF5IHdlaWdodGVkL2NvdW50W0Vdci4gXHQoJWQpXG4iLCBkaXNwbGF5X3dlaWdodGVkID8gMSA6IDApOwogCiAJZnByaW50ZihzdGRvdXQsCi0JCSJcdFtLXSAgICAgaGlkZSBrZXJuZWxfc3ltYm9scyBzeW1ib2xzLiAgICAgICAgICAgICBcdCglcylcbiIsCisJCSJcdFtLXSAgICAgaGlkZSBrZXJuZWxfc3ltYm9scyBzeW1ib2xzLiAgICAgXHQoJXMpXG4iLAogCQloaWRlX2tlcm5lbF9zeW1ib2xzID8gInllcyIgOiAibm8iKTsKIAlmcHJpbnRmKHN0ZG91dCwKIAkJIlx0W1VdICAgICBoaWRlIHVzZXIgc3ltYm9scy4gICAgICAgICAgICAgICBcdCglcylcbiIsCkBAIC03MjUsMTQgKzcyNiwxMyBAQAogCQljYXNlICdRJzoKIAkJY2FzZSAnSyc6CiAJCWNhc2UgJ1UnOgorCQljYXNlICdGJzoKKwkJY2FzZSAncyc6CisJCWNhc2UgJ1MnOgogCQkJcmV0dXJuIDE7CiAJCWNhc2UgJ0UnOgogCQljYXNlICd3JzoKIAkJCXJldHVybiBucl9jb3VudGVycyA+IDEgPyAxIDogMDsKLQkJY2FzZSAnRic6Ci0JCWNhc2UgJ3MnOgotCQljYXNlICdTJzoKLQkJCXJldHVybiBzeW1ib2xfY29uZi52bWxpbnV4X25hbWUgPyAxIDogMDsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCX0KQEAgLTkxMCw4ICs5MTAsMTIgQEAKIAlzeW1lID0gc3ltYm9sX19wcml2KHN5bSk7CiAJc3ltZS0+bWFwID0gbWFwOwogCXN5bWUtPnNyYyA9IE5VTEw7Ci0JaWYgKCFzeW1fZmlsdGVyX2VudHJ5ICYmIHN5bV9maWx0ZXIgJiYgIXN0cmNtcChuYW1lLCBzeW1fZmlsdGVyKSkKLQkJc3ltX2ZpbHRlcl9lbnRyeSA9IHN5bWU7CisKKwlpZiAoIXN5bV9maWx0ZXJfZW50cnkgJiYgc3ltX2ZpbHRlciAmJiAhc3RyY21wKG5hbWUsIHN5bV9maWx0ZXIpKSB7CisJCS8qIHNjaGVkdWxlIGluaXRpYWwgc3ltX2ZpbHRlcl9lbnRyeSBzZXR1cCAqLworCQlzeW1fZmlsdGVyX2VudHJ5X3NjaGVkID0gc3ltZTsKKwkJc3ltX2ZpbHRlciA9IE5VTEw7CisJfQogCiAJZm9yIChpID0gMDsgc2tpcF9zeW1ib2xzW2ldOyBpKyspIHsKIAkJaWYgKCFzdHJjbXAoc2tpcF9zeW1ib2xzW2ldLCBuYW1lKSkgewpAQCAtOTM0LDggKzkzOCwxMSBAQAogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCXU4IG9yaWdpbiA9IHNlbGYtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CiAKKwkrK3NhbXBsZXM7CisKIAlzd2l0Y2ggKG9yaWdpbikgewogCWNhc2UgUEVSRl9SRUNPUkRfTUlTQ19VU0VSOgorCQkrK3VzZXJzcGFjZV9zYW1wbGVzOwogCQlpZiAoaGlkZV91c2VyX3N5bWJvbHMpCiAJCQlyZXR1cm47CiAJCWJyZWFrOwpAQCAtOTQ4LDkgKzk1NSwzOCBAQAogCX0KIAogCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoc2VsZiwgc2Vzc2lvbiwgJmFsLCBzeW1ib2xfZmlsdGVyKSA8IDAgfHwKLQkgICAgYWwuc3ltID09IE5VTEwgfHwgYWwuZmlsdGVyZWQpCisJICAgIGFsLmZpbHRlcmVkKQogCQlyZXR1cm47CiAKKwlpZiAoYWwuc3ltID09IE5VTEwpIHsKKwkJLyoKKwkJICogQXMgd2UgZG8gbGF6eSBsb2FkaW5nIG9mIHN5bXRhYnMgd2Ugb25seSB3aWxsIGtub3cgaWYgdGhlCisJCSAqIHNwZWNpZmllZCB2bWxpbnV4IGZpbGUgaXMgaW52YWxpZCB3aGVuIHdlIGFjdHVhbGx5IGhhdmUgYQorCQkgKiBoaXQgaW4ga2VybmVsIHNwYWNlIGFuZCB0aGVuIHRyeSB0byBsb2FkIGl0LiBTbyBpZiB3ZSBnZXQKKwkJICogaGVyZSBhbmQgdGhlcmUgYXJlIF9ub18gc3ltYm9scyBpbiB0aGUgRFNPIGJhY2tpbmcgdGhlCisJCSAqIGtlcm5lbCBtYXAsIGJhaWwgb3V0LgorCQkgKgorCQkgKiBXZSBtYXkgbmV2ZXIgZ2V0IGhlcmUsIGZvciBpbnN0YW5jZSwgaWYgd2UgdXNlIC1LLworCQkgKiAtLWhpZGUta2VybmVsLXN5bWJvbHMsIGV2ZW4gaWYgdGhlIHVzZXIgc3BlY2lmaWVzIGFuCisJCSAqIGludmFsaWQgLS12bWxpbnV4IDstKQorCQkgKi8KKwkJaWYgKGFsLm1hcCA9PSBzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0gJiYKKwkJICAgIFJCX0VNUFRZX1JPT1QoJmFsLm1hcC0+ZHNvLT5zeW1ib2xzW01BUF9fRlVOQ1RJT05dKSkgeworCQkJcHJfZXJyKCJUaGUgJXMgZmlsZSBjYW4ndCBiZSB1c2VkXG4iLAorCQkJICAgICAgIHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSk7CisJCQlleGl0KDEpOworCQl9CisKKwkJcmV0dXJuOworCX0KKworCS8qIGxldCdzIHNlZSwgd2hldGhlciB3ZSBuZWVkIHRvIGluc3RhbGwgaW5pdGlhbCBzeW1fZmlsdGVyX2VudHJ5ICovCisJaWYgKHN5bV9maWx0ZXJfZW50cnlfc2NoZWQpIHsKKwkJc3ltX2ZpbHRlcl9lbnRyeSA9IHN5bV9maWx0ZXJfZW50cnlfc2NoZWQ7CisJCXN5bV9maWx0ZXJfZW50cnlfc2NoZWQgPSBOVUxMOworCQlwYXJzZV9zb3VyY2Uoc3ltX2ZpbHRlcl9lbnRyeSk7CisJfQorCiAJc3ltZSA9IHN5bWJvbF9fcHJpdihhbC5zeW0pOwogCWlmICghc3ltZS0+c2tpcCkgewogCQlzeW1lLT5jb3VudFtjb3VudGVyXSsrOwpAQCAtOTYwLDkgKzk5Niw2IEBACiAJCWlmIChsaXN0X2VtcHR5KCZzeW1lLT5ub2RlKSB8fCAhc3ltZS0+bm9kZS5uZXh0KQogCQkJX19saXN0X2luc2VydF9hY3RpdmVfc3ltKHN5bWUpOwogCQlwdGhyZWFkX211dGV4X3VubG9jaygmYWN0aXZlX3N5bWJvbHNfbG9jayk7Ci0JCWlmIChvcmlnaW4gPT0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSKQotCQkJKyt1c2Vyc3BhY2Vfc2FtcGxlczsKLQkJKytzYW1wbGVzOwogCX0KIH0KIApAQCAtOTc1LDYgKzEwMDgsMTAgQEAKIAljYXNlIFBFUkZfUkVDT1JEX01NQVA6CiAJCWV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnQsIHNlc3Npb24pOwogCQlicmVhazsKKwljYXNlIFBFUkZfUkVDT1JEX0ZPUks6CisJY2FzZSBQRVJGX1JFQ09SRF9FWElUOgorCQlldmVudF9fcHJvY2Vzc190YXNrKGV2ZW50LCBzZXNzaW9uKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMTI0NCw3ICsxMjgxLDcgQEAKIAlPUFRfQk9PTEVBTignaScsICJpbmhlcml0IiwgJmluaGVyaXQsCiAJCSAgICAiY2hpbGQgdGFza3MgaW5oZXJpdCBjb3VudGVycyIpLAogCU9QVF9TVFJJTkcoJ3MnLCAic3ltLWFubm90YXRlIiwgJnN5bV9maWx0ZXIsICJzeW1ib2wgbmFtZSIsCi0JCSAgICAic3ltYm9sIHRvIGFubm90YXRlIC0gcmVxdWlyZXMgLWsgb3B0aW9uIiksCisJCSAgICAic3ltYm9sIHRvIGFubm90YXRlIiksCiAJT1BUX0JPT0xFQU4oJ3onLCAiemVybyIsICZ6ZXJvLAogCQkgICAgInplcm8gaGlzdG9yeSBhY3Jvc3MgdXBkYXRlcyIpLAogCU9QVF9JTlRFR0VSKCdGJywgImZyZXEiLCAmZnJlcSwKQEAgLTEyODAsMTYgKzEzMTcsMTQgQEAKIAogCXN5bWJvbF9jb25mLnByaXZfc2l6ZSA9IChzaXplb2Yoc3RydWN0IHN5bV9lbnRyeSkgKwogCQkJCSAobnJfY291bnRlcnMgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Ci0JaWYgKHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSA9PSBOVUxMKQotCQlzeW1ib2xfY29uZi50cnlfdm1saW51eF9wYXRoID0gdHJ1ZTsKKworCXN5bWJvbF9jb25mLnRyeV92bWxpbnV4X3BhdGggPSAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lID09IE5VTEwpOwogCWlmIChzeW1ib2xfX2luaXQoKSA8IDApCiAJCXJldHVybiAtMTsKIAogCWlmIChkZWxheV9zZWNzIDwgMSkKIAkJZGVsYXlfc2VjcyA9IDE7CiAKLQlwYXJzZV9zb3VyY2Uoc3ltX2ZpbHRlcl9lbnRyeSk7Ci0KIAkvKgogCSAqIFVzZXIgc3BlY2lmaWVkIGNvdW50IG92ZXJyaWRlcyBkZWZhdWx0IGZyZXF1ZW5jeS4KIAkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKaW5kZXggNTc0YTIxNS4uNWRiNjg3ZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKIAlwZXJmX3NldF9hcmd2X2V4ZWNfcGF0aChwZXJmX2V4ZWNfcGF0aCgpKTsKIAogCXNldHVwX3Blcmxfc2NyaXB0aW5nKCk7CisJc2V0dXBfcHl0aG9uX3NjcmlwdGluZygpOwogCiAJc2NyaXB0aW5nX29wcyA9ICZkZWZhdWx0X3NjcmlwdGluZ19vcHM7CiB9CkBAIC03NSwxMSArNzYsOCBAQAogCiAJZXZlbnRfX3BhcnNlX3NhbXBsZShldmVudCwgc2Vzc2lvbi0+c2FtcGxlX3R5cGUsICZkYXRhKTsKIAotCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICVwIHBlcmlvZDogJUxkXG4iLAotCQlldmVudC0+aGVhZGVyLm1pc2MsCi0JCWRhdGEucGlkLCBkYXRhLnRpZCwKLQkJKHZvaWQgKikobG9uZylkYXRhLmlwLAotCQkobG9uZyBsb25nKWRhdGEucGVyaW9kKTsKKwlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlI0x4IHBlcmlvZDogJUxkXG4iLCBldmVudC0+aGVhZGVyLm1pc2MsCisJCSAgICBkYXRhLnBpZCwgZGF0YS50aWQsIGRhdGEuaXAsIGRhdGEucGVyaW9kKTsKIAogCXRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBldmVudC0+aXAucGlkKTsKIAlpZiAodGhyZWFkID09IE5VTEwpIHsKQEAgLTEwMywyMiArMTAxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYW1wbGVfdHlwZV9jaGVjayhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQotewotCWlmICghKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgewotCQlmcHJpbnRmKHN0ZGVyciwKLQkJCSJObyB0cmFjZSBzYW1wbGUgdG8gcmVhZC4gRGlkIHlvdSBjYWxsIHBlcmYgcmVjb3JkICIKLQkJCSJ3aXRob3V0IC1SPyIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewotCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5zYW1wbGVfdHlwZV9jaGVjawk9IHNhbXBsZV90eXBlX2NoZWNrLAorCS5zYW1wbGUJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkuY29tbQk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCiB9OwogCiBzdGF0aWMgaW50IF9fY21kX3RyYWNlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCkBAIC0yMzUsOSArMjIwLDkgQEAKIAljb25zdCBjaGFyICpzY3JpcHQsICpleHQ7CiAJaW50IGxlbjsKIAotCWlmIChzdHJjbXAoc3RyLCAibGlzdCIpID09IDApIHsKKwlpZiAoc3RyY21wKHN0ciwgImxhbmciKSA9PSAwKSB7CiAJCWxpc3RfYXZhaWxhYmxlX2xhbmd1YWdlcygpOwotCQlyZXR1cm4gMDsKKwkJZXhpdCgwKTsKIAl9CiAKIAlzY3JpcHQgPSBzdHJjaHIoc3RyLCAnOicpOwpAQCAtNTMxLDYgKzUxNiw4IEBACiAJCSAgICAgcGFyc2Vfc2NyaXB0bmFtZSksCiAJT1BUX1NUUklORygnZycsICJnZW4tc2NyaXB0IiwgJmdlbmVyYXRlX3NjcmlwdF9sYW5nLCAibGFuZyIsCiAJCSAgICJnZW5lcmF0ZSBwZXJmLXRyYWNlLnh4IHNjcmlwdCBpbiBzcGVjaWZpZWQgbGFuZ3VhZ2UiKSwKKwlPUFRfU1RSSU5HKCdpJywgImlucHV0IiwgJmlucHV0X25hbWUsICJmaWxlIiwKKwkJICAgICJpbnB1dCBmaWxlIG5hbWUiKSwKIAogCU9QVF9FTkQoKQogfTsKQEAgLTU5Miw2ICs1NzksOSBAQAogCWlmIChzZXNzaW9uID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCisJaWYgKCFwZXJmX3Nlc3Npb25fX2hhc190cmFjZXMoc2Vzc2lvbiwgInJlY29yZCAtUiIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChnZW5lcmF0ZV9zY3JpcHRfbGFuZykgewogCQlzdHJ1Y3Qgc3RhdCBwZXJmX3N0YXQ7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi5oIGIvdG9vbHMvcGVyZi9idWlsdGluLmgKaW5kZXggMTgwMzViMS4uMTBmZTQ5ZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLmgKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAogZXh0ZXJuIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfYmVuY2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfYnVpbGRpZF9jYWNoZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9idWlsZGlkX2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfZGlmZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9oZWxwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKQEAgLTMwLDUgKzMxLDYgQEAKIGV4dGVybiBpbnQgY21kX3ZlcnNpb24oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfcHJvYmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfa21lbShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9sb2NrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQgYi90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQKaW5kZXggNzFkYzdjMy4uOWFmY2ZmMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9jb21tYW5kLWxpc3QudHh0CisrKyBiL3Rvb2xzL3BlcmYvY29tbWFuZC1saXN0LnR4dApAQCAtMyw3ICszLDkgQEAKICMgY29tbWFuZCBuYW1lCQkJY2F0ZWdvcnkgW2RlcHJlY2F0ZWRdIFtjb21tb25dCiAjCiBwZXJmLWFubm90YXRlCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KK3BlcmYtYXJjaGl2ZQkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLWJlbmNoCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KK3BlcmYtYnVpbGRpZC1jYWNoZQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtYnVpbGRpZC1saXN0CQltYWlucG9yY2VsYWluIGNvbW1vbgogcGVyZi1kaWZmCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtbGlzdAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2Rlc2lnbi50eHQgYi90b29scy9wZXJmL2Rlc2lnbi50eHQKaW5kZXggOGQwZGU1MS4uYmQwYmIxYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9kZXNpZ24udHh0CisrKyBiL3Rvb2xzL3BlcmYvZGVzaWduLnR4dApAQCAtMTAxLDEwICsxMDEsMTAgQEAKIAkgKi8KIAlQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMJCT0gMCwKIAlQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUwkJPSAxLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFUwk9IDIsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTCQk9IDIsCiAJUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVMJCT0gMywKIAlQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMJPSA0LAotCVBFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFUwk9IDUsCisJUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTCQk9IDUsCiAJUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTCQk9IDYsCiB9OwogCkBAIC0xMzEsOCArMTMxLDggQEAKICAqLwogZW51bSBzd19ldmVudF9pZHMgewogCVBFUkZfQ09VTlRfU1dfQ1BVX0NMT0NLCQk9IDAsCi0JUEVSRl9DT1VOVF9TV19UQVNLX0NMT0NLCQk9IDEsCi0JUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUwkJPSAyLAorCVBFUkZfQ09VTlRfU1dfVEFTS19DTE9DSwk9IDEsCisJUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUwk9IDIsCiAJUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTCT0gMywKIAlQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TCT0gNCwKIAlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTgk9IDUsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3BlcmYtYXJjaGl2ZS5zaCBiL3Rvb2xzL3BlcmYvcGVyZi1hcmNoaXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZmJlMmYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3BlcmYtYXJjaGl2ZS5zaApAQCAtMCwwICsxLDMyIEBACisjIS9iaW4vYmFzaAorIyBwZXJmIGFyY2hpdmUKKyMgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQHJlZGhhdC5jb20+CisKK1BFUkZfREFUQT1wZXJmLmRhdGEKK2lmIFsgJCMgLW5lIDAgXSA7IHRoZW4KKwlQRVJGX0RBVEE9JDEKK2ZpCisKK0RFQlVHRElSPX4vLmRlYnVnLworQlVJTERJRFM9JChta3RlbXAgL3RtcC9wZXJmLWFyY2hpdmUtYnVpbGRpZHMuWFhYWFhYKQorCitwZXJmIGJ1aWxkaWQtbGlzdCAtaSAkUEVSRl9EQVRBIC0td2l0aC1oaXRzID4gJEJVSUxESURTCitpZiBbICEgLXMgJEJVSUxESURTIF0gOyB0aGVuCisJZWNobyAicGVyZiBhcmNoaXZlOiBubyBidWlsZC1pZHMgZm91bmQiCisJcm0gLWYgJEJVSUxESURTCisJZXhpdCAxCitmaQorCitNQU5JRkVTVD0kKG1rdGVtcCAvdG1wL3BlcmYtYXJjaGl2ZS1tYW5pZmVzdC5YWFhYWFgpCisKK2N1dCAtZCAnICcgLWYgMSAkQlVJTERJRFMgfCBcCit3aGlsZSByZWFkIGJ1aWxkX2lkIDsgZG8KKwlsaW5rbmFtZT0kREVCVUdESVIuYnVpbGQtaWQvJHtidWlsZF9pZDowOjJ9LyR7YnVpbGRfaWQ6Mn0KKwlmaWxlbmFtZT0kKHJlYWRsaW5rIC1mICRsaW5rbmFtZSkKKwllY2hvICR7bGlua25hbWUjJERFQlVHRElSfSA+PiAkTUFOSUZFU1QKKwllY2hvICR7ZmlsZW5hbWUjJERFQlVHRElSfSA+PiAkTUFOSUZFU1QKK2RvbmUKKwordGFyIGNmaiAkUEVSRl9EQVRBLnRhci5iejIgLUMgJERFQlVHRElSIC1UICRNQU5JRkVTVAorcm0gLWYgJE1BTklGRVNUICRCVUlMRElEUworZXhpdCAwCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3BlcmYuYyBiL3Rvb2xzL3BlcmYvcGVyZi5jCmluZGV4IDg3M2U1NWYuLjU3Y2IxMDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvcGVyZi5jCisrKyBiL3Rvb2xzL3BlcmYvcGVyZi5jCkBAIC00OCw3ICs0OCw4IEBACiAJcmV0dXJuIGMudmFsOwogfQogCi1zdGF0aWMgdm9pZCBjb21taXRfcGFnZXJfY2hvaWNlKHZvaWQpIHsKK3N0YXRpYyB2b2lkIGNvbW1pdF9wYWdlcl9jaG9pY2Uodm9pZCkKK3sKIAlzd2l0Y2ggKHVzZV9wYWdlcikgewogCWNhc2UgMDoKIAkJc2V0ZW52KCJQRVJGX1BBR0VSIiwgImNhdCIsIDEpOwpAQCAtNzAsNyArNzEsNyBAQAogCQkgInRyYWNpbmcvZXZlbnRzIik7CiB9CiAKLXN0YXRpYyBpbnQgaGFuZGxlX29wdGlvbnMoY29uc3QgY2hhcioqKiBhcmd2LCBpbnQqIGFyZ2MsIGludCogZW52Y2hhbmdlZCkKK3N0YXRpYyBpbnQgaGFuZGxlX29wdGlvbnMoY29uc3QgY2hhciAqKiphcmd2LCBpbnQgKmFyZ2MsIGludCAqZW52Y2hhbmdlZCkKIHsKIAlpbnQgaGFuZGxlZCA9IDA7CiAKQEAgLTEwOSw3ICsxMTAsNyBAQAogCQkJCSplbnZjaGFuZ2VkID0gMTsKIAkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tcGVyZi1kaXIiKSkgewogCQkJaWYgKCphcmdjIDwgMikgewotCQkJCWZwcmludGYoc3RkZXJyLCAiTm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLXBlcmYtZGlyLlxuIiApOworCQkJCWZwcmludGYoc3RkZXJyLCAiTm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLXBlcmYtZGlyLlxuIik7CiAJCQkJdXNhZ2UocGVyZl91c2FnZV9zdHJpbmcpOwogCQkJfQogCQkJc2V0ZW52KFBFUkZfRElSX0VOVklST05NRU5ULCAoKmFyZ3YpWzFdLCAxKTsKQEAgLTEyNCw3ICsxMjUsNyBAQAogCQkJCSplbnZjaGFuZ2VkID0gMTsKIAkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0td29yay10cmVlIikpIHsKIAkJCWlmICgqYXJnYyA8IDIpIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIk5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS13b3JrLXRyZWUuXG4iICk7CisJCQkJZnByaW50ZihzdGRlcnIsICJObyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlLlxuIik7CiAJCQkJdXNhZ2UocGVyZl91c2FnZV9zdHJpbmcpOwogCQkJfQogCQkJc2V0ZW52KFBFUkZfV09SS19UUkVFX0VOVklST05NRU5ULCAoKmFyZ3YpWzFdLCAxKTsKQEAgLTE2OCw3ICsxNjksNyBAQAogewogCWludCBlbnZjaGFuZ2VkID0gMCwgcmV0ID0gMCwgc2F2ZWRfZXJybm8gPSBlcnJubzsKIAlpbnQgY291bnQsIG9wdGlvbl9jb3VudDsKLQljb25zdCBjaGFyKiogbmV3X2FyZ3Y7CisJY29uc3QgY2hhciAqKm5ld19hcmd2OwogCWNvbnN0IGNoYXIgKmFsaWFzX2NvbW1hbmQ7CiAJY2hhciAqYWxpYXNfc3RyaW5nOwogCkBAIC0yMTAsMTEgKzIxMSwxMSBAQAogCQlpZiAoIXN0cmNtcChhbGlhc19jb21tYW5kLCBuZXdfYXJndlswXSkpCiAJCQlkaWUoInJlY3Vyc2l2ZSBhbGlhczogJXMiLCBhbGlhc19jb21tYW5kKTsKIAotCQluZXdfYXJndiA9IHJlYWxsb2MobmV3X2FyZ3YsIHNpemVvZihjaGFyKikgKgorCQluZXdfYXJndiA9IHJlYWxsb2MobmV3X2FyZ3YsIHNpemVvZihjaGFyICopICoKIAkJCQkgICAgKGNvdW50ICsgKmFyZ2NwICsgMSkpOwogCQkvKiBpbnNlcnQgYWZ0ZXIgY29tbWFuZCBuYW1lICovCi0JCW1lbWNweShuZXdfYXJndiArIGNvdW50LCAqYXJndiArIDEsIHNpemVvZihjaGFyKikgKiAqYXJnY3ApOwotCQluZXdfYXJndltjb3VudCsqYXJnY3BdID0gTlVMTDsKKwkJbWVtY3B5KG5ld19hcmd2ICsgY291bnQsICphcmd2ICsgMSwgc2l6ZW9mKGNoYXIgKikgKiAqYXJnY3ApOworCQluZXdfYXJndltjb3VudCArICphcmdjcF0gPSBOVUxMOwogCiAJCSphcmd2ID0gbmV3X2FyZ3Y7CiAJCSphcmdjcCArPSBjb3VudCAtIDE7CkBAIC0yODUsNiArMjg2LDcgQEAKIHsKIAljb25zdCBjaGFyICpjbWQgPSBhcmd2WzBdOwogCXN0YXRpYyBzdHJ1Y3QgY21kX3N0cnVjdCBjb21tYW5kc1tdID0geworCQl7ICJidWlsZGlkLWNhY2hlIiwgY21kX2J1aWxkaWRfY2FjaGUsIDAgfSwKIAkJeyAiYnVpbGRpZC1saXN0IiwgY21kX2J1aWxkaWRfbGlzdCwgMCB9LAogCQl7ICJkaWZmIiwJY21kX2RpZmYsCTAgfSwKIAkJeyAiaGVscCIsCWNtZF9oZWxwLAkwIH0sCkBAIC0zMDEsNiArMzAzLDcgQEAKIAkJeyAic2NoZWQiLAljbWRfc2NoZWQsCTAgfSwKIAkJeyAicHJvYmUiLAljbWRfcHJvYmUsCTAgfSwKIAkJeyAia21lbSIsCWNtZF9rbWVtLAkwIH0sCisJCXsgImxvY2siLAljbWRfbG9jaywJMCB9LAogCX07CiAJdW5zaWduZWQgaW50IGk7CiAJc3RhdGljIGNvbnN0IGNoYXIgZXh0W10gPSBTVFJJUF9FWFRFTlNJT047CkBAIC0zODgsNyArMzkxLDcgQEAKIC8qIG1pbmkgL3Byb2MvbW91bnRzIHBhcnNlcjogc2VhcmNoaW5nIGZvciAiXmJsYWggL21vdW50L3BvaW50IGRlYnVnZnMiICovCiBzdGF0aWMgdm9pZCBnZXRfZGVidWdmc19tbnRwdCh2b2lkKQogewotCWNvbnN0IGNoYXIgKnBhdGggPSBkZWJ1Z2ZzX2ZpbmRfbW91bnRwb2ludCgpOworCWNvbnN0IGNoYXIgKnBhdGggPSBkZWJ1Z2ZzX21vdW50KE5VTEwpOwogCiAJaWYgKHBhdGgpCiAJCXN0cm5jcHkoZGVidWdmc19tbnRwdCwgcGF0aCwgc2l6ZW9mKGRlYnVnZnNfbW50cHQpKTsKQEAgLTQ0OSw4ICs0NTIsOCBAQAogCXNldHVwX3BhdGgoKTsKIAogCXdoaWxlICgxKSB7Ci0JCXN0YXRpYyBpbnQgZG9uZV9oZWxwID0gMDsKLQkJc3RhdGljIGludCB3YXNfYWxpYXMgPSAwOworCQlzdGF0aWMgaW50IGRvbmVfaGVscDsKKwkJc3RhdGljIGludCB3YXNfYWxpYXM7CiAKIAkJd2FzX2FsaWFzID0gcnVuX2FyZ3YoJmFyZ2MsICZhcmd2KTsKIAkJaWYgKGVycm5vICE9IEVOT0VOVCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5jCmluZGV4IGFmNzhkOWEuLjAxYTY0YWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYwpAQCAtMzEsMTMgKzMxLDE0IEBACiAjaW5jbHVkZSAiRVhURVJOLmgiCiAjaW5jbHVkZSAicGVybC5oIgogI2luY2x1ZGUgIlhTVUIuaCIKLSNpbmNsdWRlICIuLi8uLi8uLi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9wZXJmLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vdXRpbC90cmFjZS1ldmVudC5oIgogCiAjaWZuZGVmIFBFUkxfVU5VU0VEX1ZBUgogIyAgZGVmaW5lIFBFUkxfVU5VU0VEX1ZBUih2YXIpIGlmICgwKSB2YXIgPSB2YXIKICNlbmRpZgogCi0jbGluZSA0MSAiQ29udGV4dC5jIgorI2xpbmUgNDIgIkNvbnRleHQuYyIKIAogWFMoWFNfUGVyZl9fVHJhY2VfX0NvbnRleHRfY29tbW9uX3BjKTsgLyogcHJvdG90eXBlIHRvIHBhc3MgLVdtaXNzaW5nLXByb3RvdHlwZXMgKi8KIFhTKFhTX1BlcmZfX1RyYWNlX19Db250ZXh0X2NvbW1vbl9wYykKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LnhzIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQueHMKaW5kZXggZmI3ODAwNi4uNTQ5Y2YwNCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQueHMKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQueHMKQEAgLTIyLDcgKzIyLDggQEAKICNpbmNsdWRlICJFWFRFUk4uaCIKICNpbmNsdWRlICJwZXJsLmgiCiAjaW5jbHVkZSAiWFNVQi5oIgotI2luY2x1ZGUgIi4uLy4uLy4uL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL3BlcmYuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi91dGlsL3RyYWNlLWV2ZW50LmgiCiAKIE1PRFVMRSA9IFBlcmY6OlRyYWNlOjpDb250ZXh0CQlQQUNLQUdFID0gUGVyZjo6VHJhY2U6OkNvbnRleHQKIFBST1RPVFlQRVM6IEVOQUJMRQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1V0aWwucG0gYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5wbQppbmRleCAwNTJmMTMyLi5mODY5YzQ4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5wbQorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5wbQpAQCAtNDQsNyArNDQsNyBAQAogc3ViIG5zZWNzX25zZWNzIHsKICAgICBteSAoJG5zZWNzKSA9IEBfOwogCi0gICAgcmV0dXJuICRuc2VjcyAtIG5zZWNzX3NlY3MoJG5zZWNzKTsKKyAgICByZXR1cm4gJG5zZWNzICUgJE5TRUNTX1BFUl9TRUM7CiB9CiAKIHN1YiBuc2Vjc19zdHIgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2NoZWNrLXBlcmYtdHJhY2UtcmVjb3JkIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2NoZWNrLXBlcmYtdHJhY2UtcmVjb3JkCmluZGV4IGM3ZWM1ZGUuLmU2Y2IxNDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9jaGVjay1wZXJmLXRyYWNlLXJlY29yZAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZWNvcmQKQEAgLTEsNyArMSwyIEBACiAjIS9iaW4vYmFzaAotcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSBrbWVtOmttYWxsb2MgLWUgaXJxOnNvZnRpcnFfZW50cnkKLQotCi0KLQotCitwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIGttZW06a21hbGxvYyAtZSBpcnE6c29mdGlycV9lbnRyeSAtZSBrbWVtOmtmcmVlCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZXBvcnQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYzRhMDMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2NoZWNrLXBlcmYtdHJhY2UtcmVwb3J0CisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIS9iaW4vYmFzaAotIyBkZXNjcmlwdGlvbjogdXNlbGVzcyBidXQgZXhoYXVzdGl2ZSB0ZXN0IHNjcmlwdAotcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcGVybC9jaGVjay1wZXJmLXRyYWNlLnBsCi0KLQotCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vZmFpbGVkLXN5c2NhbGxzLXJlY29yZCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9mYWlsZWQtc3lzY2FsbHMtcmVjb3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODg1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vZmFpbGVkLXN5c2NhbGxzLXJlY29yZApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9iYXNoCitwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIHJhd19zeXNjYWxsczpzeXNfZXhpdApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2ZhaWxlZC1zeXNjYWxscy1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vZmFpbGVkLXN5c2NhbGxzLXJlcG9ydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmZjNjYwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2ZhaWxlZC1zeXNjYWxscy1yZXBvcnQKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vYmFzaAorIyBkZXNjcmlwdGlvbjogc3lzdGVtLXdpZGUgZmFpbGVkIHN5c2NhbGxzCisjIGFyZ3M6IFtjb21tXQorcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcGVybC9mYWlsZWQtc3lzY2FsbHMucGwgJDEKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2ZhaWxlZC1zeXNjYWxscy5wbCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2ZhaWxlZC1zeXNjYWxscy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMThlN2UyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvZmFpbGVkLXN5c2NhbGxzLnBsCkBAIC0wLDAgKzEsMzggQEAKKyMgZmFpbGVkIHN5c3RlbSBjYWxsIGNvdW50cworIyAoYykgMjAxMCwgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIERpc3BsYXlzIHN5c3RlbS13aWRlIGZhaWxlZCBzeXN0ZW0gY2FsbCB0b3RhbHMKKyMgSWYgYSBbY29tbV0gYXJnIGlzIHNwZWNpZmllZCwgb25seSBzeXNjYWxscyBjYWxsZWQgYnkgW2NvbW1dIGFyZSBkaXNwbGF5ZWQuCisKK3VzZSBsaWIgIiRFTlZ7J1BFUkZfRVhFQ19QQVRIJ30vc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIiOwordXNlIGxpYiAiLi9QZXJmLVRyYWNlLVV0aWwvbGliIjsKK3VzZSBQZXJmOjpUcmFjZTo6Q29yZTsKK3VzZSBQZXJmOjpUcmFjZTo6Q29udGV4dDsKK3VzZSBQZXJmOjpUcmFjZTo6VXRpbDsKKworbXkgJWZhaWxlZF9zeXNjYWxsczsKKworc3ViIHJhd19zeXNjYWxsczo6c3lzX2V4aXQKK3sKKwlteSAoJGV2ZW50X25hbWUsICRjb250ZXh0LCAkY29tbW9uX2NwdSwgJGNvbW1vbl9zZWNzLCAkY29tbW9uX25zZWNzLAorCSAgICAkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tLAorCSAgICAkaWQsICRyZXQpID0gQF87CisKKwlpZiAoJHJldCA8IDApIHsKKwkgICAgJGZhaWxlZF9zeXNjYWxsc3skY29tbW9uX2NvbW19Kys7CisJfQorfQorCitzdWIgdHJhY2VfZW5kCit7CisgICAgcHJpbnRmKCJcbmZhaWxlZCBzeXNjYWxscyBieSBjb21tOlxuXG4iKTsKKworICAgIHByaW50ZigiJS0yMHMgICUxMHNcbiIsICJjb21tIiwgIiMgZXJyb3JzIik7CisgICAgcHJpbnRmKCIlLTIwcyAgJTZzICAlMTBzXG4iLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLSIpOworCisgICAgZm9yZWFjaCBteSAkY29tbSAoc29ydCB7JGZhaWxlZF9zeXNjYWxsc3skYn0gPD0+ICRmYWlsZWRfc3lzY2FsbHN7JGF9fQorCQkgICAgICBrZXlzICVmYWlsZWRfc3lzY2FsbHMpIHsKKwkgICAgcHJpbnRmKCIlLTIwcyAgJTEwc1xuIiwgJGNvbW0sICRmYWlsZWRfc3lzY2FsbHN7JGNvbW19KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU3MDg1ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29udGV4dC5jLiAgUHl0aG9uIGludGVyZmFjZXMgZm9yIHBlcmYgdHJhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxQeXRob24uaD4KKyNpbmNsdWRlICIuLi8uLi8uLi9wZXJmLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vdXRpbC90cmFjZS1ldmVudC5oIgorCitQeU1PRElOSVRfRlVOQyBpbml0cGVyZl90cmFjZV9jb250ZXh0KHZvaWQpOworCitzdGF0aWMgUHlPYmplY3QgKnBlcmZfdHJhY2VfY29udGV4dF9jb21tb25fcGMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OworCVB5T2JqZWN0ICpjb250ZXh0OworCWludCByZXR2YWw7CisKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmY29udGV4dCkpCisJCXJldHVybiBOVUxMOworCisJc2NyaXB0aW5nX2NvbnRleHQgPSBQeUNPYmplY3RfQXNWb2lkUHRyKGNvbnRleHQpOworCXJldHZhbCA9IGNvbW1vbl9wYyhzY3JpcHRpbmdfY29udGV4dCk7CisKKwlyZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsIHJldHZhbCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9mbGFncyhQeU9iamVjdCAqc2VsZiwKKwkJCQkJCSBQeU9iamVjdCAqYXJncykKK3sKKwlzdGF0aWMgc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpzY3JpcHRpbmdfY29udGV4dDsKKwlQeU9iamVjdCAqY29udGV4dDsKKwlpbnQgcmV0dmFsOworCisJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJmNvbnRleHQpKQorCQlyZXR1cm4gTlVMTDsKKworCXNjcmlwdGluZ19jb250ZXh0ID0gUHlDT2JqZWN0X0FzVm9pZFB0cihjb250ZXh0KTsKKwlyZXR2YWwgPSBjb21tb25fZmxhZ3Moc2NyaXB0aW5nX2NvbnRleHQpOworCisJcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCByZXR2YWwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKnBlcmZfdHJhY2VfY29udGV4dF9jb21tb25fbG9ja19kZXB0aChQeU9iamVjdCAqc2VsZiwKKwkJCQkJCSAgICAgIFB5T2JqZWN0ICphcmdzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OworCVB5T2JqZWN0ICpjb250ZXh0OworCWludCByZXR2YWw7CisKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmY29udGV4dCkpCisJCXJldHVybiBOVUxMOworCisJc2NyaXB0aW5nX2NvbnRleHQgPSBQeUNPYmplY3RfQXNWb2lkUHRyKGNvbnRleHQpOworCXJldHZhbCA9IGNvbW1vbl9sb2NrX2RlcHRoKHNjcmlwdGluZ19jb250ZXh0KTsKKworCXJldHVybiBQeV9CdWlsZFZhbHVlKCJpIiwgcmV0dmFsKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIENvbnRleHRNZXRob2RzW10gPSB7CisJeyAiY29tbW9uX3BjIiwgcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9wYywgTUVUSF9WQVJBUkdTLAorCSAgIkdldCB0aGUgY29tbW9uIHByZWVtcHQgY291bnQgZXZlbnQgZmllbGQgdmFsdWUuIn0sCisJeyAiY29tbW9uX2ZsYWdzIiwgcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9mbGFncywgTUVUSF9WQVJBUkdTLAorCSAgIkdldCB0aGUgY29tbW9uIGZsYWdzIGV2ZW50IGZpZWxkIHZhbHVlLiJ9LAorCXsgImNvbW1vbl9sb2NrX2RlcHRoIiwgcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9sb2NrX2RlcHRoLAorCSAgTUVUSF9WQVJBUkdTLAkiR2V0IHRoZSBjb21tb24gbG9jayBkZXB0aCBldmVudCBmaWVsZCB2YWx1ZS4ifSwKKwl7IE5VTEwsIE5VTEwsIDAsIE5VTEx9Cit9OworCitQeU1PRElOSVRfRlVOQyBpbml0cGVyZl90cmFjZV9jb250ZXh0KHZvaWQpCit7CisJKHZvaWQpIFB5X0luaXRNb2R1bGUoInBlcmZfdHJhY2VfY29udGV4dCIsIENvbnRleHRNZXRob2RzKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL0NvcmUucHkgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9Db3JlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzQ2NGUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9Db3JlLnB5CkBAIC0wLDAgKzEsOTEgQEAKKyMgQ29yZS5weSAtIFB5dGhvbiBleHRlbnNpb24gZm9yIHBlcmYgdHJhY2UsIGNvcmUgZnVuY3Rpb25zCisjCisjIENvcHlyaWdodCAoQykgMjAxMCBieSBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgorIworIyBUaGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCisjIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLgorCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAorCitkZWYgYXV0b2RpY3QoKToKKyAgICByZXR1cm4gZGVmYXVsdGRpY3QoYXV0b2RpY3QpCisKK2ZsYWdfZmllbGRzID0gYXV0b2RpY3QoKQorc3ltYm9saWNfZmllbGRzID0gYXV0b2RpY3QoKQorCitkZWYgZGVmaW5lX2ZsYWdfZmllbGQoZXZlbnRfbmFtZSwgZmllbGRfbmFtZSwgZGVsaW0pOgorICAgIGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWydkZWxpbSddID0gZGVsaW0KKworZGVmIGRlZmluZV9mbGFnX3ZhbHVlKGV2ZW50X25hbWUsIGZpZWxkX25hbWUsIHZhbHVlLCBmaWVsZF9zdHIpOgorICAgIGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXVt2YWx1ZV0gPSBmaWVsZF9zdHIKKworZGVmIGRlZmluZV9zeW1ib2xpY19maWVsZChldmVudF9uYW1lLCBmaWVsZF9uYW1lKToKKyAgICAjIG5vdGhpbmcgdG8gZG8sIHJlYWxseQorICAgIHBhc3MKKworZGVmIGRlZmluZV9zeW1ib2xpY192YWx1ZShldmVudF9uYW1lLCBmaWVsZF9uYW1lLCB2YWx1ZSwgZmllbGRfc3RyKToKKyAgICBzeW1ib2xpY19maWVsZHNbZXZlbnRfbmFtZV1bZmllbGRfbmFtZV1bJ3ZhbHVlcyddW3ZhbHVlXSA9IGZpZWxkX3N0cgorCitkZWYgZmxhZ19zdHIoZXZlbnRfbmFtZSwgZmllbGRfbmFtZSwgdmFsdWUpOgorICAgIHN0cmluZyA9ICIiCisKKyAgICBpZiBmbGFnX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXToKKwlwcmludF9kZWxpbSA9IDAKKyAgICAgICAga2V5cyA9IGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXS5rZXlzKCkKKyAgICAgICAga2V5cy5zb3J0KCkKKyAgICAgICAgZm9yIGlkeCBpbiBrZXlzOgorICAgICAgICAgICAgaWYgbm90IHZhbHVlIGFuZCBub3QgaWR4OgorICAgICAgICAgICAgICAgIHN0cmluZyArPSBmbGFnX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsndmFsdWVzJ11baWR4XQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBpZHggYW5kICh2YWx1ZSAmIGlkeCkgPT0gaWR4OgorICAgICAgICAgICAgICAgIGlmIHByaW50X2RlbGltIGFuZCBmbGFnX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsnZGVsaW0nXToKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgIiArIGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWydkZWxpbSddICsgIiAiCisgICAgICAgICAgICAgICAgc3RyaW5nICs9IGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXVtpZHhdCisgICAgICAgICAgICAgICAgcHJpbnRfZGVsaW0gPSAxCisgICAgICAgICAgICAgICAgdmFsdWUgJj0gfmlkeAorCisgICAgcmV0dXJuIHN0cmluZworCitkZWYgc3ltYm9sX3N0cihldmVudF9uYW1lLCBmaWVsZF9uYW1lLCB2YWx1ZSk6CisgICAgc3RyaW5nID0gIiIKKworICAgIGlmIHN5bWJvbGljX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXToKKyAgICAgICAga2V5cyA9IHN5bWJvbGljX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsndmFsdWVzJ10ua2V5cygpCisgICAgICAgIGtleXMuc29ydCgpCisgICAgICAgIGZvciBpZHggaW4ga2V5czoKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZSBhbmQgbm90IGlkeDoKKwkJc3RyaW5nID0gc3ltYm9saWNfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXVtpZHhdCisgICAgICAgICAgICAgICAgYnJlYWsKKwkgICAgaWYgKHZhbHVlID09IGlkeCk6CisJCXN0cmluZyA9IHN5bWJvbGljX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsndmFsdWVzJ11baWR4XQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICByZXR1cm4gc3RyaW5nCisKK3RyYWNlX2ZsYWdzID0geyAweDAwOiAiTk9ORSIsIFwKKyAgICAgICAgICAgICAgICAgICAgMHgwMTogIklSUVNfT0ZGIiwgXAorICAgICAgICAgICAgICAgICAgICAweDAyOiAiSVJRU19OT1NVUFBPUlQiLCBcCisgICAgICAgICAgICAgICAgICAgIDB4MDQ6ICJORUVEX1JFU0NIRUQiLCBcCisgICAgICAgICAgICAgICAgICAgIDB4MDg6ICJIQVJESVJRIiwgXAorICAgICAgICAgICAgICAgICAgICAweDEwOiAiU09GVElSUSIgfQorCitkZWYgdHJhY2VfZmxhZ19zdHIodmFsdWUpOgorICAgIHN0cmluZyA9ICIiCisgICAgcHJpbnRfZGVsaW0gPSAwCisKKyAgICBrZXlzID0gdHJhY2VfZmxhZ3Mua2V5cygpCisKKyAgICBmb3IgaWR4IGluIGtleXM6CisJaWYgbm90IHZhbHVlIGFuZCBub3QgaWR4OgorCSAgICBzdHJpbmcgKz0gIk5PTkUiCisJICAgIGJyZWFrCisKKwlpZiBpZHggYW5kICh2YWx1ZSAmIGlkeCkgPT0gaWR4OgorCSAgICBpZiBwcmludF9kZWxpbToKKwkJc3RyaW5nICs9ICIgfCAiOworCSAgICBzdHJpbmcgKz0gdHJhY2VfZmxhZ3NbaWR4XQorCSAgICBwcmludF9kZWxpbSA9IDEKKwkgICAgdmFsdWUgJj0gfmlkeAorCisgICAgcmV0dXJuIHN0cmluZwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNlOTE0MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1V0aWwucHkKQEAgLTAsMCArMSwyNSBAQAorIyBVdGlsLnB5IC0gUHl0aG9uIGV4dGVuc2lvbiBmb3IgcGVyZiB0cmFjZSwgbWlzY2VsbGFuZW91cyB1dGlsaXR5IGNvZGUKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIGJ5IFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKKyMgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24uCisKK05TRUNTX1BFUl9TRUMgICAgPSAxMDAwMDAwMDAwCisKK2RlZiBhdmcodG90YWwsIG4pOgorICAgIHJldHVybiB0b3RhbCAvIG4KKworZGVmIG5zZWNzKHNlY3MsIG5zZWNzKToKKyAgICByZXR1cm4gc2VjcyAqIE5TRUNTX1BFUl9TRUMgKyBuc2VjcworCitkZWYgbnNlY3Nfc2Vjcyhuc2Vjcyk6CisgICAgcmV0dXJuIG5zZWNzIC8gTlNFQ1NfUEVSX1NFQworCitkZWYgbnNlY3NfbnNlY3MobnNlY3MpOgorICAgIHJldHVybiBuc2VjcyAlIE5TRUNTX1BFUl9TRUMKKworZGVmIG5zZWNzX3N0cihuc2Vjcyk6CisgICAgc3RyID0gIiU1dS4lMDl1IiAlIChuc2Vjc19zZWNzKG5zZWNzKSwgbnNlY3NfbnNlY3MobnNlY3MpKSwKKyAgICByZXR1cm4gc3RyCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9mYWlsZWQtc3lzY2FsbHMtYnktcGlkLXJlY29yZCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL2ZhaWxlZC1zeXNjYWxscy1ieS1waWQtcmVjb3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODg1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9mYWlsZWQtc3lzY2FsbHMtYnktcGlkLXJlY29yZApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9iYXNoCitwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIHJhd19zeXNjYWxsczpzeXNfZXhpdApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9mYWlsZWQtc3lzY2FsbHMtYnktcGlkLXJlcG9ydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTBjMGE4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC1yZXBvcnQKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vYmFzaAorIyBkZXNjcmlwdGlvbjogc3lzdGVtLXdpZGUgZmFpbGVkIHN5c2NhbGxzLCBieSBwaWQKKyMgYXJnczogW2NvbW1dCitwZXJmIHRyYWNlIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC5weSAkMQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtYnktcGlkLXJlY29yZCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLWJ5LXBpZC1yZWNvcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhOGM1MAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLWJ5LXBpZC1yZWNvcmQKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vYmFzaAorcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSByYXdfc3lzY2FsbHM6c3lzX2VudGVyCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1ieS1waWQtcmVwb3J0IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtYnktcGlkLXJlcG9ydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODA0NGQxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtYnktcGlkLXJlcG9ydApAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9iYXNoCisjIGRlc2NyaXB0aW9uOiBzeXN0ZW0td2lkZSBzeXNjYWxsIGNvdW50cywgYnkgcGlkCisjIGFyZ3M6IFtjb21tXQorcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcHl0aG9uL3N5c2NhbGwtY291bnRzLWJ5LXBpZC5weSAkMQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtcmVjb3JkIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtcmVjb3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YThjNTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZWNvcmQKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vYmFzaAorcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSByYXdfc3lzY2FsbHM6c3lzX2VudGVyCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZXBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM2NmFhNjEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZXBvcnQKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vYmFzaAorIyBkZXNjcmlwdGlvbjogc3lzdGVtLXdpZGUgc3lzY2FsbCBjb3VudHMKKyMgYXJnczogW2NvbW1dCitwZXJmIHRyYWNlIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24vc3lzY2FsbC1jb3VudHMucHkgJDEKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vY2hlY2stcGVyZi10cmFjZS5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vY2hlY2stcGVyZi10cmFjZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjRkOTM0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9jaGVjay1wZXJmLXRyYWNlLnB5CkBAIC0wLDAgKzEsODMgQEAKKyMgcGVyZiB0cmFjZSBldmVudCBoYW5kbGVycywgZ2VuZXJhdGVkIGJ5IHBlcmYgdHJhY2UgLWcgcHl0aG9uCisjIChjKSAyMDEwLCBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgorIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKKyMKKyMgVGhpcyBzY3JpcHQgdGVzdHMgYmFzaWMgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIGZsYWcgYW5kIHN5bWJvbAorIyBzdHJpbmdzLCBjb21tb25feHh4KCkgY2FsbHMgYmFjayBpbnRvIHBlcmYsIGJlZ2luLCBlbmQsIHVuaGFuZGxlZAorIyBldmVudHMsIGV0Yy4gIEJhc2ljYWxseSwgaWYgdGhpcyBzY3JpcHQgcnVucyBzdWNjZXNzZnVsbHkgYW5kCisjIGRpc3BsYXlzIGV4cGVjdGVkIHJlc3VsdHMsIFB5dGhvbiBzY3JpcHRpbmcgc3VwcG9ydCBzaG91bGQgYmUgb2suCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gQ29yZSBpbXBvcnQgKgorZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKKwordW5oYW5kbGVkID0gYXV0b2RpY3QoKQorCitkZWYgdHJhY2VfYmVnaW4oKToKKwlwcmludCAidHJhY2VfYmVnaW4iCisJcGFzcworCitkZWYgdHJhY2VfZW5kKCk6CisgICAgICAgIHByaW50X3VuaGFuZGxlZCgpCisKK2RlZiBpcnFfX3NvZnRpcnFfZW50cnkoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwl2ZWMpOgorCQlwcmludF9oZWFkZXIoZXZlbnRfbmFtZSwgY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywKKwkJCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKQorCisgICAgICAgICAgICAgICAgcHJpbnRfdW5jb21tb24oY29udGV4dCkKKworCQlwcmludCAidmVjPSVzXG4iICUgXAorCQkoc3ltYm9sX3N0cigiaXJxX19zb2Z0aXJxX2VudHJ5IiwgInZlYyIsIHZlYykpLAorCitkZWYga21lbV9fa21hbGxvYyhldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWNhbGxfc2l0ZSwgcHRyLCBieXRlc19yZXEsIGJ5dGVzX2FsbG9jLAorCWdmcF9mbGFncyk6CisJCXByaW50X2hlYWRlcihldmVudF9uYW1lLCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQkJY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pCisKKyAgICAgICAgICAgICAgICBwcmludF91bmNvbW1vbihjb250ZXh0KQorCisJCXByaW50ICJjYWxsX3NpdGU9JXUsIHB0cj0ldSwgYnl0ZXNfcmVxPSV1LCAiIFwKKwkJImJ5dGVzX2FsbG9jPSV1LCBnZnBfZmxhZ3M9JXNcbiIgJSBcCisJCShjYWxsX3NpdGUsIHB0ciwgYnl0ZXNfcmVxLCBieXRlc19hbGxvYywKKworCQlmbGFnX3N0cigia21lbV9fa21hbGxvYyIsICJnZnBfZmxhZ3MiLCBnZnBfZmxhZ3MpKSwKKworZGVmIHRyYWNlX3VuaGFuZGxlZChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQljb21tb25fcGlkLCBjb21tb25fY29tbSk6CisgICAgdHJ5OgorICAgICAgICB1bmhhbmRsZWRbZXZlbnRfbmFtZV0gKz0gMQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHVuaGFuZGxlZFtldmVudF9uYW1lXSA9IDEKKworZGVmIHByaW50X2hlYWRlcihldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pOgorCXByaW50ICIlLTIwcyAlNXUgJTA1dS4lMDl1ICU4dSAlLTIwcyAiICUgXAorCShldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pLAorCisjIHByaW50IHRyYWNlIGZpZWxkcyBub3QgaW5jbHVkZWQgaW4gaGFuZGxlciBhcmdzCitkZWYgcHJpbnRfdW5jb21tb24oY29udGV4dCk6CisgICAgcHJpbnQgImNvbW1vbl9wcmVlbXB0X2NvdW50PSVkLCBjb21tb25fZmxhZ3M9JXMsIGNvbW1vbl9sb2NrX2RlcHRoPSVkLCAiIFwKKyAgICAgICAgJSAoY29tbW9uX3BjKGNvbnRleHQpLCB0cmFjZV9mbGFnX3N0cihjb21tb25fZmxhZ3MoY29udGV4dCkpLCBcCisgICAgICAgICAgICAgICBjb21tb25fbG9ja19kZXB0aChjb250ZXh0KSkKKworZGVmIHByaW50X3VuaGFuZGxlZCgpOgorICAgIGtleXMgPSB1bmhhbmRsZWQua2V5cygpCisgICAgaWYgbm90IGtleXM6CisgICAgICAgIHJldHVybgorCisgICAgcHJpbnQgIlxudW5oYW5kbGVkIGV2ZW50czpcblxuIiwKKworICAgIHByaW50ICIlLTQwcyAgJTEwc1xuIiAlICgiZXZlbnQiLCAiY291bnQiKSwKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS0tLS0tLS0iKSwKKworICAgIGZvciBldmVudF9uYW1lIGluIGtleXM6CisJcHJpbnQgIiUtNDBzICAlMTBkXG4iICUgKGV2ZW50X25hbWUsIHVuaGFuZGxlZFtldmVudF9uYW1lXSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2EwMjI3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9mYWlsZWQtc3lzY2FsbHMtYnktcGlkLnB5CkBAIC0wLDAgKzEsNjggQEAKKyMgZmFpbGVkIHN5c3RlbSBjYWxsIGNvdW50cywgYnkgcGlkCisjIChjKSAyMDEwLCBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgorIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKKyMKKyMgRGlzcGxheXMgc3lzdGVtLXdpZGUgZmFpbGVkIHN5c3RlbSBjYWxsIHRvdGFscywgYnJva2VuIGRvd24gYnkgcGlkLgorIyBJZiBhIFtjb21tXSBhcmcgaXMgc3BlY2lmaWVkLCBvbmx5IHN5c2NhbGxzIGNhbGxlZCBieSBbY29tbV0gYXJlIGRpc3BsYXllZC4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK3N5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXAorCScvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJykKKworZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKK2Zyb20gQ29yZSBpbXBvcnQgKgorCit1c2FnZSA9ICJwZXJmIHRyYWNlIC1zIHN5c2NhbGwtY291bnRzLWJ5LXBpZC5weSBbY29tbV1cbiI7CisKK2Zvcl9jb21tID0gTm9uZQorCitpZiBsZW4oc3lzLmFyZ3YpID4gMjoKKwlzeXMuZXhpdCh1c2FnZSkKKworaWYgbGVuKHN5cy5hcmd2KSA+IDE6CisJZm9yX2NvbW0gPSBzeXMuYXJndlsxXQorCitzeXNjYWxscyA9IGF1dG9kaWN0KCkKKworZGVmIHRyYWNlX2JlZ2luKCk6CisJcGFzcworCitkZWYgdHJhY2VfZW5kKCk6CisJcHJpbnRfZXJyb3JfdG90YWxzKCkKKworZGVmIHJhd19zeXNjYWxsc19fc3lzX2V4aXQoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlpZCwgcmV0KToKKwlpZiBmb3JfY29tbSBpcyBub3QgTm9uZToKKwkJaWYgY29tbW9uX2NvbW0gIT0gZm9yX2NvbW06CisJCQlyZXR1cm4KKworCWlmIHJldCA8IDA6CisJCXRyeToKKwkJCXN5c2NhbGxzW2NvbW1vbl9jb21tXVtjb21tb25fcGlkXVtpZF1bcmV0XSArPSAxCisJCWV4Y2VwdCBUeXBlRXJyb3I6CisJCQlzeXNjYWxsc1tjb21tb25fY29tbV1bY29tbW9uX3BpZF1baWRdW3JldF0gPSAxCisKK2RlZiBwcmludF9lcnJvcl90b3RhbHMoKToKKyAgICBpZiBmb3JfY29tbSBpcyBub3QgTm9uZToKKwkgICAgcHJpbnQgIlxuc3lzY2FsbCBlcnJvcnMgZm9yICVzOlxuXG4iICUgKGZvcl9jb21tKSwKKyAgICBlbHNlOgorCSAgICBwcmludCAiXG5zeXNjYWxsIGVycm9yczpcblxuIiwKKworICAgIHByaW50ICIlLTMwcyAgJTEwc1xuIiAlICgiY29tbSBbcGlkXSIsICJjb3VudCIpLAorICAgIHByaW50ICIlLTMwcyAgJTEwc1xuIiAlICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tLS0tLS0iKSwKKworICAgIGNvbW1fa2V5cyA9IHN5c2NhbGxzLmtleXMoKQorICAgIGZvciBjb21tIGluIGNvbW1fa2V5czoKKwkgICAgcGlkX2tleXMgPSBzeXNjYWxsc1tjb21tXS5rZXlzKCkKKwkgICAgZm9yIHBpZCBpbiBwaWRfa2V5czoKKwkJICAgIHByaW50ICJcbiVzIFslZF1cbiIgJSAoY29tbSwgcGlkKSwKKwkJICAgIGlkX2tleXMgPSBzeXNjYWxsc1tjb21tXVtwaWRdLmtleXMoKQorCQkgICAgZm9yIGlkIGluIGlkX2tleXM6CisJCQkgICAgcHJpbnQgIiAgc3lzY2FsbDogJS0xNmRcbiIgJSAoaWQpLAorCQkJICAgIHJldF9rZXlzID0gc3lzY2FsbHNbY29tbV1bcGlkXVtpZF0ua2V5cygpCisJCQkgICAgZm9yIHJldCwgdmFsIGluIHNvcnRlZChzeXNjYWxsc1tjb21tXVtwaWRdW2lkXS5pdGVyaXRlbXMoKSwga2V5ID0gbGFtYmRhKGssIHYpOiAodiwgayksICByZXZlcnNlID0gVHJ1ZSk6CisJCQkJICAgIHByaW50ICIgICAgZXJyID0gJS0yMGQgICUxMGRcbiIgJSAocmV0LCB2YWwpLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy1ieS1waWQucHkgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3N5c2NhbGwtY291bnRzLWJ5LXBpZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjcyMmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy1ieS1waWQucHkKQEAgLTAsMCArMSw2NCBAQAorIyBzeXN0ZW0gY2FsbCBjb3VudHMsIGJ5IHBpZAorIyAoYykgMjAxMCwgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIERpc3BsYXlzIHN5c3RlbS13aWRlIHN5c3RlbSBjYWxsIHRvdGFscywgYnJva2VuIGRvd24gYnkgc3lzY2FsbC4KKyMgSWYgYSBbY29tbV0gYXJnIGlzIHNwZWNpZmllZCwgb25seSBzeXNjYWxscyBjYWxsZWQgYnkgW2NvbW1dIGFyZSBkaXNwbGF5ZWQuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCitmcm9tIENvcmUgaW1wb3J0ICoKKwordXNhZ2UgPSAicGVyZiB0cmFjZSAtcyBzeXNjYWxsLWNvdW50cy1ieS1waWQucHkgW2NvbW1dXG4iOworCitmb3JfY29tbSA9IE5vbmUKKworaWYgbGVuKHN5cy5hcmd2KSA+IDI6CisJc3lzLmV4aXQodXNhZ2UpCisKK2lmIGxlbihzeXMuYXJndikgPiAxOgorCWZvcl9jb21tID0gc3lzLmFyZ3ZbMV0KKworc3lzY2FsbHMgPSBhdXRvZGljdCgpCisKK2RlZiB0cmFjZV9iZWdpbigpOgorCXBhc3MKKworZGVmIHRyYWNlX2VuZCgpOgorCXByaW50X3N5c2NhbGxfdG90YWxzKCkKKworZGVmIHJhd19zeXNjYWxsc19fc3lzX2VudGVyKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJaWQsIGFyZ3MpOgorCWlmIGZvcl9jb21tIGlzIG5vdCBOb25lOgorCQlpZiBjb21tb25fY29tbSAhPSBmb3JfY29tbToKKwkJCXJldHVybgorCXRyeToKKwkJc3lzY2FsbHNbY29tbW9uX2NvbW1dW2NvbW1vbl9waWRdW2lkXSArPSAxCisJZXhjZXB0IFR5cGVFcnJvcjoKKwkJc3lzY2FsbHNbY29tbW9uX2NvbW1dW2NvbW1vbl9waWRdW2lkXSA9IDEKKworZGVmIHByaW50X3N5c2NhbGxfdG90YWxzKCk6CisgICAgaWYgZm9yX2NvbW0gaXMgbm90IE5vbmU6CisJICAgIHByaW50ICJcbnN5c2NhbGwgZXZlbnRzIGZvciAlczpcblxuIiAlIChmb3JfY29tbSksCisgICAgZWxzZToKKwkgICAgcHJpbnQgIlxuc3lzY2FsbCBldmVudHMgYnkgY29tbS9waWQ6XG5cbiIsCisKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoImNvbW0gW3BpZF0vc3lzY2FsbHMiLCAiY291bnQiKSwKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS0tLS0tLSIpLAorCisgICAgY29tbV9rZXlzID0gc3lzY2FsbHMua2V5cygpCisgICAgZm9yIGNvbW0gaW4gY29tbV9rZXlzOgorCSAgICBwaWRfa2V5cyA9IHN5c2NhbGxzW2NvbW1dLmtleXMoKQorCSAgICBmb3IgcGlkIGluIHBpZF9rZXlzOgorCQkgICAgcHJpbnQgIlxuJXMgWyVkXVxuIiAlIChjb21tLCBwaWQpLAorCQkgICAgaWRfa2V5cyA9IHN5c2NhbGxzW2NvbW1dW3BpZF0ua2V5cygpCisJCSAgICBmb3IgaWQsIHZhbCBpbiBzb3J0ZWQoc3lzY2FsbHNbY29tbV1bcGlkXS5pdGVyaXRlbXMoKSwgXAorCQkJCSAga2V5ID0gbGFtYmRhKGssIHYpOiAodiwgayksICByZXZlcnNlID0gVHJ1ZSk6CisJCQkgICAgcHJpbnQgIiAgJS0zOGQgICUxMGRcbiIgJSAoaWQsIHZhbCksCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3N5c2NhbGwtY291bnRzLnB5IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTc3ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy5weQpAQCAtMCwwICsxLDU4IEBACisjIHN5c3RlbSBjYWxsIGNvdW50cworIyAoYykgMjAxMCwgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIERpc3BsYXlzIHN5c3RlbS13aWRlIHN5c3RlbSBjYWxsIHRvdGFscywgYnJva2VuIGRvd24gYnkgc3lzY2FsbC4KKyMgSWYgYSBbY29tbV0gYXJnIGlzIHNwZWNpZmllZCwgb25seSBzeXNjYWxscyBjYWxsZWQgYnkgW2NvbW1dIGFyZSBkaXNwbGF5ZWQuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCitmcm9tIENvcmUgaW1wb3J0ICoKKwordXNhZ2UgPSAicGVyZiB0cmFjZSAtcyBzeXNjYWxsLWNvdW50cy5weSBbY29tbV1cbiI7CisKK2Zvcl9jb21tID0gTm9uZQorCitpZiBsZW4oc3lzLmFyZ3YpID4gMjoKKwlzeXMuZXhpdCh1c2FnZSkKKworaWYgbGVuKHN5cy5hcmd2KSA+IDE6CisJZm9yX2NvbW0gPSBzeXMuYXJndlsxXQorCitzeXNjYWxscyA9IGF1dG9kaWN0KCkKKworZGVmIHRyYWNlX2JlZ2luKCk6CisJcGFzcworCitkZWYgdHJhY2VfZW5kKCk6CisJcHJpbnRfc3lzY2FsbF90b3RhbHMoKQorCitkZWYgcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlpZCwgYXJncyk6CisJaWYgZm9yX2NvbW0gaXMgbm90IE5vbmU6CisJCWlmIGNvbW1vbl9jb21tICE9IGZvcl9jb21tOgorCQkJcmV0dXJuCisJdHJ5OgorCQlzeXNjYWxsc1tpZF0gKz0gMQorCWV4Y2VwdCBUeXBlRXJyb3I6CisJCXN5c2NhbGxzW2lkXSA9IDEKKworZGVmIHByaW50X3N5c2NhbGxfdG90YWxzKCk6CisgICAgaWYgZm9yX2NvbW0gaXMgbm90IE5vbmU6CisJICAgIHByaW50ICJcbnN5c2NhbGwgZXZlbnRzIGZvciAlczpcblxuIiAlIChmb3JfY29tbSksCisgICAgZWxzZToKKwkgICAgcHJpbnQgIlxuc3lzY2FsbCBldmVudHM6XG5cbiIsCisKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoImV2ZW50IiwgImNvdW50IiksCisgICAgcHJpbnQgIiUtNDBzICAlMTBzXG4iICUgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tLS0tLS0tIiksCisKKyAgICBmb3IgaWQsIHZhbCBpbiBzb3J0ZWQoc3lzY2FsbHMuaXRlcml0ZW1zKCksIGtleSA9IGxhbWJkYShrLCB2KTogKHYsIGspLCBcCisJCQkJICByZXZlcnNlID0gVHJ1ZSk6CisJICAgIHByaW50ICIlLTQwZCAgJTEwZFxuIiAlIChpZCwgdmFsKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5jIGIvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5MDRiMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5jCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBidWlsZC1pZC5jCisgKgorICogYnVpbGQtaWQgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAcmVkaGF0LmNvbT4KKyAqLworI2luY2x1ZGUgImJ1aWxkLWlkLmgiCisjaW5jbHVkZSAiZXZlbnQuaCIKKyNpbmNsdWRlICJzeW1ib2wuaCIKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworc3RhdGljIGludCBidWlsZF9pZF9fbWFya19kc29faGl0KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOworCXU4IGNwdW1vZGUgPSBldmVudC0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSzsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgZXZlbnQtPmlwLnBpZCk7CisKKwlpZiAodGhyZWFkID09IE5VTEwpIHsKKwkJcHJfZXJyKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKKwkJCWV2ZW50LT5oZWFkZXIudHlwZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBzZXNzaW9uLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLAorCQkJICAgICAgZXZlbnQtPmlwLmlwLCAmYWwpOworCisJaWYgKGFsLm1hcCAhPSBOVUxMKQorCQlhbC5tYXAtPmRzby0+aGl0ID0gMTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgYnVpbGRfaWRfX21hcmtfZHNvX2hpdF9vcHMgPSB7CisJLnNhbXBsZQk9IGJ1aWxkX2lkX19tYXJrX2Rzb19oaXQsCisJLm1tYXAJPSBldmVudF9fcHJvY2Vzc19tbWFwLAorCS5mb3JrCT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKK307CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOTgxZDYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgUEVSRl9CVUlMRF9JRF9IXworI2RlZmluZSBQRVJGX0JVSUxEX0lEX0hfIDEKKworI2luY2x1ZGUgInNlc3Npb24uaCIKKworZXh0ZXJuIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBidWlsZF9pZF9fbWFya19kc29faGl0X29wczsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZGF0YV9tYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kYXRhX21hcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTU3YjgzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kYXRhX21hcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLSNpbmNsdWRlICJzeW1ib2wuaCIKLSNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJ0aHJlYWQuaCIKLSNpbmNsdWRlICJzZXNzaW9uLmgiCi0KLXN0YXRpYyBpbnQgcHJvY2Vzc19ldmVudF9zdHViKGV2ZW50X3QgKmV2ZW50IF9fdXNlZCwKLQkJCSAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkKQotewotCWR1bXBfcHJpbnRmKCI6IHVuaGFuZGxlZCFcbiIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX2V2ZW50X29wc19fZmlsbF9kZWZhdWx0cyhzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKmhhbmRsZXIpCi17Ci0JaWYgKCFoYW5kbGVyLT5wcm9jZXNzX3NhbXBsZV9ldmVudCkKLQkJaGFuZGxlci0+cHJvY2Vzc19zYW1wbGVfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Ci0JaWYgKCFoYW5kbGVyLT5wcm9jZXNzX21tYXBfZXZlbnQpCi0JCWhhbmRsZXItPnByb2Nlc3NfbW1hcF9ldmVudCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKLQlpZiAoIWhhbmRsZXItPnByb2Nlc3NfY29tbV9ldmVudCkKLQkJaGFuZGxlci0+cHJvY2Vzc19jb21tX2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOwotCWlmICghaGFuZGxlci0+cHJvY2Vzc19mb3JrX2V2ZW50KQotCQloYW5kbGVyLT5wcm9jZXNzX2ZvcmtfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Ci0JaWYgKCFoYW5kbGVyLT5wcm9jZXNzX2V4aXRfZXZlbnQpCi0JCWhhbmRsZXItPnByb2Nlc3NfZXhpdF9ldmVudCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKLQlpZiAoIWhhbmRsZXItPnByb2Nlc3NfbG9zdF9ldmVudCkKLQkJaGFuZGxlci0+cHJvY2Vzc19sb3N0X2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOwotCWlmICghaGFuZGxlci0+cHJvY2Vzc19yZWFkX2V2ZW50KQotCQloYW5kbGVyLT5wcm9jZXNzX3JlYWRfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Ci0JaWYgKCFoYW5kbGVyLT5wcm9jZXNzX3Rocm90dGxlX2V2ZW50KQotCQloYW5kbGVyLT5wcm9jZXNzX3Rocm90dGxlX2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOwotCWlmICghaGFuZGxlci0+cHJvY2Vzc191bnRocm90dGxlX2V2ZW50KQotCQloYW5kbGVyLT5wcm9jZXNzX3VudGhyb3R0bGVfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpldmVudF9fbmFtZVtdID0gewotCVswXQkJCSA9ICJUT1RBTCIsCi0JW1BFUkZfUkVDT1JEX01NQVBdCSA9ICJNTUFQIiwKLQlbUEVSRl9SRUNPUkRfTE9TVF0JID0gIkxPU1QiLAotCVtQRVJGX1JFQ09SRF9DT01NXQkgPSAiQ09NTSIsCi0JW1BFUkZfUkVDT1JEX0VYSVRdCSA9ICJFWElUIiwKLQlbUEVSRl9SRUNPUkRfVEhST1RUTEVdCSA9ICJUSFJPVFRMRSIsCi0JW1BFUkZfUkVDT1JEX1VOVEhST1RUTEVdID0gIlVOVEhST1RUTEUiLAotCVtQRVJGX1JFQ09SRF9GT1JLXQkgPSAiRk9SSyIsCi0JW1BFUkZfUkVDT1JEX1JFQURdCSA9ICJSRUFEIiwKLQlbUEVSRl9SRUNPUkRfU0FNUExFXQkgPSAiU0FNUExFIiwKLX07Ci0KLXVuc2lnbmVkIGxvbmcgZXZlbnRfX3RvdGFsW1BFUkZfUkVDT1JEX01BWF07Ci0KLXZvaWQgZXZlbnRfX3ByaW50X3RvdGFscyh2b2lkKQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBQRVJGX1JFQ09SRF9NQVg7ICsraSkKLQkJcHJfaW5mbygiJTEwcyBldmVudHM6ICUxMGxkXG4iLAotCQkJZXZlbnRfX25hbWVbaV0sIGV2ZW50X190b3RhbFtpXSk7Ci19Ci0KLXN0YXRpYyBpbnQgcHJvY2Vzc19ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCSBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKm9wcywKLQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQotewotCXRyYWNlX2V2ZW50KGV2ZW50KTsKLQotCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPCBQRVJGX1JFQ09SRF9NQVgpIHsKLQkJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEXyVzIiwKLQkJCSAgICAodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKLQkJCSAgICAodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAotCQkJICAgIGV2ZW50X19uYW1lW2V2ZW50LT5oZWFkZXIudHlwZV0pOwotCQkrK2V2ZW50X190b3RhbFswXTsKLQkJKytldmVudF9fdG90YWxbZXZlbnQtPmhlYWRlci50eXBlXTsKLQl9Ci0KLQlzd2l0Y2ggKGV2ZW50LT5oZWFkZXIudHlwZSkgewotCWNhc2UgUEVSRl9SRUNPUkRfU0FNUExFOgotCQlyZXR1cm4gb3BzLT5wcm9jZXNzX3NhbXBsZV9ldmVudChldmVudCwgc2Vzc2lvbik7Ci0JY2FzZSBQRVJGX1JFQ09SRF9NTUFQOgotCQlyZXR1cm4gb3BzLT5wcm9jZXNzX21tYXBfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwotCWNhc2UgUEVSRl9SRUNPUkRfQ09NTToKLQkJcmV0dXJuIG9wcy0+cHJvY2Vzc19jb21tX2V2ZW50KGV2ZW50LCBzZXNzaW9uKTsKLQljYXNlIFBFUkZfUkVDT1JEX0ZPUks6Ci0JCXJldHVybiBvcHMtPnByb2Nlc3NfZm9ya19ldmVudChldmVudCwgc2Vzc2lvbik7Ci0JY2FzZSBQRVJGX1JFQ09SRF9FWElUOgotCQlyZXR1cm4gb3BzLT5wcm9jZXNzX2V4aXRfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwotCWNhc2UgUEVSRl9SRUNPUkRfTE9TVDoKLQkJcmV0dXJuIG9wcy0+cHJvY2Vzc19sb3N0X2V2ZW50KGV2ZW50LCBzZXNzaW9uKTsKLQljYXNlIFBFUkZfUkVDT1JEX1JFQUQ6Ci0JCXJldHVybiBvcHMtPnByb2Nlc3NfcmVhZF9ldmVudChldmVudCwgc2Vzc2lvbik7Ci0JY2FzZSBQRVJGX1JFQ09SRF9USFJPVFRMRToKLQkJcmV0dXJuIG9wcy0+cHJvY2Vzc190aHJvdHRsZV9ldmVudChldmVudCwgc2Vzc2lvbik7Ci0JY2FzZSBQRVJGX1JFQ09SRF9VTlRIUk9UVExFOgotCQlyZXR1cm4gb3BzLT5wcm9jZXNzX3VudGhyb3R0bGVfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwotCWRlZmF1bHQ6Ci0JCW9wcy0+dG90YWxfdW5rbm93bisrOwotCQlyZXR1cm4gLTE7Ci0JfQotfQotCi1pbnQgcGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKGludCBpbnB1dCwgdTY0IG9mZnNldCwgdTY0IHNpemUpCi17Ci0Jc3RydWN0IGJ1aWxkX2lkX2V2ZW50IGJldjsKLQljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKLQl1NjQgbGltaXQgPSBvZmZzZXQgKyBzaXplOwotCWludCBlcnIgPSAtMTsKLQotCXdoaWxlIChvZmZzZXQgPCBsaW1pdCkgewotCQlzdHJ1Y3QgZHNvICpkc287Ci0JCXNzaXplX3QgbGVuOwotCi0JCWlmIChyZWFkKGlucHV0LCAmYmV2LCBzaXplb2YoYmV2KSkgIT0gc2l6ZW9mKGJldikpCi0JCQlnb3RvIG91dDsKLQotCQlsZW4gPSBiZXYuaGVhZGVyLnNpemUgLSBzaXplb2YoYmV2KTsKLQkJaWYgKHJlYWQoaW5wdXQsIGZpbGVuYW1lLCBsZW4pICE9IGxlbikKLQkJCWdvdG8gb3V0OwotCi0JCWRzbyA9IGRzb3NfX2ZpbmRuZXcoZmlsZW5hbWUpOwotCQlpZiAoZHNvICE9IE5VTEwpCi0JCQlkc29fX3NldF9idWlsZF9pZChkc28sICZiZXYuYnVpbGRfaWQpOwotCi0JCW9mZnNldCArPSBiZXYuaGVhZGVyLnNpemU7Ci0JfQotCWVyciA9IDA7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHN0cnVjdCB0aHJlYWQgKnBlcmZfc2Vzc2lvbl9fcmVnaXN0ZXJfaWRsZV90aHJlYWQoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKLXsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2VsZiwgMCk7Ci0KLQlpZiAoIXRocmVhZCB8fCB0aHJlYWRfX3NldF9jb21tKHRocmVhZCwgInN3YXBwZXIiKSkgewotCQlwcl9lcnIoInByb2JsZW0gaW5zZXJ0aW5nIGlkbGUgdGFzay5cbiIpOwotCQl0aHJlYWQgPSBOVUxMOwotCX0KLQotCXJldHVybiB0aHJlYWQ7Ci19Ci0KLWludCBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCi0JCQkJIHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqb3BzKQotewotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBoZWFkLCBzaGlmdDsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7Ci0Jc2l6ZV90CXBhZ2Vfc2l6ZTsKLQlldmVudF90ICpldmVudDsKLQl1aW50MzJfdCBzaXplOwotCWNoYXIgKmJ1ZjsKLQotCWlmIChwZXJmX3Nlc3Npb25fX3JlZ2lzdGVyX2lkbGVfdGhyZWFkKHNlbGYpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcGVyZl9ldmVudF9vcHNfX2ZpbGxfZGVmYXVsdHMob3BzKTsKLQotCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0KLQloZWFkID0gc2VsZi0+aGVhZGVyLmRhdGFfb2Zmc2V0OwotCXNlbGYtPnNhbXBsZV90eXBlID0gcGVyZl9oZWFkZXJfX3NhbXBsZV90eXBlKCZzZWxmLT5oZWFkZXIpOwotCi0JZXJyID0gLUVJTlZBTDsKLQlpZiAob3BzLT5zYW1wbGVfdHlwZV9jaGVjayAmJiBvcHMtPnNhbXBsZV90eXBlX2NoZWNrKHNlbGYpIDwgMCkKLQkJZ290byBvdXRfZXJyOwotCi0JaWYgKCFvcHMtPmZ1bGxfcGF0aHMpIHsKLQkJY2hhciBiZltQQVRIX01BWF07Ci0KLQkJaWYgKGdldGN3ZChiZiwgc2l6ZW9mKGJmKSkgPT0gTlVMTCkgewotCQkJZXJyID0gLWVycm5vOwotb3V0X2dldGN3ZF9lcnI6Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4iKTsKLQkJCWdvdG8gb3V0X2VycjsKLQkJfQotCQlzZWxmLT5jd2QgPSBzdHJkdXAoYmYpOwotCQlpZiAoc2VsZi0+Y3dkID09IE5VTEwpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dF9nZXRjd2RfZXJyOwotCQl9Ci0JCXNlbGYtPmN3ZGxlbiA9IHN0cmxlbihzZWxmLT5jd2QpOwotCX0KLQotCXNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOwotCW9mZnNldCArPSBzaGlmdDsKLQloZWFkIC09IHNoaWZ0OwotCi1yZW1hcDoKLQlidWYgPSBtbWFwKE5VTEwsIHBhZ2Vfc2l6ZSAqIHNlbGYtPm1tYXBfd2luZG93LCBQUk9UX1JFQUQsCi0JCSAgIE1BUF9TSEFSRUQsIHNlbGYtPmZkLCBvZmZzZXQpOwotCWlmIChidWYgPT0gTUFQX0ZBSUxFRCkgewotCQlwcl9lcnIoImZhaWxlZCB0byBtbWFwIGZpbGVcbiIpOwotCQllcnIgPSAtZXJybm87Ci0JCWdvdG8gb3V0X2VycjsKLQl9Ci0KLW1vcmU6Ci0JZXZlbnQgPSAoZXZlbnRfdCAqKShidWYgKyBoZWFkKTsKLQotCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7Ci0JaWYgKCFzaXplKQotCQlzaXplID0gODsKLQotCWlmIChoZWFkICsgZXZlbnQtPmhlYWRlci5zaXplID49IHBhZ2Vfc2l6ZSAqIHNlbGYtPm1tYXBfd2luZG93KSB7Ci0JCWludCBtdW5tYXBfcmV0OwotCi0JCXNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOwotCi0JCW11bm1hcF9yZXQgPSBtdW5tYXAoYnVmLCBwYWdlX3NpemUgKiBzZWxmLT5tbWFwX3dpbmRvdyk7Ci0JCWFzc2VydChtdW5tYXBfcmV0ID09IDApOwotCi0JCW9mZnNldCArPSBzaGlmdDsKLQkJaGVhZCAtPSBzaGlmdDsKLQkJZ290byByZW1hcDsKLQl9Ci0KLQlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwotCi0JZHVtcF9wcmludGYoIlxuJXAgWyVwXTogZXZlbnQ6ICVkXG4iLAotCQkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCi0JCQkodm9pZCAqKShsb25nKWV2ZW50LT5oZWFkZXIuc2l6ZSwKLQkJCWV2ZW50LT5oZWFkZXIudHlwZSk7Ci0KLQlpZiAoIXNpemUgfHwgcHJvY2Vzc19ldmVudChldmVudCwgc2VsZiwgb3BzLCBvZmZzZXQsIGhlYWQpIDwgMCkgewotCi0JCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBza2lwcGluZyB1bmtub3duIGhlYWRlciB0eXBlOiAlZFxuIiwKLQkJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAotCQkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKLQkJCWV2ZW50LT5oZWFkZXIudHlwZSk7Ci0KLQkJLyoKLQkJICogYXNzdW1lIHdlIGxvc3QgdHJhY2sgb2YgdGhlIHN0cmVhbSwgY2hlY2sgYWxpZ25tZW50LCBhbmQKLQkJICogaW5jcmVtZW50IGEgc2luZ2xlIHU2NCBpbiB0aGUgaG9wZSB0byBjYXRjaCBvbiBhZ2FpbiAnc29vbicuCi0JCSAqLwotCi0JCWlmICh1bmxpa2VseShoZWFkICYgNykpCi0JCQloZWFkICY9IH43VUxMOwotCi0JCXNpemUgPSA4OwotCX0KLQotCWhlYWQgKz0gc2l6ZTsKLQotCWlmIChvZmZzZXQgKyBoZWFkID49IHNlbGYtPmhlYWRlci5kYXRhX29mZnNldCArIHNlbGYtPmhlYWRlci5kYXRhX3NpemUpCi0JCWdvdG8gZG9uZTsKLQotCWlmIChvZmZzZXQgKyBoZWFkIDwgc2VsZi0+c2l6ZSkKLQkJZ290byBtb3JlOwotCi1kb25lOgotCWVyciA9IDA7Ci1vdXRfZXJyOgotCXJldHVybiBlcnI7Ci19CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZGVidWcuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCmluZGV4IDI4ZDUyMGQuLjA5MDU2MDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgImNvbG9yLmgiCiAjaW5jbHVkZSAiZXZlbnQuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwuaCIKIAogaW50IHZlcmJvc2UgPSAwOwogaW50IGR1bXBfdHJhY2UgPSAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmMKaW5kZXggMDZiNzNlZS4uYTg4ZmVmYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuYworKysgYi90b29scy9wZXJmL3V0aWwvZGVidWdmcy5jCkBAIC0xMDYsMTYgKzEwNiwxNCBAQAogCXJldHVybiAwOwogfQogCi0vKiBtb3VudCB0aGUgZGVidWdmcyBzb21ld2hlcmUgKi8KKy8qIG1vdW50IHRoZSBkZWJ1Z2ZzIHNvbWV3aGVyZSBpZiBpdCdzIG5vdCBtb3VudGVkICovCiAKLWludCBkZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKm1vdW50cG9pbnQpCitjaGFyICpkZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKm1vdW50cG9pbnQpCiB7Ci0JY2hhciBtb3VudGNtZFsxMjhdOwotCiAJLyogc2VlIGlmIGl0J3MgYWxyZWFkeSBtb3VudGVkICovCiAJaWYgKGRlYnVnZnNfZmluZF9tb3VudHBvaW50KCkpIHsKIAkJZGVidWdmc19wcmVtb3VudGVkID0gMTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBkZWJ1Z2ZzX21vdW50cG9pbnQ7CiAJfQogCiAJLyogaWYgbm90IG1vdW50ZWQgYW5kIG5vIGFyZ3VtZW50ICovCkBAIC0xMjcsMTMgKzEyNSwxNCBAQAogCQkJbW91bnRwb2ludCA9ICIvc3lzL2tlcm5lbC9kZWJ1ZyI7CiAJfQogCisJaWYgKG1vdW50KE5VTEwsIG1vdW50cG9pbnQsICJkZWJ1Z2ZzIiwgMCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwogCS8qIHNhdmUgdGhlIG1vdW50cG9pbnQgKi8KIAlzdHJuY3B5KGRlYnVnZnNfbW91bnRwb2ludCwgbW91bnRwb2ludCwgc2l6ZW9mKGRlYnVnZnNfbW91bnRwb2ludCkpOworCWRlYnVnZnNfZm91bmQgPSAxOwogCi0JLyogbW91bnQgaXQgKi8KLQlzbnByaW50Zihtb3VudGNtZCwgc2l6ZW9mKG1vdW50Y21kKSwKLQkJICIvYmluL21vdW50IC10IGRlYnVnZnMgZGVidWdmcyAlcyIsIG1vdW50cG9pbnQpOwotCXJldHVybiBzeXN0ZW0obW91bnRjbWQpOworCXJldHVybiBkZWJ1Z2ZzX21vdW50cG9pbnQ7CiB9CiAKIC8qIHVtb3VudCB0aGUgZGVidWdmcyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmgKaW5kZXggM2NkMTRmOS4uODNhMDI4NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuaAorKysgYi90b29scy9wZXJmL3V0aWwvZGVidWdmcy5oCkBAIC0xNSw3ICsxNSw3IEBACiBleHRlcm4gY29uc3QgY2hhciAqZGVidWdmc19maW5kX21vdW50cG9pbnQodm9pZCk7CiBleHRlcm4gaW50IGRlYnVnZnNfdmFsaWRfbW91bnRwb2ludChjb25zdCBjaGFyICpkZWJ1Z2ZzKTsKIGV4dGVybiBpbnQgZGVidWdmc192YWxpZF9lbnRyeShjb25zdCBjaGFyICpwYXRoKTsKLWV4dGVybiBpbnQgZGVidWdmc19tb3VudChjb25zdCBjaGFyICptb3VudHBvaW50KTsKK2V4dGVybiBjaGFyICpkZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKm1vdW50cG9pbnQpOwogZXh0ZXJuIGludCBkZWJ1Z2ZzX3Vtb3VudCh2b2lkKTsKIGV4dGVybiBpbnQgZGVidWdmc193cml0ZShjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqdmFsdWUpOwogZXh0ZXJuIGludCBkZWJ1Z2ZzX3JlYWQoY29uc3QgY2hhciAqZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwppbmRleCBiYjBmZDZkLi43MDVlYzYzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwpAQCAtOCw4ICs4LDcgQEAKICNpbmNsdWRlICJ0aHJlYWQuaCIKIAogc3RhdGljIHBpZF90IGV2ZW50X19zeW50aGVzaXplX2NvbW0ocGlkX3QgcGlkLCBpbnQgZnVsbCwKLQkJCQkgICAgaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQsCi0JCQkJCQkgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKSwKKwkJCQkgICAgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJCSAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCWV2ZW50X3QgZXY7CkBAIC05MSw4ICs5MCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZXZlbnRfX3N5bnRoZXNpemVfbW1hcF9ldmVudHMocGlkX3QgcGlkLCBwaWRfdCB0Z2lkLAotCQkJCQkgaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQsCi0JCQkJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCisJCQkJCSBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCiAJCQkJCSBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOwpAQCAtMTEyLDcgKzExMCwxMCBAQAogCXdoaWxlICgxKSB7CiAJCWNoYXIgYmZbQlVGU0laXSwgKnBiZiA9IGJmOwogCQlldmVudF90IGV2ID0gewotCQkJLmhlYWRlciA9IHsgLnR5cGUgPSBQRVJGX1JFQ09SRF9NTUFQIH0sCisJCQkuaGVhZGVyID0geworCQkJCS50eXBlID0gUEVSRl9SRUNPUkRfTU1BUCwKKwkJCQkubWlzYyA9IDAsIC8qIEp1c3QgbGlrZSB0aGUga2VybmVsLCBzZWUga2VybmVsL3BlcmZfZXZlbnQuYyBfX3BlcmZfZXZlbnRfbW1hcCAqLworCQkJIH0sCiAJCX07CiAJCWludCBuOwogCQlzaXplX3Qgc2l6ZTsKQEAgLTE1Niw5ICsxNTcsMzggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWRfdCBwaWQsCi0JCQkgICAgIGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50LAotCQkJCQkgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfbW9kdWxlcyhldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCByYl9ub2RlICpuZDsKKworCWZvciAobmQgPSByYl9maXJzdCgmc2Vzc2lvbi0+a21hcHMubWFwc1tNQVBfX0ZVTkNUSU9OXSk7CisJICAgICBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlldmVudF90IGV2OworCQlzaXplX3Qgc2l6ZTsKKwkJc3RydWN0IG1hcCAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYXAsIHJiX25vZGUpOworCisJCWlmIChwb3MtPmRzby0+a2VybmVsKQorCQkJY29udGludWU7CisKKwkJc2l6ZSA9IEFMSUdOKHBvcy0+ZHNvLT5sb25nX25hbWVfbGVuICsgMSwgc2l6ZW9mKHU2NCkpOworCQltZW1zZXQoJmV2LCAwLCBzaXplb2YoZXYpKTsKKwkJZXYubW1hcC5oZWFkZXIubWlzYyA9IDE7IC8qIGtlcm5lbCB1c2VzIDAgZm9yIHVzZXIgc3BhY2UgbWFwcywgc2VlIGtlcm5lbC9wZXJmX2V2ZW50LmMgX19wZXJmX2V2ZW50X21tYXAgKi8KKwkJZXYubW1hcC5oZWFkZXIudHlwZSA9IFBFUkZfUkVDT1JEX01NQVA7CisJCWV2Lm1tYXAuaGVhZGVyLnNpemUgPSAoc2l6ZW9mKGV2Lm1tYXApIC0KKwkJCQkgICAgICAgIChzaXplb2YoZXYubW1hcC5maWxlbmFtZSkgLSBzaXplKSk7CisJCWV2Lm1tYXAuc3RhcnQgPSBwb3MtPnN0YXJ0OworCQlldi5tbWFwLmxlbiAgID0gcG9zLT5lbmQgLSBwb3MtPnN0YXJ0OworCisJCW1lbWNweShldi5tbWFwLmZpbGVuYW1lLCBwb3MtPmRzby0+bG9uZ19uYW1lLAorCQkgICAgICAgcG9zLT5kc28tPmxvbmdfbmFtZV9sZW4gKyAxKTsKKwkJcHJvY2VzcygmZXYsIHNlc3Npb24pOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZF90IHBpZCwgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCXBpZF90IHRnaWQgPSBldmVudF9fc3ludGhlc2l6ZV9jb21tKHBpZCwgMSwgcHJvY2Vzcywgc2Vzc2lvbik7CkBAIC0xNjcsOCArMTk3LDcgQEAKIAlyZXR1cm4gZXZlbnRfX3N5bnRoZXNpemVfbW1hcF9ldmVudHMocGlkLCB0Z2lkLCBwcm9jZXNzLCBzZXNzaW9uKTsKIH0KIAotdm9pZCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50LAotCQkJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKSwKK3ZvaWQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCiAJCQkgICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlESVIgKnByb2M7CkBAIC0xODksNiArMjE4LDU5IEBACiAJY2xvc2VkaXIocHJvYyk7CiB9CiAKK3N0cnVjdCBwcm9jZXNzX3N5bWJvbF9hcmdzIHsKKwljb25zdCBjaGFyICpuYW1lOworCXU2NAkgICBzdGFydDsKK307CisKK3N0YXRpYyBpbnQgZmluZF9zeW1ib2xfY2Iodm9pZCAqYXJnLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyIHR5cGUsIHU2NCBzdGFydCkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19zeW1ib2xfYXJncyAqYXJncyA9IGFyZzsKKworCS8qCisJICogTXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGF0IGxlYXN0IGFuIGFsaWFzLCBhcyBpbiBQQVJJU0M2NCwgd2hlcmUgIl90ZXh0IiBpcworCSAqIGFuICdBJyB0byB0aGUgc2FtZSBhZGRyZXNzIGFzICJfc3RleHQiLgorCSAqLworCWlmICghKHN5bWJvbF90eXBlX19pc19hKHR5cGUsIE1BUF9fRlVOQ1RJT04pIHx8CisJICAgICAgdHlwZSA9PSAnQScpIHx8IHN0cmNtcChuYW1lLCBhcmdzLT5uYW1lKSkKKwkJcmV0dXJuIDA7CisKKwlhcmdzLT5zdGFydCA9IHN0YXJ0OworCXJldHVybiAxOworfQorCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfa2VybmVsX21tYXAoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAorCQkJCSAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCQkgIGNvbnN0IGNoYXIgKnN5bWJvbF9uYW1lKQoreworCXNpemVfdCBzaXplOworCWV2ZW50X3QgZXYgPSB7CisJCS5oZWFkZXIgPSB7CisJCQkudHlwZSA9IFBFUkZfUkVDT1JEX01NQVAsCisJCQkubWlzYyA9IDEsIC8qIGtlcm5lbCB1c2VzIDAgZm9yIHVzZXIgc3BhY2UgbWFwcywgc2VlIGtlcm5lbC9wZXJmX2V2ZW50LmMgX19wZXJmX2V2ZW50X21tYXAgKi8KKwkJfSwKKwl9OworCS8qCisJICogV2Ugc2hvdWxkIGdldCB0aGlzIGZyb20gL3N5cy9rZXJuZWwvc2VjdGlvbnMvLnRleHQsIGJ1dCB0aWxsIHRoYXQgaXMKKwkgKiBhdmFpbGFibGUgdXNlIHRoaXMsIGFuZCBhZnRlciBpdCBpcyB1c2UgdGhpcyBhcyBhIGZhbGxiYWNrIGZvciBvbGRlcgorCSAqIGtlcm5lbHMuCisJICovCisJc3RydWN0IHByb2Nlc3Nfc3ltYm9sX2FyZ3MgYXJncyA9IHsgLm5hbWUgPSBzeW1ib2xfbmFtZSwgfTsKKworCWlmIChrYWxsc3ltc19fcGFyc2UoIi9wcm9jL2thbGxzeW1zIiwgJmFyZ3MsIGZpbmRfc3ltYm9sX2NiKSA8PSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXNpemUgPSBzbnByaW50Zihldi5tbWFwLmZpbGVuYW1lLCBzaXplb2YoZXYubW1hcC5maWxlbmFtZSksCisJCQkiW2tlcm5lbC5rYWxsc3ltcy4lc10iLCBzeW1ib2xfbmFtZSkgKyAxOworCXNpemUgPSBBTElHTihzaXplLCBzaXplb2YodTY0KSk7CisJZXYubW1hcC5oZWFkZXIuc2l6ZSA9IChzaXplb2YoZXYubW1hcCkgLSAoc2l6ZW9mKGV2Lm1tYXAuZmlsZW5hbWUpIC0gc2l6ZSkpOworCWV2Lm1tYXAucGdvZmYgPSBhcmdzLnN0YXJ0OworCWV2Lm1tYXAuc3RhcnQgPSBzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPnN0YXJ0OworCWV2Lm1tYXAubGVuICAgPSBzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPmVuZCAtIGV2Lm1tYXAuc3RhcnQgOworCisJcmV0dXJuIHByb2Nlc3MoJmV2LCBzZXNzaW9uKTsKK30KKwogc3RhdGljIHZvaWQgdGhyZWFkX19jb21tX2FkanVzdChzdHJ1Y3QgdGhyZWFkICpzZWxmKQogewogCWNoYXIgKmNvbW0gPSBzZWxmLT5jb21tOwpAQCAtMjQwLDIyICszMjIsODggQEAKIAogaW50IGV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgc2VsZi0+bW1hcC5waWQpOwotCXN0cnVjdCBtYXAgKm1hcCA9IG1hcF9fbmV3KCZzZWxmLT5tbWFwLCBNQVBfX0ZVTkNUSU9OLAotCQkJCSAgIHNlc3Npb24tPmN3ZCwgc2Vzc2lvbi0+Y3dkbGVuKTsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CisJc3RydWN0IG1hcCAqbWFwOwogCi0JZHVtcF9wcmludGYoIiAlZC8lZDogWyVwKCVwKSBAICVwXTogJXNcbiIsCi0JCSAgICBzZWxmLT5tbWFwLnBpZCwgc2VsZi0+bW1hcC50aWQsCi0JCSAgICAodm9pZCAqKShsb25nKXNlbGYtPm1tYXAuc3RhcnQsCi0JCSAgICAodm9pZCAqKShsb25nKXNlbGYtPm1tYXAubGVuLAotCQkgICAgKHZvaWQgKikobG9uZylzZWxmLT5tbWFwLnBnb2ZmLAotCQkgICAgc2VsZi0+bW1hcC5maWxlbmFtZSk7CisJZHVtcF9wcmludGYoIiAlZC8lZDogWyUjTHgoJSNMeCkgQCAlI0x4XTogJXNcbiIsCisJCSAgICBzZWxmLT5tbWFwLnBpZCwgc2VsZi0+bW1hcC50aWQsIHNlbGYtPm1tYXAuc3RhcnQsCisJCSAgICBzZWxmLT5tbWFwLmxlbiwgc2VsZi0+bW1hcC5wZ29mZiwgc2VsZi0+bW1hcC5maWxlbmFtZSk7CisKKwlpZiAoc2VsZi0+bW1hcC5waWQgPT0gMCkgeworCQlzdGF0aWMgY29uc3QgY2hhciBrbW1hcF9wcmVmaXhbXSA9ICJba2VybmVsLmthbGxzeW1zLiI7CisKKwkJaWYgKHNlbGYtPm1tYXAuZmlsZW5hbWVbMF0gPT0gJy8nKSB7CisJCQljaGFyIHNob3J0X21vZHVsZV9uYW1lWzEwMjRdOworCQkJY2hhciAqbmFtZSA9IHN0cnJjaHIoc2VsZi0+bW1hcC5maWxlbmFtZSwgJy8nKSwgKmRvdDsKKworCQkJaWYgKG5hbWUgPT0gTlVMTCkKKwkJCQlnb3RvIG91dF9wcm9ibGVtOworCisJCQkrK25hbWU7IC8qIHNraXAgLyAqLworCQkJZG90ID0gc3RycmNocihuYW1lLCAnLicpOworCQkJaWYgKGRvdCA9PSBOVUxMKQorCQkJCWdvdG8gb3V0X3Byb2JsZW07CisKKwkJCXNucHJpbnRmKHNob3J0X21vZHVsZV9uYW1lLCBzaXplb2Yoc2hvcnRfbW9kdWxlX25hbWUpLAorCQkJCSAiWyUuKnNdIiwgKGludCkoZG90IC0gbmFtZSksIG5hbWUpOworCQkJc3RyeGZyY2hhcihzaG9ydF9tb2R1bGVfbmFtZSwgJy0nLCAnXycpOworCisJCQltYXAgPSBwZXJmX3Nlc3Npb25fX25ld19tb2R1bGVfbWFwKHNlc3Npb24sCisJCQkJCQkJICAgc2VsZi0+bW1hcC5zdGFydCwKKwkJCQkJCQkgICBzZWxmLT5tbWFwLmZpbGVuYW1lKTsKKwkJCWlmIChtYXAgPT0gTlVMTCkKKwkJCQlnb3RvIG91dF9wcm9ibGVtOworCisJCQluYW1lID0gc3RyZHVwKHNob3J0X21vZHVsZV9uYW1lKTsKKwkJCWlmIChuYW1lID09IE5VTEwpCisJCQkJZ290byBvdXRfcHJvYmxlbTsKKworCQkJbWFwLT5kc28tPnNob3J0X25hbWUgPSBuYW1lOworCQkJbWFwLT5lbmQgPSBtYXAtPnN0YXJ0ICsgc2VsZi0+bW1hcC5sZW47CisJCX0gZWxzZSBpZiAobWVtY21wKHNlbGYtPm1tYXAuZmlsZW5hbWUsIGttbWFwX3ByZWZpeCwKKwkJCQlzaXplb2Yoa21tYXBfcHJlZml4KSAtIDEpID09IDApIHsKKwkJCWNvbnN0IGNoYXIgKnN5bWJvbF9uYW1lID0gKHNlbGYtPm1tYXAuZmlsZW5hbWUgKworCQkJCQkJICAgc2l6ZW9mKGttbWFwX3ByZWZpeCkgLSAxKTsKKwkJCS8qCisJCQkgKiBTaG91bGQgYmUgdGhlcmUgYWxyZWFkeSwgZnJvbSB0aGUgYnVpbGQtaWQgdGFibGUgaW4KKwkJCSAqIHRoZSBoZWFkZXIuCisJCQkgKi8KKwkJCXN0cnVjdCBkc28gKmtlcm5lbCA9IF9fZHNvc19fZmluZG5ldygmZHNvc19fa2VybmVsLAorCQkJCQkJCSAgICAgIltrZXJuZWwua2FsbHN5bXNdIik7CisJCQlpZiAoa2VybmVsID09IE5VTEwpCisJCQkJZ290byBvdXRfcHJvYmxlbTsKKworCQkJa2VybmVsLT5rZXJuZWwgPSAxOworCQkJaWYgKF9fcGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc2Vzc2lvbiwga2VybmVsKSA8IDApCisJCQkJZ290byBvdXRfcHJvYmxlbTsKKworCQkJc2Vzc2lvbi0+dm1saW51eF9tYXBzW01BUF9fRlVOQ1RJT05dLT5zdGFydCA9IHNlbGYtPm1tYXAuc3RhcnQ7CisJCQlzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPmVuZCAgID0gc2VsZi0+bW1hcC5zdGFydCArIHNlbGYtPm1tYXAubGVuOworCQkJLyoKKwkJCSAqIEJlIGEgYml0IHBhcmFub2lkIGhlcmUsIHNvbWUgcGVyZi5kYXRhIGZpbGUgY2FtZSB3aXRoCisJCQkgKiBhIHplcm8gc2l6ZWQgc3ludGhlc2l6ZWQgTU1BUCBldmVudCBmb3IgdGhlIGtlcm5lbC4KKwkJCSAqLworCQkJaWYgKHNlc3Npb24tPnZtbGludXhfbWFwc1tNQVBfX0ZVTkNUSU9OXS0+ZW5kID09IDApCisJCQkJc2Vzc2lvbi0+dm1saW51eF9tYXBzW01BUF9fRlVOQ1RJT05dLT5lbmQgPSB+MFVMOworCisJCQlwZXJmX3Nlc3Npb25fX3NldF9rYWxsc3ltc19yZWZfcmVsb2Nfc3ltKHNlc3Npb24sIHN5bWJvbF9uYW1lLAorCQkJCQkJCQkgc2VsZi0+bW1hcC5wZ29mZik7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIHNlbGYtPm1tYXAucGlkKTsKKwltYXAgPSBtYXBfX25ldygmc2VsZi0+bW1hcCwgTUFQX19GVU5DVElPTiwKKwkJICAgICAgIHNlc3Npb24tPmN3ZCwgc2Vzc2lvbi0+Y3dkbGVuKTsKIAogCWlmICh0aHJlYWQgPT0gTlVMTCB8fCBtYXAgPT0gTlVMTCkKLQkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX1JFQ09SRF9NTUFQLCBza2lwcGluZyBldmVudC5cbiIpOwotCWVsc2UKLQkJdGhyZWFkX19pbnNlcnRfbWFwKHRocmVhZCwgbWFwKTsKKwkJZ290byBvdXRfcHJvYmxlbTsKIAorCXRocmVhZF9faW5zZXJ0X21hcCh0aHJlYWQsIG1hcCk7CisJcmV0dXJuIDA7CisKK291dF9wcm9ibGVtOgorCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9SRUNPUkRfTU1BUCwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg0LDI2ICs0MzIsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbihzdHJ1Y3QgdGhyZWFkICpzZWxmLAotCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHU4IGNwdW1vZGUsCi0JCQkJZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKLQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsCi0JCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKK3ZvaWQgdGhyZWFkX19maW5kX2FkZHJfbWFwKHN0cnVjdCB0aHJlYWQgKnNlbGYsCisJCQkgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCB1OCBjcHVtb2RlLAorCQkJICAgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKKwkJCSAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCkKIHsKIAlzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcgPSAmc2VsZi0+bWc7CiAKIAlhbC0+dGhyZWFkID0gc2VsZjsKIAlhbC0+YWRkciA9IGFkZHI7CiAKLQlpZiAoY3B1bW9kZSAmIFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMKSB7CisJaWYgKGNwdW1vZGUgPT0gUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwpIHsKIAkJYWwtPmxldmVsID0gJ2snOwogCQltZyA9ICZzZXNzaW9uLT5rbWFwczsKLQl9IGVsc2UgaWYgKGNwdW1vZGUgJiBQRVJGX1JFQ09SRF9NSVNDX1VTRVIpCisJfSBlbHNlIGlmIChjcHVtb2RlID09IFBFUkZfUkVDT1JEX01JU0NfVVNFUikKIAkJYWwtPmxldmVsID0gJy4nOwogCWVsc2UgewogCQlhbC0+bGV2ZWwgPSAnSCc7CiAJCWFsLT5tYXAgPSBOVUxMOwotCQlhbC0+c3ltID0gTlVMTDsKIAkJcmV0dXJuOwogCX0KIHRyeV9hZ2FpbjoKQEAgLTMyMiwxMSArNDY4LDIxIEBACiAJCQltZyA9ICZzZXNzaW9uLT5rbWFwczsKIAkJCWdvdG8gdHJ5X2FnYWluOwogCQl9Ci0JCWFsLT5zeW0gPSBOVUxMOwotCX0gZWxzZSB7CisJfSBlbHNlCiAJCWFsLT5hZGRyID0gYWwtPm1hcC0+bWFwX2lwKGFsLT5tYXAsIGFsLT5hZGRyKTsKLQkJYWwtPnN5bSA9IG1hcF9fZmluZF9zeW1ib2woYWwtPm1hcCwgc2Vzc2lvbiwgYWwtPmFkZHIsIGZpbHRlcik7Ci0JfQorfQorCit2b2lkIHRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnNlbGYsCisJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgdTggY3B1bW9kZSwKKwkJCQllbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAorCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwKKwkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQoreworCXRocmVhZF9fZmluZF9hZGRyX21hcChzZWxmLCBzZXNzaW9uLCBjcHVtb2RlLCB0eXBlLCBhZGRyLCBhbCk7CisJaWYgKGFsLT5tYXAgIT0gTlVMTCkKKwkJYWwtPnN5bSA9IG1hcF9fZmluZF9zeW1ib2woYWwtPm1hcCwgYWwtPmFkZHIsIGZpbHRlcik7CisJZWxzZQorCQlhbC0+c3ltID0gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgZHNvX19jYWxjX2NvbF93aWR0aChzdHJ1Y3QgZHNvICpzZWxmKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCA2OTBhOTZkLi41MGE3MTMyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtMSwxMCArMSwxMCBAQAogI2lmbmRlZiBfX1BFUkZfUkVDT1JEX0gKICNkZWZpbmUgX19QRVJGX1JFQ09SRF9ICiAKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKwogI2luY2x1ZGUgIi4uL3BlcmYuaCIKLSNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgIm1hcC5oIgogCiAvKgogICogUEVSRl9TQU1QTEVfSVAgfCBQRVJGX1NBTVBMRV9USUQgfCAqCkBAIC0xMDEsNzQgKzEwMSwxOSBAQAogCiB2b2lkIGV2ZW50X19wcmludF90b3RhbHModm9pZCk7CiAKLWVudW0gbWFwX3R5cGUgewotCU1BUF9fRlVOQ1RJT04gPSAwLAotCU1BUF9fVkFSSUFCTEUsCi19OwotCi0jZGVmaW5lIE1BUF9fTlJfVFlQRVMgKE1BUF9fVkFSSUFCTEUgKyAxKQotCi1zdHJ1Y3QgbWFwIHsKLQl1bmlvbiB7Ci0JCXN0cnVjdCByYl9ub2RlCXJiX25vZGU7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQl9OwotCXU2NAkJCXN0YXJ0OwotCXU2NAkJCWVuZDsKLQllbnVtIG1hcF90eXBlCQl0eXBlOwotCXU2NAkJCXBnb2ZmOwotCXU2NAkJCSgqbWFwX2lwKShzdHJ1Y3QgbWFwICosIHU2NCk7Ci0JdTY0CQkJKCp1bm1hcF9pcCkoc3RydWN0IG1hcCAqLCB1NjQpOwotCXN0cnVjdCBkc28JCSpkc287Ci19OwotCi1zdGF0aWMgaW5saW5lIHU2NCBtYXBfX21hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKLXsKLQlyZXR1cm4gaXAgLSBtYXAtPnN0YXJ0ICsgbWFwLT5wZ29mZjsKLX0KLQotc3RhdGljIGlubGluZSB1NjQgbWFwX191bm1hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKLXsKLQlyZXR1cm4gaXAgKyBtYXAtPnN0YXJ0IC0gbWFwLT5wZ29mZjsKLX0KLQotc3RhdGljIGlubGluZSB1NjQgaWRlbnRpdHlfX21hcF9pcChzdHJ1Y3QgbWFwICptYXAgX191c2VkLCB1NjQgaXApCi17Ci0JcmV0dXJuIGlwOwotfQotCi1zdHJ1Y3Qgc3ltYm9sOwotCi10eXBlZGVmIGludCAoKnN5bWJvbF9maWx0ZXJfdCkoc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOwotCi12b2lkIG1hcF9faW5pdChzdHJ1Y3QgbWFwICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsCi0JICAgICAgIHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHBnb2ZmLCBzdHJ1Y3QgZHNvICpkc28pOwotc3RydWN0IG1hcCAqbWFwX19uZXcoc3RydWN0IG1tYXBfZXZlbnQgKmV2ZW50LCBlbnVtIG1hcF90eXBlLAotCQkgICAgIGNoYXIgKmN3ZCwgaW50IGN3ZGxlbik7Ci12b2lkIG1hcF9fZGVsZXRlKHN0cnVjdCBtYXAgKnNlbGYpOwotc3RydWN0IG1hcCAqbWFwX19jbG9uZShzdHJ1Y3QgbWFwICpzZWxmKTsKLWludCBtYXBfX292ZXJsYXAoc3RydWN0IG1hcCAqbCwgc3RydWN0IG1hcCAqcik7Ci1zaXplX3QgbWFwX19mcHJpbnRmKHN0cnVjdCBtYXAgKnNlbGYsIEZJTEUgKmZwKTsKLQogc3RydWN0IHBlcmZfc2Vzc2lvbjsKIAotaW50IG1hcF9fbG9hZChzdHJ1Y3QgbWFwICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCSAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwotc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCQkJCXU2NCBhZGRyLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKLXN0cnVjdCBzeW1ib2wgKm1hcF9fZmluZF9zeW1ib2xfYnlfbmFtZShzdHJ1Y3QgbWFwICpzZWxmLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCQkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKLXZvaWQgbWFwX19maXh1cF9zdGFydChzdHJ1Y3QgbWFwICpzZWxmKTsKLXZvaWQgbWFwX19maXh1cF9lbmQoc3RydWN0IG1hcCAqc2VsZik7Cit0eXBlZGVmIGludCAoKmV2ZW50X19oYW5kbGVyX3QpKGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIAotaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWRfdCBwaWQsCi0JCQkgICAgIGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50LAotCQkJCQkgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZF90IHBpZCwgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKLXZvaWQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhpbnQgKCpwcm9jZXNzKShldmVudF90ICpldmVudCwKLQkJCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCit2b2lkIGV2ZW50X19zeW50aGVzaXplX3RocmVhZHMoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJICAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOworaW50IGV2ZW50X19zeW50aGVzaXplX2tlcm5lbF9tbWFwKGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKKwkJCQkgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJICBjb25zdCBjaGFyICpzeW1ib2xfbmFtZSk7CitpbnQgZXZlbnRfX3N5bnRoZXNpemVfbW9kdWxlcyhldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIAogaW50IGV2ZW50X19wcm9jZXNzX2NvbW0oZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiBpbnQgZXZlbnRfX3Byb2Nlc3NfbG9zdChldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwppbmRleCA4YTBiY2E1Li42YzlhYTE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCkBAIC0xLDggKzEsMTIgQEAKKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSAiaGVhZGVyLmgiCkBAIC0xMDUsMjQgKzEwOSwyOCBAQAogc3RhdGljIGludCBldmVudF9jb3VudDsKIHN0YXRpYyBzdHJ1Y3QgcGVyZl90cmFjZV9ldmVudF90eXBlICpldmVudHM7CiAKLXZvaWQgcGVyZl9oZWFkZXJfX3B1c2hfZXZlbnQodTY0IGlkLCBjb25zdCBjaGFyICpuYW1lKQoraW50IHBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KHU2NCBpZCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlpZiAoc3RybGVuKG5hbWUpID4gTUFYX0VWRU5UX05BTUUpCiAJCXByX3dhcm5pbmcoIkV2ZW50ICVzIHdpbGwgYmUgdHJ1bmNhdGVkXG4iLCBuYW1lKTsKIAogCWlmICghZXZlbnRzKSB7CiAJCWV2ZW50cyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSkpOwotCQlpZiAoIWV2ZW50cykKLQkJCWRpZSgibm9tZW0iKTsKKwkJaWYgKGV2ZW50cyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CiAJfSBlbHNlIHsKLQkJZXZlbnRzID0gcmVhbGxvYyhldmVudHMsIChldmVudF9jb3VudCArIDEpICogc2l6ZW9mKHN0cnVjdCBwZXJmX3RyYWNlX2V2ZW50X3R5cGUpKTsKLQkJaWYgKCFldmVudHMpCi0JCQlkaWUoIm5vbWVtIik7CisJCXN0cnVjdCBwZXJmX3RyYWNlX2V2ZW50X3R5cGUgKm5ldmVudHM7CisKKwkJbmV2ZW50cyA9IHJlYWxsb2MoZXZlbnRzLCAoZXZlbnRfY291bnQgKyAxKSAqIHNpemVvZigqZXZlbnRzKSk7CisJCWlmIChuZXZlbnRzID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZXZlbnRzID0gbmV2ZW50czsKIAl9CiAJbWVtc2V0KCZldmVudHNbZXZlbnRfY291bnRdLCAwLCBzaXplb2Yoc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSkpOwogCWV2ZW50c1tldmVudF9jb3VudF0uZXZlbnRfaWQgPSBpZDsKIAlzdHJuY3B5KGV2ZW50c1tldmVudF9jb3VudF0ubmFtZSwgbmFtZSwgTUFYX0VWRU5UX05BTUUgLSAxKTsKIAlldmVudF9jb3VudCsrOworCXJldHVybiAwOwogfQogCiBjaGFyICpwZXJmX2hlYWRlcl9fZmluZF9ldmVudCh1NjQgaWQpCkBAIC0xNjksMzEgKzE3Nyw0OCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBpbnQgZmQpCi17Ci0jZGVmaW5lIE5BTUVfQUxJR04JNjQKLQlzdHJ1Y3QgZHNvICpwb3M7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgemVyb19idWZbTkFNRV9BTElHTl07CisjZGVmaW5lIE5BTUVfQUxJR04gNjQKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKSB7CitzdGF0aWMgaW50IHdyaXRlX3BhZGRlZChpbnQgZmQsIGNvbnN0IHZvaWQgKmJmLCBzaXplX3QgY291bnQsCisJCQlzaXplX3QgY291bnRfYWxpZ25lZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciB6ZXJvX2J1ZltOQU1FX0FMSUdOXTsKKwlpbnQgZXJyID0gZG9fd3JpdGUoZmQsIGJmLCBjb3VudCk7CisKKwlpZiAoIWVycikKKwkJZXJyID0gZG9fd3JpdGUoZmQsIHplcm9fYnVmLCBjb3VudF9hbGlnbmVkIC0gY291bnQpOworCisJcmV0dXJuIGVycjsKK30KKworI2RlZmluZSBkc29zX19mb3JfZWFjaF93aXRoX2J1aWxkX2lkKHBvcywgaGVhZCkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKQlcCisJCWlmICghcG9zLT5oYXNfYnVpbGRfaWQpCQlcCisJCQljb250aW51ZTsJCVwKKwkJZWxzZQorCitzdGF0aWMgaW50IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB1MTYgbWlzYywgaW50IGZkKQoreworCXN0cnVjdCBkc28gKnBvczsKKworCWRzb3NfX2Zvcl9lYWNoX3dpdGhfYnVpbGRfaWQocG9zLCBoZWFkKSB7CiAJCWludCBlcnI7CiAJCXN0cnVjdCBidWlsZF9pZF9ldmVudCBiOwogCQlzaXplX3QgbGVuOwogCi0JCWlmICghcG9zLT5oYXNfYnVpbGRfaWQpCisJCWlmICghcG9zLT5oaXQpCiAJCQljb250aW51ZTsKIAkJbGVuID0gcG9zLT5sb25nX25hbWVfbGVuICsgMTsKIAkJbGVuID0gQUxJR04obGVuLCBOQU1FX0FMSUdOKTsKIAkJbWVtc2V0KCZiLCAwLCBzaXplb2YoYikpOwogCQltZW1jcHkoJmIuYnVpbGRfaWQsIHBvcy0+YnVpbGRfaWQsIHNpemVvZihwb3MtPmJ1aWxkX2lkKSk7CisJCWIuaGVhZGVyLm1pc2MgPSBtaXNjOwogCQliLmhlYWRlci5zaXplID0gc2l6ZW9mKGIpICsgbGVuOwogCQllcnIgPSBkb193cml0ZShmZCwgJmIsIHNpemVvZihiKSk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKLQkJZXJyID0gZG9fd3JpdGUoZmQsIHBvcy0+bG9uZ19uYW1lLCBwb3MtPmxvbmdfbmFtZV9sZW4gKyAxKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCQllcnIgPSBkb193cml0ZShmZCwgemVyb19idWYsIGxlbiAtIHBvcy0+bG9uZ19uYW1lX2xlbiAtIDEpOworCQllcnIgPSB3cml0ZV9wYWRkZWQoZmQsIHBvcy0+bG9uZ19uYW1lLAorCQkJCSAgIHBvcy0+bG9uZ19uYW1lX2xlbiArIDEsIGxlbik7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0yMDMsMTIgKzIyOCwxNDMgQEAKIAogc3RhdGljIGludCBkc29zX193cml0ZV9idWlsZGlkX3RhYmxlKGludCBmZCkKIHsKLQlpbnQgZXJyID0gX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKCZkc29zX19rZXJuZWwsIGZkKTsKKwlpbnQgZXJyID0gX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKCZkc29zX19rZXJuZWwsCisJCQkJCSAgICAgIFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMLCBmZCk7CiAJaWYgKGVyciA9PSAwKQotCQllcnIgPSBfX2Rzb3NfX3dyaXRlX2J1aWxkaWRfdGFibGUoJmRzb3NfX3VzZXIsIGZkKTsKKwkJZXJyID0gX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKCZkc29zX191c2VyLAorCQkJCQkJICBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsIGZkKTsKIAlyZXR1cm4gZXJyOwogfQogCitpbnQgYnVpbGRfaWRfY2FjaGVfX2FkZF9zKGNvbnN0IGNoYXIgKnNidWlsZF9pZCwgY29uc3QgY2hhciAqZGVidWdkaXIsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfa2FsbHN5bXMpCit7CisJY29uc3Qgc2l6ZV90IHNpemUgPSBQQVRIX01BWDsKKwljaGFyICpmaWxlbmFtZSA9IG1hbGxvYyhzaXplKSwKKwkgICAgICpsaW5rbmFtZSA9IG1hbGxvYyhzaXplKSwgKnRhcmdldG5hbWU7CisJaW50IGxlbiwgZXJyID0gLTE7CisKKwlpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCBsaW5rbmFtZSA9PSBOVUxMKQorCQlnb3RvIG91dF9mcmVlOworCisJbGVuID0gc25wcmludGYoZmlsZW5hbWUsIHNpemUsICIlcyVzJXMiLAorCQkgICAgICAgZGVidWdkaXIsIGlzX2thbGxzeW1zID8gIi8iIDogIiIsIG5hbWUpOworCWlmIChta2Rpcl9wKGZpbGVuYW1lLCAwNzU1KSkKKwkJZ290byBvdXRfZnJlZTsKKworCXNucHJpbnRmKGZpbGVuYW1lICsgbGVuLCBzaXplb2YoZmlsZW5hbWUpIC0gbGVuLCAiLyVzIiwgc2J1aWxkX2lkKTsKKworCWlmIChhY2Nlc3MoZmlsZW5hbWUsIEZfT0spKSB7CisJCWlmIChpc19rYWxsc3ltcykgeworCQkJIGlmIChjb3B5ZmlsZSgiL3Byb2Mva2FsbHN5bXMiLCBmaWxlbmFtZSkpCisJCQkJZ290byBvdXRfZnJlZTsKKwkJfSBlbHNlIGlmIChsaW5rKG5hbWUsIGZpbGVuYW1lKSAmJiBjb3B5ZmlsZShuYW1lLCBmaWxlbmFtZSkpCisJCQlnb3RvIG91dF9mcmVlOworCX0KKworCWxlbiA9IHNucHJpbnRmKGxpbmtuYW1lLCBzaXplLCAiJXMvLmJ1aWxkLWlkLyUuMnMiLAorCQkgICAgICAgZGVidWdkaXIsIHNidWlsZF9pZCk7CisKKwlpZiAoYWNjZXNzKGxpbmtuYW1lLCBYX09LKSAmJiBta2Rpcl9wKGxpbmtuYW1lLCAwNzU1KSkKKwkJZ290byBvdXRfZnJlZTsKKworCXNucHJpbnRmKGxpbmtuYW1lICsgbGVuLCBzaXplIC0gbGVuLCAiLyVzIiwgc2J1aWxkX2lkICsgMik7CisJdGFyZ2V0bmFtZSA9IGZpbGVuYW1lICsgc3RybGVuKGRlYnVnZGlyKSAtIDU7CisJbWVtY3B5KHRhcmdldG5hbWUsICIuLi8uLiIsIDUpOworCisJaWYgKHN5bWxpbmsodGFyZ2V0bmFtZSwgbGlua25hbWUpID09IDApCisJCWVyciA9IDA7CitvdXRfZnJlZToKKwlmcmVlKGZpbGVuYW1lKTsKKwlmcmVlKGxpbmtuYW1lKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJ1aWxkX2lkX2NhY2hlX19hZGRfYihjb25zdCB1OCAqYnVpbGRfaWQsIHNpemVfdCBidWlsZF9pZF9zaXplLAorCQkJCSBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZWJ1Z2RpciwKKwkJCQkgYm9vbCBpc19rYWxsc3ltcykKK3sKKwljaGFyIHNidWlsZF9pZFtCVUlMRF9JRF9TSVpFICogMiArIDFdOworCisJYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIGJ1aWxkX2lkX3NpemUsIHNidWlsZF9pZCk7CisKKwlyZXR1cm4gYnVpbGRfaWRfY2FjaGVfX2FkZF9zKHNidWlsZF9pZCwgZGVidWdkaXIsIG5hbWUsIGlzX2thbGxzeW1zKTsKK30KKworaW50IGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCWNvbnN0IHNpemVfdCBzaXplID0gUEFUSF9NQVg7CisJY2hhciAqZmlsZW5hbWUgPSBtYWxsb2Moc2l6ZSksCisJICAgICAqbGlua25hbWUgPSBtYWxsb2Moc2l6ZSk7CisJaW50IGVyciA9IC0xOworCisJaWYgKGZpbGVuYW1lID09IE5VTEwgfHwgbGlua25hbWUgPT0gTlVMTCkKKwkJZ290byBvdXRfZnJlZTsKKworCXNucHJpbnRmKGxpbmtuYW1lLCBzaXplLCAiJXMvLmJ1aWxkLWlkLyUuMnMvJXMiLAorCQkgZGVidWdkaXIsIHNidWlsZF9pZCwgc2J1aWxkX2lkICsgMik7CisKKwlpZiAoYWNjZXNzKGxpbmtuYW1lLCBGX09LKSkKKwkJZ290byBvdXRfZnJlZTsKKworCWlmIChyZWFkbGluayhsaW5rbmFtZSwgZmlsZW5hbWUsIHNpemUpIDwgMCkKKwkJZ290byBvdXRfZnJlZTsKKworCWlmICh1bmxpbmsobGlua25hbWUpKQorCQlnb3RvIG91dF9mcmVlOworCisJLyoKKwkgKiBTaW5jZSB0aGUgbGluayBpcyByZWxhdGl2ZSwgd2UgbXVzdCBtYWtlIGl0IGFic29sdXRlOgorCSAqLworCXNucHJpbnRmKGxpbmtuYW1lLCBzaXplLCAiJXMvLmJ1aWxkLWlkLyUuMnMvJXMiLAorCQkgZGVidWdkaXIsIHNidWlsZF9pZCwgZmlsZW5hbWUpOworCisJaWYgKHVubGluayhsaW5rbmFtZSkpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwllcnIgPSAwOworb3V0X2ZyZWU6CisJZnJlZShmaWxlbmFtZSk7CisJZnJlZShsaW5rbmFtZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBkc29fX2NhY2hlX2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCWJvb2wgaXNfa2FsbHN5bXMgPSBzZWxmLT5rZXJuZWwgJiYgc2VsZi0+bG9uZ19uYW1lWzBdICE9ICcvJzsKKworCXJldHVybiBidWlsZF9pZF9jYWNoZV9fYWRkX2Ioc2VsZi0+YnVpbGRfaWQsIHNpemVvZihzZWxmLT5idWlsZF9pZCksCisJCQkJICAgICBzZWxmLT5sb25nX25hbWUsIGRlYnVnZGlyLCBpc19rYWxsc3ltcyk7Cit9CisKK3N0YXRpYyBpbnQgX19kc29zX19jYWNoZV9idWlsZF9pZHMoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgY29uc3QgY2hhciAqZGVidWdkaXIpCit7CisJc3RydWN0IGRzbyAqcG9zOworCWludCBlcnIgPSAwOworCisJZHNvc19fZm9yX2VhY2hfd2l0aF9idWlsZF9pZChwb3MsIGhlYWQpCisJCWlmIChkc29fX2NhY2hlX2J1aWxkX2lkKHBvcywgZGVidWdkaXIpKQorCQkJZXJyID0gLTE7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGRzb3NfX2NhY2hlX2J1aWxkX2lkcyh2b2lkKQoreworCWludCBlcnJfa2VybmVsLCBlcnJfdXNlcjsKKwljaGFyIGRlYnVnZGlyW1BBVEhfTUFYXTsKKworCXNucHJpbnRmKGRlYnVnZGlyLCBzaXplb2YoZGVidWdkaXIpLCAiJXMvJXMiLCBnZXRlbnYoIkhPTUUiKSwKKwkJIERFQlVHX0NBQ0hFX0RJUik7CisKKwlpZiAobWtkaXIoZGVidWdkaXIsIDA3NTUpICE9IDAgJiYgZXJybm8gIT0gRUVYSVNUKQorCQlyZXR1cm4gLTE7CisKKwllcnJfa2VybmVsID0gX19kc29zX19jYWNoZV9idWlsZF9pZHMoJmRzb3NfX2tlcm5lbCwgZGVidWdkaXIpOworCWVycl91c2VyICAgPSBfX2Rzb3NfX2NhY2hlX2J1aWxkX2lkcygmZHNvc19fdXNlciwgZGVidWdkaXIpOworCXJldHVybiBlcnJfa2VybmVsIHx8IGVycl91c2VyID8gLTEgOiAwOworfQorCiBzdGF0aWMgaW50IHBlcmZfaGVhZGVyX19hZGRzX3dyaXRlKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZkKQogewogCWludCBucl9zZWN0aW9uczsKQEAgLTIxNyw3ICszNzMsNyBAQAogCXU2NCBzZWNfc3RhcnQ7CiAJaW50IGlkeCA9IDAsIGVycjsKIAotCWlmIChkc29zX19yZWFkX2J1aWxkX2lkcygpKQorCWlmIChkc29zX19yZWFkX2J1aWxkX2lkcyh0cnVlKSkKIAkJcGVyZl9oZWFkZXJfX3NldF9mZWF0KHNlbGYsIEhFQURFUl9CVUlMRF9JRCk7CiAKIAlucl9zZWN0aW9ucyA9IGJpdG1hcF93ZWlnaHQoc2VsZi0+YWRkc19mZWF0dXJlcywgSEVBREVSX0ZFQVRfQklUUyk7CkBAIC0yNTcsNyArNDEzLDkgQEAKIAkJCXByX2RlYnVnKCJmYWlsZWQgdG8gd3JpdGUgYnVpbGRpZCB0YWJsZVxuIik7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9Ci0JCWJ1aWxkaWRfc2VjLT5zaXplID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKSAtIGJ1aWxkaWRfc2VjLT5vZmZzZXQ7CisJCWJ1aWxkaWRfc2VjLT5zaXplID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKSAtCisJCQkJCSAgYnVpbGRpZF9zZWMtPm9mZnNldDsKKwkJZHNvc19fY2FjaGVfYnVpbGRfaWRzKCk7CiAJfQogCiAJbHNlZWsoZmQsIHNlY19zdGFydCwgU0VFS19TRVQpOwpAQCAtMzYwLDMwICs1MTgsNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZG9fcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCitzdGF0aWMgaW50IGRvX3JlYWQoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBzaXplKQogewogCXdoaWxlIChzaXplKSB7CiAJCWludCByZXQgPSByZWFkKGZkLCBidWYsIHNpemUpOwogCi0JCWlmIChyZXQgPCAwKQotCQkJZGllKCJmYWlsZWQgdG8gcmVhZCIpOwotCQlpZiAocmV0ID09IDApCi0JCQlkaWUoImZhaWxlZCB0byByZWFkOiBtaXNzaW5nIGRhdGEiKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJcmV0dXJuIC0xOwogCiAJCXNpemUgLT0gcmV0OwogCQlidWYgKz0gcmV0OwogCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBlcmZfaGVhZGVyX19nZXRidWZmZXI2NChzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsCisJCQkJICAgIGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoZG9fcmVhZChmZCwgYnVmLCBzaXplKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHNlbGYtPm5lZWRzX3N3YXApCisJCW1lbV9ic3dhcF82NChidWYsIHNpemUpOworCisJcmV0dXJuIDA7CiB9CiAKIGludCBwZXJmX2hlYWRlcl9fcHJvY2Vzc19zZWN0aW9ucyhzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZCwKIAkJCQkgIGludCAoKnByb2Nlc3MpKHN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqc2VsZiwKKwkJCQkJCSBzdHJ1Y3QgcGVyZl9oZWFkZXIgKnBoLAogCQkJCQkJIGludCBmZWF0LCBpbnQgZmQpKQogewogCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqZmVhdF9zZWM7CiAJaW50IG5yX3NlY3Rpb25zOwogCWludCBzZWNfc2l6ZTsKIAlpbnQgaWR4ID0gMDsKLQlpbnQgZXJyID0gMCwgZmVhdCA9IDE7CisJaW50IGVyciA9IC0xLCBmZWF0ID0gMTsKIAogCW5yX3NlY3Rpb25zID0gYml0bWFwX3dlaWdodChzZWxmLT5hZGRzX2ZlYXR1cmVzLCBIRUFERVJfRkVBVF9CSVRTKTsKIAlpZiAoIW5yX3NlY3Rpb25zKQpAQCAtMzk3LDMzICs1NjgsNDUgQEAKIAogCWxzZWVrKGZkLCBzZWxmLT5kYXRhX29mZnNldCArIHNlbGYtPmRhdGFfc2l6ZSwgU0VFS19TRVQpOwogCi0JZG9fcmVhZChmZCwgZmVhdF9zZWMsIHNlY19zaXplKTsKKwlpZiAocGVyZl9oZWFkZXJfX2dldGJ1ZmZlcjY0KHNlbGYsIGZkLCBmZWF0X3NlYywgc2VjX3NpemUpKQorCQlnb3RvIG91dF9mcmVlOwogCisJZXJyID0gMDsKIAl3aGlsZSAoaWR4IDwgbnJfc2VjdGlvbnMgJiYgZmVhdCA8IEhFQURFUl9MQVNUX0ZFQVRVUkUpIHsKIAkJaWYgKHBlcmZfaGVhZGVyX19oYXNfZmVhdChzZWxmLCBmZWF0KSkgewogCQkJc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uICpzZWMgPSAmZmVhdF9zZWNbaWR4KytdOwogCi0JCQllcnIgPSBwcm9jZXNzKHNlYywgZmVhdCwgZmQpOworCQkJZXJyID0gcHJvY2VzcyhzZWMsIHNlbGYsIGZlYXQsIGZkKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJCSsrZmVhdDsKIAl9Ci0KK291dF9mcmVlOgogCWZyZWUoZmVhdF9zZWMpOwogCXJldHVybiBlcnI7Ci19OworfQogCiBpbnQgcGVyZl9maWxlX2hlYWRlcl9fcmVhZChzdHJ1Y3QgcGVyZl9maWxlX2hlYWRlciAqc2VsZiwKIAkJCSAgIHN0cnVjdCBwZXJmX2hlYWRlciAqcGgsIGludCBmZCkKIHsKIAlsc2VlayhmZCwgMCwgU0VFS19TRVQpOwotCWRvX3JlYWQoZmQsIHNlbGYsIHNpemVvZigqc2VsZikpOwogCi0JaWYgKHNlbGYtPm1hZ2ljICAgICAhPSBQRVJGX01BR0lDIHx8Ci0JICAgIHNlbGYtPmF0dHJfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHBlcmZfZmlsZV9hdHRyKSkKKwlpZiAoZG9fcmVhZChmZCwgc2VsZiwgc2l6ZW9mKCpzZWxmKSkgfHwKKwkgICAgbWVtY21wKCZzZWxmLT5tYWdpYywgX19wZXJmX21hZ2ljLCBzaXplb2Yoc2VsZi0+bWFnaWMpKSkKIAkJcmV0dXJuIC0xOwogCisJaWYgKHNlbGYtPmF0dHJfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHBlcmZfZmlsZV9hdHRyKSkgeworCQl1NjQgYXR0cl9zaXplID0gYnN3YXBfNjQoc2VsZi0+YXR0cl9zaXplKTsKKworCQlpZiAoYXR0cl9zaXplICE9IHNpemVvZihzdHJ1Y3QgcGVyZl9maWxlX2F0dHIpKQorCQkJcmV0dXJuIC0xOworCisJCW1lbV9ic3dhcF82NChzZWxmLCBvZmZzZXRvZihzdHJ1Y3QgcGVyZl9maWxlX2hlYWRlciwKKwkJCQkJICAgIGFkZHNfZmVhdHVyZXMpKTsKKwkJcGgtPm5lZWRzX3N3YXAgPSB0cnVlOworCX0KKwogCWlmIChzZWxmLT5zaXplICE9IHNpemVvZigqc2VsZikpIHsKIAkJLyogU3VwcG9ydCB0aGUgcHJldmlvdXMgZm9ybWF0ICovCiAJCWlmIChzZWxmLT5zaXplID09IG9mZnNldG9mKHR5cGVvZigqc2VsZiksIGFkZHNfZmVhdHVyZXMpKQpAQCAtNDMzLDE5ICs2MTYsMzEgQEAKIAl9CiAKIAltZW1jcHkoJnBoLT5hZGRzX2ZlYXR1cmVzLCAmc2VsZi0+YWRkc19mZWF0dXJlcywKLQkgICAgICAgc2l6ZW9mKHNlbGYtPmFkZHNfZmVhdHVyZXMpKTsKKwkgICAgICAgc2l6ZW9mKHBoLT5hZGRzX2ZlYXR1cmVzKSk7CisJLyoKKwkgKiBGSVhNRTogaGFjayB0aGF0IGFzc3VtZXMgdGhhdCBpZiB3ZSBuZWVkIHN3YXAgdGhlIHBlcmYuZGF0YSBmaWxlCisJICogbWF5IGJlIGNvbWluZyBmcm9tIGFuIGFyY2ggd2l0aCBhIGRpZmZlcmVudCB3b3JkLXNpemUsIGVyZ28gZGlmZmVyZW50CisJICogREVGSU5FX0JJVE1BUCBmb3JtYXQsIGludmVzdGlnYXRlIG1vcmUgbGF0ZXIsIGJ1dCBmb3Igbm93IGl0cyBtb3N0bHkKKwkgKiBzYWZlIHRvIGFzc3VtZSB0aGF0IHdlIGhhdmUgYSBidWlsZC1pZCBzZWN0aW9uLiBUcmFjZSBmaWxlcyBwcm9iYWJseQorCSAqIGhhdmUgc2V2ZXJhbCBvdGhlciBpc3N1ZXMgaW4gdGhpcyByZWFsbSBhbnl3YXkuLi4KKwkgKi8KKwlpZiAocGgtPm5lZWRzX3N3YXApIHsKKwkJbWVtc2V0KCZwaC0+YWRkc19mZWF0dXJlcywgMCwgc2l6ZW9mKHBoLT5hZGRzX2ZlYXR1cmVzKSk7CisJCXBlcmZfaGVhZGVyX19zZXRfZmVhdChwaCwgSEVBREVSX0JVSUxEX0lEKTsKKwl9CiAKIAlwaC0+ZXZlbnRfb2Zmc2V0ID0gc2VsZi0+ZXZlbnRfdHlwZXMub2Zmc2V0OwotCXBoLT5ldmVudF9zaXplCSA9IHNlbGYtPmV2ZW50X3R5cGVzLnNpemU7Ci0JcGgtPmRhdGFfb2Zmc2V0CSA9IHNlbGYtPmRhdGEub2Zmc2V0OworCXBoLT5ldmVudF9zaXplICAgPSBzZWxmLT5ldmVudF90eXBlcy5zaXplOworCXBoLT5kYXRhX29mZnNldCAgPSBzZWxmLT5kYXRhLm9mZnNldDsKIAlwaC0+ZGF0YV9zaXplCSA9IHNlbGYtPmRhdGEuc2l6ZTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwZXJmX2ZpbGVfc2VjdGlvbl9fcHJvY2VzcyhzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24gKnNlbGYsCisJCQkJICAgICAgc3RydWN0IHBlcmZfaGVhZGVyICpwaCwKIAkJCQkgICAgICBpbnQgZmVhdCwgaW50IGZkKQogewotCWlmIChsc2VlayhmZCwgc2VsZi0+b2Zmc2V0LCBTRUVLX1NFVCkgPCAwKSB7CisJaWYgKGxzZWVrKGZkLCBzZWxmLT5vZmZzZXQsIFNFRUtfU0VUKSA9PSAob2ZmX3QpLTEpIHsKIAkJcHJfZGVidWcoIkZhaWxlZCB0byBsc2VlayB0byAlTGQgb2Zmc2V0IGZvciBmZWF0dXJlICVkLCAiCiAJCQkgImNvbnRpbnVpbmcuLi5cbiIsIHNlbGYtPm9mZnNldCwgZmVhdCk7CiAJCXJldHVybiAwOwpAQCAtNDU3LDcgKzY1Miw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBIRUFERVJfQlVJTERfSUQ6Ci0JCWlmIChwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMoZmQsIHNlbGYtPm9mZnNldCwgc2VsZi0+c2l6ZSkpCisJCWlmIChwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMocGgsIGZkLCBzZWxmLT5vZmZzZXQsIHNlbGYtPnNpemUpKQogCQkJcHJfZGVidWcoIkZhaWxlZCB0byByZWFkIGJ1aWxkaWRzLCBjb250aW51aW5nLi4uXG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTQ2OSw3ICs2NjQsNyBAQAogCiBpbnQgcGVyZl9oZWFkZXJfX3JlYWQoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgZmQpCiB7Ci0Jc3RydWN0IHBlcmZfZmlsZV9oZWFkZXIgZl9oZWFkZXI7CisJc3RydWN0IHBlcmZfZmlsZV9oZWFkZXIJZl9oZWFkZXI7CiAJc3RydWN0IHBlcmZfZmlsZV9hdHRyCWZfYXR0cjsKIAl1NjQJCQlmX2lkOwogCWludCBucl9hdHRycywgbnJfaWRzLCBpLCBqOwpAQCAtNDg2LDcgKzY4MSw5IEBACiAJCXN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICphdHRyOwogCQlvZmZfdCB0bXA7CiAKLQkJZG9fcmVhZChmZCwgJmZfYXR0ciwgc2l6ZW9mKGZfYXR0cikpOworCQlpZiAocGVyZl9oZWFkZXJfX2dldGJ1ZmZlcjY0KHNlbGYsIGZkLCAmZl9hdHRyLCBzaXplb2YoZl9hdHRyKSkpCisJCQlnb3RvIG91dF9lcnJubzsKKwogCQl0bXAgPSBsc2VlayhmZCwgMCwgU0VFS19DVVIpOwogCiAJCWF0dHIgPSBwZXJmX2hlYWRlcl9hdHRyX19uZXcoJmZfYXR0ci5hdHRyKTsKQEAgLTQ5Nyw3ICs2OTQsOCBAQAogCQlsc2VlayhmZCwgZl9hdHRyLmlkcy5vZmZzZXQsIFNFRUtfU0VUKTsKIAogCQlmb3IgKGogPSAwOyBqIDwgbnJfaWRzOyBqKyspIHsKLQkJCWRvX3JlYWQoZmQsICZmX2lkLCBzaXplb2YoZl9pZCkpOworCQkJaWYgKHBlcmZfaGVhZGVyX19nZXRidWZmZXI2NChzZWxmLCBmZCwgJmZfaWQsIHNpemVvZihmX2lkKSkpCisJCQkJZ290byBvdXRfZXJybm87CiAKIAkJCWlmIChwZXJmX2hlYWRlcl9hdHRyX19hZGRfaWQoYXR0ciwgZl9pZCkgPCAwKSB7CiAJCQkJcGVyZl9oZWFkZXJfYXR0cl9fZGVsZXRlKGF0dHIpOwpAQCAtNTE3LDcgKzcxNSw5IEBACiAJCWV2ZW50cyA9IG1hbGxvYyhmX2hlYWRlci5ldmVudF90eXBlcy5zaXplKTsKIAkJaWYgKGV2ZW50cyA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWRvX3JlYWQoZmQsIGV2ZW50cywgZl9oZWFkZXIuZXZlbnRfdHlwZXMuc2l6ZSk7CisJCWlmIChwZXJmX2hlYWRlcl9fZ2V0YnVmZmVyNjQoc2VsZiwgZmQsIGV2ZW50cywKKwkJCQkJICAgICBmX2hlYWRlci5ldmVudF90eXBlcy5zaXplKSkKKwkJCWdvdG8gb3V0X2Vycm5vOwogCQlldmVudF9jb3VudCA9ICBmX2hlYWRlci5ldmVudF90eXBlcy5zaXplIC8gc2l6ZW9mKHN0cnVjdCBwZXJmX3RyYWNlX2V2ZW50X3R5cGUpOwogCX0KIApAQCAtNTI3LDYgKzcyNyw4IEBACiAKIAlzZWxmLT5mcm96ZW4gPSAxOwogCXJldHVybiAwOworb3V0X2Vycm5vOgorCXJldHVybiAtZXJybm87CiB9CiAKIHU2NCBwZXJmX2hlYWRlcl9fc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXIpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmggYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKaW5kZXggZDExOGQwNS4uODJhNmFmNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaApAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzdGRib29sLmg+CiAjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJldmVudC5oIgogCiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAKQEAgLTUyLDYgKzUzLDcgQEAKIAl1NjQJCQlkYXRhX3NpemU7CiAJdTY0CQkJZXZlbnRfb2Zmc2V0OwogCXU2NAkJCWV2ZW50X3NpemU7CisJYm9vbAkJCW5lZWRzX3N3YXA7CiAJREVDTEFSRV9CSVRNQVAoYWRkc19mZWF0dXJlcywgSEVBREVSX0ZFQVRfQklUUyk7CiB9OwogCkBAIC02NCw3ICs2Niw3IEBACiBpbnQgcGVyZl9oZWFkZXJfX2FkZF9hdHRyKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwKIAkJCSAgc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKmF0dHIpOwogCi12b2lkIHBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KHU2NCBpZCwgY29uc3QgY2hhciAqbmFtZSk7CitpbnQgcGVyZl9oZWFkZXJfX3B1c2hfZXZlbnQodTY0IGlkLCBjb25zdCBjaGFyICpuYW1lKTsKIGNoYXIgKnBlcmZfaGVhZGVyX19maW5kX2V2ZW50KHU2NCBpZCk7CiAKIHN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICpwZXJmX2hlYWRlcl9hdHRyX19uZXcoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cik7CkBAIC04MCw2ICs4MiwxMSBAQAogCiBpbnQgcGVyZl9oZWFkZXJfX3Byb2Nlc3Nfc2VjdGlvbnMoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgZmQsCiAJCQkJICBpbnQgKCpwcm9jZXNzKShzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24gKnNlbGYsCisJCQkJCQkgc3RydWN0IHBlcmZfaGVhZGVyICpwaCwKIAkJCQkJCSBpbnQgZmVhdCwgaW50IGZkKSk7CiAKK2ludCBidWlsZF9pZF9jYWNoZV9fYWRkX3MoY29uc3QgY2hhciAqc2J1aWxkX2lkLCBjb25zdCBjaGFyICpkZWJ1Z2RpciwKKwkJCSAgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBpc19rYWxsc3ltcyk7CitpbnQgYnVpbGRfaWRfY2FjaGVfX3JlbW92ZV9zKGNvbnN0IGNoYXIgKnNidWlsZF9pZCwgY29uc3QgY2hhciAqZGVidWdkaXIpOworCiAjZW5kaWYgLyogX19QRVJGX0hFQURFUl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9oYXNoLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9oYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxZjU3MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2hhc2guaApAQCAtMCwwICsxLDUgQEAKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2hhc2guaCIKKworI2lmbmRlZiBQRVJGX0hBU0hfSAorI2RlZmluZSBQRVJGX0hBU0hfSAorI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDIxYzAyNzQuLmYyNjExNjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xMDEsNSArMTAxLDYgQEAKIAllcHJpbnRmKG4sIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBwcl9kZWJ1ZzIoZm10LCAuLi4pIHByX2RlYnVnTigyLCBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgcHJfZGVidWczKGZtdCwgLi4uKSBwcl9kZWJ1Z04oMywgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIHByX2RlYnVnNChmbXQsIC4uLikgcHJfZGVidWdOKDQsIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYwppbmRleCBjNGQ1NWEwLi5lNTA5Y2Q1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvbWFwLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hcC5jCkBAIC01LDYgKzUsMTEgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImRlYnVnLmgiCiAKK2NvbnN0IGNoYXIgKm1hcF90eXBlX19uYW1lW01BUF9fTlJfVFlQRVNdID0geworCVtNQVBfX0ZVTkNUSU9OXSA9ICJGdW5jdGlvbnMiLAorCVtNQVBfX1ZBUklBQkxFXSA9ICJWYXJpYWJsZXMiLAorfTsKKwogc3RhdGljIGlubGluZSBpbnQgaXNfYW5vbl9tZW1vcnkoY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAJcmV0dXJuIHN0cmNtcChmaWxlbmFtZSwgIi8vYW5vbiIpID09IDA7CkBAIC02OCw4ICs3MywxMyBAQAogCQltYXBfX2luaXQoc2VsZiwgdHlwZSwgZXZlbnQtPnN0YXJ0LCBldmVudC0+c3RhcnQgKyBldmVudC0+bGVuLAogCQkJICBldmVudC0+cGdvZmYsIGRzbyk7CiAKLQkJaWYgKHNlbGYtPmRzbyA9PSB2ZHNvIHx8IGFub24pCisJCWlmIChhbm9uKSB7CitzZXRfaWRlbnRpdHk6CiAJCQlzZWxmLT5tYXBfaXAgPSBzZWxmLT51bm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7CisJCX0gZWxzZSBpZiAoc3RyY21wKGZpbGVuYW1lLCAiW3Zkc29dIikgPT0gMCkgeworCQkJZHNvX19zZXRfbG9hZGVkKGRzbywgc2VsZi0+dHlwZSk7CisJCQlnb3RvIHNldF9pZGVudGl0eTsKKwkJfQogCX0KIAlyZXR1cm4gc2VsZjsKIG91dF9kZWxldGU6CkBAIC0xMDQsOCArMTE0LDcgQEAKIAogI2RlZmluZSBEU09fX0RFTEVURUQgIihkZWxldGVkKSIKIAotaW50IG1hcF9fbG9hZChzdHJ1Y3QgbWFwICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCSAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCitpbnQgbWFwX19sb2FkKHN0cnVjdCBtYXAgKnNlbGYsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJY29uc3QgY2hhciAqbmFtZSA9IHNlbGYtPmRzby0+bG9uZ19uYW1lOwogCWludCBucjsKQEAgLTExMyw3ICsxMjIsNyBAQAogCWlmIChkc29fX2xvYWRlZChzZWxmLT5kc28sIHNlbGYtPnR5cGUpKQogCQlyZXR1cm4gMDsKIAotCW5yID0gZHNvX19sb2FkKHNlbGYtPmRzbywgc2VsZiwgc2Vzc2lvbiwgZmlsdGVyKTsKKwluciA9IGRzb19fbG9hZChzZWxmLT5kc28sIHNlbGYsIGZpbHRlcik7CiAJaWYgKG5yIDwgMCkgewogCQlpZiAoc2VsZi0+ZHNvLT5oYXNfYnVpbGRfaWQpIHsKIAkJCWNoYXIgc2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CkBAIC0xNDQsMjQgKzE1MywyOSBAQAogCiAJCXJldHVybiAtMTsKIAl9CisJLyoKKwkgKiBPbmx5IGFwcGxpZXMgdG8gdGhlIGtlcm5lbCwgYXMgaXRzIHN5bXRhYnMgYXJlbid0IHJlbGF0aXZlIGxpa2UgdGhlCisJICogbW9kdWxlIG9uZXMuCisJICovCisJaWYgKHNlbGYtPmRzby0+a2VybmVsKQorCQltYXBfX3JlbG9jX3ZtbGludXgoc2VsZik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCQkJCXU2NCBhZGRyLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQorc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwICpzZWxmLCB1NjQgYWRkciwKKwkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewotCWlmIChtYXBfX2xvYWQoc2VsZiwgc2Vzc2lvbiwgZmlsdGVyKSA8IDApCisJaWYgKG1hcF9fbG9hZChzZWxmLCBmaWx0ZXIpIDwgMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gZHNvX19maW5kX3N5bWJvbChzZWxmLT5kc28sIHNlbGYtPnR5cGUsIGFkZHIpOwogfQogCiBzdHJ1Y3Qgc3ltYm9sICptYXBfX2ZpbmRfc3ltYm9sX2J5X25hbWUoc3RydWN0IG1hcCAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKLQlpZiAobWFwX19sb2FkKHNlbGYsIHNlc3Npb24sIGZpbHRlcikgPCAwKQorCWlmIChtYXBfX2xvYWQoc2VsZiwgZmlsdGVyKSA8IDApCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKCFkc29fX3NvcnRlZF9ieV9uYW1lKHNlbGYtPmRzbywgc2VsZi0+dHlwZSkpCkBAIC0yMDEsMyArMjE1LDIzIEBACiAJcmV0dXJuIGZwcmludGYoZnAsICIgJUx4LSVMeCAlTHggJXNcbiIsCiAJCSAgICAgICBzZWxmLT5zdGFydCwgc2VsZi0+ZW5kLCBzZWxmLT5wZ29mZiwgc2VsZi0+ZHNvLT5uYW1lKTsKIH0KKworLyoKKyAqIG9iamR1bXAgd2FudHMvcmVwb3J0cyBhYnNvbHV0ZSBJUHMgZm9yIEVUX0VYRUMsIGFuZCBSSVBzIGZvciBFVF9EWU4uCisgKiBtYXAtPmRzby0+YWRqdXN0X3N5bWJvbHM9PTEgZm9yIEVUX0VYRUMtbGlrZSBjYXNlcy4KKyAqLwordTY0IG1hcF9fcmlwXzJvYmpkdW1wKHN0cnVjdCBtYXAgKm1hcCwgdTY0IHJpcCkKK3sKKwl1NjQgYWRkciA9IG1hcC0+ZHNvLT5hZGp1c3Rfc3ltYm9scyA/CisJCQltYXAtPnVubWFwX2lwKG1hcCwgcmlwKSA6CS8qIFJJUCAtPiBJUCAqLworCQkJcmlwOworCXJldHVybiBhZGRyOworfQorCit1NjQgbWFwX19vYmpkdW1wXzJpcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBhZGRyKQoreworCXU2NCBpcCA9IG1hcC0+ZHNvLT5hZGp1c3Rfc3ltYm9scyA/CisJCQlhZGRyIDoKKwkJCW1hcC0+dW5tYXBfaXAobWFwLCBhZGRyKTsJLyogUklQIC0+IElQICovCisJcmV0dXJuIGlwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hcC5oIGIvdG9vbHMvcGVyZi91dGlsL21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTYzNjgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvbWFwLmgKQEAgLTAsMCArMSw5NCBAQAorI2lmbmRlZiBfX1BFUkZfTUFQX0gKKyNkZWZpbmUgX19QRVJGX01BUF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitlbnVtIG1hcF90eXBlIHsKKwlNQVBfX0ZVTkNUSU9OID0gMCwKKwlNQVBfX1ZBUklBQkxFLAorfTsKKworI2RlZmluZSBNQVBfX05SX1RZUEVTIChNQVBfX1ZBUklBQkxFICsgMSkKKworZXh0ZXJuIGNvbnN0IGNoYXIgKm1hcF90eXBlX19uYW1lW01BUF9fTlJfVFlQRVNdOworCitzdHJ1Y3QgZHNvOworc3RydWN0IHJlZl9yZWxvY19zeW07CitzdHJ1Y3QgbWFwX2dyb3VwczsKKworc3RydWN0IG1hcCB7CisJdW5pb24geworCQlzdHJ1Y3QgcmJfbm9kZQlyYl9ub2RlOworCQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJfTsKKwl1NjQJCQlzdGFydDsKKwl1NjQJCQllbmQ7CisJZW51bSBtYXBfdHlwZQkJdHlwZTsKKwl1NjQJCQlwZ29mZjsKKworCS8qIGlwIC0+IGRzbyByaXAgKi8KKwl1NjQJCQkoKm1hcF9pcCkoc3RydWN0IG1hcCAqLCB1NjQpOworCS8qIGRzbyByaXAgLT4gaXAgKi8KKwl1NjQJCQkoKnVubWFwX2lwKShzdHJ1Y3QgbWFwICosIHU2NCk7CisKKwlzdHJ1Y3QgZHNvCQkqZHNvOworfTsKKworc3RydWN0IGttYXAgeworCXN0cnVjdCByZWZfcmVsb2Nfc3ltCSpyZWZfcmVsb2Nfc3ltOworCXN0cnVjdCBtYXBfZ3JvdXBzCSprbWFwczsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGttYXAgKm1hcF9fa21hcChzdHJ1Y3QgbWFwICpzZWxmKQoreworCXJldHVybiAoc3RydWN0IGttYXAgKikoc2VsZiArIDEpOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBtYXBfX21hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKK3sKKwlyZXR1cm4gaXAgLSBtYXAtPnN0YXJ0ICsgbWFwLT5wZ29mZjsKK30KKworc3RhdGljIGlubGluZSB1NjQgbWFwX191bm1hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKK3sKKwlyZXR1cm4gaXAgKyBtYXAtPnN0YXJ0IC0gbWFwLT5wZ29mZjsKK30KKworc3RhdGljIGlubGluZSB1NjQgaWRlbnRpdHlfX21hcF9pcChzdHJ1Y3QgbWFwICptYXAgX191c2VkLCB1NjQgaXApCit7CisJcmV0dXJuIGlwOworfQorCisKKy8qIHJpcC9pcCA8LT4gYWRkciBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byBgb2JqZHVtcCAtLXN0YXJ0LWFkZHJlc3M9YCAqLwordTY0IG1hcF9fcmlwXzJvYmpkdW1wKHN0cnVjdCBtYXAgKm1hcCwgdTY0IHJpcCk7Cit1NjQgbWFwX19vYmpkdW1wXzJpcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBhZGRyKTsKKworc3RydWN0IHN5bWJvbDsKK3N0cnVjdCBtbWFwX2V2ZW50OworCit0eXBlZGVmIGludCAoKnN5bWJvbF9maWx0ZXJfdCkoc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOworCit2b2lkIG1hcF9faW5pdChzdHJ1Y3QgbWFwICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsCisJICAgICAgIHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHBnb2ZmLCBzdHJ1Y3QgZHNvICpkc28pOworc3RydWN0IG1hcCAqbWFwX19uZXcoc3RydWN0IG1tYXBfZXZlbnQgKmV2ZW50LCBlbnVtIG1hcF90eXBlLAorCQkgICAgIGNoYXIgKmN3ZCwgaW50IGN3ZGxlbik7Cit2b2lkIG1hcF9fZGVsZXRlKHN0cnVjdCBtYXAgKnNlbGYpOworc3RydWN0IG1hcCAqbWFwX19jbG9uZShzdHJ1Y3QgbWFwICpzZWxmKTsKK2ludCBtYXBfX292ZXJsYXAoc3RydWN0IG1hcCAqbCwgc3RydWN0IG1hcCAqcik7CitzaXplX3QgbWFwX19mcHJpbnRmKHN0cnVjdCBtYXAgKnNlbGYsIEZJTEUgKmZwKTsKKworaW50IG1hcF9fbG9hZChzdHJ1Y3QgbWFwICpzZWxmLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKK3N0cnVjdCBzeW1ib2wgKm1hcF9fZmluZF9zeW1ib2woc3RydWN0IG1hcCAqc2VsZiwKKwkJCQl1NjQgYWRkciwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CitzdHJ1Y3Qgc3ltYm9sICptYXBfX2ZpbmRfc3ltYm9sX2J5X25hbWUoc3RydWN0IG1hcCAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7Cit2b2lkIG1hcF9fZml4dXBfc3RhcnQoc3RydWN0IG1hcCAqc2VsZik7Cit2b2lkIG1hcF9fZml4dXBfZW5kKHN0cnVjdCBtYXAgKnNlbGYpOworCit2b2lkIG1hcF9fcmVsb2Nfdm1saW51eChzdHJ1Y3QgbWFwICpzZWxmKTsKKworI2VuZGlmIC8qIF9fUEVSRl9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCmluZGV4IGU1YmMwZmIuLjA1ZDBjNWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKQEAgLTQ1MCw3ICs0NTAsOCBAQAogLyogc3lzICsgJzonICsgZXZlbnQgKyAnOicgKyBmbGFncyovCiAjZGVmaW5lIE1BWF9FVk9QVF9MRU4JKE1BWF9FVkVOVF9MRU5HVEggKiAyICsgMiArIDEyOCkKIHN0YXRpYyBlbnVtIGV2ZW50X3Jlc3VsdAotcGFyc2Vfc3Vic3lzdGVtX3RyYWNlcG9pbnRfZXZlbnQoY2hhciAqc3lzX25hbWUsIGNoYXIgKmZsYWdzKQorcGFyc2VfbXVsdGlwbGVfdHJhY2Vwb2ludF9ldmVudChjaGFyICpzeXNfbmFtZSwgY29uc3QgY2hhciAqZXZ0X2V4cCwKKwkJCQljaGFyICpmbGFncykKIHsKIAljaGFyIGV2dF9wYXRoW01BWFBBVEhMRU5dOwogCXN0cnVjdCBkaXJlbnQgKmV2dF9lbnQ7CkBAIC00NzQsNiArNDc1LDkgQEAKIAkJICAgIHx8ICFzdHJjbXAoZXZ0X2VudC0+ZF9uYW1lLCAiZmlsdGVyIikpCiAJCQljb250aW51ZTsKIAorCQlpZiAoIXN0cmdsb2JtYXRjaChldnRfZW50LT5kX25hbWUsIGV2dF9leHApKQorCQkJY29udGludWU7CisKIAkJbGVuID0gc25wcmludGYoZXZlbnRfb3B0LCBNQVhfRVZPUFRfTEVOLCAiJXM6JXMlcyVzIiwgc3lzX25hbWUsCiAJCQkgICAgICAgZXZ0X2VudC0+ZF9uYW1lLCBmbGFncyA/ICI6IiA6ICIiLAogCQkJICAgICAgIGZsYWdzID86ICIiKTsKQEAgLTUyMiw5ICs1MjYsMTAgQEAKIAlpZiAoZXZ0X2xlbmd0aCA+PSBNQVhfRVZFTlRfTEVOR1RIKQogCQlyZXR1cm4gRVZUX0ZBSUxFRDsKIAotCWlmICghc3RyY21wKGV2dF9uYW1lLCAiKiIpKSB7CisJaWYgKHN0cnBicmsoZXZ0X25hbWUsICIqPyIpKSB7CiAJCSpzdHJwID0gZXZ0X25hbWUgKyBldnRfbGVuZ3RoOwotCQlyZXR1cm4gcGFyc2Vfc3Vic3lzdGVtX3RyYWNlcG9pbnRfZXZlbnQoc3lzX25hbWUsIGZsYWdzKTsKKwkJcmV0dXJuIHBhcnNlX211bHRpcGxlX3RyYWNlcG9pbnRfZXZlbnQoc3lzX25hbWUsIGV2dF9uYW1lLAorCQkJCQkJICAgICAgIGZsYWdzKTsKIAl9IGVsc2UKIAkJcmV0dXJuIHBhcnNlX3NpbmdsZV90cmFjZXBvaW50X2V2ZW50KHN5c19uYW1lLCBldnRfbmFtZSwKIAkJCQkJCSAgICAgZXZ0X2xlbmd0aCwgZmxhZ3MsCkBAIC03NTMsMTEgKzc1OCwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHN0b3JlX2V2ZW50X3R5cGUoY29uc3QgY2hhciAqb3JnbmFtZSkKK3N0YXRpYyBpbnQgc3RvcmVfZXZlbnRfdHlwZShjb25zdCBjaGFyICpvcmduYW1lKQogewogCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdLCAqYzsKIAlGSUxFICpmaWxlOwotCWludCBpZDsKKwlpbnQgaWQsIG47CiAKIAlzcHJpbnRmKGZpbGVuYW1lLCAiJXMvIiwgZGVidWdmc19wYXRoKTsKIAlzdHJuY2F0KGZpbGVuYW1lLCBvcmduYW1lLCBzdHJsZW4ob3JnbmFtZSkpOwpAQCAtNzY5LDExICs3NzQsMTQgQEAKIAogCWZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKIAlpZiAoIWZpbGUpCi0JCXJldHVybjsKLQlpZiAoZnNjYW5mKGZpbGUsICIlaSIsICZpZCkgPCAxKQotCQlkaWUoImNhbm5vdCBzdG9yZSBldmVudCBJRCIpOworCQlyZXR1cm4gMDsKKwluID0gZnNjYW5mKGZpbGUsICIlaSIsICZpZCk7CiAJZmNsb3NlKGZpbGUpOwotCXBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KGlkLCBvcmduYW1lKTsKKwlpZiAobiA8IDEpIHsKKwkJcHJfZXJyKCJjYW5ub3Qgc3RvcmUgZXZlbnQgSURcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KGlkLCBvcmduYW1lKTsKIH0KIAogaW50IHBhcnNlX2V2ZW50cyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLCBjb25zdCBjaGFyICpzdHIsIGludCB1bnNldCBfX3VzZWQpCkBAIC03ODIsNyArNzkwLDggQEAKIAllbnVtIGV2ZW50X3Jlc3VsdCByZXQ7CiAKIAlpZiAoc3RyY2hyKHN0ciwgJzonKSkKLQkJc3RvcmVfZXZlbnRfdHlwZShzdHIpOworCQlpZiAoc3RvcmVfZXZlbnRfdHlwZShzdHIpIDwgMCkKKwkJCXJldHVybiAtMTsKIAogCWZvciAoOzspIHsKIAkJaWYgKG5yX2NvdW50ZXJzID09IE1BWF9DT1VOVEVSUykKQEAgLTgzNSwxMSArODQ0LDEyIEBACiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tdID0gewotCSIiLAogCSJIYXJkd2FyZSBldmVudCIsCiAJIlNvZnR3YXJlIGV2ZW50IiwKIAkiVHJhY2Vwb2ludCBldmVudCIsCiAJIkhhcmR3YXJlIGNhY2hlIGV2ZW50IiwKKwkiUmF3IGhhcmR3YXJlIGV2ZW50IGRlc2NyaXB0b3IiLAorCSJIYXJkd2FyZSBicmVha3BvaW50IiwKIH07CiAKIC8qCkBAIC04NzIsNyArODgyLDcgQEAKIAkJCXNucHJpbnRmKGV2dF9wYXRoLCBNQVhQQVRITEVOLCAiJXM6JXMiLAogCQkJCSBzeXNfZGlyZW50LmRfbmFtZSwgZXZ0X2RpcmVudC5kX25hbWUpOwogCQkJcHJpbnRmKCIgICUtNDJzIFslc11cbiIsIGV2dF9wYXRoLAotCQkJCWV2ZW50X3R5cGVfZGVzY3JpcHRvcnNbUEVSRl9UWVBFX1RSQUNFUE9JTlQrMV0pOworCQkJCWV2ZW50X3R5cGVfZGVzY3JpcHRvcnNbUEVSRl9UWVBFX1RSQUNFUE9JTlRdKTsKIAkJfQogCQljbG9zZWRpcihldnRfZGlyKTsKIAl9CkBAIC04OTIsOSArOTAyLDcgQEAKIAlwcmludGYoIkxpc3Qgb2YgcHJlLWRlZmluZWQgZXZlbnRzICh0byBiZSB1c2VkIGluIC1lKTpcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXZlbnRfc3ltYm9scyk7IGkrKywgc3ltcysrKSB7Ci0JCXR5cGUgPSBzeW1zLT50eXBlICsgMTsKLQkJaWYgKHR5cGUgPj0gQVJSQVlfU0laRShldmVudF90eXBlX2Rlc2NyaXB0b3JzKSkKLQkJCXR5cGUgPSAwOworCQl0eXBlID0gc3ltcy0+dHlwZTsKIAogCQlpZiAodHlwZSAhPSBwcmV2X3R5cGUpCiAJCQlwcmludGYoIlxuIik7CkBAIC05MTksMTcgKzkyNywxOSBAQAogCQkJZm9yIChpID0gMDsgaSA8IFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWDsgaSsrKSB7CiAJCQkJcHJpbnRmKCIgICUtNDJzIFslc11cbiIsCiAJCQkJCWV2ZW50X2NhY2hlX25hbWUodHlwZSwgb3AsIGkpLAotCQkJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzWzRdKTsKKwkJCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tQRVJGX1RZUEVfSFdfQ0FDSEVdKTsKIAkJCX0KIAkJfQogCX0KIAogCXByaW50ZigiXG4iKTsKLQlwcmludGYoIiAgJS00MnMgW3JhdyBoYXJkd2FyZSBldmVudCBkZXNjcmlwdG9yXVxuIiwKLQkJInJOTk4iKTsKKwlwcmludGYoIiAgJS00MnMgWyVzXVxuIiwKKwkJInJOTk4iLCBldmVudF90eXBlX2Rlc2NyaXB0b3JzW1BFUkZfVFlQRV9SQVddKTsKIAlwcmludGYoIlxuIik7CiAKLQlwcmludGYoIiAgJS00MnMgW2hhcmR3YXJlIGJyZWFrcG9pbnRdXG4iLCAibWVtOjxhZGRyPls6YWNjZXNzXSIpOworCXByaW50ZigiICAlLTQycyBbJXNdXG4iLAorCQkJIm1lbTo8YWRkcj5bOmFjY2Vzc10iLAorCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tQRVJGX1RZUEVfQlJFQUtQT0lOVF0pOwogCXByaW50ZigiXG4iKTsKIAogCXByaW50X3RyYWNlcG9pbnRfZXZlbnRzKCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCmluZGV4IDI5NDY1ZDQuLjhmMDU2ODggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAic3RyaW5nLmgiCiAjaW5jbHVkZSAic3RybGlzdC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgogI2luY2x1ZGUgInBhcnNlLWV2ZW50cy5oIiAgLyogRm9yIGRlYnVnZnNfcGF0aCAqLwogI2luY2x1ZGUgInByb2JlLWV2ZW50LmgiCiAKQEAgLTYyLDYgKzY0LDQyIEBACiAJcmV0dXJuIHJldDsKIH0KIAordm9pZCBwYXJzZV9saW5lX3JhbmdlX2Rlc2MoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpCit7CisJY29uc3QgY2hhciAqcHRyOworCWNoYXIgKnRtcDsKKwkvKgorCSAqIDxTeW50YXg+CisJICogU1JDOlNMTlsrTlVNfC1FTE5dCisJICogRlVOQ1s6U0xOWytOVU18LUVMTl1dCisJICovCisJcHRyID0gc3RyY2hyKGFyZywgJzonKTsKKwlpZiAocHRyKSB7CisJCWxyLT5zdGFydCA9ICh1bnNpZ25lZCBpbnQpc3RydG91bChwdHIgKyAxLCAmdG1wLCAwKTsKKwkJaWYgKCp0bXAgPT0gJysnKQorCQkJbHItPmVuZCA9IGxyLT5zdGFydCArICh1bnNpZ25lZCBpbnQpc3RydG91bCh0bXAgKyAxLAorCQkJCQkJCQkgICAgJnRtcCwgMCk7CisJCWVsc2UgaWYgKCp0bXAgPT0gJy0nKQorCQkJbHItPmVuZCA9ICh1bnNpZ25lZCBpbnQpc3RydG91bCh0bXAgKyAxLCAmdG1wLCAwKTsKKwkJZWxzZQorCQkJbHItPmVuZCA9IDA7CisJCXByX2RlYnVnKCJMaW5lIHJhbmdlIGlzICV1IHRvICV1XG4iLCBsci0+c3RhcnQsIGxyLT5lbmQpOworCQlpZiAobHItPmVuZCAmJiBsci0+c3RhcnQgPiBsci0+ZW5kKQorCQkJc2VtYW50aWNfZXJyb3IoIlN0YXJ0IGxpbmUgbXVzdCBiZSBzbWFsbGVyIgorCQkJCSAgICAgICAiIHRoYW4gZW5kIGxpbmUuIik7CisJCWlmICgqdG1wICE9ICdcMCcpCisJCQlzZW1hbnRpY19lcnJvcigiVGFpbGluZyB3aXRoIGludmFsaWQgY2hhcmFjdGVyICclZCcuIiwKKwkJCQkgICAgICAgKnRtcCk7CisJCXRtcCA9IHN0cm5kdXAoYXJnLCAocHRyIC0gYXJnKSk7CisJfSBlbHNlCisJCXRtcCA9IHN0cmR1cChhcmcpOworCisJaWYgKHN0cmNocih0bXAsICcuJykpCisJCWxyLT5maWxlID0gdG1wOworCWVsc2UKKwkJbHItPmZ1bmN0aW9uID0gdG1wOworfQorCiAvKiBDaGVjayB0aGUgbmFtZSBpcyBnb29kIGZvciBldmVudC9ncm91cCAqLwogc3RhdGljIGJvb2wgY2hlY2tfZXZlbnRfbmFtZShjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMjcyLDYgKzMxMCw3IEBACiAJaW50IHJldDsKIAogCXBwLT5wcm9iZXNbMF0gPSBidWYgPSB6YWxsb2MoTUFYX0NNRExFTik7CisJcHAtPmZvdW5kID0gMTsKIAlpZiAoIWJ1ZikKIAkJZGllKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGJ5IHphbGxvYy4iKTsKIAlpZiAocHAtPm9mZnNldCkgewpAQCAtMjk0LDYgKzMzMyw3IEBACiBlcnJvcjoKIAkJZnJlZShwcC0+cHJvYmVzWzBdKTsKIAkJcHAtPnByb2Jlc1swXSA9IE5VTEw7CisJCXBwLT5mb3VuZCA9IDA7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0zNjgsNyArNDA4LDcgQEAKIAlpZiAocmV0IDwgMCkgewogCQlpZiAoZXJybm8gPT0gRU5PRU5UKQogCQkJZGllKCJrcHJvYmVfZXZlbnRzIGZpbGUgZG9lcyBub3QgZXhpc3QgLSIKLQkJCSAgICAiIHBsZWFzZSByZWJ1aWxkIHdpdGggQ09ORklHX0tQUk9CRV9UUkFDRVIuIik7CisJCQkgICAgIiBwbGVhc2UgcmVidWlsZCB3aXRoIENPTkZJR19LUFJPQkVfRVZFTlQuIik7CiAJCWVsc2UKIAkJCWRpZSgiQ291bGQgbm90IG9wZW4ga3Byb2JlX2V2ZW50cyBmaWxlOiAlcyIsCiAJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTQ1NSw2ICs0OTUsOSBAQAogCXN0cnVjdCBzdHJsaXN0ICpyYXdsaXN0OwogCXN0cnVjdCBzdHJfbm9kZSAqZW50OwogCisJc2V0dXBfcGFnZXIoKTsKKworCW1lbXNldCgmcHAsIDAsIHNpemVvZihwcCkpOwogCWZkID0gb3Blbl9rcHJvYmVfZXZlbnRzKE9fUkRPTkxZLCAwKTsKIAlyYXdsaXN0ID0gZ2V0X3RyYWNlX2twcm9iZV9ldmVudF9yYXdsaXN0KGZkKTsKIAljbG9zZShmZCk7CkBAIC02NzUsMyArNzE4LDY2IEBACiAJY2xvc2UoZmQpOwogfQogCisjZGVmaW5lIExJTkVCVUZfU0laRSAyNTYKKworc3RhdGljIHZvaWQgc2hvd19vbmVfbGluZShGSUxFICpmcCwgdW5zaWduZWQgaW50IGwsIGJvb2wgc2tpcCwgYm9vbCBzaG93X251bSkKK3sKKwljaGFyIGJ1ZltMSU5FQlVGX1NJWkVdOworCWNvbnN0IGNoYXIgKmNvbG9yID0gUEVSRl9DT0xPUl9CTFVFOworCisJaWYgKGZnZXRzKGJ1ZiwgTElORUJVRl9TSVpFLCBmcCkgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKwlpZiAoIXNraXApIHsKKwkJaWYgKHNob3dfbnVtKQorCQkJZnByaW50ZihzdGRvdXQsICIlN3UgICVzIiwgbCwgYnVmKTsKKwkJZWxzZQorCQkJY29sb3JfZnByaW50ZihzdGRvdXQsIGNvbG9yLCAiICAgICAgICAgJXMiLCBidWYpOworCX0KKworCXdoaWxlIChzdHJsZW4oYnVmKSA9PSBMSU5FQlVGX1NJWkUgLSAxICYmCisJICAgICAgIGJ1ZltMSU5FQlVGX1NJWkUgLSAyXSAhPSAnXG4nKSB7CisJCWlmIChmZ2V0cyhidWYsIExJTkVCVUZfU0laRSwgZnApID09IE5VTEwpCisJCQlnb3RvIGVycm9yOworCQlpZiAoIXNraXApIHsKKwkJCWlmIChzaG93X251bSkKKwkJCQlmcHJpbnRmKHN0ZG91dCwgIiVzIiwgYnVmKTsKKwkJCWVsc2UKKwkJCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgY29sb3IsICIlcyIsIGJ1Zik7CisJCX0KKwl9CisJcmV0dXJuOworZXJyb3I6CisJaWYgKGZlb2YoZnApKQorCQlkaWUoIlNvdXJjZSBmaWxlIGlzIHNob3J0ZXIgdGhhbiBleHBlY3RlZC4iKTsKKwllbHNlCisJCWRpZSgiRmlsZSByZWFkIGVycm9yOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cit9CisKK3ZvaWQgc2hvd19saW5lX3JhbmdlKHN0cnVjdCBsaW5lX3JhbmdlICpscikKK3sKKwl1bnNpZ25lZCBpbnQgbCA9IDE7CisJc3RydWN0IGxpbmVfbm9kZSAqbG47CisJRklMRSAqZnA7CisKKwlzZXR1cF9wYWdlcigpOworCisJaWYgKGxyLT5mdW5jdGlvbikKKwkJZnByaW50ZihzdGRvdXQsICI8JXM6JWQ+XG4iLCBsci0+ZnVuY3Rpb24sCisJCQlsci0+c3RhcnQgLSBsci0+b2Zmc2V0KTsKKwllbHNlCisJCWZwcmludGYoc3Rkb3V0LCAiPCVzOiVkPlxuIiwgbHItPmZpbGUsIGxyLT5zdGFydCk7CisKKwlmcCA9IGZvcGVuKGxyLT5wYXRoLCAiciIpOworCWlmIChmcCA9PSBOVUxMKQorCQlkaWUoIkZhaWxlZCB0byBvcGVuICVzOiAlcyIsIGxyLT5wYXRoLCBzdHJlcnJvcihlcnJubykpOworCS8qIFNraXAgdG8gc3RhcnRpbmcgbGluZSBudW1iZXIgKi8KKwl3aGlsZSAobCA8IGxyLT5zdGFydCkKKwkJc2hvd19vbmVfbGluZShmcCwgbCsrLCB0cnVlLCBmYWxzZSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxuLCAmbHItPmxpbmVfbGlzdCwgbGlzdCkgeworCQl3aGlsZSAobG4tPmxpbmUgPiBsKQorCQkJc2hvd19vbmVfbGluZShmcCwgKGwrKykgLSBsci0+b2Zmc2V0LCBmYWxzZSwgZmFsc2UpOworCQlzaG93X29uZV9saW5lKGZwLCAobCsrKSAtIGxyLT5vZmZzZXQsIGZhbHNlLCB0cnVlKTsKKwl9CisJZmNsb3NlKGZwKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmgKaW5kZXggN2YxZDQ5OS4uNzExMjg3ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSAicHJvYmUtZmluZGVyLmgiCiAjaW5jbHVkZSAic3RybGlzdC5oIgogCitleHRlcm4gdm9pZCBwYXJzZV9saW5lX3JhbmdlX2Rlc2MoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpOwogZXh0ZXJuIHZvaWQgcGFyc2VfcGVyZl9wcm9iZV9ldmVudChjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwcm9iZV9wb2ludCAqcHAsCiAJCQkJICAgYm9vbCAqbmVlZF9kd2FyZik7CiBleHRlcm4gaW50IHN5bnRoZXNpemVfcGVyZl9wcm9iZV9wb2ludChzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKTsKQEAgLTE1LDYgKzE2LDcgQEAKIAkJCQkgICAgYm9vbCBmb3JjZV9hZGQpOwogZXh0ZXJuIHZvaWQgZGVsX3RyYWNlX2twcm9iZV9ldmVudHMoc3RydWN0IHN0cmxpc3QgKmRlbGxpc3QpOwogZXh0ZXJuIHZvaWQgc2hvd19wZXJmX3Byb2JlX2V2ZW50cyh2b2lkKTsKK2V4dGVybiB2b2lkIHNob3dfbGluZV9yYW5nZShzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpOwogCiAvKiBNYXhpbXVtIGluZGV4IG51bWJlciBvZiBldmVudC1uYW1lIHBvc3RmaXggKi8KICNkZWZpbmUgTUFYX0VWRU5UX0lOREVYCTEwMjQKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYwppbmRleCA0Yjg1MmMwLi4xYjIxMjRkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCkBAIC0xNDAsNiArMTQwLDMxIEBACiAJcmV0dXJuIGZvdW5kOwogfQogCitzdGF0aWMgaW50IGN1X2dldF9maWxlbmFtZShEd2FyZl9EaWUgY3VfZGllLCBEd2FyZl9VbnNpZ25lZCBmbm8sIGNoYXIgKipidWYpCit7CisJRHdhcmZfU2lnbmVkIGNudCwgaTsKKwljaGFyICoqc3JjczsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghYnVmIHx8ICFmbm8pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gZHdhcmZfc3JjZmlsZXMoY3VfZGllLCAmc3JjcywgJmNudCwgJl9fZHdfZXJyb3IpOworCWlmIChyZXQgPT0gRFdfRExWX09LKSB7CisJCWlmICgoRHdhcmZfVW5zaWduZWQpY250ID4gZm5vIC0gMSkgeworCQkJKmJ1ZiA9IHN0cmR1cChzcmNzW2ZubyAtIDFdKTsKKwkJCXJldCA9IDA7CisJCQlwcl9kZWJ1ZygiZm91bmQgZmlsZW5hbWU6ICVzXG4iLCAqYnVmKTsKKwkJfSBlbHNlCisJCQlyZXQgPSAtRU5PRU5UOworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspCisJCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHNyY3NbaV0sIERXX0RMQV9TVFJJTkcpOworCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHNyY3MsIERXX0RMQV9MSVNUKTsKKwl9IGVsc2UKKwkJcmV0ID0gLUVJTlZBTDsKKwlyZXR1cm4gcmV0OworfQorCiAvKiBDb21wYXJlIGRpZW5hbWUgYW5kIHRuYW1lICovCiBzdGF0aWMgaW50IGRpZV9jb21wYXJlX25hbWUoRHdhcmZfRGllIGR3X2RpZSwgY29uc3QgY2hhciAqdG5hbWUpCiB7CkBAIC00MDIsMTEgKzQyNywxMSBAQAogCX0gZWxzZSBpZiAob3AgPT0gRFdfT1BfcmVneCkgewogCQlyZWduID0gbG9jLT5scl9udW1iZXI7CiAJfSBlbHNlCi0JCWRpZSgiRHdhcmZfT1AgJWQgaXMgbm90IHN1cHBvcnRlZC5cbiIsIG9wKTsKKwkJZGllKCJEd2FyZl9PUCAlZCBpcyBub3Qgc3VwcG9ydGVkLiIsIG9wKTsKIAogCXJlZ3MgPSBnZXRfYXJjaF9yZWdzdHIocmVnbik7CiAJaWYgKCFyZWdzKQotCQlkaWUoIiVsbGQgZXhjZWVkcyBtYXggcmVnaXN0ZXIgbnVtYmVyLlxuIiwgcmVnbik7CisJCWRpZSgiJWxsZCBleGNlZWRzIG1heCByZWdpc3RlciBudW1iZXIuIiwgcmVnbik7CiAKIAlpZiAoZGVyZWYpCiAJCXJldCA9IHNucHJpbnRmKHBmLT5idWYsIHBmLT5sZW4sCkBAIC00MzgsNyArNDYzLDcgQEAKIAlyZXR1cm4gOwogZXJyb3I6CiAJZGllKCJGYWlsZWQgdG8gZmluZCB0aGUgbG9jYXRpb24gb2YgJXMgYXQgdGhpcyBhZGRyZXNzLlxuIgotCSAgICAiIFBlcmhhcHMsIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuXG4iLCBwZi0+dmFyKTsKKwkgICAgIiBQZXJoYXBzLCBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LiIsIHBmLT52YXIpOwogfQogCiBzdGF0aWMgaW50IHZhcmlhYmxlX2NhbGxiYWNrKHN0cnVjdCBkaWVfbGluayAqZGxpbmssIHZvaWQgKmRhdGEpCkBAIC00NzYsNyArNTAxLDcgQEAKIAkvKiBTZWFyY2ggY2hpbGQgZGllIGZvciBsb2NhbCB2YXJpYWJsZXMgYW5kIHBhcmFtZXRlcnMuICovCiAJcmV0ID0gc2VhcmNoX2RpZV9mcm9tX2NoaWxkcmVuKHNwX2RpZSwgdmFyaWFibGVfY2FsbGJhY2ssIHBmKTsKIAlpZiAoIXJldCkKLQkJZGllKCJGYWlsZWQgdG8gZmluZCAnJXMnIGluIHRoaXMgZnVuY3Rpb24uXG4iLCBwZi0+dmFyKTsKKwkJZGllKCJGYWlsZWQgdG8gZmluZCAnJXMnIGluIHRoaXMgZnVuY3Rpb24uIiwgcGYtPnZhcik7CiB9CiAKIC8qIEdldCBhIGZyYW1lIGJhc2Ugb24gdGhlIGFkZHJlc3MgKi8KQEAgLTU2Nyw3ICs1OTIsNyBAQAogfQogCiAvKiBGaW5kIHByb2JlIHBvaW50IGZyb20gaXRzIGxpbmUgbnVtYmVyICovCi1zdGF0aWMgdm9pZCBmaW5kX2J5X2xpbmUoc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCitzdGF0aWMgdm9pZCBmaW5kX3Byb2JlX3BvaW50X2J5X2xpbmUoc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCiB7CiAJRHdhcmZfU2lnbmVkIGNudCwgaSwgY2xtOwogCUR3YXJmX0xpbmUgKmxpbmVzOwpAQCAtNjAyLDcgKzYyNyw3IEBACiAJCXJldCA9IHNlYXJjaF9kaWVfZnJvbV9jaGlsZHJlbihwZi0+Y3VfZGllLAogCQkJCQkgICAgICAgcHJvYmVhZGRyX2NhbGxiYWNrLCBwZik7CiAJCWlmIChyZXQgPT0gMCkKLQkJCWRpZSgiUHJvYmUgcG9pbnQgaXMgbm90IGZvdW5kIGluIHN1YnByb2dyYW1zLlxuIik7CisJCQlkaWUoIlByb2JlIHBvaW50IGlzIG5vdCBmb3VuZCBpbiBzdWJwcm9ncmFtcy4iKTsKIAkJLyogQ29udGludWluZywgYmVjYXVzZSB0YXJnZXQgbGluZSBtaWdodCBiZSBpbmxpbmVkLiAqLwogCX0KIAlkd2FyZl9zcmNsaW5lc19kZWFsbG9jKF9fZHdfZGVidWcsIGxpbmVzLCBjbnQpOwpAQCAtNjI2LDcgKzY1MSw3IEBACiAJCQkJcGYtPmZubyA9IGRpZV9nZXRfZGVjbF9maWxlKGRsaW5rLT5kaWUpOwogCQkJCXBmLT5sbm8gPSBkaWVfZ2V0X2RlY2xfbGluZShkbGluay0+ZGllKQogCQkJCQkgKyBwcC0+bGluZTsKLQkJCQlmaW5kX2J5X2xpbmUocGYpOworCQkJCWZpbmRfcHJvYmVfcG9pbnRfYnlfbGluZShwZik7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCQlpZiAoZGllX2lubGluZWRfc3VicHJvZ3JhbShkbGluay0+ZGllKSkgewpAQCAtNjYxLDcgKzY4Niw3IEBACiAJCQkJICAgICFkaWVfaW5saW5lZF9zdWJwcm9ncmFtKGxrLT5kaWUpKQogCQkJCQlnb3RvIGZvdW5kOwogCQkJfQotCQkJZGllKCJGYWlsZWQgdG8gZmluZCByZWFsIHN1YnByb2dyYW0uXG4iKTsKKwkJCWRpZSgiRmFpbGVkIHRvIGZpbmQgcmVhbCBzdWJwcm9ncmFtLiIpOwogZm91bmQ6CiAJCQkvKiBHZXQgb2Zmc2V0IGZyb20gc3VicHJvZ3JhbSAqLwogCQkJcmV0ID0gZGllX3dpdGhpbl9zdWJwcm9ncmFtKGxrLT5kaWUsIHBmLT5hZGRyLCAmb2Zmcyk7CkBAIC02NzMsNyArNjk4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZmluZF9ieV9mdW5jKHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQorc3RhdGljIHZvaWQgZmluZF9wcm9iZV9wb2ludF9ieV9mdW5jKHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQogewogCXNlYXJjaF9kaWVfZnJvbV9jaGlsZHJlbihwZi0+Y3VfZGllLCBwcm9iZWZ1bmNfY2FsbGJhY2ssIHBmKTsKIH0KQEAgLTcxNCwxMCArNzM5LDEwIEBACiAJCQlpZiAocmV0ID09IERXX0RMVl9OT19FTlRSWSkKIAkJCQlwZi5jdV9iYXNlID0gMDsKIAkJCWlmIChwcC0+ZnVuY3Rpb24pCi0JCQkJZmluZF9ieV9mdW5jKCZwZik7CisJCQkJZmluZF9wcm9iZV9wb2ludF9ieV9mdW5jKCZwZik7CiAJCQllbHNlIHsKIAkJCQlwZi5sbm8gPSBwcC0+bGluZTsKLQkJCQlmaW5kX2J5X2xpbmUoJnBmKTsKKwkJCQlmaW5kX3Byb2JlX3BvaW50X2J5X2xpbmUoJnBmKTsKIAkJCX0KIAkJfQogCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHBmLmN1X2RpZSwgRFdfRExBX0RJRSk7CkBAIC03MjgsMyArNzUzLDE1OSBAQAogCXJldHVybiBwcC0+Zm91bmQ7CiB9CiAKKworc3RhdGljIHZvaWQgbGluZV9yYW5nZV9hZGRfbGluZShzdHJ1Y3QgbGluZV9yYW5nZSAqbHIsIHVuc2lnbmVkIGludCBsaW5lKQoreworCXN0cnVjdCBsaW5lX25vZGUgKmxuOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisKKwkvKiBSZXZlcnNlIHNlYXJjaCwgYmVjYXVzZSBuZXcgbGluZSB3aWxsIGJlIHRoZSBsYXN0IG9uZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShsbiwgJmxyLT5saW5lX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGxuLT5saW5lIDwgbGluZSkgeworCQkJcCA9ICZsbi0+bGlzdDsKKwkJCWdvdG8gZm91bmQ7CisJCX0gZWxzZSBpZiAobG4tPmxpbmUgPT0gbGluZSkJLyogQWxyZWFkeSBleGlzdCAqLworCQkJcmV0dXJuIDsKKwl9CisJLyogTGlzdCBpcyBlbXB0eSwgb3IgdGhlIHNtYWxsZXN0IGVudHJ5ICovCisJcCA9ICZsci0+bGluZV9saXN0OworZm91bmQ6CisJcHJfZGVidWcoIkRlYnVnOiBhZGQgYSBsaW5lICV1XG4iLCBsaW5lKTsKKwlsbiA9IHphbGxvYyhzaXplb2Yoc3RydWN0IGxpbmVfbm9kZSkpOworCURJRV9JRihsbiA9PSBOVUxMKTsKKwlsbi0+bGluZSA9IGxpbmU7CisJSU5JVF9MSVNUX0hFQUQoJmxuLT5saXN0KTsKKwlsaXN0X2FkZCgmbG4tPmxpc3QsIHApOworfQorCisvKiBGaW5kIGxpbmUgcmFuZ2UgZnJvbSBpdHMgbGluZSBudW1iZXIgKi8KK3N0YXRpYyB2b2lkIGZpbmRfbGluZV9yYW5nZV9ieV9saW5lKHN0cnVjdCBsaW5lX2ZpbmRlciAqbGYpCit7CisJRHdhcmZfU2lnbmVkIGNudCwgaTsKKwlEd2FyZl9MaW5lICpsaW5lczsKKwlEd2FyZl9VbnNpZ25lZCBsaW5lbm8gPSAwOworCUR3YXJmX1Vuc2lnbmVkIGZubzsKKwlEd2FyZl9BZGRyIGFkZHI7CisJaW50IHJldDsKKworCXJldCA9IGR3YXJmX3NyY2xpbmVzKGxmLT5jdV9kaWUsICZsaW5lcywgJmNudCwgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQlyZXQgPSBkd2FyZl9saW5lX3NyY2ZpbGVubyhsaW5lc1tpXSwgJmZubywgJl9fZHdfZXJyb3IpOworCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJCWlmIChmbm8gIT0gbGYtPmZubykKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IGR3YXJmX2xpbmVubyhsaW5lc1tpXSwgJmxpbmVubywgJl9fZHdfZXJyb3IpOworCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJCWlmIChsZi0+bG5vX3MgPiBsaW5lbm8gfHwgbGYtPmxub19lIDwgbGluZW5vKQorCQkJY29udGludWU7CisKKwkJLyogRmlsdGVyIGxpbmUgaW4gdGhlIGZ1bmN0aW9uIGFkZHJlc3MgcmFuZ2UgKi8KKwkJaWYgKGxmLT5hZGRyX3MgJiYgbGYtPmFkZHJfZSkgeworCQkJcmV0ID0gZHdhcmZfbGluZWFkZHIobGluZXNbaV0sICZhZGRyLCAmX19kd19lcnJvcik7CisJCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJCQlpZiAobGYtPmFkZHJfcyA+IGFkZHIgfHwgbGYtPmFkZHJfZSA8PSBhZGRyKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWxpbmVfcmFuZ2VfYWRkX2xpbmUobGYtPmxyLCAodW5zaWduZWQgaW50KWxpbmVubyk7CisJfQorCWR3YXJmX3NyY2xpbmVzX2RlYWxsb2MoX19kd19kZWJ1ZywgbGluZXMsIGNudCk7CisJaWYgKCFsaXN0X2VtcHR5KCZsZi0+bHItPmxpbmVfbGlzdCkpCisJCWxmLT5mb3VuZCA9IDE7Cit9CisKKy8qIFNlYXJjaCBmdW5jdGlvbiBmcm9tIGZ1bmN0aW9uIG5hbWUgKi8KK3N0YXRpYyBpbnQgbGluZWZ1bmNfY2FsbGJhY2soc3RydWN0IGRpZV9saW5rICpkbGluaywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbGluZV9maW5kZXIgKmxmID0gKHN0cnVjdCBsaW5lX2ZpbmRlciAqKWRhdGE7CisJc3RydWN0IGxpbmVfcmFuZ2UgKmxyID0gbGYtPmxyOworCUR3YXJmX0hhbGYgdGFnOworCWludCByZXQ7CisKKwlyZXQgPSBkd2FyZl90YWcoZGxpbmstPmRpZSwgJnRhZywgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwlpZiAodGFnID09IERXX1RBR19zdWJwcm9ncmFtICYmCisJICAgIGRpZV9jb21wYXJlX25hbWUoZGxpbmstPmRpZSwgbHItPmZ1bmN0aW9uKSA9PSAwKSB7CisJCS8qIEdldCB0aGUgYWRkcmVzcyByYW5nZSBvZiB0aGlzIGZ1bmN0aW9uICovCisJCXJldCA9IGR3YXJmX2hpZ2hwYyhkbGluay0+ZGllLCAmbGYtPmFkZHJfZSwgJl9fZHdfZXJyb3IpOworCQlpZiAocmV0ID09IERXX0RMVl9PSykKKwkJCXJldCA9IGR3YXJmX2xvd3BjKGRsaW5rLT5kaWUsICZsZi0+YWRkcl9zLCAmX19kd19lcnJvcik7CisJCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwkJaWYgKHJldCA9PSBEV19ETFZfTk9fRU5UUlkpIHsKKwkJCWxmLT5hZGRyX3MgPSAwOworCQkJbGYtPmFkZHJfZSA9IDA7CisJCX0KKworCQlsZi0+Zm5vID0gZGllX2dldF9kZWNsX2ZpbGUoZGxpbmstPmRpZSk7CisJCWxyLT5vZmZzZXQgPSBkaWVfZ2V0X2RlY2xfbGluZShkbGluay0+ZGllKTs7CisJCWxmLT5sbm9fcyA9IGxyLT5vZmZzZXQgKyBsci0+c3RhcnQ7CisJCWlmICghbHItPmVuZCkKKwkJCWxmLT5sbm9fZSA9IChEd2FyZl9VbnNpZ25lZCktMTsKKwkJZWxzZQorCQkJbGYtPmxub19lID0gbHItPm9mZnNldCArIGxyLT5lbmQ7CisJCWxyLT5zdGFydCA9IGxmLT5sbm9fczsKKwkJbHItPmVuZCA9IGxmLT5sbm9fZTsKKwkJZmluZF9saW5lX3JhbmdlX2J5X2xpbmUobGYpOworCQkvKiBJZiB3ZSBmaW5kIGEgdGFyZ2V0IGZ1bmN0aW9uLCB0aGlzIHNob3VsZCBiZSBlbmQuICovCisJCWxmLT5mb3VuZCA9IDE7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmluZF9saW5lX3JhbmdlX2J5X2Z1bmMoc3RydWN0IGxpbmVfZmluZGVyICpsZikKK3sKKwlzZWFyY2hfZGllX2Zyb21fY2hpbGRyZW4obGYtPmN1X2RpZSwgbGluZWZ1bmNfY2FsbGJhY2ssIGxmKTsKK30KKworaW50IGZpbmRfbGluZV9yYW5nZShpbnQgZmQsIHN0cnVjdCBsaW5lX3JhbmdlICpscikKK3sKKwlEd2FyZl9IYWxmIGFkZHJfc2l6ZSA9IDA7CisJRHdhcmZfVW5zaWduZWQgbmV4dF9jdWggPSAwOworCWludCByZXQ7CisJc3RydWN0IGxpbmVfZmluZGVyIGxmID0gey5sciA9IGxyfTsKKworCXJldCA9IGR3YXJmX2luaXQoZmQsIERXX0RMQ19SRUFELCAwLCAwLCAmX19kd19kZWJ1ZywgJl9fZHdfZXJyb3IpOworCWlmIChyZXQgIT0gRFdfRExWX09LKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXdoaWxlICghbGYuZm91bmQpIHsKKwkJLyogU2VhcmNoIENVIChDb21waWxhdGlvbiBVbml0KSAqLworCQlyZXQgPSBkd2FyZl9uZXh0X2N1X2hlYWRlcihfX2R3X2RlYnVnLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJJmFkZHJfc2l6ZSwgJm5leHRfY3VoLCAmX19kd19lcnJvcik7CisJCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwkJaWYgKHJldCA9PSBEV19ETFZfTk9fRU5UUlkpCisJCQlicmVhazsKKworCQkvKiBHZXQgdGhlIERJRShEZWJ1Z2dpbmcgSW5mb3JtYXRpb24gRW50cnkpIG9mIHRoaXMgQ1UgKi8KKwkJcmV0ID0gZHdhcmZfc2libGluZ29mKF9fZHdfZGVidWcsIDAsICZsZi5jdV9kaWUsICZfX2R3X2Vycm9yKTsKKwkJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCisJCS8qIENoZWNrIGlmIHRhcmdldCBmaWxlIGlzIGluY2x1ZGVkLiAqLworCQlpZiAobHItPmZpbGUpCisJCQlsZi5mbm8gPSBjdV9maW5kX2ZpbGVubyhsZi5jdV9kaWUsIGxyLT5maWxlKTsKKworCQlpZiAoIWxyLT5maWxlIHx8IGxmLmZubykgeworCQkJaWYgKGxyLT5mdW5jdGlvbikKKwkJCQlmaW5kX2xpbmVfcmFuZ2VfYnlfZnVuYygmbGYpOworCQkJZWxzZSB7CisJCQkJbGYubG5vX3MgPSBsci0+c3RhcnQ7CisJCQkJaWYgKCFsci0+ZW5kKQorCQkJCQlsZi5sbm9fZSA9IChEd2FyZl9VbnNpZ25lZCktMTsKKwkJCQllbHNlCisJCQkJCWxmLmxub19lID0gbHItPmVuZDsKKwkJCQlmaW5kX2xpbmVfcmFuZ2VfYnlfbGluZSgmbGYpOworCQkJfQorCQkJLyogR2V0IHRoZSByZWFsIGZpbGUgcGF0aCAqLworCQkJaWYgKGxmLmZvdW5kKQorCQkJCWN1X2dldF9maWxlbmFtZShsZi5jdV9kaWUsIGxmLmZubywgJmxyLT5wYXRoKTsKKwkJfQorCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGxmLmN1X2RpZSwgRFdfRExBX0RJRSk7CisJfQorCXJldCA9IGR3YXJmX2ZpbmlzaChfX2R3X2RlYnVnLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCXJldHVybiBsZi5mb3VuZDsKK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCmluZGV4IGE0MDg2YWFkLi45NzJiMzg2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfUFJPQkVfRklOREVSX0gKICNkZWZpbmUgX1BST0JFX0ZJTkRFUl9ICiAKKyNpbmNsdWRlICJ1dGlsLmgiCisKICNkZWZpbmUgTUFYX1BBVEhfTEVOCQkgMjU2CiAjZGVmaW5lIE1BWF9QUk9CRV9CVUZGRVIJMTAyNAogI2RlZmluZSBNQVhfUFJPQkVTCQkgMTI4CkBAIC0zMiw4ICszNCwyNiBAQAogCWNoYXIJCQkqcHJvYmVzW01BWF9QUk9CRVNdOwkvKiBPdXRwdXQgYnVmZmVycyAod2lsbCBiZSBhbGxvY2F0ZWQpKi8KIH07CiAKKy8qIExpbmUgbnVtYmVyIGNvbnRhaW5lciAqLworc3RydWN0IGxpbmVfbm9kZSB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXVuc2lnbmVkIGludAkJbGluZTsKK307CisKKy8qIExpbmUgcmFuZ2UgKi8KK3N0cnVjdCBsaW5lX3JhbmdlIHsKKwljaGFyCQkJKmZpbGU7CQkJLyogRmlsZSBuYW1lICovCisJY2hhcgkJCSpmdW5jdGlvbjsJCS8qIEZ1bmN0aW9uIG5hbWUgKi8KKwl1bnNpZ25lZCBpbnQJCXN0YXJ0OwkJCS8qIFN0YXJ0IGxpbmUgbnVtYmVyICovCisJdW5zaWduZWQgaW50CQllbmQ7CQkJLyogRW5kIGxpbmUgbnVtYmVyICovCisJdW5zaWduZWQgaW50CQlvZmZzZXQ7CQkJLyogU3RhcnQgbGluZSBvZmZzZXQgKi8KKwljaGFyCQkJKnBhdGg7CQkJLyogUmVhbCBwYXRoIG5hbWUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpbmVfbGlzdDsJCS8qIFZpc2libGUgbGluZXMgKi8KK307CisKICNpZm5kZWYgTk9fTElCRFdBUkYKIGV4dGVybiBpbnQgZmluZF9wcm9iZXBvaW50KGludCBmZCwgc3RydWN0IHByb2JlX3BvaW50ICpwcCk7CitleHRlcm4gaW50IGZpbmRfbGluZV9yYW5nZShpbnQgZmQsIHN0cnVjdCBsaW5lX3JhbmdlICpscik7CiAKIC8qIFdvcmthcm91bmQgZm9yIHVuZGVmaW5lZCBfTUlQU19TWkxPTkcgYnVnIGluIGxpYmR3YXJmLmg6ICovCiAjaWZuZGVmIF9NSVBTX1NaTE9ORwpAQCAtNjAsNiArODAsMTkgQEAKIAljaGFyCQkJKmJ1ZjsJCQkvKiBDdXJyZW50IG91dHB1dCBidWZmZXIgKi8KIAlpbnQJCQlsZW47CQkJLyogTGVuZ3RoIG9mIG91dHB1dCBidWZmZXIgKi8KIH07CisKK3N0cnVjdCBsaW5lX2ZpbmRlciB7CisJc3RydWN0IGxpbmVfcmFuZ2UJKmxyOwkJCS8qIFRhcmdldCBsaW5lIHJhbmdlICovCisKKwlEd2FyZl9VbnNpZ25lZAkJZm5vOwkJCS8qIEZpbGUgbnVtYmVyICovCisJRHdhcmZfVW5zaWduZWQJCWxub19zOwkJCS8qIFN0YXJ0IGxpbmUgbnVtYmVyICovCisJRHdhcmZfVW5zaWduZWQJCWxub19lOwkJCS8qIEVuZCBsaW5lIG51bWJlciAqLworCUR3YXJmX0FkZHIJCWFkZHJfczsJCQkvKiBTdGFydCBhZGRyZXNzICovCisJRHdhcmZfQWRkcgkJYWRkcl9lOwkJCS8qIEVuZCBhZGRyZXNzICovCisJRHdhcmZfRGllCQljdV9kaWU7CQkJLyogQ3VycmVudCBDVSAqLworCWludAkJCWZvdW5kOworfTsKKwogI2VuZGlmIC8qIE5PX0xJQkRXQVJGICovCiAKICNlbmRpZiAvKl9QUk9CRV9GSU5ERVJfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLmMKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuYwpyZW5hbWUgdG8gdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwuYwppbmRleCA2ZDZkNzZiLi41Mzc2Mzc4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLmMKQEAgLTI1LDEwICsyNSwxNiBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KIAotI2luY2x1ZGUgIi4uL3BlcmYuaCIKLSNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSAidHJhY2UtZXZlbnQuaCIKLSNpbmNsdWRlICJ0cmFjZS1ldmVudC1wZXJsLmgiCisjaW5jbHVkZSAiLi4vLi4vcGVyZi5oIgorI2luY2x1ZGUgIi4uL3V0aWwuaCIKKyNpbmNsdWRlICIuLi90cmFjZS1ldmVudC5oIgorCisjaW5jbHVkZSA8RVhURVJOLmg+CisjaW5jbHVkZSA8cGVybC5oPgorCit2b2lkIGJvb3RfUGVyZl9fVHJhY2VfX0NvbnRleHQocFRIWF8gQ1YgKmN2KTsKK3ZvaWQgYm9vdF9EeW5hTG9hZGVyKHBUSFhfIENWICpjdik7Cit0eXBlZGVmIFBlcmxJbnRlcnByZXRlciAqIElOVEVSUDsKIAogdm9pZCB4c19pbml0KHBUSFgpOwogCkBAIC00OSw3ICs1NSw3IEBACiAKIHN0cnVjdCBldmVudCAqZXZlbnRzW0ZUUkFDRV9NQVhfRVZFTlRdOwogCi1zdGF0aWMgc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpzY3JpcHRpbmdfY29udGV4dDsKK2V4dGVybiBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OwogCiBzdGF0aWMgY2hhciAqY3VyX2ZpZWxkX25hbWU7CiBzdGF0aWMgaW50IHplcm9fZmxhZ19hdG9tOwpAQCAtMjM5LDMzICsyNDUsNiBAQAogCXJldHVybiBldmVudDsKIH0KIAotaW50IGNvbW1vbl9wYyhzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpCi17Ci0JaW50IHBjOwotCi0JcGMgPSBwYXJzZV9jb21tb25fcGMoY29udGV4dC0+ZXZlbnRfZGF0YSk7Ci0KLQlyZXR1cm4gcGM7Ci19Ci0KLWludCBjb21tb25fZmxhZ3Moc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KQotewotCWludCBmbGFnczsKLQotCWZsYWdzID0gcGFyc2VfY29tbW9uX2ZsYWdzKGNvbnRleHQtPmV2ZW50X2RhdGEpOwotCi0JcmV0dXJuIGZsYWdzOwotfQotCi1pbnQgY29tbW9uX2xvY2tfZGVwdGgoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KQotewotCWludCBsb2NrX2RlcHRoOwotCi0JbG9ja19kZXB0aCA9IHBhcnNlX2NvbW1vbl9sb2NrX2RlcHRoKGNvbnRleHQtPmV2ZW50X2RhdGEpOwotCi0JcmV0dXJuIGxvY2tfZGVwdGg7Ci19Ci0KIHN0YXRpYyB2b2lkIHBlcmxfcHJvY2Vzc19ldmVudChpbnQgY3B1LCB2b2lkICpkYXRhLAogCQkJICAgICAgIGludCBzaXplIF9fdW51c2VkLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcywgY2hhciAqY29tbSkKQEAgLTU4Nyw3NSArNTY2LDMgQEAKIAkucHJvY2Vzc19ldmVudCA9IHBlcmxfcHJvY2Vzc19ldmVudCwKIAkuZ2VuZXJhdGVfc2NyaXB0ID0gcGVybF9nZW5lcmF0ZV9zY3JpcHQsCiB9OwotCi1zdGF0aWMgdm9pZCBwcmludF91bnN1cHBvcnRlZF9tc2codm9pZCkKLXsKLQlmcHJpbnRmKHN0ZGVyciwgIlBlcmwgc2NyaXB0aW5nIG5vdCBzdXBwb3J0ZWQuIgotCQkiICBJbnN0YWxsIGxpYnBlcmwgYW5kIHJlYnVpbGQgcGVyZiB0byBlbmFibGUgaXQuXG4iCi0JCSJGb3IgZXhhbXBsZTpcbiAgIyBhcHQtZ2V0IGluc3RhbGwgbGlicGVybC1kZXYgKHVidW50dSkiCi0JCSJcbiAgIyB5dW0gaW5zdGFsbCBwZXJsLUV4dFV0aWxzLUVtYmVkIChGZWRvcmEpIgotCQkiXG4gIGV0Yy5cbiIpOwotfQotCi1zdGF0aWMgaW50IHBlcmxfc3RhcnRfc2NyaXB0X3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKnNjcmlwdCBfX3VudXNlZCwKLQkJCQkJIGludCBhcmdjIF9fdW51c2VkLAotCQkJCQkgY29uc3QgY2hhciAqKmFyZ3YgX191bnVzZWQpCi17Ci0JcHJpbnRfdW5zdXBwb3J0ZWRfbXNnKCk7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgcGVybF9zdG9wX3NjcmlwdF91bnN1cHBvcnRlZCh2b2lkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwZXJsX3Byb2Nlc3NfZXZlbnRfdW5zdXBwb3J0ZWQoaW50IGNwdSBfX3VudXNlZCwKLQkJCQkJICAgdm9pZCAqZGF0YSBfX3VudXNlZCwKLQkJCQkJICAgaW50IHNpemUgX191bnVzZWQsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcyBfX3VudXNlZCwKLQkJCQkJICAgY2hhciAqY29tbSBfX3VudXNlZCkKLXsKLX0KLQotc3RhdGljIGludCBwZXJsX2dlbmVyYXRlX3NjcmlwdF91bnN1cHBvcnRlZChjb25zdCBjaGFyICpvdXRmaWxlIF9fdW51c2VkKQotewotCXByaW50X3Vuc3VwcG9ydGVkX21zZygpOwotCi0JcmV0dXJuIC0xOwotfQotCi1zdHJ1Y3Qgc2NyaXB0aW5nX29wcyBwZXJsX3NjcmlwdGluZ191bnN1cHBvcnRlZF9vcHMgPSB7Ci0JLm5hbWUgPSAiUGVybCIsCi0JLnN0YXJ0X3NjcmlwdCA9IHBlcmxfc3RhcnRfc2NyaXB0X3Vuc3VwcG9ydGVkLAotCS5zdG9wX3NjcmlwdCA9IHBlcmxfc3RvcF9zY3JpcHRfdW5zdXBwb3J0ZWQsCi0JLnByb2Nlc3NfZXZlbnQgPSBwZXJsX3Byb2Nlc3NfZXZlbnRfdW5zdXBwb3J0ZWQsCi0JLmdlbmVyYXRlX3NjcmlwdCA9IHBlcmxfZ2VuZXJhdGVfc2NyaXB0X3Vuc3VwcG9ydGVkLAotfTsKLQotc3RhdGljIHZvaWQgcmVnaXN0ZXJfcGVybF9zY3JpcHRpbmcoc3RydWN0IHNjcmlwdGluZ19vcHMgKnNjcmlwdGluZ19vcHMpCi17Ci0JaW50IGVycjsKLQllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigiUGVybCIsIHNjcmlwdGluZ19vcHMpOwotCWlmIChlcnIpCi0JCWRpZSgiZXJyb3IgcmVnaXN0ZXJpbmcgUGVybCBzY3JpcHQgZXh0ZW5zaW9uIik7Ci0KLQllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigicGwiLCBzY3JpcHRpbmdfb3BzKTsKLQlpZiAoZXJyKQotCQlkaWUoImVycm9yIHJlZ2lzdGVyaW5nIHBsIHNjcmlwdCBleHRlbnNpb24iKTsKLQotCXNjcmlwdGluZ19jb250ZXh0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQpKTsKLX0KLQotI2lmZGVmIE5PX0xJQlBFUkwKLXZvaWQgc2V0dXBfcGVybF9zY3JpcHRpbmcodm9pZCkKLXsKLQlyZWdpc3Rlcl9wZXJsX3NjcmlwdGluZygmcGVybF9zY3JpcHRpbmdfdW5zdXBwb3J0ZWRfb3BzKTsKLX0KLSNlbHNlCi12b2lkIHNldHVwX3Blcmxfc2NyaXB0aW5nKHZvaWQpCi17Ci0JcmVnaXN0ZXJfcGVybF9zY3JpcHRpbmcoJnBlcmxfc2NyaXB0aW5nX29wcyk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2E0MTRiYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYwpAQCAtMCwwICsxLDU3MyBAQAorLyoKKyAqIHRyYWNlLWV2ZW50LXB5dGhvbi4gIEZlZWQgdHJhY2UgZXZlbnRzIHRvIGFuIGVtYmVkZGVkIFB5dGhvbiBpbnRlcnByZXRlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPFB5dGhvbi5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICIuLi8uLi9wZXJmLmgiCisjaW5jbHVkZSAiLi4vdXRpbC5oIgorI2luY2x1ZGUgIi4uL3RyYWNlLWV2ZW50LmgiCisKK1B5TU9ESU5JVF9GVU5DIGluaXRwZXJmX3RyYWNlX2NvbnRleHQodm9pZCk7CisKKyNkZWZpbmUgRlRSQUNFX01BWF9FVkVOVAkJCQlcCisJKCgxIDw8IChzaXplb2YodW5zaWduZWQgc2hvcnQpICogOCkpIC0gMSkKKworc3RydWN0IGV2ZW50ICpldmVudHNbRlRSQUNFX01BWF9FVkVOVF07CisKKyNkZWZpbmUgTUFYX0ZJRUxEUwk2NAorI2RlZmluZSBOX0NPTU1PTl9GSUVMRFMJNworCitleHRlcm4gc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpzY3JpcHRpbmdfY29udGV4dDsKKworc3RhdGljIGNoYXIgKmN1cl9maWVsZF9uYW1lOworc3RhdGljIGludCB6ZXJvX2ZsYWdfYXRvbTsKKworc3RhdGljIFB5T2JqZWN0ICptYWluX21vZHVsZSwgKm1haW5fZGljdDsKKworc3RhdGljIHZvaWQgaGFuZGxlcl9jYWxsX2RpZShjb25zdCBjaGFyICpoYW5kbGVyX25hbWUpCit7CisJUHlFcnJfUHJpbnQoKTsKKwlQeV9GYXRhbEVycm9yKCJwcm9ibGVtIGluIFB5dGhvbiB0cmFjZSBldmVudCBoYW5kbGVyIik7Cit9CisKK3N0YXRpYyB2b2lkIGRlZmluZV92YWx1ZShlbnVtIHByaW50X2FyZ190eXBlIGZpZWxkX3R5cGUsCisJCQkgY29uc3QgY2hhciAqZXZfbmFtZSwKKwkJCSBjb25zdCBjaGFyICpmaWVsZF9uYW1lLAorCQkJIGNvbnN0IGNoYXIgKmZpZWxkX3ZhbHVlLAorCQkJIGNvbnN0IGNoYXIgKmZpZWxkX3N0cikKK3sKKwljb25zdCBjaGFyICpoYW5kbGVyX25hbWUgPSAiZGVmaW5lX2ZsYWdfdmFsdWUiOworCVB5T2JqZWN0ICpoYW5kbGVyLCAqdCwgKnJldHZhbDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7CisJdW5zaWduZWQgbiA9IDA7CisKKwlpZiAoZmllbGRfdHlwZSA9PSBQUklOVF9TWU1CT0wpCisJCWhhbmRsZXJfbmFtZSA9ICJkZWZpbmVfc3ltYm9saWNfdmFsdWUiOworCisJdCA9IFB5VHVwbGVfTmV3KDQpOworCWlmICghdCkKKwkJUHlfRmF0YWxFcnJvcigiY291bGRuJ3QgY3JlYXRlIFB5dGhvbiB0dXBsZSIpOworCisJdmFsdWUgPSBldmFsX2ZsYWcoZmllbGRfdmFsdWUpOworCisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlTdHJpbmdfRnJvbVN0cmluZyhldl9uYW1lKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlTdHJpbmdfRnJvbVN0cmluZyhmaWVsZF9uYW1lKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlJbnRfRnJvbUxvbmcodmFsdWUpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeVN0cmluZ19Gcm9tU3RyaW5nKGZpZWxkX3N0cikpOworCisJaGFuZGxlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1haW5fZGljdCwgaGFuZGxlcl9uYW1lKTsKKwlpZiAoaGFuZGxlciAmJiBQeUNhbGxhYmxlX0NoZWNrKGhhbmRsZXIpKSB7CisJCXJldHZhbCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoaGFuZGxlciwgdCk7CisJCWlmIChyZXR2YWwgPT0gTlVMTCkKKwkJCWhhbmRsZXJfY2FsbF9kaWUoaGFuZGxlcl9uYW1lKTsKKwl9CisKKwlQeV9ERUNSRUYodCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlZmluZV92YWx1ZXMoZW51bSBwcmludF9hcmdfdHlwZSBmaWVsZF90eXBlLAorCQkJICBzdHJ1Y3QgcHJpbnRfZmxhZ19zeW0gKmZpZWxkLAorCQkJICBjb25zdCBjaGFyICpldl9uYW1lLAorCQkJICBjb25zdCBjaGFyICpmaWVsZF9uYW1lKQoreworCWRlZmluZV92YWx1ZShmaWVsZF90eXBlLCBldl9uYW1lLCBmaWVsZF9uYW1lLCBmaWVsZC0+dmFsdWUsCisJCSAgICAgZmllbGQtPnN0cik7CisKKwlpZiAoZmllbGQtPm5leHQpCisJCWRlZmluZV92YWx1ZXMoZmllbGRfdHlwZSwgZmllbGQtPm5leHQsIGV2X25hbWUsIGZpZWxkX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBkZWZpbmVfZmllbGQoZW51bSBwcmludF9hcmdfdHlwZSBmaWVsZF90eXBlLAorCQkJIGNvbnN0IGNoYXIgKmV2X25hbWUsCisJCQkgY29uc3QgY2hhciAqZmllbGRfbmFtZSwKKwkJCSBjb25zdCBjaGFyICpkZWxpbSkKK3sKKwljb25zdCBjaGFyICpoYW5kbGVyX25hbWUgPSAiZGVmaW5lX2ZsYWdfZmllbGQiOworCVB5T2JqZWN0ICpoYW5kbGVyLCAqdCwgKnJldHZhbDsKKwl1bnNpZ25lZCBuID0gMDsKKworCWlmIChmaWVsZF90eXBlID09IFBSSU5UX1NZTUJPTCkKKwkJaGFuZGxlcl9uYW1lID0gImRlZmluZV9zeW1ib2xpY19maWVsZCI7CisKKwlpZiAoZmllbGRfdHlwZSA9PSBQUklOVF9GTEFHUykKKwkJdCA9IFB5VHVwbGVfTmV3KDMpOworCWVsc2UKKwkJdCA9IFB5VHVwbGVfTmV3KDIpOworCWlmICghdCkKKwkJUHlfRmF0YWxFcnJvcigiY291bGRuJ3QgY3JlYXRlIFB5dGhvbiB0dXBsZSIpOworCisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlTdHJpbmdfRnJvbVN0cmluZyhldl9uYW1lKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlTdHJpbmdfRnJvbVN0cmluZyhmaWVsZF9uYW1lKSk7CisJaWYgKGZpZWxkX3R5cGUgPT0gUFJJTlRfRkxBR1MpCisJCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5U3RyaW5nX0Zyb21TdHJpbmcoZGVsaW0pKTsKKworCWhhbmRsZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtYWluX2RpY3QsIGhhbmRsZXJfbmFtZSk7CisJaWYgKGhhbmRsZXIgJiYgUHlDYWxsYWJsZV9DaGVjayhoYW5kbGVyKSkgeworCQlyZXR2YWwgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGhhbmRsZXIsIHQpOworCQlpZiAocmV0dmFsID09IE5VTEwpCisJCQloYW5kbGVyX2NhbGxfZGllKGhhbmRsZXJfbmFtZSk7CisJfQorCisJUHlfREVDUkVGKHQpOworfQorCitzdGF0aWMgdm9pZCBkZWZpbmVfZXZlbnRfc3ltYm9scyhzdHJ1Y3QgZXZlbnQgKmV2ZW50LAorCQkJCSBjb25zdCBjaGFyICpldl9uYW1lLAorCQkJCSBzdHJ1Y3QgcHJpbnRfYXJnICphcmdzKQoreworCXN3aXRjaCAoYXJncy0+dHlwZSkgeworCWNhc2UgUFJJTlRfTlVMTDoKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9BVE9NOgorCQlkZWZpbmVfdmFsdWUoUFJJTlRfRkxBR1MsIGV2X25hbWUsIGN1cl9maWVsZF9uYW1lLCAiMCIsCisJCQkgICAgIGFyZ3MtPmF0b20uYXRvbSk7CisJCXplcm9fZmxhZ19hdG9tID0gMDsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9GSUVMRDoKKwkJaWYgKGN1cl9maWVsZF9uYW1lKQorCQkJZnJlZShjdXJfZmllbGRfbmFtZSk7CisJCWN1cl9maWVsZF9uYW1lID0gc3RyZHVwKGFyZ3MtPmZpZWxkLm5hbWUpOworCQlicmVhazsKKwljYXNlIFBSSU5UX0ZMQUdTOgorCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+ZmxhZ3MuZmllbGQpOworCQlkZWZpbmVfZmllbGQoUFJJTlRfRkxBR1MsIGV2X25hbWUsIGN1cl9maWVsZF9uYW1lLAorCQkJICAgICBhcmdzLT5mbGFncy5kZWxpbSk7CisJCWRlZmluZV92YWx1ZXMoUFJJTlRfRkxBR1MsIGFyZ3MtPmZsYWdzLmZsYWdzLCBldl9uYW1lLAorCQkJICAgICAgY3VyX2ZpZWxkX25hbWUpOworCQlicmVhazsKKwljYXNlIFBSSU5UX1NZTUJPTDoKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPnN5bWJvbC5maWVsZCk7CisJCWRlZmluZV9maWVsZChQUklOVF9TWU1CT0wsIGV2X25hbWUsIGN1cl9maWVsZF9uYW1lLCBOVUxMKTsKKwkJZGVmaW5lX3ZhbHVlcyhQUklOVF9TWU1CT0wsIGFyZ3MtPnN5bWJvbC5zeW1ib2xzLCBldl9uYW1lLAorCQkJICAgICAgY3VyX2ZpZWxkX25hbWUpOworCQlicmVhazsKKwljYXNlIFBSSU5UX1NUUklORzoKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9UWVBFOgorCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+dHlwZWNhc3QuaXRlbSk7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfT1A6CisJCWlmIChzdHJjbXAoYXJncy0+b3Aub3AsICI6IikgPT0gMCkKKwkJCXplcm9fZmxhZ19hdG9tID0gMTsKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPm9wLmxlZnQpOworCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+b3AucmlnaHQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiB3ZSBzaG91bGQgd2Fybi4uLiAqLworCQlyZXR1cm47CisJfQorCisJaWYgKGFyZ3MtPm5leHQpCisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT5uZXh0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZXZlbnQgKmZpbmRfY2FjaGVfZXZlbnQoaW50IHR5cGUpCit7CisJc3RhdGljIGNoYXIgZXZfbmFtZVsyNTZdOworCXN0cnVjdCBldmVudCAqZXZlbnQ7CisKKwlpZiAoZXZlbnRzW3R5cGVdKQorCQlyZXR1cm4gZXZlbnRzW3R5cGVdOworCisJZXZlbnRzW3R5cGVdID0gZXZlbnQgPSB0cmFjZV9maW5kX2V2ZW50KHR5cGUpOworCWlmICghZXZlbnQpCisJCXJldHVybiBOVUxMOworCisJc3ByaW50Zihldl9uYW1lLCAiJXNfXyVzIiwgZXZlbnQtPnN5c3RlbSwgZXZlbnQtPm5hbWUpOworCisJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGV2ZW50LT5wcmludF9mbXQuYXJncyk7CisKKwlyZXR1cm4gZXZlbnQ7Cit9CisKK3N0YXRpYyB2b2lkIHB5dGhvbl9wcm9jZXNzX2V2ZW50KGludCBjcHUsIHZvaWQgKmRhdGEsCisJCQkJIGludCBzaXplIF9fdW51c2VkLAorCQkJCSB1bnNpZ25lZCBsb25nIGxvbmcgbnNlY3MsIGNoYXIgKmNvbW0pCit7CisJUHlPYmplY3QgKmhhbmRsZXIsICpyZXR2YWwsICpjb250ZXh0LCAqdDsKKwlzdGF0aWMgY2hhciBoYW5kbGVyX25hbWVbMjU2XTsKKwlzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmaWVsZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgcywgbnM7CisJc3RydWN0IGV2ZW50ICpldmVudDsKKwl1bnNpZ25lZCBuID0gMDsKKwlpbnQgdHlwZTsKKwlpbnQgcGlkOworCisJdCA9IFB5VHVwbGVfTmV3KE1BWF9GSUVMRFMpOworCWlmICghdCkKKwkJUHlfRmF0YWxFcnJvcigiY291bGRuJ3QgY3JlYXRlIFB5dGhvbiB0dXBsZSIpOworCisJdHlwZSA9IHRyYWNlX3BhcnNlX2NvbW1vbl90eXBlKGRhdGEpOworCisJZXZlbnQgPSBmaW5kX2NhY2hlX2V2ZW50KHR5cGUpOworCWlmICghZXZlbnQpCisJCWRpZSgidWchIG5vIGV2ZW50IGZvdW5kIGZvciB0eXBlICVkIiwgdHlwZSk7CisKKwlwaWQgPSB0cmFjZV9wYXJzZV9jb21tb25fcGlkKGRhdGEpOworCisJc3ByaW50ZihoYW5kbGVyX25hbWUsICIlc19fJXMiLCBldmVudC0+c3lzdGVtLCBldmVudC0+bmFtZSk7CisKKwlzID0gbnNlY3MgLyBOU0VDU19QRVJfU0VDOworCW5zID0gbnNlY3MgLSBzICogTlNFQ1NfUEVSX1NFQzsKKworCXNjcmlwdGluZ19jb250ZXh0LT5ldmVudF9kYXRhID0gZGF0YTsKKworCWNvbnRleHQgPSBQeUNPYmplY3RfRnJvbVZvaWRQdHIoc2NyaXB0aW5nX2NvbnRleHQsIE5VTEwpOworCisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlTdHJpbmdfRnJvbVN0cmluZyhoYW5kbGVyX25hbWUpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLAorCQkJUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKHNjcmlwdGluZ19jb250ZXh0LCBOVUxMKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlJbnRfRnJvbUxvbmcoY3B1KSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlJbnRfRnJvbUxvbmcocykpOworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5SW50X0Zyb21Mb25nKG5zKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlJbnRfRnJvbUxvbmcocGlkKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlTdHJpbmdfRnJvbVN0cmluZyhjb21tKSk7CisKKwlmb3IgKGZpZWxkID0gZXZlbnQtPmZvcm1hdC5maWVsZHM7IGZpZWxkOyBmaWVsZCA9IGZpZWxkLT5uZXh0KSB7CisJCWlmIChmaWVsZC0+ZmxhZ3MgJiBGSUVMRF9JU19TVFJJTkcpIHsKKwkJCWludCBvZmZzZXQ7CisJCQlpZiAoZmllbGQtPmZsYWdzICYgRklFTERfSVNfRFlOQU1JQykgeworCQkJCW9mZnNldCA9ICooaW50ICopKGRhdGEgKyBmaWVsZC0+b2Zmc2V0KTsKKwkJCQlvZmZzZXQgJj0gMHhmZmZmOworCQkJfSBlbHNlCisJCQkJb2Zmc2V0ID0gZmllbGQtPm9mZnNldDsKKwkJCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssCisJCQkJUHlTdHJpbmdfRnJvbVN0cmluZygoY2hhciAqKWRhdGEgKyBvZmZzZXQpKTsKKwkJfSBlbHNlIHsgLyogRklFTERfSVNfTlVNRVJJQyAqLworCQkJdmFsID0gcmVhZF9zaXplKGRhdGEgKyBmaWVsZC0+b2Zmc2V0LCBmaWVsZC0+c2l6ZSk7CisJCQlpZiAoZmllbGQtPmZsYWdzICYgRklFTERfSVNfU0lHTkVEKSB7CisJCQkJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlJbnRfRnJvbUxvbmcodmFsKSk7CisJCQl9IGVsc2UgeworCQkJCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5SW50X0Zyb21Mb25nKHZhbCkpOworCQkJfQorCQl9CisJfQorCisJaWYgKF9QeVR1cGxlX1Jlc2l6ZSgmdCwgbikgPT0gLTEpCisJCVB5X0ZhdGFsRXJyb3IoImVycm9yIHJlc2l6aW5nIFB5dGhvbiB0dXBsZSIpOworCisJaGFuZGxlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1haW5fZGljdCwgaGFuZGxlcl9uYW1lKTsKKwlpZiAoaGFuZGxlciAmJiBQeUNhbGxhYmxlX0NoZWNrKGhhbmRsZXIpKSB7CisJCXJldHZhbCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoaGFuZGxlciwgdCk7CisJCWlmIChyZXR2YWwgPT0gTlVMTCkKKwkJCWhhbmRsZXJfY2FsbF9kaWUoaGFuZGxlcl9uYW1lKTsKKwl9IGVsc2UgeworCQloYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWFpbl9kaWN0LCAidHJhY2VfdW5oYW5kbGVkIik7CisJCWlmIChoYW5kbGVyICYmIFB5Q2FsbGFibGVfQ2hlY2soaGFuZGxlcikpIHsKKwkJCWlmIChfUHlUdXBsZV9SZXNpemUoJnQsIE5fQ09NTU9OX0ZJRUxEUykgPT0gLTEpCisJCQkJUHlfRmF0YWxFcnJvcigiZXJyb3IgcmVzaXppbmcgUHl0aG9uIHR1cGxlIik7CisKKwkJCXJldHZhbCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoaGFuZGxlciwgdCk7CisJCQlpZiAocmV0dmFsID09IE5VTEwpCisJCQkJaGFuZGxlcl9jYWxsX2RpZSgidHJhY2VfdW5oYW5kbGVkIik7CisJCX0KKwl9CisKKwlQeV9ERUNSRUYodCk7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3N0YXJ0X3N1Yih2b2lkKQoreworCVB5T2JqZWN0ICpoYW5kbGVyLCAqcmV0dmFsOworCWludCBlcnIgPSAwOworCisJbWFpbl9tb2R1bGUgPSBQeUltcG9ydF9BZGRNb2R1bGUoIl9fbWFpbl9fIik7CisJaWYgKG1haW5fbW9kdWxlID09IE5VTEwpCisJCXJldHVybiAtMTsKKwlQeV9JTkNSRUYobWFpbl9tb2R1bGUpOworCisJbWFpbl9kaWN0ID0gUHlNb2R1bGVfR2V0RGljdChtYWluX21vZHVsZSk7CisJaWYgKG1haW5fZGljdCA9PSBOVUxMKSB7CisJCWVyciA9IC0xOworCQlnb3RvIGVycm9yOworCX0KKwlQeV9JTkNSRUYobWFpbl9kaWN0KTsKKworCWhhbmRsZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtYWluX2RpY3QsICJ0cmFjZV9iZWdpbiIpOworCWlmIChoYW5kbGVyID09IE5VTEwgfHwgIVB5Q2FsbGFibGVfQ2hlY2soaGFuZGxlcikpCisJCWdvdG8gb3V0OworCisJcmV0dmFsID0gUHlPYmplY3RfQ2FsbE9iamVjdChoYW5kbGVyLCBOVUxMKTsKKwlpZiAocmV0dmFsID09IE5VTEwpCisJCWhhbmRsZXJfY2FsbF9kaWUoInRyYWNlX2JlZ2luIik7CisKKwlQeV9ERUNSRUYocmV0dmFsKTsKKwlyZXR1cm4gZXJyOworZXJyb3I6CisJUHlfWERFQ1JFRihtYWluX2RpY3QpOworCVB5X1hERUNSRUYobWFpbl9tb2R1bGUpOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTdGFydCB0cmFjZSBzY3JpcHQKKyAqLworc3RhdGljIGludCBweXRob25fc3RhcnRfc2NyaXB0KGNvbnN0IGNoYXIgKnNjcmlwdCwgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKipjb21tYW5kX2xpbmU7CisJY2hhciBidWZbUEFUSF9NQVhdOworCWludCBpLCBlcnIgPSAwOworCUZJTEUgKmZwOworCisJY29tbWFuZF9saW5lID0gbWFsbG9jKChhcmdjICsgMSkgKiBzaXplb2YoY29uc3QgY2hhciAqKSk7CisJY29tbWFuZF9saW5lWzBdID0gc2NyaXB0OworCWZvciAoaSA9IDE7IGkgPCBhcmdjICsgMTsgaSsrKQorCQljb21tYW5kX2xpbmVbaV0gPSBhcmd2W2kgLSAxXTsKKworCVB5X0luaXRpYWxpemUoKTsKKworCWluaXRwZXJmX3RyYWNlX2NvbnRleHQoKTsKKworCVB5U3lzX1NldEFyZ3YoYXJnYyArIDEsIChjaGFyICoqKWNvbW1hbmRfbGluZSk7CisKKwlmcCA9IGZvcGVuKHNjcmlwdCwgInIiKTsKKwlpZiAoIWZwKSB7CisJCXNwcmludGYoYnVmLCAiQ2FuJ3Qgb3BlbiBweXRob24gc2NyaXB0IFwiJXNcIiIsIHNjcmlwdCk7CisJCXBlcnJvcihidWYpOworCQllcnIgPSAtMTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBQeVJ1bl9TaW1wbGVGaWxlKGZwLCBzY3JpcHQpOworCWlmIChlcnIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBydW5uaW5nIHB5dGhvbiBzY3JpcHQgJXNcbiIsIHNjcmlwdCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJyID0gcnVuX3N0YXJ0X3N1YigpOworCWlmIChlcnIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBzdGFydGluZyBweXRob24gc2NyaXB0ICVzXG4iLCBzY3JpcHQpOworCQlnb3RvIGVycm9yOworCX0KKworCWZyZWUoY29tbWFuZF9saW5lKTsKKwlmcHJpbnRmKHN0ZGVyciwgInBlcmYgdHJhY2Ugc3RhcnRlZCB3aXRoIFB5dGhvbiBzY3JpcHQgJXNcblxuIiwKKwkJc2NyaXB0KTsKKworCXJldHVybiBlcnI7CitlcnJvcjoKKwlQeV9GaW5hbGl6ZSgpOworCWZyZWUoY29tbWFuZF9saW5lKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTdG9wIHRyYWNlIHNjcmlwdAorICovCitzdGF0aWMgaW50IHB5dGhvbl9zdG9wX3NjcmlwdCh2b2lkKQoreworCVB5T2JqZWN0ICpoYW5kbGVyLCAqcmV0dmFsOworCWludCBlcnIgPSAwOworCisJaGFuZGxlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1haW5fZGljdCwgInRyYWNlX2VuZCIpOworCWlmIChoYW5kbGVyID09IE5VTEwgfHwgIVB5Q2FsbGFibGVfQ2hlY2soaGFuZGxlcikpCisJCWdvdG8gb3V0OworCisJcmV0dmFsID0gUHlPYmplY3RfQ2FsbE9iamVjdChoYW5kbGVyLCBOVUxMKTsKKwlpZiAocmV0dmFsID09IE5VTEwpCisJCWhhbmRsZXJfY2FsbF9kaWUoInRyYWNlX2VuZCIpOworCWVsc2UKKwkJUHlfREVDUkVGKHJldHZhbCk7CitvdXQ6CisJUHlfWERFQ1JFRihtYWluX2RpY3QpOworCVB5X1hERUNSRUYobWFpbl9tb2R1bGUpOworCVB5X0ZpbmFsaXplKCk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIlxucGVyZiB0cmFjZSBQeXRob24gc2NyaXB0IHN0b3BwZWRcbiIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBweXRob25fZ2VuZXJhdGVfc2NyaXB0KGNvbnN0IGNoYXIgKm91dGZpbGUpCit7CisJc3RydWN0IGV2ZW50ICpldmVudCA9IE5VTEw7CisJc3RydWN0IGZvcm1hdF9maWVsZCAqZjsKKwljaGFyIGZuYW1lW1BBVEhfTUFYXTsKKwlpbnQgbm90X2ZpcnN0LCBjb3VudDsKKwlGSUxFICpvZnA7CisKKwlzcHJpbnRmKGZuYW1lLCAiJXMucHkiLCBvdXRmaWxlKTsKKwlvZnAgPSBmb3BlbihmbmFtZSwgInciKTsKKwlpZiAob2ZwID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJjb3VsZG4ndCBvcGVuICVzXG4iLCBmbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisJZnByaW50ZihvZnAsICIjIHBlcmYgdHJhY2UgZXZlbnQgaGFuZGxlcnMsICIKKwkJImdlbmVyYXRlZCBieSBwZXJmIHRyYWNlIC1nIHB5dGhvblxuIik7CisKKwlmcHJpbnRmKG9mcCwgIiMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIgorCQkiIExpY2Vuc2UgdmVyc2lvbiAyXG5cbiIpOworCisJZnByaW50ZihvZnAsICIjIFRoZSBjb21tb25fKiBldmVudCBoYW5kbGVyIGZpZWxkcyBhcmUgdGhlIG1vc3QgdXNlZnVsICIKKwkJImZpZWxkcyBjb21tb24gdG9cbiIpOworCisJZnByaW50ZihvZnAsICIjIGFsbCBldmVudHMuICBUaGV5IGRvbid0IG5lY2Vzc2FyaWx5IGNvcnJlc3BvbmQgdG8gIgorCQkidGhlICdjb21tb25fKicgZmllbGRzXG4iKTsKKworCWZwcmludGYob2ZwLCAiIyBpbiB0aGUgZm9ybWF0IGZpbGVzLiAgVGhvc2UgZmllbGRzIG5vdCBhdmFpbGFibGUgYXMgIgorCQkiaGFuZGxlciBwYXJhbXMgY2FuXG4iKTsKKworCWZwcmludGYob2ZwLCAiIyBiZSByZXRyaWV2ZWQgdXNpbmcgUHl0aG9uIGZ1bmN0aW9ucyBvZiB0aGUgZm9ybSAiCisJCSJjb21tb25fKihjb250ZXh0KS5cbiIpOworCisJZnByaW50ZihvZnAsICIjIFNlZSB0aGUgcGVyZi10cmFjZS1weXRob24gRG9jdW1lbnRhdGlvbiBmb3IgdGhlIGxpc3QgIgorCQkib2YgYXZhaWxhYmxlIGZ1bmN0aW9ucy5cblxuIik7CisKKwlmcHJpbnRmKG9mcCwgImltcG9ydCBvc1xuIik7CisJZnByaW50ZihvZnAsICJpbXBvcnQgc3lzXG5cbiIpOworCisJZnByaW50ZihvZnAsICJzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFxcXG4iKTsKKwlmcHJpbnRmKG9mcCwgIlx0Jy9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKVxuIik7CisJZnByaW50ZihvZnAsICJcbmZyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqXG4iKTsKKwlmcHJpbnRmKG9mcCwgImZyb20gQ29yZSBpbXBvcnQgKlxuXG5cbiIpOworCisJZnByaW50ZihvZnAsICJkZWYgdHJhY2VfYmVnaW4oKTpcbiIpOworCWZwcmludGYob2ZwLCAiXHRwcmludCBcImluIHRyYWNlX2JlZ2luXCJcblxuIik7CisKKwlmcHJpbnRmKG9mcCwgImRlZiB0cmFjZV9lbmQoKTpcbiIpOworCWZwcmludGYob2ZwLCAiXHRwcmludCBcImluIHRyYWNlX2VuZFwiXG5cbiIpOworCisJd2hpbGUgKChldmVudCA9IHRyYWNlX2ZpbmRfbmV4dF9ldmVudChldmVudCkpKSB7CisJCWZwcmludGYob2ZwLCAiZGVmICVzX18lcygiLCBldmVudC0+c3lzdGVtLCBldmVudC0+bmFtZSk7CisJCWZwcmludGYob2ZwLCAiZXZlbnRfbmFtZSwgIik7CisJCWZwcmludGYob2ZwLCAiY29udGV4dCwgIik7CisJCWZwcmludGYob2ZwLCAiY29tbW9uX2NwdSxcbiIpOworCQlmcHJpbnRmKG9mcCwgIlx0Y29tbW9uX3NlY3MsICIpOworCQlmcHJpbnRmKG9mcCwgImNvbW1vbl9uc2VjcywgIik7CisJCWZwcmludGYob2ZwLCAiY29tbW9uX3BpZCwgIik7CisJCWZwcmludGYob2ZwLCAiY29tbW9uX2NvbW0sXG5cdCIpOworCisJCW5vdF9maXJzdCA9IDA7CisJCWNvdW50ID0gMDsKKworCQlmb3IgKGYgPSBldmVudC0+Zm9ybWF0LmZpZWxkczsgZjsgZiA9IGYtPm5leHQpIHsKKwkJCWlmIChub3RfZmlyc3QrKykKKwkJCQlmcHJpbnRmKG9mcCwgIiwgIik7CisJCQlpZiAoKytjb3VudCAlIDUgPT0gMCkKKwkJCQlmcHJpbnRmKG9mcCwgIlxuXHQiKTsKKworCQkJZnByaW50ZihvZnAsICIlcyIsIGYtPm5hbWUpOworCQl9CisJCWZwcmludGYob2ZwLCAiKTpcbiIpOworCisJCWZwcmludGYob2ZwLCAiXHRcdHByaW50X2hlYWRlcihldmVudF9uYW1lLCBjb21tb25fY3B1LCAiCisJCQkiY29tbW9uX3NlY3MsIGNvbW1vbl9uc2Vjcyxcblx0XHRcdCIKKwkJCSJjb21tb25fcGlkLCBjb21tb25fY29tbSlcblxuIik7CisKKwkJZnByaW50ZihvZnAsICJcdFx0cHJpbnQgXCIiKTsKKworCQlub3RfZmlyc3QgPSAwOworCQljb3VudCA9IDA7CisKKwkJZm9yIChmID0gZXZlbnQtPmZvcm1hdC5maWVsZHM7IGY7IGYgPSBmLT5uZXh0KSB7CisJCQlpZiAobm90X2ZpcnN0KyspCisJCQkJZnByaW50ZihvZnAsICIsICIpOworCQkJaWYgKGNvdW50ICYmIGNvdW50ICUgMyA9PSAwKSB7CisJCQkJZnByaW50ZihvZnAsICJcIiBcXFxuXHRcdFwiIik7CisJCQl9CisJCQljb3VudCsrOworCisJCQlmcHJpbnRmKG9mcCwgIiVzPSIsIGYtPm5hbWUpOworCQkJaWYgKGYtPmZsYWdzICYgRklFTERfSVNfU1RSSU5HIHx8CisJCQkgICAgZi0+ZmxhZ3MgJiBGSUVMRF9JU19GTEFHIHx8CisJCQkgICAgZi0+ZmxhZ3MgJiBGSUVMRF9JU19TWU1CT0xJQykKKwkJCQlmcHJpbnRmKG9mcCwgIiUlcyIpOworCQkJZWxzZSBpZiAoZi0+ZmxhZ3MgJiBGSUVMRF9JU19TSUdORUQpCisJCQkJZnByaW50ZihvZnAsICIlJWQiKTsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKG9mcCwgIiUldSIpOworCQl9CisKKwkJZnByaW50ZihvZnAsICJcXG5cIiAlJSBcXFxuXHRcdCgiKTsKKworCQlub3RfZmlyc3QgPSAwOworCQljb3VudCA9IDA7CisKKwkJZm9yIChmID0gZXZlbnQtPmZvcm1hdC5maWVsZHM7IGY7IGYgPSBmLT5uZXh0KSB7CisJCQlpZiAobm90X2ZpcnN0KyspCisJCQkJZnByaW50ZihvZnAsICIsICIpOworCisJCQlpZiAoKytjb3VudCAlIDUgPT0gMCkKKwkJCQlmcHJpbnRmKG9mcCwgIlxuXHRcdCIpOworCisJCQlpZiAoZi0+ZmxhZ3MgJiBGSUVMRF9JU19GTEFHKSB7CisJCQkJaWYgKChjb3VudCAtIDEpICUgNSAhPSAwKSB7CisJCQkJCWZwcmludGYob2ZwLCAiXG5cdFx0Iik7CisJCQkJCWNvdW50ID0gNDsKKwkJCQl9CisJCQkJZnByaW50ZihvZnAsICJmbGFnX3N0cihcIiIpOworCQkJCWZwcmludGYob2ZwLCAiJXNfXyVzXCIsICIsIGV2ZW50LT5zeXN0ZW0sCisJCQkJCWV2ZW50LT5uYW1lKTsKKwkJCQlmcHJpbnRmKG9mcCwgIlwiJXNcIiwgJXMpIiwgZi0+bmFtZSwKKwkJCQkJZi0+bmFtZSk7CisJCQl9IGVsc2UgaWYgKGYtPmZsYWdzICYgRklFTERfSVNfU1lNQk9MSUMpIHsKKwkJCQlpZiAoKGNvdW50IC0gMSkgJSA1ICE9IDApIHsKKwkJCQkJZnByaW50ZihvZnAsICJcblx0XHQiKTsKKwkJCQkJY291bnQgPSA0OworCQkJCX0KKwkJCQlmcHJpbnRmKG9mcCwgInN5bWJvbF9zdHIoXCIiKTsKKwkJCQlmcHJpbnRmKG9mcCwgIiVzX18lc1wiLCAiLCBldmVudC0+c3lzdGVtLAorCQkJCQlldmVudC0+bmFtZSk7CisJCQkJZnByaW50ZihvZnAsICJcIiVzXCIsICVzKSIsIGYtPm5hbWUsCisJCQkJCWYtPm5hbWUpOworCQkJfSBlbHNlCisJCQkJZnByaW50ZihvZnAsICIlcyIsIGYtPm5hbWUpOworCQl9CisKKwkJZnByaW50ZihvZnAsICIpLFxuXG4iKTsKKwl9CisKKwlmcHJpbnRmKG9mcCwgImRlZiB0cmFjZV91bmhhbmRsZWQoZXZlbnRfbmFtZSwgY29udGV4dCwgIgorCQkiY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2Vjcyxcblx0XHQiCisJCSJjb21tb25fcGlkLCBjb21tb25fY29tbSk6XG4iKTsKKworCWZwcmludGYob2ZwLCAiXHRcdHByaW50X2hlYWRlcihldmVudF9uYW1lLCBjb21tb25fY3B1LCAiCisJCSJjb21tb25fc2VjcywgY29tbW9uX25zZWNzLFxuXHRcdGNvbW1vbl9waWQsICIKKwkJImNvbW1vbl9jb21tKVxuXG4iKTsKKworCWZwcmludGYob2ZwLCAiZGVmIHByaW50X2hlYWRlcigiCisJCSJldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pOlxuIgorCQkiXHRwcmludCBcIiUlLTIwcyAlJTV1ICUlMDV1LiUlMDl1ICUlOHUgJSUtMjBzIFwiICUlIFxcXG5cdCIKKwkJIihldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pLFxuIik7CisKKwlmY2xvc2Uob2ZwKTsKKworCWZwcmludGYoc3RkZXJyLCAiZ2VuZXJhdGVkIFB5dGhvbiBzY3JpcHQ6ICVzXG4iLCBmbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNjcmlwdGluZ19vcHMgcHl0aG9uX3NjcmlwdGluZ19vcHMgPSB7CisJLm5hbWUgPSAiUHl0aG9uIiwKKwkuc3RhcnRfc2NyaXB0ID0gcHl0aG9uX3N0YXJ0X3NjcmlwdCwKKwkuc3RvcF9zY3JpcHQgPSBweXRob25fc3RvcF9zY3JpcHQsCisJLnByb2Nlc3NfZXZlbnQgPSBweXRob25fcHJvY2Vzc19ldmVudCwKKwkuZ2VuZXJhdGVfc2NyaXB0ID0gcHl0aG9uX2dlbmVyYXRlX3NjcmlwdCwKK307CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwppbmRleCBjZTNhNmM4Li4wZGU3MjU4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKQEAgLTEsNSArMSw4IEBACisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAorI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKQEAgLTQ5LDYgKzUyLDExIEBACiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgaW5saW5lIGludCBwZXJmX3Nlc3Npb25fX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQoreworCXJldHVybiBtYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoJnNlbGYtPmttYXBzLCBzZWxmLT52bWxpbnV4X21hcHMpOworfQorCiBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpwZXJmX3Nlc3Npb25fX25ldyhjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG1vZGUsIGJvb2wgZm9yY2UpCiB7CiAJc2l6ZV90IGxlbiA9IGZpbGVuYW1lID8gc3RybGVuKGZpbGVuYW1lKSArIDEgOiAwOwpAQCAtNjYsMTMgKzc0LDIyIEBACiAJc2VsZi0+bW1hcF93aW5kb3cgPSAzMjsKIAlzZWxmLT5jd2QgPSBOVUxMOwogCXNlbGYtPmN3ZGxlbiA9IDA7CisJc2VsZi0+dW5rbm93bl9ldmVudHMgPSAwOwogCW1hcF9ncm91cHNfX2luaXQoJnNlbGYtPmttYXBzKTsKIAotCWlmIChwZXJmX3Nlc3Npb25fX2NyZWF0ZV9rZXJuZWxfbWFwcyhzZWxmKSA8IDApCi0JCWdvdG8gb3V0X2RlbGV0ZTsKKwlpZiAobW9kZSA9PSBPX1JET05MWSkgeworCQlpZiAocGVyZl9zZXNzaW9uX19vcGVuKHNlbGYsIGZvcmNlKSA8IDApCisJCQlnb3RvIG91dF9kZWxldGU7CisJfSBlbHNlIGlmIChtb2RlID09IE9fV1JPTkxZKSB7CisJCS8qCisJCSAqIEluIE9fUkRPTkxZIG1vZGUgdGhpcyB3aWxsIGJlIHBlcmZvcm1lZCB3aGVuIHJlYWRpbmcgdGhlCisJCSAqIGtlcm5lbCBNTUFQIGV2ZW50LCBpbiBldmVudF9fcHJvY2Vzc19tbWFwKCkuCisJCSAqLworCQlpZiAocGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc2VsZikgPCAwKQorCQkJZ290byBvdXRfZGVsZXRlOworCX0KIAotCWlmIChtb2RlID09IE9fUkRPTkxZICYmIHBlcmZfc2Vzc2lvbl9fb3BlbihzZWxmLCBmb3JjZSkgPCAwKQotCQlnb3RvIG91dF9kZWxldGU7CisJc2VsZi0+c2FtcGxlX3R5cGUgPSBwZXJmX2hlYWRlcl9fc2FtcGxlX3R5cGUoJnNlbGYtPmhlYWRlcik7CiBvdXQ6CiAJcmV0dXJuIHNlbGY7CiBvdXRfZnJlZToKQEAgLTE0OCwzICsxNjUsNDA5IEBACiAKIAlyZXR1cm4gc3ltczsKIH0KKworc3RhdGljIGludCBwcm9jZXNzX2V2ZW50X3N0dWIoZXZlbnRfdCAqZXZlbnQgX191c2VkLAorCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiBfX3VzZWQpCit7CisJZHVtcF9wcmludGYoIjogdW5oYW5kbGVkIVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfb3BzX19maWxsX2RlZmF1bHRzKHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqaGFuZGxlcikKK3sKKwlpZiAoaGFuZGxlci0+c2FtcGxlID09IE5VTEwpCisJCWhhbmRsZXItPnNhbXBsZSA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoaGFuZGxlci0+bW1hcCA9PSBOVUxMKQorCQloYW5kbGVyLT5tbWFwID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmIChoYW5kbGVyLT5jb21tID09IE5VTEwpCisJCWhhbmRsZXItPmNvbW0gPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJaWYgKGhhbmRsZXItPmZvcmsgPT0gTlVMTCkKKwkJaGFuZGxlci0+Zm9yayA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoaGFuZGxlci0+ZXhpdCA9PSBOVUxMKQorCQloYW5kbGVyLT5leGl0ID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmIChoYW5kbGVyLT5sb3N0ID09IE5VTEwpCisJCWhhbmRsZXItPmxvc3QgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJaWYgKGhhbmRsZXItPnJlYWQgPT0gTlVMTCkKKwkJaGFuZGxlci0+cmVhZCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoaGFuZGxlci0+dGhyb3R0bGUgPT0gTlVMTCkKKwkJaGFuZGxlci0+dGhyb3R0bGUgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJaWYgKGhhbmRsZXItPnVudGhyb3R0bGUgPT0gTlVMTCkKKwkJaGFuZGxlci0+dW50aHJvdHRsZSA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmV2ZW50X19uYW1lW10gPSB7CisJWzBdCQkJID0gIlRPVEFMIiwKKwlbUEVSRl9SRUNPUkRfTU1BUF0JID0gIk1NQVAiLAorCVtQRVJGX1JFQ09SRF9MT1NUXQkgPSAiTE9TVCIsCisJW1BFUkZfUkVDT1JEX0NPTU1dCSA9ICJDT01NIiwKKwlbUEVSRl9SRUNPUkRfRVhJVF0JID0gIkVYSVQiLAorCVtQRVJGX1JFQ09SRF9USFJPVFRMRV0JID0gIlRIUk9UVExFIiwKKwlbUEVSRl9SRUNPUkRfVU5USFJPVFRMRV0gPSAiVU5USFJPVFRMRSIsCisJW1BFUkZfUkVDT1JEX0ZPUktdCSA9ICJGT1JLIiwKKwlbUEVSRl9SRUNPUkRfUkVBRF0JID0gIlJFQUQiLAorCVtQRVJGX1JFQ09SRF9TQU1QTEVdCSA9ICJTQU1QTEUiLAorfTsKKwordW5zaWduZWQgbG9uZyBldmVudF9fdG90YWxbUEVSRl9SRUNPUkRfTUFYXTsKKwordm9pZCBldmVudF9fcHJpbnRfdG90YWxzKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IFBFUkZfUkVDT1JEX01BWDsgKytpKQorCQlwcl9pbmZvKCIlMTBzIGV2ZW50czogJTEwbGRcbiIsCisJCQlldmVudF9fbmFtZVtpXSwgZXZlbnRfX3RvdGFsW2ldKTsKK30KKwordm9pZCBtZW1fYnN3YXBfNjQodm9pZCAqc3JjLCBpbnQgYnl0ZV9zaXplKQoreworCXU2NCAqbSA9IHNyYzsKKworCXdoaWxlIChieXRlX3NpemUgPiAwKSB7CisJCSptID0gYnN3YXBfNjQoKm0pOworCQlieXRlX3NpemUgLT0gc2l6ZW9mKHU2NCk7CisJCSsrbTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGV2ZW50X19hbGw2NF9zd2FwKGV2ZW50X3QgKnNlbGYpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyICpoZHIgPSAmc2VsZi0+aGVhZGVyOworCW1lbV9ic3dhcF82NChoZHIgKyAxLCBzZWxmLT5oZWFkZXIuc2l6ZSAtIHNpemVvZigqaGRyKSk7Cit9CisKK3N0YXRpYyB2b2lkIGV2ZW50X19jb21tX3N3YXAoZXZlbnRfdCAqc2VsZikKK3sKKwlzZWxmLT5jb21tLnBpZCA9IGJzd2FwXzMyKHNlbGYtPmNvbW0ucGlkKTsKKwlzZWxmLT5jb21tLnRpZCA9IGJzd2FwXzMyKHNlbGYtPmNvbW0udGlkKTsKK30KKworc3RhdGljIHZvaWQgZXZlbnRfX21tYXBfc3dhcChldmVudF90ICpzZWxmKQoreworCXNlbGYtPm1tYXAucGlkCSA9IGJzd2FwXzMyKHNlbGYtPm1tYXAucGlkKTsKKwlzZWxmLT5tbWFwLnRpZAkgPSBic3dhcF8zMihzZWxmLT5tbWFwLnRpZCk7CisJc2VsZi0+bW1hcC5zdGFydCA9IGJzd2FwXzY0KHNlbGYtPm1tYXAuc3RhcnQpOworCXNlbGYtPm1tYXAubGVuCSA9IGJzd2FwXzY0KHNlbGYtPm1tYXAubGVuKTsKKwlzZWxmLT5tbWFwLnBnb2ZmID0gYnN3YXBfNjQoc2VsZi0+bW1hcC5wZ29mZik7Cit9CisKK3N0YXRpYyB2b2lkIGV2ZW50X190YXNrX3N3YXAoZXZlbnRfdCAqc2VsZikKK3sKKwlzZWxmLT5mb3JrLnBpZAk9IGJzd2FwXzMyKHNlbGYtPmZvcmsucGlkKTsKKwlzZWxmLT5mb3JrLnRpZAk9IGJzd2FwXzMyKHNlbGYtPmZvcmsudGlkKTsKKwlzZWxmLT5mb3JrLnBwaWQJPSBic3dhcF8zMihzZWxmLT5mb3JrLnBwaWQpOworCXNlbGYtPmZvcmsucHRpZAk9IGJzd2FwXzMyKHNlbGYtPmZvcmsucHRpZCk7CisJc2VsZi0+Zm9yay50aW1lCT0gYnN3YXBfNjQoc2VsZi0+Zm9yay50aW1lKTsKK30KKworc3RhdGljIHZvaWQgZXZlbnRfX3JlYWRfc3dhcChldmVudF90ICpzZWxmKQoreworCXNlbGYtPnJlYWQucGlkCQk9IGJzd2FwXzMyKHNlbGYtPnJlYWQucGlkKTsKKwlzZWxmLT5yZWFkLnRpZAkJPSBic3dhcF8zMihzZWxmLT5yZWFkLnRpZCk7CisJc2VsZi0+cmVhZC52YWx1ZQk9IGJzd2FwXzY0KHNlbGYtPnJlYWQudmFsdWUpOworCXNlbGYtPnJlYWQudGltZV9lbmFibGVkCT0gYnN3YXBfNjQoc2VsZi0+cmVhZC50aW1lX2VuYWJsZWQpOworCXNlbGYtPnJlYWQudGltZV9ydW5uaW5nCT0gYnN3YXBfNjQoc2VsZi0+cmVhZC50aW1lX3J1bm5pbmcpOworCXNlbGYtPnJlYWQuaWQJCT0gYnN3YXBfNjQoc2VsZi0+cmVhZC5pZCk7Cit9CisKK3R5cGVkZWYgdm9pZCAoKmV2ZW50X19zd2FwX29wKShldmVudF90ICpzZWxmKTsKKworc3RhdGljIGV2ZW50X19zd2FwX29wIGV2ZW50X19zd2FwX29wc1tdID0geworCVtQRVJGX1JFQ09SRF9NTUFQXSAgID0gZXZlbnRfX21tYXBfc3dhcCwKKwlbUEVSRl9SRUNPUkRfQ09NTV0gICA9IGV2ZW50X19jb21tX3N3YXAsCisJW1BFUkZfUkVDT1JEX0ZPUktdICAgPSBldmVudF9fdGFza19zd2FwLAorCVtQRVJGX1JFQ09SRF9FWElUXSAgID0gZXZlbnRfX3Rhc2tfc3dhcCwKKwlbUEVSRl9SRUNPUkRfTE9TVF0gICA9IGV2ZW50X19hbGw2NF9zd2FwLAorCVtQRVJGX1JFQ09SRF9SRUFEXSAgID0gZXZlbnRfX3JlYWRfc3dhcCwKKwlbUEVSRl9SRUNPUkRfU0FNUExFXSA9IGV2ZW50X19hbGw2NF9zd2FwLAorCVtQRVJGX1JFQ09SRF9NQVhdICAgID0gTlVMTCwKK307CisKK3N0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJICAgICAgIGV2ZW50X3QgKmV2ZW50LAorCQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKm9wcywKKwkJCQkgICAgICAgdTY0IG9mZnNldCwgdTY0IGhlYWQpCit7CisJdHJhY2VfZXZlbnQoZXZlbnQpOworCisJaWYgKGV2ZW50LT5oZWFkZXIudHlwZSA8IFBFUkZfUkVDT1JEX01BWCkgeworCQlkdW1wX3ByaW50ZigiJSNMeCBbJSN4XTogUEVSRl9SRUNPUkRfJXMiLAorCQkJICAgIG9mZnNldCArIGhlYWQsIGV2ZW50LT5oZWFkZXIuc2l6ZSwKKwkJCSAgICBldmVudF9fbmFtZVtldmVudC0+aGVhZGVyLnR5cGVdKTsKKwkJKytldmVudF9fdG90YWxbMF07CisJCSsrZXZlbnRfX3RvdGFsW2V2ZW50LT5oZWFkZXIudHlwZV07CisJfQorCisJaWYgKHNlbGYtPmhlYWRlci5uZWVkc19zd2FwICYmIGV2ZW50X19zd2FwX29wc1tldmVudC0+aGVhZGVyLnR5cGVdKQorCQlldmVudF9fc3dhcF9vcHNbZXZlbnQtPmhlYWRlci50eXBlXShldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50LT5oZWFkZXIudHlwZSkgeworCWNhc2UgUEVSRl9SRUNPUkRfU0FNUExFOgorCQlyZXR1cm4gb3BzLT5zYW1wbGUoZXZlbnQsIHNlbGYpOworCWNhc2UgUEVSRl9SRUNPUkRfTU1BUDoKKwkJcmV0dXJuIG9wcy0+bW1hcChldmVudCwgc2VsZik7CisJY2FzZSBQRVJGX1JFQ09SRF9DT01NOgorCQlyZXR1cm4gb3BzLT5jb21tKGV2ZW50LCBzZWxmKTsKKwljYXNlIFBFUkZfUkVDT1JEX0ZPUks6CisJCXJldHVybiBvcHMtPmZvcmsoZXZlbnQsIHNlbGYpOworCWNhc2UgUEVSRl9SRUNPUkRfRVhJVDoKKwkJcmV0dXJuIG9wcy0+ZXhpdChldmVudCwgc2VsZik7CisJY2FzZSBQRVJGX1JFQ09SRF9MT1NUOgorCQlyZXR1cm4gb3BzLT5sb3N0KGV2ZW50LCBzZWxmKTsKKwljYXNlIFBFUkZfUkVDT1JEX1JFQUQ6CisJCXJldHVybiBvcHMtPnJlYWQoZXZlbnQsIHNlbGYpOworCWNhc2UgUEVSRl9SRUNPUkRfVEhST1RUTEU6CisJCXJldHVybiBvcHMtPnRocm90dGxlKGV2ZW50LCBzZWxmKTsKKwljYXNlIFBFUkZfUkVDT1JEX1VOVEhST1RUTEU6CisJCXJldHVybiBvcHMtPnVudGhyb3R0bGUoZXZlbnQsIHNlbGYpOworCWRlZmF1bHQ6CisJCXNlbGYtPnVua25vd25fZXZlbnRzKys7CisJCXJldHVybiAtMTsKKwl9Cit9CisKK3ZvaWQgcGVyZl9ldmVudF9oZWFkZXJfX2Jzd2FwKHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqc2VsZikKK3sKKwlzZWxmLT50eXBlID0gYnN3YXBfMzIoc2VsZi0+dHlwZSk7CisJc2VsZi0+bWlzYyA9IGJzd2FwXzE2KHNlbGYtPm1pc2MpOworCXNlbGYtPnNpemUgPSBic3dhcF8xNihzZWxmLT5zaXplKTsKK30KKworaW50IHBlcmZfaGVhZGVyX19yZWFkX2J1aWxkX2lkcyhzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsCisJCQkJaW50IGlucHV0LCB1NjQgb2Zmc2V0LCB1NjQgc2l6ZSkKK3sKKwlzdHJ1Y3QgYnVpbGRfaWRfZXZlbnQgYmV2OworCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworCXU2NCBsaW1pdCA9IG9mZnNldCArIHNpemU7CisJaW50IGVyciA9IC0xOworCisJd2hpbGUgKG9mZnNldCA8IGxpbWl0KSB7CisJCXN0cnVjdCBkc28gKmRzbzsKKwkJc3NpemVfdCBsZW47CisJCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmZHNvc19fdXNlcjsKKworCQlpZiAocmVhZChpbnB1dCwgJmJldiwgc2l6ZW9mKGJldikpICE9IHNpemVvZihiZXYpKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKHNlbGYtPm5lZWRzX3N3YXApCisJCQlwZXJmX2V2ZW50X2hlYWRlcl9fYnN3YXAoJmJldi5oZWFkZXIpOworCisJCWxlbiA9IGJldi5oZWFkZXIuc2l6ZSAtIHNpemVvZihiZXYpOworCQlpZiAocmVhZChpbnB1dCwgZmlsZW5hbWUsIGxlbikgIT0gbGVuKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKGJldi5oZWFkZXIubWlzYyAmIFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMKQorCQkJaGVhZCA9ICZkc29zX19rZXJuZWw7CisKKwkJZHNvID0gX19kc29zX19maW5kbmV3KGhlYWQsIGZpbGVuYW1lKTsKKwkJaWYgKGRzbyAhPSBOVUxMKSB7CisJCQlkc29fX3NldF9idWlsZF9pZChkc28sICZiZXYuYnVpbGRfaWQpOworCQkJaWYgKGhlYWQgPT0gJmRzb3NfX2tlcm5lbCAmJiBmaWxlbmFtZVswXSA9PSAnWycpCisJCQkJZHNvLT5rZXJuZWwgPSAxOworCQl9CisKKwkJb2Zmc2V0ICs9IGJldi5oZWFkZXIuc2l6ZTsKKwl9CisJZXJyID0gMDsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IHRocmVhZCAqcGVyZl9zZXNzaW9uX19yZWdpc3Rlcl9pZGxlX3RocmVhZChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQoreworCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZWxmLCAwKTsKKworCWlmICh0aHJlYWQgPT0gTlVMTCB8fCB0aHJlYWRfX3NldF9jb21tKHRocmVhZCwgInN3YXBwZXIiKSkgeworCQlwcl9lcnIoInByb2JsZW0gaW5zZXJ0aW5nIGlkbGUgdGFzay5cbiIpOworCQl0aHJlYWQgPSBOVUxMOworCX0KKworCXJldHVybiB0aHJlYWQ7Cit9CisKK2ludCBfX3BlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkgICB1NjQgZGF0YV9vZmZzZXQsIHU2NCBkYXRhX3NpemUsCisJCQkJICAgdTY0IGZpbGVfc2l6ZSwgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMpCit7CisJaW50IGVyciwgbW1hcF9wcm90LCBtbWFwX2ZsYWdzOworCXU2NCBoZWFkLCBzaGlmdDsKKwl1NjQgb2Zmc2V0ID0gMDsKKwlzaXplX3QJcGFnZV9zaXplOworCWV2ZW50X3QgKmV2ZW50OworCXVpbnQzMl90IHNpemU7CisJY2hhciAqYnVmOworCisJcGVyZl9ldmVudF9vcHNfX2ZpbGxfZGVmYXVsdHMob3BzKTsKKworCXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKworCWhlYWQgPSBkYXRhX29mZnNldDsKKwlzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKKwlvZmZzZXQgKz0gc2hpZnQ7CisJaGVhZCAtPSBzaGlmdDsKKworCW1tYXBfcHJvdCAgPSBQUk9UX1JFQUQ7CisJbW1hcF9mbGFncyA9IE1BUF9TSEFSRUQ7CisKKwlpZiAoc2VsZi0+aGVhZGVyLm5lZWRzX3N3YXApIHsKKwkJbW1hcF9wcm90ICB8PSBQUk9UX1dSSVRFOworCQltbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEU7CisJfQorcmVtYXA6CisJYnVmID0gbW1hcChOVUxMLCBwYWdlX3NpemUgKiBzZWxmLT5tbWFwX3dpbmRvdywgbW1hcF9wcm90LAorCQkgICBtbWFwX2ZsYWdzLCBzZWxmLT5mZCwgb2Zmc2V0KTsKKwlpZiAoYnVmID09IE1BUF9GQUlMRUQpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gbW1hcCBmaWxlXG4iKTsKKwkJZXJyID0gLWVycm5vOworCQlnb3RvIG91dF9lcnI7CisJfQorCittb3JlOgorCWV2ZW50ID0gKGV2ZW50X3QgKikoYnVmICsgaGVhZCk7CisKKwlpZiAoc2VsZi0+aGVhZGVyLm5lZWRzX3N3YXApCisJCXBlcmZfZXZlbnRfaGVhZGVyX19ic3dhcCgmZXZlbnQtPmhlYWRlcik7CisJc2l6ZSA9IGV2ZW50LT5oZWFkZXIuc2l6ZTsKKwlpZiAoc2l6ZSA9PSAwKQorCQlzaXplID0gODsKKworCWlmIChoZWFkICsgZXZlbnQtPmhlYWRlci5zaXplID49IHBhZ2Vfc2l6ZSAqIHNlbGYtPm1tYXBfd2luZG93KSB7CisJCWludCBtdW5tYXBfcmV0OworCisJCXNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOworCisJCW11bm1hcF9yZXQgPSBtdW5tYXAoYnVmLCBwYWdlX3NpemUgKiBzZWxmLT5tbWFwX3dpbmRvdyk7CisJCWFzc2VydChtdW5tYXBfcmV0ID09IDApOworCisJCW9mZnNldCArPSBzaGlmdDsKKwkJaGVhZCAtPSBzaGlmdDsKKwkJZ290byByZW1hcDsKKwl9CisKKwlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOworCisJZHVtcF9wcmludGYoIlxuJSNMeCBbJSN4XTogZXZlbnQ6ICVkXG4iLAorCQkgICAgb2Zmc2V0ICsgaGVhZCwgZXZlbnQtPmhlYWRlci5zaXplLCBldmVudC0+aGVhZGVyLnR5cGUpOworCisJaWYgKHNpemUgPT0gMCB8fAorCSAgICBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnQoc2VsZiwgZXZlbnQsIG9wcywgb2Zmc2V0LCBoZWFkKSA8IDApIHsKKwkJZHVtcF9wcmludGYoIiUjTHggWyUjeF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAorCQkJICAgIG9mZnNldCArIGhlYWQsIGV2ZW50LT5oZWFkZXIuc2l6ZSwKKwkJCSAgICBldmVudC0+aGVhZGVyLnR5cGUpOworCQkvKgorCQkgKiBhc3N1bWUgd2UgbG9zdCB0cmFjayBvZiB0aGUgc3RyZWFtLCBjaGVjayBhbGlnbm1lbnQsIGFuZAorCQkgKiBpbmNyZW1lbnQgYSBzaW5nbGUgdTY0IGluIHRoZSBob3BlIHRvIGNhdGNoIG9uIGFnYWluICdzb29uJy4KKwkJICovCisJCWlmICh1bmxpa2VseShoZWFkICYgNykpCisJCQloZWFkICY9IH43VUxMOworCisJCXNpemUgPSA4OworCX0KKworCWhlYWQgKz0gc2l6ZTsKKworCWlmIChvZmZzZXQgKyBoZWFkID49IGRhdGFfb2Zmc2V0ICsgZGF0YV9zaXplKQorCQlnb3RvIGRvbmU7CisKKwlpZiAob2Zmc2V0ICsgaGVhZCA8IGZpbGVfc2l6ZSkKKwkJZ290byBtb3JlOworZG9uZToKKwllcnIgPSAwOworb3V0X2VycjoKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCSBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKm9wcykKK3sKKwlpbnQgZXJyOworCisJaWYgKHBlcmZfc2Vzc2lvbl9fcmVnaXN0ZXJfaWRsZV90aHJlYWQoc2VsZikgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIXN5bWJvbF9jb25mLmZ1bGxfcGF0aHMpIHsKKwkJY2hhciBiZltQQVRIX01BWF07CisKKwkJaWYgKGdldGN3ZChiZiwgc2l6ZW9mKGJmKSkgPT0gTlVMTCkgeworCQkJZXJyID0gLWVycm5vOworb3V0X2dldGN3ZF9lcnI6CisJCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4iKTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCQlzZWxmLT5jd2QgPSBzdHJkdXAoYmYpOworCQlpZiAoc2VsZi0+Y3dkID09IE5VTEwpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIG91dF9nZXRjd2RfZXJyOworCQl9CisJCXNlbGYtPmN3ZGxlbiA9IHN0cmxlbihzZWxmLT5jd2QpOworCX0KKworCWVyciA9IF9fcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZWxmLCBzZWxmLT5oZWFkZXIuZGF0YV9vZmZzZXQsCisJCQkJCSAgICAgc2VsZi0+aGVhZGVyLmRhdGFfc2l6ZSwKKwkJCQkJICAgICBzZWxmLT5zaXplLCBvcHMpOworb3V0X2VycjoKKwlyZXR1cm4gZXJyOworfQorCitib29sIHBlcmZfc2Vzc2lvbl9faGFzX3RyYWNlcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLCBjb25zdCBjaGFyICptc2cpCit7CisJaWYgKCEoc2VsZi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpKSB7CisJCXByX2VycigiTm8gdHJhY2Ugc2FtcGxlIHRvIHJlYWQuIERpZCB5b3UgY2FsbCAncGVyZiAlcyc/XG4iLCBtc2cpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK2ludCBwZXJmX3Nlc3Npb25fX3NldF9rYWxsc3ltc19yZWZfcmVsb2Nfc3ltKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJCSAgICAgY29uc3QgY2hhciAqc3ltYm9sX25hbWUsCisJCQkJCSAgICAgdTY0IGFkZHIpCit7CisJY2hhciAqYnJhY2tldDsKKwllbnVtIG1hcF90eXBlIGk7CisKKwlzZWxmLT5yZWZfcmVsb2Nfc3ltLm5hbWUgPSBzdHJkdXAoc3ltYm9sX25hbWUpOworCWlmIChzZWxmLT5yZWZfcmVsb2Nfc3ltLm5hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlicmFja2V0ID0gc3RyY2hyKHNlbGYtPnJlZl9yZWxvY19zeW0ubmFtZSwgJ10nKTsKKwlpZiAoYnJhY2tldCkKKwkJKmJyYWNrZXQgPSAnXDAnOworCisJc2VsZi0+cmVmX3JlbG9jX3N5bS5hZGRyID0gYWRkcjsKKworCWZvciAoaSA9IDA7IGkgPCBNQVBfX05SX1RZUEVTOyArK2kpIHsKKwkJc3RydWN0IGttYXAgKmttYXAgPSBtYXBfX2ttYXAoc2VsZi0+dm1saW51eF9tYXBzW2ldKTsKKwkJa21hcC0+cmVmX3JlbG9jX3N5bSA9ICZzZWxmLT5yZWZfcmVsb2Nfc3ltOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTY0IG1hcF9fcmVsb2NfbWFwX2lwKHN0cnVjdCBtYXAgKm1hcCwgdTY0IGlwKQoreworCXJldHVybiBpcCArIChzNjQpbWFwLT5wZ29mZjsKK30KKworc3RhdGljIHU2NCBtYXBfX3JlbG9jX3VubWFwX2lwKHN0cnVjdCBtYXAgKm1hcCwgdTY0IGlwKQoreworCXJldHVybiBpcCAtIChzNjQpbWFwLT5wZ29mZjsKK30KKwordm9pZCBtYXBfX3JlbG9jX3ZtbGludXgoc3RydWN0IG1hcCAqc2VsZikKK3sKKwlzdHJ1Y3Qga21hcCAqa21hcCA9IG1hcF9fa21hcChzZWxmKTsKKwlzNjQgcmVsb2M7CisKKwlpZiAoIWttYXAtPnJlZl9yZWxvY19zeW0gfHwgIWttYXAtPnJlZl9yZWxvY19zeW0tPnVucmVsb2NhdGVkX2FkZHIpCisJCXJldHVybjsKKworCXJlbG9jID0gKGttYXAtPnJlZl9yZWxvY19zeW0tPnVucmVsb2NhdGVkX2FkZHIgLQorCQkga21hcC0+cmVmX3JlbG9jX3N5bS0+YWRkcik7CisKKwlpZiAoIXJlbG9jKQorCQlyZXR1cm47CisKKwlzZWxmLT5tYXBfaXAgICA9IG1hcF9fcmVsb2NfbWFwX2lwOworCXNlbGYtPnVubWFwX2lwID0gbWFwX19yZWxvY191bm1hcF9pcDsKKwlzZWxmLT5wZ29mZiAgICA9IHJlbG9jOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaCBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKaW5kZXggMzJlYWExYi4uMzE5NTBmYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaAorKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oCkBAIC0zLDEzICszLDEzIEBACiAKICNpbmNsdWRlICJldmVudC5oIgogI2luY2x1ZGUgImhlYWRlci5oIgorI2luY2x1ZGUgInN5bWJvbC5oIgogI2luY2x1ZGUgInRocmVhZC5oIgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgogI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIgogCiBzdHJ1Y3QgaXBfY2FsbGNoYWluOwogc3RydWN0IHRocmVhZDsKLXN0cnVjdCBzeW1ib2w7CiAKIHN0cnVjdCBwZXJmX3Nlc3Npb24gewogCXN0cnVjdCBwZXJmX2hlYWRlcgloZWFkZXI7CkBAIC0xOCwxMCArMTgsMTMgQEAKIAlzdHJ1Y3QgbWFwX2dyb3VwcwlrbWFwczsKIAlzdHJ1Y3QgcmJfcm9vdAkJdGhyZWFkczsKIAlzdHJ1Y3QgdGhyZWFkCQkqbGFzdF9tYXRjaDsKKwlzdHJ1Y3QgbWFwCQkqdm1saW51eF9tYXBzW01BUF9fTlJfVFlQRVNdOwogCXN0cnVjdCBldmVudHNfc3RhdHMJZXZlbnRzX3N0YXRzOwogCXVuc2lnbmVkIGxvbmcJCWV2ZW50X3RvdGFsW1BFUkZfUkVDT1JEX01BWF07CisJdW5zaWduZWQgbG9uZwkJdW5rbm93bl9ldmVudHM7CiAJc3RydWN0IHJiX3Jvb3QJCWhpc3RzOwogCXU2NAkJCXNhbXBsZV90eXBlOworCXN0cnVjdCByZWZfcmVsb2Nfc3ltCXJlZl9yZWxvY19zeW07CiAJaW50CQkJZmQ7CiAJaW50CQkJY3dkbGVuOwogCWNoYXIJCQkqY3dkOwpAQCAtMzEsMjMgKzM0LDI1IEBACiB0eXBlZGVmIGludCAoKmV2ZW50X29wKShldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIAogc3RydWN0IHBlcmZfZXZlbnRfb3BzIHsKLQlldmVudF9vcAlwcm9jZXNzX3NhbXBsZV9ldmVudDsKLQlldmVudF9vcAlwcm9jZXNzX21tYXBfZXZlbnQ7Ci0JZXZlbnRfb3AJcHJvY2Vzc19jb21tX2V2ZW50OwotCWV2ZW50X29wCXByb2Nlc3NfZm9ya19ldmVudDsKLQlldmVudF9vcAlwcm9jZXNzX2V4aXRfZXZlbnQ7Ci0JZXZlbnRfb3AJcHJvY2Vzc19sb3N0X2V2ZW50OwotCWV2ZW50X29wCXByb2Nlc3NfcmVhZF9ldmVudDsKLQlldmVudF9vcAlwcm9jZXNzX3Rocm90dGxlX2V2ZW50OwotCWV2ZW50X29wCXByb2Nlc3NfdW50aHJvdHRsZV9ldmVudDsKLQlpbnQJCSgqc2FtcGxlX3R5cGVfY2hlY2spKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwotCXVuc2lnbmVkIGxvbmcJdG90YWxfdW5rbm93bjsKLQlib29sCQlmdWxsX3BhdGhzOworCWV2ZW50X29wIHNhbXBsZSwKKwkJIG1tYXAsCisJCSBjb21tLAorCQkgZm9yaywKKwkJIGV4aXQsCisJCSBsb3N0LAorCQkgcmVhZCwKKwkJIHRocm90dGxlLAorCQkgdW50aHJvdHRsZTsKIH07CiAKIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnBlcmZfc2Vzc2lvbl9fbmV3KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSwgYm9vbCBmb3JjZSk7CiB2b2lkIHBlcmZfc2Vzc2lvbl9fZGVsZXRlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpOwogCit2b2lkIHBlcmZfZXZlbnRfaGVhZGVyX19ic3dhcChzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKnNlbGYpOworCitpbnQgX19wZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJICAgdTY0IGRhdGFfb2Zmc2V0LCB1NjQgZGF0YV9zaXplLCB1NjQgc2l6ZSwKKwkJCQkgICBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKm9wcyk7CiBpbnQgcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAogCQkJCSBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKmV2ZW50X29wcyk7CiAKQEAgLTU2LDYgKzYxLDI4IEBACiAJCQkJCQlzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbiwKIAkJCQkJCXN0cnVjdCBzeW1ib2wgKipwYXJlbnQpOwogCi1pbnQgcGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKGludCBpbnB1dCwgdTY0IG9mZnNldCwgdTY0IGZpbGVfc2l6ZSk7Citib29sIHBlcmZfc2Vzc2lvbl9faGFzX3RyYWNlcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLCBjb25zdCBjaGFyICptc2cpOwogCitpbnQgcGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGlucHV0LAorCQkJCXU2NCBvZmZzZXQsIHU2NCBmaWxlX3NpemUpOworCitpbnQgcGVyZl9zZXNzaW9uX19zZXRfa2FsbHN5bXNfcmVmX3JlbG9jX3N5bShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKnN5bWJvbF9uYW1lLAorCQkJCQkgICAgIHU2NCBhZGRyKTsKKwordm9pZCBtZW1fYnN3YXBfNjQodm9pZCAqc3JjLCBpbnQgYnl0ZV9zaXplKTsKKworc3RhdGljIGlubGluZSBpbnQgX19wZXJmX3Nlc3Npb25fX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCQkJc3RydWN0IGRzbyAqa2VybmVsKQoreworCXJldHVybiBfX21hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcygmc2VsZi0+a21hcHMsCisJCQkJCQlzZWxmLT52bWxpbnV4X21hcHMsIGtlcm5lbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1hcCAqCisJcGVyZl9zZXNzaW9uX19uZXdfbW9kdWxlX21hcChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCSAgICAgdTY0IHN0YXJ0LCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlyZXR1cm4gbWFwX2dyb3Vwc19fbmV3X21vZHVsZSgmc2VsZi0+a21hcHMsIHN0YXJ0LCBmaWxlbmFtZSk7Cit9CiAjZW5kaWYgLyogX19QRVJGX1NFU1NJT05fSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5jIGIvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5jCmluZGV4IDUzNTJkN2QuLmMzOTdkNGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYworKysgYi90b29scy9wZXJmL3V0aWwvc3RyaW5nLmMKQEAgLTIyNywxNiArMjI3LDczIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLS8qIEdsb2IgZXhwcmVzc2lvbiBwYXR0ZXJuIG1hdGNoaW5nICovCisvKiBDaGFyYWN0ZXIgY2xhc3MgbWF0Y2hpbmcgKi8KK3N0YXRpYyBib29sIF9fbWF0Y2hfY2hhcmNsYXNzKGNvbnN0IGNoYXIgKnBhdCwgY2hhciBjLCBjb25zdCBjaGFyICoqbnBhdCkKK3sKKwlib29sIGNvbXBsZW1lbnQgPSBmYWxzZSwgcmV0ID0gdHJ1ZTsKKworCWlmICgqcGF0ID09ICchJykgeworCQljb21wbGVtZW50ID0gdHJ1ZTsKKwkJcGF0Kys7CisJfQorCWlmICgqcGF0KysgPT0gYykJLyogRmlyc3QgY2hhcmFjdGVyIGlzIHNwZWNpYWwgKi8KKwkJZ290byBlbmQ7CisKKwl3aGlsZSAoKnBhdCAmJiAqcGF0ICE9ICddJykgewkvKiBNYXRjaGluZyAqLworCQlpZiAoKnBhdCA9PSAnLScgJiYgKihwYXQgKyAxKSAhPSAnXScpIHsJLyogUmFuZ2UgKi8KKwkJCWlmICgqKHBhdCAtIDEpIDw9IGMgJiYgYyA8PSAqKHBhdCArIDEpKQorCQkJCWdvdG8gZW5kOworCQkJaWYgKCoocGF0IC0gMSkgPiAqKHBhdCArIDEpKQorCQkJCWdvdG8gZXJyb3I7CisJCQlwYXQgKz0gMjsKKwkJfSBlbHNlIGlmICgqcGF0KysgPT0gYykKKwkJCWdvdG8gZW5kOworCX0KKwlpZiAoISpwYXQpCisJCWdvdG8gZXJyb3I7CisJcmV0ID0gZmFsc2U7CisKK2VuZDoKKwl3aGlsZSAoKnBhdCAmJiAqcGF0ICE9ICddJykJLyogU2VhcmNoaW5nIGNsb3NpbmcgKi8KKwkJcGF0Kys7CisJaWYgKCEqcGF0KQorCQlnb3RvIGVycm9yOworCSpucGF0ID0gcGF0ICsgMTsKKwlyZXR1cm4gY29tcGxlbWVudCA/ICFyZXQgOiByZXQ7CisKK2Vycm9yOgorCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiBzdHJnbG9ibWF0Y2ggLSBnbG9iIGV4cHJlc3Npb24gcGF0dGVybiBtYXRjaGluZworICogQHN0cjogdGhlIHRhcmdldCBzdHJpbmcgdG8gbWF0Y2gKKyAqIEBwYXQ6IHRoZSBwYXR0ZXJuIHN0cmluZyB0byBtYXRjaAorICoKKyAqIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBAc3RyIG1hdGNoZXMgQHBhdC4gQHBhdCBjYW4gaW5jbHVkZXMgd2lsZGNhcmRzCisgKiAoJyonLCc/JykgYW5kIGNoYXJhY3RlciBjbGFzc2VzIChbQ0hBUlNdLCBjb21wbGVtZW50YXRpb24gYW5kIHJhbmdlcyBhcmUKKyAqIGFsc28gc3VwcG9ydGVkKS4gQWxzbywgdGhpcyBzdXBwb3J0cyBlc2NhcGUgY2hhcmFjdGVyICgnXCcpIHRvIHVzZSBzcGVjaWFsCisgKiBjaGFyYWN0ZXJzIGFzIG5vcm1hbCBjaGFyYWN0ZXIuCisgKgorICogTm90ZTogaWYgQHBhdCBzeW50YXggaXMgYnJva2VuLCB0aGlzIGFsd2F5cyByZXR1cm5zIGZhbHNlLgorICovCiBib29sIHN0cmdsb2JtYXRjaChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKIHsKIAl3aGlsZSAoKnN0ciAmJiAqcGF0ICYmICpwYXQgIT0gJyonKSB7Ci0JCWlmICgqcGF0ID09ICc/JykgeworCQlpZiAoKnBhdCA9PSAnPycpIHsJLyogTWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciAqLwogCQkJc3RyKys7CiAJCQlwYXQrKzsKLQkJfSBlbHNlCi0JCQlpZiAoKnN0cisrICE9ICpwYXQrKykKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKCpwYXQgPT0gJ1snKQkvKiBDaGFyYWN0ZXIgY2xhc3Nlcy9SYW5nZXMgKi8KKwkJCWlmIChfX21hdGNoX2NoYXJjbGFzcyhwYXQgKyAxLCAqc3RyLCAmcGF0KSkgeworCQkJCXN0cisrOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlCiAJCQkJcmV0dXJuIGZhbHNlOworCQllbHNlIGlmICgqcGF0ID09ICdcXCcpIC8qIEVzY2FwZWQgY2hhciBtYXRjaCBhcyBub3JtYWwgY2hhciAqLworCQkJcGF0Kys7CisJCWlmICgqc3RyKysgIT0gKnBhdCsrKQorCQkJcmV0dXJuIGZhbHNlOwogCX0KIAkvKiBDaGVjayB3aWxkIGNhcmQgKi8KIAlpZiAoKnBhdCA9PSAnKicpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwppbmRleCBhYjkyNzYzLi4zMjNjMGFlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCkBAIC0xLDYgKzEsNSBAQAogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICIuLi9wZXJmLmgiCi0jaW5jbHVkZSAic2Vzc2lvbi5oIgogI2luY2x1ZGUgInNvcnQuaCIKICNpbmNsdWRlICJzdHJpbmcuaCIKICNpbmNsdWRlICJzeW1ib2wuaCIKQEAgLTIyLDYgKzIxLDcgQEAKIGVudW0gZHNvX29yaWdpbiB7CiAJRFNPX19PUklHX0tFUk5FTCA9IDAsCiAJRFNPX19PUklHX0pBVkFfSklULAorCURTT19fT1JJR19CVUlMRF9JRF9DQUNIRSwKIAlEU09fX09SSUdfRkVET1JBLAogCURTT19fT1JJR19VQlVOVFUsCiAJRFNPX19PUklHX0JVSUxESUQsCkBAIC0zMyw3ICszMyw3IEBACiBzdGF0aWMgdm9pZCBkc29zX19hZGQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGRzbyAqZHNvKTsKIHN0YXRpYyBzdHJ1Y3QgbWFwICptYXBfX25ldzIodTY0IHN0YXJ0LCBzdHJ1Y3QgZHNvICpkc28sIGVudW0gbWFwX3R5cGUgdHlwZSk7CiBzdGF0aWMgaW50IGRzb19fbG9hZF9rZXJuZWxfc3ltKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKLQkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKKwkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKIHN0YXRpYyBpbnQgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzOwogc3RhdGljIGNoYXIgKip2bWxpbnV4X3BhdGg7CiAKQEAgLTUzLDE3ICs1MywxMiBAQAogCXJldHVybiBzZWxmLT5zb3J0ZWRfYnlfbmFtZSAmICgxIDw8IHR5cGUpOwogfQogCi1zdGF0aWMgdm9pZCBkc29fX3NldF9sb2FkZWQoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKQotewotCXNlbGYtPmxvYWRlZCB8PSAoMSA8PCB0eXBlKTsKLX0KLQogc3RhdGljIHZvaWQgZHNvX19zZXRfc29ydGVkX2J5X25hbWUoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKQogewogCXNlbGYtPnNvcnRlZF9ieV9uYW1lIHw9ICgxIDw8IHR5cGUpOwogfQogCi1zdGF0aWMgYm9vbCBzeW1ib2xfdHlwZV9faXNfYShjaGFyIHN5bWJvbF90eXBlLCBlbnVtIG1hcF90eXBlIG1hcF90eXBlKQorYm9vbCBzeW1ib2xfdHlwZV9faXNfYShjaGFyIHN5bWJvbF90eXBlLCBlbnVtIG1hcF90eXBlIG1hcF90eXBlKQogewogCXN3aXRjaCAobWFwX3R5cGUpIHsKIAljYXNlIE1BUF9fRlVOQ1RJT046CkBAIC0xNDIsMTQgKzEzNywxNCBAQAogCXNlbGYtPnN0YXJ0ID0gc3RhcnQ7CiAJc2VsZi0+ZW5kICAgPSBsZW4gPyBzdGFydCArIGxlbiAtIDEgOiBzdGFydDsKIAotCXByX2RlYnVnMygiJXM6ICVzICUjTHgtJSNMeFxuIiwgX19mdW5jX18sIG5hbWUsIHN0YXJ0LCBzZWxmLT5lbmQpOworCXByX2RlYnVnNCgiJXM6ICVzICUjTHgtJSNMeFxuIiwgX19mdW5jX18sIG5hbWUsIHN0YXJ0LCBzZWxmLT5lbmQpOwogCiAJbWVtY3B5KHNlbGYtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOwogCiAJcmV0dXJuIHNlbGY7CiB9CiAKLXN0YXRpYyB2b2lkIHN5bWJvbF9fZGVsZXRlKHN0cnVjdCBzeW1ib2wgKnNlbGYpCit2b2lkIHN5bWJvbF9fZGVsZXRlKHN0cnVjdCBzeW1ib2wgKnNlbGYpCiB7CiAJZnJlZSgoKHZvaWQgKilzZWxmKSAtIHN5bWJvbF9jb25mLnByaXZfc2l6ZSk7CiB9CkBAIC0xNjAsNyArMTU1LDcgQEAKIAkJICAgICAgIHNlbGYtPnN0YXJ0LCBzZWxmLT5lbmQsIHNlbGYtPm5hbWUpOwogfQogCi1zdGF0aWMgdm9pZCBkc29fX3NldF9sb25nX25hbWUoc3RydWN0IGRzbyAqc2VsZiwgY2hhciAqbmFtZSkKK3ZvaWQgZHNvX19zZXRfbG9uZ19uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGNoYXIgKm5hbWUpCiB7CiAJaWYgKG5hbWUgPT0gTlVMTCkKIAkJcmV0dXJuOwpAQCAtMTc1LDcgKzE3MCw3IEBACiAKIHN0cnVjdCBkc28gKmRzb19fbmV3KGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IGRzbyAqc2VsZiA9IG1hbGxvYyhzaXplb2YoKnNlbGYpICsgc3RybGVuKG5hbWUpICsgMSk7CisJc3RydWN0IGRzbyAqc2VsZiA9IHphbGxvYyhzaXplb2YoKnNlbGYpICsgc3RybGVuKG5hbWUpICsgMSk7CiAKIAlpZiAoc2VsZiAhPSBOVUxMKSB7CiAJCWludCBpOwpAQCAtMzQ0LDEwICszMzksMTAgQEAKIAkJCQkgICAgICZzZWxmLT5zeW1ib2xzW3R5cGVdKTsKIH0KIAotaW50IGJ1aWxkX2lkX19zcHJpbnRmKHU4ICpzZWxmLCBpbnQgbGVuLCBjaGFyICpiZikKK2ludCBidWlsZF9pZF9fc3ByaW50Zihjb25zdCB1OCAqc2VsZiwgaW50IGxlbiwgY2hhciAqYmYpCiB7CiAJY2hhciAqYmlkID0gYmY7Ci0JdTggKnJhdyA9IHNlbGY7CisJY29uc3QgdTggKnJhdyA9IHNlbGY7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKQEAgLTM3Miw2ICszNjcsMTAgQEAKIAlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CiAJc2l6ZV90IHJldCA9IGZwcmludGYoZnAsICJkc286ICVzICgiLCBzZWxmLT5zaG9ydF9uYW1lKTsKIAorCWlmIChzZWxmLT5zaG9ydF9uYW1lICE9IHNlbGYtPmxvbmdfbmFtZSkKKwkJcmV0ICs9IGZwcmludGYoZnAsICIlcywgIiwgc2VsZi0+bG9uZ19uYW1lKTsKKwlyZXQgKz0gZnByaW50ZihmcCwgIiVzLCAlc2xvYWRlZCwgIiwgbWFwX3R5cGVfX25hbWVbdHlwZV0sCisJCSAgICAgICBzZWxmLT5sb2FkZWQgPyAiIiA6ICJOT1QgIik7CiAJcmV0ICs9IGRzb19fZnByaW50Zl9idWlsZGlkKHNlbGYsIGZwKTsKIAlyZXQgKz0gZnByaW50ZihmcCwgIilcbiIpOwogCWZvciAobmQgPSByYl9maXJzdCgmc2VsZi0+c3ltYm9sc1t0eXBlXSk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CkBAIC0zODIsMjQgKzM4MSwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBMb2FkcyB0aGUgZnVuY3Rpb24gZW50cmllcyBpbiAvcHJvYy9rYWxsc3ltcyBpbnRvIGtlcm5lbF9tYXAtPmRzbywKLSAqIHNvIHRoYXQgd2UgY2FuIGluIHRoZSBuZXh0IHN0ZXAgc2V0IHRoZSBzeW1ib2wgLT5lbmQgYWRkcmVzcyBhbmQgdGhlbgotICogY2FsbCBrZXJuZWxfbWFwc19fc3BsaXRfa2FsbHN5bXMuCi0gKi8KLXN0YXRpYyBpbnQgZHNvX19sb2FkX2FsbF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXApCitpbnQga2FsbHN5bXNfX3BhcnNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICphcmcsCisJCSAgICBpbnQgKCpwcm9jZXNzX3N5bWJvbCkodm9pZCAqYXJnLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJICAgICBjaGFyIHR5cGUsIHU2NCBzdGFydCkpCiB7CiAJY2hhciAqbGluZSA9IE5VTEw7CiAJc2l6ZV90IG47Ci0Jc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmc2VsZi0+c3ltYm9sc1ttYXAtPnR5cGVdOwotCUZJTEUgKmZpbGUgPSBmb3BlbigiL3Byb2Mva2FsbHN5bXMiLCAiciIpOworCWludCBlcnIgPSAwOworCUZJTEUgKmZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKIAogCWlmIChmaWxlID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZhaWx1cmU7CiAKIAl3aGlsZSAoIWZlb2YoZmlsZSkpIHsKIAkJdTY0IHN0YXJ0OwotCQlzdHJ1Y3Qgc3ltYm9sICpzeW07CiAJCWludCBsaW5lX2xlbiwgbGVuOwogCQljaGFyIHN5bWJvbF90eXBlOwogCQljaGFyICpzeW1ib2xfbmFtZTsKQEAgLTQyMCw0MyArNDE1LDcyIEBACiAJCQljb250aW51ZTsKIAogCQlzeW1ib2xfdHlwZSA9IHRvdXBwZXIobGluZVtsZW5dKTsKLQkJaWYgKCFzeW1ib2xfdHlwZV9faXNfYShzeW1ib2xfdHlwZSwgbWFwLT50eXBlKSkKLQkJCWNvbnRpbnVlOwotCiAJCXN5bWJvbF9uYW1lID0gbGluZSArIGxlbiArIDI7Ci0JCS8qCi0JCSAqIFdpbGwgZml4IHVwIHRoZSBlbmQgbGF0ZXIsIHdoZW4gd2UgaGF2ZSBhbGwgc3ltYm9scyBzb3J0ZWQuCi0JCSAqLwotCQlzeW0gPSBzeW1ib2xfX25ldyhzdGFydCwgMCwgc3ltYm9sX25hbWUpOwogCi0JCWlmIChzeW0gPT0gTlVMTCkKLQkJCWdvdG8gb3V0X2RlbGV0ZV9saW5lOwotCQkvKgotCQkgKiBXZSB3aWxsIHBhc3MgdGhlIHN5bWJvbHMgdG8gdGhlIGZpbHRlciBsYXRlciwgaW4KLQkJICogbWFwX19zcGxpdF9rYWxsc3ltcywgd2hlbiB3ZSBoYXZlIHNwbGl0IHRoZSBtYXBzIHBlciBtb2R1bGUKLQkJICovCi0JCXN5bWJvbHNfX2luc2VydChyb290LCBzeW0pOworCQllcnIgPSBwcm9jZXNzX3N5bWJvbChhcmcsIHN5bWJvbF9uYW1lLCBzeW1ib2xfdHlwZSwgc3RhcnQpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CiAJfQogCiAJZnJlZShsaW5lKTsKIAlmY2xvc2UoZmlsZSk7CisJcmV0dXJuIGVycjsKIAotCXJldHVybiAwOwotCi1vdXRfZGVsZXRlX2xpbmU6Ci0JZnJlZShsaW5lKTsKIG91dF9mYWlsdXJlOgogCXJldHVybiAtMTsKIH0KIAorc3RydWN0IHByb2Nlc3Nfa2FsbHN5bXNfYXJncyB7CisJc3RydWN0IG1hcCAqbWFwOworCXN0cnVjdCBkc28gKmRzbzsKK307CisKK3N0YXRpYyBpbnQgbWFwX19wcm9jZXNzX2thbGxzeW1fc3ltYm9sKHZvaWQgKmFyZywgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgICAgY2hhciB0eXBlLCB1NjQgc3RhcnQpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBwcm9jZXNzX2thbGxzeW1zX2FyZ3MgKmEgPSBhcmc7CisJc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmYS0+ZHNvLT5zeW1ib2xzW2EtPm1hcC0+dHlwZV07CisKKwlpZiAoIXN5bWJvbF90eXBlX19pc19hKHR5cGUsIGEtPm1hcC0+dHlwZSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBXaWxsIGZpeCB1cCB0aGUgZW5kIGxhdGVyLCB3aGVuIHdlIGhhdmUgYWxsIHN5bWJvbHMgc29ydGVkLgorCSAqLworCXN5bSA9IHN5bWJvbF9fbmV3KHN0YXJ0LCAwLCBuYW1lKTsKKworCWlmIChzeW0gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoKKwkgKiBXZSB3aWxsIHBhc3MgdGhlIHN5bWJvbHMgdG8gdGhlIGZpbHRlciBsYXRlciwgaW4KKwkgKiBtYXBfX3NwbGl0X2thbGxzeW1zLCB3aGVuIHdlIGhhdmUgc3BsaXQgdGhlIG1hcHMgcGVyIG1vZHVsZQorCSAqLworCXN5bWJvbHNfX2luc2VydChyb290LCBzeW0pOworCXJldHVybiAwOworfQorCisvKgorICogTG9hZHMgdGhlIGZ1bmN0aW9uIGVudHJpZXMgaW4gL3Byb2Mva2FsbHN5bXMgaW50byBrZXJuZWxfbWFwLT5kc28sCisgKiBzbyB0aGF0IHdlIGNhbiBpbiB0aGUgbmV4dCBzdGVwIHNldCB0aGUgc3ltYm9sIC0+ZW5kIGFkZHJlc3MgYW5kIHRoZW4KKyAqIGNhbGwga2VybmVsX21hcHNfX3NwbGl0X2thbGxzeW1zLgorICovCitzdGF0aWMgaW50IGRzb19fbG9hZF9hbGxfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJICBzdHJ1Y3QgbWFwICptYXApCit7CisJc3RydWN0IHByb2Nlc3Nfa2FsbHN5bXNfYXJncyBhcmdzID0geyAubWFwID0gbWFwLCAuZHNvID0gc2VsZiwgfTsKKwlyZXR1cm4ga2FsbHN5bXNfX3BhcnNlKGZpbGVuYW1lLCAmYXJncywgbWFwX19wcm9jZXNzX2thbGxzeW1fc3ltYm9sKTsKK30KKwogLyoKICAqIFNwbGl0IHRoZSBzeW1ib2xzIGludG8gbWFwcywgbWFraW5nIHN1cmUgdGhlcmUgYXJlIG5vIG92ZXJsYXBzLCBpLmUuIHRoZQogICoga2VybmVsIHJhbmdlIGlzIGJyb2tlbiBpbiBzZXZlcmFsIG1hcHMsIG5hbWVkIFtrZXJuZWxdLk4sIGFzIHdlIGRvbid0IGhhdmUKICAqIHRoZSBvcmlnaW5hbCBFTEYgc2VjdGlvbiBuYW1lcyB2bWxpbnV4IGhhdmUuCiAgKi8KIHN0YXRpYyBpbnQgZHNvX19zcGxpdF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCi0JCQkgICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKKwkJCSAgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogeworCXN0cnVjdCBtYXBfZ3JvdXBzICprbWFwcyA9IG1hcF9fa21hcChtYXApLT5rbWFwczsKIAlzdHJ1Y3QgbWFwICpjdXJyX21hcCA9IG1hcDsKIAlzdHJ1Y3Qgc3ltYm9sICpwb3M7CiAJaW50IGNvdW50ID0gMDsKQEAgLTQ3NywxMyArNTAxLDE3IEBACiAKIAkJCSptb2R1bGUrKyA9ICdcMCc7CiAKLQkJCWlmIChzdHJjbXAoc2VsZi0+bmFtZSwgbW9kdWxlKSkgewotCQkJCWN1cnJfbWFwID0gbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKCZzZXNzaW9uLT5rbWFwcywgbWFwLT50eXBlLCBtb2R1bGUpOworCQkJaWYgKHN0cmNtcChjdXJyX21hcC0+ZHNvLT5zaG9ydF9uYW1lLCBtb2R1bGUpKSB7CisJCQkJY3Vycl9tYXAgPSBtYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoa21hcHMsIG1hcC0+dHlwZSwgbW9kdWxlKTsKIAkJCQlpZiAoY3Vycl9tYXAgPT0gTlVMTCkgewogCQkJCQlwcl9kZWJ1ZygiL3Byb2Mve2thbGxzeW1zLG1vZHVsZXN9ICIKLQkJCQkJICAgICAgICAgImluY29uc2lzdGVuY3khXG4iKTsKKwkJCQkJICAgICAgICAgImluY29uc2lzdGVuY3kgd2hpbGUgbG9va2luZyAiCisJCQkJCQkgImZvciBcIiVzXCIgbW9kdWxlIVxuIiwgbW9kdWxlKTsKIAkJCQkJcmV0dXJuIC0xOwogCQkJCX0KKworCQkJCWlmIChjdXJyX21hcC0+ZHNvLT5sb2FkZWQpCisJCQkJCWdvdG8gZGlzY2FyZF9zeW1ib2w7CiAJCQl9CiAJCQkvKgogCQkJICogU28gdGhhdCB3ZSBsb29rIGp1c3QgbGlrZSB3ZSBnZXQgZnJvbSAua28gZmlsZXMsCkBAIC01MDMsMTMgKzUzMSwxMyBAQAogCQkJCXJldHVybiAtMTsKIAogCQkJY3Vycl9tYXAgPSBtYXBfX25ldzIocG9zLT5zdGFydCwgZHNvLCBtYXAtPnR5cGUpOwotCQkJaWYgKG1hcCA9PSBOVUxMKSB7CisJCQlpZiAoY3Vycl9tYXAgPT0gTlVMTCkgewogCQkJCWRzb19fZGVsZXRlKGRzbyk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCiAJCQljdXJyX21hcC0+bWFwX2lwID0gY3Vycl9tYXAtPnVubWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKLQkJCW1hcF9ncm91cHNfX2luc2VydCgmc2Vzc2lvbi0+a21hcHMsIGN1cnJfbWFwKTsKKwkJCW1hcF9ncm91cHNfX2luc2VydChrbWFwcywgY3Vycl9tYXApOwogCQkJKytrZXJuZWxfcmFuZ2U7CiAJCX0KIApAQCAtNTI4LDE3ICs1NTYsMTYgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLQotc3RhdGljIGludCBkc29fX2xvYWRfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAotCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKK2ludCBkc29fX2xvYWRfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCSAgICAgICBzdHJ1Y3QgbWFwICptYXAsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7Ci0JaWYgKGRzb19fbG9hZF9hbGxfa2FsbHN5bXMoc2VsZiwgbWFwKSA8IDApCisJaWYgKGRzb19fbG9hZF9hbGxfa2FsbHN5bXMoc2VsZiwgZmlsZW5hbWUsIG1hcCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAlzeW1ib2xzX19maXh1cF9lbmQoJnNlbGYtPnN5bWJvbHNbbWFwLT50eXBlXSk7CiAJc2VsZi0+b3JpZ2luID0gRFNPX19PUklHX0tFUk5FTDsKIAotCXJldHVybiBkc29fX3NwbGl0X2thbGxzeW1zKHNlbGYsIG1hcCwgc2Vzc2lvbiwgZmlsdGVyKTsKKwlyZXR1cm4gZHNvX19zcGxpdF9rYWxsc3ltcyhzZWxmLCBtYXAsIGZpbHRlcik7CiB9CiAKIHN0YXRpYyBpbnQgZHNvX19sb2FkX3BlcmZfbWFwKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKQEAgLTg2NCwxMCArODkxLDEwIEBACiAJfQogfQogCi1zdGF0aWMgaW50IGRzb19fbG9hZF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAotCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIGNvbnN0IGNoYXIgKm5hbWUsIGludCBmZCwKLQkJCSBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQga2VybmVsLCBpbnQga21vZHVsZSkKK3N0YXRpYyBpbnQgZHNvX19sb2FkX3N5bShzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgaW50IGZkLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQga21vZHVsZSkKIHsKKwlzdHJ1Y3Qga21hcCAqa21hcCA9IHNlbGYtPmtlcm5lbCA/IG1hcF9fa21hcChtYXApIDogTlVMTDsKIAlzdHJ1Y3QgbWFwICpjdXJyX21hcCA9IG1hcDsKIAlzdHJ1Y3QgZHNvICpjdXJyX2RzbyA9IHNlbGY7CiAJc2l6ZV90IGRzb19uYW1lX2xlbiA9IHN0cmxlbihzZWxmLT5zaG9ydF9uYW1lKTsKQEAgLTkyNCw3ICs5NTEsNyBAQAogCW5yX3N5bXMgPSBzaGRyLnNoX3NpemUgLyBzaGRyLnNoX2VudHNpemU7CiAKIAltZW1zZXQoJnN5bSwgMCwgc2l6ZW9mKHN5bSkpOwotCWlmICgha2VybmVsKSB7CisJaWYgKCFzZWxmLT5rZXJuZWwpIHsKIAkJc2VsZi0+YWRqdXN0X3N5bWJvbHMgPSAoZWhkci5lX3R5cGUgPT0gRVRfRVhFQyB8fAogCQkJCWVsZl9zZWN0aW9uX2J5X25hbWUoZWxmLCAmZWhkciwgJnNoZHIsCiAJCQkJCQkgICAgICIuZ251LnByZWxpbmtfdW5kbyIsCkBAIC05MzMsMTEgKzk2MCwxNSBAQAogCiAJZWxmX3N5bXRhYl9fZm9yX2VhY2hfc3ltYm9sKHN5bXMsIG5yX3N5bXMsIGlkeCwgc3ltKSB7CiAJCXN0cnVjdCBzeW1ib2wgKmY7Ci0JCWNvbnN0IGNoYXIgKmVsZl9uYW1lOworCQljb25zdCBjaGFyICplbGZfbmFtZSA9IGVsZl9zeW1fX25hbWUoJnN5bSwgc3ltc3Rycyk7CiAJCWNoYXIgKmRlbWFuZ2xlZCA9IE5VTEw7CiAJCWludCBpc19sYWJlbCA9IGVsZl9zeW1fX2lzX2xhYmVsKCZzeW0pOwogCQljb25zdCBjaGFyICpzZWN0aW9uX25hbWU7CiAKKwkJaWYgKGttYXAgJiYga21hcC0+cmVmX3JlbG9jX3N5bSAmJiBrbWFwLT5yZWZfcmVsb2Nfc3ltLT5uYW1lICYmCisJCSAgICBzdHJjbXAoZWxmX25hbWUsIGttYXAtPnJlZl9yZWxvY19zeW0tPm5hbWUpID09IDApCisJCQlrbWFwLT5yZWZfcmVsb2Nfc3ltLT51bnJlbG9jYXRlZF9hZGRyID0gc3ltLnN0X3ZhbHVlOworCiAJCWlmICghaXNfbGFiZWwgJiYgIWVsZl9zeW1fX2lzX2EoJnN5bSwgbWFwLT50eXBlKSkKIAkJCWNvbnRpbnVlOwogCkBAIC05NTAsMTAgKzk4MSw5IEBACiAJCWlmIChpc19sYWJlbCAmJiAhZWxmX3NlY19faXNfYSgmc2hkciwgc2Vjc3RycywgbWFwLT50eXBlKSkKIAkJCWNvbnRpbnVlOwogCi0JCWVsZl9uYW1lID0gZWxmX3N5bV9fbmFtZSgmc3ltLCBzeW1zdHJzKTsKIAkJc2VjdGlvbl9uYW1lID0gZWxmX3NlY19fbmFtZSgmc2hkciwgc2Vjc3Rycyk7CiAKLQkJaWYgKGtlcm5lbCB8fCBrbW9kdWxlKSB7CisJCWlmIChzZWxmLT5rZXJuZWwgfHwga21vZHVsZSkgewogCQkJY2hhciBkc29fbmFtZVtQQVRIX01BWF07CiAKIAkJCWlmIChzdHJjbXAoc2VjdGlvbl9uYW1lLApAQCAtOTY5LDcgKzk5OSw3IEBACiAJCQlzbnByaW50Zihkc29fbmFtZSwgc2l6ZW9mKGRzb19uYW1lKSwKIAkJCQkgIiVzJXMiLCBzZWxmLT5zaG9ydF9uYW1lLCBzZWN0aW9uX25hbWUpOwogCi0JCQljdXJyX21hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZSgmc2Vzc2lvbi0+a21hcHMsIG1hcC0+dHlwZSwgZHNvX25hbWUpOworCQkJY3Vycl9tYXAgPSBtYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoa21hcC0+a21hcHMsIG1hcC0+dHlwZSwgZHNvX25hbWUpOwogCQkJaWYgKGN1cnJfbWFwID09IE5VTEwpIHsKIAkJCQl1NjQgc3RhcnQgPSBzeW0uc3RfdmFsdWU7CiAKQEAgLTk4MCw3ICsxMDEwLDcgQEAKIAkJCQlpZiAoY3Vycl9kc28gPT0gTlVMTCkKIAkJCQkJZ290byBvdXRfZWxmX2VuZDsKIAkJCQljdXJyX21hcCA9IG1hcF9fbmV3MihzdGFydCwgY3Vycl9kc28sCi0JCQkJCQkgICAgIE1BUF9fRlVOQ1RJT04pOworCQkJCQkJICAgICBtYXAtPnR5cGUpOwogCQkJCWlmIChjdXJyX21hcCA9PSBOVUxMKSB7CiAJCQkJCWRzb19fZGVsZXRlKGN1cnJfZHNvKTsKIAkJCQkJZ290byBvdXRfZWxmX2VuZDsKQEAgLTk4OCw4ICsxMDE4LDkgQEAKIAkJCQljdXJyX21hcC0+bWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKIAkJCQljdXJyX21hcC0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOwogCQkJCWN1cnJfZHNvLT5vcmlnaW4gPSBEU09fX09SSUdfS0VSTkVMOwotCQkJCW1hcF9ncm91cHNfX2luc2VydCgmc2Vzc2lvbi0+a21hcHMsIGN1cnJfbWFwKTsKKwkJCQltYXBfZ3JvdXBzX19pbnNlcnQoa21hcC0+a21hcHMsIGN1cnJfbWFwKTsKIAkJCQlkc29zX19hZGQoJmRzb3NfX2tlcm5lbCwgY3Vycl9kc28pOworCQkJCWRzb19fc2V0X2xvYWRlZChjdXJyX2RzbywgbWFwLT50eXBlKTsKIAkJCX0gZWxzZQogCQkJCWN1cnJfZHNvID0gY3Vycl9tYXAtPmRzbzsKIApAQCAtOTk3LDkgKzEwMjgsMTAgQEAKIAkJfQogCiAJCWlmIChjdXJyX2Rzby0+YWRqdXN0X3N5bWJvbHMpIHsKLQkJCXByX2RlYnVnMigiYWRqdXN0aW5nIHN5bWJvbDogc3RfdmFsdWU6ICVMeCBzaF9hZGRyOiAiCi0JCQkJICAiJUx4IHNoX29mZnNldDogJUx4XG4iLCAodTY0KXN5bS5zdF92YWx1ZSwKLQkJCQkgICh1NjQpc2hkci5zaF9hZGRyLCAodTY0KXNoZHIuc2hfb2Zmc2V0KTsKKwkJCXByX2RlYnVnNCgiJXM6IGFkanVzdGluZyBzeW1ib2w6IHN0X3ZhbHVlOiAlI0x4ICIKKwkJCQkgICJzaF9hZGRyOiAlI0x4IHNoX29mZnNldDogJSNMeFxuIiwgX19mdW5jX18sCisJCQkJICAodTY0KXN5bS5zdF92YWx1ZSwgKHU2NClzaGRyLnNoX2FkZHIsCisJCQkJICAodTY0KXNoZHIuc2hfb2Zmc2V0KTsKIAkJCXN5bS5zdF92YWx1ZSAtPSBzaGRyLnNoX2FkZHIgLSBzaGRyLnNoX29mZnNldDsKIAkJfQogCQkvKgpAQCAtMTAyNyw4ICsxMDU5LDE2IEBACiAJLyoKIAkgKiBGb3IgbWlzYW5ub3RhdGVkLCB6ZXJvZWQsIEFTTSBmdW5jdGlvbiBzaXplcy4KIAkgKi8KLQlpZiAobnIgPiAwKQorCWlmIChuciA+IDApIHsKIAkJc3ltYm9sc19fZml4dXBfZW5kKCZzZWxmLT5zeW1ib2xzW21hcC0+dHlwZV0pOworCQlpZiAoa21hcCkgeworCQkJLyoKKwkJCSAqIFdlIG5lZWQgdG8gZml4dXAgdGhpcyBoZXJlIHRvbyBiZWNhdXNlIHdlIGNyZWF0ZSBuZXcKKwkJCSAqIG1hcHMgaGVyZSwgZm9yIHRoaW5ncyBsaWtlIHZzeXNjYWxsIHNlY3Rpb25zLgorCQkJICovCisJCQlfX21hcF9ncm91cHNfX2ZpeHVwX2VuZChrbWFwLT5rbWFwcywgbWFwLT50eXBlKTsKKwkJfQorCX0KIAllcnIgPSBucjsKIG91dF9lbGZfZW5kOgogCWVsZl9lbmQoZWxmKTsKQEAgLTEwNDEsMjUgKzEwODEsMjggQEAKIAlyZXR1cm4gbWVtY21wKHNlbGYtPmJ1aWxkX2lkLCBidWlsZF9pZCwgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSkgPT0gMDsKIH0KIAotc3RhdGljIGJvb2wgX19kc29zX19yZWFkX2J1aWxkX2lkcyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQorc3RhdGljIGJvb2wgX19kc29zX19yZWFkX2J1aWxkX2lkcyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBib29sIHdpdGhfaGl0cykKIHsKIAlib29sIGhhdmVfYnVpbGRfaWQgPSBmYWxzZTsKIAlzdHJ1Y3QgZHNvICpwb3M7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbm9kZSkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbm9kZSkgeworCQlpZiAod2l0aF9oaXRzICYmICFwb3MtPmhpdCkKKwkJCWNvbnRpbnVlOwogCQlpZiAoZmlsZW5hbWVfX3JlYWRfYnVpbGRfaWQocG9zLT5sb25nX25hbWUsIHBvcy0+YnVpbGRfaWQsCiAJCQkJCSAgICBzaXplb2YocG9zLT5idWlsZF9pZCkpID4gMCkgewogCQkJaGF2ZV9idWlsZF9pZAkgID0gdHJ1ZTsKIAkJCXBvcy0+aGFzX2J1aWxkX2lkID0gdHJ1ZTsKIAkJfQorCX0KIAogCXJldHVybiBoYXZlX2J1aWxkX2lkOwogfQogCi1ib29sIGRzb3NfX3JlYWRfYnVpbGRfaWRzKHZvaWQpCitib29sIGRzb3NfX3JlYWRfYnVpbGRfaWRzKGJvb2wgd2l0aF9oaXRzKQogewotCWJvb2wga2J1aWxkaWRzID0gX19kc29zX19yZWFkX2J1aWxkX2lkcygmZHNvc19fa2VybmVsKSwKLQkgICAgIHVidWlsZGlkcyA9IF9fZHNvc19fcmVhZF9idWlsZF9pZHMoJmRzb3NfX3VzZXIpOworCWJvb2wga2J1aWxkaWRzID0gX19kc29zX19yZWFkX2J1aWxkX2lkcygmZHNvc19fa2VybmVsLCB3aXRoX2hpdHMpLAorCSAgICAgdWJ1aWxkaWRzID0gX19kc29zX19yZWFkX2J1aWxkX2lkcygmZHNvc19fdXNlciwgd2l0aF9oaXRzKTsKIAlyZXR1cm4ga2J1aWxkaWRzIHx8IHVidWlsZGlkczsKIH0KIApAQCAtMTE5MSw2ICsxMjM0LDcgQEAKIAlzdGF0aWMgY29uc3QgY2hhciBvcmlnaW5bXSA9IHsKIAkJW0RTT19fT1JJR19LRVJORUxdID0gICAnaycsCiAJCVtEU09fX09SSUdfSkFWQV9KSVRdID0gJ2onLAorCQlbRFNPX19PUklHX0JVSUxEX0lEX0NBQ0hFXSA9ICdCJywKIAkJW0RTT19fT1JJR19GRURPUkFdID0gICAnZicsCiAJCVtEU09fX09SSUdfVUJVTlRVXSA9ICAgJ3UnLAogCQlbRFNPX19PUklHX0JVSUxESURdID0gICdiJywKQEAgLTEyMDMsMTkgKzEyNDcsMTkgQEAKIAlyZXR1cm4gb3JpZ2luW3NlbGYtPm9yaWdpbl07CiB9CiAKLWludCBkc29fX2xvYWQoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCSAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCitpbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAlpbnQgc2l6ZSA9IFBBVEhfTUFYOwogCWNoYXIgKm5hbWU7CiAJdTggYnVpbGRfaWRbQlVJTERfSURfU0laRV07CisJY2hhciBidWlsZF9pZF9oZXhbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKIAlpbnQgcmV0ID0gLTE7CiAJaW50IGZkOwogCiAJZHNvX19zZXRfbG9hZGVkKHNlbGYsIG1hcC0+dHlwZSk7CiAKIAlpZiAoc2VsZi0+a2VybmVsKQotCQlyZXR1cm4gZHNvX19sb2FkX2tlcm5lbF9zeW0oc2VsZiwgbWFwLCBzZXNzaW9uLCBmaWx0ZXIpOworCQlyZXR1cm4gZHNvX19sb2FkX2tlcm5lbF9zeW0oc2VsZiwgbWFwLCBmaWx0ZXIpOwogCiAJbmFtZSA9IG1hbGxvYyhzaXplKTsKIAlpZiAoIW5hbWUpCkBAIC0xMjMwLDggKzEyNzQsMTYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlzZWxmLT5vcmlnaW4gPSBEU09fX09SSUdfRkVET1JBIC0gMTsKKwlzZWxmLT5vcmlnaW4gPSBEU09fX09SSUdfQlVJTERfSURfQ0FDSEU7CiAKKwlpZiAoc2VsZi0+aGFzX2J1aWxkX2lkKSB7CisJCWJ1aWxkX2lkX19zcHJpbnRmKHNlbGYtPmJ1aWxkX2lkLCBzaXplb2Yoc2VsZi0+YnVpbGRfaWQpLAorCQkJCSAgYnVpbGRfaWRfaGV4KTsKKwkJc25wcmludGYobmFtZSwgc2l6ZSwgIiVzLyVzLy5idWlsZC1pZC8lLjJzLyVzIiwKKwkJCSBnZXRlbnYoIkhPTUUiKSwgREVCVUdfQ0FDSEVfRElSLAorCQkJIGJ1aWxkX2lkX2hleCwgYnVpbGRfaWRfaGV4ICsgMik7CisJCWdvdG8gb3Blbl9maWxlOworCX0KIG1vcmU6CiAJZG8gewogCQlzZWxmLT5vcmlnaW4rKzsKQEAgLTEyNDcsOCArMTI5OSw2IEBACiAJCWNhc2UgRFNPX19PUklHX0JVSUxESUQ6CiAJCQlpZiAoZmlsZW5hbWVfX3JlYWRfYnVpbGRfaWQoc2VsZi0+bG9uZ19uYW1lLCBidWlsZF9pZCwKIAkJCQkJCSAgICBzaXplb2YoYnVpbGRfaWQpKSkgewotCQkJCWNoYXIgYnVpbGRfaWRfaGV4W0JVSUxEX0lEX1NJWkUgKiAyICsgMV07Ci0KIAkJCQlidWlsZF9pZF9fc3ByaW50ZihidWlsZF9pZCwgc2l6ZW9mKGJ1aWxkX2lkKSwKIAkJCQkJCSAgYnVpbGRfaWRfaGV4KTsKIAkJCQlzbnByaW50ZihuYW1lLCBzaXplLApAQCAtMTI3NiwxMSArMTMyNiwxMSBAQAogCQkJaWYgKCFkc29fX2J1aWxkX2lkX2VxdWFsKHNlbGYsIGJ1aWxkX2lkKSkKIAkJCQlnb3RvIG1vcmU7CiAJCX0KLQorb3Blbl9maWxlOgogCQlmZCA9IG9wZW4obmFtZSwgT19SRE9OTFkpOwogCX0gd2hpbGUgKGZkIDwgMCk7CiAKLQlyZXQgPSBkc29fX2xvYWRfc3ltKHNlbGYsIG1hcCwgTlVMTCwgbmFtZSwgZmQsIGZpbHRlciwgMCwgMCk7CisJcmV0ID0gZHNvX19sb2FkX3N5bShzZWxmLCBtYXAsIG5hbWUsIGZkLCBmaWx0ZXIsIDApOwogCWNsb3NlKGZkKTsKIAogCS8qCkBAIC0xMzA5LDE0ICsxMzU5LDM0IEBACiAJZm9yIChuZCA9IHJiX2ZpcnN0KCZzZWxmLT5tYXBzW3R5cGVdKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKIAkJc3RydWN0IG1hcCAqbWFwID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYXAsIHJiX25vZGUpOwogCi0JCWlmIChtYXAtPmRzbyAmJiBzdHJjbXAobWFwLT5kc28tPm5hbWUsIG5hbWUpID09IDApCisJCWlmIChtYXAtPmRzbyAmJiBzdHJjbXAobWFwLT5kc28tPnNob3J0X25hbWUsIG5hbWUpID09IDApCiAJCQlyZXR1cm4gbWFwOwogCX0KIAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fc2V0X21vZHVsZXNfcGF0aF9kaXIoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwgY2hhciAqZGlybmFtZSkKK3N0YXRpYyBpbnQgZHNvX19rZXJuZWxfbW9kdWxlX2dldF9idWlsZF9pZChzdHJ1Y3QgZHNvICpzZWxmKQoreworCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworCS8qCisJICoga2VybmVsIG1vZHVsZSBzaG9ydCBuYW1lcyBhcmUgb2YgdGhlIGZvcm0gIlttb2R1bGVdIiBhbmQKKwkgKiB3ZSBuZWVkIGp1c3QgIm1vZHVsZSIgaGVyZS4KKwkgKi8KKwljb25zdCBjaGFyICpuYW1lID0gc2VsZi0+c2hvcnRfbmFtZSArIDE7CisKKwlzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwKKwkJICIvc3lzL21vZHVsZS8lLipzL25vdGVzLy5ub3RlLmdudS5idWlsZC1pZCIsCisJCSAoaW50KXN0cmxlbihuYW1lIC0gMSksIG5hbWUpOworCisJaWYgKHN5c2ZzX19yZWFkX2J1aWxkX2lkKGZpbGVuYW1lLCBzZWxmLT5idWlsZF9pZCwKKwkJCQkgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSkgPT0gMCkKKwkJc2VsZi0+aGFzX2J1aWxkX2lkID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hcF9ncm91cHNfX3NldF9tb2R1bGVzX3BhdGhfZGlyKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLCBjaGFyICpkaXJuYW1lKQogewogCXN0cnVjdCBkaXJlbnQgKmRlbnQ7CiAJRElSICpkaXIgPSBvcGVuZGlyKGRpcm5hbWUpOwpAQCAtMTMzNiw3ICsxNDA2LDcgQEAKIAogCQkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvJXMiLAogCQkJCSBkaXJuYW1lLCBkZW50LT5kX25hbWUpOwotCQkJaWYgKHBlcmZfc2Vzc2lvbl9fc2V0X21vZHVsZXNfcGF0aF9kaXIoc2VsZiwgcGF0aCkgPCAwKQorCQkJaWYgKG1hcF9ncm91cHNfX3NldF9tb2R1bGVzX3BhdGhfZGlyKHNlbGYsIHBhdGgpIDwgMCkKIAkJCQlnb3RvIGZhaWx1cmU7CiAJCX0gZWxzZSB7CiAJCQljaGFyICpkb3QgPSBzdHJyY2hyKGRlbnQtPmRfbmFtZSwgJy4nKSwKQEAgLTEzNTAsNyArMTQyMCw3IEBACiAJCQkJIChpbnQpKGRvdCAtIGRlbnQtPmRfbmFtZSksIGRlbnQtPmRfbmFtZSk7CiAKIAkJCXN0cnhmcmNoYXIoZHNvX25hbWUsICctJywgJ18nKTsKLQkJCW1hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZSgmc2VsZi0+a21hcHMsIE1BUF9fRlVOQ1RJT04sIGRzb19uYW1lKTsKKwkJCW1hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZShzZWxmLCBNQVBfX0ZVTkNUSU9OLCBkc29fbmFtZSk7CiAJCQlpZiAobWFwID09IE5VTEwpCiAJCQkJY29udGludWU7CiAKQEAgLTEzNjEsNiArMTQzMSw3IEBACiAJCQlpZiAobG9uZ19uYW1lID09IE5VTEwpCiAJCQkJZ290byBmYWlsdXJlOwogCQkJZHNvX19zZXRfbG9uZ19uYW1lKG1hcC0+ZHNvLCBsb25nX25hbWUpOworCQkJZHNvX19rZXJuZWxfbW9kdWxlX2dldF9idWlsZF9pZChtYXAtPmRzbyk7CiAJCX0KIAl9CiAKQEAgLTEzNzAsNyArMTQ0MSw3IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fc2V0X21vZHVsZXNfcGF0aChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQorc3RhdGljIGludCBtYXBfZ3JvdXBzX19zZXRfbW9kdWxlc19wYXRoKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmKQogewogCXN0cnVjdCB1dHNuYW1lIHV0czsKIAljaGFyIG1vZHVsZXNfcGF0aFtQQVRIX01BWF07CkBAIC0xMzgxLDcgKzE0NTIsNyBAQAogCXNucHJpbnRmKG1vZHVsZXNfcGF0aCwgc2l6ZW9mKG1vZHVsZXNfcGF0aCksICIvbGliL21vZHVsZXMvJXMva2VybmVsIiwKIAkJIHV0cy5yZWxlYXNlKTsKIAotCXJldHVybiBwZXJmX3Nlc3Npb25fX3NldF9tb2R1bGVzX3BhdGhfZGlyKHNlbGYsIG1vZHVsZXNfcGF0aCk7CisJcmV0dXJuIG1hcF9ncm91cHNfX3NldF9tb2R1bGVzX3BhdGhfZGlyKHNlbGYsIG1vZHVsZXNfcGF0aCk7CiB9CiAKIC8qCkBAIC0xMzkxLDggKzE0NjIsOCBAQAogICovCiBzdGF0aWMgc3RydWN0IG1hcCAqbWFwX19uZXcyKHU2NCBzdGFydCwgc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUpCiB7Ci0Jc3RydWN0IG1hcCAqc2VsZiA9IG1hbGxvYyhzaXplb2YoKnNlbGYpKTsKLQorCXN0cnVjdCBtYXAgKnNlbGYgPSB6YWxsb2Moc2l6ZW9mKCpzZWxmKSArCisJCQkJICAoZHNvLT5rZXJuZWwgPyBzaXplb2Yoc3RydWN0IGttYXApIDogMCkpOwogCWlmIChzZWxmICE9IE5VTEwpIHsKIAkJLyoKIAkJICogLT5lbmQgd2lsbCBiZSBmaWxsZWQgYWZ0ZXIgd2UgbG9hZCBhbGwgdGhlIHN5bWJvbHMKQEAgLTE0MDMsNyArMTQ3NCwyNSBAQAogCXJldHVybiBzZWxmOwogfQogCi1zdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fY3JlYXRlX21vZHVsZV9tYXBzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCitzdHJ1Y3QgbWFwICptYXBfZ3JvdXBzX19uZXdfbW9kdWxlKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLCB1NjQgc3RhcnQsCisJCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IG1hcCAqbWFwOworCXN0cnVjdCBkc28gKmRzbyA9IF9fZHNvc19fZmluZG5ldygmZHNvc19fa2VybmVsLCBmaWxlbmFtZSk7CisKKwlpZiAoZHNvID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbWFwID0gbWFwX19uZXcyKHN0YXJ0LCBkc28sIE1BUF9fRlVOQ1RJT04pOworCWlmIChtYXAgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlkc28tPm9yaWdpbiA9IERTT19fT1JJR19LTU9EVUxFOworCW1hcF9ncm91cHNfX2luc2VydChzZWxmLCBtYXApOworCXJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBpbnQgbWFwX2dyb3Vwc19fY3JlYXRlX21vZHVsZXMoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYpCiB7CiAJY2hhciAqbGluZSA9IE5VTEw7CiAJc2l6ZV90IG47CkBAIC0xNDE2LDcgKzE1MDUsNiBAQAogCXdoaWxlICghZmVvZihmaWxlKSkgewogCQljaGFyIG5hbWVbUEFUSF9NQVhdOwogCQl1NjQgc3RhcnQ7Ci0JCXN0cnVjdCBkc28gKmRzbzsKIAkJY2hhciAqc2VwOwogCQlpbnQgbGluZV9sZW47CiAKQEAgLTE0NDIsMzIgKzE1MzAsMTYgQEAKIAkJKnNlcCA9ICdcMCc7CiAKIAkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiWyVzXSIsIGxpbmUpOwotCQlkc28gPSBkc29fX25ldyhuYW1lKTsKLQotCQlpZiAoZHNvID09IE5VTEwpCisJCW1hcCA9IG1hcF9ncm91cHNfX25ld19tb2R1bGUoc2VsZiwgc3RhcnQsIG5hbWUpOworCQlpZiAobWFwID09IE5VTEwpCiAJCQlnb3RvIG91dF9kZWxldGVfbGluZTsKLQotCQltYXAgPSBtYXBfX25ldzIoc3RhcnQsIGRzbywgTUFQX19GVU5DVElPTik7Ci0JCWlmIChtYXAgPT0gTlVMTCkgewotCQkJZHNvX19kZWxldGUoZHNvKTsKLQkJCWdvdG8gb3V0X2RlbGV0ZV9saW5lOwotCQl9Ci0KLQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLAotCQkJICIvc3lzL21vZHVsZS8lcy9ub3Rlcy8ubm90ZS5nbnUuYnVpbGQtaWQiLCBsaW5lKTsKLQkJaWYgKHN5c2ZzX19yZWFkX2J1aWxkX2lkKG5hbWUsIGRzby0+YnVpbGRfaWQsCi0JCQkJCSBzaXplb2YoZHNvLT5idWlsZF9pZCkpID09IDApCi0JCQlkc28tPmhhc19idWlsZF9pZCA9IHRydWU7Ci0KLQkJZHNvLT5vcmlnaW4gPSBEU09fX09SSUdfS01PRFVMRTsKLQkJbWFwX2dyb3Vwc19faW5zZXJ0KCZzZWxmLT5rbWFwcywgbWFwKTsKLQkJZHNvc19fYWRkKCZkc29zX19rZXJuZWwsIGRzbyk7CisJCWRzb19fa2VybmVsX21vZHVsZV9nZXRfYnVpbGRfaWQobWFwLT5kc28pOwogCX0KIAogCWZyZWUobGluZSk7CiAJZmNsb3NlKGZpbGUpOwogCi0JcmV0dXJuIHBlcmZfc2Vzc2lvbl9fc2V0X21vZHVsZXNfcGF0aChzZWxmKTsKKwlyZXR1cm4gbWFwX2dyb3Vwc19fc2V0X21vZHVsZXNfcGF0aChzZWxmKTsKIAogb3V0X2RlbGV0ZV9saW5lOgogCWZyZWUobGluZSk7CkBAIC0xNDc2LDcgKzE1NDgsNiBAQAogfQogCiBzdGF0aWMgaW50IGRzb19fbG9hZF92bWxpbnV4KHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKLQkJCSAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCSAgICAgY29uc3QgY2hhciAqdm1saW51eCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAlpbnQgZXJyID0gLTEsIGZkOwpAQCAtMTUxMCw1MSArMTU4MSwxMjQgQEAKIAkJcmV0dXJuIC0xOwogCiAJZHNvX19zZXRfbG9hZGVkKHNlbGYsIG1hcC0+dHlwZSk7Ci0JZXJyID0gZHNvX19sb2FkX3N5bShzZWxmLCBtYXAsIHNlc3Npb24sIHNlbGYtPmxvbmdfbmFtZSwgZmQsIGZpbHRlciwgMSwgMCk7CisJZXJyID0gZHNvX19sb2FkX3N5bShzZWxmLCBtYXAsIHZtbGludXgsIGZkLCBmaWx0ZXIsIDApOwogCWNsb3NlKGZkKTsKIAorCWlmIChlcnIgPiAwKQorCQlwcl9kZWJ1ZygiVXNpbmcgJXMgZm9yIHN5bWJvbHNcbiIsIHZtbGludXgpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IGRzb19fbG9hZF92bWxpbnV4X3BhdGgoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAorCQkJICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKK3sKKwlpbnQgaSwgZXJyID0gMDsKKworCXByX2RlYnVnKCJMb29raW5nIGF0IHRoZSB2bWxpbnV4X3BhdGggKCVkIGVudHJpZXMgbG9uZylcbiIsCisJCSB2bWxpbnV4X3BhdGhfX25yX2VudHJpZXMpOworCisJZm9yIChpID0gMDsgaSA8IHZtbGludXhfcGF0aF9fbnJfZW50cmllczsgKytpKSB7CisJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KHNlbGYsIG1hcCwgdm1saW51eF9wYXRoW2ldLCBmaWx0ZXIpOworCQlpZiAoZXJyID4gMCkgeworCQkJZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsIHN0cmR1cCh2bWxpbnV4X3BhdGhbaV0pKTsKKwkJCWJyZWFrOworCQl9CisJfQorCiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBkc29fX2xvYWRfa2VybmVsX3N5bShzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCi0JCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKKwkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWludCBlcnI7Ci0JYm9vbCBpc19rYWxsc3ltczsKKwljb25zdCBjaGFyICprYWxsc3ltc19maWxlbmFtZSA9IE5VTEw7CisJY2hhciAqa2FsbHN5bXNfYWxsb2NhdGVkX2ZpbGVuYW1lID0gTlVMTDsKKwkvKgorCSAqIFN0ZXAgMTogaWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgdm1saW51eCBmaWxlbmFtZSwgdXNlIGl0IGFuZCBvbmx5CisJICogaXQsIHJlcG9ydGluZyBlcnJvcnMgdG8gdGhlIHVzZXIgaWYgaXQgY2Fubm90IGJlIHVzZWQuCisJICoKKwkgKiBGb3IgaW5zdGFuY2UsIHRyeSB0byBhbmFseXNlIGFuIEFSTSBwZXJmLmRhdGEgZmlsZSBfd2l0aG91dF8gYQorCSAqIGJ1aWxkLWlkLCBvciBpZiB0aGUgdXNlciBzcGVjaWZpZXMgdGhlIHdyb25nIHBhdGggdG8gdGhlIHJpZ2h0CisJICogdm1saW51eCBmaWxlLCBvYnZpb3VzbHkgd2UgY2FuJ3QgZmFsbGJhY2sgdG8gYW5vdGhlciB2bWxpbnV4IChhCisJICogeDg2Xzg2IG9uZSwgb24gdGhlIG1hY2hpbmUgd2hlcmUgYW5hbHlzaXMgaXMgYmVpbmcgcGVyZm9ybWVkLCBzYXkpLAorCSAqIG9yIHdvcnNlLCAvcHJvYy9rYWxsc3ltcy4KKwkgKgorCSAqIElmIHRoZSBzcGVjaWZpZWQgZmlsZSBfaGFzXyBhIGJ1aWxkLWlkIGFuZCB0aGVyZSBpcyBhIGJ1aWxkLWlkCisJICogc2VjdGlvbiBpbiB0aGUgcGVyZi5kYXRhIGZpbGUsIHdlIHdpbGwgc3RpbGwgZG8gdGhlIGV4cGVjdGVkCisJICogdmFsaWRhdGlvbiBpbiBkc29fX2xvYWRfdm1saW51eCBhbmQgd2lsbCBiYWlsIG91dCBpZiB0aGV5IGRvbid0CisJICogbWF0Y2guCisJICovCisJaWYgKHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSAhPSBOVUxMKSB7CisJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KHNlbGYsIG1hcCwKKwkJCQkJc3ltYm9sX2NvbmYudm1saW51eF9uYW1lLCBmaWx0ZXIpOworCQlnb3RvIG91dF90cnlfZml4dXA7CisJfQogCiAJaWYgKHZtbGludXhfcGF0aCAhPSBOVUxMKSB7Ci0JCWludCBpOwotCQlwcl9kZWJ1ZygiTG9va2luZyBhdCB0aGUgdm1saW51eF9wYXRoICglZCBlbnRyaWVzIGxvbmcpXG4iLAotCQkJIHZtbGludXhfcGF0aF9fbnJfZW50cmllcyk7Ci0JCWZvciAoaSA9IDA7IGkgPCB2bWxpbnV4X3BhdGhfX25yX2VudHJpZXM7ICsraSkgewotCQkJZXJyID0gZHNvX19sb2FkX3ZtbGludXgoc2VsZiwgbWFwLCBzZXNzaW9uLAotCQkJCQkJdm1saW51eF9wYXRoW2ldLCBmaWx0ZXIpOwotCQkJaWYgKGVyciA+IDApIHsKLQkJCQlwcl9kZWJ1ZygiVXNpbmcgJXMgZm9yIHN5bWJvbHNcbiIsCi0JCQkJCSB2bWxpbnV4X3BhdGhbaV0pOwotCQkJCWRzb19fc2V0X2xvbmdfbmFtZShzZWxmLAotCQkJCQkJICAgc3RyZHVwKHZtbGludXhfcGF0aFtpXSkpOwotCQkJCWdvdG8gb3V0X2ZpeHVwOworCQllcnIgPSBkc29fX2xvYWRfdm1saW51eF9wYXRoKHNlbGYsIG1hcCwgZmlsdGVyKTsKKwkJaWYgKGVyciA+IDApCisJCQlnb3RvIG91dF9maXh1cDsKKwl9CisKKwkvKgorCSAqIFNheSB0aGUga2VybmVsIERTTyB3YXMgY3JlYXRlZCB3aGVuIHByb2Nlc3NpbmcgdGhlIGJ1aWxkLWlkIGhlYWRlciB0YWJsZSwKKwkgKiB3ZSBoYXZlIGEgYnVpbGQtaWQsIHNvIGNoZWNrIGlmIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBydW5uaW5nIGtlcm5lbCwKKwkgKiB1c2luZyBpdCBpZiBpdCBpcy4KKwkgKi8KKwlpZiAoc2VsZi0+aGFzX2J1aWxkX2lkKSB7CisJCXU4IGthbGxzeW1zX2J1aWxkX2lkW0JVSUxEX0lEX1NJWkVdOworCQljaGFyIHNidWlsZF9pZFtCVUlMRF9JRF9TSVpFICogMiArIDFdOworCisJCWlmIChzeXNmc19fcmVhZF9idWlsZF9pZCgiL3N5cy9rZXJuZWwvbm90ZXMiLCBrYWxsc3ltc19idWlsZF9pZCwKKwkJCQkJIHNpemVvZihrYWxsc3ltc19idWlsZF9pZCkpID09IDApIHsKKwkJCWlmIChkc29fX2J1aWxkX2lkX2VxdWFsKHNlbGYsIGthbGxzeW1zX2J1aWxkX2lkKSkgeworCQkJCWthbGxzeW1zX2ZpbGVuYW1lID0gIi9wcm9jL2thbGxzeW1zIjsKKwkJCQlnb3RvIGRvX2thbGxzeW1zOwogCQkJfQogCQl9CisJCS8qCisJCSAqIE5vdyBsb29rIGlmIHdlIGhhdmUgaXQgb24gdGhlIGJ1aWxkLWlkIGNhY2hlIGluCisJCSAqICRIT01FLy5kZWJ1Zy9ba2VybmVsLmthbGxzeW1zXS4KKwkJICovCisJCWJ1aWxkX2lkX19zcHJpbnRmKHNlbGYtPmJ1aWxkX2lkLCBzaXplb2Yoc2VsZi0+YnVpbGRfaWQpLAorCQkJCSAgc2J1aWxkX2lkKTsKKworCQlpZiAoYXNwcmludGYoJmthbGxzeW1zX2FsbG9jYXRlZF9maWxlbmFtZSwKKwkJCSAgICAgIiVzLy5kZWJ1Zy9ba2VybmVsLmthbGxzeW1zXS8lcyIsCisJCQkgICAgIGdldGVudigiSE9NRSIpLCBzYnVpbGRfaWQpID09IC0xKSB7CisJCQlwcl9lcnIoIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBrYWxsc3ltcyBmaWxlIGxvb2t1cFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlrYWxsc3ltc19maWxlbmFtZSA9IGthbGxzeW1zX2FsbG9jYXRlZF9maWxlbmFtZTsKKworCQlpZiAoYWNjZXNzKGthbGxzeW1zX2ZpbGVuYW1lLCBGX09LKSkgeworCQkJcHJfZXJyKCJObyBrYWxsc3ltcyBvciB2bWxpbnV4IHdpdGggYnVpbGQtaWQgJXMgIgorCQkJICAgICAgICJ3YXMgZm91bmRcbiIsIHNidWlsZF9pZCk7CisJCQlmcmVlKGthbGxzeW1zX2FsbG9jYXRlZF9maWxlbmFtZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBMYXN0IHJlc29ydCwgaWYgd2UgZG9uJ3QgaGF2ZSBhIGJ1aWxkLWlkIGFuZCBjb3VsZG4ndCBmaW5kCisJCSAqIGFueSB2bWxpbnV4IGZpbGUsIHRyeSB0aGUgcnVubmluZyBrZXJuZWwga2FsbHN5bXMgdGFibGUuCisJCSAqLworCQlrYWxsc3ltc19maWxlbmFtZSA9ICIvcHJvYy9rYWxsc3ltcyI7CiAJfQogCi0JaXNfa2FsbHN5bXMgPSBzZWxmLT5sb25nX25hbWVbMF0gPT0gJ1snOwotCWlmIChpc19rYWxsc3ltcykKLQkJZ290byBkb19rYWxsc3ltczsKLQotCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KHNlbGYsIG1hcCwgc2Vzc2lvbiwgc2VsZi0+bG9uZ19uYW1lLCBmaWx0ZXIpOwotCWlmIChlcnIgPD0gMCkgewotCQlwcl9pbmZvKCJUaGUgZmlsZSAlcyBjYW5ub3QgYmUgdXNlZCwgIgotCQkJInRyeWluZyB0byB1c2UgL3Byb2Mva2FsbHN5bXMuLi4iLCBzZWxmLT5sb25nX25hbWUpOwogZG9fa2FsbHN5bXM6Ci0JCWVyciA9IGRzb19fbG9hZF9rYWxsc3ltcyhzZWxmLCBtYXAsIHNlc3Npb24sIGZpbHRlcik7Ci0JCWlmIChlcnIgPiAwICYmICFpc19rYWxsc3ltcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGRzb19fc2V0X2xvbmdfbmFtZShzZWxmLCBzdHJkdXAoIltrZXJuZWwua2FsbHN5bXNdIikpOwotCX0KKwllcnIgPSBkc29fX2xvYWRfa2FsbHN5bXMoc2VsZiwga2FsbHN5bXNfZmlsZW5hbWUsIG1hcCwgZmlsdGVyKTsKKwlpZiAoZXJyID4gMCkKKwkJcHJfZGVidWcoIlVzaW5nICVzIGZvciBzeW1ib2xzXG4iLCBrYWxsc3ltc19maWxlbmFtZSk7CisJZnJlZShrYWxsc3ltc19hbGxvY2F0ZWRfZmlsZW5hbWUpOwogCitvdXRfdHJ5X2ZpeHVwOgogCWlmIChlcnIgPiAwKSB7CiBvdXRfZml4dXA6CisJCWlmIChrYWxsc3ltc19maWxlbmFtZSAhPSBOVUxMKQorCQkJZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsIHN0cmR1cCgiW2tlcm5lbC5rYWxsc3ltc10iKSk7CiAJCW1hcF9fZml4dXBfc3RhcnQobWFwKTsKIAkJbWFwX19maXh1cF9lbmQobWFwKTsKIAl9CkBAIC0xNTY0LDcgKzE3MDgsNiBAQAogCiBMSVNUX0hFQUQoZHNvc19fdXNlcik7CiBMSVNUX0hFQUQoZHNvc19fa2VybmVsKTsKLXN0cnVjdCBkc28gKnZkc287CiAKIHN0YXRpYyB2b2lkIGRzb3NfX2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgZHNvICpkc28pCiB7CkBAIC0xNTc2LDE5ICsxNzE5LDE5IEBACiAJc3RydWN0IGRzbyAqcG9zOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG5vZGUpCi0JCWlmIChzdHJjbXAocG9zLT5uYW1lLCBuYW1lKSA9PSAwKQorCQlpZiAoc3RyY21wKHBvcy0+bG9uZ19uYW1lLCBuYW1lKSA9PSAwKQogCQkJcmV0dXJuIHBvczsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RydWN0IGRzbyAqZHNvc19fZmluZG5ldyhjb25zdCBjaGFyICpuYW1lKQorc3RydWN0IGRzbyAqX19kc29zX19maW5kbmV3KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IGRzbyAqZHNvID0gZHNvc19fZmluZCgmZHNvc19fdXNlciwgbmFtZSk7CisJc3RydWN0IGRzbyAqZHNvID0gZHNvc19fZmluZChoZWFkLCBuYW1lKTsKIAogCWlmICghZHNvKSB7CiAJCWRzbyA9IGRzb19fbmV3KG5hbWUpOwogCQlpZiAoZHNvICE9IE5VTEwpIHsKLQkJCWRzb3NfX2FkZCgmZHNvc19fdXNlciwgZHNvKTsKKwkJCWRzb3NfX2FkZChoZWFkLCBkc28pOwogCQkJZHNvX19zZXRfYmFzZW5hbWUoZHNvKTsKIAkJfQogCX0KQEAgLTE2MTMsNzUgKzE3NTYsNzggQEAKIAlfX2Rzb3NfX2ZwcmludGYoJmRzb3NfX3VzZXIsIGZwKTsKIH0KIAotc3RhdGljIHNpemVfdCBfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBGSUxFICpmcCkKK3N0YXRpYyBzaXplX3QgX19kc29zX19mcHJpbnRmX2J1aWxkaWQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgRklMRSAqZnAsCisJCQkJICAgICAgYm9vbCB3aXRoX2hpdHMpCiB7CiAJc3RydWN0IGRzbyAqcG9zOwogCXNpemVfdCByZXQgPSAwOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG5vZGUpIHsKKwkJaWYgKHdpdGhfaGl0cyAmJiAhcG9zLT5oaXQpCisJCQljb250aW51ZTsKIAkJcmV0ICs9IGRzb19fZnByaW50Zl9idWlsZGlkKHBvcywgZnApOwogCQlyZXQgKz0gZnByaW50ZihmcCwgIiAlc1xuIiwgcG9zLT5sb25nX25hbWUpOwogCX0KIAlyZXR1cm4gcmV0OwogfQogCi1zaXplX3QgZHNvc19fZnByaW50Zl9idWlsZGlkKEZJTEUgKmZwKQorc2l6ZV90IGRzb3NfX2ZwcmludGZfYnVpbGRpZChGSUxFICpmcCwgYm9vbCB3aXRoX2hpdHMpCiB7Ci0JcmV0dXJuIChfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZCgmZHNvc19fa2VybmVsLCBmcCkgKwotCQlfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZCgmZHNvc19fdXNlciwgZnApKTsKKwlyZXR1cm4gKF9fZHNvc19fZnByaW50Zl9idWlsZGlkKCZkc29zX19rZXJuZWwsIGZwLCB3aXRoX2hpdHMpICsKKwkJX19kc29zX19mcHJpbnRmX2J1aWxkaWQoJmRzb3NfX3VzZXIsIGZwLCB3aXRoX2hpdHMpKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkc28gKmRzb3NfX2NyZWF0ZV9rZXJuZWwoIGNvbnN0IGNoYXIgKnZtbGludXgpCitzdHJ1Y3QgZHNvICpkc29fX25ld19rZXJuZWwoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZHNvICprZXJuZWwgPSBkc29fX25ldyh2bWxpbnV4ID86ICJba2VybmVsLmthbGxzeW1zXSIpOworCXN0cnVjdCBkc28gKnNlbGYgPSBkc29fX25ldyhuYW1lID86ICJba2VybmVsLmthbGxzeW1zXSIpOwogCi0JaWYgKGtlcm5lbCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCWtlcm5lbC0+c2hvcnRfbmFtZSA9ICJba2VybmVsXSI7Ci0Ja2VybmVsLT5rZXJuZWwJICAgPSAxOwotCi0JdmRzbyA9IGRzb19fbmV3KCJbdmRzb10iKTsKLQlpZiAodmRzbyA9PSBOVUxMKQotCQlnb3RvIG91dF9kZWxldGVfa2VybmVsX2RzbzsKLQlkc29fX3NldF9sb2FkZWQodmRzbywgTUFQX19GVU5DVElPTik7Ci0KLQlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQoIi9zeXMva2VybmVsL25vdGVzIiwga2VybmVsLT5idWlsZF9pZCwKLQkJCQkgc2l6ZW9mKGtlcm5lbC0+YnVpbGRfaWQpKSA9PSAwKQotCQlrZXJuZWwtPmhhc19idWlsZF9pZCA9IHRydWU7Ci0KLQlkc29zX19hZGQoJmRzb3NfX2tlcm5lbCwga2VybmVsKTsKLQlkc29zX19hZGQoJmRzb3NfX3VzZXIsIHZkc28pOwotCi0JcmV0dXJuIGtlcm5lbDsKLQotb3V0X2RlbGV0ZV9rZXJuZWxfZHNvOgotCWRzb19fZGVsZXRlKGtlcm5lbCk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgbWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLCBjb25zdCBjaGFyICp2bWxpbnV4KQotewotCXN0cnVjdCBtYXAgKmZ1bmN0aW9ucywgKnZhcmlhYmxlczsKLQlzdHJ1Y3QgZHNvICprZXJuZWwgPSBkc29zX19jcmVhdGVfa2VybmVsKHZtbGludXgpOwotCi0JaWYgKGtlcm5lbCA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQlmdW5jdGlvbnMgPSBtYXBfX25ldzIoMCwga2VybmVsLCBNQVBfX0ZVTkNUSU9OKTsKLQlpZiAoZnVuY3Rpb25zID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCXZhcmlhYmxlcyA9IG1hcF9fbmV3MigwLCBrZXJuZWwsIE1BUF9fVkFSSUFCTEUpOwotCWlmICh2YXJpYWJsZXMgPT0gTlVMTCkgewotCQltYXBfX2RlbGV0ZShmdW5jdGlvbnMpOwotCQlyZXR1cm4gLTE7CisJaWYgKHNlbGYgIT0gTlVMTCkgeworCQlzZWxmLT5zaG9ydF9uYW1lID0gIltrZXJuZWxdIjsKKwkJc2VsZi0+a2VybmVsCSA9IDE7CiAJfQogCi0JZnVuY3Rpb25zLT5tYXBfaXAgPSBmdW5jdGlvbnMtPnVubWFwX2lwID0KLQkJdmFyaWFibGVzLT5tYXBfaXAgPSB2YXJpYWJsZXMtPnVubWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKLQltYXBfZ3JvdXBzX19pbnNlcnQoc2VsZiwgZnVuY3Rpb25zKTsKLQltYXBfZ3JvdXBzX19pbnNlcnQoc2VsZiwgdmFyaWFibGVzKTsKKwlyZXR1cm4gc2VsZjsKK30KKwordm9pZCBkc29fX3JlYWRfcnVubmluZ19rZXJuZWxfYnVpbGRfaWQoc3RydWN0IGRzbyAqc2VsZikKK3sKKwlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQoIi9zeXMva2VybmVsL25vdGVzIiwgc2VsZi0+YnVpbGRfaWQsCisJCQkJIHNpemVvZihzZWxmLT5idWlsZF9pZCkpID09IDApCisJCXNlbGYtPmhhc19idWlsZF9pZCA9IHRydWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHNvICpkc29zX19jcmVhdGVfa2VybmVsKGNvbnN0IGNoYXIgKnZtbGludXgpCit7CisJc3RydWN0IGRzbyAqa2VybmVsID0gZHNvX19uZXdfa2VybmVsKHZtbGludXgpOworCisJaWYgKGtlcm5lbCAhPSBOVUxMKSB7CisJCWRzb19fcmVhZF9ydW5uaW5nX2tlcm5lbF9idWlsZF9pZChrZXJuZWwpOworCQlkc29zX19hZGQoJmRzb3NfX2tlcm5lbCwga2VybmVsKTsKKwl9CisKKwlyZXR1cm4ga2VybmVsOworfQorCitpbnQgX19tYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCisJCQkJICAgICBzdHJ1Y3QgbWFwICp2bWxpbnV4X21hcHNbTUFQX19OUl9UWVBFU10sCisJCQkJICAgICBzdHJ1Y3QgZHNvICprZXJuZWwpCit7CisJZW51bSBtYXBfdHlwZSB0eXBlOworCisJZm9yICh0eXBlID0gMDsgdHlwZSA8IE1BUF9fTlJfVFlQRVM7ICsrdHlwZSkgeworCQlzdHJ1Y3Qga21hcCAqa21hcDsKKworCQl2bWxpbnV4X21hcHNbdHlwZV0gPSBtYXBfX25ldzIoMCwga2VybmVsLCB0eXBlKTsKKwkJaWYgKHZtbGludXhfbWFwc1t0eXBlXSA9PSBOVUxMKQorCQkJcmV0dXJuIC0xOworCisJCXZtbGludXhfbWFwc1t0eXBlXS0+bWFwX2lwID0KKwkJCXZtbGludXhfbWFwc1t0eXBlXS0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOworCisJCWttYXAgPSBtYXBfX2ttYXAodm1saW51eF9tYXBzW3R5cGVdKTsKKwkJa21hcC0+a21hcHMgPSBzZWxmOworCQltYXBfZ3JvdXBzX19pbnNlcnQoc2VsZiwgdm1saW51eF9tYXBzW3R5cGVdKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3OTEsMTkgKzE5MzcsMjIgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLWludCBwZXJmX3Nlc3Npb25fX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQoraW50IG1hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKKwkJCQkgICBzdHJ1Y3QgbWFwICp2bWxpbnV4X21hcHNbTUFQX19OUl9UWVBFU10pCiB7Ci0JaWYgKG1hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcygmc2VsZi0+a21hcHMsCi0JCQkJCSAgIHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSkgPCAwKQorCXN0cnVjdCBkc28gKmtlcm5lbCA9IGRzb3NfX2NyZWF0ZV9rZXJuZWwoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lKTsKKworCWlmIChrZXJuZWwgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHN5bWJvbF9jb25mLnVzZV9tb2R1bGVzICYmCi0JICAgIHBlcmZfc2Vzc2lvbl9fY3JlYXRlX21vZHVsZV9tYXBzKHNlbGYpIDwgMCkKLQkJcHJfZGVidWcoIkZhaWxlZCB0byBsb2FkIGxpc3Qgb2YgbW9kdWxlcyBmb3Igc2Vzc2lvbiAlcywgIgotCQkJICJjb250aW51aW5nLi4uXG4iLCBzZWxmLT5maWxlbmFtZSk7CisJaWYgKF9fbWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKHNlbGYsIHZtbGludXhfbWFwcywga2VybmVsKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChzeW1ib2xfY29uZi51c2VfbW9kdWxlcyAmJiBtYXBfZ3JvdXBzX19jcmVhdGVfbW9kdWxlcyhzZWxmKSA8IDApCisJCXByX2RlYnVnKCJQcm9ibGVtcyBjcmVhdGluZyBtb2R1bGUgbWFwcywgY29udGludWluZyBhbnl3YXkuLi5cbiIpOwogCS8qCiAJICogTm93IHRoYXQgd2UgaGF2ZSBhbGwgdGhlIG1hcHMgY3JlYXRlZCwganVzdCBzZXQgdGhlIC0+ZW5kIG9mIHRoZW06CiAJICovCi0JbWFwX2dyb3Vwc19fZml4dXBfZW5kKCZzZWxmLT5rbWFwcyk7CisJbWFwX2dyb3Vwc19fZml4dXBfZW5kKHNlbGYpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCmluZGV4IDhhZGVkMjMuLjI4MGRhZGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaAorKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKQEAgLTgsNiArOCw4IEBACiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAjaW5jbHVkZSAiZXZlbnQuaCIKIAorI2RlZmluZSBERUJVR19DQUNIRV9ESVIgIi5kZWJ1ZyIKKwogI2lmZGVmIEhBVkVfQ1BMVVNfREVNQU5HTEUKIGV4dGVybiBjaGFyICpjcGx1c19kZW1hbmdsZShjb25zdCBjaGFyICosIGludCk7CiAKQEAgLTQ5LDYgKzUxLDggQEAKIAljaGFyCQluYW1lWzBdOwogfTsKIAordm9pZCBzeW1ib2xfX2RlbGV0ZShzdHJ1Y3Qgc3ltYm9sICpzZWxmKTsKKwogc3RydWN0IHN0cmxpc3Q7CiAKIHN0cnVjdCBzeW1ib2xfY29uZiB7CkBAIC01OCw3ICs2Miw4IEBACiAJCQlzb3J0X2J5X25hbWUsCiAJCQlzaG93X25yX3NhbXBsZXMsCiAJCQl1c2VfY2FsbGNoYWluLAotCQkJZXhjbHVkZV9vdGhlcjsKKwkJCWV4Y2x1ZGVfb3RoZXIsCisJCQlmdWxsX3BhdGhzOwogCWNvbnN0IGNoYXIJKnZtbGludXhfbmFtZSwKIAkJCSpmaWVsZF9zZXA7CiAJY2hhciAgICAgICAgICAgICpkc29fbGlzdF9zdHIsCkBAIC03Nyw2ICs4MiwxMiBAQAogCXJldHVybiAoKHZvaWQgKilzZWxmKSAtIHN5bWJvbF9jb25mLnByaXZfc2l6ZTsKIH0KIAorc3RydWN0IHJlZl9yZWxvY19zeW0geworCWNvbnN0IGNoYXIJKm5hbWU7CisJdTY0CQlhZGRyOworCXU2NAkJdW5yZWxvY2F0ZWRfYWRkcjsKK307CisKIHN0cnVjdCBhZGRyX2xvY2F0aW9uIHsKIAlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CiAJc3RydWN0IG1hcCAgICAqbWFwOwpAQCAtOTQsNiArMTA1LDcgQEAKIAl1OAkJIHNsZW5fY2FsY3VsYXRlZDoxOwogCXU4CQkgaGFzX2J1aWxkX2lkOjE7CiAJdTgJCSBrZXJuZWw6MTsKKwl1OAkJIGhpdDoxOwogCXVuc2lnbmVkIGNoYXIJIG9yaWdpbjsKIAl1OAkJIHNvcnRlZF9ieV9uYW1lOwogCXU4CQkgbG9hZGVkOwpAQCAtMTA1LDM3ICsxMTcsNTUgQEAKIH07CiAKIHN0cnVjdCBkc28gKmRzb19fbmV3KGNvbnN0IGNoYXIgKm5hbWUpOworc3RydWN0IGRzbyAqZHNvX19uZXdfa2VybmVsKGNvbnN0IGNoYXIgKm5hbWUpOwogdm9pZCBkc29fX2RlbGV0ZShzdHJ1Y3QgZHNvICpzZWxmKTsKIAogYm9vbCBkc29fX2xvYWRlZChjb25zdCBzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpOwogYm9vbCBkc29fX3NvcnRlZF9ieV9uYW1lKGNvbnN0IHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSk7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc29fX3NldF9sb2FkZWQoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKQoreworCXNlbGYtPmxvYWRlZCB8PSAoMSA8PCB0eXBlKTsKK30KKwogdm9pZCBkc29fX3NvcnRfYnlfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpOwogCi1zdHJ1Y3QgcGVyZl9zZXNzaW9uOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZHNvc19fdXNlciwgZHNvc19fa2VybmVsOwogCi1zdHJ1Y3QgZHNvICpkc29zX19maW5kbmV3KGNvbnN0IGNoYXIgKm5hbWUpOwotaW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCi0JICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CitzdHJ1Y3QgZHNvICpfX2Rzb3NfX2ZpbmRuZXcoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgY29uc3QgY2hhciAqbmFtZSk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRzbyAqZHNvc19fZmluZG5ldyhjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiBfX2Rzb3NfX2ZpbmRuZXcoJmRzb3NfX3VzZXIsIG5hbWUpOworfQorCitpbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CitpbnQgZHNvX19sb2FkX3ZtbGludXhfcGF0aChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCisJCQkgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKK2ludCBkc29fX2xvYWRfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBtYXAgKm1hcCwKKwkJICAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwogdm9pZCBkc29zX19mcHJpbnRmKEZJTEUgKmZwKTsKLXNpemVfdCBkc29zX19mcHJpbnRmX2J1aWxkaWQoRklMRSAqZnApOworc2l6ZV90IGRzb3NfX2ZwcmludGZfYnVpbGRpZChGSUxFICpmcCwgYm9vbCB3aXRoX2hpdHMpOwogCiBzaXplX3QgZHNvX19mcHJpbnRmX2J1aWxkaWQoc3RydWN0IGRzbyAqc2VsZiwgRklMRSAqZnApOwogc2l6ZV90IGRzb19fZnByaW50ZihzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsIEZJTEUgKmZwKTsKIGNoYXIgZHNvX19zeW10YWJfb3JpZ2luKGNvbnN0IHN0cnVjdCBkc28gKnNlbGYpOwordm9pZCBkc29fX3NldF9sb25nX25hbWUoc3RydWN0IGRzbyAqc2VsZiwgY2hhciAqbmFtZSk7CiB2b2lkIGRzb19fc2V0X2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYsIHZvaWQgKmJ1aWxkX2lkKTsKK3ZvaWQgZHNvX19yZWFkX3J1bm5pbmdfa2VybmVsX2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYpOwogc3RydWN0IHN5bWJvbCAqZHNvX19maW5kX3N5bWJvbChzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyKTsKIHN0cnVjdCBzeW1ib2wgKmRzb19fZmluZF9zeW1ib2xfYnlfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsCiAJCQkJCWNvbnN0IGNoYXIgKm5hbWUpOwogCiBpbnQgZmlsZW5hbWVfX3JlYWRfYnVpbGRfaWQoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmJmLCBzaXplX3Qgc2l6ZSk7CiBpbnQgc3lzZnNfX3JlYWRfYnVpbGRfaWQoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmJmLCBzaXplX3Qgc2l6ZSk7Ci1ib29sIGRzb3NfX3JlYWRfYnVpbGRfaWRzKHZvaWQpOwotaW50IGJ1aWxkX2lkX19zcHJpbnRmKHU4ICpzZWxmLCBpbnQgbGVuLCBjaGFyICpiZik7Citib29sIGRzb3NfX3JlYWRfYnVpbGRfaWRzKGJvb2wgd2l0aF9oaXRzKTsKK2ludCBidWlsZF9pZF9fc3ByaW50Zihjb25zdCB1OCAqc2VsZiwgaW50IGxlbiwgY2hhciAqYmYpOworaW50IGthbGxzeW1zX19wYXJzZShjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYXJnLAorCQkgICAgaW50ICgqcHJvY2Vzc19zeW1ib2wpKHZvaWQgKmFyZywgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJICBjaGFyIHR5cGUsIHU2NCBzdGFydCkpOwogCiBpbnQgc3ltYm9sX19pbml0KHZvaWQpOwotaW50IHBlcmZfc2Vzc2lvbl9fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpOworYm9vbCBzeW1ib2xfdHlwZV9faXNfYShjaGFyIHN5bWJvbF90eXBlLCBlbnVtIG1hcF90eXBlIG1hcF90eXBlKTsKIAotZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZHNvc19fdXNlciwgZHNvc19fa2VybmVsOwotZXh0ZXJuIHN0cnVjdCBkc28gKnZkc287CiAjZW5kaWYgLyogX19QRVJGX1NZTUJPTCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCmluZGV4IDRhMDhkY2YuLjIxYjkyMTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYworKysgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKQEAgLTMxLDEyICszMSw0MSBAQAogCXJldHVybiBzZWxmOwogfQogCitzdGF0aWMgdm9pZCBtYXBfZ3JvdXBzX19mbHVzaChzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZikKK3sKKwlpbnQgdHlwZTsKKworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBNQVBfX05SX1RZUEVTOyB0eXBlKyspIHsKKwkJc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmc2VsZi0+bWFwc1t0eXBlXTsKKwkJc3RydWN0IHJiX25vZGUgKm5leHQgPSByYl9maXJzdChyb290KTsKKworCQl3aGlsZSAobmV4dCkgeworCQkJc3RydWN0IG1hcCAqcG9zID0gcmJfZW50cnkobmV4dCwgc3RydWN0IG1hcCwgcmJfbm9kZSk7CisJCQluZXh0ID0gcmJfbmV4dCgmcG9zLT5yYl9ub2RlKTsKKwkJCXJiX2VyYXNlKCZwb3MtPnJiX25vZGUsIHJvb3QpOworCQkJLyoKKwkJCSAqIFdlIG1heSBoYXZlIHJlZmVyZW5jZXMgdG8gdGhpcyBtYXAsIGZvcgorCQkJICogaW5zdGFuY2UgaW4gc29tZSBoaXN0X2VudHJ5IGluc3RhbmNlcywgc28KKwkJCSAqIGp1c3QgbW92ZSB0aGVtIHRvIGEgc2VwYXJhdGUgbGlzdC4KKwkJCSAqLworCQkJbGlzdF9hZGRfdGFpbCgmcG9zLT5ub2RlLCAmc2VsZi0+cmVtb3ZlZF9tYXBzW3Bvcy0+dHlwZV0pOworCQl9CisJfQorfQorCiBpbnQgdGhyZWFkX19zZXRfY29tbShzdHJ1Y3QgdGhyZWFkICpzZWxmLCBjb25zdCBjaGFyICpjb21tKQogeworCWludCBlcnI7CisKIAlpZiAoc2VsZi0+Y29tbSkKIAkJZnJlZShzZWxmLT5jb21tKTsKIAlzZWxmLT5jb21tID0gc3RyZHVwKGNvbW0pOwotCXJldHVybiBzZWxmLT5jb21tID8gMCA6IC1FTk9NRU07CisJZXJyID0gc2VsZi0+Y29tbSA9PSBOVUxMID8gLUVOT01FTSA6IDA7CisJaWYgKCFlcnIpIHsKKwkJc2VsZi0+Y29tbV9zZXQgPSB0cnVlOworCQltYXBfZ3JvdXBzX19mbHVzaCgmc2VsZi0+bWcpOworCX0KKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgdGhyZWFkX19jb21tX2xlbihzdHJ1Y3QgdGhyZWFkICpzZWxmKQpAQCAtNTAsMTEgKzc5LDYgQEAKIAlyZXR1cm4gc2VsZi0+Y29tbV9sZW47CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICptYXBfdHlwZV9fbmFtZVtNQVBfX05SX1RZUEVTXSA9IHsKLQlbTUFQX19GVU5DVElPTl0gPSAiRnVuY3Rpb25zIiwKLQlbTUFQX19WQVJJQUJMRV0gPSAiVmFyaWFibGVzIiwKLX07Ci0KIHN0YXRpYyBzaXplX3QgX19tYXBfZ3JvdXBzX19mcHJpbnRmX21hcHMoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCiAJCQkJCSBlbnVtIG1hcF90eXBlIHR5cGUsIEZJTEUgKmZwKQogewpAQCAtMjU1LDExICsyNzksMTQgQEAKIHsKIAlpbnQgaTsKIAotCWlmIChzZWxmLT5jb21tKQotCQlmcmVlKHNlbGYtPmNvbW0pOwotCXNlbGYtPmNvbW0gPSBzdHJkdXAocGFyZW50LT5jb21tKTsKLQlpZiAoIXNlbGYtPmNvbW0pCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChwYXJlbnQtPmNvbW1fc2V0KSB7CisJCWlmIChzZWxmLT5jb21tKQorCQkJZnJlZShzZWxmLT5jb21tKTsKKwkJc2VsZi0+Y29tbSA9IHN0cmR1cChwYXJlbnQtPmNvbW0pOworCQlpZiAoIXNlbGYtPmNvbW0pCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJc2VsZi0+Y29tbV9zZXQgPSB0cnVlOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBNQVBfX05SX1RZUEVTOyArK2kpCiAJCWlmIChtYXBfZ3JvdXBzX19jbG9uZSgmc2VsZi0+bWcsICZwYXJlbnQtPm1nLCBpKSA8IDApCkBAIC0yODIsMTQgKzMwOSwxMyBAQAogfQogCiBzdHJ1Y3Qgc3ltYm9sICptYXBfZ3JvdXBzX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKLQkJCQkgICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQkgICAgICAgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKIAkJCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAlzdHJ1Y3QgbWFwICptYXAgPSBtYXBfZ3JvdXBzX19maW5kKHNlbGYsIHR5cGUsIGFkZHIpOwogCiAJaWYgKG1hcCAhPSBOVUxMKQotCQlyZXR1cm4gbWFwX19maW5kX3N5bWJvbChtYXAsIHNlc3Npb24sIG1hcC0+bWFwX2lwKG1hcCwgYWRkciksIGZpbHRlcik7CisJCXJldHVybiBtYXBfX2ZpbmRfc3ltYm9sKG1hcCwgbWFwLT5tYXBfaXAobWFwLCBhZGRyKSwgZmlsdGVyKTsKIAogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCmluZGV4IGMyMDZmNzIuLjBhMjhmMzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaAorKysgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKQEAgLTE1LDYgKzE1LDcgQEAKIAlzdHJ1Y3QgbWFwX2dyb3VwcwltZzsKIAlwaWRfdAkJCXBpZDsKIAljaGFyCQkJc2hvcnRuYW1lWzNdOworCWJvb2wJCQljb21tX3NldDsKIAljaGFyCQkJKmNvbW07CiAJaW50CQkJY29tbV9sZW47CiB9OwpAQCAtNDgsMjMgKzQ5LDM2IEBACiAJcmV0dXJuIHNlbGYgPyBtYXBfZ3JvdXBzX19maW5kKCZzZWxmLT5tZywgdHlwZSwgYWRkcikgOiBOVUxMOwogfQogCit2b2lkIHRocmVhZF9fZmluZF9hZGRyX21hcChzdHJ1Y3QgdGhyZWFkICpzZWxmLAorCQkJICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgdTggY3B1bW9kZSwKKwkJCSAgIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCisJCQkgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwpOworCiB2b2lkIHRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnNlbGYsCiAJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgdTggY3B1bW9kZSwKIAkJCQllbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAogCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwKIAkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKIHN0cnVjdCBzeW1ib2wgKm1hcF9ncm91cHNfX2ZpbmRfc3ltYm9sKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAotCQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkJCSAgICAgICBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAogCQkJCSAgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3ltYm9sICoKLW1hcF9ncm91cHNfX2ZpbmRfZnVuY3Rpb24oc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCi0JCQkgIHU2NCBhZGRyLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3ltYm9sICptYXBfZ3JvdXBzX19maW5kX2Z1bmN0aW9uKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAorCQkJCQkJICAgICAgIHU2NCBhZGRyLAorCQkJCQkJICAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7Ci0JcmV0dXJuIG1hcF9ncm91cHNfX2ZpbmRfc3ltYm9sKHNlbGYsIHNlc3Npb24sIE1BUF9fRlVOQ1RJT04sIGFkZHIsIGZpbHRlcik7CisJcmV0dXJuIG1hcF9ncm91cHNfX2ZpbmRfc3ltYm9sKHNlbGYsIE1BUF9fRlVOQ1RJT04sIGFkZHIsIGZpbHRlcik7CiB9CiAKIHN0cnVjdCBtYXAgKm1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZShzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKIAkJCQkgICAgIGVudW0gbWFwX3R5cGUgdHlwZSwgY29uc3QgY2hhciAqbmFtZSk7CisKK2ludCBfX21hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKKwkJCQkgICAgIHN0cnVjdCBtYXAgKnZtbGludXhfbWFwc1tNQVBfX05SX1RZUEVTXSwKKwkJCQkgICAgIHN0cnVjdCBkc28gKmtlcm5lbCk7CitpbnQgbWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAorCQkJCSAgIHN0cnVjdCBtYXAgKnZtbGludXhfbWFwc1tNQVBfX05SX1RZUEVTXSk7CisKK3N0cnVjdCBtYXAgKm1hcF9ncm91cHNfX25ld19tb2R1bGUoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsIHU2NCBzdGFydCwKKwkJCQkgICBjb25zdCBjaGFyICpmaWxlbmFtZSk7CiAjZW5kaWYJLyogX19QRVJGX1RIUkVBRF9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtaW5mby5jIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LWluZm8uYwppbmRleCBjYWNlMzU1Li41ZWE4OTczIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtaW5mby5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1pbmZvLmMKQEAgLTIwLDYgKzIwLDcgQEAKICAqLwogI2RlZmluZSBfR05VX1NPVVJDRQogI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPG1udGVudC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0zNyw2ICszOCw3IEBACiAKICNpbmNsdWRlICIuLi9wZXJmLmgiCiAjaW5jbHVkZSAidHJhY2UtZXZlbnQuaCIKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCiAKICNkZWZpbmUgVkVSU0lPTiAiMC41IgogCkBAIC0xMDEsMzIgKzEwMywxMiBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqZmluZF9kZWJ1Z2ZzKHZvaWQpCiB7Ci0Jc3RhdGljIGNoYXIgZGVidWdmc1tNQVhfUEFUSCsxXTsKLQlzdGF0aWMgaW50IGRlYnVnZnNfZm91bmQ7Ci0JY2hhciB0eXBlWzEwMF07Ci0JRklMRSAqZnA7CisJY29uc3QgY2hhciAqcGF0aCA9IGRlYnVnZnNfbW91bnQoTlVMTCk7CiAKLQlpZiAoZGVidWdmc19mb3VuZCkKLQkJcmV0dXJuIGRlYnVnZnM7CisJaWYgKCFwYXRoKQorCQlkaWUoIllvdXIga2VybmVsIG5vdCBzdXBwb3J0IGRlYnVnZnMgZmlsZXN5c3RlbSIpOwogCi0JaWYgKChmcCA9IGZvcGVuKCIvcHJvYy9tb3VudHMiLCJyIikpID09IE5VTEwpCi0JCWRpZSgiQ2FuJ3Qgb3BlbiAvcHJvYy9tb3VudHMgZm9yIHJlYWQiKTsKLQotCXdoaWxlIChmc2NhbmYoZnAsICIlKnMgJSIKLQkJICAgICAgU1RSKE1BWF9QQVRIKQotCQkgICAgICAicyAlOTlzICUqcyAlKmQgJSpkXG4iLAotCQkgICAgICBkZWJ1Z2ZzLCB0eXBlKSA9PSAyKSB7Ci0JCWlmIChzdHJjbXAodHlwZSwgImRlYnVnZnMiKSA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCWZjbG9zZShmcCk7Ci0KLQlpZiAoc3RyY21wKHR5cGUsICJkZWJ1Z2ZzIikgIT0gMCkKLQkJZGllKCJkZWJ1Z2ZzIG5vdCBtb3VudGVkLCBwbGVhc2UgbW91bnQiKTsKLQotCWRlYnVnZnNfZm91bmQgPSAxOwotCi0JcmV0dXJuIGRlYnVnZnM7CisJcmV0dXJuIHBhdGg7CiB9CiAKIC8qCkBAIC0yNzEsNiArMjUzLDggQEAKIAl3cml0ZV9vcl9kaWUoImhlYWRlcl9wYWdlIiwgMTIpOwogCXdyaXRlX29yX2RpZSgmc2l6ZSwgOCk7CiAJY2hlY2tfc2l6ZSA9IGNvcHlfZmlsZV9mZChmZCk7CisJY2xvc2UoZmQpOworCiAJaWYgKHNpemUgIT0gY2hlY2tfc2l6ZSkKIAkJZGllKCJ3cm9uZyBzaXplIGZvciAnJXMnIHNpemU9JWxsZCByZWFkPSVsbGQiLAogCQkgICAgcGF0aCwgc2l6ZSwgY2hlY2tfc2l6ZSk7CkBAIC0yODksNiArMjczLDcgQEAKIAlpZiAoc2l6ZSAhPSBjaGVja19zaXplKQogCQlkaWUoIndyb25nIHNpemUgZm9yICclcyciLCBwYXRoKTsKIAlwdXRfdHJhY2luZ19maWxlKHBhdGgpOworCWNsb3NlKGZkKTsKIH0KIAogc3RhdGljIGJvb2wgbmFtZV9pbl90cF9saXN0KGNoYXIgKnN5cywgc3RydWN0IHRyYWNlcG9pbnRfcGF0aCAqdHBzKQpAQCAtMzE3LDcgKzMwMiw4IEBACiAJCWRpZSgiY2FuJ3QgcmVhZCBkaXJlY3RvcnkgJyVzJyIsIHN5cyk7CiAKIAl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKGRpcikpKSB7Ci0JCWlmIChzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpID09IDAgfHwKKwkJaWYgKGRlbnQtPmRfdHlwZSAhPSBEVF9ESVIgfHwKKwkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgPT0gMCB8fAogCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4uIikgPT0gMCB8fAogCQkgICAgIW5hbWVfaW5fdHBfbGlzdChkZW50LT5kX25hbWUsIHRwcykpCiAJCQljb250aW51ZTsKQEAgLTMzNCw3ICszMjAsOCBAQAogCiAJcmV3aW5kZGlyKGRpcik7CiAJd2hpbGUgKChkZW50ID0gcmVhZGRpcihkaXIpKSkgewotCQlpZiAoc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8CisJCWlmIChkZW50LT5kX3R5cGUgIT0gRFRfRElSIHx8CisJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpID09IDAgfHwKIAkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICIuLiIpID09IDAgfHwKIAkJICAgICFuYW1lX2luX3RwX2xpc3QoZGVudC0+ZF9uYW1lLCB0cHMpKQogCQkJY29udGludWU7CkBAIC0zNTMsNiArMzQwLDcgQEAKIAogCQlmcmVlKGZvcm1hdCk7CiAJfQorCWNsb3NlZGlyKGRpcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJlYWRfZnRyYWNlX2ZpbGVzKHN0cnVjdCB0cmFjZXBvaW50X3BhdGggKnRwcykKQEAgLTM5NCwyNiArMzgyLDIxIEBACiAJCWRpZSgiY2FuJ3QgcmVhZCBkaXJlY3RvcnkgJyVzJyIsIHBhdGgpOwogCiAJd2hpbGUgKChkZW50ID0gcmVhZGRpcihkaXIpKSkgewotCQlpZiAoc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8CisJCWlmIChkZW50LT5kX3R5cGUgIT0gRFRfRElSIHx8CisJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpID09IDAgfHwKIAkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICIuLiIpID09IDAgfHwKIAkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICJmdHJhY2UiKSA9PSAwIHx8CiAJCSAgICAhc3lzdGVtX2luX3RwX2xpc3QoZGVudC0+ZF9uYW1lLCB0cHMpKQogCQkJY29udGludWU7Ci0JCXN5cyA9IG1hbGxvY19vcl9kaWUoc3RybGVuKHBhdGgpICsgc3RybGVuKGRlbnQtPmRfbmFtZSkgKyAyKTsKLQkJc3ByaW50ZihzeXMsICIlcy8lcyIsIHBhdGgsIGRlbnQtPmRfbmFtZSk7Ci0JCXJldCA9IHN0YXQoc3lzLCAmc3QpOwotCQlmcmVlKHN5cyk7Ci0JCWlmIChyZXQgPCAwKQotCQkJY29udGludWU7Ci0JCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKQotCQkJY291bnQrKzsKKwkJY291bnQrKzsKIAl9CiAKIAl3cml0ZV9vcl9kaWUoJmNvdW50LCA0KTsKIAogCXJld2luZGRpcihkaXIpOwogCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZGlyKSkpIHsKLQkJaWYgKHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgPT0gMCB8fAorCQlpZiAoZGVudC0+ZF90eXBlICE9IERUX0RJUiB8fAorCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8CiAJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLi4iKSA9PSAwIHx8CiAJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiZnRyYWNlIikgPT0gMCB8fAogCQkgICAgIXN5c3RlbV9pbl90cF9saXN0KGRlbnQtPmRfbmFtZSwgdHBzKSkKQEAgLTQyMiwxNCArNDA1LDEzIEBACiAJCXNwcmludGYoc3lzLCAiJXMvJXMiLCBwYXRoLCBkZW50LT5kX25hbWUpOwogCQlyZXQgPSBzdGF0KHN5cywgJnN0KTsKIAkJaWYgKHJldCA+PSAwKSB7Ci0JCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgewotCQkJCXdyaXRlX29yX2RpZShkZW50LT5kX25hbWUsIHN0cmxlbihkZW50LT5kX25hbWUpICsgMSk7Ci0JCQkJY29weV9ldmVudF9zeXN0ZW0oc3lzLCB0cHMpOwotCQkJfQorCQkJd3JpdGVfb3JfZGllKGRlbnQtPmRfbmFtZSwgc3RybGVuKGRlbnQtPmRfbmFtZSkgKyAxKTsKKwkJCWNvcHlfZXZlbnRfc3lzdGVtKHN5cywgdHBzKTsKIAkJfQogCQlmcmVlKHN5cyk7CiAJfQogCisJY2xvc2VkaXIoZGlyKTsKIAlwdXRfdHJhY2luZ19maWxlKHBhdGgpOwogfQogCkBAIC01MzMsNyArNTE1LDcgQEAKIAl3cml0ZV9vcl9kaWUoYnVmLCAxKTsKIAogCS8qIHNhdmUgcGFnZV9zaXplICovCi0JcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKKwlwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CiAJd3JpdGVfb3JfZGllKCZwYWdlX3NpemUsIDQpOwogCiAJcmVhZF9oZWFkZXJfZmlsZXMoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKaW5kZXggYzVjMzJiZS4uOWIzYzIwZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKQEAgLTE5MjUsNiArMTkyNSwxNSBAQAogCWlmICghZmllbGQpCiAJCXJldHVybiBOVUxMOwogCisJaWYgKGZpZWxkLT5mbGFncyAmIEZJRUxEX0lTX1NUUklORykgeworCQlpbnQgb2Zmc2V0OworCisJCW9mZnNldCA9ICooaW50ICopKGRhdGEgKyBmaWVsZC0+b2Zmc2V0KTsKKwkJb2Zmc2V0ICY9IDB4ZmZmZjsKKworCQlyZXR1cm4gZGF0YSArIG9mZnNldDsKKwl9CisKIAlyZXR1cm4gZGF0YSArIGZpZWxkLT5vZmZzZXQ7CiB9CiAKQEAgLTMyNzcsMyArMzI4NiwxOCBAQAogCWNwdXMgPSBucl9jcHVzOwogCWxvbmdfc2l6ZSA9IGxvbmdfc3o7CiB9CisKK2ludCBjb21tb25fcGMoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KQoreworCXJldHVybiBwYXJzZV9jb21tb25fcGMoY29udGV4dC0+ZXZlbnRfZGF0YSk7Cit9CisKK2ludCBjb21tb25fZmxhZ3Moc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KQoreworCXJldHVybiBwYXJzZV9jb21tb25fZmxhZ3MoY29udGV4dC0+ZXZlbnRfZGF0YSk7Cit9CisKK2ludCBjb21tb25fbG9ja19kZXB0aChzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpCit7CisJcmV0dXJuIHBhcnNlX2NvbW1vbl9sb2NrX2RlcHRoKGNvbnRleHQtPmV2ZW50X2RhdGEpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuaCBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wZXJsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4OGZiMjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLSNpZm5kZWYgX19QRVJGX1RSQUNFX0VWRU5UX1BFUkxfSAotI2RlZmluZSBfX1BFUkZfVFJBQ0VfRVZFTlRfUEVSTF9ICi0jaWZkZWYgTk9fTElCUEVSTAotdHlwZWRlZiBpbnQgSU5URVJQOwotI2RlZmluZSBkU1AKLSNkZWZpbmUgRU5URVIKLSNkZWZpbmUgU0FWRVRNUFMKLSNkZWZpbmUgUFVUQkFDSwotI2RlZmluZSBTUEFHQUlOCi0jZGVmaW5lIEZSRUVUTVBTCi0jZGVmaW5lIExFQVZFCi0jZGVmaW5lIFNQCi0jZGVmaW5lIEVSUlNWCi0jZGVmaW5lIEdfU0NBTEFSCQkoMCkKLSNkZWZpbmUgR19ESVNDQVJECQkoMCkKLSNkZWZpbmUgR19OT0FSR1MJCSgwKQotI2RlZmluZSBQVVNITUFSSyhhKQotI2RlZmluZSBTdlRSVUUoYSkJCSgwKQotI2RlZmluZSBYUFVTSHMocykKLSNkZWZpbmUgc3ZfMm1vcnRhbChhKQotI2RlZmluZSBuZXdTVnB2KGEsYikKLSNkZWZpbmUgbmV3U1Z1dihhKQotI2RlZmluZSBuZXdTVml2KGEpCi0jZGVmaW5lIGdldF9jdihhLGIpCQkoMCkKLSNkZWZpbmUgY2FsbF9wdihhLGIpCQkoMCkKLSNkZWZpbmUgcGVybF9hbGxvYygpCQkoMCkKLSNkZWZpbmUgcGVybF9jb25zdHJ1Y3QoYSkJKDApCi0jZGVmaW5lIHBlcmxfcGFyc2UoYSxiLGMsZCxlKQkoMCkKLSNkZWZpbmUgcGVybF9ydW4oYSkJCSgwKQotI2RlZmluZSBwZXJsX2Rlc3RydWN0KGEpCSgwKQotI2RlZmluZSBwZXJsX2ZyZWUoYSkJCSgwKQotI2RlZmluZSBwVEhYCQkJdm9pZAotI2RlZmluZSBDVgkJCXZvaWQKLSNkZWZpbmUgZFhTVUJfU1lTCi0jZGVmaW5lIHBUSFhfCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV3WFMoY29uc3QgY2hhciAqYSwgdm9pZCAqYiwgY29uc3QgY2hhciAqYykge30KLXN0YXRpYyB2b2lkIGJvb3RfUGVyZl9fVHJhY2VfX0NvbnRleHQocFRIWF8gQ1YgKmN2KSB7fQotc3RhdGljIHZvaWQgYm9vdF9EeW5hTG9hZGVyKHBUSFhfIENWICpjdikge30KLSNlbHNlCi0jaW5jbHVkZSA8RVhURVJOLmg+Ci0jaW5jbHVkZSA8cGVybC5oPgotdm9pZCBib290X1BlcmZfX1RyYWNlX19Db250ZXh0KHBUSFhfIENWICpjdik7Ci12b2lkIGJvb3RfRHluYUxvYWRlcihwVEhYXyBDViAqY3YpOwotdHlwZWRlZiBQZXJsSW50ZXJwcmV0ZXIgKiBJTlRFUlA7Ci0jZW5kaWYKLQotc3RydWN0IHNjcmlwdGluZ19jb250ZXh0IHsKLQl2b2lkICpldmVudF9kYXRhOwotfTsKLQotaW50IGNvbW1vbl9wYyhzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpOwotaW50IGNvbW1vbl9mbGFncyhzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpOwotaW50IGNvbW1vbl9sb2NrX2RlcHRoKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCk7Ci0KLSNlbmRpZiAvKiBfX1BFUkZfVFJBQ0VfRVZFTlRfUEVSTF9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcmVhZC5jIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXJlYWQuYwppbmRleCAxNzQ0NDIyLi43Y2QxMTkzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcmVhZC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1yZWFkLmMKQEAgLTE4LDcgKzE4LDcgQEAKICAqCiAgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogICovCi0jZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKIAogI2luY2x1ZGUgPGRpcmVudC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC04Myw3ICs4Myw3IEBACiAJY2hhciAqc3RyID0gTlVMTDsKIAlpbnQgc2l6ZSA9IDA7CiAJaW50IGk7Ci0JaW50IHI7CisJb2ZmX3QgcjsKIAogCWZvciAoOzspIHsKIAkJciA9IHJlYWQoaW5wdXRfZmQsIGJ1ZiwgQlVGU0laKTsKQEAgLTExOCw3ICsxMTgsNyBAQAogCiAJLyogbW92ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZyAqLwogCXIgPSBsc2VlayhpbnB1dF9mZCwgLShyIC0gaSksIFNFRUtfQ1VSKTsKLQlpZiAociA8IDApCisJaWYgKHIgPT0gKG9mZl90KS0xKQogCQlkaWUoImxzZWVrIik7CiAKIAlpZiAoc3RyKSB7CkBAIC0yODIsOCArMjgyLDggQEAKIAogc3RhdGljIHZvaWQgZ2V0X25leHRfcGFnZShpbnQgY3B1KQogewotCW9mZjY0X3Qgc2F2ZV9zZWVrOwotCW9mZjY0X3QgcmV0OworCW9mZl90IHNhdmVfc2VlazsKKwlvZmZfdCByZXQ7CiAKIAlpZiAoIWNwdV9kYXRhW2NwdV0ucGFnZSkKIAkJcmV0dXJuOwpAQCAtMjk4LDE3ICsyOTgsMTcgQEAKIAkJdXBkYXRlX2NwdV9kYXRhX2luZGV4KGNwdSk7CiAKIAkJLyogb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUgbWF5IGV4cGVjdCB0aGUgcG9pbnRlciB0byBub3QgbW92ZSAqLwotCQlzYXZlX3NlZWsgPSBsc2VlazY0KGlucHV0X2ZkLCAwLCBTRUVLX0NVUik7CisJCXNhdmVfc2VlayA9IGxzZWVrKGlucHV0X2ZkLCAwLCBTRUVLX0NVUik7CiAKLQkJcmV0ID0gbHNlZWs2NChpbnB1dF9mZCwgY3B1X2RhdGFbY3B1XS5vZmZzZXQsIFNFRUtfU0VUKTsKLQkJaWYgKHJldCA8IDApCisJCXJldCA9IGxzZWVrKGlucHV0X2ZkLCBjcHVfZGF0YVtjcHVdLm9mZnNldCwgU0VFS19TRVQpOworCQlpZiAocmV0ID09IChvZmZfdCktMSkKIAkJCWRpZSgiZmFpbGVkIHRvIGxzZWVrIik7CiAJCXJldCA9IHJlYWQoaW5wdXRfZmQsIGNwdV9kYXRhW2NwdV0ucGFnZSwgcGFnZV9zaXplKTsKIAkJaWYgKHJldCA8IDApCiAJCQlkaWUoImZhaWxlZCB0byByZWFkIHBhZ2UiKTsKIAogCQkvKiByZXNldCB0aGUgZmlsZSBwb2ludGVyIGJhY2sgKi8KLQkJbHNlZWs2NChpbnB1dF9mZCwgc2F2ZV9zZWVrLCBTRUVLX1NFVCk7CisJCWxzZWVrKGlucHV0X2ZkLCBzYXZlX3NlZWssIFNFRUtfU0VUKTsKIAogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXNjcmlwdGluZy5jIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXNjcmlwdGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYTk4M2EKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtc2NyaXB0aW5nLmMKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiB0cmFjZS1ldmVudC1zY3JpcHRpbmcuICBTY3JpcHRpbmcgZW5naW5lIGNvbW1vbiBhbmQgaW5pdGlhbGl6YXRpb24gY29kZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICIuLi9wZXJmLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgInRyYWNlLWV2ZW50LmgiCisKK3N0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqc2NyaXB0aW5nX2NvbnRleHQ7CisKK3N0YXRpYyBpbnQgc3RvcF9zY3JpcHRfdW5zdXBwb3J0ZWQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19ldmVudF91bnN1cHBvcnRlZChpbnQgY3B1IF9fdW51c2VkLAorCQkJCSAgICAgIHZvaWQgKmRhdGEgX191bnVzZWQsCisJCQkJICAgICAgaW50IHNpemUgX191bnVzZWQsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG5zZWNzIF9fdW51c2VkLAorCQkJCSAgICAgIGNoYXIgKmNvbW0gX191bnVzZWQpCit7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3B5dGhvbl91bnN1cHBvcnRlZF9tc2codm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlB5dGhvbiBzY3JpcHRpbmcgbm90IHN1cHBvcnRlZC4iCisJCSIgIEluc3RhbGwgbGlicHl0aG9uIGFuZCByZWJ1aWxkIHBlcmYgdG8gZW5hYmxlIGl0LlxuIgorCQkiRm9yIGV4YW1wbGU6XG4gICMgYXB0LWdldCBpbnN0YWxsIHB5dGhvbi1kZXYgKHVidW50dSkiCisJCSJcbiAgIyB5dW0gaW5zdGFsbCBweXRob24tZGV2ZWwgKEZlZG9yYSkiCisJCSJcbiAgZXRjLlxuIik7Cit9CisKK3N0YXRpYyBpbnQgcHl0aG9uX3N0YXJ0X3NjcmlwdF91bnN1cHBvcnRlZChjb25zdCBjaGFyICpzY3JpcHQgX191bnVzZWQsCisJCQkJCSAgIGludCBhcmdjIF9fdW51c2VkLAorCQkJCQkgICBjb25zdCBjaGFyICoqYXJndiBfX3VudXNlZCkKK3sKKwlwcmludF9weXRob25fdW5zdXBwb3J0ZWRfbXNnKCk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcHl0aG9uX2dlbmVyYXRlX3NjcmlwdF91bnN1cHBvcnRlZChjb25zdCBjaGFyICpvdXRmaWxlIF9fdW51c2VkKQoreworCXByaW50X3B5dGhvbl91bnN1cHBvcnRlZF9tc2coKTsKKworCXJldHVybiAtMTsKK30KKworc3RydWN0IHNjcmlwdGluZ19vcHMgcHl0aG9uX3NjcmlwdGluZ191bnN1cHBvcnRlZF9vcHMgPSB7CisJLm5hbWUgPSAiUHl0aG9uIiwKKwkuc3RhcnRfc2NyaXB0ID0gcHl0aG9uX3N0YXJ0X3NjcmlwdF91bnN1cHBvcnRlZCwKKwkuc3RvcF9zY3JpcHQgPSBzdG9wX3NjcmlwdF91bnN1cHBvcnRlZCwKKwkucHJvY2Vzc19ldmVudCA9IHByb2Nlc3NfZXZlbnRfdW5zdXBwb3J0ZWQsCisJLmdlbmVyYXRlX3NjcmlwdCA9IHB5dGhvbl9nZW5lcmF0ZV9zY3JpcHRfdW5zdXBwb3J0ZWQsCit9OworCitzdGF0aWMgdm9pZCByZWdpc3Rlcl9weXRob25fc2NyaXB0aW5nKHN0cnVjdCBzY3JpcHRpbmdfb3BzICpzY3JpcHRpbmdfb3BzKQoreworCWludCBlcnI7CisJZXJyID0gc2NyaXB0X3NwZWNfcmVnaXN0ZXIoIlB5dGhvbiIsIHNjcmlwdGluZ19vcHMpOworCWlmIChlcnIpCisJCWRpZSgiZXJyb3IgcmVnaXN0ZXJpbmcgUHl0aG9uIHNjcmlwdCBleHRlbnNpb24iKTsKKworCWVyciA9IHNjcmlwdF9zcGVjX3JlZ2lzdGVyKCJweSIsIHNjcmlwdGluZ19vcHMpOworCWlmIChlcnIpCisJCWRpZSgiZXJyb3IgcmVnaXN0ZXJpbmcgcHkgc2NyaXB0IGV4dGVuc2lvbiIpOworCisJc2NyaXB0aW5nX2NvbnRleHQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCkpOworfQorCisjaWZkZWYgTk9fTElCUFlUSE9OCit2b2lkIHNldHVwX3B5dGhvbl9zY3JpcHRpbmcodm9pZCkKK3sKKwlyZWdpc3Rlcl9weXRob25fc2NyaXB0aW5nKCZweXRob25fc2NyaXB0aW5nX3Vuc3VwcG9ydGVkX29wcyk7Cit9CisjZWxzZQorc3RydWN0IHNjcmlwdGluZ19vcHMgcHl0aG9uX3NjcmlwdGluZ19vcHM7CisKK3ZvaWQgc2V0dXBfcHl0aG9uX3NjcmlwdGluZyh2b2lkKQoreworCXJlZ2lzdGVyX3B5dGhvbl9zY3JpcHRpbmcoJnB5dGhvbl9zY3JpcHRpbmdfb3BzKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBwcmludF9wZXJsX3Vuc3VwcG9ydGVkX21zZyh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLCAiUGVybCBzY3JpcHRpbmcgbm90IHN1cHBvcnRlZC4iCisJCSIgIEluc3RhbGwgbGlicGVybCBhbmQgcmVidWlsZCBwZXJmIHRvIGVuYWJsZSBpdC5cbiIKKwkJIkZvciBleGFtcGxlOlxuICAjIGFwdC1nZXQgaW5zdGFsbCBsaWJwZXJsLWRldiAodWJ1bnR1KSIKKwkJIlxuICAjIHl1bSBpbnN0YWxsICdwZXJsKEV4dFV0aWxzOjpFbWJlZCknIChGZWRvcmEpIgorCQkiXG4gIGV0Yy5cbiIpOworfQorCitzdGF0aWMgaW50IHBlcmxfc3RhcnRfc2NyaXB0X3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKnNjcmlwdCBfX3VudXNlZCwKKwkJCQkJIGludCBhcmdjIF9fdW51c2VkLAorCQkJCQkgY29uc3QgY2hhciAqKmFyZ3YgX191bnVzZWQpCit7CisJcHJpbnRfcGVybF91bnN1cHBvcnRlZF9tc2coKTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBwZXJsX2dlbmVyYXRlX3NjcmlwdF91bnN1cHBvcnRlZChjb25zdCBjaGFyICpvdXRmaWxlIF9fdW51c2VkKQoreworCXByaW50X3BlcmxfdW5zdXBwb3J0ZWRfbXNnKCk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0cnVjdCBzY3JpcHRpbmdfb3BzIHBlcmxfc2NyaXB0aW5nX3Vuc3VwcG9ydGVkX29wcyA9IHsKKwkubmFtZSA9ICJQZXJsIiwKKwkuc3RhcnRfc2NyaXB0ID0gcGVybF9zdGFydF9zY3JpcHRfdW5zdXBwb3J0ZWQsCisJLnN0b3Bfc2NyaXB0ID0gc3RvcF9zY3JpcHRfdW5zdXBwb3J0ZWQsCisJLnByb2Nlc3NfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3Vuc3VwcG9ydGVkLAorCS5nZW5lcmF0ZV9zY3JpcHQgPSBwZXJsX2dlbmVyYXRlX3NjcmlwdF91bnN1cHBvcnRlZCwKK307CisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX3Blcmxfc2NyaXB0aW5nKHN0cnVjdCBzY3JpcHRpbmdfb3BzICpzY3JpcHRpbmdfb3BzKQoreworCWludCBlcnI7CisJZXJyID0gc2NyaXB0X3NwZWNfcmVnaXN0ZXIoIlBlcmwiLCBzY3JpcHRpbmdfb3BzKTsKKwlpZiAoZXJyKQorCQlkaWUoImVycm9yIHJlZ2lzdGVyaW5nIFBlcmwgc2NyaXB0IGV4dGVuc2lvbiIpOworCisJZXJyID0gc2NyaXB0X3NwZWNfcmVnaXN0ZXIoInBsIiwgc2NyaXB0aW5nX29wcyk7CisJaWYgKGVycikKKwkJZGllKCJlcnJvciByZWdpc3RlcmluZyBwbCBzY3JpcHQgZXh0ZW5zaW9uIik7CisKKwlzY3JpcHRpbmdfY29udGV4dCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0KSk7Cit9CisKKyNpZmRlZiBOT19MSUJQRVJMCit2b2lkIHNldHVwX3Blcmxfc2NyaXB0aW5nKHZvaWQpCit7CisJcmVnaXN0ZXJfcGVybF9zY3JpcHRpbmcoJnBlcmxfc2NyaXB0aW5nX3Vuc3VwcG9ydGVkX29wcyk7Cit9CisjZWxzZQorc3RydWN0IHNjcmlwdGluZ19vcHMgcGVybF9zY3JpcHRpbmdfb3BzOworCit2b2lkIHNldHVwX3Blcmxfc2NyaXB0aW5nKHZvaWQpCit7CisJcmVnaXN0ZXJfcGVybF9zY3JpcHRpbmcoJnBlcmxfc2NyaXB0aW5nX29wcyk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LmgKaW5kZXggNmFkNDA1Ni4uYzMyNjliOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LmgKQEAgLTI3OSw3ICsyNzksMTUgQEAKIAogaW50IHNjcmlwdF9zcGVjX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnNwZWMsIHN0cnVjdCBzY3JpcHRpbmdfb3BzICpvcHMpOwogCi1leHRlcm4gc3RydWN0IHNjcmlwdGluZ19vcHMgcGVybF9zY3JpcHRpbmdfb3BzOwogdm9pZCBzZXR1cF9wZXJsX3NjcmlwdGluZyh2b2lkKTsKK3ZvaWQgc2V0dXBfcHl0aG9uX3NjcmlwdGluZyh2b2lkKTsKKworc3RydWN0IHNjcmlwdGluZ19jb250ZXh0IHsKKwl2b2lkICpldmVudF9kYXRhOworfTsKKworaW50IGNvbW1vbl9wYyhzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpOworaW50IGNvbW1vbl9mbGFncyhzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpOworaW50IGNvbW1vbl9sb2NrX2RlcHRoKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCk7CiAKICNlbmRpZiAvKiBfX1BFUkZfVFJBQ0VfRVZFTlRTX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmMgYi90b29scy9wZXJmL3V0aWwvdXRpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5Yjg5MGYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvdXRpbC5jCkBAIC0wLDAgKzEsOTQgQEAKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworaW50IG1rZGlyX3AoY2hhciAqcGF0aCwgbW9kZV90IG1vZGUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IGVycjsKKwljaGFyICpkID0gcGF0aDsKKworCWlmICgqZCAhPSAnLycpCisJCXJldHVybiAtMTsKKworCWlmIChzdGF0KHBhdGgsICZzdCkgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKisrZCA9PSAnLycpOworCisJd2hpbGUgKChkID0gc3RyY2hyKGQsICcvJykpKSB7CisJCSpkID0gJ1wwJzsKKwkJZXJyID0gc3RhdChwYXRoLCAmc3QpICYmIG1rZGlyKHBhdGgsIG1vZGUpOworCQkqZCsrID0gJy8nOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIC0xOworCQl3aGlsZSAoKmQgPT0gJy8nKQorCQkJKytkOworCX0KKwlyZXR1cm4gKHN0YXQocGF0aCwgJnN0KSAmJiBta2RpcihwYXRoLCBtb2RlKSkgPyAtMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgc2xvd19jb3B5ZmlsZShjb25zdCBjaGFyICpmcm9tLCBjb25zdCBjaGFyICp0bykKK3sKKwlpbnQgZXJyID0gMDsKKwljaGFyICpsaW5lID0gTlVMTDsKKwlzaXplX3QgbjsKKwlGSUxFICpmcm9tX2ZwID0gZm9wZW4oZnJvbSwgInIiKSwgKnRvX2ZwOworCisJaWYgKGZyb21fZnAgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwl0b19mcCA9IGZvcGVuKHRvLCAidyIpOworCWlmICh0b19mcCA9PSBOVUxMKQorCQlnb3RvIG91dF9mY2xvc2VfZnJvbTsKKworCXdoaWxlIChnZXRsaW5lKCZsaW5lLCAmbiwgZnJvbV9mcCkgPiAwKQorCQlpZiAoZnB1dHMobGluZSwgdG9fZnApID09IEVPRikKKwkJCWdvdG8gb3V0X2ZjbG9zZV90bzsKKwllcnIgPSAwOworb3V0X2ZjbG9zZV90bzoKKwlmY2xvc2UodG9fZnApOworCWZyZWUobGluZSk7CitvdXRfZmNsb3NlX2Zyb206CisJZmNsb3NlKGZyb21fZnApOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK2ludCBjb3B5ZmlsZShjb25zdCBjaGFyICpmcm9tLCBjb25zdCBjaGFyICp0bykKK3sKKwlpbnQgZnJvbWZkLCB0b2ZkOworCXN0cnVjdCBzdGF0IHN0OworCXZvaWQgKmFkZHI7CisJaW50IGVyciA9IC0xOworCisJaWYgKHN0YXQoZnJvbSwgJnN0KSkKKwkJZ290byBvdXQ7CisKKwlpZiAoc3Quc3Rfc2l6ZSA9PSAwKSAvKiAvcHJvYz8gZG8gaXQgc2xvd2x5Li4uICovCisJCXJldHVybiBzbG93X2NvcHlmaWxlKGZyb20sIHRvKTsKKworCWZyb21mZCA9IG9wZW4oZnJvbSwgT19SRE9OTFkpOworCWlmIChmcm9tZmQgPCAwKQorCQlnb3RvIG91dDsKKworCXRvZmQgPSBjcmVhdCh0bywgMDc1NSk7CisJaWYgKHRvZmQgPCAwKQorCQlnb3RvIG91dF9jbG9zZV9mcm9tOworCisJYWRkciA9IG1tYXAoTlVMTCwgc3Quc3Rfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZnJvbWZkLCAwKTsKKwlpZiAoYWRkciA9PSBNQVBfRkFJTEVEKQorCQlnb3RvIG91dF9jbG9zZV90bzsKKworCWlmICh3cml0ZSh0b2ZkLCBhZGRyLCBzdC5zdF9zaXplKSA9PSBzdC5zdF9zaXplKQorCQllcnIgPSAwOworCisJbXVubWFwKGFkZHIsIHN0LnN0X3NpemUpOworb3V0X2Nsb3NlX3RvOgorCWNsb3NlKHRvZmQpOworCWlmIChlcnIpCisJCXVubGluayh0byk7CitvdXRfY2xvc2VfZnJvbToKKwljbG9zZShmcm9tZmQpOworb3V0OgorCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdXRpbC5oIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuaAppbmRleCBjNjczZDg4Li4wZjViMmE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdXRpbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmgKQEAgLTQwMyw0ICs0MDMsNyBAQAogI2VuZGlmCiAjZW5kaWYKIAoraW50IG1rZGlyX3AoY2hhciAqcGF0aCwgbW9kZV90IG1vZGUpOworaW50IGNvcHlmaWxlKGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdmFsdWVzLmMgYi90b29scy9wZXJmL3V0aWwvdmFsdWVzLmMKaW5kZXggMWMxNWUzOS4uY2ZhNTVkNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYwpAQCAtMTY5LDYgKzE2OSw3IEBACiAJCQkJY291bnRlcndpZHRoW2pdLCB2YWx1ZXMtPnZhbHVlW2ldW2pdKTsKIAkJZnByaW50ZihmcCwgIlxuIik7CiAJfQorCWZyZWUoY291bnRlcndpZHRoKTsKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9yZWFkX3ZhbHVlc19fZGlzcGxheV9yYXcoRklMRSAqZnAsCg==